OLD | NEW |
1 //===-- ARMInstPrinter.cpp - Convert ARM MCInst to assembly syntax --------===// | 1 //===-- ARMInstPrinter.cpp - Convert ARM MCInst to assembly syntax --------===// |
2 // | 2 // |
3 // The LLVM Compiler Infrastructure | 3 // The LLVM Compiler Infrastructure |
4 // | 4 // |
5 // This file is distributed under the University of Illinois Open Source | 5 // This file is distributed under the University of Illinois Open Source |
6 // License. See LICENSE.TXT for details. | 6 // License. See LICENSE.TXT for details. |
7 // | 7 // |
8 //===----------------------------------------------------------------------===// | 8 //===----------------------------------------------------------------------===// |
9 // | 9 // |
10 // This class prints an ARM MCInst to a .s file. | 10 // This class prints an ARM MCInst to a .s file. |
(...skipping 291 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
302 (getAvailableFeatures() & ARM::FeatureVirtualization)) { | 302 (getAvailableFeatures() & ARM::FeatureVirtualization)) { |
303 O << "\teret"; | 303 O << "\teret"; |
304 printPredicateOperand(MI, 1, O); | 304 printPredicateOperand(MI, 1, O); |
305 printAnnotation(O, Annot); | 305 printAnnotation(O, Annot); |
306 return; | 306 return; |
307 } | 307 } |
308 break; | 308 break; |
309 } | 309 } |
310 } | 310 } |
311 | 311 |
| 312 // @LOCALMOD-BEGIN |
| 313 // TODO(pdox): Kill this code once we switch to MC object emission |
| 314 const char *SFIInst = NULL; |
| 315 unsigned SFIEmitDest = ~0; |
| 316 unsigned SFIEmitPred = ~0; |
| 317 switch (Opcode) { |
| 318 case ARM::SFI_NOP_IF_AT_BUNDLE_END : |
| 319 SFIInst = "sfi_nop_if_at_bundle_end"; |
| 320 SFIEmitDest = ~0; |
| 321 SFIEmitPred = ~0; |
| 322 break; |
| 323 case ARM::SFI_GUARD_LOADSTORE : |
| 324 SFIInst = "sfi_load_store_preamble"; |
| 325 SFIEmitDest = 0; |
| 326 SFIEmitPred = 2; |
| 327 break; |
| 328 case ARM::SFI_GUARD_INDIRECT_CALL: |
| 329 SFIInst = "sfi_indirect_call_preamble"; |
| 330 SFIEmitDest = 0; |
| 331 SFIEmitPred = 2; |
| 332 break; |
| 333 case ARM::SFI_GUARD_INDIRECT_JMP : |
| 334 SFIInst = "sfi_indirect_jump_preamble"; |
| 335 SFIEmitDest = 0; |
| 336 SFIEmitPred = 2; |
| 337 break; |
| 338 case ARM::SFI_DATA_MASK : |
| 339 SFIInst = "sfi_data_mask"; |
| 340 SFIEmitDest = 0; |
| 341 SFIEmitPred = 2; |
| 342 break; |
| 343 case ARM::SFI_GUARD_LOADSTORE_TST: |
| 344 SFIInst = "sfi_cload_store_preamble"; |
| 345 SFIEmitDest = 0; |
| 346 SFIEmitPred = ~0; |
| 347 break; |
| 348 case ARM::SFI_GUARD_CALL : |
| 349 SFIInst = "sfi_call_preamble"; |
| 350 SFIEmitDest = ~0; |
| 351 SFIEmitPred = 0; |
| 352 break; |
| 353 case ARM::SFI_GUARD_RETURN : |
| 354 SFIInst = "sfi_return_preamble lr,"; |
| 355 SFIEmitDest = ~0; |
| 356 SFIEmitPred = 0; |
| 357 break; |
| 358 } |
| 359 if (SFIInst) { |
| 360 O << '\t' << SFIInst; |
| 361 if (SFIEmitDest != (unsigned)~0) { |
| 362 O << ' '; |
| 363 printOperand(MI, SFIEmitDest, O); |
| 364 } |
| 365 if (SFIEmitDest != (unsigned)~0 && SFIEmitPred != (unsigned)~0) { |
| 366 O << ','; |
| 367 } |
| 368 if (SFIEmitPred != (unsigned)~0) { |
| 369 O << ' '; |
| 370 printPredicateOperand(MI, SFIEmitPred, O); |
| 371 } |
| 372 O << '\n'; |
| 373 return; |
| 374 } |
| 375 // @LOCALMOD-END |
| 376 |
312 printInstruction(MI, O); | 377 printInstruction(MI, O); |
313 printAnnotation(O, Annot); | 378 printAnnotation(O, Annot); |
314 } | 379 } |
315 | 380 |
316 void ARMInstPrinter::printOperand(const MCInst *MI, unsigned OpNo, | 381 void ARMInstPrinter::printOperand(const MCInst *MI, unsigned OpNo, |
317 raw_ostream &O) { | 382 raw_ostream &O) { |
318 const MCOperand &Op = MI->getOperand(OpNo); | 383 const MCOperand &Op = MI->getOperand(OpNo); |
319 if (Op.isReg()) { | 384 if (Op.isReg()) { |
320 unsigned Reg = Op.getReg(); | 385 unsigned Reg = Op.getReg(); |
321 printRegName(O, Reg); | 386 printRegName(O, Reg); |
(...skipping 1199 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1521 O << "{"; | 1586 O << "{"; |
1522 printRegName(O, MI->getOperand(OpNum).getReg()); | 1587 printRegName(O, MI->getOperand(OpNum).getReg()); |
1523 O << ", "; | 1588 O << ", "; |
1524 printRegName(O, MI->getOperand(OpNum).getReg() + 2); | 1589 printRegName(O, MI->getOperand(OpNum).getReg() + 2); |
1525 O << ", "; | 1590 O << ", "; |
1526 printRegName(O, MI->getOperand(OpNum).getReg() + 4); | 1591 printRegName(O, MI->getOperand(OpNum).getReg() + 4); |
1527 O << ", "; | 1592 O << ", "; |
1528 printRegName(O, MI->getOperand(OpNum).getReg() + 6); | 1593 printRegName(O, MI->getOperand(OpNum).getReg() + 6); |
1529 O << "}"; | 1594 O << "}"; |
1530 } | 1595 } |
OLD | NEW |