| // Copyright 2014 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/machine-type.h" | 
 | #include "src/ostreams.h" | 
 |  | 
 | namespace v8 { | 
 | namespace internal { | 
 |  | 
 | bool IsSubtype(MachineRepresentation rep1, MachineRepresentation rep2) { | 
 |   if (rep1 == rep2) return true; | 
 |   switch (rep1) { | 
 |     case MachineRepresentation::kTaggedSigned: | 
 |       return rep2 == MachineRepresentation::kTagged; | 
 |     case MachineRepresentation ::kTaggedPointer: | 
 |       return rep2 == MachineRepresentation ::kTagged; | 
 |     default: | 
 |       return false; | 
 |   } | 
 | } | 
 |  | 
 | std::ostream& operator<<(std::ostream& os, MachineRepresentation rep) { | 
 |   return os << MachineReprToString(rep); | 
 | } | 
 |  | 
 | const char* MachineReprToString(MachineRepresentation rep) { | 
 |   switch (rep) { | 
 |     case MachineRepresentation::kNone: | 
 |       return "kMachNone"; | 
 |     case MachineRepresentation::kBit: | 
 |       return "kRepBit"; | 
 |     case MachineRepresentation::kWord8: | 
 |       return "kRepWord8"; | 
 |     case MachineRepresentation::kWord16: | 
 |       return "kRepWord16"; | 
 |     case MachineRepresentation::kWord32: | 
 |       return "kRepWord32"; | 
 |     case MachineRepresentation::kWord64: | 
 |       return "kRepWord64"; | 
 |     case MachineRepresentation::kFloat32: | 
 |       return "kRepFloat32"; | 
 |     case MachineRepresentation::kFloat64: | 
 |       return "kRepFloat64"; | 
 |     case MachineRepresentation::kSimd128: | 
 |       return "kRepSimd128"; | 
 |     case MachineRepresentation::kTaggedSigned: | 
 |       return "kRepTaggedSigned"; | 
 |     case MachineRepresentation::kTaggedPointer: | 
 |       return "kRepTaggedPointer"; | 
 |     case MachineRepresentation::kTagged: | 
 |       return "kRepTagged"; | 
 |   } | 
 |   UNREACHABLE(); | 
 | } | 
 |  | 
 | std::ostream& operator<<(std::ostream& os, MachineSemantic type) { | 
 |   switch (type) { | 
 |     case MachineSemantic::kNone: | 
 |       return os << "kMachNone"; | 
 |     case MachineSemantic::kBool: | 
 |       return os << "kTypeBool"; | 
 |     case MachineSemantic::kInt32: | 
 |       return os << "kTypeInt32"; | 
 |     case MachineSemantic::kUint32: | 
 |       return os << "kTypeUint32"; | 
 |     case MachineSemantic::kInt64: | 
 |       return os << "kTypeInt64"; | 
 |     case MachineSemantic::kUint64: | 
 |       return os << "kTypeUint64"; | 
 |     case MachineSemantic::kNumber: | 
 |       return os << "kTypeNumber"; | 
 |     case MachineSemantic::kAny: | 
 |       return os << "kTypeAny"; | 
 |   } | 
 |   UNREACHABLE(); | 
 | } | 
 |  | 
 |  | 
 | std::ostream& operator<<(std::ostream& os, MachineType type) { | 
 |   if (type == MachineType::None()) { | 
 |     return os; | 
 |   } else if (type.representation() == MachineRepresentation::kNone) { | 
 |     return os << type.semantic(); | 
 |   } else if (type.semantic() == MachineSemantic::kNone) { | 
 |     return os << type.representation(); | 
 |   } else { | 
 |     return os << type.representation() << "|" << type.semantic(); | 
 |   } | 
 |   return os; | 
 | } | 
 |  | 
 | }  // namespace internal | 
 | }  // namespace v8 |