Index: src/arm/stub-cache-arm.cc |
diff --git a/src/arm/stub-cache-arm.cc b/src/arm/stub-cache-arm.cc |
index ce1d85448158d8b6d70728bcb633d5dbaa6b8d80..ee98d126158cdce64cd7e445897311f98b239ea2 100644 |
--- a/src/arm/stub-cache-arm.cc |
+++ b/src/arm/stub-cache-arm.cc |
@@ -370,27 +370,31 @@ void StubCompiler::GenerateLoadStringLength(MacroAssembler* masm, |
Register receiver, |
Register scratch1, |
Register scratch2, |
- Label* miss) { |
+ Label* miss, |
+ bool support_wrappers) { |
Label check_wrapper; |
// Check if the object is a string leaving the instance type in the |
// scratch1 register. |
- GenerateStringCheck(masm, receiver, scratch1, scratch2, miss, &check_wrapper); |
+ GenerateStringCheck(masm, receiver, scratch1, scratch2, miss, |
+ support_wrappers ? &check_wrapper : miss); |
// Load length directly from the string. |
__ ldr(r0, FieldMemOperand(receiver, String::kLengthOffset)); |
__ Ret(); |
- // Check if the object is a JSValue wrapper. |
- __ bind(&check_wrapper); |
- __ cmp(scratch1, Operand(JS_VALUE_TYPE)); |
- __ b(ne, miss); |
+ if (support_wrappers) { |
+ // Check if the object is a JSValue wrapper. |
+ __ bind(&check_wrapper); |
+ __ cmp(scratch1, Operand(JS_VALUE_TYPE)); |
+ __ b(ne, miss); |
- // Unwrap the value and check if the wrapped value is a string. |
- __ ldr(scratch1, FieldMemOperand(receiver, JSValue::kValueOffset)); |
- GenerateStringCheck(masm, scratch1, scratch2, scratch2, miss, miss); |
- __ ldr(r0, FieldMemOperand(scratch1, String::kLengthOffset)); |
- __ Ret(); |
+ // Unwrap the value and check if the wrapped value is a string. |
+ __ ldr(scratch1, FieldMemOperand(receiver, JSValue::kValueOffset)); |
+ GenerateStringCheck(masm, scratch1, scratch2, scratch2, miss, miss); |
+ __ ldr(r0, FieldMemOperand(scratch1, String::kLengthOffset)); |
+ __ Ret(); |
+ } |
} |
@@ -2995,7 +2999,7 @@ MaybeObject* KeyedLoadStubCompiler::CompileLoadStringLength(String* name) { |
__ cmp(r0, Operand(Handle<String>(name))); |
__ b(ne, &miss); |
- GenerateLoadStringLength(masm(), r1, r2, r3, &miss); |
+ GenerateLoadStringLength(masm(), r1, r2, r3, &miss, true); |
__ bind(&miss); |
__ DecrementCounter(&Counters::keyed_load_string_length, 1, r2, r3); |