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 | emitPseudoExpansionLowering(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 | |