Changeset 3274 in CLRX


Ignore:
Timestamp:
Aug 31, 2017, 8:33:11 PM (13 months ago)
Author:
matszpk
Message:

CLRadeonExtender: DisasmGallium?: Distinguish gallium kernel config params and AMDHSA kernel config params (by adding 'hsa_' prefix in pseud-op).

Location:
CLRadeonExtender/trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • CLRadeonExtender/trunk/CLRX/amdasm/Disassembler.h

    r3272 r3274  
    324324    bool isLLVM390;     ///< if >=LLVM3.9
    325325    bool isMesa170;     ///< if >=Mesa3D 17.0
    326     bool isHSACO;       ///< if HSACO (LLVM 4.0)
     326    bool isAMDHSA;       ///< if AMDHSA (LLVM 4.0)
    327327    size_t globalDataSize;  ///< global (constants for kernels) data size
    328328    const cxbyte* globalData;   ///< global (constants for kernels) data
  • CLRadeonExtender/trunk/amdasm/DisasmGallium.cpp

    r3272 r3274  
    8585    std::unique_ptr<GalliumDisasmInput> input(new GalliumDisasmInput);
    8686    input->deviceType = deviceType;
    87     input->isHSACO = (llvmVersion >= 40000);
     87    input->isAMDHSA = (llvmVersion >= 40000);
    8888    if (!binary.is64BitElfBinary())
    8989    {
     
    291291                dumpKernelConfig(output, maxSgprsNum, arch, kinput.progInfo,
    292292                    galliumInput->isLLVM390);
    293                 if (galliumInput->isHSACO)
    294                     dumpHSACOConfig(output, maxSgprsNum, arch,
     293                if (galliumInput->isAMDHSA)
     294                    dumpAMDHSAConfig(output, maxSgprsNum, arch,
    295295                        *reinterpret_cast<const ROCmKernelConfig*>(
    296                              galliumInput->code + kinput.offset));
     296                             galliumInput->code + kinput.offset), true);
    297297            }
    298298        }
    299         if (!galliumInput->isHSACO)
     299        if (!galliumInput->isAMDHSA)
    300300            isaDisassembler->addNamedLabel(kinput.offset, kinput.kernelName);
    301301    }
    302302    if (doDumpCode && galliumInput->code != nullptr && galliumInput->codeSize != 0)
    303303    {   // print text
    304         if (!galliumInput->isHSACO)
     304        if (!galliumInput->isAMDHSA)
    305305        {
    306306            output.write(".text\n", 6);
     
    310310        }
    311311        else
    312         {   // LLVM 4.0 - HSACO code
     312        {   // LLVM 4.0 - AMDHSA code
    313313            std::vector<ROCmDisasmRegionInput> regions(galliumInput->kernels.size());
    314314            for (size_t i = 0; i < galliumInput->kernels.size(); i++)
     
    324324            }
    325325           
    326             disassembleHSACOCode(output, regions, galliumInput->codeSize,
     326            disassembleAMDHSACode(output, regions, galliumInput->codeSize,
    327327                            galliumInput->code, isaDisassembler, flags);
    328328        }
  • CLRadeonExtender/trunk/amdasm/DisasmInternals.h

    r3272 r3274  
    5757       Flags flags);
    5858
    59 extern CLRX_INTERNAL void dumpHSACOConfig(std::ostream& output, cxuint maxSgprsNum,
    60              GPUArchitecture arch, const ROCmKernelConfig& config);
     59extern CLRX_INTERNAL void dumpAMDHSAConfig(std::ostream& output, cxuint maxSgprsNum,
     60             GPUArchitecture arch, const ROCmKernelConfig& config,
     61             bool amdhsaPrefix = false);
    6162
    62 extern CLRX_INTERNAL void disassembleHSACOCode(std::ostream& output,
     63extern CLRX_INTERNAL void disassembleAMDHSACode(std::ostream& output,
    6364            const std::vector<ROCmDisasmRegionInput>& regions,
    6465            size_t codeSize, const cxbyte* code, ISADisassembler* isaDisassembler,
  • CLRadeonExtender/trunk/amdasm/DisasmROCm.cpp

    r3271 r3274  
    5757}
    5858
    59 void CLRX::dumpHSACOConfig(std::ostream& output, cxuint maxSgprsNum,
    60              GPUArchitecture arch, const ROCmKernelConfig& config)
     59void CLRX::dumpAMDHSAConfig(std::ostream& output, cxuint maxSgprsNum,
     60             GPUArchitecture arch, const ROCmKernelConfig& config, bool amdhsaPrefix)
    6161{
    6262    // convert to native-endian
     
    9999   
    100100    const cxuint dimMask = (pgmRsrc2 >> 7) & 7;
    101     strcpy(buf, "        .dims ");
    102     bufSize = 14;
     101    if (!amdhsaPrefix)
     102    {
     103        strcpy(buf, "        .dims ");
     104        bufSize = 14;
     105    }
     106    else
     107    {
     108        strcpy(buf, "        .hsa_dims ");
     109        bufSize = 18;
     110    }
    103111    if ((dimMask & 1) != 0)
    104112        buf[bufSize++] = 'x';
     
    110118    output.write(buf, bufSize);
    111119   
    112     bufSize = snprintf(buf, 100, "        .sgprsnum %u\n",
    113               std::min((((pgmRsrc1>>6) & 0xf)<<3)+8, maxSgprsNum));
    114     output.write(buf, bufSize);
    115     bufSize = snprintf(buf, 100, "        .vgprsnum %u\n", ((pgmRsrc1 & 0x3f)<<2)+4);
    116     output.write(buf, bufSize);
    117     if ((pgmRsrc1 & (1U<<20)) != 0)
    118         output.write("        .privmode\n", 18);
    119     if ((pgmRsrc1 & (1U<<22)) != 0)
    120         output.write("        .debugmode\n", 19);
    121     if ((pgmRsrc1 & (1U<<21)) != 0)
    122         output.write("        .dx10clamp\n", 19);
    123     if ((pgmRsrc1 & (1U<<23)) != 0)
    124         output.write("        .ieeemode\n", 18);
    125     if ((pgmRsrc2 & 0x400) != 0)
    126         output.write("        .tgsize\n", 16);
    127    
    128     bufSize = snprintf(buf, 100, "        .floatmode 0x%02x\n", (pgmRsrc1>>12) & 0xff);
    129     output.write(buf, bufSize);
    130     bufSize = snprintf(buf, 100, "        .priority %u\n", (pgmRsrc1>>10) & 3);
    131     output.write(buf, bufSize);
    132     if (((pgmRsrc1>>24) & 0x7f) != 0)
    133     {
    134         bufSize = snprintf(buf, 100, "        .exceptions 0x%02x\n",
    135                    (pgmRsrc1>>24) & 0x7f);
    136         output.write(buf, bufSize);
    137     }
    138     const cxuint localSize = ((pgmRsrc2>>15) & 0x1ff) << ldsShift;
    139     if (localSize!=0)
    140     {
    141         bufSize = snprintf(buf, 100, "        .localsize %u\n", localSize);
    142         output.write(buf, bufSize);
    143     }
    144     bufSize = snprintf(buf, 100, "        .userdatanum %u\n", (pgmRsrc2>>1) & 0x1f);
    145     output.write(buf, bufSize);
    146    
    147     bufSize = snprintf(buf, 100, "        .pgmrsrc1 0x%08x\n", pgmRsrc1);
    148     output.write(buf, bufSize);
    149     bufSize = snprintf(buf, 100, "        .pgmrsrc2 0x%08x\n", pgmRsrc2);
    150     output.write(buf, bufSize);
     120    if (!amdhsaPrefix)
     121    {
     122        bufSize = snprintf(buf, 100, "        .sgprsnum %u\n",
     123                std::min((((pgmRsrc1>>6) & 0xf)<<3)+8, maxSgprsNum));
     124        output.write(buf, bufSize);
     125        bufSize = snprintf(buf, 100, "        .vgprsnum %u\n", ((pgmRsrc1 & 0x3f)<<2)+4);
     126        output.write(buf, bufSize);
     127        if ((pgmRsrc1 & (1U<<20)) != 0)
     128            output.write("        .privmode\n", 18);
     129        if ((pgmRsrc1 & (1U<<22)) != 0)
     130            output.write("        .debugmode\n", 19);
     131        if ((pgmRsrc1 & (1U<<21)) != 0)
     132            output.write("        .dx10clamp\n", 19);
     133        if ((pgmRsrc1 & (1U<<23)) != 0)
     134            output.write("        .ieeemode\n", 18);
     135        if ((pgmRsrc2 & 0x400) != 0)
     136            output.write("        .tgsize\n", 16);
     137       
     138        bufSize = snprintf(buf, 100, "        .floatmode 0x%02x\n", (pgmRsrc1>>12) & 0xff);
     139        output.write(buf, bufSize);
     140        bufSize = snprintf(buf, 100, "        .priority %u\n", (pgmRsrc1>>10) & 3);
     141        output.write(buf, bufSize);
     142        if (((pgmRsrc1>>24) & 0x7f) != 0)
     143        {
     144            bufSize = snprintf(buf, 100, "        .exceptions 0x%02x\n",
     145                    (pgmRsrc1>>24) & 0x7f);
     146            output.write(buf, bufSize);
     147        }
     148        const cxuint localSize = ((pgmRsrc2>>15) & 0x1ff) << ldsShift;
     149        if (localSize!=0)
     150        {
     151            bufSize = snprintf(buf, 100, "        .localsize %u\n", localSize);
     152            output.write(buf, bufSize);
     153        }
     154        bufSize = snprintf(buf, 100, "        .userdatanum %u\n", (pgmRsrc2>>1) & 0x1f);
     155        output.write(buf, bufSize);
     156       
     157        bufSize = snprintf(buf, 100, "        .pgmrsrc1 0x%08x\n", pgmRsrc1);
     158        output.write(buf, bufSize);
     159        bufSize = snprintf(buf, 100, "        .pgmrsrc2 0x%08x\n", pgmRsrc2);
     160        output.write(buf, bufSize);
     161    }
     162    else
     163    {
     164        bufSize = snprintf(buf, 100, "        .hsa_sgprsnum %u\n",
     165                std::min((((pgmRsrc1>>6) & 0xf)<<3)+8, maxSgprsNum));
     166        output.write(buf, bufSize);
     167        bufSize = snprintf(buf, 100, "        .hsa_vgprsnum %u\n", ((pgmRsrc1 & 0x3f)<<2)+4);
     168        output.write(buf, bufSize);
     169        if ((pgmRsrc1 & (1U<<20)) != 0)
     170            output.write("        .hsa_privmode\n", 22);
     171        if ((pgmRsrc1 & (1U<<22)) != 0)
     172            output.write("        .hsa_debugmode\n", 23);
     173        if ((pgmRsrc1 & (1U<<21)) != 0)
     174            output.write("        .hsa_dx10clamp\n", 23);
     175        if ((pgmRsrc1 & (1U<<23)) != 0)
     176            output.write("        .hsa_ieeemode\n", 22);
     177        if ((pgmRsrc2 & 0x400) != 0)
     178            output.write("        .hsa_tgsize\n", 20);
     179       
     180        bufSize = snprintf(buf, 100, "        .hsa_floatmode 0x%02x\n",
     181                    (pgmRsrc1>>12) & 0xff);
     182        output.write(buf, bufSize);
     183        bufSize = snprintf(buf, 100, "        .hsa_priority %u\n",
     184                    (pgmRsrc1>>10) & 3);
     185        output.write(buf, bufSize);
     186        if (((pgmRsrc1>>24) & 0x7f) != 0)
     187        {
     188            bufSize = snprintf(buf, 100, "        .hsa_exceptions 0x%02x\n",
     189                    (pgmRsrc1>>24) & 0x7f);
     190            output.write(buf, bufSize);
     191        }
     192        const cxuint localSize = ((pgmRsrc2>>15) & 0x1ff) << ldsShift;
     193        if (localSize!=0)
     194        {
     195            bufSize = snprintf(buf, 100, "        .hsa_localsize %u\n", localSize);
     196            output.write(buf, bufSize);
     197        }
     198        bufSize = snprintf(buf, 100, "        .hsa_userdatanum %u\n", (pgmRsrc2>>1) & 0x1f);
     199        output.write(buf, bufSize);
     200       
     201        bufSize = snprintf(buf, 100, "        .hsa_pgmrsrc1 0x%08x\n", pgmRsrc1);
     202        output.write(buf, bufSize);
     203        bufSize = snprintf(buf, 100, "        .hsa_pgmrsrc2 0x%08x\n", pgmRsrc2);
     204        output.write(buf, bufSize);
     205    }
    151206   
    152207    bufSize = snprintf(buf, 100, "        .codeversion %u, %u\n",
     
    323378{
    324379    output.write("    .config\n", 12);
    325     dumpHSACOConfig(output, maxSgprsNum, arch, config);
     380    dumpAMDHSAConfig(output, maxSgprsNum, arch, config);
    326381}
    327382
    328 void CLRX::disassembleHSACOCode(std::ostream& output,
     383void CLRX::disassembleAMDHSACode(std::ostream& output,
    329384            const std::vector<ROCmDisasmRegionInput>& regions,
    330385            size_t codeSize, const cxbyte* code, ISADisassembler* isaDisassembler,
     
    475530   
    476531    if (rocmInput->code != nullptr && rocmInput->codeSize != 0)
    477         disassembleHSACOCode(output, rocmInput->regions,
     532        disassembleAMDHSACode(output, rocmInput->regions,
    478533                        rocmInput->codeSize, rocmInput->code, isaDisassembler, flags);
    479534}
  • CLRadeonExtender/trunk/amdasm/Disassembler.cpp

    r3272 r3274  
    522522            bool secondAlign)
    523523{
    524    
    525524    const char* linePrefix = "    .ascii \"";
    526525    size_t prefixSize = 12;
Note: See TracChangeset for help on using the changeset viewer.