Changeset 66957 in vbox for trunk/src/VBox/VMM/VMMAll
- Timestamp:
- May 18, 2017 4:21:24 PM (8 years ago)
- svn:sync-xref-src-repo-rev:
- 115498
- Location:
- trunk/src/VBox/VMM/VMMAll
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAll.cpp
r66950 r66957 369 369 */ 370 370 #define IEM_IS_CANONICAL(a_u64Addr) X86_IS_CANONICAL(a_u64Addr) 371 372 /** 373 * Gets the effective VEX.VVVV value. 374 * 375 * The 4th bit is ignored if not 64-bit code. 376 * @returns effective V-register value. 377 * @param a_pVCpu The cross context virtual CPU structure of the calling thread. 378 */ 379 #define IEM_GET_EFFECTIVE_VVVV(a_pVCpu) \ 380 ((a_pVCpu)->iem.s.enmCpuMode == IEMMODE_64BIT ? (a_pVCpu)->iem.s.uVex3rdReg : (a_pVCpu)->iem.s.uVex3rdReg & 7) 371 381 372 382 /** @def IEM_USE_UNALIGNED_DATA_ACCESS … … 12715 12725 * repnz or size prefixes are present, or if in real or v8086 mode. 12716 12726 */ 12717 #define IEMOP_HLP_DONE_ DECODING_NO_AVX_PREFIX() \12727 #define IEMOP_HLP_DONE_VEX_DECODING() \ 12718 12728 do \ 12719 12729 { \ … … 12730 12740 * repnz or size prefixes are present, or if in real or v8086 mode. 12731 12741 */ 12732 #define IEMOP_HLP_DONE_ DECODING_NO_AVX_PREFIX_AND_L0() \12742 #define IEMOP_HLP_DONE_VEX_DECODING_L0() \ 12733 12743 do \ 12734 12744 { \ … … 12748 12758 * register 0, or if in real or v8086 mode. 12749 12759 */ 12750 #define IEMOP_HLP_DONE_ DECODING_NO_AVX_PREFIX_AND_NO_VVVV() \12760 #define IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV() \ 12751 12761 do \ 12752 12762 { \ … … 12758 12768 else \ 12759 12769 return IEMOP_RAISE_INVALID_LOCK_PREFIX(); \ 12770 } while (0) 12771 12772 /** 12773 * Done decoding VEX, no V, L=0. 12774 * Raises \#UD exception if rex, rep, opsize or lock prefixes are present, if 12775 * we're in real or v8086 mode, if VEX.V!=0xf, or if VEX.L!=0. 12776 */ 12777 #define IEMOP_HLP_DONE_VEX_DECODING_L0_AND_NO_VVVV() \ 12778 do \ 12779 { \ 12780 if (RT_LIKELY( !( pVCpu->iem.s.fPrefixes \ 12781 & (IEM_OP_PRF_LOCK | IEM_OP_PRF_SIZE_OP | IEM_OP_PRF_REPZ | IEM_OP_PRF_REPNZ | IEM_OP_PRF_REX)) \ 12782 && pVCpu->iem.s.uVexLength == 0 \ 12783 && pVCpu->iem.s.uVex3rdReg == 0 \ 12784 && !IEM_IS_REAL_OR_V86_MODE(pVCpu))) \ 12785 { /* likely */ } \ 12786 else \ 12787 return IEMOP_RAISE_INVALID_OPCODE(); \ 12760 12788 } while (0) 12761 12789 … … 12797 12825 12798 12826 12799 /**12800 * Done decoding VEX.12801 * Raises \#UD exception if rex, rep, opsize or lock prefixes are present, or if12802 * we're in real or v8086 mode.12803 */12804 #define IEMOP_HLP_DONE_VEX_DECODING() \12805 do \12806 { \12807 if (RT_LIKELY( !( pVCpu->iem.s.fPrefixes \12808 & (IEM_OP_PRF_LOCK | IEM_OP_PRF_SIZE_OP | IEM_OP_PRF_REPZ | IEM_OP_PRF_REPNZ | IEM_OP_PRF_REX)) \12809 && !IEM_IS_REAL_OR_V86_MODE(pVCpu) )) \12810 { /* likely */ } \12811 else \12812 return IEMOP_RAISE_INVALID_OPCODE(); \12813 } while (0)12814 12815 /**12816 * Done decoding VEX, no V, no L.12817 * Raises \#UD exception if rex, rep, opsize or lock prefixes are present, if12818 * we're in real or v8086 mode, if VEX.V!=0xf, or if VEX.L!=0.12819 */12820 #define IEMOP_HLP_DONE_VEX_DECODING_L_ZERO_NO_VVV() \12821 do \12822 { \12823 if (RT_LIKELY( !( pVCpu->iem.s.fPrefixes \12824 & (IEM_OP_PRF_LOCK | IEM_OP_PRF_SIZE_OP | IEM_OP_PRF_REPZ | IEM_OP_PRF_REPNZ | IEM_OP_PRF_REX)) \12825 && pVCpu->iem.s.uVexLength == 0 \12826 && pVCpu->iem.s.uVex3rdReg == 0 \12827 && !IEM_IS_REAL_OR_V86_MODE(pVCpu))) \12828 { /* likely */ } \12829 else \12830 return IEMOP_RAISE_INVALID_OPCODE(); \12831 } while (0)12832 12833 12827 #ifdef VBOX_WITH_NESTED_HWVIRT 12834 12828 /** Check and handles SVM nested-guest control & instruction intercept. */ … … 12848 12842 } while (0) 12849 12843 12850 #else 12844 #else /* !VBOX_WITH_NESTED_HWVIRT */ 12851 12845 # define IEMOP_HLP_SVM_CTRL_INTERCEPT(a_pVCpu, a_Intercept, a_uExitCode, a_uExitInfo1, a_uExitInfo2) do { } while (0) 12852 12846 # define IEMOP_HLP_SVM_READ_CR_INTERCEPT(a_pVCpu, a_uCr, a_uExitInfo1, a_uExitInfo2) do { } while (0) 12853 12854 #endif /* VBOX_WITH_NESTED_HWVIRT */ 12847 #endif /* !VBOX_WITH_NESTED_HWVIRT */ 12855 12848 12856 12849 -
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsOneByte.cpp.h
r66901 r66957 4357 4357 pVCpu->iem.s.uRexIndex = (~bRm >> (6 - 3)) & 0x8; 4358 4358 pVCpu->iem.s.uRexB = (~bRm >> (5 - 3)) & 0x8; 4359 pVCpu->iem.s.uVex3rdReg = (~bXop2 >> 3) & (pVCpu->iem.s.enmCpuMode == IEMMODE_64BIT ? 0xf : 0x7);4359 pVCpu->iem.s.uVex3rdReg = (~bXop2 >> 3) & 0xf; 4360 4360 pVCpu->iem.s.uVexLength = (bXop2 >> 2) & 1; 4361 4361 pVCpu->iem.s.idxPrefix = bXop2 & 0x3; … … 6232 6232 pVCpu->iem.s.uRexIndex = (~bRm >> (6 - 3)) & 0x8; 6233 6233 pVCpu->iem.s.uRexB = (~bRm >> (5 - 3)) & 0x8; 6234 pVCpu->iem.s.uVex3rdReg = (~bVex2 >> 3) & (pVCpu->iem.s.enmCpuMode == IEMMODE_64BIT ? 0xf : 0x7);6234 pVCpu->iem.s.uVex3rdReg = (~bVex2 >> 3) & 0xf; 6235 6235 pVCpu->iem.s.uVexLength = (bVex2 >> 2) & 1; 6236 6236 pVCpu->iem.s.idxPrefix = bVex2 & 0x3; -
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsPython.py
r66950 r66957 481 481 'mmx': 'DISOPTYPE_MMX', ##< MMX,MMXExt,3DNow,++ instruction. Not implemented yet! 482 482 'fpu': 'DISOPTYPE_FPU', ##< FPU instruction. Not implemented yet! 483 'ignores_op_size': '', ##< Ignores both operand size prefixes. 483 'ignores_op_size': '', ##< Ignores both operand size prefixes (66h + REX.W). 484 'ignores_vex_l': '', ##< Ignores VEX.L. 484 485 'lock_allowed': '', ##< Lock prefix allowed. 485 486 }; -
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsVexMap1.cpp.h
r66950 r66957 69 69 * Register, register. 70 70 */ 71 IEMOP_HLP_DONE_ DECODING_NO_AVX_PREFIX_AND_NO_VVVV();71 IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV(); 72 72 IEM_MC_BEGIN(0, 0); 73 73 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); … … 92 92 93 93 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 94 IEMOP_HLP_DONE_ DECODING_NO_AVX_PREFIX_AND_NO_VVVV();94 IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV(); 95 95 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); 96 96 IEM_MC_ACTUALIZE_AVX_STATE_FOR_CHANGE(); … … 112 112 113 113 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 114 IEMOP_HLP_DONE_ DECODING_NO_AVX_PREFIX_AND_NO_VVVV();114 IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV(); 115 115 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); 116 116 IEM_MC_ACTUALIZE_AVX_STATE_FOR_CHANGE(); … … 145 145 * Register, register. 146 146 */ 147 IEMOP_HLP_DONE_ DECODING_NO_AVX_PREFIX_AND_NO_VVVV();147 IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV(); 148 148 IEM_MC_BEGIN(0, 0); 149 149 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); … … 168 168 169 169 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 170 IEMOP_HLP_DONE_ DECODING_NO_AVX_PREFIX_AND_NO_VVVV();170 IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV(); 171 171 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); 172 172 IEM_MC_ACTUALIZE_AVX_STATE_FOR_CHANGE(); … … 188 188 189 189 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 190 IEMOP_HLP_DONE_ DECODING_NO_AVX_PREFIX_AND_NO_VVVV();190 IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV(); 191 191 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); 192 192 IEM_MC_ACTUALIZE_AVX_STATE_FOR_CHANGE(); … … 221 221 * @note HssHi refers to bits 127:32. 222 222 */ 223 IEMOP_MNEMONIC3(VEX_RVM, VMOVSS, vmovss, Vss_WO, HssHi, Uss, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE );224 IEMOP_HLP_DONE_ DECODING_NO_AVX_PREFIX();223 IEMOP_MNEMONIC3(VEX_RVM, VMOVSS, vmovss, Vss_WO, HssHi, Uss, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE | IEMOPHINT_IGNORES_VEX_L); 224 IEMOP_HLP_DONE_VEX_DECODING(); 225 225 IEM_MC_BEGIN(0, 0); 226 226 … … 229 229 IEM_MC_MERGE_YREG_U32_U96_ZX_VLMAX(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, 230 230 (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB /*U32*/, 231 pVCpu->iem.s.uVex3rdReg/*Hss*/);231 IEM_GET_EFFECTIVE_VVVV(pVCpu) /*Hss*/); 232 232 IEM_MC_ADVANCE_RIP(); 233 233 IEM_MC_END(); … … 247 247 * @optest op1=0 op2=-22 -> op1=-22 248 248 */ 249 IEMOP_MNEMONIC2(VEX_XM, VMOVSS, vmovss, VssZx_WO, Md, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE );249 IEMOP_MNEMONIC2(VEX_XM, VMOVSS, vmovss, VssZx_WO, Md, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE | IEMOPHINT_IGNORES_VEX_L); 250 250 IEM_MC_BEGIN(0, 2); 251 251 IEM_MC_LOCAL(uint32_t, uSrc); … … 253 253 254 254 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 255 IEMOP_HLP_DONE_ DECODING_NO_AVX_PREFIX_AND_NO_VVVV();255 IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV(); 256 256 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); 257 257 IEM_MC_ACTUALIZE_AVX_STATE_FOR_CHANGE(); … … 287 287 * @optest op1=3 op2=0x42 op3=0x77 -> op1=0x420000000000000077 288 288 */ 289 IEMOP_MNEMONIC3(VEX_RVM, VMOVSD, vmovsd, Vsd_WO, HsdHi, Usd, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE );290 IEMOP_HLP_DONE_ DECODING_NO_AVX_PREFIX();289 IEMOP_MNEMONIC3(VEX_RVM, VMOVSD, vmovsd, Vsd_WO, HsdHi, Usd, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE | IEMOPHINT_IGNORES_VEX_L); 290 IEMOP_HLP_DONE_VEX_DECODING(); 291 291 IEM_MC_BEGIN(0, 0); 292 292 … … 295 295 IEM_MC_MERGE_YREG_U64_U64_ZX_VLMAX(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, 296 296 (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB /*U32*/, 297 pVCpu->iem.s.uVex3rdReg/*Hss*/);297 IEM_GET_EFFECTIVE_VVVV(pVCpu) /*Hss*/); 298 298 IEM_MC_ADVANCE_RIP(); 299 299 IEM_MC_END(); … … 313 313 * @optest op1=0 op2=-22 -> op1=-22 314 314 */ 315 IEMOP_MNEMONIC2(VEX_XM, VMOVSD, vmovsd, VsdZx_WO, Mq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE );315 IEMOP_MNEMONIC2(VEX_XM, VMOVSD, vmovsd, VsdZx_WO, Mq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE | IEMOPHINT_IGNORES_VEX_L); 316 316 IEM_MC_BEGIN(0, 2); 317 317 IEM_MC_LOCAL(uint64_t, uSrc); … … 319 319 320 320 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 321 IEMOP_HLP_DONE_ DECODING_NO_AVX_PREFIX_AND_NO_VVVV();321 IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV(); 322 322 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); 323 323 IEM_MC_ACTUALIZE_AVX_STATE_FOR_CHANGE(); … … 353 353 * Register, register. 354 354 */ 355 IEMOP_HLP_DONE_ DECODING_NO_AVX_PREFIX_AND_NO_VVVV();355 IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV(); 356 356 IEM_MC_BEGIN(0, 0); 357 357 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); … … 376 376 377 377 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 378 IEMOP_HLP_DONE_ DECODING_NO_AVX_PREFIX_AND_NO_VVVV();378 IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV(); 379 379 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); 380 380 IEM_MC_ACTUALIZE_AVX_STATE_FOR_READ(); … … 396 396 397 397 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 398 IEMOP_HLP_DONE_ DECODING_NO_AVX_PREFIX_AND_NO_VVVV();398 IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV(); 399 399 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); 400 400 IEM_MC_ACTUALIZE_AVX_STATE_FOR_READ(); … … 429 429 * Register, register. 430 430 */ 431 IEMOP_HLP_DONE_ DECODING_NO_AVX_PREFIX_AND_NO_VVVV();431 IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV(); 432 432 IEM_MC_BEGIN(0, 0); 433 433 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); … … 452 452 453 453 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 454 IEMOP_HLP_DONE_ DECODING_NO_AVX_PREFIX_AND_NO_VVVV();454 IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV(); 455 455 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); 456 456 IEM_MC_ACTUALIZE_AVX_STATE_FOR_READ(); … … 472 472 473 473 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 474 IEMOP_HLP_DONE_ DECODING_NO_AVX_PREFIX_AND_NO_VVVV();474 IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV(); 475 475 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); 476 476 IEM_MC_ACTUALIZE_AVX_STATE_FOR_READ(); … … 504 504 * @optest op1=3 op2=0x42 op3=0x77 -> op1=0x4200000077 505 505 */ 506 IEMOP_MNEMONIC3(VEX_MVR, VMOVSS, vmovss, Uss_WO, HssHi, Vss, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE );507 IEMOP_HLP_DONE_ DECODING_NO_AVX_PREFIX();506 IEMOP_MNEMONIC3(VEX_MVR, VMOVSS, vmovss, Uss_WO, HssHi, Vss, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE | IEMOPHINT_IGNORES_VEX_L); 507 IEMOP_HLP_DONE_VEX_DECODING(); 508 508 IEM_MC_BEGIN(0, 0); 509 509 … … 512 512 IEM_MC_MERGE_YREG_U32_U96_ZX_VLMAX((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB /*U32*/, 513 513 ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, 514 pVCpu->iem.s.uVex3rdReg/*Hss*/);514 IEM_GET_EFFECTIVE_VVVV(pVCpu) /*Hss*/); 515 515 IEM_MC_ADVANCE_RIP(); 516 516 IEM_MC_END(); … … 530 530 * @optest op1=0 op2=-22 -> op1=-22 531 531 */ 532 IEMOP_MNEMONIC2(VEX_MR, VMOVSS, vmovss, Md_WO, Vss, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE );532 IEMOP_MNEMONIC2(VEX_MR, VMOVSS, vmovss, Md_WO, Vss, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE | IEMOPHINT_IGNORES_VEX_L); 533 533 IEM_MC_BEGIN(0, 2); 534 534 IEM_MC_LOCAL(uint32_t, uSrc); … … 536 536 537 537 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 538 IEMOP_HLP_DONE_ DECODING_NO_AVX_PREFIX_AND_NO_VVVV();538 IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV(); 539 539 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); 540 540 IEM_MC_ACTUALIZE_AVX_STATE_FOR_READ(); … … 570 570 * @optest op2=0x42 op3=0x77 -> op1=0x420000000000000077 571 571 */ 572 IEMOP_MNEMONIC3(VEX_MVR, VMOVSD, vmovsd, Usd_WO, HsdHi, Vsd, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE );573 IEMOP_HLP_DONE_ DECODING_NO_AVX_PREFIX();572 IEMOP_MNEMONIC3(VEX_MVR, VMOVSD, vmovsd, Usd_WO, HsdHi, Vsd, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE | IEMOPHINT_IGNORES_VEX_L); 573 IEMOP_HLP_DONE_VEX_DECODING(); 574 574 IEM_MC_BEGIN(0, 0); 575 575 … … 578 578 IEM_MC_MERGE_YREG_U64_U64_ZX_VLMAX((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, 579 579 ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, 580 pVCpu->iem.s.uVex3rdReg/*Hss*/);580 IEM_GET_EFFECTIVE_VVVV(pVCpu) /*Hss*/); 581 581 IEM_MC_ADVANCE_RIP(); 582 582 IEM_MC_END(); … … 596 596 * @optest op1=0 op2=-22 -> op1=-22 597 597 */ 598 IEMOP_MNEMONIC2(VEX_MR, VMOVSD, vmovsd, Mq_WO, Vsd, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE );598 IEMOP_MNEMONIC2(VEX_MR, VMOVSD, vmovsd, Mq_WO, Vsd, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE | IEMOPHINT_IGNORES_VEX_L); 599 599 IEM_MC_BEGIN(0, 2); 600 600 IEM_MC_LOCAL(uint64_t, uSrc); … … 602 602 603 603 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 604 IEMOP_HLP_DONE_ DECODING_NO_AVX_PREFIX_AND_NO_VVVV();604 IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV(); 605 605 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); 606 606 IEM_MC_ACTUALIZE_AVX_STATE_FOR_READ(); … … 637 637 IEMOP_MNEMONIC3(VEX_RVM, VMOVHLPS, vmovhlps, Vq_WO, HqHi, UqHi, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE); 638 638 639 IEMOP_HLP_DONE_ DECODING_NO_AVX_PREFIX_AND_L0();639 IEMOP_HLP_DONE_VEX_DECODING_L0(); 640 640 IEM_MC_BEGIN(0, 0); 641 641 … … 644 644 IEM_MC_MERGE_YREG_U64HI_U64_ZX_VLMAX(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, 645 645 (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, 646 pVCpu->iem.s.uVex3rdReg/*Hq*/);646 IEM_GET_EFFECTIVE_VVVV(pVCpu) /*Hq*/); 647 647 648 648 IEM_MC_ADVANCE_RIP(); … … 672 672 673 673 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 674 IEMOP_HLP_DONE_ DECODING_NO_AVX_PREFIX_AND_L0();674 IEMOP_HLP_DONE_VEX_DECODING_L0(); 675 675 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); 676 676 IEM_MC_ACTUALIZE_AVX_STATE_FOR_CHANGE(); … … 679 679 IEM_MC_MERGE_YREG_U64LOCAL_U64_ZX_VLMAX(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, 680 680 uSrc, 681 pVCpu->iem.s.uVex3rdReg/*Hq*/);681 IEM_GET_EFFECTIVE_VVVV(pVCpu) /*Hq*/); 682 682 683 683 IEM_MC_ADVANCE_RIP(); … … 712 712 713 713 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 714 IEMOP_HLP_DONE_ DECODING_NO_AVX_PREFIX_AND_L0();714 IEMOP_HLP_DONE_VEX_DECODING_L0(); 715 715 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); 716 716 IEM_MC_ACTUALIZE_AVX_STATE_FOR_CHANGE(); … … 719 719 IEM_MC_MERGE_YREG_U64LOCAL_U64_ZX_VLMAX(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, 720 720 uSrc, 721 pVCpu->iem.s.uVex3rdReg/*Hq*/);721 IEM_GET_EFFECTIVE_VVVV(pVCpu) /*Hq*/); 722 722 723 723 IEM_MC_ADVANCE_RIP(); … … 751 751 * op2=0xbbbbbbbb00000004cccccccc00000003dddddddd00000002eeeeeeee00000001 752 752 * -> op1=0x0000000400000004000000030000000300000002000000020000000100000001 753 * @oponly754 753 */ 755 754 FNIEMOP_DEF(iemOp_vmovsldup_Vx_Wx) … … 763 762 * Register, register. 764 763 */ 765 IEMOP_HLP_DONE_ DECODING_NO_AVX_PREFIX_AND_NO_VVVV();764 IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV(); 766 765 if (pVCpu->iem.s.uVexLength == 0) 767 766 { … … 810 809 811 810 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 812 IEMOP_HLP_DONE_ DECODING_NO_AVX_PREFIX_AND_NO_VVVV();811 IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV(); 813 812 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); 814 813 IEM_MC_PREPARE_AVX_USAGE(); … … 832 831 833 832 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 834 IEMOP_HLP_DONE_ DECODING_NO_AVX_PREFIX_AND_NO_VVVV();833 IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV(); 835 834 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); 836 835 IEM_MC_PREPARE_AVX_USAGE(); … … 2570 2569 { 2571 2570 IEMOP_MNEMONIC1(VEX_M_MEM, VSTMXCSR, vstmxcsr, Md_WO, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE); 2572 if (!IEM_GET_GUEST_CPU_FEATURES(pVCpu)->fAvx)2573 return IEMOP_RAISE_INVALID_OPCODE();2574 2575 2571 IEM_MC_BEGIN(2, 0); 2576 2572 IEM_MC_ARG(uint8_t, iEffSeg, 0); 2577 2573 IEM_MC_ARG(RTGCPTR, GCPtrEff, 1); 2578 2574 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEff, bRm, 0); 2579 IEMOP_HLP_DONE_VEX_DECODING_L _ZERO_NO_VVV();2575 IEMOP_HLP_DONE_VEX_DECODING_L0_AND_NO_VVVV(); 2580 2576 IEM_MC_ACTUALIZE_SSE_STATE_FOR_READ(); 2581 2577 IEM_MC_ASSIGN(iEffSeg, pVCpu->iem.s.iEffSeg);
Note:
See TracChangeset
for help on using the changeset viewer.