Conv::C and Conv::PreserveMost mix badly on Windows x64

The Windows x64 calling convention preserves XMM6:XMM15.

Unfortunately, that means that if I call a https://clang.llvm.org/docs/AttributeReference.html#preserve-most function from an x64 C-ABI function, the caller has to save 10 xmm registers, which makes the

attempts to make the code in the caller as unintrusive as possible

goal of that convention not met at all :slightly_frowning_face:

Would it be reasonable for preserve_most to also preserve those registers on Windows x64?

Or is the expectation that people just don’t use preserve_most on Windows x64? Or that they use the SysV ABI for most code, rather than the native C convention? (fastcc also seems to preserve these registers on 64-bit Windows.)