This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug c/42522] [m68k] Wrong code generated with -O2/-O3



------- Comment #8 from nospamname at web dot de  2009-12-29 18:52 -------
I have now find out with cflag -m68000 work with -O3.
But it work not with -m68020 or -m68040 or -m68060 

Here is a standalone testcode and output with -S

-----

struct test{
long dummy;
unsigned long buf;
};

struct unaligned_32 { unsigned long l; } __attribute__((packed));


static int flv_probe(struct test *p)
{
    const unsigned char *d;

    d = p->buf;
    if (d[0] == 'F' && d[1] == 'L' && d[2] == 'V' && d[3] < 5 && d[5]==0 &&
(((const struct unaligned_32 *) (d+5))->l)>8) {

        return 100;
    }
    return 0;
}

int main(int argc, char **argv)
{
printf("%ld\n",flv_probe(argc));
}

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

Mit dem 4.5.0 vom 24.12 bekomme ich mit -O3 den Outpout .Code geht nicht.

(CFLAGS -m68060 -S -O3)

#NO_APP
    .text
LC0:
    .ascii "%ld\12\0"
    .even
    .globl  _main
_main:
    link.w a5,#0
    jsr ___main
    clr.l 12(a5)
    move.l #LC0,8(a5)
    unlk a5
    jra _printf 

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

(CFLAGS -m68060 -S -O1)


#NO_APP
    .text
LC0:
    .ascii "%ld\12\0"
    .even
    .globl  _main
_main:
    link.w a5,#0
    jsr ___main
    move.l 8(a5),a0
    move.l 4(a0),a0
    cmp.b #70,(a0)
    jne L3
    cmp.b #76,1(a0)
    jne L4
    cmp.b #86,2(a0)
    jne L5
    cmp.b #4,3(a0)
    jhi L6
    tst.b 5(a0)
    jne L7
    move.l 5(a0),d0
    moveq #8,d1
    cmp.l d0,d1
    jcs L8
    clr.l d0
    jra L2
L3:
    clr.l d0
    jra L2
L4:
    clr.l d0
    jra L2
L5:
    clr.l d0
    jra L2
L6:
    clr.l d0
    jra L2
L7:
    clr.l d0
    jra L2
L8:
    moveq #100,d0
L2:
    move.l d0,-(sp)
    pea LC0
    jsr _printf
    addq.l #8,sp
    unlk a5
    rts 

#NO_APP
    .text
LC0:
    .ascii "%ld\12\0"
    .even
    .globl  _main
_main:
    link.w a5,#0
    move.l a2,-(sp)
    move.l 8(a5),a2
    jsr ___main
    move.l 4(a2),a0
    cmp.b #70,(a0)
    jeq L10
L7:
    moveq #0,d0
    move.l d0,12(a5)
    move.l #LC0,8(a5)
    move.l -4(a5),a2
    unlk a5
    jra _printf
L10:
    cmp.b #76,1(a0)
    jne L7
    cmp.b #86,2(a0)
    jne L7
    cmp.b #4,3(a0)
    jhi L7
    tst.b 5(a0)
    jne L7
    moveq #0,d1
    move.b 6(a0),d1
    swap d1
    clr.w d1
    moveq #0,d0
    move.b 7(a0),d0
    lsl.l #8,d0
    or.l d1,d0
    or.b 8(a0),d0
    moveq #8,d1
    cmp.l d0,d1
    jcc L7
    moveq #100,d0
    move.l d0,12(a5)
    move.l #LC0,8(a5)
    move.l -4(a5),a2
    unlk a5
    jra _printf 

------------------------------------------------
(CFLAGS -m68000 -S -O3)

#NO_APP
    .text
LC0:
    .ascii "%ld\12\0"
    .even
    .globl  _main
_main:
    link.w a5,#0
    move.l a2,-(sp)
    move.l 8(a5),a2
    jsr ___main
    move.l 4(a2),a0
    cmp.b #70,(a0)
    jeq L10
L7:
    moveq #0,d0
    move.l d0,12(a5)
    move.l #LC0,8(a5)
    move.l -4(a5),a2
    unlk a5
    jra _printf
L10:
    cmp.b #76,1(a0)
    jne L7
    cmp.b #86,2(a0)
    jne L7
    cmp.b #4,3(a0)
    jhi L7
    tst.b 5(a0)
    jne L7
    moveq #0,d1
    move.b 6(a0),d1
    swap d1
    clr.w d1
    moveq #0,d0
    move.b 7(a0),d0
    lsl.l #8,d0
    or.l d1,d0
    or.b 8(a0),d0
    moveq #8,d1
    cmp.l d0,d1
    jcc L7
    moveq #100,d0
    move.l d0,12(a5)
    move.l #LC0,8(a5)
    move.l -4(a5),a2
    unlk a5
    jra _printf 


-- 


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]