我正在尝试使用 GCC 的扩展 asm 语法嵌入以下汇编指令(类似于 ARM 的架构):
__asm__("lsr %[xj], %[xj], %[xn]" :
[xj] "=r" (j) :
[xi] "[xj]" (j) , [xn] "[xn]" (n)); // j = j >> n
i
, j
, 和n
被声明为整数int i, j, n;
(请注意,j
它同时用作in和out参数)
编译器生成错误:
../src/fft2dlib.c:55:5: error: matching constraint references invalid operand number
../src/fft2dlib.c:53:3: error: matching constraint references invalid operand number
其中第 53 行和第 55 行是上述 asm 代码的第一行和第三行。
当我n
在汇编指令中用显式常量替换输入参数时,它编译得很好:
__asm__("lsr %[xj], %[xj], 27" :
[xj] "=r" (j) :
[xi] "[xj]" (j)); // j = j >> 27
我正在遵循GCC 手册中的示例,但我无法找出问题所在。