aboutsummaryrefslogtreecommitdiff
path: root/lib/TextAPI/MachO/Architecture.cpp
diff options
context:
space:
mode:
authorDimitry Andric <dim@FreeBSD.org>2019-08-20 20:50:12 +0000
committerDimitry Andric <dim@FreeBSD.org>2019-08-20 20:50:12 +0000
commite6d1592492a3a379186bfb02bd0f4eda0669c0d5 (patch)
tree599ab169a01f1c86eda9adc774edaedde2f2db5b /lib/TextAPI/MachO/Architecture.cpp
parent1a56a5ead7a2e84bee8240f5f6b033b5f1707154 (diff)
Diffstat (limited to 'lib/TextAPI/MachO/Architecture.cpp')
-rw-r--r--lib/TextAPI/MachO/Architecture.cpp77
1 files changed, 77 insertions, 0 deletions
diff --git a/lib/TextAPI/MachO/Architecture.cpp b/lib/TextAPI/MachO/Architecture.cpp
new file mode 100644
index 000000000000..a66a982fa153
--- /dev/null
+++ b/lib/TextAPI/MachO/Architecture.cpp
@@ -0,0 +1,77 @@
+//===- Architecture.cpp ---------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// Implements the architecture helper functions.
+//
+//===----------------------------------------------------------------------===//
+
+#include "llvm/TextAPI/MachO/Architecture.h"
+#include "llvm/ADT/StringSwitch.h"
+#include "llvm/BinaryFormat/MachO.h"
+
+namespace llvm {
+namespace MachO {
+
+Architecture getArchitectureFromCpuType(uint32_t CPUType, uint32_t CPUSubType) {
+#define ARCHINFO(Arch, Type, Subtype) \
+ if (CPUType == (Type) && \
+ (CPUSubType & ~MachO::CPU_SUBTYPE_MASK) == (Subtype)) \
+ return AK_##Arch;
+#include "llvm/TextAPI/MachO/Architecture.def"
+#undef ARCHINFO
+
+ return AK_unknown;
+}
+
+Architecture getArchitectureFromName(StringRef Name) {
+ return StringSwitch<Architecture>(Name)
+#define ARCHINFO(Arch, Type, Subtype) .Case(#Arch, AK_##Arch)
+#include "llvm/TextAPI/MachO/Architecture.def"
+#undef ARCHINFO
+ .Default(AK_unknown);
+}
+
+StringRef getArchitectureName(Architecture Arch) {
+ switch (Arch) {
+#define ARCHINFO(Arch, Type, Subtype) \
+ case AK_##Arch: \
+ return #Arch;
+#include "llvm/TextAPI/MachO/Architecture.def"
+#undef ARCHINFO
+ case AK_unknown:
+ return "unknown";
+ }
+
+ // Appease some compilers that cannot figure out that this is a fully covered
+ // switch statement.
+ return "unknown";
+}
+
+std::pair<uint32_t, uint32_t> getCPUTypeFromArchitecture(Architecture Arch) {
+ switch (Arch) {
+#define ARCHINFO(Arch, Type, Subtype) \
+ case AK_##Arch: \
+ return std::make_pair(Type, Subtype);
+#include "llvm/TextAPI/MachO/Architecture.def"
+#undef ARCHINFO
+ case AK_unknown:
+ return std::make_pair(0, 0);
+ }
+
+ // Appease some compilers that cannot figure out that this is a fully covered
+ // switch statement.
+ return std::make_pair(0, 0);
+}
+
+raw_ostream &operator<<(raw_ostream &OS, Architecture Arch) {
+ OS << getArchitectureName(Arch);
+ return OS;
+}
+
+} // end namespace MachO.
+} // end namespace llvm.