![](/img/trans.png)
[英]What is the specific GCC flag that turns on immediate value propagation for inline assembly parameters?
[英]What is wrong with the parameters list in this GCC inline assembly?
我正在嘗試使用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;
整數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
該限制"[xn]"
在[xn] "[xn]" (n)
並沒有真正意義。 使用參數名稱或數字作為約束意味着“將該操作數放在與指定操作數相同的位置”。 因此,在這種情況下,你告訴GCC把[xn]
在相同的位置[xn]
這是毫無意義的,實際上並沒有給出有關操作類型的信息。
您需要使用另一種約束類型,例如"r"
作為寄存器操作數,這取決於匯編指令允許的內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.