@c Copyright (C) 2011-2021 Free Software Foundation, Inc.
@c This is part of the GAS manual.
@c For copying conditions, see the file as.texinfo.
@c man end

@ifset GENERIC
@page
@node TILE-Gx-Dependent
@chapter TILE-Gx Dependent Features
@end ifset
@ifclear GENERIC
@node Machine Dependencies
@chapter TILE-Gx Dependent Features
@end ifclear

@cindex TILE-Gx support
@menu
* TILE-Gx Options::		TILE-Gx Options
* TILE-Gx Syntax::		TILE-Gx Syntax
* TILE-Gx Directives::		TILE-Gx Directives
@end menu

@node TILE-Gx Options
@section Options

The following table lists all available TILE-Gx specific options:

@c man begin OPTIONS
@table @gcctabopt
@cindex @samp{-m32} option, TILE-Gx
@cindex @samp{-m64} option, TILE-Gx
@item -m32 | -m64
Select the word size, either 32 bits or 64 bits.

@cindex @samp{-EB} option, TILE-Gx
@cindex @samp{-EL} option, TILE-Gx
@item -EB | -EL
Select the endianness, either big-endian (-EB) or little-endian (-EL).

@end table
@c man end

@node TILE-Gx Syntax
@section Syntax
@cindex TILE-Gx syntax
@cindex syntax, TILE-Gx

