【发布时间】:2012-05-23 15:41:12
【问题描述】:
我正在尝试使用 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 manual 中的示例,但我无法找出问题所在。
【问题讨论】:
标签: c gcc assembly inline-assembly