@@ -123,20 +123,35 @@ def FMA : Predicate<"Subtarget->hasFMA()">;
123
123
124
124
def InstFlag : OperandWithDefaultOps <i32, (ops (i32 0))>;
125
125
126
- class ImmOperandClass <string name, bit optional> : AsmOperandClass {
126
+ class CustomOperandClass <string name, bit optional> : AsmOperandClass {
127
127
let Name = name;
128
128
let PredicateMethod = "is"#name;
129
- let ParserMethod = "" ;
129
+ let ParserMethod = "parse"#name ;
130
130
let RenderMethod = "addImmOperands";
131
131
let IsOptional = optional;
132
132
let DefaultMethod = "default"#name;
133
133
}
134
134
135
+ class CustomOperandProps<bit optional = 0, string name = NAME,
136
+ AsmOperandClass opClass = CustomOperandClass<name, optional>> {
137
+ string PrintMethod = "print"#name;
138
+ AsmOperandClass ParserMatchClass = opClass;
139
+ string OperandType = "OPERAND_IMMEDIATE";
140
+ }
141
+
142
+ class CustomOperand<ValueType type, bit optional = 0, string name = NAME,
143
+ AsmOperandClass opClass = CustomOperandClass<name, optional>>
144
+ : Operand<type>, CustomOperandProps<optional, name, opClass>;
145
+
146
+ class ImmOperandClass<string name, bit optional>
147
+ : CustomOperandClass<name, optional> {
148
+ let ParserMethod = "";
149
+ }
150
+
135
151
class ImmOperand<ValueType type, string name, bit optional = 0,
136
- string printer = "print"#name> : Operand<type> {
137
- let ParserMatchClass = ImmOperandClass<name, optional>;
152
+ string printer = "print"#name>
153
+ : CustomOperand<type, optional, name, ImmOperandClass<name, optional>> {
138
154
let PrintMethod = printer;
139
- let OperandType = "OPERAND_IMMEDIATE";
140
155
}
141
156
142
157
def s16imm : ImmOperand<i16, "S16Imm", 0, "printU16ImmOperand">;
0 commit comments