Changeset 95379 in vbox for trunk/src/VBox/ValidationKit
- Timestamp:
- Jun 26, 2022 11:17:46 PM (3 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-instr-3-template.c
r95377 r95379 356 356 } 357 357 358 359 /* 360 * Test type #1. 361 */ 362 358 363 typedef struct BS3CPUINSTR3_TEST1_VALUES_T 359 364 { … … 369 374 uint8_t enmType; 370 375 uint8_t cbInstr; 371 uint8_t cValues;372 376 uint8_t iRegDst; 373 377 uint8_t iRegSrc1; 374 378 uint8_t iRegSrc2; 379 uint8_t cValues; 375 380 BS3CPUINSTR3_TEST1_VALUES_T const BS3_FAR *paValues; 376 381 } BS3CPUINSTR3_TEST1_T; … … 451 456 bool const fMmxInstr = paTests[iTest].enmType < T_SSE; 452 457 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); 455 461 uint8_t bXcptExpect = !g_afTypeSupports[paTests[iTest].enmType] ? X86_XCPT_UD 456 462 : fMmxInstr ? paConfigs[iCfg].bXcptMmx … … 459 465 unsigned iVal; 460 466 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)); 464 471 465 472 /* If testing unaligned memory accesses, skip register-only tests. This allows … … 516 523 BS3_ASSERT(paTests[iTest].enmRm == RM_MEM); 517 524 BS3_ASSERT(paTests[iTest].iRegDst != UINT8_MAX && paTests[iTest].iRegSrc1 != UINT8_MAX); 518 *puMemOp = uMemOpExpect = paValues[iVal].uSrc 1;519 uMemOpExpect = paValues[iVal].uSrc 1;525 *puMemOp = uMemOpExpect = paValues[iVal].uSrc2; 526 uMemOpExpect = paValues[iVal].uSrc2; 520 527 } 521 528 else if (fMmxInstr) … … 556 563 if (TrapFrame.bXcpt != bXcptExpect) 557 564 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 } 558 573 Bs3TestCheckRegCtxEx(&TrapFrame.Ctx, &Ctx, bXcptExpect == X86_XCPT_DB ? paTests[iTest].cbInstr + 1 : 0, 0, 559 574 bXcptExpect == X86_XCPT_DB || BS3_MODE_IS_16BIT_SYS(bMode) ? 0 : X86_EFL_RF, 560 575 pszMode, idTestStep); 576 561 577 if ( paTests[iTest].enmRm == RM_MEM 562 578 && Bs3MemCmp(puMemOp, &uMemOpExpect, cbOperand) != 0) … … 603 619 static BS3CPUINSTR3_TEST1_T const s_aTests16[] = 604 620 { 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 }, 606 623 }; 607 624 … … 609 626 static BS3CPUINSTR3_TEST1_T const s_aTests32[] = 610 627 { 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 }, 612 630 }; 613 631 #endif … … 616 634 static BS3CPUINSTR3_TEST1_T const s_aTests64[] = 617 635 { 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 }, 619 638 }; 620 639 #endif
Note:
See TracChangeset
for help on using the changeset viewer.