- Timestamp:
- Apr 4, 2024 8:54:42 AM (10 months ago)
- Location:
- trunk/src/VBox/VMM
- Files:
-
- 12 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllAImpl.asm
r104139 r104150 6175 6175 ; @param A0_32 The guest's MXCSR register value to use (input). 6176 6176 ; @param A1 Pointer to the EFLAGS value (input/output). 6177 ; @param A2 Pointer to the first source operand (aka readonly destination).6178 ; @param A3 Pointer to the second source operand.6177 ; @param A2_32 The first source operand. 6178 ; @param A3_32 The second source operand. 6179 6179 ; 6180 6180 BEGINPROC_FASTCALL iemAImpl_ucomiss_u128, 16 … … 6183 6183 SSE_AVX_LD_MXCSR A0_32 6184 6184 6185 movd qu xmm0, [A2]6186 movd qu xmm1, [A3]6185 movd xmm0, A2_32 6186 movd xmm1, A3_32 6187 6187 ucomiss xmm0, xmm1 6188 6188 IEM_SAVE_FLAGS A1, X86_EFL_ZF | X86_EFL_PF | X86_EFL_CF, 0, X86_EFL_OF | X86_EFL_SF | X86_EFL_AF … … 6198 6198 SSE_AVX_LD_MXCSR A0_32 6199 6199 6200 movd quxmm0, [A2]6201 movd quxmm1, [A3]6200 movd xmm0, [A2] 6201 movd xmm1, [A3] 6202 6202 vucomiss xmm0, xmm1 6203 6203 IEM_SAVE_FLAGS A1, X86_EFL_ZF | X86_EFL_PF | X86_EFL_CF, 0, X86_EFL_OF | X86_EFL_SF | X86_EFL_AF … … 6215 6215 ; @param A0_32 The guest's MXCSR register value to use (input). 6216 6216 ; @param A1 Pointer to the EFLAGS value (input/output). 6217 ; @param A2 Pointer to the first source operand (aka readonly destination).6218 ; @param A3 Pointer to the second source operand.6217 ; @param A2 The first source operand. 6218 ; @param A3 The second source operand. 6219 6219 ; 6220 6220 BEGINPROC_FASTCALL iemAImpl_ucomisd_u128, 16 … … 6223 6223 SSE_AVX_LD_MXCSR A0_32 6224 6224 6225 mov dqu xmm0, [A2]6226 mov dqu xmm1, [A3]6225 movq xmm0, A2 6226 movq xmm1, A3 6227 6227 ucomisd xmm0, xmm1 6228 6228 IEM_SAVE_FLAGS A1, X86_EFL_ZF | X86_EFL_PF | X86_EFL_CF, 0, X86_EFL_OF | X86_EFL_SF | X86_EFL_AF … … 6238 6238 SSE_AVX_LD_MXCSR A0_32 6239 6239 6240 mov dqu xmm0, [A2]6241 mov dqu xmm1, [A3]6240 movq xmm0, A2 6241 movq xmm1, A3 6242 6242 vucomisd xmm0, xmm1 6243 6243 IEM_SAVE_FLAGS A1, X86_EFL_ZF | X86_EFL_PF | X86_EFL_CF, 0, X86_EFL_OF | X86_EFL_SF | X86_EFL_AF … … 6254 6254 ; @param A0_32 The guest's MXCSR register value to use (input). 6255 6255 ; @param A1 Pointer to the EFLAGS value (input/output). 6256 ; @param A2 Pointer to the first source operand (aka readonly destination).6257 ; @param A3 Pointer to the second source operand.6256 ; @param A2_32 The first source operand. 6257 ; @param A3_32 The second source operand. 6258 6258 ; 6259 6259 BEGINPROC_FASTCALL iemAImpl_comiss_u128, 16 … … 6262 6262 SSE_AVX_LD_MXCSR A0_32 6263 6263 6264 movd qu xmm0, [A2]6265 movd qu xmm1, [A3]6264 movd xmm0, A2_32 6265 movd xmm1, A3_32 6266 6266 comiss xmm0, xmm1 6267 6267 IEM_SAVE_FLAGS A1, X86_EFL_ZF | X86_EFL_PF | X86_EFL_CF, 0, X86_EFL_OF | X86_EFL_SF | X86_EFL_AF … … 6277 6277 SSE_AVX_LD_MXCSR A0_32 6278 6278 6279 movd qu xmm0, [A2]6280 movd qu xmm1, [A3]6279 movd xmm0, A2_32 6280 movd xmm1, A3_32 6281 6281 vcomiss xmm0, xmm1 6282 6282 IEM_SAVE_FLAGS A1, X86_EFL_ZF | X86_EFL_PF | X86_EFL_CF, 0, X86_EFL_OF | X86_EFL_SF | X86_EFL_AF … … 6294 6294 ; @param A0_32 The guest's MXCSR register value to use (input). 6295 6295 ; @param A1 Pointer to the EFLAGS value (input/output). 6296 ; @param A2 Pointer to the first source operand (aka readonly destination).6297 ; @param A3 Pointer to the second source operand.6296 ; @param A2 The first source operand. 6297 ; @param A3 The second source operand. 6298 6298 ; 6299 6299 BEGINPROC_FASTCALL iemAImpl_comisd_u128, 16 … … 6302 6302 SSE_AVX_LD_MXCSR A0_32 6303 6303 6304 mov dqu xmm0, [A2]6305 mov dqu xmm1, [A3]6304 movq xmm0, A2 6305 movq xmm1, A3 6306 6306 comisd xmm0, xmm1 6307 6307 IEM_SAVE_FLAGS A1, X86_EFL_ZF | X86_EFL_PF | X86_EFL_CF, 0, X86_EFL_OF | X86_EFL_SF | X86_EFL_AF … … 6317 6317 SSE_AVX_LD_MXCSR A0_32 6318 6318 6319 mov dqu xmm0, [A2]6320 mov dqu xmm1, [A3]6319 movq xmm0, A2 6320 movq xmm1, A3 6321 6321 vcomisd xmm0, xmm1 6322 6322 IEM_SAVE_FLAGS A1, X86_EFL_ZF | X86_EFL_PF | X86_EFL_CF, 0, X86_EFL_OF | X86_EFL_SF | X86_EFL_AF -
trunk/src/VBox/VMM/VMMAll/IEMAllAImplC.cpp
r104133 r104150 18176 18176 */ 18177 18177 #ifdef IEM_WITHOUT_ASSEMBLY 18178 IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_ucomiss_u128,(uint32_t uMxCsrIn, uint32_t *pfEFlags, PCX86XMMREG puSrc1, PCX86XMMREG puSrc2))18178 IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_ucomiss_u128,(uint32_t uMxCsrIn, uint32_t *pfEFlags, RTFLOAT32U uSrc1, RTFLOAT32U uSrc2)) 18179 18179 { 18180 18180 uint32_t fEFlagsNew = *pfEFlags & ~X86_EFL_STATUS_BITS; 18181 18181 18182 if (RTFLOAT32U_IS_SIGNALLING_NAN(& puSrc1->ar32[0]) || RTFLOAT32U_IS_SIGNALLING_NAN(&puSrc2->ar32[0]))18182 if (RTFLOAT32U_IS_SIGNALLING_NAN(&uSrc1) || RTFLOAT32U_IS_SIGNALLING_NAN(&uSrc2)) 18183 18183 { 18184 18184 uMxCsrIn |= X86_MXCSR_IE; 18185 18185 fEFlagsNew |= X86_EFL_ZF | X86_EFL_PF | X86_EFL_CF; /* UNORDERED 111 */ 18186 18186 } 18187 else if (RTFLOAT32U_IS_QUIET_NAN(& puSrc1->ar32[0]) || RTFLOAT32U_IS_QUIET_NAN(&puSrc2->ar32[0]))18187 else if (RTFLOAT32U_IS_QUIET_NAN(&uSrc1) || RTFLOAT32U_IS_QUIET_NAN(&uSrc2)) 18188 18188 { 18189 18189 /* ucomiss doesn't raise \#IE for quiet NaNs. */ … … 18195 18195 18196 18196 RTFLOAT32U r32Src1, r32Src2; 18197 uint32_t fDe = iemSsePrepareValueR32(&r32Src1, uMxCsrIn, & puSrc1->ar32[0]);18198 fDe |= iemSsePrepareValueR32(&r32Src2, uMxCsrIn, & puSrc2->ar32[0]);18197 uint32_t fDe = iemSsePrepareValueR32(&r32Src1, uMxCsrIn, &uSrc1); 18198 fDe |= iemSsePrepareValueR32(&r32Src2, uMxCsrIn, &uSrc2); 18199 18199 18200 18200 float32_t f32Src1 = iemFpSoftF32FromIprt(&r32Src1); … … 18214 18214 #endif 18215 18215 18216 IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_vucomiss_u128_fallback,(uint32_t uMxCsrIn, uint32_t *pfEFlags, PCX86XMMREG puSrc1, PCX86XMMREG puSrc2))18217 { 18218 return iemAImpl_ucomiss_u128(uMxCsrIn, pfEFlags, puSrc1, puSrc2);18216 IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_vucomiss_u128_fallback,(uint32_t uMxCsrIn, uint32_t *pfEFlags, RTFLOAT32U uSrc1, RTFLOAT32U uSrc2)) 18217 { 18218 return iemAImpl_ucomiss_u128(uMxCsrIn, pfEFlags, uSrc1, uSrc2); 18219 18219 } 18220 18220 … … 18224 18224 */ 18225 18225 #ifdef IEM_WITHOUT_ASSEMBLY 18226 IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_ucomisd_u128,(uint32_t uMxCsrIn, uint32_t *pfEFlags, PCX86XMMREG puSrc1, PCX86XMMREG puSrc2))18226 IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_ucomisd_u128,(uint32_t uMxCsrIn, uint32_t *pfEFlags, RTFLOAT64U uSrc1, RTFLOAT64U uSrc2)) 18227 18227 { 18228 18228 uint32_t fEFlagsNew = *pfEFlags & ~X86_EFL_STATUS_BITS; 18229 18229 18230 if (RTFLOAT64U_IS_SIGNALLING_NAN(& puSrc1->ar64[0]) || RTFLOAT64U_IS_SIGNALLING_NAN(&puSrc2->ar64[0]))18230 if (RTFLOAT64U_IS_SIGNALLING_NAN(&uSrc1) || RTFLOAT64U_IS_SIGNALLING_NAN(&uSrc2)) 18231 18231 { 18232 18232 uMxCsrIn |= X86_MXCSR_IE; 18233 18233 fEFlagsNew |= X86_EFL_ZF | X86_EFL_PF | X86_EFL_CF; /* UNORDERED 111 */ 18234 18234 } 18235 else if (RTFLOAT64U_IS_QUIET_NAN(& puSrc1->ar64[0]) || RTFLOAT64U_IS_QUIET_NAN(&puSrc2->ar64[0]))18235 else if (RTFLOAT64U_IS_QUIET_NAN(&uSrc1) || RTFLOAT64U_IS_QUIET_NAN(&uSrc2)) 18236 18236 { 18237 18237 /* ucomiss doesn't raise \#IE for quiet NaNs. */ … … 18243 18243 18244 18244 RTFLOAT64U r64Src1, r64Src2; 18245 uint32_t fDe = iemSsePrepareValueR64(&r64Src1, uMxCsrIn, & puSrc1->ar64[0])18246 | iemSsePrepareValueR64(&r64Src2, uMxCsrIn, & puSrc2->ar64[0]);18245 uint32_t fDe = iemSsePrepareValueR64(&r64Src1, uMxCsrIn, &uSrc1) 18246 | iemSsePrepareValueR64(&r64Src2, uMxCsrIn, &uSrc2); 18247 18247 18248 18248 float64_t f64Src1 = iemFpSoftF64FromIprt(&r64Src1); … … 18262 18262 #endif 18263 18263 18264 IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_vucomisd_u128_fallback,(uint32_t uMxCsrIn, uint32_t *pfEFlags, PCX86XMMREG puSrc1, PCX86XMMREG puSrc2))18265 { 18266 return iemAImpl_ucomisd_u128(uMxCsrIn, pfEFlags, puSrc1, puSrc2);18264 IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_vucomisd_u128_fallback,(uint32_t uMxCsrIn, uint32_t *pfEFlags, RTFLOAT64U uSrc1, RTFLOAT64U uSrc2)) 18265 { 18266 return iemAImpl_ucomisd_u128(uMxCsrIn, pfEFlags, uSrc1, uSrc2); 18267 18267 } 18268 18268 … … 18272 18272 */ 18273 18273 #ifdef IEM_WITHOUT_ASSEMBLY 18274 IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_comiss_u128,(uint32_t uMxCsrIn, uint32_t *pfEFlags, PCX86XMMREG puSrc1, PCX86XMMREG puSrc2))18274 IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_comiss_u128,(uint32_t uMxCsrIn, uint32_t *pfEFlags, RTFLOAT32U uSrc1, RTFLOAT32U uSrc2)) 18275 18275 { 18276 18276 uint32_t fEFlagsNew = *pfEFlags & ~X86_EFL_STATUS_BITS; 18277 18277 18278 if ( RTFLOAT32U_IS_SIGNALLING_NAN(& puSrc1->ar32[0]) || RTFLOAT32U_IS_SIGNALLING_NAN(&puSrc2->ar32[0])18279 || RTFLOAT32U_IS_QUIET_NAN(& puSrc1->ar32[0]) || RTFLOAT32U_IS_QUIET_NAN(&puSrc2->ar32[0]))18278 if ( RTFLOAT32U_IS_SIGNALLING_NAN(&uSrc1) || RTFLOAT32U_IS_SIGNALLING_NAN(&uSrc2) 18279 || RTFLOAT32U_IS_QUIET_NAN(&uSrc1) || RTFLOAT32U_IS_QUIET_NAN(&uSrc2)) 18280 18280 { 18281 18281 uMxCsrIn |= X86_MXCSR_IE; … … 18287 18287 18288 18288 RTFLOAT32U r32Src1, r32Src2; 18289 uint32_t fDe = iemSsePrepareValueR32(&r32Src1, uMxCsrIn, & puSrc1->ar32[0])18290 | iemSsePrepareValueR32(&r32Src2, uMxCsrIn, & puSrc2->ar32[0]);18289 uint32_t fDe = iemSsePrepareValueR32(&r32Src1, uMxCsrIn, &uSrc1) 18290 | iemSsePrepareValueR32(&r32Src2, uMxCsrIn, &uSrc2); 18291 18291 18292 18292 float32_t f32Src1 = iemFpSoftF32FromIprt(&r32Src1); … … 18307 18307 18308 18308 18309 IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_vcomiss_u128_fallback,(uint32_t uMxCsrIn, uint32_t *pfEFlags, PCX86XMMREG puSrc1, PCX86XMMREG puSrc2))18310 { 18311 return iemAImpl_comiss_u128(uMxCsrIn, pfEFlags, puSrc1, puSrc2);18309 IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_vcomiss_u128_fallback,(uint32_t uMxCsrIn, uint32_t *pfEFlags, RTFLOAT32U uSrc1, RTFLOAT32U uSrc2)) 18310 { 18311 return iemAImpl_comiss_u128(uMxCsrIn, pfEFlags, uSrc1, uSrc2); 18312 18312 } 18313 18313 … … 18317 18317 */ 18318 18318 #ifdef IEM_WITHOUT_ASSEMBLY 18319 IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_comisd_u128,(uint32_t uMxCsrIn, uint32_t *pfEFlags, PCX86XMMREG puSrc1, PCX86XMMREG puSrc2))18319 IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_comisd_u128,(uint32_t uMxCsrIn, uint32_t *pfEFlags, RTFLOAT64U uSrc1, RTFLOAT64U uSrc2)) 18320 18320 { 18321 18321 uint32_t fEFlagsNew = *pfEFlags & ~X86_EFL_STATUS_BITS; 18322 18322 18323 if ( RTFLOAT64U_IS_SIGNALLING_NAN(& puSrc1->ar64[0]) || RTFLOAT64U_IS_SIGNALLING_NAN(&puSrc2->ar64[0])18324 || RTFLOAT64U_IS_QUIET_NAN(& puSrc1->ar64[0]) || RTFLOAT64U_IS_QUIET_NAN(&puSrc2->ar64[0]))18323 if ( RTFLOAT64U_IS_SIGNALLING_NAN(&uSrc1) || RTFLOAT64U_IS_SIGNALLING_NAN(&uSrc2) 18324 || RTFLOAT64U_IS_QUIET_NAN(&uSrc1) || RTFLOAT64U_IS_QUIET_NAN(&uSrc2)) 18325 18325 { 18326 18326 uMxCsrIn |= X86_MXCSR_IE; … … 18332 18332 18333 18333 RTFLOAT64U r64Src1, r64Src2; 18334 uint32_t fDe = iemSsePrepareValueR64(&r64Src1, uMxCsrIn, & puSrc1->ar64[0]);18335 fDe |= iemSsePrepareValueR64(&r64Src2, uMxCsrIn, & puSrc2->ar64[0]);18334 uint32_t fDe = iemSsePrepareValueR64(&r64Src1, uMxCsrIn, &uSrc1); 18335 fDe |= iemSsePrepareValueR64(&r64Src2, uMxCsrIn, &uSrc2); 18336 18336 18337 18337 float64_t f64Src1 = iemFpSoftF64FromIprt(&r64Src1); … … 18351 18351 #endif 18352 18352 18353 IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_vcomisd_u128_fallback,(uint32_t uMxCsrIn, uint32_t *pfEFlags, PCX86XMMREG puSrc1, PCX86XMMREG puSrc2))18354 { 18355 return iemAImpl_comisd_u128(uMxCsrIn, pfEFlags, puSrc1, puSrc2);18353 IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_vcomisd_u128_fallback,(uint32_t uMxCsrIn, uint32_t *pfEFlags, RTFLOAT64U uSrc1, RTFLOAT64U uSrc2)) 18354 { 18355 return iemAImpl_comisd_u128(uMxCsrIn, pfEFlags, uSrc1, uSrc2); 18356 18356 } 18357 18357 -
trunk/src/VBox/VMM/VMMAll/IEMAllInstPython.py
r104143 r104150 3091 3091 'IEM_MC_FETCH_MEM_XMM_ALIGN_SSE': (McBlock.parseMcGeneric, True, True, g_fNativeSimd), 3092 3092 'IEM_MC_FETCH_MEM_XMM_NO_AC': (McBlock.parseMcGeneric, True, True, False, ), 3093 'IEM_MC_FETCH_MEM_XMM_U32': (McBlock.parseMcGeneric, True, True, False, ),3094 'IEM_MC_FETCH_MEM_XMM_U64': (McBlock.parseMcGeneric, True, True, False, ),3095 3093 'IEM_MC_FETCH_MEM_XMM_ALIGN_SSE_AND_XREG_XMM': (McBlock.parseMcGeneric, True, True, False, ), 3096 3094 'IEM_MC_FETCH_MEM_XMM_U32_AND_XREG_XMM': (McBlock.parseMcGeneric, True, True, False, ), … … 3110 3108 'IEM_MC_FETCH_SREG_ZX_U32': (McBlock.parseMcGeneric, False, False, True, ), 3111 3109 'IEM_MC_FETCH_SREG_ZX_U64': (McBlock.parseMcGeneric, False, False, True, ), 3110 'IEM_MC_FETCH_XREG_R32': (McBlock.parseMcGeneric, False, False, g_fNativeSimd), 3111 'IEM_MC_FETCH_XREG_R64': (McBlock.parseMcGeneric, False, False, g_fNativeSimd), 3112 3112 'IEM_MC_FETCH_XREG_U128': (McBlock.parseMcGeneric, False, False, g_fNativeSimd), 3113 3113 'IEM_MC_FETCH_XREG_U16': (McBlock.parseMcGeneric, False, False, g_fNativeSimd), -
trunk/src/VBox/VMM/VMMAll/IEMAllInstTwoByte0f.cpp.h
r104129 r104150 4654 4654 IEM_MC_LOCAL(uint32_t, fEFlags); 4655 4655 IEM_MC_ARG_LOCAL_REF(uint32_t *, pEFlags, fEFlags, 0); 4656 IEM_MC_ARG( PCX86XMMREG, puSrc1,1);4657 IEM_MC_ARG( PCX86XMMREG, puSrc2,2);4656 IEM_MC_ARG(RTFLOAT32U, uSrc1, 1); 4657 IEM_MC_ARG(RTFLOAT32U, uSrc2, 2); 4658 4658 IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT(); 4659 4659 IEM_MC_PREPARE_SSE_USAGE(); 4660 4660 IEM_MC_FETCH_EFLAGS(fEFlags); 4661 IEM_MC_ REF_XREG_XMM_CONST(puSrc1, IEM_GET_MODRM_REG(pVCpu, bRm));4662 IEM_MC_ REF_XREG_XMM_CONST(puSrc2, IEM_GET_MODRM_RM(pVCpu, bRm));4663 IEM_MC_CALL_SSE_AIMPL_3(iemAImpl_ucomiss_u128, pEFlags, puSrc1, puSrc2);4661 IEM_MC_FETCH_XREG_R32(uSrc1, IEM_GET_MODRM_REG(pVCpu, bRm), 0 /*a_iDWord*/); 4662 IEM_MC_FETCH_XREG_R32(uSrc2, IEM_GET_MODRM_RM(pVCpu, bRm), 0 /*a_iDWord*/); 4663 IEM_MC_CALL_SSE_AIMPL_3(iemAImpl_ucomiss_u128, pEFlags, uSrc1, uSrc2); 4664 4664 IEM_MC_IF_MXCSR_XCPT_PENDING() { 4665 4665 IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT(); … … 4679 4679 IEM_MC_LOCAL(uint32_t, fEFlags); 4680 4680 IEM_MC_ARG_LOCAL_REF(uint32_t *, pEFlags, fEFlags, 0); 4681 IEM_MC_ARG(PCX86XMMREG, puSrc1, 1); 4682 IEM_MC_LOCAL(X86XMMREG, uSrc2); 4683 IEM_MC_ARG_LOCAL_REF(PCX86XMMREG, puSrc2, uSrc2, 2); 4681 IEM_MC_ARG(RTFLOAT32U, uSrc1, 1); 4682 IEM_MC_ARG(RTFLOAT32U, uSrc2, 2); 4684 4683 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 4685 4684 … … 4687 4686 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse); 4688 4687 IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT(); 4689 IEM_MC_FETCH_MEM_ XMM_U32(uSrc2, 0 /*a_DWord*/, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);4688 IEM_MC_FETCH_MEM_R32(uSrc2, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 4690 4689 4691 4690 IEM_MC_PREPARE_SSE_USAGE(); 4692 4691 IEM_MC_FETCH_EFLAGS(fEFlags); 4693 IEM_MC_ REF_XREG_XMM_CONST(puSrc1, IEM_GET_MODRM_REG(pVCpu, bRm));4694 IEM_MC_CALL_SSE_AIMPL_3(iemAImpl_ucomiss_u128, pEFlags, puSrc1, puSrc2);4692 IEM_MC_FETCH_XREG_R32(uSrc1, IEM_GET_MODRM_REG(pVCpu, bRm), 0 /*a_iDWord*/); 4693 IEM_MC_CALL_SSE_AIMPL_3(iemAImpl_ucomiss_u128, pEFlags, uSrc1, uSrc2); 4695 4694 IEM_MC_IF_MXCSR_XCPT_PENDING() { 4696 4695 IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT(); … … 4724 4723 IEM_MC_LOCAL(uint32_t, fEFlags); 4725 4724 IEM_MC_ARG_LOCAL_REF(uint32_t *, pEFlags, fEFlags, 0); 4726 IEM_MC_ARG( PCX86XMMREG, puSrc1, 1);4727 IEM_MC_ARG( PCX86XMMREG, puSrc2,2);4725 IEM_MC_ARG(RTFLOAT64U, uSrc1, 1); 4726 IEM_MC_ARG(RTFLOAT64U, uSrc2, 2); 4728 4727 IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT(); 4729 4728 IEM_MC_PREPARE_SSE_USAGE(); 4730 4729 IEM_MC_FETCH_EFLAGS(fEFlags); 4731 IEM_MC_ REF_XREG_XMM_CONST(puSrc1, IEM_GET_MODRM_REG(pVCpu, bRm));4732 IEM_MC_ REF_XREG_XMM_CONST(puSrc2, IEM_GET_MODRM_RM(pVCpu, bRm));4733 IEM_MC_CALL_SSE_AIMPL_3(iemAImpl_ucomisd_u128, pEFlags, puSrc1, puSrc2);4730 IEM_MC_FETCH_XREG_R64(uSrc1, IEM_GET_MODRM_REG(pVCpu, bRm), 0 /*a_iQWord*/); 4731 IEM_MC_FETCH_XREG_R64(uSrc2, IEM_GET_MODRM_RM(pVCpu, bRm), 0 /*a_iQWord*/); 4732 IEM_MC_CALL_SSE_AIMPL_3(iemAImpl_ucomisd_u128, pEFlags, uSrc1, uSrc2); 4734 4733 IEM_MC_IF_MXCSR_XCPT_PENDING() { 4735 4734 IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT(); … … 4749 4748 IEM_MC_LOCAL(uint32_t, fEFlags); 4750 4749 IEM_MC_ARG_LOCAL_REF(uint32_t *, pEFlags, fEFlags, 0); 4751 IEM_MC_ARG(PCX86XMMREG, puSrc1, 1); 4752 IEM_MC_LOCAL(X86XMMREG, uSrc2); 4753 IEM_MC_ARG_LOCAL_REF(PCX86XMMREG, puSrc2, uSrc2, 2); 4750 IEM_MC_ARG(RTFLOAT64U, uSrc1, 1); 4751 IEM_MC_ARG(RTFLOAT64U, uSrc2, 2); 4754 4752 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 4755 4753 … … 4757 4755 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2); 4758 4756 IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT(); 4759 IEM_MC_FETCH_MEM_ XMM_U64(uSrc2, 0 /*a_QWord*/, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);4757 IEM_MC_FETCH_MEM_R64(uSrc2, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 4760 4758 4761 4759 IEM_MC_PREPARE_SSE_USAGE(); 4762 4760 IEM_MC_FETCH_EFLAGS(fEFlags); 4763 IEM_MC_ REF_XREG_XMM_CONST(puSrc1, IEM_GET_MODRM_REG(pVCpu, bRm));4764 IEM_MC_CALL_SSE_AIMPL_3(iemAImpl_ucomisd_u128, pEFlags, puSrc1, puSrc2);4761 IEM_MC_FETCH_XREG_R64(uSrc1, IEM_GET_MODRM_REG(pVCpu, bRm), 0 /*a_iQWord*/); 4762 IEM_MC_CALL_SSE_AIMPL_3(iemAImpl_ucomisd_u128, pEFlags, uSrc1, uSrc2); 4765 4763 IEM_MC_IF_MXCSR_XCPT_PENDING() { 4766 4764 IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT(); … … 4798 4796 IEM_MC_LOCAL(uint32_t, fEFlags); 4799 4797 IEM_MC_ARG_LOCAL_REF(uint32_t *, pEFlags, fEFlags, 0); 4800 IEM_MC_ARG( PCX86XMMREG, puSrc1,1);4801 IEM_MC_ARG( PCX86XMMREG, puSrc2,2);4798 IEM_MC_ARG(RTFLOAT32U, uSrc1, 1); 4799 IEM_MC_ARG(RTFLOAT32U, uSrc2, 2); 4802 4800 IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT(); 4803 4801 IEM_MC_PREPARE_SSE_USAGE(); 4804 4802 IEM_MC_FETCH_EFLAGS(fEFlags); 4805 IEM_MC_ REF_XREG_XMM_CONST(puSrc1, IEM_GET_MODRM_REG(pVCpu, bRm));4806 IEM_MC_ REF_XREG_XMM_CONST(puSrc2, IEM_GET_MODRM_RM(pVCpu, bRm));4807 IEM_MC_CALL_SSE_AIMPL_3(iemAImpl_comiss_u128, pEFlags, puSrc1, puSrc2);4803 IEM_MC_FETCH_XREG_R32(uSrc1, IEM_GET_MODRM_REG(pVCpu, bRm), 0 /*a_iDWord*/); 4804 IEM_MC_FETCH_XREG_R32(uSrc2, IEM_GET_MODRM_RM(pVCpu, bRm), 0 /*a_iDWord*/); 4805 IEM_MC_CALL_SSE_AIMPL_3(iemAImpl_comiss_u128, pEFlags, uSrc1, uSrc2); 4808 4806 IEM_MC_IF_MXCSR_XCPT_PENDING() { 4809 4807 IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT(); … … 4823 4821 IEM_MC_LOCAL(uint32_t, fEFlags); 4824 4822 IEM_MC_ARG_LOCAL_REF(uint32_t *, pEFlags, fEFlags, 0); 4825 IEM_MC_ARG(PCX86XMMREG, puSrc1, 1); 4826 IEM_MC_LOCAL(X86XMMREG, uSrc2); 4827 IEM_MC_ARG_LOCAL_REF(PCX86XMMREG, puSrc2, uSrc2, 2); 4823 IEM_MC_ARG(RTFLOAT32U, uSrc1, 1); 4824 IEM_MC_ARG(RTFLOAT32U, uSrc2, 2); 4828 4825 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 4829 4826 … … 4831 4828 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse); 4832 4829 IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT(); 4833 IEM_MC_FETCH_MEM_ XMM_U32(uSrc2, 0 /*a_DWord*/, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);4830 IEM_MC_FETCH_MEM_R32(uSrc2, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 4834 4831 4835 4832 IEM_MC_PREPARE_SSE_USAGE(); 4836 4833 IEM_MC_FETCH_EFLAGS(fEFlags); 4837 IEM_MC_ REF_XREG_XMM_CONST(puSrc1, IEM_GET_MODRM_REG(pVCpu, bRm));4838 IEM_MC_CALL_SSE_AIMPL_3(iemAImpl_comiss_u128, pEFlags, puSrc1, puSrc2);4834 IEM_MC_FETCH_XREG_R32(uSrc1, IEM_GET_MODRM_REG(pVCpu, bRm), 0 /*a_iDWord*/); 4835 IEM_MC_CALL_SSE_AIMPL_3(iemAImpl_comiss_u128, pEFlags, uSrc1, uSrc2); 4839 4836 IEM_MC_IF_MXCSR_XCPT_PENDING() { 4840 4837 IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT(); … … 4868 4865 IEM_MC_LOCAL(uint32_t, fEFlags); 4869 4866 IEM_MC_ARG_LOCAL_REF(uint32_t *, pEFlags, fEFlags, 0); 4870 IEM_MC_ARG( PCX86XMMREG, puSrc1,1);4871 IEM_MC_ARG( PCX86XMMREG, puSrc2,2);4867 IEM_MC_ARG(RTFLOAT64U, uSrc1, 1); 4868 IEM_MC_ARG(RTFLOAT64U, uSrc2, 2); 4872 4869 IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT(); 4873 4870 IEM_MC_PREPARE_SSE_USAGE(); 4874 4871 IEM_MC_FETCH_EFLAGS(fEFlags); 4875 IEM_MC_ REF_XREG_XMM_CONST(puSrc1, IEM_GET_MODRM_REG(pVCpu, bRm));4876 IEM_MC_ REF_XREG_XMM_CONST(puSrc2, IEM_GET_MODRM_RM(pVCpu, bRm));4877 IEM_MC_CALL_SSE_AIMPL_3(iemAImpl_comisd_u128, pEFlags, puSrc1, puSrc2);4872 IEM_MC_FETCH_XREG_R64(uSrc1, IEM_GET_MODRM_REG(pVCpu, bRm), 0 /*a_iQWord*/); 4873 IEM_MC_FETCH_XREG_R64(uSrc2, IEM_GET_MODRM_RM(pVCpu, bRm), 0 /*a_iQWord*/); 4874 IEM_MC_CALL_SSE_AIMPL_3(iemAImpl_comisd_u128, pEFlags, uSrc1, uSrc2); 4878 4875 IEM_MC_IF_MXCSR_XCPT_PENDING() { 4879 4876 IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT(); … … 4893 4890 IEM_MC_LOCAL(uint32_t, fEFlags); 4894 4891 IEM_MC_ARG_LOCAL_REF(uint32_t *, pEFlags, fEFlags, 0); 4895 IEM_MC_ARG(PCX86XMMREG, puSrc1, 1); 4896 IEM_MC_LOCAL(X86XMMREG, uSrc2); 4897 IEM_MC_ARG_LOCAL_REF(PCX86XMMREG, puSrc2, uSrc2, 2); 4892 IEM_MC_ARG(RTFLOAT64U, uSrc1, 1); 4893 IEM_MC_ARG(RTFLOAT64U, uSrc2, 2); 4898 4894 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 4899 4895 … … 4901 4897 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2); 4902 4898 IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT(); 4903 IEM_MC_FETCH_MEM_ XMM_U64(uSrc2, 0 /*a_QWord*/, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);4899 IEM_MC_FETCH_MEM_R64(uSrc2, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 4904 4900 4905 4901 IEM_MC_PREPARE_SSE_USAGE(); 4906 4902 IEM_MC_FETCH_EFLAGS(fEFlags); 4907 IEM_MC_ REF_XREG_XMM_CONST(puSrc1, IEM_GET_MODRM_REG(pVCpu, bRm));4908 IEM_MC_CALL_SSE_AIMPL_3(iemAImpl_comisd_u128, pEFlags, puSrc1, puSrc2);4903 IEM_MC_FETCH_XREG_R64(uSrc1, IEM_GET_MODRM_REG(pVCpu, bRm), 0 /*a_iQWord*/); 4904 IEM_MC_CALL_SSE_AIMPL_3(iemAImpl_comisd_u128, pEFlags, uSrc1, uSrc2); 4909 4905 IEM_MC_IF_MXCSR_XCPT_PENDING() { 4910 4906 IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT(); -
trunk/src/VBox/VMM/VMMAll/IEMAllInstVexMap1.cpp.h
r104135 r104150 2336 2336 IEM_MC_LOCAL(uint32_t, fEFlags); 2337 2337 IEM_MC_ARG_LOCAL_REF(uint32_t *, pEFlags, fEFlags, 0); 2338 IEM_MC_ARG( PCX86XMMREG, puSrc1,1);2339 IEM_MC_ARG( PCX86XMMREG, puSrc2,2);2338 IEM_MC_ARG(RTFLOAT32U, uSrc1, 1); 2339 IEM_MC_ARG(RTFLOAT32U, uSrc2, 2); 2340 2340 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); 2341 2341 IEM_MC_PREPARE_AVX_USAGE(); 2342 2342 IEM_MC_FETCH_EFLAGS(fEFlags); 2343 IEM_MC_ REF_XREG_XMM_CONST(puSrc1, IEM_GET_MODRM_REG(pVCpu, bRm));2344 IEM_MC_ REF_XREG_XMM_CONST(puSrc2, IEM_GET_MODRM_RM(pVCpu, bRm));2343 IEM_MC_FETCH_XREG_R32(uSrc1, IEM_GET_MODRM_REG(pVCpu, bRm), 0 /*a_iDWord*/); 2344 IEM_MC_FETCH_XREG_R32(uSrc2, IEM_GET_MODRM_RM(pVCpu, bRm), 0 /*a_iDWord*/); 2345 2345 IEM_MC_CALL_AVX_AIMPL_3(IEM_SELECT_HOST_OR_FALLBACK(fAvx, iemAImpl_vucomiss_u128, iemAImpl_vucomiss_u128_fallback), 2346 pEFlags, puSrc1, puSrc2);2346 pEFlags, uSrc1, uSrc2); 2347 2347 IEM_MC_IF_MXCSR_XCPT_PENDING() { 2348 2348 IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT(); … … 2362 2362 IEM_MC_LOCAL(uint32_t, fEFlags); 2363 2363 IEM_MC_ARG_LOCAL_REF(uint32_t *, pEFlags, fEFlags, 0); 2364 IEM_MC_ARG(PCX86XMMREG, puSrc1, 1); 2365 IEM_MC_LOCAL(X86XMMREG, uSrc2); 2366 IEM_MC_ARG_LOCAL_REF(PCX86XMMREG, puSrc2, uSrc2, 2); 2364 IEM_MC_ARG(RTFLOAT32U, uSrc1, 1); 2365 IEM_MC_ARG(RTFLOAT32U, uSrc2, 2); 2367 2366 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 2368 2367 … … 2370 2369 IEMOP_HLP_DONE_VEX_DECODING_L0_AND_NO_VVVV_EX(fAvx); 2371 2370 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); 2372 IEM_MC_FETCH_MEM_ XMM_U32(uSrc2, 0 /*a_DWord*/, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);2371 IEM_MC_FETCH_MEM_R32(uSrc2, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 2373 2372 2374 2373 IEM_MC_PREPARE_AVX_USAGE(); 2375 2374 IEM_MC_FETCH_EFLAGS(fEFlags); 2376 IEM_MC_ REF_XREG_XMM_CONST(puSrc1, IEM_GET_MODRM_REG(pVCpu, bRm));2375 IEM_MC_FETCH_XREG_R32(uSrc1, IEM_GET_MODRM_REG(pVCpu, bRm), 0 /*a_iDWord*/); 2377 2376 IEM_MC_CALL_AVX_AIMPL_3(IEM_SELECT_HOST_OR_FALLBACK(fAvx, iemAImpl_vucomiss_u128, iemAImpl_vucomiss_u128_fallback), 2378 pEFlags, puSrc1, puSrc2);2377 pEFlags, uSrc1, uSrc2); 2379 2378 IEM_MC_IF_MXCSR_XCPT_PENDING() { 2380 2379 IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT(); … … 2408 2407 IEM_MC_LOCAL(uint32_t, fEFlags); 2409 2408 IEM_MC_ARG_LOCAL_REF(uint32_t *, pEFlags, fEFlags, 0); 2410 IEM_MC_ARG( PCX86XMMREG, puSrc1,1);2411 IEM_MC_ARG( PCX86XMMREG, puSrc2,2);2409 IEM_MC_ARG(RTFLOAT64U, uSrc1, 1); 2410 IEM_MC_ARG(RTFLOAT64U, uSrc2, 2); 2412 2411 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); 2413 2412 IEM_MC_PREPARE_AVX_USAGE(); 2414 2413 IEM_MC_FETCH_EFLAGS(fEFlags); 2415 IEM_MC_ REF_XREG_XMM_CONST(puSrc1, IEM_GET_MODRM_REG(pVCpu, bRm));2416 IEM_MC_ REF_XREG_XMM_CONST(puSrc2, IEM_GET_MODRM_RM(pVCpu, bRm));2414 IEM_MC_FETCH_XREG_R64(uSrc1, IEM_GET_MODRM_REG(pVCpu, bRm), 0 /*a_iQWord*/); 2415 IEM_MC_FETCH_XREG_R64(uSrc2, IEM_GET_MODRM_RM(pVCpu, bRm), 0 /*a_iQWord*/); 2417 2416 IEM_MC_CALL_AVX_AIMPL_3(IEM_SELECT_HOST_OR_FALLBACK(fAvx, iemAImpl_vucomisd_u128, iemAImpl_vucomisd_u128_fallback), 2418 pEFlags, puSrc1, puSrc2);2417 pEFlags, uSrc1, uSrc2); 2419 2418 IEM_MC_IF_MXCSR_XCPT_PENDING() { 2420 2419 IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT(); … … 2434 2433 IEM_MC_LOCAL(uint32_t, fEFlags); 2435 2434 IEM_MC_ARG_LOCAL_REF(uint32_t *, pEFlags, fEFlags, 0); 2436 IEM_MC_ARG(PCX86XMMREG, puSrc1, 1); 2437 IEM_MC_LOCAL(X86XMMREG, uSrc2); 2438 IEM_MC_ARG_LOCAL_REF(PCX86XMMREG, puSrc2, uSrc2, 2); 2435 IEM_MC_ARG(RTFLOAT64U, uSrc1, 1); 2436 IEM_MC_ARG(RTFLOAT64U, uSrc2, 2); 2439 2437 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 2440 2438 … … 2442 2440 IEMOP_HLP_DONE_VEX_DECODING_L0_AND_NO_VVVV_EX(fAvx); 2443 2441 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); 2444 IEM_MC_FETCH_MEM_ XMM_U32(uSrc2, 0 /*a_DWord*/, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);2442 IEM_MC_FETCH_MEM_R64(uSrc2, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 2445 2443 2446 2444 IEM_MC_PREPARE_AVX_USAGE(); 2447 2445 IEM_MC_FETCH_EFLAGS(fEFlags); 2448 IEM_MC_ REF_XREG_XMM_CONST(puSrc1, IEM_GET_MODRM_REG(pVCpu, bRm));2446 IEM_MC_FETCH_XREG_R64(uSrc1, IEM_GET_MODRM_REG(pVCpu, bRm), 0 /*a_iQWord*/); 2449 2447 IEM_MC_CALL_AVX_AIMPL_3(IEM_SELECT_HOST_OR_FALLBACK(fAvx, iemAImpl_vucomisd_u128, iemAImpl_vucomisd_u128_fallback), 2450 pEFlags, puSrc1, puSrc2);2448 pEFlags, uSrc1, uSrc2); 2451 2449 IEM_MC_IF_MXCSR_XCPT_PENDING() { 2452 2450 IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT(); … … 2483 2481 IEM_MC_LOCAL(uint32_t, fEFlags); 2484 2482 IEM_MC_ARG_LOCAL_REF(uint32_t *, pEFlags, fEFlags, 0); 2485 IEM_MC_ARG( PCX86XMMREG, puSrc1,1);2486 IEM_MC_ARG( PCX86XMMREG, puSrc2,2);2483 IEM_MC_ARG(RTFLOAT32U, uSrc1, 1); 2484 IEM_MC_ARG(RTFLOAT32U, uSrc2, 2); 2487 2485 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); 2488 2486 IEM_MC_PREPARE_AVX_USAGE(); 2489 2487 IEM_MC_FETCH_EFLAGS(fEFlags); 2490 IEM_MC_ REF_XREG_XMM_CONST(puSrc1, IEM_GET_MODRM_REG(pVCpu, bRm));2491 IEM_MC_ REF_XREG_XMM_CONST(puSrc2, IEM_GET_MODRM_RM(pVCpu, bRm));2488 IEM_MC_FETCH_XREG_R32(uSrc1, IEM_GET_MODRM_REG(pVCpu, bRm), 0 /*a_iDWord*/); 2489 IEM_MC_FETCH_XREG_R32(uSrc2, IEM_GET_MODRM_RM(pVCpu, bRm), 0 /*a_iDWord*/); 2492 2490 IEM_MC_CALL_AVX_AIMPL_3(IEM_SELECT_HOST_OR_FALLBACK(fAvx, iemAImpl_vcomiss_u128, iemAImpl_vcomiss_u128_fallback), 2493 pEFlags, puSrc1, puSrc2);2491 pEFlags, uSrc1, uSrc2); 2494 2492 IEM_MC_IF_MXCSR_XCPT_PENDING() { 2495 2493 IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT(); … … 2509 2507 IEM_MC_LOCAL(uint32_t, fEFlags); 2510 2508 IEM_MC_ARG_LOCAL_REF(uint32_t *, pEFlags, fEFlags, 0); 2511 IEM_MC_ARG(PCX86XMMREG, puSrc1, 1); 2512 IEM_MC_LOCAL(X86XMMREG, uSrc2); 2513 IEM_MC_ARG_LOCAL_REF(PCX86XMMREG, puSrc2, uSrc2, 2); 2509 IEM_MC_ARG(RTFLOAT32U, uSrc1, 1); 2510 IEM_MC_ARG(RTFLOAT32U, uSrc2, 2); 2514 2511 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 2515 2512 … … 2517 2514 IEMOP_HLP_DONE_VEX_DECODING_L0_AND_NO_VVVV_EX(fAvx); 2518 2515 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); 2519 IEM_MC_FETCH_MEM_ XMM_U32(uSrc2, 0 /*a_DWord*/, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);2516 IEM_MC_FETCH_MEM_R32(uSrc2, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 2520 2517 2521 2518 IEM_MC_PREPARE_AVX_USAGE(); 2522 2519 IEM_MC_FETCH_EFLAGS(fEFlags); 2523 IEM_MC_ REF_XREG_XMM_CONST(puSrc1, IEM_GET_MODRM_REG(pVCpu, bRm));2520 IEM_MC_FETCH_XREG_R32(uSrc1, IEM_GET_MODRM_REG(pVCpu, bRm), 0 /*a_iDWord*/); 2524 2521 IEM_MC_CALL_AVX_AIMPL_3(IEM_SELECT_HOST_OR_FALLBACK(fAvx, iemAImpl_vcomiss_u128, iemAImpl_vcomiss_u128_fallback), 2525 pEFlags, puSrc1, puSrc2);2522 pEFlags, uSrc1, uSrc2); 2526 2523 IEM_MC_IF_MXCSR_XCPT_PENDING() { 2527 2524 IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT(); … … 2555 2552 IEM_MC_LOCAL(uint32_t, fEFlags); 2556 2553 IEM_MC_ARG_LOCAL_REF(uint32_t *, pEFlags, fEFlags, 0); 2557 IEM_MC_ARG( PCX86XMMREG, puSrc1,1);2558 IEM_MC_ARG( PCX86XMMREG, puSrc2,2);2554 IEM_MC_ARG(RTFLOAT64U, uSrc1, 1); 2555 IEM_MC_ARG(RTFLOAT64U, uSrc2, 2); 2559 2556 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); 2560 2557 IEM_MC_PREPARE_AVX_USAGE(); 2561 2558 IEM_MC_FETCH_EFLAGS(fEFlags); 2562 IEM_MC_ REF_XREG_XMM_CONST(puSrc1, IEM_GET_MODRM_REG(pVCpu, bRm));2563 IEM_MC_ REF_XREG_XMM_CONST(puSrc2, IEM_GET_MODRM_RM(pVCpu, bRm));2559 IEM_MC_FETCH_XREG_R64(uSrc1, IEM_GET_MODRM_REG(pVCpu, bRm), 0 /*a_iQWord*/); 2560 IEM_MC_FETCH_XREG_R64(uSrc2, IEM_GET_MODRM_RM(pVCpu, bRm), 0 /*a_iQWord*/); 2564 2561 IEM_MC_CALL_AVX_AIMPL_3(IEM_SELECT_HOST_OR_FALLBACK(fAvx, iemAImpl_vcomisd_u128, iemAImpl_vcomisd_u128_fallback), 2565 pEFlags, puSrc1, puSrc2);2562 pEFlags, uSrc1, uSrc2); 2566 2563 IEM_MC_IF_MXCSR_XCPT_PENDING() { 2567 2564 IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT(); … … 2581 2578 IEM_MC_LOCAL(uint32_t, fEFlags); 2582 2579 IEM_MC_ARG_LOCAL_REF(uint32_t *, pEFlags, fEFlags, 0); 2583 IEM_MC_ARG(PCX86XMMREG, puSrc1, 1); 2584 IEM_MC_LOCAL(X86XMMREG, uSrc2); 2585 IEM_MC_ARG_LOCAL_REF(PCX86XMMREG, puSrc2, uSrc2, 2); 2580 IEM_MC_ARG(RTFLOAT64U, uSrc1, 1); 2581 IEM_MC_ARG(RTFLOAT64U, uSrc2, 2); 2586 2582 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 2587 2583 … … 2589 2585 IEMOP_HLP_DONE_VEX_DECODING_L0_AND_NO_VVVV_EX(fAvx); 2590 2586 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); 2591 IEM_MC_FETCH_MEM_ XMM_U32(uSrc2, 0 /*a_DWord*/, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);2587 IEM_MC_FETCH_MEM_R64(uSrc2, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 2592 2588 2593 2589 IEM_MC_PREPARE_AVX_USAGE(); 2594 2590 IEM_MC_FETCH_EFLAGS(fEFlags); 2595 IEM_MC_ REF_XREG_XMM_CONST(puSrc1, IEM_GET_MODRM_REG(pVCpu, bRm));2591 IEM_MC_FETCH_XREG_R64(uSrc1, IEM_GET_MODRM_REG(pVCpu, bRm), 0 /*a_iQWord*/); 2596 2592 IEM_MC_CALL_AVX_AIMPL_3(IEM_SELECT_HOST_OR_FALLBACK(fAvx, iemAImpl_vcomisd_u128, iemAImpl_vcomisd_u128_fallback), 2597 pEFlags, puSrc1, puSrc2);2593 pEFlags, uSrc1, uSrc2); 2598 2594 IEM_MC_IF_MXCSR_XCPT_PENDING() { 2599 2595 IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT(); -
trunk/src/VBox/VMM/VMMAll/IEMAllN8veLiveness.cpp
r104135 r104150 681 681 #define IEM_MC_FETCH_XREG_XMM(a_XmmValue, a_iXReg) NOP() 682 682 #define IEM_MC_FETCH_XREG_U64(a_u64Value, a_iXReg, a_iQWord) NOP() 683 #define IEM_MC_FETCH_XREG_R64(a_r64Value, a_iXReg, a_iQWord) NOP() 683 684 #define IEM_MC_FETCH_XREG_U32(a_u32Value, a_iXReg, a_iDWord) NOP() 685 #define IEM_MC_FETCH_XREG_R32(a_r32Value, a_iXReg, a_iDWord) NOP() 684 686 #define IEM_MC_FETCH_XREG_U16(a_u16Value, a_iXReg, a_iWord) NOP() 685 687 #define IEM_MC_FETCH_XREG_U8( a_u8Value, a_iXReg, a_iByte) NOP() … … 810 812 #define IEM_MC_FETCH_MEM_XMM_NO_AC(a_XmmDst, a_iSeg, a_GCPtrMem) IEM_LIVENESS_MEM(a_iSeg) 811 813 #define IEM_MC_FETCH_MEM_XMM_ALIGN_SSE(a_XmmDst, a_iSeg, a_GCPtrMem) IEM_LIVENESS_MEM(a_iSeg) 812 #define IEM_MC_FETCH_MEM_XMM_U32(a_XmmDst, a_iDWord, a_iSeg, a_GCPtrMem) IEM_LIVENESS_MEM(a_iSeg)813 #define IEM_MC_FETCH_MEM_XMM_U64(a_XmmDst, a_iQWord, a_iSeg, a_GCPtrMem) IEM_LIVENESS_MEM(a_iSeg)814 814 815 815 #define IEM_MC_FETCH_MEM_FLAT_U128(a_u128Dst, a_GCPtrMem) IEM_LIVENESS_MEM_FLAT() … … 820 820 #define IEM_MC_FETCH_MEM_FLAT_XMM_NO_AC(a_XmmDst, a_GCPtrMem) IEM_LIVENESS_MEM_FLAT() 821 821 #define IEM_MC_FETCH_MEM_FLAT_XMM_ALIGN_SSE(a_XmmDst, a_GCPtrMem) IEM_LIVENESS_MEM_FLAT() 822 #define IEM_MC_FETCH_MEM_FLAT_XMM_U32(a_XmmDst, a_iDWord, a_GCPtrMem) IEM_LIVENESS_MEM_FLAT()823 #define IEM_MC_FETCH_MEM_FLAT_XMM_U64(a_XmmDst, a_iQWord, a_GCPtrMem) IEM_LIVENESS_MEM_FLAT()824 822 825 823 #define IEM_MC_FETCH_MEM_U128_AND_XREG_U128(a_Dst, a_iXReg1, a_iSeg2, a_GCPtrMem2) IEM_LIVENESS_MEM(a_iSeg) -
trunk/src/VBox/VMM/VMMAll/IEMAllN8vePython.py
r104143 r104150 164 164 'IEM_MC_FETCH_MEM_FLAT_U8_ZX_U64': (None, True, True, True, ), 165 165 'IEM_MC_FETCH_MEM_FLAT_XMM_ALIGN_SSE': (None, True, True, g_fNativeSimd), 166 'IEM_MC_FETCH_MEM_FLAT_XMM_U32': (None, True, True, False, ),167 'IEM_MC_FETCH_MEM_FLAT_XMM_U64': (None, True, True, False, ),168 166 'IEM_MC_FETCH_MEM_FLAT_U128_AND_XREG_U128': (None, True, True, False, ), 169 167 'IEM_MC_FETCH_MEM_FLAT_XMM_ALIGN_SSE_AND_XREG_XMM': (None, True, True, False, ), -
trunk/src/VBox/VMM/VMMAll/IEMAllN8veRecompFuncs.h
r104143 r104150 7764 7764 off = iemNativeEmitSimdFetchXregU64(pReNative, off, a_u64Value, a_iXReg, a_iQWord) 7765 7765 7766 #define IEM_MC_FETCH_XREG_R64(a_r64Value, a_iXReg, a_iQWord) \ 7767 off = iemNativeEmitSimdFetchXregU64(pReNative, off, a_r64Value, a_iXReg, a_iQWord) 7768 7766 7769 /** Emits code for IEM_MC_FETCH_XREG_U64. */ 7767 7770 DECL_INLINE_THROW(uint32_t) … … 7787 7790 7788 7791 7789 #define IEM_MC_FETCH_XREG_U32(a_u64Value, a_iXReg, a_iDWord) \ 7790 off = iemNativeEmitSimdFetchXregU32(pReNative, off, a_u64Value, a_iXReg, a_iDWord) 7791 7792 /** Emits code for IEM_MC_FETCH_XREG_U32. */ 7792 #define IEM_MC_FETCH_XREG_U32(a_u32Value, a_iXReg, a_iDWord) \ 7793 off = iemNativeEmitSimdFetchXregU32(pReNative, off, a_u32Value, a_iXReg, a_iDWord) 7794 7795 #define IEM_MC_FETCH_XREG_R32(a_r32Value, a_iXReg, a_iDWord) \ 7796 off = iemNativeEmitSimdFetchXregU32(pReNative, off, a_r32Value, a_iXReg, a_iDWord) 7797 7798 /** Emits code for IEM_MC_FETCH_XREG_U32/IEM_MC_FETCH_XREG_R32. */ 7793 7799 DECL_INLINE_THROW(uint32_t) 7794 7800 iemNativeEmitSimdFetchXregU32(PIEMRECOMPILERSTATE pReNative, uint32_t off, uint8_t idxDstVar, uint8_t iXReg, uint8_t iDWord) -
trunk/src/VBox/VMM/include/IEMInternal.h
r104147 r104150 3882 3882 3883 3883 3884 typedef IEM_DECL_IMPL_TYPE(uint32_t, FNIEMAIMPLF2EFLMXCSR128,(uint32_t uMxCsrIn, uint32_t *pfEFlags, PCX86XMMREG puSrc1, PCX86XMMREG puSrc2)); 3885 typedef FNIEMAIMPLF2EFLMXCSR128 *PFNIEMAIMPLF2EFLMXCSR128; 3886 3887 FNIEMAIMPLF2EFLMXCSR128 iemAImpl_ucomiss_u128; 3888 FNIEMAIMPLF2EFLMXCSR128 iemAImpl_vucomiss_u128, iemAImpl_vucomiss_u128_fallback; 3889 3890 FNIEMAIMPLF2EFLMXCSR128 iemAImpl_ucomisd_u128; 3891 FNIEMAIMPLF2EFLMXCSR128 iemAImpl_vucomisd_u128, iemAImpl_vucomisd_u128_fallback; 3892 3893 FNIEMAIMPLF2EFLMXCSR128 iemAImpl_comiss_u128; 3894 FNIEMAIMPLF2EFLMXCSR128 iemAImpl_vcomiss_u128, iemAImpl_vcomiss_u128_fallback; 3895 3896 FNIEMAIMPLF2EFLMXCSR128 iemAImpl_comisd_u128; 3897 FNIEMAIMPLF2EFLMXCSR128 iemAImpl_vcomisd_u128, iemAImpl_vcomisd_u128_fallback; 3884 typedef IEM_DECL_IMPL_TYPE(uint32_t, FNIEMAIMPLF2EFLMXCSRR32R32,(uint32_t uMxCsrIn, uint32_t *pfEFlags, RTFLOAT32U uSrc1, RTFLOAT32U uSrc2)); 3885 typedef FNIEMAIMPLF2EFLMXCSRR32R32 *PFNIEMAIMPLF2EFLMXCSRR32R32; 3886 3887 typedef IEM_DECL_IMPL_TYPE(uint32_t, FNIEMAIMPLF2EFLMXCSRR64R64,(uint32_t uMxCsrIn, uint32_t *pfEFlags, RTFLOAT64U uSrc1, RTFLOAT64U uSrc2)); 3888 typedef FNIEMAIMPLF2EFLMXCSRR64R64 *PFNIEMAIMPLF2EFLMXCSRR64R64; 3889 3890 FNIEMAIMPLF2EFLMXCSRR32R32 iemAImpl_ucomiss_u128; 3891 FNIEMAIMPLF2EFLMXCSRR32R32 iemAImpl_vucomiss_u128, iemAImpl_vucomiss_u128_fallback; 3892 3893 FNIEMAIMPLF2EFLMXCSRR64R64 iemAImpl_ucomisd_u128; 3894 FNIEMAIMPLF2EFLMXCSRR64R64 iemAImpl_vucomisd_u128, iemAImpl_vucomisd_u128_fallback; 3895 3896 FNIEMAIMPLF2EFLMXCSRR32R32 iemAImpl_comiss_u128; 3897 FNIEMAIMPLF2EFLMXCSRR32R32 iemAImpl_vcomiss_u128, iemAImpl_vcomiss_u128_fallback; 3898 3899 FNIEMAIMPLF2EFLMXCSRR64R64 iemAImpl_comisd_u128; 3900 FNIEMAIMPLF2EFLMXCSRR64R64 iemAImpl_vcomisd_u128, iemAImpl_vcomisd_u128_fallback; 3898 3901 3899 3902 -
trunk/src/VBox/VMM/include/IEMMc.h
r104135 r104150 487 487 #define IEM_MC_FETCH_XREG_U64(a_u64Value, a_iXReg, a_iQWord) \ 488 488 do { (a_u64Value) = pVCpu->cpum.GstCtx.XState.x87.aXMM[(a_iXReg)].au64[(a_iQWord)]; } while (0) 489 #define IEM_MC_FETCH_XREG_R64(a_r64Value, a_iXReg, a_iQWord) \ 490 do { (a_r64Value) = pVCpu->cpum.GstCtx.XState.x87.aXMM[(a_iXReg)].ar64[(a_iQWord)]; } while (0) 489 491 #define IEM_MC_FETCH_XREG_U32(a_u32Value, a_iXReg, a_iDWord) \ 490 492 do { (a_u32Value) = pVCpu->cpum.GstCtx.XState.x87.aXMM[(a_iXReg)].au32[(a_iDWord)]; } while (0) 493 #define IEM_MC_FETCH_XREG_R32(a_r32Value, a_iXReg, a_iDWord) \ 494 do { (a_r32Value) = pVCpu->cpum.GstCtx.XState.x87.aXMM[(a_iXReg)].ar32[(a_iDWord)]; } while (0) 491 495 #define IEM_MC_FETCH_XREG_U16(a_u16Value, a_iXReg, a_iWord) \ 492 496 do { (a_u16Value) = pVCpu->cpum.GstCtx.XState.x87.aXMM[(a_iXReg)].au16[(a_iWord)]; } while (0) … … 1053 1057 # define IEM_MC_FETCH_MEM_XMM_ALIGN_SSE(a_XmmDst, a_iSeg, a_GCPtrMem) \ 1054 1058 IEM_MC_RETURN_ON_FAILURE(iemMemFetchDataU128AlignedSse(pVCpu, &(a_XmmDst).uXmm, (a_iSeg), (a_GCPtrMem))) 1055 # define IEM_MC_FETCH_MEM_XMM_U32(a_XmmDst, a_iDWord, a_iSeg, a_GCPtrMem) \1056 IEM_MC_RETURN_ON_FAILURE(iemMemFetchDataU32(pVCpu, &(a_XmmDst).au32[(a_iDWord)], (a_iSeg), (a_GCPtrMem)))1057 # define IEM_MC_FETCH_MEM_XMM_U64(a_XmmDst, a_iQWord, a_iSeg, a_GCPtrMem) \1058 IEM_MC_RETURN_ON_FAILURE(iemMemFetchDataU64(pVCpu, &(a_XmmDst).au64[(a_iQWord)], (a_iSeg), (a_GCPtrMem)))1059 1059 1060 1060 # define IEM_MC_FETCH_MEM_U128_NO_AC_AND_XREG_U128(a_u128Dst, a_iXReg1, a_iSeg2, a_GCPtrMem2) do { \ … … 1114 1114 # define IEM_MC_FETCH_MEM_XMM_ALIGN_SSE(a_XmmDst, a_iSeg, a_GCPtrMem) \ 1115 1115 iemMemFetchDataU128AlignedSseJmp(pVCpu, &(a_XmmDst).uXmm, (a_iSeg), (a_GCPtrMem)) 1116 # define IEM_MC_FETCH_MEM_XMM_U32(a_XmmDst, a_iDWord, a_iSeg, a_GCPtrMem) \1117 (a_XmmDst).au32[(a_iDWord)] = iemMemFetchDataU32Jmp(pVCpu, (a_iSeg), (a_GCPtrMem))1118 # define IEM_MC_FETCH_MEM_XMM_U64(a_XmmDst, a_iQWord, a_iSeg, a_GCPtrMem) \1119 (a_XmmDst).au64[(a_iQWord)] = iemMemFetchDataU64Jmp(pVCpu, (a_iSeg), (a_GCPtrMem))1120 1116 1121 1117 # define IEM_MC_FETCH_MEM_FLAT_U128(a_u128Dst, a_GCPtrMem) \ … … 1132 1128 # define IEM_MC_FETCH_MEM_FLAT_XMM_ALIGN_SSE(a_XmmDst, a_GCPtrMem) \ 1133 1129 iemMemFlatFetchDataU128AlignedSseJmp(pVCpu, &(a_XmmDst).uXmm, (a_GCPtrMem)) 1134 # define IEM_MC_FETCH_MEM_FLAT_XMM_U32(a_XmmDst, a_iDWord, a_GCPtrMem) \1135 (a_XmmDst).au32[(a_iDWord)] = iemMemFlatFetchDataU32Jmp(pVCpu, (a_GCPtrMem))1136 # define IEM_MC_FETCH_MEM_FLAT_XMM_U64(a_XmmDst, a_iQWord, a_GCPtrMem) \1137 (a_XmmDst).au64[(a_iQWord)] = iemMemFlatFetchDataU64Jmp(pVCpu, (a_GCPtrMem))1138 1130 1139 1131 # define IEM_MC_FETCH_MEM_U128_AND_XREG_U128(a_Dst, a_iXReg1, a_iSeg2, a_GCPtrMem2) do { \ -
trunk/src/VBox/VMM/testcase/tstIEMAImpl.cpp
r104129 r104150 7486 7486 * Compare SSE operations on single single-precision floating point values - outputting only EFLAGS. 7487 7487 */ 7488 TYPEDEF_SUBTEST_TYPE(SSE_COMPARE_EFL_R32_R32_T, SSE_COMPARE_EFL_R32_R32_TEST_T, PFNIEMAIMPLF2EFLMXCSR 128);7488 TYPEDEF_SUBTEST_TYPE(SSE_COMPARE_EFL_R32_R32_T, SSE_COMPARE_EFL_R32_R32_TEST_T, PFNIEMAIMPLF2EFLMXCSRR32R32); 7489 7489 7490 7490 static SSE_COMPARE_EFL_R32_R32_T g_aSseCompareEflR32R32[] = … … 7518 7518 for (size_t iFn = 0; iFn < RT_ELEMENTS(g_aSseCompareEflR32R32); iFn++) 7519 7519 { 7520 PFNIEMAIMPLF2EFLMXCSR 128const pfn = g_aSseCompareEflR32R32[iFn].pfnNative ? g_aSseCompareEflR32R32[iFn].pfnNative : g_aSseCompareEflR32R32[iFn].pfn;7520 PFNIEMAIMPLF2EFLMXCSRR32R32 const pfn = g_aSseCompareEflR32R32[iFn].pfnNative ? g_aSseCompareEflR32R32[iFn].pfnNative : g_aSseCompareEflR32R32[iFn].pfn; 7521 7521 7522 7522 IEMBINARYOUTPUT BinOut; … … 7527 7527 { 7528 7528 SSE_COMPARE_EFL_R32_R32_TEST_T TestData; RT_ZERO(TestData); 7529 X86XMMREG ValIn1; RT_ZERO(ValIn1);7530 X86XMMREG ValIn2; RT_ZERO(ValIn2);7531 7529 7532 7530 TestData.r32ValIn1 = iTest < cTests ? RandR32Src(iTest) : s_aSpecials[iTest - cTests].Val1; 7533 7531 TestData.r32ValIn2 = iTest < cTests ? RandR32Src(iTest) : s_aSpecials[iTest - cTests].Val2; 7534 7535 ValIn1.ar32[0] = TestData.r32ValIn1;7536 ValIn2.ar32[0] = TestData.r32ValIn2;7537 7532 7538 7533 if ( RTFLOAT32U_IS_NORMAL(&TestData.r32ValIn1) … … 7558 7553 uint32_t fMxcsrM = fMxcsrIn; 7559 7554 uint32_t fEFlagsM = fEFlags; 7560 fMxcsrM = pfn(fMxcsrIn, &fEFlagsM, &ValIn1, &ValIn2);7555 fMxcsrM = pfn(fMxcsrIn, &fEFlagsM, TestData.r32ValIn1, TestData.r32ValIn2); 7561 7556 TestData.fMxcsrIn = fMxcsrIn; 7562 7557 TestData.fMxcsrOut = fMxcsrM; … … 7568 7563 uint32_t fMxcsrU = fMxcsrIn; 7569 7564 uint32_t fEFlagsU = fEFlags; 7570 fMxcsrU = pfn(fMxcsrIn, &fEFlagsU, &ValIn1, &ValIn2);7565 fMxcsrU = pfn(fMxcsrIn, &fEFlagsU, TestData.r32ValIn1, TestData.r32ValIn2); 7571 7566 TestData.fMxcsrIn = fMxcsrIn; 7572 7567 TestData.fMxcsrOut = fMxcsrU; … … 7581 7576 uint32_t fMxcsr1 = fMxcsrIn; 7582 7577 uint32_t fEFlags1 = fEFlags; 7583 fMxcsr1 = pfn(fMxcsrIn, &fEFlags1, &ValIn1, &ValIn2);7578 fMxcsr1 = pfn(fMxcsrIn, &fEFlags1, TestData.r32ValIn1, TestData.r32ValIn2); 7584 7579 TestData.fMxcsrIn = fMxcsrIn; 7585 7580 TestData.fMxcsrOut = fMxcsr1; … … 7594 7589 uint32_t fMxcsr2 = fMxcsrIn; 7595 7590 uint32_t fEFlags2 = fEFlags; 7596 fMxcsr2 = pfn(fMxcsrIn, &fEFlags2, &ValIn1, &ValIn2);7591 fMxcsr2 = pfn(fMxcsrIn, &fEFlags2, TestData.r32ValIn1, TestData.r32ValIn2); 7597 7592 TestData.fMxcsrIn = fMxcsrIn; 7598 7593 TestData.fMxcsrOut = fMxcsr2; … … 7608 7603 uint32_t fMxcsr3 = fMxcsrIn; 7609 7604 uint32_t fEFlags3 = fEFlags; 7610 fMxcsr3 = pfn(fMxcsrIn, &fEFlags3, &ValIn1, &ValIn2);7605 fMxcsr3 = pfn(fMxcsrIn, &fEFlags3, TestData.r32ValIn1, TestData.r32ValIn2); 7611 7606 TestData.fMxcsrIn = fMxcsrIn; 7612 7607 TestData.fMxcsrOut = fMxcsr3; … … 7634 7629 SSE_COMPARE_EFL_R32_R32_TEST_T const * const paTests = g_aSseCompareEflR32R32[iFn].paTests; 7635 7630 uint32_t const cTests = g_aSseCompareEflR32R32[iFn].cTests; 7636 PFNIEMAIMPLF2EFLMXCSR 128pfn = g_aSseCompareEflR32R32[iFn].pfn;7631 PFNIEMAIMPLF2EFLMXCSRR32R32 pfn = g_aSseCompareEflR32R32[iFn].pfn; 7637 7632 uint32_t const cVars = COUNT_VARIATIONS(g_aSseCompareEflR32R32[iFn]); 7638 7633 if (!cTests) RTTestSkipped(g_hTest, "no tests"); … … 7641 7636 for (uint32_t iTest = 0; iTest < cTests; iTest++) 7642 7637 { 7643 X86XMMREG ValIn1; RT_ZERO(ValIn1);7644 X86XMMREG ValIn2; RT_ZERO(ValIn2);7645 7646 ValIn1.ar32[0] = paTests[iTest].r32ValIn1;7647 ValIn2.ar32[0] = paTests[iTest].r32ValIn2;7648 7638 uint32_t fEFlags = paTests[iTest].fEflIn; 7649 uint32_t fMxcsr = pfn(paTests[iTest].fMxcsrIn, &fEFlags, &ValIn1, &ValIn2);7639 uint32_t fMxcsr = pfn(paTests[iTest].fMxcsrIn, &fEFlags, paTests[iTest].r32ValIn1, paTests[iTest].r32ValIn2); 7650 7640 if ( fMxcsr != paTests[iTest].fMxcsrOut 7651 7641 || fEFlags != paTests[iTest].fEflOut) … … 7671 7661 * Compare SSE operations on single single-precision floating point values - outputting only EFLAGS. 7672 7662 */ 7673 TYPEDEF_SUBTEST_TYPE(SSE_COMPARE_EFL_R64_R64_T, SSE_COMPARE_EFL_R64_R64_TEST_T, PFNIEMAIMPLF2EFLMXCSR 128);7663 TYPEDEF_SUBTEST_TYPE(SSE_COMPARE_EFL_R64_R64_T, SSE_COMPARE_EFL_R64_R64_TEST_T, PFNIEMAIMPLF2EFLMXCSRR64R64); 7674 7664 7675 7665 static SSE_COMPARE_EFL_R64_R64_T g_aSseCompareEflR64R64[] = … … 7703 7693 for (size_t iFn = 0; iFn < RT_ELEMENTS(g_aSseCompareEflR64R64); iFn++) 7704 7694 { 7705 PFNIEMAIMPLF2EFLMXCSR 128const pfn = g_aSseCompareEflR64R64[iFn].pfnNative ? g_aSseCompareEflR64R64[iFn].pfnNative : g_aSseCompareEflR64R64[iFn].pfn;7695 PFNIEMAIMPLF2EFLMXCSRR64R64 const pfn = g_aSseCompareEflR64R64[iFn].pfnNative ? g_aSseCompareEflR64R64[iFn].pfnNative : g_aSseCompareEflR64R64[iFn].pfn; 7706 7696 7707 7697 IEMBINARYOUTPUT BinOut; … … 7712 7702 { 7713 7703 SSE_COMPARE_EFL_R64_R64_TEST_T TestData; RT_ZERO(TestData); 7714 X86XMMREG ValIn1; RT_ZERO(ValIn1);7715 X86XMMREG ValIn2; RT_ZERO(ValIn2);7716 7704 7717 7705 TestData.r64ValIn1 = iTest < cTests ? RandR64Src(iTest) : s_aSpecials[iTest - cTests].Val1; 7718 7706 TestData.r64ValIn2 = iTest < cTests ? RandR64Src(iTest) : s_aSpecials[iTest - cTests].Val2; 7719 7720 ValIn1.ar64[0] = TestData.r64ValIn1;7721 ValIn2.ar64[0] = TestData.r64ValIn2;7722 7707 7723 7708 if ( RTFLOAT64U_IS_NORMAL(&TestData.r64ValIn1) … … 7743 7728 uint32_t fMxcsrM = fMxcsrIn; 7744 7729 uint32_t fEFlagsM = fEFlags; 7745 fMxcsrM = pfn(fMxcsrIn, &fEFlagsM, &ValIn1, &ValIn2);7730 fMxcsrM = pfn(fMxcsrIn, &fEFlagsM, TestData.r64ValIn1, TestData.r64ValIn2); 7746 7731 TestData.fMxcsrIn = fMxcsrIn; 7747 7732 TestData.fMxcsrOut = fMxcsrM; … … 7753 7738 uint32_t fMxcsrU = fMxcsrIn; 7754 7739 uint32_t fEFlagsU = fEFlags; 7755 fMxcsrU = pfn(fMxcsrIn, &fEFlagsU, &ValIn1, &ValIn2);7740 fMxcsrU = pfn(fMxcsrIn, &fEFlagsU, TestData.r64ValIn1, TestData.r64ValIn2); 7756 7741 TestData.fMxcsrIn = fMxcsrIn; 7757 7742 TestData.fMxcsrOut = fMxcsrU; … … 7766 7751 uint32_t fMxcsr1 = fMxcsrIn; 7767 7752 uint32_t fEFlags1 = fEFlags; 7768 fMxcsr1 = pfn(fMxcsrIn, &fEFlags1, &ValIn1, &ValIn2);7753 fMxcsr1 = pfn(fMxcsrIn, &fEFlags1, TestData.r64ValIn1, TestData.r64ValIn2); 7769 7754 TestData.fMxcsrIn = fMxcsrIn; 7770 7755 TestData.fMxcsrOut = fMxcsr1; … … 7779 7764 uint32_t fMxcsr2 = fMxcsrIn; 7780 7765 uint32_t fEFlags2 = fEFlags; 7781 fMxcsr2 = pfn(fMxcsrIn, &fEFlags2, &ValIn1, &ValIn2);7766 fMxcsr2 = pfn(fMxcsrIn, &fEFlags2, TestData.r64ValIn1, TestData.r64ValIn2); 7782 7767 TestData.fMxcsrIn = fMxcsrIn; 7783 7768 TestData.fMxcsrOut = fMxcsr2; … … 7793 7778 uint32_t fMxcsr3 = fMxcsrIn; 7794 7779 uint32_t fEFlags3 = fEFlags; 7795 fMxcsr3 = pfn(fMxcsrIn, &fEFlags3, &ValIn1, &ValIn2);7780 fMxcsr3 = pfn(fMxcsrIn, &fEFlags3, TestData.r64ValIn1, TestData.r64ValIn2); 7796 7781 TestData.fMxcsrIn = fMxcsrIn; 7797 7782 TestData.fMxcsrOut = fMxcsr3; … … 7819 7804 SSE_COMPARE_EFL_R64_R64_TEST_T const * const paTests = g_aSseCompareEflR64R64[iFn].paTests; 7820 7805 uint32_t const cTests = g_aSseCompareEflR64R64[iFn].cTests; 7821 PFNIEMAIMPLF2EFLMXCSR 128pfn = g_aSseCompareEflR64R64[iFn].pfn;7806 PFNIEMAIMPLF2EFLMXCSRR64R64 pfn = g_aSseCompareEflR64R64[iFn].pfn; 7822 7807 uint32_t const cVars = COUNT_VARIATIONS(g_aSseCompareEflR64R64[iFn]); 7823 7808 if (!cTests) RTTestSkipped(g_hTest, "no tests"); … … 7826 7811 for (uint32_t iTest = 0; iTest < cTests; iTest++) 7827 7812 { 7828 X86XMMREG ValIn1; RT_ZERO(ValIn1);7829 X86XMMREG ValIn2; RT_ZERO(ValIn2);7830 7831 ValIn1.ar64[0] = paTests[iTest].r64ValIn1;7832 ValIn2.ar64[0] = paTests[iTest].r64ValIn2;7833 7813 uint32_t fEFlags = paTests[iTest].fEflIn; 7834 uint32_t fMxcsr = pfn(paTests[iTest].fMxcsrIn, &fEFlags, &ValIn1, &ValIn2);7814 uint32_t fMxcsr = pfn(paTests[iTest].fMxcsrIn, &fEFlags, paTests[iTest].r64ValIn1, paTests[iTest].r64ValIn2); 7835 7815 if ( fMxcsr != paTests[iTest].fMxcsrOut 7836 7816 || fEFlags != paTests[iTest].fEflOut) -
trunk/src/VBox/VMM/testcase/tstIEMCheckMc.cpp
r104135 r104150 804 804 #define IEM_MC_FETCH_XREG_XMM(a_XmmValue, a_iXReg) do { CHK_XREG_IDX(a_iXReg); CHK_VAR(a_XmmValue); (a_XmmValue) = g_XmmZero; CHK_TYPE(X86XMMREG, a_XmmValue); (void)fSseRead; (void)fMcBegin; } while (0) 805 805 #define IEM_MC_FETCH_XREG_U64(a_u64Value, a_iXReg, a_iQWord) do { CHK_XREG_IDX(a_iXReg); CHK_VAR(a_u64Value); (a_u64Value) = 0; CHK_TYPE(uint64_t, a_u64Value); (void)fSseRead; (void)fMcBegin; } while (0) 806 #define IEM_MC_FETCH_XREG_R64(a_r64Value, a_iXReg, a_iQWord) do { CHK_XREG_IDX(a_iXReg); CHK_VAR(a_r64Value); (a_r64Value).u = 0; CHK_TYPE(RTFLOAT64U, a_r64Value); (void)fSseRead; (void)fMcBegin; } while (0) 806 807 #define IEM_MC_FETCH_XREG_U32(a_u32Value, a_iXReg, a_iDWord) do { CHK_XREG_IDX(a_iXReg); CHK_VAR(a_u32Value); (a_u32Value) = 0; CHK_TYPE(uint32_t, a_u32Value); (void)fSseRead; (void)fMcBegin; } while (0) 808 #define IEM_MC_FETCH_XREG_R32(a_r32Value, a_iXReg, a_iDWord) do { CHK_XREG_IDX(a_iXReg); CHK_VAR(a_r32Value); (a_r32Value).u = 0; CHK_TYPE(RTFLOAT32U, a_r32Value); (void)fSseRead; (void)fMcBegin; } while (0) 807 809 #define IEM_MC_FETCH_XREG_U16(a_u16Value, a_iXReg, a_iWord ) do { CHK_XREG_IDX(a_iXReg); CHK_VAR(a_u16Value); (a_u16Value) = 0; CHK_TYPE(uint16_t, a_u16Value); (void)fSseRead; (void)fMcBegin; } while (0) 808 810 #define IEM_MC_FETCH_XREG_U8( a_u8Value, a_iXReg, a_iByte) do { CHK_XREG_IDX(a_iXReg); CHK_VAR(a_u8Value); (a_u8Value) = 0; CHK_TYPE(uint8_t, a_u8Value); (void)fSseRead; (void)fMcBegin; } while (0) … … 909 911 #define IEM_MC_FETCH_MEM_XMM_NO_AC(a_XmmDst, a_iSeg, a_GCPtrMem) do { CHK_SEG_IDX(a_iSeg); CHK_GCPTR(a_GCPtrMem); CHK_VAR(a_GCPtrMem); CHK_VAR(a_XmmDst); CHK_TYPE(X86XMMREG, a_XmmDst); (void)fMcBegin; } while (0) 910 912 #define IEM_MC_FETCH_MEM_XMM_ALIGN_SSE(a_XmmDst, a_iSeg, a_GCPtrMem) do { CHK_SEG_IDX(a_iSeg); CHK_GCPTR(a_GCPtrMem); CHK_VAR(a_GCPtrMem); CHK_VAR(a_XmmDst); CHK_TYPE(X86XMMREG, a_XmmDst); (void)fMcBegin; } while (0) 911 #define IEM_MC_FETCH_MEM_XMM_U32(a_XmmDst, a_iDWord, a_iSeg, a_GCPtrMem) do{ CHK_SEG_IDX(a_iSeg); CHK_GCPTR(a_GCPtrMem); CHK_VAR(a_GCPtrMem); CHK_VAR(a_XmmDst); CHK_TYPE(X86XMMREG, a_XmmDst); AssertCompile((a_iDWord) < RT_ELEMENTS((a_XmmDst).au32)); (void)fMcBegin; } while (0)912 #define IEM_MC_FETCH_MEM_XMM_U64(a_XmmDst, a_iQWord, a_iSeg, a_GCPtrMem) do{ CHK_SEG_IDX(a_iSeg); CHK_GCPTR(a_GCPtrMem); CHK_VAR(a_GCPtrMem); CHK_VAR(a_XmmDst); CHK_TYPE(X86XMMREG, a_XmmDst); AssertCompile((a_iQWord) < RT_ELEMENTS((a_XmmDst).au64)); (void)fMcBegin; } while (0)913 913 #define IEM_MC_FETCH_MEM_U256(a_u256Dst, a_iSeg, a_GCPtrMem) do { CHK_SEG_IDX(a_iSeg); CHK_GCPTR(a_GCPtrMem); CHK_VAR(a_GCPtrMem); CHK_VAR(a_u256Dst); CHK_TYPE(RTUINT256U, a_u256Dst); (void)fMcBegin; } while (0) 914 914 #define IEM_MC_FETCH_MEM_U256_NO_AC(a_u256Dst, a_iSeg, a_GCPtrMem) do { CHK_SEG_IDX(a_iSeg); CHK_GCPTR(a_GCPtrMem); CHK_VAR(a_GCPtrMem); CHK_VAR(a_u256Dst); CHK_TYPE(RTUINT256U, a_u256Dst); (void)fMcBegin; } while (0)
Note:
See TracChangeset
for help on using the changeset viewer.