hc
2023-05-26 a23f51ed7a39e452c1037343a84d7db1ca2c5bd7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<!-- Copyright (C) 1988-2016 Free Software Foundation, Inc.
 
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with the
Invariant Sections being "Funding Free Software", the Front-Cover
Texts being (a) (see below), and with the Back-Cover Texts being (b)
(see below).  A copy of the license is included in the section entitled
"GNU Free Documentation License".
 
(a) The FSF's Front-Cover Text is:
 
A GNU Manual
 
(b) The FSF's Back-Cover Text is:
 
You have freedom to copy and modify this GNU Manual, like GNU
     software.  Copies published by the Free Software Foundation raise
     funds for GNU development. -->
<!-- Created by GNU Texinfo 5.2, http://www.gnu.org/software/texinfo/ -->
<head>
<title>Using the GNU Compiler Collection (GCC): AArch64 Function Attributes</title>
 
<meta name="description" content="Using the GNU Compiler Collection (GCC): AArch64 Function Attributes">
<meta name="keywords" content="Using the GNU Compiler Collection (GCC): AArch64 Function Attributes">
<meta name="resource-type" content="document">
<meta name="distribution" content="global">
<meta name="Generator" content="makeinfo">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link href="index.html#Top" rel="start" title="Top">
<link href="Option-Index.html#Option-Index" rel="index" title="Option Index">
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="Function-Attributes.html#Function-Attributes" rel="up" title="Function Attributes">
<link href="ARC-Function-Attributes.html#ARC-Function-Attributes" rel="next" title="ARC Function Attributes">
<link href="Common-Function-Attributes.html#Common-Function-Attributes" rel="prev" title="Common Function Attributes">
<style type="text/css">
<!--
a.summary-letter {text-decoration: none}
blockquote.smallquotation {font-size: smaller}
div.display {margin-left: 3.2em}
div.example {margin-left: 3.2em}
div.indentedblock {margin-left: 3.2em}
div.lisp {margin-left: 3.2em}
div.smalldisplay {margin-left: 3.2em}
div.smallexample {margin-left: 3.2em}
div.smallindentedblock {margin-left: 3.2em; font-size: smaller}
div.smalllisp {margin-left: 3.2em}
kbd {font-style:oblique}
pre.display {font-family: inherit}
pre.format {font-family: inherit}
pre.menu-comment {font-family: serif}
pre.menu-preformatted {font-family: serif}
pre.smalldisplay {font-family: inherit; font-size: smaller}
pre.smallexample {font-size: smaller}
pre.smallformat {font-family: inherit; font-size: smaller}
pre.smalllisp {font-size: smaller}
span.nocodebreak {white-space:nowrap}
span.nolinebreak {white-space:nowrap}
span.roman {font-family:serif; font-weight:normal}
span.sansserif {font-family:sans-serif; font-weight:normal}
ul.no-bullet {list-style: none}
-->
</style>
 
 
</head>
 
<body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000">
<a name="AArch64-Function-Attributes"></a>
<div class="header">
<p>
Next: <a href="ARC-Function-Attributes.html#ARC-Function-Attributes" accesskey="n" rel="next">ARC Function Attributes</a>, Previous: <a href="Common-Function-Attributes.html#Common-Function-Attributes" accesskey="p" rel="prev">Common Function Attributes</a>, Up: <a href="Function-Attributes.html#Function-Attributes" accesskey="u" rel="up">Function Attributes</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Option-Index.html#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
<a name="AArch64-Function-Attributes-1"></a>
<h4 class="subsection">6.31.2 AArch64 Function Attributes</h4>
 
