VirtualBox

Changeset 106423 in vbox


Ignore:
Timestamp:
Oct 17, 2024 10:10:59 AM (4 months ago)
Author:
vboxsync
Message:

VMM/IEM: Reduced the number of parameters for iemNativeEmitStackPush & iemNativeEmitStackPop. bugref:10720

File:
1 edited

Legend:

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

    r106416 r106423  
    82648264*   Stack Accesses.                                                                                                              *
    82658265*********************************************************************************************************************************/
    8266 /*                                                     RT_MAKE_U32_FROM_U8(cBitsVar, cBitsFlat, fSReg, 0) */
    82678266#define IEM_MC_PUSH_U16(a_u16Value) \
    8268     off = iemNativeEmitStackPush(pReNative, off, a_u16Value, RT_MAKE_U32_FROM_U8(16,  0, 0, 0), \
    8269                                  (uintptr_t)iemNativeHlpStackStoreU16, pCallEntry->idxInstr)
     8267    off = iemNativeEmitStackPush<16, 0, 0>(pReNative, off, a_u16Value, (uintptr_t)iemNativeHlpStackStoreU16, pCallEntry->idxInstr)
    82708268#define IEM_MC_PUSH_U32(a_u32Value) \
    8271     off = iemNativeEmitStackPush(pReNative, off, a_u32Value, RT_MAKE_U32_FROM_U8(32,  0, 0, 0), \
    8272                                  (uintptr_t)iemNativeHlpStackStoreU32, pCallEntry->idxInstr)
     8269    off = iemNativeEmitStackPush<32, 0, 0>(pReNative, off, a_u32Value, (uintptr_t)iemNativeHlpStackStoreU32, pCallEntry->idxInstr)
    82738270#define IEM_MC_PUSH_U32_SREG(a_uSegVal) \
    8274     off = iemNativeEmitStackPush(pReNative, off, a_uSegVal,  RT_MAKE_U32_FROM_U8(32,  0, 1, 0), \
    8275                                  (uintptr_t)iemNativeHlpStackStoreU32SReg, pCallEntry->idxInstr)
     8271    off = iemNativeEmitStackPush<32, 0, 1>(pReNative, off, a_uSegVal,  (uintptr_t)iemNativeHlpStackStoreU32SReg, pCallEntry->idxInstr)
    82768272#define IEM_MC_PUSH_U64(a_u64Value) \
    8277     off = iemNativeEmitStackPush(pReNative, off, a_u64Value, RT_MAKE_U32_FROM_U8(64,  0, 0, 0), \
    8278                                  (uintptr_t)iemNativeHlpStackStoreU64, pCallEntry->idxInstr)
     8273    off = iemNativeEmitStackPush<64, 0, 0>(pReNative, off, a_u64Value, (uintptr_t)iemNativeHlpStackStoreU64, pCallEntry->idxInstr)
    82798274
    82808275#define IEM_MC_FLAT32_PUSH_U16(a_u16Value) \
    8281     off = iemNativeEmitStackPush(pReNative, off, a_u16Value, RT_MAKE_U32_FROM_U8(16, 32, 0, 0), \
    8282                                  (uintptr_t)iemNativeHlpStackFlatStoreU16, pCallEntry->idxInstr)
     8276    off = iemNativeEmitStackPush<16, 32, 0>(pReNative, off, a_u16Value, (uintptr_t)iemNativeHlpStackFlatStoreU16, pCallEntry->idxInstr)
    82838277#define IEM_MC_FLAT32_PUSH_U32(a_u32Value) \
    8284     off = iemNativeEmitStackPush(pReNative, off, a_u32Value, RT_MAKE_U32_FROM_U8(32, 32, 0, 0), \
    8285                                  (uintptr_t)iemNativeHlpStackFlatStoreU32, pCallEntry->idxInstr)
     8278    off = iemNativeEmitStackPush<32, 32, 0>(pReNative, off, a_u32Value, (uintptr_t)iemNativeHlpStackFlatStoreU32, pCallEntry->idxInstr)
    82868279#define IEM_MC_FLAT32_PUSH_U32_SREG(a_u32Value) \
    8287     off = iemNativeEmitStackPush(pReNative, off, a_u32Value, RT_MAKE_U32_FROM_U8(32, 32, 1, 0), \
    8288                                  (uintptr_t)iemNativeHlpStackFlatStoreU32SReg, pCallEntry->idxInstr)
     8280    off = iemNativeEmitStackPush<32, 32, 1>(pReNative, off, a_u32Value, (uintptr_t)iemNativeHlpStackFlatStoreU32SReg, pCallEntry->idxInstr)
    82898281
    82908282#define IEM_MC_FLAT64_PUSH_U16(a_u16Value) \
    8291     off = iemNativeEmitStackPush(pReNative, off, a_u16Value, RT_MAKE_U32_FROM_U8(16, 64, 0, 0), \
    8292                                  (uintptr_t)iemNativeHlpStackFlatStoreU16, pCallEntry->idxInstr)
     8283    off = iemNativeEmitStackPush<16, 64, 0>(pReNative, off, a_u16Value, (uintptr_t)iemNativeHlpStackFlatStoreU16, pCallEntry->idxInstr)
    82938284#define IEM_MC_FLAT64_PUSH_U64(a_u64Value) \
    8294     off = iemNativeEmitStackPush(pReNative, off, a_u64Value, RT_MAKE_U32_FROM_U8(64, 64, 0, 0), \
    8295                                  (uintptr_t)iemNativeHlpStackFlatStoreU64, pCallEntry->idxInstr)
     8285    off = iemNativeEmitStackPush<64, 64, 0>(pReNative, off, a_u64Value, (uintptr_t)iemNativeHlpStackFlatStoreU64, pCallEntry->idxInstr)
    82968286
    82978287
    82988288/** IEM_MC[|_FLAT32|_FLAT64]_PUSH_U16/32/32_SREG/64 */
    8299 DECL_INLINE_THROW(uint32_t)
    8300 iemNativeEmitStackPush(PIEMRECOMPILERSTATE pReNative, uint32_t off, uint8_t idxVarValue,
    8301                        uint32_t cBitsVarAndFlat, uintptr_t pfnFunction, uint8_t idxInstr)
     8289template<uint8_t const a_cBitsVar, uint8_t const a_cBitsFlat, bool a_fIsSegReg = false>
     8290DECL_INLINE_THROW(uint32_t)
     8291iemNativeEmitStackPush(PIEMRECOMPILERSTATE pReNative, uint32_t off, uint8_t idxVarValue, uintptr_t pfnFunction, uint8_t idxInstr)
    83028292{
    83038293    /*
     
    83078297    PIEMNATIVEVAR const pVarValue = &pReNative->Core.aVars[IEMNATIVE_VAR_IDX_UNPACK(idxVarValue)];
    83088298#ifdef VBOX_STRICT
    8309     if (RT_BYTE2(cBitsVarAndFlat) != 0)
     8299    uint32_t const cTmplArgs = RT_MAKE_U32_FROM_U8(a_cBitsVar, a_cBitsFlat, a_fIsSegReg, 0);
     8300    if (a_cBitsFlat != 0)
    83108301    {
    83118302        Assert(   (pReNative->fExec & IEM_F_MODE_MASK) == IEM_F_MODE_X86_64BIT
     
    83138304               || (pReNative->fExec & IEM_F_MODE_MASK) == IEM_F_MODE_X86_32BIT_FLAT);
    83148305        Assert(   pfnFunction
    8315                == (  cBitsVarAndFlat == RT_MAKE_U32_FROM_U8(16, 32, 0, 0) ? (uintptr_t)iemNativeHlpStackFlatStoreU16
    8316                    : cBitsVarAndFlat == RT_MAKE_U32_FROM_U8(32, 32, 0, 0) ? (uintptr_t)iemNativeHlpStackFlatStoreU32
    8317                    : cBitsVarAndFlat == RT_MAKE_U32_FROM_U8(32, 32, 1, 0) ? (uintptr_t)iemNativeHlpStackFlatStoreU32SReg
    8318                    : cBitsVarAndFlat == RT_MAKE_U32_FROM_U8(16, 64, 0, 0) ? (uintptr_t)iemNativeHlpStackFlatStoreU16
    8319                    : cBitsVarAndFlat == RT_MAKE_U32_FROM_U8(64, 64, 0, 0) ? (uintptr_t)iemNativeHlpStackFlatStoreU64
     8306               == (  cTmplArgs == RT_MAKE_U32_FROM_U8(16, 32, 0, 0) ? (uintptr_t)iemNativeHlpStackFlatStoreU16
     8307                   : cTmplArgs == RT_MAKE_U32_FROM_U8(32, 32, 0, 0) ? (uintptr_t)iemNativeHlpStackFlatStoreU32
     8308                   : cTmplArgs == RT_MAKE_U32_FROM_U8(32, 32, 1, 0) ? (uintptr_t)iemNativeHlpStackFlatStoreU32SReg
     8309                   : cTmplArgs == RT_MAKE_U32_FROM_U8(16, 64, 0, 0) ? (uintptr_t)iemNativeHlpStackFlatStoreU16
     8310                   : cTmplArgs == RT_MAKE_U32_FROM_U8(64, 64, 0, 0) ? (uintptr_t)iemNativeHlpStackFlatStoreU64
    83208311                   : UINT64_C(0xc000b000a0009000) ));
    83218312    }
    83228313    else
    83238314        Assert(   pfnFunction
    8324                == (  cBitsVarAndFlat == RT_MAKE_U32_FROM_U8(16, 0, 0, 0) ? (uintptr_t)iemNativeHlpStackStoreU16
    8325                    : cBitsVarAndFlat == RT_MAKE_U32_FROM_U8(32, 0, 0, 0) ? (uintptr_t)iemNativeHlpStackStoreU32
    8326                    : cBitsVarAndFlat == RT_MAKE_U32_FROM_U8(32, 0, 1, 0) ? (uintptr_t)iemNativeHlpStackStoreU32SReg
    8327                    : cBitsVarAndFlat == RT_MAKE_U32_FROM_U8(64, 0, 0, 0) ? (uintptr_t)iemNativeHlpStackStoreU64
     8315               == (  cTmplArgs == RT_MAKE_U32_FROM_U8(16, 0, 0, 0) ? (uintptr_t)iemNativeHlpStackStoreU16
     8316                   : cTmplArgs == RT_MAKE_U32_FROM_U8(32, 0, 0, 0) ? (uintptr_t)iemNativeHlpStackStoreU32
     8317                   : cTmplArgs == RT_MAKE_U32_FROM_U8(32, 0, 1, 0) ? (uintptr_t)iemNativeHlpStackStoreU32SReg
     8318                   : cTmplArgs == RT_MAKE_U32_FROM_U8(64, 0, 0, 0) ? (uintptr_t)iemNativeHlpStackStoreU64
    83288319                   : UINT64_C(0xc000b000a0009000) ));
    83298320#endif
     
    83508341     * (Code structure is very similar to that of PUSH)
    83518342     */
    8352     uint8_t const cbMem       = RT_BYTE1(cBitsVarAndFlat) / 8;
    8353     bool const    fIsSegReg   = RT_BYTE3(cBitsVarAndFlat) != 0;
    8354     bool const    fIsIntelSeg = fIsSegReg && IEM_IS_GUEST_CPU_INTEL(pReNative->pVCpu);
     8343    uint8_t const cbMem       = a_cBitsVar / 8;
     8344    bool const    fIsIntelSeg = a_fIsSegReg && IEM_IS_GUEST_CPU_INTEL(pReNative->pVCpu);
    83558345    uint8_t const cbMemAccess = !fIsIntelSeg || (pReNative->fExec & IEM_F_MODE_MASK) == IEM_F_MODE_X86_16BIT
    83568346                              ? cbMem : sizeof(uint16_t);
    8357     uint8_t const cBitsFlat   = RT_BYTE2(cBitsVarAndFlat);      RT_NOREF(cBitsFlat);
    83588347    uint8_t const idxRegRsp   = iemNativeRegAllocTmpForGuestReg(pReNative, &off, IEMNATIVEGSTREG_GPR(X86_GREG_xSP),
    83598348                                                                kIemNativeGstRegUse_ForUpdate, true /*fNoVolatileRegs*/);
    8360     uint8_t const idxRegEffSp = cBitsFlat != 0 ? idxRegRsp : iemNativeRegAllocTmp(pReNative, &off);
     8349    uint8_t const idxRegEffSp = a_cBitsFlat != 0 ? idxRegRsp : iemNativeRegAllocTmp(pReNative, &off);
    83618350    uint32_t      offFixupJumpToUseOtherBitSp = UINT32_MAX;
    8362     if (cBitsFlat != 0)
     8351    if RT_CONSTEXPR_IF(a_cBitsFlat != 0)
    83638352    {
    83648353        Assert(idxRegEffSp == idxRegRsp);
    8365         Assert(cBitsFlat == 32 || cBitsFlat == 64);
     8354        Assert(a_cBitsFlat == 32 || a_cBitsFlat == 64);
    83668355        Assert(IEM_F_MODE_X86_IS_FLAT(pReNative->fExec));
    8367         if (cBitsFlat == 64)
     8356        if RT_CONSTEXPR_IF(a_cBitsFlat == 64)
    83688357            off = iemNativeEmitSubGprImm(pReNative, off, idxRegRsp, cbMem);
    83698358        else
     
    84028391     * we're skipping lookup).
    84038392     */
    8404     uint8_t const  iSegReg           = cBitsFlat != 0 ? UINT8_MAX : X86_SREG_SS;
     8393    uint8_t const  iSegReg           = a_cBitsFlat != 0 ? UINT8_MAX : X86_SREG_SS;
    84058394    IEMNATIVEEMITTLBSTATE const TlbState(pReNative, idxRegEffSp, &off, iSegReg, cbMemAccess);
    84068395    uint16_t const uTlbSeqNo         = pReNative->uTlbSeqNo++;
     
    84258414     * Use16BitSp:
    84268415     */
    8427     if (cBitsFlat == 0)
     8416    if RT_CONSTEXPR_IF(a_cBitsFlat == 0)
    84288417    {
    84298418#ifdef RT_ARCH_AMD64
     
    85848573                    break;
    85858574                case 4:
    8586                     Assert(!fIsSegReg);
     8575                    Assert(!a_fIsSegReg);
    85878576                    off = iemNativeEmitStoreImm32ByGprEx(pCodeBuf, off, (uint32_t)pVarValue->u.uValue,
    85888577                                                         idxRegMemResult, TlbState.idxReg1);
     
    86258614
    86268615
    8627 /*                                                     RT_MAKE_U32_FROM_U8(cBitsVar, cBitsFlat, 0, 0) */
    86288616#define IEM_MC_POP_GREG_U16(a_iGReg) \
    8629     off = iemNativeEmitStackPopGReg(pReNative, off, a_iGReg, RT_MAKE_U32_FROM_U8(16,  0, 0, 0), \
    8630                                     (uintptr_t)iemNativeHlpStackFetchU16, pCallEntry->idxInstr)
     8617    off = iemNativeEmitStackPopGReg<16, 0>(pReNative, off, a_iGReg, (uintptr_t)iemNativeHlpStackFetchU16, pCallEntry->idxInstr)
    86318618#define IEM_MC_POP_GREG_U32(a_iGReg) \
    8632     off = iemNativeEmitStackPopGReg(pReNative, off, a_iGReg, RT_MAKE_U32_FROM_U8(32,  0, 0, 0), \
    8633                                     (uintptr_t)iemNativeHlpStackFetchU32, pCallEntry->idxInstr)
     8619    off = iemNativeEmitStackPopGReg<32, 0>(pReNative, off, a_iGReg, (uintptr_t)iemNativeHlpStackFetchU32, pCallEntry->idxInstr)
    86348620#define IEM_MC_POP_GREG_U64(a_iGReg) \
    8635     off = iemNativeEmitStackPopGReg(pReNative, off, a_iGReg, RT_MAKE_U32_FROM_U8(64,  0, 0, 0), \
    8636                                     (uintptr_t)iemNativeHlpStackFetchU64, pCallEntry->idxInstr)
     8621    off = iemNativeEmitStackPopGReg<64, 0>(pReNative, off, a_iGReg, (uintptr_t)iemNativeHlpStackFetchU64, pCallEntry->idxInstr)
    86378622
    86388623#define IEM_MC_FLAT32_POP_GREG_U16(a_iGReg) \
    8639     off = iemNativeEmitStackPopGReg(pReNative, off, a_iGReg, RT_MAKE_U32_FROM_U8(16, 32, 0, 0), \
    8640                                     (uintptr_t)iemNativeHlpStackFlatFetchU16, pCallEntry->idxInstr)
     8624    off = iemNativeEmitStackPopGReg<16, 32>(pReNative, off, a_iGReg, (uintptr_t)iemNativeHlpStackFlatFetchU16, pCallEntry->idxInstr)
    86418625#define IEM_MC_FLAT32_POP_GREG_U32(a_iGReg) \
    8642     off = iemNativeEmitStackPopGReg(pReNative, off, a_iGReg, RT_MAKE_U32_FROM_U8(32, 32, 0, 0), \
    8643                                     (uintptr_t)iemNativeHlpStackFlatFetchU32, pCallEntry->idxInstr)
     8626    off = iemNativeEmitStackPopGReg<32, 32>(pReNative, off, a_iGReg, (uintptr_t)iemNativeHlpStackFlatFetchU32, pCallEntry->idxInstr)
    86448627
    86458628#define IEM_MC_FLAT64_POP_GREG_U16(a_iGReg) \
    8646     off = iemNativeEmitStackPopGReg(pReNative, off, a_iGReg, RT_MAKE_U32_FROM_U8(16, 64, 0, 0), \
    8647                                     (uintptr_t)iemNativeHlpStackFlatFetchU16, pCallEntry->idxInstr)
     8629    off = iemNativeEmitStackPopGReg<16, 64>(pReNative, off, a_iGReg, (uintptr_t)iemNativeHlpStackFlatFetchU16, pCallEntry->idxInstr)
    86488630#define IEM_MC_FLAT64_POP_GREG_U64(a_iGReg) \
    8649     off = iemNativeEmitStackPopGReg(pReNative, off, a_iGReg, RT_MAKE_U32_FROM_U8(64, 64, 0, 0), \
    8650                                     (uintptr_t)iemNativeHlpStackFlatFetchU64, pCallEntry->idxInstr)
     8631    off = iemNativeEmitStackPopGReg<64, 64>(pReNative, off, a_iGReg, (uintptr_t)iemNativeHlpStackFlatFetchU64, pCallEntry->idxInstr)
    86518632
    86528633
     
    86868667
    86878668/** IEM_MC[|_FLAT32|_FLAT64]_POP_GREG_U16/32/64 */
    8688 DECL_INLINE_THROW(uint32_t)
    8689 iemNativeEmitStackPopGReg(PIEMRECOMPILERSTATE pReNative, uint32_t off, uint8_t idxGReg,
    8690                           uint32_t cBitsVarAndFlat, uintptr_t pfnFunction, uint8_t idxInstr)
     8669template<uint8_t const a_cBitsVar, uint8_t const a_cBitsFlat>
     8670DECL_INLINE_THROW(uint32_t)
     8671iemNativeEmitStackPopGReg(PIEMRECOMPILERSTATE pReNative, uint32_t off, uint8_t idxGReg, uintptr_t pfnFunction, uint8_t idxInstr)
    86918672{
    86928673    /*
     
    86958676    Assert(idxGReg < 16);
    86968677#ifdef VBOX_STRICT
    8697     if (RT_BYTE2(cBitsVarAndFlat) != 0)
     8678    if (a_cBitsFlat != 0)
    86988679    {
    86998680        Assert(   (pReNative->fExec & IEM_F_MODE_MASK) == IEM_F_MODE_X86_64BIT
     
    87018682               || (pReNative->fExec & IEM_F_MODE_MASK) == IEM_F_MODE_X86_32BIT_FLAT);
    87028683        Assert(   pfnFunction
    8703                == (  cBitsVarAndFlat == RT_MAKE_U32_FROM_U8(16, 32, 0, 0) ? (uintptr_t)iemNativeHlpStackFlatFetchU16
    8704                    : cBitsVarAndFlat == RT_MAKE_U32_FROM_U8(32, 32, 0, 0) ? (uintptr_t)iemNativeHlpStackFlatFetchU32
    8705                    : cBitsVarAndFlat == RT_MAKE_U32_FROM_U8(16, 64, 0, 0) ? (uintptr_t)iemNativeHlpStackFlatFetchU16
    8706                    : cBitsVarAndFlat == RT_MAKE_U32_FROM_U8(64, 64, 0, 0) ? (uintptr_t)iemNativeHlpStackFlatFetchU64
     8684               == (  RT_MAKE_U16(a_cBitsVar, a_cBitsFlat) == RT_MAKE_U16(16, 32) ? (uintptr_t)iemNativeHlpStackFlatFetchU16
     8685                   : RT_MAKE_U16(a_cBitsVar, a_cBitsFlat) == RT_MAKE_U16(32, 32) ? (uintptr_t)iemNativeHlpStackFlatFetchU32
     8686                   : RT_MAKE_U16(a_cBitsVar, a_cBitsFlat) == RT_MAKE_U16(16, 64) ? (uintptr_t)iemNativeHlpStackFlatFetchU16
     8687                   : RT_MAKE_U16(a_cBitsVar, a_cBitsFlat) == RT_MAKE_U16(64, 64) ? (uintptr_t)iemNativeHlpStackFlatFetchU64
    87078688                   : UINT64_C(0xc000b000a0009000) ));
    87088689    }
    87098690    else
    87108691        Assert(   pfnFunction
    8711                == (  cBitsVarAndFlat == RT_MAKE_U32_FROM_U8(16, 0, 0, 0) ? (uintptr_t)iemNativeHlpStackFetchU16
    8712                    : cBitsVarAndFlat == RT_MAKE_U32_FROM_U8(32, 0, 0, 0) ? (uintptr_t)iemNativeHlpStackFetchU32
    8713                    : cBitsVarAndFlat == RT_MAKE_U32_FROM_U8(64, 0, 0, 0) ? (uintptr_t)iemNativeHlpStackFetchU64
     8692               == (  RT_MAKE_U16(a_cBitsVar, a_cBitsFlat) == RT_MAKE_U16(16, 0) ? (uintptr_t)iemNativeHlpStackFetchU16
     8693                   : RT_MAKE_U16(a_cBitsVar, a_cBitsFlat) == RT_MAKE_U16(32, 0) ? (uintptr_t)iemNativeHlpStackFetchU32
     8694                   : RT_MAKE_U16(a_cBitsVar, a_cBitsFlat) == RT_MAKE_U16(64, 0) ? (uintptr_t)iemNativeHlpStackFetchU64
    87148695                   : UINT64_C(0xc000b000a0009000) ));
    87158696#endif
     
    87348715     * (Code structure is very similar to that of PUSH)
    87358716     */
    8736     uint8_t const cbMem           = RT_BYTE1(cBitsVarAndFlat) / 8;
    8737     uint8_t const cBitsFlat       = RT_BYTE2(cBitsVarAndFlat);      RT_NOREF(cBitsFlat);
     8717    uint8_t const cbMem           = a_cBitsVar / 8;
    87388718    uint8_t const idxRegRsp       = iemNativeRegAllocTmpForGuestReg(pReNative, &off, IEMNATIVEGSTREG_GPR(X86_GREG_xSP),
    87398719                                                                    kIemNativeGstRegUse_ForUpdate, true /*fNoVolatileRegs*/);
    8740     uint8_t const idxRegEffSp     = cBitsFlat != 0 ? idxRegRsp : iemNativeRegAllocTmp(pReNative, &off);
     8720    uint8_t const idxRegEffSp     = a_cBitsFlat != 0 ? idxRegRsp : iemNativeRegAllocTmp(pReNative, &off);
    87418721    /** @todo can do a better job picking the register here. For cbMem >= 4 this
    87428722     *        will be the resulting register value. */
     
    87448724
    87458725    uint32_t      offFixupJumpToUseOtherBitSp = UINT32_MAX;
    8746     if (cBitsFlat != 0)
     8726    if RT_CONSTEXPR_IF(a_cBitsFlat != 0)
    87478727    {
    87488728        Assert(idxRegEffSp == idxRegRsp);
    8749         Assert(cBitsFlat == 32 || cBitsFlat == 64);
     8729        Assert(a_cBitsFlat == 32 || a_cBitsFlat == 64);
    87508730        Assert(IEM_F_MODE_X86_IS_FLAT(pReNative->fExec));
    87518731    }
     
    87838763     * we're skipping lookup).
    87848764     */
    8785     uint8_t const  iSegReg           = cBitsFlat != 0 ? UINT8_MAX : X86_SREG_SS;
     8765    uint8_t const  iSegReg           = a_cBitsFlat != 0 ? UINT8_MAX : X86_SREG_SS;
    87868766    IEMNATIVEEMITTLBSTATE const TlbState(pReNative, idxRegEffSp, &off, iSegReg, cbMem);
    87878767    uint16_t const uTlbSeqNo         = pReNative->uTlbSeqNo++;
     
    87998779     * Use16BitSp:
    88008780     */
    8801     if (cBitsFlat == 0)
     8781    if RT_CONSTEXPR_IF(a_cBitsFlat == 0)
    88028782    {
    88038783#ifdef RT_ARCH_AMD64
     
    89408920        if (idxRegEffSp == idxRegRsp)
    89418921        {
    8942             if (cBitsFlat == 64)
     8922            if RT_CONSTEXPR_IF(a_cBitsFlat == 64)
    89438923                off = iemNativeEmitAddGprImm8(pReNative, off, idxRegRsp, cbMem);
    89448924            else
     
    89578937            if (idxRegEffSp == idxRegRsp)
    89588938            {
    8959                 if (cBitsFlat == 64)
     8939                if RT_CONSTEXPR_IF(a_cBitsFlat == 64)
    89608940                    off = iemNativeEmitAddGprImm8(pReNative, off, idxRegRsp, cbMem);
    89618941                else
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