-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