aboutsummaryrefslogtreecommitdiff
path: root/gas
diff options
context:
space:
mode:
authorPeter Bergner <bergner@linux.ibm.com>2022-10-08 16:19:51 -0500
committerPeter Bergner <bergner@linux.ibm.com>2022-10-27 19:23:00 -0500
commitbb98553cad4e017f1851153fa5de91f2cee98fb2 (patch)
tree93a55dc653e7a3ecc0854dc2ae06cd1219e825af /gas
parent79e24d0a6c067a29150cf72ef8512b425e573e21 (diff)
downloadbinutils-bb98553cad4e017f1851153fa5de91f2cee98fb2.zip
binutils-bb98553cad4e017f1851153fa5de91f2cee98fb2.tar.gz
binutils-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.c3
-rw-r--r--gas/testsuite/gas/ppc/ppc.exp1
-rw-r--r--gas/testsuite/gas/ppc/rfc02658.d51
-rw-r--r--gas/testsuite/gas/ppc/rfc02658.s28
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