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