c-arm.texi revision 61843
1@c Copyright (C) 1996, 1998, 1999, 2000 Free Software Foundation, Inc. 2@c This is part of the GAS manual. 3@c For copying conditions, see the file as.texinfo. 4 5@ifset GENERIC 6@page 7@node ARM-Dependent 8@chapter ARM Dependent Features 9@end ifset 10 11@ifclear GENERIC 12@node Machine Dependencies 13@chapter ARM Dependent Features 14@end ifclear 15 16@cindex ARM support 17@cindex Thumb support 18@menu 19* ARM Options:: Options 20* ARM Syntax:: Syntax 21* ARM Floating Point:: Floating Point 22* ARM Directives:: ARM Machine Directives 23* ARM Opcodes:: Opcodes 24@end menu 25 26@node ARM Options 27@section Options 28@cindex ARM options (none) 29@cindex options for ARM (none) 30 31@table @code 32 33@cindex @code{-marm} command line option, ARM 34@item -marm@code{[2|250|3|6|60|600|610|620|7|7m|7d|7dm|7di|7dmi|70|700|700i|710|710c|7100|7500|7500fe|7tdmi|8|810|9|9tdmi|920|strongarm|strongarm110|strongarm1100]} 35This option specifies the target processor. The assembler will issue an 36error message if an attempt is made to assemble an instruction which 37will not execute on the target processor. 38 39@cindex @code{-marmv} command line option, ARM 40@item -marmv@code{[2|2a|3|3m|4|4t|5|5t]} 41This option specifies the target architecture. The assembler will issue 42an error message if an attempt is made to assemble an instruction which 43will not execute on the target architecture. 44 45@cindex @code{-mthumb} command line option, ARM 46@item -mthumb 47This option specifies that only Thumb instructions should be assembled. 48 49@cindex @code{-mall} command line option, ARM 50@item -mall 51This option specifies that any Arm or Thumb instruction should be assembled. 52 53@cindex @code{-mfpa} command line option, ARM 54@item -mfpa @var{[10|11]} 55This option specifies the floating point architecture in use on the 56target processor. 57 58@cindex @code{-mfpe-old} command line option, ARM 59@item -mfpe-old 60Do not allow the assemble of floating point multiple instructions. 61 62@cindex @code{-mno-fpu} command line option, ARM 63@item -mno-fpu 64Do not allow the assembly of any floating point instructions. 65 66@cindex @code{-mthumb-interwork} command line option, ARM 67@item -mthumb-interwork 68This option specifies that the output generated by the assembler should 69be marked as supporting interworking. 70 71@cindex @code{-mapcs} command line option, ARM 72@item -mapcs @var{[26|32]} 73This option specifies that the output generated by the assembler should 74be marked as supporting the indicated version of the Arm Procedure. 75Calling Standard. 76 77@cindex @code{-mapcs-float} command line option, ARM 78@item -mapcs-float 79This indicates the the floating point variant of the APCS should be 80used. In this variant floating point arguments are passed in FP 81registers rather than integer registers. 82 83@cindex @code{-mapcs-reentrant} command line option, ARM 84@item -mapcs-reentrant 85This indicates that the reentrant variant of the APCS should be used. 86This variant supports position independent code. 87 88@cindex @code{-EB} command line option, ARM 89@item -EB 90This option specifies that the output generated by the assembler should 91be marked as being encoded for a big-endian processor. 92 93@cindex @code{-EL} command line option, ARM 94@item -EL 95This option specifies that the output generated by the assembler should 96be marked as being encoded for a little-endian processor. 97 98@cindex @code{-k} command line option, ARM 99@cindex PIC code generation for ARM 100@item -k 101This option enables the generation of PIC (position independent code). 102 103@cindex @code{-moabi} command line option, ARM 104@item -moabi 105This indicates that the code should be assembled using the old ARM ELF 106conventions, based on a beta release release of the ARM-ELF 107specifications, rather than the default conventions which are based on 108the final release of the ARM-ELF specifications. 109 110@end table 111 112 113@node ARM Syntax 114@section Syntax 115@menu 116* ARM-Chars:: Special Characters 117* ARM-Regs:: Register Names 118@end menu 119 120@node ARM-Chars 121@subsection Special Characters 122 123@cindex line comment character, ARM 124@cindex ARM line comment character 125The presence of a @samp{@@} on a line indicates the start of a comment 126that extends to the end of the current line. If a @samp{#} appears as 127the first character of a line, the whole line is treated as a comment. 128 129@cindex line separator, ARM 130@cindex statement separator, ARM 131@cindex ARM line separator 132On ARM systems running the GNU/Linux operating system, @samp{;} can be 133used instead of a newline to separate statements. 134 135@cindex immediate character, ARM 136@cindex ARM immediate character 137Either @samp{#} or @samp{$} can be used to indicate immediate operands. 138 139@cindex identifiers, ARM 140@cindex ARM identifiers 141*TODO* Explain about /data modifier on symbols. 142 143@node ARM-Regs 144@subsection Register Names 145 146@cindex ARM register names 147@cindex register names, ARM 148*TODO* Explain about ARM register naming, and the predefined names. 149 150@node ARM Floating Point 151@section Floating Point 152 153@cindex floating point, ARM (@sc{ieee}) 154@cindex ARM floating point (@sc{ieee}) 155The ARM family uses @sc{ieee} floating-point numbers. 156 157 158 159@node ARM Directives 160@section ARM Machine Directives 161 162@cindex machine directives, ARM 163@cindex ARM machine directives 164@table @code 165 166@cindex @code{align} directive, ARM 167@item .align @var{expression} [, @var{expression}] 168This is the generic @var{.align} directive. For the ARM however if the 169first argument is zero (ie no alignment is needed) the assembler will 170behave as if the argument had been 2 (ie pad to the next four byte 171boundary). This is for compatability with ARM's own assembler. 172 173@cindex @code{req} directive, ARM 174@item @var{name} .req @var{register name} 175This creates an alias for @var{register name} called @var{name}. For 176example: 177 178@smallexample 179 foo .req r0 180@end smallexample 181 182@cindex @code{code} directive, ARM 183@item .code @var{[16|32]} 184This directive selects the instruction set being generated. The value 16 185selects Thumb, with the value 32 selecting ARM. 186 187@cindex @code{thumb} directive, ARM 188@item .thumb 189This performs the same action as @var{.code 16}. 190 191@cindex @code{arm} directive, ARM 192@item .arm 193This performs the same action as @var{.code 32}. 194 195@cindex @code{force_thumb} directive, ARM 196@item .force_thumb 197This directive forces the selection of Thumb instructions, even if the 198target processor does not support those instructions 199 200@cindex @code{thumb_func} directive, ARM 201@item .thumb_func 202This directive specifies that the following symbol is the name of a 203Thumb encoded function. This information is necessary in order to allow 204the assembler and linker to generate correct code for interworking 205between Arm and Thumb instructions and should be used even if 206interworking is not going to be performed. 207 208@cindex @code{thumb_set} directive, ARM 209@item .thumb_set 210This performs the equivalent of a @code{.set} directive in that it 211creates a symbol which is an alias for another symbol (possibly not yet 212defined). This directive also has the added property in that it marks 213the aliased symbol as being a thumb function entry point, in the same 214way that the @code{.thumb_func} directive does. 215 216@cindex @code{.ltorg} directive, ARM 217@item .ltorg 218This directive causes the current contents of the literal pool to be 219dumped into the current section (which is assumed to be the .text 220section) at the current location (aligned to a word boundary). 221 222@cindex @code{.pool} directive, ARM 223@item .pool 224This is a synonym for .ltorg. 225 226@end table 227 228@node ARM Opcodes 229@section Opcodes 230 231@cindex ARM opcodes 232@cindex opcodes for ARM 233@code{@value{AS}} implements all the standard ARM opcodes. It also 234implements several pseudo opcodes, including several synthetic load 235instructions. 236 237@table @code 238 239@cindex @code{NOP} pseudo op, ARM 240@item NOP 241@smallexample 242 nop 243@end smallexample 244 245This pseudo op will always evaluate to a legal ARM instruction that does 246nothing. Currently it will evaluate to MOV r0, r0. 247 248@cindex @code{LDR reg,=<label>} pseudo op, ARM 249@item LDR 250@smallexample 251 ldr <register> , = <expression> 252@end smallexample 253 254If expression evaluates to a numeric constant then a MOV or MVN 255instruction will be used in place of the LDR instruction, if the 256constant can be generated by either of these instructions. Otherwise 257the constant will be placed into the nearest literal pool (if it not 258already there) and a PC relative LDR instruction will be generated. 259 260@cindex @code{ADR reg,<label>} pseudo op, ARM 261@item ADR 262@smallexample 263 adr <register> <label> 264@end smallexample 265 266This instruction will load the address of @var{label} into the indicated 267register. The instruction will evaluate to a PC relative ADD or SUB 268instruction depending upon where the label is located. If the label is 269out of range, or if it is not defined in the same file (and section) as 270the ADR instruction, then an error will be generated. This instruction 271will not make use of the literal pool. 272 273@cindex @code{ADRL reg,<label>} pseudo op, ARM 274@item ADRL 275@smallexample 276 adrl <register> <label> 277@end smallexample 278 279This instruction will load the address of @var{label} into the indicated 280register. The instruction will evaluate to one or two a PC relative ADD 281or SUB instructions depending upon where the label is located. If a 282second instruction is not needed a NOP instruction will be generated in 283its place, so that this instruction is always 8 bytes long. 284 285If the label is out of range, or if it is not defined in the same file 286(and section) as the ADRL instruction, then an error will be generated. 287This instruction will not make use of the literal pool. 288 289@end table 290 291For information on the ARM or Thumb instruction sets, see @cite{ARM 292Software Development Toolkit Reference Manual}, Advanced RISC Machines 293Ltd. 294 295