Changeset 104440 in vbox for trunk/src/VBox/ValidationKit/bootsectors
- Timestamp:
- Apr 26, 2024 10:30:39 AM (10 months ago)
- Location:
- trunk/src/VBox/ValidationKit/bootsectors
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-instr-3-template.mac
r104370 r104440 67 67 db BS3_CMN_NM(%1).again - BS3_CMN_NM(%1) 68 68 BS3_PROC_BEGIN_CMN %1, BS3_PBC_NEAR 69 %ifdef EMIT_FS_PREFIX 70 fs 71 %endif 69 72 %endmacro 70 73 %endif ; !BS3CPUINSTR3_PROC_BEGIN_CMN_DEFINED … … 3199 3202 EMIT_INSTR_PLUS_ICEBP_YMM_890 vpmaddwd 3200 3203 3204 ; 3205 ; MASKMOVQ 3206 ; 3207 %define EMIT_FS_PREFIX 3208 EMIT_INSTR_PLUS_ICEBP maskmovq, MM0, MM1 3209 %undef EMIT_FS_PREFIX 3210 3211 ; 3212 ; [V]MASKMOVDQU 3213 ; 3214 %define EMIT_FS_PREFIX 3215 EMIT_INSTR_PLUS_ICEBP maskmovdqu, XMM0, XMM1 3216 EMIT_INSTR_PLUS_ICEBP_C64 maskmovdqu, XMM8, XMM9 3217 3218 EMIT_INSTR_PLUS_ICEBP vmaskmovdqu, XMM0, XMM1 3219 EMIT_INSTR_PLUS_ICEBP_C64 vmaskmovdqu, XMM8, XMM9 3220 %undef EMIT_FS_PREFIX 3221 3201 3222 %endif ; BS3_INSTANTIATING_CMN 3202 3223 -
trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-instr-3.c32
r104370 r104440 91 91 RM_REG = 0, 92 92 RM_MEM, 93 RM_MEM8, /**< Memory operand is 8 bits. Hack for movss and similar. */ 94 RM_MEM16, /**< Memory operand is 16 bits. Hack for movss and similar. */ 95 RM_MEM32, /**< Memory operand is 32 bits. Hack for movss and similar. */ 96 RM_MEM64 /**< Memory operand is 64 bits. Hack for movss and similar. */ 93 RM_MEM_DI, /**< Memory operand pointer is implicitly RDI. Hack for maskmovq, [v]maskmovdqu. */ 94 RM_MEM8, /**< Memory operand is 8 bits. Hack for movss and similar. */ 95 RM_MEM16, /**< Memory operand is 16 bits. Hack for movss and similar. */ 96 RM_MEM32, /**< Memory operand is 32 bits. Hack for movss and similar. */ 97 RM_MEM64 /**< Memory operand is 64 bits. Hack for movss and similar. */ 97 98 }; 98 99 … … 558 559 DECLINLINE(uint8_t) bs3CpuInstr3MemOpSize(uint8_t cbOperand, uint8_t enmRm) 559 560 { 560 if (enmRm <= RM_MEM )561 if (enmRm <= RM_MEM_DI) 561 562 return cbOperand; 562 563 if (enmRm == RM_MEM8) … … 603 604 #undef BS3_SKIPIT_DO_SKIP 604 605 #undef BS3_SKIPIT_DO_ARGS 606 #define BS3_SKIPIT_DO_SKIP 607 #undef BS3_SKIPIT_AVG_SKIP 608 #define BS3_SKIPIT_AVG_SKIP 91 605 609 606 610 #ifndef BS3_SKIPIT_DO_SKIP … … 859 863 || paTests[iTest].iRegSrc1 == UINT8_MAX 860 864 || paTests[iTest].iRegSrc2 == UINT8_MAX); 861 Bs3RegCtxSetGrpSegFromCurPtr(&Ctx, &Ctx.rbx, &Ctx.fs, puMemOp); 865 if (paTests[iTest].enmRm != RM_MEM_DI) 866 Bs3RegCtxSetGrpSegFromCurPtr(&Ctx, &Ctx.rbx, &Ctx.fs, puMemOp); 867 else 868 Bs3RegCtxSetGrpSegFromCurPtr(&Ctx, &Ctx.rdi, &Ctx.fs, puMemOp); 862 869 } 863 870 … … 867 874 g_uBs3TrapEipHint = Ctx.rip.u32 + (bXcptExpect == X86_XCPT_DB ? cbInstr + 1 : 0); 868 875 Bs3TrapSetJmpAndRestoreWithExtCtxAndRm(&Ctx, pExtCtx, &TrapFrame, pExtCtxOut); 876 877 /* CPUs are inconsistent about FTW modification during these exceptions */ 878 if (bXcptExpect == X86_XCPT_PF || bXcptExpect == X86_XCPT_AC) 879 Bs3ExtCtxSetAbridgedFtw(pExtCtx, Bs3ExtCtxGetAbridgedFtw(pExtCtxOut)); 869 880 870 881 /* … … 907 918 if (bXcptExpect == X86_XCPT_PF) 908 919 Ctx.cr2.u = (uintptr_t)puMemOp; 920 if (paTests[iTest].enmRm == RM_MEM_DI) 921 { 922 Ctx.cr2Range = cbMemOp; 923 } 909 924 Bs3TestCheckRegCtxEx(&TrapFrame.Ctx, &Ctx, bXcptExpect == X86_XCPT_DB ? cbInstr + 1 : 0, 0, 910 925 bXcptExpect == X86_XCPT_DB || BS3_MODE_IS_16BIT_SYS(bMode) ? 0 : X86_EFL_RF, 911 926 pszMode, idTestStep); 912 927 Ctx.cr2.u = 0; 928 if (paTests[iTest].enmRm == RM_MEM_DI) 929 { 930 Ctx.cr2Range = 0; 931 } 913 932 914 933 if ( paTests[iTest].enmRm >= RM_MEM … … 9417 9436 } 9418 9437 9438 9439 /* 9440 * MASKMOVQ, [V]MASKMOVDQU - move selected bytes 9441 */ 9442 BS3_DECL_FAR(uint8_t) bs3CpuInstr3_maskmovq_v_maskmovdqu(uint8_t bMode) 9443 { 9444 static BS3CPUINSTR3_TEST1_VALUES_T const s_aValues[] = 9445 { 9446 { /*src2*/ RTUINT256_INIT_C(0, 0, 0x0000000000000000, 0x0000000000000000), /* mask */ 9447 /*src1*/ RTUINT256_INIT_C(0, 0, 0x9192939495969798, 0xfedcba9876543210), /* src */ 9448 /* => */ RTUINT256_INIT_C(0, 0, 0xcccccccccccccccc, 0xcccccccccccccccc) }, /* dest */ 9449 { /*src2*/ RTUINT256_INIT_C(0, 0, 0x89abcdeffedcba98, 0xffeeddccbbaa9988), 9450 /*src1*/ RTUINT256_INIT_C(0, 0, 0x9192939495969798, 0xfedcba9876543210), 9451 /* => */ RTUINT256_INIT_C(0, 0, 0x9192939495969798, 0xfedcba9876543210) }, 9452 { /*src2*/ RTUINT256_INIT_C(0, 0, 0x10204080c0e0f0ff, 0x8000800080008000), 9453 /*src1*/ RTUINT256_INIT_C(0, 0, 0x9192939495969798, 0xfedcba9876543210), 9454 /* => */ RTUINT256_INIT_C(0, 0, 0xcccccc9495969798, 0xfeccbacc76cc32cc) }, 9455 }; 9456 9457 static BS3CPUINSTR3_TEST1_T const s_aTests16[] = 9458 { 9459 { bs3CpuInstr3_maskmovq_MM0_MM1_icebp_c16, 255, RM_MEM_DI, T_MMX_SSE, 255, 0, 1, RT_ELEMENTS(s_aValues), s_aValues }, 9460 { bs3CpuInstr3_maskmovdqu_XMM0_XMM1_icebp_c16, 255, RM_MEM_DI, T_SSE2, 255, 0, 1, RT_ELEMENTS(s_aValues), s_aValues }, 9461 { bs3CpuInstr3_vmaskmovdqu_XMM0_XMM1_icebp_c16, X86_XCPT_AC, RM_MEM_DI, T_AVX_128, 255, 0, 1, RT_ELEMENTS(s_aValues), s_aValues }, 9462 }; 9463 static BS3CPUINSTR3_TEST1_T const s_aTests32[] = 9464 { 9465 { bs3CpuInstr3_maskmovq_MM0_MM1_icebp_c32, 255, RM_MEM_DI, T_MMX_SSE, 255, 0, 1, RT_ELEMENTS(s_aValues), s_aValues }, 9466 { bs3CpuInstr3_maskmovdqu_XMM0_XMM1_icebp_c32, 255, RM_MEM_DI, T_SSE2, 255, 0, 1, RT_ELEMENTS(s_aValues), s_aValues }, 9467 { bs3CpuInstr3_vmaskmovdqu_XMM0_XMM1_icebp_c32, X86_XCPT_AC, RM_MEM_DI, T_AVX_128, 255, 0, 1, RT_ELEMENTS(s_aValues), s_aValues }, 9468 }; 9469 static BS3CPUINSTR3_TEST1_T const s_aTests64[] = 9470 { 9471 { bs3CpuInstr3_maskmovq_MM0_MM1_icebp_c64, 255, RM_MEM_DI, T_MMX_SSE, 255, 0, 1, RT_ELEMENTS(s_aValues), s_aValues }, 9472 { bs3CpuInstr3_maskmovdqu_XMM0_XMM1_icebp_c64, 255, RM_MEM_DI, T_SSE2, 255, 0, 1, RT_ELEMENTS(s_aValues), s_aValues }, 9473 { bs3CpuInstr3_vmaskmovdqu_XMM0_XMM1_icebp_c64, X86_XCPT_AC, RM_MEM_DI, T_AVX_128, 255, 0, 1, RT_ELEMENTS(s_aValues), s_aValues }, 9474 9475 { bs3CpuInstr3_maskmovdqu_XMM8_XMM9_icebp_c64, 255, RM_MEM_DI, T_SSE2, 255, 8, 9, RT_ELEMENTS(s_aValues), s_aValues }, 9476 { bs3CpuInstr3_vmaskmovdqu_XMM8_XMM9_icebp_c64, X86_XCPT_AC, RM_MEM_DI, T_AVX_128, 255, 8, 9, RT_ELEMENTS(s_aValues), s_aValues }, 9477 }; 9478 static BS3CPUINSTR3_TEST1_MODE_T const s_aTests[3] = BS3CPUINSTR3_TEST1_MODES_INIT(s_aTests16, s_aTests32, s_aTests64); 9479 unsigned const iTest = BS3CPUINSTR3_TEST_MODES_INDEX(bMode); 9480 return bs3CpuInstr3_WorkerTestType1(bMode, s_aTests[iTest].paTests, s_aTests[iTest].cTests, 9481 g_aXcptConfig5, RT_ELEMENTS(g_aXcptConfig5)); 9482 } 9419 9483 9420 9484 … … 14593 14657 { "[v]pmaddwd", bs3CpuInstr3_v_pmaddwd, 0 }, 14594 14658 #endif 14659 #if defined(ALL_TESTS) 14660 { "maskmovq/[v]maskmovdqu", bs3CpuInstr3_maskmovq_v_maskmovdqu, 0 }, 14661 #endif 14595 14662 }; 14596 14663 Bs3TestInit("bs3-cpu-instr-3"); -
trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-TestCheckRegCtxEx.c
r98103 r104440 96 96 if (!(fbFlags & BS3REG_CTX_F_NO_CR2_CR3)) 97 97 { 98 CHECK_MEMBER("cr2", "%08RX64", pActualCtx->cr2.u, pExpectedCtx->cr2.u); 98 /* cr2Range is always zero except if changed by the test worker */ 99 if ((pActualCtx->cr2.u < pExpectedCtx->cr2.u || 100 pActualCtx->cr2.u > pExpectedCtx->cr2.u + pExpectedCtx->cr2Range)) 101 { 102 CHECK_MEMBER("cr2", "%08RX64", pActualCtx->cr2.u, pExpectedCtx->cr2.u); 103 } 99 104 CHECK_MEMBER("cr3", "%08RX64", pActualCtx->cr3.u, pExpectedCtx->cr3.u); 100 105 } -
trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3kit.h
r104071 r104440 2693 2693 uint8_t bCpl; /**< 0xa1: 0-3, 0 is used for real mode. */ 2694 2694 uint8_t fbFlags; /**< 0xa2: BS3REG_CTX_F_XXX */ 2695 uint8_t abPadding[5]; /**< 0xa3 */ 2695 uint8_t abPadding[3]; /**< 0xa3 */ 2696 uint16_t cr2Range; /**< 0xa6 */ 2696 2697 BS3REG cr0; /**< 0xa8 */ 2697 2698 BS3REG cr2; /**< 0xb0 */ -
trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3kit.mac
r102277 r104440 1414 1414 .bCpl resb 1 ; uint8_t bCpl; /**< 0xa1: 0-3, 0 is used for real mode. */ 1415 1415 .fbFlags resb 1 ; uint8_t fbFlags; /**< 0xa2: BS3REG_CTX_F_XXX */ 1416 .abPadding resb 5 ; uint8_t abPadding[5]; /**< 0xa4 */ 1416 .abPadding resb 3 ; uint8_t abPadding[3]; /**< 0xa3 */ 1417 .cr2Range resw 1 ; uint16_t cr2Range; /**< 0xa6 */ 1417 1418 .cr0 resq 1 ; BS3REG cr0; /**< 0xa8 */ 1418 1419 .cr2 resq 1 ; BS3REG cr2; /**< 0xb0 */
Note:
See TracChangeset
for help on using the changeset viewer.