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 536 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
547 Register scratch, Condition cond = AL); | 547 Register scratch, Condition cond = AL); |
548 | 548 |
549 void MarkExceptionHandler(Label* label); | 549 void MarkExceptionHandler(Label* label); |
550 | 550 |
551 void Drop(intptr_t stack_elements); | 551 void Drop(intptr_t stack_elements); |
552 | 552 |
553 void LoadObject(Register rd, const Object& object); | 553 void LoadObject(Register rd, const Object& object); |
554 void PushObject(const Object& object); | 554 void PushObject(const Object& object); |
555 void CompareObject(Register rn, const Object& object); | 555 void CompareObject(Register rn, const Object& object); |
556 | 556 |
| 557 void StoreIntoObject(Register object, // Object we are storing into. |
| 558 const Address& dest, // Where we are storing into. |
| 559 Register value, // Value we are storing. |
| 560 bool can_value_be_smi = true); |
| 561 |
| 562 void StoreIntoObjectNoBarrier(Register object, |
| 563 const Address& dest, |
| 564 Register value); |
| 565 void StoreIntoObjectNoBarrier(Register object, |
| 566 const Address& dest, |
| 567 const Object& value); |
| 568 |
557 void LoadClassId(Register result, Register object); | 569 void LoadClassId(Register result, Register object); |
558 void LoadClassById(Register result, Register class_id); | 570 void LoadClassById(Register result, Register class_id); |
559 void LoadClass(Register result, Register object, Register scratch); | 571 void LoadClass(Register result, Register object, Register scratch); |
560 void CompareClassId(Register object, intptr_t class_id, Register scratch); | 572 void CompareClassId(Register object, intptr_t class_id, Register scratch); |
561 | 573 |
562 void LoadWordFromPoolOffset(Register rd, int32_t offset); | 574 void LoadWordFromPoolOffset(Register rd, int32_t offset); |
563 void LoadFromOffset(LoadOperandType type, | 575 void LoadFromOffset(LoadOperandType type, |
564 Register reg, | 576 Register reg, |
565 Register base, | 577 Register base, |
566 int32_t offset, | 578 int32_t offset, |
(...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
765 int32_t opcode, | 777 int32_t opcode, |
766 DRegister dd, | 778 DRegister dd, |
767 SRegister sm); | 779 SRegister sm); |
768 | 780 |
769 void EmitBranch(Condition cond, Label* label, bool link); | 781 void EmitBranch(Condition cond, Label* label, bool link); |
770 static int32_t EncodeBranchOffset(int32_t offset, int32_t inst); | 782 static int32_t EncodeBranchOffset(int32_t offset, int32_t inst); |
771 static int DecodeBranchOffset(int32_t inst); | 783 static int DecodeBranchOffset(int32_t inst); |
772 int32_t EncodeTstOffset(int32_t offset, int32_t inst); | 784 int32_t EncodeTstOffset(int32_t offset, int32_t inst); |
773 int DecodeTstOffset(int32_t inst); | 785 int DecodeTstOffset(int32_t inst); |
774 | 786 |
775 // Returns whether or not the given register is used for passing parameters. | 787 void StoreIntoObjectFilter(Register object, Register value, Label* no_update); |
776 static int RegisterCompare(const Register* reg1, const Register* reg2) { | 788 |
777 return *reg1 - *reg2; | 789 // Shorter filtering sequence that assumes that value is not a smi. |
778 } | 790 void StoreIntoObjectFilterNoSmi(Register object, |
| 791 Register value, |
| 792 Label* no_update); |
779 | 793 |
780 DISALLOW_ALLOCATION(); | 794 DISALLOW_ALLOCATION(); |
781 DISALLOW_COPY_AND_ASSIGN(Assembler); | 795 DISALLOW_COPY_AND_ASSIGN(Assembler); |
782 }; | 796 }; |
783 | 797 |
784 } // namespace dart | 798 } // namespace dart |
785 | 799 |
786 #endif // VM_ASSEMBLER_ARM_H_ | 800 #endif // VM_ASSEMBLER_ARM_H_ |
OLD | NEW |