| Branch Improvement

Previous | Motorola 680x0 Dependent Features | Next

Certain pseudo opcodes are permitted for branch instructions. They expand to the shortest branch instruction that reach the target. Generally these mnemonics are made by substituting `j` for `b` at the start of a Motorola mnemonic.
The following table summarizes the pseudo-operations for the 68000 processor; the 68020 has some more possibilites. Note that the 68000 LONG operations are always absolute and require runtime relocation. They will not be used if the '--pcrel' option is given. A `(*)` flags cases that are more fully described after the table:

| Displacement
Pseudo-Op | BYTE | WORD | LONG
jbsr | bsr.s | bsr | jsr
jra | bra.s | bra | jmp
jXX `(*)` | bXX.s | bXX | bNX; jmp
dbXX `(*)` | dbXX | dbXX | dbXX; bra; jmp

XX: condition
NX: negative of condition XX

jbsr
jra
  These are the simplest jump pseudo-operations; they always map to one particular machine instruction, depending on the displacement to the branch target. This instruction will be a byte or word branch if that is sufficient. Otherwise, if the '--pcrel' option is not given, an absolute long jump will be emitted. If the '--pcrel' option is given and a word branch cannot reach the target, an error message is generated.
  In addition to standard branch operands, `as` allows these pseudo-operations to have all operands that are allowed for jsr and jmp, substituting these instructions if the operand given is not valid for a branch instruction.
jXX
  Here, `jXX` stands for an entire family of pseudo-operations, where XX is a conditional branch or condition-code test. The full list of pseudo-ops in this family is:

  jhi | jls | jcc | jcs | jne | jeq | jvc
  jvs | jpl | jmi | jge | jlt | jgt | jle

  Usually, each of these pseudo-operations expands to a single branch instruction. However, if a word branch is not sufficient and the '--pcrel' option is not given, `as` issues a longer code fragment in terms of NX, the opposite condition to XX. For example, under these conditions:

          jXX foo

  gives

           bNXs oof
           jmp foo
      oof:

dbXX
  The full family of pseudo-operations covered here is:

  dbhi | dbls | dbcc | dbcs | dbne | dbeq | dbvc
  dbvs | dbpl | dbmi | dbge | dblt | dbgt | dble
  dbf | dbra | dbt |  |  |  |

  Motorola `dbXX` instructions allow word displacements only. When a word displacement is sufficient, each of these pseudo-operations expands to the corresponding Motorola instruction. When a word displacement is not sufficient and long branches are available, when the source reads `dbXX foo`, `as` emits

           dbXX oo1
           bra.s oo2
      oo1: jmp foo
      oo2: