Changeset 3730 in CLRX


Ignore:
Timestamp:
Feb 6, 2018, 9:50:08 PM (15 months ago)
Author:
matszpk
Message:

CLRadeonExtender: ROCm: change syntax of the pseudo-op '.md_symname'. initialize version of metadata to 1.0. fixed parsing of the '.arg' pseudo-op.
fixed string escaping in ROCm metadata. Escape ':' printf format in ROCm metadata. Use default symname if not supplied.

Location:
CLRadeonExtender/trunk
Files:
3 edited

Legend:

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

    r3729 r3730  
    120120             metadataSection(ASMSECT_NONE), dataSection(ASMSECT_NONE), extraSectionCount(0)
    121121{
     122    output.metadataInfo.initialize();
    122123    output.archMinor = output.archStepping = UINT32_MAX;
    123124    output.eflags = BINGEN_DEFAULT;
     
    148149    output.metadataInfo.kernels.push_back(ROCmKernelMetadata());
    149150    output.metadataInfo.kernels.back().initialize();
     151    output.metadataInfo.kernels.back().name = kernelName;
    150152   
    151153    if (assembler.currentKernel == ASMKERN_GLOBAL)
     
    665667                    "metadata section exists")
    666668   
    667     CString symName;
     669    std::string symName;
    668670    skipSpacesToEnd(linePtr, end);
    669     bool good = getNameArg(asmr, symName, linePtr, "symbol name", true);
     671    bool good = asmr.parseString(symName, linePtr);
    670672    if (!good || !checkGarbagesAtEnd(asmr, linePtr))
    671673        return;
     
    808810    { "image", cxuint(ROCmValueKind::IMAGE) },
    809811    { "none", cxuint(ROCmValueKind::HIDDEN_NONE) },
     812    { "pipe", cxuint(ROCmValueKind::PIPE) },
    810813    { "printfbuf", cxuint(ROCmValueKind::HIDDEN_PRINTF_BUFFER) },
    811     { "pipe", cxuint(ROCmValueKind::PIPE) },
    812814    { "queue", cxuint(ROCmValueKind::QUEUE) },
    813815    { "sampler", cxuint(ROCmValueKind::SAMPLER) },
     
    884886    CString argName;
    885887    if (linePtr!=end && *linePtr!=',')
    886     {
    887888        // parse name
    888889        good &= getNameArg(asmr, argName, linePtr, "argument name", true);
    889         if (!skipRequiredComma(asmr, linePtr))
    890             return;
    891     }
     890   
     891    if (!skipRequiredComma(asmr, linePtr))
     892        return;
     893    skipSpacesToEnd(linePtr, end);
     894   
    892895    std::string typeName;
    893896    if (linePtr!=end && *linePtr=='"')
  • CLRadeonExtender/trunk/amdasm/DisasmROCm.cpp

    r3728 r3730  
    540540{
    541541    output.write("    .config\n", 12);
    542     output.write("        .md_symname ", 20);
    543     output.write(kernel.symbolName.c_str(), kernel.symbolName.size());
    544     output.write("\n", 1);
     542    output.write("        .md_symname \"", 21);
     543    //output.write(kernel.symbolName.c_str(), kernel.symbolName.size());
     544    {
     545        std::string symName = escapeStringCStyle(kernel.symbolName);
     546        output.write(symName.c_str(), symName.size());
     547    }
     548    output.write("\"\n", 2);
    545549    output.write("        .md_language \"", 22);
    546550    {
  • CLRadeonExtender/trunk/amdbin/ROCmBinaries.cpp

    r3729 r3730  
    5959}
    6060
    61 void ROCmMetadata::initialize ()
    62 {
    63     version[0] = version[1] = 0;
     61void ROCmMetadata::initialize()
     62{
     63    version[0] = 1;
     64    version[1] = 0;
    6465}
    6566
     
    15161517        itocstrCStyle(values[i], numBuf, 24);
    15171518        output += numBuf;
    1518         output += (i+1<n) ? ", " : "]\n";
     1519        output += (i+1<n) ? ", " : " ]\n";
    15191520    }
    15201521}
     
    15321533    bool toEscape = false;
    15331534    const char* s;
    1534     bool nonDigit = false;
    15351535    for (s = input.c_str(); *s!=0; s++)
    15361536    {
     
    15381538        if (c < 0x20 || c >= 0x80 || c=='*' || c=='&' || c=='!' || c=='@' ||
    15391539            c=='\'' || c=='\"')
    1540         {
    15411540            toEscape = true;
    1542             break;
    1543         }
    1544         nonDigit |= isDigit(c);
    15451541    }
    15461542    // if spaces in begin and end
    1547     if (!nonDigit || isSpace(input[0]) || isDigit(input[0]) ||
     1543    if (isSpace(input[0]) || isDigit(input[0]) ||
    15481544        (!input.empty() && isSpace(s[-1])))
    15491545        toEscape = true;
     
    15571553    }
    15581554    return input.c_str();
     1555}
     1556
     1557static std::string escapePrintfFormat(const std::string& fmt)
     1558{
     1559    std::string out;
     1560    out.reserve(fmt.size());
     1561    for (char c: fmt)
     1562        if (c!=':')
     1563            out.push_back(c);
     1564        else
     1565            out += "\\72";
     1566    return out;
    15591567}
    15601568
     
    15971605        }
    15981606        // printf format
    1599         output += escapeStringCStyle(printfInfo.format);
     1607        std::string escapedFmt = escapeStringCStyle(printfInfo.format);
     1608        escapedFmt = escapePrintfFormat(escapedFmt);
     1609        output += escapedFmt;
    16001610        output += "'\n";
    16011611    }
     
    16091619        output += "  - Name:            ";
    16101620        output.append(kernel.name.c_str(), kernel.name.size());
    1611         output += "\n    SymbolName:      '";
    1612         output += escapeYAMLString(kernel.symbolName);
    1613         output += "'\n";
     1621        output += "\n    SymbolName:      ";
     1622        if (!kernel.symbolName.empty())
     1623            output += escapeYAMLString(kernel.symbolName);
     1624        else
     1625        {
     1626            // default is kernel name + '@kd'
     1627            std::string symName = kernel.name.c_str();
     1628            symName += "@kd";
     1629            output += escapeYAMLString(symName);
     1630        }
     1631        output += "\n";
    16141632        if (!kernel.language.empty())
    16151633        {
Note: See TracChangeset for help on using the changeset viewer.