Changeset 4839 in CLRX


Ignore:
Timestamp:
Jul 24, 2019, 10:31:35 PM (4 weeks ago)
Author:
matszpk
Message:

CLRadeonExtender: GCNAsm: Add VOP3P testcases for GFX10. Fixed VOP3P encoding for GFX10.

Location:
CLRadeonExtender/trunk
Files:
3 edited

Legend:

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

    r4835 r4839  
    19501950    const bool isGCN14 = (arch & ARCH_GCN_1_4_5)!=0;
    19511951    const bool isGCN15 = (arch & ARCH_GCN_1_5)!=0;
    1952     const bool vop3p = (gcnInsn.mode & GCN_VOP3_VOP3P) != 0;
     1952    const bool vop3p = (gcnInsn.mode & GCN_VOP3_VOP3P) != 0 ||
     1953                    (gcnInsn.encoding == GCNENC_VOP3P);
    19531954    if (gcnVOPEnc!=GCNVOPEnc::NORMAL)
    19541955        ASM_FAIL_BY_ERROR(instrPlace, "DPP and SDWA encoding is illegal for VOP3")
     
    22372238    uint32_t words[2];
    22382239    cxuint wordsNum = 2;
    2239     const uint32_t encoding = (arch & ARCH_GCN_1_5)!=0 ? 0xd4000000U : 0xd0000000U;
     2240    const uint32_t encoding = (arch & ARCH_GCN_1_5)!=0 ?
     2241            (gcnInsn.encoding==GCNENC_VOP3P ? 0xcc000000U : 0xd4000000U) : 0xd0000000U;
    22402242    if (gcnInsn.encoding == GCNENC_VOP3B)
    22412243    {
  • CLRadeonExtender/trunk/amdasm/GCNAssembler.cpp

    r4835 r4839  
    286286        case GCNENC_VOP3A:
    287287        case GCNENC_VOP3B:
     288        case GCNENC_VOP3P:
    288289            good = GCNAsmUtils::parseVOP3Encoding(assembler, *it, mnemPlace, linePtr,
    289290                                   curArchMask, output, regs, gcnEncSize, vopEnc);
  • CLRadeonExtender/trunk/tests/amdasm/GCNAsmOpc15.cpp

    r4838 r4839  
    24692469    { "v_pack_b32_f16  v55, v27, v90 op_sel:[1,1,0]\n",
    24702470        0xd7111837U, 0x0002b51bU, true, true, "" },
     2471    /* VOP3P encoding */
     2472    { "v_pk_mad_i16    v55, v79, v166, v229 op_sel_hi:[0,0,0]\n",
     2473        0xcc000037U, 0x07974d4fU, true, true, "" },
     2474    { "v_pk_mad_i16    v55, v79, v166, v229\n",
     2475        0xcc004037U, 0x1f974d4fU, true, true, "" },
     2476    { "v_pk_mad_i16    v55, v79, v166, v229 op_sel_hi:[1,0,0]\n",
     2477        0xcc000037U, 0x0f974d4fU, true, true, "" },
     2478    { "v_pk_mad_i16    v55, v79, v166, v229 op_sel_hi:[0,1,0]\n",
     2479        0xcc000037U, 0x17974d4fU, true, true, "" },
     2480    { "v_pk_mad_i16    v55, v79, v166, v229 op_sel_hi:[0,1,1]\n",
     2481        0xcc004037U, 0x17974d4fU, true, true, "" },
     2482    { "v_pk_mad_i16    v55, v79, v166, v229 op_sel_hi:6\n",
     2483        0xcc004037U, 0x17974d4fU, true, true, "" },
     2484    { "v_pk_add_i16    v55, v79, v166 op_sel_hi:[0,1]\n",
     2485        0xcc020037U, 0x10034d4fU, true, true, "" },
     2486    { "v_pk_mad_i16    v55, v79, v166, v229 op_sel:[1,0,0] op_sel_hi:[0,0,0]\n",
     2487        0xcc000837U, 0x07974d4fU, true, true, "" },
     2488    { "v_pk_mad_i16    v55, v79, v166, v229 op_sel:[1,0,0] op_sel_hi:[1,0,1]\n",
     2489        0xcc004837U, 0x0f974d4fU, true, true, "" },
     2490    { "v_pk_mad_i16    v55, v79, v166, v229 op_sel:[1,0,0]\n",
     2491        0xcc004837U, 0x1f974d4fU, true, true, "" },
     2492    { "v_pk_mad_i16    v55, v79, v166, v229 op_sel:[0,1,0] op_sel_hi:[0,0,0]\n",
     2493        0xcc001037U, 0x07974d4fU, true, true, "" },
     2494    { "v_pk_mad_i16    v55, v79, v166, v229 op_sel:[0,0,1] op_sel_hi:[0,0,0]\n",
     2495        0xcc002037U, 0x07974d4fU, true, true, "" },
     2496    { "v_pk_mad_i16    v55, v79, v166, v229 op_sel:4 op_sel_hi:[0,0,0]\n",
     2497        0xcc002037U, 0x07974d4fU, true, true, "" },
     2498    { "v_pk_add_i16    v55, v79, v166 op_sel:[1,1] op_sel_hi:[0,1]\n",
     2499        0xcc021837U, 0x10034d4fU, true, true, "" },
     2500    { "v_pk_mad_i16    v55, v79, v166, v229 neg_hi:[1,0,0]\n",
     2501        0xcc004137U, 0x1f974d4fU, true, true, "" },
     2502    { "v_pk_mad_i16    v55, v79, v166, v229 neg_hi:[0,1,0]\n",
     2503        0xcc004237U, 0x1f974d4fU, true, true, "" },
     2504    { "v_pk_mad_i16    v55, v79, v166, v229 neg_hi:[1,1,0]\n",
     2505        0xcc004337U, 0x1f974d4fU, true, true, "" },
     2506    { "v_pk_mad_i16    v55, v79, v166, v229 neg_hi:[0,0,1]\n",
     2507        0xcc004437U, 0x1f974d4fU, true, true, "" },
     2508    { "v_pk_mad_i16    v55, v79, v166, v229 neg_hi:[1,0,1]\n",
     2509        0xcc004537U, 0x1f974d4fU, true, true, "" },
     2510    { "v_pk_mad_i16    v55, v79, v166, v229 neg_hi:5\n",
     2511        0xcc004537U, 0x1f974d4fU, true, true, "" },
     2512    { "v_pk_mad_i16    v55, v79, v166, v229 neg_hi:[0,1,1]\n",
     2513        0xcc004637U, 0x1f974d4fU, true, true, "" },
     2514    { "v_pk_mad_i16    v55, v79, v166, v229 neg_hi:[1,1,1]\n",
     2515        0xcc004737U, 0x1f974d4fU, true, true, "" },
     2516    { "v_pk_add_i16    v55, v79, v166 neg_hi:[1,1]\n",
     2517        0xcc024337U, 0x18034d4fU, true, true, "" },
     2518    { "v_pk_mad_i16    v55, v79, v166, v229 neg_lo:[1,0,0]\n",
     2519        0xcc004037U, 0x3f974d4fU, true, true, "" },
     2520    { "v_pk_mad_i16    v55, v79, v166, v229 neg_lo:[0,1,0]\n",
     2521        0xcc004037U, 0x5f974d4fU, true, true, "" },
     2522    { "v_pk_mad_i16    v55, v79, v166, v229 neg_lo:[1,1,0]\n",
     2523        0xcc004037U, 0x7f974d4fU, true, true, "" },
     2524    { "v_pk_mad_i16    v55, v79, v166, v229 neg_lo:3\n",
     2525        0xcc004037U, 0x7f974d4fU, true, true, "" },
     2526    { "v_pk_mad_i16    v55, -v79, -v166, v229\n",
     2527        0xcc004037U, 0x7f974d4fU, true, true, "" },
     2528    { "v_pk_mad_i16    v55, v79, v166, v229 neg_lo:[0,0,1]\n",
     2529        0xcc004037U, 0x9f974d4fU, true, true, "" },
     2530    { "v_pk_mad_i16    v55, v79, v166, v229 neg_lo:[1,0,1]\n",
     2531        0xcc004037U, 0xbf974d4fU, true, true, "" },
     2532    { "v_pk_mad_i16    v55, v79, v166, v229 neg_lo:[0,1,1]\n",
     2533        0xcc004037U, 0xdf974d4fU, true, true, "" },
     2534    { "v_pk_mad_i16    v55, v79, v166, v229 neg_lo:[1,1,1]\n",
     2535        0xcc004037U, 0xff974d4fU, true, true, "" },
     2536    { "v_pk_add_i16    v55, v79, v166 neg_lo:[1,1]\n",
     2537        0xcc024037U, 0x78034d4fU, true, true, "" },
     2538    { "v_pk_mad_i16    v55, v79, v166, v229 neg_lo:[1,1,0] neg_hi:[1,0,1]\n",
     2539        0xcc004537U, 0x7f974d4fU, true, true, "" },
     2540    { "v_pk_mad_i16    v55, -v79, -v166, v229 clamp\n",
     2541        0xcc00c037U, 0x7f974d4fU, true, true, "" },
     2542    /* VOP3P errors */
     2543    { "v_pk_mad_i16    v55, -v79, -v166, v229 clamp mul:2\n", 0, 0, true, false,
     2544        "test.s:1:46: Error: Unknown VOP modifier\n"
     2545        "test.s:1:49: Error: Some garbages at VOP modifier place\n" },
     2546    { "v_pk_mad_i16    v55, -v79, -v166, v229 clamp sext:2\n", 0, 0, true, false,
     2547        "test.s:1:46: Error: Unknown VOP modifier\n"
     2548        "test.s:1:50: Error: Some garbages at VOP modifier place\n" },
     2549    { "v_pk_mad_i16    v55, -v79, -v166, v229 clamp abs:2\n", 0, 0, true, false,
     2550        "test.s:1:46: Error: Unknown VOP modifier\n"
     2551        "test.s:1:49: Error: Some garbages at VOP modifier place\n" },
     2552    { "v_pk_mad_i16    v55, -v79, -abs(v166), v229 clamp\n", 0, 0, true, false,
     2553        "test.s:1:32: Error: Expected operator\n"
     2554        "test.s:1:33: Error: Expected ',' before argument\n" },
     2555    { "v_pk_mad_i16    v55, -v79, sext(v166), v229 clamp\n", 0, 0, true, false,
     2556        "test.s:1:32: Error: Expected operator\n"
     2557        "test.s:1:33: Error: Expected ',' before argument\n" },
     2558    /* VOP3P instructions */
     2559    { "v_pk_mul_lo_u16 v55, v79, v166\n", 0xcc014037U, 0x18034d4fU, true, true, "" },
     2560    { "v_pk_add_i16    v55, v79, v166\n", 0xcc024037U, 0x18034d4fU, true, true, "" },
     2561    { "v_pk_sub_i16    v55, v79, v166\n", 0xcc034037U, 0x18034d4fU, true, true, "" },
     2562    { "v_pk_lshlrev_b16 v55, v79, v166\n", 0xcc044037U, 0x18034d4fU, true, true, "" },
     2563    { "v_pk_lshrrev_b16 v55, v79, v166\n", 0xcc054037U, 0x18034d4fU, true, true, "" },
     2564    { "v_pk_ashrrev_i16 v55, v79, v166\n", 0xcc064037U, 0x18034d4fU, true, true, "" },
     2565    { "v_pk_max_i16    v55, v79, v166\n", 0xcc074037U, 0x18034d4fU, true, true, "" },
     2566    { "v_pk_min_i16    v55, v79, v166\n", 0xcc084037U, 0x18034d4fU, true, true, "" },
     2567    { "v_pk_mad_u16    v55, v79, v166, v229\n", 0xcc094037U, 0x1f974d4fU, true, true, "" },
     2568    { "v_pk_add_u16    v55, v79, v166\n", 0xcc0a4037U, 0x18034d4fU, true, true, "" },
     2569    { "v_pk_sub_u16    v55, v79, v166\n", 0xcc0b4037U, 0x18034d4fU, true, true, "" },
     2570    { "v_pk_max_u16    v55, v79, v166\n", 0xcc0c4037U, 0x18034d4fU, true, true, "" },
     2571    { "v_pk_min_u16    v55, v79, v166\n", 0xcc0d4037U, 0x18034d4fU, true, true, "" },
     2572    { "v_pk_fma_f16    v55, v79, v166, v229\n", 0xcc0e4037U, 0x1f974d4fU, true, true, "" },
     2573    { "v_pk_add_f16    v55, v79, v166\n", 0xcc0f4037U, 0x18034d4fU, true, true, "" },
     2574    { "v_pk_mul_f16    v55, v79, v166\n", 0xcc104037U, 0x18034d4fU, true, true, "" },
     2575    { "v_pk_min_f16    v55, v79, v166\n", 0xcc114037U, 0x18034d4fU, true, true, "" },
     2576    { "v_pk_max_f16    v55, v79, v166\n", 0xcc124037U, 0x18034d4fU, true, true, "" },
     2577    { "v_fma_mix_f32   v55, v79, v166, v229\n", 0xcc204037U, 0x1f974d4fU, true, true, "" },
     2578    { "v_fma_mixlo_f16 v55, v79, v166, v229\n", 0xcc214037U, 0x1f974d4fU, true, true, "" },
     2579    { "v_fma_mixhi_f16 v55, v79, v166, v229\n", 0xcc224037U, 0x1f974d4fU, true, true, "" },
     2580    { "v_mad_mix_f32   v55, v79, v166, v229\n", 0, 0, false, false,
     2581        "test.s:1:1: Error: Unknown instruction\n" },
     2582    { "v_mad_mixlo_f16 v55, v79, v166, v229\n", 0, 0, false, false,
     2583        "test.s:1:1: Error: Unknown instruction\n" },
     2584    { "v_mad_mixhi_f16 v55, v79, v166, v229\n", 0, 0, false, false,
     2585        "test.s:1:1: Error: Unknown instruction\n" },
    24712586    { nullptr, 0, 0, false, false, 0 }
    24722587};
Note: See TracChangeset for help on using the changeset viewer.