| 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 741 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 752 } | 752 } |
| 753 __ cmp(r5, r0); | 753 __ cmp(r5, r0); |
| 754 __ bgt(&okay); // Signed comparison. | 754 __ bgt(&okay); // Signed comparison. |
| 755 | 755 |
| 756 // Out of stack space. | 756 // Out of stack space. |
| 757 __ LoadP(r4, MemOperand(fp, calleeOffset)); | 757 __ LoadP(r4, MemOperand(fp, calleeOffset)); |
| 758 if (argc_is_tagged == kArgcIsUntaggedInt) { | 758 if (argc_is_tagged == kArgcIsUntaggedInt) { |
| 759 __ SmiTag(argc); | 759 __ SmiTag(argc); |
| 760 } | 760 } |
| 761 __ Push(r4, argc); | 761 __ Push(r4, argc); |
| 762 __ InvokeBuiltin(Context::STACK_OVERFLOW_BUILTIN_INDEX, CALL_FUNCTION); | 762 __ CallRuntime(Runtime::kThrowStackOverflow, 0); |
| 763 | 763 |
| 764 __ bind(&okay); | 764 __ bind(&okay); |
| 765 } | 765 } |
| 766 | 766 |
| 767 | 767 |
| 768 static void Generate_JSEntryTrampolineHelper(MacroAssembler* masm, | 768 static void Generate_JSEntryTrampolineHelper(MacroAssembler* masm, |
| 769 bool is_construct) { | 769 bool is_construct) { |
| 770 // Called from Generate_JS_Entry | 770 // Called from Generate_JS_Entry |
| 771 // r3: code entry | 771 // r3: code entry |
| 772 // r4: function | 772 // r4: function |
| (...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 901 // Load frame size (word) from the BytecodeArray object. | 901 // Load frame size (word) from the BytecodeArray object. |
| 902 __ lwz(r5, FieldMemOperand(kInterpreterBytecodeArrayRegister, | 902 __ lwz(r5, FieldMemOperand(kInterpreterBytecodeArrayRegister, |
| 903 BytecodeArray::kFrameSizeOffset)); | 903 BytecodeArray::kFrameSizeOffset)); |
| 904 | 904 |
| 905 // Do a stack check to ensure we don't go over the limit. | 905 // Do a stack check to ensure we don't go over the limit. |
| 906 Label ok; | 906 Label ok; |
| 907 __ sub(r6, sp, r5); | 907 __ sub(r6, sp, r5); |
| 908 __ LoadRoot(r0, Heap::kRealStackLimitRootIndex); | 908 __ LoadRoot(r0, Heap::kRealStackLimitRootIndex); |
| 909 __ cmpl(r6, r0); | 909 __ cmpl(r6, r0); |
| 910 __ bge(&ok); | 910 __ bge(&ok); |
| 911 __ InvokeBuiltin(Context::STACK_OVERFLOW_BUILTIN_INDEX, CALL_FUNCTION); | 911 __ CallRuntime(Runtime::kThrowStackOverflow, 0); |
| 912 __ bind(&ok); | 912 __ bind(&ok); |
| 913 | 913 |
| 914 // If ok, push undefined as the initial value for all register file entries. | 914 // If ok, push undefined as the initial value for all register file entries. |
| 915 // TODO(rmcilroy): Consider doing more than one push per loop iteration. | 915 // TODO(rmcilroy): Consider doing more than one push per loop iteration. |
| 916 Label loop, no_args; | 916 Label loop, no_args; |
| 917 __ LoadRoot(r6, Heap::kUndefinedValueRootIndex); | 917 __ LoadRoot(r6, Heap::kUndefinedValueRootIndex); |
| 918 __ ShiftRightImm(r5, r5, Operand(kPointerSizeLog2), SetRC); | 918 __ ShiftRightImm(r5, r5, Operand(kPointerSizeLog2), SetRC); |
| 919 __ beq(&no_args, cr0); | 919 __ beq(&no_args, cr0); |
| 920 __ mtctr(r5); | 920 __ mtctr(r5); |
| 921 __ bind(&loop); | 921 __ bind(&loop); |
| (...skipping 897 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1819 // ------------------------------------------- | 1819 // ------------------------------------------- |
| 1820 // Dont adapt arguments. | 1820 // Dont adapt arguments. |
| 1821 // ------------------------------------------- | 1821 // ------------------------------------------- |
| 1822 __ bind(&dont_adapt_arguments); | 1822 __ bind(&dont_adapt_arguments); |
| 1823 __ JumpToJSEntry(ip); | 1823 __ JumpToJSEntry(ip); |
| 1824 | 1824 |
| 1825 __ bind(&stack_overflow); | 1825 __ bind(&stack_overflow); |
| 1826 { | 1826 { |
| 1827 FrameScope frame(masm, StackFrame::MANUAL); | 1827 FrameScope frame(masm, StackFrame::MANUAL); |
| 1828 EnterArgumentsAdaptorFrame(masm); | 1828 EnterArgumentsAdaptorFrame(masm); |
| 1829 __ InvokeBuiltin(Context::STACK_OVERFLOW_BUILTIN_INDEX, CALL_FUNCTION); | 1829 __ CallRuntime(Runtime::kThrowStackOverflow, 0); |
| 1830 __ bkpt(0); | 1830 __ bkpt(0); |
| 1831 } | 1831 } |
| 1832 } | 1832 } |
| 1833 | 1833 |
| 1834 | 1834 |
| 1835 #undef __ | 1835 #undef __ |
| 1836 } // namespace internal | 1836 } // namespace internal |
| 1837 } // namespace v8 | 1837 } // namespace v8 |
| 1838 | 1838 |
| 1839 #endif // V8_TARGET_ARCH_PPC | 1839 #endif // V8_TARGET_ARCH_PPC |
| OLD | NEW |