Index: src/arm/stub-cache-arm.cc |
=================================================================== |
--- src/arm/stub-cache-arm.cc (revision 4872) |
+++ src/arm/stub-cache-arm.cc (working copy) |
@@ -1019,6 +1019,14 @@ |
} |
+void CallStubCompiler::GenerateNameCheck(String* name, Label* miss) { |
+ if (kind_ == Code::KEYED_CALL_IC) { |
+ __ cmp(r2, Operand(Handle<String>(name))); |
+ __ b(ne, miss); |
+ } |
+} |
+ |
+ |
void CallStubCompiler::GenerateMissBranch() { |
Handle<Code> ic = ComputeCallMiss(arguments().immediate(), kind_); |
__ Jump(ic, RelocInfo::CODE_TARGET); |
@@ -1035,6 +1043,8 @@ |
// ----------------------------------- |
Label miss; |
+ GenerateNameCheck(name, &miss); |
+ |
const int argc = arguments().immediate(); |
// Get the receiver of the function from the stack into r0. |
@@ -1078,6 +1088,8 @@ |
Label miss; |
+ GenerateNameCheck(name, &miss); |
+ |
// Get the receiver from the stack |
const int argc = arguments().immediate(); |
__ ldr(r1, MemOperand(sp, argc * kPointerSize)); |
@@ -1127,6 +1139,8 @@ |
Label miss; |
+ GenerateNameCheck(name, &miss); |
+ |
// Get the receiver from the stack |
const int argc = arguments().immediate(); |
__ ldr(r1, MemOperand(sp, argc * kPointerSize)); |
@@ -1198,6 +1212,8 @@ |
Label miss_in_smi_check; |
+ GenerateNameCheck(name, &miss_in_smi_check); |
+ |
// Get the receiver from the stack |
const int argc = arguments().immediate(); |
__ ldr(r1, MemOperand(sp, argc * kPointerSize)); |
@@ -1337,6 +1353,8 @@ |
Label miss; |
+ GenerateNameCheck(name, &miss); |
+ |
// Get the number of arguments. |
const int argc = arguments().immediate(); |
@@ -1384,6 +1402,8 @@ |
// ----------------------------------- |
Label miss; |
+ GenerateNameCheck(name, &miss); |
+ |
// Get the number of arguments. |
const int argc = arguments().immediate(); |