Index: src/ic/arm/handler-compiler-arm.cc |
diff --git a/src/ic/arm/handler-compiler-arm.cc b/src/ic/arm/handler-compiler-arm.cc |
index be017c8e02007dad236ca13c1f3bff6664c27c24..9207d22c1ad2b62d55eec3c91f37cb0c15fc365a 100644 |
--- a/src/ic/arm/handler-compiler-arm.cc |
+++ b/src/ic/arm/handler-compiler-arm.cc |
@@ -286,11 +286,17 @@ void PropertyHandlerCompiler::GenerateApiAccessorCall( |
call_data_undefined = true; |
__ LoadRoot(data, Heap::kUndefinedValueRootIndex); |
} else { |
- __ ldr(data, |
- FieldMemOperand(callee, JSFunction::kSharedFunctionInfoOffset)); |
- __ ldr(data, |
- FieldMemOperand(data, SharedFunctionInfo::kFunctionDataOffset)); |
- __ ldr(data, FieldMemOperand(data, FunctionTemplateInfo::kCallCodeOffset)); |
+ if (optimization.is_constant_call()) { |
+ __ ldr(data, |
+ FieldMemOperand(callee, JSFunction::kSharedFunctionInfoOffset)); |
+ __ ldr(data, |
+ FieldMemOperand(data, SharedFunctionInfo::kFunctionDataOffset)); |
+ __ ldr(data, |
+ FieldMemOperand(data, FunctionTemplateInfo::kCallCodeOffset)); |
+ } else { |
+ __ ldr(data, |
+ FieldMemOperand(callee, FunctionTemplateInfo::kCallCodeOffset)); |
+ } |
__ ldr(data, FieldMemOperand(data, CallHandlerInfo::kDataOffset)); |
} |
@@ -309,7 +315,8 @@ void PropertyHandlerCompiler::GenerateApiAccessorCall( |
__ mov(api_function_address, Operand(ref)); |
// Jump to stub. |
- CallApiAccessorStub stub(isolate, is_store, call_data_undefined); |
+ CallApiAccessorStub stub(isolate, is_store, call_data_undefined, |
+ !optimization.is_constant_call()); |
__ TailCallStub(&stub); |
} |