Changeset 3736 in CLRX


Ignore:
Timestamp:
Feb 7, 2018, 2:09:07 PM (17 months ago)
Author:
matszpk
Message:

CLRadeonExtender: ROCm: Automatically allocate printfId for printf without supplied id.

Location:
CLRadeonExtender/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • CLRadeonExtender/trunk/amdasm/AsmROCmFormat.cpp

    r3734 r3736  
    747747   
    748748    ROCmPrintfInfo printfInfo{};
    749     uint64_t printfId = 0;
     749    uint64_t printfId = BINGEN_DEFAULT;
    750750    skipSpacesToEnd(linePtr, end);
    751751    // parse printf id
     
    769769        uint64_t argSize = 0;
    770770        valuePlace = linePtr;
    771         if (getAbsoluteValueArg(asmr, argSize, linePtr))
     771        if (getAbsoluteValueArg(asmr, argSize, linePtr, true))
    772772            asmr.printWarningForRange(sizeof(cxuint)<<3, argSize,
    773773                            asmr.getSourcePos(valuePlace), WS_UNSIGNED);
  • CLRadeonExtender/trunk/amdbin/ROCmBinaries.cpp

    r3732 r3736  
    15851585        std::unordered_set<cxuint> printfIds;
    15861586        for (const ROCmPrintfInfo& printfInfo: mdInfo.printfInfos)
    1587             if (!printfIds.insert(printfInfo.id).second)
    1588                 throw BinGenException("Duplicate of printf id");
    1589     }
    1590     // printfs
    1591     for (const ROCmPrintfInfo& printfInfo: mdInfo.printfInfos)
    1592     {
    1593         output += "  - '";
    1594         itocstrCStyle(printfInfo.id, numBuf, 24);
    1595         output += numBuf;
    1596         output += ':';
    1597         itocstrCStyle(printfInfo.argSizes.size(), numBuf, 24);
    1598         output += numBuf;
    1599         output += ':';
    1600         for (size_t argSize: printfInfo.argSizes)
    1601         {
    1602             itocstrCStyle(argSize, numBuf, 24);
     1587            if (printfInfo.id!=BINGEN_DEFAULT)
     1588                if (!printfIds.insert(printfInfo.id).second)
     1589                    throw BinGenException("Duplicate of printf id");
     1590        // printfs
     1591        uint32_t freePrintfId = 1;
     1592        for (const ROCmPrintfInfo& printfInfo: mdInfo.printfInfos)
     1593        {
     1594            // skip used printfids;
     1595            uint32_t printfId = printfInfo.id;
     1596            if (printfId == BINGEN_DEFAULT)
     1597            {
     1598                // skip used printfids
     1599                for (; printfIds.find(freePrintfId) != printfIds.end(); ++freePrintfId);
     1600                // just use this free printfid
     1601                printfId = freePrintfId++;
     1602            }
     1603           
     1604            output += "  - '";
     1605            itocstrCStyle(printfId, numBuf, 24);
    16031606            output += numBuf;
    16041607            output += ':';
    1605         }
    1606         // printf format
    1607         std::string escapedFmt = escapeStringCStyle(printfInfo.format);
    1608         escapedFmt = escapePrintfFormat(escapedFmt);
    1609         output += escapedFmt;
    1610         output += "'\n";
     1608            itocstrCStyle(printfInfo.argSizes.size(), numBuf, 24);
     1609            output += numBuf;
     1610            output += ':';
     1611            for (size_t argSize: printfInfo.argSizes)
     1612            {
     1613                itocstrCStyle(argSize, numBuf, 24);
     1614                output += numBuf;
     1615                output += ':';
     1616            }
     1617            // printf format
     1618            std::string escapedFmt = escapeStringCStyle(printfInfo.format);
     1619            escapedFmt = escapePrintfFormat(escapedFmt);
     1620            output += escapedFmt;
     1621            output += "'\n";
     1622        }
    16111623    }
    16121624   
Note: See TracChangeset for help on using the changeset viewer.