2013-05-16 4 views
-4

Как я могу умножить два подписанных 32-разрядных целых числа, используя набор инструкций SSE2?Два 32-разрядных знаковых целых числа Умножение с использованием SSE2

+0

В чем? сборка x86? Собственные компиляторы? – Mysticial

+0

Полный 64-битный результат или только самый низкий dword? – harold

+0

для сборки x86, а также полный 64-разрядный rsult – user2003619

ответ

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) (сохраняет тасовку).

 Смежные вопросы

  • Нет связанных вопросов^_^