LLVM  14.0.0git
Architecture.cpp
Go to the documentation of this file.
1 //===- Architecture.cpp ---------------------------------------------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 //
9 // Implements the architecture helper functions.
10 //
11 //===----------------------------------------------------------------------===//
12 
14 #include "llvm/ADT/StringSwitch.h"
15 #include "llvm/ADT/Triple.h"
19 
20 namespace llvm {
21 namespace MachO {
22 
24 #define ARCHINFO(Arch, Type, Subtype, NumBits) \
25  if (CPUType == (Type) && \
26  (CPUSubType & ~MachO::CPU_SUBTYPE_MASK) == (Subtype)) \
27  return AK_##Arch;
28 #include "llvm/TextAPI/Architecture.def"
29 #undef ARCHINFO
30 
31  return AK_unknown;
32 }
33 
36 #define ARCHINFO(Arch, Type, Subtype, NumBits) .Case(#Arch, AK_##Arch)
37 #include "llvm/TextAPI/Architecture.def"
38 #undef ARCHINFO
40 }
41 
43  switch (Arch) {
44 #define ARCHINFO(Arch, Type, Subtype, NumBits) \
45  case AK_##Arch: \
46  return #Arch;
47 #include "llvm/TextAPI/Architecture.def"
48 #undef ARCHINFO
49  case AK_unknown:
50  return "unknown";
51  }
52 
53  // Appease some compilers that cannot figure out that this is a fully covered
54  // switch statement.
55  return "unknown";
56 }
57 
58 std::pair<uint32_t, uint32_t> getCPUTypeFromArchitecture(Architecture Arch) {
59  switch (Arch) {
60 #define ARCHINFO(Arch, Type, Subtype, NumBits) \
61  case AK_##Arch: \
62  return std::make_pair(Type, Subtype);
63 #include "llvm/TextAPI/Architecture.def"
64 #undef ARCHINFO
65  case AK_unknown:
66  return std::make_pair(0, 0);
67  }
68 
69  // Appease some compilers that cannot figure out that this is a fully covered
70  // switch statement.
71  return std::make_pair(0, 0);
72 }
73 
75  return getArchitectureFromName(Target.getArchName());
76 }
77 
78 bool is64Bit(Architecture Arch) {
79  switch (Arch) {
80 #define ARCHINFO(Arch, Type, Subtype, NumBits) \
81  case AK_##Arch: \
82  return NumBits == 64;
83 #include "llvm/TextAPI/Architecture.def"
84 #undef ARCHINFO
85  case AK_unknown:
86  return false;
87  }
88 
89  llvm_unreachable("Fully handled switch case above.");
90 }
91 
93  OS << getArchitectureName(Arch);
94  return OS;
95 }
96 
97 } // end namespace MachO.
98 } // end namespace llvm.
llvm::MachO::is64Bit
bool is64Bit(Architecture)
Check if architecture is 64 bit.
Definition: Architecture.cpp:78
llvm
This is an optimization pass for GlobalISel generic memory operations.
Definition: AllocatorList.h:23
llvm::MachO::AK_unknown
@ AK_unknown
Definition: Architecture.h:31
llvm::StringSwitch::Default
LLVM_NODISCARD R Default(T Value)
Definition: StringSwitch.h:181
llvm::MachO::Target
Definition: Target.h:24
llvm::Triple
Triple - Helper class for working with autoconf configuration names.
Definition: Triple.h:45
Architecture.h
llvm::MachO::CPUType
CPUType
Definition: MachO.h:1418
llvm::raw_ostream
This class implements an extremely fast bulk output stream that can only output to a stream.
Definition: raw_ostream.h:53
llvm::MachO::Architecture
Architecture
Defines the architecture slices that are supported by Text-based Stub files.
Definition: Architecture.h:27
llvm::MachO::operator<<
raw_ostream & operator<<(raw_ostream &OS, Architecture Arch)
Definition: Architecture.cpp:92
llvm::MachO::getArchitectureFromName
Architecture getArchitectureFromName(StringRef Name)
Convert a name to an architecture slice.
Definition: Architecture.cpp:34
Triple.h
llvm::MachO::getCPUTypeFromArchitecture
std::pair< uint32_t, uint32_t > getCPUTypeFromArchitecture(Architecture Arch)
Convert an architecture slice to a CPU Type and Subtype pair.
Definition: Architecture.cpp:58
llvm::StringRef
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:57
llvm_unreachable
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
Definition: ErrorHandling.h:134
uint32_t
llvm::GraphProgram::Name
Name
Definition: GraphWriter.h:52
llvm::MachO::mapToArchitecture
Architecture mapToArchitecture(const llvm::Triple &Target)
Convert a target to an architecture slice.
Definition: Architecture.cpp:74
llvm::MachO::getArchitectureFromCpuType
Architecture getArchitectureFromCpuType(uint32_t CPUType, uint32_t CPUSubType)
Convert a CPU Type and Subtype pair to an architecture slice.
Definition: Architecture.cpp:23
StringSwitch.h
ArchitectureSet.h
llvm::StringSwitch
A switch()-like statement whose cases are string literals.
Definition: StringSwitch.h:42
MachO.h
llvm::MachO::getArchitectureName
StringRef getArchitectureName(Architecture Arch)
Convert an architecture slice to a string.
Definition: Architecture.cpp:42
raw_ostream.h