From efa30ac3c504d24c55733a627abe49bd0368cf67 Mon Sep 17 00:00:00 2001 From: Hafiz Abid Qadeer Date: Wed, 24 Mar 2021 21:24:35 +0000 Subject: [PATCH] [NIOS2] Fix disassembly of br.n instruction. The code was checking wrong bit for sign extension. It caused it to zero-extend instead of sign-extend the immediate value. 2021-03-25 Abid Qadeer opcodes/ * nios2-dis.c (nios2_print_insn_arg): Fix sign extension of immediate in br.n instruction. gas/ * testsuite/gas/nios2/brn.s: New. * testsuite/gas/nios2/brn.d: New. --- gas/ChangeLog | 5 +++++ gas/testsuite/gas/nios2/brn.d | 10 ++++++++++ gas/testsuite/gas/nios2/brn.s | 4 ++++ opcodes/ChangeLog | 5 +++++ opcodes/nios2-dis.c | 2 +- 5 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 gas/testsuite/gas/nios2/brn.d create mode 100644 gas/testsuite/gas/nios2/brn.s diff --git a/gas/ChangeLog b/gas/ChangeLog index a54056667f..f6c350dbbc 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,8 @@ +2021-03-25 Abid Qadeer + + * testsuite/gas/nios2/brn.d: New. + * testsuite/gas/nios2/brn.d: New. + 2021-03-25 Jan Beulich * config/tc-i386.c (match_template): Use t instead of i.tm. diff --git a/gas/testsuite/gas/nios2/brn.d b/gas/testsuite/gas/nios2/brn.d new file mode 100644 index 0000000000..a9ed472229 --- /dev/null +++ b/gas/testsuite/gas/nios2/brn.d @@ -0,0 +1,10 @@ +#objdump: -dr --prefix-addresses --show-raw-insn +#name: NIOS2 br.n +#as: -march=r2 + +.*: +file format elf32-littlenios2 + +Disassembly of section .text: +0+0000 <[^>]*> c4000020 nop +0+0004 <[^>]*> ff43 br.n 00000000 + ... diff --git a/gas/testsuite/gas/nios2/brn.s b/gas/testsuite/gas/nios2/brn.s new file mode 100644 index 0000000000..84d9cf1c8f --- /dev/null +++ b/gas/testsuite/gas/nios2/brn.s @@ -0,0 +1,4 @@ +# Source file used to test the br.n instructions +foo: + nop + br.n foo diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog index a471302c3a..53d7340f8d 100644 --- a/opcodes/ChangeLog +++ b/opcodes/ChangeLog @@ -1,3 +1,8 @@ +2021-03-25 Abid Qadeer + + * nios2-dis.c (nios2_print_insn_arg): Fix sign extension of + immediate in br.n instruction. + 2021-03-25 Jan Beulich * i386-dis.c (XMGatherD, VexGatherD): New. diff --git a/opcodes/nios2-dis.c b/opcodes/nios2-dis.c index e1cc716965..794d700c3e 100644 --- a/opcodes/nios2-dis.c +++ b/opcodes/nios2-dis.c @@ -694,7 +694,7 @@ nios2_print_insn_arg (const char *argptr, switch (op->format) { case iw_I10_type: - o = (((GET_IW_I10_IMM10 (opcode) & 0x3ff) ^ 0x400) - 0x400) * 2; + o = (((GET_IW_I10_IMM10 (opcode) & 0x3ff) ^ 0x200) - 0x200) * 2; break; default: bad_opcode (op); -- 2.34.1