OLD | NEW |
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 #ifndef VM_ASSEMBLER_ARM_H_ | 5 #ifndef VM_ASSEMBLER_ARM_H_ |
6 #define VM_ASSEMBLER_ARM_H_ | 6 #define VM_ASSEMBLER_ARM_H_ |
7 | 7 |
8 #ifndef VM_ASSEMBLER_H_ | 8 #ifndef VM_ASSEMBLER_H_ |
9 #error Do not include assembler_arm.h directly; use assembler.h instead. | 9 #error Do not include assembler_arm.h directly; use assembler.h instead. |
10 #endif | 10 #endif |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
61 friend class Assembler; | 61 friend class Assembler; |
62 DISALLOW_COPY_AND_ASSIGN(Label); | 62 DISALLOW_COPY_AND_ASSIGN(Label); |
63 }; | 63 }; |
64 | 64 |
65 | 65 |
66 class CPUFeatures : public AllStatic { | 66 class CPUFeatures : public AllStatic { |
67 public: | 67 public: |
68 static void InitOnce(); | 68 static void InitOnce(); |
69 static bool double_truncate_round_supported() { return false; } | 69 static bool double_truncate_round_supported() { return false; } |
70 static bool integer_division_supported(); | 70 static bool integer_division_supported(); |
| 71 static bool neon_supported(); |
71 #if defined(USING_SIMULATOR) | 72 #if defined(USING_SIMULATOR) |
72 static void set_integer_division_supported(bool supported); | 73 static void set_integer_division_supported(bool supported); |
| 74 static void set_neon_supported(bool supported); |
73 #endif | 75 #endif |
74 private: | 76 private: |
75 static bool integer_division_supported_; | 77 static bool integer_division_supported_; |
| 78 static bool neon_supported_; |
76 #if defined(DEBUG) | 79 #if defined(DEBUG) |
77 static bool initialized_; | 80 static bool initialized_; |
78 #endif | 81 #endif |
79 }; | 82 }; |
80 | 83 |
81 | 84 |
82 // Encodes Addressing Mode 1 - Data-processing operands. | 85 // Encodes Addressing Mode 1 - Data-processing operands. |
83 class ShifterOperand : public ValueObject { | 86 class ShifterOperand : public ValueObject { |
84 public: | 87 public: |
85 // Data-processing operands - Uninitialized. | 88 // Data-processing operands - Uninitialized. |
(...skipping 383 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
469 void vstms(BlockAddressMode am, Register base, | 472 void vstms(BlockAddressMode am, Register base, |
470 SRegister first, SRegister last, Condition cond = AL); | 473 SRegister first, SRegister last, Condition cond = AL); |
471 | 474 |
472 void vldmd(BlockAddressMode am, Register base, | 475 void vldmd(BlockAddressMode am, Register base, |
473 DRegister first, DRegister last, Condition cond = AL); | 476 DRegister first, DRegister last, Condition cond = AL); |
474 void vstmd(BlockAddressMode am, Register base, | 477 void vstmd(BlockAddressMode am, Register base, |
475 DRegister first, DRegister last, Condition cond = AL); | 478 DRegister first, DRegister last, Condition cond = AL); |
476 | 479 |
477 void vadds(SRegister sd, SRegister sn, SRegister sm, Condition cond = AL); | 480 void vadds(SRegister sd, SRegister sn, SRegister sm, Condition cond = AL); |
478 void vaddd(DRegister dd, DRegister dn, DRegister dm, Condition cond = AL); | 481 void vaddd(DRegister dd, DRegister dn, DRegister dm, Condition cond = AL); |
| 482 void vaddqi(int sz, QRegister qd, QRegister qn, QRegister qm); |
| 483 void vaddqs(QRegister qd, QRegister qn, QRegister qm); |
479 void vsubs(SRegister sd, SRegister sn, SRegister sm, Condition cond = AL); | 484 void vsubs(SRegister sd, SRegister sn, SRegister sm, Condition cond = AL); |
480 void vsubd(DRegister dd, DRegister dn, DRegister dm, Condition cond = AL); | 485 void vsubd(DRegister dd, DRegister dn, DRegister dm, Condition cond = AL); |
481 void vmuls(SRegister sd, SRegister sn, SRegister sm, Condition cond = AL); | 486 void vmuls(SRegister sd, SRegister sn, SRegister sm, Condition cond = AL); |
482 void vmuld(DRegister dd, DRegister dn, DRegister dm, Condition cond = AL); | 487 void vmuld(DRegister dd, DRegister dn, DRegister dm, Condition cond = AL); |
483 void vmlas(SRegister sd, SRegister sn, SRegister sm, Condition cond = AL); | 488 void vmlas(SRegister sd, SRegister sn, SRegister sm, Condition cond = AL); |
484 void vmlad(DRegister dd, DRegister dn, DRegister dm, Condition cond = AL); | 489 void vmlad(DRegister dd, DRegister dn, DRegister dm, Condition cond = AL); |
485 void vmlss(SRegister sd, SRegister sn, SRegister sm, Condition cond = AL); | 490 void vmlss(SRegister sd, SRegister sn, SRegister sm, Condition cond = AL); |
486 void vmlsd(DRegister dd, DRegister dn, DRegister dm, Condition cond = AL); | 491 void vmlsd(DRegister dd, DRegister dn, DRegister dm, Condition cond = AL); |
487 void vdivs(SRegister sd, SRegister sn, SRegister sm, Condition cond = AL); | 492 void vdivs(SRegister sd, SRegister sn, SRegister sm, Condition cond = AL); |
488 void vdivd(DRegister dd, DRegister dn, DRegister dm, Condition cond = AL); | 493 void vdivd(DRegister dd, DRegister dn, DRegister dm, Condition cond = AL); |
(...skipping 308 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
797 void EmitVFPsd(Condition cond, | 802 void EmitVFPsd(Condition cond, |
798 int32_t opcode, | 803 int32_t opcode, |
799 SRegister sd, | 804 SRegister sd, |
800 DRegister dm); | 805 DRegister dm); |
801 | 806 |
802 void EmitVFPds(Condition cond, | 807 void EmitVFPds(Condition cond, |
803 int32_t opcode, | 808 int32_t opcode, |
804 DRegister dd, | 809 DRegister dd, |
805 SRegister sm); | 810 SRegister sm); |
806 | 811 |
| 812 void EmitSIMDqqq(int32_t opcode, int sz, |
| 813 QRegister qd, QRegister qn, QRegister qm); |
| 814 |
807 void EmitBranch(Condition cond, Label* label, bool link); | 815 void EmitBranch(Condition cond, Label* label, bool link); |
808 static int32_t EncodeBranchOffset(int32_t offset, int32_t inst); | 816 static int32_t EncodeBranchOffset(int32_t offset, int32_t inst); |
809 static int DecodeBranchOffset(int32_t inst); | 817 static int DecodeBranchOffset(int32_t inst); |
810 int32_t EncodeTstOffset(int32_t offset, int32_t inst); | 818 int32_t EncodeTstOffset(int32_t offset, int32_t inst); |
811 int DecodeTstOffset(int32_t inst); | 819 int DecodeTstOffset(int32_t inst); |
812 | 820 |
813 void StoreIntoObjectFilter(Register object, Register value, Label* no_update); | 821 void StoreIntoObjectFilter(Register object, Register value, Label* no_update); |
814 | 822 |
815 // Shorter filtering sequence that assumes that value is not a smi. | 823 // Shorter filtering sequence that assumes that value is not a smi. |
816 void StoreIntoObjectFilterNoSmi(Register object, | 824 void StoreIntoObjectFilterNoSmi(Register object, |
817 Register value, | 825 Register value, |
818 Label* no_update); | 826 Label* no_update); |
819 | 827 |
820 DISALLOW_ALLOCATION(); | 828 DISALLOW_ALLOCATION(); |
821 DISALLOW_COPY_AND_ASSIGN(Assembler); | 829 DISALLOW_COPY_AND_ASSIGN(Assembler); |
822 }; | 830 }; |
823 | 831 |
824 } // namespace dart | 832 } // namespace dart |
825 | 833 |
826 #endif // VM_ASSEMBLER_ARM_H_ | 834 #endif // VM_ASSEMBLER_ARM_H_ |
OLD | NEW |