VirtualBox

Changeset 65775 in vbox for trunk/src/VBox/VMM/VMMAll


Ignore:
Timestamp:
Feb 13, 2017 4:01:39 PM (8 years ago)
Author:
vboxsync
Message:

IEM: Use prefix indexed tables for group 14.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsTwoByte0f.cpp.h

    r65774 r65775  
    30163016
    30173017/** Opcode 0x0f 0x73 11/2. */
    3018 FNIEMOP_STUB_1(iemOp_Grp14_psrlq_Nq_Ib,   uint8_t, bRm);
     3018FNIEMOP_STUB_1(iemOp_Grp14_psrlq_Nq_Ib, uint8_t, bRm);
    30193019
    30203020/** Opcode 0x66 0x0f 0x73 11/2. */
    3021 FNIEMOP_STUB_1(iemOp_Grp14_psrlq_Udq_Ib, uint8_t, bRm);
     3021FNIEMOP_STUB_1(iemOp_Grp14_vpsrlq_Hx_Ux_Ib, uint8_t, bRm);
    30223022
    30233023/** Opcode 0x66 0x0f 0x73 11/3. */
    3024 FNIEMOP_STUB_1(iemOp_Grp14_psrldq_Udq_Ib, uint8_t, bRm); //NEXT
     3024FNIEMOP_STUB_1(iemOp_Grp14_vpsrldq_Hx_Ux_Ib, uint8_t, bRm); //NEXT
    30253025
    30263026/** Opcode 0x0f 0x73 11/6. */
    3027 FNIEMOP_STUB_1(iemOp_Grp14_psllq_Nq_Ib,   uint8_t, bRm);
     3027FNIEMOP_STUB_1(iemOp_Grp14_psllq_Nq_Ib, uint8_t, bRm);
    30283028
    30293029/** Opcode 0x66 0x0f 0x73 11/6. */
    3030 FNIEMOP_STUB_1(iemOp_Grp14_psllq_Udq_Ib, uint8_t, bRm);
     3030FNIEMOP_STUB_1(iemOp_Grp14_vpsllq_Hx_Ux_Ib, uint8_t, bRm);
    30313031
    30323032/** Opcode 0x66 0x0f 0x73 11/7. */
    3033 FNIEMOP_STUB_1(iemOp_Grp14_pslldq_Udq_Ib, uint8_t, bRm); //NEXT
     3033FNIEMOP_STUB_1(iemOp_Grp14_vpslldq_Hx_Ux_Ib, uint8_t, bRm); //NEXT
     3034
     3035/**
     3036 * Group 14 jump table for register variant.
     3037 */
     3038IEM_STATIC const PFNIEMOPRM g_apfnGroup14RegReg[8*4] =
     3039{
     3040    /** @todo decode imm8? */
     3041    /* /0 */ IEMOP_X4(iemOp_InvalidWithRM),
     3042    /* /1 */ IEMOP_X4(iemOp_InvalidWithRM),
     3043    /* /2 */ iemOp_Grp14_psrlq_Nq_Ib,           iemOp_Grp14_vpsrlq_Hx_Ux_Ib,    iemOp_InvalidWithRM, iemOp_InvalidWithRM,
     3044    /* /3 */ iemOp_InvalidWithRM,               iemOp_Grp14_vpsrldq_Hx_Ux_Ib,   iemOp_InvalidWithRM, iemOp_InvalidWithRM,
     3045    /* /4 */ IEMOP_X4(iemOp_InvalidWithRM),
     3046    /* /5 */ IEMOP_X4(iemOp_InvalidWithRM),
     3047    /* /6 */ iemOp_Grp14_psllq_Nq_Ib,           iemOp_Grp14_vpsllq_Hx_Ux_Ib,    iemOp_InvalidWithRM, iemOp_InvalidWithRM,
     3048    /* /7 */ iemOp_InvalidWithRM,               iemOp_Grp14_vpslldq_Hx_Ux_Ib,   iemOp_InvalidWithRM, iemOp_InvalidWithRM,
     3049};
    30343050
    30353051
     
    30383054{
    30393055    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
    3040     if ((bRm & X86_MODRM_MOD_MASK) != (3 << X86_MODRM_MOD_SHIFT))
    3041         return IEMOP_RAISE_INVALID_OPCODE();
    3042     switch ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK)
    3043     {
    3044         case 0: case 1: case 4: case 5:
    3045             return IEMOP_RAISE_INVALID_OPCODE();
    3046         case 2:
    3047             switch (pVCpu->iem.s.fPrefixes & (IEM_OP_PRF_SIZE_OP | IEM_OP_PRF_REPZ | IEM_OP_PRF_REPNZ))
    3048             {
    3049                 case 0:                     return FNIEMOP_CALL_1(iemOp_Grp14_psrlq_Nq_Ib, bRm);
    3050                 case IEM_OP_PRF_SIZE_OP:    return FNIEMOP_CALL_1(iemOp_Grp14_psrlq_Udq_Ib, bRm);
    3051                 default:                    return IEMOP_RAISE_INVALID_OPCODE();
    3052             }
    3053         case 3:
    3054             switch (pVCpu->iem.s.fPrefixes & (IEM_OP_PRF_SIZE_OP | IEM_OP_PRF_REPZ | IEM_OP_PRF_REPNZ))
    3055             {
    3056                 case IEM_OP_PRF_SIZE_OP:    return FNIEMOP_CALL_1(iemOp_Grp14_psrldq_Udq_Ib, bRm);
    3057                 default:                    return IEMOP_RAISE_INVALID_OPCODE();
    3058             }
    3059         case 6:
    3060             switch (pVCpu->iem.s.fPrefixes & (IEM_OP_PRF_SIZE_OP | IEM_OP_PRF_REPZ | IEM_OP_PRF_REPNZ))
    3061             {
    3062                 case 0:                     return FNIEMOP_CALL_1(iemOp_Grp14_psllq_Nq_Ib, bRm);
    3063                 case IEM_OP_PRF_SIZE_OP:    return FNIEMOP_CALL_1(iemOp_Grp14_psllq_Udq_Ib, bRm);
    3064                 default:                    return IEMOP_RAISE_INVALID_OPCODE();
    3065             }
    3066         case 7:
    3067             switch (pVCpu->iem.s.fPrefixes & (IEM_OP_PRF_SIZE_OP | IEM_OP_PRF_REPZ | IEM_OP_PRF_REPNZ))
    3068             {
    3069                 case IEM_OP_PRF_SIZE_OP:    return FNIEMOP_CALL_1(iemOp_Grp14_pslldq_Udq_Ib, bRm);
    3070                 default:                    return IEMOP_RAISE_INVALID_OPCODE();
    3071             }
    3072         IEM_NOT_REACHED_DEFAULT_CASE_RET();
    3073     }
     3056    if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT))
     3057        /* register, register */
     3058        return FNIEMOP_CALL_1(g_apfnGroup14RegReg[ ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) * 4
     3059                                                  + pVCpu->iem.s.idxPrefix], bRm);
     3060    /** @todo decode SIB, disp, Ib? */
     3061    return IEMOP_RAISE_INVALID_OPCODE();
    30743062}
    30753063
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette