Changeset 108654 in vbox for trunk/src/VBox/Runtime/testcase
- Timestamp:
- Mar 20, 2025 2:58:45 PM (6 weeks ago)
- svn:sync-xref-src-repo-rev:
- 168067
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Runtime/testcase/tstRTInlineAsm.cpp
r106061 r108654 69 69 #include <iprt/test.h> 70 70 #include <iprt/time.h> 71 #include <iprt/system.h> 71 72 72 73 … … 2499 2500 RTTestSub(hTest, "ASMMemFirstMismatchingU8"); 2500 2501 2501 uint8_t *pbPage1 = (uint8_t *)RTTestGuardedAllocHead(hTest, PAGE_SIZE); 2502 uint8_t *pbPage2 = (uint8_t *)RTTestGuardedAllocTail(hTest, PAGE_SIZE); 2502 size_t const cbPageSize = RTSystemGetPageSize(); 2503 uint8_t *pbPage1 = (uint8_t *)RTTestGuardedAllocHead(hTest, cbPageSize); 2504 uint8_t *pbPage2 = (uint8_t *)RTTestGuardedAllocTail(hTest, cbPageSize); 2503 2505 RTTESTI_CHECK_RETV(pbPage1 && pbPage2); 2504 2506 2505 memset(pbPage1, 0, PAGE_SIZE);2506 memset(pbPage2, 0, PAGE_SIZE);2507 RTTESTI_CHECK(ASMMemFirstMismatchingU8(pbPage1, PAGE_SIZE, 0) == NULL);2508 RTTESTI_CHECK(ASMMemFirstMismatchingU8(pbPage2, PAGE_SIZE, 0) == NULL);2509 RTTESTI_CHECK(ASMMemFirstMismatchingU8(pbPage1, PAGE_SIZE, 1) == pbPage1);2510 RTTESTI_CHECK(ASMMemFirstMismatchingU8(pbPage2, PAGE_SIZE, 1) == pbPage2);2511 RTTESTI_CHECK(ASMMemFirstMismatchingU8(pbPage1, PAGE_SIZE, 0x87) == pbPage1);2512 RTTESTI_CHECK(ASMMemFirstMismatchingU8(pbPage2, PAGE_SIZE, 0x87) == pbPage2);2513 RTTESTI_CHECK(ASMMemIsZero(pbPage1, PAGE_SIZE));2514 RTTESTI_CHECK(ASMMemIsZero(pbPage2, PAGE_SIZE));2515 RTTESTI_CHECK(ASMMemIsAllU8(pbPage1, PAGE_SIZE, 0));2516 RTTESTI_CHECK(ASMMemIsAllU8(pbPage2, PAGE_SIZE, 0));2517 RTTESTI_CHECK(!ASMMemIsAllU8(pbPage1, PAGE_SIZE, 0x34));2518 RTTESTI_CHECK(!ASMMemIsAllU8(pbPage2, PAGE_SIZE, 0x88));2507 memset(pbPage1, 0, cbPageSize); 2508 memset(pbPage2, 0, cbPageSize); 2509 RTTESTI_CHECK(ASMMemFirstMismatchingU8(pbPage1, cbPageSize, 0) == NULL); 2510 RTTESTI_CHECK(ASMMemFirstMismatchingU8(pbPage2, cbPageSize, 0) == NULL); 2511 RTTESTI_CHECK(ASMMemFirstMismatchingU8(pbPage1, cbPageSize, 1) == pbPage1); 2512 RTTESTI_CHECK(ASMMemFirstMismatchingU8(pbPage2, cbPageSize, 1) == pbPage2); 2513 RTTESTI_CHECK(ASMMemFirstMismatchingU8(pbPage1, cbPageSize, 0x87) == pbPage1); 2514 RTTESTI_CHECK(ASMMemFirstMismatchingU8(pbPage2, cbPageSize, 0x87) == pbPage2); 2515 RTTESTI_CHECK(ASMMemIsZero(pbPage1, cbPageSize)); 2516 RTTESTI_CHECK(ASMMemIsZero(pbPage2, cbPageSize)); 2517 RTTESTI_CHECK(ASMMemIsAllU8(pbPage1, cbPageSize, 0)); 2518 RTTESTI_CHECK(ASMMemIsAllU8(pbPage2, cbPageSize, 0)); 2519 RTTESTI_CHECK(!ASMMemIsAllU8(pbPage1, cbPageSize, 0x34)); 2520 RTTESTI_CHECK(!ASMMemIsAllU8(pbPage2, cbPageSize, 0x88)); 2519 2521 unsigned cbSub = 32; 2520 2522 while (cbSub-- > 0) 2521 2523 { 2522 RTTESTI_CHECK(ASMMemFirstMismatchingU8(&pbPage1[ PAGE_SIZE- cbSub], cbSub, 0) == NULL);2523 RTTESTI_CHECK(ASMMemFirstMismatchingU8(&pbPage2[ PAGE_SIZE- cbSub], cbSub, 0) == NULL);2524 RTTESTI_CHECK(ASMMemFirstMismatchingU8(&pbPage1[cbPageSize - cbSub], cbSub, 0) == NULL); 2525 RTTESTI_CHECK(ASMMemFirstMismatchingU8(&pbPage2[cbPageSize - cbSub], cbSub, 0) == NULL); 2524 2526 RTTESTI_CHECK(ASMMemFirstMismatchingU8(pbPage1, cbSub, 0) == NULL); 2525 2527 RTTESTI_CHECK(ASMMemFirstMismatchingU8(pbPage2, cbSub, 0) == NULL); 2526 2528 2527 RTTESTI_CHECK(ASMMemFirstMismatchingU8(&pbPage1[ PAGE_SIZE - cbSub], cbSub, 0x34) == &pbPage1[PAGE_SIZE- cbSub] || !cbSub);2528 RTTESTI_CHECK(ASMMemFirstMismatchingU8(&pbPage2[ PAGE_SIZE - cbSub], cbSub, 0x99) == &pbPage2[PAGE_SIZE- cbSub] || !cbSub);2529 RTTESTI_CHECK(ASMMemFirstMismatchingU8(&pbPage1[cbPageSize - cbSub], cbSub, 0x34) == &pbPage1[cbPageSize - cbSub] || !cbSub); 2530 RTTESTI_CHECK(ASMMemFirstMismatchingU8(&pbPage2[cbPageSize - cbSub], cbSub, 0x99) == &pbPage2[cbPageSize - cbSub] || !cbSub); 2529 2531 RTTESTI_CHECK(ASMMemFirstMismatchingU8(pbPage1, cbSub, 0x42) == pbPage1 || !cbSub); 2530 2532 RTTESTI_CHECK(ASMMemFirstMismatchingU8(pbPage2, cbSub, 0x88) == pbPage2 || !cbSub); 2531 2533 } 2532 2534 2533 memset(pbPage1, 0xff, PAGE_SIZE);2534 memset(pbPage2, 0xff, PAGE_SIZE);2535 RTTESTI_CHECK(ASMMemFirstMismatchingU8(pbPage1, PAGE_SIZE, 0xff) == NULL);2536 RTTESTI_CHECK(ASMMemFirstMismatchingU8(pbPage2, PAGE_SIZE, 0xff) == NULL);2537 RTTESTI_CHECK(ASMMemFirstMismatchingU8(pbPage1, PAGE_SIZE, 0xfe) == pbPage1);2538 RTTESTI_CHECK(ASMMemFirstMismatchingU8(pbPage2, PAGE_SIZE, 0xfe) == pbPage2);2539 RTTESTI_CHECK(!ASMMemIsZero(pbPage1, PAGE_SIZE));2540 RTTESTI_CHECK(!ASMMemIsZero(pbPage2, PAGE_SIZE));2541 RTTESTI_CHECK(ASMMemIsAllU8(pbPage1, PAGE_SIZE, 0xff));2542 RTTESTI_CHECK(ASMMemIsAllU8(pbPage2, PAGE_SIZE, 0xff));2543 RTTESTI_CHECK(!ASMMemIsAllU8(pbPage1, PAGE_SIZE, 0));2544 RTTESTI_CHECK(!ASMMemIsAllU8(pbPage2, PAGE_SIZE, 0));2535 memset(pbPage1, 0xff, cbPageSize); 2536 memset(pbPage2, 0xff, cbPageSize); 2537 RTTESTI_CHECK(ASMMemFirstMismatchingU8(pbPage1, cbPageSize, 0xff) == NULL); 2538 RTTESTI_CHECK(ASMMemFirstMismatchingU8(pbPage2, cbPageSize, 0xff) == NULL); 2539 RTTESTI_CHECK(ASMMemFirstMismatchingU8(pbPage1, cbPageSize, 0xfe) == pbPage1); 2540 RTTESTI_CHECK(ASMMemFirstMismatchingU8(pbPage2, cbPageSize, 0xfe) == pbPage2); 2541 RTTESTI_CHECK(!ASMMemIsZero(pbPage1, cbPageSize)); 2542 RTTESTI_CHECK(!ASMMemIsZero(pbPage2, cbPageSize)); 2543 RTTESTI_CHECK(ASMMemIsAllU8(pbPage1, cbPageSize, 0xff)); 2544 RTTESTI_CHECK(ASMMemIsAllU8(pbPage2, cbPageSize, 0xff)); 2545 RTTESTI_CHECK(!ASMMemIsAllU8(pbPage1, cbPageSize, 0)); 2546 RTTESTI_CHECK(!ASMMemIsAllU8(pbPage2, cbPageSize, 0)); 2545 2547 cbSub = 32; 2546 2548 while (cbSub-- > 0) 2547 2549 { 2548 RTTESTI_CHECK(ASMMemFirstMismatchingU8(&pbPage1[ PAGE_SIZE- cbSub], cbSub, 0xff) == NULL);2549 RTTESTI_CHECK(ASMMemFirstMismatchingU8(&pbPage2[ PAGE_SIZE- cbSub], cbSub, 0xff) == NULL);2550 RTTESTI_CHECK(ASMMemFirstMismatchingU8(&pbPage1[cbPageSize - cbSub], cbSub, 0xff) == NULL); 2551 RTTESTI_CHECK(ASMMemFirstMismatchingU8(&pbPage2[cbPageSize - cbSub], cbSub, 0xff) == NULL); 2550 2552 RTTESTI_CHECK(ASMMemFirstMismatchingU8(pbPage1, cbSub, 0xff) == NULL); 2551 2553 RTTESTI_CHECK(ASMMemFirstMismatchingU8(pbPage2, cbSub, 0xff) == NULL); 2552 2554 2553 RTTESTI_CHECK(ASMMemFirstMismatchingU8(&pbPage1[ PAGE_SIZE - cbSub], cbSub, 0xfe) == &pbPage1[PAGE_SIZE- cbSub] || !cbSub);2554 RTTESTI_CHECK(ASMMemFirstMismatchingU8(&pbPage2[ PAGE_SIZE - cbSub], cbSub, 0xfe) == &pbPage2[PAGE_SIZE- cbSub] || !cbSub);2555 RTTESTI_CHECK(ASMMemFirstMismatchingU8(&pbPage1[cbPageSize - cbSub], cbSub, 0xfe) == &pbPage1[cbPageSize - cbSub] || !cbSub); 2556 RTTESTI_CHECK(ASMMemFirstMismatchingU8(&pbPage2[cbPageSize - cbSub], cbSub, 0xfe) == &pbPage2[cbPageSize - cbSub] || !cbSub); 2555 2557 RTTESTI_CHECK(ASMMemFirstMismatchingU8(pbPage1, cbSub, 0xfe) == pbPage1 || !cbSub); 2556 2558 RTTESTI_CHECK(ASMMemFirstMismatchingU8(pbPage2, cbSub, 0xfe) == pbPage2 || !cbSub); … … 2565 2567 size_t const cbBuf = 128; 2566 2568 uint8_t *pbBuf1 = pbPage1; 2567 uint8_t *pbBuf2 = &pbPage2[ PAGE_SIZE- cbBuf]; /* Put it up against the tail guard */2568 memset(pbPage1, (uint8_t)~bFiller1, PAGE_SIZE);2569 memset(pbPage2, (uint8_t)~bFiller2, PAGE_SIZE);2569 uint8_t *pbBuf2 = &pbPage2[cbPageSize - cbBuf]; /* Put it up against the tail guard */ 2570 memset(pbPage1, (uint8_t)~bFiller1, cbPageSize); 2571 memset(pbPage2, (uint8_t)~bFiller2, cbPageSize); 2570 2572 memset(pbBuf1, bFiller1, cbBuf); 2571 2573 memset(pbBuf2, bFiller2, cbBuf); … … 2583 2585 size_t const offEnd = offStart + cb; 2584 2586 uint8_t bSaved1, bSaved2; 2585 if (offEnd < PAGE_SIZE)2587 if (offEnd < cbPageSize) 2586 2588 { 2587 2589 bSaved1 = pbBuf1[offEnd]; … … 2601 2603 RTTESTI_CHECK(offNonZero - offStart < cb ? pbRet == &pbBuf2[offNonZero] : pbRet == NULL); 2602 2604 2603 if (offEnd < PAGE_SIZE)2605 if (offEnd < cbPageSize) 2604 2606 { 2605 2607 pbBuf1[offEnd] = bSaved1; … … 2649 2651 { 2650 2652 uint64_t u64Magic1; 2651 uint8_t abPage[ PAGE_SIZE- 32];2653 uint8_t abPage[_4K - 32]; 2652 2654 uint64_t u64Magic2; 2653 2655 } Buf1, Buf2, Buf3; … … 2713 2715 { 2714 2716 uint64_t u64Magic1; 2715 uint32_t au32Page[ PAGE_SIZE/ 4];2717 uint32_t au32Page[_4K / 4]; 2716 2718 uint64_t u64Magic2; 2717 2719 } Buf1; … … 2719 2721 { 2720 2722 uint64_t u64Magic1; 2721 uint32_t au32Page[( PAGE_SIZE/ 4) - 3];2723 uint32_t au32Page[(_4K / 4) - 3]; 2722 2724 uint64_t u64Magic2; 2723 2725 } Buf2; … … 2725 2727 { 2726 2728 uint64_t u64Magic1; 2727 uint32_t au32Page[( PAGE_SIZE/ 4) - 1];2729 uint32_t au32Page[(_4K / 4) - 1]; 2728 2730 uint64_t u64Magic2; 2729 2731 } Buf3; … … 2769 2771 RTTESTI_CHECK(ASMProbeReadByte(&b) == 42); 2770 2772 2773 size_t const cbPageSize = RTSystemGetPageSize(); 2771 2774 for (uint32_t cPages = 1; cPages < 16; cPages++) 2772 2775 { 2773 uint8_t *pbBuf1 = (uint8_t *)RTTestGuardedAllocHead(hTest, cPages * PAGE_SIZE);2774 uint8_t *pbBuf2 = (uint8_t *)RTTestGuardedAllocTail(hTest, cPages * PAGE_SIZE);2776 uint8_t *pbBuf1 = (uint8_t *)RTTestGuardedAllocHead(hTest, cPages * cbPageSize); 2777 uint8_t *pbBuf2 = (uint8_t *)RTTestGuardedAllocTail(hTest, cPages * cbPageSize); 2775 2778 RTTESTI_CHECK_RETV(pbBuf1 && pbBuf2); 2776 2779 2777 memset(pbBuf1, 0xf6, cPages * PAGE_SIZE);2778 memset(pbBuf2, 0x42, cPages * PAGE_SIZE);2779 2780 RTTESTI_CHECK(ASMProbeReadByte(&pbBuf1[cPages * PAGE_SIZE- 1]) == 0xf6);2781 RTTESTI_CHECK(ASMProbeReadByte(&pbBuf2[cPages * PAGE_SIZE- 1]) == 0x42);2780 memset(pbBuf1, 0xf6, cPages * cbPageSize); 2781 memset(pbBuf2, 0x42, cPages * cbPageSize); 2782 2783 RTTESTI_CHECK(ASMProbeReadByte(&pbBuf1[cPages * cbPageSize - 1]) == 0xf6); 2784 RTTESTI_CHECK(ASMProbeReadByte(&pbBuf2[cPages * cbPageSize - 1]) == 0x42); 2782 2785 RTTESTI_CHECK(ASMProbeReadByte(&pbBuf1[0]) == 0xf6); 2783 2786 RTTESTI_CHECK(ASMProbeReadByte(&pbBuf2[0]) == 0x42);
Note:
See TracChangeset
for help on using the changeset viewer.