我想知道是否可以在MMX-Register中并行使用四个值进行以下计算:
(a*b)/256
其中 a 是带符号的字, b 是无符号值(混合因子),范围为0-256
我认为我的问题是我不确定 pmullw 和 pmulhw 将如何帮助我完成这项任务。
答案 0 :(得分:2)
如果您知道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);