Changeset 105219 in vbox for trunk/src/VBox/VMM/VMMAll
- Timestamp:
- Jul 9, 2024 9:01:41 AM (7 months ago)
- Location:
- trunk/src/VBox/VMM/VMMAll
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllAImplC.cpp
r105218 r105219 16023 16023 16024 16024 /** 16025 * ADDSD16025 * [V]ADDSD 16026 16026 */ 16027 16027 #ifdef IEM_WITHOUT_ASSEMBLY … … 16032 16032 } 16033 16033 #endif 16034 16035 16036 IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_vaddsd_u128_r64_fallback,(uint32_t uMxCsrIn, PX86XMMREG pResult, PCX86XMMREG puSrc1, PCRTFLOAT64U pr64Src2)) 16037 { 16038 pResult->ar64[1] = puSrc1->ar64[1]; 16039 return iemAImpl_addpd_u128_worker(&pResult->ar64[0], uMxCsrIn, &puSrc1->ar64[0], pr64Src2); 16040 } 16034 16041 16035 16042 -
trunk/src/VBox/VMM/VMMAll/IEMAllInstVexMap1.cpp.h
r105218 r105219 148 148 149 149 /** 150 * Common worker for scalar AVX/AVX2 instructions on the forms (addss, addsd,etc.):151 * - vxxxs {s,d}xmm0, xmm1, xmm2/mem32150 * Common worker for scalar AVX/AVX2 instructions on the forms (addss,subss,etc.): 151 * - vxxxss xmm0, xmm1, xmm2/mem32 152 152 * 153 153 * Exceptions type 4. AVX cpuid check for 128-bit operation. … … 203 203 IEM_MC_REF_XREG_XMM_CONST(puSrc1, IEM_GET_EFFECTIVE_VVVV(pVCpu)); 204 204 IEM_MC_CALL_AVX_AIMPL_3(pfnU128, puDst, puSrc1, pr32Src2); 205 IEM_MC_MAYBE_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT(); 206 IEM_MC_STORE_XREG_XMM( IEM_GET_MODRM_REG(pVCpu, bRm), uDst); 207 IEM_MC_CLEAR_YREG_128_UP( IEM_GET_MODRM_REG(pVCpu, bRm)); 208 IEM_MC_ADVANCE_RIP_AND_FINISH(); 209 IEM_MC_END(); 210 } 211 } 212 213 214 /** 215 * Common worker for scalar AVX/AVX2 instructions on the forms (addsd,subsd,etc.): 216 * - vxxxsd xmm0, xmm1, xmm2/mem64 217 * 218 * Exceptions type 4. AVX cpuid check for 128-bit operation. 219 * Ignores VEX.L, from SDM: 220 * Software should ensure VADDSD is encoded with VEX.L=0. 221 * Encoding VADDSD with VEX.L=1 may encounter unpredictable behavior 222 * across different processor generations. 223 */ 224 FNIEMOP_DEF_1(iemOpCommonAvx_Vx_Hx_R64, PFNIEMAIMPLFPAVXF3U128R64, pfnU128) 225 { 226 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 227 if (IEM_IS_MODRM_REG_MODE(bRm)) 228 { 229 /* 230 * Register, register. 231 */ 232 IEM_MC_BEGIN(IEM_MC_F_NOT_286_OR_OLDER, 0); 233 IEMOP_HLP_DONE_VEX_DECODING_EX(fAvx); 234 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); 235 IEM_MC_PREPARE_AVX_USAGE(); 236 237 IEM_MC_LOCAL(X86XMMREG, uDst); 238 IEM_MC_ARG_LOCAL_REF(PX86XMMREG, puDst, uDst, 0); 239 IEM_MC_ARG(PCX86XMMREG, puSrc1, 1); 240 IEM_MC_REF_XREG_XMM_CONST(puSrc1, IEM_GET_EFFECTIVE_VVVV(pVCpu)); 241 IEM_MC_ARG(PCRTFLOAT64U, pr64Src2, 2); 242 IEM_MC_REF_XREG_R64_CONST(pr64Src2, IEM_GET_MODRM_RM(pVCpu, bRm)); 243 IEM_MC_CALL_AVX_AIMPL_3(pfnU128, puDst, puSrc1, pr64Src2); 244 IEM_MC_MAYBE_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT(); 245 IEM_MC_STORE_XREG_XMM( IEM_GET_MODRM_REG(pVCpu, bRm), uDst); 246 IEM_MC_CLEAR_YREG_128_UP( IEM_GET_MODRM_REG(pVCpu, bRm)); 247 IEM_MC_ADVANCE_RIP_AND_FINISH(); 248 IEM_MC_END(); 249 } 250 else 251 { 252 /* 253 * Register, memory. 254 */ 255 IEM_MC_BEGIN(IEM_MC_F_NOT_286_OR_OLDER, 0); 256 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 257 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 258 IEMOP_HLP_DONE_VEX_DECODING_EX(fAvx); 259 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); 260 IEM_MC_PREPARE_AVX_USAGE(); 261 262 IEM_MC_LOCAL(RTFLOAT64U, r64Src2); 263 IEM_MC_ARG_LOCAL_REF(PCRTFLOAT64U, pr64Src2, r64Src2, 2); 264 IEM_MC_FETCH_MEM_R64(r64Src2, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 265 IEM_MC_LOCAL(X86XMMREG, uDst); 266 IEM_MC_ARG_LOCAL_REF(PX86XMMREG, puDst, uDst, 0); 267 IEM_MC_ARG(PCX86XMMREG, puSrc1, 1); 268 IEM_MC_REF_XREG_XMM_CONST(puSrc1, IEM_GET_EFFECTIVE_VVVV(pVCpu)); 269 IEM_MC_CALL_AVX_AIMPL_3(pfnU128, puDst, puSrc1, pr64Src2); 205 270 IEM_MC_MAYBE_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT(); 206 271 IEM_MC_STORE_XREG_XMM( IEM_GET_MODRM_REG(pVCpu, bRm), uDst); … … 2921 2986 2922 2987 /** Opcode VEX.F2.0F 0x58 - vaddsd Vsd, Hsd, Wsd */ 2923 FNIEMOP_STUB(iemOp_vaddsd_Vsd_Hsd_Wsd); 2988 FNIEMOP_DEF(iemOp_vaddsd_Vsd_Hsd_Wsd) 2989 { 2990 IEMOP_MNEMONIC3(VEX_RVM, VADDSD, vaddsd, Vpd, Hpd, Wsd, DISOPTYPE_HARMLESS | DISOPTYPE_X86_AVX, 0); 2991 return FNIEMOP_CALL_1(iemOpCommonAvx_Vx_Hx_R64, 2992 IEM_SELECT_HOST_OR_FALLBACK(fAvx, iemAImpl_vaddsd_u128_r64, iemAImpl_vaddsd_u128_r64_fallback)); 2993 } 2994 2924 2995 2925 2996 /** Opcode VEX.0F 0x59 - vmulps Vps, Hps, Wps */
Note:
See TracChangeset
for help on using the changeset viewer.