@c Copyright (C) 2009-2016 Free Software Foundation, Inc.
@c Contributed by ARM Ltd.
@c This is part of the GAS manual.
@c For copying conditions, see the file as.texinfo.
@c man end

@ifset GENERIC
@page
@node AArch64-Dependent
@chapter AArch64 Dependent Features
@end ifset

@ifclear GENERIC
@node Machine Dependencies
@chapter AArch64 Dependent Features
@end ifclear

@cindex AArch64 support
@menu
* AArch64 Options::              Options
* AArch64 Extensions::		 Extensions
* AArch64 Syntax::               Syntax
* AArch64 Floating Point::       Floating Point
* AArch64 Directives::           AArch64 Machine Directives
* AArch64 Opcodes::              Opcodes
* AArch64 Mapping Symbols::      Mapping Symbols
@end menu

@node AArch64 Options
@section Options
@cindex AArch64 options (none)
@cindex options for AArch64 (none)

@c man begin OPTIONS
@table @gcctabopt

@cindex @option{-EB} command line option, AArch64
@item -EB
This option specifies that the output generated by the assembler should
be marked as being encoded for a big-endian processor.

@cindex @option{-EL} command line option, AArch64
@item -EL
This option specifies that the output generated by the assembler should
be marked as being encoded for a little-endian processor.

@cindex @option{-mabi=} command line option, AArch64
@item -mabi=@var{abi}
Specify which ABI the source code uses.  The recognized arguments
are: @code{ilp32} and @code{lp64}, which decides the generated object
file in ELF32 and ELF64 format respectively.  The default is @code{lp64}.

@cindex @option{-mcpu=} command line option, AArch64
@item -mcpu=@var{processor}[+@var{extension}@dots{}]
This option specifies the target processor.  The assembler will issue an error
message if an attempt is made to assemble an instruction which will not execute
on the target processor.  The following processor names are recognized:
@code{cortex-a35},
@code{cortex-a53},
@code{cortex-a57},
@code{cortex-a72},
@code{cortex-a73},
@code{exynos-m1},
@code{falkor},
@code{qdf24xx},
@code{thunderx},
@code{vulcan},
@code{xgene1}
and
@code{xgene2}.
The special name @code{all} may be used to allow the assembler to accept
instructions valid for any supported processor, including all optional
extensions.

In addition to the basic instruction set, the assembler can be told to
accept, or restrict, various extension mnemonics that extend the
processor.  @xref{AArch64 Extensions}.

If some implementations of a particular processor can have an
extension, then then those extensions are automatically enabled.
Consequently, you will not normally have to specify any additional
extensions.

@cindex @option{-march=} command line option, AArch64
@item -march=@var{architecture}[+@var{extension}@dots{}]
This option specifies the target architecture.  The assembler will
issue an error message if an attempt is made to assemble an
instruction which will not execute on the target architecture.  The
following architecture names are recognized: @code{armv8-a},
@code{armv8.1-a}, @code{armv8.2-a} and @code{armv8.3-a}.

If both @option{-mcpu} and @option{-march} are specified, the
assembler will use the setting for @option{-mcpu}.  If neither are
specified, the assembler will default to @option{-mcpu=all}.

The architecture option can be extended with the same instruction set
extension options as the @option{-mcpu} option.  Unlike
@option{-mcpu}, extensions are not always enabled by default,
@xref{AArch64 Extensions}.

@cindex @code{-mverbose-error} command line option, AArch64
@item -mverbose-error
This option enables verbose error messages for AArch64 gas.  This option
is enabled by default.

@cindex @code{-mno-verbose-error} command line option, AArch64
@item -mno-verbose-error
This option disables verbose error messages in AArch64 gas.

@end table
@c man end

@node AArch64 Extensions
@section Architecture Extensions

The table below lists the permitted architecture extensions that are
supported by the assembler and the conditions under which they are
automatically enabled.

Multiple extensions may be specified, separated by a @code{+}.
Extension mnemonics may also be removed from those the assembler
accepts.  This is done by prepending @code{no} to the option that adds
the extension.  Extensions that are removed must be listed after all
extensions that have been added.

Enabling an extension that requires other extensions will
automatically cause those extensions to be enabled.  Similarly,
disabling an extension that is required by other extensions will
automatically cause those extensions to be disabled.

@multitable @columnfractions .12 .17 .17 .54
@headitem Extension @tab Minimum Architecture @tab Enabled by default
 @tab Description
@item @code{crc} @tab ARMv8-A @tab ARMv8.1-A or later
 @tab Enable CRC instructions.
@item @code{crypto} @tab ARMv8-A @tab No
 @tab Enable cryptographic extensions.  This implies @code{fp} and @code{simd}.
@item @code{fp} @tab ARMv8-A @tab ARMv8-A or later
 @tab Enable floating-point extensions.
@item @code{fp16} @tab ARMv8.2-A @tab ARMv8.2-A or later
 @tab Enable ARMv8.2 16-bit floating-point support.  This implies
 @code{fp}.
@item @code{lor} @tab ARMv8-A @tab ARMv8.1-A or later
 @tab Enable Limited Ordering Regions extensions.
