0
我試圖使用GCC的擴展彙編語法嵌入以下彙編指令(臂狀結構):此GCC內聯彙編中的參數列表有什麼問題?
__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
充當既和出參數)
編譯器生成的ERR或:
../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下面的例子,但我不能找出問題。
我覺得它釘。 – hirschhornsalz
謝謝。所以,如果我正確地理解了這一點,第二個參數('xi')的''[xj]''只編譯b/c'[xj]'被定義爲'「= r」'?這就說得通了。但是,如果你看看我鏈接到的手冊頁,就有一個例子(在「GCC版本3.1以前」的文本中),其中'old'變量被分配了約束'「[result]」w/o這由之前的類型定義。這個怎麼用? – ysap
從GCC版本3.1開始,可以寫[姓名]而不是匹配約束的操作數。例如: 'asm(「cmoveq%1,%2,%[result]」 :[result]「= r」(result) :「r」(test),「r」(new) [結果]「(舊));' – ysap