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 665 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
676 int prologue_offset() const { return prologue_offset_; } | 676 int prologue_offset() const { return prologue_offset_; } |
677 const ZoneGrowableArray<int>& GetPointerOffsets() const { | 677 const ZoneGrowableArray<int>& GetPointerOffsets() const { |
678 return buffer_.pointer_offsets(); | 678 return buffer_.pointer_offsets(); |
679 } | 679 } |
680 const GrowableObjectArray& object_pool() const { return object_pool_; } | 680 const GrowableObjectArray& object_pool() const { return object_pool_; } |
681 | 681 |
682 void FinalizeInstructions(const MemoryRegion& region) { | 682 void FinalizeInstructions(const MemoryRegion& region) { |
683 buffer_.FinalizeInstructions(region); | 683 buffer_.FinalizeInstructions(region); |
684 } | 684 } |
685 | 685 |
686 // Set up a dart frame on entry with a frame pointer and PC information to | |
srdjan
2013/03/04 23:46:43
ditto (and below)
regis
2013/03/04 23:51:24
Done.
| |
687 // enable easy access to the RawInstruction object of code corresponding | |
688 // to this frame. | |
689 // The dart frame layout is as follows: | |
690 // .... | |
691 // ret PC | |
692 // saved EBP <=== EBP | |
693 // pc (used to derive the RawInstruction Object of the dart code) | |
694 // locals space <=== ESP | |
695 // ..... | |
696 // This code sets this up with the sequence: | |
697 // pushl ebp | |
698 // movl ebp, esp | |
699 // call L | |
700 // L: <code to adjust saved pc if there is any intrinsification code> | |
701 // ..... | |
702 void EnterDartFrame(intptr_t frame_size); | |
703 | |
704 // Set up a stub frame so that the stack traversal code can easily identify | |
705 // a stub frame. | |
706 // The stub frame layout is as follows: | |
707 // .... | |
708 // ret PC | |
709 // saved EBP | |
710 // 0 (used to indicate frame is a stub frame) | |
711 // ..... | |
712 // This code sets this up with the sequence: | |
713 // pushl ebp | |
714 // movl ebp, esp | |
715 // pushl immediate(0) | |
716 // ..... | |
717 void EnterStubFrame(); | |
718 | |
719 // Instruction pattern from entrypoint is used in dart frame prologs | |
720 // to set up the frame and save a PC which can be used to figure out the | |
721 // RawInstruction object corresponding to the code running in the frame. | |
722 // entrypoint: | |
723 // pushl ebp (size is 1 byte) | |
724 // movl ebp, esp (size is 2 bytes) | |
725 // call L (size is 5 bytes) | |
726 // L: | |
727 static const intptr_t kOffsetOfSavedPCfromEntrypoint = 8; | |
728 | |
729 // Inlined allocation of an instance of class 'cls', code has no runtime | |
730 // calls. Jump to 'failure' if the instance cannot be allocated here. | |
731 // Allocated instance is returned in 'instance_reg'. | |
732 // Only the tags field of the object is initialized. | |
733 void TryAllocate(const Class& cls, | |
734 Label* failure, | |
735 bool near_jump, | |
736 Register instance_reg); | |
737 | |
686 // Debugging and bringup support. | 738 // Debugging and bringup support. |
687 void Stop(const char* message); | 739 void Stop(const char* message); |
688 void Unimplemented(const char* message); | 740 void Unimplemented(const char* message); |
689 void Untested(const char* message); | 741 void Untested(const char* message); |
690 void Unreachable(const char* message); | 742 void Unreachable(const char* message); |
691 | 743 |
692 static void InitializeMemoryWithBreakpoints(uword data, int length); | 744 static void InitializeMemoryWithBreakpoints(uword data, int length); |
693 | 745 |
694 void Comment(const char* format, ...) PRINTF_ATTRIBUTE(2, 3); | 746 void Comment(const char* format, ...) PRINTF_ATTRIBUTE(2, 3); |
695 const Code::Comments& GetCodeComments() const; | 747 const Code::Comments& GetCodeComments() const; |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
769 } | 821 } |
770 | 822 |
771 | 823 |
772 inline void Assembler::EmitOperandSizeOverride() { | 824 inline void Assembler::EmitOperandSizeOverride() { |
773 EmitUint8(0x66); | 825 EmitUint8(0x66); |
774 } | 826 } |
775 | 827 |
776 } // namespace dart | 828 } // namespace dart |
777 | 829 |
778 #endif // VM_ASSEMBLER_IA32_H_ | 830 #endif // VM_ASSEMBLER_IA32_H_ |
OLD | NEW |