| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 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_ARM | 5 #if V8_TARGET_ARCH_ARM |
| 6 | 6 |
| 7 #include "src/codegen.h" | 7 #include "src/codegen.h" |
| 8 #include "src/debug/debug.h" | 8 #include "src/debug/debug.h" |
| 9 #include "src/deoptimizer.h" | 9 #include "src/deoptimizer.h" |
| 10 #include "src/full-codegen/full-codegen.h" | 10 #include "src/full-codegen/full-codegen.h" |
| (...skipping 948 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 959 __ LeaveFrame(StackFrame::JAVA_SCRIPT); | 959 __ LeaveFrame(StackFrame::JAVA_SCRIPT); |
| 960 | 960 |
| 961 // Drop receiver + arguments and return. | 961 // Drop receiver + arguments and return. |
| 962 __ ldr(ip, FieldMemOperand(kInterpreterBytecodeArrayRegister, | 962 __ ldr(ip, FieldMemOperand(kInterpreterBytecodeArrayRegister, |
| 963 BytecodeArray::kParameterSizeOffset)); | 963 BytecodeArray::kParameterSizeOffset)); |
| 964 __ add(sp, sp, ip, LeaveCC); | 964 __ add(sp, sp, ip, LeaveCC); |
| 965 __ Jump(lr); | 965 __ Jump(lr); |
| 966 } | 966 } |
| 967 | 967 |
| 968 | 968 |
| 969 // static | |
| 970 void Builtins::Generate_InterpreterPushArgsAndCall(MacroAssembler* masm) { | |
| 971 // ----------- S t a t e ------------- | |
| 972 // -- r0 : the number of arguments (not including the receiver) | |
| 973 // -- r2 : the address of the first argument to be pushed. Subsequent | |
| 974 // arguments should be consecutive above this, in the same order as | |
| 975 // they are to be pushed onto the stack. | |
| 976 // -- r1 : the target to call (can be any Object). | |
| 977 | |
| 978 // Find the address of the last argument. | |
| 979 __ add(r3, r0, Operand(1)); // Add one for receiver. | |
| 980 __ mov(r3, Operand(r3, LSL, kPointerSizeLog2)); | |
| 981 __ sub(r3, r2, r3); | |
| 982 | |
| 983 // Push the arguments. | |
| 984 Label loop_header, loop_check; | |
| 985 __ b(al, &loop_check); | |
| 986 __ bind(&loop_header); | |
| 987 __ ldr(r4, MemOperand(r2, -kPointerSize, PostIndex)); | |
| 988 __ push(r4); | |
| 989 __ bind(&loop_check); | |
| 990 __ cmp(r2, r3); | |
| 991 __ b(gt, &loop_header); | |
| 992 | |
| 993 // Call the target. | |
| 994 __ Jump(masm->isolate()->builtins()->Call(), RelocInfo::CODE_TARGET); | |
| 995 } | |
| 996 | |
| 997 | |
| 998 void Builtins::Generate_CompileLazy(MacroAssembler* masm) { | 969 void Builtins::Generate_CompileLazy(MacroAssembler* masm) { |
| 999 CallRuntimePassFunction(masm, Runtime::kCompileLazy); | 970 CallRuntimePassFunction(masm, Runtime::kCompileLazy); |
| 1000 GenerateTailCallToReturnedCode(masm); | 971 GenerateTailCallToReturnedCode(masm); |
| 1001 } | 972 } |
| 1002 | 973 |
| 1003 | 974 |
| 1004 static void CallCompileOptimized(MacroAssembler* masm, bool concurrent) { | 975 static void CallCompileOptimized(MacroAssembler* masm, bool concurrent) { |
| 1005 FrameAndConstantPoolScope scope(masm, StackFrame::INTERNAL); | 976 FrameAndConstantPoolScope scope(masm, StackFrame::INTERNAL); |
| 1006 // Push a copy of the function onto the stack. | 977 // Push a copy of the function onto the stack. |
| 1007 __ push(r1); | 978 __ push(r1); |
| (...skipping 710 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1718 // method. | 1689 // method. |
| 1719 __ bind(&non_constructor); | 1690 __ bind(&non_constructor); |
| 1720 { | 1691 { |
| 1721 FrameAndConstantPoolScope scope(masm, StackFrame::INTERNAL); | 1692 FrameAndConstantPoolScope scope(masm, StackFrame::INTERNAL); |
| 1722 __ Push(r1); | 1693 __ Push(r1); |
| 1723 __ CallRuntime(Runtime::kThrowCalledNonCallable, 1); | 1694 __ CallRuntime(Runtime::kThrowCalledNonCallable, 1); |
| 1724 } | 1695 } |
| 1725 } | 1696 } |
| 1726 | 1697 |
| 1727 | 1698 |
| 1699 // static |
| 1700 void Builtins::Generate_PushArgsAndCall(MacroAssembler* masm) { |
| 1701 // ----------- S t a t e ------------- |
| 1702 // -- r0 : the number of arguments (not including the receiver) |
| 1703 // -- r2 : the address of the first argument to be pushed. Subsequent |
| 1704 // arguments should be consecutive above this, in the same order as |
| 1705 // they are to be pushed onto the stack. |
| 1706 // -- r1 : the target to call (can be any Object). |
| 1707 |
| 1708 // Find the address of the last argument. |
| 1709 __ add(r3, r0, Operand(1)); // Add one for receiver. |
| 1710 __ mov(r3, Operand(r3, LSL, kPointerSizeLog2)); |
| 1711 __ sub(r3, r2, r3); |
| 1712 |
| 1713 // Push the arguments. |
| 1714 Label loop_header, loop_check; |
| 1715 __ b(al, &loop_check); |
| 1716 __ bind(&loop_header); |
| 1717 __ ldr(r4, MemOperand(r2, -kPointerSize, PostIndex)); |
| 1718 __ push(r4); |
| 1719 __ bind(&loop_check); |
| 1720 __ cmp(r2, r3); |
| 1721 __ b(gt, &loop_header); |
| 1722 |
| 1723 // Call the target. |
| 1724 __ Jump(masm->isolate()->builtins()->Call(), RelocInfo::CODE_TARGET); |
| 1725 } |
| 1726 |
| 1727 |
| 1728 void Builtins::Generate_ArgumentsAdaptorTrampoline(MacroAssembler* masm) { | 1728 void Builtins::Generate_ArgumentsAdaptorTrampoline(MacroAssembler* masm) { |
| 1729 // ----------- S t a t e ------------- | 1729 // ----------- S t a t e ------------- |
| 1730 // -- r0 : actual number of arguments | 1730 // -- r0 : actual number of arguments |
| 1731 // -- r1 : function (passed through to callee) | 1731 // -- r1 : function (passed through to callee) |
| 1732 // -- r2 : expected number of arguments | 1732 // -- r2 : expected number of arguments |
| 1733 // ----------------------------------- | 1733 // ----------------------------------- |
| 1734 | 1734 |
| 1735 Label stack_overflow; | 1735 Label stack_overflow; |
| 1736 ArgumentAdaptorStackCheck(masm, &stack_overflow); | 1736 ArgumentAdaptorStackCheck(masm, &stack_overflow); |
| 1737 Label invoke, dont_adapt_arguments; | 1737 Label invoke, dont_adapt_arguments; |
| (...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1868 } | 1868 } |
| 1869 } | 1869 } |
| 1870 | 1870 |
| 1871 | 1871 |
| 1872 #undef __ | 1872 #undef __ |
| 1873 | 1873 |
| 1874 } // namespace internal | 1874 } // namespace internal |
| 1875 } // namespace v8 | 1875 } // namespace v8 |
| 1876 | 1876 |
| 1877 #endif // V8_TARGET_ARCH_ARM | 1877 #endif // V8_TARGET_ARCH_ARM |
| OLD | NEW |