X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=opcodes%2Fia64-dis.c;h=f2f0f3c98914686024c2bb7062339479bb76a14f;hb=ebe84f23d2f3c0cb145cc7b3acfb011a4c7df1c9;hp=44926c7a18438c461a535007be38ff416cc0d355;hpb=80098f5188c3583fbb186b4e3e516a554053b96f;p=deliverable%2Fbinutils-gdb.git diff --git a/opcodes/ia64-dis.c b/opcodes/ia64-dis.c index 44926c7a18..f2f0f3c989 100644 --- a/opcodes/ia64-dis.c +++ b/opcodes/ia64-dis.c @@ -1,5 +1,5 @@ /* ia64-dis.c -- Disassemble ia64 instructions - Copyright 1998, 1999, 2000, 2002, 2007 Free Software Foundation, Inc. + Copyright (C) 1998-2020 Free Software Foundation, Inc. Contributed by David Mosberger-Tang This file is part of the GNU opcodes library. @@ -19,10 +19,10 @@ Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ +#include "sysdep.h" #include -#include -#include "dis-asm.h" +#include "disassemble.h" #include "opcode/ia64.h" #define NELEMS(a) ((int) (sizeof (a) / sizeof (a[0]))) @@ -68,7 +68,7 @@ unit_to_type (ia64_insn opcode, enum ia64_unit unit) int print_insn_ia64 (bfd_vma memaddr, struct disassemble_info *info) { - ia64_insn t0, t1, slot[3], template, s_bit, insn; + ia64_insn t0, t1, slot[3], template_val, s_bit, insn; int slotnum, j, status, need_comma, retval, slot_multiplier; const struct ia64_operand *odesc; const struct ia64_opcode *idesc; @@ -100,20 +100,20 @@ print_insn_ia64 (bfd_vma memaddr, struct disassemble_info *info) t0 = bfd_getl64 (bundle); t1 = bfd_getl64 (bundle + 8); s_bit = t0 & 1; - template = (t0 >> 1) & 0xf; + template_val = (t0 >> 1) & 0xf; slot[0] = (t0 >> 5) & 0x1ffffffffffLL; slot[1] = ((t0 >> 46) & 0x3ffff) | ((t1 & 0x7fffff) << 18); slot[2] = (t1 >> 23) & 0x1ffffffffffLL; - tname = ia64_templ_desc[template].name; + tname = ia64_templ_desc[template_val].name; if (slotnum == 0) (*info->fprintf_func) (info->stream, "[%s] ", tname); else (*info->fprintf_func) (info->stream, " "); - unit = ia64_templ_desc[template].exec_unit[slotnum]; + unit = ia64_templ_desc[template_val].exec_unit[slotnum]; - if (template == 2 && slotnum == 1) + if (template_val == 2 && slotnum == 1) { /* skip L slot in MLI template: */ slotnum = 2; @@ -182,7 +182,7 @@ print_insn_ia64 (bfd_vma memaddr, struct disassemble_info *info) } } - switch (odesc->class) + switch (odesc->op_class) { case IA64_OPND_CLASS_CST: (*info->fprintf_func) (info->stream, "%s", odesc->str); @@ -240,6 +240,8 @@ print_insn_ia64 (bfd_vma memaddr, struct disassemble_info *info) case 23: strcpy (regname, "cr.ifs"); break; case 24: strcpy (regname, "cr.iim"); break; case 25: strcpy (regname, "cr.iha"); break; + case 26: strcpy (regname, "cr.iib0"); break; + case 27: strcpy (regname, "cr.iib1"); break; case 64: strcpy (regname, "cr.lid"); break; case 65: strcpy (regname, "cr.ivr"); break; case 66: strcpy (regname, "cr.tpr"); break; @@ -301,7 +303,7 @@ print_insn_ia64 (bfd_vma memaddr, struct disassemble_info *info) need_comma = 0; } } - if (slotnum + 1 == ia64_templ_desc[template].group_boundary + if (slotnum + 1 == ia64_templ_desc[template_val].group_boundary || ((slotnum == 2) && s_bit)) (*info->fprintf_func) (info->stream, ";;");