[wwwdocs] Document Runtime CPU detection builtins

Sriraman Tallam tmsriram@google.com
Sat Aug 11 02:20:00 GMT 2012


Hi,

   I have added a release note for x86 builtins __builtin_cpu_is and
__builtin_cpu_supports. They were checked in to trunk in rev. 186789.
Is this ok to submit?

Thanks,
-Sri.
-------------- next part --------------
Index: changes.html
===================================================================
RCS file: /cvs/gcc/wwwdocs/htdocs/gcc-4.8/changes.html,v
retrieving revision 1.10
diff -u -u -p -r1.10 changes.html
--- changes.html	10 Aug 2012 16:25:46 -0000	1.10
+++ changes.html	11 Aug 2012 02:14:13 -0000
@@ -92,6 +92,69 @@ by this change.</p>
     wrong results.  You must build all
     modules with <code>-mpreferred-stack-boundary=3</code>, including any
     libraries.  This includes the system libraries and startup modules.</li>
+    <li> New builtin functions to detect run-time CPU type and ISA:<br>
+    <ul>
+      <li>Builtin <code>__builtin_cpu_is</code> has been added to detect if
+      the run-time CPU is of a particular type. The builtin returns a postive
+      integer on a match and zero otherwise. The builtin accepts one string
+      literal argument, the CPU name. For example,
+      <code>__builtin_cpu_is("westmere")</code> returns a postive integer if
+      the run-time CPU is an Intel Corei7 Westmere processor.  The following
+      are the CPU names recognized by <code>__builtin_cpu_is:</code>
+      <ul>
+        <li>amd</li>
+        <li>intel</li>
+        <li>atom</li>
+        <li>core2</li>
+        <li>corei7</li>
+        <li>nehalem</li>
+        <li>westmere</li>
+        <li>sandybridge</li>
+        <li>amdfam10h</li>
+        <li>barcelona</li>
+        <li>shanghai</li>
+        <li>istanbul</li>
+        <li>bdver1</li>
+        <li>bdver2</li>
+        <li>btver2</li>
+      </ul></li>
+      <li>Builtin <code>__builtin_cpu_supports</code> has been added to detect
+      if the run-time CPU supports a particular ISA feature.  The builtin
+      returns a postive integer on a match and zero otherwise. The builtin
+      accepts one string literal argument, the ISA feature.
+      For example,  <code>__builtin_cpu_supports("ssse3")</code> returns a
+      positive integer if the run-time CPU supports SSSE3 instructions. The
+      following are the ISA features recognized by
+      <code>__builtin_cpu_supports:</code>
+      <ul>
+        <li>cmov</li>
+        <li>mmx</li>
+        <li>popcnt</li>
+        <li>sse</li>
+        <li>sse2</li>
+        <li>sse3</li>
+        <li>ssse3</li>
+        <li>sse4.1</li>
+        <li>sse4.2</li>
+        <li>avx</li>
+        <li>avx2</li>
+      </ul></li>
+    </ul>
+    <p>Caveat: If the above builtins are called before any constructors are
+    invoked, like during IFUNC initialization, then the CPU detection
+    initialization must be explicity run using this newly provided
+    builtin,  <code>__builtin_cpu_init</code>.  The initialization needs to
+    be done only once.  For example, this is how the invocation would look
+    like inside an IFUNC initializer:</p>
+    <code>
+    static void (*some_ifunc_resolver(void))(void)<br>
+    {<br>
+    &nbsp&nbsp __builtin_cpu_init();<br>
+    &nbsp&nbsp if (__builtin_cpu_is("amdfam10h") ...<br>
+    &nbsp&nbsp if (__builtin_cpu_supports("popcnt") ...<br>
+    }
+    </code>
+    </li>
   </ul>
 
 <h3 id="mips">MIPS</h3>


More information about the Gcc-patches mailing list