Changeset 4847 in CLRX


Ignore:
Timestamp:
Jul 26, 2019, 1:25:05 PM (5 months ago)
Author:
matszpk
Message:

CLRadeonExtender: GCNAsm: Use isGCNXXX in GCNAsmHelpers. Fix typo in GCNDisasmDecode.

Location:
CLRadeonExtender/trunk/amdasm
Files:
2 edited

Legend:

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

    r4843 r4847  
    455455    skipSpacesToEnd(linePtr, end);
    456456    const char* sgprRangePlace = linePtr;
    457     const bool isGCN15 = ((arch & ARCH_GCN_1_5)!=0);
    458457    if (linePtr == end)
    459458    {
     
    487486   
    488487    /* parse single SGPR */
     488    const bool isGCN11No5 = (arch & ARCH_GCN_1_1_2_4) != 0;
    489489    const bool isGCN14 = (arch & ARCH_GCN_1_4_5) != 0;
     490    const bool isGCN15 = (arch & ARCH_GCN_1_5) != 0;
    490491    const cxuint ttmpSize = isGCN14 ? 16 : 12;
    491492    const cxuint ttmpStart = isGCN14 ? 108 : 112;
     
    561562        toLowerString(regName);
    562563       
    563         if ((arch & ARCH_GCN_1_5) != 0 && ::strcmp(regName, "null")==0)
     564        if (isGCN15 && ::strcmp(regName, "null")==0)
    564565        {
    565566            regPair = { 125, 126 };
     
    582583            loHiReg = 126;
    583584        }
    584         else if ((arch & ARCH_GCN_1_4_5) == 0 && regName[0]=='t')
     585        else if (!isGCN14 && regName[0]=='t')
    585586        {
    586587            /* tma,tba */
     
    607608            return true;
    608609        }
    609         else if (arch&ARCH_GCN_1_1_2_4)
     610        else if (isGCN11No5)
    610611        {
    611612            if (::strncmp(regName, "flat_scratch", 12)==0)
     
    11181119             cxuint regsNum, Flags instrOpMask, AsmRegField regField)
    11191120{
     1121    const bool isGCN12 = (arch & ARCH_GCN_1_2_4_5)!=0;
     1122    const bool isGCN14 = (arch & ARCH_GCN_1_4_5)!=0;
     1123   
    11201124    if (outTargetExpr!=nullptr)
    11211125        outTargetExpr->reset();
     
    11441148                             instrOpMask & ~INSTROP_VOP3MODS, regField);
    11451149       
    1146         if ((arch & ARCH_GCN_1_2_4_5)!=0 &&
    1147             (instrOpMask & (INSTROP_NOSEXT|INSTROP_VOP3P))==0 &&
     1150        if (isGCN12 && (instrOpMask & (INSTROP_NOSEXT|INSTROP_VOP3P))==0 &&
    11481151            linePtr+4 <= end && strncasecmp(linePtr, "sext", 4)==0)
    11491152        {
     
    12811284            operand.range = {0, 0};
    12821285           
    1283             auto regNameTblEnd = (arch & ARCH_GCN_1_4_5) ?
     1286            auto regNameTblEnd = isGCN14 ?
    12841287                        ssourceNamesGCN14Tbl + ssourceNamesGCN14TblSize :
    12851288                        ssourceNamesTbl + ssourceNamesTblSize;
    12861289            auto regNameIt = binaryMapFind(
    1287                     (arch & ARCH_GCN_1_4_5) ? ssourceNamesGCN14Tbl : ssourceNamesTbl,
     1290                    isGCN14 ? ssourceNamesGCN14Tbl : ssourceNamesTbl,
    12881291                    regNameTblEnd, regName, CStringLess());
    12891292           
     
    14211424                                return true;
    14221425                            case 0x3e22f983: // 1/(2*PI)
    1423                                 if (arch&ARCH_GCN_1_2_4_5)
     1426                                if (isGCN12)
    14241427                                {
    14251428                                    operand.range = { 248, 0 };
     
    14741477                                return true;
    14751478                            case 0x3118: // 1/(2*PI)
    1476                                 if (arch&ARCH_GCN_1_2_4_5)
     1479                                if (isGCN12)
    14771480                                {
    14781481                                    operand.range = { 248, 0 };
     
    15121515                                return true;
    15131516                            case 0x3e22f983: // 1/(2*PI)
    1514                                 if (arch&ARCH_GCN_1_2_4_5)
     1517                                if (isGCN12)
    15151518                                {
    15161519                                    operand.range = { 248, 0 };
     
    15501553                                return true;
    15511554                            case 0x3fc45f30: // 1/(2*PI)
    1552                                 if (arch&ARCH_GCN_1_2_4_5)
     1555                                if (isGCN12)
    15531556                                {
    15541557                                    operand.range = { 248, 0 };
     
    18941897    mods = 0;
    18951898    const bool vop3p = (flags & PARSEVOP_VOP3P)!=0;
     1899   
     1900    const bool isGCN15 = (arch & ARCH_GCN_1_5)!=0;
    18961901   
    18971902    // main loop
     
    23722377                                        "Expected ':' before ")+mod).c_str())
    23732378                    }
    2374                     else if ((arch & ARCH_GCN_1_5)==0 && memcmp(mod, "wave_", 5)==0 &&
     2379                    else if (!isGCN15 && memcmp(mod, "wave_", 5)==0 &&
    23752380                        (::strcmp(mod+5, "shl")==0 || ::strcmp(mod+5, "shr")==0 ||
    23762381                            ::strcmp(mod+5, "rol")==0 || ::strcmp(mod+5, "ror")==0))
     
    24112416                        haveDppCtrl = true;
    24122417                    }
    2413                     else if ((arch & ARCH_GCN_1_5)==0 &&
    2414                         ::strncmp(mod, "row_bcast", 9)==0 && (
     2418                    else if (!isGCN15 && ::strncmp(mod, "row_bcast", 9)==0 && (
    24152419                        (mod[9]=='1' && mod[10]=='5' && mod[11]==0) ||
    24162420                        (mod[9]=='3' && mod[10]=='1' && mod[11]==0) || mod[9]==0))
     
    24512455                        }
    24522456                    }
    2453                     else if ((arch & ARCH_GCN_1_5)!=0 &&
    2454                         (::strcmp(mod, "row_share")==0 || ::strcmp(mod, "row_xmask")==0))
     2457                    else if (isGCN15 && (::strcmp(mod, "row_share")==0 || ::strcmp(mod, "row_xmask")==0))
    24552458                    {
    24562459                        // row_XXX (shl, shr, ror) modifier (shift is in 1-15)
     
    24762479                                        "Expected ':' before ")+mod).c_str())
    24772480                    }
    2478                     else if ((arch & ARCH_GCN_1_5)!=0 && ::strcmp(mod, "fi")==0)
     2481                    else if (isGCN15 && ::strcmp(mod, "fi")==0)
    24792482                    {
    24802483                        bool fi = false;
     
    24822485                        extraMods->fi = fi;
    24832486                    }
    2484                     else if ((arch & ARCH_GCN_1_5)!=0 && ::strcmp(mod, "dpp8")==0)
     2487                    else if (isGCN15 && ::strcmp(mod, "dpp8")==0)
    24852488                    {
    24862489                        skipSpacesToEnd(linePtr, end);
  • CLRadeonExtender/trunk/amdasm/GCNDisasmDecode.cpp

    r4833 r4847  
    22242224        putChars(bufPtr, " glc", 4);
    22252225   
    2226     // print SLD if supplied
     2226    // print SLC if supplied
    22272227    if (((!isGCN12 || isGCN15 ||
    22282228            gcnInsn.encoding==GCNENC_MTBUF) && (insnCode2 & 0x400000U)!=0) ||
Note: See TracChangeset for help on using the changeset viewer.