schwartz@shire.cs.psu.edu (Scott Schwartz) (07/05/89)
The following makes gcc-1.35 dump core when invoked with -O:
/* -*- C -*- */
typedef unsigned long ulong;
inline void quot_rem_64 (ulong arg1, ulong arg2, ulong arg3,
ulong *arg4, ulong *arg5)
{
register ulong upper = 0, lower = arg1;
asm ("mulul %2, %0:%1" :
"=d" (upper), "=d" (lower) :
"dmn" (arg2), "0" (upper), "1" (lower));
asm ("divul %2, %0:%1" :
"=d" (upper), "=d" (lower) :
"dmn" (arg3), "0" (upper), "1" (lower));
*arg4 = lower;
*arg5 = upper;
}
main ()
{
register ulong a = ~0, b = 4, c = 8;
ulong d, e;
quot_rem_64 (a, b, c, &d, &e);
printf ("%u * %u / %u = %u, %u\n", a, b, c, d, e);
}
psusun03% gcc -v -O qr.c
gcc version 1.35
/usr/local/lib/gcc-cpp -v -undef -D__GNUC__ -Dmc68000 -Dsun -Dunix -D__mc68000__ -D__sun__ -D__unix__ -D__OPTIMIZE__ -D__HAVE_68881__ -Dmc68020 qr.c /tmp/cca03707.cpp
GNU CPP version 1.35
/usr/local/lib/gcc-cc1 /tmp/cca03707.cpp -quiet -dumpbase qr.c -O -version -o /tmp/cca03707.s
GNU C version 1.35 (68k, MIT syntax) compiled by CC.
gcc: Program cc1 got fatal signal 11.
psusun03% dbx /usr/local/lib/gcc-cc1
Reading symbolic information...
Read 47159 symbols
(dbx) where
canon_hash(x = 0xbe2cc, mode = SImode), line 1404 in "cse.c"
cse_insn(insn = 0xbe228), line 2915 in "cse.c"
cse_basic_block(from = 0xbdf70, to = (nil)), line 3654 in "cse.c"
cse_main(f = 0xbdf70, nregs = 63), line 3614 in "cse.c"
rest_of_compilation(decl = 0xc5e08), line 1322 in "toplev.c"
finish_function(), line 3647 in "c-decl.c"
yyparse(), line 230 in "c-parse.y"
compile_file(name = 0xefffaf7 "/tmp/cca03707.cpp"), line 1019 in "toplev.c"
main(argc = 9, argv = 0xefffa68, envp = 0xefffa90), line 1795 in "toplev.c"
(dbx) quit
--
Scott Schwartz <schwartz@shire.cs.psu.edu>