summaryrefslogtreecommitdiffstats
path: root/clang/lib/Basic
diff options
context:
space:
mode:
authorJohn Thompson <John.Thompson.JTSoftware@gmail.com>2009-11-19 17:18:50 +0000
committerJohn Thompson <John.Thompson.JTSoftware@gmail.com>2009-11-19 17:18:50 +0000
commite467e197660f35b22b1add84055c96d77d79db30 (patch)
treeb6fda3cfb4bb485460d169a0bc17b764793586b9 /clang/lib/Basic
parent45959e5556c999a3782ee988870b16c1e85060d9 (diff)
downloadbcm5719-llvm-e467e197660f35b22b1add84055c96d77d79db30.tar.gz
bcm5719-llvm-e467e197660f35b22b1add84055c96d77d79db30.zip
Added preliminary support step for PS3
llvm-svn: 89362
Diffstat (limited to 'clang/lib/Basic')
-rw-r--r--clang/lib/Basic/Targets.cpp47
1 files changed, 47 insertions, 0 deletions
diff --git a/clang/lib/Basic/Targets.cpp b/clang/lib/Basic/Targets.cpp
index 07c2bb960bc..8a4614acc74 100644
--- a/clang/lib/Basic/Targets.cpp
+++ b/clang/lib/Basic/Targets.cpp
@@ -313,6 +313,42 @@ public:
}
};
+// PS3 PPU Target
+template<typename Target>
+class PS3PPUTargetInfo : public OSTargetInfo<Target> {
+protected:
+ virtual void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
+ std::vector<char> &Defs) const {
+ // PS3 PPU defines.
+ Define(Defs, "__PPU__", "1");
+ Define(Defs, "__CELLOS_LV2__", "1");
+ Define(Defs, "__ELF__", "1");
+ }
+public:
+ PS3PPUTargetInfo(const std::string& triple)
+ : OSTargetInfo<Target>(triple) {
+ this->UserLabelPrefix = "";
+ }
+};
+
+// FIXME: Need a real SPU target.
+// PS3 SPU Target
+template<typename Target>
+class PS3SPUTargetInfo : public OSTargetInfo<Target> {
+protected:
+ virtual void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
+ std::vector<char> &Defs) const {
+ // PS3 PPU defines.
+ Define(Defs, "__SPU__", "1");
+ Define(Defs, "__ELF__", "1");
+ }
+public:
+ PS3SPUTargetInfo(const std::string& triple)
+ : OSTargetInfo<Target>(triple) {
+ this->UserLabelPrefix = "";
+ }
+};
+
// AuroraUX target
template<typename Target>
class AuroraUXTargetInfo : public OSTargetInfo<Target> {
@@ -445,6 +481,11 @@ void PPCTargetInfo::getTargetDefines(const LangOptions &Opts,
// FIXME: Should be controlled by command line option.
Define(Defs, "__LONG_DOUBLE_128__");
+
+ if (Opts.AltiVec) {
+ Define(Defs, "__VEC__", "10206");
+ Define(Defs, "__ALTIVEC__", "1");
+ }
}
@@ -1990,6 +2031,8 @@ static TargetInfo *AllocateTarget(const std::string &T) {
case llvm::Triple::ppc64:
if (os == llvm::Triple::Darwin)
return new DarwinTargetInfo<PPC64TargetInfo>(T);
+ else if (os == llvm::Triple::Lv2)
+ return new PS3PPUTargetInfo<PPC64TargetInfo>(T);
return new PPC64TargetInfo(T);
case llvm::Triple::sparc:
@@ -1999,6 +2042,10 @@ static TargetInfo *AllocateTarget(const std::string &T) {
return new SolarisSparcV8TargetInfo(T);
return new SparcV8TargetInfo(T);
+ // FIXME: Need a real SPU target.
+ case llvm::Triple::cellspu:
+ return new PS3SPUTargetInfo<PPC64TargetInfo>(T);
+
case llvm::Triple::systemz:
return new SystemZTargetInfo(T);
OpenPOWER on IntegriCloud