On Thu, 2009-07-23 at 10:07 +0100, Dave Korn wrote: > Are you using soft or hard fp?
Soft. Not all ARM processors have hardware fp. > I don't think you're going to get anywhere with this until you start looking > at the generated code to see precisely *what* is wrong with it. You've gone > as far as you can with prodding it from the outside like a black box. I've gone slightly further. But I'm still, as you say, outside the black box. See below. My ARM assembler knowledge is rusty at best though, so going deeper is not easy. Kai Ruottu wrote : > Comparing the output from some earlier working GCC with the gcc-4.4.0 > output would reveal if something was wrong in preparing inputs for > the soft-float routines... Or maybe something was changed in the > soft-float routines... What if you try a 'libgcc.a' taken from some > earlier working GCC ? Did that, see below. I think this means that the stuff in libgcc.a cause the issue. I've further looked at the content of libgcc2.c, which reveals macros renamed from L_* to L_arm_* (commit r132837 in gcc svn). But the description of that change seems to imply that this is all avmv6-m related and should not affect other processors. pavilion: {16} make clean rm -f *.o *.exe *.rsc *.S *.od rm -f float pavilion: {17} make arm-mingw32ce-gcc -D_WIN32_WCE=0x0600 -g -o float.exe float.c arm-mingw32ce-objdump -xd float.exe >float.od arm-mingw32ce-gcc -D_WIN32_WCE=0x0600 -S -o float.S float.c /opt/oldgcc/bin/arm-mingw32ce-gcc -D_WIN32_WCE=0x0600 -g -o ofloat.exe float.c arm-mingw32ce-objdump -xd ofloat.exe >ofloat.od /opt/oldgcc/bin/arm-mingw32ce-gcc -D_WIN32_WCE=0x0600 -S -o ofloat.S float.c rcp float.exe ipaq:/temp rsh ipaq /temp/float.exe Foo 34 12.000000 67 12 * 3 -> 0.000000 36 -> 0.000000 36 d -> 36.000000 rcp ofloat.exe ipaq:/temp rsh ipaq /temp/ofloat.exe Foo 34 12.000000 67 12 * 3 -> 36.000000 36 -> 36.000000 36 d -> 36.000000 /opt/oldgcc/bin/arm-mingw32ce-gcc -D_WIN32_WCE=0x0600 -o tst1.exe float.c /opt/mingw32ce/lib/gcc/arm-mingw32ce/4.4.0/libgcc.a arm-mingw32ce-objdump -xd tst1.exe >tst1.od rcp tst1.exe ipaq:/temp rsh ipaq /temp/tst1.exe Foo 34 12.000000 67 12 * 3 -> 12.000004 36 -> 0.000000 36 d -> 36.000000 arm-mingw32ce-gcc -D_WIN32_WCE=0x0600 -o tst2.exe float.c /opt/oldgcc/lib/gcc/arm-mingw32ce/4.1.0/libgcc.a arm-mingw32ce-objdump -xd tst2.exe >tst2.od rcp tst2.exe ipaq:/temp rsh ipaq /temp/tst2.exe Foo 34 12.000000 67 12 * 3 -> 36.000000 36 -> 36.000000 36 d -> 36.000000 pavilion: {18} /opt/oldgcc/bin/arm-mingw32ce-gcc -v Using built-in specs. Target: arm-mingw32ce Configured with: /home/danny/src/cegcc/svn.sf.net/cegcc/trunk/cegcc/src/gcc/configure --with-gcc --with-gnu-ld --with-gnu-as --build=i686-pc-linux-gnu --target=arm-mingw32ce --host=i686-pc-linux-gnu --prefix=/opt/oldgcc --enable-threads=win32 --disable-nls --enable-languages=c,c++ --disable-win32-registry --disable-multilib --disable-interwork --without-newlib --enable-checking --with-headers Thread model: win32 gcc version 4.1.0 pavilion: {19} arm-mingw32ce-gcc -v Using built-in specs. Target: arm-mingw32ce Configured with: /home/danny/src/cegcc/svn.sf.net/cegcc/trunk/cegcc/src/gcc-4.4.0/configure --with-gcc --with-gnu-ld --with-gnu-as --build=i686-pc-linux-gnu --target=arm-mingw32ce --host=i686-pc-linux-gnu --prefix=/opt/mingw32ce --enable-threads=win32 --disable-nls --enable-languages=c,c++ --disable-win32-registry --disable-multilib --disable-interwork --without-newlib --enable-checking --with-headers --disable-__cxa_atexit Thread model: win32 gcc version 4.4.0 (GCC) pavilion: {20} BTW I've put all of this directory up at http://danny.backx.info/download/cegcc/test.tar.gz . (117686 bytes) Danny -- Danny Backx ; danny.backx - at - scarlet.be ; http://danny.backx.info