| //===-- AMDGPUAsmUtils.h - AsmParser/InstPrinter common ---------*- C++ -*-===// | |
| // | |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | |
| // See https://llvm.org/LICENSE.txt for license information. | |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | |
| // | |
| //===----------------------------------------------------------------------===// | |
| #ifndef LLVM_LIB_TARGET_AMDGPU_UTILS_AMDGPUASMUTILS_H | |
| #define LLVM_LIB_TARGET_AMDGPU_UTILS_AMDGPUASMUTILS_H | |
| #include "SIDefines.h" | |
| #include "llvm/ADT/StringRef.h" | |
| namespace llvm { | |
| class StringLiteral; | |
| class MCSubtargetInfo; | |
| namespace AMDGPU { | |
| const int OPR_ID_UNKNOWN = -1; | |
| const int OPR_ID_UNSUPPORTED = -2; | |
| const int OPR_ID_DUPLICATE = -3; | |
| const int OPR_VAL_INVALID = -4; | |
| struct CustomOperand { | |
| StringLiteral Name; | |
| unsigned Encoding = 0; | |
| bool (*Cond)(const MCSubtargetInfo &STI) = nullptr; | |
| }; | |
| struct CustomOperandVal { | |
| StringLiteral Name; | |
| unsigned Max; | |
| unsigned Default; | |
| unsigned Shift; | |
| unsigned Width; | |
| bool (*Cond)(const MCSubtargetInfo &STI) = nullptr; | |
| unsigned Mask = (1 << Width) - 1; | |
| unsigned decode(unsigned Code) const { return (Code >> Shift) & Mask; } | |
| unsigned encode(unsigned Val) const { return (Val & Mask) << Shift; } | |
| unsigned getMask() const { return Mask << Shift; } | |
| bool isValid(unsigned Val) const { return Val <= Max; } | |
| bool isSupported(const MCSubtargetInfo &STI) const { | |
| return !Cond || Cond(STI); | |
| } | |
| }; | |
| namespace DepCtr { | |
| extern const CustomOperandVal DepCtrInfo[]; | |
| extern const int DEP_CTR_SIZE; | |
| } // namespace DepCtr | |
| // Symbolic names for the sendmsg(msg_id, operation, stream) syntax. | |
| namespace SendMsg { | |
| /// Map from a symbolic name for a msg_id to the message portion of the | |
| /// immediate encoding. A negative return value indicates that the Name was | |
| /// unknown or unsupported on this target. | |
| int64_t getMsgId(StringRef Name, const MCSubtargetInfo &STI); | |
| /// Map from an encoding to the symbolic name for a msg_id immediate. This is | |
| /// doing opposite of getMsgId(). | |
| StringRef getMsgName(uint64_t Encoding, const MCSubtargetInfo &STI); | |
| /// Map from a symbolic name for a sendmsg operation to the operation portion of | |
| /// the immediate encoding. A negative return value indicates that the Name was | |
| /// unknown or unsupported on this target. | |
| int64_t getMsgOpId(int64_t MsgId, StringRef Name, const MCSubtargetInfo &STI); | |
| /// Map from an encoding to the symbolic name for a sendmsg operation. This is | |
| /// doing opposite of getMsgOpId(). | |
| StringRef getMsgOpName(int64_t MsgId, uint64_t Encoding, | |
| const MCSubtargetInfo &STI); | |
| } // namespace SendMsg | |
| namespace WaitEvent { | |
| StringRef getWaitEventMaskName(uint64_t Encoding, const MCSubtargetInfo &STI); | |
| } // namespace WaitEvent | |
| namespace Hwreg { // Symbolic names for the hwreg(...) syntax. | |
| int64_t getHwregId(StringRef Name, const MCSubtargetInfo &STI); | |
| StringRef getHwreg(uint64_t Encoding, const MCSubtargetInfo &STI); | |
| } // namespace Hwreg | |
| namespace MTBUFFormat { | |
| extern StringLiteral const DfmtSymbolic[]; | |
| extern StringLiteral const NfmtSymbolicGFX10[]; | |
| extern StringLiteral const NfmtSymbolicSICI[]; | |
| extern StringLiteral const NfmtSymbolicVI[]; | |
| extern StringLiteral const UfmtSymbolicGFX10[]; | |
| extern StringLiteral const UfmtSymbolicGFX11[]; | |
| extern unsigned const DfmtNfmt2UFmtGFX10[]; | |
| extern unsigned const DfmtNfmt2UFmtGFX11[]; | |
| } // namespace MTBUFFormat | |
| namespace Swizzle { // Symbolic names for the swizzle(...) syntax. | |
| extern const char* const IdSymbolic[]; | |
| } // namespace Swizzle | |
| namespace VGPRIndexMode { // Symbolic names for the gpr_idx(...) syntax. | |
| extern const char* const IdSymbolic[]; | |
| } // namespace VGPRIndexMode | |
| namespace UCVersion { | |
| struct GFXVersion { | |
| StringLiteral Symbol; | |
| unsigned Code; | |
| }; | |
| ArrayRef<GFXVersion> getGFXVersions(); | |
| } // namespace UCVersion | |
| namespace WMMAMods { | |
| // These should match enum values in SIDefines.h | |
| constexpr const char *const ModMatrixFmt[] = { | |
| "MATRIX_FMT_FP8", "MATRIX_FMT_BF8", "MATRIX_FMT_FP6", "MATRIX_FMT_BF6", | |
| "MATRIX_FMT_FP4"}; | |
| constexpr const char *const ModMatrixScale[] = {"MATRIX_SCALE_ROW0", | |
| "MATRIX_SCALE_ROW1"}; | |
| constexpr const char *const ModMatrixScaleFmt[] = { | |
| "MATRIX_SCALE_FMT_E8", "MATRIX_SCALE_FMT_E5M3", "MATRIX_SCALE_FMT_E4M3"}; | |
| } // namespace WMMAMods | |
| } // namespace AMDGPU | |
| } // namespace llvm | |
| #endif |