diff options
Diffstat (limited to 'deps/v8/src/ic.h')
-rw-r--r-- | deps/v8/src/ic.h | 75 |
1 files changed, 48 insertions, 27 deletions
diff --git a/deps/v8/src/ic.h b/deps/v8/src/ic.h index fcf0de58f1..8f09e1d0a2 100644 --- a/deps/v8/src/ic.h +++ b/deps/v8/src/ic.h @@ -102,7 +102,7 @@ class IC { static State StateFrom(Code* target, Object* receiver, Object* name); // Clear the inline cache to initial state. - static void Clear(Address address); + static void Clear(Isolate* isolate, Address address); // Computes the reloc info for this IC. This is a fairly expensive // operation as it has to search through the heap to find the code @@ -167,14 +167,14 @@ class IC { static inline void SetTargetAtAddress(Address address, Code* target); static void PostPatching(Address address, Code* target, Code* old_target); - virtual void UpdateMonomorphicIC(Handle<JSObject> receiver, + virtual void UpdateMonomorphicIC(Handle<HeapObject> receiver, Handle<Code> handler, Handle<String> name, StrictModeFlag strict_mode) { set_target(*handler); } bool UpdatePolymorphicIC(State state, - Handle<JSObject> receiver, + Handle<HeapObject> receiver, Handle<String> name, Handle<Code> code, StrictModeFlag strict_mode); @@ -192,7 +192,7 @@ class IC { bool IsTransitionedMapOfMonomorphicTarget(Map* receiver_map); void PatchCache(State state, StrictModeFlag strict_mode, - Handle<JSObject> receiver, + Handle<HeapObject> receiver, Handle<String> name, Handle<Code> code); virtual void UpdateMegamorphicCache(Map* map, Name* name, Code* code); @@ -388,7 +388,7 @@ class LoadIC: public IC { protected: virtual Code::Kind kind() const { return Code::LOAD_IC; } - virtual Handle<Code> generic_stub() const { + virtual Handle<Code> slow_stub() const { return isolate()->builtins()->LoadIC_Slow(); } @@ -403,7 +403,7 @@ class LoadIC: public IC { Handle<Object> object, Handle<String> name); - virtual void UpdateMonomorphicIC(Handle<JSObject> receiver, + virtual void UpdateMonomorphicIC(Handle<HeapObject> receiver, Handle<Code> handler, Handle<String> name, StrictModeFlag strict_mode); @@ -420,14 +420,14 @@ class LoadIC: public IC { private: // Stub accessors. - static Handle<Code> initialize_stub() { - return Isolate::Current()->builtins()->LoadIC_Initialize(); + static Handle<Code> initialize_stub(Isolate* isolate) { + return isolate->builtins()->LoadIC_Initialize(); } virtual Handle<Code> pre_monomorphic_stub() { return isolate()->builtins()->LoadIC_PreMonomorphic(); } - static void Clear(Address address, Code* target); + static void Clear(Isolate* isolate, Address address, Code* target); friend class IC; }; @@ -483,9 +483,12 @@ class KeyedLoadIC: public LoadIC { virtual Handle<Code> generic_stub() const { return isolate()->builtins()->KeyedLoadIC_Generic(); } + virtual Handle<Code> slow_stub() const { + return isolate()->builtins()->KeyedLoadIC_Slow(); + } // Update the inline cache. - virtual void UpdateMonomorphicIC(Handle<JSObject> receiver, + virtual void UpdateMonomorphicIC(Handle<HeapObject> receiver, Handle<Code> handler, Handle<String> name, StrictModeFlag strict_mode); @@ -496,8 +499,8 @@ class KeyedLoadIC: public LoadIC { private: // Stub accessors. - static Handle<Code> initialize_stub() { - return Isolate::Current()->builtins()->KeyedLoadIC_Initialize(); + static Handle<Code> initialize_stub(Isolate* isolate) { + return isolate->builtins()->KeyedLoadIC_Initialize(); } virtual Handle<Code> pre_monomorphic_stub() { return isolate()->builtins()->KeyedLoadIC_PreMonomorphic(); @@ -512,7 +515,7 @@ class KeyedLoadIC: public LoadIC { return isolate()->builtins()->KeyedLoadIC_String(); } - static void Clear(Address address, Code* target); + static void Clear(Isolate* isolate, Address address, Code* target); friend class IC; }; @@ -527,6 +530,9 @@ class StoreIC: public IC { // Code generators for stub routines. Only called once at startup. static void GenerateSlow(MacroAssembler* masm); static void GenerateInitialize(MacroAssembler* masm) { GenerateMiss(masm); } + static void GeneratePreMonomorphic(MacroAssembler* masm) { + GenerateMiss(masm); + } static void GenerateMiss(MacroAssembler* masm); static void GenerateMegamorphic(MacroAssembler* masm, StrictModeFlag strict_mode); @@ -558,6 +564,12 @@ class StoreIC: public IC { virtual Handle<Code> generic_stub_strict() const { return isolate()->builtins()->StoreIC_Generic_Strict(); } + virtual Handle<Code> pre_monomorphic_stub() const { + return isolate()->builtins()->StoreIC_PreMonomorphic(); + } + virtual Handle<Code> pre_monomorphic_stub_strict() const { + return isolate()->builtins()->StoreIC_PreMonomorphic_Strict(); + } virtual Handle<Code> global_proxy_stub() { return isolate()->builtins()->StoreIC_GlobalProxy(); } @@ -565,7 +577,7 @@ class StoreIC: public IC { return isolate()->builtins()->StoreIC_GlobalProxy_Strict(); } - virtual void UpdateMonomorphicIC(Handle<JSObject> receiver, + virtual void UpdateMonomorphicIC(Handle<HeapObject> receiver, Handle<Code> handler, Handle<String> name, StrictModeFlag strict_mode); @@ -601,13 +613,13 @@ class StoreIC: public IC { IC::set_target(code); } - static Handle<Code> initialize_stub() { - return Isolate::Current()->builtins()->StoreIC_Initialize(); + static Handle<Code> initialize_stub(Isolate* isolate) { + return isolate->builtins()->StoreIC_Initialize(); } - static Handle<Code> initialize_stub_strict() { - return Isolate::Current()->builtins()->StoreIC_Initialize_Strict(); + static Handle<Code> initialize_stub_strict(Isolate* isolate) { + return isolate->builtins()->StoreIC_Initialize_Strict(); } - static void Clear(Address address, Code* target); + static void Clear(Isolate* isolate, Address address, Code* target); friend class IC; }; @@ -643,6 +655,9 @@ class KeyedStoreIC: public StoreIC { static void GenerateInitialize(MacroAssembler* masm) { GenerateMiss(masm, MISS); } + static void GeneratePreMonomorphic(MacroAssembler* masm) { + GenerateMiss(masm, MISS); + } static void GenerateMiss(MacroAssembler* masm, ICMissMode force_generic); static void GenerateSlow(MacroAssembler* masm); static void GenerateRuntimeSetProperty(MacroAssembler* masm, @@ -660,6 +675,12 @@ class KeyedStoreIC: public StoreIC { Handle<Object> value); virtual void UpdateMegamorphicCache(Map* map, Name* name, Code* code) { } + virtual Handle<Code> pre_monomorphic_stub() const { + return isolate()->builtins()->KeyedStoreIC_PreMonomorphic(); + } + virtual Handle<Code> pre_monomorphic_stub_strict() const { + return isolate()->builtins()->KeyedStoreIC_PreMonomorphic_Strict(); + } virtual Handle<Code> megamorphic_stub() { return isolate()->builtins()->KeyedStoreIC_Generic(); } @@ -671,7 +692,7 @@ class KeyedStoreIC: public StoreIC { KeyedAccessStoreMode store_mode, StrictModeFlag strict_mode); - virtual void UpdateMonomorphicIC(Handle<JSObject> receiver, + virtual void UpdateMonomorphicIC(Handle<HeapObject> receiver, Handle<Code> handler, Handle<String> name, StrictModeFlag strict_mode); @@ -685,11 +706,11 @@ class KeyedStoreIC: public StoreIC { } // Stub accessors. - static Handle<Code> initialize_stub() { - return Isolate::Current()->builtins()->KeyedStoreIC_Initialize(); + static Handle<Code> initialize_stub(Isolate* isolate) { + return isolate->builtins()->KeyedStoreIC_Initialize(); } - static Handle<Code> initialize_stub_strict() { - return Isolate::Current()->builtins()->KeyedStoreIC_Initialize_Strict(); + static Handle<Code> initialize_stub_strict(Isolate* isolate) { + return isolate->builtins()->KeyedStoreIC_Initialize_Strict(); } Handle<Code> generic_stub() const { return isolate()->builtins()->KeyedStoreIC_Generic(); @@ -701,7 +722,7 @@ class KeyedStoreIC: public StoreIC { return isolate()->builtins()->KeyedStoreIC_NonStrictArguments(); } - static void Clear(Address address, Code* target); + static void Clear(Isolate* isolate, Address address, Code* target); KeyedAccessStoreMode GetStoreMode(Handle<JSObject> receiver, Handle<Object> key, @@ -807,9 +828,9 @@ class CompareIC: public IC { bool strict() const { return op_ == Token::EQ_STRICT; } Condition GetCondition() const { return ComputeCondition(op_); } - static Code* GetRawUninitialized(Token::Value op); + static Code* GetRawUninitialized(Isolate* isolate, Token::Value op); - static void Clear(Address address, Code* target); + static void Clear(Isolate* isolate, Address address, Code* target); Token::Value op_; |