static xtensa_insnbuf slot_buffer = NULL;
int first, first_slot, valid_insn;
property_table_entry *insn_block;
+ enum dis_insn_type insn_type;
+ bfd_vma target;
if (!xtensa_default_isa)
xtensa_default_isa = xtensa_isa_init (0, 0);
if (nslots > 1)
(*info->fprintf_func) (info->stream, "{ ");
- info->insn_type = dis_nonbranch;
- info->insn_info_valid = 1;
-
+ insn_type = dis_nonbranch;
+ target = 0;
first_slot = 1;
for (n = 0; n < nslots; n++)
{
+ int imm_pcrel = 0;
+
if (first_slot)
first_slot = 0;
else
info->insn_type = dis_branch;
else if (xtensa_opcode_is_call (isa, opc))
info->insn_type = dis_jsr;
+ else
+ info->insn_type = dis_nonbranch;
/* Print the operands (if any). */
noperands = xtensa_opcode_num_operands (isa, opc);
slot_buffer, &operand_val);
print_xtensa_operand (memaddr, info, opc, i, operand_val);
+ if (xtensa_operand_is_PCrelative (isa, opc, i))
+ ++imm_pcrel;
+ }
+ if (!imm_pcrel)
+ info->insn_type = dis_nonbranch;
+ if (info->insn_type != dis_nonbranch)
+ {
+ insn_type = info->insn_type;
+ target = info->target;
}
}
+ info->insn_type = insn_type;
+ info->target = target;
+ info->insn_info_valid = 1;
if (nslots > 1)
(*info->fprintf_func) (info->stream, " }");