我想知道是否可以使用 MMX 寄存器中并行的四个值进行以下计算:
(a*b)/256
其中 a 是有符号单词,b 是 0-256 范围内的无符号值(混合因子)
我认为我的问题是我不确定pmullw和pmulhw如何(或是否)帮助我完成这项任务。
最佳答案
如果您知道 a*b 不会溢出带符号的 16 位字段,则可以使用 pmullw(内在 _mm_mullo_pi16
或 SSE 内在 _mm_mullo_epi16
)然后右移 8 以除以 256。
哪里
MMX:
__m64 a, b;
...
a = _mm_mullo_pi16 (a, b);
a = _mm_srli_pi16 (a, 8);
SSE2:
__m128i a, b;
...
a = _mm_mullo_epi16 (a, b);
a = _mm_srli_epi16 (a, 8);
关于assembly - (a*b)/256 和 MMX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11157404/