VirtualBox

Changeset 97357 in vbox


Ignore:
Timestamp:
Oct 31, 2022 10:47:43 PM (2 years ago)
Author:
vboxsync
Message:

VMM/IEM: IEM_MC_REL_JMP_S* -> IEM_MC_REL_JMP_S*_AND_FINISH and IEM_MC_SET_RIP_U* -> IEM_MC_SET_RIP_U*_AND_FINISH in prep for TF and other #DB stuff. bugref:9898

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

Legend:

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

    r97356 r97357  
    28042804    IEM_MC_BEGIN(0, 0);
    28052805    IEM_MC_IF_EFL_BIT_SET(X86_EFL_OF) {
    2806         IEM_MC_REL_JMP_S8(i8Imm);
     2806        IEM_MC_REL_JMP_S8_AND_FINISH(i8Imm);
    28072807    } IEM_MC_ELSE() {
    28082808        IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    28272827        IEM_MC_ADVANCE_RIP_AND_FINISH();
    28282828    } IEM_MC_ELSE() {
    2829         IEM_MC_REL_JMP_S8(i8Imm);
     2829        IEM_MC_REL_JMP_S8_AND_FINISH(i8Imm);
    28302830    } IEM_MC_ENDIF();
    28312831    IEM_MC_END();
     
    28452845    IEM_MC_BEGIN(0, 0);
    28462846    IEM_MC_IF_EFL_BIT_SET(X86_EFL_CF) {
    2847         IEM_MC_REL_JMP_S8(i8Imm);
     2847        IEM_MC_REL_JMP_S8_AND_FINISH(i8Imm);
    28482848    } IEM_MC_ELSE() {
    28492849        IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    28682868        IEM_MC_ADVANCE_RIP_AND_FINISH();
    28692869    } IEM_MC_ELSE() {
    2870         IEM_MC_REL_JMP_S8(i8Imm);
     2870        IEM_MC_REL_JMP_S8_AND_FINISH(i8Imm);
    28712871    } IEM_MC_ENDIF();
    28722872    IEM_MC_END();
     
    28872887    IEM_MC_BEGIN(0, 0);
    28882888    IEM_MC_IF_EFL_BIT_SET(X86_EFL_ZF) {
    2889         IEM_MC_REL_JMP_S8(i8Imm);
     2889        IEM_MC_REL_JMP_S8_AND_FINISH(i8Imm);
    28902890    } IEM_MC_ELSE() {
    28912891        IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    29102910        IEM_MC_ADVANCE_RIP_AND_FINISH();
    29112911    } IEM_MC_ELSE() {
    2912         IEM_MC_REL_JMP_S8(i8Imm);
     2912        IEM_MC_REL_JMP_S8_AND_FINISH(i8Imm);
    29132913    } IEM_MC_ENDIF();
    29142914    IEM_MC_END();
     
    29292929    IEM_MC_BEGIN(0, 0);
    29302930    IEM_MC_IF_EFL_ANY_BITS_SET(X86_EFL_CF | X86_EFL_ZF) {
    2931         IEM_MC_REL_JMP_S8(i8Imm);
     2931        IEM_MC_REL_JMP_S8_AND_FINISH(i8Imm);
    29322932    } IEM_MC_ELSE() {
    29332933        IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    29522952        IEM_MC_ADVANCE_RIP_AND_FINISH();
    29532953    } IEM_MC_ELSE() {
    2954         IEM_MC_REL_JMP_S8(i8Imm);
     2954        IEM_MC_REL_JMP_S8_AND_FINISH(i8Imm);
    29552955    } IEM_MC_ENDIF();
    29562956    IEM_MC_END();
     
    29712971    IEM_MC_BEGIN(0, 0);
    29722972    IEM_MC_IF_EFL_BIT_SET(X86_EFL_SF) {
    2973         IEM_MC_REL_JMP_S8(i8Imm);
     2973        IEM_MC_REL_JMP_S8_AND_FINISH(i8Imm);
    29742974    } IEM_MC_ELSE() {
    29752975        IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    29942994        IEM_MC_ADVANCE_RIP_AND_FINISH();
    29952995    } IEM_MC_ELSE() {
    2996         IEM_MC_REL_JMP_S8(i8Imm);
     2996        IEM_MC_REL_JMP_S8_AND_FINISH(i8Imm);
    29972997    } IEM_MC_ENDIF();
    29982998    IEM_MC_END();
     
    30133013    IEM_MC_BEGIN(0, 0);
    30143014    IEM_MC_IF_EFL_BIT_SET(X86_EFL_PF) {
    3015         IEM_MC_REL_JMP_S8(i8Imm);
     3015        IEM_MC_REL_JMP_S8_AND_FINISH(i8Imm);
    30163016    } IEM_MC_ELSE() {
    30173017        IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    30363036        IEM_MC_ADVANCE_RIP_AND_FINISH();
    30373037    } IEM_MC_ELSE() {
    3038         IEM_MC_REL_JMP_S8(i8Imm);
     3038        IEM_MC_REL_JMP_S8_AND_FINISH(i8Imm);
    30393039    } IEM_MC_ENDIF();
    30403040    IEM_MC_END();
     
    30553055    IEM_MC_BEGIN(0, 0);
    30563056    IEM_MC_IF_EFL_BITS_NE(X86_EFL_SF, X86_EFL_OF) {
    3057         IEM_MC_REL_JMP_S8(i8Imm);
     3057        IEM_MC_REL_JMP_S8_AND_FINISH(i8Imm);
    30583058    } IEM_MC_ELSE() {
    30593059        IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    30783078        IEM_MC_ADVANCE_RIP_AND_FINISH();
    30793079    } IEM_MC_ELSE() {
    3080         IEM_MC_REL_JMP_S8(i8Imm);
     3080        IEM_MC_REL_JMP_S8_AND_FINISH(i8Imm);
    30813081    } IEM_MC_ENDIF();
    30823082    IEM_MC_END();
     
    30973097    IEM_MC_BEGIN(0, 0);
    30983098    IEM_MC_IF_EFL_BIT_SET_OR_BITS_NE(X86_EFL_ZF, X86_EFL_SF, X86_EFL_OF) {
    3099         IEM_MC_REL_JMP_S8(i8Imm);
     3099        IEM_MC_REL_JMP_S8_AND_FINISH(i8Imm);
    31003100    } IEM_MC_ELSE() {
    31013101        IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    31203120        IEM_MC_ADVANCE_RIP_AND_FINISH();
    31213121    } IEM_MC_ELSE() {
    3122         IEM_MC_REL_JMP_S8(i8Imm);
     3122        IEM_MC_REL_JMP_S8_AND_FINISH(i8Imm);
    31233123    } IEM_MC_ENDIF();
    31243124    IEM_MC_END();
     
    1031310313            IEM_MC_SUB_GREG_U16(X86_GREG_xCX, 1);
    1031410314            IEM_MC_IF_CX_IS_NZ_AND_EFL_BIT_NOT_SET(X86_EFL_ZF) {
    10315                 IEM_MC_REL_JMP_S8(i8Imm);
     10315                IEM_MC_REL_JMP_S8_AND_FINISH(i8Imm);
    1031610316            } IEM_MC_ELSE() {
    1031710317                IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    1032410324            IEM_MC_SUB_GREG_U32(X86_GREG_xCX, 1);
    1032510325            IEM_MC_IF_ECX_IS_NZ_AND_EFL_BIT_NOT_SET(X86_EFL_ZF) {
    10326                 IEM_MC_REL_JMP_S8(i8Imm);
     10326                IEM_MC_REL_JMP_S8_AND_FINISH(i8Imm);
    1032710327            } IEM_MC_ELSE() {
    1032810328                IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    1033510335            IEM_MC_SUB_GREG_U64(X86_GREG_xCX, 1);
    1033610336            IEM_MC_IF_RCX_IS_NZ_AND_EFL_BIT_NOT_SET(X86_EFL_ZF) {
    10337                 IEM_MC_REL_JMP_S8(i8Imm);
     10337                IEM_MC_REL_JMP_S8_AND_FINISH(i8Imm);
    1033810338            } IEM_MC_ELSE() {
    1033910339                IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    1036310363            IEM_MC_SUB_GREG_U16(X86_GREG_xCX, 1);
    1036410364            IEM_MC_IF_CX_IS_NZ_AND_EFL_BIT_SET(X86_EFL_ZF) {
    10365                 IEM_MC_REL_JMP_S8(i8Imm);
     10365                IEM_MC_REL_JMP_S8_AND_FINISH(i8Imm);
    1036610366            } IEM_MC_ELSE() {
    1036710367                IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    1037410374            IEM_MC_SUB_GREG_U32(X86_GREG_xCX, 1);
    1037510375            IEM_MC_IF_ECX_IS_NZ_AND_EFL_BIT_SET(X86_EFL_ZF) {
    10376                 IEM_MC_REL_JMP_S8(i8Imm);
     10376                IEM_MC_REL_JMP_S8_AND_FINISH(i8Imm);
    1037710377            } IEM_MC_ELSE() {
    1037810378                IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    1038510385            IEM_MC_SUB_GREG_U64(X86_GREG_xCX, 1);
    1038610386            IEM_MC_IF_RCX_IS_NZ_AND_EFL_BIT_SET(X86_EFL_ZF) {
    10387                 IEM_MC_REL_JMP_S8(i8Imm);
     10387                IEM_MC_REL_JMP_S8_AND_FINISH(i8Imm);
    1038810388            } IEM_MC_ELSE() {
    1038910389                IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    1045110451            IEM_MC_SUB_GREG_U16(X86_GREG_xCX, 1);
    1045210452            IEM_MC_IF_CX_IS_NZ() {
    10453                 IEM_MC_REL_JMP_S8(i8Imm);
     10453                IEM_MC_REL_JMP_S8_AND_FINISH(i8Imm);
    1045410454            } IEM_MC_ELSE() {
    1045510455                IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    1046210462            IEM_MC_SUB_GREG_U32(X86_GREG_xCX, 1);
    1046310463            IEM_MC_IF_ECX_IS_NZ() {
    10464                 IEM_MC_REL_JMP_S8(i8Imm);
     10464                IEM_MC_REL_JMP_S8_AND_FINISH(i8Imm);
    1046510465            } IEM_MC_ELSE() {
    1046610466                IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    1047310473            IEM_MC_SUB_GREG_U64(X86_GREG_xCX, 1);
    1047410474            IEM_MC_IF_RCX_IS_NZ() {
    10475                 IEM_MC_REL_JMP_S8(i8Imm);
     10475                IEM_MC_REL_JMP_S8_AND_FINISH(i8Imm);
    1047610476            } IEM_MC_ELSE() {
    1047710477                IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    1050210502                IEM_MC_ADVANCE_RIP_AND_FINISH();
    1050310503            } IEM_MC_ELSE() {
    10504                 IEM_MC_REL_JMP_S8(i8Imm);
     10504                IEM_MC_REL_JMP_S8_AND_FINISH(i8Imm);
    1050510505            } IEM_MC_ENDIF();
    1050610506            IEM_MC_END();
     
    1051210512                IEM_MC_ADVANCE_RIP_AND_FINISH();
    1051310513            } IEM_MC_ELSE() {
    10514                 IEM_MC_REL_JMP_S8(i8Imm);
     10514                IEM_MC_REL_JMP_S8_AND_FINISH(i8Imm);
    1051510515            } IEM_MC_ENDIF();
    1051610516            IEM_MC_END();
     
    1052210522                IEM_MC_ADVANCE_RIP_AND_FINISH();
    1052310523            } IEM_MC_ELSE() {
    10524                 IEM_MC_REL_JMP_S8(i8Imm);
     10524                IEM_MC_REL_JMP_S8_AND_FINISH(i8Imm);
    1052510525            } IEM_MC_ENDIF();
    1052610526            IEM_MC_END();
     
    1061710617            int16_t i16Imm; IEM_OPCODE_GET_NEXT_S16(&i16Imm);
    1061810618            IEM_MC_BEGIN(0, 0);
    10619             IEM_MC_REL_JMP_S16(i16Imm);
     10619            IEM_MC_REL_JMP_S16_AND_FINISH(i16Imm);
    1062010620            IEM_MC_END();
    1062110621            return VINF_SUCCESS;
     
    1062710627            int32_t i32Imm; IEM_OPCODE_GET_NEXT_S32(&i32Imm);
    1062810628            IEM_MC_BEGIN(0, 0);
    10629             IEM_MC_REL_JMP_S32(i32Imm);
     10629            IEM_MC_REL_JMP_S32_AND_FINISH(i32Imm);
    1063010630            IEM_MC_END();
    1063110631            return VINF_SUCCESS;
     
    1066810668
    1066910669    IEM_MC_BEGIN(0, 0);
    10670     IEM_MC_REL_JMP_S8(i8Imm);
     10670    IEM_MC_REL_JMP_S8_AND_FINISH(i8Imm);
    1067110671    IEM_MC_END();
    1067210672    return VINF_SUCCESS;
     
    1171711717                IEM_MC_LOCAL(uint16_t, u16Target);
    1171811718                IEM_MC_FETCH_GREG_U16(u16Target, IEM_GET_MODRM_RM(pVCpu, bRm));
    11719                 IEM_MC_SET_RIP_U16(u16Target);
     11719                IEM_MC_SET_RIP_U16_AND_FINISH(u16Target);
    1172011720                IEM_MC_END()
    1172111721                return VINF_SUCCESS;
     
    1172511725                IEM_MC_LOCAL(uint32_t, u32Target);
    1172611726                IEM_MC_FETCH_GREG_U32(u32Target, IEM_GET_MODRM_RM(pVCpu, bRm));
    11727                 IEM_MC_SET_RIP_U32(u32Target);
     11727                IEM_MC_SET_RIP_U32_AND_FINISH(u32Target);
    1172811728                IEM_MC_END()
    1172911729                return VINF_SUCCESS;
     
    1173311733                IEM_MC_LOCAL(uint64_t, u64Target);
    1173411734                IEM_MC_FETCH_GREG_U64(u64Target, IEM_GET_MODRM_RM(pVCpu, bRm));
    11735                 IEM_MC_SET_RIP_U64(u64Target);
     11735                IEM_MC_SET_RIP_U64_AND_FINISH(u64Target);
    1173611736                IEM_MC_END()
    1173711737                return VINF_SUCCESS;
     
    1175211752                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1175311753                IEM_MC_FETCH_MEM_U16(u16Target, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);
    11754                 IEM_MC_SET_RIP_U16(u16Target);
     11754                IEM_MC_SET_RIP_U16_AND_FINISH(u16Target);
    1175511755                IEM_MC_END()
    1175611756                return VINF_SUCCESS;
     
    1176311763                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1176411764                IEM_MC_FETCH_MEM_U32(u32Target, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);
    11765                 IEM_MC_SET_RIP_U32(u32Target);
     11765                IEM_MC_SET_RIP_U32_AND_FINISH(u32Target);
    1176611766                IEM_MC_END()
    1176711767                return VINF_SUCCESS;
     
    1177411774                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1177511775                IEM_MC_FETCH_MEM_U64(u64Target, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);
    11776                 IEM_MC_SET_RIP_U64(u64Target);
     11776                IEM_MC_SET_RIP_U64_AND_FINISH(u64Target);
    1177711777                IEM_MC_END()
    1177811778                return VINF_SUCCESS;
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsTwoByte0f.cpp.h

    r97356 r97357  
    77797779        IEM_MC_BEGIN(0, 0);
    77807780        IEM_MC_IF_EFL_BIT_SET(X86_EFL_OF) {
    7781             IEM_MC_REL_JMP_S16(i16Imm);
     7781            IEM_MC_REL_JMP_S16_AND_FINISH(i16Imm);
    77827782        } IEM_MC_ELSE() {
    77837783            IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    77927792        IEM_MC_BEGIN(0, 0);
    77937793        IEM_MC_IF_EFL_BIT_SET(X86_EFL_OF) {
    7794             IEM_MC_REL_JMP_S32(i32Imm);
     7794            IEM_MC_REL_JMP_S32_AND_FINISH(i32Imm);
    77957795        } IEM_MC_ELSE() {
    77967796            IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    78177817            IEM_MC_ADVANCE_RIP_AND_FINISH();
    78187818        } IEM_MC_ELSE() {
    7819             IEM_MC_REL_JMP_S16(i16Imm);
     7819            IEM_MC_REL_JMP_S16_AND_FINISH(i16Imm);
    78207820        } IEM_MC_ENDIF();
    78217821        IEM_MC_END();
     
    78307830            IEM_MC_ADVANCE_RIP_AND_FINISH();
    78317831        } IEM_MC_ELSE() {
    7832             IEM_MC_REL_JMP_S32(i32Imm);
     7832            IEM_MC_REL_JMP_S32_AND_FINISH(i32Imm);
    78337833        } IEM_MC_ENDIF();
    78347834        IEM_MC_END();
     
    78517851        IEM_MC_BEGIN(0, 0);
    78527852        IEM_MC_IF_EFL_BIT_SET(X86_EFL_CF) {
    7853             IEM_MC_REL_JMP_S16(i16Imm);
     7853            IEM_MC_REL_JMP_S16_AND_FINISH(i16Imm);
    78547854        } IEM_MC_ELSE() {
    78557855            IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    78647864        IEM_MC_BEGIN(0, 0);
    78657865        IEM_MC_IF_EFL_BIT_SET(X86_EFL_CF) {
    7866             IEM_MC_REL_JMP_S32(i32Imm);
     7866            IEM_MC_REL_JMP_S32_AND_FINISH(i32Imm);
    78677867        } IEM_MC_ELSE() {
    78687868            IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    78897889            IEM_MC_ADVANCE_RIP_AND_FINISH();
    78907890        } IEM_MC_ELSE() {
    7891             IEM_MC_REL_JMP_S16(i16Imm);
     7891            IEM_MC_REL_JMP_S16_AND_FINISH(i16Imm);
    78927892        } IEM_MC_ENDIF();
    78937893        IEM_MC_END();
     
    79027902            IEM_MC_ADVANCE_RIP_AND_FINISH();
    79037903        } IEM_MC_ELSE() {
    7904             IEM_MC_REL_JMP_S32(i32Imm);
     7904            IEM_MC_REL_JMP_S32_AND_FINISH(i32Imm);
    79057905        } IEM_MC_ENDIF();
    79067906        IEM_MC_END();
     
    79237923        IEM_MC_BEGIN(0, 0);
    79247924        IEM_MC_IF_EFL_BIT_SET(X86_EFL_ZF) {
    7925             IEM_MC_REL_JMP_S16(i16Imm);
     7925            IEM_MC_REL_JMP_S16_AND_FINISH(i16Imm);
    79267926        } IEM_MC_ELSE() {
    79277927            IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    79367936        IEM_MC_BEGIN(0, 0);
    79377937        IEM_MC_IF_EFL_BIT_SET(X86_EFL_ZF) {
    7938             IEM_MC_REL_JMP_S32(i32Imm);
     7938            IEM_MC_REL_JMP_S32_AND_FINISH(i32Imm);
    79397939        } IEM_MC_ELSE() {
    79407940            IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    79617961            IEM_MC_ADVANCE_RIP_AND_FINISH();
    79627962        } IEM_MC_ELSE() {
    7963             IEM_MC_REL_JMP_S16(i16Imm);
     7963            IEM_MC_REL_JMP_S16_AND_FINISH(i16Imm);
    79647964        } IEM_MC_ENDIF();
    79657965        IEM_MC_END();
     
    79747974            IEM_MC_ADVANCE_RIP_AND_FINISH();
    79757975        } IEM_MC_ELSE() {
    7976             IEM_MC_REL_JMP_S32(i32Imm);
     7976            IEM_MC_REL_JMP_S32_AND_FINISH(i32Imm);
    79777977        } IEM_MC_ENDIF();
    79787978        IEM_MC_END();
     
    79957995        IEM_MC_BEGIN(0, 0);
    79967996        IEM_MC_IF_EFL_ANY_BITS_SET(X86_EFL_CF | X86_EFL_ZF) {
    7997             IEM_MC_REL_JMP_S16(i16Imm);
     7997            IEM_MC_REL_JMP_S16_AND_FINISH(i16Imm);
    79987998        } IEM_MC_ELSE() {
    79997999            IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    80088008        IEM_MC_BEGIN(0, 0);
    80098009        IEM_MC_IF_EFL_ANY_BITS_SET(X86_EFL_CF | X86_EFL_ZF) {
    8010             IEM_MC_REL_JMP_S32(i32Imm);
     8010            IEM_MC_REL_JMP_S32_AND_FINISH(i32Imm);
    80118011        } IEM_MC_ELSE() {
    80128012            IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    80338033            IEM_MC_ADVANCE_RIP_AND_FINISH();
    80348034        } IEM_MC_ELSE() {
    8035             IEM_MC_REL_JMP_S16(i16Imm);
     8035            IEM_MC_REL_JMP_S16_AND_FINISH(i16Imm);
    80368036        } IEM_MC_ENDIF();
    80378037        IEM_MC_END();
     
    80468046            IEM_MC_ADVANCE_RIP_AND_FINISH();
    80478047        } IEM_MC_ELSE() {
    8048             IEM_MC_REL_JMP_S32(i32Imm);
     8048            IEM_MC_REL_JMP_S32_AND_FINISH(i32Imm);
    80498049        } IEM_MC_ENDIF();
    80508050        IEM_MC_END();
     
    80678067        IEM_MC_BEGIN(0, 0);
    80688068        IEM_MC_IF_EFL_BIT_SET(X86_EFL_SF) {
    8069             IEM_MC_REL_JMP_S16(i16Imm);
     8069            IEM_MC_REL_JMP_S16_AND_FINISH(i16Imm);
    80708070        } IEM_MC_ELSE() {
    80718071            IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    80808080        IEM_MC_BEGIN(0, 0);
    80818081        IEM_MC_IF_EFL_BIT_SET(X86_EFL_SF) {
    8082             IEM_MC_REL_JMP_S32(i32Imm);
     8082            IEM_MC_REL_JMP_S32_AND_FINISH(i32Imm);
    80838083        } IEM_MC_ELSE() {
    80848084            IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    81058105            IEM_MC_ADVANCE_RIP_AND_FINISH();
    81068106        } IEM_MC_ELSE() {
    8107             IEM_MC_REL_JMP_S16(i16Imm);
     8107            IEM_MC_REL_JMP_S16_AND_FINISH(i16Imm);
    81088108        } IEM_MC_ENDIF();
    81098109        IEM_MC_END();
     
    81188118            IEM_MC_ADVANCE_RIP_AND_FINISH();
    81198119        } IEM_MC_ELSE() {
    8120             IEM_MC_REL_JMP_S32(i32Imm);
     8120            IEM_MC_REL_JMP_S32_AND_FINISH(i32Imm);
    81218121        } IEM_MC_ENDIF();
    81228122        IEM_MC_END();
     
    81398139        IEM_MC_BEGIN(0, 0);
    81408140        IEM_MC_IF_EFL_BIT_SET(X86_EFL_PF) {
    8141             IEM_MC_REL_JMP_S16(i16Imm);
     8141            IEM_MC_REL_JMP_S16_AND_FINISH(i16Imm);
    81428142        } IEM_MC_ELSE() {
    81438143            IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    81528152        IEM_MC_BEGIN(0, 0);
    81538153        IEM_MC_IF_EFL_BIT_SET(X86_EFL_PF) {
    8154             IEM_MC_REL_JMP_S32(i32Imm);
     8154            IEM_MC_REL_JMP_S32_AND_FINISH(i32Imm);
    81558155        } IEM_MC_ELSE() {
    81568156            IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    81778177            IEM_MC_ADVANCE_RIP_AND_FINISH();
    81788178        } IEM_MC_ELSE() {
    8179             IEM_MC_REL_JMP_S16(i16Imm);
     8179            IEM_MC_REL_JMP_S16_AND_FINISH(i16Imm);
    81808180        } IEM_MC_ENDIF();
    81818181        IEM_MC_END();
     
    81908190            IEM_MC_ADVANCE_RIP_AND_FINISH();
    81918191        } IEM_MC_ELSE() {
    8192             IEM_MC_REL_JMP_S32(i32Imm);
     8192            IEM_MC_REL_JMP_S32_AND_FINISH(i32Imm);
    81938193        } IEM_MC_ENDIF();
    81948194        IEM_MC_END();
     
    82118211        IEM_MC_BEGIN(0, 0);
    82128212        IEM_MC_IF_EFL_BITS_NE(X86_EFL_SF, X86_EFL_OF) {
    8213             IEM_MC_REL_JMP_S16(i16Imm);
     8213            IEM_MC_REL_JMP_S16_AND_FINISH(i16Imm);
    82148214        } IEM_MC_ELSE() {
    82158215            IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    82248224        IEM_MC_BEGIN(0, 0);
    82258225        IEM_MC_IF_EFL_BITS_NE(X86_EFL_SF, X86_EFL_OF) {
    8226             IEM_MC_REL_JMP_S32(i32Imm);
     8226            IEM_MC_REL_JMP_S32_AND_FINISH(i32Imm);
    82278227        } IEM_MC_ELSE() {
    82288228            IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    82498249            IEM_MC_ADVANCE_RIP_AND_FINISH();
    82508250        } IEM_MC_ELSE() {
    8251             IEM_MC_REL_JMP_S16(i16Imm);
     8251            IEM_MC_REL_JMP_S16_AND_FINISH(i16Imm);
    82528252        } IEM_MC_ENDIF();
    82538253        IEM_MC_END();
     
    82628262            IEM_MC_ADVANCE_RIP_AND_FINISH();
    82638263        } IEM_MC_ELSE() {
    8264             IEM_MC_REL_JMP_S32(i32Imm);
     8264            IEM_MC_REL_JMP_S32_AND_FINISH(i32Imm);
    82658265        } IEM_MC_ENDIF();
    82668266        IEM_MC_END();
     
    82838283        IEM_MC_BEGIN(0, 0);
    82848284        IEM_MC_IF_EFL_BIT_SET_OR_BITS_NE(X86_EFL_ZF, X86_EFL_SF, X86_EFL_OF) {
    8285             IEM_MC_REL_JMP_S16(i16Imm);
     8285            IEM_MC_REL_JMP_S16_AND_FINISH(i16Imm);
    82868286        } IEM_MC_ELSE() {
    82878287            IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    82968296        IEM_MC_BEGIN(0, 0);
    82978297        IEM_MC_IF_EFL_BIT_SET_OR_BITS_NE(X86_EFL_ZF, X86_EFL_SF, X86_EFL_OF) {
    8298             IEM_MC_REL_JMP_S32(i32Imm);
     8298            IEM_MC_REL_JMP_S32_AND_FINISH(i32Imm);
    82998299        } IEM_MC_ELSE() {
    83008300            IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    83218321            IEM_MC_ADVANCE_RIP_AND_FINISH();
    83228322        } IEM_MC_ELSE() {
    8323             IEM_MC_REL_JMP_S16(i16Imm);
     8323            IEM_MC_REL_JMP_S16_AND_FINISH(i16Imm);
    83248324        } IEM_MC_ENDIF();
    83258325        IEM_MC_END();
     
    83348334            IEM_MC_ADVANCE_RIP_AND_FINISH();
    83358335        } IEM_MC_ELSE() {
    8336             IEM_MC_REL_JMP_S32(i32Imm);
     8336            IEM_MC_REL_JMP_S32_AND_FINISH(i32Imm);
    83378337        } IEM_MC_ENDIF();
    83388338        IEM_MC_END();
  • trunk/src/VBox/VMM/include/IEMMc.h

    r97356 r97357  
    5858 *       if not the last MC statement. */
    5959#define IEM_MC_ADVANCE_RIP_AND_FINISH()                 iemRegUpdateRipAndClearRF(pVCpu)
    60 #define IEM_MC_REL_JMP_S8(a_i8)                         IEM_MC_RETURN_ON_FAILURE(iemRegRipRelativeJumpS8(pVCpu, a_i8))
    61 #define IEM_MC_REL_JMP_S16(a_i16)                       IEM_MC_RETURN_ON_FAILURE(iemRegRipRelativeJumpS16(pVCpu, a_i16))
    62 #define IEM_MC_REL_JMP_S32(a_i32)                       IEM_MC_RETURN_ON_FAILURE(iemRegRipRelativeJumpS32(pVCpu, a_i32))
    63 #define IEM_MC_SET_RIP_U16(a_u16NewIP)                  IEM_MC_RETURN_ON_FAILURE(iemRegRipJump((pVCpu), (a_u16NewIP)))
    64 #define IEM_MC_SET_RIP_U32(a_u32NewIP)                  IEM_MC_RETURN_ON_FAILURE(iemRegRipJump((pVCpu), (a_u32NewIP)))
    65 #define IEM_MC_SET_RIP_U64(a_u64NewIP)                  IEM_MC_RETURN_ON_FAILURE(iemRegRipJump((pVCpu), (a_u64NewIP)))
     60/** Tries to set RIP (may trigger \#GP) and finishes the instruction. */
     61#define IEM_MC_REL_JMP_S8_AND_FINISH(a_i8)              IEM_MC_RETURN_ON_FAILURE(iemRegRipRelativeJumpS8(pVCpu, a_i8))
     62/** Tries to set RIP (may trigger \#GP) and finishes the instruction. */
     63#define IEM_MC_REL_JMP_S16_AND_FINISH(a_i16)            IEM_MC_RETURN_ON_FAILURE(iemRegRipRelativeJumpS16(pVCpu, a_i16))
     64/** Tries to set RIP (may trigger \#GP) and finishes the instruction. */
     65#define IEM_MC_REL_JMP_S32_AND_FINISH(a_i32)            IEM_MC_RETURN_ON_FAILURE(iemRegRipRelativeJumpS32(pVCpu, a_i32))
     66/** Tries to set RIP (may trigger \#GP) and finishes the instruction. */
     67#define IEM_MC_SET_RIP_U16_AND_FINISH(a_u16NewIP)       IEM_MC_RETURN_ON_FAILURE(iemRegRipJump((pVCpu), (a_u16NewIP)))
     68/** Tries to set RIP (may trigger \#GP) and finishes the instruction. */
     69#define IEM_MC_SET_RIP_U32_AND_FINISH(a_u32NewIP)       IEM_MC_RETURN_ON_FAILURE(iemRegRipJump((pVCpu), (a_u32NewIP)))
     70/** Tries to set RIP (may trigger \#GP) and finishes the instruction. */
     71#define IEM_MC_SET_RIP_U64_AND_FINISH(a_u64NewIP)       IEM_MC_RETURN_ON_FAILURE(iemRegRipJump((pVCpu), (a_u64NewIP)))
     72
    6673#define IEM_MC_RAISE_DIVIDE_ERROR()                     return iemRaiseDivideError(pVCpu)
    6774#define IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE()       \
  • trunk/src/VBox/VMM/testcase/tstIEMCheckMc.cpp

    r97356 r97357  
    576576
    577577#define IEM_MC_ADVANCE_RIP_AND_FINISH()                 do { (void)fMcBegin; return VINF_SUCCESS; } while (0)
    578 #define IEM_MC_REL_JMP_S8(a_i8)                         do { (void)fMcBegin; CHK_TYPE(int8_t, a_i8); } while (0)
    579 #define IEM_MC_REL_JMP_S16(a_i16)                       do { (void)fMcBegin; CHK_TYPE(int16_t, a_i16); } while (0)
    580 #define IEM_MC_REL_JMP_S32(a_i32)                       do { (void)fMcBegin; CHK_TYPE(int32_t, a_i32); } while (0)
    581 #define IEM_MC_SET_RIP_U16(a_u16NewIP)                  do { (void)fMcBegin; CHK_TYPE(uint16_t, a_u16NewIP); } while (0)
    582 #define IEM_MC_SET_RIP_U32(a_u32NewIP)                  do { (void)fMcBegin; CHK_TYPE(uint32_t, a_u32NewIP); } while (0)
    583 #define IEM_MC_SET_RIP_U64(a_u64NewIP)                  do { (void)fMcBegin; CHK_TYPE(uint64_t, a_u64NewIP); } while (0)
     578#define IEM_MC_REL_JMP_S8_AND_FINISH(a_i8)              do { (void)fMcBegin; CHK_TYPE(int8_t, a_i8); return VINF_SUCCESS; } while (0)
     579#define IEM_MC_REL_JMP_S16_AND_FINISH(a_i16)            do { (void)fMcBegin; CHK_TYPE(int16_t, a_i16); return VINF_SUCCESS; } while (0)
     580#define IEM_MC_REL_JMP_S32_AND_FINISH(a_i32)            do { (void)fMcBegin; CHK_TYPE(int32_t, a_i32); return VINF_SUCCESS; } while (0)
     581#define IEM_MC_SET_RIP_U16_AND_FINISH(a_u16NewIP)       do { (void)fMcBegin; CHK_TYPE(uint16_t, a_u16NewIP); return VINF_SUCCESS; } while (0)
     582#define IEM_MC_SET_RIP_U32_AND_FINISH(a_u32NewIP)       do { (void)fMcBegin; CHK_TYPE(uint32_t, a_u32NewIP); return VINF_SUCCESS; } while (0)
     583#define IEM_MC_SET_RIP_U64_AND_FINISH(a_u64NewIP)       do { (void)fMcBegin; CHK_TYPE(uint64_t, a_u64NewIP); return VINF_SUCCESS; } while (0)
    584584#define IEM_MC_RAISE_DIVIDE_ERROR()                     do { (void)fMcBegin; return VERR_TRPM_ACTIVE_TRAP; } while (0)
    585585#define IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE()       do { (void)fMcBegin; } while (0)
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