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 |