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

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

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/bootstrapper.cc ('k') | src/code-stubs.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 #ifndef V8_CODE_STUBS_H_ 5 #ifndef V8_CODE_STUBS_H_
6 #define V8_CODE_STUBS_H_ 6 #define V8_CODE_STUBS_H_
7 7
8 #include "src/allocation.h" 8 #include "src/allocation.h"
9 #include "src/assembler.h" 9 #include "src/assembler.h"
10 #include "src/code-stub-assembler.h" 10 #include "src/code-stub-assembler.h"
(...skipping 30 matching lines...) Expand all
41 V(MathPow) \ 41 V(MathPow) \
42 V(ProfileEntryHook) \ 42 V(ProfileEntryHook) \
43 V(RecordWrite) \ 43 V(RecordWrite) \
44 V(RegExpExec) \ 44 V(RegExpExec) \
45 V(StoreBufferOverflow) \ 45 V(StoreBufferOverflow) \
46 V(StoreElement) \ 46 V(StoreElement) \
47 V(StubFailureTrampoline) \ 47 V(StubFailureTrampoline) \
48 V(SubString) \ 48 V(SubString) \
49 V(ToString) \ 49 V(ToString) \
50 V(ToName) \ 50 V(ToName) \
51 V(ToObject) \
52 V(StoreICTrampoline) \ 51 V(StoreICTrampoline) \
53 V(KeyedStoreICTrampoline) \ 52 V(KeyedStoreICTrampoline) \
54 V(StoreIC) \ 53 V(StoreIC) \
55 V(KeyedStoreIC) \ 54 V(KeyedStoreIC) \
56 V(KeyedLoadIC) \ 55 V(KeyedLoadIC) \
57 V(LoadIC) \ 56 V(LoadIC) \
58 V(LoadGlobalIC) \ 57 V(LoadGlobalIC) \
59 V(FastNewObject) \ 58 V(FastNewObject) \
60 V(FastNewRestParameter) \ 59 V(FastNewRestParameter) \
61 V(FastNewSloppyArguments) \ 60 V(FastNewSloppyArguments) \
62 V(FastNewStrictArguments) \ 61 V(FastNewStrictArguments) \
63 /* HydrogenCodeStubs */ \ 62 /* HydrogenCodeStubs */ \
64 V(BinaryOpIC) \ 63 V(BinaryOpIC) \
65 V(BinaryOpWithAllocationSite) \ 64 V(BinaryOpWithAllocationSite) \
66 V(ElementsTransitionAndStore) \ 65 V(ElementsTransitionAndStore) \
67 V(FastArrayPush) \ 66 V(FastArrayPush) \
68 V(FastCloneRegExp) \ 67 V(FastCloneRegExp) \
69 V(FastCloneShallowArray) \ 68 V(FastCloneShallowArray) \
70 V(FastFunctionBind) \ 69 V(FastFunctionBind) \
71 V(GrowArrayElements) \ 70 V(GrowArrayElements) \
72 V(KeyedLoadGeneric) \ 71 V(KeyedLoadGeneric) \
73 V(LoadScriptContextField) \ 72 V(LoadScriptContextField) \
74 V(LoadDictionaryElement) \ 73 V(LoadDictionaryElement) \
75 V(NameDictionaryLookup) \ 74 V(NameDictionaryLookup) \
76 V(NumberToString) \ 75 V(NumberToString) \
76 V(ToObject) \
77 V(Typeof) \ 77 V(Typeof) \
78 V(RegExpConstructResult) \ 78 V(RegExpConstructResult) \
79 V(StoreFastElement) \ 79 V(StoreFastElement) \
80 V(StoreGlobalViaContext) \ 80 V(StoreGlobalViaContext) \
81 V(StoreScriptContextField) \ 81 V(StoreScriptContextField) \
82 V(StringAdd) \ 82 V(StringAdd) \
83 V(ToBooleanIC) \ 83 V(ToBooleanIC) \
84 V(TransitionElementsKind) \ 84 V(TransitionElementsKind) \
85 /* TurboFanCodeStubs */ \ 85 /* TurboFanCodeStubs */ \
86 V(AllocateHeapNumber) \ 86 V(AllocateHeapNumber) \
(...skipping 393 matching lines...) Expand 10 before | Expand all | Expand 10 after
480 CodeStubDescriptor(Isolate* isolate, uint32_t stub_key); 480 CodeStubDescriptor(Isolate* isolate, uint32_t stub_key);
481 481
482 void Initialize(Address deoptimization_handler = NULL, 482 void Initialize(Address deoptimization_handler = NULL,
483 int hint_stack_parameter_count = -1, 483 int hint_stack_parameter_count = -1,
484 StubFunctionMode function_mode = NOT_JS_FUNCTION_STUB_MODE); 484 StubFunctionMode function_mode = NOT_JS_FUNCTION_STUB_MODE);
485 void Initialize(Register stack_parameter_count, 485 void Initialize(Register stack_parameter_count,
486 Address deoptimization_handler = NULL, 486 Address deoptimization_handler = NULL,
487 int hint_stack_parameter_count = -1, 487 int hint_stack_parameter_count = -1,
488 StubFunctionMode function_mode = NOT_JS_FUNCTION_STUB_MODE); 488 StubFunctionMode function_mode = NOT_JS_FUNCTION_STUB_MODE);
489 489
490 void SetMissHandler(ExternalReference handler) { 490 void SetMissHandler(Runtime::FunctionId id) {
491 miss_handler_ = handler; 491 miss_handler_id_ = id;
492 miss_handler_ = ExternalReference(Runtime::FunctionForId(id), isolate_);
492 has_miss_handler_ = true; 493 has_miss_handler_ = true;
493 // Our miss handler infrastructure doesn't currently support 494 // Our miss handler infrastructure doesn't currently support
494 // variable stack parameter counts. 495 // variable stack parameter counts.
495 DCHECK(!stack_parameter_count_.is_valid()); 496 DCHECK(!stack_parameter_count_.is_valid());
496 } 497 }
497 498
498 void set_call_descriptor(CallInterfaceDescriptor d) { call_descriptor_ = d; } 499 void set_call_descriptor(CallInterfaceDescriptor d) { call_descriptor_ = d; }
499 CallInterfaceDescriptor call_descriptor() const { return call_descriptor_; } 500 CallInterfaceDescriptor call_descriptor() const { return call_descriptor_; }
500 501
501 int GetRegisterParameterCount() const { 502 int GetRegisterParameterCount() const {
(...skipping 14 matching lines...) Expand all
516 517
517 Type* GetParameterType(int index) const { 518 Type* GetParameterType(int index) const {
518 return call_descriptor().GetParameterType(index); 519 return call_descriptor().GetParameterType(index);
519 } 520 }
520 521
521 ExternalReference miss_handler() const { 522 ExternalReference miss_handler() const {
522 DCHECK(has_miss_handler_); 523 DCHECK(has_miss_handler_);
523 return miss_handler_; 524 return miss_handler_;
524 } 525 }
525 526
527 Runtime::FunctionId miss_handler_id() const {
528 DCHECK(has_miss_handler_);
529 return miss_handler_id_;
530 }
531
526 bool has_miss_handler() const { 532 bool has_miss_handler() const {
527 return has_miss_handler_; 533 return has_miss_handler_;
528 } 534 }
529 535
530 int GetHandlerParameterCount() const { 536 int GetHandlerParameterCount() const {
531 int params = GetParameterCount(); 537 int params = GetParameterCount();
532 if (PassesArgumentsToDeoptimizationHandler()) { 538 if (PassesArgumentsToDeoptimizationHandler()) {
533 params += 1; 539 params += 1;
534 } 540 }
535 return params; 541 return params;
536 } 542 }
537 543
538 int hint_stack_parameter_count() const { return hint_stack_parameter_count_; } 544 int hint_stack_parameter_count() const { return hint_stack_parameter_count_; }
539 Register stack_parameter_count() const { return stack_parameter_count_; } 545 Register stack_parameter_count() const { return stack_parameter_count_; }
540 StubFunctionMode function_mode() const { return function_mode_; } 546 StubFunctionMode function_mode() const { return function_mode_; }
541 Address deoptimization_handler() const { return deoptimization_handler_; } 547 Address deoptimization_handler() const { return deoptimization_handler_; }
542 548
543 private: 549 private:
544 bool PassesArgumentsToDeoptimizationHandler() const { 550 bool PassesArgumentsToDeoptimizationHandler() const {
545 return stack_parameter_count_.is_valid(); 551 return stack_parameter_count_.is_valid();
546 } 552 }
547 553
554 Isolate* isolate_;
548 CallInterfaceDescriptor call_descriptor_; 555 CallInterfaceDescriptor call_descriptor_;
549 Register stack_parameter_count_; 556 Register stack_parameter_count_;
550 // If hint_stack_parameter_count_ > 0, the code stub can optimize the 557 // If hint_stack_parameter_count_ > 0, the code stub can optimize the
551 // return sequence. Default value is -1, which means it is ignored. 558 // return sequence. Default value is -1, which means it is ignored.
552 int hint_stack_parameter_count_; 559 int hint_stack_parameter_count_;
553 StubFunctionMode function_mode_; 560 StubFunctionMode function_mode_;
554 561
555 Address deoptimization_handler_; 562 Address deoptimization_handler_;
556 563
557 ExternalReference miss_handler_; 564 ExternalReference miss_handler_;
565 Runtime::FunctionId miss_handler_id_;
558 bool has_miss_handler_; 566 bool has_miss_handler_;
559 }; 567 };
560 568
561 569
562 class HydrogenCodeStub : public CodeStub { 570 class HydrogenCodeStub : public CodeStub {
563 public: 571 public:
564 enum InitializationState { 572 enum InitializationState {
565 UNINITIALIZED, 573 UNINITIALIZED,
566 INITIALIZED 574 INITIALIZED
567 }; 575 };
568 576
569 template<class SubClass> 577 template<class SubClass>
570 static Handle<Code> GetUninitialized(Isolate* isolate) { 578 static Handle<Code> GetUninitialized(Isolate* isolate) {
571 SubClass::GenerateAheadOfTime(isolate); 579 SubClass::GenerateAheadOfTime(isolate);
572 return SubClass().GetCode(isolate); 580 return SubClass().GetCode(isolate);
573 } 581 }
574 582
575 // Retrieve the code for the stub. Generate the code if needed. 583 // Retrieve the code for the stub. Generate the code if needed.
576 Handle<Code> GenerateCode() override = 0; 584 Handle<Code> GenerateCode() override = 0;
577 585
578 bool IsUninitialized() const { return IsMissBits::decode(minor_key_); } 586 bool IsUninitialized() const { return IsMissBits::decode(minor_key_); }
579 587
580 Handle<Code> GenerateLightweightMissCode(ExternalReference miss); 588 Handle<Code> GenerateLightweightMissCode(ExternalReference miss);
581 589
590 Handle<Code> GenerateRuntimeTailCall(CodeStubDescriptor* descriptor);
591
582 template<class StateType> 592 template<class StateType>
583 void TraceTransition(StateType from, StateType to); 593 void TraceTransition(StateType from, StateType to);
584 594
585 protected: 595 protected:
586 explicit HydrogenCodeStub(Isolate* isolate, 596 explicit HydrogenCodeStub(Isolate* isolate,
587 InitializationState state = INITIALIZED) 597 InitializationState state = INITIALIZED)
588 : CodeStub(isolate) { 598 : CodeStub(isolate) {
589 minor_key_ = IsMissBits::encode(state == UNINITIALIZED); 599 minor_key_ = IsMissBits::encode(state == UNINITIALIZED);
590 } 600 }
591 601
(...skipping 2529 matching lines...) Expand 10 before | Expand all | Expand 10 after
3121 #undef DEFINE_HYDROGEN_CODE_STUB 3131 #undef DEFINE_HYDROGEN_CODE_STUB
3122 #undef DEFINE_CODE_STUB 3132 #undef DEFINE_CODE_STUB
3123 #undef DEFINE_CODE_STUB_BASE 3133 #undef DEFINE_CODE_STUB_BASE
3124 3134
3125 extern Representation RepresentationFromType(Type* type); 3135 extern Representation RepresentationFromType(Type* type);
3126 3136
3127 } // namespace internal 3137 } // namespace internal
3128 } // namespace v8 3138 } // namespace v8
3129 3139
3130 #endif // V8_CODE_STUBS_H_ 3140 #endif // V8_CODE_STUBS_H_
OLDNEW
« no previous file with comments | « src/bootstrapper.cc ('k') | src/code-stubs.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698