From f17ecb4baca990b57cc57e8337c4e03ecee02742 Mon Sep 17 00:00:00 2001 From: "Maciej W. Rozycki" Date: Fri, 9 Dec 2016 22:50:07 +0000 Subject: [PATCH 1/1] MIPS16/opcodes: Use hexadecimal interpretation for the `e' operand code 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 | 6 ++++++ gas/testsuite/gas/mips/mips.exp | 1 + gas/testsuite/gas/mips/mips16-extend.d | 16 ++++++++++++++++ gas/testsuite/gas/mips/mips16-extend.s | 23 +++++++++++++++++++++++ opcodes/ChangeLog | 5 +++++ opcodes/mips16-opc.c | 2 +- 6 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 gas/testsuite/gas/mips/mips16-extend.d create mode 100644 gas/testsuite/gas/mips/mips16-extend.s diff --git a/gas/ChangeLog b/gas/ChangeLog index f05bcd4db45..fd394eabb8e 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,9 @@ +2016-12-09 Maciej W. Rozycki + + * 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 * config/tc-arc.c (arc_show_cpu_list): Rename `spaces' local diff --git a/gas/testsuite/gas/mips/mips.exp b/gas/testsuite/gas/mips/mips.exp index e911e1e0320..38c57f4f7bf 100644 --- a/gas/testsuite/gas/mips/mips.exp +++ b/gas/testsuite/gas/mips/mips.exp @@ -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 index 00000000000..eec0b1906fb --- /dev/null +++ b/gas/testsuite/gas/mips/mips16-extend.d @@ -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 index 00000000000..2f779c1cead --- /dev/null +++ b/gas/testsuite/gas/mips/mips16-extend.s @@ -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 diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog index 0d0e18669bc..8017b0f3e95 100644 --- a/opcodes/ChangeLog +++ b/opcodes/ChangeLog @@ -1,3 +1,8 @@ +2016-12-09 Maciej W. Rozycki + + * mips16-opc.c (decode_mips16_operand) <'e'>: Use HINT rather + than UINT. + 2016-12-09 Maciej W. Rozycki * mips-dis.c (print_insn_mips16): Use a tab rather than a space diff --git a/opcodes/mips16-opc.c b/opcodes/mips16-opc.c index 9337e5d2e4a..2b0e942887b 100644 --- a/opcodes/mips16-opc.c +++ b/opcodes/mips16-opc.c @@ -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); -- 2.30.2