// Copyright 2016 the V8 project authors. All rights reserved.
|
// Use of this source code is governed by a BSD-style license that can be
|
// found in the LICENSE file.
|
|
#include "src/interpreter/bytecode-operands.h"
|
|
#include <iomanip>
|
|
namespace v8 {
|
namespace internal {
|
namespace interpreter {
|
|
namespace {
|
|
const char* AccumulatorUseToString(AccumulatorUse accumulator_use) {
|
switch (accumulator_use) {
|
case AccumulatorUse::kNone:
|
return "None";
|
case AccumulatorUse::kRead:
|
return "Read";
|
case AccumulatorUse::kWrite:
|
return "Write";
|
case AccumulatorUse::kReadWrite:
|
return "ReadWrite";
|
}
|
UNREACHABLE();
|
}
|
|
const char* OperandTypeToString(OperandType operand_type) {
|
switch (operand_type) {
|
#define CASE(Name, _) \
|
case OperandType::k##Name: \
|
return #Name;
|
OPERAND_TYPE_LIST(CASE)
|
#undef CASE
|
}
|
UNREACHABLE();
|
}
|
|
const char* OperandScaleToString(OperandScale operand_scale) {
|
switch (operand_scale) {
|
#define CASE(Name, _) \
|
case OperandScale::k##Name: \
|
return #Name;
|
OPERAND_SCALE_LIST(CASE)
|
#undef CASE
|
}
|
UNREACHABLE();
|
}
|
|
const char* OperandSizeToString(OperandSize operand_size) {
|
switch (operand_size) {
|
case OperandSize::kNone:
|
return "None";
|
case OperandSize::kByte:
|
return "Byte";
|
case OperandSize::kShort:
|
return "Short";
|
case OperandSize::kQuad:
|
return "Quad";
|
}
|
UNREACHABLE();
|
}
|
|
} // namespace
|
|
std::ostream& operator<<(std::ostream& os, const AccumulatorUse& use) {
|
return os << AccumulatorUseToString(use);
|
}
|
|
std::ostream& operator<<(std::ostream& os, const OperandSize& operand_size) {
|
return os << OperandSizeToString(operand_size);
|
}
|
|
std::ostream& operator<<(std::ostream& os, const OperandScale& operand_scale) {
|
return os << OperandScaleToString(operand_scale);
|
}
|
|
std::ostream& operator<<(std::ostream& os, const OperandType& operand_type) {
|
return os << OperandTypeToString(operand_type);
|
}
|
|
} // namespace interpreter
|
} // namespace internal
|
} // namespace v8
|