123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363 |
- @c Copyright (C) 2011-2015 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 instrution 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
|