2

我想知道是否可以使用 MMX 寄存器中的四个并行值进行以下计算:

(a*b)/256

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

I think my problem is that I'm not sure about how (or if) pmullw and pmulhw will help me with this task.

4

1 回答 1

2

如果您知道 a*b 不会溢出有符号的 16 位字段,那么您可以使用 pmullw(intrinsic_mm_mullo_pi16或 SSE intrinsic _mm_mullo_epi16)然后右移 8 以除以 256。

在哪里

MMX:

__m64 a, b;
...
a = _mm_mullo_pi16 (a, b);
a = _mm_srli_pi16 (a, 8);

上交所2:

__m128i a, b;
...
a = _mm_mullo_epi16 (a, b);
a = _mm_srli_epi16 (a, 8);
于 2012-06-22T19:19:26.187 回答