Вопрос к знатокам SSE! Задачка следущая: в регистре хmm0 находятся 4 числа (32bit, packed) свободных регистров осталось 4 вопрос: как можно посчитать сумму 4 чисел за минимальное кол-во инструкций (и тактов)! Заранее спасибо!
asmfan haddps - это SSE3. Ты уверен, что оно уже у всех есть? В любом случае стоило бы на всякий случай предусмотреть отдельный вариант (а мало ли? ) Сильно быстро, правдо не получится, придется использовать shufps или что-то в этом роде.
Блин, хотел movsldup коварно применить, но она тоже SSE3 Ну, навскидку примерно так: Код (Text): movaps xmm1, xmm0 shufps xmm1, xmm1, 00011011b addps xmm0, xmm1 movhlps xmm1, xmm0 addps xmm0, xmm1 а насчет эффективности - сейчас здесь появится leo и в очередной раз доходчиво объяснит, что я дурак, и почему Но если есть уверенность в наличии SSE3, то тогда, конечно, да - Код (Text): haddps xmm0, xmm0 haddps xmm0, xmm0 и все дела.
Следующая на очереди задачка: xmm0 = 1.0, 2.0, 3.0, 4.0 xmm1 = 5.0, 6.0, 7.0, 8.0 Требуется получить разницу (1.0 - 5.0 и 4.0 - 8.0) крайних элементов и сумму (2.0 + 6.0 и 3.0 + 7.0) внутренних элементов Результат должен быть xmm0 = -4.0, 8.0, 10.0, -4.0 ЗЫ минздрав предупреждает - SSE3 низзя употреблять!!!!
Код (Text): align 16 xmask dd 0,80000000h,80000000h,0 ;ptr equ ;fasm xorps xmm1,qword ptr [xmask] ;= изменение знака двух средних чисел xmm1 subps xmm0,xmm1