From: Jan Beulich Date: Wed, 11 Sep 2024 11:52:42 +0000 (+0200) Subject: x86/APX: correct disassembly for EVEX.B4 X-Git-Tag: gdb-16-branchpoint~925 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=6170a088a60e159f2ab8ac1ae1edab7d04e079ec;p=thirdparty%2Fbinutils-gdb.git 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. --- diff --git a/opcodes/i386-dis.c b/opcodes/i386-dis.c index 26d667a3b0e..e2c7b1b4ac7 100644 --- a/opcodes/i386-dis.c +++ b/opcodes/i386-dis.c @@ -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