diff options
author | Anton Korobeynikov <asl@math.spbu.ru> | 2009-07-16 20:09:57 +0000 |
---|---|---|
committer | Anton Korobeynikov <asl@math.spbu.ru> | 2009-07-16 20:09:57 +0000 |
commit | b5b703b2f7ed8cabc2bc3db0a1f229ef6ab5bdaa (patch) | |
tree | 046242a5ac6ceb0f7ec966ee4e59c9d847a359f3 /clang/lib/Basic | |
parent | e3fb4b65243972788b91f98b66fe4e911e1d9e90 (diff) | |
download | bcm5719-llvm-b5b703b2f7ed8cabc2bc3db0a1f229ef6ab5bdaa.tar.gz bcm5719-llvm-b5b703b2f7ed8cabc2bc3db0a1f229ef6ab5bdaa.zip |
Hook in s390x stuff into clang
llvm-svn: 76099
Diffstat (limited to 'clang/lib/Basic')
-rw-r--r-- | clang/lib/Basic/Targets.cpp | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/clang/lib/Basic/Targets.cpp b/clang/lib/Basic/Targets.cpp index 112e21159c5..7298db45f0b 100644 --- a/clang/lib/Basic/Targets.cpp +++ b/clang/lib/Basic/Targets.cpp @@ -1366,6 +1366,72 @@ namespace { } +namespace { + class SystemZTargetInfo : public TargetInfo { + static const char * const GCCRegNames[]; + public: + SystemZTargetInfo(const std::string& triple) : TargetInfo(triple) { + TLSSupported = false; + IntWidth = IntAlign = 32; + LongWidth = LongLongWidth = LongAlign = LongLongAlign = 64; + PointerWidth = PointerAlign = 64; + DescriptionString = "E-p:64:64:64-i8:8:16-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-f128:128:128-a0:16:16"; + } + virtual void getTargetDefines(const LangOptions &Opts, + std::vector<char> &Defines) const { + Define(Defines, "__s390__"); + Define(Defines, "__s390x__"); + } + virtual void getTargetBuiltins(const Builtin::Info *&Records, + unsigned &NumRecords) const { + // FIXME: Implement. + Records = 0; + NumRecords = 0; + } + virtual const char *getTargetPrefix() const { + return "s390x"; + } + + virtual void getDefaultLangOptions(LangOptions &Opts) { + TargetInfo::getDefaultLangOptions(Opts); + Opts.CharIsSigned = false; + } + + virtual void getGCCRegNames(const char * const *&Names, + unsigned &NumNames) const; + virtual void getGCCRegAliases(const GCCRegAlias *&Aliases, + unsigned &NumAliases) const { + // No aliases. + Aliases = 0; + NumAliases = 0; + } + virtual bool validateAsmConstraint(const char *&Name, + TargetInfo::ConstraintInfo &info) const { + // FIXME: implement + return true; + } + virtual const char *getClobbers() const { + // FIXME: Is this really right? + return ""; + } + virtual const char *getVAListDeclaration() const { + // FIXME: implement + return "typedef char* __builtin_va_list;"; + } + }; + + const char * const SystemZTargetInfo::GCCRegNames[] = { + "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15" + }; + + void SystemZTargetInfo::getGCCRegNames(const char * const *&Names, + unsigned &NumNames) const { + Names = GCCRegNames; + NumNames = llvm::array_lengthof(GCCRegNames); + } +} + //===----------------------------------------------------------------------===// // Driver code //===----------------------------------------------------------------------===// @@ -1439,6 +1505,9 @@ TargetInfo* TargetInfo::CreateTargetInfo(const std::string &T) { if (T.find("msp430-") == 0) return new MSP430TargetInfo(T); + if (T.find("s390x-") == 0) + return new SystemZTargetInfo(T); + if (IsX86(T)) { if (isDarwin) return new DarwinI386TargetInfo(T); |