GCC fails to generate efficient code for basic pointer operations. Please have a look at this example: *** test.c: register int * src asm("r15");
int test( ){ src[1]=src[0]; src++; } main(){ } *** compile the above with gcc -S -O3 test.c shows us the following ASM output: test: mr 9,15 addi 15,15,4 lwz 0,0(9) stw 0,4(9) blr compile with gcc -S -Os test.c Gives this output test: mr 9,15 addi 15,15,4 lwz 0,0(9) stw 0,4(9) blr As you can see both -O3 and -Os produce the same output. The generated output is far from optimal. GCC generates for the simple pointer operation this code: mr 9,15 addi 15,15,4 lwz 0,0(9) stw 0,4(9) But GCC should rather generate this: lwz 0,0(15) stwu 0,4(15) Two of the four instructions are unneeded. We've here code with literally thousands of unneeded instructions generated like this. I very much hope that this information is helpful to you and that you can fix this. Many thanks in advance Gunnar von Boehn -- Summary: PowerPC generated PTR code ineffiency Product: gcc Version: 4.3.0 Status: UNCONFIRMED Severity: major Priority: P3 Component: c AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: gunnar at greyhound-data dot com GCC build triplet: powerpc64-unknown-linux-gnu GCC host triplet: powerpc64-unknown-linux-gnu GCC target triplet: powerpc64-unknown-linux-gnu http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36770