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 |
969 void Builtins::Generate_CompileLazy(MacroAssembler* masm) { | 998 void Builtins::Generate_CompileLazy(MacroAssembler* masm) { |
970 CallRuntimePassFunction(masm, Runtime::kCompileLazy); | 999 CallRuntimePassFunction(masm, Runtime::kCompileLazy); |
971 GenerateTailCallToReturnedCode(masm); | 1000 GenerateTailCallToReturnedCode(masm); |
972 } | 1001 } |
973 | 1002 |
974 | 1003 |
975 static void CallCompileOptimized(MacroAssembler* masm, bool concurrent) { | 1004 static void CallCompileOptimized(MacroAssembler* masm, bool concurrent) { |
976 FrameAndConstantPoolScope scope(masm, StackFrame::INTERNAL); | 1005 FrameAndConstantPoolScope scope(masm, StackFrame::INTERNAL); |
977 // Push a copy of the function onto the stack. | 1006 // Push a copy of the function onto the stack. |
978 __ push(r1); | 1007 __ push(r1); |
(...skipping 710 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1689 // method. | 1718 // method. |
1690 __ bind(&non_constructor); | 1719 __ bind(&non_constructor); |
1691 { | 1720 { |
1692 FrameAndConstantPoolScope scope(masm, StackFrame::INTERNAL); | 1721 FrameAndConstantPoolScope scope(masm, StackFrame::INTERNAL); |
1693 __ Push(r1); | 1722 __ Push(r1); |
1694 __ CallRuntime(Runtime::kThrowCalledNonCallable, 1); | 1723 __ CallRuntime(Runtime::kThrowCalledNonCallable, 1); |
1695 } | 1724 } |
1696 } | 1725 } |
1697 | 1726 |
1698 | 1727 |
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 |