X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=opcodes%2Fi386-dis-evex.h;h=c2278001d0d82aec28db06b955aced8052fb2045;hb=2645e1d0798da9487def06d14bb744c33dba702d;hp=14426b09b2e1273ee6b9216c279ec33d730533a3;hpb=bf890a93a7c46f63fc0595189cf2b388e9a29316;p=deliverable%2Fbinutils-gdb.git diff --git a/opcodes/i386-dis-evex.h b/opcodes/i386-dis-evex.h index 14426b09b2..c2278001d0 100644 --- a/opcodes/i386-dis-evex.h +++ b/opcodes/i386-dis-evex.h @@ -385,12 +385,12 @@ static const struct dis386 evex_table[][256] = { { PREFIX_TABLE (PREFIX_EVEX_0F384E) }, { PREFIX_TABLE (PREFIX_EVEX_0F384F) }, /* 50 */ - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, + { PREFIX_TABLE (PREFIX_EVEX_0F3850) }, + { PREFIX_TABLE (PREFIX_EVEX_0F3851) }, + { PREFIX_TABLE (PREFIX_EVEX_0F3852) }, + { PREFIX_TABLE (PREFIX_EVEX_0F3853) }, + { PREFIX_TABLE (PREFIX_EVEX_0F3854) }, + { PREFIX_TABLE (PREFIX_EVEX_0F3855) }, { Bad_Opcode }, { Bad_Opcode }, /* 58 */ @@ -405,8 +405,8 @@ static const struct dis386 evex_table[][256] = { /* 60 */ { Bad_Opcode }, { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, + { PREFIX_TABLE (PREFIX_EVEX_0F3862) }, + { PREFIX_TABLE (PREFIX_EVEX_0F3863) }, { PREFIX_TABLE (PREFIX_EVEX_0F3864) }, { PREFIX_TABLE (PREFIX_EVEX_0F3865) }, { PREFIX_TABLE (PREFIX_EVEX_0F3866) }, @@ -421,10 +421,10 @@ static const struct dis386 evex_table[][256] = { { Bad_Opcode }, { Bad_Opcode }, /* 70 */ - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, + { PREFIX_TABLE (PREFIX_EVEX_0F3870) }, + { PREFIX_TABLE (PREFIX_EVEX_0F3871) }, + { PREFIX_TABLE (PREFIX_EVEX_0F3872) }, + { PREFIX_TABLE (PREFIX_EVEX_0F3873) }, { Bad_Opcode }, { PREFIX_TABLE (PREFIX_EVEX_0F3875) }, { PREFIX_TABLE (PREFIX_EVEX_0F3876) }, @@ -455,7 +455,7 @@ static const struct dis386 evex_table[][256] = { { Bad_Opcode }, { PREFIX_TABLE (PREFIX_EVEX_0F388D) }, { Bad_Opcode }, - { Bad_Opcode }, + { PREFIX_TABLE (PREFIX_EVEX_0F388F) }, /* 90 */ { PREFIX_TABLE (PREFIX_EVEX_0F3890) }, { PREFIX_TABLE (PREFIX_EVEX_0F3891) }, @@ -527,7 +527,7 @@ static const struct dis386 evex_table[][256] = { { PREFIX_TABLE (PREFIX_EVEX_0F38CC) }, { PREFIX_TABLE (PREFIX_EVEX_0F38CD) }, { Bad_Opcode }, - { Bad_Opcode }, + { PREFIX_TABLE (PREFIX_EVEX_0F38CF) }, /* D0 */ { Bad_Opcode }, { Bad_Opcode }, @@ -542,10 +542,10 @@ static const struct dis386 evex_table[][256] = { { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, + { PREFIX_TABLE (PREFIX_EVEX_0F38DC) }, + { PREFIX_TABLE (PREFIX_EVEX_0F38DD) }, + { PREFIX_TABLE (PREFIX_EVEX_0F38DE) }, + { PREFIX_TABLE (PREFIX_EVEX_0F38DF) }, /* E0 */ { Bad_Opcode }, { Bad_Opcode }, @@ -662,7 +662,7 @@ static const struct dis386 evex_table[][256] = { { Bad_Opcode }, { PREFIX_TABLE (PREFIX_EVEX_0F3A42) }, { PREFIX_TABLE (PREFIX_EVEX_0F3A43) }, - { Bad_Opcode }, + { PREFIX_TABLE (PREFIX_EVEX_0F3A44) }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, @@ -712,10 +712,10 @@ static const struct dis386 evex_table[][256] = { { Bad_Opcode }, { Bad_Opcode }, /* 70 */ - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, + { PREFIX_TABLE (PREFIX_EVEX_0F3A70) }, + { PREFIX_TABLE (PREFIX_EVEX_0F3A71) }, + { PREFIX_TABLE (PREFIX_EVEX_0F3A72) }, + { PREFIX_TABLE (PREFIX_EVEX_0F3A73) }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, @@ -817,8 +817,8 @@ static const struct dis386 evex_table[][256] = { { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, + { PREFIX_TABLE (PREFIX_EVEX_0F3ACE) }, + { PREFIX_TABLE (PREFIX_EVEX_0F3ACF) }, /* D0 */ { Bad_Opcode }, { Bad_Opcode }, @@ -2005,6 +2005,44 @@ static const struct dis386 evex_table[][256] = { { Bad_Opcode }, { "vrsqrt14s%XW", { XMScalar, VexScalar, EXxmm_mdq }, 0 }, }, + /* PREFIX_EVEX_0F3850 */ + { + { Bad_Opcode }, + { Bad_Opcode }, + { "vpdpbusd", { XM, Vex, EXx }, 0 }, + }, + /* PREFIX_EVEX_0F3851 */ + { + { Bad_Opcode }, + { Bad_Opcode }, + { "vpdpbusds", { XM, Vex, EXx }, 0 }, + }, + /* PREFIX_EVEX_0F3852 */ + { + { Bad_Opcode }, + { Bad_Opcode }, + { "vpdpwssd", { XM, Vex, EXx }, 0 }, + { "vp4dpwssd", { XM, Vex, EXxmm }, 0 }, + }, + /* PREFIX_EVEX_0F3853 */ + { + { Bad_Opcode }, + { Bad_Opcode }, + { "vpdpwssds", { XM, Vex, EXx }, 0 }, + { "vp4dpwssds", { XM, Vex, EXxmm }, 0 }, + }, + /* PREFIX_EVEX_0F3854 */ + { + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (EVEX_W_0F3854_P_2) }, + }, + /* PREFIX_EVEX_0F3855 */ + { + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (EVEX_W_0F3855_P_2) }, + }, /* PREFIX_EVEX_0F3858 */ { { Bad_Opcode }, @@ -2029,6 +2067,18 @@ static const struct dis386 evex_table[][256] = { { Bad_Opcode }, { VEX_W_TABLE (EVEX_W_0F385B_P_2) }, }, + /* PREFIX_EVEX_0F3862 */ + { + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (EVEX_W_0F3862_P_2) }, + }, + /* PREFIX_EVEX_0F3863 */ + { + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (EVEX_W_0F3863_P_2) }, + }, /* PREFIX_EVEX_0F3864 */ { { Bad_Opcode }, @@ -2047,6 +2097,30 @@ static const struct dis386 evex_table[][256] = { { Bad_Opcode }, { VEX_W_TABLE (EVEX_W_0F3866_P_2) }, }, + /* PREFIX_EVEX_0F3870 */ + { + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (EVEX_W_0F3870_P_2) }, + }, + /* PREFIX_EVEX_0F3871 */ + { + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (EVEX_W_0F3871_P_2) }, + }, + /* PREFIX_EVEX_0F3872 */ + { + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (EVEX_W_0F3872_P_2) }, + }, + /* PREFIX_EVEX_0F3873 */ + { + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (EVEX_W_0F3873_P_2) }, + }, /* PREFIX_EVEX_0F3875 */ { { Bad_Opcode }, @@ -2149,6 +2223,12 @@ static const struct dis386 evex_table[][256] = { { Bad_Opcode }, { VEX_W_TABLE (EVEX_W_0F388D_P_2) }, }, + /* PREFIX_EVEX_0F388F */ + { + { Bad_Opcode }, + { Bad_Opcode }, + { "vpshufbitqmb", { XMask, Vex, EXx }, 0 }, + }, /* PREFIX_EVEX_0F3890 */ { { Bad_Opcode }, @@ -2202,12 +2282,14 @@ static const struct dis386 evex_table[][256] = { { Bad_Opcode }, { Bad_Opcode }, { "vfmsub132p%XW", { XM, Vex, EXx, EXxEVexR }, 0 }, + { "v4fmaddps", { XM, Vex, Mxmm }, 0 }, }, /* PREFIX_EVEX_0F389B */ { { Bad_Opcode }, { Bad_Opcode }, { "vfmsub132s%XW", { XMScalar, VexScalar, EXxmm_mdq, EXxEVexR }, 0 }, + { "v4fmaddss", { XMScalar, VexScalar, Mxmm }, 0 }, }, /* PREFIX_EVEX_0F389C */ { @@ -2286,12 +2368,14 @@ static const struct dis386 evex_table[][256] = { { Bad_Opcode }, { Bad_Opcode }, { "vfmsub213p%XW", { XM, Vex, EXx, EXxEVexR }, 0 }, + { "v4fnmaddps", { XM, Vex, Mxmm }, 0 }, }, /* PREFIX_EVEX_0F38AB */ { { Bad_Opcode }, { Bad_Opcode }, { "vfmsub213s%XW", { XMScalar, VexScalar, EXxmm_mdq, EXxEVexR }, 0 }, + { "v4fnmaddss", { XMScalar, VexScalar, Mxmm }, 0 }, }, /* PREFIX_EVEX_0F38AC */ { @@ -2473,6 +2557,36 @@ static const struct dis386 evex_table[][256] = { { Bad_Opcode }, { "vrsqrt28s%XW", { XMScalar, VexScalar, EXxmm_mdq, EXxEVexS }, 0 }, }, + /* PREFIX_EVEX_0F38CF */ + { + { Bad_Opcode }, + { Bad_Opcode }, + { "vgf2p8mulb", { XM, Vex, EXx }, 0 }, + }, + /* PREFIX_EVEX_0F38DC */ + { + { Bad_Opcode }, + { Bad_Opcode }, + { "vaesenc", { XM, Vex, EXx }, 0 }, + }, + /* PREFIX_EVEX_0F38DD */ + { + { Bad_Opcode }, + { Bad_Opcode }, + { "vaesenclast", { XM, Vex, EXx }, 0 }, + }, + /* PREFIX_EVEX_0F38DE */ + { + { Bad_Opcode }, + { Bad_Opcode }, + { "vaesdec", { XM, Vex, EXx }, 0 }, + }, + /* PREFIX_EVEX_0F38DF */ + { + { Bad_Opcode }, + { Bad_Opcode }, + { "vaesdeclast", { XM, Vex, EXx }, 0 }, + }, /* PREFIX_EVEX_0F3A00 */ { { Bad_Opcode }, @@ -2543,7 +2657,7 @@ static const struct dis386 evex_table[][256] = { { { Bad_Opcode }, { Bad_Opcode }, - { "vpextrw", { EdqwS, XM, Ib }, 0 }, + { "vpextrw", { Edqw, XM, Ib }, 0 }, }, /* PREFIX_EVEX_0F3A16 */ { @@ -2689,6 +2803,12 @@ static const struct dis386 evex_table[][256] = { { Bad_Opcode }, { VEX_W_TABLE (EVEX_W_0F3A43_P_2) }, }, + /* PREFIX_EVEX_0F3A44 */ + { + { Bad_Opcode }, + { Bad_Opcode }, + { "vpclmulqdq", { XM, Vex, EXx, Ib }, 0 }, + }, /* PREFIX_EVEX_0F3A50 */ { { Bad_Opcode }, @@ -2737,6 +2857,42 @@ static const struct dis386 evex_table[][256] = { { Bad_Opcode }, { VEX_W_TABLE (EVEX_W_0F3A67_P_2) }, }, + /* PREFIX_EVEX_0F3A70 */ + { + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (EVEX_W_0F3A70_P_2) }, + }, + /* PREFIX_EVEX_0F3A71 */ + { + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (EVEX_W_0F3A71_P_2) }, + }, + /* PREFIX_EVEX_0F3A72 */ + { + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (EVEX_W_0F3A72_P_2) }, + }, + /* PREFIX_EVEX_0F3A73 */ + { + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (EVEX_W_0F3A73_P_2) }, + }, + /* PREFIX_EVEX_0F3ACE */ + { + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (EVEX_W_0F3ACE_P_2) }, + }, + /* PREFIX_EVEX_0F3ACF */ + { + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (EVEX_W_0F3ACF_P_2) }, + }, #endif /* NEED_PREFIX_TABLE */ #ifdef NEED_VEX_W_TABLE @@ -3025,7 +3181,7 @@ static const struct dis386 evex_table[][256] = { /* EVEX_W_0F5A_P_2 */ { { Bad_Opcode }, - { "vcvtpd2ps", { XMxmmq, EXx, EXxEVexR }, 0 }, + { "vcvtpd2ps%XY", { XMxmmq, EXx, EXxEVexR }, 0 }, }, /* EVEX_W_0F5A_P_3 */ { @@ -3035,7 +3191,7 @@ static const struct dis386 evex_table[][256] = { /* EVEX_W_0F5B_P_0 */ { { "vcvtdq2ps", { XM, EXx, EXxEVexR }, 0 }, - { "vcvtqq2ps", { XMxmmq, EXx, EXxEVexR }, 0 }, + { "vcvtqq2ps%XY", { XMxmmq, EXx, EXxEVexR }, 0 }, }, /* EVEX_W_0F5B_P_1 */ { @@ -3192,21 +3348,21 @@ static const struct dis386 evex_table[][256] = { /* EVEX_W_0F78_P_0 */ { { "vcvttps2udq", { XM, EXx, EXxEVexS }, 0 }, - { "vcvttpd2udq", { XMxmmq, EXx, EXxEVexS }, 0 }, + { "vcvttpd2udq%XY", { XMxmmq, EXx, EXxEVexS }, 0 }, }, /* EVEX_W_0F78_P_2 */ { - { "vcvttps2uqq", { XM, EXxmmq, EXxEVexS }, 0 }, + { "vcvttps2uqq", { XM, EXEvexHalfBcstXmmq, EXxEVexS }, 0 }, { "vcvttpd2uqq", { XM, EXx, EXxEVexS }, 0 }, }, /* EVEX_W_0F79_P_0 */ { { "vcvtps2udq", { XM, EXx, EXxEVexR }, 0 }, - { "vcvtpd2udq", { XMxmmq, EXx, EXxEVexR }, 0 }, + { "vcvtpd2udq%XY", { XMxmmq, EXx, EXxEVexR }, 0 }, }, /* EVEX_W_0F79_P_2 */ { - { "vcvtps2uqq", { XM, EXxmmq, EXxEVexR }, 0 }, + { "vcvtps2uqq", { XM, EXEvexHalfBcstXmmq, EXxEVexR }, 0 }, { "vcvtpd2uqq", { XM, EXx, EXxEVexR }, 0 }, }, /* EVEX_W_0F7A_P_1 */ @@ -3216,13 +3372,13 @@ static const struct dis386 evex_table[][256] = { }, /* EVEX_W_0F7A_P_2 */ { - { "vcvttps2qq", { XM, EXxmmq, EXxEVexS }, 0 }, + { "vcvttps2qq", { XM, EXEvexHalfBcstXmmq, EXxEVexS }, 0 }, { "vcvttpd2qq", { XM, EXx, EXxEVexS }, 0 }, }, /* EVEX_W_0F7A_P_3 */ { { "vcvtudq2ps", { XM, EXx, EXxEVexR }, 0 }, - { "vcvtuqq2ps", { XMxmmq, EXx, EXxEVexR }, 0 }, + { "vcvtuqq2ps%XY", { XMxmmq, EXx, EXxEVexR }, 0 }, }, /* EVEX_W_0F7B_P_1 */ { @@ -3231,7 +3387,7 @@ static const struct dis386 evex_table[][256] = { }, /* EVEX_W_0F7B_P_2 */ { - { "vcvtps2qq", { XM, EXxmmq, EXxEVexR }, 0 }, + { "vcvtps2qq", { XM, EXEvexHalfBcstXmmq, EXxEVexR }, 0 }, { "vcvtpd2qq", { XM, EXx, EXxEVexR }, 0 }, }, /* EVEX_W_0F7B_P_3 */ @@ -3318,12 +3474,12 @@ static const struct dis386 evex_table[][256] = { /* EVEX_W_0FE6_P_2 */ { { Bad_Opcode }, - { "vcvttpd2dq", { XMxmmq, EXx, EXxEVexS }, 0 }, + { "vcvttpd2dq%XY", { XMxmmq, EXx, EXxEVexS }, 0 }, }, /* EVEX_W_0FE6_P_3 */ { { Bad_Opcode }, - { "vcvtpd2dq", { XMxmmq, EXx, EXxEVexR }, 0 }, + { "vcvtpd2dq%XY", { XMxmmq, EXx, EXxEVexR }, 0 }, }, /* EVEX_W_0FE7_P_2 */ { @@ -3559,6 +3715,16 @@ static const struct dis386 evex_table[][256] = { { "vpmulld", { XM, Vex, EXx }, 0 }, { "vpmullq", { XM, Vex, EXx }, 0 }, }, + /* EVEX_W_0F3854_P_2 */ + { + { "vpopcntb", { XM, EXx }, 0 }, + { "vpopcntw", { XM, EXx }, 0 }, + }, + /* EVEX_W_0F3855_P_2 */ + { + { "vpopcntd", { XM, EXx }, 0 }, + { "vpopcntq", { XM, EXx }, 0 }, + }, /* EVEX_W_0F3858_P_2 */ { { "vpbroadcastd", { XM, EXxmm_md }, 0 }, @@ -3578,11 +3744,41 @@ static const struct dis386 evex_table[][256] = { { "vbroadcasti32x8", { XM, EXxmmq }, 0 }, { "vbroadcasti64x4", { XM, EXymm }, 0 }, }, + /* EVEX_W_0F3862_P_2 */ + { + { "vpexpandb", { XM, EXbScalar }, 0 }, + { "vpexpandw", { XM, EXwScalar }, 0 }, + }, + /* EVEX_W_0F3863_P_2 */ + { + { "vpcompressb", { EXbScalar, XM }, 0 }, + { "vpcompressw", { EXwScalar, XM }, 0 }, + }, /* EVEX_W_0F3866_P_2 */ { { "vpblendmb", { XM, Vex, EXx }, 0 }, { "vpblendmw", { XM, Vex, EXx }, 0 }, }, + /* EVEX_W_0F3870_P_2 */ + { + { Bad_Opcode }, + { "vpshldvw", { XM, Vex, EXx }, 0 }, + }, + /* EVEX_W_0F3871_P_2 */ + { + { "vpshldvd", { XM, Vex, EXx }, 0 }, + { "vpshldvq", { XM, Vex, EXx }, 0 }, + }, + /* EVEX_W_0F3872_P_2 */ + { + { Bad_Opcode }, + { "vpshrdvw", { XM, Vex, EXx }, 0 }, + }, + /* EVEX_W_0F3873_P_2 */ + { + { "vpshrdvd", { XM, Vex, EXx }, 0 }, + { "vpshrdvq", { XM, Vex, EXx }, 0 }, + }, /* EVEX_W_0F3875_P_2 */ { { "vpermi2b", { XM, Vex, EXx }, 0 }, @@ -3761,13 +3957,13 @@ static const struct dis386 evex_table[][256] = { }, /* EVEX_W_0F3A3E_P_2 */ { - { "vpcmpub", { XMask, Vex, EXx, Ib }, 0 }, - { "vpcmpuw", { XMask, Vex, EXx, Ib }, 0 }, + { "vpcmpub", { XMask, Vex, EXx, VPCMP }, 0 }, + { "vpcmpuw", { XMask, Vex, EXx, VPCMP }, 0 }, }, /* EVEX_W_0F3A3F_P_2 */ { - { "vpcmpb", { XMask, Vex, EXx, Ib }, 0 }, - { "vpcmpw", { XMask, Vex, EXx, Ib }, 0 }, + { "vpcmpb", { XMask, Vex, EXx, VPCMP }, 0 }, + { "vpcmpw", { XMask, Vex, EXx, VPCMP }, 0 }, }, /* EVEX_W_0F3A42_P_2 */ { @@ -3800,14 +3996,44 @@ static const struct dis386 evex_table[][256] = { }, /* EVEX_W_0F3A66_P_2 */ { - { "vfpclassps", { XMask, EXx, Ib }, 0 }, - { "vfpclasspd", { XMask, EXx, Ib }, 0 }, + { "vfpclassps%XZ", { XMask, EXx, Ib }, 0 }, + { "vfpclasspd%XZ", { XMask, EXx, Ib }, 0 }, }, /* EVEX_W_0F3A67_P_2 */ { { "vfpclassss", { XMask, EXxmm_md, Ib }, 0 }, { "vfpclasssd", { XMask, EXxmm_mq, Ib }, 0 }, }, + /* EVEX_W_0F3A70_P_2 */ + { + { Bad_Opcode }, + { "vpshldw", { XM, Vex, EXx, Ib }, 0 }, + }, + /* EVEX_W_0F3A71_P_2 */ + { + { "vpshldd", { XM, Vex, EXx, Ib }, 0 }, + { "vpshldq", { XM, Vex, EXx, Ib }, 0 }, + }, + /* EVEX_W_0F3A72_P_2 */ + { + { Bad_Opcode }, + { "vpshrdw", { XM, Vex, EXx, Ib }, 0 }, + }, + /* EVEX_W_0F3A73_P_2 */ + { + { "vpshrdd", { XM, Vex, EXx, Ib }, 0 }, + { "vpshrdq", { XM, Vex, EXx, Ib }, 0 }, + }, + /* EVEX_W_0F3ACE_P_2 */ + { + { Bad_Opcode }, + { "vgf2p8affineqb", { XM, Vex, EXx, Ib }, 0 }, + }, + /* EVEX_W_0F3ACF_P_2 */ + { + { Bad_Opcode }, + { "vgf2p8affineinvqb", { XM, Vex, EXx, Ib }, 0 }, + }, #endif /* NEED_VEX_W_TABLE */ #ifdef NEED_MOD_TABLE { @@ -3873,3 +4099,4 @@ static const struct dis386 evex_table[][256] = { { PREFIX_TABLE (PREFIX_EVEX_0F38C7_REG_6) }, }, #endif /* NEED_MOD_TABLE */ +