1014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch// Copyright 2014 the V8 project authors. All rights reserved.
2014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch// Use of this source code is governed by a BSD-style license that can be
3014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch// found in the LICENSE file.
4014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch
5014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#include "src/machine-type.h"
6014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#include "src/ostreams.h"
7014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch
8014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochnamespace v8 {
9014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochnamespace internal {
10014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch
11014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochstd::ostream& operator<<(std::ostream& os, MachineRepresentation rep) {
12f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch  return os << MachineReprToString(rep);
13f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch}
14f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch
15f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdochconst char* MachineReprToString(MachineRepresentation rep) {
16014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch  switch (rep) {
17014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch    case MachineRepresentation::kNone:
18f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch      return "kMachNone";
19014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch    case MachineRepresentation::kBit:
20f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch      return "kRepBit";
21014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch    case MachineRepresentation::kWord8:
22f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch      return "kRepWord8";
23014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch    case MachineRepresentation::kWord16:
24f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch      return "kRepWord16";
25014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch    case MachineRepresentation::kWord32:
26f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch      return "kRepWord32";
27014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch    case MachineRepresentation::kWord64:
28f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch      return "kRepWord64";
29014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch    case MachineRepresentation::kFloat32:
30f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch      return "kRepFloat32";
31014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch    case MachineRepresentation::kFloat64:
32f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch      return "kRepFloat64";
33109988c7ccb6f3fd1a58574fa3dfb88beaef6632Ben Murdoch    case MachineRepresentation::kSimd128:
34f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch      return "kRepSimd128";
3562ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch    case MachineRepresentation::kSimd1x4:
3662ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch      return "kRepSimd1x4";
3762ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch    case MachineRepresentation::kSimd1x8:
3862ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch      return "kRepSimd1x8";
3962ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch    case MachineRepresentation::kSimd1x16:
4062ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch      return "kRepSimd1x16";
41f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch    case MachineRepresentation::kTaggedSigned:
42f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch      return "kRepTaggedSigned";
43f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch    case MachineRepresentation::kTaggedPointer:
44f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch      return "kRepTaggedPointer";
45014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch    case MachineRepresentation::kTagged:
46f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch      return "kRepTagged";
47014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch  }
48014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch  UNREACHABLE();
49f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch  return nullptr;
50014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch}
51014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch
52014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochstd::ostream& operator<<(std::ostream& os, MachineSemantic type) {
53014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch  switch (type) {
54014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch    case MachineSemantic::kNone:
55014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch      return os << "kMachNone";
56014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch    case MachineSemantic::kBool:
57014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch      return os << "kTypeBool";
58014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch    case MachineSemantic::kInt32:
59014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch      return os << "kTypeInt32";
60014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch    case MachineSemantic::kUint32:
61014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch      return os << "kTypeUint32";
62014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch    case MachineSemantic::kInt64:
63014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch      return os << "kTypeInt64";
64014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch    case MachineSemantic::kUint64:
65014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch      return os << "kTypeUint64";
66014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch    case MachineSemantic::kNumber:
67014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch      return os << "kTypeNumber";
68014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch    case MachineSemantic::kAny:
69014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch      return os << "kTypeAny";
70014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch  }
71014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch  UNREACHABLE();
72014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch  return os;
73014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch}
74014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch
75014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch
76014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochstd::ostream& operator<<(std::ostream& os, MachineType type) {
77014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch  if (type == MachineType::None()) {
78014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch    return os;
79014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch  } else if (type.representation() == MachineRepresentation::kNone) {
80014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch    return os << type.semantic();
81014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch  } else if (type.semantic() == MachineSemantic::kNone) {
82014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch    return os << type.representation();
83014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch  } else {
84014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch    return os << type.representation() << "|" << type.semantic();
85014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch  }
86014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch  return os;
87014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch}
88014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch
89014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch}  // namespace internal
90014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch}  // namespace v8
91