X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=opcodes%2Fia64-dis.c;h=bae99f09b2a542ba3bd1b165ba97ad7e0d8ba046;hb=e3f1ad4fd2e99bd226f19f88c513f13f3434de44;hp=23b07a3f71accf5d3a10c9ccd9e42fd06c2af343;hpb=679936aac4c61ba53dc087d4d069543f3785a20c;p=deliverable%2Fbinutils-gdb.git diff --git a/opcodes/ia64-dis.c b/opcodes/ia64-dis.c index 23b07a3f71..bae99f09b2 100644 --- a/opcodes/ia64-dis.c +++ b/opcodes/ia64-dis.c @@ -1,5 +1,6 @@ /* ia64-dis.c -- Disassemble ia64 instructions - Copyright 1998, 1999, 2000, 2002, 2007 Free Software Foundation, Inc. + Copyright 1998, 1999, 2000, 2002, 2005, 2007, 2008, 2009, 2012 + Free Software Foundation, Inc. Contributed by David Mosberger-Tang This file is part of the GNU opcodes library. @@ -19,8 +20,8 @@ Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ +#include "sysdep.h" #include -#include #include "dis-asm.h" #include "opcode/ia64.h" @@ -68,7 +69,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 +101,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 +183,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); @@ -201,10 +202,19 @@ print_insn_ia64 (bfd_vma memaddr, struct disassemble_info *info) case 17: strcpy (regname, "ar.bsp"); break; case 18: strcpy (regname, "ar.bspstore"); break; case 19: strcpy (regname, "ar.rnat"); break; + case 21: strcpy (regname, "ar.fcr"); break; + case 24: strcpy (regname, "ar.eflag"); break; + case 25: strcpy (regname, "ar.csd"); break; + case 26: strcpy (regname, "ar.ssd"); break; + case 27: strcpy (regname, "ar.cflg"); break; + case 28: strcpy (regname, "ar.fsr"); break; + case 29: strcpy (regname, "ar.fir"); break; + case 30: strcpy (regname, "ar.fdr"); break; case 32: strcpy (regname, "ar.ccv"); break; case 36: strcpy (regname, "ar.unat"); break; case 40: strcpy (regname, "ar.fpsr"); break; case 44: strcpy (regname, "ar.itc"); break; + case 45: strcpy (regname, "ar.ruc"); break; case 64: strcpy (regname, "ar.pfs"); break; case 65: strcpy (regname, "ar.lc"); break; case 66: strcpy (regname, "ar.ec"); break; @@ -231,6 +241,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; @@ -292,7 +304,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, ";;");