...one of the most highly
regarded and expertly designed C++ library projects in the
world.
— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards
"The FpCsr and the MxCsr register must be saved and restored before any call or return by any procedure that needs to modify them ..." [4].
MxCsr - "A callee that modifies any of the nonvolatile fields within MxCsr must restore them before returning to its caller. Furthermore, a caller that has modified any of these fields must restore them to their standard values before invoking a callee ..." [5].
FpCsr - "A callee that modifies any of the fields within FpCsr must restore them before returning to its caller. Furthermore, a caller that has modified any of these fields must restore them to their standard values before invoking a callee ..." [6].
"The MMX and floating-point stack registers (MM0-MM7/ST0-ST7) are preserved across context switches. There is no explicit calling convention for these registers." [7].
"The 64-bit Microsoft compiler does not use ST(0)-ST(7)/MM0-MM7". [8].
"XMM6-XMM15 must be preserved" [9]
"The control bits of the MxCsr register are callee-saved (preserved across calls), while the status bits are caller-saved (not preserved). The x87 status word register is caller-saved, whereas the x87 control word (FpCsr) is callee-saved." [10].