Changeset 96955 in vbox
- Timestamp:
- Sep 30, 2022 3:51:48 PM (2 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsTwoByte0f.cpp.h
r96954 r96955 346 346 347 347 /** 348 * Common worker for SSE instructions of the form: 349 * pxxx xmm1, xmm2/mem128 350 * 351 * Proper alignment of the 128-bit operand is enforced. 352 * SSE cpuid checks. No SIMD FP exceptions. 353 * 354 * @sa iemOpCommonSse2_FullFull_To_Full 355 */ 356 FNIEMOP_DEF_1(iemOpCommonSse_FullFull_To_Full, PFNIEMAIMPLMEDIAF2U128, pfnU128) 357 { 358 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 359 if (IEM_IS_MODRM_REG_MODE(bRm)) 360 { 361 /* 362 * Register, register. 363 */ 364 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 365 IEM_MC_BEGIN(2, 0); 366 IEM_MC_ARG(PRTUINT128U, pDst, 0); 367 IEM_MC_ARG(PCRTUINT128U, pSrc, 1); 368 IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT(); 369 IEM_MC_PREPARE_SSE_USAGE(); 370 IEM_MC_REF_XREG_U128(pDst, IEM_GET_MODRM_REG(pVCpu, bRm)); 371 IEM_MC_REF_XREG_U128_CONST(pSrc, IEM_GET_MODRM_RM(pVCpu, bRm)); 372 IEM_MC_CALL_SSE_AIMPL_2(pfnU128, pDst, pSrc); 373 IEM_MC_ADVANCE_RIP(); 374 IEM_MC_END(); 375 } 376 else 377 { 378 /* 379 * Register, memory. 380 */ 381 IEM_MC_BEGIN(2, 2); 382 IEM_MC_ARG(PRTUINT128U, pDst, 0); 383 IEM_MC_LOCAL(RTUINT128U, uSrc); 384 IEM_MC_ARG_LOCAL_REF(PCRTUINT128U, pSrc, uSrc, 1); 385 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 386 387 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 388 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 389 IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT(); 390 IEM_MC_FETCH_MEM_U128_ALIGN_SSE(uSrc, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 391 392 IEM_MC_PREPARE_SSE_USAGE(); 393 IEM_MC_REF_XREG_U128(pDst, IEM_GET_MODRM_REG(pVCpu, bRm)); 394 IEM_MC_CALL_SSE_AIMPL_2(pfnU128, pDst, pSrc); 395 396 IEM_MC_ADVANCE_RIP(); 397 IEM_MC_END(); 398 } 399 return VINF_SUCCESS; 400 } 401 402 403 /** 348 404 * Common worker for SSE2 instructions on the forms: 349 405 * pxxx xmm1, xmm2/mem128 … … 3884 3940 3885 3941 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 3886 IEM_MC_MAYBE_RAISE_SSE _RELATED_XCPT();3942 IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT(); 3887 3943 IEM_MC_PREPARE_SSE_USAGE(); /** @todo: This is superfluous because IEM_MC_CALL_SSE_AIMPL_3() is calling this but the tstIEMCheckMc testcase depends on it. */ 3888 3944 … … 3913 3969 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 3914 3970 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 3915 IEM_MC_MAYBE_RAISE_SSE _RELATED_XCPT();3971 IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT(); 3916 3972 IEM_MC_PREPARE_SSE_USAGE(); /** @todo: This is superfluous because IEM_MC_CALL_SSE_AIMPL_3() is calling this but the tstIEMCheckMc testcase depends on it. */ 3917 3973 … … 3942 3998 3943 3999 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 3944 IEM_MC_MAYBE_RAISE_SSE _RELATED_XCPT();4000 IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT(); 3945 4001 IEM_MC_PREPARE_SSE_USAGE(); /** @todo: This is superfluous because IEM_MC_CALL_SSE_AIMPL_3() is calling this but the tstIEMCheckMc testcase depends on it. */ 3946 4002 … … 3971 4027 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 3972 4028 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 3973 IEM_MC_MAYBE_RAISE_SSE _RELATED_XCPT();4029 IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT(); 3974 4030 IEM_MC_PREPARE_SSE_USAGE(); /** @todo: This is superfluous because IEM_MC_CALL_SSE_AIMPL_3() is calling this but the tstIEMCheckMc testcase depends on it. */ 3975 4031 … … 4800 4856 if (IEM_IS_MODRM_REG_MODE(bRm)) 4801 4857 { 4802 /* greg , XMM */4858 /* greg32, XMM */ 4803 4859 IEM_MC_BEGIN(3, 4); 4804 4860 IEM_MC_LOCAL(uint32_t, fMxcsr); … … 4826 4882 else 4827 4883 { 4828 /* greg , [mem] */4884 /* greg32, [mem64] */ 4829 4885 IEM_MC_BEGIN(3, 4); 4830 4886 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); … … 5575 5631 { 5576 5632 IEMOP_MNEMONIC2(RM, ANDPS, andps, Vps, Wps, DISOPTYPE_HARMLESS, 0); 5577 return FNIEMOP_CALL_1(iemOpCommonSse 2_FullFull_To_Full, iemAImpl_pand_u128);5633 return FNIEMOP_CALL_1(iemOpCommonSse_FullFull_To_Full, iemAImpl_pand_u128); 5578 5634 } 5579 5635 … … 5595 5651 { 5596 5652 IEMOP_MNEMONIC2(RM, ANDNPS, andnps, Vps, Wps, DISOPTYPE_HARMLESS, 0); 5597 return FNIEMOP_CALL_1(iemOpCommonSse 2_FullFull_To_Full, iemAImpl_pandn_u128);5653 return FNIEMOP_CALL_1(iemOpCommonSse_FullFull_To_Full, iemAImpl_pandn_u128); 5598 5654 } 5599 5655 … … 5615 5671 { 5616 5672 IEMOP_MNEMONIC2(RM, ORPS, orps, Vps, Wps, DISOPTYPE_HARMLESS, 0); 5617 return FNIEMOP_CALL_1(iemOpCommonSse 2_FullFull_To_Full, iemAImpl_por_u128);5673 return FNIEMOP_CALL_1(iemOpCommonSse_FullFull_To_Full, iemAImpl_por_u128); 5618 5674 } 5619 5675 … … 5635 5691 { 5636 5692 IEMOP_MNEMONIC2(RM, XORPS, xorps, Vps, Wps, DISOPTYPE_HARMLESS, 0); 5637 return FNIEMOP_CALL_1(iemOpCommonSse 2_FullFull_To_Full, iemAImpl_pxor_u128);5693 return FNIEMOP_CALL_1(iemOpCommonSse_FullFull_To_Full, iemAImpl_pxor_u128); 5638 5694 } 5639 5695
Note:
See TracChangeset
for help on using the changeset viewer.