Home | History | Annotate | Download | only in doc
      1 @c Copyright (C) 2011-2016 Free Software Foundation, Inc.
      2 @c This is part of the GAS manual.
      3 @c For copying conditions, see the file as.texinfo.
      4 @ifset GENERIC
      5 @page
      6 @node TILEPro-Dependent
      7 @chapter TILEPro Dependent Features
      8 @end ifset
      9 @ifclear GENERIC
     10 @node Machine Dependencies
     11 @chapter TILEPro Dependent Features
     12 @end ifclear
     13 
     14 @cindex TILEPro support
     15 @menu
     16 * TILEPro Options::		TILEPro Options
     17 * TILEPro Syntax::		TILEPro Syntax
     18 * TILEPro Directives::		TILEPro Directives
     19 @end menu
     20 
     21 @node TILEPro Options
     22 @section Options
     23 
     24 @code{@value{AS}} has no machine-dependent command-line options for
     25 TILEPro.
     26 
     27 @node TILEPro Syntax
     28 @section Syntax
     29 @cindex TILEPro syntax
     30 @cindex syntax, TILEPro
     31 
     32 Block comments are delimited by @samp{/*} and @samp{*/}.  End of line
     33 comments may be introduced by @samp{#}.
     34 
     35 Instructions consist of a leading opcode or macro name followed by
     36 whitespace and an optional comma-separated list of operands:
     37 
     38 @smallexample
     39 @var{opcode} [@var{operand}, @dots{}]
     40 @end smallexample
     41 
     42 Instructions must be separated by a newline or semicolon.
     43 
     44 There are two ways to write code: either write naked instructions,
     45 which the assembler is free to combine into VLIW bundles, or specify
     46 the VLIW bundles explicitly.
     47 
     48 Bundles are specified using curly braces:
     49 
     50 @smallexample
     51 @{ @var{add} r3,r4,r5 ; @var{add} r7,r8,r9 ; @var{lw} r10,r11 @}
     52 @end smallexample
     53 
     54 A bundle can span multiple lines. If you want to put multiple
     55 instructions on a line, whether in a bundle or not, you need to
     56 separate them with semicolons as in this example.
     57 
     58 A bundle may contain one or more instructions, up to the limit
     59 specified by the ISA (currently three). If fewer instructions are
     60 specified than the hardware supports in a bundle, the assembler
     61 inserts @code{fnop} instructions automatically.
     62 
     63 The assembler will prefer to preserve the ordering of instructions
     64 within the bundle, putting the first instruction in a lower-numbered
     65 pipeline than the next one, etc.  This fact, combined with the
     66 optional use of explicit @code{fnop} or @code{nop} instructions,
     67 allows precise control over which pipeline executes each instruction.
     68 
     69 If the instructions cannot be bundled in the listed order, the
     70 assembler will automatically try to find a valid pipeline
     71 assignment. If there is no way to bundle the instructions together,
     72 the assembler reports an error.
     73 
     74 The assembler does not yet auto-bundle (automatically combine multiple
     75 instructions into one bundle), but it reserves the right to do so in
     76 the future.  If you want to force an instruction to run by itself, put
     77 it in a bundle explicitly with curly braces and use @code{nop}
     78 instructions (not @code{fnop}) to fill the remaining pipeline slots in
     79 that bundle.
     80 
     81 @menu
     82 * TILEPro Opcodes::              Opcode Naming Conventions.
     83 * TILEPro Registers::            Register Naming.
     84 * TILEPro Modifiers::            Symbolic Operand Modifiers.
     85 @end menu
     86 
     87 @node TILEPro Opcodes
     88 @subsection Opcode Names
     89 @cindex TILEPro opcode names
     90 @cindex opcode names, TILEPro
     91 
     92 For a complete list of opcodes and descriptions of their semantics,
     93 see @cite{TILE Processor User Architecture Manual}, available upon
     94 request at www.tilera.com.
     95 
     96 @node TILEPro Registers
     97 @subsection Register Names
     98 @cindex TILEPro register names
     99 @cindex register names, TILEPro
    100 
    101 General-purpose registers are represented by predefined symbols of the
    102 form @samp{r@var{N}}, where @var{N} represents a number between
    103 @code{0} and @code{63}.  However, the following registers have
    104 canonical names that must be used instead:
    105 
    106 @table @code
    107 @item r54
    108 sp
    109 
    110 @item r55
    111 lr
    112 
    113 @item r56
    114 sn
    115 
    116 @item r57
    117 idn0
    118 
    119 @item r58
    120 idn1
    121 
    122 @item r59
    123 udn0
    124 
    125 @item r60
    126 udn1
    127 
    128 @item r61
    129 udn2
    130 
    131 @item r62
    132 udn3
    133 
    134 @item r63
    135 zero
    136 
    137 @end table
    138 
    139 The assembler will emit a warning if a numeric name is used instead of
    140 the canonical name.  The @code{.no_require_canonical_reg_names}
    141 assembler pseudo-op turns off this
    142 warning. @code{.require_canonical_reg_names} turns it back on.
    143 
    144 @node TILEPro Modifiers
    145 @subsection Symbolic Operand Modifiers
    146 @cindex TILEPro modifiers
    147 @cindex symbol modifiers, TILEPro
    148 
    149 The assembler supports several modifiers when using symbol addresses
    150 in TILEPro instruction operands.  The general syntax is the following:
    151 
    152 @smallexample
    153 modifier(symbol)
    154 @end smallexample
    155 
    156 The following modifiers are supported:
    157 
    158 @table @code
    159 
    160 @item lo16
    161 
    162 This modifier is used to load the low 16 bits of the symbol's address,
    163 sign-extended to a 32-bit value (sign-extension allows it to be
    164 range-checked against signed 16 bit immediate operands without
    165 complaint).
    166 
    167 @item hi16
    168 
    169 This modifier is used to load the high 16 bits of the symbol's
    170 address, also sign-extended to a 32-bit value.
    171 
    172 @item ha16
    173 
    174 @code{ha16(N)} is identical to @code{hi16(N)}, except if
    175 @code{lo16(N)} is negative it adds one to the @code{hi16(N)}
    176 value. This way @code{lo16} and @code{ha16} can be added to create any
    177 32-bit value using @code{auli}.  For example, here is how you move an
    178 arbitrary 32-bit address into r3:
    179 
    180 @smallexample
    181 moveli r3, lo16(sym)
    182 auli r3, r3, ha16(sym)
    183 @end smallexample
    184 
    185 @item got
    186 
    187 This modifier is used to load the offset of the GOT entry
    188 corresponding to the symbol.
    189 
    190 @item got_lo16
    191 
    192 This modifier is used to load the sign-extended low 16 bits of the
    193 offset of the GOT entry corresponding to the symbol.
    194 
    195 @item got_hi16
    196 
    197 This modifier is used to load the sign-extended high 16 bits of the
    198 offset of the GOT entry corresponding to the symbol.
    199 
    200 @item got_ha16
    201 
    202 This modifier is like @code{got_hi16}, but it adds one if
    203 @code{got_lo16} of the input value is negative.
    204 
    205 @item plt
    206 
    207 This modifier is used for function symbols.  It causes a
    208 @emph{procedure linkage table}, an array of code stubs, to be created
    209 at the time the shared object is created or linked against, together
    210 with a global offset table entry.  The value is a pc-relative offset
    211 to the corresponding stub code in the procedure linkage table.  This
    212 arrangement causes the run-time symbol resolver to be called to look
    213 up and set the value of the symbol the first time the function is
    214 called (at latest; depending environment variables).  It is only safe
    215 to leave the symbol unresolved this way if all references are function
    216 calls.
    217 
    218 @item tls_gd
    219 
    220 This modifier is used to load the offset of the GOT entry of the
    221 symbol's TLS descriptor, to be used for general-dynamic TLS accesses.
    222 
    223 @item tls_gd_lo16
    224 
    225 This modifier is used to load the sign-extended low 16 bits of the
    226 offset of the GOT entry of the symbol's TLS descriptor, to be used for
    227 general dynamic TLS accesses.
    228 
    229 @item tls_gd_hi16
    230 
    231 This modifier is used to load the sign-extended high 16 bits of the
    232 offset of the GOT entry of the symbol's TLS descriptor, to be used for
    233 general dynamic TLS accesses.
    234 
    235 @item tls_gd_ha16
    236 
    237 This modifier is like @code{tls_gd_hi16}, but it adds one to the value
    238 if @code{tls_gd_lo16} of the input value is negative.
    239 
    240 @item tls_ie
    241 
    242 This modifier is used to load the offset of the GOT entry containing
    243 the offset of the symbol's address from the TCB, to be used for
    244 initial-exec TLS accesses.
    245 
    246 @item tls_ie_lo16
    247 
    248 This modifier is used to load the low 16 bits of the offset of the GOT
    249 entry containing the offset of the symbol's address from the TCB, to
    250 be used for initial-exec TLS accesses.
    251 
    252 @item tls_ie_hi16
    253 
    254 This modifier is used to load the high 16 bits of the offset of the
    255 GOT entry containing the offset of the symbol's address from the TCB,
    256 to be used for initial-exec TLS accesses.
    257 
    258 @item tls_ie_ha16
    259 
    260 This modifier is like @code{tls_ie_hi16}, but it adds one to the value
    261 if @code{tls_ie_lo16} of the input value is negative.
    262 
    263 @item tls_le
    264 
    265 This modifier is used to load the offset of the symbol's address from
    266 the TCB, to be used for local-exec TLS accesses.
    267 
    268 @item tls_le_lo16
    269 
    270 This modifier is used to load the low 16 bits of the offset of the
    271 symbol's address from the TCB, to be used for local-exec TLS accesses.
    272 
    273 @item tls_le_hi16
    274 
    275 This modifier is used to load the high 16 bits of the offset of the
    276 symbol's address from the TCB, to be used for local-exec TLS accesses.
    277 
    278 @item tls_le_ha16
    279 
    280 This modifier is like @code{tls_le_hi16}, but it adds one to the value
    281 if @code{tls_le_lo16} of the input value is negative.
    282 
    283 @item tls_gd_call
    284 
    285 This modifier is used to tag an instrution as the ``call'' part of a
    286 calling sequence for a TLS GD reference of its operand.
    287 
    288 @item tls_gd_add
    289 
    290 This modifier is used to tag an instruction as the ``add'' part of a
    291 calling sequence for a TLS GD reference of its operand.
    292 
    293 @item tls_ie_load
    294 
    295 This modifier is used to tag an instruction as the ``load'' part of a
    296 calling sequence for a TLS IE reference of its operand.
    297 
    298 @end table
    299 
    300 @node TILEPro Directives
    301 @section TILEPro Directives
    302 @cindex machine directives, TILEPro
    303 @cindex TILEPro machine directives
    304 
    305 @table @code
    306 
    307 @cindex @code{.align} directive, TILEPro
    308 @item .align @var{expression} [, @var{expression}]
    309 This is the generic @var{.align} directive.  The first argument is the
    310 requested alignment in bytes.
    311 
    312 @cindex @code{.allow_suspicious_bundles} directive, TILEPro
    313 @item .allow_suspicious_bundles
    314 Turns on error checking for combinations of instructions in a bundle
    315 that probably indicate a programming error.  This is on by default.
    316 
    317 @item .no_allow_suspicious_bundles
    318 Turns off error checking for combinations of instructions in a bundle
    319 that probably indicate a programming error.
    320 
    321 @cindex @code{.require_canonical_reg_names} directive, TILEPro
    322 @item .require_canonical_reg_names
    323 Require that canonical register names be used, and emit a warning if
    324 the numeric names are used.  This is on by default.
    325 
    326 @item .no_require_canonical_reg_names
    327 Permit the use of numeric names for registers that have canonical
    328 names.
    329 
    330 @end table
    331 
    332