簡體   English   中英

這個GCC內聯程序集的參數列表有什么問題?

[英]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

ijn聲明為int i, j, n;整數int i, j, n;

(請注意, j用作inout參數)

編譯器生成錯誤:

../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手冊中的示例進行操作 ,但無法確定問題所在。

該限制"[xn]"[xn] "[xn]" (n)並沒有真正意義。 使用參數名稱或數字作為約束意味着“將該操作數放在與指定操作數相同的位置”。 因此,在這種情況下,你告訴GCC把[xn]在相同的位置[xn]這是毫無意義的,實際上並沒有給出有關操作類型的信息。

您需要使用另一種約束類型,例如"r"作為寄存器操作數,這取決於匯編指令允許的內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM