summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'sys-devel/clang/files/cl-patches/0001-Add-r600-TargetInfo.patch')
-rw-r--r--sys-devel/clang/files/cl-patches/0001-Add-r600-TargetInfo.patch100
1 files changed, 100 insertions, 0 deletions
diff --git a/sys-devel/clang/files/cl-patches/0001-Add-r600-TargetInfo.patch b/sys-devel/clang/files/cl-patches/0001-Add-r600-TargetInfo.patch
new file mode 100644
index 000000000000..929b5d37028f
--- /dev/null
+++ b/sys-devel/clang/files/cl-patches/0001-Add-r600-TargetInfo.patch
@@ -0,0 +1,100 @@
+From 70cae83ffd093f183dec07c464db3c0bb6b92c10 Mon Sep 17 00:00:00 2001
+From: Tom Stellard <thomas.stellard@amd.com>
+Date: Fri, 2 Mar 2012 10:54:52 -0500
+Subject: [PATCH 1/3] Add r600 TargetInfo
+
+---
+ lib/Basic/Targets.cpp | 70 +++++++++++++++++++++++++++++++++++++++++++++++++
+ 1 files changed, 70 insertions(+), 0 deletions(-)
+
+diff --git a/lib/Basic/Targets.cpp b/lib/Basic/Targets.cpp
+index 85dfd78..64dc01c 100644
+--- a/lib/Basic/Targets.cpp
++++ b/lib/Basic/Targets.cpp
+@@ -1068,6 +1068,73 @@ namespace {
+ }
+
+ namespace {
++
++class AMDGPUTargetInfo : public TargetInfo {
++public:
++
++ AMDGPUTargetInfo(const std::string& triple) : TargetInfo(triple) { }
++
++ virtual const char * getClobbers() const {
++ return "";
++ }
++
++ virtual void getGCCRegNames(const char * const *&Names,
++ unsigned &numNames) const {
++ Names = NULL;
++ numNames = 0;
++ }
++
++ virtual void getGCCRegAliases(const GCCRegAlias *&Aliases,
++ unsigned &NumAliases) const {
++ Aliases = NULL;
++ NumAliases = 0;
++ }
++
++ virtual bool validateAsmConstraint(const char *&Name,
++ TargetInfo::ConstraintInfo &info) const {
++ return true;
++ }
++
++ virtual void getTargetBuiltins(const Builtin::Info *&Records,
++ unsigned &NumRecords) const {
++ Records = NULL;
++ NumRecords = 0;
++ }
++};
++
++
++static const unsigned R600AddrSpaceMap[] = {
++ 1, // opencl_global
++ 3, // opencl_local
++ 2 // opencl_constant
++};
++
++class R600TargetInfo : public AMDGPUTargetInfo {
++public:
++ R600TargetInfo(const std::string& triple) : AMDGPUTargetInfo(triple) {
++ DescriptionString =
++ "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16"
++ "-i32:32:32-i64:64:64-f32:32:32-f64:64:64-f80:32:32"
++ "-v16:16:16-v24:32:32-v32:32:32-v48:64:64-v64:64:64"
++ "-v96:128:128-v128:128:128-v192:256:256-v256:256:256"
++ "-v512:512:512-v1024:1024:1024-v2048:2048:2048"
++ "-n8:16:32:64";
++ AddrSpaceMap = &R600AddrSpaceMap;
++ }
++
++ virtual void getTargetDefines(const LangOptions &Opts,
++ MacroBuilder &Builder) const {
++ Builder.defineMacro("__R600__");
++ }
++
++ virtual const char * getVAListDeclaration() const {
++ return "";
++ }
++};
++
++} // end anonymous namespace
++
++namespace {
+ // MBlaze abstract base class
+ class MBlazeTargetInfo : public TargetInfo {
+ static const char * const GCCRegNames[];
+@@ -3963,6 +4030,9 @@ static TargetInfo *AllocateTarget(const std::string &T) {
+ case llvm::Triple::mblaze:
+ return new MBlazeTargetInfo(T);
+
++ case llvm::Triple::r600:
++ return new R600TargetInfo(T);
++
+ case llvm::Triple::sparc:
+ switch (os) {
+ case llvm::Triple::Linux:
+--
+1.7.7.6
+