https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92905

--- Comment #4 from Alexander Monakov <amonakov at gcc dot gnu.org> ---
Perhaps only xmm0 is problematic, as making xmm0 unused by adding a dummy
argument brings back the old spill-free result:

float my_copysign(float dummy, float x, float y)
{
    union {float f; unsigned i;} ux = {x}, uy ={y};
    ux.i &= 0x7fffffff;
    ux.i |= 0x80000000 & uy.i;
    return ux.f;
}

float f(float dummy, float x)
{
    union {float f; unsigned i;} u = {x};
    u.i |= 0x80000000;
    return u.f;
}

Reply via email to