my kernel does not boot anymore on a ppc970 (powermac g5) due to an illegal instruction caused by gcc 4.5
research showed that the DI bswap64 operation is optimized to ldbrx even on power4, but causes an sigill there. gcc -m64 -c -O2 -mcpu=power4 -mtune=cell gcc/testsuite/gcc.target/powerpc/optimize-bswapdi-3.c ; objdump -d optimize-bswapdi-3.o 0000000000000000 <.swap64_load>: 0: 7c 00 1c 28 .long 0x7c001c28 4: 7c 03 03 78 mr r3,r0 8: 4e 80 00 20 blr while: gcc -m64 -c -O2 -mcpu=power4 gcc/testsuite/gcc.target/powerpc/optimize-bswapdi-3.c ; objdump -d optimize-bswapdi-3.o 0000000000000000 <.swap64_load>: 0: 39 20 00 04 li r9,4 4: 7c 00 1c 2c lwbrx r0,0,r3 8: 7d 69 1c 2c lwbrx r11,r9,r3 c: 79 6a 07 c6 rldicr r10,r11,32,31 10: 7d 4a 03 78 or r10,r10,r0 14: 7d 43 53 78 mr r3,r10 18: 4e 80 00 20 blr -mcpu=power4 -mtune=cell should not start to emit opcodes invalid on power4. I think the bswap64 emitter logic in config/rs6000/rs6000.md is incorrect -- Summary: -mcpu=power4 -mtune=cell emits power7/cell-only opcodes Product: gcc Version: 4.5.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: target AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: marcus at jet dot franken dot de GCC build triplet: powerpc-unknown-linux-gnu GCC host triplet: powerpc-unknown-linux-gnu GCC target triplet: powerpc-unknown-linux-gnu http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43871