1/*===- TableGen'erated file -------------------------------------*- C++ -*-===*\
2|* *|
3|* Pseudo-instruction MC lowering Source Fragment *|
4|* *|
5|* Automatically generated file, do not edit! *|
6|* *|
7\*===----------------------------------------------------------------------===*/
8
9bool RISCVAsmPrinter::
10lowerPseudoInstExpansion(const MachineInstr *MI, MCInst &Inst) {
11 Inst.clear();
12 switch (MI->getOpcode()) {
13 default: return false;
14 case RISCV::ClearFCSR: {
15 MCOperand MCOp;
16 Inst.setOpcode(RISCV::CSRRC);
17 // Operand: rd
18 Inst.addOperand(Op: MCOperand::createReg(Reg: RISCV::X0));
19 // Operand: imm12
20 Inst.addOperand(Op: MCOperand::createImm(Val: 3));
21 // Operand: rs1
22 lowerOperand(MO: MI->getOperand(i: 0), MCOp);
23 Inst.addOperand(Op: MCOp);
24 break;
25 }
26 case RISCV::ClearFCSRImm: {
27 MCOperand MCOp;
28 Inst.setOpcode(RISCV::CSRRCI);
29 // Operand: rd
30 Inst.addOperand(Op: MCOperand::createReg(Reg: RISCV::X0));
31 // Operand: imm12
32 Inst.addOperand(Op: MCOperand::createImm(Val: 3));
33 // Operand: rs1
34 lowerOperand(MO: MI->getOperand(i: 0), MCOp);
35 Inst.addOperand(Op: MCOp);
36 break;
37 }
38 case RISCV::PseudoBR: {
39 MCOperand MCOp;
40 Inst.setOpcode(RISCV::JAL);
41 // Operand: rd
42 Inst.addOperand(Op: MCOperand::createReg(Reg: RISCV::X0));
43 // Operand: imm20
44 lowerOperand(MO: MI->getOperand(i: 0), MCOp);
45 Inst.addOperand(Op: MCOp);
46 break;
47 }
48 case RISCV::PseudoBRIND: {
49 MCOperand MCOp;
50 Inst.setOpcode(RISCV::JALR);
51 // Operand: rd
52 Inst.addOperand(Op: MCOperand::createReg(Reg: RISCV::X0));
53 // Operand: rs1
54 lowerOperand(MO: MI->getOperand(i: 0), MCOp);
55 Inst.addOperand(Op: MCOp);
56 // Operand: imm12
57 lowerOperand(MO: MI->getOperand(i: 1), MCOp);
58 Inst.addOperand(Op: MCOp);
59 break;
60 }
61 case RISCV::PseudoBRINDX7: {
62 MCOperand MCOp;
63 Inst.setOpcode(RISCV::JALR);
64 // Operand: rd
65 Inst.addOperand(Op: MCOperand::createReg(Reg: RISCV::X0));
66 // Operand: rs1
67 lowerOperand(MO: MI->getOperand(i: 0), MCOp);
68 Inst.addOperand(Op: MCOp);
69 // Operand: imm12
70 lowerOperand(MO: MI->getOperand(i: 1), MCOp);
71 Inst.addOperand(Op: MCOp);
72 break;
73 }
74 case RISCV::PseudoCALLIndirect: {
75 MCOperand MCOp;
76 Inst.setOpcode(RISCV::JALR);
77 // Operand: rd
78 Inst.addOperand(Op: MCOperand::createReg(Reg: RISCV::X1));
79 // Operand: rs1
80 lowerOperand(MO: MI->getOperand(i: 0), MCOp);
81 Inst.addOperand(Op: MCOp);
82 // Operand: imm12
83 Inst.addOperand(Op: MCOperand::createImm(Val: 0));
84 break;
85 }
86 case RISCV::PseudoCALLIndirectX7: {
87 MCOperand MCOp;
88 Inst.setOpcode(RISCV::JALR);
89 // Operand: rd
90 Inst.addOperand(Op: MCOperand::createReg(Reg: RISCV::X1));
91 // Operand: rs1
92 lowerOperand(MO: MI->getOperand(i: 0), MCOp);
93 Inst.addOperand(Op: MCOp);
94 // Operand: imm12
95 Inst.addOperand(Op: MCOperand::createImm(Val: 0));
96 break;
97 }
98 case RISCV::PseudoClearFPR32: {
99 MCOperand MCOp;
100 Inst.setOpcode(RISCV::FMV_W_X);
101 // Operand: rd
102 lowerOperand(MO: MI->getOperand(i: 0), MCOp);
103 Inst.addOperand(Op: MCOp);
104 // Operand: rs1
105 Inst.addOperand(Op: MCOperand::createReg(Reg: RISCV::X0));
106 break;
107 }
108 case RISCV::PseudoClearFPR128: {
109 MCOperand MCOp;
110 Inst.setOpcode(RISCV::FCVT_Q_W);
111 // Operand: rd
112 lowerOperand(MO: MI->getOperand(i: 0), MCOp);
113 Inst.addOperand(Op: MCOp);
114 // Operand: rs1
115 Inst.addOperand(Op: MCOperand::createReg(Reg: RISCV::X0));
116 // Operand: frm
117 Inst.addOperand(Op: MCOperand::createImm(Val: 0));
118 break;
119 }
120 case RISCV::PseudoClearGPR: {
121 MCOperand MCOp;
122 Inst.setOpcode(RISCV::ADDI);
123 // Operand: rd
124 lowerOperand(MO: MI->getOperand(i: 0), MCOp);
125 Inst.addOperand(Op: MCOp);
126 // Operand: rs1
127 Inst.addOperand(Op: MCOperand::createReg(Reg: RISCV::X0));
128 // Operand: imm12
129 Inst.addOperand(Op: MCOperand::createImm(Val: 0));
130 break;
131 }
132 case RISCV::PseudoClearVR: {
133 MCOperand MCOp;
134 Inst.setOpcode(RISCV::VMV_V_I);
135 // Operand: vd
136 lowerOperand(MO: MI->getOperand(i: 0), MCOp);
137 Inst.addOperand(Op: MCOp);
138 // Operand: imm
139 Inst.addOperand(Op: MCOperand::createImm(Val: 0));
140 break;
141 }
142 case RISCV::PseudoRET: {
143 MCOperand MCOp;
144 Inst.setOpcode(RISCV::JALR);
145 // Operand: rd
146 Inst.addOperand(Op: MCOperand::createReg(Reg: RISCV::X0));
147 // Operand: rs1
148 Inst.addOperand(Op: MCOperand::createReg(Reg: RISCV::X1));
149 // Operand: imm12
150 Inst.addOperand(Op: MCOperand::createImm(Val: 0));
151 break;
152 }
153 case RISCV::PseudoReadVL: {
154 MCOperand MCOp;
155 Inst.setOpcode(RISCV::CSRRS);
156 // Operand: rd
157 lowerOperand(MO: MI->getOperand(i: 0), MCOp);
158 Inst.addOperand(Op: MCOp);
159 // Operand: imm12
160 Inst.addOperand(Op: MCOperand::createImm(Val: 3104));
161 // Operand: rs1
162 Inst.addOperand(Op: MCOperand::createReg(Reg: RISCV::X0));
163 break;
164 }
165 case RISCV::PseudoReadVLENB: {
166 MCOperand MCOp;
167 Inst.setOpcode(RISCV::CSRRS);
168 // Operand: rd
169 lowerOperand(MO: MI->getOperand(i: 0), MCOp);
170 Inst.addOperand(Op: MCOp);
171 // Operand: imm12
172 Inst.addOperand(Op: MCOperand::createImm(Val: 3106));
173 // Operand: rs1
174 Inst.addOperand(Op: MCOperand::createReg(Reg: RISCV::X0));
175 break;
176 }
177 case RISCV::PseudoSF_VSETTK: {
178 MCOperand MCOp;
179 Inst.setOpcode(RISCV::SF_VSETTK);
180 // Operand: rd
181 lowerOperand(MO: MI->getOperand(i: 0), MCOp);
182 Inst.addOperand(Op: MCOp);
183 // Operand: rs1
184 lowerOperand(MO: MI->getOperand(i: 1), MCOp);
185 Inst.addOperand(Op: MCOp);
186 break;
187 }
188 case RISCV::PseudoSF_VSETTM: {
189 MCOperand MCOp;
190 Inst.setOpcode(RISCV::SF_VSETTM);
191 // Operand: rd
192 lowerOperand(MO: MI->getOperand(i: 0), MCOp);
193 Inst.addOperand(Op: MCOp);
194 // Operand: rs1
195 lowerOperand(MO: MI->getOperand(i: 1), MCOp);
196 Inst.addOperand(Op: MCOp);
197 break;
198 }
199 case RISCV::PseudoSF_VSETTNT: {
200 MCOperand MCOp;
201 Inst.setOpcode(RISCV::VSETVLI);
202 // Operand: rd
203 lowerOperand(MO: MI->getOperand(i: 0), MCOp);
204 Inst.addOperand(Op: MCOp);
205 // Operand: rs1
206 lowerOperand(MO: MI->getOperand(i: 1), MCOp);
207 Inst.addOperand(Op: MCOp);
208 // Operand: vtypei
209 lowerOperand(MO: MI->getOperand(i: 2), MCOp);
210 Inst.addOperand(Op: MCOp);
211 break;
212 }
213 case RISCV::PseudoSF_VSETTNTX0: {
214 MCOperand MCOp;
215 Inst.setOpcode(RISCV::VSETVLI);
216 // Operand: rd
217 lowerOperand(MO: MI->getOperand(i: 0), MCOp);
218 Inst.addOperand(Op: MCOp);
219 // Operand: rs1
220 lowerOperand(MO: MI->getOperand(i: 1), MCOp);
221 Inst.addOperand(Op: MCOp);
222 // Operand: vtypei
223 lowerOperand(MO: MI->getOperand(i: 2), MCOp);
224 Inst.addOperand(Op: MCOp);
225 break;
226 }
227 case RISCV::PseudoSF_VSETTNTX0X0: {
228 MCOperand MCOp;
229 Inst.setOpcode(RISCV::VSETVLI);
230 // Operand: rd
231 lowerOperand(MO: MI->getOperand(i: 0), MCOp);
232 Inst.addOperand(Op: MCOp);
233 // Operand: rs1
234 lowerOperand(MO: MI->getOperand(i: 1), MCOp);
235 Inst.addOperand(Op: MCOp);
236 // Operand: vtypei
237 lowerOperand(MO: MI->getOperand(i: 2), MCOp);
238 Inst.addOperand(Op: MCOp);
239 break;
240 }
241 case RISCV::PseudoTAILIndirect: {
242 MCOperand MCOp;
243 Inst.setOpcode(RISCV::JALR);
244 // Operand: rd
245 Inst.addOperand(Op: MCOperand::createReg(Reg: RISCV::X0));
246 // Operand: rs1
247 lowerOperand(MO: MI->getOperand(i: 0), MCOp);
248 Inst.addOperand(Op: MCOp);
249 // Operand: imm12
250 Inst.addOperand(Op: MCOperand::createImm(Val: 0));
251 break;
252 }
253 case RISCV::PseudoTAILIndirectX7: {
254 MCOperand MCOp;
255 Inst.setOpcode(RISCV::JALR);
256 // Operand: rd
257 Inst.addOperand(Op: MCOperand::createReg(Reg: RISCV::X0));
258 // Operand: rs1
259 lowerOperand(MO: MI->getOperand(i: 0), MCOp);
260 Inst.addOperand(Op: MCOp);
261 // Operand: imm12
262 Inst.addOperand(Op: MCOperand::createImm(Val: 0));
263 break;
264 }
265 case RISCV::PseudoVSETIVLI: {
266 MCOperand MCOp;
267 Inst.setOpcode(RISCV::VSETIVLI);
268 // Operand: rd
269 lowerOperand(MO: MI->getOperand(i: 0), MCOp);
270 Inst.addOperand(Op: MCOp);
271 // Operand: uimm
272 lowerOperand(MO: MI->getOperand(i: 1), MCOp);
273 Inst.addOperand(Op: MCOp);
274 // Operand: vtypei
275 lowerOperand(MO: MI->getOperand(i: 2), MCOp);
276 Inst.addOperand(Op: MCOp);
277 break;
278 }
279 case RISCV::PseudoVSETVLI: {
280 MCOperand MCOp;
281 Inst.setOpcode(RISCV::VSETVLI);
282 // Operand: rd
283 lowerOperand(MO: MI->getOperand(i: 0), MCOp);
284 Inst.addOperand(Op: MCOp);
285 // Operand: rs1
286 lowerOperand(MO: MI->getOperand(i: 1), MCOp);
287 Inst.addOperand(Op: MCOp);
288 // Operand: vtypei
289 lowerOperand(MO: MI->getOperand(i: 2), MCOp);
290 Inst.addOperand(Op: MCOp);
291 break;
292 }
293 case RISCV::PseudoVSETVLIX0: {
294 MCOperand MCOp;
295 Inst.setOpcode(RISCV::VSETVLI);
296 // Operand: rd
297 lowerOperand(MO: MI->getOperand(i: 0), MCOp);
298 Inst.addOperand(Op: MCOp);
299 // Operand: rs1
300 lowerOperand(MO: MI->getOperand(i: 1), MCOp);
301 Inst.addOperand(Op: MCOp);
302 // Operand: vtypei
303 lowerOperand(MO: MI->getOperand(i: 2), MCOp);
304 Inst.addOperand(Op: MCOp);
305 break;
306 }
307 case RISCV::PseudoVSETVLIX0X0: {
308 MCOperand MCOp;
309 Inst.setOpcode(RISCV::VSETVLI);
310 // Operand: rd
311 lowerOperand(MO: MI->getOperand(i: 0), MCOp);
312 Inst.addOperand(Op: MCOp);
313 // Operand: rs1
314 lowerOperand(MO: MI->getOperand(i: 1), MCOp);
315 Inst.addOperand(Op: MCOp);
316 // Operand: vtypei
317 lowerOperand(MO: MI->getOperand(i: 2), MCOp);
318 Inst.addOperand(Op: MCOp);
319 break;
320 }
321 case RISCV::ReadFCSR: {
322 MCOperand MCOp;
323 Inst.setOpcode(RISCV::CSRRS);
324 // Operand: rd
325 lowerOperand(MO: MI->getOperand(i: 0), MCOp);
326 Inst.addOperand(Op: MCOp);
327 // Operand: imm12
328 Inst.addOperand(Op: MCOperand::createImm(Val: 3));
329 // Operand: rs1
330 Inst.addOperand(Op: MCOperand::createReg(Reg: RISCV::X0));
331 break;
332 }
333 case RISCV::ReadFFLAGS: {
334 MCOperand MCOp;
335 Inst.setOpcode(RISCV::CSRRS);
336 // Operand: rd
337 lowerOperand(MO: MI->getOperand(i: 0), MCOp);
338 Inst.addOperand(Op: MCOp);
339 // Operand: imm12
340 Inst.addOperand(Op: MCOperand::createImm(Val: 1));
341 // Operand: rs1
342 Inst.addOperand(Op: MCOperand::createReg(Reg: RISCV::X0));
343 break;
344 }
345 case RISCV::ReadFRM: {
346 MCOperand MCOp;
347 Inst.setOpcode(RISCV::CSRRS);
348 // Operand: rd
349 lowerOperand(MO: MI->getOperand(i: 0), MCOp);
350 Inst.addOperand(Op: MCOp);
351 // Operand: imm12
352 Inst.addOperand(Op: MCOperand::createImm(Val: 2));
353 // Operand: rs1
354 Inst.addOperand(Op: MCOperand::createReg(Reg: RISCV::X0));
355 break;
356 }
357 case RISCV::SetFCSR: {
358 MCOperand MCOp;
359 Inst.setOpcode(RISCV::CSRRS);
360 // Operand: rd
361 Inst.addOperand(Op: MCOperand::createReg(Reg: RISCV::X0));
362 // Operand: imm12
363 Inst.addOperand(Op: MCOperand::createImm(Val: 3));
364 // Operand: rs1
365 lowerOperand(MO: MI->getOperand(i: 0), MCOp);
366 Inst.addOperand(Op: MCOp);
367 break;
368 }
369 case RISCV::SetFCSRImm: {
370 MCOperand MCOp;
371 Inst.setOpcode(RISCV::CSRRSI);
372 // Operand: rd
373 Inst.addOperand(Op: MCOperand::createReg(Reg: RISCV::X0));
374 // Operand: imm12
375 Inst.addOperand(Op: MCOperand::createImm(Val: 3));
376 // Operand: rs1
377 lowerOperand(MO: MI->getOperand(i: 0), MCOp);
378 Inst.addOperand(Op: MCOp);
379 break;
380 }
381 case RISCV::SwapFRMImm: {
382 MCOperand MCOp;
383 Inst.setOpcode(RISCV::CSRRWI);
384 // Operand: rd
385 lowerOperand(MO: MI->getOperand(i: 0), MCOp);
386 Inst.addOperand(Op: MCOp);
387 // Operand: imm12
388 Inst.addOperand(Op: MCOperand::createImm(Val: 2));
389 // Operand: rs1
390 lowerOperand(MO: MI->getOperand(i: 1), MCOp);
391 Inst.addOperand(Op: MCOp);
392 break;
393 }
394 case RISCV::WriteFCSR: {
395 MCOperand MCOp;
396 Inst.setOpcode(RISCV::CSRRW);
397 // Operand: rd
398 Inst.addOperand(Op: MCOperand::createReg(Reg: RISCV::X0));
399 // Operand: imm12
400 Inst.addOperand(Op: MCOperand::createImm(Val: 3));
401 // Operand: rs1
402 lowerOperand(MO: MI->getOperand(i: 0), MCOp);
403 Inst.addOperand(Op: MCOp);
404 break;
405 }
406 case RISCV::WriteFCSRImm: {
407 MCOperand MCOp;
408 Inst.setOpcode(RISCV::CSRRWI);
409 // Operand: rd
410 Inst.addOperand(Op: MCOperand::createReg(Reg: RISCV::X0));
411 // Operand: imm12
412 Inst.addOperand(Op: MCOperand::createImm(Val: 3));
413 // Operand: rs1
414 lowerOperand(MO: MI->getOperand(i: 0), MCOp);
415 Inst.addOperand(Op: MCOp);
416 break;
417 }
418 case RISCV::WriteFFLAGS: {
419 MCOperand MCOp;
420 Inst.setOpcode(RISCV::CSRRW);
421 // Operand: rd
422 Inst.addOperand(Op: MCOperand::createReg(Reg: RISCV::X0));
423 // Operand: imm12
424 Inst.addOperand(Op: MCOperand::createImm(Val: 1));
425 // Operand: rs1
426 lowerOperand(MO: MI->getOperand(i: 0), MCOp);
427 Inst.addOperand(Op: MCOp);
428 break;
429 }
430 case RISCV::WriteFRM: {
431 MCOperand MCOp;
432 Inst.setOpcode(RISCV::CSRRW);
433 // Operand: rd
434 Inst.addOperand(Op: MCOperand::createReg(Reg: RISCV::X0));
435 // Operand: imm12
436 Inst.addOperand(Op: MCOperand::createImm(Val: 2));
437 // Operand: rs1
438 lowerOperand(MO: MI->getOperand(i: 0), MCOp);
439 Inst.addOperand(Op: MCOp);
440 break;
441 }
442 case RISCV::WriteFRMImm: {
443 MCOperand MCOp;
444 Inst.setOpcode(RISCV::CSRRWI);
445 // Operand: rd
446 Inst.addOperand(Op: MCOperand::createReg(Reg: RISCV::X0));
447 // Operand: imm12
448 Inst.addOperand(Op: MCOperand::createImm(Val: 2));
449 // Operand: rs1
450 lowerOperand(MO: MI->getOperand(i: 0), MCOp);
451 Inst.addOperand(Op: MCOp);
452 break;
453 }
454 case RISCV::WriteVXRMImm: {
455 MCOperand MCOp;
456 Inst.setOpcode(RISCV::CSRRWI);
457 // Operand: rd
458 Inst.addOperand(Op: MCOperand::createReg(Reg: RISCV::X0));
459 // Operand: imm12
460 Inst.addOperand(Op: MCOperand::createImm(Val: 10));
461 // Operand: rs1
462 lowerOperand(MO: MI->getOperand(i: 0), MCOp);
463 Inst.addOperand(Op: MCOp);
464 break;
465 }
466 }
467 return true;
468}
469
470