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