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

Side by Side Diff: src/interpreter/interpreter.cc

Issue 1927873002: Revert of [ignition] Inline the binary op TurboFan code stubs in the bytecode handlers. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Merged. Created 4 years, 7 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/interpreter/interpreter.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 the V8 project authors. All rights reserved. 1 // Copyright 2015 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 #include "src/interpreter/interpreter.h" 5 #include "src/interpreter/interpreter.h"
6 6
7 #include <fstream> 7 #include <fstream>
8 8
9 #include "src/ast/prettyprinter.h" 9 #include "src/ast/prettyprinter.h"
10 #include "src/code-factory.h" 10 #include "src/code-factory.h"
(...skipping 701 matching lines...) Expand 10 before | Expand all | Expand 10 after
712 // operations, instead of calling builtins directly. 712 // operations, instead of calling builtins directly.
713 Node* reg_index = __ BytecodeOperandReg(0); 713 Node* reg_index = __ BytecodeOperandReg(0);
714 Node* lhs = __ LoadRegister(reg_index); 714 Node* lhs = __ LoadRegister(reg_index);
715 Node* rhs = __ GetAccumulator(); 715 Node* rhs = __ GetAccumulator();
716 Node* context = __ GetContext(); 716 Node* context = __ GetContext();
717 Node* result = __ CallRuntime(function_id, context, lhs, rhs); 717 Node* result = __ CallRuntime(function_id, context, lhs, rhs);
718 __ SetAccumulator(result); 718 __ SetAccumulator(result);
719 __ Dispatch(); 719 __ Dispatch();
720 } 720 }
721 721
722 template <class Generator>
723 void Interpreter::DoBinaryOp(InterpreterAssembler* assembler) {
724 Node* reg_index = __ BytecodeOperandReg(0);
725 Node* lhs = __ LoadRegister(reg_index);
726 Node* rhs = __ GetAccumulator();
727 Node* context = __ GetContext();
728 Node* result = Generator::Generate(assembler, lhs, rhs, context);
729 __ SetAccumulator(result);
730 __ Dispatch();
731 }
732 722
733 // Add <src> 723 // Add <src>
734 // 724 //
735 // Add register <src> to accumulator. 725 // Add register <src> to accumulator.
736 void Interpreter::DoAdd(InterpreterAssembler* assembler) { 726 void Interpreter::DoAdd(InterpreterAssembler* assembler) {
737 DoBinaryOp<AddStub>(assembler); 727 DoBinaryOp(CodeFactory::Add(isolate_), assembler);
738 } 728 }
739 729
740 730
741 // Sub <src> 731 // Sub <src>
742 // 732 //
743 // Subtract register <src> from accumulator. 733 // Subtract register <src> from accumulator.
744 void Interpreter::DoSub(InterpreterAssembler* assembler) { 734 void Interpreter::DoSub(InterpreterAssembler* assembler) {
745 DoBinaryOp<SubtractStub>(assembler); 735 DoBinaryOp(CodeFactory::Subtract(isolate_), assembler);
746 } 736 }
747 737
748 738
749 // Mul <src> 739 // Mul <src>
750 // 740 //
751 // Multiply accumulator by register <src>. 741 // Multiply accumulator by register <src>.
752 void Interpreter::DoMul(InterpreterAssembler* assembler) { 742 void Interpreter::DoMul(InterpreterAssembler* assembler) {
753 DoBinaryOp<MultiplyStub>(assembler); 743 DoBinaryOp(CodeFactory::Multiply(isolate_), assembler);
754 } 744 }
755 745
756 746
757 // Div <src> 747 // Div <src>
758 // 748 //
759 // Divide register <src> by accumulator. 749 // Divide register <src> by accumulator.
760 void Interpreter::DoDiv(InterpreterAssembler* assembler) { 750 void Interpreter::DoDiv(InterpreterAssembler* assembler) {
761 DoBinaryOp<DivideStub>(assembler); 751 DoBinaryOp(CodeFactory::Divide(isolate_), assembler);
762 } 752 }
763 753
764 754
765 // Mod <src> 755 // Mod <src>
766 // 756 //
767 // Modulo register <src> by accumulator. 757 // Modulo register <src> by accumulator.
768 void Interpreter::DoMod(InterpreterAssembler* assembler) { 758 void Interpreter::DoMod(InterpreterAssembler* assembler) {
769 DoBinaryOp<ModulusStub>(assembler); 759 DoBinaryOp(CodeFactory::Modulus(isolate_), assembler);
770 } 760 }
771 761
772 762
773 // BitwiseOr <src> 763 // BitwiseOr <src>
774 // 764 //
775 // BitwiseOr register <src> to accumulator. 765 // BitwiseOr register <src> to accumulator.
776 void Interpreter::DoBitwiseOr(InterpreterAssembler* assembler) { 766 void Interpreter::DoBitwiseOr(InterpreterAssembler* assembler) {
777 DoBinaryOp<BitwiseOrStub>(assembler); 767 DoBinaryOp(CodeFactory::BitwiseOr(isolate_), assembler);
778 } 768 }
779 769
780 770
781 // BitwiseXor <src> 771 // BitwiseXor <src>
782 // 772 //
783 // BitwiseXor register <src> to accumulator. 773 // BitwiseXor register <src> to accumulator.
784 void Interpreter::DoBitwiseXor(InterpreterAssembler* assembler) { 774 void Interpreter::DoBitwiseXor(InterpreterAssembler* assembler) {
785 DoBinaryOp<BitwiseXorStub>(assembler); 775 DoBinaryOp(CodeFactory::BitwiseXor(isolate_), assembler);
786 } 776 }
787 777
788 778
789 // BitwiseAnd <src> 779 // BitwiseAnd <src>
790 // 780 //
791 // BitwiseAnd register <src> to accumulator. 781 // BitwiseAnd register <src> to accumulator.
792 void Interpreter::DoBitwiseAnd(InterpreterAssembler* assembler) { 782 void Interpreter::DoBitwiseAnd(InterpreterAssembler* assembler) {
793 DoBinaryOp<BitwiseAndStub>(assembler); 783 DoBinaryOp(CodeFactory::BitwiseAnd(isolate_), assembler);
794 } 784 }
795 785
796 786
797 // ShiftLeft <src> 787 // ShiftLeft <src>
798 // 788 //
799 // Left shifts register <src> by the count specified in the accumulator. 789 // Left shifts register <src> by the count specified in the accumulator.
800 // Register <src> is converted to an int32 and the accumulator to uint32 790 // Register <src> is converted to an int32 and the accumulator to uint32
801 // before the operation. 5 lsb bits from the accumulator are used as count 791 // before the operation. 5 lsb bits from the accumulator are used as count
802 // i.e. <src> << (accumulator & 0x1F). 792 // i.e. <src> << (accumulator & 0x1F).
803 void Interpreter::DoShiftLeft(InterpreterAssembler* assembler) { 793 void Interpreter::DoShiftLeft(InterpreterAssembler* assembler) {
804 DoBinaryOp<ShiftLeftStub>(assembler); 794 DoBinaryOp(CodeFactory::ShiftLeft(isolate_), assembler);
805 } 795 }
806 796
807 797
808 // ShiftRight <src> 798 // ShiftRight <src>
809 // 799 //
810 // Right shifts register <src> by the count specified in the accumulator. 800 // Right shifts register <src> by the count specified in the accumulator.
811 // Result is sign extended. Register <src> is converted to an int32 and the 801 // Result is sign extended. Register <src> is converted to an int32 and the
812 // accumulator to uint32 before the operation. 5 lsb bits from the accumulator 802 // accumulator to uint32 before the operation. 5 lsb bits from the accumulator
813 // are used as count i.e. <src> >> (accumulator & 0x1F). 803 // are used as count i.e. <src> >> (accumulator & 0x1F).
814 void Interpreter::DoShiftRight(InterpreterAssembler* assembler) { 804 void Interpreter::DoShiftRight(InterpreterAssembler* assembler) {
815 DoBinaryOp<ShiftRightStub>(assembler); 805 DoBinaryOp(CodeFactory::ShiftRight(isolate_), assembler);
816 } 806 }
817 807
818 808
819 // ShiftRightLogical <src> 809 // ShiftRightLogical <src>
820 // 810 //
821 // Right Shifts register <src> by the count specified in the accumulator. 811 // Right Shifts register <src> by the count specified in the accumulator.
822 // Result is zero-filled. The accumulator and register <src> are converted to 812 // Result is zero-filled. The accumulator and register <src> are converted to
823 // uint32 before the operation 5 lsb bits from the accumulator are used as 813 // uint32 before the operation 5 lsb bits from the accumulator are used as
824 // count i.e. <src> << (accumulator & 0x1F). 814 // count i.e. <src> << (accumulator & 0x1F).
825 void Interpreter::DoShiftRightLogical(InterpreterAssembler* assembler) { 815 void Interpreter::DoShiftRightLogical(InterpreterAssembler* assembler) {
826 DoBinaryOp<ShiftRightLogicalStub>(assembler); 816 DoBinaryOp(CodeFactory::ShiftRightLogical(isolate_), assembler);
827 } 817 }
828 818
829 void Interpreter::DoCountOp(Callable callable, 819 void Interpreter::DoCountOp(Callable callable,
830 InterpreterAssembler* assembler) { 820 InterpreterAssembler* assembler) {
831 Node* target = __ HeapConstant(callable.code()); 821 Node* target = __ HeapConstant(callable.code());
832 Node* value = __ GetAccumulator(); 822 Node* value = __ GetAccumulator();
833 Node* context = __ GetContext(); 823 Node* context = __ GetContext();
834 Node* result = __ CallStub(callable.descriptor(), target, context, value); 824 Node* result = __ CallStub(callable.descriptor(), target, context, value);
835 __ SetAccumulator(result); 825 __ SetAccumulator(result);
836 __ Dispatch(); 826 __ Dispatch();
(...skipping 940 matching lines...) Expand 10 before | Expand all | Expand 10 after
1777 __ StoreObjectField(generator, JSGeneratorObject::kContinuationOffset, 1767 __ StoreObjectField(generator, JSGeneratorObject::kContinuationOffset,
1778 __ SmiTag(new_state)); 1768 __ SmiTag(new_state));
1779 __ SetAccumulator(old_state); 1769 __ SetAccumulator(old_state);
1780 1770
1781 __ Dispatch(); 1771 __ Dispatch();
1782 } 1772 }
1783 1773
1784 } // namespace interpreter 1774 } // namespace interpreter
1785 } // namespace internal 1775 } // namespace internal
1786 } // namespace v8 1776 } // namespace v8
OLDNEW
« no previous file with comments | « src/interpreter/interpreter.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698