aboutsummaryrefslogtreecommitdiff
path: root/opcodes
diff options
context:
space:
mode:
authorNick Clifton <nickc@redhat.com>2016-01-14 16:23:35 +0000
committerNick Clifton <nickc@redhat.com>2016-01-14 16:23:35 +0000
commit4d82fe66e8d38b20ad429cb99a99ed8741336d72 (patch)
tree56de9e0bebe4497372817e943c106ccdb8124aa1 /opcodes
parente7cf25a8ab54cd02b48e7443ef25764475f02315 (diff)
downloadgdb-4d82fe66e8d38b20ad429cb99a99ed8741336d72.zip
gdb-4d82fe66e8d38b20ad429cb99a99ed8741336d72.tar.gz
gdb-4d82fe66e8d38b20ad429cb99a99ed8741336d72.tar.bz2
Fix display of RL78 MOVW instructions that use the stack pointer.
* rl78-decode.opc (rl78_decode_opcode): Add 's' operand to movw instructions that can support stack pointer operations. * rl78-decode.c: Regenerate. * rl78-dis.c: Fix display of stack pointer in MOVW based instructions. * testsuite/gas/rl78/sp-relative-movw.s: New test. * testsuite/gas/rl78/sp-relative-movw.d: Expected disassembly. * testsuite/gas/rl78/rl78.exp: Run the new test.
Diffstat (limited to 'opcodes')
-rw-r--r--opcodes/ChangeLog8
-rw-r--r--opcodes/rl78-decode.c2
-rw-r--r--opcodes/rl78-decode.opc2
-rw-r--r--opcodes/rl78-dis.c14
4 files changed, 23 insertions, 3 deletions
diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog
index 37e9a6e..64d342d 100644
--- a/opcodes/ChangeLog
+++ b/opcodes/ChangeLog
@@ -1,3 +1,11 @@
+2016-01-14 Nick Clifton <nickc@redhat.com>
+
+ * rl78-decode.opc (rl78_decode_opcode): Add 's' operand to movw
+ instructions that can support stack pointer operations.
+ * rl78-decode.c: Regenerate.
+ * rl78-dis.c: Fix display of stack pointer in MOVW based
+ instructions.
+
2016-01-14 Matthew Wahab <matthew.wahab@arm.com>
* aarch64-opc.c (aarch64_sys_reg_supported_p): Merge conditionals
diff --git a/opcodes/rl78-decode.c b/opcodes/rl78-decode.c
index 0103850..9c391565 100644
--- a/opcodes/rl78-decode.c
+++ b/opcodes/rl78-decode.c
@@ -5347,7 +5347,7 @@ rl78_decode_opcode (unsigned long pc AU,
op[0]);
printf (" ra = 0x%x\n", ra);
}
- SYNTAX("movw %0, %e!1");
+ SYNTAX("movw %0, %es!1");
#line 886 "rl78-decode.opc"
ID(mov); W(); DRW(ra); SM(None, IMMU(2));
diff --git a/opcodes/rl78-decode.opc b/opcodes/rl78-decode.opc
index 94cb67b..57e79ed 100644
--- a/opcodes/rl78-decode.opc
+++ b/opcodes/rl78-decode.opc
@@ -882,7 +882,7 @@ rl78_decode_opcode (unsigned long pc AU,
/** 1010 1110 movw %0, %s1 */
ID(mov); W(); DR(AX); SM(None, SFR);
-/** 11ra 1011 movw %0, %e!1 */
+/** 11ra 1011 movw %0, %es!1 */
ID(mov); W(); DRW(ra); SM(None, IMMU(2));
/** 11ra 1010 movw %0, %1 */
diff --git a/opcodes/rl78-dis.c b/opcodes/rl78-dis.c
index dd4f086..6784e53 100644
--- a/opcodes/rl78-dis.c
+++ b/opcodes/rl78-dis.c
@@ -227,7 +227,17 @@ print_insn_rl78_common (bfd_vma addr, disassemble_info * dis, RL78_Dis_Isa isa)
}
if (do_bang)
- PC ('!');
+ {
+ /* If we are going to display SP by name, we must omit the bang. */
+ if ((oper->type == RL78_Operand_Indirect || RL78_Operand_BitIndirect)
+ && oper->reg == RL78_Reg_None
+ && do_sfr
+ && ((oper->addend == 0xffff8 && opcode.size == RL78_Word)
+ || (oper->addend == 0x0fff8 && do_es && opcode.size == RL78_Word)))
+ ;
+ else
+ PC ('!');
+ }
if (do_cond)
{
@@ -265,6 +275,8 @@ print_insn_rl78_common (bfd_vma addr, disassemble_info * dis, RL78_Dis_Isa isa)
PR (PS, "psw");
else if (oper->addend == 0xffff8 && do_sfr && opcode.size == RL78_Word)
PR (PS, "sp");
+ else if (oper->addend == 0x0fff8 && do_sfr && do_es && opcode.size == RL78_Word)
+ PR (PS, "sp");
else if (oper->addend == 0xffff8 && do_sfr && opcode.size == RL78_Byte)
PR (PS, "spl");
else if (oper->addend == 0xffff9 && do_sfr && opcode.size == RL78_Byte)