| 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 |