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 f05bcd4..fd394ea 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 e911e1e..38c57f4 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 0d0e186..8017b0f 100644 (file)
@@ -1,5 +1,10 @@
 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
        to separate `extend' and its uninterpreted argument output.
        Separate hexadecimal halves of undecoded extended instructions
index 9337e5d..2b0e942 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);