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

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

Issue 1418213002: X87: [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 | « no previous file | src/x87/code-stubs-x87.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_X87 5 #if V8_TARGET_ARCH_X87
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 680 matching lines...) Expand 10 before | Expand all | Expand 10 after
691 // Drop receiver + arguments and return. 691 // Drop receiver + arguments and return.
692 __ mov(ebx, FieldOperand(kInterpreterBytecodeArrayRegister, 692 __ mov(ebx, FieldOperand(kInterpreterBytecodeArrayRegister,
693 BytecodeArray::kParameterSizeOffset)); 693 BytecodeArray::kParameterSizeOffset));
694 __ pop(ecx); 694 __ pop(ecx);
695 __ add(esp, ebx); 695 __ add(esp, ebx);
696 __ push(ecx); 696 __ push(ecx);
697 __ ret(0); 697 __ ret(0);
698 } 698 }
699 699
700 700
701 // static
702 void Builtins::Generate_InterpreterPushArgsAndCall(MacroAssembler* masm) {
703 // ----------- S t a t e -------------
704 // -- eax : the number of arguments (not including the receiver)
705 // -- ebx : the address of the first argument to be pushed. Subsequent
706 // arguments should be consecutive above this, in the same order as
707 // they are to be pushed onto the stack.
708 // -- edi : the target to call (can be any Object).
709
710 // Pop return address to allow tail-call after pushing arguments.
711 __ Pop(edx);
712
713 // Find the address of the last argument.
714 __ mov(ecx, eax);
715 __ add(ecx, Immediate(1)); // Add one for receiver.
716 __ shl(ecx, kPointerSizeLog2);
717 __ neg(ecx);
718 __ add(ecx, ebx);
719
720 // Push the arguments.
721 Label loop_header, loop_check;
722 __ jmp(&loop_check);
723 __ bind(&loop_header);
724 __ Push(Operand(ebx, 0));
725 __ sub(ebx, Immediate(kPointerSize));
726 __ bind(&loop_check);
727 __ cmp(ebx, ecx);
728 __ j(greater, &loop_header, Label::kNear);
729
730 // Call the target.
731 __ Push(edx); // Re-push return address.
732 __ Jump(masm->isolate()->builtins()->Call(), RelocInfo::CODE_TARGET);
733 }
734
735
701 void Builtins::Generate_CompileLazy(MacroAssembler* masm) { 736 void Builtins::Generate_CompileLazy(MacroAssembler* masm) {
702 CallRuntimePassFunction(masm, Runtime::kCompileLazy); 737 CallRuntimePassFunction(masm, Runtime::kCompileLazy);
703 GenerateTailCallToReturnedCode(masm); 738 GenerateTailCallToReturnedCode(masm);
704 } 739 }
705 740
706 741
707 742
708 static void CallCompileOptimized(MacroAssembler* masm, bool concurrent) { 743 static void CallCompileOptimized(MacroAssembler* masm, bool concurrent) {
709 FrameScope scope(masm, StackFrame::INTERNAL); 744 FrameScope scope(masm, StackFrame::INTERNAL);
710 // Push a copy of the function. 745 // Push a copy of the function.
(...skipping 898 matching lines...) Expand 10 before | Expand all | Expand 10 after
1609 // method. 1644 // method.
1610 __ bind(&non_constructor); 1645 __ bind(&non_constructor);
1611 { 1646 {
1612 FrameScope scope(masm, StackFrame::INTERNAL); 1647 FrameScope scope(masm, StackFrame::INTERNAL);
1613 __ Push(edi); 1648 __ Push(edi);
1614 __ CallRuntime(Runtime::kThrowCalledNonCallable, 1); 1649 __ CallRuntime(Runtime::kThrowCalledNonCallable, 1);
1615 } 1650 }
1616 } 1651 }
1617 1652
1618 1653
1619 // static
1620 void Builtins::Generate_PushArgsAndCall(MacroAssembler* masm) {
1621 // ----------- S t a t e -------------
1622 // -- eax : the number of arguments (not including the receiver)
1623 // -- ebx : the address of the first argument to be pushed. Subsequent
1624 // arguments should be consecutive above this, in the same order as
1625 // they are to be pushed onto the stack.
1626 // -- edi : the target to call (can be any Object).
1627
1628 // Pop return address to allow tail-call after pushing arguments.
1629 __ Pop(edx);
1630
1631 // Find the address of the last argument.
1632 __ mov(ecx, eax);
1633 __ add(ecx, Immediate(1)); // Add one for receiver.
1634 __ shl(ecx, kPointerSizeLog2);
1635 __ neg(ecx);
1636 __ add(ecx, ebx);
1637
1638 // Push the arguments.
1639 Label loop_header, loop_check;
1640 __ jmp(&loop_check);
1641 __ bind(&loop_header);
1642 __ Push(Operand(ebx, 0));
1643 __ sub(ebx, Immediate(kPointerSize));
1644 __ bind(&loop_check);
1645 __ cmp(ebx, ecx);
1646 __ j(greater, &loop_header, Label::kNear);
1647
1648 // Call the target.
1649 __ Push(edx); // Re-push return address.
1650 __ Jump(masm->isolate()->builtins()->Call(), RelocInfo::CODE_TARGET);
1651 }
1652
1653
1654 void Builtins::Generate_ArgumentsAdaptorTrampoline(MacroAssembler* masm) { 1654 void Builtins::Generate_ArgumentsAdaptorTrampoline(MacroAssembler* masm) {
1655 // ----------- S t a t e ------------- 1655 // ----------- S t a t e -------------
1656 // -- eax : actual number of arguments 1656 // -- eax : actual number of arguments
1657 // -- ebx : expected number of arguments 1657 // -- ebx : expected number of arguments
1658 // -- edi : function (passed through to callee) 1658 // -- edi : function (passed through to callee)
1659 // ----------------------------------- 1659 // -----------------------------------
1660 1660
1661 Label invoke, dont_adapt_arguments; 1661 Label invoke, dont_adapt_arguments;
1662 __ IncrementCounter(masm->isolate()->counters()->arguments_adaptors(), 1); 1662 __ IncrementCounter(masm->isolate()->counters()->arguments_adaptors(), 1);
1663 1663
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after
1832 1832
1833 __ bind(&ok); 1833 __ bind(&ok);
1834 __ ret(0); 1834 __ ret(0);
1835 } 1835 }
1836 1836
1837 #undef __ 1837 #undef __
1838 } // namespace internal 1838 } // namespace internal
1839 } // namespace v8 1839 } // namespace v8
1840 1840
1841 #endif // V8_TARGET_ARCH_X87 1841 #endif // V8_TARGET_ARCH_X87
OLDNEW
« no previous file with comments | « no previous file | src/x87/code-stubs-x87.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698