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.
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>