Changeset 104048 in vbox for trunk/src/VBox/VMM
- Timestamp:
- Mar 25, 2024 6:50:09 PM (11 months ago)
- svn:sync-xref-src-repo-rev:
- 162439
- Location:
- trunk/src/VBox/VMM/VMMAll
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllN8veRecompFuncs.h
r104047 r104048 7388 7388 7389 7389 off = iemNativeEmitSimdLoadVecRegFromVecRegU128(pReNative, off, idxSimdRegDst, idxSimdRegSrc); 7390 IEMNATIVE_SIMD_REG_STATE_SET_DIRTY_LO_U128(pReNative, iXRegDst);7391 /* We don't need to write everything back here as the destination is marked as dirty and will be flushed automatically. */7392 7390 7393 7391 /* Free but don't flush the source and destination register. */ … … 7550 7548 7551 7549 off = iemNativeEmitSimdLoadVecRegFromVecRegU128(pReNative, off, idxSimdRegDst, idxVarReg); 7552 IEMNATIVE_SIMD_REG_STATE_SET_DIRTY_LO_U128(pReNative, iXReg);7553 7550 7554 7551 /* Free but don't flush the source register. */ … … 7576 7573 7577 7574 off = iemNativeEmitSimdStoreGprToVecRegU64(pReNative, off, idxSimdRegDst, idxVarReg, iQWord); 7578 IEMNATIVE_SIMD_REG_STATE_SET_DIRTY_LO_U128(pReNative, iXReg);7579 7575 7580 7576 /* Free but don't flush the source register. */ … … 7602 7598 7603 7599 off = iemNativeEmitSimdStoreGprToVecRegU32(pReNative, off, idxSimdRegDst, idxVarReg, iDWord); 7604 IEMNATIVE_SIMD_REG_STATE_SET_DIRTY_LO_U128(pReNative, iXReg);7605 7600 7606 7601 /* Free but don't flush the source register. */ … … 7630 7625 off = iemNativeEmitSimdZeroVecRegLowU128(pReNative, off, idxSimdRegDst); 7631 7626 off = iemNativeEmitSimdStoreGprToVecRegU64(pReNative, off, idxSimdRegDst, idxVarReg, 0); 7632 IEMNATIVE_SIMD_REG_STATE_SET_DIRTY_LO_U128(pReNative, iXReg);7633 7627 7634 7628 /* Free but don't flush the source register. */ … … 7658 7652 off = iemNativeEmitSimdZeroVecRegLowU128(pReNative, off, idxSimdRegDst); 7659 7653 off = iemNativeEmitSimdStoreGprToVecRegU32(pReNative, off, idxSimdRegDst, idxVarReg, 0); 7660 IEMNATIVE_SIMD_REG_STATE_SET_DIRTY_LO_U128(pReNative, iXReg);7661 7654 7662 7655 /* Free but don't flush the source register. */ … … 7685 7678 off = iemNativeEmitSimdLoadGprFromVecRegU32(pReNative, off, IEMNATIVE_REG_FIXED_TMP0, idxVarReg, iDwSrc); 7686 7679 off = iemNativeEmitSimdStoreGprToVecRegU32(pReNative, off, idxSimdRegDst, IEMNATIVE_REG_FIXED_TMP0, iDwDst); 7687 IEMNATIVE_SIMD_REG_STATE_SET_DIRTY_LO_U128(pReNative, iXReg);7688 7680 7689 7681 /* Free but don't flush the destination register. */ … … 7717 7709 off = iemNativeEmitSimdLoadVecRegFromVecRegU128(pReNative, off, idxSimdRegDst, idxSimdRegSrc); 7718 7710 off = iemNativeEmitSimdZeroVecRegHighU128(pReNative, off, idxSimdRegDst); 7719 IEMNATIVE_SIMD_REG_STATE_SET_DIRTY_LO_U128(pReNative, iYRegDst);7720 IEMNATIVE_SIMD_REG_STATE_SET_DIRTY_HI_U128(pReNative, iYRegDst);7721 7711 7722 7712 /* Free but don't flush the source and destination register. */ … … 7731 7721 7732 7722 off = iemNativeEmitSimdZeroVecRegHighU128(pReNative, off, idxSimdReg); 7733 IEMNATIVE_SIMD_REG_STATE_SET_DIRTY_HI_U128(pReNative, iYRegDst);7734 7723 7735 7724 /* Free but don't flush the destination register. */ … … 7763 7752 7764 7753 off = iemNativeEmitSimdLoadVecRegFromVecRegU256(pReNative, off, idxSimdRegDst, idxSimdRegSrc); 7765 IEMNATIVE_SIMD_REG_STATE_SET_DIRTY_LO_U128(pReNative, iYRegDst);7766 IEMNATIVE_SIMD_REG_STATE_SET_DIRTY_HI_U128(pReNative, iYRegDst);7767 7754 7768 7755 /* Free but don't flush the source and destination register. */ … … 7877 7864 7878 7865 off = iemNativeEmitSimdZeroVecRegHighU128(pReNative, off, idxSimdReg); 7879 IEMNATIVE_SIMD_REG_STATE_SET_DIRTY_HI_U128(pReNative, iYReg);7880 7866 7881 7867 /* Free but don't flush the register. */ … … 7906 7892 7907 7893 if (iDQword == 0) 7908 {7909 7894 off = iemNativeEmitSimdLoadVecRegFromVecRegU128(pReNative, off, idxSimdRegDst, idxVarReg); 7910 IEMNATIVE_SIMD_REG_STATE_SET_DIRTY_LO_U128(pReNative, iYReg);7911 }7912 7895 else 7913 {7914 7896 off = iemNativeEmitSimdLoadVecRegHighU128FromVecRegLowU128(pReNative, off, idxSimdRegDst, idxVarReg); 7915 IEMNATIVE_SIMD_REG_STATE_SET_DIRTY_HI_U128(pReNative, iYReg);7916 }7917 7897 7918 7898 /* Free but don't flush the source register. */ … … 7941 7921 off = iemNativeEmitSimdLoadVecRegFromVecRegU128(pReNative, off, idxSimdRegDst, idxVarReg); 7942 7922 off = iemNativeEmitSimdZeroVecRegHighU128(pReNative, off, idxSimdRegDst); 7943 IEMNATIVE_SIMD_REG_STATE_SET_DIRTY_LO_U128(pReNative, iYReg);7944 IEMNATIVE_SIMD_REG_STATE_SET_DIRTY_HI_U128(pReNative, iYReg);7945 7923 7946 7924 /* Free but don't flush the source register. */ … … 7969 7947 off = iemNativeEmitSimdBroadcastGprToVecRegU8(pReNative, off, idxSimdRegDst, idxVarReg, false /*f256Bit*/); 7970 7948 off = iemNativeEmitSimdZeroVecRegHighU128(pReNative, off, idxSimdRegDst); 7971 IEMNATIVE_SIMD_REG_STATE_SET_DIRTY_LO_U128(pReNative, iXReg);7972 IEMNATIVE_SIMD_REG_STATE_SET_DIRTY_HI_U128(pReNative, iXReg);7973 7949 7974 7950 iemNativeSimdRegFreeTmp(pReNative, idxSimdRegDst); … … 7996 7972 off = iemNativeEmitSimdBroadcastGprToVecRegU16(pReNative, off, idxSimdRegDst, idxVarReg, false /*f256Bit*/); 7997 7973 off = iemNativeEmitSimdZeroVecRegHighU128(pReNative, off, idxSimdRegDst); 7998 IEMNATIVE_SIMD_REG_STATE_SET_DIRTY_LO_U128(pReNative, iXReg);7999 IEMNATIVE_SIMD_REG_STATE_SET_DIRTY_HI_U128(pReNative, iXReg);8000 7974 8001 7975 /* Free but don't flush the source register. */ … … 8024 7998 off = iemNativeEmitSimdBroadcastGprToVecRegU32(pReNative, off, idxSimdRegDst, idxVarReg, false /*f256Bit*/); 8025 7999 off = iemNativeEmitSimdZeroVecRegHighU128(pReNative, off, idxSimdRegDst); 8026 IEMNATIVE_SIMD_REG_STATE_SET_DIRTY_LO_U128(pReNative, iXReg);8027 IEMNATIVE_SIMD_REG_STATE_SET_DIRTY_HI_U128(pReNative, iXReg);8028 8000 8029 8001 /* Free but don't flush the source register. */ … … 8052 8024 off = iemNativeEmitSimdBroadcastGprToVecRegU64(pReNative, off, idxSimdRegDst, idxVarReg, false /*f256Bit*/); 8053 8025 off = iemNativeEmitSimdZeroVecRegHighU128(pReNative, off, idxSimdRegDst); 8054 IEMNATIVE_SIMD_REG_STATE_SET_DIRTY_LO_U128(pReNative, iXReg);8055 IEMNATIVE_SIMD_REG_STATE_SET_DIRTY_HI_U128(pReNative, iXReg);8056 8026 8057 8027 /* Free but don't flush the source register. */ … … 8079 8049 8080 8050 off = iemNativeEmitSimdBroadcastGprToVecRegU8(pReNative, off, idxSimdRegDst, idxVarReg, true /*f256Bit*/); 8081 IEMNATIVE_SIMD_REG_STATE_SET_DIRTY_LO_U128(pReNative, iYReg);8082 IEMNATIVE_SIMD_REG_STATE_SET_DIRTY_HI_U128(pReNative, iYReg);8083 8051 8084 8052 iemNativeSimdRegFreeTmp(pReNative, idxSimdRegDst); … … 8105 8073 8106 8074 off = iemNativeEmitSimdBroadcastGprToVecRegU16(pReNative, off, idxSimdRegDst, idxVarReg, true /*f256Bit*/); 8107 IEMNATIVE_SIMD_REG_STATE_SET_DIRTY_LO_U128(pReNative, iYReg);8108 IEMNATIVE_SIMD_REG_STATE_SET_DIRTY_HI_U128(pReNative, iYReg);8109 8075 8110 8076 iemNativeSimdRegFreeTmp(pReNative, idxSimdRegDst); … … 8131 8097 8132 8098 off = iemNativeEmitSimdBroadcastGprToVecRegU32(pReNative, off, idxSimdRegDst, idxVarReg, true /*f256Bit*/); 8133 IEMNATIVE_SIMD_REG_STATE_SET_DIRTY_LO_U128(pReNative, iYReg);8134 IEMNATIVE_SIMD_REG_STATE_SET_DIRTY_HI_U128(pReNative, iYReg);8135 8099 8136 8100 /* Free but don't flush the source register. */ … … 8158 8122 8159 8123 off = iemNativeEmitSimdBroadcastGprToVecRegU64(pReNative, off, idxSimdRegDst, idxVarReg, true /*f256Bit*/); 8160 IEMNATIVE_SIMD_REG_STATE_SET_DIRTY_LO_U128(pReNative, iYReg);8161 IEMNATIVE_SIMD_REG_STATE_SET_DIRTY_HI_U128(pReNative, iYReg);8162 8124 8163 8125 /* Free but don't flush the source register. */ … … 8185 8147 8186 8148 off = iemNativeEmitSimdBroadcastVecRegU128ToVecReg(pReNative, off, idxSimdRegDst, idxVarReg); 8187 IEMNATIVE_SIMD_REG_STATE_SET_DIRTY_LO_U128(pReNative, iYReg);8188 IEMNATIVE_SIMD_REG_STATE_SET_DIRTY_HI_U128(pReNative, iYReg);8189 8149 8190 8150 /* Free but don't flush the source register. */ … … 8213 8173 off = iemNativeEmitSimdZeroVecRegU256(pReNative, off, idxSimdRegDst); 8214 8174 off = iemNativeEmitSimdStoreGprToVecRegU32(pReNative, off, idxSimdRegDst, idxVarReg, 0 /*iDWord*/); 8215 IEMNATIVE_SIMD_REG_STATE_SET_DIRTY_LO_U128(pReNative, iYReg);8216 IEMNATIVE_SIMD_REG_STATE_SET_DIRTY_HI_U128(pReNative, iYReg);8217 8175 8218 8176 /* Free but don't flush the source register. */ … … 8241 8199 off = iemNativeEmitSimdZeroVecRegU256(pReNative, off, idxSimdRegDst); 8242 8200 off = iemNativeEmitSimdStoreGprToVecRegU64(pReNative, off, idxSimdRegDst, idxVarReg, 0 /*iQWord*/); 8243 IEMNATIVE_SIMD_REG_STATE_SET_DIRTY_LO_U128(pReNative, iYReg);8244 IEMNATIVE_SIMD_REG_STATE_SET_DIRTY_HI_U128(pReNative, iYReg);8245 8201 8246 8202 /* Free but don't flush the source register. */ … … 8271 8227 off = iemNativeEmitSimdStoreGprToVecRegU64(pReNative, off, idxSimdRegDst, idxVarReg, 0 /*iQWord*/); 8272 8228 off = iemNativeEmitSimdZeroVecRegHighU128(pReNative, off, idxSimdRegDst); 8273 IEMNATIVE_SIMD_REG_STATE_SET_DIRTY_LO_U128(pReNative, iYRegDst);8274 IEMNATIVE_SIMD_REG_STATE_SET_DIRTY_HI_U128(pReNative, iYRegDst);8275 8229 8276 8230 /* Free but don't flush the source and destination registers. */ … … 8302 8256 off = iemNativeEmitSimdStoreGprToVecRegU64(pReNative, off, idxSimdRegDst, idxVarReg, 1 /*iQWord*/); 8303 8257 off = iemNativeEmitSimdZeroVecRegHighU128(pReNative, off, idxSimdRegDst); 8304 IEMNATIVE_SIMD_REG_STATE_SET_DIRTY_LO_U128(pReNative, iYRegDst);8305 IEMNATIVE_SIMD_REG_STATE_SET_DIRTY_HI_U128(pReNative, iYRegDst);8306 8258 8307 8259 /* Free but don't flush the source and destination registers. */ … … 8334 8286 if (bImm8Mask & RT_BIT(3)) 8335 8287 off = iemNativeEmitSimdZeroVecRegElemU32(pReNative, off, idxSimdRegDst, 3 /*iDWord*/); 8336 IEMNATIVE_SIMD_REG_STATE_SET_DIRTY_LO_U128(pReNative, iXReg);8337 8288 8338 8289 /* Free but don't flush the destination register. */ … … 8384 8335 8385 8336 off = iemNativeEmitSimdLoadVecRegFromVecRegU256(pReNative, off, idxSimdRegDst, idxVarRegSrc); 8386 IEMNATIVE_SIMD_REG_STATE_SET_DIRTY_LO_U128(pReNative, iYRegDst);8387 IEMNATIVE_SIMD_REG_STATE_SET_DIRTY_HI_U128(pReNative, iYRegDst);8388 8337 8389 8338 /* Free but don't flush the source register. */ … … 8448 8397 uint8_t const idxVarRegResAddr = iemNativeRegAllocTmp(pReNative, &off); 8449 8398 uint8_t const idxRegTmp = iemNativeRegAllocTmp(pReNative, &off); 8450 8451 /* Assume the register to be always dirty for now, even if it doesn't get written when the code is executed due to unmasked exceptions. */8452 IEMNATIVE_SIMD_REG_STATE_SET_DIRTY_LO_U128(pReNative, iXReg);8453 8399 8454 8400 off = iemNativeEmitLoadArgGregWithVarAddr(pReNative, off, idxVarRegResAddr, idxSseDataVar, false /*fFlushShadows*/); -
trunk/src/VBox/VMM/VMMAll/IEMAllN8veRecompiler.cpp
r104047 r104048 6471 6471 #endif 6472 6472 6473 if ( enmIntendedUse == kIemNativeGstRegUse_ForFullWrite 6474 || enmIntendedUse == kIemNativeGstRegUse_ForUpdate) 6475 { 6476 # ifdef IEMNATIVE_WITH_TB_DEBUG_INFO 6477 iemNativeDbgInfoAddNativeOffset(pReNative, *poff); 6478 iemNaitveDbgInfoAddGuestRegDirty(pReNative, true /*fSimdReg*/, enmGstSimdReg, idxSimdReg); 6479 # endif 6480 6481 if (enmLoadSz == kIemNativeGstSimdRegLdStSz_Low128) 6482 IEMNATIVE_SIMD_REG_STATE_SET_DIRTY_LO_U128(pReNative, enmGstSimdReg); 6483 else if (enmLoadSz == kIemNativeGstSimdRegLdStSz_High128) 6484 IEMNATIVE_SIMD_REG_STATE_SET_DIRTY_HI_U128(pReNative, enmGstSimdReg); 6485 else 6486 { 6487 Assert(enmLoadSz == kIemNativeGstSimdRegLdStSz_256); 6488 IEMNATIVE_SIMD_REG_STATE_SET_DIRTY_LO_U128(pReNative, enmGstSimdReg); 6489 IEMNATIVE_SIMD_REG_STATE_SET_DIRTY_HI_U128(pReNative, enmGstSimdReg); 6490 } 6491 } 6492 6473 6493 return idxSimdReg; 6474 6494 } … … 6486 6506 if (enmIntendedUse != kIemNativeGstRegUse_Calculation) 6487 6507 iemNativeSimdRegMarkAsGstSimdRegShadow(pReNative, idxRegNew, enmGstSimdReg, *poff); 6508 6509 if ( enmIntendedUse == kIemNativeGstRegUse_ForFullWrite 6510 || enmIntendedUse == kIemNativeGstRegUse_ForUpdate) 6511 { 6512 # ifdef IEMNATIVE_WITH_TB_DEBUG_INFO 6513 iemNativeDbgInfoAddNativeOffset(pReNative, *poff); 6514 iemNaitveDbgInfoAddGuestRegDirty(pReNative, true /*fSimdReg*/, enmGstSimdReg, idxRegNew); 6515 # endif 6516 6517 if (enmLoadSz == kIemNativeGstSimdRegLdStSz_Low128) 6518 IEMNATIVE_SIMD_REG_STATE_SET_DIRTY_LO_U128(pReNative, enmGstSimdReg); 6519 else if (enmLoadSz == kIemNativeGstSimdRegLdStSz_High128) 6520 IEMNATIVE_SIMD_REG_STATE_SET_DIRTY_HI_U128(pReNative, enmGstSimdReg); 6521 else 6522 { 6523 Assert(enmLoadSz == kIemNativeGstSimdRegLdStSz_256); 6524 IEMNATIVE_SIMD_REG_STATE_SET_DIRTY_LO_U128(pReNative, enmGstSimdReg); 6525 IEMNATIVE_SIMD_REG_STATE_SET_DIRTY_HI_U128(pReNative, enmGstSimdReg); 6526 } 6527 } 6488 6528 6489 6529 Log12(("iemNativeRegAllocTmpForGuestSimdReg: Allocated %s for guest %s %s\n",
Note:
See TracChangeset
for help on using the changeset viewer.