[AArch64] Add dot product support for AArch64 to binutils
[deliverable/binutils-gdb.git] / gas / doc / c-aarch64.texi
CommitLineData
2571583a 1@c Copyright (C) 2009-2017 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
df359aa7 37@cindex @option{-EB} command line option, AArch64
a06ea964
NC
38@item -EB
39This option specifies that the output generated by the assembler should
40be marked as being encoded for a big-endian processor.
41
df359aa7 42@cindex @option{-EL} command line option, AArch64
a06ea964
NC
43@item -EL
44This option specifies that the output generated by the assembler should
45be marked as being encoded for a little-endian processor.
46
df359aa7 47@cindex @option{-mabi=} command line option, AArch64
69091a2c
YZ
48@item -mabi=@var{abi}
49Specify which ABI the source code uses. The recognized arguments
50are: @code{ilp32} and @code{lp64}, which decides the generated object
51file in ELF32 and ELF64 format respectively. The default is @code{lp64}.
52
df359aa7
RE
53@cindex @option{-mcpu=} command line option, AArch64
54@item -mcpu=@var{processor}[+@var{extension}@dots{}]
55This option specifies the target processor. The assembler will issue an error
56message if an attempt is made to assemble an instruction which will not execute
57on the target processor. The following processor names are recognized:
9c352f1c 58@code{cortex-a35},
df359aa7 59@code{cortex-a53},
1e292627 60@code{cortex-a55},
df359aa7 61@code{cortex-a57},
2abdd192 62@code{cortex-a72},
1aa70332 63@code{cortex-a73},
1e292627 64@code{cortex-a75},
2412d878 65@code{exynos-m1},
2fe9c2a0 66@code{falkor},
6b21c2bf 67@code{qdf24xx},
55fbd992 68@code{thunderx},
0a8be2fe 69@code{vulcan},
0a9ce86d 70@code{xgene1}
df359aa7 71and
0a9ce86d 72@code{xgene2}.
df359aa7
RE
73The special name @code{all} may be used to allow the assembler to accept
74instructions valid for any supported processor, including all optional
75extensions.
76
77In addition to the basic instruction set, the assembler can be told to
78accept, or restrict, various extension mnemonics that extend the
79processor. @xref{AArch64 Extensions}.
80
81If some implementations of a particular processor can have an
82extension, then then those extensions are automatically enabled.
83Consequently, you will not normally have to specify any additional
84extensions.
85
86@cindex @option{-march=} command line option, AArch64
87@item -march=@var{architecture}[+@var{extension}@dots{}]
88This option specifies the target architecture. The assembler will
89issue an error message if an attempt is made to assemble an
90instruction which will not execute on the target architecture. The
acb787b0 91following architecture names are recognized: @code{armv8-a},
1924ff75 92@code{armv8.1-a}, @code{armv8.2-a} and @code{armv8.3-a}.
df359aa7
RE
93
94If both @option{-mcpu} and @option{-march} are specified, the
95assembler will use the setting for @option{-mcpu}. If neither are
96specified, the assembler will default to @option{-mcpu=all}.
97
98The architecture option can be extended with the same instruction set
99extension options as the @option{-mcpu} option. Unlike
100@option{-mcpu}, extensions are not always enabled by default,
101@xref{AArch64 Extensions}.
102
a52e6fd3
YZ
103@cindex @code{-mverbose-error} command line option, AArch64
104@item -mverbose-error
105This option enables verbose error messages for AArch64 gas. This option
106is enabled by default.
107
108@cindex @code{-mno-verbose-error} command line option, AArch64
109@item -mno-verbose-error
110This option disables verbose error messages in AArch64 gas.
111
a06ea964
NC
112@end table
113@c man end
114
df359aa7
RE
115@node AArch64 Extensions
116@section Architecture Extensions
117
118The table below lists the permitted architecture extensions that are
119supported by the assembler and the conditions under which they are
120automatically enabled.
121
122Multiple extensions may be specified, separated by a @code{+}.
123Extension mnemonics may also be removed from those the assembler
124accepts. This is done by prepending @code{no} to the option that adds
125the extension. Extensions that are removed must be listed after all
126extensions that have been added.
127
128Enabling an extension that requires other extensions will
129automatically cause those extensions to be enabled. Similarly,
130disabling an extension that is required by other extensions will
131automatically cause those extensions to be disabled.
132
133@multitable @columnfractions .12 .17 .17 .54
134@headitem Extension @tab Minimum Architecture @tab Enabled by default
135 @tab Description
f482d304
RS
136@item @code{compnum} @tab ARMv8.2-A @tab ARMv8.3-A or later
137 @tab Enable the complex number SIMD extensions. This implies
138 @code{fp16} and @code{simd}.
af117b3c 139@item @code{crc} @tab ARMv8-A @tab ARMv8.1-A or later
df359aa7
RE
140 @tab Enable CRC instructions.
141@item @code{crypto} @tab ARMv8-A @tab No
142 @tab Enable cryptographic extensions. This implies @code{fp} and @code{simd}.
143@item @code{fp} @tab ARMv8-A @tab ARMv8-A or later
144 @tab Enable floating-point extensions.
87018195
MW
145@item @code{fp16} @tab ARMv8.2-A @tab ARMv8.2-A or later
146 @tab Enable ARMv8.2 16-bit floating-point support. This implies
147 @code{fp}.
b607cde1
JG
148@item @code{lor} @tab ARMv8-A @tab ARMv8.1-A or later
149 @tab Enable Limited Ordering Regions extensions.
150@item @code{lse} @tab ARMv8-A @tab ARMv8.1-A or later
151 @tab Enable Large System extensions.
152@item @code{pan} @tab ARMv8-A @tab ARMv8.1-A or later
153 @tab Enable Privileged Access Never support.
73af8ed6
MW
154@item @code{profile} @tab ARMv8.2-A @tab No
155 @tab Enable statistical profiling extensions.
50cc854c
MW
156@item @code{ras} @tab ARMv8-A @tab ARMv8.2-A or later
157 @tab Enable the Reliability, Availability and Serviceability
158 extension.
01cca2f9
SN
159@item @code{rcpc} @tab ARMv8.2-A @tab ARMv8.3-A or later
160 @tab Enable the weak release consistency extension.
b607cde1
JG
161@item @code{rdma} @tab ARMv8-A @tab ARMv8.1-A or later
162 @tab Enable ARMv8.1 Advanced SIMD extensions. This implies @code{simd}.
163@item @code{simd} @tab ARMv8-A @tab ARMv8-A or later
164 @tab Enable Advanced SIMD extensions. This implies @code{fp}.
582e12bf
RS
165@item @code{sve} @tab ARMv8.2-A @tab No
166 @tab Enable the Scalable Vector Extensions. This implies @code{fp16},
167 @code{simd} and @code{compnum}.
65a55fbb
TC
168@item @code{dotprod} @tab ARMv8.2-A @tab No
169 @tab Enable the Dot Product extension. This implies @code{simd}.
df359aa7
RE
170@end multitable
171
a06ea964
NC
172@node AArch64 Syntax
173@section Syntax
174@menu
175* AArch64-Chars:: Special Characters
176* AArch64-Regs:: Register Names
177* AArch64-Relocations:: Relocations
178@end menu
179
180@node AArch64-Chars
181@subsection Special Characters
182
183@cindex line comment character, AArch64
184@cindex AArch64 line comment character
185The presence of a @samp{//} on a line indicates the start of a comment
186that extends to the end of the current line. If a @samp{#} appears as
187the first character of a line, the whole line is treated as a comment.
188
189@cindex line separator, AArch64
190@cindex statement separator, AArch64
191@cindex AArch64 line separator
192The @samp{;} character can be used instead of a newline to separate
193statements.
194
195@cindex immediate character, AArch64
196@cindex AArch64 immediate character
197The @samp{#} can be optionally used to indicate immediate operands.
198
199@node AArch64-Regs
200@subsection Register Names
201
202@cindex AArch64 register names
203@cindex register names, AArch64
204Please refer to the section @samp{4.4 Register Names} of
205@samp{ARMv8 Instruction Set Overview}, which is available at
206@uref{http://infocenter.arm.com}.
207
208@node AArch64-Relocations
209@subsection Relocations
210
211@cindex relocations, AArch64
212@cindex AArch64 relocations
213@cindex MOVN, MOVZ and MOVK group relocations, AArch64
214Relocations for @samp{MOVZ} and @samp{MOVK} instructions can be generated
215by prefixing the label with @samp{#:abs_g2:} etc.
216For example to load the 48-bit absolute address of @var{foo} into x0:
217
218@smallexample
219 movz x0, #:abs_g2:foo // bits 32-47, overflow check
220 movk x0, #:abs_g1_nc:foo // bits 16-31, no overflow check
221 movk x0, #:abs_g0_nc:foo // bits 0-15, no overflow check
222@end smallexample
223
224@cindex ADRP, ADD, LDR/STR group relocations, AArch64
225Relocations for @samp{ADRP}, and @samp{ADD}, @samp{LDR} or @samp{STR}
226instructions can be generated by prefixing the label with
34fd659b 227@samp{:pg_hi21:} and @samp{#:lo12:} respectively.
a06ea964 228
34bca508 229For example to use 33-bit (+/-4GB) pc-relative addressing to
a06ea964
NC
230load the address of @var{foo} into x0:
231
232@smallexample
34fd659b 233 adrp x0, :pg_hi21:foo
a06ea964
NC
234 add x0, x0, #:lo12:foo
235@end smallexample
236
237Or to load the value of @var{foo} into x0:
238
239@smallexample
34fd659b 240 adrp x0, :pg_hi21:foo
a06ea964
NC
241 ldr x0, [x0, #:lo12:foo]
242@end smallexample
243
34fd659b 244Note that @samp{:pg_hi21:} is optional.
a06ea964
NC
245
246@smallexample
247 adrp x0, foo
248@end smallexample
249
250is equivalent to
251
252@smallexample
34fd659b 253 adrp x0, :pg_hi21:foo
a06ea964
NC
254@end smallexample
255
256@node AArch64 Floating Point
257@section Floating Point
258
259@cindex floating point, AArch64 (@sc{ieee})
260@cindex AArch64 floating point (@sc{ieee})
261The AArch64 architecture uses @sc{ieee} floating-point numbers.
262
263@node AArch64 Directives
264@section AArch64 Machine Directives
265
266@cindex machine directives, AArch64
267@cindex AArch64 machine directives
268@table @code
269
270@c AAAAAAAAAAAAAAAAAAAAAAAAA
8e02d7f5
JW
271
272@cindex @code{.arch} directive, AArch64
273@item .arch @var{name}
274Select the target architecture. Valid values for @var{name} are the same as
275for the @option{-march} commandline option.
276
277Specifying @code{.arch} clears any previously selected architecture
278extensions.
279
280@cindex @code{.arch_extension} directive, AArch64
281@item .arch_extension @var{name}
282Add or remove an architecture extension to the target architecture. Valid
283values for @var{name} are the same as those accepted as architectural
284extensions by the @option{-mcpu} commandline option.
285
286@code{.arch_extension} may be used multiple times to add or remove extensions
287incrementally to the architecture being compiled for.
288
a06ea964
NC
289@c BBBBBBBBBBBBBBBBBBBBBBBBBB
290
291@cindex @code{.bss} directive, AArch64
292@item .bss
293This directive switches to the @code{.bss} section.
294
295@c CCCCCCCCCCCCCCCCCCCCCCCCCC
30fab421
NC
296
297@cindex @code{.cpu} directive, AArch64
298@item .cpu @var{name}
299Set the target processor. Valid values for @var{name} are the same as
300those accepted by the @option{-mcpu=} command line option.
301
a06ea964 302@c DDDDDDDDDDDDDDDDDDDDDDDDDD
30fab421
NC
303
304@cindex @code{.dword} directive, AArch64
305@item .dword @var{expressions}
306The @code{.dword} directive produces 64 bit values.
307
a06ea964 308@c EEEEEEEEEEEEEEEEEEEEEEEEEE
30fab421
NC
309
310@cindex @code{.even} directive, AArch64
311@item .even
312The @code{.even} directive aligns the output on the next even byte
313boundary.
314
a06ea964
NC
315@c FFFFFFFFFFFFFFFFFFFFFFFFFF
316@c GGGGGGGGGGGGGGGGGGGGGGGGGG
317@c HHHHHHHHHHHHHHHHHHHHHHHHHH
318@c IIIIIIIIIIIIIIIIIIIIIIIIII
30fab421
NC
319
320@cindex @code{.inst} directive, AArch64
321@item .inst @var{expressions}
322Inserts the expressions into the output as if they were instructions,
323rather than data.
324
a06ea964
NC
325@c JJJJJJJJJJJJJJJJJJJJJJJJJJ
326@c KKKKKKKKKKKKKKKKKKKKKKKKKK
327@c LLLLLLLLLLLLLLLLLLLLLLLLLL
328
329@cindex @code{.ltorg} directive, AArch64
330@item .ltorg
331This directive causes the current contents of the literal pool to be
332dumped into the current section (which is assumed to be the .text
333section) at the current location (aligned to a word boundary).
df359aa7 334GAS maintains a separate literal pool for each section and each
a06ea964
NC
335sub-section. The @code{.ltorg} directive will only affect the literal
336pool of the current section and sub-section. At the end of assembly
337all remaining, un-empty literal pools will automatically be dumped.
338
df359aa7 339Note - older versions of GAS would dump the current literal
a06ea964
NC
340pool any time a section change occurred. This is no longer done, since
341it prevents accurate control of the placement of literal pools.
342
343@c MMMMMMMMMMMMMMMMMMMMMMMMMM
344
345@c NNNNNNNNNNNNNNNNNNNNNNNNNN
346@c OOOOOOOOOOOOOOOOOOOOOOOOOO
347
348@c PPPPPPPPPPPPPPPPPPPPPPPPPP
349
350@cindex @code{.pool} directive, AArch64
351@item .pool
352This is a synonym for .ltorg.
353
354@c QQQQQQQQQQQQQQQQQQQQQQQQQQ
355@c RRRRRRRRRRRRRRRRRRRRRRRRRR
356
357@cindex @code{.req} directive, AArch64
358@item @var{name} .req @var{register name}
359This creates an alias for @var{register name} called @var{name}. For
360example:
361
362@smallexample
363 foo .req w0
364@end smallexample
365
366@c SSSSSSSSSSSSSSSSSSSSSSSSSS
367
368@c TTTTTTTTTTTTTTTTTTTTTTTTTT
369
30fab421
NC
370@cindex @code{.tlsdescadd} directive, AArch64
371@item @code{.tlsdescadd}
372Emits a TLSDESC_ADD reloc on the next instruction.
373
374@cindex @code{.tlsdesccall} directive, AArch64
375@item @code{.tlsdesccall}
376Emits a TLSDESC_CALL reloc on the next instruction.
377
378@cindex @code{.tlsdescldr} directive, AArch64
379@item @code{.tlsdescldr}
380Emits a TLSDESC_LDR reloc on the next instruction.
381
a06ea964
NC
382@c UUUUUUUUUUUUUUUUUUUUUUUUUU
383
384@cindex @code{.unreq} directive, AArch64
385@item .unreq @var{alias-name}
386This undefines a register alias which was previously defined using the
387@code{req} directive. For example:
388
389@smallexample
390 foo .req w0
391 .unreq foo
392@end smallexample
393
394An error occurs if the name is undefined. Note - this pseudo op can
395be used to delete builtin in register name aliases (eg 'w0'). This
396should only be done if it is really necessary.
397
398@c VVVVVVVVVVVVVVVVVVVVVVVVVV
399
400@c WWWWWWWWWWWWWWWWWWWWWWWWWW
401@c XXXXXXXXXXXXXXXXXXXXXXXXXX
a06ea964 402
edc66de9 403@cindex @code{.xword} directive, AArch64
30fab421
NC
404@item .xword @var{expressions}
405The @code{.xword} directive produces 64 bit values. This is the same
406as the @code{.dword} directive.
407
408@c YYYYYYYYYYYYYYYYYYYYYYYYYY
409@c ZZZZZZZZZZZZZZZZZZZZZZZZZZ
edc66de9 410
a06ea964
NC
411@end table
412
413@node AArch64 Opcodes
414@section Opcodes
415
416@cindex AArch64 opcodes
417@cindex opcodes for AArch64
df359aa7 418GAS implements all the standard AArch64 opcodes. It also
a06ea964 419implements several pseudo opcodes, including several synthetic load
34bca508 420instructions.
a06ea964
NC
421
422@table @code
423
424@cindex @code{LDR reg,=<expr>} pseudo op, AArch64
425@item LDR =
426@smallexample
427 ldr <register> , =<expression>
428@end smallexample
429
430The constant expression will be placed into the nearest literal pool (if it not
431already there) and a PC-relative LDR instruction will be generated.
432
433@end table
434
435For more information on the AArch64 instruction set and assembly language
436notation, see @samp{ARMv8 Instruction Set Overview} available at
437@uref{http://infocenter.arm.com}.
438
439
440@node AArch64 Mapping Symbols
441@section Mapping Symbols
442
443The AArch64 ELF specification requires that special symbols be inserted
444into object files to mark certain features:
445
446@table @code
447
448@cindex @code{$x}
449@item $x
450At the start of a region of code containing AArch64 instructions.
451
452@cindex @code{$d}
453@item $d
454At the start of a region of data.
455
456@end table
This page took 0.23309 seconds and 4 git commands to generate.