VirtualBox

Changeset 65772 in vbox for trunk/src/VBox


Ignore:
Timestamp:
Feb 13, 2017 3:28:22 PM (8 years ago)
Author:
vboxsync
Message:

IEM: Use jump table for group 7 memory variants.

File:
1 edited

Legend:

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

    r65771 r65772  
    597597
    598598
     599/**
     600 * Group 7 jump table, memory variant.
     601 */
     602IEM_STATIC const PFNIEMOPRM g_apfnGroup7Mem[8] =
     603{
     604    iemOp_Grp7_sgdt,
     605    iemOp_Grp7_sidt,
     606    iemOp_Grp7_lgdt,
     607    iemOp_Grp7_lidt,
     608    iemOp_Grp7_smsw,
     609    iemOp_InvalidWithRM,
     610    iemOp_Grp7_lmsw,
     611    iemOp_Grp7_invlpg
     612};
     613
     614
    599615/** Opcode 0x0f 0x01. */
    600616FNIEMOP_DEF(iemOp_Grp7)
    601617{
    602618    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
     619    if ((bRm & X86_MODRM_MOD_MASK) != (3 << X86_MODRM_MOD_SHIFT))
     620        return FNIEMOP_CALL_1(g_apfnGroup7Mem[(bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK], bRm);
     621
    603622    switch ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK)
    604623    {
    605624        case 0:
    606             if ((bRm & X86_MODRM_MOD_MASK) != (3 << X86_MODRM_MOD_SHIFT))
    607                 return FNIEMOP_CALL_1(iemOp_Grp7_sgdt, bRm);
    608625            switch (bRm & X86_MODRM_RM_MASK)
    609626            {
     
    616633
    617634        case 1:
    618             if ((bRm & X86_MODRM_MOD_MASK) != (3 << X86_MODRM_MOD_SHIFT))
    619                 return FNIEMOP_CALL_1(iemOp_Grp7_sidt, bRm);
    620635            switch (bRm & X86_MODRM_RM_MASK)
    621636            {
     
    626641
    627642        case 2:
    628             if ((bRm & X86_MODRM_MOD_MASK) != (3 << X86_MODRM_MOD_SHIFT))
    629                 return FNIEMOP_CALL_1(iemOp_Grp7_lgdt, bRm);
    630643            switch (bRm & X86_MODRM_RM_MASK)
    631644            {
     
    636649
    637650        case 3:
    638             if ((bRm & X86_MODRM_MOD_MASK) != (3 << X86_MODRM_MOD_SHIFT))
    639                 return FNIEMOP_CALL_1(iemOp_Grp7_lidt, bRm);
    640651            switch (bRm & X86_MODRM_RM_MASK)
    641652            {
     
    661672
    662673        case 7:
    663             if ((bRm & X86_MODRM_MOD_MASK) != (3 << X86_MODRM_MOD_SHIFT))
    664                 return FNIEMOP_CALL_1(iemOp_Grp7_invlpg, bRm);
    665674            switch (bRm & X86_MODRM_RM_MASK)
    666675            {
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