| 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 #ifndef V8_IC_H_ | 5 #ifndef V8_IC_H_ |
| 6 #define V8_IC_H_ | 6 #define V8_IC_H_ |
| 7 | 7 |
| 8 #include "src/ic/ic-state.h" | 8 #include "src/ic/ic-state.h" |
| 9 #include "src/macro-assembler.h" | 9 #include "src/macro-assembler.h" |
| 10 | 10 |
| (...skipping 353 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 364 | 364 |
| 365 Handle<Code> slow_stub() const { | 365 Handle<Code> slow_stub() const { |
| 366 if (kind() == Code::LOAD_IC) { | 366 if (kind() == Code::LOAD_IC) { |
| 367 return isolate()->builtins()->LoadIC_Slow(); | 367 return isolate()->builtins()->LoadIC_Slow(); |
| 368 } else { | 368 } else { |
| 369 DCHECK_EQ(Code::KEYED_LOAD_IC, kind()); | 369 DCHECK_EQ(Code::KEYED_LOAD_IC, kind()); |
| 370 return isolate()->builtins()->KeyedLoadIC_Slow(); | 370 return isolate()->builtins()->KeyedLoadIC_Slow(); |
| 371 } | 371 } |
| 372 } | 372 } |
| 373 | 373 |
| 374 virtual Handle<Code> megamorphic_stub(); | 374 virtual Handle<Code> megamorphic_stub() OVERRIDE; |
| 375 | 375 |
| 376 // Update the inline cache and the global stub cache based on the | 376 // Update the inline cache and the global stub cache based on the |
| 377 // lookup result. | 377 // lookup result. |
| 378 void UpdateCaches(LookupIterator* lookup); | 378 void UpdateCaches(LookupIterator* lookup); |
| 379 | 379 |
| 380 virtual Handle<Code> CompileHandler(LookupIterator* lookup, | 380 virtual Handle<Code> CompileHandler(LookupIterator* lookup, |
| 381 Handle<Object> unused, | 381 Handle<Object> unused, |
| 382 CacheHolderFlag cache_holder); | 382 CacheHolderFlag cache_holder); |
| 383 | 383 |
| 384 private: | 384 private: |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 486 | 486 |
| 487 MUST_USE_RESULT MaybeHandle<Object> Store( | 487 MUST_USE_RESULT MaybeHandle<Object> Store( |
| 488 Handle<Object> object, Handle<Name> name, Handle<Object> value, | 488 Handle<Object> object, Handle<Name> name, Handle<Object> value, |
| 489 JSReceiver::StoreFromKeyed store_mode = | 489 JSReceiver::StoreFromKeyed store_mode = |
| 490 JSReceiver::CERTAINLY_NOT_STORE_FROM_KEYED); | 490 JSReceiver::CERTAINLY_NOT_STORE_FROM_KEYED); |
| 491 | 491 |
| 492 bool LookupForWrite(LookupIterator* it, Handle<Object> value, | 492 bool LookupForWrite(LookupIterator* it, Handle<Object> value, |
| 493 JSReceiver::StoreFromKeyed store_mode); | 493 JSReceiver::StoreFromKeyed store_mode); |
| 494 | 494 |
| 495 protected: | 495 protected: |
| 496 virtual Handle<Code> megamorphic_stub(); | 496 virtual Handle<Code> megamorphic_stub() OVERRIDE; |
| 497 | 497 |
| 498 // Stub accessors. | 498 // Stub accessors. |
| 499 virtual Handle<Code> generic_stub() const; | 499 Handle<Code> generic_stub() const; |
| 500 | 500 |
| 501 virtual Handle<Code> slow_stub() const { | 501 Handle<Code> slow_stub() const; |
| 502 return isolate()->builtins()->StoreIC_Slow(); | |
| 503 } | |
| 504 | 502 |
| 505 virtual Handle<Code> pre_monomorphic_stub() const { | 503 virtual Handle<Code> pre_monomorphic_stub() const { |
| 506 return pre_monomorphic_stub(isolate(), strict_mode()); | 504 return pre_monomorphic_stub(isolate(), strict_mode()); |
| 507 } | 505 } |
| 508 | 506 |
| 509 static Handle<Code> pre_monomorphic_stub(Isolate* isolate, | 507 static Handle<Code> pre_monomorphic_stub(Isolate* isolate, |
| 510 StrictMode strict_mode); | 508 StrictMode strict_mode); |
| 511 | 509 |
| 512 // Update the inline cache and the global stub cache based on the | 510 // Update the inline cache and the global stub cache based on the |
| 513 // lookup result. | 511 // lookup result. |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 574 return pre_monomorphic_stub(isolate(), strict_mode()); | 572 return pre_monomorphic_stub(isolate(), strict_mode()); |
| 575 } | 573 } |
| 576 static Handle<Code> pre_monomorphic_stub(Isolate* isolate, | 574 static Handle<Code> pre_monomorphic_stub(Isolate* isolate, |
| 577 StrictMode strict_mode) { | 575 StrictMode strict_mode) { |
| 578 if (strict_mode == STRICT) { | 576 if (strict_mode == STRICT) { |
| 579 return isolate->builtins()->KeyedStoreIC_PreMonomorphic_Strict(); | 577 return isolate->builtins()->KeyedStoreIC_PreMonomorphic_Strict(); |
| 580 } else { | 578 } else { |
| 581 return isolate->builtins()->KeyedStoreIC_PreMonomorphic(); | 579 return isolate->builtins()->KeyedStoreIC_PreMonomorphic(); |
| 582 } | 580 } |
| 583 } | 581 } |
| 584 virtual Handle<Code> slow_stub() const { | |
| 585 return isolate()->builtins()->KeyedStoreIC_Slow(); | |
| 586 } | |
| 587 virtual Handle<Code> megamorphic_stub() { | |
| 588 if (strict_mode() == STRICT) { | |
| 589 return isolate()->builtins()->KeyedStoreIC_Generic_Strict(); | |
| 590 } else { | |
| 591 return isolate()->builtins()->KeyedStoreIC_Generic(); | |
| 592 } | |
| 593 } | |
| 594 | 582 |
| 595 Handle<Code> StoreElementStub(Handle<JSObject> receiver, | 583 Handle<Code> StoreElementStub(Handle<JSObject> receiver, |
| 596 KeyedAccessStoreMode store_mode); | 584 KeyedAccessStoreMode store_mode); |
| 597 | 585 |
| 598 private: | 586 private: |
| 599 inline void set_target(Code* code); | 587 inline void set_target(Code* code); |
| 600 | 588 |
| 601 // Stub accessors. | 589 // Stub accessors. |
| 602 virtual Handle<Code> generic_stub() const { | |
| 603 if (strict_mode() == STRICT) { | |
| 604 return isolate()->builtins()->KeyedStoreIC_Generic_Strict(); | |
| 605 } else { | |
| 606 return isolate()->builtins()->KeyedStoreIC_Generic(); | |
| 607 } | |
| 608 } | |
| 609 | |
| 610 Handle<Code> sloppy_arguments_stub() { | 590 Handle<Code> sloppy_arguments_stub() { |
| 611 return isolate()->builtins()->KeyedStoreIC_SloppyArguments(); | 591 return isolate()->builtins()->KeyedStoreIC_SloppyArguments(); |
| 612 } | 592 } |
| 613 | 593 |
| 614 static void Clear(Isolate* isolate, Address address, Code* target, | 594 static void Clear(Isolate* isolate, Address address, Code* target, |
| 615 ConstantPoolArray* constant_pool); | 595 ConstantPoolArray* constant_pool); |
| 616 | 596 |
| 617 KeyedAccessStoreMode GetStoreMode(Handle<JSObject> receiver, | 597 KeyedAccessStoreMode GetStoreMode(Handle<JSObject> receiver, |
| 618 Handle<Object> key, Handle<Object> value); | 598 Handle<Object> key, Handle<Object> value); |
| 619 | 599 |
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 713 | 693 |
| 714 // Support functions for interceptor handlers. | 694 // Support functions for interceptor handlers. |
| 715 DECLARE_RUNTIME_FUNCTION(LoadPropertyWithInterceptorOnly); | 695 DECLARE_RUNTIME_FUNCTION(LoadPropertyWithInterceptorOnly); |
| 716 DECLARE_RUNTIME_FUNCTION(LoadPropertyWithInterceptor); | 696 DECLARE_RUNTIME_FUNCTION(LoadPropertyWithInterceptor); |
| 717 DECLARE_RUNTIME_FUNCTION(LoadElementWithInterceptor); | 697 DECLARE_RUNTIME_FUNCTION(LoadElementWithInterceptor); |
| 718 DECLARE_RUNTIME_FUNCTION(StorePropertyWithInterceptor); | 698 DECLARE_RUNTIME_FUNCTION(StorePropertyWithInterceptor); |
| 719 } | 699 } |
| 720 } // namespace v8::internal | 700 } // namespace v8::internal |
| 721 | 701 |
| 722 #endif // V8_IC_H_ | 702 #endif // V8_IC_H_ |
| OLD | NEW |