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

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

Issue 1192103004: VM: New calling convention for generated code. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years, 6 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
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 553 matching lines...) Expand 10 before | Expand all | Expand 10 after
564 friend class GCMarker; 564 friend class GCMarker;
565 friend class ExternalTypedData; 565 friend class ExternalTypedData;
566 friend class ForwardList; 566 friend class ForwardList;
567 friend class GrowableObjectArray; // StorePointer 567 friend class GrowableObjectArray; // StorePointer
568 friend class Heap; 568 friend class Heap;
569 friend class HeapMapAsJSONVisitor; 569 friend class HeapMapAsJSONVisitor;
570 friend class ClassStatsVisitor; 570 friend class ClassStatsVisitor;
571 friend class MarkingVisitor; 571 friend class MarkingVisitor;
572 friend class Object; 572 friend class Object;
573 friend class OneByteString; // StoreSmi 573 friend class OneByteString; // StoreSmi
574 friend class RawCode;
574 friend class RawExternalTypedData; 575 friend class RawExternalTypedData;
575 friend class RawInstructions; 576 friend class RawInstructions;
576 friend class RawInstance; 577 friend class RawInstance;
577 friend class RawTypedData; 578 friend class RawTypedData;
578 friend class Scavenger; 579 friend class Scavenger;
579 friend class ScavengerVisitor; 580 friend class ScavengerVisitor;
580 friend class SizeExcludingClassVisitor; // GetClassId 581 friend class SizeExcludingClassVisitor; // GetClassId
581 friend class SnapshotReader; 582 friend class SnapshotReader;
582 friend class SnapshotWriter; 583 friend class SnapshotWriter;
583 friend class String; 584 friend class String;
584 friend class TypedData; 585 friend class TypedData;
585 friend class TypedDataView; 586 friend class TypedDataView;
586 friend class WeakProperty; // StorePointer 587 friend class WeakProperty; // StorePointer
587 friend class Instance; // StorePointer 588 friend class Instance; // StorePointer
589 friend class StackFrame; // GetCodeObject assertion.
588 590
589 DISALLOW_ALLOCATION(); 591 DISALLOW_ALLOCATION();
590 DISALLOW_IMPLICIT_CONSTRUCTORS(RawObject); 592 DISALLOW_IMPLICIT_CONSTRUCTORS(RawObject);
591 }; 593 };
592 594
593 595
594 class RawClass : public RawObject { 596 class RawClass : public RawObject {
595 public: 597 public:
596 enum ClassFinalizedState { 598 enum ClassFinalizedState {
597 kAllocated = 0, // Initial state. 599 kAllocated = 0, // Initial state.
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
754 RawArray* parameter_names_; 756 RawArray* parameter_names_;
755 RawObject* data_; // Additional data specific to the function kind. 757 RawObject* data_; // Additional data specific to the function kind.
756 RawObject** to_snapshot() { 758 RawObject** to_snapshot() {
757 return reinterpret_cast<RawObject**>(&ptr()->data_); 759 return reinterpret_cast<RawObject**>(&ptr()->data_);
758 } 760 }
759 // Fields below are not part of the snapshot. 761 // Fields below are not part of the snapshot.
760 RawArray* ic_data_array_; // ICData of unoptimized code. 762 RawArray* ic_data_array_; // ICData of unoptimized code.
761 RawObject** to_no_code() { 763 RawObject** to_no_code() {
762 return reinterpret_cast<RawObject**>(&ptr()->ic_data_array_); 764 return reinterpret_cast<RawObject**>(&ptr()->ic_data_array_);
763 } 765 }
764 RawInstructions* instructions_; // Instructions of currently active code. 766 RawCode* code_; // Currently active code.
765 RawCode* unoptimized_code_; // Unoptimized code, keep it after optimization. 767 RawCode* unoptimized_code_; // Unoptimized code, keep it after optimization.
766 RawObject** to() { 768 RawObject** to() {
767 return reinterpret_cast<RawObject**>(&ptr()->unoptimized_code_); 769 return reinterpret_cast<RawObject**>(&ptr()->unoptimized_code_);
768 } 770 }
769 771
770 int32_t token_pos_; 772 int32_t token_pos_;
771 int32_t end_token_pos_; 773 int32_t end_token_pos_;
772 int32_t usage_counter_; // Incremented while function is running. 774 int32_t usage_counter_; // Incremented while function is running.
773 int16_t num_fixed_parameters_; 775 int16_t num_fixed_parameters_;
774 int16_t num_optional_parameters_; // > 0: positional; < 0: named. 776 int16_t num_optional_parameters_; // > 0: positional; < 0: named.
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after
970 kInlinedIdToFunctionIndex = 1, 972 kInlinedIdToFunctionIndex = 1,
971 kInlinedMetadataSize = 2, 973 kInlinedMetadataSize = 2,
972 }; 974 };
973 975
974 RAW_HEAP_OBJECT_IMPLEMENTATION(Code); 976 RAW_HEAP_OBJECT_IMPLEMENTATION(Code);
975 977
976 RawObject** from() { 978 RawObject** from() {
977 return reinterpret_cast<RawObject**>(&ptr()->instructions_); 979 return reinterpret_cast<RawObject**>(&ptr()->instructions_);
978 } 980 }
979 RawInstructions* instructions_; 981 RawInstructions* instructions_;
982 RawObjectPool* object_pool_;
980 // If owner_ is Function::null() the owner is a regular stub. 983 // If owner_ is Function::null() the owner is a regular stub.
981 // If owner_ is a Class the owner is the allocation stub for that class. 984 // If owner_ is a Class the owner is the allocation stub for that class.
982 // Else, owner_ is a regular Dart Function. 985 // Else, owner_ is a regular Dart Function.
983 RawObject* owner_; // Function, Null, or a Class. 986 RawObject* owner_; // Function, Null, or a Class.
984 RawExceptionHandlers* exception_handlers_; 987 RawExceptionHandlers* exception_handlers_;
985 RawPcDescriptors* pc_descriptors_; 988 RawPcDescriptors* pc_descriptors_;
986 RawArray* deopt_info_array_; 989 RawArray* deopt_info_array_;
987 RawArray* static_calls_target_table_; // (code-offset, function, code). 990 RawArray* static_calls_target_table_; // (code-offset, function, code).
988 RawArray* stackmaps_; 991 RawArray* stackmaps_;
989 RawLocalVarDescriptors* var_descriptors_; 992 RawLocalVarDescriptors* var_descriptors_;
(...skipping 17 matching lines...) Expand all
1007 1010
1008 // PC offsets for code patching. 1011 // PC offsets for code patching.
1009 int32_t entry_patch_pc_offset_; 1012 int32_t entry_patch_pc_offset_;
1010 int32_t patch_code_pc_offset_; 1013 int32_t patch_code_pc_offset_;
1011 int32_t lazy_deopt_pc_offset_; 1014 int32_t lazy_deopt_pc_offset_;
1012 1015
1013 // Variable length data follows here. 1016 // Variable length data follows here.
1014 int32_t* data() { OPEN_ARRAY_START(int32_t, int32_t); } 1017 int32_t* data() { OPEN_ARRAY_START(int32_t, int32_t); }
1015 const int32_t* data() const { OPEN_ARRAY_START(int32_t, int32_t); } 1018 const int32_t* data() const { OPEN_ARRAY_START(int32_t, int32_t); }
1016 1019
1020 static bool ContainsPC(RawObject* raw_obj, uword pc);
1021
1017 friend class Function; 1022 friend class Function;
1018 friend class MarkingVisitor; 1023 friend class MarkingVisitor;
1019 friend class StackFrame; 1024 friend class StackFrame;
1020 }; 1025 };
1021 1026
1022 1027
1023 class RawObjectPool : public RawObject { 1028 class RawObjectPool : public RawObject {
1024 RAW_HEAP_OBJECT_IMPLEMENTATION(ObjectPool); 1029 RAW_HEAP_OBJECT_IMPLEMENTATION(ObjectPool);
1025 1030
1026 intptr_t length_; 1031 intptr_t length_;
(...skipping 10 matching lines...) Expand all
1037 1042
1038 Entry* first_entry() { return &ptr()->data()[0]; } 1043 Entry* first_entry() { return &ptr()->data()[0]; }
1039 1044
1040 friend class Object; 1045 friend class Object;
1041 }; 1046 };
1042 1047
1043 1048
1044 class RawInstructions : public RawObject { 1049 class RawInstructions : public RawObject {
1045 RAW_HEAP_OBJECT_IMPLEMENTATION(Instructions); 1050 RAW_HEAP_OBJECT_IMPLEMENTATION(Instructions);
1046 1051
1047 RawObject** from() {
1048 return reinterpret_cast<RawObject**>(&ptr()->code_);
1049 }
1050 RawCode* code_;
1051 RawObjectPool* object_pool_;
1052 RawObject** to() {
1053 return reinterpret_cast<RawObject**>(&ptr()->object_pool_);
1054 }
1055 int32_t size_; 1052 int32_t size_;
1056 1053
1057 // Variable length data follows here. 1054 // Variable length data follows here.
1058 uint8_t* data() { OPEN_ARRAY_START(uint8_t, uint8_t); } 1055 uint8_t* data() { OPEN_ARRAY_START(uint8_t, uint8_t); }
1059 1056
1060 // Private helper function used while visiting stack frames. The 1057 // Private helper function used while visiting stack frames. The
1061 // code which iterates over dart frames is also called during GC and 1058 // code which iterates over dart frames is also called during GC and
1062 // is not allowed to create handles. 1059 // is not allowed to create handles.
1063 static bool ContainsPC(RawObject* raw_obj, uword pc); 1060 static bool ContainsPC(RawObject* raw_obj, uword pc);
1064 1061
(...skipping 1114 matching lines...) Expand 10 before | Expand all | Expand 10 after
2179 COMPILE_ASSERT(kExternalTypedDataInt8ArrayCid == 2176 COMPILE_ASSERT(kExternalTypedDataInt8ArrayCid ==
2180 kTypedDataInt8ArrayViewCid + 15); 2177 kTypedDataInt8ArrayViewCid + 15);
2181 COMPILE_ASSERT(kByteBufferCid == kExternalTypedDataInt8ArrayCid + 14); 2178 COMPILE_ASSERT(kByteBufferCid == kExternalTypedDataInt8ArrayCid + 14);
2182 COMPILE_ASSERT(kNullCid == kByteBufferCid + 1); 2179 COMPILE_ASSERT(kNullCid == kByteBufferCid + 1);
2183 return (kNullCid - kTypedDataInt8ArrayCid); 2180 return (kNullCid - kTypedDataInt8ArrayCid);
2184 } 2181 }
2185 2182
2186 } // namespace dart 2183 } // namespace dart
2187 2184
2188 #endif // VM_RAW_OBJECT_H_ 2185 #endif // VM_RAW_OBJECT_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698