| 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 |  | 
|---|