Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 用寄存器值替换常量的程序集_C++_Assembly_Arm_Inline Assembly_Neon - Fatal编程技术网

C++ 用寄存器值替换常量的程序集

C++ 用寄存器值替换常量的程序集,c++,assembly,arm,inline-assembly,neon,C++,Assembly,Arm,Inline Assembly,Neon,我不是组装专家,所以这可能很简单 如果我有一条指令,它期望一个常量值作为参数,如下所示: VQSHRN.U32 d0,q0,#16 如何用寄存器中的值替换#16,例如r0?这个指令甚至可能允许您这样做,但我还没有找到关于该功能的文档。有没有一种正常的方法可以做到这一点 在这种情况下,我正在编写ARMV7程序集,并将其与C++代码进行联机。谢谢。正如@Michael所指出的,VQRSHL是这里合适的按寄存器移位指令——幸运的是,右边正好是负左边。我首先使用VDUP将r0转换为适当的移位值向量,然

我不是组装专家,所以这可能很简单

如果我有一条指令,它期望一个常量值作为参数,如下所示:

VQSHRN.U32 d0,q0,#16
如何用寄存器中的值替换
#16
,例如
r0
?这个指令甚至可能允许您这样做,但我还没有找到关于该功能的文档。有没有一种正常的方法可以做到这一点


在这种情况下,我正在编写ARMV7程序集,并将其与C++代码进行联机。谢谢。

正如@Michael所指出的,
VQRSHL
是这里合适的按寄存器移位指令——幸运的是,右边正好是负左边。我首先使用
VDUP
r0
转换为适当的移位值向量,然后使用
VQMOVN
进行缩小。所有这些都可以作为内部函数使用,以帮助防止内联装配的不洁,如下所示:

vshift = vdupq_n_s32(-shift);
result = vqmovn_u32(vqrshlq_u32(data, vshift));

请看@Michael,谢谢你的链接。除了使用寄存器中的移位外,我正在尝试执行上述指令。我想尽量少用说明书。有什么建议吗?我基本上需要一个向量舍入缩小饱和移位寄存器中的值的权利。感谢您指出的具体指示。这应该行得通。仅供参考,我试图复制的C代码是#define CV_desccale(x,n)((x)+(1>(n))