SSE2 命令セットを使用して 2 つの符号付き 32 ビット整数を乗算するにはどうすればよいですか?
質問する
389 次
1 に答える
0
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
乗算するもの以外の dwords は、最初はゼロでなければなりません。p = p - (t1 + t2)
アルゴリズムの最後のビットを(saves a shuffle)に再配置したため、Hacker's Delight とは少し異なって見えます。
于 2013-05-16T19:12:32.053 に答える