|
9 | 9 | #include "llvm/BinaryFormat/XCOFF.h"
|
10 | 10 | #include "llvm/ADT/SmallString.h"
|
11 | 11 | #include "llvm/ADT/StringRef.h"
|
| 12 | +#include "llvm/ADT/StringSwitch.h" |
12 | 13 | #include "llvm/Support/Errc.h"
|
13 | 14 | #include "llvm/Support/Error.h"
|
| 15 | +#include "llvm/TargetParser/PPCTargetParser.h" |
14 | 16 |
|
15 | 17 | using namespace llvm;
|
16 | 18 |
|
@@ -107,6 +109,63 @@ StringRef XCOFF::getNameForTracebackTableLanguageId(
|
107 | 109 | }
|
108 | 110 | #undef LANG_CASE
|
109 | 111 |
|
| 112 | +XCOFF::CFileCpuId XCOFF::getCpuID(StringRef CPUName) { |
| 113 | + StringRef CPU = PPC::normalizeCPUName(CPUName); |
| 114 | + return StringSwitch<XCOFF::CFileCpuId>(CPU) |
| 115 | + .Cases("generic", "COM", XCOFF::TCPU_COM) |
| 116 | + .Case("601", XCOFF::TCPU_601) |
| 117 | + .Cases("602", "603", "603e", "603ev", XCOFF::TCPU_603) |
| 118 | + .Cases("604", "604e", XCOFF::TCPU_604) |
| 119 | + .Case("620", XCOFF::TCPU_620) |
| 120 | + .Case("970", XCOFF::TCPU_970) |
| 121 | + .Cases("a2", "g3", "g4", "g5", "e500", XCOFF::TCPU_COM) |
| 122 | + .Cases("pwr3", "pwr4", XCOFF::TCPU_COM) |
| 123 | + .Cases("pwr5", "PWR5", XCOFF::TCPU_PWR5) |
| 124 | + .Cases("pwr5x", "PWR5X", XCOFF::TCPU_PWR5X) |
| 125 | + .Cases("pwr6", "PWR6", XCOFF::TCPU_PWR6) |
| 126 | + .Cases("pwr6x", "PWR6E", XCOFF::TCPU_PWR6E) |
| 127 | + .Cases("pwr7", "PWR7", XCOFF::TCPU_PWR7) |
| 128 | + .Cases("pwr8", "PWR8", XCOFF::TCPU_PWR8) |
| 129 | + .Cases("pwr9", "PWR9", XCOFF::TCPU_PWR9) |
| 130 | + .Cases("pwr10", "PWR10", XCOFF::TCPU_PWR10) |
| 131 | + .Cases("ppc", "PPC", "ppc32", "ppc64", XCOFF::TCPU_COM) |
| 132 | + .Case("ppc64le", XCOFF::TCPU_PWR8) |
| 133 | + .Case("future", XCOFF::TCPU_PWR10) |
| 134 | + .Cases("any", "ANY", XCOFF::TCPU_ANY) |
| 135 | + .Default(XCOFF::TCPU_INVALID); |
| 136 | +} |
| 137 | + |
| 138 | +#define TCPU_CASE(A) \ |
| 139 | + case XCOFF::TCPU_##A: \ |
| 140 | + return #A; |
| 141 | +StringRef XCOFF::getTCPUString(XCOFF::CFileCpuId TCPU) { |
| 142 | + switch (TCPU) { |
| 143 | + TCPU_CASE(INVALID) |
| 144 | + TCPU_CASE(PPC) |
| 145 | + TCPU_CASE(PPC64) |
| 146 | + TCPU_CASE(COM) |
| 147 | + TCPU_CASE(PWR) |
| 148 | + TCPU_CASE(ANY) |
| 149 | + TCPU_CASE(601) |
| 150 | + TCPU_CASE(603) |
| 151 | + TCPU_CASE(604) |
| 152 | + TCPU_CASE(620) |
| 153 | + TCPU_CASE(A35) |
| 154 | + TCPU_CASE(PWR5) |
| 155 | + TCPU_CASE(970) |
| 156 | + TCPU_CASE(PWR6) |
| 157 | + TCPU_CASE(PWR5X) |
| 158 | + TCPU_CASE(PWR6E) |
| 159 | + TCPU_CASE(PWR7) |
| 160 | + TCPU_CASE(PWR8) |
| 161 | + TCPU_CASE(PWR9) |
| 162 | + TCPU_CASE(PWR10) |
| 163 | + TCPU_CASE(PWRX) |
| 164 | + } |
| 165 | + return "INVALID"; |
| 166 | +} |
| 167 | +#undef TCPU_CASE |
| 168 | + |
110 | 169 | Expected<SmallString<32>> XCOFF::parseParmsType(uint32_t Value,
|
111 | 170 | unsigned FixedParmsNum,
|
112 | 171 | unsigned FloatingParmsNum) {
|
|
0 commit comments