1 @c Copyright (C) 2002-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 CRIS description contributed by Axis Communications. 5 @ifset GENERIC 6 @page 7 @node CRIS-Dependent 8 @chapter CRIS Dependent Features 9 @end ifset 10 @ifclear GENERIC 11 @node Machine Dependencies 12 @chapter CRIS Dependent Features 13 @end ifclear 14 15 @cindex CRIS support 16 @menu 17 * CRIS-Opts:: Command-line Options 18 * CRIS-Expand:: Instruction expansion 19 * CRIS-Symbols:: Symbols 20 * CRIS-Syntax:: Syntax 21 @end menu 22 23 @node CRIS-Opts 24 @section Command-line Options 25 26 @cindex options, CRIS 27 @cindex CRIS options 28 The CRIS version of @code{@value{AS}} has these 29 machine-dependent command-line options. 30 31 @cindex @option{--emulation=criself} command line option, CRIS 32 @cindex @option{--emulation=crisaout} command line option, CRIS 33 @cindex CRIS @option{--emulation=criself} command line option 34 @cindex CRIS @option{--emulation=crisaout} command line option 35 36 The format of the generated object files can be either ELF or 37 a.out, specified by the command-line options 38 @option{--emulation=crisaout} and @option{--emulation=criself}. 39 The default is ELF (criself), unless @code{@value{AS}} has been 40 configured specifically for a.out by using the configuration 41 name @code{cris-axis-aout}. 42 43 @cindex @option{--underscore} command line option, CRIS 44 @cindex @option{--no-underscore} command line option, CRIS 45 @cindex CRIS @option{--underscore} command line option 46 @cindex CRIS @option{--no-underscore} command line option 47 There are two different link-incompatible ELF object file 48 variants for CRIS, for use in environments where symbols are 49 expected to be prefixed by a leading @samp{_} character and for 50 environments without such a symbol prefix. The variant used for 51 GNU/Linux port has no symbol prefix. Which variant to produce 52 is specified by either of the options @option{--underscore} and 53 @option{--no-underscore}. The default is @option{--underscore}. 54 Since symbols in CRIS a.out objects are expected to have a 55 @samp{_} prefix, specifying @option{--no-underscore} when 56 generating a.out objects is an error. Besides the object format 57 difference, the effect of this option is to parse register names 58 differently (@pxref{crisnous}). The @option{--no-underscore} 59 option makes a @samp{$} register prefix mandatory. 60 61 @cindex @option{--pic} command line option, CRIS 62 @cindex CRIS @option{--pic} command line option 63 @cindex Position-independent code, CRIS 64 @cindex CRIS position-independent code 65 The option @option{--pic} must be passed to @code{@value{AS}} in 66 order to recognize the symbol syntax used for ELF (SVR4 PIC) 67 position-independent-code (@pxref{crispic}). This will also 68 affect expansion of instructions. The expansion with 69 @option{--pic} will use PC-relative rather than (slightly 70 faster) absolute addresses in those expansions. This option is only 71 valid when generating ELF format object files. 72 73 @cindex @option{--march=@var{architecture}} command line option, CRIS 74 @cindex CRIS @option{--march=@var{architecture}} command line option 75 @cindex Architecture variant option, CRIS 76 @cindex CRIS architecture variant option 77 The option @option{--march=@var{architecture}} 78 @anchor{march-option}specifies the recognized instruction set 79 and recognized register names. It also controls the 80 architecture type of the object file. Valid values for 81 @var{architecture} are: 82 @table @code 83 84 @item v0_v10 85 All instructions and register names for any architecture variant 86 in the set v0@dots{}v10 are recognized. This is the 87 default if the target is configured as cris-*. 88 89 @item v10 90 Only instructions and register names for CRIS v10 (as found in 91 ETRAX 100 LX) are recognized. This is the default if the target 92 is configured as crisv10-*. 93 94 @item v32 95 Only instructions and register names for CRIS v32 (code name 96 Guinness) are recognized. This is the default if the target is 97 configured as crisv32-*. This value implies 98 @option{--no-mul-bug-abort}. (A subsequent 99 @option{--mul-bug-abort} will turn it back on.) 100 101 @item common_v10_v32 102 Only instructions with register names and addressing modes with 103 opcodes common to the v10 and v32 are recognized. 104 @end table 105 106 @cindex @option{-N} command line option, CRIS 107 @cindex CRIS @option{-N} command line option 108 When @option{-N} is specified, @code{@value{AS}} will emit a 109 warning when a 16-bit branch instruction is expanded into a 110 32-bit multiple-instruction construct (@pxref{CRIS-Expand}). 111 112 @cindex @option{--no-mul-bug-abort} command line option, CRIS 113 @cindex @option{--mul-bug-abort} command line option, CRIS 114 @cindex CRIS @option{--no-mul-bug-abort} command line option 115 @cindex CRIS @option{--mul-bug-abort} command line option 116 117 Some versions of the CRIS v10, for example in the Etrax 100 LX, 118 contain a bug that causes destabilizing memory accesses when a 119 multiply instruction is executed with certain values in the 120 first operand just before a cache-miss. When the 121 @option{--mul-bug-abort} command line option is active (the 122 default value), @code{@value{AS}} will refuse to assemble a file 123 containing a multiply instruction at a dangerous offset, one 124 that could be the last on a cache-line, or is in a section with 125 insufficient alignment. This placement checking does not catch 126 any case where the multiply instruction is dangerously placed 127 because it is located in a delay-slot. The 128 @option{--mul-bug-abort} command line option turns off the 129 checking. 130 131 @node CRIS-Expand 132 @section Instruction expansion 133 134 @cindex instruction expansion, CRIS 135 @cindex CRIS instruction expansion 136 @code{@value{AS}} will silently choose an instruction that fits 137 the operand size for @samp{[register+constant]} operands. For 138 example, the offset @code{127} in @code{move.d [r3+127],r4} fits 139 in an instruction using a signed-byte offset. Similarly, 140 @code{move.d [r2+32767],r1} will generate an instruction using a 141 16-bit offset. For symbolic expressions and constants that do 142 not fit in 16 bits including the sign bit, a 32-bit offset is 143 generated. 144 145 For branches, @code{@value{AS}} will expand from a 16-bit branch 146 instruction into a sequence of instructions that can reach a 147 full 32-bit address. Since this does not correspond to a single 148 instruction, such expansions can optionally be warned about. 149 @xref{CRIS-Opts}. 150 151 If the operand is found to fit the range, a @code{lapc} mnemonic 152 will translate to a @code{lapcq} instruction. Use @code{lapc.d} 153 to force the 32-bit @code{lapc} instruction. 154 155 Similarly, the @code{addo} mnemonic will translate to the 156 shortest fitting instruction of @code{addoq}, @code{addo.w} and 157 @code{addo.d}, when used with a operand that is a constant known 158 at assembly time. 159 160 @node CRIS-Symbols 161 @section Symbols 162 @cindex Symbols, built-in, CRIS 163 @cindex Symbols, CRIS, built-in 164 @cindex CRIS built-in symbols 165 @cindex Built-in symbols, CRIS 166 167 Some symbols are defined by the assembler. They're intended to 168 be used in conditional assembly, for example: 169 @smallexample 170 .if ..asm.arch.cris.v32 171 @var{code for CRIS v32} 172 .elseif ..asm.arch.cris.common_v10_v32 173 @var{code common to CRIS v32 and CRIS v10} 174 .elseif ..asm.arch.cris.v10 | ..asm.arch.cris.any_v0_v10 175 @var{code for v10} 176 .else 177 .error "Code needs to be added here." 178 .endif 179 @end smallexample 180 181 These symbols are defined in the assembler, reflecting 182 command-line options, either when specified or the default. 183 They are always defined, to 0 or 1. 184 @table @code 185 186 @item ..asm.arch.cris.any_v0_v10 187 This symbol is non-zero when @option{--march=v0_v10} is specified 188 or the default. 189 190 @item ..asm.arch.cris.common_v10_v32 191 Set according to the option @option{--march=common_v10_v32}. 192 193 @item ..asm.arch.cris.v10 194 Reflects the option @option{--march=v10}. 195 196 @item ..asm.arch.cris.v32 197 Corresponds to @option{--march=v10}. 198 @end table 199 200 Speaking of symbols, when a symbol is used in code, it can have 201 a suffix modifying its value for use in position-independent 202 code. @xref{CRIS-Pic}. 203 204 @node CRIS-Syntax 205 @section Syntax 206 207 There are different aspects of the CRIS assembly syntax. 208 209 @menu 210 * CRIS-Chars:: Special Characters 211 * CRIS-Pic:: Position-Independent Code Symbols 212 * CRIS-Regs:: Register Names 213 * CRIS-Pseudos:: Assembler Directives 214 @end menu 215 216 @node CRIS-Chars 217 @subsection Special Characters 218 @cindex line comment characters, CRIS 219 @cindex CRIS line comment characters 220 221 The character @samp{#} is a line comment character. It starts a 222 comment if and only if it is placed at the beginning of a line. 223 224 A @samp{;} character starts a comment anywhere on the line, 225 causing all characters up to the end of the line to be ignored. 226 227 A @samp{@@} character is handled as a line separator equivalent 228 to a logical new-line character (except in a comment), so 229 separate instructions can be specified on a single line. 230 231 @node CRIS-Pic 232 @subsection Symbols in position-independent code 233 @cindex Symbols in position-independent code, CRIS 234 @cindex CRIS symbols in position-independent code 235 @cindex Position-independent code, symbols in, CRIS 236 237 When generating @anchor{crispic}position-independent code (SVR4 238 PIC) for use in cris-axis-linux-gnu or crisv32-axis-linux-gnu 239 shared libraries, symbol 240 suffixes are used to specify what kind of run-time symbol lookup 241 will be used, expressed in the object as different 242 @emph{relocation types}. Usually, all absolute symbol values 243 must be located in a table, the @emph{global offset table}, 244 leaving the code position-independent; independent of values of 245 global symbols and independent of the address of the code. The 246 suffix modifies the value of the symbol, into for example an 247 index into the global offset table where the real symbol value 248 is entered, or a PC-relative value, or a value relative to the 249 start of the global offset table. All symbol suffixes start 250 with the character @samp{:} (omitted in the list below). Every 251 symbol use in code or a read-only section must therefore have a 252 PIC suffix to enable a useful shared library to be created. 253 Usually, these constructs must not be used with an additive 254 constant offset as is usually allowed, i.e.@: no 4 as in 255 @code{symbol + 4} is allowed. This restriction is checked at 256 link-time, not at assembly-time. 257 258 @table @code 259 @item GOT 260 261 Attaching this suffix to a symbol in an instruction causes the 262 symbol to be entered into the global offset table. The value is 263 a 32-bit index for that symbol into the global offset table. 264 The name of the corresponding relocation is 265 @samp{R_CRIS_32_GOT}. Example: @code{move.d 266 [$r0+extsym:GOT],$r9} 267 268 @item GOT16 269 270 Same as for @samp{GOT}, but the value is a 16-bit index into the 271 global offset table. The corresponding relocation is 272 @samp{R_CRIS_16_GOT}. Example: @code{move.d 273 [$r0+asymbol:GOT16],$r10} 274 275 @item PLT 276 277 This suffix is used for function symbols. It causes a 278 @emph{procedure linkage table}, an array of code stubs, to be 279 created at the time the shared object is created or linked 280 against, together with a global offset table entry. The value 281 is a pc-relative offset to the corresponding stub code in the 282 procedure linkage table. This arrangement causes the run-time 283 symbol resolver to be called to look up and set the value of the 284 symbol the first time the function is called (at latest; 285 depending environment variables). It is only safe to leave the 286 symbol unresolved this way if all references are function calls. 287 The name of the relocation is @samp{R_CRIS_32_PLT_PCREL}. 288 Example: @code{add.d fnname:PLT,$pc} 289 290 @item PLTG 291 292 Like PLT, but the value is relative to the beginning of the 293 global offset table. The relocation is 294 @samp{R_CRIS_32_PLT_GOTREL}. Example: @code{move.d 295 fnname:PLTG,$r3} 296 297 @item GOTPLT 298 299 Similar to @samp{PLT}, but the value of the symbol is a 32-bit 300 index into the global offset table. This is somewhat of a mix 301 between the effect of the @samp{GOT} and the @samp{PLT} suffix; 302 the difference to @samp{GOT} is that there will be a procedure 303 linkage table entry created, and that the symbol is assumed to 304 be a function entry and will be resolved by the run-time 305 resolver as with @samp{PLT}. The relocation is 306 @samp{R_CRIS_32_GOTPLT}. Example: @code{jsr 307 [$r0+fnname:GOTPLT]} 308 309 @item GOTPLT16 310 311 A variant of @samp{GOTPLT} giving a 16-bit value. Its 312 relocation name is @samp{R_CRIS_16_GOTPLT}. Example: @code{jsr 313 [$r0+fnname:GOTPLT16]} 314 315 @item GOTOFF 316 317 This suffix must only be attached to a local symbol, but may be 318 used in an expression adding an offset. The value is the 319 address of the symbol relative to the start of the global offset 320 table. The relocation name is @samp{R_CRIS_32_GOTREL}. 321 Example: @code{move.d [$r0+localsym:GOTOFF],r3} 322 @end table 323 324 @node CRIS-Regs 325 @subsection Register names 326 @cindex register names, CRIS 327 @cindex CRIS register names 328 329 A @samp{$} character may always prefix a general or special 330 register name in an instruction operand but is mandatory when 331 the option @option{--no-underscore} is specified or when the 332 @code{.syntax register_prefix} directive is in effect 333 (@pxref{crisnous}). Register names are case-insensitive. 334 335 @node CRIS-Pseudos 336 @subsection Assembler Directives 337 @cindex assembler directives, CRIS 338 @cindex pseudo-ops, CRIS 339 @cindex CRIS assembler directives 340 @cindex CRIS pseudo-ops 341 342 There are a few CRIS-specific pseudo-directives in addition to 343 the generic ones. @xref{Pseudo Ops}. Constants emitted by 344 pseudo-directives are in little-endian order for CRIS. There is 345 no support for floating-point-specific directives for CRIS. 346 347 @table @code 348 @item .dword EXPRESSIONS 349 @cindex assembler directive .dword, CRIS 350 @cindex pseudo-op .dword, CRIS 351 @cindex CRIS assembler directive .dword 352 @cindex CRIS pseudo-op .dword 353 354 The @code{.dword} directive is a synonym for @code{.int}, 355 expecting zero or more EXPRESSIONS, separated by commas. For 356 each expression, a 32-bit little-endian constant is emitted. 357 358 @item .syntax ARGUMENT 359 @cindex assembler directive .syntax, CRIS 360 @cindex pseudo-op .syntax, CRIS 361 @cindex CRIS assembler directive .syntax 362 @cindex CRIS pseudo-op .syntax 363 The @code{.syntax} directive takes as @var{ARGUMENT} one of the 364 following case-sensitive choices. 365 366 @table @code 367 @item no_register_prefix 368 369 The @code{.syntax no_register_prefix} @anchor{crisnous}directive 370 makes a @samp{$} character prefix on all registers optional. It 371 overrides a previous setting, including the corresponding effect 372 of the option @option{--no-underscore}. If this directive is 373 used when ordinary symbols do not have a @samp{_} character 374 prefix, care must be taken to avoid ambiguities whether an 375 operand is a register or a symbol; using symbols with names the 376 same as general or special registers then invoke undefined 377 behavior. 378 379 @item register_prefix 380 381 This directive makes a @samp{$} character prefix on all 382 registers mandatory. It overrides a previous setting, including 383 the corresponding effect of the option @option{--underscore}. 384 385 @item leading_underscore 386 387 This is an assertion directive, emitting an error if the 388 @option{--no-underscore} option is in effect. 389 390 @item no_leading_underscore 391 392 This is the opposite of the @code{.syntax leading_underscore} 393 directive and emits an error if the option @option{--underscore} 394 is in effect. 395 @end table 396 397 @item .arch ARGUMENT 398 @cindex assembler directive .arch, CRIS 399 @cindex pseudo-op .arch, CRIS 400 @cindex CRIS assembler directive .arch 401 @cindex CRIS pseudo-op .arch 402 This is an assertion directive, giving an error if the specified 403 @var{ARGUMENT} is not the same as the specified or default value 404 for the @option{--march=@var{architecture}} option 405 (@pxref{march-option}). 406 407 @c If you compare with md_pseudo_table, you see that we don't 408 @c document ".file" and ".loc" here. This is because we're just 409 @c wrapping the corresponding ELF function and emitting an error for 410 @c a.out. 411 @end table 412