Changeset 4779 in CLRX


Ignore:
Timestamp:
Jul 15, 2019, 7:08:18 AM (9 months ago)
Author:
matszpk
Message:

CLRadeonExtender: GCNDisasm: First FLAT testcases for GFX10. Fixed encSpace for FLAT for GFX10. Add DLC flag to FLAT for GFX10.

Location:
CLRadeonExtender/trunk
Files:
3 edited

Legend:

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

    r4759 r4779  
    206206        if ((instr.archMask & ARCH_GCN_1_5) != 0)
    207207        {
    208             const GCNEncodingSpace& encSpace = gcnInstrTableByCodeSpaces[
    209                         GCN_GFX10_ENCSPACE_IDX + instr.encoding];
    210             if (gcnInstrTableByCode[encSpace.offset + instr.code].mnemonic == nullptr ||
    211                 ((instr.archMask == ARCH_GCN_1_5) &&
    212                  (gcnInstrTableByCode[encSpace.offset + instr.code].archMask) !=
    213                         ARCH_GCN_1_5))
    214                 gcnInstrTableByCode[encSpace.offset + instr.code] = instr;
     208            if (instr.encoding != GCNENC_FLAT || (instr.mode & GCN_FLAT_MODEMASK) == 0)
     209            {
     210                const GCNEncodingSpace& encSpace = gcnInstrTableByCodeSpaces[
     211                            GCN_GFX10_ENCSPACE_IDX + instr.encoding];
     212                if (gcnInstrTableByCode[encSpace.offset + instr.code].mnemonic == nullptr ||
     213                    ((instr.archMask == ARCH_GCN_1_5) &&
     214                    (gcnInstrTableByCode[encSpace.offset + instr.code].archMask) !=
     215                            ARCH_GCN_1_5))
     216                    gcnInstrTableByCode[encSpace.offset + instr.code] = instr;
     217            }
    215218        }
    216219    }
  • CLRadeonExtender/trunk/amdasm/GCNDisasmDecode.cpp

    r4777 r4779  
    25782578            uint32_t insnCode2)
    25792579{
    2580     const bool isGCN14 = ((arch&ARCH_GCN_1_4)!=0);
     2580    const bool isGCN14 = ((arch&ARCH_GCN_1_4_5)!=0);
     2581    const bool isGCN15 = ((arch&ARCH_GCN_1_5)!=0);
    25812582    FastOutputBuffer& output = dasm.output;
    25822583    char* bufStart = output.reserve(150);
     
    26402641   
    26412642    // get inst_offset, with sign if FLAT_SCRATCH, FLAT_GLOBAL
    2642     const cxint instOffset = (flatMode != 0 && (insnCode&0x1000) != 0) ?
    2643                 -4096+(insnCode&0xfff) : insnCode&0xfff;
     2643    const cxuint offsetMask = isGCN15 ? 0x7ff : 0xfff;
     2644    const cxint instOffset = (flatMode != 0 && (insnCode&0x1000) != 0 && !isGCN15) ?
     2645                -4096+(insnCode&offsetMask) : insnCode&offsetMask;
    26442646    if (isGCN14 && instOffset != 0)
    26452647    {
     
    26492651   
    26502652    // print other modifers
    2651     if (isGCN14 && (insnCode & 0x2000U))
     2653    if (isGCN14 && !isGCN15 && (insnCode & 0x2000U))
    26522654        putChars(bufPtr, " lds", 4);
     2655    if (isGCN15 && (insnCode & 0x1000U))
     2656        putChars(bufPtr, " dlc", 4);
    26532657    if (insnCode & 0x10000U)
    26542658        putChars(bufPtr, " glc", 4);
     
    26752679        bufPtr += itocstrCStyle(insnCode2>>24, bufPtr, 6, 16);
    26762680    }
    2677     if (flatMode != 0 && !saddrUsed && ((insnCode>>16)&0xff) != 0)
     2681    if ((flatMode != 0 && !saddrUsed && ((insnCode>>16)&0xff) != 0) ||
     2682        (isGCN15 && flatMode==0 && !saddrUsed && ((insnCode2>>16)&0x7f) != 0x7d))
    26782683    {
    26792684        putChars(bufPtr, " saddr=", 7);
    26802685        bufPtr += itocstrCStyle((insnCode2>>16)&0xff, bufPtr, 6, 16);
    26812686    }
     2687   
    26822688    output.forward(bufPtr-bufStart);
    26832689}
  • CLRadeonExtender/trunk/tests/amdasm/GCNDisasmOpc15.cpp

    r4778 r4779  
    32543254    { 0xf8001a5bU, 0x7c1b5d74U, true, "        exp             "
    32553255        "param5, v116, v93, off, v124 done vm vsrc2=0x1b\n" },
     3256    /* FLAT encoding */
     3257    { 0xdc230000U, 0x2f7d00bbU, true, "        flat_load_ubyte "
     3258                "v47, v[187:188] glc slc\n" },
     3259    { 0xdc220000U, 0x2f7d00bbU, true, "        flat_load_ubyte v47, v[187:188] slc\n" },
     3260    { 0xdc200000U, 0x2f7d00bbU, true, "        flat_load_ubyte v47, v[187:188]\n" },
     3261    { 0xdc200000U, 0x2f0000bbU, true, "        flat_load_ubyte "
     3262                "v47, v[187:188] saddr=0x0\n" },
     3263    { 0xdc201000U, 0x2f7d00bbU, true, "        flat_load_ubyte v47, v[187:188] dlc\n" },
     3264    { 0xdc2017d3U, 0x2f7d00bbU, true, "        flat_load_ubyte "
     3265        "v47, v[187:188] inst_offset:2003 dlc\n" },
     3266    { 0xdc201fd3U, 0x2f7d00bbU, true, "        flat_load_ubyte "
     3267        "v47, v[187:188] inst_offset:2003 dlc\n" },
    32563268    { 0, 0, false, nullptr }
    32573269};
Note: See TracChangeset for help on using the changeset viewer.