VirtualBox

Changeset 95379 in vbox for trunk/src/VBox/ValidationKit


Ignore:
Timestamp:
Jun 26, 2022 11:17:46 PM (3 years ago)
Author:
vboxsync
Message:

ValKit/bs3-cpu-instr-3: Debugged memory operand. bugref:9898

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-instr-3-template.c

    r95377 r95379  
    356356}
    357357
     358
     359/*
     360 * Test type #1.
     361 */
     362
    358363typedef struct BS3CPUINSTR3_TEST1_VALUES_T
    359364{
     
    369374    uint8_t         enmType;
    370375    uint8_t         cbInstr;
    371     uint8_t         cValues;
    372376    uint8_t         iRegDst;
    373377    uint8_t         iRegSrc1;
    374378    uint8_t         iRegSrc2;
     379    uint8_t         cValues;
    375380    BS3CPUINSTR3_TEST1_VALUES_T const BS3_FAR *paValues;
    376381} BS3CPUINSTR3_TEST1_T;
     
    451456                bool const      fMmxInstr   = paTests[iTest].enmType < T_SSE;
    452457                bool const      fSseInstr   = paTests[iTest].enmType >= T_SSE && paTests[iTest].enmType < T_AVX_128;
    453                 uint8_t const   cbOperand   = paTests[iTest].enmType <= T_AVX_128 ? 128/8 : 256/8;
    454                 uint8_t const   cbAlign     = fMmxInstr ? 8 : 16;
     458                uint8_t const   cbOperand   = paTests[iTest].enmType < T_128BITS ? 64/8
     459                                            : paTests[iTest].enmType < T_256BITS ? 128/8 : 256/8;
     460                uint8_t const   cbAlign     = RT_MIN(cbOperand, 16);
    455461                uint8_t         bXcptExpect = !g_afTypeSupports[paTests[iTest].enmType] ? X86_XCPT_UD
    456462                                            : fMmxInstr ? paConfigs[iCfg].bXcptMmx
     
    459465                unsigned        iVal;
    460466                uint8_t         abPadding[sizeof(RTUINT256U) * 2];
    461                 PRTUINT256U     puMemOp     = (PRTUINT256U)&abPadding[(  BS3_FP_OFF(&abPadding[sizeof(RTUINT256U)])
    462                                                                        & ~(size_t)(cbAlign - 1))
    463                                                                       - !paConfigs[iCfg].fAligned];
     467                unsigned const  offPadding  = (BS3_FP_OFF(&abPadding[sizeof(RTUINT256U)]) & ~(size_t)(cbAlign - 1))
     468                                            - BS3_FP_OFF(&abPadding[0]);
     469                PRTUINT256U     puMemOp     = (PRTUINT256U)&abPadding[offPadding - !paConfigs[iCfg].fAligned];
     470                BS3_ASSERT((uint8_t BS3_FAR *)puMemOp - &abPadding[0] <= sizeof(RTUINT256U));
    464471
    465472                /* If testing unaligned memory accesses, skip register-only tests.  This allows
     
    516523                        BS3_ASSERT(paTests[iTest].enmRm == RM_MEM);
    517524                        BS3_ASSERT(paTests[iTest].iRegDst != UINT8_MAX && paTests[iTest].iRegSrc1 != UINT8_MAX);
    518                         *puMemOp = uMemOpExpect = paValues[iVal].uSrc1;
    519                         uMemOpExpect = paValues[iVal].uSrc1;
     525                        *puMemOp = uMemOpExpect = paValues[iVal].uSrc2;
     526                        uMemOpExpect = paValues[iVal].uSrc2;
    520527                    }
    521528                    else if (fMmxInstr)
     
    556563                    if (TrapFrame.bXcpt != bXcptExpect)
    557564                        Bs3TestFailedF("Expected bXcpt = %#x, got %#x", bXcptExpect, TrapFrame.bXcpt);
     565
     566                    /* Kludge! Looks like EFLAGS.AC is cleared when raising #GP in real mode on the 10980XE. WEIRD! */
     567                    if (bMode == BS3_MODE_RM && (Ctx.rflags.u32 & X86_EFL_AC))
     568                    {
     569                        if (TrapFrame.Ctx.rflags.u32 & X86_EFL_AC)
     570                            Bs3TestFailedF("Expected EFLAGS.AC to be cleared (bXcpt=%d)", TrapFrame.bXcpt);
     571                        TrapFrame.Ctx.rflags.u32 |= X86_EFL_AC;
     572                    }
    558573                    Bs3TestCheckRegCtxEx(&TrapFrame.Ctx, &Ctx, bXcptExpect == X86_XCPT_DB ? paTests[iTest].cbInstr + 1 : 0, 0,
    559574                                         bXcptExpect == X86_XCPT_DB || BS3_MODE_IS_16BIT_SYS(bMode) ? 0 : X86_EFL_RF,
    560575                                         pszMode, idTestStep);
     576
    561577                    if (   paTests[iTest].enmRm == RM_MEM
    562578                        && Bs3MemCmp(puMemOp, &uMemOpExpect, cbOperand) != 0)
     
    603619    static BS3CPUINSTR3_TEST1_T const s_aTests16[] =
    604620    {
    605         {  bs3CpuInstr3_xorps_XMM1_XMM2_icebp_c16,      RM_REG, T_SSE2, 3,  1, 1, 2, RT_ELEMENTS(s_aValues128), s_aValues128 },
     621        {  bs3CpuInstr3_xorps_XMM1_XMM2_icebp_c16,      RM_REG, T_SSE2, 3,  1, 1,   2, RT_ELEMENTS(s_aValues128), s_aValues128 },
     622        {  bs3CpuInstr3_xorps_XMM1_FSxBX_icebp_c16,     RM_MEM, T_SSE2, 4,  1, 1, 255, RT_ELEMENTS(s_aValues128), s_aValues128 },
    606623    };
    607624
     
    609626    static BS3CPUINSTR3_TEST1_T const s_aTests32[] =
    610627    {
    611         {  bs3CpuInstr3_xorps_XMM1_XMM2_icebp_c32,      RM_REG, T_SSE2, 3,  1, 1, 2, RT_ELEMENTS(s_aValues128), s_aValues128 },
     628        {  bs3CpuInstr3_xorps_XMM1_XMM2_icebp_c32,      RM_REG, T_SSE2, 3,  1, 1, 2,   RT_ELEMENTS(s_aValues128), s_aValues128 },
     629        {  bs3CpuInstr3_xorps_XMM1_FSxBX_icebp_c32,     RM_MEM, T_SSE2, 4,  1, 1, 255, RT_ELEMENTS(s_aValues128), s_aValues128 },
    612630    };
    613631#endif
     
    616634    static BS3CPUINSTR3_TEST1_T const s_aTests64[] =
    617635    {
    618         {  bs3CpuInstr3_xorps_XMM1_XMM2_icebp_c64,      RM_REG, T_SSE2, 3,  1, 1, 2, RT_ELEMENTS(s_aValues128), s_aValues128 },
     636        {  bs3CpuInstr3_xorps_XMM1_XMM2_icebp_c64,      RM_REG, T_SSE2, 3,  1, 1, 2,   RT_ELEMENTS(s_aValues128), s_aValues128 },
     637        {  bs3CpuInstr3_xorps_XMM1_FSxBX_icebp_c64,     RM_MEM, T_SSE2, 4,  1, 1, 255, RT_ELEMENTS(s_aValues128), s_aValues128 },
    619638    };
    620639#endif
Note: See TracChangeset for help on using the changeset viewer.

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