Date: Fri, 10 Jun 2011 02:07:21 +0000 (UTC) From: Marcel Moolenaar <marcel@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r222910 - projects/llvm-ia64/contrib/llvm/tools/clang/lib/Basic Message-ID: <201106100207.p5A27LHQ004875@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: marcel Date: Fri Jun 10 02:07:21 2011 New Revision: 222910 URL: http://svn.freebsd.org/changeset/base/222910 Log: Teach Clang about ia64. Should be about right for as much as it is complete. Modified: projects/llvm-ia64/contrib/llvm/tools/clang/lib/Basic/Targets.cpp Modified: projects/llvm-ia64/contrib/llvm/tools/clang/lib/Basic/Targets.cpp ============================================================================== --- projects/llvm-ia64/contrib/llvm/tools/clang/lib/Basic/Targets.cpp Fri Jun 10 01:15:23 2011 (r222909) +++ projects/llvm-ia64/contrib/llvm/tools/clang/lib/Basic/Targets.cpp Fri Jun 10 02:07:21 2011 (r222910) @@ -244,6 +244,7 @@ public: case llvm::Triple::x86_64: this->MCountName = ".mcount"; break; + case llvm::Triple::ia64: case llvm::Triple::mips: case llvm::Triple::mipsel: case llvm::Triple::ppc: @@ -2459,6 +2460,73 @@ namespace { } namespace { + class IA64TargetInfo : public TargetInfo { + static const char * const GCCRegNames[]; + public: + IA64TargetInfo(const std::string& triple) : TargetInfo(triple) { + NoAsmVariants = false; // XXX what does this mean + PointerWidth = PointerAlign = 64; + LongWidth = LongAlign = 64; + LongDoubleWidth = LongDoubleAlign = 128; + Int64Type = SignedLong; + SigAtomicType = SignedLong; + LongDoubleFormat = &llvm::APFloat::IEEEdouble; + DescriptionString = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-" + "i64:64:64-f32:32:32-f64:64:64-f80:128:128-f128:128:128-" + "n8:16:32:64"; + } + virtual void getTargetDefines(const LangOptions &Opts, + MacroBuilder &Builder) const { + Builder.defineMacro("__ia64"); + Builder.defineMacro("__ia64__"); + Builder.defineMacro("__itanium__"); + Builder.defineMacro("_LP64"); + Builder.defineMacro("__LP64__"); + } + virtual void getTargetBuiltins(const Builtin::Info *&Records, + unsigned &NumRecords) const { + Records = 0; + NumRecords = 0; + } + 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 { + // No target constraints for now. + return false; + } + 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 IA64TargetInfo::GCCRegNames[] = { + "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23", + "r24", "r25", "r26", "r27", "r28", "r29", "r30", "r31" + }; + + void IA64TargetInfo::getGCCRegNames(const char * const *&Names, + unsigned &NumNames) const { + Names = GCCRegNames; + NumNames = llvm::array_lengthof(GCCRegNames); + } +} + + +namespace { // LLVM and Clang cannot be used directly to output native binaries for // target, but is used to compile C code to llvm bitcode with correct @@ -2710,6 +2778,11 @@ static TargetInfo *AllocateTarget(const case llvm::Triple::bfin: return new BlackfinTargetInfo(T); + case llvm::Triple::ia64: + if (os == llvm::Triple::FreeBSD) + return new FreeBSDTargetInfo<IA64TargetInfo>(T); + return new IA64TargetInfo(T); + case llvm::Triple::msp430: return new MSP430TargetInfo(T);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201106100207.p5A27LHQ004875>