OLD | NEW |
1 //===- ARMInstrInfo.td - Target Description for ARM Target -*- tablegen -*-===// | 1 //===- ARMInstrInfo.td - Target Description for ARM Target -*- tablegen -*-===// |
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 file describes the ARM instructions in TableGen format. | 10 // This file describes the ARM instructions in TableGen format. |
(...skipping 568 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
579 // Control Flow Instructions. | 579 // Control Flow Instructions. |
580 // | 580 // |
581 | 581 |
582 let isReturn = 1, isTerminator = 1 in | 582 let isReturn = 1, isTerminator = 1 in |
583 def BX_RET : AI<(outs), (ins), BrMiscFrm, "bx", " lr", [(ARMretflag)]> { | 583 def BX_RET : AI<(outs), (ins), BrMiscFrm, "bx", " lr", [(ARMretflag)]> { |
584 let Inst{7-4} = 0b0001; | 584 let Inst{7-4} = 0b0001; |
585 let Inst{19-8} = 0b111111111111; | 585 let Inst{19-8} = 0b111111111111; |
586 let Inst{27-20} = 0b00010010; | 586 let Inst{27-20} = 0b00010010; |
587 } | 587 } |
588 | 588 |
| 589 // Indirect branches |
| 590 let isBranch = 1, isTerminator = 1, isBarrier = 1, isIndirectBranch = 1 in { |
| 591 def BRIND : AXI<(outs), (ins GPR:$dst), BrMiscFrm, "bx $dst", |
| 592 [(brind GPR:$dst)]> { |
| 593 let Inst{7-4} = 0b0001; |
| 594 let Inst{19-8} = 0b111111111111; |
| 595 let Inst{27-20} = 0b00010010; |
| 596 } |
| 597 } |
| 598 |
589 // FIXME: remove when we have a way to marking a MI with these properties. | 599 // FIXME: remove when we have a way to marking a MI with these properties. |
590 // FIXME: $dst1 should be a def. But the extra ops must be in the end of the | 600 // FIXME: $dst1 should be a def. But the extra ops must be in the end of the |
591 // operand list. | 601 // operand list. |
592 // FIXME: Should pc be an implicit operand like PICADD, etc? | 602 // FIXME: Should pc be an implicit operand like PICADD, etc? |
593 let isReturn = 1, isTerminator = 1, mayLoad = 1 in | 603 let isReturn = 1, isTerminator = 1, mayLoad = 1 in |
594 def LDM_RET : AXI4ld<(outs), | 604 def LDM_RET : AXI4ld<(outs), |
595 (ins addrmode4:$addr, pred:$p, reglist:$dst1, variable_ops), | 605 (ins addrmode4:$addr, pred:$p, reglist:$dst1, variable_ops), |
596 LdStMulFrm, "ldm${p}${addr:submode} $addr, $dst1", | 606 LdStMulFrm, "ldm${p}${addr:submode} $addr, $dst1", |
597 []>; | 607 []>; |
598 | 608 |
(...skipping 908 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1507 // Floating Point Support | 1517 // Floating Point Support |
1508 // | 1518 // |
1509 | 1519 |
1510 include "ARMInstrVFP.td" | 1520 include "ARMInstrVFP.td" |
1511 | 1521 |
1512 //===----------------------------------------------------------------------===// | 1522 //===----------------------------------------------------------------------===// |
1513 // Advanced SIMD (NEON) Support | 1523 // Advanced SIMD (NEON) Support |
1514 // | 1524 // |
1515 | 1525 |
1516 include "ARMInstrNEON.td" | 1526 include "ARMInstrNEON.td" |
OLD | NEW |