<p>The following target-specific function attributes are available for the
AArch64 target.  For the most part, these options mirror the behavior of
similar command-line options (see <a href="AArch64-Options.html#AArch64-Options">AArch64 Options</a>), but on a
per-function basis.
</p>
<dl compact="compact">
<dt><code>general-regs-only</code></dt>
<dd><a name="index-general_002dregs_002donly-function-attribute_002c-AArch64"></a>
<p>Indicates that no floating-point or Advanced SIMD registers should be
used when generating code for this function.  If the function explicitly
uses floating-point code, then the compiler gives an error.  This is
the same behavior as that of the command-line option
<samp>-mgeneral-regs-only</samp>.
</p>
</dd>
<dt><code>fix-cortex-a53-835769</code></dt>
<dd><a name="index-fix_002dcortex_002da53_002d835769-function-attribute_002c-AArch64"></a>
<p>Indicates that the workaround for the Cortex-A53 erratum 835769 should be
applied to this function.  To explicitly disable the workaround for this
function specify the negated form: <code>no-fix-cortex-a53-835769</code>.
This corresponds to the behavior of the command line options
<samp>-mfix-cortex-a53-835769</samp> and <samp>-mno-fix-cortex-a53-835769</samp>.
</p>
</dd>
<dt><code>cmodel=</code></dt>
<dd><a name="index-cmodel_003d-function-attribute_002c-AArch64"></a>
<p>Indicates that code should be generated for a particular code model for
this function.  The behavior and permissible arguments are the same as
for the command line option <samp>-mcmodel=</samp>.
</p>
</dd>
<dt><code>strict-align</code></dt>
<dd><a name="index-strict_002dalign-function-attribute_002c-AArch64"></a>
<p>Indicates that the compiler should not assume that unaligned memory references
are handled by the system.  The behavior is the same as for the command-line
option <samp>-mstrict-align</samp>.
</p>
</dd>
<dt><code>omit-leaf-frame-pointer</code></dt>
<dd><a name="index-omit_002dleaf_002dframe_002dpointer-function-attribute_002c-AArch64"></a>
<p>Indicates that the frame pointer should be omitted for a leaf function call.
To keep the frame pointer, the inverse attribute
<code>no-omit-leaf-frame-pointer</code> can be specified.  These attributes have
the same behavior as the command-line options <samp>-momit-leaf-frame-pointer</samp>
and <samp>-mno-omit-leaf-frame-pointer</samp>.
</p>
</dd>
<dt><code>tls-dialect=</code></dt>
<dd><a name="index-tls_002ddialect_003d-function-attribute_002c-AArch64"></a>
<p>Specifies the TLS dialect to use for this function.  The behavior and
permissible arguments are the same as for the command-line option
<samp>-mtls-dialect=</samp>.
</p>
</dd>
<dt><code>arch=</code></dt>
<dd><a name="index-arch_003d-function-attribute_002c-AArch64"></a>
<p>Specifies the architecture version and architectural extensions to use
for this function.  The behavior and permissible arguments are the same as
for the <samp>-march=</samp> command-line option.
</p>
</dd>
<dt><code>tune=</code></dt>
<dd><a name="index-tune_003d-function-attribute_002c-AArch64"></a>
<p>Specifies the core for which to tune the performance of this function.
The behavior and permissible arguments are the same as for the <samp>-mtune=</samp>
command-line option.
</p>
</dd>
<dt><code>cpu=</code></dt>
<dd><a name="index-cpu_003d-function-attribute_002c-AArch64"></a>
<p>Specifies the core for which to tune the performance of this function and also
whose architectural features to use.  The behavior and valid arguments are the
same as for the <samp>-mcpu=</samp> command-line option.
</p>
</dd>
</dl>
 
<p>The above target attributes can be specified as follows:
</p>
<div class="smallexample">
<pre class="smallexample">__attribute__((target(&quot;<var>attr-string</var>&quot;)))
int
f (int a)
{
  return a + 5;
}
</pre></div>
 
<p>where <code><var>attr-string</var></code> is one of the attribute strings specified above.
</p>
<p>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:
</p>
<div class="smallexample">
<pre class="smallexample">__attribute__((target(&quot;+crc+nocrypto&quot;)))
int
foo (int a)
{
  return a + 5;
}
</pre></div>
 
<p>In this example <code>target(&quot;+crc+nocrypto&quot;)</code> enables the <code>crc</code>
extension and disables the <code>crypto</code> extension for the function <code>foo</code>
without modifying an existing <samp>-march=</samp> or <samp>-mcpu</samp> option.
</p>
<p>Multiple target function attributes can be specified by separating them with
a comma.  For example:
</p><div class="smallexample">
<pre class="smallexample">__attribute__((target(&quot;arch=armv8-a+crc+crypto,tune=cortex-a53&quot;)))
int
foo (int a)
{
  return a + 5;
}
</pre></div>
 
<p>is valid and compiles function <code>foo</code> for ARMv8-A with <code>crc</code>
and <code>crypto</code> extensions and tunes it for <code>cortex-a53</code>.
</p>
<a name="Inlining-rules"></a>
<h4 class="subsubsection">6.31.2.1 Inlining rules</h4>
<p>Specifying target attributes on individual functions or performing link-time
optimization across translation units compiled with different target options
can affect function inlining rules:
</p>
<p>In particular, a caller function can inline a callee function only if the
architectural features available to the callee are a subset of the features
available to the caller.
For example: A function <code>foo</code> compiled with <samp>-march=armv8-a+crc</samp>,
or tagged with the equivalent <code>arch=armv8-a+crc</code> attribute,
can inline a function <code>bar</code> compiled with <samp>-march=armv8-a+nocrc</samp>
because the all the architectural features that function <code>bar</code> requires
are available to function <code>foo</code>.  Conversely, function <code>bar</code> cannot
inline function <code>foo</code>.
</p>
<p>Additionally inlining a function compiled with <samp>-mstrict-align</samp> into a
function compiled without <code>-mstrict-align</code> is not allowed.
However, inlining a function compiled without <samp>-mstrict-align</samp> into a
function compiled with <samp>-mstrict-align</samp> is allowed.
</p>
<p>Note that CPU tuning options and attributes such as the <samp>-mcpu=</samp>,
<samp>-mtune=</samp> do not inhibit inlining unless the CPU specified by the
<samp>-mcpu=</samp> option or the <code>cpu=</code> attribute conflicts with the
architectural feature rules specified above.
</p>
<hr>
<div class="header">
<p>
Next: <a href="ARC-Function-Attributes.html#ARC-Function-Attributes" accesskey="n" rel="next">ARC Function Attributes</a>, Previous: <a href="Common-Function-Attributes.html#Common-Function-Attributes" accesskey="p" rel="prev">Common Function Attributes</a>, Up: <a href="Function-Attributes.html#Function-Attributes" accesskey="u" rel="up">Function Attributes</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Option-Index.html#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
 
 
 
</body>
</html>