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_IA32_H_ | 5 #ifndef VM_ASSEMBLER_IA32_H_ |
6 #define VM_ASSEMBLER_IA32_H_ | 6 #define VM_ASSEMBLER_IA32_H_ |
7 | 7 |
8 #ifndef VM_ASSEMBLER_H_ | 8 #ifndef VM_ASSEMBLER_H_ |
9 #error Do not include assembler_ia32.h directly; use assembler.h instead. | 9 #error Do not include assembler_ia32.h directly; use assembler.h instead. |
10 #endif | 10 #endif |
(...skipping 284 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
295 | 295 |
296 friend class Assembler; | 296 friend class Assembler; |
297 DISALLOW_COPY_AND_ASSIGN(Label); | 297 DISALLOW_COPY_AND_ASSIGN(Label); |
298 }; | 298 }; |
299 | 299 |
300 | 300 |
301 class Assembler : public ValueObject { | 301 class Assembler : public ValueObject { |
302 public: | 302 public: |
303 explicit Assembler(bool use_far_branches = false) | 303 explicit Assembler(bool use_far_branches = false) |
304 : buffer_(), | 304 : buffer_(), |
305 object_pool_(GrowableObjectArray::Handle()), | |
306 prologue_offset_(-1), | 305 prologue_offset_(-1), |
307 jit_cookie_(0), | 306 jit_cookie_(0), |
308 comments_() { | 307 comments_() { |
309 // This mode is only needed and implemented for MIPS and ARM. | 308 // This mode is only needed and implemented for MIPS and ARM. |
310 ASSERT(!use_far_branches); | 309 ASSERT(!use_far_branches); |
311 } | 310 } |
312 ~Assembler() { } | 311 ~Assembler() { } |
313 | 312 |
314 static const bool kNearJump = true; | 313 static const bool kNearJump = true; |
315 static const bool kFarJump = false; | 314 static const bool kFarJump = false; |
(...skipping 478 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
794 intptr_t prologue_offset() const { return prologue_offset_; } | 793 intptr_t prologue_offset() const { return prologue_offset_; } |
795 | 794 |
796 // Count the fixups that produce a pointer offset, without processing | 795 // Count the fixups that produce a pointer offset, without processing |
797 // the fixups. | 796 // the fixups. |
798 intptr_t CountPointerOffsets() const { | 797 intptr_t CountPointerOffsets() const { |
799 return buffer_.CountPointerOffsets(); | 798 return buffer_.CountPointerOffsets(); |
800 } | 799 } |
801 const ZoneGrowableArray<intptr_t>& GetPointerOffsets() const { | 800 const ZoneGrowableArray<intptr_t>& GetPointerOffsets() const { |
802 return buffer_.pointer_offsets(); | 801 return buffer_.pointer_offsets(); |
803 } | 802 } |
804 const GrowableObjectArray& object_pool() const { return object_pool_; } | 803 |
| 804 const GrowableObjectArray& object_pool_data() const { |
| 805 return object_pool_.data(); |
| 806 } |
| 807 |
| 808 ObjectPool& object_pool() { return object_pool_; } |
805 | 809 |
806 void FinalizeInstructions(const MemoryRegion& region) { | 810 void FinalizeInstructions(const MemoryRegion& region) { |
807 buffer_.FinalizeInstructions(region); | 811 buffer_.FinalizeInstructions(region); |
808 } | 812 } |
809 | 813 |
810 // Set up a Dart frame on entry with a frame pointer and PC information to | 814 // Set up a Dart frame on entry with a frame pointer and PC information to |
811 // enable easy access to the RawInstruction object of code corresponding | 815 // enable easy access to the RawInstruction object of code corresponding |
812 // to this frame. | 816 // to this frame. |
813 // The dart frame layout is as follows: | 817 // The dart frame layout is as follows: |
814 // .... | 818 // .... |
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
975 // in DEBUG mode, verifies that 'address' has content of type 'old_content'. | 979 // in DEBUG mode, verifies that 'address' has content of type 'old_content'. |
976 void VerifyHeapWord(const Address& address, FieldContent old_content); | 980 void VerifyHeapWord(const Address& address, FieldContent old_content); |
977 void VerifiedWrite(const Address& dest, | 981 void VerifiedWrite(const Address& dest, |
978 Register value, | 982 Register value, |
979 FieldContent old_content); | 983 FieldContent old_content); |
980 void UnverifiedStoreOldObject(const Address& dest, const Object& value); | 984 void UnverifiedStoreOldObject(const Address& dest, const Object& value); |
981 | 985 |
982 int32_t jit_cookie(); | 986 int32_t jit_cookie(); |
983 | 987 |
984 AssemblerBuffer buffer_; | 988 AssemblerBuffer buffer_; |
985 GrowableObjectArray& object_pool_; // Object pool is not used on ia32. | 989 ObjectPool object_pool_; |
986 intptr_t prologue_offset_; | 990 intptr_t prologue_offset_; |
987 int32_t jit_cookie_; | 991 int32_t jit_cookie_; |
988 GrowableArray<CodeComment*> comments_; | 992 GrowableArray<CodeComment*> comments_; |
989 | 993 |
990 DISALLOW_ALLOCATION(); | 994 DISALLOW_ALLOCATION(); |
991 DISALLOW_COPY_AND_ASSIGN(Assembler); | 995 DISALLOW_COPY_AND_ASSIGN(Assembler); |
992 }; | 996 }; |
993 | 997 |
994 | 998 |
995 inline void Assembler::EmitUint8(uint8_t value) { | 999 inline void Assembler::EmitUint8(uint8_t value) { |
(...skipping 22 matching lines...) Expand all Loading... |
1018 } | 1022 } |
1019 | 1023 |
1020 | 1024 |
1021 inline void Assembler::EmitOperandSizeOverride() { | 1025 inline void Assembler::EmitOperandSizeOverride() { |
1022 EmitUint8(0x66); | 1026 EmitUint8(0x66); |
1023 } | 1027 } |
1024 | 1028 |
1025 } // namespace dart | 1029 } // namespace dart |
1026 | 1030 |
1027 #endif // VM_ASSEMBLER_IA32_H_ | 1031 #endif // VM_ASSEMBLER_IA32_H_ |
OLD | NEW |