123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332 |
- @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.
- @ifset GENERIC
- @page
- @node TILEPro-Dependent
- @chapter TILEPro Dependent Features
- @end ifset
- @ifclear GENERIC
- @node Machine Dependencies
- @chapter TILEPro Dependent Features
- @end ifclear
- @cindex TILEPro support
- @menu
- * TILEPro Options:: TILEPro Options
- * TILEPro Syntax:: TILEPro Syntax
- * TILEPro Directives:: TILEPro Directives
- @end menu
- @node TILEPro Options
- @section Options
- @code{@value{AS}} has no machine-dependent command-line options for
- TILEPro.
- @node TILEPro Syntax
- @section Syntax
- @cindex TILEPro syntax
- @cindex syntax, TILEPro
- 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
- * TILEPro Opcodes:: Opcode Naming Conventions.
- * TILEPro Registers:: Register Naming.
- * TILEPro Modifiers:: Symbolic Operand Modifiers.
- @end menu
- @node TILEPro Opcodes
- @subsection Opcode Names
- @cindex TILEPro opcode names
- @cindex opcode names, TILEPro
- For a complete list of opcodes and descriptions of their semantics,
- see @cite{TILE Processor User Architecture Manual}, available upon
- request at www.tilera.com.
- @node TILEPro Registers
- @subsection Register Names
- @cindex TILEPro register names
- @cindex register names, TILEPro
- 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 canonical 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 TILEPro Modifiers
- @subsection Symbolic Operand Modifiers
- @cindex TILEPro modifiers
- @cindex symbol modifiers, TILEPro
- The assembler supports several modifiers when using symbol addresses
- in TILEPro instruction operands. The general syntax is the following:
- @smallexample
- modifier(symbol)
- @end smallexample
- The following modifiers are supported:
- @table @code
- @item lo16
- This modifier is used to load the low 16 bits of the symbol's address,
- sign-extended to a 32-bit value (sign-extension allows it to be
- range-checked against signed 16 bit immediate operands without
- complaint).
- @item hi16
- This modifier is used to load the high 16 bits of the symbol's
- address, also sign-extended to a 32-bit value.
- @item ha16
- @code{ha16(N)} is identical to @code{hi16(N)}, except if
- @code{lo16(N)} is negative it adds one to the @code{hi16(N)}
- value. This way @code{lo16} and @code{ha16} can be added to create any
- 32-bit value using @code{auli}. For example, here is how you move an
- arbitrary 32-bit address into r3:
- @smallexample
- moveli r3, lo16(sym)
- auli r3, r3, ha16(sym)
- @end smallexample
- @item got
- This modifier is used to load the offset of the GOT entry
- corresponding to the symbol.
- @item got_lo16
- This modifier is used to load the sign-extended low 16 bits of the
- offset of the GOT entry corresponding to the symbol.
- @item got_hi16
- This modifier is used to load the sign-extended high 16 bits of the
- offset of the GOT entry corresponding to the symbol.
- @item got_ha16
- This modifier is like @code{got_hi16}, but it adds one if
- @code{got_lo16} of the input value is negative.
- @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 tls_gd
- This modifier is used to load the offset of the GOT entry of the
- symbol's TLS descriptor, to be used for general-dynamic TLS accesses.
- @item tls_gd_lo16
- This modifier is used to load the sign-extended low 16 bits of the
- offset of the GOT entry of the symbol's TLS descriptor, to be used for
- general dynamic TLS accesses.
- @item tls_gd_hi16
- This modifier is used to load the sign-extended high 16 bits of the
- offset of the GOT entry of the symbol's TLS descriptor, to be used for
- general dynamic TLS accesses.
- @item tls_gd_ha16
- This modifier is like @code{tls_gd_hi16}, but it adds one to the value
- if @code{tls_gd_lo16} of the input value is negative.
- @item tls_ie
- This modifier is used to load 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 tls_ie_lo16
- This modifier is used to load the low 16 bits 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 tls_ie_hi16
- This modifier is used to load the high 16 bits 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 tls_ie_ha16
- This modifier is like @code{tls_ie_hi16}, but it adds one to the value
- if @code{tls_ie_lo16} of the input value is negative.
- @item tls_le
- This modifier is used to load the offset of the symbol's address from
- the TCB, to be used for local-exec TLS accesses.
- @item tls_le_lo16
- This modifier is used to load the low 16 bits of the offset of the
- symbol's address from the TCB, to be used for local-exec TLS accesses.
- @item tls_le_hi16
- This modifier is used to load the high 16 bits of the offset of the
- symbol's address from the TCB, to be used for local-exec TLS accesses.
- @item tls_le_ha16
- This modifier is like @code{tls_le_hi16}, but it adds one to the value
- if @code{tls_le_lo16} of the input value is negative.
- @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 TILEPro Directives
- @section TILEPro Directives
- @cindex machine directives, TILEPro
- @cindex TILEPro machine directives
- @table @code
- @cindex @code{.align} directive, TILEPro
- @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, TILEPro
- @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, TILEPro
- @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
|