Block comments are delimited by @samp{/*} and @samp{*/}.  End of line
comments may be introduced by @samp{#}.

Instructions consist of a leading opcode or macro name followed by
whitespace and an optional comma-separated list of operands:

@smallexample
@var{opcode} [@var{operand}, @dots{}]
@end smallexample

Instructions must be separated by a newline or semicolon.

There are two ways to write code: either write naked instructions,
which the assembler is free to combine into VLIW bundles, or specify
the VLIW bundles explicitly.

Bundles are specified using curly braces:

@smallexample
@{ @var{add} r3,r4,r5 ; @var{add} r7,r8,r9 ; @var{lw} r10,r11 @}
@end smallexample

A bundle can span multiple lines. If you want to put multiple
instructions on a line, whether in a bundle or not, you need to
separate them with semicolons as in this example.

A bundle may contain one or more instructions, up to the limit
specified by the ISA (currently three). If fewer instructions are
specified than the hardware supports in a bundle, the assembler
inserts @code{fnop} instructions automatically.

The assembler will prefer to preserve the ordering of instructions
within the bundle, putting the first instruction in a lower-numbered
pipeline than the next one, etc.  This fact, combined with the
optional use of explicit @code{fnop} or @code{nop} instructions,
allows precise control over which pipeline executes each instruction.

If the instructions cannot be bundled in the listed order, the
assembler will automatically try to find a valid pipeline
assignment. If there is no way to bundle the instructions together,
the assembler reports an error.

The assembler does not yet auto-bundle (automatically combine multiple
instructions into one bundle), but it reserves the right to do so in
the future.  If you want to force an instruction to run by itself, put
it in a bundle explicitly with curly braces and use @code{nop}
instructions (not @code{fnop}) to fill the remaining pipeline slots in
that bundle.

@menu
* TILE-Gx Opcodes::              Opcode Naming Conventions.
* TILE-Gx Registers::            Register Naming.
* TILE-Gx Modifiers::            Symbolic Operand Modifiers.
@end menu

@node TILE-Gx Opcodes
@subsection Opcode Names
@cindex TILE-Gx opcode names
@cindex opcode names, TILE-Gx

For a complete list of opcodes and descriptions of their semantics,
see @cite{TILE-Gx Instruction Set Architecture}, available upon
request at www.tilera.com.

@node TILE-Gx Registers
@subsection Register Names
@cindex TILE-Gx register names
@cindex register names, TILE-Gx

General-purpose registers are represented by predefined symbols of the
form @samp{r@var{N}}, where @var{N} represents a number between
@code{0} and @code{63}.  However, the following registers have
canonical names that must be used instead:

@table @code
@item r54
sp

@item r55
lr

@item r56
sn

@item r57
idn0

@item r58
idn1

@item r59
udn0

@item r60
udn1

@item r61
udn2

@item r62
udn3

@item r63
zero

@end table

The assembler will emit a warning if a numeric name is used instead of
the non-numeric name.  The @code{.no_require_canonical_reg_names}
assembler pseudo-op turns off this
warning. @code{.require_canonical_reg_names} turns it back on.

@node TILE-Gx Modifiers
@subsection Symbolic Operand Modifiers
@cindex TILE-Gx modifiers
@cindex symbol modifiers, TILE-Gx

The assembler supports several modifiers when using symbol addresses
in TILE-Gx instruction operands.  The general syntax is the following:

@smallexample
modifier(symbol)
@end smallexample

The following modifiers are supported:

@table @code

@item hw0

This modifier is used to load bits 0-15 of the symbol's address.

@item hw1

This modifier is used to load bits 16-31 of the symbol's address.

@item hw2

This modifier is used to load bits 32-47 of the symbol's address.

@item hw3

This modifier is used to load bits 48-63 of the symbol's address.

@item hw0_last

This modifier yields the same value as @code{hw0}, but it also checks
that the value does not overflow.

@item hw1_last

This modifier yields the same value as @code{hw1}, but it also checks
that the value does not overflow.

@item hw2_last

This modifier yields the same value as @code{hw2}, but it also checks
that the value does not overflow.

A 48-bit symbolic value is constructed by using the following idiom:

@smallexample
moveli r0, hw2_last(sym)
shl16insli r0, r0, hw1(sym)
shl16insli r0, r0, hw0(sym)
@end smallexample

@item hw0_got

This modifier is used to load bits 0-15 of the symbol's offset in the
GOT entry corresponding to the symbol.

@item hw0_last_got

This modifier yields the same value as @code{hw0_got}, but it also
checks that the value does not overflow.

@item hw1_last_got

This modifier is used to load bits 16-31 of the symbol's offset in the
GOT entry corresponding to the symbol, and it also checks that the
value does not overflow.

@item plt

This modifier is used for function symbols.  It causes a
@emph{procedure linkage table}, an array of code stubs, to be created
at the time the shared object is created or linked against, together
with a global offset table entry.  The value is a pc-relative offset
to the corresponding stub code in the procedure linkage table.  This
arrangement causes the run-time symbol resolver to be called to look
up and set the value of the symbol the first time the function is
called (at latest; depending environment variables).  It is only safe
to leave the symbol unresolved this way if all references are function
calls.

@item hw0_plt

This modifier is used to load bits 0-15 of the pc-relative address of
a plt entry.

@item hw1_plt

This modifier is used to load bits 16-31 of the pc-relative address of
a plt entry.

@item hw1_last_plt

This modifier yields the same value as @code{hw1_plt}, but it also
checks that the value does not overflow.

@item hw2_last_plt

This modifier is used to load bits 32-47 of the pc-relative address of
a plt entry, and it also checks that the value does not overflow.

@item hw0_tls_gd

This modifier is used to load bits 0-15 of the offset of the GOT entry
of the symbol's TLS descriptor, to be used for general-dynamic TLS
accesses.

@item hw0_last_tls_gd

This modifier yields the same value as @code{hw0_tls_gd}, but it also
checks that the value does not overflow.

@item hw1_last_tls_gd

This modifier is used to load bits 16-31 of the offset of the GOT
entry of the symbol's TLS descriptor, to be used for general-dynamic
TLS accesses.  It also checks that the value does not overflow.

@item hw0_tls_ie

This modifier is used to load bits 0-15 of the offset of the GOT entry
containing the offset of the symbol's address from the TCB, to be used
for initial-exec TLS accesses.

@item hw0_last_tls_ie

This modifier yields the same value as @code{hw0_tls_ie}, but it also
checks that the value does not overflow.

@item hw1_last_tls_ie

This modifier is used to load bits 16-31 of the offset of the GOT
entry containing the offset of the symbol's address from the TCB, to
be used for initial-exec TLS accesses.  It also checks that the value
does not overflow.

@item hw0_tls_le

This modifier is used to load bits 0-15 of the offset of the symbol's
address from the TCB, to be used for local-exec TLS accesses.

@item hw0_last_tls_le

This modifier yields the same value as @code{hw0_tls_le}, but it also
checks that the value does not overflow.

@item hw1_last_tls_le

This modifier is used to load bits 16-31 of the offset of the symbol's
address from the TCB, to be used for local-exec TLS accesses.  It
also checks that the value does not overflow.

@item tls_gd_call

This modifier is used to tag an instruction as the ``call'' part of a
calling sequence for a TLS GD reference of its operand.

@item tls_gd_add

This modifier is used to tag an instruction as the ``add'' part of a
calling sequence for a TLS GD reference of its operand.

@item tls_ie_load

This modifier is used to tag an instruction as the ``load'' part of a
calling sequence for a TLS IE reference of its operand.

@end table

@node TILE-Gx Directives
@section TILE-Gx Directives
@cindex machine directives, TILE-Gx
@cindex TILE-Gx machine directives

@table @code

@cindex @code{.align} directive, TILE-Gx
@item .align @var{expression} [, @var{expression}]
This is the generic @var{.align} directive.  The first argument is the
requested alignment in bytes.

@cindex @code{.allow_suspicious_bundles} directive, TILE-Gx
@item .allow_suspicious_bundles
Turns on error checking for combinations of instructions in a bundle
that probably indicate a programming error.  This is on by default.

@item .no_allow_suspicious_bundles
Turns off error checking for combinations of instructions in a bundle
that probably indicate a programming error.

@cindex @code{.require_canonical_reg_names} directive, TILE-Gx
@item .require_canonical_reg_names
Require that canonical register names be used, and emit a warning if
the numeric names are used.  This is on by default.

@item .no_require_canonical_reg_names
Permit the use of numeric names for registers that have canonical
names.

@end table
