Before this patch, users need to do this to fetch vex.vvvv: if (insn->vex_prefix.nbytes == 2) { vex_vvvv = ((insn->vex_prefix.bytes[1] >> 3) & 0xf) ^ 0xf; } if (insn->vex_prefix.nbytes == 3) { vex_vvvv = ((insn->vex_prefix.bytes[2] >> 3) & 0xf) ^ 0xf; }
Make it so that insn->vex_prefix.bytes[2] always contains vex.wvvvvLpp bits. Signed-off-by: Denys Vlasenko <dvlas...@redhat.com> Cc: Masami Hiramatsu <masami.hiramatsu...@hitachi.com> Cc: Frank Ch. Eigler <f...@redhat.com> Cc: Srikar Dronamraju <sri...@linux.vnet.ibm.com> Cc: Ananth N Mavinakayanahalli <ana...@in.ibm.com> Cc: Jim Keniston <jkeni...@linux.vnet.ibm.com> Cc: Oleg Nesterov <o...@redhat.com> Cc: Andi Kleen <a...@firstfloor.org> Cc: Ingo Molnar <mi...@kernel.org> --- arch/x86/lib/insn.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/arch/x86/lib/insn.c b/arch/x86/lib/insn.c index 54fcffe..829ca4c 100644 --- a/arch/x86/lib/insn.c +++ b/arch/x86/lib/insn.c @@ -163,6 +163,12 @@ found: /* VEX.W overrides opnd_size */ insn->opnd_bytes = 8; } else { + /* + * For VEX2, fake VEX3-like byte#2. + * Makes it easier to decode vex.W, vex.vvvv, + * vex.L and vex.pp. Masking with 0x7f sets vex.W == 0. + */ + insn->vex_prefix.bytes[2] = b2 & 0x7f; insn->vex_prefix.nbytes = 2; insn->next_byte += 2; } -- 1.8.1.4 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/