13
13
#include " llvm/ADT/StringSwitch.h"
14
14
#include " llvm/Support/ErrorHandling.h"
15
15
#include " llvm/Support/TargetParser.h"
16
+ #include " llvm/Support/Host.h"
16
17
#include < cstring>
17
18
using namespace llvm ;
18
19
@@ -24,7 +25,8 @@ const char *Triple::getArchTypeName(ArchType Kind) {
24
25
case aarch64_be: return " aarch64_be" ;
25
26
case arm: return " arm" ;
26
27
case armeb: return " armeb" ;
27
- case bpf: return " bpf" ;
28
+ case bpf_le: return " bpf_le" ;
29
+ case bpf_be: return " bpf_be" ;
28
30
case hexagon: return " hexagon" ;
29
31
case mips: return " mips" ;
30
32
case mipsel: return " mipsel" ;
@@ -89,7 +91,8 @@ const char *Triple::getArchTypePrefix(ArchType Kind) {
89
91
case amdgcn:
90
92
case r600: return " amdgpu" ;
91
93
92
- case bpf: return " bpf" ;
94
+ case bpf_le:
95
+ case bpf_be: return " bpf" ;
93
96
94
97
case sparcv9:
95
98
case sparcel:
@@ -192,14 +195,30 @@ const char *Triple::getEnvironmentTypeName(EnvironmentType Kind) {
192
195
llvm_unreachable (" Invalid EnvironmentType!" );
193
196
}
194
197
198
+ static Triple::ArchType parseBPFArch (StringRef ArchName) {
199
+ if (ArchName.equals (" bpf" )) {
200
+ if (sys::IsLittleEndianHost)
201
+ return Triple::bpf_le;
202
+ else
203
+ return Triple::bpf_be;
204
+ } else if (ArchName.equals (" bpf_be" )) {
205
+ return Triple::bpf_be;
206
+ } else if (ArchName.equals (" bpf_le" )) {
207
+ return Triple::bpf_le;
208
+ } else {
209
+ return Triple::UnknownArch;
210
+ }
211
+ }
212
+
195
213
Triple::ArchType Triple::getArchTypeForLLVMName (StringRef Name) {
214
+ Triple::ArchType BPFArch (parseBPFArch (Name));
196
215
return StringSwitch<Triple::ArchType>(Name)
197
216
.Case (" aarch64" , aarch64)
198
217
.Case (" aarch64_be" , aarch64_be)
199
218
.Case (" arm64" , aarch64) // "arm64" is an alias for "aarch64"
200
219
.Case (" arm" , arm)
201
220
.Case (" armeb" , armeb)
202
- .Case (" bpf" , bpf )
221
+ .StartsWith (" bpf" , BPFArch )
203
222
.Case (" mips" , mips)
204
223
.Case (" mipsel" , mipsel)
205
224
.Case (" mips64" , mips64)
@@ -296,6 +315,7 @@ static Triple::ArchType parseARMArch(StringRef ArchName) {
296
315
297
316
static Triple::ArchType parseArch (StringRef ArchName) {
298
317
Triple::ArchType ARMArch (parseARMArch (ArchName));
318
+ Triple::ArchType BPFArch (parseBPFArch (ArchName));
299
319
300
320
return StringSwitch<Triple::ArchType>(ArchName)
301
321
.Cases (" i386" , " i486" , " i586" , " i686" , Triple::x86)
@@ -317,7 +337,7 @@ static Triple::ArchType parseArch(StringRef ArchName) {
317
337
.Case (" mips64el" , Triple::mips64el)
318
338
.Case (" r600" , Triple::r600)
319
339
.Case (" amdgcn" , Triple::amdgcn)
320
- .Case (" bpf" , Triple::bpf )
340
+ .StartsWith (" bpf" , BPFArch )
321
341
.Case (" hexagon" , Triple::hexagon)
322
342
.Case (" s390x" , Triple::systemz)
323
343
.Case (" sparc" , Triple::sparc)
@@ -989,7 +1009,8 @@ static unsigned getArchPointerBitWidth(llvm::Triple::ArchType Arch) {
989
1009
case llvm::Triple::aarch64:
990
1010
case llvm::Triple::aarch64_be:
991
1011
case llvm::Triple::amdgcn:
992
- case llvm::Triple::bpf:
1012
+ case llvm::Triple::bpf_le:
1013
+ case llvm::Triple::bpf_be:
993
1014
case llvm::Triple::le64:
994
1015
case llvm::Triple::mips64:
995
1016
case llvm::Triple::mips64el:
@@ -1026,7 +1047,8 @@ Triple Triple::get32BitArchVariant() const {
1026
1047
case Triple::aarch64:
1027
1048
case Triple::aarch64_be:
1028
1049
case Triple::amdgcn:
1029
- case Triple::bpf:
1050
+ case Triple::bpf_le:
1051
+ case Triple::bpf_be:
1030
1052
case Triple::msp430:
1031
1053
case Triple::systemz:
1032
1054
case Triple::ppc64le:
@@ -1090,7 +1112,8 @@ Triple Triple::get64BitArchVariant() const {
1090
1112
1091
1113
case Triple::aarch64:
1092
1114
case Triple::aarch64_be:
1093
- case Triple::bpf:
1115
+ case Triple::bpf_le:
1116
+ case Triple::bpf_be:
1094
1117
case Triple::le64:
1095
1118
case Triple::amdil64:
1096
1119
case Triple::amdgcn:
0 commit comments