Changeset 3302 in CLRX


Ignore:
Timestamp:
Sep 3, 2017, 4:22:49 PM (13 months ago)
Author:
matszpk
Message:

CLRadeonExtender: GCNAsm: Small commenting and fixing.

File:
1 edited

Legend:

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

    r3250 r3302  
    125125}
    126126
     127// get read-write flags from current position
    127128cxbyte GCNUsageHandler::getRwFlags(AsmRegField regField,
    128129                   uint16_t rstart, uint16_t rend) const
     
    154155}
    155156
     157/* get register pair from specified field from instruction in current code position */
    156158std::pair<uint16_t,uint16_t> GCNUsageHandler::getRegPair(AsmRegField regField,
    157159                 cxbyte rwFlags) const
     
    296298}
    297299
     300/// get usage dependencies
     301/* linearDeps - lists of linked register fields (linked fields)
     302 * equalToDeps - lists of register fields should be equal */
    298303void GCNUsageHandler::getUsageDependencies(cxuint rvusNum, const AsmRegVarUsage* rvus,
    299304                cxbyte* linearDeps, cxbyte* equalToDeps) const
     
    355360};
    356361
     362// used while converting 32-bit SOPx encoding to 64-bit SOPx encoding
    357363static void tryPromoteConstImmToLiteral(GCNOperand& src0Op, uint16_t arch)
    358364{
    359365    if (!src0Op.range.isRegVar() && src0Op.range.start>=128 && src0Op.range.start<=208)
    360     {
     366    {   // convert integer const immediates
    361367        src0Op.value = src0Op.range.start<193? src0Op.range.start-128 :
    362368                192-src0Op.range.start;
     
    366372            ((src0Op.range.start>=240 && src0Op.range.start<248) ||
    367373             ((arch&ARCH_GCN_1_2_4)!=0 && src0Op.range.start==248)))
    368     {
     374    {   // floating point immediates to literal
    369375        src0Op.value = constImmFloatLiterals[src0Op.range.start-240];
    370376        src0Op.range.start = 255;
     
    372378}
    373379
     380// check whether reg range can be equal (regvar and registers)
    374381static inline bool regRangeCanEqual(const RegRange& r1, const RegRange& r2)
    375382{
     
    654661        {
    655662            const char* hwregNamePlace = linePtr;
     663            // choose hwReg names map
    656664            const size_t regMapSize = isGCN14 ? hwregNamesGCN14MapSize : hwregNamesMapSize;
    657665            const std::pair<const char*, cxuint>* regMap = isGCN14 ?
     
    863871static const char* sendMsgGSOPTable[] =
    864872{ "nop", "cut", "emit", "emit_cut" };
     873
     874static const size_t sendMsgGSOPTableSize = sizeof(sendMsgGSOPTable) / sizeof(const char*);
    865875
    866876bool GCNAsmUtils::parseSOPPEncoding(Assembler& asmr, const GCNAsmInstruction& gcnInsn,
     
    10581068                    {
    10591069                        toLowerString(name);
     1070                        // handle gs_op prefix
    10601071                        const size_t gsopNameIndex = (::strncmp(name, "gs_op_", 6) == 0)
    10611072                                    ? 6 : 0;
    10621073                        for (gsopIndex = 0; gsopIndex < 4; gsopIndex++)
    1063                             if (::strcmp(name+gsopNameIndex, sendMsgGSOPTable[gsopIndex])==0)
     1074                            if (::strcmp(name+gsopNameIndex,
     1075                                        sendMsgGSOPTable[gsopIndex])==0)
    10641076                                break;
    10651077                        if (gsopIndex==2 && gsopNameIndex==0)
     
    10731085                            }
    10741086                        }
    1075                         if (gsopIndex == 4)
     1087                        if (gsopIndex == sendMsgGSOPTableSize)
    10761088                        {   // not found
    10771089                            gsopIndex = 0;
     
    14271439}
    14281440
     1441// choose between 64-bit immediate (FP64) and 32-bit immediate
    14291442static Flags correctOpType(uint32_t regsNum, Flags typeMask)
    14301443{
     
    14921505    std::unique_ptr<AsmExpression> immExpr;
    14931506    if (mode1 == GCN_ARG1_IMM)
    1494     {
     1507    {   // for V_MADMK_FXxx instruction
    14951508        if (!skipRequiredComma(asmr, linePtr))
    14961509            return false;
     
    15131526   
    15141527    if (mode1 == GCN_ARG2_IMM)
    1515     {
     1528    {   // for V_MADAK_Fxx instruction
    15161529        if (!skipRequiredComma(asmr, linePtr))
    15171530            return false;
     
    22912304        }
    22922305        else if (mode1 != GCN_SRC12_NONE)
    2293         {
     2306        {   // if encoding have two or three source operands
    22942307            if (!skipRequiredComma(asmr, linePtr))
    22952308                return false;
     
    25742587                    INSTROP_SYMREGRANGE|INSTROP_READ);
    25752588        if (srcMode == GCN_2SRCS)
    2576         {
     2589        {   // insturction have second source
    25772590            if (!skipRequiredComma(asmr, linePtr))
    25782591                return false;
     
    26052618            good &= parseModEnable(asmr, linePtr, haveGds, "gds modifier");
    26062619        else if ((gcnInsn.mode & GCN_2OFFSETS) == 0) /* single offset */
    2607         {
     2620        {   // single offset
    26082621            if (::strcmp(name, "offset") == 0)
    26092622            {
     
    29482961            }
    29492962        }
     2963        // other modifiers
    29502964        else if (!isGCN12 && ::strcmp(name, "addr64")==0)
    29512965            good &= parseModEnable(asmr, linePtr, haveAddr64, "addr64 modifier");
     
    32303244        }
    32313245        else if (name[0] < 's')
    3232         {
     3246        {   // glc, lwe, r128, a16 modifiers
    32333247            if (::strcmp(name, "glc")==0)
    32343248                good &= parseModEnable(asmr, linePtr, haveGlc, "glc modifier");
     
    32453259            }
    32463260        }
     3261        // other modifiers
    32473262        else if (::strcmp(name, "tfe")==0)
    32483263            good &= parseModEnable(asmr, linePtr, haveTfe, "tfe modifier");
     
    33833398        toLowerString(name);
    33843399        if (name[0]=='m' && name[1]=='r' && name[2]=='t')
    3385         {   // mrt
     3400        {   // parse mrtX target
    33863401            if (name[3]!='z' || name[4]!=0)
    33873402            {
     
    33983413        }
    33993414        else if (name[0]=='p' && name[1]=='o' && name[2]=='s')
    3400         {
     3415        {   // parse pos target
    34013416            nameStart+=3;
    34023417            cxbyte posNum = cstrtobyte(nameStart, name+nameSize);
     
    34453460        skipSpacesToEnd(linePtr, end);
    34463461        vsrcPlaces[i] = linePtr;
     3462        // if not 'off', then parse vector register
    34473463        if (linePtr+2>=end || toLower(linePtr[0])!='o' || toLower(linePtr[1])!='f' ||
    34483464            toLower(linePtr[2])!='f' || (linePtr+3!=end && isAlnum(linePtr[3])))
     
    35473563    const cxuint dregsNum = ((gcnInsn.mode&GCN_DSIZE_MASK)>>GCN_SHIFT2)+1;
    35483564    if ((gcnInsn.mode & GCN_FLAT_ADST) == 0)
    3549     {
     3565    {   // first is destination
    35503566        vdstPlace = linePtr;
    35513567       
     
    35713587    }
    35723588    else
    3573     {
     3589    {   // first is data
    35743590        skipSpacesToEnd(linePtr, end);
    35753591        if (flatMode == GCN_FLAT_SCRATCH && linePtr+3<=end &&
Note: See TracChangeset for help on using the changeset viewer.