當您使用可變移位計數(在 CL 中)在 x86 上移位值時,移位計數取模目標運算元的位大小。但是是否存在沒有這種模運算的體系結構,即如果我移位得比運算元中的位數還多,則運算元變為零(如果我移位無符號)?
uj5u.com熱心網友回復:
對于 8 位和 16 位運算元大小,x86-64 標量移位是 mod-32。只有 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 轉換。
uj5u.com熱心網友回復:
86具有非模轉變為好,如果你考慮MMX / SSE2 / AVX2 psrlq,psllw等
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/347741.html
上一篇:添加華為套件時出現“Couldnotfindcom.huawei.hms:location:6.0.0.302”錯誤
