- Timestamp:
- Feb 7, 2012 11:50:01 AM (13 years ago)
- Location:
- trunk/src/VBox/VMM/VMMAll
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllCImpl.cpp.h
r39974 r40017 3300 3300 3301 3301 3302 /** 3303 * Implements 'FXSAVE'. 3304 * 3305 * @param GCPtrEff The address of the image. 3306 * @param enmEffOpSize The operand size (only REX.W really matters). 3307 */ 3308 IEM_CIMPL_DEF_2(iemCImpl_fxsave, RTGCPTR, GCPtrEff, IEMMODE, enmEffOpSize) 3309 { 3310 PCPUMCTX pCtx = pIemCpu->CTX_SUFF(pCtx); 3311 3312 if (pCtx->cr0 & (X86_CR0_TS | X86_CR0_EM)) 3313 return iemRaiseDeviceNotAvailable(pIemCpu); 3314 if (GCPtrEff & 15) /** @todo \#AC */ 3315 return iemRaiseGeneralProtectionFault0(pIemCpu); 3316 3317 3318 return VERR_IEM_INSTR_NOT_IMPLEMENTED; 3319 } 3320 3321 3322 /** 3323 * Implements 'FXRSTOR'. 3324 * 3325 * @param GCPtrEff The address of the image. 3326 * @param enmEffOpSize The operand size (only REX.W really matters). 3327 */ 3328 IEM_CIMPL_DEF_2(iemCImpl_fxrstor, RTGCPTR, GCPtrEff, IEMMODE, enmEffOpSize) 3329 { 3330 PCPUMCTX pCtx = pIemCpu->CTX_SUFF(pCtx); 3331 3332 if (pCtx->cr0 & (X86_CR0_TS | X86_CR0_EM)) 3333 return iemRaiseDeviceNotAvailable(pIemCpu); 3334 if (GCPtrEff & 15) /** @todo \#AC */ 3335 return iemRaiseGeneralProtectionFault0(pIemCpu); 3336 3337 3338 return VERR_IEM_INSTR_NOT_IMPLEMENTED; 3339 } 3340 3302 3341 /** @} */ 3303 3342 -
trunk/src/VBox/VMM/VMMAll/IEMAllInstructions.cpp.h
r40001 r40017 3360 3360 } 3361 3361 3362 3362 3363 /** Opcode 0x0f 0xae mem/0. */ 3363 FNIEMOP_STUB_1(iemOp_Grp15_fxsave, uint8_t, bRm); 3364 FNIEMOP_DEF_1(iemOp_Grp15_fxsave, uint8_t, bRm) 3365 { 3366 IEMOP_MNEMONIC("fxsave m512"); 3367 IEMOP_HLP_NO_LOCK_PREFIX(); 3368 if (!IEM_IS_INTEL_CPUID_FEATURE_PRESENT_EDX(X86_CPUID_FEATURE_EDX_FXSR)) 3369 return IEMOP_RAISE_INVALID_LOCK_PREFIX(); 3370 3371 IEM_MC_BEGIN(2, 1); 3372 IEM_MC_ARG(RTGCPTR, GCPtrEff, 0); 3373 IEM_MC_ARG_CONST(IEMMODE, enmEffOpSize,/*=*/pIemCpu->enmEffOpSize, 1); 3374 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEff, bRm); 3375 IEM_MC_CALL_CIMPL_2(iemCImpl_fxsave, GCPtrEff, enmEffOpSize); 3376 IEM_MC_END(); 3377 return VINF_SUCCESS; 3378 } 3379 3364 3380 3365 3381 /** Opcode 0x0f 0xae mem/1. */ 3366 FNIEMOP_STUB_1(iemOp_Grp15_fxrstor, uint8_t, bRm); 3382 FNIEMOP_DEF_1(iemOp_Grp15_fxrstor, uint8_t, bRm) 3383 { 3384 IEMOP_MNEMONIC("fxrstor m512"); 3385 IEMOP_HLP_NO_LOCK_PREFIX(); 3386 if (!IEM_IS_INTEL_CPUID_FEATURE_PRESENT_EDX(X86_CPUID_FEATURE_EDX_FXSR)) 3387 return IEMOP_RAISE_INVALID_LOCK_PREFIX(); 3388 3389 IEM_MC_BEGIN(2, 1); 3390 IEM_MC_ARG(RTGCPTR, GCPtrEff, 0); 3391 IEM_MC_ARG_CONST(IEMMODE, enmEffOpSize,/*=*/pIemCpu->enmEffOpSize, 1); 3392 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEff, bRm); 3393 IEM_MC_CALL_CIMPL_2(iemCImpl_fxrstor, GCPtrEff, enmEffOpSize); 3394 IEM_MC_END(); 3395 return VINF_SUCCESS; 3396 } 3397 3367 3398 3368 3399 /** Opcode 0x0f 0xae mem/2. */
Note:
See TracChangeset
for help on using the changeset viewer.