哪些体系结构具有模/非模移位



在x86上使用可变移位计数(CL(对值进行移位时,移位计数取目标操作数的位大小的模。但是,有没有一种体系结构没有这种模运算,即如果我的移位量超过操作数中的位,则操作数变为零(如果我移位的是无符号的(?

x86-64标量移位是mod-32,用于8位和16位操作数大小。只有32位和64位移位是操作数大小的模。(8086中根本不存在模,因此能够移出16位寄存器中的所有位可能是186的一个相关的向后兼容问题。但对于386和amd64这样的新扩展,不存在兼容性问题,因此它们可以定义语义,允许在没有额外条件的情况下使用更窄的桶形移位器。(

正如Alex所提到的,x86 SIMD移位使移位计数饱和,当>=元素大小。例如,pslld xmm0, xmm1(是的,他们查看源的低位元素的全宽,而不仅仅是低位字节。(


ARM使用移位计数寄存器低位字节中的所有位进行可变计数移位。即模降到0..255,然后饱和到0..32。(有趣的事实:对于立即移位,可以将LSR编码1..32,但只能将LSL编码0..31(

IDK其他ISA做什么;可能有一些类似x86 SIMD移位。

x86也有非模移位,如果考虑MMX/SSE2/AVX2psrlqpsllw

最新更新