Please use GitHub pull requests for new patches. Phabricator shutdown timeline
Changeset View
Changeset View
Standalone View
Standalone View
llvm/lib/TextAPI/MachO/Architecture.cpp
Show All 9 Lines | |||||
// | // | ||||
//===----------------------------------------------------------------------===// | //===----------------------------------------------------------------------===// | ||||
#include "llvm/TextAPI/MachO/Architecture.h" | #include "llvm/TextAPI/MachO/Architecture.h" | ||||
#include "llvm/ADT/StringSwitch.h" | #include "llvm/ADT/StringSwitch.h" | ||||
#include "llvm/ADT/Triple.h" | #include "llvm/ADT/Triple.h" | ||||
#include "llvm/BinaryFormat/MachO.h" | #include "llvm/BinaryFormat/MachO.h" | ||||
#include "llvm/Support/raw_ostream.h" | #include "llvm/Support/raw_ostream.h" | ||||
#include "llvm/TextAPI/MachO/ArchitectureSet.h" | |||||
namespace llvm { | namespace llvm { | ||||
namespace MachO { | namespace MachO { | ||||
Architecture getArchitectureFromCpuType(uint32_t CPUType, uint32_t CPUSubType) { | Architecture getArchitectureFromCpuType(uint32_t CPUType, uint32_t CPUSubType) { | ||||
#define ARCHINFO(Arch, Type, Subtype) \ | #define ARCHINFO(Arch, Type, Subtype, NumBits) \ | ||||
if (CPUType == (Type) && \ | if (CPUType == (Type) && \ | ||||
(CPUSubType & ~MachO::CPU_SUBTYPE_MASK) == (Subtype)) \ | (CPUSubType & ~MachO::CPU_SUBTYPE_MASK) == (Subtype)) \ | ||||
return AK_##Arch; | return AK_##Arch; | ||||
#include "llvm/TextAPI/MachO/Architecture.def" | #include "llvm/TextAPI/MachO/Architecture.def" | ||||
#undef ARCHINFO | #undef ARCHINFO | ||||
return AK_unknown; | return AK_unknown; | ||||
} | } | ||||
Architecture getArchitectureFromName(StringRef Name) { | Architecture getArchitectureFromName(StringRef Name) { | ||||
return StringSwitch<Architecture>(Name) | return StringSwitch<Architecture>(Name) | ||||
#define ARCHINFO(Arch, Type, Subtype) .Case(#Arch, AK_##Arch) | #define ARCHINFO(Arch, Type, Subtype, NumBits) .Case(#Arch, AK_##Arch) | ||||
#include "llvm/TextAPI/MachO/Architecture.def" | #include "llvm/TextAPI/MachO/Architecture.def" | ||||
#undef ARCHINFO | #undef ARCHINFO | ||||
.Default(AK_unknown); | .Default(AK_unknown); | ||||
} | } | ||||
StringRef getArchitectureName(Architecture Arch) { | StringRef getArchitectureName(Architecture Arch) { | ||||
switch (Arch) { | switch (Arch) { | ||||
#define ARCHINFO(Arch, Type, Subtype) \ | #define ARCHINFO(Arch, Type, Subtype, NumBits) \ | ||||
case AK_##Arch: \ | case AK_##Arch: \ | ||||
return #Arch; | return #Arch; | ||||
#include "llvm/TextAPI/MachO/Architecture.def" | #include "llvm/TextAPI/MachO/Architecture.def" | ||||
#undef ARCHINFO | #undef ARCHINFO | ||||
case AK_unknown: | case AK_unknown: | ||||
return "unknown"; | return "unknown"; | ||||
} | } | ||||
// Appease some compilers that cannot figure out that this is a fully covered | // Appease some compilers that cannot figure out that this is a fully covered | ||||
// switch statement. | // switch statement. | ||||
return "unknown"; | return "unknown"; | ||||
} | } | ||||
std::pair<uint32_t, uint32_t> getCPUTypeFromArchitecture(Architecture Arch) { | std::pair<uint32_t, uint32_t> getCPUTypeFromArchitecture(Architecture Arch) { | ||||
switch (Arch) { | switch (Arch) { | ||||
#define ARCHINFO(Arch, Type, Subtype) \ | #define ARCHINFO(Arch, Type, Subtype, NumBits) \ | ||||
case AK_##Arch: \ | case AK_##Arch: \ | ||||
return std::make_pair(Type, Subtype); | return std::make_pair(Type, Subtype); | ||||
#include "llvm/TextAPI/MachO/Architecture.def" | #include "llvm/TextAPI/MachO/Architecture.def" | ||||
#undef ARCHINFO | #undef ARCHINFO | ||||
case AK_unknown: | case AK_unknown: | ||||
return std::make_pair(0, 0); | return std::make_pair(0, 0); | ||||
} | } | ||||
// Appease some compilers that cannot figure out that this is a fully covered | // Appease some compilers that cannot figure out that this is a fully covered | ||||
// switch statement. | // switch statement. | ||||
return std::make_pair(0, 0); | return std::make_pair(0, 0); | ||||
} | } | ||||
Architecture mapToArchitecture(const Triple &Target) { | Architecture mapToArchitecture(const Triple &Target) { | ||||
return getArchitectureFromName(Target.getArchName()); | return getArchitectureFromName(Target.getArchName()); | ||||
} | } | ||||
bool is64Bit(Architecture Arch) { | |||||
switch (Arch) { | |||||
#define ARCHINFO(Arch, Type, Subtype, NumBits) \ | |||||
case AK_##Arch: \ | |||||
return NumBits == 64; | |||||
#include "llvm/TextAPI/MachO/Architecture.def" | |||||
#undef ARCHINFO | |||||
case AK_unknown: | |||||
return false; | |||||
} | |||||
llvm_unreachable("Fully handled switch case above."); | |||||
} | |||||
JDevlieghere: `llvm_unreachable("Fully covered switch above!");` | |||||
raw_ostream &operator<<(raw_ostream &OS, Architecture Arch) { | raw_ostream &operator<<(raw_ostream &OS, Architecture Arch) { | ||||
OS << getArchitectureName(Arch); | OS << getArchitectureName(Arch); | ||||
return OS; | return OS; | ||||
} | } | ||||
} // end namespace MachO. | } // end namespace MachO. | ||||
} // end namespace llvm. | } // end namespace llvm. |
llvm_unreachable("Fully covered switch above!");