OLD | NEW |
---|---|
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/compiler/pipeline.h" | |
10 #include "src/cpu-profiler.h" | 11 #include "src/cpu-profiler.h" |
11 #include "src/factory.h" | 12 #include "src/factory.h" |
12 #include "src/gdb-jit.h" | 13 #include "src/gdb-jit.h" |
13 #include "src/ic/handler-compiler.h" | 14 #include "src/ic/handler-compiler.h" |
14 #include "src/ic/ic.h" | 15 #include "src/ic/ic.h" |
15 #include "src/macro-assembler.h" | 16 #include "src/macro-assembler.h" |
17 #include "src/parser.h" | |
18 | |
19 using namespace v8::internal::compiler; | |
16 | 20 |
17 namespace v8 { | 21 namespace v8 { |
18 namespace internal { | 22 namespace internal { |
19 | 23 |
20 | 24 |
21 CodeStubDescriptor::CodeStubDescriptor(CodeStub* stub) | 25 CodeStubDescriptor::CodeStubDescriptor(CodeStub* stub) |
22 : call_descriptor_(stub->GetCallInterfaceDescriptor()), | 26 : call_descriptor_(stub->GetCallInterfaceDescriptor()), |
23 stack_parameter_count_(no_reg), | 27 stack_parameter_count_(no_reg), |
24 hint_stack_parameter_count_(-1), | 28 hint_stack_parameter_count_(-1), |
25 function_mode_(NOT_JS_FUNCTION_STUB_MODE), | 29 function_mode_(NOT_JS_FUNCTION_STUB_MODE), |
(...skipping 420 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
446 state.RemoveAll(); | 450 state.RemoveAll(); |
447 state.Add(GENERIC); | 451 state.Add(GENERIC); |
448 } else { | 452 } else { |
449 state.Add(MONOMORPHIC_MAP); | 453 state.Add(MONOMORPHIC_MAP); |
450 } | 454 } |
451 TraceTransition(old_state, state); | 455 TraceTransition(old_state, state); |
452 set_sub_minor_key(TypesBits::update(sub_minor_key(), state.ToIntegral())); | 456 set_sub_minor_key(TypesBits::update(sub_minor_key(), state.ToIntegral())); |
453 } | 457 } |
454 | 458 |
455 | 459 |
460 namespace { | |
461 | |
462 static Handle<JSFunction> GetFunction(Isolate* isolate, const char* name) { | |
Benedikt Meurer
2015/05/08 12:17:07
Nit: no static inside anonymous namespace.
danno
2015/05/08 15:28:01
Done.
| |
463 v8::ExtensionConfiguration no_extensions; | |
464 Handle<Context> ctx = isolate->bootstrapper()->CreateEnvironment( | |
465 MaybeHandle<JSGlobalProxy>(), v8::Handle<v8::ObjectTemplate>(), | |
466 &no_extensions); | |
467 Handle<JSBuiltinsObject> builtins = handle(ctx->builtins()); | |
468 MaybeHandle<Object> fun = Object::GetProperty(isolate, builtins, name); | |
469 Handle<JSFunction> function = Handle<JSFunction>::cast(fun.ToHandleChecked()); | |
470 DCHECK(!function->IsUndefined() && | |
471 "JavaScript implementation of stub not found"); | |
472 // Just to make sure nobody calls this... | |
473 function->set_code(isolate->builtins()->builtin(Builtins::kIllegal)); | |
474 return function; | |
475 } | |
476 }; | |
Benedikt Meurer
2015/05/08 12:17:07
Remove ; and add empty line before, plus add // na
danno
2015/05/08 15:28:01
Done.
| |
477 | |
478 | |
479 Handle<Code> TurboFanCodeStub::GenerateCode() { | |
480 Zone zone; | |
481 // Build a "hybrid" CompilationInfo for a JSFunction/CodeStub pair. | |
482 ParseInfo parse_info(&zone, GetFunction(isolate(), GetFunctionName())); | |
483 CompilationInfo info(&parse_info); | |
484 info.SetStub(this); | |
485 // Run a "mini pipeline", extracted from compiler.cc. | |
486 CHECK(Parser::ParseStatic(info.parse_info())); | |
487 CHECK(Compiler::Analyze(info.parse_info())); | |
488 return Pipeline(&info).GenerateCode(); | |
489 } | |
490 | |
491 | |
456 template<class StateType> | 492 template<class StateType> |
457 void HydrogenCodeStub::TraceTransition(StateType from, StateType to) { | 493 void HydrogenCodeStub::TraceTransition(StateType from, StateType to) { |
458 // Note: Although a no-op transition is semantically OK, it is hinting at a | 494 // Note: Although a no-op transition is semantically OK, it is hinting at a |
459 // bug somewhere in our state transition machinery. | 495 // bug somewhere in our state transition machinery. |
460 DCHECK(from != to); | 496 DCHECK(from != to); |
461 if (!FLAG_trace_ic) return; | 497 if (!FLAG_trace_ic) return; |
462 OFStream os(stdout); | 498 OFStream os(stdout); |
463 os << "["; | 499 os << "["; |
464 PrintBaseName(os); | 500 PrintBaseName(os); |
465 os << ": " << from << "=>" << to << "]" << std::endl; | 501 os << ": " << from << "=>" << to << "]" << std::endl; |
(...skipping 520 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
986 } | 1022 } |
987 | 1023 |
988 | 1024 |
989 InternalArrayConstructorStub::InternalArrayConstructorStub( | 1025 InternalArrayConstructorStub::InternalArrayConstructorStub( |
990 Isolate* isolate) : PlatformCodeStub(isolate) { | 1026 Isolate* isolate) : PlatformCodeStub(isolate) { |
991 InternalArrayConstructorStubBase::GenerateStubsAheadOfTime(isolate); | 1027 InternalArrayConstructorStubBase::GenerateStubsAheadOfTime(isolate); |
992 } | 1028 } |
993 | 1029 |
994 | 1030 |
995 } } // namespace v8::internal | 1031 } } // namespace v8::internal |
OLD | NEW |