x86/APX: correct disassembly for EVEX.B4

EVEX.B4 is used only for GPR (or addressing of memory) operands. SIMD
registers encoded via ModR/M.rm (when ModR/M.mod == 3) have their top
bit in EVEX.X3. Supposedly (doc version 004) EVEX.B4 is ignored when
unused, hence also don't flag such encodings as invalid.
This commit is contained in:
Jan Beulich 2024-09-11 13:52:42 +02:00
parent b7ee8ec914
commit 6170a088a6

View File

@ -13012,14 +13012,15 @@ OP_EX (instr_info *ins, int bytemode, int sizeflag)
USED_REX (REX_B);
if (ins->rex & REX_B)
reg += 8;
if (ins->rex2 & REX_B)
reg += 16;
if (ins->vex.evex)
{
USED_REX (REX_X);
if ((ins->rex & REX_X))
reg += 16;
ins->rex2_used &= ~REX_B;
}
else if (ins->rex2 & REX_B)
reg += 16;
if ((sizeflag & SUFFIX_ALWAYS)
&& (bytemode == x_swap_mode