| Index: src/builtins/builtins-constructor-gen.cc
|
| diff --git a/src/builtins/builtins-constructor-gen.cc b/src/builtins/builtins-constructor-gen.cc
|
| index 08891364bb13d3c7804be33ae05a9a797bcb6d02..604a4ceafeb2addc1bdce971ac0becf7261d181c 100644
|
| --- a/src/builtins/builtins-constructor-gen.cc
|
| +++ b/src/builtins/builtins-constructor-gen.cc
|
| @@ -259,76 +259,8 @@ Node* ConstructorBuiltinsAssembler::EmitFastNewObject(Node* context,
|
|
|
| Node* object = AllocateJSObjectFromMap(initial_map, properties.value());
|
|
|
| - Node* instance_size_words = ChangeUint32ToWord(LoadObjectField(
|
| - initial_map, Map::kInstanceSizeOffset, MachineType::Uint8()));
|
| - Node* instance_size =
|
| - WordShl(instance_size_words, IntPtrConstant(kPointerSizeLog2));
|
| -
|
| // Perform in-object slack tracking if requested.
|
| - Node* bit_field3 = LoadMapBitField3(initial_map);
|
| - Label slack_tracking(this), finalize(this, Label::kDeferred), done(this);
|
| - GotoIf(IsSetWord32<Map::ConstructionCounter>(bit_field3), &slack_tracking);
|
| -
|
| - // Initialize remaining fields.
|
| - {
|
| - Comment("no slack tracking");
|
| - InitializeFieldsWithRoot(object, IntPtrConstant(JSObject::kHeaderSize),
|
| - instance_size, Heap::kUndefinedValueRootIndex);
|
| - Goto(&end);
|
| - }
|
| -
|
| - {
|
| - BIND(&slack_tracking);
|
| -
|
| - // Decrease generous allocation count.
|
| - STATIC_ASSERT(Map::ConstructionCounter::kNext == 32);
|
| - Comment("update allocation count");
|
| - Node* new_bit_field3 = Int32Sub(
|
| - bit_field3, Int32Constant(1 << Map::ConstructionCounter::kShift));
|
| - StoreObjectFieldNoWriteBarrier(initial_map, Map::kBitField3Offset,
|
| - new_bit_field3,
|
| - MachineRepresentation::kWord32);
|
| - GotoIf(IsClearWord32<Map::ConstructionCounter>(new_bit_field3), &finalize);
|
| -
|
| - Node* unused_fields = LoadObjectField(
|
| - initial_map, Map::kUnusedPropertyFieldsOffset, MachineType::Uint8());
|
| - Node* used_size =
|
| - IntPtrSub(instance_size, WordShl(ChangeUint32ToWord(unused_fields),
|
| - IntPtrConstant(kPointerSizeLog2)));
|
| -
|
| - Comment("initialize filler fields (no finalize)");
|
| - InitializeFieldsWithRoot(object, used_size, instance_size,
|
| - Heap::kOnePointerFillerMapRootIndex);
|
| -
|
| - Comment("initialize undefined fields (no finalize)");
|
| - InitializeFieldsWithRoot(object, IntPtrConstant(JSObject::kHeaderSize),
|
| - used_size, Heap::kUndefinedValueRootIndex);
|
| - Goto(&end);
|
| - }
|
| -
|
| - {
|
| - // Finalize the instance size.
|
| - BIND(&finalize);
|
| -
|
| - Node* unused_fields = LoadObjectField(
|
| - initial_map, Map::kUnusedPropertyFieldsOffset, MachineType::Uint8());
|
| - Node* used_size =
|
| - IntPtrSub(instance_size, WordShl(ChangeUint32ToWord(unused_fields),
|
| - IntPtrConstant(kPointerSizeLog2)));
|
| -
|
| - Comment("initialize filler fields (finalize)");
|
| - InitializeFieldsWithRoot(object, used_size, instance_size,
|
| - Heap::kOnePointerFillerMapRootIndex);
|
| -
|
| - Comment("initialize undefined fields (finalize)");
|
| - InitializeFieldsWithRoot(object, IntPtrConstant(JSObject::kHeaderSize),
|
| - used_size, Heap::kUndefinedValueRootIndex);
|
| -
|
| - CallRuntime(Runtime::kFinalizeInstanceSize, context, initial_map);
|
| - Goto(&end);
|
| - }
|
| -
|
| - BIND(&end);
|
| + HandleSlackTracking(context, object, initial_map, JSObject::kHeaderSize);
|
| return object;
|
| }
|
|
|
|
|