// 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