diff options
author | Peter Bergner <bergner@linux.ibm.com> | 2022-10-08 16:19:51 -0500 |
---|---|---|
committer | Peter Bergner <bergner@linux.ibm.com> | 2022-10-27 19:23:00 -0500 |
commit | bb98553cad4e017f1851153fa5de91f2cee98fb2 (patch) | |
tree | 93a55dc653e7a3ecc0854dc2ae06cd1219e825af /gas | |
parent | 79e24d0a6c067a29150cf72ef8512b425e573e21 (diff) | |
download | gdb-bb98553cad4e017f1851153fa5de91f2cee98fb2.zip gdb-bb98553cad4e017f1851153fa5de91f2cee98fb2.tar.gz gdb-bb98553cad4e017f1851153fa5de91f2cee98fb2.tar.bz2 |
PowerPC: Add support for RFC02658 - MMA+ Outer-Product Instructions
gas/
* config/tc-ppc.c (md_assemble): Only check for prefix opcodes.
* testsuite/gas/ppc/rfc02658.s: New test.
* testsuite/gas/ppc/rfc02658.d: Likewise.
* testsuite/gas/ppc/ppc.exp: Run it.
opcodes/
* ppc-opc.c (XMSK8, P_GERX4_MASK, P_GERX2_MASK, XX3GERX_MASK): New.
(powerpc_opcodes): Add dmxvi8gerx4pp, dmxvi8gerx4, dmxvf16gerx2pp,
dmxvf16gerx2, dmxvbf16gerx2pp, dmxvf16gerx2np, dmxvbf16gerx2,
dmxvi8gerx4spp, dmxvbf16gerx2np, dmxvf16gerx2pn, dmxvbf16gerx2pn,
dmxvf16gerx2nn, dmxvbf16gerx2nn, pmdmxvi8gerx4pp, pmdmxvi8gerx4,
pmdmxvf16gerx2pp, pmdmxvf16gerx2, pmdmxvbf16gerx2pp, pmdmxvf16gerx2np,
pmdmxvbf16gerx2, pmdmxvi8gerx4spp, pmdmxvbf16gerx2np, pmdmxvf16gerx2pn,
pmdmxvbf16gerx2pn, pmdmxvf16gerx2nn, pmdmxvbf16gerx2nn.
Diffstat (limited to 'gas')
-rw-r--r-- | gas/config/tc-ppc.c | 3 | ||||
-rw-r--r-- | gas/testsuite/gas/ppc/ppc.exp | 1 | ||||
-rw-r--r-- | gas/testsuite/gas/ppc/rfc02658.d | 51 | ||||
-rw-r--r-- | gas/testsuite/gas/ppc/rfc02658.s | 28 |
4 files changed, 81 insertions, 2 deletions
diff --git a/gas/config/tc-ppc.c b/gas/config/tc-ppc.c index 1acbba1..0868655 100644 --- a/gas/config/tc-ppc.c +++ b/gas/config/tc-ppc.c @@ -4065,8 +4065,7 @@ md_assemble (char *str) insn_length = 4; if ((ppc_cpu & PPC_OPCODE_VLE) != 0 && PPC_OP_SE_VLE (insn)) insn_length = 2; - else if ((opcode->flags & PPC_OPCODE_POWER10) != 0 - && PPC_PREFIX_P (insn)) + else if (PPC_PREFIX_P (insn)) { struct insn_label_list *l; diff --git a/gas/testsuite/gas/ppc/ppc.exp b/gas/testsuite/gas/ppc/ppc.exp index f27a79c..500738a 100644 --- a/gas/testsuite/gas/ppc/ppc.exp +++ b/gas/testsuite/gas/ppc/ppc.exp @@ -146,6 +146,7 @@ run_dump_test "scalarquad" run_dump_test "rop" run_dump_test "rop-checks" run_dump_test "rfc02653" +run_dump_test "rfc02658" run_dump_test "dcbt" run_dump_test "pr27676" diff --git a/gas/testsuite/gas/ppc/rfc02658.d b/gas/testsuite/gas/ppc/rfc02658.d new file mode 100644 index 0000000..7af7b86 --- /dev/null +++ b/gas/testsuite/gas/ppc/rfc02658.d @@ -0,0 +1,51 @@ +#as: -mfuture +#objdump: -dr -Mfuture +#name: RFC02658 tests + +.* + + +Disassembly of section \.text: + +0+0 <_start>: +.*: (d8 12 00 ec|ec 00 12 d8) dmxvbf16gerx2 dm0,vs0,vs2 +.*: (50 67 8a ec|ec 8a 67 50) dmxvbf16gerx2nn dm1,vs10,vs12 +.*: (98 b3 14 ed|ed 14 b3 98) dmxvbf16gerx2np dm2,vs20,vs22 +.*: (9a 05 9e ed|ed 9e 05 9a) dmxvbf16gerx2pn dm3,vs30,vs32 +.*: (56 52 08 ee|ee 08 52 56) dmxvbf16gerx2pp dm4,vs40,vs42 +.*: (1e a2 92 ee|ee 92 a2 1e) dmxvf16gerx2 dm5,vs50,vs52 +.*: (56 f6 1c ef|ef 1c f6 56) dmxvf16gerx2nn dm6,vs60,vs62 +.*: (98 72 8c ef|ef 8c 72 98) dmxvf16gerx2np dm7,vs12,vs14 +.*: (98 84 0e ec|ec 0e 84 98) dmxvf16gerx2pn dm0,vs14,vs16 +.*: (10 92 90 ec|ec 90 92 10) dmxvf16gerx2pp dm1,vs16,vs18 +.*: (58 a0 12 ed|ed 12 a0 58) dmxvi8gerx4 dm2,vs18,vs20 +.*: (50 c0 96 ed|ed 96 c0 50) dmxvi8gerx4pp dm3,vs22,vs24 +.*: (10 d3 18 ee|ee 18 d3 10) dmxvi8gerx4spp dm4,vs24,vs26 +.*: (ff cf 90 07|07 90 cf ff) pmdmxvbf16gerx2nn dm0,vs0,vs2,255,15,3 +.*: (50 17 00 ec|ec 00 17 50) +.*: (00 00 00 60|60 00 00 00) nop +.*: (ff cf 90 07|07 90 cf ff) pmdmxvbf16gerx2np dm1,vs10,vs12,255,15,3 +.*: (98 63 8a ec|ec 8a 63 98) +.*: (ff cf 90 07|07 90 cf ff) pmdmxvbf16gerx2 dm2,vs20,vs22,255,15,3 +.*: (d8 b2 14 ed|ed 14 b2 d8) +.*: (ff cf 90 07|07 90 cf ff) pmdmxvbf16gerx2pn dm3,vs30,vs32,255,15,3 +.*: (9a 05 9e ed|ed 9e 05 9a) +.*: (ff cf 90 07|07 90 cf ff) pmdmxvbf16gerx2pp dm4,vs40,vs42,255,15,3 +.*: (56 52 08 ee|ee 08 52 56) +.*: (ff cf 90 07|07 90 cf ff) pmdmxvf16gerx2nn dm5,vs50,vs52,255,15,3 +.*: (56 a6 92 ee|ee 92 a6 56) +.*: (ff cf 90 07|07 90 cf ff) pmdmxvf16gerx2np dm6,vs60,vs62,255,15,3 +.*: (9e f2 1c ef|ef 1c f2 9e) +.*: (ff cf 90 07|07 90 cf ff) pmdmxvf16gerx2 dm7,vs12,vs14,255,15,3 +.*: (18 72 8c ef|ef 8c 72 18) +.*: (ff cf 90 07|07 90 cf ff) pmdmxvf16gerx2pn dm0,vs14,vs16,255,15,3 +.*: (98 84 0e ec|ec 0e 84 98) +.*: (ff cf 90 07|07 90 cf ff) pmdmxvf16gerx2pp dm1,vs16,vs18,255,15,3 +.*: (10 92 90 ec|ec 90 92 10) +.*: (ff ff 90 07|07 90 ff ff) pmdmxvi8gerx4 dm2,vs18,vs20,255,15,15 +.*: (58 a0 12 ed|ed 12 a0 58) +.*: (ff ff 90 07|07 90 ff ff) pmdmxvi8gerx4pp dm3,vs22,vs24,255,15,15 +.*: (50 c0 96 ed|ed 96 c0 50) +.*: (ff ff 90 07|07 90 ff ff) pmdmxvi8gerx4spp dm4,vs24,vs26,255,15,15 +.*: (10 d3 18 ee|ee 18 d3 10) +#pass diff --git a/gas/testsuite/gas/ppc/rfc02658.s b/gas/testsuite/gas/ppc/rfc02658.s new file mode 100644 index 0000000..b15fb5f --- /dev/null +++ b/gas/testsuite/gas/ppc/rfc02658.s @@ -0,0 +1,28 @@ + .text +_start: + dmxvbf16gerx2 0,0,2 + dmxvbf16gerx2nn 1,10,12 + dmxvbf16gerx2np 2,20,22 + dmxvbf16gerx2pn 3,30,32 + dmxvbf16gerx2pp 4,40,42 + dmxvf16gerx2 5,50,52 + dmxvf16gerx2nn 6,60,62 + dmxvf16gerx2np 7,12,14 + dmxvf16gerx2pn 0,14,16 + dmxvf16gerx2pp 1,16,18 + dmxvi8gerx4 2,18,20 + dmxvi8gerx4pp 3,22,24 + dmxvi8gerx4spp 4,24,26 + pmdmxvbf16gerx2nn 0,0,2,0xff,0xf,0x3 + pmdmxvbf16gerx2np 1,10,12,0xff,0xf,0x3 + pmdmxvbf16gerx2 2,20,22,0xff,0xf,0x3 + pmdmxvbf16gerx2pn 3,30,32,0xff,0xf,0x3 + pmdmxvbf16gerx2pp 4,40,42,0xff,0xf,0x3 + pmdmxvf16gerx2nn 5,50,52,0xff,0xf,0x3 + pmdmxvf16gerx2np 6,60,62,0xff,0xf,0x3 + pmdmxvf16gerx2 7,12,14,0xff,0xf,0x3 + pmdmxvf16gerx2pn 0,14,16,0xff,0xf,0x3 + pmdmxvf16gerx2pp 1,16,18,0xff,0xf,0x3 + pmdmxvi8gerx4 2,18,20,0xff,0xf,0xf + pmdmxvi8gerx4pp 3,22,24,0xff,0xf,0xf + pmdmxvi8gerx4spp 4,24,26,0xff,0xf,0xf |