Index: test/unittests/interpreter/bytecodes-unittest.cc |
diff --git a/test/unittests/interpreter/bytecodes-unittest.cc b/test/unittests/interpreter/bytecodes-unittest.cc |
index 3e425a1df48f968acd366bf287519d0cdcf5c231..1cf12a05c5a92493cd3e4c7d7788dffe4fc8f30b 100644 |
--- a/test/unittests/interpreter/bytecodes-unittest.cc |
+++ b/test/unittests/interpreter/bytecodes-unittest.cc |
@@ -76,9 +76,13 @@ TEST(OperandConversion, RegistersParametersNoOverlap) { |
} |
TEST(OperandScaling, ScalableAndNonScalable) { |
- for (OperandScale operand_scale = OperandScale::kSingle; |
- operand_scale <= OperandScale::kMaxValid; |
- operand_scale = Bytecodes::NextOperandScale(operand_scale)) { |
+ const OperandScale kOperandScales[] = { |
+#define VALUE(Name, _) OperandScale::k##Name, |
+ OPERAND_SCALE_LIST(VALUE) |
+#undef VALUE |
+ }; |
+ |
+ for (OperandScale operand_scale : kOperandScales) { |
int scale = static_cast<int>(operand_scale); |
CHECK_EQ(Bytecodes::Size(Bytecode::kCallRuntime, operand_scale), |
1 + 2 + 2 * scale); |
@@ -304,13 +308,71 @@ TEST(Bytecodes, PrefixMappings) { |
} |
} |
-TEST(OperandScale, PrefixesScale) { |
- CHECK(Bytecodes::NextOperandScale(OperandScale::kSingle) == |
- OperandScale::kDouble); |
- CHECK(Bytecodes::NextOperandScale(OperandScale::kDouble) == |
- OperandScale::kQuadruple); |
- CHECK(Bytecodes::NextOperandScale(OperandScale::kQuadruple) == |
- OperandScale::kInvalid); |
+TEST(Bytecodes, OperandScales) { |
+ CHECK_EQ(Bytecodes::OperandSizesToScale(OperandSize::kByte), |
+ OperandScale::kSingle); |
+ CHECK_EQ(Bytecodes::OperandSizesToScale(OperandSize::kShort), |
+ OperandScale::kDouble); |
+ CHECK_EQ(Bytecodes::OperandSizesToScale(OperandSize::kQuad), |
+ OperandScale::kQuadruple); |
+ CHECK_EQ( |
+ Bytecodes::OperandSizesToScale(OperandSize::kShort, OperandSize::kShort, |
+ OperandSize::kShort, OperandSize::kShort), |
+ OperandScale::kDouble); |
+ CHECK_EQ( |
+ Bytecodes::OperandSizesToScale(OperandSize::kQuad, OperandSize::kShort, |
+ OperandSize::kShort, OperandSize::kShort), |
+ OperandScale::kQuadruple); |
+ CHECK_EQ( |
+ Bytecodes::OperandSizesToScale(OperandSize::kShort, OperandSize::kQuad, |
+ OperandSize::kShort, OperandSize::kShort), |
+ OperandScale::kQuadruple); |
+ CHECK_EQ( |
+ Bytecodes::OperandSizesToScale(OperandSize::kShort, OperandSize::kShort, |
+ OperandSize::kQuad, OperandSize::kShort), |
+ OperandScale::kQuadruple); |
+ CHECK_EQ( |
+ Bytecodes::OperandSizesToScale(OperandSize::kShort, OperandSize::kShort, |
+ OperandSize::kShort, OperandSize::kQuad), |
+ OperandScale::kQuadruple); |
+} |
+ |
+TEST(Bytecodes, SizesForSignedOperands) { |
+ CHECK(Bytecodes::SizeForSignedOperand(0) == OperandSize::kByte); |
+ CHECK(Bytecodes::SizeForSignedOperand(kMaxInt8) == OperandSize::kByte); |
+ CHECK(Bytecodes::SizeForSignedOperand(kMinInt8) == OperandSize::kByte); |
+ CHECK(Bytecodes::SizeForSignedOperand(kMaxInt8 + 1) == OperandSize::kShort); |
+ CHECK(Bytecodes::SizeForSignedOperand(kMinInt8 - 1) == OperandSize::kShort); |
+ CHECK(Bytecodes::SizeForSignedOperand(kMaxInt16) == OperandSize::kShort); |
+ CHECK(Bytecodes::SizeForSignedOperand(kMinInt16) == OperandSize::kShort); |
+ CHECK(Bytecodes::SizeForSignedOperand(kMaxInt16 + 1) == OperandSize::kQuad); |
+ CHECK(Bytecodes::SizeForSignedOperand(kMinInt16 - 1) == OperandSize::kQuad); |
+ CHECK(Bytecodes::SizeForSignedOperand(kMaxInt) == OperandSize::kQuad); |
+ CHECK(Bytecodes::SizeForSignedOperand(kMinInt) == OperandSize::kQuad); |
+} |
+ |
+TEST(Bytecodes, SizesForUnsignedOperands) { |
+ // int overloads |
+ CHECK(Bytecodes::SizeForUnsignedOperand(0) == OperandSize::kByte); |
+ CHECK(Bytecodes::SizeForUnsignedOperand(kMaxUInt8) == OperandSize::kByte); |
+ CHECK(Bytecodes::SizeForUnsignedOperand(kMaxUInt8 + 1) == |
+ OperandSize::kShort); |
+ CHECK(Bytecodes::SizeForUnsignedOperand(kMaxUInt16) == OperandSize::kShort); |
+ CHECK(Bytecodes::SizeForUnsignedOperand(kMaxUInt16 + 1) == |
+ OperandSize::kQuad); |
+ // size_t overloads |
+ CHECK(Bytecodes::SizeForUnsignedOperand(static_cast<size_t>(0)) == |
+ OperandSize::kByte); |
+ CHECK(Bytecodes::SizeForUnsignedOperand(static_cast<size_t>(kMaxUInt8)) == |
+ OperandSize::kByte); |
+ CHECK(Bytecodes::SizeForUnsignedOperand(static_cast<size_t>(kMaxUInt8 + 1)) == |
+ OperandSize::kShort); |
+ CHECK(Bytecodes::SizeForUnsignedOperand(static_cast<size_t>(kMaxUInt16)) == |
+ OperandSize::kShort); |
+ CHECK(Bytecodes::SizeForUnsignedOperand( |
+ static_cast<size_t>(kMaxUInt16 + 1)) == OperandSize::kQuad); |
+ CHECK(Bytecodes::SizeForUnsignedOperand(static_cast<size_t>(kMaxUInt32)) == |
+ OperandSize::kQuad); |
} |
TEST(OperandScale, PrefixesRequired) { |