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

Reply via email to