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::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