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_MIPS | 5 #if V8_TARGET_ARCH_MIPS |
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 945 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
956 __ LeaveFrame(StackFrame::JAVA_SCRIPT); | 956 __ LeaveFrame(StackFrame::JAVA_SCRIPT); |
957 | 957 |
958 // Drop receiver + arguments and return. | 958 // Drop receiver + arguments and return. |
959 __ lw(at, FieldMemOperand(kInterpreterBytecodeArrayRegister, | 959 __ lw(at, FieldMemOperand(kInterpreterBytecodeArrayRegister, |
960 BytecodeArray::kParameterSizeOffset)); | 960 BytecodeArray::kParameterSizeOffset)); |
961 __ Addu(sp, sp, at); | 961 __ Addu(sp, sp, at); |
962 __ Jump(ra); | 962 __ Jump(ra); |
963 } | 963 } |
964 | 964 |
965 | 965 |
| 966 // static |
| 967 void Builtins::Generate_InterpreterPushArgsAndCall(MacroAssembler* masm) { |
| 968 // ----------- S t a t e ------------- |
| 969 // -- a0 : the number of arguments (not including the receiver) |
| 970 // -- a2 : the address of the first argument to be pushed. Subsequent |
| 971 // arguments should be consecutive above this, in the same order as |
| 972 // they are to be pushed onto the stack. |
| 973 // -- a1 : the target to call (can be any Object). |
| 974 |
| 975 // Find the address of the last argument. |
| 976 __ Addu(a3, a0, Operand(1)); // Add one for receiver. |
| 977 __ sll(a3, a3, kPointerSizeLog2); |
| 978 __ Subu(a3, a2, Operand(a3)); |
| 979 |
| 980 // Push the arguments. |
| 981 Label loop_header, loop_check; |
| 982 __ Branch(&loop_check); |
| 983 __ bind(&loop_header); |
| 984 __ lw(t0, MemOperand(a2)); |
| 985 __ Addu(a2, a2, Operand(-kPointerSize)); |
| 986 __ push(t0); |
| 987 __ bind(&loop_check); |
| 988 __ Branch(&loop_header, gt, a2, Operand(a3)); |
| 989 |
| 990 // Call the target. |
| 991 __ Jump(masm->isolate()->builtins()->Call(), RelocInfo::CODE_TARGET); |
| 992 } |
| 993 |
| 994 |
966 void Builtins::Generate_CompileLazy(MacroAssembler* masm) { | 995 void Builtins::Generate_CompileLazy(MacroAssembler* masm) { |
967 CallRuntimePassFunction(masm, Runtime::kCompileLazy); | 996 CallRuntimePassFunction(masm, Runtime::kCompileLazy); |
968 GenerateTailCallToReturnedCode(masm); | 997 GenerateTailCallToReturnedCode(masm); |
969 } | 998 } |
970 | 999 |
971 | 1000 |
972 static void CallCompileOptimized(MacroAssembler* masm, bool concurrent) { | 1001 static void CallCompileOptimized(MacroAssembler* masm, bool concurrent) { |
973 FrameScope scope(masm, StackFrame::INTERNAL); | 1002 FrameScope scope(masm, StackFrame::INTERNAL); |
974 // Push a copy of the function onto the stack. | 1003 // Push a copy of the function onto the stack. |
975 // Push function as parameter to the runtime call. | 1004 // Push function as parameter to the runtime call. |
(...skipping 727 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1703 // method. | 1732 // method. |
1704 __ bind(&non_constructor); | 1733 __ bind(&non_constructor); |
1705 { | 1734 { |
1706 FrameScope scope(masm, StackFrame::INTERNAL); | 1735 FrameScope scope(masm, StackFrame::INTERNAL); |
1707 __ Push(a1); | 1736 __ Push(a1); |
1708 __ CallRuntime(Runtime::kThrowCalledNonCallable, 1); | 1737 __ CallRuntime(Runtime::kThrowCalledNonCallable, 1); |
1709 } | 1738 } |
1710 } | 1739 } |
1711 | 1740 |
1712 | 1741 |
1713 // static | |
1714 void Builtins::Generate_PushArgsAndCall(MacroAssembler* masm) { | |
1715 // ----------- S t a t e ------------- | |
1716 // -- a0 : the number of arguments (not including the receiver) | |
1717 // -- a2 : the address of the first argument to be pushed. Subsequent | |
1718 // arguments should be consecutive above this, in the same order as | |
1719 // they are to be pushed onto the stack. | |
1720 // -- a1 : the target to call (can be any Object). | |
1721 | |
1722 // Find the address of the last argument. | |
1723 __ Addu(a3, a0, Operand(1)); // Add one for receiver. | |
1724 __ sll(a3, a3, kPointerSizeLog2); | |
1725 __ Subu(a3, a2, Operand(a3)); | |
1726 | |
1727 // Push the arguments. | |
1728 Label loop_header, loop_check; | |
1729 __ Branch(&loop_check); | |
1730 __ bind(&loop_header); | |
1731 __ lw(t0, MemOperand(a2)); | |
1732 __ Addu(a2, a2, Operand(-kPointerSize)); | |
1733 __ push(t0); | |
1734 __ bind(&loop_check); | |
1735 __ Branch(&loop_header, gt, a2, Operand(a3)); | |
1736 | |
1737 // Call the target. | |
1738 __ Jump(masm->isolate()->builtins()->Call(), RelocInfo::CODE_TARGET); | |
1739 } | |
1740 | |
1741 | |
1742 void Builtins::Generate_ArgumentsAdaptorTrampoline(MacroAssembler* masm) { | 1742 void Builtins::Generate_ArgumentsAdaptorTrampoline(MacroAssembler* masm) { |
1743 // State setup as expected by MacroAssembler::InvokePrologue. | 1743 // State setup as expected by MacroAssembler::InvokePrologue. |
1744 // ----------- S t a t e ------------- | 1744 // ----------- S t a t e ------------- |
1745 // -- a0: actual arguments count | 1745 // -- a0: actual arguments count |
1746 // -- a1: function (passed through to callee) | 1746 // -- a1: function (passed through to callee) |
1747 // -- a2: expected arguments count | 1747 // -- a2: expected arguments count |
1748 // ----------------------------------- | 1748 // ----------------------------------- |
1749 | 1749 |
1750 Label stack_overflow; | 1750 Label stack_overflow; |
1751 ArgumentAdaptorStackCheck(masm, &stack_overflow); | 1751 ArgumentAdaptorStackCheck(masm, &stack_overflow); |
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1891 } | 1891 } |
1892 } | 1892 } |
1893 | 1893 |
1894 | 1894 |
1895 #undef __ | 1895 #undef __ |
1896 | 1896 |
1897 } // namespace internal | 1897 } // namespace internal |
1898 } // namespace v8 | 1898 } // namespace v8 |
1899 | 1899 |
1900 #endif // V8_TARGET_ARCH_MIPS | 1900 #endif // V8_TARGET_ARCH_MIPS |
OLD | NEW |