| [10] | 1 | @c Copyright 1996, 1997, 1998, 1999, 2000, 2001
|
|---|
| 2 | @c Free Software Foundation, Inc.
|
|---|
| 3 | @c This is part of the GAS manual.
|
|---|
| 4 | @c For copying conditions, see the file as.texinfo.
|
|---|
| 5 |
|
|---|
| 6 | @ifset GENERIC
|
|---|
| 7 | @page
|
|---|
| 8 | @node ARM-Dependent
|
|---|
| 9 | @chapter ARM Dependent Features
|
|---|
| 10 | @end ifset
|
|---|
| 11 |
|
|---|
| 12 | @ifclear GENERIC
|
|---|
| 13 | @node Machine Dependencies
|
|---|
| 14 | @chapter ARM Dependent Features
|
|---|
| 15 | @end ifclear
|
|---|
| 16 |
|
|---|
| 17 | @cindex ARM support
|
|---|
| 18 | @cindex Thumb support
|
|---|
| 19 | @menu
|
|---|
| 20 | * ARM Options:: Options
|
|---|
| 21 | * ARM Syntax:: Syntax
|
|---|
| 22 | * ARM Floating Point:: Floating Point
|
|---|
| 23 | * ARM Directives:: ARM Machine Directives
|
|---|
| 24 | * ARM Opcodes:: Opcodes
|
|---|
| 25 | @end menu
|
|---|
| 26 |
|
|---|
| 27 | @node ARM Options
|
|---|
| 28 | @section Options
|
|---|
| 29 | @cindex ARM options (none)
|
|---|
| 30 | @cindex options for ARM (none)
|
|---|
| 31 |
|
|---|
| 32 | @table @code
|
|---|
| 33 |
|
|---|
| [609] | 34 | @cindex @code{-mcpu=} command line option, ARM
|
|---|
| 35 | @item -mcpu=@var{processor}[+@var{extension}@dots{}]
|
|---|
| [10] | 36 | This option specifies the target processor. The assembler will issue an
|
|---|
| 37 | error message if an attempt is made to assemble an instruction which
|
|---|
| [609] | 38 | will not execute on the target processor. The following processor names are
|
|---|
| 39 | recognized:
|
|---|
| 40 | @code{arm1},
|
|---|
| 41 | @code{arm2},
|
|---|
| 42 | @code{arm250},
|
|---|
| 43 | @code{arm3},
|
|---|
| 44 | @code{arm6},
|
|---|
| 45 | @code{arm60},
|
|---|
| 46 | @code{arm600},
|
|---|
| 47 | @code{arm610},
|
|---|
| 48 | @code{arm620},
|
|---|
| 49 | @code{arm7},
|
|---|
| 50 | @code{arm7m},
|
|---|
| 51 | @code{arm7d},
|
|---|
| 52 | @code{arm7dm},
|
|---|
| 53 | @code{arm7di},
|
|---|
| 54 | @code{arm7dmi},
|
|---|
| 55 | @code{arm70},
|
|---|
| 56 | @code{arm700},
|
|---|
| 57 | @code{arm700i},
|
|---|
| 58 | @code{arm710},
|
|---|
| 59 | @code{arm710t},
|
|---|
| 60 | @code{arm720},
|
|---|
| 61 | @code{arm720t},
|
|---|
| 62 | @code{arm740t},
|
|---|
| 63 | @code{arm710c},
|
|---|
| 64 | @code{arm7100},
|
|---|
| 65 | @code{arm7500},
|
|---|
| 66 | @code{arm7500fe},
|
|---|
| 67 | @code{arm7t},
|
|---|
| 68 | @code{arm7tdmi},
|
|---|
| 69 | @code{arm8},
|
|---|
| 70 | @code{arm810},
|
|---|
| 71 | @code{strongarm},
|
|---|
| 72 | @code{strongarm1},
|
|---|
| 73 | @code{strongarm110},
|
|---|
| 74 | @code{strongarm1100},
|
|---|
| 75 | @code{strongarm1110},
|
|---|
| 76 | @code{arm9},
|
|---|
| 77 | @code{arm920},
|
|---|
| 78 | @code{arm920t},
|
|---|
| 79 | @code{arm922t},
|
|---|
| 80 | @code{arm940t},
|
|---|
| 81 | @code{arm9tdmi},
|
|---|
| 82 | @code{arm9e},
|
|---|
| 83 | @code{arm946e-r0},
|
|---|
| 84 | @code{arm946e},
|
|---|
| 85 | @code{arm966e-r0},
|
|---|
| 86 | @code{arm966e},
|
|---|
| 87 | @code{arm10t},
|
|---|
| 88 | @code{arm10e},
|
|---|
| 89 | @code{arm1020},
|
|---|
| 90 | @code{arm1020t},
|
|---|
| 91 | @code{arm1020e},
|
|---|
| 92 | @code{ep9312} (ARM920 with Cirrus Maverick coprocessor),
|
|---|
| 93 | @code{i80200} (Intel XScale processor)
|
|---|
| 94 | @code{iwmmxt} (Intel(r) XScale processor with Wireless MMX(tm) technology coprocessor)
|
|---|
| 95 | and
|
|---|
| 96 | @code{xscale}.
|
|---|
| 97 | The special name @code{all} may be used to allow the
|
|---|
| 98 | assembler to accept instructions valid for any ARM processor.
|
|---|
| [10] | 99 |
|
|---|
| [609] | 100 | In addition to the basic instruction set, the assembler can be told to
|
|---|
| 101 | accept various extension mnemonics that extend the processor using the
|
|---|
| 102 | co-processor instruction space. For example, @code{-mcpu=arm920+maverick}
|
|---|
| 103 | is equivalent to specifying @code{-mcpu=ep9312}. The following extensions
|
|---|
| 104 | are currently supported:
|
|---|
| 105 | @code{+maverick}
|
|---|
| 106 | @code{+iwmmxt}
|
|---|
| 107 | and
|
|---|
| 108 | @code{+xscale}.
|
|---|
| 109 |
|
|---|
| 110 | @cindex @code{-march=} command line option, ARM
|
|---|
| 111 | @item -march=@var{architecture}[+@var{extension}@dots{}]
|
|---|
| [10] | 112 | This option specifies the target architecture. The assembler will issue
|
|---|
| 113 | an error message if an attempt is made to assemble an instruction which
|
|---|
| [609] | 114 | will not execute on the target architecture. The following architecture
|
|---|
| 115 | names are recognized:
|
|---|
| 116 | @code{armv1},
|
|---|
| 117 | @code{armv2},
|
|---|
| 118 | @code{armv2a},
|
|---|
| 119 | @code{armv2s},
|
|---|
| 120 | @code{armv3},
|
|---|
| 121 | @code{armv3m},
|
|---|
| 122 | @code{armv4},
|
|---|
| 123 | @code{armv4xm},
|
|---|
| 124 | @code{armv4t},
|
|---|
| 125 | @code{armv4txm},
|
|---|
| 126 | @code{armv5},
|
|---|
| 127 | @code{armv5t},
|
|---|
| 128 | @code{armv5txm},
|
|---|
| 129 | @code{armv5te},
|
|---|
| 130 | @code{armv5texp}
|
|---|
| 131 | @code{iwmmxt}
|
|---|
| 132 | and
|
|---|
| 133 | @code{xscale}.
|
|---|
| 134 | If both @code{-mcpu} and
|
|---|
| 135 | @code{-march} are specified, the assembler will use
|
|---|
| 136 | the setting for @code{-mcpu}.
|
|---|
| [10] | 137 |
|
|---|
| [609] | 138 | The architecture option can be extended with the same instruction set
|
|---|
| 139 | extension options as the @code{-mcpu} option.
|
|---|
| [10] | 140 |
|
|---|
| [609] | 141 | @cindex @code{-mfpu=} command line option, ARM
|
|---|
| 142 | @item -mfpu=@var{floating-point-format}
|
|---|
| [10] | 143 |
|
|---|
| [609] | 144 | This option specifies the floating point format to assemble for. The
|
|---|
| 145 | assembler will issue an error message if an attempt is made to assemble
|
|---|
| 146 | an instruction which will not execute on the target floating point unit.
|
|---|
| 147 | The following format options are recognized:
|
|---|
| 148 | @code{softfpa},
|
|---|
| 149 | @code{fpe},
|
|---|
| 150 | @code{fpe2},
|
|---|
| 151 | @code{fpe3},
|
|---|
| 152 | @code{fpa},
|
|---|
| 153 | @code{fpa10},
|
|---|
| 154 | @code{fpa11},
|
|---|
| 155 | @code{arm7500fe},
|
|---|
| 156 | @code{softvfp},
|
|---|
| 157 | @code{softvfp+vfp},
|
|---|
| 158 | @code{vfp},
|
|---|
| 159 | @code{vfp10},
|
|---|
| 160 | @code{vfp10-r0},
|
|---|
| 161 | @code{vfp9},
|
|---|
| 162 | @code{vfpxd},
|
|---|
| 163 | @code{arm1020t}
|
|---|
| 164 | and
|
|---|
| 165 | @code{arm1020e}.
|
|---|
| [10] | 166 |
|
|---|
| [609] | 167 | In addition to determining which instructions are assembled, this option
|
|---|
| 168 | also affects the way in which the @code{.double} assembler directive behaves
|
|---|
| 169 | when assembling little-endian code.
|
|---|
| [10] | 170 |
|
|---|
| [609] | 171 | The default is dependent on the processor selected. For Architecture 5 or
|
|---|
| 172 | later, the default is to assembler for VFP instructions; for earlier
|
|---|
| 173 | architectures the default is to assemble for FPA instructions.
|
|---|
| [10] | 174 |
|
|---|
| [609] | 175 | @cindex @code{-mthumb} command line option, ARM
|
|---|
| 176 | @item -mthumb
|
|---|
| 177 | This option specifies that the assembler should start assembling Thumb
|
|---|
| 178 | instructions; that is, it should behave as though the file starts with a
|
|---|
| 179 | @code{.code 16} directive.
|
|---|
| 180 |
|
|---|
| [10] | 181 | @cindex @code{-mthumb-interwork} command line option, ARM
|
|---|
| 182 | @item -mthumb-interwork
|
|---|
| 183 | This option specifies that the output generated by the assembler should
|
|---|
| 184 | be marked as supporting interworking.
|
|---|
| 185 |
|
|---|
| 186 | @cindex @code{-mapcs} command line option, ARM
|
|---|
| 187 | @item -mapcs @code{[26|32]}
|
|---|
| 188 | This option specifies that the output generated by the assembler should
|
|---|
| 189 | be marked as supporting the indicated version of the Arm Procedure.
|
|---|
| 190 | Calling Standard.
|
|---|
| 191 |
|
|---|
| 192 | @cindex @code{-matpcs} command line option, ARM
|
|---|
| 193 | @item -matpcs
|
|---|
| 194 | This option specifies that the output generated by the assembler should
|
|---|
| 195 | be marked as supporting the Arm/Thumb Procedure Calling Standard. If
|
|---|
| 196 | enabled this option will cause the assembler to create an empty
|
|---|
| 197 | debugging section in the object file called .arm.atpcs. Debuggers can
|
|---|
| 198 | use this to determine the ABI being used by.
|
|---|
| 199 |
|
|---|
| 200 | @cindex @code{-mapcs-float} command line option, ARM
|
|---|
| 201 | @item -mapcs-float
|
|---|
| 202 | This indicates the the floating point variant of the APCS should be
|
|---|
| 203 | used. In this variant floating point arguments are passed in FP
|
|---|
| 204 | registers rather than integer registers.
|
|---|
| 205 |
|
|---|
| 206 | @cindex @code{-mapcs-reentrant} command line option, ARM
|
|---|
| 207 | @item -mapcs-reentrant
|
|---|
| 208 | This indicates that the reentrant variant of the APCS should be used.
|
|---|
| 209 | This variant supports position independent code.
|
|---|
| 210 |
|
|---|
| 211 | @cindex @code{-EB} command line option, ARM
|
|---|
| 212 | @item -EB
|
|---|
| 213 | This option specifies that the output generated by the assembler should
|
|---|
| 214 | be marked as being encoded for a big-endian processor.
|
|---|
| 215 |
|
|---|
| 216 | @cindex @code{-EL} command line option, ARM
|
|---|
| 217 | @item -EL
|
|---|
| 218 | This option specifies that the output generated by the assembler should
|
|---|
| 219 | be marked as being encoded for a little-endian processor.
|
|---|
| 220 |
|
|---|
| 221 | @cindex @code{-k} command line option, ARM
|
|---|
| 222 | @cindex PIC code generation for ARM
|
|---|
| 223 | @item -k
|
|---|
| 224 | This option specifies that the output of the assembler should be marked
|
|---|
| 225 | as position-independent code (PIC).
|
|---|
| 226 |
|
|---|
| 227 | @cindex @code{-moabi} command line option, ARM
|
|---|
| 228 | @item -moabi
|
|---|
| 229 | This indicates that the code should be assembled using the old ARM ELF
|
|---|
| 230 | conventions, based on a beta release release of the ARM-ELF
|
|---|
| 231 | specifications, rather than the default conventions which are based on
|
|---|
| 232 | the final release of the ARM-ELF specifications.
|
|---|
| 233 |
|
|---|
| 234 | @end table
|
|---|
| 235 |
|
|---|
| 236 |
|
|---|
| 237 | @node ARM Syntax
|
|---|
| 238 | @section Syntax
|
|---|
| 239 | @menu
|
|---|
| 240 | * ARM-Chars:: Special Characters
|
|---|
| 241 | * ARM-Regs:: Register Names
|
|---|
| 242 | @end menu
|
|---|
| 243 |
|
|---|
| 244 | @node ARM-Chars
|
|---|
| 245 | @subsection Special Characters
|
|---|
| 246 |
|
|---|
| 247 | @cindex line comment character, ARM
|
|---|
| 248 | @cindex ARM line comment character
|
|---|
| 249 | The presence of a @samp{@@} on a line indicates the start of a comment
|
|---|
| 250 | that extends to the end of the current line. If a @samp{#} appears as
|
|---|
| 251 | the first character of a line, the whole line is treated as a comment.
|
|---|
| 252 |
|
|---|
| 253 | @cindex line separator, ARM
|
|---|
| 254 | @cindex statement separator, ARM
|
|---|
| 255 | @cindex ARM line separator
|
|---|
| 256 | The @samp{;} character can be used instead of a newline to separate
|
|---|
| 257 | statements.
|
|---|
| 258 |
|
|---|
| 259 | @cindex immediate character, ARM
|
|---|
| 260 | @cindex ARM immediate character
|
|---|
| 261 | Either @samp{#} or @samp{$} can be used to indicate immediate operands.
|
|---|
| 262 |
|
|---|
| 263 | @cindex identifiers, ARM
|
|---|
| 264 | @cindex ARM identifiers
|
|---|
| 265 | *TODO* Explain about /data modifier on symbols.
|
|---|
| 266 |
|
|---|
| 267 | @node ARM-Regs
|
|---|
| 268 | @subsection Register Names
|
|---|
| 269 |
|
|---|
| 270 | @cindex ARM register names
|
|---|
| 271 | @cindex register names, ARM
|
|---|
| 272 | *TODO* Explain about ARM register naming, and the predefined names.
|
|---|
| 273 |
|
|---|
| 274 | @node ARM Floating Point
|
|---|
| 275 | @section Floating Point
|
|---|
| 276 |
|
|---|
| 277 | @cindex floating point, ARM (@sc{ieee})
|
|---|
| 278 | @cindex ARM floating point (@sc{ieee})
|
|---|
| 279 | The ARM family uses @sc{ieee} floating-point numbers.
|
|---|
| 280 |
|
|---|
| 281 |
|
|---|
| 282 |
|
|---|
| 283 | @node ARM Directives
|
|---|
| 284 | @section ARM Machine Directives
|
|---|
| 285 |
|
|---|
| |
|---|