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

Side by Side Diff: src/code-stubs.cc

Issue 2184073002: [stubs] Port CreateAllocationSiteStub to Turbofan (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 4 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
« no previous file with comments | « src/code-stubs.h ('k') | src/code-stubs-hydrogen.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 #include "src/code-stubs.h" 5 #include "src/code-stubs.h"
6 6
7 #include <sstream> 7 #include <sstream>
8 8
9 #include "src/bootstrapper.h" 9 #include "src/bootstrapper.h"
10 #include "src/code-factory.h" 10 #include "src/code-factory.h"
(...skipping 4102 matching lines...) Expand 10 before | Expand all | Expand 10 after
4113 4113
4114 4114
4115 void FastCloneShallowArrayStub::InitializeDescriptor( 4115 void FastCloneShallowArrayStub::InitializeDescriptor(
4116 CodeStubDescriptor* descriptor) { 4116 CodeStubDescriptor* descriptor) {
4117 FastCloneShallowArrayDescriptor call_descriptor(isolate()); 4117 FastCloneShallowArrayDescriptor call_descriptor(isolate());
4118 descriptor->Initialize( 4118 descriptor->Initialize(
4119 Runtime::FunctionForId(Runtime::kCreateArrayLiteralStubBailout)->entry); 4119 Runtime::FunctionForId(Runtime::kCreateArrayLiteralStubBailout)->entry);
4120 } 4120 }
4121 4121
4122 4122
4123 void CreateAllocationSiteStub::InitializeDescriptor(CodeStubDescriptor* d) {}
4124
4125
4126 void CreateWeakCellStub::InitializeDescriptor(CodeStubDescriptor* d) {} 4123 void CreateWeakCellStub::InitializeDescriptor(CodeStubDescriptor* d) {}
4127 4124
4128 4125
4129 void RegExpConstructResultStub::InitializeDescriptor( 4126 void RegExpConstructResultStub::InitializeDescriptor(
4130 CodeStubDescriptor* descriptor) { 4127 CodeStubDescriptor* descriptor) {
4131 descriptor->Initialize( 4128 descriptor->Initialize(
4132 Runtime::FunctionForId(Runtime::kRegExpConstructResult)->entry); 4129 Runtime::FunctionForId(Runtime::kRegExpConstructResult)->entry);
4133 } 4130 }
4134 4131
4135 4132
(...skipping 563 matching lines...) Expand 10 before | Expand all | Expand 10 after
4699 4696
4700 4697
4701 void ProfileEntryHookStub::EntryHookTrampoline(intptr_t function, 4698 void ProfileEntryHookStub::EntryHookTrampoline(intptr_t function,
4702 intptr_t stack_pointer, 4699 intptr_t stack_pointer,
4703 Isolate* isolate) { 4700 Isolate* isolate) {
4704 FunctionEntryHook entry_hook = isolate->function_entry_hook(); 4701 FunctionEntryHook entry_hook = isolate->function_entry_hook();
4705 DCHECK(entry_hook != NULL); 4702 DCHECK(entry_hook != NULL);
4706 entry_hook(function, stack_pointer); 4703 entry_hook(function, stack_pointer);
4707 } 4704 }
4708 4705
4706 void CreateAllocationSiteStub::GenerateAssembly(
4707 CodeStubAssembler* assembler) const {
4708 typedef compiler::Node Node;
4709 Node* size = assembler->IntPtrConstant(AllocationSite::kSize);
4710 Node* site = assembler->Allocate(size, compiler::CodeAssembler::kPretenured);
4711
4712 // Store the map
4713 Node* map =
4714 assembler->HeapConstant(isolate()->factory()->allocation_site_map());
4715 assembler->StoreMapNoWriteBarrier(site, map);
4716
4717 Node* kind =
4718 assembler->SmiConstant(Smi::FromInt(GetInitialFastElementsKind()));
4719 assembler->StoreObjectFieldNoWriteBarrier(
4720 site, AllocationSite::kTransitionInfoOffset, kind);
4721
4722 // Unlike literals, constructed arrays don't have nested sites
4723 Node* zero = assembler->IntPtrConstant(0);
4724 assembler->StoreObjectFieldNoWriteBarrier(
4725 site, AllocationSite::kNestedSiteOffset, zero);
4726
4727 // Pretenuring calculation field.
4728 assembler->StoreObjectFieldNoWriteBarrier(
4729 site, AllocationSite::kPretenureDataOffset, zero);
4730
4731 // Pretenuring memento creation count field.
4732 assembler->StoreObjectFieldNoWriteBarrier(
4733 site, AllocationSite::kPretenureCreateCountOffset, zero);
4734
4735 // Store an empty fixed array for the code dependency.
4736 Node* empty_fixed_array =
4737 assembler->HeapConstant(isolate()->factory()->empty_fixed_array());
4738 assembler->StoreObjectFieldNoWriteBarrier(
4739 site, AllocationSite::kDependentCodeOffset, empty_fixed_array);
4740
4741 // Link the object to the allocation site list
4742 Node* site_list = assembler->ExternalConstant(
4743 ExternalReference::allocation_sites_list_address(isolate()));
4744 Node* next_site = assembler->LoadBufferObject(site_list, 0);
4745
4746 // TODO(mvstanton): This is a store to a weak pointer, which we may want to
4747 // mark as such in order to skip the write barrier, once we have a unified
4748 // system for weakness. For now we decided to keep it like this because having
4749 // an initial write barrier backed store makes this pointer strong until the
4750 // next GC, and allocation sites are designed to survive several GCs anyway.
4751 assembler->StoreObjectField(site, AllocationSite::kWeakNextOffset, next_site);
4752 assembler->StoreNoWriteBarrier(MachineRepresentation::kTagged, site_list,
4753 site);
4754
4755 Node* feedback_vector = assembler->Parameter(Descriptor::kVector);
4756 Node* slot = assembler->Parameter(Descriptor::kSlot);
4757
4758 assembler->StoreFixedArrayElement(feedback_vector, slot, site,
4759 UPDATE_WRITE_BARRIER,
4760 CodeStubAssembler::SMI_PARAMETERS);
4761
4762 assembler->Return(site);
4763 }
4764
4709 void ArrayNoArgumentConstructorStub::GenerateAssembly( 4765 void ArrayNoArgumentConstructorStub::GenerateAssembly(
4710 CodeStubAssembler* assembler) const { 4766 CodeStubAssembler* assembler) const {
4711 typedef compiler::Node Node; 4767 typedef compiler::Node Node;
4712 Node* native_context = assembler->LoadObjectField( 4768 Node* native_context = assembler->LoadObjectField(
4713 assembler->Parameter(Descriptor::kFunction), JSFunction::kContextOffset); 4769 assembler->Parameter(Descriptor::kFunction), JSFunction::kContextOffset);
4714 bool track_allocation_site = 4770 bool track_allocation_site =
4715 AllocationSite::GetMode(elements_kind()) == TRACK_ALLOCATION_SITE && 4771 AllocationSite::GetMode(elements_kind()) == TRACK_ALLOCATION_SITE &&
4716 override_mode() != DISABLE_ALLOCATION_SITES; 4772 override_mode() != DISABLE_ALLOCATION_SITES;
4717 Node* allocation_site = 4773 Node* allocation_site =
4718 track_allocation_site ? assembler->Parameter(Descriptor::kAllocationSite) 4774 track_allocation_site ? assembler->Parameter(Descriptor::kAllocationSite)
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after
4867 if (type->Is(Type::UntaggedPointer())) { 4923 if (type->Is(Type::UntaggedPointer())) {
4868 return Representation::External(); 4924 return Representation::External();
4869 } 4925 }
4870 4926
4871 DCHECK(!type->Is(Type::Untagged())); 4927 DCHECK(!type->Is(Type::Untagged()));
4872 return Representation::Tagged(); 4928 return Representation::Tagged();
4873 } 4929 }
4874 4930
4875 } // namespace internal 4931 } // namespace internal
4876 } // namespace v8 4932 } // namespace v8
OLDNEW
« no previous file with comments | « src/code-stubs.h ('k') | src/code-stubs-hydrogen.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698