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

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

Issue 2189663002: Add a flag to help platform ports bootstrap V8 (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Rename flag 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.cc ('k') | src/crankshaft/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 <memory> 7 #include <memory>
8 8
9 #include "src/bailout-reason.h" 9 #include "src/bailout-reason.h"
10 #include "src/crankshaft/hydrogen.h" 10 #include "src/crankshaft/hydrogen.h"
(...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after
241 // Create the code object. 241 // Create the code object.
242 CodeDesc desc; 242 CodeDesc desc;
243 masm.GetCode(&desc); 243 masm.GetCode(&desc);
244 244
245 // Copy the generated code into a heap object. 245 // Copy the generated code into a heap object.
246 Handle<Code> new_object = factory->NewCode( 246 Handle<Code> new_object = factory->NewCode(
247 desc, GetCodeFlags(), masm.CodeObject(), NeedsImmovableCode()); 247 desc, GetCodeFlags(), masm.CodeObject(), NeedsImmovableCode());
248 return new_object; 248 return new_object;
249 } 249 }
250 250
251 Handle<Code> HydrogenCodeStub::GenerateRuntimeTailCall(
252 CodeStubDescriptor* descriptor) {
253 const char* name = CodeStub::MajorName(MajorKey());
254 Zone zone(isolate()->allocator());
255 CallInterfaceDescriptor interface_descriptor(GetCallInterfaceDescriptor());
256 CodeStubAssembler assembler(isolate(), &zone, interface_descriptor,
257 GetCodeFlags(), name);
258 int total_params = interface_descriptor.GetStackParameterCount() +
259 interface_descriptor.GetRegisterParameterCount();
260 switch (total_params) {
261 case 0:
262 assembler.TailCallRuntime(descriptor->miss_handler_id(),
263 assembler.Parameter(0));
264 break;
265 case 1:
266 assembler.TailCallRuntime(descriptor->miss_handler_id(),
267 assembler.Parameter(1), assembler.Parameter(0));
268 break;
269 case 2:
270 assembler.TailCallRuntime(descriptor->miss_handler_id(),
271 assembler.Parameter(2), assembler.Parameter(0),
272 assembler.Parameter(1));
273 break;
274 case 3:
275 assembler.TailCallRuntime(descriptor->miss_handler_id(),
276 assembler.Parameter(3), assembler.Parameter(0),
277 assembler.Parameter(1), assembler.Parameter(2));
278 break;
279 case 4:
280 assembler.TailCallRuntime(descriptor->miss_handler_id(),
281 assembler.Parameter(4), assembler.Parameter(0),
282 assembler.Parameter(1), assembler.Parameter(2),
283 assembler.Parameter(3));
284 break;
285 default:
286 UNIMPLEMENTED();
287 break;
288 }
289 return assembler.GenerateCode();
290 }
251 291
252 template <class Stub> 292 template <class Stub>
253 static Handle<Code> DoGenerateCode(Stub* stub) { 293 static Handle<Code> DoGenerateCode(Stub* stub) {
254 Isolate* isolate = stub->isolate(); 294 Isolate* isolate = stub->isolate();
255 CodeStubDescriptor descriptor(stub); 295 CodeStubDescriptor descriptor(stub);
256 296
297 if (FLAG_minimal && descriptor.has_miss_handler()) {
298 return stub->GenerateRuntimeTailCall(&descriptor);
299 }
300
257 // If we are uninitialized we can use a light-weight stub to enter 301 // If we are uninitialized we can use a light-weight stub to enter
258 // the runtime that is significantly faster than using the standard 302 // the runtime that is significantly faster than using the standard
259 // stub-failure deopt mechanism. 303 // stub-failure deopt mechanism.
260 if (stub->IsUninitialized() && descriptor.has_miss_handler()) { 304 if (stub->IsUninitialized() && descriptor.has_miss_handler()) {
261 DCHECK(!descriptor.stack_parameter_count().is_valid()); 305 DCHECK(!descriptor.stack_parameter_count().is_valid());
262 return stub->GenerateLightweightMissCode(descriptor.miss_handler()); 306 return stub->GenerateLightweightMissCode(descriptor.miss_handler());
263 } 307 }
264 base::ElapsedTimer timer; 308 base::ElapsedTimer timer;
265 if (FLAG_profile_hydrogen_code_stub_compilation) { 309 if (FLAG_profile_hydrogen_code_stub_compilation) {
266 timer.Start(); 310 timer.Start();
(...skipping 1836 matching lines...) Expand 10 before | Expand all | Expand 10 after
2103 return Pop(); 2147 return Pop();
2104 } 2148 }
2105 2149
2106 2150
2107 Handle<Code> KeyedLoadGenericStub::GenerateCode() { 2151 Handle<Code> KeyedLoadGenericStub::GenerateCode() {
2108 return DoGenerateCode(this); 2152 return DoGenerateCode(this);
2109 } 2153 }
2110 2154
2111 } // namespace internal 2155 } // namespace internal
2112 } // namespace v8 2156 } // namespace v8
OLDNEW
« no previous file with comments | « src/code-stubs.cc ('k') | src/crankshaft/hydrogen.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698