diff options
Diffstat (limited to 'opcodes/i386-dis.c')
-rw-r--r-- | opcodes/i386-dis.c | 112 |
1 files changed, 55 insertions, 57 deletions
diff --git a/opcodes/i386-dis.c b/opcodes/i386-dis.c index 07fcf32..398be8b 100644 --- a/opcodes/i386-dis.c +++ b/opcodes/i386-dis.c @@ -120,8 +120,8 @@ static void ATTRIBUTE_PRINTF_3 i386_dis_printf (const disassemble_info *, struct dis_private { /* Points to first byte not fetched. */ - bfd_byte *max_fetched; - bfd_byte the_buffer[MAX_MNEM_SIZE]; + uint8_t *max_fetched; + uint8_t the_buffer[MAX_MNEM_SIZE]; bfd_vma insn_start; int orig_sizeflag; }; @@ -133,7 +133,7 @@ enum address_mode mode_64bit }; -static const char *prefix_name (enum address_mode, int, int); +static const char *prefix_name (enum address_mode, uint8_t, int); enum x86_64_isa { @@ -149,9 +149,9 @@ struct instr_info int prefixes; /* REX prefix the current instruction. See below. */ - unsigned char rex; + uint8_t rex; /* Bits of REX we've already used. */ - unsigned char rex_used; + uint8_t rex_used; bool need_modrm; bool need_vex; @@ -168,10 +168,10 @@ struct instr_info char obuf[MAX_OPERAND_BUFFER_SIZE]; char *obufp; char *mnemonicendp; - unsigned char *start_codep; - unsigned char *insn_codep; - unsigned char *codep; - unsigned char *end_codep; + const uint8_t *start_codep; + uint8_t *insn_codep; + uint8_t *codep; + const uint8_t *end_codep; signed char last_lock_prefix; signed char last_repz_prefix; signed char last_repnz_prefix; @@ -186,7 +186,7 @@ struct instr_info #define MAX_CODE_LENGTH 15 /* We can up to 14 ins->prefixes since the maximum instruction length is 15bytes. */ - unsigned char all_prefixes[MAX_CODE_LENGTH - 1]; + uint8_t all_prefixes[MAX_CODE_LENGTH - 1]; disassemble_info *info; struct @@ -288,7 +288,7 @@ struct instr_info to ADDR (exclusive) are valid. Returns true for success, false on error. */ static bool -fetch_code (struct disassemble_info *info, bfd_byte *until) +fetch_code (struct disassemble_info *info, uint8_t *until) { int status = -1; struct dis_private *priv = info->private_data; @@ -8833,7 +8833,8 @@ static enum { } ckprefix (instr_info *ins) { - int newrex, i, length; + int i, length; + uint8_t newrex; i = 0; length = 0; @@ -8843,7 +8844,7 @@ ckprefix (instr_info *ins) if (!fetch_code (ins->info, ins->codep + 1)) return ckp_fetch_error; newrex = 0; - switch (*ins->codep & 0xff) + switch (*ins->codep) { /* REX prefixes family. */ case 0x40: @@ -8863,7 +8864,7 @@ ckprefix (instr_info *ins) case 0x4e: case 0x4f: if (ins->address_mode == mode_64bit) - newrex = *ins->codep & 0xff; + newrex = *ins->codep; else return ckp_okay; ins->last_rex_prefix = i; @@ -8943,8 +8944,8 @@ ckprefix (instr_info *ins) /* Rex is ignored when followed by another prefix. */ if (ins->rex) return ckp_bogus; - if ((*ins->codep & 0xff) != FWAIT_OPCODE) - ins->all_prefixes[i++] = *ins->codep & 0xff; + if (*ins->codep != FWAIT_OPCODE) + ins->all_prefixes[i++] = *ins->codep; ins->rex = newrex; ins->codep++; length++; @@ -8956,7 +8957,7 @@ ckprefix (instr_info *ins) prefix byte. */ static const char * -prefix_name (enum address_mode mode, int pref, int sizeflag) +prefix_name (enum address_mode mode, uint8_t pref, int sizeflag) { static const char *rexes [16] = { @@ -9175,7 +9176,7 @@ get_valid_dis386 (const struct dis386 *dp, instr_info *ins) case USE_3BYTE_TABLE: if (!fetch_code (ins->info, ins->codep + 2)) return &err_opcode; - vindex = *ins->codep++ & 0xff; + vindex = *ins->codep++; dp = &three_byte_table[dp->op[1].bytemode][vindex]; ins->end_codep = ins->codep; if (!fetch_modrm (ins)) @@ -9282,7 +9283,7 @@ get_valid_dis386 (const struct dis386 *dp, instr_info *ins) } ins->need_vex = true; ins->codep++; - vindex = *ins->codep++ & 0xff; + vindex = *ins->codep++; dp = &xop_table[vex_table_index][vindex]; ins->end_codep = ins->codep; @@ -9347,7 +9348,7 @@ get_valid_dis386 (const struct dis386 *dp, instr_info *ins) } ins->need_vex = true; ins->codep++; - vindex = *ins->codep++ & 0xff; + vindex = *ins->codep++; dp = &vex_table[vex_table_index][vindex]; ins->end_codep = ins->codep; /* There is no MODRM byte for VEX0F 77. */ @@ -9382,7 +9383,7 @@ get_valid_dis386 (const struct dis386 *dp, instr_info *ins) } ins->need_vex = true; ins->codep++; - vindex = *ins->codep++ & 0xff; + vindex = *ins->codep++; dp = &vex_table[dp->op[1].bytemode][vindex]; ins->end_codep = ins->codep; /* There is no MODRM byte for VEX 77. */ @@ -9474,7 +9475,7 @@ get_valid_dis386 (const struct dis386 *dp, instr_info *ins) ins->need_vex = true; ins->codep++; - vindex = *ins->codep++ & 0xff; + vindex = *ins->codep++; dp = &evex_table[vex_table_index][vindex]; ins->end_codep = ins->codep; if (!fetch_modrm (ins)) @@ -9821,11 +9822,10 @@ print_insn (bfd_vma pc, disassemble_info *info, int intel_syntax) goto out; } - ins.two_source_ops = ((*ins.codep & 0xff) == 0x62 - || (*ins.codep & 0xff) == 0xc8); + ins.two_source_ops = (*ins.codep == 0x62 || *ins.codep == 0xc8); if ((ins.prefixes & PREFIX_FWAIT) - && ((*ins.codep & 0xff) < 0xd8 || (*ins.codep & 0xff) > 0xdf)) + && (*ins.codep < 0xd8 || *ins.codep > 0xdf)) { /* Handle ins.prefixes before fwait. */ for (i = 0; i < ins.fwait_prefix && ins.all_prefixes[i]; @@ -9838,22 +9838,22 @@ print_insn (bfd_vma pc, disassemble_info *info, int intel_syntax) goto out; } - if ((*ins.codep & 0xff) == 0x0f) + if (*ins.codep == 0x0f) { unsigned char threebyte; ins.codep++; if (!fetch_code (info, ins.codep + 1)) goto fetch_error_out; - threebyte = *ins.codep & 0xff; + threebyte = *ins.codep; dp = &dis386_twobyte[threebyte]; ins.need_modrm = twobyte_has_modrm[threebyte]; ins.codep++; } else { - dp = &dis386[*ins.codep & 0xff]; - ins.need_modrm = onebyte_has_modrm[*ins.codep & 0xff]; + dp = &dis386[*ins.codep]; + ins.need_modrm = onebyte_has_modrm[*ins.codep]; ins.codep++; } @@ -10553,9 +10553,7 @@ static bool dofloat (instr_info *ins, int sizeflag) { const struct dis386 *dp; - unsigned char floatop; - - floatop = ins->codep[-1] & 0xff; + unsigned char floatop = ins->codep[-1]; if (ins->modrm.mod != 3) { @@ -10576,7 +10574,7 @@ dofloat (instr_info *ins, int sizeflag) putop (ins, fgrps[dp->op[0].bytemode][ins->modrm.rm], sizeflag); /* Instruction fnstsw is only one with strange arg. */ - if (floatop == 0xdf && (ins->codep[-1] & 0xff) == 0xe0) + if (floatop == 0xdf && ins->codep[-1] == 0xe0) strcpy (ins->op_out[0], att_names16[0] + ins->intel_syntax); } else @@ -11749,7 +11747,7 @@ get8s (instr_info *ins, bfd_vma *res) { if (!fetch_code (ins->info, ins->codep + 1)) return false; - *res = (((bfd_vma) *ins->codep++ & 0xff) ^ 0x80) - 0x80; + *res = ((bfd_vma) *ins->codep++ ^ 0x80) - 0x80; return true; } @@ -11758,8 +11756,8 @@ get16 (instr_info *ins, bfd_vma *res) { if (!fetch_code (ins->info, ins->codep + 2)) return false; - *res = (bfd_vma) *ins->codep++ & 0xff; - *res |= ((bfd_vma) *ins->codep++ & 0xff) << 8; + *res = *ins->codep++; + *res |= (bfd_vma) *ins->codep++ << 8; return true; } @@ -11777,10 +11775,10 @@ get32 (instr_info *ins, bfd_vma *res) { if (!fetch_code (ins->info, ins->codep + 4)) return false; - *res = *ins->codep++ & (bfd_vma) 0xff; - *res |= (*ins->codep++ & (bfd_vma) 0xff) << 8; - *res |= (*ins->codep++ & (bfd_vma) 0xff) << 16; - *res |= (*ins->codep++ & (bfd_vma) 0xff) << 24; + *res = *ins->codep++; + *res |= (bfd_vma) *ins->codep++ << 8; + *res |= (bfd_vma) *ins->codep++ << 16; + *res |= (bfd_vma) *ins->codep++ << 24; return true; } @@ -11803,14 +11801,14 @@ get64 (instr_info *ins, uint64_t *res) if (!fetch_code (ins->info, ins->codep + 8)) return false; - a = *ins->codep++ & 0xff; - a |= (*ins->codep++ & 0xff) << 8; - a |= (*ins->codep++ & 0xff) << 16; - a |= (*ins->codep++ & 0xffu) << 24; - b = *ins->codep++ & 0xff; - b |= (*ins->codep++ & 0xff) << 8; - b |= (*ins->codep++ & 0xff) << 16; - b |= (*ins->codep++ & 0xffu) << 24; + a = *ins->codep++; + a |= (unsigned int) *ins->codep++ << 8; + a |= (unsigned int) *ins->codep++ << 16; + a |= (unsigned int) *ins->codep++ << 24; + b = *ins->codep++; + b |= (unsigned int) *ins->codep++ << 8; + b |= (unsigned int) *ins->codep++ << 16; + b |= (unsigned int) *ins->codep++ << 24; *res = a + ((uint64_t) b << 32); return true; } @@ -12489,7 +12487,7 @@ OP_I (instr_info *ins, int bytemode, int sizeflag) case b_mode: if (!fetch_code (ins->info, ins->codep + 1)) return false; - op = *ins->codep++ & 0xff; + op = *ins->codep++; break; case v_mode: USED_REX (REX_W); @@ -12776,7 +12774,7 @@ OP_ESreg (instr_info *ins, int code, int sizeflag) { if (ins->intel_syntax) { - switch (ins->codep[-1] & 0xff) + switch (ins->codep[-1]) { case 0x6d: /* insw/insl */ intel_operand_size (ins, z_mode, sizeflag); @@ -12802,7 +12800,7 @@ OP_DSreg (instr_info *ins, int code, int sizeflag) { if (ins->intel_syntax) { - switch (ins->codep[-1] & 0xff) + switch (ins->codep[-1]) { case 0x6f: /* outsw/outsl */ intel_operand_size (ins, z_mode, sizeflag); @@ -13248,7 +13246,7 @@ OP_3DNowSuffix (instr_info *ins, int bytemode ATTRIBUTE_UNUSED, place where an 8-bit immediate would normally go. ie. the last byte of the instruction. */ ins->obufp = ins->mnemonicendp; - mnemonic = Suffix3DNow[*ins->codep++ & 0xff]; + mnemonic = Suffix3DNow[*ins->codep++]; if (mnemonic) ins->obufp = stpcpy (ins->obufp, mnemonic); else @@ -13313,7 +13311,7 @@ CMP_Fixup (instr_info *ins, int bytemode ATTRIBUTE_UNUSED, if (!fetch_code (ins->info, ins->codep + 1)) return false; - cmp_type = *ins->codep++ & 0xff; + cmp_type = *ins->codep++; if (cmp_type < ARRAY_SIZE (simd_cmp_op)) { char suffix[3]; @@ -13763,7 +13761,7 @@ OP_REG_VexI4 (instr_info *ins, int bytemode, int sizeflag ATTRIBUTE_UNUSED) if (!fetch_code (ins->info, ins->codep + 1)) return false; - reg = *ins->codep++ & 0xff; + reg = *ins->codep++; if (bytemode != x_mode && bytemode != scalar_mode) abort (); @@ -13807,7 +13805,7 @@ VPCMP_Fixup (instr_info *ins, int bytemode ATTRIBUTE_UNUSED, if (!fetch_code (ins->info, ins->codep + 1)) return false; - cmp_type = *ins->codep++ & 0xff; + cmp_type = *ins->codep++; /* There are aliases for immediates 0, 1, 2, 4, 5, 6. If it's the case, print suffix, otherwise - print the immediate. */ if (cmp_type < ARRAY_SIZE (simd_cmp_op) @@ -13862,7 +13860,7 @@ VPCOM_Fixup (instr_info *ins, int bytemode ATTRIBUTE_UNUSED, if (!fetch_code (ins->info, ins->codep + 1)) return false; - cmp_type = *ins->codep++ & 0xff; + cmp_type = *ins->codep++; if (cmp_type < ARRAY_SIZE (xop_cmp_op)) { char suffix[3]; @@ -13909,7 +13907,7 @@ PCLMUL_Fixup (instr_info *ins, int bytemode ATTRIBUTE_UNUSED, if (!fetch_code (ins->info, ins->codep + 1)) return false; - pclmul_type = *ins->codep++ & 0xff; + pclmul_type = *ins->codep++; switch (pclmul_type) { case 0x10: |