Add new mnemonics for VLE multiple load instructions
authorAlexander Fedotov <alfedotov@gmail.com>
Sat, 30 Sep 2017 09:31:37 +0000 (12:31 +0300)
committerAlan Modra <amodra@gmail.com>
Sun, 1 Oct 2017 09:05:06 +0000 (19:35 +1030)
opcodes/
* ppc-opc.c (vle_opcodes): Add e_lmvsprw, e_lmvgprw,
e_lmvsrrw, e_lmvcsrrw and e_lmvcsrrw as official mnemonics for
VLE multimple load/store instructions. Old e_ldm* variants are
kept as aliases.
Add missing e_lmvmcsrrw and e_stmvmcsrrw.
gas/
* testsuite/gas/ppc/vle-mult-ld-st-insns.s: New file: Tests the
support for the VLE multiple load/store instructions.
* testsuite/gas/ppc/vle-mult-ld-st-insns.d: New file: Test
driver.
* testsuite/gas/ppc/ppc.exp: Run it.

gas/ChangeLog
gas/testsuite/gas/ppc/ppc.exp
gas/testsuite/gas/ppc/vle-mult-ld-st-insns.d [new file with mode: 0644]
gas/testsuite/gas/ppc/vle-mult-ld-st-insns.s [new file with mode: 0644]
opcodes/ChangeLog
opcodes/ppc-opc.c

index acf75a9b4961f91b010f192715942c1c969ba5ed..05e06c6ea9f85d6c6f83020ea8f828f2e03990f6 100644 (file)
@@ -1,3 +1,11 @@
+2017-10-01  Alexander Fedotov  <alfedotov@gmail.com>
+
+       * testsuite/gas/ppc/vle-mult-ld-st-insns.s: New file: Tests the
+       support for the VLE multiple load/store instructions.
+       * testsuite/gas/ppc/vle-mult-ld-st-insns.d: New file: Test
+       driver.
+       * testsuite/gas/ppc/ppc.exp: Run it.
+
 2017-09-27  Nick Clifton  <nickc@redhat.com>
 
        PR 22179
index cdcd8a1566e690fd0b03f263fa1ec6b1615b27c7..b12fbd3d1e9e23239ea896c2caebfa1a53f492d3 100644 (file)
@@ -60,6 +60,7 @@ if { [istarget powerpc*-*-*] } then {
            run_dump_test "vle-simple-4"
            run_dump_test "vle-simple-5"
            run_dump_test "vle-simple-6"
+           run_dump_test "vle-mult-ld-st-insns"
 
            #fail expected until get_powerpc_dialect() patch not applied
            setup_xfail "*-*-*"
diff --git a/gas/testsuite/gas/ppc/vle-mult-ld-st-insns.d b/gas/testsuite/gas/ppc/vle-mult-ld-st-insns.d
new file mode 100644 (file)
index 0000000..2f9d6c7
--- /dev/null
@@ -0,0 +1,28 @@
+#as: -a32 -mvle -mregnames
+#objdump: -dr -Mvle
+#name: VLE Instructions for improving interrupt handler efficiency
+
+.*: +file format elf.*-powerpc.*
+
+Disassembly of section .text:
+
+00000000 <prolog>:
+   0:  18 01 11 00     e_stmvgprw 0\(r1\)
+   4:  18 22 11 04     e_stmvsprw 4\(r2\)
+   8:  18 83 11 08     e_stmvsrrw 8\(r3\)
+   c:  18 a4 11 0c     e_stmvcsrrw 12\(r4\)
+  10:  18 c5 11 10     e_stmvdsrrw 16\(r5\)
+  14:  18 e6 11 14     e_stmvmcsrrw 20\(r6\)
+00000018 <epilog>:
+  18:  18 07 10 18     e_lmvgprw 24\(r7\)
+  1c:  18 28 10 1c     e_lmvsprw 28\(r8\)
+  20:  18 89 10 20     e_lmvsrrw 32\(r9\)
+  24:  18 aa 10 24     e_lmvcsrrw 36\(r10\)
+  28:  18 cb 10 28     e_lmvdsrrw 40\(r11\)
+  2c:  18 ec 10 2c     e_lmvmcsrrw 44\(r12\)
+00000030 <epilog_alt>:
+  30:  18 0d 10 30     e_lmvgprw 48\(r13\)
+  34:  18 2e 10 34     e_lmvsprw 52\(r14\)
+  38:  18 8f 10 38     e_lmvsrrw 56\(r15\)
+  3c:  18 b0 10 3c     e_lmvcsrrw 60\(r16\)
+  40:  18 d1 10 40     e_lmvdsrrw 64\(r17\)
diff --git a/gas/testsuite/gas/ppc/vle-mult-ld-st-insns.s b/gas/testsuite/gas/ppc/vle-mult-ld-st-insns.s
new file mode 100644 (file)
index 0000000..ecab85e
--- /dev/null
@@ -0,0 +1,34 @@
+# VLE Instructions for Improving Interrupt Handler Efficiency (e200z760RM.pdf)
+# Original Engineering Bullet (EB696.pdf) contains two writings of load instructions
+# and has no ones for MCSRRs.
+
+# e_lmvgprw, e_stmvgprw - load/store multiple volatile GPRs (r0, r3:r12)
+# e_lmvsprw, e_stmvsprw - load/store multiple volatile SPRs (CR, LR, CTR, and XER)
+# e_lmvsrrw, e_stmvsrrw - load/store multiple volatile SRRs (SRR0, SRR1)
+# e_lmvcsrrw, e_stmvcsrrw - load/store multiple volatile CSRRs (CSRR0, CSRR1)
+# e_lmvdsrrw, e_stmvdsrrw - load/store multiple volatile DSRRs (DSRR0, DSRR1)
+# e_lmvmcsrrw, e_stmvmcsrrw - load/store multiple volatile MCSRRs (MCSRR0, MCSRR1)
+
+       .text
+prolog:
+       e_stmvgprw      0x00 (r1)
+       e_stmvsprw      0x04 (r2)
+       e_stmvsrrw      0x08 (r3)
+       e_stmvcsrrw     0x0c (r4)
+       e_stmvdsrrw     0x10 (r5)
+       e_stmvmcsrrw    0x14 (r6)
+
+epilog:
+       e_lmvgprw       0x18 (r7)
+       e_lmvsprw       0x1c (r8)
+       e_lmvsrrw       0x20 (r9)
+       e_lmvcsrrw      0x24 (r10)
+       e_lmvdsrrw      0x28 (r11)
+       e_lmvmcsrrw     0x2c (r12)
+
+epilog_alt:
+       e_ldmvgprw      0x30 (r13)
+       e_ldmvsprw      0x34 (r14)
+       e_ldmvsrrw      0x38 (r15)
+       e_ldmvcsrrw     0x3c (r16)
+       e_ldmvdsrrw     0x40 (r17)
index 9280b2ce846f0ae9b0eff2635ea0bfe0f8073150..c90f097503ac0d662d72e0b6138501b508b1626b 100644 (file)
@@ -1,3 +1,11 @@
+2017-10-01  Alexander Fedotov  <alfedotov@gmail.com>
+
+       * ppc-opc.c (vle_opcodes): Add e_lmvsprw, e_lmvgprw,
+       e_lmvsrrw, e_lmvcsrrw and e_lmvcsrrw as official mnemonics for
+       VLE multimple load/store instructions. Old e_ldm* variants are
+       kept as aliases.
+       Add missing e_lmvmcsrrw and e_stmvmcsrrw.
+
 2017-09-27  Nick Clifton  <nickc@redhat.com>
 
        PR 22179
index 5edb1adac9fdda48f51f24e32e629961d2403199..39f320a77bd9aed9fee4b1ef28dfefe8ed2d214c 100644 (file)
@@ -8315,16 +8315,23 @@ const struct powerpc_opcode vle_opcodes[] = {
 {"e_sthu",     OPVUP(6,5),     OPVUP_MASK,     PPCVLE, 0,              {RT, D8, RA0}},
 {"e_stwu",     OPVUP(6,6),     OPVUP_MASK,     PPCVLE, 0,              {RT, D8, RA0}},
 {"e_stmw",     OPVUP(6,9),     OPVUP_MASK,     PPCVLE, 0,              {RT, D8, RA0}},
+{"e_lmvgprw",  OPVUPRT(6,16,0),OPVUPRT_MASK,   PPCVLE, 0,              {D8, RA0}},
 {"e_ldmvgprw", OPVUPRT(6,16,0),OPVUPRT_MASK,   PPCVLE, 0,              {D8, RA0}},
 {"e_stmvgprw", OPVUPRT(6,17,0),OPVUPRT_MASK,   PPCVLE, 0,              {D8, RA0}},
+{"e_lmvsprw",  OPVUPRT(6,16,1),OPVUPRT_MASK,   PPCVLE, 0,              {D8, RA0}},
 {"e_ldmvsprw", OPVUPRT(6,16,1),OPVUPRT_MASK,   PPCVLE, 0,              {D8, RA0}},
 {"e_stmvsprw", OPVUPRT(6,17,1),OPVUPRT_MASK,   PPCVLE, 0,              {D8, RA0}},
+{"e_lmvsrrw",  OPVUPRT(6,16,4),OPVUPRT_MASK,   PPCVLE, 0,              {D8, RA0}},
 {"e_ldmvsrrw", OPVUPRT(6,16,4),OPVUPRT_MASK,   PPCVLE, 0,              {D8, RA0}},
 {"e_stmvsrrw", OPVUPRT(6,17,4),OPVUPRT_MASK,   PPCVLE, 0,              {D8, RA0}},
+{"e_lmvcsrrw", OPVUPRT(6,16,5),OPVUPRT_MASK,   PPCVLE, 0,              {D8, RA0}},
 {"e_ldmvcsrrw",        OPVUPRT(6,16,5),OPVUPRT_MASK,   PPCVLE, 0,              {D8, RA0}},
 {"e_stmvcsrrw",        OPVUPRT(6,17,5),OPVUPRT_MASK,   PPCVLE, 0,              {D8, RA0}},
+{"e_lmvdsrrw", OPVUPRT(6,16,6),OPVUPRT_MASK,   PPCVLE, 0,              {D8, RA0}},
 {"e_ldmvdsrrw",        OPVUPRT(6,16,6),OPVUPRT_MASK,   PPCVLE, 0,              {D8, RA0}},
 {"e_stmvdsrrw",        OPVUPRT(6,17,6),OPVUPRT_MASK,   PPCVLE, 0,              {D8, RA0}},
+{"e_lmvmcsrrw",        OPVUPRT(6,16,7),OPVUPRT_MASK,   PPCVLE, 0,              {D8, RA0}},
+{"e_stmvmcsrrw",       OPVUPRT(6,17,7),OPVUPRT_MASK,   PPCVLE, 0,              {D8, RA0}},
 {"e_add16i",   OP(7),          OP_MASK,        PPCVLE, 0,              {RT, RA, SI}},
 {"e_la",       OP(7),          OP_MASK,        PPCVLE, 0,              {RT, D, RA0}},
 {"e_sub16i",   OP(7),          OP_MASK,        PPCVLE, 0,              {RT, RA, NSI}},