| 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 <vector> | 5 #include <vector> |
| 6 | 6 |
| 7 #include "src/v8.h" | 7 #include "src/v8.h" |
| 8 | 8 |
| 9 #include "src/interpreter/bytecodes.h" | 9 #include "src/interpreter/bytecodes.h" |
| 10 #include "test/unittests/interpreter/bytecode-utils.h" | 10 #include "test/unittests/interpreter/bytecode-utils.h" |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 86 for (OperandScale operand_scale : kOperandScales) { | 86 for (OperandScale operand_scale : kOperandScales) { |
| 87 int scale = static_cast<int>(operand_scale); | 87 int scale = static_cast<int>(operand_scale); |
| 88 CHECK_EQ(Bytecodes::Size(Bytecode::kCallRuntime, operand_scale), | 88 CHECK_EQ(Bytecodes::Size(Bytecode::kCallRuntime, operand_scale), |
| 89 1 + 2 + 2 * scale); | 89 1 + 2 + 2 * scale); |
| 90 CHECK_EQ(Bytecodes::Size(Bytecode::kCreateObjectLiteral, operand_scale), | 90 CHECK_EQ(Bytecodes::Size(Bytecode::kCreateObjectLiteral, operand_scale), |
| 91 1 + 2 * scale + 1); | 91 1 + 2 * scale + 1); |
| 92 CHECK_EQ(Bytecodes::Size(Bytecode::kTestIn, operand_scale), 1 + scale); | 92 CHECK_EQ(Bytecodes::Size(Bytecode::kTestIn, operand_scale), 1 + scale); |
| 93 } | 93 } |
| 94 } | 94 } |
| 95 | 95 |
| 96 TEST(Bytecodes, HasAnyRegisterOperands) { | |
| 97 CHECK_EQ(Bytecodes::NumberOfRegisterOperands(Bytecode::kAdd), 1); | |
| 98 CHECK_EQ(Bytecodes::NumberOfRegisterOperands(Bytecode::kCall), 2); | |
| 99 CHECK_EQ(Bytecodes::NumberOfRegisterOperands(Bytecode::kCallRuntime), 1); | |
| 100 CHECK_EQ(Bytecodes::NumberOfRegisterOperands(Bytecode::kCallRuntimeForPair), | |
| 101 2); | |
| 102 CHECK_EQ(Bytecodes::NumberOfRegisterOperands(Bytecode::kDeletePropertyStrict), | |
| 103 1); | |
| 104 CHECK_EQ(Bytecodes::NumberOfRegisterOperands(Bytecode::kForInPrepare), 1); | |
| 105 CHECK_EQ(Bytecodes::NumberOfRegisterOperands(Bytecode::kInc), 0); | |
| 106 CHECK_EQ(Bytecodes::NumberOfRegisterOperands(Bytecode::kJumpIfTrue), 0); | |
| 107 CHECK_EQ(Bytecodes::NumberOfRegisterOperands(Bytecode::kNew), 2); | |
| 108 CHECK_EQ(Bytecodes::NumberOfRegisterOperands(Bytecode::kToName), 0); | |
| 109 } | |
| 110 | |
| 111 TEST(Bytecodes, RegisterOperandBitmaps) { | |
| 112 CHECK_EQ(Bytecodes::GetRegisterOperandBitmap(Bytecode::kAdd), 1); | |
| 113 CHECK_EQ(Bytecodes::GetRegisterOperandBitmap(Bytecode::kCallRuntimeForPair), | |
| 114 10); | |
| 115 CHECK_EQ(Bytecodes::GetRegisterOperandBitmap(Bytecode::kStar), 1); | |
| 116 CHECK_EQ(Bytecodes::GetRegisterOperandBitmap(Bytecode::kMov), 3); | |
| 117 CHECK_EQ(Bytecodes::GetRegisterOperandBitmap(Bytecode::kTestIn), 1); | |
| 118 CHECK_EQ(Bytecodes::GetRegisterOperandBitmap(Bytecode::kForInPrepare), 1); | |
| 119 CHECK_EQ(Bytecodes::GetRegisterOperandBitmap(Bytecode::kForInDone), 3); | |
| 120 CHECK_EQ(Bytecodes::GetRegisterOperandBitmap(Bytecode::kForInNext), 7); | |
| 121 } | |
| 122 | |
| 123 TEST(Bytecodes, RegisterOperands) { | 96 TEST(Bytecodes, RegisterOperands) { |
| 124 CHECK(Bytecodes::IsRegisterOperandType(OperandType::kReg)); | 97 CHECK(Bytecodes::IsRegisterOperandType(OperandType::kReg)); |
| 125 CHECK(Bytecodes::IsRegisterInputOperandType(OperandType::kReg)); | 98 CHECK(Bytecodes::IsRegisterInputOperandType(OperandType::kReg)); |
| 126 CHECK(!Bytecodes::IsRegisterOutputOperandType(OperandType::kReg)); | 99 CHECK(!Bytecodes::IsRegisterOutputOperandType(OperandType::kReg)); |
| 127 CHECK(!Bytecodes::IsRegisterInputOperandType(OperandType::kRegOut)); | 100 CHECK(!Bytecodes::IsRegisterInputOperandType(OperandType::kRegOut)); |
| 128 CHECK(Bytecodes::IsRegisterOutputOperandType(OperandType::kRegOut)); | 101 CHECK(Bytecodes::IsRegisterOutputOperandType(OperandType::kRegOut)); |
| 129 | 102 |
| 130 #define IS_REGISTER_OPERAND_TYPE(Name, _) \ | 103 #define IS_REGISTER_OPERAND_TYPE(Name, _) \ |
| 131 CHECK(Bytecodes::IsRegisterOperandType(OperandType::k##Name)); | 104 CHECK(Bytecodes::IsRegisterOperandType(OperandType::k##Name)); |
| 132 REGISTER_OPERAND_TYPE_LIST(IS_REGISTER_OPERAND_TYPE) | 105 REGISTER_OPERAND_TYPE_LIST(IS_REGISTER_OPERAND_TYPE) |
| (...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 333 std::set<std::string> names; | 306 std::set<std::string> names; |
| 334 names.insert(Bytecodes::AccumulatorUseToString(AccumulatorUse::kNone)); | 307 names.insert(Bytecodes::AccumulatorUseToString(AccumulatorUse::kNone)); |
| 335 names.insert(Bytecodes::AccumulatorUseToString(AccumulatorUse::kRead)); | 308 names.insert(Bytecodes::AccumulatorUseToString(AccumulatorUse::kRead)); |
| 336 names.insert(Bytecodes::AccumulatorUseToString(AccumulatorUse::kWrite)); | 309 names.insert(Bytecodes::AccumulatorUseToString(AccumulatorUse::kWrite)); |
| 337 names.insert(Bytecodes::AccumulatorUseToString(AccumulatorUse::kReadWrite)); | 310 names.insert(Bytecodes::AccumulatorUseToString(AccumulatorUse::kReadWrite)); |
| 338 CHECK_EQ(names.size(), 4); | 311 CHECK_EQ(names.size(), 4); |
| 339 } | 312 } |
| 340 } // namespace interpreter | 313 } // namespace interpreter |
| 341 } // namespace internal | 314 } // namespace internal |
| 342 } // namespace v8 | 315 } // namespace v8 |
| OLD | NEW |