diff options
Diffstat (limited to 'lib/Basic')
-rw-r--r-- | lib/Basic/TargetInfo.cpp | 1 | ||||
-rw-r--r-- | lib/Basic/Targets.cpp | 49 | ||||
-rw-r--r-- | lib/Basic/TokenKinds.cpp | 55 |
3 files changed, 52 insertions, 53 deletions
diff --git a/lib/Basic/TargetInfo.cpp b/lib/Basic/TargetInfo.cpp index b6c4df8..a1f97f4 100644 --- a/lib/Basic/TargetInfo.cpp +++ b/lib/Basic/TargetInfo.cpp @@ -44,6 +44,7 @@ TargetInfo::TargetInfo(const std::string &T) : Triple(T) { Char16Type = UnsignedShort; Char32Type = UnsignedInt; Int64Type = SignedLongLong; + SigAtomicType = SignedInt; FloatFormat = &llvm::APFloat::IEEEsingle; DoubleFormat = &llvm::APFloat::IEEEdouble; LongDoubleFormat = &llvm::APFloat::IEEEdouble; diff --git a/lib/Basic/Targets.cpp b/lib/Basic/Targets.cpp index 07c2bb9..e5a4c43 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"); + } } @@ -1492,6 +1533,7 @@ namespace { UIntMaxType = UnsignedLong; IntPtrType = SignedShort; PtrDiffType = SignedInt; + SigAtomicType = SignedLong; FloatWidth = 32; FloatAlign = 32; DoubleWidth = 32; @@ -1559,6 +1601,7 @@ namespace { UIntMaxType = UnsignedLong; IntPtrType = SignedShort; PtrDiffType = SignedInt; + SigAtomicType = SignedLong; DescriptionString = "e-p:16:8:8-i8:8:8-i16:8:8-i32:8:8-n8:16"; } virtual void getTargetDefines(const LangOptions &Opts, @@ -1990,6 +2033,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 +2044,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); diff --git a/lib/Basic/TokenKinds.cpp b/lib/Basic/TokenKinds.cpp index 4afeaf0..8cdc1e3 100644 --- a/lib/Basic/TokenKinds.cpp +++ b/lib/Basic/TokenKinds.cpp @@ -30,59 +30,8 @@ const char *tok::getTokenName(enum TokenKind Kind) { const char *tok::getTokenSimpleSpelling(enum TokenKind Kind) { switch (Kind) { - case tok::l_square: return "["; - case tok::r_square: return "]"; - case tok::l_paren: return "("; - case tok::r_paren: return ")"; - case tok::l_brace: return "{"; - case tok::r_brace: return "}"; - case tok::period: return "."; - case tok::ellipsis: return "..."; - case tok::amp: return "&"; - case tok::ampamp: return "&&"; - case tok::ampequal: return "&="; - case tok::star: return "*"; - case tok::starequal: return "*="; - case tok::plus: return "+"; - case tok::plusplus: return "++"; - case tok::plusequal: return "+="; - case tok::minus: return "-"; - case tok::arrow: return "->"; - case tok::minusminus: return "--"; - case tok::minusequal: return "-="; - case tok::tilde: return "~"; - case tok::exclaim: return "!"; - case tok::exclaimequal: return "!="; - case tok::slash: return "/"; - case tok::slashequal: return "/="; - case tok::percent: return "%"; - case tok::percentequal: return "%="; - case tok::less: return "<"; - case tok::lessless: return "<<"; - case tok::lessequal: return "<="; - case tok::lesslessequal: return "<<="; - case tok::greater: return ">"; - case tok::greatergreater: return ">>"; - case tok::greaterequal: return ">="; - case tok::greatergreaterequal: return ">>="; - case tok::caret: return "^"; - case tok::caretequal: return "^="; - case tok::pipe: return "|"; - case tok::pipepipe: return "||"; - case tok::pipeequal: return "|="; - case tok::question: return "?"; - case tok::colon: return ":"; - case tok::semi: return ";"; - case tok::equal: return "="; - case tok::equalequal: return "=="; - case tok::comma: return ","; - case tok::hash: return "#"; - case tok::hashhash: return "##"; - case tok::hashat: return "#@"; - case tok::periodstar: return ".*"; - case tok::arrowstar: return "->*"; - case tok::coloncolon: return "::"; - case tok::at: return "@"; +#define PUNCTUATOR(X,Y) case X: return Y; +#include "clang/Basic/TokenKinds.def" default: break; } |