VirtualBox

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


Ignore:
Timestamp:
Oct 13, 2022 12:45:24 PM (2 years ago)
Author:
vboxsync
Message:

IEM: Added VZEROUPPER/VZEROALL. Not well tested.

File:
1 edited

Legend:

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

    r96947 r97127  
    37623762
    37633763/** Opcode VEX.0F 0x77 - vzeroupperv vzeroallv */
    3764 FNIEMOP_STUB(iemOp_vzeroupperv__vzeroallv);
     3764FNIEMOP_DEF(iemOp_vzeroupperv__vzeroallv)
     3765{
     3766    Assert(pVCpu->iem.s.uVexLength <= 1);
     3767    if (pVCpu->iem.s.uVexLength == 0)
     3768    {
     3769        /*
     3770         * 128-bit: vzeroupper
     3771         */
     3772        IEMOP_MNEMONIC(vzeroupper, "vzeroupper");
     3773        IEM_MC_BEGIN(0, 0);
     3774
     3775        IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV();
     3776        IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT();
     3777        IEM_MC_ACTUALIZE_AVX_STATE_FOR_CHANGE();
     3778
     3779        IEM_MC_CLEAR_YREG_128_UP(0);
     3780        IEM_MC_CLEAR_YREG_128_UP(1);
     3781        IEM_MC_CLEAR_YREG_128_UP(2);
     3782        IEM_MC_CLEAR_YREG_128_UP(3);
     3783        IEM_MC_CLEAR_YREG_128_UP(4);
     3784        IEM_MC_CLEAR_YREG_128_UP(5);
     3785        IEM_MC_CLEAR_YREG_128_UP(6);
     3786        IEM_MC_CLEAR_YREG_128_UP(7);
     3787
     3788        if (pVCpu->iem.s.enmEffOpSize == IEMMODE_64BIT)
     3789        {
     3790            IEM_MC_CLEAR_YREG_128_UP( 8);
     3791            IEM_MC_CLEAR_YREG_128_UP( 9);
     3792            IEM_MC_CLEAR_YREG_128_UP(10);
     3793            IEM_MC_CLEAR_YREG_128_UP(11);
     3794            IEM_MC_CLEAR_YREG_128_UP(12);
     3795            IEM_MC_CLEAR_YREG_128_UP(13);
     3796            IEM_MC_CLEAR_YREG_128_UP(14);
     3797            IEM_MC_CLEAR_YREG_128_UP(15);
     3798        }
     3799
     3800        IEM_MC_ADVANCE_RIP();
     3801        IEM_MC_END();
     3802    }
     3803    else
     3804    {
     3805        /*
     3806         * 256-bit: vzeroall
     3807         */
     3808        IEMOP_MNEMONIC(vzeroall, "vzeroall");
     3809        IEM_MC_BEGIN(0, 1);
     3810        IEM_MC_LOCAL(uint32_t,  uZero);
     3811
     3812        IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV();
     3813        IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT();
     3814        IEM_MC_ACTUALIZE_AVX_STATE_FOR_CHANGE();
     3815
     3816        IEM_MC_ASSIGN(uZero, 0);
     3817        IEM_MC_STORE_YREG_U32_ZX_VLMAX(0, uZero);
     3818        IEM_MC_STORE_YREG_U32_ZX_VLMAX(1, uZero);
     3819        IEM_MC_STORE_YREG_U32_ZX_VLMAX(2, uZero);
     3820        IEM_MC_STORE_YREG_U32_ZX_VLMAX(3, uZero);
     3821        IEM_MC_STORE_YREG_U32_ZX_VLMAX(4, uZero);
     3822        IEM_MC_STORE_YREG_U32_ZX_VLMAX(5, uZero);
     3823        IEM_MC_STORE_YREG_U32_ZX_VLMAX(6, uZero);
     3824        IEM_MC_STORE_YREG_U32_ZX_VLMAX(7, uZero);
     3825
     3826        if (pVCpu->iem.s.enmEffOpSize == IEMMODE_64BIT)
     3827        {
     3828            IEM_MC_STORE_YREG_U32_ZX_VLMAX( 8, uZero);
     3829            IEM_MC_STORE_YREG_U32_ZX_VLMAX( 9, uZero);
     3830            IEM_MC_STORE_YREG_U32_ZX_VLMAX(10, uZero);
     3831            IEM_MC_STORE_YREG_U32_ZX_VLMAX(11, uZero);
     3832            IEM_MC_STORE_YREG_U32_ZX_VLMAX(12, uZero);
     3833            IEM_MC_STORE_YREG_U32_ZX_VLMAX(13, uZero);
     3834            IEM_MC_STORE_YREG_U32_ZX_VLMAX(14, uZero);
     3835            IEM_MC_STORE_YREG_U32_ZX_VLMAX(15, uZero);
     3836        }
     3837
     3838        IEM_MC_ADVANCE_RIP();
     3839        IEM_MC_END();
     3840    }
     3841    return VINF_SUCCESS;
     3842}
     3843
     3844
    37653845/*  Opcode VEX.66.0F 0x77 - invalid */
    37663846/*  Opcode VEX.F3.0F 0x77 - invalid */
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