Changeset 104072 in vbox for trunk/src/VBox/VMM/VMMAll/IEMAllN8veRecompFuncs.h
- Timestamp:
- Mar 26, 2024 9:05:49 PM (11 months ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllN8veRecompFuncs.h
r104058 r104072 3713 3713 IEMNATIVE_ASSERT_VAR_SIZE(pReNative, idxVar, cbLocal); 3714 3714 3715 if (cbLocal <= sizeof(uint32_t)) 3715 if (cbLocal <= sizeof(uint32_t)) /** @todo r=bird: for cbLocal < sizeof(uint32_t), this'll require a AND or something to restrict the result. */ 3716 3716 off = iemNativeEmitShiftGpr32Left(pReNative, off, idxVarReg, cShift); 3717 3717 else … … 3750 3750 IEMNATIVE_ASSERT_VAR_SIZE(pReNative, idxVar, cbLocal); 3751 3751 3752 if (cbLocal <= sizeof(uint32_t)) 3752 if (cbLocal <= sizeof(uint32_t)) /** @todo r=bird: This is NOT working for cbLocal < sizeof(uint32_t) if negative! */ 3753 3753 off = iemNativeEmitArithShiftGpr32Right(pReNative, off, idxVarReg, cShift); 3754 3754 else … … 3776 3776 IEMNATIVE_ASSERT_VAR_SIZE(pReNative, idxVarEffAddr, sizeof(RTGCPTR)); 3777 3777 IEMNATIVE_ASSERT_VAR_IDX(pReNative, idxVar); 3778 IEMNATIVE_ASSERT_VAR_SIZE(pReNative, idxVar, cbLocal); RT_NOREF(cbLocal);3778 IEMNATIVE_ASSERT_VAR_SIZE(pReNative, idxVar, cbLocal); 3779 3779 3780 3780 uint8_t const idxVarReg = iemNativeVarRegisterAcquire(pReNative, idxVar, &off, true /*fInitialized*/); … … 3784 3784 if (cbLocal <= sizeof(uint32_t)) 3785 3785 { 3786 uint8_t const idxRegTmp = iemNativeRegAllocTmp(pReNative, &off, idxVar); 3786 /** @todo ARM64: In case of boredone, the extended add instruction can do the 3787 * conversion directly: ADD idxVarRegEffAddr, idxVarRegEffAddr, [w]idxVarReg, SXTH/SXTW */ 3788 uint8_t const idxRegTmp = iemNativeRegAllocTmp(pReNative, &off); 3787 3789 3788 3790 switch (cbLocal) 3789 3791 { 3790 case sizeof(int8_t): off = iemNativeEmitLoadGprSignExtendedFromGpr8(pReNative, off, idxRegTmp, idxVarReg); break;3791 3792 case sizeof(int16_t): off = iemNativeEmitLoadGprSignExtendedFromGpr16(pReNative, off, idxRegTmp, idxVarReg); break; 3792 3793 case sizeof(int32_t): off = iemNativeEmitLoadGprSignExtendedFromGpr32(pReNative, off, idxRegTmp, idxVarReg); break;
Note:
See TracChangeset
for help on using the changeset viewer.