Changeset 100714 in vbox
- Timestamp:
- Jul 27, 2023 10:12:09 AM (16 months ago)
- Location:
- trunk/src/VBox/VMM
- Files:
-
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsCommonBodyMacros.h
r98916 r100714 47 47 if (IEM_IS_MODRM_REG_MODE(bRm)) \ 48 48 { \ 49 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \50 49 switch (pVCpu->iem.s.enmEffOpSize) \ 51 50 { \ 52 51 case IEMMODE_16BIT: \ 53 52 IEM_MC_BEGIN(3, 0); \ 53 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 54 54 IEM_MC_ARG(uint16_t *, pu16Dst, 0); \ 55 55 IEM_MC_ARG(uint16_t, u16Src, 1); \ … … 67 67 case IEMMODE_32BIT: \ 68 68 IEM_MC_BEGIN(3, 0); \ 69 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 69 70 IEM_MC_ARG(uint32_t *, pu32Dst, 0); \ 70 71 IEM_MC_ARG(uint32_t, u32Src, 1); \ … … 84 85 case IEMMODE_64BIT: \ 85 86 IEM_MC_BEGIN(3, 0); \ 87 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 86 88 IEM_MC_ARG(uint64_t *, pu64Dst, 0); \ 87 89 IEM_MC_ARG(uint64_t, u64Src, 1); \ -
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsOneByte.cpp.h
r100701 r100714 71 71 if (IEM_IS_MODRM_REG_MODE(bRm)) \ 72 72 { \ 73 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \74 \75 73 IEM_MC_BEGIN(3, 0); \ 76 74 IEM_MC_ARG(uint8_t *, pu8Dst, 0); \ … … 78 76 IEM_MC_ARG(uint32_t *, pEFlags, 2); \ 79 77 \ 78 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 80 79 IEM_MC_FETCH_GREG_U8(u8Src, IEM_GET_MODRM_REG(pVCpu, bRm)); \ 81 80 IEM_MC_REF_GREG_U8(pu8Dst, IEM_GET_MODRM_RM(pVCpu, bRm)); \ … … 158 157 if (IEM_IS_MODRM_REG_MODE(bRm)) \ 159 158 { \ 159 IEM_MC_BEGIN(3, 0); \ 160 160 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 161 IEM_MC_BEGIN(3, 0); \162 161 IEM_MC_ARG(uint8_t *, pu8Dst, 0); \ 163 162 IEM_MC_ARG(uint8_t, u8Src, 1); \ … … 208 207 if (IEM_IS_MODRM_REG_MODE(bRm)) \ 209 208 { \ 210 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \211 209 switch (pVCpu->iem.s.enmEffOpSize) \ 212 210 { \ 213 211 case IEMMODE_16BIT: \ 214 212 IEM_MC_BEGIN(3, 0); \ 213 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 215 214 IEM_MC_ARG(uint16_t *, pu16Dst, 0); \ 216 215 IEM_MC_ARG(uint16_t, u16Src, 1); \ … … 228 227 case IEMMODE_32BIT: \ 229 228 IEM_MC_BEGIN(3, 0); \ 229 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 230 230 IEM_MC_ARG(uint32_t *, pu32Dst, 0); \ 231 231 IEM_MC_ARG(uint32_t, u32Src, 1); \ … … 245 245 case IEMMODE_64BIT: \ 246 246 IEM_MC_BEGIN(3, 0); \ 247 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 247 248 IEM_MC_ARG(uint64_t *, pu64Dst, 0); \ 248 249 IEM_MC_ARG(uint64_t, u64Src, 1); \ … … 422 423 #define IEMOP_BODY_BINARY_AL_Ib(a_fnNormalU8) \ 423 424 uint8_t u8Imm; IEM_OPCODE_GET_NEXT_U8(&u8Imm); \ 424 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \425 425 \ 426 426 IEM_MC_BEGIN(3, 0); \ 427 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 427 428 IEM_MC_ARG(uint8_t *, pu8Dst, 0); \ 428 429 IEM_MC_ARG_CONST(uint8_t, u8Src,/*=*/ u8Imm, 1); \ … … 446 447 { \ 447 448 uint16_t u16Imm; IEM_OPCODE_GET_NEXT_U16(&u16Imm); \ 448 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \449 449 \ 450 450 IEM_MC_BEGIN(3, 0); \ 451 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 451 452 IEM_MC_ARG(uint16_t *, pu16Dst, 0); \ 452 453 IEM_MC_ARG_CONST(uint16_t, u16Src,/*=*/ u16Imm, 1); \ … … 464 465 { \ 465 466 uint32_t u32Imm; IEM_OPCODE_GET_NEXT_U32(&u32Imm); \ 466 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \467 467 \ 468 468 IEM_MC_BEGIN(3, 0); \ 469 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 469 470 IEM_MC_ARG(uint32_t *, pu32Dst, 0); \ 470 471 IEM_MC_ARG_CONST(uint32_t, u32Src,/*=*/ u32Imm, 1); \ … … 484 485 { \ 485 486 uint64_t u64Imm; IEM_OPCODE_GET_NEXT_S32_SX_U64(&u64Imm); \ 486 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \487 487 \ 488 488 IEM_MC_BEGIN(3, 0); \ 489 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 489 490 IEM_MC_ARG(uint64_t *, pu64Dst, 0); \ 490 491 IEM_MC_ARG_CONST(uint64_t, u64Src,/*=*/ u64Imm, 1); \ … … 1554 1555 */ 1555 1556 #define IEMOP_BODY_UNARY_GReg(a_fnNormalU16, a_fnNormalU32, a_iReg) \ 1556 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \1557 1557 switch (pVCpu->iem.s.enmEffOpSize) \ 1558 1558 { \ 1559 1559 case IEMMODE_16BIT: \ 1560 1560 IEM_MC_BEGIN(2, 0); \ 1561 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 1561 1562 IEM_MC_ARG(uint16_t *, pu16Dst, 0); \ 1562 1563 IEM_MC_ARG(uint32_t *, pEFlags, 1); \ … … 1570 1571 case IEMMODE_32BIT: \ 1571 1572 IEM_MC_BEGIN(2, 0); \ 1573 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 1572 1574 IEM_MC_ARG(uint32_t *, pu32Dst, 0); \ 1573 1575 IEM_MC_ARG(uint32_t *, pEFlags, 1); \ … … 1973 1975 FNIEMOP_DEF_1(iemOpCommonPushGReg, uint8_t, iReg) 1974 1976 { 1975 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();1976 1977 if (IEM_IS_64BIT_CODE(pVCpu)) 1977 1978 { … … 1985 1986 case IEMMODE_16BIT: 1986 1987 IEM_MC_BEGIN(0, 1); 1988 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 1987 1989 IEM_MC_LOCAL(uint16_t, u16Value); 1988 1990 IEM_MC_FETCH_GREG_U16(u16Value, iReg); … … 1994 1996 case IEMMODE_32BIT: 1995 1997 IEM_MC_BEGIN(0, 1); 1998 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 1996 1999 IEM_MC_LOCAL(uint32_t, u32Value); 1997 2000 IEM_MC_FETCH_GREG_U32(u32Value, iReg); … … 2003 2006 case IEMMODE_64BIT: 2004 2007 IEM_MC_BEGIN(0, 1); 2008 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 2005 2009 IEM_MC_LOCAL(uint64_t, u64Value); 2006 2010 IEM_MC_FETCH_GREG_U64(u64Value, iReg); … … 2064 2068 { 2065 2069 IEM_MC_BEGIN(0, 1); 2070 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 2066 2071 IEM_MC_LOCAL(uint16_t, u16Value); 2067 2072 IEM_MC_FETCH_GREG_U16(u16Value, X86_GREG_xSP); … … 2110 2115 FNIEMOP_DEF_1(iemOpCommonPopGReg, uint8_t, iReg) 2111 2116 { 2112 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();2113 2117 if (IEM_IS_64BIT_CODE(pVCpu)) 2114 2118 { … … 2122 2126 case IEMMODE_16BIT: 2123 2127 IEM_MC_BEGIN(0, 1); 2128 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 2124 2129 IEM_MC_LOCAL(uint16_t *, pu16Dst); 2125 2130 IEM_MC_REF_GREG_U16(pu16Dst, iReg); … … 2131 2136 case IEMMODE_32BIT: 2132 2137 IEM_MC_BEGIN(0, 1); 2138 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 2133 2139 IEM_MC_LOCAL(uint32_t *, pu32Dst); 2134 2140 IEM_MC_REF_GREG_U32(pu32Dst, iReg); … … 2141 2147 case IEMMODE_64BIT: 2142 2148 IEM_MC_BEGIN(0, 1); 2149 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 2143 2150 IEM_MC_LOCAL(uint64_t *, pu64Dst); 2144 2151 IEM_MC_REF_GREG_U64(pu64Dst, iReg); … … 2207 2214 } 2208 2215 2209 IEMOP_HLP_DECODED_NL_1(OP_POP, IEMOPFORM_FIXED, OP_PARM_REG_ESP,2210 DISOPTYPE_HARMLESS | DISOPTYPE_X86_DEFAULT_64_OP_SIZE | DISOPTYPE_X86_REXB_EXTENDS_OPREG);2211 2216 /** @todo add testcase for this instruction. */ 2212 2217 switch (pVCpu->iem.s.enmEffOpSize) … … 2214 2219 case IEMMODE_16BIT: 2215 2220 IEM_MC_BEGIN(0, 1); 2221 IEMOP_HLP_DECODED_NL_1(OP_POP, IEMOPFORM_FIXED, OP_PARM_REG_ESP, 2222 DISOPTYPE_HARMLESS | DISOPTYPE_X86_DEFAULT_64_OP_SIZE | DISOPTYPE_X86_REXB_EXTENDS_OPREG); 2216 2223 IEM_MC_LOCAL(uint16_t, u16Dst); 2217 2224 IEM_MC_POP_U16(&u16Dst); /** @todo not correct MC, fix later. */ … … 2223 2230 case IEMMODE_32BIT: 2224 2231 IEM_MC_BEGIN(0, 1); 2232 IEMOP_HLP_DECODED_NL_1(OP_POP, IEMOPFORM_FIXED, OP_PARM_REG_ESP, 2233 DISOPTYPE_HARMLESS | DISOPTYPE_X86_DEFAULT_64_OP_SIZE | DISOPTYPE_X86_REXB_EXTENDS_OPREG); 2225 2234 IEM_MC_LOCAL(uint32_t, u32Dst); 2226 2235 IEM_MC_POP_U32(&u32Dst); … … 2232 2241 case IEMMODE_64BIT: 2233 2242 IEM_MC_BEGIN(0, 1); 2243 IEMOP_HLP_DECODED_NL_1(OP_POP, IEMOPFORM_FIXED, OP_PARM_REG_ESP, 2244 DISOPTYPE_HARMLESS | DISOPTYPE_X86_DEFAULT_64_OP_SIZE | DISOPTYPE_X86_REXB_EXTENDS_OPREG); 2234 2245 IEM_MC_LOCAL(uint64_t, u64Dst); 2235 2246 IEM_MC_POP_U64(&u64Dst); … … 2462 2473 { 2463 2474 /* Register */ 2475 IEM_MC_BEGIN(3, 0); 2464 2476 IEMOP_HLP_DECODED_NL_2(OP_ARPL, IEMOPFORM_MR_REG, OP_PARM_Ew, OP_PARM_Gw, DISOPTYPE_HARMLESS); 2465 IEM_MC_BEGIN(3, 0);2466 2477 IEM_MC_ARG(uint16_t *, pu16Dst, 0); 2467 2478 IEM_MC_ARG(uint16_t, u16Src, 1); … … 2520 2531 * Register to register. 2521 2532 */ 2533 IEM_MC_BEGIN(0, 1); 2522 2534 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 2523 IEM_MC_BEGIN(0, 1);2524 2535 IEM_MC_LOCAL(uint64_t, u64Value); 2525 2536 IEM_MC_FETCH_GREG_U32_SX_U64(u64Value, IEM_GET_MODRM_RM(pVCpu, bRm)); … … 2653 2664 { 2654 2665 uint16_t u16Imm; IEM_OPCODE_GET_NEXT_U16(&u16Imm); 2666 IEM_MC_BEGIN(0,0); 2655 2667 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 2656 IEM_MC_BEGIN(0,0);2657 2668 IEM_MC_PUSH_U16(u16Imm); 2658 2669 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 2664 2675 { 2665 2676 uint32_t u32Imm; IEM_OPCODE_GET_NEXT_U32(&u32Imm); 2677 IEM_MC_BEGIN(0,0); 2666 2678 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 2667 IEM_MC_BEGIN(0,0);2668 2679 IEM_MC_PUSH_U32(u32Imm); 2669 2680 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 2675 2686 { 2676 2687 uint64_t u64Imm; IEM_OPCODE_GET_NEXT_S32_SX_U64(&u64Imm); 2688 IEM_MC_BEGIN(0,0); 2677 2689 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 2678 IEM_MC_BEGIN(0,0);2679 2690 IEM_MC_PUSH_U64(u64Imm); 2680 2691 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 2707 2718 /* register operand */ 2708 2719 uint16_t u16Imm; IEM_OPCODE_GET_NEXT_U16(&u16Imm); 2720 IEM_MC_BEGIN(3, 1); 2709 2721 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 2710 2711 IEM_MC_BEGIN(3, 1);2712 2722 IEM_MC_ARG(uint16_t *, pu16Dst, 0); 2713 2723 IEM_MC_ARG_CONST(uint16_t, u16Src,/*=*/ u16Imm,1); … … 2757 2767 /* register operand */ 2758 2768 uint32_t u32Imm; IEM_OPCODE_GET_NEXT_U32(&u32Imm); 2769 IEM_MC_BEGIN(3, 1); 2759 2770 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 2760 2761 IEM_MC_BEGIN(3, 1);2762 2771 IEM_MC_ARG(uint32_t *, pu32Dst, 0); 2763 2772 IEM_MC_ARG_CONST(uint32_t, u32Src,/*=*/ u32Imm,1); … … 2807 2816 /* register operand */ 2808 2817 uint64_t u64Imm; IEM_OPCODE_GET_NEXT_S32_SX_U64(&u64Imm); 2818 IEM_MC_BEGIN(3, 1); 2809 2819 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 2810 2811 IEM_MC_BEGIN(3, 1);2812 2820 IEM_MC_ARG(uint64_t *, pu64Dst, 0); 2813 2821 IEM_MC_ARG_CONST(uint64_t, u64Src,/*=*/ u64Imm,1); … … 2863 2871 IEMOP_HLP_MIN_186(); 2864 2872 int8_t i8Imm; IEM_OPCODE_GET_NEXT_S8(&i8Imm); 2865 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();2866 2873 IEMOP_HLP_DEFAULT_64BIT_OP_SIZE(); 2867 2874 … … 2870 2877 case IEMMODE_16BIT: 2871 2878 IEM_MC_BEGIN(0,0); 2879 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 2872 2880 IEM_MC_PUSH_U16(i8Imm); 2873 2881 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 2876 2884 case IEMMODE_32BIT: 2877 2885 IEM_MC_BEGIN(0,0); 2886 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 2878 2887 IEM_MC_PUSH_U32(i8Imm); 2879 2888 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 2882 2891 case IEMMODE_64BIT: 2883 2892 IEM_MC_BEGIN(0,0); 2893 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 2884 2894 IEM_MC_PUSH_U64(i8Imm); 2885 2895 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 2910 2920 /* register operand */ 2911 2921 uint8_t u8Imm; IEM_OPCODE_GET_NEXT_U8(&u8Imm); 2922 IEM_MC_BEGIN(3, 1); 2912 2923 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 2913 2914 IEM_MC_BEGIN(3, 1);2915 2924 IEM_MC_ARG(uint16_t *, pu16Dst, 0); 2916 2925 IEM_MC_ARG_CONST(uint16_t, u16Src,/*=*/ (int8_t)u8Imm, 1); … … 2960 2969 /* register operand */ 2961 2970 uint8_t u8Imm; IEM_OPCODE_GET_NEXT_U8(&u8Imm); 2971 IEM_MC_BEGIN(3, 1); 2962 2972 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 2963 2964 IEM_MC_BEGIN(3, 1);2965 2973 IEM_MC_ARG(uint32_t *, pu32Dst, 0); 2966 2974 IEM_MC_ARG_CONST(uint32_t, u32Src,/*=*/ (int8_t)u8Imm, 1); … … 3010 3018 /* register operand */ 3011 3019 uint8_t u8Imm; IEM_OPCODE_GET_NEXT_U8(&u8Imm); 3020 IEM_MC_BEGIN(3, 1); 3012 3021 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 3013 3014 IEM_MC_BEGIN(3, 1);3015 3022 IEM_MC_ARG(uint64_t *, pu64Dst, 0); 3016 3023 IEM_MC_ARG_CONST(uint64_t, u64Src,/*=*/ (int8_t)u8Imm, 1); … … 3257 3264 IEMOP_MNEMONIC(jo_Jb, "jo Jb"); 3258 3265 int8_t i8Imm; IEM_OPCODE_GET_NEXT_S8(&i8Imm); 3259 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();3260 3266 IEMOP_HLP_DEFAULT_64BIT_OP_SIZE_AND_INTEL_IGNORES_OP_SIZE_PREFIX(); 3261 3267 3262 3268 IEM_MC_BEGIN(0, 0); 3269 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 3263 3270 IEM_MC_IF_EFL_BIT_SET(X86_EFL_OF) { 3264 3271 IEM_MC_REL_JMP_S8_AND_FINISH(i8Imm); … … 3277 3284 IEMOP_MNEMONIC(jno_Jb, "jno Jb"); 3278 3285 int8_t i8Imm; IEM_OPCODE_GET_NEXT_S8(&i8Imm); 3279 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();3280 3286 IEMOP_HLP_DEFAULT_64BIT_OP_SIZE_AND_INTEL_IGNORES_OP_SIZE_PREFIX(); 3281 3287 3282 3288 IEM_MC_BEGIN(0, 0); 3289 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 3283 3290 IEM_MC_IF_EFL_BIT_SET(X86_EFL_OF) { 3284 3291 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 3296 3303 IEMOP_MNEMONIC(jc_Jb, "jc/jnae Jb"); 3297 3304 int8_t i8Imm; IEM_OPCODE_GET_NEXT_S8(&i8Imm); 3298 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();3299 3305 IEMOP_HLP_DEFAULT_64BIT_OP_SIZE_AND_INTEL_IGNORES_OP_SIZE_PREFIX(); 3300 3306 3301 3307 IEM_MC_BEGIN(0, 0); 3308 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 3302 3309 IEM_MC_IF_EFL_BIT_SET(X86_EFL_CF) { 3303 3310 IEM_MC_REL_JMP_S8_AND_FINISH(i8Imm); … … 3316 3323 IEMOP_MNEMONIC(jnc_Jb, "jnc/jnb Jb"); 3317 3324 int8_t i8Imm; IEM_OPCODE_GET_NEXT_S8(&i8Imm); 3318 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();3319 3325 IEMOP_HLP_DEFAULT_64BIT_OP_SIZE_AND_INTEL_IGNORES_OP_SIZE_PREFIX(); 3320 3326 3321 3327 IEM_MC_BEGIN(0, 0); 3328 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 3322 3329 IEM_MC_IF_EFL_BIT_SET(X86_EFL_CF) { 3323 3330 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 3336 3343 IEMOP_MNEMONIC(je_Jb, "je/jz Jb"); 3337 3344 int8_t i8Imm; IEM_OPCODE_GET_NEXT_S8(&i8Imm); 3338 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();3339 3345 IEMOP_HLP_DEFAULT_64BIT_OP_SIZE_AND_INTEL_IGNORES_OP_SIZE_PREFIX(); 3340 3346 3341 3347 IEM_MC_BEGIN(0, 0); 3348 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 3342 3349 IEM_MC_IF_EFL_BIT_SET(X86_EFL_ZF) { 3343 3350 IEM_MC_REL_JMP_S8_AND_FINISH(i8Imm); … … 3356 3363 IEMOP_MNEMONIC(jne_Jb, "jne/jnz Jb"); 3357 3364 int8_t i8Imm; IEM_OPCODE_GET_NEXT_S8(&i8Imm); 3358 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();3359 3365 IEMOP_HLP_DEFAULT_64BIT_OP_SIZE_AND_INTEL_IGNORES_OP_SIZE_PREFIX(); 3360 3366 3361 3367 IEM_MC_BEGIN(0, 0); 3368 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 3362 3369 IEM_MC_IF_EFL_BIT_SET(X86_EFL_ZF) { 3363 3370 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 3376 3383 IEMOP_MNEMONIC(jbe_Jb, "jbe/jna Jb"); 3377 3384 int8_t i8Imm; IEM_OPCODE_GET_NEXT_S8(&i8Imm); 3378 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();3379 3385 IEMOP_HLP_DEFAULT_64BIT_OP_SIZE_AND_INTEL_IGNORES_OP_SIZE_PREFIX(); 3380 3386 3381 3387 IEM_MC_BEGIN(0, 0); 3388 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 3382 3389 IEM_MC_IF_EFL_ANY_BITS_SET(X86_EFL_CF | X86_EFL_ZF) { 3383 3390 IEM_MC_REL_JMP_S8_AND_FINISH(i8Imm); … … 3396 3403 IEMOP_MNEMONIC(ja_Jb, "ja/jnbe Jb"); 3397 3404 int8_t i8Imm; IEM_OPCODE_GET_NEXT_S8(&i8Imm); 3398 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();3399 3405 IEMOP_HLP_DEFAULT_64BIT_OP_SIZE_AND_INTEL_IGNORES_OP_SIZE_PREFIX(); 3400 3406 3401 3407 IEM_MC_BEGIN(0, 0); 3408 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 3402 3409 IEM_MC_IF_EFL_ANY_BITS_SET(X86_EFL_CF | X86_EFL_ZF) { 3403 3410 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 3416 3423 IEMOP_MNEMONIC(js_Jb, "js Jb"); 3417 3424 int8_t i8Imm; IEM_OPCODE_GET_NEXT_S8(&i8Imm); 3418 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();3419 3425 IEMOP_HLP_DEFAULT_64BIT_OP_SIZE_AND_INTEL_IGNORES_OP_SIZE_PREFIX(); 3420 3426 3421 3427 IEM_MC_BEGIN(0, 0); 3428 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 3422 3429 IEM_MC_IF_EFL_BIT_SET(X86_EFL_SF) { 3423 3430 IEM_MC_REL_JMP_S8_AND_FINISH(i8Imm); … … 3436 3443 IEMOP_MNEMONIC(jns_Jb, "jns Jb"); 3437 3444 int8_t i8Imm; IEM_OPCODE_GET_NEXT_S8(&i8Imm); 3438 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();3439 3445 IEMOP_HLP_DEFAULT_64BIT_OP_SIZE_AND_INTEL_IGNORES_OP_SIZE_PREFIX(); 3440 3446 3441 3447 IEM_MC_BEGIN(0, 0); 3448 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 3442 3449 IEM_MC_IF_EFL_BIT_SET(X86_EFL_SF) { 3443 3450 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 3456 3463 IEMOP_MNEMONIC(jp_Jb, "jp Jb"); 3457 3464 int8_t i8Imm; IEM_OPCODE_GET_NEXT_S8(&i8Imm); 3458 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();3459 3465 IEMOP_HLP_DEFAULT_64BIT_OP_SIZE_AND_INTEL_IGNORES_OP_SIZE_PREFIX(); 3460 3466 3461 3467 IEM_MC_BEGIN(0, 0); 3468 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 3462 3469 IEM_MC_IF_EFL_BIT_SET(X86_EFL_PF) { 3463 3470 IEM_MC_REL_JMP_S8_AND_FINISH(i8Imm); … … 3476 3483 IEMOP_MNEMONIC(jnp_Jb, "jnp Jb"); 3477 3484 int8_t i8Imm; IEM_OPCODE_GET_NEXT_S8(&i8Imm); 3478 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();3479 3485 IEMOP_HLP_DEFAULT_64BIT_OP_SIZE_AND_INTEL_IGNORES_OP_SIZE_PREFIX(); 3480 3486 3481 3487 IEM_MC_BEGIN(0, 0); 3488 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 3482 3489 IEM_MC_IF_EFL_BIT_SET(X86_EFL_PF) { 3483 3490 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 3496 3503 IEMOP_MNEMONIC(jl_Jb, "jl/jnge Jb"); 3497 3504 int8_t i8Imm; IEM_OPCODE_GET_NEXT_S8(&i8Imm); 3498 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();3499 3505 IEMOP_HLP_DEFAULT_64BIT_OP_SIZE_AND_INTEL_IGNORES_OP_SIZE_PREFIX(); 3500 3506 3501 3507 IEM_MC_BEGIN(0, 0); 3508 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 3502 3509 IEM_MC_IF_EFL_BITS_NE(X86_EFL_SF, X86_EFL_OF) { 3503 3510 IEM_MC_REL_JMP_S8_AND_FINISH(i8Imm); … … 3516 3523 IEMOP_MNEMONIC(jge_Jb, "jnl/jge Jb"); 3517 3524 int8_t i8Imm; IEM_OPCODE_GET_NEXT_S8(&i8Imm); 3518 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();3519 3525 IEMOP_HLP_DEFAULT_64BIT_OP_SIZE_AND_INTEL_IGNORES_OP_SIZE_PREFIX(); 3520 3526 3521 3527 IEM_MC_BEGIN(0, 0); 3528 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 3522 3529 IEM_MC_IF_EFL_BITS_NE(X86_EFL_SF, X86_EFL_OF) { 3523 3530 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 3536 3543 IEMOP_MNEMONIC(jle_Jb, "jle/jng Jb"); 3537 3544 int8_t i8Imm; IEM_OPCODE_GET_NEXT_S8(&i8Imm); 3538 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();3539 3545 IEMOP_HLP_DEFAULT_64BIT_OP_SIZE_AND_INTEL_IGNORES_OP_SIZE_PREFIX(); 3540 3546 3541 3547 IEM_MC_BEGIN(0, 0); 3548 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 3542 3549 IEM_MC_IF_EFL_BIT_SET_OR_BITS_NE(X86_EFL_ZF, X86_EFL_SF, X86_EFL_OF) { 3543 3550 IEM_MC_REL_JMP_S8_AND_FINISH(i8Imm); … … 3556 3563 IEMOP_MNEMONIC(jg_Jb, "jnle/jg Jb"); 3557 3564 int8_t i8Imm; IEM_OPCODE_GET_NEXT_S8(&i8Imm); 3558 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();3559 3565 IEMOP_HLP_DEFAULT_64BIT_OP_SIZE_AND_INTEL_IGNORES_OP_SIZE_PREFIX(); 3560 3566 3561 3567 IEM_MC_BEGIN(0, 0); 3568 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 3562 3569 IEM_MC_IF_EFL_BIT_SET_OR_BITS_NE(X86_EFL_ZF, X86_EFL_SF, X86_EFL_OF) { 3563 3570 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 3578 3585 /* register target */ \ 3579 3586 uint8_t u8Imm; IEM_OPCODE_GET_NEXT_U8(&u8Imm); \ 3587 IEM_MC_BEGIN(3, 0); \ 3580 3588 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 3581 IEM_MC_BEGIN(3, 0); \3582 3589 IEM_MC_ARG(uint8_t *, pu8Dst, 0); \ 3583 3590 IEM_MC_ARG_CONST(uint8_t, u8Src, /*=*/ u8Imm, 1); \ … … 3779 3786 { \ 3780 3787 uint16_t u16Imm; IEM_OPCODE_GET_NEXT_U16(&u16Imm); \ 3788 IEM_MC_BEGIN(3, 0); \ 3781 3789 IEMOP_HLP_DONE_DECODING(); \ 3782 IEM_MC_BEGIN(3, 0); \3783 3790 IEM_MC_ARG(uint16_t *, pu16Dst, 0); \ 3784 3791 IEM_MC_ARG_CONST(uint16_t, u16Src, /*=*/ u16Imm, 1); \ … … 3797 3804 { \ 3798 3805 uint32_t u32Imm; IEM_OPCODE_GET_NEXT_U32(&u32Imm); \ 3806 IEM_MC_BEGIN(3, 0); \ 3799 3807 IEMOP_HLP_DONE_DECODING(); \ 3800 IEM_MC_BEGIN(3, 0); \3801 3808 IEM_MC_ARG(uint32_t *, pu32Dst, 0); \ 3802 3809 IEM_MC_ARG_CONST(uint32_t, u32Src, /*=*/ u32Imm, 1); \ … … 3817 3824 { \ 3818 3825 uint64_t u64Imm; IEM_OPCODE_GET_NEXT_S32_SX_U64(&u64Imm); \ 3826 IEM_MC_BEGIN(3, 0); \ 3819 3827 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 3820 IEM_MC_BEGIN(3, 0); \3821 3828 IEM_MC_ARG(uint64_t *, pu64Dst, 0); \ 3822 3829 IEM_MC_ARG_CONST(uint64_t, u64Src, /*=*/ u64Imm, 1); \ … … 4143 4150 * Register target \ 4144 4151 */ \ 4145 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \4146 4152 uint8_t u8Imm; IEM_OPCODE_GET_NEXT_U8(&u8Imm); \ 4147 4153 switch (pVCpu->iem.s.enmEffOpSize) \ … … 4150 4156 { \ 4151 4157 IEM_MC_BEGIN(3, 0); \ 4158 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 4152 4159 IEM_MC_ARG(uint16_t *, pu16Dst, 0); \ 4153 4160 IEM_MC_ARG_CONST(uint16_t, u16Src, /*=*/ (int8_t)u8Imm,1); \ … … 4166 4173 { \ 4167 4174 IEM_MC_BEGIN(3, 0); \ 4175 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 4168 4176 IEM_MC_ARG(uint32_t *, pu32Dst, 0); \ 4169 4177 IEM_MC_ARG_CONST(uint32_t, u32Src, /*=*/ (int8_t)u8Imm,1); \ … … 4184 4192 { \ 4185 4193 IEM_MC_BEGIN(3, 0); \ 4194 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 4186 4195 IEM_MC_ARG(uint64_t *, pu64Dst, 0); \ 4187 4196 IEM_MC_ARG_CONST(uint64_t, u64Src, /*=*/ (int8_t)u8Imm,1); \ … … 4527 4536 if (IEM_IS_MODRM_REG_MODE(bRm)) 4528 4537 { 4538 IEM_MC_BEGIN(0, 2); 4529 4539 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 4530 4531 IEM_MC_BEGIN(0, 2);4532 4540 IEM_MC_LOCAL(uint8_t, uTmp1); 4533 4541 IEM_MC_LOCAL(uint8_t, uTmp2); … … 4553 4561 4554 4562 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 4563 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 4555 4564 IEM_MC_MEM_MAP(pu8Mem, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/); 4556 4565 IEM_MC_REF_GREG_U8(pu8Reg, IEM_GET_MODRM_REG(pVCpu, bRm)); … … 4580 4589 if (IEM_IS_MODRM_REG_MODE(bRm)) 4581 4590 { 4582 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();4583 4584 4591 switch (pVCpu->iem.s.enmEffOpSize) 4585 4592 { 4586 4593 case IEMMODE_16BIT: 4587 4594 IEM_MC_BEGIN(0, 2); 4595 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 4588 4596 IEM_MC_LOCAL(uint16_t, uTmp1); 4589 4597 IEM_MC_LOCAL(uint16_t, uTmp2); … … 4600 4608 case IEMMODE_32BIT: 4601 4609 IEM_MC_BEGIN(0, 2); 4610 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 4602 4611 IEM_MC_LOCAL(uint32_t, uTmp1); 4603 4612 IEM_MC_LOCAL(uint32_t, uTmp2); … … 4614 4623 case IEMMODE_64BIT: 4615 4624 IEM_MC_BEGIN(0, 2); 4625 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 4616 4626 IEM_MC_LOCAL(uint64_t, uTmp1); 4617 4627 IEM_MC_LOCAL(uint64_t, uTmp2); … … 4644 4654 4645 4655 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 4656 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 4646 4657 IEM_MC_MEM_MAP(pu16Mem, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/); 4647 4658 IEM_MC_REF_GREG_U16(pu16Reg, IEM_GET_MODRM_REG(pVCpu, bRm)); … … 4663 4674 4664 4675 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 4676 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 4665 4677 IEM_MC_MEM_MAP(pu32Mem, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/); 4666 4678 IEM_MC_REF_GREG_U32(pu32Reg, IEM_GET_MODRM_REG(pVCpu, bRm)); … … 4683 4695 4684 4696 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 4697 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 4685 4698 IEM_MC_MEM_MAP(pu64Mem, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/); 4686 4699 IEM_MC_REF_GREG_U64(pu64Reg, IEM_GET_MODRM_REG(pVCpu, bRm)); … … 4716 4729 if (IEM_IS_MODRM_REG_MODE(bRm)) 4717 4730 { 4731 IEM_MC_BEGIN(0, 1); 4718 4732 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 4719 IEM_MC_BEGIN(0, 1);4720 4733 IEM_MC_LOCAL(uint8_t, u8Value); 4721 4734 IEM_MC_FETCH_GREG_U8(u8Value, IEM_GET_MODRM_REG(pVCpu, bRm)); … … 4756 4769 if (IEM_IS_MODRM_REG_MODE(bRm)) 4757 4770 { 4758 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();4759 4771 switch (pVCpu->iem.s.enmEffOpSize) 4760 4772 { 4761 4773 case IEMMODE_16BIT: 4762 4774 IEM_MC_BEGIN(0, 1); 4775 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 4763 4776 IEM_MC_LOCAL(uint16_t, u16Value); 4764 4777 IEM_MC_FETCH_GREG_U16(u16Value, IEM_GET_MODRM_REG(pVCpu, bRm)); … … 4770 4783 case IEMMODE_32BIT: 4771 4784 IEM_MC_BEGIN(0, 1); 4785 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 4772 4786 IEM_MC_LOCAL(uint32_t, u32Value); 4773 4787 IEM_MC_FETCH_GREG_U32(u32Value, IEM_GET_MODRM_REG(pVCpu, bRm)); … … 4779 4793 case IEMMODE_64BIT: 4780 4794 IEM_MC_BEGIN(0, 1); 4795 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 4781 4796 IEM_MC_LOCAL(uint64_t, u64Value); 4782 4797 IEM_MC_FETCH_GREG_U64(u64Value, IEM_GET_MODRM_REG(pVCpu, bRm)); … … 4852 4867 if (IEM_IS_MODRM_REG_MODE(bRm)) 4853 4868 { 4869 IEM_MC_BEGIN(0, 1); 4854 4870 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 4855 IEM_MC_BEGIN(0, 1);4856 4871 IEM_MC_LOCAL(uint8_t, u8Value); 4857 4872 IEM_MC_FETCH_GREG_U8(u8Value, IEM_GET_MODRM_RM(pVCpu, bRm)); … … 4892 4907 if (IEM_IS_MODRM_REG_MODE(bRm)) 4893 4908 { 4894 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();4895 4909 switch (pVCpu->iem.s.enmEffOpSize) 4896 4910 { 4897 4911 case IEMMODE_16BIT: 4898 4912 IEM_MC_BEGIN(0, 1); 4913 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 4899 4914 IEM_MC_LOCAL(uint16_t, u16Value); 4900 4915 IEM_MC_FETCH_GREG_U16(u16Value, IEM_GET_MODRM_RM(pVCpu, bRm)); … … 4906 4921 case IEMMODE_32BIT: 4907 4922 IEM_MC_BEGIN(0, 1); 4923 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 4908 4924 IEM_MC_LOCAL(uint32_t, u32Value); 4909 4925 IEM_MC_FETCH_GREG_U32(u32Value, IEM_GET_MODRM_RM(pVCpu, bRm)); … … 4915 4931 case IEMMODE_64BIT: 4916 4932 IEM_MC_BEGIN(0, 1); 4933 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 4917 4934 IEM_MC_LOCAL(uint64_t, u64Value); 4918 4935 IEM_MC_FETCH_GREG_U64(u64Value, IEM_GET_MODRM_RM(pVCpu, bRm)); … … 5011 5028 if (IEM_IS_MODRM_REG_MODE(bRm)) 5012 5029 { 5013 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();5014 5030 switch (pVCpu->iem.s.enmEffOpSize) 5015 5031 { 5016 5032 case IEMMODE_16BIT: 5017 5033 IEM_MC_BEGIN(0, 1); 5034 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 5018 5035 IEM_MC_LOCAL(uint16_t, u16Value); 5019 5036 IEM_MC_FETCH_SREG_U16(u16Value, iSegReg); … … 5025 5042 case IEMMODE_32BIT: 5026 5043 IEM_MC_BEGIN(0, 1); 5044 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 5027 5045 IEM_MC_LOCAL(uint32_t, u32Value); 5028 5046 IEM_MC_FETCH_SREG_ZX_U32(u32Value, iSegReg); … … 5034 5052 case IEMMODE_64BIT: 5035 5053 IEM_MC_BEGIN(0, 1); 5054 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 5036 5055 IEM_MC_LOCAL(uint64_t, u64Value); 5037 5056 IEM_MC_FETCH_SREG_ZX_U64(u64Value, iSegReg); … … 5149 5168 if (IEM_IS_MODRM_REG_MODE(bRm)) 5150 5169 { 5170 IEM_MC_BEGIN(2, 0); 5151 5171 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 5152 IEM_MC_BEGIN(2, 0);5153 5172 IEM_MC_ARG_CONST(uint8_t, iSRegArg, iSegReg, 0); 5154 5173 IEM_MC_ARG(uint16_t, u16Value, 1); … … 5390 5409 FNIEMOP_DEF_1(iemOpCommonXchgGRegRax, uint8_t, iReg) 5391 5410 { 5392 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();5393 5394 5411 iReg |= pVCpu->iem.s.uRexB; 5395 5412 switch (pVCpu->iem.s.enmEffOpSize) … … 5397 5414 case IEMMODE_16BIT: 5398 5415 IEM_MC_BEGIN(0, 2); 5416 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 5399 5417 IEM_MC_LOCAL(uint16_t, u16Tmp1); 5400 5418 IEM_MC_LOCAL(uint16_t, u16Tmp2); … … 5409 5427 case IEMMODE_32BIT: 5410 5428 IEM_MC_BEGIN(0, 2); 5429 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 5411 5430 IEM_MC_LOCAL(uint32_t, u32Tmp1); 5412 5431 IEM_MC_LOCAL(uint32_t, u32Tmp2); … … 5421 5440 case IEMMODE_64BIT: 5422 5441 IEM_MC_BEGIN(0, 2); 5442 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 5423 5443 IEM_MC_LOCAL(uint64_t, u64Tmp1); 5424 5444 IEM_MC_LOCAL(uint64_t, u64Tmp2); … … 5466 5486 else 5467 5487 IEMOP_MNEMONIC(nop, "nop"); 5488 /** @todo testcase: lock nop; lock pause */ 5468 5489 IEM_MC_BEGIN(0, 0); 5490 IEMOP_HLP_DONE_DECODING(); 5469 5491 IEM_MC_ADVANCE_RIP_AND_FINISH(); 5470 5492 IEM_MC_END(); … … 5547 5569 FNIEMOP_DEF(iemOp_cbw) 5548 5570 { 5549 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();5550 5571 switch (pVCpu->iem.s.enmEffOpSize) 5551 5572 { … … 5553 5574 IEMOP_MNEMONIC(cbw, "cbw"); 5554 5575 IEM_MC_BEGIN(0, 1); 5576 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 5555 5577 IEM_MC_IF_GREG_BIT_SET(X86_GREG_xAX, 7) { 5556 5578 IEM_MC_OR_GREG_U16(X86_GREG_xAX, UINT16_C(0xff00)); … … 5565 5587 IEMOP_MNEMONIC(cwde, "cwde"); 5566 5588 IEM_MC_BEGIN(0, 1); 5589 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 5567 5590 IEM_MC_IF_GREG_BIT_SET(X86_GREG_xAX, 15) { 5568 5591 IEM_MC_OR_GREG_U32(X86_GREG_xAX, UINT32_C(0xffff0000)); … … 5577 5600 IEMOP_MNEMONIC(cdqe, "cdqe"); 5578 5601 IEM_MC_BEGIN(0, 1); 5602 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 5579 5603 IEM_MC_IF_GREG_BIT_SET(X86_GREG_xAX, 31) { 5580 5604 IEM_MC_OR_GREG_U64(X86_GREG_xAX, UINT64_C(0xffffffff00000000)); … … 5596 5620 FNIEMOP_DEF(iemOp_cwd) 5597 5621 { 5598 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();5599 5622 switch (pVCpu->iem.s.enmEffOpSize) 5600 5623 { … … 5602 5625 IEMOP_MNEMONIC(cwd, "cwd"); 5603 5626 IEM_MC_BEGIN(0, 1); 5627 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 5604 5628 IEM_MC_IF_GREG_BIT_SET(X86_GREG_xAX, 15) { 5605 5629 IEM_MC_STORE_GREG_U16_CONST(X86_GREG_xDX, UINT16_C(0xffff)); … … 5614 5638 IEMOP_MNEMONIC(cdq, "cdq"); 5615 5639 IEM_MC_BEGIN(0, 1); 5640 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 5616 5641 IEM_MC_IF_GREG_BIT_SET(X86_GREG_xAX, 31) { 5617 5642 IEM_MC_STORE_GREG_U32_CONST(X86_GREG_xDX, UINT32_C(0xffffffff)); … … 5626 5651 IEMOP_MNEMONIC(cqo, "cqo"); 5627 5652 IEM_MC_BEGIN(0, 1); 5653 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 5628 5654 IEM_MC_IF_GREG_BIT_SET(X86_GREG_xAX, 63) { 5629 5655 IEM_MC_STORE_GREG_U64_CONST(X86_GREG_xDX, UINT64_C(0xffffffffffffffff)); … … 5665 5691 { 5666 5692 IEMOP_MNEMONIC(wait, "wait"); 5667 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();5668 5669 5693 IEM_MC_BEGIN(0, 0); 5694 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 5670 5695 IEM_MC_MAYBE_RAISE_WAIT_DEVICE_NOT_AVAILABLE(); 5671 5696 IEM_MC_MAYBE_RAISE_FPU_XCPT(); … … 5705 5730 { 5706 5731 IEMOP_MNEMONIC(sahf, "sahf"); 5707 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();5708 5732 if ( IEM_IS_64BIT_CODE(pVCpu) 5709 5733 && !IEM_GET_GUEST_CPU_FEATURES(pVCpu)->fLahfSahf) 5710 5734 IEMOP_RAISE_INVALID_OPCODE_RET(); 5711 5735 IEM_MC_BEGIN(0, 2); 5736 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 5712 5737 IEM_MC_LOCAL(uint32_t, u32Flags); 5713 5738 IEM_MC_LOCAL(uint32_t, EFlags); … … 5730 5755 { 5731 5756 IEMOP_MNEMONIC(lahf, "lahf"); 5732 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();5733 5757 if ( IEM_IS_64BIT_CODE(pVCpu) 5734 5758 && !IEM_GET_GUEST_CPU_FEATURES(pVCpu)->fLahfSahf) 5735 5759 IEMOP_RAISE_INVALID_OPCODE_RET(); 5736 5760 IEM_MC_BEGIN(0, 1); 5761 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 5737 5762 IEM_MC_LOCAL(uint8_t, u8Flags); 5738 5763 IEM_MC_FETCH_EFLAGS_U8(u8Flags); … … 5745 5770 /** 5746 5771 * Macro used by iemOp_mov_AL_Ob, iemOp_mov_rAX_Ov, iemOp_mov_Ob_AL and 5747 * iemOp_mov_Ov_rAX to fetch the moffsXX bit of the opcode and fend off lock5748 * prefixes. Will returnon failures.5772 * iemOp_mov_Ov_rAX to fetch the moffsXX bit of the opcode. 5773 * Will return/throw on failures. 5749 5774 * @param a_GCPtrMemOff The variable to store the offset in. 5750 5775 */ … … 5765 5790 IEM_NOT_REACHED_DEFAULT_CASE_RET(); \ 5766 5791 } \ 5767 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \5768 5792 } while (0) 5769 5793 … … 5774 5798 { 5775 5799 /* 5776 * Get the offset and fend off lock prefixes.5800 * Get the offset. 5777 5801 */ 5778 5802 IEMOP_MNEMONIC(mov_AL_Ob, "mov AL,Ob"); … … 5784 5808 */ 5785 5809 IEM_MC_BEGIN(0,1); 5810 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 5786 5811 IEM_MC_LOCAL(uint8_t, u8Tmp); 5787 5812 IEM_MC_FETCH_MEM_U8(u8Tmp, pVCpu->iem.s.iEffSeg, GCPtrMemOff); … … 5798 5823 { 5799 5824 /* 5800 * Get the offset and fend off lock prefixes.5825 * Get the offset. 5801 5826 */ 5802 5827 IEMOP_MNEMONIC(mov_rAX_Ov, "mov rAX,Ov"); … … 5811 5836 case IEMMODE_16BIT: 5812 5837 IEM_MC_BEGIN(0,1); 5838 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 5813 5839 IEM_MC_LOCAL(uint16_t, u16Tmp); 5814 5840 IEM_MC_FETCH_MEM_U16(u16Tmp, pVCpu->iem.s.iEffSeg, GCPtrMemOff); … … 5820 5846 case IEMMODE_32BIT: 5821 5847 IEM_MC_BEGIN(0,1); 5848 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 5822 5849 IEM_MC_LOCAL(uint32_t, u32Tmp); 5823 5850 IEM_MC_FETCH_MEM_U32(u32Tmp, pVCpu->iem.s.iEffSeg, GCPtrMemOff); … … 5829 5856 case IEMMODE_64BIT: 5830 5857 IEM_MC_BEGIN(0,1); 5858 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 5831 5859 IEM_MC_LOCAL(uint64_t, u64Tmp); 5832 5860 IEM_MC_FETCH_MEM_U64(u64Tmp, pVCpu->iem.s.iEffSeg, GCPtrMemOff); … … 5847 5875 { 5848 5876 /* 5849 * Get the offset and fend off lock prefixes.5877 * Get the offset. 5850 5878 */ 5851 5879 IEMOP_MNEMONIC(mov_Ob_AL, "mov Ob,AL"); … … 5857 5885 */ 5858 5886 IEM_MC_BEGIN(0,1); 5887 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 5859 5888 IEM_MC_LOCAL(uint8_t, u8Tmp); 5860 5889 IEM_MC_FETCH_GREG_U8(u8Tmp, X86_GREG_xAX); … … 5871 5900 { 5872 5901 /* 5873 * Get the offset and fend off lock prefixes.5902 * Get the offset. 5874 5903 */ 5875 5904 IEMOP_MNEMONIC(mov_Ov_rAX, "mov Ov,rAX"); … … 5884 5913 case IEMMODE_16BIT: 5885 5914 IEM_MC_BEGIN(0,1); 5915 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 5886 5916 IEM_MC_LOCAL(uint16_t, u16Tmp); 5887 5917 IEM_MC_FETCH_GREG_U16(u16Tmp, X86_GREG_xAX); … … 5893 5923 case IEMMODE_32BIT: 5894 5924 IEM_MC_BEGIN(0,1); 5925 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 5895 5926 IEM_MC_LOCAL(uint32_t, u32Tmp); 5896 5927 IEM_MC_FETCH_GREG_U32(u32Tmp, X86_GREG_xAX); … … 5902 5933 case IEMMODE_64BIT: 5903 5934 IEM_MC_BEGIN(0,1); 5935 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 5904 5936 IEM_MC_LOCAL(uint64_t, u64Tmp); 5905 5937 IEM_MC_FETCH_GREG_U64(u64Tmp, X86_GREG_xAX); … … 5916 5948 #define IEM_MOVS_CASE(ValBits, AddrBits) \ 5917 5949 IEM_MC_BEGIN(0, 2); \ 5950 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 5918 5951 IEM_MC_LOCAL(uint##ValBits##_t, uValue); \ 5919 5952 IEM_MC_LOCAL(RTGCPTR, uAddr); \ … … 5937 5970 FNIEMOP_DEF(iemOp_movsb_Xb_Yb) 5938 5971 { 5939 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();5940 5941 5972 /* 5942 5973 * Use the C implementation if a repeat prefix is encountered. … … 5945 5976 { 5946 5977 IEMOP_MNEMONIC(rep_movsb_Xb_Yb, "rep movsb Xb,Yb"); 5978 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 5947 5979 switch (pVCpu->iem.s.enmEffAddrMode) 5948 5980 { … … 5953 5985 } 5954 5986 } 5955 IEMOP_MNEMONIC(movsb_Xb_Yb, "movsb Xb,Yb");5956 5987 5957 5988 /* 5958 5989 * Sharing case implementation with movs[wdq] below. 5959 5990 */ 5991 IEMOP_MNEMONIC(movsb_Xb_Yb, "movsb Xb,Yb"); 5960 5992 switch (pVCpu->iem.s.enmEffAddrMode) 5961 5993 { … … 5973 6005 FNIEMOP_DEF(iemOp_movswd_Xv_Yv) 5974 6006 { 5975 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();5976 6007 5977 6008 /* … … 5981 6012 { 5982 6013 IEMOP_MNEMONIC(rep_movs_Xv_Yv, "rep movs Xv,Yv"); 6014 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 5983 6015 switch (pVCpu->iem.s.enmEffOpSize) 5984 6016 { … … 6011 6043 } 6012 6044 } 6013 IEMOP_MNEMONIC(movs_Xv_Yv, "movs Xv,Yv");6014 6045 6015 6046 /* … … 6017 6048 * Using ugly macro for implementing the cases, sharing it with movsb. 6018 6049 */ 6050 IEMOP_MNEMONIC(movs_Xv_Yv, "movs Xv,Yv"); 6019 6051 switch (pVCpu->iem.s.enmEffOpSize) 6020 6052 { … … 6057 6089 #define IEM_CMPS_CASE(ValBits, AddrBits) \ 6058 6090 IEM_MC_BEGIN(3, 3); \ 6091 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 6059 6092 IEM_MC_ARG(uint##ValBits##_t *, puValue1, 0); \ 6060 6093 IEM_MC_ARG(uint##ValBits##_t, uValue2, 1); \ … … 6086 6119 FNIEMOP_DEF(iemOp_cmpsb_Xb_Yb) 6087 6120 { 6088 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();6089 6121 6090 6122 /* … … 6094 6126 { 6095 6127 IEMOP_MNEMONIC(repz_cmps_Xb_Yb, "repz cmps Xb,Yb"); 6128 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 6096 6129 switch (pVCpu->iem.s.enmEffAddrMode) 6097 6130 { … … 6105 6138 { 6106 6139 IEMOP_MNEMONIC(repnz_cmps_Xb_Yb, "repnz cmps Xb,Yb"); 6140 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 6107 6141 switch (pVCpu->iem.s.enmEffAddrMode) 6108 6142 { … … 6113 6147 } 6114 6148 } 6115 IEMOP_MNEMONIC(cmps_Xb_Yb, "cmps Xb,Yb");6116 6149 6117 6150 /* 6118 6151 * Sharing case implementation with cmps[wdq] below. 6119 6152 */ 6153 IEMOP_MNEMONIC(cmps_Xb_Yb, "cmps Xb,Yb"); 6120 6154 switch (pVCpu->iem.s.enmEffAddrMode) 6121 6155 { … … 6133 6167 FNIEMOP_DEF(iemOp_cmpswd_Xv_Yv) 6134 6168 { 6135 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();6136 6137 6169 /* 6138 6170 * Use the C implementation if a repeat prefix is encountered. … … 6141 6173 { 6142 6174 IEMOP_MNEMONIC(repe_cmps_Xv_Yv, "repe cmps Xv,Yv"); 6175 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 6143 6176 switch (pVCpu->iem.s.enmEffOpSize) 6144 6177 { … … 6175 6208 { 6176 6209 IEMOP_MNEMONIC(repne_cmps_Xv_Yv, "repne cmps Xv,Yv"); 6210 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 6177 6211 switch (pVCpu->iem.s.enmEffOpSize) 6178 6212 { … … 6206 6240 } 6207 6241 6208 IEMOP_MNEMONIC(cmps_Xv_Yv, "cmps Xv,Yv");6209 6210 6242 /* 6211 6243 * Annoying double switch here. 6212 6244 * Using ugly macro for implementing the cases, sharing it with cmpsb. 6213 6245 */ 6246 IEMOP_MNEMONIC(cmps_Xv_Yv, "cmps Xv,Yv"); 6214 6247 switch (pVCpu->iem.s.enmEffOpSize) 6215 6248 { … … 6274 6307 #define IEM_STOS_CASE(ValBits, AddrBits) \ 6275 6308 IEM_MC_BEGIN(0, 2); \ 6309 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 6276 6310 IEM_MC_LOCAL(uint##ValBits##_t, uValue); \ 6277 6311 IEM_MC_LOCAL(RTGCPTR, uAddr); \ … … 6292 6326 FNIEMOP_DEF(iemOp_stosb_Yb_AL) 6293 6327 { 6294 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();6295 6296 6328 /* 6297 6329 * Use the C implementation if a repeat prefix is encountered. … … 6300 6332 { 6301 6333 IEMOP_MNEMONIC(rep_stos_Yb_al, "rep stos Yb,al"); 6334 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 6302 6335 switch (pVCpu->iem.s.enmEffAddrMode) 6303 6336 { … … 6308 6341 } 6309 6342 } 6310 IEMOP_MNEMONIC(stos_Yb_al, "stos Yb,al");6311 6343 6312 6344 /* 6313 6345 * Sharing case implementation with stos[wdq] below. 6314 6346 */ 6347 IEMOP_MNEMONIC(stos_Yb_al, "stos Yb,al"); 6315 6348 switch (pVCpu->iem.s.enmEffAddrMode) 6316 6349 { … … 6328 6361 FNIEMOP_DEF(iemOp_stoswd_Yv_eAX) 6329 6362 { 6330 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();6331 6332 6363 /* 6333 6364 * Use the C implementation if a repeat prefix is encountered. … … 6336 6367 { 6337 6368 IEMOP_MNEMONIC(rep_stos_Yv_rAX, "rep stos Yv,rAX"); 6369 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 6338 6370 switch (pVCpu->iem.s.enmEffOpSize) 6339 6371 { … … 6366 6398 } 6367 6399 } 6368 IEMOP_MNEMONIC(stos_Yv_rAX, "stos Yv,rAX");6369 6400 6370 6401 /* … … 6372 6403 * Using ugly macro for implementing the cases, sharing it with stosb. 6373 6404 */ 6405 IEMOP_MNEMONIC(stos_Yv_rAX, "stos Yv,rAX"); 6374 6406 switch (pVCpu->iem.s.enmEffOpSize) 6375 6407 { … … 6412 6444 #define IEM_LODS_CASE(ValBits, AddrBits) \ 6413 6445 IEM_MC_BEGIN(0, 2); \ 6446 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 6414 6447 IEM_MC_LOCAL(uint##ValBits##_t, uValue); \ 6415 6448 IEM_MC_LOCAL(RTGCPTR, uAddr); \ … … 6430 6463 FNIEMOP_DEF(iemOp_lodsb_AL_Xb) 6431 6464 { 6432 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();6433 6434 6465 /* 6435 6466 * Use the C implementation if a repeat prefix is encountered. … … 6438 6469 { 6439 6470 IEMOP_MNEMONIC(rep_lodsb_AL_Xb, "rep lodsb AL,Xb"); 6471 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 6440 6472 switch (pVCpu->iem.s.enmEffAddrMode) 6441 6473 { … … 6446 6478 } 6447 6479 } 6448 IEMOP_MNEMONIC(lodsb_AL_Xb, "lodsb AL,Xb");6449 6480 6450 6481 /* 6451 6482 * Sharing case implementation with stos[wdq] below. 6452 6483 */ 6484 IEMOP_MNEMONIC(lodsb_AL_Xb, "lodsb AL,Xb"); 6453 6485 switch (pVCpu->iem.s.enmEffAddrMode) 6454 6486 { … … 6466 6498 FNIEMOP_DEF(iemOp_lodswd_eAX_Xv) 6467 6499 { 6468 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();6469 6470 6500 /* 6471 6501 * Use the C implementation if a repeat prefix is encountered. … … 6474 6504 { 6475 6505 IEMOP_MNEMONIC(rep_lods_rAX_Xv, "rep lods rAX,Xv"); 6506 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 6476 6507 switch (pVCpu->iem.s.enmEffOpSize) 6477 6508 { … … 6504 6535 } 6505 6536 } 6506 IEMOP_MNEMONIC(lods_rAX_Xv, "lods rAX,Xv");6507 6537 6508 6538 /* … … 6510 6540 * Using ugly macro for implementing the cases, sharing it with lodsb. 6511 6541 */ 6542 IEMOP_MNEMONIC(lods_rAX_Xv, "lods rAX,Xv"); 6512 6543 switch (pVCpu->iem.s.enmEffOpSize) 6513 6544 { … … 6550 6581 #define IEM_SCAS_CASE(ValBits, AddrBits) \ 6551 6582 IEM_MC_BEGIN(3, 2); \ 6583 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 6552 6584 IEM_MC_ARG(uint##ValBits##_t *, puRax, 0); \ 6553 6585 IEM_MC_ARG(uint##ValBits##_t, uValue, 1); \ … … 6574 6606 FNIEMOP_DEF(iemOp_scasb_AL_Xb) 6575 6607 { 6576 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();6577 6578 6608 /* 6579 6609 * Use the C implementation if a repeat prefix is encountered. … … 6582 6612 { 6583 6613 IEMOP_MNEMONIC(repe_scasb_AL_Xb, "repe scasb AL,Xb"); 6614 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 6584 6615 switch (pVCpu->iem.s.enmEffAddrMode) 6585 6616 { … … 6593 6624 { 6594 6625 IEMOP_MNEMONIC(repone_scasb_AL_Xb, "repne scasb AL,Xb"); 6626 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 6595 6627 switch (pVCpu->iem.s.enmEffAddrMode) 6596 6628 { … … 6601 6633 } 6602 6634 } 6603 IEMOP_MNEMONIC(scasb_AL_Xb, "scasb AL,Xb");6604 6635 6605 6636 /* 6606 6637 * Sharing case implementation with stos[wdq] below. 6607 6638 */ 6639 IEMOP_MNEMONIC(scasb_AL_Xb, "scasb AL,Xb"); 6608 6640 switch (pVCpu->iem.s.enmEffAddrMode) 6609 6641 { … … 6621 6653 FNIEMOP_DEF(iemOp_scaswd_eAX_Xv) 6622 6654 { 6623 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();6624 6625 6655 /* 6626 6656 * Use the C implementation if a repeat prefix is encountered. … … 6629 6659 { 6630 6660 IEMOP_MNEMONIC(repe_scas_rAX_Xv, "repe scas rAX,Xv"); 6661 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 6631 6662 switch (pVCpu->iem.s.enmEffOpSize) 6632 6663 { … … 6662 6693 { 6663 6694 IEMOP_MNEMONIC(repne_scas_rAX_Xv, "repne scas rAX,Xv"); 6695 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 6664 6696 switch (pVCpu->iem.s.enmEffOpSize) 6665 6697 { … … 6692 6724 } 6693 6725 } 6694 IEMOP_MNEMONIC(scas_rAX_Xv, "scas rAX,Xv");6695 6726 6696 6727 /* … … 6698 6729 * Using ugly macro for implementing the cases, sharing it with scasb. 6699 6730 */ 6731 IEMOP_MNEMONIC(scas_rAX_Xv, "scas rAX,Xv"); 6700 6732 switch (pVCpu->iem.s.enmEffOpSize) 6701 6733 { … … 6741 6773 { 6742 6774 uint8_t u8Imm; IEM_OPCODE_GET_NEXT_U8(&u8Imm); 6743 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();6744 6745 6775 IEM_MC_BEGIN(0, 1); 6776 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 6746 6777 IEM_MC_LOCAL_CONST(uint8_t, u8Value,/*=*/ u8Imm); 6747 6778 IEM_MC_STORE_GREG_U8(iFixedReg, u8Value); … … 6841 6872 { 6842 6873 uint16_t u16Imm; IEM_OPCODE_GET_NEXT_U16(&u16Imm); 6874 IEM_MC_BEGIN(0, 1); 6843 6875 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 6844 6845 IEM_MC_BEGIN(0, 1);6846 6876 IEM_MC_LOCAL_CONST(uint16_t, u16Value,/*=*/ u16Imm); 6847 6877 IEM_MC_STORE_GREG_U16(iFixedReg, u16Value); … … 6854 6884 { 6855 6885 uint32_t u32Imm; IEM_OPCODE_GET_NEXT_U32(&u32Imm); 6886 IEM_MC_BEGIN(0, 1); 6856 6887 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 6857 6858 IEM_MC_BEGIN(0, 1);6859 6888 IEM_MC_LOCAL_CONST(uint32_t, u32Value,/*=*/ u32Imm); 6860 6889 IEM_MC_STORE_GREG_U32(iFixedReg, u32Value); … … 6866 6895 { 6867 6896 uint64_t u64Imm; IEM_OPCODE_GET_NEXT_U64(&u64Imm); /* 64-bit immediate! */ 6897 IEM_MC_BEGIN(0, 1); 6868 6898 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 6869 6870 IEM_MC_BEGIN(0, 1);6871 6899 IEM_MC_LOCAL_CONST(uint64_t, u64Value,/*=*/ u64Imm); 6872 6900 IEM_MC_STORE_GREG_U64(iFixedReg, u64Value); … … 6986 7014 /* register */ 6987 7015 uint8_t cShift; IEM_OPCODE_GET_NEXT_U8(&cShift); 7016 IEM_MC_BEGIN(3, 0); 6988 7017 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 6989 IEM_MC_BEGIN(3, 0);6990 7018 IEM_MC_ARG(uint8_t *, pu8Dst, 0); 6991 7019 IEM_MC_ARG_CONST(uint8_t, cShiftArg, cShift, 1); … … 7048 7076 /* register */ 7049 7077 uint8_t cShift; IEM_OPCODE_GET_NEXT_U8(&cShift); 7050 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();7051 7078 switch (pVCpu->iem.s.enmEffOpSize) 7052 7079 { 7053 7080 case IEMMODE_16BIT: 7054 7081 IEM_MC_BEGIN(3, 0); 7082 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 7055 7083 IEM_MC_ARG(uint16_t *, pu16Dst, 0); 7056 7084 IEM_MC_ARG_CONST(uint8_t, cShiftArg, cShift, 1); … … 7065 7093 case IEMMODE_32BIT: 7066 7094 IEM_MC_BEGIN(3, 0); 7095 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 7067 7096 IEM_MC_ARG(uint32_t *, pu32Dst, 0); 7068 7097 IEM_MC_ARG_CONST(uint8_t, cShiftArg, cShift, 1); … … 7078 7107 case IEMMODE_64BIT: 7079 7108 IEM_MC_BEGIN(3, 0); 7109 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 7080 7110 IEM_MC_ARG(uint64_t *, pu64Dst, 0); 7081 7111 IEM_MC_ARG_CONST(uint8_t, cShiftArg, cShift, 1); … … 7338 7368 /* register access */ 7339 7369 uint8_t u8Imm; IEM_OPCODE_GET_NEXT_U8(&u8Imm); 7370 IEM_MC_BEGIN(0, 0); 7340 7371 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 7341 IEM_MC_BEGIN(0, 0);7342 7372 IEM_MC_STORE_GREG_U8(IEM_GET_MODRM_RM(pVCpu, bRm), u8Imm); 7343 7373 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 7574 7604 { 7575 7605 /* register */ 7606 IEM_MC_BEGIN(3, 0); 7576 7607 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 7577 IEM_MC_BEGIN(3, 0);7578 7608 IEM_MC_ARG(uint8_t *, pu8Dst, 0); 7579 7609 IEM_MC_ARG_CONST(uint8_t, cShiftArg,/*=*/1, 1); … … 7633 7663 { 7634 7664 /* register */ 7635 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();7636 7665 switch (pVCpu->iem.s.enmEffOpSize) 7637 7666 { 7638 7667 case IEMMODE_16BIT: 7639 7668 IEM_MC_BEGIN(3, 0); 7669 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 7640 7670 IEM_MC_ARG(uint16_t *, pu16Dst, 0); 7641 7671 IEM_MC_ARG_CONST(uint8_t, cShiftArg,/*=1*/1, 1); … … 7650 7680 case IEMMODE_32BIT: 7651 7681 IEM_MC_BEGIN(3, 0); 7682 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 7652 7683 IEM_MC_ARG(uint32_t *, pu32Dst, 0); 7653 7684 IEM_MC_ARG_CONST(uint8_t, cShiftArg,/*=1*/1, 1); … … 7663 7694 case IEMMODE_64BIT: 7664 7695 IEM_MC_BEGIN(3, 0); 7696 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 7665 7697 IEM_MC_ARG(uint64_t *, pu64Dst, 0); 7666 7698 IEM_MC_ARG_CONST(uint8_t, cShiftArg,/*=1*/1, 1); … … 7768 7800 { 7769 7801 /* register */ 7802 IEM_MC_BEGIN(3, 0); 7770 7803 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 7771 IEM_MC_BEGIN(3, 0);7772 7804 IEM_MC_ARG(uint8_t *, pu8Dst, 0); 7773 7805 IEM_MC_ARG(uint8_t, cShiftArg, 1); … … 7828 7860 { 7829 7861 /* register */ 7830 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();7831 7862 switch (pVCpu->iem.s.enmEffOpSize) 7832 7863 { 7833 7864 case IEMMODE_16BIT: 7834 7865 IEM_MC_BEGIN(3, 0); 7866 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 7835 7867 IEM_MC_ARG(uint16_t *, pu16Dst, 0); 7836 7868 IEM_MC_ARG(uint8_t, cShiftArg, 1); … … 7846 7878 case IEMMODE_32BIT: 7847 7879 IEM_MC_BEGIN(3, 0); 7880 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 7848 7881 IEM_MC_ARG(uint32_t *, pu32Dst, 0); 7849 7882 IEM_MC_ARG(uint8_t, cShiftArg, 1); … … 7860 7893 case IEMMODE_64BIT: 7861 7894 IEM_MC_BEGIN(3, 0); 7895 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 7862 7896 IEM_MC_ARG(uint64_t *, pu64Dst, 0); 7863 7897 IEM_MC_ARG(uint8_t, cShiftArg, 1); … … 7978 8012 { 7979 8013 IEMOP_MNEMONIC(salc, "salc"); 7980 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();7981 8014 IEMOP_HLP_NO_64BIT(); 7982 8015 7983 8016 IEM_MC_BEGIN(0, 0); 8017 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 7984 8018 IEM_MC_IF_EFL_BIT_SET(X86_EFL_CF) { 7985 8019 IEM_MC_STORE_GREG_U8_CONST(X86_GREG_xAX, 0xff); … … 7998 8032 { 7999 8033 IEMOP_MNEMONIC(xlat, "xlat"); 8000 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();8001 8034 switch (pVCpu->iem.s.enmEffAddrMode) 8002 8035 { 8003 8036 case IEMMODE_16BIT: 8004 8037 IEM_MC_BEGIN(2, 0); 8038 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 8005 8039 IEM_MC_LOCAL(uint8_t, u8Tmp); 8006 8040 IEM_MC_LOCAL(uint16_t, u16Addr); … … 8015 8049 case IEMMODE_32BIT: 8016 8050 IEM_MC_BEGIN(2, 0); 8051 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 8017 8052 IEM_MC_LOCAL(uint8_t, u8Tmp); 8018 8053 IEM_MC_LOCAL(uint32_t, u32Addr); … … 8027 8062 case IEMMODE_64BIT: 8028 8063 IEM_MC_BEGIN(2, 0); 8064 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 8029 8065 IEM_MC_LOCAL(uint8_t, u8Tmp); 8030 8066 IEM_MC_LOCAL(uint64_t, u64Addr); … … 8051 8087 FNIEMOP_DEF_2(iemOpHlpFpu_st0_stN, uint8_t, bRm, PFNIEMAIMPLFPUR80, pfnAImpl) 8052 8088 { 8053 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();8054 8055 8089 IEM_MC_BEGIN(3, 1); 8090 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 8056 8091 IEM_MC_LOCAL(IEMFPURESULT, FpuRes); 8057 8092 IEM_MC_ARG_LOCAL_REF(PIEMFPURESULT, pFpuRes, FpuRes, 0); … … 8083 8118 FNIEMOP_DEF_2(iemOpHlpFpuNoStore_st0_stN, uint8_t, bRm, PFNIEMAIMPLFPUR80FSW, pfnAImpl) 8084 8119 { 8085 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();8086 8087 8120 IEM_MC_BEGIN(3, 1); 8121 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 8088 8122 IEM_MC_LOCAL(uint16_t, u16Fsw); 8089 8123 IEM_MC_ARG_LOCAL_REF(uint16_t *, pu16Fsw, u16Fsw, 0); … … 8115 8149 FNIEMOP_DEF_2(iemOpHlpFpuNoStore_st0_stN_pop, uint8_t, bRm, PFNIEMAIMPLFPUR80FSW, pfnAImpl) 8116 8150 { 8117 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();8118 8119 8151 IEM_MC_BEGIN(3, 1); 8152 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 8120 8153 IEM_MC_LOCAL(uint16_t, u16Fsw); 8121 8154 IEM_MC_ARG_LOCAL_REF(uint16_t *, pu16Fsw, u16Fsw, 0); … … 8571 8604 { 8572 8605 IEMOP_MNEMONIC(fnop, "fnop"); 8573 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();8574 8575 8606 IEM_MC_BEGIN(0, 0); 8607 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 8576 8608 IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE(); 8577 8609 IEM_MC_MAYBE_RAISE_FPU_XCPT(); … … 8589 8621 { 8590 8622 IEMOP_MNEMONIC(fld_stN, "fld stN"); 8591 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();8592 8593 8623 /** @todo Testcase: Check if this raises \#MF? Intel mentioned it not. AMD 8594 8624 * indicates that it does. */ 8595 8625 IEM_MC_BEGIN(0, 2); 8626 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 8596 8627 IEM_MC_LOCAL(PCRTFLOAT80U, pr80Value); 8597 8628 IEM_MC_LOCAL(IEMFPURESULT, FpuRes); … … 8616 8647 { 8617 8648 IEMOP_MNEMONIC(fxch_stN, "fxch stN"); 8618 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();8619 8620 8649 /** @todo Testcase: Check if this raises \#MF? Intel mentioned it not. AMD 8621 8650 * indicates that it does. */ 8622 8651 IEM_MC_BEGIN(2, 3); 8652 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 8623 8653 IEM_MC_LOCAL(PCRTFLOAT80U, pr80Value1); 8624 8654 IEM_MC_LOCAL(PCRTFLOAT80U, pr80Value2); … … 8647 8677 { 8648 8678 IEMOP_MNEMONIC(fstp_st0_stN, "fstp st0,stN"); 8649 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();8650 8679 8651 8680 /* fstp st0, st0 is frequently used as an official 'ffreep st0' sequence. */ … … 8654 8683 { 8655 8684 IEM_MC_BEGIN(0, 1); 8685 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 8656 8686 IEM_MC_LOCAL_CONST(uint16_t, u16Fsw, /*=*/ 0); 8657 8687 IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE(); … … 8671 8701 { 8672 8702 IEM_MC_BEGIN(0, 2); 8703 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 8673 8704 IEM_MC_LOCAL(PCRTFLOAT80U, pr80Value); 8674 8705 IEM_MC_LOCAL(IEMFPURESULT, FpuRes); … … 8698 8729 FNIEMOP_DEF_1(iemOpHlpFpu_st0, PFNIEMAIMPLFPUR80UNARY, pfnAImpl) 8699 8730 { 8700 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();8701 8702 8731 IEM_MC_BEGIN(2, 1); 8732 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 8703 8733 IEM_MC_LOCAL(IEMFPURESULT, FpuRes); 8704 8734 IEM_MC_ARG_LOCAL_REF(PIEMFPURESULT, pFpuRes, FpuRes, 0); … … 8740 8770 { 8741 8771 IEMOP_MNEMONIC(ftst_st0, "ftst st0"); 8742 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();8743 8744 8772 IEM_MC_BEGIN(2, 1); 8773 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 8745 8774 IEM_MC_LOCAL(uint16_t, u16Fsw); 8746 8775 IEM_MC_ARG_LOCAL_REF(uint16_t *, pu16Fsw, u16Fsw, 0); … … 8766 8795 { 8767 8796 IEMOP_MNEMONIC(fxam_st0, "fxam st0"); 8768 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();8769 8770 8797 IEM_MC_BEGIN(2, 1); 8798 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 8771 8799 IEM_MC_LOCAL(uint16_t, u16Fsw); 8772 8800 IEM_MC_ARG_LOCAL_REF(uint16_t *, pu16Fsw, u16Fsw, 0); … … 8792 8820 FNIEMOP_DEF_1(iemOpHlpFpuPushConstant, PFNIEMAIMPLFPUR80LDCONST, pfnAImpl) 8793 8821 { 8794 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();8795 8796 8822 IEM_MC_BEGIN(1, 1); 8823 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 8797 8824 IEM_MC_LOCAL(IEMFPURESULT, FpuRes); 8798 8825 IEM_MC_ARG_LOCAL_REF(PIEMFPURESULT, pFpuRes, FpuRes, 0); … … 8891 8918 FNIEMOP_DEF_2(iemOpHlpFpu_stN_st0_pop, uint8_t, bRm, PFNIEMAIMPLFPUR80, pfnAImpl) 8892 8919 { 8893 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();8894 8895 8920 IEM_MC_BEGIN(3, 1); 8921 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 8896 8922 IEM_MC_LOCAL(IEMFPURESULT, FpuRes); 8897 8923 IEM_MC_ARG_LOCAL_REF(PIEMFPURESULT, pFpuRes, FpuRes, 0); … … 8931 8957 FNIEMOP_DEF_1(iemOpHlpFpuReplace_st0_push, PFNIEMAIMPLFPUR80UNARYTWO, pfnAImpl) 8932 8958 { 8933 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();8934 8935 8959 IEM_MC_BEGIN(2, 1); 8960 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 8936 8961 IEM_MC_LOCAL(IEMFPURESULTTWO, FpuResTwo); 8937 8962 IEM_MC_ARG_LOCAL_REF(PIEMFPURESULTTWO, pFpuResTwo, FpuResTwo, 0); … … 8989 9014 { 8990 9015 IEMOP_MNEMONIC(fdecstp, "fdecstp"); 8991 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();8992 9016 /* Note! C0, C2 and C3 are documented as undefined, we clear them. */ 8993 9017 /** @todo Testcase: Check whether FOP, FPUIP and FPUCS are affected by 8994 9018 * FINCSTP and FDECSTP. */ 8995 8996 9019 IEM_MC_BEGIN(0,0); 9020 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 8997 9021 8998 9022 IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE(); … … 9012 9036 { 9013 9037 IEMOP_MNEMONIC(fincstp, "fincstp"); 9014 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();9015 9038 /* Note! C0, C2 and C3 are documented as undefined, we clear them. */ 9016 9039 /** @todo Testcase: Check whether FOP, FPUIP and FPUCS are affected by 9017 9040 * FINCSTP and FDECSTP. */ 9018 9019 9041 IEM_MC_BEGIN(0,0); 9042 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 9020 9043 9021 9044 IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE(); … … 9183 9206 { 9184 9207 IEMOP_MNEMONIC(fcmovb_st0_stN, "fcmovb st0,stN"); 9185 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();9186 9187 9208 IEM_MC_BEGIN(0, 1); 9209 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 9188 9210 IEM_MC_LOCAL(PCRTFLOAT80U, pr80ValueN); 9189 9211 … … 9210 9232 { 9211 9233 IEMOP_MNEMONIC(fcmove_st0_stN, "fcmove st0,stN"); 9212 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();9213 9214 9234 IEM_MC_BEGIN(0, 1); 9235 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 9215 9236 IEM_MC_LOCAL(PCRTFLOAT80U, pr80ValueN); 9216 9237 … … 9237 9258 { 9238 9259 IEMOP_MNEMONIC(fcmovbe_st0_stN, "fcmovbe st0,stN"); 9239 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();9240 9241 9260 IEM_MC_BEGIN(0, 1); 9261 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 9242 9262 IEM_MC_LOCAL(PCRTFLOAT80U, pr80ValueN); 9243 9263 … … 9264 9284 { 9265 9285 IEMOP_MNEMONIC(fcmovu_st0_stN, "fcmovu st0,stN"); 9266 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();9267 9268 9286 IEM_MC_BEGIN(0, 1); 9287 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 9269 9288 IEM_MC_LOCAL(PCRTFLOAT80U, pr80ValueN); 9270 9289 … … 9295 9314 FNIEMOP_DEF_1(iemOpHlpFpuNoStore_st0_st1_pop_pop, PFNIEMAIMPLFPUR80FSW, pfnAImpl) 9296 9315 { 9297 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();9298 9299 9316 IEM_MC_BEGIN(3, 1); 9317 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 9300 9318 IEM_MC_LOCAL(uint16_t, u16Fsw); 9301 9319 IEM_MC_ARG_LOCAL_REF(uint16_t *, pu16Fsw, u16Fsw, 0); … … 9729 9747 { 9730 9748 IEMOP_MNEMONIC(fcmovnb_st0_stN, "fcmovnb st0,stN"); 9731 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();9732 9733 9749 IEM_MC_BEGIN(0, 1); 9750 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 9734 9751 IEM_MC_LOCAL(PCRTFLOAT80U, pr80ValueN); 9735 9752 … … 9756 9773 { 9757 9774 IEMOP_MNEMONIC(fcmovne_st0_stN, "fcmovne st0,stN"); 9758 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();9759 9760 9775 IEM_MC_BEGIN(0, 1); 9776 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 9761 9777 IEM_MC_LOCAL(PCRTFLOAT80U, pr80ValueN); 9762 9778 … … 9783 9799 { 9784 9800 IEMOP_MNEMONIC(fcmovnbe_st0_stN, "fcmovnbe st0,stN"); 9785 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();9786 9787 9801 IEM_MC_BEGIN(0, 1); 9802 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 9788 9803 IEM_MC_LOCAL(PCRTFLOAT80U, pr80ValueN); 9789 9804 … … 9810 9825 { 9811 9826 IEMOP_MNEMONIC(fcmovnnu_st0_stN, "fcmovnnu st0,stN"); 9812 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();9813 9814 9827 IEM_MC_BEGIN(0, 1); 9828 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 9815 9829 IEM_MC_LOCAL(PCRTFLOAT80U, pr80ValueN); 9816 9830 … … 9837 9851 { 9838 9852 IEMOP_MNEMONIC(fneni, "fneni (8087/ign)"); 9839 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();9840 9853 IEM_MC_BEGIN(0,0); 9854 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 9841 9855 IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE(); 9842 9856 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 9849 9863 { 9850 9864 IEMOP_MNEMONIC(fndisi, "fndisi (8087/ign)"); 9851 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();9852 9865 IEM_MC_BEGIN(0,0); 9866 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 9853 9867 IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE(); 9854 9868 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 9861 9875 { 9862 9876 IEMOP_MNEMONIC(fnclex, "fnclex"); 9863 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();9864 9865 9877 IEM_MC_BEGIN(0,0); 9878 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 9866 9879 IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE(); 9867 9880 IEM_MC_ACTUALIZE_FPU_STATE_FOR_CHANGE(); … … 9885 9898 { 9886 9899 IEMOP_MNEMONIC(fnsetpm, "fnsetpm (80287/ign)"); /* set protected mode on fpu. */ 9887 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();9888 9900 IEM_MC_BEGIN(0,0); 9901 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 9889 9902 IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE(); 9890 9903 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 9898 9911 IEMOP_MNEMONIC(frstpm, "frstpm (80287XL/ign)"); /* reset pm, back to real mode. */ 9899 9912 #if 0 /* #UDs on newer CPUs */ 9900 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();9901 9913 IEM_MC_BEGIN(0,0); 9914 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 9902 9915 IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE(); 9903 9916 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 9992 10005 FNIEMOP_DEF_2(iemOpHlpFpu_stN_st0, uint8_t, bRm, PFNIEMAIMPLFPUR80, pfnAImpl) 9993 10006 { 9994 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();9995 9996 10007 IEM_MC_BEGIN(3, 1); 10008 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 9997 10009 IEM_MC_LOCAL(IEMFPURESULT, FpuRes); 9998 10010 IEM_MC_ARG_LOCAL_REF(PIEMFPURESULT, pFpuRes, FpuRes, 0); … … 10457 10469 { 10458 10470 IEMOP_MNEMONIC(ffree_stN, "ffree stN"); 10459 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();10460 10471 /* Note! C0, C1, C2 and C3 are documented as undefined, we leave the 10461 10472 unmodified. */ 10462 10463 10473 IEM_MC_BEGIN(0, 0); 10474 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 10464 10475 10465 10476 IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE(); … … 10479 10490 { 10480 10491 IEMOP_MNEMONIC(fst_st0_stN, "fst st0,stN"); 10481 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();10482 10483 10492 IEM_MC_BEGIN(0, 2); 10493 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 10484 10494 IEM_MC_LOCAL(PCRTFLOAT80U, pr80Value); 10485 10495 IEM_MC_LOCAL(IEMFPURESULT, FpuRes); … … 10810 10820 { 10811 10821 IEMOP_MNEMONIC(ffreep_stN, "ffreep stN"); 10812 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();10813 10814 10822 IEM_MC_BEGIN(0, 0); 10823 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 10815 10824 10816 10825 IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE(); … … 10831 10840 { 10832 10841 IEMOP_MNEMONIC(fnstsw_ax, "fnstsw ax"); 10833 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();10834 10835 10842 IEM_MC_BEGIN(0, 1); 10843 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 10836 10844 IEM_MC_LOCAL(uint16_t, u16Tmp); 10837 10845 IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE(); … … 11184 11192 IEMOP_MNEMONIC(loopne_Jb, "loopne Jb"); 11185 11193 int8_t i8Imm; IEM_OPCODE_GET_NEXT_S8(&i8Imm); 11186 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();11187 11194 IEMOP_HLP_DEFAULT_64BIT_OP_SIZE(); 11188 11195 … … 11191 11198 case IEMMODE_16BIT: 11192 11199 IEM_MC_BEGIN(0,0); 11200 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 11193 11201 IEM_MC_SUB_GREG_U16(X86_GREG_xCX, 1); 11194 11202 IEM_MC_IF_CX_IS_NZ_AND_EFL_BIT_NOT_SET(X86_EFL_ZF) { … … 11202 11210 case IEMMODE_32BIT: 11203 11211 IEM_MC_BEGIN(0,0); 11212 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 11204 11213 IEM_MC_SUB_GREG_U32(X86_GREG_xCX, 1); 11205 11214 IEM_MC_IF_ECX_IS_NZ_AND_EFL_BIT_NOT_SET(X86_EFL_ZF) { … … 11213 11222 case IEMMODE_64BIT: 11214 11223 IEM_MC_BEGIN(0,0); 11224 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 11215 11225 IEM_MC_SUB_GREG_U64(X86_GREG_xCX, 1); 11216 11226 IEM_MC_IF_RCX_IS_NZ_AND_EFL_BIT_NOT_SET(X86_EFL_ZF) { … … 11234 11244 IEMOP_MNEMONIC(loope_Jb, "loope Jb"); 11235 11245 int8_t i8Imm; IEM_OPCODE_GET_NEXT_S8(&i8Imm); 11236 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();11237 11246 IEMOP_HLP_DEFAULT_64BIT_OP_SIZE(); 11238 11247 … … 11241 11250 case IEMMODE_16BIT: 11242 11251 IEM_MC_BEGIN(0,0); 11252 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 11243 11253 IEM_MC_SUB_GREG_U16(X86_GREG_xCX, 1); 11244 11254 IEM_MC_IF_CX_IS_NZ_AND_EFL_BIT_SET(X86_EFL_ZF) { … … 11252 11262 case IEMMODE_32BIT: 11253 11263 IEM_MC_BEGIN(0,0); 11264 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 11254 11265 IEM_MC_SUB_GREG_U32(X86_GREG_xCX, 1); 11255 11266 IEM_MC_IF_ECX_IS_NZ_AND_EFL_BIT_SET(X86_EFL_ZF) { … … 11263 11274 case IEMMODE_64BIT: 11264 11275 IEM_MC_BEGIN(0,0); 11276 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 11265 11277 IEM_MC_SUB_GREG_U64(X86_GREG_xCX, 1); 11266 11278 IEM_MC_IF_RCX_IS_NZ_AND_EFL_BIT_SET(X86_EFL_ZF) { … … 11284 11296 IEMOP_MNEMONIC(loop_Jb, "loop Jb"); 11285 11297 int8_t i8Imm; IEM_OPCODE_GET_NEXT_S8(&i8Imm); 11286 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();11287 11298 IEMOP_HLP_DEFAULT_64BIT_OP_SIZE(); 11288 11299 … … 11301 11312 case IEMMODE_16BIT: 11302 11313 IEM_MC_BEGIN(0,0); 11314 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 11303 11315 IEM_MC_STORE_GREG_U16_CONST(X86_GREG_xCX, 0); 11304 11316 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 11308 11320 case IEMMODE_32BIT: 11309 11321 IEM_MC_BEGIN(0,0); 11322 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 11310 11323 IEM_MC_STORE_GREG_U32_CONST(X86_GREG_xCX, 0); 11311 11324 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 11315 11328 case IEMMODE_64BIT: 11316 11329 IEM_MC_BEGIN(0,0); 11330 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 11317 11331 IEM_MC_STORE_GREG_U64_CONST(X86_GREG_xCX, 0); 11318 11332 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 11328 11342 case IEMMODE_16BIT: 11329 11343 IEM_MC_BEGIN(0,0); 11330 11344 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 11331 11345 IEM_MC_SUB_GREG_U16(X86_GREG_xCX, 1); 11332 11346 IEM_MC_IF_CX_IS_NZ() { … … 11340 11354 case IEMMODE_32BIT: 11341 11355 IEM_MC_BEGIN(0,0); 11356 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 11342 11357 IEM_MC_SUB_GREG_U32(X86_GREG_xCX, 1); 11343 11358 IEM_MC_IF_ECX_IS_NZ() { … … 11351 11366 case IEMMODE_64BIT: 11352 11367 IEM_MC_BEGIN(0,0); 11368 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 11353 11369 IEM_MC_SUB_GREG_U64(X86_GREG_xCX, 1); 11354 11370 IEM_MC_IF_RCX_IS_NZ() { … … 11372 11388 IEMOP_MNEMONIC(jecxz_Jb, "jecxz Jb"); 11373 11389 int8_t i8Imm; IEM_OPCODE_GET_NEXT_S8(&i8Imm); 11374 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();11375 11390 IEMOP_HLP_DEFAULT_64BIT_OP_SIZE(); 11376 11391 … … 11379 11394 case IEMMODE_16BIT: 11380 11395 IEM_MC_BEGIN(0,0); 11396 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 11381 11397 IEM_MC_IF_CX_IS_NZ() { 11382 11398 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 11389 11405 case IEMMODE_32BIT: 11390 11406 IEM_MC_BEGIN(0,0); 11407 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 11391 11408 IEM_MC_IF_ECX_IS_NZ() { 11392 11409 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 11399 11416 case IEMMODE_64BIT: 11400 11417 IEM_MC_BEGIN(0,0); 11418 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 11401 11419 IEM_MC_IF_RCX_IS_NZ() { 11402 11420 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 11499 11517 int16_t i16Imm; IEM_OPCODE_GET_NEXT_S16(&i16Imm); 11500 11518 IEM_MC_BEGIN(0, 0); 11519 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 11501 11520 IEM_MC_REL_JMP_S16_AND_FINISH(i16Imm); 11502 11521 IEM_MC_END(); … … 11509 11528 int32_t i32Imm; IEM_OPCODE_GET_NEXT_S32(&i32Imm); 11510 11529 IEM_MC_BEGIN(0, 0); 11530 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 11511 11531 IEM_MC_REL_JMP_S32_AND_FINISH(i32Imm); 11512 11532 IEM_MC_END(); … … 11547 11567 IEMOP_MNEMONIC(jmp_Jb, "jmp Jb"); 11548 11568 int8_t i8Imm; IEM_OPCODE_GET_NEXT_S8(&i8Imm); 11549 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();11550 11569 IEMOP_HLP_DEFAULT_64BIT_OP_SIZE_AND_INTEL_IGNORES_OP_SIZE_PREFIX(); 11551 11570 11552 11571 IEM_MC_BEGIN(0, 0); 11572 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 11553 11573 IEM_MC_REL_JMP_S8_AND_FINISH(i8Imm); 11554 11574 IEM_MC_END(); … … 11681 11701 { 11682 11702 IEMOP_MNEMONIC(cmc, "cmc"); 11683 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();11684 11703 IEM_MC_BEGIN(0, 0); 11704 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 11685 11705 IEM_MC_FLIP_EFL_BIT(X86_EFL_CF); 11686 11706 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 11696 11716 { \ 11697 11717 /* register access */ \ 11718 IEM_MC_BEGIN(2, 0); \ 11698 11719 IEMOP_HLP_DONE_DECODING(); \ 11699 IEM_MC_BEGIN(2, 0); \11700 11720 IEM_MC_ARG(uint8_t *, pu8Dst, 0); \ 11701 11721 IEM_MC_ARG(uint32_t *, pEFlags, 1); \ … … 11758 11778 * Register target \ 11759 11779 */ \ 11760 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \11761 11780 switch (pVCpu->iem.s.enmEffOpSize) \ 11762 11781 { \ 11763 11782 case IEMMODE_16BIT: \ 11764 11783 IEM_MC_BEGIN(2, 0); \ 11784 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 11765 11785 IEM_MC_ARG(uint16_t *, pu16Dst, 0); \ 11766 11786 IEM_MC_ARG(uint32_t *, pEFlags, 1); \ … … 11774 11794 case IEMMODE_32BIT: \ 11775 11795 IEM_MC_BEGIN(2, 0); \ 11796 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 11776 11797 IEM_MC_ARG(uint32_t *, pu32Dst, 0); \ 11777 11798 IEM_MC_ARG(uint32_t *, pEFlags, 1); \ … … 11786 11807 case IEMMODE_64BIT: \ 11787 11808 IEM_MC_BEGIN(2, 0); \ 11809 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 11788 11810 IEM_MC_ARG(uint64_t *, pu64Dst, 0); \ 11789 11811 IEM_MC_ARG(uint32_t *, pEFlags, 1); \ … … 11814 11836 \ 11815 11837 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); \ 11838 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 11816 11839 IEM_MC_MEM_MAP(pu16Dst, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/); \ 11817 11840 IEM_MC_FETCH_EFLAGS(EFlags); \ … … 11831 11854 \ 11832 11855 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); \ 11856 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 11833 11857 IEM_MC_MEM_MAP(pu32Dst, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/); \ 11834 11858 IEM_MC_FETCH_EFLAGS(EFlags); \ … … 11848 11872 \ 11849 11873 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); \ 11874 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 11850 11875 IEM_MC_MEM_MAP(pu64Dst, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/); \ 11851 11876 IEM_MC_FETCH_EFLAGS(EFlags); \ … … 11875 11900 \ 11876 11901 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); \ 11902 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 11877 11903 IEM_MC_MEM_MAP(pu16Dst, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/); \ 11878 11904 IEM_MC_FETCH_EFLAGS(EFlags); \ … … 11892 11918 \ 11893 11919 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); \ 11920 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 11894 11921 IEM_MC_MEM_MAP(pu32Dst, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/); \ 11895 11922 IEM_MC_FETCH_EFLAGS(EFlags); \ … … 11909 11936 \ 11910 11937 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); \ 11938 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 11911 11939 IEM_MC_MEM_MAP(pu64Dst, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/); \ 11912 11940 IEM_MC_FETCH_EFLAGS(EFlags); \ … … 11940 11968 /* register access */ 11941 11969 uint8_t u8Imm; IEM_OPCODE_GET_NEXT_U8(&u8Imm); 11970 IEM_MC_BEGIN(3, 0); 11942 11971 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 11943 11944 IEM_MC_BEGIN(3, 0);11945 11972 IEM_MC_ARG(uint8_t *, pu8Dst, 0); 11946 11973 IEM_MC_ARG_CONST(uint8_t, u8Src,/*=*/u8Imm, 1); … … 11983 12010 { 11984 12011 /* register access */ 12012 IEM_MC_BEGIN(3, 1); 11985 12013 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 11986 IEM_MC_BEGIN(3, 1);11987 12014 IEM_MC_ARG(uint16_t *, pu16AX, 0); 11988 12015 IEM_MC_ARG(uint8_t, u8Value, 1); … … 12037 12064 { 12038 12065 /* register access */ 12039 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();12040 12066 switch (pVCpu->iem.s.enmEffOpSize) 12041 12067 { 12042 12068 case IEMMODE_16BIT: 12043 12069 { 12070 IEM_MC_BEGIN(4, 1); 12044 12071 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 12045 IEM_MC_BEGIN(4, 1);12046 12072 IEM_MC_ARG(uint16_t *, pu16AX, 0); 12047 12073 IEM_MC_ARG(uint16_t *, pu16DX, 1); … … 12067 12093 case IEMMODE_32BIT: 12068 12094 { 12095 IEM_MC_BEGIN(4, 1); 12069 12096 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 12070 IEM_MC_BEGIN(4, 1);12071 12097 IEM_MC_ARG(uint32_t *, pu32AX, 0); 12072 12098 IEM_MC_ARG(uint32_t *, pu32DX, 1); … … 12094 12120 case IEMMODE_64BIT: 12095 12121 { 12122 IEM_MC_BEGIN(4, 1); 12096 12123 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 12097 IEM_MC_BEGIN(4, 1);12098 12124 IEM_MC_ARG(uint64_t *, pu64AX, 0); 12099 12125 IEM_MC_ARG(uint64_t *, pu64DX, 1); … … 12278 12304 { 12279 12305 /* register access */ 12280 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();12281 12306 switch (pVCpu->iem.s.enmEffOpSize) 12282 12307 { … … 12285 12310 uint16_t u16Imm; IEM_OPCODE_GET_NEXT_U16(&u16Imm); 12286 12311 IEM_MC_BEGIN(3, 0); 12312 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 12287 12313 IEM_MC_ARG(uint16_t *, pu16Dst, 0); 12288 12314 IEM_MC_ARG_CONST(uint16_t, u16Src,/*=*/u16Imm, 1); … … 12300 12326 uint32_t u32Imm; IEM_OPCODE_GET_NEXT_U32(&u32Imm); 12301 12327 IEM_MC_BEGIN(3, 0); 12328 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 12302 12329 IEM_MC_ARG(uint32_t *, pu32Dst, 0); 12303 12330 IEM_MC_ARG_CONST(uint32_t, u32Src,/*=*/u32Imm, 1); … … 12316 12343 uint64_t u64Imm; IEM_OPCODE_GET_NEXT_S32_SX_U64(&u64Imm); 12317 12344 IEM_MC_BEGIN(3, 0); 12345 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 12318 12346 IEM_MC_ARG(uint64_t *, pu64Dst, 0); 12319 12347 IEM_MC_ARG_CONST(uint64_t, u64Src,/*=*/u64Imm, 1); … … 12467 12495 { 12468 12496 IEMOP_MNEMONIC(clc, "clc"); 12469 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();12470 12497 IEM_MC_BEGIN(0, 0); 12498 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 12471 12499 IEM_MC_CLEAR_EFL_BIT(X86_EFL_CF); 12472 12500 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 12481 12509 { 12482 12510 IEMOP_MNEMONIC(stc, "stc"); 12483 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();12484 12511 IEM_MC_BEGIN(0, 0); 12512 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 12485 12513 IEM_MC_SET_EFL_BIT(X86_EFL_CF); 12486 12514 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 12514 12542 { 12515 12543 IEMOP_MNEMONIC(cld, "cld"); 12516 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();12517 12544 IEM_MC_BEGIN(0, 0); 12545 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 12518 12546 IEM_MC_CLEAR_EFL_BIT(X86_EFL_DF); 12519 12547 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 12528 12556 { 12529 12557 IEMOP_MNEMONIC(std, "std"); 12530 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();12531 12558 IEM_MC_BEGIN(0, 0); 12559 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 12532 12560 IEM_MC_SET_EFL_BIT(X86_EFL_DF); 12533 12561 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 12605 12633 { 12606 12634 /* The new RIP is taken from a register. */ 12607 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();12608 12635 switch (pVCpu->iem.s.enmEffOpSize) 12609 12636 { 12610 12637 case IEMMODE_16BIT: 12611 12638 IEM_MC_BEGIN(1, 0); 12639 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 12612 12640 IEM_MC_ARG(uint16_t, u16Target, 0); 12613 12641 IEM_MC_FETCH_GREG_U16(u16Target, IEM_GET_MODRM_RM(pVCpu, bRm)); … … 12618 12646 case IEMMODE_32BIT: 12619 12647 IEM_MC_BEGIN(1, 0); 12648 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 12620 12649 IEM_MC_ARG(uint32_t, u32Target, 0); 12621 12650 IEM_MC_FETCH_GREG_U32(u32Target, IEM_GET_MODRM_RM(pVCpu, bRm)); … … 12626 12655 case IEMMODE_64BIT: 12627 12656 IEM_MC_BEGIN(1, 0); 12657 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 12628 12658 IEM_MC_ARG(uint64_t, u64Target, 0); 12629 12659 IEM_MC_FETCH_GREG_U64(u64Target, IEM_GET_MODRM_RM(pVCpu, bRm)); … … 12768 12798 { 12769 12799 /* The new RIP is taken from a register. */ 12770 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();12771 12800 switch (pVCpu->iem.s.enmEffOpSize) 12772 12801 { 12773 12802 case IEMMODE_16BIT: 12774 12803 IEM_MC_BEGIN(0, 1); 12804 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 12775 12805 IEM_MC_LOCAL(uint16_t, u16Target); 12776 12806 IEM_MC_FETCH_GREG_U16(u16Target, IEM_GET_MODRM_RM(pVCpu, bRm)); … … 12781 12811 case IEMMODE_32BIT: 12782 12812 IEM_MC_BEGIN(0, 1); 12813 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 12783 12814 IEM_MC_LOCAL(uint32_t, u32Target); 12784 12815 IEM_MC_FETCH_GREG_U32(u32Target, IEM_GET_MODRM_RM(pVCpu, bRm)); … … 12789 12820 case IEMMODE_64BIT: 12790 12821 IEM_MC_BEGIN(0, 1); 12822 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 12791 12823 IEM_MC_LOCAL(uint64_t, u64Target); 12792 12824 IEM_MC_FETCH_GREG_U64(u64Target, IEM_GET_MODRM_RM(pVCpu, bRm)); -
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsPython.py
r100633 r100714 2276 2276 2277 2277 # Hand it to the handler. 2278 fnParser = g_dMcStmtParsers.get(sName) ;2278 fnParser = g_dMcStmtParsers.get(sName)[0]; 2279 2279 if not fnParser: 2280 2280 self.raiseDecodeError(sRawCode, off, 'Unknown MC statement: %s' % (sName,)); … … 2387 2387 or sRawCode.find('IEMOP_HLP_DECODED_', off, offEnd) >= 0 2388 2388 or sRawCode.find('IEMOP_HLP_RAISE_UD_IF_MISSING_GUEST_FEATURE', off, offEnd) >= 0 2389 or sRawCode.find('IEMOP_HLP_VMX_INSTR', off, offEnd) >= 0 2390 or sRawCode.find('IEMOP_HLP_IN_VMX_OPERATION', off, offEnd) >= 0 ## @todo wrong 2389 2391 ); 2390 2392 … … 2474 2476 return None; 2475 2477 2478 koReCppFirstWord = re.compile(r'^\s*(\w+)[ (;]'); 2479 kdDecodeCppStmtOkayAfterDone = { 2480 'IEMOP_HLP_IN_VMX_OPERATION': True, 2481 'IEMOP_HLP_VMX_INSTR': True, 2482 }; 2483 2484 def checkForDoneDecoding(self, aoStmts): 2485 """ 2486 Checks that the block contains a IEMOP_HLP_DONE_*DECODING* macro 2487 invocation. 2488 Returns None on success, error string on failure. 2489 2490 This ensures safe instruction restarting in case the recompiler runs 2491 out of TB resources during recompilation (e.g. aRanges or aGCPhysPages 2492 entries). 2493 """ 2494 2495 # The IEMOP_HLP_DONE_ stuff is not allowed inside conditionals, so we 2496 # don't need to look. 2497 cIemOpHlpDone = 0; 2498 for iStmt, oStmt in enumerate(aoStmts): 2499 if oStmt.isCppStmt(): 2500 #print('dbg: #%u[%u]: %s %s (%s)' 2501 # % (iStmt + 1, cIemOpHlpDone, oStmt.sName, 'd' if oStmt.fDecode else 'r', oStmt.asParams[0],)); 2502 2503 oMatch = self.koReCppFirstWord.match(oStmt.asParams[0]); 2504 if oMatch: 2505 sFirstWord = oMatch.group(1); 2506 if ( sFirstWord.startswith('IEMOP_HLP_DONE_') 2507 or sFirstWord.startswith('IEMOP_HLP_DECODED_')): 2508 cIemOpHlpDone += 1; 2509 elif cIemOpHlpDone > 0 and oStmt.fDecode and sFirstWord not in self.kdDecodeCppStmtOkayAfterDone: 2510 return "statement #%u: Decoding statement following IEMOP_HLP_DONE_*DECODING*!" % (iStmt + 1,); 2511 #else: print('dbg: #%u[%u]: %s' % (iStmt + 1, cIemOpHlpDone, oStmt.asParams[0])); 2512 else: 2513 #print('dbg: #%u[%u]: %s' % (iStmt + 1, cIemOpHlpDone, oStmt.sName)); 2514 if oStmt.sName.startswith('IEM_MC_DEFER_TO_CIMPL_') and iStmt == 0: # implicit 2515 cIemOpHlpDone += 1; 2516 elif cIemOpHlpDone == 0 and g_dMcStmtParsers.get(oStmt.sName, (None, False))[1]: 2517 return "statement #%u: State modifying MC statement before IEMOP_HLP_DONE_*DECODING*!" % (iStmt + 1,); 2518 elif cIemOpHlpDone > 0 and oStmt.sName in ('IEM_MC_CALC_RM_EFF_ADDR',): 2519 return "statement #%u: Decoding statement following IEMOP_HLP_DONE_*DECODING*!" % (iStmt + 1,); 2520 if cIemOpHlpDone == 1: 2521 return None; 2522 if cIemOpHlpDone > 1: 2523 return "Block has more than one IEMOP_HLP_DONE_*DECODING* invocation!"; 2524 return "Block is missing IEMOP_HLP_DONE_*DECODING* invocation!"; 2525 2476 2526 def check(self): 2477 2527 """ … … 2486 2536 asRet.append(sRet); 2487 2537 2538 sRet = self.checkForDoneDecoding(aoStmts); 2539 if sRet: 2540 asRet.append(sRet); 2541 2488 2542 return asRet; 2489 2543 2490 2544 2491 2545 2492 ## IEM_MC_XXX -> parser dictionary. 2546 ## IEM_MC_XXX -> parser + info dictionary. 2547 # 2548 # The info is currently a single boolean entry indicating whether the 2549 # statement modifies state and must not be used before IEMOP_HL_DONE_*. 2550 # 2493 2551 # The raw table was generated via the following command 2494 2552 # sed -n -e "s/^# *define *\(IEM_MC_[A-Z_0-9]*\)[ (].*$/ '\1': McBlock.parseMcGeneric,/p" include/IEMMc.h \ 2495 # | sort | uniq | gawk "{printf """ %%-60s %%s\n""", $1, $2}"2553 # | sort | uniq | gawk "{printf """ %%-60s (%%s, True)\n""", $1, $2}" 2496 2554 g_dMcStmtParsers = { 2497 'IEM_MC_ACTUALIZE_AVX_STATE_FOR_CHANGE': McBlock.parseMcGeneric,2498 'IEM_MC_ACTUALIZE_AVX_STATE_FOR_READ': McBlock.parseMcGeneric,2499 'IEM_MC_ACTUALIZE_FPU_STATE_FOR_CHANGE': McBlock.parseMcGeneric,2500 'IEM_MC_ACTUALIZE_FPU_STATE_FOR_READ': McBlock.parseMcGeneric,2501 'IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE': McBlock.parseMcGeneric,2502 'IEM_MC_ACTUALIZE_SSE_STATE_FOR_READ': McBlock.parseMcGeneric,2503 'IEM_MC_ADD_GREG_U16': McBlock.parseMcGeneric,2504 'IEM_MC_ADD_GREG_U16_TO_LOCAL': McBlock.parseMcGeneric,2505 'IEM_MC_ADD_GREG_U32': McBlock.parseMcGeneric,2506 'IEM_MC_ADD_GREG_U32_TO_LOCAL': McBlock.parseMcGeneric,2507 'IEM_MC_ADD_GREG_U64': McBlock.parseMcGeneric,2508 'IEM_MC_ADD_GREG_U64_TO_LOCAL': McBlock.parseMcGeneric,2509 'IEM_MC_ADD_GREG_U8': McBlock.parseMcGeneric,2510 'IEM_MC_ADD_GREG_U8_TO_LOCAL': McBlock.parseMcGeneric,2511 'IEM_MC_ADD_LOCAL_S16_TO_EFF_ADDR': McBlock.parseMcGeneric,2512 'IEM_MC_ADD_LOCAL_S32_TO_EFF_ADDR': McBlock.parseMcGeneric,2513 'IEM_MC_ADD_LOCAL_S64_TO_EFF_ADDR': McBlock.parseMcGeneric,2514 'IEM_MC_ADVANCE_RIP_AND_FINISH': McBlock.parseMcGeneric,2515 'IEM_MC_AND_2LOCS_U32': McBlock.parseMcGeneric,2516 'IEM_MC_AND_ARG_U16': McBlock.parseMcGeneric,2517 'IEM_MC_AND_ARG_U32': McBlock.parseMcGeneric,2518 'IEM_MC_AND_ARG_U64': McBlock.parseMcGeneric,2519 'IEM_MC_AND_GREG_U16': McBlock.parseMcGeneric,2520 'IEM_MC_AND_GREG_U32': McBlock.parseMcGeneric,2521 'IEM_MC_AND_GREG_U64': McBlock.parseMcGeneric,2522 'IEM_MC_AND_GREG_U8': McBlock.parseMcGeneric,2523 'IEM_MC_AND_LOCAL_U16': McBlock.parseMcGeneric,2524 'IEM_MC_AND_LOCAL_U32': McBlock.parseMcGeneric,2525 'IEM_MC_AND_LOCAL_U64': McBlock.parseMcGeneric,2526 'IEM_MC_AND_LOCAL_U8': McBlock.parseMcGeneric,2527 'IEM_MC_ARG': McBlock.parseMcArg,2528 'IEM_MC_ARG_CONST': McBlock.parseMcArgConst,2529 'IEM_MC_ARG_LOCAL_EFLAGS': McBlock.parseMcArgLocalEFlags,2530 'IEM_MC_ARG_LOCAL_REF': McBlock.parseMcArgLocalRef,2531 'IEM_MC_ASSIGN': McBlock.parseMcGeneric,2532 'IEM_MC_ASSIGN_TO_SMALLER': McBlock.parseMcGeneric,2533 'IEM_MC_ASSIGN_U8_SX_U64': McBlock.parseMcGeneric,2534 'IEM_MC_ASSIGN_U32_SX_U64': McBlock.parseMcGeneric,2535 'IEM_MC_BEGIN': McBlock.parseMcGeneric,2536 'IEM_MC_BROADCAST_XREG_U16_ZX_VLMAX': McBlock.parseMcGeneric,2537 'IEM_MC_BROADCAST_XREG_U32_ZX_VLMAX': McBlock.parseMcGeneric,2538 'IEM_MC_BROADCAST_XREG_U64_ZX_VLMAX': McBlock.parseMcGeneric,2539 'IEM_MC_BROADCAST_XREG_U8_ZX_VLMAX': McBlock.parseMcGeneric,2540 'IEM_MC_BROADCAST_YREG_U128_ZX_VLMAX': McBlock.parseMcGeneric,2541 'IEM_MC_BROADCAST_YREG_U16_ZX_VLMAX': McBlock.parseMcGeneric,2542 'IEM_MC_BROADCAST_YREG_U32_ZX_VLMAX': McBlock.parseMcGeneric,2543 'IEM_MC_BROADCAST_YREG_U64_ZX_VLMAX': McBlock.parseMcGeneric,2544 'IEM_MC_BROADCAST_YREG_U8_ZX_VLMAX': McBlock.parseMcGeneric,2545 'IEM_MC_BSWAP_LOCAL_U16': McBlock.parseMcGeneric,2546 'IEM_MC_BSWAP_LOCAL_U32': McBlock.parseMcGeneric,2547 'IEM_MC_BSWAP_LOCAL_U64': McBlock.parseMcGeneric,2548 'IEM_MC_CALC_RM_EFF_ADDR': McBlock.parseMcGeneric,2549 'IEM_MC_CALL_AIMPL_3': McBlock.parseMcCallAImpl,2550 'IEM_MC_CALL_AIMPL_4': McBlock.parseMcCallAImpl,2551 'IEM_MC_CALL_AVX_AIMPL_2': McBlock.parseMcCallAvxAImpl,2552 'IEM_MC_CALL_AVX_AIMPL_3': McBlock.parseMcCallAvxAImpl,2553 'IEM_MC_CALL_CIMPL_0': McBlock.parseMcCallCImpl,2554 'IEM_MC_CALL_CIMPL_1': McBlock.parseMcCallCImpl,2555 'IEM_MC_CALL_CIMPL_2': McBlock.parseMcCallCImpl,2556 'IEM_MC_CALL_CIMPL_3': McBlock.parseMcCallCImpl,2557 'IEM_MC_CALL_CIMPL_4': McBlock.parseMcCallCImpl,2558 'IEM_MC_CALL_CIMPL_5': McBlock.parseMcCallCImpl,2559 'IEM_MC_CALL_FPU_AIMPL_1': McBlock.parseMcCallFpuAImpl,2560 'IEM_MC_CALL_FPU_AIMPL_2': McBlock.parseMcCallFpuAImpl,2561 'IEM_MC_CALL_FPU_AIMPL_3': McBlock.parseMcCallFpuAImpl,2562 'IEM_MC_CALL_MMX_AIMPL_2': McBlock.parseMcCallMmxAImpl,2563 'IEM_MC_CALL_MMX_AIMPL_3': McBlock.parseMcCallMmxAImpl,2564 'IEM_MC_CALL_SSE_AIMPL_2': McBlock.parseMcCallSseAImpl,2565 'IEM_MC_CALL_SSE_AIMPL_3': McBlock.parseMcCallSseAImpl,2566 'IEM_MC_CALL_VOID_AIMPL_0': McBlock.parseMcCallVoidAImpl,2567 'IEM_MC_CALL_VOID_AIMPL_1': McBlock.parseMcCallVoidAImpl,2568 'IEM_MC_CALL_VOID_AIMPL_2': McBlock.parseMcCallVoidAImpl,2569 'IEM_MC_CALL_VOID_AIMPL_3': McBlock.parseMcCallVoidAImpl,2570 'IEM_MC_CALL_VOID_AIMPL_4': McBlock.parseMcCallVoidAImpl,2571 'IEM_MC_CLEAR_EFL_BIT': McBlock.parseMcGeneric,2572 'IEM_MC_CLEAR_FSW_EX': McBlock.parseMcGeneric,2573 'IEM_MC_CLEAR_HIGH_GREG_U64': McBlock.parseMcGeneric,2574 'IEM_MC_CLEAR_HIGH_GREG_U64_BY_REF': McBlock.parseMcGeneric,2575 'IEM_MC_CLEAR_XREG_U32_MASK': McBlock.parseMcGeneric,2576 'IEM_MC_CLEAR_YREG_128_UP': McBlock.parseMcGeneric,2577 'IEM_MC_COMMIT_EFLAGS': McBlock.parseMcGeneric,2578 'IEM_MC_COPY_XREG_U128': McBlock.parseMcGeneric,2579 'IEM_MC_COPY_YREG_U128_ZX_VLMAX': McBlock.parseMcGeneric,2580 'IEM_MC_COPY_YREG_U256_ZX_VLMAX': McBlock.parseMcGeneric,2581 'IEM_MC_COPY_YREG_U64_ZX_VLMAX': McBlock.parseMcGeneric,2582 'IEM_MC_DEFER_TO_CIMPL_0_RET': McBlock.parseMcGeneric,2583 'IEM_MC_DEFER_TO_CIMPL_1_RET': McBlock.parseMcGeneric,2584 'IEM_MC_DEFER_TO_CIMPL_2_RET': McBlock.parseMcGeneric,2585 'IEM_MC_DEFER_TO_CIMPL_3_RET': McBlock.parseMcGeneric,2586 'IEM_MC_END': McBlock.parseMcGeneric,2587 'IEM_MC_FETCH_EFLAGS': McBlock.parseMcGeneric,2588 'IEM_MC_FETCH_EFLAGS_U8': McBlock.parseMcGeneric,2589 'IEM_MC_FETCH_FCW': McBlock.parseMcGeneric,2590 'IEM_MC_FETCH_FSW': McBlock.parseMcGeneric,2591 'IEM_MC_FETCH_GREG_U16': McBlock.parseMcGeneric,2592 'IEM_MC_FETCH_GREG_U16_SX_U32': McBlock.parseMcGeneric,2593 'IEM_MC_FETCH_GREG_U16_SX_U64': McBlock.parseMcGeneric,2594 'IEM_MC_FETCH_GREG_U16_ZX_U32': McBlock.parseMcGeneric,2595 'IEM_MC_FETCH_GREG_U16_ZX_U64': McBlock.parseMcGeneric,2596 'IEM_MC_FETCH_GREG_U32': McBlock.parseMcGeneric,2597 'IEM_MC_FETCH_GREG_U32_SX_U64': McBlock.parseMcGeneric,2598 'IEM_MC_FETCH_GREG_U32_ZX_U64': McBlock.parseMcGeneric,2599 'IEM_MC_FETCH_GREG_U64': McBlock.parseMcGeneric,2600 'IEM_MC_FETCH_GREG_U64_ZX_U64': McBlock.parseMcGeneric,2601 'IEM_MC_FETCH_GREG_U8': McBlock.parseMcGeneric,2602 'IEM_MC_FETCH_GREG_U8_SX_U16': McBlock.parseMcGeneric,2603 'IEM_MC_FETCH_GREG_U8_SX_U32': McBlock.parseMcGeneric,2604 'IEM_MC_FETCH_GREG_U8_SX_U64': McBlock.parseMcGeneric,2605 'IEM_MC_FETCH_GREG_U8_ZX_U16': McBlock.parseMcGeneric,2606 'IEM_MC_FETCH_GREG_U8_ZX_U32': McBlock.parseMcGeneric,2607 'IEM_MC_FETCH_GREG_U8_ZX_U64': McBlock.parseMcGeneric,2608 'IEM_MC_FETCH_MEM_D80': McBlock.parseMcGeneric,2609 'IEM_MC_FETCH_MEM_I16': McBlock.parseMcGeneric,2610 'IEM_MC_FETCH_MEM_I32': McBlock.parseMcGeneric,2611 'IEM_MC_FETCH_MEM_I64': McBlock.parseMcGeneric,2612 'IEM_MC_FETCH_MEM_R32': McBlock.parseMcGeneric,2613 'IEM_MC_FETCH_MEM_R64': McBlock.parseMcGeneric,2614 'IEM_MC_FETCH_MEM_R80': McBlock.parseMcGeneric,2615 'IEM_MC_FETCH_MEM_S32_SX_U64': McBlock.parseMcGeneric,2616 'IEM_MC_FETCH_MEM_U128': McBlock.parseMcGeneric,2617 'IEM_MC_FETCH_MEM_U128_ALIGN_SSE': McBlock.parseMcGeneric,2618 'IEM_MC_FETCH_MEM_U128_NO_AC': McBlock.parseMcGeneric,2619 'IEM_MC_FETCH_MEM_U16': McBlock.parseMcGeneric,2620 'IEM_MC_FETCH_MEM_U16_DISP': McBlock.parseMcGeneric,2621 'IEM_MC_FETCH_MEM_U16_SX_U32': McBlock.parseMcGeneric,2622 'IEM_MC_FETCH_MEM_U16_SX_U64': McBlock.parseMcGeneric,2623 'IEM_MC_FETCH_MEM_U16_ZX_U32': McBlock.parseMcGeneric,2624 'IEM_MC_FETCH_MEM_U16_ZX_U64': McBlock.parseMcGeneric,2625 'IEM_MC_FETCH_MEM_U256': McBlock.parseMcGeneric,2626 'IEM_MC_FETCH_MEM_U256_ALIGN_AVX': McBlock.parseMcGeneric,2627 'IEM_MC_FETCH_MEM_U256_NO_AC': McBlock.parseMcGeneric,2628 'IEM_MC_FETCH_MEM_U32': McBlock.parseMcGeneric,2629 'IEM_MC_FETCH_MEM_U32_DISP': McBlock.parseMcGeneric,2630 'IEM_MC_FETCH_MEM_U32_SX_U64': McBlock.parseMcGeneric,2631 'IEM_MC_FETCH_MEM_U32_ZX_U64': McBlock.parseMcGeneric,2632 'IEM_MC_FETCH_MEM_U64': McBlock.parseMcGeneric,2633 'IEM_MC_FETCH_MEM_U64_ALIGN_U128': McBlock.parseMcGeneric,2634 'IEM_MC_FETCH_MEM_U64_DISP': McBlock.parseMcGeneric,2635 'IEM_MC_FETCH_MEM_U8': McBlock.parseMcGeneric,2636 'IEM_MC_FETCH_MEM_U8_SX_U16': McBlock.parseMcGeneric,2637 'IEM_MC_FETCH_MEM_U8_SX_U32': McBlock.parseMcGeneric,2638 'IEM_MC_FETCH_MEM_U8_SX_U64': McBlock.parseMcGeneric,2639 'IEM_MC_FETCH_MEM_U8_ZX_U16': McBlock.parseMcGeneric,2640 'IEM_MC_FETCH_MEM_U8_ZX_U32': McBlock.parseMcGeneric,2641 'IEM_MC_FETCH_MEM_U8_ZX_U64': McBlock.parseMcGeneric,2642 'IEM_MC_FETCH_MEM_XMM': McBlock.parseMcGeneric,2643 'IEM_MC_FETCH_MEM_XMM_ALIGN_SSE': McBlock.parseMcGeneric,2644 'IEM_MC_FETCH_MEM_XMM_NO_AC': McBlock.parseMcGeneric,2645 'IEM_MC_FETCH_MEM_XMM_U32': McBlock.parseMcGeneric,2646 'IEM_MC_FETCH_MEM_XMM_U64': McBlock.parseMcGeneric,2647 'IEM_MC_FETCH_MEM_YMM': McBlock.parseMcGeneric,2648 'IEM_MC_FETCH_MEM_YMM_ALIGN_AVX': McBlock.parseMcGeneric,2649 'IEM_MC_FETCH_MEM_YMM_NO_AC': McBlock.parseMcGeneric,2650 'IEM_MC_FETCH_MEM16_U8': McBlock.parseMcGeneric,2651 'IEM_MC_FETCH_MEM32_U8': McBlock.parseMcGeneric,2652 'IEM_MC_FETCH_MREG_U32': McBlock.parseMcGeneric,2653 'IEM_MC_FETCH_MREG_U64': McBlock.parseMcGeneric,2654 'IEM_MC_FETCH_SREG_BASE_U32': McBlock.parseMcGeneric,2655 'IEM_MC_FETCH_SREG_BASE_U64': McBlock.parseMcGeneric,2656 'IEM_MC_FETCH_SREG_U16': McBlock.parseMcGeneric,2657 'IEM_MC_FETCH_SREG_ZX_U32': McBlock.parseMcGeneric,2658 'IEM_MC_FETCH_SREG_ZX_U64': McBlock.parseMcGeneric,2659 'IEM_MC_FETCH_XREG_U128': McBlock.parseMcGeneric,2660 'IEM_MC_FETCH_XREG_U16': McBlock.parseMcGeneric,2661 'IEM_MC_FETCH_XREG_U32': McBlock.parseMcGeneric,2662 'IEM_MC_FETCH_XREG_U64': McBlock.parseMcGeneric,2663 'IEM_MC_FETCH_XREG_U8': McBlock.parseMcGeneric,2664 'IEM_MC_FETCH_XREG_XMM': McBlock.parseMcGeneric,2665 'IEM_MC_FETCH_YREG_2ND_U64': McBlock.parseMcGeneric,2666 'IEM_MC_FETCH_YREG_U128': McBlock.parseMcGeneric,2667 'IEM_MC_FETCH_YREG_U256': McBlock.parseMcGeneric,2668 'IEM_MC_FETCH_YREG_U32': McBlock.parseMcGeneric,2669 'IEM_MC_FETCH_YREG_U64': McBlock.parseMcGeneric,2670 'IEM_MC_FLIP_EFL_BIT': McBlock.parseMcGeneric,2671 'IEM_MC_FPU_FROM_MMX_MODE': McBlock.parseMcGeneric,2672 'IEM_MC_FPU_STACK_DEC_TOP': McBlock.parseMcGeneric,2673 'IEM_MC_FPU_STACK_FREE': McBlock.parseMcGeneric,2674 'IEM_MC_FPU_STACK_INC_TOP': McBlock.parseMcGeneric,2675 'IEM_MC_FPU_STACK_PUSH_OVERFLOW': McBlock.parseMcGeneric,2676 'IEM_MC_FPU_STACK_PUSH_OVERFLOW_MEM_OP': McBlock.parseMcGeneric,2677 'IEM_MC_FPU_STACK_PUSH_UNDERFLOW': McBlock.parseMcGeneric,2678 'IEM_MC_FPU_STACK_PUSH_UNDERFLOW_TWO': McBlock.parseMcGeneric,2679 'IEM_MC_FPU_STACK_UNDERFLOW': McBlock.parseMcGeneric,2680 'IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP': McBlock.parseMcGeneric,2681 'IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP': McBlock.parseMcGeneric,2682 'IEM_MC_FPU_STACK_UNDERFLOW_THEN_POP': McBlock.parseMcGeneric,2683 'IEM_MC_FPU_STACK_UNDERFLOW_THEN_POP_POP': McBlock.parseMcGeneric,2684 'IEM_MC_FPU_TO_MMX_MODE': McBlock.parseMcGeneric,2685 'IEM_MC_IF_CX_IS_NZ': McBlock.parseMcGenericCond,2686 'IEM_MC_IF_CX_IS_NZ_AND_EFL_BIT_NOT_SET': McBlock.parseMcGenericCond,2687 'IEM_MC_IF_CX_IS_NZ_AND_EFL_BIT_SET': McBlock.parseMcGenericCond,2688 'IEM_MC_IF_ECX_IS_NZ': McBlock.parseMcGenericCond,2689 'IEM_MC_IF_ECX_IS_NZ_AND_EFL_BIT_NOT_SET': McBlock.parseMcGenericCond,2690 'IEM_MC_IF_ECX_IS_NZ_AND_EFL_BIT_SET': McBlock.parseMcGenericCond,2691 'IEM_MC_IF_EFL_ANY_BITS_SET': McBlock.parseMcGenericCond,2692 'IEM_MC_IF_EFL_BIT_NOT_SET': McBlock.parseMcGenericCond,2693 'IEM_MC_IF_EFL_BIT_NOT_SET_AND_BITS_EQ': McBlock.parseMcGenericCond,2694 'IEM_MC_IF_EFL_BIT_SET': McBlock.parseMcGenericCond,2695 'IEM_MC_IF_EFL_BIT_SET_OR_BITS_NE': McBlock.parseMcGenericCond,2696 'IEM_MC_IF_EFL_BITS_EQ': McBlock.parseMcGenericCond,2697 'IEM_MC_IF_EFL_BITS_NE': McBlock.parseMcGenericCond,2698 'IEM_MC_IF_EFL_NO_BITS_SET': McBlock.parseMcGenericCond,2699 'IEM_MC_IF_FCW_IM': McBlock.parseMcGenericCond,2700 'IEM_MC_IF_FPUREG_IS_EMPTY': McBlock.parseMcGenericCond,2701 'IEM_MC_IF_FPUREG_NOT_EMPTY': McBlock.parseMcGenericCond,2702 'IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80': McBlock.parseMcGenericCond,2703 'IEM_MC_IF_GREG_BIT_SET': McBlock.parseMcGenericCond,2704 'IEM_MC_IF_LOCAL_IS_Z': McBlock.parseMcGenericCond,2705 'IEM_MC_IF_MXCSR_XCPT_PENDING': McBlock.parseMcGenericCond,2706 'IEM_MC_IF_RCX_IS_NZ': McBlock.parseMcGenericCond,2707 'IEM_MC_IF_RCX_IS_NZ_AND_EFL_BIT_NOT_SET': McBlock.parseMcGenericCond,2708 'IEM_MC_IF_RCX_IS_NZ_AND_EFL_BIT_SET': McBlock.parseMcGenericCond,2709 'IEM_MC_IF_TWO_FPUREGS_NOT_EMPTY_REF_R80': McBlock.parseMcGenericCond,2710 'IEM_MC_IF_TWO_FPUREGS_NOT_EMPTY_REF_R80_FIRST': McBlock.parseMcGenericCond,2711 'IEM_MC_IMPLICIT_AVX_AIMPL_ARGS': McBlock.parseMcGeneric,2712 'IEM_MC_INT_CLEAR_ZMM_256_UP': McBlock.parseMcGeneric,2713 'IEM_MC_LOCAL': McBlock.parseMcLocal,2714 'IEM_MC_LOCAL_CONST': McBlock.parseMcLocalConst,2715 'IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT': McBlock.parseMcGeneric,2716 'IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE': McBlock.parseMcGeneric,2717 'IEM_MC_MAYBE_RAISE_FPU_XCPT': McBlock.parseMcGeneric,2718 'IEM_MC_MAYBE_RAISE_FSGSBASE_XCPT': McBlock.parseMcGeneric,2719 'IEM_MC_MAYBE_RAISE_MMX_RELATED_XCPT': McBlock.parseMcGeneric,2720 'IEM_MC_MAYBE_RAISE_NON_CANONICAL_ADDR_GP0': McBlock.parseMcGeneric,2721 'IEM_MC_MAYBE_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT': McBlock.parseMcGeneric,2722 'IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT': McBlock.parseMcGeneric,2723 'IEM_MC_MAYBE_RAISE_WAIT_DEVICE_NOT_AVAILABLE': McBlock.parseMcGeneric,2724 'IEM_MC_MEM_COMMIT_AND_UNMAP': McBlock.parseMcGeneric,2725 'IEM_MC_MEM_COMMIT_AND_UNMAP_FOR_FPU_STORE': McBlock.parseMcGeneric,2726 'IEM_MC_MEM_MAP': McBlock.parseMcGeneric,2727 'IEM_MC_MEM_MAP_EX': McBlock.parseMcGeneric,2728 'IEM_MC_MERGE_YREG_U32_U96_ZX_VLMAX': McBlock.parseMcGeneric,2729 'IEM_MC_MERGE_YREG_U64_U64_ZX_VLMAX': McBlock.parseMcGeneric,2730 'IEM_MC_MERGE_YREG_U64HI_U64HI_ZX_VLMAX': McBlock.parseMcGeneric,2731 'IEM_MC_MERGE_YREG_U64LO_U64LO_ZX_VLMAX': McBlock.parseMcGeneric,2732 'IEM_MC_MERGE_YREG_U64LO_U64LOCAL_ZX_VLMAX': McBlock.parseMcGeneric,2733 'IEM_MC_MERGE_YREG_U64LOCAL_U64HI_ZX_VLMAX': McBlock.parseMcGeneric,2734 'IEM_MC_MODIFIED_MREG': McBlock.parseMcGeneric,2735 'IEM_MC_MODIFIED_MREG_BY_REF': McBlock.parseMcGeneric,2736 'IEM_MC_OR_2LOCS_U32': McBlock.parseMcGeneric,2737 'IEM_MC_OR_GREG_U16': McBlock.parseMcGeneric,2738 'IEM_MC_OR_GREG_U32': McBlock.parseMcGeneric,2739 'IEM_MC_OR_GREG_U64': McBlock.parseMcGeneric,2740 'IEM_MC_OR_GREG_U8': McBlock.parseMcGeneric,2741 'IEM_MC_OR_LOCAL_U16': McBlock.parseMcGeneric,2742 'IEM_MC_OR_LOCAL_U32': McBlock.parseMcGeneric,2743 'IEM_MC_OR_LOCAL_U8': McBlock.parseMcGeneric,2744 'IEM_MC_POP_U16': McBlock.parseMcGeneric,2745 'IEM_MC_POP_U32': McBlock.parseMcGeneric,2746 'IEM_MC_POP_U64': McBlock.parseMcGeneric,2747 'IEM_MC_PREPARE_AVX_USAGE': McBlock.parseMcGeneric,2748 'IEM_MC_PREPARE_FPU_USAGE': McBlock.parseMcGeneric,2749 'IEM_MC_PREPARE_SSE_USAGE': McBlock.parseMcGeneric,2750 'IEM_MC_PUSH_FPU_RESULT': McBlock.parseMcGeneric,2751 'IEM_MC_PUSH_FPU_RESULT_MEM_OP': McBlock.parseMcGeneric,2752 'IEM_MC_PUSH_FPU_RESULT_TWO': McBlock.parseMcGeneric,2753 'IEM_MC_PUSH_U16': McBlock.parseMcGeneric,2754 'IEM_MC_PUSH_U32': McBlock.parseMcGeneric,2755 'IEM_MC_PUSH_U32_SREG': McBlock.parseMcGeneric,2756 'IEM_MC_PUSH_U64': McBlock.parseMcGeneric,2757 'IEM_MC_RAISE_DIVIDE_ERROR': McBlock.parseMcGeneric,2758 'IEM_MC_RAISE_GP0_IF_CPL_NOT_ZERO': McBlock.parseMcGeneric,2759 'IEM_MC_RAISE_GP0_IF_EFF_ADDR_UNALIGNED': McBlock.parseMcGeneric,2760 'IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT': McBlock.parseMcGeneric,2761 'IEM_MC_REF_EFLAGS': McBlock.parseMcGeneric,2762 'IEM_MC_REF_FPUREG': McBlock.parseMcGeneric,2763 'IEM_MC_REF_GREG_I32': McBlock.parseMcGeneric,2764 'IEM_MC_REF_GREG_I32_CONST': McBlock.parseMcGeneric,2765 'IEM_MC_REF_GREG_I64': McBlock.parseMcGeneric,2766 'IEM_MC_REF_GREG_I64_CONST': McBlock.parseMcGeneric,2767 'IEM_MC_REF_GREG_U16': McBlock.parseMcGeneric,2768 'IEM_MC_REF_GREG_U32': McBlock.parseMcGeneric,2769 'IEM_MC_REF_GREG_U64': McBlock.parseMcGeneric,2770 'IEM_MC_REF_GREG_U8': McBlock.parseMcGeneric,2771 'IEM_MC_REF_LOCAL': McBlock.parseMcGeneric,2772 'IEM_MC_REF_MREG_U32_CONST': McBlock.parseMcGeneric,2773 'IEM_MC_REF_MREG_U64': McBlock.parseMcGeneric,2774 'IEM_MC_REF_MREG_U64_CONST': McBlock.parseMcGeneric,2775 'IEM_MC_REF_MXCSR': McBlock.parseMcGeneric,2776 'IEM_MC_REF_XREG_R32_CONST': McBlock.parseMcGeneric,2777 'IEM_MC_REF_XREG_R64_CONST': McBlock.parseMcGeneric,2778 'IEM_MC_REF_XREG_U128': McBlock.parseMcGeneric,2779 'IEM_MC_REF_XREG_U128_CONST': McBlock.parseMcGeneric,2780 'IEM_MC_REF_XREG_U32_CONST': McBlock.parseMcGeneric,2781 'IEM_MC_REF_XREG_U64_CONST': McBlock.parseMcGeneric,2782 'IEM_MC_REF_XREG_XMM_CONST': McBlock.parseMcGeneric,2783 'IEM_MC_REF_YREG_U128': McBlock.parseMcGeneric,2784 'IEM_MC_REF_YREG_U128_CONST': McBlock.parseMcGeneric,2785 'IEM_MC_REF_YREG_U64_CONST': McBlock.parseMcGeneric,2786 'IEM_MC_REL_JMP_S16_AND_FINISH': McBlock.parseMcGeneric,2787 'IEM_MC_REL_JMP_S32_AND_FINISH': McBlock.parseMcGeneric,2788 'IEM_MC_REL_JMP_S8_AND_FINISH': McBlock.parseMcGeneric,2789 'IEM_MC_RETURN_ON_FAILURE': McBlock.parseMcGeneric,2790 'IEM_MC_SAR_LOCAL_S16': McBlock.parseMcGeneric,2791 'IEM_MC_SAR_LOCAL_S32': McBlock.parseMcGeneric,2792 'IEM_MC_SAR_LOCAL_S64': McBlock.parseMcGeneric,2793 'IEM_MC_SET_EFL_BIT': McBlock.parseMcGeneric,2794 'IEM_MC_SET_FPU_RESULT': McBlock.parseMcGeneric,2795 'IEM_MC_SET_RIP_U16_AND_FINISH': McBlock.parseMcGeneric,2796 'IEM_MC_SET_RIP_U32_AND_FINISH': McBlock.parseMcGeneric,2797 'IEM_MC_SET_RIP_U64_AND_FINISH': McBlock.parseMcGeneric,2798 'IEM_MC_SHL_LOCAL_S16': McBlock.parseMcGeneric,2799 'IEM_MC_SHL_LOCAL_S32': McBlock.parseMcGeneric,2800 'IEM_MC_SHL_LOCAL_S64': McBlock.parseMcGeneric,2801 'IEM_MC_SHR_LOCAL_U8': McBlock.parseMcGeneric,2802 'IEM_MC_SSE_UPDATE_MXCSR': McBlock.parseMcGeneric,2803 'IEM_MC_STORE_FPU_RESULT': McBlock.parseMcGeneric,2804 'IEM_MC_STORE_FPU_RESULT_MEM_OP': McBlock.parseMcGeneric,2805 'IEM_MC_STORE_FPU_RESULT_THEN_POP': McBlock.parseMcGeneric,2806 'IEM_MC_STORE_FPU_RESULT_WITH_MEM_OP_THEN_POP': McBlock.parseMcGeneric,2807 'IEM_MC_STORE_FPUREG_R80_SRC_REF': McBlock.parseMcGeneric,2808 'IEM_MC_STORE_GREG_I64': McBlock.parseMcGeneric,2809 'IEM_MC_STORE_GREG_U16': McBlock.parseMcGeneric,2810 'IEM_MC_STORE_GREG_U16_CONST': McBlock.parseMcGeneric,2811 'IEM_MC_STORE_GREG_U32': McBlock.parseMcGeneric,2812 'IEM_MC_STORE_GREG_U32_CONST': McBlock.parseMcGeneric,2813 'IEM_MC_STORE_GREG_U64': McBlock.parseMcGeneric,2814 'IEM_MC_STORE_GREG_U64_CONST': McBlock.parseMcGeneric,2815 'IEM_MC_STORE_GREG_U8': McBlock.parseMcGeneric,2816 'IEM_MC_STORE_GREG_U8_CONST': McBlock.parseMcGeneric,2817 'IEM_MC_STORE_MEM_I16_CONST_BY_REF': McBlock.parseMcGeneric,2818 'IEM_MC_STORE_MEM_I32_CONST_BY_REF': McBlock.parseMcGeneric,2819 'IEM_MC_STORE_MEM_I64_CONST_BY_REF': McBlock.parseMcGeneric,2820 'IEM_MC_STORE_MEM_I8_CONST_BY_REF': McBlock.parseMcGeneric,2821 'IEM_MC_STORE_MEM_INDEF_D80_BY_REF': McBlock.parseMcGeneric,2822 'IEM_MC_STORE_MEM_NEG_QNAN_R32_BY_REF': McBlock.parseMcGeneric,2823 'IEM_MC_STORE_MEM_NEG_QNAN_R64_BY_REF': McBlock.parseMcGeneric,2824 'IEM_MC_STORE_MEM_NEG_QNAN_R80_BY_REF': McBlock.parseMcGeneric,2825 'IEM_MC_STORE_MEM_U128': McBlock.parseMcGeneric,2826 'IEM_MC_STORE_MEM_U128_ALIGN_SSE': McBlock.parseMcGeneric,2827 'IEM_MC_STORE_MEM_U16': McBlock.parseMcGeneric,2828 'IEM_MC_STORE_MEM_U16_CONST': McBlock.parseMcGeneric,2829 'IEM_MC_STORE_MEM_U256': McBlock.parseMcGeneric,2830 'IEM_MC_STORE_MEM_U256_ALIGN_AVX': McBlock.parseMcGeneric,2831 'IEM_MC_STORE_MEM_U32': McBlock.parseMcGeneric,2832 'IEM_MC_STORE_MEM_U32_CONST': McBlock.parseMcGeneric,2833 'IEM_MC_STORE_MEM_U64': McBlock.parseMcGeneric,2834 'IEM_MC_STORE_MEM_U64_CONST': McBlock.parseMcGeneric,2835 'IEM_MC_STORE_MEM_U8': McBlock.parseMcGeneric,2836 'IEM_MC_STORE_MEM_U8_CONST': McBlock.parseMcGeneric,2837 'IEM_MC_STORE_MREG_U32_ZX_U64': McBlock.parseMcGeneric,2838 'IEM_MC_STORE_MREG_U64': McBlock.parseMcGeneric,2839 'IEM_MC_STORE_SREG_BASE_U32': McBlock.parseMcGeneric,2840 'IEM_MC_STORE_SREG_BASE_U64': McBlock.parseMcGeneric,2841 'IEM_MC_STORE_SSE_RESULT': McBlock.parseMcGeneric,2842 'IEM_MC_STORE_XREG_HI_U64': McBlock.parseMcGeneric,2843 'IEM_MC_STORE_XREG_R32': McBlock.parseMcGeneric,2844 'IEM_MC_STORE_XREG_R64': McBlock.parseMcGeneric,2845 'IEM_MC_STORE_XREG_U128': McBlock.parseMcGeneric,2846 'IEM_MC_STORE_XREG_U16': McBlock.parseMcGeneric,2847 'IEM_MC_STORE_XREG_U32': McBlock.parseMcGeneric,2848 'IEM_MC_STORE_XREG_U32_U128': McBlock.parseMcGeneric,2849 'IEM_MC_STORE_XREG_U32_ZX_U128': McBlock.parseMcGeneric,2850 'IEM_MC_STORE_XREG_U64': McBlock.parseMcGeneric,2851 'IEM_MC_STORE_XREG_U64_ZX_U128': McBlock.parseMcGeneric,2852 'IEM_MC_STORE_XREG_U8': McBlock.parseMcGeneric,2853 'IEM_MC_STORE_XREG_XMM': McBlock.parseMcGeneric,2854 'IEM_MC_STORE_XREG_XMM_U32': McBlock.parseMcGeneric,2855 'IEM_MC_STORE_XREG_XMM_U64': McBlock.parseMcGeneric,2856 'IEM_MC_STORE_YREG_U128': McBlock.parseMcGeneric,2857 'IEM_MC_STORE_YREG_U128_ZX_VLMAX': McBlock.parseMcGeneric,2858 'IEM_MC_STORE_YREG_U256_ZX_VLMAX': McBlock.parseMcGeneric,2859 'IEM_MC_STORE_YREG_U32_ZX_VLMAX': McBlock.parseMcGeneric,2860 'IEM_MC_STORE_YREG_U64_ZX_VLMAX': McBlock.parseMcGeneric,2861 'IEM_MC_SUB_GREG_U16': McBlock.parseMcGeneric,2862 'IEM_MC_SUB_GREG_U32': McBlock.parseMcGeneric,2863 'IEM_MC_SUB_GREG_U64': McBlock.parseMcGeneric,2864 'IEM_MC_SUB_GREG_U8': McBlock.parseMcGeneric,2865 'IEM_MC_SUB_LOCAL_U16': McBlock.parseMcGeneric,2866 'IEM_MC_UPDATE_FPU_OPCODE_IP': McBlock.parseMcGeneric,2867 'IEM_MC_UPDATE_FSW': McBlock.parseMcGeneric,2868 'IEM_MC_UPDATE_FSW_CONST': McBlock.parseMcGeneric,2869 'IEM_MC_UPDATE_FSW_THEN_POP': McBlock.parseMcGeneric,2870 'IEM_MC_UPDATE_FSW_THEN_POP_POP': McBlock.parseMcGeneric,2871 'IEM_MC_UPDATE_FSW_WITH_MEM_OP': McBlock.parseMcGeneric,2872 'IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP': McBlock.parseMcGeneric,2555 'IEM_MC_ACTUALIZE_AVX_STATE_FOR_CHANGE': (McBlock.parseMcGeneric, False), 2556 'IEM_MC_ACTUALIZE_AVX_STATE_FOR_READ': (McBlock.parseMcGeneric, False), 2557 'IEM_MC_ACTUALIZE_FPU_STATE_FOR_CHANGE': (McBlock.parseMcGeneric, False), 2558 'IEM_MC_ACTUALIZE_FPU_STATE_FOR_READ': (McBlock.parseMcGeneric, False), 2559 'IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE': (McBlock.parseMcGeneric, False), 2560 'IEM_MC_ACTUALIZE_SSE_STATE_FOR_READ': (McBlock.parseMcGeneric, False), 2561 'IEM_MC_ADD_GREG_U16': (McBlock.parseMcGeneric, True), 2562 'IEM_MC_ADD_GREG_U16_TO_LOCAL': (McBlock.parseMcGeneric, False), 2563 'IEM_MC_ADD_GREG_U32': (McBlock.parseMcGeneric, True), 2564 'IEM_MC_ADD_GREG_U32_TO_LOCAL': (McBlock.parseMcGeneric, False), 2565 'IEM_MC_ADD_GREG_U64': (McBlock.parseMcGeneric, True), 2566 'IEM_MC_ADD_GREG_U64_TO_LOCAL': (McBlock.parseMcGeneric, False), 2567 'IEM_MC_ADD_GREG_U8': (McBlock.parseMcGeneric, True), 2568 'IEM_MC_ADD_GREG_U8_TO_LOCAL': (McBlock.parseMcGeneric, False), 2569 'IEM_MC_ADD_LOCAL_S16_TO_EFF_ADDR': (McBlock.parseMcGeneric, True), 2570 'IEM_MC_ADD_LOCAL_S32_TO_EFF_ADDR': (McBlock.parseMcGeneric, True), 2571 'IEM_MC_ADD_LOCAL_S64_TO_EFF_ADDR': (McBlock.parseMcGeneric, True), 2572 'IEM_MC_ADVANCE_RIP_AND_FINISH': (McBlock.parseMcGeneric, True), 2573 'IEM_MC_AND_2LOCS_U32': (McBlock.parseMcGeneric, False), 2574 'IEM_MC_AND_ARG_U16': (McBlock.parseMcGeneric, False), 2575 'IEM_MC_AND_ARG_U32': (McBlock.parseMcGeneric, False), 2576 'IEM_MC_AND_ARG_U64': (McBlock.parseMcGeneric, False), 2577 'IEM_MC_AND_GREG_U16': (McBlock.parseMcGeneric, True), 2578 'IEM_MC_AND_GREG_U32': (McBlock.parseMcGeneric, True), 2579 'IEM_MC_AND_GREG_U64': (McBlock.parseMcGeneric, True), 2580 'IEM_MC_AND_GREG_U8': (McBlock.parseMcGeneric, True), 2581 'IEM_MC_AND_LOCAL_U16': (McBlock.parseMcGeneric, False), 2582 'IEM_MC_AND_LOCAL_U32': (McBlock.parseMcGeneric, False), 2583 'IEM_MC_AND_LOCAL_U64': (McBlock.parseMcGeneric, False), 2584 'IEM_MC_AND_LOCAL_U8': (McBlock.parseMcGeneric, False), 2585 'IEM_MC_ARG': (McBlock.parseMcArg, False), 2586 'IEM_MC_ARG_CONST': (McBlock.parseMcArgConst, False), 2587 'IEM_MC_ARG_LOCAL_EFLAGS': (McBlock.parseMcArgLocalEFlags, False), 2588 'IEM_MC_ARG_LOCAL_REF': (McBlock.parseMcArgLocalRef, False), 2589 'IEM_MC_ASSIGN': (McBlock.parseMcGeneric, False), 2590 'IEM_MC_ASSIGN_TO_SMALLER': (McBlock.parseMcGeneric, False), 2591 'IEM_MC_ASSIGN_U8_SX_U64': (McBlock.parseMcGeneric, False), 2592 'IEM_MC_ASSIGN_U32_SX_U64': (McBlock.parseMcGeneric, False), 2593 'IEM_MC_BEGIN': (McBlock.parseMcGeneric, False), 2594 'IEM_MC_BROADCAST_XREG_U16_ZX_VLMAX': (McBlock.parseMcGeneric, True), 2595 'IEM_MC_BROADCAST_XREG_U32_ZX_VLMAX': (McBlock.parseMcGeneric, True), 2596 'IEM_MC_BROADCAST_XREG_U64_ZX_VLMAX': (McBlock.parseMcGeneric, True), 2597 'IEM_MC_BROADCAST_XREG_U8_ZX_VLMAX': (McBlock.parseMcGeneric, True), 2598 'IEM_MC_BROADCAST_YREG_U128_ZX_VLMAX': (McBlock.parseMcGeneric, True), 2599 'IEM_MC_BROADCAST_YREG_U16_ZX_VLMAX': (McBlock.parseMcGeneric, True), 2600 'IEM_MC_BROADCAST_YREG_U32_ZX_VLMAX': (McBlock.parseMcGeneric, True), 2601 'IEM_MC_BROADCAST_YREG_U64_ZX_VLMAX': (McBlock.parseMcGeneric, True), 2602 'IEM_MC_BROADCAST_YREG_U8_ZX_VLMAX': (McBlock.parseMcGeneric, True), 2603 'IEM_MC_BSWAP_LOCAL_U16': (McBlock.parseMcGeneric, False), 2604 'IEM_MC_BSWAP_LOCAL_U32': (McBlock.parseMcGeneric, False), 2605 'IEM_MC_BSWAP_LOCAL_U64': (McBlock.parseMcGeneric, False), 2606 'IEM_MC_CALC_RM_EFF_ADDR': (McBlock.parseMcGeneric, False), 2607 'IEM_MC_CALL_AIMPL_3': (McBlock.parseMcCallAImpl, True), 2608 'IEM_MC_CALL_AIMPL_4': (McBlock.parseMcCallAImpl, True), 2609 'IEM_MC_CALL_AVX_AIMPL_2': (McBlock.parseMcCallAvxAImpl, True), 2610 'IEM_MC_CALL_AVX_AIMPL_3': (McBlock.parseMcCallAvxAImpl, True), 2611 'IEM_MC_CALL_CIMPL_0': (McBlock.parseMcCallCImpl, True), 2612 'IEM_MC_CALL_CIMPL_1': (McBlock.parseMcCallCImpl, True), 2613 'IEM_MC_CALL_CIMPL_2': (McBlock.parseMcCallCImpl, True), 2614 'IEM_MC_CALL_CIMPL_3': (McBlock.parseMcCallCImpl, True), 2615 'IEM_MC_CALL_CIMPL_4': (McBlock.parseMcCallCImpl, True), 2616 'IEM_MC_CALL_CIMPL_5': (McBlock.parseMcCallCImpl, True), 2617 'IEM_MC_CALL_FPU_AIMPL_1': (McBlock.parseMcCallFpuAImpl, True), 2618 'IEM_MC_CALL_FPU_AIMPL_2': (McBlock.parseMcCallFpuAImpl, True), 2619 'IEM_MC_CALL_FPU_AIMPL_3': (McBlock.parseMcCallFpuAImpl, True), 2620 'IEM_MC_CALL_MMX_AIMPL_2': (McBlock.parseMcCallMmxAImpl, True), 2621 'IEM_MC_CALL_MMX_AIMPL_3': (McBlock.parseMcCallMmxAImpl, True), 2622 'IEM_MC_CALL_SSE_AIMPL_2': (McBlock.parseMcCallSseAImpl, True), 2623 'IEM_MC_CALL_SSE_AIMPL_3': (McBlock.parseMcCallSseAImpl, True), 2624 'IEM_MC_CALL_VOID_AIMPL_0': (McBlock.parseMcCallVoidAImpl, True), 2625 'IEM_MC_CALL_VOID_AIMPL_1': (McBlock.parseMcCallVoidAImpl, True), 2626 'IEM_MC_CALL_VOID_AIMPL_2': (McBlock.parseMcCallVoidAImpl, True), 2627 'IEM_MC_CALL_VOID_AIMPL_3': (McBlock.parseMcCallVoidAImpl, True), 2628 'IEM_MC_CALL_VOID_AIMPL_4': (McBlock.parseMcCallVoidAImpl, True), 2629 'IEM_MC_CLEAR_EFL_BIT': (McBlock.parseMcGeneric, True), 2630 'IEM_MC_CLEAR_FSW_EX': (McBlock.parseMcGeneric, True), 2631 'IEM_MC_CLEAR_HIGH_GREG_U64': (McBlock.parseMcGeneric, True), 2632 'IEM_MC_CLEAR_HIGH_GREG_U64_BY_REF': (McBlock.parseMcGeneric, True), 2633 'IEM_MC_CLEAR_XREG_U32_MASK': (McBlock.parseMcGeneric, True), 2634 'IEM_MC_CLEAR_YREG_128_UP': (McBlock.parseMcGeneric, True), 2635 'IEM_MC_COMMIT_EFLAGS': (McBlock.parseMcGeneric, True), 2636 'IEM_MC_COPY_XREG_U128': (McBlock.parseMcGeneric, True), 2637 'IEM_MC_COPY_YREG_U128_ZX_VLMAX': (McBlock.parseMcGeneric, True), 2638 'IEM_MC_COPY_YREG_U256_ZX_VLMAX': (McBlock.parseMcGeneric, True), 2639 'IEM_MC_COPY_YREG_U64_ZX_VLMAX': (McBlock.parseMcGeneric, True), 2640 'IEM_MC_DEFER_TO_CIMPL_0_RET': (McBlock.parseMcGeneric, False), 2641 'IEM_MC_DEFER_TO_CIMPL_1_RET': (McBlock.parseMcGeneric, False), 2642 'IEM_MC_DEFER_TO_CIMPL_2_RET': (McBlock.parseMcGeneric, False), 2643 'IEM_MC_DEFER_TO_CIMPL_3_RET': (McBlock.parseMcGeneric, False), 2644 'IEM_MC_END': (McBlock.parseMcGeneric, True), 2645 'IEM_MC_FETCH_EFLAGS': (McBlock.parseMcGeneric, False), 2646 'IEM_MC_FETCH_EFLAGS_U8': (McBlock.parseMcGeneric, False), 2647 'IEM_MC_FETCH_FCW': (McBlock.parseMcGeneric, False), 2648 'IEM_MC_FETCH_FSW': (McBlock.parseMcGeneric, False), 2649 'IEM_MC_FETCH_GREG_U16': (McBlock.parseMcGeneric, False), 2650 'IEM_MC_FETCH_GREG_U16_SX_U32': (McBlock.parseMcGeneric, False), 2651 'IEM_MC_FETCH_GREG_U16_SX_U64': (McBlock.parseMcGeneric, False), 2652 'IEM_MC_FETCH_GREG_U16_ZX_U32': (McBlock.parseMcGeneric, False), 2653 'IEM_MC_FETCH_GREG_U16_ZX_U64': (McBlock.parseMcGeneric, False), 2654 'IEM_MC_FETCH_GREG_U32': (McBlock.parseMcGeneric, False), 2655 'IEM_MC_FETCH_GREG_U32_SX_U64': (McBlock.parseMcGeneric, False), 2656 'IEM_MC_FETCH_GREG_U32_ZX_U64': (McBlock.parseMcGeneric, False), 2657 'IEM_MC_FETCH_GREG_U64': (McBlock.parseMcGeneric, False), 2658 'IEM_MC_FETCH_GREG_U64_ZX_U64': (McBlock.parseMcGeneric, False), 2659 'IEM_MC_FETCH_GREG_U8': (McBlock.parseMcGeneric, False), 2660 'IEM_MC_FETCH_GREG_U8_SX_U16': (McBlock.parseMcGeneric, False), 2661 'IEM_MC_FETCH_GREG_U8_SX_U32': (McBlock.parseMcGeneric, False), 2662 'IEM_MC_FETCH_GREG_U8_SX_U64': (McBlock.parseMcGeneric, False), 2663 'IEM_MC_FETCH_GREG_U8_ZX_U16': (McBlock.parseMcGeneric, False), 2664 'IEM_MC_FETCH_GREG_U8_ZX_U32': (McBlock.parseMcGeneric, False), 2665 'IEM_MC_FETCH_GREG_U8_ZX_U64': (McBlock.parseMcGeneric, False), 2666 'IEM_MC_FETCH_MEM_D80': (McBlock.parseMcGeneric, True), 2667 'IEM_MC_FETCH_MEM_I16': (McBlock.parseMcGeneric, True), 2668 'IEM_MC_FETCH_MEM_I32': (McBlock.parseMcGeneric, True), 2669 'IEM_MC_FETCH_MEM_I64': (McBlock.parseMcGeneric, True), 2670 'IEM_MC_FETCH_MEM_R32': (McBlock.parseMcGeneric, True), 2671 'IEM_MC_FETCH_MEM_R64': (McBlock.parseMcGeneric, True), 2672 'IEM_MC_FETCH_MEM_R80': (McBlock.parseMcGeneric, True), 2673 'IEM_MC_FETCH_MEM_S32_SX_U64': (McBlock.parseMcGeneric, True), 2674 'IEM_MC_FETCH_MEM_U128': (McBlock.parseMcGeneric, True), 2675 'IEM_MC_FETCH_MEM_U128_ALIGN_SSE': (McBlock.parseMcGeneric, True), 2676 'IEM_MC_FETCH_MEM_U128_NO_AC': (McBlock.parseMcGeneric, True), 2677 'IEM_MC_FETCH_MEM_U16': (McBlock.parseMcGeneric, True), 2678 'IEM_MC_FETCH_MEM_U16_DISP': (McBlock.parseMcGeneric, True), 2679 'IEM_MC_FETCH_MEM_U16_SX_U32': (McBlock.parseMcGeneric, True), 2680 'IEM_MC_FETCH_MEM_U16_SX_U64': (McBlock.parseMcGeneric, True), 2681 'IEM_MC_FETCH_MEM_U16_ZX_U32': (McBlock.parseMcGeneric, True), 2682 'IEM_MC_FETCH_MEM_U16_ZX_U64': (McBlock.parseMcGeneric, True), 2683 'IEM_MC_FETCH_MEM_U256': (McBlock.parseMcGeneric, True), 2684 'IEM_MC_FETCH_MEM_U256_ALIGN_AVX': (McBlock.parseMcGeneric, True), 2685 'IEM_MC_FETCH_MEM_U256_NO_AC': (McBlock.parseMcGeneric, True), 2686 'IEM_MC_FETCH_MEM_U32': (McBlock.parseMcGeneric, True), 2687 'IEM_MC_FETCH_MEM_U32_DISP': (McBlock.parseMcGeneric, True), 2688 'IEM_MC_FETCH_MEM_U32_SX_U64': (McBlock.parseMcGeneric, True), 2689 'IEM_MC_FETCH_MEM_U32_ZX_U64': (McBlock.parseMcGeneric, True), 2690 'IEM_MC_FETCH_MEM_U64': (McBlock.parseMcGeneric, True), 2691 'IEM_MC_FETCH_MEM_U64_ALIGN_U128': (McBlock.parseMcGeneric, True), 2692 'IEM_MC_FETCH_MEM_U64_DISP': (McBlock.parseMcGeneric, True), 2693 'IEM_MC_FETCH_MEM_U8': (McBlock.parseMcGeneric, True), 2694 'IEM_MC_FETCH_MEM_U8_SX_U16': (McBlock.parseMcGeneric, True), 2695 'IEM_MC_FETCH_MEM_U8_SX_U32': (McBlock.parseMcGeneric, True), 2696 'IEM_MC_FETCH_MEM_U8_SX_U64': (McBlock.parseMcGeneric, True), 2697 'IEM_MC_FETCH_MEM_U8_ZX_U16': (McBlock.parseMcGeneric, True), 2698 'IEM_MC_FETCH_MEM_U8_ZX_U32': (McBlock.parseMcGeneric, True), 2699 'IEM_MC_FETCH_MEM_U8_ZX_U64': (McBlock.parseMcGeneric, True), 2700 'IEM_MC_FETCH_MEM_XMM': (McBlock.parseMcGeneric, True), 2701 'IEM_MC_FETCH_MEM_XMM_ALIGN_SSE': (McBlock.parseMcGeneric, True), 2702 'IEM_MC_FETCH_MEM_XMM_NO_AC': (McBlock.parseMcGeneric, True), 2703 'IEM_MC_FETCH_MEM_XMM_U32': (McBlock.parseMcGeneric, True), 2704 'IEM_MC_FETCH_MEM_XMM_U64': (McBlock.parseMcGeneric, True), 2705 'IEM_MC_FETCH_MEM_YMM': (McBlock.parseMcGeneric, True), 2706 'IEM_MC_FETCH_MEM_YMM_ALIGN_AVX': (McBlock.parseMcGeneric, True), 2707 'IEM_MC_FETCH_MEM_YMM_NO_AC': (McBlock.parseMcGeneric, True), 2708 'IEM_MC_FETCH_MEM16_U8': (McBlock.parseMcGeneric, True), 2709 'IEM_MC_FETCH_MEM32_U8': (McBlock.parseMcGeneric, True), 2710 'IEM_MC_FETCH_MREG_U32': (McBlock.parseMcGeneric, False), 2711 'IEM_MC_FETCH_MREG_U64': (McBlock.parseMcGeneric, False), 2712 'IEM_MC_FETCH_SREG_BASE_U32': (McBlock.parseMcGeneric, False), 2713 'IEM_MC_FETCH_SREG_BASE_U64': (McBlock.parseMcGeneric, False), 2714 'IEM_MC_FETCH_SREG_U16': (McBlock.parseMcGeneric, False), 2715 'IEM_MC_FETCH_SREG_ZX_U32': (McBlock.parseMcGeneric, False), 2716 'IEM_MC_FETCH_SREG_ZX_U64': (McBlock.parseMcGeneric, False), 2717 'IEM_MC_FETCH_XREG_U128': (McBlock.parseMcGeneric, False), 2718 'IEM_MC_FETCH_XREG_U16': (McBlock.parseMcGeneric, False), 2719 'IEM_MC_FETCH_XREG_U32': (McBlock.parseMcGeneric, False), 2720 'IEM_MC_FETCH_XREG_U64': (McBlock.parseMcGeneric, False), 2721 'IEM_MC_FETCH_XREG_U8': (McBlock.parseMcGeneric, False), 2722 'IEM_MC_FETCH_XREG_XMM': (McBlock.parseMcGeneric, False), 2723 'IEM_MC_FETCH_YREG_2ND_U64': (McBlock.parseMcGeneric, False), 2724 'IEM_MC_FETCH_YREG_U128': (McBlock.parseMcGeneric, False), 2725 'IEM_MC_FETCH_YREG_U256': (McBlock.parseMcGeneric, False), 2726 'IEM_MC_FETCH_YREG_U32': (McBlock.parseMcGeneric, False), 2727 'IEM_MC_FETCH_YREG_U64': (McBlock.parseMcGeneric, False), 2728 'IEM_MC_FLIP_EFL_BIT': (McBlock.parseMcGeneric, True), 2729 'IEM_MC_FPU_FROM_MMX_MODE': (McBlock.parseMcGeneric, True), 2730 'IEM_MC_FPU_STACK_DEC_TOP': (McBlock.parseMcGeneric, True), 2731 'IEM_MC_FPU_STACK_FREE': (McBlock.parseMcGeneric, True), 2732 'IEM_MC_FPU_STACK_INC_TOP': (McBlock.parseMcGeneric, True), 2733 'IEM_MC_FPU_STACK_PUSH_OVERFLOW': (McBlock.parseMcGeneric, True), 2734 'IEM_MC_FPU_STACK_PUSH_OVERFLOW_MEM_OP': (McBlock.parseMcGeneric, True), 2735 'IEM_MC_FPU_STACK_PUSH_UNDERFLOW': (McBlock.parseMcGeneric, True), 2736 'IEM_MC_FPU_STACK_PUSH_UNDERFLOW_TWO': (McBlock.parseMcGeneric, True), 2737 'IEM_MC_FPU_STACK_UNDERFLOW': (McBlock.parseMcGeneric, True), 2738 'IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP': (McBlock.parseMcGeneric, True), 2739 'IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP': (McBlock.parseMcGeneric, True), 2740 'IEM_MC_FPU_STACK_UNDERFLOW_THEN_POP': (McBlock.parseMcGeneric, True), 2741 'IEM_MC_FPU_STACK_UNDERFLOW_THEN_POP_POP': (McBlock.parseMcGeneric, True), 2742 'IEM_MC_FPU_TO_MMX_MODE': (McBlock.parseMcGeneric, True), 2743 'IEM_MC_IF_CX_IS_NZ': (McBlock.parseMcGenericCond, True), 2744 'IEM_MC_IF_CX_IS_NZ_AND_EFL_BIT_NOT_SET': (McBlock.parseMcGenericCond, True), 2745 'IEM_MC_IF_CX_IS_NZ_AND_EFL_BIT_SET': (McBlock.parseMcGenericCond, True), 2746 'IEM_MC_IF_ECX_IS_NZ': (McBlock.parseMcGenericCond, True), 2747 'IEM_MC_IF_ECX_IS_NZ_AND_EFL_BIT_NOT_SET': (McBlock.parseMcGenericCond, True), 2748 'IEM_MC_IF_ECX_IS_NZ_AND_EFL_BIT_SET': (McBlock.parseMcGenericCond, True), 2749 'IEM_MC_IF_EFL_ANY_BITS_SET': (McBlock.parseMcGenericCond, True), 2750 'IEM_MC_IF_EFL_BIT_NOT_SET': (McBlock.parseMcGenericCond, True), 2751 'IEM_MC_IF_EFL_BIT_NOT_SET_AND_BITS_EQ': (McBlock.parseMcGenericCond, True), 2752 'IEM_MC_IF_EFL_BIT_SET': (McBlock.parseMcGenericCond, True), 2753 'IEM_MC_IF_EFL_BIT_SET_OR_BITS_NE': (McBlock.parseMcGenericCond, True), 2754 'IEM_MC_IF_EFL_BITS_EQ': (McBlock.parseMcGenericCond, True), 2755 'IEM_MC_IF_EFL_BITS_NE': (McBlock.parseMcGenericCond, True), 2756 'IEM_MC_IF_EFL_NO_BITS_SET': (McBlock.parseMcGenericCond, True), 2757 'IEM_MC_IF_FCW_IM': (McBlock.parseMcGenericCond, True), 2758 'IEM_MC_IF_FPUREG_IS_EMPTY': (McBlock.parseMcGenericCond, True), 2759 'IEM_MC_IF_FPUREG_NOT_EMPTY': (McBlock.parseMcGenericCond, True), 2760 'IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80': (McBlock.parseMcGenericCond, True), 2761 'IEM_MC_IF_GREG_BIT_SET': (McBlock.parseMcGenericCond, True), 2762 'IEM_MC_IF_LOCAL_IS_Z': (McBlock.parseMcGenericCond, True), 2763 'IEM_MC_IF_MXCSR_XCPT_PENDING': (McBlock.parseMcGenericCond, True), 2764 'IEM_MC_IF_RCX_IS_NZ': (McBlock.parseMcGenericCond, True), 2765 'IEM_MC_IF_RCX_IS_NZ_AND_EFL_BIT_NOT_SET': (McBlock.parseMcGenericCond, True), 2766 'IEM_MC_IF_RCX_IS_NZ_AND_EFL_BIT_SET': (McBlock.parseMcGenericCond, True), 2767 'IEM_MC_IF_TWO_FPUREGS_NOT_EMPTY_REF_R80': (McBlock.parseMcGenericCond, True), 2768 'IEM_MC_IF_TWO_FPUREGS_NOT_EMPTY_REF_R80_FIRST': (McBlock.parseMcGenericCond, True), 2769 'IEM_MC_IMPLICIT_AVX_AIMPL_ARGS': (McBlock.parseMcGeneric, False), 2770 'IEM_MC_INT_CLEAR_ZMM_256_UP': (McBlock.parseMcGeneric, True), 2771 'IEM_MC_LOCAL': (McBlock.parseMcLocal, False), 2772 'IEM_MC_LOCAL_CONST': (McBlock.parseMcLocalConst, False), 2773 'IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT': (McBlock.parseMcGeneric, True), 2774 'IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE': (McBlock.parseMcGeneric, True), 2775 'IEM_MC_MAYBE_RAISE_FPU_XCPT': (McBlock.parseMcGeneric, True), 2776 'IEM_MC_MAYBE_RAISE_FSGSBASE_XCPT': (McBlock.parseMcGeneric, True), 2777 'IEM_MC_MAYBE_RAISE_MMX_RELATED_XCPT': (McBlock.parseMcGeneric, True), 2778 'IEM_MC_MAYBE_RAISE_NON_CANONICAL_ADDR_GP0': (McBlock.parseMcGeneric, True), 2779 'IEM_MC_MAYBE_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT': (McBlock.parseMcGeneric, True), 2780 'IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT': (McBlock.parseMcGeneric, True), 2781 'IEM_MC_MAYBE_RAISE_WAIT_DEVICE_NOT_AVAILABLE': (McBlock.parseMcGeneric, True), 2782 'IEM_MC_MEM_COMMIT_AND_UNMAP': (McBlock.parseMcGeneric, True), 2783 'IEM_MC_MEM_COMMIT_AND_UNMAP_FOR_FPU_STORE': (McBlock.parseMcGeneric, True), 2784 'IEM_MC_MEM_MAP': (McBlock.parseMcGeneric, True), 2785 'IEM_MC_MEM_MAP_EX': (McBlock.parseMcGeneric, True), 2786 'IEM_MC_MERGE_YREG_U32_U96_ZX_VLMAX': (McBlock.parseMcGeneric, True), 2787 'IEM_MC_MERGE_YREG_U64_U64_ZX_VLMAX': (McBlock.parseMcGeneric, True), 2788 'IEM_MC_MERGE_YREG_U64HI_U64HI_ZX_VLMAX': (McBlock.parseMcGeneric, True), 2789 'IEM_MC_MERGE_YREG_U64LO_U64LO_ZX_VLMAX': (McBlock.parseMcGeneric, True), 2790 'IEM_MC_MERGE_YREG_U64LO_U64LOCAL_ZX_VLMAX': (McBlock.parseMcGeneric, True), 2791 'IEM_MC_MERGE_YREG_U64LOCAL_U64HI_ZX_VLMAX': (McBlock.parseMcGeneric, True), 2792 'IEM_MC_MODIFIED_MREG': (McBlock.parseMcGeneric, True), 2793 'IEM_MC_MODIFIED_MREG_BY_REF': (McBlock.parseMcGeneric, True), 2794 'IEM_MC_OR_2LOCS_U32': (McBlock.parseMcGeneric, False), 2795 'IEM_MC_OR_GREG_U16': (McBlock.parseMcGeneric, True), 2796 'IEM_MC_OR_GREG_U32': (McBlock.parseMcGeneric, True), 2797 'IEM_MC_OR_GREG_U64': (McBlock.parseMcGeneric, True), 2798 'IEM_MC_OR_GREG_U8': (McBlock.parseMcGeneric, True), 2799 'IEM_MC_OR_LOCAL_U16': (McBlock.parseMcGeneric, False), 2800 'IEM_MC_OR_LOCAL_U32': (McBlock.parseMcGeneric, False), 2801 'IEM_MC_OR_LOCAL_U8': (McBlock.parseMcGeneric, False), 2802 'IEM_MC_POP_U16': (McBlock.parseMcGeneric, True), 2803 'IEM_MC_POP_U32': (McBlock.parseMcGeneric, True), 2804 'IEM_MC_POP_U64': (McBlock.parseMcGeneric, True), 2805 'IEM_MC_PREPARE_AVX_USAGE': (McBlock.parseMcGeneric, False), 2806 'IEM_MC_PREPARE_FPU_USAGE': (McBlock.parseMcGeneric, False), 2807 'IEM_MC_PREPARE_SSE_USAGE': (McBlock.parseMcGeneric, False), 2808 'IEM_MC_PUSH_FPU_RESULT': (McBlock.parseMcGeneric, True), 2809 'IEM_MC_PUSH_FPU_RESULT_MEM_OP': (McBlock.parseMcGeneric, True), 2810 'IEM_MC_PUSH_FPU_RESULT_TWO': (McBlock.parseMcGeneric, True), 2811 'IEM_MC_PUSH_U16': (McBlock.parseMcGeneric, True), 2812 'IEM_MC_PUSH_U32': (McBlock.parseMcGeneric, True), 2813 'IEM_MC_PUSH_U32_SREG': (McBlock.parseMcGeneric, True), 2814 'IEM_MC_PUSH_U64': (McBlock.parseMcGeneric, True), 2815 'IEM_MC_RAISE_DIVIDE_ERROR': (McBlock.parseMcGeneric, True), 2816 'IEM_MC_RAISE_GP0_IF_CPL_NOT_ZERO': (McBlock.parseMcGeneric, True), 2817 'IEM_MC_RAISE_GP0_IF_EFF_ADDR_UNALIGNED': (McBlock.parseMcGeneric, True), 2818 'IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT': (McBlock.parseMcGeneric, True), 2819 'IEM_MC_REF_EFLAGS': (McBlock.parseMcGeneric, False), 2820 'IEM_MC_REF_FPUREG': (McBlock.parseMcGeneric, False), 2821 'IEM_MC_REF_GREG_I32': (McBlock.parseMcGeneric, False), 2822 'IEM_MC_REF_GREG_I32_CONST': (McBlock.parseMcGeneric, False), 2823 'IEM_MC_REF_GREG_I64': (McBlock.parseMcGeneric, False), 2824 'IEM_MC_REF_GREG_I64_CONST': (McBlock.parseMcGeneric, False), 2825 'IEM_MC_REF_GREG_U16': (McBlock.parseMcGeneric, False), 2826 'IEM_MC_REF_GREG_U32': (McBlock.parseMcGeneric, False), 2827 'IEM_MC_REF_GREG_U64': (McBlock.parseMcGeneric, False), 2828 'IEM_MC_REF_GREG_U8': (McBlock.parseMcGeneric, False), 2829 'IEM_MC_REF_LOCAL': (McBlock.parseMcGeneric, False), 2830 'IEM_MC_REF_MREG_U32_CONST': (McBlock.parseMcGeneric, False), 2831 'IEM_MC_REF_MREG_U64': (McBlock.parseMcGeneric, False), 2832 'IEM_MC_REF_MREG_U64_CONST': (McBlock.parseMcGeneric, False), 2833 'IEM_MC_REF_MXCSR': (McBlock.parseMcGeneric, False), 2834 'IEM_MC_REF_XREG_R32_CONST': (McBlock.parseMcGeneric, False), 2835 'IEM_MC_REF_XREG_R64_CONST': (McBlock.parseMcGeneric, False), 2836 'IEM_MC_REF_XREG_U128': (McBlock.parseMcGeneric, False), 2837 'IEM_MC_REF_XREG_U128_CONST': (McBlock.parseMcGeneric, False), 2838 'IEM_MC_REF_XREG_U32_CONST': (McBlock.parseMcGeneric, False), 2839 'IEM_MC_REF_XREG_U64_CONST': (McBlock.parseMcGeneric, False), 2840 'IEM_MC_REF_XREG_XMM_CONST': (McBlock.parseMcGeneric, False), 2841 'IEM_MC_REF_YREG_U128': (McBlock.parseMcGeneric, False), 2842 'IEM_MC_REF_YREG_U128_CONST': (McBlock.parseMcGeneric, False), 2843 'IEM_MC_REF_YREG_U64_CONST': (McBlock.parseMcGeneric, False), 2844 'IEM_MC_REL_JMP_S16_AND_FINISH': (McBlock.parseMcGeneric, True), 2845 'IEM_MC_REL_JMP_S32_AND_FINISH': (McBlock.parseMcGeneric, True), 2846 'IEM_MC_REL_JMP_S8_AND_FINISH': (McBlock.parseMcGeneric, True), 2847 'IEM_MC_RETURN_ON_FAILURE': (McBlock.parseMcGeneric, False), 2848 'IEM_MC_SAR_LOCAL_S16': (McBlock.parseMcGeneric, False), 2849 'IEM_MC_SAR_LOCAL_S32': (McBlock.parseMcGeneric, False), 2850 'IEM_MC_SAR_LOCAL_S64': (McBlock.parseMcGeneric, False), 2851 'IEM_MC_SET_EFL_BIT': (McBlock.parseMcGeneric, True), 2852 'IEM_MC_SET_FPU_RESULT': (McBlock.parseMcGeneric, True), 2853 'IEM_MC_SET_RIP_U16_AND_FINISH': (McBlock.parseMcGeneric, True), 2854 'IEM_MC_SET_RIP_U32_AND_FINISH': (McBlock.parseMcGeneric, True), 2855 'IEM_MC_SET_RIP_U64_AND_FINISH': (McBlock.parseMcGeneric, True), 2856 'IEM_MC_SHL_LOCAL_S16': (McBlock.parseMcGeneric, False), 2857 'IEM_MC_SHL_LOCAL_S32': (McBlock.parseMcGeneric, False), 2858 'IEM_MC_SHL_LOCAL_S64': (McBlock.parseMcGeneric, False), 2859 'IEM_MC_SHR_LOCAL_U8': (McBlock.parseMcGeneric, False), 2860 'IEM_MC_SSE_UPDATE_MXCSR': (McBlock.parseMcGeneric, True), 2861 'IEM_MC_STORE_FPU_RESULT': (McBlock.parseMcGeneric, True), 2862 'IEM_MC_STORE_FPU_RESULT_MEM_OP': (McBlock.parseMcGeneric, True), 2863 'IEM_MC_STORE_FPU_RESULT_THEN_POP': (McBlock.parseMcGeneric, True), 2864 'IEM_MC_STORE_FPU_RESULT_WITH_MEM_OP_THEN_POP': (McBlock.parseMcGeneric, True), 2865 'IEM_MC_STORE_FPUREG_R80_SRC_REF': (McBlock.parseMcGeneric, True), 2866 'IEM_MC_STORE_GREG_I64': (McBlock.parseMcGeneric, True), 2867 'IEM_MC_STORE_GREG_U16': (McBlock.parseMcGeneric, True), 2868 'IEM_MC_STORE_GREG_U16_CONST': (McBlock.parseMcGeneric, True), 2869 'IEM_MC_STORE_GREG_U32': (McBlock.parseMcGeneric, True), 2870 'IEM_MC_STORE_GREG_U32_CONST': (McBlock.parseMcGeneric, True), 2871 'IEM_MC_STORE_GREG_U64': (McBlock.parseMcGeneric, True), 2872 'IEM_MC_STORE_GREG_U64_CONST': (McBlock.parseMcGeneric, True), 2873 'IEM_MC_STORE_GREG_U8': (McBlock.parseMcGeneric, True), 2874 'IEM_MC_STORE_GREG_U8_CONST': (McBlock.parseMcGeneric, True), 2875 'IEM_MC_STORE_MEM_I16_CONST_BY_REF': (McBlock.parseMcGeneric, True), 2876 'IEM_MC_STORE_MEM_I32_CONST_BY_REF': (McBlock.parseMcGeneric, True), 2877 'IEM_MC_STORE_MEM_I64_CONST_BY_REF': (McBlock.parseMcGeneric, True), 2878 'IEM_MC_STORE_MEM_I8_CONST_BY_REF': (McBlock.parseMcGeneric, True), 2879 'IEM_MC_STORE_MEM_INDEF_D80_BY_REF': (McBlock.parseMcGeneric, True), 2880 'IEM_MC_STORE_MEM_NEG_QNAN_R32_BY_REF': (McBlock.parseMcGeneric, True), 2881 'IEM_MC_STORE_MEM_NEG_QNAN_R64_BY_REF': (McBlock.parseMcGeneric, True), 2882 'IEM_MC_STORE_MEM_NEG_QNAN_R80_BY_REF': (McBlock.parseMcGeneric, True), 2883 'IEM_MC_STORE_MEM_U128': (McBlock.parseMcGeneric, True), 2884 'IEM_MC_STORE_MEM_U128_ALIGN_SSE': (McBlock.parseMcGeneric, True), 2885 'IEM_MC_STORE_MEM_U16': (McBlock.parseMcGeneric, True), 2886 'IEM_MC_STORE_MEM_U16_CONST': (McBlock.parseMcGeneric, True), 2887 'IEM_MC_STORE_MEM_U256': (McBlock.parseMcGeneric, True), 2888 'IEM_MC_STORE_MEM_U256_ALIGN_AVX': (McBlock.parseMcGeneric, True), 2889 'IEM_MC_STORE_MEM_U32': (McBlock.parseMcGeneric, True), 2890 'IEM_MC_STORE_MEM_U32_CONST': (McBlock.parseMcGeneric, True), 2891 'IEM_MC_STORE_MEM_U64': (McBlock.parseMcGeneric, True), 2892 'IEM_MC_STORE_MEM_U64_CONST': (McBlock.parseMcGeneric, True), 2893 'IEM_MC_STORE_MEM_U8': (McBlock.parseMcGeneric, True), 2894 'IEM_MC_STORE_MEM_U8_CONST': (McBlock.parseMcGeneric, True), 2895 'IEM_MC_STORE_MREG_U32_ZX_U64': (McBlock.parseMcGeneric, True), 2896 'IEM_MC_STORE_MREG_U64': (McBlock.parseMcGeneric, True), 2897 'IEM_MC_STORE_SREG_BASE_U32': (McBlock.parseMcGeneric, True), 2898 'IEM_MC_STORE_SREG_BASE_U64': (McBlock.parseMcGeneric, True), 2899 'IEM_MC_STORE_SSE_RESULT': (McBlock.parseMcGeneric, True), 2900 'IEM_MC_STORE_XREG_HI_U64': (McBlock.parseMcGeneric, True), 2901 'IEM_MC_STORE_XREG_R32': (McBlock.parseMcGeneric, True), 2902 'IEM_MC_STORE_XREG_R64': (McBlock.parseMcGeneric, True), 2903 'IEM_MC_STORE_XREG_U128': (McBlock.parseMcGeneric, True), 2904 'IEM_MC_STORE_XREG_U16': (McBlock.parseMcGeneric, True), 2905 'IEM_MC_STORE_XREG_U32': (McBlock.parseMcGeneric, True), 2906 'IEM_MC_STORE_XREG_U32_U128': (McBlock.parseMcGeneric, True), 2907 'IEM_MC_STORE_XREG_U32_ZX_U128': (McBlock.parseMcGeneric, True), 2908 'IEM_MC_STORE_XREG_U64': (McBlock.parseMcGeneric, True), 2909 'IEM_MC_STORE_XREG_U64_ZX_U128': (McBlock.parseMcGeneric, True), 2910 'IEM_MC_STORE_XREG_U8': (McBlock.parseMcGeneric, True), 2911 'IEM_MC_STORE_XREG_XMM': (McBlock.parseMcGeneric, True), 2912 'IEM_MC_STORE_XREG_XMM_U32': (McBlock.parseMcGeneric, True), 2913 'IEM_MC_STORE_XREG_XMM_U64': (McBlock.parseMcGeneric, True), 2914 'IEM_MC_STORE_YREG_U128': (McBlock.parseMcGeneric, True), 2915 'IEM_MC_STORE_YREG_U128_ZX_VLMAX': (McBlock.parseMcGeneric, True), 2916 'IEM_MC_STORE_YREG_U256_ZX_VLMAX': (McBlock.parseMcGeneric, True), 2917 'IEM_MC_STORE_YREG_U32_ZX_VLMAX': (McBlock.parseMcGeneric, True), 2918 'IEM_MC_STORE_YREG_U64_ZX_VLMAX': (McBlock.parseMcGeneric, True), 2919 'IEM_MC_SUB_GREG_U16': (McBlock.parseMcGeneric, True), 2920 'IEM_MC_SUB_GREG_U32': (McBlock.parseMcGeneric, True), 2921 'IEM_MC_SUB_GREG_U64': (McBlock.parseMcGeneric, True), 2922 'IEM_MC_SUB_GREG_U8': (McBlock.parseMcGeneric, True), 2923 'IEM_MC_SUB_LOCAL_U16': (McBlock.parseMcGeneric, False), 2924 'IEM_MC_UPDATE_FPU_OPCODE_IP': (McBlock.parseMcGeneric, True), 2925 'IEM_MC_UPDATE_FSW': (McBlock.parseMcGeneric, True), 2926 'IEM_MC_UPDATE_FSW_CONST': (McBlock.parseMcGeneric, True), 2927 'IEM_MC_UPDATE_FSW_THEN_POP': (McBlock.parseMcGeneric, True), 2928 'IEM_MC_UPDATE_FSW_THEN_POP_POP': (McBlock.parseMcGeneric, True), 2929 'IEM_MC_UPDATE_FSW_WITH_MEM_OP': (McBlock.parseMcGeneric, True), 2930 'IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP': (McBlock.parseMcGeneric, True), 2873 2931 }; 2874 2932 -
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsThree0f38.cpp.h
r100072 r100714 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); 51 52 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSsse3); 52 IEM_MC_BEGIN(2, 0);53 53 IEM_MC_ARG(uint64_t *, pDst, 0); 54 54 IEM_MC_ARG(uint64_t const *, pSrc, 1); … … 111 111 * Register, register. 112 112 */ 113 IEM_MC_BEGIN(2, 0); 113 114 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSsse3); 114 IEM_MC_BEGIN(2, 0);115 115 IEM_MC_ARG(PRTUINT128U, puDst, 0); 116 116 IEM_MC_ARG(PCRTUINT128U, puSrc, 1); … … 167 167 * Register, register. 168 168 */ 169 IEM_MC_BEGIN(2, 0); 169 170 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41); 170 IEM_MC_BEGIN(2, 0);171 171 IEM_MC_ARG(PRTUINT128U, puDst, 0); 172 172 IEM_MC_ARG(PCRTUINT128U, puSrc, 1); … … 226 226 * Register, register. 227 227 */ 228 IEM_MC_BEGIN(2, 0); 228 229 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41); 229 IEM_MC_BEGIN(2, 0);230 230 IEM_MC_ARG(PRTUINT128U, puDst, 0); 231 231 IEM_MC_ARG(PCRTUINT128U, puSrc, 1); … … 282 282 * Register, register. 283 283 */ 284 IEM_MC_BEGIN(2, 0); 284 285 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse42); 285 IEM_MC_BEGIN(2, 0);286 286 IEM_MC_ARG(PRTUINT128U, puDst, 0); 287 287 IEM_MC_ARG(PCRTUINT128U, puSrc, 1); … … 342 342 * Register, register. 343 343 */ 344 IEM_MC_BEGIN(2, 0); 344 345 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fAesNi); 345 IEM_MC_BEGIN(2, 0);346 346 IEM_MC_ARG(PRTUINT128U, puDst, 0); 347 347 IEM_MC_ARG(PCRTUINT128U, puSrc, 1); … … 402 402 * Register, register. 403 403 */ 404 IEM_MC_BEGIN(2, 0); 404 405 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSha); 405 IEM_MC_BEGIN(2, 0);406 406 IEM_MC_ARG(PRTUINT128U, puDst, 0); 407 407 IEM_MC_ARG(PCRTUINT128U, puSrc, 1); … … 690 690 * Register, register. \ 691 691 */ \ 692 IEM_MC_BEGIN(3, 0); \ 692 693 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41); \ 693 IEM_MC_BEGIN(3, 0); \694 694 IEM_MC_ARG(PRTUINT128U, puDst, 0); \ 695 695 IEM_MC_ARG(PCRTUINT128U, puSrc, 1); \ … … 785 785 * Register, register. 786 786 */ 787 IEM_MC_BEGIN(3, 0); 787 788 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41); 788 IEM_MC_BEGIN(3, 0);789 789 IEM_MC_ARG(PCRTUINT128U, puSrc1, 0); 790 790 IEM_MC_ARG(PCRTUINT128U, puSrc2, 1); … … 906 906 * Register, register. \ 907 907 */ \ 908 IEM_MC_BEGIN(2, 0); \ 908 909 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41); \ 909 IEM_MC_BEGIN(2, 0); \910 910 IEM_MC_ARG(PRTUINT128U, puDst, 0); \ 911 911 IEM_MC_ARG(uint64_t, uSrc, 1); \ … … 1310 1310 { 1311 1311 IEMOP_MNEMONIC(invept, "invept Gy,Mdq"); 1312 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();1313 IEMOP_HLP_IN_VMX_OPERATION("invept", kVmxVDiag_Invept);1314 IEMOP_HLP_VMX_INSTR("invept", kVmxVDiag_Invept);1315 1312 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 1316 1313 if (IEM_IS_MODRM_MEM_MODE(bRm)) … … 1325 1322 IEM_MC_FETCH_GREG_U64(uInveptType, IEM_GET_MODRM_REG(pVCpu, bRm)); 1326 1323 IEM_MC_CALC_RM_EFF_ADDR(GCPtrInveptDesc, bRm, 0); 1324 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 1325 IEMOP_HLP_IN_VMX_OPERATION("invept", kVmxVDiag_Invept); 1326 IEMOP_HLP_VMX_INSTR( "invept", kVmxVDiag_Invept); 1327 1327 IEM_MC_ASSIGN(iEffSeg, pVCpu->iem.s.iEffSeg); 1328 1328 IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_VMEXIT | IEM_CIMPL_F_STATUS_FLAGS, … … 1338 1338 IEM_MC_FETCH_GREG_U32(uInveptType, IEM_GET_MODRM_REG(pVCpu, bRm)); 1339 1339 IEM_MC_CALC_RM_EFF_ADDR(GCPtrInveptDesc, bRm, 0); 1340 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 1341 IEMOP_HLP_IN_VMX_OPERATION("invept", kVmxVDiag_Invept); 1342 IEMOP_HLP_VMX_INSTR( "invept", kVmxVDiag_Invept); 1340 1343 IEM_MC_ASSIGN(iEffSeg, pVCpu->iem.s.iEffSeg); 1341 1344 IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_VMEXIT | IEM_CIMPL_F_STATUS_FLAGS, … … 1345 1348 } 1346 1349 Log(("iemOp_invept_Gy_Mdq: invalid encoding -> #UD\n")); 1350 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 1347 1351 IEMOP_RAISE_INVALID_OPCODE_RET(); 1348 1352 } … … 1356 1360 { 1357 1361 IEMOP_MNEMONIC(invvpid, "invvpid Gy,Mdq"); 1358 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();1359 IEMOP_HLP_IN_VMX_OPERATION("invvpid", kVmxVDiag_Invvpid);1360 IEMOP_HLP_VMX_INSTR("invvpid", kVmxVDiag_Invvpid);1361 1362 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 1362 1363 if (IEM_IS_MODRM_MEM_MODE(bRm)) … … 1371 1372 IEM_MC_FETCH_GREG_U64(uInvvpidType, IEM_GET_MODRM_REG(pVCpu, bRm)); 1372 1373 IEM_MC_CALC_RM_EFF_ADDR(GCPtrInvvpidDesc, bRm, 0); 1374 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 1375 IEMOP_HLP_IN_VMX_OPERATION("invvpid", kVmxVDiag_Invvpid); 1376 IEMOP_HLP_VMX_INSTR("invvpid", kVmxVDiag_Invvpid); 1373 1377 IEM_MC_ASSIGN(iEffSeg, pVCpu->iem.s.iEffSeg); 1374 1378 IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_VMEXIT | IEM_CIMPL_F_STATUS_FLAGS, … … 1384 1388 IEM_MC_FETCH_GREG_U32(uInvvpidType, IEM_GET_MODRM_REG(pVCpu, bRm)); 1385 1389 IEM_MC_CALC_RM_EFF_ADDR(GCPtrInvvpidDesc, bRm, 0); 1390 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 1391 IEMOP_HLP_IN_VMX_OPERATION("invvpid", kVmxVDiag_Invvpid); 1392 IEMOP_HLP_VMX_INSTR("invvpid", kVmxVDiag_Invvpid); 1386 1393 IEM_MC_ASSIGN(iEffSeg, pVCpu->iem.s.iEffSeg); 1387 1394 IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_VMEXIT | IEM_CIMPL_F_STATUS_FLAGS, … … 1391 1398 } 1392 1399 Log(("iemOp_invvpid_Gy_Mdq: invalid encoding -> #UD\n")); 1400 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 1393 1401 IEMOP_RAISE_INVALID_OPCODE_RET(); 1394 1402 } … … 1401 1409 { 1402 1410 IEMOP_MNEMONIC(invpcid, "invpcid Gy,Mdq"); 1403 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();1404 1411 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 1405 1412 if (IEM_IS_MODRM_MEM_MODE(bRm)) … … 1414 1421 IEM_MC_FETCH_GREG_U64(uInvpcidType, IEM_GET_MODRM_REG(pVCpu, bRm)); 1415 1422 IEM_MC_CALC_RM_EFF_ADDR(GCPtrInvpcidDesc, bRm, 0); 1423 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 1416 1424 IEM_MC_ASSIGN(iEffSeg, pVCpu->iem.s.iEffSeg); 1417 1425 IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_VMEXIT, iemCImpl_invpcid, iEffSeg, GCPtrInvpcidDesc, uInvpcidType); … … 1426 1434 IEM_MC_FETCH_GREG_U32(uInvpcidType, IEM_GET_MODRM_REG(pVCpu, bRm)); 1427 1435 IEM_MC_CALC_RM_EFF_ADDR(GCPtrInvpcidDesc, bRm, 0); 1436 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 1428 1437 IEM_MC_ASSIGN(iEffSeg, pVCpu->iem.s.iEffSeg); 1429 1438 IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_VMEXIT, iemCImpl_invpcid, iEffSeg, GCPtrInvpcidDesc, uInvpcidType); … … 1432 1441 } 1433 1442 Log(("iemOp_invpcid_Gy_Mdq: invalid encoding -> #UD\n")); 1443 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 1434 1444 IEMOP_RAISE_INVALID_OPCODE_RET(); 1435 1445 } … … 1565 1575 * Register, register. 1566 1576 */ 1577 IEM_MC_BEGIN(3, 0); 1567 1578 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSha); 1568 IEM_MC_BEGIN(3, 0);1569 1579 IEM_MC_ARG(PRTUINT128U, puDst, 0); 1570 1580 IEM_MC_ARG(PCRTUINT128U, puSrc, 1); … … 1804 1814 * Register, register. 1805 1815 */ 1816 IEM_MC_BEGIN(2, 0); 1806 1817 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 1807 IEM_MC_BEGIN(2, 0);1808 1818 IEM_MC_ARG(uint32_t *, puDst, 0); 1809 1819 IEM_MC_ARG(uint8_t, uSrc, 1); … … 1920 1930 * Register, register. 1921 1931 */ 1922 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();1923 1932 switch (pVCpu->iem.s.enmEffOpSize) 1924 1933 { 1925 1934 case IEMMODE_16BIT: 1926 1935 IEM_MC_BEGIN(2, 0); 1936 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 1927 1937 IEM_MC_ARG(uint32_t *, puDst, 0); 1928 1938 IEM_MC_ARG(uint16_t, uSrc, 1); … … 1938 1948 case IEMMODE_32BIT: 1939 1949 IEM_MC_BEGIN(2, 0); 1950 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 1940 1951 IEM_MC_ARG(uint32_t *, puDst, 0); 1941 1952 IEM_MC_ARG(uint32_t, uSrc, 1); … … 1951 1962 case IEMMODE_64BIT: 1952 1963 IEM_MC_BEGIN(2, 0); 1964 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 1953 1965 IEM_MC_ARG(uint32_t *, puDst, 0); 1954 1966 IEM_MC_ARG(uint64_t, uSrc, 1); … … 2067 2079 if (IEM_IS_MODRM_REG_MODE(bRm)) \ 2068 2080 { \ 2081 IEM_MC_BEGIN(3, 0); \ 2069 2082 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 2070 IEM_MC_BEGIN(3, 0); \2071 2083 IEM_MC_ARG(uint64_t *, pu64Dst, 0); \ 2072 2084 IEM_MC_ARG(uint32_t *, pEFlags, 1); \ … … 2102 2114 if (IEM_IS_MODRM_REG_MODE(bRm)) \ 2103 2115 { \ 2116 IEM_MC_BEGIN(3, 0); \ 2104 2117 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 2105 IEM_MC_BEGIN(3, 0); \2106 2118 IEM_MC_ARG(uint32_t *, pu32Dst, 0); \ 2107 2119 IEM_MC_ARG(uint32_t *, pEFlags, 1); \ -
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsThree0f3a.cpp.h
r99343 r100714 52 52 */ 53 53 uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); 54 IEM_MC_BEGIN(3, 0); 54 55 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSsse3); 55 IEM_MC_BEGIN(3, 0);56 56 IEM_MC_ARG(PRTUINT128U, puDst, 0); 57 57 IEM_MC_ARG(PCRTUINT128U, puSrc, 1); … … 111 111 */ 112 112 uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); 113 IEM_MC_BEGIN(3, 0); 113 114 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41); 114 IEM_MC_BEGIN(3, 0);115 115 IEM_MC_ARG(PRTUINT128U, puDst, 0); 116 116 IEM_MC_ARG(PCRTUINT128U, puSrc, 1); … … 171 171 */ 172 172 uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); 173 IEM_MC_BEGIN(4, 2); 173 174 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41); 174 IEM_MC_BEGIN(4, 2);175 175 IEM_MC_LOCAL(IEMMEDIAF2XMMSRC, Src); 176 176 IEM_MC_LOCAL(X86XMMREG, Dst); … … 243 243 */ 244 244 uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); 245 IEM_MC_BEGIN(3, 0); 245 246 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fAesNi); 246 IEM_MC_BEGIN(3, 0);247 247 IEM_MC_ARG(PRTUINT128U, puDst, 0); 248 248 IEM_MC_ARG(PCRTUINT128U, puSrc, 1); … … 323 323 */ 324 324 uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); 325 IEM_MC_BEGIN(4, 2); 325 326 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41); 326 IEM_MC_BEGIN(4, 2);327 327 IEM_MC_LOCAL(IEMMEDIAF2XMMSRC, Src); 328 328 IEM_MC_LOCAL(X86XMMREG, Dst); … … 388 388 */ 389 389 uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); 390 IEM_MC_BEGIN(4, 2); 390 391 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41); 391 IEM_MC_BEGIN(4, 2);392 392 IEM_MC_LOCAL(IEMMEDIAF2XMMSRC, Src); 393 393 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); 483 484 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSsse3); 484 IEM_MC_BEGIN(3, 0);485 485 IEM_MC_ARG(uint64_t *, pDst, 0); 486 486 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); 555 556 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41); 556 IEM_MC_BEGIN(0, 1);557 557 IEM_MC_LOCAL(uint8_t, uValue); 558 558 IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT(); … … 597 597 */ 598 598 uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); 599 IEM_MC_BEGIN(0, 1); 599 600 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41); 600 IEM_MC_BEGIN(0, 1);601 601 IEM_MC_LOCAL(uint16_t, uValue); 602 602 IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT(); … … 648 648 */ 649 649 uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); 650 IEM_MC_BEGIN(0, 1); 650 651 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41); 651 IEM_MC_BEGIN(0, 1);652 652 IEM_MC_LOCAL(uint64_t, uSrc); 653 653 IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT(); … … 695 695 */ 696 696 uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); 697 IEM_MC_BEGIN(0, 1); 697 698 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41); 698 IEM_MC_BEGIN(0, 1);699 699 IEM_MC_LOCAL(uint32_t, uSrc); 700 700 IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT(); … … 739 739 */ 740 740 uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); 741 IEM_MC_BEGIN(0, 1); 741 742 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41); 742 IEM_MC_BEGIN(0, 1);743 743 IEM_MC_LOCAL(uint32_t, uSrc); 744 744 IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT(); … … 792 792 */ 793 793 uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); 794 IEM_MC_BEGIN(0, 1); 794 795 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41); 795 IEM_MC_BEGIN(0, 1);796 796 IEM_MC_LOCAL(uint8_t, uSrc); 797 797 IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT(); … … 835 835 */ 836 836 uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); 837 IEM_MC_BEGIN(0, 3); 837 838 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41); 838 IEM_MC_BEGIN(0, 3);839 839 IEM_MC_LOCAL(uint32_t, uSrc); 840 840 IEM_MC_LOCAL(uint8_t, uSrcSel); … … 899 899 */ 900 900 uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); 901 IEM_MC_BEGIN(0, 1); 901 902 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41); 902 IEM_MC_BEGIN(0, 1);903 903 IEM_MC_LOCAL(uint64_t, uSrc); 904 904 IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT(); … … 946 946 */ 947 947 uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); 948 IEM_MC_BEGIN(0, 1); 948 949 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse41); 949 IEM_MC_BEGIN(0, 1);950 950 IEM_MC_LOCAL(uint32_t, uSrc); 951 951 IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT(); … … 1055 1055 */ 1056 1056 uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); 1057 IEM_MC_BEGIN(3, 0); 1057 1058 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fPclMul); 1058 IEM_MC_BEGIN(3, 0);1059 1059 IEM_MC_ARG(PRTUINT128U, puDst, 0); 1060 1060 IEM_MC_ARG(PCRTUINT128U, puSrc, 1); … … 1147 1147 */ 1148 1148 uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); 1149 IEM_MC_BEGIN(4, 1); 1149 1150 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse42); 1150 IEM_MC_BEGIN(4, 1);1151 1151 IEM_MC_ARG(PRTUINT128U, puDst, 0); 1152 1152 IEM_MC_ARG(uint32_t *, pEFlags, 1); … … 1211 1211 */ 1212 1212 uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); 1213 IEM_MC_BEGIN(4, 1); 1213 1214 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse42); 1214 IEM_MC_BEGIN(4, 1);1215 1215 IEM_MC_ARG(PRTUINT128U, puDst, 0); 1216 1216 IEM_MC_ARG(uint32_t *, pEFlags, 1); … … 1283 1283 */ 1284 1284 uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); 1285 IEM_MC_BEGIN(4, 1); 1285 1286 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse42); 1286 IEM_MC_BEGIN(4, 1);1287 1287 IEM_MC_ARG(uint32_t *, pu32Ecx, 0); 1288 1288 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); 1350 1351 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse42); 1351 IEM_MC_BEGIN(4, 1);1352 1352 IEM_MC_ARG(uint32_t *, pu32Ecx, 0); 1353 1353 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); 1422 1423 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse42); 1423 IEM_MC_BEGIN(4, 1);1424 1424 IEM_MC_ARG(PRTUINT128U, puDst, 0); 1425 1425 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); 1487 1488 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse42); 1488 IEM_MC_BEGIN(4, 1);1489 1489 IEM_MC_ARG(uint32_t *, pu32Ecx, 0); 1490 1490 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); 1584 1585 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSha); 1585 IEM_MC_BEGIN(3, 0);1586 1586 IEM_MC_ARG(PRTUINT128U, puDst, 0); 1587 1587 IEM_MC_ARG(PCRTUINT128U, puSrc, 1); -
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsTwoByte0f.cpp.h
r100709 r100714 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); 52 53 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fMmx); 53 IEM_MC_BEGIN(2, 0);54 54 IEM_MC_ARG(uint64_t *, pDst, 0); 55 55 IEM_MC_ARG(uint64_t const *, pSrc, 1); … … 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); 114 115 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fMmx); 115 IEM_MC_BEGIN(2, 0);116 116 IEM_MC_ARG(uint64_t *, pDst, 0); 117 117 IEM_MC_ARG(uint64_t const *, pSrc, 1); … … 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); 174 175 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX_2_OR(fSse, fAmdMmxExts); 175 IEM_MC_BEGIN(2, 0);176 176 IEM_MC_ARG(uint64_t *, pDst, 0); 177 177 IEM_MC_ARG(uint64_t const *, pSrc, 1); … … 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); 237 238 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX_2_OR(fSse, fAmdMmxExts); 238 IEM_MC_BEGIN(2, 0);239 239 IEM_MC_ARG(uint64_t *, pDst, 0); 240 240 IEM_MC_ARG(uint64_t const *, pSrc, 1); … … 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); 297 298 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2); 298 IEM_MC_BEGIN(2, 0);299 299 IEM_MC_ARG(uint64_t *, pDst, 0); 300 300 IEM_MC_ARG(uint64_t const *, pSrc, 1); … … 357 357 * XMM, XMM. 358 358 */ 359 IEM_MC_BEGIN(2, 0); 359 360 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse); 360 IEM_MC_BEGIN(2, 0);361 361 IEM_MC_ARG(PRTUINT128U, pDst, 0); 362 362 IEM_MC_ARG(PCRTUINT128U, pSrc, 1); … … 412 412 * XMM, XMM. 413 413 */ 414 IEM_MC_BEGIN(2, 0); 414 415 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2); 415 IEM_MC_BEGIN(2, 0);416 416 IEM_MC_ARG(PRTUINT128U, pDst, 0); 417 417 IEM_MC_ARG(PCRTUINT128U, pSrc, 1); … … 470 470 * XMM, XMM. 471 471 */ 472 IEM_MC_BEGIN(2, 0); 472 473 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2); 473 IEM_MC_BEGIN(2, 0);474 474 IEM_MC_ARG(PRTUINT128U, pDst, 0); 475 475 IEM_MC_ARG(PCRTUINT128U, pSrc, 1); … … 523 523 * MMX, MMX. 524 524 */ 525 IEM_MC_BEGIN(2, 0); 525 526 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fMmx); 526 IEM_MC_BEGIN(2, 0);527 527 IEM_MC_ARG(uint64_t *, puDst, 0); 528 528 IEM_MC_ARG(uint64_t const *, puSrc, 1); … … 585 585 * XMM, XMM. 586 586 */ 587 IEM_MC_BEGIN(2, 0); 587 588 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse); 588 IEM_MC_BEGIN(2, 0);589 589 IEM_MC_ARG(PRTUINT128U, puDst, 0); 590 590 IEM_MC_ARG(PCRTUINT128U, puSrc, 1); … … 645 645 * XMM, XMM. 646 646 */ 647 IEM_MC_BEGIN(2, 0); 647 648 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2); 648 IEM_MC_BEGIN(2, 0);649 649 IEM_MC_ARG(PRTUINT128U, puDst, 0); 650 650 IEM_MC_ARG(PCRTUINT128U, puSrc, 1); … … 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); 707 708 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fMmx); 708 IEM_MC_BEGIN(2, 0);709 709 IEM_MC_ARG(uint64_t *, puDst, 0); 710 710 IEM_MC_ARG(uint64_t const *, puSrc, 1); … … 767 767 * XMM, XMM. 768 768 */ 769 IEM_MC_BEGIN(2, 0); 769 770 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse); 770 IEM_MC_BEGIN(2, 0);771 771 IEM_MC_ARG(PRTUINT128U, puDst, 0); 772 772 IEM_MC_ARG(PCRTUINT128U, puSrc, 1); … … 827 827 * XMM128, XMM128. 828 828 */ 829 IEM_MC_BEGIN(3, 1); 829 830 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse); 830 IEM_MC_BEGIN(3, 1);831 831 IEM_MC_LOCAL(IEMSSERESULT, SseRes); 832 832 IEM_MC_ARG_LOCAL_REF(PIEMSSERESULT, pSseRes, SseRes, 0); … … 891 891 * XMM128, XMM32. 892 892 */ 893 IEM_MC_BEGIN(3, 1); 893 894 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse); 894 IEM_MC_BEGIN(3, 1);895 895 IEM_MC_LOCAL(IEMSSERESULT, SseRes); 896 896 IEM_MC_ARG_LOCAL_REF(PIEMSSERESULT, pSseRes, SseRes, 0); … … 955 955 * XMM128, XMM128. 956 956 */ 957 IEM_MC_BEGIN(3, 1); 957 958 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2); 958 IEM_MC_BEGIN(3, 1);959 959 IEM_MC_LOCAL(IEMSSERESULT, SseRes); 960 960 IEM_MC_ARG_LOCAL_REF(PIEMSSERESULT, pSseRes, SseRes, 0); … … 1019 1019 * XMM, XMM. 1020 1020 */ 1021 IEM_MC_BEGIN(3, 1); 1021 1022 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2); 1022 IEM_MC_BEGIN(3, 1);1023 1023 IEM_MC_LOCAL(IEMSSERESULT, SseRes); 1024 1024 IEM_MC_ARG_LOCAL_REF(PIEMSSERESULT, pSseRes, SseRes, 0); … … 1083 1083 * XMM, XMM. 1084 1084 */ 1085 IEM_MC_BEGIN(2, 0); 1085 1086 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2); 1086 IEM_MC_BEGIN(2, 0);1087 1087 IEM_MC_ARG(PRTUINT128U, puDst, 0); 1088 1088 IEM_MC_ARG(PCRTUINT128U, puSrc, 1); … … 1143 1143 * XMM, XMM. 1144 1144 */ 1145 IEM_MC_BEGIN(3, 1); 1145 1146 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse3); 1146 IEM_MC_BEGIN(3, 1);1147 1147 IEM_MC_LOCAL(IEMSSERESULT, SseRes); 1148 1148 IEM_MC_ARG_LOCAL_REF(PIEMSSERESULT, pSseRes, SseRes, 0); … … 1250 1250 if (IEM_IS_MODRM_REG_MODE(bRm)) 1251 1251 { 1252 IEM_MC_BEGIN(1, 0); 1252 1253 IEMOP_HLP_DECODED_NL_1(OP_LLDT, IEMOPFORM_M_REG, OP_PARM_Ew, DISOPTYPE_DANGEROUS); 1253 IEM_MC_BEGIN(1, 0);1254 1254 IEM_MC_ARG(uint16_t, u16Sel, 0); 1255 1255 IEM_MC_FETCH_GREG_U16(u16Sel, IEM_GET_MODRM_RM(pVCpu, bRm)); … … 1281 1281 if (IEM_IS_MODRM_REG_MODE(bRm)) 1282 1282 { 1283 IEM_MC_BEGIN(1, 0); 1283 1284 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 1284 IEM_MC_BEGIN(1, 0);1285 1285 IEM_MC_ARG(uint16_t, u16Sel, 0); 1286 1286 IEM_MC_FETCH_GREG_U16(u16Sel, IEM_GET_MODRM_RM(pVCpu, bRm)); … … 1311 1311 if (IEM_IS_MODRM_REG_MODE(bRm)) 1312 1312 { 1313 IEM_MC_BEGIN(2, 0); 1313 1314 IEMOP_HLP_DECODED_NL_1(fWrite ? OP_VERW : OP_VERR, IEMOPFORM_M_MEM, OP_PARM_Ew, DISOPTYPE_DANGEROUS | DISOPTYPE_PRIVILEGED_NOTRAP); 1314 IEM_MC_BEGIN(2, 0);1315 1315 IEM_MC_ARG(uint16_t, u16Sel, 0); 1316 1316 IEM_MC_ARG_CONST(bool, fWriteArg, fWrite, 1); … … 1526 1526 * IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX and 1527 1527 * IEMOP_HLP_DONE_DECODING_NO_SIZE_OP_REPZ_OR_REPNZ_PREFIXES here. */ 1528 /** @todo testcase: test prefixes and exceptions. currently not checking for the 1529 * OPSIZE one ... */ 1528 1530 IEMOP_HLP_DONE_DECODING_NO_LOCK_REPZ_OR_REPNZ_PREFIXES(); 1529 1531 IEM_MC_DEFER_TO_CIMPL_0_RET(0, iemCImpl_xgetbv); … … 1542 1544 * IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX and 1543 1545 * IEMOP_HLP_DONE_DECODING_NO_SIZE_OP_REPZ_OR_REPNZ_PREFIXES here. */ 1546 /** @todo testcase: test prefixes and exceptions. currently not checking for the 1547 * OPSIZE one ... */ 1544 1548 IEMOP_HLP_DONE_DECODING_NO_LOCK_REPZ_OR_REPNZ_PREFIXES(); 1545 1549 IEM_MC_DEFER_TO_CIMPL_0_RET(IEM_CIMPL_F_VMEXIT, iemCImpl_xsetbv); … … 1583 1587 { 1584 1588 IEMOP_MNEMONIC(vmmcall, "vmmcall"); 1589 /** @todo r=bird: Table A-8 on page 524 in vol 3 has VMGEXIT for this 1590 * opcode sequence when F3 or F2 is used as prefix. So, the assumtion 1591 * here cannot be right... */ 1585 1592 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); /** @todo check prefix effect on the SVM instructions. ASSUMING no lock for now. */ 1586 1593 … … 1702 1709 if (IEM_IS_MODRM_REG_MODE(bRm)) 1703 1710 { 1711 IEM_MC_BEGIN(2, 0); 1704 1712 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 1705 IEM_MC_BEGIN(2, 0);1706 1713 IEM_MC_ARG(uint16_t, u16Tmp, 0); 1707 1714 IEM_MC_ARG_CONST(RTGCPTR, GCPtrEffDst, NIL_RTGCPTR, 1); … … 1729 1736 IEMOP_MNEMONIC(invlpg, "invlpg"); 1730 1737 IEMOP_HLP_MIN_486(); 1731 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();1732 1738 IEM_MC_BEGIN(1, 1); 1733 1739 IEM_MC_ARG(RTGCPTR, GCPtrEffDst, 0); 1734 1740 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 1741 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 1735 1742 IEM_MC_CALL_CIMPL_1(IEM_CIMPL_F_VMEXIT, iemCImpl_invlpg, GCPtrEffDst); 1736 1743 IEM_MC_END(); … … 1851 1858 if (IEM_IS_MODRM_REG_MODE(bRm)) 1852 1859 { 1853 IEMOP_HLP_DECODED_NL_2(fIsLar ? OP_LAR : OP_LSL, IEMOPFORM_RM_REG, OP_PARM_Gv, OP_PARM_Ew, DISOPTYPE_DANGEROUS | DISOPTYPE_PRIVILEGED_NOTRAP);1854 1860 switch (pVCpu->iem.s.enmEffOpSize) 1855 1861 { … … 1857 1863 { 1858 1864 IEM_MC_BEGIN(3, 0); 1865 IEMOP_HLP_DECODED_NL_2(fIsLar ? OP_LAR : OP_LSL, IEMOPFORM_RM_REG, OP_PARM_Gv, OP_PARM_Ew, DISOPTYPE_DANGEROUS | DISOPTYPE_PRIVILEGED_NOTRAP); 1859 1866 IEM_MC_ARG(uint16_t *, pu16Dst, 0); 1860 1867 IEM_MC_ARG(uint16_t, u16Sel, 1); … … 1872 1879 { 1873 1880 IEM_MC_BEGIN(3, 0); 1881 IEMOP_HLP_DECODED_NL_2(fIsLar ? OP_LAR : OP_LSL, IEMOPFORM_RM_REG, OP_PARM_Gv, OP_PARM_Ew, DISOPTYPE_DANGEROUS | DISOPTYPE_PRIVILEGED_NOTRAP); 1874 1882 IEM_MC_ARG(uint64_t *, pu64Dst, 0); 1875 1883 IEM_MC_ARG(uint16_t, u16Sel, 1); … … 2052 2060 { 2053 2061 IEMOP_MNEMONIC(femms, "femms"); 2062 2063 IEM_MC_BEGIN(0,0); 2054 2064 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 2055 2056 IEM_MC_BEGIN(0,0);2057 2065 IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE(); 2058 2066 IEM_MC_MAYBE_RAISE_FPU_XCPT(); … … 2102 2110 * XMM128, XMM128. 2103 2111 */ 2112 IEM_MC_BEGIN(0, 0); 2104 2113 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse); 2105 IEM_MC_BEGIN(0, 0);2106 2114 IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT(); 2107 2115 IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE(); … … 2153 2161 * XMM128, XMM128. 2154 2162 */ 2163 IEM_MC_BEGIN(0, 0); 2155 2164 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2); 2156 IEM_MC_BEGIN(0, 0);2157 2165 IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT(); 2158 2166 IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE(); … … 2203 2211 * XMM32, XMM32. 2204 2212 */ 2213 IEM_MC_BEGIN(0, 1); 2205 2214 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse); 2206 IEM_MC_BEGIN(0, 1);2207 2215 IEM_MC_LOCAL(uint32_t, uSrc); 2208 2216 … … 2256 2264 * XMM64, XMM64. 2257 2265 */ 2266 IEM_MC_BEGIN(0, 1); 2258 2267 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2); 2259 IEM_MC_BEGIN(0, 1);2260 2268 IEM_MC_LOCAL(uint64_t, uSrc); 2261 2269 … … 2309 2317 * XMM128, XMM128. 2310 2318 */ 2319 IEM_MC_BEGIN(0, 0); 2311 2320 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse); 2312 IEM_MC_BEGIN(0, 0);2313 2321 IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT(); 2314 2322 IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE(); … … 2359 2367 * XMM128, XMM128. 2360 2368 */ 2369 IEM_MC_BEGIN(0, 0); 2361 2370 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2); 2362 IEM_MC_BEGIN(0, 0);2363 2371 IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT(); 2364 2372 IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE(); … … 2409 2417 * XMM32, XMM32. 2410 2418 */ 2419 IEM_MC_BEGIN(0, 1); 2411 2420 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse); 2412 IEM_MC_BEGIN(0, 1);2413 2421 IEM_MC_LOCAL(uint32_t, uSrc); 2414 2422 … … 2462 2470 * XMM64, XMM64. 2463 2471 */ 2472 IEM_MC_BEGIN(0, 1); 2464 2473 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2); 2465 IEM_MC_BEGIN(0, 1);2466 2474 IEM_MC_LOCAL(uint64_t, uSrc); 2467 2475 … … 2514 2522 IEMOP_MNEMONIC2(RM_REG, MOVHLPS, movhlps, Vq_WO, UqHi, DISOPTYPE_HARMLESS | DISOPTYPE_X86_SSE, IEMOPHINT_IGNORES_OP_SIZES); 2515 2523 2524 IEM_MC_BEGIN(0, 1); 2516 2525 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse); 2517 IEM_MC_BEGIN(0, 1);2518 2526 IEM_MC_LOCAL(uint64_t, uSrc); 2519 2527 … … 2626 2634 * XMM, XMM. 2627 2635 */ 2636 IEM_MC_BEGIN(0, 1); 2628 2637 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse3); 2629 IEM_MC_BEGIN(0, 1);2630 2638 IEM_MC_LOCAL(RTUINT128U, uSrc); 2631 2639 … … 2686 2694 * XMM128, XMM64. 2687 2695 */ 2696 IEM_MC_BEGIN(1, 0); 2688 2697 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse3); 2689 IEM_MC_BEGIN(1, 0);2690 2698 IEM_MC_ARG(uint64_t, uSrc, 0); 2691 2699 … … 2933 2941 IEMOP_MNEMONIC2(RM_REG, MOVLHPS, movlhps, VqHi_WO, Uq, DISOPTYPE_HARMLESS | DISOPTYPE_X86_SSE, IEMOPHINT_IGNORES_OP_SIZES); 2934 2942 2943 IEM_MC_BEGIN(0, 1); 2935 2944 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse); 2936 IEM_MC_BEGIN(0, 1);2937 2945 IEM_MC_LOCAL(uint64_t, uSrc); 2938 2946 … … 3044 3052 * XMM128, XMM128. 3045 3053 */ 3054 IEM_MC_BEGIN(0, 1); 3046 3055 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse3); 3047 IEM_MC_BEGIN(0, 1);3048 3056 IEM_MC_LOCAL(RTUINT128U, uSrc); 3049 3057 … … 3255 3263 if (IEM_IS_MODRM_REG_MODE(bRm)) 3256 3264 { 3265 IEM_MC_BEGIN(0, 0); 3257 3266 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 3258 IEM_MC_BEGIN(0, 0);3259 3267 IEM_MC_ADVANCE_RIP_AND_FINISH(); 3260 3268 IEM_MC_END(); … … 3415 3423 * Register, register. 3416 3424 */ 3425 IEM_MC_BEGIN(0, 0); 3417 3426 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse); 3418 IEM_MC_BEGIN(0, 0);3419 3427 IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT(); 3420 3428 IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE(); … … 3464 3472 * Register, register. 3465 3473 */ 3474 IEM_MC_BEGIN(0, 0); 3466 3475 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2); 3467 IEM_MC_BEGIN(0, 0);3468 3476 IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT(); 3469 3477 IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE(); … … 3516 3524 * Register, register. 3517 3525 */ 3526 IEM_MC_BEGIN(0, 0); 3518 3527 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse); 3519 IEM_MC_BEGIN(0, 0);3520 3528 IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT(); 3521 3529 IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE(); … … 3565 3573 * Register, register. 3566 3574 */ 3575 IEM_MC_BEGIN(0, 0); 3567 3576 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2); 3568 IEM_MC_BEGIN(0, 0);3569 3577 IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT(); 3570 3578 IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE(); … … 3610 3618 * XMM, MMX 3611 3619 */ 3620 IEM_MC_BEGIN(3, 1); 3612 3621 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2); 3613 3614 IEM_MC_BEGIN(3, 1);3615 3622 IEM_MC_ARG(uint32_t *, pfMxcsr, 0); 3616 3623 IEM_MC_LOCAL(X86XMMREG, Dst); … … 3681 3688 * XMM, MMX 3682 3689 */ 3690 IEM_MC_BEGIN(3, 1); 3683 3691 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2); 3684 3685 IEM_MC_BEGIN(3, 1);3686 3692 IEM_MC_ARG(uint32_t *, pfMxcsr, 0); 3687 3693 IEM_MC_LOCAL(X86XMMREG, Dst); … … 4082 4088 * Register, register. 4083 4089 */ 4090 IEM_MC_BEGIN(3, 1); 4084 4091 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2); 4085 4086 IEM_MC_BEGIN(3, 1);4087 4092 IEM_MC_ARG(uint32_t *, pfMxcsr, 0); 4088 4093 IEM_MC_LOCAL(uint64_t, u64Dst); … … 4150 4155 * Register, register. 4151 4156 */ 4157 IEM_MC_BEGIN(3, 1); 4152 4158 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2); 4153 4154 IEM_MC_BEGIN(3, 1);4155 4159 IEM_MC_ARG(uint32_t *, pfMxcsr, 0); 4156 4160 IEM_MC_LOCAL(uint64_t, u64Dst); … … 4470 4474 * Register, register. 4471 4475 */ 4476 IEM_MC_BEGIN(3, 1); 4472 4477 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2); 4473 4474 IEM_MC_BEGIN(3, 1);4475 4478 IEM_MC_ARG(uint32_t *, pfMxcsr, 0); 4476 4479 IEM_MC_LOCAL(uint64_t, u64Dst); … … 4539 4542 * Register, register. 4540 4543 */ 4544 IEM_MC_BEGIN(3, 1); 4541 4545 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2); 4542 4543 IEM_MC_BEGIN(3, 1);4544 4546 IEM_MC_ARG(uint32_t *, pfMxcsr, 0); 4545 4547 IEM_MC_LOCAL(uint64_t, u64Dst); … … 4860 4862 * Register, register. 4861 4863 */ 4864 IEM_MC_BEGIN(4, 1); 4862 4865 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse); 4863 IEM_MC_BEGIN(4, 1);4864 4866 IEM_MC_LOCAL(uint32_t, fEFlags); 4865 4867 IEM_MC_ARG(uint32_t *, pfMxcsr, 0); … … 4929 4931 * Register, register. 4930 4932 */ 4933 IEM_MC_BEGIN(4, 1); 4931 4934 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2); 4932 IEM_MC_BEGIN(4, 1);4933 4935 IEM_MC_LOCAL(uint32_t, fEFlags); 4934 4936 IEM_MC_ARG(uint32_t *, pfMxcsr, 0); … … 5002 5004 * Register, register. 5003 5005 */ 5006 IEM_MC_BEGIN(4, 1); 5004 5007 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse); 5005 IEM_MC_BEGIN(4, 1);5006 5008 IEM_MC_LOCAL(uint32_t, fEFlags); 5007 5009 IEM_MC_ARG(uint32_t *, pfMxcsr, 0); … … 5071 5073 * Register, register. 5072 5074 */ 5075 IEM_MC_BEGIN(4, 1); 5073 5076 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2); 5074 IEM_MC_BEGIN(4, 1);5075 5077 IEM_MC_LOCAL(uint32_t, fEFlags); 5076 5078 IEM_MC_ARG(uint32_t *, pfMxcsr, 0); … … 5233 5235 case IEMMODE_16BIT: \ 5234 5236 IEM_MC_BEGIN(0, 1); \ 5237 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 5235 5238 IEM_MC_LOCAL(uint16_t, u16Tmp); \ 5236 5239 a_Cnd { \ … … 5244 5247 case IEMMODE_32BIT: \ 5245 5248 IEM_MC_BEGIN(0, 1); \ 5249 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 5246 5250 IEM_MC_LOCAL(uint32_t, u32Tmp); \ 5247 5251 a_Cnd { \ … … 5257 5261 case IEMMODE_64BIT: \ 5258 5262 IEM_MC_BEGIN(0, 1); \ 5263 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 5259 5264 IEM_MC_LOCAL(uint64_t, u64Tmp); \ 5260 5265 a_Cnd { \ … … 5278 5283 IEM_MC_LOCAL(uint16_t, u16Tmp); \ 5279 5284 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); \ 5285 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 5280 5286 IEM_MC_FETCH_MEM_U16(u16Tmp, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); \ 5281 5287 a_Cnd { \ … … 5291 5297 IEM_MC_LOCAL(uint32_t, u32Tmp); \ 5292 5298 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); \ 5299 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 5293 5300 IEM_MC_FETCH_MEM_U32(u32Tmp, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); \ 5294 5301 a_Cnd { \ … … 5306 5313 IEM_MC_LOCAL(uint64_t, u64Tmp); \ 5307 5314 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); \ 5315 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 5308 5316 IEM_MC_FETCH_MEM_U64(u64Tmp, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); \ 5309 5317 a_Cnd { \ … … 5459 5467 * Register, register. 5460 5468 */ 5469 IEM_MC_BEGIN(2, 1); 5461 5470 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse); 5462 IEM_MC_BEGIN(2, 1);5463 5471 IEM_MC_LOCAL(uint8_t, u8Dst); 5464 5472 IEM_MC_ARG_LOCAL_REF(uint8_t *, pu8Dst, u8Dst, 0); … … 5488 5496 * Register, register. 5489 5497 */ 5498 IEM_MC_BEGIN(2, 1); 5490 5499 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2); 5491 IEM_MC_BEGIN(2, 1);5492 5500 IEM_MC_LOCAL(uint8_t, u8Dst); 5493 5501 IEM_MC_ARG_LOCAL_REF(uint8_t *, pu8Dst, u8Dst, 0); … … 6191 6199 { 6192 6200 /* MMX, greg64 */ 6201 IEM_MC_BEGIN(0, 1); 6193 6202 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fMmx); 6194 IEM_MC_BEGIN(0, 1);6195 6203 IEM_MC_LOCAL(uint64_t, u64Tmp); 6196 6204 … … 6243 6251 { 6244 6252 /* MMX, greg32 */ 6253 IEM_MC_BEGIN(0, 1); 6245 6254 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fMmx); 6246 IEM_MC_BEGIN(0, 1);6247 6255 IEM_MC_LOCAL(uint32_t, u32Tmp); 6248 6256 … … 6298 6306 { 6299 6307 /* XMM, greg64 */ 6308 IEM_MC_BEGIN(0, 1); 6300 6309 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2); 6301 IEM_MC_BEGIN(0, 1);6302 6310 IEM_MC_LOCAL(uint64_t, u64Tmp); 6303 6311 … … 6348 6356 { 6349 6357 /* XMM, greg32 */ 6358 IEM_MC_BEGIN(0, 1); 6350 6359 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2); 6351 IEM_MC_BEGIN(0, 1);6352 6360 IEM_MC_LOCAL(uint32_t, u32Tmp); 6353 6361 … … 6403 6411 * Register, register. 6404 6412 */ 6413 IEM_MC_BEGIN(0, 1); 6405 6414 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fMmx); 6406 IEM_MC_BEGIN(0, 1);6407 6415 IEM_MC_LOCAL(uint64_t, u64Tmp); 6408 6416 … … 6458 6466 * Register, register. 6459 6467 */ 6468 IEM_MC_BEGIN(0, 0); 6460 6469 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2); 6461 IEM_MC_BEGIN(0, 0);6462 6470 6463 6471 IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT(); … … 6509 6517 * Register, register. 6510 6518 */ 6519 IEM_MC_BEGIN(0, 0); 6511 6520 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2); 6512 IEM_MC_BEGIN(0, 0);6513 6521 IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT(); 6514 6522 IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE(); … … 6551 6559 */ 6552 6560 uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); 6561 IEM_MC_BEGIN(3, 0); 6553 6562 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX_2_OR(fSse, fAmdMmxExts); 6554 6555 IEM_MC_BEGIN(3, 0);6556 6563 IEM_MC_ARG(uint64_t *, pDst, 0); 6557 6564 IEM_MC_ARG(uint64_t const *, pSrc, 1); … … 6618 6625 */ 6619 6626 uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); 6627 IEM_MC_BEGIN(3, 0); 6620 6628 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2); 6621 6622 IEM_MC_BEGIN(3, 0);6623 6629 IEM_MC_ARG(PRTUINT128U, puDst, 0); 6624 6630 IEM_MC_ARG(PCRTUINT128U, puSrc, 1); … … 6704 6710 */ 6705 6711 uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); 6712 IEM_MC_BEGIN(2, 0); 6706 6713 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fMmx); 6707 6708 IEM_MC_BEGIN(2, 0);6709 6714 IEM_MC_ARG(uint64_t *, pDst, 0); 6710 6715 IEM_MC_ARG_CONST(uint8_t, bShiftArg, /*=*/ bImm, 1); … … 6751 6756 */ 6752 6757 uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); 6758 IEM_MC_BEGIN(2, 0); 6753 6759 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2); 6754 6755 IEM_MC_BEGIN(2, 0);6756 6760 IEM_MC_ARG(PRTUINT128U, pDst, 0); 6757 6761 IEM_MC_ARG_CONST(uint8_t, bShiftArg, /*=*/ bImm, 1); … … 7066 7070 { 7067 7071 IEMOP_MNEMONIC(emms, "emms"); 7072 IEM_MC_BEGIN(0,0); 7068 7073 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 7069 7070 IEM_MC_BEGIN(0,0);7071 7074 IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE(); 7072 7075 IEM_MC_MAYBE_RAISE_FPU_XCPT(); … … 7096 7099 * Register, register. 7097 7100 */ 7098 IEMOP_HLP_DONE_DECODING_NO_SIZE_OP_REPZ_OR_REPNZ_PREFIXES();7099 7101 if (enmEffOpSize == IEMMODE_64BIT) 7100 7102 { 7101 7103 IEM_MC_BEGIN(2, 0); 7104 IEMOP_HLP_DONE_DECODING_NO_SIZE_OP_REPZ_OR_REPNZ_PREFIXES(); 7102 7105 IEM_MC_ARG(uint64_t *, pu64Dst, 0); 7103 7106 IEM_MC_ARG(uint64_t, u64Enc, 1); … … 7110 7113 { 7111 7114 IEM_MC_BEGIN(2, 0); 7115 IEMOP_HLP_DONE_DECODING_NO_SIZE_OP_REPZ_OR_REPNZ_PREFIXES(); 7112 7116 IEM_MC_ARG(uint64_t *, pu64Dst, 0); 7113 7117 IEM_MC_ARG(uint32_t, u32Enc, 1); … … 7177 7181 * Register, register. 7178 7182 */ 7179 IEMOP_HLP_DONE_DECODING_NO_SIZE_OP_REPZ_OR_REPNZ_PREFIXES();7180 7183 if (enmEffOpSize == IEMMODE_64BIT) 7181 7184 { 7182 7185 IEM_MC_BEGIN(2, 0); 7186 IEMOP_HLP_DONE_DECODING_NO_SIZE_OP_REPZ_OR_REPNZ_PREFIXES(); 7183 7187 IEM_MC_ARG(uint64_t, u64Val, 0); 7184 7188 IEM_MC_ARG(uint64_t, u64Enc, 1); … … 7191 7195 { 7192 7196 IEM_MC_BEGIN(2, 0); 7197 IEMOP_HLP_DONE_DECODING_NO_SIZE_OP_REPZ_OR_REPNZ_PREFIXES(); 7193 7198 IEM_MC_ARG(uint32_t, u32Val, 0); 7194 7199 IEM_MC_ARG(uint32_t, u32Enc, 1); … … 7315 7320 { 7316 7321 /* greg64, MMX */ 7322 IEM_MC_BEGIN(0, 1); 7317 7323 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fMmx); 7318 IEM_MC_BEGIN(0, 1);7319 7324 IEM_MC_LOCAL(uint64_t, u64Tmp); 7320 7325 … … 7367 7372 { 7368 7373 /* greg32, MMX */ 7374 IEM_MC_BEGIN(0, 1); 7369 7375 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fMmx); 7370 IEM_MC_BEGIN(0, 1);7371 7376 IEM_MC_LOCAL(uint32_t, u32Tmp); 7372 7377 … … 7423 7428 { 7424 7429 /* greg64, XMM */ 7430 IEM_MC_BEGIN(0, 1); 7425 7431 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2); 7426 IEM_MC_BEGIN(0, 1);7427 7432 IEM_MC_LOCAL(uint64_t, u64Tmp); 7428 7433 … … 7473 7478 { 7474 7479 /* greg32, XMM */ 7480 IEM_MC_BEGIN(0, 1); 7475 7481 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2); 7476 IEM_MC_BEGIN(0, 1);7477 7482 IEM_MC_LOCAL(uint32_t, u32Tmp); 7478 7483 … … 7525 7530 * XMM128, XMM64. 7526 7531 */ 7532 IEM_MC_BEGIN(0, 2); 7527 7533 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2); 7528 IEM_MC_BEGIN(0, 2);7529 7534 IEM_MC_LOCAL(uint64_t, uSrc); 7530 7535 … … 7575 7580 /** @todo testcase: REX.B / REX.R and MMX register indexing. Ignored? */ 7576 7581 /** @todo testcase: REX.B / REX.R and segment register indexing. Ignored? */ 7582 IEM_MC_BEGIN(0, 1); 7577 7583 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fMmx); 7578 IEM_MC_BEGIN(0, 1);7579 7584 IEM_MC_LOCAL(uint64_t, u64Tmp); 7580 7585 IEM_MC_MAYBE_RAISE_MMX_RELATED_XCPT(); … … 7621 7626 * XMM, XMM. 7622 7627 */ 7628 IEM_MC_BEGIN(0, 0); 7623 7629 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2); 7624 IEM_MC_BEGIN(0, 0);7625 7630 IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT(); 7626 7631 IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE(); … … 7662 7667 * XMM, XMM. 7663 7668 */ 7669 IEM_MC_BEGIN(0, 0); 7664 7670 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2); 7665 IEM_MC_BEGIN(0, 0);7666 7671 IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT(); 7667 7672 IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE(); … … 7706 7711 { 7707 7712 int16_t i16Imm; IEM_OPCODE_GET_NEXT_S16(&i16Imm); 7713 IEM_MC_BEGIN(0, 0); 7708 7714 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 7709 7710 IEM_MC_BEGIN(0, 0);7711 7715 IEM_MC_IF_EFL_BIT_SET(X86_EFL_OF) { 7712 7716 IEM_MC_REL_JMP_S16_AND_FINISH(i16Imm); … … 7719 7723 { 7720 7724 int32_t i32Imm; IEM_OPCODE_GET_NEXT_S32(&i32Imm); 7725 IEM_MC_BEGIN(0, 0); 7721 7726 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 7722 7723 IEM_MC_BEGIN(0, 0);7724 7727 IEM_MC_IF_EFL_BIT_SET(X86_EFL_OF) { 7725 7728 IEM_MC_REL_JMP_S32_AND_FINISH(i32Imm); … … 7741 7744 { 7742 7745 int16_t i16Imm; IEM_OPCODE_GET_NEXT_S16(&i16Imm); 7746 IEM_MC_BEGIN(0, 0); 7743 7747 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 7744 7745 IEM_MC_BEGIN(0, 0);7746 7748 IEM_MC_IF_EFL_BIT_SET(X86_EFL_OF) { 7747 7749 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 7754 7756 { 7755 7757 int32_t i32Imm; IEM_OPCODE_GET_NEXT_S32(&i32Imm); 7758 IEM_MC_BEGIN(0, 0); 7756 7759 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 7757 7758 IEM_MC_BEGIN(0, 0);7759 7760 IEM_MC_IF_EFL_BIT_SET(X86_EFL_OF) { 7760 7761 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 7776 7777 { 7777 7778 int16_t i16Imm; IEM_OPCODE_GET_NEXT_S16(&i16Imm); 7779 IEM_MC_BEGIN(0, 0); 7778 7780 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 7779 7780 IEM_MC_BEGIN(0, 0);7781 7781 IEM_MC_IF_EFL_BIT_SET(X86_EFL_CF) { 7782 7782 IEM_MC_REL_JMP_S16_AND_FINISH(i16Imm); … … 7789 7789 { 7790 7790 int32_t i32Imm; IEM_OPCODE_GET_NEXT_S32(&i32Imm); 7791 IEM_MC_BEGIN(0, 0); 7791 7792 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 7792 7793 IEM_MC_BEGIN(0, 0);7794 7793 IEM_MC_IF_EFL_BIT_SET(X86_EFL_CF) { 7795 7794 IEM_MC_REL_JMP_S32_AND_FINISH(i32Imm); … … 7811 7810 { 7812 7811 int16_t i16Imm; IEM_OPCODE_GET_NEXT_S16(&i16Imm); 7812 IEM_MC_BEGIN(0, 0); 7813 7813 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 7814 7815 IEM_MC_BEGIN(0, 0);7816 7814 IEM_MC_IF_EFL_BIT_SET(X86_EFL_CF) { 7817 7815 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 7824 7822 { 7825 7823 int32_t i32Imm; IEM_OPCODE_GET_NEXT_S32(&i32Imm); 7824 IEM_MC_BEGIN(0, 0); 7826 7825 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 7827 7828 IEM_MC_BEGIN(0, 0);7829 7826 IEM_MC_IF_EFL_BIT_SET(X86_EFL_CF) { 7830 7827 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 7846 7843 { 7847 7844 int16_t i16Imm; IEM_OPCODE_GET_NEXT_S16(&i16Imm); 7845 IEM_MC_BEGIN(0, 0); 7848 7846 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 7849 7850 IEM_MC_BEGIN(0, 0);7851 7847 IEM_MC_IF_EFL_BIT_SET(X86_EFL_ZF) { 7852 7848 IEM_MC_REL_JMP_S16_AND_FINISH(i16Imm); … … 7859 7855 { 7860 7856 int32_t i32Imm; IEM_OPCODE_GET_NEXT_S32(&i32Imm); 7857 IEM_MC_BEGIN(0, 0); 7861 7858 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 7862 7863 IEM_MC_BEGIN(0, 0);7864 7859 IEM_MC_IF_EFL_BIT_SET(X86_EFL_ZF) { 7865 7860 IEM_MC_REL_JMP_S32_AND_FINISH(i32Imm); … … 7881 7876 { 7882 7877 int16_t i16Imm; IEM_OPCODE_GET_NEXT_S16(&i16Imm); 7878 IEM_MC_BEGIN(0, 0); 7883 7879 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 7884 7885 IEM_MC_BEGIN(0, 0);7886 7880 IEM_MC_IF_EFL_BIT_SET(X86_EFL_ZF) { 7887 7881 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 7894 7888 { 7895 7889 int32_t i32Imm; IEM_OPCODE_GET_NEXT_S32(&i32Imm); 7890 IEM_MC_BEGIN(0, 0); 7896 7891 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 7897 7898 IEM_MC_BEGIN(0, 0);7899 7892 IEM_MC_IF_EFL_BIT_SET(X86_EFL_ZF) { 7900 7893 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 7916 7909 { 7917 7910 int16_t i16Imm; IEM_OPCODE_GET_NEXT_S16(&i16Imm); 7911 IEM_MC_BEGIN(0, 0); 7918 7912 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 7919 7920 IEM_MC_BEGIN(0, 0);7921 7913 IEM_MC_IF_EFL_ANY_BITS_SET(X86_EFL_CF | X86_EFL_ZF) { 7922 7914 IEM_MC_REL_JMP_S16_AND_FINISH(i16Imm); … … 7929 7921 { 7930 7922 int32_t i32Imm; IEM_OPCODE_GET_NEXT_S32(&i32Imm); 7923 IEM_MC_BEGIN(0, 0); 7931 7924 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 7932 7933 IEM_MC_BEGIN(0, 0);7934 7925 IEM_MC_IF_EFL_ANY_BITS_SET(X86_EFL_CF | X86_EFL_ZF) { 7935 7926 IEM_MC_REL_JMP_S32_AND_FINISH(i32Imm); … … 7951 7942 { 7952 7943 int16_t i16Imm; IEM_OPCODE_GET_NEXT_S16(&i16Imm); 7944 IEM_MC_BEGIN(0, 0); 7953 7945 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 7954 7955 IEM_MC_BEGIN(0, 0);7956 7946 IEM_MC_IF_EFL_ANY_BITS_SET(X86_EFL_CF | X86_EFL_ZF) { 7957 7947 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 7964 7954 { 7965 7955 int32_t i32Imm; IEM_OPCODE_GET_NEXT_S32(&i32Imm); 7956 IEM_MC_BEGIN(0, 0); 7966 7957 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 7967 7968 IEM_MC_BEGIN(0, 0);7969 7958 IEM_MC_IF_EFL_ANY_BITS_SET(X86_EFL_CF | X86_EFL_ZF) { 7970 7959 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 7986 7975 { 7987 7976 int16_t i16Imm; IEM_OPCODE_GET_NEXT_S16(&i16Imm); 7977 IEM_MC_BEGIN(0, 0); 7988 7978 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 7989 7990 IEM_MC_BEGIN(0, 0);7991 7979 IEM_MC_IF_EFL_BIT_SET(X86_EFL_SF) { 7992 7980 IEM_MC_REL_JMP_S16_AND_FINISH(i16Imm); … … 7999 7987 { 8000 7988 int32_t i32Imm; IEM_OPCODE_GET_NEXT_S32(&i32Imm); 7989 IEM_MC_BEGIN(0, 0); 8001 7990 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 8002 8003 IEM_MC_BEGIN(0, 0);8004 7991 IEM_MC_IF_EFL_BIT_SET(X86_EFL_SF) { 8005 7992 IEM_MC_REL_JMP_S32_AND_FINISH(i32Imm); … … 8021 8008 { 8022 8009 int16_t i16Imm; IEM_OPCODE_GET_NEXT_S16(&i16Imm); 8010 IEM_MC_BEGIN(0, 0); 8023 8011 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 8024 8025 IEM_MC_BEGIN(0, 0);8026 8012 IEM_MC_IF_EFL_BIT_SET(X86_EFL_SF) { 8027 8013 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 8034 8020 { 8035 8021 int32_t i32Imm; IEM_OPCODE_GET_NEXT_S32(&i32Imm); 8022 IEM_MC_BEGIN(0, 0); 8036 8023 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 8037 8038 IEM_MC_BEGIN(0, 0);8039 8024 IEM_MC_IF_EFL_BIT_SET(X86_EFL_SF) { 8040 8025 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 8056 8041 { 8057 8042 int16_t i16Imm; IEM_OPCODE_GET_NEXT_S16(&i16Imm); 8043 IEM_MC_BEGIN(0, 0); 8058 8044 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 8059 8060 IEM_MC_BEGIN(0, 0);8061 8045 IEM_MC_IF_EFL_BIT_SET(X86_EFL_PF) { 8062 8046 IEM_MC_REL_JMP_S16_AND_FINISH(i16Imm); … … 8069 8053 { 8070 8054 int32_t i32Imm; IEM_OPCODE_GET_NEXT_S32(&i32Imm); 8055 IEM_MC_BEGIN(0, 0); 8071 8056 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 8072 8073 IEM_MC_BEGIN(0, 0);8074 8057 IEM_MC_IF_EFL_BIT_SET(X86_EFL_PF) { 8075 8058 IEM_MC_REL_JMP_S32_AND_FINISH(i32Imm); … … 8091 8074 { 8092 8075 int16_t i16Imm; IEM_OPCODE_GET_NEXT_S16(&i16Imm); 8076 IEM_MC_BEGIN(0, 0); 8093 8077 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 8094 8095 IEM_MC_BEGIN(0, 0);8096 8078 IEM_MC_IF_EFL_BIT_SET(X86_EFL_PF) { 8097 8079 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 8104 8086 { 8105 8087 int32_t i32Imm; IEM_OPCODE_GET_NEXT_S32(&i32Imm); 8088 IEM_MC_BEGIN(0, 0); 8106 8089 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 8107 8108 IEM_MC_BEGIN(0, 0);8109 8090 IEM_MC_IF_EFL_BIT_SET(X86_EFL_PF) { 8110 8091 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 8126 8107 { 8127 8108 int16_t i16Imm; IEM_OPCODE_GET_NEXT_S16(&i16Imm); 8109 IEM_MC_BEGIN(0, 0); 8128 8110 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 8129 8130 IEM_MC_BEGIN(0, 0);8131 8111 IEM_MC_IF_EFL_BITS_NE(X86_EFL_SF, X86_EFL_OF) { 8132 8112 IEM_MC_REL_JMP_S16_AND_FINISH(i16Imm); … … 8139 8119 { 8140 8120 int32_t i32Imm; IEM_OPCODE_GET_NEXT_S32(&i32Imm); 8121 IEM_MC_BEGIN(0, 0); 8141 8122 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 8142 8143 IEM_MC_BEGIN(0, 0);8144 8123 IEM_MC_IF_EFL_BITS_NE(X86_EFL_SF, X86_EFL_OF) { 8145 8124 IEM_MC_REL_JMP_S32_AND_FINISH(i32Imm); … … 8161 8140 { 8162 8141 int16_t i16Imm; IEM_OPCODE_GET_NEXT_S16(&i16Imm); 8142 IEM_MC_BEGIN(0, 0); 8163 8143 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 8164 8165 IEM_MC_BEGIN(0, 0);8166 8144 IEM_MC_IF_EFL_BITS_NE(X86_EFL_SF, X86_EFL_OF) { 8167 8145 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 8174 8152 { 8175 8153 int32_t i32Imm; IEM_OPCODE_GET_NEXT_S32(&i32Imm); 8154 IEM_MC_BEGIN(0, 0); 8176 8155 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 8177 8178 IEM_MC_BEGIN(0, 0);8179 8156 IEM_MC_IF_EFL_BITS_NE(X86_EFL_SF, X86_EFL_OF) { 8180 8157 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 8196 8173 { 8197 8174 int16_t i16Imm; IEM_OPCODE_GET_NEXT_S16(&i16Imm); 8175 IEM_MC_BEGIN(0, 0); 8198 8176 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 8199 8200 IEM_MC_BEGIN(0, 0);8201 8177 IEM_MC_IF_EFL_BIT_SET_OR_BITS_NE(X86_EFL_ZF, X86_EFL_SF, X86_EFL_OF) { 8202 8178 IEM_MC_REL_JMP_S16_AND_FINISH(i16Imm); … … 8209 8185 { 8210 8186 int32_t i32Imm; IEM_OPCODE_GET_NEXT_S32(&i32Imm); 8187 IEM_MC_BEGIN(0, 0); 8211 8188 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 8212 8213 IEM_MC_BEGIN(0, 0);8214 8189 IEM_MC_IF_EFL_BIT_SET_OR_BITS_NE(X86_EFL_ZF, X86_EFL_SF, X86_EFL_OF) { 8215 8190 IEM_MC_REL_JMP_S32_AND_FINISH(i32Imm); … … 8231 8206 { 8232 8207 int16_t i16Imm; IEM_OPCODE_GET_NEXT_S16(&i16Imm); 8208 IEM_MC_BEGIN(0, 0); 8233 8209 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 8234 8235 IEM_MC_BEGIN(0, 0);8236 8210 IEM_MC_IF_EFL_BIT_SET_OR_BITS_NE(X86_EFL_ZF, X86_EFL_SF, X86_EFL_OF) { 8237 8211 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 8244 8218 { 8245 8219 int32_t i32Imm; IEM_OPCODE_GET_NEXT_S32(&i32Imm); 8220 IEM_MC_BEGIN(0, 0); 8246 8221 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 8247 8248 IEM_MC_BEGIN(0, 0);8249 8222 IEM_MC_IF_EFL_BIT_SET_OR_BITS_NE(X86_EFL_ZF, X86_EFL_SF, X86_EFL_OF) { 8250 8223 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 8270 8243 { 8271 8244 /* register target */ 8245 IEM_MC_BEGIN(0, 0); 8272 8246 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 8273 IEM_MC_BEGIN(0, 0);8274 8247 IEM_MC_IF_EFL_BIT_SET(X86_EFL_OF) { 8275 8248 IEM_MC_STORE_GREG_U8_CONST(IEM_GET_MODRM_RM(pVCpu, bRm), 1); … … 8311 8284 { 8312 8285 /* register target */ 8286 IEM_MC_BEGIN(0, 0); 8313 8287 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 8314 IEM_MC_BEGIN(0, 0);8315 8288 IEM_MC_IF_EFL_BIT_SET(X86_EFL_OF) { 8316 8289 IEM_MC_STORE_GREG_U8_CONST(IEM_GET_MODRM_RM(pVCpu, bRm), 0); … … 8352 8325 { 8353 8326 /* register target */ 8327 IEM_MC_BEGIN(0, 0); 8354 8328 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 8355 IEM_MC_BEGIN(0, 0);8356 8329 IEM_MC_IF_EFL_BIT_SET(X86_EFL_CF) { 8357 8330 IEM_MC_STORE_GREG_U8_CONST(IEM_GET_MODRM_RM(pVCpu, bRm), 1); … … 8393 8366 { 8394 8367 /* register target */ 8368 IEM_MC_BEGIN(0, 0); 8395 8369 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 8396 IEM_MC_BEGIN(0, 0);8397 8370 IEM_MC_IF_EFL_BIT_SET(X86_EFL_CF) { 8398 8371 IEM_MC_STORE_GREG_U8_CONST(IEM_GET_MODRM_RM(pVCpu, bRm), 0); … … 8434 8407 { 8435 8408 /* register target */ 8409 IEM_MC_BEGIN(0, 0); 8436 8410 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 8437 IEM_MC_BEGIN(0, 0);8438 8411 IEM_MC_IF_EFL_BIT_SET(X86_EFL_ZF) { 8439 8412 IEM_MC_STORE_GREG_U8_CONST(IEM_GET_MODRM_RM(pVCpu, bRm), 1); … … 8475 8448 { 8476 8449 /* register target */ 8450 IEM_MC_BEGIN(0, 0); 8477 8451 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 8478 IEM_MC_BEGIN(0, 0);8479 8452 IEM_MC_IF_EFL_BIT_SET(X86_EFL_ZF) { 8480 8453 IEM_MC_STORE_GREG_U8_CONST(IEM_GET_MODRM_RM(pVCpu, bRm), 0); … … 8516 8489 { 8517 8490 /* register target */ 8491 IEM_MC_BEGIN(0, 0); 8518 8492 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 8519 IEM_MC_BEGIN(0, 0);8520 8493 IEM_MC_IF_EFL_ANY_BITS_SET(X86_EFL_CF | X86_EFL_ZF) { 8521 8494 IEM_MC_STORE_GREG_U8_CONST(IEM_GET_MODRM_RM(pVCpu, bRm), 1); … … 8557 8530 { 8558 8531 /* register target */ 8532 IEM_MC_BEGIN(0, 0); 8559 8533 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 8560 IEM_MC_BEGIN(0, 0);8561 8534 IEM_MC_IF_EFL_ANY_BITS_SET(X86_EFL_CF | X86_EFL_ZF) { 8562 8535 IEM_MC_STORE_GREG_U8_CONST(IEM_GET_MODRM_RM(pVCpu, bRm), 0); … … 8598 8571 { 8599 8572 /* register target */ 8573 IEM_MC_BEGIN(0, 0); 8600 8574 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 8601 IEM_MC_BEGIN(0, 0);8602 8575 IEM_MC_IF_EFL_BIT_SET(X86_EFL_SF) { 8603 8576 IEM_MC_STORE_GREG_U8_CONST(IEM_GET_MODRM_RM(pVCpu, bRm), 1); … … 8639 8612 { 8640 8613 /* register target */ 8614 IEM_MC_BEGIN(0, 0); 8641 8615 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 8642 IEM_MC_BEGIN(0, 0);8643 8616 IEM_MC_IF_EFL_BIT_SET(X86_EFL_SF) { 8644 8617 IEM_MC_STORE_GREG_U8_CONST(IEM_GET_MODRM_RM(pVCpu, bRm), 0); … … 8680 8653 { 8681 8654 /* register target */ 8655 IEM_MC_BEGIN(0, 0); 8682 8656 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 8683 IEM_MC_BEGIN(0, 0);8684 8657 IEM_MC_IF_EFL_BIT_SET(X86_EFL_PF) { 8685 8658 IEM_MC_STORE_GREG_U8_CONST(IEM_GET_MODRM_RM(pVCpu, bRm), 1); … … 8721 8694 { 8722 8695 /* register target */ 8696 IEM_MC_BEGIN(0, 0); 8723 8697 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 8724 IEM_MC_BEGIN(0, 0);8725 8698 IEM_MC_IF_EFL_BIT_SET(X86_EFL_PF) { 8726 8699 IEM_MC_STORE_GREG_U8_CONST(IEM_GET_MODRM_RM(pVCpu, bRm), 0); … … 8762 8735 { 8763 8736 /* register target */ 8737 IEM_MC_BEGIN(0, 0); 8764 8738 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 8765 IEM_MC_BEGIN(0, 0);8766 8739 IEM_MC_IF_EFL_BITS_NE(X86_EFL_SF, X86_EFL_OF) { 8767 8740 IEM_MC_STORE_GREG_U8_CONST(IEM_GET_MODRM_RM(pVCpu, bRm), 1); … … 8803 8776 { 8804 8777 /* register target */ 8778 IEM_MC_BEGIN(0, 0); 8805 8779 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 8806 IEM_MC_BEGIN(0, 0);8807 8780 IEM_MC_IF_EFL_BITS_NE(X86_EFL_SF, X86_EFL_OF) { 8808 8781 IEM_MC_STORE_GREG_U8_CONST(IEM_GET_MODRM_RM(pVCpu, bRm), 0); … … 8844 8817 { 8845 8818 /* register target */ 8819 IEM_MC_BEGIN(0, 0); 8846 8820 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 8847 IEM_MC_BEGIN(0, 0);8848 8821 IEM_MC_IF_EFL_BIT_SET_OR_BITS_NE(X86_EFL_ZF, X86_EFL_SF, X86_EFL_OF) { 8849 8822 IEM_MC_STORE_GREG_U8_CONST(IEM_GET_MODRM_RM(pVCpu, bRm), 1); … … 8885 8858 { 8886 8859 /* register target */ 8860 IEM_MC_BEGIN(0, 0); 8887 8861 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 8888 IEM_MC_BEGIN(0, 0);8889 8862 IEM_MC_IF_EFL_BIT_SET_OR_BITS_NE(X86_EFL_ZF, X86_EFL_SF, X86_EFL_OF) { 8890 8863 IEM_MC_STORE_GREG_U8_CONST(IEM_GET_MODRM_RM(pVCpu, bRm), 0); … … 8918 8891 FNIEMOP_DEF_1(iemOpCommonPushSReg, uint8_t, iReg) 8919 8892 { 8920 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();8921 8893 Assert(iReg < X86_SREG_FS || !IEM_IS_64BIT_CODE(pVCpu)); 8922 8894 IEMOP_HLP_DEFAULT_64BIT_OP_SIZE(); … … 8926 8898 case IEMMODE_16BIT: 8927 8899 IEM_MC_BEGIN(0, 1); 8900 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 8928 8901 IEM_MC_LOCAL(uint16_t, u16Value); 8929 8902 IEM_MC_FETCH_SREG_U16(u16Value, iReg); … … 8935 8908 case IEMMODE_32BIT: 8936 8909 IEM_MC_BEGIN(0, 1); 8910 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 8937 8911 IEM_MC_LOCAL(uint32_t, u32Value); 8938 8912 IEM_MC_FETCH_SREG_ZX_U32(u32Value, iReg); … … 8944 8918 case IEMMODE_64BIT: 8945 8919 IEM_MC_BEGIN(0, 1); 8920 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 8946 8921 IEM_MC_LOCAL(uint64_t, u64Value); 8947 8922 IEM_MC_FETCH_SREG_ZX_U64(u64Value, iReg); … … 8997 8972 { \ 8998 8973 /* register destination. */ \ 8999 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \9000 8974 switch (pVCpu->iem.s.enmEffOpSize) \ 9001 8975 { \ 9002 8976 case IEMMODE_16BIT: \ 9003 8977 IEM_MC_BEGIN(3, 0); \ 8978 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 9004 8979 IEM_MC_ARG(uint16_t *, pu16Dst, 0); \ 9005 8980 IEM_MC_ARG(uint16_t, u16Src, 1); \ … … 9018 8993 case IEMMODE_32BIT: \ 9019 8994 IEM_MC_BEGIN(3, 0); \ 8995 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 9020 8996 IEM_MC_ARG(uint32_t *, pu32Dst, 0); \ 9021 8997 IEM_MC_ARG(uint32_t, u32Src, 1); \ … … 9035 9011 case IEMMODE_64BIT: \ 9036 9012 IEM_MC_BEGIN(3, 0); \ 9013 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 9037 9014 IEM_MC_ARG(uint64_t *, pu64Dst, 0); \ 9038 9015 IEM_MC_ARG(uint64_t, u64Src, 1); \ … … 9267 9244 { 9268 9245 uint8_t cShift; IEM_OPCODE_GET_NEXT_U8(&cShift); 9269 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();9270 9246 9271 9247 switch (pVCpu->iem.s.enmEffOpSize) … … 9273 9249 case IEMMODE_16BIT: 9274 9250 IEM_MC_BEGIN(4, 0); 9251 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 9275 9252 IEM_MC_ARG(uint16_t *, pu16Dst, 0); 9276 9253 IEM_MC_ARG(uint16_t, u16Src, 1); … … 9289 9266 case IEMMODE_32BIT: 9290 9267 IEM_MC_BEGIN(4, 0); 9268 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 9291 9269 IEM_MC_ARG(uint32_t *, pu32Dst, 0); 9292 9270 IEM_MC_ARG(uint32_t, u32Src, 1); … … 9306 9284 case IEMMODE_64BIT: 9307 9285 IEM_MC_BEGIN(4, 0); 9286 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 9308 9287 IEM_MC_ARG(uint64_t *, pu64Dst, 0); 9309 9288 IEM_MC_ARG(uint64_t, u64Src, 1); … … 9412 9391 if (IEM_IS_MODRM_REG_MODE(bRm)) 9413 9392 { 9414 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();9415 9416 9393 switch (pVCpu->iem.s.enmEffOpSize) 9417 9394 { 9418 9395 case IEMMODE_16BIT: 9419 9396 IEM_MC_BEGIN(4, 0); 9397 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 9420 9398 IEM_MC_ARG(uint16_t *, pu16Dst, 0); 9421 9399 IEM_MC_ARG(uint16_t, u16Src, 1); … … 9435 9413 case IEMMODE_32BIT: 9436 9414 IEM_MC_BEGIN(4, 0); 9415 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 9437 9416 IEM_MC_ARG(uint32_t *, pu32Dst, 0); 9438 9417 IEM_MC_ARG(uint32_t, u32Src, 1); … … 9453 9432 case IEMMODE_64BIT: 9454 9433 IEM_MC_BEGIN(4, 0); 9434 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 9455 9435 IEM_MC_ARG(uint64_t *, pu64Dst, 0); 9456 9436 IEM_MC_ARG(uint64_t, u64Src, 1); … … 9849 9829 RT_NOREF_PV(bRm); 9850 9830 IEMOP_MNEMONIC(lfence, "lfence"); 9851 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();9852 if (!IEM_GET_GUEST_CPU_FEATURES(pVCpu)->fSse2)9853 IEMOP_RAISE_INVALID_OPCODE_RET();9854 9855 9831 IEM_MC_BEGIN(0, 0); 9832 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2); 9856 9833 #ifdef RT_ARCH_ARM64 9857 9834 IEM_MC_CALL_VOID_AIMPL_0(iemAImpl_lfence); … … 9872 9849 RT_NOREF_PV(bRm); 9873 9850 IEMOP_MNEMONIC(mfence, "mfence"); 9874 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();9875 if (!IEM_GET_GUEST_CPU_FEATURES(pVCpu)->fSse2)9876 IEMOP_RAISE_INVALID_OPCODE_RET();9877 9878 9851 IEM_MC_BEGIN(0, 0); 9852 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2); 9879 9853 #ifdef RT_ARCH_ARM64 9880 9854 IEM_MC_CALL_VOID_AIMPL_0(iemAImpl_mfence); … … 9895 9869 RT_NOREF_PV(bRm); 9896 9870 IEMOP_MNEMONIC(sfence, "sfence"); 9897 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();9898 if (!IEM_GET_GUEST_CPU_FEATURES(pVCpu)->fSse2)9899 IEMOP_RAISE_INVALID_OPCODE_RET();9900 9901 9871 IEM_MC_BEGIN(0, 0); 9872 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2); 9902 9873 #ifdef RT_ARCH_ARM64 9903 9874 IEM_MC_CALL_VOID_AIMPL_0(iemAImpl_sfence); … … 9917 9888 { 9918 9889 IEMOP_MNEMONIC(rdfsbase, "rdfsbase Ry"); 9919 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fFsGsBase);9920 9890 if (pVCpu->iem.s.enmEffOpSize == IEMMODE_64BIT) 9921 9891 { 9922 9892 IEM_MC_BEGIN(1, 0); 9893 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fFsGsBase); 9923 9894 IEM_MC_MAYBE_RAISE_FSGSBASE_XCPT(); 9924 9895 IEM_MC_ARG(uint64_t, u64Dst, 0); … … 9931 9902 { 9932 9903 IEM_MC_BEGIN(1, 0); 9904 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fFsGsBase); 9933 9905 IEM_MC_MAYBE_RAISE_FSGSBASE_XCPT(); 9934 9906 IEM_MC_ARG(uint32_t, u32Dst, 0); … … 9945 9917 { 9946 9918 IEMOP_MNEMONIC(rdgsbase, "rdgsbase Ry"); 9947 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fFsGsBase);9948 9919 if (pVCpu->iem.s.enmEffOpSize == IEMMODE_64BIT) 9949 9920 { 9950 9921 IEM_MC_BEGIN(1, 0); 9922 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fFsGsBase); 9951 9923 IEM_MC_MAYBE_RAISE_FSGSBASE_XCPT(); 9952 9924 IEM_MC_ARG(uint64_t, u64Dst, 0); … … 9959 9931 { 9960 9932 IEM_MC_BEGIN(1, 0); 9933 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fFsGsBase); 9961 9934 IEM_MC_MAYBE_RAISE_FSGSBASE_XCPT(); 9962 9935 IEM_MC_ARG(uint32_t, u32Dst, 0); … … 9973 9946 { 9974 9947 IEMOP_MNEMONIC(wrfsbase, "wrfsbase Ry"); 9975 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fFsGsBase);9976 9948 if (pVCpu->iem.s.enmEffOpSize == IEMMODE_64BIT) 9977 9949 { 9978 9950 IEM_MC_BEGIN(1, 0); 9951 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fFsGsBase); 9979 9952 IEM_MC_MAYBE_RAISE_FSGSBASE_XCPT(); 9980 9953 IEM_MC_ARG(uint64_t, u64Dst, 0); … … 9988 9961 { 9989 9962 IEM_MC_BEGIN(1, 0); 9963 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fFsGsBase); 9990 9964 IEM_MC_MAYBE_RAISE_FSGSBASE_XCPT(); 9991 9965 IEM_MC_ARG(uint32_t, u32Dst, 0); … … 10002 9976 { 10003 9977 IEMOP_MNEMONIC(wrgsbase, "wrgsbase Ry"); 10004 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fFsGsBase);10005 9978 if (pVCpu->iem.s.enmEffOpSize == IEMMODE_64BIT) 10006 9979 { 10007 9980 IEM_MC_BEGIN(1, 0); 9981 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fFsGsBase); 10008 9982 IEM_MC_MAYBE_RAISE_FSGSBASE_XCPT(); 10009 9983 IEM_MC_ARG(uint64_t, u64Dst, 0); … … 10017 9991 { 10018 9992 IEM_MC_BEGIN(1, 0); 9993 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fFsGsBase); 10019 9994 IEM_MC_MAYBE_RAISE_FSGSBASE_XCPT(); 10020 9995 IEM_MC_ARG(uint32_t, u32Dst, 0); … … 10096 10071 if (IEM_IS_MODRM_REG_MODE(bRm)) 10097 10072 { 10073 IEM_MC_BEGIN(4, 0); 10098 10074 IEMOP_HLP_DONE_DECODING(); 10099 IEM_MC_BEGIN(4, 0);10100 10075 IEM_MC_ARG(uint8_t *, pu8Dst, 0); 10101 10076 IEM_MC_ARG(uint8_t *, pu8Al, 1); … … 10154 10129 if (IEM_IS_MODRM_REG_MODE(bRm)) 10155 10130 { 10156 IEMOP_HLP_DONE_DECODING();10157 10131 switch (pVCpu->iem.s.enmEffOpSize) 10158 10132 { 10159 10133 case IEMMODE_16BIT: 10160 10134 IEM_MC_BEGIN(4, 0); 10135 IEMOP_HLP_DONE_DECODING(); 10161 10136 IEM_MC_ARG(uint16_t *, pu16Dst, 0); 10162 10137 IEM_MC_ARG(uint16_t *, pu16Ax, 1); … … 10179 10154 case IEMMODE_32BIT: 10180 10155 IEM_MC_BEGIN(4, 0); 10156 IEMOP_HLP_DONE_DECODING(); 10181 10157 IEM_MC_ARG(uint32_t *, pu32Dst, 0); 10182 10158 IEM_MC_ARG(uint32_t *, pu32Eax, 1); … … 10205 10181 case IEMMODE_64BIT: 10206 10182 IEM_MC_BEGIN(4, 0); 10183 IEMOP_HLP_DONE_DECODING(); 10207 10184 IEM_MC_ARG(uint64_t *, pu64Dst, 0); 10208 10185 IEM_MC_ARG(uint64_t *, pu64Rax, 1); … … 10473 10450 if (IEM_IS_MODRM_REG_MODE(bRm)) 10474 10451 { 10475 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();10476 10452 switch (pVCpu->iem.s.enmEffOpSize) 10477 10453 { 10478 10454 case IEMMODE_16BIT: 10479 10455 IEM_MC_BEGIN(0, 1); 10456 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 10480 10457 IEM_MC_LOCAL(uint16_t, u16Value); 10481 10458 IEM_MC_FETCH_GREG_U8_ZX_U16(u16Value, IEM_GET_MODRM_RM(pVCpu, bRm)); … … 10487 10464 case IEMMODE_32BIT: 10488 10465 IEM_MC_BEGIN(0, 1); 10466 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 10489 10467 IEM_MC_LOCAL(uint32_t, u32Value); 10490 10468 IEM_MC_FETCH_GREG_U8_ZX_U32(u32Value, IEM_GET_MODRM_RM(pVCpu, bRm)); … … 10496 10474 case IEMMODE_64BIT: 10497 10475 IEM_MC_BEGIN(0, 1); 10476 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 10498 10477 IEM_MC_LOCAL(uint64_t, u64Value); 10499 10478 IEM_MC_FETCH_GREG_U8_ZX_U64(u64Value, IEM_GET_MODRM_RM(pVCpu, bRm)); … … 10571 10550 if (IEM_IS_MODRM_REG_MODE(bRm)) 10572 10551 { 10573 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();10574 10552 if (pVCpu->iem.s.enmEffOpSize != IEMMODE_64BIT) 10575 10553 { 10576 10554 IEM_MC_BEGIN(0, 1); 10555 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 10577 10556 IEM_MC_LOCAL(uint32_t, u32Value); 10578 10557 IEM_MC_FETCH_GREG_U16_ZX_U32(u32Value, IEM_GET_MODRM_RM(pVCpu, bRm)); … … 10584 10563 { 10585 10564 IEM_MC_BEGIN(0, 1); 10565 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 10586 10566 IEM_MC_LOCAL(uint64_t, u64Value); 10587 10567 IEM_MC_FETCH_GREG_U16_ZX_U64(u64Value, IEM_GET_MODRM_RM(pVCpu, bRm)); … … 10674 10654 /* register destination. */ \ 10675 10655 uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); \ 10676 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \10677 10656 \ 10678 10657 switch (pVCpu->iem.s.enmEffOpSize) \ … … 10680 10659 case IEMMODE_16BIT: \ 10681 10660 IEM_MC_BEGIN(3, 0); \ 10661 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 10682 10662 IEM_MC_ARG(uint16_t *, pu16Dst, 0); \ 10683 10663 IEM_MC_ARG_CONST(uint16_t, u16Src, /*=*/ bImm & 0x0f, 1); \ … … 10694 10674 case IEMMODE_32BIT: \ 10695 10675 IEM_MC_BEGIN(3, 0); \ 10676 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 10696 10677 IEM_MC_ARG(uint32_t *, pu32Dst, 0); \ 10697 10678 IEM_MC_ARG_CONST(uint32_t, u32Src, /*=*/ bImm & 0x1f, 1); \ … … 10709 10690 case IEMMODE_64BIT: \ 10710 10691 IEM_MC_BEGIN(3, 0); \ 10692 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 10711 10693 IEM_MC_ARG(uint64_t *, pu64Dst, 0); \ 10712 10694 IEM_MC_ARG_CONST(uint64_t, u64Src, /*=*/ bImm & 0x3f, 1); \ … … 10967 10949 if (IEM_IS_MODRM_REG_MODE(bRm)) 10968 10950 { 10969 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();10970 10951 switch (pVCpu->iem.s.enmEffOpSize) 10971 10952 { 10972 10953 case IEMMODE_16BIT: 10973 10954 IEM_MC_BEGIN(3, 0); 10955 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 10974 10956 IEM_MC_ARG(uint16_t *, pu16Dst, 0); 10975 10957 IEM_MC_ARG(uint16_t, u16Src, 1); … … 10987 10969 case IEMMODE_32BIT: 10988 10970 IEM_MC_BEGIN(3, 0); 10971 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 10989 10972 IEM_MC_ARG(uint32_t *, pu32Dst, 0); 10990 10973 IEM_MC_ARG(uint32_t, u32Src, 1); … … 11004 10987 case IEMMODE_64BIT: 11005 10988 IEM_MC_BEGIN(3, 0); 10989 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 11006 10990 IEM_MC_ARG(uint64_t *, pu64Dst, 0); 11007 10991 IEM_MC_ARG(uint64_t, u64Src, 1); … … 11178 11162 if (IEM_IS_MODRM_REG_MODE(bRm)) 11179 11163 { 11180 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();11181 11164 switch (pVCpu->iem.s.enmEffOpSize) 11182 11165 { 11183 11166 case IEMMODE_16BIT: 11184 11167 IEM_MC_BEGIN(0, 1); 11168 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 11185 11169 IEM_MC_LOCAL(uint16_t, u16Value); 11186 11170 IEM_MC_FETCH_GREG_U8_SX_U16(u16Value, IEM_GET_MODRM_RM(pVCpu, bRm)); … … 11192 11176 case IEMMODE_32BIT: 11193 11177 IEM_MC_BEGIN(0, 1); 11178 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 11194 11179 IEM_MC_LOCAL(uint32_t, u32Value); 11195 11180 IEM_MC_FETCH_GREG_U8_SX_U32(u32Value, IEM_GET_MODRM_RM(pVCpu, bRm)); … … 11201 11186 case IEMMODE_64BIT: 11202 11187 IEM_MC_BEGIN(0, 1); 11188 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 11203 11189 IEM_MC_LOCAL(uint64_t, u64Value); 11204 11190 IEM_MC_FETCH_GREG_U8_SX_U64(u64Value, IEM_GET_MODRM_RM(pVCpu, bRm)); … … 11276 11262 if (IEM_IS_MODRM_REG_MODE(bRm)) 11277 11263 { 11278 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();11279 11264 if (pVCpu->iem.s.enmEffOpSize != IEMMODE_64BIT) 11280 11265 { 11281 11266 IEM_MC_BEGIN(0, 1); 11267 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 11282 11268 IEM_MC_LOCAL(uint32_t, u32Value); 11283 11269 IEM_MC_FETCH_GREG_U16_SX_U32(u32Value, IEM_GET_MODRM_RM(pVCpu, bRm)); … … 11289 11275 { 11290 11276 IEM_MC_BEGIN(0, 1); 11277 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 11291 11278 IEM_MC_LOCAL(uint64_t, u64Value); 11292 11279 IEM_MC_FETCH_GREG_U16_SX_U64(u64Value, IEM_GET_MODRM_RM(pVCpu, bRm)); … … 11341 11328 if (IEM_IS_MODRM_REG_MODE(bRm)) 11342 11329 { 11330 IEM_MC_BEGIN(3, 0); 11343 11331 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 11344 11345 IEM_MC_BEGIN(3, 0);11346 11332 IEM_MC_ARG(uint8_t *, pu8Dst, 0); 11347 11333 IEM_MC_ARG(uint8_t *, pu8Reg, 1); … … 11369 11355 11370 11356 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 11357 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 11371 11358 IEM_MC_MEM_MAP(pu8Dst, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/); 11372 11359 IEM_MC_FETCH_GREG_U8(u8RegCopy, IEM_GET_MODRM_REG(pVCpu, bRm)); … … 11399 11386 if (IEM_IS_MODRM_REG_MODE(bRm)) 11400 11387 { 11401 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();11402 11403 11388 switch (pVCpu->iem.s.enmEffOpSize) 11404 11389 { 11405 11390 case IEMMODE_16BIT: 11406 11391 IEM_MC_BEGIN(3, 0); 11392 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 11407 11393 IEM_MC_ARG(uint16_t *, pu16Dst, 0); 11408 11394 IEM_MC_ARG(uint16_t *, pu16Reg, 1); … … 11420 11406 case IEMMODE_32BIT: 11421 11407 IEM_MC_BEGIN(3, 0); 11408 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 11422 11409 IEM_MC_ARG(uint32_t *, pu32Dst, 0); 11423 11410 IEM_MC_ARG(uint32_t *, pu32Reg, 1); … … 11437 11424 case IEMMODE_64BIT: 11438 11425 IEM_MC_BEGIN(3, 0); 11426 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 11439 11427 IEM_MC_ARG(uint64_t *, pu64Dst, 0); 11440 11428 IEM_MC_ARG(uint64_t *, pu64Reg, 1); … … 11469 11457 11470 11458 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 11459 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 11471 11460 IEM_MC_MEM_MAP(pu16Dst, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/); 11472 11461 IEM_MC_FETCH_GREG_U16(u16RegCopy, IEM_GET_MODRM_REG(pVCpu, bRm)); … … 11494 11483 11495 11484 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 11485 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 11496 11486 IEM_MC_MEM_MAP(pu32Dst, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/); 11497 11487 IEM_MC_FETCH_GREG_U32(u32RegCopy, IEM_GET_MODRM_REG(pVCpu, bRm)); … … 11519 11509 11520 11510 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 11511 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 11521 11512 IEM_MC_MEM_MAP(pu64Dst, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/); 11522 11513 IEM_MC_FETCH_GREG_U64(u64RegCopy, IEM_GET_MODRM_REG(pVCpu, bRm)); … … 11553 11544 */ 11554 11545 uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); 11546 IEM_MC_BEGIN(4, 2); 11555 11547 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse); 11556 IEM_MC_BEGIN(4, 2);11557 11548 IEM_MC_LOCAL(IEMMEDIAF2XMMSRC, Src); 11558 11549 IEM_MC_LOCAL(X86XMMREG, Dst); … … 11624 11615 */ 11625 11616 uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); 11617 IEM_MC_BEGIN(4, 2); 11626 11618 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2); 11627 IEM_MC_BEGIN(4, 2);11628 11619 IEM_MC_LOCAL(IEMMEDIAF2XMMSRC, Src); 11629 11620 IEM_MC_LOCAL(X86XMMREG, Dst); … … 11695 11686 */ 11696 11687 uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); 11688 IEM_MC_BEGIN(4, 2); 11697 11689 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2); 11698 IEM_MC_BEGIN(4, 2);11699 11690 IEM_MC_LOCAL(IEMMEDIAF2XMMSRC, Src); 11700 11691 IEM_MC_LOCAL(X86XMMREG, Dst); … … 11766 11757 */ 11767 11758 uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); 11759 IEM_MC_BEGIN(4, 2); 11768 11760 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2); 11769 IEM_MC_BEGIN(4, 2);11770 11761 IEM_MC_LOCAL(IEMMEDIAF2XMMSRC, Src); 11771 11762 IEM_MC_LOCAL(X86XMMREG, Dst); … … 11843 11834 11844 11835 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 11845 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 11846 IEMOP_HLP_RAISE_UD_IF_MISSING_GUEST_FEATURE(pVCpu, fSse2); 11836 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2); 11847 11837 11848 11838 IEM_MC_FETCH_GREG_U32(u32Value, IEM_GET_MODRM_REG(pVCpu, bRm)); … … 11858 11848 11859 11849 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 11860 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 11861 IEMOP_HLP_RAISE_UD_IF_MISSING_GUEST_FEATURE(pVCpu, fSse2); 11850 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2); 11862 11851 11863 11852 IEM_MC_FETCH_GREG_U64(u64Value, IEM_GET_MODRM_REG(pVCpu, bRm)); … … 11895 11884 */ 11896 11885 uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); 11886 IEM_MC_BEGIN(3, 0); 11897 11887 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX_2_OR(fSse, fAmdMmxExts); 11898 IEM_MC_BEGIN(3, 0);11899 11888 IEM_MC_ARG(uint64_t *, pu64Dst, 0); 11900 11889 IEM_MC_ARG(uint16_t, u16Src, 1); … … 11949 11938 */ 11950 11939 uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); 11940 IEM_MC_BEGIN(3, 0); 11951 11941 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2); 11952 IEM_MC_BEGIN(3, 0);11953 11942 IEM_MC_ARG(PRTUINT128U, puDst, 0); 11954 11943 IEM_MC_ARG(uint16_t, u16Src, 1); … … 12003 11992 */ 12004 11993 uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); 11994 IEM_MC_BEGIN(3, 1); 12005 11995 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX_2_OR(fSse, fAmdMmxExts); 12006 IEM_MC_BEGIN(3, 1);12007 11996 IEM_MC_LOCAL(uint16_t, u16Dst); 12008 11997 IEM_MC_ARG_LOCAL_REF(uint16_t *, pu16Dst, u16Dst, 0); … … 12035 12024 */ 12036 12025 uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); 12026 IEM_MC_BEGIN(3, 1); 12037 12027 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2); 12038 IEM_MC_BEGIN(3, 1);12039 12028 IEM_MC_LOCAL(uint16_t, u16Dst); 12040 12029 IEM_MC_ARG_LOCAL_REF(uint16_t *, pu16Dst, u16Dst, 0); … … 12070 12059 */ 12071 12060 uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); 12061 IEM_MC_BEGIN(3, 0); 12072 12062 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse); 12073 IEM_MC_BEGIN(3, 0);12074 12063 IEM_MC_ARG(PRTUINT128U, pDst, 0); 12075 12064 IEM_MC_ARG(PCRTUINT128U, pSrc, 1); … … 12122 12111 */ 12123 12112 uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); 12113 IEM_MC_BEGIN(3, 0); 12124 12114 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2); 12125 IEM_MC_BEGIN(3, 0);12126 12115 IEM_MC_ARG(PRTUINT128U, pDst, 0); 12127 12116 IEM_MC_ARG(PCRTUINT128U, pSrc, 1); … … 12313 12302 { 12314 12303 /* register destination. */ 12315 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();12316 12304 switch (pVCpu->iem.s.enmEffOpSize) 12317 12305 { 12318 12306 case IEMMODE_16BIT: 12319 12307 IEM_MC_BEGIN(2, 0); 12308 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 12320 12309 IEM_MC_ARG(uint16_t *, pu16Dst, 0); 12321 12310 IEM_MC_ARG(uint32_t *, pEFlags, 1); … … 12332 12321 case IEMMODE_32BIT: 12333 12322 IEM_MC_BEGIN(2, 0); 12323 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 12334 12324 IEM_MC_ARG(uint32_t *, pu32Dst, 0); 12335 12325 IEM_MC_ARG(uint32_t *, pEFlags, 1); … … 12347 12337 case IEMMODE_64BIT: 12348 12338 IEM_MC_BEGIN(2, 0); 12339 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 12349 12340 IEM_MC_ARG(uint64_t *, pu64Dst, 0); 12350 12341 IEM_MC_ARG(uint32_t *, pEFlags, 1); … … 12455 12446 { 12456 12447 /* register destination. */ 12457 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();12458 12448 switch (pVCpu->iem.s.enmEffOpSize) 12459 12449 { 12460 12450 case IEMMODE_16BIT: 12461 12451 IEM_MC_BEGIN(2, 0); 12452 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 12462 12453 IEM_MC_ARG(uint16_t *, pu16Dst, 0); 12463 12454 IEM_MC_ARG(uint32_t *, pEFlags, 1); … … 12474 12465 case IEMMODE_32BIT: 12475 12466 IEM_MC_BEGIN(2, 0); 12467 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 12476 12468 IEM_MC_ARG(uint32_t *, pu32Dst, 0); 12477 12469 IEM_MC_ARG(uint32_t *, pEFlags, 1); … … 12489 12481 case IEMMODE_64BIT: 12490 12482 IEM_MC_BEGIN(2, 0); 12483 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 12491 12484 IEM_MC_ARG(uint64_t *, pu64Dst, 0); 12492 12485 IEM_MC_ARG(uint32_t *, pEFlags, 1); … … 12562 12555 FNIEMOP_DEF_1(iemOpCommonBswapGReg, uint8_t, iReg) 12563 12556 { 12564 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();12565 12557 switch (pVCpu->iem.s.enmEffOpSize) 12566 12558 { 12567 12559 case IEMMODE_16BIT: 12568 12560 IEM_MC_BEGIN(1, 0); 12561 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 12569 12562 IEM_MC_ARG(uint32_t *, pu32Dst, 0); 12570 12563 IEM_MC_REF_GREG_U32(pu32Dst, iReg); /* Don't clear the high dword! */ … … 12576 12569 case IEMMODE_32BIT: 12577 12570 IEM_MC_BEGIN(1, 0); 12571 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 12578 12572 IEM_MC_ARG(uint32_t *, pu32Dst, 0); 12579 12573 IEM_MC_REF_GREG_U32(pu32Dst, iReg); … … 12586 12580 case IEMMODE_64BIT: 12587 12581 IEM_MC_BEGIN(1, 0); 12582 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 12588 12583 IEM_MC_ARG(uint64_t *, pu64Dst, 0); 12589 12584 IEM_MC_REF_GREG_U64(pu64Dst, iReg); … … 12809 12804 * Register, register. 12810 12805 */ 12806 IEM_MC_BEGIN(0, 2); 12811 12807 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2); 12812 IEM_MC_BEGIN(0, 2);12813 12808 IEM_MC_LOCAL(uint64_t, uSrc); 12814 12809 … … 12863 12858 */ 12864 12859 IEMOP_MNEMONIC2(RM_REG, MOVQ2DQ, movq2dq, VqZx_WO, Nq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 12860 IEM_MC_BEGIN(0, 1); 12865 12861 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2); 12866 IEM_MC_BEGIN(0, 1);12867 12862 IEM_MC_LOCAL(uint64_t, uSrc); 12868 12863 … … 12915 12910 */ 12916 12911 IEMOP_MNEMONIC2(RM_REG, MOVDQ2Q, movdq2q, Pq_WO, Uq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 12912 IEM_MC_BEGIN(0, 1); 12917 12913 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2); 12918 IEM_MC_BEGIN(0, 1);12919 12914 IEM_MC_LOCAL(uint64_t, uSrc); 12920 12915 … … 12954 12949 /* Note! Taking the lazy approch here wrt the high 32-bits of the GREG. */ 12955 12950 IEMOP_MNEMONIC2(RM_REG, PMOVMSKB, pmovmskb, Gd, Nq, DISOPTYPE_X86_MMX | DISOPTYPE_HARMLESS, 0); 12951 IEM_MC_BEGIN(2, 0); 12956 12952 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX_2_OR(fSse, fAmdMmxExts); 12957 IEM_MC_BEGIN(2, 0);12958 12953 IEM_MC_ARG(uint64_t *, puDst, 0); 12959 12954 IEM_MC_ARG(uint64_t const *, puSrc, 1); … … 12983 12978 /* Note! Taking the lazy approch here wrt the high 32-bits of the GREG. */ 12984 12979 IEMOP_MNEMONIC2(RM_REG, PMOVMSKB, pmovmskb, Gd, Ux, DISOPTYPE_X86_SSE | DISOPTYPE_HARMLESS, 0); 12980 IEM_MC_BEGIN(2, 0); 12985 12981 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2); 12986 IEM_MC_BEGIN(2, 0);12987 12982 IEM_MC_ARG(uint64_t *, puDst, 0); 12988 12983 IEM_MC_ARG(PCRTUINT128U, puSrc, 1); -
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsVexMap1.cpp.h
r100602 r100714 51 51 if (pVCpu->iem.s.uVexLength) 52 52 { 53 IEM_MC_BEGIN(4, 3); 53 54 IEMOP_HLP_DONE_VEX_DECODING_EX(fAvx2); 54 IEM_MC_BEGIN(4, 3);55 55 IEM_MC_LOCAL(RTUINT256U, uDst); 56 56 IEM_MC_LOCAL(RTUINT256U, uSrc1); … … 71 71 else 72 72 { 73 IEM_MC_BEGIN(4, 0); 73 74 IEMOP_HLP_DONE_VEX_DECODING_EX(fAvx); 74 IEM_MC_BEGIN(4, 0);75 75 IEM_MC_IMPLICIT_AVX_AIMPL_ARGS(); 76 76 IEM_MC_ARG(PRTUINT128U, puDst, 1); … … 165 165 if (pVCpu->iem.s.uVexLength) 166 166 { 167 IEM_MC_BEGIN(3, 3); 167 168 IEMOP_HLP_DONE_VEX_DECODING_EX(fAvx2); 168 IEM_MC_BEGIN(3, 3);169 169 IEM_MC_LOCAL(RTUINT256U, uDst); 170 170 IEM_MC_LOCAL(RTUINT256U, uSrc1); … … 184 184 else 185 185 { 186 IEM_MC_BEGIN(3, 0); 186 187 IEMOP_HLP_DONE_VEX_DECODING_EX(fAvx); 187 IEM_MC_BEGIN(3, 0);188 188 IEM_MC_ARG(PRTUINT128U, puDst, 0); 189 189 IEM_MC_ARG(PCRTUINT128U, puSrc1, 1); … … 307 307 if (pVCpu->iem.s.uVexLength) 308 308 { 309 IEM_MC_BEGIN(2, 2); 309 310 IEMOP_HLP_DONE_VEX_DECODING_EX(fAvx2); 310 IEM_MC_BEGIN(2, 2);311 311 IEM_MC_LOCAL(RTUINT256U, uDst); 312 312 IEM_MC_LOCAL(RTUINT256U, uSrc); … … 323 323 else 324 324 { 325 IEM_MC_BEGIN(2, 0); 325 326 IEMOP_HLP_DONE_VEX_DECODING_EX(fAvx); 326 IEM_MC_BEGIN(2, 0);327 327 IEM_MC_ARG(PRTUINT128U, puDst, 0); 328 328 IEM_MC_ARG(PCRTUINT128U, puSrc, 1); … … 432 432 * Register, register. 433 433 */ 434 IEM_MC_BEGIN(0, 0); 434 435 IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV_EX(fAvx); 435 IEM_MC_BEGIN(0, 0);436 436 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); 437 437 IEM_MC_ACTUALIZE_AVX_STATE_FOR_CHANGE(); … … 507 507 * Register, register. 508 508 */ 509 IEM_MC_BEGIN(0, 0); 509 510 IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV_EX(fAvx); 510 IEM_MC_BEGIN(0, 0);511 511 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); 512 512 IEM_MC_ACTUALIZE_AVX_STATE_FOR_CHANGE(); … … 583 583 */ 584 584 IEMOP_MNEMONIC3(VEX_RVM_REG, VMOVSS, vmovss, Vss_WO, HssHi, Uss, DISOPTYPE_HARMLESS | DISOPTYPE_X86_AVX, IEMOPHINT_IGNORES_OP_SIZES | IEMOPHINT_VEX_L_IGNORED); 585 IEM_MC_BEGIN(0, 0); 585 586 IEMOP_HLP_DONE_VEX_DECODING_EX(fAvx); 586 IEM_MC_BEGIN(0, 0);587 587 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); 588 588 IEM_MC_ACTUALIZE_AVX_STATE_FOR_CHANGE(); … … 646 646 */ 647 647 IEMOP_MNEMONIC3(VEX_RVM_REG, VMOVSD, vmovsd, Vsd_WO, HsdHi, Usd, DISOPTYPE_HARMLESS | DISOPTYPE_X86_AVX, IEMOPHINT_IGNORES_OP_SIZES | IEMOPHINT_VEX_L_IGNORED); 648 IEM_MC_BEGIN(0, 0); 648 649 IEMOP_HLP_DONE_VEX_DECODING_EX(fAvx); 649 IEM_MC_BEGIN(0, 0);650 650 651 651 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); … … 709 709 * Register, register. 710 710 */ 711 IEM_MC_BEGIN(0, 0); 711 712 IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV_EX(fAvx); 712 IEM_MC_BEGIN(0, 0);713 713 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); 714 714 IEM_MC_ACTUALIZE_AVX_STATE_FOR_CHANGE(); … … 784 784 * Register, register. 785 785 */ 786 IEM_MC_BEGIN(0, 0); 786 787 IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV_EX(fAvx); 787 IEM_MC_BEGIN(0, 0);788 788 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); 789 789 IEM_MC_ACTUALIZE_AVX_STATE_FOR_CHANGE(); … … 859 859 */ 860 860 IEMOP_MNEMONIC3(VEX_MVR_REG, VMOVSS, vmovss, Uss_WO, HssHi, Vss, DISOPTYPE_HARMLESS | DISOPTYPE_X86_AVX, IEMOPHINT_IGNORES_OP_SIZES | IEMOPHINT_VEX_L_IGNORED); 861 IEM_MC_BEGIN(0, 0); 861 862 IEMOP_HLP_DONE_VEX_DECODING_EX(fAvx); 862 IEM_MC_BEGIN(0, 0);863 863 864 864 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); … … 923 923 */ 924 924 IEMOP_MNEMONIC3(VEX_MVR_REG, VMOVSD, vmovsd, Usd_WO, HsdHi, Vsd, DISOPTYPE_HARMLESS | DISOPTYPE_X86_AVX, IEMOPHINT_IGNORES_OP_SIZES | IEMOPHINT_VEX_L_IGNORED); 925 IEM_MC_BEGIN(0, 0); 925 926 IEMOP_HLP_DONE_VEX_DECODING_EX(fAvx); 926 IEM_MC_BEGIN(0, 0);927 927 928 928 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); … … 986 986 */ 987 987 IEMOP_MNEMONIC3(VEX_RVM_REG, VMOVHLPS, vmovhlps, Vq_WO, HqHi, UqHi, DISOPTYPE_HARMLESS | DISOPTYPE_X86_AVX, IEMOPHINT_IGNORES_OP_SIZES | IEMOPHINT_VEX_L_ZERO); 988 988 IEM_MC_BEGIN(0, 0); 989 989 IEMOP_HLP_DONE_VEX_DECODING_L0_EX(fAvx); 990 IEM_MC_BEGIN(0, 0);991 990 992 991 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); … … 1111 1110 * Register, register. 1112 1111 */ 1113 IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV_EX(fAvx);1114 1112 if (pVCpu->iem.s.uVexLength == 0) 1115 1113 { 1116 1114 IEM_MC_BEGIN(0, 1); 1115 IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV_EX(fAvx); 1117 1116 IEM_MC_LOCAL(RTUINT128U, uSrc); 1118 1117 … … 1133 1132 { 1134 1133 IEM_MC_BEGIN(3, 0); 1134 IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV_EX(fAvx); 1135 1135 IEM_MC_IMPLICIT_AVX_AIMPL_ARGS(); 1136 1136 IEM_MC_ARG_CONST(uint8_t, iYRegDst, IEM_GET_MODRM_REG(pVCpu, bRm), 1); … … 1215 1215 * Register, register. 1216 1216 */ 1217 IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV_EX(fAvx);1218 1217 if (pVCpu->iem.s.uVexLength == 0) 1219 1218 { 1220 1219 IEM_MC_BEGIN(1, 0); 1220 IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV_EX(fAvx); 1221 1221 IEM_MC_ARG(uint64_t, uSrc, 0); 1222 1222 … … 1235 1235 { 1236 1236 IEM_MC_BEGIN(3, 0); 1237 IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV_EX(fAvx); 1237 1238 IEM_MC_IMPLICIT_AVX_AIMPL_ARGS(); 1238 1239 IEM_MC_ARG_CONST(uint8_t, iYRegDst, IEM_GET_MODRM_REG(pVCpu, bRm), 1); … … 1451 1452 IEMOP_MNEMONIC3(VEX_RVM_REG, VMOVLHPS, vmovlhps, Vq_WO, Hq, Uq, DISOPTYPE_HARMLESS | DISOPTYPE_X86_AVX, IEMOPHINT_IGNORES_OP_SIZES | IEMOPHINT_VEX_L_ZERO); 1452 1453 1454 IEM_MC_BEGIN(0, 0); 1453 1455 IEMOP_HLP_DONE_VEX_DECODING_L0_EX(fAvx); 1454 IEM_MC_BEGIN(0, 0);1455 1456 1456 1457 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); … … 1563 1564 * Register, register. 1564 1565 */ 1565 IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV_EX(fAvx);1566 1566 if (pVCpu->iem.s.uVexLength == 0) 1567 1567 { 1568 1568 IEM_MC_BEGIN(0, 1); 1569 IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV_EX(fAvx); 1569 1570 IEM_MC_LOCAL(RTUINT128U, uSrc); 1570 1571 … … 1585 1586 { 1586 1587 IEM_MC_BEGIN(3, 0); 1588 IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV_EX(fAvx); 1587 1589 IEM_MC_IMPLICIT_AVX_AIMPL_ARGS(); 1588 1590 IEM_MC_ARG_CONST(uint8_t, iYRegDst, IEM_GET_MODRM_REG(pVCpu, bRm), 1); … … 1783 1785 * Register, register. 1784 1786 */ 1787 IEM_MC_BEGIN(1, 0); 1785 1788 IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV_EX(fAvx); 1786 IEM_MC_BEGIN(1, 0);1787 1789 1788 1790 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); … … 1860 1862 * Register, register. 1861 1863 */ 1864 IEM_MC_BEGIN(1, 0); 1862 1865 IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV_EX(fAvx); 1863 IEM_MC_BEGIN(1, 0);1864 1866 1865 1867 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); … … 1956 1958 * Register, register. 1957 1959 */ 1960 IEM_MC_BEGIN(1, 0); 1958 1961 IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV_EX(fAvx); 1959 IEM_MC_BEGIN(1, 0);1960 1962 1961 1963 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); … … 2032 2034 * Register, register. 2033 2035 */ 2036 IEM_MC_BEGIN(1, 0); 2034 2037 IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV_EX(fAvx); 2035 IEM_MC_BEGIN(1, 0);2036 2038 2037 2039 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); … … 2286 2288 * Register, register. 2287 2289 */ 2290 IEM_MC_BEGIN(4, 1); 2288 2291 IEMOP_HLP_DONE_VEX_DECODING_L0_AND_NO_VVVV_EX(fAvx); 2289 IEM_MC_BEGIN(4, 1);2290 2292 IEM_MC_LOCAL(uint32_t, fEFlags); 2291 2293 IEM_MC_ARG(uint32_t *, pfMxcsr, 0); … … 2357 2359 * Register, register. 2358 2360 */ 2361 IEM_MC_BEGIN(4, 1); 2359 2362 IEMOP_HLP_DONE_VEX_DECODING_L0_AND_NO_VVVV_EX(fAvx); 2360 IEM_MC_BEGIN(4, 1);2361 2363 IEM_MC_LOCAL(uint32_t, fEFlags); 2362 2364 IEM_MC_ARG(uint32_t *, pfMxcsr, 0); … … 2431 2433 * Register, register. 2432 2434 */ 2435 IEM_MC_BEGIN(4, 1); 2433 2436 IEMOP_HLP_DONE_VEX_DECODING_L0_AND_NO_VVVV_EX(fAvx); 2434 IEM_MC_BEGIN(4, 1);2435 2437 IEM_MC_LOCAL(uint32_t, fEFlags); 2436 2438 IEM_MC_ARG(uint32_t *, pfMxcsr, 0); … … 2502 2504 * Register, register. 2503 2505 */ 2506 IEM_MC_BEGIN(4, 1); 2504 2507 IEMOP_HLP_DONE_VEX_DECODING_L0_AND_NO_VVVV_EX(fAvx); 2505 IEM_MC_BEGIN(4, 1);2506 2508 IEM_MC_LOCAL(uint32_t, fEFlags); 2507 2509 IEM_MC_ARG(uint32_t *, pfMxcsr, 0); … … 2612 2614 if (pVCpu->iem.s.uVexLength == 0) 2613 2615 { 2616 IEM_MC_BEGIN(2, 1); 2614 2617 IEMOP_HLP_DONE_VEX_DECODING_EX(fAvx); 2615 IEM_MC_BEGIN(2, 1);2616 2618 IEM_MC_LOCAL(uint8_t, u8Dst); 2617 2619 IEM_MC_ARG_LOCAL_REF(uint8_t *, pu8Dst, u8Dst, 0); … … 2628 2630 else 2629 2631 { 2632 IEM_MC_BEGIN(2, 2); 2630 2633 IEMOP_HLP_DONE_VEX_DECODING_EX(fAvx2); 2631 IEM_MC_BEGIN(2, 2);2632 2634 IEM_MC_LOCAL(uint8_t, u8Dst); 2633 2635 IEM_MC_LOCAL(RTUINT256U, uSrc); … … 2663 2665 if (pVCpu->iem.s.uVexLength == 0) 2664 2666 { 2667 IEM_MC_BEGIN(2, 1); 2665 2668 IEMOP_HLP_DONE_VEX_DECODING_EX(fAvx); 2666 IEM_MC_BEGIN(2, 1);2667 2669 IEM_MC_LOCAL(uint8_t, u8Dst); 2668 2670 IEM_MC_ARG_LOCAL_REF(uint8_t *, pu8Dst, u8Dst, 0); … … 2679 2681 else 2680 2682 { 2683 IEM_MC_BEGIN(2, 2); 2681 2684 IEMOP_HLP_DONE_VEX_DECODING_EX(fAvx2); 2682 IEM_MC_BEGIN(2, 2);2683 2685 IEM_MC_LOCAL(uint8_t, u8Dst); 2684 2686 IEM_MC_LOCAL(RTUINT256U, uSrc); … … 3021 3023 // * Register, register. 3022 3024 // */ 3025 // IEM_MC_BEGIN(2, 0); 3023 3026 // IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2); 3024 // IEM_MC_BEGIN(2, 0);3025 3027 // IEM_MC_ARG(PRTUINT128U, pDst, 0); 3026 3028 // IEM_MC_ARG(PCRTUINT128U, pSrc, 1); … … 3171 3173 { 3172 3174 /* XMM, greg64 */ 3175 IEM_MC_BEGIN(0, 1); 3173 3176 IEMOP_HLP_DONE_VEX_DECODING_L0_AND_NO_VVVV_EX(fAvx); 3174 IEM_MC_BEGIN(0, 1);3175 3177 IEM_MC_LOCAL(uint64_t, u64Tmp); 3176 3178 … … 3221 3223 { 3222 3224 /* XMM, greg32 */ 3225 IEM_MC_BEGIN(0, 1); 3223 3226 IEMOP_HLP_DONE_VEX_DECODING_L0_AND_NO_VVVV_EX(fAvx); 3224 IEM_MC_BEGIN(0, 1);3225 3227 IEM_MC_LOCAL(uint32_t, u32Tmp); 3226 3228 … … 3280 3282 * Register, register. 3281 3283 */ 3284 IEM_MC_BEGIN(0, 0); 3282 3285 IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV_EX(fAvx); 3283 IEM_MC_BEGIN(0, 0);3284 3286 3285 3287 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); … … 3355 3357 * Register, register. 3356 3358 */ 3359 IEM_MC_BEGIN(0, 0); 3357 3360 IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV_EX(fAvx); 3358 IEM_MC_BEGIN(0, 0);3359 3361 3360 3362 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); … … 3433 3435 if (pVCpu->iem.s.uVexLength) 3434 3436 { 3437 IEM_MC_BEGIN(3, 2); 3435 3438 IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV_EX(fAvx2); 3436 IEM_MC_BEGIN(3, 2);3437 3439 IEM_MC_LOCAL(RTUINT256U, uDst); 3438 3440 IEM_MC_LOCAL(RTUINT256U, uSrc); … … 3450 3452 else 3451 3453 { 3454 IEM_MC_BEGIN(3, 0); 3452 3455 IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV_EX(fAvx); 3453 IEM_MC_BEGIN(3, 0);3454 3456 IEM_MC_ARG(PRTUINT128U, puDst, 0); 3455 3457 IEM_MC_ARG(PCRTUINT128U, puSrc, 1); … … 3863 3865 { 3864 3866 /* greg64, XMM */ 3867 IEM_MC_BEGIN(0, 1); 3865 3868 IEMOP_HLP_DONE_VEX_DECODING_L0_AND_NO_VVVV_EX(fAvx); 3866 IEM_MC_BEGIN(0, 1);3867 3869 IEM_MC_LOCAL(uint64_t, u64Tmp); 3868 3870 … … 3913 3915 { 3914 3916 /* greg32, XMM */ 3917 IEM_MC_BEGIN(0, 1); 3915 3918 IEMOP_HLP_DONE_VEX_DECODING_L0_AND_NO_VVVV_EX(fAvx); 3916 IEM_MC_BEGIN(0, 1);3917 3919 IEM_MC_LOCAL(uint32_t, u32Tmp); 3918 3920 … … 3966 3968 * Register, register. 3967 3969 */ 3970 IEM_MC_BEGIN(0, 0); 3968 3971 IEMOP_HLP_DONE_VEX_DECODING_L0_AND_NO_VVVV_EX(fAvx); 3969 IEM_MC_BEGIN(0, 0);3970 3972 3971 3973 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); … … 4023 4025 * Register, register. 4024 4026 */ 4027 IEM_MC_BEGIN(0, 0); 4025 4028 IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV_EX(fAvx); 4026 IEM_MC_BEGIN(0, 0);4027 4029 4028 4030 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); … … 4099 4101 * Register, register. 4100 4102 */ 4103 IEM_MC_BEGIN(0, 0); 4101 4104 IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV_EX(fAvx); 4102 IEM_MC_BEGIN(0, 0);4103 4105 4104 4106 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); … … 4400 4402 */ 4401 4403 uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); 4404 IEM_MC_BEGIN(4, 0); 4402 4405 IEMOP_HLP_DONE_VEX_DECODING_L0_EX(fAvx); 4403 IEM_MC_BEGIN(4, 0);4404 4406 IEM_MC_ARG(PRTUINT128U, puDst, 0); 4405 4407 IEM_MC_ARG(PCRTUINT128U, puSrc, 1); … … 4465 4467 */ 4466 4468 uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); 4469 IEM_MC_BEGIN(3, 1); 4467 4470 IEMOP_HLP_DONE_VEX_DECODING_L0_EX(fAvx); 4468 IEM_MC_BEGIN(3, 1);4469 4471 IEM_MC_LOCAL(uint16_t, u16Dst); 4470 4472 IEM_MC_ARG_LOCAL_REF(uint16_t *, pu16Dst, u16Dst, 0); … … 4500 4502 { \ 4501 4503 uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); \ 4504 IEM_MC_BEGIN(4, 3); \ 4502 4505 IEMOP_HLP_DONE_VEX_DECODING_EX(fAvx2); \ 4503 IEM_MC_BEGIN(4, 3); \4504 4506 IEM_MC_LOCAL(RTUINT256U, uDst); \ 4505 4507 IEM_MC_LOCAL(RTUINT256U, uSrc1); \ … … 4522 4524 { \ 4523 4525 uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); \ 4526 IEM_MC_BEGIN(4, 0); \ 4524 4527 IEMOP_HLP_DONE_VEX_DECODING_EX(fAvx); \ 4525 IEM_MC_BEGIN(4, 0); \4526 4528 IEM_MC_ARG(PRTUINT128U, puDst, 0); \ 4527 4529 IEM_MC_ARG(PCRTUINT128U, puSrc1, 1); \ … … 4705 4707 * Register, register. 4706 4708 */ 4709 IEM_MC_BEGIN(0, 0); 4707 4710 IEMOP_HLP_DONE_VEX_DECODING_L0_AND_NO_VVVV_EX(fAvx); 4708 IEM_MC_BEGIN(0, 0);4709 4711 4710 4712 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); … … 4755 4757 if (pVCpu->iem.s.uVexLength) 4756 4758 { 4759 IEM_MC_BEGIN(2, 1); 4757 4760 IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV_EX(fAvx2); 4758 IEM_MC_BEGIN(2, 1);4759 4761 IEM_MC_ARG(uint64_t *, puDst, 0); 4760 4762 IEM_MC_LOCAL(RTUINT256U, uSrc); … … 4771 4773 else 4772 4774 { 4775 IEM_MC_BEGIN(2, 0); 4773 4776 IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV_EX(fAvx); 4774 IEM_MC_BEGIN(2, 0);4775 4777 IEM_MC_ARG(uint64_t *, puDst, 0); 4776 4778 IEM_MC_ARG(PCRTUINT128U, puSrc, 1); -
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsVexMap2.cpp.h
r100575 r100714 221 221 if (pVCpu->iem.s.uVexLength) 222 222 { 223 IEM_MC_BEGIN(3, 2); 223 224 IEMOP_HLP_DONE_VEX_DECODING_EX(fAvx2); 224 IEM_MC_BEGIN(3, 2);225 225 IEM_MC_LOCAL(RTUINT256U, uSrc1); 226 226 IEM_MC_LOCAL(RTUINT256U, uSrc2); … … 240 240 else 241 241 { 242 IEM_MC_BEGIN(3, 0); 242 243 IEMOP_HLP_DONE_VEX_DECODING_EX(fAvx); 243 IEM_MC_BEGIN(3, 0);244 244 IEM_MC_ARG(PCRTUINT128U, puSrc1, 0); 245 245 IEM_MC_ARG(PCRTUINT128U, puSrc2, 1); … … 323 323 * Register, register. 324 324 */ 325 IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV_EX(fAvx2);326 325 if (pVCpu->iem.s.uVexLength) 327 326 { 328 327 IEM_MC_BEGIN(0, 1); 328 IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV_EX(fAvx2); 329 329 IEM_MC_LOCAL(uint32_t, uSrc); 330 330 … … 341 341 { 342 342 IEM_MC_BEGIN(0, 1); 343 IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV_EX(fAvx2); 343 344 IEM_MC_LOCAL(uint32_t, uSrc); 344 345 … … 408 409 * Register, register. 409 410 */ 410 IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV_EX(fAvx2);411 411 if (pVCpu->iem.s.uVexLength) 412 412 { 413 413 IEM_MC_BEGIN(0, 1); 414 IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV_EX(fAvx2); 414 415 IEM_MC_LOCAL(uint64_t, uSrc); 415 416 … … 426 427 { 427 428 IEM_MC_BEGIN(0, 1); 429 IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV_EX(fAvx2); 428 430 IEM_MC_LOCAL(uint64_t, uSrc); 429 431 … … 549 551 if (pVCpu->iem.s.uVexLength) \ 550 552 { \ 553 IEM_MC_BEGIN(2, 1); \ 551 554 IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV_EX(fAvx2); \ 552 IEM_MC_BEGIN(2, 1); \553 555 IEM_MC_LOCAL(RTUINT256U, uDst); \ 554 556 IEM_MC_ARG_LOCAL_REF(PRTUINT256U, puDst, uDst, 0); \ … … 566 568 else \ 567 569 { \ 570 IEM_MC_BEGIN(2, 0); \ 568 571 IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV_EX(fAvx); \ 569 IEM_MC_BEGIN(2, 0); \570 572 IEM_MC_ARG(PRTUINT128U, puDst, 0); \ 571 573 IEM_MC_ARG(uint64_t, uSrc, 1); \ … … 966 968 * Register, register. 967 969 */ 970 IEM_MC_BEGIN(2, 0); 968 971 IEMOP_HLP_DONE_VEX_DECODING_L0_EX(fAvx); 969 IEM_MC_BEGIN(2, 0);970 972 IEM_MC_ARG(PRTUINT128U, puDst, 0); 971 973 IEM_MC_ARG(PCRTUINT128U, puSrc, 1); … … 1641 1643 * Register, register. 1642 1644 */ 1643 IEMOP_HLP_DONE_VEX_DECODING_L0_EX(fBmi1);1644 1645 if (pVCpu->iem.s.fPrefixes & IEM_OP_PRF_SIZE_REX_W) 1645 1646 { 1646 1647 IEM_MC_BEGIN(4, 0); 1648 IEMOP_HLP_DONE_VEX_DECODING_L0_EX(fBmi1); 1647 1649 IEM_MC_ARG(uint64_t *, pDst, 0); 1648 1650 IEM_MC_ARG(uint64_t, uSrc1, 1); … … 1661 1663 { 1662 1664 IEM_MC_BEGIN(4, 0); 1665 IEMOP_HLP_DONE_VEX_DECODING_L0_EX(fBmi1); 1663 1666 IEM_MC_ARG(uint32_t *, pDst, 0); 1664 1667 IEM_MC_ARG(uint32_t, uSrc1, 1); … … 1741 1744 * Register, register. \ 1742 1745 */ \ 1743 IEMOP_HLP_DONE_VEX_DECODING_L0_EX(fBmi1); \1744 1746 if (pVCpu->iem.s.fPrefixes & IEM_OP_PRF_SIZE_REX_W) \ 1745 1747 { \ 1746 1748 IEM_MC_BEGIN(3, 0); \ 1749 IEMOP_HLP_DONE_VEX_DECODING_L0_EX(fBmi1); \ 1747 1750 IEM_MC_ARG(uint64_t *, pDst, 0); \ 1748 1751 IEM_MC_ARG(uint64_t, uSrc, 1); \ … … 1759 1762 { \ 1760 1763 IEM_MC_BEGIN(3, 0); \ 1764 IEMOP_HLP_DONE_VEX_DECODING_L0_EX(fBmi1); \ 1761 1765 IEM_MC_ARG(uint32_t *, pDst, 0); \ 1762 1766 IEM_MC_ARG(uint32_t, uSrc, 1); \ … … 1891 1895 * Register, register. \ 1892 1896 */ \ 1893 IEMOP_HLP_DONE_VEX_DECODING_L0_EX(a_fFeatureMember); \1894 1897 if (pVCpu->iem.s.fPrefixes & IEM_OP_PRF_SIZE_REX_W) \ 1895 1898 { \ 1896 1899 IEM_MC_BEGIN(4, 0); \ 1900 IEMOP_HLP_DONE_VEX_DECODING_L0_EX(a_fFeatureMember); \ 1897 1901 IEM_MC_ARG(uint64_t *, pDst, 0); \ 1898 1902 IEM_MC_ARG(uint64_t, uSrc1, 1); \ … … 1912 1916 { \ 1913 1917 IEM_MC_BEGIN(4, 0); \ 1918 IEMOP_HLP_DONE_VEX_DECODING_L0_EX(a_fFeatureMember); \ 1914 1919 IEM_MC_ARG(uint32_t *, pDst, 0); \ 1915 1920 IEM_MC_ARG(uint32_t, uSrc1, 1); \ … … 1986 1991 * Register, register. \ 1987 1992 */ \ 1988 IEMOP_HLP_DONE_VEX_DECODING_L0_EX(a_fFeatureMember); \1989 1993 if (pVCpu->iem.s.fPrefixes & IEM_OP_PRF_SIZE_REX_W) \ 1990 1994 { \ 1991 1995 IEM_MC_BEGIN(3, 0); \ 1996 IEMOP_HLP_DONE_VEX_DECODING_L0_EX(a_fFeatureMember); \ 1992 1997 IEM_MC_ARG(uint64_t *, pDst, 0); \ 1993 1998 IEM_MC_ARG(uint64_t, uSrc1, 1); \ … … 2004 2009 { \ 2005 2010 IEM_MC_BEGIN(3, 0); \ 2011 IEMOP_HLP_DONE_VEX_DECODING_L0_EX(a_fFeatureMember); \ 2006 2012 IEM_MC_ARG(uint32_t *, pDst, 0); \ 2007 2013 IEM_MC_ARG(uint32_t, uSrc1, 1); \ … … 2077 2083 * Register, register. \ 2078 2084 */ \ 2079 IEMOP_HLP_DONE_VEX_DECODING_L0_EX(a_fFeatureMember); \2080 2085 if (pVCpu->iem.s.fPrefixes & IEM_OP_PRF_SIZE_REX_W) \ 2081 2086 { \ 2082 2087 IEM_MC_BEGIN(3, 0); \ 2088 IEMOP_HLP_DONE_VEX_DECODING_L0_EX(a_fFeatureMember); \ 2083 2089 IEM_MC_ARG(uint64_t *, pDst, 0); \ 2084 2090 IEM_MC_ARG(uint64_t, uSrc1, 1); \ … … 2096 2102 { \ 2097 2103 IEM_MC_BEGIN(3, 0); \ 2104 IEMOP_HLP_DONE_VEX_DECODING_L0_EX(a_fFeatureMember); \ 2098 2105 IEM_MC_ARG(uint32_t *, pDst, 0); \ 2099 2106 IEM_MC_ARG(uint32_t, uSrc1, 1); \ … … 2187 2194 * Register, register. 2188 2195 */ 2189 IEMOP_HLP_DONE_VEX_DECODING_L0_EX(fBmi2);2190 2196 if (pVCpu->iem.s.fPrefixes & IEM_OP_PRF_SIZE_REX_W) 2191 2197 { 2192 2198 IEM_MC_BEGIN(4, 0); 2199 IEMOP_HLP_DONE_VEX_DECODING_L0_EX(fBmi2); 2193 2200 IEM_MC_ARG(uint64_t *, pDst1, 0); 2194 2201 IEM_MC_ARG(uint64_t *, pDst2, 1); … … 2207 2214 { 2208 2215 IEM_MC_BEGIN(4, 0); 2216 IEMOP_HLP_DONE_VEX_DECODING_L0_EX(fBmi2); 2209 2217 IEM_MC_ARG(uint32_t *, pDst1, 0); 2210 2218 IEM_MC_ARG(uint32_t *, pDst2, 1); -
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsVexMap3.cpp.h
r100607 r100714 54 54 { 55 55 uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); 56 IEM_MC_BEGIN(4, 3); 56 57 IEMOP_HLP_DONE_VEX_DECODING_EX(fAvx2); 57 IEM_MC_BEGIN(4, 3);58 58 IEM_MC_LOCAL(RTUINT256U, uDst); 59 59 IEM_MC_LOCAL(RTUINT256U, uSrc1); … … 75 75 { 76 76 uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); 77 IEM_MC_BEGIN(4, 0); 77 78 IEMOP_HLP_DONE_VEX_DECODING_EX(fAvx); 78 IEM_MC_BEGIN(4, 0);79 79 IEM_MC_ARG(PRTUINT128U, puDst, 0); 80 80 IEM_MC_ARG(PCRTUINT128U, puSrc1, 1); … … 170 170 */ 171 171 uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); 172 IEMOP_HLP_DONE_VEX_DECODING_EX(fAvx);173 172 if (pVCpu->iem.s.uVexLength) 174 173 { 175 174 IEM_MC_BEGIN(4, 3); 175 IEMOP_HLP_DONE_VEX_DECODING_EX(fAvx); 176 176 IEM_MC_LOCAL(RTUINT256U, uDst); 177 177 IEM_MC_LOCAL(RTUINT256U, uSrc1); … … 193 193 { 194 194 IEM_MC_BEGIN(4, 0); 195 IEMOP_HLP_DONE_VEX_DECODING_EX(fAvx); 195 196 IEM_MC_ARG(PRTUINT128U, puDst, 0); 196 197 IEM_MC_ARG(PCRTUINT128U, puSrc1, 1); … … 293 294 */ 294 295 uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); 296 IEM_MC_BEGIN(4, 3); 295 297 IEMOP_HLP_DONE_VEX_DECODING_L1_EX(fAvx2); 296 IEM_MC_BEGIN(4, 3);297 298 IEM_MC_LOCAL(RTUINT256U, uDst); 298 299 IEM_MC_LOCAL(RTUINT256U, uSrc1); … … 424 425 */ 425 426 uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); 427 IEM_MC_BEGIN(0, 1); 426 428 IEMOP_HLP_DONE_VEX_DECODING_L1_EX(fAvx2); 427 428 IEM_MC_BEGIN(0, 1);429 429 IEM_MC_LOCAL(RTUINT128U, uSrc); 430 430 … … 517 517 */ 518 518 uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); 519 IEM_MC_BEGIN(0, 1); 519 520 IEMOP_HLP_DONE_VEX_DECODING_L1_EX(fAvx2); 520 521 IEM_MC_BEGIN(0, 1);522 521 IEM_MC_LOCAL(RTUINT128U, uSrc); 523 522 … … 588 587 */ 589 588 uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); 589 IEM_MC_BEGIN(4, 0); 590 590 IEMOP_HLP_DONE_VEX_DECODING_L0_EX(fPclMul); 591 IEM_MC_BEGIN(4, 0);592 591 IEM_MC_ARG(PRTUINT128U, puDst, 0); 593 592 IEM_MC_ARG(PCRTUINT128U, puSrc1, 1); … … 652 651 */ 653 652 uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); 653 IEM_MC_BEGIN(4, 3); 654 654 IEMOP_HLP_DONE_VEX_DECODING_L1_EX(fAvx2); 655 IEM_MC_BEGIN(4, 3);656 655 IEM_MC_LOCAL(RTUINT256U, uDst); 657 656 IEM_MC_LOCAL(RTUINT256U, uSrc1); … … 727 726 */ 728 727 uint8_t bOp4; IEM_OPCODE_GET_NEXT_U8(&bOp4); 729 IEMOP_HLP_DONE_VEX_DECODING_EX(fAvx);730 728 if (pVCpu->iem.s.uVexLength) 731 729 { 732 730 IEM_MC_BEGIN(4, 4); 731 IEMOP_HLP_DONE_VEX_DECODING_EX(fAvx); 733 732 IEM_MC_LOCAL(RTUINT256U, uDst); 734 733 IEM_MC_LOCAL(RTUINT256U, uSrc1); … … 752 751 { 753 752 IEM_MC_BEGIN(4, 0); 753 IEMOP_HLP_DONE_VEX_DECODING_EX(fAvx); 754 754 IEM_MC_ARG(PRTUINT128U, puDst, 0); 755 755 IEM_MC_ARG(PCRTUINT128U, puSrc1, 1); … … 869 869 * Register, register. 870 870 */ 871 uint8_t bOp4; IEM_OPCODE_GET_NEXT_U8(&bOp4); 871 872 if (pVCpu->iem.s.uVexLength) 872 873 { 873 uint8_t bOp4; IEM_OPCODE_GET_NEXT_U8(&bOp4); 874 874 IEM_MC_BEGIN(4, 4); 875 875 IEMOP_HLP_DONE_VEX_DECODING_EX(fAvx2); 876 IEM_MC_BEGIN(4, 4);877 876 IEM_MC_LOCAL(RTUINT256U, uDst); 878 877 IEM_MC_LOCAL(RTUINT256U, uSrc1); … … 895 894 else 896 895 { 897 uint8_t bOp4; IEM_OPCODE_GET_NEXT_U8(&bOp4); 898 896 IEM_MC_BEGIN(4, 0); 899 897 IEMOP_HLP_DONE_VEX_DECODING_EX(fAvx); 900 IEM_MC_BEGIN(4, 0);901 898 IEM_MC_ARG(PRTUINT128U, puDst, 0); 902 899 IEM_MC_ARG(PCRTUINT128U, puSrc1, 1); … … 1123 1120 */ 1124 1121 uint8_t bImm8; IEM_OPCODE_GET_NEXT_U8(&bImm8); 1125 IEMOP_HLP_DONE_VEX_DECODING_L0_AND_NO_VVVV_EX(fBmi2);1126 1122 if (pVCpu->iem.s.fPrefixes & IEM_OP_PRF_SIZE_REX_W) 1127 1123 { 1128 1124 IEM_MC_BEGIN(3, 0); 1125 IEMOP_HLP_DONE_VEX_DECODING_L0_AND_NO_VVVV_EX(fBmi2); 1129 1126 IEM_MC_ARG(uint64_t *, pDst, 0); 1130 1127 IEM_MC_ARG(uint64_t, uSrc1, 1); … … 1139 1136 { 1140 1137 IEM_MC_BEGIN(3, 0); 1138 IEMOP_HLP_DONE_VEX_DECODING_L0_AND_NO_VVVV_EX(fBmi2); 1141 1139 IEM_MC_ARG(uint32_t *, pDst, 0); 1142 1140 IEM_MC_ARG(uint32_t, uSrc1, 1); -
trunk/src/VBox/VMM/include/IEMOpHlp.h
r100579 r100714 327 327 * 328 328 * @note Update IEM_VMX_IN_VMX_OPERATION if changes are made here. 329 * 330 * @todo r=bird: This is absolutely *INCORRECT* since IEM_VMX_IS_ROOT_MODE 331 * is a complicated runtime state (calls CPUMIsGuestInVmxRootMode), and 332 * not something we can decide while decoding. Convert to an IEM_MC! 329 333 */ 330 334 # define IEMOP_HLP_IN_VMX_OPERATION(a_szInstr, a_InsDiagPrefix) \
Note:
See TracChangeset
for help on using the changeset viewer.