https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83292
--- Comment #6 from Jakub Jelinek <jakub at gcc dot gnu.org> --- The i?86 ABI never passes anything in %st* registers, so in theory __builtin_apply_args could through some target hook or similar do the %mm0/%mm1 stores conditional on whether the current function has any arguments passed in MMX registers, and store before those also a flag whether any of them were, then at __builtin_apply time check that flag and only conditionally load the regs. But with the return, I don't see how it is implementable at all, we don't know if the function __builtin_apply calls returns in %mm0 or %st(0), so we don't know what to save. Is there a way to query if the CPU is in MMX or 387 state? How do we handle functions that take %mm0/%mm1 args and returns float/double/long double in %st(0)? If that is not solveable, perhaps we should either declare __builtin_{apply*,return} unsupported with MMX functions and simply ignore the mmx registers in there say through a target hook.