Changeset 3076 in CLRX


Ignore:
Timestamp:
May 23, 2017, 7:24:18 PM (2 years ago)
Author:
matszpk
Message:

CLRadeonExtender: GCNDisasm: Add FLAT scratch_* and global_* instructions including special encoding (for AMD VEGA).

Location:
CLRadeonExtender/trunk
Files:
3 edited

Legend:

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

    r3075 r3076  
    111111    static void decodeEXPEncoding(GCNDisassembler& dasm, cxuint spacesToAdd, uint16_t arch,
    112112             const GCNInstruction& gcnInsn, uint32_t insnCode, uint32_t insnCode2);
     113
     114    static void printFLATAddr(cxuint flatMode, char*& bufPtr, uint32_t insnCode2);
    113115   
    114116    static void decodeFLATEncoding(GCNDisassembler& dasm, cxuint spacesToAdd, uint16_t arch,
     
    25812583}
    25822584
    2583 void GCNDisasmUtils::decodeFLATEncoding(GCNDisassembler& dasm ,cxuint spacesToAdd,
     2585void GCNDisasmUtils::printFLATAddr(cxuint flatMode, char*& bufPtr, uint32_t insnCode2)
     2586{
     2587    const cxuint vaddr = insnCode2&0xff;
     2588    if (flatMode == 0 || flatMode == GCN_FLAT_GLOBAL)
     2589        decodeGCNVRegOperand(vaddr, 2, bufPtr); // addr
     2590    else if (flatMode == GCN_FLAT_SCRATCH)
     2591    {
     2592        if (((insnCode2>>16)&0xff) == 0xff)
     2593            decodeGCNVRegOperand(vaddr, 1, bufPtr); // addr
     2594        else // no vaddr
     2595            putChars(bufPtr, "off", 3);
     2596    }
     2597}
     2598
     2599void GCNDisasmUtils::decodeFLATEncoding(GCNDisassembler& dasm, cxuint spacesToAdd,
    25842600            uint16_t arch, const GCNInstruction& gcnInsn, uint32_t insnCode,
    25852601            uint32_t insnCode2)
     
    25922608    bool vdstUsed = false;
    25932609    bool vdataUsed = false;
     2610    bool saddrUsed = false;
    25942611    const cxuint dregsNum = ((gcnInsn.mode&GCN_DSIZE_MASK)>>GCN_SHIFT2)+1;
    25952612    /// cmpswap store only to half of number of data registers
    25962613    cxuint dstRegsNum = ((gcnInsn.mode & GCN_CMPSWAP)!=0) ? (dregsNum>>1) :  dregsNum;
     2614    const cxuint flatMode = gcnInsn.mode & GCN_FLAT_MODEMASK;
    25972615    // tfe
    2598     dstRegsNum = (!isGCN14 && (insnCode2 & 0x800000U))?dstRegsNum+1:dstRegsNum;
    2599    
     2616    dstRegsNum = (!isGCN14 && (insnCode2 & 0x800000U)) ? dstRegsNum+1 : dstRegsNum;
     2617   
     2618    bool printAddr = false;
    26002619    if ((gcnInsn.mode & GCN_FLAT_ADST) == 0)
    26012620    {
     
    26042623        *bufPtr++ = ',';
    26052624        *bufPtr++ = ' ';
    2606         decodeGCNVRegOperand(insnCode2&0xff, 2, bufPtr); // addr
     2625        printFLATAddr(flatMode, bufPtr, insnCode2);
     2626        printAddr = true;
    26072627    }
    26082628    else
    26092629    {   /* two vregs, because 64-bitness stored in PTR32 mode (at runtime) */
    2610         decodeGCNVRegOperand(insnCode2&0xff, 2, bufPtr); // addr
     2630        printFLATAddr(flatMode, bufPtr, insnCode2);
     2631        printAddr = true;
    26112632        if ((gcnInsn.mode & GCN_FLAT_NODST) == 0)
    26122633        {
     
    26252646        decodeGCNVRegOperand((insnCode2>>8)&0xff, dregsNum, bufPtr);
    26262647    }
     2648   
     2649    if (flatMode != 0 && printAddr)
     2650    {
     2651        *bufPtr++ = ',';
     2652        *bufPtr++ = ' ';
     2653        cxuint saddr = (insnCode2>>16)&0xff;
     2654        if (saddr != 0xff)
     2655            decodeGCNOperandNoLit(dasm, saddr, flatMode == GCN_FLAT_SCRATCH ? 1 : 2,
     2656                        bufPtr, arch, FLTLIT_NONE);
     2657        else // off
     2658            putChars(bufPtr, "off", 3);
     2659        saddrUsed = true;
     2660    }
     2661   
    26272662    // get inst_offset, with sign if FLAT_SCRATCH, FLAT_GLOBAL
    2628     const cxint instOffset = ((gcnInsn.mode & GCN_FLAT_MODEMASK) != 0 &&
    2629             (insnCode&0x1000) != 0) ? (-insnCode&0xfff) : insnCode&0xfff;
     2663    const cxint instOffset = (flatMode != 0 && (insnCode&0x1000) != 0) ?
     2664                -4096+(insnCode&0xfff) : insnCode&0xfff;
    26302665    if (isGCN14 && instOffset != 0)
    26312666    {
     
    26402675    if (insnCode & 0x20000U)
    26412676        putChars(bufPtr, " slc", 4);
    2642     if (insnCode2 & 0x800000U)
     2677    if (flatMode==0 && insnCode2 & 0x800000U)
    26432678    {
    26442679        if (!isGCN14)
     
    26582693        putChars(bufPtr, " vdst=", 6);
    26592694        bufPtr += itocstrCStyle(insnCode2>>24, bufPtr, 6, 16);
     2695    }
     2696    if (flatMode != 0 && !saddrUsed && ((insnCode>>16)&0xff) != 0)
     2697    {
     2698        putChars(bufPtr, " saddr=", 7);
     2699        bufPtr += itocstrCStyle((insnCode2>>16)&0xff, bufPtr, 6, 16);
    26602700    }
    26612701    output.forward(bufPtr-bufStart);
     
    29182958                    isIllegal = true; // illegal
    29192959            }
    2920             else if (isGCN14 && (curArchMask & gcnInsn->archMask) == 0 &&
    2921                 gcnEncoding == GCNENC_FLAT && ((insnCode>>14)&3)!=0)
     2960            else if (isGCN14 && gcnEncoding == GCNENC_FLAT && ((insnCode>>14)&3)!=0)
    29222961            {
    29232962                const GCNEncodingSpace& encSpace4 =
  • CLRadeonExtender/trunk/amdasm/GCNInstructions.cpp

    r3075 r3076  
    25002500    { "flat_atomic_inc_x2",  GCNENC_FLAT,   GCN_MUBUF_MX2|GCN_MATOMIC, 107,  ARCH_GCN_1_2_4  },
    25012501    { "flat_atomic_dec_x2",  GCNENC_FLAT,   GCN_MUBUF_MX2|GCN_MATOMIC, 108,  ARCH_GCN_1_2_4  },
     2502    { "scratch_load_ubyte",     GCNENC_FLAT,
     2503        GCN_MUBUF_MX1|GCN_FLAT_NODATA|GCN_FLAT_SCRATCH, 16,   ARCH_RXVEGA  },
     2504    { "scratch_load_sbyte",     GCNENC_FLAT,
     2505        GCN_MUBUF_MX1|GCN_FLAT_NODATA|GCN_FLAT_SCRATCH, 17,   ARCH_RXVEGA  },
     2506    { "scratch_load_ushort",    GCNENC_FLAT,
     2507        GCN_MUBUF_MX1|GCN_FLAT_NODATA|GCN_FLAT_SCRATCH, 18,   ARCH_RXVEGA  },
     2508    { "scratch_load_sshort",    GCNENC_FLAT,
     2509        GCN_MUBUF_MX1|GCN_FLAT_NODATA|GCN_FLAT_SCRATCH, 19,   ARCH_RXVEGA  },
     2510    { "scratch_load_dword",     GCNENC_FLAT,
     2511        GCN_MUBUF_MX1|GCN_FLAT_NODATA|GCN_FLAT_SCRATCH, 20,   ARCH_RXVEGA  },
     2512    { "scratch_load_dwordx2",   GCNENC_FLAT,
     2513        GCN_MUBUF_MX2|GCN_FLAT_NODATA|GCN_FLAT_SCRATCH, 21,   ARCH_RXVEGA  },
     2514    { "scratch_load_dwordx3",   GCNENC_FLAT,
     2515        GCN_MUBUF_MX3|GCN_FLAT_NODATA|GCN_FLAT_SCRATCH, 22,   ARCH_RXVEGA  },
     2516    { "scratch_load_dwordx4",   GCNENC_FLAT,
     2517        GCN_MUBUF_MX4|GCN_FLAT_NODATA|GCN_FLAT_SCRATCH, 23,   ARCH_RXVEGA  },
     2518    { "scratch_store_byte",     GCNENC_FLAT,
     2519        GCN_MUBUF_MX1|GCN_FLAT_STORE|GCN_FLAT_SCRATCH, 24,   ARCH_RXVEGA  },
     2520    { "scratch_store_byte_d16_hi", GCNENC_FLAT,
     2521        GCN_MUBUF_MX1|GCN_FLAT_STORE|GCN_FLAT_SCRATCH, 25,   ARCH_RXVEGA  },
     2522    { "scratch_store_short",    GCNENC_FLAT,
     2523        GCN_MUBUF_MX1|GCN_FLAT_STORE|GCN_FLAT_SCRATCH, 26,   ARCH_RXVEGA  },
     2524    { "scratch_store_short_d16_hi", GCNENC_FLAT,
     2525        GCN_MUBUF_MX1|GCN_FLAT_STORE|GCN_FLAT_SCRATCH, 27,   ARCH_RXVEGA  },
     2526    { "scratch_store_dword",    GCNENC_FLAT,
     2527        GCN_MUBUF_MX1|GCN_FLAT_STORE|GCN_FLAT_SCRATCH, 28,   ARCH_RXVEGA  },
     2528    { "scratch_store_dwordx2",  GCNENC_FLAT,
     2529        GCN_MUBUF_MX2|GCN_FLAT_STORE|GCN_FLAT_SCRATCH, 29,   ARCH_RXVEGA  },
     2530    { "scratch_store_dwordx3",  GCNENC_FLAT,
     2531        GCN_MUBUF_MX3|GCN_FLAT_STORE|GCN_FLAT_SCRATCH, 30,   ARCH_RXVEGA  },
     2532    { "scratch_store_dwordx4",  GCNENC_FLAT,
     2533        GCN_MUBUF_MX4|GCN_FLAT_STORE|GCN_FLAT_SCRATCH, 31,   ARCH_RXVEGA  },
     2534    { "scratch_load_ubyte_d16", GCNENC_FLAT,
     2535        GCN_MUBUF_MX1|GCN_FLAT_NODATA|GCN_FLAT_SCRATCH, 32,   ARCH_RXVEGA  },
     2536    { "scratch_load_ubyte_d16_hi", GCNENC_FLAT,
     2537        GCN_MUBUF_MX1|GCN_FLAT_NODATA|GCN_FLAT_SCRATCH, 33,   ARCH_RXVEGA  },
     2538    { "scratch_load_sbyte_d16", GCNENC_FLAT,
     2539        GCN_MUBUF_MX1|GCN_FLAT_NODATA|GCN_FLAT_SCRATCH, 34,   ARCH_RXVEGA  },
     2540    { "scratch_load_sbyte_d16_hi", GCNENC_FLAT,
     2541        GCN_MUBUF_MX1|GCN_FLAT_NODATA|GCN_FLAT_SCRATCH, 35,   ARCH_RXVEGA  },
     2542    { "scratch_load_short_d16", GCNENC_FLAT,
     2543        GCN_MUBUF_MX1|GCN_FLAT_NODATA|GCN_FLAT_SCRATCH, 36,   ARCH_RXVEGA  },
     2544    { "scratch_load_short_d16_hi", GCNENC_FLAT,
     2545        GCN_MUBUF_MX1|GCN_FLAT_NODATA|GCN_FLAT_SCRATCH, 37,   ARCH_RXVEGA  },
     2546    { "global_load_ubyte",     GCNENC_FLAT,
     2547        GCN_MUBUF_MX1|GCN_FLAT_NODATA|GCN_FLAT_GLOBAL, 16,   ARCH_RXVEGA  },
     2548    { "global_load_sbyte",     GCNENC_FLAT,
     2549        GCN_MUBUF_MX1|GCN_FLAT_NODATA|GCN_FLAT_GLOBAL, 17,   ARCH_RXVEGA  },
     2550    { "global_load_ushort",    GCNENC_FLAT,
     2551        GCN_MUBUF_MX1|GCN_FLAT_NODATA|GCN_FLAT_GLOBAL, 18,   ARCH_RXVEGA  },
     2552    { "global_load_sshort",    GCNENC_FLAT,
     2553        GCN_MUBUF_MX1|GCN_FLAT_NODATA|GCN_FLAT_GLOBAL, 19,   ARCH_RXVEGA  },
     2554    { "global_load_dword",     GCNENC_FLAT,
     2555        GCN_MUBUF_MX1|GCN_FLAT_NODATA|GCN_FLAT_GLOBAL, 20,   ARCH_RXVEGA  },
     2556    { "global_load_dwordx2",   GCNENC_FLAT,
     2557        GCN_MUBUF_MX2|GCN_FLAT_NODATA|GCN_FLAT_GLOBAL, 21,   ARCH_RXVEGA  },
     2558    { "global_load_dwordx3",   GCNENC_FLAT,
     2559        GCN_MUBUF_MX3|GCN_FLAT_NODATA|GCN_FLAT_GLOBAL, 22,   ARCH_RXVEGA  },
     2560    { "global_load_dwordx4",   GCNENC_FLAT,
     2561        GCN_MUBUF_MX4|GCN_FLAT_NODATA|GCN_FLAT_GLOBAL, 23,   ARCH_RXVEGA  },
     2562    { "global_store_byte",     GCNENC_FLAT,
     2563        GCN_MUBUF_MX1|GCN_FLAT_STORE|GCN_FLAT_GLOBAL, 24,   ARCH_RXVEGA  },
     2564    { "global_store_byte_d16_hi", GCNENC_FLAT,
     2565        GCN_MUBUF_MX1|GCN_FLAT_STORE|GCN_FLAT_GLOBAL, 25,   ARCH_RXVEGA  },
     2566    { "global_store_short",    GCNENC_FLAT,
     2567        GCN_MUBUF_MX1|GCN_FLAT_STORE|GCN_FLAT_GLOBAL, 26,   ARCH_RXVEGA  },
     2568    { "global_store_short_d16_hi", GCNENC_FLAT,
     2569        GCN_MUBUF_MX1|GCN_FLAT_STORE|GCN_FLAT_GLOBAL, 27,   ARCH_RXVEGA  },
     2570    { "global_store_dword",    GCNENC_FLAT,
     2571        GCN_MUBUF_MX1|GCN_FLAT_STORE|GCN_FLAT_GLOBAL, 28,   ARCH_RXVEGA  },
     2572    { "global_store_dwordx2",  GCNENC_FLAT,
     2573        GCN_MUBUF_MX2|GCN_FLAT_STORE|GCN_FLAT_GLOBAL, 29,   ARCH_RXVEGA  },
     2574    { "global_store_dwordx3",  GCNENC_FLAT,
     2575        GCN_MUBUF_MX3|GCN_FLAT_STORE|GCN_FLAT_GLOBAL, 30,   ARCH_RXVEGA  },
     2576    { "global_store_dwordx4",  GCNENC_FLAT,
     2577        GCN_MUBUF_MX4|GCN_FLAT_STORE|GCN_FLAT_GLOBAL, 31,   ARCH_RXVEGA  },
     2578    { "global_load_ubyte_d16", GCNENC_FLAT,
     2579        GCN_MUBUF_MX1|GCN_FLAT_NODATA|GCN_FLAT_GLOBAL, 32,   ARCH_RXVEGA  },
     2580    { "global_load_ubyte_d16_hi", GCNENC_FLAT,
     2581        GCN_MUBUF_MX1|GCN_FLAT_NODATA|GCN_FLAT_GLOBAL, 33,   ARCH_RXVEGA  },
     2582    { "global_load_sbyte_d16", GCNENC_FLAT,
     2583        GCN_MUBUF_MX1|GCN_FLAT_NODATA|GCN_FLAT_GLOBAL, 34,   ARCH_RXVEGA  },
     2584    { "global_load_sbyte_d16_hi", GCNENC_FLAT,
     2585        GCN_MUBUF_MX1|GCN_FLAT_NODATA|GCN_FLAT_GLOBAL, 35,   ARCH_RXVEGA  },
     2586    { "global_load_short_d16", GCNENC_FLAT,
     2587        GCN_MUBUF_MX1|GCN_FLAT_NODATA|GCN_FLAT_GLOBAL, 36,   ARCH_RXVEGA  },
     2588    { "global_load_short_d16_hi", GCNENC_FLAT,
     2589        GCN_MUBUF_MX1|GCN_FLAT_NODATA|GCN_FLAT_GLOBAL, 37,   ARCH_RXVEGA  },
     2590    { "global_atomic_swap",    GCNENC_FLAT,
     2591        GCN_MUBUF_MX1|GCN_MATOMIC|GCN_FLAT_GLOBAL, 64,   ARCH_RXVEGA  },
     2592    { "global_atomic_cmpswap", GCNENC_FLAT,
     2593        GCN_MUBUF_MX2|GCN_ACMPSWAP|GCN_FLAT_GLOBAL, 65,   ARCH_RXVEGA  },
     2594    { "global_atomic_add",     GCNENC_FLAT,
     2595        GCN_MUBUF_MX1|GCN_MATOMIC|GCN_FLAT_GLOBAL, 66,   ARCH_RXVEGA  },
     2596    { "global_atomic_sub",     GCNENC_FLAT,
     2597        GCN_MUBUF_MX1|GCN_MATOMIC|GCN_FLAT_GLOBAL, 67,   ARCH_RXVEGA  },
     2598    { "global_atomic_smin",    GCNENC_FLAT,
     2599        GCN_MUBUF_MX1|GCN_MATOMIC|GCN_FLAT_GLOBAL, 68,   ARCH_RXVEGA  },
     2600    { "global_atomic_umin",    GCNENC_FLAT,
     2601        GCN_MUBUF_MX1|GCN_MATOMIC|GCN_FLAT_GLOBAL, 69,   ARCH_RXVEGA  },
     2602    { "global_atomic_smax",    GCNENC_FLAT,
     2603        GCN_MUBUF_MX1|GCN_MATOMIC|GCN_FLAT_GLOBAL, 70,   ARCH_RXVEGA  },
     2604    { "global_atomic_umax",    GCNENC_FLAT,
     2605        GCN_MUBUF_MX1|GCN_MATOMIC|GCN_FLAT_GLOBAL, 71,   ARCH_RXVEGA  },
     2606    { "global_atomic_and",     GCNENC_FLAT,
     2607        GCN_MUBUF_MX1|GCN_MATOMIC|GCN_FLAT_GLOBAL, 72,   ARCH_RXVEGA  },
     2608    { "global_atomic_or",      GCNENC_FLAT,
     2609        GCN_MUBUF_MX1|GCN_MATOMIC|GCN_FLAT_GLOBAL, 73,   ARCH_RXVEGA  },
     2610    { "global_atomic_xor",     GCNENC_FLAT,
     2611        GCN_MUBUF_MX1|GCN_MATOMIC|GCN_FLAT_GLOBAL, 74,   ARCH_RXVEGA  },
     2612    { "global_atomic_inc",     GCNENC_FLAT,
     2613        GCN_MUBUF_MX1|GCN_MATOMIC|GCN_FLAT_GLOBAL, 75,   ARCH_RXVEGA  },
     2614    { "global_atomic_dec",     GCNENC_FLAT,
     2615        GCN_MUBUF_MX1|GCN_MATOMIC|GCN_FLAT_GLOBAL, 76,   ARCH_RXVEGA  },
     2616    { "global_atomic_swap_x2", GCNENC_FLAT,
     2617        GCN_MUBUF_MX2|GCN_MATOMIC|GCN_FLAT_GLOBAL, 96,   ARCH_RXVEGA  },
     2618    { "global_atomic_cmpswap_x2", GCNENC_FLAT,
     2619        GCN_MUBUF_MX4|GCN_ACMPSWAP|GCN_FLAT_GLOBAL, 97,   ARCH_RXVEGA  },
     2620    { "global_atomic_add_x2",  GCNENC_FLAT,
     2621        GCN_MUBUF_MX2|GCN_MATOMIC|GCN_FLAT_GLOBAL, 98,   ARCH_RXVEGA  },
     2622    { "global_atomic_sub_x2",  GCNENC_FLAT,
     2623        GCN_MUBUF_MX2|GCN_MATOMIC|GCN_FLAT_GLOBAL, 99,   ARCH_RXVEGA  },
     2624    { "global_atomic_smin_x2", GCNENC_FLAT,
     2625        GCN_MUBUF_MX2|GCN_MATOMIC|GCN_FLAT_GLOBAL, 100,  ARCH_RXVEGA  },
     2626    { "global_atomic_umin_x2", GCNENC_FLAT,
     2627        GCN_MUBUF_MX2|GCN_MATOMIC|GCN_FLAT_GLOBAL, 101,  ARCH_RXVEGA  },
     2628    { "global_atomic_smax_x2", GCNENC_FLAT,
     2629        GCN_MUBUF_MX2|GCN_MATOMIC|GCN_FLAT_GLOBAL, 102,  ARCH_RXVEGA  },
     2630    { "global_atomic_umax_x2", GCNENC_FLAT,
     2631        GCN_MUBUF_MX2|GCN_MATOMIC|GCN_FLAT_GLOBAL, 103,  ARCH_RXVEGA  },
     2632    { "global_atomic_and_x2",  GCNENC_FLAT,
     2633        GCN_MUBUF_MX2|GCN_MATOMIC|GCN_FLAT_GLOBAL, 104,  ARCH_RXVEGA  },
     2634    { "global_atomic_or_x2",   GCNENC_FLAT,
     2635        GCN_MUBUF_MX2|GCN_MATOMIC|GCN_FLAT_GLOBAL, 105,  ARCH_RXVEGA  },
     2636    { "global_atomic_xor_x2",  GCNENC_FLAT,
     2637        GCN_MUBUF_MX2|GCN_MATOMIC|GCN_FLAT_GLOBAL, 106,  ARCH_RXVEGA  },
     2638    { "global_atomic_inc_x2",  GCNENC_FLAT,
     2639        GCN_MUBUF_MX2|GCN_MATOMIC|GCN_FLAT_GLOBAL, 107,  ARCH_RXVEGA  },
     2640    { "global_atomic_dec_x2",  GCNENC_FLAT,
     2641        GCN_MUBUF_MX2|GCN_MATOMIC|GCN_FLAT_GLOBAL, 108,  ARCH_RXVEGA  },
    25022642    { nullptr, GCNENC_NONE, 0, 0, 0 }
    25032643};
  • CLRadeonExtender/trunk/tests/amdasm/GCNDisasmOpc14.cpp

    r3075 r3076  
    502502    { 0xdc970000U, 0x2f8000bbU, true, "        flat_load_short_d16_hi "
    503503        "v47, v[187:188] glc slc nv\n" },
     504    /* FLAT SCRATCH encoding */
     505    { 0xdc434000U, 0x2f3100bbU, true,
     506        "        scratch_load_ubyte v47, off, s49 glc slc\n" },
     507    { 0xdc434000U, 0x2fff00bbU, true,
     508        "        scratch_load_ubyte v47, v187, off glc slc\n" },
     509    { 0xdc434413U, 0x2fff00bbU, true,
     510        "        scratch_load_ubyte v47, v187, off inst_offset:1043 glc slc\n" },
     511    { 0xdc435413U, 0x2fff00bbU, true,
     512        "        scratch_load_ubyte v47, v187, off inst_offset:-3053 glc slc\n" },
     513    { 0xdc435000U, 0x2fff00bbU, true,
     514        "        scratch_load_ubyte v47, v187, off inst_offset:-4096 glc slc\n" },
     515    /* FLAT SCRATCH instructions */
     516    { 0xdc474000U, 0x2f3100bbU, true,
     517        "        scratch_load_sbyte v47, off, s49 glc slc\n" },
     518    { 0xdc4b4000U, 0x2f3100bbU, true,
     519        "        scratch_load_ushort v47, off, s49 glc slc\n" },
     520    { 0xdc4f4000U, 0x2f3100bbU, true,
     521        "        scratch_load_sshort v47, off, s49 glc slc\n" },
     522    { 0xdc534000U, 0x2f3100bbU, true,
     523        "        scratch_load_dword v47, off, s49 glc slc\n" },
     524    { 0xdc574000U, 0x2f3100bbU, true,
     525        "        scratch_load_dwordx2 v[47:48], off, s49 glc slc\n" },
     526    { 0xdc5b4000U, 0x2f3100bbU, true,
     527        "        scratch_load_dwordx3 v[47:49], off, s49 glc slc\n" },
     528    { 0xdc5f4000U, 0x2f3100bbU, true,
     529        "        scratch_load_dwordx4 v[47:50], off, s49 glc slc\n" },
     530    { 0xdc634000U, 0x003141bbU, true,
     531        "        scratch_store_byte off, v65, s49 glc slc\n" },
     532    { 0xdc674000U, 0x003141bbU, true,
     533        "        scratch_store_byte_d16_hi off, v65, s49 glc slc\n" },
     534    { 0xdc6b4000U, 0x003141bbU, true,
     535        "        scratch_store_short off, v65, s49 glc slc\n" },
     536    { 0xdc6f4000U, 0x003141bbU, true,
     537        "        scratch_store_short_d16_hi off, v65, s49 glc slc\n" },
     538    { 0xdc734000U, 0x003141bbU, true,
     539        "        scratch_store_dword off, v65, s49 glc slc\n" },
     540    { 0xdc774000U, 0x003141bbU, true,
     541        "        scratch_store_dwordx2 off, v[65:66], s49 glc slc\n" },
     542    { 0xdc7b4000U, 0x003141bbU, true,
     543        "        scratch_store_dwordx3 off, v[65:67], s49 glc slc\n" },
     544    { 0xdc7f4000U, 0x003141bbU, true,
     545        "        scratch_store_dwordx4 off, v[65:68], s49 glc slc\n" },
     546    { 0xdc834000U, 0x2f3100bbU, true,
     547        "        scratch_load_ubyte_d16 v47, off, s49 glc slc\n" },
     548    { 0xdc874000U, 0x2f3100bbU, true,
     549        "        scratch_load_ubyte_d16_hi v47, off, s49 glc slc\n" },
     550    { 0xdc8b4000U, 0x2f3100bbU, true,
     551        "        scratch_load_sbyte_d16 v47, off, s49 glc slc\n" },
     552    { 0xdc8f4000U, 0x2f3100bbU, true,
     553        "        scratch_load_sbyte_d16_hi v47, off, s49 glc slc\n" },
     554    { 0xdc934000U, 0x2f3100bbU, true,
     555        "        scratch_load_short_d16 v47, off, s49 glc slc\n" },
     556    { 0xdc974000U, 0x2f3100bbU, true,
     557        "        scratch_load_short_d16_hi v47, off, s49 glc slc\n" },
     558    /* FLAT GLOBAL encoding */
     559    { 0xdc438000U, 0x2f3100bbU, true,
     560        "        global_load_ubyte v47, v[187:188], s[49:50] glc slc\n" },
     561    { 0xdc438000U, 0x2fff00bbU, true,
     562        "        global_load_ubyte v47, v[187:188], off glc slc\n" },
     563    { 0xdc438413U, 0x2f3100bbU, true, "        global_load_ubyte "
     564        "v47, v[187:188], s[49:50] inst_offset:1043 glc slc\n" },
     565    { 0xdc439413U, 0x2f3100bbU, true, "        global_load_ubyte "
     566        "v47, v[187:188], s[49:50] inst_offset:-3053 glc slc\n" },
     567    /* FLAT GLOBAL instructions */
     568    { 0xdc478000U, 0x2f3100bbU, true,
     569        "        global_load_sbyte v47, v[187:188], s[49:50] glc slc\n" },
     570    { 0xdc4b8000U, 0x2f3100bbU, true,
     571        "        global_load_ushort v47, v[187:188], s[49:50] glc slc\n" },
     572    { 0xdc4f8000U, 0x2f3100bbU, true,
     573        "        global_load_sshort v47, v[187:188], s[49:50] glc slc\n" },
     574    { 0xdc538000U, 0x2f3100bbU, true,
     575        "        global_load_dword v47, v[187:188], s[49:50] glc slc\n" },
     576    { 0xdc578000U, 0x2f3100bbU, true,
     577        "        global_load_dwordx2 v[47:48], v[187:188], s[49:50] glc slc\n" },
     578    { 0xdc5b8000U, 0x2f3100bbU, true,
     579        "        global_load_dwordx3 v[47:49], v[187:188], s[49:50] glc slc\n" },
     580    { 0xdc5f8000U, 0x2f3100bbU, true,
     581        "        global_load_dwordx4 v[47:50], v[187:188], s[49:50] glc slc\n" },
     582    { 0xdc638000U, 0x003141bbU, true,
     583        "        global_store_byte v[187:188], v65, s[49:50] glc slc\n" },
     584    { 0xdc678000U, 0x003141bbU, true,
     585        "        global_store_byte_d16_hi v[187:188], v65, s[49:50] glc slc\n" },
     586    { 0xdc6b8000U, 0x003141bbU, true,
     587        "        global_store_short v[187:188], v65, s[49:50] glc slc\n" },
     588    { 0xdc6f8000U, 0x003141bbU, true,
     589        "        global_store_short_d16_hi v[187:188], v65, s[49:50] glc slc\n" },
     590    { 0xdc738000U, 0x003141bbU, true,
     591        "        global_store_dword v[187:188], v65, s[49:50] glc slc\n" },
     592    { 0xdc778000U, 0x003141bbU, true,
     593        "        global_store_dwordx2 v[187:188], v[65:66], s[49:50] glc slc\n" },
     594    { 0xdc7b8000U, 0x003141bbU, true,
     595        "        global_store_dwordx3 v[187:188], v[65:67], s[49:50] glc slc\n" },
     596    { 0xdc7f8000U, 0x003141bbU, true,
     597        "        global_store_dwordx4 v[187:188], v[65:68], s[49:50] glc slc\n" },
     598    { 0xdc838000U, 0x2f3100bbU, true,
     599        "        global_load_ubyte_d16 v47, v[187:188], s[49:50] glc slc\n" },
     600    { 0xdc878000U, 0x2f3100bbU, true,
     601        "        global_load_ubyte_d16_hi v47, v[187:188], s[49:50] glc slc\n" },
     602    { 0xdc8b8000U, 0x2f3100bbU, true,
     603        "        global_load_sbyte_d16 v47, v[187:188], s[49:50] glc slc\n" },
     604    { 0xdc8f8000U, 0x2f3100bbU, true,
     605        "        global_load_sbyte_d16_hi v47, v[187:188], s[49:50] glc slc\n" },
     606    { 0xdc938000U, 0x2f3100bbU, true,
     607        "        global_load_short_d16 v47, v[187:188], s[49:50] glc slc\n" },
     608    { 0xdc978000U, 0x2f3100bbU, true,
     609        "        global_load_short_d16_hi v47, v[187:188], s[49:50] glc slc\n" },
     610    { 0xdd038000U, 0x2f3141bbU, true,
     611        "        global_atomic_swap v47, v[187:188], v65, s[49:50] glc slc\n" },
     612    { 0xdd078000U, 0x2f3141bbU, true, "        global_atomic_cmpswap "
     613        "v47, v[187:188], v[65:66], s[49:50] glc slc\n" },
     614    { 0xdd0b8000U, 0x2f3141bbU, true,
     615        "        global_atomic_add v47, v[187:188], v65, s[49:50] glc slc\n" },
     616    { 0xdd0f8000U, 0x2f3141bbU, true,
     617        "        global_atomic_sub v47, v[187:188], v65, s[49:50] glc slc\n" },
     618    { 0xdd138000U, 0x2f3141bbU, true,
     619        "        global_atomic_smin v47, v[187:188], v65, s[49:50] glc slc\n" },
     620    { 0xdd178000U, 0x2f3141bbU, true,
     621        "        global_atomic_umin v47, v[187:188], v65, s[49:50] glc slc\n" },
     622    { 0xdd1b8000U, 0x2f3141bbU, true,
     623        "        global_atomic_smax v47, v[187:188], v65, s[49:50] glc slc\n" },
     624    { 0xdd1f8000U, 0x2f3141bbU, true,
     625        "        global_atomic_umax v47, v[187:188], v65, s[49:50] glc slc\n" },
     626    { 0xdd238000, 0x2f3141bbU, true,
     627        "        global_atomic_and v47, v[187:188], v65, s[49:50] glc slc\n" },
     628    { 0xdd278000, 0x2f3141bbU, true,
     629        "        global_atomic_or v47, v[187:188], v65, s[49:50] glc slc\n" },
     630    { 0xdd2b8000, 0x2f3141bbU, true,
     631        "        global_atomic_xor v47, v[187:188], v65, s[49:50] glc slc\n" },
     632    { 0xdd2f8000, 0x2f3141bbU, true,
     633        "        global_atomic_inc v47, v[187:188], v65, s[49:50] glc slc\n" },
     634    { 0xdd338000, 0x2f3141bbU, true,
     635        "        global_atomic_dec v47, v[187:188], v65, s[49:50] glc slc\n" },
     636    { 0xdd838000U, 0x2f3141bbU, true, "        global_atomic_swap_x2 "
     637        "v[47:48], v[187:188], v[65:66], s[49:50] glc slc\n" },
     638    { 0xdd878000U, 0x2f3141bbU, true, "        global_atomic_cmpswap_x2 "
     639        "v[47:48], v[187:188], v[65:68], s[49:50] glc slc\n" },
     640    { 0xdd8b8000U, 0x2f3141bbU, true, "        global_atomic_add_x2 "
     641        "v[47:48], v[187:188], v[65:66], s[49:50] glc slc\n" },
     642    { 0xdd8f8000U, 0x2f3141bbU, true, "        global_atomic_sub_x2 "
     643        "v[47:48], v[187:188], v[65:66], s[49:50] glc slc\n" },
     644    { 0xdd938000U, 0x2f3141bbU, true, "        global_atomic_smin_x2 "
     645        "v[47:48], v[187:188], v[65:66], s[49:50] glc slc\n" },
     646    { 0xdd978000U, 0x2f3141bbU, true, "        global_atomic_umin_x2 "
     647        "v[47:48], v[187:188], v[65:66], s[49:50] glc slc\n" },
     648    { 0xdd9b8000U, 0x2f3141bbU, true, "        global_atomic_smax_x2 "
     649        "v[47:48], v[187:188], v[65:66], s[49:50] glc slc\n" },
     650    { 0xdd9f8000U, 0x2f3141bbU, true, "        global_atomic_umax_x2 "
     651        "v[47:48], v[187:188], v[65:66], s[49:50] glc slc\n" },
     652    { 0xdda38000, 0x2f3141bbU, true, "        global_atomic_and_x2 "
     653        "v[47:48], v[187:188], v[65:66], s[49:50] glc slc\n" },
     654    { 0xdda78000, 0x2f3141bbU, true, "        global_atomic_or_x2 "
     655        "v[47:48], v[187:188], v[65:66], s[49:50] glc slc\n" },
     656    { 0xddab8000, 0x2f3141bbU, true, "        global_atomic_xor_x2 "
     657        "v[47:48], v[187:188], v[65:66], s[49:50] glc slc\n" },
     658    { 0xddaf8000, 0x2f3141bbU, true, "        global_atomic_inc_x2 "
     659        "v[47:48], v[187:188], v[65:66], s[49:50] glc slc\n" },
     660    { 0xddb38000, 0x2f3141bbU, true, "        global_atomic_dec_x2 "
     661        "v[47:48], v[187:188], v[65:66], s[49:50] glc slc\n" },
    504662    { 0, 0, false, nullptr }
    505663};
Note: See TracChangeset for help on using the changeset viewer.