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