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 LoongArchAsmPrinter::
10lowerPseudoInstExpansion(const MachineInstr *MI, MCInst &Inst) {
11 Inst.clear();
12 switch (MI->getOpcode()) {
13 default: return false;
14 case LoongArch::PseudoAtomicStoreD: {
15 MCOperand MCOp;
16 Inst.setOpcode(LoongArch::AMSWAP__DB_D);
17 // Operand: rd
18 Inst.addOperand(Op: MCOperand::createReg(Reg: LoongArch::R0));
19 // Operand: rk
20 lowerOperand(MO: MI->getOperand(i: 1), MCOp);
21 Inst.addOperand(Op: MCOp);
22 // Operand: rj
23 lowerOperand(MO: MI->getOperand(i: 2), MCOp);
24 Inst.addOperand(Op: MCOp);
25 break;
26 }
27 case LoongArch::PseudoAtomicStoreW: {
28 MCOperand MCOp;
29 Inst.setOpcode(LoongArch::AMSWAP__DB_W);
30 // Operand: rd
31 Inst.addOperand(Op: MCOperand::createReg(Reg: LoongArch::R0));
32 // Operand: rk
33 lowerOperand(MO: MI->getOperand(i: 1), MCOp);
34 Inst.addOperand(Op: MCOp);
35 // Operand: rj
36 lowerOperand(MO: MI->getOperand(i: 2), MCOp);
37 Inst.addOperand(Op: MCOp);
38 break;
39 }
40 case LoongArch::PseudoBR: {
41 MCOperand MCOp;
42 Inst.setOpcode(LoongArch::B);
43 // Operand: imm26
44 lowerOperand(MO: MI->getOperand(i: 0), MCOp);
45 Inst.addOperand(Op: MCOp);
46 break;
47 }
48 case LoongArch::PseudoBRIND: {
49 MCOperand MCOp;
50 Inst.setOpcode(LoongArch::JIRL);
51 // Operand: rd
52 Inst.addOperand(Op: MCOperand::createReg(Reg: LoongArch::R0));
53 // Operand: rj
54 lowerOperand(MO: MI->getOperand(i: 0), MCOp);
55 Inst.addOperand(Op: MCOp);
56 // Operand: imm16
57 lowerOperand(MO: MI->getOperand(i: 1), MCOp);
58 Inst.addOperand(Op: MCOp);
59 break;
60 }
61 case LoongArch::PseudoB_TAIL: {
62 MCOperand MCOp;
63 Inst.setOpcode(LoongArch::B);
64 // Operand: imm26
65 lowerOperand(MO: MI->getOperand(i: 0), MCOp);
66 Inst.addOperand(Op: MCOp);
67 break;
68 }
69 case LoongArch::PseudoCALLIndirect: {
70 MCOperand MCOp;
71 Inst.setOpcode(LoongArch::JIRL);
72 // Operand: rd
73 Inst.addOperand(Op: MCOperand::createReg(Reg: LoongArch::R1));
74 // Operand: rj
75 lowerOperand(MO: MI->getOperand(i: 0), MCOp);
76 Inst.addOperand(Op: MCOp);
77 // Operand: imm16
78 Inst.addOperand(Op: MCOperand::createImm(Val: 0));
79 break;
80 }
81 case LoongArch::PseudoDESC_CALL: {
82 MCOperand MCOp;
83 Inst.setOpcode(LoongArch::JIRL);
84 // Operand: rd
85 lowerOperand(MO: MI->getOperand(i: 0), MCOp);
86 Inst.addOperand(Op: MCOp);
87 // Operand: rj
88 lowerOperand(MO: MI->getOperand(i: 1), MCOp);
89 Inst.addOperand(Op: MCOp);
90 // Operand: imm16
91 lowerOperand(MO: MI->getOperand(i: 2), MCOp);
92 Inst.addOperand(Op: MCOp);
93 break;
94 }
95 case LoongArch::PseudoJIRL_CALL: {
96 MCOperand MCOp;
97 Inst.setOpcode(LoongArch::JIRL);
98 // Operand: rd
99 Inst.addOperand(Op: MCOperand::createReg(Reg: LoongArch::R1));
100 // Operand: rj
101 lowerOperand(MO: MI->getOperand(i: 0), MCOp);
102 Inst.addOperand(Op: MCOp);
103 // Operand: imm16
104 lowerOperand(MO: MI->getOperand(i: 1), MCOp);
105 Inst.addOperand(Op: MCOp);
106 break;
107 }
108 case LoongArch::PseudoJIRL_TAIL: {
109 MCOperand MCOp;
110 Inst.setOpcode(LoongArch::JIRL);
111 // Operand: rd
112 Inst.addOperand(Op: MCOperand::createReg(Reg: LoongArch::R0));
113 // Operand: rj
114 lowerOperand(MO: MI->getOperand(i: 0), MCOp);
115 Inst.addOperand(Op: MCOp);
116 // Operand: imm16
117 lowerOperand(MO: MI->getOperand(i: 1), MCOp);
118 Inst.addOperand(Op: MCOp);
119 break;
120 }
121 case LoongArch::PseudoRET: {
122 MCOperand MCOp;
123 Inst.setOpcode(LoongArch::JIRL);
124 // Operand: rd
125 Inst.addOperand(Op: MCOperand::createReg(Reg: LoongArch::R0));
126 // Operand: rj
127 Inst.addOperand(Op: MCOperand::createReg(Reg: LoongArch::R1));
128 // Operand: imm16
129 Inst.addOperand(Op: MCOperand::createImm(Val: 0));
130 break;
131 }
132 case LoongArch::PseudoTAILIndirect: {
133 MCOperand MCOp;
134 Inst.setOpcode(LoongArch::JIRL);
135 // Operand: rd
136 Inst.addOperand(Op: MCOperand::createReg(Reg: LoongArch::R0));
137 // Operand: rj
138 lowerOperand(MO: MI->getOperand(i: 0), MCOp);
139 Inst.addOperand(Op: MCOp);
140 // Operand: imm16
141 Inst.addOperand(Op: MCOperand::createImm(Val: 0));
142 break;
143 }
144 case LoongArch::PseudoUNIMP: {
145 MCOperand MCOp;
146 Inst.setOpcode(LoongArch::AMSWAP_W);
147 // Operand: rd
148 Inst.addOperand(Op: MCOperand::createReg(Reg: LoongArch::R0));
149 // Operand: rk
150 Inst.addOperand(Op: MCOperand::createReg(Reg: LoongArch::R1));
151 // Operand: rj
152 Inst.addOperand(Op: MCOperand::createReg(Reg: LoongArch::R0));
153 break;
154 }
155 }
156 return true;
157}
158
159