@@ -129,10 +129,16 @@ class RVZcArith_r<bits<5> funct5, string OpcodeStr> :
129
129
let Constraints = "$rd = $rd_wb";
130
130
}
131
131
132
- class RVInstZcCPPP<dag outs, dag ins, string opcodestr, string argstr>
133
- : RVInst16<outs, ins, opcodestr, argstr, [], InstFormatOther> {
132
+ class RVInstZcCPPP<bits<5> funct5, string opcodestr>
133
+ : RVInst16<(outs), (ins rlist:$rlist, spimm:$spimm),
134
+ opcodestr, "{$rlist}, $spimm", [], InstFormatOther> {
135
+ bits<4> rlist;
136
+ bits<16> spimm;
134
137
135
138
let Inst{1-0} = 0b10;
139
+ let Inst{3-2} = spimm{5-4};
140
+ let Inst{7-4} = rlist;
141
+ let Inst{12-8} = funct5;
136
142
let Inst{15-13} = 0b101;
137
143
}
138
144
@@ -189,49 +195,17 @@ def CM_MVSA01 : RVInst16CA<0b101011, 0b01, 0b10, (outs SR07:$rs1, SR07:$rs2),
189
195
} // DecoderNamespace = "RVZcmp", Predicates = [HasStdExtZcmp]...
190
196
191
197
let DecoderNamespace = "RVZcmp", Predicates = [HasStdExtZcmp] in {
192
- let hasSideEffects = 0, mayLoad = 0, mayStore = 1 in
193
- def CM_PUSH : RVInstZcCPPP<(outs), (ins rlist:$rlist, spimm:$spimm),
194
- "cm.push", "{$rlist}, $spimm"> {
195
- bits<4> rlist;
196
- bits<16> spimm;
197
-
198
- let Inst{12-8} = 0b11000;
199
- let Inst{7-4} = rlist;
200
- let Inst{3-2} = spimm{5-4};
201
- }
202
-
203
- let hasSideEffects = 0, mayLoad = 1, mayStore = 0 in
204
- def CM_POPRET : RVInstZcCPPP<(outs), (ins rlist:$rlist, spimm:$spimm),
205
- "cm.popret", "{$rlist}, $spimm"> {
206
- bits<4> rlist;
207
- bits<16> spimm;
208
-
209
- let Inst{12-8} = 0b11110;
210
- let Inst{7-4} = rlist;
211
- let Inst{3-2} = spimm{5-4};
212
- }
213
-
214
- let hasSideEffects = 0, mayLoad = 1, mayStore = 0 in
215
- def CM_POPRETZ : RVInstZcCPPP<(outs), (ins rlist:$rlist, spimm:$spimm),
216
- "cm.popretz", "{$rlist}, $spimm"> {
217
- bits<4> rlist;
218
- bits<16> spimm;
198
+ let hasSideEffects = 0, mayLoad = 0, mayStore = 1 in
199
+ def CM_PUSH : RVInstZcCPPP<0b11000, "cm.push">;
219
200
220
- let Inst{12-8} = 0b11100;
221
- let Inst{7-4} = rlist;
222
- let Inst{3-2} = spimm{5-4};
223
- }
201
+ let hasSideEffects = 0, mayLoad = 1, mayStore = 0 in
202
+ def CM_POPRET : RVInstZcCPPP<0b11110, "cm.popret">;
224
203
225
- let hasSideEffects = 0, mayLoad = 1, mayStore = 0 in
226
- def CM_POP : RVInstZcCPPP<(outs), (ins rlist:$rlist, spimm:$spimm),
227
- "cm.pop", "{$rlist}, $spimm"> {
228
- bits<4> rlist;
229
- bits<16> spimm;
204
+ let hasSideEffects = 0, mayLoad = 1, mayStore = 0 in
205
+ def CM_POPRETZ : RVInstZcCPPP<0b11100, "cm.popretz">;
230
206
231
- let Inst{12-8} = 0b11010;
232
- let Inst{7-4} = rlist;
233
- let Inst{3-2} = spimm{5-4};
234
- }
207
+ let hasSideEffects = 0, mayLoad = 1, mayStore = 0 in
208
+ def CM_POP : RVInstZcCPPP<0b11010, "cm.pop">;
235
209
} // DecoderNamespace = "RVZcmp", Predicates = [HasStdExtZcmp]...
236
210
237
211
let DecoderNamespace = "RVZcmt", Predicates = [HasStdExtZcmt],
0 commit comments