Index: src/interpreter/bytecodes.cc |
diff --git a/src/interpreter/bytecodes.cc b/src/interpreter/bytecodes.cc |
index e626acc69022e88089d4b9f3d20ff86689c73d52..826d557eb0ae0d26b4743d8bee8e628ceb22bf19 100644 |
--- a/src/interpreter/bytecodes.cc |
+++ b/src/interpreter/bytecodes.cc |
@@ -6,6 +6,7 @@ |
#include <iomanip> |
+#include "src/base/bits.h" |
#include "src/frames.h" |
#include "src/interpreter/bytecode-traits.h" |
#include "src/interpreter/interpreter.h" |
@@ -324,6 +325,20 @@ const OperandType* Bytecodes::GetOperandTypes(Bytecode bytecode) { |
} |
// static |
+const OperandTypeInfo* Bytecodes::GetOperandTypeInfos(Bytecode bytecode) { |
+ DCHECK(bytecode <= Bytecode::kLast); |
+ switch (bytecode) { |
+#define CASE(Name, ...) \ |
+ case Bytecode::k##Name: \ |
+ return BytecodeTraits<__VA_ARGS__>::GetOperandTypeInfos(); |
+ BYTECODE_LIST(CASE) |
+#undef CASE |
+ } |
+ UNREACHABLE(); |
+ return nullptr; |
+} |
+ |
+// static |
OperandSize Bytecodes::GetOperandSize(Bytecode bytecode, int i, |
OperandScale operand_scale) { |
DCHECK_LT(i, NumberOfOperands(bytecode)); |
@@ -598,7 +613,7 @@ bool Bytecodes::IsUnsignedOperandType(OperandType operand_type) { |
switch (operand_type) { |
#define CASE(Name, _) \ |
case OperandType::k##Name: \ |
- return OperandTraits<OperandType::k##Name>::TypeInfo::kIsUnsigned; |
+ return OperandTraits<OperandType::k##Name>::TypeInfoTraits::kIsUnsigned; |
OPERAND_TYPE_LIST(CASE) |
#undef CASE |
} |
@@ -608,9 +623,9 @@ bool Bytecodes::IsUnsignedOperandType(OperandType operand_type) { |
// static |
OperandSize Bytecodes::SizeForSignedOperand(int value) { |
- if (kMinInt8 <= value && value <= kMaxInt8) { |
+ if (value >= kMinInt8 && value <= kMaxInt8) { |
return OperandSize::kByte; |
- } else if (kMinInt16 <= value && value <= kMaxInt16) { |
+ } else if (value >= kMinInt16 && value <= kMaxInt16) { |
return OperandSize::kShort; |
} else { |
return OperandSize::kQuad; |
@@ -618,8 +633,7 @@ OperandSize Bytecodes::SizeForSignedOperand(int value) { |
} |
// static |
-OperandSize Bytecodes::SizeForUnsignedOperand(int value) { |
- DCHECK_GE(value, 0); |
+OperandSize Bytecodes::SizeForUnsignedOperand(uint32_t value) { |
if (value <= kMaxUInt8) { |
return OperandSize::kByte; |
} else if (value <= kMaxUInt16) { |
@@ -629,69 +643,6 @@ OperandSize Bytecodes::SizeForUnsignedOperand(int value) { |
} |
} |
-OperandSize Bytecodes::SizeForUnsignedOperand(size_t value) { |
- if (value <= static_cast<size_t>(kMaxUInt8)) { |
- return OperandSize::kByte; |
- } else if (value <= static_cast<size_t>(kMaxUInt16)) { |
- return OperandSize::kShort; |
- } else if (value <= kMaxUInt32) { |
- return OperandSize::kQuad; |
- } else { |
- UNREACHABLE(); |
- return OperandSize::kQuad; |
- } |
-} |
- |
-OperandScale Bytecodes::OperandSizesToScale(OperandSize size0) { |
- OperandScale operand_scale = static_cast<OperandScale>(size0); |
- DCHECK(operand_scale == OperandScale::kSingle || |
- operand_scale == OperandScale::kDouble || |
- operand_scale == OperandScale::kQuadruple); |
- return operand_scale; |
-} |
- |
-OperandScale Bytecodes::OperandSizesToScale(OperandSize size0, |
- OperandSize size1) { |
- OperandSize operand_size = std::max(size0, size1); |
- // Operand sizes have been scaled before calling this function. |
- // Currently all scalable operands are byte sized at |
- // OperandScale::kSingle. |
- STATIC_ASSERT(static_cast<int>(OperandSize::kByte) == |
- static_cast<int>(OperandScale::kSingle) && |
- static_cast<int>(OperandSize::kShort) == |
- static_cast<int>(OperandScale::kDouble) && |
- static_cast<int>(OperandSize::kQuad) == |
- static_cast<int>(OperandScale::kQuadruple)); |
- OperandScale operand_scale = static_cast<OperandScale>(operand_size); |
- DCHECK(operand_scale == OperandScale::kSingle || |
- operand_scale == OperandScale::kDouble || |
- operand_scale == OperandScale::kQuadruple); |
- return operand_scale; |
-} |
- |
-OperandScale Bytecodes::OperandSizesToScale(OperandSize size0, |
- OperandSize size1, |
- OperandSize size2, |
- OperandSize size3) { |
- OperandSize upper = std::max(size0, size1); |
- OperandSize lower = std::max(size2, size3); |
- OperandSize result = std::max(upper, lower); |
- // Operand sizes have been scaled before calling this function. |
- // Currently all scalable operands are byte sized at |
- // OperandScale::kSingle. |
- STATIC_ASSERT(static_cast<int>(OperandSize::kByte) == |
- static_cast<int>(OperandScale::kSingle) && |
- static_cast<int>(OperandSize::kShort) == |
- static_cast<int>(OperandScale::kDouble) && |
- static_cast<int>(OperandSize::kQuad) == |
- static_cast<int>(OperandScale::kQuadruple)); |
- OperandScale operand_scale = static_cast<OperandScale>(result); |
- DCHECK(operand_scale == OperandScale::kSingle || |
- operand_scale == OperandScale::kDouble || |
- operand_scale == OperandScale::kQuadruple); |
- return operand_scale; |
-} |
- |
// static |
Register Bytecodes::DecodeRegisterOperand(const uint8_t* operand_start, |
OperandType operand_type, |