Revision: 13459
Author:   [email protected]
Date:     Mon Jan 21 09:54:36 2013
Log:      Migrate FunctionPrototype (Keyed|Named)LoadIC to CodeStub

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

Modified:
 /branches/bleeding_edge/src/arm/code-stubs-arm.cc
 /branches/bleeding_edge/src/arm/ic-arm.cc
 /branches/bleeding_edge/src/arm/stub-cache-arm.cc
 /branches/bleeding_edge/src/ast.cc
 /branches/bleeding_edge/src/builtins.cc
 /branches/bleeding_edge/src/builtins.h
 /branches/bleeding_edge/src/code-stubs.h
 /branches/bleeding_edge/src/ia32/code-stubs-ia32.cc
 /branches/bleeding_edge/src/ia32/ic-ia32.cc
 /branches/bleeding_edge/src/ia32/stub-cache-ia32.cc
 /branches/bleeding_edge/src/ic.cc
 /branches/bleeding_edge/src/stub-cache.cc
 /branches/bleeding_edge/src/stub-cache.h
 /branches/bleeding_edge/src/x64/code-stubs-x64.cc
 /branches/bleeding_edge/src/x64/ic-x64.cc
 /branches/bleeding_edge/src/x64/stub-cache-x64.cc

=======================================
--- /branches/bleeding_edge/src/arm/code-stubs-arm.cc Mon Jan 21 09:17:02 2013 +++ /branches/bleeding_edge/src/arm/code-stubs-arm.cc Mon Jan 21 09:54:36 2013
@@ -4530,6 +4530,35 @@
   __ bind(&miss);
   StubCompiler::GenerateLoadMiss(masm, kind());
 }
+
+
+void FunctionPrototypeStub::Generate(MacroAssembler* masm) {
+  Label miss;
+  Register receiver;
+  if (kind() == Code::KEYED_LOAD_IC) {
+    // ----------- S t a t e -------------
+    //  -- lr    : return address
+    //  -- r0    : key
+    //  -- r1    : receiver
+    // -----------------------------------
+    __ cmp(r0, Operand(masm->isolate()->factory()->prototype_symbol()));
+    __ b(ne, &miss);
+    receiver = r1;
+  } else {
+    ASSERT(kind() == Code::LOAD_IC);
+    // ----------- S t a t e -------------
+    //  -- r2    : name
+    //  -- lr    : return address
+    //  -- r0    : receiver
+    //  -- sp[0] : receiver
+    // -----------------------------------
+    receiver = r0;
+  }
+
+ StubCompiler::GenerateLoadFunctionPrototype(masm, receiver, r3, r4, &miss);
+  __ bind(&miss);
+  StubCompiler::GenerateLoadMiss(masm, kind());
+}


 void StringLengthStub::Generate(MacroAssembler* masm) {
=======================================
--- /branches/bleeding_edge/src/arm/ic-arm.cc   Mon Jan 21 09:17:02 2013
+++ /branches/bleeding_edge/src/arm/ic-arm.cc   Mon Jan 21 09:54:36 2013
@@ -211,21 +211,6 @@
   __ RecordWrite(
       elements, scratch2, scratch1, kLRHasNotBeenSaved, kDontSaveFPRegs);
 }
-
-
-void LoadIC::GenerateFunctionPrototype(MacroAssembler* masm) {
-  // ----------- S t a t e -------------
-  //  -- r2    : name
-  //  -- lr    : return address
-  //  -- r0    : receiver
-  //  -- sp[0] : receiver
-  // -----------------------------------
-  Label miss;
-
-  StubCompiler::GenerateLoadFunctionPrototype(masm, r0, r1, r3, &miss);
-  __ bind(&miss);
-  StubCompiler::GenerateLoadMiss(masm, Code::LOAD_IC);
-}


 // Checks the receiver for special cases (value type, slow case bits).
=======================================
--- /branches/bleeding_edge/src/arm/stub-cache-arm.cc Mon Jan 21 09:17:02 2013 +++ /branches/bleeding_edge/src/arm/stub-cache-arm.cc Mon Jan 21 09:54:36 2013
@@ -3205,31 +3205,6 @@

   return GetCode(Code::INTERCEPTOR, name);
 }
