Сперва использовал такой код:
int bitCount(quint32 u)
{
return __popcnt(u);
}
Но т.к. POPCNT не поддерживается процессором Core 2 Duo, то заменил на:
int bitCount(quint32 u)
{
u = u - ((u >> 1) & 0x55555555);
u = (u & 0x33333333) + ((u >> 2) & 0x33333333);
return ((u + (u >> 4) & 0xF0F0F0F) * 0x1010101) >> 24;
}
Недавно обновил MSVC на 17.9 и обнаружил, что код из bitCount() начал автоматически заменяться на POPCNT.
Заменил теперь на:
int bitCount(quint32 u)
{
const quint32 uCount = u - ((u >> 1) & 033333333333) - ((u >> 2) & 011111111111);
return ((uCount + (uCount >> 3)) & 030707070707) % 63;
}
Как можно обезопаситься на будущее, чтобы и этот код не был заменён на POPCNT?
Здравствуйте, nodir.temir, Вы писали:
NT>Как можно обезопаситься на будущее, чтобы и этот код не был заменён на POPCNT?
Скомпиляй себе один раз функцию как тебе надо в отдельный lib и прилинковывай его.
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Здравствуйте, nodir.temir, Вы писали:
NT>Я собираю Qt из исходников. Там тоже используется POPCNT.
Пропатчи (тупо search-n-replace или через define) сурсы перед сборкой чтоб использовалось своё название и будет слинковано то, что надо
Ну или жди пока пофиксят компилер.
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
https://learn.microsoft.com/en-us/visualstudio/releases/2022/release-notes#1791--visual-studio-2022-version-1791
"Fixed a bug where the libconcrt.lib used when static linking could contain an SSE 4.2 instruction that was illegal on older X64 systems."