[PATCH] [NIOS2] Fix disassembly of br.n instruction.
Hafiz Abid Qadeer
abidh@codesourcery.com
Wed Mar 24 22:03:41 GMT 2021
The code was checking wrong bit for sign extension. It caused it
to zero-extend instead of sign-extend the immediate value.
2021-03-24 Abid Qadeer <abidh@codesourcery.com>
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/testsuite/gas/nios2/brn.d | 10 ++++++++++
gas/testsuite/gas/nios2/brn.s | 4 ++++
opcodes/nios2-dis.c | 2 +-
3 files changed, 15 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/testsuite/gas/nios2/brn.d b/gas/testsuite/gas/nios2/brn.d
new file mode 100644
index 00000000000..a9ed472229a
--- /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 <foo>
+ ...
diff --git a/gas/testsuite/gas/nios2/brn.s b/gas/testsuite/gas/nios2/brn.s
new file mode 100644
index 00000000000..84d9cf1c8f1
--- /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/nios2-dis.c b/opcodes/nios2-dis.c
index e1cc7169654..794d700c3e5 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.25.1
More information about the Binutils
mailing list