On 11/06/2017 09:50 AM, Tamar Christina wrote:
Hi All,

This patch adds support for the setting the architecture and extensions
using the target GCC pragma.

#pragma GCC target ("arch=armv8-a+crc")

It also supports a short hand where an extension is just added to the
current architecture without changing it

#pragma GCC target ("+crc")

Popping and pushing options also correctly reconfigure the global state
as expected.

Also supported is using the __attribute__((target("..."))) attributes
on functions to change the architecture or extension.

Regtested on arm-none-eabi and no regressions.

Ok for trunk?

diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi
index 
8aa443f87fb700f7a723d736bdbd53b6c839656d..18d0ffa6820326ce7badf33001b1c6a467c95883
 100644
--- a/gcc/doc/extend.texi
+++ b/gcc/doc/extend.texi
@@ -3858,6 +3858,42 @@ Specifies the fpu for which to tune the performance of 
this function.
 The behavior and permissible arguments are the same as for the @option{-mfpu=}
 command-line option.
+@item arch=
+@cindex @code{arch=} function attribute, ARM
+Specifies the architecture version and architectural extensions to use
+for this function.  The behavior and permissible arguments are the same as
+for the @option{-march=} command-line option.
+
+The above target attributes can be specified as follows:
+
+@smallexample
+__attribute__((target("@var{attr-string}")))
+int
+f (int a)
+@{
+  return a + 5;
+@}
+@end smallexample
+
+where @code{@var{attr-string}} is one of the attribute strings.

This example doesn't illustrate anything useful, and in fact just confuses things by introducing @var{attr-string}. Please use an actual valid attribute here, something like "arch=armv8-a" or whatever.

Also, either kill the sentence fragment after the example, or be careful to add @noindent before it to indicate it's a continuation of the previous paragraph.

+
+Additionally, the architectural extension string may be specified on its
+own.  This can be used to turn on and off particular architectural extensions
+without having to specify a particular architecture version or core.  Example:
+
+@smallexample
+__attribute__((target("+crc+nocrypto")))
+int
+foo (int a)
+@{
+  return a + 5;
+@}
+@end smallexample
+
+In this example @code{target("+crc+nocrypto")} enables the @code{crc}
+extension and disables the @code{crypto} extension for the function @code{foo}
+without modifying an existing @option{-march=} or @option{-mcpu} option.
+
 @end table
@end table

-Sandra

Reply via email to