This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c/42522] [m68k] Wrong code generated with -O2/-O3
- From: "nospamname at web dot de" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 29 Dec 2009 18:52:27 -0000
- Subject: [Bug c/42522] [m68k] Wrong code generated with -O2/-O3
- References: <bug-42522-17839@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- 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