From my tests it seems that xmm2 and xmm3 are ignored by printf().
In linux it's necessary to set rax register with how many xmm registers are being used with printf. Maybe a try in windows.
Further tests show that compilers set (in compliance with the Windows ABI) the reg64 args, e.g. movsd rdx, xmm1. CRT printf uses rdx, r8, r9 internally but ignores the xmm regs.