This simple test case:
#include <stdio.h>
int ten = 10;
int main()
{
printf ("%lld\n", 92233720368547758LL % ten);
return 0;
}
returns
0
because (afaics) __moddi3 is miscompiled.
Breakpoint 4, __moddi3 (u=92233720368547758, v=10)
at /home/aph/gcc/trunk/libgcc/../gcc/libgcc2.c:923
(gdb) fin
Run till exit from #0 __moddi3 (u=<value optimized out>, v=92233718306963466)
at /home/aph/gcc/trunk/libgcc/../gcc/libgcc2.c:919
0x00008474 in main () at ppp.c:7
Value returned is $3 = 0
Recompiling libgcc with -O0 fixes the problem:
(gdb)
(gdb) fin
Run till exit from #0 __moddi3 (u=92233720368547758, v=10)
at /home/aph/gcc/trunk/libgcc/../gcc/libgcc2.c:879
0x000084a4 in main () at ppp.c:7
Value returned is $4 = 8
And recompiling just _moddi3.o fixes it again.
Target: arm-linux-gnueabi
Configured with: /home/aph/gcc/trunk/configure --with-system-zlib
--enable-threads=posix --enable-nls --enable-__cxa_atexit --enable-clocale=gnu
--enable-libstdcxx-debug --enable-mpfr --enable-checking=release
--disable-multilib --disable-static arm-linux-gnueabi --disable-bootstrap
--disable-sjlj-exceptions --prefix=/home/aph/gcc/install
build_alias=arm-linux-gnueabi host_alias=arm-linux-gnueabi
target_alias=arm-linux-gnueabi --enable-languages=c,c++,java --no-create
--no-recursion
Andrew.