MSVC 17.9 и POPCNT
От: nodir.temir https://github.com/tnodir
Дата: 20.02.24 16:09
Оценка:
Сперва использовал такой код:
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?
msvc popcnt
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.