Changeset 103761 in vbox
- Timestamp:
- Mar 11, 2024 12:07:32 PM (12 months ago)
- svn:sync-xref-src-repo-rev:
- 162130
- Location:
- trunk/src/VBox/VMM
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified trunk/src/VBox/VMM/VMMAll/IEMAllInstPython.py ¶
r103759 r103761 3087 3087 'IEM_MC_FETCH_XREG_U16': (McBlock.parseMcGeneric, False, False, False, ), 3088 3088 'IEM_MC_FETCH_XREG_U32': (McBlock.parseMcGeneric, False, False, False, ), 3089 'IEM_MC_FETCH_XREG_U64': (McBlock.parseMcGeneric, False, False, False,),3089 'IEM_MC_FETCH_XREG_U64': (McBlock.parseMcGeneric, False, False, True, ), 3090 3090 'IEM_MC_FETCH_XREG_U8': (McBlock.parseMcGeneric, False, False, False, ), 3091 3091 'IEM_MC_FETCH_XREG_XMM': (McBlock.parseMcGeneric, False, False, False, ), -
TabularUnified trunk/src/VBox/VMM/VMMAll/IEMAllN8veRecompiler.cpp ¶
r103760 r103761 15131 15131 off = iemNativeEmitSimdCopyXregU128(pReNative, off, a_iXRegDst, a_iXRegSrc) 15132 15132 15133 /** Emits code for IEM_MC_ FETCH_FSW. */15133 /** Emits code for IEM_MC_COPY_XREG_U128. */ 15134 15134 DECL_INLINE_THROW(uint32_t) 15135 15135 iemNativeEmitSimdCopyXregU128(PIEMRECOMPILERSTATE pReNative, uint32_t off, uint8_t iXRegDst, uint8_t iXRegSrc) … … 15151 15151 return off; 15152 15152 } 15153 #endif 15153 15154 15155 #define IEM_MC_FETCH_XREG_U64(a_u64Value, a_iXReg, a_iQWord) \ 15156 off = iemNativeEmitSimdFetchXregU64(pReNative, off, a_u64Value, a_iXReg, a_iQWord) 15157 15158 /** Emits code for IEM_MC_FETCH_XREG_U64. */ 15159 DECL_INLINE_THROW(uint32_t) 15160 iemNativeEmitSimdFetchXregU64(PIEMRECOMPILERSTATE pReNative, uint32_t off, uint8_t idxDstVar, uint8_t iXReg, uint8_t iQWord) 15161 { 15162 IEMNATIVE_ASSERT_VAR_IDX(pReNative, idxDstVar); 15163 IEMNATIVE_ASSERT_VAR_SIZE(pReNative, idxDstVar, sizeof(uint64_t)); 15164 15165 uint8_t const idxSimdRegSrc = iemNativeSimdRegAllocTmpForGuestSimdReg(pReNative, &off, IEMNATIVEGSTSIMDREG_SIMD(iXReg), 15166 kIemNativeGstSimdRegLdStSz_Low128, kIemNativeGstRegUse_ReadOnly); 15167 15168 iemNativeVarSetKindToStack(pReNative, idxDstVar); 15169 uint8_t const idxVarReg = iemNativeVarRegisterAcquire(pReNative, idxDstVar, &off); 15170 15171 off = iemNativeEmitSimdLoadGprFromVecRegU64(pReNative, off, idxVarReg, idxSimdRegSrc, iQWord); 15172 15173 /* Free but don't flush the source register. */ 15174 iemNativeSimdRegFreeTmp(pReNative, idxSimdRegSrc); 15175 iemNativeVarRegisterRelease(pReNative, idxDstVar); 15176 15177 return off; 15178 } 15179 15180 15181 #endif /* IEMNATIVE_WITH_SIMD_REG_ALLOCATOR */ 15154 15182 15155 15183 -
TabularUnified trunk/src/VBox/VMM/include/IEMN8veRecompilerEmit.h ¶
r103758 r103761 7030 7030 7031 7031 /** 7032 * Emits a gprdst = gprsrc load, 128-bit.7032 * Emits a vecdst = vecsrc load, 128-bit. 7033 7033 */ 7034 7034 DECL_INLINE_THROW(uint32_t) … … 7085 7085 } 7086 7086 7087 7088 /** 7089 * Emits a gprdst = vecsrc[x] load, 64-bit. 7090 */ 7091 DECL_FORCE_INLINE(uint32_t) 7092 iemNativeEmitSimdLoadGprFromVecRegU64Ex(PIEMNATIVEINSTR pCodeBuf, uint32_t off, uint8_t iGprDst, uint8_t iVecRegSrc, uint8_t iQWord) 7093 { 7094 #ifdef RT_ARCH_AMD64 7095 /* pextrq gpr, vecsrc, #iQWord (ASSUMES SSE4.1). */ 7096 pCodeBuf[off++] = X86_OP_PRF_SIZE_OP; 7097 pCodeBuf[off++] = X86_OP_REX_W 7098 | (iVecRegSrc < 8 ? 0 : X86_OP_REX_R) 7099 | (iGprDst < 8 ? 0 : X86_OP_REX_B); 7100 pCodeBuf[off++] = 0x0f; 7101 pCodeBuf[off++] = 0x3a; 7102 pCodeBuf[off++] = 0x16; 7103 pCodeBuf[off++] = X86_MODRM_MAKE(X86_MOD_REG, iVecRegSrc & 7, iGprDst & 7); 7104 pCodeBuf[off++] = iQWord; 7105 #elif defined(RT_ARCH_ARM64) 7106 /* umov gprdst, vecsrc[iQWord] */ 7107 pCodeBuf[off++] = Armv8A64MkVecInstrUmov(iGprDst, iVecRegSrc, iQWord, kArmv8InstrUmovSz_U64); 7108 #else 7109 # error "port me" 7110 #endif 7111 return off; 7112 } 7113 7114 7115 /** 7116 * Emits a gprdst = vecsrc[x] load, 64-bit. 7117 */ 7118 DECL_INLINE_THROW(uint32_t) 7119 iemNativeEmitSimdLoadGprFromVecRegU64(PIEMRECOMPILERSTATE pReNative, uint32_t off, uint8_t iGprDst, uint8_t iVecRegSrc, uint8_t iQWord) 7120 { 7121 Assert(iQWord <= 1); 7122 7123 #ifdef RT_ARCH_AMD64 7124 off = iemNativeEmitSimdLoadGprFromVecRegU64Ex(iemNativeInstrBufEnsure(pReNative, off, 7), off, iGprDst, iVecRegSrc, iQWord); 7125 #elif defined(RT_ARCH_ARM64) 7126 off = iemNativeEmitSimdLoadGprFromVecRegU64Ex(iemNativeInstrBufEnsure(pReNative, off, 1), off, iGprDst, iVecRegSrc, iQWord); 7127 #else 7128 # error "port me" 7129 #endif 7130 IEMNATIVE_ASSERT_INSTR_BUF_ENSURE(pReNative, off); 7131 return off; 7132 } 7133 7087 7134 #endif /* IEMNATIVE_WITH_SIMD_REG_ALLOCATOR */ 7088 7135
Note:
See TracChangeset
for help on using the changeset viewer.