aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Target/AMDGPU/Utils/AMDGPUAsmUtils.h
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/Target/AMDGPU/Utils/AMDGPUAsmUtils.h')
-rw-r--r--llvm/lib/Target/AMDGPU/Utils/AMDGPUAsmUtils.h56
1 files changed, 52 insertions, 4 deletions
diff --git a/llvm/lib/Target/AMDGPU/Utils/AMDGPUAsmUtils.h b/llvm/lib/Target/AMDGPU/Utils/AMDGPUAsmUtils.h
index d1deb570a938..054e35e90f2f 100644
--- a/llvm/lib/Target/AMDGPU/Utils/AMDGPUAsmUtils.h
+++ b/llvm/lib/Target/AMDGPU/Utils/AMDGPUAsmUtils.h
@@ -11,15 +11,60 @@
#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 char *const IdSymbolic[ID_GAPS_LAST_];
+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_];
@@ -27,7 +72,8 @@ extern const char *const OpGsSymbolic[OP_GS_LAST_];
namespace Hwreg { // Symbolic names for the hwreg(...) syntax.
-extern const char* const IdSymbolic[];
+extern const CustomOperand<const MCSubtargetInfo &> Opr[];
+extern const int OPR_SIZE;
} // namespace Hwreg
@@ -37,8 +83,10 @@ extern StringLiteral const DfmtSymbolic[];
extern StringLiteral const NfmtSymbolicGFX10[];
extern StringLiteral const NfmtSymbolicSICI[];
extern StringLiteral const NfmtSymbolicVI[];
-extern StringLiteral const UfmtSymbolic[];
-extern unsigned const DfmtNfmt2UFmt[];
+extern StringLiteral const UfmtSymbolicGFX10[];
+extern StringLiteral const UfmtSymbolicGFX11[];
+extern unsigned const DfmtNfmt2UFmtGFX10[];
+extern unsigned const DfmtNfmt2UFmtGFX11[];
} // namespace MTBUFFormat