mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-21 04:42:53 +08:00
85ba7507f6
When the VEX.L=1 decode matches that of both EVEX.L'L=1 and EVEX.L'L=2 (typically when all three are invalid) the (smaller) VEX table entry can be reused by EVEX, instead of duplicating data. (Note that XM and XMM as well as EXxmm_md and EXd are equivalent at least for the purposes here.)
378 lines
9.7 KiB
C
378 lines
9.7 KiB
C
/* PREFIX_EVEX_0F10 */
|
|
{
|
|
{ "vmovupX", { XM, EXEvexXNoBcst }, PREFIX_OPCODE },
|
|
{ VEX_W_TABLE (EVEX_W_0F10_P_1) },
|
|
{ "vmovupX", { XM, EXEvexXNoBcst }, PREFIX_OPCODE },
|
|
{ VEX_W_TABLE (EVEX_W_0F10_P_3) },
|
|
},
|
|
/* PREFIX_EVEX_0F11 */
|
|
{
|
|
{ "vmovupX", { EXxS, XM }, PREFIX_OPCODE },
|
|
{ VEX_W_TABLE (EVEX_W_0F11_P_1) },
|
|
{ "vmovupX", { EXxS, XM }, PREFIX_OPCODE },
|
|
{ VEX_W_TABLE (EVEX_W_0F11_P_3) },
|
|
},
|
|
/* PREFIX_EVEX_0F12 */
|
|
{
|
|
{ MOD_TABLE (MOD_EVEX_0F12_PREFIX_0) },
|
|
{ VEX_W_TABLE (EVEX_W_0F12_P_1) },
|
|
{ MOD_TABLE (MOD_EVEX_0F12_PREFIX_2) },
|
|
{ VEX_W_TABLE (EVEX_W_0F12_P_3) },
|
|
},
|
|
/* PREFIX_EVEX_0F16 */
|
|
{
|
|
{ MOD_TABLE (MOD_EVEX_0F16_PREFIX_0) },
|
|
{ VEX_W_TABLE (EVEX_W_0F16_P_1) },
|
|
{ MOD_TABLE (MOD_EVEX_0F16_PREFIX_2) },
|
|
},
|
|
/* PREFIX_EVEX_0F2A */
|
|
{
|
|
{ Bad_Opcode },
|
|
{ "vcvtsi2ss{%LQ|}", { XMScalar, VexScalar, EXxEVexR, Edq }, 0 },
|
|
{ Bad_Opcode },
|
|
{ VEX_W_TABLE (EVEX_W_0F2A_P_3) },
|
|
},
|
|
/* PREFIX_EVEX_0F51 */
|
|
{
|
|
{ "vsqrtpX", { XM, EXx, EXxEVexR }, PREFIX_OPCODE },
|
|
{ VEX_W_TABLE (EVEX_W_0F51_P_1) },
|
|
{ "vsqrtpX", { XM, EXx, EXxEVexR }, PREFIX_OPCODE },
|
|
{ VEX_W_TABLE (EVEX_W_0F51_P_3) },
|
|
},
|
|
/* PREFIX_EVEX_0F58 */
|
|
{
|
|
{ "vaddpX", { XM, Vex, EXx, EXxEVexR }, PREFIX_OPCODE },
|
|
{ VEX_W_TABLE (EVEX_W_0F58_P_1) },
|
|
{ "vaddpX", { XM, Vex, EXx, EXxEVexR }, PREFIX_OPCODE },
|
|
{ VEX_W_TABLE (EVEX_W_0F58_P_3) },
|
|
},
|
|
/* PREFIX_EVEX_0F59 */
|
|
{
|
|
{ "vmulpX", { XM, Vex, EXx, EXxEVexR }, PREFIX_OPCODE },
|
|
{ VEX_W_TABLE (EVEX_W_0F59_P_1) },
|
|
{ "vmulpX", { XM, Vex, EXx, EXxEVexR }, PREFIX_OPCODE },
|
|
{ VEX_W_TABLE (EVEX_W_0F59_P_3) },
|
|
},
|
|
/* PREFIX_EVEX_0F5A */
|
|
{
|
|
{ VEX_W_TABLE (EVEX_W_0F5A_P_0) },
|
|
{ VEX_W_TABLE (EVEX_W_0F5A_P_1) },
|
|
{ VEX_W_TABLE (EVEX_W_0F5A_P_2) },
|
|
{ VEX_W_TABLE (EVEX_W_0F5A_P_3) },
|
|
},
|
|
/* PREFIX_EVEX_0F5B */
|
|
{
|
|
{ VEX_W_TABLE (EVEX_W_0F5B_P_0) },
|
|
{ VEX_W_TABLE (EVEX_W_0F5B_P_1) },
|
|
{ VEX_W_TABLE (EVEX_W_0F5B_P_2) },
|
|
},
|
|
/* PREFIX_EVEX_0F5C */
|
|
{
|
|
{ "vsubpX", { XM, Vex, EXx, EXxEVexR }, PREFIX_OPCODE },
|
|
{ VEX_W_TABLE (EVEX_W_0F5C_P_1) },
|
|
{ "vsubpX", { XM, Vex, EXx, EXxEVexR }, PREFIX_OPCODE },
|
|
{ VEX_W_TABLE (EVEX_W_0F5C_P_3) },
|
|
},
|
|
/* PREFIX_EVEX_0F5D */
|
|
{
|
|
{ "vminpX", { XM, Vex, EXx, EXxEVexS }, PREFIX_OPCODE },
|
|
{ VEX_W_TABLE (EVEX_W_0F5D_P_1) },
|
|
{ "vminpX", { XM, Vex, EXx, EXxEVexS }, PREFIX_OPCODE },
|
|
{ VEX_W_TABLE (EVEX_W_0F5D_P_3) },
|
|
},
|
|
/* PREFIX_EVEX_0F5E */
|
|
{
|
|
{ "vdivpX", { XM, Vex, EXx, EXxEVexR }, PREFIX_OPCODE },
|
|
{ VEX_W_TABLE (EVEX_W_0F5E_P_1) },
|
|
{ "vdivpX", { XM, Vex, EXx, EXxEVexR }, PREFIX_OPCODE },
|
|
{ VEX_W_TABLE (EVEX_W_0F5E_P_3) },
|
|
},
|
|
/* PREFIX_EVEX_0F5F */
|
|
{
|
|
{ "vmaxpX", { XM, Vex, EXx, EXxEVexS }, PREFIX_OPCODE },
|
|
{ VEX_W_TABLE (EVEX_W_0F5F_P_1) },
|
|
{ "vmaxpX", { XM, Vex, EXx, EXxEVexS }, PREFIX_OPCODE },
|
|
{ VEX_W_TABLE (EVEX_W_0F5F_P_3) },
|
|
},
|
|
/* PREFIX_EVEX_0F6F */
|
|
{
|
|
{ Bad_Opcode },
|
|
{ VEX_W_TABLE (EVEX_W_0F6F_P_1) },
|
|
{ VEX_W_TABLE (EVEX_W_0F6F_P_2) },
|
|
{ VEX_W_TABLE (EVEX_W_0F6F_P_3) },
|
|
},
|
|
/* PREFIX_EVEX_0F70 */
|
|
{
|
|
{ Bad_Opcode },
|
|
{ "vpshufhw", { XM, EXx, Ib }, 0 },
|
|
{ VEX_W_TABLE (EVEX_W_0F70_P_2) },
|
|
{ "vpshuflw", { XM, EXx, Ib }, 0 },
|
|
},
|
|
/* PREFIX_EVEX_0F78 */
|
|
{
|
|
{ VEX_W_TABLE (EVEX_W_0F78_P_0) },
|
|
{ "vcvttss2usi", { Gdq, EXxmm_md, EXxEVexS }, 0 },
|
|
{ VEX_W_TABLE (EVEX_W_0F78_P_2) },
|
|
{ "vcvttsd2usi", { Gdq, EXxmm_mq, EXxEVexS }, 0 },
|
|
},
|
|
/* PREFIX_EVEX_0F79 */
|
|
{
|
|
{ VEX_W_TABLE (EVEX_W_0F79_P_0) },
|
|
{ "vcvtss2usi", { Gdq, EXxmm_md, EXxEVexR }, 0 },
|
|
{ VEX_W_TABLE (EVEX_W_0F79_P_2) },
|
|
{ "vcvtsd2usi", { Gdq, EXxmm_mq, EXxEVexR }, 0 },
|
|
},
|
|
/* PREFIX_EVEX_0F7A */
|
|
{
|
|
{ Bad_Opcode },
|
|
{ VEX_W_TABLE (EVEX_W_0F7A_P_1) },
|
|
{ VEX_W_TABLE (EVEX_W_0F7A_P_2) },
|
|
{ VEX_W_TABLE (EVEX_W_0F7A_P_3) },
|
|
},
|
|
/* PREFIX_EVEX_0F7B */
|
|
{
|
|
{ Bad_Opcode },
|
|
{ "vcvtusi2ss{%LQ|}", { XMScalar, VexScalar, EXxEVexR, Edq }, 0 },
|
|
{ VEX_W_TABLE (EVEX_W_0F7B_P_2) },
|
|
{ VEX_W_TABLE (EVEX_W_0F7B_P_3) },
|
|
},
|
|
/* PREFIX_EVEX_0F7E */
|
|
{
|
|
{ Bad_Opcode },
|
|
{ VEX_W_TABLE (EVEX_W_0F7E_P_1) },
|
|
{ VEX_LEN_TABLE (VEX_LEN_0F7E_P_2) },
|
|
},
|
|
/* PREFIX_EVEX_0F7F */
|
|
{
|
|
{ Bad_Opcode },
|
|
{ VEX_W_TABLE (EVEX_W_0F7F_P_1) },
|
|
{ VEX_W_TABLE (EVEX_W_0F7F_P_2) },
|
|
{ VEX_W_TABLE (EVEX_W_0F7F_P_3) },
|
|
},
|
|
/* PREFIX_EVEX_0FC2 */
|
|
{
|
|
{ "vcmppX", { XMask, Vex, EXx, EXxEVexS, CMP }, PREFIX_OPCODE },
|
|
{ VEX_W_TABLE (EVEX_W_0FC2_P_1) },
|
|
{ "vcmppX", { XMask, Vex, EXx, EXxEVexS, CMP }, PREFIX_OPCODE },
|
|
{ VEX_W_TABLE (EVEX_W_0FC2_P_3) },
|
|
},
|
|
/* PREFIX_EVEX_0FE6 */
|
|
{
|
|
{ Bad_Opcode },
|
|
{ VEX_W_TABLE (EVEX_W_0FE6_P_1) },
|
|
{ VEX_W_TABLE (EVEX_W_0FE6_P_2) },
|
|
{ VEX_W_TABLE (EVEX_W_0FE6_P_3) },
|
|
},
|
|
/* PREFIX_EVEX_0F3810 */
|
|
{
|
|
{ Bad_Opcode },
|
|
{ VEX_W_TABLE (EVEX_W_0F3810_P_1) },
|
|
{ VEX_W_TABLE (EVEX_W_0F3810_P_2) },
|
|
},
|
|
/* PREFIX_EVEX_0F3811 */
|
|
{
|
|
{ Bad_Opcode },
|
|
{ VEX_W_TABLE (EVEX_W_0F3811_P_1) },
|
|
{ VEX_W_TABLE (EVEX_W_0F3811_P_2) },
|
|
},
|
|
/* PREFIX_EVEX_0F3812 */
|
|
{
|
|
{ Bad_Opcode },
|
|
{ VEX_W_TABLE (EVEX_W_0F3812_P_1) },
|
|
{ VEX_W_TABLE (EVEX_W_0F3812_P_2) },
|
|
},
|
|
/* PREFIX_EVEX_0F3813 */
|
|
{
|
|
{ Bad_Opcode },
|
|
{ VEX_W_TABLE (EVEX_W_0F3813_P_1) },
|
|
{ VEX_W_TABLE (EVEX_W_0F3813_P_2) },
|
|
},
|
|
/* PREFIX_EVEX_0F3814 */
|
|
{
|
|
{ Bad_Opcode },
|
|
{ VEX_W_TABLE (EVEX_W_0F3814_P_1) },
|
|
{ "vprorv%DQ", { XM, Vex, EXx }, 0 },
|
|
},
|
|
/* PREFIX_EVEX_0F3815 */
|
|
{
|
|
{ Bad_Opcode },
|
|
{ VEX_W_TABLE (EVEX_W_0F3815_P_1) },
|
|
{ "vprolv%DQ", { XM, Vex, EXx }, 0 },
|
|
},
|
|
/* PREFIX_EVEX_0F3820 */
|
|
{
|
|
{ Bad_Opcode },
|
|
{ VEX_W_TABLE (EVEX_W_0F3820_P_1) },
|
|
{ "vpmovsxbw", { XM, EXxmmq }, 0 },
|
|
},
|
|
/* PREFIX_EVEX_0F3821 */
|
|
{
|
|
{ Bad_Opcode },
|
|
{ VEX_W_TABLE (EVEX_W_0F3821_P_1) },
|
|
{ "vpmovsxbd", { XM, EXxmmqd }, 0 },
|
|
},
|
|
/* PREFIX_EVEX_0F3822 */
|
|
{
|
|
{ Bad_Opcode },
|
|
{ VEX_W_TABLE (EVEX_W_0F3822_P_1) },
|
|
{ "vpmovsxbq", { XM, EXxmmdw }, 0 },
|
|
},
|
|
/* PREFIX_EVEX_0F3823 */
|
|
{
|
|
{ Bad_Opcode },
|
|
{ VEX_W_TABLE (EVEX_W_0F3823_P_1) },
|
|
{ "vpmovsxwd", { XM, EXxmmq }, 0 },
|
|
},
|
|
/* PREFIX_EVEX_0F3824 */
|
|
{
|
|
{ Bad_Opcode },
|
|
{ VEX_W_TABLE (EVEX_W_0F3824_P_1) },
|
|
{ "vpmovsxwq", { XM, EXxmmqd }, 0 },
|
|
},
|
|
/* PREFIX_EVEX_0F3825 */
|
|
{
|
|
{ Bad_Opcode },
|
|
{ VEX_W_TABLE (EVEX_W_0F3825_P_1) },
|
|
{ VEX_W_TABLE (EVEX_W_0F3825_P_2) },
|
|
},
|
|
/* PREFIX_EVEX_0F3826 */
|
|
{
|
|
{ Bad_Opcode },
|
|
{ "vptestnm%BW", { XMask, Vex, EXx }, 0 },
|
|
{ "vptestm%BW", { XMask, Vex, EXx }, 0 },
|
|
},
|
|
/* PREFIX_EVEX_0F3827 */
|
|
{
|
|
{ Bad_Opcode },
|
|
{ "vptestnm%DQ", { XMask, Vex, EXx }, 0 },
|
|
{ "vptestm%DQ", { XMask, Vex, EXx }, 0 },
|
|
},
|
|
/* PREFIX_EVEX_0F3828 */
|
|
{
|
|
{ Bad_Opcode },
|
|
{ MOD_TABLE (MOD_EVEX_0F3828_P_1) },
|
|
{ VEX_W_TABLE (EVEX_W_0F3828_P_2) },
|
|
},
|
|
/* PREFIX_EVEX_0F3829 */
|
|
{
|
|
{ Bad_Opcode },
|
|
{ "vpmov%BW2m", { XMask, EXx }, 0 },
|
|
{ VEX_W_TABLE (EVEX_W_0F3829_P_2) },
|
|
},
|
|
/* PREFIX_EVEX_0F382A */
|
|
{
|
|
{ Bad_Opcode },
|
|
{ VEX_W_TABLE (EVEX_W_0F382A_P_1) },
|
|
{ VEX_W_TABLE (EVEX_W_0F382A_P_2) },
|
|
},
|
|
/* PREFIX_EVEX_0F3830 */
|
|
{
|
|
{ Bad_Opcode },
|
|
{ VEX_W_TABLE (EVEX_W_0F3830_P_1) },
|
|
{ "vpmovzxbw", { XM, EXxmmq }, 0 },
|
|
},
|
|
/* PREFIX_EVEX_0F3831 */
|
|
{
|
|
{ Bad_Opcode },
|
|
{ VEX_W_TABLE (EVEX_W_0F3831_P_1) },
|
|
{ "vpmovzxbd", { XM, EXxmmqd }, 0 },
|
|
},
|
|
/* PREFIX_EVEX_0F3832 */
|
|
{
|
|
{ Bad_Opcode },
|
|
{ VEX_W_TABLE (EVEX_W_0F3832_P_1) },
|
|
{ "vpmovzxbq", { XM, EXxmmdw }, 0 },
|
|
},
|
|
/* PREFIX_EVEX_0F3833 */
|
|
{
|
|
{ Bad_Opcode },
|
|
{ VEX_W_TABLE (EVEX_W_0F3833_P_1) },
|
|
{ "vpmovzxwd", { XM, EXxmmq }, 0 },
|
|
},
|
|
/* PREFIX_EVEX_0F3834 */
|
|
{
|
|
{ Bad_Opcode },
|
|
{ VEX_W_TABLE (EVEX_W_0F3834_P_1) },
|
|
{ "vpmovzxwq", { XM, EXxmmqd }, 0 },
|
|
},
|
|
/* PREFIX_EVEX_0F3835 */
|
|
{
|
|
{ Bad_Opcode },
|
|
{ VEX_W_TABLE (EVEX_W_0F3835_P_1) },
|
|
{ VEX_W_TABLE (EVEX_W_0F3835_P_2) },
|
|
},
|
|
/* PREFIX_EVEX_0F3838 */
|
|
{
|
|
{ Bad_Opcode },
|
|
{ MOD_TABLE (MOD_EVEX_0F3838_P_1) },
|
|
{ "vpminsb", { XM, Vex, EXx }, 0 },
|
|
},
|
|
/* PREFIX_EVEX_0F3839 */
|
|
{
|
|
{ Bad_Opcode },
|
|
{ "vpmov%DQ2m", { XMask, EXx }, 0 },
|
|
{ "vpmins%DQ", { XM, Vex, EXx }, 0 },
|
|
},
|
|
/* PREFIX_EVEX_0F383A */
|
|
{
|
|
{ Bad_Opcode },
|
|
{ VEX_W_TABLE (EVEX_W_0F383A_P_1) },
|
|
{ "vpminuw", { XM, Vex, EXx }, 0 },
|
|
},
|
|
/* PREFIX_EVEX_0F3852 */
|
|
{
|
|
{ Bad_Opcode },
|
|
{ VEX_W_TABLE (EVEX_W_0F3852_P_1) },
|
|
{ "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_0F3868 */
|
|
{
|
|
{ Bad_Opcode },
|
|
{ Bad_Opcode },
|
|
{ Bad_Opcode },
|
|
{ "vp2intersect%DQ", { XMask, Vex, EXx, EXxEVexS }, 0 },
|
|
},
|
|
/* PREFIX_EVEX_0F3872 */
|
|
{
|
|
{ Bad_Opcode },
|
|
{ VEX_W_TABLE (EVEX_W_0F3872_P_1) },
|
|
{ VEX_W_TABLE (EVEX_W_0F3872_P_2) },
|
|
{ VEX_W_TABLE (EVEX_W_0F3872_P_3) },
|
|
},
|
|
/* PREFIX_EVEX_0F389A */
|
|
{
|
|
{ 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, EXVexWdqScalar, EXxEVexR }, 0 },
|
|
{ "v4fmaddss", { XMScalar, VexScalar, Mxmm }, 0 },
|
|
},
|
|
/* PREFIX_EVEX_0F38AA */
|
|
{
|
|
{ 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, EXVexWdqScalar, EXxEVexR }, 0 },
|
|
{ "v4fnmaddss", { XMScalar, VexScalar, Mxmm }, 0 },
|
|
},
|