保留 FPU 堆栈用于内联汇编中的破坏

问题描述

在内联汇编中编写数学函数时,有没有办法告诉编译器“我使用 FPU 堆栈的 2 个额外插槽”?

例如一个 exp 实现可能是这样的:

    asm("fldl2e\n"
        "fmulp\n"
        "fld1\n"
        "fld %%st(1)\n"
        "fprem\n"
        "f2xm1\n"
        "faddp\n"
        "fscale\n"
        "fstp %%st(1)"
        : "=t"(res)
        : "0"(exponent));

但是编译器不知道这个函数使用的最大堆栈是 3 个槽,并且可能在加载指数之前已经用其他 6 个值填充它,没有足够的计算。
只是“clobber st(2),st(1),st(0)”是正确的方法吗,
或者有不同的/更好的方法来做到这一点

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)