diff options
author | Alexei Starovoitov <alexei.starovoitov@gmail.com> | 2015-06-10 22:59:13 +0000 |
---|---|---|
committer | Alexei Starovoitov <alexei.starovoitov@gmail.com> | 2015-06-10 22:59:13 +0000 |
commit | f657ca8d78145857baec0564d188627d5c33b407 (patch) | |
tree | bcd92675f9fbf562832150ce8e654b24556669f1 /clang/lib/Basic/Targets.cpp | |
parent | f6ca8cfdccd16258140a2816d1bc6c20571926d0 (diff) | |
download | bcm5719-llvm-f657ca8d78145857baec0564d188627d5c33b407.tar.gz bcm5719-llvm-f657ca8d78145857baec0564d188627d5c33b407.zip |
[bpf] add support for BPF backend
add support for bpfel/bpfeb targets
llvm-svn: 239496
Diffstat (limited to 'clang/lib/Basic/Targets.cpp')
-rw-r--r-- | clang/lib/Basic/Targets.cpp | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/clang/lib/Basic/Targets.cpp b/clang/lib/Basic/Targets.cpp index 9c559796795..6b4712a918b 100644 --- a/clang/lib/Basic/Targets.cpp +++ b/clang/lib/Basic/Targets.cpp @@ -5896,6 +5896,60 @@ validateAsmConstraint(const char *&Name, unsigned &NumAliases) const override {} }; +class BPFTargetInfo : public TargetInfo { +public: + BPFTargetInfo(const llvm::Triple &Triple) : TargetInfo(Triple) { + LongWidth = LongAlign = PointerWidth = PointerAlign = 64; + SizeType = UnsignedLong; + PtrDiffType = SignedLong; + IntPtrType = SignedLong; + IntMaxType = SignedLong; + Int64Type = SignedLong; + RegParmMax = 5; + if (Triple.getArch() == llvm::Triple::bpfeb) { + BigEndian = true; + DescriptionString = "E-m:e-p:64:64-i64:64-n32:64-S128"; + } else { + BigEndian = false; + DescriptionString = "e-m:e-p:64:64-i64:64-n32:64-S128"; + } + MaxAtomicPromoteWidth = 64; + MaxAtomicInlineWidth = 64; + TLSSupported = false; + } + void getTargetDefines(const LangOptions &Opts, + MacroBuilder &Builder) const override { + DefineStd(Builder, "bpf", Opts); + Builder.defineMacro("__BPF__"); + } + bool hasFeature(StringRef Feature) const override { + return Feature == "bpf"; + } + + void getTargetBuiltins(const Builtin::Info *&Records, + unsigned &NumRecords) const override {} + const char *getClobbers() const override { + return ""; + } + BuiltinVaListKind getBuiltinVaListKind() const override { + return TargetInfo::VoidPtrBuiltinVaList; + } + void getGCCRegNames(const char * const *&Names, + unsigned &NumNames) const override { + Names = nullptr; + NumNames = 0; + } + bool validateAsmConstraint(const char *&Name, + TargetInfo::ConstraintInfo &info) const override { + return true; + } + void getGCCRegAliases(const GCCRegAlias *&Aliases, + unsigned &NumAliases) const override { + Aliases = nullptr; + NumAliases = 0; + } +}; + class MipsTargetInfoBase : public TargetInfo { virtual void setDescriptionString() = 0; @@ -6894,6 +6948,10 @@ static TargetInfo *AllocateTarget(const llvm::Triple &Triple) { return new ARMbeTargetInfo(Triple); } + case llvm::Triple::bpfeb: + case llvm::Triple::bpfel: + return new BPFTargetInfo(Triple); + case llvm::Triple::msp430: return new MSP430TargetInfo(Triple); |