------- Additional Comments From daney at gcc dot gnu dot org 2005-02-22 22:02 ------- The new 'C' test case will reproduce the bug on:
$ mipsel-linux-gcc -v Using built-in specs. Target: mipsel-linux Configured with: ../gcccvsmain/gcc/configure --target=mipsel-linux --with-sysroot=/usr/local/mipsel-linux-test --with-arch=mips32 --with-float=soft --prefix=/usr/local/mipsel-linux-test --with-system-zlib --enable-languages=c,c++,java Thread model: posix gcc version 4.0.0 20050222 (experimental) I have not been able to generate a 'C' test case that fails on 3.4.x. A similar java testcase failed on 3.3.1, but I have not tried the attached java case on 3.3.1. Here is the setup for failure: $ mipsel-linux-gcc -O3 -c tm.c $ mipsel-linux-gcc -O3 -c tm_driver.c $ mipsel-linux-gcc -o tm tm_driver.o tm.o Then on the host: #./tm The answer is: 3989327253662920704 Here is the setup for success: $ mipsel-linux-gcc -O0 -c tm.c $ mipsel-linux-gcc -O3 -c tm_driver.c $ mipsel-linux-gcc -o tm tm_driver.o tm.o Then on the host: # ./tm The answer is: 1109030400000 If we look at the relevent part of the disassembly we see: li $6,86376448 # 0x5260000 ori $6,$6,0x5c00 multu $2,$6 lw $28,16($sp) li $5,92340224 # 0x5810000 ori $5,$5,0x1392 lw $25,%call16(f4)($28) mflo $4 sw $4,24($sp) lw $4,%got($LC0)($28) madd $6,$3 The problem is that before the madd, we need to copy the contents of hi -> low and then clear hi to zero. This is not happening. -- What |Removed |Added ---------------------------------------------------------------------------- Known to fail| |4.0.0 3.4.3 3.3.1 Summary|MIPS wrong-code for 64-bit |MIPS wrong-code for 64-bit |multiply from java program. |multiply. http://gcc.gnu.org/bugzilla/show_bug.cgi?id=19683