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 ARMAsmPrinter::
10lowerPseudoInstExpansion(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::t2BXAUT_RET: {
302 MCOperand MCOp;
303 Inst.setOpcode(ARM::t2BXAUT);
304 // Operand: p
305 lowerOperand(MO: MI->getOperand(i: 0), MCOp);
306 Inst.addOperand(Op: MCOp);
307 lowerOperand(MO: MI->getOperand(i: 1), MCOp);
308 Inst.addOperand(Op: MCOp);
309 // Operand: Ra
310 Inst.addOperand(Op: MCOperand::createReg(Reg: ARM::R12));
311 // Operand: Rn
312 Inst.addOperand(Op: MCOperand::createReg(Reg: ARM::LR));
313 // Operand: Rm
314 Inst.addOperand(Op: MCOperand::createReg(Reg: ARM::SP));
315 break;
316 }
317 case ARM::t2LDMIA_RET: {
318 MCOperand MCOp;
319 Inst.setOpcode(ARM::t2LDMIA_UPD);
320 // Operand: wb
321 lowerOperand(MO: MI->getOperand(i: 0), MCOp);
322 Inst.addOperand(Op: MCOp);
323 // Operand: Rn
324 lowerOperand(MO: MI->getOperand(i: 1), MCOp);
325 Inst.addOperand(Op: MCOp);
326 // Operand: p
327 lowerOperand(MO: MI->getOperand(i: 2), MCOp);
328 Inst.addOperand(Op: MCOp);
329 lowerOperand(MO: MI->getOperand(i: 3), MCOp);
330 Inst.addOperand(Op: MCOp);
331 // Operand: regs
332 lowerOperand(MO: MI->getOperand(i: 4), MCOp);
333 Inst.addOperand(Op: MCOp);
334 // variable_ops
335 for (unsigned i = 5, e = MI->getNumOperands(); i != e; ++i)
336 if (lowerOperand(MO: MI->getOperand(i), MCOp))
337 Inst.addOperand(Op: MCOp);
338 break;
339 }
340 case ARM::tBLXr_noip: {
341 MCOperand MCOp;
342 Inst.setOpcode(ARM::tBLXr);
343 // Operand: p
344 lowerOperand(MO: MI->getOperand(i: 0), MCOp);
345 Inst.addOperand(Op: MCOp);
346 lowerOperand(MO: MI->getOperand(i: 1), MCOp);
347 Inst.addOperand(Op: MCOp);
348 // Operand: func
349 lowerOperand(MO: MI->getOperand(i: 2), MCOp);
350 Inst.addOperand(Op: MCOp);
351 break;
352 }
353 case ARM::tBRIND: {
354 MCOperand MCOp;
355 Inst.setOpcode(ARM::tMOVr);
356 // Operand: Rd
357 Inst.addOperand(Op: MCOperand::createReg(Reg: ARM::PC));
358 // Operand: Rm
359 lowerOperand(MO: MI->getOperand(i: 0), MCOp);
360 Inst.addOperand(Op: MCOp);
361 // Operand: p
362 lowerOperand(MO: MI->getOperand(i: 1), MCOp);
363 Inst.addOperand(Op: MCOp);
364 lowerOperand(MO: MI->getOperand(i: 2), MCOp);
365 Inst.addOperand(Op: MCOp);
366 break;
367 }
368 case ARM::tBX_RET: {
369 MCOperand MCOp;
370 Inst.setOpcode(ARM::tBX);
371 // Operand: Rm
372 Inst.addOperand(Op: MCOperand::createReg(Reg: ARM::LR));
373 // Operand: p
374 lowerOperand(MO: MI->getOperand(i: 0), MCOp);
375 Inst.addOperand(Op: MCOp);
376 lowerOperand(MO: MI->getOperand(i: 1), MCOp);
377 Inst.addOperand(Op: MCOp);
378 break;
379 }
380 case ARM::tBX_RET_vararg: {
381 MCOperand MCOp;
382 Inst.setOpcode(ARM::tBX);
383 // Operand: Rm
384 lowerOperand(MO: MI->getOperand(i: 0), MCOp);
385 Inst.addOperand(Op: MCOp);
386 // Operand: p
387 lowerOperand(MO: MI->getOperand(i: 1), MCOp);
388 Inst.addOperand(Op: MCOp);
389 lowerOperand(MO: MI->getOperand(i: 2), MCOp);
390 Inst.addOperand(Op: MCOp);
391 break;
392 }
393 case ARM::tBfar: {
394 MCOperand MCOp;
395 Inst.setOpcode(ARM::tBL);
396 // Operand: p
397 lowerOperand(MO: MI->getOperand(i: 1), MCOp);
398 Inst.addOperand(Op: MCOp);
399 lowerOperand(MO: MI->getOperand(i: 2), MCOp);
400 Inst.addOperand(Op: MCOp);
401 // Operand: func
402 lowerOperand(MO: MI->getOperand(i: 0), MCOp);
403 Inst.addOperand(Op: MCOp);
404 break;
405 }
406 case ARM::tLDMIA_UPD: {
407 MCOperand MCOp;
408 Inst.setOpcode(ARM::tLDMIA);
409 // Operand: Rn
410 lowerOperand(MO: MI->getOperand(i: 1), MCOp);
411 Inst.addOperand(Op: MCOp);
412 // Operand: p
413 lowerOperand(MO: MI->getOperand(i: 2), MCOp);
414 Inst.addOperand(Op: MCOp);
415 lowerOperand(MO: MI->getOperand(i: 3), MCOp);
416 Inst.addOperand(Op: MCOp);
417 // Operand: regs
418 lowerOperand(MO: MI->getOperand(i: 4), MCOp);
419 Inst.addOperand(Op: MCOp);
420 // variable_ops
421 for (unsigned i = 5, e = MI->getNumOperands(); i != e; ++i)
422 if (lowerOperand(MO: MI->getOperand(i), MCOp))
423 Inst.addOperand(Op: MCOp);
424 break;
425 }
426 case ARM::tPOP_RET: {
427 MCOperand MCOp;
428 Inst.setOpcode(ARM::tPOP);
429 // Operand: p
430 lowerOperand(MO: MI->getOperand(i: 0), MCOp);
431 Inst.addOperand(Op: MCOp);
432 lowerOperand(MO: MI->getOperand(i: 1), MCOp);
433 Inst.addOperand(Op: MCOp);
434 // Operand: regs
435 lowerOperand(MO: MI->getOperand(i: 2), MCOp);
436 Inst.addOperand(Op: MCOp);
437 // variable_ops
438 for (unsigned i = 3, e = MI->getNumOperands(); i != e; ++i)
439 if (lowerOperand(MO: MI->getOperand(i), MCOp))
440 Inst.addOperand(Op: MCOp);
441 break;
442 }
443 case ARM::tTAILJMPd: {
444 MCOperand MCOp;
445 Inst.setOpcode(ARM::t2B);
446 // Operand: target
447 lowerOperand(MO: MI->getOperand(i: 0), MCOp);
448 Inst.addOperand(Op: MCOp);
449 // Operand: p
450 lowerOperand(MO: MI->getOperand(i: 1), MCOp);
451 Inst.addOperand(Op: MCOp);
452 lowerOperand(MO: MI->getOperand(i: 2), MCOp);
453 Inst.addOperand(Op: MCOp);
454 break;
455 }
456 case ARM::tTAILJMPdND: {
457 MCOperand MCOp;
458 Inst.setOpcode(ARM::tB);
459 // Operand: target
460 lowerOperand(MO: MI->getOperand(i: 0), MCOp);
461 Inst.addOperand(Op: MCOp);
462 // Operand: p
463 lowerOperand(MO: MI->getOperand(i: 1), MCOp);
464 Inst.addOperand(Op: MCOp);
465 lowerOperand(MO: MI->getOperand(i: 2), MCOp);
466 Inst.addOperand(Op: MCOp);
467 break;
468 }
469 case ARM::tTAILJMPr: {
470 MCOperand MCOp;
471 Inst.setOpcode(ARM::tBX);
472 // Operand: Rm
473 lowerOperand(MO: MI->getOperand(i: 0), MCOp);
474 Inst.addOperand(Op: MCOp);
475 // Operand: p
476 Inst.addOperand(Op: MCOperand::createImm(Val: 14));
477 Inst.addOperand(Op: MCOperand::createReg(Reg: 0));
478 break;
479 }
480 }
481 return true;
482}
483
484