S/390: Add support for IBM z13.
[deliverable/binutils-gdb.git] / gas / doc / c-arm.texi
1 @c Copyright (C) 1996-2015 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 * ARM Mapping Symbols:: Mapping Symbols
25 * ARM Unwinding Tutorial:: Unwinding
26 @end menu
27
28 @node ARM Options
29 @section Options
30 @cindex ARM options (none)
31 @cindex options for ARM (none)
32
33 @table @code
34
35 @cindex @code{-mcpu=} command line option, ARM
36 @item -mcpu=@var{processor}[+@var{extension}@dots{}]
37 This option specifies the target processor. The assembler will issue an
38 error message if an attempt is made to assemble an instruction which
39 will not execute on the target processor. The following processor names are
40 recognized:
41 @code{arm1},
42 @code{arm2},
43 @code{arm250},
44 @code{arm3},
45 @code{arm6},
46 @code{arm60},
47 @code{arm600},
48 @code{arm610},
49 @code{arm620},
50 @code{arm7},
51 @code{arm7m},
52 @code{arm7d},
53 @code{arm7dm},
54 @code{arm7di},
55 @code{arm7dmi},
56 @code{arm70},
57 @code{arm700},
58 @code{arm700i},
59 @code{arm710},
60 @code{arm710t},
61 @code{arm720},
62 @code{arm720t},
63 @code{arm740t},
64 @code{arm710c},
65 @code{arm7100},
66 @code{arm7500},
67 @code{arm7500fe},
68 @code{arm7t},
69 @code{arm7tdmi},
70 @code{arm7tdmi-s},
71 @code{arm8},
72 @code{arm810},
73 @code{strongarm},
74 @code{strongarm1},
75 @code{strongarm110},
76 @code{strongarm1100},
77 @code{strongarm1110},
78 @code{arm9},
79 @code{arm920},
80 @code{arm920t},
81 @code{arm922t},
82 @code{arm940t},
83 @code{arm9tdmi},
84 @code{fa526} (Faraday FA526 processor),
85 @code{fa626} (Faraday FA626 processor),
86 @code{arm9e},
87 @code{arm926e},
88 @code{arm926ej-s},
89 @code{arm946e-r0},
90 @code{arm946e},
91 @code{arm946e-s},
92 @code{arm966e-r0},
93 @code{arm966e},
94 @code{arm966e-s},
95 @code{arm968e-s},
96 @code{arm10t},
97 @code{arm10tdmi},
98 @code{arm10e},
99 @code{arm1020},
100 @code{arm1020t},
101 @code{arm1020e},
102 @code{arm1022e},
103 @code{arm1026ej-s},
104 @code{fa606te} (Faraday FA606TE processor),
105 @code{fa616te} (Faraday FA616TE processor),
106 @code{fa626te} (Faraday FA626TE processor),
107 @code{fmp626} (Faraday FMP626 processor),
108 @code{fa726te} (Faraday FA726TE processor),
109 @code{arm1136j-s},
110 @code{arm1136jf-s},
111 @code{arm1156t2-s},
112 @code{arm1156t2f-s},
113 @code{arm1176jz-s},
114 @code{arm1176jzf-s},
115 @code{mpcore},
116 @code{mpcorenovfp},
117 @code{cortex-a5},
118 @code{cortex-a7},
119 @code{cortex-a8},
120 @code{cortex-a9},
121 @code{cortex-a15},
122 @code{cortex-r4},
123 @code{cortex-r4f},
124 @code{cortex-r5},
125 @code{cortex-r7},
126 @code{cortex-m7},
127 @code{cortex-m4},
128 @code{cortex-m3},
129 @code{cortex-m1},
130 @code{cortex-m0},
131 @code{cortex-m0plus},
132 @code{marvell-pj4},
133 @code{marvell-whitney},
134 @code{xgene1},
135 @code{xgene2},
136 @code{ep9312} (ARM920 with Cirrus Maverick coprocessor),
137 @code{i80200} (Intel XScale processor)
138 @code{iwmmxt} (Intel(r) XScale processor with Wireless MMX(tm) technology coprocessor)
139 and
140 @code{xscale}.
141 The special name @code{all} may be used to allow the
142 assembler to accept instructions valid for any ARM processor.
143
144 In addition to the basic instruction set, the assembler can be told to
145 accept various extension mnemonics that extend the processor using the
146 co-processor instruction space. For example, @code{-mcpu=arm920+maverick}
147 is equivalent to specifying @code{-mcpu=ep9312}.
148
149 Multiple extensions may be specified, separated by a @code{+}. The
150 extensions should be specified in ascending alphabetical order.
151
152 Some extensions may be restricted to particular architectures; this is
153 documented in the list of extensions below.
154
155 Extension mnemonics may also be removed from those the assembler accepts.
156 This is done be prepending @code{no} to the option that adds the extension.
157 Extensions that are removed should be listed after all extensions which have
158 been added, again in ascending alphabetical order. For example,
159 @code{-mcpu=ep9312+nomaverick} is equivalent to specifying @code{-mcpu=arm920}.
160
161
162 The following extensions are currently supported:
163 @code{crc}
164 @code{crypto} (Cryptography Extensions for v8-A architecture, implies @code{fp+simd}),
165 @code{fp} (Floating Point Extensions for v8-A architecture),
166 @code{idiv} (Integer Divide Extensions for v7-A and v7-R architectures),
167 @code{iwmmxt},
168 @code{iwmmxt2},
169 @code{xscale},
170 @code{maverick},
171 @code{mp} (Multiprocessing Extensions for v7-A and v7-R
172 architectures),
173 @code{os} (Operating System for v6M architecture),
174 @code{sec} (Security Extensions for v6K and v7-A architectures),
175 @code{simd} (Advanced SIMD Extensions for v8-A architecture, implies @code{fp}),
176 @code{virt} (Virtualization Extensions for v7-A architecture, implies
177 @code{idiv}),
178 and
179 @code{xscale}.
180
181 @cindex @code{-march=} command line option, ARM
182 @item -march=@var{architecture}[+@var{extension}@dots{}]
183 This option specifies the target architecture. The assembler will issue
184 an error message if an attempt is made to assemble an instruction which
185 will not execute on the target architecture. The following architecture
186 names are recognized:
187 @code{armv1},
188 @code{armv2},
189 @code{armv2a},
190 @code{armv2s},
191 @code{armv3},
192 @code{armv3m},
193 @code{armv4},
194 @code{armv4xm},
195 @code{armv4t},
196 @code{armv4txm},
197 @code{armv5},
198 @code{armv5t},
199 @code{armv5txm},
200 @code{armv5te},
201 @code{armv5texp},
202 @code{armv6},
203 @code{armv6j},
204 @code{armv6k},
205 @code{armv6z},
206 @code{armv6zk},
207 @code{armv6-m},
208 @code{armv6s-m},
209 @code{armv7},
210 @code{armv7-a},
211 @code{armv7ve},
212 @code{armv7-r},
213 @code{armv7-m},
214 @code{armv7e-m},
215 @code{armv8-a},
216 @code{iwmmxt}
217 @code{iwmmxt2}
218 and
219 @code{xscale}.
220 If both @code{-mcpu} and
221 @code{-march} are specified, the assembler will use
222 the setting for @code{-mcpu}.
223
224 The architecture option can be extended with the same instruction set
225 extension options as the @code{-mcpu} option.
226
227 @cindex @code{-mfpu=} command line option, ARM
228 @item -mfpu=@var{floating-point-format}
229
230 This option specifies the floating point format to assemble for. The
231 assembler will issue an error message if an attempt is made to assemble
232 an instruction which will not execute on the target floating point unit.
233 The following format options are recognized:
234 @code{softfpa},
235 @code{fpe},
236 @code{fpe2},
237 @code{fpe3},
238 @code{fpa},
239 @code{fpa10},
240 @code{fpa11},
241 @code{arm7500fe},
242 @code{softvfp},
243 @code{softvfp+vfp},
244 @code{vfp},
245 @code{vfp10},
246 @code{vfp10-r0},
247 @code{vfp9},
248 @code{vfpxd},
249 @code{vfpv2},
250 @code{vfpv3},
251 @code{vfpv3-fp16},
252 @code{vfpv3-d16},
253 @code{vfpv3-d16-fp16},
254 @code{vfpv3xd},
255 @code{vfpv3xd-d16},
256 @code{vfpv4},
257 @code{vfpv4-d16},
258 @code{fpv4-sp-d16},
259 @code{fpv5-sp-d16},
260 @code{fpv5-d16},
261 @code{fp-armv8},
262 @code{arm1020t},
263 @code{arm1020e},
264 @code{arm1136jf-s},
265 @code{maverick},
266 @code{neon},
267 @code{neon-vfpv4},
268 @code{neon-fp-armv8},
269 and
270 @code{crypto-neon-fp-armv8}.
271
272 In addition to determining which instructions are assembled, this option
273 also affects the way in which the @code{.double} assembler directive behaves
274 when assembling little-endian code.
275
276 The default is dependent on the processor selected. For Architecture 5 or
277 later, the default is to assembler for VFP instructions; for earlier
278 architectures the default is to assemble for FPA instructions.
279
280 @cindex @code{-mthumb} command line option, ARM
281 @item -mthumb
282 This option specifies that the assembler should start assembling Thumb
283 instructions; that is, it should behave as though the file starts with a
284 @code{.code 16} directive.
285
286 @cindex @code{-mthumb-interwork} command line option, ARM
287 @item -mthumb-interwork
288 This option specifies that the output generated by the assembler should
289 be marked as supporting interworking.
290
291 @cindex @code{-mimplicit-it} command line option, ARM
292 @item -mimplicit-it=never
293 @itemx -mimplicit-it=always
294 @itemx -mimplicit-it=arm
295 @itemx -mimplicit-it=thumb
296 The @code{-mimplicit-it} option controls the behavior of the assembler when
297 conditional instructions are not enclosed in IT blocks.
298 There are four possible behaviors.
299 If @code{never} is specified, such constructs cause a warning in ARM
300 code and an error in Thumb-2 code.
301 If @code{always} is specified, such constructs are accepted in both
302 ARM and Thumb-2 code, where the IT instruction is added implicitly.
303 If @code{arm} is specified, such constructs are accepted in ARM code
304 and cause an error in Thumb-2 code.
305 If @code{thumb} is specified, such constructs cause a warning in ARM
306 code and are accepted in Thumb-2 code. If you omit this option, the
307 behavior is equivalent to @code{-mimplicit-it=arm}.
308
309 @cindex @code{-mapcs-26} command line option, ARM
310 @cindex @code{-mapcs-32} command line option, ARM
311 @item -mapcs-26
312 @itemx -mapcs-32
313 These options specify that the output generated by the assembler should
314 be marked as supporting the indicated version of the Arm Procedure.
315 Calling Standard.
316
317 @cindex @code{-matpcs} command line option, ARM
318 @item -matpcs
319 This option specifies that the output generated by the assembler should
320 be marked as supporting the Arm/Thumb Procedure Calling Standard. If
321 enabled this option will cause the assembler to create an empty
322 debugging section in the object file called .arm.atpcs. Debuggers can
323 use this to determine the ABI being used by.
324
325 @cindex @code{-mapcs-float} command line option, ARM
326 @item -mapcs-float
327 This indicates the floating point variant of the APCS should be
328 used. In this variant floating point arguments are passed in FP
329 registers rather than integer registers.
330
331 @cindex @code{-mapcs-reentrant} command line option, ARM
332 @item -mapcs-reentrant
333 This indicates that the reentrant variant of the APCS should be used.
334 This variant supports position independent code.
335
336 @cindex @code{-mfloat-abi=} command line option, ARM
337 @item -mfloat-abi=@var{abi}
338 This option specifies that the output generated by the assembler should be
339 marked as using specified floating point ABI.
340 The following values are recognized:
341 @code{soft},
342 @code{softfp}
343 and
344 @code{hard}.
345
346 @cindex @code{-eabi=} command line option, ARM
347 @item -meabi=@var{ver}
348 This option specifies which EABI version the produced object files should
349 conform to.
350 The following values are recognized:
351 @code{gnu},
352 @code{4}
353 and
354 @code{5}.
355
356 @cindex @code{-EB} command line option, ARM
357 @item -EB
358 This option specifies that the output generated by the assembler should
359 be marked as being encoded for a big-endian processor.
360
361 @cindex @code{-EL} command line option, ARM
362 @item -EL
363 This option specifies that the output generated by the assembler should
364 be marked as being encoded for a little-endian processor.
365
366 @cindex @code{-k} command line option, ARM
367 @cindex PIC code generation for ARM
368 @item -k
369 This option specifies that the output of the assembler should be marked
370 as position-independent code (PIC).
371
372 @cindex @code{--fix-v4bx} command line option, ARM
373 @item --fix-v4bx
374 Allow @code{BX} instructions in ARMv4 code. This is intended for use with
375 the linker option of the same name.
376
377 @cindex @code{-mwarn-deprecated} command line option, ARM
378 @item -mwarn-deprecated
379 @itemx -mno-warn-deprecated
380 Enable or disable warnings about using deprecated options or
381 features. The default is to warn.
382
383 @cindex @code{-mccs} command line option, ARM
384 @item -mccs
385 Turns on CodeComposer Studio assembly syntax compatibility mode.
386
387 @end table
388
389
390 @node ARM Syntax
391 @section Syntax
392 @menu
393 * ARM-Instruction-Set:: Instruction Set
394 * ARM-Chars:: Special Characters
395 * ARM-Regs:: Register Names
396 * ARM-Relocations:: Relocations
397 * ARM-Neon-Alignment:: NEON Alignment Specifiers
398 @end menu
399
400 @node ARM-Instruction-Set
401 @subsection Instruction Set Syntax
402 Two slightly different syntaxes are support for ARM and THUMB
403 instructions. The default, @code{divided}, uses the old style where
404 ARM and THUMB instructions had their own, separate syntaxes. The new,
405 @code{unified} syntax, which can be selected via the @code{.syntax}
406 directive, and has the following main features:
407
408 @itemize @bullet
409 @item
410 Immediate operands do not require a @code{#} prefix.
411
412 @item
413 The @code{IT} instruction may appear, and if it does it is validated
414 against subsequent conditional affixes. In ARM mode it does not
415 generate machine code, in THUMB mode it does.
416
417 @item
418 For ARM instructions the conditional affixes always appear at the end
419 of the instruction. For THUMB instructions conditional affixes can be
420 used, but only inside the scope of an @code{IT} instruction.
421
422 @item
423 All of the instructions new to the V6T2 architecture (and later) are
424 available. (Only a few such instructions can be written in the
425 @code{divided} syntax).
426
427 @item
428 The @code{.N} and @code{.W} suffixes are recognized and honored.
429
430 @item
431 All instructions set the flags if and only if they have an @code{s}
432 affix.
433 @end itemize
434
435 @node ARM-Chars
436 @subsection Special Characters
437
438 @cindex line comment character, ARM
439 @cindex ARM line comment character
440 The presence of a @samp{@@} anywhere on a line indicates the start of
441 a comment that extends to the end of that line.
442
443 If a @samp{#} appears as the first character of a line then the whole
444 line is treated as a comment, but in this case the line could also be
445 a logical line number directive (@pxref{Comments}) or a preprocessor
446 control command (@pxref{Preprocessing}).
447
448 @cindex line separator, ARM
449 @cindex statement separator, ARM
450 @cindex ARM line separator
451 The @samp{;} character can be used instead of a newline to separate
452 statements.
453
454 @cindex immediate character, ARM
455 @cindex ARM immediate character
456 Either @samp{#} or @samp{$} can be used to indicate immediate operands.
457
458 @cindex identifiers, ARM
459 @cindex ARM identifiers
460 *TODO* Explain about /data modifier on symbols.
461
462 @node ARM-Regs
463 @subsection Register Names
464
465 @cindex ARM register names
466 @cindex register names, ARM
467 *TODO* Explain about ARM register naming, and the predefined names.
468
469 @node ARM-Relocations
470 @subsection ARM relocation generation
471
472 @cindex data relocations, ARM
473 @cindex ARM data relocations
474 Specific data relocations can be generated by putting the relocation name
475 in parentheses after the symbol name. For example:
476
477 @smallexample
478 .word foo(TARGET1)
479 @end smallexample
480
481 This will generate an @samp{R_ARM_TARGET1} relocation against the symbol
482 @var{foo}.
483 The following relocations are supported:
484 @code{GOT},
485 @code{GOTOFF},
486 @code{TARGET1},
487 @code{TARGET2},
488 @code{SBREL},
489 @code{TLSGD},
490 @code{TLSLDM},
491 @code{TLSLDO},
492 @code{TLSDESC},
493 @code{TLSCALL},
494 @code{GOTTPOFF},
495 @code{GOT_PREL}
496 and
497 @code{TPOFF}.
498
499 For compatibility with older toolchains the assembler also accepts
500 @code{(PLT)} after branch targets. On legacy targets this will
501 generate the deprecated @samp{R_ARM_PLT32} relocation. On EABI
502 targets it will encode either the @samp{R_ARM_CALL} or
503 @samp{R_ARM_JUMP24} relocation, as appropriate.
504
505 @cindex MOVW and MOVT relocations, ARM
506 Relocations for @samp{MOVW} and @samp{MOVT} instructions can be generated
507 by prefixing the value with @samp{#:lower16:} and @samp{#:upper16}
508 respectively. For example to load the 32-bit address of foo into r0:
509
510 @smallexample
511 MOVW r0, #:lower16:foo
512 MOVT r0, #:upper16:foo
513 @end smallexample
514
515 @node ARM-Neon-Alignment
516 @subsection NEON Alignment Specifiers
517
518 @cindex alignment for NEON instructions
519 Some NEON load/store instructions allow an optional address
520 alignment qualifier.
521 The ARM documentation specifies that this is indicated by
522 @samp{@@ @var{align}}. However GAS already interprets
523 the @samp{@@} character as a "line comment" start,
524 so @samp{: @var{align}} is used instead. For example:
525
526 @smallexample
527 vld1.8 @{q0@}, [r0, :128]
528 @end smallexample
529
530 @node ARM Floating Point
531 @section Floating Point
532
533 @cindex floating point, ARM (@sc{ieee})
534 @cindex ARM floating point (@sc{ieee})
535 The ARM family uses @sc{ieee} floating-point numbers.
536
537 @node ARM Directives
538 @section ARM Machine Directives
539
540 @cindex machine directives, ARM
541 @cindex ARM machine directives
542 @table @code
543
544 @c AAAAAAAAAAAAAAAAAAAAAAAAA
545
546 @cindex @code{.2byte} directive, ARM
547 @cindex @code{.4byte} directive, ARM
548 @cindex @code{.8byte} directive, ARM
549 @item .2byte @var{expression} [, @var{expression}]*
550 @itemx .4byte @var{expression} [, @var{expression}]*
551 @itemx .8byte @var{expression} [, @var{expression}]*
552 These directives write 2, 4 or 8 byte values to the output section.
553
554 @cindex @code{.align} directive, ARM
555 @item .align @var{expression} [, @var{expression}]
556 This is the generic @var{.align} directive. For the ARM however if the
557 first argument is zero (ie no alignment is needed) the assembler will
558 behave as if the argument had been 2 (ie pad to the next four byte
559 boundary). This is for compatibility with ARM's own assembler.
560
561 @cindex @code{.arch} directive, ARM
562 @item .arch @var{name}
563 Select the target architecture. Valid values for @var{name} are the same as
564 for the @option{-march} commandline option.
565
566 Specifying @code{.arch} clears any previously selected architecture
567 extensions.
568
569 @cindex @code{.arch_extension} directive, ARM
570 @item .arch_extension @var{name}
571 Add or remove an architecture extension to the target architecture. Valid
572 values for @var{name} are the same as those accepted as architectural
573 extensions by the @option{-mcpu} commandline option.
574
575 @code{.arch_extension} may be used multiple times to add or remove extensions
576 incrementally to the architecture being compiled for.
577
578 @cindex @code{.arm} directive, ARM
579 @item .arm
580 This performs the same action as @var{.code 32}.
581
582 @c BBBBBBBBBBBBBBBBBBBBBBBBBB
583
584 @cindex @code{.bss} directive, ARM
585 @item .bss
586 This directive switches to the @code{.bss} section.
587
588 @c CCCCCCCCCCCCCCCCCCCCCCCCCC
589
590 @cindex @code{.cantunwind} directive, ARM
591 @item .cantunwind
592 Prevents unwinding through the current function. No personality routine
593 or exception table data is required or permitted.
594
595 @cindex @code{.code} directive, ARM
596 @item .code @code{[16|32]}
597 This directive selects the instruction set being generated. The value 16
598 selects Thumb, with the value 32 selecting ARM.
599
600 @cindex @code{.cpu} directive, ARM
601 @item .cpu @var{name}
602 Select the target processor. Valid values for @var{name} are the same as
603 for the @option{-mcpu} commandline option.
604
605 Specifying @code{.cpu} clears any previously selected architecture
606 extensions.
607
608 @c DDDDDDDDDDDDDDDDDDDDDDDDDD
609
610 @cindex @code{.dn} and @code{.qn} directives, ARM
611 @item @var{name} .dn @var{register name} [@var{.type}] [[@var{index}]]
612 @itemx @var{name} .qn @var{register name} [@var{.type}] [[@var{index}]]
613
614 The @code{dn} and @code{qn} directives are used to create typed
615 and/or indexed register aliases for use in Advanced SIMD Extension
616 (Neon) instructions. The former should be used to create aliases
617 of double-precision registers, and the latter to create aliases of
618 quad-precision registers.
619
620 If these directives are used to create typed aliases, those aliases can
621 be used in Neon instructions instead of writing types after the mnemonic
622 or after each operand. For example:
623
624 @smallexample
625 x .dn d2.f32
626 y .dn d3.f32
627 z .dn d4.f32[1]
628 vmul x,y,z
629 @end smallexample
630
631 This is equivalent to writing the following:
632
633 @smallexample
634 vmul.f32 d2,d3,d4[1]
635 @end smallexample
636
637 Aliases created using @code{dn} or @code{qn} can be destroyed using
638 @code{unreq}.
639
640 @c EEEEEEEEEEEEEEEEEEEEEEEEEE
641
642 @cindex @code{.eabi_attribute} directive, ARM
643 @item .eabi_attribute @var{tag}, @var{value}
644 Set the EABI object attribute @var{tag} to @var{value}.
645
646 The @var{tag} is either an attribute number, or one of the following:
647 @code{Tag_CPU_raw_name}, @code{Tag_CPU_name}, @code{Tag_CPU_arch},
648 @code{Tag_CPU_arch_profile}, @code{Tag_ARM_ISA_use},
649 @code{Tag_THUMB_ISA_use}, @code{Tag_FP_arch}, @code{Tag_WMMX_arch},
650 @code{Tag_Advanced_SIMD_arch}, @code{Tag_PCS_config},
651 @code{Tag_ABI_PCS_R9_use}, @code{Tag_ABI_PCS_RW_data},
652 @code{Tag_ABI_PCS_RO_data}, @code{Tag_ABI_PCS_GOT_use},
653 @code{Tag_ABI_PCS_wchar_t}, @code{Tag_ABI_FP_rounding},
654 @code{Tag_ABI_FP_denormal}, @code{Tag_ABI_FP_exceptions},
655 @code{Tag_ABI_FP_user_exceptions}, @code{Tag_ABI_FP_number_model},
656 @code{Tag_ABI_align_needed}, @code{Tag_ABI_align_preserved},
657 @code{Tag_ABI_enum_size}, @code{Tag_ABI_HardFP_use},
658 @code{Tag_ABI_VFP_args}, @code{Tag_ABI_WMMX_args},
659 @code{Tag_ABI_optimization_goals}, @code{Tag_ABI_FP_optimization_goals},
660 @code{Tag_compatibility}, @code{Tag_CPU_unaligned_access},
661 @code{Tag_FP_HP_extension}, @code{Tag_ABI_FP_16bit_format},
662 @code{Tag_MPextension_use}, @code{Tag_DIV_use},
663 @code{Tag_nodefaults}, @code{Tag_also_compatible_with},
664 @code{Tag_conformance}, @code{Tag_T2EE_use},
665 @code{Tag_Virtualization_use}
666
667 The @var{value} is either a @code{number}, @code{"string"}, or
668 @code{number, "string"} depending on the tag.
669
670 Note - the following legacy values are also accepted by @var{tag}:
671 @code{Tag_VFP_arch}, @code{Tag_ABI_align8_needed},
672 @code{Tag_ABI_align8_preserved}, @code{Tag_VFP_HP_extension},
673
674 @cindex @code{.even} directive, ARM
675 @item .even
676 This directive aligns to an even-numbered address.
677
678 @cindex @code{.extend} directive, ARM
679 @cindex @code{.ldouble} directive, ARM
680 @item .extend @var{expression} [, @var{expression}]*
681 @itemx .ldouble @var{expression} [, @var{expression}]*
682 These directives write 12byte long double floating-point values to the
683 output section. These are not compatible with current ARM processors
684 or ABIs.
685
686 @c FFFFFFFFFFFFFFFFFFFFFFFFFF
687
688 @anchor{arm_fnend}
689 @cindex @code{.fnend} directive, ARM
690 @item .fnend
691 Marks the end of a function with an unwind table entry. The unwind index
692 table entry is created when this directive is processed.
693
694 If no personality routine has been specified then standard personality
695 routine 0 or 1 will be used, depending on the number of unwind opcodes
696 required.
697
698 @anchor{arm_fnstart}
699 @cindex @code{.fnstart} directive, ARM
700 @item .fnstart
701 Marks the start of a function with an unwind table entry.
702
703 @cindex @code{.force_thumb} directive, ARM
704 @item .force_thumb
705 This directive forces the selection of Thumb instructions, even if the
706 target processor does not support those instructions
707
708 @cindex @code{.fpu} directive, ARM
709 @item .fpu @var{name}
710 Select the floating-point unit to assemble for. Valid values for @var{name}
711 are the same as for the @option{-mfpu} commandline option.
712
713 @c GGGGGGGGGGGGGGGGGGGGGGGGGG
714 @c HHHHHHHHHHHHHHHHHHHHHHHHHH
715
716 @cindex @code{.handlerdata} directive, ARM
717 @item .handlerdata
718 Marks the end of the current function, and the start of the exception table
719 entry for that function. Anything between this directive and the
720 @code{.fnend} directive will be added to the exception table entry.
721
722 Must be preceded by a @code{.personality} or @code{.personalityindex}
723 directive.
724
725 @c IIIIIIIIIIIIIIIIIIIIIIIIII
726
727 @cindex @code{.inst} directive, ARM
728 @item .inst @var{opcode} [ , @dots{} ]
729 @itemx .inst.n @var{opcode} [ , @dots{} ]
730 @itemx .inst.w @var{opcode} [ , @dots{} ]
731 Generates the instruction corresponding to the numerical value @var{opcode}.
732 @code{.inst.n} and @code{.inst.w} allow the Thumb instruction size to be
733 specified explicitly, overriding the normal encoding rules.
734
735 @c JJJJJJJJJJJJJJJJJJJJJJJJJJ
736 @c KKKKKKKKKKKKKKKKKKKKKKKKKK
737 @c LLLLLLLLLLLLLLLLLLLLLLLLLL
738
739 @item .ldouble @var{expression} [, @var{expression}]*
740 See @code{.extend}.
741
742 @cindex @code{.ltorg} directive, ARM
743 @item .ltorg
744 This directive causes the current contents of the literal pool to be
745 dumped into the current section (which is assumed to be the .text
746 section) at the current location (aligned to a word boundary).
747 @code{GAS} maintains a separate literal pool for each section and each
748 sub-section. The @code{.ltorg} directive will only affect the literal
749 pool of the current section and sub-section. At the end of assembly
750 all remaining, un-empty literal pools will automatically be dumped.
751
752 Note - older versions of @code{GAS} would dump the current literal
753 pool any time a section change occurred. This is no longer done, since
754 it prevents accurate control of the placement of literal pools.
755
756 @c MMMMMMMMMMMMMMMMMMMMMMMMMM
757
758 @cindex @code{.movsp} directive, ARM
759 @item .movsp @var{reg} [, #@var{offset}]
760 Tell the unwinder that @var{reg} contains an offset from the current
761 stack pointer. If @var{offset} is not specified then it is assumed to be
762 zero.
763
764 @c NNNNNNNNNNNNNNNNNNNNNNNNNN
765 @c OOOOOOOOOOOOOOOOOOOOOOOOOO
766
767 @cindex @code{.object_arch} directive, ARM
768 @item .object_arch @var{name}
769 Override the architecture recorded in the EABI object attribute section.
770 Valid values for @var{name} are the same as for the @code{.arch} directive.
771 Typically this is useful when code uses runtime detection of CPU features.
772
773 @c PPPPPPPPPPPPPPPPPPPPPPPPPP
774
775 @cindex @code{.packed} directive, ARM
776 @item .packed @var{expression} [, @var{expression}]*
777 This directive writes 12-byte packed floating-point values to the
778 output section. These are not compatible with current ARM processors
779 or ABIs.
780
781 @anchor{arm_pad}
782 @cindex @code{.pad} directive, ARM
783 @item .pad #@var{count}
784 Generate unwinder annotations for a stack adjustment of @var{count} bytes.
785 A positive value indicates the function prologue allocated stack space by
786 decrementing the stack pointer.
787
788 @cindex @code{.personality} directive, ARM
789 @item .personality @var{name}
790 Sets the personality routine for the current function to @var{name}.
791
792 @cindex @code{.personalityindex} directive, ARM
793 @item .personalityindex @var{index}
794 Sets the personality routine for the current function to the EABI standard
795 routine number @var{index}
796
797 @cindex @code{.pool} directive, ARM
798 @item .pool
799 This is a synonym for .ltorg.
800
801 @c QQQQQQQQQQQQQQQQQQQQQQQQQQ
802 @c RRRRRRRRRRRRRRRRRRRRRRRRRR
803
804 @cindex @code{.req} directive, ARM
805 @item @var{name} .req @var{register name}
806 This creates an alias for @var{register name} called @var{name}. For
807 example:
808
809 @smallexample
810 foo .req r0
811 @end smallexample
812
813 @c SSSSSSSSSSSSSSSSSSSSSSSSSS
814
815 @anchor{arm_save}
816 @cindex @code{.save} directive, ARM
817 @item .save @var{reglist}
818 Generate unwinder annotations to restore the registers in @var{reglist}.
819 The format of @var{reglist} is the same as the corresponding store-multiple
820 instruction.
821
822 @smallexample
823 @exdent @emph{core registers}
824 .save @{r4, r5, r6, lr@}
825 stmfd sp!, @{r4, r5, r6, lr@}
826 @exdent @emph{FPA registers}
827 .save f4, 2
828 sfmfd f4, 2, [sp]!
829 @exdent @emph{VFP registers}
830 .save @{d8, d9, d10@}
831 fstmdx sp!, @{d8, d9, d10@}
832 @exdent @emph{iWMMXt registers}
833 .save @{wr10, wr11@}
834 wstrd wr11, [sp, #-8]!
835 wstrd wr10, [sp, #-8]!
836 or
837 .save wr11
838 wstrd wr11, [sp, #-8]!
839 .save wr10
840 wstrd wr10, [sp, #-8]!
841 @end smallexample
842
843 @anchor{arm_setfp}
844 @cindex @code{.setfp} directive, ARM
845 @item .setfp @var{fpreg}, @var{spreg} [, #@var{offset}]
846 Make all unwinder annotations relative to a frame pointer. Without this
847 the unwinder will use offsets from the stack pointer.
848
849 The syntax of this directive is the same as the @code{add} or @code{mov}
850 instruction used to set the frame pointer. @var{spreg} must be either
851 @code{sp} or mentioned in a previous @code{.movsp} directive.
852
853 @smallexample
854 .movsp ip
855 mov ip, sp
856 @dots{}
857 .setfp fp, ip, #4
858 add fp, ip, #4
859 @end smallexample
860
861 @cindex @code{.secrel32} directive, ARM
862 @item .secrel32 @var{expression} [, @var{expression}]*
863 This directive emits relocations that evaluate to the section-relative
864 offset of each expression's symbol. This directive is only supported
865 for PE targets.
866
867 @cindex @code{.syntax} directive, ARM
868 @item .syntax [@code{unified} | @code{divided}]
869 This directive sets the Instruction Set Syntax as described in the
870 @ref{ARM-Instruction-Set} section.
871
872 @c TTTTTTTTTTTTTTTTTTTTTTTTTT
873
874 @cindex @code{.thumb} directive, ARM
875 @item .thumb
876 This performs the same action as @var{.code 16}.
877
878 @cindex @code{.thumb_func} directive, ARM
879 @item .thumb_func
880 This directive specifies that the following symbol is the name of a
881 Thumb encoded function. This information is necessary in order to allow
882 the assembler and linker to generate correct code for interworking
883 between Arm and Thumb instructions and should be used even if
884 interworking is not going to be performed. The presence of this
885 directive also implies @code{.thumb}
886
887 This directive is not neccessary when generating EABI objects. On these
888 targets the encoding is implicit when generating Thumb code.
889
890 @cindex @code{.thumb_set} directive, ARM
891 @item .thumb_set
892 This performs the equivalent of a @code{.set} directive in that it
893 creates a symbol which is an alias for another symbol (possibly not yet
894 defined). This directive also has the added property in that it marks
895 the aliased symbol as being a thumb function entry point, in the same
896 way that the @code{.thumb_func} directive does.
897
898 @cindex @code{.tlsdescseq} directive, ARM
899 @item .tlsdescseq @var{tls-variable}
900 This directive is used to annotate parts of an inlined TLS descriptor
901 trampoline. Normally the trampoline is provided by the linker, and
902 this directive is not needed.
903
904 @c UUUUUUUUUUUUUUUUUUUUUUUUUU
905
906 @cindex @code{.unreq} directive, ARM
907 @item .unreq @var{alias-name}
908 This undefines a register alias which was previously defined using the
909 @code{req}, @code{dn} or @code{qn} directives. For example:
910
911 @smallexample
912 foo .req r0
913 .unreq foo
914 @end smallexample
915
916 An error occurs if the name is undefined. Note - this pseudo op can
917 be used to delete builtin in register name aliases (eg 'r0'). This
918 should only be done if it is really necessary.
919
920 @cindex @code{.unwind_raw} directive, ARM
921 @item .unwind_raw @var{offset}, @var{byte1}, @dots{}
922 Insert one of more arbitary unwind opcode bytes, which are known to adjust
923 the stack pointer by @var{offset} bytes.
924
925 For example @code{.unwind_raw 4, 0xb1, 0x01} is equivalent to
926 @code{.save @{r0@}}
927
928 @c VVVVVVVVVVVVVVVVVVVVVVVVVV
929
930 @cindex @code{.vsave} directive, ARM
931 @item .vsave @var{vfp-reglist}
932 Generate unwinder annotations to restore the VFP registers in @var{vfp-reglist}
933 using FLDMD. Also works for VFPv3 registers
934 that are to be restored using VLDM.
935 The format of @var{vfp-reglist} is the same as the corresponding store-multiple
936 instruction.
937
938 @smallexample
939 @exdent @emph{VFP registers}
940 .vsave @{d8, d9, d10@}
941 fstmdd sp!, @{d8, d9, d10@}
942 @exdent @emph{VFPv3 registers}
943 .vsave @{d15, d16, d17@}
944 vstm sp!, @{d15, d16, d17@}
945 @end smallexample
946
947 Since FLDMX and FSTMX are now deprecated, this directive should be
948 used in favour of @code{.save} for saving VFP registers for ARMv6 and above.
949
950 @c WWWWWWWWWWWWWWWWWWWWWWWWWW
951 @c XXXXXXXXXXXXXXXXXXXXXXXXXX
952 @c YYYYYYYYYYYYYYYYYYYYYYYYYY
953 @c ZZZZZZZZZZZZZZZZZZZZZZZZZZ
954
955 @end table
956
957 @node ARM Opcodes
958 @section Opcodes
959
960 @cindex ARM opcodes
961 @cindex opcodes for ARM
962 @code{@value{AS}} implements all the standard ARM opcodes. It also
963 implements several pseudo opcodes, including several synthetic load
964 instructions.
965
966 @table @code
967
968 @cindex @code{NOP} pseudo op, ARM
969 @item NOP
970 @smallexample
971 nop
972 @end smallexample
973
974 This pseudo op will always evaluate to a legal ARM instruction that does
975 nothing. Currently it will evaluate to MOV r0, r0.
976
977 @cindex @code{LDR reg,=<label>} pseudo op, ARM
978 @item LDR
979 @smallexample
980 ldr <register> , = <expression>
981 @end smallexample
982
983 If expression evaluates to a numeric constant then a MOV or MVN
984 instruction will be used in place of the LDR instruction, if the
985 constant can be generated by either of these instructions. Otherwise
986 the constant will be placed into the nearest literal pool (if it not
987 already there) and a PC relative LDR instruction will be generated.
988
989 @cindex @code{ADR reg,<label>} pseudo op, ARM
990 @item ADR
991 @smallexample
992 adr <register> <label>
993 @end smallexample
994
995 This instruction will load the address of @var{label} into the indicated
996 register. The instruction will evaluate to a PC relative ADD or SUB
997 instruction depending upon where the label is located. If the label is
998 out of range, or if it is not defined in the same file (and section) as
999 the ADR instruction, then an error will be generated. This instruction
1000 will not make use of the literal pool.
1001
1002 @cindex @code{ADRL reg,<label>} pseudo op, ARM
1003 @item ADRL
1004 @smallexample
1005 adrl <register> <label>
1006 @end smallexample
1007
1008 This instruction will load the address of @var{label} into the indicated
1009 register. The instruction will evaluate to one or two PC relative ADD
1010 or SUB instructions depending upon where the label is located. If a
1011 second instruction is not needed a NOP instruction will be generated in
1012 its place, so that this instruction is always 8 bytes long.
1013
1014 If the label is out of range, or if it is not defined in the same file
1015 (and section) as the ADRL instruction, then an error will be generated.
1016 This instruction will not make use of the literal pool.
1017
1018 @end table
1019
1020 For information on the ARM or Thumb instruction sets, see @cite{ARM
1021 Software Development Toolkit Reference Manual}, Advanced RISC Machines
1022 Ltd.
1023
1024 @node ARM Mapping Symbols
1025 @section Mapping Symbols
1026
1027 The ARM ELF specification requires that special symbols be inserted
1028 into object files to mark certain features:
1029
1030 @table @code
1031
1032 @cindex @code{$a}
1033 @item $a
1034 At the start of a region of code containing ARM instructions.
1035
1036 @cindex @code{$t}
1037 @item $t
1038 At the start of a region of code containing THUMB instructions.
1039
1040 @cindex @code{$d}
1041 @item $d
1042 At the start of a region of data.
1043
1044 @end table
1045
1046 The assembler will automatically insert these symbols for you - there
1047 is no need to code them yourself. Support for tagging symbols ($b,
1048 $f, $p and $m) which is also mentioned in the current ARM ELF
1049 specification is not implemented. This is because they have been
1050 dropped from the new EABI and so tools cannot rely upon their
1051 presence.
1052
1053 @node ARM Unwinding Tutorial
1054 @section Unwinding
1055
1056 The ABI for the ARM Architecture specifies a standard format for
1057 exception unwind information. This information is used when an
1058 exception is thrown to determine where control should be transferred.
1059 In particular, the unwind information is used to determine which
1060 function called the function that threw the exception, and which
1061 function called that one, and so forth. This information is also used
1062 to restore the values of callee-saved registers in the function
1063 catching the exception.
1064
1065 If you are writing functions in assembly code, and those functions
1066 call other functions that throw exceptions, you must use assembly
1067 pseudo ops to ensure that appropriate exception unwind information is
1068 generated. Otherwise, if one of the functions called by your assembly
1069 code throws an exception, the run-time library will be unable to
1070 unwind the stack through your assembly code and your program will not
1071 behave correctly.
1072
1073 To illustrate the use of these pseudo ops, we will examine the code
1074 that G++ generates for the following C++ input:
1075
1076 @verbatim
1077 void callee (int *);
1078
1079 int
1080 caller ()
1081 {
1082 int i;
1083 callee (&i);
1084 return i;
1085 }
1086 @end verbatim
1087
1088 This example does not show how to throw or catch an exception from
1089 assembly code. That is a much more complex operation and should
1090 always be done in a high-level language, such as C++, that directly
1091 supports exceptions.
1092
1093 The code generated by one particular version of G++ when compiling the
1094 example above is:
1095
1096 @verbatim
1097 _Z6callerv:
1098 .fnstart
1099 .LFB2:
1100 @ Function supports interworking.
1101 @ args = 0, pretend = 0, frame = 8
1102 @ frame_needed = 1, uses_anonymous_args = 0
1103 stmfd sp!, {fp, lr}
1104 .save {fp, lr}
1105 .LCFI0:
1106 .setfp fp, sp, #4
1107 add fp, sp, #4
1108 .LCFI1:
1109 .pad #8
1110 sub sp, sp, #8
1111 .LCFI2:
1112 sub r3, fp, #8
1113 mov r0, r3
1114 bl _Z6calleePi
1115 ldr r3, [fp, #-8]
1116 mov r0, r3
1117 sub sp, fp, #4
1118 ldmfd sp!, {fp, lr}
1119 bx lr
1120 .LFE2:
1121 .fnend
1122 @end verbatim
1123
1124 Of course, the sequence of instructions varies based on the options
1125 you pass to GCC and on the version of GCC in use. The exact
1126 instructions are not important since we are focusing on the pseudo ops
1127 that are used to generate unwind information.
1128
1129 An important assumption made by the unwinder is that the stack frame
1130 does not change during the body of the function. In particular, since
1131 we assume that the assembly code does not itself throw an exception,
1132 the only point where an exception can be thrown is from a call, such
1133 as the @code{bl} instruction above. At each call site, the same saved
1134 registers (including @code{lr}, which indicates the return address)
1135 must be located in the same locations relative to the frame pointer.
1136
1137 The @code{.fnstart} (@pxref{arm_fnstart,,.fnstart pseudo op}) pseudo
1138 op appears immediately before the first instruction of the function
1139 while the @code{.fnend} (@pxref{arm_fnend,,.fnend pseudo op}) pseudo
1140 op appears immediately after the last instruction of the function.
1141 These pseudo ops specify the range of the function.
1142
1143 Only the order of the other pseudos ops (e.g., @code{.setfp} or
1144 @code{.pad}) matters; their exact locations are irrelevant. In the
1145 example above, the compiler emits the pseudo ops with particular
1146 instructions. That makes it easier to understand the code, but it is
1147 not required for correctness. It would work just as well to emit all
1148 of the pseudo ops other than @code{.fnend} in the same order, but
1149 immediately after @code{.fnstart}.
1150
1151 The @code{.save} (@pxref{arm_save,,.save pseudo op}) pseudo op
1152 indicates registers that have been saved to the stack so that they can
1153 be restored before the function returns. The argument to the
1154 @code{.save} pseudo op is a list of registers to save. If a register
1155 is ``callee-saved'' (as specified by the ABI) and is modified by the
1156 function you are writing, then your code must save the value before it
1157 is modified and restore the original value before the function
1158 returns. If an exception is thrown, the run-time library restores the
1159 values of these registers from their locations on the stack before
1160 returning control to the exception handler. (Of course, if an
1161 exception is not thrown, the function that contains the @code{.save}
1162 pseudo op restores these registers in the function epilogue, as is
1163 done with the @code{ldmfd} instruction above.)
1164
1165 You do not have to save callee-saved registers at the very beginning
1166 of the function and you do not need to use the @code{.save} pseudo op
1167 immediately following the point at which the registers are saved.
1168 However, if you modify a callee-saved register, you must save it on
1169 the stack before modifying it and before calling any functions which
1170 might throw an exception. And, you must use the @code{.save} pseudo
1171 op to indicate that you have done so.
1172
1173 The @code{.pad} (@pxref{arm_pad,,.pad}) pseudo op indicates a
1174 modification of the stack pointer that does not save any registers.
1175 The argument is the number of bytes (in decimal) that are subtracted
1176 from the stack pointer. (On ARM CPUs, the stack grows downwards, so
1177 subtracting from the stack pointer increases the size of the stack.)
1178
1179 The @code{.setfp} (@pxref{arm_setfp,,.setfp pseudo op}) pseudo op
1180 indicates the register that contains the frame pointer. The first
1181 argument is the register that is set, which is typically @code{fp}.
1182 The second argument indicates the register from which the frame
1183 pointer takes its value. The third argument, if present, is the value
1184 (in decimal) added to the register specified by the second argument to
1185 compute the value of the frame pointer. You should not modify the
1186 frame pointer in the body of the function.
1187
1188 If you do not use a frame pointer, then you should not use the
1189 @code{.setfp} pseudo op. If you do not use a frame pointer, then you
1190 should avoid modifying the stack pointer outside of the function
1191 prologue. Otherwise, the run-time library will be unable to find
1192 saved registers when it is unwinding the stack.
1193
1194 The pseudo ops described above are sufficient for writing assembly
1195 code that calls functions which may throw exceptions. If you need to
1196 know more about the object-file format used to represent unwind
1197 information, you may consult the @cite{Exception Handling ABI for the
1198 ARM Architecture} available from @uref{http://infocenter.arm.com}.
This page took 0.071979 seconds and 4 git commands to generate.