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

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

Issue 1974293002: [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: 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 709 matching lines...) Expand 10 before | Expand all | Expand 10 after
720 // operations, instead of calling builtins directly. 720 // operations, instead of calling builtins directly.
721 Node* reg_index = __ BytecodeOperandReg(0); 721 Node* reg_index = __ BytecodeOperandReg(0);
722 Node* lhs = __ LoadRegister(reg_index); 722 Node* lhs = __ LoadRegister(reg_index);
723 Node* rhs = __ GetAccumulator(); 723 Node* rhs = __ GetAccumulator();
724 Node* context = __ GetContext(); 724 Node* context = __ GetContext();
725 Node* result = __ CallRuntime(function_id, context, lhs, rhs); 725 Node* result = __ CallRuntime(function_id, context, lhs, rhs);
726 __ SetAccumulator(result); 726 __ SetAccumulator(result);
727 __ Dispatch(); 727 __ Dispatch();
728 } 728 }
729 729
730 template <class Generator>
731 void Interpreter::DoBinaryOp(InterpreterAssembler* assembler) {
732 Node* reg_index = __ BytecodeOperandReg(0);
733 Node* lhs = __ LoadRegister(reg_index);
734 Node* rhs = __ GetAccumulator();
735 Node* context = __ GetContext();
736 Node* result = Generator::Generate(assembler, lhs, rhs, context);
737 __ SetAccumulator(result);
738 __ Dispatch();
739 }
730 740
731 // Add <src> 741 // Add <src>
732 // 742 //
733 // Add register <src> to accumulator. 743 // Add register <src> to accumulator.
734 void Interpreter::DoAdd(InterpreterAssembler* assembler) { 744 void Interpreter::DoAdd(InterpreterAssembler* assembler) {
735 DoBinaryOp(CodeFactory::Add(isolate_), assembler); 745 DoBinaryOp<AddStub>(assembler);
736 } 746 }
737 747
738 748
739 // Sub <src> 749 // Sub <src>
740 // 750 //
741 // Subtract register <src> from accumulator. 751 // Subtract register <src> from accumulator.
742 void Interpreter::DoSub(InterpreterAssembler* assembler) { 752 void Interpreter::DoSub(InterpreterAssembler* assembler) {
743 DoBinaryOp(CodeFactory::Subtract(isolate_), assembler); 753 DoBinaryOp<SubtractStub>(assembler);
744 } 754 }
745 755
746 756
747 // Mul <src> 757 // Mul <src>
748 // 758 //
749 // Multiply accumulator by register <src>. 759 // Multiply accumulator by register <src>.
750 void Interpreter::DoMul(InterpreterAssembler* assembler) { 760 void Interpreter::DoMul(InterpreterAssembler* assembler) {
751 DoBinaryOp(CodeFactory::Multiply(isolate_), assembler); 761 DoBinaryOp<MultiplyStub>(assembler);
752 } 762 }
753 763
754 764
755 // Div <src> 765 // Div <src>
756 // 766 //
757 // Divide register <src> by accumulator. 767 // Divide register <src> by accumulator.
758 void Interpreter::DoDiv(InterpreterAssembler* assembler) { 768 void Interpreter::DoDiv(InterpreterAssembler* assembler) {
759 DoBinaryOp(CodeFactory::Divide(isolate_), assembler); 769 DoBinaryOp<DivideStub>(assembler);
760 } 770 }
761 771
762 772
763 // Mod <src> 773 // Mod <src>
764 // 774 //
765 // Modulo register <src> by accumulator. 775 // Modulo register <src> by accumulator.
766 void Interpreter::DoMod(InterpreterAssembler* assembler) { 776 void Interpreter::DoMod(InterpreterAssembler* assembler) {
767 DoBinaryOp(CodeFactory::Modulus(isolate_), assembler); 777 DoBinaryOp<ModulusStub>(assembler);
768 } 778 }
769 779
770 780
771 // BitwiseOr <src> 781 // BitwiseOr <src>
772 // 782 //
773 // BitwiseOr register <src> to accumulator. 783 // BitwiseOr register <src> to accumulator.
774 void Interpreter::DoBitwiseOr(InterpreterAssembler* assembler) { 784 void Interpreter::DoBitwiseOr(InterpreterAssembler* assembler) {
775 DoBinaryOp(CodeFactory::BitwiseOr(isolate_), assembler); 785 DoBinaryOp<BitwiseOrStub>(assembler);
776 } 786 }
777 787
778 788
779 // BitwiseXor <src> 789 // BitwiseXor <src>
780 // 790 //
781 // BitwiseXor register <src> to accumulator. 791 // BitwiseXor register <src> to accumulator.
782 void Interpreter::DoBitwiseXor(InterpreterAssembler* assembler) { 792 void Interpreter::DoBitwiseXor(InterpreterAssembler* assembler) {
783 DoBinaryOp(CodeFactory::BitwiseXor(isolate_), assembler); 793 DoBinaryOp<BitwiseXorStub>(assembler);
784 } 794 }
785 795
786 796
787 // BitwiseAnd <src> 797 // BitwiseAnd <src>
788 // 798 //
789 // BitwiseAnd register <src> to accumulator. 799 // BitwiseAnd register <src> to accumulator.
790 void Interpreter::DoBitwiseAnd(InterpreterAssembler* assembler) { 800 void Interpreter::DoBitwiseAnd(InterpreterAssembler* assembler) {
791 DoBinaryOp(CodeFactory::BitwiseAnd(isolate_), assembler); 801 DoBinaryOp<BitwiseAndStub>(assembler);
792 } 802 }
793 803
794 804
795 // ShiftLeft <src> 805 // ShiftLeft <src>
796 // 806 //
797 // Left shifts register <src> by the count specified in the accumulator. 807 // Left shifts register <src> by the count specified in the accumulator.
798 // Register <src> is converted to an int32 and the accumulator to uint32 808 // Register <src> is converted to an int32 and the accumulator to uint32
799 // before the operation. 5 lsb bits from the accumulator are used as count 809 // before the operation. 5 lsb bits from the accumulator are used as count
800 // i.e. <src> << (accumulator & 0x1F). 810 // i.e. <src> << (accumulator & 0x1F).
801 void Interpreter::DoShiftLeft(InterpreterAssembler* assembler) { 811 void Interpreter::DoShiftLeft(InterpreterAssembler* assembler) {
802 DoBinaryOp(CodeFactory::ShiftLeft(isolate_), assembler); 812 DoBinaryOp<ShiftLeftStub>(assembler);
803 } 813 }
804 814
805 815
806 // ShiftRight <src> 816 // ShiftRight <src>
807 // 817 //
808 // Right shifts register <src> by the count specified in the accumulator. 818 // Right shifts register <src> by the count specified in the accumulator.
809 // Result is sign extended. Register <src> is converted to an int32 and the 819 // Result is sign extended. Register <src> is converted to an int32 and the
810 // accumulator to uint32 before the operation. 5 lsb bits from the accumulator 820 // accumulator to uint32 before the operation. 5 lsb bits from the accumulator
811 // are used as count i.e. <src> >> (accumulator & 0x1F). 821 // are used as count i.e. <src> >> (accumulator & 0x1F).
812 void Interpreter::DoShiftRight(InterpreterAssembler* assembler) { 822 void Interpreter::DoShiftRight(InterpreterAssembler* assembler) {
813 DoBinaryOp(CodeFactory::ShiftRight(isolate_), assembler); 823 DoBinaryOp<ShiftRightStub>(assembler);
814 } 824 }
815 825
816 826
817 // ShiftRightLogical <src> 827 // ShiftRightLogical <src>
818 // 828 //
819 // Right Shifts register <src> by the count specified in the accumulator. 829 // Right Shifts register <src> by the count specified in the accumulator.
820 // Result is zero-filled. The accumulator and register <src> are converted to 830 // Result is zero-filled. The accumulator and register <src> are converted to
821 // uint32 before the operation 5 lsb bits from the accumulator are used as 831 // uint32 before the operation 5 lsb bits from the accumulator are used as
822 // count i.e. <src> << (accumulator & 0x1F). 832 // count i.e. <src> << (accumulator & 0x1F).
823 void Interpreter::DoShiftRightLogical(InterpreterAssembler* assembler) { 833 void Interpreter::DoShiftRightLogical(InterpreterAssembler* assembler) {
824 DoBinaryOp(CodeFactory::ShiftRightLogical(isolate_), assembler); 834 DoBinaryOp<ShiftRightLogicalStub>(assembler);
825 } 835 }
826 836
827 void Interpreter::DoCountOp(Callable callable, 837 void Interpreter::DoCountOp(Callable callable,
828 InterpreterAssembler* assembler) { 838 InterpreterAssembler* assembler) {
829 Node* target = __ HeapConstant(callable.code()); 839 Node* target = __ HeapConstant(callable.code());
830 Node* value = __ GetAccumulator(); 840 Node* value = __ GetAccumulator();
831 Node* context = __ GetContext(); 841 Node* context = __ GetContext();
832 Node* result = __ CallStub(callable.descriptor(), target, context, value); 842 Node* result = __ CallStub(callable.descriptor(), target, context, value);
833 __ SetAccumulator(result); 843 __ SetAccumulator(result);
834 __ Dispatch(); 844 __ Dispatch();
(...skipping 992 matching lines...) Expand 10 before | Expand all | Expand 10 after
1827 __ StoreObjectField(generator, JSGeneratorObject::kContinuationOffset, 1837 __ StoreObjectField(generator, JSGeneratorObject::kContinuationOffset,
1828 __ SmiTag(new_state)); 1838 __ SmiTag(new_state));
1829 __ SetAccumulator(old_state); 1839 __ SetAccumulator(old_state);
1830 1840
1831 __ Dispatch(); 1841 __ Dispatch();
1832 } 1842 }
1833 1843
1834 } // namespace interpreter 1844 } // namespace interpreter
1835 } // namespace internal 1845 } // namespace internal
1836 } // namespace v8 1846 } // 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