簡體   English   中英

gcc內聯匯編函數,可以掩蓋所有浮點寄存器

[英]gcc inline assembly function that clobbers all the floating-point registers

我正在嘗試編寫一個asm語句( GCC中的內聯匯編),該語句僅調用某些函數,該函數在浮點寄存器中返回一個值且沒有操作數,但可能會破壞所有浮點寄存器。

asm("call *%1"
    : "=t"(result_)
    : "d"(code_.data())
    : "memory", "cc", "ax", "%st(1)", "%st(2)", "%st(3)", "%st(4)", "%st(5)", "%st(6)", "%st(7)"
    );

我的問題是我也無法告訴匯編程序,也正在破壞頂級浮點寄存器%st(0) ,因為我無法在障礙列表中指定"%st(0)" (或"%st" )(結果出現編譯錯誤)。

您正在%st(0)中返回結果; 這就是t約束的含義。 因此,編譯器知道它已被修改。

我不確定為什么您的GCC不能將%st(0)%st識別為問題清單中的名稱,但是在這種情況下這不會引起問題。

Apple clang版本4.0(tags / Apple / clang-418.0.60)甚至在=t作為輸出約束的情況下,也接受了clobber列表中的%st

暫無
暫無

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

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