VirtualBox

Changeset 105351 in vbox for trunk/src/VBox/VMM


Ignore:
Timestamp:
Jul 16, 2024 11:16:51 AM (9 months ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
164004
Message:

VMM/IEM: Implement vcvttps2dq instruction emulation, bugref:9898

Location:
trunk/src/VBox/VMM
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMAll/IEMAllAImplC.cpp

    r105350 r105351  
    1756417564
    1756517565/**
    17566  * CVTTPS2DQ
    17567  */
    17568 #ifdef IEM_WITHOUT_ASSEMBLY
     17566 * [V]CVTTPS2DQ
     17567 */
    1756917568static uint32_t iemAImpl_cvttps2dq_u128_worker(int32_t *pi32Res, uint32_t fMxcsr, PCRTFLOAT32U pr32Src)
    1757017569{
     
    1757917578
    1758017579
     17580#ifdef IEM_WITHOUT_ASSEMBLY
    1758117581IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_cvttps2dq_u128,(uint32_t uMxCsrIn, PX86XMMREG pResult, PCX86XMMREG puSrc1, PCX86XMMREG puSrc2))
    1758217582{
     
    1758917589}
    1759017590#endif
     17591
     17592
     17593IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_vcvttps2dq_u128_fallback,(uint32_t uMxCsrIn, PX86XMMREG puDst, PCX86XMMREG puSrc))
     17594{
     17595    return   iemAImpl_cvttps2dq_u128_worker(&puDst->ai32[0], uMxCsrIn, &puSrc->ar32[0])
     17596           | iemAImpl_cvttps2dq_u128_worker(&puDst->ai32[1], uMxCsrIn, &puSrc->ar32[1])
     17597           | iemAImpl_cvttps2dq_u128_worker(&puDst->ai32[2], uMxCsrIn, &puSrc->ar32[2])
     17598           | iemAImpl_cvttps2dq_u128_worker(&puDst->ai32[3], uMxCsrIn, &puSrc->ar32[3]);
     17599}
     17600
     17601
     17602IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_vcvttps2dq_u256_fallback,(uint32_t uMxCsrIn, PX86YMMREG puDst, PCX86YMMREG puSrc))
     17603{
     17604    return   iemAImpl_cvttps2dq_u128_worker(&puDst->ai32[0], uMxCsrIn, &puSrc->ar32[0])
     17605           | iemAImpl_cvttps2dq_u128_worker(&puDst->ai32[1], uMxCsrIn, &puSrc->ar32[1])
     17606           | iemAImpl_cvttps2dq_u128_worker(&puDst->ai32[2], uMxCsrIn, &puSrc->ar32[2])
     17607           | iemAImpl_cvttps2dq_u128_worker(&puDst->ai32[3], uMxCsrIn, &puSrc->ar32[3])
     17608           | iemAImpl_cvttps2dq_u128_worker(&puDst->ai32[4], uMxCsrIn, &puSrc->ar32[4])
     17609           | iemAImpl_cvttps2dq_u128_worker(&puDst->ai32[5], uMxCsrIn, &puSrc->ar32[5])
     17610           | iemAImpl_cvttps2dq_u128_worker(&puDst->ai32[6], uMxCsrIn, &puSrc->ar32[6])
     17611           | iemAImpl_cvttps2dq_u128_worker(&puDst->ai32[7], uMxCsrIn, &puSrc->ar32[7]);
     17612}
    1759117613
    1759217614
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstVexMap1.cpp.h

    r105350 r105351  
    38773877FNIEMOP_DEF(iemOp_vcvtps2dq_Vdq_Wps)
    38783878{
    3879     IEMOP_MNEMONIC2(VEX_RM, VCVTPS2DQ, vcvtps2dq, Vps, Wx, DISOPTYPE_HARMLESS | DISOPTYPE_X86_AVX, 0);
     3879    IEMOP_MNEMONIC2(VEX_RM, VCVTPS2DQ, vcvtps2dq, Vdq, Wps, DISOPTYPE_HARMLESS | DISOPTYPE_X86_AVX, 0);
    38803880    IEMOPMEDIAF2_INIT_VARS(            vcvtps2dq);
    38813881    return FNIEMOP_CALL_1(iemOpCommonAvxAvx2_Vx_Wx, IEM_SELECT_HOST_OR_FALLBACK(fAvx, &s_Host, &s_Fallback));
     
    38843884
    38853885/** Opcode VEX.F3.0F 0x5b - vcvttps2dq Vdq, Wps */
    3886 FNIEMOP_STUB(iemOp_vcvttps2dq_Vdq_Wps);
     3886FNIEMOP_DEF(iemOp_vcvttps2dq_Vdq_Wps)
     3887{
     3888    IEMOP_MNEMONIC2(VEX_RM, VCVTTPS2DQ, vcvttps2dq, Vdq, Wps, DISOPTYPE_HARMLESS | DISOPTYPE_X86_AVX, 0);
     3889    IEMOPMEDIAF2_INIT_VARS(             vcvttps2dq);
     3890    return FNIEMOP_CALL_1(iemOpCommonAvxAvx2_Vx_Wx, IEM_SELECT_HOST_OR_FALLBACK(fAvx, &s_Host, &s_Fallback));
     3891}
     3892
     3893
    38873894/*  Opcode VEX.F2.0F 0x5b - invalid */
    38883895
  • trunk/src/VBox/VMM/include/IEMInternal.h

    r105350 r105351  
    47784778FNIEMAIMPLMEDIAF2U128 iemAImpl_vcvtdq2ps_u128, iemAImpl_vcvtdq2ps_u128_fallback;
    47794779FNIEMAIMPLMEDIAF2U128 iemAImpl_vcvtps2dq_u128, iemAImpl_vcvtps2dq_u128_fallback;
     4780FNIEMAIMPLMEDIAF2U128 iemAImpl_vcvttps2dq_u128, iemAImpl_vcvttps2dq_u128_fallback;
    47804781IEM_DECL_IMPL_PROTO(uint32_t, iemAImpl_vcvtpd2ps_u128_u128,(uint32_t uMxCsrIn, PX86XMMREG puDst, PCX86XMMREG puSrc));
    47814782IEM_DECL_IMPL_PROTO(uint32_t, iemAImpl_vcvtpd2ps_u128_u128_fallback,(uint32_t uMxCsrIn, PX86XMMREG puDst, PCX86XMMREG puSrc));
     
    48284829FNIEMAIMPLMEDIAF2U256 iemAImpl_vcvtdq2ps_u256,  iemAImpl_vcvtdq2ps_u256_fallback;
    48294830FNIEMAIMPLMEDIAF2U256 iemAImpl_vcvtps2dq_u256,  iemAImpl_vcvtps2dq_u256_fallback;
     4831FNIEMAIMPLMEDIAF2U256 iemAImpl_vcvttps2dq_u256, iemAImpl_vcvttps2dq_u256_fallback;
    48304832IEM_DECL_IMPL_PROTO(uint32_t, iemAImpl_vcvtpd2ps_u128_u256,(uint32_t uMxCsrIn, PX86XMMREG puDst, PCX86YMMREG puSrc));
    48314833IEM_DECL_IMPL_PROTO(uint32_t, iemAImpl_vcvtpd2ps_u128_u256_fallback,(uint32_t uMxCsrIn, PX86XMMREG puDst, PCX86YMMREG puSrc));
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette