aboutsummaryrefslogtreecommitdiff
path: root/opcodes/ia64-dis.c
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2000-08-07 21:44:26 +0000
committerRichard Henderson <rth@redhat.com>2000-08-07 21:44:26 +0000
commit0228082a3c8835e2475666e63c1ee6b4b6d9ac32 (patch)
tree77db6a76f227bd42bb29baac554d84fd7c2f3505 /opcodes/ia64-dis.c
parent2d484c7fa2a3742c776b0e027f931293af74b8ac (diff)
downloadgdb-0228082a3c8835e2475666e63c1ee6b4b6d9ac32.zip
gdb-0228082a3c8835e2475666e63c1ee6b4b6d9ac32.tar.gz
gdb-0228082a3c8835e2475666e63c1ee6b4b6d9ac32.tar.bz2
* ia64-dis.c (print_insn_ia64): Get byte skip count correct
for MLI templates. Handle IA64_OPND_TGT64.
Diffstat (limited to 'opcodes/ia64-dis.c')
-rw-r--r--opcodes/ia64-dis.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/opcodes/ia64-dis.c b/opcodes/ia64-dis.c
index d4ea62b..629a768 100644
--- a/opcodes/ia64-dis.c
+++ b/opcodes/ia64-dis.c
@@ -117,7 +117,7 @@ print_insn_ia64 (bfd_vma memaddr, struct disassemble_info *info)
{
/* skip L slot in MLI template: */
slotnum = 2;
- retval += slot_multiplier;
+ retval = 16 - slot_multiplier;
}
insn = slot[slotnum];
@@ -165,6 +165,13 @@ print_insn_ia64 (bfd_vma memaddr, struct disassemble_info *info)
| (((insn >> 36) & 0x1) << 20)
| ((insn >> 6) & 0xfffff);
}
+ else if (odesc - elf64_ia64_operands == IA64_OPND_TGT64)
+ {
+ /* 60-bit immedate for long branches. */
+ value = (((insn >> 13) & 0xfffff)
+ | (((insn >> 36) & 1) << 59)
+ | (slot[1] << 20)) << 4;
+ }
else
{
err = (*odesc->extract) (odesc, insn, &value);