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