Hi all I've added mips64 SubTarget and stubs support to clang. Please review and checkin.
--Liu
From e8af8cddf29f9d9becdcd1ff660c98c581236bbd Mon Sep 17 00:00:00 2001 From: Jia Liu <[email protected]> Date: Mon, 19 Sep 2011 17:11:03 +0800 Subject: [PATCH] add mips64 target stubs --- lib/Basic/Targets.cpp | 78 ++++++++++++++++++++++++++++++++++++++++++++ lib/CodeGen/TargetInfo.cpp | 2 + lib/Driver/Tools.cpp | 14 ++++++-- 3 files changed, 90 insertions(+), 4 deletions(-) diff --git a/lib/Basic/Targets.cpp b/lib/Basic/Targets.cpp index 48e4d8a..50336a2 100644 --- a/lib/Basic/Targets.cpp +++ b/lib/Basic/Targets.cpp @@ -269,6 +269,8 @@ public: break; case llvm::Triple::mips: case llvm::Triple::mipsel: + case llvm::Triple::mips64: + case llvm::Triple::mips64el: case llvm::Triple::ppc: case llvm::Triple::ppc64: this->MCountName = "_mcount"; @@ -1811,6 +1813,8 @@ public: break; case llvm::Triple::mips: case llvm::Triple::mipsel: + case llvm::Triple::mips64: + case llvm::Triple::mips64el: case llvm::Triple::ppc: case llvm::Triple::ppc64: // this->MCountName = "_mcount"; @@ -2929,6 +2933,52 @@ void MipselTargetInfo::getTargetDefines(const LangOptions &Opts, } // end anonymous namespace. namespace { +class Mips64TargetInfo : public MipsTargetInfo { +public: + Mips64TargetInfo(const std::string& triple) : MipsTargetInfo(triple) { + DescriptionString = "E-p:32:32:32-i1:8:8-i8:8:32-i16:16:32-i32:32:32-" + "i64:64:64-f32:32:32-f64:64:64-v64:64:64-n32"; + } + + virtual void getTargetDefines(const LangOptions &Opts, + MacroBuilder &Builder) const; +}; + +void Mips64TargetInfo::getTargetDefines(const LangOptions &Opts, + MacroBuilder &Builder) const { + DefineStd(Builder, "mips64", Opts); + Builder.defineMacro("_mips64"); + DefineStd(Builder, "MIPSEB", Opts); + Builder.defineMacro("_MIPSEB"); + Builder.defineMacro("__REGISTER_PREFIX__", ""); + getArchDefines(Opts, Builder); +} +} // end anonymous namespace. + +namespace { +class Mips64elTargetInfo : public MipsTargetInfo { +public: + Mips64elTargetInfo(const std::string& triple) : MipsTargetInfo(triple) { + DescriptionString = "e-p:32:32:32-i1:8:8-i8:8:32-i16:16:32-i32:32:32-" + "i64:64:64-f32:32:32-f64:64:64-v64:64:64-n32"; + } + + virtual void getTargetDefines(const LangOptions &Opts, + MacroBuilder &Builder) const; +}; + +void Mips64elTargetInfo::getTargetDefines(const LangOptions &Opts, + MacroBuilder &Builder) const { + DefineStd(Builder, "mips64", Opts); + Builder.defineMacro("_mips64"); + DefineStd(Builder, "MIPSEL", Opts); + Builder.defineMacro("_MIPSEL"); + Builder.defineMacro("__REGISTER_PREFIX__", ""); + getArchDefines(Opts, Builder); +} +} // end anonymous namespace. + +namespace { class PNaClTargetInfo : public TargetInfo { public: PNaClTargetInfo(const std::string& triple) : TargetInfo(triple) { @@ -3072,6 +3122,34 @@ static TargetInfo *AllocateTarget(const std::string &T) { return new MipsTargetInfo(T); } + case llvm::Triple::mips64: + switch (os) { + case llvm::Triple::Linux: + return new LinuxTargetInfo<Mips64TargetInfo>(T); + case llvm::Triple::RTEMS: + return new RTEMSTargetInfo<Mips64TargetInfo>(T); + case llvm::Triple::FreeBSD: + return new FreeBSDTargetInfo<Mips64TargetInfo>(T); + case llvm::Triple::NetBSD: + return new NetBSDTargetInfo<Mips64TargetInfo>(T); + default: + return new MipsTargetInfo(T); + } + + case llvm::Triple::mips64el: + switch (os) { + case llvm::Triple::Linux: + return new LinuxTargetInfo<Mips64elTargetInfo>(T); + case llvm::Triple::RTEMS: + return new RTEMSTargetInfo<Mips64elTargetInfo>(T); + case llvm::Triple::FreeBSD: + return new FreeBSDTargetInfo<Mips64elTargetInfo>(T); + case llvm::Triple::NetBSD: + return new NetBSDTargetInfo<Mips64elTargetInfo>(T); + default: + return new MipsTargetInfo(T); + } + case llvm::Triple::le32: switch (os) { case llvm::Triple::NativeClient: diff --git a/lib/CodeGen/TargetInfo.cpp b/lib/CodeGen/TargetInfo.cpp index 31234aa..2459ca6 100644 --- a/lib/CodeGen/TargetInfo.cpp +++ b/lib/CodeGen/TargetInfo.cpp @@ -3169,6 +3169,8 @@ const TargetCodeGenInfo &CodeGenModule::getTargetCodeGenInfo() { case llvm::Triple::mips: case llvm::Triple::mipsel: + case llvm::Triple::mips64: + case llvm::Triple::mips64el: return *(TheTargetCodeGenInfo = new MIPSTargetCodeGenInfo(Types)); case llvm::Triple::arm: diff --git a/lib/Driver/Tools.cpp b/lib/Driver/Tools.cpp index 4d4abff..9bce3ef 100644 --- a/lib/Driver/Tools.cpp +++ b/lib/Driver/Tools.cpp @@ -1351,6 +1351,8 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, case llvm::Triple::mips: case llvm::Triple::mipsel: + case llvm::Triple::mips64: + case llvm::Triple::mips64el: AddMIPSTargetArgs(Args, CmdArgs); break; @@ -3796,9 +3798,11 @@ void freebsd::Assemble::ConstructJob(Compilation &C, const JobAction &JA, CmdArgs.push_back("-a32"); // Set byte order explicitly - if (getToolChain().getArchName() == "mips") + if ((getToolChain().getArchName() == "mips") || + (getToolChain().getArchName() == "mips64")) CmdArgs.push_back("-EB"); - else if (getToolChain().getArchName() == "mipsel") + else if ((getToolChain().getArchName() == "mipsel") || + (getToolChain().getArchName() == "mips64el")) CmdArgs.push_back("-EL"); Args.AddAllArgValues(CmdArgs, options::OPT_Wa_COMMA, @@ -3985,9 +3989,11 @@ void netbsd::Assemble::ConstructJob(Compilation &C, const JobAction &JA, // Set byte order explicitly - if (getToolChain().getArchName() == "mips") + if ((getToolChain().getArchName() == "mips") || + (getToolChain().getArchName() == "mips64")) CmdArgs.push_back("-EB"); - else if (getToolChain().getArchName() == "mipsel") + else if ((getToolChain().getArchName() == "mipsel") || + (getToolChain().getArchName() == "mips64el")) CmdArgs.push_back("-EL"); Args.AddAllArgValues(CmdArgs, options::OPT_Wa_COMMA, -- 1.7.4.1
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
