https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92190
--- Comment #1 from Uroš Bizjak <ubizjak at gmail dot com> --- It looks that we got partial saves of MS ABI functions all wrong. According to Table 4 on page 10 of [1], the MS ABI callee saves only lower 128bit parts of XMM6 - XMM15. So, there is no guarantee that upper parts of XMM6 - XMM15 will be saved. This means, that vzeroupper insertion has no effect on MS ABI functions, and can be emitted without concern on how upper parts of YMM/XMM registers are passed over function calls. Also, the problem with "precise" vzeroupper description is, that clobber now forces save of callee-saved register, so XMM6 - XMM15 are always saved, as soon as vzeroupper is emitted. Someone with access to authoritative documentation should confirm the above. [1] https://www.agner.org/optimize/calling_conventions.pdf