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;
( inパラメータとoutj
パラメータの両方として機能することに注意してください)
コンパイラは次のエラーを生成します。
../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 コードの 1 行目と 3 行目です。
アセンブリ命令で入力パラメーターを明示的な定数に置き換えるn
と、正常にコンパイルされます。
__asm__("lsr %[xj], %[xj], 27" :
[xj] "=r" (j) :
[xi] "[xj]" (j)); // j = j >> 27
GCC マニュアルの例に従っていますが、問題がわかりません。