Index: src/ia32/code-stubs-ia32.cc |
diff --git a/src/ia32/code-stubs-ia32.cc b/src/ia32/code-stubs-ia32.cc |
index 91df47a91e9987b0aac3b16c7c6a832bee5458ca..c05a1a81a806bf1678af131f13504a2c6e8baab1 100644 |
--- a/src/ia32/code-stubs-ia32.cc |
+++ b/src/ia32/code-stubs-ia32.cc |
@@ -652,9 +652,20 @@ void MathPowStub::Generate(MacroAssembler* masm) { |
void FunctionPrototypeStub::Generate(MacroAssembler* masm) { |
Label miss; |
Register receiver = LoadDescriptor::ReceiverRegister(); |
+ if (FLAG_vector_ics) { |
+ // With careful management, we won't have to save slot and vector on |
+ // the stack. Simply handle the possibly missing case first. |
+ // TODO(mvstanton): this code can be more efficient. |
+ __ cmp(FieldOperand(receiver, JSFunction::kPrototypeOrInitialMapOffset), |
+ Immediate(isolate()->factory()->the_hole_value())); |
+ __ j(equal, &miss); |
+ __ TryGetFunctionPrototype(receiver, eax, ebx, &miss); |
+ __ ret(0); |
+ } else { |
+ NamedLoadHandlerCompiler::GenerateLoadFunctionPrototype(masm, receiver, eax, |
+ ebx, &miss); |
+ } |
- NamedLoadHandlerCompiler::GenerateLoadFunctionPrototype(masm, receiver, eax, |
- ebx, &miss); |
__ bind(&miss); |
PropertyAccessCompiler::TailCallBuiltin( |
masm, PropertyAccessCompiler::MissBuiltin(Code::LOAD_IC)); |