This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug target/43871] New: -mcpu=power4 -mtune=cell emits power7/cell-only opcodes


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]