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

Side by Side Diff: src/interpreter/bytecode-array-builder.cc

Issue 2263253002: [interpreter] Make the binary op with Smi bytecode handlers collect type feedback. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Added tests. Created 4 years, 4 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
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/bytecode-array-builder.h" 5 #include "src/interpreter/bytecode-array-builder.h"
6 6
7 #include "src/compiler.h" 7 #include "src/compiler.h"
8 #include "src/globals.h" 8 #include "src/globals.h"
9 #include "src/interpreter/bytecode-array-writer.h" 9 #include "src/interpreter/bytecode-array-writer.h"
10 #include "src/interpreter/bytecode-dead-code-optimizer.h" 10 #include "src/interpreter/bytecode-dead-code-optimizer.h"
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
151 } 151 }
152 152
153 BytecodeArrayBuilder& BytecodeArrayBuilder::BinaryOperation(Token::Value op, 153 BytecodeArrayBuilder& BytecodeArrayBuilder::BinaryOperation(Token::Value op,
154 Register reg, 154 Register reg,
155 int feedback_slot) { 155 int feedback_slot) {
156 Output(BytecodeForBinaryOperation(op), RegisterOperand(reg), 156 Output(BytecodeForBinaryOperation(op), RegisterOperand(reg),
157 UnsignedOperand(feedback_slot)); 157 UnsignedOperand(feedback_slot));
158 return *this; 158 return *this;
159 } 159 }
160 160
161 BytecodeArrayBuilder& BytecodeArrayBuilder::BinaryOperationSmi(
162 Token::Value op, int32_t smi_value, Register reg, int feedback_slot) {
163 DCHECK(Smi::IsValid(smi_value));
164 Output(BytecodeForBinaryOperationSmi(op), SignedOperand(smi_value),
165 RegisterOperand(reg), UnsignedOperand(feedback_slot));
166 return *this;
167 }
168
161 BytecodeArrayBuilder& BytecodeArrayBuilder::CountOperation(Token::Value op, 169 BytecodeArrayBuilder& BytecodeArrayBuilder::CountOperation(Token::Value op,
162 int feedback_slot) { 170 int feedback_slot) {
163 Output(BytecodeForCountOperation(op), UnsignedOperand(feedback_slot)); 171 Output(BytecodeForCountOperation(op), UnsignedOperand(feedback_slot));
164 return *this; 172 return *this;
165 } 173 }
166 174
167 BytecodeArrayBuilder& BytecodeArrayBuilder::LogicalNot() { 175 BytecodeArrayBuilder& BytecodeArrayBuilder::LogicalNot() {
168 Output(Bytecode::kToBooleanLogicalNot); 176 Output(Bytecode::kToBooleanLogicalNot);
169 return *this; 177 return *this;
170 } 178 }
(...skipping 668 matching lines...) Expand 10 before | Expand all | Expand 10 after
839 return Bytecode::kShiftRight; 847 return Bytecode::kShiftRight;
840 case Token::Value::SHR: 848 case Token::Value::SHR:
841 return Bytecode::kShiftRightLogical; 849 return Bytecode::kShiftRightLogical;
842 default: 850 default:
843 UNREACHABLE(); 851 UNREACHABLE();
844 return Bytecode::kIllegal; 852 return Bytecode::kIllegal;
845 } 853 }
846 } 854 }
847 855
848 // static 856 // static
857 Bytecode BytecodeArrayBuilder::BytecodeForBinaryOperationSmi(Token::Value op) {
858 switch (op) {
859 case Token::Value::ADD:
860 return Bytecode::kAddSmi;
861 case Token::Value::SUB:
862 return Bytecode::kSubSmi;
863 case Token::Value::BIT_OR:
864 return Bytecode::kBitwiseOrSmi;
865 case Token::Value::BIT_AND:
866 return Bytecode::kBitwiseAndSmi;
867 case Token::Value::SHL:
868 return Bytecode::kShiftLeftSmi;
869 case Token::Value::SAR:
870 return Bytecode::kShiftRightSmi;
871 default:
872 UNREACHABLE();
873 return Bytecode::kIllegal;
874 }
875 }
876
877 // static
849 Bytecode BytecodeArrayBuilder::BytecodeForCountOperation(Token::Value op) { 878 Bytecode BytecodeArrayBuilder::BytecodeForCountOperation(Token::Value op) {
850 switch (op) { 879 switch (op) {
851 case Token::Value::ADD: 880 case Token::Value::ADD:
852 return Bytecode::kInc; 881 return Bytecode::kInc;
853 case Token::Value::SUB: 882 case Token::Value::SUB:
854 return Bytecode::kDec; 883 return Bytecode::kDec;
855 default: 884 default:
856 UNREACHABLE(); 885 UNREACHABLE();
857 return Bytecode::kIllegal; 886 return Bytecode::kIllegal;
858 } 887 }
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
984 return Bytecode::kTailCall; 1013 return Bytecode::kTailCall;
985 default: 1014 default:
986 UNREACHABLE(); 1015 UNREACHABLE();
987 } 1016 }
988 return Bytecode::kIllegal; 1017 return Bytecode::kIllegal;
989 } 1018 }
990 1019
991 } // namespace interpreter 1020 } // namespace interpreter
992 } // namespace internal 1021 } // namespace internal
993 } // namespace v8 1022 } // namespace v8
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698