| 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 363 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 374 | 374 |
| 375 // vcvt<c>.F32.U32 | 375 // vcvt<c>.F32.U32 |
| 376 void vcvtsu(const Operand *OpSd, const Operand *OpSm, CondARM32::Cond Cond); | 376 void vcvtsu(const Operand *OpSd, const Operand *OpSm, CondARM32::Cond Cond); |
| 377 | 377 |
| 378 // vcvt<c>.U32.F64 | 378 // vcvt<c>.U32.F64 |
| 379 void vcvtud(const Operand *OpSd, const Operand *OpDm, CondARM32::Cond Cond); | 379 void vcvtud(const Operand *OpSd, const Operand *OpDm, CondARM32::Cond Cond); |
| 380 | 380 |
| 381 // vcvt<c>.u32.f32 | 381 // vcvt<c>.u32.f32 |
| 382 void vcvtus(const Operand *OpSd, const Operand *OpSm, CondARM32::Cond Cond); | 382 void vcvtus(const Operand *OpSd, const Operand *OpSm, CondARM32::Cond Cond); |
| 383 | 383 |
| 384 void vcvtqsi(const Operand *OpQd, const Operand *OpQm); |
| 385 |
| 386 void vcvtqsu(const Operand *OpQd, const Operand *OpQm); |
| 387 |
| 388 void vcvtqis(const Operand *OpQd, const Operand *OpQm); |
| 389 |
| 390 void vcvtqus(const Operand *OpQd, const Operand *OpQm); |
| 391 |
| 384 void vdivd(const Operand *OpDd, const Operand *OpDn, const Operand *OpDm, | 392 void vdivd(const Operand *OpDd, const Operand *OpDn, const Operand *OpDm, |
| 385 CondARM32::Cond Cond); | 393 CondARM32::Cond Cond); |
| 386 | 394 |
| 387 void vdivs(const Operand *OpSd, const Operand *OpSn, const Operand *OpSm, | 395 void vdivs(const Operand *OpSd, const Operand *OpSn, const Operand *OpSm, |
| 388 CondARM32::Cond Cond); | 396 CondARM32::Cond Cond); |
| 389 | 397 |
| 390 void veord(const Operand *OpDd, const Operand *OpDn, const Operand *OpDm); | 398 void veord(const Operand *OpDd, const Operand *OpDn, const Operand *OpDm); |
| 391 | 399 |
| 392 void veorq(const Operand *OpQd, const Operand *OpQn, const Operand *OpQm); | 400 void veorq(const Operand *OpQd, const Operand *OpQn, const Operand *OpQm); |
| 393 | 401 |
| (...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 504 | 512 |
| 505 void vpush(const Variable *OpBaseReg, SizeT NumConsecRegs, | 513 void vpush(const Variable *OpBaseReg, SizeT NumConsecRegs, |
| 506 CondARM32::Cond Cond); | 514 CondARM32::Cond Cond); |
| 507 | 515 |
| 508 void vshlqi(Type ElmtTy, const Operand *OpQd, const Operand *OpQm, | 516 void vshlqi(Type ElmtTy, const Operand *OpQd, const Operand *OpQm, |
| 509 const Operand *OpQn); | 517 const Operand *OpQn); |
| 510 | 518 |
| 511 void vshlqu(Type ElmtTy, const Operand *OpQd, const Operand *OpQm, | 519 void vshlqu(Type ElmtTy, const Operand *OpQd, const Operand *OpQm, |
| 512 const Operand *OpQn); | 520 const Operand *OpQn); |
| 513 | 521 |
| 522 void vshlqc(Type ElmtTy, const Operand *OpQd, const Operand *OpQm, |
| 523 const ConstantInteger32 *OpQn); |
| 524 |
| 525 void vshrqic(Type ElmtTy, const Operand *OpQd, const Operand *OpQm, |
| 526 const ConstantInteger32 *OpQn); |
| 527 |
| 528 void vshrquc(Type ElmtTy, const Operand *OpQd, const Operand *OpQm, |
| 529 const ConstantInteger32 *OpQn); |
| 530 |
| 514 void vsqrtd(const Operand *OpDd, const Operand *OpDm, CondARM32::Cond Cond); | 531 void vsqrtd(const Operand *OpDd, const Operand *OpDm, CondARM32::Cond Cond); |
| 515 | 532 |
| 516 void vsqrts(const Operand *OpSd, const Operand *OpSm, CondARM32::Cond Cond); | 533 void vsqrts(const Operand *OpSd, const Operand *OpSm, CondARM32::Cond Cond); |
| 517 | 534 |
| 518 void vstrd(const Operand *OpDd, const Operand *OpAddress, | 535 void vstrd(const Operand *OpDd, const Operand *OpAddress, |
| 519 CondARM32::Cond Cond, const TargetInfo &TInfo); | 536 CondARM32::Cond Cond, const TargetInfo &TInfo); |
| 520 | 537 |
| 521 void vstrd(const Operand *OpDd, const Operand *OpAddress, | 538 void vstrd(const Operand *OpDd, const Operand *OpAddress, |
| 522 CondARM32::Cond Cond, const TargetLowering *Lowering) { | 539 CondARM32::Cond Cond, const TargetLowering *Lowering) { |
| 523 const TargetInfo TInfo(Lowering); | 540 const TargetInfo TInfo(Lowering); |
| (...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 732 void emitSIMDqqqBase(IValueT Opcode, const Operand *OpQd, const Operand *OpQn, | 749 void emitSIMDqqqBase(IValueT Opcode, const Operand *OpQd, const Operand *OpQn, |
| 733 const Operand *OpQm, bool IsFloatTy, | 750 const Operand *OpQm, bool IsFloatTy, |
| 734 const char *OpcodeName); | 751 const char *OpcodeName); |
| 735 | 752 |
| 736 // Same as emitSIMD above, except ElmtShift=20 and ElmtSize is computed from | 753 // Same as emitSIMD above, except ElmtShift=20 and ElmtSize is computed from |
| 737 // ElmtTy. | 754 // ElmtTy. |
| 738 void emitSIMDqqq(IValueT Opcode, Type ElmtTy, const Operand *OpQd, | 755 void emitSIMDqqq(IValueT Opcode, Type ElmtTy, const Operand *OpQd, |
| 739 const Operand *OpQn, const Operand *OpQm, | 756 const Operand *OpQn, const Operand *OpQm, |
| 740 const char *OpcodeName); | 757 const char *OpcodeName); |
| 741 | 758 |
| 759 // Implements various forms of vector (SIMD) shifts using Q registers. |
| 760 // Implements pattern 111100101Diiiiiidddd010101M1mmmm where Dddd=Qd, Mmmm=Qm, |
| 761 // iiiiii=Imm6, and Opcode is unioned into the pattern. |
| 762 void emitSIMDShiftqqc(IValueT Opcode, const Operand *OpQd, |
| 763 const Operand *OpQm, const IValueT Imm6, |
| 764 const char *OpcodeName); |
| 765 |
| 766 // Implements various forms of vector (SIMD) casts between (signed and |
| 767 // unsigned) integer and floating point types (f32). Implements pattern |
| 768 // 111100111D11ss11dddd011ooQM0mmmm where Dddd=Qd, Mmmm=Qm, 10=ss, op=00, 1=Q, |
| 769 // and Opcode is unioned into the pattern. |
| 770 void emitSIMDCvtqq(IValueT Opcode, const Operand *OpQd, const Operand *OpQm, |
| 771 const char *CvtName); |
| 772 |
| 742 // Pattern cccctttxxxxnnnn0000iiiiiiiiiiii where cccc=Cond, nnnn=Rn, | 773 // Pattern cccctttxxxxnnnn0000iiiiiiiiiiii where cccc=Cond, nnnn=Rn, |
| 743 // ttt=Instruction type (derived from OpSrc1), iiiiiiiiiiii is derived from | 774 // ttt=Instruction type (derived from OpSrc1), iiiiiiiiiiii is derived from |
| 744 // OpSrc1, and xxxx=Opcode. | 775 // OpSrc1, and xxxx=Opcode. |
| 745 void emitCompareOp(CondARM32::Cond Cond, IValueT Opcode, const Operand *OpRn, | 776 void emitCompareOp(CondARM32::Cond Cond, IValueT Opcode, const Operand *OpRn, |
| 746 const Operand *OpSrc1, const char *CmpName); | 777 const Operand *OpSrc1, const char *CmpName); |
| 747 | 778 |
| 748 void emitBranch(Label *L, CondARM32::Cond, bool Link); | 779 void emitBranch(Label *L, CondARM32::Cond, bool Link); |
| 749 | 780 |
| 750 // Returns the offset encoded in the branch instruction Inst. | 781 // Returns the offset encoded in the branch instruction Inst. |
| 751 static IOffsetT decodeBranchOffset(IValueT Inst); | 782 static IOffsetT decodeBranchOffset(IValueT Inst); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 770 | 801 |
| 771 void emitVFPsss(CondARM32::Cond Cond, IValueT Opcode, const Operand *OpSd, | 802 void emitVFPsss(CondARM32::Cond Cond, IValueT Opcode, const Operand *OpSd, |
| 772 const Operand *OpSn, const Operand *OpSm, | 803 const Operand *OpSn, const Operand *OpSm, |
| 773 const char *InstName); | 804 const char *InstName); |
| 774 }; | 805 }; |
| 775 | 806 |
| 776 } // end of namespace ARM32 | 807 } // end of namespace ARM32 |
| 777 } // end of namespace Ice | 808 } // end of namespace Ice |
| 778 | 809 |
| 779 #endif // SUBZERO_SRC_ICEASSEMBLERARM32_H | 810 #endif // SUBZERO_SRC_ICEASSEMBLERARM32_H |
| OLD | NEW |