我写了一个简单的协作式多线程库。当前,当切换到新上下文时,我始终使用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这样说:



因此,您可能需要保存控制字。

10-05 23:47