Changeset 4833 in CLRX


Ignore:
Timestamp:
Jul 24, 2019, 1:24:52 PM (5 months ago)
Author:
matszpk
Message:

CLRadeonExtender: Disasm: Add literals to VOP3 encoding for GFX10.

Location:
CLRadeonExtender/trunk
Files:
4 edited

Legend:

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

    r4832 r4833  
    10711071                    break;
    10721072                case GCNENC_VOP3A:
    1073                     GCNDisasmUtils::decodeVOP3Encoding(*this, spacesToAdd, curArchMask,
    1074                                  *gcnInsn, insnCode, insnCode2, displayFloatLits,
    1075                                 disassembler.getFlags());
     1073                    GCNDisasmUtils::decodeVOP3Encoding(*this, pos, curReloc,
     1074                            spacesToAdd, curArchMask, *gcnInsn, insnCode, insnCode2,
     1075                            insnCode3, displayFloatLits, disassembler.getFlags());
    10761076                    break;
    10771077                case GCNENC_VOP3P: {
     
    10791079                    newInsn.encoding = GCNENC_VOP3A;
    10801080                    newInsn.mode |= GCN_VOP3_VOP3P;
    1081                     GCNDisasmUtils::decodeVOP3Encoding(*this, spacesToAdd, curArchMask,
    1082                                  newInsn, insnCode, insnCode2, displayFloatLits,
    1083                                 disassembler.getFlags());
     1081                    GCNDisasmUtils::decodeVOP3Encoding(*this, pos, curReloc,
     1082                            spacesToAdd, curArchMask, newInsn, insnCode, insnCode2,
     1083                            insnCode3, displayFloatLits, disassembler.getFlags());
    10841084                    break;
    10851085                }
  • CLRadeonExtender/trunk/amdasm/GCNDisasmDecode.cpp

    r4803 r4833  
    15661566}
    15671567
    1568 void GCNDisasmUtils::decodeVOP3Encoding(GCNDisassembler& dasm, cxuint spacesToAdd,
     1568void GCNDisasmUtils::decodeVOP3Encoding(GCNDisassembler& dasm, size_t codePos,
     1569         RelocIter& relocIter, cxuint spacesToAdd,
    15691570         GPUArchMask arch, const GCNInstruction& gcnInsn, uint32_t insnCode,
    1570          uint32_t insnCode2, FloatLitType displayFloatLits, Flags flags)
     1571         uint32_t insnCode2, uint32_t literal, FloatLitType displayFloatLits, Flags flags)
    15711572{
    15721573    FastOutputBuffer& output = dasm.output;
     
    16431644                putChars(bufPtr, "abs(", 4);
    16441645            // print VSRC0
    1645             decodeGCNOperandNoLit(dasm, vsrc0, (gcnInsn.mode&GCN_REG_SRC0_64)?2:1,
     1646            if (!isGCN15)
     1647                decodeGCNOperandNoLit(dasm, vsrc0, (gcnInsn.mode&GCN_REG_SRC0_64)?2:1,
    16461648                                   bufPtr, arch, displayFloatLits);
     1649            else
     1650            {
     1651                output.forward(bufPtr-bufStart);
     1652                bufStart = bufPtr = decodeGCNOperand(dasm, codePos, relocIter, vsrc0,
     1653                 (gcnInsn.mode&GCN_REG_SRC0_64)?2:1, arch, literal, displayFloatLits);
     1654            }
    16471655            // closing abs
    16481656            if (absFlags & 1)
     
    16621670                decodeVINTRPParam(vsrc1, bufPtr);
    16631671            else
     1672            {
    16641673                // print VSRC1
    1665                 decodeGCNOperandNoLit(dasm, vsrc1, 1, bufPtr, arch, displayFloatLits);
     1674                if (!isGCN15)
     1675                    decodeGCNOperandNoLit(dasm, vsrc1, 1, bufPtr, arch, displayFloatLits);
     1676                else
     1677                {
     1678                    output.forward(bufPtr-bufStart);
     1679                    bufStart = bufPtr = decodeGCNOperand(dasm, codePos, relocIter, vsrc1,
     1680                        1, arch, literal, displayFloatLits);
     1681                }
     1682            }
    16661683            if (absFlags & 2)
    16671684                *bufPtr++ = ')';
     
    16821699                    putChars(bufPtr, "abs(", 4);
    16831700                // print VSRC2
    1684                 decodeGCNOperandNoLit(dasm, vsrc2, 1, bufPtr, arch, displayFloatLits);
     1701                if (!isGCN15)
     1702                    decodeGCNOperandNoLit(dasm, vsrc2, 1, bufPtr, arch, displayFloatLits);
     1703                else
     1704                {
     1705                    output.forward(bufPtr-bufStart);
     1706                    bufStart = bufPtr = decodeGCNOperand(dasm, codePos, relocIter, vsrc2,
     1707                        1, arch, literal, displayFloatLits);
     1708                }
    16851709                if (absFlags & 4)
    16861710                    *bufPtr++ = ')';
     
    17021726                putChars(bufPtr, "abs(", 4);
    17031727            // print VSRC1
    1704             decodeGCNOperandNoLit(dasm, vsrc1, (gcnInsn.mode&GCN_REG_SRC1_64)?2:1,
    1705                       bufPtr, arch, displayFloatLits);
     1728            if (!isGCN15)
     1729                decodeGCNOperandNoLit(dasm, vsrc1, (gcnInsn.mode&GCN_REG_SRC1_64)?2:1,
     1730                        bufPtr, arch, displayFloatLits);
     1731            else
     1732            {
     1733                output.forward(bufPtr-bufStart);
     1734                bufStart = bufPtr = decodeGCNOperand(dasm, codePos, relocIter, vsrc1,
     1735                    (gcnInsn.mode&GCN_REG_SRC1_64)?2:1, arch, literal, displayFloatLits);
     1736            }
    17061737            if (absFlags & 2)
    17071738                *bufPtr++ = ')';
     
    17251756                    // for V_MQSAD_U32 SRC2 is 128-bit
    17261757                    // print VSRC2
    1727                     decodeGCNOperandNoLit(dasm, vsrc2, is128Ops ? 4 :
    1728                                 (gcnInsn.mode&GCN_REG_SRC2_64)?2:1,
    1729                                  bufPtr, arch, displayFloatLits);
     1758                    if (!isGCN15)
     1759                        decodeGCNOperandNoLit(dasm, vsrc2, is128Ops ? 4 :
     1760                                    (gcnInsn.mode&GCN_REG_SRC2_64)?2:1,
     1761                                    bufPtr, arch, displayFloatLits);
     1762                    else
     1763                    {
     1764                        output.forward(bufPtr-bufStart);
     1765                        bufStart = bufPtr = decodeGCNOperand(dasm, codePos, relocIter,
     1766                                vsrc2, is128Ops ? 4 : (gcnInsn.mode&GCN_REG_SRC2_64)?2:1,
     1767                                arch, literal, displayFloatLits);
     1768                    }
    17301769                    if (absFlags & 4)
    17311770                        *bufPtr++ = ')';
  • CLRadeonExtender/trunk/amdasm/GCNDisasmInternals.h

    r4786 r4833  
    9595             FloatLitType displayFloatLits, Flags flags);
    9696   
    97     static void decodeVOP3Encoding(GCNDisassembler& dasm, cxuint spacesToAdd,
     97    static void decodeVOP3Encoding(GCNDisassembler& dasm, size_t codePos,
     98            RelocIter& relocIter, cxuint spacesToAdd,
    9899            GPUArchMask arch, const GCNInstruction& gcnInsn, uint32_t insnCode,
    99             uint32_t insnCode2, FloatLitType displayFloatLits, Flags flags);
     100            uint32_t insnCode2, uint32_t literal, FloatLitType displayFloatLits,
     101            Flags flags);
    100102   
    101103    static void decodeVINTRPEncoding(GCNDisassembler& dasm, cxuint spacesToAdd,
  • CLRadeonExtender/trunk/tests/amdasm/GCNDisasmOpc15.cpp

    r4831 r4833  
    16131613    { 0xd400016aU, 0x0002d732U, true, "        v_cmp_f_f32     vcc, abs(v50), v107\n" },
    16141614    /// ??????
    1615     { 0xd400002aU, 0x0001feffU, true, "        v_cmp_f_f32     s[42:43], 0x0, 0x0\n" },
    1616     { 0xd40000ffU, 0x0001feffU, true, "        v_cmp_f_f32     0x0, 0x0, 0x0\n" },
     1615    //{ 0xd400002aU, 0x0001feffU, true, "        v_cmp_f_f32     s[42:43], 0x0, 0x0\n" },
     1616    //{ 0xd40000ffU, 0x0001feffU, true, "        v_cmp_f_f32     0x0, 0x0, 0x0\n" },
    16171617    /*** VOP3 comparisons ***/
    16181618    { 0xd400002aU, 0x0002d732U, true, "        v_cmp_f_f32     s[42:43], v50, v107\n" },
     
    40344034        "[v121,v44,v73,v91,v97,v216,v62,v155,v25,v119,v1,v9], "
    40354035        "s[84:91], s[76:79] dmask:11 dim:3d unorm glc slc\n" },
     4036    /* VOP3 literals */
     4037    { { 0xd5510037U, 0x07974cffU, 0x567d0700U }, 3, "        v_min3_f32      "
     4038        "v55, 0x567d0700 /* 6.9551627e+13f */, v166, v229\n" },
     4039    { { 0xd5510037U, 0x0795ff6bU, 0x567d0700U }, 3, "        v_min3_f32      "
     4040        "v55, v107, 0x567d0700 /* 6.9551627e+13f */, v229\n" },
     4041    { { 0xd5510037U, 0x03ff4d7aU, 0x567d0700U }, 3, "        v_min3_f32      "
     4042        "v55, v122, v166, 0x567d0700 /* 6.9551627e+13f */\n" },
     4043    { { 0xd7570037U, 0x07974cffU, 0x3d4c }, 3, "        v_med3_f16      "
     4044        "v55, 0x3d4c /* 1.3242h */, v166, v229\n" },
     4045    { { 0xd7570037U, 0x0795ffb4U, 0x3d4c }, 3, "        v_med3_f16      "
     4046        "v55, v180, 0x3d4c /* 1.3242h */, v229\n" },
     4047    { { 0xd7570037U, 0x03ff4c47U, 0x3d4c }, 3, "        v_med3_f16      "
     4048        "v55, s71, v166, 0x3d4c /* 1.3242h */\n" },
     4049    { { 0xd5480037U, 0x07974cffU, 0x38c95d9a }, 3, "        v_bfe_u32       "
     4050        "v55, 0x38c95d9a, v166, v229\n" },
     4051    { { 0xd5480037U, 0x0795ff1fU, 0x38c95d9a }, 3, "        v_bfe_u32       "
     4052        "v55, v31, 0x38c95d9a, v229\n" },
     4053    { { 0xd5480037U, 0x03ff4d5dU, 0x38c95d9a }, 3, "        v_bfe_u32       "
     4054        "v55, v93, v166, 0x38c95d9a\n" },
     4055    { { 0xd5480037U, 0x0795ff1fU, 17 }, 3, "        v_bfe_u32       "
     4056        "v55, v31, lit(17), v229\n" },
     4057    { { 0xd5510037U, 0x0795ff6bU, 19 }, 3, "        v_min3_f32      "
     4058        "v55, v107, lit(19) /* 2.66e-44f */, v229\n" },
     4059    { { 0xd743002aU, 0x0075ffa7U, 0x4689dc }, 3, "        v_interp_p1lv_f16 "
     4060        "v42, 0x4689dc /* -0.00017881h */, attr39.z, s29 high\n" },
     4061    { { 0xd743002aU, 0x03fc03a7U, 0x4689dc }, 3, "        v_interp_p1lv_f16 "
     4062        "v42, s1, attr39.z, 0x4689dc /* -0.00017881h */ high\n" },
     4063    { { 0xd4c20007U, 0x00000effU, 0x105b0a1U }, 3,
     4064        "        v_cmp_eq_u32    s[7:8], 0x105b0a1, s7\n" },
    40364065    { {}, 0, nullptr }
    40374066};
Note: See TracChangeset for help on using the changeset viewer.