如何使用 SSE2 指令集将两个有符号 32 位整数相乘?
问问题
389 次
1 回答
0
pmuldq
不幸的是,它是 SSE4.1 指令,但 SSE2 具有pmuludq
并使用“将无符号高阶乘积转换为有符号”算法(在 Hacker's Delight 第 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)
(保存了随机播放)。
于 2013-05-16T19:12:32.053 回答