Changeset 4832 in CLRX


Ignore:
Timestamp:
Jul 24, 2019, 12:07:55 PM (4 weeks ago)
Author:
matszpk
Message:

CLRadeonExtender: GCNAsm/Disasm: Prepping VINTRP/VOP3 instructions for extra literal dword (add floatlit mode flag).
Prepare counting code size for extra literal dword for VOP3/VOP3P.

Location:
CLRadeonExtender/trunk
Files:
4 edited

Legend:

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

    r4802 r4832  
    704704                (isGCN12 && gcnSize12Table[encPart]))
    705705                words++;
     706            if (isGCN15 && (encPart==3 || encPart==5))
     707            {
     708                // include VOP3 literal
     709                const uint32_t insnCode2 = ULEV(
     710                                *reinterpret_cast<const uint32_t*>(code+4));
     711                if ((insnCode2 & 0x1ff) == 0xff || ((insnCode2>>9) & 0x1ff) == 0xff ||
     712                    ((insnCode2>>18) & 0x1ff) == 0xff)
     713                    words++;
     714            }
    706715        }
    707716    }
  • CLRadeonExtender/trunk/amdasm/GCNDisasm.cpp

    r4831 r4832  
    397397                    (isGCN12 && gcnSize12Table[encPart]))
    398398                    pos++;
     399                if (isGCN15 && (encPart==3 || encPart==5))
     400                {
     401                    // include VOP3 literal
     402                    const uint32_t insnCode2 = ULEV(codeWords[pos]);
     403                    if ((insnCode2 & 0x1ff) == 0xff || ((insnCode2>>9) & 0x1ff) == 0xff ||
     404                        ((insnCode2>>18) & 0x1ff) == 0xff)
     405                        pos++;
     406                }
    399407            }
    400408        }
     
    735743                    if (gcnSize15Table[encPart] && pos < codeWordsNum)
    736744                        insnCode2 = ULEV(codeWords[pos++]);
     745                    if (isGCN15 && (encPart==3 || encPart==5))
     746                    {
     747                        // include VOP3 literal
     748                        if ((insnCode2 & 0x1ff) == 0xff || ((insnCode2>>9) & 0x1ff) == 0xff ||
     749                            ((insnCode2>>18) & 0x1ff) == 0xff)
     750                            insnCode3 = ULEV(codeWords[pos++]);
     751                    }
    737752                }
    738753                else if ((!isGCN124 && gcnSize11Table[encPart] && (encPart != 7 || isGCN11)) ||
  • CLRadeonExtender/trunk/amdasm/GCNInstructions.cpp

    r4831 r4832  
    25622562    { "v_subrev_co_u32",     GCNENC_VOP3B,  GCN_DST_VCC|GCN_SRC2_NONE, 793,  ARCH_GCN_1_5 },
    25632563    { "v_mad_u16",           GCNENC_VOP3A,  GCN_STDMODE,              832,  ARCH_GCN_1_5 },
    2564     { "v_interp_p1ll_f16",   GCNENC_VOP3A,  GCN_VOP3_VINTRP_NEW,      834,  ARCH_GCN_1_5  },
    2565     { "v_interp_p1lv_f16",   GCNENC_VOP3A,  GCN_VOP3_VINTRP_NEW|GCN_VINTRP_SRC2,
     2564    { "v_interp_p1ll_f16",   GCNENC_VOP3A,  GCN_F16LIT|GCN_VOP3_VINTRP_NEW, 834,  ARCH_GCN_1_5  },
     2565    { "v_interp_p1lv_f16",   GCNENC_VOP3A,  GCN_F16LIT|GCN_VOP3_VINTRP_NEW|GCN_VINTRP_SRC2,
    25662566        835,  ARCH_GCN_1_5  },
    25672567    { "v_perm_b32",          GCNENC_VOP3A,  GCN_STDMODE,              836,  ARCH_GCN_1_5 },
     
    25792579    { "v_med3_i16",          GCNENC_VOP3A,  GCN_STDMODE,              856,  ARCH_GCN_1_5 },
    25802580    { "v_med3_u16",          GCNENC_VOP3A,  GCN_STDMODE,              857,  ARCH_GCN_1_5 },
    2581     { "v_interp_p2_f16",     GCNENC_VOP3A,  GCN_VOP3_VINTRP_NEW|GCN_VINTRP_SRC2,
     2581    { "v_interp_p2_f16",     GCNENC_VOP3A,  GCN_F16LIT|GCN_VOP3_VINTRP_NEW|GCN_VINTRP_SRC2,
    25822582        858,  ARCH_GCN_1_5  },
    25832583    { "v_mad_i16",           GCNENC_VOP3A,  GCN_STDMODE,              862,  ARCH_GCN_1_5 },
  • CLRadeonExtender/trunk/amdbin/AmdCL2BinGen.cpp

    r4728 r4832  
    17701770                        if (pos < codeWordsNum) pos++;
    17711771                    }
     1772                    if (isGCN15 && (encPart==3 || encPart==5))
     1773                    {
     1774                        // include VOP3 literal
     1775                        const uint32_t insnCode2 = ULEV(codeWords[pos-1]);
     1776                        if ((insnCode2 & 0x1ff) == 0xff ||
     1777                            ((insnCode2>>9) & 0x1ff) == 0xff ||
     1778                            ((insnCode2>>18) & 0x1ff) == 0xff)
     1779                            pos++;
     1780                    }
    17721781                }
    17731782                else if ((!isGCN12 && gcnSize11Table[encPart] && (encPart != 7 || isGCN11)) ||
Note: See TracChangeset for help on using the changeset viewer.