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/builtins/builtins-handler.cc

Issue 2622003004: [ic] Port {Load,Store}IC_Normal to TF (Closed)
Patch Set: fix nit Created 3 years, 11 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/builtins/builtins.h ('k') | src/ia32/code-stubs-ia32.h » ('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 2016 the V8 project authors. All rights reserved. 1 // Copyright 2016 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/builtins/builtins-utils.h" 5 #include "src/builtins/builtins-utils.h"
6 #include "src/builtins/builtins.h" 6 #include "src/builtins/builtins.h"
7 #include "src/code-stub-assembler.h" 7 #include "src/code-stub-assembler.h"
8 #include "src/ic/accessor-assembler.h" 8 #include "src/ic/accessor-assembler.h"
9 #include "src/ic/handler-compiler.h" 9 #include "src/ic/handler-compiler.h"
10 #include "src/ic/ic.h" 10 #include "src/ic/ic.h"
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
101 Node* receiver = assembler.Parameter(Descriptor::kReceiver); 101 Node* receiver = assembler.Parameter(Descriptor::kReceiver);
102 Node* name = assembler.Parameter(Descriptor::kName); 102 Node* name = assembler.Parameter(Descriptor::kName);
103 Node* slot = assembler.Parameter(Descriptor::kSlot); 103 Node* slot = assembler.Parameter(Descriptor::kSlot);
104 Node* vector = assembler.Parameter(Descriptor::kVector); 104 Node* vector = assembler.Parameter(Descriptor::kVector);
105 Node* context = assembler.Parameter(Descriptor::kContext); 105 Node* context = assembler.Parameter(Descriptor::kContext);
106 106
107 assembler.TailCallRuntime(Runtime::kLoadIC_Miss, context, receiver, name, 107 assembler.TailCallRuntime(Runtime::kLoadIC_Miss, context, receiver, name,
108 slot, vector); 108 slot, vector);
109 } 109 }
110 110
111 void Builtins::Generate_LoadIC_Normal(MacroAssembler* masm) { 111 TF_BUILTIN(LoadIC_Normal, CodeStubAssembler) {
112 LoadIC::GenerateNormal(masm); 112 typedef LoadWithVectorDescriptor Descriptor;
113
114 Node* receiver = Parameter(Descriptor::kReceiver);
115 Node* name = Parameter(Descriptor::kName);
116 Node* context = Parameter(Descriptor::kContext);
117
118 Label slow(this);
119 {
120 Node* properties = LoadProperties(receiver);
121 Variable var_name_index(this, MachineType::PointerRepresentation());
122 Label found(this, &var_name_index);
123 NameDictionaryLookup<NameDictionary>(properties, name, &found,
124 &var_name_index, &slow);
125 Bind(&found);
126 {
127 Variable var_details(this, MachineRepresentation::kWord32);
128 Variable var_value(this, MachineRepresentation::kTagged);
129 LoadPropertyFromNameDictionary(properties, var_name_index.value(),
130 &var_details, &var_value);
131 Node* value = CallGetterIfAccessor(var_value.value(), var_details.value(),
132 context, receiver, &slow);
133 Return(value);
134 }
135 }
136
137 Bind(&slow);
138 TailCallRuntime(Runtime::kGetProperty, context, receiver, name);
113 } 139 }
114 140
115 void Builtins::Generate_LoadIC_Slow(compiler::CodeAssemblerState* state) { 141 void Builtins::Generate_LoadIC_Slow(compiler::CodeAssemblerState* state) {
116 typedef compiler::Node Node; 142 typedef compiler::Node Node;
117 typedef LoadWithVectorDescriptor Descriptor; 143 typedef LoadWithVectorDescriptor Descriptor;
118 CodeStubAssembler assembler(state); 144 CodeStubAssembler assembler(state);
119 145
120 Node* receiver = assembler.Parameter(Descriptor::kReceiver); 146 Node* receiver = assembler.Parameter(Descriptor::kReceiver);
121 Node* name = assembler.Parameter(Descriptor::kName); 147 Node* name = assembler.Parameter(Descriptor::kName);
122 Node* context = assembler.Parameter(Descriptor::kContext); 148 Node* context = assembler.Parameter(Descriptor::kContext);
(...skipping 10 matching lines...) Expand all
133 Node* name = assembler.Parameter(Descriptor::kName); 159 Node* name = assembler.Parameter(Descriptor::kName);
134 Node* value = assembler.Parameter(Descriptor::kValue); 160 Node* value = assembler.Parameter(Descriptor::kValue);
135 Node* slot = assembler.Parameter(Descriptor::kSlot); 161 Node* slot = assembler.Parameter(Descriptor::kSlot);
136 Node* vector = assembler.Parameter(Descriptor::kVector); 162 Node* vector = assembler.Parameter(Descriptor::kVector);
137 Node* context = assembler.Parameter(Descriptor::kContext); 163 Node* context = assembler.Parameter(Descriptor::kContext);
138 164
139 assembler.TailCallRuntime(Runtime::kStoreIC_Miss, context, value, slot, 165 assembler.TailCallRuntime(Runtime::kStoreIC_Miss, context, value, slot,
140 vector, receiver, name); 166 vector, receiver, name);
141 } 167 }
142 168
143 void Builtins::Generate_StoreIC_Normal(MacroAssembler* masm) { 169 TF_BUILTIN(StoreIC_Normal, CodeStubAssembler) {
144 StoreIC::GenerateNormal(masm); 170 typedef StoreWithVectorDescriptor Descriptor;
171
172 Node* receiver = Parameter(Descriptor::kReceiver);
173 Node* name = Parameter(Descriptor::kName);
174 Node* value = Parameter(Descriptor::kValue);
175 Node* slot = Parameter(Descriptor::kSlot);
176 Node* vector = Parameter(Descriptor::kVector);
177 Node* context = Parameter(Descriptor::kContext);
178
179 Label slow(this);
180 {
181 Node* properties = LoadProperties(receiver);
182 Variable var_name_index(this, MachineType::PointerRepresentation());
183 Label found(this, &var_name_index);
184 NameDictionaryLookup<NameDictionary>(properties, name, &found,
185 &var_name_index, &slow);
186 Bind(&found);
187 {
188 const int kNameToDetailsOffset = (NameDictionary::kEntryDetailsIndex -
189 NameDictionary::kEntryKeyIndex) *
190 kPointerSize;
191 Node* details = LoadFixedArrayElement(properties, var_name_index.value(),
192 kNameToDetailsOffset);
193 // Check that the property is a writable data property (no accessor).
194 const int kTypeAndReadOnlyMask = PropertyDetails::KindField::kMask |
195 PropertyDetails::kAttributesReadOnlyMask;
196 STATIC_ASSERT(kData == 0);
197 GotoIf(IsSetSmi(details, kTypeAndReadOnlyMask), &slow);
198 const int kNameToValueOffset =
199 (NameDictionary::kEntryValueIndex - NameDictionary::kEntryKeyIndex) *
200 kPointerSize;
201 StoreFixedArrayElement(properties, var_name_index.value(), value,
202 UPDATE_WRITE_BARRIER, kNameToValueOffset);
203 Return(value);
204 }
205 }
206
207 Bind(&slow);
208 TailCallRuntime(Runtime::kStoreIC_Miss, context, value, slot, vector,
209 receiver, name);
145 } 210 }
146 211
147 void Builtins::Generate_StoreIC_Setter_ForDeopt(MacroAssembler* masm) { 212 void Builtins::Generate_StoreIC_Setter_ForDeopt(MacroAssembler* masm) {
148 NamedStoreHandlerCompiler::GenerateStoreViaSetterForDeopt(masm); 213 NamedStoreHandlerCompiler::GenerateStoreViaSetterForDeopt(masm);
149 } 214 }
150 215
151 namespace { 216 namespace {
152 void Generate_StoreIC_Slow(compiler::CodeAssemblerState* state, 217 void Generate_StoreIC_Slow(compiler::CodeAssemblerState* state,
153 LanguageMode language_mode) { 218 LanguageMode language_mode) {
154 typedef compiler::Node Node; 219 typedef compiler::Node Node;
(...skipping 18 matching lines...) Expand all
173 Generate_StoreIC_Slow(state, SLOPPY); 238 Generate_StoreIC_Slow(state, SLOPPY);
174 } 239 }
175 240
176 void Builtins::Generate_StoreIC_SlowStrict( 241 void Builtins::Generate_StoreIC_SlowStrict(
177 compiler::CodeAssemblerState* state) { 242 compiler::CodeAssemblerState* state) {
178 Generate_StoreIC_Slow(state, STRICT); 243 Generate_StoreIC_Slow(state, STRICT);
179 } 244 }
180 245
181 } // namespace internal 246 } // namespace internal
182 } // namespace v8 247 } // namespace v8
OLDNEW
« no previous file with comments | « src/builtins/builtins.h ('k') | src/ia32/code-stubs-ia32.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698