[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