diff options
author | Craig Topper <craig.topper@gmail.com> | 2015-10-16 06:22:36 +0000 |
---|---|---|
committer | Craig Topper <craig.topper@gmail.com> | 2015-10-16 06:22:36 +0000 |
commit | e33f51fa915bdf8d057c72190339c8cd5def7a16 (patch) | |
tree | dbddfadc222d104e6b22aad86f6d5ce5fd53b689 /clang/lib/Basic/Targets.cpp | |
parent | 09b659857232912bdbf70a14efd7d4ab5b1f9da8 (diff) | |
download | bcm5719-llvm-e33f51fa915bdf8d057c72190339c8cd5def7a16.tar.gz bcm5719-llvm-e33f51fa915bdf8d057c72190339c8cd5def7a16.zip |
[X86] Add fxsr feature name for fxsave/fxrestore builtins.
llvm-svn: 250498
Diffstat (limited to 'clang/lib/Basic/Targets.cpp')
-rw-r--r-- | clang/lib/Basic/Targets.cpp | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/clang/lib/Basic/Targets.cpp b/clang/lib/Basic/Targets.cpp index dcf2271a4a1..b38b4e0c6cd 100644 --- a/clang/lib/Basic/Targets.cpp +++ b/clang/lib/Basic/Targets.cpp @@ -2094,6 +2094,7 @@ class X86TargetInfo : public TargetInfo { bool HasAVX512VL = false; bool HasSHA = false; bool HasCX16 = false; + bool HasFXSR = false; bool HasXSAVE = false; bool HasXSAVEOPT = false; bool HasXSAVEC = false; @@ -2557,26 +2558,31 @@ bool X86TargetInfo::initFeatureMap( case CK_Pentium3M: case CK_C3_2: setFeatureEnabledImpl(Features, "sse", true); + setFeatureEnabledImpl(Features, "fxsr", true); break; case CK_PentiumM: case CK_Pentium4: case CK_Pentium4M: case CK_x86_64: setFeatureEnabledImpl(Features, "sse2", true); + setFeatureEnabledImpl(Features, "fxsr", true); break; case CK_Yonah: case CK_Prescott: case CK_Nocona: setFeatureEnabledImpl(Features, "sse3", true); + setFeatureEnabledImpl(Features, "fxsr", true); setFeatureEnabledImpl(Features, "cx16", true); break; case CK_Core2: case CK_Bonnell: setFeatureEnabledImpl(Features, "ssse3", true); + setFeatureEnabledImpl(Features, "fxsr", true); setFeatureEnabledImpl(Features, "cx16", true); break; case CK_Penryn: setFeatureEnabledImpl(Features, "sse4.1", true); + setFeatureEnabledImpl(Features, "fxsr", true); setFeatureEnabledImpl(Features, "cx16", true); break; case CK_Skylake: @@ -2617,6 +2623,7 @@ bool X86TargetInfo::initFeatureMap( // FALLTHROUGH case CK_Nehalem: setFeatureEnabledImpl(Features, "sse4.2", true); + setFeatureEnabledImpl(Features, "fxsr", true); setFeatureEnabledImpl(Features, "cx16", true); break; case CK_KNL: @@ -2624,6 +2631,7 @@ bool X86TargetInfo::initFeatureMap( setFeatureEnabledImpl(Features, "avx512cd", true); setFeatureEnabledImpl(Features, "avx512er", true); setFeatureEnabledImpl(Features, "avx512pf", true); + setFeatureEnabledImpl(Features, "fxsr", true); setFeatureEnabledImpl(Features, "rdseed", true); setFeatureEnabledImpl(Features, "adx", true); setFeatureEnabledImpl(Features, "lzcnt", true); @@ -2656,6 +2664,7 @@ bool X86TargetInfo::initFeatureMap( case CK_AthlonMP: setFeatureEnabledImpl(Features, "sse", true); setFeatureEnabledImpl(Features, "3dnowa", true); + setFeatureEnabledImpl(Features, "fxsr", true); break; case CK_K8: case CK_Opteron: @@ -2663,6 +2672,7 @@ bool X86TargetInfo::initFeatureMap( case CK_AthlonFX: setFeatureEnabledImpl(Features, "sse2", true); setFeatureEnabledImpl(Features, "3dnowa", true); + setFeatureEnabledImpl(Features, "fxsr", true); break; case CK_AMDFAM10: setFeatureEnabledImpl(Features, "sse4a", true); @@ -2674,6 +2684,7 @@ bool X86TargetInfo::initFeatureMap( case CK_Athlon64SSE3: setFeatureEnabledImpl(Features, "sse3", true); setFeatureEnabledImpl(Features, "3dnowa", true); + setFeatureEnabledImpl(Features, "fxsr", true); break; case CK_BTVER2: setFeatureEnabledImpl(Features, "avx", true); @@ -2690,6 +2701,7 @@ bool X86TargetInfo::initFeatureMap( setFeatureEnabledImpl(Features, "popcnt", true); setFeatureEnabledImpl(Features, "prfchw", true); setFeatureEnabledImpl(Features, "cx16", true); + setFeatureEnabledImpl(Features, "fxsr", true); setFeatureEnabledImpl(Features, "xsave", true); break; case CK_BDVER4: @@ -2714,6 +2726,7 @@ bool X86TargetInfo::initFeatureMap( setFeatureEnabledImpl(Features, "pclmul", true); setFeatureEnabledImpl(Features, "prfchw", true); setFeatureEnabledImpl(Features, "cx16", true); + setFeatureEnabledImpl(Features, "fxsr", true); setFeatureEnabledImpl(Features, "xsave", true); break; } @@ -2995,6 +3008,8 @@ bool X86TargetInfo::handleTargetFeatures(std::vector<std::string> &Features, HasSHA = true; } else if (Feature == "+cx16") { HasCX16 = true; + } else if (Feature == "+fxsr") { + HasFXSR = true; } else if (Feature == "+xsave") { HasXSAVE = true; } else if (Feature == "+xsaveopt") { @@ -3295,6 +3310,8 @@ void X86TargetInfo::getTargetDefines(const LangOptions &Opts, if (HasSHA) Builder.defineMacro("__SHA__"); + if (HasFXSR) + Builder.defineMacro("__FXSR__"); if (HasXSAVE) Builder.defineMacro("__XSAVE__"); if (HasXSAVEOPT) @@ -3393,6 +3410,7 @@ bool X86TargetInfo::hasFeature(StringRef Feature) const { .Case("fma", HasFMA) .Case("fma4", XOPLevel >= FMA4) .Case("fsgsbase", HasFSGSBASE) + .Case("fxsr", HasFXSR) .Case("lzcnt", HasLZCNT) .Case("mm3dnow", MMX3DNowLevel >= AMD3DNow) .Case("mm3dnowa", MMX3DNowLevel >= AMD3DNowAthlon) |