Changeset 3315 in CLRX


Ignore:
Timestamp:
Sep 6, 2017, 5:39:33 PM (13 months ago)
Author:
matszpk
Message:

CLRadeonExtender: AsmAmdCL2: Fixed preparing of HSA configuration to write. Add a missing pseudo-op '.userdatanum'.
Fixed ordering in pseudo-op table.

Location:
CLRadeonExtender/trunk
Files:
2 edited

Legend:

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

    r3314 r3315  
    3636{
    3737    "acl_version", "arch_minor", "arch_stepping",
    38     "arg", "bssdata", "compile_options",
    39     "call_convention", "codeversion", "config", "control_directive",
     38    "arg", "bssdata", "call_convention", "codeversion",
     39    "compile_options", "config", "control_directive",
    4040    "cws", "debug_private_segment_buffer_sgpr",
    4141    "debug_wavefront_private_segment_offset_sgpr",
     
    5959    "use_private_segment_buffer", "use_private_segment_size",
    6060    "use_ptr64", "use_queue_ptr", "use_xnack_enabled",
    61     "useargs", "useenqueue", "usegeneric", "usesetup", "vgprsnum",
     61    "useargs", "useenqueue", "usegeneric",
     62    "userdatanum", "usesetup", "vgprsnum",
    6263    "wavefront_sgpr_count", "wavefront_size",  "workgroup_fbarrier_count",
    6364    "workgroup_group_segment_size", "workitem_private_segment_size",
     
    6869{
    6970    AMDCL2OP_ACL_VERSION = 0, AMDCL2OP_ARCH_MINOR, AMDCL2OP_ARCH_STEPPING,
    70     AMDCL2OP_ARG, AMDCL2OP_BSSDATA, AMDCL2OP_COMPILE_OPTIONS,
    71     AMDCL2OP_CALL_CONVENTION, AMDCL2OP_CODEVERSION,
    72     AMDCL2OP_CONFIG, AMDCL2OP_CONTROL_DIRECTIVE,
     71    AMDCL2OP_ARG, AMDCL2OP_BSSDATA, AMDCL2OP_CALL_CONVENTION, AMDCL2OP_CODEVERSION,
     72    AMDCL2OP_COMPILE_OPTIONS, AMDCL2OP_CONFIG, AMDCL2OP_CONTROL_DIRECTIVE,
    7373    AMDCL2OP_CWS, AMDCL2OP_DEBUG_PRIVATE_SEGMENT_BUFFER_SGPR,
    7474    AMDCL2OP_DEBUG_WAVEFRONT_PRIVATE_SEGMENT_OFFSET_SGPR,
     
    9898    AMDCL2OP_USE_PTR64, AMDCL2OP_USE_QUEUE_PTR, AMDCL2OP_USE_XNACK_ENABLED,
    9999    AMDCL2OP_USEARGS, AMDCL2OP_USEENQUEUE, AMDCL2OP_USEGENERIC,
    100     AMDCL2OP_USESETUP, AMDCL2OP_VGPRSNUM,
     100    AMDCL2OP_USERDATANUM, AMDCL2OP_USESETUP, AMDCL2OP_VGPRSNUM,
    101101    AMDCL2OP_WAVEFRONT_SGPR_COUNT, AMDCL2OP_WAVEFRONT_SIZE,
    102102    AMDCL2OP_WORKGROUP_FBARRIER_COUNT, AMDCL2OP_WORKGROUP_GROUP_SEGMENT_SIZE,
     
    796796    asmr.goToSection(pseudoOpPlace, kernel.ctrlDirSection);
    797797    handler.kernelStates[asmr.currentKernel]->initializeKernelConfig();
     798    handler.output.kernels[asmr.currentKernel].hsaConfig = true;
    798799}
    799800
     
    812813    }
    813814    const bool useHsaConfig = handler.kernelStates[asmr.currentKernel]->useHsaConfig;
    814     if (!useHsaConfig && target >= AMDCL2CVAL_ONLY_HSA_FIRST_PARAM)
     815    if (!useHsaConfig && (target >= AMDCL2CVAL_ONLY_HSA_FIRST_PARAM ||
     816            target == AMDCL2CVAL_USERDATANUM))
    815817    {
    816818        asmr.printError(pseudoOpPlace, "HSAConfig pseudo-op only in HSAConfig");
     
    15031505    asmr.goToSection(pseudoOpPlace, kernel.configSection);
    15041506    kernel.useHsaConfig = hsaConfig;
     1507    handler.output.kernels[asmr.currentKernel].hsaConfig = hsaConfig;
    15051508    handler.output.kernels[asmr.currentKernel].useConfig = true;
    15061509}
     
    15321535            AsmAmdCL2PseudoOps::doBssData(*this, stmtPlace, linePtr);
    15331536            break;
     1537        case AMDCL2OP_CALL_CONVENTION:
     1538            AsmAmdCL2PseudoOps::setConfigValue(*this, stmtPlace, linePtr,
     1539                             AMDCL2CVAL_CALL_CONVENTION);
     1540            break;
    15341541        case AMDCL2OP_CODEVERSION:
    15351542            AsmAmdCL2PseudoOps::setCodeVersion(*this, stmtPlace, linePtr);
     
    17751782            AsmAmdCL2PseudoOps::setConfigBoolValue(*this, stmtPlace, linePtr,
    17761783                       AMDCL2CVAL_USESETUP);
     1784            break;
     1785        case AMDCL2OP_USERDATANUM:
     1786            AsmAmdCL2PseudoOps::setConfigValue(*this, stmtPlace, linePtr,
     1787                       AMDCL2CVAL_USERDATANUM);
    17771788            break;
    17781789        case AMDCL2OP_VGPRSNUM:
     
    19721983        else // setup HSA configuration
    19731984        {
    1974             AsmAmdHsaKernelConfig config;
     1985            AsmAmdHsaKernelConfig& config = *kernelStates[i]->config.get();
    19751986            const CString& kernelName = output.kernels[i].kernelName;
    19761987           
    19771988            const Kernel& kernel = *kernelStates[i];
    1978             if (kernelStates[i]->config != nullptr)
    1979                 // if HSA config set in this kernel
    1980                 ::memcpy(&config, kernel.config.get(), sizeof(AsmAmdHsaKernelConfig));
    1981             else
    1982                 ::memset(&config, 0xff, 128); // fill by defaults
    19831989           
    19841990            // setup some params: pgmRSRC1 and PGMRSRC2 and others
     
    21502156            else // zeroing if not supplied
    21512157                ::memset(config.controlDirective, 0, 128);
     2158           
     2159            output.kernels[i].setupSize = 256;
     2160            output.kernels[i].setup = reinterpret_cast<cxbyte*>(&config);
    21522161        }
    21532162    }
  • CLRadeonExtender/trunk/tests/amdasm/AsmAmdCL2Format.cpp

    r2685 r3315  
    119119        {   // when config
    120120            const AmdCL2KernelConfig& config = kernel.config;
    121             os << "    Config:\n";
     121            if (!kernel.hsaConfig)
     122                os << "    Config:\n";
     123            else
     124                os << "    HSAConfig:\n";
    122125            for (AmdKernelArgInput arg: config.args)
    123126                os << "      Arg: \"" << arg.argName << "\", \"" <<
     
    137140                os << '\n';
    138141            }
    139             os << "      dims=" << confValueToString(config.dimMask) << ", "
    140                     "cws=" << config.reqdWorkGroupSize[0] << " " <<
    141                     config.reqdWorkGroupSize[1] << " " << config.reqdWorkGroupSize[2] << ", "
    142                     "SGPRS=" << config.usedSGPRsNum << ", "
    143                     "VGPRS=" << config.usedVGPRsNum << "\n      "
    144                     "pgmRSRC1=" << std::hex << "0x" << config.pgmRSRC1 << ", "
    145                     "pgmRSRC2=0x" << config.pgmRSRC2 << ", "
    146                     "ieeeMode=0x" << std::dec << config.ieeeMode << std::hex << ", "
    147                     "floatMode=0x" << config.floatMode<< std::dec << "\n      "
    148                     "priority=" << config.priority << ", "
    149                     "exceptions=" << cxuint(config.exceptions) << ", "
    150                     "localSize=" << config.localSize << ", "
    151                     "scratchBuffer=" << config.scratchBufferSize << "\n      " <<
    152                     (config.tgSize?"tgsize ":"") <<
    153                     (config.debugMode?"debug ":"") <<
    154                     (config.privilegedMode?"priv ":"") <<
    155                     (config.dx10Clamp?"dx10clamp ":"") <<
    156                     (config.useSetup?"useSetup ":"") <<
    157                     (config.useArgs?"useArgs ":"") <<
    158                     (config.useEnqueue?"useEnqueue ":"") <<
    159                     (config.useGeneric?"useGeneric ":"") << "\n";
     142            if (!kernel.hsaConfig)
     143                os << "      dims=" << confValueToString(config.dimMask) << ", "
     144                        "cws=" << config.reqdWorkGroupSize[0] << " " <<
     145                            config.reqdWorkGroupSize[1] << " " <<
     146                            config.reqdWorkGroupSize[2] << ", "
     147                        "SGPRS=" << config.usedSGPRsNum << ", "
     148                        "VGPRS=" << config.usedVGPRsNum << "\n      "
     149                        "pgmRSRC1=" << std::hex << "0x" << config.pgmRSRC1 << ", "
     150                        "pgmRSRC2=0x" << config.pgmRSRC2 << ", "
     151                        "ieeeMode=0x" << std::dec << config.ieeeMode << std::hex << ", "
     152                        "floatMode=0x" << config.floatMode<< std::dec << "\n      "
     153                        "priority=" << config.priority << ", "
     154                        "exceptions=" << cxuint(config.exceptions) << ", "
     155                        "localSize=" << config.localSize << ", "
     156                        "scratchBuffer=" << config.scratchBufferSize << "\n      " <<
     157                        (config.tgSize?"tgsize ":"") <<
     158                        (config.debugMode?"debug ":"") <<
     159                        (config.privilegedMode?"priv ":"") <<
     160                        (config.dx10Clamp?"dx10clamp ":"") <<
     161                        (config.useSetup?"useSetup ":"") <<
     162                        (config.useArgs?"useArgs ":"") <<
     163                        (config.useEnqueue?"useEnqueue ":"") <<
     164                        (config.useGeneric?"useGeneric ":"") << "\n";
     165            else
     166            {
     167                const AmdHsaKernelConfig& config =
     168                        *reinterpret_cast<const AmdHsaKernelConfig*>(kernel.setup);
     169                os <<
     170                    "      amdCodeVersion=" << ULEV(config.amdCodeVersionMajor) << "." <<
     171                        ULEV(config.amdCodeVersionMajor) << "\n"
     172                    "      amdMachine=" << ULEV(config.amdMachineKind) << ":" <<
     173                        ULEV(config.amdMachineMajor) << ":" <<
     174                        ULEV(config.amdMachineMinor) << ":" <<
     175                        ULEV(config.amdMachineStepping) << "\n"
     176                    "      kernelCodeEntryOffset=" <<
     177                            ULEV(config.kernelCodeEntryOffset) << "\n"
     178                    "      kernelCodePrefetchOffset=" <<
     179                        ULEV(config.kernelCodePrefetchOffset) << "\n"
     180                    "      kernelCodePrefetchSize=" <<
     181                        ULEV(config.kernelCodePrefetchSize) << "\n"
     182                    "      maxScrachBackingMemorySize=" <<
     183                        ULEV(config.maxScrachBackingMemorySize) << "\n"
     184                    "      computePgmRsrc1=0x" <<
     185                        std::hex << ULEV(config.computePgmRsrc1) << "\n"
     186                    "      computePgmRsrc2=0x" << ULEV(config.computePgmRsrc2) << "\n"
     187                    "      enableSgprRegisterFlags=0x" <<
     188                        ULEV(config.enableSgprRegisterFlags) << "\n"
     189                    "      enableFeatureFlags=0x" <<
     190                        ULEV(config.enableFeatureFlags) << std::dec << "\n"
     191                    "      workitemPrivateSegmentSize=" <<
     192                        ULEV(config.workitemPrivateSegmentSize) << "\n"
     193                    "      workgroupGroupSegmentSize=" <<
     194                        ULEV(config.workgroupGroupSegmentSize) << "\n"
     195                    "      gdsSegmentSize=" << ULEV(config.gdsSegmentSize) << "\n"
     196                    "      kernargSegmentSize=" << ULEV(config.kernargSegmentSize) << "\n"
     197                    "      workgroupFbarrierCount=" <<
     198                        ULEV(config.workgroupFbarrierCount) << "\n"
     199                    "      wavefrontSgprCount=" << ULEV(config.wavefrontSgprCount) << "\n"
     200                    "      workitemVgprCount=" << ULEV(config.workitemVgprCount) << "\n"
     201                    "      reservedVgprFirst=" << ULEV(config.reservedVgprFirst) << "\n"
     202                    "      reservedVgprCount=" << ULEV(config.reservedVgprCount) << "\n"
     203                    "      reservedSgprFirst=" << ULEV(config.reservedSgprFirst) << "\n"
     204                    "      reservedSgprCount=" << ULEV(config.reservedSgprCount) << "\n"
     205                    "      debugWavefrontPrivateSegmentOffsetSgpr=" <<
     206                        ULEV(config.debugWavefrontPrivateSegmentOffsetSgpr) << "\n"
     207                    "      debugPrivateSegmentBufferSgpr=" <<
     208                        ULEV(config.debugPrivateSegmentBufferSgpr) << "\n"
     209                    "      kernargSegmentAlignment=" <<
     210                        cxuint(config.kernargSegmentAlignment) << "\n"
     211                    "      groupSegmentAlignment=" <<
     212                        cxuint(config.groupSegmentAlignment) << "\n"
     213                    "      privateSegmentAlignment=" <<
     214                        cxuint(config.privateSegmentAlignment) << "\n"
     215                    "      wavefrontSize=" << cxuint(config.wavefrontSize) << "\n"
     216                    "      callConvention=0x" <<
     217                        std::hex << ULEV(config.callConvention) << "\n"
     218                    "      runtimeLoaderKernelSymbol=0x" <<
     219                        ULEV(config.runtimeLoaderKernelSymbol) << std::dec << "\n";
     220                os << "      ControlDirective:\n";
     221                printHexData(os, 3, 128, config.controlDirective);
     222            }
    160223        }
    161224        std::vector<AmdCL2RelInput> relocs(kernel.relocations.begin(),
     
    678741test.s:45:5: Error: Config can't be defined if metadata,header,setup,stub section exists
    679742)ffDXD", false
    680     }
     743    },
     744    /* AMD HSA config */
    681745};
    682746
Note: See TracChangeset for help on using the changeset viewer.