I just tried out a CVS copy of gcc and found problems with the following code:
long foo()
{
long int word;
word += 2147483647UL;
return word;
}
When compiled as 64bit uses the __adddi3 helper function:
mflr 0
li 4,-1
rldicl 4,4,0,33
std 0,16(1)
stdu 1,-112(1)
bl __adddi3
nop
addi 1,1,112
ld 0,16(1)
mtlr 0
blr
gcc 3.4.4 did a much better job:
li 3,-1
rldicl 3,3,0,33
add 3,0,3
blr
--
Summary: 64bit target uses __adddi3
Product: gcc
Version: 4.0.0
Status: UNCONFIRMED
Severity: normal
Priority: P2
Component: regression
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: anton at samba dot org
CC: gcc-bugs at gcc dot gnu dot org
GCC target triplet: powerpc64-unknown-linux-gnu
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20276