С одним небольшим исключением (x == + 0.0f) вы можете сгенерировать целочисленную маску, используя инструкцию sign
:
_mm_sign_epi32(_mm_set1_epi32(1), x)
Это отрицает 1, если x <0, но выдает знак == 0, когда x == 0. </p>
Если 0 не разрешено, x можно сделать ненулевым, указав 0<mask<0x80000000
.
auto s=_mm_set1_epi32(1);
auto y=_mm_or_si128(x, s); // fix for x==0
s=_mm_sign_epi32(s, y);