Я написал простую совместную многопоточную библиотеку. В настоящее время я всегда сохраняю и восстанавливаю состояние fpu с fxsave
/fxrstor
при переключении в новый контекст. Но нужно ли это в соглашении вызова cdecl?Нужно ли здесь сохранять состояние FPU?
В качестве простого примера:
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;
}
Может компилятор делать какие-либо предположения о состоянии FPU после вызова yield()
?
Нет, обычное соглашение обязывает государство FPU быть пустым после входа и выхода (если явно не используется для возвращаемого значения). – Jester
Спасибо, у вас есть источник для этого? Я сам не мог найти об этом. Не нужно сохранять и восстанавливать 512-байтовый буфер каждый раз, чтобы действительно повысить производительность, и я хочу быть на 100% уверенным, что это не вызовет никаких проблем. – user5434231