Changeset 67040 in vbox for trunk/src/VBox
- Timestamp:
- May 23, 2017 11:51:12 AM (8 years ago)
- Location:
- trunk/src/VBox
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/Makefile.kmk
r66641 r67040 355 355 $(PATH_SUB_CURRENT)/VMMAll/IEMAllInstructionsOneByte.cpp.h \ 356 356 $(PATH_SUB_CURRENT)/VMMAll/IEMAllInstructionsTwoByte0f.cpp.h \ 357 $(PATH_SUB_CURRENT)/VMMAll/IEMAllInstructionsVexMap1.cpp.h 357 $(PATH_SUB_CURRENT)/VMMAll/IEMAllInstructionsThree0f38.cpp.h \ 358 $(PATH_SUB_CURRENT)/VMMAll/IEMAllInstructionsThree0f3a.cpp.h \ 359 $(PATH_SUB_CURRENT)/VMMAll/IEMAllInstructionsVexMap1.cpp.h \ 360 $(PATH_SUB_CURRENT)/VMMAll/IEMAllInstructionsVexMap2.cpp.h \ 361 $(PATH_SUB_CURRENT)/VMMAll/IEMAllInstructionsVexMap3.cpp.h \ 362 $(PATH_SUB_CURRENT)/VMMAll/IEMAllInstructions3DNow.cpp.h 358 363 $(QUIET)$(call MSG_GENERATE,VBoxVMM,$@,VMMAll/IEMAllInstructions*.cpp.h) 359 364 $(QUIET)$(RM) -f -- "[email protected]" "[email protected]" "[email protected]" -
trunk/src/VBox/VMM/VMMAll/IEMAll.cpp
r67029 r67040 11229 11229 return iemRaiseDeviceNotAvailable(pVCpu); \ 11230 11230 } while (0) 11231 #define IEM_MC_MAYBE_RAISE_SSE41_RELATED_XCPT() \ 11232 do { \ 11233 if ( (IEM_GET_CTX(pVCpu)->cr0 & X86_CR0_EM) \ 11234 || !(IEM_GET_CTX(pVCpu)->cr4 & X86_CR4_OSFXSR) \ 11235 || !IEM_GET_GUEST_CPU_FEATURES(pVCpu)->fSse41) \ 11236 return iemRaiseUndefinedOpcode(pVCpu); \ 11237 if (IEM_GET_CTX(pVCpu)->cr0 & X86_CR0_TS) \ 11238 return iemRaiseDeviceNotAvailable(pVCpu); \ 11239 } while (0) 11231 11240 #define IEM_MC_MAYBE_RAISE_SSE3_RELATED_XCPT() \ 11232 11241 do { \ -
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsPython.py
r67037 r67040 253 253 'Md_RO': ( 'IDX_UseModRM', 'rm', '%Md', 'Md', ), 254 254 'Md_WO': ( 'IDX_UseModRM', 'rm', '%Md', 'Md', ), 255 'Mdq': ( 'IDX_UseModRM', 'rm', '%Mdq', 'Mdq', ), 255 256 'Mdq_WO': ( 'IDX_UseModRM', 'rm', '%Mdq', 'Mdq', ), 256 257 'Mq': ( 'IDX_UseModRM', 'rm', '%Mq', 'Mq', ), … … 454 455 'cx16': 'X86_CPUID_FEATURE_ECX_CX16', 455 456 'pcid': 'X86_CPUID_FEATURE_ECX_PCID', 456 'sse4 1':'X86_CPUID_FEATURE_ECX_SSE4_1',457 'sse4 2':'X86_CPUID_FEATURE_ECX_SSE4_2',457 'sse4.1': 'X86_CPUID_FEATURE_ECX_SSE4_1', 458 'sse4.2': 'X86_CPUID_FEATURE_ECX_SSE4_2', 458 459 'movbe': 'X86_CPUID_FEATURE_ECX_MOVBE', 459 460 'popcnt': 'X86_CPUID_FEATURE_ECX_POPCNT', -
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsThree0f38.cpp.h
r66479 r67040 144 144 /** Opcode 0x66 0x0f 0x38 0x29. */ 145 145 FNIEMOP_STUB(iemOp_pcmpeqq_Vx_Wx); 146 /** Opcode 0x66 0x0f 0x38 0x2a. */ 147 FNIEMOP_STUB(iemOp_movntdqa_Vx_Mx); 146 147 /** 148 * @opcode 0x2a 149 * @opcodesub !11 mr/reg 150 * @oppfx 0x66 151 * @opcpuid sse4.1 152 * @opgroup og_sse41_cachect 153 * @opxcpttype 1 154 * @optest op1=-1 op2=2 -> op1=2 155 * @optest op1=0 op2=-42 -> op1=-42 156 * @oponly 157 */ 158 FNIEMOP_DEF(iemOp_movntdqa_Vdq_Mdq) 159 { 160 IEMOP_MNEMONIC2(RM_MEM, MOVNTDQA, movntdqa, Vdq_WO, Mdq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 161 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 162 if ((bRm & X86_MODRM_MOD_MASK) != (3 << X86_MODRM_MOD_SHIFT)) 163 { 164 /* Register, memory. */ 165 IEM_MC_BEGIN(0, 2); 166 IEM_MC_LOCAL(RTUINT128U, uSrc); 167 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 168 169 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 170 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 171 IEM_MC_MAYBE_RAISE_SSE41_RELATED_XCPT(); 172 IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE(); 173 174 IEM_MC_FETCH_MEM_U128_ALIGN_SSE(uSrc, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 175 IEM_MC_STORE_XREG_U128(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, uSrc); 176 177 IEM_MC_ADVANCE_RIP(); 178 IEM_MC_END(); 179 return VINF_SUCCESS; 180 } 181 182 /** 183 * @opdone 184 * @opmnemonic ud660f382areg 185 * @opcode 0x2a 186 * @opcodesub 11 mr/reg 187 * @oppfx 0x66 188 * @opunused immediate 189 * @opcpuid sse 190 * @optest -> 191 * @oponly 192 */ 193 return IEMOP_RAISE_INVALID_OPCODE(); 194 } 195 148 196 /** Opcode 0x66 0x0f 0x38 0x2b. */ 149 197 FNIEMOP_STUB(iemOp_packusdw_Vx_Wx); … … 546 594 /* 0x28 */ iemOp_InvalidNeedRM, iemOp_pmuldq_Vx_Wx, iemOp_InvalidNeedRM, iemOp_InvalidNeedRM, 547 595 /* 0x29 */ iemOp_InvalidNeedRM, iemOp_pcmpeqq_Vx_Wx, iemOp_InvalidNeedRM, iemOp_InvalidNeedRM, 548 /* 0x2a */ iemOp_InvalidNeedRM, iemOp_movntdqa_V x_Mx,iemOp_InvalidNeedRM, iemOp_InvalidNeedRM,596 /* 0x2a */ iemOp_InvalidNeedRM, iemOp_movntdqa_Vdq_Mdq, iemOp_InvalidNeedRM, iemOp_InvalidNeedRM, 549 597 /* 0x2b */ iemOp_InvalidNeedRM, iemOp_packusdw_Vx_Wx, iemOp_InvalidNeedRM, iemOp_InvalidNeedRM, 550 598 /* 0x2c */ IEMOP_X4(iemOp_InvalidNeedRM), -
trunk/src/VBox/VMM/testcase/tstIEMCheckMc.cpp
r67029 r67040 356 356 #define IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT() do {} while (0) 357 357 #define IEM_MC_MAYBE_RAISE_SSE3_RELATED_XCPT() do {} while (0) 358 #define IEM_MC_MAYBE_RAISE_SSE41_RELATED_XCPT() do {} while (0) 358 359 #define IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT() do {} while (0) 359 360 #define IEM_MC_RAISE_GP0_IF_CPL_NOT_ZERO() do {} while (0) -
trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-generated-1-data.py
r67003 r67040 352 352 assert len(oInstr.asCpuIds) in [0, 1], str(oInstr); 353 353 if oInstr.asCpuIds: 354 self.sCpu += oInstr.asCpuIds[0].upper() ;354 self.sCpu += oInstr.asCpuIds[0].upper().replace('.', '_'); 355 355 elif oInstr.sMinCpu: 356 356 self.sCpu += 'GE_' + oInstr.sMinCpu; -
trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-generated-1-template.c
r67037 r67040 2411 2411 2412 2412 2413 static unsigned BS3_NEAR_CODE Bs3Cg1EncodeNext_MODRM_MsomethingWO_Vsomething (PBS3CG1STATE pThis, unsigned iEncoding)2413 static unsigned BS3_NEAR_CODE Bs3Cg1EncodeNext_MODRM_MsomethingWO_Vsomething_OR_ViceVersa(PBS3CG1STATE pThis, unsigned iEncoding) 2414 2414 { 2415 2415 unsigned off; … … 4188 4188 case BS3CG1ENC_MODRM_VqHi_WO_Mq: 4189 4189 return Bs3Cg1EncodeNext_MODRM_VqHi_WO_Mq(pThis, iEncoding); 4190 case BS3CG1ENC_MODRM_Vdq_WO_Wdq:4191 return Bs3Cg1EncodeNext_MODRM_Vdq_WO_Wdq(pThis, iEncoding);4192 4190 case BS3CG1ENC_MODRM_Vpd_WO_Wpd: 4193 4191 case BS3CG1ENC_MODRM_Vps_WO_Wps: … … 4408 4406 break; 4409 4407 4408 case BS3CG1ENC_MODRM_Vdq_WO_Mdq: 4409 pThis->pfnEncoder = Bs3Cg1EncodeNext_MODRM_MsomethingWO_Vsomething_OR_ViceVersa; 4410 pThis->iRegOp = 0; 4411 pThis->iRmOp = 1; 4412 pThis->aOperands[0].cbOp = 16; 4413 pThis->aOperands[1].cbOp = 16; 4414 pThis->aOperands[0].enmLocation = BS3CG1OPLOC_CTX; 4415 pThis->aOperands[1].enmLocation = BS3CG1OPLOC_MEM; 4416 pThis->aOperands[0].idxFieldBase = BS3CG1DST_XMM0; 4417 break; 4418 4410 4419 case BS3CG1ENC_MODRM_Vdq_WO_Wdq: 4420 pThis->pfnEncoder = Bs3Cg1EncodeNext_MODRM_Vdq_WO_Wdq; 4411 4421 pThis->iRmOp = 1; 4412 4422 pThis->iRegOp = 0; … … 4566 4576 4567 4577 case BS3CG1ENC_MODRM_Mdq_WO_Vdq: 4568 pThis->pfnEncoder = Bs3Cg1EncodeNext_MODRM_MsomethingWO_Vsomething ;4578 pThis->pfnEncoder = Bs3Cg1EncodeNext_MODRM_MsomethingWO_Vsomething_OR_ViceVersa; 4569 4579 pThis->iRmOp = 0; 4570 4580 pThis->iRegOp = 1; … … 4599 4609 case BS3CG1ENC_MODRM_Mps_WO_Vps: 4600 4610 case BS3CG1ENC_MODRM_Mpd_WO_Vpd: 4601 pThis->pfnEncoder = Bs3Cg1EncodeNext_MODRM_MsomethingWO_Vsomething ;4611 pThis->pfnEncoder = Bs3Cg1EncodeNext_MODRM_MsomethingWO_Vsomething_OR_ViceVersa; 4602 4612 pThis->iRmOp = 0; 4603 4613 pThis->iRegOp = 1; … … 5079 5089 case BS3CG1CPU_SSE2: 5080 5090 case BS3CG1CPU_SSE3: 5091 case BS3CG1CPU_SSE4_1: 5081 5092 case BS3CG1CPU_AVX: 5082 5093 case BS3CG1CPU_AVX2: … … 5158 5169 case BS3CG1CPU_SSE2: 5159 5170 case BS3CG1CPU_SSE3: 5171 case BS3CG1CPU_SSE4_1: 5160 5172 case BS3CG1CPU_AVX: 5161 5173 if (g_uBs3CpuDetected & BS3CPU_F_CPUID) … … 5174 5186 case BS3CG1CPU_SSE3: 5175 5187 if (fEcx & X86_CPUID_FEATURE_ECX_SSE3) 5188 return Bs3Cg3SetupSseAndAvx(pThis); 5189 return false; 5190 case BS3CG1CPU_SSE4_1: 5191 if (fEcx & X86_CPUID_FEATURE_ECX_SSE4_1) 5176 5192 return Bs3Cg3SetupSseAndAvx(pThis); 5177 5193 return false; -
trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-generated-1.h
r67037 r67040 117 117 BS3CG1OP_Md_RO, 118 118 BS3CG1OP_Md_WO, 119 BS3CG1OP_Mdq, 119 120 BS3CG1OP_Mdq_WO, 120 121 BS3CG1OP_Mq, … … 165 166 BS3CG1ENC_MODRM_VqHi_WO_Mq, 166 167 BS3CG1ENC_MODRM_VqZx_WO_Eq_WNZ, 168 BS3CG1ENC_MODRM_Vdq_WO_Mdq, 167 169 BS3CG1ENC_MODRM_Vdq_WO_Wdq, 168 170 BS3CG1ENC_MODRM_Vpd_WO_Wpd, … … 262 264 BS3CG1CPU_SSE2, 263 265 BS3CG1CPU_SSE3, 266 BS3CG1CPU_SSE4_1, 264 267 BS3CG1CPU_AVX, 265 268 BS3CG1CPU_AVX2,
Note:
See TracChangeset
for help on using the changeset viewer.