assembly - (a*b)/256 和 MMX

标签 assembly sse mmx

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

(a*b)/256

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

我认为我的问题是我不确定pmullwpmulhw如何(或是否)帮助我完成这项任务。

最佳答案

如果您知道 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/

相关文章:

操作码中的汇编段

c - 使用 SSE Intrinsics 进行大小为 100*100 的矩阵乘法

assembly - MMX 符号扩展

linux - 为什么我不能在这里使用注册?

c - 从汇编代码设计 C 函数

c - 如何使用 __m128i 执行逐元素左移?

c - 编译内联 MMX 汇编程序时出错 : Suffix or operands invalid

linux x86 tcp bind shellcode(GAS语法)bind()不返回零

c++ - float 乘法 : LOSING speed with AVX against SSE?