]>
Commit | Line | Data |
---|---|---|
250d07de | 1 | @c Copyright (C) 2009-2021 Free Software Foundation, Inc. |
a06ea964 NC |
2 | @c Contributed by ARM Ltd. |
3 | @c This is part of the GAS manual. | |
4 | @c For copying conditions, see the file as.texinfo. | |
5 | @c man end | |
6 | ||
7 | @ifset GENERIC | |
8 | @page | |
9 | @node AArch64-Dependent | |
10 | @chapter AArch64 Dependent Features | |
11 | @end ifset | |
12 | ||
13 | @ifclear GENERIC | |
14 | @node Machine Dependencies | |
15 | @chapter AArch64 Dependent Features | |
16 | @end ifclear | |
17 | ||
18 | @cindex AArch64 support | |
a06ea964 NC |
19 | @menu |
20 | * AArch64 Options:: Options | |
df359aa7 | 21 | * AArch64 Extensions:: Extensions |
a06ea964 NC |
22 | * AArch64 Syntax:: Syntax |
23 | * AArch64 Floating Point:: Floating Point | |
24 | * AArch64 Directives:: AArch64 Machine Directives | |
25 | * AArch64 Opcodes:: Opcodes | |
26 | * AArch64 Mapping Symbols:: Mapping Symbols | |
27 | @end menu | |
28 | ||
29 | @node AArch64 Options | |
30 | @section Options | |
31 | @cindex AArch64 options (none) | |
32 | @cindex options for AArch64 (none) | |
33 | ||
34 | @c man begin OPTIONS | |
35 | @table @gcctabopt | |
36 | ||
a05a5b64 | 37 | @cindex @option{-EB} command-line option, AArch64 |
a06ea964 NC |
38 | @item -EB |
39 | This option specifies that the output generated by the assembler should | |
40 | be marked as being encoded for a big-endian processor. | |
41 | ||
a05a5b64 | 42 | @cindex @option{-EL} command-line option, AArch64 |
a06ea964 NC |
43 | @item -EL |
44 | This option specifies that the output generated by the assembler should | |
45 | be marked as being encoded for a little-endian processor. | |
46 | ||
a05a5b64 | 47 | @cindex @option{-mabi=} command-line option, AArch64 |
69091a2c YZ |
48 | @item -mabi=@var{abi} |
49 | Specify which ABI the source code uses. The recognized arguments | |
50 | are: @code{ilp32} and @code{lp64}, which decides the generated object | |
51 | file in ELF32 and ELF64 format respectively. The default is @code{lp64}. | |
52 | ||
a05a5b64 | 53 | @cindex @option{-mcpu=} command-line option, AArch64 |
df359aa7 RE |
54 | @item -mcpu=@var{processor}[+@var{extension}@dots{}] |
55 | This option specifies the target processor. The assembler will issue an error | |
56 | message if an attempt is made to assemble an instruction which will not execute | |
57 | on the target processor. The following processor names are recognized: | |
546053ac | 58 | @code{cortex-a34}, |
9c352f1c | 59 | @code{cortex-a35}, |
df359aa7 | 60 | @code{cortex-a53}, |
1e292627 | 61 | @code{cortex-a55}, |
df359aa7 | 62 | @code{cortex-a57}, |
546053ac DZ |
63 | @code{cortex-a65}, |
64 | @code{cortex-a65ae}, | |
2abdd192 | 65 | @code{cortex-a72}, |
1aa70332 | 66 | @code{cortex-a73}, |
1e292627 | 67 | @code{cortex-a75}, |
c2a0f929 | 68 | @code{cortex-a76}, |
546053ac DZ |
69 | @code{cortex-a76ae}, |
70 | @code{cortex-a77}, | |
77718e5b PW |
71 | @code{cortex-a78}, |
72 | @code{cortex-a78ae}, | |
a3a02fe8 | 73 | @code{cortex-a78c}, |
c8fcc360 | 74 | @code{ares}, |
2412d878 | 75 | @code{exynos-m1}, |
2fe9c2a0 | 76 | @code{falkor}, |
38e75bf2 | 77 | @code{neoverse-n1}, |
990e5268 | 78 | @code{neoverse-n2}, |
516dbc44 | 79 | @code{neoverse-e1}, |
9e980ddc | 80 | @code{neoverse-v1}, |
6b21c2bf | 81 | @code{qdf24xx}, |
7605d944 | 82 | @code{saphira}, |
55fbd992 | 83 | @code{thunderx}, |
0a8be2fe | 84 | @code{vulcan}, |
0a9ce86d | 85 | @code{xgene1} |
f1363b0f | 86 | @code{xgene2}, |
47e1f9de | 87 | @code{cortex-r82}, |
df359aa7 | 88 | and |
47e1f9de | 89 | @code{cortex-x1}. |
df359aa7 RE |
90 | The special name @code{all} may be used to allow the assembler to accept |
91 | instructions valid for any supported processor, including all optional | |
92 | extensions. | |
93 | ||
94 | In addition to the basic instruction set, the assembler can be told to | |
95 | accept, or restrict, various extension mnemonics that extend the | |
96 | processor. @xref{AArch64 Extensions}. | |
97 | ||
98 | If some implementations of a particular processor can have an | |
99 | extension, then then those extensions are automatically enabled. | |
100 | Consequently, you will not normally have to specify any additional | |
101 | extensions. | |
102 | ||
a05a5b64 | 103 | @cindex @option{-march=} command-line option, AArch64 |
df359aa7 RE |
104 | @item -march=@var{architecture}[+@var{extension}@dots{}] |
105 | This option specifies the target architecture. The assembler will | |
106 | issue an error message if an attempt is made to assemble an | |
107 | instruction which will not execute on the target architecture. The | |
acb787b0 | 108 | following architecture names are recognized: @code{armv8-a}, |
70d56181 | 109 | @code{armv8.1-a}, @code{armv8.2-a}, @code{armv8.3-a}, @code{armv8.4-a} |
8926e54e | 110 | @code{armv8.5-a}, @code{armv8.6-a}, @code{armv8.7-a}, and @code{armv8-r}. |
df359aa7 RE |
111 | |
112 | If both @option{-mcpu} and @option{-march} are specified, the | |
113 | assembler will use the setting for @option{-mcpu}. If neither are | |
114 | specified, the assembler will default to @option{-mcpu=all}. | |
115 | ||
116 | The architecture option can be extended with the same instruction set | |
117 | extension options as the @option{-mcpu} option. Unlike | |
118 | @option{-mcpu}, extensions are not always enabled by default, | |
119 | @xref{AArch64 Extensions}. | |
120 | ||
a05a5b64 | 121 | @cindex @code{-mverbose-error} command-line option, AArch64 |
a52e6fd3 YZ |
122 | @item -mverbose-error |
123 | This option enables verbose error messages for AArch64 gas. This option | |
124 | is enabled by default. | |
125 | ||
a05a5b64 | 126 | @cindex @code{-mno-verbose-error} command-line option, AArch64 |
a52e6fd3 YZ |
127 | @item -mno-verbose-error |
128 | This option disables verbose error messages in AArch64 gas. | |
129 | ||
a06ea964 NC |
130 | @end table |
131 | @c man end | |
132 | ||
df359aa7 RE |
133 | @node AArch64 Extensions |
134 | @section Architecture Extensions | |
135 | ||
136 | The table below lists the permitted architecture extensions that are | |
137 | supported by the assembler and the conditions under which they are | |
138 | automatically enabled. | |
139 | ||
140 | Multiple extensions may be specified, separated by a @code{+}. | |
141 | Extension mnemonics may also be removed from those the assembler | |
142 | accepts. This is done by prepending @code{no} to the option that adds | |
143 | the extension. Extensions that are removed must be listed after all | |
144 | extensions that have been added. | |
145 | ||
146 | Enabling an extension that requires other extensions will | |
147 | automatically cause those extensions to be enabled. Similarly, | |
148 | disabling an extension that is required by other extensions will | |
149 | automatically cause those extensions to be disabled. | |
150 | ||
151 | @multitable @columnfractions .12 .17 .17 .54 | |
152 | @headitem Extension @tab Minimum Architecture @tab Enabled by default | |
153 | @tab Description | |
8382113f MM |
154 | @item @code{i8mm} @tab ARMv8.2-A @tab ARMv8.6-A or later |
155 | @tab Enable Int8 Matrix Multiply extension. | |
156 | @item @code{f32mm} @tab ARMv8.2-A @tab No | |
157 | @tab Enable F32 Matrix Multiply extension. | |
158 | @item @code{f64mm} @tab ARMv8.2-A @tab No | |
159 | @tab Enable F64 Matrix Multiply extension. | |
df678013 MM |
160 | @item @code{bf16} @tab ARMv8.2-A @tab ARMv8.6-A or later |
161 | @tab Enable BFloat16 extension. | |
f482d304 RS |
162 | @item @code{compnum} @tab ARMv8.2-A @tab ARMv8.3-A or later |
163 | @tab Enable the complex number SIMD extensions. This implies | |
164 | @code{fp16} and @code{simd}. | |
af117b3c | 165 | @item @code{crc} @tab ARMv8-A @tab ARMv8.1-A or later |
df359aa7 RE |
166 | @tab Enable CRC instructions. |
167 | @item @code{crypto} @tab ARMv8-A @tab No | |
68ffd936 TC |
168 | @tab Enable cryptographic extensions. This implies @code{fp}, @code{simd}, @code{aes} and @code{sha2}. |
169 | @item @code{aes} @tab ARMv8-A @tab No | |
170 | @tab Enable the AES cryptographic extensions. This implies @code{fp} and @code{simd}. | |
171 | @item @code{sha2} @tab ARMv8-A @tab No | |
172 | @tab Enable the SHA2 cryptographic extensions. This implies @code{fp} and @code{simd}. | |
173 | @item @code{sha3} @tab ARMv8.2-A @tab No | |
174 | @tab Enable the ARMv8.2-A SHA2 and SHA3 cryptographic extensions. This implies @code{fp}, @code{simd} and @code{sha2}. | |
175 | @item @code{sm4} @tab ARMv8.2-A @tab No | |
176 | @tab Enable the ARMv8.2-A SM3 and SM4 cryptographic extensions. This implies @code{fp} and @code{simd}. | |
df359aa7 RE |
177 | @item @code{fp} @tab ARMv8-A @tab ARMv8-A or later |
178 | @tab Enable floating-point extensions. | |
87018195 MW |
179 | @item @code{fp16} @tab ARMv8.2-A @tab ARMv8.2-A or later |
180 | @tab Enable ARMv8.2 16-bit floating-point support. This implies | |
181 | @code{fp}. | |
b607cde1 JG |
182 | @item @code{lor} @tab ARMv8-A @tab ARMv8.1-A or later |
183 | @tab Enable Limited Ordering Regions extensions. | |
184 | @item @code{lse} @tab ARMv8-A @tab ARMv8.1-A or later | |
185 | @tab Enable Large System extensions. | |
186 | @item @code{pan} @tab ARMv8-A @tab ARMv8.1-A or later | |
187 | @tab Enable Privileged Access Never support. | |
73af8ed6 MW |
188 | @item @code{profile} @tab ARMv8.2-A @tab No |
189 | @tab Enable statistical profiling extensions. | |
50cc854c MW |
190 | @item @code{ras} @tab ARMv8-A @tab ARMv8.2-A or later |
191 | @tab Enable the Reliability, Availability and Serviceability | |
192 | extension. | |
01cca2f9 SN |
193 | @item @code{rcpc} @tab ARMv8.2-A @tab ARMv8.3-A or later |
194 | @tab Enable the weak release consistency extension. | |
b607cde1 JG |
195 | @item @code{rdma} @tab ARMv8-A @tab ARMv8.1-A or later |
196 | @tab Enable ARMv8.1 Advanced SIMD extensions. This implies @code{simd}. | |
197 | @item @code{simd} @tab ARMv8-A @tab ARMv8-A or later | |
198 | @tab Enable Advanced SIMD extensions. This implies @code{fp}. | |
582e12bf RS |
199 | @item @code{sve} @tab ARMv8.2-A @tab No |
200 | @tab Enable the Scalable Vector Extensions. This implies @code{fp16}, | |
201 | @code{simd} and @code{compnum}. | |
68ffd936 | 202 | @item @code{dotprod} @tab ARMv8.2-A @tab ARMv8.4-A or later |
65a55fbb | 203 | @tab Enable the Dot Product extension. This implies @code{simd}. |
d0f7791c TC |
204 | @item @code{fp16fml} @tab ARMv8.2-A @tab ARMv8.4-A or later |
205 | @tab Enable ARMv8.2 16-bit floating-point multiplication variant support. | |
206 | This implies @code{fp16}. | |
68dfbb92 SD |
207 | @item @code{sb} @tab ARMv8-A @tab ARMv8.5-A or later |
208 | @tab Enable the speculation barrier instruction sb. | |
2ac435d4 SD |
209 | @item @code{predres} @tab ARMv8-A @tab ARMv8.5-A or later |
210 | @tab Enable the Execution and Data and Prediction instructions. | |
af4bcb4c SD |
211 | @item @code{rng} @tab ARMv8.5-A @tab No |
212 | @tab Enable ARMv8.5-A random number instructions. | |
104fefee SD |
213 | @item @code{ssbs} @tab ARMv8-A @tab ARMv8.5-A or later |
214 | @tab Enable Speculative Store Bypassing Safe state read and write. | |
73b605ec SD |
215 | @item @code{memtag} @tab ARMv8.5-A @tab No |
216 | @tab Enable ARMv8.5-A Memory Tagging Extensions. | |
b83b4b13 SD |
217 | @item @code{tme} @tab ARMv8-A @tab No |
218 | @tab Enable Transactional Memory Extensions. | |
7ce2460a MM |
219 | @item @code{sve2} @tab ARMv8-A @tab No |
220 | @tab Enable the SVE2 Extension. | |
ccbdd22f | 221 | @item @code{sve2-bitperm} @tab ARMv8-A @tab No |
7ce2460a MM |
222 | @tab Enable SVE2 BITPERM Extension. |
223 | @item @code{sve2-sm4} @tab ARMv8-A @tab No | |
224 | @tab Enable SVE2 SM4 Extension. | |
225 | @item @code{sve2-aes} @tab ARMv8-A @tab No | |
41be57ca MM |
226 | @tab Enable SVE2 AES Extension. This also enables the .Q->.B form of the |
227 | @code{pmullt} and @code{pmullb} instructions. | |
7ce2460a MM |
228 | @item @code{sve2-sha3} @tab ARMv8-A @tab No |
229 | @tab Enable SVE2 SHA3 Extension. | |
e64441b1 PW |
230 | @item @code{flagm} @tab ARMv8-A @tab ARMv8.4-A or later |
231 | @tab Enable Flag Manipulation instructions. | |
232 | @item @code{csre} @tab ARMv8-A @tab No | |
233 | @tab Enable Call Stack Recorder Extension. | |
3f4ff088 | 234 | @item @code{ls64} @tab ARMv8.6-A @tab ARMv8.7-A or later |
e64441b1 | 235 | @tab Enable 64 Byte Loads/Stores. |
3f4ff088 PW |
236 | @item @code{pauth} @tab ARMv8-A @tab No |
237 | @tab Enable Pointer Authentication. | |
df359aa7 RE |
238 | @end multitable |
239 | ||
a06ea964 NC |
240 | @node AArch64 Syntax |
241 | @section Syntax | |
242 | @menu | |
243 | * AArch64-Chars:: Special Characters | |
244 | * AArch64-Regs:: Register Names | |
245 | * AArch64-Relocations:: Relocations | |
246 | @end menu | |
247 | ||
248 | @node AArch64-Chars | |
249 | @subsection Special Characters | |
250 | ||
251 | @cindex line comment character, AArch64 | |
252 | @cindex AArch64 line comment character | |
253 | The presence of a @samp{//} on a line indicates the start of a comment | |
254 | that extends to the end of the current line. If a @samp{#} appears as | |
255 | the first character of a line, the whole line is treated as a comment. | |
256 | ||
257 | @cindex line separator, AArch64 | |
258 | @cindex statement separator, AArch64 | |
259 | @cindex AArch64 line separator | |
260 | The @samp{;} character can be used instead of a newline to separate | |
261 | statements. | |
262 | ||
263 | @cindex immediate character, AArch64 | |
264 | @cindex AArch64 immediate character | |
265 | The @samp{#} can be optionally used to indicate immediate operands. | |
266 | ||
267 | @node AArch64-Regs | |
268 | @subsection Register Names | |
269 | ||
270 | @cindex AArch64 register names | |
271 | @cindex register names, AArch64 | |
272 | Please refer to the section @samp{4.4 Register Names} of | |
273 | @samp{ARMv8 Instruction Set Overview}, which is available at | |
274 | @uref{http://infocenter.arm.com}. | |
275 | ||
276 | @node AArch64-Relocations | |
277 | @subsection Relocations | |
278 | ||
279 | @cindex relocations, AArch64 | |
280 | @cindex AArch64 relocations | |
281 | @cindex MOVN, MOVZ and MOVK group relocations, AArch64 | |
282 | Relocations for @samp{MOVZ} and @samp{MOVK} instructions can be generated | |
283 | by prefixing the label with @samp{#:abs_g2:} etc. | |
284 | For example to load the 48-bit absolute address of @var{foo} into x0: | |
285 | ||
286 | @smallexample | |
287 | movz x0, #:abs_g2:foo // bits 32-47, overflow check | |
288 | movk x0, #:abs_g1_nc:foo // bits 16-31, no overflow check | |
289 | movk x0, #:abs_g0_nc:foo // bits 0-15, no overflow check | |
290 | @end smallexample | |
291 | ||
292 | @cindex ADRP, ADD, LDR/STR group relocations, AArch64 | |
293 | Relocations for @samp{ADRP}, and @samp{ADD}, @samp{LDR} or @samp{STR} | |
294 | instructions can be generated by prefixing the label with | |
34fd659b | 295 | @samp{:pg_hi21:} and @samp{#:lo12:} respectively. |
a06ea964 | 296 | |
34bca508 | 297 | For example to use 33-bit (+/-4GB) pc-relative addressing to |
a06ea964 NC |
298 | load the address of @var{foo} into x0: |
299 | ||
300 | @smallexample | |
34fd659b | 301 | adrp x0, :pg_hi21:foo |
a06ea964 NC |
302 | add x0, x0, #:lo12:foo |
303 | @end smallexample | |
304 | ||
305 | Or to load the value of @var{foo} into x0: | |
306 | ||
307 | @smallexample | |
34fd659b | 308 | adrp x0, :pg_hi21:foo |
a06ea964 NC |
309 | ldr x0, [x0, #:lo12:foo] |
310 | @end smallexample | |
311 | ||
34fd659b | 312 | Note that @samp{:pg_hi21:} is optional. |
a06ea964 NC |
313 | |
314 | @smallexample | |
315 | adrp x0, foo | |
316 | @end smallexample | |
317 | ||
318 | is equivalent to | |
319 | ||
320 | @smallexample | |
34fd659b | 321 | adrp x0, :pg_hi21:foo |
a06ea964 NC |
322 | @end smallexample |
323 | ||
324 | @node AArch64 Floating Point | |
325 | @section Floating Point | |
326 | ||
327 | @cindex floating point, AArch64 (@sc{ieee}) | |
328 | @cindex AArch64 floating point (@sc{ieee}) | |
329 | The AArch64 architecture uses @sc{ieee} floating-point numbers. | |
330 | ||
331 | @node AArch64 Directives | |
332 | @section AArch64 Machine Directives | |
333 | ||
334 | @cindex machine directives, AArch64 | |
335 | @cindex AArch64 machine directives | |
336 | @table @code | |
337 | ||
338 | @c AAAAAAAAAAAAAAAAAAAAAAAAA | |
8e02d7f5 JW |
339 | |
340 | @cindex @code{.arch} directive, AArch64 | |
341 | @item .arch @var{name} | |
342 | Select the target architecture. Valid values for @var{name} are the same as | |
a05a5b64 | 343 | for the @option{-march} command-line option. |
8e02d7f5 JW |
344 | |
345 | Specifying @code{.arch} clears any previously selected architecture | |
346 | extensions. | |
347 | ||
348 | @cindex @code{.arch_extension} directive, AArch64 | |
349 | @item .arch_extension @var{name} | |
350 | Add or remove an architecture extension to the target architecture. Valid | |
351 | values for @var{name} are the same as those accepted as architectural | |
a05a5b64 | 352 | extensions by the @option{-mcpu} command-line option. |
8e02d7f5 JW |
353 | |
354 | @code{.arch_extension} may be used multiple times to add or remove extensions | |
355 | incrementally to the architecture being compiled for. | |
356 | ||
a06ea964 NC |
357 | @c BBBBBBBBBBBBBBBBBBBBBBBBBB |
358 | ||
359 | @cindex @code{.bss} directive, AArch64 | |
360 | @item .bss | |
361 | This directive switches to the @code{.bss} section. | |
362 | ||
363 | @c CCCCCCCCCCCCCCCCCCCCCCCCCC | |
30fab421 NC |
364 | |
365 | @cindex @code{.cpu} directive, AArch64 | |
366 | @item .cpu @var{name} | |
367 | Set the target processor. Valid values for @var{name} are the same as | |
a05a5b64 | 368 | those accepted by the @option{-mcpu=} command-line option. |
30fab421 | 369 | |
a06ea964 | 370 | @c DDDDDDDDDDDDDDDDDDDDDDDDDD |
30fab421 NC |
371 | |
372 | @cindex @code{.dword} directive, AArch64 | |
373 | @item .dword @var{expressions} | |
374 | The @code{.dword} directive produces 64 bit values. | |
375 | ||
a06ea964 | 376 | @c EEEEEEEEEEEEEEEEEEEEEEEEEE |
30fab421 NC |
377 | |
378 | @cindex @code{.even} directive, AArch64 | |
379 | @item .even | |
380 | The @code{.even} directive aligns the output on the next even byte | |
381 | boundary. | |
382 | ||
a06ea964 | 383 | @c FFFFFFFFFFFFFFFFFFFFFFFFFF |
b20d3859 BW |
384 | |
385 | @cindex @code{.float16} directive, AArch64 | |
386 | @item .float16 @var{value [,...,value_n]} | |
387 | Place the half precision floating point representation of one or more | |
388 | floating-point values into the current section. | |
389 | The format used to encode the floating point values is always the | |
390 | IEEE 754-2008 half precision floating point format. | |
391 | ||
a06ea964 NC |
392 | @c GGGGGGGGGGGGGGGGGGGGGGGGGG |
393 | @c HHHHHHHHHHHHHHHHHHHHHHHHHH | |
394 | @c IIIIIIIIIIIIIIIIIIIIIIIIII | |
30fab421 NC |
395 | |
396 | @cindex @code{.inst} directive, AArch64 | |
397 | @item .inst @var{expressions} | |
398 | Inserts the expressions into the output as if they were instructions, | |
399 | rather than data. | |
400 | ||
a06ea964 NC |
401 | @c JJJJJJJJJJJJJJJJJJJJJJJJJJ |
402 | @c KKKKKKKKKKKKKKKKKKKKKKKKKK | |
403 | @c LLLLLLLLLLLLLLLLLLLLLLLLLL | |
404 | ||
405 | @cindex @code{.ltorg} directive, AArch64 | |
406 | @item .ltorg | |
407 | This directive causes the current contents of the literal pool to be | |
408 | dumped into the current section (which is assumed to be the .text | |
409 | section) at the current location (aligned to a word boundary). | |
df359aa7 | 410 | GAS maintains a separate literal pool for each section and each |
a06ea964 NC |
411 | sub-section. The @code{.ltorg} directive will only affect the literal |
412 | pool of the current section and sub-section. At the end of assembly | |
413 | all remaining, un-empty literal pools will automatically be dumped. | |
414 | ||
df359aa7 | 415 | Note - older versions of GAS would dump the current literal |
a06ea964 NC |
416 | pool any time a section change occurred. This is no longer done, since |
417 | it prevents accurate control of the placement of literal pools. | |
418 | ||
419 | @c MMMMMMMMMMMMMMMMMMMMMMMMMM | |
420 | ||
421 | @c NNNNNNNNNNNNNNNNNNNNNNNNNN | |
422 | @c OOOOOOOOOOOOOOOOOOOOOOOOOO | |
423 | ||
424 | @c PPPPPPPPPPPPPPPPPPPPPPPPPP | |
425 | ||
426 | @cindex @code{.pool} directive, AArch64 | |
427 | @item .pool | |
428 | This is a synonym for .ltorg. | |
429 | ||
430 | @c QQQQQQQQQQQQQQQQQQQQQQQQQQ | |
431 | @c RRRRRRRRRRRRRRRRRRRRRRRRRR | |
432 | ||
433 | @cindex @code{.req} directive, AArch64 | |
434 | @item @var{name} .req @var{register name} | |
435 | This creates an alias for @var{register name} called @var{name}. For | |
436 | example: | |
437 | ||
438 | @smallexample | |
439 | foo .req w0 | |
440 | @end smallexample | |
441 | ||
8975f864 RR |
442 | ip0, ip1, lr and fp are automatically defined to |
443 | alias to X16, X17, X30 and X29 respectively. | |
444 | ||
a06ea964 NC |
445 | @c SSSSSSSSSSSSSSSSSSSSSSSSSS |
446 | ||
447 | @c TTTTTTTTTTTTTTTTTTTTTTTTTT | |
448 | ||
30fab421 NC |
449 | @cindex @code{.tlsdescadd} directive, AArch64 |
450 | @item @code{.tlsdescadd} | |
451 | Emits a TLSDESC_ADD reloc on the next instruction. | |
452 | ||
453 | @cindex @code{.tlsdesccall} directive, AArch64 | |
454 | @item @code{.tlsdesccall} | |
455 | Emits a TLSDESC_CALL reloc on the next instruction. | |
456 | ||
457 | @cindex @code{.tlsdescldr} directive, AArch64 | |
458 | @item @code{.tlsdescldr} | |
459 | Emits a TLSDESC_LDR reloc on the next instruction. | |
460 | ||
a06ea964 NC |
461 | @c UUUUUUUUUUUUUUUUUUUUUUUUUU |
462 | ||
463 | @cindex @code{.unreq} directive, AArch64 | |
464 | @item .unreq @var{alias-name} | |
465 | This undefines a register alias which was previously defined using the | |
466 | @code{req} directive. For example: | |
467 | ||
468 | @smallexample | |
469 | foo .req w0 | |
470 | .unreq foo | |
471 | @end smallexample | |
472 | ||
473 | An error occurs if the name is undefined. Note - this pseudo op can | |
474 | be used to delete builtin in register name aliases (eg 'w0'). This | |
475 | should only be done if it is really necessary. | |
476 | ||
477 | @c VVVVVVVVVVVVVVVVVVVVVVVVVV | |
478 | ||
f166ae01 SN |
479 | @cindex @code{.variant_pcs} directive, AArch64 |
480 | @item .variant_pcs @var{symbol} | |
481 | This directive marks @var{symbol} referencing a function that may | |
482 | follow a variant procedure call standard with different register | |
483 | usage convention from the base procedure call standard. | |
484 | ||
a06ea964 NC |
485 | @c WWWWWWWWWWWWWWWWWWWWWWWWWW |
486 | @c XXXXXXXXXXXXXXXXXXXXXXXXXX | |
a06ea964 | 487 | |
edc66de9 | 488 | @cindex @code{.xword} directive, AArch64 |
30fab421 NC |
489 | @item .xword @var{expressions} |
490 | The @code{.xword} directive produces 64 bit values. This is the same | |
491 | as the @code{.dword} directive. | |
492 | ||
493 | @c YYYYYYYYYYYYYYYYYYYYYYYYYY | |
494 | @c ZZZZZZZZZZZZZZZZZZZZZZZZZZ | |
edc66de9 | 495 | |
3a67e1a6 ST |
496 | @cindex @code{.cfi_b_key_frame} directive, AArch64 |
497 | @item @code{.cfi_b_key_frame} | |
498 | The @code{.cfi_b_key_frame} directive inserts a 'B' character into the CIE | |
499 | corresponding to the current frame's FDE, meaning that its return address has | |
500 | been signed with the B-key. If two frames are signed with differing keys then | |
501 | they will not share the same CIE. This information is intended to be used by | |
502 | the stack unwinder in order to properly authenticate return addresses. | |
503 | ||
a06ea964 NC |
504 | @end table |
505 | ||
506 | @node AArch64 Opcodes | |
507 | @section Opcodes | |
508 | ||
509 | @cindex AArch64 opcodes | |
510 | @cindex opcodes for AArch64 | |
df359aa7 | 511 | GAS implements all the standard AArch64 opcodes. It also |
a06ea964 | 512 | implements several pseudo opcodes, including several synthetic load |
34bca508 | 513 | instructions. |
a06ea964 NC |
514 | |
515 | @table @code | |
516 | ||
517 | @cindex @code{LDR reg,=<expr>} pseudo op, AArch64 | |
518 | @item LDR = | |
519 | @smallexample | |
520 | ldr <register> , =<expression> | |
521 | @end smallexample | |
522 | ||
523 | The constant expression will be placed into the nearest literal pool (if it not | |
524 | already there) and a PC-relative LDR instruction will be generated. | |
525 | ||
526 | @end table | |
527 | ||
528 | For more information on the AArch64 instruction set and assembly language | |
529 | notation, see @samp{ARMv8 Instruction Set Overview} available at | |
530 | @uref{http://infocenter.arm.com}. | |
531 | ||
532 | ||
533 | @node AArch64 Mapping Symbols | |
534 | @section Mapping Symbols | |
535 | ||
536 | The AArch64 ELF specification requires that special symbols be inserted | |
537 | into object files to mark certain features: | |
538 | ||
539 | @table @code | |
540 | ||
541 | @cindex @code{$x} | |
542 | @item $x | |
543 | At the start of a region of code containing AArch64 instructions. | |
544 | ||
545 | @cindex @code{$d} | |
546 | @item $d | |
547 | At the start of a region of data. | |
548 | ||
549 | @end table |