[llvm-commits] [Clang] Clean up and fix X86 CPU features
Jung-uk Kim
jkim at FreeBSD.org
Wed Nov 14 16:09:58 PST 2012
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
[Copied from PR14344 and edited for Sean Silva <silvas at purdue.edu>]
I have an AMD Family 10h processor and I realized that LZCNT and
POPCNT are not enabled by default. Then, I looked at clang's
lib/Basic/Targets.cpp and found it needs some love. :-)
Please see the attached patch.
- - AMD SSE4A capable processors have LZCNT, POPCNT, and SSE3 instructions.
- - AMD Piledriver("bdver2") processors have BMI and FMA instructions.
- - All SSE levels enable MMX by default.
- - All AVX capable processors have AES and PCLMUL instructions.
- - Sync. F16C feature with LLVM's X86.td.
Thanks!
Jung-uk Kim
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.19 (FreeBSD)
Comment: Using GnuPG with Mozilla - http://www.enigmail.net/
iEYEARECAAYFAlCkMtYACgkQmlay1b9qnVOCvQCffcRSkdryJb5YD5v0s7NyFJF+
eQgAoNE/TIapwuTXMQD9mfljX4L8x32g
=RIA0
-----END PGP SIGNATURE-----
-------------- next part --------------
--- Targets.cpp.orig 2012-11-14 18:46:59.000000000 -0500
+++ Targets.cpp 2012-11-14 18:48:36.000000000 -0500
@@ -1854,58 +1854,44 @@
break;
case CK_Pentium3:
case CK_Pentium3M:
- setFeatureEnabled(Features, "mmx", true);
setFeatureEnabled(Features, "sse", true);
break;
case CK_PentiumM:
case CK_Pentium4:
case CK_Pentium4M:
case CK_x86_64:
- setFeatureEnabled(Features, "mmx", true);
setFeatureEnabled(Features, "sse2", true);
break;
case CK_Yonah:
case CK_Prescott:
case CK_Nocona:
- setFeatureEnabled(Features, "mmx", true);
setFeatureEnabled(Features, "sse3", true);
break;
case CK_Core2:
- setFeatureEnabled(Features, "mmx", true);
setFeatureEnabled(Features, "ssse3", true);
break;
case CK_Penryn:
- setFeatureEnabled(Features, "mmx", true);
setFeatureEnabled(Features, "sse4.1", true);
break;
case CK_Atom:
- setFeatureEnabled(Features, "mmx", true);
setFeatureEnabled(Features, "ssse3", true);
break;
case CK_Corei7:
- setFeatureEnabled(Features, "mmx", true);
setFeatureEnabled(Features, "sse4", true);
break;
case CK_Corei7AVX:
- setFeatureEnabled(Features, "mmx", true);
setFeatureEnabled(Features, "avx", true);
- setFeatureEnabled(Features, "aes", true);
- setFeatureEnabled(Features, "pclmul", true);
break;
case CK_CoreAVXi:
- setFeatureEnabled(Features, "mmx", true);
setFeatureEnabled(Features, "avx", true);
- setFeatureEnabled(Features, "aes", true);
- setFeatureEnabled(Features, "pclmul", true);
setFeatureEnabled(Features, "rdrnd", true);
+ setFeatureEnabled(Features, "f16c", true);
break;
case CK_CoreAVX2:
- setFeatureEnabled(Features, "mmx", true);
setFeatureEnabled(Features, "avx2", true);
- setFeatureEnabled(Features, "aes", true);
- setFeatureEnabled(Features, "pclmul", true);
setFeatureEnabled(Features, "lzcnt", true);
setFeatureEnabled(Features, "rdrnd", true);
+ setFeatureEnabled(Features, "f16c", true);
setFeatureEnabled(Features, "bmi", true);
setFeatureEnabled(Features, "bmi2", true);
setFeatureEnabled(Features, "rtm", true);
@@ -1946,7 +1932,6 @@
setFeatureEnabled(Features, "3dnowa", true);
break;
case CK_AMDFAM10:
- setFeatureEnabled(Features, "sse3", true);
setFeatureEnabled(Features, "sse4a", true);
setFeatureEnabled(Features, "3dnowa", true);
break;
@@ -1955,14 +1940,15 @@
setFeatureEnabled(Features, "sse4a", true);
break;
case CK_BDVER1:
+ setFeatureEnabled(Features, "xop", true);
+ break;
case CK_BDVER2:
- setFeatureEnabled(Features, "avx", true);
setFeatureEnabled(Features, "xop", true);
- setFeatureEnabled(Features, "aes", true);
- setFeatureEnabled(Features, "pclmul", true);
+ setFeatureEnabled(Features, "bmi", true);
+ setFeatureEnabled(Features, "fma", true);
+ setFeatureEnabled(Features, "f16c", true);
break;
case CK_C3_2:
- setFeatureEnabled(Features, "mmx", true);
setFeatureEnabled(Features, "sse", true);
break;
}
@@ -2011,28 +1997,33 @@
else if (Name == "avx")
Features["mmx"] = Features["sse"] = Features["sse2"] = Features["sse3"] =
Features["ssse3"] = Features["sse41"] = Features["sse42"] =
- Features["popcnt"] = Features["avx"] = true;
+ Features["popcnt"] = Features["pclmul"] = Features["aes"] =
+ Features["avx"] = true;
else if (Name == "avx2")
Features["mmx"] = Features["sse"] = Features["sse2"] = Features["sse3"] =
Features["ssse3"] = Features["sse41"] = Features["sse42"] =
- Features["popcnt"] = Features["avx"] = Features["avx2"] = true;
+ Features["popcnt"] = Features["pclmul"] = Features["aes"] =
+ Features["avx"] = Features["avx2"] = true;
else if (Name == "fma")
Features["mmx"] = Features["sse"] = Features["sse2"] = Features["sse3"] =
Features["ssse3"] = Features["sse41"] = Features["sse42"] =
- Features["popcnt"] = Features["avx"] = Features["fma"] = true;
+ Features["popcnt"] = Features["pclmul"] = Features["aes"] =
+ Features["avx"] = Features["fma"] = true;
else if (Name == "fma4")
Features["mmx"] = Features["sse"] = Features["sse2"] = Features["sse3"] =
Features["ssse3"] = Features["sse41"] = Features["sse42"] =
- Features["popcnt"] = Features["avx"] = Features["sse4a"] =
+ Features["lzcnt"] = Features["popcnt"] = Features["pclmul"] =
+ Features["aes"] = Features["avx"] = Features["sse4a"] =
Features["fma4"] = true;
else if (Name == "xop")
Features["mmx"] = Features["sse"] = Features["sse2"] = Features["sse3"] =
Features["ssse3"] = Features["sse41"] = Features["sse42"] =
- Features["popcnt"] = Features["avx"] = Features["sse4a"] =
+ Features["lzcnt"] = Features["popcnt"] = Features["pclmul"] =
+ Features["aes"] = Features["avx"] = Features["sse4a"] =
Features["fma4"] = Features["xop"] = true;
else if (Name == "sse4a")
Features["mmx"] = Features["sse"] = Features["sse2"] = Features["sse3"] =
- Features["sse4a"] = true;
+ Features["lzcnt"] = Features["popcnt"] = Features["sse4a"] = true;
else if (Name == "lzcnt")
Features["lzcnt"] = true;
else if (Name == "rdrnd")
More information about the llvm-commits
mailing list