VirtualBox

Changeset 106677 in vbox


Ignore:
Timestamp:
Oct 25, 2024 6:22:09 AM (5 months ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
165545
Message:

ValidationKit/bootsectors: SIMD FP testcases for 'cvt' family instructions: improve error reporting; bugref:10658; jiraref:VBP-1206

  • issue error reports from inner worker, so full details can be included
  • put mask details next to each other
  • add a few missing, and remove a few duplicate 'addps' testcases
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-instr-4.c32

    r106620 r106677  
    25932593    uint8_t                              bXcptExpect;  /**< The expected exception while/after executing the instruction. */
    25942594    uint16_t                             idTestStep;   /**< The test iteration step. */
     2595    const char BS3_FAR                  *pszTestIdStr; /**< The test ID string for error printouts. */
    25952596} BS3CPUINSTR4_TEST1_CTX_T;
    25962597/** Pointer to a test 1 context. */
     
    26342635 * Worker for bs3CpuInstr4_WorkerTestType1.
    26352636 */
    2636 static uint16_t bs3CpuInstr4_WorkerTestType1_Inner(uint8_t bMode, PBS3CPUINSTR4_TEST1_CTX_T pTestCtx,
     2637static void bs3CpuInstr4_WorkerTestType1_Inner(uint8_t bMode, PBS3CPUINSTR4_TEST1_CTX_T pTestCtx,
    26372638                                                   PCBS3CPUINSTRX_CONFIG_SAVED_T pSavedCfg)
    26382639{
     
    26562657    X86YMMREG        MemOpExpect;
    26572658    uint16_t         cErrors;
    2658     uint16_t         cErrorsInit         = Bs3TestSubErrorCount();
    26592659    uint32_t         uExpectedMxCsr;
    26602660    bool             fFpXcptExpected;
     2661    uint8_t          cbBytesExecuted;
    26612662
    26622663    uint32_t uSpecifiedMask, uExpectedMask, uImpliedMask, uCombinedMask, uMaskedMask, uUnmaskedMask, uThisMask;
     
    26662667    uint32_t uForceOnMask, uForceOffMask;
    26672668    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"   };
    26682670    unsigned iMaskType;
    26692671
     
    28682870         * Prepare globals and execute.
    28692871         */
    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;
    28732874        Bs3TrapSetJmpAndRestoreWithExtCtxAndRm(pCtx, pExtCtx, pTrapFrame, pExtCtxOut);
    28742875
     
    29212922                bs3CpuInstr4GetXcptMasks(&szGotMasks[0],   sizeof(szGotMasks),  uGotMxCsr);
    29222923                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);
    29232925                Bs3TestFailedF("Expected MXCSR %#RX32 (%s%s%s ) got MXCSR %#RX32 (%s%s%s )", uExpectedMxCsr,
    29242926                               szExpectFlags, szExpectMasks, szExpectOthers, uGotMxCsr, szGotFlags, szGotMasks, szGotOthers);
     
    29522954        if (bXcptExpect == X86_XCPT_PF)
    29532955            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*/,
    29552957                             (fNonFpOK && !fFpXcptExpected) || BS3_MODE_IS_16BIT_SYS(bMode) ? 0 : X86_EFL_RF,
    29562958                             pTestCtx->pszMode, pTestCtx->idTestStep);
     
    29612963
    29622964        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        }
    29642976    }
    2965 
    2966     return cErrorsInit;
    29672977}
    29682978
     
    30723082                        for (iVal = 0; iVal < cValues; iVal++, idTestStep++, cRecompRuns++)
    30733083                        {
    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];
    30753086                            BS3CPUINSTR4_TEST1_CTX_T TestCtx;
    30763087
     
    31013112                            TestCtx.bXcptExpect  = bXcptExpect;
    31023113                            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);
    31163119                        }
    31173120                    }
     
    35033506        { bs3CpuInstr4_vaddps_YMM1_YMM2_FSxBX_icebp_c64, 255, RM_MEM, T_AVX_256, YMM1, YMM2, FSxBX, PASS_s_aValues   },
    35043507
    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   },
    35093515
    35103516        { bs3CpuInstr4_addps_XMM1_XMM1_icebp_c64,        255, RM_REG, T_SSE,     XMM1, XMM1, XMM1,  PASS_s_aValuesSR },
     
    45004506        { bs3CpuInstr4_addsd_XMM8_FSxBX_icebp_c64,       X86_XCPT_AC, RM_MEM, T_SSE,     XMM8, XMM8, FSxBX, PASS_s_aValues   },
    45014507
    4502         { bs3CpuInstr4_vaddsd_XMM8_XMM9_XMM10_icebp_c64, 255,         RM_REG, T_AVX_128, XMM8, XMM9, XMM10,  PASS_s_aValues   },
     4508        { bs3CpuInstr4_vaddsd_XMM8_XMM9_XMM10_icebp_c64, 255,         RM_REG, T_AVX_128, XMM8, XMM9, XMM10, PASS_s_aValues   },
    45034509        { bs3CpuInstr4_vaddsd_XMM8_XMM9_FSxBX_icebp_c64, X86_XCPT_AC, RM_MEM, T_AVX_128, XMM8, XMM9, FSxBX, PASS_s_aValues   },
    45044510
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette