diff options
Diffstat (limited to 'lib/Basic/Targets.cpp')
-rw-r--r-- | lib/Basic/Targets.cpp | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/lib/Basic/Targets.cpp b/lib/Basic/Targets.cpp index 07c2bb960b..8a4614acc7 100644 --- a/lib/Basic/Targets.cpp +++ b/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); |