ado@NCIFCRF.GOV (Arthur David Olson) (12/27/88)
(We're running SunOS 4.0 on a Sun 3/110.)
Description:
Using gcc 1.32's -O option with code containing shorts sometimes fails.
Repeat-By:
In the code below, compiling without -O (at 1>>>>) yields the
correct output 10 (at 2>>>>); compiling with -O (at 3>>>>) yields
the incorrect output 0 (at 4>>>>). The output of "gcc -S" has been
appended for documentary purposes.
Script started on Mon Dec 26 20:43:23 1988
elsie$ cat try.c
static void
doit(p, x1, y1)
short * p;
{
p[0] = x1;
p[1] = y1;
}
int
main()
{
short s[2];
doit(s, 10, 20);
(void) printf("%d\n", s[0]);
return 0;
}
1>>>> elsie$ /usr/local/bin/gcc -v try.c
gcc version 1.32
/usr/local/lib/gcc-cpp -v -undef -D__GNUC__ -Dmc68000 -Dsun -Dunix -D__mc68000__ -D__sun__ -D__unix__ -D__HAVE_68881__ -Dmc68020 try.c /tmp/cca11913.cpp
GNU CPP version 1.32
/usr/local/lib/gcc-cc1 /tmp/cca11913.cpp -quiet -dumpbase try.c -version -o /tmp/cca11913.s
GNU C version 1.32 (68k, MIT syntax) compiled by GNU C version 1.32.
as -mc68020 /tmp/cca11913.s -o try.o
ld -e start -dc -dp /lib/crt0.o /lib/Mcrt1.o try.o /usr/local/lib/gcc-gnulib -lc
elsie$ a.out
2>>>> 10
3>>>> elsie$ /usr/local/bin/gcc -v -O try.c
gcc version 1.32
/usr/local/lib/gcc-cpp -v -undef -D__GNUC__ -Dmc68000 -Dsun -Dunix -D__mc68000__ -D__sun__ -D__unix__ -D__OPTIMIZE__ -D__HAVE_68881__ -Dmc68020 try.c /tmp/cca11919.cpp
GNU CPP version 1.32
/usr/local/lib/gcc-cc1 /tmp/cca11919.cpp -quiet -dumpbase try.c -O -version -o /tmp/cca11919.s
GNU C version 1.32 (68k, MIT syntax) compiled by GNU C version 1.32.
as -mc68020 /tmp/cca11919.s -o try.o
ld -e start -dc -dp /lib/crt0.o /lib/Mcrt1.o try.o /usr/local/lib/gcc-gnulib -lc
elsie$ a.out
4>>>> 0
elsie$ /usr/local/bin/gcc -S try.c
elsie$ cat try.s
#NO_APP
gcc_compiled.:
.text
.even
_doit:
link a6,#0
movel a6@(8),a0
movew a6@(14),a0@
movel a6@(8),a0
addqw #2,a0
movew a6@(18),a0@
L1:
unlk a6
rts
LC0:
.ascii "%d\12\0"
.even
.globl _main
_main:
link a6,#-4
pea 20:w
pea 10:w
movel a6,d0
subql #4,d0
movel d0,sp@-
jbsr _doit
movew a6@(-4),a0
movel a0,sp@-
pea LC0
jbsr _printf
clrl d0
jra L2
L2:
unlk a6
rts
elsie$ /usr/local/bin/gcc -S -O try.c
elsie$ cat try.s
#NO_APP
gcc_compiled.:
.text
.even
_doit:
link a6,#0
movel a6@(8),a0
movew a6@(12),a0@
movew a6@(18),a0@(2)
unlk a6
rts
LC0:
.ascii "%d\12\0"
.even
.globl _main
_main:
link a6,#-4
pea 20:w
pea 10:w
pea a6@(-4)
jbsr _doit
movew a6@(-4),a0
movel a0,sp@-
pea LC0
jbsr _printf
clrl d0
unlk a6
rts
elsie$ exit
script done on Mon Dec 26 20:44:11 1988
--
Arthur David Olson ado@ncifcrf.gov ADO is a trademark of Ampex.