diff options
author | Chris Lattner <sabre@nondot.org> | 2009-03-02 22:40:39 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2009-03-02 22:40:39 +0000 |
commit | 96e43578fc47e31ae005f4b933c617d988682e5c (patch) | |
tree | 1e290855cff6c515c4b8079cf5cacdb1abd53308 /clang/lib/Basic/Targets.cpp | |
parent | ecd49037eccea1cce4fef6b695937e9074e570ca (diff) | |
download | bcm5719-llvm-96e43578fc47e31ae005f4b933c617d988682e5c.tar.gz bcm5719-llvm-96e43578fc47e31ae005f4b933c617d988682e5c.zip |
Add plumbing to support programatically defining __SSE2__ and friends,
even though we still hard code sse2 for now. No support for 3dnow or sse4a,
but someone could add that if they desired.
llvm-svn: 65886
Diffstat (limited to 'clang/lib/Basic/Targets.cpp')
-rw-r--r-- | clang/lib/Basic/Targets.cpp | 33 |
1 files changed, 27 insertions, 6 deletions
diff --git a/clang/lib/Basic/Targets.cpp b/clang/lib/Basic/Targets.cpp index b983f26bb34..bb9c861a170 100644 --- a/clang/lib/Basic/Targets.cpp +++ b/clang/lib/Basic/Targets.cpp @@ -415,8 +415,12 @@ const TargetInfo::GCCRegAlias GCCRegAliases[] = { // X86 target abstract base class; x86-32 and x86-64 are very close, so // most of the implementation can be shared. class X86TargetInfo : public TargetInfo { + enum X86SSEEnum { + NoMMXSSE, MMX, SSE1, SSE2, SSE3, SSSE3, SSE41, SSE42 + } SSELevel; public: - X86TargetInfo(const std::string& triple) : TargetInfo(triple) { + X86TargetInfo(const std::string& triple) + : TargetInfo(triple), SSELevel(SSE2) { LongDoubleFormat = &llvm::APFloat::x87DoubleExtended; } virtual void getTargetBuiltins(const Builtin::Info *&Records, @@ -485,12 +489,29 @@ void X86TargetInfo::getTargetDefines(std::vector<char> &Defs) const { Define(Defs, "__nocona"); Define(Defs, "__nocona__"); Define(Defs, "__tune_nocona__"); - Define(Defs, "__SSE2_MATH__"); - Define(Defs, "__SSE2__"); - Define(Defs, "__SSE_MATH__"); - Define(Defs, "__SSE__"); - Define(Defs, "__MMX__"); Define(Defs, "__REGISTER_PREFIX__", ""); + + // Each case falls through to the previous one here. + switch (SSELevel) { + case SSE42: + Define(Defs, "__SSE4_2__"); + case SSE41: + Define(Defs, "__SSE4_1__"); + case SSSE3: + Define(Defs, "__SSSE3__"); + case SSE3: + Define(Defs, "__SSE3__"); + case SSE2: + Define(Defs, "__SSE2__"); + Define(Defs, "__SSE2_MATH__"); // -mfp-math=sse always implied. + case SSE1: + Define(Defs, "__SSE__"); + Define(Defs, "__SSE_MATH__"); // -mfp-math=sse always implied. + case MMX: + Define(Defs, "__MMX__"); + case NoMMXSSE: + break; + } } |