aboutsummaryrefslogtreecommitdiff
path: root/opcodes/ia64-dis.c
diff options
context:
space:
mode:
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);