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

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

Issue 1902823002: [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, 8 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 689 matching lines...) Expand 10 before | Expand all | Expand 10 after
700 // operations, instead of calling builtins directly. 700 // operations, instead of calling builtins directly.
701 Node* reg_index = __ BytecodeOperandReg(0); 701 Node* reg_index = __ BytecodeOperandReg(0);
702 Node* lhs = __ LoadRegister(reg_index); 702 Node* lhs = __ LoadRegister(reg_index);
703 Node* rhs = __ GetAccumulator(); 703 Node* rhs = __ GetAccumulator();
704 Node* context = __ GetContext(); 704 Node* context = __ GetContext();
705 Node* result = __ CallRuntime(function_id, context, lhs, rhs); 705 Node* result = __ CallRuntime(function_id, context, lhs, rhs);
706 __ SetAccumulator(result); 706 __ SetAccumulator(result);
707 __ Dispatch(); 707 __ Dispatch();
708 } 708 }
709 709
710 void Interpreter::DoBinaryOp(Node* (*generator)(CodeStubAssembler*, Node*,
Benedikt Meurer 2016/04/20 08:42:33 Please no naked function pointers here, as discuss
epertoso 2016/04/20 08:59:49 Done.
711 Node*, Node*),
712 InterpreterAssembler* assembler) {
713 Node* reg_index = __ BytecodeOperandReg(0);
714 Node* lhs = __ LoadRegister(reg_index);
715 Node* rhs = __ GetAccumulator();
716 Node* context = __ GetContext();
717 Node* result = generator(assembler, lhs, rhs, context);
718 __ SetAccumulator(result);
719 __ Dispatch();
720 }
710 721
711 // Add <src> 722 // Add <src>
712 // 723 //
713 // Add register <src> to accumulator. 724 // Add register <src> to accumulator.
714 void Interpreter::DoAdd(InterpreterAssembler* assembler) { 725 void Interpreter::DoAdd(InterpreterAssembler* assembler) {
715 DoBinaryOp(CodeFactory::Add(isolate_), assembler); 726 DoBinaryOp(AddStub::Generate, assembler);
716 } 727 }
717 728
718 729
719 // Sub <src> 730 // Sub <src>
720 // 731 //
721 // Subtract register <src> from accumulator. 732 // Subtract register <src> from accumulator.
722 void Interpreter::DoSub(InterpreterAssembler* assembler) { 733 void Interpreter::DoSub(InterpreterAssembler* assembler) {
723 DoBinaryOp(CodeFactory::Subtract(isolate_), assembler); 734 DoBinaryOp(SubtractStub::Generate, assembler);
724 } 735 }
725 736
726 737
727 // Mul <src> 738 // Mul <src>
728 // 739 //
729 // Multiply accumulator by register <src>. 740 // Multiply accumulator by register <src>.
730 void Interpreter::DoMul(InterpreterAssembler* assembler) { 741 void Interpreter::DoMul(InterpreterAssembler* assembler) {
731 DoBinaryOp(CodeFactory::Multiply(isolate_), assembler); 742 DoBinaryOp(MultiplyStub::Generate, assembler);
732 } 743 }
733 744
734 745
735 // Div <src> 746 // Div <src>
736 // 747 //
737 // Divide register <src> by accumulator. 748 // Divide register <src> by accumulator.
738 void Interpreter::DoDiv(InterpreterAssembler* assembler) { 749 void Interpreter::DoDiv(InterpreterAssembler* assembler) {
739 DoBinaryOp(CodeFactory::Divide(isolate_), assembler); 750 DoBinaryOp(DivideStub::Generate, assembler);
740 } 751 }
741 752
742 753
743 // Mod <src> 754 // Mod <src>
744 // 755 //
745 // Modulo register <src> by accumulator. 756 // Modulo register <src> by accumulator.
746 void Interpreter::DoMod(InterpreterAssembler* assembler) { 757 void Interpreter::DoMod(InterpreterAssembler* assembler) {
747 DoBinaryOp(CodeFactory::Modulus(isolate_), assembler); 758 DoBinaryOp(ModulusStub::Generate, assembler);
748 } 759 }
749 760
750 761
751 // BitwiseOr <src> 762 // BitwiseOr <src>
752 // 763 //
753 // BitwiseOr register <src> to accumulator. 764 // BitwiseOr register <src> to accumulator.
754 void Interpreter::DoBitwiseOr(InterpreterAssembler* assembler) { 765 void Interpreter::DoBitwiseOr(InterpreterAssembler* assembler) {
755 DoBinaryOp(CodeFactory::BitwiseOr(isolate_), assembler); 766 DoBinaryOp(BitwiseOrStub::Generate, assembler);
756 } 767 }
757 768
758 769
759 // BitwiseXor <src> 770 // BitwiseXor <src>
760 // 771 //
761 // BitwiseXor register <src> to accumulator. 772 // BitwiseXor register <src> to accumulator.
762 void Interpreter::DoBitwiseXor(InterpreterAssembler* assembler) { 773 void Interpreter::DoBitwiseXor(InterpreterAssembler* assembler) {
763 DoBinaryOp(CodeFactory::BitwiseXor(isolate_), assembler); 774 DoBinaryOp(BitwiseXorStub::Generate, assembler);
764 } 775 }
765 776
766 777
767 // BitwiseAnd <src> 778 // BitwiseAnd <src>
768 // 779 //
769 // BitwiseAnd register <src> to accumulator. 780 // BitwiseAnd register <src> to accumulator.
770 void Interpreter::DoBitwiseAnd(InterpreterAssembler* assembler) { 781 void Interpreter::DoBitwiseAnd(InterpreterAssembler* assembler) {
771 DoBinaryOp(CodeFactory::BitwiseAnd(isolate_), assembler); 782 DoBinaryOp(BitwiseAndStub::Generate, assembler);
772 } 783 }
773 784
774 785
775 // ShiftLeft <src> 786 // ShiftLeft <src>
776 // 787 //
777 // Left shifts register <src> by the count specified in the accumulator. 788 // Left shifts register <src> by the count specified in the accumulator.
778 // Register <src> is converted to an int32 and the accumulator to uint32 789 // Register <src> is converted to an int32 and the accumulator to uint32
779 // before the operation. 5 lsb bits from the accumulator are used as count 790 // before the operation. 5 lsb bits from the accumulator are used as count
780 // i.e. <src> << (accumulator & 0x1F). 791 // i.e. <src> << (accumulator & 0x1F).
781 void Interpreter::DoShiftLeft(InterpreterAssembler* assembler) { 792 void Interpreter::DoShiftLeft(InterpreterAssembler* assembler) {
782 DoBinaryOp(CodeFactory::ShiftLeft(isolate_), assembler); 793 DoBinaryOp(ShiftLeftStub::Generate, assembler);
783 } 794 }
784 795
785 796
786 // ShiftRight <src> 797 // ShiftRight <src>
787 // 798 //
788 // Right shifts register <src> by the count specified in the accumulator. 799 // Right shifts register <src> by the count specified in the accumulator.
789 // Result is sign extended. Register <src> is converted to an int32 and the 800 // Result is sign extended. Register <src> is converted to an int32 and the
790 // accumulator to uint32 before the operation. 5 lsb bits from the accumulator 801 // accumulator to uint32 before the operation. 5 lsb bits from the accumulator
791 // are used as count i.e. <src> >> (accumulator & 0x1F). 802 // are used as count i.e. <src> >> (accumulator & 0x1F).
792 void Interpreter::DoShiftRight(InterpreterAssembler* assembler) { 803 void Interpreter::DoShiftRight(InterpreterAssembler* assembler) {
793 DoBinaryOp(CodeFactory::ShiftRight(isolate_), assembler); 804 DoBinaryOp(ShiftRightStub::Generate, assembler);
794 } 805 }
795 806
796 807
797 // ShiftRightLogical <src> 808 // ShiftRightLogical <src>
798 // 809 //
799 // Right Shifts register <src> by the count specified in the accumulator. 810 // Right Shifts register <src> by the count specified in the accumulator.
800 // Result is zero-filled. The accumulator and register <src> are converted to 811 // Result is zero-filled. The accumulator and register <src> are converted to
801 // uint32 before the operation 5 lsb bits from the accumulator are used as 812 // uint32 before the operation 5 lsb bits from the accumulator are used as
802 // count i.e. <src> << (accumulator & 0x1F). 813 // count i.e. <src> << (accumulator & 0x1F).
803 void Interpreter::DoShiftRightLogical(InterpreterAssembler* assembler) { 814 void Interpreter::DoShiftRightLogical(InterpreterAssembler* assembler) {
804 DoBinaryOp(CodeFactory::ShiftRightLogical(isolate_), assembler); 815 DoBinaryOp(ShiftRightLogicalStub::Generate, assembler);
805 } 816 }
806 817
807 void Interpreter::DoCountOp(Runtime::FunctionId function_id, 818 void Interpreter::DoCountOp(Runtime::FunctionId function_id,
808 InterpreterAssembler* assembler) { 819 InterpreterAssembler* assembler) {
809 Node* value = __ GetAccumulator(); 820 Node* value = __ GetAccumulator();
810 Node* one = __ NumberConstant(1); 821 Node* one = __ NumberConstant(1);
811 Node* context = __ GetContext(); 822 Node* context = __ GetContext();
812 Node* result = __ CallRuntime(function_id, context, value, one); 823 Node* result = __ CallRuntime(function_id, context, value, one);
813 __ SetAccumulator(result); 824 __ SetAccumulator(result);
814 __ Dispatch(); 825 __ Dispatch();
(...skipping 866 matching lines...) Expand 10 before | Expand all | Expand 10 after
1681 // Illegal 1692 // Illegal
1682 // 1693 //
1683 // An invalid bytecode aborting execution if dispatched. 1694 // An invalid bytecode aborting execution if dispatched.
1684 void Interpreter::DoIllegal(InterpreterAssembler* assembler) { 1695 void Interpreter::DoIllegal(InterpreterAssembler* assembler) {
1685 __ Abort(kInvalidBytecode); 1696 __ Abort(kInvalidBytecode);
1686 } 1697 }
1687 1698
1688 } // namespace interpreter 1699 } // namespace interpreter
1689 } // namespace internal 1700 } // namespace internal
1690 } // namespace v8 1701 } // 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