ARM Dependent Features
**********************

Options
=======

-marm [2|250|3|6|60|600|610|620|7|7M|7D|7DM|7DI|7DMI|70|700|700I|710|710C|7100|7500|7500FE|7TDMI|8|STRONGARM|STRONGARM110]
     This option specifies the target processor.  The assembler will issue an error message if an attempt is made to assemble an instruction which will not execute on the target processor.

-marmv [2|2A|3|3M|4|4T]
     This option specifies the target architecture.  The assembler will issue an error message if an attempt is made to assemble an instruction which will not execute on the target architecture.

-mthumb
     This option specifies that only Thumb instructions should be assembled.

-mall
     This option specifies that any Arm or Thumb instruction should be assembled.

-mfpa [10|11]
     This option specifies the floating point architecture in use on the target processor.

-mfpe-old
     Do not allow the assemble of floating point multiple instructions.

-mno-fpu
     Do not allow the assembly of any floating point instructions.

-mthumb-interwork
     This option specifies that the output generated by the assembler should be marked as supporting interworking.

-mapcs [26|32]
     This option specifies that the output generated by the assembler should be marked as supporting the indicated version of the Arm Procedure. Calling Standard.

-EB
     This option specifies that the output generated by the assembler should be marked as being encoded for a big-endian processor.

-EL
     This option specifies that the output generated by the assembler should be marked as being encoded for a little-endian processor.

Syntax
======

Special Characters
------------------

; is the line comment character.

*TODO* Explain about /data modifier on symbols.

Register Names
--------------

*TODO* Explain about ARM register naming, and the predefined names.

Floating Point
==============

The ARM family uses IEEE floating-point numbers.

ARM Machine Directives
======================

.code [16|32]
     This directive selects the instruction set being generated. The value 16 selects Thumb, with the value 32 selecting ARM.

.thumb
     This performs the same action as .CODE 16.

.arm
     This performs the same action as .CODE 32.

.force_thumb
     This directive forces the selection of Thumb instructions, even if the target processor does not support those instructions

.thumb_func
     This directive specifies that the following symbol is the name of a Thumb encoded function.  This information is necessary in order to allow the assembler and linker to generate correct code for interworking between Arm and Thumb instructions and should be used even if interworking is not going to be performed.

Opcodes
=======

AS implements all the standard ARM opcodes.

*TODO* Document the pseudo-ops (adr, nop)

For information on the ARM or Thumb instruction sets, see ARM Software Development Toolkit Reference Manual, Advanced RISC Machines Ltd.