(a * b)/ 256和MMX

时间:2012-06-22 13:44:40

标签: assembly sse mmx

我想知道是否可以在MMX-Register中并行使用四个值进行以下计算:

(a*b)/256

其中 a 是带符号的字, b 是无符号值(混合因子),范围为0-256

我认为我的问题是我不确定 pmullw pmulhw 将如何帮助我完成这项任务。

1 个答案:

答案 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);