Changeset 4829 in CLRX


Ignore:
Timestamp:
Jul 22, 2019, 9:33:33 PM (4 weeks ago)
Author:
matszpk
Message:

CLRadeonExtender: GCNAsm: Add VOP3 testcases for GFX10. Fixes for VOP3 for GFX10.

Location:
CLRadeonExtender/trunk
Files:
2 edited

Legend:

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

    r4824 r4829  
    19461946    const GCNInsnMode mode1 = (gcnInsn.mode & GCN_MASK1);
    19471947    const GCNInsnMode mode2 = (gcnInsn.mode & GCN_MASK2);
    1948     const bool isGCN12 = (arch & ARCH_GCN_1_2_4)!=0;
    1949     const bool isGCN14 = (arch & ARCH_GCN_1_4)!=0;
     1948    const bool isGCN12 = (arch & ARCH_GCN_1_2_4_5)!=0;
     1949    const bool isGCN14 = (arch & ARCH_GCN_1_4_5)!=0;
    19501950    const bool vop3p = (gcnInsn.mode & GCN_VOP3_VOP3P) != 0;
    19511951    if (gcnVOPEnc!=GCNVOPEnc::NORMAL)
     
    22162216    uint32_t words[2];
    22172217    cxuint wordsNum = 2;
     2218    const uint32_t encoding = (arch & ARCH_GCN_1_5)!=0 ? 0xd4000000U : 0xd0000000U;
    22182219    if (gcnInsn.encoding == GCNENC_VOP3B)
    22192220    {
    22202221        // VOP3B encoding
    22212222        if (!isGCN12)
    2222             SLEV(words[0], 0xd0000000U | (uint32_t(gcnInsn.code1)<<17) |
     2223            SLEV(words[0], encoding | (uint32_t(gcnInsn.code1)<<17) |
    22232224                (dstReg.bstart()&0xff) | (uint32_t(sdstReg.bstart())<<8));
    22242225        else
    2225             SLEV(words[0], 0xd0000000U | (uint32_t(gcnInsn.code1)<<16) |
     2226            SLEV(words[0], encoding | (uint32_t(gcnInsn.code1)<<16) |
    22262227                (dstReg.bstart()&0xff) | (uint32_t(sdstReg.bstart())<<8) |
    22272228                ((modifiers&VOP3_CLAMP) ? 0x8000 : 0));
     
    22312232        // VOP3A
    22322233        if (!isGCN12)
    2233             SLEV(words[0], 0xd0000000U | (uint32_t(gcnInsn.code1)<<17) |
     2234            SLEV(words[0], encoding | (uint32_t(gcnInsn.code1)<<17) |
    22342235                (dstReg.bstart()&0xff) | ((modifiers&VOP3_CLAMP) ? 0x800: 0) |
    22352236                ((src0Op.vopMods & VOPOP_ABS) ? 0x100 : 0) |
     
    22422243            src1Op.vopMods!=0 || src2Op.vopMods!=0)
    22432244            // new VOP3 for GCN 1.2
    2244             SLEV(words[0], 0xd0000000U | (uint32_t(gcnInsn.code1)<<16) |
     2245            SLEV(words[0], encoding | (uint32_t(gcnInsn.code1)<<16) |
    22452246                (dstReg.bstart()&0xff) | ((modifiers&VOP3_CLAMP) ? 0x8000: 0) |
    22462247                (vop3p ? (uint32_t(opMods.negMod>>4) << 8) /* VOP3P NEG_HI */ :
     
    22522253        else // VINTRP
    22532254        {
    2254             SLEV(words[0], 0xd4000000U | (src1Op.range.bstart()&0xff) |
     2255            const uint32_t encoding2 = (arch & ARCH_GCN_1_5)!=0 ?
     2256                                    0xc9000000U : 0xd4000000U;
     2257            SLEV(words[0], encoding2 | (src1Op.range.bstart()&0xff) |
    22552258                (uint32_t(src0Op.range.bstart()>>6)<<8) |
    22562259                (uint32_t(src0Op.range.bstart()&63)<<10) |
  • CLRadeonExtender/trunk/tests/amdasm/GCNAsmOpc15.cpp

    r4828 r4829  
    21862186    { "    v_cmp_lt_i16  s[42:43], v50, v107 op_sel:[0,0,1]",
    21872187        0xd489402aU, 0x0002d732U, true, true, "" },
     2188    /* VOP3 encoding */
     2189    { "   v_mad_legacy_f32 v55, v79, v166, v229",
     2190        0xd5400037U, 0x07974d4fU, true, true, "" },
     2191    { "   v_mad_legacy_f32 v55, v79, v166, s101",
     2192        0xd5400037U, 0x1974d4fU, true, true, "" },
     2193    { "   v_mad_legacy_f32 v55, v79, s63, v229",
     2194        0xd5400037U, 0x07947f4fU, true, true, "" },
     2195    { "   v_mad_legacy_f32 v55, s79, v166, v229",
     2196        0xd5400037U, 0x07974c4fU, true, true, "" },
     2197    { "   v_mad_legacy_f32 v55, abs(v79), v166, v229",
     2198        0xd5400137U, 0x07974d4fU, true, true, "" },
     2199    { "   v_mad_legacy_f32 v55, v79, abs(v166), v229",
     2200        0xd5400237U, 0x07974d4fU, true, true, "" },
     2201    { "   v_mad_legacy_f32 v55, v79, v166, abs(v229)",
     2202        0xd5400437U, 0x07974d4fU, true, true, "" },
     2203    { "   v_mad_legacy_f32 v55, v79, v166, v229 abs:4",
     2204        0xd5400437U, 0x07974d4fU, true, true, "" },
     2205    { "   v_mad_legacy_f32 v55, -v79, v166, v229",
     2206        0xd5400037U, 0x27974d4fU, true, true, "" },
     2207    { "   v_mad_legacy_f32 v55, v79, -v166, v229",
     2208        0xd5400037U, 0x47974d4fU, true, true, "" },
     2209    { "   v_mad_legacy_f32 v55, v79, v166, -v229",
     2210        0xd5400037U, 0x87974d4fU, true, true, "" },
     2211    { "   v_mad_legacy_f32 v55, v79, v166, v229 neg:4",
     2212        0xd5400037U, 0x87974d4fU, true, true, "" },
     2213    { "   v_mad_legacy_f32 v55, v79, v166, v229 neg:[0,0,1]",
     2214        0xd5400037U, 0x87974d4fU, true, true, "" },
     2215    { "   v_mad_legacy_f32 v55, v79, v166, v229 clamp",
     2216        0xd5408037U, 0x07974d4fU, true, true, "" },
     2217    { "   v_mad_legacy_f32 v55, v79, v166, v229 mul:2",
     2218        0xd5400037U, 0x0f974d4fU, true, true, "" },
     2219    { "   v_mad_legacy_f32 v55, v79, v166, v229 mul:4",
     2220        0xd5400037U, 0x17974d4fU, true, true, "" },
     2221    { "   v_mad_legacy_f32 v55, v79, v166, v229 div:2",
     2222        0xd5400037U, 0x1f974d4fU, true, true, "" },
     2223    { "   v_mad_legacy_f32 v55, 56, v166, v229",
     2224        0xd5400037U, 0x07974cb8U, true, true, "" },
     2225    { "bx=51;v_mad_legacy_f32 v55, bx+5, v166, v229",
     2226        0xd5400037U, 0x07974cb8U, true, true, "" },
     2227    { "   v_mad_legacy_f32 v55, v56, -15, v229",
     2228        0xd5400037U, 0x07959f38U, true, true, "" },
     2229    { "vxt=15; v_mad_legacy_f32 v55, v56, -vxt, v229",
     2230        0xd5400037U, 0x07959f38U, true, true, "" },
     2231    { "   v_mad_legacy_f32 v55, v79, v166, 45",
     2232        0xd5400037U, 0x02b74d4fU, true, true, "" },
     2233    { "gg=22;v_mad_legacy_f32 v55, v79, v166, 2*gg+1",
     2234        0xd5400037U, 0x02b74d4fU, true, true, "" },
     2235    /* one SGPR */
     2236    { "    v_mad_legacy_f32 v55, s79, v166, s79",
     2237        0xd5400037U, 0x013f4c4fU, true, true, "" },
     2238    { "    v_mad_legacy_f32 v55, s79, s79, s79",
     2239        0xd5400037U, 0x013c9e4fU, true, true, "" },
     2240    /* two SGPRs */
     2241    { "    v_mad_legacy_f32 v55, s79, s99, v229",
     2242        0xd5400037U, 0x0794c64fU, true, true, "" },
     2243    { "    v_mad_legacy_f32 v55, s79, v99, s18",
     2244        0xd5400037U, 0x004ac64fU, true, true, "" },
     2245    /* VOP3 errors */
     2246    { "v_mad_legacy_f32 v55, 66, v166, v229", 0, 0, false, false,
     2247        "test.s:1:23: Error: Literal in VOP3 is illegal\n" },
     2248    { "v_mad_legacy_f32 v55, s79, 743, v229", 0, 0, false, false,
     2249        "test.s:1:28: Error: Literal in VOP3 is illegal\n" },
     2250    { "v_mad_legacy_f32 v55, s79, v44, 6434", 0, 0, false, false,
     2251        "test.s:1:33: Error: Literal in VOP3 is illegal\n" },
     2252    { "    v_mad_legacy_f32 v55, s79, s166, v229", 0, 0, false, false,
     2253        "test.s:1:32: Error: Scalar register number out of range\n" },
     2254    { "   v_mad_legacy_f32 v55, v79, v166, v229 clamp ,", 0, 0, false, false,
     2255        "test.s:1:48: Error: Some garbages at VOP modifier place\n" },
    21882256    { nullptr, 0, 0, false, false, 0 }
    21892257};
Note: See TracChangeset for help on using the changeset viewer.