| Index: src/interpreter/bytecodes.cc
|
| diff --git a/src/interpreter/bytecodes.cc b/src/interpreter/bytecodes.cc
|
| index b0c90da3e8b7f085c3578b27bc43ecffe54f03a7..da73cf1527311c5d548208634a4a2307ef375c23 100644
|
| --- a/src/interpreter/bytecodes.cc
|
| +++ b/src/interpreter/bytecodes.cc
|
| @@ -301,16 +301,23 @@ const OperandType* Bytecodes::GetOperandTypes(Bytecode bytecode) {
|
| // static
|
| OperandSize Bytecodes::GetOperandSize(Bytecode bytecode, int i,
|
| OperandScale operand_scale) {
|
| + DCHECK_LT(i, NumberOfOperands(bytecode));
|
| + return GetOperandSizes(bytecode, operand_scale)[i];
|
| +}
|
| +
|
| +// static
|
| +const OperandSize* Bytecodes::GetOperandSizes(Bytecode bytecode,
|
| + OperandScale operand_scale) {
|
| DCHECK(bytecode <= Bytecode::kLast);
|
| switch (bytecode) {
|
| #define CASE(Name, ...) \
|
| case Bytecode::k##Name: \
|
| - return BytecodeTraits<__VA_ARGS__>::GetOperandSize(i, operand_scale);
|
| + return BytecodeTraits<__VA_ARGS__>::GetOperandSizes(operand_scale);
|
| BYTECODE_LIST(CASE)
|
| #undef CASE
|
| }
|
| UNREACHABLE();
|
| - return OperandSize::kNone;
|
| + return nullptr;
|
| }
|
|
|
| // static
|
| @@ -619,6 +626,33 @@ OperandSize Bytecodes::SizeForUnsignedOperand(size_t value) {
|
| }
|
| }
|
|
|
| +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,
|
|
|