Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(880)

Side by Side Diff: src/ia32/builtins-ia32.cc

Issue 1337883002: [builtins] Remove the weird STACK_OVERFLOW builtin. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/full-codegen/x64/full-codegen-x64.cc ('k') | src/mips/builtins-mips.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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_IA32 5 #if V8_TARGET_ARCH_IA32
6 6
7 #include "src/code-factory.h" 7 #include "src/code-factory.h"
8 #include "src/codegen.h" 8 #include "src/codegen.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 504 matching lines...) Expand 10 before | Expand all | Expand 10 after
515 // Check if the arguments will overflow the stack. 515 // Check if the arguments will overflow the stack.
516 __ cmp(ecx, edx); 516 __ cmp(ecx, edx);
517 __ j(greater, &okay); // Signed comparison. 517 __ j(greater, &okay); // Signed comparison.
518 518
519 // Out of stack space. 519 // Out of stack space.
520 __ push(Operand(ebp, calleeOffset)); // push this 520 __ push(Operand(ebp, calleeOffset)); // push this
521 if (eax_is_tagged == kEaxIsUntaggedInt) { 521 if (eax_is_tagged == kEaxIsUntaggedInt) {
522 __ SmiTag(eax); 522 __ SmiTag(eax);
523 } 523 }
524 __ push(eax); 524 __ push(eax);
525 __ InvokeBuiltin(Context::STACK_OVERFLOW_BUILTIN_INDEX, CALL_FUNCTION); 525 __ CallRuntime(Runtime::kThrowStackOverflow, 0);
526 526
527 __ bind(&okay); 527 __ bind(&okay);
528 } 528 }
529 529
530 530
531 static void Generate_JSEntryTrampolineHelper(MacroAssembler* masm, 531 static void Generate_JSEntryTrampolineHelper(MacroAssembler* masm,
532 bool is_construct) { 532 bool is_construct) {
533 ProfileEntryHookStub::MaybeCallEntryHook(masm); 533 ProfileEntryHookStub::MaybeCallEntryHook(masm);
534 534
535 // Clear the context before we push it when entering the internal frame. 535 // Clear the context before we push it when entering the internal frame.
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
653 BytecodeArray::kFrameSizeOffset)); 653 BytecodeArray::kFrameSizeOffset));
654 654
655 // Do a stack check to ensure we don't go over the limit. 655 // Do a stack check to ensure we don't go over the limit.
656 Label ok; 656 Label ok;
657 __ mov(ecx, esp); 657 __ mov(ecx, esp);
658 __ sub(ecx, ebx); 658 __ sub(ecx, ebx);
659 ExternalReference stack_limit = 659 ExternalReference stack_limit =
660 ExternalReference::address_of_real_stack_limit(masm->isolate()); 660 ExternalReference::address_of_real_stack_limit(masm->isolate());
661 __ cmp(ecx, Operand::StaticVariable(stack_limit)); 661 __ cmp(ecx, Operand::StaticVariable(stack_limit));
662 __ j(above_equal, &ok); 662 __ j(above_equal, &ok);
663 __ InvokeBuiltin(Context::STACK_OVERFLOW_BUILTIN_INDEX, CALL_FUNCTION); 663 __ CallRuntime(Runtime::kThrowStackOverflow, 0);
664 __ bind(&ok); 664 __ bind(&ok);
665 665
666 // If ok, push undefined as the initial value for all register file entries. 666 // If ok, push undefined as the initial value for all register file entries.
667 Label loop_header; 667 Label loop_header;
668 Label loop_check; 668 Label loop_check;
669 __ mov(eax, Immediate(masm->isolate()->factory()->undefined_value())); 669 __ mov(eax, Immediate(masm->isolate()->factory()->undefined_value()));
670 __ jmp(&loop_check); 670 __ jmp(&loop_check);
671 __ bind(&loop_header); 671 __ bind(&loop_header);
672 // TODO(rmcilroy): Consider doing more than one push per loop iteration. 672 // TODO(rmcilroy): Consider doing more than one push per loop iteration.
673 __ push(eax); 673 __ push(eax);
(...skipping 1018 matching lines...) Expand 10 before | Expand all | Expand 10 after
1692 // ------------------------------------------- 1692 // -------------------------------------------
1693 // Dont adapt arguments. 1693 // Dont adapt arguments.
1694 // ------------------------------------------- 1694 // -------------------------------------------
1695 __ bind(&dont_adapt_arguments); 1695 __ bind(&dont_adapt_arguments);
1696 __ jmp(edx); 1696 __ jmp(edx);
1697 1697
1698 __ bind(&stack_overflow); 1698 __ bind(&stack_overflow);
1699 { 1699 {
1700 FrameScope frame(masm, StackFrame::MANUAL); 1700 FrameScope frame(masm, StackFrame::MANUAL);
1701 EnterArgumentsAdaptorFrame(masm); 1701 EnterArgumentsAdaptorFrame(masm);
1702 __ InvokeBuiltin(Context::STACK_OVERFLOW_BUILTIN_INDEX, CALL_FUNCTION); 1702 __ CallRuntime(Runtime::kThrowStackOverflow, 0);
1703 __ int3(); 1703 __ int3();
1704 } 1704 }
1705 } 1705 }
1706 1706
1707 1707
1708 void Builtins::Generate_OnStackReplacement(MacroAssembler* masm) { 1708 void Builtins::Generate_OnStackReplacement(MacroAssembler* masm) {
1709 // Lookup the function in the JavaScript frame. 1709 // Lookup the function in the JavaScript frame.
1710 __ mov(eax, Operand(ebp, JavaScriptFrameConstants::kFunctionOffset)); 1710 __ mov(eax, Operand(ebp, JavaScriptFrameConstants::kFunctionOffset));
1711 { 1711 {
1712 FrameScope scope(masm, StackFrame::INTERNAL); 1712 FrameScope scope(masm, StackFrame::INTERNAL);
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
1758 1758
1759 __ bind(&ok); 1759 __ bind(&ok);
1760 __ ret(0); 1760 __ ret(0);
1761 } 1761 }
1762 1762
1763 #undef __ 1763 #undef __
1764 } // namespace internal 1764 } // namespace internal
1765 } // namespace v8 1765 } // namespace v8
1766 1766
1767 #endif // V8_TARGET_ARCH_IA32 1767 #endif // V8_TARGET_ARCH_IA32
OLDNEW
« no previous file with comments | « src/full-codegen/x64/full-codegen-x64.cc ('k') | src/mips/builtins-mips.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698