MIPS16/opcodes: Use hexadecimal interpretation for the `e' operand code
authorMaciej W. Rozycki <macro@imgtec.com>
Fri, 9 Dec 2016 22:50:07 +0000 (22:50 +0000)
committerMaciej W. Rozycki <macro@imgtec.com>
Fri, 9 Dec 2016 23:19:52 +0000 (23:19 +0000)
Make the `e' operand code used with raw EXTEND instructions use the
hexadecimal rather than decimal format, for consistency with what is
actually produced by code in `print_insn_mips16' dedicated to EXTEND
disassembly.  Due to that special handling the operand code is only
interpreted for assembly however, which accepts either format either
way, so there is no functional change here.

opcodes/
* mips16-opc.c (decode_mips16_operand) <'e'>: Use HINT rather
than UINT.

gas/
* testsuite/gas/mips/mips16-extend.d: New test.
* testsuite/gas/mips/mips16-extend.s: New test source.
* testsuite/gas/mips/mips.exp: Run the new test.

gas/ChangeLog
gas/testsuite/gas/mips/mips.exp
gas/testsuite/gas/mips/mips16-extend.d [new file with mode: 0644]
gas/testsuite/gas/mips/mips16-extend.s [new file with mode: 0644]
opcodes/ChangeLog
opcodes/mips16-opc.c

index f05bcd4db45abf17ea6bd83c7b8d4a02cc3719de..fd394eabb8e483bff02593710bcce8222777bb88 100644 (file)
@@ -1,3 +1,9 @@
+2016-12-09  Maciej W. Rozycki  <macro@imgtec.com>
+
+       * testsuite/gas/mips/mips16-extend.d: New test.
+       * testsuite/gas/mips/mips16-extend.s: New test source.
+       * testsuite/gas/mips/mips.exp: Run the new test.
+
 2016-12-08  Maciej W. Rozycki  <macro@imgtec.com>
 
        * config/tc-arc.c (arc_show_cpu_list): Rename `spaces' local
index e911e1e03206a0796705ea4d5aa325d84e787bbe..38c57f4f7bfcb137e7ceac3ed78a9dff153839aa 100644 (file)
@@ -1295,6 +1295,7 @@ if { [istarget mips*-*-vxworks*] } {
     run_dump_test "mips16e-64"
     run_list_test "mips16e-64" "-march=mips32 -32"
     run_dump_test "mips16-intermix"
+    run_dump_test "mips16-extend"
 
     run_dump_test "vxworks1"
     run_dump_test "vxworks1-xgot"
diff --git a/gas/testsuite/gas/mips/mips16-extend.d b/gas/testsuite/gas/mips/mips16-extend.d
new file mode 100644 (file)
index 0000000..eec0b19
--- /dev/null
@@ -0,0 +1,16 @@
+#objdump: -d --prefix-addresses --show-raw-insn
+#name: MIPS16 explicit EXTEND encoding
+#as: -32
+
+.*: +file format .*mips.*
+
+Disassembly of section \.text:
+[0-9a-f]+ <[^>]*> f000 0000    addiu   s0,sp,0
+[0-9a-f]+ <[^>]*> f001 0000    addiu   s0,sp,2048
+[0-9a-f]+ <[^>]*> f5a5 0000    addiu   s0,sp,11680
+[0-9a-f]+ <[^>]*> f7ff 0000    addiu   s0,sp,-32
+[0-9a-f]+ <[^>]*> f123 0000    addiu   s0,sp,6432
+[0-9a-f]+ <[^>]*> f432 0000    addiu   s0,sp,-27616
+[0-9a-f]+ <[^>]*> f789 0000    addiu   s0,sp,20352
+[0-9a-f]+ <[^>]*> f7ff 0000    addiu   s0,sp,-32
+       \.\.\.
diff --git a/gas/testsuite/gas/mips/mips16-extend.s b/gas/testsuite/gas/mips/mips16-extend.s
new file mode 100644 (file)
index 0000000..2f779c1
--- /dev/null
@@ -0,0 +1,23 @@
+       .set    mips16
+       .set    noreorder
+foo:
+       extend  0
+       addiu   $16, $29, 0
+       extend  1
+       addiu   $16, $29, 0
+       extend  1445
+       addiu   $16, $29, 0
+       extend  2047
+       addiu   $16, $29, 0
+       extend  0x123
+       addiu   $16, $29, 0
+       extend  0x432
+       addiu   $16, $29, 0
+       extend  0x789
+       addiu   $16, $29, 0
+       extend  0x7ff
+       addiu   $16, $29, 0
+
+# Force some (non-delay-slot) zero bytes, to make 'objdump' print ...
+       .align  4, 0
+       .space  16
index 0d0e18669bca6a075a9fe1c5d48de9a0f614c8fb..8017b0f3e95846f5709afec4533ea230f321979e 100644 (file)
@@ -1,3 +1,8 @@
+2016-12-09  Maciej W. Rozycki  <macro@imgtec.com>
+
+       * mips16-opc.c (decode_mips16_operand) <'e'>: Use HINT rather
+       than UINT.
+
 2016-12-09  Maciej W. Rozycki  <macro@imgtec.com>
 
        * mips-dis.c (print_insn_mips16): Use a tab rather than a space
index 9337e5d2e4aae9a4d5ca6fba03bc6c32fed95efd..2b0e942887b117a8a5a9fa0c57ec3e452299b4d5 100644 (file)
@@ -61,7 +61,7 @@ decode_mips16_operand (char type, bfd_boolean extended_p)
     case 'Z': MAPPED_REG (3, 0, GP, reg_m16_map);
 
     case 'a': JUMP (26, 0, 2);
-    case 'e': UINT (11, 0);
+    case 'e': HINT (11, 0);
     case 'i': JALX (26, 0, 2);
     case 'l': SPECIAL (6, 5, ENTRY_EXIT_LIST);
     case 'm': SPECIAL (7, 0, SAVE_RESTORE_LIST);