Changeset 104150 in vbox for trunk/src/VBox/VMM/testcase
- Timestamp:
- Apr 4, 2024 8:54:42 AM (13 months ago)
- svn:sync-xref-src-repo-rev:
- 162572
- Location:
- trunk/src/VBox/VMM/testcase
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
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.