我想知道是否可以使用 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.
如果您知道 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);