@item @code{lse} @tab ARMv8-A @tab ARMv8.1-A or later
 @tab Enable Large System extensions.
@item @code{pan} @tab ARMv8-A @tab ARMv8.1-A or later
 @tab Enable Privileged Access Never support.
@item @code{profile} @tab ARMv8.2-A @tab No
 @tab Enable statistical profiling extensions.
@item @code{ras} @tab ARMv8-A @tab ARMv8.2-A or later
 @tab Enable the Reliability, Availability and Serviceability
 extension.
@item @code{rdma} @tab ARMv8-A @tab ARMv8.1-A or later
 @tab Enable ARMv8.1 Advanced SIMD extensions.  This implies @code{simd}.
@item @code{simd} @tab ARMv8-A @tab ARMv8-A or later
 @tab Enable Advanced SIMD extensions.  This implies @code{fp}.
@item @code{sve} @tab ARMv8-A @tab ARMv8-A or later
 @tab Enable the Scalable Vector Extensions.
@end multitable

@node AArch64 Syntax
@section Syntax
@menu
* AArch64-Chars::                Special Characters
* AArch64-Regs::                 Register Names
* AArch64-Relocations::	     Relocations
@end menu

@node AArch64-Chars
@subsection Special Characters

@cindex line comment character, AArch64
@cindex AArch64 line comment character
The presence of a @samp{//} on a line indicates the start of a comment
that extends to the end of the current line.  If a @samp{#} appears as
the first character of a line, the whole line is treated as a comment.

@cindex line separator, AArch64
@cindex statement separator, AArch64
@cindex AArch64 line separator
The @samp{;} character can be used instead of a newline to separate
statements.

@cindex immediate character, AArch64
@cindex AArch64 immediate character
The @samp{#} can be optionally used to indicate immediate operands.

@node AArch64-Regs
@subsection Register Names

@cindex AArch64 register names
@cindex register names, AArch64
Please refer to the section @samp{4.4 Register Names} of
@samp{ARMv8 Instruction Set Overview}, which is available at
@uref{http://infocenter.arm.com}.

@node AArch64-Relocations
@subsection Relocations

@cindex relocations, AArch64
@cindex AArch64 relocations
@cindex MOVN, MOVZ and MOVK group relocations, AArch64
Relocations for @samp{MOVZ} and @samp{MOVK} instructions can be generated
by prefixing the label with @samp{#:abs_g2:} etc.
For example to load the 48-bit absolute address of @var{foo} into x0:

@smallexample
        movz x0, #:abs_g2:foo		// bits 32-47, overflow check
        movk x0, #:abs_g1_nc:foo	// bits 16-31, no overflow check
        movk x0, #:abs_g0_nc:foo	// bits  0-15, no overflow check
@end smallexample

@cindex ADRP, ADD, LDR/STR group relocations, AArch64
Relocations for @samp{ADRP}, and @samp{ADD}, @samp{LDR} or @samp{STR}
instructions can be generated by prefixing the label with
@samp{:pg_hi21:} and @samp{#:lo12:} respectively.

For example to use 33-bit (+/-4GB) pc-relative addressing to
load the address of @var{foo} into x0:

@smallexample
        adrp x0, :pg_hi21:foo
        add  x0, x0, #:lo12:foo
@end smallexample

Or to load the value of @var{foo} into x0:

@smallexample
        adrp x0, :pg_hi21:foo
        ldr  x0, [x0, #:lo12:foo]
@end smallexample

Note that @samp{:pg_hi21:} is optional.

@smallexample
        adrp x0, foo
@end smallexample

is equivalent to

@smallexample
        adrp x0, :pg_hi21:foo
@end smallexample

@node AArch64 Floating Point
@section Floating Point

@cindex floating point, AArch64 (@sc{ieee})
@cindex AArch64 floating point (@sc{ieee})
The AArch64 architecture uses @sc{ieee} floating-point numbers.

@node AArch64 Directives
@section AArch64 Machine Directives

@cindex machine directives, AArch64
@cindex AArch64 machine directives
@table @code

@c AAAAAAAAAAAAAAAAAAAAAAAAA

@cindex @code{.arch} directive, AArch64
@item .arch @var{name}
Select the target architecture.  Valid values for @var{name} are the same as
for the @option{-march} commandline option.

Specifying @code{.arch} clears any previously selected architecture
extensions.

@cindex @code{.arch_extension} directive, AArch64
@item .arch_extension @var{name}
Add or remove an architecture extension to the target architecture.  Valid
values for @var{name} are the same as those accepted as architectural
extensions by the @option{-mcpu} commandline option.

@code{.arch_extension} may be used multiple times to add or remove extensions
incrementally to the architecture being compiled for.

@c BBBBBBBBBBBBBBBBBBBBBBBBBB

@cindex @code{.bss} directive, AArch64
@item .bss
This directive switches to the @code{.bss} section.

@c CCCCCCCCCCCCCCCCCCCCCCCCCC

@cindex @code{.cpu} directive, AArch64
@item .cpu @var{name}
Set the target processor.  Valid values for @var{name} are the same as
those accepted by the @option{-mcpu=} command line option.

@c DDDDDDDDDDDDDDDDDDDDDDDDDD

@cindex @code{.dword} directive, AArch64
@item .dword @var{expressions}
The @code{.dword} directive produces 64 bit values.

@c EEEEEEEEEEEEEEEEEEEEEEEEEE

@cindex @code{.even} directive, AArch64
@item .even
The @code{.even} directive aligns the output on the next even byte
boundary.

@c FFFFFFFFFFFFFFFFFFFFFFFFFF
@c GGGGGGGGGGGGGGGGGGGGGGGGGG
@c HHHHHHHHHHHHHHHHHHHHHHHHHH
@c IIIIIIIIIIIIIIIIIIIIIIIIII

@cindex @code{.inst} directive, AArch64
@item .inst @var{expressions}
Inserts the expressions into the output as if they were instructions,
rather than data.

@c JJJJJJJJJJJJJJJJJJJJJJJJJJ
@c KKKKKKKKKKKKKKKKKKKKKKKKKK
@c LLLLLLLLLLLLLLLLLLLLLLLLLL

@cindex @code{.ltorg} directive, AArch64
@item .ltorg
This directive causes the current contents of the literal pool to be
dumped into the current section (which is assumed to be the .text
section) at the current location (aligned to a word boundary).
GAS maintains a separate literal pool for each section and each
sub-section.  The @code{.ltorg} directive will only affect the literal
pool of the current section and sub-section.  At the end of assembly
all remaining, un-empty literal pools will automatically be dumped.

Note - older versions of GAS would dump the current literal
pool any time a section change occurred.  This is no longer done, since
it prevents accurate control of the placement of literal pools.

@c MMMMMMMMMMMMMMMMMMMMMMMMMM

@c NNNNNNNNNNNNNNNNNNNNNNNNNN
@c OOOOOOOOOOOOOOOOOOOOOOOOOO

@c PPPPPPPPPPPPPPPPPPPPPPPPPP

@cindex @code{.pool} directive, AArch64
@item .pool
This is a synonym for .ltorg.

@c QQQQQQQQQQQQQQQQQQQQQQQQQQ
@c RRRRRRRRRRRRRRRRRRRRRRRRRR

@cindex @code{.req} directive, AArch64
@item @var{name} .req @var{register name}
This creates an alias for @var{register name} called @var{name}.  For
example:

@smallexample
        foo .req w0
@end smallexample

@c SSSSSSSSSSSSSSSSSSSSSSSSSS

@c TTTTTTTTTTTTTTTTTTTTTTTTTT

@cindex @code{.tlsdescadd} directive, AArch64
@item   @code{.tlsdescadd}
Emits a TLSDESC_ADD reloc on the next instruction.

@cindex @code{.tlsdesccall} directive, AArch64
@item   @code{.tlsdesccall}
Emits a TLSDESC_CALL reloc on the next instruction.

@cindex @code{.tlsdescldr} directive, AArch64
@item   @code{.tlsdescldr}
Emits a TLSDESC_LDR reloc on the next instruction.

@c UUUUUUUUUUUUUUUUUUUUUUUUUU

@cindex @code{.unreq} directive, AArch64
@item .unreq @var{alias-name}
This undefines a register alias which was previously defined using the
@code{req} directive.  For example:

@smallexample
        foo .req w0
        .unreq foo
@end smallexample

An error occurs if the name is undefined.  Note - this pseudo op can
be used to delete builtin in register name aliases (eg 'w0').  This
should only be done if it is really necessary.

@c VVVVVVVVVVVVVVVVVVVVVVVVVV

@c WWWWWWWWWWWWWWWWWWWWWWWWWW
@c XXXXXXXXXXXXXXXXXXXXXXXXXX

@cindex @code{.xword} directive, AArch64
@item .xword @var{expressions}
The @code{.xword} directive produces 64 bit values.  This is the same
as the @code{.dword} directive.

@c YYYYYYYYYYYYYYYYYYYYYYYYYY
@c ZZZZZZZZZZZZZZZZZZZZZZZZZZ

@end table

@node AArch64 Opcodes
@section Opcodes

@cindex AArch64 opcodes
@cindex opcodes for AArch64
GAS implements all the standard AArch64 opcodes.  It also
implements several pseudo opcodes, including several synthetic load
instructions.

@table @code

@cindex @code{LDR reg,=<expr>} pseudo op, AArch64
@item LDR =
@smallexample
  ldr <register> , =<expression>
@end smallexample

The constant expression will be placed into the nearest literal pool (if it not
already there) and a PC-relative LDR instruction will be generated.

@end table

For more information on the AArch64 instruction set and assembly language
notation, see @samp{ARMv8 Instruction Set Overview} available at
@uref{http://infocenter.arm.com}.


@node AArch64 Mapping Symbols
@section Mapping Symbols

The AArch64 ELF specification requires that special symbols be inserted
into object files to mark certain features:

@table @code

@cindex @code{$x}
@item $x
At the start of a region of code containing AArch64 instructions.

@cindex @code{$d}
@item $d
At the start of a region of data.

@end table
