VirtualBox

Changeset 100856 in vbox


Ignore:
Timestamp:
Aug 11, 2023 9:47:22 AM (16 months ago)
Author:
vboxsync
Message:

VMM/IEM: Made use of the IEM_MC_F_XXX flags to limit the number of threaded functions generated. Added some more flags for completion. Fixed bug wrt selecting pre-386 IP updating function variations. bugref:10369

Location:
trunk/src/VBox/VMM
Files:
8 edited

Legend:

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

    r100854 r100856  
    3939 * @note Used both in OneByte and TwoByte0f.
    4040 */
    41 #define IEMOP_BODY_BINARY_rv_rm(a_fnNormalU16, a_fnNormalU32, a_fnNormalU64, a_fModifiesDstReg) \
     41#define IEMOP_BODY_BINARY_rv_rm(a_fnNormalU16, a_fnNormalU32, a_fnNormalU64, a_fModifiesDstReg, a_f16BitMcFlag) \
    4242    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); \
    4343    \
     
    5050        { \
    5151            case IEMMODE_16BIT: \
    52                 IEM_MC_BEGIN(3, 0, 0); \
     52                IEM_MC_BEGIN(3, 0, a_f16BitMcFlag); \
    5353                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \
    5454                IEM_MC_ARG(uint16_t *, pu16Dst, 0); \
     
    110110        { \
    111111            case IEMMODE_16BIT: \
    112                 IEM_MC_BEGIN(3, 1, 0); \
     112                IEM_MC_BEGIN(3, 1, a_f16BitMcFlag); \
    113113                IEM_MC_ARG(uint16_t *, pu16Dst, 0); \
    114114                IEM_MC_ARG(uint16_t,   u16Src,  1); \
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstOneByte.cpp.h

    r100854 r100856  
    781781{
    782782    IEMOP_MNEMONIC2(RM, ADD, add, Gv, Ev, DISOPTYPE_HARMLESS, 0);
    783     IEMOP_BODY_BINARY_rv_rm(iemAImpl_add_u16, iemAImpl_add_u32, iemAImpl_add_u64, 1);
     783    IEMOP_BODY_BINARY_rv_rm(iemAImpl_add_u16, iemAImpl_add_u32, iemAImpl_add_u64, 1, 0);
    784784}
    785785
     
    909909    IEMOP_MNEMONIC2(RM, OR, or, Gv, Ev, DISOPTYPE_HARMLESS, 0);
    910910    IEMOP_VERIFICATION_UNDEFINED_EFLAGS(X86_EFL_AF);
    911     IEMOP_BODY_BINARY_rv_rm(iemAImpl_or_u16, iemAImpl_or_u32, iemAImpl_or_u64, 1);
     911    IEMOP_BODY_BINARY_rv_rm(iemAImpl_or_u16, iemAImpl_or_u32, iemAImpl_or_u64, 1, 0);
    912912}
    913913
     
    10691069{
    10701070    IEMOP_MNEMONIC2(RM, ADC, adc, Gv, Ev, DISOPTYPE_HARMLESS, 0);
    1071     IEMOP_BODY_BINARY_rv_rm(iemAImpl_adc_u16, iemAImpl_adc_u32, iemAImpl_adc_u64, 1);
     1071    IEMOP_BODY_BINARY_rv_rm(iemAImpl_adc_u16, iemAImpl_adc_u32, iemAImpl_adc_u64, 1, 0);
    10721072}
    10731073
     
    11771177{
    11781178    IEMOP_MNEMONIC2(RM, SBB, sbb, Gv, Ev, DISOPTYPE_HARMLESS, 0);
    1179     IEMOP_BODY_BINARY_rv_rm(iemAImpl_sbb_u16, iemAImpl_sbb_u32, iemAImpl_sbb_u64, 1);
     1179    IEMOP_BODY_BINARY_rv_rm(iemAImpl_sbb_u16, iemAImpl_sbb_u32, iemAImpl_sbb_u64, 1, 0);
    11801180}
    11811181
     
    12901290    IEMOP_MNEMONIC2(RM, AND, and, Gv, Ev, DISOPTYPE_HARMLESS, 0);
    12911291    IEMOP_VERIFICATION_UNDEFINED_EFLAGS(X86_EFL_AF);
    1292     IEMOP_BODY_BINARY_rv_rm(iemAImpl_and_u16, iemAImpl_and_u32, iemAImpl_and_u64, 1);
     1292    IEMOP_BODY_BINARY_rv_rm(iemAImpl_and_u16, iemAImpl_and_u32, iemAImpl_and_u64, 1, 0);
    12931293}
    12941294
     
    14061406{
    14071407    IEMOP_MNEMONIC2(RM, SUB, sub, Gv, Ev, DISOPTYPE_HARMLESS, 0);
    1408     IEMOP_BODY_BINARY_rv_rm(iemAImpl_sub_u16, iemAImpl_sub_u32, iemAImpl_sub_u64, 1);
     1408    IEMOP_BODY_BINARY_rv_rm(iemAImpl_sub_u16, iemAImpl_sub_u32, iemAImpl_sub_u64, 1, 0);
    14091409}
    14101410
     
    15281528    IEMOP_MNEMONIC2(RM, XOR, xor, Gv, Ev, DISOPTYPE_HARMLESS, 0);
    15291529    IEMOP_VERIFICATION_UNDEFINED_EFLAGS(X86_EFL_AF);
    1530     IEMOP_BODY_BINARY_rv_rm(iemAImpl_xor_u16, iemAImpl_xor_u32, iemAImpl_xor_u64, 1);
     1530    IEMOP_BODY_BINARY_rv_rm(iemAImpl_xor_u16, iemAImpl_xor_u32, iemAImpl_xor_u64, 1, 0);
    15311531}
    15321532
     
    16681668{
    16691669    IEMOP_MNEMONIC(cmp_Gv_Ev, "cmp Gv,Ev");
    1670     IEMOP_BODY_BINARY_rv_rm(iemAImpl_cmp_u16, iemAImpl_cmp_u32, iemAImpl_cmp_u64, 0);
     1670    IEMOP_BODY_BINARY_rv_rm(iemAImpl_cmp_u16, iemAImpl_cmp_u32, iemAImpl_cmp_u64, 0, 0);
    16711671}
    16721672
     
    22052205
    22062206        case IEMMODE_32BIT:
    2207             IEM_MC_BEGIN(0, 1, IEM_MC_F_MIN_386);
     2207            IEM_MC_BEGIN(0, 1, IEM_MC_F_MIN_386 | IEM_MC_F_NOT_64BIT);
    22082208            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    22092209            IEM_MC_LOCAL(uint32_t, u32Value);
     
    26052605            if (pVCpu->iem.s.enmEffOpSize == IEMMODE_16BIT)
    26062606            {
    2607                 IEM_MC_BEGIN(3, 1, IEM_MC_F_NOT_64BIT);
     2607                IEM_MC_BEGIN(3, 1, IEM_MC_F_MIN_186 | IEM_MC_F_NOT_64BIT);
    26082608                IEM_MC_ARG(uint16_t,    u16Index,       0); /* Note! All operands are actually signed. Lazy unsigned bird. */
    26092609                IEM_MC_ARG(uint16_t,    u16LowerBounds, 1);
     
    26832683    {
    26842684        /* Register */
    2685         IEM_MC_BEGIN(3, 0, IEM_MC_F_NOT_64BIT);
     2685        IEM_MC_BEGIN(3, 0, IEM_MC_F_MIN_286 | IEM_MC_F_NOT_64BIT);
    26862686        IEMOP_HLP_DECODED_NL_2(OP_ARPL, IEMOPFORM_MR_REG, OP_PARM_Ew, OP_PARM_Gw, DISOPTYPE_HARMLESS);
    26872687        IEM_MC_ARG(uint16_t *,      pu16Dst,    0);
     
    27002700    {
    27012701        /* Memory */
    2702         IEM_MC_BEGIN(3, 3, IEM_MC_F_NOT_64BIT);
     2702        IEM_MC_BEGIN(3, 3, IEM_MC_F_MIN_286 | IEM_MC_F_NOT_64BIT);
    27032703        IEM_MC_ARG(uint16_t *, pu16Dst,          0);
    27042704        IEM_MC_ARG(uint16_t,   u16Src,           1);
     
    28732873    {
    28742874        case IEMMODE_16BIT:
    2875         {
     2875            IEM_MC_BEGIN(0, 0, IEM_MC_F_MIN_186);
    28762876            uint16_t u16Imm; IEM_OPCODE_GET_NEXT_U16(&u16Imm);
    2877             IEM_MC_BEGIN(0, 0, 0);
    28782877            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    28792878            IEM_MC_PUSH_U16(u16Imm);
     
    28812880            IEM_MC_END();
    28822881            break;
    2883         }
    28842882
    28852883        case IEMMODE_32BIT:
    2886         {
     2884            IEM_MC_BEGIN(0, 0, IEM_MC_F_MIN_386);
    28872885            uint32_t u32Imm; IEM_OPCODE_GET_NEXT_U32(&u32Imm);
    2888             IEM_MC_BEGIN(0, 0, IEM_MC_F_MIN_386);
    28892886            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    28902887            IEM_MC_PUSH_U32(u32Imm);
     
    28922889            IEM_MC_END();
    28932890            break;
    2894         }
    28952891
    28962892        case IEMMODE_64BIT:
    2897         {
     2893            IEM_MC_BEGIN(0, 0, IEM_MC_F_64BIT);
    28982894            uint64_t u64Imm; IEM_OPCODE_GET_NEXT_S32_SX_U64(&u64Imm);
    2899             IEM_MC_BEGIN(0, 0, IEM_MC_F_64BIT);
    29002895            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    29012896            IEM_MC_PUSH_U64(u64Imm);
     
    29032898            IEM_MC_END();
    29042899            break;
    2905         }
    29062900
    29072901        IEM_NOT_REACHED_DEFAULT_CASE_RET();
     
    29292923                /* register operand */
    29302924                uint16_t u16Imm; IEM_OPCODE_GET_NEXT_U16(&u16Imm);
    2931                 IEM_MC_BEGIN(3, 1, 0);
     2925                IEM_MC_BEGIN(3, 1, IEM_MC_F_MIN_186);
    29322926                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    29332927                IEM_MC_ARG(uint16_t *,      pu16Dst,            0);
     
    29482942            {
    29492943                /* memory operand */
    2950                 IEM_MC_BEGIN(3, 2, 0);
     2944                IEM_MC_BEGIN(3, 2, IEM_MC_F_MIN_186);
    29512945                IEM_MC_ARG(uint16_t *,      pu16Dst,            0);
    29522946                IEM_MC_ARG(uint16_t,        u16Src,             1);
     
    30873081    {
    30883082        case IEMMODE_16BIT:
    3089             IEM_MC_BEGIN(0, 0, 0);
     3083            IEM_MC_BEGIN(0, 0, IEM_MC_F_MIN_186);
    30903084            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    30913085            IEM_MC_PUSH_U16(i8Imm);
     
    31303124            {
    31313125                /* register operand */
     3126                IEM_MC_BEGIN(3, 1, IEM_MC_F_MIN_186);
    31323127                uint8_t u8Imm; IEM_OPCODE_GET_NEXT_U8(&u8Imm);
    3133                 IEM_MC_BEGIN(3, 1, 0);
    31343128                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    31353129                IEM_MC_ARG(uint16_t *,      pu16Dst,                    0);
     
    31503144            {
    31513145                /* memory operand */
    3152                 IEM_MC_BEGIN(3, 2, 0);
     3146                IEM_MC_BEGIN(3, 2, IEM_MC_F_MIN_186);
    31533147                IEM_MC_ARG(uint16_t *,      pu16Dst,                    0);
    31543148                IEM_MC_ARG(uint16_t,        u16Src,                     1);
     
    76127606        /* register */
    76137607        uint8_t cShift; IEM_OPCODE_GET_NEXT_U8(&cShift);
    7614         IEM_MC_BEGIN(3, 0, 0);
     7608        IEM_MC_BEGIN(3, 0, IEM_MC_F_MIN_186);
    76157609        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    76167610        IEM_MC_ARG(uint8_t *,       pu8Dst,            0);
     
    76267620    {
    76277621        /* memory */
    7628         IEM_MC_BEGIN(3, 3, 0);
     7622        IEM_MC_BEGIN(3, 3, IEM_MC_F_MIN_186);
    76297623        IEM_MC_ARG(uint8_t *,   pu8Dst,    0);
    76307624        IEM_MC_ARG(uint8_t,     cShiftArg,  1);
     
    76787672        {
    76797673            case IEMMODE_16BIT:
    7680                 IEM_MC_BEGIN(3, 0, 0);
     7674                IEM_MC_BEGIN(3, 0, IEM_MC_F_MIN_186);
    76817675                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    76827676                IEM_MC_ARG(uint16_t *,      pu16Dst,           0);
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstPython.py

    r100854 r100856  
    19381938## IEM_MC_F_XXX values.
    19391939g_kdMcFlags = {
    1940     'IEM_MC_F_ONLY_8086':           True,
    1941     'IEM_MC_F_NOT_286_OR_OLDER':    True,
    1942     'IEM_MC_F_MIN_386':             True,
    1943     'IEM_MC_F_MIN_486':             True,
    1944     'IEM_MC_F_MIN_PENTIUM':         True,
    1945     'IEM_MC_F_MIN_PENTIUM_II':      True,
    1946     'IEM_MC_F_MIN_CORE':            True,
    1947     'IEM_MC_F_64BIT':               True,
    1948     'IEM_MC_F_NOT_64BIT':           True,
     1940    'IEM_MC_F_ONLY_8086':           (),
     1941    'IEM_MC_F_MIN_186':             (),
     1942    'IEM_MC_F_MIN_286':             (),
     1943    'IEM_MC_F_NOT_286_OR_OLDER':    (),
     1944    'IEM_MC_F_MIN_386':             ('IEM_MC_F_NOT_286_OR_OLDER',),
     1945    'IEM_MC_F_MIN_486':             ('IEM_MC_F_NOT_286_OR_OLDER',),
     1946    'IEM_MC_F_MIN_PENTIUM':         ('IEM_MC_F_NOT_286_OR_OLDER',),
     1947    'IEM_MC_F_MIN_PENTIUM_II':      ('IEM_MC_F_NOT_286_OR_OLDER',),
     1948    'IEM_MC_F_MIN_CORE':            ('IEM_MC_F_NOT_286_OR_OLDER',),
     1949    'IEM_MC_F_64BIT':               ('IEM_MC_F_NOT_286_OR_OLDER',),
     1950    'IEM_MC_F_NOT_64BIT':           (),
    19491951};
    19501952class McBlock(object):
     
    20372039                if sFlag in g_kdMcFlags:
    20382040                    oSelf.dMcFlags[sFlag] = True;
     2041                    for sFlag2 in g_kdMcFlags[sFlag]:
     2042                        oSelf.dMcFlags[sFlag2] = True;
    20392043                else:
    20402044                    oSelf.raiseStmtError(sName, 'Unknown flag: %s' % (sFlag, ));
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstThree0f38.cpp.h

    r100854 r100856  
    4949        /** @todo testcase: REX.B / REX.R and MMX register indexing. Ignored? */
    5050        /** @todo testcase: REX.B / REX.R and segment register indexing. Ignored? */
    51         IEM_MC_BEGIN(2, 0, 0);
     51        IEM_MC_BEGIN(2, 0, IEM_MC_F_NOT_286_OR_OLDER);
    5252        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSsse3);
    5353        IEM_MC_ARG(uint64_t *,          pDst, 0);
     
    7070         * MMX, [mem64].
    7171         */
    72         IEM_MC_BEGIN(2, 2, 0);
     72        IEM_MC_BEGIN(2, 2, IEM_MC_F_NOT_286_OR_OLDER);
    7373        IEM_MC_ARG(uint64_t *,                  pDst,       0);
    7474        IEM_MC_LOCAL(uint64_t,                  uSrc);
     
    111111         * Register, register.
    112112         */
    113         IEM_MC_BEGIN(2, 0, 0);
     113        IEM_MC_BEGIN(2, 0, IEM_MC_F_NOT_286_OR_OLDER);
    114114        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSsse3);
    115115        IEM_MC_ARG(PRTUINT128U,                 puDst, 0);
     
    128128         * Register, memory.
    129129         */
    130         IEM_MC_BEGIN(2, 2, 0);
     130        IEM_MC_BEGIN(2, 2, IEM_MC_F_NOT_286_OR_OLDER);
    131131        IEM_MC_ARG(PRTUINT128U,                 puDst,       0);
    132132        IEM_MC_LOCAL(RTUINT128U,                uSrc);
     
    167167         * Register, register.
    168168         */
    169         IEM_MC_BEGIN(2, 0, 0);
     169        IEM_MC_BEGIN(2, 0, IEM_MC_F_NOT_286_OR_OLDER);
    170170        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41);
    171171        IEM_MC_ARG(PRTUINT128U,                 puDst, 0);
     
    184184         * Register, memory.
    185185         */
    186         IEM_MC_BEGIN(2, 2, 0);
     186        IEM_MC_BEGIN(2, 2, IEM_MC_F_NOT_286_OR_OLDER);
    187187        IEM_MC_ARG(PRTUINT128U,                 puDst,       0);
    188188        IEM_MC_LOCAL(RTUINT128U,                uSrc);
     
    226226         * Register, register.
    227227         */
    228         IEM_MC_BEGIN(2, 0, 0);
     228        IEM_MC_BEGIN(2, 0, IEM_MC_F_NOT_286_OR_OLDER);
    229229        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41);
    230230        IEM_MC_ARG(PRTUINT128U,                 puDst, 0);
     
    243243         * Register, memory.
    244244         */
    245         IEM_MC_BEGIN(2, 2, 0);
     245        IEM_MC_BEGIN(2, 2, IEM_MC_F_NOT_286_OR_OLDER);
    246246        IEM_MC_ARG(PRTUINT128U,                 puDst,       0);
    247247        IEM_MC_LOCAL(RTUINT128U,                uSrc);
     
    282282         * Register, register.
    283283         */
    284         IEM_MC_BEGIN(2, 0, 0);
     284        IEM_MC_BEGIN(2, 0, IEM_MC_F_NOT_286_OR_OLDER);
    285285        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse42);
    286286        IEM_MC_ARG(PRTUINT128U,                 puDst, 0);
     
    299299         * Register, memory.
    300300         */
    301         IEM_MC_BEGIN(2, 2, 0);
     301        IEM_MC_BEGIN(2, 2, IEM_MC_F_NOT_286_OR_OLDER);
    302302        IEM_MC_ARG(PRTUINT128U,                 puDst,       0);
    303303        IEM_MC_LOCAL(RTUINT128U,                uSrc);
     
    342342         * Register, register.
    343343         */
    344         IEM_MC_BEGIN(2, 0, 0);
     344        IEM_MC_BEGIN(2, 0, IEM_MC_F_NOT_286_OR_OLDER);
    345345        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fAesNi);
    346346        IEM_MC_ARG(PRTUINT128U,                 puDst, 0);
     
    359359         * Register, memory.
    360360         */
    361         IEM_MC_BEGIN(2, 2, 0);
     361        IEM_MC_BEGIN(2, 2, IEM_MC_F_NOT_286_OR_OLDER);
    362362        IEM_MC_ARG(PRTUINT128U,                 puDst,       0);
    363363        IEM_MC_LOCAL(RTUINT128U,                uSrc);
     
    402402         * Register, register.
    403403         */
    404         IEM_MC_BEGIN(2, 0, 0);
     404        IEM_MC_BEGIN(2, 0, IEM_MC_F_NOT_286_OR_OLDER);
    405405        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSha);
    406406        IEM_MC_ARG(PRTUINT128U,                 puDst, 0);
     
    419419         * Register, memory.
    420420         */
    421         IEM_MC_BEGIN(2, 2, 0);
     421        IEM_MC_BEGIN(2, 2, IEM_MC_F_NOT_286_OR_OLDER);
    422422        IEM_MC_ARG(PRTUINT128U,                 puDst,       0);
    423423        IEM_MC_LOCAL(RTUINT128U,                uSrc);
     
    690690         * Register, register. \
    691691         */ \
    692         IEM_MC_BEGIN(3, 0, 0); \
     692        IEM_MC_BEGIN(3, 0, IEM_MC_F_NOT_286_OR_OLDER); \
    693693        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41); \
    694694        IEM_MC_ARG(PRTUINT128U,  puDst,  0); \
     
    712712         * Register, memory. \
    713713         */ \
    714         IEM_MC_BEGIN(3, 2, 0); \
     714        IEM_MC_BEGIN(3, 2, IEM_MC_F_NOT_286_OR_OLDER); \
    715715        IEM_MC_LOCAL(RTGCPTR,                   GCPtrEffSrc); \
    716716        IEM_MC_LOCAL(RTUINT128U,                uSrc); \
     
    785785         * Register, register.
    786786         */
    787         IEM_MC_BEGIN(3, 0, 0);
     787        IEM_MC_BEGIN(3, 0, IEM_MC_F_NOT_286_OR_OLDER);
    788788        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41);
    789789        IEM_MC_ARG(PCRTUINT128U,                puSrc1,  0);
     
    804804         * Register, memory.
    805805         */
    806         IEM_MC_BEGIN(3, 2, 0);
     806        IEM_MC_BEGIN(3, 2, IEM_MC_F_NOT_286_OR_OLDER);
    807807        IEM_MC_ARG(PCRTUINT128U,                puSrc1,        0);
    808808        IEM_MC_LOCAL(RTUINT128U,                uSrc2);
     
    906906         * Register, register. \
    907907         */ \
    908         IEM_MC_BEGIN(2, 0, 0); \
     908        IEM_MC_BEGIN(2, 0, IEM_MC_F_NOT_286_OR_OLDER); \
    909909        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41); \
    910910        IEM_MC_ARG(PRTUINT128U,                 puDst, 0); \
     
    926926         * Register, memory. \
    927927         */ \
    928         IEM_MC_BEGIN(2, 2, 0); \
     928        IEM_MC_BEGIN(2, 2, IEM_MC_F_NOT_286_OR_OLDER); \
    929929        IEM_MC_LOCAL(RTGCPTR,                   GCPtrEffSrc); \
    930930        IEM_MC_ARG(PRTUINT128U,                 puDst, 0); \
     
    10391039    {
    10401040        /* Register, memory. */
    1041         IEM_MC_BEGIN(0, 2, 0);
     1041        IEM_MC_BEGIN(0, 2, IEM_MC_F_NOT_286_OR_OLDER);
    10421042        IEM_MC_LOCAL(RTUINT128U,                uSrc);
    10431043        IEM_MC_LOCAL(RTGCPTR,                   GCPtrEffSrc);
     
    13331333        else
    13341334        {
    1335             IEM_MC_BEGIN(3, 0, 0);
     1335            IEM_MC_BEGIN(3, 0, IEM_MC_F_NOT_286_OR_OLDER);
    13361336            IEM_MC_ARG(uint8_t,  iEffSeg,         0);
    13371337            IEM_MC_ARG(RTGCPTR,  GCPtrInveptDesc, 1);
     
    13841384        else
    13851385        {
    1386             IEM_MC_BEGIN(3, 0, 0);
     1386            IEM_MC_BEGIN(3, 0, IEM_MC_F_NOT_286_OR_OLDER);
    13871387            IEM_MC_ARG(uint8_t,  iEffSeg,          0);
    13881388            IEM_MC_ARG(RTGCPTR,  GCPtrInvvpidDesc, 1);
     
    14301430        else
    14311431        {
    1432             IEM_MC_BEGIN(3, 0, 0);
     1432            IEM_MC_BEGIN(3, 0, IEM_MC_F_NOT_286_OR_OLDER);
    14331433            IEM_MC_ARG(uint8_t,  iEffSeg,          0);
    14341434            IEM_MC_ARG(RTGCPTR,  GCPtrInvpcidDesc, 1);
     
    15771577         * Register, register.
    15781578         */
    1579         IEM_MC_BEGIN(3, 0, 0);
     1579        IEM_MC_BEGIN(3, 0, IEM_MC_F_NOT_286_OR_OLDER);
    15801580        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSha);
    15811581        IEM_MC_ARG(PRTUINT128U,                 puDst, 0);
     
    15971597         * Register, memory.
    15981598         */
    1599         IEM_MC_BEGIN(3, 2, 0);
     1599        IEM_MC_BEGIN(3, 2, IEM_MC_F_NOT_286_OR_OLDER);
    16001600        IEM_MC_ARG(PRTUINT128U,                 puDst,       0);
    16011601        IEM_MC_LOCAL(RTUINT128U,                uSrc);
     
    17421742        {
    17431743            case IEMMODE_16BIT:
    1744                 IEM_MC_BEGIN(0, 2, 0);
     1744                IEM_MC_BEGIN(0, 2, IEM_MC_F_NOT_286_OR_OLDER);
    17451745                IEM_MC_LOCAL(uint16_t,  uSrc);
    17461746                IEM_MC_LOCAL(RTGCPTR,   GCPtrEffSrc);
     
    18161816         * Register, register.
    18171817         */
    1818         IEM_MC_BEGIN(2, 0, 0);
     1818        IEM_MC_BEGIN(2, 0, IEM_MC_F_NOT_286_OR_OLDER);
    18191819        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    18201820        IEM_MC_ARG(uint32_t *,          puDst, 0);
     
    18321832         * Register, memory.
    18331833         */
    1834         IEM_MC_BEGIN(2, 1, 0);
     1834        IEM_MC_BEGIN(2, 1, IEM_MC_F_NOT_286_OR_OLDER);
    18351835        IEM_MC_ARG(uint32_t *,          puDst, 0);
    18361836        IEM_MC_ARG(uint8_t,             uSrc,  1);
     
    18671867        {
    18681868            case IEMMODE_16BIT:
    1869                 IEM_MC_BEGIN(0, 2, 0);
     1869                IEM_MC_BEGIN(0, 2, IEM_MC_F_NOT_286_OR_OLDER);
    18701870                IEM_MC_LOCAL(uint16_t, u16Value);
    18711871                IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst);
     
    19351935        {
    19361936            case IEMMODE_16BIT:
    1937                 IEM_MC_BEGIN(2, 0, 0);
     1937                IEM_MC_BEGIN(2, 0, IEM_MC_F_NOT_286_OR_OLDER);
    19381938                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    19391939                IEM_MC_ARG(uint32_t *,          puDst, 0);
     
    19871987        {
    19881988            case IEMMODE_16BIT:
    1989                 IEM_MC_BEGIN(2, 1, 0);
     1989                IEM_MC_BEGIN(2, 1, IEM_MC_F_NOT_286_OR_OLDER);
    19901990                IEM_MC_ARG(uint32_t *,          puDst, 0);
    19911991                IEM_MC_ARG(uint16_t,            uSrc,  1);
     
    21162116            if (IEM_IS_MODRM_REG_MODE(bRm)) \
    21172117            { \
    2118                 IEM_MC_BEGIN(3, 0, 0); \
     2118                IEM_MC_BEGIN(3, 0, IEM_MC_F_NOT_286_OR_OLDER); \
    21192119                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \
    21202120                IEM_MC_ARG(uint32_t *,      pu32Dst,                0); \
     
    21312131            else \
    21322132            { \
    2133                 IEM_MC_BEGIN(3, 1, 0); \
     2133                IEM_MC_BEGIN(3, 1, IEM_MC_F_NOT_286_OR_OLDER); \
    21342134                IEM_MC_ARG(uint32_t *,      pu32Dst,                0); \
    21352135                IEM_MC_ARG(uint32_t *,      pEFlags,                1); \
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstThree0f3a.cpp.h

    r100854 r100856  
    5252         */
    5353        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
    54         IEM_MC_BEGIN(3, 0, 0);
     54        IEM_MC_BEGIN(3, 0, IEM_MC_F_NOT_286_OR_OLDER);
    5555        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSsse3);
    5656        IEM_MC_ARG(PRTUINT128U,                 puDst,               0);
     
    7070         * Register, memory.
    7171         */
    72         IEM_MC_BEGIN(3, 2, 0);
     72        IEM_MC_BEGIN(3, 2, IEM_MC_F_NOT_286_OR_OLDER);
    7373        IEM_MC_ARG(PRTUINT128U,                 puDst,               0);
    7474        IEM_MC_LOCAL(RTUINT128U,                uSrc);
     
    111111         */
    112112        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
    113         IEM_MC_BEGIN(3, 0, 0);
     113        IEM_MC_BEGIN(3, 0, IEM_MC_F_NOT_286_OR_OLDER);
    114114        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41);
    115115        IEM_MC_ARG(PRTUINT128U,                 puDst,               0);
     
    129129         * XMM, [mem128], imm8.
    130130         */
    131         IEM_MC_BEGIN(3, 2, 0);
     131        IEM_MC_BEGIN(3, 2, IEM_MC_F_NOT_286_OR_OLDER);
    132132        IEM_MC_ARG(PRTUINT128U,                 puDst,               0);
    133133        IEM_MC_LOCAL(RTUINT128U,                uSrc);
     
    171171         */
    172172        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
    173         IEM_MC_BEGIN(4, 2, 0);
     173        IEM_MC_BEGIN(4, 2, IEM_MC_F_NOT_286_OR_OLDER);
    174174        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41);
    175175        IEM_MC_LOCAL(IEMMEDIAF2XMMSRC,              Src);
     
    196196         * XMM, [mem128], imm8.
    197197         */
    198         IEM_MC_BEGIN(4, 3, 0);
     198        IEM_MC_BEGIN(4, 3, IEM_MC_F_NOT_286_OR_OLDER);
    199199        IEM_MC_LOCAL(IEMMEDIAF2XMMSRC,              Src);
    200200        IEM_MC_LOCAL(X86XMMREG,                     Dst);
     
    243243         */
    244244        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
    245         IEM_MC_BEGIN(3, 0, 0);
     245        IEM_MC_BEGIN(3, 0, IEM_MC_F_NOT_286_OR_OLDER);
    246246        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fAesNi);
    247247        IEM_MC_ARG(PRTUINT128U,                 puDst,               0);
     
    261261         * Register, memory.
    262262         */
    263         IEM_MC_BEGIN(3, 2, 0);
     263        IEM_MC_BEGIN(3, 2, IEM_MC_F_NOT_286_OR_OLDER);
    264264        IEM_MC_ARG(PRTUINT128U,                 puDst,               0);
    265265        IEM_MC_LOCAL(RTUINT128U,                uSrc);
     
    323323         */
    324324        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
    325         IEM_MC_BEGIN(4, 2, 0);
     325        IEM_MC_BEGIN(4, 2, IEM_MC_F_NOT_286_OR_OLDER);
    326326        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41);
    327327        IEM_MC_LOCAL(IEMMEDIAF2XMMSRC,              Src);
     
    348348         * XMM32, [mem32].
    349349         */
    350         IEM_MC_BEGIN(4, 3, 0);
     350        IEM_MC_BEGIN(4, 3, IEM_MC_F_NOT_286_OR_OLDER);
    351351        IEM_MC_LOCAL(IEMMEDIAF2XMMSRC,              Src);
    352352        IEM_MC_LOCAL(X86XMMREG,                     Dst);
     
    388388         */
    389389        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
    390         IEM_MC_BEGIN(4, 2, 0);
     390        IEM_MC_BEGIN(4, 2, IEM_MC_F_NOT_286_OR_OLDER);
    391391        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41);
    392392        IEM_MC_LOCAL(IEMMEDIAF2XMMSRC,              Src);
     
    413413         * XMM64, [mem64], imm8.
    414414         */
    415         IEM_MC_BEGIN(4, 3, 0);
     415        IEM_MC_BEGIN(4, 3, IEM_MC_F_NOT_286_OR_OLDER);
    416416        IEM_MC_LOCAL(IEMMEDIAF2XMMSRC,              Src);
    417417        IEM_MC_LOCAL(X86XMMREG,                     Dst);
     
    481481        /** @todo testcase: REX.B / REX.R and segment register indexing. Ignored? */
    482482        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
    483         IEM_MC_BEGIN(3, 0, 0);
     483        IEM_MC_BEGIN(3, 0, IEM_MC_F_NOT_286_OR_OLDER);
    484484        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSsse3);
    485485        IEM_MC_ARG(uint64_t *,          pDst, 0);
     
    502502         * Register, memory.
    503503         */
    504         IEM_MC_BEGIN(3, 1, 0);
     504        IEM_MC_BEGIN(3, 1, IEM_MC_F_NOT_286_OR_OLDER);
    505505        IEM_MC_ARG(uint64_t *,                  pDst,                0);
    506506        IEM_MC_ARG(uint64_t,                    uSrc,                1);
     
    553553         */
    554554        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
    555         IEM_MC_BEGIN(0, 1, 0);
     555        IEM_MC_BEGIN(0, 1, IEM_MC_F_NOT_286_OR_OLDER);
    556556        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41);
    557557        IEM_MC_LOCAL(uint8_t,   uValue);
     
    568568         * [mem8], XMM.
    569569         */
    570         IEM_MC_BEGIN(0, 2, 0);
     570        IEM_MC_BEGIN(0, 2, IEM_MC_F_NOT_286_OR_OLDER);
    571571        IEM_MC_LOCAL(uint8_t,   uValue);
    572572        IEM_MC_LOCAL(RTGCPTR,   GCPtrEffSrc);
     
    597597         */
    598598        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
    599         IEM_MC_BEGIN(0, 1, 0);
     599        IEM_MC_BEGIN(0, 1, IEM_MC_F_NOT_286_OR_OLDER);
    600600        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41);
    601601        IEM_MC_LOCAL(uint16_t,  uValue);
     
    612612         * [mem16], XMM.
    613613         */
    614         IEM_MC_BEGIN(0, 2, 0);
     614        IEM_MC_BEGIN(0, 2, IEM_MC_F_NOT_286_OR_OLDER);
    615615        IEM_MC_LOCAL(uint16_t,  uValue);
    616616        IEM_MC_LOCAL(RTGCPTR,   GCPtrEffSrc);
     
    695695             */
    696696            uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
    697             IEM_MC_BEGIN(0, 1, 0);
     697            IEM_MC_BEGIN(0, 1, IEM_MC_F_NOT_286_OR_OLDER);
    698698            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41);
    699699            IEM_MC_LOCAL(uint32_t,  uSrc);
     
    710710             * [mem32], XMM.
    711711             */
    712             IEM_MC_BEGIN(0, 2, 0);
     712            IEM_MC_BEGIN(0, 2, IEM_MC_F_NOT_286_OR_OLDER);
    713713            IEM_MC_LOCAL(uint32_t,  uSrc);
    714714            IEM_MC_LOCAL(RTGCPTR,   GCPtrEffSrc);
     
    739739         */
    740740        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
    741         IEM_MC_BEGIN(0, 1, 0);
     741        IEM_MC_BEGIN(0, 1, IEM_MC_F_NOT_286_OR_OLDER);
    742742        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41);
    743743        IEM_MC_LOCAL(uint32_t,  uSrc);
     
    754754         * [mem32], XMM.
    755755         */
    756         IEM_MC_BEGIN(0, 2, 0);
     756        IEM_MC_BEGIN(0, 2, IEM_MC_F_NOT_286_OR_OLDER);
    757757        IEM_MC_LOCAL(uint32_t,  uSrc);
    758758        IEM_MC_LOCAL(RTGCPTR,   GCPtrEffSrc);
     
    792792         */
    793793        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
    794         IEM_MC_BEGIN(0, 1, 0);
     794        IEM_MC_BEGIN(0, 1, IEM_MC_F_NOT_286_OR_OLDER);
    795795        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41);
    796796        IEM_MC_LOCAL(uint8_t,   uSrc);
     
    807807         * XMM, [mem8].
    808808         */
    809         IEM_MC_BEGIN(0, 2, 0);
     809        IEM_MC_BEGIN(0, 2, IEM_MC_F_NOT_286_OR_OLDER);
    810810        IEM_MC_LOCAL(uint8_t,   uSrc);
    811811        IEM_MC_LOCAL(RTGCPTR,   GCPtrEffSrc);
     
    835835         */
    836836        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
    837         IEM_MC_BEGIN(0, 3, 0);
     837        IEM_MC_BEGIN(0, 3, IEM_MC_F_NOT_286_OR_OLDER);
    838838        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41);
    839839        IEM_MC_LOCAL(uint32_t,  uSrc);
     
    859859         * XMM, [mem32].
    860860         */
    861         IEM_MC_BEGIN(0, 3, 0);
     861        IEM_MC_BEGIN(0, 3, IEM_MC_F_NOT_286_OR_OLDER);
    862862        IEM_MC_LOCAL(uint32_t,  uSrc);
    863863        IEM_MC_LOCAL(RTGCPTR,   GCPtrEffSrc);
     
    946946             */
    947947            uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
    948             IEM_MC_BEGIN(0, 1, 0);
     948            IEM_MC_BEGIN(0, 1, IEM_MC_F_NOT_286_OR_OLDER);
    949949            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41);
    950950            IEM_MC_LOCAL(uint32_t,  uSrc);
     
    961961             * XMM, [mem32].
    962962             */
    963             IEM_MC_BEGIN(0, 2, 0);
     963            IEM_MC_BEGIN(0, 2, IEM_MC_F_NOT_286_OR_OLDER);
    964964            IEM_MC_LOCAL(uint32_t,  uSrc);
    965965            IEM_MC_LOCAL(RTGCPTR,   GCPtrEffSrc);
     
    10551055         */
    10561056        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
    1057         IEM_MC_BEGIN(3, 0, 0);
     1057        IEM_MC_BEGIN(3, 0, IEM_MC_F_NOT_286_OR_OLDER);
    10581058        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fPclMul);
    10591059        IEM_MC_ARG(PRTUINT128U,                 puDst,               0);
     
    10761076         * Register, memory.
    10771077         */
    1078         IEM_MC_BEGIN(3, 2, 0);
     1078        IEM_MC_BEGIN(3, 2, IEM_MC_F_NOT_286_OR_OLDER);
    10791079        IEM_MC_ARG(PRTUINT128U,                 puDst,               0);
    10801080        IEM_MC_LOCAL(RTUINT128U,                uSrc);
     
    12111211             */
    12121212            uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
    1213             IEM_MC_BEGIN(4, 1, 0);
     1213            IEM_MC_BEGIN(4, 1, IEM_MC_F_NOT_286_OR_OLDER);
    12141214            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse42);
    12151215            IEM_MC_ARG(PRTUINT128U,                puDst,             0);
     
    12381238             * Register, memory.
    12391239             */
    1240             IEM_MC_BEGIN(4, 3, 0);
     1240            IEM_MC_BEGIN(4, 3, IEM_MC_F_NOT_286_OR_OLDER);
    12411241            IEM_MC_ARG(uint32_t *,                  pu32Ecx,             0);
    12421242            IEM_MC_ARG(uint32_t *,                  pEFlags,             1);
     
    13481348             */
    13491349            uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
    1350             IEM_MC_BEGIN(4, 1, 0);
     1350            IEM_MC_BEGIN(4, 1, IEM_MC_F_NOT_286_OR_OLDER);
    13511351            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse42);
    13521352            IEM_MC_ARG(uint32_t *,                 pu32Ecx,             0);
     
    13761376             * Register, memory.
    13771377             */
    1378             IEM_MC_BEGIN(4, 3, 0);
     1378            IEM_MC_BEGIN(4, 3, IEM_MC_F_NOT_286_OR_OLDER);
    13791379            IEM_MC_ARG(uint32_t *,                  pu32Ecx,             0);
    13801380            IEM_MC_ARG(uint32_t *,                  pEFlags,             1);
     
    14201420         */
    14211421        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
    1422         IEM_MC_BEGIN(4, 1, 0);
     1422        IEM_MC_BEGIN(4, 1, IEM_MC_F_NOT_286_OR_OLDER);
    14231423        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse42);
    14241424        IEM_MC_ARG(PRTUINT128U,                puDst,             0);
     
    14451445         * Register, memory.
    14461446         */
    1447         IEM_MC_BEGIN(4, 3, 0);
     1447        IEM_MC_BEGIN(4, 3, IEM_MC_F_NOT_286_OR_OLDER);
    14481448        IEM_MC_ARG(uint32_t *,                  pu32Ecx,             0);
    14491449        IEM_MC_ARG(uint32_t *,                  pEFlags,             1);
     
    14851485         */
    14861486        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
    1487         IEM_MC_BEGIN(4, 1, 0);
     1487        IEM_MC_BEGIN(4, 1, IEM_MC_F_NOT_286_OR_OLDER);
    14881488        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse42);
    14891489        IEM_MC_ARG(uint32_t *,                 pu32Ecx,             0);
     
    15111511         * Register, memory.
    15121512         */
    1513         IEM_MC_BEGIN(4, 3, 0);
     1513        IEM_MC_BEGIN(4, 3, IEM_MC_F_NOT_286_OR_OLDER);
    15141514        IEM_MC_ARG(uint32_t *,                  pu32Ecx,             0);
    15151515        IEM_MC_ARG(uint32_t *,                  pEFlags,             1);
     
    15821582         */
    15831583        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
    1584         IEM_MC_BEGIN(3, 0, 0);
     1584        IEM_MC_BEGIN(3, 0, IEM_MC_F_NOT_286_OR_OLDER);
    15851585        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSha);
    15861586        IEM_MC_ARG(PRTUINT128U,                 puDst,               0);
     
    16031603         * XMM, [mem128], imm8.
    16041604         */
    1605         IEM_MC_BEGIN(3, 2, 0);
     1605        IEM_MC_BEGIN(3, 2, IEM_MC_F_NOT_286_OR_OLDER);
    16061606        IEM_MC_ARG(PRTUINT128U,                 puDst,               0);
    16071607        IEM_MC_LOCAL(RTUINT128U,                uSrc);
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstTwoByte0f.cpp.h

    r100854 r100856  
    5050        /** @todo testcase: REX.B / REX.R and MMX register indexing. Ignored? */
    5151        /** @todo testcase: REX.B / REX.R and segment register indexing. Ignored? */
    52         IEM_MC_BEGIN(2, 0, 0);
     52        IEM_MC_BEGIN(2, 0, IEM_MC_F_NOT_286_OR_OLDER);
    5353        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fMmx);
    5454        IEM_MC_ARG(uint64_t *,          pDst, 0);
     
    7171         * MMX, [mem64].
    7272         */
    73         IEM_MC_BEGIN(2, 2, 0);
     73        IEM_MC_BEGIN(2, 2, IEM_MC_F_NOT_286_OR_OLDER);
    7474        IEM_MC_ARG(uint64_t *,                  pDst,       0);
    7575        IEM_MC_LOCAL(uint64_t,                  uSrc);
     
    112112        /** @todo testcase: REX.B / REX.R and MMX register indexing. Ignored? */
    113113        /** @todo testcase: REX.B / REX.R and segment register indexing. Ignored? */
    114         IEM_MC_BEGIN(2, 0, 0);
     114        IEM_MC_BEGIN(2, 0, IEM_MC_F_NOT_286_OR_OLDER);
    115115        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fMmx);
    116116        IEM_MC_ARG(uint64_t *,          pDst, 0);
     
    133133         * MMX, [mem64].
    134134         */
    135         IEM_MC_BEGIN(2, 2, 0);
     135        IEM_MC_BEGIN(2, 2, IEM_MC_F_NOT_286_OR_OLDER);
    136136        IEM_MC_ARG(uint64_t *,                  pDst,       0);
    137137        IEM_MC_LOCAL(uint64_t,                  uSrc);
     
    172172        /** @todo testcase: REX.B / REX.R and MMX register indexing. Ignored? */
    173173        /** @todo testcase: REX.B / REX.R and segment register indexing. Ignored? */
    174         IEM_MC_BEGIN(2, 0, 0);
     174        IEM_MC_BEGIN(2, 0, IEM_MC_F_NOT_286_OR_OLDER);
    175175        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX_2_OR(fSse, fAmdMmxExts);
    176176        IEM_MC_ARG(uint64_t *,          pDst, 0);
     
    193193         * MMX, [mem64].
    194194         */
    195         IEM_MC_BEGIN(2, 2, 0);
     195        IEM_MC_BEGIN(2, 2, IEM_MC_F_NOT_286_OR_OLDER);
    196196        IEM_MC_ARG(uint64_t *,                  pDst,       0);
    197197        IEM_MC_LOCAL(uint64_t,                  uSrc);
     
    235235        /** @todo testcase: REX.B / REX.R and MMX register indexing. Ignored? */
    236236        /** @todo testcase: REX.B / REX.R and segment register indexing. Ignored? */
    237         IEM_MC_BEGIN(2, 0, 0);
     237        IEM_MC_BEGIN(2, 0, IEM_MC_F_NOT_286_OR_OLDER);
    238238        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX_2_OR(fSse, fAmdMmxExts);
    239239        IEM_MC_ARG(uint64_t *,          pDst, 0);
     
    256256         * MMX, [mem64].
    257257         */
    258         IEM_MC_BEGIN(2, 2, 0);
     258        IEM_MC_BEGIN(2, 2, IEM_MC_F_NOT_286_OR_OLDER);
    259259        IEM_MC_ARG(uint64_t *,                  pDst,       0);
    260260        IEM_MC_LOCAL(uint64_t,                  uSrc);
     
    295295        /** @todo testcase: REX.B / REX.R and MMX register indexing. Ignored? */
    296296        /** @todo testcase: REX.B / REX.R and segment register indexing. Ignored? */
    297         IEM_MC_BEGIN(2, 0, 0);
     297        IEM_MC_BEGIN(2, 0, IEM_MC_F_NOT_286_OR_OLDER);
    298298        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2);
    299299        IEM_MC_ARG(uint64_t *,          pDst, 0);
     
    316316         * MMX, [mem64].
    317317         */
    318         IEM_MC_BEGIN(2, 2, 0);
     318        IEM_MC_BEGIN(2, 2, IEM_MC_F_NOT_286_OR_OLDER);
    319319        IEM_MC_ARG(uint64_t *,                  pDst,       0);
    320320        IEM_MC_LOCAL(uint64_t,                  uSrc);
     
    357357         * XMM, XMM.
    358358         */
    359         IEM_MC_BEGIN(2, 0, 0);
     359        IEM_MC_BEGIN(2, 0, IEM_MC_F_NOT_286_OR_OLDER);
    360360        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse);
    361361        IEM_MC_ARG(PRTUINT128U,          pDst, 0);
     
    374374         * XMM, [mem128].
    375375         */
    376         IEM_MC_BEGIN(2, 2, 0);
     376        IEM_MC_BEGIN(2, 2, IEM_MC_F_NOT_286_OR_OLDER);
    377377        IEM_MC_ARG(PRTUINT128U,                 pDst,       0);
    378378        IEM_MC_LOCAL(RTUINT128U,                uSrc);
     
    412412         * XMM, XMM.
    413413         */
    414         IEM_MC_BEGIN(2, 0, 0);
     414        IEM_MC_BEGIN(2, 0, IEM_MC_F_NOT_286_OR_OLDER);
    415415        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2);
    416416        IEM_MC_ARG(PRTUINT128U,          pDst, 0);
     
    429429         * XMM, [mem128].
    430430         */
    431         IEM_MC_BEGIN(2, 2, 0);
     431        IEM_MC_BEGIN(2, 2, IEM_MC_F_NOT_286_OR_OLDER);
    432432        IEM_MC_ARG(PRTUINT128U,                 pDst,       0);
    433433        IEM_MC_LOCAL(RTUINT128U,                uSrc);
     
    470470         * XMM, XMM.
    471471         */
    472         IEM_MC_BEGIN(2, 0, 0);
     472        IEM_MC_BEGIN(2, 0, IEM_MC_F_NOT_286_OR_OLDER);
    473473        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2);
    474474        IEM_MC_ARG(PRTUINT128U,          pDst, 0);
     
    487487         * XMM, [mem128].
    488488         */
    489         IEM_MC_BEGIN(2, 2, 0);
     489        IEM_MC_BEGIN(2, 2, IEM_MC_F_NOT_286_OR_OLDER);
    490490        IEM_MC_ARG(PRTUINT128U,                 pDst,       0);
    491491        IEM_MC_LOCAL(RTUINT128U,                uSrc);
     
    523523         * MMX, MMX.
    524524         */
    525         IEM_MC_BEGIN(2, 0, 0);
     525        IEM_MC_BEGIN(2, 0, IEM_MC_F_NOT_286_OR_OLDER);
    526526        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fMmx);
    527527        IEM_MC_ARG(uint64_t *,              puDst, 0);
     
    544544         * MMX, [mem32].
    545545         */
    546         IEM_MC_BEGIN(2, 2, 0);
     546        IEM_MC_BEGIN(2, 2, IEM_MC_F_NOT_286_OR_OLDER);
    547547        IEM_MC_ARG(uint64_t *,                  puDst,       0);
    548548        IEM_MC_LOCAL(uint64_t,                  uSrc);
     
    585585         * XMM, XMM.
    586586         */
    587         IEM_MC_BEGIN(2, 0, 0);
     587        IEM_MC_BEGIN(2, 0, IEM_MC_F_NOT_286_OR_OLDER);
    588588        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse);
    589589        IEM_MC_ARG(PRTUINT128U,             puDst, 0);
     
    602602         * XMM, [mem128].
    603603         */
    604         IEM_MC_BEGIN(2, 2, 0);
     604        IEM_MC_BEGIN(2, 2, IEM_MC_F_NOT_286_OR_OLDER);
    605605        IEM_MC_ARG(PRTUINT128U,             puDst,       0);
    606606        IEM_MC_LOCAL(RTUINT128U,            uSrc);
     
    645645         * XMM, XMM.
    646646         */
    647         IEM_MC_BEGIN(2, 0, 0);
     647        IEM_MC_BEGIN(2, 0, IEM_MC_F_NOT_286_OR_OLDER);
    648648        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2);
    649649        IEM_MC_ARG(PRTUINT128U,             puDst, 0);
     
    662662         * XMM, [mem128].
    663663         */
    664         IEM_MC_BEGIN(2, 2, 0);
     664        IEM_MC_BEGIN(2, 2, IEM_MC_F_NOT_286_OR_OLDER);
    665665        IEM_MC_ARG(PRTUINT128U,             puDst,       0);
    666666        IEM_MC_LOCAL(RTUINT128U,            uSrc);
     
    705705        /** @todo testcase: REX.B / REX.R and MMX register indexing. Ignored? */
    706706        /** @todo testcase: REX.B / REX.R and segment register indexing. Ignored? */
    707         IEM_MC_BEGIN(2, 0, 0);
     707        IEM_MC_BEGIN(2, 0, IEM_MC_F_NOT_286_OR_OLDER);
    708708        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fMmx);
    709709        IEM_MC_ARG(uint64_t *,              puDst, 0);
     
    726726         * MMX, [mem64].
    727727         */
    728         IEM_MC_BEGIN(2, 2, 0);
     728        IEM_MC_BEGIN(2, 2, IEM_MC_F_NOT_286_OR_OLDER);
    729729        IEM_MC_ARG(uint64_t *,                  puDst,       0);
    730730        IEM_MC_LOCAL(uint64_t,                  uSrc);
     
    767767         * XMM, XMM.
    768768         */
    769         IEM_MC_BEGIN(2, 0, 0);
     769        IEM_MC_BEGIN(2, 0, IEM_MC_F_NOT_286_OR_OLDER);
    770770        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse);
    771771        IEM_MC_ARG(PRTUINT128U,             puDst, 0);
     
    784784         * XMM, [mem128].
    785785         */
    786         IEM_MC_BEGIN(2, 2, 0);
     786        IEM_MC_BEGIN(2, 2, IEM_MC_F_NOT_286_OR_OLDER);
    787787        IEM_MC_ARG(PRTUINT128U,                 puDst,       0);
    788788        IEM_MC_LOCAL(RTUINT128U,                uSrc);
     
    827827         * XMM128, XMM128.
    828828         */
    829         IEM_MC_BEGIN(3, 1, 0);
     829        IEM_MC_BEGIN(3, 1, IEM_MC_F_NOT_286_OR_OLDER);
    830830        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse);
    831831        IEM_MC_LOCAL(IEMSSERESULT,          SseRes);
     
    849849         * XMM128, [mem128].
    850850         */
    851         IEM_MC_BEGIN(3, 2, 0);
     851        IEM_MC_BEGIN(3, 2, IEM_MC_F_NOT_286_OR_OLDER);
    852852        IEM_MC_LOCAL(IEMSSERESULT,          SseRes);
    853853        IEM_MC_LOCAL(X86XMMREG,             uSrc2);
     
    891891         * XMM128, XMM32.
    892892         */
    893         IEM_MC_BEGIN(3, 1, 0);
     893        IEM_MC_BEGIN(3, 1, IEM_MC_F_NOT_286_OR_OLDER);
    894894        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse);
    895895        IEM_MC_LOCAL(IEMSSERESULT,          SseRes);
     
    913913         * XMM128, [mem32].
    914914         */
    915         IEM_MC_BEGIN(3, 2, 0);
     915        IEM_MC_BEGIN(3, 2, IEM_MC_F_NOT_286_OR_OLDER);
    916916        IEM_MC_LOCAL(IEMSSERESULT,          SseRes);
    917917        IEM_MC_LOCAL(RTFLOAT32U,            r32Src2);
     
    955955         * XMM128, XMM128.
    956956         */
    957         IEM_MC_BEGIN(3, 1, 0);
     957        IEM_MC_BEGIN(3, 1, IEM_MC_F_NOT_286_OR_OLDER);
    958958        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2);
    959959        IEM_MC_LOCAL(IEMSSERESULT,          SseRes);
     
    977977         * XMM128, [mem128].
    978978         */
    979         IEM_MC_BEGIN(3, 2, 0);
     979        IEM_MC_BEGIN(3, 2, IEM_MC_F_NOT_286_OR_OLDER);
    980980        IEM_MC_LOCAL(IEMSSERESULT,          SseRes);
    981981        IEM_MC_LOCAL(X86XMMREG,             uSrc2);
     
    10191019         * XMM, XMM.
    10201020         */
    1021         IEM_MC_BEGIN(3, 1, 0);
     1021        IEM_MC_BEGIN(3, 1, IEM_MC_F_NOT_286_OR_OLDER);
    10221022        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2);
    10231023        IEM_MC_LOCAL(IEMSSERESULT,          SseRes);
     
    10411041         * XMM, [mem64].
    10421042         */
    1043         IEM_MC_BEGIN(3, 2, 0);
     1043        IEM_MC_BEGIN(3, 2, IEM_MC_F_NOT_286_OR_OLDER);
    10441044        IEM_MC_LOCAL(IEMSSERESULT,          SseRes);
    10451045        IEM_MC_LOCAL(RTFLOAT64U,            r64Src2);
     
    10831083         * XMM, XMM.
    10841084         */
    1085         IEM_MC_BEGIN(2, 0, 0);
     1085        IEM_MC_BEGIN(2, 0, IEM_MC_F_NOT_286_OR_OLDER);
    10861086        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2);
    10871087        IEM_MC_ARG(PRTUINT128U,             puDst, 0);
     
    11001100         * XMM, [mem128].
    11011101         */
    1102         IEM_MC_BEGIN(2, 2, 0);
     1102        IEM_MC_BEGIN(2, 2, IEM_MC_F_NOT_286_OR_OLDER);
    11031103        IEM_MC_ARG(PRTUINT128U,                 puDst,       0);
    11041104        IEM_MC_LOCAL(RTUINT128U,                uSrc);
     
    11431143         * XMM, XMM.
    11441144         */
    1145         IEM_MC_BEGIN(3, 1, 0);
     1145        IEM_MC_BEGIN(3, 1, IEM_MC_F_NOT_286_OR_OLDER);
    11461146        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse3);
    11471147        IEM_MC_LOCAL(IEMSSERESULT,          SseRes);
     
    11651165         * XMM, [mem128].
    11661166         */
    1167         IEM_MC_BEGIN(3, 2, 0);
     1167        IEM_MC_BEGIN(3, 2, IEM_MC_F_NOT_286_OR_OLDER);
    11681168        IEM_MC_LOCAL(IEMSSERESULT,          SseRes);
    11691169        IEM_MC_LOCAL(X86XMMREG,             uSrc2);
     
    12041204
    12051205    /* Ignore operand size here, memory refs are always 16-bit. */
    1206     IEM_MC_BEGIN(2, 0, 0);
     1206    IEM_MC_BEGIN(2, 0, IEM_MC_F_MIN_286);
    12071207    IEM_MC_ARG(uint16_t, iEffSeg,               0);
    12081208    IEM_MC_ARG(RTGCPTR,  GCPtrEffDst,           1);
     
    12301230
    12311231    /* Ignore operand size here, memory refs are always 16-bit. */
    1232     IEM_MC_BEGIN(2, 0, 0);
     1232    IEM_MC_BEGIN(2, 0, IEM_MC_F_MIN_286);
    12331233    IEM_MC_ARG(uint16_t, iEffSeg,               0);
    12341234    IEM_MC_ARG(RTGCPTR,  GCPtrEffDst,           1);
     
    12501250    if (IEM_IS_MODRM_REG_MODE(bRm))
    12511251    {
    1252         IEM_MC_BEGIN(1, 0, 0);
     1252        IEM_MC_BEGIN(1, 0, IEM_MC_F_MIN_286);
    12531253        IEMOP_HLP_DECODED_NL_1(OP_LLDT, IEMOPFORM_M_REG, OP_PARM_Ew, DISOPTYPE_DANGEROUS);
    12541254        IEM_MC_ARG(uint16_t, u16Sel, 0);
     
    12591259    else
    12601260    {
    1261         IEM_MC_BEGIN(1, 1, 0);
     1261        IEM_MC_BEGIN(1, 1, IEM_MC_F_MIN_286);
    12621262        IEM_MC_ARG(uint16_t, u16Sel, 0);
    12631263        IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc);
     
    12811281    if (IEM_IS_MODRM_REG_MODE(bRm))
    12821282    {
    1283         IEM_MC_BEGIN(1, 0, 0);
     1283        IEM_MC_BEGIN(1, 0, IEM_MC_F_MIN_286);
    12841284        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    12851285        IEM_MC_ARG(uint16_t, u16Sel, 0);
     
    12901290    else
    12911291    {
    1292         IEM_MC_BEGIN(1, 1, 0);
     1292        IEM_MC_BEGIN(1, 1, IEM_MC_F_MIN_286);
    12931293        IEM_MC_ARG(uint16_t, u16Sel, 0);
    12941294        IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc);
     
    13111311    if (IEM_IS_MODRM_REG_MODE(bRm))
    13121312    {
    1313         IEM_MC_BEGIN(2, 0, 0);
     1313        IEM_MC_BEGIN(2, 0, IEM_MC_F_MIN_286);
    13141314        IEMOP_HLP_DECODED_NL_1(fWrite ? OP_VERW : OP_VERR, IEMOPFORM_M_MEM, OP_PARM_Ew, DISOPTYPE_DANGEROUS | DISOPTYPE_PRIVILEGED_NOTRAP);
    13151315        IEM_MC_ARG(uint16_t,    u16Sel,            0);
     
    13211321    else
    13221322    {
    1323         IEM_MC_BEGIN(2, 1, 0);
     1323        IEM_MC_BEGIN(2, 1, IEM_MC_F_MIN_286);
    13241324        IEM_MC_ARG(uint16_t,    u16Sel,            0);
    13251325        IEM_MC_ARG_CONST(bool,  fWriteArg, fWrite, 1);
     
    13381338{
    13391339    IEMOP_MNEMONIC(verr, "verr Ew");
    1340     IEMOP_HLP_MIN_286();
    13411340    return FNIEMOP_CALL_2(iemOpCommonGrp6VerX, bRm, false);
    13421341}
     
    13471346{
    13481347    IEMOP_MNEMONIC(verw, "verw Ew");
    1349     IEMOP_HLP_MIN_286();
    13501348    return FNIEMOP_CALL_2(iemOpCommonGrp6VerX, bRm, true);
    13511349}
     
    13811379    IEMOP_HLP_MIN_286();
    13821380    IEMOP_HLP_64BIT_OP_SIZE();
    1383     IEM_MC_BEGIN(2, 1, 0);
     1381    IEM_MC_BEGIN(2, 1, IEM_MC_F_MIN_286);
    13841382    IEM_MC_ARG(uint8_t,         iEffSeg,                                    0);
    13851383    IEM_MC_ARG(RTGCPTR,         GCPtrEffSrc,                                1);
     
    14731471    IEMOP_HLP_MIN_286();
    14741472    IEMOP_HLP_64BIT_OP_SIZE();
    1475     IEM_MC_BEGIN(2, 1, 0);
     1473    IEM_MC_BEGIN(2, 1, IEM_MC_F_MIN_286);
    14761474    IEM_MC_ARG(uint8_t,         iEffSeg,                                    0);
    14771475    IEM_MC_ARG(RTGCPTR,         GCPtrEffSrc,                                1);
     
    16921690
    16931691    /* Ignore operand size here, memory refs are always 16-bit. */
    1694     IEM_MC_BEGIN(2, 0, 0);
     1692    IEM_MC_BEGIN(2, 0, IEM_MC_F_MIN_286);
    16951693    IEM_MC_ARG(uint16_t, iEffSeg,               0);
    16961694    IEM_MC_ARG(RTGCPTR,  GCPtrEffDst,           1);
     
    17121710    if (IEM_IS_MODRM_REG_MODE(bRm))
    17131711    {
    1714         IEM_MC_BEGIN(2, 0, 0);
     1712        IEM_MC_BEGIN(2, 0, IEM_MC_F_MIN_286);
    17151713        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    17161714        IEM_MC_ARG(uint16_t, u16Tmp,                         0);
     
    17221720    else
    17231721    {
    1724         IEM_MC_BEGIN(2, 0, 0);
     1722        IEM_MC_BEGIN(2, 0, IEM_MC_F_MIN_286);
    17251723        IEM_MC_ARG(uint16_t, u16Tmp,      0);
    17261724        IEM_MC_ARG(RTGCPTR,  GCPtrEffDst, 1);
     
    1019110189    IEMOP_VERIFICATION_UNDEFINED_EFLAGS(X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF);
    1019210190    const IEMOPBINSIZES * const pImpl = IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_imul_two_eflags);
    10193     IEMOP_BODY_BINARY_rv_rm(pImpl->pfnNormalU16, pImpl->pfnNormalU32, pImpl->pfnNormalU64, 1);
     10191    IEMOP_BODY_BINARY_rv_rm(pImpl->pfnNormalU16, pImpl->pfnNormalU32, pImpl->pfnNormalU64, 1, IEM_MC_F_MIN_386);
    1019410192}
    1019510193
     
    1069410692#endif
    1069510693    const IEMOPBINSIZES * const pImpl = IEM_SELECT_HOST_OR_FALLBACK(fPopCnt, &s_Native, &s_Fallback);
    10696     IEMOP_BODY_BINARY_rv_rm(pImpl->pfnNormalU16, pImpl->pfnNormalU32, pImpl->pfnNormalU64, 1);
     10694    IEMOP_BODY_BINARY_rv_rm(pImpl->pfnNormalU16, pImpl->pfnNormalU32, pImpl->pfnNormalU64, 1, IEM_MC_F_NOT_286_OR_OLDER);
    1069710695}
    1069810696
     
    1132011318    const IEMOPBINSIZES * const pImpl = IEMTARGETCPU_EFL_BEHAVIOR_SELECT_EX(s_iemAImpl_tzcnt_eflags,
    1132111319                                                                            IEM_GET_HOST_CPU_FEATURES(pVCpu)->fBmi1);
    11322     IEMOP_BODY_BINARY_rv_rm(pImpl->pfnNormalU16, pImpl->pfnNormalU32, pImpl->pfnNormalU64, 1);
     11320    IEMOP_BODY_BINARY_rv_rm(pImpl->pfnNormalU16, pImpl->pfnNormalU32, pImpl->pfnNormalU64, 1, IEM_MC_F_NOT_286_OR_OLDER);
    1132311321}
    1132411322
     
    1135711355    const IEMOPBINSIZES * const pImpl = IEMTARGETCPU_EFL_BEHAVIOR_SELECT_EX(s_iemAImpl_lzcnt_eflags,
    1135811356                                                                            IEM_GET_HOST_CPU_FEATURES(pVCpu)->fBmi1);
    11359     IEMOP_BODY_BINARY_rv_rm(pImpl->pfnNormalU16, pImpl->pfnNormalU32, pImpl->pfnNormalU64, 1);
     11357    IEMOP_BODY_BINARY_rv_rm(pImpl->pfnNormalU16, pImpl->pfnNormalU32, pImpl->pfnNormalU64, 1, IEM_MC_F_NOT_286_OR_OLDER);
    1136011358}
    1136111359
  • trunk/src/VBox/VMM/VMMAll/IEMAllThrdPython.py

    r100854 r100856  
    130130    ## @name Variations.
    131131    ## These variations will match translation block selection/distinctions as well.
    132     ## @note Effective operand size is generally handled in the decoder, at present
    133     ##       we only do variations on addressing and memory accessing.
    134     ## @todo Blocks without addressing should have 64-bit and 32-bit PC update
    135     ##       variations to reduce code size (see iemRegAddToRip).
    136132    ## @{
    137133    ksVariation_Default     = '';               ##< No variations - only used by IEM_MC_DEFER_TO_CIMPL_X_RET.
     
    163159        ksVariation_64,
    164160    );
     161    kasVariationsWithoutAddressNot286 = (
     162        ksVariation_16,
     163        ksVariation_32,
     164        ksVariation_64,
     165    );
     166    kasVariationsWithoutAddressNot286Not64 = (
     167        ksVariation_16,
     168        ksVariation_32,
     169    );
     170    kasVariationsWithoutAddressNot64 = (
     171        ksVariation_16,
     172        ksVariation_16_Pre386,
     173        ksVariation_32,
     174    );
     175    kasVariationsWithoutAddressOnly64 = (
     176        ksVariation_64,
     177    );
    165178    kasVariationsWithAddress = (
    166179        ksVariation_16,
     
    170183        ksVariation_32_Flat,
    171184        ksVariation_32_Addr16,
     185        ksVariation_64,
     186        ksVariation_64_FsGs,
     187        ksVariation_64_Addr32,
     188    );
     189    kasVariationsWithAddressNot286 = (
     190        ksVariation_16,
     191        ksVariation_16_Addr32,
     192        ksVariation_32,
     193        ksVariation_32_Flat,
     194        ksVariation_32_Addr16,
     195        ksVariation_64,
     196        ksVariation_64_FsGs,
     197        ksVariation_64_Addr32,
     198    );
     199    kasVariationsWithAddressNot286Not64 = (
     200        ksVariation_16,
     201        ksVariation_16_Addr32,
     202        ksVariation_32,
     203        ksVariation_32_Flat,
     204        ksVariation_32_Addr16,
     205    );
     206    kasVariationsWithAddressNot64 = (
     207        ksVariation_16,
     208        ksVariation_16_Addr32,
     209        ksVariation_16_Pre386,
     210        ksVariation_32,
     211        ksVariation_32_Flat,
     212        ksVariation_32_Addr16,
     213    );
     214    kasVariationsWithAddressOnly64 = (
    172215        ksVariation_64,
    173216        ksVariation_64_FsGs,
     
    11391182        self.analyzeFindVariablesAndCallArgs(aoStmts);
    11401183
    1141         # Create variations if needed.
     1184        # Create variations as needed.
    11421185        if iai.McStmt.findStmtByNames(aoStmts,
    11431186                                      { 'IEM_MC_DEFER_TO_CIMPL_0_RET': True,
     
    11451188                                        'IEM_MC_DEFER_TO_CIMPL_2_RET': True,
    11461189                                        'IEM_MC_DEFER_TO_CIMPL_3_RET': True, }):
    1147             self.aoVariations = [ThreadedFunctionVariation(self, ThreadedFunctionVariation.ksVariation_Default),];
     1190            asVariations = [ThreadedFunctionVariation.ksVariation_Default,];
    11481191
    11491192        elif iai.McStmt.findStmtByNames(aoStmts, {'IEM_MC_CALC_RM_EFF_ADDR' : True,}):
    1150             self.aoVariations = [ThreadedFunctionVariation(self, sVar)
    1151                                  for sVar in ThreadedFunctionVariation.kasVariationsWithAddress];
     1193            if 'IEM_MC_F_64BIT' in self.oMcBlock.dMcFlags:
     1194                asVariations = ThreadedFunctionVariation.kasVariationsWithAddressOnly64;
     1195            elif 'IEM_MC_F_NOT_64BIT' in self.oMcBlock.dMcFlags and 'IEM_MC_F_NOT_286_OR_OLDER' in self.oMcBlock.dMcFlags:
     1196                asVariations = ThreadedFunctionVariation.kasVariationsWithAddressNot286Not64;
     1197            elif 'IEM_MC_F_NOT_286_OR_OLDER' in self.oMcBlock.dMcFlags:
     1198                asVariations = ThreadedFunctionVariation.kasVariationsWithAddressNot286;
     1199            elif 'IEM_MC_F_NOT_64BIT' in self.oMcBlock.dMcFlags:
     1200                asVariations = ThreadedFunctionVariation.kasVariationsWithAddressNot64;
     1201            elif 'IEM_MC_F_ONLY_8086' in self.oMcBlock.dMcFlags:
     1202                asVariations = [ThreadedFunctionVariation.ksVariation_16_Pre386,];
     1203            else:
     1204                asVariations = ThreadedFunctionVariation.kasVariationsWithAddress;
    11521205        else:
    1153             self.aoVariations = [ThreadedFunctionVariation(self, sVar)
    1154                                  for sVar in ThreadedFunctionVariation.kasVariationsWithoutAddress];
     1206            if 'IEM_MC_F_64BIT' in self.oMcBlock.dMcFlags:
     1207                asVariations = ThreadedFunctionVariation.kasVariationsWithoutAddressOnly64;
     1208            elif 'IEM_MC_F_NOT_64BIT' in self.oMcBlock.dMcFlags and 'IEM_MC_F_NOT_286_OR_OLDER' in self.oMcBlock.dMcFlags:
     1209                asVariations = ThreadedFunctionVariation.kasVariationsWithoutAddressNot286Not64;
     1210            elif 'IEM_MC_F_NOT_286_OR_OLDER' in self.oMcBlock.dMcFlags:
     1211                asVariations = ThreadedFunctionVariation.kasVariationsWithoutAddressNot286;
     1212            elif 'IEM_MC_F_NOT_64BIT' in self.oMcBlock.dMcFlags:
     1213                asVariations = ThreadedFunctionVariation.kasVariationsWithoutAddressNot64;
     1214            elif 'IEM_MC_F_ONLY_8086' in self.oMcBlock.dMcFlags:
     1215                asVariations = [ThreadedFunctionVariation.ksVariation_16_Pre386,];
     1216            else:
     1217                asVariations = ThreadedFunctionVariation.kasVariationsWithoutAddress;
     1218
     1219        self.aoVariations = [ThreadedFunctionVariation(self, sVar) for sVar in asVariations];
    11551220
    11561221        # Dictionary variant of the list.
     
    11691234        """
    11701235        # Special case for only default variation:
    1171         if len(self.aoVariations) == 1:
    1172             assert  self.aoVariations[0].sVariation == ThreadedFunctionVariation.ksVariation_Default;
     1236        if len(self.aoVariations) == 1  and  self.aoVariations[0].sVariation == ThreadedFunctionVariation.ksVariation_Default:
    11731237            return self.aoVariations[0].emitThreadedCallStmts(0);
    11741238
     
    12371301        #
    12381302        fSimple = True;
    1239         sSwitchValue = 'pVCpu->iem.s.fExec & IEM_F_MODE_CPUMODE_MASK';
     1303        sSwitchValue  = '(pVCpu->iem.s.fExec & (IEM_F_MODE_CPUMODE_MASK | IEM_F_MODE_X86_FLAT_OR_PRE_386_MASK))';
    12401304        if (   ThrdFnVar.ksVariation_64_Addr32 in dByVari
    12411305            or ThrdFnVar.ksVariation_64_FsGs   in dByVari
     
    12431307            or ThrdFnVar.ksVariation_32_Flat   in dByVari
    12441308            or ThrdFnVar.ksVariation_16_Addr32 in dByVari):
    1245             sSwitchValue  = '(pVCpu->iem.s.fExec & (IEM_F_MODE_CPUMODE_MASK | IEM_F_MODE_X86_FLAT_OR_PRE_386_MASK))';
    12461309            sSwitchValue += ' | (pVCpu->iem.s.enmEffAddrMode == (pVCpu->iem.s.fExec & IEM_F_MODE_CPUMODE_MASK) ? 0 : 8)';
    12471310            # Accesses via FS and GS and CS goes thru non-FLAT functions. (CS
     
    12821345        elif ThrdFnVar.ksVariation_32 in dByVari:
    12831346            assert fSimple;
    1284             aoCases.append(Case('IEMMODE_32BIT', ThrdFnVar.ksVariation_32));
     1347            aoCases.extend([
     1348                Case('IEMMODE_32BIT | IEM_F_MODE_X86_FLAT_OR_PRE_386_MASK', None), # fall thru
     1349                Case('IEMMODE_32BIT',                                       ThrdFnVar.ksVariation_32),
     1350            ]);
    12851351
    12861352        if ThrdFnVar.ksVariation_16_Addr32 in dByVari:
     
    13031369        # we can reduce the code size and hopefully compile time.
    13041370        #
    1305         assert aoCases[0].aoBody;
     1371        iFirstCaseWithBody = 0;
     1372        while not aoCases[iFirstCaseWithBody].aoBody:
     1373            iFirstCaseWithBody += 1
    13061374        fAllSameCases = True
    1307         for iCase in range(1, len(aoCases)):
    1308             fAllSameCases = fAllSameCases and aoCases[iCase].isSame(aoCases[0]);
     1375        for iCase in range(iFirstCaseWithBody + 1, len(aoCases)):
     1376            fAllSameCases = fAllSameCases and aoCases[iCase].isSame(aoCases[iFirstCaseWithBody]);
    13091377        #if fDbg: print('fAllSameCases=%s %s' % (fAllSameCases, self.oMcBlock.sFunction,));
    13101378        if fAllSameCases:
     
    13201388                iai.McCppGeneric('}'),
    13211389            ]);
    1322             aoStmts.extend(dByVari[aoCases[0].sVarNm].emitThreadedCallStmts(0, 'enmFunction'));
     1390            aoStmts.extend(dByVari[aoCases[iFirstCaseWithBody].sVarNm].emitThreadedCallStmts(0, 'enmFunction'));
    13231391
    13241392        else:
  • trunk/src/VBox/VMM/include/IEMInternal.h

    r100854 r100856  
    544544 * @{ */
    545545#define IEM_MC_F_ONLY_8086          RT_BIT_32(0)
     546#define IEM_MC_F_MIN_186            RT_BIT_32(1)
     547#define IEM_MC_F_MIN_286            RT_BIT_32(2)
    546548#define IEM_MC_F_NOT_286_OR_OLDER   IEM_MC_F_MIN_386
    547549#define IEM_MC_F_MIN_386            RT_BIT_32(3)
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