我不是装配专家所以这可能很简单。
如果我有一个指令需要一个常量值作为参数,那么:
VQSHRN.U32 d0,q0,#16
如何将#16
替换为寄存器中的值,例如r0
?这条指令甚至可以允许你这样做,但我还没有找到关于这种能力的文档。有没有一种正常的方法呢?
如果这很重要,我正在编写ARMv7程序集并将其与c ++代码内联。感谢。
答案 0 :(得分:1)
正如@Michael所指出的那样,VQRSHL
是适当的逐位移位指令 - 幸运的是,正确的是正面消极。我首先使用VDUP
将r0
转换为适当的移位值向量,然后使用VQMOVN
进行缩小。所有这些都可以作为内在函数来帮助保持内联汇编的肮脏,如下所示:
vshift = vdupq_n_s32(-shift);
result = vqmovn_u32(vqrshlq_u32(data, vshift));