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

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

Issue 1387543002: Revert of [Interpreter] Add CallRuntime support to the interpreter. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 2 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/compiler/interpreter-assembler.cc ('k') | src/ia32/code-stubs-ia32.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 690 matching lines...) Expand 10 before | Expand all | Expand 10 after
701 // Drop receiver + arguments and return. 701 // Drop receiver + arguments and return.
702 __ mov(ebx, FieldOperand(kInterpreterBytecodeArrayRegister, 702 __ mov(ebx, FieldOperand(kInterpreterBytecodeArrayRegister,
703 BytecodeArray::kParameterSizeOffset)); 703 BytecodeArray::kParameterSizeOffset));
704 __ pop(ecx); 704 __ pop(ecx);
705 __ add(esp, ebx); 705 __ add(esp, ebx);
706 __ push(ecx); 706 __ push(ecx);
707 __ ret(0); 707 __ ret(0);
708 } 708 }
709 709
710 710
711 // static
712 void Builtins::Generate_InterpreterPushArgsAndCall(MacroAssembler* masm) {
713 // ----------- S t a t e -------------
714 // -- eax : the number of arguments (not including the receiver)
715 // -- ebx : the address of the first argument to be pushed. Subsequent
716 // arguments should be consecutive above this, in the same order as
717 // they are to be pushed onto the stack.
718 // -- edi : the target to call (can be any Object).
719
720 // Pop return address to allow tail-call after pushing arguments.
721 __ Pop(edx);
722
723 // Find the address of the last argument.
724 __ mov(ecx, eax);
725 __ add(ecx, Immediate(1)); // Add one for receiver.
726 __ shl(ecx, kPointerSizeLog2);
727 __ neg(ecx);
728 __ add(ecx, ebx);
729
730 // Push the arguments.
731 Label loop_header, loop_check;
732 __ jmp(&loop_check);
733 __ bind(&loop_header);
734 __ Push(Operand(ebx, 0));
735 __ sub(ebx, Immediate(kPointerSize));
736 __ bind(&loop_check);
737 __ cmp(ebx, ecx);
738 __ j(greater, &loop_header, Label::kNear);
739
740 // Call the target.
741 __ Push(edx); // Re-push return address.
742 __ Jump(masm->isolate()->builtins()->Call(), RelocInfo::CODE_TARGET);
743 }
744
745
746 void Builtins::Generate_CompileLazy(MacroAssembler* masm) { 711 void Builtins::Generate_CompileLazy(MacroAssembler* masm) {
747 CallRuntimePassFunction(masm, Runtime::kCompileLazy); 712 CallRuntimePassFunction(masm, Runtime::kCompileLazy);
748 GenerateTailCallToReturnedCode(masm); 713 GenerateTailCallToReturnedCode(masm);
749 } 714 }
750 715
751 716
752 717
753 static void CallCompileOptimized(MacroAssembler* masm, bool concurrent) { 718 static void CallCompileOptimized(MacroAssembler* masm, bool concurrent) {
754 FrameScope scope(masm, StackFrame::INTERNAL); 719 FrameScope scope(masm, StackFrame::INTERNAL);
755 // Push a copy of the function. 720 // Push a copy of the function.
(...skipping 898 matching lines...) Expand 10 before | Expand all | Expand 10 after
1654 // method. 1619 // method.
1655 __ bind(&non_constructor); 1620 __ bind(&non_constructor);
1656 { 1621 {
1657 FrameScope scope(masm, StackFrame::INTERNAL); 1622 FrameScope scope(masm, StackFrame::INTERNAL);
1658 __ Push(edi); 1623 __ Push(edi);
1659 __ CallRuntime(Runtime::kThrowCalledNonCallable, 1); 1624 __ CallRuntime(Runtime::kThrowCalledNonCallable, 1);
1660 } 1625 }
1661 } 1626 }
1662 1627
1663 1628
1629 // static
1630 void Builtins::Generate_PushArgsAndCall(MacroAssembler* masm) {
1631 // ----------- S t a t e -------------
1632 // -- eax : the number of arguments (not including the receiver)
1633 // -- ebx : the address of the first argument to be pushed. Subsequent
1634 // arguments should be consecutive above this, in the same order as
1635 // they are to be pushed onto the stack.
1636 // -- edi : the target to call (can be any Object).
1637
1638 // Pop return address to allow tail-call after pushing arguments.
1639 __ Pop(edx);
1640
1641 // Find the address of the last argument.
1642 __ mov(ecx, eax);
1643 __ add(ecx, Immediate(1)); // Add one for receiver.
1644 __ shl(ecx, kPointerSizeLog2);
1645 __ neg(ecx);
1646 __ add(ecx, ebx);
1647
1648 // Push the arguments.
1649 Label loop_header, loop_check;
1650 __ jmp(&loop_check);
1651 __ bind(&loop_header);
1652 __ Push(Operand(ebx, 0));
1653 __ sub(ebx, Immediate(kPointerSize));
1654 __ bind(&loop_check);
1655 __ cmp(ebx, ecx);
1656 __ j(greater, &loop_header, Label::kNear);
1657
1658 // Call the target.
1659 __ Push(edx); // Re-push return address.
1660 __ Jump(masm->isolate()->builtins()->Call(), RelocInfo::CODE_TARGET);
1661 }
1662
1663
1664 void Builtins::Generate_ArgumentsAdaptorTrampoline(MacroAssembler* masm) { 1664 void Builtins::Generate_ArgumentsAdaptorTrampoline(MacroAssembler* masm) {
1665 // ----------- S t a t e ------------- 1665 // ----------- S t a t e -------------
1666 // -- eax : actual number of arguments 1666 // -- eax : actual number of arguments
1667 // -- ebx : expected number of arguments 1667 // -- ebx : expected number of arguments
1668 // -- edi : function (passed through to callee) 1668 // -- edi : function (passed through to callee)
1669 // ----------------------------------- 1669 // -----------------------------------
1670 1670
1671 Label invoke, dont_adapt_arguments; 1671 Label invoke, dont_adapt_arguments;
1672 __ IncrementCounter(masm->isolate()->counters()->arguments_adaptors(), 1); 1672 __ IncrementCounter(masm->isolate()->counters()->arguments_adaptors(), 1);
1673 1673
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after
1842 1842
1843 __ bind(&ok); 1843 __ bind(&ok);
1844 __ ret(0); 1844 __ ret(0);
1845 } 1845 }
1846 1846
1847 #undef __ 1847 #undef __
1848 } // namespace internal 1848 } // namespace internal
1849 } // namespace v8 1849 } // namespace v8
1850 1850
1851 #endif // V8_TARGET_ARCH_IA32 1851 #endif // V8_TARGET_ARCH_IA32
OLDNEW
« no previous file with comments | « src/compiler/interpreter-assembler.cc ('k') | src/ia32/code-stubs-ia32.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698