aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHafiz Abid Qadeer <abidh@codesourcery.com>2021-03-24 21:24:35 +0000
committerHafiz Abid Qadeer <abidh@codesourcery.com>2021-03-25 10:52:14 +0000
commitefa30ac3c504d24c55733a627abe49bd0368cf67 (patch)
tree546cf1df9b817a8cf13f445069f53feb26d603d7
parent5e74b4959bdeb5660c5e6f3e7a293269043a9a67 (diff)
downloadgdb-efa30ac3c504d24c55733a627abe49bd0368cf67.zip
gdb-efa30ac3c504d24c55733a627abe49bd0368cf67.tar.gz
gdb-efa30ac3c504d24c55733a627abe49bd0368cf67.tar.bz2
[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 <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.
-rw-r--r--gas/ChangeLog5
-rw-r--r--gas/testsuite/gas/nios2/brn.d10
-rw-r--r--gas/testsuite/gas/nios2/brn.s4
-rw-r--r--opcodes/ChangeLog5
-rw-r--r--opcodes/nios2-dis.c2
5 files changed, 25 insertions, 1 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index a540566..f6c350d 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,8 @@
+2021-03-25 Abid Qadeer <abidh@codesourcery.com>
+
+ * testsuite/gas/nios2/brn.d: New.
+ * testsuite/gas/nios2/brn.d: New.
+
2021-03-25 Jan Beulich <jbeulich@suse.com>
* 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 0000000..a9ed472
--- /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 0000000..84d9cf1
--- /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 a471302..53d7340 100644
--- a/opcodes/ChangeLog
+++ b/opcodes/ChangeLog
@@ -1,3 +1,8 @@
+2021-03-25 Abid Qadeer <abidh@codesourcery.com>
+
+ * nios2-dis.c (nios2_print_insn_arg): Fix sign extension of
+ immediate in br.n instruction.
+
2021-03-25 Jan Beulich <jbeulich@suse.com>
* i386-dis.c (XMGatherD, VexGatherD): New.
diff --git a/opcodes/nios2-dis.c b/opcodes/nios2-dis.c
index e1cc716..794d700 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);