Revision: 17158
Author:   verwa...@chromium.org
Date:     Fri Oct 11 10:50:26 2013 UTC
Log:      Add a slow stub for store ICs.

BUG=
R=u...@chromium.org

Review URL: https://chromiumcodereview.appspot.com/26807003
http://code.google.com/p/v8/source/detail?r=17158

Modified:
 /branches/bleeding_edge/src/builtins.cc
 /branches/bleeding_edge/src/builtins.h
 /branches/bleeding_edge/src/ic.cc
 /branches/bleeding_edge/src/ic.h

=======================================
--- /branches/bleeding_edge/src/builtins.cc     Mon Sep 30 13:58:44 2013 UTC
+++ /branches/bleeding_edge/src/builtins.cc     Fri Oct 11 10:50:26 2013 UTC
@@ -1376,6 +1376,11 @@
 static void Generate_StoreIC_Slow(MacroAssembler* masm) {
   StoreIC::GenerateSlow(masm);
 }
+
+
+static void Generate_StoreIC_Slow_Strict(MacroAssembler* masm) {
+  StoreIC::GenerateSlow(masm);
+}


 static void Generate_StoreIC_Initialize(MacroAssembler* masm) {
@@ -1471,6 +1476,11 @@
 static void Generate_KeyedStoreIC_Slow(MacroAssembler* masm) {
   KeyedStoreIC::GenerateSlow(masm);
 }
+
+
+static void Generate_KeyedStoreIC_Slow_Strict(MacroAssembler* masm) {
+  KeyedStoreIC::GenerateSlow(masm);
+}


 static void Generate_KeyedStoreIC_Initialize(MacroAssembler* masm) {
=======================================
--- /branches/bleeding_edge/src/builtins.h      Mon Sep 30 13:58:44 2013 UTC
+++ /branches/bleeding_edge/src/builtins.h      Fri Oct 11 10:50:26 2013 UTC
@@ -117,14 +117,10 @@
                                     Code::kNoExtraICState)              \
   V(StoreIC_Miss,                   BUILTIN, UNINITIALIZED,             \
                                     Code::kNoExtraICState)              \
-  V(StoreIC_Slow,                   BUILTIN, UNINITIALIZED,             \
-                                    Code::kNoExtraICState)              \
   V(KeyedStoreIC_Miss,              BUILTIN, UNINITIALIZED,             \
                                     Code::kNoExtraICState)              \
   V(KeyedStoreIC_MissForceGeneric,  BUILTIN, UNINITIALIZED,             \
                                     Code::kNoExtraICState)              \
-  V(KeyedStoreIC_Slow,              BUILTIN, UNINITIALIZED,             \
-                                    Code::kNoExtraICState)              \
   V(LoadIC_Initialize,              LOAD_IC, UNINITIALIZED,             \
                                     Code::kNoExtraICState)              \
   V(LoadIC_PreMonomorphic,          LOAD_IC, PREMONOMORPHIC,            \
@@ -214,6 +210,10 @@
 #define BUILTIN_LIST_H(V)                                                 \
   V(LoadIC_Slow,                    LOAD_IC, Code::kNoExtraICState)       \
   V(KeyedLoadIC_Slow,               KEYED_LOAD_IC, Code::kNoExtraICState) \
+  V(StoreIC_Slow,                   STORE_IC, Code::kNoExtraICState)      \
+  V(StoreIC_Slow_Strict,            STORE_IC, kStrictMode)                \
+  V(KeyedStoreIC_Slow,              KEYED_STORE_IC, Code::kNoExtraICState)\
+  V(KeyedStoreIC_Slow_Strict,       KEYED_STORE_IC, kStrictMode)          \
   V(LoadIC_Normal,                  LOAD_IC, Code::kNoExtraICState)       \
   V(StoreIC_Normal,                 STORE_IC, Code::kNoExtraICState)      \
   V(StoreIC_Normal_Strict,          STORE_IC, kStrictMode)
=======================================
--- /branches/bleeding_edge/src/ic.cc   Fri Oct  4 11:25:30 2013 UTC
+++ /branches/bleeding_edge/src/ic.cc   Fri Oct 11 10:50:26 2013 UTC
@@ -1603,10 +1603,7 @@
   ASSERT(!lookup->IsHandler());

   Handle<Code> code = ComputeStoreHandler(lookup, receiver, name, value);
-  if (code.is_null()) {
-    set_target(*generic_stub());
-    return;
-  }
+  if (code.is_null()) code = slow_stub();

   PatchCache(receiver, name, code);
   TRACE_IC("StoreIC", name);
=======================================
--- /branches/bleeding_edge/src/ic.h    Fri Oct  4 08:17:11 2013 UTC
+++ /branches/bleeding_edge/src/ic.h    Fri Oct 11 10:50:26 2013 UTC
@@ -551,6 +551,14 @@
       return isolate()->builtins()->StoreIC_Generic();
     }
   }
+
+  virtual Handle<Code> slow_stub() const {
+    if (strict_mode() == kStrictMode) {
+      return isolate()->builtins()->StoreIC_Slow_Strict();
+    } else {
+      return isolate()->builtins()->StoreIC_Slow();
+    }
+  }

   virtual Handle<Code> pre_monomorphic_stub() {
     return pre_monomorphic_stub(isolate(), strict_mode());
@@ -670,6 +678,13 @@
       return isolate->builtins()->KeyedStoreIC_PreMonomorphic();
     }
   }
+  virtual Handle<Code> slow_stub() const {
+    if (strict_mode() == kStrictMode) {
+      return isolate()->builtins()->KeyedStoreIC_Slow_Strict();
+    } else {
+      return isolate()->builtins()->KeyedStoreIC_Slow();
+    }
+  }
   virtual Handle<Code> megamorphic_stub() {
     if (strict_mode() == kStrictMode) {
       return isolate()->builtins()->KeyedStoreIC_Generic_Strict();

--
--
v8-dev mailing list
v8-dev@googlegroups.com
http://groups.google.com/group/v8-dev
--- You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to v8-dev+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to