Changeset 4971 in CLRX


Ignore:
Timestamp:
Sep 19, 2019, 9:06:22 AM (4 weeks ago)
Author:
matszpk
Message:

CLRadeonExtender: AsmROCm: Store SGPRs number in PGMRSRC1 (weird??). Treat argAlign in metadata v3 format as arg offset. Use llvm10BinFormat from output.

File:
1 edited

Legend:

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

    r4968 r4971  
    928928                    "metadata section exists")
    929929   
     930    ROCmKernelMetadata& metadata = handler.output.metadataInfo.kernels[asmr.currentKernel];
    930931    bool good = true;
    931932    skipSpacesToEnd(linePtr, end);
     
    962963   
    963964    skipSpacesToEnd(linePtr, end);
    964     // parse argument alignment
     965    // parse argument alignment (or offset for metadatav3)
    965966    uint64_t argAlign = 0;
    966967    if (linePtr!=end && *linePtr!=',')
     
    969970        if (getAbsoluteValueArg(asmr, argAlign, linePtr, true))
    970971        {
    971             if (argAlign==0 || argAlign != (1ULL<<(63-CLZ64(argAlign))))
     972            if (!handler.output.metadataV3Format &&
     973                // only for older metadata format is align
     974                (argAlign==0 || argAlign != (1ULL<<(63-CLZ64(argAlign)))))
    972975                ASM_NOTGOOD_BY_ERROR(valuePlace, "Argument alignment is not power of 2")
    973976        }
     
    977980    if (argAlign == 0)
    978981    {
    979         argAlign = (argSize!=0) ? 1ULL<<(63-CLZ64(argSize)) : 1;
    980         if (argSize > argAlign)
    981             argAlign <<= 1;
     982        if (!handler.output.metadataV3Format)
     983        {
     984            argAlign = (argSize!=0) ? 1ULL<<(63-CLZ64(argSize)) : 1;
     985            if (argSize > argAlign)
     986                argAlign <<= 1;
     987        }
     988        else
     989        {   // metadatav3 format (offset)
     990            if (!metadata.argInfos.empty())
     991            {
     992                size_t realArgAlign = (argSize!=0) ? 1ULL<<(63-CLZ64(argSize)) : 1;
     993                if (argSize > realArgAlign)
     994                    realArgAlign <<= 1;
     995                // calculate arg offset
     996                const ROCmKernelArgInfo& prevArg = metadata.argInfos.back();
     997                argAlign = (prevArg.offset + prevArg.size + realArgAlign-1) &
     998                            (realArgAlign-1);
     999            }
     1000        }
    9821001    }
    9831002   
     
    10871106   
    10881107    handler.output.useMetadataInfo = true;
    1089     ROCmKernelMetadata& metadata = handler.output.metadataInfo.kernels[asmr.currentKernel];
    10901108    // setup kernel arg info
    10911109    ROCmKernelArgInfo argInfo{};
     
    22692287    output.deviceType = assembler.getDeviceType();
    22702288   
    2271     const bool llvm10BinFormat = assembler.isLLVM10BinFormat();
    22722289    // check whether ctrlDirSection if llvm10BinFormat
    2273     if (llvm10BinFormat)
     2290    if (output.llvm10BinFormat)
    22742291        for (const Kernel* kernel: kernelStates)
    22752292            if (kernel->ctrlDirSection != ASMSECT_NONE)
     
    23582375   
    23592376    size_t kdescBaseOffset = 0;
    2360     if (llvm10BinFormat)
     2377    if (output.llvm10BinFormat)
    23612378    {
    23622379        AsmSection& asmDSection = assembler.sections[dataSection];
     
    23852402        if (config.amdMachineStepping == BINGEN16_DEFAULT)
    23862403            config.amdMachineStepping = amdGpuArchValues.stepping;
    2387         if (config.kernelCodeEntryOffset == BINGEN64_DEFAULT && !llvm10BinFormat)
     2404        if (config.kernelCodeEntryOffset == BINGEN64_DEFAULT && !output.llvm10BinFormat)
    23882405            config.kernelCodeEntryOffset = 256;
    23892406        if (config.kernelCodePrefetchOffset == BINGEN64_DEFAULT)
     
    24992516                        config.priority, config.floatMode, config.privilegedMode,
    25002517                        config.dx10Clamp, config.debugMode, config.ieeeMode);
     2518        if (output.llvm10BinFormat && output.metadataV3Format &&
     2519            arch >= GPUArchitecture::GCN1_5)
     2520            // very weird in current LLVM10 bin format:
     2521            // SGPR is supplied in PGMRSRC1 for AMD3 format?? why??
     2522            config.computePgmRsrc1 |= ((sgprsNum-1)>>3)<<6;
     2523       
    25012524        // computePGMRSRC2
    25022525        config.computePgmRsrc2 = (config.computePgmRsrc2 & 0xffffe440U) |
     
    25152538            config.runtimeLoaderKernelSymbol = 0;
    25162539       
    2517         if (!llvm10BinFormat)
     2540        if (!output.llvm10BinFormat)
    25182541        {
    25192542            config.toLE(); // to little-endian
     
    25642587        kinput.offset = symbol.value;
    25652588       
    2566         if (!llvm10BinFormat)
     2589        if (!output.llvm10BinFormat)
    25672590        {
    25682591            if (asmCSection.content.size() < symbol.value + sizeof(ROCmKernelConfig))
Note: See TracChangeset for help on using the changeset viewer.