as: ARM Opcodes

 
 9.4.5 Opcodes
 -------------
 
 'as' implements all the standard ARM opcodes.  It also implements
 several pseudo opcodes, including several synthetic load instructions.
 
 'NOP'
             nop
 
      This pseudo op will always evaluate to a legal ARM instruction that
      does nothing.  Currently it will evaluate to MOV r0, r0.
 
 'LDR'
             ldr <register> , = <expression>
 
      If expression evaluates to a numeric constant then a MOV or MVN
      instruction will be used in place of the LDR instruction, if the
      constant can be generated by either of these instructions.
      Otherwise the constant will be placed into the nearest literal pool
      (if it not already there) and a PC relative LDR instruction will be
      generated.
 
 'ADR'
             adr <register> <label>
 
      This instruction will load the address of LABEL into the indicated
      register.  The instruction will evaluate to a PC relative ADD or
      SUB instruction depending upon where the label is located.  If the
      label is out of range, or if it is not defined in the same file
      (and section) as the ADR instruction, then an error will be
      generated.  This instruction will not make use of the literal pool.
 
      If LABEL is a thumb function symbol, and thumb interworking has
      been enabled via the '-mthumb-interwork' option then the bottom bit
      of the value stored into REGISTER will be set.  This allows the
      following sequence to work as expected:
 
             adr     r0, thumb_function
             blx     r0
 
 'ADRL'
             adrl <register> <label>
 
      This instruction will load the address of LABEL into the indicated
      register.  The instruction will evaluate to one or two PC relative
      ADD or SUB instructions depending upon where the label is located.
      If a second instruction is not needed a NOP instruction will be
      generated in its place, so that this instruction is always 8 bytes
      long.
 
      If the label is out of range, or if it is not defined in the same
      file (and section) as the ADRL instruction, then an error will be
      generated.  This instruction will not make use of the literal pool.
 
      If LABEL is a thumb function symbol, and thumb interworking has
      been enabled via the '-mthumb-interwork' option then the bottom bit
      of the value stored into REGISTER will be set.
 
    For information on the ARM or Thumb instruction sets, see 'ARM
 Software Development Toolkit Reference Manual', Advanced RISC Machines
 Ltd.