Changeset 4809 in CLRX


Ignore:
Timestamp:
Jul 19, 2019, 4:24:59 PM (4 weeks ago)
Author:
matszpk
Message:

CLRadeonExtender: GCNAsm: Add extra DPP_CTRLs and FI flag to DPP for GFX10.

Location:
CLRadeonExtender/trunk
Files:
4 edited

Legend:

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

    r4807 r4809  
    12731273                ((src1Op.vopMods&VOPOP_NEG) ? (1U<<22) : 0) |
    12741274                ((src1Op.vopMods&VOPOP_ABS) ? (1U<<23) : 0) |
     1275                (extraMods.fi ? 0x40000U : 0) |
    12751276                (uint32_t(extraMods.bankMask)<<24) |
    12761277                (uint32_t(extraMods.rowMask)<<28));
  • CLRadeonExtender/trunk/amdasm/GCNAsmHelpers.cpp

    r4808 r4809  
    18761876    bool haveSext = false, haveOpsel = false;
    18771877    bool haveNegHi = false, haveOpselHi = false;
     1878    bool haveFi = false;
    18781879    bool haveDPP = false, haveSDWA = false;
    18791880   
     
    18821883        *extraMods = { 6, 0, cxbyte((withSDWAOperands>=2)?6:0),
    18831884                    cxbyte((withSDWAOperands>=3)?6:0),
    1884                     15, 15, 0xe4 /* TODO: why not 0xe4? */, false, false };
     1885                    15, 15, 0xe4 /* TODO: why not 0xe4? */, false, false, false };
    18851886   
    18861887    skipSpacesToEnd(linePtr, end);
     
    24462447                        }
    24472448                    }
     2449                    else if ((arch & ARCH_GCN_1_5)!=0 &&
     2450                        (::strcmp(mod, "row_share")==0 || ::strcmp(mod, "row_xmask")==0))
     2451                    {
     2452                        // row_XXX (shl, shr, ror) modifier (shift is in 1-15)
     2453                        skipSpacesToEnd(linePtr, end);
     2454                        if (linePtr!=end && *linePtr==':')
     2455                        {
     2456                            skipCharAndSpacesToEnd(linePtr, end);
     2457                            cxbyte shift = 0;
     2458                            if (parseImm(asmr, linePtr, shift , nullptr, 4, WS_UNSIGNED))
     2459                            {
     2460                                if (haveDppCtrl)
     2461                                    asmr.printWarning(modPlace,
     2462                                              "DppCtrl is already defined");
     2463                                haveDppCtrl = true;
     2464                                extraMods->dppCtrl = (0x150U +
     2465                                            (mod[4]=='x' ? 0x10 : 0)) | shift;
     2466                            }
     2467                            else
     2468                                good = false;
     2469                        }
     2470                        else
     2471                            ASM_NOTGOOD_BY_ERROR(linePtr, (std::string(
     2472                                        "Expected ':' before ")+mod).c_str())
     2473                    }
     2474                    else if ((arch & ARCH_GCN_1_5)!=0 && ::strcmp(mod, "fi")==0)
     2475                    {
     2476                        bool fi = false;
     2477                        good &= parseModEnable(asmr, linePtr, fi, "vop3 modifier");
     2478                        extraMods->fi = fi;
     2479                    }
    24482480                    else if (::strcmp(mod, "sdwa")==0)
    24492481                    {
     
    24832515        opMods.sextMod!=0 || haveSDWA);
    24842516    const bool vopDPP = (haveDppCtrl || haveBoundCtrl || haveBankMask || haveRowMask ||
    2485             haveDPP);
     2517            haveDPP || haveFi);
    24862518    const bool isGCN14 = (arch & ARCH_GCN_1_4_5) != 0;
    24872519    // mul/div modifier does not apply to vop3 if RXVEGA (this case will be checked later)
  • CLRadeonExtender/trunk/amdasm/GCNAsmInternals.h

    r4667 r4809  
    148148    bool needSDWA;
    149149    bool needDPP;
     150    bool fi; // DPP GFX10
    150151};
    151152
  • CLRadeonExtender/trunk/tests/amdasm/GCNAsmOpc15.cpp

    r4808 r4809  
    11021102    { "   v_cndmask_b32  v154, v190, v107, vcc row_bcast31", 0, 0, false, false,
    11031103        "test.s:1:41: Error: Unknown VOP modifier\n" },
     1104    /* VOP DPP for GFX10 */
     1105    { "v_add_f32       v154, v190, v107 row_share:6 bank_mask:0 row_mask:0\n",
     1106        0x0734d6faU, 0x156be, true, true, "" },
     1107    { "v_add_f32       v154, v190, v107 row_share:15 bank_mask:0 row_mask:0\n",
     1108        0x0734d6faU, 0x15fbe, true, true, "" },
     1109    { "v_add_f32       v154, v190, v107 row_share:0 bank_mask:0 row_mask:0\n",
     1110        0x0734d6faU, 0x150be, true, true, "" },
     1111    { "v_add_f32       v154, v190, v107 row_xmask:6 bank_mask:0 row_mask:0\n",
     1112        0x0734d6faU, 0x166be, true, true, "" },
     1113    { "v_add_f32       v154, v190, v107 row_xmask:15 bank_mask:0 row_mask:0\n",
     1114        0x0734d6faU, 0x16fbe, true, true, "" },
     1115    { "v_add_f32       v154, v190, v107 row_xmask:0 bank_mask:0 row_mask:0\n",
     1116        0x0734d6faU, 0x160be, true, true, "" },
     1117    { "v_add_f32       v154, v190, v107 row_mirror bank_mask:0 row_mask:0 fi\n",
     1118        0x0734d6faU, 0x540be, true, true, "" },
     1119    { "v_add_f32       v154, v190, v107 row_mirror bank_mask:0 row_mask:0 fi:1\n",
     1120        0x0734d6faU, 0x540be, true, true, "" },
     1121    { "v_add_f32       v154, v190, v107 row_mirror bank_mask:0 row_mask:0 fi  :  1\n",
     1122        0x0734d6faU, 0x540be, true, true, "" },
     1123    { "v_add_f32       v154, v190, v107 row_mirror bank_mask:0 row_mask:0 fi:0\n",
     1124        0x0734d6faU, 0x140be, true, true, "" },
    11041125    { nullptr, 0, 0, false, false, 0 }
    11051126};
Note: See TracChangeset for help on using the changeset viewer.