def InstFlag : OperandWithDefaultOps <i32, (ops (i32 0))>;
-def u16ImmTarget : AsmOperandClass {
- let Name = "U16Imm";
+class ImmOperandClass<string name, bit optional> : AsmOperandClass {
+ let Name = name;
+ let PredicateMethod = "is"#name;
+ let ParserMethod = "";
let RenderMethod = "addImmOperands";
+ let IsOptional = optional;
+ let DefaultMethod = "default"#name;
}
-def s16ImmTarget : AsmOperandClass {
- let Name = "S16Imm";
- let RenderMethod = "addImmOperands";
-}
-
-let OperandType = "OPERAND_IMMEDIATE" in {
-
-def u16imm : Operand<i16> {
- let PrintMethod = "printU16ImmOperand";
- let ParserMatchClass = u16ImmTarget;
-}
-
-def s16imm : Operand<i16> {
- let PrintMethod = "printU16ImmOperand";
- let ParserMatchClass = s16ImmTarget;
+class ImmOperand<ValueType type, string name, bit optional = 0,
+ string printer = "print"#name> : Operand<type> {
+ let ParserMatchClass = ImmOperandClass<name, optional>;
+ let PrintMethod = printer;
+ let OperandType = "OPERAND_IMMEDIATE";
}
-} // End OperandType = "OPERAND_IMMEDIATE"
+def s16imm : ImmOperand<i16, "S16Imm", 0, "printU16ImmOperand">;
+def u16imm : ImmOperand<i16, "U16Imm", 0, "printU16ImmOperand">;
//===--------------------------------------------------------------------===//
// Custom Operands
let OperandType = "OPERAND_IMMEDIATE";
}
-def AttrChanMatchClass : AsmOperandClass {
- let Name = "AttrChan";
- let PredicateMethod = "isAttrChan";
- let RenderMethod = "addImmOperands";
-}
-
-def AttrChan : Operand<i32> {
- let PrintMethod = "printInterpAttrChan";
- let ParserMatchClass = AttrChanMatchClass;
- let OperandType = "OPERAND_IMMEDIATE";
-}
+def AttrChan : ImmOperand<i32, "AttrChan", 0, "printInterpAttrChan">;
def SendMsgMatchClass : AsmOperandClass {
let Name = "SendMsg";
//
//===----------------------------------------------------------------------===//
-def smrd_offset_8 : NamedOperandU32<"SMRDOffset8",
- NamedMatchClass<"SMRDOffset8">> {
- let OperandType = "OPERAND_IMMEDIATE";
-}
+def smrd_offset_8 : ImmOperand<i32, "SMRDOffset8", 1>;
let OperandType = "OPERAND_IMMEDIATE",
EncoderMethod = "getSMEMOffsetEncoding",
DecoderMethod = "decodeSMEMOffset" in {
-def smem_offset : NamedOperandU32<"SMEMOffset", NamedMatchClass<"SMEMOffset">>;
+def smem_offset : ImmOperand<i32, "SMEMOffset", 1>;
def smem_offset_mod : NamedIntOperand<i32, "offset", "SMEMOffsetMod">;
}
// CI
//===----------------------------------------------------------------------===//
-def smrd_literal_offset : NamedOperandU32<"SMRDLiteralOffset",
- NamedMatchClass<"SMRDLiteralOffset">> {
- let OperandType = "OPERAND_IMMEDIATE";
-}
+def smrd_literal_offset : ImmOperand<i32, "SMRDLiteralOffset">;
class SMRD_Real_Load_IMM_ci <bits<5> op, SM_Load_Pseudo ps> :
SM_Real<ps>,