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