| Index: src/ic.h
|
| diff --git a/src/ic.h b/src/ic.h
|
| index fcf0de58f1a85e7694cffaa68fc062fe45ab24fa..5c883cdc38210e2e9b7e4acda9541f0f8401ab4d 100644
|
| --- a/src/ic.h
|
| +++ b/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
|
| @@ -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;
|
| };
|
| @@ -496,8 +496,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 +512,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 +527,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 +561,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();
|
| }
|
| @@ -601,13 +610,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 +652,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 +672,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();
|
| }
|
| @@ -685,11 +703,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 +719,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 +825,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_;
|
|
|
|
|