[Issue 6505] Wrong code for expression involving 8 floats, only with -O

d-bugmail at puremagic.com d-bugmail at puremagic.com
Tue Aug 16 06:37:52 PDT 2011


http://d.puremagic.com/issues/show_bug.cgi?id=6505


bearophile_hugs at eml.cc changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |bearophile_hugs at eml.cc


--- Comment #1 from bearophile_hugs at eml.cc 2011-08-16 06:37:50 PDT ---
Simplified a little:


double foo() {
    return 1.0;
}
void main() {
    double a = foo();
    double b = foo();
    double x = a*a + a*a + a*a + a*a + a*a + a*a + a*a +
               a*b + a*b;
    assert(x > 0);
}


---------------------------

Asm normal compilation:

_D4test3fooFZd    comdat
        fld1
        ret

__Dmain    comdat
L0:        enter    024h,0
        call    near ptr _D4test3fooFZd
        fstp    qword ptr -018h[EBP]
        call    near ptr _D4test3fooFZd
        fstp    qword ptr -010h[EBP]
        fld    qword ptr -018h[EBP]
        fmul    qword ptr -010h[EBP]
        fld    qword ptr -018h[EBP]
        fmul    qword ptr -010h[EBP]
        fld    qword ptr -018h[EBP]
        fmul    qword ptr -018h[EBP]
        fld    qword ptr -018h[EBP]
        fmul    qword ptr -018h[EBP]
        fld    qword ptr -018h[EBP]
        fmul    qword ptr -018h[EBP]
        fld    qword ptr -018h[EBP]
        fmul    qword ptr -018h[EBP]
        fld    qword ptr -018h[EBP]
        fmul    qword ptr -018h[EBP]
        fld    qword ptr -018h[EBP]
        fmul    qword ptr -018h[EBP]
        fdecstp
        fstp    qword ptr -024h[EBP]
        fld    qword ptr -018h[EBP]
        fmul    qword ptr -018h[EBP]
        faddp    ST(1),ST
        faddp    ST(1),ST
        faddp    ST(1),ST
        faddp    ST(1),ST
        faddp    ST(1),ST
        faddp    ST(1),ST
        faddp    ST(1),ST
        fld    qword ptr -024h[EBP]
        faddp    ST(1),ST
        fstp    qword ptr -8[EBP]
        fld    qword ptr -8[EBP]
        ftst
        fstsw    AX
        sahf
        fstp    ST
        ja    L7B
        mov    EAX,9
        call    near ptr _D4test8__assertFiZv
L7B:    xor    EAX,EAX
        leave
        ret

----------------------------

Asm compilation with -O:

_D4test3fooFZd    comdat
        fld    qword ptr FLAT:_DATA[00h]
        ret

__Dmain    comdat
L0:        sub    ESP,034h
        call    near ptr _D4test3fooFZd
        fstp    qword ptr 0Ch[ESP]
        call    near ptr _D4test3fooFZd
        fld    qword ptr 0Ch[ESP]
        fld    qword ptr 0Ch[ESP]
        fxch    ST2
        fstp    qword ptr 014h[ESP]
        fmul    qword ptr 014h[ESP]
        fxch    ST1
        fld    qword ptr 0Ch[ESP]
        fxch    ST1
        fmul    qword ptr 014h[ESP]
        fxch    ST1
        fmul    ST,ST(0)
        fld    qword ptr 0Ch[ESP]
        fmul    ST,ST(0)
        fld    qword ptr 0Ch[ESP]
        fmul    ST,ST(0)
        fld    qword ptr 0Ch[ESP]
        fmul    ST,ST(0)
        fld    qword ptr 0Ch[ESP]
        fmul    ST,ST(0)
        fld    qword ptr 0Ch[ESP]
        fmul    ST,ST(0)
        fdecstp
        fld    qword ptr 0Ch[ESP]
        fxch    ST1
        fstp    qword ptr [ESP]
        fmul    ST,ST(0)
        faddp    ST(1),ST
        faddp    ST(1),ST
        faddp    ST(1),ST
        faddp    ST(1),ST
        faddp    ST(1),ST
        faddp    ST(1),ST
        faddp    ST(1),ST
        fld    qword ptr [ESP]
        faddp    ST(1),ST
        ftst
        fstsw    AX
        fstp    ST
        sahf
        ja    L84
        mov    EAX,9
        call    near ptr _D4test8__assertFiZv
L84        add    ESP,034h
        xor    EAX,EAX
        ret

------------------------

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------


More information about the Digitalmars-d-bugs mailing list