【发布时间】:2016-03-12 22:03:18
【问题描述】:
我写了一个简单的协作多线程库。目前,在切换到新上下文时,我总是使用 fxsave / fxrstor 保存和恢复 fpu 状态。但这在 cdecl 调用约定中是必要的吗?
举个简单的例子:
float thread_using_fpu(float x)
{
float y = x / 2; // do some fpu operation
yield(); // context switch, possibly altering fpu state.
y = y / 2; // another fpu operation
return y;
}
编译器是否可以在调用yield() 后对 FPU 状态做出任何假设?
【问题讨论】:
-
不,通常的约定要求 FPU 状态在进入和退出时为空(除非明显用于返回值)。
-
谢谢,你有这个的来源吗?我自己找不到太多关于这个的信息。不必每次都保存和恢复 512 字节的缓冲区确实有助于提高性能,我想 100% 确定这不会导致任何问题。