1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362
|
@c Copyright (C) 2011-2014 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
|