Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(464)

Side by Side Diff: runtime/vm/raw_object.h

Issue 1343373003: Revert "VM: New calling convention for generated code." (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « runtime/vm/object.cc ('k') | runtime/vm/raw_object.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, 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_RAW_OBJECT_H_ 5 #ifndef VM_RAW_OBJECT_H_
6 #define VM_RAW_OBJECT_H_ 6 #define VM_RAW_OBJECT_H_
7 7
8 #include "platform/assert.h" 8 #include "platform/assert.h"
9 #include "vm/atomic.h" 9 #include "vm/atomic.h"
10 #include "vm/globals.h" 10 #include "vm/globals.h"
(...skipping 557 matching lines...) Expand 10 before | Expand all | Expand 10 after
568 friend class ExternalTypedData; 568 friend class ExternalTypedData;
569 friend class ForwardList; 569 friend class ForwardList;
570 friend class GrowableObjectArray; // StorePointer 570 friend class GrowableObjectArray; // StorePointer
571 friend class Heap; 571 friend class Heap;
572 friend class HeapMapAsJSONVisitor; 572 friend class HeapMapAsJSONVisitor;
573 friend class ClassStatsVisitor; 573 friend class ClassStatsVisitor;
574 friend class MarkingVisitor; 574 friend class MarkingVisitor;
575 friend class Mint; 575 friend class Mint;
576 friend class Object; 576 friend class Object;
577 friend class OneByteString; // StoreSmi 577 friend class OneByteString; // StoreSmi
578 friend class RawCode;
579 friend class RawExternalTypedData; 578 friend class RawExternalTypedData;
580 friend class RawInstructions; 579 friend class RawInstructions;
581 friend class RawInstance; 580 friend class RawInstance;
582 friend class RawTypedData; 581 friend class RawTypedData;
583 friend class Scavenger; 582 friend class Scavenger;
584 friend class ScavengerVisitor; 583 friend class ScavengerVisitor;
585 friend class SizeExcludingClassVisitor; // GetClassId 584 friend class SizeExcludingClassVisitor; // GetClassId
586 friend class RetainingPathVisitor; // GetClassId 585 friend class RetainingPathVisitor; // GetClassId
587 friend class SkippedCodeFunctions; // StorePointer 586 friend class SkippedCodeFunctions; // StorePointer
588 friend class InstructionsReader; // tags_ check 587 friend class InstructionsReader; // tags_ check
589 friend class SnapshotReader; 588 friend class SnapshotReader;
590 friend class SnapshotWriter; 589 friend class SnapshotWriter;
591 friend class String; 590 friend class String;
592 friend class TypedData; 591 friend class TypedData;
593 friend class TypedDataView; 592 friend class TypedDataView;
594 friend class WeakProperty; // StorePointer 593 friend class WeakProperty; // StorePointer
595 friend class Instance; // StorePointer 594 friend class Instance; // StorePointer
596 friend class StackFrame; // GetCodeObject assertion.
597 595
598 DISALLOW_ALLOCATION(); 596 DISALLOW_ALLOCATION();
599 DISALLOW_IMPLICIT_CONSTRUCTORS(RawObject); 597 DISALLOW_IMPLICIT_CONSTRUCTORS(RawObject);
600 }; 598 };
601 599
602 600
603 class RawClass : public RawObject { 601 class RawClass : public RawObject {
604 public: 602 public:
605 enum ClassFinalizedState { 603 enum ClassFinalizedState {
606 kAllocated = 0, // Initial state. 604 kAllocated = 0, // Initial state.
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after
765 RawObject** to_snapshot() { 763 RawObject** to_snapshot() {
766 return reinterpret_cast<RawObject**>(&ptr()->data_); 764 return reinterpret_cast<RawObject**>(&ptr()->data_);
767 } 765 }
768 RawArray* ic_data_array_; // ICData of unoptimized code. 766 RawArray* ic_data_array_; // ICData of unoptimized code.
769 RawObject** to_optimized_snapshot() { 767 RawObject** to_optimized_snapshot() {
770 return reinterpret_cast<RawObject**>(&ptr()->ic_data_array_); 768 return reinterpret_cast<RawObject**>(&ptr()->ic_data_array_);
771 } 769 }
772 RawObject** to_no_code() { 770 RawObject** to_no_code() {
773 return reinterpret_cast<RawObject**>(&ptr()->ic_data_array_); 771 return reinterpret_cast<RawObject**>(&ptr()->ic_data_array_);
774 } 772 }
775 RawCode* code_; // Currently active code. 773 RawInstructions* instructions_; // Instructions of currently active code.
776 RawCode* unoptimized_code_; // Unoptimized code, keep it after optimization. 774 RawCode* unoptimized_code_; // Unoptimized code, keep it after optimization.
777 RawObject** to() { 775 RawObject** to() {
778 return reinterpret_cast<RawObject**>(&ptr()->unoptimized_code_); 776 return reinterpret_cast<RawObject**>(&ptr()->unoptimized_code_);
779 } 777 }
780 uword entry_point_; 778 uword entry_point_;
781 779
782 int32_t token_pos_; 780 int32_t token_pos_;
783 int32_t end_token_pos_; 781 int32_t end_token_pos_;
784 int32_t usage_counter_; // Incremented while function is running. 782 int32_t usage_counter_; // Incremented while function is running.
785 int16_t num_fixed_parameters_; 783 int16_t num_fixed_parameters_;
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after
995 class RawCode : public RawObject { 993 class RawCode : public RawObject {
996 enum InlinedMetadataIndex { 994 enum InlinedMetadataIndex {
997 kInlinedIntervalsIndex = 0, 995 kInlinedIntervalsIndex = 0,
998 kInlinedIdToFunctionIndex = 1, 996 kInlinedIdToFunctionIndex = 1,
999 kInlinedCallerIdMapIndex = 2, 997 kInlinedCallerIdMapIndex = 2,
1000 kInlinedMetadataSize = 3, 998 kInlinedMetadataSize = 3,
1001 }; 999 };
1002 1000
1003 RAW_HEAP_OBJECT_IMPLEMENTATION(Code); 1001 RAW_HEAP_OBJECT_IMPLEMENTATION(Code);
1004 1002
1005 uword entry_point_;
1006
1007 RawObject** from() { 1003 RawObject** from() {
1008 return reinterpret_cast<RawObject**>(&ptr()->active_instructions_); 1004 return reinterpret_cast<RawObject**>(&ptr()->instructions_);
1009 } 1005 }
1010 RawInstructions* active_instructions_;
1011 RawInstructions* instructions_; 1006 RawInstructions* instructions_;
1012 RawObjectPool* object_pool_;
1013 // If owner_ is Function::null() the owner is a regular stub. 1007 // If owner_ is Function::null() the owner is a regular stub.
1014 // If owner_ is a Class the owner is the allocation stub for that class. 1008 // If owner_ is a Class the owner is the allocation stub for that class.
1015 // Else, owner_ is a regular Dart Function. 1009 // Else, owner_ is a regular Dart Function.
1016 RawObject* owner_; // Function, Null, or a Class. 1010 RawObject* owner_; // Function, Null, or a Class.
1017 RawExceptionHandlers* exception_handlers_; 1011 RawExceptionHandlers* exception_handlers_;
1018 RawPcDescriptors* pc_descriptors_; 1012 RawPcDescriptors* pc_descriptors_;
1019 RawArray* deopt_info_array_; 1013 RawArray* deopt_info_array_;
1020 RawArray* static_calls_target_table_; // (code-offset, function, code). 1014 RawArray* static_calls_target_table_; // (code-offset, function, code).
1021 RawArray* stackmaps_; 1015 RawArray* stackmaps_;
1022 RawLocalVarDescriptors* var_descriptors_; 1016 RawLocalVarDescriptors* var_descriptors_;
1023 RawArray* inlined_metadata_; 1017 RawArray* inlined_metadata_;
1024 RawArray* comments_; 1018 RawArray* comments_;
1025 // If return_address_metadata_ is a Smi, it is the offset to the prologue. 1019 // If return_address_metadata_ is a Smi, it is the offset to the prologue.
1026 // Else, return_address_metadata_ is null. 1020 // Else, return_address_metadata_ is null.
1027 RawObject* return_address_metadata_; 1021 RawObject* return_address_metadata_;
1028 RawObject** to() { 1022 RawObject** to() {
1029 return reinterpret_cast<RawObject**>(&ptr()->return_address_metadata_); 1023 return reinterpret_cast<RawObject**>(&ptr()->return_address_metadata_);
1030 } 1024 }
1025 uword entry_point_;
1031 1026
1032 // Compilation timestamp. 1027 // Compilation timestamp.
1033 int64_t compile_timestamp_; 1028 int64_t compile_timestamp_;
1034 1029
1035 // state_bits_ is a bitfield with three fields: 1030 // state_bits_ is a bitfield with three fields:
1036 // The optimized bit, the alive bit, and a count of the number of pointer 1031 // The optimized bit, the alive bit, and a count of the number of pointer
1037 // offsets. 1032 // offsets.
1038 // Alive: If true, the embedded object pointers will be visited during GC. 1033 // Alive: If true, the embedded object pointers will be visited during GC.
1039 int32_t state_bits_; 1034 int32_t state_bits_;
1040 1035
1041 // PC offsets for code patching. 1036 // PC offsets for code patching.
1037 int32_t entry_patch_pc_offset_;
1038 int32_t patch_code_pc_offset_;
1042 int32_t lazy_deopt_pc_offset_; 1039 int32_t lazy_deopt_pc_offset_;
1043 1040
1044 // Variable length data follows here. 1041 // Variable length data follows here.
1045 int32_t* data() { OPEN_ARRAY_START(int32_t, int32_t); } 1042 int32_t* data() { OPEN_ARRAY_START(int32_t, int32_t); }
1046 const int32_t* data() const { OPEN_ARRAY_START(int32_t, int32_t); } 1043 const int32_t* data() const { OPEN_ARRAY_START(int32_t, int32_t); }
1047 1044
1048 static bool ContainsPC(RawObject* raw_obj, uword pc);
1049
1050 friend class Function; 1045 friend class Function;
1051 friend class MarkingVisitor; 1046 friend class MarkingVisitor;
1052 friend class SkippedCodeFunctions; 1047 friend class SkippedCodeFunctions;
1053 friend class StackFrame; 1048 friend class StackFrame;
1054 }; 1049 };
1055 1050
1056 1051
1057 class RawObjectPool : public RawObject { 1052 class RawObjectPool : public RawObject {
1058 RAW_HEAP_OBJECT_IMPLEMENTATION(ObjectPool); 1053 RAW_HEAP_OBJECT_IMPLEMENTATION(ObjectPool);
1059 1054
(...skipping 12 matching lines...) Expand all
1072 Entry* first_entry() { return &ptr()->data()[0]; } 1067 Entry* first_entry() { return &ptr()->data()[0]; }
1073 1068
1074 friend class Object; 1069 friend class Object;
1075 friend class SnapshotReader; 1070 friend class SnapshotReader;
1076 }; 1071 };
1077 1072
1078 1073
1079 class RawInstructions : public RawObject { 1074 class RawInstructions : public RawObject {
1080 RAW_HEAP_OBJECT_IMPLEMENTATION(Instructions); 1075 RAW_HEAP_OBJECT_IMPLEMENTATION(Instructions);
1081 1076
1077 RawObject** from() {
1078 return reinterpret_cast<RawObject**>(&ptr()->code_);
1079 }
1080 RawCode* code_;
1081 RawObjectPool* object_pool_;
1082 RawObject** to() {
1083 return reinterpret_cast<RawObject**>(&ptr()->object_pool_);
1084 }
1082 int32_t size_; 1085 int32_t size_;
1083 1086
1084 // Variable length data follows here. 1087 // Variable length data follows here.
1085 uint8_t* data() { OPEN_ARRAY_START(uint8_t, uint8_t); } 1088 uint8_t* data() { OPEN_ARRAY_START(uint8_t, uint8_t); }
1086 1089
1087 // Private helper function used while visiting stack frames. The 1090 // Private helper function used while visiting stack frames. The
1088 // code which iterates over dart frames is also called during GC and 1091 // code which iterates over dart frames is also called during GC and
1089 // is not allowed to create handles. 1092 // is not allowed to create handles.
1090 static bool ContainsPC(RawInstructions* raw_instr, uword pc); 1093 static bool ContainsPC(RawObject* raw_obj, uword pc);
1091 1094
1092 friend class RawCode; 1095 friend class RawCode;
1093 friend class RawFunction; 1096 friend class RawFunction;
1094 friend class Code; 1097 friend class Code;
1095 friend class StackFrame; 1098 friend class StackFrame;
1096 friend class MarkingVisitor; 1099 friend class MarkingVisitor;
1097 friend class SkippedCodeFunctions; 1100 friend class SkippedCodeFunctions;
1098 friend class Function; 1101 friend class Function;
1099 friend class InstructionsReader; 1102 friend class InstructionsReader;
1100 }; 1103 };
(...skipping 1122 matching lines...) Expand 10 before | Expand all | Expand 10 after
2223 COMPILE_ASSERT(kExternalTypedDataInt8ArrayCid == 2226 COMPILE_ASSERT(kExternalTypedDataInt8ArrayCid ==
2224 kTypedDataInt8ArrayViewCid + 15); 2227 kTypedDataInt8ArrayViewCid + 15);
2225 COMPILE_ASSERT(kByteBufferCid == kExternalTypedDataInt8ArrayCid + 14); 2228 COMPILE_ASSERT(kByteBufferCid == kExternalTypedDataInt8ArrayCid + 14);
2226 COMPILE_ASSERT(kNullCid == kByteBufferCid + 1); 2229 COMPILE_ASSERT(kNullCid == kByteBufferCid + 1);
2227 return (kNullCid - kTypedDataInt8ArrayCid); 2230 return (kNullCid - kTypedDataInt8ArrayCid);
2228 } 2231 }
2229 2232
2230 } // namespace dart 2233 } // namespace dart
2231 2234
2232 #endif // VM_RAW_OBJECT_H_ 2235 #endif // VM_RAW_OBJECT_H_
OLDNEW
« no previous file with comments | « runtime/vm/object.cc ('k') | runtime/vm/raw_object.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698