[PowerPC VLE] Add SPE2 and EFS2 instructions support
authorAlexander Fedotov <alfedotov@gmail.com>
Wed, 23 Aug 2017 15:08:46 +0000 (18:08 +0300)
committerAlan Modra <amodra@gmail.com>
Thu, 24 Aug 2017 08:00:31 +0000 (17:30 +0930)
commit74081948353b117fcbe870fc3cc9ebe0f18fdcf8
tree9ec7d1612b6a6e888c3be531eae484956421e079
parent647d4de92e061a3a2be83740d7f1bf63e5669630
[PowerPC VLE] Add SPE2 and EFS2 instructions support

include/
* opcode/ppc.h:
(spe2_opcodes, spe2_num_opcodes): New.
(PPC_OPCODE_SPE2): New define.
(PPC_OPCODE_EFS2): Likewise.
(SPE2_XOP): Likewise.
(SPE2_XOP_TO_SEG): Likewise.
opcodes/
* ppc-dis.c (ppc_mopt): Add PPC_OPCODE_SPE2 and
PPC_OPCODE_EFS2 flag to "e200z4" entry.
New entries efs2 and spe2.
Add PPC_OPCODE_SPE2 and PPC_OPCODE_EFS2 flag to "vle" entry.
(SPE2_OPCD_SEGS): New macro.
(spe2_opcd_indices): New.
(disassemble_init_powerpc): Handle SPE2 opcodes.
(lookup_spe2): New function.
(print_insn_powerpc): call lookup_spe2.
* ppc-opc.c (insert_evuimm1_ex0): New function.
(extract_evuimm1_ex0): Likewise.
(insert_evuimm_lt8): Likewise.
(extract_evuimm_lt8): Likewise.
(insert_off_spe2): Likewise.
(extract_off_spe2): Likewise.
(insert_Ddd): Likewise.
(extract_Ddd): Likewise.
(DD): New operand.
(EVUIMM_LT8): Likewise.
(EVUIMM_LT16): Adjust.
(MMMM): New operand.
(EVUIMM_1): Likewise.
(EVUIMM_1_EX0): Likewise.
(EVUIMM_2): Adjust.
(NNN): New operand.
(VX_OFF_SPE2): Likewise.
(BBB): Likewise.
(DDD): Likewise.
(VX_MASK_DDD): New mask.
(HH): New operand.
(VX_RA_CONST): New macro.
(VX_RA_CONST_MASK): Likewise.
(VX_RB_CONST): Likewise.
(VX_RB_CONST_MASK): Likewise.
(VX_OFF_SPE2_MASK): Likewise.
(VX_SPE_CRFD): Likewise.
(VX_SPE_CRFD_MASK VX): Likewise.
(VX_SPE2_CLR): Likewise.
(VX_SPE2_CLR_MASK): Likewise.
(VX_SPE2_SPLATB): Likewise.
(VX_SPE2_SPLATB_MASK): Likewise.
(VX_SPE2_OCTET): Likewise.
(VX_SPE2_OCTET_MASK): Likewise.
(VX_SPE2_DDHH): Likewise.
(VX_SPE2_DDHH_MASK): Likewise.
(VX_SPE2_HH): Likewise.
(VX_SPE2_HH_MASK): Likewise.
(VX_SPE2_EVMAR): Likewise.
(VX_SPE2_EVMAR_MASK): Likewise.
(PPCSPE2): Likewise.
(PPCEFS2): Likewise.
(vle_opcodes): Add EFS2 and some missing SPE opcodes.
(powerpc_macros): Map old SPE instructions have new names
with the same opcodes. Add SPE2 instructions which just are
mapped to SPE2.
(spe2_opcodes): Add SPE2 opcodes.
gas/
* config/tc-ppc.c:
(md_parse_option): Add mspe2 switch.
(md_show_usage): Document -mspe2.
(ppc_setup_opcodes): Handle spe2_opcodes.
* doc/as.texinfo: Document -mspe2.
* doc/c-ppc.texi: Likewise.
* testsuite/gas/ppc/efs.d: New file.
* testsuite/gas/ppc/efs.s: Likewise.
* testsuite/gas/ppc/efs2.d: Likewise.
* testsuite/gas/ppc/efs2.s: Likewise.
* testsuite/gas/ppc/ppc.exp: Run new tests.
* testsuite/gas/ppc/spe.d: New file.
* testsuite/gas/ppc/spe.s: Likewise.
* testsuite/gas/ppc/spe2-checks.d: Likewise.
* testsuite/gas/ppc/spe2-checks.l: Likewise.
* testsuite/gas/ppc/spe2-checks.s: Likewise.
* testsuite/gas/ppc/spe2.d: Likewise.
* testsuite/gas/ppc/spe2.s: Likewise.
* testsuite/gas/ppc/spe_ambiguous.d: Likewise.
* testsuite/gas/ppc/spe_ambiguous.s: Likewise.
23 files changed:
gas/ChangeLog
gas/config/tc-ppc.c
gas/doc/as.texinfo
gas/doc/c-ppc.texi
gas/testsuite/gas/ppc/efs.d [new file with mode: 0644]
gas/testsuite/gas/ppc/efs.s [new file with mode: 0644]
gas/testsuite/gas/ppc/efs2.d [new file with mode: 0644]
gas/testsuite/gas/ppc/efs2.s [new file with mode: 0644]
gas/testsuite/gas/ppc/ppc.exp
gas/testsuite/gas/ppc/spe.d [new file with mode: 0644]
gas/testsuite/gas/ppc/spe.s [new file with mode: 0644]
gas/testsuite/gas/ppc/spe2-checks.d [new file with mode: 0644]
gas/testsuite/gas/ppc/spe2-checks.l [new file with mode: 0644]
gas/testsuite/gas/ppc/spe2-checks.s [new file with mode: 0644]
gas/testsuite/gas/ppc/spe2.d [new file with mode: 0644]
gas/testsuite/gas/ppc/spe2.s [new file with mode: 0644]
gas/testsuite/gas/ppc/spe_ambiguous.d [new file with mode: 0644]
gas/testsuite/gas/ppc/spe_ambiguous.s [new file with mode: 0644]
include/ChangeLog
include/opcode/ppc.h
opcodes/ChangeLog
opcodes/ppc-dis.c
opcodes/ppc-opc.c