lkml.org 
[lkml]   [2014]   [May]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 1/2] x86: insn decoder: create artificial 3rd byte for 2-byte VEX
    Date
    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 <dvlasenk@redhat.com>
    Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
    Cc: Frank Ch. Eigler <fche@redhat.com>
    Cc: Srikar Dronamraju <srikar@linux.vnet.ibm.com>
    Cc: Ananth N Mavinakayanahalli <ananth@in.ibm.com>
    Cc: Jim Keniston <jkenisto@linux.vnet.ibm.com>
    Cc: Oleg Nesterov <oleg@redhat.com>
    Cc: Andi Kleen <andi@firstfloor.org>
    Cc: Ingo Molnar <mingo@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


    \
     
     \ /
      Last update: 2014-05-16 21:01    [W:8.933 / U:0.016 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site