-
-
-Handle<Code> KeyedLoadStubCompiler::CompileLoadFunctionPrototype(
-    Handle<String> name) {
-  // ----------- S t a t e -------------
-  //  -- lr    : return address
-  //  -- r0    : key
-  //  -- r1    : receiver
-  // -----------------------------------
-  Label miss;
-
-  Counters* counters = masm()->isolate()->counters();
- __ IncrementCounter(counters->keyed_load_function_prototype(), 1, r2, r3);
-
-  // Check the name hasn't changed.
-  __ cmp(r0, Operand(name));
-  __ b(ne, &miss);
-
-  GenerateLoadFunctionPrototype(masm(), r1, r2, r3, &miss);
-  __ bind(&miss);
- __ DecrementCounter(counters->keyed_load_function_prototype(), 1, r2, r3);
-  GenerateLoadMiss(masm(), Code::KEYED_LOAD_IC);
-
-  return GetCode(Code::CALLBACKS, name);
-}


 Handle<Code> KeyedLoadStubCompiler::CompileLoadElement(
=======================================
--- /branches/bleeding_edge/src/ast.cc  Mon Jan 21 09:17:02 2013
+++ /branches/bleeding_edge/src/ast.cc  Mon Jan 21 09:54:36 2013
@@ -414,13 +414,13 @@
   receiver_types_.Clear();
   if (key()->IsPropertyName()) {
     ArrayLengthStub array_stub(Code::LOAD_IC);
+    FunctionPrototypeStub proto_stub(Code::LOAD_IC);
     StringLengthStub string_stub(Code::LOAD_IC, false);
     if (oracle->LoadIsStub(this, &array_stub)) {
       is_array_length_ = true;
     } else if (oracle->LoadIsStub(this, &string_stub)) {
       is_string_length_ = true;
-    } else if (oracle->LoadIsBuiltin(this,
- Builtins::kLoadIC_FunctionPrototype)) {
+    } else if (oracle->LoadIsStub(this, &proto_stub)) {
       is_function_prototype_ = true;
     } else {
       Literal* lit_key = key()->AsLiteral();
=======================================
--- /branches/bleeding_edge/src/builtins.cc     Mon Jan 21 09:17:02 2013
+++ /branches/bleeding_edge/src/builtins.cc     Mon Jan 21 09:54:36 2013
@@ -1451,11 +1451,6 @@
 BUILTIN(HandleApiCallAsConstructor) {
   return HandleApiCallAsFunctionOrConstructor(isolate, true, args);
 }
-
-
-static void Generate_LoadIC_FunctionPrototype(MacroAssembler* masm) {
-  LoadIC::GenerateFunctionPrototype(masm);
-}


 static void Generate_LoadIC_Initialize(MacroAssembler* masm) {
=======================================
--- /branches/bleeding_edge/src/builtins.h      Mon Jan 21 09:17:02 2013
+++ /branches/bleeding_edge/src/builtins.h      Mon Jan 21 09:54:36 2013
@@ -134,8 +134,6 @@
                                     Code::kNoExtraICState)              \
   V(LoadIC_Normal,                  LOAD_IC, MONOMORPHIC,               \
                                     Code::kNoExtraICState)              \
-  V(LoadIC_FunctionPrototype,       LOAD_IC, MONOMORPHIC,               \
-                                    Code::kNoExtraICState)              \
   V(LoadIC_Megamorphic,             LOAD_IC, MEGAMORPHIC,               \
                                     Code::kNoExtraICState)              \
   V(LoadIC_Getter_ForDeopt,         LOAD_IC, MONOMORPHIC,               \
=======================================
--- /branches/bleeding_edge/src/code-stubs.h    Mon Jan 21 09:17:02 2013
+++ /branches/bleeding_edge/src/code-stubs.h    Mon Jan 21 09:54:36 2013
@@ -49,6 +49,7 @@
   V(MathPow)                             \
   V(ArrayLength)                         \
   V(StringLength)                        \
+  V(FunctionPrototype)                   \
   V(RecordWrite)                         \
   V(StoreBufferOverflow)                 \
   V(RegExpExec)                          \
@@ -577,6 +578,16 @@
 };


+class FunctionPrototypeStub: public ICStub {
+ public:
+  explicit FunctionPrototypeStub(Code::Kind kind) : ICStub(kind) { }
+  virtual void Generate(MacroAssembler* masm);
+
+ private:
+  virtual CodeStub::Major MajorKey() { return FunctionPrototype; }
+};
+
+
 class StringLengthStub: public ICStub {
  public:
   StringLengthStub(Code::Kind kind, bool support_wrapper)
=======================================
--- /branches/bleeding_edge/src/ia32/code-stubs-ia32.cc Mon Jan 21 09:17:02 2013 +++ /branches/bleeding_edge/src/ia32/code-stubs-ia32.cc Mon Jan 21 09:54:36 2013
@@ -3276,6 +3276,25 @@
   __ bind(&miss);
   StubCompiler::GenerateLoadMiss(masm, kind());
 }
+
+
+void FunctionPrototypeStub::Generate(MacroAssembler* masm) {
+  // ----------- S t a t e -------------
+  //  -- ecx    : name
+  //  -- edx    : receiver
+  //  -- esp[0] : return address
+  // -----------------------------------
+  Label miss;
+
+  if (kind() == Code::KEYED_LOAD_IC) {
+    __ cmp(ecx, Immediate(masm->isolate()->factory()->prototype_symbol()));
+    __ j(not_equal, &miss);
+  }
+
+  StubCompiler::GenerateLoadFunctionPrototype(masm, edx, eax, ebx, &miss);
+  __ bind(&miss);
+  StubCompiler::GenerateLoadMiss(masm, kind());
+}


 void StringLengthStub::Generate(MacroAssembler* masm) {
=======================================
--- /branches/bleeding_edge/src/ia32/ic-ia32.cc Mon Jan 21 09:17:02 2013
+++ /branches/bleeding_edge/src/ia32/ic-ia32.cc Mon Jan 21 09:54:36 2013
@@ -214,20 +214,6 @@
   __ mov(r1, value);
   __ RecordWrite(elements, r0, r1, kDontSaveFPRegs);
 }
-
-
-void LoadIC::GenerateFunctionPrototype(MacroAssembler* masm) {
-  // ----------- S t a t e -------------
-  //  -- ecx    : name
-  //  -- edx    : receiver
-  //  -- esp[0] : return address
-  // -----------------------------------
-  Label miss;
-
-  StubCompiler::GenerateLoadFunctionPrototype(masm, edx, eax, ebx, &miss);
-  __ bind(&miss);
-  StubCompiler::GenerateLoadMiss(masm, Code::LOAD_IC);
-}


 // Checks the receiver for special cases (value type, slow case bits).
=======================================
--- /branches/bleeding_edge/src/ia32/stub-cache-ia32.cc Mon Jan 21 09:17:02 2013 +++ /branches/bleeding_edge/src/ia32/stub-cache-ia32.cc Mon Jan 21 09:54:36 2013
@@ -3313,32 +3313,6 @@
   // Return the generated code.
   return GetCode(Code::INTERCEPTOR, name);
 }
-
-
-Handle<Code> KeyedLoadStubCompiler::CompileLoadFunctionPrototype(
-    Handle<String> name) {
-  // ----------- S t a t e -------------
-  //  -- ecx    : key
-  //  -- edx    : receiver
-  //  -- esp[0] : return address
-  // -----------------------------------
-  Label miss;
-
-  Counters* counters = isolate()->counters();
-  __ IncrementCounter(counters->keyed_load_function_prototype(), 1);
-
-  // Check that the name has not changed.
-  __ cmp(ecx, Immediate(name));
-  __ j(not_equal, &miss);
-
-  GenerateLoadFunctionPrototype(masm(), edx, eax, ebx, &miss);
-  __ bind(&miss);
-  __ DecrementCounter(counters->keyed_load_function_prototype(), 1);
-  GenerateLoadMiss(masm(), Code::KEYED_LOAD_IC);
-
-  // Return the generated code.
-  return GetCode(Code::CALLBACKS, name);
-}


 Handle<Code> KeyedLoadStubCompiler::CompileLoadElement(
=======================================
--- /branches/bleeding_edge/src/ic.cc   Mon Jan 21 09:17:02 2013
+++ /branches/bleeding_edge/src/ic.cc   Mon Jan 21 09:54:36 2013
@@ -836,78 +836,61 @@
                     Handle<Object> object,
                     Handle<String> name,
                     MaybeObject** result) {
-  // Use specialized code for getting the length of strings and
-  // string wrapper objects.  The length property of string wrapper
-  // objects is read-only and therefore always returns the length of
-  // the underlying string value.  See ECMA-262 15.5.5.1.
-  if ((object->IsString() || object->IsStringWrapper()) &&
-      name->Equals(isolate()->heap()->length_symbol())) {
-    Handle<Code> stub;
-    if (state == UNINITIALIZED) {
-      stub = pre_monomorphic_stub();
-    } else if (state == PREMONOMORPHIC) {
-      StringLengthStub string_length_stub(kind(), !object->IsString());
-      stub = string_length_stub.GetCode();
-    } else if (state == MONOMORPHIC && object->IsStringWrapper()) {
-      StringLengthStub string_length_stub(kind(), true);
-      stub = string_length_stub.GetCode();
-    } else if (state != MEGAMORPHIC) {
-      ASSERT(state != GENERIC);
-      stub = megamorphic_stub();
-    }
-    if (!stub.is_null()) {
-      set_target(*stub);
+  if (FLAG_use_ic) {
+    // Use specialized code for getting the length of strings and
+    // string wrapper objects.  The length property of string wrapper
+    // objects is read-only and therefore always returns the length of
+    // the underlying string value.  See ECMA-262 15.5.5.1.
+    if ((object->IsString() || object->IsStringWrapper()) &&
+        name->Equals(isolate()->heap()->length_symbol())) {
+      Handle<Code> stub;
+      if (state == UNINITIALIZED) {
+        stub = pre_monomorphic_stub();
+      } else if (state == PREMONOMORPHIC) {
+        StringLengthStub string_length_stub(kind(), !object->IsString());
+        stub = string_length_stub.GetCode();
+      } else if (state == MONOMORPHIC && object->IsStringWrapper()) {
+        StringLengthStub string_length_stub(kind(), true);
+        stub = string_length_stub.GetCode();
+      } else if (state != MEGAMORPHIC) {
+        ASSERT(state != GENERIC);
+        stub = megamorphic_stub();
+      }
+      if (!stub.is_null()) {
+        set_target(*stub);
 #ifdef DEBUG
-      if (FLAG_trace_ic) PrintF("[LoadIC : +#length /string]\n");
+        if (FLAG_trace_ic) PrintF("[LoadIC : +#length /string]\n");
 #endif
+      }
+      // Get the string if we have a string wrapper object.
+      Handle<Object> string = object->IsJSValue()
+          ? Handle<Object>(Handle<JSValue>::cast(object)->value())
+          : object;
+      *result = Smi::FromInt(String::cast(*string)->length());
+      return true;
     }
-    // Get the string if we have a string wrapper object.
-    Handle<Object> string = object->IsJSValue()
-        ? Handle<Object>(Handle<JSValue>::cast(object)->value())
-        : object;
-    *result = Smi::FromInt(String::cast(*string)->length());
-    return true;
-  }

-  // Use specialized code for getting the length of arrays.
- if (object->IsJSArray() && name->Equals(isolate()->heap()->length_symbol())) {
-    Handle<Code> stub;
-    if (state == UNINITIALIZED) {
-      stub = pre_monomorphic_stub();
-    } else if (state == PREMONOMORPHIC) {
-      ArrayLengthStub array_length_stub(kind());
-      stub = array_length_stub.GetCode();
-    } else if (state != MEGAMORPHIC) {
-      ASSERT(state != GENERIC);
-      stub = megamorphic_stub();
-    }
-    if (!stub.is_null()) {
-      set_target(*stub);
+    // Use specialized code for getting the length of arrays.
+    if (object->IsJSArray() &&
+        name->Equals(isolate()->heap()->length_symbol())) {
+      Handle<Code> stub;
+      if (state == UNINITIALIZED) {
+        stub = pre_monomorphic_stub();
+      } else if (state == PREMONOMORPHIC) {
+        ArrayLengthStub array_length_stub(kind());
+        stub = array_length_stub.GetCode();
+      } else if (state != MEGAMORPHIC) {
+        ASSERT(state != GENERIC);
+        stub = megamorphic_stub();
+      }
+      if (!stub.is_null()) {
+        set_target(*stub);
 #ifdef DEBUG
-      if (FLAG_trace_ic) PrintF("[LoadIC : +#length /array]\n");
+        if (FLAG_trace_ic) PrintF("[LoadIC : +#length /array]\n");
 #endif
-    }
-    *result = JSArray::cast(*object)->length();
-    return true;
-  }
-
-  return false;
-}
-
-
-MaybeObject* LoadIC::Load(State state,
-                          Handle<Object> object,
-                          Handle<String> name) {
-  // If the object is undefined or null it's illegal to try to get any
-  // of its properties; throw a TypeError in that case.
-  if (object->IsUndefined() || object->IsNull()) {
-    return TypeError("non_object_property_load", object, name);
-  }
-
-  if (FLAG_use_ic) {
-    MaybeObject* result;
-    if (HandleLoad(state, object, name, &result)) {
-      return result;
+      }
+      *result = JSArray::cast(*object)->length();
+      return true;
     }

     // Use specialized code for getting prototype of functions.
@@ -918,7 +901,8 @@
       if (state == UNINITIALIZED) {
         stub = pre_monomorphic_stub();
       } else if (state == PREMONOMORPHIC) {
-        stub = isolate()->builtins()->LoadIC_FunctionPrototype();
+        FunctionPrototypeStub function_prototype_stub(kind());
+        stub = function_prototype_stub.GetCode();
       } else if (state != MEGAMORPHIC) {
         ASSERT(state != GENERIC);
         stub = megamorphic_stub();
@@ -929,9 +913,28 @@
         if (FLAG_trace_ic) PrintF("[LoadIC : +#prototype /function]\n");
 #endif
       }
-      return Accessors::FunctionGetPrototype(*object, 0);
+      *result = Accessors::FunctionGetPrototype(*object, 0);
+      return true;
     }
   }
+
+  return false;
+}
+
+
+MaybeObject* LoadIC::Load(State state,
+                          Handle<Object> object,
+                          Handle<String> name) {
+  // If the object is undefined or null it's illegal to try to get any
+  // of its properties; throw a TypeError in that case.
+  if (object->IsUndefined() || object->IsNull()) {
+    return TypeError("non_object_property_load", object, name);
+  }
+
+  MaybeObject* result;
+  if (HandleLoad(state, object, name, &result)) {
+    return result;
+  }

   // Check if the name is trivially convertible to an index and get
   // the element if so.
@@ -1170,26 +1173,9 @@
       return TypeError("non_object_property_load", object, name);
     }

-    if (FLAG_use_ic) {
-      MaybeObject* result;
-      if (HandleLoad(state, object, name, &result)) {
-        return result;
-      }
-
-      // TODO(1073): don't ignore the current stub state.
-      // Use specialized code for getting prototype of functions.
-      if (object->IsJSFunction() &&
-          name->Equals(isolate()->heap()->prototype_symbol()) &&
-          Handle<JSFunction>::cast(object)->should_have_prototype()) {
-        Handle<JSFunction> function = Handle<JSFunction>::cast(object);
-        Handle<Code> code =
-            isolate()->stub_cache()->ComputeKeyedLoadFunctionPrototype(
-                name, function);
-        ASSERT(!code.is_null());
-        set_target(*code);
-        TRACE_IC("KeyedLoadIC", name, state, target());
-        return Accessors::FunctionGetPrototype(*object, 0);
-      }
+    MaybeObject* result;
+    if (HandleLoad(state, object, name, &result)) {
+      return result;
     }

     // Check if the name is trivially convertible to an index and get
=======================================
--- /branches/bleeding_edge/src/stub-cache.cc   Mon Jan 21 09:17:02 2013
+++ /branches/bleeding_edge/src/stub-cache.cc   Mon Jan 21 09:54:36 2013
@@ -346,24 +346,6 @@
   JSObject::UpdateMapCodeCache(receiver, name, code);
   return code;
 }
-
-
-Handle<Code> StubCache::ComputeKeyedLoadFunctionPrototype(
-    Handle<String> name,
-    Handle<JSFunction> receiver) {
-  Code::Flags flags =
-      Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, Code::CALLBACKS);
-  Handle<Object> probe(receiver->map()->FindInCodeCache(*name, flags),
-                       isolate_);
-  if (probe->IsCode()) return Handle<Code>::cast(probe);
-
-  KeyedLoadStubCompiler compiler(isolate_);
-  Handle<Code> code = compiler.CompileLoadFunctionPrototype(name);
- PROFILE(isolate_, CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, *code, *name));
-  GDBJIT(AddCode(GDBJITInterface::KEYED_LOAD_IC, *name, *code));
-  JSObject::UpdateMapCodeCache(receiver, name, code);
-  return code;
-}


 Handle<Code> StubCache::ComputeStoreField(Handle<String> name,
=======================================
--- /branches/bleeding_edge/src/stub-cache.h    Mon Jan 21 09:17:02 2013
+++ /branches/bleeding_edge/src/stub-cache.h    Mon Jan 21 09:54:36 2013
@@ -133,9 +133,6 @@
                                            Handle<JSObject> receiver,
                                            Handle<JSObject> holder);

-  Handle<Code> ComputeKeyedLoadFunctionPrototype(Handle<String> name,
- Handle<JSFunction> receiver);
-
   // ---

   Handle<Code> ComputeStoreField(Handle<String> name,
@@ -664,8 +661,6 @@
                                       Handle<JSObject> holder,
                                       Handle<String> name);

-  Handle<Code> CompileLoadFunctionPrototype(Handle<String> name);
-
   Handle<Code> CompileLoadElement(Handle<Map> receiver_map);

   Handle<Code> CompileLoadPolymorphic(MapHandleList* receiver_maps,
=======================================
--- /branches/bleeding_edge/src/x64/code-stubs-x64.cc Mon Jan 21 09:17:02 2013 +++ /branches/bleeding_edge/src/x64/code-stubs-x64.cc Mon Jan 21 09:54:36 2013
@@ -2385,6 +2385,33 @@
   __ bind(&miss);
   StubCompiler::GenerateLoadMiss(masm, kind());
 }
+
+
+void FunctionPrototypeStub::Generate(MacroAssembler* masm) {
+  Label miss;
+  Register receiver;
+  if (kind() == Code::KEYED_LOAD_IC) {
+    // ----------- S t a t e -------------
+    //  -- rax    : key
+    //  -- rdx    : receiver
+    //  -- rsp[0] : return address
+    // -----------------------------------
+    __ Cmp(rax, masm->isolate()->factory()->prototype_symbol());
+    receiver = rdx;
+  } else {
+    ASSERT(kind() == Code::LOAD_IC);
+    // ----------- S t a t e -------------
+    //  -- rax    : receiver
+    //  -- rcx    : name
+    //  -- rsp[0] : return address
+    // -----------------------------------
+    receiver = rax;
+  }
+
+ StubCompiler::GenerateLoadFunctionPrototype(masm, receiver, r8, r9, &miss);
+  __ bind(&miss);
+  StubCompiler::GenerateLoadMiss(masm, kind());
+}


 void StringLengthStub::Generate(MacroAssembler* masm) {
=======================================
--- /branches/bleeding_edge/src/x64/ic-x64.cc   Mon Jan 21 09:17:02 2013
+++ /branches/bleeding_edge/src/x64/ic-x64.cc   Mon Jan 21 09:54:36 2013
@@ -222,20 +222,6 @@
   __ movq(scratch0, value);
   __ RecordWrite(elements, scratch1, scratch0, kDontSaveFPRegs);
 }
-
-
-void LoadIC::GenerateFunctionPrototype(MacroAssembler* masm) {
-  // ----------- S t a t e -------------
-  //  -- rax    : receiver
-  //  -- rcx    : name
-  //  -- rsp[0] : return address
-  // -----------------------------------
-  Label miss;
-
-  StubCompiler::GenerateLoadFunctionPrototype(masm, rax, rdx, rbx, &miss);
-  __ bind(&miss);
-  StubCompiler::GenerateLoadMiss(masm, Code::LOAD_IC);
-}


 // Checks the receiver for special cases (value type, slow case bits).
=======================================
--- /branches/bleeding_edge/src/x64/stub-cache-x64.cc Mon Jan 21 09:17:02 2013 +++ /branches/bleeding_edge/src/x64/stub-cache-x64.cc Mon Jan 21 09:54:36 2013
@@ -3126,32 +3126,6 @@
   // Return the generated code.
   return GetCode(Code::INTERCEPTOR, name);
 }
-
-
-Handle<Code> KeyedLoadStubCompiler::CompileLoadFunctionPrototype(
-    Handle<String> name) {
-  // ----------- S t a t e -------------
-  //  -- rax    : key
-  //  -- rdx    : receiver
-  //  -- rsp[0]  : return address
-  // -----------------------------------
-  Label miss;
-
-  Counters* counters = isolate()->counters();
-  __ IncrementCounter(counters->keyed_load_function_prototype(), 1);
-
-  // Check that the name has not changed.
-  __ Cmp(rax, name);
-  __ j(not_equal, &miss);
-
-  GenerateLoadFunctionPrototype(masm(), rdx, rcx, rbx, &miss);
-  __ bind(&miss);
-  __ DecrementCounter(counters->keyed_load_function_prototype(), 1);
-  GenerateLoadMiss(masm(), Code::KEYED_LOAD_IC);
-
-  // Return the generated code.
-  return GetCode(Code::CALLBACKS, name);
-}


 Handle<Code> KeyedLoadStubCompiler::CompileLoadElement(

--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev

Reply via email to