问题描述
在内联汇编中编写数学函数时,有没有办法告诉编译器“我使用 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 (将#修改为@)