From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754207AbaIDMzO (ORCPT ); Thu, 4 Sep 2014 08:55:14 -0400 Received: from mx1.redhat.com ([209.132.183.28]:42868 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751380AbaIDMzL (ORCPT ); Thu, 4 Sep 2014 08:55:11 -0400 From: Denys Vlasenko To: linux-kernel@vger.kernel.org Cc: Denys Vlasenko , Masami Hiramatsu , "Frank Ch. Eigler" , Srikar Dronamraju , Ananth N Mavinakayanahalli , Jim Keniston , Oleg Nesterov , Andi Kleen , Ingo Molnar Subject: [PATCH 1/2] x86: insn decoder: create artificial 3rd byte for 2-byte VEX Date: Thu, 4 Sep 2014 14:54:35 +0200 Message-Id: <1409835276-6783-1-git-send-email-dvlasenk@redhat.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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 Cc: Masami Hiramatsu Cc: Frank Ch. Eigler Cc: Srikar Dronamraju Cc: Ananth N Mavinakayanahalli Cc: Jim Keniston Cc: Oleg Nesterov Cc: Andi Kleen Cc: Ingo Molnar --- 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