1 | /*===- TableGen'erated file -------------------------------------*- C++ -*-===*\ |
2 | |* *| |
3 | |* Pseudo-instruction MC lowering Source Fragment *| |
4 | |* *| |
5 | |* Automatically generated file, do not edit! *| |
6 | |* *| |
7 | \*===----------------------------------------------------------------------===*/ |
8 | |
9 | bool LoongArchAsmPrinter:: |
10 | lowerPseudoInstExpansion(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 | |