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

Side by Side Diff: src/objects-visiting.cc

Issue 391693002: In-object double fields unboxing (for 64-bit only). (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 5 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 | Annotate | Revision Log
OLDNEW
1 // Copyright 2011 the V8 project authors. All rights reserved. 1 // Copyright 2011 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/v8.h" 5 #include "src/v8.h"
6 6
7 #include "src/ic-inl.h" 7 #include "src/ic-inl.h"
8 #include "src/objects-visiting.h" 8 #include "src/objects-visiting.h"
9 9
10 namespace v8 { 10 namespace v8 {
11 namespace internal { 11 namespace internal {
12 12
13 13
14 static inline bool IsShortcutCandidate(int type) { 14 static inline bool IsShortcutCandidate(int type) {
15 return ((type & kShortcutTypeMask) == kShortcutTypeTag); 15 return ((type & kShortcutTypeMask) == kShortcutTypeTag);
16 } 16 }
17 17
18 18
19 StaticVisitorBase::VisitorId StaticVisitorBase::GetVisitorId( 19 StaticVisitorBase::VisitorId StaticVisitorBase::GetVisitorId(
20 int instance_type, 20 int instance_type, int instance_size, bool has_non_tagged_fields) {
Toon Verwaest 2014/07/29 15:02:09 has_unboxed_fields?
Igor Sheludko 2014/10/30 14:23:44 Done.
21 int instance_size) {
22 if (instance_type < FIRST_NONSTRING_TYPE) { 21 if (instance_type < FIRST_NONSTRING_TYPE) {
23 switch (instance_type & kStringRepresentationMask) { 22 switch (instance_type & kStringRepresentationMask) {
24 case kSeqStringTag: 23 case kSeqStringTag:
25 if ((instance_type & kStringEncodingMask) == kOneByteStringTag) { 24 if ((instance_type & kStringEncodingMask) == kOneByteStringTag) {
26 return kVisitSeqOneByteString; 25 return kVisitSeqOneByteString;
27 } else { 26 } else {
28 return kVisitSeqTwoByteString; 27 return kVisitSeqTwoByteString;
29 } 28 }
30 29
31 case kConsStringTag: 30 case kConsStringTag:
32 if (IsShortcutCandidate(instance_type)) { 31 if (IsShortcutCandidate(instance_type)) {
33 return kVisitShortcutCandidate; 32 return kVisitShortcutCandidate;
34 } else { 33 } else {
35 return kVisitConsString; 34 return kVisitConsString;
36 } 35 }
37 36
38 case kSlicedStringTag: 37 case kSlicedStringTag:
39 return kVisitSlicedString; 38 return kVisitSlicedString;
40 39
41 case kExternalStringTag: 40 case kExternalStringTag:
42 return GetVisitorIdForSize(kVisitDataObject, 41 return GetVisitorIdForSize(kVisitDataObject, kVisitDataObjectGeneric,
43 kVisitDataObjectGeneric, 42 instance_size, has_non_tagged_fields);
44 instance_size);
45 } 43 }
46 UNREACHABLE(); 44 UNREACHABLE();
47 } 45 }
48 46
49 switch (instance_type) { 47 switch (instance_type) {
50 case BYTE_ARRAY_TYPE: 48 case BYTE_ARRAY_TYPE:
51 return kVisitByteArray; 49 return kVisitByteArray;
52 50
53 case FREE_SPACE_TYPE: 51 case FREE_SPACE_TYPE:
54 return kVisitFreeSpace; 52 return kVisitFreeSpace;
(...skipping 16 matching lines...) Expand all
71 case CODE_TYPE: 69 case CODE_TYPE:
72 return kVisitCode; 70 return kVisitCode;
73 71
74 case CELL_TYPE: 72 case CELL_TYPE:
75 return kVisitCell; 73 return kVisitCell;
76 74
77 case PROPERTY_CELL_TYPE: 75 case PROPERTY_CELL_TYPE:
78 return kVisitPropertyCell; 76 return kVisitPropertyCell;
79 77
80 case JS_SET_TYPE: 78 case JS_SET_TYPE:
81 return GetVisitorIdForSize(kVisitStruct, 79 return GetVisitorIdForSize(kVisitStruct, kVisitStructGeneric,
82 kVisitStructGeneric, 80 JSSet::kSize, has_non_tagged_fields);
83 JSSet::kSize);
84 81
85 case JS_MAP_TYPE: 82 case JS_MAP_TYPE:
86 return GetVisitorIdForSize(kVisitStruct, 83 return GetVisitorIdForSize(kVisitStruct, kVisitStructGeneric,
87 kVisitStructGeneric, 84 JSMap::kSize, has_non_tagged_fields);
88 JSMap::kSize);
89 85
90 case JS_WEAK_MAP_TYPE: 86 case JS_WEAK_MAP_TYPE:
91 case JS_WEAK_SET_TYPE: 87 case JS_WEAK_SET_TYPE:
92 return kVisitJSWeakCollection; 88 return kVisitJSWeakCollection;
93 89
94 case JS_REGEXP_TYPE: 90 case JS_REGEXP_TYPE:
95 return kVisitJSRegExp; 91 return kVisitJSRegExp;
96 92
97 case SHARED_FUNCTION_INFO_TYPE: 93 case SHARED_FUNCTION_INFO_TYPE:
98 return kVisitSharedFunctionInfo; 94 return kVisitSharedFunctionInfo;
99 95
100 case JS_PROXY_TYPE: 96 case JS_PROXY_TYPE:
101 return GetVisitorIdForSize(kVisitStruct, 97 return GetVisitorIdForSize(kVisitStruct, kVisitStructGeneric,
102 kVisitStructGeneric, 98 JSProxy::kSize, has_non_tagged_fields);
103 JSProxy::kSize);
104 99
105 case JS_FUNCTION_PROXY_TYPE: 100 case JS_FUNCTION_PROXY_TYPE:
106 return GetVisitorIdForSize(kVisitStruct, 101 return GetVisitorIdForSize(kVisitStruct, kVisitStructGeneric,
107 kVisitStructGeneric, 102 JSFunctionProxy::kSize, has_non_tagged_fields);
108 JSFunctionProxy::kSize);
109 103
110 case FOREIGN_TYPE: 104 case FOREIGN_TYPE:
111 return GetVisitorIdForSize(kVisitDataObject, 105 return GetVisitorIdForSize(kVisitDataObject, kVisitDataObjectGeneric,
112 kVisitDataObjectGeneric, 106 Foreign::kSize, has_non_tagged_fields);
113 Foreign::kSize);
114 107
115 case SYMBOL_TYPE: 108 case SYMBOL_TYPE:
116 return kVisitSymbol; 109 return kVisitSymbol;
117 110
118 case FILLER_TYPE: 111 case FILLER_TYPE:
119 return kVisitDataObjectGeneric; 112 return kVisitDataObjectGeneric;
120 113
121 case JS_ARRAY_BUFFER_TYPE: 114 case JS_ARRAY_BUFFER_TYPE:
122 return kVisitJSArrayBuffer; 115 return kVisitJSArrayBuffer;
123 116
124 case JS_TYPED_ARRAY_TYPE: 117 case JS_TYPED_ARRAY_TYPE:
125 return kVisitJSTypedArray; 118 return kVisitJSTypedArray;
126 119
127 case JS_DATA_VIEW_TYPE: 120 case JS_DATA_VIEW_TYPE:
128 return kVisitJSDataView; 121 return kVisitJSDataView;
129 122
130 case JS_OBJECT_TYPE: 123 case JS_OBJECT_TYPE:
131 case JS_CONTEXT_EXTENSION_OBJECT_TYPE: 124 case JS_CONTEXT_EXTENSION_OBJECT_TYPE:
132 case JS_GENERATOR_OBJECT_TYPE: 125 case JS_GENERATOR_OBJECT_TYPE:
133 case JS_MODULE_TYPE: 126 case JS_MODULE_TYPE:
134 case JS_VALUE_TYPE: 127 case JS_VALUE_TYPE:
135 case JS_DATE_TYPE: 128 case JS_DATE_TYPE:
136 case JS_ARRAY_TYPE: 129 case JS_ARRAY_TYPE:
137 case JS_GLOBAL_PROXY_TYPE: 130 case JS_GLOBAL_PROXY_TYPE:
138 case JS_GLOBAL_OBJECT_TYPE: 131 case JS_GLOBAL_OBJECT_TYPE:
139 case JS_BUILTINS_OBJECT_TYPE: 132 case JS_BUILTINS_OBJECT_TYPE:
140 case JS_MESSAGE_OBJECT_TYPE: 133 case JS_MESSAGE_OBJECT_TYPE:
141 case JS_SET_ITERATOR_TYPE: 134 case JS_SET_ITERATOR_TYPE:
142 case JS_MAP_ITERATOR_TYPE: 135 case JS_MAP_ITERATOR_TYPE:
143 return GetVisitorIdForSize(kVisitJSObject, 136 return GetVisitorIdForSize(kVisitJSObject, kVisitJSObjectGeneric,
144 kVisitJSObjectGeneric, 137 instance_size, has_non_tagged_fields);
145 instance_size);
146 138
147 case JS_FUNCTION_TYPE: 139 case JS_FUNCTION_TYPE:
148 return kVisitJSFunction; 140 return kVisitJSFunction;
149 141
150 case HEAP_NUMBER_TYPE: 142 case HEAP_NUMBER_TYPE:
151 case MUTABLE_HEAP_NUMBER_TYPE: 143 case MUTABLE_HEAP_NUMBER_TYPE:
152 #define EXTERNAL_ARRAY_CASE(Type, type, TYPE, ctype, size) \ 144 #define EXTERNAL_ARRAY_CASE(Type, type, TYPE, ctype, size) \
153 case EXTERNAL_##TYPE##_ARRAY_TYPE: 145 case EXTERNAL_##TYPE##_ARRAY_TYPE:
154 146
155 TYPED_ARRAYS(EXTERNAL_ARRAY_CASE) 147 TYPED_ARRAYS(EXTERNAL_ARRAY_CASE)
156 return GetVisitorIdForSize(kVisitDataObject, 148 return GetVisitorIdForSize(kVisitDataObject, kVisitDataObjectGeneric,
157 kVisitDataObjectGeneric, 149 instance_size, has_non_tagged_fields);
158 instance_size);
159 #undef EXTERNAL_ARRAY_CASE 150 #undef EXTERNAL_ARRAY_CASE
160 151
161 case FIXED_UINT8_ARRAY_TYPE: 152 case FIXED_UINT8_ARRAY_TYPE:
162 case FIXED_INT8_ARRAY_TYPE: 153 case FIXED_INT8_ARRAY_TYPE:
163 case FIXED_UINT16_ARRAY_TYPE: 154 case FIXED_UINT16_ARRAY_TYPE:
164 case FIXED_INT16_ARRAY_TYPE: 155 case FIXED_INT16_ARRAY_TYPE:
165 case FIXED_UINT32_ARRAY_TYPE: 156 case FIXED_UINT32_ARRAY_TYPE:
166 case FIXED_INT32_ARRAY_TYPE: 157 case FIXED_INT32_ARRAY_TYPE:
167 case FIXED_FLOAT32_ARRAY_TYPE: 158 case FIXED_FLOAT32_ARRAY_TYPE:
168 case FIXED_UINT8_CLAMPED_ARRAY_TYPE: 159 case FIXED_UINT8_CLAMPED_ARRAY_TYPE:
169 return kVisitFixedTypedArray; 160 return kVisitFixedTypedArray;
170 161
171 case FIXED_FLOAT64_ARRAY_TYPE: 162 case FIXED_FLOAT64_ARRAY_TYPE:
172 return kVisitFixedFloat64Array; 163 return kVisitFixedFloat64Array;
173 164
174 #define MAKE_STRUCT_CASE(NAME, Name, name) \ 165 #define MAKE_STRUCT_CASE(NAME, Name, name) \
175 case NAME##_TYPE: 166 case NAME##_TYPE:
176 STRUCT_LIST(MAKE_STRUCT_CASE) 167 STRUCT_LIST(MAKE_STRUCT_CASE)
177 #undef MAKE_STRUCT_CASE 168 #undef MAKE_STRUCT_CASE
178 if (instance_type == ALLOCATION_SITE_TYPE) { 169 if (instance_type == ALLOCATION_SITE_TYPE) {
179 return kVisitAllocationSite; 170 return kVisitAllocationSite;
180 } 171 }
181 172
182 return GetVisitorIdForSize(kVisitStruct, 173 return GetVisitorIdForSize(kVisitStruct, kVisitStructGeneric,
183 kVisitStructGeneric, 174 instance_size, has_non_tagged_fields);
184 instance_size);
185 175
186 default: 176 default:
187 UNREACHABLE(); 177 UNREACHABLE();
188 return kVisitorIdCount; 178 return kVisitorIdCount;
189 } 179 }
190 } 180 }
191 181
192 182
193 // We don't record weak slots during marking or scavenges. Instead we do it 183 // We don't record weak slots during marking or scavenges. Instead we do it
194 // once when we complete mark-compact cycle. Note that write barrier has no 184 // once when we complete mark-compact cycle. Note that write barrier has no
(...skipping 256 matching lines...) Expand 10 before | Expand all | Expand 10 after
451 441
452 442
453 template Object* VisitWeakList<JSArrayBuffer>( 443 template Object* VisitWeakList<JSArrayBuffer>(
454 Heap* heap, Object* list, WeakObjectRetainer* retainer); 444 Heap* heap, Object* list, WeakObjectRetainer* retainer);
455 445
456 446
457 template Object* VisitWeakList<AllocationSite>( 447 template Object* VisitWeakList<AllocationSite>(
458 Heap* heap, Object* list, WeakObjectRetainer* retainer); 448 Heap* heap, Object* list, WeakObjectRetainer* retainer);
459 449
460 } } // namespace v8::internal 450 } } // namespace v8::internal
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698