VirtualBox

Changeset 105232 in vbox


Ignore:
Timestamp:
Jul 9, 2024 10:46:52 AM (7 months ago)
Author:
vboxsync
Message:

VMM/IEM: Implement vhsubp{s,d} instruction emulations, bugref:9898

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

Legend:

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

    r105231 r105232  
    1685116851
    1685216852/**
    16853  * HADDPS
     16853 * [V]HADDPS
    1685416854 */
    1685516855#ifdef IEM_WITHOUT_ASSEMBLY
     
    1688716887
    1688816888/**
    16889  * HADDPD
     16889 * [V]HADDPD
    1689016890 */
    1689116891#ifdef IEM_WITHOUT_ASSEMBLY
     
    1691516915
    1691616916/**
    16917  * HSUBPS
     16917 * [V]HSUBPS
    1691816918 */
    1691916919#ifdef IEM_WITHOUT_ASSEMBLY
     
    1692816928
    1692916929
     16930IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_vhsubps_u128_fallback,(uint32_t uMxCsrIn, PX86XMMREG pResult, PCX86XMMREG puSrc1, PCX86XMMREG puSrc2))
     16931{
     16932    return   iemAImpl_subps_u128_worker(&pResult->ar32[0], uMxCsrIn, &puSrc1->ar32[0], &puSrc1->ar32[1])
     16933           | iemAImpl_subps_u128_worker(&pResult->ar32[1], uMxCsrIn, &puSrc1->ar32[2], &puSrc1->ar32[3])
     16934           | iemAImpl_subps_u128_worker(&pResult->ar32[2], uMxCsrIn, &puSrc2->ar32[0], &puSrc2->ar32[1])
     16935           | iemAImpl_subps_u128_worker(&pResult->ar32[3], uMxCsrIn, &puSrc2->ar32[2], &puSrc2->ar32[3]);
     16936}
     16937
     16938
     16939IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_vhsubps_u256_fallback,(uint32_t uMxCsrIn, PX86YMMREG pResult, PCX86YMMREG puSrc1, PCX86YMMREG puSrc2))
     16940{
     16941    return   iemAImpl_subps_u128_worker(&pResult->ar32[0], uMxCsrIn, &puSrc1->ar32[0], &puSrc1->ar32[1])
     16942           | iemAImpl_subps_u128_worker(&pResult->ar32[1], uMxCsrIn, &puSrc1->ar32[2], &puSrc1->ar32[3])
     16943           | iemAImpl_subps_u128_worker(&pResult->ar32[2], uMxCsrIn, &puSrc2->ar32[0], &puSrc2->ar32[1])
     16944           | iemAImpl_subps_u128_worker(&pResult->ar32[3], uMxCsrIn, &puSrc2->ar32[2], &puSrc2->ar32[3])
     16945           | iemAImpl_subps_u128_worker(&pResult->ar32[4], uMxCsrIn, &puSrc1->ar32[4], &puSrc1->ar32[5])
     16946           | iemAImpl_subps_u128_worker(&pResult->ar32[5], uMxCsrIn, &puSrc1->ar32[6], &puSrc1->ar32[7])
     16947           | iemAImpl_subps_u128_worker(&pResult->ar32[6], uMxCsrIn, &puSrc2->ar32[4], &puSrc2->ar32[5])
     16948           | iemAImpl_subps_u128_worker(&pResult->ar32[7], uMxCsrIn, &puSrc2->ar32[6], &puSrc2->ar32[7]);
     16949}
     16950
     16951
    1693016952/**
    16931  * HSUBPD
     16953 * [V]HSUBPD
    1693216954 */
    1693316955#ifdef IEM_WITHOUT_ASSEMBLY
     
    1693816960}
    1693916961#endif
     16962
     16963
     16964IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_vhsubpd_u128_fallback,(uint32_t uMxCsrIn, PX86XMMREG pResult, PCX86XMMREG puSrc1, PCX86XMMREG puSrc2))
     16965{
     16966    return   iemAImpl_subpd_u128_worker(&pResult->ar64[0], uMxCsrIn, &puSrc1->ar64[0], &puSrc1->ar64[1])
     16967           | iemAImpl_subpd_u128_worker(&pResult->ar64[1], uMxCsrIn, &puSrc2->ar64[0], &puSrc2->ar64[1]);
     16968}
     16969
     16970
     16971IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_vhsubpd_u256_fallback,(uint32_t uMxCsrIn, PX86YMMREG pResult, PCX86YMMREG puSrc1, PCX86YMMREG puSrc2))
     16972{
     16973    return   iemAImpl_subpd_u128_worker(&pResult->ar64[0], uMxCsrIn, &puSrc1->ar64[0], &puSrc1->ar64[1])
     16974           | iemAImpl_subpd_u128_worker(&pResult->ar64[1], uMxCsrIn, &puSrc2->ar64[0], &puSrc2->ar64[1])
     16975           | iemAImpl_subpd_u128_worker(&pResult->ar64[2], uMxCsrIn, &puSrc1->ar64[2], &puSrc1->ar64[3])
     16976           | iemAImpl_subpd_u128_worker(&pResult->ar64[3], uMxCsrIn, &puSrc2->ar64[2], &puSrc2->ar64[3]);
     16977}
    1694016978
    1694116979
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstVexMap1.cpp.h

    r105231 r105232  
    43574357
    43584358/*  Opcode VEX.0F 0x7d - invalid */
     4359
     4360
    43594361/** Opcode VEX.66.0F 0x7d - vhsubpd Vpd, Hpd, Wpd */
    4360 FNIEMOP_STUB(iemOp_vhsubpd_Vpd_Hpd_Wpd);
     4362FNIEMOP_DEF(iemOp_vhsubpd_Vpd_Hpd_Wpd)
     4363{
     4364    IEMOP_MNEMONIC3(VEX_RVM, VHSUBPD, vhsubpd, Vps, Hps, Wps, DISOPTYPE_HARMLESS | DISOPTYPE_X86_AVX, 0);
     4365    IEMOPMEDIAF3_INIT_VARS(           vhsubpd);
     4366    return FNIEMOP_CALL_1(iemOpCommonAvxAvx2_Vx_Hx_Wx, IEM_SELECT_HOST_OR_FALLBACK(fAvx, &s_Host, &s_Fallback));
     4367}
     4368
     4369
    43614370/*  Opcode VEX.F3.0F 0x7d - invalid */
     4371
     4372
    43624373/** Opcode VEX.F2.0F 0x7d - vhsubps Vps, Hps, Wps */
    4363 FNIEMOP_STUB(iemOp_vhsubps_Vps_Hps_Wps);
     4374FNIEMOP_DEF(iemOp_vhsubps_Vps_Hps_Wps)
     4375{
     4376    IEMOP_MNEMONIC3(VEX_RVM, VHSUBPS, vhsubps, Vps, Hps, Wps, DISOPTYPE_HARMLESS | DISOPTYPE_X86_AVX, 0);
     4377    IEMOPMEDIAF3_INIT_VARS(           vhsubps);
     4378    return FNIEMOP_CALL_1(iemOpCommonAvxAvx2_Vx_Hx_Wx, IEM_SELECT_HOST_OR_FALLBACK(fAvx, &s_Host, &s_Fallback));
     4379}
    43644380
    43654381
  • trunk/src/VBox/VMM/include/IEMInternal.h

    r105231 r105232  
    45694569FNIEMAIMPLMEDIAF3U128 iemAImpl_vhaddps_u128, iemAImpl_vhaddps_u128_fallback;
    45704570FNIEMAIMPLMEDIAF3U128 iemAImpl_vhaddpd_u128, iemAImpl_vhaddpd_u128_fallback;
    4571 FNIEMAIMPLFPAVXF3U128 iemAImpl_vhsubps_u128, iemAImpl_vhsubps_u128_fallback;
    4572 FNIEMAIMPLFPAVXF3U128 iemAImpl_vhsubpd_u128, iemAImpl_vhsubpd_u128_fallback;
     4571FNIEMAIMPLMEDIAF3U128 iemAImpl_vhsubps_u128, iemAImpl_vhsubps_u128_fallback;
     4572FNIEMAIMPLMEDIAF3U128 iemAImpl_vhsubpd_u128, iemAImpl_vhsubpd_u128_fallback;
    45734573FNIEMAIMPLFPAVXF3U128 iemAImpl_vsqrtps_u128, iemAImpl_vsqrtps_u128_fallback;
    45744574FNIEMAIMPLFPAVXF3U128 iemAImpl_vsqrtpd_u128, iemAImpl_vsqrtpd_u128_fallback;
Note: See TracChangeset for help on using the changeset viewer.

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