我不是 assembly 专家,所以这可能很简单。
如果我有一条指令需要一个常量值作为参数,如下所示:
VQSHRN.U32 d0,q0,#16
如何用寄存器中的值替换#16
,例如r0
?该说明甚至可能允许您这样做,但我还没有找到有关该功能的文档。有这样做的常规方法吗?
如果这很重要,我正在编写 ARMv7 程序集并将其与 C++ 代码内联。谢谢。
最佳答案
正如@Michael 所指出的,VQRSHL
是这里合适的逐寄存器移位指令 - 幸运的是,右恰好是负左。我会先使用 VDUP
将 r0
转换为适当的移位值 vector ,然后使用 VQMOVN
进行缩小。所有这些都可以作为内部函数使用,以帮助避免内联汇编的麻烦,就像这样:
vshift = vdupq_n_s32(-shift);
result = vqmovn_u32(vqrshlq_u32(data, vshift));
关于c++ - 程序集用寄存器值替换常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21762977/