OLD | NEW |
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 namespace v8 { | 7 namespace v8 { |
8 namespace internal { | 8 namespace internal { |
9 namespace interpreter { | 9 namespace interpreter { |
10 | 10 |
(...skipping 963 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
974 | 974 |
975 | 975 |
976 BytecodeArrayBuilder& BytecodeArrayBuilder::Return() { | 976 BytecodeArrayBuilder& BytecodeArrayBuilder::Return() { |
977 Output(Bytecode::kReturn); | 977 Output(Bytecode::kReturn); |
978 exit_seen_in_block_ = true; | 978 exit_seen_in_block_ = true; |
979 return *this; | 979 return *this; |
980 } | 980 } |
981 | 981 |
982 | 982 |
983 BytecodeArrayBuilder& BytecodeArrayBuilder::ForInPrepare( | 983 BytecodeArrayBuilder& BytecodeArrayBuilder::ForInPrepare( |
984 Register cache_type, Register cache_array, Register cache_length) { | 984 Register cache_info_triple) { |
985 Output(Bytecode::kForInPrepare, cache_type.ToOperand(), | 985 Output(Bytecode::kForInPrepare, cache_info_triple.ToOperand()); |
986 cache_array.ToOperand(), cache_length.ToOperand()); | |
987 return *this; | 986 return *this; |
988 } | 987 } |
989 | 988 |
990 | 989 |
991 BytecodeArrayBuilder& BytecodeArrayBuilder::ForInDone(Register index, | 990 BytecodeArrayBuilder& BytecodeArrayBuilder::ForInDone(Register index, |
992 Register cache_length) { | 991 Register cache_length) { |
993 Output(Bytecode::kForInDone, index.ToOperand(), cache_length.ToOperand()); | 992 Output(Bytecode::kForInDone, index.ToOperand(), cache_length.ToOperand()); |
994 return *this; | 993 return *this; |
995 } | 994 } |
996 | 995 |
997 | 996 |
998 BytecodeArrayBuilder& BytecodeArrayBuilder::ForInNext(Register receiver, | 997 BytecodeArrayBuilder& BytecodeArrayBuilder::ForInNext( |
999 Register cache_type, | 998 Register receiver, Register index, Register cache_type_array_pair) { |
1000 Register cache_array, | 999 Output(Bytecode::kForInNext, receiver.ToOperand(), index.ToOperand(), |
1001 Register index) { | 1000 cache_type_array_pair.ToOperand()); |
1002 Output(Bytecode::kForInNext, receiver.ToOperand(), cache_type.ToOperand(), | |
1003 cache_array.ToOperand(), index.ToOperand()); | |
1004 return *this; | 1001 return *this; |
1005 } | 1002 } |
1006 | 1003 |
1007 | 1004 |
1008 BytecodeArrayBuilder& BytecodeArrayBuilder::ForInStep(Register index) { | 1005 BytecodeArrayBuilder& BytecodeArrayBuilder::ForInStep(Register index) { |
1009 Output(Bytecode::kForInStep, index.ToOperand()); | 1006 Output(Bytecode::kForInStep, index.ToOperand()); |
1010 return *this; | 1007 return *this; |
1011 } | 1008 } |
1012 | 1009 |
1013 | 1010 |
(...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1249 // Fall-through to kReg8 case. | 1246 // Fall-through to kReg8 case. |
1250 case OperandType::kReg8: | 1247 case OperandType::kReg8: |
1251 return RegisterIsValid( | 1248 return RegisterIsValid( |
1252 Register::FromOperand(static_cast<uint8_t>(operand_value))); | 1249 Register::FromOperand(static_cast<uint8_t>(operand_value))); |
1253 case OperandType::kRegPair8: { | 1250 case OperandType::kRegPair8: { |
1254 Register reg0 = | 1251 Register reg0 = |
1255 Register::FromOperand(static_cast<uint8_t>(operand_value)); | 1252 Register::FromOperand(static_cast<uint8_t>(operand_value)); |
1256 Register reg1 = Register(reg0.index() + 1); | 1253 Register reg1 = Register(reg0.index() + 1); |
1257 return RegisterIsValid(reg0) && RegisterIsValid(reg1); | 1254 return RegisterIsValid(reg0) && RegisterIsValid(reg1); |
1258 } | 1255 } |
| 1256 case OperandType::kRegTriple8: { |
| 1257 Register reg0 = |
| 1258 Register::FromOperand(static_cast<uint8_t>(operand_value)); |
| 1259 Register reg1 = Register(reg0.index() + 1); |
| 1260 Register reg2 = Register(reg0.index() + 2); |
| 1261 return RegisterIsValid(reg0) && RegisterIsValid(reg1) && |
| 1262 RegisterIsValid(reg2); |
| 1263 } |
1259 case OperandType::kReg16: | 1264 case OperandType::kReg16: |
1260 if (bytecode != Bytecode::kExchange && | 1265 if (bytecode != Bytecode::kExchange && |
1261 bytecode != Bytecode::kExchangeWide) { | 1266 bytecode != Bytecode::kExchangeWide) { |
1262 return false; | 1267 return false; |
1263 } | 1268 } |
1264 return RegisterIsValid( | 1269 return RegisterIsValid( |
1265 Register::FromWideOperand(static_cast<uint16_t>(operand_value))); | 1270 Register::FromWideOperand(static_cast<uint16_t>(operand_value))); |
1266 } | 1271 } |
1267 UNREACHABLE(); | 1272 UNREACHABLE(); |
1268 return false; | 1273 return false; |
(...skipping 330 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1599 | 1604 |
1600 | 1605 |
1601 // static | 1606 // static |
1602 bool BytecodeArrayBuilder::FitsInReg16Operand(Register value) { | 1607 bool BytecodeArrayBuilder::FitsInReg16Operand(Register value) { |
1603 return kMinInt16 <= value.index() && value.index() <= kMaxInt16; | 1608 return kMinInt16 <= value.index() && value.index() <= kMaxInt16; |
1604 } | 1609 } |
1605 | 1610 |
1606 } // namespace interpreter | 1611 } // namespace interpreter |
1607 } // namespace internal | 1612 } // namespace internal |
1608 } // namespace v8 | 1613 } // namespace v8 |
OLD | NEW |