From bb98553cad4e017f1851153fa5de91f2cee98fb2 Mon Sep 17 00:00:00 2001 From: Peter Bergner Date: Sat, 8 Oct 2022 16:19:51 -0500 Subject: 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. --- gas/config/tc-ppc.c | 3 +-- gas/testsuite/gas/ppc/ppc.exp | 1 + gas/testsuite/gas/ppc/rfc02658.d | 51 ++++++++++++++++++++++++++++++++++++++++ gas/testsuite/gas/ppc/rfc02658.s | 28 ++++++++++++++++++++++ 4 files changed, 81 insertions(+), 2 deletions(-) create mode 100644 gas/testsuite/gas/ppc/rfc02658.d create mode 100644 gas/testsuite/gas/ppc/rfc02658.s (limited to 'gas') 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 -- cgit v1.1