Changeset 4930 in CLRX


Ignore:
Timestamp:
Aug 25, 2019, 9:23:20 AM (3 weeks ago)
Author:
matszpk
Message:

CLRadeonExtender: ROCm: Next ROCm LLVM10 bin format stuff in Disassembler.

File:
1 edited

Legend:

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

    r4929 r4930  
    9393    input->metadataV3 = binary.isMetadataV3Format();
    9494    return input.release();
     95}
     96
     97static void dumpKernelDescriptor(std::ostream& output, cxuint maxSgprsNum,
     98                GPUArchitecture arch, const ROCmKernelDescriptor& kdesc)
     99{
     100    uint32_t groupSegmentFixedSize = ULEV(kdesc.groupSegmentFixedSize);
     101    uint32_t privateSegmentFixedSize = ULEV(kdesc.privateSegmentFixedSize);
     102    uint64_t kernelCodeEntryOffset = ULEV(kdesc.kernelCodeEntryOffset);
     103    uint32_t computePgmRsrc3 = ULEV(kdesc.pgmRsrc3);
     104    uint32_t computePgmRsrc1 = ULEV(kdesc.pgmRsrc1);
     105    uint32_t computePgmRsrc2 = ULEV(kdesc.pgmRsrc2);
     106    uint16_t initialKernelExecState = ULEV(initialKernelExecState);
     107   
     108    size_t bufSize;
     109    char buf[100];
     110    const cxuint ldsShift = arch<GPUArchitecture::GCN1_1 ? 8 : 9;
     111    const uint32_t pgmRsrc1 = computePgmRsrc1;
     112    const uint32_t pgmRsrc2 = computePgmRsrc2;
     113   
     114    const cxuint dimMask = getDefaultDimMask(arch, pgmRsrc2);
     115    // print dims (hsadims for gallium): .[hsa_]dims xyz
     116    strcpy(buf, "        .dims ");
     117    bufSize = 14;
     118    if ((dimMask & 1) != 0)
     119        buf[bufSize++] = 'x';
     120    if ((dimMask & 2) != 0)
     121        buf[bufSize++] = 'y';
     122    if ((dimMask & 4) != 0)
     123        buf[bufSize++] = 'z';
     124    if ((dimMask & 7) != ((dimMask>>3) & 7))
     125    {
     126        buf[bufSize++] = ',';
     127        buf[bufSize++] = ' ';
     128        if ((dimMask & 8) != 0)
     129            buf[bufSize++] = 'x';
     130        if ((dimMask & 16) != 0)
     131            buf[bufSize++] = 'y';
     132        if ((dimMask & 32) != 0)
     133            buf[bufSize++] = 'z';
     134    }
     135    buf[bufSize++] = '\n';
     136    output.write(buf, bufSize);
     137   
     138    bufSize = snprintf(buf, 100, "        .sgprsnum %u\n",
     139            std::min((((pgmRsrc1>>6) & 0xf)<<3)+8, maxSgprsNum));
     140    output.write(buf, bufSize);
     141    bufSize = snprintf(buf, 100, "        .vgprsnum %u\n", ((pgmRsrc1 & 0x3f)<<2)+4);
     142    output.write(buf, bufSize);
     143    if (arch >= GPUArchitecture::GCN1_5)
     144    {
     145        bufSize = snprintf(buf, 100, "        .vgprsnum %u\n", (computePgmRsrc1 & 15)<<3);
     146        output.write(buf, bufSize);
     147    }
     148    if ((pgmRsrc1 & (1U<<20)) != 0)
     149        output.write("        .privmode\n", 18);
     150    if ((pgmRsrc1 & (1U<<22)) != 0)
     151        output.write("        .debugmode\n", 19);
     152    if ((pgmRsrc1 & (1U<<21)) != 0)
     153        output.write("        .dx10clamp\n", 19);
     154    if ((pgmRsrc1 & (1U<<23)) != 0)
     155        output.write("        .ieeemode\n", 18);
     156    if ((pgmRsrc2 & 0x400) != 0)
     157        output.write("        .tgsize\n", 16);
     158   
     159    bufSize = snprintf(buf, 100, "        .floatmode 0x%02x\n", (pgmRsrc1>>12) & 0xff);
     160    output.write(buf, bufSize);
     161    bufSize = snprintf(buf, 100, "        .priority %u\n", (pgmRsrc1>>10) & 3);
     162    output.write(buf, bufSize);
     163    if (((pgmRsrc1>>24) & 0x7f) != 0)
     164    {
     165        bufSize = snprintf(buf, 100, "        .exceptions 0x%02x\n",
     166                (pgmRsrc1>>24) & 0x7f);
     167        output.write(buf, bufSize);
     168    }
     169    const cxuint localSize = ((pgmRsrc2>>15) & 0x1ff) << ldsShift;
     170    if (localSize!=0)
     171    {
     172        bufSize = snprintf(buf, 100, "        .localsize %u\n", localSize);
     173        output.write(buf, bufSize);
     174    }
     175    bufSize = snprintf(buf, 100, "        .userdatanum %u\n", (pgmRsrc2>>1) & 0x1f);
     176    output.write(buf, bufSize);
     177   
     178    bufSize = snprintf(buf, 100, "        .pgmrsrc1 0x%08x\n", pgmRsrc1);
     179    output.write(buf, bufSize);
     180    bufSize = snprintf(buf, 100, "        .pgmrsrc2 0x%08x\n", pgmRsrc2);
     181    output.write(buf, bufSize);
     182    if (arch >= GPUArchitecture::GCN1_5)
     183    {
     184        bufSize = snprintf(buf, 100, "        .pgmrsrc3 0x%08x\n", computePgmRsrc3);
     185        output.write(buf, bufSize);
     186    }
     187   
     188    bufSize = snprintf(buf, 100, "        .group_segment_fixed_size %u\n",
     189                        groupSegmentFixedSize);
     190    output.write(buf, bufSize);
     191    bufSize = snprintf(buf, 100, "        .private_segment_fixed_size %u\n",
     192                        privateSegmentFixedSize);
     193    output.write(buf, bufSize);
     194    bufSize = snprintf(buf, 100, "        .kernel_code_entry_offset 0x%" PRIx64 "\n",
     195                       kernelCodeEntryOffset);
     196    output.write(buf, bufSize);
     197   
     198    const uint16_t sgprFlags = initialKernelExecState;
     199    // print SGPRregister flags (features)
     200    if ((sgprFlags&ROCMFLAG_USE_PRIVATE_SEGMENT_BUFFER) != 0)
     201        output.write("        .use_private_segment_buffer\n", 36);
     202    if ((sgprFlags&ROCMFLAG_USE_DISPATCH_PTR) != 0)
     203        output.write("        .use_dispatch_ptr\n", 26);
     204    if ((sgprFlags&ROCMFLAG_USE_QUEUE_PTR) != 0)
     205        output.write("        .use_queue_ptr\n", 23);
     206    if ((sgprFlags&ROCMFLAG_USE_KERNARG_SEGMENT_PTR) != 0)
     207        output.write("        .use_kernarg_segment_ptr\n", 33);
     208    if ((sgprFlags&ROCMFLAG_USE_DISPATCH_ID) != 0)
     209        output.write("        .use_dispatch_id\n", 25);
     210    if ((sgprFlags&ROCMFLAG_USE_FLAT_SCRATCH_INIT) != 0)
     211        output.write("        .use_flat_scratch_init\n", 31);
     212    if ((sgprFlags&ROCMFLAG_USE_PRIVATE_SEGMENT_SIZE) != 0)
     213        output.write("        .use_private_segment_size\n", 34);
     214    if ((sgprFlags&(1U<<10)) != 0)
     215        output.write("        .wave32\n", 16);
    95216}
    96217
Note: See TracChangeset for help on using the changeset viewer.