| 1 | This is as.info, produced by makeinfo version 4.3 from as.texinfo.
|
|---|
| 2 |
|
|---|
| 3 | START-INFO-DIR-ENTRY
|
|---|
| 4 | * As: (as). The GNU assembler.
|
|---|
| 5 | * Gas: (as). The GNU assembler.
|
|---|
| 6 | END-INFO-DIR-ENTRY
|
|---|
| 7 |
|
|---|
| 8 | This file documents the GNU Assembler "as".
|
|---|
| 9 |
|
|---|
| 10 | Copyright (C) 1991, 92, 93, 94, 95, 96, 97, 98, 99, 2000, 2001, 2002
|
|---|
| 11 | Free Software Foundation, Inc.
|
|---|
| 12 |
|
|---|
| 13 | Permission is granted to copy, distribute and/or modify this document
|
|---|
| 14 | under the terms of the GNU Free Documentation License, Version 1.1 or
|
|---|
| 15 | any later version published by the Free Software Foundation; with no
|
|---|
| 16 | Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
|
|---|
| 17 | Texts. A copy of the license is included in the section entitled "GNU
|
|---|
| 18 | Free Documentation License".
|
|---|
| 19 |
|
|---|
| 20 |
|
|---|
| 21 | File: as.info, Node: CRIS-Regs, Next: CRIS-Pseudos, Prev: CRIS-Pic, Up: CRIS-Syntax
|
|---|
| 22 |
|
|---|
| 23 | Register names
|
|---|
| 24 | ..............
|
|---|
| 25 |
|
|---|
| 26 | A `$' character may always prefix a general or special register name
|
|---|
| 27 | in an instruction operand but is mandatory when the option
|
|---|
| 28 | `--no-underscore' is specified or when the `.syntax register_prefix'
|
|---|
| 29 | directive is in effect (*note crisnous::). Register names are
|
|---|
| 30 | case-insensitive.
|
|---|
| 31 |
|
|---|
| 32 |
|
|---|
| 33 | File: as.info, Node: CRIS-Pseudos, Prev: CRIS-Regs, Up: CRIS-Syntax
|
|---|
| 34 |
|
|---|
| 35 | Assembler Directives
|
|---|
| 36 | ....................
|
|---|
| 37 |
|
|---|
| 38 | There are a few CRIS-specific pseudo-directives in addition to the
|
|---|
| 39 | generic ones. *Note Pseudo Ops::. Constants emitted by
|
|---|
| 40 | pseudo-directives are in little-endian order for CRIS. There is no
|
|---|
| 41 | support for floating-point-specific directives for CRIS.
|
|---|
| 42 |
|
|---|
| 43 | `.dword EXPRESSIONS'
|
|---|
| 44 | The `.dword' directive is a synonym for `.int', expecting zero or
|
|---|
| 45 | more EXPRESSIONS, separated by commas. For each expression, a
|
|---|
| 46 | 32-bit little-endian constant is emitted.
|
|---|
| 47 |
|
|---|
| 48 | `.syntax ARGUMENT'
|
|---|
| 49 | The `.syntax' directive takes as ARGUMENT one of the following
|
|---|
| 50 | case-sensitive choices.
|
|---|
| 51 |
|
|---|
| 52 | `no_register_prefix'
|
|---|
| 53 | The `.syntax no_register_prefix' directive makes a `$'
|
|---|
| 54 | character prefix on all registers optional. It overrides a
|
|---|
| 55 | previous setting, including the corresponding effect of the
|
|---|
| 56 | option `--no-underscore'. If this directive is used when
|
|---|
| 57 | ordinary symbols do not have a `_' character prefix, care
|
|---|
| 58 | must be taken to avoid ambiguities whether an operand is a
|
|---|
| 59 | register or a symbol; using symbols with names the same as
|
|---|
| 60 | general or special registers then invoke undefined behavior.
|
|---|
| 61 |
|
|---|
| 62 | `register_prefix'
|
|---|
| 63 | This directive makes a `$' character prefix on all registers
|
|---|
| 64 | mandatory. It overrides a previous setting, including the
|
|---|
| 65 | corresponding effect of the option `--underscore'.
|
|---|
| 66 |
|
|---|
| 67 | `leading_underscore'
|
|---|
| 68 | This is an assertion directive, emitting an error if the
|
|---|
| 69 | `--no-underscore' option is in effect.
|
|---|
| 70 |
|
|---|
| 71 | `no_leading_underscore'
|
|---|
| 72 | This is the opposite of the `.syntax leading_underscore'
|
|---|
| 73 | directive and emits an error if the option `--underscore' is
|
|---|
| 74 | in effect.
|
|---|
| 75 |
|
|---|
| 76 |
|
|---|
| 77 | File: as.info, Node: D10V-Dependent, Next: D30V-Dependent, Prev: CRIS-Dependent, Up: Machine Dependencies
|
|---|
| 78 |
|
|---|
| 79 | D10V Dependent Features
|
|---|
| 80 | =======================
|
|---|
| 81 |
|
|---|
| 82 | * Menu:
|
|---|
| 83 |
|
|---|
| 84 | * D10V-Opts:: D10V Options
|
|---|
| 85 | * D10V-Syntax:: Syntax
|
|---|
| 86 | * D10V-Float:: Floating Point
|
|---|
| 87 | * D10V-Opcodes:: Opcodes
|
|---|
| 88 |
|
|---|
| 89 |
|
|---|
| 90 | File: as.info, Node: D10V-Opts, Next: D10V-Syntax, Up: D10V-Dependent
|
|---|
| 91 |
|
|---|
| 92 | D10V Options
|
|---|
| 93 | ------------
|
|---|
| 94 |
|
|---|
| 95 | The Mitsubishi D10V version of `as' has a few machine dependent
|
|---|
| 96 | options.
|
|---|
| 97 |
|
|---|
| 98 | `-O'
|
|---|
| 99 | The D10V can often execute two sub-instructions in parallel. When
|
|---|
| 100 | this option is used, `as' will attempt to optimize its output by
|
|---|
| 101 | detecting when instructions can be executed in parallel.
|
|---|
| 102 |
|
|---|
| 103 | `--nowarnswap'
|
|---|
| 104 | To optimize execution performance, `as' will sometimes swap the
|
|---|
| 105 | order of instructions. Normally this generates a warning. When
|
|---|
| 106 | this option is used, no warning will be generated when
|
|---|
| 107 | instructions are swapped.
|
|---|
| 108 |
|
|---|
| 109 | `--gstabs-packing'
|
|---|
| 110 |
|
|---|
| 111 | `--no-gstabs-packing'
|
|---|
| 112 | `as' packs adjacent short instructions into a single packed
|
|---|
| 113 | instruction. `--no-gstabs-packing' turns instruction packing off if
|
|---|
| 114 | `--gstabs' is specified as well; `--gstabs-packing' (the default)
|
|---|
| 115 | turns instruction packing on even when `--gstabs' is specified.
|
|---|
| 116 |
|
|---|
| 117 |
|
|---|
| 118 | File: as.info, Node: D10V-Syntax, Next: D10V-Float, Prev: D10V-Opts, Up: D10V-Dependent
|
|---|
| 119 |
|
|---|
| 120 | Syntax
|
|---|
| 121 | ------
|
|---|
| 122 |
|
|---|
| 123 | The D10V syntax is based on the syntax in Mitsubishi's D10V
|
|---|
| 124 | architecture manual. The differences are detailed below.
|
|---|
| 125 |
|
|---|
| 126 | * Menu:
|
|---|
| 127 |
|
|---|
| 128 | * D10V-Size:: Size Modifiers
|
|---|
| 129 | * D10V-Subs:: Sub-Instructions
|
|---|
| 130 | * D10V-Chars:: Special Characters
|
|---|
| 131 | * D10V-Regs:: Register Names
|
|---|
| 132 | * D10V-Addressing:: Addressing Modes
|
|---|
| 133 | * D10V-Word:: @WORD Modifier
|
|---|
| 134 |
|
|---|
| 135 |
|
|---|
| 136 | File: as.info, Node: D10V-Size, Next: D10V-Subs, Up: D10V-Syntax
|
|---|
| 137 |
|
|---|
| 138 | Size Modifiers
|
|---|
| 139 | ..............
|
|---|
| 140 |
|
|---|
| 141 | The D10V version of `as' uses the instruction names in the D10V
|
|---|
| 142 | Architecture Manual. However, the names in the manual are sometimes
|
|---|
| 143 | ambiguous. There are instruction names that can assemble to a short or
|
|---|
| 144 | long form opcode. How does the assembler pick the correct form? `as'
|
|---|
| 145 | will always pick the smallest form if it can. When dealing with a
|
|---|
| 146 | symbol that is not defined yet when a line is being assembled, it will
|
|---|
| 147 | always use the long form. If you need to force the assembler to use
|
|---|
| 148 | either the short or long form of the instruction, you can append either
|
|---|
| 149 | `.s' (short) or `.l' (long) to it. For example, if you are writing an
|
|---|
| 150 | assembly program and you want to do a branch to a symbol that is
|
|---|
| 151 | defined later in your program, you can write `bra.s foo'. Objdump
|
|---|
| 152 | and GDB will always append `.s' or `.l' to instructions which have both
|
|---|
| 153 | short and long forms.
|
|---|
| 154 |
|
|---|
| 155 |
|
|---|
| 156 | File: as.info, Node: D10V-Subs, Next: D10V-Chars, Prev: D10V-Size, Up: D10V-Syntax
|
|---|
| 157 |
|
|---|
| 158 | Sub-Instructions
|
|---|
| 159 | ................
|
|---|
| 160 |
|
|---|
| 161 | The D10V assembler takes as input a series of instructions, either
|
|---|
| 162 | one-per-line, or in the special two-per-line format described in the
|
|---|
| 163 | next section. Some of these instructions will be short-form or
|
|---|
| 164 | sub-instructions. These sub-instructions can be packed into a single
|
|---|
| 165 | instruction. The assembler will do this automatically. It will also
|
|---|
| 166 | detect when it should not pack instructions. For example, when a label
|
|---|
| 167 | is defined, the next instruction will never be packaged with the
|
|---|
| 168 | previous one. Whenever a branch and link instruction is called, it
|
|---|
| 169 | will not be packaged with the next instruction so the return address
|
|---|
| 170 | will be valid. Nops are automatically inserted when necessary.
|
|---|
| 171 |
|
|---|
| 172 | If you do not want the assembler automatically making these
|
|---|
| 173 | decisions, you can control the packaging and execution type (parallel
|
|---|
| 174 | or sequential) with the special execution symbols described in the next
|
|---|
| 175 | section.
|
|---|
| 176 |
|
|---|
| 177 |
|
|---|
| 178 | File: as.info, Node: D10V-Chars, Next: D10V-Regs, Prev: D10V-Subs, Up: D10V-Syntax
|
|---|
| 179 |
|
|---|
| 180 | Special Characters
|
|---|
| 181 | ..................
|
|---|
| 182 |
|
|---|
| 183 | `;' and `#' are the line comment characters. Sub-instructions may
|
|---|
| 184 | be executed in order, in reverse-order, or in parallel. Instructions
|
|---|
| 185 | listed in the standard one-per-line format will be executed
|
|---|
| 186 | sequentially. To specify the executing order, use the following
|
|---|
| 187 | symbols:
|
|---|
| 188 | `->'
|
|---|
| 189 | Sequential with instruction on the left first.
|
|---|
| 190 |
|
|---|
| 191 | `<-'
|
|---|
| 192 | Sequential with instruction on the right first.
|
|---|
| 193 |
|
|---|
| 194 | `||'
|
|---|
| 195 | Parallel The D10V syntax allows either one instruction per line,
|
|---|
| 196 | one instruction per line with the execution symbol, or two instructions
|
|---|
| 197 | per line. For example
|
|---|
| 198 | `abs a1 -> abs r0'
|
|---|
| 199 | Execute these sequentially. The instruction on the right is in
|
|---|
| 200 | the right container and is executed second.
|
|---|
| 201 |
|
|---|
| 202 | `abs r0 <- abs a1'
|
|---|
| 203 | Execute these reverse-sequentially. The instruction on the right
|
|---|
| 204 | is in the right container, and is executed first.
|
|---|
| 205 |
|
|---|
| 206 | `ld2w r2,@r8+ || mac a0,r0,r7'
|
|---|
| 207 | Execute these in parallel.
|
|---|
| 208 |
|
|---|
| 209 | `ld2w r2,@r8+ ||'
|
|---|
| 210 | `mac a0,r0,r7'
|
|---|
| 211 | Two-line format. Execute these in parallel.
|
|---|
| 212 |
|
|---|
| 213 | `ld2w r2,@r8+'
|
|---|
| 214 | `mac a0,r0,r7'
|
|---|
| 215 | Two-line format. Execute these sequentially. Assembler will put
|
|---|
| 216 | them in the proper containers.
|
|---|
| 217 |
|
|---|
| 218 | `ld2w r2,@r8+ ->'
|
|---|
| 219 | `mac a0,r0,r7'
|
|---|
| 220 | Two-line format. Execute these sequentially. Same as above but
|
|---|
| 221 | second instruction will always go into right container. Since `$'
|
|---|
| 222 | has no special meaning, you may use it in symbol names.
|
|---|
| 223 |
|
|---|
| 224 |
|
|---|
| 225 | File: as.info, Node: D10V-Regs, Next: D10V-Addressing, Prev: D10V-Chars, Up: D10V-Syntax
|
|---|
| 226 |
|
|---|
| 227 | Register Names
|
|---|
| 228 | ..............
|
|---|
| 229 |
|
|---|
| 230 | You can use the predefined symbols `r0' through `r15' to refer to
|
|---|
| 231 | the D10V registers. You can also use `sp' as an alias for `r15'. The
|
|---|
| 232 | accumulators are `a0' and `a1'. There are special register-pair names
|
|---|
| 233 | that may optionally be used in opcodes that require even-numbered
|
|---|
| 234 | registers. Register names are not case sensitive.
|
|---|
| 235 |
|
|---|
| 236 | Register Pairs
|
|---|
| 237 | `r0-r1'
|
|---|
| 238 |
|
|---|
| 239 | `r2-r3'
|
|---|
| 240 |
|
|---|
| 241 | `r4-r5'
|
|---|
| 242 |
|
|---|
| 243 | `r6-r7'
|
|---|
| 244 |
|
|---|
| 245 | `r8-r9'
|
|---|
| 246 |
|
|---|
| 247 | `r10-r11'
|
|---|
| 248 |
|
|---|
| 249 | `r12-r13'
|
|---|
| 250 |
|
|---|
| 251 | `r14-r15'
|
|---|
| 252 | The D10V also has predefined symbols for these control registers and
|
|---|
| 253 | status bits:
|
|---|
| 254 | `psw'
|
|---|
| 255 | Processor Status Word
|
|---|
| 256 |
|
|---|
| 257 | `bpsw'
|
|---|
| 258 | Backup Processor Status Word
|
|---|
| 259 |
|
|---|
| 260 | `pc'
|
|---|
| 261 | Program Counter
|
|---|
| 262 |
|
|---|
| 263 | `bpc'
|
|---|
| 264 | Backup Program Counter
|
|---|
| 265 |
|
|---|
| 266 | `rpt_c'
|
|---|
| 267 | Repeat Count
|
|---|
| 268 |
|
|---|
| 269 | `rpt_s'
|
|---|
| 270 | Repeat Start address
|
|---|
| 271 |
|
|---|
| 272 | `rpt_e'
|
|---|
| 273 | Repeat End address
|
|---|
| 274 |
|
|---|
| 275 | `mod_s'
|
|---|
| 276 | Modulo Start address
|
|---|
| 277 |
|
|---|
| 278 | `mod_e'
|
|---|
| 279 | Modulo End address
|
|---|
| 280 |
|
|---|
| 281 | `iba'
|
|---|
| 282 | Instruction Break Address
|
|---|
| 283 |
|
|---|
| 284 | `f0'
|
|---|
| 285 | Flag 0
|
|---|
| 286 |
|
|---|
| 287 | `f1'
|
|---|
| 288 | Flag 1
|
|---|
| 289 |
|
|---|
| 290 | `c'
|
|---|
| 291 | Carry flag
|
|---|
| 292 |
|
|---|
| 293 |
|
|---|
| 294 | File: as.info, Node: D10V-Addressing, Next: D10V-Word, Prev: D10V-Regs, Up: D10V-Syntax
|
|---|
| 295 |
|
|---|
| 296 | Addressing Modes
|
|---|
| 297 | ................
|
|---|
| 298 |
|
|---|
| 299 | `as' understands the following addressing modes for the D10V. `RN'
|
|---|
| 300 | in the following refers to any of the numbered registers, but _not_ the
|
|---|
| 301 | control registers.
|
|---|
| 302 | `RN'
|
|---|
| 303 | Register direct
|
|---|
| 304 |
|
|---|
| 305 | `@RN'
|
|---|
| 306 | Register indirect
|
|---|
| 307 |
|
|---|
| 308 | `@RN+'
|
|---|
| 309 | Register indirect with post-increment
|
|---|
| 310 |
|
|---|
| 311 | `@RN-'
|
|---|
| 312 | Register indirect with post-decrement
|
|---|
| 313 |
|
|---|
| 314 | `@-SP'
|
|---|
| 315 | Register indirect with pre-decrement
|
|---|
| 316 |
|
|---|
| 317 | `@(DISP, RN)'
|
|---|
| 318 | Register indirect with displacement
|
|---|
| 319 |
|
|---|
| 320 | `ADDR'
|
|---|
| 321 | PC relative address (for branch or rep).
|
|---|
| 322 |
|
|---|
| 323 | `#IMM'
|
|---|
| 324 | Immediate data (the `#' is optional and ignored)
|
|---|
| 325 |
|
|---|
| 326 |
|
|---|
| 327 | File: as.info, Node: D10V-Word, Prev: D10V-Addressing, Up: D10V-Syntax
|
|---|
| 328 |
|
|---|
| 329 | @WORD Modifier
|
|---|
| 330 | ..............
|
|---|
| 331 |
|
|---|
| 332 | Any symbol followed by `@word' will be replaced by the symbol's value
|
|---|
| 333 | shifted right by 2. This is used in situations such as loading a
|
|---|
| 334 | register with the address of a function (or any other code fragment).
|
|---|
| 335 | For example, if you want to load a register with the location of the
|
|---|
| 336 | function `main' then jump to that function, you could do it as follows:
|
|---|
| 337 | ldi r2, main@word
|
|---|
| 338 | jmp r2
|
|---|
| 339 |
|
|---|
| 340 |
|
|---|
| 341 | File: as.info, Node: D10V-Float, Next: D10V-Opcodes, Prev: D10V-Syntax, Up: D10V-Dependent
|
|---|
| 342 |
|
|---|
| 343 | Floating Point
|
|---|
| 344 | --------------
|
|---|
| 345 |
|
|---|
| 346 | The D10V has no hardware floating point, but the `.float' and
|
|---|
| 347 | `.double' directives generates IEEE floating-point numbers for
|
|---|
| 348 | compatibility with other development tools.
|
|---|
| 349 |
|
|---|
| 350 |
|
|---|
| 351 | File: as.info, Node: D10V-Opcodes, Prev: D10V-Float, Up: D10V-Dependent
|
|---|
| 352 |
|
|---|
| 353 | Opcodes
|
|---|
| 354 | -------
|
|---|
| 355 |
|
|---|
| 356 | For detailed information on the D10V machine instruction set, see
|
|---|
| 357 | `D10V Architecture: A VLIW Microprocessor for Multimedia Applications'
|
|---|
| 358 | (Mitsubishi Electric Corp.). `as' implements all the standard D10V
|
|---|
| 359 | opcodes. The only changes are those described in the section on size
|
|---|
| 360 | modifiers
|
|---|
| 361 |
|
|---|
| 362 |
|
|---|
| 363 | File: as.info, Node: D30V-Dependent, Next: H8/300-Dependent, Prev: D10V-Dependent, Up: Machine Dependencies
|
|---|
| 364 |
|
|---|
| 365 | D30V Dependent Features
|
|---|
| 366 | =======================
|
|---|
| 367 |
|
|---|
| 368 | * Menu:
|
|---|
| 369 |
|
|---|
| 370 | * D30V-Opts:: D30V Options
|
|---|
| 371 | * D30V-Syntax:: Syntax
|
|---|
| 372 | * D30V-Float:: Floating Point
|
|---|
| 373 | * D30V-Opcodes:: Opcodes
|
|---|
| 374 |
|
|---|
| 375 |
|
|---|
| 376 | File: as.info, Node: D30V-Opts, Next: D30V-Syntax, Up: D30V-Dependent
|
|---|
| 377 |
|
|---|
| 378 | D30V Options
|
|---|
| 379 | ------------
|
|---|
| 380 |
|
|---|
| 381 | The Mitsubishi D30V version of `as' has a few machine dependent
|
|---|
| 382 | options.
|
|---|
| 383 |
|
|---|
| 384 | `-O'
|
|---|
| 385 | The D30V can often execute two sub-instructions in parallel. When
|
|---|
| 386 | this option is used, `as' will attempt to optimize its output by
|
|---|
| 387 | detecting when instructions can be executed in parallel.
|
|---|
| 388 |
|
|---|
| 389 | `-n'
|
|---|
| 390 | When this option is used, `as' will issue a warning every time it
|
|---|
| 391 | adds a nop instruction.
|
|---|
| 392 |
|
|---|
| 393 | `-N'
|
|---|
| 394 | When this option is used, `as' will issue a warning if it needs to
|
|---|
| 395 | insert a nop after a 32-bit multiply before a load or 16-bit
|
|---|
| 396 | multiply instruction.
|
|---|
| 397 |
|
|---|
| 398 |
|
|---|
| 399 | File: as.info, Node: D30V-Syntax, Next: D30V-Float, Prev: D30V-Opts, Up: D30V-Dependent
|
|---|
| 400 |
|
|---|
| 401 | Syntax
|
|---|
| 402 | ------
|
|---|
| 403 |
|
|---|
| 404 | The D30V syntax is based on the syntax in Mitsubishi's D30V
|
|---|
| 405 | architecture manual. The differences are detailed below.
|
|---|
| 406 |
|
|---|
| 407 | * Menu:
|
|---|
| 408 |
|
|---|
| 409 | * D30V-Size:: Size Modifiers
|
|---|
| 410 | * D30V-Subs:: Sub-Instructions
|
|---|
| 411 | * D30V-Chars:: Special Characters
|
|---|
| 412 | * D30V-Guarded:: Guarded Execution
|
|---|
| 413 | * D30V-Regs:: Register Names
|
|---|
| 414 | * D30V-Addressing:: Addressing Modes
|
|---|
| 415 |
|
|---|
| 416 |
|
|---|
| 417 | File: as.info, Node: D30V-Size, Next: D30V-Subs, Up: D30V-Syntax
|
|---|
| 418 |
|
|---|
| 419 | Size Modifiers
|
|---|
| 420 | ..............
|
|---|
| 421 |
|
|---|
| 422 | The D30V version of `as' uses the instruction names in the D30V
|
|---|
| 423 | Architecture Manual. However, the names in the manual are sometimes
|
|---|
| 424 | ambiguous. There are instruction names that can assemble to a short or
|
|---|
| 425 | long form opcode. How does the assembler pick the correct form? `as'
|
|---|
| 426 | will always pick the smallest form if it can. When dealing with a
|
|---|
| 427 | symbol that is not defined yet when a line is being assembled, it will
|
|---|
| 428 | always use the long form. If you need to force the assembler to use
|
|---|
| 429 | either the short or long form of the instruction, you can append either
|
|---|
| 430 | `.s' (short) or `.l' (long) to it. For example, if you are writing an
|
|---|
| 431 | assembly program and you want to do a branch to a symbol that is
|
|---|
| 432 | defined later in your program, you can write `bra.s foo'. Objdump and
|
|---|
| 433 | GDB will always append `.s' or `.l' to instructions which have both
|
|---|
| 434 | short and long forms.
|
|---|
| 435 |
|
|---|
| 436 |
|
|---|
| 437 | File: as.info, Node: D30V-Subs, Next: D30V-Chars, Prev: D30V-Size, Up: D30V-Syntax
|
|---|
| 438 |
|
|---|
| 439 | Sub-Instructions
|
|---|
| 440 | ................
|
|---|
| 441 |
|
|---|
| 442 | The D30V assembler takes as input a series of instructions, either
|
|---|
| 443 | one-per-line, or in the special two-per-line format described in the
|
|---|
| 444 | next section. Some of these instructions will be short-form or
|
|---|
| 445 | sub-instructions. These sub-instructions can be packed into a single
|
|---|
| 446 | instruction. The assembler will do this automatically. It will also
|
|---|
| 447 | detect when it should not pack instructions. For example, when a label
|
|---|
| 448 | is defined, the next instruction will never be packaged with the
|
|---|
| 449 | previous one. Whenever a branch and link instruction is called, it
|
|---|
| 450 | will not be packaged with the next instruction so the return address
|
|---|
| 451 | will be valid. Nops are automatically inserted when necessary.
|
|---|
| 452 |
|
|---|
| 453 | If you do not want the assembler automatically making these
|
|---|
| 454 | decisions, you can control the packaging and execution type (parallel
|
|---|
| 455 | or sequential) with the special execution symbols described in the next
|
|---|
| 456 | section.
|
|---|
| 457 |
|
|---|
| 458 |
|
|---|
| 459 | File: as.info, Node: D30V-Chars, Next: D30V-Guarded, Prev: D30V-Subs, Up: D30V-Syntax
|
|---|
| 460 |
|
|---|
| 461 | Special Characters
|
|---|
| 462 | ..................
|
|---|
| 463 |
|
|---|
| 464 | `;' and `#' are the line comment characters. Sub-instructions may
|
|---|
| 465 | be executed in order, in reverse-order, or in parallel. Instructions
|
|---|
| 466 | listed in the standard one-per-line format will be executed
|
|---|
| 467 | sequentially unless you use the `-O' option.
|
|---|
| 468 |
|
|---|
| 469 | To specify the executing order, use the following symbols:
|
|---|
| 470 | `->'
|
|---|
| 471 | Sequential with instruction on the left first.
|
|---|
| 472 |
|
|---|
| 473 | `<-'
|
|---|
| 474 | Sequential with instruction on the right first.
|
|---|
| 475 |
|
|---|
| 476 | `||'
|
|---|
| 477 | Parallel
|
|---|
| 478 |
|
|---|
| 479 | The D30V syntax allows either one instruction per line, one
|
|---|
| 480 | instruction per line with the execution symbol, or two instructions per
|
|---|
| 481 | line. For example
|
|---|
| 482 | `abs r2,r3 -> abs r4,r5'
|
|---|
| 483 | Execute these sequentially. The instruction on the right is in
|
|---|
| 484 | the right container and is executed second.
|
|---|
| 485 |
|
|---|
| 486 | `abs r2,r3 <- abs r4,r5'
|
|---|
| 487 | Execute these reverse-sequentially. The instruction on the right
|
|---|
| 488 | is in the right container, and is executed first.
|
|---|
| 489 |
|
|---|
| 490 | `abs r2,r3 || abs r4,r5'
|
|---|
| 491 | Execute these in parallel.
|
|---|
| 492 |
|
|---|
| 493 | `ldw r2,@(r3,r4) ||'
|
|---|
| 494 | `mulx r6,r8,r9'
|
|---|
| 495 | Two-line format. Execute these in parallel.
|
|---|
| 496 |
|
|---|
| 497 | `mulx a0,r8,r9'
|
|---|
| 498 | `stw r2,@(r3,r4)'
|
|---|
| 499 | Two-line format. Execute these sequentially unless `-O' option is
|
|---|
| 500 | used. If the `-O' option is used, the assembler will determine if
|
|---|
| 501 | the instructions could be done in parallel (the above two
|
|---|
| 502 | instructions can be done in parallel), and if so, emit them as
|
|---|
| 503 | parallel instructions. The assembler will put them in the proper
|
|---|
| 504 | containers. In the above example, the assembler will put the
|
|---|
| 505 | `stw' instruction in left container and the `mulx' instruction in
|
|---|
| 506 | the right container.
|
|---|
| 507 |
|
|---|
| 508 | `stw r2,@(r3,r4) ->'
|
|---|
| 509 | `mulx a0,r8,r9'
|
|---|
| 510 | Two-line format. Execute the `stw' instruction followed by the
|
|---|
| 511 | `mulx' instruction sequentially. The first instruction goes in the
|
|---|
| 512 | left container and the second instruction goes into right
|
|---|
| 513 | container. The assembler will give an error if the machine
|
|---|
| 514 | ordering constraints are violated.
|
|---|
| 515 |
|
|---|
| 516 | `stw r2,@(r3,r4) <-'
|
|---|
| 517 | `mulx a0,r8,r9'
|
|---|
| 518 | Same as previous example, except that the `mulx' instruction is
|
|---|
| 519 | executed before the `stw' instruction.
|
|---|
| 520 |
|
|---|
| 521 | Since `$' has no special meaning, you may use it in symbol names.
|
|---|
| 522 |
|
|---|
| 523 |
|
|---|
| 524 | File: as.info, Node: D30V-Guarded, Next: D30V-Regs, Prev: D30V-Chars, Up: D30V-Syntax
|
|---|
| 525 |
|
|---|
| 526 | Guarded Execution
|
|---|
| 527 | .................
|
|---|
| 528 |
|
|---|
| 529 | `as' supports the full range of guarded execution directives for
|
|---|
| 530 | each instruction. Just append the directive after the instruction
|
|---|
| 531 | proper. The directives are:
|
|---|
| 532 |
|
|---|
| 533 | `/tx'
|
|---|
| 534 | Execute the instruction if flag f0 is true.
|
|---|
| 535 |
|
|---|
| 536 | `/fx'
|
|---|
| 537 | Execute the instruction if flag f0 is false.
|
|---|
| 538 |
|
|---|
| 539 | `/xt'
|
|---|
| 540 | Execute the instruction if flag f1 is true.
|
|---|
| 541 |
|
|---|
| 542 | `/xf'
|
|---|
| 543 | Execute the instruction if flag f1 is false.
|
|---|
| 544 |
|
|---|
| 545 | `/tt'
|
|---|
| 546 | Execute the instruction if both flags f0 and f1 are true.
|
|---|
| 547 |
|
|---|
| 548 | `/tf'
|
|---|
| 549 | Execute the instruction if flag f0 is true and flag f1 is false.
|
|---|
| 550 |
|
|---|
| 551 |
|
|---|
| 552 | File: as.info, Node: D30V-Regs, Next: D30V-Addressing, Prev: D30V-Guarded, Up: D30V-Syntax
|
|---|
| 553 |
|
|---|
| 554 | Register Names
|
|---|
| 555 | ..............
|
|---|
| 556 |
|
|---|
| 557 | You can use the predefined symbols `r0' through `r63' to refer to
|
|---|
| 558 | the D30V registers. You can also use `sp' as an alias for `r63' and
|
|---|
| 559 | `link' as an alias for `r62'. The accumulators are `a0' and `a1'.
|
|---|
| 560 |
|
|---|
| 561 | The D30V also has predefined symbols for these control registers and
|
|---|
| 562 | status bits:
|
|---|
| 563 | `psw'
|
|---|
| 564 | Processor Status Word
|
|---|
| 565 |
|
|---|
| 566 | `bpsw'
|
|---|
| 567 | Backup Processor Status Word
|
|---|
| 568 |
|
|---|
| 569 | `pc'
|
|---|
| 570 | Program Counter
|
|---|
| 571 |
|
|---|
| 572 | `bpc'
|
|---|
| 573 | Backup Program Counter
|
|---|
| 574 |
|
|---|
| 575 | `rpt_c'
|
|---|
| 576 | Repeat Count
|
|---|
| 577 |
|
|---|
| 578 | `rpt_s'
|
|---|
| 579 | Repeat Start address
|
|---|
| 580 |
|
|---|
| 581 | `rpt_e'
|
|---|
| 582 | Repeat End address
|
|---|
| 583 |
|
|---|
| 584 | `mod_s'
|
|---|
| 585 | Modulo Start address
|
|---|
| 586 |
|
|---|
| 587 | `mod_e'
|
|---|
| 588 | Modulo End address
|
|---|
| 589 |
|
|---|
| 590 | `iba'
|
|---|
| 591 | Instruction Break Address
|
|---|
| 592 |
|
|---|
| 593 | `f0'
|
|---|
| 594 | Flag 0
|
|---|
| 595 |
|
|---|
| 596 | `f1'
|
|---|
| 597 | Flag 1
|
|---|
| 598 |
|
|---|
| 599 | `f2'
|
|---|
| 600 | Flag 2
|
|---|
| 601 |
|
|---|
| 602 | `f3'
|
|---|
| 603 | Flag 3
|
|---|
| 604 |
|
|---|
| 605 | `f4'
|
|---|
| 606 | Flag 4
|
|---|
| 607 |
|
|---|
| 608 | `f5'
|
|---|
| 609 | Flag 5
|
|---|
| 610 |
|
|---|
| 611 | `f6'
|
|---|
| 612 | Flag 6
|
|---|
| 613 |
|
|---|
| 614 | `f7'
|
|---|
| 615 | Flag 7
|
|---|
| 616 |
|
|---|
| 617 | `s'
|
|---|
| 618 | Same as flag 4 (saturation flag)
|
|---|
| 619 |
|
|---|
| 620 | `v'
|
|---|
| 621 | Same as flag 5 (overflow flag)
|
|---|
| 622 |
|
|---|
| 623 | `va'
|
|---|
| 624 | Same as flag 6 (sticky overflow flag)
|
|---|
| 625 |
|
|---|
| 626 | `c'
|
|---|
| 627 | Same as flag 7 (carry/borrow flag)
|
|---|
| 628 |
|
|---|
| 629 | `b'
|
|---|
| 630 | Same as flag 7 (carry/borrow flag)
|
|---|
| 631 |
|
|---|
| 632 |
|
|---|
| 633 | File: as.info, Node: D30V-Addressing, Prev: D30V-Regs, Up: D30V-Syntax
|
|---|
| 634 |
|
|---|
| 635 | Addressing Modes
|
|---|
| 636 | ................
|
|---|
| 637 |
|
|---|
| 638 | `as' understands the following addressing modes for the D30V. `RN'
|
|---|
| 639 | in the following refers to any of the numbered registers, but _not_ the
|
|---|
| 640 | control registers.
|
|---|
| 641 | `RN'
|
|---|
| 642 | Register direct
|
|---|
| 643 |
|
|---|
| 644 | `@RN'
|
|---|
| 645 | Register indirect
|
|---|
| 646 |
|
|---|
| 647 | `@RN+'
|
|---|
| 648 | Register indirect with post-increment
|
|---|
| 649 |
|
|---|
| 650 | `@RN-'
|
|---|
| 651 | Register indirect with post-decrement
|
|---|
| 652 |
|
|---|
| 653 | `@-SP'
|
|---|
| 654 | Register indirect with pre-decrement
|
|---|
| 655 |
|
|---|
| 656 | `@(DISP, RN)'
|
|---|
| 657 | Register indirect with displacement
|
|---|
| 658 |
|
|---|
| 659 | `ADDR'
|
|---|
| 660 | PC relative address (for branch or rep).
|
|---|
| 661 |
|
|---|
| 662 | `#IMM'
|
|---|
| 663 | Immediate data (the `#' is optional and ignored)
|
|---|
| 664 |
|
|---|
| 665 |
|
|---|
| 666 | File: as.info, Node: D30V-Float, Next: D30V-Opcodes, Prev: D30V-Syntax, Up: D30V-Dependent
|
|---|
| 667 |
|
|---|
| 668 | Floating Point
|
|---|
| 669 | --------------
|
|---|
| 670 |
|
|---|
| 671 | The D30V has no hardware floating point, but the `.float' and
|
|---|
| 672 | `.double' directives generates IEEE floating-point numbers for
|
|---|
| 673 | compatibility with other development tools.
|
|---|
| 674 |
|
|---|
| 675 |
|
|---|
| 676 | File: as.info, Node: D30V-Opcodes, Prev: D30V-Float, Up: D30V-Dependent
|
|---|
| 677 |
|
|---|
| 678 | Opcodes
|
|---|
| 679 | -------
|
|---|
| 680 |
|
|---|
| 681 | For detailed information on the D30V machine instruction set, see
|
|---|
| 682 | `D30V Architecture: A VLIW Microprocessor for Multimedia Applications'
|
|---|
| 683 | (Mitsubishi Electric Corp.). `as' implements all the standard D30V
|
|---|
| 684 | opcodes. The only changes are those described in the section on size
|
|---|
| 685 | modifiers
|
|---|
| 686 |
|
|---|
| 687 |
|
|---|
| 688 | File: as.info, Node: H8/300-Dependent, Next: H8/500-Dependent, Prev: D30V-Dependent, Up: Machine Dependencies
|
|---|
| 689 |
|
|---|
| 690 | H8/300 Dependent Features
|
|---|
| 691 | =========================
|
|---|
| 692 |
|
|---|
| 693 | * Menu:
|
|---|
| 694 |
|
|---|
| 695 | * H8/300 Options:: Options
|
|---|
| 696 | * H8/300 Syntax:: Syntax
|
|---|
| 697 | * H8/300 Floating Point:: Floating Point
|
|---|
| 698 | * H8/300 Directives:: H8/300 Machine Directives
|
|---|
| 699 | * H8/300 Opcodes:: Opcodes
|
|---|
| 700 |
|
|---|
| 701 |
|
|---|
| 702 | File: as.info, Node: H8/300 Options, Next: H8/300 Syntax, Up: H8/300-Dependent
|
|---|
| 703 |
|
|---|
| 704 | Options
|
|---|
| 705 | -------
|
|---|
| 706 |
|
|---|
| 707 | `as' has no additional command-line options for the Renesas
|
|---|
| 708 | (formerly Hitachi) H8/300 family.
|
|---|
| 709 |
|
|---|
| 710 |
|
|---|
| 711 | File: as.info, Node: H8/300 Syntax, Next: H8/300 Floating Point, Prev: H8/300 Options, Up: H8/300-Dependent
|
|---|
| 712 |
|
|---|
| 713 | Syntax
|
|---|
| 714 | ------
|
|---|
| 715 |
|
|---|
| 716 | * Menu:
|
|---|
| 717 |
|
|---|
| 718 | * H8/300-Chars:: Special Characters
|
|---|
| 719 | * H8/300-Regs:: Register Names
|
|---|
| 720 | * H8/300-Addressing:: Addressing Modes
|
|---|
| 721 |
|
|---|
| 722 |
|
|---|
| 723 | File: as.info, Node: H8/300-Chars, Next: H8/300-Regs, Up: H8/300 Syntax
|
|---|
| 724 |
|
|---|
| 725 | Special Characters
|
|---|
| 726 | ..................
|
|---|
| 727 |
|
|---|
| 728 | `;' is the line comment character.
|
|---|
| 729 |
|
|---|
| 730 | `$' can be used instead of a newline to separate statements.
|
|---|
| 731 | Therefore _you may not use `$' in symbol names_ on the H8/300.
|
|---|
| 732 |
|
|---|
| 733 |
|
|---|
| 734 | File: as.info, Node: H8/300-Regs, Next: H8/300-Addressing, Prev: H8/300-Chars, Up: H8/300 Syntax
|
|---|
| 735 |
|
|---|
| 736 | Register Names
|
|---|
| 737 | ..............
|
|---|
| 738 |
|
|---|
| 739 | You can use predefined symbols of the form `rNh' and `rNl' to refer
|
|---|
| 740 | to the H8/300 registers as sixteen 8-bit general-purpose registers. N
|
|---|
| 741 | is a digit from `0' to `7'); for instance, both `r0h' and `r7l' are
|
|---|
| 742 | valid register names.
|
|---|
| 743 |
|
|---|
| 744 | You can also use the eight predefined symbols `rN' to refer to the
|
|---|
| 745 | H8/300 registers as 16-bit registers (you must use this form for
|
|---|
| 746 | addressing).
|
|---|
| 747 |
|
|---|
| 748 | On the H8/300H, you can also use the eight predefined symbols `erN'
|
|---|
| 749 | (`er0' ... `er7') to refer to the 32-bit general purpose registers.
|
|---|
| 750 |
|
|---|
| 751 | The two control registers are called `pc' (program counter; a 16-bit
|
|---|
| 752 | register, except on the H8/300H where it is 24 bits) and `ccr'
|
|---|
| 753 | (condition code register; an 8-bit register). `r7' is used as the
|
|---|
| 754 | stack pointer, and can also be called `sp'.
|
|---|
| 755 |
|
|---|
| 756 |
|
|---|
| 757 | File: as.info, Node: H8/300-Addressing, Prev: H8/300-Regs, Up: H8/300 Syntax
|
|---|
| 758 |
|
|---|
| 759 | Addressing Modes
|
|---|
| 760 | ................
|
|---|
| 761 |
|
|---|
| 762 | as understands the following addressing modes for the H8/300:
|
|---|
| 763 | `rN'
|
|---|
| 764 | Register direct
|
|---|
| 765 |
|
|---|
| 766 | `@rN'
|
|---|
| 767 | Register indirect
|
|---|
| 768 |
|
|---|
| 769 | `@(D, rN)'
|
|---|
| 770 | `@(D:16, rN)'
|
|---|
| 771 | `@(D:24, rN)'
|
|---|
| 772 | Register indirect: 16-bit or 24-bit displacement D from register
|
|---|
| 773 | N. (24-bit displacements are only meaningful on the H8/300H.)
|
|---|
| 774 |
|
|---|
| 775 | `@rN+'
|
|---|
| 776 | Register indirect with post-increment
|
|---|
| 777 |
|
|---|
| 778 | `@-rN'
|
|---|
| 779 | Register indirect with pre-decrement
|
|---|
| 780 |
|
|---|
| 781 | ``@'AA'
|
|---|
| 782 | ``@'AA:8'
|
|---|
| 783 | ``@'AA:16'
|
|---|
| 784 | ``@'AA:24'
|
|---|
| 785 | Absolute address `aa'. (The address size `:24' only makes sense
|
|---|
| 786 | on the H8/300H.)
|
|---|
| 787 |
|
|---|
| 788 | `#XX'
|
|---|
| 789 | `#XX:8'
|
|---|
| 790 | `#XX:16'
|
|---|
| 791 | `#XX:32'
|
|---|
| 792 | Immediate data XX. You may specify the `:8', `:16', or `:32' for
|
|---|
| 793 | clarity, if you wish; but `as' neither requires this nor uses
|
|---|
| 794 | it--the data size required is taken from context.
|
|---|
| 795 |
|
|---|
| 796 | ``@'`@'AA'
|
|---|
| 797 | ``@'`@'AA:8'
|
|---|
| 798 | Memory indirect. You may specify the `:8' for clarity, if you
|
|---|
| 799 | wish; but `as' neither requires this nor uses it.
|
|---|
| 800 |
|
|---|
| 801 |
|
|---|
| 802 | File: as.info, Node: H8/300 Floating Point, Next: H8/300 Directives, Prev: H8/300 Syntax, Up: H8/300-Dependent
|
|---|
| 803 |
|
|---|
| 804 | Floating Point
|
|---|
| 805 | --------------
|
|---|
| 806 |
|
|---|
| 807 | The H8/300 family has no hardware floating point, but the `.float'
|
|---|
| 808 | directive generates IEEE floating-point numbers for compatibility with
|
|---|
| 809 | other development tools.
|
|---|
| 810 |
|
|---|
| 811 |
|
|---|
| 812 | File: as.info, Node: H8/300 Directives, Next: H8/300 Opcodes, Prev: H8/300 Floating Point, Up: H8/300-Dependent
|
|---|
| 813 |
|
|---|
| 814 | H8/300 Machine Directives
|
|---|
| 815 | -------------------------
|
|---|
| 816 |
|
|---|
| 817 | `as' has the following machine-dependent directives for the H8/300:
|
|---|
| 818 |
|
|---|
| 819 | `.h8300h'
|
|---|
| 820 | Recognize and emit additional instructions for the H8/300H
|
|---|
| 821 | variant, and also make `.int' emit 32-bit numbers rather than the
|
|---|
| 822 | usual (16-bit) for the H8/300 family.
|
|---|
| 823 |
|
|---|
| 824 | `.h8300s'
|
|---|
| 825 | Recognize and emit additional instructions for the H8S variant, and
|
|---|
| 826 | also make `.int' emit 32-bit numbers rather than the usual (16-bit)
|
|---|
| 827 | for the H8/300 family.
|
|---|
| 828 |
|
|---|
| 829 | `.h8300hn'
|
|---|
| 830 | Recognize and emit additional instructions for the H8/300H variant
|
|---|
| 831 | in normal mode, and also make `.int' emit 32-bit numbers rather
|
|---|
| 832 | than the usual (16-bit) for the H8/300 family.
|
|---|
| 833 |
|
|---|
| 834 | `.h8300sn'
|
|---|
| 835 | Recognize and emit additional instructions for the H8S variant in
|
|---|
| 836 | normal mode, and also make `.int' emit 32-bit numbers rather than
|
|---|
| 837 | the usual (16-bit) for the H8/300 family.
|
|---|
| 838 |
|
|---|
| 839 | On the H8/300 family (including the H8/300H) `.word' directives
|
|---|
| 840 | generate 16-bit numbers.
|
|---|
| 841 |
|
|---|
| 842 |
|
|---|
| 843 | File: as.info, Node: H8/300 Opcodes, Prev: H8/300 Directives, Up: H8/300-Dependent
|
|---|
| 844 |
|
|---|
| 845 | Opcodes
|
|---|
| 846 | -------
|
|---|
| 847 |
|
|---|
| 848 | For detailed information on the H8/300 machine instruction set, see
|
|---|
| 849 | `H8/300 Series Programming Manual'. For information specific to the
|
|---|
| 850 | H8/300H, see `H8/300H Series Programming Manual' (Renesas).
|
|---|
| 851 |
|
|---|
| 852 | `as' implements all the standard H8/300 opcodes. No additional
|
|---|
| 853 | pseudo-instructions are needed on this family.
|
|---|
| 854 |
|
|---|
| 855 | The following table summarizes the H8/300 opcodes, and their
|
|---|
| 856 | arguments. Entries marked `*' are opcodes used only on the H8/300H.
|
|---|
| 857 |
|
|---|
| 858 | Legend:
|
|---|
| 859 | Rs source register
|
|---|
| 860 | Rd destination register
|
|---|
| 861 | abs absolute address
|
|---|
| 862 | imm immediate data
|
|---|
| 863 | disp:N N-bit displacement from a register
|
|---|
| 864 | pcrel:N N-bit displacement relative to program counter
|
|---|
| 865 |
|
|---|
| 866 | add.b #imm,rd * andc #imm,ccr
|
|---|
| 867 | add.b rs,rd band #imm,rd
|
|---|
| 868 | add.w rs,rd band #imm,@rd
|
|---|
| 869 | * add.w #imm,rd band #imm,@abs:8
|
|---|
| 870 | * add.l rs,rd bra pcrel:8
|
|---|
| 871 | * add.l #imm,rd * bra pcrel:16
|
|---|
| 872 | adds #imm,rd bt pcrel:8
|
|---|
| 873 | addx #imm,rd * bt pcrel:16
|
|---|
| 874 | addx rs,rd brn pcrel:8
|
|---|
| 875 | and.b #imm,rd * brn pcrel:16
|
|---|
| 876 | and.b rs,rd bf pcrel:8
|
|---|
| 877 | * and.w rs,rd * bf pcrel:16
|
|---|
| 878 | * and.w #imm,rd bhi pcrel:8
|
|---|
| 879 | * and.l #imm,rd * bhi pcrel:16
|
|---|
| 880 | * and.l rs,rd bls pcrel:8
|
|---|
| 881 |
|
|---|
| 882 | * bls pcrel:16 bld #imm,rd
|
|---|
| 883 | bcc pcrel:8 bld #imm,@rd
|
|---|
| 884 | * bcc pcrel:16 bld #imm,@abs:8
|
|---|
| 885 | bhs pcrel:8 bnot #imm,rd
|
|---|
| 886 | * bhs pcrel:16 bnot #imm,@rd
|
|---|
| 887 | bcs pcrel:8 bnot #imm,@abs:8
|
|---|
| 888 | * bcs pcrel:16 bnot rs,rd
|
|---|
| 889 | blo pcrel:8 bnot rs,@rd
|
|---|
| 890 | * blo pcrel:16 bnot rs,@abs:8
|
|---|
| 891 | bne pcrel:8 bor #imm,rd
|
|---|
| 892 | * bne pcrel:16 bor #imm,@rd
|
|---|
| 893 | beq pcrel:8 bor #imm,@abs:8
|
|---|
| 894 | * beq pcrel:16 bset #imm,rd
|
|---|
| 895 | bvc pcrel:8 bset #imm,@rd
|
|---|
| 896 | * bvc pcrel:16 bset #imm,@abs:8
|
|---|
| 897 | bvs pcrel:8 bset rs,rd
|
|---|
| 898 | * bvs pcrel:16 bset rs,@rd
|
|---|
| 899 | bpl pcrel:8 bset rs,@abs:8
|
|---|
| 900 | * bpl pcrel:16 bsr pcrel:8
|
|---|
| 901 | bmi pcrel:8 bsr pcrel:16
|
|---|
| 902 | * bmi pcrel:16 bst #imm,rd
|
|---|
| 903 | bge pcrel:8 bst #imm,@rd
|
|---|
| 904 | * bge pcrel:16 bst #imm,@abs:8
|
|---|
| 905 | blt pcrel:8 btst #imm,rd
|
|---|
| 906 | * blt pcrel:16 btst #imm,@rd
|
|---|
| 907 | bgt pcrel:8 btst #imm,@abs:8
|
|---|
| 908 | * bgt pcrel:16 btst rs,rd
|
|---|
| 909 | ble pcrel:8 btst rs,@rd
|
|---|
| 910 | * ble pcrel:16 btst rs,@abs:8
|
|---|
| 911 | bclr #imm,rd bxor #imm,rd
|
|---|
| 912 | bclr #imm,@rd bxor #imm,@rd
|
|---|
| 913 | bclr #imm,@abs:8 bxor #imm,@abs:8
|
|---|
| 914 | bclr rs,rd cmp.b #imm,rd
|
|---|
| 915 | bclr rs,@rd cmp.b rs,rd
|
|---|
| 916 | bclr rs,@abs:8 cmp.w rs,rd
|
|---|
| 917 | biand #imm,rd cmp.w rs,rd
|
|---|
| 918 | biand #imm,@rd * cmp.w #imm,rd
|
|---|
| 919 | biand #imm,@abs:8 * cmp.l #imm,rd
|
|---|
| 920 | bild #imm,rd * cmp.l rs,rd
|
|---|
| 921 | bild #imm,@rd daa rs
|
|---|
| 922 | bild #imm,@abs:8 das rs
|
|---|
| 923 | bior #imm,rd dec.b rs
|
|---|
| 924 | bior #imm,@rd * dec.w #imm,rd
|
|---|
| 925 | bior #imm,@abs:8 * dec.l #imm,rd
|
|---|
| 926 | bist #imm,rd divxu.b rs,rd
|
|---|
| 927 | bist #imm,@rd * divxu.w rs,rd
|
|---|
| 928 | bist #imm,@abs:8 * divxs.b rs,rd
|
|---|
| 929 | bixor #imm,rd * divxs.w rs,rd
|
|---|
| 930 | bixor #imm,@rd eepmov
|
|---|
| 931 | bixor #imm,@abs:8 * eepmovw
|
|---|
| 932 |
|
|---|
| 933 | * exts.w rd mov.w rs,@abs:16
|
|---|
| 934 | * exts.l rd * mov.l #imm,rd
|
|---|
| 935 | * extu.w rd * mov.l rs,rd
|
|---|
| 936 | * extu.l rd * mov.l @rs,rd
|
|---|
| 937 | inc rs * mov.l @(disp:16,rs),rd
|
|---|
| 938 | * inc.w #imm,rd * mov.l @(disp:24,rs),rd
|
|---|
| 939 | * inc.l #imm,rd * mov.l @rs+,rd
|
|---|
| 940 | jmp @rs * mov.l @abs:16,rd
|
|---|
| 941 | jmp abs * mov.l @abs:24,rd
|
|---|
| 942 | jmp @@abs:8 * mov.l rs,@rd
|
|---|
| 943 | jsr @rs * mov.l rs,@(disp:16,rd)
|
|---|
| 944 | jsr abs * mov.l rs,@(disp:24,rd)
|
|---|
| 945 | jsr @@abs:8 * mov.l rs,@-rd
|
|---|
| 946 | ldc #imm,ccr * mov.l rs,@abs:16
|
|---|
| 947 | ldc rs,ccr * mov.l rs,@abs:24
|
|---|
| 948 | * ldc @abs:16,ccr movfpe @abs:16,rd
|
|---|
| 949 | * ldc @abs:24,ccr movtpe rs,@abs:16
|
|---|
| 950 | * ldc @(disp:16,rs),ccr mulxu.b rs,rd
|
|---|
| 951 | * ldc @(disp:24,rs),ccr * mulxu.w rs,rd
|
|---|
| 952 | * ldc @rs+,ccr * mulxs.b rs,rd
|
|---|
| 953 | * ldc @rs,ccr * mulxs.w rs,rd
|
|---|
| 954 | * mov.b @(disp:24,rs),rd neg.b rs
|
|---|
| 955 | * mov.b rs,@(disp:24,rd) * neg.w rs
|
|---|
| 956 | mov.b @abs:16,rd * neg.l rs
|
|---|
| 957 | mov.b rs,rd nop
|
|---|
| 958 | mov.b @abs:8,rd not.b rs
|
|---|
| 959 | mov.b rs,@abs:8 * not.w rs
|
|---|
| 960 | mov.b rs,rd * not.l rs
|
|---|
| 961 | mov.b #imm,rd or.b #imm,rd
|
|---|
| 962 | mov.b @rs,rd or.b rs,rd
|
|---|
| 963 | mov.b @(disp:16,rs),rd * or.w #imm,rd
|
|---|
| 964 | mov.b @rs+,rd * or.w rs,rd
|
|---|
| 965 | mov.b @abs:8,rd * or.l #imm,rd
|
|---|
| 966 | mov.b rs,@rd * or.l rs,rd
|
|---|
| 967 | mov.b rs,@(disp:16,rd) orc #imm,ccr
|
|---|
| 968 | mov.b rs,@-rd pop.w rs
|
|---|
| 969 | mov.b rs,@abs:8 * pop.l rs
|
|---|
| 970 | mov.w rs,@rd push.w rs
|
|---|
| 971 | * mov.w @(disp:24,rs),rd * push.l rs
|
|---|
| 972 | * mov.w rs,@(disp:24,rd) rotl.b rs
|
|---|
| 973 | * mov.w @abs:24,rd * rotl.w rs
|
|---|
| 974 | * mov.w rs,@abs:24 * rotl.l rs
|
|---|
| 975 | mov.w rs,rd rotr.b rs
|
|---|
| 976 | mov.w #imm,rd * rotr.w rs
|
|---|
| 977 | mov.w @rs,rd * rotr.l rs
|
|---|
| 978 | mov.w @(disp:16,rs),rd rotxl.b rs
|
|---|
| 979 | mov.w @rs+,rd * rotxl.w rs
|
|---|
| 980 | mov.w @abs:16,rd * rotxl.l rs
|
|---|
| 981 | mov.w rs,@(disp:16,rd) rotxr.b rs
|
|---|
| 982 | mov.w rs,@-rd * rotxr.w rs
|
|---|
| 983 |
|
|---|
| 984 | * rotxr.l rs * stc ccr,@(disp:24,rd)
|
|---|
| 985 | bpt * stc ccr,@-rd
|
|---|
| 986 | rte * stc ccr,@abs:16
|
|---|
| 987 | rts * stc ccr,@abs:24
|
|---|
| 988 | shal.b rs sub.b rs,rd
|
|---|
| 989 | * shal.w rs sub.w rs,rd
|
|---|
| 990 | * shal.l rs * sub.w #imm,rd
|
|---|
| 991 | shar.b rs * sub.l rs,rd
|
|---|
| 992 | * shar.w rs * sub.l #imm,rd
|
|---|
| 993 | * shar.l rs subs #imm,rd
|
|---|
| 994 | shll.b rs subx #imm,rd
|
|---|
| 995 | * shll.w rs subx rs,rd
|
|---|
| 996 | * shll.l rs * trapa #imm
|
|---|
| 997 | shlr.b rs xor #imm,rd
|
|---|
| 998 | * shlr.w rs xor rs,rd
|
|---|
| 999 | * shlr.l rs * xor.w #imm,rd
|
|---|
| 1000 | sleep * xor.w rs,rd
|
|---|
| 1001 | stc ccr,rd * xor.l #imm,rd
|
|---|
| 1002 | * stc ccr,@rs * xor.l rs,rd
|
|---|
| 1003 | * stc ccr,@(disp:16,rd) xorc #imm,ccr
|
|---|
| 1004 |
|
|---|
| 1005 | Four H8/300 instructions (`add', `cmp', `mov', `sub') are defined
|
|---|
| 1006 | with variants using the suffixes `.b', `.w', and `.l' to specify the
|
|---|
| 1007 | size of a memory operand. `as' supports these suffixes, but does not
|
|---|
| 1008 | require them; since one of the operands is always a register, `as' can
|
|---|
| 1009 | deduce the correct size.
|
|---|
| 1010 |
|
|---|
| 1011 | For example, since `r0' refers to a 16-bit register,
|
|---|
| 1012 | mov r0,@foo
|
|---|
| 1013 | is equivalent to
|
|---|
| 1014 | mov.w r0,@foo
|
|---|
| 1015 |
|
|---|
| 1016 | If you use the size suffixes, `as' issues a warning when the suffix
|
|---|
| 1017 | and the register size do not match.
|
|---|
| 1018 |
|
|---|
| 1019 |
|
|---|
| 1020 | File: as.info, Node: H8/500-Dependent, Next: HPPA-Dependent, Prev: H8/300-Dependent, Up: Machine Dependencies
|
|---|
| 1021 |
|
|---|
| 1022 | H8/500 Dependent Features
|
|---|
| 1023 | =========================
|
|---|
| 1024 |
|
|---|
| 1025 | * Menu:
|
|---|
| 1026 |
|
|---|
| 1027 | * H8/500 Options:: Options
|
|---|
| 1028 | * H8/500 Syntax:: Syntax
|
|---|
| 1029 | * H8/500 Floating Point:: Floating Point
|
|---|
| 1030 | * H8/500 Directives:: H8/500 Machine Directives
|
|---|
| 1031 | * H8/500 Opcodes:: Opcodes
|
|---|
| 1032 |
|
|---|
| 1033 |
|
|---|
| 1034 | File: as.info, Node: H8/500 Options, Next: H8/500 Syntax, Up: H8/500-Dependent
|
|---|
| 1035 |
|
|---|
| 1036 | Options
|
|---|
| 1037 | -------
|
|---|
| 1038 |
|
|---|
| 1039 | `as' has no additional command-line options for the Renesas
|
|---|
| 1040 | (formerly Hitachi) H8/500 family.
|
|---|
| 1041 |
|
|---|
| 1042 |
|
|---|
| 1043 | File: as.info, Node: H8/500 Syntax, Next: H8/500 Floating Point, Prev: H8/500 Options, Up: H8/500-Dependent
|
|---|
| 1044 |
|
|---|
| 1045 | Syntax
|
|---|
| 1046 | ------
|
|---|
| 1047 |
|
|---|
| 1048 | * Menu:
|
|---|
| 1049 |
|
|---|
| 1050 | * H8/500-Chars:: Special Characters
|
|---|
| 1051 | * H8/500-Regs:: Register Names
|
|---|
| 1052 | * H8/500-Addressing:: Addressing Modes
|
|---|
| 1053 |
|
|---|
| 1054 |
|
|---|
| 1055 | File: as.info, Node: H8/500-Chars, Next: H8/500-Regs, Up: H8/500 Syntax
|
|---|
| 1056 |
|
|---|
| 1057 | Special Characters
|
|---|
| 1058 | ..................
|
|---|
| 1059 |
|
|---|
| 1060 | `!' is the line comment character.
|
|---|
| 1061 |
|
|---|
| 1062 | `;' can be used instead of a newline to separate statements.
|
|---|
| 1063 |
|
|---|
| 1064 | Since `$' has no special meaning, you may use it in symbol names.
|
|---|
| 1065 |
|
|---|
| 1066 |
|
|---|
| 1067 | File: as.info, Node: H8/500-Regs, Next: H8/500-Addressing, Prev: H8/500-Chars, Up: H8/500 Syntax
|
|---|
| 1068 |
|
|---|
| 1069 | Register Names
|
|---|
| 1070 | ..............
|
|---|
| 1071 |
|
|---|
| 1072 | You can use the predefined symbols `r0', `r1', `r2', `r3', `r4',
|
|---|
| 1073 | `r5', `r6', and `r7' to refer to the H8/500 registers.
|
|---|
| 1074 |
|
|---|
| 1075 | The H8/500 also has these control registers:
|
|---|
| 1076 |
|
|---|
| 1077 | `cp'
|
|---|
| 1078 | code pointer
|
|---|
| 1079 |
|
|---|
| 1080 | `dp'
|
|---|
| 1081 | data pointer
|
|---|
| 1082 |
|
|---|
| 1083 | `bp'
|
|---|
| 1084 | base pointer
|
|---|
| 1085 |
|
|---|
| 1086 | `tp'
|
|---|
| 1087 | stack top pointer
|
|---|
| 1088 |
|
|---|
| 1089 | `ep'
|
|---|
| 1090 | extra pointer
|
|---|
| 1091 |
|
|---|
| 1092 | `sr'
|
|---|
| 1093 | status register
|
|---|
| 1094 |
|
|---|
| 1095 | `ccr'
|
|---|
| 1096 | condition code register
|
|---|
| 1097 |
|
|---|
| 1098 | All registers are 16 bits long. To represent 32 bit numbers, use two
|
|---|
| 1099 | adjacent registers; for distant memory addresses, use one of the segment
|
|---|
| 1100 | pointers (`cp' for the program counter; `dp' for `r0'-`r3'; `ep' for
|
|---|
| 1101 | `r4' and `r5'; and `tp' for `r6' and `r7'.
|
|---|
| 1102 |
|
|---|
| 1103 |
|
|---|
| 1104 | File: as.info, Node: H8/500-Addressing, Prev: H8/500-Regs, Up: H8/500 Syntax
|
|---|
| 1105 |
|
|---|
| 1106 | Addressing Modes
|
|---|
| 1107 | ................
|
|---|
| 1108 |
|
|---|
| 1109 | as understands the following addressing modes for the H8/500:
|
|---|
| 1110 | `RN'
|
|---|
| 1111 | Register direct
|
|---|
| 1112 |
|
|---|
| 1113 | `@RN'
|
|---|
| 1114 | Register indirect
|
|---|
| 1115 |
|
|---|
| 1116 | `@(d:8, RN)'
|
|---|
| 1117 | Register indirect with 8 bit signed displacement
|
|---|
| 1118 |
|
|---|
| 1119 | `@(d:16, RN)'
|
|---|
| 1120 | Register indirect with 16 bit signed displacement
|
|---|
| 1121 |
|
|---|
| 1122 | `@-RN'
|
|---|
| 1123 | Register indirect with pre-decrement
|
|---|
| 1124 |
|
|---|
| 1125 | `@RN+'
|
|---|
| 1126 | Register indirect with post-increment
|
|---|
| 1127 |
|
|---|
| 1128 | `@AA:8'
|
|---|
| 1129 | 8 bit absolute address
|
|---|
| 1130 |
|
|---|
| 1131 | `@AA:16'
|
|---|
| 1132 | 16 bit absolute address
|
|---|
| 1133 |
|
|---|
| 1134 | `#XX:8'
|
|---|
| 1135 | 8 bit immediate
|
|---|
| 1136 |
|
|---|
| 1137 | `#XX:16'
|
|---|
| 1138 | 16 bit immediate
|
|---|
| 1139 |
|
|---|
| 1140 |
|
|---|
| 1141 | File: as.info, Node: H8/500 Floating Point, Next: H8/500 Directives, Prev: H8/500 Syntax, Up: H8/500-Dependent
|
|---|
| 1142 |
|
|---|
| 1143 | Floating Point
|
|---|
| 1144 | --------------
|
|---|
| 1145 |
|
|---|
| 1146 | The H8/500 family has no hardware floating point, but the `.float'
|
|---|
| 1147 | directive generates IEEE floating-point numbers for compatibility with
|
|---|
| 1148 | other development tools.
|
|---|
| 1149 |
|
|---|
| 1150 |
|
|---|
| 1151 | File: as.info, Node: H8/500 Directives, Next: H8/500 Opcodes, Prev: H8/500 Floating Point, Up: H8/500-Dependent
|
|---|
| 1152 |
|
|---|
| 1153 | H8/500 Machine Directives
|
|---|
| 1154 | -------------------------
|
|---|
| 1155 |
|
|---|
| 1156 | `as' has no machine-dependent directives for the H8/500. However,
|
|---|
| 1157 | on this platform the `.int' and `.word' directives generate 16-bit
|
|---|
| 1158 | numbers.
|
|---|
| 1159 |
|
|---|
| 1160 |
|
|---|
| 1161 | File: as.info, Node: H8/500 Opcodes, Prev: H8/500 Directives, Up: H8/500-Dependent
|
|---|
| 1162 |
|
|---|
| 1163 | Opcodes
|
|---|
| 1164 | -------
|
|---|
| 1165 |
|
|---|
| 1166 | For detailed information on the H8/500 machine instruction set, see
|
|---|
| 1167 | `H8/500 Series Programming Manual' (Renesas M21T001).
|
|---|
| 1168 |
|
|---|
| 1169 | `as' implements all the standard H8/500 opcodes. No additional
|
|---|
| 1170 | pseudo-instructions are needed on this family.
|
|---|
| 1171 |
|
|---|
| 1172 | The following table summarizes H8/500 opcodes and their operands:
|
|---|
| 1173 |
|
|---|
| 1174 | Legend:
|
|---|
| 1175 | abs8 8-bit absolute address
|
|---|
| 1176 | abs16 16-bit absolute address
|
|---|
| 1177 | abs24 24-bit absolute address
|
|---|
| 1178 | crb `ccr', `br', `ep', `dp', `tp', `dp'
|
|---|
| 1179 | disp8 8-bit displacement
|
|---|
| 1180 | ea `rn', `@rn', `@(d:8, rn)', `@(d:16, rn)',
|
|---|
| 1181 | `@-rn', `@rn+', `@aa:8', `@aa:16',
|
|---|
| 1182 | `#xx:8', `#xx:16'
|
|---|
| 1183 | ea_mem `@rn', `@(d:8, rn)', `@(d:16, rn)',
|
|---|
| 1184 | `@-rn', `@rn+', `@aa:8', `@aa:16'
|
|---|
| 1185 | ea_noimm `rn', `@rn', `@(d:8, rn)', `@(d:16, rn)',
|
|---|
| 1186 | `@-rn', `@rn+', `@aa:8', `@aa:16'
|
|---|
| 1187 | fp r6
|
|---|
| 1188 | imm4 4-bit immediate data
|
|---|
| 1189 | imm8 8-bit immediate data
|
|---|
| 1190 | imm16 16-bit immediate data
|
|---|
| 1191 | pcrel8 8-bit offset from program counter
|
|---|
| 1192 | pcrel16 16-bit offset from program counter
|
|---|
| 1193 | qim `-2', `-1', `1', `2'
|
|---|
| 1194 | rd any register
|
|---|
| 1195 | rs a register distinct from rd
|
|---|
| 1196 | rlist comma-separated list of registers in parentheses;
|
|---|
| 1197 | register ranges `rd-rs' are allowed
|
|---|
| 1198 | sp stack pointer (`r7')
|
|---|
| 1199 | sr status register
|
|---|
| 1200 | sz size; `.b' or `.w'. If omitted, default `.w'
|
|---|
| 1201 |
|
|---|
| 1202 | ldc[.b] ea,crb bcc[.w] pcrel16
|
|---|
| 1203 | ldc[.w] ea,sr bcc[.b] pcrel8
|
|---|
| 1204 | add[:q] sz qim,ea_noimm bhs[.w] pcrel16
|
|---|
| 1205 | add[:g] sz ea,rd bhs[.b] pcrel8
|
|---|
| 1206 | adds sz ea,rd bcs[.w] pcrel16
|
|---|
| 1207 | addx sz ea,rd bcs[.b] pcrel8
|
|---|
| 1208 | and sz ea,rd blo[.w] pcrel16
|
|---|
| 1209 | andc[.b] imm8,crb blo[.b] pcrel8
|
|---|
| 1210 | andc[.w] imm16,sr bne[.w] pcrel16
|
|---|
| 1211 | bpt bne[.b] pcrel8
|
|---|
| 1212 | bra[.w] pcrel16 beq[.w] pcrel16
|
|---|
| 1213 | bra[.b] pcrel8 beq[.b] pcrel8
|
|---|
| 1214 | bt[.w] pcrel16 bvc[.w] pcrel16
|
|---|
| 1215 | bt[.b] pcrel8 bvc[.b] pcrel8
|
|---|
| 1216 | brn[.w] pcrel16 bvs[.w] pcrel16
|
|---|
| 1217 | brn[.b] pcrel8 bvs[.b] pcrel8
|
|---|
| 1218 | bf[.w] pcrel16 bpl[.w] pcrel16
|
|---|
| 1219 | bf[.b] pcrel8 bpl[.b] pcrel8
|
|---|
| 1220 | bhi[.w] pcrel16 bmi[.w] pcrel16
|
|---|
| 1221 | bhi[.b] pcrel8 bmi[.b] pcrel8
|
|---|
| 1222 | bls[.w] pcrel16 bge[.w] pcrel16
|
|---|
| 1223 | bls[.b] pcrel8 bge[.b] pcrel8
|
|---|
| 1224 |
|
|---|
| 1225 | blt[.w] pcrel16 mov[:g][.b] imm8,ea_mem
|
|---|
| 1226 | blt[.b] pcrel8 mov[:g][.w] imm16,ea_mem
|
|---|
| 1227 | bgt[.w] pcrel16 movfpe[.b] ea,rd
|
|---|
| 1228 | bgt[.b] pcrel8 movtpe[.b] rs,ea_noimm
|
|---|
| 1229 | ble[.w] pcrel16 mulxu sz ea,rd
|
|---|
| 1230 | ble[.b] pcrel8 neg sz ea
|
|---|
| 1231 | bclr sz imm4,ea_noimm nop
|
|---|
| 1232 | bclr sz rs,ea_noimm not sz ea
|
|---|
| 1233 | bnot sz imm4,ea_noimm or sz ea,rd
|
|---|
| 1234 | bnot sz rs,ea_noimm orc[.b] imm8,crb
|
|---|
| 1235 | bset sz imm4,ea_noimm orc[.w] imm16,sr
|
|---|
| 1236 | bset sz rs,ea_noimm pjmp abs24
|
|---|
| 1237 | bsr[.b] pcrel8 pjmp @rd
|
|---|
| 1238 | bsr[.w] pcrel16 pjsr abs24
|
|---|
| 1239 | btst sz imm4,ea_noimm pjsr @rd
|
|---|
| 1240 | btst sz rs,ea_noimm prtd imm8
|
|---|
| 1241 | clr sz ea prtd imm16
|
|---|
| 1242 | cmp[:e][.b] imm8,rd prts
|
|---|
| 1243 | cmp[:i][.w] imm16,rd rotl sz ea
|
|---|
| 1244 | cmp[:g].b imm8,ea_noimm rotr sz ea
|
|---|
| 1245 | cmp[:g][.w] imm16,ea_noimm rotxl sz ea
|
|---|
| 1246 | Cmp[:g] sz ea,rd rotxr sz ea
|
|---|
| 1247 | dadd rs,rd rtd imm8
|
|---|
| 1248 | divxu sz ea,rd rtd imm16
|
|---|
| 1249 | dsub rs,rd rts
|
|---|
| 1250 | exts[.b] rd scb/f rs,pcrel8
|
|---|
| 1251 | extu[.b] rd scb/ne rs,pcrel8
|
|---|
| 1252 | jmp @rd scb/eq rs,pcrel8
|
|---|
| 1253 | jmp @(imm8,rd) shal sz ea
|
|---|
| 1254 | jmp @(imm16,rd) shar sz ea
|
|---|
| 1255 | jmp abs16 shll sz ea
|
|---|
| 1256 | jsr @rd shlr sz ea
|
|---|
| 1257 | jsr @(imm8,rd) sleep
|
|---|
| 1258 | jsr @(imm16,rd) stc[.b] crb,ea_noimm
|
|---|
| 1259 | jsr abs16 stc[.w] sr,ea_noimm
|
|---|
| 1260 | ldm @sp+,(rlist) stm (rlist),@-sp
|
|---|
| 1261 | link fp,imm8 sub sz ea,rd
|
|---|
| 1262 | link fp,imm16 subs sz ea,rd
|
|---|
| 1263 | mov[:e][.b] imm8,rd subx sz ea,rd
|
|---|
| 1264 | mov[:i][.w] imm16,rd swap[.b] rd
|
|---|
| 1265 | mov[:l][.w] abs8,rd tas[.b] ea
|
|---|
| 1266 | mov[:l].b abs8,rd trapa imm4
|
|---|
| 1267 | mov[:s][.w] rs,abs8 trap/vs
|
|---|
| 1268 | mov[:s].b rs,abs8 tst sz ea
|
|---|
| 1269 | mov[:f][.w] @(disp8,fp),rd unlk fp
|
|---|
| 1270 | mov[:f][.w] rs,@(disp8,fp) xch[.w] rs,rd
|
|---|
| 1271 | mov[:f].b @(disp8,fp),rd xor sz ea,rd
|
|---|
| 1272 | mov[:f].b rs,@(disp8,fp) xorc.b imm8,crb
|
|---|
| 1273 | mov[:g] sz rs,ea_mem xorc.w imm16,sr
|
|---|
| 1274 | mov[:g] sz ea,rd
|
|---|
| 1275 |
|
|---|
| 1276 |
|
|---|
| 1277 | File: as.info, Node: HPPA-Dependent, Next: ESA/390-Dependent, Prev: H8/500-Dependent, Up: Machine Dependencies
|
|---|
| 1278 |
|
|---|
| 1279 | HPPA Dependent Features
|
|---|
| 1280 | =======================
|
|---|
| 1281 |
|
|---|
| 1282 | * Menu:
|
|---|
| 1283 |
|
|---|
| 1284 | * HPPA Notes:: Notes
|
|---|
| 1285 | * HPPA Options:: Options
|
|---|
| 1286 | * HPPA Syntax:: Syntax
|
|---|
| 1287 | * HPPA Floating Point:: Floating Point
|
|---|
| 1288 | * HPPA Directives:: HPPA Machine Directives
|
|---|
| 1289 | * HPPA Opcodes:: Opcodes
|
|---|
| 1290 |
|
|---|
| 1291 |
|
|---|
| 1292 | File: as.info, Node: HPPA Notes, Next: HPPA Options, Up: HPPA-Dependent
|
|---|
| 1293 |
|
|---|
| 1294 | Notes
|
|---|
| 1295 | -----
|
|---|
| 1296 |
|
|---|
| 1297 | As a back end for GNU CC `as' has been throughly tested and should
|
|---|
| 1298 | work extremely well. We have tested it only minimally on hand written
|
|---|
| 1299 | assembly code and no one has tested it much on the assembly output from
|
|---|
| 1300 | the HP compilers.
|
|---|
| 1301 |
|
|---|
| 1302 | The format of the debugging sections has changed since the original
|
|---|
| 1303 | `as' port (version 1.3X) was released; therefore, you must rebuild all
|
|---|
| 1304 | HPPA objects and libraries with the new assembler so that you can debug
|
|---|
| 1305 | the final executable.
|
|---|
| 1306 |
|
|---|
| 1307 | The HPPA `as' port generates a small subset of the relocations
|
|---|
| 1308 | available in the SOM and ELF object file formats. Additional relocation
|
|---|
| 1309 | support will be added as it becomes necessary.
|
|---|
| 1310 |
|
|---|
| 1311 |
|
|---|
| 1312 | File: as.info, Node: HPPA Options, Next: HPPA Syntax, Prev: HPPA Notes, Up: HPPA-Dependent
|
|---|
| 1313 |
|
|---|
| 1314 | Options
|
|---|
| 1315 | -------
|
|---|
| 1316 |
|
|---|
| 1317 | `as' has no machine-dependent command-line options for the HPPA.
|
|---|
| 1318 |
|
|---|
| 1319 |
|
|---|
| 1320 | File: as.info, Node: HPPA Syntax, Next: HPPA Floating Point, Prev: HPPA Options, Up: HPPA-Dependent
|
|---|
| 1321 |
|
|---|
| 1322 | Syntax
|
|---|
| 1323 | ------
|
|---|
| 1324 |
|
|---|
| 1325 | The assembler syntax closely follows the HPPA instruction set
|
|---|
| 1326 | reference manual; assembler directives and general syntax closely
|
|---|
| 1327 | follow the HPPA assembly language reference manual, with a few
|
|---|
| 1328 | noteworthy differences.
|
|---|
| 1329 |
|
|---|
| 1330 | First, a colon may immediately follow a label definition. This is
|
|---|
| 1331 | simply for compatibility with how most assembly language programmers
|
|---|
| 1332 | write code.
|
|---|
| 1333 |
|
|---|
| 1334 | Some obscure expression parsing problems may affect hand written
|
|---|
| 1335 | code which uses the `spop' instructions, or code which makes significant
|
|---|
| 1336 | use of the `!' line separator.
|
|---|
| 1337 |
|
|---|
| 1338 | `as' is much less forgiving about missing arguments and other
|
|---|
| 1339 | similar oversights than the HP assembler. `as' notifies you of missing
|
|---|
| 1340 | arguments as syntax errors; this is regarded as a feature, not a bug.
|
|---|
| 1341 |
|
|---|
| 1342 | Finally, `as' allows you to use an external symbol without
|
|---|
| 1343 | explicitly importing the symbol. _Warning:_ in the future this will be
|
|---|
| 1344 | an error for HPPA targets.
|
|---|
| 1345 |
|
|---|
| 1346 | Special characters for HPPA targets include:
|
|---|
| 1347 |
|
|---|
| 1348 | `;' is the line comment character.
|
|---|
| 1349 |
|
|---|
| 1350 | `!' can be used instead of a newline to separate statements.
|
|---|
| 1351 |
|
|---|
| 1352 | Since `$' has no special meaning, you may use it in symbol names.
|
|---|
| 1353 |
|
|---|
| 1354 |
|
|---|
| 1355 | File: as.info, Node: HPPA Floating Point, Next: HPPA Directives, Prev: HPPA Syntax, Up: HPPA-Dependent
|
|---|
| 1356 |
|
|---|
| 1357 | Floating Point
|
|---|
| 1358 | --------------
|
|---|
| 1359 |
|
|---|
| 1360 | The HPPA family uses IEEE floating-point numbers.
|
|---|
| 1361 |
|
|---|