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 ARMAsmPrinter:: |
10 | lowerPseudoInstExpansion(const MachineInstr *MI, MCInst &Inst) { |
11 | Inst.clear(); |
12 | switch (MI->getOpcode()) { |
13 | default: return false; |
14 | case ARM::B: { |
15 | MCOperand MCOp; |
16 | Inst.setOpcode(ARM::Bcc); |
17 | // Operand: target |
18 | lowerOperand(MO: MI->getOperand(i: 0), MCOp); |
19 | Inst.addOperand(Op: MCOp); |
20 | // Operand: p |
21 | Inst.addOperand(Op: MCOperand::createImm(Val: 14)); |
22 | Inst.addOperand(Op: MCOperand::createReg(Reg: 0)); |
23 | break; |
24 | } |
25 | case ARM::BLX_noip: { |
26 | MCOperand MCOp; |
27 | Inst.setOpcode(ARM::BLX); |
28 | // Operand: func |
29 | lowerOperand(MO: MI->getOperand(i: 0), MCOp); |
30 | Inst.addOperand(Op: MCOp); |
31 | break; |
32 | } |
33 | case ARM::BLX_pred_noip: { |
34 | MCOperand MCOp; |
35 | Inst.setOpcode(ARM::BLX_pred); |
36 | // Operand: func |
37 | lowerOperand(MO: MI->getOperand(i: 0), MCOp); |
38 | Inst.addOperand(Op: MCOp); |
39 | // Operand: p |
40 | Inst.addOperand(Op: MCOperand::createImm(Val: 14)); |
41 | Inst.addOperand(Op: MCOperand::createReg(Reg: 0)); |
42 | break; |
43 | } |
44 | case ARM::LDMIA_RET: { |
45 | MCOperand MCOp; |
46 | Inst.setOpcode(ARM::LDMIA_UPD); |
47 | // Operand: wb |
48 | lowerOperand(MO: MI->getOperand(i: 0), MCOp); |
49 | Inst.addOperand(Op: MCOp); |
50 | // Operand: Rn |
51 | lowerOperand(MO: MI->getOperand(i: 1), MCOp); |
52 | Inst.addOperand(Op: MCOp); |
53 | // Operand: p |
54 | lowerOperand(MO: MI->getOperand(i: 2), MCOp); |
55 | Inst.addOperand(Op: MCOp); |
56 | lowerOperand(MO: MI->getOperand(i: 3), MCOp); |
57 | Inst.addOperand(Op: MCOp); |
58 | // Operand: regs |
59 | lowerOperand(MO: MI->getOperand(i: 4), MCOp); |
60 | Inst.addOperand(Op: MCOp); |
61 | // variable_ops |
62 | for (unsigned i = 5, e = MI->getNumOperands(); i != e; ++i) |
63 | if (lowerOperand(MO: MI->getOperand(i), MCOp)) |
64 | Inst.addOperand(Op: MCOp); |
65 | break; |
66 | } |
67 | case ARM::MLAv5: { |
68 | MCOperand MCOp; |
69 | Inst.setOpcode(ARM::MLA); |
70 | // Operand: Rd |
71 | lowerOperand(MO: MI->getOperand(i: 0), MCOp); |
72 | Inst.addOperand(Op: MCOp); |
73 | // Operand: Rn |
74 | lowerOperand(MO: MI->getOperand(i: 1), MCOp); |
75 | Inst.addOperand(Op: MCOp); |
76 | // Operand: Rm |
77 | lowerOperand(MO: MI->getOperand(i: 2), MCOp); |
78 | Inst.addOperand(Op: MCOp); |
79 | // Operand: Ra |
80 | lowerOperand(MO: MI->getOperand(i: 3), MCOp); |
81 | Inst.addOperand(Op: MCOp); |
82 | // Operand: p |
83 | lowerOperand(MO: MI->getOperand(i: 4), MCOp); |
84 | Inst.addOperand(Op: MCOp); |
85 | lowerOperand(MO: MI->getOperand(i: 5), MCOp); |
86 | Inst.addOperand(Op: MCOp); |
87 | // Operand: s |
88 | lowerOperand(MO: MI->getOperand(i: 6), MCOp); |
89 | Inst.addOperand(Op: MCOp); |
90 | break; |
91 | } |
92 | case ARM::MOVPCRX: { |
93 | MCOperand MCOp; |
94 | Inst.setOpcode(ARM::MOVr); |
95 | // Operand: Rd |
96 | Inst.addOperand(Op: MCOperand::createReg(Reg: ARM::PC)); |
97 | // Operand: Rm |
98 | lowerOperand(MO: MI->getOperand(i: 0), MCOp); |
99 | Inst.addOperand(Op: MCOp); |
100 | // Operand: p |
101 | Inst.addOperand(Op: MCOperand::createImm(Val: 14)); |
102 | Inst.addOperand(Op: MCOperand::createReg(Reg: 0)); |
103 | // Operand: s |
104 | Inst.addOperand(Op: MCOperand::createReg(Reg: 0)); |
105 | break; |
106 | } |
107 | case ARM::MULv5: { |
108 | MCOperand MCOp; |
109 | Inst.setOpcode(ARM::MUL); |
110 | // Operand: Rd |
111 | lowerOperand(MO: MI->getOperand(i: 0), MCOp); |
112 | Inst.addOperand(Op: MCOp); |
113 | // Operand: Rn |
114 | lowerOperand(MO: MI->getOperand(i: 1), MCOp); |
115 | Inst.addOperand(Op: MCOp); |
116 | // Operand: Rm |
117 | lowerOperand(MO: MI->getOperand(i: 2), MCOp); |
118 | Inst.addOperand(Op: MCOp); |
119 | // Operand: p |
120 | lowerOperand(MO: MI->getOperand(i: 3), MCOp); |
121 | Inst.addOperand(Op: MCOp); |
122 | lowerOperand(MO: MI->getOperand(i: 4), MCOp); |
123 | Inst.addOperand(Op: MCOp); |
124 | // Operand: s |
125 | lowerOperand(MO: MI->getOperand(i: 5), MCOp); |
126 | Inst.addOperand(Op: MCOp); |
127 | break; |
128 | } |
129 | case ARM::SMLALv5: { |
130 | MCOperand MCOp; |
131 | Inst.setOpcode(ARM::SMLAL); |
132 | // Operand: RdLo |
133 | lowerOperand(MO: MI->getOperand(i: 0), MCOp); |
134 | Inst.addOperand(Op: MCOp); |
135 | // Operand: RdHi |
136 | lowerOperand(MO: MI->getOperand(i: 1), MCOp); |
137 | Inst.addOperand(Op: MCOp); |
138 | // Operand: Rn |
139 | lowerOperand(MO: MI->getOperand(i: 2), MCOp); |
140 | Inst.addOperand(Op: MCOp); |
141 | // Operand: Rm |
142 | lowerOperand(MO: MI->getOperand(i: 3), MCOp); |
143 | Inst.addOperand(Op: MCOp); |
144 | // Operand: RLo |
145 | lowerOperand(MO: MI->getOperand(i: 4), MCOp); |
146 | Inst.addOperand(Op: MCOp); |
147 | // Operand: RHi |
148 | lowerOperand(MO: MI->getOperand(i: 5), MCOp); |
149 | Inst.addOperand(Op: MCOp); |
150 | // Operand: p |
151 | lowerOperand(MO: MI->getOperand(i: 6), MCOp); |
152 | Inst.addOperand(Op: MCOp); |
153 | lowerOperand(MO: MI->getOperand(i: 7), MCOp); |
154 | Inst.addOperand(Op: MCOp); |
155 | // Operand: s |
156 | lowerOperand(MO: MI->getOperand(i: 8), MCOp); |
157 | Inst.addOperand(Op: MCOp); |
158 | break; |
159 | } |
160 | case ARM::SMULLv5: { |
161 | MCOperand MCOp; |
162 | Inst.setOpcode(ARM::SMULL); |
163 | // Operand: RdLo |
164 | lowerOperand(MO: MI->getOperand(i: 0), MCOp); |
165 | Inst.addOperand(Op: MCOp); |
166 | // Operand: RdHi |
167 | lowerOperand(MO: MI->getOperand(i: 1), MCOp); |
168 | Inst.addOperand(Op: MCOp); |
169 | // Operand: Rn |
170 | lowerOperand(MO: MI->getOperand(i: 2), MCOp); |
171 | Inst.addOperand(Op: MCOp); |
172 | // Operand: Rm |
173 | lowerOperand(MO: MI->getOperand(i: 3), MCOp); |
174 | Inst.addOperand(Op: MCOp); |
175 | // Operand: p |
176 | lowerOperand(MO: MI->getOperand(i: 4), MCOp); |
177 | Inst.addOperand(Op: MCOp); |
178 | lowerOperand(MO: MI->getOperand(i: 5), MCOp); |
179 | Inst.addOperand(Op: MCOp); |
180 | // Operand: s |
181 | lowerOperand(MO: MI->getOperand(i: 6), MCOp); |
182 | Inst.addOperand(Op: MCOp); |
183 | break; |
184 | } |
185 | case ARM::TAILJMPd: { |
186 | MCOperand MCOp; |
187 | Inst.setOpcode(ARM::Bcc); |
188 | // Operand: target |
189 | lowerOperand(MO: MI->getOperand(i: 0), MCOp); |
190 | Inst.addOperand(Op: MCOp); |
191 | // Operand: p |
192 | Inst.addOperand(Op: MCOperand::createImm(Val: 14)); |
193 | Inst.addOperand(Op: MCOperand::createReg(Reg: 0)); |
194 | break; |
195 | } |
196 | case ARM::TAILJMPr: { |
197 | MCOperand MCOp; |
198 | Inst.setOpcode(ARM::BX); |
199 | // Operand: dst |
200 | lowerOperand(MO: MI->getOperand(i: 0), MCOp); |
201 | Inst.addOperand(Op: MCOp); |
202 | break; |
203 | } |
204 | case ARM::TAILJMPr4: { |
205 | MCOperand MCOp; |
206 | Inst.setOpcode(ARM::MOVr); |
207 | // Operand: Rd |
208 | Inst.addOperand(Op: MCOperand::createReg(Reg: ARM::PC)); |
209 | // Operand: Rm |
210 | lowerOperand(MO: MI->getOperand(i: 0), MCOp); |
211 | Inst.addOperand(Op: MCOp); |
212 | // Operand: p |
213 | Inst.addOperand(Op: MCOperand::createImm(Val: 14)); |
214 | Inst.addOperand(Op: MCOperand::createReg(Reg: 0)); |
215 | // Operand: s |
216 | Inst.addOperand(Op: MCOperand::createReg(Reg: 0)); |
217 | break; |
218 | } |
219 | case ARM::UMLALv5: { |
220 | MCOperand MCOp; |
221 | Inst.setOpcode(ARM::UMLAL); |
222 | // Operand: RdLo |
223 | lowerOperand(MO: MI->getOperand(i: 0), MCOp); |
224 | Inst.addOperand(Op: MCOp); |
225 | // Operand: RdHi |
226 | lowerOperand(MO: MI->getOperand(i: 1), MCOp); |
227 | Inst.addOperand(Op: MCOp); |
228 | // Operand: Rn |
229 | lowerOperand(MO: MI->getOperand(i: 2), MCOp); |
230 | Inst.addOperand(Op: MCOp); |
231 | // Operand: Rm |
232 | lowerOperand(MO: MI->getOperand(i: 3), MCOp); |
233 | Inst.addOperand(Op: MCOp); |
234 | // Operand: RLo |
235 | lowerOperand(MO: MI->getOperand(i: 4), MCOp); |
236 | Inst.addOperand(Op: MCOp); |
237 | // Operand: RHi |
238 | lowerOperand(MO: MI->getOperand(i: 5), MCOp); |
239 | Inst.addOperand(Op: MCOp); |
240 | // Operand: p |
241 | lowerOperand(MO: MI->getOperand(i: 6), MCOp); |
242 | Inst.addOperand(Op: MCOp); |
243 | lowerOperand(MO: MI->getOperand(i: 7), MCOp); |
244 | Inst.addOperand(Op: MCOp); |
245 | // Operand: s |
246 | lowerOperand(MO: MI->getOperand(i: 8), MCOp); |
247 | Inst.addOperand(Op: MCOp); |
248 | break; |
249 | } |
250 | case ARM::UMULLv5: { |
251 | MCOperand MCOp; |
252 | Inst.setOpcode(ARM::UMULL); |
253 | // Operand: RdLo |
254 | lowerOperand(MO: MI->getOperand(i: 0), MCOp); |
255 | Inst.addOperand(Op: MCOp); |
256 | // Operand: RdHi |
257 | lowerOperand(MO: MI->getOperand(i: 1), MCOp); |
258 | Inst.addOperand(Op: MCOp); |
259 | // Operand: Rn |
260 | lowerOperand(MO: MI->getOperand(i: 2), MCOp); |
261 | Inst.addOperand(Op: MCOp); |
262 | // Operand: Rm |
263 | lowerOperand(MO: MI->getOperand(i: 3), MCOp); |
264 | Inst.addOperand(Op: MCOp); |
265 | // Operand: p |
266 | lowerOperand(MO: MI->getOperand(i: 4), MCOp); |
267 | Inst.addOperand(Op: MCOp); |
268 | lowerOperand(MO: MI->getOperand(i: 5), MCOp); |
269 | Inst.addOperand(Op: MCOp); |
270 | // Operand: s |
271 | lowerOperand(MO: MI->getOperand(i: 6), MCOp); |
272 | Inst.addOperand(Op: MCOp); |
273 | break; |
274 | } |
275 | case ARM::VMOVD0: { |
276 | MCOperand MCOp; |
277 | Inst.setOpcode(ARM::VMOVv2i32); |
278 | // Operand: Vd |
279 | lowerOperand(MO: MI->getOperand(i: 0), MCOp); |
280 | Inst.addOperand(Op: MCOp); |
281 | // Operand: SIMM |
282 | Inst.addOperand(Op: MCOperand::createImm(Val: 0)); |
283 | // Operand: p |
284 | Inst.addOperand(Op: MCOperand::createImm(Val: 14)); |
285 | Inst.addOperand(Op: MCOperand::createReg(Reg: 0)); |
286 | break; |
287 | } |
288 | case ARM::VMOVQ0: { |
289 | MCOperand MCOp; |
290 | Inst.setOpcode(ARM::VMOVv4i32); |
291 | // Operand: Vd |
292 | lowerOperand(MO: MI->getOperand(i: 0), MCOp); |
293 | Inst.addOperand(Op: MCOp); |
294 | // Operand: SIMM |
295 | Inst.addOperand(Op: MCOperand::createImm(Val: 0)); |
296 | // Operand: p |
297 | Inst.addOperand(Op: MCOperand::createImm(Val: 14)); |
298 | Inst.addOperand(Op: MCOperand::createReg(Reg: 0)); |
299 | break; |
300 | } |
301 | case ARM::t2LDMIA_RET: { |
302 | MCOperand MCOp; |
303 | Inst.setOpcode(ARM::t2LDMIA_UPD); |
304 | // Operand: wb |
305 | lowerOperand(MO: MI->getOperand(i: 0), MCOp); |
306 | Inst.addOperand(Op: MCOp); |
307 | // Operand: Rn |
308 | lowerOperand(MO: MI->getOperand(i: 1), MCOp); |
309 | Inst.addOperand(Op: MCOp); |
310 | // Operand: p |
311 | lowerOperand(MO: MI->getOperand(i: 2), MCOp); |
312 | Inst.addOperand(Op: MCOp); |
313 | lowerOperand(MO: MI->getOperand(i: 3), MCOp); |
314 | Inst.addOperand(Op: MCOp); |
315 | // Operand: regs |
316 | lowerOperand(MO: MI->getOperand(i: 4), MCOp); |
317 | Inst.addOperand(Op: MCOp); |
318 | // variable_ops |
319 | for (unsigned i = 5, e = MI->getNumOperands(); i != e; ++i) |
320 | if (lowerOperand(MO: MI->getOperand(i), MCOp)) |
321 | Inst.addOperand(Op: MCOp); |
322 | break; |
323 | } |
324 | case ARM::tBLXr_noip: { |
325 | MCOperand MCOp; |
326 | Inst.setOpcode(ARM::tBLXr); |
327 | // Operand: p |
328 | lowerOperand(MO: MI->getOperand(i: 0), MCOp); |
329 | Inst.addOperand(Op: MCOp); |
330 | lowerOperand(MO: MI->getOperand(i: 1), MCOp); |
331 | Inst.addOperand(Op: MCOp); |
332 | // Operand: func |
333 | lowerOperand(MO: MI->getOperand(i: 2), MCOp); |
334 | Inst.addOperand(Op: MCOp); |
335 | break; |
336 | } |
337 | case ARM::tBRIND: { |
338 | MCOperand MCOp; |
339 | Inst.setOpcode(ARM::tMOVr); |
340 | // Operand: Rd |
341 | Inst.addOperand(Op: MCOperand::createReg(Reg: ARM::PC)); |
342 | // Operand: Rm |
343 | lowerOperand(MO: MI->getOperand(i: 0), MCOp); |
344 | Inst.addOperand(Op: MCOp); |
345 | // Operand: p |
346 | lowerOperand(MO: MI->getOperand(i: 1), MCOp); |
347 | Inst.addOperand(Op: MCOp); |
348 | lowerOperand(MO: MI->getOperand(i: 2), MCOp); |
349 | Inst.addOperand(Op: MCOp); |
350 | break; |
351 | } |
352 | case ARM::tBX_RET: { |
353 | MCOperand MCOp; |
354 | Inst.setOpcode(ARM::tBX); |
355 | // Operand: Rm |
356 | Inst.addOperand(Op: MCOperand::createReg(Reg: ARM::LR)); |
357 | // Operand: p |
358 | lowerOperand(MO: MI->getOperand(i: 0), MCOp); |
359 | Inst.addOperand(Op: MCOp); |
360 | lowerOperand(MO: MI->getOperand(i: 1), MCOp); |
361 | Inst.addOperand(Op: MCOp); |
362 | break; |
363 | } |
364 | case ARM::tBX_RET_vararg: { |
365 | MCOperand MCOp; |
366 | Inst.setOpcode(ARM::tBX); |
367 | // Operand: Rm |
368 | lowerOperand(MO: MI->getOperand(i: 0), MCOp); |
369 | Inst.addOperand(Op: MCOp); |
370 | // Operand: p |
371 | lowerOperand(MO: MI->getOperand(i: 1), MCOp); |
372 | Inst.addOperand(Op: MCOp); |
373 | lowerOperand(MO: MI->getOperand(i: 2), MCOp); |
374 | Inst.addOperand(Op: MCOp); |
375 | break; |
376 | } |
377 | case ARM::tBfar: { |
378 | MCOperand MCOp; |
379 | Inst.setOpcode(ARM::tBL); |
380 | // Operand: p |
381 | lowerOperand(MO: MI->getOperand(i: 1), MCOp); |
382 | Inst.addOperand(Op: MCOp); |
383 | lowerOperand(MO: MI->getOperand(i: 2), MCOp); |
384 | Inst.addOperand(Op: MCOp); |
385 | // Operand: func |
386 | lowerOperand(MO: MI->getOperand(i: 0), MCOp); |
387 | Inst.addOperand(Op: MCOp); |
388 | break; |
389 | } |
390 | case ARM::tLDMIA_UPD: { |
391 | MCOperand MCOp; |
392 | Inst.setOpcode(ARM::tLDMIA); |
393 | // Operand: Rn |
394 | lowerOperand(MO: MI->getOperand(i: 1), MCOp); |
395 | Inst.addOperand(Op: MCOp); |
396 | // Operand: p |
397 | lowerOperand(MO: MI->getOperand(i: 2), MCOp); |
398 | Inst.addOperand(Op: MCOp); |
399 | lowerOperand(MO: MI->getOperand(i: 3), MCOp); |
400 | Inst.addOperand(Op: MCOp); |
401 | // Operand: regs |
402 | lowerOperand(MO: MI->getOperand(i: 4), MCOp); |
403 | Inst.addOperand(Op: MCOp); |
404 | // variable_ops |
405 | for (unsigned i = 5, e = MI->getNumOperands(); i != e; ++i) |
406 | if (lowerOperand(MO: MI->getOperand(i), MCOp)) |
407 | Inst.addOperand(Op: MCOp); |
408 | break; |
409 | } |
410 | case ARM::tPOP_RET: { |
411 | MCOperand MCOp; |
412 | Inst.setOpcode(ARM::tPOP); |
413 | // Operand: p |
414 | lowerOperand(MO: MI->getOperand(i: 0), MCOp); |
415 | Inst.addOperand(Op: MCOp); |
416 | lowerOperand(MO: MI->getOperand(i: 1), MCOp); |
417 | Inst.addOperand(Op: MCOp); |
418 | // Operand: regs |
419 | lowerOperand(MO: MI->getOperand(i: 2), MCOp); |
420 | Inst.addOperand(Op: MCOp); |
421 | // variable_ops |
422 | for (unsigned i = 3, e = MI->getNumOperands(); i != e; ++i) |
423 | if (lowerOperand(MO: MI->getOperand(i), MCOp)) |
424 | Inst.addOperand(Op: MCOp); |
425 | break; |
426 | } |
427 | case ARM::tTAILJMPd: { |
428 | MCOperand MCOp; |
429 | Inst.setOpcode(ARM::t2B); |
430 | // Operand: target |
431 | lowerOperand(MO: MI->getOperand(i: 0), MCOp); |
432 | Inst.addOperand(Op: MCOp); |
433 | // Operand: p |
434 | lowerOperand(MO: MI->getOperand(i: 1), MCOp); |
435 | Inst.addOperand(Op: MCOp); |
436 | lowerOperand(MO: MI->getOperand(i: 2), MCOp); |
437 | Inst.addOperand(Op: MCOp); |
438 | break; |
439 | } |
440 | case ARM::tTAILJMPdND: { |
441 | MCOperand MCOp; |
442 | Inst.setOpcode(ARM::tB); |
443 | // Operand: target |
444 | lowerOperand(MO: MI->getOperand(i: 0), MCOp); |
445 | Inst.addOperand(Op: MCOp); |
446 | // Operand: p |
447 | lowerOperand(MO: MI->getOperand(i: 1), MCOp); |
448 | Inst.addOperand(Op: MCOp); |
449 | lowerOperand(MO: MI->getOperand(i: 2), MCOp); |
450 | Inst.addOperand(Op: MCOp); |
451 | break; |
452 | } |
453 | case ARM::tTAILJMPr: { |
454 | MCOperand MCOp; |
455 | Inst.setOpcode(ARM::tBX); |
456 | // Operand: Rm |
457 | lowerOperand(MO: MI->getOperand(i: 0), MCOp); |
458 | Inst.addOperand(Op: MCOp); |
459 | // Operand: p |
460 | Inst.addOperand(Op: MCOperand::createImm(Val: 14)); |
461 | Inst.addOperand(Op: MCOperand::createReg(Reg: 0)); |
462 | break; |
463 | } |
464 | } |
465 | return true; |
466 | } |
467 | |
468 | |