Changeset 4806 in CLRX


Ignore:
Timestamp:
Jul 19, 2019, 9:28:27 AM (5 months ago)
Author:
matszpk
Message:

CLRadeonExtender: GCNAsm: Add VOP3/VOP2 encoding testcases for GFX10. Fix encodeVOP3Words for encoding for GFX10.

Location:
CLRadeonExtender/trunk
Files:
2 edited

Legend:

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

    r4805 r4806  
    12951295            (uint32_t(gcnInsn.code2)<<16) | ((modifiers&VOP3_CLAMP) ? 0x8000 : 0) :
    12961296            (uint32_t(gcnInsn.code2)<<17) | ((modifiers&VOP3_CLAMP) ? 0x800 : 0);
     1297    cxuint encoding = (arch & ARCH_GCN_1_5)!=0 ? 0xd4000000U : 0xd0000000U;
    12971298    if (haveDstCC) // if VOP3B
    1298         SLEV(words[0], 0xd0000000U | code |
     1299        SLEV(words[0], encoding | code |
    12991300            (dstReg.bstart()&0xff) | (uint32_t(dstCCReg.bstart())<<8));
    13001301    else // if VOP3A
    1301         SLEV(words[0], 0xd0000000U | code | (dstReg.bstart()&0xff) |
     1302        SLEV(words[0], encoding | code | (dstReg.bstart()&0xff) |
    13021303            ((src0Op.vopMods & VOPOP_ABS) ? 0x100 : 0) |
    13031304            ((src1Op.vopMods & VOPOP_ABS) ? 0x200 : 0) |
  • CLRadeonExtender/trunk/tests/amdasm/GCNAsmOpc15.cpp

    r4805 r4806  
    750750    { "    v_add_f32  v154, s21, v107", 0x0734d615U, 0, false, true, "" },
    751751    { " fla=%v154;   v_add_f32  fla, s21, v107", 0x0734d615U, 0, false, true, "" },
     752    { "    v_add_f32  v154, v21, v107 vop3", 0xd503009aU, 0x0002d715U, true, true, "" },
     753    { "    v_add_f32  v154, v21, v107 vop3:1", 0xd503009aU, 0x0002d715U, true, true, "" },
     754    { "    v_add_f32_e64  v154, v21, v107", 0xd503009aU, 0x0002d715U, true, true, "" },
     755    { "    v_add_f32_e64  v154, v21, v107 vop3:0",
     756        0xd503009aU, 0x0002d715U, true, true, "" },
     757    { "    v_add_f32  v154, v21, s98", 0xd503009aU, 0x0000c515U, true, true, "" },
     758    { "    v_add_f32  v154, abs(v21), v107", 0xd503019aU, 0x0002d715U, true, true, "" },
     759    { "    v_add_f32  v154, |v21|, v107", 0xd503019aU, 0x0002d715U, true, true, "" },
     760    { "dd=%v21; v_add_f32  v154, |dd|, v107", 0xd503019aU, 0x0002d715U, true, true, "" },
     761    { "    v_add_f32  v154, abs(v21), abs(v107)",
     762        0xd503039aU, 0x0002d715U, true, true, "" },
     763    { "    v_add_f32  v154, v21, v107 abs:3",
     764        0xd503039aU, 0x0002d715U, true, true, "" },
     765    { "    v_add_f32  v154, v21, abs(v107)", 0xd503029aU, 0x0002d715U, true, true, "" },
     766    { "    v_add_f32  v154, -v21, v107", 0xd503009aU, 0x2002d715U, true, true, "" },
     767    { "    v_add_f32  v154, v21, -v107", 0xd503009aU, 0x4002d715U, true, true, "" },
     768    { "    v_add_f32  v154, v21, v107 neg:2", 0xd503009aU, 0x4002d715U, true, true, "" },
     769    { "    v_add_f32  v154, v21, v107 neg:[0,1]",
     770        0xd503009aU, 0x4002d715U, true, true, "" },
     771    { "    v_add_f32  v154, v21, v107 neg: [ 0  , 1  ] ",
     772        0xd503009aU, 0x4002d715U, true, true, "" },
     773    { "    v_add_f32  v154, -v21, -v107", 0xd503009aU, 0x6002d715U, true, true, "" },
     774    { "    v_add_f32  v154, -abs(v21), -abs(v107)",
     775        0xd503039aU, 0x6002d715U, true, true, "" },
     776    { "    v_add_f32  v154, v21, v107 neg:3 abs:3",
     777        0xd503039aU, 0x6002d715U, true, true, "" },
     778    { "    v_add_f32  v154, v21, v107 neg:[1,1] abs:[1,1]",
     779        0xd503039aU, 0x6002d715U, true, true, "" },
     780    { "    v_add_f32  v154, v21, v107 mul:2", 0xd503009aU, 0x0802d715U, true, true, "" },
     781    { "    v_add_f32  v154, v21, v107 omod:1", 0xd503009aU, 0x0802d715U, true, true, "" },
     782    { "    v_add_f32  v154, v21, v107 mul:2 clamp:0",
     783        0xd503009aU, 0x0802d715U, true, true, "" },
     784    { "    v_add_f32  v154, v21, v107 mul:002", 0xd503009aU, 0x0802d715U, true, true, "" },
     785    { "    v_add_f32  v154, v21, v107 mul:4", 0xd503009aU, 0x1002d715U, true, true, "" },
     786    { "    v_add_f32  v154, v21, v107 omod:2", 0xd503009aU, 0x1002d715U, true, true, "" },
     787    { "    v_add_f32  v154, v21, v107 div:2", 0xd503009aU, 0x1802d715U, true, true, "" },
     788    { "    v_add_f32  v154, v21, v107 omod:3", 0xd503009aU, 0x1802d715U, true, true, "" },
     789    { "    v_add_f32  v154, v21, v107 div:002", 0xd503009aU, 0x1802d715U, true, true, "" },
     790    { "    v_add_f32  v154, v21, v107 mul:2 clamp",
     791        0xd503809aU, 0x0802d715U, true, true, "" },
     792    { "    v_add_f32  v154, v21, v107 mul:2 clamp:1",
     793        0xd503809aU, 0x0802d715U, true, true, "" },
     794    { "    v_add_f32  v154, v21, v107 clamp", 0xd503809aU, 0x0002d715U, true, true, "" },
     795    { "    v_cndmask_b32   v154, v21, v107, s[6:7]",
     796        0xd501009aU, 0x001ad715U, true, true, "" },
     797    { "    v_cndmask_b32   v154, abs(v21), abs(v107), s[6:7] clamp",
     798        0xd501839aU, 0x001ad715U, true, true, "" },
     799    /* negated expressions */
     800    { "vx=7;    v_add_f32  v154, -vx, v107", 0x0734d6c7U, 0, false, true, "" },
     801    { "v12ZZ=7;    v_add_f32  v154, -v12ZZ, v107", 0x0734d6c7U, 0, false, true, "" },
     802    { "v_add_f32  v154, -vx, v107; vx=7", 0x0734d6ffU, uint32_t(-7), true, true, "" },
     803    { "vx=7737;    v_add_f32  v154, -vx, v107",
     804        0x0734d6ffU, uint32_t(-7737), true, true, "" },
     805    { "    v_add_f32  v154, s2, s2", 0xd503009aU, 0x0402U, true, true, "" },
     806    /* var long names */
     807    { "xtmp1111111111111111111222222222=67777\n"
     808        "v_add_f32  v154, xtmp1111111111111111111222222222, v107",
     809        0x0734d6ffU, 67777, true, true, "" },
     810    // VOP3/VOP2 more than 2 SGPR registers
     811    { "    v_add_f32  v154, s2, s4", 0xd503009aU, 0x00000802U, true, true, "" },
    752812    /* VOP2 errors */
    753813    { "    v_cndmask_b32   v[154:155], v21, v107, vcc", 0, 0, false, false,
     
    774834        "test.s:1:35: Error: Expected ':' before divider number\n"
    775835        "test.s:1:35: Error: Some garbages at VOP modifier place\n" },
     836    /* VOP2 in VOP3 errors */
     837    { "    v_add_f32  v154, v21, v107 mul:3", 0, 0, false, false,
     838        "test.s:1:32: Error: Unknown VOP3 mul:X modifier\n" },
     839    { "    v_add_f32  v154, v21, v107 mul:", 0, 0, false, false,
     840        "test.s:1:36: Error: Missing number\n" },
     841    { "    v_add_f32  v154, v21, v107 mul", 0, 0, false, false,
     842        "test.s:1:35: Error: Expected ':' before multiplier number\n" },
     843    { "    v_add_f32  v154, v21, v107 mxl", 0, 0, false, false,
     844        "test.s:1:32: Error: Unknown VOP modifier\n" },
     845    { "    v_add_f32  v154, abs(v21), 12343", 0, 0, false, false,
     846        "test.s:1:5: Error: Literal in VOP3 encoding is illegal\n" },
     847    { "    v_add_f32  v154, 13243, abs(v21)", 0, 0, false, false,
     848        "test.s:1:5: Error: Literal in VOP3 encoding is illegal\n" },
     849    { "    v_add_f32  v154, 3123, s3", 0, 0, false, false,
     850        "test.s:1:5: Error: Literal with SGPR or M0 is illegal\n" },
     851    { "    v_add_f32  v154, 3123, m0", 0, 0, false, false,
     852        "test.s:1:5: Error: Literal with SGPR or M0 is illegal\n" },
     853    { "    v_add_f32  v154, s3, 3123", 0, 0, false, false,
     854        "test.s:1:5: Error: Literal with SGPR or M0 is illegal\n" },
     855    { "    v_add_f32  v154, m0, 3123", 0, 0, false, false,
     856        "test.s:1:5: Error: Literal with SGPR or M0 is illegal\n" },
    776857    { nullptr, 0, 0, false, false, 0 }
    777858};
Note: See TracChangeset for help on using the changeset viewer.