diff options
author | Jan Beulich <jbeulich@suse.com> | 2023-04-28 08:19:19 +0200 |
---|---|---|
committer | Jan Beulich <jbeulich@suse.com> | 2023-04-28 08:19:19 +0200 |
commit | be3d663386f1a4e93f4e79419111b56755caec7a (patch) | |
tree | 5f7facbab3387cfeec91249af1afac1939c4cae3 /opcodes | |
parent | 143a12bd5a5402231bde748cbbdc22bb3984a522 (diff) | |
download | gdb-be3d663386f1a4e93f4e79419111b56755caec7a.zip gdb-be3d663386f1a4e93f4e79419111b56755caec7a.tar.gz gdb-be3d663386f1a4e93f4e79419111b56755caec7a.tar.bz2 |
x86: rework AMX multiplication insn disassembly
Consistently do 64-bit first, ModR/M second, VEX.L third, VEX.W fourth,
and prefix last, resulting in fewer table entries. Note that in the
course of the re-work wrong M_0 suffixes are also corrected to be M_1
(partly infixes now).
Since it ended up confusing while testing the change, also adjust the
test name in x86-64-amx-bad.d (to be distinct from x86-64-amx.d's).
Diffstat (limited to 'opcodes')
-rw-r--r-- | opcodes/i386-dis.c | 152 |
1 files changed, 42 insertions, 110 deletions
diff --git a/opcodes/i386-dis.c b/opcodes/i386-dis.c index 100ec43..eb16fd9 100644 --- a/opcodes/i386-dis.c +++ b/opcodes/i386-dis.c @@ -978,13 +978,9 @@ enum MOD_VEX_0F384B_X86_64_P_2_W_0, MOD_VEX_0F384B_X86_64_P_3_W_0, MOD_VEX_0F385A, - MOD_VEX_0F385C_X86_64_P_1_W_0, - MOD_VEX_0F385C_X86_64_P_3_W_0, - MOD_VEX_0F385E_X86_64_P_0_W_0, - MOD_VEX_0F385E_X86_64_P_1_W_0, - MOD_VEX_0F385E_X86_64_P_2_W_0, - MOD_VEX_0F385E_X86_64_P_3_W_0, - MOD_VEX_0F386C_X86_64_W_0, + MOD_VEX_0F385C_X86_64, + MOD_VEX_0F385E_X86_64, + MOD_VEX_0F386C_X86_64, MOD_VEX_0F388C, MOD_VEX_0F388E, MOD_VEX_0F3A30_L_0, @@ -1185,9 +1181,9 @@ enum PREFIX_VEX_0F384B_X86_64, PREFIX_VEX_0F3850_W_0, PREFIX_VEX_0F3851_W_0, - PREFIX_VEX_0F385C_X86_64, - PREFIX_VEX_0F385E_X86_64, - PREFIX_VEX_0F386C_X86_64_W_0_M_1_L_0, + PREFIX_VEX_0F385C_X86_64_M_1_L_0_W_0, + PREFIX_VEX_0F385E_X86_64_M_1_L_0_W_0, + PREFIX_VEX_0F386C_X86_64_M_1_L_0_W_0, PREFIX_VEX_0F3872, PREFIX_VEX_0F38B0_W_0, PREFIX_VEX_0F38B1_W_0, @@ -1436,13 +1432,9 @@ enum VEX_LEN_0F384B_X86_64_P_2_W_0_M_0, VEX_LEN_0F384B_X86_64_P_3_W_0_M_0, VEX_LEN_0F385A_M_0, - VEX_LEN_0F385C_X86_64_P_1_W_0_M_0, - VEX_LEN_0F385C_X86_64_P_3_W_0_M_0, - VEX_LEN_0F385E_X86_64_P_0_W_0_M_0, - VEX_LEN_0F385E_X86_64_P_1_W_0_M_0, - VEX_LEN_0F385E_X86_64_P_2_W_0_M_0, - VEX_LEN_0F385E_X86_64_P_3_W_0_M_0, - VEX_LEN_0F386C_X86_64_W_0_M_1, + VEX_LEN_0F385C_X86_64_M_1, + VEX_LEN_0F385E_X86_64_M_1, + VEX_LEN_0F386C_X86_64_M_1, VEX_LEN_0F38DB, VEX_LEN_0F38F2, VEX_LEN_0F38F3, @@ -1604,13 +1596,9 @@ enum VEX_W_0F3858, VEX_W_0F3859, VEX_W_0F385A_M_0_L_0, - VEX_W_0F385C_X86_64_P_1, - VEX_W_0F385C_X86_64_P_3, - VEX_W_0F385E_X86_64_P_0, - VEX_W_0F385E_X86_64_P_1, - VEX_W_0F385E_X86_64_P_2, - VEX_W_0F385E_X86_64_P_3, - VEX_W_0F386C_X86_64, + VEX_W_0F385C_X86_64_M_1_L_0, + VEX_W_0F385E_X86_64_M_1_L_0, + VEX_W_0F386C_X86_64_M_1_L_0, VEX_W_0F3872_P_1, VEX_W_0F3878, VEX_W_0F3879, @@ -4149,23 +4137,23 @@ static const struct dis386 prefix_table[][4] = { { "%XVvpdpbusds", { XM, Vex, EXx }, 0 }, { "vpdpbssds", { XM, Vex, EXx }, 0 }, }, - /* PREFIX_VEX_0F385C_X86_64 */ + /* PREFIX_VEX_0F385C_X86_64_M_1_L_0_W_0 */ { { Bad_Opcode }, - { VEX_W_TABLE (VEX_W_0F385C_X86_64_P_1) }, + { "tdpbf16ps", { TMM, EXtmm, VexTmm }, 0 }, { Bad_Opcode }, - { VEX_W_TABLE (VEX_W_0F385C_X86_64_P_3) }, + { "tdpfp16ps", { TMM, EXtmm, VexTmm }, 0 }, }, - /* PREFIX_VEX_0F385E_X86_64 */ + /* PREFIX_VEX_0F385E_X86_64_M_1_L_0_W_0 */ { - { VEX_W_TABLE (VEX_W_0F385E_X86_64_P_0) }, - { VEX_W_TABLE (VEX_W_0F385E_X86_64_P_1) }, - { VEX_W_TABLE (VEX_W_0F385E_X86_64_P_2) }, - { VEX_W_TABLE (VEX_W_0F385E_X86_64_P_3) }, + { "tdpbuud", {TMM, EXtmm, VexTmm }, 0 }, + { "tdpbsud", {TMM, EXtmm, VexTmm }, 0 }, + { "tdpbusd", {TMM, EXtmm, VexTmm }, 0 }, + { "tdpbssd", {TMM, EXtmm, VexTmm }, 0 }, }, - /* PREFIX_VEX_0F386C_X86_64_W_0_M_1_L_0 */ + /* PREFIX_VEX_0F386C_X86_64_M_1_L_0_W_0 */ { { "tcmmrlfp16ps", { TMM, EXtmm, VexTmm }, 0 }, { Bad_Opcode }, @@ -4530,19 +4518,19 @@ static const struct dis386 x86_64_table[][2] = { /* X86_64_VEX_0F385C */ { { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_VEX_0F385C_X86_64) }, + { MOD_TABLE (MOD_VEX_0F385C_X86_64) }, }, /* X86_64_VEX_0F385E */ { { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_VEX_0F385E_X86_64) }, + { MOD_TABLE (MOD_VEX_0F385E_X86_64) }, }, /* X86_64_VEX_0F386C */ { { Bad_Opcode }, - { VEX_W_TABLE (VEX_W_0F386C_X86_64) }, + { MOD_TABLE (MOD_VEX_0F386C_X86_64) }, }, /* X86_64_VEX_0F38E0 */ @@ -7210,39 +7198,19 @@ static const struct dis386 vex_len_table[][2] = { { VEX_W_TABLE (VEX_W_0F385A_M_0_L_0) }, }, - /* VEX_LEN_0F385C_X86_64_P_1_W_0_M_0 */ - { - { "tdpbf16ps", { TMM, EXtmm, VexTmm }, 0 }, - }, - - /* VEX_LEN_0F385C_X86_64_P_3_W_0_M_0 */ - { - { "tdpfp16ps", { TMM, EXtmm, VexTmm }, 0 }, - }, - - /* VEX_LEN_0F385E_X86_64_P_0_W_0_M_0 */ - { - { "tdpbuud", {TMM, EXtmm, VexTmm }, 0 }, - }, - - /* VEX_LEN_0F385E_X86_64_P_1_W_0_M_0 */ - { - { "tdpbsud", {TMM, EXtmm, VexTmm }, 0 }, - }, - - /* VEX_LEN_0F385E_X86_64_P_2_W_0_M_0 */ + /* VEX_LEN_0F385C_X86_64_M_1 */ { - { "tdpbusd", {TMM, EXtmm, VexTmm }, 0 }, + { VEX_W_TABLE (VEX_W_0F385C_X86_64_M_1_L_0) }, }, - /* VEX_LEN_0F385E_X86_64_P_3_W_0_M_0 */ + /* VEX_LEN_0F385E_X86_64_M_1 */ { - { "tdpbssd", {TMM, EXtmm, VexTmm }, 0 }, + { VEX_W_TABLE (VEX_W_0F385E_X86_64_M_1_L_0) }, }, - /* VEX_LEN_0F386C_X86_64_W_0_M_1 */ + /* VEX_LEN_0F386C_X86_64_M_1 */ { - { PREFIX_TABLE (PREFIX_VEX_0F386C_X86_64_W_0_M_1_L_0) }, + { VEX_W_TABLE (VEX_W_0F386C_X86_64_M_1_L_0) }, }, /* VEX_LEN_0F38DB */ @@ -7890,32 +7858,16 @@ static const struct dis386 vex_w_table[][2] = { { "vbroadcasti128", { XM, Mxmm }, PREFIX_DATA }, }, { - /* VEX_W_0F385C_X86_64_P_1 */ - { MOD_TABLE (MOD_VEX_0F385C_X86_64_P_1_W_0) }, - }, - { - /* VEX_W_0F385C_X86_64_P_3 */ - { MOD_TABLE (MOD_VEX_0F385C_X86_64_P_3_W_0) }, - }, - { - /* VEX_W_0F385E_X86_64_P_0 */ - { MOD_TABLE (MOD_VEX_0F385E_X86_64_P_0_W_0) }, + /* VEX_W_0F385C_X86_64_M_1_L_0 */ + { PREFIX_TABLE (PREFIX_VEX_0F385C_X86_64_M_1_L_0_W_0) }, }, { - /* VEX_W_0F385E_X86_64_P_1 */ - { MOD_TABLE (MOD_VEX_0F385E_X86_64_P_1_W_0) }, + /* VEX_W_0F385E_X86_64_M_1_L_0 */ + { PREFIX_TABLE (PREFIX_VEX_0F385E_X86_64_M_1_L_0_W_0) }, }, { - /* VEX_W_0F385E_X86_64_P_2 */ - { MOD_TABLE (MOD_VEX_0F385E_X86_64_P_2_W_0) }, - }, - { - /* VEX_W_0F385E_X86_64_P_3 */ - { MOD_TABLE (MOD_VEX_0F385E_X86_64_P_3_W_0) }, - }, - { - /* VEX_W_0F386C_X86_64 */ - { MOD_TABLE (MOD_VEX_0F386C_X86_64_W_0) }, + /* VEX_W_0F386C_X86_64_M_1_L_0 */ + { PREFIX_TABLE (PREFIX_VEX_0F386C_X86_64_M_1_L_0_W_0) }, }, { /* VEX_W_0F3872_P_1 */ @@ -8735,39 +8687,19 @@ static const struct dis386 mod_table[][2] = { { VEX_LEN_TABLE (VEX_LEN_0F385A_M_0) }, }, { - /* MOD_VEX_0F385C_X86_64_P_1_W_0 */ - { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0F385C_X86_64_P_1_W_0_M_0) }, - }, - { - /* MOD_VEX_0F385C_X86_64_P_3_W_0 */ - { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0F385C_X86_64_P_3_W_0_M_0) }, - }, - { - /* MOD_VEX_0F385E_X86_64_P_0_W_0 */ - { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0F385E_X86_64_P_0_W_0_M_0) }, - }, - { - /* MOD_VEX_0F385E_X86_64_P_1_W_0 */ - { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0F385E_X86_64_P_1_W_0_M_0) }, - }, - { - /* MOD_VEX_0F385E_X86_64_P_2_W_0 */ + /* MOD_VEX_0F385C_X86_64 */ { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0F385E_X86_64_P_2_W_0_M_0) }, + { VEX_LEN_TABLE (VEX_LEN_0F385C_X86_64_M_1) }, }, { - /* MOD_VEX_0F385E_X86_64_P_3_W_0 */ + /* MOD_VEX_0F385E_X86_64 */ { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0F385E_X86_64_P_3_W_0_M_0) }, + { VEX_LEN_TABLE (VEX_LEN_0F385E_X86_64_M_1) }, }, { - /* MOD_VEX_0F386C_X86_64_W_0 */ + /* MOD_VEX_0F386C_X86_64 */ { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0F386C_X86_64_W_0_M_1) }, + { VEX_LEN_TABLE (VEX_LEN_0F386C_X86_64_M_1) }, }, { /* MOD_VEX_0F388C */ |