| //===-- 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; | |
| template <class T> struct CustomOperand { | |
| StringLiteral Name; | |
| int Encoding = 0; | |
| bool (*Cond)(T Context) = 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 | |
| namespace SendMsg { // Symbolic names for the sendmsg(...) syntax. | |
| extern const CustomOperand<const MCSubtargetInfo &> Msg[]; | |
| extern const int MSG_SIZE; | |
| extern const char *const OpSysSymbolic[OP_SYS_LAST_]; | |
| extern const char *const OpGsSymbolic[OP_GS_LAST_]; | |
| } // namespace SendMsg | |
| namespace Hwreg { // Symbolic names for the hwreg(...) syntax. | |
| extern const CustomOperand<const MCSubtargetInfo &> Opr[]; | |
| extern const int OPR_SIZE; | |
| } // 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 AMDGPU | |
| } // namespace llvm | |
| #endif |