From f7b1fe8dc463d1cc0758d6c010a3082ff124e360 Mon Sep 17 00:00:00 2001 From: "Cui, Lili" Date: Tue, 18 Jun 2024 10:46:31 +0800 Subject: Remove %ME and used %NE for movbe. %ME is added specifically for movbe. Now with %NE, we can use MOD table + %NE to indicate whether a {evex} prefix is needed. opcodes/ChangeLog: * i386-dis-evex-mod.h: Added movbe. * i386-dis-evex.h: Let movbe go through the mod table. * i386-dis.c (struct dis386): Removed %ME. (putop): Removed case ME. --- opcodes/i386-dis-evex-mod.h | 10 ++++++++++ opcodes/i386-dis-evex.h | 4 ++-- opcodes/i386-dis.c | 10 ++-------- 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/opcodes/i386-dis-evex-mod.h b/opcodes/i386-dis-evex-mod.h index 879c91f..bba3265 100644 --- a/opcodes/i386-dis-evex-mod.h +++ b/opcodes/i386-dis-evex-mod.h @@ -1,3 +1,13 @@ + /* MOD_EVEX_MAP4_60 */ + { + { "movbeS", { Gv, Mv }, PREFIX_NP_OR_DATA }, + { "%NEmovbeS", { Gv, Ev }, PREFIX_NP_OR_DATA }, + }, + /* MOD_EVEX_MAP4_61 */ + { + { "movbeS", { Mv, Gv }, PREFIX_NP_OR_DATA }, + { "%NEmovbeS", { Ev, Gv }, PREFIX_NP_OR_DATA }, + }, /* MOD_EVEX_MAP4_F8_P1 */ { { "enqcmds", { Gva, M }, 0 }, diff --git a/opcodes/i386-dis-evex.h b/opcodes/i386-dis-evex.h index 77c2ee7..0f63b5f 100644 --- a/opcodes/i386-dis-evex.h +++ b/opcodes/i386-dis-evex.h @@ -983,8 +983,8 @@ static const struct dis386 evex_table[][256] = { { Bad_Opcode }, { Bad_Opcode }, /* 60 */ - { "%MEmovbeS", { Gv, Ev }, PREFIX_NP_OR_DATA }, - { "%MEmovbeS", { Ev, Gv }, PREFIX_NP_OR_DATA }, + { MOD_TABLE (MOD_EVEX_MAP4_60) }, + { MOD_TABLE (MOD_EVEX_MAP4_61) }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, diff --git a/opcodes/i386-dis.c b/opcodes/i386-dis.c index 86745a1..3a1afcc 100644 --- a/opcodes/i386-dis.c +++ b/opcodes/i386-dis.c @@ -960,6 +960,8 @@ enum MOD_VEX_0F3849_X86_64_L_0_W_0, + MOD_EVEX_MAP4_60, + MOD_EVEX_MAP4_61, MOD_EVEX_MAP4_F8_P_1, MOD_EVEX_MAP4_F8_P_3, }; @@ -1800,9 +1802,6 @@ struct dis386 { "XV" => print "{vex} " pseudo prefix "XE" => print "{evex} " pseudo prefix if no EVEX-specific functionality is is used by an EVEX-encoded (AVX512VL) instruction. - "ME" => print "{evex} " pseudo prefix for ins->modrm.mod != 3,if no - EVEX-specific functionality is used by an EVEX-encoded (AVX512VL) - instruction. "NF" => print "{nf} " pseudo prefix when EVEX.NF = 1 and print "{evex} " pseudo prefix when instructions without NF, EGPR and VVVV, "NE" => don't print "{evex} " pseudo prefix for some special instructions @@ -10527,11 +10526,6 @@ putop (instr_info *ins, const char *in_template, int sizeflag) /* Skip printing {evex} for some special instructions in MAP4. */ evex_printed = true; break; - case 'M': - if (ins->modrm.mod != 3 && !(ins->rex2 & 7)) - oappend (ins, "{evex} "); - evex_printed = true; - break; default: abort (); } -- cgit v1.1