Ignore:
Timestamp:
May 29, 2017, 6:53:28 AM (2 years ago)
Author:
matszpk
Message:

CLRadeonExtender: GCNAsm: Add parametrizable modifers: abs, neg, sext.

File:
1 edited

Legend:

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

    r3095 r3096  
    15351535 * withSDWAOperands - specify number of operand for that modifier will be parsed */
    15361536bool GCNAsmUtils::parseVOPModifiers(Assembler& asmr, const char*& linePtr,
    1537                 uint16_t arch, cxbyte& mods, VOPExtraModifiers* extraMods, bool withClamp,
    1538                 cxuint withSDWAOperands)
     1537                uint16_t arch, cxbyte& mods, VOPOpModifiers& opMods,
     1538                VOPExtraModifiers* extraMods, bool withClamp, cxuint withSDWAOperands)
    15391539{
    15401540    const char* end = asmr.line+asmr.lineSize;
     
    15451545    bool haveBoundCtrl = false, haveDppCtrl = false;
    15461546    bool haveNeg = false, haveAbs = false;
     1547    bool haveSext = false;
    15471548   
    15481549    if (extraMods!=nullptr)
    15491550        *extraMods = { 6, 0, cxbyte((withSDWAOperands>=2)?6:0),
    15501551                    cxbyte((withSDWAOperands>=3)?6:0),
    1551                     15, 15, 0xe4 /* TODO: why not 0xe4? */, false, false, 0U, 0U };
     1552                    15, 15, 0xe4 /* TODO: why not 0xe4? */, false, false };
    15521553   
    15531554    skipSpacesToEnd(linePtr, end);
     
    16511652                    }
    16521653                }
    1653                 /*else if (::strcmp(mod, "abs")==0)
     1654                else if (::strcmp(mod, "abs")==0)
    16541655                {
    16551656                    cxbyte absVal = 0;
     
    16571658                    {
    16581659                        linePtr++;
    1659                         if (parseImm(asmr, linePtr, absVal, nullptr, 2, WS_UNSIGNED))
    1660                         {
    1661                             extraMods->absMod = absVal;
     1660                        if (parseImm(asmr, linePtr, absVal, nullptr, 3, WS_UNSIGNED))
     1661                        {
     1662                            opMods.absMod = absVal;
    16621663                            if (haveAbs)
    16631664                                asmr.printWarning(modPlace, "Abs is already defined");
     
    16741675                    {
    16751676                        linePtr++;
    1676                         if (parseImm(asmr, linePtr, negVal, nullptr, 2, WS_UNSIGNED))
    1677                         {
    1678                             extraMods->negMod = negVal;
     1677                        if (parseImm(asmr, linePtr, negVal, nullptr, 3, WS_UNSIGNED))
     1678                        {
     1679                            opMods.negMod = negVal;
    16791680                            if (haveNeg)
    16801681                                asmr.printWarning(modPlace, "Neg is already defined");
     
    16841685                    else
    16851686                        good = false;
    1686                 }*/
     1687                }
     1688                else if ((arch & ARCH_GCN_1_2_4) && ::strcmp(mod, "sext")==0)
     1689                {
     1690                    cxbyte sextVal = 0;
     1691                    if (linePtr!=end && *linePtr==':')
     1692                    {
     1693                        linePtr++;
     1694                        if (parseImm(asmr, linePtr, sextVal, nullptr, 2, WS_UNSIGNED))
     1695                        {
     1696                            opMods.sextMod = sextVal;
     1697                            if (haveSext)
     1698                                asmr.printWarning(modPlace, "Sext is already defined");
     1699                            haveSext = true;
     1700                        }
     1701                    }
     1702                    else
     1703                        good = false;
     1704                }
    16871705                else if (::strcmp(mod, "vop3")==0)
    16881706                {
Note: See TracChangeset for help on using the changeset viewer.