VirtualBox

Changeset 102011 in vbox


Ignore:
Timestamp:
Nov 8, 2023 10:10:48 PM (15 months ago)
Author:
vboxsync
Message:

VMM/IEM: Added a flush mask for guest register shadows to the IEM_MC_CALL_CIMPL_X macros to better manage register optimizations when recompiling to native code, replacing the IEM_MC_HINT_FLUSH_GUEST_SHADOW_GREG/SREG macros added earlier today. Added a IEM_MC_HINT_FLUSH_GUEST_SHADOW macro for debugging purposes. bugref:10371

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

Legend:

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

    r101958 r102011  
    952952                IEM_MC_ARG_CONST(uint8_t,   iGRegArg,  /*=*/iGReg,                   3);
    953953                IEM_MC_ARG_CONST(IEMMODE,   enmEffOpSize,/*=*/pVCpu->iem.s.enmEffOpSize, 4);
    954                 IEM_MC_HINT_FLUSH_GUEST_SHADOW_GREG(iGReg);
    955                 IEM_MC_HINT_FLUSH_GUEST_SHADOW_SREG(iSegReg);
    956                 IEM_MC_CALL_CIMPL_5(               0, iemCImpl_load_SReg_Greg, uSel, offSeg, iSegRegArg, iGRegArg, enmEffOpSize);
     954                IEM_MC_CALL_CIMPL_5(               0,
     955                                      RT_BIT_64(kIemNativeGstReg_GprFirst      + iGReg)
     956                                    | RT_BIT_64(kIemNativeGstReg_SegSelFirst   + iSegReg)
     957                                    | RT_BIT_64(kIemNativeGstReg_SegBaseFirst  + iSegReg)
     958                                    | RT_BIT_64(kIemNativeGstReg_SegLimitFirst + iSegReg),
     959                                    iemCImpl_load_SReg_Greg, uSel, offSeg, iSegRegArg, iGRegArg, enmEffOpSize);
    957960                IEM_MC_END();
    958961            }
     
    970973                IEM_MC_ARG_CONST(uint8_t,   iGRegArg,  /*=*/iGReg,                   3);
    971974                IEM_MC_ARG_CONST(IEMMODE,   enmEffOpSize,/*=*/pVCpu->iem.s.enmEffOpSize, 4);
    972                 IEM_MC_HINT_FLUSH_GUEST_SHADOW_GREG(iGReg);
    973                 IEM_MC_HINT_FLUSH_GUEST_SHADOW_SREG(iSegReg);
    974                 IEM_MC_CALL_CIMPL_5(IEM_CIMPL_F_MODE, iemCImpl_load_SReg_Greg, uSel, offSeg, iSegRegArg, iGRegArg, enmEffOpSize);
     975                IEM_MC_CALL_CIMPL_5(IEM_CIMPL_F_MODE,
     976                                      RT_BIT_64(kIemNativeGstReg_GprFirst      + iGReg)
     977                                    | RT_BIT_64(kIemNativeGstReg_SegSelFirst   + iSegReg)
     978                                    | RT_BIT_64(kIemNativeGstReg_SegBaseFirst  + iSegReg)
     979                                    | RT_BIT_64(kIemNativeGstReg_SegLimitFirst + iSegReg),
     980                                    iemCImpl_load_SReg_Greg, uSel, offSeg, iSegRegArg, iGRegArg, enmEffOpSize);
    975981                IEM_MC_END();
    976982            }
     
    990996                IEM_MC_ARG_CONST(uint8_t,   iGRegArg,  /*=*/iGReg,                   3);
    991997                IEM_MC_ARG_CONST(IEMMODE,   enmEffOpSize,/*=*/pVCpu->iem.s.enmEffOpSize, 4);
    992                 IEM_MC_HINT_FLUSH_GUEST_SHADOW_GREG(iGReg);
    993                 IEM_MC_HINT_FLUSH_GUEST_SHADOW_SREG(iSegReg);
    994                 IEM_MC_CALL_CIMPL_5(               0, iemCImpl_load_SReg_Greg, uSel, offSeg, iSegRegArg, iGRegArg, enmEffOpSize);
     998                IEM_MC_CALL_CIMPL_5(               0,
     999                                      RT_BIT_64(kIemNativeGstReg_GprFirst      + iGReg)
     1000                                    | RT_BIT_64(kIemNativeGstReg_SegSelFirst   + iSegReg)
     1001                                    | RT_BIT_64(kIemNativeGstReg_SegBaseFirst  + iSegReg)
     1002                                    | RT_BIT_64(kIemNativeGstReg_SegLimitFirst + iSegReg),
     1003                                    iemCImpl_load_SReg_Greg, uSel, offSeg, iSegRegArg, iGRegArg, enmEffOpSize);
    9951004                IEM_MC_END();
    9961005            }
     
    10081017                IEM_MC_ARG_CONST(uint8_t,   iGRegArg,  /*=*/iGReg,                   3);
    10091018                IEM_MC_ARG_CONST(IEMMODE,   enmEffOpSize,/*=*/pVCpu->iem.s.enmEffOpSize, 4);
    1010                 IEM_MC_HINT_FLUSH_GUEST_SHADOW_GREG(iGReg);
    1011                 IEM_MC_HINT_FLUSH_GUEST_SHADOW_SREG(iSegReg);
    1012                 IEM_MC_CALL_CIMPL_5(IEM_CIMPL_F_MODE, iemCImpl_load_SReg_Greg, uSel, offSeg, iSegRegArg, iGRegArg, enmEffOpSize);
     1019                IEM_MC_CALL_CIMPL_5(IEM_CIMPL_F_MODE,
     1020                                      RT_BIT_64(kIemNativeGstReg_GprFirst      + iGReg)
     1021                                    | RT_BIT_64(kIemNativeGstReg_SegSelFirst   + iSegReg)
     1022                                    | RT_BIT_64(kIemNativeGstReg_SegBaseFirst  + iSegReg)
     1023                                    | RT_BIT_64(kIemNativeGstReg_SegLimitFirst + iSegReg),
     1024                                    iemCImpl_load_SReg_Greg, uSel, offSeg, iSegRegArg, iGRegArg, enmEffOpSize);
    10131025                IEM_MC_END();
    10141026            }
     
    10291041            IEM_MC_ARG_CONST(uint8_t,   iGRegArg,  /*=*/iGReg,                   3);
    10301042            IEM_MC_ARG_CONST(IEMMODE,   enmEffOpSize,/*=*/pVCpu->iem.s.enmEffOpSize, 4);
    1031             IEM_MC_HINT_FLUSH_GUEST_SHADOW_GREG(iGReg);
    1032             IEM_MC_HINT_FLUSH_GUEST_SHADOW_SREG(iSegReg);
    1033             IEM_MC_CALL_CIMPL_5(0, iemCImpl_load_SReg_Greg, uSel, offSeg, iSegRegArg, iGRegArg, enmEffOpSize);
     1043            IEM_MC_CALL_CIMPL_5(0,
     1044                                  RT_BIT_64(kIemNativeGstReg_GprFirst      + iGReg)
     1045                                | RT_BIT_64(kIemNativeGstReg_SegSelFirst   + iSegReg)
     1046                                | RT_BIT_64(kIemNativeGstReg_SegBaseFirst  + iSegReg)
     1047                                | RT_BIT_64(kIemNativeGstReg_SegLimitFirst + iSegReg),
     1048                                iemCImpl_load_SReg_Greg, uSel, offSeg, iSegRegArg, iGRegArg, enmEffOpSize);
    10341049            IEM_MC_END();
    10351050
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstOneByte.cpp.h

    r101984 r102011  
    26532653                IEM_MC_FETCH_MEM_U16_DISP(u16UpperBounds, pVCpu->iem.s.iEffSeg, GCPtrEffSrc, 2);
    26542654
    2655                 IEM_MC_CALL_CIMPL_3(0, iemCImpl_bound_16, u16Index, u16LowerBounds, u16UpperBounds); /* returns */
     2655                IEM_MC_CALL_CIMPL_3(0, 0, iemCImpl_bound_16, u16Index, u16LowerBounds, u16UpperBounds); /* returns */
    26562656                IEM_MC_END();
    26572657            }
     
    26712671                IEM_MC_FETCH_MEM_U32_DISP(u32UpperBounds, pVCpu->iem.s.iEffSeg, GCPtrEffSrc, 4);
    26722672
    2673                 IEM_MC_CALL_CIMPL_3(0, iemCImpl_bound_32, u32Index, u32LowerBounds, u32UpperBounds); /* returns */
     2673                IEM_MC_CALL_CIMPL_3(0, 0, iemCImpl_bound_32, u32Index, u32LowerBounds, u32UpperBounds); /* returns */
    26742674                IEM_MC_END();
    26752675            }
     
    58985898            IEM_MC_ARG(uint16_t,      u16Value,          1); \
    58995899            IEM_MC_FETCH_GREG_U16(u16Value, IEM_GET_MODRM_RM(pVCpu, bRm)); \
    5900             IEM_MC_HINT_FLUSH_GUEST_SHADOW_SREG(iSegReg); \
    5901             IEM_MC_CALL_CIMPL_2(a_fCImplFlags, iemCImpl_load_SReg, iSRegArg, u16Value); \
     5900            IEM_MC_CALL_CIMPL_2(a_fCImplFlags, \
     5901                                  RT_BIT_64(kIemNativeGstReg_SegSelFirst   + iSegReg) \
     5902                                | RT_BIT_64(kIemNativeGstReg_SegBaseFirst  + iSegReg) \
     5903                                | RT_BIT_64(kIemNativeGstReg_SegLimitFirst + iSegReg), \
     5904                                iemCImpl_load_SReg, iSRegArg, u16Value); \
    59025905            IEM_MC_END()
    59035906
     
    59375940            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \
    59385941            IEM_MC_FETCH_MEM_U16(u16Value, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \
    5939             IEM_MC_HINT_FLUSH_GUEST_SHADOW_SREG(iSegReg); \
    5940             IEM_MC_CALL_CIMPL_2(a_fCImplFlags, iemCImpl_load_SReg, iSRegArg, u16Value); \
     5942            IEM_MC_CALL_CIMPL_2(a_fCImplFlags, \
     5943                                  RT_BIT_64(kIemNativeGstReg_SegSelFirst   + iSegReg) \
     5944                                | RT_BIT_64(kIemNativeGstReg_SegBaseFirst  + iSegReg) \
     5945                                | RT_BIT_64(kIemNativeGstReg_SegLimitFirst + iSegReg), \
     5946                                iemCImpl_load_SReg, iSRegArg, u16Value); \
    59415947            IEM_MC_END()
    59425948
     
    60066012            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    60076013            IEM_MC_ARG_CONST(uint8_t,   iEffSeg,    pVCpu->iem.s.iEffSeg,   0);
    6008             IEM_MC_HINT_FLUSH_GUEST_SHADOW_GREG(X86_GREG_xSP);
    6009             IEM_MC_CALL_CIMPL_2(0, iemCImpl_pop_mem16, iEffSeg, GCPtrEffDst);
     6014            IEM_MC_CALL_CIMPL_2(0, RT_BIT_64(kIemNativeGstReg_GprFirst + X86_GREG_xSP), iemCImpl_pop_mem16, iEffSeg, GCPtrEffDst);
    60106015            IEM_MC_END();
    60116016            break;
     
    60176022            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    60186023            IEM_MC_ARG_CONST(uint8_t,   iEffSeg,    pVCpu->iem.s.iEffSeg,   0);
    6019             IEM_MC_HINT_FLUSH_GUEST_SHADOW_GREG(X86_GREG_xSP);
    6020             IEM_MC_CALL_CIMPL_2(0, iemCImpl_pop_mem32, iEffSeg, GCPtrEffDst);
     6024            IEM_MC_CALL_CIMPL_2(0, RT_BIT_64(kIemNativeGstReg_GprFirst + X86_GREG_xSP), iemCImpl_pop_mem32, iEffSeg, GCPtrEffDst);
    60216025            IEM_MC_END();
    60226026            break;
     
    60286032            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    60296033            IEM_MC_ARG_CONST(uint8_t,   iEffSeg,    pVCpu->iem.s.iEffSeg,   0);
    6030             IEM_MC_HINT_FLUSH_GUEST_SHADOW_GREG(X86_GREG_xSP);
    6031             IEM_MC_CALL_CIMPL_2(0, iemCImpl_pop_mem64, iEffSeg, GCPtrEffDst);
     6034            IEM_MC_CALL_CIMPL_2(0, RT_BIT_64(kIemNativeGstReg_GprFirst + X86_GREG_xSP), iemCImpl_pop_mem64, iEffSeg, GCPtrEffDst);
    60326035            IEM_MC_END();
    60336036            break;
     
    97239726    IEM_MC_ARG_CONST(IEMMODE,           enmEffOpSize, /*=*/ pVCpu->iem.s.enmEffOpSize,  0);
    97249727    IEM_MC_ARG_CONST(uint8_t,           iEffSeg,      /*=*/ pVCpu->iem.s.iEffSeg,       1);
    9725     IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_FPU, iemCImpl_fldenv, enmEffOpSize, iEffSeg, GCPtrEffSrc);
     9728    IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_FPU, 0, iemCImpl_fldenv, enmEffOpSize, iEffSeg, GCPtrEffSrc);
    97269729    IEM_MC_END();
    97279730}
     
    97439746    IEM_MC_FETCH_MEM_U16(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);
    97449747
    9745     IEM_MC_CALL_CIMPL_1(IEM_CIMPL_F_FPU, iemCImpl_fldcw, u16Fsw);
     9748    IEM_MC_CALL_CIMPL_1(IEM_CIMPL_F_FPU, 0, iemCImpl_fldcw, u16Fsw);
    97469749    IEM_MC_END();
    97479750}
     
    97629765    IEM_MC_ARG_CONST(IEMMODE,           enmEffOpSize, /*=*/ pVCpu->iem.s.enmEffOpSize,  0);
    97639766    IEM_MC_ARG_CONST(uint8_t,           iEffSeg,      /*=*/ pVCpu->iem.s.iEffSeg,       1);
    9764     IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_FPU, iemCImpl_fnstenv, enmEffOpSize, iEffSeg, GCPtrEffDst);
     9767    IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_FPU, 0, iemCImpl_fnstenv, enmEffOpSize, iEffSeg, GCPtrEffDst);
    97659768    IEM_MC_END();
    97669769}
     
    98509853        IEM_MC_STORE_FPU_RESULT(FpuRes, 0, pVCpu->iem.s.uFpuOpcode);
    98519854    } IEM_MC_ELSE() {
    9852         IEM_MC_CALL_CIMPL_2(IEM_CIMPL_F_FPU, iemCImpl_fxch_underflow, iStReg, uFpuOpcode);
     9855        IEM_MC_CALL_CIMPL_2(IEM_CIMPL_F_FPU, 0, iemCImpl_fxch_underflow, iStReg, uFpuOpcode);
    98539856    } IEM_MC_ENDIF();
    98549857
     
    1160411607    IEM_MC_ARG_CONST(IEMMODE,           enmEffOpSize, /*=*/ pVCpu->iem.s.enmEffOpSize,  0);
    1160511608    IEM_MC_ARG_CONST(uint8_t,           iEffSeg,      /*=*/ pVCpu->iem.s.iEffSeg,       1);
    11606     IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_FPU, iemCImpl_frstor, enmEffOpSize, iEffSeg, GCPtrEffSrc);
     11609    IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_FPU, 0, iemCImpl_frstor, enmEffOpSize, iEffSeg, GCPtrEffSrc);
    1160711610    IEM_MC_END();
    1160811611}
     
    1162311626    IEM_MC_ARG_CONST(IEMMODE,           enmEffOpSize, /*=*/ pVCpu->iem.s.enmEffOpSize,  0);
    1162411627    IEM_MC_ARG_CONST(uint8_t,           iEffSeg,      /*=*/ pVCpu->iem.s.iEffSeg,       1);
    11625     IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_FPU, iemCImpl_fnsave, enmEffOpSize, iEffSeg, GCPtrEffDst);
     11628    IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_FPU, 0, iemCImpl_fnsave, enmEffOpSize, iEffSeg, GCPtrEffDst);
    1162611629    IEM_MC_END();
    1162711630}
     
    1383013833                IEM_MC_ARG(uint16_t, u16Target, 0);
    1383113834                IEM_MC_FETCH_GREG_U16(u16Target, IEM_GET_MODRM_RM(pVCpu, bRm));
    13832                 IEM_MC_CALL_CIMPL_1(IEM_CIMPL_F_BRANCH_INDIRECT | IEM_CIMPL_F_BRANCH_STACK, iemCImpl_call_16, u16Target);
     13835                IEM_MC_CALL_CIMPL_1(IEM_CIMPL_F_BRANCH_INDIRECT | IEM_CIMPL_F_BRANCH_STACK, 0, iemCImpl_call_16, u16Target);
    1383313836                IEM_MC_END();
    1383413837                break;
     
    1383913842                IEM_MC_ARG(uint32_t, u32Target, 0);
    1384013843                IEM_MC_FETCH_GREG_U32(u32Target, IEM_GET_MODRM_RM(pVCpu, bRm));
    13841                 IEM_MC_CALL_CIMPL_1(IEM_CIMPL_F_BRANCH_INDIRECT | IEM_CIMPL_F_BRANCH_STACK, iemCImpl_call_32, u32Target);
     13844                IEM_MC_CALL_CIMPL_1(IEM_CIMPL_F_BRANCH_INDIRECT | IEM_CIMPL_F_BRANCH_STACK, 0, iemCImpl_call_32, u32Target);
    1384213845                IEM_MC_END();
    1384313846                break;
     
    1384813851                IEM_MC_ARG(uint64_t, u64Target, 0);
    1384913852                IEM_MC_FETCH_GREG_U64(u64Target, IEM_GET_MODRM_RM(pVCpu, bRm));
    13850                 IEM_MC_CALL_CIMPL_1(IEM_CIMPL_F_BRANCH_INDIRECT | IEM_CIMPL_F_BRANCH_STACK, iemCImpl_call_64, u64Target);
     13853                IEM_MC_CALL_CIMPL_1(IEM_CIMPL_F_BRANCH_INDIRECT | IEM_CIMPL_F_BRANCH_STACK, 0, iemCImpl_call_64, u64Target);
    1385113854                IEM_MC_END();
    1385213855                break;
     
    1386713870                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1386813871                IEM_MC_FETCH_MEM_U16(u16Target, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);
    13869                 IEM_MC_CALL_CIMPL_1(IEM_CIMPL_F_BRANCH_INDIRECT | IEM_CIMPL_F_BRANCH_STACK, iemCImpl_call_16, u16Target);
     13872                IEM_MC_CALL_CIMPL_1(IEM_CIMPL_F_BRANCH_INDIRECT | IEM_CIMPL_F_BRANCH_STACK, 0, iemCImpl_call_16, u16Target);
    1387013873                IEM_MC_END();
    1387113874                break;
     
    1387813881                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1387913882                IEM_MC_FETCH_MEM_U32(u32Target, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);
    13880                 IEM_MC_CALL_CIMPL_1(IEM_CIMPL_F_BRANCH_INDIRECT | IEM_CIMPL_F_BRANCH_STACK, iemCImpl_call_32, u32Target);
     13883                IEM_MC_CALL_CIMPL_1(IEM_CIMPL_F_BRANCH_INDIRECT | IEM_CIMPL_F_BRANCH_STACK, 0, iemCImpl_call_32, u32Target);
    1388113884                IEM_MC_END();
    1388213885                break;
     
    1388913892                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1389013893                IEM_MC_FETCH_MEM_U64(u64Target, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);
    13891                 IEM_MC_CALL_CIMPL_1(IEM_CIMPL_F_BRANCH_INDIRECT | IEM_CIMPL_F_BRANCH_STACK, iemCImpl_call_64, u64Target);
     13894                IEM_MC_CALL_CIMPL_1(IEM_CIMPL_F_BRANCH_INDIRECT | IEM_CIMPL_F_BRANCH_STACK, 0, iemCImpl_call_64, u64Target);
    1389213895                IEM_MC_END();
    1389313896                break;
     
    1392513928            IEM_MC_FETCH_MEM_U16(offSeg, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); \
    1392613929            IEM_MC_FETCH_MEM_U16_DISP(u16Sel, pVCpu->iem.s.iEffSeg, GCPtrEffSrc, 2); \
    13927             IEM_MC_HINT_FLUSH_GUEST_SHADOW_GREG(X86_GREG_xSP); \
    1392813930            IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_BRANCH_INDIRECT | IEM_CIMPL_F_BRANCH_FAR | (a_fCImplExtra) \
    13929                                 | IEM_CIMPL_F_MODE | IEM_CIMPL_F_RFLAGS | IEM_CIMPL_F_VMEXIT, \
     13931                                | IEM_CIMPL_F_MODE | IEM_CIMPL_F_RFLAGS | IEM_CIMPL_F_VMEXIT, 0, \
    1393013932                                a_fnCImpl, u16Sel, offSeg, enmEffOpSize); \
    1393113933            IEM_MC_END(); \
     
    1394213944            IEM_MC_FETCH_MEM_U32(offSeg, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); \
    1394313945            IEM_MC_FETCH_MEM_U16_DISP(u16Sel, pVCpu->iem.s.iEffSeg, GCPtrEffSrc, 4); \
    13944             IEM_MC_HINT_FLUSH_GUEST_SHADOW_GREG(X86_GREG_xSP); \
    1394513946            IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_BRANCH_INDIRECT | IEM_CIMPL_F_BRANCH_FAR | (a_fCImplExtra) \
    13946                                 | IEM_CIMPL_F_MODE | IEM_CIMPL_F_RFLAGS | IEM_CIMPL_F_VMEXIT, \
     13947                                | IEM_CIMPL_F_MODE | IEM_CIMPL_F_RFLAGS | IEM_CIMPL_F_VMEXIT, 0, \
    1394713948                                a_fnCImpl, u16Sel, offSeg, enmEffOpSize); \
    1394813949            IEM_MC_END(); \
     
    1396013961            IEM_MC_FETCH_MEM_U64(offSeg, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); \
    1396113962            IEM_MC_FETCH_MEM_U16_DISP(u16Sel, pVCpu->iem.s.iEffSeg, GCPtrEffSrc, 8); \
    13962             IEM_MC_HINT_FLUSH_GUEST_SHADOW_GREG(X86_GREG_xSP); \
    1396313963            IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_BRANCH_INDIRECT | IEM_CIMPL_F_BRANCH_FAR | (a_fCImplExtra) \
    13964                                 | IEM_CIMPL_F_MODE /* no gates */, \
     13964                                | IEM_CIMPL_F_MODE /* no gates */, 0, \
    1396513965                                a_fnCImpl, u16Sel, offSeg, enmEffOpSize); \
    1396613966            IEM_MC_END(); \
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstPython.py

    r101984 r102011  
    22322232        """ IEM_MC_CALL_CIMPL_0|1|2|3|4|5 """
    22332233        cArgs = int(sName[-1]);
    2234         oSelf.checkStmtParamCount(sName, asParams, 2 + cArgs);
     2234        oSelf.checkStmtParamCount(sName, asParams, 3 + cArgs);
    22352235        oSelf.parseCImplFlags(sName, asParams[0]);
    2236         return McStmtCall(sName, asParams, 1);
     2236        return McStmtCall(sName, asParams, 2);
    22372237
    22382238    @staticmethod
     
    29032903    'IEM_MC_FPU_STACK_UNDERFLOW_THEN_POP_POP':                   (McBlock.parseMcGeneric,           True,  False, ),
    29042904    'IEM_MC_FPU_TO_MMX_MODE':                                    (McBlock.parseMcGeneric,           True,  False, ),
    2905     'IEM_MC_HINT_FLUSH_GUEST_SHADOW_GREG':                       (McBlock.parseMcGeneric,           True,  True,  ),
    2906     'IEM_MC_HINT_FLUSH_GUEST_SHADOW_SREG':                       (McBlock.parseMcGeneric,           True,  True,  ),
     2905    'IEM_MC_HINT_FLUSH_GUEST_SHADOW':                            (McBlock.parseMcGeneric,           True,  True,  ),
    29072906    'IEM_MC_IF_CX_IS_NZ':                                        (McBlock.parseMcGenericCond,       True,  True,  ),
    29082907    'IEM_MC_IF_CX_IS_NZ_AND_EFL_BIT_NOT_SET':                    (McBlock.parseMcGenericCond,       True,  True,  ),
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstThree0f38.cpp.h

    r101951 r102011  
    13261326            IEM_MC_ARG(uint64_t,        uInveptType,                            2);
    13271327            IEM_MC_FETCH_GREG_U64(uInveptType, IEM_GET_MODRM_REG(pVCpu, bRm));
    1328             IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_VMEXIT | IEM_CIMPL_F_STATUS_FLAGS,
     1328            IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_VMEXIT | IEM_CIMPL_F_STATUS_FLAGS, 0,
    13291329                                iemCImpl_invept, iEffSeg, GCPtrInveptDesc, uInveptType);
    13301330            IEM_MC_END();
     
    13411341            IEM_MC_ARG(uint32_t,        uInveptType,                            2);
    13421342            IEM_MC_FETCH_GREG_U32(uInveptType, IEM_GET_MODRM_REG(pVCpu, bRm));
    1343             IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_VMEXIT | IEM_CIMPL_F_STATUS_FLAGS,
     1343            IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_VMEXIT | IEM_CIMPL_F_STATUS_FLAGS, 0,
    13441344                                iemCImpl_invept, iEffSeg, GCPtrInveptDesc, uInveptType);
    13451345            IEM_MC_END();
     
    13751375            IEM_MC_ARG(uint64_t,        uInvvpidType,                           2);
    13761376            IEM_MC_FETCH_GREG_U64(uInvvpidType, IEM_GET_MODRM_REG(pVCpu, bRm));
    1377             IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_VMEXIT | IEM_CIMPL_F_STATUS_FLAGS,
     1377            IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_VMEXIT | IEM_CIMPL_F_STATUS_FLAGS, 0,
    13781378                                iemCImpl_invvpid, iEffSeg, GCPtrInvvpidDesc, uInvvpidType);
    13791379            IEM_MC_END();
     
    13901390            IEM_MC_ARG(uint32_t,        uInvvpidType,                           2);
    13911391            IEM_MC_FETCH_GREG_U32(uInvvpidType, IEM_GET_MODRM_REG(pVCpu, bRm));
    1392             IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_VMEXIT | IEM_CIMPL_F_STATUS_FLAGS,
     1392            IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_VMEXIT | IEM_CIMPL_F_STATUS_FLAGS, 0,
    13931393                                iemCImpl_invvpid, iEffSeg, GCPtrInvvpidDesc, uInvvpidType);
    13941394            IEM_MC_END();
     
    14201420            IEM_MC_ARG(uint64_t,        uInvpcidType,                           2);
    14211421            IEM_MC_FETCH_GREG_U64(uInvpcidType, IEM_GET_MODRM_REG(pVCpu, bRm));
    1422             IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_VMEXIT, iemCImpl_invpcid, iEffSeg, GCPtrInvpcidDesc, uInvpcidType);
     1422            IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_VMEXIT, 0, iemCImpl_invpcid, iEffSeg, GCPtrInvpcidDesc, uInvpcidType);
    14231423            IEM_MC_END();
    14241424        }
     
    14321432            IEM_MC_ARG(uint32_t,        uInvpcidType,                           2);
    14331433            IEM_MC_FETCH_GREG_U32(uInvpcidType, IEM_GET_MODRM_REG(pVCpu, bRm));
    1434             IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_VMEXIT, iemCImpl_invpcid, iEffSeg, GCPtrInvpcidDesc, uInvpcidType);
     1434            IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_VMEXIT, 0, iemCImpl_invpcid, iEffSeg, GCPtrInvpcidDesc, uInvpcidType);
    14351435            IEM_MC_END();
    14361436        }
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstTwoByte0f.cpp.h

    r101984 r102011  
    12101210    IEMOP_HLP_DECODED_NL_1(OP_SLDT, IEMOPFORM_M_MEM, OP_PARM_Ew, DISOPTYPE_DANGEROUS | DISOPTYPE_PRIVILEGED_NOTRAP);
    12111211    IEM_MC_ARG_CONST(uint8_t,   iEffSeg, /*=*/ pVCpu->iem.s.iEffSeg,    0);
    1212     IEM_MC_CALL_CIMPL_2(IEM_CIMPL_F_VMEXIT, iemCImpl_sldt_mem, iEffSeg, GCPtrEffDst);
     1212    IEM_MC_CALL_CIMPL_2(IEM_CIMPL_F_VMEXIT, 0, iemCImpl_sldt_mem, iEffSeg, GCPtrEffDst);
    12131213    IEM_MC_END();
    12141214}
     
    12361236    IEMOP_HLP_DECODED_NL_1(OP_STR, IEMOPFORM_M_MEM, OP_PARM_Ew, DISOPTYPE_DANGEROUS | DISOPTYPE_PRIVILEGED_NOTRAP);
    12371237    IEM_MC_ARG_CONST(uint8_t,   iEffSeg, /*=*/ pVCpu->iem.s.iEffSeg,    0);
    1238     IEM_MC_CALL_CIMPL_2(IEM_CIMPL_F_VMEXIT, iemCImpl_str_mem, iEffSeg, GCPtrEffDst);
     1238    IEM_MC_CALL_CIMPL_2(IEM_CIMPL_F_VMEXIT, 0, iemCImpl_str_mem, iEffSeg, GCPtrEffDst);
    12391239    IEM_MC_END();
    12401240}
     
    12541254        IEM_MC_ARG(uint16_t, u16Sel, 0);
    12551255        IEM_MC_FETCH_GREG_U16(u16Sel, IEM_GET_MODRM_RM(pVCpu, bRm));
    1256         IEM_MC_CALL_CIMPL_1(IEM_CIMPL_F_VMEXIT, iemCImpl_lldt, u16Sel);
     1256        IEM_MC_CALL_CIMPL_1(IEM_CIMPL_F_VMEXIT, 0, iemCImpl_lldt, u16Sel);
    12571257        IEM_MC_END();
    12581258    }
     
    12661266        IEM_MC_RAISE_GP0_IF_CPL_NOT_ZERO(); /** @todo test order */
    12671267        IEM_MC_FETCH_MEM_U16(u16Sel, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);
    1268         IEM_MC_CALL_CIMPL_1(IEM_CIMPL_F_VMEXIT, iemCImpl_lldt, u16Sel);
     1268        IEM_MC_CALL_CIMPL_1(IEM_CIMPL_F_VMEXIT, 0, iemCImpl_lldt, u16Sel);
    12691269        IEM_MC_END();
    12701270    }
     
    12851285        IEM_MC_ARG(uint16_t, u16Sel, 0);
    12861286        IEM_MC_FETCH_GREG_U16(u16Sel, IEM_GET_MODRM_RM(pVCpu, bRm));
    1287         IEM_MC_CALL_CIMPL_1(IEM_CIMPL_F_VMEXIT, iemCImpl_ltr, u16Sel);
     1287        IEM_MC_CALL_CIMPL_1(IEM_CIMPL_F_VMEXIT, 0, iemCImpl_ltr, u16Sel);
    12881288        IEM_MC_END();
    12891289    }
     
    12971297        IEM_MC_RAISE_GP0_IF_CPL_NOT_ZERO(); /** @todo test order */
    12981298        IEM_MC_FETCH_MEM_U16(u16Sel, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);
    1299         IEM_MC_CALL_CIMPL_1(IEM_CIMPL_F_VMEXIT, iemCImpl_ltr, u16Sel);
     1299        IEM_MC_CALL_CIMPL_1(IEM_CIMPL_F_VMEXIT, 0, iemCImpl_ltr, u16Sel);
    13001300        IEM_MC_END();
    13011301    }
     
    13161316        IEM_MC_ARG_CONST(bool,  fWriteArg, fWrite, 1);
    13171317        IEM_MC_FETCH_GREG_U16(u16Sel, IEM_GET_MODRM_RM(pVCpu, bRm));
    1318         IEM_MC_CALL_CIMPL_2(IEM_CIMPL_F_STATUS_FLAGS, iemCImpl_VerX, u16Sel, fWriteArg);
     1318        IEM_MC_CALL_CIMPL_2(IEM_CIMPL_F_STATUS_FLAGS, 0, iemCImpl_VerX, u16Sel, fWriteArg);
    13191319        IEM_MC_END();
    13201320    }
     
    13281328        IEMOP_HLP_DECODED_NL_1(fWrite ? OP_VERW : OP_VERR, IEMOPFORM_M_MEM, OP_PARM_Ew, DISOPTYPE_DANGEROUS | DISOPTYPE_PRIVILEGED_NOTRAP);
    13291329        IEM_MC_FETCH_MEM_U16(u16Sel, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);
    1330         IEM_MC_CALL_CIMPL_2(IEM_CIMPL_F_STATUS_FLAGS, iemCImpl_VerX, u16Sel, fWriteArg);
     1330        IEM_MC_CALL_CIMPL_2(IEM_CIMPL_F_STATUS_FLAGS, 0, iemCImpl_VerX, u16Sel, fWriteArg);
    13311331        IEM_MC_END();
    13321332    }
     
    13841384    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    13851385    IEM_MC_ARG_CONST(uint8_t,   iEffSeg, /*=*/ pVCpu->iem.s.iEffSeg,    0);
    1386     IEM_MC_CALL_CIMPL_2(IEM_CIMPL_F_VMEXIT, iemCImpl_sgdt, iEffSeg, GCPtrEffSrc);
     1386    IEM_MC_CALL_CIMPL_2(IEM_CIMPL_F_VMEXIT, 0, iemCImpl_sgdt, iEffSeg, GCPtrEffSrc);
    13871387    IEM_MC_END();
    13881388}
     
    14751475    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    14761476    IEM_MC_ARG_CONST(uint8_t,   iEffSeg, /*=*/ pVCpu->iem.s.iEffSeg,    0);
    1477     IEM_MC_CALL_CIMPL_2(IEM_CIMPL_F_VMEXIT, iemCImpl_sidt, iEffSeg, GCPtrEffSrc);
     1477    IEM_MC_CALL_CIMPL_2(IEM_CIMPL_F_VMEXIT, 0, iemCImpl_sidt, iEffSeg, GCPtrEffSrc);
    14781478    IEM_MC_END();
    14791479}
     
    15091509    IEM_MC_ARG_CONST(uint8_t,   iEffSeg,       /*=*/ pVCpu->iem.s.iEffSeg,      0);
    15101510    IEM_MC_ARG_CONST(IEMMODE,   enmEffOpSizeArg,/*=*/pVCpu->iem.s.enmEffOpSize, 2);
    1511     IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_VMEXIT, iemCImpl_lgdt, iEffSeg, GCPtrEffSrc, enmEffOpSizeArg);
     1511    IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_VMEXIT, 0, iemCImpl_lgdt, iEffSeg, GCPtrEffSrc, enmEffOpSizeArg);
    15121512    IEM_MC_END();
    15131513}
     
    15641564    IEM_MC_ARG_CONST(uint8_t,   iEffSeg,         /*=*/ pVCpu->iem.s.iEffSeg,    0);
    15651565    IEM_MC_ARG_CONST(IEMMODE,   enmEffOpSizeArg, /*=*/ enmEffOpSize,            2);
    1566     IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_VMEXIT, iemCImpl_lidt, iEffSeg, GCPtrEffSrc, enmEffOpSizeArg);
     1566    IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_VMEXIT, 0, iemCImpl_lidt, iEffSeg, GCPtrEffSrc, enmEffOpSizeArg);
    15671567    IEM_MC_END();
    15681568}
     
    16951695    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    16961696    IEM_MC_ARG_CONST(uint8_t,   iEffSeg, /*=*/ pVCpu->iem.s.iEffSeg,    0);
    1697     IEM_MC_CALL_CIMPL_2(IEM_CIMPL_F_VMEXIT, iemCImpl_smsw_mem, iEffSeg, GCPtrEffDst);
     1697    IEM_MC_CALL_CIMPL_2(IEM_CIMPL_F_VMEXIT, 0, iemCImpl_smsw_mem, iEffSeg, GCPtrEffDst);
    16981698    IEM_MC_END();
    16991699}
     
    17141714        IEM_MC_ARG_CONST(RTGCPTR,  GCPtrEffDst, NIL_RTGCPTR, 1);
    17151715        IEM_MC_FETCH_GREG_U16(u16Tmp, IEM_GET_MODRM_RM(pVCpu, bRm));
    1716         IEM_MC_CALL_CIMPL_2(IEM_CIMPL_F_MODE | IEM_CIMPL_F_VMEXIT, iemCImpl_lmsw, u16Tmp, GCPtrEffDst);
     1716        IEM_MC_CALL_CIMPL_2(IEM_CIMPL_F_MODE | IEM_CIMPL_F_VMEXIT, 0, iemCImpl_lmsw, u16Tmp, GCPtrEffDst);
    17171717        IEM_MC_END();
    17181718    }
     
    17251725        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    17261726        IEM_MC_FETCH_MEM_U16(u16Tmp, pVCpu->iem.s.iEffSeg, GCPtrEffDst);
    1727         IEM_MC_CALL_CIMPL_2(IEM_CIMPL_F_MODE | IEM_CIMPL_F_VMEXIT, iemCImpl_lmsw, u16Tmp, GCPtrEffDst);
     1727        IEM_MC_CALL_CIMPL_2(IEM_CIMPL_F_MODE | IEM_CIMPL_F_VMEXIT, 0, iemCImpl_lmsw, u16Tmp, GCPtrEffDst);
    17281728        IEM_MC_END();
    17291729    }
     
    17401740    IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);
    17411741    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1742     IEM_MC_CALL_CIMPL_1(IEM_CIMPL_F_VMEXIT, iemCImpl_invlpg, GCPtrEffDst);
     1742    IEM_MC_CALL_CIMPL_1(IEM_CIMPL_F_VMEXIT, 0, iemCImpl_invlpg, GCPtrEffDst);
    17431743    IEM_MC_END();
    17441744}
     
    18731873                IEM_MC_FETCH_GREG_U16(u16Sel, IEM_GET_MODRM_RM(pVCpu, bRm));
    18741874                IEM_MC_REF_GREG_U16(pu16Dst, IEM_GET_MODRM_REG(pVCpu, bRm));
    1875                 IEM_MC_HINT_FLUSH_GUEST_SHADOW_GREG(IEM_GET_MODRM_REG(pVCpu, bRm));
    1876                 IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_STATUS_FLAGS, iemCImpl_LarLsl_u16, pu16Dst, u16Sel, fIsLarArg);
     1875                IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_STATUS_FLAGS, RT_BIT_64(kIemNativeGstReg_GprFirst + IEM_GET_MODRM_REG(pVCpu, bRm)),
     1876                                    iemCImpl_LarLsl_u16, pu16Dst, u16Sel, fIsLarArg);
    18771877
    18781878                IEM_MC_END();
     
    18891889                IEM_MC_FETCH_GREG_U16(u16Sel, IEM_GET_MODRM_RM(pVCpu, bRm));
    18901890                IEM_MC_REF_GREG_U64(pu64Dst, IEM_GET_MODRM_REG(pVCpu, bRm));
    1891                 IEM_MC_HINT_FLUSH_GUEST_SHADOW_GREG(IEM_GET_MODRM_REG(pVCpu, bRm));
    1892                 IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_STATUS_FLAGS, iemCImpl_LarLsl_u64, pu64Dst, u16Sel, fIsLarArg);
     1891                IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_STATUS_FLAGS, RT_BIT_64(kIemNativeGstReg_GprFirst + IEM_GET_MODRM_REG(pVCpu, bRm)),
     1892                                    iemCImpl_LarLsl_u64, pu64Dst, u16Sel, fIsLarArg);
    18931893
    18941894                IEM_MC_END();
     
    19141914                IEM_MC_FETCH_MEM_U16(u16Sel, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);
    19151915                IEM_MC_REF_GREG_U16(pu16Dst, IEM_GET_MODRM_REG(pVCpu, bRm));
    1916                 IEM_MC_HINT_FLUSH_GUEST_SHADOW_GREG(IEM_GET_MODRM_REG(pVCpu, bRm));
    1917                 IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_STATUS_FLAGS, iemCImpl_LarLsl_u16, pu16Dst, u16Sel, fIsLarArg);
     1916                IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_STATUS_FLAGS, RT_BIT_64(kIemNativeGstReg_GprFirst + IEM_GET_MODRM_REG(pVCpu, bRm)),
     1917                                    iemCImpl_LarLsl_u16, pu16Dst, u16Sel, fIsLarArg);
    19181918
    19191919                IEM_MC_END();
     
    19341934                IEM_MC_FETCH_MEM_U16(u16Sel, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);
    19351935                IEM_MC_REF_GREG_U64(pu64Dst, IEM_GET_MODRM_REG(pVCpu, bRm));
    1936                 IEM_MC_HINT_FLUSH_GUEST_SHADOW_GREG(IEM_GET_MODRM_REG(pVCpu, bRm));
    1937                 IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_STATUS_FLAGS, iemCImpl_LarLsl_u64, pu64Dst, u16Sel, fIsLarArg);
     1936                IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_STATUS_FLAGS, RT_BIT_64(kIemNativeGstReg_GprFirst + IEM_GET_MODRM_REG(pVCpu, bRm)),
     1937                                    iemCImpl_LarLsl_u64, pu64Dst, u16Sel, fIsLarArg);
    19381938
    19391939                IEM_MC_END();
     
    71347134            IEM_MC_FETCH_GREG_U64(u64Enc, IEM_GET_MODRM_REG(pVCpu, bRm));
    71357135            IEM_MC_REF_GREG_U64(pu64Dst, IEM_GET_MODRM_RM(pVCpu, bRm));
    7136             IEM_MC_HINT_FLUSH_GUEST_SHADOW_GREG(IEM_GET_MODRM_RM(pVCpu, bRm));
    7137             IEM_MC_CALL_CIMPL_2(IEM_CIMPL_F_VMEXIT | IEM_CIMPL_F_STATUS_FLAGS, iemCImpl_vmread_reg64, pu64Dst, u64Enc);
     7136            IEM_MC_CALL_CIMPL_2(IEM_CIMPL_F_VMEXIT | IEM_CIMPL_F_STATUS_FLAGS,
     7137                                RT_BIT_64(kIemNativeGstReg_GprFirst + IEM_GET_MODRM_RM(pVCpu, bRm)),
     7138                                iemCImpl_vmread_reg64, pu64Dst, u64Enc);
    71387139            IEM_MC_END();
    71397140        }
     
    71467147            IEM_MC_FETCH_GREG_U32(u32Enc, IEM_GET_MODRM_REG(pVCpu, bRm));
    71477148            IEM_MC_REF_GREG_U64(pu64Dst, IEM_GET_MODRM_RM(pVCpu, bRm));
    7148             IEM_MC_HINT_FLUSH_GUEST_SHADOW_GREG(IEM_GET_MODRM_RM(pVCpu, bRm));
    7149             IEM_MC_CALL_CIMPL_2(IEM_CIMPL_F_VMEXIT | IEM_CIMPL_F_STATUS_FLAGS, iemCImpl_vmread_reg32, pu64Dst, u32Enc);
     7149            IEM_MC_CALL_CIMPL_2(IEM_CIMPL_F_VMEXIT | IEM_CIMPL_F_STATUS_FLAGS,
     7150                                RT_BIT_64(kIemNativeGstReg_GprFirst + IEM_GET_MODRM_RM(pVCpu, bRm)),
     7151                                iemCImpl_vmread_reg32, pu64Dst, u32Enc);
    71507152            IEM_MC_END();
    71517153        }
     
    71657167            IEM_MC_ARG(uint64_t,        u64Enc,                                           2);
    71667168            IEM_MC_FETCH_GREG_U64(u64Enc, IEM_GET_MODRM_REG(pVCpu, bRm));
    7167             IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_VMEXIT | IEM_CIMPL_F_STATUS_FLAGS,
     7169            IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_VMEXIT | IEM_CIMPL_F_STATUS_FLAGS, 0,
    71687170                                iemCImpl_vmread_mem_reg64, iEffSeg, GCPtrVal, u64Enc);
    71697171            IEM_MC_END();
     
    71787180            IEM_MC_ARG(uint32_t,        u32Enc,                                           2);
    71797181            IEM_MC_FETCH_GREG_U32(u32Enc, IEM_GET_MODRM_REG(pVCpu, bRm));
    7180             IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_VMEXIT | IEM_CIMPL_F_STATUS_FLAGS,
     7182            IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_VMEXIT | IEM_CIMPL_F_STATUS_FLAGS, 0,
    71817183                                iemCImpl_vmread_mem_reg32, iEffSeg, GCPtrVal, u32Enc);
    71827184            IEM_MC_END();
     
    72167218            IEM_MC_FETCH_GREG_U64(u64Val, IEM_GET_MODRM_RM(pVCpu, bRm));
    72177219            IEM_MC_FETCH_GREG_U64(u64Enc, IEM_GET_MODRM_REG(pVCpu, bRm));
    7218             IEM_MC_CALL_CIMPL_2(IEM_CIMPL_F_VMEXIT | IEM_CIMPL_F_STATUS_FLAGS, iemCImpl_vmwrite_reg, u64Val, u64Enc);
     7220            IEM_MC_CALL_CIMPL_2(IEM_CIMPL_F_VMEXIT | IEM_CIMPL_F_STATUS_FLAGS, 0, iemCImpl_vmwrite_reg, u64Val, u64Enc);
    72197221            IEM_MC_END();
    72207222        }
     
    72277229            IEM_MC_FETCH_GREG_U32(u32Val, IEM_GET_MODRM_RM(pVCpu, bRm));
    72287230            IEM_MC_FETCH_GREG_U32(u32Enc, IEM_GET_MODRM_REG(pVCpu, bRm));
    7229             IEM_MC_CALL_CIMPL_2(IEM_CIMPL_F_VMEXIT | IEM_CIMPL_F_STATUS_FLAGS, iemCImpl_vmwrite_reg, u32Val, u32Enc);
     7231            IEM_MC_CALL_CIMPL_2(IEM_CIMPL_F_VMEXIT | IEM_CIMPL_F_STATUS_FLAGS, 0, iemCImpl_vmwrite_reg, u32Val, u32Enc);
    72307232            IEM_MC_END();
    72317233        }
     
    72457247            IEM_MC_ARG(uint64_t,        u64Enc,                                           2);
    72467248            IEM_MC_FETCH_GREG_U64(u64Enc, IEM_GET_MODRM_REG(pVCpu, bRm));
    7247             IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_VMEXIT | IEM_CIMPL_F_STATUS_FLAGS,
     7249            IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_VMEXIT | IEM_CIMPL_F_STATUS_FLAGS, 0,
    72487250                                iemCImpl_vmwrite_mem, iEffSeg, GCPtrVal, u64Enc);
    72497251            IEM_MC_END();
     
    72587260            IEM_MC_ARG_CONST(uint8_t,   iEffSeg, /*=*/ pVCpu->iem.s.iEffSeg,              0);
    72597261            IEM_MC_FETCH_GREG_U32(u32Enc, IEM_GET_MODRM_REG(pVCpu, bRm));
    7260             IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_VMEXIT | IEM_CIMPL_F_STATUS_FLAGS,
     7262            IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_VMEXIT | IEM_CIMPL_F_STATUS_FLAGS, 0,
    72617263                                iemCImpl_vmwrite_mem, iEffSeg, GCPtrVal, u32Enc);
    72627264            IEM_MC_END();
     
    97929794    IEM_MC_ARG_CONST(uint8_t,   iEffSeg,      /*=*/ pVCpu->iem.s.iEffSeg,       0);
    97939795    IEM_MC_ARG_CONST(IEMMODE,   enmEffOpSize, /*=*/pVCpu->iem.s.enmEffOpSize,   2);
    9794     IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_FPU, iemCImpl_fxsave, iEffSeg, GCPtrEff, enmEffOpSize);
     9796    IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_FPU, 0, iemCImpl_fxsave, iEffSeg, GCPtrEff, enmEffOpSize);
    97959797    IEM_MC_END();
    97969798}
     
    98119813    IEM_MC_ARG_CONST(uint8_t,   iEffSeg,      /*=*/ pVCpu->iem.s.iEffSeg,       0);
    98129814    IEM_MC_ARG_CONST(IEMMODE,   enmEffOpSize, /*=*/pVCpu->iem.s.enmEffOpSize,   2);
    9813     IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_FPU, iemCImpl_fxrstor, iEffSeg, GCPtrEff, enmEffOpSize);
     9815    IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_FPU, 0, iemCImpl_fxrstor, iEffSeg, GCPtrEff, enmEffOpSize);
    98149816    IEM_MC_END();
    98159817}
     
    98479849    IEM_MC_ACTUALIZE_SSE_STATE_FOR_READ();
    98489850    IEM_MC_ARG_CONST(uint8_t,   iEffSeg, /*=*/ pVCpu->iem.s.iEffSeg,     0);
    9849     IEM_MC_CALL_CIMPL_2(IEM_CIMPL_F_FPU, iemCImpl_ldmxcsr, iEffSeg, GCPtrEff);
     9851    IEM_MC_CALL_CIMPL_2(IEM_CIMPL_F_FPU, 0, iemCImpl_ldmxcsr, iEffSeg, GCPtrEff);
    98509852    IEM_MC_END();
    98519853}
     
    98829884    IEM_MC_ACTUALIZE_SSE_STATE_FOR_READ();
    98839885    IEM_MC_ARG_CONST(uint8_t,   iEffSeg, /*=*/ pVCpu->iem.s.iEffSeg,     0);
    9884     IEM_MC_CALL_CIMPL_2(IEM_CIMPL_F_FPU, iemCImpl_stmxcsr, iEffSeg, GCPtrEff);
     9886    IEM_MC_CALL_CIMPL_2(IEM_CIMPL_F_FPU, 0, iemCImpl_stmxcsr, iEffSeg, GCPtrEff);
    98859887    IEM_MC_END();
    98869888}
     
    99089910    IEM_MC_ARG_CONST(uint8_t,   iEffSeg,      /*=*/ pVCpu->iem.s.iEffSeg,       0);
    99099911    IEM_MC_ARG_CONST(IEMMODE,   enmEffOpSize, /*=*/ pVCpu->iem.s.enmEffOpSize,  2);
    9910     IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_FPU, iemCImpl_xsave, iEffSeg, GCPtrEff, enmEffOpSize);
     9912    IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_FPU, 0, iemCImpl_xsave, iEffSeg, GCPtrEff, enmEffOpSize);
    99119913    IEM_MC_END();
    99129914}
     
    99349936    IEM_MC_ARG_CONST(uint8_t,   iEffSeg,      /*=*/ pVCpu->iem.s.iEffSeg,       0);
    99359937    IEM_MC_ARG_CONST(IEMMODE,   enmEffOpSize, /*=*/ pVCpu->iem.s.enmEffOpSize,  2);
    9936     IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_FPU, iemCImpl_xrstor, iEffSeg, GCPtrEff, enmEffOpSize);
     9938    IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_FPU, 0, iemCImpl_xrstor, iEffSeg, GCPtrEff, enmEffOpSize);
    99379939    IEM_MC_END();
    99389940}
     
    99609962    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    99619963    IEM_MC_ARG_CONST(uint8_t,   iEffSeg, /*=*/ pVCpu->iem.s.iEffSeg,     0);
    9962     IEM_MC_CALL_CIMPL_2(IEM_CIMPL_F_VMEXIT, iemCImpl_clflush_clflushopt, iEffSeg, GCPtrEff);
     9964    IEM_MC_CALL_CIMPL_2(IEM_CIMPL_F_VMEXIT, 0, iemCImpl_clflush_clflushopt, iEffSeg, GCPtrEff);
    99639965    IEM_MC_END();
    99649966}
     
    99839985    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    99849986    IEM_MC_ARG_CONST(uint8_t,   iEffSeg, /*=*/ pVCpu->iem.s.iEffSeg,     0);
    9985     IEM_MC_CALL_CIMPL_2(IEM_CIMPL_F_VMEXIT, iemCImpl_clflush_clflushopt, iEffSeg, GCPtrEff);
     9987    IEM_MC_CALL_CIMPL_2(IEM_CIMPL_F_VMEXIT, 0, iemCImpl_clflush_clflushopt, iEffSeg, GCPtrEff);
    99869988    IEM_MC_END();
    99879989}
     
    1249712499            IEM_MC_REF_LOCAL(pu128RbxRcx, u128RbxRcx); \
    1249812500            \
    12499             IEM_MC_FETCH_EFLAGS(EFlags); \
    12500             IEM_MC_HINT_FLUSH_GUEST_SHADOW_GREG(X86_GREG_xAX); \
    12501             IEM_MC_HINT_FLUSH_GUEST_SHADOW_GREG(X86_GREG_xDX)
     12501            IEM_MC_FETCH_EFLAGS(EFlags)
    1250212502
    1250312503#define BODY_CMPXCHG16B_TAIL \
     
    1254012540                BODY_CMPXCHG16B_HEAD;
    1254112541                IEM_MC_CALL_CIMPL_4(IEM_CIMPL_F_STATUS_FLAGS,
     12542                                      RT_BIT_64(kIemNativeGstReg_GprFirst + X86_GREG_xAX)
     12543                                    | RT_BIT_64(kIemNativeGstReg_GprFirst + X86_GREG_xDX),
    1254212544                                    iemCImpl_cmpxchg16b_fallback_rendezvous, pu128MemDst, pu128RaxRdx, pu128RbxRcx, pEFlags);
    1254312545                IEM_MC_END();
     
    1257412576        {
    1257512577            BODY_CMPXCHG16B_HEAD;
    12576             IEM_MC_CALL_CIMPL_4(IEM_CIMPL_F_STATUS_FLAGS, iemCImpl_cmpxchg16b_fallback_rendezvous,
     12578            IEM_MC_CALL_CIMPL_4(IEM_CIMPL_F_STATUS_FLAGS,
     12579                                  RT_BIT_64(kIemNativeGstReg_GprFirst + X86_GREG_xAX)
     12580                                | RT_BIT_64(kIemNativeGstReg_GprFirst + X86_GREG_xDX),
     12581                                iemCImpl_cmpxchg16b_fallback_rendezvous,
    1257712582                                pu128MemDst, pu128RaxRdx, pu128RbxRcx, pEFlags);
    1257812583            IEM_MC_END();
     
    1260712612        IEM_MC_ARG_CONST(uint8_t, iReg,        /*=*/ IEM_GET_MODRM_RM(pVCpu, bRm), 0);
    1260812613        IEM_MC_ARG_CONST(IEMMODE, enmEffOpSize,/*=*/ pVCpu->iem.s.enmEffOpSize,    1);
    12609         IEM_MC_HINT_FLUSH_GUEST_SHADOW_GREG(IEM_GET_MODRM_RM(pVCpu, bRm));
    12610         IEM_MC_CALL_CIMPL_2(IEM_CIMPL_F_RFLAGS | IEM_CIMPL_F_VMEXIT, iemCImpl_rdrand, iReg, enmEffOpSize);
     12614        IEM_MC_CALL_CIMPL_2(IEM_CIMPL_F_RFLAGS | IEM_CIMPL_F_VMEXIT,
     12615                            RT_BIT_64(kIemNativeGstReg_GprFirst + IEM_GET_MODRM_RM(pVCpu, bRm)),
     12616                            iemCImpl_rdrand, iReg, enmEffOpSize);
    1261112617        IEM_MC_END();
    1261212618    }
     
    1262812634    IEMOP_HLP_DONE_DECODING_NO_SIZE_OP_REPZ_OR_REPNZ_PREFIXES();
    1262912635    IEM_MC_ARG_CONST(uint8_t,   iEffSeg, /*=*/ pVCpu->iem.s.iEffSeg,    0);
    12630     IEM_MC_CALL_CIMPL_2(IEM_CIMPL_F_VMEXIT | IEM_CIMPL_F_STATUS_FLAGS, iemCImpl_vmptrld, iEffSeg, GCPtrEffSrc);
     12636    IEM_MC_CALL_CIMPL_2(IEM_CIMPL_F_VMEXIT | IEM_CIMPL_F_STATUS_FLAGS, 0, iemCImpl_vmptrld, iEffSeg, GCPtrEffSrc);
    1263112637    IEM_MC_END();
    1263212638}
     
    1264712653    IEMOP_HLP_DONE_DECODING();
    1264812654    IEM_MC_ARG_CONST(uint8_t,   iEffSeg, /*=*/ pVCpu->iem.s.iEffSeg,    0);
    12649     IEM_MC_CALL_CIMPL_2(IEM_CIMPL_F_VMEXIT | IEM_CIMPL_F_STATUS_FLAGS, iemCImpl_vmclear, iEffSeg, GCPtrEffDst);
     12655    IEM_MC_CALL_CIMPL_2(IEM_CIMPL_F_VMEXIT | IEM_CIMPL_F_STATUS_FLAGS, 0, iemCImpl_vmclear, iEffSeg, GCPtrEffDst);
    1265012656    IEM_MC_END();
    1265112657}
     
    1266512671    IEMOP_HLP_DONE_DECODING();
    1266612672    IEM_MC_ARG_CONST(uint8_t,   iEffSeg, /*=*/ pVCpu->iem.s.iEffSeg,    0);
    12667     IEM_MC_CALL_CIMPL_2(IEM_CIMPL_F_VMEXIT | IEM_CIMPL_F_STATUS_FLAGS, iemCImpl_vmxon, iEffSeg, GCPtrEffSrc);
     12673    IEM_MC_CALL_CIMPL_2(IEM_CIMPL_F_VMEXIT | IEM_CIMPL_F_STATUS_FLAGS, 0, iemCImpl_vmxon, iEffSeg, GCPtrEffSrc);
    1266812674    IEM_MC_END();
    1266912675}
     
    1268412690    IEMOP_HLP_DONE_DECODING_NO_SIZE_OP_REPZ_OR_REPNZ_PREFIXES();
    1268512691    IEM_MC_ARG_CONST(uint8_t,   iEffSeg, /*=*/ pVCpu->iem.s.iEffSeg,    0);
    12686     IEM_MC_CALL_CIMPL_2(IEM_CIMPL_F_VMEXIT | IEM_CIMPL_F_STATUS_FLAGS, iemCImpl_vmptrst, iEffSeg, GCPtrEffDst);
     12692    IEM_MC_CALL_CIMPL_2(IEM_CIMPL_F_VMEXIT | IEM_CIMPL_F_STATUS_FLAGS, 0, iemCImpl_vmptrst, iEffSeg, GCPtrEffDst);
    1268712693    IEM_MC_END();
    1268812694}
     
    1270412710        IEM_MC_ARG_CONST(uint8_t, iReg,        /*=*/ IEM_GET_MODRM_RM(pVCpu, bRm), 0);
    1270512711        IEM_MC_ARG_CONST(IEMMODE, enmEffOpSize,/*=*/ pVCpu->iem.s.enmEffOpSize,    1);
    12706         IEM_MC_HINT_FLUSH_GUEST_SHADOW_GREG(IEM_GET_MODRM_RM(pVCpu, bRm));
    12707         IEM_MC_CALL_CIMPL_2(IEM_CIMPL_F_RFLAGS | IEM_CIMPL_F_VMEXIT, iemCImpl_rdseed, iReg, enmEffOpSize);
     12712        IEM_MC_CALL_CIMPL_2(IEM_CIMPL_F_RFLAGS | IEM_CIMPL_F_VMEXIT,
     12713                            RT_BIT_64(kIemNativeGstReg_GprFirst + IEM_GET_MODRM_RM(pVCpu, bRm)),
     12714                            iemCImpl_rdseed, iReg, enmEffOpSize);
    1270812715        IEM_MC_END();
    1270912716    }
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstVexMap1.cpp.h

    r101953 r102011  
    42934293    IEM_MC_ACTUALIZE_SSE_STATE_FOR_READ();
    42944294    IEM_MC_ARG_CONST(uint8_t,   iEffSeg, /*=*/ pVCpu->iem.s.iEffSeg,    0);
    4295     IEM_MC_CALL_CIMPL_2(IEM_CIMPL_F_FPU, iemCImpl_vstmxcsr, iEffSeg, GCPtrEff);
     4295    IEM_MC_CALL_CIMPL_2(IEM_CIMPL_F_FPU, 0, iemCImpl_vstmxcsr, iEffSeg, GCPtrEff);
    42964296    IEM_MC_END();
    42974297}
  • trunk/src/VBox/VMM/VMMAll/IEMAllN8veRecompiler.cpp

    r102010 r102011  
    55375537DECL_HIDDEN_THROW(uint32_t)
    55385538iemNativeEmitCallCImplCommon(PIEMRECOMPILERSTATE pReNative, uint32_t off, uint8_t cbInstr, uint8_t idxInstr,
    5539                              uintptr_t pfnCImpl, uint8_t cArgs)
     5539                             uint64_t fGstShwFlush, uintptr_t pfnCImpl, uint8_t cArgs)
    55405540
    55415541{
     
    55695569    off = iemNativeEmitLoadGprByBpU32(pReNative, off, X86_GREG_xAX, IEMNATIVE_FP_OFF_IN_SHADOW_ARG0); /* rcStrict (see above) */
    55705570#endif
    5571     uint64_t fGstShwFlush = iemNativeCImplFlagsToGuestShadowFlushMask(pReNative->fCImpl, RT_BIT_64(kIemNativeGstReg_Pc));
     5571    fGstShwFlush = iemNativeCImplFlagsToGuestShadowFlushMask(pReNative->fCImpl, fGstShwFlush | RT_BIT_64(kIemNativeGstReg_Pc));
    55725572    if (!(pReNative->fMc & IEM_MC_F_WITHOUT_FLAGS)) /** @todo We don't emit with-flags/without-flags variations for CIMPL calls.  */
    55735573        fGstShwFlush |= RT_BIT_64(kIemNativeGstReg_EFlags);
     
    55785578
    55795579
    5580 #define IEM_MC_CALL_CIMPL_1_THREADED(a_cbInstr, a_fFlags, a_pfnCImpl, a0) \
    5581     off = iemNativeEmitCallCImpl1(pReNative, off, a_cbInstr, pCallEntry->idxInstr, (uintptr_t)a_pfnCImpl, a0)
     5580#define IEM_MC_CALL_CIMPL_1_THREADED(a_cbInstr, a_fFlags, a_fGstShwFlush, a_pfnCImpl, a0) \
     5581    off = iemNativeEmitCallCImpl1(pReNative, off, a_cbInstr, pCallEntry->idxInstr, a_fGstShwFlush, (uintptr_t)a_pfnCImpl, a0)
    55825582
    55835583/** Emits code for IEM_MC_CALL_CIMPL_1. */
    55845584DECL_INLINE_THROW(uint32_t)
    5585 iemNativeEmitCallCImpl1(PIEMRECOMPILERSTATE pReNative, uint32_t off, uint8_t cbInstr, uint8_t idxInstr,
     5585iemNativeEmitCallCImpl1(PIEMRECOMPILERSTATE pReNative, uint32_t off, uint8_t cbInstr, uint8_t idxInstr, uint64_t fGstShwFlush,
    55865586                        uintptr_t pfnCImpl, uint8_t idxArg0)
    55875587{
     
    55905590    RT_NOREF_PV(idxArg0);
    55915591
    5592     return iemNativeEmitCallCImplCommon(pReNative, off, cbInstr, idxInstr, pfnCImpl, 1);
    5593 }
    5594 
    5595 
    5596 #define IEM_MC_CALL_CIMPL_2_THREADED(a_cbInstr, a_fFlags, a_pfnCImpl, a0, a1) \
    5597     off = iemNativeEmitCallCImpl2(pReNative, off, a_cbInstr, pCallEntry->idxInstr, (uintptr_t)a_pfnCImpl, a0, a1)
     5592    return iemNativeEmitCallCImplCommon(pReNative, off, cbInstr, idxInstr, fGstShwFlush, pfnCImpl, 1);
     5593}
     5594
     5595
     5596#define IEM_MC_CALL_CIMPL_2_THREADED(a_cbInstr, a_fFlags, a_fGstShwFlush, a_pfnCImpl, a0, a1) \
     5597    off = iemNativeEmitCallCImpl2(pReNative, off, a_cbInstr, pCallEntry->idxInstr, a_fGstShwFlush, (uintptr_t)a_pfnCImpl, a0, a1)
    55985598
    55995599/** Emits code for IEM_MC_CALL_CIMPL_2. */
    56005600DECL_INLINE_THROW(uint32_t)
    5601 iemNativeEmitCallCImpl2(PIEMRECOMPILERSTATE pReNative, uint32_t off, uint8_t cbInstr, uint8_t idxInstr,
     5601iemNativeEmitCallCImpl2(PIEMRECOMPILERSTATE pReNative, uint32_t off, uint8_t cbInstr, uint8_t idxInstr, uint64_t fGstShwFlush,
    56025602                        uintptr_t pfnCImpl, uint8_t idxArg0, uint8_t idxArg1)
    56035603{
     
    56105610    RT_NOREF_PV(idxArg1);
    56115611
    5612     return iemNativeEmitCallCImplCommon(pReNative, off, cbInstr, idxInstr, pfnCImpl, 2);
    5613 }
    5614 
    5615 
    5616 #define IEM_MC_CALL_CIMPL_3_THREADED(a_cbInstr, a_fFlags, a_pfnCImpl, a0, a1, a2) \
    5617     off = iemNativeEmitCallCImpl3(pReNative, off, a_cbInstr, pCallEntry->idxInstr, (uintptr_t)a_pfnCImpl, a0, a1, a2)
     5612    return iemNativeEmitCallCImplCommon(pReNative, off, cbInstr, idxInstr, fGstShwFlush, pfnCImpl, 2);
     5613}
     5614
     5615
     5616#define IEM_MC_CALL_CIMPL_3_THREADED(a_cbInstr, a_fFlags, a_fGstShwFlush, a_pfnCImpl, a0, a1, a2) \
     5617    off = iemNativeEmitCallCImpl3(pReNative, off, a_cbInstr, pCallEntry->idxInstr, a_fGstShwFlush, \
     5618                                  (uintptr_t)a_pfnCImpl, a0, a1, a2)
    56185619
    56195620/** Emits code for IEM_MC_CALL_CIMPL_3. */
    56205621DECL_INLINE_THROW(uint32_t)
    5621 iemNativeEmitCallCImpl3(PIEMRECOMPILERSTATE pReNative, uint32_t off, uint8_t cbInstr, uint8_t idxInstr,
     5622iemNativeEmitCallCImpl3(PIEMRECOMPILERSTATE pReNative, uint32_t off, uint8_t cbInstr, uint8_t idxInstr, uint64_t fGstShwFlush,
    56225623                        uintptr_t pfnCImpl, uint8_t idxArg0, uint8_t idxArg1, uint8_t idxArg2)
    56235624{
     
    56355636    RT_NOREF_PV(idxArg2);
    56365637
    5637     return iemNativeEmitCallCImplCommon(pReNative, off, cbInstr, idxInstr, pfnCImpl, 3);
    5638 }
    5639 
    5640 
    5641 #define IEM_MC_CALL_CIMPL_4_THREADED(a_cbInstr, a_fFlags, a_pfnCImpl, a0, a1, a2, a3) \
    5642     off = iemNativeEmitCallCImpl4(pReNative, off, a_cbInstr, pCallEntry->idxInstr, (uintptr_t)a_pfnCImpl, a0, a1, a2, a3)
     5638    return iemNativeEmitCallCImplCommon(pReNative, off, cbInstr, idxInstr, fGstShwFlush, pfnCImpl, 3);
     5639}
     5640
     5641
     5642#define IEM_MC_CALL_CIMPL_4_THREADED(a_cbInstr, a_fFlags, a_fGstShwFlush, a_pfnCImpl, a0, a1, a2, a3) \
     5643    off = iemNativeEmitCallCImpl4(pReNative, off, a_cbInstr, pCallEntry->idxInstr, a_fGstShwFlush, \
     5644                                  (uintptr_t)a_pfnCImpl, a0, a1, a2, a3)
    56435645
    56445646/** Emits code for IEM_MC_CALL_CIMPL_4. */
    56455647DECL_INLINE_THROW(uint32_t)
    5646 iemNativeEmitCallCImpl4(PIEMRECOMPILERSTATE pReNative, uint32_t off, uint8_t cbInstr, uint8_t idxInstr,
     5648iemNativeEmitCallCImpl4(PIEMRECOMPILERSTATE pReNative, uint32_t off, uint8_t cbInstr, uint8_t idxInstr, uint64_t fGstShwFlush,
    56475649                        uintptr_t pfnCImpl, uint8_t idxArg0, uint8_t idxArg1, uint8_t idxArg2, uint8_t idxArg3)
    56485650{
     
    56645666    RT_NOREF_PV(idxArg3);
    56655667
    5666     return iemNativeEmitCallCImplCommon(pReNative, off, cbInstr, idxInstr, pfnCImpl, 4);
    5667 }
    5668 
    5669 
    5670 #define IEM_MC_CALL_CIMPL_5_THREADED(a_cbInstr, a_fFlags, a_pfnCImpl, a0, a1, a2, a3, a4) \
    5671     off = iemNativeEmitCallCImpl5(pReNative, off, a_cbInstr, pCallEntry->idxInstr, (uintptr_t)a_pfnCImpl, a0, a1, a2, a3, a4)
     5668    return iemNativeEmitCallCImplCommon(pReNative, off, cbInstr, idxInstr, fGstShwFlush, pfnCImpl, 4);
     5669}
     5670
     5671
     5672#define IEM_MC_CALL_CIMPL_5_THREADED(a_cbInstr, a_fFlags, a_fGstShwFlush, a_pfnCImpl, a0, a1, a2, a3, a4) \
     5673    off = iemNativeEmitCallCImpl5(pReNative, off, a_cbInstr, pCallEntry->idxInstr, a_fGstShwFlush, \
     5674                                  (uintptr_t)a_pfnCImpl, a0, a1, a2, a3, a4)
    56725675
    56735676/** Emits code for IEM_MC_CALL_CIMPL_4. */
    56745677DECL_INLINE_THROW(uint32_t)
    5675 iemNativeEmitCallCImpl5(PIEMRECOMPILERSTATE pReNative, uint32_t off, uint8_t cbInstr, uint8_t idxInstr,
     5678iemNativeEmitCallCImpl5(PIEMRECOMPILERSTATE pReNative, uint32_t off, uint8_t cbInstr, uint8_t idxInstr, uint64_t fGstShwFlush,
    56765679                        uintptr_t pfnCImpl, uint8_t idxArg0, uint8_t idxArg1, uint8_t idxArg2, uint8_t idxArg3, uint8_t idxArg4)
    56775680{
     
    56975700    RT_NOREF_PV(idxArg4);
    56985701
    5699     return iemNativeEmitCallCImplCommon(pReNative, off, cbInstr, idxInstr, pfnCImpl, 5);
    5700 }
    5701 
    5702 
    5703 /** Flush guest GPR shadow copy. */
    5704 #define IEM_MC_HINT_FLUSH_GUEST_SHADOW_GREG(a_iGReg) \
    5705     iemNativeRegFlushGuestShadows(pReNative, RT_BIT_64(kIemNativeGstReg_GprFirst + (a_iGReg)) )
    5706 
    5707 /** Flush guest segment register (hidden and non-hidden bits) shadow copy. */
    5708 #define IEM_MC_HINT_FLUSH_GUEST_SHADOW_SREG(a_iSReg) \
    5709     iemNativeRegFlushGuestShadows(pReNative, \
    5710                                     RT_BIT_64(kIemNativeGstReg_SegSelFirst   + (a_iSReg)) \
    5711                                   | RT_BIT_64(kIemNativeGstReg_SegBaseFirst  + (a_iSReg)) \
    5712                                   | RT_BIT_64(kIemNativeGstReg_SegLimitFirst + (a_iSReg)) )
     5702    return iemNativeEmitCallCImplCommon(pReNative, off, cbInstr, idxInstr, fGstShwFlush, pfnCImpl, 5);
     5703}
     5704
     5705
     5706/** Recompiler debugging: Flush guest register shadow copies. */
     5707#define IEM_MC_HINT_FLUSH_GUEST_SHADOW(g_fGstShwFlush) iemNativeRegFlushGuestShadows(pReNative, g_fGstShwFlush)
     5708
    57135709
    57145710
  • trunk/src/VBox/VMM/VMMAll/IEMAllThrdFuncs.cpp

    r101984 r102011  
    251251
    252252/** Variant of IEM_MC_CALL_CIMPL_1 with explicit instruction length parameter. */
    253 #define IEM_MC_CALL_CIMPL_1_THREADED(a_cbInstr, a_fFlags, a_pfnCImpl, a0) \
     253#define IEM_MC_CALL_CIMPL_1_THREADED(a_cbInstr, a_fFlags, a_fGstShwFlush, a_pfnCImpl, a0) \
    254254    return (a_pfnCImpl)(pVCpu, (a_cbInstr), a0)
    255255#undef  IEM_MC_CALL_CIMPL_1
    256256
    257257/** Variant of IEM_MC_CALL_CIMPL_2 with explicit instruction length parameter. */
    258 #define IEM_MC_CALL_CIMPL_2_THREADED(a_cbInstr, a_fFlags, a_pfnCImpl, a0, a1) \
     258#define IEM_MC_CALL_CIMPL_2_THREADED(a_cbInstr, a_fFlags, a_fGstShwFlush, a_pfnCImpl, a0, a1) \
    259259    return (a_pfnCImpl)(pVCpu, (a_cbInstr), a0, a1)
    260260#undef  IEM_MC_CALL_CIMPL_2
    261261
    262262/** Variant of IEM_MC_CALL_CIMPL_3 with explicit instruction length parameter. */
    263 #define IEM_MC_CALL_CIMPL_3_THREADED(a_cbInstr, a_fFlags, a_pfnCImpl, a0, a1, a2) \
     263#define IEM_MC_CALL_CIMPL_3_THREADED(a_cbInstr, a_fFlags, a_fGstShwFlush, a_pfnCImpl, a0, a1, a2) \
    264264    return (a_pfnCImpl)(pVCpu, (a_cbInstr), a0, a1, a2)
    265265#undef  IEM_MC_CALL_CIMPL_3
    266266
    267267/** Variant of IEM_MC_CALL_CIMPL_4 with explicit instruction length parameter. */
    268 #define IEM_MC_CALL_CIMPL_4_THREADED(a_cbInstr, a_fFlags, a_pfnCImpl, a0, a1, a2, a3) \
     268#define IEM_MC_CALL_CIMPL_4_THREADED(a_cbInstr, a_fFlags, a_fGstShwFlush, a_pfnCImpl, a0, a1, a2, a3) \
    269269    return (a_pfnCImpl)(pVCpu, (a_cbInstr), a0, a1, a2, a3)
    270270#undef  IEM_MC_CALL_CIMPL_4
    271271
    272272/** Variant of IEM_MC_CALL_CIMPL_5 with explicit instruction length parameter. */
    273 #define IEM_MC_CALL_CIMPL_5_THREADED(a_cbInstr, a_fFlags, a_pfnCImpl, a0, a1, a2, a3, a4) \
     273#define IEM_MC_CALL_CIMPL_5_THREADED(a_cbInstr, a_fFlags, a_fGstShwFlush, a_pfnCImpl, a0, a1, a2, a3, a4) \
    274274    return (a_pfnCImpl)(pVCpu, (a_cbInstr), a0, a1, a2, a3, a4)
    275275#undef  IEM_MC_CALL_CIMPL_5
  • trunk/src/VBox/VMM/VMMAll/IEMAllThrdPython.py

    r102010 r102011  
    10401040                # Skip the hint parameter (first) for IEM_MC_CALL_CIMPL_X.
    10411041                if oStmt.sName.startswith('IEM_MC_CALL_CIMPL_'):
    1042                     assert oStmt.idxFn == 1;
     1042                    assert oStmt.idxFn == 2;
    10431043                    aiSkipParams[0] = True;
    10441044
  • trunk/src/VBox/VMM/include/IEMMc.h

    r101984 r102011  
    20232023 *
    20242024 * @param   a_fFlags        IEM_CIMPL_F_XXX.
     2025 * @param   a_fGstShwFlush  Guest shadow register copies needing to be flushed
     2026 *                          in the native recompiler.
    20252027 * @param   a_pfnCImpl      The pointer to the C routine.
    20262028 * @sa      IEM_DECL_IMPL_C_TYPE_0 and IEM_CIMPL_DEF_0.
    20272029 */
    2028 #define IEM_MC_CALL_CIMPL_0(a_fFlags, a_pfnCImpl) \
     2030#define IEM_MC_CALL_CIMPL_0(a_fFlags, a_fGstShwFlush, a_pfnCImpl) \
    20292031    IEM_MC_CALL_CIMPL_HLP_RET(a_fFlags, (a_pfnCImpl)(pVCpu, IEM_GET_INSTR_LEN(pVCpu)))
    20302032
     
    20342036 *
    20352037 * @param   a_fFlags        IEM_CIMPL_F_XXX.
     2038 * @param   a_fGstShwFlush  Guest shadow register copies needing to be flushed
     2039 *                          in the native recompiler.
    20362040 * @param   a_pfnCImpl      The pointer to the C routine.
    20372041 * @param   a0              The argument.
    20382042 */
    2039 #define IEM_MC_CALL_CIMPL_1(a_fFlags, a_pfnCImpl, a0) \
     2043#define IEM_MC_CALL_CIMPL_1(a_fFlags, a_fGstShwFlush, a_pfnCImpl, a0) \
    20402044    IEM_MC_CALL_CIMPL_HLP_RET(a_fFlags, (a_pfnCImpl)(pVCpu, IEM_GET_INSTR_LEN(pVCpu), a0))
    20412045
     
    20452049 *
    20462050 * @param   a_fFlags        IEM_CIMPL_F_XXX.
     2051 * @param   a_fGstShwFlush  Guest shadow register copies needing to be flushed
     2052 *                          in the native recompiler.
    20472053 * @param   a_pfnCImpl      The pointer to the C routine.
    20482054 * @param   a0              The first extra argument.
    20492055 * @param   a1              The second extra argument.
    20502056 */
    2051 #define IEM_MC_CALL_CIMPL_2(a_fFlags, a_pfnCImpl, a0, a1) \
     2057#define IEM_MC_CALL_CIMPL_2(a_fFlags, a_fGstShwFlush, a_pfnCImpl, a0, a1) \
    20522058    IEM_MC_CALL_CIMPL_HLP_RET(a_fFlags, (a_pfnCImpl)(pVCpu, IEM_GET_INSTR_LEN(pVCpu), a0, a1))
    20532059
     
    20572063 *
    20582064 * @param   a_fFlags        IEM_CIMPL_F_XXX.
     2065 * @param   a_fGstShwFlush  Guest shadow register copies needing to be flushed
     2066 *                          in the native recompiler.
    20592067 * @param   a_pfnCImpl      The pointer to the C routine.
    20602068 * @param   a0              The first extra argument.
     
    20622070 * @param   a2              The third extra argument.
    20632071 */
    2064 #define IEM_MC_CALL_CIMPL_3(a_fFlags, a_pfnCImpl, a0, a1, a2) \
     2072#define IEM_MC_CALL_CIMPL_3(a_fFlags, a_fGstShwFlush, a_pfnCImpl, a0, a1, a2) \
    20652073    IEM_MC_CALL_CIMPL_HLP_RET(a_fFlags, (a_pfnCImpl)(pVCpu, IEM_GET_INSTR_LEN(pVCpu), a0, a1, a2))
    20662074
     
    20702078 *
    20712079 * @param   a_fFlags        IEM_CIMPL_F_XXX.
     2080 * @param   a_fGstShwFlush  Guest shadow register copies needing to be flushed
     2081 *                          in the native recompiler.
    20722082 * @param   a_pfnCImpl      The pointer to the C routine.
    20732083 * @param   a0              The first extra argument.
     
    20762086 * @param   a3              The fourth extra argument.
    20772087 */
    2078 #define IEM_MC_CALL_CIMPL_4(a_fFlags, a_pfnCImpl, a0, a1, a2, a3) \
     2088#define IEM_MC_CALL_CIMPL_4(a_fFlags, a_fGstShwFlush, a_pfnCImpl, a0, a1, a2, a3) \
    20792089    IEM_MC_CALL_CIMPL_HLP_RET(a_fFlags, (a_pfnCImpl)(pVCpu, IEM_GET_INSTR_LEN(pVCpu), a0, a1, a2, a3))
    20802090
     
    20842094 *
    20852095 * @param   a_fFlags        IEM_CIMPL_F_XXX.
     2096 * @param   a_fGstShwFlush  Guest shadow register copies needing to be flushed
     2097 *                          in the native recompiler.
    20862098 * @param   a_pfnCImpl      The pointer to the C routine.
    20872099 * @param   a0              The first extra argument.
     
    20912103 * @param   a4              The fifth extra argument.
    20922104 */
    2093 #define IEM_MC_CALL_CIMPL_5(a_fFlags, a_pfnCImpl, a0, a1, a2, a3, a4) \
     2105#define IEM_MC_CALL_CIMPL_5(a_fFlags, a_fGstShwFlush, a_pfnCImpl, a0, a1, a2, a3, a4) \
    20942106    IEM_MC_CALL_CIMPL_HLP_RET(a_fFlags, (a_pfnCImpl)(pVCpu, IEM_GET_INSTR_LEN(pVCpu), a0, a1, a2, a3, a4))
    20952107
     
    25032515
    25042516
    2505 /** Native recompiler GREG shadow copy flush hint related to CIMPL calls. */
    2506 #define IEM_MC_HINT_FLUSH_GUEST_SHADOW_GREG(a_iGReg)    ((void)0)
    2507 /** Native recompiler SREG shadow copy flush hint related to CIMPL calls. */
    2508 #define IEM_MC_HINT_FLUSH_GUEST_SHADOW_SREG(a_iSReg)    ((void)0)
     2517/** Recompiler debugging: Flush guest register shadow copies. */
     2518#define IEM_MC_HINT_FLUSH_GUEST_SHADOW(g_fGstShwFlush)  ((void)0)
    25092519
    25102520/** @}  */
  • trunk/src/VBox/VMM/testcase/tstIEMCheckMc.cpp

    r101984 r102011  
    930930#define IEM_MC_CALL_AIMPL_4(a_rc, a_pfn, a0, a1, a2, a3) \
    931931    do { CHK_CALL_ARG(a0, 0); CHK_CALL_ARG(a1, 1); CHK_CALL_ARG(a2, 2); CHK_CALL_ARG(a3, 3);  (a_rc) = VINF_SUCCESS; (void)fMcBegin; } while (0)
    932 #define IEM_MC_CALL_CIMPL_0(a_fFlags, a_pfnCImpl)                       do { (void)fMcBegin; } while (0)
    933 #define IEM_MC_CALL_CIMPL_1(a_fFlags, a_pfnCImpl, a0) \
     932#define IEM_MC_CALL_CIMPL_0(a_fFlags, a_fGstShwFlush, a_pfnCImpl)                       do { (void)fMcBegin; } while (0)
     933#define IEM_MC_CALL_CIMPL_1(a_fFlags, a_fGstShwFlush, a_pfnCImpl, a0) \
    934934    do { CHK_CALL_ARG(a0, 0);  (void)fMcBegin; return VINF_SUCCESS; } while (0)
    935 #define IEM_MC_CALL_CIMPL_2(a_fFlags, a_pfnCImpl, a0, a1) \
     935#define IEM_MC_CALL_CIMPL_2(a_fFlags, a_fGstShwFlush, a_pfnCImpl, a0, a1) \
    936936    do { CHK_CALL_ARG(a0, 0); CHK_CALL_ARG(a1, 1); (void)fMcBegin; return VINF_SUCCESS; } while (0)
    937 #define IEM_MC_CALL_CIMPL_3(a_fFlags, a_pfnCImpl, a0, a1, a2) \
     937#define IEM_MC_CALL_CIMPL_3(a_fFlags, a_fGstShwFlush, a_pfnCImpl, a0, a1, a2) \
    938938    do { CHK_CALL_ARG(a0, 0); CHK_CALL_ARG(a1, 1); CHK_CALL_ARG(a2, 2); (void)fMcBegin; return VINF_SUCCESS; } while (0)
    939 #define IEM_MC_CALL_CIMPL_4(a_fFlags, a_pfnCImpl, a0, a1, a2, a3) \
     939#define IEM_MC_CALL_CIMPL_4(a_fFlags, a_fGstShwFlush, a_pfnCImpl, a0, a1, a2, a3) \
    940940    do { CHK_CALL_ARG(a0, 0); CHK_CALL_ARG(a1, 1); CHK_CALL_ARG(a2, 2); CHK_CALL_ARG(a3, 3); (void)fMcBegin; return VINF_SUCCESS; } while (0)
    941 #define IEM_MC_CALL_CIMPL_5(a_fFlags, a_pfnCImpl, a0, a1, a2, a3, a4) \
     941#define IEM_MC_CALL_CIMPL_5(a_fFlags, a_fGstShwFlush, a_pfnCImpl, a0, a1, a2, a3, a4) \
    942942    do { CHK_CALL_ARG(a0, 0); CHK_CALL_ARG(a1, 1); CHK_CALL_ARG(a2, 2); CHK_CALL_ARG(a3, 3); CHK_CALL_ARG(a4, 4); (void)fMcBegin; return VINF_SUCCESS; } while (0)
    943943#define IEM_MC_DEFER_TO_CIMPL_0_RET(a_fFlags, a_fGstShwFlush, a_pfnCImpl)                       return VINF_SUCCESS
     
    10431043#define IEM_MC_ENDIF()                                                  } do { (void)fMcBegin; } while (0)
    10441044
    1045 #define IEM_MC_HINT_FLUSH_GUEST_SHADOW_GREG(a_iGReg)                    ((void)fMcBegin)
    1046 #define IEM_MC_HINT_FLUSH_GUEST_SHADOW_SREG(a_iSReg)                    ((void)fMcBegin)
     1045#define IEM_MC_HINT_FLUSH_GUEST_SHADOW(g_fGstShwFlush)                  ((void)fMcBegin)
    10471046
    10481047/** @}  */
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