101 lines
2.7 KiB
Diff
101 lines
2.7 KiB
Diff
|
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
|
||
|
|