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