Changeset 103602 in vbox for trunk/src/VBox/ValidationKit
- Timestamp:
- Feb 29, 2024 2:10:17 AM (13 months ago)
- svn:sync-xref-src-repo-rev:
- 161960
- Location:
- trunk/src/VBox/ValidationKit/bootsectors
- Files:
-
- 6 added
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/ValidationKit/bootsectors/Makefile.kmk
r102271 r103602 385 385 bs3-cpu-instr-2.c \ 386 386 bs3-cpu-instr-2-asm.asm \ 387 bs3-cpu-instr-2-data16.c16 \ 388 bs3-cpu-instr-2-data64.c64 \ 387 389 bs3kit/bs3-cmn-instantiate-x0.c16 \ 388 390 bs3kit/bs3-cmn-instantiate.c32 \ … … 393 395 $$(bs3-cpu-instr-2_0_OUTDIR)/bs3kit/bs3-cmn-instantiate.o64 \ 394 396 $$(bs3-cpu-instr-2_0_OUTDIR)/bs3-cpu-instr-2-asm.o16 397 398 BLDPROGS.amd64 += bs3-cpu-instr-2-gen 399 bs3-cpu-instr-2-gen_TEMPLATE = VBoxAdvBldProg 400 bs3-cpu-instr-2-gen_SOURCES = \ 401 bs3-cpu-instr-2-gen.cpp \ 402 bs3-cpu-instr-2-gen-asm.asm 395 403 396 404 # -
trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-instr-2-template.c
r103584 r103602 41 41 #include <iprt/asm.h> 42 42 #include <iprt/asm-amd64-x86.h> 43 #include "bs3-cpu-instr-2.h" 44 #include "bs3-cpu-instr-2-data.h" 43 45 44 46 … … 65 67 *********************************************************************************************************************************/ 66 68 #ifdef BS3_INSTANTIATING_CMN 69 # if ARCH_BITS == 64 70 # define BS3CPUINSTR2_BINARY_OP_PROTO64(a_Ins) \ 71 /* 8-bit */ \ 72 extern FNBS3FAR BS3_CMN_NM(bs3CpuInstr2_ ## a_Ins ## _sil_dil); \ 73 extern FNBS3FAR BS3_CMN_NM(bs3CpuInstr2_ ## a_Ins ## _r9b_r8b); \ 74 extern FNBS3FAR BS3_CMN_NM(bs3CpuInstr2_ ## a_Ins ## _al_r13b); \ 75 /* 16-bit */ \ 76 extern FNBS3FAR BS3_CMN_NM(bs3CpuInstr2_ ## a_Ins ## _r8w_cx); \ 77 extern FNBS3FAR BS3_CMN_NM(bs3CpuInstr2_ ## a_Ins ## _r15w_r10w); \ 78 /* 32-bit */ \ 79 extern FNBS3FAR BS3_CMN_NM(bs3CpuInstr2_ ## a_Ins ## _eax_r8d); \ 80 extern FNBS3FAR BS3_CMN_NM(bs3CpuInstr2_ ## a_Ins ## _r9d_ecx); \ 81 extern FNBS3FAR BS3_CMN_NM(bs3CpuInstr2_ ## a_Ins ## _r13d_r14d); \ 82 /* 64-bit */ \ 83 extern FNBS3FAR BS3_CMN_NM(bs3CpuInstr2_ ## a_Ins ## _rax_rbx); \ 84 extern FNBS3FAR BS3_CMN_NM(bs3CpuInstr2_ ## a_Ins ## _r8_rax); \ 85 extern FNBS3FAR BS3_CMN_NM(bs3CpuInstr2_ ## a_Ins ## _rdx_r10); 86 87 # define BS3CPUINSTR2CMNBINTEST_ENTRIES_8_64BIT(a_Ins) \ 88 { BS3_CMN_NM(bs3CpuInstr2_ ## a_Ins ## _sil_dil), X86_GREG_xSI, X86_GREG_xDI }, \ 89 { BS3_CMN_NM(bs3CpuInstr2_ ## a_Ins ## _r9b_r8b), X86_GREG_x9, X86_GREG_x8 }, \ 90 { BS3_CMN_NM(bs3CpuInstr2_ ## a_Ins ## _al_r13b), X86_GREG_xAX, X86_GREG_x13 }, 91 # define BS3CPUINSTR2CMNBINTEST_ENTRIES_16_64BIT(a_Ins) \ 92 { BS3_CMN_NM(bs3CpuInstr2_ ## a_Ins ## _r8w_cx), X86_GREG_x8, X86_GREG_xCX }, \ 93 { BS3_CMN_NM(bs3CpuInstr2_ ## a_Ins ## _r15w_r10w), X86_GREG_x15, X86_GREG_x10 }, 94 # define BS3CPUINSTR2CMNBINTEST_ENTRIES_32_64BIT(a_Ins) \ 95 { BS3_CMN_NM(bs3CpuInstr2_ ## a_Ins ## _eax_r8d), X86_GREG_xAX, X86_GREG_x8 }, \ 96 { BS3_CMN_NM(bs3CpuInstr2_ ## a_Ins ## _r9d_ecx), X86_GREG_x9, X86_GREG_xCX }, \ 97 { BS3_CMN_NM(bs3CpuInstr2_ ## a_Ins ## _r13d_r14d), X86_GREG_x13, X86_GREG_x14 }, 98 # define BS3CPUINSTR2CMNBINTEST_ENTRIES_64(a_Ins) \ 99 { BS3_CMN_NM(bs3CpuInstr2_ ## a_Ins ## _rax_rbx), X86_GREG_xAX, X86_GREG_xBX }, \ 100 { BS3_CMN_NM(bs3CpuInstr2_ ## a_Ins ## _r8_rax), X86_GREG_x8, X86_GREG_xAX }, \ 101 { BS3_CMN_NM(bs3CpuInstr2_ ## a_Ins ## _rdx_r10), X86_GREG_xDX, X86_GREG_x10 }, 102 # else 103 # define BS3CPUINSTR2_BINARY_OP_PROTO64(a_Ins) 104 # define BS3CPUINSTR2CMNBINTEST_ENTRIES_8_64BIT(aIns) 105 # define BS3CPUINSTR2CMNBINTEST_ENTRIES_16_64BIT(aIns) 106 # define BS3CPUINSTR2CMNBINTEST_ENTRIES_32_64BIT(aIns) 107 # endif 108 # define BS3CPUINSTR2_BINARY_OP_PROTO(a_Ins) \ 109 BS3CPUINSTR2_BINARY_OP_PROTO64(a_Ins) \ 110 /* 8-bit */ \ 111 extern FNBS3FAR BS3_CMN_NM(bs3CpuInstr2_ ## a_Ins ## _al_dl); \ 112 extern FNBS3FAR BS3_CMN_NM(bs3CpuInstr2_ ## a_Ins ## _ch_bh); \ 113 extern FNBS3FAR BS3_CMN_NM(bs3CpuInstr2_ ## a_Ins ## _dl_ah); \ 114 /* 16-bit */ \ 115 extern FNBS3FAR BS3_CMN_NM(bs3CpuInstr2_ ## a_Ins ## _di_si); \ 116 extern FNBS3FAR BS3_CMN_NM(bs3CpuInstr2_ ## a_Ins ## _cx_bp); \ 117 /* 32-bit */ \ 118 extern FNBS3FAR BS3_CMN_NM(bs3CpuInstr2_ ## a_Ins ## _eax_ebx); \ 119 extern FNBS3FAR BS3_CMN_NM(bs3CpuInstr2_ ## a_Ins ## _ecx_ebp); \ 120 extern FNBS3FAR BS3_CMN_NM(bs3CpuInstr2_ ## a_Ins ## _edx_edi) 121 122 # define BS3CPUINSTR2CMNBINTEST_ENTRIES_8(a_Ins) \ 123 { BS3_CMN_NM(bs3CpuInstr2_ ## a_Ins ## _al_dl), X86_GREG_xAX, X86_GREG_xDX }, \ 124 { BS3_CMN_NM(bs3CpuInstr2_ ## a_Ins ## _ch_bh), X86_GREG_xCX+16, X86_GREG_xBX+16 }, \ 125 { BS3_CMN_NM(bs3CpuInstr2_ ## a_Ins ## _dl_ah), X86_GREG_xDX, X86_GREG_xAX+16 }, \ 126 BS3CPUINSTR2CMNBINTEST_ENTRIES_8_64BIT(a_Ins) 127 # define BS3CPUINSTR2CMNBINTEST_ENTRIES_16(a_Ins) \ 128 { BS3_CMN_NM(bs3CpuInstr2_ ## a_Ins ## _di_si), X86_GREG_xDI, X86_GREG_xSI }, \ 129 { BS3_CMN_NM(bs3CpuInstr2_ ## a_Ins ## _cx_bp), X86_GREG_xCX, X86_GREG_xBP }, \ 130 BS3CPUINSTR2CMNBINTEST_ENTRIES_16_64BIT(a_Ins) 131 # define BS3CPUINSTR2CMNBINTEST_ENTRIES_32(a_Ins) \ 132 { BS3_CMN_NM(bs3CpuInstr2_ ## a_Ins ## _eax_ebx), X86_GREG_xAX, X86_GREG_xBX }, \ 133 { BS3_CMN_NM(bs3CpuInstr2_ ## a_Ins ## _ecx_ebp), X86_GREG_xCX, X86_GREG_xBP }, \ 134 { BS3_CMN_NM(bs3CpuInstr2_ ## a_Ins ## _edx_edi), X86_GREG_xDX, X86_GREG_xDI }, \ 135 BS3CPUINSTR2CMNBINTEST_ENTRIES_32_64BIT(a_Ins) 136 137 138 BS3CPUINSTR2_BINARY_OP_PROTO(and); 139 BS3CPUINSTR2_BINARY_OP_PROTO(or); 140 BS3CPUINSTR2_BINARY_OP_PROTO(xor); 141 BS3CPUINSTR2_BINARY_OP_PROTO(test); 142 143 BS3CPUINSTR2_BINARY_OP_PROTO(add); 144 BS3CPUINSTR2_BINARY_OP_PROTO(adc); 145 BS3CPUINSTR2_BINARY_OP_PROTO(sub); 146 BS3CPUINSTR2_BINARY_OP_PROTO(sbb); 147 BS3CPUINSTR2_BINARY_OP_PROTO(cmp); 148 149 BS3CPUINSTR2_BINARY_OP_PROTO(bt); /* ignore 8-bit protos */ 150 BS3CPUINSTR2_BINARY_OP_PROTO(btc); 151 BS3CPUINSTR2_BINARY_OP_PROTO(btr); 152 BS3CPUINSTR2_BINARY_OP_PROTO(bts); 153 67 154 extern FNBS3FAR BS3_CMN_NM(bs3CpuInstr2_mul_xBX_ud2); 68 155 … … 309 396 */ 310 397 #ifdef BS3_INSTANTIATING_CMN 398 399 /* 400 * Basic binary arithmetic tests. 401 */ 402 403 typedef struct BS3CPUINSTR2CMNBINTEST 404 { 405 FPFNBS3FAR pfnWorker; 406 uint8_t idxDstReg; 407 uint8_t idxSrcReg; 408 } BS3CPUINSTR2CMNBINTEST; 409 typedef BS3CPUINSTR2CMNBINTEST const BS3_FAR_DATA *PCBS3CPUINSTR2CMNBINTEST; 410 411 412 static uint16_t const g_auEflStatusBitsVars[] = 413 { 414 0, 415 X86_EFL_STATUS_BITS, 416 X86_EFL_CF, 417 X86_EFL_PF, 418 X86_EFL_AF, 419 X86_EFL_ZF, 420 X86_EFL_SF, 421 X86_EFL_OF, 422 X86_EFL_PF | X86_EFL_AF, 423 }; 424 425 #define BS3CPUINSTR2_COMMON_BINARY_U(a_cBits, a_UIntType, a_szFmt) \ 426 static uint8_t \ 427 RT_CONCAT(bs3CpuInstr2_CommonBinaryU,a_cBits)(uint8_t bMode, PCBS3CPUINSTR2CMNBINTEST paTests, unsigned cTests, uint16_t fPassthruEfl, \ 428 RT_CONCAT(PCBS3CPUINSTR2BIN,a_cBits) paTestData, unsigned cTestData, bool fCarryIn) \ 429 { \ 430 BS3REGCTX Ctx; \ 431 BS3REGCTX CtxExpect; \ 432 BS3TRAPFRAME TrapFrame; \ 433 unsigned iTest; \ 434 \ 435 /* Ensure the structures are allocated before we sample the stack pointer. */ \ 436 Bs3MemSet(&Ctx, 0, sizeof(Ctx)); \ 437 Bs3MemSet(&TrapFrame, 0, sizeof(TrapFrame)); \ 438 \ 439 /* \ 440 * Create test context. \ 441 */ \ 442 Bs3RegCtxSaveEx(&Ctx, bMode, 512); \ 443 Ctx.rflags.u32 &= ~X86_EFL_RF; \ 444 Bs3MemCpy(&CtxExpect, &Ctx, sizeof(CtxExpect)); \ 445 if (!BS3_MODE_IS_16BIT_SYS(bMode)) \ 446 CtxExpect.rflags.u32 |= X86_EFL_RF; \ 447 \ 448 /* \ 449 * Each test worker. \ 450 */ \ 451 for (iTest = 0; iTest < cTests; iTest++) \ 452 { \ 453 uint8_t const cbInstr = ((uint8_t BS3_FAR *)paTests[iTest].pfnWorker)[-1]; /* the function is prefixed by the length */ \ 454 unsigned const idxDstReg = paTests[iTest].idxDstReg; \ 455 unsigned const idxSrcReg = paTests[iTest].idxSrcReg; \ 456 BS3REG const SavedDst = (&Ctx.rax)[idxDstReg & 15]; \ 457 BS3REG const SavedSrc = (&Ctx.rax)[idxSrcReg & 15]; \ 458 a_UIntType RT_FAR * const puCtxDst = &(&Ctx.rax)[idxDstReg & 15].RT_CONCAT(au,a_cBits)[idxDstReg >> 4]; \ 459 a_UIntType RT_FAR * const puCtxSrc = &(&Ctx.rax)[idxSrcReg & 15].RT_CONCAT(au,a_cBits)[idxSrcReg >> 4]; \ 460 a_UIntType RT_FAR * const puCtxExpectDst = &(&CtxExpect.rax)[idxDstReg & 15].RT_CONCAT(au,a_cBits)[idxDstReg >> 4]; \ 461 a_UIntType RT_FAR * const puCtxExpectSrc = &(&CtxExpect.rax)[idxSrcReg & 15].RT_CONCAT(au,a_cBits)[idxSrcReg >> 4]; \ 462 unsigned iTestData; \ 463 /*Bs3TestPrintf("pfnWorker=%p\n", paTests[iTest].pfnWorker);*/ \ 464 \ 465 Bs3RegCtxSetRipCsFromLnkPtr(&Ctx, paTests[iTest].pfnWorker); \ 466 CtxExpect.rip.u = Ctx.rip.u + cbInstr; \ 467 CtxExpect.cs = Ctx.cs; \ 468 \ 469 /* \ 470 * Loop over the test data and feed it to the worker. \ 471 */\ 472 for (iTestData = 5; iTestData < cTestData; iTestData++) \ 473 { \ 474 unsigned iRecompiler; \ 475 *puCtxDst = paTestData[iTestData].uSrc1; \ 476 *puCtxSrc = paTestData[iTestData].uSrc2; \ 477 *puCtxExpectDst = paTestData[iTestData].uResult; \ 478 *puCtxExpectSrc = paTestData[iTestData].uSrc2; \ 479 CtxExpect.rflags.u16 &= ~X86_EFL_STATUS_BITS; \ 480 CtxExpect.rflags.u16 |= paTestData[iTestData].fEflOut & X86_EFL_STATUS_BITS; \ 481 \ 482 /* \ 483 * Do input the eight EFLAGS variations three times, so we're sure to trigger \ 484 * native recompilation of the test worker code. \ \ 485 */ \ 486 for (iRecompiler = 0; iRecompiler < 2; iRecompiler++) \ 487 { \ 488 unsigned iEflVar = 0; \ 489 for (iEflVar = 0; iEflVar < RT_ELEMENTS(g_auEflStatusBitsVars); iEflVar++) \ 490 { \ 491 Ctx.rflags.u16 &= ~X86_EFL_STATUS_BITS; \ 492 if (!fCarryIn) \ 493 Ctx.rflags.u16 |= g_auEflStatusBitsVars[iEflVar]; \ 494 else \ 495 Ctx.rflags.u16 |= (g_auEflStatusBitsVars[iEflVar] & ~X86_EFL_CF) \ 496 | (paTestData[iTestData].fEflOut >> BS3CPUINSTR2BIN_EFL_CARRY_IN_BIT) & X86_EFL_CF; \ 497 if (fPassthruEfl) \ 498 CtxExpect.rflags.u16 = (CtxExpect.rflags.u16 & ~fPassthruEfl) | (Ctx.rflags.u16 & fPassthruEfl); \ 499 \ 500 Bs3TrapSetJmpAndRestore(&Ctx, &TrapFrame); \ 501 if (TrapFrame.bXcpt != X86_XCPT_UD) \ 502 { \ 503 Bs3TestFailedF("Expected #UD got %#x", TrapFrame.bXcpt); \ 504 Bs3TrapPrintFrame(&TrapFrame); \ 505 } \ 506 else if (Bs3TestCheckRegCtxEx(&TrapFrame.Ctx, &CtxExpect, 0 /*cbPcAdjust*/, 0 /*cbSpAdjust*/, \ 507 0 /*fExtraEfl*/, "mode", (iTest << 8) | (iTestData & 0xff))) \ 508 continue; \ 509 /*else { Bs3RegCtxPrint(&Ctx); Bs3TrapPrintFrame(&TrapFrame); }*/ \ 510 Bs3TestPrintf("iTest=%u iData=%u: uSrc1=%" a_szFmt " uSrc2=%" a_szFmt " %s-> %" a_szFmt "\n", \ 511 iTest, iTestData, paTestData[iTestData].uSrc1, paTestData[iTestData].uSrc2, \ 512 !fCarryIn ? "" : Ctx.rflags.u16 & X86_EFL_CF ? "CF " : "NC ", \ 513 paTestData[iTestData].uResult); \ 514 /*ASMHalt();*/ \ 515 iRecompiler = ~0U - 1; \ 516 break; \ 517 } \ 518 } \ 519 } \ 520 \ 521 (&CtxExpect.rax)[idxDstReg & 15].u = (&Ctx.rax)[idxDstReg & 15].u = SavedDst.u; \ 522 (&CtxExpect.rax)[idxSrcReg & 15].u = (&Ctx.rax)[idxSrcReg & 15].u = SavedSrc.u; \ 523 } \ 524 \ 525 return 0; \ 526 } 527 528 BS3CPUINSTR2_COMMON_BINARY_U(8, uint8_t, "RX8") 529 BS3CPUINSTR2_COMMON_BINARY_U(16, uint16_t, "RX16") 530 BS3CPUINSTR2_COMMON_BINARY_U(32, uint32_t, "RX32") 531 #if ARCH_BITS == 64 532 BS3CPUINSTR2_COMMON_BINARY_U(64, uint64_t, "RX64") 533 #endif 534 535 536 BS3_DECL_FAR(uint8_t) BS3_CMN_NM(bs3CpuInstr2_and)(uint8_t bMode) 537 { 538 static const BS3CPUINSTR2CMNBINTEST s_aTests8[] = { BS3CPUINSTR2CMNBINTEST_ENTRIES_8(and) }; 539 static const BS3CPUINSTR2CMNBINTEST s_aTests16[] = { BS3CPUINSTR2CMNBINTEST_ENTRIES_16(and) }; 540 static const BS3CPUINSTR2CMNBINTEST s_aTests32[] = { BS3CPUINSTR2CMNBINTEST_ENTRIES_32(and) }; 541 #if ARCH_BITS == 64 542 static const BS3CPUINSTR2CMNBINTEST s_aTests64[] = { BS3CPUINSTR2CMNBINTEST_ENTRIES_64(and) }; 543 #endif 544 bs3CpuInstr2_CommonBinaryU8(bMode, s_aTests8, RT_ELEMENTS(s_aTests8), 0 /*fPassthruEfl*/, 545 g_aBs3CpuInstr2_and_TestDataU8, g_cBs3CpuInstr2_and_TestDataU8, false /*fCarryIn*/); 546 bs3CpuInstr2_CommonBinaryU16(bMode, s_aTests16, RT_ELEMENTS(s_aTests16), 0 /*fPassthruEfl*/, 547 g_aBs3CpuInstr2_and_TestDataU16, g_cBs3CpuInstr2_and_TestDataU16, false /*fCarryIn*/); 548 bs3CpuInstr2_CommonBinaryU32(bMode, s_aTests32, RT_ELEMENTS(s_aTests32), 0 /*fPassthruEfl*/, 549 g_aBs3CpuInstr2_and_TestDataU32, g_cBs3CpuInstr2_and_TestDataU32, false /*fCarryIn*/); 550 #if ARCH_BITS == 64 551 bs3CpuInstr2_CommonBinaryU64(bMode, s_aTests64, RT_ELEMENTS(s_aTests64), 0 /*fPassthruEfl*/, 552 g_aBs3CpuInstr2_and_TestDataU64, g_cBs3CpuInstr2_and_TestDataU64, false /*fCarryIn*/); 553 #endif 554 return 0; 555 } 556 557 558 BS3_DECL_FAR(uint8_t) BS3_CMN_NM(bs3CpuInstr2_or)(uint8_t bMode) 559 { 560 static const BS3CPUINSTR2CMNBINTEST s_aTests8[] = { BS3CPUINSTR2CMNBINTEST_ENTRIES_8(or) }; 561 static const BS3CPUINSTR2CMNBINTEST s_aTests16[] = { BS3CPUINSTR2CMNBINTEST_ENTRIES_16(or) }; 562 static const BS3CPUINSTR2CMNBINTEST s_aTests32[] = { BS3CPUINSTR2CMNBINTEST_ENTRIES_32(or) }; 563 #if ARCH_BITS == 64 564 static const BS3CPUINSTR2CMNBINTEST s_aTests64[] = { BS3CPUINSTR2CMNBINTEST_ENTRIES_64(or) }; 565 #endif 566 bs3CpuInstr2_CommonBinaryU8(bMode, s_aTests8, RT_ELEMENTS(s_aTests8), 0 /*fPassthruEfl*/, 567 g_aBs3CpuInstr2_or_TestDataU8, g_cBs3CpuInstr2_or_TestDataU8, false /*fCarryIn*/); 568 bs3CpuInstr2_CommonBinaryU16(bMode, s_aTests16, RT_ELEMENTS(s_aTests16), 0 /*fPassthruEfl*/, 569 g_aBs3CpuInstr2_or_TestDataU16, g_cBs3CpuInstr2_or_TestDataU16, false /*fCarryIn*/); 570 bs3CpuInstr2_CommonBinaryU32(bMode, s_aTests32, RT_ELEMENTS(s_aTests32), 0 /*fPassthruEfl*/, 571 g_aBs3CpuInstr2_or_TestDataU32, g_cBs3CpuInstr2_or_TestDataU32, false /*fCarryIn*/); 572 #if ARCH_BITS == 64 573 bs3CpuInstr2_CommonBinaryU64(bMode, s_aTests64, RT_ELEMENTS(s_aTests64), 0 /*fPassthruEfl*/, 574 g_aBs3CpuInstr2_or_TestDataU64, g_cBs3CpuInstr2_or_TestDataU64, false /*fCarryIn*/); 575 #endif 576 return 0; 577 } 578 579 580 BS3_DECL_FAR(uint8_t) BS3_CMN_NM(bs3CpuInstr2_xor)(uint8_t bMode) 581 { 582 static const BS3CPUINSTR2CMNBINTEST s_aTests8[] = { BS3CPUINSTR2CMNBINTEST_ENTRIES_8(xor) }; 583 static const BS3CPUINSTR2CMNBINTEST s_aTests16[] = { BS3CPUINSTR2CMNBINTEST_ENTRIES_16(xor) }; 584 static const BS3CPUINSTR2CMNBINTEST s_aTests32[] = { BS3CPUINSTR2CMNBINTEST_ENTRIES_32(xor) }; 585 #if ARCH_BITS == 64 586 static const BS3CPUINSTR2CMNBINTEST s_aTests64[] = { BS3CPUINSTR2CMNBINTEST_ENTRIES_64(xor) }; 587 #endif 588 bs3CpuInstr2_CommonBinaryU8(bMode, s_aTests8, RT_ELEMENTS(s_aTests8), 0 /*fPassthruEfl*/, 589 g_aBs3CpuInstr2_xor_TestDataU8, g_cBs3CpuInstr2_xor_TestDataU8, false /*fCarryIn*/); 590 bs3CpuInstr2_CommonBinaryU16(bMode, s_aTests16, RT_ELEMENTS(s_aTests16), 0 /*fPassthruEfl*/, 591 g_aBs3CpuInstr2_xor_TestDataU16, g_cBs3CpuInstr2_xor_TestDataU16, false /*fCarryIn*/); 592 bs3CpuInstr2_CommonBinaryU32(bMode, s_aTests32, RT_ELEMENTS(s_aTests32), 0 /*fPassthruEfl*/, 593 g_aBs3CpuInstr2_xor_TestDataU32, g_cBs3CpuInstr2_xor_TestDataU32, false /*fCarryIn*/); 594 #if ARCH_BITS == 64 595 bs3CpuInstr2_CommonBinaryU64(bMode, s_aTests64, RT_ELEMENTS(s_aTests64), 0 /*fPassthruEfl*/, 596 g_aBs3CpuInstr2_xor_TestDataU64, g_cBs3CpuInstr2_xor_TestDataU64, false /*fCarryIn*/); 597 #endif 598 return 0; 599 } 600 601 602 BS3_DECL_FAR(uint8_t) BS3_CMN_NM(bs3CpuInstr2_test)(uint8_t bMode) 603 { 604 static const BS3CPUINSTR2CMNBINTEST s_aTests8[] = { BS3CPUINSTR2CMNBINTEST_ENTRIES_8(test) }; 605 static const BS3CPUINSTR2CMNBINTEST s_aTests16[] = { BS3CPUINSTR2CMNBINTEST_ENTRIES_16(test) }; 606 static const BS3CPUINSTR2CMNBINTEST s_aTests32[] = { BS3CPUINSTR2CMNBINTEST_ENTRIES_32(test) }; 607 #if ARCH_BITS == 64 608 static const BS3CPUINSTR2CMNBINTEST s_aTests64[] = { BS3CPUINSTR2CMNBINTEST_ENTRIES_64(test) }; 609 #endif 610 bs3CpuInstr2_CommonBinaryU8(bMode, s_aTests8, RT_ELEMENTS(s_aTests8), 0 /*fPassthruEfl*/, 611 g_aBs3CpuInstr2_test_TestDataU8, g_cBs3CpuInstr2_test_TestDataU8, false /*fCarryIn*/); 612 bs3CpuInstr2_CommonBinaryU16(bMode, s_aTests16, RT_ELEMENTS(s_aTests16), 0 /*fPassthruEfl*/, 613 g_aBs3CpuInstr2_test_TestDataU16, g_cBs3CpuInstr2_test_TestDataU16, false /*fCarryIn*/); 614 bs3CpuInstr2_CommonBinaryU32(bMode, s_aTests32, RT_ELEMENTS(s_aTests32), 0 /*fPassthruEfl*/, 615 g_aBs3CpuInstr2_test_TestDataU32, g_cBs3CpuInstr2_test_TestDataU32, false /*fCarryIn*/); 616 #if ARCH_BITS == 64 617 bs3CpuInstr2_CommonBinaryU64(bMode, s_aTests64, RT_ELEMENTS(s_aTests64), 0 /*fPassthruEfl*/, 618 g_aBs3CpuInstr2_test_TestDataU64, g_cBs3CpuInstr2_test_TestDataU64, false /*fCarryIn*/); 619 #endif 620 return 0; 621 } 622 623 624 BS3_DECL_FAR(uint8_t) BS3_CMN_NM(bs3CpuInstr2_add)(uint8_t bMode) 625 { 626 static const BS3CPUINSTR2CMNBINTEST s_aTests8[] = { BS3CPUINSTR2CMNBINTEST_ENTRIES_8(add) }; 627 static const BS3CPUINSTR2CMNBINTEST s_aTests16[] = { BS3CPUINSTR2CMNBINTEST_ENTRIES_16(add) }; 628 static const BS3CPUINSTR2CMNBINTEST s_aTests32[] = { BS3CPUINSTR2CMNBINTEST_ENTRIES_32(add) }; 629 #if ARCH_BITS == 64 630 static const BS3CPUINSTR2CMNBINTEST s_aTests64[] = { BS3CPUINSTR2CMNBINTEST_ENTRIES_64(add) }; 631 #endif 632 bs3CpuInstr2_CommonBinaryU8(bMode, s_aTests8, RT_ELEMENTS(s_aTests8), 0 /*fPassthruEfl*/, 633 g_aBs3CpuInstr2_add_TestDataU8, g_cBs3CpuInstr2_add_TestDataU8, false /*fCarryIn*/); 634 bs3CpuInstr2_CommonBinaryU16(bMode, s_aTests16, RT_ELEMENTS(s_aTests16), 0 /*fPassthruEfl*/, 635 g_aBs3CpuInstr2_add_TestDataU16, g_cBs3CpuInstr2_add_TestDataU16, false /*fCarryIn*/); 636 bs3CpuInstr2_CommonBinaryU32(bMode, s_aTests32, RT_ELEMENTS(s_aTests32), 0 /*fPassthruEfl*/, 637 g_aBs3CpuInstr2_add_TestDataU32, g_cBs3CpuInstr2_add_TestDataU32, false /*fCarryIn*/); 638 #if ARCH_BITS == 64 639 bs3CpuInstr2_CommonBinaryU64(bMode, s_aTests64, RT_ELEMENTS(s_aTests64), 0 /*fPassthruEfl*/, 640 g_aBs3CpuInstr2_add_TestDataU64, g_cBs3CpuInstr2_add_TestDataU64, false /*fCarryIn*/); 641 #endif 642 return 0; 643 } 644 645 646 BS3_DECL_FAR(uint8_t) BS3_CMN_NM(bs3CpuInstr2_adc)(uint8_t bMode) 647 { 648 static const BS3CPUINSTR2CMNBINTEST s_aTests8[] = { BS3CPUINSTR2CMNBINTEST_ENTRIES_8(adc) }; 649 static const BS3CPUINSTR2CMNBINTEST s_aTests16[] = { BS3CPUINSTR2CMNBINTEST_ENTRIES_16(adc) }; 650 static const BS3CPUINSTR2CMNBINTEST s_aTests32[] = { BS3CPUINSTR2CMNBINTEST_ENTRIES_32(adc) }; 651 #if ARCH_BITS == 64 652 static const BS3CPUINSTR2CMNBINTEST s_aTests64[] = { BS3CPUINSTR2CMNBINTEST_ENTRIES_64(adc) }; 653 #endif 654 bs3CpuInstr2_CommonBinaryU8(bMode, s_aTests8, RT_ELEMENTS(s_aTests8), 0 /*fPassthruEfl*/, 655 g_aBs3CpuInstr2_adc_TestDataU8, g_cBs3CpuInstr2_adc_TestDataU8, true /*fCarryIn*/); 656 bs3CpuInstr2_CommonBinaryU16(bMode, s_aTests16, RT_ELEMENTS(s_aTests16), 0 /*fPassthruEfl*/, 657 g_aBs3CpuInstr2_adc_TestDataU16, g_cBs3CpuInstr2_adc_TestDataU16, true /*fCarryIn*/); 658 bs3CpuInstr2_CommonBinaryU32(bMode, s_aTests32, RT_ELEMENTS(s_aTests32), 0 /*fPassthruEfl*/, 659 g_aBs3CpuInstr2_adc_TestDataU32, g_cBs3CpuInstr2_adc_TestDataU32, true /*fCarryIn*/); 660 #if ARCH_BITS == 64 661 bs3CpuInstr2_CommonBinaryU64(bMode, s_aTests64, RT_ELEMENTS(s_aTests64), 0 /*fPassthruEfl*/, 662 g_aBs3CpuInstr2_adc_TestDataU64, g_cBs3CpuInstr2_adc_TestDataU64, true /*fCarryIn*/); 663 #endif 664 return 0; 665 } 666 667 668 BS3_DECL_FAR(uint8_t) BS3_CMN_NM(bs3CpuInstr2_sub)(uint8_t bMode) 669 { 670 static const BS3CPUINSTR2CMNBINTEST s_aTests8[] = { BS3CPUINSTR2CMNBINTEST_ENTRIES_8(sub) }; 671 static const BS3CPUINSTR2CMNBINTEST s_aTests16[] = { BS3CPUINSTR2CMNBINTEST_ENTRIES_16(sub) }; 672 static const BS3CPUINSTR2CMNBINTEST s_aTests32[] = { BS3CPUINSTR2CMNBINTEST_ENTRIES_32(sub) }; 673 #if ARCH_BITS == 64 674 static const BS3CPUINSTR2CMNBINTEST s_aTests64[] = { BS3CPUINSTR2CMNBINTEST_ENTRIES_64(sub) }; 675 #endif 676 bs3CpuInstr2_CommonBinaryU8(bMode, s_aTests8, RT_ELEMENTS(s_aTests8), 0 /*fPassthruEfl*/, 677 g_aBs3CpuInstr2_sub_TestDataU8, g_cBs3CpuInstr2_sub_TestDataU8, false /*fCarryIn*/); 678 bs3CpuInstr2_CommonBinaryU16(bMode, s_aTests16, RT_ELEMENTS(s_aTests16), 0 /*fPassthruEfl*/, 679 g_aBs3CpuInstr2_sub_TestDataU16, g_cBs3CpuInstr2_sub_TestDataU16, false /*fCarryIn*/); 680 bs3CpuInstr2_CommonBinaryU32(bMode, s_aTests32, RT_ELEMENTS(s_aTests32), 0 /*fPassthruEfl*/, 681 g_aBs3CpuInstr2_sub_TestDataU32, g_cBs3CpuInstr2_sub_TestDataU32, false /*fCarryIn*/); 682 #if ARCH_BITS == 64 683 bs3CpuInstr2_CommonBinaryU64(bMode, s_aTests64, RT_ELEMENTS(s_aTests64), 0 /*fPassthruEfl*/, 684 g_aBs3CpuInstr2_sub_TestDataU64, g_cBs3CpuInstr2_sub_TestDataU64, false /*fCarryIn*/); 685 #endif 686 return 0; 687 } 688 689 690 BS3_DECL_FAR(uint8_t) BS3_CMN_NM(bs3CpuInstr2_sbb)(uint8_t bMode) 691 { 692 static const BS3CPUINSTR2CMNBINTEST s_aTests8[] = { BS3CPUINSTR2CMNBINTEST_ENTRIES_8(sbb) }; 693 static const BS3CPUINSTR2CMNBINTEST s_aTests16[] = { BS3CPUINSTR2CMNBINTEST_ENTRIES_16(sbb) }; 694 static const BS3CPUINSTR2CMNBINTEST s_aTests32[] = { BS3CPUINSTR2CMNBINTEST_ENTRIES_32(sbb) }; 695 #if ARCH_BITS == 64 696 static const BS3CPUINSTR2CMNBINTEST s_aTests64[] = { BS3CPUINSTR2CMNBINTEST_ENTRIES_64(sbb) }; 697 #endif 698 bs3CpuInstr2_CommonBinaryU8(bMode, s_aTests8, RT_ELEMENTS(s_aTests8), 0 /*fPassthruEfl*/, 699 g_aBs3CpuInstr2_sbb_TestDataU8, g_cBs3CpuInstr2_sbb_TestDataU8, true /*fCarryIn*/); 700 bs3CpuInstr2_CommonBinaryU16(bMode, s_aTests16, RT_ELEMENTS(s_aTests16), 0 /*fPassthruEfl*/, 701 g_aBs3CpuInstr2_sbb_TestDataU16, g_cBs3CpuInstr2_sbb_TestDataU16, true /*fCarryIn*/); 702 bs3CpuInstr2_CommonBinaryU32(bMode, s_aTests32, RT_ELEMENTS(s_aTests32), 0 /*fPassthruEfl*/, 703 g_aBs3CpuInstr2_sbb_TestDataU32, g_cBs3CpuInstr2_sbb_TestDataU32, true /*fCarryIn*/); 704 #if ARCH_BITS == 64 705 bs3CpuInstr2_CommonBinaryU64(bMode, s_aTests64, RT_ELEMENTS(s_aTests64), 0 /*fPassthruEfl*/, 706 g_aBs3CpuInstr2_sbb_TestDataU64, g_cBs3CpuInstr2_sbb_TestDataU64, true /*fCarryIn*/); 707 #endif 708 return 0; 709 } 710 711 712 BS3_DECL_FAR(uint8_t) BS3_CMN_NM(bs3CpuInstr2_cmp)(uint8_t bMode) 713 { 714 static const BS3CPUINSTR2CMNBINTEST s_aTests8[] = { BS3CPUINSTR2CMNBINTEST_ENTRIES_8(cmp) }; 715 static const BS3CPUINSTR2CMNBINTEST s_aTests16[] = { BS3CPUINSTR2CMNBINTEST_ENTRIES_16(cmp) }; 716 static const BS3CPUINSTR2CMNBINTEST s_aTests32[] = { BS3CPUINSTR2CMNBINTEST_ENTRIES_32(cmp) }; 717 #if ARCH_BITS == 64 718 static const BS3CPUINSTR2CMNBINTEST s_aTests64[] = { BS3CPUINSTR2CMNBINTEST_ENTRIES_64(cmp) }; 719 #endif 720 bs3CpuInstr2_CommonBinaryU8(bMode, s_aTests8, RT_ELEMENTS(s_aTests8), 0 /*fPassthruEfl*/, 721 g_aBs3CpuInstr2_cmp_TestDataU8, g_cBs3CpuInstr2_cmp_TestDataU8, false /*fCarryIn*/); 722 bs3CpuInstr2_CommonBinaryU16(bMode, s_aTests16, RT_ELEMENTS(s_aTests16), 0 /*fPassthruEfl*/, 723 g_aBs3CpuInstr2_cmp_TestDataU16, g_cBs3CpuInstr2_cmp_TestDataU16, false /*fCarryIn*/); 724 bs3CpuInstr2_CommonBinaryU32(bMode, s_aTests32, RT_ELEMENTS(s_aTests32), 0 /*fPassthruEfl*/, 725 g_aBs3CpuInstr2_cmp_TestDataU32, g_cBs3CpuInstr2_cmp_TestDataU32, false /*fCarryIn*/); 726 #if ARCH_BITS == 64 727 bs3CpuInstr2_CommonBinaryU64(bMode, s_aTests64, RT_ELEMENTS(s_aTests64), 0 /*fPassthruEfl*/, 728 g_aBs3CpuInstr2_cmp_TestDataU64, g_cBs3CpuInstr2_cmp_TestDataU64, false /*fCarryIn*/); 729 #endif 730 return 0; 731 } 732 733 734 #define BS3CPUINSTR2_BTx_PASSTHRU_EFL (X86_EFL_ZF | X86_EFL_PF | X86_EFL_AF | X86_EFL_SF | X86_EFL_OF) 735 736 BS3_DECL_FAR(uint8_t) BS3_CMN_NM(bs3CpuInstr2_bt)(uint8_t bMode) 737 { 738 static const BS3CPUINSTR2CMNBINTEST s_aTests16[] = { BS3CPUINSTR2CMNBINTEST_ENTRIES_16(bt) }; 739 static const BS3CPUINSTR2CMNBINTEST s_aTests32[] = { BS3CPUINSTR2CMNBINTEST_ENTRIES_32(bt) }; 740 #if ARCH_BITS == 64 741 static const BS3CPUINSTR2CMNBINTEST s_aTests64[] = { BS3CPUINSTR2CMNBINTEST_ENTRIES_64(bt) }; 742 #endif 743 bs3CpuInstr2_CommonBinaryU16(bMode, s_aTests16, RT_ELEMENTS(s_aTests16), BS3CPUINSTR2_BTx_PASSTHRU_EFL, 744 g_aBs3CpuInstr2_bt_TestDataU16, g_cBs3CpuInstr2_bt_TestDataU16, false /*fCarryIn*/); 745 bs3CpuInstr2_CommonBinaryU32(bMode, s_aTests32, RT_ELEMENTS(s_aTests32), BS3CPUINSTR2_BTx_PASSTHRU_EFL, 746 g_aBs3CpuInstr2_bt_TestDataU32, g_cBs3CpuInstr2_bt_TestDataU32, false /*fCarryIn*/); 747 #if ARCH_BITS == 64 748 bs3CpuInstr2_CommonBinaryU64(bMode, s_aTests64, RT_ELEMENTS(s_aTests64), BS3CPUINSTR2_BTx_PASSTHRU_EFL, 749 g_aBs3CpuInstr2_bt_TestDataU64, g_cBs3CpuInstr2_bt_TestDataU64, false /*fCarryIn*/); 750 #endif 751 return 0; 752 } 753 754 755 BS3_DECL_FAR(uint8_t) BS3_CMN_NM(bs3CpuInstr2_btc)(uint8_t bMode) 756 { 757 static const BS3CPUINSTR2CMNBINTEST s_aTests16[] = { BS3CPUINSTR2CMNBINTEST_ENTRIES_16(btc) }; 758 static const BS3CPUINSTR2CMNBINTEST s_aTests32[] = { BS3CPUINSTR2CMNBINTEST_ENTRIES_32(btc) }; 759 #if ARCH_BITS == 64 760 static const BS3CPUINSTR2CMNBINTEST s_aTests64[] = { BS3CPUINSTR2CMNBINTEST_ENTRIES_64(btc) }; 761 #endif 762 bs3CpuInstr2_CommonBinaryU16(bMode, s_aTests16, RT_ELEMENTS(s_aTests16), BS3CPUINSTR2_BTx_PASSTHRU_EFL, 763 g_aBs3CpuInstr2_btc_TestDataU16, g_cBs3CpuInstr2_btc_TestDataU16, false /*fCarryIn*/); 764 bs3CpuInstr2_CommonBinaryU32(bMode, s_aTests32, RT_ELEMENTS(s_aTests32), BS3CPUINSTR2_BTx_PASSTHRU_EFL, 765 g_aBs3CpuInstr2_btc_TestDataU32, g_cBs3CpuInstr2_btc_TestDataU32, false /*fCarryIn*/); 766 #if ARCH_BITS == 64 767 bs3CpuInstr2_CommonBinaryU64(bMode, s_aTests64, RT_ELEMENTS(s_aTests64), BS3CPUINSTR2_BTx_PASSTHRU_EFL, 768 g_aBs3CpuInstr2_btc_TestDataU64, g_cBs3CpuInstr2_btc_TestDataU64, false /*fCarryIn*/); 769 #endif 770 return 0; 771 } 772 773 774 BS3_DECL_FAR(uint8_t) BS3_CMN_NM(bs3CpuInstr2_btr)(uint8_t bMode) 775 { 776 static const BS3CPUINSTR2CMNBINTEST s_aTests16[] = { BS3CPUINSTR2CMNBINTEST_ENTRIES_16(btr) }; 777 static const BS3CPUINSTR2CMNBINTEST s_aTests32[] = { BS3CPUINSTR2CMNBINTEST_ENTRIES_32(btr) }; 778 #if ARCH_BITS == 64 779 static const BS3CPUINSTR2CMNBINTEST s_aTests64[] = { BS3CPUINSTR2CMNBINTEST_ENTRIES_64(btr) }; 780 #endif 781 bs3CpuInstr2_CommonBinaryU16(bMode, s_aTests16, RT_ELEMENTS(s_aTests16), BS3CPUINSTR2_BTx_PASSTHRU_EFL, 782 g_aBs3CpuInstr2_btr_TestDataU16, g_cBs3CpuInstr2_btr_TestDataU16, false /*fCarryIn*/); 783 bs3CpuInstr2_CommonBinaryU32(bMode, s_aTests32, RT_ELEMENTS(s_aTests32), BS3CPUINSTR2_BTx_PASSTHRU_EFL, 784 g_aBs3CpuInstr2_btr_TestDataU32, g_cBs3CpuInstr2_btr_TestDataU32, false /*fCarryIn*/); 785 #if ARCH_BITS == 64 786 bs3CpuInstr2_CommonBinaryU64(bMode, s_aTests64, RT_ELEMENTS(s_aTests64), BS3CPUINSTR2_BTx_PASSTHRU_EFL, 787 g_aBs3CpuInstr2_btr_TestDataU64, g_cBs3CpuInstr2_btr_TestDataU64, false /*fCarryIn*/); 788 #endif 789 return 0; 790 } 791 792 793 BS3_DECL_FAR(uint8_t) BS3_CMN_NM(bs3CpuInstr2_bts)(uint8_t bMode) 794 { 795 static const BS3CPUINSTR2CMNBINTEST s_aTests16[] = { BS3CPUINSTR2CMNBINTEST_ENTRIES_16(bts) }; 796 static const BS3CPUINSTR2CMNBINTEST s_aTests32[] = { BS3CPUINSTR2CMNBINTEST_ENTRIES_32(bts) }; 797 #if ARCH_BITS == 64 798 static const BS3CPUINSTR2CMNBINTEST s_aTests64[] = { BS3CPUINSTR2CMNBINTEST_ENTRIES_64(bts) }; 799 #endif 800 bs3CpuInstr2_CommonBinaryU16(bMode, s_aTests16, RT_ELEMENTS(s_aTests16), BS3CPUINSTR2_BTx_PASSTHRU_EFL, 801 g_aBs3CpuInstr2_bts_TestDataU16, g_cBs3CpuInstr2_bts_TestDataU16, false /*fCarryIn*/); 802 bs3CpuInstr2_CommonBinaryU32(bMode, s_aTests32, RT_ELEMENTS(s_aTests32), BS3CPUINSTR2_BTx_PASSTHRU_EFL, 803 g_aBs3CpuInstr2_bts_TestDataU32, g_cBs3CpuInstr2_bts_TestDataU32, false /*fCarryIn*/); 804 #if ARCH_BITS == 64 805 bs3CpuInstr2_CommonBinaryU64(bMode, s_aTests64, RT_ELEMENTS(s_aTests64), BS3CPUINSTR2_BTx_PASSTHRU_EFL, 806 g_aBs3CpuInstr2_bts_TestDataU64, g_cBs3CpuInstr2_bts_TestDataU64, false /*fCarryIn*/); 807 #endif 808 return 0; 809 } 810 811 812 813 /* 814 * Multiplication 815 */ 311 816 312 817 BS3_DECL_FAR(uint8_t) BS3_CMN_NM(bs3CpuInstr2_mul)(uint8_t bMode) … … 3074 3579 for (iValue = 0; iValue < cValues; iValue++) 3075 3580 { 3076 uint64_t const uExpectRax = fOkay ? paValues[iValue].uDstOut : paValues[iValue].uDstIn;3581 //uint64_t const uExpectRax = fOkay ? paValues[iValue].uDstOut : paValues[iValue].uDstIn; 3077 3582 uint64_t uMem, uMemExpect; 3078 3583 -
trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-instr-2-template.mac
r103584 r103602 51 51 ; ASSUMES the length is between the start of the function and the .again label. 52 52 ; 53 %ifndef BS3CPUINSTR2_PROC_BEGIN_CMN_DEFINED53 %ifndef BS3CPUINSTR2_PROC_BEGIN_CMN_DEFINED 54 54 %define BS3CPUINSTR2_PROC_BEGIN_CMN_DEFINED 55 %macro BS3CPUINSTR2_PROC_BEGIN_CMN 155 %macro BS3CPUINSTR2_PROC_BEGIN_CMN 1 56 56 align 8, db 0cch 57 57 db BS3_CMN_NM(%1).again - BS3_CMN_NM(%1) … … 61 61 62 62 63 ;; 64 ; For defining simple instruction test. 65 %ifndef BS3CPUINSTR2_EMIT_INSTR_UD2_DEFINED 66 %define BS3CPUINSTR2_EMIT_INSTR_UD2_DEFINED 67 %macro BS3CPUINSTR2_EMIT_INSTR_UD2 2+ 68 BS3CPUINSTR2_PROC_BEGIN_CMN %1 69 %2 70 .again: 71 ud2 72 jmp .again 73 BS3_PROC_END_CMN %1 74 %endmacro 75 %endif 76 77 %ifndef BS3CPUINSTR2_BINARY_OP_DEFINED 78 %define BS3CPUINSTR2_BINARY_OP_DEFINED 79 %macro BS3CPUINSTR2_BINARY_OP 2 80 %if %2 != 0 81 ; 8-bit 82 BS3CPUINSTR2_EMIT_INSTR_UD2 bs3CpuInstr2_ %+ %1 %+ _al %+ _dl, %1 al, dl 83 BS3CPUINSTR2_EMIT_INSTR_UD2 bs3CpuInstr2_ %+ %1 %+ _ch %+ _bh, %1 ch, bh 84 BS3CPUINSTR2_EMIT_INSTR_UD2 bs3CpuInstr2_ %+ %1 %+ _dl %+ _ah, %1 dl, ah 85 %ifdef TMPL_64BIT 86 BS3CPUINSTR2_EMIT_INSTR_UD2 bs3CpuInstr2_ %+ %1 %+ _sil %+ _dil, %1 sil, dil 87 BS3CPUINSTR2_EMIT_INSTR_UD2 bs3CpuInstr2_ %+ %1 %+ _r9b %+ _r8b, %1 r9b, r8b 88 BS3CPUINSTR2_EMIT_INSTR_UD2 bs3CpuInstr2_ %+ %1 %+ _al %+ _r13b, %1 al, r13b 89 %endif 90 %endif 91 ; 16-bit 92 BS3CPUINSTR2_EMIT_INSTR_UD2 bs3CpuInstr2_ %+ %1 %+ _di %+ _si, %1 di, si 93 BS3CPUINSTR2_EMIT_INSTR_UD2 bs3CpuInstr2_ %+ %1 %+ _cx %+ _bp, %1 cx, bp 94 %ifdef TMPL_64BIT 95 BS3CPUINSTR2_EMIT_INSTR_UD2 bs3CpuInstr2_ %+ %1 %+ _r8w %+ _cx, %1 r8w, cx 96 BS3CPUINSTR2_EMIT_INSTR_UD2 bs3CpuInstr2_ %+ %1 %+ _r15w %+ _r10w, %1 r15w, r10w 97 %endif 98 ; 32-bit 99 BS3CPUINSTR2_EMIT_INSTR_UD2 bs3CpuInstr2_ %+ %1 %+ _eax %+ _ebx, %1 eax, ebx 100 BS3CPUINSTR2_EMIT_INSTR_UD2 bs3CpuInstr2_ %+ %1 %+ _ecx %+ _ebp, %1 ecx, ebp 101 BS3CPUINSTR2_EMIT_INSTR_UD2 bs3CpuInstr2_ %+ %1 %+ _edx %+ _edi, %1 edx, edi 102 %ifdef TMPL_64BIT 103 BS3CPUINSTR2_EMIT_INSTR_UD2 bs3CpuInstr2_ %+ %1 %+ _eax %+ _r8d, %1 eax, r8d 104 BS3CPUINSTR2_EMIT_INSTR_UD2 bs3CpuInstr2_ %+ %1 %+ _r9d %+ _ecx, %1 r9d, ecx 105 BS3CPUINSTR2_EMIT_INSTR_UD2 bs3CpuInstr2_ %+ %1 %+ _r13d %+ _r14d, %1 r13d, r14d 106 %endif 107 ; 64-bit 108 %ifdef TMPL_64BIT 109 BS3CPUINSTR2_EMIT_INSTR_UD2 bs3CpuInstr2_ %+ %1 %+ _rax %+ _rbx, %1 rax, rbx 110 BS3CPUINSTR2_EMIT_INSTR_UD2 bs3CpuInstr2_ %+ %1 %+ _r8 %+ _rax, %1 r8, rax 111 BS3CPUINSTR2_EMIT_INSTR_UD2 bs3CpuInstr2_ %+ %1 %+ _rdx %+ _r10, %1 rdx, r10 112 %endif 113 %endmacro 114 %endif 115 116 63 117 ;********************************************************************************************************************************* 64 118 ;* External Symbols * … … 72 126 ; 73 127 %ifdef BS3_INSTANTIATING_CMN 128 129 BS3CPUINSTR2_BINARY_OP and, 1 130 BS3CPUINSTR2_BINARY_OP or, 1 131 BS3CPUINSTR2_BINARY_OP xor, 1 132 BS3CPUINSTR2_BINARY_OP test, 1 133 134 BS3CPUINSTR2_BINARY_OP add, 1 135 BS3CPUINSTR2_BINARY_OP adc, 1 136 BS3CPUINSTR2_BINARY_OP sub, 1 137 BS3CPUINSTR2_BINARY_OP sbb, 1 138 BS3CPUINSTR2_BINARY_OP cmp, 1 139 140 BS3CPUINSTR2_BINARY_OP bt, 0 141 BS3CPUINSTR2_BINARY_OP btc, 0 142 BS3CPUINSTR2_BINARY_OP btr, 0 143 BS3CPUINSTR2_BINARY_OP bts, 0 144 74 145 75 146 BS3_PROC_BEGIN_CMN bs3CpuInstr2_mul_xBX_ud2, BS3_PBC_NEAR -
trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-instr-2.c
r103584 r103602 45 45 * Internal Functions * 46 46 *********************************************************************************************************************************/ 47 BS3TESTMODE_PROTOTYPES_CMN(bs3CpuInstr2_and); 48 BS3TESTMODE_PROTOTYPES_CMN(bs3CpuInstr2_or); 49 BS3TESTMODE_PROTOTYPES_CMN(bs3CpuInstr2_xor); 50 BS3TESTMODE_PROTOTYPES_CMN(bs3CpuInstr2_test); 51 BS3TESTMODE_PROTOTYPES_CMN(bs3CpuInstr2_add); 52 BS3TESTMODE_PROTOTYPES_CMN(bs3CpuInstr2_adc); 53 BS3TESTMODE_PROTOTYPES_CMN(bs3CpuInstr2_sub); 54 BS3TESTMODE_PROTOTYPES_CMN(bs3CpuInstr2_sbb); 55 BS3TESTMODE_PROTOTYPES_CMN(bs3CpuInstr2_cmp); 56 BS3TESTMODE_PROTOTYPES_CMN(bs3CpuInstr2_bt); 57 BS3TESTMODE_PROTOTYPES_CMN(bs3CpuInstr2_btc); 58 BS3TESTMODE_PROTOTYPES_CMN(bs3CpuInstr2_btr); 59 BS3TESTMODE_PROTOTYPES_CMN(bs3CpuInstr2_bts); 47 60 BS3TESTMODE_PROTOTYPES_CMN(bs3CpuInstr2_mul); 48 61 BS3TESTMODE_PROTOTYPES_CMN(bs3CpuInstr2_imul); … … 81 94 static const BS3TESTMODEENTRY g_aModeTests[] = 82 95 { 96 #if 1 97 BS3TESTMODEENTRY_CMN("and", bs3CpuInstr2_and), 98 BS3TESTMODEENTRY_CMN("or", bs3CpuInstr2_or), 99 BS3TESTMODEENTRY_CMN("xor", bs3CpuInstr2_xor), 100 BS3TESTMODEENTRY_CMN("test", bs3CpuInstr2_test), 101 #endif 102 #if 1 103 BS3TESTMODEENTRY_CMN("add", bs3CpuInstr2_add), 104 BS3TESTMODEENTRY_CMN("adc", bs3CpuInstr2_adc), 105 BS3TESTMODEENTRY_CMN("sub", bs3CpuInstr2_sub), 106 BS3TESTMODEENTRY_CMN("sbb", bs3CpuInstr2_sbb), 107 BS3TESTMODEENTRY_CMN("cmp", bs3CpuInstr2_cmp), 108 #endif 109 #if 1 110 BS3TESTMODEENTRY_CMN("bt", bs3CpuInstr2_bt), 111 BS3TESTMODEENTRY_CMN("btc", bs3CpuInstr2_btc), 112 BS3TESTMODEENTRY_CMN("btr", bs3CpuInstr2_btr), 113 BS3TESTMODEENTRY_CMN("bts", bs3CpuInstr2_bts), 114 #endif 83 115 #if 1 84 116 BS3TESTMODEENTRY_CMN("mul", bs3CpuInstr2_mul), -
trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3kit.h
r103262 r103602 2643 2643 /** 32-bit view. */ 2644 2644 uint32_t au32[2]; 2645 /** 64-bit view. */ 2646 uint64_t au64[1]; 2645 2647 /** Unsigned integer, depending on compiler context. 2646 2648 * This generally follows ARCH_BITS. */
Note:
See TracChangeset
for help on using the changeset viewer.