Changeset 105172 in vbox for trunk/src/VBox/VMM/VMMAll/target-x86
- Timestamp:
- Jul 7, 2024 12:59:59 PM (10 months ago)
- svn:sync-xref-src-repo-rev:
- 163814
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/target-x86/IEMAllN8veEmit-x86.h
r105170 r105172 2084 2084 2085 2085 /** 2086 * Common emitter for the paddX/psubXinstructions.2087 */ 2088 #ifdef RT_ARCH_AMD64 2089 # define IEMNATIVE_NATIVE_EMIT_A DD_SUB_U128(a_Instr, a_fSub, a_ArmElemSz, a_bOpcX86) \2086 * Common emitter for packed arithmetic instructions. 2087 */ 2088 #ifdef RT_ARCH_AMD64 2089 # define IEMNATIVE_NATIVE_EMIT_ARITH_OP_U128(a_Instr, a_enmArmOp, a_ArmElemSz, a_bOpcX86) \ 2090 2090 DECL_INLINE_THROW(uint32_t) \ 2091 2091 RT_CONCAT3(iemNativeEmit_,a_Instr,_rr_u128)(PIEMRECOMPILERSTATE pReNative, uint32_t off, \ … … 2131 2131 typedef int ignore_semicolon 2132 2132 #elif defined(RT_ARCH_ARM64) 2133 # define IEMNATIVE_NATIVE_EMIT_A DD_SUB_U128(a_Instr, a_fSub, a_ArmElemSz, a_bOpcX86) \2133 # define IEMNATIVE_NATIVE_EMIT_ARITH_OP_U128(a_Instr, a_enmArmOp, a_ArmElemSz, a_bOpcX86) \ 2134 2134 DECL_INLINE_THROW(uint32_t) \ 2135 2135 RT_CONCAT3(iemNativeEmit_,a_Instr,_rr_u128)(PIEMRECOMPILERSTATE pReNative, uint32_t off, \ … … 2141 2141 kIemNativeGstSimdRegLdStSz_Low128, kIemNativeGstRegUse_ReadOnly); \ 2142 2142 PIEMNATIVEINSTR const pCodeBuf = iemNativeInstrBufEnsure(pReNative, off, 1); \ 2143 pCodeBuf[off++] = Armv8A64MkVecInstrA ddSub((a_fSub), idxSimdRegDst, idxSimdRegDst, idxSimdRegSrc, (a_ArmElemSz)); \2143 pCodeBuf[off++] = Armv8A64MkVecInstrArithOp((a_enmArmOp), idxSimdRegDst, idxSimdRegDst, idxSimdRegSrc, (a_ArmElemSz)); \ 2144 2144 iemNativeSimdRegFreeTmp(pReNative, idxSimdRegDst); \ 2145 2145 iemNativeSimdRegFreeTmp(pReNative, idxSimdRegSrc); \ … … 2155 2155 uint8_t const idxSimdRegSrc = iemNativeVarSimdRegisterAcquire(pReNative, idxVarSrc, &off, true /*fInitialized*/); \ 2156 2156 PIEMNATIVEINSTR const pCodeBuf = iemNativeInstrBufEnsure(pReNative, off, 1); \ 2157 pCodeBuf[off++] = Armv8A64MkVecInstrA ddSub((a_fSub), idxSimdRegDst, idxSimdRegDst, idxSimdRegSrc, (a_ArmElemSz)); \2157 pCodeBuf[off++] = Armv8A64MkVecInstrArithOp((a_enmArmOp), idxSimdRegDst, idxSimdRegDst, idxSimdRegSrc, (a_ArmElemSz)); \ 2158 2158 iemNativeSimdRegFreeTmp(pReNative, idxSimdRegDst); \ 2159 2159 iemNativeVarRegisterRelease(pReNative, idxVarSrc); \ … … 2166 2166 #endif 2167 2167 2168 IEMNATIVE_NATIVE_EMIT_ADD_SUB_U128(paddb, false /*a_fSub*/, kArmv8VecInstrArithSz_8, 0xfc); 2169 IEMNATIVE_NATIVE_EMIT_ADD_SUB_U128(paddw, false /*a_fSub*/, kArmv8VecInstrArithSz_16, 0xfd); 2170 IEMNATIVE_NATIVE_EMIT_ADD_SUB_U128(paddd, false /*a_fSub*/, kArmv8VecInstrArithSz_32, 0xfe); 2171 IEMNATIVE_NATIVE_EMIT_ADD_SUB_U128(paddq, false /*a_fSub*/, kArmv8VecInstrArithSz_64, 0xd4); 2172 2173 IEMNATIVE_NATIVE_EMIT_ADD_SUB_U128(psubb, true /*a_fSub*/, kArmv8VecInstrArithSz_8, 0xf8); 2174 IEMNATIVE_NATIVE_EMIT_ADD_SUB_U128(psubw, true /*a_fSub*/, kArmv8VecInstrArithSz_16, 0xf9); 2175 IEMNATIVE_NATIVE_EMIT_ADD_SUB_U128(psubd, true /*a_fSub*/, kArmv8VecInstrArithSz_32, 0xfa); 2176 IEMNATIVE_NATIVE_EMIT_ADD_SUB_U128(psubq, true /*a_fSub*/, kArmv8VecInstrArithSz_64, 0xfb); 2168 /* 2169 * PADDx. 2170 */ 2171 IEMNATIVE_NATIVE_EMIT_ARITH_OP_U128(paddb, kArmv8VecInstrArithOp_Add, kArmv8VecInstrArithSz_8, 0xfc); 2172 IEMNATIVE_NATIVE_EMIT_ARITH_OP_U128(paddw, kArmv8VecInstrArithOp_Add, kArmv8VecInstrArithSz_16, 0xfd); 2173 IEMNATIVE_NATIVE_EMIT_ARITH_OP_U128(paddd, kArmv8VecInstrArithOp_Add, kArmv8VecInstrArithSz_32, 0xfe); 2174 IEMNATIVE_NATIVE_EMIT_ARITH_OP_U128(paddq, kArmv8VecInstrArithOp_Add, kArmv8VecInstrArithSz_64, 0xd4); 2175 2176 /* 2177 * PSUBx. 2178 */ 2179 IEMNATIVE_NATIVE_EMIT_ARITH_OP_U128(psubb, kArmv8VecInstrArithOp_Sub, kArmv8VecInstrArithSz_8, 0xf8); 2180 IEMNATIVE_NATIVE_EMIT_ARITH_OP_U128(psubw, kArmv8VecInstrArithOp_Sub, kArmv8VecInstrArithSz_16, 0xf9); 2181 IEMNATIVE_NATIVE_EMIT_ARITH_OP_U128(psubd, kArmv8VecInstrArithOp_Sub, kArmv8VecInstrArithSz_32, 0xfa); 2182 IEMNATIVE_NATIVE_EMIT_ARITH_OP_U128(psubq, kArmv8VecInstrArithOp_Sub, kArmv8VecInstrArithSz_64, 0xfb); 2183 2184 /* 2185 * PADDUSx. 2186 */ 2187 IEMNATIVE_NATIVE_EMIT_ARITH_OP_U128(paddusb, kArmv8VecInstrArithOp_UnsignSat_Add, kArmv8VecInstrArithSz_8, 0xdc); 2188 IEMNATIVE_NATIVE_EMIT_ARITH_OP_U128(paddusw, kArmv8VecInstrArithOp_UnsignSat_Add, kArmv8VecInstrArithSz_16, 0xdd); 2189 2190 /* 2191 * PMULLx. 2192 */ 2193 IEMNATIVE_NATIVE_EMIT_ARITH_OP_U128(pmullw, kArmv8VecInstrArithOp_Mul, kArmv8VecInstrArithSz_16, 0xd5); 2177 2194 2178 2195
Note:
See TracChangeset
for help on using the changeset viewer.