Changeset 106677 in vbox
- Timestamp:
- Oct 25, 2024 6:22:09 AM (5 months ago)
- svn:sync-xref-src-repo-rev:
- 165545
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-instr-4.c32
r106620 r106677 2593 2593 uint8_t bXcptExpect; /**< The expected exception while/after executing the instruction. */ 2594 2594 uint16_t idTestStep; /**< The test iteration step. */ 2595 const char BS3_FAR *pszTestIdStr; /**< The test ID string for error printouts. */ 2595 2596 } BS3CPUINSTR4_TEST1_CTX_T; 2596 2597 /** Pointer to a test 1 context. */ … … 2634 2635 * Worker for bs3CpuInstr4_WorkerTestType1. 2635 2636 */ 2636 static uint16_tbs3CpuInstr4_WorkerTestType1_Inner(uint8_t bMode, PBS3CPUINSTR4_TEST1_CTX_T pTestCtx,2637 static void bs3CpuInstr4_WorkerTestType1_Inner(uint8_t bMode, PBS3CPUINSTR4_TEST1_CTX_T pTestCtx, 2637 2638 PCBS3CPUINSTRX_CONFIG_SAVED_T pSavedCfg) 2638 2639 { … … 2656 2657 X86YMMREG MemOpExpect; 2657 2658 uint16_t cErrors; 2658 uint16_t cErrorsInit = Bs3TestSubErrorCount();2659 2659 uint32_t uExpectedMxCsr; 2660 2660 bool fFpXcptExpected; 2661 uint8_t cbBytesExecuted; 2661 2662 2662 2663 uint32_t uSpecifiedMask, uExpectedMask, uImpliedMask, uCombinedMask, uMaskedMask, uUnmaskedMask, uThisMask; … … 2666 2667 uint32_t uForceOnMask, uForceOffMask; 2667 2668 static const char * const s_apszMaskType[] = { "Specified", "Expected", "Implied", "Combined", "Masked", "Unmasked", "Random" }; 2669 static const char * const s_apszMaskTyp[] = { "spec", "expc", "impl", "comb", "mask", "umsk", "rand" }; 2668 2670 unsigned iMaskType; 2669 2671 … … 2868 2870 * Prepare globals and execute. 2869 2871 */ 2870 g_uBs3TrapEipHint = pCtx->rip.u32; 2871 if (fNonFpOK && !fFpXcptExpected) 2872 g_uBs3TrapEipHint += cbInstr + 1; 2872 cbBytesExecuted = (fNonFpOK && !fFpXcptExpected) ? cbInstr + 1 : 0; 2873 g_uBs3TrapEipHint = pCtx->rip.u32 + cbBytesExecuted; 2873 2874 Bs3TrapSetJmpAndRestoreWithExtCtxAndRm(pCtx, pExtCtx, pTrapFrame, pExtCtxOut); 2874 2875 … … 2921 2922 bs3CpuInstr4GetXcptMasks(&szGotMasks[0], sizeof(szGotMasks), uGotMxCsr); 2922 2923 bs3CpuInstr4GetXcptOthers(&szGotOthers[0], sizeof(szGotOthers), uGotMxCsr); 2924 Bs3TestFailedF("mask-mode %s, mask=%#RX32, in-except=%#RX32, expect-raise=%#RX32, in-MXCSR=%#RX32", s_apszMaskType[iMaskType], uThisMask, uInitialExceptions, uExpectedExceptions, uMxCsr); 2923 2925 Bs3TestFailedF("Expected MXCSR %#RX32 (%s%s%s ) got MXCSR %#RX32 (%s%s%s )", uExpectedMxCsr, 2924 2926 szExpectFlags, szExpectMasks, szExpectOthers, uGotMxCsr, szGotFlags, szGotMasks, szGotOthers); … … 2952 2954 if (bXcptExpect == X86_XCPT_PF) 2953 2955 pCtx->cr2.u = (uintptr_t)puMemOp; 2954 Bs3TestCheckRegCtxEx(&pTrapFrame->Ctx, pCtx, fNonFpOK && !fFpXcptExpected ? cbInstr + 1 : 0, 0 /*cbSpAdjust*/,2956 Bs3TestCheckRegCtxEx(&pTrapFrame->Ctx, pCtx, cbBytesExecuted, 0 /*cbSpAdjust*/, 2955 2957 (fNonFpOK && !fFpXcptExpected) || BS3_MODE_IS_16BIT_SYS(bMode) ? 0 : X86_EFL_RF, 2956 2958 pTestCtx->pszMode, pTestCtx->idTestStep); … … 2961 2963 2962 2964 if (cErrors != Bs3TestSubErrorCount()) 2963 Bs3TestFailedF("Mask mode %s, mask=%#RX32, in-exceptions=%#RX32, in-MxCsr=%#RX32, expect-MxCsr=%#RX32", s_apszMaskType[iMaskType], uThisMask, uInitialExceptions, uMxCsr, uExpectedMxCsr); 2965 { 2966 #define PUMEMOP_MAXSIZE sizeof("puMemOp=0x0123456789abcdef, EFLAGS=0x01234567, ") 2967 char szPuMemOpStr[PUMEMOP_MAXSIZE] = ""; 2968 2969 if (!pTestCtx->pConfig->fAligned) 2970 Bs3StrPrintf(szPuMemOpStr, PUMEMOP_MAXSIZE, "puMemOp=%p, EFLAGS=%#RX32, ", puMemOp, pTestCtx->pTrapFrame->Ctx.rflags.u32); 2971 Bs3TestFailedF("%s/%s failed (bXcptExpect=%u %s, %s%s-%u)", 2972 pTestCtx->pszTestIdStr, s_apszMaskTyp[iMaskType], bXcptExpect, bs3CpuInstr4XcptName(bXcptExpect), 2973 szPuMemOpStr, fSseInstr ? "SSE" : "AVX", pTestCtx->cbOperand * 8); 2974 Bs3TestPrintf("\n"); 2975 } 2964 2976 } 2965 2966 return cErrorsInit;2967 2977 } 2968 2978 … … 3072 3082 for (iVal = 0; iVal < cValues; iVal++, idTestStep++, cRecompRuns++) 3073 3083 { 3074 uint16_t cErrors; 3084 #define TESTID_MAXSIZE sizeof("32-bit pae, v8086 pae: ring-3/(Normal)/tst#123/val#123") 3085 char szTestIdStr[TESTID_MAXSIZE]; 3075 3086 BS3CPUINSTR4_TEST1_CTX_T TestCtx; 3076 3087 … … 3101 3112 TestCtx.bXcptExpect = bXcptExpect; 3102 3113 TestCtx.idTestStep = idTestStep; 3103 cErrors = bs3CpuInstr4_WorkerTestType1_Inner(bMode, &TestCtx, &SavedCfg); 3104 if (cErrors != Bs3TestSubErrorCount()) 3105 { 3106 #define PUMEMOP_MAXLEN sizeof("puMemOp=0x0123456789abcdef, EFLAGS=0x01234567, ") 3107 char szPuMemOpStr[PUMEMOP_MAXLEN] = ""; 3108 3109 if (!paConfigs[iCfg].fAligned) 3110 Bs3StrPrintf(szPuMemOpStr, PUMEMOP_MAXLEN, "puMemOp=%p, EFLAGS=%#RX32, ", puMemOp, TrapFrame.Ctx.rflags.u32); 3111 Bs3TestFailedF("%s: ring-%d/%u:%s/tst#%u/val#%u failed (bXcptExpect=%u %s, %s%s-%u)", 3112 Bs3GetModeName(bMode), bRing, iCfg, paConfigs[iCfg].pszCfgName, iTest, iVal, bXcptExpect, 3113 bs3CpuInstr4XcptName(bXcptExpect), szPuMemOpStr, fSseInstr ? "SSE" : "AVX", cbOperand * 8); 3114 Bs3TestPrintf("\n"); 3115 } 3114 Bs3StrPrintf(szTestIdStr, TESTID_MAXSIZE, "%s: ring-%d/%u:%s/tst#%u/val#%u", 3115 pszMode, bRing, iCfg, paConfigs[iCfg].pszCfgName, iTest, iVal); 3116 TestCtx.pszTestIdStr = szTestIdStr; 3117 3118 bs3CpuInstr4_WorkerTestType1_Inner(bMode, &TestCtx, &SavedCfg); 3116 3119 } 3117 3120 } … … 3503 3506 { bs3CpuInstr4_vaddps_YMM1_YMM2_FSxBX_icebp_c64, 255, RM_MEM, T_AVX_256, YMM1, YMM2, FSxBX, PASS_s_aValues }, 3504 3507 3505 { bs3CpuInstr4_addps_XMM1_XMM1_icebp_c64, 255, RM_REG, T_SSE, XMM1, XMM1, XMM1, PASS_s_aValuesSR }, 3506 { bs3CpuInstr4_vaddps_YMM1_YMM1_YMM1_icebp_c64, 255, RM_REG, T_AVX_256, YMM1, YMM1, YMM1, PASS_s_aValuesSR }, 3507 { bs3CpuInstr4_vaddps_YMM1_YMM1_YMM2_icebp_c64, 255, RM_REG, T_AVX_256, YMM1, YMM1, YMM2, PASS_s_aValuesSR }, 3508 { bs3CpuInstr4_vaddps_YMM1_YMM1_FSxBX_icebp_c64, 255, RM_MEM, T_AVX_256, YMM1, YMM1, FSxBX, PASS_s_aValuesSR }, 3508 { bs3CpuInstr4_addps_XMM8_XMM9_icebp_c64, 255, RM_REG, T_SSE, XMM8, XMM8, XMM9, PASS_s_aValues }, 3509 { bs3CpuInstr4_addps_XMM8_FSxBX_icebp_c64, 255, RM_MEM, T_SSE, XMM8, XMM8, FSxBX, PASS_s_aValues }, 3510 3511 { bs3CpuInstr4_vaddps_XMM8_XMM9_XMM10_icebp_c64, 255, RM_REG, T_AVX_128, XMM8, XMM9, XMM10, PASS_s_aValues }, 3512 { bs3CpuInstr4_vaddps_XMM8_XMM9_FSxBX_icebp_c64, 255, RM_MEM, T_AVX_128, XMM8, XMM9, FSxBX, PASS_s_aValues }, 3513 { bs3CpuInstr4_vaddps_YMM8_YMM9_YMM10_icebp_c64, 255, RM_REG, T_AVX_256, YMM8, YMM9, YMM10, PASS_s_aValues }, 3514 { bs3CpuInstr4_vaddps_YMM8_YMM9_FSxBX_icebp_c64, 255, RM_MEM, T_AVX_256, YMM8, YMM9, FSxBX, PASS_s_aValues }, 3509 3515 3510 3516 { bs3CpuInstr4_addps_XMM1_XMM1_icebp_c64, 255, RM_REG, T_SSE, XMM1, XMM1, XMM1, PASS_s_aValuesSR }, … … 4500 4506 { bs3CpuInstr4_addsd_XMM8_FSxBX_icebp_c64, X86_XCPT_AC, RM_MEM, T_SSE, XMM8, XMM8, FSxBX, PASS_s_aValues }, 4501 4507 4502 { bs3CpuInstr4_vaddsd_XMM8_XMM9_XMM10_icebp_c64, 255, RM_REG, T_AVX_128, XMM8, XMM9, XMM10, 4508 { bs3CpuInstr4_vaddsd_XMM8_XMM9_XMM10_icebp_c64, 255, RM_REG, T_AVX_128, XMM8, XMM9, XMM10, PASS_s_aValues }, 4503 4509 { bs3CpuInstr4_vaddsd_XMM8_XMM9_FSxBX_icebp_c64, X86_XCPT_AC, RM_MEM, T_AVX_128, XMM8, XMM9, FSxBX, PASS_s_aValues }, 4504 4510
Note:
See TracChangeset
for help on using the changeset viewer.