-4
如何使用SSE2指令集乘以兩個帶符號的32位整數?兩個32位有符號整數使用SSE2相乘
如何使用SSE2指令集乘以兩個帶符號的32位整數?兩個32位有符號整數使用SSE2相乘
pmuldq
不幸的是,SSE4.1指令,但SSE2有pmuludq
並使用「轉換無符號更高階產品簽名」算法(可在Hacker's Delight章節8.3中找到)高dword可以修復。低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的Delight有點不同,因爲我將算法的最後一位重新排列爲p = p - (t1 + t2)
(保存洗牌)。
在什麼? x86彙編?編譯器內部函數? – Mysticial
完整的64位結果或只是最低的雙字?用於x86彙編的 – harold
,還需要完整的64位rsult – user2003619