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.

Reply via email to