【发布时间】:2018-02-03 18:41:12
【问题描述】:
我想将d 寄存器(64 位)逻辑左移或右移任意位数,计数在另一个寄存器中。 (不是汇编时间常数。)
它包含整数值,我需要做的是,将它们“移动”到寄存器内的正确位置。只有零应该在“结束”处移入寄存器,所以这是一个逻辑移位,而不是算术移位。
我想在没有任何元素边界的情况下移动整个寄存器。
我曾考虑过使用 vshl 和 vshr,但它们将寄存器作为单独的 SIMD 元素而不是整个寄存器作为一个“值”进行移位。
【问题讨论】:
-
对于初学者,您应该指定什么样的班次。整数还是浮点数?位、字节或向量元素?什么方向?您在参考手册中发现了什么,为什么还不够?到目前为止,这是一个糟糕的问题。
-
感谢@JohannesSchaub-litb 的反馈,我尝试更正并指定我的问题。
-
我没有足够的经验来回答。但我快速浏览了手册并找到了 VTRN,矢量转置。够了吗?
-
我认为您要求在没有元素边界的情况下转移整个寄存器。但尚不清楚您的移位计数是否始终是整数字节,或者它是否可以是任意位数。此外,您是否需要将移位计数作为运行时变量,或者它是否可以作为编译时常量。
-
是的@PeterCordes 这正是我所需要的。我只是无法用言语表达。我的移位计数是一个运行时变量,在位级别,而不是字节级别