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/test-utils.h" | 10 #include "test/unittests/test-utils.h" |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
69 Register r = Register::FromParameterIndex(i, parameter_count); | 69 Register r = Register::FromParameterIndex(i, parameter_count); |
70 uint32_t operand = r.ToOperand(); | 70 uint32_t operand = r.ToOperand(); |
71 uint8_t index = static_cast<uint8_t>(operand); | 71 uint8_t index = static_cast<uint8_t>(operand); |
72 CHECK_LT(index, operand_count.size()); | 72 CHECK_LT(index, operand_count.size()); |
73 operand_count[index] += 1; | 73 operand_count[index] += 1; |
74 CHECK_EQ(operand_count[index], 1); | 74 CHECK_EQ(operand_count[index], 1); |
75 } | 75 } |
76 } | 76 } |
77 | 77 |
78 TEST(OperandScaling, ScalableAndNonScalable) { | 78 TEST(OperandScaling, ScalableAndNonScalable) { |
79 for (OperandScale operand_scale = OperandScale::kSingle; | 79 const OperandScale kOperandScales[] = { |
80 operand_scale <= OperandScale::kMaxValid; | 80 #define VALUE(Name, _) OperandScale::k##Name, |
81 operand_scale = Bytecodes::NextOperandScale(operand_scale)) { | 81 OPERAND_SCALE_LIST(VALUE) |
| 82 #undef VALUE |
| 83 }; |
| 84 |
| 85 for (OperandScale operand_scale : kOperandScales) { |
82 int scale = static_cast<int>(operand_scale); | 86 int scale = static_cast<int>(operand_scale); |
83 CHECK_EQ(Bytecodes::Size(Bytecode::kCallRuntime, operand_scale), | 87 CHECK_EQ(Bytecodes::Size(Bytecode::kCallRuntime, operand_scale), |
84 1 + 2 + 2 * scale); | 88 1 + 2 + 2 * scale); |
85 CHECK_EQ(Bytecodes::Size(Bytecode::kCreateObjectLiteral, operand_scale), | 89 CHECK_EQ(Bytecodes::Size(Bytecode::kCreateObjectLiteral, operand_scale), |
86 1 + 2 * scale + 1); | 90 1 + 2 * scale + 1); |
87 CHECK_EQ(Bytecodes::Size(Bytecode::kTestIn, operand_scale), 1 + scale); | 91 CHECK_EQ(Bytecodes::Size(Bytecode::kTestIn, operand_scale), 1 + scale); |
88 } | 92 } |
89 } | 93 } |
90 | 94 |
91 TEST(Bytecodes, HasAnyRegisterOperands) { | 95 TEST(Bytecodes, HasAnyRegisterOperands) { |
(...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
297 } | 301 } |
298 | 302 |
299 TEST(Bytecodes, PrefixMappings) { | 303 TEST(Bytecodes, PrefixMappings) { |
300 Bytecode prefixes[] = {Bytecode::kWide, Bytecode::kExtraWide}; | 304 Bytecode prefixes[] = {Bytecode::kWide, Bytecode::kExtraWide}; |
301 TRACED_FOREACH(Bytecode, prefix, prefixes) { | 305 TRACED_FOREACH(Bytecode, prefix, prefixes) { |
302 CHECK_EQ(prefix, Bytecodes::OperandScaleToPrefixBytecode( | 306 CHECK_EQ(prefix, Bytecodes::OperandScaleToPrefixBytecode( |
303 Bytecodes::PrefixBytecodeToOperandScale(prefix))); | 307 Bytecodes::PrefixBytecodeToOperandScale(prefix))); |
304 } | 308 } |
305 } | 309 } |
306 | 310 |
307 TEST(OperandScale, PrefixesScale) { | 311 TEST(Bytecodes, OperandScales) { |
308 CHECK(Bytecodes::NextOperandScale(OperandScale::kSingle) == | 312 CHECK_EQ(Bytecodes::OperandSizesToScale(OperandSize::kByte), |
309 OperandScale::kDouble); | 313 OperandScale::kSingle); |
310 CHECK(Bytecodes::NextOperandScale(OperandScale::kDouble) == | 314 CHECK_EQ(Bytecodes::OperandSizesToScale(OperandSize::kShort), |
311 OperandScale::kQuadruple); | 315 OperandScale::kDouble); |
312 CHECK(Bytecodes::NextOperandScale(OperandScale::kQuadruple) == | 316 CHECK_EQ(Bytecodes::OperandSizesToScale(OperandSize::kQuad), |
313 OperandScale::kInvalid); | 317 OperandScale::kQuadruple); |
| 318 CHECK_EQ( |
| 319 Bytecodes::OperandSizesToScale(OperandSize::kShort, OperandSize::kShort, |
| 320 OperandSize::kShort, OperandSize::kShort), |
| 321 OperandScale::kDouble); |
| 322 CHECK_EQ( |
| 323 Bytecodes::OperandSizesToScale(OperandSize::kQuad, OperandSize::kShort, |
| 324 OperandSize::kShort, OperandSize::kShort), |
| 325 OperandScale::kQuadruple); |
| 326 CHECK_EQ( |
| 327 Bytecodes::OperandSizesToScale(OperandSize::kShort, OperandSize::kQuad, |
| 328 OperandSize::kShort, OperandSize::kShort), |
| 329 OperandScale::kQuadruple); |
| 330 CHECK_EQ( |
| 331 Bytecodes::OperandSizesToScale(OperandSize::kShort, OperandSize::kShort, |
| 332 OperandSize::kQuad, OperandSize::kShort), |
| 333 OperandScale::kQuadruple); |
| 334 CHECK_EQ( |
| 335 Bytecodes::OperandSizesToScale(OperandSize::kShort, OperandSize::kShort, |
| 336 OperandSize::kShort, OperandSize::kQuad), |
| 337 OperandScale::kQuadruple); |
| 338 } |
| 339 |
| 340 TEST(Bytecodes, SizesForSignedOperands) { |
| 341 CHECK(Bytecodes::SizeForSignedOperand(0) == OperandSize::kByte); |
| 342 CHECK(Bytecodes::SizeForSignedOperand(kMaxInt8) == OperandSize::kByte); |
| 343 CHECK(Bytecodes::SizeForSignedOperand(kMinInt8) == OperandSize::kByte); |
| 344 CHECK(Bytecodes::SizeForSignedOperand(kMaxInt8 + 1) == OperandSize::kShort); |
| 345 CHECK(Bytecodes::SizeForSignedOperand(kMinInt8 - 1) == OperandSize::kShort); |
| 346 CHECK(Bytecodes::SizeForSignedOperand(kMaxInt16) == OperandSize::kShort); |
| 347 CHECK(Bytecodes::SizeForSignedOperand(kMinInt16) == OperandSize::kShort); |
| 348 CHECK(Bytecodes::SizeForSignedOperand(kMaxInt16 + 1) == OperandSize::kQuad); |
| 349 CHECK(Bytecodes::SizeForSignedOperand(kMinInt16 - 1) == OperandSize::kQuad); |
| 350 CHECK(Bytecodes::SizeForSignedOperand(kMaxInt) == OperandSize::kQuad); |
| 351 CHECK(Bytecodes::SizeForSignedOperand(kMinInt) == OperandSize::kQuad); |
| 352 } |
| 353 |
| 354 TEST(Bytecodes, SizesForUnsignedOperands) { |
| 355 // int overloads |
| 356 CHECK(Bytecodes::SizeForUnsignedOperand(0) == OperandSize::kByte); |
| 357 CHECK(Bytecodes::SizeForUnsignedOperand(kMaxUInt8) == OperandSize::kByte); |
| 358 CHECK(Bytecodes::SizeForUnsignedOperand(kMaxUInt8 + 1) == |
| 359 OperandSize::kShort); |
| 360 CHECK(Bytecodes::SizeForUnsignedOperand(kMaxUInt16) == OperandSize::kShort); |
| 361 CHECK(Bytecodes::SizeForUnsignedOperand(kMaxUInt16 + 1) == |
| 362 OperandSize::kQuad); |
| 363 // size_t overloads |
| 364 CHECK(Bytecodes::SizeForUnsignedOperand(static_cast<size_t>(0)) == |
| 365 OperandSize::kByte); |
| 366 CHECK(Bytecodes::SizeForUnsignedOperand(static_cast<size_t>(kMaxUInt8)) == |
| 367 OperandSize::kByte); |
| 368 CHECK(Bytecodes::SizeForUnsignedOperand(static_cast<size_t>(kMaxUInt8 + 1)) == |
| 369 OperandSize::kShort); |
| 370 CHECK(Bytecodes::SizeForUnsignedOperand(static_cast<size_t>(kMaxUInt16)) == |
| 371 OperandSize::kShort); |
| 372 CHECK(Bytecodes::SizeForUnsignedOperand( |
| 373 static_cast<size_t>(kMaxUInt16 + 1)) == OperandSize::kQuad); |
| 374 CHECK(Bytecodes::SizeForUnsignedOperand(static_cast<size_t>(kMaxUInt32)) == |
| 375 OperandSize::kQuad); |
314 } | 376 } |
315 | 377 |
316 TEST(OperandScale, PrefixesRequired) { | 378 TEST(OperandScale, PrefixesRequired) { |
317 CHECK(!Bytecodes::OperandScaleRequiresPrefixBytecode(OperandScale::kSingle)); | 379 CHECK(!Bytecodes::OperandScaleRequiresPrefixBytecode(OperandScale::kSingle)); |
318 CHECK(Bytecodes::OperandScaleRequiresPrefixBytecode(OperandScale::kDouble)); | 380 CHECK(Bytecodes::OperandScaleRequiresPrefixBytecode(OperandScale::kDouble)); |
319 CHECK( | 381 CHECK( |
320 Bytecodes::OperandScaleRequiresPrefixBytecode(OperandScale::kQuadruple)); | 382 Bytecodes::OperandScaleRequiresPrefixBytecode(OperandScale::kQuadruple)); |
321 CHECK(Bytecodes::OperandScaleToPrefixBytecode(OperandScale::kDouble) == | 383 CHECK(Bytecodes::OperandScaleToPrefixBytecode(OperandScale::kDouble) == |
322 Bytecode::kWide); | 384 Bytecode::kWide); |
323 CHECK(Bytecodes::OperandScaleToPrefixBytecode(OperandScale::kQuadruple) == | 385 CHECK(Bytecodes::OperandScaleToPrefixBytecode(OperandScale::kQuadruple) == |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
355 names.insert(Bytecodes::AccumulatorUseToString(AccumulatorUse::kNone)); | 417 names.insert(Bytecodes::AccumulatorUseToString(AccumulatorUse::kNone)); |
356 names.insert(Bytecodes::AccumulatorUseToString(AccumulatorUse::kRead)); | 418 names.insert(Bytecodes::AccumulatorUseToString(AccumulatorUse::kRead)); |
357 names.insert(Bytecodes::AccumulatorUseToString(AccumulatorUse::kWrite)); | 419 names.insert(Bytecodes::AccumulatorUseToString(AccumulatorUse::kWrite)); |
358 names.insert(Bytecodes::AccumulatorUseToString(AccumulatorUse::kReadWrite)); | 420 names.insert(Bytecodes::AccumulatorUseToString(AccumulatorUse::kReadWrite)); |
359 CHECK_EQ(names.size(), 4); | 421 CHECK_EQ(names.size(), 4); |
360 } | 422 } |
361 | 423 |
362 } // namespace interpreter | 424 } // namespace interpreter |
363 } // namespace internal | 425 } // namespace internal |
364 } // namespace v8 | 426 } // namespace v8 |
OLD | NEW |