690 lines · cpp
1//===-- AMDGPUAsmUtils.cpp - AsmParser/InstPrinter common -----------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8#include "AMDGPUAsmUtils.h"9#include "AMDGPUBaseInfo.h"10#include "SIDefines.h"11 12namespace llvm::AMDGPU {13 14//===----------------------------------------------------------------------===//15// Custom Operands.16//17// A table of custom operands must be ordered by Encoding in ascending order18// to enable binary search lookup. Within entries that share the same encoding,19// "primary" operand names should be listed first followed by aliases if any.20//21//===----------------------------------------------------------------------===//22 23/// Map from the encoding of a sendmsg/hwreg asm operand to it's name.24template <size_t N>25static StringRef getNameFromOperandTable(const CustomOperand (&Table)[N],26 unsigned Encoding,27 const MCSubtargetInfo &STI) {28 // Find the first entry with the target encoding29 auto First =30 std::lower_bound(Table, Table + N, Encoding,31 [](const CustomOperand &Entry, unsigned TargetEncoding) {32 return Entry.Encoding < TargetEncoding;33 });34 35 // Search through entries with the same encoding to find the first valid one36 for (auto It = First; It != Table + N && It->Encoding == Encoding; ++It) {37 if (It->Encoding == Encoding && (!It->Cond || It->Cond(STI)))38 return It->Name;39 }40 41 return "";42}43 44/// Map from a symbolic name for a sendmsg/hwreg asm operand to it's encoding.45template <size_t N>46static int64_t getEncodingFromOperandTable(const CustomOperand (&Table)[N],47 StringRef Name,48 const MCSubtargetInfo &STI) {49 int64_t InvalidEncoding = OPR_ID_UNKNOWN;50 for (const CustomOperand &Entry : Table) {51 if (Entry.Name != Name)52 continue;53 54 if (!Entry.Cond || Entry.Cond(STI))55 return Entry.Encoding;56 57 InvalidEncoding = OPR_ID_UNSUPPORTED;58 }59 60 return InvalidEncoding;61}62 63namespace DepCtr {64 65// NOLINTBEGIN66const CustomOperandVal DepCtrInfo[] = {67 // Name max dflt offset width constraint68 {{"depctr_hold_cnt"}, 1, 1, 7, 1, isGFX10_BEncoding},69 {{"depctr_sa_sdst"}, 1, 1, 0, 1},70 {{"depctr_va_vdst"}, 15, 15, 12, 4},71 {{"depctr_va_sdst"}, 7, 7, 9, 3},72 {{"depctr_va_ssrc"}, 1, 1, 8, 1},73 {{"depctr_va_vcc"}, 1, 1, 1, 1},74 {{"depctr_vm_vsrc"}, 7, 7, 2, 3},75};76// NOLINTEND77 78const int DEP_CTR_SIZE =79 static_cast<int>(sizeof(DepCtrInfo) / sizeof(CustomOperandVal));80 81} // namespace DepCtr82 83namespace SendMsg {84 85// Disable lint checking here since it makes these tables unreadable.86// NOLINTBEGIN87// clang-format off88 89static constexpr CustomOperand MsgOperands[] = {90 {{"MSG_INTERRUPT"}, ID_INTERRUPT},91 {{"MSG_GS"}, ID_GS_PreGFX11, isNotGFX11Plus},92 {{"MSG_HS_TESSFACTOR"}, ID_HS_TESSFACTOR_GFX11Plus, isGFX11Plus},93 {{"MSG_GS_DONE"}, ID_GS_DONE_PreGFX11, isNotGFX11Plus},94 {{"MSG_DEALLOC_VGPRS"}, ID_DEALLOC_VGPRS_GFX11Plus, isGFX11Plus},95 {{"MSG_SAVEWAVE"}, ID_SAVEWAVE, isGFX8_GFX9_GFX10},96 {{"MSG_STALL_WAVE_GEN"}, ID_STALL_WAVE_GEN, isGFX9_GFX10_GFX11},97 {{"MSG_HALT_WAVES"}, ID_HALT_WAVES, isGFX9_GFX10_GFX11},98 {{"MSG_ORDERED_PS_DONE"}, ID_ORDERED_PS_DONE, isGFX9_GFX10},99 {{"MSG_EARLY_PRIM_DEALLOC"}, ID_EARLY_PRIM_DEALLOC, isGFX9_GFX10},100 {{"MSG_GS_ALLOC_REQ"}, ID_GS_ALLOC_REQ, isGFX9Plus},101 {{"MSG_GET_DOORBELL"}, ID_GET_DOORBELL, isGFX9_GFX10},102 {{"MSG_SAVEWAVE_HAS_TDM"}, ID_SAVEWAVE_HAS_TDM, isGFX1250},103 {{"MSG_GET_DDID"}, ID_GET_DDID, isGFX10},104 {{"MSG_SYSMSG"}, ID_SYSMSG},105 {{"MSG_RTN_GET_DOORBELL"}, ID_RTN_GET_DOORBELL, isGFX11Plus},106 {{"MSG_RTN_GET_DDID"}, ID_RTN_GET_DDID, isGFX11Plus},107 {{"MSG_RTN_GET_TMA"}, ID_RTN_GET_TMA, isGFX11Plus},108 {{"MSG_RTN_GET_REALTIME"}, ID_RTN_GET_REALTIME, isGFX11Plus},109 {{"MSG_RTN_SAVE_WAVE"}, ID_RTN_SAVE_WAVE, isGFX11Plus},110 {{"MSG_RTN_GET_TBA"}, ID_RTN_GET_TBA, isGFX11Plus},111 {{"MSG_RTN_GET_TBA_TO_PC"}, ID_RTN_GET_TBA_TO_PC, isGFX11Plus},112 {{"MSG_RTN_GET_SE_AID_ID"}, ID_RTN_GET_SE_AID_ID, isGFX12Plus},113 {{"MSG_RTN_GET_CLUSTER_BARRIER_STATE"}, ID_RTN_GET_CLUSTER_BARRIER_STATE,114 isGFX1250},115};116 117static constexpr CustomOperand SysMsgOperands[] = {118 {{"SYSMSG_OP_ECC_ERR_INTERRUPT"}, OP_SYS_ECC_ERR_INTERRUPT},119 {{"SYSMSG_OP_REG_RD"}, OP_SYS_REG_RD},120 {{"SYSMSG_OP_HOST_TRAP_ACK"}, OP_SYS_HOST_TRAP_ACK, isNotGFX9Plus},121 {{"SYSMSG_OP_TTRACE_PC"}, OP_SYS_TTRACE_PC},122};123 124static constexpr CustomOperand StreamMsgOperands[] = {125 {{"GS_OP_NOP"}, OP_GS_NOP},126 {{"GS_OP_CUT"}, OP_GS_CUT},127 {{"GS_OP_EMIT"}, OP_GS_EMIT},128 {{"GS_OP_EMIT_CUT"}, OP_GS_EMIT_CUT},129};130 131// clang-format on132// NOLINTEND133 134int64_t getMsgId(StringRef Name, const MCSubtargetInfo &STI) {135 return getEncodingFromOperandTable(MsgOperands, Name, STI);136}137 138StringRef getMsgName(uint64_t Encoding, const MCSubtargetInfo &STI) {139 return getNameFromOperandTable(MsgOperands, Encoding, STI);140}141 142int64_t getMsgOpId(int64_t MsgId, StringRef Name, const MCSubtargetInfo &STI) {143 if (MsgId == ID_SYSMSG)144 return getEncodingFromOperandTable(SysMsgOperands, Name, STI);145 return getEncodingFromOperandTable(StreamMsgOperands, Name, STI);146}147 148StringRef getMsgOpName(int64_t MsgId, uint64_t Encoding,149 const MCSubtargetInfo &STI) {150 assert(msgRequiresOp(MsgId, STI) && "must have an operand");151 152 if (MsgId == ID_SYSMSG)153 return getNameFromOperandTable(SysMsgOperands, Encoding, STI);154 return getNameFromOperandTable(StreamMsgOperands, Encoding, STI);155}156 157} // namespace SendMsg158 159namespace Hwreg {160 161// Disable lint checking for this block since it makes the table unreadable.162// NOLINTBEGIN163// clang-format off164static constexpr CustomOperand Operands[] = {165 {{"HW_REG_WAVE_MODE"}, ID_MODE, isGFX12Plus},166 {{"HW_REG_MODE"}, ID_MODE},167 {{"HW_REG_WAVE_STATUS"}, ID_STATUS, isGFX12Plus},168 {{"HW_REG_STATUS"}, ID_STATUS},169 {{"HW_REG_TRAPSTS"}, ID_TRAPSTS, isNotGFX12Plus},170 {{"HW_REG_HW_ID"}, ID_HW_ID, isNotGFX10Plus},171 {{"HW_REG_WAVE_STATE_PRIV"}, ID_STATE_PRIV, isGFX12Plus},172 {{"HW_REG_STATE_PRIV"}, ID_STATE_PRIV, isGFX12Plus},173 {{"HW_REG_WAVE_GPR_ALLOC"}, ID_GPR_ALLOC, isGFX12Plus},174 {{"HW_REG_GPR_ALLOC"}, ID_GPR_ALLOC},175 {{"HW_REG_WAVE_LDS_ALLOC"}, ID_LDS_ALLOC, isGFX12Plus},176 {{"HW_REG_LDS_ALLOC"}, ID_LDS_ALLOC},177 {{"HW_REG_IB_STS"}, ID_IB_STS},178 {{"HW_REG_PERF_SNAPSHOT_DATA"}, ID_PERF_SNAPSHOT_DATA_gfx12, isGFX12Plus},179 {{"HW_REG_PERF_SNAPSHOT_PC_LO"}, ID_PERF_SNAPSHOT_PC_LO_gfx12, isGFX12Plus},180 {{"HW_REG_PERF_SNAPSHOT_PC_HI"}, ID_PERF_SNAPSHOT_PC_HI_gfx12, isGFX12Plus},181 {{"HW_REG_SH_MEM_BASES"}, ID_MEM_BASES, isGFX9_GFX10_GFX11},182 {{"HW_REG_PERF_SNAPSHOT_DATA1"}, ID_PERF_SNAPSHOT_DATA1, isGFX12Plus},183 {{"HW_REG_TBA_LO"}, ID_TBA_LO, isGFX9_GFX10},184 {{"HW_REG_PERF_SNAPSHOT_DATA2"}, ID_PERF_SNAPSHOT_DATA2, isGFX12Plus},185 {{"HW_REG_TBA_HI"}, ID_TBA_HI, isGFX9_GFX10},186 {{"HW_REG_WAVE_EXCP_FLAG_PRIV"}, ID_EXCP_FLAG_PRIV, isGFX12Plus},187 {{"HW_REG_EXCP_FLAG_PRIV"}, ID_EXCP_FLAG_PRIV, isGFX12Plus},188 {{"HW_REG_TMA_LO"}, ID_TMA_LO, isGFX9_GFX10},189 {{"HW_REG_PERF_SNAPSHOT_PC_LO"}, ID_PERF_SNAPSHOT_PC_LO_gfx11, isGFX11},190 {{"HW_REG_WAVE_EXCP_FLAG_USER"}, ID_EXCP_FLAG_USER, isGFX12Plus},191 {{"HW_REG_EXCP_FLAG_USER"}, ID_EXCP_FLAG_USER, isGFX12Plus},192 {{"HW_REG_TMA_HI"}, ID_TMA_HI, isGFX9_GFX10},193 {{"HW_REG_PERF_SNAPSHOT_PC_HI"}, ID_PERF_SNAPSHOT_PC_HI_gfx11, isGFX11},194 {{"HW_REG_WAVE_TRAP_CTRL"}, ID_TRAP_CTRL, isGFX12Plus},195 {{"HW_REG_TRAP_CTRL"}, ID_TRAP_CTRL, isGFX12Plus},196 {{"HW_REG_FLAT_SCR_LO"}, ID_FLAT_SCR_LO, isGFX10_GFX11},197 {{"HW_REG_WAVE_SCRATCH_BASE_LO"}, ID_FLAT_SCR_LO, isGFX12Plus},198 {{"HW_REG_SCRATCH_BASE_LO"}, ID_FLAT_SCR_LO, isGFX12Plus},199 {{"HW_REG_XCC_ID"}, ID_XCC_ID, isGFX940},200 {{"HW_REG_FLAT_SCR_HI"}, ID_FLAT_SCR_HI, isGFX10_GFX11},201 {{"HW_REG_WAVE_SCRATCH_BASE_HI"}, ID_FLAT_SCR_HI, isGFX12Plus},202 {{"HW_REG_SCRATCH_BASE_HI"}, ID_FLAT_SCR_HI, isGFX12Plus},203 {{"HW_REG_SQ_PERF_SNAPSHOT_DATA"}, ID_SQ_PERF_SNAPSHOT_DATA, isGFX940},204 {{"HW_REG_XNACK_MASK"}, ID_XNACK_MASK, isGFX10Before1030},205 {{"HW_REG_SQ_PERF_SNAPSHOT_DATA1"}, ID_SQ_PERF_SNAPSHOT_DATA1, isGFX940},206 {{"HW_REG_WAVE_HW_ID1"}, ID_HW_ID1, isGFX12Plus},207 {{"HW_REG_HW_ID1"}, ID_HW_ID1, isGFX10Plus},208 {{"HW_REG_HW_ID"}, ID_HW_ID1, isGFX10},209 {{"HW_REG_SQ_PERF_SNAPSHOT_PC_LO"}, ID_SQ_PERF_SNAPSHOT_PC_LO, isGFX940},210 {{"HW_REG_WAVE_HW_ID2"}, ID_HW_ID2, isGFX12Plus},211 {{"HW_REG_HW_ID2"}, ID_HW_ID2, isGFX10Plus},212 {{"HW_REG_SQ_PERF_SNAPSHOT_PC_HI"}, ID_SQ_PERF_SNAPSHOT_PC_HI, isGFX940},213 {{"HW_REG_POPS_PACKER"}, ID_POPS_PACKER, isGFX10},214 {{"HW_REG_WAVE_SCHED_MODE"}, ID_SCHED_MODE, isGFX12Plus},215 {{"HW_REG_PERF_SNAPSHOT_DATA"}, ID_PERF_SNAPSHOT_DATA_gfx11, isGFX11},216 {{"HW_REG_IB_STS2"}, ID_IB_STS2, isGFX1250},217 {{"HW_REG_SHADER_CYCLES"}, ID_SHADER_CYCLES, isGFX10_3_GFX11},218 {{"HW_REG_SHADER_CYCLES_LO"}, ID_SHADER_CYCLES, isGFX12Plus},219 {{"HW_REG_SHADER_CYCLES_HI"}, ID_SHADER_CYCLES_HI, isGFX12Plus},220 {{"HW_REG_WAVE_DVGPR_ALLOC_LO"}, ID_DVGPR_ALLOC_LO, isGFX12Plus},221 {{"HW_REG_DVGPR_ALLOC_LO"}, ID_DVGPR_ALLOC_LO, isGFX12Plus},222 {{"HW_REG_WAVE_DVGPR_ALLOC_HI"}, ID_DVGPR_ALLOC_HI, isGFX12Plus},223 {{"HW_REG_DVGPR_ALLOC_HI"}, ID_DVGPR_ALLOC_HI, isGFX12Plus},224 {{"HW_REG_XNACK_STATE_PRIV"}, ID_XNACK_STATE_PRIV, isGFX1250},225 {{"HW_REG_XNACK_MASK"}, ID_XNACK_MASK_gfx1250, isGFX1250},226 227};228// clang-format on229// NOLINTEND230 231int64_t getHwregId(StringRef Name, const MCSubtargetInfo &STI) {232 return getEncodingFromOperandTable(Operands, Name, STI);233}234 235StringRef getHwreg(uint64_t Encoding, const MCSubtargetInfo &STI) {236 return getNameFromOperandTable(Operands, Encoding, STI);237}238 239} // namespace Hwreg240 241namespace MTBUFFormat {242 243StringLiteral const DfmtSymbolic[] = {244 "BUF_DATA_FORMAT_INVALID",245 "BUF_DATA_FORMAT_8",246 "BUF_DATA_FORMAT_16",247 "BUF_DATA_FORMAT_8_8",248 "BUF_DATA_FORMAT_32",249 "BUF_DATA_FORMAT_16_16",250 "BUF_DATA_FORMAT_10_11_11",251 "BUF_DATA_FORMAT_11_11_10",252 "BUF_DATA_FORMAT_10_10_10_2",253 "BUF_DATA_FORMAT_2_10_10_10",254 "BUF_DATA_FORMAT_8_8_8_8",255 "BUF_DATA_FORMAT_32_32",256 "BUF_DATA_FORMAT_16_16_16_16",257 "BUF_DATA_FORMAT_32_32_32",258 "BUF_DATA_FORMAT_32_32_32_32",259 "BUF_DATA_FORMAT_RESERVED_15"260};261 262StringLiteral const NfmtSymbolicGFX10[] = {263 "BUF_NUM_FORMAT_UNORM",264 "BUF_NUM_FORMAT_SNORM",265 "BUF_NUM_FORMAT_USCALED",266 "BUF_NUM_FORMAT_SSCALED",267 "BUF_NUM_FORMAT_UINT",268 "BUF_NUM_FORMAT_SINT",269 "",270 "BUF_NUM_FORMAT_FLOAT"271};272 273StringLiteral const NfmtSymbolicSICI[] = {274 "BUF_NUM_FORMAT_UNORM",275 "BUF_NUM_FORMAT_SNORM",276 "BUF_NUM_FORMAT_USCALED",277 "BUF_NUM_FORMAT_SSCALED",278 "BUF_NUM_FORMAT_UINT",279 "BUF_NUM_FORMAT_SINT",280 "BUF_NUM_FORMAT_SNORM_OGL",281 "BUF_NUM_FORMAT_FLOAT"282};283 284StringLiteral const NfmtSymbolicVI[] = { // VI and GFX9285 "BUF_NUM_FORMAT_UNORM",286 "BUF_NUM_FORMAT_SNORM",287 "BUF_NUM_FORMAT_USCALED",288 "BUF_NUM_FORMAT_SSCALED",289 "BUF_NUM_FORMAT_UINT",290 "BUF_NUM_FORMAT_SINT",291 "BUF_NUM_FORMAT_RESERVED_6",292 "BUF_NUM_FORMAT_FLOAT"293};294 295StringLiteral const UfmtSymbolicGFX10[] = {296 "BUF_FMT_INVALID",297 298 "BUF_FMT_8_UNORM",299 "BUF_FMT_8_SNORM",300 "BUF_FMT_8_USCALED",301 "BUF_FMT_8_SSCALED",302 "BUF_FMT_8_UINT",303 "BUF_FMT_8_SINT",304 305 "BUF_FMT_16_UNORM",306 "BUF_FMT_16_SNORM",307 "BUF_FMT_16_USCALED",308 "BUF_FMT_16_SSCALED",309 "BUF_FMT_16_UINT",310 "BUF_FMT_16_SINT",311 "BUF_FMT_16_FLOAT",312 313 "BUF_FMT_8_8_UNORM",314 "BUF_FMT_8_8_SNORM",315 "BUF_FMT_8_8_USCALED",316 "BUF_FMT_8_8_SSCALED",317 "BUF_FMT_8_8_UINT",318 "BUF_FMT_8_8_SINT",319 320 "BUF_FMT_32_UINT",321 "BUF_FMT_32_SINT",322 "BUF_FMT_32_FLOAT",323 324 "BUF_FMT_16_16_UNORM",325 "BUF_FMT_16_16_SNORM",326 "BUF_FMT_16_16_USCALED",327 "BUF_FMT_16_16_SSCALED",328 "BUF_FMT_16_16_UINT",329 "BUF_FMT_16_16_SINT",330 "BUF_FMT_16_16_FLOAT",331 332 "BUF_FMT_10_11_11_UNORM",333 "BUF_FMT_10_11_11_SNORM",334 "BUF_FMT_10_11_11_USCALED",335 "BUF_FMT_10_11_11_SSCALED",336 "BUF_FMT_10_11_11_UINT",337 "BUF_FMT_10_11_11_SINT",338 "BUF_FMT_10_11_11_FLOAT",339 340 "BUF_FMT_11_11_10_UNORM",341 "BUF_FMT_11_11_10_SNORM",342 "BUF_FMT_11_11_10_USCALED",343 "BUF_FMT_11_11_10_SSCALED",344 "BUF_FMT_11_11_10_UINT",345 "BUF_FMT_11_11_10_SINT",346 "BUF_FMT_11_11_10_FLOAT",347 348 "BUF_FMT_10_10_10_2_UNORM",349 "BUF_FMT_10_10_10_2_SNORM",350 "BUF_FMT_10_10_10_2_USCALED",351 "BUF_FMT_10_10_10_2_SSCALED",352 "BUF_FMT_10_10_10_2_UINT",353 "BUF_FMT_10_10_10_2_SINT",354 355 "BUF_FMT_2_10_10_10_UNORM",356 "BUF_FMT_2_10_10_10_SNORM",357 "BUF_FMT_2_10_10_10_USCALED",358 "BUF_FMT_2_10_10_10_SSCALED",359 "BUF_FMT_2_10_10_10_UINT",360 "BUF_FMT_2_10_10_10_SINT",361 362 "BUF_FMT_8_8_8_8_UNORM",363 "BUF_FMT_8_8_8_8_SNORM",364 "BUF_FMT_8_8_8_8_USCALED",365 "BUF_FMT_8_8_8_8_SSCALED",366 "BUF_FMT_8_8_8_8_UINT",367 "BUF_FMT_8_8_8_8_SINT",368 369 "BUF_FMT_32_32_UINT",370 "BUF_FMT_32_32_SINT",371 "BUF_FMT_32_32_FLOAT",372 373 "BUF_FMT_16_16_16_16_UNORM",374 "BUF_FMT_16_16_16_16_SNORM",375 "BUF_FMT_16_16_16_16_USCALED",376 "BUF_FMT_16_16_16_16_SSCALED",377 "BUF_FMT_16_16_16_16_UINT",378 "BUF_FMT_16_16_16_16_SINT",379 "BUF_FMT_16_16_16_16_FLOAT",380 381 "BUF_FMT_32_32_32_UINT",382 "BUF_FMT_32_32_32_SINT",383 "BUF_FMT_32_32_32_FLOAT",384 "BUF_FMT_32_32_32_32_UINT",385 "BUF_FMT_32_32_32_32_SINT",386 "BUF_FMT_32_32_32_32_FLOAT"387};388 389unsigned const DfmtNfmt2UFmtGFX10[] = {390 DFMT_INVALID | (NFMT_UNORM << NFMT_SHIFT),391 392 DFMT_8 | (NFMT_UNORM << NFMT_SHIFT),393 DFMT_8 | (NFMT_SNORM << NFMT_SHIFT),394 DFMT_8 | (NFMT_USCALED << NFMT_SHIFT),395 DFMT_8 | (NFMT_SSCALED << NFMT_SHIFT),396 DFMT_8 | (NFMT_UINT << NFMT_SHIFT),397 DFMT_8 | (NFMT_SINT << NFMT_SHIFT),398 399 DFMT_16 | (NFMT_UNORM << NFMT_SHIFT),400 DFMT_16 | (NFMT_SNORM << NFMT_SHIFT),401 DFMT_16 | (NFMT_USCALED << NFMT_SHIFT),402 DFMT_16 | (NFMT_SSCALED << NFMT_SHIFT),403 DFMT_16 | (NFMT_UINT << NFMT_SHIFT),404 DFMT_16 | (NFMT_SINT << NFMT_SHIFT),405 DFMT_16 | (NFMT_FLOAT << NFMT_SHIFT),406 407 DFMT_8_8 | (NFMT_UNORM << NFMT_SHIFT),408 DFMT_8_8 | (NFMT_SNORM << NFMT_SHIFT),409 DFMT_8_8 | (NFMT_USCALED << NFMT_SHIFT),410 DFMT_8_8 | (NFMT_SSCALED << NFMT_SHIFT),411 DFMT_8_8 | (NFMT_UINT << NFMT_SHIFT),412 DFMT_8_8 | (NFMT_SINT << NFMT_SHIFT),413 414 DFMT_32 | (NFMT_UINT << NFMT_SHIFT),415 DFMT_32 | (NFMT_SINT << NFMT_SHIFT),416 DFMT_32 | (NFMT_FLOAT << NFMT_SHIFT),417 418 DFMT_16_16 | (NFMT_UNORM << NFMT_SHIFT),419 DFMT_16_16 | (NFMT_SNORM << NFMT_SHIFT),420 DFMT_16_16 | (NFMT_USCALED << NFMT_SHIFT),421 DFMT_16_16 | (NFMT_SSCALED << NFMT_SHIFT),422 DFMT_16_16 | (NFMT_UINT << NFMT_SHIFT),423 DFMT_16_16 | (NFMT_SINT << NFMT_SHIFT),424 DFMT_16_16 | (NFMT_FLOAT << NFMT_SHIFT),425 426 DFMT_10_11_11 | (NFMT_UNORM << NFMT_SHIFT),427 DFMT_10_11_11 | (NFMT_SNORM << NFMT_SHIFT),428 DFMT_10_11_11 | (NFMT_USCALED << NFMT_SHIFT),429 DFMT_10_11_11 | (NFMT_SSCALED << NFMT_SHIFT),430 DFMT_10_11_11 | (NFMT_UINT << NFMT_SHIFT),431 DFMT_10_11_11 | (NFMT_SINT << NFMT_SHIFT),432 DFMT_10_11_11 | (NFMT_FLOAT << NFMT_SHIFT),433 434 DFMT_11_11_10 | (NFMT_UNORM << NFMT_SHIFT),435 DFMT_11_11_10 | (NFMT_SNORM << NFMT_SHIFT),436 DFMT_11_11_10 | (NFMT_USCALED << NFMT_SHIFT),437 DFMT_11_11_10 | (NFMT_SSCALED << NFMT_SHIFT),438 DFMT_11_11_10 | (NFMT_UINT << NFMT_SHIFT),439 DFMT_11_11_10 | (NFMT_SINT << NFMT_SHIFT),440 DFMT_11_11_10 | (NFMT_FLOAT << NFMT_SHIFT),441 442 DFMT_10_10_10_2 | (NFMT_UNORM << NFMT_SHIFT),443 DFMT_10_10_10_2 | (NFMT_SNORM << NFMT_SHIFT),444 DFMT_10_10_10_2 | (NFMT_USCALED << NFMT_SHIFT),445 DFMT_10_10_10_2 | (NFMT_SSCALED << NFMT_SHIFT),446 DFMT_10_10_10_2 | (NFMT_UINT << NFMT_SHIFT),447 DFMT_10_10_10_2 | (NFMT_SINT << NFMT_SHIFT),448 449 DFMT_2_10_10_10 | (NFMT_UNORM << NFMT_SHIFT),450 DFMT_2_10_10_10 | (NFMT_SNORM << NFMT_SHIFT),451 DFMT_2_10_10_10 | (NFMT_USCALED << NFMT_SHIFT),452 DFMT_2_10_10_10 | (NFMT_SSCALED << NFMT_SHIFT),453 DFMT_2_10_10_10 | (NFMT_UINT << NFMT_SHIFT),454 DFMT_2_10_10_10 | (NFMT_SINT << NFMT_SHIFT),455 456 DFMT_8_8_8_8 | (NFMT_UNORM << NFMT_SHIFT),457 DFMT_8_8_8_8 | (NFMT_SNORM << NFMT_SHIFT),458 DFMT_8_8_8_8 | (NFMT_USCALED << NFMT_SHIFT),459 DFMT_8_8_8_8 | (NFMT_SSCALED << NFMT_SHIFT),460 DFMT_8_8_8_8 | (NFMT_UINT << NFMT_SHIFT),461 DFMT_8_8_8_8 | (NFMT_SINT << NFMT_SHIFT),462 463 DFMT_32_32 | (NFMT_UINT << NFMT_SHIFT),464 DFMT_32_32 | (NFMT_SINT << NFMT_SHIFT),465 DFMT_32_32 | (NFMT_FLOAT << NFMT_SHIFT),466 467 DFMT_16_16_16_16 | (NFMT_UNORM << NFMT_SHIFT),468 DFMT_16_16_16_16 | (NFMT_SNORM << NFMT_SHIFT),469 DFMT_16_16_16_16 | (NFMT_USCALED << NFMT_SHIFT),470 DFMT_16_16_16_16 | (NFMT_SSCALED << NFMT_SHIFT),471 DFMT_16_16_16_16 | (NFMT_UINT << NFMT_SHIFT),472 DFMT_16_16_16_16 | (NFMT_SINT << NFMT_SHIFT),473 DFMT_16_16_16_16 | (NFMT_FLOAT << NFMT_SHIFT),474 475 DFMT_32_32_32 | (NFMT_UINT << NFMT_SHIFT),476 DFMT_32_32_32 | (NFMT_SINT << NFMT_SHIFT),477 DFMT_32_32_32 | (NFMT_FLOAT << NFMT_SHIFT),478 DFMT_32_32_32_32 | (NFMT_UINT << NFMT_SHIFT),479 DFMT_32_32_32_32 | (NFMT_SINT << NFMT_SHIFT),480 DFMT_32_32_32_32 | (NFMT_FLOAT << NFMT_SHIFT)481};482 483StringLiteral const UfmtSymbolicGFX11[] = {484 "BUF_FMT_INVALID",485 486 "BUF_FMT_8_UNORM",487 "BUF_FMT_8_SNORM",488 "BUF_FMT_8_USCALED",489 "BUF_FMT_8_SSCALED",490 "BUF_FMT_8_UINT",491 "BUF_FMT_8_SINT",492 493 "BUF_FMT_16_UNORM",494 "BUF_FMT_16_SNORM",495 "BUF_FMT_16_USCALED",496 "BUF_FMT_16_SSCALED",497 "BUF_FMT_16_UINT",498 "BUF_FMT_16_SINT",499 "BUF_FMT_16_FLOAT",500 501 "BUF_FMT_8_8_UNORM",502 "BUF_FMT_8_8_SNORM",503 "BUF_FMT_8_8_USCALED",504 "BUF_FMT_8_8_SSCALED",505 "BUF_FMT_8_8_UINT",506 "BUF_FMT_8_8_SINT",507 508 "BUF_FMT_32_UINT",509 "BUF_FMT_32_SINT",510 "BUF_FMT_32_FLOAT",511 512 "BUF_FMT_16_16_UNORM",513 "BUF_FMT_16_16_SNORM",514 "BUF_FMT_16_16_USCALED",515 "BUF_FMT_16_16_SSCALED",516 "BUF_FMT_16_16_UINT",517 "BUF_FMT_16_16_SINT",518 "BUF_FMT_16_16_FLOAT",519 520 "BUF_FMT_10_11_11_FLOAT",521 522 "BUF_FMT_11_11_10_FLOAT",523 524 "BUF_FMT_10_10_10_2_UNORM",525 "BUF_FMT_10_10_10_2_SNORM",526 "BUF_FMT_10_10_10_2_UINT",527 "BUF_FMT_10_10_10_2_SINT",528 529 "BUF_FMT_2_10_10_10_UNORM",530 "BUF_FMT_2_10_10_10_SNORM",531 "BUF_FMT_2_10_10_10_USCALED",532 "BUF_FMT_2_10_10_10_SSCALED",533 "BUF_FMT_2_10_10_10_UINT",534 "BUF_FMT_2_10_10_10_SINT",535 536 "BUF_FMT_8_8_8_8_UNORM",537 "BUF_FMT_8_8_8_8_SNORM",538 "BUF_FMT_8_8_8_8_USCALED",539 "BUF_FMT_8_8_8_8_SSCALED",540 "BUF_FMT_8_8_8_8_UINT",541 "BUF_FMT_8_8_8_8_SINT",542 543 "BUF_FMT_32_32_UINT",544 "BUF_FMT_32_32_SINT",545 "BUF_FMT_32_32_FLOAT",546 547 "BUF_FMT_16_16_16_16_UNORM",548 "BUF_FMT_16_16_16_16_SNORM",549 "BUF_FMT_16_16_16_16_USCALED",550 "BUF_FMT_16_16_16_16_SSCALED",551 "BUF_FMT_16_16_16_16_UINT",552 "BUF_FMT_16_16_16_16_SINT",553 "BUF_FMT_16_16_16_16_FLOAT",554 555 "BUF_FMT_32_32_32_UINT",556 "BUF_FMT_32_32_32_SINT",557 "BUF_FMT_32_32_32_FLOAT",558 "BUF_FMT_32_32_32_32_UINT",559 "BUF_FMT_32_32_32_32_SINT",560 "BUF_FMT_32_32_32_32_FLOAT"561};562 563unsigned const DfmtNfmt2UFmtGFX11[] = {564 DFMT_INVALID | (NFMT_UNORM << NFMT_SHIFT),565 566 DFMT_8 | (NFMT_UNORM << NFMT_SHIFT),567 DFMT_8 | (NFMT_SNORM << NFMT_SHIFT),568 DFMT_8 | (NFMT_USCALED << NFMT_SHIFT),569 DFMT_8 | (NFMT_SSCALED << NFMT_SHIFT),570 DFMT_8 | (NFMT_UINT << NFMT_SHIFT),571 DFMT_8 | (NFMT_SINT << NFMT_SHIFT),572 573 DFMT_16 | (NFMT_UNORM << NFMT_SHIFT),574 DFMT_16 | (NFMT_SNORM << NFMT_SHIFT),575 DFMT_16 | (NFMT_USCALED << NFMT_SHIFT),576 DFMT_16 | (NFMT_SSCALED << NFMT_SHIFT),577 DFMT_16 | (NFMT_UINT << NFMT_SHIFT),578 DFMT_16 | (NFMT_SINT << NFMT_SHIFT),579 DFMT_16 | (NFMT_FLOAT << NFMT_SHIFT),580 581 DFMT_8_8 | (NFMT_UNORM << NFMT_SHIFT),582 DFMT_8_8 | (NFMT_SNORM << NFMT_SHIFT),583 DFMT_8_8 | (NFMT_USCALED << NFMT_SHIFT),584 DFMT_8_8 | (NFMT_SSCALED << NFMT_SHIFT),585 DFMT_8_8 | (NFMT_UINT << NFMT_SHIFT),586 DFMT_8_8 | (NFMT_SINT << NFMT_SHIFT),587 588 DFMT_32 | (NFMT_UINT << NFMT_SHIFT),589 DFMT_32 | (NFMT_SINT << NFMT_SHIFT),590 DFMT_32 | (NFMT_FLOAT << NFMT_SHIFT),591 592 DFMT_16_16 | (NFMT_UNORM << NFMT_SHIFT),593 DFMT_16_16 | (NFMT_SNORM << NFMT_SHIFT),594 DFMT_16_16 | (NFMT_USCALED << NFMT_SHIFT),595 DFMT_16_16 | (NFMT_SSCALED << NFMT_SHIFT),596 DFMT_16_16 | (NFMT_UINT << NFMT_SHIFT),597 DFMT_16_16 | (NFMT_SINT << NFMT_SHIFT),598 DFMT_16_16 | (NFMT_FLOAT << NFMT_SHIFT),599 600 DFMT_10_11_11 | (NFMT_FLOAT << NFMT_SHIFT),601 602 DFMT_11_11_10 | (NFMT_FLOAT << NFMT_SHIFT),603 604 DFMT_10_10_10_2 | (NFMT_UNORM << NFMT_SHIFT),605 DFMT_10_10_10_2 | (NFMT_SNORM << NFMT_SHIFT),606 DFMT_10_10_10_2 | (NFMT_UINT << NFMT_SHIFT),607 DFMT_10_10_10_2 | (NFMT_SINT << NFMT_SHIFT),608 609 DFMT_2_10_10_10 | (NFMT_UNORM << NFMT_SHIFT),610 DFMT_2_10_10_10 | (NFMT_SNORM << NFMT_SHIFT),611 DFMT_2_10_10_10 | (NFMT_USCALED << NFMT_SHIFT),612 DFMT_2_10_10_10 | (NFMT_SSCALED << NFMT_SHIFT),613 DFMT_2_10_10_10 | (NFMT_UINT << NFMT_SHIFT),614 DFMT_2_10_10_10 | (NFMT_SINT << NFMT_SHIFT),615 616 DFMT_8_8_8_8 | (NFMT_UNORM << NFMT_SHIFT),617 DFMT_8_8_8_8 | (NFMT_SNORM << NFMT_SHIFT),618 DFMT_8_8_8_8 | (NFMT_USCALED << NFMT_SHIFT),619 DFMT_8_8_8_8 | (NFMT_SSCALED << NFMT_SHIFT),620 DFMT_8_8_8_8 | (NFMT_UINT << NFMT_SHIFT),621 DFMT_8_8_8_8 | (NFMT_SINT << NFMT_SHIFT),622 623 DFMT_32_32 | (NFMT_UINT << NFMT_SHIFT),624 DFMT_32_32 | (NFMT_SINT << NFMT_SHIFT),625 DFMT_32_32 | (NFMT_FLOAT << NFMT_SHIFT),626 627 DFMT_16_16_16_16 | (NFMT_UNORM << NFMT_SHIFT),628 DFMT_16_16_16_16 | (NFMT_SNORM << NFMT_SHIFT),629 DFMT_16_16_16_16 | (NFMT_USCALED << NFMT_SHIFT),630 DFMT_16_16_16_16 | (NFMT_SSCALED << NFMT_SHIFT),631 DFMT_16_16_16_16 | (NFMT_UINT << NFMT_SHIFT),632 DFMT_16_16_16_16 | (NFMT_SINT << NFMT_SHIFT),633 DFMT_16_16_16_16 | (NFMT_FLOAT << NFMT_SHIFT),634 635 DFMT_32_32_32 | (NFMT_UINT << NFMT_SHIFT),636 DFMT_32_32_32 | (NFMT_SINT << NFMT_SHIFT),637 DFMT_32_32_32 | (NFMT_FLOAT << NFMT_SHIFT),638 DFMT_32_32_32_32 | (NFMT_UINT << NFMT_SHIFT),639 DFMT_32_32_32_32 | (NFMT_SINT << NFMT_SHIFT),640 DFMT_32_32_32_32 | (NFMT_FLOAT << NFMT_SHIFT)641};642 643} // namespace MTBUFFormat644 645namespace Swizzle {646 647// clang-format off648// This must be in sync with llvm::AMDGPU::Swizzle::Id enum members, see SIDefines.h.649const char *const IdSymbolic[] = {650 "QUAD_PERM",651 "BITMASK_PERM",652 "SWAP",653 "REVERSE",654 "BROADCAST",655 "FFT",656 "ROTATE",657};658// clang-format on659 660} // namespace Swizzle661 662namespace VGPRIndexMode {663 664// This must be in sync with llvm::AMDGPU::VGPRIndexMode::Id enum members, see SIDefines.h.665const char* const IdSymbolic[] = {666 "SRC0",667 "SRC1",668 "SRC2",669 "DST",670};671 672} // namespace VGPRIndexMode673 674namespace UCVersion {675 676ArrayRef<GFXVersion> getGFXVersions() {677 // GFX6, GFX8 and GFX9 don't support s_version and there are no678 // UC_VERSION_GFX* codes for them.679 static const GFXVersion Versions[] = {{"UC_VERSION_GFX7", 0},680 {"UC_VERSION_GFX10", 4},681 {"UC_VERSION_GFX11", 6},682 {"UC_VERSION_GFX12", 9}};683 684 return Versions;685}686 687} // namespace UCVersion688 689} // namespace llvm::AMDGPU690