Changeset 106423 in vbox
- Timestamp:
- Oct 17, 2024 10:10:59 AM (4 months ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllN8veRecompFuncs.h
r106416 r106423 8264 8264 * Stack Accesses. * 8265 8265 *********************************************************************************************************************************/ 8266 /* RT_MAKE_U32_FROM_U8(cBitsVar, cBitsFlat, fSReg, 0) */8267 8266 #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) 8270 8268 #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) 8273 8270 #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) 8276 8272 #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) 8279 8274 8280 8275 #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) 8283 8277 #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) 8286 8279 #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) 8289 8281 8290 8282 #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) 8293 8284 #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) 8296 8286 8297 8287 8298 8288 /** 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)8289 template<uint8_t const a_cBitsVar, uint8_t const a_cBitsFlat, bool a_fIsSegReg = false> 8290 DECL_INLINE_THROW(uint32_t) 8291 iemNativeEmitStackPush(PIEMRECOMPILERSTATE pReNative, uint32_t off, uint8_t idxVarValue, uintptr_t pfnFunction, uint8_t idxInstr) 8302 8292 { 8303 8293 /* … … 8307 8297 PIEMNATIVEVAR const pVarValue = &pReNative->Core.aVars[IEMNATIVE_VAR_IDX_UNPACK(idxVarValue)]; 8308 8298 #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) 8310 8301 { 8311 8302 Assert( (pReNative->fExec & IEM_F_MODE_MASK) == IEM_F_MODE_X86_64BIT … … 8313 8304 || (pReNative->fExec & IEM_F_MODE_MASK) == IEM_F_MODE_X86_32BIT_FLAT); 8314 8305 Assert( pfnFunction 8315 == ( c BitsVarAndFlat== RT_MAKE_U32_FROM_U8(16, 32, 0, 0) ? (uintptr_t)iemNativeHlpStackFlatStoreU168316 : c BitsVarAndFlat== RT_MAKE_U32_FROM_U8(32, 32, 0, 0) ? (uintptr_t)iemNativeHlpStackFlatStoreU328317 : c BitsVarAndFlat== RT_MAKE_U32_FROM_U8(32, 32, 1, 0) ? (uintptr_t)iemNativeHlpStackFlatStoreU32SReg8318 : c BitsVarAndFlat== RT_MAKE_U32_FROM_U8(16, 64, 0, 0) ? (uintptr_t)iemNativeHlpStackFlatStoreU168319 : c BitsVarAndFlat== RT_MAKE_U32_FROM_U8(64, 64, 0, 0) ? (uintptr_t)iemNativeHlpStackFlatStoreU648306 == ( 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 8320 8311 : UINT64_C(0xc000b000a0009000) )); 8321 8312 } 8322 8313 else 8323 8314 Assert( pfnFunction 8324 == ( c BitsVarAndFlat== RT_MAKE_U32_FROM_U8(16, 0, 0, 0) ? (uintptr_t)iemNativeHlpStackStoreU168325 : c BitsVarAndFlat== RT_MAKE_U32_FROM_U8(32, 0, 0, 0) ? (uintptr_t)iemNativeHlpStackStoreU328326 : c BitsVarAndFlat== RT_MAKE_U32_FROM_U8(32, 0, 1, 0) ? (uintptr_t)iemNativeHlpStackStoreU32SReg8327 : c BitsVarAndFlat== RT_MAKE_U32_FROM_U8(64, 0, 0, 0) ? (uintptr_t)iemNativeHlpStackStoreU648315 == ( 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 8328 8319 : UINT64_C(0xc000b000a0009000) )); 8329 8320 #endif … … 8350 8341 * (Code structure is very similar to that of PUSH) 8351 8342 */ 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); 8355 8345 uint8_t const cbMemAccess = !fIsIntelSeg || (pReNative->fExec & IEM_F_MODE_MASK) == IEM_F_MODE_X86_16BIT 8356 8346 ? cbMem : sizeof(uint16_t); 8357 uint8_t const cBitsFlat = RT_BYTE2(cBitsVarAndFlat); RT_NOREF(cBitsFlat);8358 8347 uint8_t const idxRegRsp = iemNativeRegAllocTmpForGuestReg(pReNative, &off, IEMNATIVEGSTREG_GPR(X86_GREG_xSP), 8359 8348 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); 8361 8350 uint32_t offFixupJumpToUseOtherBitSp = UINT32_MAX; 8362 if (cBitsFlat != 0)8351 if RT_CONSTEXPR_IF(a_cBitsFlat != 0) 8363 8352 { 8364 8353 Assert(idxRegEffSp == idxRegRsp); 8365 Assert( cBitsFlat == 32 ||cBitsFlat == 64);8354 Assert(a_cBitsFlat == 32 || a_cBitsFlat == 64); 8366 8355 Assert(IEM_F_MODE_X86_IS_FLAT(pReNative->fExec)); 8367 if (cBitsFlat == 64)8356 if RT_CONSTEXPR_IF(a_cBitsFlat == 64) 8368 8357 off = iemNativeEmitSubGprImm(pReNative, off, idxRegRsp, cbMem); 8369 8358 else … … 8402 8391 * we're skipping lookup). 8403 8392 */ 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; 8405 8394 IEMNATIVEEMITTLBSTATE const TlbState(pReNative, idxRegEffSp, &off, iSegReg, cbMemAccess); 8406 8395 uint16_t const uTlbSeqNo = pReNative->uTlbSeqNo++; … … 8425 8414 * Use16BitSp: 8426 8415 */ 8427 if (cBitsFlat == 0)8416 if RT_CONSTEXPR_IF(a_cBitsFlat == 0) 8428 8417 { 8429 8418 #ifdef RT_ARCH_AMD64 … … 8584 8573 break; 8585 8574 case 4: 8586 Assert(! fIsSegReg);8575 Assert(!a_fIsSegReg); 8587 8576 off = iemNativeEmitStoreImm32ByGprEx(pCodeBuf, off, (uint32_t)pVarValue->u.uValue, 8588 8577 idxRegMemResult, TlbState.idxReg1); … … 8625 8614 8626 8615 8627 /* RT_MAKE_U32_FROM_U8(cBitsVar, cBitsFlat, 0, 0) */8628 8616 #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) 8631 8618 #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) 8634 8620 #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) 8637 8622 8638 8623 #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) 8641 8625 #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) 8644 8627 8645 8628 #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) 8648 8630 #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) 8651 8632 8652 8633 … … 8686 8667 8687 8668 /** 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)8669 template<uint8_t const a_cBitsVar, uint8_t const a_cBitsFlat> 8670 DECL_INLINE_THROW(uint32_t) 8671 iemNativeEmitStackPopGReg(PIEMRECOMPILERSTATE pReNative, uint32_t off, uint8_t idxGReg, uintptr_t pfnFunction, uint8_t idxInstr) 8691 8672 { 8692 8673 /* … … 8695 8676 Assert(idxGReg < 16); 8696 8677 #ifdef VBOX_STRICT 8697 if ( RT_BYTE2(cBitsVarAndFlat)!= 0)8678 if (a_cBitsFlat != 0) 8698 8679 { 8699 8680 Assert( (pReNative->fExec & IEM_F_MODE_MASK) == IEM_F_MODE_X86_64BIT … … 8701 8682 || (pReNative->fExec & IEM_F_MODE_MASK) == IEM_F_MODE_X86_32BIT_FLAT); 8702 8683 Assert( pfnFunction 8703 == ( cBitsVarAndFlat == RT_MAKE_U32_FROM_U8(16, 32, 0, 0) ? (uintptr_t)iemNativeHlpStackFlatFetchU168704 : cBitsVarAndFlat == RT_MAKE_U32_FROM_U8(32, 32, 0, 0) ? (uintptr_t)iemNativeHlpStackFlatFetchU328705 : cBitsVarAndFlat == RT_MAKE_U32_FROM_U8(16, 64, 0, 0) ? (uintptr_t)iemNativeHlpStackFlatFetchU168706 : cBitsVarAndFlat == RT_MAKE_U32_FROM_U8(64, 64, 0, 0) ? (uintptr_t)iemNativeHlpStackFlatFetchU648684 == ( 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 8707 8688 : UINT64_C(0xc000b000a0009000) )); 8708 8689 } 8709 8690 else 8710 8691 Assert( pfnFunction 8711 == ( cBitsVarAndFlat == RT_MAKE_U32_FROM_U8(16, 0, 0, 0) ? (uintptr_t)iemNativeHlpStackFetchU168712 : cBitsVarAndFlat == RT_MAKE_U32_FROM_U8(32, 0, 0, 0) ? (uintptr_t)iemNativeHlpStackFetchU328713 : cBitsVarAndFlat == RT_MAKE_U32_FROM_U8(64, 0, 0, 0) ? (uintptr_t)iemNativeHlpStackFetchU648692 == ( 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 8714 8695 : UINT64_C(0xc000b000a0009000) )); 8715 8696 #endif … … 8734 8715 * (Code structure is very similar to that of PUSH) 8735 8716 */ 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; 8738 8718 uint8_t const idxRegRsp = iemNativeRegAllocTmpForGuestReg(pReNative, &off, IEMNATIVEGSTREG_GPR(X86_GREG_xSP), 8739 8719 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); 8741 8721 /** @todo can do a better job picking the register here. For cbMem >= 4 this 8742 8722 * will be the resulting register value. */ … … 8744 8724 8745 8725 uint32_t offFixupJumpToUseOtherBitSp = UINT32_MAX; 8746 if (cBitsFlat != 0)8726 if RT_CONSTEXPR_IF(a_cBitsFlat != 0) 8747 8727 { 8748 8728 Assert(idxRegEffSp == idxRegRsp); 8749 Assert( cBitsFlat == 32 ||cBitsFlat == 64);8729 Assert(a_cBitsFlat == 32 || a_cBitsFlat == 64); 8750 8730 Assert(IEM_F_MODE_X86_IS_FLAT(pReNative->fExec)); 8751 8731 } … … 8783 8763 * we're skipping lookup). 8784 8764 */ 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; 8786 8766 IEMNATIVEEMITTLBSTATE const TlbState(pReNative, idxRegEffSp, &off, iSegReg, cbMem); 8787 8767 uint16_t const uTlbSeqNo = pReNative->uTlbSeqNo++; … … 8799 8779 * Use16BitSp: 8800 8780 */ 8801 if (cBitsFlat == 0)8781 if RT_CONSTEXPR_IF(a_cBitsFlat == 0) 8802 8782 { 8803 8783 #ifdef RT_ARCH_AMD64 … … 8940 8920 if (idxRegEffSp == idxRegRsp) 8941 8921 { 8942 if (cBitsFlat == 64)8922 if RT_CONSTEXPR_IF(a_cBitsFlat == 64) 8943 8923 off = iemNativeEmitAddGprImm8(pReNative, off, idxRegRsp, cbMem); 8944 8924 else … … 8957 8937 if (idxRegEffSp == idxRegRsp) 8958 8938 { 8959 if (cBitsFlat == 64)8939 if RT_CONSTEXPR_IF(a_cBitsFlat == 64) 8960 8940 off = iemNativeEmitAddGprImm8(pReNative, off, idxRegRsp, cbMem); 8961 8941 else
Note:
See TracChangeset
for help on using the changeset viewer.