| OLD | NEW |
| 1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #if V8_TARGET_ARCH_ARM64 | 5 #if V8_TARGET_ARCH_ARM64 |
| 6 | 6 |
| 7 #include "src/code-stubs.h" | 7 #include "src/code-stubs.h" |
| 8 #include "src/api-arguments.h" | 8 #include "src/api-arguments.h" |
| 9 #include "src/bootstrapper.h" | 9 #include "src/bootstrapper.h" |
| 10 #include "src/codegen.h" | 10 #include "src/codegen.h" |
| (...skipping 2165 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2176 __ B(ne, miss); | 2176 __ B(ne, miss); |
| 2177 | 2177 |
| 2178 __ Mov(x0, Operand(arg_count())); | 2178 __ Mov(x0, Operand(arg_count())); |
| 2179 | 2179 |
| 2180 // Increment the call count for monomorphic function calls. | 2180 // Increment the call count for monomorphic function calls. |
| 2181 __ Add(feedback_vector, feedback_vector, | 2181 __ Add(feedback_vector, feedback_vector, |
| 2182 Operand::UntagSmiAndScale(index, kPointerSizeLog2)); | 2182 Operand::UntagSmiAndScale(index, kPointerSizeLog2)); |
| 2183 __ Add(feedback_vector, feedback_vector, | 2183 __ Add(feedback_vector, feedback_vector, |
| 2184 Operand(FixedArray::kHeaderSize + kPointerSize)); | 2184 Operand(FixedArray::kHeaderSize + kPointerSize)); |
| 2185 __ Ldr(index, FieldMemOperand(feedback_vector, 0)); | 2185 __ Ldr(index, FieldMemOperand(feedback_vector, 0)); |
| 2186 __ Add(index, index, Operand(Smi::FromInt(CallICNexus::kCallCountIncrement))); | 2186 __ Add(index, index, Operand(Smi::FromInt(1))); |
| 2187 __ Str(index, FieldMemOperand(feedback_vector, 0)); | 2187 __ Str(index, FieldMemOperand(feedback_vector, 0)); |
| 2188 | 2188 |
| 2189 // Set up arguments for the array constructor stub. | 2189 // Set up arguments for the array constructor stub. |
| 2190 Register allocation_site_arg = feedback_vector; | 2190 Register allocation_site_arg = feedback_vector; |
| 2191 Register new_target_arg = index; | 2191 Register new_target_arg = index; |
| 2192 __ Mov(allocation_site_arg, allocation_site); | 2192 __ Mov(allocation_site_arg, allocation_site); |
| 2193 __ Mov(new_target_arg, function); | 2193 __ Mov(new_target_arg, function); |
| 2194 ArrayConstructorStub stub(masm->isolate(), arg_count()); | 2194 ArrayConstructorStub stub(masm->isolate(), arg_count()); |
| 2195 __ TailCallStub(&stub); | 2195 __ TailCallStub(&stub); |
| 2196 } | 2196 } |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2236 // The compare above could have been a SMI/SMI comparison. Guard against this | 2236 // The compare above could have been a SMI/SMI comparison. Guard against this |
| 2237 // convincing us that we have a monomorphic JSFunction. | 2237 // convincing us that we have a monomorphic JSFunction. |
| 2238 __ JumpIfSmi(function, &extra_checks_or_miss); | 2238 __ JumpIfSmi(function, &extra_checks_or_miss); |
| 2239 | 2239 |
| 2240 // Increment the call count for monomorphic function calls. | 2240 // Increment the call count for monomorphic function calls. |
| 2241 __ Add(feedback_vector, feedback_vector, | 2241 __ Add(feedback_vector, feedback_vector, |
| 2242 Operand::UntagSmiAndScale(index, kPointerSizeLog2)); | 2242 Operand::UntagSmiAndScale(index, kPointerSizeLog2)); |
| 2243 __ Add(feedback_vector, feedback_vector, | 2243 __ Add(feedback_vector, feedback_vector, |
| 2244 Operand(FixedArray::kHeaderSize + kPointerSize)); | 2244 Operand(FixedArray::kHeaderSize + kPointerSize)); |
| 2245 __ Ldr(index, FieldMemOperand(feedback_vector, 0)); | 2245 __ Ldr(index, FieldMemOperand(feedback_vector, 0)); |
| 2246 __ Add(index, index, Operand(Smi::FromInt(CallICNexus::kCallCountIncrement))); | 2246 __ Add(index, index, Operand(Smi::FromInt(1))); |
| 2247 __ Str(index, FieldMemOperand(feedback_vector, 0)); | 2247 __ Str(index, FieldMemOperand(feedback_vector, 0)); |
| 2248 | 2248 |
| 2249 __ Bind(&call_function); | 2249 __ Bind(&call_function); |
| 2250 __ Mov(x0, argc); | 2250 __ Mov(x0, argc); |
| 2251 __ Jump(masm->isolate()->builtins()->CallFunction(convert_mode(), | 2251 __ Jump(masm->isolate()->builtins()->CallFunction(convert_mode(), |
| 2252 tail_call_mode()), | 2252 tail_call_mode()), |
| 2253 RelocInfo::CODE_TARGET); | 2253 RelocInfo::CODE_TARGET); |
| 2254 | 2254 |
| 2255 __ bind(&extra_checks_or_miss); | 2255 __ bind(&extra_checks_or_miss); |
| 2256 Label uninitialized, miss, not_allocation_site; | 2256 Label uninitialized, miss, not_allocation_site; |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2301 __ B(eq, &miss); | 2301 __ B(eq, &miss); |
| 2302 | 2302 |
| 2303 // Make sure the function belongs to the same native context. | 2303 // Make sure the function belongs to the same native context. |
| 2304 __ Ldr(x4, FieldMemOperand(function, JSFunction::kContextOffset)); | 2304 __ Ldr(x4, FieldMemOperand(function, JSFunction::kContextOffset)); |
| 2305 __ Ldr(x4, ContextMemOperand(x4, Context::NATIVE_CONTEXT_INDEX)); | 2305 __ Ldr(x4, ContextMemOperand(x4, Context::NATIVE_CONTEXT_INDEX)); |
| 2306 __ Ldr(x5, NativeContextMemOperand()); | 2306 __ Ldr(x5, NativeContextMemOperand()); |
| 2307 __ Cmp(x4, x5); | 2307 __ Cmp(x4, x5); |
| 2308 __ B(ne, &miss); | 2308 __ B(ne, &miss); |
| 2309 | 2309 |
| 2310 // Initialize the call counter. | 2310 // Initialize the call counter. |
| 2311 __ Mov(x5, Smi::FromInt(CallICNexus::kCallCountIncrement)); | 2311 __ Mov(x5, Smi::FromInt(1)); |
| 2312 __ Adds(x4, feedback_vector, | 2312 __ Adds(x4, feedback_vector, |
| 2313 Operand::UntagSmiAndScale(index, kPointerSizeLog2)); | 2313 Operand::UntagSmiAndScale(index, kPointerSizeLog2)); |
| 2314 __ Str(x5, FieldMemOperand(x4, FixedArray::kHeaderSize + kPointerSize)); | 2314 __ Str(x5, FieldMemOperand(x4, FixedArray::kHeaderSize + kPointerSize)); |
| 2315 | 2315 |
| 2316 // Store the function. Use a stub since we need a frame for allocation. | 2316 // Store the function. Use a stub since we need a frame for allocation. |
| 2317 // x2 - vector | 2317 // x2 - vector |
| 2318 // x3 - slot | 2318 // x3 - slot |
| 2319 // x1 - function | 2319 // x1 - function |
| 2320 { | 2320 { |
| 2321 FrameScope scope(masm, StackFrame::INTERNAL); | 2321 FrameScope scope(masm, StackFrame::INTERNAL); |
| (...skipping 3512 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5834 kStackUnwindSpace, NULL, spill_offset, | 5834 kStackUnwindSpace, NULL, spill_offset, |
| 5835 return_value_operand, NULL); | 5835 return_value_operand, NULL); |
| 5836 } | 5836 } |
| 5837 | 5837 |
| 5838 #undef __ | 5838 #undef __ |
| 5839 | 5839 |
| 5840 } // namespace internal | 5840 } // namespace internal |
| 5841 } // namespace v8 | 5841 } // namespace v8 |
| 5842 | 5842 |
| 5843 #endif // V8_TARGET_ARCH_ARM64 | 5843 #endif // V8_TARGET_ARCH_ARM64 |
| OLD | NEW |