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.c112
1 files changed, 104 insertions, 8 deletions
diff --git a/opcodes/i386-dis.c b/opcodes/i386-dis.c
index c0688cf..6c2b513 100644
--- a/opcodes/i386-dis.c
+++ b/opcodes/i386-dis.c
@@ -939,7 +939,12 @@ fetch_data (struct disassemble_info *info, bfd_byte *addr)
#define PREFIX_VEX_383F (PREFIX_VEX_383E + 1)
#define PREFIX_VEX_3840 (PREFIX_VEX_383F + 1)
#define PREFIX_VEX_3841 (PREFIX_VEX_3840 + 1)
-#define PREFIX_VEX_3A04 (PREFIX_VEX_3841 + 1)
+#define PREFIX_VEX_38DB (PREFIX_VEX_3841 + 1)
+#define PREFIX_VEX_38DC (PREFIX_VEX_38DB + 1)
+#define PREFIX_VEX_38DD (PREFIX_VEX_38DC + 1)
+#define PREFIX_VEX_38DE (PREFIX_VEX_38DD + 1)
+#define PREFIX_VEX_38DF (PREFIX_VEX_38DE + 1)
+#define PREFIX_VEX_3A04 (PREFIX_VEX_38DF + 1)
#define PREFIX_VEX_3A05 (PREFIX_VEX_3A04 + 1)
#define PREFIX_VEX_3A06 (PREFIX_VEX_3A05 + 1)
#define PREFIX_VEX_3A08 (PREFIX_VEX_3A06 + 1)
@@ -991,6 +996,7 @@ fetch_data (struct disassemble_info *info, bfd_byte *addr)
#define PREFIX_VEX_3A7D (PREFIX_VEX_3A7C + 1)
#define PREFIX_VEX_3A7E (PREFIX_VEX_3A7D + 1)
#define PREFIX_VEX_3A7F (PREFIX_VEX_3A7E + 1)
+#define PREFIX_VEX_3ADF (PREFIX_VEX_3A7F + 1)
#define X86_64_06 0
#define X86_64_07 (X86_64_06 + 1)
@@ -1200,7 +1206,12 @@ fetch_data (struct disassemble_info *info, bfd_byte *addr)
#define VEX_LEN_383F_P_2 (VEX_LEN_383E_P_2 + 1)
#define VEX_LEN_3840_P_2 (VEX_LEN_383F_P_2 + 1)
#define VEX_LEN_3841_P_2 (VEX_LEN_3840_P_2 + 1)
-#define VEX_LEN_3A06_P_2 (VEX_LEN_3841_P_2 + 1)
+#define VEX_LEN_38DB_P_2 (VEX_LEN_3841_P_2 + 1)
+#define VEX_LEN_38DC_P_2 (VEX_LEN_38DB_P_2 + 1)
+#define VEX_LEN_38DD_P_2 (VEX_LEN_38DC_P_2 + 1)
+#define VEX_LEN_38DE_P_2 (VEX_LEN_38DD_P_2 + 1)
+#define VEX_LEN_38DF_P_2 (VEX_LEN_38DE_P_2 + 1)
+#define VEX_LEN_3A06_P_2 (VEX_LEN_38DF_P_2 + 1)
#define VEX_LEN_3A0A_P_2 (VEX_LEN_3A06_P_2 + 1)
#define VEX_LEN_3A0B_P_2 (VEX_LEN_3A0A_P_2 + 1)
#define VEX_LEN_3A0E_P_2 (VEX_LEN_3A0B_P_2 + 1)
@@ -1229,6 +1240,7 @@ fetch_data (struct disassemble_info *info, bfd_byte *addr)
#define VEX_LEN_3A7B_P_2 (VEX_LEN_3A7A_P_2 + 1)
#define VEX_LEN_3A7E_P_2 (VEX_LEN_3A7B_P_2 + 1)
#define VEX_LEN_3A7F_P_2 (VEX_LEN_3A7E_P_2 + 1)
+#define VEX_LEN_3ADF_P_2 (VEX_LEN_3A7F_P_2 + 1)
typedef void (*op_rtn) (int bytemode, int sizeflag);
@@ -4536,6 +4548,46 @@ static const struct dis386 prefix_table[][4] = {
{ "(bad)", { XX } },
},
+ /* PREFIX_VEX_38DB */
+ {
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { VEX_LEN_TABLE (VEX_LEN_38DB_P_2) },
+ { "(bad)", { XX } },
+ },
+
+ /* PREFIX_VEX_38DC */
+ {
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { VEX_LEN_TABLE (VEX_LEN_38DC_P_2) },
+ { "(bad)", { XX } },
+ },
+
+ /* PREFIX_VEX_38DD */
+ {
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { VEX_LEN_TABLE (VEX_LEN_38DD_P_2) },
+ { "(bad)", { XX } },
+ },
+
+ /* PREFIX_VEX_38DE */
+ {
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { VEX_LEN_TABLE (VEX_LEN_38DE_P_2) },
+ { "(bad)", { XX } },
+ },
+
+ /* PREFIX_VEX_38DF */
+ {
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { VEX_LEN_TABLE (VEX_LEN_38DF_P_2) },
+ { "(bad)", { XX } },
+ },
+
/* PREFIX_VEX_3A04 */
{
{ "(bad)", { XX } },
@@ -4951,6 +5003,14 @@ static const struct dis386 prefix_table[][4] = {
{ VEX_LEN_TABLE (VEX_LEN_3A7F_P_2) },
{ "(bad)", { XX } },
},
+
+ /* PREFIX_VEX_3ADF */
+ {
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { VEX_LEN_TABLE (VEX_LEN_3ADF_P_2) },
+ { "(bad)", { XX } },
+ },
};
static const struct dis386 x86_64_table[][2] = {
@@ -7413,11 +7473,11 @@ static const struct dis386 vex_table[][256] = {
{ "(bad)", { XX } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { PREFIX_TABLE (PREFIX_VEX_38DB) },
+ { PREFIX_TABLE (PREFIX_VEX_38DC) },
+ { PREFIX_TABLE (PREFIX_VEX_38DD) },
+ { PREFIX_TABLE (PREFIX_VEX_38DE) },
+ { PREFIX_TABLE (PREFIX_VEX_38DF) },
/* e0 */
{ "(bad)", { XX } },
{ "(bad)", { XX } },
@@ -7708,7 +7768,7 @@ static const struct dis386 vex_table[][256] = {
{ "(bad)", { XX } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
- { "(bad)", { XX } },
+ { PREFIX_TABLE (PREFIX_VEX_3ADF) },
/* e0 */
{ "(bad)", { XX } },
{ "(bad)", { XX } },
@@ -8757,6 +8817,36 @@ static const struct dis386 vex_len_table[][2] = {
{ "(bad)", { XX } },
},
+ /* VEX_LEN_38DB_P_2 */
+ {
+ { "vaesimc", { XM, EXx } },
+ { "(bad)", { XX } },
+ },
+
+ /* VEX_LEN_38DC_P_2 */
+ {
+ { "vaesenc", { XM, Vex128, EXx } },
+ { "(bad)", { XX } },
+ },
+
+ /* VEX_LEN_38DD_P_2 */
+ {
+ { "vaesenclast", { XM, Vex128, EXx } },
+ { "(bad)", { XX } },
+ },
+
+ /* VEX_LEN_38DE_P_2 */
+ {
+ { "vaesdec", { XM, Vex128, EXx } },
+ { "(bad)", { XX } },
+ },
+
+ /* VEX_LEN_38DF_P_2 */
+ {
+ { "vaesdeclast", { XM, Vex128, EXx } },
+ { "(bad)", { XX } },
+ },
+
/* VEX_LEN_3A06_P_2 */
{
{ "(bad)", { XX } },
@@ -8930,6 +9020,12 @@ static const struct dis386 vex_len_table[][2] = {
{ "vfnmsubsd", { XMVexW, Vex128FMA, EXqVexW, EXqVexW, VexI4 } },
{ "(bad)", { XX } },
},
+
+ /* VEX_LEN_3ADF_P_2 */
+ {
+ { "vaeskeygenassist", { XM, EXx, Ib } },
+ { "(bad)", { XX } },
+ },
};
static const struct dis386 mod_table[][2] = {