------- Comment #23 from guenter at roeck-us dot net  2006-08-29 20:23 -------
Here is a test case:

double calc(double val, double *result)
{
        double f = val - (double)((int)val);
        *result = val - f;
        if (!val)
                return val - *result;
        else
                return val;
}

Compile with:
    gcc testc2.c -S -mcpu=8548 -mfloat-gprs=double -o testc2.S

Generates the following (bad) code:
        ....
.L2:
        evldd 0,24(31)
        evstdd 0,40(31)
.L4:
        evldd 9,40(31)
        stw 9,48(31)
        stw 10,52(31)
        lwz 9,48(31)
        ....

"evldd 9,40(31)" is generated from "evldd%X1 %0,%y1".
Unfortunately, I don't know enough to have a clue 
what needs to be changed to fix this, though I did find 
out that simply replacing "evldd%X1 %0,%y1" with 
"evldd%X1 %0,%y1\;evmergelo %L0,%0,%0" is insufficient
and causes problems elsewhere.

Should I file a new bug or reopen this one ? 


-- 

guenter at roeck-us dot net changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |guenter at roeck-us dot net


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=27287

Reply via email to