aboutsummaryrefslogtreecommitdiff
path: root/opcodes/i386-dis.c
diff options
context:
space:
mode:
Diffstat (limited to 'opcodes/i386-dis.c')
-rw-r--r--opcodes/i386-dis.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/opcodes/i386-dis.c b/opcodes/i386-dis.c
index 7edae20..f2c7959 100644
--- a/opcodes/i386-dis.c
+++ b/opcodes/i386-dis.c
@@ -950,6 +950,9 @@ enum
MOD_0F38F8,
MOD_VEX_0F3849_X86_64_L_0_W_0,
+
+ MOD_EVEX_MAP4_F8_P_1,
+ MOD_EVEX_MAP4_F8_P_3,
};
enum
@@ -1356,6 +1359,7 @@ enum
EVEX_MAP4,
EVEX_MAP5,
EVEX_MAP6,
+ EVEX_MAP7,
};
enum
@@ -9090,6 +9094,9 @@ get_valid_dis386 (const struct dis386 *dp, instr_info *ins)
case 0x6:
vex_table_index = EVEX_MAP6;
break;
+ case 0x7:
+ vex_table_index = EVEX_MAP7;
+ break;
}
/* The second byte after 0x62. */
@@ -9159,7 +9166,12 @@ get_valid_dis386 (const struct dis386 *dp, instr_info *ins)
ins->codep++;
vindex = *ins->codep++;
- dp = &evex_table[vex_table_index][vindex];
+ if (vex_table_index != EVEX_MAP7)
+ dp = &evex_table[vex_table_index][vindex];
+ else if (vindex == 0xf8)
+ dp = &map7_f8_opcode;
+ else
+ dp = &bad_opcode;
ins->end_codep = ins->codep;
if (!fetch_modrm (ins))
return &err_opcode;