| 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/arm64/frames-arm64.h" | 7 #include "src/arm64/frames-arm64.h" | 
| 8 #include "src/codegen.h" | 8 #include "src/codegen.h" | 
| 9 #include "src/debug/debug.h" | 9 #include "src/debug/debug.h" | 
| 10 #include "src/deoptimizer.h" | 10 #include "src/deoptimizer.h" | 
| (...skipping 2080 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2091 | 2091 | 
| 2092   // Prepare for tail call only if the debugger is not active. | 2092   // Prepare for tail call only if the debugger is not active. | 
| 2093   Label done; | 2093   Label done; | 
| 2094   ExternalReference debug_is_active = | 2094   ExternalReference debug_is_active = | 
| 2095       ExternalReference::debug_is_active_address(masm->isolate()); | 2095       ExternalReference::debug_is_active_address(masm->isolate()); | 
| 2096   __ Mov(scratch1, Operand(debug_is_active)); | 2096   __ Mov(scratch1, Operand(debug_is_active)); | 
| 2097   __ Ldrb(scratch1, MemOperand(scratch1)); | 2097   __ Ldrb(scratch1, MemOperand(scratch1)); | 
| 2098   __ Cmp(scratch1, Operand(0)); | 2098   __ Cmp(scratch1, Operand(0)); | 
| 2099   __ B(ne, &done); | 2099   __ B(ne, &done); | 
| 2100 | 2100 | 
|  | 2101   // Drop possible interpreter handler/stub frame. | 
|  | 2102   { | 
|  | 2103     Label no_interpreter_frame; | 
|  | 2104     __ Ldr(scratch3, MemOperand(fp, StandardFrameConstants::kMarkerOffset)); | 
|  | 2105     __ Cmp(scratch3, Operand(Smi::FromInt(StackFrame::STUB))); | 
|  | 2106     __ B(ne, &no_interpreter_frame); | 
|  | 2107     __ Ldr(fp, MemOperand(fp, StandardFrameConstants::kCallerFPOffset)); | 
|  | 2108     __ bind(&no_interpreter_frame); | 
|  | 2109   } | 
|  | 2110 | 
| 2101   // Check if next frame is an arguments adaptor frame. | 2111   // Check if next frame is an arguments adaptor frame. | 
| 2102   Label no_arguments_adaptor, formal_parameter_count_loaded; | 2112   Label no_arguments_adaptor, formal_parameter_count_loaded; | 
| 2103   __ Ldr(scratch2, MemOperand(fp, StandardFrameConstants::kCallerFPOffset)); | 2113   __ Ldr(scratch2, MemOperand(fp, StandardFrameConstants::kCallerFPOffset)); | 
| 2104   __ Ldr(scratch3, | 2114   __ Ldr(scratch3, | 
| 2105          MemOperand(scratch2, StandardFrameConstants::kContextOffset)); | 2115          MemOperand(scratch2, StandardFrameConstants::kContextOffset)); | 
| 2106   __ Cmp(scratch3, Operand(Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR))); | 2116   __ Cmp(scratch3, Operand(Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR))); | 
| 2107   __ B(ne, &no_arguments_adaptor); | 2117   __ B(ne, &no_arguments_adaptor); | 
| 2108 | 2118 | 
| 2109   // Drop arguments adaptor frame and load arguments count. | 2119   // Drop arguments adaptor frame and load arguments count. | 
| 2110   __ mov(fp, scratch2); | 2120   __ mov(fp, scratch2); | 
| (...skipping 455 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2566 | 2576 | 
| 2567   // Called Construct on an Object that doesn't have a [[Construct]] internal | 2577   // Called Construct on an Object that doesn't have a [[Construct]] internal | 
| 2568   // method. | 2578   // method. | 
| 2569   __ bind(&non_constructor); | 2579   __ bind(&non_constructor); | 
| 2570   __ Jump(masm->isolate()->builtins()->ConstructedNonConstructable(), | 2580   __ Jump(masm->isolate()->builtins()->ConstructedNonConstructable(), | 
| 2571           RelocInfo::CODE_TARGET); | 2581           RelocInfo::CODE_TARGET); | 
| 2572 } | 2582 } | 
| 2573 | 2583 | 
| 2574 | 2584 | 
| 2575 // static | 2585 // static | 
| 2576 void Builtins::Generate_InterpreterPushArgsAndCall(MacroAssembler* masm) { | 2586 void Builtins::Generate_InterpreterPushArgsAndCallImpl( | 
|  | 2587     MacroAssembler* masm, TailCallMode tail_call_mode) { | 
| 2577   // ----------- S t a t e ------------- | 2588   // ----------- S t a t e ------------- | 
| 2578   //  -- x0 : the number of arguments (not including the receiver) | 2589   //  -- x0 : the number of arguments (not including the receiver) | 
| 2579   //  -- x2 : the address of the first argument to be pushed. Subsequent | 2590   //  -- x2 : the address of the first argument to be pushed. Subsequent | 
| 2580   //          arguments should be consecutive above this, in the same order as | 2591   //          arguments should be consecutive above this, in the same order as | 
| 2581   //          they are to be pushed onto the stack. | 2592   //          they are to be pushed onto the stack. | 
| 2582   //  -- x1 : the target to call (can be any Object). | 2593   //  -- x1 : the target to call (can be any Object). | 
| 2583   // ----------------------------------- | 2594   // ----------------------------------- | 
| 2584 | 2595 | 
| 2585   // Find the address of the last argument. | 2596   // Find the address of the last argument. | 
| 2586   __ add(x3, x0, Operand(1));  // Add one for receiver. | 2597   __ add(x3, x0, Operand(1));  // Add one for receiver. | 
| 2587   __ lsl(x3, x3, kPointerSizeLog2); | 2598   __ lsl(x3, x3, kPointerSizeLog2); | 
| 2588   __ sub(x4, x2, x3); | 2599   __ sub(x4, x2, x3); | 
| 2589 | 2600 | 
| 2590   // Push the arguments. | 2601   // Push the arguments. | 
| 2591   Label loop_header, loop_check; | 2602   Label loop_header, loop_check; | 
| 2592   __ Mov(x5, jssp); | 2603   __ Mov(x5, jssp); | 
| 2593   __ Claim(x3, 1); | 2604   __ Claim(x3, 1); | 
| 2594   __ B(&loop_check); | 2605   __ B(&loop_check); | 
| 2595   __ Bind(&loop_header); | 2606   __ Bind(&loop_header); | 
| 2596   // TODO(rmcilroy): Push two at a time once we ensure we keep stack aligned. | 2607   // TODO(rmcilroy): Push two at a time once we ensure we keep stack aligned. | 
| 2597   __ Ldr(x3, MemOperand(x2, -kPointerSize, PostIndex)); | 2608   __ Ldr(x3, MemOperand(x2, -kPointerSize, PostIndex)); | 
| 2598   __ Str(x3, MemOperand(x5, -kPointerSize, PreIndex)); | 2609   __ Str(x3, MemOperand(x5, -kPointerSize, PreIndex)); | 
| 2599   __ Bind(&loop_check); | 2610   __ Bind(&loop_check); | 
| 2600   __ Cmp(x2, x4); | 2611   __ Cmp(x2, x4); | 
| 2601   __ B(gt, &loop_header); | 2612   __ B(gt, &loop_header); | 
| 2602 | 2613 | 
| 2603   // Call the target. | 2614   // Call the target. | 
| 2604   __ Jump(masm->isolate()->builtins()->Call(), RelocInfo::CODE_TARGET); | 2615   __ Jump(masm->isolate()->builtins()->Call(ConvertReceiverMode::kAny, | 
|  | 2616                                             tail_call_mode), | 
|  | 2617           RelocInfo::CODE_TARGET); | 
| 2605 } | 2618 } | 
| 2606 | 2619 | 
| 2607 | 2620 | 
| 2608 // static | 2621 // static | 
| 2609 void Builtins::Generate_InterpreterPushArgsAndConstruct(MacroAssembler* masm) { | 2622 void Builtins::Generate_InterpreterPushArgsAndConstruct(MacroAssembler* masm) { | 
| 2610   // ----------- S t a t e ------------- | 2623   // ----------- S t a t e ------------- | 
| 2611   // -- x0 : argument count (not including receiver) | 2624   // -- x0 : argument count (not including receiver) | 
| 2612   // -- x3 : new target | 2625   // -- x3 : new target | 
| 2613   // -- x1 : constructor to call | 2626   // -- x1 : constructor to call | 
| 2614   // -- x2 : address of the first argument | 2627   // -- x2 : address of the first argument | 
| (...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2811   } | 2824   } | 
| 2812 } | 2825 } | 
| 2813 | 2826 | 
| 2814 | 2827 | 
| 2815 #undef __ | 2828 #undef __ | 
| 2816 | 2829 | 
| 2817 }  // namespace internal | 2830 }  // namespace internal | 
| 2818 }  // namespace v8 | 2831 }  // namespace v8 | 
| 2819 | 2832 | 
| 2820 #endif  // V8_TARGET_ARCH_ARM | 2833 #endif  // V8_TARGET_ARCH_ARM | 
| OLD | NEW | 
|---|