The Windows version of the x86_64 ABI specifies that registers
xmm6-xmm15 be callee saved.
I'm building a .dll with MinGW used by an .exe from a different compiler.
I debugged a failure to the point of determining that the code produced
by MinGW clobbers xmm9 in violation of the ABI.
I tried a bunch of Google searches, expecting this problem would be
discussed somewhere, but couldn't find it.
I'm using a downloaded binary copy of MinGW for x86_64. I expect I will
need to download source code and figure out how to build it, in order to
deal with this problem.
But I don't know where to look in the gcc source code included in MinGW
for the registers that should be callee saved.
1) Can you tell me where callee saved registers are specified in the gcc
source code.
2) I tried adding "-f-call-saved-xmm9" to the g++ command to see if that
would fix the problem for one register. That compile aborted with
internal compiler error: in copyprop_hardreg_forward_1, at regrename.c:1590
Is that switch so incorrect? I understand it would generate .obj code
incompatible with anything generated without that switch. But why
should it crash gcc?