我写了一个简单的协作式多线程库。当前,当切换到新上下文时,我始终使用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状态做出任何假设吗? 最佳答案
根据The SYSTEM V APPLICATION BINARY INTERFACE Intel386TM Architecture Processor Supplement,第3-12页:
因此,您不需要上下文切换它们。
另一个newer version这样说:
因此,您可能需要保存控制字。