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

Reply via email to