| OLD | NEW |
| 1 //===- subzero/src/IceAssemblerARM32.h - Assembler for ARM32 ----*- C++ -*-===// | 1 //===- subzero/src/IceAssemblerARM32.h - Assembler for ARM32 ----*- C++ -*-===// |
| 2 // | 2 // |
| 3 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 3 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
| 4 // for details. All rights reserved. Use of this source code is governed by a | 4 // for details. All rights reserved. Use of this source code is governed by a |
| 5 // BSD-style license that can be found in the LICENSE file. | 5 // BSD-style license that can be found in the LICENSE file. |
| 6 // | 6 // |
| 7 // Modified by the Subzero authors. | 7 // Modified by the Subzero authors. |
| 8 // | 8 // |
| 9 //===----------------------------------------------------------------------===// | 9 //===----------------------------------------------------------------------===// |
| 10 // | 10 // |
| (...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 311 | 311 |
| 312 // Implements uxtb/uxth depending on type of OpSrc0. | 312 // Implements uxtb/uxth depending on type of OpSrc0. |
| 313 void uxt(const Operand *OpRd, const Operand *OpSrc0, CondARM32::Cond Cond); | 313 void uxt(const Operand *OpRd, const Operand *OpSrc0, CondARM32::Cond Cond); |
| 314 | 314 |
| 315 void vaddd(const Operand *OpDd, const Operand *OpDn, const Operand *OpDm, | 315 void vaddd(const Operand *OpDd, const Operand *OpDn, const Operand *OpDm, |
| 316 CondARM32::Cond Cond); | 316 CondARM32::Cond Cond); |
| 317 | 317 |
| 318 void vadds(const Operand *OpSd, const Operand *OpSn, const Operand *OpSm, | 318 void vadds(const Operand *OpSd, const Operand *OpSn, const Operand *OpSm, |
| 319 CondARM32::Cond Cond); | 319 CondARM32::Cond Cond); |
| 320 | 320 |
| 321 // Integer vector add. |
| 322 void vaddqi(Type ElmtTy, const Operand *OpQd, const Operand *OpQm, |
| 323 const Operand *OpQn); |
| 324 |
| 325 // Float vector add. |
| 326 void vaddqf(const Operand *OpQd, const Operand *OpQm, const Operand *OpQn); |
| 327 |
| 321 void vcmpd(const Operand *OpDd, const Operand *OpDm, CondARM32::Cond cond); | 328 void vcmpd(const Operand *OpDd, const Operand *OpDm, CondARM32::Cond cond); |
| 322 | 329 |
| 323 // Second argument of compare is zero (+0.0). | 330 // Second argument of compare is zero (+0.0). |
| 324 void vcmpdz(const Operand *OpDd, CondARM32::Cond cond); | 331 void vcmpdz(const Operand *OpDd, CondARM32::Cond cond); |
| 325 | 332 |
| 326 void vcmps(const Operand *OpSd, const Operand *OpSm, CondARM32::Cond cond); | 333 void vcmps(const Operand *OpSd, const Operand *OpSm, CondARM32::Cond cond); |
| 327 | 334 |
| 328 // Second argument of compare is zero (+0.0). | 335 // Second argument of compare is zero (+0.0). |
| 329 void vcmpsz(const Operand *OpSd, CondARM32::Cond cond); | 336 void vcmpsz(const Operand *OpSd, CondARM32::Cond cond); |
| 330 | 337 |
| (...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 585 const OperandARM32::ShiftKind Shift, const Operand *OpRd, | 592 const OperandARM32::ShiftKind Shift, const Operand *OpRd, |
| 586 const Operand *OpRm, const Operand *OpSrc1, | 593 const Operand *OpRm, const Operand *OpSrc1, |
| 587 const bool SetFlags, const char *InstName); | 594 const bool SetFlags, const char *InstName); |
| 588 | 595 |
| 589 // Implements various forms of signed/unsigned extend value, using pattern | 596 // Implements various forms of signed/unsigned extend value, using pattern |
| 590 // ccccxxxxxxxxnnnnddddrr000111mmmm where cccc=Cond, xxxxxxxx<<20=Opcode, | 597 // ccccxxxxxxxxnnnnddddrr000111mmmm where cccc=Cond, xxxxxxxx<<20=Opcode, |
| 591 // nnnn=Rn, dddd=Rd, rr=Rotation, and mmmm=Rm. | 598 // nnnn=Rn, dddd=Rd, rr=Rotation, and mmmm=Rm. |
| 592 void emitSignExtend(CondARM32::Cond, IValueT Opcode, const Operand *OpRd, | 599 void emitSignExtend(CondARM32::Cond, IValueT Opcode, const Operand *OpRd, |
| 593 const Operand *OpSrc0, const char *InstName); | 600 const Operand *OpSrc0, const char *InstName); |
| 594 | 601 |
| 602 // Implements various forms of vector (SIMD) operations. Implements pattern |
| 603 // 111100100Dssnnnndddn0000NQM0mmmm where ss=encodeElmtType(ElmtTy), Dddd=Dd, |
| 604 // Nnnn=Dn, Mmmm=Dm, Q=UseQRegs, and Opcode is unioned into the pattern. |
| 605 void emitSIMD(IValueT Opcode, Type ElmtTy, IValueT Dd, IValueT Dn, IValueT Dm, |
| 606 bool UseQRegs); |
| 607 |
| 608 // Implements various integer forms of vector (SIMD) operations using Q |
| 609 // registers. Implements pattern 111100100Dssnnn0ddd00000N1M0mmm0 where |
| 610 // ss=encodeElmtType(ElmtTy), Dddd=Qd, Nnnn=Qn, Mmmm=Qm, and Opcode is unioned |
| 611 // into the pattern. |
| 612 void emitSIMDqqq(IValueT Opcode, Type ElmtTy, const Operand *OpQd, |
| 613 const Operand *OpQn, const Operand *OpQm, |
| 614 const char *OpcodeName); |
| 615 |
| 595 // Pattern cccctttxxxxnnnn0000iiiiiiiiiiii where cccc=Cond, nnnn=Rn, | 616 // Pattern cccctttxxxxnnnn0000iiiiiiiiiiii where cccc=Cond, nnnn=Rn, |
| 596 // ttt=Instruction type (derived from OpSrc1), iiiiiiiiiiii is derived from | 617 // ttt=Instruction type (derived from OpSrc1), iiiiiiiiiiii is derived from |
| 597 // OpSrc1, and xxxx=Opcode. | 618 // OpSrc1, and xxxx=Opcode. |
| 598 void emitCompareOp(CondARM32::Cond Cond, IValueT Opcode, const Operand *OpRn, | 619 void emitCompareOp(CondARM32::Cond Cond, IValueT Opcode, const Operand *OpRn, |
| 599 const Operand *OpSrc1, const char *CmpName); | 620 const Operand *OpSrc1, const char *CmpName); |
| 600 | 621 |
| 601 void emitBranch(Label *L, CondARM32::Cond, bool Link); | 622 void emitBranch(Label *L, CondARM32::Cond, bool Link); |
| 602 | 623 |
| 603 // Encodes the given Offset into the branch instruction Inst. | 624 // Encodes the given Offset into the branch instruction Inst. |
| 604 IValueT encodeBranchOffset(IOffsetT Offset, IValueT Inst); | 625 IValueT encodeBranchOffset(IOffsetT Offset, IValueT Inst); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 626 | 647 |
| 627 void emitVFPsss(CondARM32::Cond Cond, IValueT Opcode, const Operand *OpSd, | 648 void emitVFPsss(CondARM32::Cond Cond, IValueT Opcode, const Operand *OpSd, |
| 628 const Operand *OpSn, const Operand *OpSm, | 649 const Operand *OpSn, const Operand *OpSm, |
| 629 const char *InstName); | 650 const char *InstName); |
| 630 }; | 651 }; |
| 631 | 652 |
| 632 } // end of namespace ARM32 | 653 } // end of namespace ARM32 |
| 633 } // end of namespace Ice | 654 } // end of namespace Ice |
| 634 | 655 |
| 635 #endif // SUBZERO_SRC_ICEASSEMBLERARM32_H | 656 #endif // SUBZERO_SRC_ICEASSEMBLERARM32_H |
| OLD | NEW |