Сперва использовал такой код:
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?