PowerPC64 paddi -Mraw
authorAlan Modra <amodra@gmail.com>
Sat, 12 Nov 2022 00:10:13 +0000 (10:40 +1030)
committerAlan Modra <amodra@gmail.com>
Sat, 12 Nov 2022 06:57:24 +0000 (17:27 +1030)
commit7149607f6ae572fa198116b0d0fb69a3e0fde458
tree019039ef43092b21f6c66c2341f913dad6dd6e69
parent80a3733432f335fd0d2a0e7a6aeac1e3849d765c
PowerPC64 paddi -Mraw

On a testcase like
 pla 8,foo@pcrel
disassembled with -Mpower10 results in
   0: 00 00 10 06  pla     r8,0 # 0
   4: 00 00 00 39
0: R_PPC64_PCREL34 foo
but with -Mpower10 -Mraw
   0: 00 00 10 06  .long 0x6100000
0: R_PPC64_PCREL34 foo
   4: 00 00 00 39  addi    r8,0,0

The instruction is unrecognised due to the hack we have in
extract_pcrel0 in order to disassemble paddi with RA0=0 and R=1 as
pla.  I could have just added "&& !(dialect & PPC_OPCODE_RAW)" to the
condition in extract_pcrel0 under which *invalid is set, but went for
this larger patch that reorders the extended insn pla to the more
usual place before its underlying machine insn.  (la is after addi
because we never disassemble to la.)

gas/
* testsuite/gas/ppc/raw.d,
* testsuite/gas/ppc/raw.s: Add pla.
opcodes/
* ppc-opc.c (extract_pcrel1): Rename from extract_pcrel0 and
invert *invalid logic.
(PCREL1): Rename from PCREL0.
(prefix_opcodes): Sort pla before paddi, adjusting R operand
for pla, paddi and psubi.
gas/testsuite/gas/ppc/raw.d
gas/testsuite/gas/ppc/raw.s
opcodes/ppc-opc.c