Как я могу умножить два подписанных 32-разрядных целых числа, используя набор инструкций SSE2?Два 32-разрядных знаковых целых числа Умножение с использованием SSE2
-4
A
ответ
0
pmuldq
, к сожалению, инструкция SSE4.1, но SSE2 имеет pmuludq
и с помощью «преобразований без знака более высокого порядок продукта в знаковый» алгоритм (находится в Делайте главе Хакера 8.3) высокая DWORD может быть исправлена. Конечно, нижний лев уже правильный.
Вот моя попытка в этом в asm, я не тестировал это вообще.
movdqa xmm2, xmm0
psrad xmm0, 31
movdqa xmm3, xmm1
psrad xmm1, 31
pand xmm2, xmm0
pand xmm3, xmm1
paddd xmm2, xmm3
pmuludq xmm0, xmm1
pshufd xmm2, xmm2, 0xB1
psubd xmm0, xmm2
В начале слова, отличные от тех, которые он умножает, должны быть равны нулю. Это выглядит немного иначе, чем в Hacker's Delight, потому что я перестроил последний бит алгоритма на p = p - (t1 + t2)
(сохраняет тасовку).
В чем? сборка x86? Собственные компиляторы? – Mysticial
Полный 64-битный результат или только самый низкий dword? – harold
для сборки x86, а также полный 64-разрядный rsult – user2003619