我希望逻辑上将vshl
寄存器(64位)向左或向右移位任意数量的位,并将计数放在另一个寄存器中。 (不是组装时间常数。)
它包含整数值,我需要做的是将它们“移动”到寄存器内的正确位置。只应将零移入“末尾”的寄存器,因此这是一个逻辑移位,而不是算术。
我想移动整个寄存器而没有任何元素边界。
我考虑过使用vshr
和@RestController
public class ChatController
{
private static final Logger LOG = LoggerFactory.getLogger(ChatController.class);
@RequestMapping(value="/webhook", method=RequestMethod.POST, consumes="application/json")
public String onWebhookEvent(String event)
{
LOG.info("Received event {}",event);
return "test";
}
}
,但是它们将寄存器作为单独的SIMD元素而不是整个寄存器作为一个“值”。
答案 0 :(得分:2)
在准确查找how vshl
works时,我发现有一个使用64位元素大小的版本。
如果您想对整个128位q
寄存器进行位移,则会出现问题,但vshl
/ vshr
可以执行您想要的d
/ u64
{1}}注册,如果您使用vshl.u64 d1, d0, d7 @ d1 = d1<<d7
- 数据类型版本。
q
还可以使用MainActivity
个操作数,以并行处理两个压缩的64位值。
VSHL(由带符号的变量向左移动)获取向量中的每个元素,将它们从第二个向量的相应元素的最低有效字节移位一个值,并将结果放在目标向量中。 如果移位值为正,则操作为左移。否则,这是一个正确的转变。
对于即时转换,左右各有单独的助记符。 (例如vshr.u64 Dd, Dm, #imm
与vshl.u64 Dd, Dm, #imm
)。不过,这可能只是针对同一操作码的正或负立即数的不同汇编语法。