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

Side by Side Diff: src/objects-inl.h

Issue 751643005: Reland of "Enable inobject double fields unboxing for 64-bit archs." (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Fixes Created 6 years 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 | « src/objects.h ('k') | test/cctest/test-unboxed-doubles.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 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 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 // Review notes: 5 // Review notes:
6 // 6 //
7 // - The use of macros in these inline functions may seem superfluous 7 // - The use of macros in these inline functions may seem superfluous
8 // but it is absolutely needed to make sure gcc generates optimal 8 // but it is absolutely needed to make sure gcc generates optimal
9 // code. gcc is not happy when attempting to inline too deep. 9 // code. gcc is not happy when attempting to inline too deep.
10 // 10 //
(...skipping 5202 matching lines...) Expand 10 before | Expand all | Expand 10 after
5213 map->set_transitions(*transitions); 5213 map->set_transitions(*transitions);
5214 } 5214 }
5215 5215
5216 5216
5217 LayoutDescriptor* Map::layout_descriptor_gc_safe() { 5217 LayoutDescriptor* Map::layout_descriptor_gc_safe() {
5218 Object* layout_desc = READ_FIELD(this, kLayoutDecriptorOffset); 5218 Object* layout_desc = READ_FIELD(this, kLayoutDecriptorOffset);
5219 return LayoutDescriptor::cast_gc_safe(layout_desc); 5219 return LayoutDescriptor::cast_gc_safe(layout_desc);
5220 } 5220 }
5221 5221
5222 5222
5223 bool Map::HasFastPointerLayout() const {
5224 Object* layout_desc = READ_FIELD(this, kLayoutDecriptorOffset);
5225 return LayoutDescriptor::IsFastPointerLayout(layout_desc);
5226 }
5227
5228
5223 void Map::UpdateDescriptors(DescriptorArray* descriptors, 5229 void Map::UpdateDescriptors(DescriptorArray* descriptors,
5224 LayoutDescriptor* layout_desc) { 5230 LayoutDescriptor* layout_desc) {
5225 set_instance_descriptors(descriptors); 5231 set_instance_descriptors(descriptors);
5226 if (FLAG_unbox_double_fields) { 5232 if (FLAG_unbox_double_fields) {
5227 if (layout_descriptor()->IsSlowLayout()) { 5233 if (layout_descriptor()->IsSlowLayout()) {
5228 set_layout_descriptor(layout_desc); 5234 set_layout_descriptor(layout_desc);
5229 } 5235 }
5230 SLOW_DCHECK(layout_descriptor()->IsConsistentWithMap(this)); 5236 SLOW_DCHECK(layout_descriptor()->IsConsistentWithMap(this));
5231 DCHECK(visitor_id() == StaticVisitorBase::GetVisitorId(this)); 5237 DCHECK(visitor_id() == StaticVisitorBase::GetVisitorId(this));
5232 } 5238 }
(...skipping 2117 matching lines...) Expand 10 before | Expand all | Expand 10 after
7350 v->VisitPointer(HeapObject::RawField(object, offset)); 7356 v->VisitPointer(HeapObject::RawField(object, offset));
7351 } 7357 }
7352 } 7358 }
7353 } 7359 }
7354 7360
7355 7361
7356 template<int start_offset, int end_offset, int size> 7362 template<int start_offset, int end_offset, int size>
7357 void FixedBodyDescriptor<start_offset, end_offset, size>::IterateBody( 7363 void FixedBodyDescriptor<start_offset, end_offset, size>::IterateBody(
7358 HeapObject* obj, 7364 HeapObject* obj,
7359 ObjectVisitor* v) { 7365 ObjectVisitor* v) {
7360 if (!FLAG_unbox_double_fields || 7366 if (!FLAG_unbox_double_fields || obj->map()->HasFastPointerLayout()) {
7361 obj->map()->layout_descriptor()->IsFastPointerLayout()) {
Igor Sheludko 2014/11/24 09:32:10 It is not correct to call here layout_descriptor()
7362 v->VisitPointers(HeapObject::RawField(obj, start_offset), 7367 v->VisitPointers(HeapObject::RawField(obj, start_offset),
7363 HeapObject::RawField(obj, end_offset)); 7368 HeapObject::RawField(obj, end_offset));
7364 } else { 7369 } else {
7365 IterateBodyUsingLayoutDescriptor(obj, start_offset, end_offset, v); 7370 IterateBodyUsingLayoutDescriptor(obj, start_offset, end_offset, v);
7366 } 7371 }
7367 } 7372 }
7368 7373
7369 7374
7370 template<int start_offset> 7375 template<int start_offset>
7371 void FlexibleBodyDescriptor<start_offset>::IterateBody(HeapObject* obj, 7376 void FlexibleBodyDescriptor<start_offset>::IterateBody(HeapObject* obj,
7372 int object_size, 7377 int object_size,
7373 ObjectVisitor* v) { 7378 ObjectVisitor* v) {
7374 if (!FLAG_unbox_double_fields || 7379 if (!FLAG_unbox_double_fields || obj->map()->HasFastPointerLayout()) {
7375 obj->map()->layout_descriptor()->IsFastPointerLayout()) {
7376 v->VisitPointers(HeapObject::RawField(obj, start_offset), 7380 v->VisitPointers(HeapObject::RawField(obj, start_offset),
7377 HeapObject::RawField(obj, object_size)); 7381 HeapObject::RawField(obj, object_size));
7378 } else { 7382 } else {
7379 IterateBodyUsingLayoutDescriptor(obj, start_offset, object_size, v); 7383 IterateBodyUsingLayoutDescriptor(obj, start_offset, object_size, v);
7380 } 7384 }
7381 } 7385 }
7382 7386
7383 7387
7384 template<class Derived, class TableType> 7388 template<class Derived, class TableType>
7385 Object* OrderedHashTableIterator<Derived, TableType>::CurrentKey() { 7389 Object* OrderedHashTableIterator<Derived, TableType>::CurrentKey() {
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
7440 #undef READ_SHORT_FIELD 7444 #undef READ_SHORT_FIELD
7441 #undef WRITE_SHORT_FIELD 7445 #undef WRITE_SHORT_FIELD
7442 #undef READ_BYTE_FIELD 7446 #undef READ_BYTE_FIELD
7443 #undef WRITE_BYTE_FIELD 7447 #undef WRITE_BYTE_FIELD
7444 #undef NOBARRIER_READ_BYTE_FIELD 7448 #undef NOBARRIER_READ_BYTE_FIELD
7445 #undef NOBARRIER_WRITE_BYTE_FIELD 7449 #undef NOBARRIER_WRITE_BYTE_FIELD
7446 7450
7447 } } // namespace v8::internal 7451 } } // namespace v8::internal
7448 7452
7449 #endif // V8_OBJECTS_INL_H_ 7453 #endif // V8_OBJECTS_INL_H_
OLDNEW
« no previous file with comments | « src/objects.h ('k') | test/cctest/test-unboxed-doubles.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698