From owner-svn-src-projects@FreeBSD.ORG Fri Jun 10 02:07:22 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id E8286106564A; Fri, 10 Jun 2011 02:07:21 +0000 (UTC) (envelope-from marcel@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id CEDBE8FC0C; Fri, 10 Jun 2011 02:07:21 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p5A27LYr004877; Fri, 10 Jun 2011 02:07:21 GMT (envelope-from marcel@svn.freebsd.org) Received: (from marcel@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p5A27LHQ004875; Fri, 10 Jun 2011 02:07:21 GMT (envelope-from marcel@svn.freebsd.org) Message-Id: <201106100207.p5A27LHQ004875@svn.freebsd.org> From: Marcel Moolenaar Date: Fri, 10 Jun 2011 02:07:21 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r222910 - projects/llvm-ia64/contrib/llvm/tools/clang/lib/Basic X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 10 Jun 2011 02:07:22 -0000 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(T); + return new IA64TargetInfo(T); + case llvm::Triple::msp430: return new MSP430TargetInfo(T);