[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>
+    __builtin_cpu_init();<br>
+    if (__builtin_cpu_is("amdfam10h") ...<br>
+    if (__builtin_cpu_supports("popcnt") ...<br>
+ }
+ </code>
+ </li>
</ul>
<h3 id="mips">MIPS</h3>
More information about the Gcc-patches
mailing list