使用 MMX 汇编指令的乘法加左移操作
我正在寻找进行 shl(mult(var1,var2),1)
操作,其中 mult
乘以 var1
和 var2(均为 16 位有符号整数)和
shl
对乘法结果进行算术左移。如果发生上溢或下溢且 mult(-32768,-32768)=2147483647
,结果必须是饱和的,即 int32 max 或 int32 min。
我需要以一种有效的方式对多个值进行此操作,我认为使用 MMX/SSE 指令集。我想制作 mult(sign_extension(var1)
, shl(sign_extension(var2)))
但我刚刚发现没有 MMX mult()
存在饱和版本。你知道还有其他方法可以得到它吗?
I am looking for doing shl(mult(var1,var2),1)
operation, where mult
multiplies var1
and var2
(both are 16-bit signed integers) and shl
shifts left arithmetically the multiplication result. Result must be saturated, i.e., int32 max or int32 min if overflow or underflow occurs and mult(-32768,-32768)=2147483647
.
I need to make this op for multiple values in an efficient way for which I think using MMX/SSE instruction set. I though about making mult(sign_extesion(var1)
, shl(sign_extension(var2)))
but I've just discovered no MMX mult()
saturation version exists. Do you know any other way to get it?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

我认为以下内容应该适合您。只有一种潜在的溢出情况 (
SHRT_MIN * SHRT_MIN
),它会显式处理这种情况:I think the following should work for you. There is only one potential overflow case (
SHRT_MIN * SHRT_MIN
) and it handles this explicitly: