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