Changeset 100856 in vbox
- Timestamp:
- Aug 11, 2023 9:47:22 AM (16 months ago)
- Location:
- trunk/src/VBox/VMM
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllInstCommonBodyMacros.h
r100854 r100856 39 39 * @note Used both in OneByte and TwoByte0f. 40 40 */ 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) \ 42 42 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); \ 43 43 \ … … 50 50 { \ 51 51 case IEMMODE_16BIT: \ 52 IEM_MC_BEGIN(3, 0, 0); \52 IEM_MC_BEGIN(3, 0, a_f16BitMcFlag); \ 53 53 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 54 54 IEM_MC_ARG(uint16_t *, pu16Dst, 0); \ … … 110 110 { \ 111 111 case IEMMODE_16BIT: \ 112 IEM_MC_BEGIN(3, 1, 0); \112 IEM_MC_BEGIN(3, 1, a_f16BitMcFlag); \ 113 113 IEM_MC_ARG(uint16_t *, pu16Dst, 0); \ 114 114 IEM_MC_ARG(uint16_t, u16Src, 1); \ -
trunk/src/VBox/VMM/VMMAll/IEMAllInstOneByte.cpp.h
r100854 r100856 781 781 { 782 782 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); 784 784 } 785 785 … … 909 909 IEMOP_MNEMONIC2(RM, OR, or, Gv, Ev, DISOPTYPE_HARMLESS, 0); 910 910 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); 912 912 } 913 913 … … 1069 1069 { 1070 1070 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); 1072 1072 } 1073 1073 … … 1177 1177 { 1178 1178 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); 1180 1180 } 1181 1181 … … 1290 1290 IEMOP_MNEMONIC2(RM, AND, and, Gv, Ev, DISOPTYPE_HARMLESS, 0); 1291 1291 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); 1293 1293 } 1294 1294 … … 1406 1406 { 1407 1407 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); 1409 1409 } 1410 1410 … … 1528 1528 IEMOP_MNEMONIC2(RM, XOR, xor, Gv, Ev, DISOPTYPE_HARMLESS, 0); 1529 1529 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); 1531 1531 } 1532 1532 … … 1668 1668 { 1669 1669 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); 1671 1671 } 1672 1672 … … 2205 2205 2206 2206 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); 2208 2208 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 2209 2209 IEM_MC_LOCAL(uint32_t, u32Value); … … 2605 2605 if (pVCpu->iem.s.enmEffOpSize == IEMMODE_16BIT) 2606 2606 { 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); 2608 2608 IEM_MC_ARG(uint16_t, u16Index, 0); /* Note! All operands are actually signed. Lazy unsigned bird. */ 2609 2609 IEM_MC_ARG(uint16_t, u16LowerBounds, 1); … … 2683 2683 { 2684 2684 /* 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); 2686 2686 IEMOP_HLP_DECODED_NL_2(OP_ARPL, IEMOPFORM_MR_REG, OP_PARM_Ew, OP_PARM_Gw, DISOPTYPE_HARMLESS); 2687 2687 IEM_MC_ARG(uint16_t *, pu16Dst, 0); … … 2700 2700 { 2701 2701 /* 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); 2703 2703 IEM_MC_ARG(uint16_t *, pu16Dst, 0); 2704 2704 IEM_MC_ARG(uint16_t, u16Src, 1); … … 2873 2873 { 2874 2874 case IEMMODE_16BIT: 2875 {2875 IEM_MC_BEGIN(0, 0, IEM_MC_F_MIN_186); 2876 2876 uint16_t u16Imm; IEM_OPCODE_GET_NEXT_U16(&u16Imm); 2877 IEM_MC_BEGIN(0, 0, 0);2878 2877 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 2879 2878 IEM_MC_PUSH_U16(u16Imm); … … 2881 2880 IEM_MC_END(); 2882 2881 break; 2883 }2884 2882 2885 2883 case IEMMODE_32BIT: 2886 {2884 IEM_MC_BEGIN(0, 0, IEM_MC_F_MIN_386); 2887 2885 uint32_t u32Imm; IEM_OPCODE_GET_NEXT_U32(&u32Imm); 2888 IEM_MC_BEGIN(0, 0, IEM_MC_F_MIN_386);2889 2886 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 2890 2887 IEM_MC_PUSH_U32(u32Imm); … … 2892 2889 IEM_MC_END(); 2893 2890 break; 2894 }2895 2891 2896 2892 case IEMMODE_64BIT: 2897 {2893 IEM_MC_BEGIN(0, 0, IEM_MC_F_64BIT); 2898 2894 uint64_t u64Imm; IEM_OPCODE_GET_NEXT_S32_SX_U64(&u64Imm); 2899 IEM_MC_BEGIN(0, 0, IEM_MC_F_64BIT);2900 2895 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 2901 2896 IEM_MC_PUSH_U64(u64Imm); … … 2903 2898 IEM_MC_END(); 2904 2899 break; 2905 }2906 2900 2907 2901 IEM_NOT_REACHED_DEFAULT_CASE_RET(); … … 2929 2923 /* register operand */ 2930 2924 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); 2932 2926 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 2933 2927 IEM_MC_ARG(uint16_t *, pu16Dst, 0); … … 2948 2942 { 2949 2943 /* memory operand */ 2950 IEM_MC_BEGIN(3, 2, 0);2944 IEM_MC_BEGIN(3, 2, IEM_MC_F_MIN_186); 2951 2945 IEM_MC_ARG(uint16_t *, pu16Dst, 0); 2952 2946 IEM_MC_ARG(uint16_t, u16Src, 1); … … 3087 3081 { 3088 3082 case IEMMODE_16BIT: 3089 IEM_MC_BEGIN(0, 0, 0);3083 IEM_MC_BEGIN(0, 0, IEM_MC_F_MIN_186); 3090 3084 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 3091 3085 IEM_MC_PUSH_U16(i8Imm); … … 3130 3124 { 3131 3125 /* register operand */ 3126 IEM_MC_BEGIN(3, 1, IEM_MC_F_MIN_186); 3132 3127 uint8_t u8Imm; IEM_OPCODE_GET_NEXT_U8(&u8Imm); 3133 IEM_MC_BEGIN(3, 1, 0);3134 3128 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 3135 3129 IEM_MC_ARG(uint16_t *, pu16Dst, 0); … … 3150 3144 { 3151 3145 /* memory operand */ 3152 IEM_MC_BEGIN(3, 2, 0);3146 IEM_MC_BEGIN(3, 2, IEM_MC_F_MIN_186); 3153 3147 IEM_MC_ARG(uint16_t *, pu16Dst, 0); 3154 3148 IEM_MC_ARG(uint16_t, u16Src, 1); … … 7612 7606 /* register */ 7613 7607 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); 7615 7609 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 7616 7610 IEM_MC_ARG(uint8_t *, pu8Dst, 0); … … 7626 7620 { 7627 7621 /* memory */ 7628 IEM_MC_BEGIN(3, 3, 0);7622 IEM_MC_BEGIN(3, 3, IEM_MC_F_MIN_186); 7629 7623 IEM_MC_ARG(uint8_t *, pu8Dst, 0); 7630 7624 IEM_MC_ARG(uint8_t, cShiftArg, 1); … … 7678 7672 { 7679 7673 case IEMMODE_16BIT: 7680 IEM_MC_BEGIN(3, 0, 0);7674 IEM_MC_BEGIN(3, 0, IEM_MC_F_MIN_186); 7681 7675 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 7682 7676 IEM_MC_ARG(uint16_t *, pu16Dst, 0); -
trunk/src/VBox/VMM/VMMAll/IEMAllInstPython.py
r100854 r100856 1938 1938 ## IEM_MC_F_XXX values. 1939 1939 g_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': (), 1949 1951 }; 1950 1952 class McBlock(object): … … 2037 2039 if sFlag in g_kdMcFlags: 2038 2040 oSelf.dMcFlags[sFlag] = True; 2041 for sFlag2 in g_kdMcFlags[sFlag]: 2042 oSelf.dMcFlags[sFlag2] = True; 2039 2043 else: 2040 2044 oSelf.raiseStmtError(sName, 'Unknown flag: %s' % (sFlag, )); -
trunk/src/VBox/VMM/VMMAll/IEMAllInstThree0f38.cpp.h
r100854 r100856 49 49 /** @todo testcase: REX.B / REX.R and MMX register indexing. Ignored? */ 50 50 /** @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); 52 52 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSsse3); 53 53 IEM_MC_ARG(uint64_t *, pDst, 0); … … 70 70 * MMX, [mem64]. 71 71 */ 72 IEM_MC_BEGIN(2, 2, 0);72 IEM_MC_BEGIN(2, 2, IEM_MC_F_NOT_286_OR_OLDER); 73 73 IEM_MC_ARG(uint64_t *, pDst, 0); 74 74 IEM_MC_LOCAL(uint64_t, uSrc); … … 111 111 * Register, register. 112 112 */ 113 IEM_MC_BEGIN(2, 0, 0);113 IEM_MC_BEGIN(2, 0, IEM_MC_F_NOT_286_OR_OLDER); 114 114 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSsse3); 115 115 IEM_MC_ARG(PRTUINT128U, puDst, 0); … … 128 128 * Register, memory. 129 129 */ 130 IEM_MC_BEGIN(2, 2, 0);130 IEM_MC_BEGIN(2, 2, IEM_MC_F_NOT_286_OR_OLDER); 131 131 IEM_MC_ARG(PRTUINT128U, puDst, 0); 132 132 IEM_MC_LOCAL(RTUINT128U, uSrc); … … 167 167 * Register, register. 168 168 */ 169 IEM_MC_BEGIN(2, 0, 0);169 IEM_MC_BEGIN(2, 0, IEM_MC_F_NOT_286_OR_OLDER); 170 170 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41); 171 171 IEM_MC_ARG(PRTUINT128U, puDst, 0); … … 184 184 * Register, memory. 185 185 */ 186 IEM_MC_BEGIN(2, 2, 0);186 IEM_MC_BEGIN(2, 2, IEM_MC_F_NOT_286_OR_OLDER); 187 187 IEM_MC_ARG(PRTUINT128U, puDst, 0); 188 188 IEM_MC_LOCAL(RTUINT128U, uSrc); … … 226 226 * Register, register. 227 227 */ 228 IEM_MC_BEGIN(2, 0, 0);228 IEM_MC_BEGIN(2, 0, IEM_MC_F_NOT_286_OR_OLDER); 229 229 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41); 230 230 IEM_MC_ARG(PRTUINT128U, puDst, 0); … … 243 243 * Register, memory. 244 244 */ 245 IEM_MC_BEGIN(2, 2, 0);245 IEM_MC_BEGIN(2, 2, IEM_MC_F_NOT_286_OR_OLDER); 246 246 IEM_MC_ARG(PRTUINT128U, puDst, 0); 247 247 IEM_MC_LOCAL(RTUINT128U, uSrc); … … 282 282 * Register, register. 283 283 */ 284 IEM_MC_BEGIN(2, 0, 0);284 IEM_MC_BEGIN(2, 0, IEM_MC_F_NOT_286_OR_OLDER); 285 285 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse42); 286 286 IEM_MC_ARG(PRTUINT128U, puDst, 0); … … 299 299 * Register, memory. 300 300 */ 301 IEM_MC_BEGIN(2, 2, 0);301 IEM_MC_BEGIN(2, 2, IEM_MC_F_NOT_286_OR_OLDER); 302 302 IEM_MC_ARG(PRTUINT128U, puDst, 0); 303 303 IEM_MC_LOCAL(RTUINT128U, uSrc); … … 342 342 * Register, register. 343 343 */ 344 IEM_MC_BEGIN(2, 0, 0);344 IEM_MC_BEGIN(2, 0, IEM_MC_F_NOT_286_OR_OLDER); 345 345 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fAesNi); 346 346 IEM_MC_ARG(PRTUINT128U, puDst, 0); … … 359 359 * Register, memory. 360 360 */ 361 IEM_MC_BEGIN(2, 2, 0);361 IEM_MC_BEGIN(2, 2, IEM_MC_F_NOT_286_OR_OLDER); 362 362 IEM_MC_ARG(PRTUINT128U, puDst, 0); 363 363 IEM_MC_LOCAL(RTUINT128U, uSrc); … … 402 402 * Register, register. 403 403 */ 404 IEM_MC_BEGIN(2, 0, 0);404 IEM_MC_BEGIN(2, 0, IEM_MC_F_NOT_286_OR_OLDER); 405 405 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSha); 406 406 IEM_MC_ARG(PRTUINT128U, puDst, 0); … … 419 419 * Register, memory. 420 420 */ 421 IEM_MC_BEGIN(2, 2, 0);421 IEM_MC_BEGIN(2, 2, IEM_MC_F_NOT_286_OR_OLDER); 422 422 IEM_MC_ARG(PRTUINT128U, puDst, 0); 423 423 IEM_MC_LOCAL(RTUINT128U, uSrc); … … 690 690 * Register, register. \ 691 691 */ \ 692 IEM_MC_BEGIN(3, 0, 0); \692 IEM_MC_BEGIN(3, 0, IEM_MC_F_NOT_286_OR_OLDER); \ 693 693 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41); \ 694 694 IEM_MC_ARG(PRTUINT128U, puDst, 0); \ … … 712 712 * Register, memory. \ 713 713 */ \ 714 IEM_MC_BEGIN(3, 2, 0); \714 IEM_MC_BEGIN(3, 2, IEM_MC_F_NOT_286_OR_OLDER); \ 715 715 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); \ 716 716 IEM_MC_LOCAL(RTUINT128U, uSrc); \ … … 785 785 * Register, register. 786 786 */ 787 IEM_MC_BEGIN(3, 0, 0);787 IEM_MC_BEGIN(3, 0, IEM_MC_F_NOT_286_OR_OLDER); 788 788 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41); 789 789 IEM_MC_ARG(PCRTUINT128U, puSrc1, 0); … … 804 804 * Register, memory. 805 805 */ 806 IEM_MC_BEGIN(3, 2, 0);806 IEM_MC_BEGIN(3, 2, IEM_MC_F_NOT_286_OR_OLDER); 807 807 IEM_MC_ARG(PCRTUINT128U, puSrc1, 0); 808 808 IEM_MC_LOCAL(RTUINT128U, uSrc2); … … 906 906 * Register, register. \ 907 907 */ \ 908 IEM_MC_BEGIN(2, 0, 0); \908 IEM_MC_BEGIN(2, 0, IEM_MC_F_NOT_286_OR_OLDER); \ 909 909 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41); \ 910 910 IEM_MC_ARG(PRTUINT128U, puDst, 0); \ … … 926 926 * Register, memory. \ 927 927 */ \ 928 IEM_MC_BEGIN(2, 2, 0); \928 IEM_MC_BEGIN(2, 2, IEM_MC_F_NOT_286_OR_OLDER); \ 929 929 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); \ 930 930 IEM_MC_ARG(PRTUINT128U, puDst, 0); \ … … 1039 1039 { 1040 1040 /* Register, memory. */ 1041 IEM_MC_BEGIN(0, 2, 0);1041 IEM_MC_BEGIN(0, 2, IEM_MC_F_NOT_286_OR_OLDER); 1042 1042 IEM_MC_LOCAL(RTUINT128U, uSrc); 1043 1043 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); … … 1333 1333 else 1334 1334 { 1335 IEM_MC_BEGIN(3, 0, 0);1335 IEM_MC_BEGIN(3, 0, IEM_MC_F_NOT_286_OR_OLDER); 1336 1336 IEM_MC_ARG(uint8_t, iEffSeg, 0); 1337 1337 IEM_MC_ARG(RTGCPTR, GCPtrInveptDesc, 1); … … 1384 1384 else 1385 1385 { 1386 IEM_MC_BEGIN(3, 0, 0);1386 IEM_MC_BEGIN(3, 0, IEM_MC_F_NOT_286_OR_OLDER); 1387 1387 IEM_MC_ARG(uint8_t, iEffSeg, 0); 1388 1388 IEM_MC_ARG(RTGCPTR, GCPtrInvvpidDesc, 1); … … 1430 1430 else 1431 1431 { 1432 IEM_MC_BEGIN(3, 0, 0);1432 IEM_MC_BEGIN(3, 0, IEM_MC_F_NOT_286_OR_OLDER); 1433 1433 IEM_MC_ARG(uint8_t, iEffSeg, 0); 1434 1434 IEM_MC_ARG(RTGCPTR, GCPtrInvpcidDesc, 1); … … 1577 1577 * Register, register. 1578 1578 */ 1579 IEM_MC_BEGIN(3, 0, 0);1579 IEM_MC_BEGIN(3, 0, IEM_MC_F_NOT_286_OR_OLDER); 1580 1580 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSha); 1581 1581 IEM_MC_ARG(PRTUINT128U, puDst, 0); … … 1597 1597 * Register, memory. 1598 1598 */ 1599 IEM_MC_BEGIN(3, 2, 0);1599 IEM_MC_BEGIN(3, 2, IEM_MC_F_NOT_286_OR_OLDER); 1600 1600 IEM_MC_ARG(PRTUINT128U, puDst, 0); 1601 1601 IEM_MC_LOCAL(RTUINT128U, uSrc); … … 1742 1742 { 1743 1743 case IEMMODE_16BIT: 1744 IEM_MC_BEGIN(0, 2, 0);1744 IEM_MC_BEGIN(0, 2, IEM_MC_F_NOT_286_OR_OLDER); 1745 1745 IEM_MC_LOCAL(uint16_t, uSrc); 1746 1746 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); … … 1816 1816 * Register, register. 1817 1817 */ 1818 IEM_MC_BEGIN(2, 0, 0);1818 IEM_MC_BEGIN(2, 0, IEM_MC_F_NOT_286_OR_OLDER); 1819 1819 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 1820 1820 IEM_MC_ARG(uint32_t *, puDst, 0); … … 1832 1832 * Register, memory. 1833 1833 */ 1834 IEM_MC_BEGIN(2, 1, 0);1834 IEM_MC_BEGIN(2, 1, IEM_MC_F_NOT_286_OR_OLDER); 1835 1835 IEM_MC_ARG(uint32_t *, puDst, 0); 1836 1836 IEM_MC_ARG(uint8_t, uSrc, 1); … … 1867 1867 { 1868 1868 case IEMMODE_16BIT: 1869 IEM_MC_BEGIN(0, 2, 0);1869 IEM_MC_BEGIN(0, 2, IEM_MC_F_NOT_286_OR_OLDER); 1870 1870 IEM_MC_LOCAL(uint16_t, u16Value); 1871 1871 IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); … … 1935 1935 { 1936 1936 case IEMMODE_16BIT: 1937 IEM_MC_BEGIN(2, 0, 0);1937 IEM_MC_BEGIN(2, 0, IEM_MC_F_NOT_286_OR_OLDER); 1938 1938 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 1939 1939 IEM_MC_ARG(uint32_t *, puDst, 0); … … 1987 1987 { 1988 1988 case IEMMODE_16BIT: 1989 IEM_MC_BEGIN(2, 1, 0);1989 IEM_MC_BEGIN(2, 1, IEM_MC_F_NOT_286_OR_OLDER); 1990 1990 IEM_MC_ARG(uint32_t *, puDst, 0); 1991 1991 IEM_MC_ARG(uint16_t, uSrc, 1); … … 2116 2116 if (IEM_IS_MODRM_REG_MODE(bRm)) \ 2117 2117 { \ 2118 IEM_MC_BEGIN(3, 0, 0); \2118 IEM_MC_BEGIN(3, 0, IEM_MC_F_NOT_286_OR_OLDER); \ 2119 2119 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 2120 2120 IEM_MC_ARG(uint32_t *, pu32Dst, 0); \ … … 2131 2131 else \ 2132 2132 { \ 2133 IEM_MC_BEGIN(3, 1, 0); \2133 IEM_MC_BEGIN(3, 1, IEM_MC_F_NOT_286_OR_OLDER); \ 2134 2134 IEM_MC_ARG(uint32_t *, pu32Dst, 0); \ 2135 2135 IEM_MC_ARG(uint32_t *, pEFlags, 1); \ -
trunk/src/VBox/VMM/VMMAll/IEMAllInstThree0f3a.cpp.h
r100854 r100856 52 52 */ 53 53 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); 55 55 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSsse3); 56 56 IEM_MC_ARG(PRTUINT128U, puDst, 0); … … 70 70 * Register, memory. 71 71 */ 72 IEM_MC_BEGIN(3, 2, 0);72 IEM_MC_BEGIN(3, 2, IEM_MC_F_NOT_286_OR_OLDER); 73 73 IEM_MC_ARG(PRTUINT128U, puDst, 0); 74 74 IEM_MC_LOCAL(RTUINT128U, uSrc); … … 111 111 */ 112 112 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); 114 114 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41); 115 115 IEM_MC_ARG(PRTUINT128U, puDst, 0); … … 129 129 * XMM, [mem128], imm8. 130 130 */ 131 IEM_MC_BEGIN(3, 2, 0);131 IEM_MC_BEGIN(3, 2, IEM_MC_F_NOT_286_OR_OLDER); 132 132 IEM_MC_ARG(PRTUINT128U, puDst, 0); 133 133 IEM_MC_LOCAL(RTUINT128U, uSrc); … … 171 171 */ 172 172 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); 174 174 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41); 175 175 IEM_MC_LOCAL(IEMMEDIAF2XMMSRC, Src); … … 196 196 * XMM, [mem128], imm8. 197 197 */ 198 IEM_MC_BEGIN(4, 3, 0);198 IEM_MC_BEGIN(4, 3, IEM_MC_F_NOT_286_OR_OLDER); 199 199 IEM_MC_LOCAL(IEMMEDIAF2XMMSRC, Src); 200 200 IEM_MC_LOCAL(X86XMMREG, Dst); … … 243 243 */ 244 244 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); 246 246 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fAesNi); 247 247 IEM_MC_ARG(PRTUINT128U, puDst, 0); … … 261 261 * Register, memory. 262 262 */ 263 IEM_MC_BEGIN(3, 2, 0);263 IEM_MC_BEGIN(3, 2, IEM_MC_F_NOT_286_OR_OLDER); 264 264 IEM_MC_ARG(PRTUINT128U, puDst, 0); 265 265 IEM_MC_LOCAL(RTUINT128U, uSrc); … … 323 323 */ 324 324 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); 326 326 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41); 327 327 IEM_MC_LOCAL(IEMMEDIAF2XMMSRC, Src); … … 348 348 * XMM32, [mem32]. 349 349 */ 350 IEM_MC_BEGIN(4, 3, 0);350 IEM_MC_BEGIN(4, 3, IEM_MC_F_NOT_286_OR_OLDER); 351 351 IEM_MC_LOCAL(IEMMEDIAF2XMMSRC, Src); 352 352 IEM_MC_LOCAL(X86XMMREG, Dst); … … 388 388 */ 389 389 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); 391 391 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41); 392 392 IEM_MC_LOCAL(IEMMEDIAF2XMMSRC, Src); … … 413 413 * XMM64, [mem64], imm8. 414 414 */ 415 IEM_MC_BEGIN(4, 3, 0);415 IEM_MC_BEGIN(4, 3, IEM_MC_F_NOT_286_OR_OLDER); 416 416 IEM_MC_LOCAL(IEMMEDIAF2XMMSRC, Src); 417 417 IEM_MC_LOCAL(X86XMMREG, Dst); … … 481 481 /** @todo testcase: REX.B / REX.R and segment register indexing. Ignored? */ 482 482 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); 484 484 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSsse3); 485 485 IEM_MC_ARG(uint64_t *, pDst, 0); … … 502 502 * Register, memory. 503 503 */ 504 IEM_MC_BEGIN(3, 1, 0);504 IEM_MC_BEGIN(3, 1, IEM_MC_F_NOT_286_OR_OLDER); 505 505 IEM_MC_ARG(uint64_t *, pDst, 0); 506 506 IEM_MC_ARG(uint64_t, uSrc, 1); … … 553 553 */ 554 554 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); 556 556 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41); 557 557 IEM_MC_LOCAL(uint8_t, uValue); … … 568 568 * [mem8], XMM. 569 569 */ 570 IEM_MC_BEGIN(0, 2, 0);570 IEM_MC_BEGIN(0, 2, IEM_MC_F_NOT_286_OR_OLDER); 571 571 IEM_MC_LOCAL(uint8_t, uValue); 572 572 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); … … 597 597 */ 598 598 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); 600 600 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41); 601 601 IEM_MC_LOCAL(uint16_t, uValue); … … 612 612 * [mem16], XMM. 613 613 */ 614 IEM_MC_BEGIN(0, 2, 0);614 IEM_MC_BEGIN(0, 2, IEM_MC_F_NOT_286_OR_OLDER); 615 615 IEM_MC_LOCAL(uint16_t, uValue); 616 616 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); … … 695 695 */ 696 696 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); 698 698 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41); 699 699 IEM_MC_LOCAL(uint32_t, uSrc); … … 710 710 * [mem32], XMM. 711 711 */ 712 IEM_MC_BEGIN(0, 2, 0);712 IEM_MC_BEGIN(0, 2, IEM_MC_F_NOT_286_OR_OLDER); 713 713 IEM_MC_LOCAL(uint32_t, uSrc); 714 714 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); … … 739 739 */ 740 740 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); 742 742 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41); 743 743 IEM_MC_LOCAL(uint32_t, uSrc); … … 754 754 * [mem32], XMM. 755 755 */ 756 IEM_MC_BEGIN(0, 2, 0);756 IEM_MC_BEGIN(0, 2, IEM_MC_F_NOT_286_OR_OLDER); 757 757 IEM_MC_LOCAL(uint32_t, uSrc); 758 758 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); … … 792 792 */ 793 793 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); 795 795 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41); 796 796 IEM_MC_LOCAL(uint8_t, uSrc); … … 807 807 * XMM, [mem8]. 808 808 */ 809 IEM_MC_BEGIN(0, 2, 0);809 IEM_MC_BEGIN(0, 2, IEM_MC_F_NOT_286_OR_OLDER); 810 810 IEM_MC_LOCAL(uint8_t, uSrc); 811 811 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); … … 835 835 */ 836 836 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); 838 838 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41); 839 839 IEM_MC_LOCAL(uint32_t, uSrc); … … 859 859 * XMM, [mem32]. 860 860 */ 861 IEM_MC_BEGIN(0, 3, 0);861 IEM_MC_BEGIN(0, 3, IEM_MC_F_NOT_286_OR_OLDER); 862 862 IEM_MC_LOCAL(uint32_t, uSrc); 863 863 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); … … 946 946 */ 947 947 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); 949 949 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41); 950 950 IEM_MC_LOCAL(uint32_t, uSrc); … … 961 961 * XMM, [mem32]. 962 962 */ 963 IEM_MC_BEGIN(0, 2, 0);963 IEM_MC_BEGIN(0, 2, IEM_MC_F_NOT_286_OR_OLDER); 964 964 IEM_MC_LOCAL(uint32_t, uSrc); 965 965 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); … … 1055 1055 */ 1056 1056 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); 1058 1058 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fPclMul); 1059 1059 IEM_MC_ARG(PRTUINT128U, puDst, 0); … … 1076 1076 * Register, memory. 1077 1077 */ 1078 IEM_MC_BEGIN(3, 2, 0);1078 IEM_MC_BEGIN(3, 2, IEM_MC_F_NOT_286_OR_OLDER); 1079 1079 IEM_MC_ARG(PRTUINT128U, puDst, 0); 1080 1080 IEM_MC_LOCAL(RTUINT128U, uSrc); … … 1211 1211 */ 1212 1212 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); 1214 1214 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse42); 1215 1215 IEM_MC_ARG(PRTUINT128U, puDst, 0); … … 1238 1238 * Register, memory. 1239 1239 */ 1240 IEM_MC_BEGIN(4, 3, 0);1240 IEM_MC_BEGIN(4, 3, IEM_MC_F_NOT_286_OR_OLDER); 1241 1241 IEM_MC_ARG(uint32_t *, pu32Ecx, 0); 1242 1242 IEM_MC_ARG(uint32_t *, pEFlags, 1); … … 1348 1348 */ 1349 1349 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); 1351 1351 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse42); 1352 1352 IEM_MC_ARG(uint32_t *, pu32Ecx, 0); … … 1376 1376 * Register, memory. 1377 1377 */ 1378 IEM_MC_BEGIN(4, 3, 0);1378 IEM_MC_BEGIN(4, 3, IEM_MC_F_NOT_286_OR_OLDER); 1379 1379 IEM_MC_ARG(uint32_t *, pu32Ecx, 0); 1380 1380 IEM_MC_ARG(uint32_t *, pEFlags, 1); … … 1420 1420 */ 1421 1421 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); 1423 1423 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse42); 1424 1424 IEM_MC_ARG(PRTUINT128U, puDst, 0); … … 1445 1445 * Register, memory. 1446 1446 */ 1447 IEM_MC_BEGIN(4, 3, 0);1447 IEM_MC_BEGIN(4, 3, IEM_MC_F_NOT_286_OR_OLDER); 1448 1448 IEM_MC_ARG(uint32_t *, pu32Ecx, 0); 1449 1449 IEM_MC_ARG(uint32_t *, pEFlags, 1); … … 1485 1485 */ 1486 1486 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); 1488 1488 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse42); 1489 1489 IEM_MC_ARG(uint32_t *, pu32Ecx, 0); … … 1511 1511 * Register, memory. 1512 1512 */ 1513 IEM_MC_BEGIN(4, 3, 0);1513 IEM_MC_BEGIN(4, 3, IEM_MC_F_NOT_286_OR_OLDER); 1514 1514 IEM_MC_ARG(uint32_t *, pu32Ecx, 0); 1515 1515 IEM_MC_ARG(uint32_t *, pEFlags, 1); … … 1582 1582 */ 1583 1583 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); 1585 1585 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSha); 1586 1586 IEM_MC_ARG(PRTUINT128U, puDst, 0); … … 1603 1603 * XMM, [mem128], imm8. 1604 1604 */ 1605 IEM_MC_BEGIN(3, 2, 0);1605 IEM_MC_BEGIN(3, 2, IEM_MC_F_NOT_286_OR_OLDER); 1606 1606 IEM_MC_ARG(PRTUINT128U, puDst, 0); 1607 1607 IEM_MC_LOCAL(RTUINT128U, uSrc); -
trunk/src/VBox/VMM/VMMAll/IEMAllInstTwoByte0f.cpp.h
r100854 r100856 50 50 /** @todo testcase: REX.B / REX.R and MMX register indexing. Ignored? */ 51 51 /** @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); 53 53 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fMmx); 54 54 IEM_MC_ARG(uint64_t *, pDst, 0); … … 71 71 * MMX, [mem64]. 72 72 */ 73 IEM_MC_BEGIN(2, 2, 0);73 IEM_MC_BEGIN(2, 2, IEM_MC_F_NOT_286_OR_OLDER); 74 74 IEM_MC_ARG(uint64_t *, pDst, 0); 75 75 IEM_MC_LOCAL(uint64_t, uSrc); … … 112 112 /** @todo testcase: REX.B / REX.R and MMX register indexing. Ignored? */ 113 113 /** @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); 115 115 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fMmx); 116 116 IEM_MC_ARG(uint64_t *, pDst, 0); … … 133 133 * MMX, [mem64]. 134 134 */ 135 IEM_MC_BEGIN(2, 2, 0);135 IEM_MC_BEGIN(2, 2, IEM_MC_F_NOT_286_OR_OLDER); 136 136 IEM_MC_ARG(uint64_t *, pDst, 0); 137 137 IEM_MC_LOCAL(uint64_t, uSrc); … … 172 172 /** @todo testcase: REX.B / REX.R and MMX register indexing. Ignored? */ 173 173 /** @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); 175 175 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX_2_OR(fSse, fAmdMmxExts); 176 176 IEM_MC_ARG(uint64_t *, pDst, 0); … … 193 193 * MMX, [mem64]. 194 194 */ 195 IEM_MC_BEGIN(2, 2, 0);195 IEM_MC_BEGIN(2, 2, IEM_MC_F_NOT_286_OR_OLDER); 196 196 IEM_MC_ARG(uint64_t *, pDst, 0); 197 197 IEM_MC_LOCAL(uint64_t, uSrc); … … 235 235 /** @todo testcase: REX.B / REX.R and MMX register indexing. Ignored? */ 236 236 /** @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); 238 238 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX_2_OR(fSse, fAmdMmxExts); 239 239 IEM_MC_ARG(uint64_t *, pDst, 0); … … 256 256 * MMX, [mem64]. 257 257 */ 258 IEM_MC_BEGIN(2, 2, 0);258 IEM_MC_BEGIN(2, 2, IEM_MC_F_NOT_286_OR_OLDER); 259 259 IEM_MC_ARG(uint64_t *, pDst, 0); 260 260 IEM_MC_LOCAL(uint64_t, uSrc); … … 295 295 /** @todo testcase: REX.B / REX.R and MMX register indexing. Ignored? */ 296 296 /** @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); 298 298 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2); 299 299 IEM_MC_ARG(uint64_t *, pDst, 0); … … 316 316 * MMX, [mem64]. 317 317 */ 318 IEM_MC_BEGIN(2, 2, 0);318 IEM_MC_BEGIN(2, 2, IEM_MC_F_NOT_286_OR_OLDER); 319 319 IEM_MC_ARG(uint64_t *, pDst, 0); 320 320 IEM_MC_LOCAL(uint64_t, uSrc); … … 357 357 * XMM, XMM. 358 358 */ 359 IEM_MC_BEGIN(2, 0, 0);359 IEM_MC_BEGIN(2, 0, IEM_MC_F_NOT_286_OR_OLDER); 360 360 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse); 361 361 IEM_MC_ARG(PRTUINT128U, pDst, 0); … … 374 374 * XMM, [mem128]. 375 375 */ 376 IEM_MC_BEGIN(2, 2, 0);376 IEM_MC_BEGIN(2, 2, IEM_MC_F_NOT_286_OR_OLDER); 377 377 IEM_MC_ARG(PRTUINT128U, pDst, 0); 378 378 IEM_MC_LOCAL(RTUINT128U, uSrc); … … 412 412 * XMM, XMM. 413 413 */ 414 IEM_MC_BEGIN(2, 0, 0);414 IEM_MC_BEGIN(2, 0, IEM_MC_F_NOT_286_OR_OLDER); 415 415 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2); 416 416 IEM_MC_ARG(PRTUINT128U, pDst, 0); … … 429 429 * XMM, [mem128]. 430 430 */ 431 IEM_MC_BEGIN(2, 2, 0);431 IEM_MC_BEGIN(2, 2, IEM_MC_F_NOT_286_OR_OLDER); 432 432 IEM_MC_ARG(PRTUINT128U, pDst, 0); 433 433 IEM_MC_LOCAL(RTUINT128U, uSrc); … … 470 470 * XMM, XMM. 471 471 */ 472 IEM_MC_BEGIN(2, 0, 0);472 IEM_MC_BEGIN(2, 0, IEM_MC_F_NOT_286_OR_OLDER); 473 473 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2); 474 474 IEM_MC_ARG(PRTUINT128U, pDst, 0); … … 487 487 * XMM, [mem128]. 488 488 */ 489 IEM_MC_BEGIN(2, 2, 0);489 IEM_MC_BEGIN(2, 2, IEM_MC_F_NOT_286_OR_OLDER); 490 490 IEM_MC_ARG(PRTUINT128U, pDst, 0); 491 491 IEM_MC_LOCAL(RTUINT128U, uSrc); … … 523 523 * MMX, MMX. 524 524 */ 525 IEM_MC_BEGIN(2, 0, 0);525 IEM_MC_BEGIN(2, 0, IEM_MC_F_NOT_286_OR_OLDER); 526 526 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fMmx); 527 527 IEM_MC_ARG(uint64_t *, puDst, 0); … … 544 544 * MMX, [mem32]. 545 545 */ 546 IEM_MC_BEGIN(2, 2, 0);546 IEM_MC_BEGIN(2, 2, IEM_MC_F_NOT_286_OR_OLDER); 547 547 IEM_MC_ARG(uint64_t *, puDst, 0); 548 548 IEM_MC_LOCAL(uint64_t, uSrc); … … 585 585 * XMM, XMM. 586 586 */ 587 IEM_MC_BEGIN(2, 0, 0);587 IEM_MC_BEGIN(2, 0, IEM_MC_F_NOT_286_OR_OLDER); 588 588 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse); 589 589 IEM_MC_ARG(PRTUINT128U, puDst, 0); … … 602 602 * XMM, [mem128]. 603 603 */ 604 IEM_MC_BEGIN(2, 2, 0);604 IEM_MC_BEGIN(2, 2, IEM_MC_F_NOT_286_OR_OLDER); 605 605 IEM_MC_ARG(PRTUINT128U, puDst, 0); 606 606 IEM_MC_LOCAL(RTUINT128U, uSrc); … … 645 645 * XMM, XMM. 646 646 */ 647 IEM_MC_BEGIN(2, 0, 0);647 IEM_MC_BEGIN(2, 0, IEM_MC_F_NOT_286_OR_OLDER); 648 648 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2); 649 649 IEM_MC_ARG(PRTUINT128U, puDst, 0); … … 662 662 * XMM, [mem128]. 663 663 */ 664 IEM_MC_BEGIN(2, 2, 0);664 IEM_MC_BEGIN(2, 2, IEM_MC_F_NOT_286_OR_OLDER); 665 665 IEM_MC_ARG(PRTUINT128U, puDst, 0); 666 666 IEM_MC_LOCAL(RTUINT128U, uSrc); … … 705 705 /** @todo testcase: REX.B / REX.R and MMX register indexing. Ignored? */ 706 706 /** @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); 708 708 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fMmx); 709 709 IEM_MC_ARG(uint64_t *, puDst, 0); … … 726 726 * MMX, [mem64]. 727 727 */ 728 IEM_MC_BEGIN(2, 2, 0);728 IEM_MC_BEGIN(2, 2, IEM_MC_F_NOT_286_OR_OLDER); 729 729 IEM_MC_ARG(uint64_t *, puDst, 0); 730 730 IEM_MC_LOCAL(uint64_t, uSrc); … … 767 767 * XMM, XMM. 768 768 */ 769 IEM_MC_BEGIN(2, 0, 0);769 IEM_MC_BEGIN(2, 0, IEM_MC_F_NOT_286_OR_OLDER); 770 770 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse); 771 771 IEM_MC_ARG(PRTUINT128U, puDst, 0); … … 784 784 * XMM, [mem128]. 785 785 */ 786 IEM_MC_BEGIN(2, 2, 0);786 IEM_MC_BEGIN(2, 2, IEM_MC_F_NOT_286_OR_OLDER); 787 787 IEM_MC_ARG(PRTUINT128U, puDst, 0); 788 788 IEM_MC_LOCAL(RTUINT128U, uSrc); … … 827 827 * XMM128, XMM128. 828 828 */ 829 IEM_MC_BEGIN(3, 1, 0);829 IEM_MC_BEGIN(3, 1, IEM_MC_F_NOT_286_OR_OLDER); 830 830 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse); 831 831 IEM_MC_LOCAL(IEMSSERESULT, SseRes); … … 849 849 * XMM128, [mem128]. 850 850 */ 851 IEM_MC_BEGIN(3, 2, 0);851 IEM_MC_BEGIN(3, 2, IEM_MC_F_NOT_286_OR_OLDER); 852 852 IEM_MC_LOCAL(IEMSSERESULT, SseRes); 853 853 IEM_MC_LOCAL(X86XMMREG, uSrc2); … … 891 891 * XMM128, XMM32. 892 892 */ 893 IEM_MC_BEGIN(3, 1, 0);893 IEM_MC_BEGIN(3, 1, IEM_MC_F_NOT_286_OR_OLDER); 894 894 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse); 895 895 IEM_MC_LOCAL(IEMSSERESULT, SseRes); … … 913 913 * XMM128, [mem32]. 914 914 */ 915 IEM_MC_BEGIN(3, 2, 0);915 IEM_MC_BEGIN(3, 2, IEM_MC_F_NOT_286_OR_OLDER); 916 916 IEM_MC_LOCAL(IEMSSERESULT, SseRes); 917 917 IEM_MC_LOCAL(RTFLOAT32U, r32Src2); … … 955 955 * XMM128, XMM128. 956 956 */ 957 IEM_MC_BEGIN(3, 1, 0);957 IEM_MC_BEGIN(3, 1, IEM_MC_F_NOT_286_OR_OLDER); 958 958 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2); 959 959 IEM_MC_LOCAL(IEMSSERESULT, SseRes); … … 977 977 * XMM128, [mem128]. 978 978 */ 979 IEM_MC_BEGIN(3, 2, 0);979 IEM_MC_BEGIN(3, 2, IEM_MC_F_NOT_286_OR_OLDER); 980 980 IEM_MC_LOCAL(IEMSSERESULT, SseRes); 981 981 IEM_MC_LOCAL(X86XMMREG, uSrc2); … … 1019 1019 * XMM, XMM. 1020 1020 */ 1021 IEM_MC_BEGIN(3, 1, 0);1021 IEM_MC_BEGIN(3, 1, IEM_MC_F_NOT_286_OR_OLDER); 1022 1022 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2); 1023 1023 IEM_MC_LOCAL(IEMSSERESULT, SseRes); … … 1041 1041 * XMM, [mem64]. 1042 1042 */ 1043 IEM_MC_BEGIN(3, 2, 0);1043 IEM_MC_BEGIN(3, 2, IEM_MC_F_NOT_286_OR_OLDER); 1044 1044 IEM_MC_LOCAL(IEMSSERESULT, SseRes); 1045 1045 IEM_MC_LOCAL(RTFLOAT64U, r64Src2); … … 1083 1083 * XMM, XMM. 1084 1084 */ 1085 IEM_MC_BEGIN(2, 0, 0);1085 IEM_MC_BEGIN(2, 0, IEM_MC_F_NOT_286_OR_OLDER); 1086 1086 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2); 1087 1087 IEM_MC_ARG(PRTUINT128U, puDst, 0); … … 1100 1100 * XMM, [mem128]. 1101 1101 */ 1102 IEM_MC_BEGIN(2, 2, 0);1102 IEM_MC_BEGIN(2, 2, IEM_MC_F_NOT_286_OR_OLDER); 1103 1103 IEM_MC_ARG(PRTUINT128U, puDst, 0); 1104 1104 IEM_MC_LOCAL(RTUINT128U, uSrc); … … 1143 1143 * XMM, XMM. 1144 1144 */ 1145 IEM_MC_BEGIN(3, 1, 0);1145 IEM_MC_BEGIN(3, 1, IEM_MC_F_NOT_286_OR_OLDER); 1146 1146 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse3); 1147 1147 IEM_MC_LOCAL(IEMSSERESULT, SseRes); … … 1165 1165 * XMM, [mem128]. 1166 1166 */ 1167 IEM_MC_BEGIN(3, 2, 0);1167 IEM_MC_BEGIN(3, 2, IEM_MC_F_NOT_286_OR_OLDER); 1168 1168 IEM_MC_LOCAL(IEMSSERESULT, SseRes); 1169 1169 IEM_MC_LOCAL(X86XMMREG, uSrc2); … … 1204 1204 1205 1205 /* 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); 1207 1207 IEM_MC_ARG(uint16_t, iEffSeg, 0); 1208 1208 IEM_MC_ARG(RTGCPTR, GCPtrEffDst, 1); … … 1230 1230 1231 1231 /* 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); 1233 1233 IEM_MC_ARG(uint16_t, iEffSeg, 0); 1234 1234 IEM_MC_ARG(RTGCPTR, GCPtrEffDst, 1); … … 1250 1250 if (IEM_IS_MODRM_REG_MODE(bRm)) 1251 1251 { 1252 IEM_MC_BEGIN(1, 0, 0);1252 IEM_MC_BEGIN(1, 0, IEM_MC_F_MIN_286); 1253 1253 IEMOP_HLP_DECODED_NL_1(OP_LLDT, IEMOPFORM_M_REG, OP_PARM_Ew, DISOPTYPE_DANGEROUS); 1254 1254 IEM_MC_ARG(uint16_t, u16Sel, 0); … … 1259 1259 else 1260 1260 { 1261 IEM_MC_BEGIN(1, 1, 0);1261 IEM_MC_BEGIN(1, 1, IEM_MC_F_MIN_286); 1262 1262 IEM_MC_ARG(uint16_t, u16Sel, 0); 1263 1263 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); … … 1281 1281 if (IEM_IS_MODRM_REG_MODE(bRm)) 1282 1282 { 1283 IEM_MC_BEGIN(1, 0, 0);1283 IEM_MC_BEGIN(1, 0, IEM_MC_F_MIN_286); 1284 1284 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 1285 1285 IEM_MC_ARG(uint16_t, u16Sel, 0); … … 1290 1290 else 1291 1291 { 1292 IEM_MC_BEGIN(1, 1, 0);1292 IEM_MC_BEGIN(1, 1, IEM_MC_F_MIN_286); 1293 1293 IEM_MC_ARG(uint16_t, u16Sel, 0); 1294 1294 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); … … 1311 1311 if (IEM_IS_MODRM_REG_MODE(bRm)) 1312 1312 { 1313 IEM_MC_BEGIN(2, 0, 0);1313 IEM_MC_BEGIN(2, 0, IEM_MC_F_MIN_286); 1314 1314 IEMOP_HLP_DECODED_NL_1(fWrite ? OP_VERW : OP_VERR, IEMOPFORM_M_MEM, OP_PARM_Ew, DISOPTYPE_DANGEROUS | DISOPTYPE_PRIVILEGED_NOTRAP); 1315 1315 IEM_MC_ARG(uint16_t, u16Sel, 0); … … 1321 1321 else 1322 1322 { 1323 IEM_MC_BEGIN(2, 1, 0);1323 IEM_MC_BEGIN(2, 1, IEM_MC_F_MIN_286); 1324 1324 IEM_MC_ARG(uint16_t, u16Sel, 0); 1325 1325 IEM_MC_ARG_CONST(bool, fWriteArg, fWrite, 1); … … 1338 1338 { 1339 1339 IEMOP_MNEMONIC(verr, "verr Ew"); 1340 IEMOP_HLP_MIN_286();1341 1340 return FNIEMOP_CALL_2(iemOpCommonGrp6VerX, bRm, false); 1342 1341 } … … 1347 1346 { 1348 1347 IEMOP_MNEMONIC(verw, "verw Ew"); 1349 IEMOP_HLP_MIN_286();1350 1348 return FNIEMOP_CALL_2(iemOpCommonGrp6VerX, bRm, true); 1351 1349 } … … 1381 1379 IEMOP_HLP_MIN_286(); 1382 1380 IEMOP_HLP_64BIT_OP_SIZE(); 1383 IEM_MC_BEGIN(2, 1, 0);1381 IEM_MC_BEGIN(2, 1, IEM_MC_F_MIN_286); 1384 1382 IEM_MC_ARG(uint8_t, iEffSeg, 0); 1385 1383 IEM_MC_ARG(RTGCPTR, GCPtrEffSrc, 1); … … 1473 1471 IEMOP_HLP_MIN_286(); 1474 1472 IEMOP_HLP_64BIT_OP_SIZE(); 1475 IEM_MC_BEGIN(2, 1, 0);1473 IEM_MC_BEGIN(2, 1, IEM_MC_F_MIN_286); 1476 1474 IEM_MC_ARG(uint8_t, iEffSeg, 0); 1477 1475 IEM_MC_ARG(RTGCPTR, GCPtrEffSrc, 1); … … 1692 1690 1693 1691 /* 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); 1695 1693 IEM_MC_ARG(uint16_t, iEffSeg, 0); 1696 1694 IEM_MC_ARG(RTGCPTR, GCPtrEffDst, 1); … … 1712 1710 if (IEM_IS_MODRM_REG_MODE(bRm)) 1713 1711 { 1714 IEM_MC_BEGIN(2, 0, 0);1712 IEM_MC_BEGIN(2, 0, IEM_MC_F_MIN_286); 1715 1713 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 1716 1714 IEM_MC_ARG(uint16_t, u16Tmp, 0); … … 1722 1720 else 1723 1721 { 1724 IEM_MC_BEGIN(2, 0, 0);1722 IEM_MC_BEGIN(2, 0, IEM_MC_F_MIN_286); 1725 1723 IEM_MC_ARG(uint16_t, u16Tmp, 0); 1726 1724 IEM_MC_ARG(RTGCPTR, GCPtrEffDst, 1); … … 10191 10189 IEMOP_VERIFICATION_UNDEFINED_EFLAGS(X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF); 10192 10190 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); 10194 10192 } 10195 10193 … … 10694 10692 #endif 10695 10693 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); 10697 10695 } 10698 10696 … … 11320 11318 const IEMOPBINSIZES * const pImpl = IEMTARGETCPU_EFL_BEHAVIOR_SELECT_EX(s_iemAImpl_tzcnt_eflags, 11321 11319 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); 11323 11321 } 11324 11322 … … 11357 11355 const IEMOPBINSIZES * const pImpl = IEMTARGETCPU_EFL_BEHAVIOR_SELECT_EX(s_iemAImpl_lzcnt_eflags, 11358 11356 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); 11360 11358 } 11361 11359 -
trunk/src/VBox/VMM/VMMAll/IEMAllThrdPython.py
r100854 r100856 130 130 ## @name Variations. 131 131 ## These variations will match translation block selection/distinctions as well. 132 ## @note Effective operand size is generally handled in the decoder, at present133 ## we only do variations on addressing and memory accessing.134 ## @todo Blocks without addressing should have 64-bit and 32-bit PC update135 ## variations to reduce code size (see iemRegAddToRip).136 132 ## @{ 137 133 ksVariation_Default = ''; ##< No variations - only used by IEM_MC_DEFER_TO_CIMPL_X_RET. … … 163 159 ksVariation_64, 164 160 ); 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 ); 165 178 kasVariationsWithAddress = ( 166 179 ksVariation_16, … … 170 183 ksVariation_32_Flat, 171 184 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 = ( 172 215 ksVariation_64, 173 216 ksVariation_64_FsGs, … … 1139 1182 self.analyzeFindVariablesAndCallArgs(aoStmts); 1140 1183 1141 # Create variations ifneeded.1184 # Create variations as needed. 1142 1185 if iai.McStmt.findStmtByNames(aoStmts, 1143 1186 { 'IEM_MC_DEFER_TO_CIMPL_0_RET': True, … … 1145 1188 'IEM_MC_DEFER_TO_CIMPL_2_RET': True, 1146 1189 'IEM_MC_DEFER_TO_CIMPL_3_RET': True, }): 1147 self.aoVariations = [ThreadedFunctionVariation(self, ThreadedFunctionVariation.ksVariation_Default),];1190 asVariations = [ThreadedFunctionVariation.ksVariation_Default,]; 1148 1191 1149 1192 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; 1152 1205 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]; 1155 1220 1156 1221 # Dictionary variant of the list. … … 1169 1234 """ 1170 1235 # 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: 1173 1237 return self.aoVariations[0].emitThreadedCallStmts(0); 1174 1238 … … 1237 1301 # 1238 1302 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))'; 1240 1304 if ( ThrdFnVar.ksVariation_64_Addr32 in dByVari 1241 1305 or ThrdFnVar.ksVariation_64_FsGs in dByVari … … 1243 1307 or ThrdFnVar.ksVariation_32_Flat in dByVari 1244 1308 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))';1246 1309 sSwitchValue += ' | (pVCpu->iem.s.enmEffAddrMode == (pVCpu->iem.s.fExec & IEM_F_MODE_CPUMODE_MASK) ? 0 : 8)'; 1247 1310 # Accesses via FS and GS and CS goes thru non-FLAT functions. (CS … … 1282 1345 elif ThrdFnVar.ksVariation_32 in dByVari: 1283 1346 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 ]); 1285 1351 1286 1352 if ThrdFnVar.ksVariation_16_Addr32 in dByVari: … … 1303 1369 # we can reduce the code size and hopefully compile time. 1304 1370 # 1305 assert aoCases[0].aoBody; 1371 iFirstCaseWithBody = 0; 1372 while not aoCases[iFirstCaseWithBody].aoBody: 1373 iFirstCaseWithBody += 1 1306 1374 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]); 1309 1377 #if fDbg: print('fAllSameCases=%s %s' % (fAllSameCases, self.oMcBlock.sFunction,)); 1310 1378 if fAllSameCases: … … 1320 1388 iai.McCppGeneric('}'), 1321 1389 ]); 1322 aoStmts.extend(dByVari[aoCases[ 0].sVarNm].emitThreadedCallStmts(0, 'enmFunction'));1390 aoStmts.extend(dByVari[aoCases[iFirstCaseWithBody].sVarNm].emitThreadedCallStmts(0, 'enmFunction')); 1323 1391 1324 1392 else: -
trunk/src/VBox/VMM/include/IEMInternal.h
r100854 r100856 544 544 * @{ */ 545 545 #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) 546 548 #define IEM_MC_F_NOT_286_OR_OLDER IEM_MC_F_MIN_386 547 549 #define IEM_MC_F_MIN_386 RT_BIT_32(3)
Note:
See TracChangeset
for help on using the changeset viewer.