xref: /freebsd-src/contrib/llvm-project/llvm/lib/Target/AMDGPU/Utils/AMDGPUAsmUtils.cpp (revision 0fca6ea1d4eea4c934cfff25ac9ee8ad6fe95583)
10b57cec5SDimitry Andric //===-- AMDGPUAsmUtils.cpp - AsmParser/InstPrinter common -----------------===//
20b57cec5SDimitry Andric //
30b57cec5SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
40b57cec5SDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
50b57cec5SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
60b57cec5SDimitry Andric //
70b57cec5SDimitry Andric //===----------------------------------------------------------------------===//
80b57cec5SDimitry Andric #include "AMDGPUAsmUtils.h"
981ad6265SDimitry Andric #include "AMDGPUBaseInfo.h"
10e8d8bef9SDimitry Andric #include "SIDefines.h"
11e8d8bef9SDimitry Andric 
12*0fca6ea1SDimitry Andric namespace llvm::AMDGPU {
13*0fca6ea1SDimitry Andric 
14*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===//
15*0fca6ea1SDimitry Andric // Custom Operands.
16*0fca6ea1SDimitry Andric //
17*0fca6ea1SDimitry Andric // A table of custom operands shall describe "primary" operand names first
18*0fca6ea1SDimitry Andric // followed by aliases if any. It is not required but recommended to arrange
19*0fca6ea1SDimitry Andric // operands so that operand encoding match operand position in the table. This
20*0fca6ea1SDimitry Andric // will make getNameFromOperandTable() a bit more efficient. Unused slots in the
21*0fca6ea1SDimitry Andric // table shall have an empty name.
22*0fca6ea1SDimitry Andric //
23*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===//
24*0fca6ea1SDimitry Andric 
25*0fca6ea1SDimitry Andric /// Map from the encoding of a sendmsg/hwreg asm operand to it's name.
26*0fca6ea1SDimitry Andric template <size_t N>
27*0fca6ea1SDimitry Andric static StringRef getNameFromOperandTable(const CustomOperand (&Table)[N],
28*0fca6ea1SDimitry Andric                                          unsigned Encoding,
29*0fca6ea1SDimitry Andric                                          const MCSubtargetInfo &STI) {
30*0fca6ea1SDimitry Andric   auto isValidIndexForEncoding = [&](size_t Idx) {
31*0fca6ea1SDimitry Andric     return Idx < N && Table[Idx].Encoding == Encoding &&
32*0fca6ea1SDimitry Andric            !Table[Idx].Name.empty() &&
33*0fca6ea1SDimitry Andric            (!Table[Idx].Cond || Table[Idx].Cond(STI));
34*0fca6ea1SDimitry Andric   };
35*0fca6ea1SDimitry Andric 
36*0fca6ea1SDimitry Andric   // This is an optimization that should work in most cases. As a side effect,
37*0fca6ea1SDimitry Andric   // it may cause selection of an alias instead of a primary operand name in
38*0fca6ea1SDimitry Andric   // case of sparse tables.
39*0fca6ea1SDimitry Andric   if (isValidIndexForEncoding(Encoding))
40*0fca6ea1SDimitry Andric     return Table[Encoding].Name;
41*0fca6ea1SDimitry Andric 
42*0fca6ea1SDimitry Andric   for (size_t Idx = 0; Idx != N; ++Idx)
43*0fca6ea1SDimitry Andric     if (isValidIndexForEncoding(Idx))
44*0fca6ea1SDimitry Andric       return Table[Idx].Name;
45*0fca6ea1SDimitry Andric 
46*0fca6ea1SDimitry Andric   return "";
47*0fca6ea1SDimitry Andric }
48*0fca6ea1SDimitry Andric 
49*0fca6ea1SDimitry Andric /// Map from a symbolic name for a sendmsg/hwreg asm operand to it's encoding.
50*0fca6ea1SDimitry Andric template <size_t N>
51*0fca6ea1SDimitry Andric static int64_t getEncodingFromOperandTable(const CustomOperand (&Table)[N],
52*0fca6ea1SDimitry Andric                                            StringRef Name,
53*0fca6ea1SDimitry Andric                                            const MCSubtargetInfo &STI) {
54*0fca6ea1SDimitry Andric   int64_t InvalidEncoding = OPR_ID_UNKNOWN;
55*0fca6ea1SDimitry Andric   for (const CustomOperand &Entry : Table) {
56*0fca6ea1SDimitry Andric     if (Entry.Name != Name)
57*0fca6ea1SDimitry Andric       continue;
58*0fca6ea1SDimitry Andric 
59*0fca6ea1SDimitry Andric     if (!Entry.Cond || Entry.Cond(STI))
60*0fca6ea1SDimitry Andric       return Entry.Encoding;
61*0fca6ea1SDimitry Andric 
62*0fca6ea1SDimitry Andric     InvalidEncoding = OPR_ID_UNSUPPORTED;
63*0fca6ea1SDimitry Andric   }
64*0fca6ea1SDimitry Andric 
65*0fca6ea1SDimitry Andric   return InvalidEncoding;
66*0fca6ea1SDimitry Andric }
6781ad6265SDimitry Andric 
6881ad6265SDimitry Andric namespace DepCtr {
6981ad6265SDimitry Andric 
7081ad6265SDimitry Andric // NOLINTBEGIN
7181ad6265SDimitry Andric const CustomOperandVal DepCtrInfo[] = {
7281ad6265SDimitry Andric   // Name               max dflt offset width  constraint
7381ad6265SDimitry Andric   {{"depctr_hold_cnt"},  1,   1,    7,    1,   isGFX10_BEncoding},
7481ad6265SDimitry Andric   {{"depctr_sa_sdst"},   1,   1,    0,    1},
7581ad6265SDimitry Andric   {{"depctr_va_vdst"},  15,  15,   12,    4},
7681ad6265SDimitry Andric   {{"depctr_va_sdst"},   7,   7,    9,    3},
7781ad6265SDimitry Andric   {{"depctr_va_ssrc"},   1,   1,    8,    1},
7881ad6265SDimitry Andric   {{"depctr_va_vcc"},    1,   1,    1,    1},
7981ad6265SDimitry Andric   {{"depctr_vm_vsrc"},   7,   7,    2,    3},
8081ad6265SDimitry Andric };
8181ad6265SDimitry Andric // NOLINTEND
8281ad6265SDimitry Andric 
8381ad6265SDimitry Andric const int DEP_CTR_SIZE =
8481ad6265SDimitry Andric     static_cast<int>(sizeof(DepCtrInfo) / sizeof(CustomOperandVal));
8581ad6265SDimitry Andric 
8681ad6265SDimitry Andric } // namespace DepCtr
8781ad6265SDimitry Andric 
880b57cec5SDimitry Andric namespace SendMsg {
890b57cec5SDimitry Andric 
90*0fca6ea1SDimitry Andric // Disable lint checking here since it makes these tables unreadable.
9181ad6265SDimitry Andric // NOLINTBEGIN
925f757f3fSDimitry Andric // clang-format off
93*0fca6ea1SDimitry Andric 
94*0fca6ea1SDimitry Andric static constexpr CustomOperand MsgOperands[] = {
9581ad6265SDimitry Andric   {{""}},
9681ad6265SDimitry Andric   {{"MSG_INTERRUPT"},           ID_INTERRUPT},
9781ad6265SDimitry Andric   {{"MSG_GS"},                  ID_GS_PreGFX11,             isNotGFX11Plus},
9881ad6265SDimitry Andric   {{"MSG_GS_DONE"},             ID_GS_DONE_PreGFX11,        isNotGFX11Plus},
9981ad6265SDimitry Andric   {{"MSG_SAVEWAVE"},            ID_SAVEWAVE,                isGFX8_GFX9_GFX10},
1005f757f3fSDimitry Andric   {{"MSG_STALL_WAVE_GEN"},      ID_STALL_WAVE_GEN,          isGFX9_GFX10_GFX11},
1015f757f3fSDimitry Andric   {{"MSG_HALT_WAVES"},          ID_HALT_WAVES,              isGFX9_GFX10_GFX11},
10206c3fb27SDimitry Andric   {{"MSG_ORDERED_PS_DONE"},     ID_ORDERED_PS_DONE,         isGFX9_GFX10},
10381ad6265SDimitry Andric   {{"MSG_EARLY_PRIM_DEALLOC"},  ID_EARLY_PRIM_DEALLOC,      isGFX9_GFX10},
10481ad6265SDimitry Andric   {{"MSG_GS_ALLOC_REQ"},        ID_GS_ALLOC_REQ,            isGFX9Plus},
10581ad6265SDimitry Andric   {{"MSG_GET_DOORBELL"},        ID_GET_DOORBELL,            isGFX9_GFX10},
10681ad6265SDimitry Andric   {{"MSG_GET_DDID"},            ID_GET_DDID,                isGFX10},
10781ad6265SDimitry Andric   {{"MSG_HS_TESSFACTOR"},       ID_HS_TESSFACTOR_GFX11Plus, isGFX11Plus},
10881ad6265SDimitry Andric   {{"MSG_DEALLOC_VGPRS"},       ID_DEALLOC_VGPRS_GFX11Plus, isGFX11Plus},
10981ad6265SDimitry Andric   {{""}},
11081ad6265SDimitry Andric   {{"MSG_SYSMSG"},              ID_SYSMSG},
11181ad6265SDimitry Andric   {{"MSG_RTN_GET_DOORBELL"},    ID_RTN_GET_DOORBELL,        isGFX11Plus},
11281ad6265SDimitry Andric   {{"MSG_RTN_GET_DDID"},        ID_RTN_GET_DDID,            isGFX11Plus},
11381ad6265SDimitry Andric   {{"MSG_RTN_GET_TMA"},         ID_RTN_GET_TMA,             isGFX11Plus},
11481ad6265SDimitry Andric   {{"MSG_RTN_GET_REALTIME"},    ID_RTN_GET_REALTIME,        isGFX11Plus},
11581ad6265SDimitry Andric   {{"MSG_RTN_SAVE_WAVE"},       ID_RTN_SAVE_WAVE,           isGFX11Plus},
11681ad6265SDimitry Andric   {{"MSG_RTN_GET_TBA"},         ID_RTN_GET_TBA,             isGFX11Plus},
117*0fca6ea1SDimitry Andric   {{"MSG_RTN_GET_TBA_TO_PC"},   ID_RTN_GET_TBA_TO_PC,       isGFX11Plus},
1185f757f3fSDimitry Andric   {{"MSG_RTN_GET_SE_AID_ID"},   ID_RTN_GET_SE_AID_ID,       isGFX12Plus},
1190b57cec5SDimitry Andric };
120*0fca6ea1SDimitry Andric 
121*0fca6ea1SDimitry Andric static constexpr CustomOperand SysMsgOperands[] = {
122*0fca6ea1SDimitry Andric   {{""}},
123*0fca6ea1SDimitry Andric   {{"SYSMSG_OP_ECC_ERR_INTERRUPT"},  OP_SYS_ECC_ERR_INTERRUPT},
124*0fca6ea1SDimitry Andric   {{"SYSMSG_OP_REG_RD"},             OP_SYS_REG_RD},
125*0fca6ea1SDimitry Andric   {{"SYSMSG_OP_HOST_TRAP_ACK"},      OP_SYS_HOST_TRAP_ACK,      isNotGFX9Plus},
126*0fca6ea1SDimitry Andric   {{"SYSMSG_OP_TTRACE_PC"},          OP_SYS_TTRACE_PC},
127*0fca6ea1SDimitry Andric };
128*0fca6ea1SDimitry Andric 
129*0fca6ea1SDimitry Andric static constexpr CustomOperand StreamMsgOperands[] = {
130*0fca6ea1SDimitry Andric   {{"GS_OP_NOP"},       OP_GS_NOP},
131*0fca6ea1SDimitry Andric   {{"GS_OP_CUT"},       OP_GS_CUT},
132*0fca6ea1SDimitry Andric   {{"GS_OP_EMIT"},      OP_GS_EMIT},
133*0fca6ea1SDimitry Andric   {{"GS_OP_EMIT_CUT"},  OP_GS_EMIT_CUT},
134*0fca6ea1SDimitry Andric };
135*0fca6ea1SDimitry Andric 
1365f757f3fSDimitry Andric // clang-format on
13781ad6265SDimitry Andric // NOLINTEND
13881ad6265SDimitry Andric 
139*0fca6ea1SDimitry Andric int64_t getMsgId(StringRef Name, const MCSubtargetInfo &STI) {
140*0fca6ea1SDimitry Andric   return getEncodingFromOperandTable(MsgOperands, Name, STI);
141*0fca6ea1SDimitry Andric }
1420b57cec5SDimitry Andric 
143*0fca6ea1SDimitry Andric StringRef getMsgName(uint64_t Encoding, const MCSubtargetInfo &STI) {
144*0fca6ea1SDimitry Andric   return getNameFromOperandTable(MsgOperands, Encoding, STI);
145*0fca6ea1SDimitry Andric }
1460b57cec5SDimitry Andric 
147*0fca6ea1SDimitry Andric int64_t getMsgOpId(int64_t MsgId, StringRef Name, const MCSubtargetInfo &STI) {
148*0fca6ea1SDimitry Andric   if (MsgId == ID_SYSMSG)
149*0fca6ea1SDimitry Andric     return getEncodingFromOperandTable(SysMsgOperands, Name, STI);
150*0fca6ea1SDimitry Andric   return getEncodingFromOperandTable(StreamMsgOperands, Name, STI);
151*0fca6ea1SDimitry Andric }
152*0fca6ea1SDimitry Andric 
153*0fca6ea1SDimitry Andric StringRef getMsgOpName(int64_t MsgId, uint64_t Encoding,
154*0fca6ea1SDimitry Andric                        const MCSubtargetInfo &STI) {
155*0fca6ea1SDimitry Andric   assert(msgRequiresOp(MsgId, STI) && "must have an operand");
156*0fca6ea1SDimitry Andric 
157*0fca6ea1SDimitry Andric   if (MsgId == ID_SYSMSG)
158*0fca6ea1SDimitry Andric     return getNameFromOperandTable(SysMsgOperands, Encoding, STI);
159*0fca6ea1SDimitry Andric   return getNameFromOperandTable(StreamMsgOperands, Encoding, STI);
160*0fca6ea1SDimitry Andric }
1610b57cec5SDimitry Andric 
1620b57cec5SDimitry Andric } // namespace SendMsg
1630b57cec5SDimitry Andric 
1640b57cec5SDimitry Andric namespace Hwreg {
1650b57cec5SDimitry Andric 
16681ad6265SDimitry Andric // Disable lint checking for this block since it makes the table unreadable.
16781ad6265SDimitry Andric // NOLINTBEGIN
1685f757f3fSDimitry Andric // clang-format off
169*0fca6ea1SDimitry Andric static constexpr CustomOperand Operands[] = {
17081ad6265SDimitry Andric   {{""}},
17181ad6265SDimitry Andric   {{"HW_REG_MODE"},          ID_MODE},
17281ad6265SDimitry Andric   {{"HW_REG_STATUS"},        ID_STATUS},
1735f757f3fSDimitry Andric   {{"HW_REG_TRAPSTS"},       ID_TRAPSTS,     isNotGFX12Plus},
17481ad6265SDimitry Andric   {{"HW_REG_HW_ID"},         ID_HW_ID,       isNotGFX10Plus},
17581ad6265SDimitry Andric   {{"HW_REG_GPR_ALLOC"},     ID_GPR_ALLOC},
17681ad6265SDimitry Andric   {{"HW_REG_LDS_ALLOC"},     ID_LDS_ALLOC},
17781ad6265SDimitry Andric   {{"HW_REG_IB_STS"},        ID_IB_STS},
17881ad6265SDimitry Andric   {{""}},
17981ad6265SDimitry Andric   {{""}},
1805f757f3fSDimitry Andric   {{"HW_REG_PERF_SNAPSHOT_DATA"},  ID_PERF_SNAPSHOT_DATA_gfx12,  isGFX12Plus},
1815f757f3fSDimitry Andric   {{"HW_REG_PERF_SNAPSHOT_PC_LO"}, ID_PERF_SNAPSHOT_PC_LO_gfx12, isGFX12Plus},
1825f757f3fSDimitry Andric   {{"HW_REG_PERF_SNAPSHOT_PC_HI"}, ID_PERF_SNAPSHOT_PC_HI_gfx12, isGFX12Plus},
18381ad6265SDimitry Andric   {{""}},
18481ad6265SDimitry Andric   {{""}},
1855f757f3fSDimitry Andric   {{"HW_REG_SH_MEM_BASES"},  ID_MEM_BASES,   isGFX9_GFX10_GFX11},
18681ad6265SDimitry Andric   {{"HW_REG_TBA_LO"},        ID_TBA_LO,      isGFX9_GFX10},
18781ad6265SDimitry Andric   {{"HW_REG_TBA_HI"},        ID_TBA_HI,      isGFX9_GFX10},
18881ad6265SDimitry Andric   {{"HW_REG_TMA_LO"},        ID_TMA_LO,      isGFX9_GFX10},
18981ad6265SDimitry Andric   {{"HW_REG_TMA_HI"},        ID_TMA_HI,      isGFX9_GFX10},
1905f757f3fSDimitry Andric   {{"HW_REG_FLAT_SCR_LO"},   ID_FLAT_SCR_LO, isGFX10_GFX11},
1915f757f3fSDimitry Andric   {{"HW_REG_FLAT_SCR_HI"},   ID_FLAT_SCR_HI, isGFX10_GFX11},
19281ad6265SDimitry Andric   {{"HW_REG_XNACK_MASK"},    ID_XNACK_MASK,  isGFX10Before1030},
19381ad6265SDimitry Andric   {{"HW_REG_HW_ID1"},        ID_HW_ID1,      isGFX10Plus},
19481ad6265SDimitry Andric   {{"HW_REG_HW_ID2"},        ID_HW_ID2,      isGFX10Plus},
19581ad6265SDimitry Andric   {{"HW_REG_POPS_PACKER"},   ID_POPS_PACKER, isGFX10},
19681ad6265SDimitry Andric   {{""}},
1975f757f3fSDimitry Andric   {{"HW_REG_PERF_SNAPSHOT_DATA"}, ID_PERF_SNAPSHOT_DATA_gfx11, isGFX11},
19881ad6265SDimitry Andric   {{""}},
1995f757f3fSDimitry Andric   {{"HW_REG_SHADER_CYCLES"},    ID_SHADER_CYCLES,    isGFX10_3_GFX11},
2005f757f3fSDimitry Andric   {{"HW_REG_SHADER_CYCLES_HI"}, ID_SHADER_CYCLES_HI, isGFX12Plus},
2015f757f3fSDimitry Andric   {{"HW_REG_DVGPR_ALLOC_LO"},   ID_DVGPR_ALLOC_LO,   isGFX12Plus},
2025f757f3fSDimitry Andric   {{"HW_REG_DVGPR_ALLOC_HI"},   ID_DVGPR_ALLOC_HI,   isGFX12Plus},
20381ad6265SDimitry Andric 
2045f757f3fSDimitry Andric   // Register numbers reused in GFX11
2055f757f3fSDimitry Andric   {{"HW_REG_PERF_SNAPSHOT_PC_LO"}, ID_PERF_SNAPSHOT_PC_LO_gfx11, isGFX11},
2065f757f3fSDimitry Andric   {{"HW_REG_PERF_SNAPSHOT_PC_HI"}, ID_PERF_SNAPSHOT_PC_HI_gfx11, isGFX11},
2075f757f3fSDimitry Andric 
2085f757f3fSDimitry Andric   // Register numbers reused in GFX12+
2095f757f3fSDimitry Andric   {{"HW_REG_STATE_PRIV"},          ID_STATE_PRIV,          isGFX12Plus},
2105f757f3fSDimitry Andric   {{"HW_REG_PERF_SNAPSHOT_DATA1"}, ID_PERF_SNAPSHOT_DATA1, isGFX12Plus},
2115f757f3fSDimitry Andric   {{"HW_REG_PERF_SNAPSHOT_DATA2"}, ID_PERF_SNAPSHOT_DATA2, isGFX12Plus},
2125f757f3fSDimitry Andric   {{"HW_REG_EXCP_FLAG_PRIV"},      ID_EXCP_FLAG_PRIV,      isGFX12Plus},
2135f757f3fSDimitry Andric   {{"HW_REG_EXCP_FLAG_USER"},      ID_EXCP_FLAG_USER,      isGFX12Plus},
2145f757f3fSDimitry Andric   {{"HW_REG_TRAP_CTRL"},           ID_TRAP_CTRL,           isGFX12Plus},
2155f757f3fSDimitry Andric   {{"HW_REG_SCRATCH_BASE_LO"},     ID_FLAT_SCR_LO,         isGFX12Plus},
2165f757f3fSDimitry Andric   {{"HW_REG_SCRATCH_BASE_HI"},     ID_FLAT_SCR_HI,         isGFX12Plus},
2175f757f3fSDimitry Andric   {{"HW_REG_SHADER_CYCLES_LO"},    ID_SHADER_CYCLES,       isGFX12Plus},
21806c3fb27SDimitry Andric 
21981ad6265SDimitry Andric   // GFX940 specific registers
22081ad6265SDimitry Andric   {{"HW_REG_XCC_ID"},                 ID_XCC_ID,                 isGFX940},
22181ad6265SDimitry Andric   {{"HW_REG_SQ_PERF_SNAPSHOT_DATA"},  ID_SQ_PERF_SNAPSHOT_DATA,  isGFX940},
22281ad6265SDimitry Andric   {{"HW_REG_SQ_PERF_SNAPSHOT_DATA1"}, ID_SQ_PERF_SNAPSHOT_DATA1, isGFX940},
22381ad6265SDimitry Andric   {{"HW_REG_SQ_PERF_SNAPSHOT_PC_LO"}, ID_SQ_PERF_SNAPSHOT_PC_LO, isGFX940},
22481ad6265SDimitry Andric   {{"HW_REG_SQ_PERF_SNAPSHOT_PC_HI"}, ID_SQ_PERF_SNAPSHOT_PC_HI, isGFX940},
22581ad6265SDimitry Andric 
22681ad6265SDimitry Andric   // Aliases
22781ad6265SDimitry Andric   {{"HW_REG_HW_ID"},                  ID_HW_ID1,                 isGFX10},
2280b57cec5SDimitry Andric };
2295f757f3fSDimitry Andric // clang-format on
23081ad6265SDimitry Andric // NOLINTEND
23181ad6265SDimitry Andric 
232*0fca6ea1SDimitry Andric int64_t getHwregId(StringRef Name, const MCSubtargetInfo &STI) {
233*0fca6ea1SDimitry Andric   return getEncodingFromOperandTable(Operands, Name, STI);
234*0fca6ea1SDimitry Andric }
235*0fca6ea1SDimitry Andric 
236*0fca6ea1SDimitry Andric StringRef getHwreg(uint64_t Encoding, const MCSubtargetInfo &STI) {
237*0fca6ea1SDimitry Andric   return getNameFromOperandTable(Operands, Encoding, STI);
238*0fca6ea1SDimitry Andric }
2390b57cec5SDimitry Andric 
2400b57cec5SDimitry Andric } // namespace Hwreg
2410b57cec5SDimitry Andric 
242e8d8bef9SDimitry Andric namespace MTBUFFormat {
243e8d8bef9SDimitry Andric 
244e8d8bef9SDimitry Andric StringLiteral const DfmtSymbolic[] = {
245e8d8bef9SDimitry Andric   "BUF_DATA_FORMAT_INVALID",
246e8d8bef9SDimitry Andric   "BUF_DATA_FORMAT_8",
247e8d8bef9SDimitry Andric   "BUF_DATA_FORMAT_16",
248e8d8bef9SDimitry Andric   "BUF_DATA_FORMAT_8_8",
249e8d8bef9SDimitry Andric   "BUF_DATA_FORMAT_32",
250e8d8bef9SDimitry Andric   "BUF_DATA_FORMAT_16_16",
251e8d8bef9SDimitry Andric   "BUF_DATA_FORMAT_10_11_11",
252e8d8bef9SDimitry Andric   "BUF_DATA_FORMAT_11_11_10",
253e8d8bef9SDimitry Andric   "BUF_DATA_FORMAT_10_10_10_2",
254e8d8bef9SDimitry Andric   "BUF_DATA_FORMAT_2_10_10_10",
255e8d8bef9SDimitry Andric   "BUF_DATA_FORMAT_8_8_8_8",
256e8d8bef9SDimitry Andric   "BUF_DATA_FORMAT_32_32",
257e8d8bef9SDimitry Andric   "BUF_DATA_FORMAT_16_16_16_16",
258e8d8bef9SDimitry Andric   "BUF_DATA_FORMAT_32_32_32",
259e8d8bef9SDimitry Andric   "BUF_DATA_FORMAT_32_32_32_32",
260e8d8bef9SDimitry Andric   "BUF_DATA_FORMAT_RESERVED_15"
261e8d8bef9SDimitry Andric };
262e8d8bef9SDimitry Andric 
263e8d8bef9SDimitry Andric StringLiteral const NfmtSymbolicGFX10[] = {
264e8d8bef9SDimitry Andric   "BUF_NUM_FORMAT_UNORM",
265e8d8bef9SDimitry Andric   "BUF_NUM_FORMAT_SNORM",
266e8d8bef9SDimitry Andric   "BUF_NUM_FORMAT_USCALED",
267e8d8bef9SDimitry Andric   "BUF_NUM_FORMAT_SSCALED",
268e8d8bef9SDimitry Andric   "BUF_NUM_FORMAT_UINT",
269e8d8bef9SDimitry Andric   "BUF_NUM_FORMAT_SINT",
270e8d8bef9SDimitry Andric   "",
271e8d8bef9SDimitry Andric   "BUF_NUM_FORMAT_FLOAT"
272e8d8bef9SDimitry Andric };
273e8d8bef9SDimitry Andric 
274e8d8bef9SDimitry Andric StringLiteral const NfmtSymbolicSICI[] = {
275e8d8bef9SDimitry Andric   "BUF_NUM_FORMAT_UNORM",
276e8d8bef9SDimitry Andric   "BUF_NUM_FORMAT_SNORM",
277e8d8bef9SDimitry Andric   "BUF_NUM_FORMAT_USCALED",
278e8d8bef9SDimitry Andric   "BUF_NUM_FORMAT_SSCALED",
279e8d8bef9SDimitry Andric   "BUF_NUM_FORMAT_UINT",
280e8d8bef9SDimitry Andric   "BUF_NUM_FORMAT_SINT",
281e8d8bef9SDimitry Andric   "BUF_NUM_FORMAT_SNORM_OGL",
282e8d8bef9SDimitry Andric   "BUF_NUM_FORMAT_FLOAT"
283e8d8bef9SDimitry Andric };
284e8d8bef9SDimitry Andric 
285e8d8bef9SDimitry Andric StringLiteral const NfmtSymbolicVI[] = {    // VI and GFX9
286e8d8bef9SDimitry Andric   "BUF_NUM_FORMAT_UNORM",
287e8d8bef9SDimitry Andric   "BUF_NUM_FORMAT_SNORM",
288e8d8bef9SDimitry Andric   "BUF_NUM_FORMAT_USCALED",
289e8d8bef9SDimitry Andric   "BUF_NUM_FORMAT_SSCALED",
290e8d8bef9SDimitry Andric   "BUF_NUM_FORMAT_UINT",
291e8d8bef9SDimitry Andric   "BUF_NUM_FORMAT_SINT",
292e8d8bef9SDimitry Andric   "BUF_NUM_FORMAT_RESERVED_6",
293e8d8bef9SDimitry Andric   "BUF_NUM_FORMAT_FLOAT"
294e8d8bef9SDimitry Andric };
295e8d8bef9SDimitry Andric 
29681ad6265SDimitry Andric StringLiteral const UfmtSymbolicGFX10[] = {
297e8d8bef9SDimitry Andric   "BUF_FMT_INVALID",
298e8d8bef9SDimitry Andric 
299e8d8bef9SDimitry Andric   "BUF_FMT_8_UNORM",
300e8d8bef9SDimitry Andric   "BUF_FMT_8_SNORM",
301e8d8bef9SDimitry Andric   "BUF_FMT_8_USCALED",
302e8d8bef9SDimitry Andric   "BUF_FMT_8_SSCALED",
303e8d8bef9SDimitry Andric   "BUF_FMT_8_UINT",
304e8d8bef9SDimitry Andric   "BUF_FMT_8_SINT",
305e8d8bef9SDimitry Andric 
306e8d8bef9SDimitry Andric   "BUF_FMT_16_UNORM",
307e8d8bef9SDimitry Andric   "BUF_FMT_16_SNORM",
308e8d8bef9SDimitry Andric   "BUF_FMT_16_USCALED",
309e8d8bef9SDimitry Andric   "BUF_FMT_16_SSCALED",
310e8d8bef9SDimitry Andric   "BUF_FMT_16_UINT",
311e8d8bef9SDimitry Andric   "BUF_FMT_16_SINT",
312e8d8bef9SDimitry Andric   "BUF_FMT_16_FLOAT",
313e8d8bef9SDimitry Andric 
314e8d8bef9SDimitry Andric   "BUF_FMT_8_8_UNORM",
315e8d8bef9SDimitry Andric   "BUF_FMT_8_8_SNORM",
316e8d8bef9SDimitry Andric   "BUF_FMT_8_8_USCALED",
317e8d8bef9SDimitry Andric   "BUF_FMT_8_8_SSCALED",
318e8d8bef9SDimitry Andric   "BUF_FMT_8_8_UINT",
319e8d8bef9SDimitry Andric   "BUF_FMT_8_8_SINT",
320e8d8bef9SDimitry Andric 
321e8d8bef9SDimitry Andric   "BUF_FMT_32_UINT",
322e8d8bef9SDimitry Andric   "BUF_FMT_32_SINT",
323e8d8bef9SDimitry Andric   "BUF_FMT_32_FLOAT",
324e8d8bef9SDimitry Andric 
325e8d8bef9SDimitry Andric   "BUF_FMT_16_16_UNORM",
326e8d8bef9SDimitry Andric   "BUF_FMT_16_16_SNORM",
327e8d8bef9SDimitry Andric   "BUF_FMT_16_16_USCALED",
328e8d8bef9SDimitry Andric   "BUF_FMT_16_16_SSCALED",
329e8d8bef9SDimitry Andric   "BUF_FMT_16_16_UINT",
330e8d8bef9SDimitry Andric   "BUF_FMT_16_16_SINT",
331e8d8bef9SDimitry Andric   "BUF_FMT_16_16_FLOAT",
332e8d8bef9SDimitry Andric 
333e8d8bef9SDimitry Andric   "BUF_FMT_10_11_11_UNORM",
334e8d8bef9SDimitry Andric   "BUF_FMT_10_11_11_SNORM",
335e8d8bef9SDimitry Andric   "BUF_FMT_10_11_11_USCALED",
336e8d8bef9SDimitry Andric   "BUF_FMT_10_11_11_SSCALED",
337e8d8bef9SDimitry Andric   "BUF_FMT_10_11_11_UINT",
338e8d8bef9SDimitry Andric   "BUF_FMT_10_11_11_SINT",
339e8d8bef9SDimitry Andric   "BUF_FMT_10_11_11_FLOAT",
340e8d8bef9SDimitry Andric 
341e8d8bef9SDimitry Andric   "BUF_FMT_11_11_10_UNORM",
342e8d8bef9SDimitry Andric   "BUF_FMT_11_11_10_SNORM",
343e8d8bef9SDimitry Andric   "BUF_FMT_11_11_10_USCALED",
344e8d8bef9SDimitry Andric   "BUF_FMT_11_11_10_SSCALED",
345e8d8bef9SDimitry Andric   "BUF_FMT_11_11_10_UINT",
346e8d8bef9SDimitry Andric   "BUF_FMT_11_11_10_SINT",
347e8d8bef9SDimitry Andric   "BUF_FMT_11_11_10_FLOAT",
348e8d8bef9SDimitry Andric 
349e8d8bef9SDimitry Andric   "BUF_FMT_10_10_10_2_UNORM",
350e8d8bef9SDimitry Andric   "BUF_FMT_10_10_10_2_SNORM",
351e8d8bef9SDimitry Andric   "BUF_FMT_10_10_10_2_USCALED",
352e8d8bef9SDimitry Andric   "BUF_FMT_10_10_10_2_SSCALED",
353e8d8bef9SDimitry Andric   "BUF_FMT_10_10_10_2_UINT",
354e8d8bef9SDimitry Andric   "BUF_FMT_10_10_10_2_SINT",
355e8d8bef9SDimitry Andric 
356e8d8bef9SDimitry Andric   "BUF_FMT_2_10_10_10_UNORM",
357e8d8bef9SDimitry Andric   "BUF_FMT_2_10_10_10_SNORM",
358e8d8bef9SDimitry Andric   "BUF_FMT_2_10_10_10_USCALED",
359e8d8bef9SDimitry Andric   "BUF_FMT_2_10_10_10_SSCALED",
360e8d8bef9SDimitry Andric   "BUF_FMT_2_10_10_10_UINT",
361e8d8bef9SDimitry Andric   "BUF_FMT_2_10_10_10_SINT",
362e8d8bef9SDimitry Andric 
363e8d8bef9SDimitry Andric   "BUF_FMT_8_8_8_8_UNORM",
364e8d8bef9SDimitry Andric   "BUF_FMT_8_8_8_8_SNORM",
365e8d8bef9SDimitry Andric   "BUF_FMT_8_8_8_8_USCALED",
366e8d8bef9SDimitry Andric   "BUF_FMT_8_8_8_8_SSCALED",
367e8d8bef9SDimitry Andric   "BUF_FMT_8_8_8_8_UINT",
368e8d8bef9SDimitry Andric   "BUF_FMT_8_8_8_8_SINT",
369e8d8bef9SDimitry Andric 
370e8d8bef9SDimitry Andric   "BUF_FMT_32_32_UINT",
371e8d8bef9SDimitry Andric   "BUF_FMT_32_32_SINT",
372e8d8bef9SDimitry Andric   "BUF_FMT_32_32_FLOAT",
373e8d8bef9SDimitry Andric 
374e8d8bef9SDimitry Andric   "BUF_FMT_16_16_16_16_UNORM",
375e8d8bef9SDimitry Andric   "BUF_FMT_16_16_16_16_SNORM",
376e8d8bef9SDimitry Andric   "BUF_FMT_16_16_16_16_USCALED",
377e8d8bef9SDimitry Andric   "BUF_FMT_16_16_16_16_SSCALED",
378e8d8bef9SDimitry Andric   "BUF_FMT_16_16_16_16_UINT",
379e8d8bef9SDimitry Andric   "BUF_FMT_16_16_16_16_SINT",
380e8d8bef9SDimitry Andric   "BUF_FMT_16_16_16_16_FLOAT",
381e8d8bef9SDimitry Andric 
382e8d8bef9SDimitry Andric   "BUF_FMT_32_32_32_UINT",
383e8d8bef9SDimitry Andric   "BUF_FMT_32_32_32_SINT",
384e8d8bef9SDimitry Andric   "BUF_FMT_32_32_32_FLOAT",
385e8d8bef9SDimitry Andric   "BUF_FMT_32_32_32_32_UINT",
386e8d8bef9SDimitry Andric   "BUF_FMT_32_32_32_32_SINT",
387e8d8bef9SDimitry Andric   "BUF_FMT_32_32_32_32_FLOAT"
388e8d8bef9SDimitry Andric };
389e8d8bef9SDimitry Andric 
39081ad6265SDimitry Andric unsigned const DfmtNfmt2UFmtGFX10[] = {
391e8d8bef9SDimitry Andric   DFMT_INVALID     | (NFMT_UNORM   << NFMT_SHIFT),
392e8d8bef9SDimitry Andric 
393e8d8bef9SDimitry Andric   DFMT_8           | (NFMT_UNORM   << NFMT_SHIFT),
394e8d8bef9SDimitry Andric   DFMT_8           | (NFMT_SNORM   << NFMT_SHIFT),
395e8d8bef9SDimitry Andric   DFMT_8           | (NFMT_USCALED << NFMT_SHIFT),
396e8d8bef9SDimitry Andric   DFMT_8           | (NFMT_SSCALED << NFMT_SHIFT),
397e8d8bef9SDimitry Andric   DFMT_8           | (NFMT_UINT    << NFMT_SHIFT),
398e8d8bef9SDimitry Andric   DFMT_8           | (NFMT_SINT    << NFMT_SHIFT),
399e8d8bef9SDimitry Andric 
400e8d8bef9SDimitry Andric   DFMT_16          | (NFMT_UNORM   << NFMT_SHIFT),
401e8d8bef9SDimitry Andric   DFMT_16          | (NFMT_SNORM   << NFMT_SHIFT),
402e8d8bef9SDimitry Andric   DFMT_16          | (NFMT_USCALED << NFMT_SHIFT),
403e8d8bef9SDimitry Andric   DFMT_16          | (NFMT_SSCALED << NFMT_SHIFT),
404e8d8bef9SDimitry Andric   DFMT_16          | (NFMT_UINT    << NFMT_SHIFT),
405e8d8bef9SDimitry Andric   DFMT_16          | (NFMT_SINT    << NFMT_SHIFT),
406e8d8bef9SDimitry Andric   DFMT_16          | (NFMT_FLOAT   << NFMT_SHIFT),
407e8d8bef9SDimitry Andric 
408e8d8bef9SDimitry Andric   DFMT_8_8         | (NFMT_UNORM   << NFMT_SHIFT),
409e8d8bef9SDimitry Andric   DFMT_8_8         | (NFMT_SNORM   << NFMT_SHIFT),
410e8d8bef9SDimitry Andric   DFMT_8_8         | (NFMT_USCALED << NFMT_SHIFT),
411e8d8bef9SDimitry Andric   DFMT_8_8         | (NFMT_SSCALED << NFMT_SHIFT),
412e8d8bef9SDimitry Andric   DFMT_8_8         | (NFMT_UINT    << NFMT_SHIFT),
413e8d8bef9SDimitry Andric   DFMT_8_8         | (NFMT_SINT    << NFMT_SHIFT),
414e8d8bef9SDimitry Andric 
415e8d8bef9SDimitry Andric   DFMT_32          | (NFMT_UINT    << NFMT_SHIFT),
416e8d8bef9SDimitry Andric   DFMT_32          | (NFMT_SINT    << NFMT_SHIFT),
417e8d8bef9SDimitry Andric   DFMT_32          | (NFMT_FLOAT   << NFMT_SHIFT),
418e8d8bef9SDimitry Andric 
419e8d8bef9SDimitry Andric   DFMT_16_16       | (NFMT_UNORM   << NFMT_SHIFT),
420e8d8bef9SDimitry Andric   DFMT_16_16       | (NFMT_SNORM   << NFMT_SHIFT),
421e8d8bef9SDimitry Andric   DFMT_16_16       | (NFMT_USCALED << NFMT_SHIFT),
422e8d8bef9SDimitry Andric   DFMT_16_16       | (NFMT_SSCALED << NFMT_SHIFT),
423e8d8bef9SDimitry Andric   DFMT_16_16       | (NFMT_UINT    << NFMT_SHIFT),
424e8d8bef9SDimitry Andric   DFMT_16_16       | (NFMT_SINT    << NFMT_SHIFT),
425e8d8bef9SDimitry Andric   DFMT_16_16       | (NFMT_FLOAT   << NFMT_SHIFT),
426e8d8bef9SDimitry Andric 
427e8d8bef9SDimitry Andric   DFMT_10_11_11    | (NFMT_UNORM   << NFMT_SHIFT),
428e8d8bef9SDimitry Andric   DFMT_10_11_11    | (NFMT_SNORM   << NFMT_SHIFT),
429e8d8bef9SDimitry Andric   DFMT_10_11_11    | (NFMT_USCALED << NFMT_SHIFT),
430e8d8bef9SDimitry Andric   DFMT_10_11_11    | (NFMT_SSCALED << NFMT_SHIFT),
431e8d8bef9SDimitry Andric   DFMT_10_11_11    | (NFMT_UINT    << NFMT_SHIFT),
432e8d8bef9SDimitry Andric   DFMT_10_11_11    | (NFMT_SINT    << NFMT_SHIFT),
433e8d8bef9SDimitry Andric   DFMT_10_11_11    | (NFMT_FLOAT   << NFMT_SHIFT),
434e8d8bef9SDimitry Andric 
435e8d8bef9SDimitry Andric   DFMT_11_11_10    | (NFMT_UNORM   << NFMT_SHIFT),
436e8d8bef9SDimitry Andric   DFMT_11_11_10    | (NFMT_SNORM   << NFMT_SHIFT),
437e8d8bef9SDimitry Andric   DFMT_11_11_10    | (NFMT_USCALED << NFMT_SHIFT),
438e8d8bef9SDimitry Andric   DFMT_11_11_10    | (NFMT_SSCALED << NFMT_SHIFT),
439e8d8bef9SDimitry Andric   DFMT_11_11_10    | (NFMT_UINT    << NFMT_SHIFT),
440e8d8bef9SDimitry Andric   DFMT_11_11_10    | (NFMT_SINT    << NFMT_SHIFT),
441e8d8bef9SDimitry Andric   DFMT_11_11_10    | (NFMT_FLOAT   << NFMT_SHIFT),
442e8d8bef9SDimitry Andric 
443e8d8bef9SDimitry Andric   DFMT_10_10_10_2  | (NFMT_UNORM   << NFMT_SHIFT),
444e8d8bef9SDimitry Andric   DFMT_10_10_10_2  | (NFMT_SNORM   << NFMT_SHIFT),
445e8d8bef9SDimitry Andric   DFMT_10_10_10_2  | (NFMT_USCALED << NFMT_SHIFT),
446e8d8bef9SDimitry Andric   DFMT_10_10_10_2  | (NFMT_SSCALED << NFMT_SHIFT),
447e8d8bef9SDimitry Andric   DFMT_10_10_10_2  | (NFMT_UINT    << NFMT_SHIFT),
448e8d8bef9SDimitry Andric   DFMT_10_10_10_2  | (NFMT_SINT    << NFMT_SHIFT),
449e8d8bef9SDimitry Andric 
450e8d8bef9SDimitry Andric   DFMT_2_10_10_10  | (NFMT_UNORM   << NFMT_SHIFT),
451e8d8bef9SDimitry Andric   DFMT_2_10_10_10  | (NFMT_SNORM   << NFMT_SHIFT),
452e8d8bef9SDimitry Andric   DFMT_2_10_10_10  | (NFMT_USCALED << NFMT_SHIFT),
453e8d8bef9SDimitry Andric   DFMT_2_10_10_10  | (NFMT_SSCALED << NFMT_SHIFT),
454e8d8bef9SDimitry Andric   DFMT_2_10_10_10  | (NFMT_UINT    << NFMT_SHIFT),
455e8d8bef9SDimitry Andric   DFMT_2_10_10_10  | (NFMT_SINT    << NFMT_SHIFT),
456e8d8bef9SDimitry Andric 
457e8d8bef9SDimitry Andric   DFMT_8_8_8_8     | (NFMT_UNORM   << NFMT_SHIFT),
458e8d8bef9SDimitry Andric   DFMT_8_8_8_8     | (NFMT_SNORM   << NFMT_SHIFT),
459e8d8bef9SDimitry Andric   DFMT_8_8_8_8     | (NFMT_USCALED << NFMT_SHIFT),
460e8d8bef9SDimitry Andric   DFMT_8_8_8_8     | (NFMT_SSCALED << NFMT_SHIFT),
461e8d8bef9SDimitry Andric   DFMT_8_8_8_8     | (NFMT_UINT    << NFMT_SHIFT),
462e8d8bef9SDimitry Andric   DFMT_8_8_8_8     | (NFMT_SINT    << NFMT_SHIFT),
463e8d8bef9SDimitry Andric 
464e8d8bef9SDimitry Andric   DFMT_32_32       | (NFMT_UINT    << NFMT_SHIFT),
465e8d8bef9SDimitry Andric   DFMT_32_32       | (NFMT_SINT    << NFMT_SHIFT),
466e8d8bef9SDimitry Andric   DFMT_32_32       | (NFMT_FLOAT   << NFMT_SHIFT),
467e8d8bef9SDimitry Andric 
468e8d8bef9SDimitry Andric   DFMT_16_16_16_16 | (NFMT_UNORM   << NFMT_SHIFT),
469e8d8bef9SDimitry Andric   DFMT_16_16_16_16 | (NFMT_SNORM   << NFMT_SHIFT),
470e8d8bef9SDimitry Andric   DFMT_16_16_16_16 | (NFMT_USCALED << NFMT_SHIFT),
471e8d8bef9SDimitry Andric   DFMT_16_16_16_16 | (NFMT_SSCALED << NFMT_SHIFT),
472e8d8bef9SDimitry Andric   DFMT_16_16_16_16 | (NFMT_UINT    << NFMT_SHIFT),
473e8d8bef9SDimitry Andric   DFMT_16_16_16_16 | (NFMT_SINT    << NFMT_SHIFT),
474e8d8bef9SDimitry Andric   DFMT_16_16_16_16 | (NFMT_FLOAT   << NFMT_SHIFT),
475e8d8bef9SDimitry Andric 
476e8d8bef9SDimitry Andric   DFMT_32_32_32    | (NFMT_UINT    << NFMT_SHIFT),
477e8d8bef9SDimitry Andric   DFMT_32_32_32    | (NFMT_SINT    << NFMT_SHIFT),
478e8d8bef9SDimitry Andric   DFMT_32_32_32    | (NFMT_FLOAT   << NFMT_SHIFT),
479e8d8bef9SDimitry Andric   DFMT_32_32_32_32 | (NFMT_UINT    << NFMT_SHIFT),
480e8d8bef9SDimitry Andric   DFMT_32_32_32_32 | (NFMT_SINT    << NFMT_SHIFT),
481e8d8bef9SDimitry Andric   DFMT_32_32_32_32 | (NFMT_FLOAT   << NFMT_SHIFT)
482e8d8bef9SDimitry Andric };
483e8d8bef9SDimitry Andric 
48481ad6265SDimitry Andric StringLiteral const UfmtSymbolicGFX11[] = {
48581ad6265SDimitry Andric   "BUF_FMT_INVALID",
48681ad6265SDimitry Andric 
48781ad6265SDimitry Andric   "BUF_FMT_8_UNORM",
48881ad6265SDimitry Andric   "BUF_FMT_8_SNORM",
48981ad6265SDimitry Andric   "BUF_FMT_8_USCALED",
49081ad6265SDimitry Andric   "BUF_FMT_8_SSCALED",
49181ad6265SDimitry Andric   "BUF_FMT_8_UINT",
49281ad6265SDimitry Andric   "BUF_FMT_8_SINT",
49381ad6265SDimitry Andric 
49481ad6265SDimitry Andric   "BUF_FMT_16_UNORM",
49581ad6265SDimitry Andric   "BUF_FMT_16_SNORM",
49681ad6265SDimitry Andric   "BUF_FMT_16_USCALED",
49781ad6265SDimitry Andric   "BUF_FMT_16_SSCALED",
49881ad6265SDimitry Andric   "BUF_FMT_16_UINT",
49981ad6265SDimitry Andric   "BUF_FMT_16_SINT",
50081ad6265SDimitry Andric   "BUF_FMT_16_FLOAT",
50181ad6265SDimitry Andric 
50281ad6265SDimitry Andric   "BUF_FMT_8_8_UNORM",
50381ad6265SDimitry Andric   "BUF_FMT_8_8_SNORM",
50481ad6265SDimitry Andric   "BUF_FMT_8_8_USCALED",
50581ad6265SDimitry Andric   "BUF_FMT_8_8_SSCALED",
50681ad6265SDimitry Andric   "BUF_FMT_8_8_UINT",
50781ad6265SDimitry Andric   "BUF_FMT_8_8_SINT",
50881ad6265SDimitry Andric 
50981ad6265SDimitry Andric   "BUF_FMT_32_UINT",
51081ad6265SDimitry Andric   "BUF_FMT_32_SINT",
51181ad6265SDimitry Andric   "BUF_FMT_32_FLOAT",
51281ad6265SDimitry Andric 
51381ad6265SDimitry Andric   "BUF_FMT_16_16_UNORM",
51481ad6265SDimitry Andric   "BUF_FMT_16_16_SNORM",
51581ad6265SDimitry Andric   "BUF_FMT_16_16_USCALED",
51681ad6265SDimitry Andric   "BUF_FMT_16_16_SSCALED",
51781ad6265SDimitry Andric   "BUF_FMT_16_16_UINT",
51881ad6265SDimitry Andric   "BUF_FMT_16_16_SINT",
51981ad6265SDimitry Andric   "BUF_FMT_16_16_FLOAT",
52081ad6265SDimitry Andric 
52181ad6265SDimitry Andric   "BUF_FMT_10_11_11_FLOAT",
52281ad6265SDimitry Andric 
52381ad6265SDimitry Andric   "BUF_FMT_11_11_10_FLOAT",
52481ad6265SDimitry Andric 
52581ad6265SDimitry Andric   "BUF_FMT_10_10_10_2_UNORM",
52681ad6265SDimitry Andric   "BUF_FMT_10_10_10_2_SNORM",
52781ad6265SDimitry Andric   "BUF_FMT_10_10_10_2_UINT",
52881ad6265SDimitry Andric   "BUF_FMT_10_10_10_2_SINT",
52981ad6265SDimitry Andric 
53081ad6265SDimitry Andric   "BUF_FMT_2_10_10_10_UNORM",
53181ad6265SDimitry Andric   "BUF_FMT_2_10_10_10_SNORM",
53281ad6265SDimitry Andric   "BUF_FMT_2_10_10_10_USCALED",
53381ad6265SDimitry Andric   "BUF_FMT_2_10_10_10_SSCALED",
53481ad6265SDimitry Andric   "BUF_FMT_2_10_10_10_UINT",
53581ad6265SDimitry Andric   "BUF_FMT_2_10_10_10_SINT",
53681ad6265SDimitry Andric 
53781ad6265SDimitry Andric   "BUF_FMT_8_8_8_8_UNORM",
53881ad6265SDimitry Andric   "BUF_FMT_8_8_8_8_SNORM",
53981ad6265SDimitry Andric   "BUF_FMT_8_8_8_8_USCALED",
54081ad6265SDimitry Andric   "BUF_FMT_8_8_8_8_SSCALED",
54181ad6265SDimitry Andric   "BUF_FMT_8_8_8_8_UINT",
54281ad6265SDimitry Andric   "BUF_FMT_8_8_8_8_SINT",
54381ad6265SDimitry Andric 
54481ad6265SDimitry Andric   "BUF_FMT_32_32_UINT",
54581ad6265SDimitry Andric   "BUF_FMT_32_32_SINT",
54681ad6265SDimitry Andric   "BUF_FMT_32_32_FLOAT",
54781ad6265SDimitry Andric 
54881ad6265SDimitry Andric   "BUF_FMT_16_16_16_16_UNORM",
54981ad6265SDimitry Andric   "BUF_FMT_16_16_16_16_SNORM",
55081ad6265SDimitry Andric   "BUF_FMT_16_16_16_16_USCALED",
55181ad6265SDimitry Andric   "BUF_FMT_16_16_16_16_SSCALED",
55281ad6265SDimitry Andric   "BUF_FMT_16_16_16_16_UINT",
55381ad6265SDimitry Andric   "BUF_FMT_16_16_16_16_SINT",
55481ad6265SDimitry Andric   "BUF_FMT_16_16_16_16_FLOAT",
55581ad6265SDimitry Andric 
55681ad6265SDimitry Andric   "BUF_FMT_32_32_32_UINT",
55781ad6265SDimitry Andric   "BUF_FMT_32_32_32_SINT",
55881ad6265SDimitry Andric   "BUF_FMT_32_32_32_FLOAT",
55981ad6265SDimitry Andric   "BUF_FMT_32_32_32_32_UINT",
56081ad6265SDimitry Andric   "BUF_FMT_32_32_32_32_SINT",
56181ad6265SDimitry Andric   "BUF_FMT_32_32_32_32_FLOAT"
56281ad6265SDimitry Andric };
56381ad6265SDimitry Andric 
56481ad6265SDimitry Andric unsigned const DfmtNfmt2UFmtGFX11[] = {
56581ad6265SDimitry Andric   DFMT_INVALID     | (NFMT_UNORM   << NFMT_SHIFT),
56681ad6265SDimitry Andric 
56781ad6265SDimitry Andric   DFMT_8           | (NFMT_UNORM   << NFMT_SHIFT),
56881ad6265SDimitry Andric   DFMT_8           | (NFMT_SNORM   << NFMT_SHIFT),
56981ad6265SDimitry Andric   DFMT_8           | (NFMT_USCALED << NFMT_SHIFT),
57081ad6265SDimitry Andric   DFMT_8           | (NFMT_SSCALED << NFMT_SHIFT),
57181ad6265SDimitry Andric   DFMT_8           | (NFMT_UINT    << NFMT_SHIFT),
57281ad6265SDimitry Andric   DFMT_8           | (NFMT_SINT    << NFMT_SHIFT),
57381ad6265SDimitry Andric 
57481ad6265SDimitry Andric   DFMT_16          | (NFMT_UNORM   << NFMT_SHIFT),
57581ad6265SDimitry Andric   DFMT_16          | (NFMT_SNORM   << NFMT_SHIFT),
57681ad6265SDimitry Andric   DFMT_16          | (NFMT_USCALED << NFMT_SHIFT),
57781ad6265SDimitry Andric   DFMT_16          | (NFMT_SSCALED << NFMT_SHIFT),
57881ad6265SDimitry Andric   DFMT_16          | (NFMT_UINT    << NFMT_SHIFT),
57981ad6265SDimitry Andric   DFMT_16          | (NFMT_SINT    << NFMT_SHIFT),
58081ad6265SDimitry Andric   DFMT_16          | (NFMT_FLOAT   << NFMT_SHIFT),
58181ad6265SDimitry Andric 
58281ad6265SDimitry Andric   DFMT_8_8         | (NFMT_UNORM   << NFMT_SHIFT),
58381ad6265SDimitry Andric   DFMT_8_8         | (NFMT_SNORM   << NFMT_SHIFT),
58481ad6265SDimitry Andric   DFMT_8_8         | (NFMT_USCALED << NFMT_SHIFT),
58581ad6265SDimitry Andric   DFMT_8_8         | (NFMT_SSCALED << NFMT_SHIFT),
58681ad6265SDimitry Andric   DFMT_8_8         | (NFMT_UINT    << NFMT_SHIFT),
58781ad6265SDimitry Andric   DFMT_8_8         | (NFMT_SINT    << NFMT_SHIFT),
58881ad6265SDimitry Andric 
58981ad6265SDimitry Andric   DFMT_32          | (NFMT_UINT    << NFMT_SHIFT),
59081ad6265SDimitry Andric   DFMT_32          | (NFMT_SINT    << NFMT_SHIFT),
59181ad6265SDimitry Andric   DFMT_32          | (NFMT_FLOAT   << NFMT_SHIFT),
59281ad6265SDimitry Andric 
59381ad6265SDimitry Andric   DFMT_16_16       | (NFMT_UNORM   << NFMT_SHIFT),
59481ad6265SDimitry Andric   DFMT_16_16       | (NFMT_SNORM   << NFMT_SHIFT),
59581ad6265SDimitry Andric   DFMT_16_16       | (NFMT_USCALED << NFMT_SHIFT),
59681ad6265SDimitry Andric   DFMT_16_16       | (NFMT_SSCALED << NFMT_SHIFT),
59781ad6265SDimitry Andric   DFMT_16_16       | (NFMT_UINT    << NFMT_SHIFT),
59881ad6265SDimitry Andric   DFMT_16_16       | (NFMT_SINT    << NFMT_SHIFT),
59981ad6265SDimitry Andric   DFMT_16_16       | (NFMT_FLOAT   << NFMT_SHIFT),
60081ad6265SDimitry Andric 
60181ad6265SDimitry Andric   DFMT_10_11_11    | (NFMT_FLOAT   << NFMT_SHIFT),
60281ad6265SDimitry Andric 
60381ad6265SDimitry Andric   DFMT_11_11_10    | (NFMT_FLOAT   << NFMT_SHIFT),
60481ad6265SDimitry Andric 
60581ad6265SDimitry Andric   DFMT_10_10_10_2  | (NFMT_UNORM   << NFMT_SHIFT),
60681ad6265SDimitry Andric   DFMT_10_10_10_2  | (NFMT_SNORM   << NFMT_SHIFT),
60781ad6265SDimitry Andric   DFMT_10_10_10_2  | (NFMT_UINT    << NFMT_SHIFT),
60881ad6265SDimitry Andric   DFMT_10_10_10_2  | (NFMT_SINT    << NFMT_SHIFT),
60981ad6265SDimitry Andric 
61081ad6265SDimitry Andric   DFMT_2_10_10_10  | (NFMT_UNORM   << NFMT_SHIFT),
61181ad6265SDimitry Andric   DFMT_2_10_10_10  | (NFMT_SNORM   << NFMT_SHIFT),
61281ad6265SDimitry Andric   DFMT_2_10_10_10  | (NFMT_USCALED << NFMT_SHIFT),
61381ad6265SDimitry Andric   DFMT_2_10_10_10  | (NFMT_SSCALED << NFMT_SHIFT),
61481ad6265SDimitry Andric   DFMT_2_10_10_10  | (NFMT_UINT    << NFMT_SHIFT),
61581ad6265SDimitry Andric   DFMT_2_10_10_10  | (NFMT_SINT    << NFMT_SHIFT),
61681ad6265SDimitry Andric 
61781ad6265SDimitry Andric   DFMT_8_8_8_8     | (NFMT_UNORM   << NFMT_SHIFT),
61881ad6265SDimitry Andric   DFMT_8_8_8_8     | (NFMT_SNORM   << NFMT_SHIFT),
61981ad6265SDimitry Andric   DFMT_8_8_8_8     | (NFMT_USCALED << NFMT_SHIFT),
62081ad6265SDimitry Andric   DFMT_8_8_8_8     | (NFMT_SSCALED << NFMT_SHIFT),
62181ad6265SDimitry Andric   DFMT_8_8_8_8     | (NFMT_UINT    << NFMT_SHIFT),
62281ad6265SDimitry Andric   DFMT_8_8_8_8     | (NFMT_SINT    << NFMT_SHIFT),
62381ad6265SDimitry Andric 
62481ad6265SDimitry Andric   DFMT_32_32       | (NFMT_UINT    << NFMT_SHIFT),
62581ad6265SDimitry Andric   DFMT_32_32       | (NFMT_SINT    << NFMT_SHIFT),
62681ad6265SDimitry Andric   DFMT_32_32       | (NFMT_FLOAT   << NFMT_SHIFT),
62781ad6265SDimitry Andric 
62881ad6265SDimitry Andric   DFMT_16_16_16_16 | (NFMT_UNORM   << NFMT_SHIFT),
62981ad6265SDimitry Andric   DFMT_16_16_16_16 | (NFMT_SNORM   << NFMT_SHIFT),
63081ad6265SDimitry Andric   DFMT_16_16_16_16 | (NFMT_USCALED << NFMT_SHIFT),
63181ad6265SDimitry Andric   DFMT_16_16_16_16 | (NFMT_SSCALED << NFMT_SHIFT),
63281ad6265SDimitry Andric   DFMT_16_16_16_16 | (NFMT_UINT    << NFMT_SHIFT),
63381ad6265SDimitry Andric   DFMT_16_16_16_16 | (NFMT_SINT    << NFMT_SHIFT),
63481ad6265SDimitry Andric   DFMT_16_16_16_16 | (NFMT_FLOAT   << NFMT_SHIFT),
63581ad6265SDimitry Andric 
63681ad6265SDimitry Andric   DFMT_32_32_32    | (NFMT_UINT    << NFMT_SHIFT),
63781ad6265SDimitry Andric   DFMT_32_32_32    | (NFMT_SINT    << NFMT_SHIFT),
63881ad6265SDimitry Andric   DFMT_32_32_32    | (NFMT_FLOAT   << NFMT_SHIFT),
63981ad6265SDimitry Andric   DFMT_32_32_32_32 | (NFMT_UINT    << NFMT_SHIFT),
64081ad6265SDimitry Andric   DFMT_32_32_32_32 | (NFMT_SINT    << NFMT_SHIFT),
64181ad6265SDimitry Andric   DFMT_32_32_32_32 | (NFMT_FLOAT   << NFMT_SHIFT)
64281ad6265SDimitry Andric };
64381ad6265SDimitry Andric 
644e8d8bef9SDimitry Andric } // namespace MTBUFFormat
645e8d8bef9SDimitry Andric 
6460b57cec5SDimitry Andric namespace Swizzle {
6470b57cec5SDimitry Andric 
6480b57cec5SDimitry Andric // This must be in sync with llvm::AMDGPU::Swizzle::Id enum members, see SIDefines.h.
6490b57cec5SDimitry Andric const char* const IdSymbolic[] = {
6500b57cec5SDimitry Andric   "QUAD_PERM",
6510b57cec5SDimitry Andric   "BITMASK_PERM",
6520b57cec5SDimitry Andric   "SWAP",
6530b57cec5SDimitry Andric   "REVERSE",
6540b57cec5SDimitry Andric   "BROADCAST",
6550b57cec5SDimitry Andric };
6560b57cec5SDimitry Andric 
6570b57cec5SDimitry Andric } // namespace Swizzle
6580b57cec5SDimitry Andric 
6590b57cec5SDimitry Andric namespace VGPRIndexMode {
6600b57cec5SDimitry Andric 
6610b57cec5SDimitry Andric // This must be in sync with llvm::AMDGPU::VGPRIndexMode::Id enum members, see SIDefines.h.
6620b57cec5SDimitry Andric const char* const IdSymbolic[] = {
6630b57cec5SDimitry Andric   "SRC0",
6640b57cec5SDimitry Andric   "SRC1",
6650b57cec5SDimitry Andric   "SRC2",
6660b57cec5SDimitry Andric   "DST",
6670b57cec5SDimitry Andric };
6680b57cec5SDimitry Andric 
6690b57cec5SDimitry Andric } // namespace VGPRIndexMode
6700b57cec5SDimitry Andric 
671*0fca6ea1SDimitry Andric namespace UCVersion {
672*0fca6ea1SDimitry Andric 
673*0fca6ea1SDimitry Andric ArrayRef<GFXVersion> getGFXVersions() {
674*0fca6ea1SDimitry Andric   // GFX6, GFX8 and GFX9 don't support s_version and there are no
675*0fca6ea1SDimitry Andric   // UC_VERSION_GFX* codes for them.
676*0fca6ea1SDimitry Andric   static const GFXVersion Versions[] = {{"UC_VERSION_GFX7", 0},
677*0fca6ea1SDimitry Andric                                         {"UC_VERSION_GFX10", 4},
678*0fca6ea1SDimitry Andric                                         {"UC_VERSION_GFX11", 6},
679*0fca6ea1SDimitry Andric                                         {"UC_VERSION_GFX12", 9}};
680*0fca6ea1SDimitry Andric 
681*0fca6ea1SDimitry Andric   return Versions;
682*0fca6ea1SDimitry Andric }
683*0fca6ea1SDimitry Andric 
684*0fca6ea1SDimitry Andric } // namespace UCVersion
685*0fca6ea1SDimitry Andric 
686*0fca6ea1SDimitry Andric } // namespace llvm::AMDGPU
687