繁体   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