VirtualBox

Changeset 59747 in vbox for trunk/src/VBox/Runtime/testcase


Ignore:
Timestamp:
Feb 19, 2016 11:18:18 PM (9 years ago)
Author:
vboxsync
Message:

iprt/asm.h: Cleaned up the ASMMemIsAll8/U32 mess and implmeneted the former in assembly. (Found inverted usage due to bad naming in copyUtf8Block, but it is fortunately an unused method.) Replaces the complicated ASMBitFirstSet based scanning in RTSgBufIsZero with a simple call to the new ASMMemIsZero function.

Location:
trunk/src/VBox/Runtime/testcase
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Runtime/testcase/tstRTInlineAsm.cpp

    r59527 r59747  
    4747# include <iprt/time.h>
    4848#endif
     49#include <iprt/rand.h>
    4950#include <iprt/stream.h>
    5051#include <iprt/string.h>
     
    13221323        RTTESTI_CHECK(!ASMMemIsZeroPage(pvPage2));
    13231324        ((uint8_t *)pvPage2)[off] = 0;
     1325    }
     1326
     1327    RTTestSubDone(hTest);
     1328}
     1329
     1330
     1331void tstASMMemFirstMismatchingU8(RTTEST hTest)
     1332{
     1333    RTTestSub(hTest, "ASMMemFirstMismatchingU8");
     1334
     1335    uint8_t *pbPage1 = (uint8_t *)RTTestGuardedAllocHead(hTest, PAGE_SIZE);
     1336    uint8_t *pbPage2 = (uint8_t *)RTTestGuardedAllocTail(hTest, PAGE_SIZE);
     1337    RTTESTI_CHECK_RETV(pbPage1 && pbPage2);
     1338
     1339    memset(pbPage1, 0, PAGE_SIZE);
     1340    memset(pbPage2, 0, PAGE_SIZE);
     1341    RTTESTI_CHECK(ASMMemFirstMismatchingU8(pbPage1, PAGE_SIZE, 0) == NULL);
     1342    RTTESTI_CHECK(ASMMemFirstMismatchingU8(pbPage2, PAGE_SIZE, 0) == NULL);
     1343    RTTESTI_CHECK(ASMMemFirstMismatchingU8(pbPage1, PAGE_SIZE, 1) == pbPage1);
     1344    RTTESTI_CHECK(ASMMemFirstMismatchingU8(pbPage2, PAGE_SIZE, 1) == pbPage2);
     1345    RTTESTI_CHECK(ASMMemFirstMismatchingU8(pbPage1, PAGE_SIZE, 0x87) == pbPage1);
     1346    RTTESTI_CHECK(ASMMemFirstMismatchingU8(pbPage2, PAGE_SIZE, 0x87) == pbPage2);
     1347    RTTESTI_CHECK(ASMMemIsZero(pbPage1, PAGE_SIZE));
     1348    RTTESTI_CHECK(ASMMemIsZero(pbPage2, PAGE_SIZE));
     1349    RTTESTI_CHECK(ASMMemIsAllU8(pbPage1, PAGE_SIZE, 0));
     1350    RTTESTI_CHECK(ASMMemIsAllU8(pbPage2, PAGE_SIZE, 0));
     1351    RTTESTI_CHECK(!ASMMemIsAllU8(pbPage1, PAGE_SIZE, 0x34));
     1352    RTTESTI_CHECK(!ASMMemIsAllU8(pbPage2, PAGE_SIZE, 0x88));
     1353    unsigned cbSub = 32;
     1354    while (cbSub-- > 0)
     1355    {
     1356        RTTESTI_CHECK(ASMMemFirstMismatchingU8(&pbPage1[PAGE_SIZE - cbSub], cbSub, 0) == NULL);
     1357        RTTESTI_CHECK(ASMMemFirstMismatchingU8(&pbPage2[PAGE_SIZE - cbSub], cbSub, 0) == NULL);
     1358        RTTESTI_CHECK(ASMMemFirstMismatchingU8(pbPage1, cbSub, 0) == NULL);
     1359        RTTESTI_CHECK(ASMMemFirstMismatchingU8(pbPage2, cbSub, 0) == NULL);
     1360
     1361        RTTESTI_CHECK(ASMMemFirstMismatchingU8(&pbPage1[PAGE_SIZE - cbSub], cbSub, 0x34) == &pbPage1[PAGE_SIZE - cbSub] || !cbSub);
     1362        RTTESTI_CHECK(ASMMemFirstMismatchingU8(&pbPage2[PAGE_SIZE - cbSub], cbSub, 0x99) == &pbPage2[PAGE_SIZE - cbSub] || !cbSub);
     1363        RTTESTI_CHECK(ASMMemFirstMismatchingU8(pbPage1, cbSub, 0x42) == pbPage1 || !cbSub);
     1364        RTTESTI_CHECK(ASMMemFirstMismatchingU8(pbPage2, cbSub, 0x88) == pbPage2 || !cbSub);
     1365    }
     1366
     1367    memset(pbPage1, 0xff, PAGE_SIZE);
     1368    memset(pbPage2, 0xff, PAGE_SIZE);
     1369    RTTESTI_CHECK(ASMMemFirstMismatchingU8(pbPage1, PAGE_SIZE, 0xff) == NULL);
     1370    RTTESTI_CHECK(ASMMemFirstMismatchingU8(pbPage2, PAGE_SIZE, 0xff) == NULL);
     1371    RTTESTI_CHECK(ASMMemFirstMismatchingU8(pbPage1, PAGE_SIZE, 0xfe) == pbPage1);
     1372    RTTESTI_CHECK(ASMMemFirstMismatchingU8(pbPage2, PAGE_SIZE, 0xfe) == pbPage2);
     1373    RTTESTI_CHECK(!ASMMemIsZero(pbPage1, PAGE_SIZE));
     1374    RTTESTI_CHECK(!ASMMemIsZero(pbPage2, PAGE_SIZE));
     1375    RTTESTI_CHECK(ASMMemIsAllU8(pbPage1, PAGE_SIZE, 0xff));
     1376    RTTESTI_CHECK(ASMMemIsAllU8(pbPage2, PAGE_SIZE, 0xff));
     1377    RTTESTI_CHECK(!ASMMemIsAllU8(pbPage1, PAGE_SIZE, 0));
     1378    RTTESTI_CHECK(!ASMMemIsAllU8(pbPage2, PAGE_SIZE, 0));
     1379    cbSub = 32;
     1380    while (cbSub-- > 0)
     1381    {
     1382        RTTESTI_CHECK(ASMMemFirstMismatchingU8(&pbPage1[PAGE_SIZE - cbSub], cbSub, 0xff) == NULL);
     1383        RTTESTI_CHECK(ASMMemFirstMismatchingU8(&pbPage2[PAGE_SIZE - cbSub], cbSub, 0xff) == NULL);
     1384        RTTESTI_CHECK(ASMMemFirstMismatchingU8(pbPage1, cbSub, 0xff) == NULL);
     1385        RTTESTI_CHECK(ASMMemFirstMismatchingU8(pbPage2, cbSub, 0xff) == NULL);
     1386
     1387        RTTESTI_CHECK(ASMMemFirstMismatchingU8(&pbPage1[PAGE_SIZE - cbSub], cbSub, 0xfe) == &pbPage1[PAGE_SIZE - cbSub] || !cbSub);
     1388        RTTESTI_CHECK(ASMMemFirstMismatchingU8(&pbPage2[PAGE_SIZE - cbSub], cbSub, 0xfe) == &pbPage2[PAGE_SIZE - cbSub] || !cbSub);
     1389        RTTESTI_CHECK(ASMMemFirstMismatchingU8(pbPage1, cbSub, 0xfe) == pbPage1 || !cbSub);
     1390        RTTESTI_CHECK(ASMMemFirstMismatchingU8(pbPage2, cbSub, 0xfe) == pbPage2 || !cbSub);
     1391    }
     1392
     1393
     1394    /*
     1395     * Various alignments and sizes.
     1396     */
     1397    uint8_t const  bFiller1 = 0x00;
     1398    uint8_t const  bFiller2 = 0xf6;
     1399    size_t const   cbBuf    = 128;
     1400    uint8_t       *pbBuf1   = pbPage1;
     1401    uint8_t       *pbBuf2   = &pbPage2[PAGE_SIZE - cbBuf]; /* Put it up against the tail guard */
     1402    memset(pbPage1, ~bFiller1, PAGE_SIZE);
     1403    memset(pbPage2, ~bFiller2, PAGE_SIZE);
     1404    memset(pbBuf1, bFiller1, cbBuf);
     1405    memset(pbBuf2, bFiller2, cbBuf);
     1406    for (size_t offNonZero = 0; offNonZero < cbBuf; offNonZero++)
     1407    {
     1408        uint8_t bRand = (uint8_t)RTRandU32();
     1409        pbBuf1[offNonZero] = bRand | 1;
     1410        pbBuf2[offNonZero] = (0x80 | bRand) ^ 0xf6;
     1411
     1412        for (size_t offStart = 0; offStart < 32; offStart++)
     1413        {
     1414            size_t const  cbMax = cbBuf - offStart;
     1415            for (size_t cb = 0; cb < cbMax; cb++)
     1416            {
     1417                size_t const offEnd = offStart + cb;
     1418                uint8_t bSaved1, bSaved2;
     1419                if (offEnd < PAGE_SIZE)
     1420                {
     1421                    bSaved1 = pbBuf1[offEnd];
     1422                    bSaved2 = pbBuf2[offEnd];
     1423                    pbBuf1[offEnd] = 0xff;
     1424                    pbBuf2[offEnd] = 0xff;
     1425                }
     1426
     1427                uint8_t *pbRet = (uint8_t *)ASMMemFirstMismatchingU8(pbBuf1 + offStart, cb, bFiller1);
     1428                RTTESTI_CHECK(offNonZero - offStart < cb ? pbRet == &pbBuf1[offNonZero] : pbRet == NULL);
     1429
     1430                pbRet = (uint8_t *)ASMMemFirstMismatchingU8(pbBuf2 + offStart, cb, bFiller2);
     1431                if (!(offNonZero - offStart < cb ? pbRet == &pbBuf2[offNonZero] : pbRet == NULL))
     1432                    __debugbreak();
     1433                RTTESTI_CHECK(offNonZero - offStart < cb ? pbRet == &pbBuf2[offNonZero] : pbRet == NULL);
     1434
     1435                if (offEnd < PAGE_SIZE)
     1436                {
     1437                    pbBuf1[offEnd] = bSaved1;
     1438                    pbBuf2[offEnd] = bSaved2;
     1439                }
     1440            }
     1441        }
     1442
     1443        pbBuf1[offNonZero] = 0;
     1444        pbBuf2[offNonZero] = 0xf6;
    13241445    }
    13251446
     
    17911912    tstASMMemZeroPage();
    17921913    tstASMMemIsZeroPage(g_hTest);
     1914    tstASMMemFirstMismatchingU8(g_hTest);
    17931915    tstASMMemZero32();
    17941916    tstASMMemFill32();
  • trunk/src/VBox/Runtime/testcase/tstRTMemCache.cpp

    r57358 r59747  
    133133{
    134134    RTTESTI_CHECK(hMemCache == g_hMemCache);
    135     RTTESTI_CHECK(ASMMemIsAll8(pvObj, 256, 0) == NULL);
     135    RTTESTI_CHECK(ASMMemIsZero(pvObj, 256));
    136136
    137137    if (*(bool *)pvUser)
  • trunk/src/VBox/Runtime/testcase/tstRTMemPool.cpp

    r57358 r59747  
    6868    {
    6969        RTTESTI_CHECK_RETV(pv = RTMemPoolAllocZ(hMemPool, 1024));
    70         RTTESTI_CHECK(ASMMemIsAllU32(pv, 1024, 0) == NULL);
     70        RTTESTI_CHECK(ASMMemFirstMismatchingU32(pv, 1024, 0) == NULL);
    7171        memset(pv, 'a', 1024);
    7272        RTTESTI_CHECK_RETV(RTMemPoolRefCount(pv) == 1);
     
    8888        RTTESTI_CHECK_RETV(pv = RTMemPoolDupEx(hMemPool, szTest, sizeof(szTest), cb));
    8989        RTTESTI_CHECK(memcmp(pv, szTest, sizeof(szTest)) == 0);
    90         RTTESTI_CHECK(ASMMemIsAll8((uint8_t *)pv + sizeof(szTest), cb, 0) == NULL);
     90        RTTESTI_CHECK(ASMMemIsZero((uint8_t *)pv + sizeof(szTest), cb));
    9191        memset(pv, 'b', sizeof(szTest) + cb);
    9292        RTTESTI_CHECK_RETV(RTMemPoolRefCount(pv) == 1);
     
    118118        RTTESTI_CHECK(RTMemPoolRefCount(pv) == 1);
    119119        memset(pv, 'a', i);
    120         RTTESTI_CHECK_MSG_RETV((pv2 = ASMMemIsAll8(pv, i, 'a')) == NULL, ("i=%#x pv=%p off=%#x\n", i, pv, (uintptr_t)pv2 - (uintptr_t)pv));
     120        RTTESTI_CHECK_MSG_RETV((pv2 = ASMMemFirstMismatchingU8(pv, i, 'a')) == NULL, ("i=%#x pv=%p off=%#x\n", i, pv,(uintptr_t)pv2 - (uintptr_t)pv));
    121121        RTTESTI_CHECK(RTMemPoolRetain(pv) == 2);
    122122        RTTESTI_CHECK(RTMemPoolRefCount(pv) == 2);
     
    125125        RTTESTI_CHECK(RTMemPoolRetain(pv) == 4);
    126126        RTTESTI_CHECK(RTMemPoolRefCount(pv) == 4);
    127         RTTESTI_CHECK_MSG_RETV((pv2 = ASMMemIsAll8(pv, i, 'a')) == NULL, ("i=%#x pv=%p off=%#x\n", i, pv, (uintptr_t)pv2 - (uintptr_t)pv));
     127        RTTESTI_CHECK_MSG_RETV((pv2 = ASMMemFirstMismatchingU8(pv, i, 'a')) == NULL, ("i=%#x pv=%p off=%#x\n", i, pv, (uintptr_t)pv2 - (uintptr_t)pv));
    128128        RTTESTI_CHECK(RTMemPoolRelease(hMemPool, pv) == 3);
    129129        RTTESTI_CHECK(RTMemPoolRefCount(pv) == 3);
    130         RTTESTI_CHECK_MSG_RETV((pv2 = ASMMemIsAll8(pv, i, 'a')) == NULL, ("i=%#x pv=%p off=%#x\n", i, pv, (uintptr_t)pv2 - (uintptr_t)pv));
     130        RTTESTI_CHECK_MSG_RETV((pv2 = ASMMemFirstMismatchingU8(pv, i, 'a')) == NULL, ("i=%#x pv=%p off=%#x\n", i, pv, (uintptr_t)pv2 - (uintptr_t)pv));
    131131        RTTESTI_CHECK(RTMemPoolRetain(pv) == 4);
    132132        RTTESTI_CHECK(RTMemPoolRefCount(pv) == 4);
     
    137137        RTTESTI_CHECK(RTMemPoolRelease(NIL_RTMEMPOOL, pv) == 5);
    138138        RTTESTI_CHECK(RTMemPoolRelease(NIL_RTMEMPOOL, pv) == 4);
    139         RTTESTI_CHECK_MSG_RETV((pv2 = ASMMemIsAll8(pv, i, 'a')) == NULL, ("i=%#x pv=%p off=%#x\n", i, pv, (uintptr_t)pv2 - (uintptr_t)pv));
     139        RTTESTI_CHECK_MSG_RETV((pv2 = ASMMemFirstMismatchingU8(pv, i, 'a')) == NULL, ("i=%#x pv=%p off=%#x\n", i, pv, (uintptr_t)pv2 - (uintptr_t)pv));
    140140
    141141        for (uint32_t cRefs = 3;; cRefs--)
     
    145145                break;
    146146            RTTESTI_CHECK(RTMemPoolRefCount(pv) == cRefs);
    147             RTTESTI_CHECK_MSG_RETV((pv2 = ASMMemIsAll8(pv, i, 'a')) == NULL, ("i=%#x pv=%p off=%#x cRefs=%d\n", i, pv, (uintptr_t)pv2 - (uintptr_t)pv, cRefs));
     147            RTTESTI_CHECK_MSG_RETV((pv2 = ASMMemFirstMismatchingU8(pv, i, 'a')) == NULL, ("i=%#x pv=%p off=%#x cRefs=%d\n", i, pv, (uintptr_t)pv2 - (uintptr_t)pv, cRefs));
    148148            for (uint32_t j = 0; j < 42; j++)
    149149            {
     
    152152                memset(pv2, 'f', i);
    153153                RTTESTI_CHECK(RTMemPoolRelease(hMemPool, pv2) == 0);
    154                 RTTESTI_CHECK_MSG_RETV((pv2 = ASMMemIsAll8(pv, i, 'a')) == NULL, ("i=%#x pv=%p off=%#x cRefs=%d\n", i, pv, (uintptr_t)pv2 - (uintptr_t)pv, cRefs));
     154                RTTESTI_CHECK_MSG_RETV((pv2 = ASMMemFirstMismatchingU8(pv, i, 'a')) == NULL, ("i=%#x pv=%p off=%#x cRefs=%d\n", i, pv, (uintptr_t)pv2 - (uintptr_t)pv, cRefs));
    155155            }
    156156        }
  • trunk/src/VBox/Runtime/testcase/tstRTMemSafer.cpp

    r57358 r59747  
    129129        RTTESTI_CHECK_RC_OK_RETV(RTMemSaferReallocZEx(cbAlloc, pvBuf, cbNew, &pvBuf, 0));
    130130
    131         RTTESTI_CHECK(ASMMemIsAll8(pvBuf, RT_MIN(cbAlloc, cbNew), chFiller) == NULL);
     131        RTTESTI_CHECK(ASMMemIsAllU8(pvBuf, RT_MIN(cbAlloc, cbNew), chFiller));
    132132
    133133        chFiller += 0x31;
  • trunk/src/VBox/Runtime/testcase/tstRTStrAlloc.cpp

    r57358 r59747  
    9696            RTTESTI_CHECK(!psz[127]);
    9797            RTTESTI_CHECK(!psz[159]);
    98             RTTESTI_CHECK(ASMMemIsAll8(psz, 127, 'a') == NULL);
     98            RTTESTI_CHECK(ASMMemIsAllU8(psz, 127, 'a'));
    9999            memset(psz, 'b', 159);
    100100
     
    103103            {
    104104                RTTESTI_CHECK(!psz[78]);
    105                 RTTESTI_CHECK(ASMMemIsAll8(psz, 78, 'b') == NULL);
     105                RTTESTI_CHECK(ASMMemIsAllU8(psz, 78, 'b'));
    106106
    107107                RTTESTI_CHECK_RC(rc = RTStrRealloc(&psz, 0), VINF_SUCCESS);
  • trunk/src/VBox/Runtime/testcase/tstRTStrCache.cpp

    r57358 r59747  
    175175        void *pv2;
    176176        RTTESTI_CHECK_RETV(psz = RTStrCacheEnterN(hStrCache, szTest, i));
    177         RTTESTI_CHECK_MSG_RETV((pv2 = ASMMemIsAll8(psz, i, 'a')) == NULL && !psz[i], ("i=%#x psz=%p off=%#x\n", i, psz, (uintptr_t)pv2 - (uintptr_t)psz));
     177        RTTESTI_CHECK_MSG_RETV((pv2 = ASMMemFirstMismatchingU8(psz, i, 'a')) == NULL && !psz[i], ("i=%#x psz=%p off=%#x\n", i, psz, (uintptr_t)pv2 - (uintptr_t)psz));
    178178        RTTESTI_CHECK(RTStrCacheRetain(psz) == 2);
    179179        RTTESTI_CHECK(RTStrCacheRetain(psz) == 3);
    180180        RTTESTI_CHECK(RTStrCacheRetain(psz) == 4);
    181         RTTESTI_CHECK_MSG_RETV((pv2 = ASMMemIsAll8(psz, i, 'a')) == NULL && !psz[i], ("i=%#x psz=%p off=%#x\n", i, psz, (uintptr_t)pv2 - (uintptr_t)psz));
     181        RTTESTI_CHECK_MSG_RETV((pv2 = ASMMemFirstMismatchingU8(psz, i, 'a')) == NULL && !psz[i], ("i=%#x psz=%p off=%#x\n", i, psz, (uintptr_t)pv2 - (uintptr_t)psz));
    182182        RTTESTI_CHECK(RTStrCacheRelease(hStrCache, psz) == 3);
    183         RTTESTI_CHECK_MSG_RETV((pv2 = ASMMemIsAll8(psz, i, 'a')) == NULL && !psz[i], ("i=%#x psz=%p off=%#x\n", i, psz, (uintptr_t)pv2 - (uintptr_t)psz));
     183        RTTESTI_CHECK_MSG_RETV((pv2 = ASMMemFirstMismatchingU8(psz, i, 'a')) == NULL && !psz[i], ("i=%#x psz=%p off=%#x\n", i, psz, (uintptr_t)pv2 - (uintptr_t)psz));
    184184        RTTESTI_CHECK(RTStrCacheRetain(psz) == 4);
    185185        RTTESTI_CHECK(RTStrCacheRetain(psz) == 5);
     
    187187        RTTESTI_CHECK(RTStrCacheRelease(hStrCache, psz) == 5);
    188188        RTTESTI_CHECK(RTStrCacheRelease(hStrCache, psz) == 4);
    189         RTTESTI_CHECK_MSG_RETV((pv2 = ASMMemIsAll8(psz, i, 'a')) == NULL && !psz[i], ("i=%#x psz=%p off=%#x\n", i, psz, (uintptr_t)pv2 - (uintptr_t)psz));
     189        RTTESTI_CHECK_MSG_RETV((pv2 = ASMMemFirstMismatchingU8(psz, i, 'a')) == NULL && !psz[i], ("i=%#x psz=%p off=%#x\n", i, psz, (uintptr_t)pv2 - (uintptr_t)psz));
    190190
    191191        for (uint32_t cRefs = 3;; cRefs--)
     
    194194            if (cRefs == 0)
    195195                break;
    196             RTTESTI_CHECK_MSG_RETV((pv2 = ASMMemIsAll8(psz, i, 'a')) == NULL && !psz[i], ("i=%#x psz=%p off=%#x cRefs=%d\n", i, psz, (uintptr_t)pv2 - (uintptr_t)psz, cRefs));
     196            RTTESTI_CHECK_MSG_RETV((pv2 = ASMMemFirstMismatchingU8(psz, i, 'a')) == NULL && !psz[i], ("i=%#x psz=%p off=%#x cRefs=%d\n", i, psz, (uintptr_t)pv2 - (uintptr_t)psz, cRefs));
    197197            for (uint32_t j = 0; j < 42; j++)
    198198            {
     
    201201                RTTESTI_CHECK_RETV(psz2 != psz);
    202202                RTTESTI_CHECK(RTStrCacheRelease(hStrCache, psz2) == 0);
    203                 RTTESTI_CHECK_MSG_RETV((pv2 = ASMMemIsAll8(psz, i, 'a')) == NULL && !psz[i], ("i=%#x psz=%p off=%#x cRefs=%d\n", i, psz, (uintptr_t)pv2 - (uintptr_t)psz, cRefs));
     203                RTTESTI_CHECK_MSG_RETV((pv2 = ASMMemFirstMismatchingU8(psz, i, 'a')) == NULL && !psz[i], ("i=%#x psz=%p off=%#x cRefs=%d\n", i, psz, (uintptr_t)pv2 - (uintptr_t)psz, cRefs));
    204204            }
    205205        }
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