VirtualBox

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


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

VMM/IEM: Implement vmax{ps,pd,ss,sd} instruction emulations, bugref:9898

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

Legend:

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

    r105228 r105229  
    1665516655
    1665616656/**
    16657  * MAXPS
    16658  */
    16659 #ifdef IEM_WITHOUT_ASSEMBLY
     16657 * [V]MAXPS
     16658 */
    1666016659static uint32_t iemAImpl_maxps_u128_worker(PRTFLOAT32U pr32Res, uint32_t fMxcsr, PCRTFLOAT32U pr32Val1, PCRTFLOAT32U pr32Val2)
    1666116660{
     
    1668616685
    1668716686
     16687#ifdef IEM_WITHOUT_ASSEMBLY
    1668816688IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_maxps_u128,(uint32_t uMxCsrIn, PX86XMMREG pResult, PCX86XMMREG puSrc1, PCX86XMMREG puSrc2))
    1668916689{
     
    1669616696
    1669716697
     16698IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_vmaxps_u128_fallback,(uint32_t uMxCsrIn, PX86XMMREG pResult, PCX86XMMREG puSrc1, PCX86XMMREG puSrc2))
     16699{
     16700    return   iemAImpl_maxps_u128_worker(&pResult->ar32[0], uMxCsrIn, &puSrc1->ar32[0], &puSrc2->ar32[0])
     16701           | iemAImpl_maxps_u128_worker(&pResult->ar32[1], uMxCsrIn, &puSrc1->ar32[1], &puSrc2->ar32[1])
     16702           | iemAImpl_maxps_u128_worker(&pResult->ar32[2], uMxCsrIn, &puSrc1->ar32[2], &puSrc2->ar32[2])
     16703           | iemAImpl_maxps_u128_worker(&pResult->ar32[3], uMxCsrIn, &puSrc1->ar32[3], &puSrc2->ar32[3]);
     16704}
     16705
     16706
     16707IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_vmaxps_u256_fallback,(uint32_t uMxCsrIn, PX86YMMREG pResult, PCX86YMMREG puSrc1, PCX86YMMREG puSrc2))
     16708{
     16709    return   iemAImpl_maxps_u128_worker(&pResult->ar32[0], uMxCsrIn, &puSrc1->ar32[0], &puSrc2->ar32[0])
     16710           | iemAImpl_maxps_u128_worker(&pResult->ar32[1], uMxCsrIn, &puSrc1->ar32[1], &puSrc2->ar32[1])
     16711           | iemAImpl_maxps_u128_worker(&pResult->ar32[2], uMxCsrIn, &puSrc1->ar32[2], &puSrc2->ar32[2])
     16712           | iemAImpl_maxps_u128_worker(&pResult->ar32[3], uMxCsrIn, &puSrc1->ar32[3], &puSrc2->ar32[3])
     16713           | iemAImpl_maxps_u128_worker(&pResult->ar32[4], uMxCsrIn, &puSrc1->ar32[4], &puSrc2->ar32[4])
     16714           | iemAImpl_maxps_u128_worker(&pResult->ar32[5], uMxCsrIn, &puSrc1->ar32[5], &puSrc2->ar32[5])
     16715           | iemAImpl_maxps_u128_worker(&pResult->ar32[6], uMxCsrIn, &puSrc1->ar32[6], &puSrc2->ar32[6])
     16716           | iemAImpl_maxps_u128_worker(&pResult->ar32[7], uMxCsrIn, &puSrc1->ar32[7], &puSrc2->ar32[7]);
     16717}
     16718
     16719
    1669816720/**
    16699  * MAXSS
     16721 * [V]MAXSS
    1670016722 */
    1670116723#ifdef IEM_WITHOUT_ASSEMBLY
     
    1671016732
    1671116733
     16734IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_vmaxss_u128_r32_fallback,(uint32_t uMxCsrIn, PX86XMMREG pResult, PCX86XMMREG puSrc1, PCRTFLOAT32U pr32Src2))
     16735{
     16736    pResult->ar32[1] = puSrc1->ar32[1];
     16737    pResult->ar32[2] = puSrc1->ar32[2];
     16738    pResult->ar32[3] = puSrc1->ar32[3];
     16739    return iemAImpl_maxps_u128_worker(&pResult->ar32[0], uMxCsrIn, &puSrc1->ar32[0], pr32Src2);
     16740}
     16741
     16742
    1671216743/**
    1671316744 * MAXPD
    1671416745 */
    16715 #ifdef IEM_WITHOUT_ASSEMBLY
    1671616746static uint32_t iemAImpl_maxpd_u128_worker(PRTFLOAT64U pr64Res, uint32_t fMxcsr, PCRTFLOAT64U pr64Val1, PCRTFLOAT64U pr64Val2)
    1671716747{
     
    1674216772
    1674316773
     16774#ifdef IEM_WITHOUT_ASSEMBLY
    1674416775IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_maxpd_u128,(uint32_t uMxCsrIn, PX86XMMREG pResult, PCX86XMMREG puSrc1, PCX86XMMREG puSrc2))
    1674516776{
     
    1675016781
    1675116782
     16783IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_vmaxpd_u128_fallback,(uint32_t uMxCsrIn, PX86XMMREG pResult, PCX86XMMREG puSrc1, PCX86XMMREG puSrc2))
     16784{
     16785    return   iemAImpl_maxpd_u128_worker(&pResult->ar64[0], uMxCsrIn, &puSrc1->ar64[0], &puSrc2->ar64[0])
     16786           | iemAImpl_maxpd_u128_worker(&pResult->ar64[1], uMxCsrIn, &puSrc1->ar64[1], &puSrc2->ar64[1]);
     16787}
     16788
     16789
     16790IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_vmaxpd_u256_fallback,(uint32_t uMxCsrIn, PX86YMMREG pResult, PCX86YMMREG puSrc1, PCX86YMMREG puSrc2))
     16791{
     16792    return   iemAImpl_maxpd_u128_worker(&pResult->ar64[0], uMxCsrIn, &puSrc1->ar64[0], &puSrc2->ar64[0])
     16793           | iemAImpl_maxpd_u128_worker(&pResult->ar64[1], uMxCsrIn, &puSrc1->ar64[1], &puSrc2->ar64[1])
     16794           | iemAImpl_maxpd_u128_worker(&pResult->ar64[2], uMxCsrIn, &puSrc1->ar64[2], &puSrc2->ar64[2])
     16795           | iemAImpl_maxpd_u128_worker(&pResult->ar64[3], uMxCsrIn, &puSrc1->ar64[3], &puSrc2->ar64[3]);
     16796}
     16797
     16798
    1675216799/**
    16753  * MAXSD
     16800 * [V]MAXSD
    1675416801 */
    1675516802#ifdef IEM_WITHOUT_ASSEMBLY
     
    1676016807}
    1676116808#endif
     16809
     16810
     16811IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_vmaxsd_u128_r64_fallback,(uint32_t uMxCsrIn, PX86XMMREG pResult, PCX86XMMREG puSrc1, PCRTFLOAT64U pr64Src2))
     16812{
     16813    pResult->ar64[1] = puSrc1->ar64[1];
     16814    return iemAImpl_maxpd_u128_worker(&pResult->ar64[0], uMxCsrIn, &puSrc1->ar64[0], pr64Src2);
     16815}
    1676216816
    1676316817
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstVexMap1.cpp.h

    r105228 r105229  
    31573157
    31583158/** Opcode VEX.0F 0x5f - vmaxps Vps, Hps, Wps */
    3159 FNIEMOP_STUB(iemOp_vmaxps_Vps_Hps_Wps);
     3159FNIEMOP_DEF(iemOp_vmaxps_Vps_Hps_Wps)
     3160{
     3161    IEMOP_MNEMONIC3(VEX_RVM, VMAXPS, vmaxps, Vps, Hps, Wps, DISOPTYPE_HARMLESS | DISOPTYPE_X86_AVX, 0);
     3162    IEMOPMEDIAF3_INIT_VARS(          vmaxps);
     3163    return FNIEMOP_CALL_1(iemOpCommonAvxAvx2_Vx_Hx_Wx, IEM_SELECT_HOST_OR_FALLBACK(fAvx, &s_Host, &s_Fallback));
     3164}
     3165
     3166
    31603167/** Opcode VEX.66.0F 0x5f - vmaxpd Vpd, Hpd, Wpd */
    3161 FNIEMOP_STUB(iemOp_vmaxpd_Vpd_Hpd_Wpd);
     3168FNIEMOP_DEF(iemOp_vmaxpd_Vpd_Hpd_Wpd)
     3169{
     3170    IEMOP_MNEMONIC3(VEX_RVM, VMAXPD, vmaxpd, Vpd, Hpd, Wpd, DISOPTYPE_HARMLESS | DISOPTYPE_X86_AVX, 0);
     3171    IEMOPMEDIAF3_INIT_VARS(          vmaxpd);
     3172    return FNIEMOP_CALL_1(iemOpCommonAvxAvx2_Vx_Hx_Wx, IEM_SELECT_HOST_OR_FALLBACK(fAvx, &s_Host, &s_Fallback));
     3173}
     3174
     3175
    31623176/** Opcode VEX.F3.0F 0x5f - vmaxss Vss, Hss, Wss */
    3163 FNIEMOP_STUB(iemOp_vmaxss_Vss_Hss_Wss);
     3177FNIEMOP_DEF(iemOp_vmaxss_Vss_Hss_Wss)
     3178{
     3179    IEMOP_MNEMONIC3(VEX_RVM, VMAXSS, vmaxss, Vps, Hps, Wss, DISOPTYPE_HARMLESS | DISOPTYPE_X86_AVX, 0);
     3180    return FNIEMOP_CALL_1(iemOpCommonAvx_Vx_Hx_R32,
     3181                          IEM_SELECT_HOST_OR_FALLBACK(fAvx, iemAImpl_vmaxss_u128_r32, iemAImpl_vmaxss_u128_r32_fallback));
     3182}
     3183
     3184
    31643185/** Opcode VEX.F2.0F 0x5f - vmaxsd Vsd, Hsd, Wsd */
    3165 FNIEMOP_STUB(iemOp_vmaxsd_Vsd_Hsd_Wsd);
     3186FNIEMOP_DEF(iemOp_vmaxsd_Vsd_Hsd_Wsd)
     3187{
     3188    IEMOP_MNEMONIC3(VEX_RVM, VMAXSD, vmaxsd, Vpd, Hpd, Wsd, DISOPTYPE_HARMLESS | DISOPTYPE_X86_AVX, 0);
     3189    return FNIEMOP_CALL_1(iemOpCommonAvx_Vx_Hx_R64,
     3190                          IEM_SELECT_HOST_OR_FALLBACK(fAvx, iemAImpl_vmaxsd_u128_r64, iemAImpl_vmaxsd_u128_r64_fallback));
     3191}
    31663192
    31673193
  • trunk/src/VBox/VMM/include/IEMInternal.h

    r105228 r105229  
    45654565FNIEMAIMPLMEDIAF3U128 iemAImpl_vdivps_u128, iemAImpl_vdivps_u128_fallback;
    45664566FNIEMAIMPLMEDIAF3U128 iemAImpl_vdivpd_u128, iemAImpl_vdivpd_u128_fallback;
    4567 FNIEMAIMPLFPAVXF3U128 iemAImpl_vmaxps_u128, iemAImpl_vmaxps_u128_fallback;
    4568 FNIEMAIMPLFPAVXF3U128 iemAImpl_vmaxpd_u128, iemAImpl_vmaxpd_u128_fallback;
     4567FNIEMAIMPLMEDIAF3U128 iemAImpl_vmaxps_u128, iemAImpl_vmaxps_u128_fallback;
     4568FNIEMAIMPLMEDIAF3U128 iemAImpl_vmaxpd_u128, iemAImpl_vmaxpd_u128_fallback;
    45694569FNIEMAIMPLMEDIAF3U128 iemAImpl_vhaddps_u128, iemAImpl_vhaddps_u128_fallback;
    45704570FNIEMAIMPLFPAVXF3U128 iemAImpl_vhaddpd_u128, iemAImpl_vhaddpd_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