【发布时间】:2019-10-24 20:03:46
【问题描述】:
我一直在研究 MMX/SSE,我想知道。有无符号字节和字的压缩饱和减法指令,但不是双字。
有没有办法做我想做的事,或者如果没有,为什么没有?
【问题讨论】:
-
您可以使用比较和掩码。至于为什么它不作为单个指令存在,这是任何人的猜测。
-
您的源值是有符号还是无符号?如果输入是无符号的,这相当容易,如果它们是有符号的,那就有点棘手了。
-
查看 LLVM 如何自动矢量化 Rust
u32.saturating_sub(): godbolt.org/z/huP4PX - range-shift 使用 PXOR 进行签名,然后使用 PCMPGTD 进行签名比较,然后使用 AND/ANDN/OR 对 PSUBD 应用饱和度结果。我不确定这是最优的;它应该只需要 PAND,因为无符号减法的唯一饱和情况是饱和到 0。 -
您可以使用
subus(a, b) == max(a, b) - b- E:SSE4.1 很好,MMX/SSE 是不是字面上只有 MMX 和 SSE 的意思? -
@harold:哦,是的,对于
pmaxud,SSE4.1 非常好。
标签: assembly x86 sse mmx saturation-arithmetic