Я ищу наиболее эффективный метод отображения знака на всех четырех поплавках, упакованных в регистр SSE.
Я не нашел неотъемлемого элемента для этого в руководстве по разработке программного обеспечения Intel Architecture. Ниже приведены те вещи, которые я уже пробовал.
Для каждого случая я зацикливал код на 10 миллиардов раз и получил обозначение стены. Я пытаюсь хотя бы совместить 4 секунды, это требует моего подхода, отличного от SIMD, который использует только унарный оператор минус.
[48 сек.] _mm_sub_ps( _mm_setzero_ps(), vec );
[32 сек] _mm_mul_ps( _mm_set1_ps( -1.0f ), vec );
[9 сек]
union NegativeMask { int intRep; float fltRep; } negMask; negMask.intRep = 0x80000000; _mm_xor_ps( _mm_set1_ps( negMask.fltRep ), vec );
Компилятор gcc 4.2 с -O3. Процессор - это Intel Core 2 Duo.