OLD | NEW |
1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 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_PPC | 5 #if V8_TARGET_ARCH_PPC |
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 938 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
949 __ LeaveFrame(StackFrame::JAVA_SCRIPT); | 949 __ LeaveFrame(StackFrame::JAVA_SCRIPT); |
950 | 950 |
951 // Drop receiver + arguments and return. | 951 // Drop receiver + arguments and return. |
952 __ lwz(r0, FieldMemOperand(kInterpreterBytecodeArrayRegister, | 952 __ lwz(r0, FieldMemOperand(kInterpreterBytecodeArrayRegister, |
953 BytecodeArray::kParameterSizeOffset)); | 953 BytecodeArray::kParameterSizeOffset)); |
954 __ add(sp, sp, r0); | 954 __ add(sp, sp, r0); |
955 __ blr(); | 955 __ blr(); |
956 } | 956 } |
957 | 957 |
958 | 958 |
| 959 // static |
| 960 void Builtins::Generate_InterpreterPushArgsAndCall(MacroAssembler* masm) { |
| 961 // ----------- S t a t e ------------- |
| 962 // -- r3 : the number of arguments (not including the receiver) |
| 963 // -- r5 : the address of the first argument to be pushed. Subsequent |
| 964 // arguments should be consecutive above this, in the same order as |
| 965 // they are to be pushed onto the stack. |
| 966 // -- r4 : the target to call (can be any Object). |
| 967 |
| 968 // Calculate number of arguments (add one for receiver). |
| 969 __ addi(r6, r3, Operand(1)); |
| 970 |
| 971 // Push the arguments. |
| 972 Label loop; |
| 973 __ addi(r5, r5, Operand(kPointerSize)); // Bias up for LoadPU |
| 974 __ mtctr(r6); |
| 975 __ bind(&loop); |
| 976 __ LoadPU(r6, MemOperand(r5, -kPointerSize)); |
| 977 __ push(r6); |
| 978 __ bdnz(&loop); |
| 979 |
| 980 // Call the target. |
| 981 __ Jump(masm->isolate()->builtins()->Call(), RelocInfo::CODE_TARGET); |
| 982 } |
| 983 |
| 984 |
959 void Builtins::Generate_CompileLazy(MacroAssembler* masm) { | 985 void Builtins::Generate_CompileLazy(MacroAssembler* masm) { |
960 CallRuntimePassFunction(masm, Runtime::kCompileLazy); | 986 CallRuntimePassFunction(masm, Runtime::kCompileLazy); |
961 GenerateTailCallToReturnedCode(masm); | 987 GenerateTailCallToReturnedCode(masm); |
962 } | 988 } |
963 | 989 |
964 | 990 |
965 static void CallCompileOptimized(MacroAssembler* masm, bool concurrent) { | 991 static void CallCompileOptimized(MacroAssembler* masm, bool concurrent) { |
966 FrameAndConstantPoolScope scope(masm, StackFrame::INTERNAL); | 992 FrameAndConstantPoolScope scope(masm, StackFrame::INTERNAL); |
967 // Push a copy of the function onto the stack. | 993 // Push a copy of the function onto the stack. |
968 // Push function as parameter to the runtime call. | 994 // Push function as parameter to the runtime call. |
(...skipping 743 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1712 // method. | 1738 // method. |
1713 __ bind(&non_constructor); | 1739 __ bind(&non_constructor); |
1714 { | 1740 { |
1715 FrameAndConstantPoolScope scope(masm, StackFrame::INTERNAL); | 1741 FrameAndConstantPoolScope scope(masm, StackFrame::INTERNAL); |
1716 __ Push(r4); | 1742 __ Push(r4); |
1717 __ CallRuntime(Runtime::kThrowCalledNonCallable, 1); | 1743 __ CallRuntime(Runtime::kThrowCalledNonCallable, 1); |
1718 } | 1744 } |
1719 } | 1745 } |
1720 | 1746 |
1721 | 1747 |
1722 // static | |
1723 void Builtins::Generate_PushArgsAndCall(MacroAssembler* masm) { | |
1724 // ----------- S t a t e ------------- | |
1725 // -- r3 : the number of arguments (not including the receiver) | |
1726 // -- r5 : the address of the first argument to be pushed. Subsequent | |
1727 // arguments should be consecutive above this, in the same order as | |
1728 // they are to be pushed onto the stack. | |
1729 // -- r4 : the target to call (can be any Object). | |
1730 | |
1731 // Calculate number of arguments (add one for receiver). | |
1732 __ addi(r6, r3, Operand(1)); | |
1733 | |
1734 // Push the arguments. | |
1735 Label loop; | |
1736 __ addi(r5, r5, Operand(kPointerSize)); // Bias up for LoadPU | |
1737 __ mtctr(r6); | |
1738 __ bind(&loop); | |
1739 __ LoadPU(r6, MemOperand(r5, -kPointerSize)); | |
1740 __ push(r6); | |
1741 __ bdnz(&loop); | |
1742 | |
1743 // Call the target. | |
1744 __ Jump(masm->isolate()->builtins()->Call(), RelocInfo::CODE_TARGET); | |
1745 } | |
1746 | |
1747 | |
1748 void Builtins::Generate_ArgumentsAdaptorTrampoline(MacroAssembler* masm) { | 1748 void Builtins::Generate_ArgumentsAdaptorTrampoline(MacroAssembler* masm) { |
1749 // ----------- S t a t e ------------- | 1749 // ----------- S t a t e ------------- |
1750 // -- r3 : actual number of arguments | 1750 // -- r3 : actual number of arguments |
1751 // -- r4 : function (passed through to callee) | 1751 // -- r4 : function (passed through to callee) |
1752 // -- r5 : expected number of arguments | 1752 // -- r5 : expected number of arguments |
1753 // ----------------------------------- | 1753 // ----------------------------------- |
1754 | 1754 |
1755 Label stack_overflow; | 1755 Label stack_overflow; |
1756 ArgumentAdaptorStackCheck(masm, &stack_overflow); | 1756 ArgumentAdaptorStackCheck(masm, &stack_overflow); |
1757 Label invoke, dont_adapt_arguments; | 1757 Label invoke, dont_adapt_arguments; |
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1902 __ bkpt(0); | 1902 __ bkpt(0); |
1903 } | 1903 } |
1904 } | 1904 } |
1905 | 1905 |
1906 | 1906 |
1907 #undef __ | 1907 #undef __ |
1908 } // namespace internal | 1908 } // namespace internal |
1909 } // namespace v8 | 1909 } // namespace v8 |
1910 | 1910 |
1911 #endif // V8_TARGET_ARCH_PPC | 1911 #endif // V8_TARGET_ARCH_PPC |
OLD | NEW |