The attached file compiles correctly with GCC versions 3.0.4 and 3.2.3; however, incorrect output is produced with GCC 3.3 and the mainline snapshot "gcc-3.4-20030730". The problem goes away when optimizations are disabled. This problem does not occur on other targets, e.g. i686.
Created attachment 4584 [details] Test.cpp Compile with this command: "gcc -c -O2 Test.cpp -marm -save-temps" The output file Test.s should contain three "smull" instructions and six "smlal" instructions. However, with GCC 3.3 and later the generated code is incorrect, e.g. there is only one "smull" instruction and two "smlal" instructions.
Your code contains lots of aliasing violations, which are the cause for your problems. I suggest you fix them or use -fno-strict-aliasing.
Reopening to ...
Mark as a dup of bug 21920. *** This bug has been marked as a duplicate of 21920 ***