]> granicus.if.org Git - clang/commitdiff
Add a little endian variant of TCE.
authorPekka Jaaskelainen <pekka.jaaskelainen@tut.fi>
Wed, 16 Nov 2016 15:22:31 +0000 (15:22 +0000)
committerPekka Jaaskelainen <pekka.jaaskelainen@tut.fi>
Wed, 16 Nov 2016 15:22:31 +0000 (15:22 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@287112 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Basic/Targets.cpp
lib/CodeGen/TargetInfo.cpp
lib/Driver/Driver.cpp
lib/Driver/ToolChains.cpp
lib/Driver/ToolChains.h

index d5efce49195665f0a006d60b82c3dd22a0ce56a3..9a74cdf6f2ba1e3d8dcb0cce47ddb71a6b4ce138 100644 (file)
@@ -7210,8 +7210,11 @@ public:
     FloatFormat = &llvm::APFloat::IEEEsingle;
     DoubleFormat = &llvm::APFloat::IEEEsingle;
     LongDoubleFormat = &llvm::APFloat::IEEEsingle;
-    resetDataLayout("E-p:32:32-i8:8:32-i16:16:32-i64:32"
-                    "-f64:32-v64:32-v128:32-a:0:32-n32");
+    resetDataLayout("E-p:32:32:32-i1:8:8-i8:8:32-"
+                    "i16:16:32-i32:32:32-i64:32:32-"
+                    "f32:32:32-f64:32:32-v64:32:32-"
+                    "v128:32:32-v256:32:32-v512:32:32-"
+                    "v1024:32:32-a0:0:32-n32");
     AddrSpaceMap = &TCEOpenCLAddrSpaceMap;
     UseAddrSpaceMapMangling = true;
   }
@@ -7239,6 +7242,31 @@ public:
   }
 };
 
+class TCELETargetInfo : public TCETargetInfo {
+public:
+  TCELETargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
+      : TCETargetInfo(Triple, Opts) {
+    BigEndian = false;
+
+    resetDataLayout("e-p:32:32:32-i1:8:8-i8:8:32-"
+                    "i16:16:32-i32:32:32-i64:32:32-"
+                    "f32:32:32-f64:32:32-v64:32:32-"
+                    "v128:32:32-v256:32:32-v512:32:32-"
+                    "v1024:32:32-a0:0:32-n32");
+
+  }
+
+  virtual void getTargetDefines(const LangOptions &Opts,
+                                MacroBuilder &Builder) const {
+    DefineStd(Builder, "tcele", Opts);
+    Builder.defineMacro("__TCE__");
+    Builder.defineMacro("__TCE_V1__");
+    Builder.defineMacro("__TCELE__");
+    Builder.defineMacro("__TCELE_V1__");
+  }
+
+};
+
 class BPFTargetInfo : public TargetInfo {
 public:
   BPFTargetInfo(const llvm::Triple &Triple, const TargetOptions &)
@@ -8627,6 +8655,9 @@ static TargetInfo *AllocateTarget(const llvm::Triple &Triple,
   case llvm::Triple::tce:
     return new TCETargetInfo(Triple, Opts);
 
+  case llvm::Triple::tcele:
+    return new TCELETargetInfo(Triple, Opts);
+
   case llvm::Triple::x86:
     if (Triple.isOSDarwin())
       return new DarwinI386TargetInfo(Triple, Opts);
index 050d4fc6ad0d6cbaf061e06adb539525dda24b29..329401d5c466c4c58dfbda6edf8796e5218cef95 100644 (file)
@@ -8251,6 +8251,7 @@ const TargetCodeGenInfo &CodeGenModule::getTargetCodeGenInfo() {
   }
 
   case llvm::Triple::tce:
+  case llvm::Triple::tcele:
     return SetCGInfo(new TCETargetCodeGenInfo(Types));
 
   case llvm::Triple::x86: {
index bdf1c08b7304ccfcc497315d64f192edadd9cf4d..2e76623f674e039101a668dddbaa711ce78e4b32 100644 (file)
@@ -3618,6 +3618,9 @@ const ToolChain &Driver::getToolChain(const ArgList &Args,
       case llvm::Triple::tce:
         TC = new toolchains::TCEToolChain(*this, Target, Args);
         break;
+      case llvm::Triple::tcele:
+        TC = new toolchains::TCELEToolChain(*this, Target, Args);
+        break;
       case llvm::Triple::hexagon:
         TC = new toolchains::HexagonToolChain(*this, Target, Args);
         break;
index 7ea7d417a9346c3c3fa904fef920850fc1f16060..38a474b4cf5a747dcf3c15b28945b89be0a623a5 100644 (file)
@@ -3435,6 +3435,13 @@ bool TCEToolChain::isPIEDefault() const { return false; }
 
 bool TCEToolChain::isPICDefaultForced() const { return false; }
 
+TCELEToolChain::TCELEToolChain(const Driver &D, const llvm::Triple& Triple,
+                               const ArgList &Args)
+  : TCEToolChain(D, Triple, Args) {
+}
+
+TCELEToolChain::~TCELEToolChain() {}
+
 // CloudABI - CloudABI tool chain which can call ld(1) directly.
 
 CloudABI::CloudABI(const Driver &D, const llvm::Triple &Triple,
index 44844fadd32b7e833b9af66ce090835cfd48b416..2ccdb7a04bac774fb95494fb13b4f329debd1093 100644 (file)
@@ -1074,6 +1074,14 @@ public:
   bool isPICDefaultForced() const override;
 };
 
+/// Toolchain for little endian TCE cores.
+class LLVM_LIBRARY_VISIBILITY TCELEToolChain : public TCEToolChain {
+public:
+  TCELEToolChain(const Driver &D, const llvm::Triple &Triple,
+                 const llvm::opt::ArgList &Args);
+  ~TCELEToolChain() override;
+};
+
 class LLVM_LIBRARY_VISIBILITY MSVCToolChain : public ToolChain {
 public:
   MSVCToolChain(const Driver &D, const llvm::Triple &Triple,