Index: src/code-stubs-hydrogen.cc |
diff --git a/src/code-stubs-hydrogen.cc b/src/code-stubs-hydrogen.cc |
index 83a994b1c31c5c16f68854f01016b2923b586dc9..d971c3c84050d2e4568862740ea0eba1ed19defb 100644 |
--- a/src/code-stubs-hydrogen.cc |
+++ b/src/code-stubs-hydrogen.cc |
@@ -450,6 +450,10 @@ Handle<Code> FastCloneShallowObjectStub::GenerateCode() { |
template <> |
HValue* CodeStubGraphBuilder<CreateAllocationSiteStub>::BuildCodeStub() { |
+ // This stub is performance sensitive, the generated code must be tuned |
+ // so that it doesn't build an eager frame. |
+ info()->MarkMustNotHaveEagerFrame(); |
+ |
HValue* size = Add<HConstant>(AllocationSite::kSize); |
HInstruction* object = Add<HAllocate>(size, HType::JSObject(), TENURED, |
JS_OBJECT_TYPE); |
@@ -523,6 +527,36 @@ Handle<Code> CreateAllocationSiteStub::GenerateCode() { |
template <> |
+HValue* CodeStubGraphBuilder<CreateWeakCellStub>::BuildCodeStub() { |
+ // This stub is performance sensitive, the generated code must be tuned |
+ // so that it doesn't build an eager frame. |
+ info()->MarkMustNotHaveEagerFrame(); |
+ |
+ HValue* size = Add<HConstant>(WeakCell::kSize); |
+ HInstruction* object = |
+ Add<HAllocate>(size, HType::JSObject(), TENURED, JS_OBJECT_TYPE); |
+ |
+ Handle<Map> weak_cell_map = isolate()->factory()->weak_cell_map(); |
+ AddStoreMapConstant(object, weak_cell_map); |
+ |
+ HInstruction* value = GetParameter(CreateWeakCellDescriptor::kValueIndex); |
+ Add<HStoreNamedField>(object, HObjectAccess::ForWeakCellValue(), value); |
+ Add<HStoreNamedField>(object, HObjectAccess::ForWeakCellNext(), |
+ graph()->GetConstantUndefined()); |
+ |
+ HInstruction* feedback_vector = |
+ GetParameter(CreateWeakCellDescriptor::kVectorIndex); |
+ HInstruction* slot = GetParameter(CreateWeakCellDescriptor::kSlotIndex); |
+ Add<HStoreKeyed>(feedback_vector, slot, object, FAST_ELEMENTS, |
+ INITIALIZING_STORE); |
+ return graph()->GetConstant0(); |
+} |
+ |
+ |
+Handle<Code> CreateWeakCellStub::GenerateCode() { return DoGenerateCode(this); } |
+ |
+ |
+template <> |
HValue* CodeStubGraphBuilder<LoadScriptContextFieldStub>::BuildCodeStub() { |
int context_index = casted_stub()->context_index(); |
int slot_index = casted_stub()->slot_index(); |