diff options
author | Jan Beulich <jbeulich@suse.com> | 2021-03-10 08:16:54 +0100 |
---|---|---|
committer | Jan Beulich <jbeulich@suse.com> | 2021-03-10 08:16:54 +0100 |
commit | fc681dd6a1264a1560a711a6b69cb5a229d2316a (patch) | |
tree | de3c6d563c4b6d0966ca2da84a7fc94e1f17482b /opcodes/i386-dis-evex-w.h | |
parent | 13954a31199aac7d5bcb7d614f73cead4fd3d69c (diff) | |
download | gdb-fc681dd6a1264a1560a711a6b69cb5a229d2316a.zip gdb-fc681dd6a1264a1560a711a6b69cb5a229d2316a.tar.gz gdb-fc681dd6a1264a1560a711a6b69cb5a229d2316a.tar.bz2 |
x86: re-arrange order of decode for various EVEX opcodes
The order of decodes influences the overall number of table entries.
Reduce table size quite a bit by first decoding few-alternatives
attributes common to all valid leaves.
This also adds a PREFIX_DATA 7531c61332db ("x86: simplify decode of
opcodes valid with (embedded) 66 prefix only") missed to apply to
vbroadcastf64x4.
Diffstat (limited to 'opcodes/i386-dis-evex-w.h')
-rw-r--r-- | opcodes/i386-dis-evex-w.h | 111 |
1 files changed, 48 insertions, 63 deletions
diff --git a/opcodes/i386-dis-evex-w.h b/opcodes/i386-dis-evex-w.h index a046d11..e28c845 100644 --- a/opcodes/i386-dis-evex-w.h +++ b/opcodes/i386-dis-evex-w.h @@ -390,20 +390,20 @@ { { "vpmovusqd", { EXxmmq, XM }, 0 }, }, - /* EVEX_W_0F3819 */ + /* EVEX_W_0F3819_L_n */ { - { EVEX_LEN_TABLE (EVEX_LEN_0F3819_W_0) }, - { EVEX_LEN_TABLE (EVEX_LEN_0F3819_W_1) }, + { "vbroadcastf32x2", { XM, EXxmm_mq }, PREFIX_DATA }, + { "vbroadcastsd", { XM, EXxmm_mq }, PREFIX_DATA }, }, - /* EVEX_W_0F381A */ + /* EVEX_W_0F381A_M_0_L_n */ { - { MOD_TABLE (MOD_EVEX_0F381A_W_0) }, - { MOD_TABLE (MOD_EVEX_0F381A_W_1) }, + { "vbroadcastf32x4", { XM, EXxmm }, PREFIX_DATA }, + { "vbroadcastf64x2", { XM, EXxmm }, PREFIX_DATA }, }, - /* EVEX_W_0F381B */ + /* EVEX_W_0F381B_M_0_L_2 */ { - { MOD_TABLE (MOD_EVEX_0F381B_W_0) }, - { MOD_TABLE (MOD_EVEX_0F381B_W_1) }, + { "vbroadcastf32x8", { XM, EXymm }, PREFIX_DATA }, + { "vbroadcastf64x4", { XM, EXymm }, PREFIX_DATA }, }, /* EVEX_W_0F381E */ { @@ -512,15 +512,15 @@ { "vbroadcasti32x2", { XM, EXxmm_mq }, PREFIX_DATA }, { "vpbroadcastq", { XM, EXxmm_mq }, PREFIX_DATA }, }, - /* EVEX_W_0F385A */ + /* EVEX_W_0F385A_M_0_L_n */ { - { MOD_TABLE (MOD_EVEX_0F385A_W_0) }, - { MOD_TABLE (MOD_EVEX_0F385A_W_1) }, + { "vbroadcasti32x4", { XM, EXxmm }, PREFIX_DATA }, + { "vbroadcasti64x2", { XM, EXxmm }, PREFIX_DATA }, }, - /* EVEX_W_0F385B */ + /* EVEX_W_0F385B_M_0_L_2 */ { - { MOD_TABLE (MOD_EVEX_0F385B_W_0) }, - { MOD_TABLE (MOD_EVEX_0F385B_W_1) }, + { "vbroadcasti32x8", { XM, EXymm }, PREFIX_DATA }, + { "vbroadcasti64x4", { XM, EXymm }, PREFIX_DATA }, }, /* EVEX_W_0F3870 */ { @@ -575,25 +575,10 @@ { "vscatterqps", { MVexVSIBQDWpX, XMxmmq }, PREFIX_DATA }, { "vscatterqpd", { MVexVSIBQWpX, XM }, 0 }, }, - /* EVEX_W_0F38C7_R_1_M_0 */ + /* EVEX_W_0F38C7_M_0_L_2 */ { - { EVEX_LEN_TABLE (EVEX_LEN_0F38C7_R_1_M_0_W_0) }, - { EVEX_LEN_TABLE (EVEX_LEN_0F38C7_R_1_M_0_W_1) }, - }, - /* EVEX_W_0F38C7_R_2_M_0 */ - { - { EVEX_LEN_TABLE (EVEX_LEN_0F38C7_R_2_M_0_W_0) }, - { EVEX_LEN_TABLE (EVEX_LEN_0F38C7_R_2_M_0_W_1) }, - }, - /* EVEX_W_0F38C7_R_5_M_0 */ - { - { EVEX_LEN_TABLE (EVEX_LEN_0F38C7_R_5_M_0_W_0) }, - { EVEX_LEN_TABLE (EVEX_LEN_0F38C7_R_5_M_0_W_1) }, - }, - /* EVEX_W_0F38C7_R_6_M_0 */ - { - { EVEX_LEN_TABLE (EVEX_LEN_0F38C7_R_6_M_0_W_0) }, - { EVEX_LEN_TABLE (EVEX_LEN_0F38C7_R_6_M_0_W_1) }, + { REG_TABLE (REG_EVEX_0F38C7_M_0_L_2_W_0) }, + { REG_TABLE (REG_EVEX_0F38C7_M_0_L_2_W_1) }, }, /* EVEX_W_0F3A00 */ { @@ -628,63 +613,63 @@ { Bad_Opcode }, { "vrndscalesd", { XMScalar, VexScalar, EXxmm_mq, EXxEVexS, Ib }, PREFIX_DATA }, }, - /* EVEX_W_0F3A18 */ + /* EVEX_W_0F3A18_L_n */ { - { EVEX_LEN_TABLE (EVEX_LEN_0F3A18_W_0) }, - { EVEX_LEN_TABLE (EVEX_LEN_0F3A18_W_1) }, + { "vinsertf32x4", { XM, Vex, EXxmm, Ib }, PREFIX_DATA }, + { "vinsertf64x2", { XM, Vex, EXxmm, Ib }, PREFIX_DATA }, }, - /* EVEX_W_0F3A19 */ + /* EVEX_W_0F3A19_L_n */ { - { EVEX_LEN_TABLE (EVEX_LEN_0F3A19_W_0) }, - { EVEX_LEN_TABLE (EVEX_LEN_0F3A19_W_1) }, + { "vextractf32x4", { EXxmm, XM, Ib }, PREFIX_DATA }, + { "vextractf64x2", { EXxmm, XM, Ib }, PREFIX_DATA }, }, - /* EVEX_W_0F3A1A */ + /* EVEX_W_0F3A1A_L_2 */ { - { EVEX_LEN_TABLE (EVEX_LEN_0F3A1A_W_0) }, - { EVEX_LEN_TABLE (EVEX_LEN_0F3A1A_W_1) }, + { "vinsertf32x8", { XM, Vex, EXymm, Ib }, PREFIX_DATA }, + { "vinsertf64x4", { XM, Vex, EXymm, Ib }, PREFIX_DATA }, }, - /* EVEX_W_0F3A1B */ + /* EVEX_W_0F3A1B_L_2 */ { - { EVEX_LEN_TABLE (EVEX_LEN_0F3A1B_W_0) }, - { EVEX_LEN_TABLE (EVEX_LEN_0F3A1B_W_1) }, + { "vextractf32x8", { EXymm, XM, Ib }, PREFIX_DATA }, + { "vextractf64x4", { EXymm, XM, Ib }, PREFIX_DATA }, }, /* EVEX_W_0F3A21 */ { { EVEX_LEN_TABLE (EVEX_LEN_0F3A21_W_0) }, }, - /* EVEX_W_0F3A23 */ + /* EVEX_W_0F3A23_L_n */ { - { EVEX_LEN_TABLE (EVEX_LEN_0F3A23_W_0) }, - { EVEX_LEN_TABLE (EVEX_LEN_0F3A23_W_1) }, + { "vshuff32x4", { XM, Vex, EXx, Ib }, PREFIX_DATA }, + { "vshuff64x2", { XM, Vex, EXx, Ib }, PREFIX_DATA }, }, - /* EVEX_W_0F3A38 */ + /* EVEX_W_0F3A38_L_n */ { - { EVEX_LEN_TABLE (EVEX_LEN_0F3A38_W_0) }, - { EVEX_LEN_TABLE (EVEX_LEN_0F3A38_W_1) }, + { "vinserti32x4", { XM, Vex, EXxmm, Ib }, PREFIX_DATA }, + { "vinserti64x2", { XM, Vex, EXxmm, Ib }, PREFIX_DATA }, }, - /* EVEX_W_0F3A39 */ + /* EVEX_W_0F3A39_L_n */ { - { EVEX_LEN_TABLE (EVEX_LEN_0F3A39_W_0) }, - { EVEX_LEN_TABLE (EVEX_LEN_0F3A39_W_1) }, + { "vextracti32x4", { EXxmm, XM, Ib }, PREFIX_DATA }, + { "vextracti64x2", { EXxmm, XM, Ib }, PREFIX_DATA }, }, - /* EVEX_W_0F3A3A */ + /* EVEX_W_0F3A3A_L_2 */ { - { EVEX_LEN_TABLE (EVEX_LEN_0F3A3A_W_0) }, - { EVEX_LEN_TABLE (EVEX_LEN_0F3A3A_W_1) }, + { "vinserti32x8", { XM, Vex, EXymm, Ib }, PREFIX_DATA }, + { "vinserti64x4", { XM, Vex, EXymm, Ib }, PREFIX_DATA }, }, - /* EVEX_W_0F3A3B */ + /* EVEX_W_0F3A3B_L_2 */ { - { EVEX_LEN_TABLE (EVEX_LEN_0F3A3B_W_0) }, - { EVEX_LEN_TABLE (EVEX_LEN_0F3A3B_W_1) }, + { "vextracti32x8", { EXymm, XM, Ib }, PREFIX_DATA }, + { "vextracti64x4", { EXymm, XM, Ib }, PREFIX_DATA }, }, /* EVEX_W_0F3A42 */ { { "vdbpsadbw", { XM, Vex, EXx, Ib }, 0 }, }, - /* EVEX_W_0F3A43 */ + /* EVEX_W_0F3A43_L_n */ { - { EVEX_LEN_TABLE (EVEX_LEN_0F3A43_W_0) }, - { EVEX_LEN_TABLE (EVEX_LEN_0F3A43_W_1) }, + { "vshufi32x4", { XM, Vex, EXx, Ib }, PREFIX_DATA }, + { "vshufi64x2", { XM, Vex, EXx, Ib }, PREFIX_DATA }, }, /* EVEX_W_0F3A70 */ { |