Changeset 3578 in CLRX


Ignore:
Timestamp:
Jan 1, 2018, 6:09:54 PM (9 months ago)
Author:
matszpk
Message:

CLRadeonExtender: GCNRegVar: Add rules and targets for additional RX VEGA encodings (SDWAB and extra modes in SDWA).

Location:
CLRadeonExtender/trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • CLRadeonExtender/trunk/CLRX/amdasm/AsmDefs.h

    r3577 r3578  
    507507    GCNFIELD_DPPSDWA_SRC0,
    508508    GCNFIELD_DPPSDWA_SSRC0,
    509     GCNFIELD_FLAT_SADDR
     509    GCNFIELD_FLAT_SADDR,
     510    GCNFIELD_SDWAB_SDST
    510511};
    511512
  • CLRadeonExtender/trunk/amdasm/GCNAssembler.cpp

    r3575 r3578  
    299299        case GCNFIELD_DPPSDWA_SSRC0:
    300300            rstart = code2&0xff;
     301            break;
     302        case GCNFIELD_SDWAB_SDST:
     303            rstart = (code2>>8)&0x7f;
    301304            break;
    302305        default:
     
    16721675            if (rvus[2].regField != ASMFIELD_NONE && src0Op.range.isNonVGPR())
    16731676                rvus[2].regField = GCNFIELD_DPPSDWA_SSRC0;
    1674             if (rvus[3].regField != ASMFIELD_NONE)
     1677            if (rvus[3].regField != ASMFIELD_NONE && src1Op.range.isNonVGPR())
    16751678                rvus[3].regField = GCNFIELD_VOP_SSRC1;
    16761679        }
     
    20952098            // fix for extra type operand from SDWA
    20962099            AsmRegVarUsage* rvus = gcnAsm->instrRVUs;
     2100            if (rvus[0].regField != ASMFIELD_NONE)
     2101                rvus[0].regField = GCNFIELD_SDWAB_SDST;
    20972102            if (rvus[1].regField != ASMFIELD_NONE && src0Op.range.isNonVGPR())
    20982103                rvus[1].regField = GCNFIELD_DPPSDWA_SSRC0;
    2099             if (rvus[2].regField != ASMFIELD_NONE)
     2104            if (rvus[2].regField != ASMFIELD_NONE && src1Op.range.isNonVGPR())
    21002105                rvus[2].regField = GCNFIELD_VOP_SSRC1;
    21012106        }
  • CLRadeonExtender/trunk/tests/amdasm/GCNRegVarUsage.cpp

    r3575 r3578  
    16661666        true, ""
    16671667    },
     1668    {   /* 27: SSRC0 in SDWA, SDST in SDWAB (GFX900) */
     1669        ".gpu gfx900\n"
     1670        ".regvar rax:v, rbx:v, rcx:s, rex:s\n"
     1671        ".regvar cc1:s:2\n"
     1672        "v_mov_b32 rax, rbx dst_sel:w1 src0_sel:b2\n"
     1673        "v_mov_b32 rax, rcx dst_sel:w1 src0_sel:b2\n"
     1674        "v_cmp_gt_u32 cc1, rax, rbx src0_sel:b2\n"
     1675        "v_cmp_gt_u32 cc1, rex, rbx src0_sel:b2\n"
     1676        "v_add_f32 rax, rex, rbx dst_sel:w1 src0_sel:b2\n"
     1677       
     1678        "v_mov_b32 v2, v7 dst_sel:w1 src0_sel:b2\n"
     1679        "v_mov_b32 v3, s8 dst_sel:w1 src0_sel:b2\n"
     1680        "v_cmp_gt_u32 s[5:6], v5, v10 src0_sel:b2\n"
     1681        "v_cmp_gt_u32 s[5:6], s9, v10 src0_sel:b2\n"
     1682        "v_add_f32 v4, s9, v10 dst_sel:w1 src0_sel:b2\n",
     1683        {
     1684            // v_mov_b32 rax, rbx dst_sel:w1 src0_sel:b2
     1685            { 0, "rax", 0, 1, GCNFIELD_VOP_VDST, ASMRVU_WRITE, 1 },
     1686            { 0, "rbx", 0, 1, GCNFIELD_DPPSDWA_SRC0, ASMRVU_READ, 1 },
     1687            // v_mov_b32 rax, rcx dst_sel:w1 src0_sel:b2
     1688            { 8, "rax", 0, 1, GCNFIELD_VOP_VDST, ASMRVU_WRITE, 1 },
     1689            { 8, "rcx", 0, 1, GCNFIELD_DPPSDWA_SSRC0, ASMRVU_READ, 1 },
     1690            // v_cmp_gt_u32 cc1, rax, rbx dst_sel:w1 src0_sel:b2
     1691            { 16, "cc1", 0, 2, GCNFIELD_SDWAB_SDST, ASMRVU_WRITE, 1 },
     1692            { 16, "rax", 0, 1, GCNFIELD_DPPSDWA_SRC0, ASMRVU_READ, 1 },
     1693            { 16, "rbx", 0, 1, GCNFIELD_VOP_VSRC1, ASMRVU_READ, 1 },
     1694            // v_cmp_gt_u32 cc1, rax, rex src0_sel:b2
     1695            { 24, "cc1", 0, 2, GCNFIELD_SDWAB_SDST, ASMRVU_WRITE, 1 },
     1696            { 24, "rex", 0, 1, GCNFIELD_DPPSDWA_SSRC0, ASMRVU_READ, 1 },
     1697            { 24, "rbx", 0, 1, GCNFIELD_VOP_VSRC1, ASMRVU_READ, 1 },
     1698            // v_add_f32 rax, rex, rbx dst_sel:w1 src0_sel:b2
     1699            { 32, "rax", 0, 1, GCNFIELD_VOP_VDST, ASMRVU_WRITE, 1 },
     1700            { 32, "rex", 0, 1, GCNFIELD_DPPSDWA_SSRC0, ASMRVU_READ, 1 },
     1701            { 32, "rbx", 0, 1, GCNFIELD_VOP_VSRC1, ASMRVU_READ, 1 },
     1702            // v_mov_b32 v2, v7 dst_sel:w1 src0_sel:b2
     1703            { 40, nullptr, 256+2, 256+3, GCNFIELD_VOP_VDST, ASMRVU_WRITE, 0 },
     1704            { 40, nullptr, 256+7, 256+8, GCNFIELD_DPPSDWA_SRC0, ASMRVU_READ, 0 },
     1705            // v_mov_b32 v3, s8 dst_sel:w1 src0_sel:b2
     1706            { 48, nullptr, 256+3, 256+4, GCNFIELD_VOP_VDST, ASMRVU_WRITE, 0 },
     1707            { 48, nullptr, 8, 9, GCNFIELD_DPPSDWA_SSRC0, ASMRVU_READ, 0 },
     1708            // v_cmp_gt_u32 s[5:6], v5, v10 src0_sel:b2
     1709            { 56, nullptr, 5, 7, GCNFIELD_SDWAB_SDST, ASMRVU_WRITE, 0 },
     1710            { 56, nullptr, 256+5, 256+6, GCNFIELD_DPPSDWA_SRC0, ASMRVU_READ, 0 },
     1711            { 56, nullptr, 256+10, 256+11, GCNFIELD_VOP_VSRC1, ASMRVU_READ, 0 },
     1712            // v_cmp_gt_u32 s[5:6], s9, v10 src0_sel:b2
     1713            { 64, nullptr, 5, 7, GCNFIELD_SDWAB_SDST, ASMRVU_WRITE, 0 },
     1714            { 64, nullptr, 9, 10, GCNFIELD_DPPSDWA_SSRC0, ASMRVU_READ, 0 },
     1715            { 64, nullptr, 256+10, 256+11, GCNFIELD_VOP_VSRC1, ASMRVU_READ, 0 },
     1716            // v_add_f32 v4, s9, v10 dst_sel:w1 src0_sel:b2
     1717            { 72, nullptr, 256+4, 256+5, GCNFIELD_VOP_VDST, ASMRVU_WRITE, 0 },
     1718            { 72, nullptr, 9, 10, GCNFIELD_DPPSDWA_SSRC0, ASMRVU_READ, 0 },
     1719            { 72, nullptr, 256+10, 256+11, GCNFIELD_VOP_VSRC1, ASMRVU_READ, 0 }
     1720        },
     1721        true, ""
     1722    }
    16681723};
    16691724
     
    17401795                    cxuint(expectedRvu.align), cxuint(resultRvu.align));
    17411796    }
     1797    assertString("testGCNRegVarUsages", testCaseName+".errorMessages",
     1798              testCase.errorMessages, errorStream.str());
    17421799    assertTrue("testGCNRegVarUsages", testCaseName+"length",
    17431800                   j == testCase.regVarUsages.size());
    1744     assertString("testGCNRegVarUsages", testCaseName+".errorMessages",
    1745               testCase.errorMessages, errorStream.str());
    17461801}
    17471802
Note: See TracChangeset for help on using the changeset viewer.