* doc/as.texinfo (Symbol Names): Don't use obsolete @ctrl macro.
[deliverable/binutils-gdb.git] / gas / doc / as.texinfo
CommitLineData
66b818fb 1\input texinfo @c -*-Texinfo-*-
4d32706e 2@c Copyright (c) 1991, 92, 93, 94, 95, 96, 1997 Free Software Foundation, Inc.
e680d737
RP
3@c UPDATE!! On future updates--
4@c (1) check for new machine-dep cmdline options in
5@c md_parse_option definitions in config/tc-*.c
6@c (2) for platform-specific directives, examine md_pseudo_op
7@c in config/tc-*.c
8@c (3) for object-format specific directives, examine obj_pseudo_op
9@c in config/obj-*.c
10@c (4) portable directives in potable[] in read.c
f009d0ab
RP
11@c %**start of header
12@setfilename as.info
13@c ---config---
14@c defaults, config file may override:
15@set have-stabs
16@c ---
4b9f4409 17@include asconfig.texi
f009d0ab
RP
18@c ---
19@c common OR combinations of conditions
20@ifset AOUT
21@set aout-bout
22@end ifset
23@ifset BOUT
24@set aout-bout
25@end ifset
26@ifset H8/300
27@set H8
28@end ifset
29@ifset H8/500
30@set H8
31@end ifset
f009d0ab
RP
32@ifset SH
33@set H8
34@end ifset
9dcf8057
JL
35@ifset HPPA
36@set abnormal-separator
37@end ifset
f009d0ab
RP
38@c ------------
39@ifset GENERIC
40@settitle Using @value{AS}
41@end ifset
42@ifclear GENERIC
43@settitle Using @value{AS} (@value{TARGET})
44@end ifclear
66b818fb 45@setchapternewpage odd
66b818fb
RP
46@c %**end of header
47
fb5bec49
RP
48@c @smallbook
49@c @set SMALL
50@c WARE! Some of the machine-dependent sections contain tables of machine
51@c instructions. Except in multi-column format, these tables look silly.
52@c Unfortunately, Texinfo doesn't have a general-purpose multi-col format, so
53@c the multi-col format is faked within @example sections.
54@c
55@c Again unfortunately, the natural size that fits on a page, for these tables,
56@c is different depending on whether or not smallbook is turned on.
57@c This matters, because of order: text flow switches columns at each page
58@c break.
59@c
60@c The format faked in this source works reasonably well for smallbook,
61@c not well for the default large-page format. This manual expects that if you
62@c turn on @smallbook, you will also uncomment the "@set SMALL" to enable the
63@c tables in question. You can turn on one without the other at your
64@c discretion, of course.
65@ifinfo
66@set SMALL
67@c the insn tables look just as silly in info files regardless of smallbook,
68@c might as well show 'em anyways.
69@end ifinfo
70
80381063
RP
71@ifinfo
72@format
dd565f85
RP
73START-INFO-DIR-ENTRY
74* As: (as). The GNU assembler.
75END-INFO-DIR-ENTRY
80381063
RP
76@end format
77@end ifinfo
78
66b818fb
RP
79@finalout
80@syncodeindex ky cp
81
47342e8f 82@ifinfo
f009d0ab 83This file documents the GNU Assembler "@value{AS}".
47342e8f 84
4d32706e 85Copyright (C) 1991, 92, 93, 94, 95, 96, 1997 Free Software Foundation, Inc.
47342e8f
RP
86
87Permission is granted to make and distribute verbatim copies of
88this manual provided the copyright notice and this permission notice
89are preserved on all copies.
90
91@ignore
92Permission is granted to process this file through Tex and print the
93results, provided the printed document carries copying permission
94notice identical to this one except for the removal of this paragraph
95(this paragraph not being relevant to the printed manual).
96
97@end ignore
81fcb3ff
RP
98Permission is granted to copy and distribute modified versions of this manual
99under the conditions for verbatim copying, provided that the entire resulting
100derived work is distributed under the terms of a permission notice identical to
101this one.
47342e8f
RP
102
103Permission is granted to copy and distribute translations of this manual
81fcb3ff 104into another language, under the above conditions for modified versions.
47342e8f 105@end ifinfo
66b818fb 106
93b45514 107@titlepage
f009d0ab 108@title Using @value{AS}
71dd3c40 109@subtitle The @sc{gnu} Assembler
f009d0ab
RP
110@ifclear GENERIC
111@subtitle for the @value{TARGET} family
112@end ifclear
93b45514 113@sp 1
e680d737 114@subtitle January 1994
0b5b143a 115@sp 1
93b45514
RP
116@sp 13
117The Free Software Foundation Inc. thanks The Nice Computer
118Company of Australia for loaning Dean Elsner to write the
71dd3c40 119first (Vax) version of @code{as} for Project @sc{gnu}.
93b45514
RP
120The proprietors, management and staff of TNCCA thank FSF for
121distracting the boss while they got some work
122done.
123@sp 3
7d7ecbdd 124@author Dean Elsner, Jay Fenlason & friends
47342e8f
RP
125@page
126@tex
47342e8f 127{\parskip=0pt
f009d0ab 128\hfill {\it Using {\tt @value{AS}}}\par
71dd3c40 129\hfill Edited by Cygnus Support\par
47342e8f 130}
b50e59fe
RP
131%"boxit" macro for figures:
132%Modified from Knuth's ``boxit'' macro from TeXbook (answer to exercise 21.3)
133\gdef\boxit#1#2{\vbox{\hrule\hbox{\vrule\kern3pt
134 \vbox{\parindent=0pt\parskip=0pt\hsize=#1\kern3pt\strut\hfil
135#2\hfil\strut\kern3pt}\kern3pt\vrule}\hrule}}%box with visible outline
136\gdef\ibox#1#2{\hbox to #1{#2\hfil}\kern8pt}% invisible box
47342e8f 137@end tex
93b45514 138
47342e8f 139@vskip 0pt plus 1filll
4d32706e 140Copyright @copyright{} 1991, 92, 93, 94, 95, 96, 1997 Free Software Foundation, Inc.
93b45514
RP
141
142Permission is granted to make and distribute verbatim copies of
143this manual provided the copyright notice and this permission notice
144are preserved on all copies.
145
81fcb3ff
RP
146Permission is granted to copy and distribute modified versions of this manual
147under the conditions for verbatim copying, provided that the entire resulting
148derived work is distributed under the terms of a permission notice identical to
149this one.
93b45514
RP
150
151Permission is granted to copy and distribute translations of this manual
81fcb3ff 152into another language, under the above conditions for modified versions.
93b45514 153@end titlepage
f009d0ab 154
d0281557 155@ifinfo
242d9c06 156@node Top
f009d0ab 157@top Using @value{AS}
242d9c06 158
8babef85 159This file is a user guide to the @sc{gnu} assembler @code{@value{AS}}.
f009d0ab
RP
160@ifclear GENERIC
161This version of the file describes @code{@value{AS}} configured to generate
162code for @value{TARGET} architectures.
163@end ifclear
7a4c8e5c 164@menu
ba487f3a
RP
165* Overview:: Overview
166* Invoking:: Command-Line Options
167* Syntax:: Syntax
168* Sections:: Sections and Relocation
169* Symbols:: Symbols
170* Expressions:: Expressions
171* Pseudo Ops:: Assembler Directives
f009d0ab 172* Machine Dependencies:: Machine Dependent Features
9a5acea8 173* Reporting Bugs:: Reporting Bugs
9dcf8057 174* Acknowledgements:: Who Did What
66b818fb 175* Index:: Index
7a4c8e5c 176@end menu
242d9c06 177@end ifinfo
7a4c8e5c 178
242d9c06 179@node Overview
b50e59fe 180@chapter Overview
d0281557 181@iftex
8babef85 182This manual is a user guide to the @sc{gnu} assembler @code{@value{AS}}.
f009d0ab
RP
183@ifclear GENERIC
184This version of the manual describes @code{@value{AS}} configured to generate
185code for @value{TARGET} architectures.
186@end ifclear
d0281557 187@end iftex
b50e59fe 188
66b818fb
RP
189@cindex invocation summary
190@cindex option summary
191@cindex summary of options
f009d0ab 192Here is a brief summary of how to invoke @code{@value{AS}}. For details,
7a4c8e5c 193@pxref{Invoking,,Comand-Line Options}.
b50e59fe 194
7d7ecbdd 195@c We don't use deffn and friends for the following because they seem
b50e59fe 196@c to be limited to one line for the header.
d0281557 197@smallexample
35cfacf0 198@value{AS} [ -a[cdhlns][=file] ] [ -D ] [ --defsym @var{sym}=@var{val} ]
71dd3c40
ILT
199 [ -f ] [ --help ] [ -I @var{dir} ] [ -J ] [ -K ] [ -L ]
200 [ -o @var{objfile} ] [ -R ] [ --statistics ] [ -v ] [ -version ]
201 [ --version ] [ -W ] [ -w ] [ -x ] [ -Z ]
f009d0ab 202@ifset A29K
2d8e0f62 203@c am29k has no machine-dependent assembler options
f009d0ab 204@end ifset
99c4053d
KR
205@c start-sanitize-arc
206@ifset ARC
207 [ -mbig-endian | -mlittle-endian ]
208@end ifset
209@c end-sanitize-arc
9a5acea8
ILT
210@ifset D10V
211 [ -O ]
212@end ifset
9a5acea8 213
f009d0ab
RP
214@ifset H8
215@c Hitachi family chips have no machine-dependent assembler options
216@end ifset
9dcf8057
JL
217@ifset HPPA
218@c HPPA has no machine-dependent assembler options (yet).
219@end ifset
f009d0ab 220@ifset SPARC
71dd3c40 221@c The order here is important. See c-sparc.texi.
c6c7035c 222 [ -Av6 | -Av7 | -Av8 | -Asparclet | -Asparclite | -Av9 | -Av9a ]
71dd3c40 223 [ -xarch=v8plus | -xarch=v8plusa ] [ -bump ]
f009d0ab
RP
224@end ifset
225@ifset Z8000
2d8e0f62 226@c Z8000 has no machine-dependent assembler options
f009d0ab
RP
227@end ifset
228@ifset I960
9ebc250f 229@c see md_parse_option in tc-i960.c
81fcb3ff 230 [ -ACA | -ACA_A | -ACB | -ACC | -AKA | -AKB | -AKC | -AMC ]
b3b2623c 231 [ -b ] [ -no-relax ]
f009d0ab
RP
232@end ifset
233@ifset M680X0
81fcb3ff 234 [ -l ] [ -m68000 | -m68010 | -m68020 | ... ]
34214344
KR
235@end ifset
236@ifset MIPS
b3b2623c
KR
237 [ -nocpp ] [ -EL ] [ -EB ] [ -G @var{num} ] [ -mcpu=@var{CPU} ]
238 [ -mips1 ] [ -mips2 ] [ -mips3 ] [ -m4650 ] [ -no-m4650 ]
dd565f85 239 [ --trap ] [ --break ]
ba5ceb30 240 [ --emulation=@var{name} ]
f009d0ab 241@end ifset
81fcb3ff 242 [ -- | @var{files} @dots{} ]
d0281557 243@end smallexample
47342e8f
RP
244
245@table @code
0193302d 246@item -a[dhlns]
05a0e43b
RP
247Turn on listings, in any of a variety of ways:
248
249@table @code
250@item -ad
b3b2623c 251omit debugging directives
05a0e43b
RP
252
253@item -ah
254include high-level source
255
256@item -al
b3b2623c 257include assembly
05a0e43b
RP
258
259@item -an
b3b2623c 260omit forms processing
05a0e43b
RP
261
262@item -as
b3b2623c 263include symbols
85a961c6
ILT
264
265@item =file
266set the name of the listing file
05a0e43b
RP
267@end table
268
269You may combine these options; for example, use @samp{-aln} for assembly
85a961c6
ILT
270listing without forms processing. The @samp{=file} option, if used, must be
271the last one. By itself, @samp{-a} defaults to @samp{-ahls}---that is, all
272listings turned on.
b50e59fe
RP
273
274@item -D
b3b2623c
KR
275Ignored. This option is accepted for script compatibility with calls to
276other assemblers.
b50e59fe 277
71dd3c40
ILT
278@item --defsym @var{sym}=@var{value}
279Define the symbol @var{sym} to be @var{value} before assembling the input file.
280@var{value} must be an integer constant. As in C, a leading @samp{0x}
281indicates a hexadecimal value, and a leading @samp{0} indicates an octal value.
282
47342e8f 283@item -f
9dcf8057 284``fast''---skip whitespace and comment preprocessing (assume source is
b3b2623c 285compiler output).
47342e8f 286
b3b2623c
KR
287@item --help
288Print a summary of the command line options and exit.
289
290@item -I @var{dir}
291Add directory @var{dir} to the search list for @code{.include} directives.
292
293@item -J
294Don't warn about signed overflow.
b50e59fe 295
80381063 296@item -K
f009d0ab
RP
297@ifclear DIFF-TBL-KLUGE
298This option is accepted but has no effect on the @value{TARGET} family.
299@end ifclear
300@ifset DIFF-TBL-KLUGE
0b5b143a 301Issue warnings when difference tables altered for long displacements.
f009d0ab 302@end ifset
47342e8f
RP
303
304@item -L
b3b2623c 305Keep (in the symbol table) local symbols, starting with @samp{L}.
47342e8f
RP
306
307@item -o @var{objfile}
b3b2623c 308Name the object-file output from @code{@value{AS}} @var{objfile}.
47342e8f
RP
309
310@item -R
b3b2623c 311Fold the data section into the text section.
47342e8f 312
62e59d28 313@item --statistics
b3b2623c 314Print the maximum space (in bytes) and total time (in seconds) used by
62e59d28
RP
315assembly.
316
7d7ecbdd 317@item -v
b3b2623c
KR
318@itemx -version
319Print the @code{as} version.
320
321@item --version
322Print the @code{as} version and exit.
7d7ecbdd 323
47342e8f 324@item -W
b3b2623c
KR
325Suppress warning messages.
326
327@item -w
328Ignored.
329
330@item -x
331Ignored.
47342e8f 332
62e59d28 333@item -Z
b3b2623c 334Generate an object file even after errors.
62e59d28 335
9ebc250f
KR
336@item -- | @var{files} @dots{}
337Standard input, or source files to assemble.
9ebc250f
KR
338
339@end table
340
99c4053d
KR
341@ifset ARC
342The following options are available when @value{AS} is configured for
343an ARC processor.
344
345@table @code
346
347@cindex ARC endianness
348@cindex endianness, ARC
349@cindex big endian output, ARC
350@item -mbig-endian
351Generate ``big endian'' format output.
352
353@cindex little endian output, ARC
354@item -mlittle-endian
355Generate ``little endian'' format output.
356
357@end table
358@end ifset
359
9a5acea8
ILT
360@ifset D10V
361The following options are available when @value{AS} is configured for
362a D10V processor.
363@table @code
364@cindex D10V optimization
365@cindex optimization, D10V
366@item -O
367Optimize output by parallelizing instructions.
368@end table
369@end ifset
9a5acea8 370
f009d0ab
RP
371@ifset I960
372The following options are available when @value{AS} is configured for the
9ebc250f
KR
373Intel 80960 processor.
374
375@table @code
d0281557
RP
376@item -ACA | -ACA_A | -ACB | -ACC | -AKA | -AKB | -AKC | -AMC
377Specify which variant of the 960 architecture is the target.
378
379@item -b
380Add code to collect statistics about branches taken.
381
b3b2623c 382@item -no-relax
66b818fb 383Do not alter compare-and-branch instructions for long displacements;
d0281557 384error if necessary.
9ebc250f
KR
385
386@end table
f009d0ab 387@end ifset
d0281557 388
f009d0ab
RP
389@ifset M680X0
390The following options are available when @value{AS} is configured for the
9ebc250f
KR
391Motorola 68000 series.
392
393@table @code
394
09352a5d 395@item -l
9ebc250f 396Shorten references to undefined symbols, to one word instead of two.
09352a5d 397
910d7df2
C
398@item -m68000 | -m68008 | -m68010 | -m68020 | -m68030 | -m68040 | -m68060
399@itemx | -m68302 | -m68331 | -m68332 | -m68333 | -m68340 | -mcpu32 | -m5200
9ebc250f
KR
400Specify what processor in the 68000 family is the target. The default
401is normally the 68020, but this can be changed at configuration time.
402
403@item -m68881 | -m68882 | -mno-68881 | -mno-68882
404The target machine does (or does not) have a floating-point coprocessor.
405The default is to assume a coprocessor for 68020, 68030, and cpu32. Although
406the basic 68000 is not compatible with the 68881, a combination of the
407two can be specified, since it's possible to do emulation of the
408coprocessor instructions with the main processor.
409
410@item -m68851 | -mno-68851
411The target machine does (or does not) have a memory-management
412unit coprocessor. The default is to assume an MMU for 68020 and up.
47342e8f 413
47342e8f 414@end table
f009d0ab
RP
415@end ifset
416
417@ifset SPARC
418The following options are available when @code{@value{AS}} is configured
419for the SPARC architecture:
420
421@table @code
c6c7035c 422@item -Av6 | -Av7 | -Av8 | -Asparclet | -Asparclite | -Av9 | -Av9a
f009d0ab
RP
423Explicitly select a variant of the SPARC architecture.
424
71dd3c40
ILT
425@item -xarch=v8plus | -xarch=v8plusa
426For compatibility with the Solaris v9 assembler. These options are
427equivalent to -Av9 and -Av9a, respectively.
428
f009d0ab
RP
429@item -bump
430Warn when the assembler switches to another architecture.
431@end table
432@end ifset
47342e8f 433
34214344
KR
434@ifset MIPS
435The following options are available when @value{AS} is configured for
dd565f85 436a MIPS processor.
34214344
KR
437
438@table @code
34214344 439@item -G @var{num}
05a0e43b 440This option sets the largest size of an object that can be referenced
dd565f85
RP
441implicitly with the @code{gp} register. It is only accepted for targets that
442use ECOFF format, such as a DECstation running Ultrix. The default value is 8.
34214344 443
05a0e43b
RP
444@cindex MIPS endianness
445@cindex endianness, MIPS
05a0e43b 446@cindex big endian output, MIPS
dd565f85 447@item -EB
05a0e43b
RP
448Generate ``big endian'' format output.
449
05a0e43b 450@cindex little endian output, MIPS
dd565f85 451@item -EL
05a0e43b 452Generate ``little endian'' format output.
34214344 453
1051c97f
ILT
454@cindex MIPS ISA
455@item -mips1
dd565f85
RP
456@itemx -mips2
457@itemx -mips3
458Generate code for a particular MIPS Instruction Set Architecture level.
459@samp{-mips1} corresponds to the @sc{r2000} and @sc{r3000} processors,
460@samp{-mips2} to the @sc{r6000} processor, and @samp{-mips3} to the @sc{r4000}
461processor.
1051c97f 462
b3b2623c
KR
463@item -m4650
464@item -no-m4650
465Generate code for the MIPS @sc{r4650} chip. This tells the assembler to accept
466the @samp{mad} and @samp{madu} instruction, and to not schedule @samp{nop}
467instructions around accesses to the @samp{HI} and @samp{LO} registers.
468@samp{-no-m4650} turns off this option.
469
470@item -mcpu=@var{CPU}
471Generate code for a particular MIPS cpu. This has little effect on the
472assembler, but it is passed by @code{@value{GCC}}.
473
ba5ceb30
KR
474@cindex emulation
475@item --emulation=@var{name}
476This option causes @code{@value{AS}} to emulated @code{@value{AS}} configured
477for some other target, in all respects, including output format (choosing
478between ELF and ECOFF only), handling of pseudo-opcodes which may generate
479debugging information or store symbol table information, and default
480endianness. The available configuration names are: @samp{mipsecoff},
481@samp{mipself}, @samp{mipslecoff}, @samp{mipsbecoff}, @samp{mipslelf},
482@samp{mipsbelf}. The first two do not alter the default endianness from that
483of the primary target for which the assembler was configured; the others change
484the default to little- or big-endian as indicated by the @samp{b} or @samp{l}
485in the name. Using @samp{-EB} or @samp{-EL} will override the endianness
486selection in any case.
487
488This option is currently supported only when the primary target
489@code{@value{AS}} is configured for is a MIPS ELF or ECOFF target.
490Furthermore, the primary target or others specified with
491@samp{--enable-targets=@dots{}} at configuration time must include support for
492the other format, if both are to be available. For example, the Irix 5
493configuration includes support for both.
494
495Eventually, this option will support more configurations, with more
496fine-grained control over the assembler's behavior, and will be supported for
497more processors.
498
05a0e43b 499@item -nocpp
dd565f85
RP
500@code{@value{AS}} ignores this option. It is accepted for compatibility with
501the native tools.
502
71dd3c40 503@need 900
dd565f85
RP
504@item --trap
505@itemx --no-trap
506@itemx --break
507@itemx --no-break
508Control how to deal with multiplication overflow and division by zero.
509@samp{--trap} or @samp{--no-break} (which are synonyms) take a trap exception
510(and only work for Instruction Set Architecture level 2 and higher);
511@samp{--break} or @samp{--no-trap} (also synonyms, and the default) take a
512break exception.
34214344
KR
513@end table
514@end ifset
515
7a4c8e5c 516@menu
ba487f3a 517* Manual:: Structure of this Manual
f009d0ab 518* GNU Assembler:: @value{AS}, the GNU Assembler
ba487f3a
RP
519* Object Formats:: Object File Formats
520* Command Line:: Command Line
521* Input Files:: Input Files
522* Object:: Output (Object) File
523* Errors:: Error and Warning Messages
7a4c8e5c
RP
524@end menu
525
242d9c06 526@node Manual
d0281557 527@section Structure of this Manual
66b818fb
RP
528
529@cindex manual, structure and purpose
530This manual is intended to describe what you need to know to use
f009d0ab 531@sc{gnu} @code{@value{AS}}. We cover the syntax expected in source files, including
47342e8f 532notation for symbols, constants, and expressions; the directives that
f009d0ab 533@code{@value{AS}} understands; and of course how to invoke @code{@value{AS}}.
47342e8f 534
f009d0ab
RP
535@ifclear GENERIC
536We also cover special features in the @value{TARGET}
537configuration of @code{@value{AS}}, including assembler directives.
538@end ifclear
539@ifset GENERIC
66b818fb 540This manual also describes some of the machine-dependent features of
09352a5d 541various flavors of the assembler.
f009d0ab 542@end ifset
93b45514 543
66b818fb 544@cindex machine instructions (not covered)
47342e8f 545On the other hand, this manual is @emph{not} intended as an introduction
b50e59fe
RP
546to programming in assembly language---let alone programming in general!
547In a similar vein, we make no attempt to introduce the machine
47342e8f
RP
548architecture; we do @emph{not} describe the instruction set, standard
549mnemonics, registers or addressing modes that are standard to a
f009d0ab
RP
550particular architecture.
551@ifset GENERIC
66b818fb 552You may want to consult the manufacturer's
b50e59fe 553machine architecture manual for this information.
f009d0ab
RP
554@end ifset
555@ifclear GENERIC
556@ifset H8/300
66b818fb 557For information on the H8/300 machine instruction set, see @cite{H8/300
8d8ddccb
RP
558Series Programming Manual} (Hitachi ADE--602--025). For the H8/300H,
559see @cite{H8/300H Series Programming Manual} (Hitachi).
f009d0ab
RP
560@end ifset
561@ifset H8/500
562For information on the H8/500 machine instruction set, see @cite{H8/500
563Series Programming Manual} (Hitachi M21T001).
564@end ifset
f009d0ab
RP
565@ifset SH
566For information on the Hitachi SH machine instruction set, see
567@cite{SH-Microcomputer User's Manual} (Hitachi Micro Systems, Inc.).
568@end ifset
f009d0ab 569@ifset Z8000
2d8e0f62 570For information on the Z8000 machine instruction set, see @cite{Z8000 CPU Technical Manual}
f009d0ab
RP
571@end ifset
572@end ifclear
93b45514 573
71dd3c40 574@c I think this is premature---doc@cygnus.com, 17jan1991
47342e8f 575@ignore
66b818fb 576Throughout this manual, we assume that you are running @dfn{GNU},
93b45514
RP
577the portable operating system from the @dfn{Free Software
578Foundation, Inc.}. This restricts our attention to certain kinds of
8babef85 579computer (in particular, the kinds of computers that @sc{gnu} can run on);
93b45514
RP
580once this assumption is granted examples and definitions need less
581qualification.
582
f009d0ab 583@code{@value{AS}} is part of a team of programs that turn a high-level
93b45514
RP
584human-readable series of instructions into a low-level
585computer-readable series of instructions. Different versions of
f009d0ab 586@code{@value{AS}} are used for different kinds of computer.
47342e8f 587@end ignore
93b45514 588
b50e59fe
RP
589@c There used to be a section "Terminology" here, which defined
590@c "contents", "byte", "word", and "long". Defining "word" to any
591@c particular size is confusing when the .word directive may generate 16
592@c bits on one machine and 32 bits on another; in general, for the user
593@c version of this manual, none of these terms seem essential to define.
594@c They were used very little even in the former draft of the manual;
595@c this draft makes an effort to avoid them (except in names of
d0281557
RP
596@c directives).
597
242d9c06 598@node GNU Assembler
f009d0ab 599@section @value{AS}, the GNU Assembler
66b818fb 600
8babef85 601@sc{gnu} @code{as} is really a family of assemblers.
f009d0ab
RP
602@ifclear GENERIC
603This manual describes @code{@value{AS}}, a member of that family which is
604configured for the @value{TARGET} architectures.
605@end ifclear
8babef85 606If you use (or have used) the @sc{gnu} assembler on one architecture, you
7a4c8e5c
RP
607should find a fairly similar environment when you use it on another
608architecture. Each version has much in common with the others,
609including object file formats, most assembler directives (often called
9ebc250f 610@dfn{pseudo-ops}) and assembler syntax.@refill
d0281557 611
f009d0ab
RP
612@cindex purpose of @sc{gnu} @code{@value{AS}}
613@code{@value{AS}} is primarily intended to assemble the output of the
8babef85 614@sc{gnu} C compiler @code{@value{GCC}} for use by the linker
f009d0ab
RP
615@code{@value{LD}}. Nevertheless, we've tried to make @code{@value{AS}}
616assemble correctly everything that other assemblers for the same
617machine would assemble.
618@ifset VAX
619Any exceptions are documented explicitly (@pxref{Machine Dependencies}).
620@end ifset
621@ifset M680X0
622@c This remark should appear in generic version of manual; assumption
623@c here is that generic version sets M680x0.
624This doesn't mean @code{@value{AS}} always uses the same syntax as another
b50e59fe
RP
625assembler for the same architecture; for example, we know of several
626incompatible versions of 680x0 assembly language syntax.
f009d0ab 627@end ifset
47342e8f 628
f009d0ab 629Unlike older assemblers, @code{@value{AS}} is designed to assemble a source
b50e59fe 630program in one pass of the source file. This has a subtle impact on the
7a4c8e5c 631@kbd{.org} directive (@pxref{Org,,@code{.org}}).
93b45514 632
242d9c06 633@node Object Formats
d0281557 634@section Object File Formats
66b818fb
RP
635
636@cindex object file format
8babef85 637The @sc{gnu} assembler can be configured to produce several alternative
7d7ecbdd
RP
638object file formats. For the most part, this does not affect how you
639write assembly language programs; but directives for debugging symbols
640are typically different in different file formats. @xref{Symbol
641Attributes,,Symbol Attributes}.
f009d0ab
RP
642@ifclear GENERIC
643@ifclear MULTI-OBJ
644On the @value{TARGET}, @code{@value{AS}} is configured to produce
645@value{OBJ-NAME} format object files.
646@end ifclear
647@c The following should exhaust all configs that set MULTI-OBJ, ideally
648@ifset A29K
649On the @value{TARGET}, @code{@value{AS}} can be configured to produce either
24b1493d 650@code{a.out} or COFF format object files.
f009d0ab
RP
651@end ifset
652@ifset I960
653On the @value{TARGET}, @code{@value{AS}} can be configured to produce either
654@code{b.out} or COFF format object files.
655@end ifset
9dcf8057
JL
656@ifset HPPA
657On the @value{TARGET}, @code{@value{AS}} can be configured to produce either
658SOM or ELF format object files.
659@end ifset
f009d0ab 660@end ifclear
d0281557 661
242d9c06 662@node Command Line
b50e59fe 663@section Command Line
93b45514 664
66b818fb 665@cindex command line conventions
f009d0ab 666After the program name @code{@value{AS}}, the command line may contain
66b818fb 667options and file names. Options may appear in any order, and may be
93b45514
RP
668before, after, or between file names. The order of file names is
669significant.
670
66b818fb
RP
671@cindex standard input, as input file
672@kindex --
47342e8f 673@file{--} (two hyphens) by itself names the standard input file
f009d0ab 674explicitly, as one of the files for @code{@value{AS}} to assemble.
47342e8f 675
66b818fb 676@cindex options, command line
93b45514
RP
677Except for @samp{--} any command line argument that begins with a
678hyphen (@samp{-}) is an option. Each option changes the behavior of
f009d0ab 679@code{@value{AS}}. No option changes the way another option works. An
47342e8f 680option is a @samp{-} followed by one or more letters; the case of
b50e59fe 681the letter is important. All options are optional.
93b45514
RP
682
683Some options expect exactly one file name to follow them. The file
684name may either immediately follow the option's letter (compatible
8babef85 685with older assemblers) or it may be the next command argument (@sc{gnu}
93b45514
RP
686standard). These two command lines are equivalent:
687
d0281557 688@smallexample
f009d0ab
RP
689@value{AS} -o my-object-file.o mumble.s
690@value{AS} -omy-object-file.o mumble.s
d0281557 691@end smallexample
93b45514 692
242d9c06 693@node Input Files
47342e8f 694@section Input Files
93b45514 695
66b818fb
RP
696@cindex input
697@cindex source program
698@cindex files, input
47342e8f 699We use the phrase @dfn{source program}, abbreviated @dfn{source}, to
f009d0ab 700describe the program input to one run of @code{@value{AS}}. The program may
93b45514
RP
701be in one or more files; how the source is partitioned into files
702doesn't change the meaning of the source.
703
b50e59fe 704@c I added "con" prefix to "catenation" just to prove I can overcome my
71dd3c40 705@c APL training... doc@cygnus.com
b50e59fe 706The source program is a concatenation of the text in all the files, in the
47342e8f 707order specified.
93b45514 708
f009d0ab 709Each time you run @code{@value{AS}} it assembles exactly one source
47342e8f 710program. The source program is made up of one or more files.
93b45514
RP
711(The standard input is also a file.)
712
f009d0ab 713You give @code{@value{AS}} a command line that has zero or more input file
93b45514
RP
714names. The input files are read (from left file name to right). A
715command line argument (in any position) that has no special meaning
d0281557 716is taken to be an input file name.
93b45514 717
f009d0ab
RP
718If you give @code{@value{AS}} no file names it attempts to read one input file
719from the @code{@value{AS}} standard input, which is normally your terminal. You
720may have to type @key{ctl-D} to tell @code{@value{AS}} there is no more program
d0281557 721to assemble.
93b45514 722
47342e8f
RP
723Use @samp{--} if you need to explicitly name the standard input file
724in your command line.
93b45514 725
05a0e43b 726If the source is empty, @code{@value{AS}} produces a small, empty object
d0281557 727file.
b50e59fe 728
7a4c8e5c 729@subheading Filenames and Line-numbers
66b818fb
RP
730
731@cindex input file linenumbers
732@cindex line numbers, in input files
733There are two ways of locating a line in the input file (or files) and
734either may be used in reporting error messages. One way refers to a line
93b45514 735number in a physical file; the other refers to a line number in a
66b818fb 736``logical'' file. @xref{Errors, ,Error and Warning Messages}.
93b45514
RP
737
738@dfn{Physical files} are those files named in the command line given
f009d0ab 739to @code{@value{AS}}.
93b45514 740
47342e8f
RP
741@dfn{Logical files} are simply names declared explicitly by assembler
742directives; they bear no relation to physical files. Logical file names
f009d0ab 743help error messages reflect the original source file, when @code{@value{AS}}
7a4c8e5c 744source is itself synthesized from other files.
f009d0ab 745@xref{App-File,,@code{.app-file}}.
93b45514 746
242d9c06 747@node Object
93b45514 748@section Output (Object) File
66b818fb
RP
749
750@cindex object file
751@cindex output file
752@kindex a.out
753@kindex .o
f009d0ab 754Every time you run @code{@value{AS}} it produces an output file, which is
93b45514 755your assembly language program translated into numbers. This file
65fbb2d7
RP
756is the object file. Its default name is
757@ifclear BOUT
758@code{a.out}.
759@end ifclear
f009d0ab 760@ifset BOUT
f009d0ab 761@ifset GENERIC
65fbb2d7 762@code{a.out}, or
f009d0ab 763@end ifset
65fbb2d7 764@code{b.out} when @code{@value{AS}} is configured for the Intel 80960.
f009d0ab 765@end ifset
65fbb2d7
RP
766You can give it another name by using the @code{-o} option. Conventionally,
767object file names end with @file{.o}. The default name is used for historical
768reasons: older assemblers were capable of assembling self-contained programs
769directly into a runnable program. (For some formats, this isn't currently
770possible, but it can be done for the @code{a.out} format.)
93b45514 771
66b818fb
RP
772@cindex linker
773@kindex ld
f009d0ab
RP
774The object file is meant for input to the linker @code{@value{LD}}. It contains
775assembled program code, information to help @code{@value{LD}} integrate
b50e59fe 776the assembled program into a runnable file, and (optionally) symbolic
d0281557 777information for the debugger.
93b45514 778
66b818fb 779@c link above to some info file(s) like the description of a.out.
71dd3c40 780@c don't forget to describe @sc{gnu} info as well as Unix lossage.
93b45514 781
242d9c06 782@node Errors
93b45514
RP
783@section Error and Warning Messages
784
66b818fb
RP
785@cindex error messsages
786@cindex warning messages
f009d0ab
RP
787@cindex messages from @code{@value{AS}}
788@code{@value{AS}} may write warnings and error messages to the standard error
66b818fb 789file (usually your terminal). This should not happen when a compiler
f009d0ab
RP
790runs @code{@value{AS}} automatically. Warnings report an assumption made so
791that @code{@value{AS}} could keep assembling a flawed program; errors report a
b50e59fe 792grave problem that stops the assembly.
93b45514 793
66b818fb 794@cindex format of warning messages
93b45514 795Warning messages have the format
66b818fb 796
d0281557 797@smallexample
b50e59fe 798file_name:@b{NNN}:Warning Message Text
d0281557 799@end smallexample
66b818fb 800
0b5b143a 801@noindent
66b818fb 802@cindex line numbers, in warnings/errors
f009d0ab
RP
803(where @b{NNN} is a line number). If a logical file name has been given
804(@pxref{App-File,,@code{.app-file}}) it is used for the filename,
805otherwise the name of the current input file is used. If a logical line
806number was given
807@ifset GENERIC
808(@pxref{Line,,@code{.line}})
809@end ifset
810@ifclear GENERIC
811@ifclear A29K
7a4c8e5c 812(@pxref{Line,,@code{.line}})
f009d0ab
RP
813@end ifclear
814@ifset A29K
7a4c8e5c 815(@pxref{Ln,,@code{.ln}})
f009d0ab
RP
816@end ifset
817@end ifclear
63f5d795 818then it is used to calculate the number printed,
b50e59fe
RP
819otherwise the actual line in the current source file is printed. The
820message text is intended to be self explanatory (in the grand Unix
f009d0ab 821tradition).
93b45514 822
66b818fb 823@cindex format of error messages
93b45514 824Error messages have the format
d0281557 825@smallexample
b50e59fe 826file_name:@b{NNN}:FATAL:Error Message Text
d0281557 827@end smallexample
47342e8f 828The file name and line number are derived as for warning
93b45514
RP
829messages. The actual message text may be rather less explanatory
830because many of them aren't supposed to happen.
831
242d9c06 832@node Invoking
7a4c8e5c 833@chapter Command-Line Options
66b818fb 834
f009d0ab 835@cindex options, all versions of @code{@value{AS}}
66b818fb 836This chapter describes command-line options available in @emph{all}
8babef85 837versions of the @sc{gnu} assembler; @pxref{Machine Dependencies}, for options specific
f009d0ab
RP
838@ifclear GENERIC
839to the @value{TARGET}.
840@end ifclear
841@ifset GENERIC
0b5b143a 842to particular machine architectures.
f009d0ab 843@end ifset
0193302d 844
8babef85 845If you are invoking @code{@value{AS}} via the @sc{gnu} C compiler (version 2), you
0193302d
KR
846can use the @samp{-Wa} option to pass arguments through to the
847assembler. The assembler arguments must be separated from each other
848(and the @samp{-Wa}) by commas. For example:
849
850@smallexample
851gcc -c -g -O -Wa,-alh,-L file.c
852@end smallexample
853
05a0e43b
RP
854@noindent
855emits a listing to standard output with high-level
0193302d
KR
856and assembly source.
857
81fcb3ff
RP
858Usually you do not need to use this @samp{-Wa} mechanism, since many compiler
859command-line options are automatically passed to the assembler by the compiler.
8babef85 860(You can call the @sc{gnu} compiler driver with the @samp{-v} option to see
81fcb3ff
RP
861precisely what options it passes to each compilation pass, including the
862assembler.)
d0281557 863
f009d0ab 864@menu
35cfacf0 865* a:: -a[cdhlns] enable listings
f009d0ab
RP
866* D:: -D for compatibility
867* f:: -f to work faster
868* I:: -I for .include search path
869@ifclear DIFF-TBL-KLUGE
870* K:: -K for compatibility
871@end ifclear
872@ifset DIFF-TBL-KLUGE
873* K:: -K for difference tables
874@end ifset
875
876* L:: -L to retain local labels
79e15b8a 877* M:: -M or --mri to assemble in MRI compatibility mode
f009d0ab
RP
878* o:: -o to name the object file
879* R:: -R to join data and text sections
62e59d28 880* statistics:: --statistics to see statistics about assembly
f009d0ab
RP
881* v:: -v to announce version
882* W:: -W to suppress warnings
62e59d28 883* Z:: -Z to make object file even after errors
f009d0ab
RP
884@end menu
885
886@node a
35cfacf0 887@section Enable Listings: @code{-a[cdhlns]}
66b818fb
RP
888
889@kindex -a
35cfacf0 890@kindex -ac
0193302d
KR
891@kindex -ad
892@kindex -ah
66b818fb 893@kindex -al
0193302d 894@kindex -an
66b818fb
RP
895@kindex -as
896@cindex listings, enabling
897@cindex assembly listings, enabling
0193302d
KR
898
899These options enable listing output from the assembler. By itself,
900@samp{-a} requests high-level, assembly, and symbols listing.
dd565f85 901You can use other letters to select specific options for the list:
0193302d
KR
902@samp{-ah} requests a high-level language listing,
903@samp{-al} requests an output-program assembly listing, and
904@samp{-as} requests a symbol table listing.
905High-level listings require that a compiler debugging option like
906@samp{-g} be used, and that assembly listings (@samp{-al}) be requested
907also.
908
35cfacf0
ILT
909Use the @samp{-ac} option to omit false conditionals from a listing. Any lines
910which are not assembled because of a false @code{.if} (or @code{.ifdef}, or any
911other conditional), or a true @code{.if} followed by an @code{.else}, will be
912omitted from the listing.
913
dd565f85 914Use the @samp{-ad} option to omit debugging directives from the
0193302d 915listing.
66b818fb
RP
916
917Once you have specified one of these options, you can further control
918listing output and its appearance using the directives @code{.list},
919@code{.nolist}, @code{.psize}, @code{.eject}, @code{.title}, and
920@code{.sbttl}.
0193302d 921The @samp{-an} option turns off all forms processing.
66b818fb
RP
922If you do not request listing output with one of the @samp{-a} options, the
923listing-control directives have no effect.
924
0193302d
KR
925The letters after @samp{-a} may be combined into one option,
926@emph{e.g.}, @samp{-aln}.
927
f009d0ab 928@node D
66b818fb
RP
929@section @code{-D}
930
931@kindex -D
b50e59fe 932This option has no effect whatsoever, but it is accepted to make it more
05a0e43b 933likely that scripts written for other assemblers also work with
f009d0ab 934@code{@value{AS}}.
b50e59fe 935
f009d0ab 936@node f
66b818fb
RP
937@section Work Faster: @code{-f}
938
939@kindex -f
940@cindex trusted compiler
941@cindex faster processing (@code{-f})
93b45514 942@samp{-f} should only be used when assembling programs written by a
9dcf8057 943(trusted) compiler. @samp{-f} stops the assembler from doing whitespace
05a0e43b
RP
944and comment preprocessing on
945the input file(s) before assembling them. @xref{Preprocessing,
946,Preprocessing}.
66b818fb 947
b50e59fe 948@quotation
05a0e43b
RP
949@emph{Warning:} if you use @samp{-f} when the files actually need to be
950preprocessed (if they contain comments, for example), @code{@value{AS}} does
951not work correctly.
b50e59fe
RP
952@end quotation
953
f009d0ab 954@node I
66b818fb
RP
955@section @code{.include} search path: @code{-I} @var{path}
956
957@kindex -I @var{path}
958@cindex paths for @code{.include}
959@cindex search path for @code{.include}
960@cindex @code{include} directive search path
d0281557 961Use this option to add a @var{path} to the list of directories
05a0e43b 962@code{@value{AS}} searches for files specified in @code{.include}
7a4c8e5c
RP
963directives (@pxref{Include,,@code{.include}}). You may use @code{-I} as
964many times as necessary to include a variety of paths. The current
f009d0ab 965working directory is always searched first; after that, @code{@value{AS}}
7a4c8e5c
RP
966searches any @samp{-I} directories in the same order as they were
967specified (left to right) on the command line.
d0281557 968
f009d0ab 969@node K
80381063 970@section Difference Tables: @code{-K}
66b818fb 971
80381063 972@kindex -K
f009d0ab
RP
973@ifclear DIFF-TBL-KLUGE
974On the @value{TARGET} family, this option is allowed, but has no effect. It is
8babef85 975permitted for compatibility with the @sc{gnu} assembler on other platforms,
d0281557 976where it can be used to warn when the assembler alters the machine code
f009d0ab 977generated for @samp{.word} directives in difference tables. The @value{TARGET}
b50e59fe
RP
978family does not have the addressing limitations that sometimes lead to this
979alteration on other platforms.
f009d0ab 980@end ifclear
b50e59fe 981
f009d0ab 982@ifset DIFF-TBL-KLUGE
66b818fb
RP
983@cindex difference tables, warning
984@cindex warning for altered difference tables
f009d0ab 985@code{@value{AS}} sometimes alters the code emitted for directives of the form
7a4c8e5c 986@samp{.word @var{sym1}-@var{sym2}}; @pxref{Word,,@code{.word}}.
80381063 987You can use the @samp{-K} option if you want a warning issued when this
d0281557 988is done.
f009d0ab 989@end ifset
47342e8f 990
f009d0ab 991@node L
66b818fb
RP
992@section Include Local Labels: @code{-L}
993
994@kindex -L
995@cindex local labels, retaining in output
b50e59fe 996Labels beginning with @samp{L} (upper case only) are called @dfn{local
05a0e43b 997labels}. @xref{Symbol Names}. Normally you do not see such labels when
47342e8f 998debugging, because they are intended for the use of programs (like
b50e59fe 999compilers) that compose assembler programs, not for your notice.
05a0e43b 1000Normally both @code{@value{AS}} and @code{@value{LD}} discard such labels, so you do not
b50e59fe 1001normally debug with them.
93b45514 1002
f009d0ab 1003This option tells @code{@value{AS}} to retain those @samp{L@dots{}} symbols
93b45514 1004in the object file. Usually if you do this you also tell the linker
f009d0ab 1005@code{@value{LD}} to preserve symbols whose names begin with @samp{L}.
93b45514 1006
9dcf8057
JL
1007By default, a local label is any label beginning with @samp{L}, but each
1008target is allowed to redefine the local label prefix.
509d5555
JL
1009@ifset HPPA
1010On the HPPA local labels begin with @samp{L$}.
1011@end ifset
99c4053d
KR
1012@c start-sanitize-arc
1013@ifset ARC
1014On the ARC local labels begin with @samp{.L}.
1015@end ifset
1016@c end-sanitize-arc
9dcf8057 1017
79e15b8a
ILT
1018@node M
1019@section Assemble in MRI Compatibility Mode: @code{-M}
1020
1021@kindex -M
1022@cindex MRI compatibility mode
1023The @code{-M} or @code{--mri} option selects MRI compatibility mode. This
1024changes the syntax and pseudo-op handling of @code{@value{AS}} to make it
71dd3c40
ILT
1025compatible with the @code{ASM68K} or the @code{ASM960} (depending upon the
1026configured target) assembler from Microtec Research. The exact nature of the
1027MRI syntax will not be documented here; see the MRI manuals for more
7d99e8af
ILT
1028information. Note in particular that the handling of macros and macro
1029arguments is somewhat different. The purpose of this option is to permit
1030assembling existing MRI assembler code using @code{@value{AS}}.
79e15b8a
ILT
1031
1032The MRI compatibility is not complete. Certain operations of the MRI assembler
1033depend upon its object file format, and can not be supported using other object
1034file formats. Supporting these would require enhancing each object file format
1035individually. These are:
1036
1037@itemize @bullet
1038@item global symbols in common section
1039
71dd3c40 1040The m68k MRI assembler supports common sections which are merged by the linker.
79e15b8a
ILT
1041Other object file formats do not support this. @code{@value{AS}} handles
1042common sections by treating them as a single common symbol. It permits local
1043symbols to be defined within a common section, but it can not support global
1044symbols, since it has no way to describe them.
1045
1046@item complex relocations
1047
71dd3c40 1048The MRI assemblers support relocations against a negated section address, and
79e15b8a
ILT
1049relocations which combine the start addresses of two or more sections. These
1050are not support by other object file formats.
1051
1052@item @code{END} pseudo-op specifying start address
1053
1054The MRI @code{END} pseudo-op permits the specification of a start address.
1055This is not supported by other object file formats. The start address may
1056instead be specified using the @code{-e} option to the linker, or in a linker
1057script.
1058
71dd3c40 1059@item @code{IDNT}, @code{.ident} and @code{NAME} pseudo-ops
79e15b8a 1060
71dd3c40
ILT
1061The MRI @code{IDNT}, @code{.ident} and @code{NAME} pseudo-ops assign a module
1062name to the output file. This is not supported by other object file formats.
79e15b8a
ILT
1063
1064@item @code{ORG} pseudo-op
1065
71dd3c40
ILT
1066The m68k MRI @code{ORG} pseudo-op begins an absolute section at a given
1067address. This differs from the usual @code{@value{AS}} @code{.org} pseudo-op,
1068which changes the location within the current section. Absolute sections are
1069not supported by other object file formats. The address of a section may be
79e15b8a
ILT
1070assigned within a linker script.
1071@end itemize
1072
1073There are some other features of the MRI assembler which are not supported by
1074@code{@value{AS}}, typically either because they are difficult or because they
1075seem of little consequence. Some of these may be supported in future releases.
1076
1077@itemize @bullet
1078
79e15b8a
ILT
1079@item EBCDIC strings
1080
1081EBCDIC strings are not supported.
1082
1083@item packed binary coded decimal
1084
1085Packed binary coded decimal is not supported. This means that the @code{DC.P}
1086and @code{DCB.P} pseudo-ops are not supported.
1087
1088@item @code{FEQU} pseudo-op
1089
71dd3c40 1090The m68k @code{FEQU} pseudo-op is not supported.
79e15b8a
ILT
1091
1092@item @code{NOOBJ} pseudo-op
1093
71dd3c40 1094The m68k @code{NOOBJ} pseudo-op is not supported.
79e15b8a
ILT
1095
1096@item @code{OPT} branch control options
1097
71dd3c40 1098The m68k @code{OPT} branch control options---@code{B}, @code{BRS}, @code{BRB},
79e15b8a
ILT
1099@code{BRL}, and @code{BRW}---are ignored. @code{@value{AS}} automatically
1100relaxes all branches, whether forward or backward, to an appropriate size, so
1101these options serve no purpose.
1102
1103@item @code{OPT} list control options
1104
71dd3c40 1105The following m68k @code{OPT} list control options are ignored: @code{C},
79e15b8a
ILT
1106@code{CEX}, @code{CL}, @code{CRE}, @code{E}, @code{G}, @code{I}, @code{M},
1107@code{MEX}, @code{MC}, @code{MD}, @code{X}.
1108
1109@item other @code{OPT} options
1110
71dd3c40 1111The following m68k @code{OPT} options are ignored: @code{NEST}, @code{O},
79e15b8a
ILT
1112@code{OLD}, @code{OP}, @code{P}, @code{PCO}, @code{PCR}, @code{PCS}, @code{R}.
1113
1114@item @code{OPT} @code{D} option is default
1115
71dd3c40 1116The m68k @code{OPT} @code{D} option is the default, unlike the MRI assembler.
79e15b8a
ILT
1117@code{OPT NOD} may be used to turn it off.
1118
1119@item @code{XREF} pseudo-op.
1120
71dd3c40
ILT
1121The m68k @code{XREF} pseudo-op is ignored.
1122
1123@item @code{.debug} pseudo-op
1124
1125The i960 @code{.debug} pseudo-op is not supported.
1126
1127@item @code{.extended} pseudo-op
1128
1129The i960 @code{.extended} pseudo-op is not supported.
1130
1131@item @code{.list} pseudo-op.
1132
1133The various options of the i960 @code{.list} pseudo-op are not supported.
1134
1135@item @code{.optimize} pseudo-op
1136
1137The i960 @code{.optimize} pseudo-op is not supported.
1138
1139@item @code{.output} pseudo-op
1140
1141The i960 @code{.output} pseudo-op is not supported.
1142
1143@item @code{.setreal} pseudo-op
1144
1145The i960 @code{.setreal} pseudo-op is not supported.
79e15b8a 1146
79e15b8a
ILT
1147@end itemize
1148
f009d0ab 1149@node o
66b818fb
RP
1150@section Name the Object File: @code{-o}
1151
1152@kindex -o
1153@cindex naming object file
1154@cindex object file name
f009d0ab 1155There is always one object file output when you run @code{@value{AS}}. By
9ebc250f 1156default it has the name
f009d0ab
RP
1157@ifset GENERIC
1158@ifset I960
1159@file{a.out} (or @file{b.out}, for Intel 960 targets only).
1160@end ifset
1161@ifclear I960
9ebc250f 1162@file{a.out}.
f009d0ab
RP
1163@end ifclear
1164@end ifset
1165@ifclear GENERIC
1166@ifset I960
9ebc250f 1167@file{b.out}.
f009d0ab
RP
1168@end ifset
1169@ifclear I960
9ebc250f 1170@file{a.out}.
f009d0ab
RP
1171@end ifclear
1172@end ifclear
1173You use this option (which takes exactly one filename) to give the
1174object file a different name.
93b45514 1175
05a0e43b 1176Whatever the object file is called, @code{@value{AS}} overwrites any
93b45514
RP
1177existing file of the same name.
1178
f009d0ab 1179@node R
66b818fb
RP
1180@section Join Data and Text Sections: @code{-R}
1181
1182@kindex -R
1183@cindex data and text sections, joining
1184@cindex text and data sections, joining
1185@cindex joining text and data sections
1186@cindex merging text and data sections
f009d0ab 1187@code{-R} tells @code{@value{AS}} to write the object file as if all
24b1493d 1188data-section data lives in the text section. This is only done at
93b45514 1189the very last moment: your binary data are the same, but data
24b1493d 1190section parts are relocated differently. The data section part of
9ebc250f 1191your object file is zero bytes long because all its bytes are
24b1493d 1192appended to the text section. (@xref{Sections,,Sections and Relocation}.)
93b45514 1193
b50e59fe 1194When you specify @code{-R} it would be possible to generate shorter
05a0e43b 1195address displacements (because we do not have to cross between text and
24b1493d 1196data section). We refrain from doing this simply for compatibility with
f009d0ab 1197older versions of @code{@value{AS}}. In future, @code{-R} may work this way.
93b45514 1198
f009d0ab
RP
1199@ifset COFF
1200When @code{@value{AS}} is configured for COFF output,
66b818fb 1201this option is only useful if you use sections named @samp{.text} and
f009d0ab
RP
1202@samp{.data}.
1203@end ifset
66b818fb 1204
9dcf8057 1205@ifset HPPA
05a0e43b
RP
1206@code{-R} is not supported for any of the HPPA targets. Using
1207@code{-R} generates a warning from @code{@value{AS}}.
9dcf8057
JL
1208@end ifset
1209
62e59d28 1210@node statistics
81fcb3ff 1211@section Display Assembly Statistics: @code{--statistics}
62e59d28
RP
1212
1213@kindex --statistics
1214@cindex statistics, about assembly
1215@cindex time, total for assembly
1216@cindex space used, maximum for assembly
1217Use @samp{--statistics} to display two statistics about the resources used by
1218@code{@value{AS}}: the maximum amount of space allocated during the assembly
1219(in bytes), and the total execution time taken for the assembly (in @sc{cpu}
1220seconds).
1221
f009d0ab 1222@node v
66b818fb
RP
1223@section Announce Version: @code{-v}
1224
1225@kindex -v
1226@kindex -version
f009d0ab
RP
1227@cindex @code{@value{AS}} version
1228@cindex version of @code{@value{AS}}
7d7ecbdd
RP
1229You can find out what version of as is running by including the
1230option @samp{-v} (which you can also spell as @samp{-version}) on the
1231command line.
1232
f009d0ab 1233@node W
66b818fb
RP
1234@section Suppress Warnings: @code{-W}
1235
1236@kindex -W
1237@cindex suppressing warnings
1238@cindex warnings, suppressing
f009d0ab 1239@code{@value{AS}} should never give a warning or error message when
93b45514 1240assembling compiler output. But programs written by people often
f009d0ab 1241cause @code{@value{AS}} to give a warning that a particular assumption was
93b45514 1242made. All such warnings are directed to the standard error file.
47342e8f
RP
1243If you use this option, no warnings are issued. This option only
1244affects the warning messages: it does not change any particular of how
f009d0ab 1245@code{@value{AS}} assembles your file. Errors, which stop the assembly, are
93b45514
RP
1246still reported.
1247
62e59d28
RP
1248@node Z
1249@section Generate Object File in Spite of Errors: @code{-Z}
1250@cindex object file, after errors
1251@cindex errors, continuing after
1252After an error message, @code{@value{AS}} normally produces no output. If for
1253some reason you are interested in object file output even after
1254@code{@value{AS}} gives an error message on your program, use the @samp{-Z}
1255option. If there are any errors, @code{@value{AS}} continues anyways, and
1256writes an object file after a final warning message of the form @samp{@var{n}
1257errors, @var{m} warnings, generating bad object file.}
1258
242d9c06 1259@node Syntax
d0281557 1260@chapter Syntax
66b818fb
RP
1261
1262@cindex machine-independent syntax
1263@cindex syntax, machine-independent
47342e8f 1264This chapter describes the machine-independent syntax allowed in a
f009d0ab
RP
1265source file. @code{@value{AS}} syntax is similar to what many other
1266assemblers use; it is inspired by the BSD 4.2
1267@ifclear VAX
1268assembler.
1269@end ifclear
1270@ifset VAX
1271assembler, except that @code{@value{AS}} does not assemble Vax bit-fields.
1272@end ifset
b50e59fe 1273
7a4c8e5c 1274@menu
05a0e43b 1275* Preprocessing:: Preprocessing
ba487f3a
RP
1276* Whitespace:: Whitespace
1277* Comments:: Comments
1278* Symbol Intro:: Symbols
1279* Statements:: Statements
1280* Constants:: Constants
7a4c8e5c
RP
1281@end menu
1282
05a0e43b
RP
1283@node Preprocessing
1284@section Preprocessing
93b45514 1285
66b818fb 1286@cindex preprocessing
05a0e43b 1287The @code{@value{AS}} internal preprocessor:
b50e59fe 1288@itemize @bullet
66b818fb 1289@cindex whitespace, removed by preprocessor
b50e59fe
RP
1290@item
1291adjusts and removes extra whitespace. It leaves one space or tab before
1292the keywords on a line, and turns any other whitespace on the line into
1293a single space.
93b45514 1294
66b818fb 1295@cindex comments, removed by preprocessor
b50e59fe
RP
1296@item
1297removes all comments, replacing them with a single space, or an
1298appropriate number of newlines.
93b45514 1299
66b818fb 1300@cindex constants, converted by preprocessor
b50e59fe
RP
1301@item
1302converts character constants into the appropriate numeric values.
1303@end itemize
1304
dd565f85 1305It does not do macro processing, include file handling, or
05a0e43b 1306anything else you may get from your C compiler's preprocessor. You can
9dcf8057 1307do include file processing with the @code{.include} directive
dd565f85
RP
1308(@pxref{Include,,@code{.include}}). You can use the @sc{gnu} C compiler driver
1309to get other ``CPP'' style preprocessing, by giving the input file a
1310@samp{.S} suffix. @xref{Overall Options,, Options Controlling the Kind of
1311Output, gcc.info, Using GNU CC}.
9dcf8057 1312
b50e59fe 1313Excess whitespace, comments, and character constants
93b45514 1314cannot be used in the portions of the input text that are not
05a0e43b 1315preprocessed.
93b45514 1316
66b818fb
RP
1317@cindex turning preprocessing on and off
1318@cindex preprocessing, turning on and off
1319@kindex #NO_APP
1320@kindex #APP
05a0e43b
RP
1321If the first line of an input file is @code{#NO_APP} or if you use the
1322@samp{-f} option, whitespace and comments are not removed from the input file.
1323Within an input file, you can ask for whitespace and comment removal in
1324specific portions of the by putting a line that says @code{#APP} before the
1325text that may contain whitespace or comments, and putting a line that says
1326@code{#NO_APP} after this text. This feature is mainly intend to support
1327@code{asm} statements in compilers whose output is otherwise free of comments
1328and whitespace.
93b45514 1329
242d9c06 1330@node Whitespace
93b45514 1331@section Whitespace
66b818fb
RP
1332
1333@cindex whitespace
93b45514 1334@dfn{Whitespace} is one or more blanks or tabs, in any order.
7a4c8e5c
RP
1335Whitespace is used to separate symbols, and to make programs neater for
1336people to read. Unless within character constants
1337(@pxref{Characters,,Character Constants}), any whitespace means the same
1338as exactly one space.
93b45514 1339
242d9c06 1340@node Comments
93b45514 1341@section Comments
66b818fb
RP
1342
1343@cindex comments
f009d0ab 1344There are two ways of rendering comments to @code{@value{AS}}. In both
93b45514
RP
1345cases the comment is equivalent to one space.
1346
d0281557
RP
1347Anything from @samp{/*} through the next @samp{*/} is a comment.
1348This means you may not nest these comments.
93b45514 1349
d0281557 1350@smallexample
93b45514
RP
1351/*
1352 The only way to include a newline ('\n') in a comment
1353 is to use this sort of comment.
1354*/
47342e8f 1355
93b45514 1356/* This sort of comment does not nest. */
d0281557 1357@end smallexample
93b45514 1358
66b818fb 1359@cindex line comment character
93b45514 1360Anything from the @dfn{line comment} character to the next newline
47342e8f 1361is considered a comment and is ignored. The line comment character is
910d7df2
C
1362@ifset A29K
1363@samp{;} for the AMD 29K family;
1364@end ifset
99c4053d
KR
1365@c start-sanitize-arc
1366@ifset ARC
1367@samp{;} on the ARC;
1368@end ifset
1369@c end-sanitize-arc
f009d0ab 1370@ifset H8/300
9ebc250f 1371@samp{;} for the H8/300 family;
f009d0ab
RP
1372@end ifset
1373@ifset H8/500
1374@samp{!} for the H8/500 family;
1375@end ifset
9dcf8057
JL
1376@ifset HPPA
1377@samp{;} for the HPPA;
1378@end ifset
910d7df2
C
1379@ifset I960
1380@samp{#} on the i960;
1381@end ifset
f009d0ab
RP
1382@ifset SH
1383@samp{!} for the Hitachi SH;
1384@end ifset
910d7df2
C
1385@ifset SPARC
1386@samp{!} on the SPARC;
1387@end ifset
1388@ifset M680X0
1389@samp{|} on the 680x0;
1390@end ifset
1391@ifset VAX
1392@samp{#} on the Vax;
1393@end ifset
f009d0ab 1394@ifset Z8000
ba487f3a 1395@samp{!} for the Z8000;
f009d0ab
RP
1396@end ifset
1397see @ref{Machine Dependencies}. @refill
9ebc250f 1398@c FIXME What about i386, m88k, i860?
09352a5d 1399
f009d0ab 1400@ifset GENERIC
b50e59fe 1401On some machines there are two different line comment characters. One
05a0e43b
RP
1402character only begins a comment if it is the first non-whitespace character on
1403a line, while the other always begins a comment.
f009d0ab 1404@end ifset
93b45514 1405
66b818fb
RP
1406@kindex #
1407@cindex lines starting with @code{#}
1408@cindex logical line numbers
dd565f85
RP
1409To be compatible with past assemblers, lines that begin with @samp{#} have a
1410special interpretation. Following the @samp{#} should be an absolute
05a0e43b 1411expression (@pxref{Expressions}): the logical line number of the @emph{next}
dd565f85
RP
1412line. Then a string (@pxref{Strings,, Strings}) is allowed: if present it is a
1413new logical file name. The rest of the line, if any, should be whitespace.
93b45514
RP
1414
1415If the first non-whitespace characters on the line are not numeric,
1416the line is ignored. (Just like a comment.)
dd565f85 1417
d0281557 1418@smallexample
93b45514
RP
1419 # This is an ordinary comment.
1420# 42-6 "new_file_name" # New logical file name
1421 # This is logical line # 36.
d0281557 1422@end smallexample
93b45514 1423This feature is deprecated, and may disappear from future versions
f009d0ab 1424of @code{@value{AS}}.
93b45514 1425
242d9c06 1426@node Symbol Intro
93b45514 1427@section Symbols
66b818fb 1428
66b818fb 1429@cindex characters used in symbols
f009d0ab
RP
1430@ifclear SPECIAL-SYMS
1431A @dfn{symbol} is one or more characters chosen from the set of all
1432letters (both upper and lower case), digits and the three characters
1433@samp{_.$}.
1434@end ifclear
1435@ifset SPECIAL-SYMS
1436@ifclear GENERIC
1437@ifset H8
93b45514 1438A @dfn{symbol} is one or more characters chosen from the set of all
f009d0ab
RP
1439letters (both upper and lower case), digits and the three characters
1440@samp{._$}. (Save that, on the H8/300 only, you may not use @samp{$} in
1441symbol names.)
1442@end ifset
1443@end ifclear
1444@end ifset
1445@ifset GENERIC
24b1493d 1446On most machines, you can also use @code{$} in symbol names; exceptions
f009d0ab
RP
1447are noted in @ref{Machine Dependencies}.
1448@end ifset
24b1493d 1449No symbol may begin with a digit. Case is significant.
b50e59fe
RP
1450There is no length limit: all characters are significant. Symbols are
1451delimited by characters not in that set, or by the beginning of a file
1452(since the source program must end with a newline, the end of a file is
1453not a possible symbol delimiter). @xref{Symbols}.
66b818fb 1454@cindex length of symbols
93b45514 1455
242d9c06 1456@node Statements
93b45514 1457@section Statements
66b818fb
RP
1458
1459@cindex statements, structure of
1460@cindex line separator character
1461@cindex statement separator character
f009d0ab
RP
1462@ifclear GENERIC
1463@ifclear abnormal-separator
d0281557
RP
1464A @dfn{statement} ends at a newline character (@samp{\n}) or at a
1465semicolon (@samp{;}). The newline or semicolon is considered part of
1466the preceding statement. Newlines and semicolons within character
05a0e43b 1467constants are an exception: they do not end statements.
f009d0ab
RP
1468@end ifclear
1469@ifset abnormal-separator
1470@ifset A29K
d0281557
RP
1471A @dfn{statement} ends at a newline character (@samp{\n}) or an ``at''
1472sign (@samp{@@}). The newline or at sign is considered part of the
1473preceding statement. Newlines and at signs within character constants
05a0e43b 1474are an exception: they do not end statements.
f009d0ab 1475@end ifset
9dcf8057
JL
1476@ifset HPPA
1477A @dfn{statement} ends at a newline character (@samp{\n}) or an exclamation
1478point (@samp{!}). The newline or exclamation point is considered part of the
1479preceding statement. Newlines and exclamation points within character
05a0e43b 1480constants are an exception: they do not end statements.
9dcf8057 1481@end ifset
f009d0ab
RP
1482@ifset H8
1483A @dfn{statement} ends at a newline character (@samp{\n}); or (for the
1484H8/300) a dollar sign (@samp{$}); or (for the
f009d0ab 1485Hitachi-SH or the
f009d0ab
RP
1486H8/500) a semicolon
1487(@samp{;}). The newline or separator character is considered part of
1488the preceding statement. Newlines and separators within character
05a0e43b 1489constants are an exception: they do not end statements.
f009d0ab
RP
1490@end ifset
1491@end ifset
1492@end ifclear
1493@ifset GENERIC
24b1493d
RP
1494A @dfn{statement} ends at a newline character (@samp{\n}) or line
1495separator character. (The line separator is usually @samp{;}, unless
f009d0ab 1496this conflicts with the comment character; @pxref{Machine Dependencies}.) The
24b1493d
RP
1497newline or separator character is considered part of the preceding
1498statement. Newlines and separators within character constants are an
05a0e43b 1499exception: they do not end statements.
f009d0ab 1500@end ifset
d0281557 1501
66b818fb
RP
1502@cindex newline, required at file end
1503@cindex EOF, newline must precede
93b45514 1504It is an error to end any statement with end-of-file: the last
b50e59fe 1505character of any input file should be a newline.@refill
93b45514 1506
66b818fb
RP
1507@cindex continuing statements
1508@cindex multi-line statements
1509@cindex statement on multiple lines
93b45514
RP
1510You may write a statement on more than one line if you put a
1511backslash (@kbd{\}) immediately in front of any newlines within the
f009d0ab 1512statement. When @code{@value{AS}} reads a backslashed newline both
93b45514
RP
1513characters are ignored. You can even put backslashed newlines in
1514the middle of symbol names without changing the meaning of your
1515source program.
1516
47342e8f 1517An empty statement is allowed, and may include whitespace. It is ignored.
93b45514 1518
66b818fb
RP
1519@cindex instructions and directives
1520@cindex directives and instructions
b50e59fe 1521@c "key symbol" is not used elsewhere in the document; seems pedantic to
71dd3c40 1522@c @defn{} it in that case, as was done previously... doc@cygnus.com,
d0281557 1523@c 13feb91.
47342e8f 1524A statement begins with zero or more labels, optionally followed by a
b50e59fe 1525key symbol which determines what kind of statement it is. The key
93b45514 1526symbol determines the syntax of the rest of the statement. If the
b50e59fe 1527symbol begins with a dot @samp{.} then the statement is an assembler
47342e8f
RP
1528directive: typically valid for any computer. If the symbol begins with
1529a letter the statement is an assembly language @dfn{instruction}: it
05a0e43b 1530assembles into a machine language instruction.
f009d0ab 1531@ifset GENERIC
05a0e43b 1532Different versions of @code{@value{AS}} for different computers
d0281557
RP
1533recognize different instructions. In fact, the same symbol may
1534represent a different instruction in a different computer's assembly
1535language.@refill
f009d0ab 1536@end ifset
47342e8f 1537
66b818fb
RP
1538@cindex @code{:} (label)
1539@cindex label (@code{:})
d0281557 1540A label is a symbol immediately followed by a colon (@code{:}).
47342e8f 1541Whitespace before a label or after a colon is permitted, but you may not
d0281557 1542have whitespace between a label's symbol and its colon. @xref{Labels}.
93b45514 1543
9dcf8057
JL
1544@ifset HPPA
1545For HPPA targets, labels need not be immediately followed by a colon, but
1546the definition of a label must begin in column zero. This also implies that
1547only one label may be defined on each line.
1548@end ifset
1549
d0281557 1550@smallexample
93b45514 1551label: .directive followed by something
24b1493d 1552another_label: # This is an empty statement.
93b45514 1553 instruction operand_1, operand_2, @dots{}
d0281557 1554@end smallexample
93b45514 1555
242d9c06 1556@node Constants
93b45514 1557@section Constants
66b818fb
RP
1558
1559@cindex constants
93b45514
RP
1560A constant is a number, written so that its value is known by
1561inspection, without knowing any context. Like this:
f4335d56 1562@smallexample
f009d0ab 1563@group
93b45514
RP
1564.byte 74, 0112, 092, 0x4A, 0X4a, 'J, '\J # All the same value.
1565.ascii "Ring the bell\7" # A string constant.
1566.octa 0x123456789abcdef0123456789ABCDEF0 # A bignum.
1567.float 0f-314159265358979323846264338327\
156895028841971.693993751E-40 # - pi, a flonum.
f009d0ab 1569@end group
f4335d56 1570@end smallexample
93b45514 1571
7a4c8e5c 1572@menu
ba487f3a
RP
1573* Characters:: Character Constants
1574* Numbers:: Number Constants
7a4c8e5c
RP
1575@end menu
1576
242d9c06 1577@node Characters
93b45514 1578@subsection Character Constants
66b818fb
RP
1579
1580@cindex character constants
1581@cindex constants, character
47342e8f
RP
1582There are two kinds of character constants. A @dfn{character} stands
1583for one character in one byte and its value may be used in
93b45514 1584numeric expressions. String constants (properly called string
47342e8f 1585@emph{literals}) are potentially many bytes and their values may not be
93b45514
RP
1586used in arithmetic expressions.
1587
7a4c8e5c 1588@menu
ba487f3a
RP
1589* Strings:: Strings
1590* Chars:: Characters
7a4c8e5c
RP
1591@end menu
1592
242d9c06 1593@node Strings
93b45514 1594@subsubsection Strings
66b818fb
RP
1595
1596@cindex string constants
1597@cindex constants, string
93b45514 1598A @dfn{string} is written between double-quotes. It may contain
47342e8f 1599double-quotes or null characters. The way to get special characters
93b45514 1600into a string is to @dfn{escape} these characters: precede them with
b50e59fe 1601a backslash @samp{\} character. For example @samp{\\} represents
93b45514 1602one backslash: the first @code{\} is an escape which tells
f009d0ab
RP
1603@code{@value{AS}} to interpret the second character literally as a backslash
1604(which prevents @code{@value{AS}} from recognizing the second @code{\} as an
93b45514
RP
1605escape character). The complete list of escapes follows.
1606
66b818fb
RP
1607@cindex escape codes, character
1608@cindex character escape codes
93b45514 1609@table @kbd
ba487f3a
RP
1610@c @item \a
1611@c Mnemonic for ACKnowledge; for ASCII this is octal code 007.
66b818fb 1612@c
66b818fb
RP
1613@cindex @code{\b} (backspace character)
1614@cindex backspace (@code{\b})
71dd3c40 1615@item \b
93b45514 1616Mnemonic for backspace; for ASCII this is octal code 010.
66b818fb 1617
ba487f3a
RP
1618@c @item \e
1619@c Mnemonic for EOText; for ASCII this is octal code 004.
66b818fb 1620@c
66b818fb
RP
1621@cindex @code{\f} (formfeed character)
1622@cindex formfeed (@code{\f})
71dd3c40 1623@item \f
93b45514 1624Mnemonic for FormFeed; for ASCII this is octal code 014.
66b818fb 1625
66b818fb
RP
1626@cindex @code{\n} (newline character)
1627@cindex newline (@code{\n})
71dd3c40 1628@item \n
93b45514 1629Mnemonic for newline; for ASCII this is octal code 012.
66b818fb 1630
ba487f3a
RP
1631@c @item \p
1632@c Mnemonic for prefix; for ASCII this is octal code 033, usually known as @code{escape}.
66b818fb 1633@c
66b818fb
RP
1634@cindex @code{\r} (carriage return character)
1635@cindex carriage return (@code{\r})
71dd3c40 1636@item \r
93b45514 1637Mnemonic for carriage-Return; for ASCII this is octal code 015.
66b818fb 1638
ba487f3a
RP
1639@c @item \s
1640@c Mnemonic for space; for ASCII this is octal code 040. Included for compliance with
1641@c other assemblers.
66b818fb 1642@c
66b818fb
RP
1643@cindex @code{\t} (tab)
1644@cindex tab (@code{\t})
71dd3c40 1645@item \t
93b45514 1646Mnemonic for horizontal Tab; for ASCII this is octal code 011.
66b818fb 1647
ba487f3a
RP
1648@c @item \v
1649@c Mnemonic for Vertical tab; for ASCII this is octal code 013.
1650@c @item \x @var{digit} @var{digit} @var{digit}
1651@c A hexadecimal character code. The numeric code is 3 hexadecimal digits.
66b818fb 1652@c
66b818fb
RP
1653@cindex @code{\@var{ddd}} (octal character code)
1654@cindex octal character code (@code{\@var{ddd}})
71dd3c40 1655@item \ @var{digit} @var{digit} @var{digit}
93b45514 1656An octal character code. The numeric code is 3 octal digits.
47342e8f
RP
1657For compatibility with other Unix systems, 8 and 9 are accepted as digits:
1658for example, @code{\008} has the value 010, and @code{\009} the value 011.
66b818fb 1659
910d7df2
C
1660@cindex @code{\@var{xd...}} (hex character code)
1661@cindex hex character code (@code{\@var{xd...}})
1662@item \@code{x} @var{hex-digits...}
1663A hex character code. All trailing hex digits are combined. Either upper or
1664lower case @code{x} works.
9dcf8057 1665
66b818fb
RP
1666@cindex @code{\\} (@samp{\} character)
1667@cindex backslash (@code{\\})
71dd3c40 1668@item \\
93b45514 1669Represents one @samp{\} character.
66b818fb 1670
ba487f3a
RP
1671@c @item \'
1672@c Represents one @samp{'} (accent acute) character.
1673@c This is needed in single character literals
7a4c8e5c 1674@c (@xref{Characters,,Character Constants}.) to represent
ba487f3a 1675@c a @samp{'}.
66b818fb 1676@c
66b818fb
RP
1677@cindex @code{\"} (doublequote character)
1678@cindex doublequote (@code{\"})
71dd3c40 1679@item \"
93b45514
RP
1680Represents one @samp{"} character. Needed in strings to represent
1681this character, because an unescaped @samp{"} would end the string.
66b818fb 1682
93b45514 1683@item \ @var{anything-else}
05a0e43b 1684Any other character when escaped by @kbd{\} gives a warning, but
dd565f85 1685assembles as if the @samp{\} was not present. The idea is that if
93b45514 1686you used an escape sequence you clearly didn't want the literal
f009d0ab
RP
1687interpretation of the following character. However @code{@value{AS}} has no
1688other interpretation, so @code{@value{AS}} knows it is giving you the wrong
93b45514
RP
1689code and warns you of the fact.
1690@end table
1691
1692Which characters are escapable, and what those escapes represent,
1693varies widely among assemblers. The current set is what we think
d0281557 1694the BSD 4.2 assembler recognizes, and is a subset of what most C
05a0e43b 1695compilers recognize. If you are in doubt, do not use an escape
93b45514
RP
1696sequence.
1697
242d9c06 1698@node Chars
93b45514 1699@subsubsection Characters
66b818fb
RP
1700
1701@cindex single character constant
1702@cindex character, single
1703@cindex constant, single character
93b45514
RP
1704A single character may be written as a single quote immediately
1705followed by that character. The same escapes apply to characters as
1706to strings. So if you want to write the character backslash, you
1707must write @kbd{'\\} where the first @code{\} escapes the second
b50e59fe 1708@code{\}. As you can see, the quote is an acute accent, not a
d0281557 1709grave accent. A newline
f009d0ab
RP
1710@ifclear GENERIC
1711@ifclear abnormal-separator
09352a5d 1712(or semicolon @samp{;})
f009d0ab
RP
1713@end ifclear
1714@ifset abnormal-separator
1715@ifset A29K
b50e59fe 1716(or at sign @samp{@@})
f009d0ab
RP
1717@end ifset
1718@ifset H8
1719(or dollar sign @samp{$}, for the H8/300; or semicolon @samp{;} for the
f009d0ab 1720Hitachi SH or
f009d0ab
RP
1721H8/500)
1722@end ifset
1723@end ifset
1724@end ifclear
d0281557
RP
1725immediately following an acute accent is taken as a literal character
1726and does not count as the end of a statement. The value of a character
93b45514 1727constant in a numeric expression is the machine's byte-wide code for
f009d0ab 1728that character. @code{@value{AS}} assumes your character code is ASCII:
d0281557 1729@kbd{'A} means 65, @kbd{'B} means 66, and so on. @refill
93b45514 1730
242d9c06 1731@node Numbers
93b45514 1732@subsection Number Constants
66b818fb
RP
1733
1734@cindex constants, number
1735@cindex number constants
f009d0ab 1736@code{@value{AS}} distinguishes three kinds of numbers according to how they
47342e8f
RP
1737are stored in the target machine. @emph{Integers} are numbers that
1738would fit into an @code{int} in the C language. @emph{Bignums} are
d0281557 1739integers, but they are stored in more than 32 bits. @emph{Flonums}
93b45514
RP
1740are floating point numbers, described below.
1741
7a4c8e5c 1742@menu
ba487f3a
RP
1743* Integers:: Integers
1744* Bignums:: Bignums
1745* Flonums:: Flonums
f009d0ab
RP
1746@ifclear GENERIC
1747@ifset I960
ba487f3a 1748* Bit Fields:: Bit Fields
f009d0ab
RP
1749@end ifset
1750@end ifclear
7a4c8e5c
RP
1751@end menu
1752
242d9c06 1753@node Integers
93b45514 1754@subsubsection Integers
66b818fb
RP
1755@cindex integers
1756@cindex constants, integer
1757
1758@cindex binary integers
1759@cindex integers, binary
b50e59fe
RP
1760A binary integer is @samp{0b} or @samp{0B} followed by zero or more of
1761the binary digits @samp{01}.
1762
66b818fb
RP
1763@cindex octal integers
1764@cindex integers, octal
93b45514
RP
1765An octal integer is @samp{0} followed by zero or more of the octal
1766digits (@samp{01234567}).
1767
66b818fb
RP
1768@cindex decimal integers
1769@cindex integers, decimal
93b45514
RP
1770A decimal integer starts with a non-zero digit followed by zero or
1771more digits (@samp{0123456789}).
1772
66b818fb
RP
1773@cindex hexadecimal integers
1774@cindex integers, hexadecimal
93b45514
RP
1775A hexadecimal integer is @samp{0x} or @samp{0X} followed by one or
1776more hexadecimal digits chosen from @samp{0123456789abcdefABCDEF}.
1777
47342e8f 1778Integers have the usual values. To denote a negative integer, use
b50e59fe 1779the prefix operator @samp{-} discussed under expressions
7a4c8e5c 1780(@pxref{Prefix Ops,,Prefix Operators}).
93b45514 1781
242d9c06 1782@node Bignums
93b45514 1783@subsubsection Bignums
66b818fb
RP
1784
1785@cindex bignums
1786@cindex constants, bignum
93b45514
RP
1787A @dfn{bignum} has the same syntax and semantics as an integer
1788except that the number (or its negative) takes more than 32 bits to
1789represent in binary. The distinction is made because in some places
1790integers are permitted while bignums are not.
1791
242d9c06 1792@node Flonums
93b45514 1793@subsubsection Flonums
66b818fb
RP
1794@cindex flonums
1795@cindex floating point numbers
1796@cindex constants, floating point
1797
1798@cindex precision, floating point
b50e59fe 1799A @dfn{flonum} represents a floating point number. The translation is
66b818fb 1800indirect: a decimal floating point number from the text is converted by
f009d0ab 1801@code{@value{AS}} to a generic binary floating point number of more than
b50e59fe
RP
1802sufficient precision. This generic floating point number is converted
1803to a particular computer's floating point format (or formats) by a
f009d0ab 1804portion of @code{@value{AS}} specialized to that computer.
93b45514
RP
1805
1806A flonum is written by writing (in order)
1807@itemize @bullet
1808@item
1809The digit @samp{0}.
9dcf8057 1810@ifset HPPA
05a0e43b 1811(@samp{0} is optional on the HPPA.)
9dcf8057 1812@end ifset
f009d0ab 1813
93b45514 1814@item
f009d0ab
RP
1815A letter, to tell @code{@value{AS}} the rest of the number is a flonum.
1816@ifset GENERIC
66b818fb 1817@kbd{e} is recommended. Case is not important.
0b5b143a
RP
1818@ignore
1819@c FIXME: verify if flonum syntax really this vague for most cases
05a0e43b
RP
1820(Any otherwise illegal letter works here, but that might be changed. Vax BSD
18214.2 assembler seems to allow any of @samp{defghDEFGH}.)
0b5b143a 1822@end ignore
f009d0ab
RP
1823
1824On the H8/300, H8/500,
f009d0ab 1825Hitachi SH,
f009d0ab
RP
1826and AMD 29K architectures, the letter must be
1827one of the letters @samp{DFPRSX} (in upper or lower case).
1828
99c4053d
KR
1829@c start-sanitize-arc
1830On the ARC, the letter one of the letters @samp{DFRS}
1831(in upper or lower case).
1832@c end-sanitize-arc
1833
f009d0ab
RP
1834On the Intel 960 architecture, the letter must be
1835one of the letters @samp{DFT} (in upper or lower case).
9dcf8057
JL
1836
1837On the HPPA architecture, the letter must be @samp{E} (upper case only).
f009d0ab
RP
1838@end ifset
1839@ifclear GENERIC
1840@ifset A29K
66b818fb 1841One of the letters @samp{DFPRSX} (in upper or lower case).
f009d0ab 1842@end ifset
99c4053d
KR
1843@c start-sanitize-arc
1844@ifset ARC
1845One of the letters @samp{DFRS} (in upper or lower case).
1846@end ifset
1847@c end-sanitize-arc
f009d0ab
RP
1848@ifset H8
1849One of the letters @samp{DFPRSX} (in upper or lower case).
1850@end ifset
9dcf8057 1851@ifset HPPA
05a0e43b 1852The letter @samp{E} (upper case only).
9dcf8057 1853@end ifset
910d7df2
C
1854@ifset I960
1855One of the letters @samp{DFT} (in upper or lower case).
1856@end ifset
f009d0ab
RP
1857@end ifclear
1858
93b45514
RP
1859@item
1860An optional sign: either @samp{+} or @samp{-}.
f009d0ab 1861
93b45514 1862@item
47342e8f 1863An optional @dfn{integer part}: zero or more decimal digits.
f009d0ab 1864
93b45514 1865@item
66b818fb 1866An optional @dfn{fractional part}: @samp{.} followed by zero
93b45514 1867or more decimal digits.
f009d0ab 1868
93b45514
RP
1869@item
1870An optional exponent, consisting of:
f009d0ab 1871
93b45514
RP
1872@itemize @bullet
1873@item
b50e59fe 1874An @samp{E} or @samp{e}.
d0281557
RP
1875@c I can't find a config where "EXP_CHARS" is other than 'eE', but in
1876@c principle this can perfectly well be different on different targets.
93b45514
RP
1877@item
1878Optional sign: either @samp{+} or @samp{-}.
1879@item
1880One or more decimal digits.
1881@end itemize
f009d0ab 1882
93b45514
RP
1883@end itemize
1884
66b818fb 1885At least one of the integer part or the fractional part must be
47342e8f 1886present. The floating point number has the usual base-10 value.
93b45514 1887
f009d0ab 1888@code{@value{AS}} does all processing using integers. Flonums are computed
47342e8f 1889independently of any floating point hardware in the computer running
f009d0ab 1890@code{@value{AS}}.
d0281557 1891
f009d0ab
RP
1892@ifclear GENERIC
1893@ifset I960
d0281557
RP
1894@c Bit fields are written as a general facility but are also controlled
1895@c by a conditional-compilation flag---which is as of now (21mar91)
1896@c turned on only by the i960 config of GAS.
242d9c06 1897@node Bit Fields
d0281557 1898@subsubsection Bit Fields
66b818fb
RP
1899
1900@cindex bit fields
1901@cindex constants, bit field
d0281557
RP
1902You can also define numeric constants as @dfn{bit fields}.
1903specify two numbers separated by a colon---
1904@example
1905@var{mask}:@var{value}
1906@end example
1907@noindent
05a0e43b
RP
1908@code{@value{AS}} applies a bitwise @sc{and} between @var{mask} and
1909@var{value}.
d0281557
RP
1910
1911The resulting number is then packed
f009d0ab 1912@ifset GENERIC
7a4c8e5c 1913@c this conditional paren in case bit fields turned on elsewhere than 960
d0281557 1914(in host-dependent byte order)
f009d0ab 1915@end ifset
d0281557
RP
1916into a field whose width depends on which assembler directive has the
1917bit-field as its argument. Overflow (a result from the bitwise and
1918requiring more binary digits to represent) is not an error; instead,
1919more constants are generated, of the specified width, beginning with the
1920least significant digits.@refill
1921
1922The directives @code{.byte}, @code{.hword}, @code{.int}, @code{.long},
1923@code{.short}, and @code{.word} accept bit-field arguments.
f009d0ab
RP
1924@end ifset
1925@end ifclear
93b45514 1926
242d9c06 1927@node Sections
24b1493d 1928@chapter Sections and Relocation
66b818fb
RP
1929@cindex sections
1930@cindex relocation
d0281557 1931
7a4c8e5c 1932@menu
ba487f3a 1933* Secs Background:: Background
f009d0ab
RP
1934* Ld Sections:: @value{LD} Sections
1935* As Sections:: @value{AS} Internal Sections
ba487f3a
RP
1936* Sub-Sections:: Sub-Sections
1937* bss:: bss Section
7a4c8e5c
RP
1938@end menu
1939
242d9c06 1940@node Secs Background
b50e59fe 1941@section Background
66b818fb 1942
24b1493d 1943Roughly, a section is a range of addresses, with no gaps; all data
d0281557 1944``in'' those addresses is treated the same for some particular purpose.
24b1493d 1945For example there may be a ``read only'' section.
93b45514 1946
66b818fb
RP
1947@cindex linker, and assembler
1948@cindex assembler, and linker
f009d0ab
RP
1949The linker @code{@value{LD}} reads many object files (partial programs) and
1950combines their contents to form a runnable program. When @code{@value{AS}}
05a0e43b
RP
1951emits an object file, the partial program is assumed to start at address 0.
1952@code{@value{LD}} assigns the final addresses for the partial program, so that
1953different partial programs do not overlap. This is actually an
1954oversimplification, but it suffices to explain how @code{@value{AS}} uses
1955sections.
93b45514 1956
f009d0ab 1957@code{@value{LD}} moves blocks of bytes of your program to their run-time
93b45514 1958addresses. These blocks slide to their run-time addresses as rigid
47342e8f 1959units; their length does not change and neither does the order of bytes
24b1493d
RP
1960within them. Such a rigid unit is called a @emph{section}. Assigning
1961run-time addresses to sections is called @dfn{relocation}. It includes
47342e8f 1962the task of adjusting mentions of object-file addresses so they refer to
d0281557 1963the proper run-time addresses.
f009d0ab
RP
1964@ifset H8
1965For the H8/300 and H8/500,
f009d0ab 1966and for the Hitachi SH,
f009d0ab
RP
1967@code{@value{AS}} pads sections if needed to
1968ensure they end on a word (sixteen bit) boundary.
1969@end ifset
1970
1971@cindex standard @code{@value{AS}} sections
1972An object file written by @code{@value{AS}} has at least three sections, any
24b1493d 1973of which may be empty. These are named @dfn{text}, @dfn{data} and
f009d0ab 1974@dfn{bss} sections.
93b45514 1975
f009d0ab
RP
1976@ifset COFF
1977@ifset GENERIC
1978When it generates COFF output,
1979@end ifset
1980@code{@value{AS}} can also generate whatever other named sections you specify
24b1493d 1981using the @samp{.section} directive (@pxref{Section,,@code{.section}}).
05a0e43b
RP
1982If you do not use any directives that place output in the @samp{.text}
1983or @samp{.data} sections, these sections still exist, but are empty.
f009d0ab 1984@end ifset
d0281557 1985
9dcf8057
JL
1986@ifset HPPA
1987@ifset GENERIC
1988When @code{@value{AS}} generates SOM or ELF output for the HPPA,
1989@end ifset
1990@code{@value{AS}} can also generate whatever other named sections you
1991specify using the @samp{.space} and @samp{.subspace} directives. See
1992@cite{HP9000 Series 800 Assembly Language Reference Manual}
1993(HP 92432-90001) for details on the @samp{.space} and @samp{.subspace}
1994assembler directives.
1995
1996@ifset SOM
1997Additionally, @code{@value{AS}} uses different names for the standard
1998text, data, and bss sections when generating SOM output. Program text
1999is placed into the @samp{$CODE$} section, data into @samp{$DATA$}, and
2000BSS into @samp{$BSS$}.
2001@end ifset
2002@end ifset
2003
24b1493d
RP
2004Within the object file, the text section starts at address @code{0}, the
2005data section follows, and the bss section follows the data section.
d0281557 2006
9dcf8057
JL
2007@ifset HPPA
2008When generating either SOM or ELF output files on the HPPA, the text
2009section starts at address @code{0}, the data section at address
2010@code{0x4000000}, and the bss section follows the data section.
2011@end ifset
2012
05a0e43b 2013To let @code{@value{LD}} know which data changes when the sections are
f009d0ab 2014relocated, and how to change that data, @code{@value{AS}} also writes to the
93b45514 2015object file details of the relocation needed. To perform relocation
f009d0ab 2016@code{@value{LD}} must know, each time an address in the object
47342e8f 2017file is mentioned:
93b45514
RP
2018@itemize @bullet
2019@item
47342e8f
RP
2020Where in the object file is the beginning of this reference to
2021an address?
93b45514 2022@item
47342e8f 2023How long (in bytes) is this reference?
93b45514 2024@item
24b1493d 2025Which section does the address refer to? What is the numeric value of
b50e59fe 2026@display
24b1493d 2027(@var{address}) @minus{} (@var{start-address of section})?
b50e59fe 2028@end display
93b45514 2029@item
b50e59fe 2030Is the reference to an address ``Program-Counter relative''?
93b45514
RP
2031@end itemize
2032
66b818fb
RP
2033@cindex addresses, format of
2034@cindex section-relative addressing
f009d0ab 2035In fact, every address @code{@value{AS}} ever uses is expressed as
d0281557 2036@display
24b1493d 2037(@var{section}) + (@var{offset into section})
d0281557
RP
2038@end display
2039@noindent
65fbb2d7
RP
2040Further, most expressions @code{@value{AS}} computes have this section-relative
2041nature.
2042@ifset SOM
2043(For some object formats, such as SOM for the HPPA, some expressions are
2044symbol-relative instead.)
2045@end ifset
dd565f85
RP
2046
2047In this manual we use the notation @{@var{secname} @var{N}@} to mean ``offset
2048@var{N} into section @var{secname}.''
24b1493d
RP
2049
2050Apart from text, data and bss sections you need to know about the
f009d0ab 2051@dfn{absolute} section. When @code{@value{LD}} mixes partial programs,
66b818fb 2052addresses in the absolute section remain unchanged. For example, address
05a0e43b
RP
2053@code{@{absolute 0@}} is ``relocated'' to run-time address 0 by
2054@code{@value{LD}}. Although the linker never arranges two partial programs'
2055data sections with overlapping addresses after linking, @emph{by definition}
2056their absolute sections must overlap. Address @code{@{absolute@ 239@}} in one
2057part of a program is always the same address when the program is running as
2058address @code{@{absolute@ 239@}} in any other part of the program.
47342e8f 2059
24b1493d
RP
2060The idea of sections is extended to the @dfn{undefined} section. Any
2061address whose section is unknown at assembly time is by definition
05a0e43b 2062rendered @{undefined @var{U}@}---where @var{U} is filled in later.
47342e8f 2063Since numbers are always defined, the only way to generate an undefined
93b45514
RP
2064address is to mention an undefined symbol. A reference to a named
2065common block would be such a symbol: its value is unknown at assembly
24b1493d 2066time so it has section @emph{undefined}.
93b45514 2067
24b1493d 2068By analogy the word @emph{section} is used to describe groups of sections in
f009d0ab 2069the linked program. @code{@value{LD}} puts all partial programs' text
24b1493d
RP
2070sections in contiguous addresses in the linked program. It is
2071customary to refer to the @emph{text section} of a program, meaning all
05a0e43b 2072the addresses of all partial programs' text sections. Likewise for
24b1493d 2073data and bss sections.
93b45514 2074
f009d0ab
RP
2075Some sections are manipulated by @code{@value{LD}}; others are invented for
2076use of @code{@value{AS}} and have no meaning except during assembly.
47342e8f 2077
f009d0ab
RP
2078@node Ld Sections
2079@section @value{LD} Sections
2080@code{@value{LD}} deals with just four kinds of sections, summarized below.
b50e59fe
RP
2081
2082@table @strong
47342e8f 2083
f009d0ab 2084@ifset COFF
66b818fb
RP
2085@cindex named sections
2086@cindex sections, named
24b1493d 2087@item named sections
f009d0ab
RP
2088@end ifset
2089@ifset aout-bout
66b818fb
RP
2090@cindex text section
2091@cindex data section
9dcf8057 2092@itemx text section
24b1493d 2093@itemx data section
f009d0ab
RP
2094@end ifset
2095These sections hold your program. @code{@value{AS}} and @code{@value{LD}} treat them as
24b1493d 2096separate but equal sections. Anything you can say of one section is
f009d0ab
RP
2097true another.
2098@ifset aout-bout
24b1493d
RP
2099When the program is running, however, it is
2100customary for the text section to be unalterable. The
05a0e43b 2101text section is often shared among processes: it contains
24b1493d 2102instructions, constants and the like. The data section of a running
b50e59fe 2103program is usually alterable: for example, C variables would be stored
24b1493d 2104in the data section.
f009d0ab 2105@end ifset
47342e8f 2106
66b818fb 2107@cindex bss section
24b1493d
RP
2108@item bss section
2109This section contains zeroed bytes when your program begins running. It
47342e8f 2110is used to hold unitialized variables or common storage. The length of
24b1493d 2111each partial program's bss section is important, but because it starts
47342e8f 2112out containing zeroed bytes there is no need to store explicit zero
24b1493d 2113bytes in the object file. The bss section was invented to eliminate
d0281557 2114those explicit zeros from object files.
47342e8f 2115
66b818fb 2116@cindex absolute section
24b1493d
RP
2117@item absolute section
2118Address 0 of this section is always ``relocated'' to runtime address 0.
f009d0ab 2119This is useful if you want to refer to an address that @code{@value{LD}} must
47342e8f 2120not change when relocating. In this sense we speak of absolute
05a0e43b 2121addresses being ``unrelocatable'': they do not change during relocation.
47342e8f 2122
66b818fb 2123@cindex undefined section
24b1493d
RP
2124@item undefined section
2125This ``section'' is a catch-all for address references to objects not in
2126the preceding sections.
47342e8f 2127@c FIXME: ref to some other doc on obj-file formats could go here.
93b45514 2128@end table
47342e8f 2129
66b818fb 2130@cindex relocation example
f009d0ab
RP
2131An idealized example of three relocatable sections follows.
2132@ifset COFF
66b818fb 2133The example uses the traditional section names @samp{.text} and @samp{.data}.
f009d0ab 2134@end ifset
24b1493d 2135Memory addresses are on the horizontal axis.
93b45514 2136
7d7ecbdd 2137@c TEXI2ROFF-KILL
b50e59fe 2138@ifinfo
7d7ecbdd 2139@c END TEXI2ROFF-KILL
d0281557 2140@smallexample
93b45514
RP
2141 +-----+----+--+
2142partial program # 1: |ttttt|dddd|00|
2143 +-----+----+--+
2144
2145 text data bss
2146 seg. seg. seg.
2147
2148 +---+---+---+
2149partial program # 2: |TTT|DDD|000|
2150 +---+---+---+
2151
2152 +--+---+-----+--+----+---+-----+~~
2153linked program: | |TTT|ttttt| |dddd|DDD|00000|
2154 +--+---+-----+--+----+---+-----+~~
2155
2156 addresses: 0 @dots{}
d0281557 2157@end smallexample
7d7ecbdd 2158@c TEXI2ROFF-KILL
b50e59fe 2159@end ifinfo
8babef85 2160@need 5000
b50e59fe 2161@tex
d0281557 2162
66b818fb 2163\line{\it Partial program \#1: \hfil}
d0281557
RP
2164\line{\ibox{2.5cm}{\tt text}\ibox{2cm}{\tt data}\ibox{1cm}{\tt bss}\hfil}
2165\line{\boxit{2.5cm}{\tt ttttt}\boxit{2cm}{\tt dddd}\boxit{1cm}{\tt 00}\hfil}
2166
66b818fb 2167\line{\it Partial program \#2: \hfil}
d0281557
RP
2168\line{\ibox{1cm}{\tt text}\ibox{1.5cm}{\tt data}\ibox{1cm}{\tt bss}\hfil}
2169\line{\boxit{1cm}{\tt TTT}\boxit{1.5cm}{\tt DDDD}\boxit{1cm}{\tt 000}\hfil}
2170
66b818fb 2171\line{\it linked program: \hfil}
d0281557
RP
2172\line{\ibox{.5cm}{}\ibox{1cm}{\tt text}\ibox{2.5cm}{}\ibox{.75cm}{}\ibox{2cm}{\tt data}\ibox{1.5cm}{}\ibox{2cm}{\tt bss}\hfil}
2173\line{\boxit{.5cm}{}\boxit{1cm}{\tt TTT}\boxit{2.5cm}{\tt
b50e59fe 2174ttttt}\boxit{.75cm}{}\boxit{2cm}{\tt dddd}\boxit{1.5cm}{\tt
d0281557
RP
2175DDDD}\boxit{2cm}{\tt 00000}\ \dots\hfil}
2176
66b818fb 2177\line{\it addresses: \hfil}
d0281557
RP
2178\line{0\dots\hfil}
2179
b50e59fe 2180@end tex
7d7ecbdd 2181@c END TEXI2ROFF-KILL
93b45514 2182
f009d0ab
RP
2183@node As Sections
2184@section @value{AS} Internal Sections
66b818fb 2185
f009d0ab 2186@cindex internal @code{@value{AS}} sections
66b818fb 2187@cindex sections in messages, internal
f009d0ab 2188These sections are meant only for the internal use of @code{@value{AS}}. They
05a0e43b 2189have no meaning at run-time. You do not really need to know about these
f009d0ab 2190sections for most purposes; but they can be mentioned in @code{@value{AS}}
24b1493d 2191warning messages, so it might be helpful to have an idea of their
f009d0ab 2192meanings to @code{@value{AS}}. These sections are used to permit the
24b1493d
RP
2193value of every expression in your assembly language program to be a
2194section-relative address.
93b45514 2195
d0281557 2196@table @b
66b818fb 2197@cindex assembler internal logic error
71dd3c40 2198@item ASSEMBLER-INTERNAL-LOGIC-ERROR!
24b1493d
RP
2199An internal assembler logic error has been found. This means there is a
2200bug in the assembler.
2201
9dcf8057 2202@cindex expr (internal section)
71dd3c40 2203@item expr section
9dcf8057
JL
2204The assembler stores complex expression internally as combinations of
2205symbols. When it needs to represent an expression as a symbol, it puts
2206it in the expr section.
24b1493d
RP
2207@c FIXME item debug
2208@c FIXME item transfer[t] vector preload
2209@c FIXME item transfer[t] vector postload
2210@c FIXME item register
93b45514
RP
2211@end table
2212
242d9c06 2213@node Sub-Sections
24b1493d 2214@section Sub-Sections
66b818fb
RP
2215
2216@cindex numbered subsections
2217@cindex grouping data
f009d0ab 2218@ifset aout-bout
24b1493d 2219Assembled bytes
f009d0ab 2220@ifset COFF
24b1493d 2221conventionally
f009d0ab
RP
2222@end ifset
2223fall into two sections: text and data.
2224@end ifset
66b818fb 2225You may have separate groups of
f009d0ab 2226@ifset GENERIC
66b818fb 2227data in named sections
f009d0ab
RP
2228@end ifset
2229@ifclear GENERIC
2230@ifclear aout-bout
2231data in named sections
2232@end ifclear
2233@ifset aout-bout
2234text or data
2235@end ifset
2236@end ifclear
05a0e43b
RP
2237that you want to end up near to each other in the object file, even though they
2238are not contiguous in the assembler source. @code{@value{AS}} allows you to
2239use @dfn{subsections} for this purpose. Within each section, there can be
2240numbered subsections with values from 0 to 8192. Objects assembled into the
2241same subsection go into the object file together with other objects in the same
2242subsection. For example, a compiler might want to store constants in the text
2243section, but might not want to have them interspersed with the program being
2244assembled. In this case, the compiler could issue a @samp{.text 0} before each
2245section of code being output, and a @samp{.text 1} before each group of
2246constants being output.
2247
2248Subsections are optional. If you do not use subsections, everything
2249goes in subsection number zero.
93b45514 2250
f009d0ab 2251@ifset GENERIC
24b1493d
RP
2252Each subsection is zero-padded up to a multiple of four bytes.
2253(Subsections may be padded a different amount on different flavors
f009d0ab
RP
2254of @code{@value{AS}}.)
2255@end ifset
2256@ifclear GENERIC
2257@ifset H8
2258On the H8/300 and H8/500 platforms, each subsection is zero-padded to a word
66b818fb 2259boundary (two bytes).
f009d0ab 2260The same is true on the Hitachi SH.
f009d0ab
RP
2261@end ifset
2262@ifset I960
24b1493d 2263@c FIXME section padding (alignment)?
d0281557
RP
2264@c Rich Pixley says padding here depends on target obj code format; that
2265@c doesn't seem particularly useful to say without further elaboration,
2266@c so for now I say nothing about it. If this is a generic BFD issue,
2267@c these paragraphs might need to vanish from this manual, and be
2268@c discussed in BFD chapter of binutils (or some such).
f009d0ab
RP
2269@end ifset
2270@ifset A29K
66b818fb 2271On the AMD 29K family, no particular padding is added to section or
f009d0ab
RP
2272subsection sizes; @value{AS} forces no alignment on this platform.
2273@end ifset
2274@end ifclear
66b818fb 2275
24b1493d 2276Subsections appear in your object file in numeric order, lowest numbered
b50e59fe 2277to highest. (All this to be compatible with other people's assemblers.)
f009d0ab 2278The object file contains no representation of subsections; @code{@value{LD}} and
05a0e43b 2279other programs that manipulate object files see no trace of them.
24b1493d
RP
2280They just see all your text subsections as a text section, and all your
2281data subsections as a data section.
93b45514 2282
24b1493d 2283To specify which subsection you want subsequent statements assembled
66b818fb
RP
2284into, use a numeric argument to specify it, in a @samp{.text
2285@var{expression}} or a @samp{.data @var{expression}} statement.
f009d0ab
RP
2286@ifset COFF
2287@ifset GENERIC
2288When generating COFF output, you
2289@end ifset
2290@ifclear GENERIC
66b818fb 2291You
f009d0ab 2292@end ifclear
66b818fb
RP
2293can also use an extra subsection
2294argument with arbitrary named sections: @samp{.section @var{name},
2295@var{expression}}.
f009d0ab 2296@end ifset
66b818fb
RP
2297@var{Expression} should be an absolute expression.
2298(@xref{Expressions}.) If you just say @samp{.text} then @samp{.text 0}
2299is assumed. Likewise @samp{.data} means @samp{.data 0}. Assembly
2300begins in @code{text 0}. For instance:
d0281557 2301@smallexample
24b1493d
RP
2302.text 0 # The default subsection is text 0 anyway.
2303.ascii "This lives in the first text subsection. *"
93b45514 2304.text 1
24b1493d 2305.ascii "But this lives in the second text subsection."
93b45514 2306.data 0
24b1493d
RP
2307.ascii "This lives in the data section,"
2308.ascii "in the first data subsection."
93b45514 2309.text 0
24b1493d 2310.ascii "This lives in the first text section,"
93b45514 2311.ascii "immediately following the asterisk (*)."
d0281557 2312@end smallexample
93b45514 2313
05a0e43b
RP
2314Each section has a @dfn{location counter} incremented by one for every byte
2315assembled into that section. Because subsections are merely a convenience
2316restricted to @code{@value{AS}} there is no concept of a subsection location
2317counter. There is no way to directly manipulate a location counter---but the
2318@code{.align} directive changes it, and any label definition captures its
2319current value. The location counter of the section where statements are being
2320assembled is said to be the @dfn{active} location counter.
93b45514 2321
242d9c06 2322@node bss
24b1493d 2323@section bss Section
66b818fb
RP
2324
2325@cindex bss section
2326@cindex common variable storage
24b1493d
RP
2327The bss section is used for local common variable storage.
2328You may allocate address space in the bss section, but you may
93b45514 2329not dictate data to load into it before your program executes. When
b50e59fe 2330your program starts running, all the contents of the bss
24b1493d 2331section are zeroed bytes.
93b45514 2332
35cfacf0
ILT
2333The @code{.lcomm} pseudo-op defines a symbol in the bss section; see
2334@ref{Lcomm,,@code{.lcomm}}.
2335
2336The @code{.comm} pseudo-op may be used to declare a common symbol, which is
2337another form of uninitialized symbol; see @xref{Comm,,@code{.comm}}.
2338
2339@ifset GENERIC
2340When assembling for a target which supports multiple sections, such as ELF or
2341COFF, you may switch into the @code{.bss} section and define symbols as usual;
2342see @ref{Section,,@code{.section}}. You may only assemble zero values into the
2343section. Typically the section will only contain symbol definitions and
2344@code{.skip} directives (@pxref{Skip,,@code{.skip}}).
2345@end ifset
93b45514 2346
242d9c06 2347@node Symbols
93b45514 2348@chapter Symbols
66b818fb
RP
2349
2350@cindex symbols
47342e8f
RP
2351Symbols are a central concept: the programmer uses symbols to name
2352things, the linker uses symbols to link, and the debugger uses symbols
d0281557 2353to debug.
47342e8f 2354
b50e59fe 2355@quotation
66b818fb 2356@cindex debuggers, and symbol order
f009d0ab 2357@emph{Warning:} @code{@value{AS}} does not place symbols in the object file in
b50e59fe
RP
2358the same order they were declared. This may break some debuggers.
2359@end quotation
93b45514 2360
7a4c8e5c 2361@menu
ba487f3a
RP
2362* Labels:: Labels
2363* Setting Symbols:: Giving Symbols Other Values
2364* Symbol Names:: Symbol Names
2365* Dot:: The Special Dot Symbol
2366* Symbol Attributes:: Symbol Attributes
7a4c8e5c
RP
2367@end menu
2368
242d9c06 2369@node Labels
93b45514 2370@section Labels
66b818fb
RP
2371
2372@cindex labels
93b45514 2373A @dfn{label} is written as a symbol immediately followed by a colon
b50e59fe 2374@samp{:}. The symbol then represents the current value of the
93b45514
RP
2375active location counter, and is, for example, a suitable instruction
2376operand. You are warned if you use the same symbol to represent two
2377different locations: the first definition overrides any other
2378definitions.
2379
9dcf8057 2380@ifset HPPA
81fcb3ff
RP
2381On the HPPA, the usual form for a label need not be immediately followed by a
2382colon, but instead must start in column zero. Only one label may be defined on
2383a single line. To work around this, the HPPA version of @code{@value{AS}} also
2384provides a special directive @code{.label} for defining labels more flexibly.
9dcf8057
JL
2385@end ifset
2386
242d9c06 2387@node Setting Symbols
93b45514 2388@section Giving Symbols Other Values
66b818fb
RP
2389
2390@cindex assigning values to symbols
2391@cindex symbol values, assigning
b50e59fe
RP
2392A symbol can be given an arbitrary value by writing a symbol, followed
2393by an equals sign @samp{=}, followed by an expression
93b45514 2394(@pxref{Expressions}). This is equivalent to using the @code{.set}
7a4c8e5c 2395directive. @xref{Set,,@code{.set}}.
93b45514 2396
242d9c06 2397@node Symbol Names
93b45514 2398@section Symbol Names
66b818fb
RP
2399
2400@cindex symbol names
2401@cindex names, symbol
f009d0ab
RP
2402@ifclear SPECIAL-SYMS
2403Symbol names begin with a letter or with one of @samp{._}. On most
2404machines, you can also use @code{$} in symbol names; exceptions are
2405noted in @ref{Machine Dependencies}. That character may be followed by any
2406string of digits, letters, dollar signs (unless otherwise noted in
2407@ref{Machine Dependencies}), and underscores.
2408@end ifclear
2409@ifset A29K
b50e59fe
RP
2410For the AMD 29K family, @samp{?} is also allowed in the
2411body of a symbol name, though not at its beginning.
f009d0ab
RP
2412@end ifset
2413
2414@ifset SPECIAL-SYMS
2415@ifset H8
2416Symbol names begin with a letter or with one of @samp{._}. On the
f009d0ab 2417Hitachi SH or the
f009d0ab
RP
2418H8/500, you can also use @code{$} in symbol names. That character may
2419be followed by any string of digits, letters, dollar signs (save on the
2420H8/300), and underscores.
2421@end ifset
2422@end ifset
2423
2424Case of letters is significant: @code{foo} is a different symbol name
2425than @code{Foo}.
b50e59fe 2426
05a0e43b
RP
2427Each symbol has exactly one name. Each name in an assembly language program
2428refers to exactly one symbol. You may use that symbol name any number of times
2429in a program.
93b45514 2430
7a4c8e5c 2431@subheading Local Symbol Names
93b45514 2432
66b818fb
RP
2433@cindex local symbol names
2434@cindex symbol names, local
2435@cindex temporary symbol names
2436@cindex symbol names, temporary
93b45514 2437Local symbols help compilers and programmers use names temporarily.
b50e59fe
RP
2438There are ten local symbol names, which are re-used throughout the
2439program. You may refer to them using the names @samp{0} @samp{1}
2440@dots{} @samp{9}. To define a local symbol, write a label of the form
2441@samp{@b{N}:} (where @b{N} represents any digit). To refer to the most
2442recent previous definition of that symbol write @samp{@b{N}b}, using the
2443same digit as when you defined the label. To refer to the next
2444definition of a local label, write @samp{@b{N}f}---where @b{N} gives you
2445a choice of 10 forward references. The @samp{b} stands for
2446``backwards'' and the @samp{f} stands for ``forwards''.
2447
8babef85 2448Local symbols are not emitted by the current @sc{gnu} C compiler.
93b45514
RP
2449
2450There is no restriction on how you can use these labels, but
2451remember that at any point in the assembly you can refer to at most
245210 prior local labels and to at most 10 forward local labels.
2453
47342e8f 2454Local symbol names are only a notation device. They are immediately
93b45514 2455transformed into more conventional symbol names before the assembler
47342e8f
RP
2456uses them. The symbol names stored in the symbol table, appearing in
2457error messages and optionally emitted to the object file have these
2458parts:
2459
2460@table @code
93b45514 2461@item L
f009d0ab
RP
2462All local labels begin with @samp{L}. Normally both @code{@value{AS}} and
2463@code{@value{LD}} forget symbols that start with @samp{L}. These labels are
05a0e43b
RP
2464used for symbols you are never intended to see. If you use the
2465@samp{-L} option then @code{@value{AS}} retains these symbols in the
f009d0ab 2466object file. If you also instruct @code{@value{LD}} to retain these symbols,
93b45514 2467you may use them in debugging.
47342e8f
RP
2468
2469@item @var{digit}
93b45514
RP
2470If the label is written @samp{0:} then the digit is @samp{0}.
2471If the label is written @samp{1:} then the digit is @samp{1}.
2472And so on up through @samp{9:}.
47342e8f 2473
35cfacf0 2474@item @kbd{C-A}
05a0e43b 2475This unusual character is included so you do not accidentally invent
93b45514
RP
2476a symbol of the same name. The character has ASCII value
2477@samp{\001}.
47342e8f
RP
2478
2479@item @emph{ordinal number}
2480This is a serial number to keep the labels distinct. The first
93b45514 2481@samp{0:} gets the number @samp{1}; The 15th @samp{0:} gets the
47342e8f 2482number @samp{15}; @emph{etc.}. Likewise for the other labels @samp{1:}
93b45514
RP
2483through @samp{9:}.
2484@end table
47342e8f 2485
35cfacf0
ILT
2486For instance, the first @code{1:} is named @code{L1@kbd{C-A}1}, the 44th
2487@code{3:} is named @code{L3@kbd{C-A}44}.
93b45514 2488
242d9c06 2489@node Dot
93b45514
RP
2490@section The Special Dot Symbol
2491
66b818fb
RP
2492@cindex dot (symbol)
2493@cindex @code{.} (symbol)
2494@cindex current address
2495@cindex location counter
b50e59fe 2496The special symbol @samp{.} refers to the current address that
f009d0ab 2497@code{@value{AS}} is assembling into. Thus, the expression @samp{melvin:
05a0e43b 2498.long .} defines @code{melvin} to contain its own address.
93b45514
RP
2499Assigning a value to @code{.} is treated the same as a @code{.org}
2500directive. Thus, the expression @samp{.=.+4} is the same as saying
f009d0ab 2501@ifclear no-space-dir
09352a5d 2502@samp{.space 4}.
f009d0ab
RP
2503@end ifclear
2504@ifset no-space-dir
2505@ifset A29K
b50e59fe 2506@samp{.block 4}.
f009d0ab
RP
2507@end ifset
2508@end ifset
b50e59fe 2509
242d9c06 2510@node Symbol Attributes
93b45514 2511@section Symbol Attributes
66b818fb
RP
2512
2513@cindex symbol attributes
2514@cindex attributes, symbol
d0281557 2515Every symbol has, as well as its name, the attributes ``Value'' and
66b818fb 2516``Type''. Depending on output format, symbols can also have auxiliary
f009d0ab
RP
2517attributes.
2518@ifset INTERNALS
2519The detailed definitions are in @file{a.out.h}.
2520@end ifset
93b45514 2521
f009d0ab 2522If you use a symbol without defining it, @code{@value{AS}} assumes zero for
93b45514
RP
2523all these attributes, and probably won't warn you. This makes the
2524symbol an externally defined symbol, which is generally what you
2525would want.
2526
7a4c8e5c 2527@menu
ba487f3a
RP
2528* Symbol Value:: Value
2529* Symbol Type:: Type
f009d0ab
RP
2530@ifset aout-bout
2531@ifset GENERIC
2532* a.out Symbols:: Symbol Attributes: @code{a.out}
2533@end ifset
2534@ifclear GENERIC
2535@ifclear BOUT
ba487f3a 2536* a.out Symbols:: Symbol Attributes: @code{a.out}
f009d0ab
RP
2537@end ifclear
2538@ifset BOUT
ba487f3a 2539* a.out Symbols:: Symbol Attributes: @code{a.out}, @code{b.out}
f009d0ab
RP
2540@end ifset
2541@end ifclear
2542@end ifset
2543@ifset COFF
ba487f3a 2544* COFF Symbols:: Symbol Attributes for COFF
f009d0ab 2545@end ifset
9dcf8057
JL
2546@ifset SOM
2547* SOM Symbols:: Symbol Attributes for SOM
2548@end ifset
7a4c8e5c
RP
2549@end menu
2550
242d9c06 2551@node Symbol Value
93b45514 2552@subsection Value
66b818fb
RP
2553
2554@cindex value of a symbol
2555@cindex symbol value
24b1493d
RP
2556The value of a symbol is (usually) 32 bits. For a symbol which labels a
2557location in the text, data, bss or absolute sections the value is the
2558number of addresses from the start of that section to the label.
2559Naturally for text, data and bss sections the value of a symbol changes
f009d0ab 2560as @code{@value{LD}} changes section base addresses during linking. Absolute
24b1493d
RP
2561symbols' values do not change during linking: that is why they are
2562called absolute.
93b45514 2563
b50e59fe 2564The value of an undefined symbol is treated in a special way. If it is
05a0e43b
RP
25650 then the symbol is not defined in this assembler source file, and
2566@code{@value{LD}} tries to determine its value from other files linked into the
2567same program. You make this kind of symbol simply by mentioning a symbol
b50e59fe
RP
2568name without defining it. A non-zero value represents a @code{.comm}
2569common declaration. The value is how much common storage to reserve, in
2570bytes (addresses). The symbol refers to the first address of the
2571allocated storage.
93b45514 2572
242d9c06 2573@node Symbol Type
93b45514 2574@subsection Type
66b818fb
RP
2575
2576@cindex type of a symbol
2577@cindex symbol type
24b1493d 2578The type attribute of a symbol contains relocation (section)
d0281557
RP
2579information, any flag settings indicating that a symbol is external, and
2580(optionally), other information for linkers and debuggers. The exact
2581format depends on the object-code output format in use.
93b45514 2582
f009d0ab
RP
2583@ifset aout-bout
2584@ifclear GENERIC
2585@ifset BOUT
2586@c The following avoids a "widow" subsection title. @group would be
2587@c better if it were available outside examples.
2588@need 1000
242d9c06 2589@node a.out Symbols
d0281557 2590@subsection Symbol Attributes: @code{a.out}, @code{b.out}
66b818fb
RP
2591
2592@cindex @code{b.out} symbol attributes
2593@cindex symbol attributes, @code{b.out}
f009d0ab
RP
2594These symbol attributes appear only when @code{@value{AS}} is configured for
2595one of the Berkeley-descended object output formats---@code{a.out} or
2596@code{b.out}.
2597
2598@end ifset
2599@ifclear BOUT
2600@node a.out Symbols
2601@subsection Symbol Attributes: @code{a.out}
2602
2603@cindex @code{a.out} symbol attributes
2604@cindex symbol attributes, @code{a.out}
2605
2606@end ifclear
2607@end ifclear
2608@ifset GENERIC
2609@node a.out Symbols
0b5b143a 2610@subsection Symbol Attributes: @code{a.out}
7a4c8e5c 2611
66b818fb
RP
2612@cindex @code{a.out} symbol attributes
2613@cindex symbol attributes, @code{a.out}
2614
f009d0ab 2615@end ifset
7a4c8e5c 2616@menu
ba487f3a
RP
2617* Symbol Desc:: Descriptor
2618* Symbol Other:: Other
7a4c8e5c 2619@end menu
93b45514 2620
242d9c06 2621@node Symbol Desc
d0281557 2622@subsubsection Descriptor
66b818fb
RP
2623
2624@cindex descriptor, of @code{a.out} symbol
93b45514 2625This is an arbitrary 16-bit value. You may establish a symbol's
7a4c8e5c
RP
2626descriptor value by using a @code{.desc} statement
2627(@pxref{Desc,,@code{.desc}}). A descriptor value means nothing to
f009d0ab 2628@code{@value{AS}}.
93b45514 2629
242d9c06 2630@node Symbol Other
d0281557 2631@subsubsection Other
66b818fb
RP
2632
2633@cindex other attribute, of @code{a.out} symbol
f009d0ab
RP
2634This is an arbitrary 8-bit value. It means nothing to @code{@value{AS}}.
2635@end ifset
d0281557 2636
f009d0ab 2637@ifset COFF
242d9c06 2638@node COFF Symbols
d0281557 2639@subsection Symbol Attributes for COFF
66b818fb
RP
2640
2641@cindex COFF symbol attributes
2642@cindex symbol attributes, COFF
2643
d0281557
RP
2644The COFF format supports a multitude of auxiliary symbol attributes;
2645like the primary symbol attributes, they are set between @code{.def} and
f009d0ab 2646@code{.endef} directives.
d0281557
RP
2647
2648@subsubsection Primary Attributes
66b818fb
RP
2649
2650@cindex primary attributes, COFF symbols
d0281557
RP
2651The symbol name is set with @code{.def}; the value and type,
2652respectively, with @code{.val} and @code{.type}.
2653
2654@subsubsection Auxiliary Attributes
66b818fb
RP
2655
2656@cindex auxiliary attributes, COFF symbols
f009d0ab 2657The @code{@value{AS}} directives @code{.dim}, @code{.line}, @code{.scl},
d0281557
RP
2658@code{.size}, and @code{.tag} can generate auxiliary symbol table
2659information for COFF.
f009d0ab 2660@end ifset
93b45514 2661
9dcf8057
JL
2662@ifset SOM
2663@node SOM Symbols
2664@subsection Symbol Attributes for SOM
2665
2666@cindex SOM symbol attributes
2667@cindex symbol attributes, SOM
2668
05a0e43b
RP
2669The SOM format for the HPPA supports a multitude of symbol attributes set with
2670the @code{.EXPORT} and @code{.IMPORT} directives.
9dcf8057
JL
2671
2672The attributes are described in @cite{HP9000 Series 800 Assembly
2673Language Reference Manual} (HP 92432-90001) under the @code{IMPORT} and
2674@code{EXPORT} assembler directive documentation.
2675@end ifset
2676
242d9c06 2677@node Expressions
93b45514 2678@chapter Expressions
66b818fb
RP
2679
2680@cindex expressions
2681@cindex addresses
2682@cindex numeric values
93b45514
RP
2683An @dfn{expression} specifies an address or numeric value.
2684Whitespace may precede and/or follow an expression.
2685
dd565f85
RP
2686The result of an expression must be an absolute number, or else an offset into
2687a particular section. If an expression is not absolute, and there is not
2688enough information when @code{@value{AS}} sees the expression to know its
2689section, a second pass over the source program might be necessary to interpret
2690the expression---but the second pass is currently not implemented.
2691@code{@value{AS}} aborts with an error message in this situation.
2692
7a4c8e5c 2693@menu
ba487f3a
RP
2694* Empty Exprs:: Empty Expressions
2695* Integer Exprs:: Integer Expressions
7a4c8e5c
RP
2696@end menu
2697
242d9c06 2698@node Empty Exprs
93b45514 2699@section Empty Expressions
66b818fb
RP
2700
2701@cindex empty expressions
2702@cindex expressions, empty
47342e8f 2703An empty expression has no value: it is just whitespace or null.
93b45514 2704Wherever an absolute expression is required, you may omit the
05a0e43b 2705expression, and @code{@value{AS}} assumes a value of (absolute) 0. This
93b45514
RP
2706is compatible with other assemblers.
2707
242d9c06 2708@node Integer Exprs
93b45514 2709@section Integer Expressions
66b818fb
RP
2710
2711@cindex integer expressions
2712@cindex expressions, integer
47342e8f
RP
2713An @dfn{integer expression} is one or more @emph{arguments} delimited
2714by @emph{operators}.
2715
7a4c8e5c 2716@menu
ba487f3a
RP
2717* Arguments:: Arguments
2718* Operators:: Operators
2719* Prefix Ops:: Prefix Operators
2720* Infix Ops:: Infix Operators
7a4c8e5c
RP
2721@end menu
2722
242d9c06 2723@node Arguments
47342e8f 2724@subsection Arguments
93b45514 2725
66b818fb
RP
2726@cindex expression arguments
2727@cindex arguments in expressions
2728@cindex operands in expressions
2729@cindex arithmetic operands
47342e8f
RP
2730@dfn{Arguments} are symbols, numbers or subexpressions. In other
2731contexts arguments are sometimes called ``arithmetic operands''. In
2732this manual, to avoid confusing them with the ``instruction operands'' of
2733the machine language, we use the term ``argument'' to refer to parts of
b50e59fe 2734expressions only, reserving the word ``operand'' to refer only to machine
d0281557 2735instruction operands.
93b45514 2736
24b1493d
RP
2737Symbols are evaluated to yield @{@var{section} @var{NNN}@} where
2738@var{section} is one of text, data, bss, absolute,
d0281557 2739or undefined. @var{NNN} is a signed, 2's complement 32 bit
93b45514
RP
2740integer.
2741
2742Numbers are usually integers.
2743
2744A number can be a flonum or bignum. In this case, you are warned
f009d0ab 2745that only the low order 32 bits are used, and @code{@value{AS}} pretends
93b45514
RP
2746these 32 bits are an integer. You may write integer-manipulating
2747instructions that act on exotic constants, compatible with other
2748assemblers.
2749
66b818fb 2750@cindex subexpressions
b50e59fe
RP
2751Subexpressions are a left parenthesis @samp{(} followed by an integer
2752expression, followed by a right parenthesis @samp{)}; or a prefix
47342e8f 2753operator followed by an argument.
93b45514 2754
242d9c06 2755@node Operators
93b45514 2756@subsection Operators
66b818fb
RP
2757
2758@cindex operators, in expressions
2759@cindex arithmetic functions
2760@cindex functions, in expressions
b50e59fe
RP
2761@dfn{Operators} are arithmetic functions, like @code{+} or @code{%}. Prefix
2762operators are followed by an argument. Infix operators appear
47342e8f 2763between their arguments. Operators may be preceded and/or followed by
93b45514
RP
2764whitespace.
2765
242d9c06 2766@node Prefix Ops
66b818fb
RP
2767@subsection Prefix Operator
2768
2769@cindex prefix operators
f009d0ab 2770@code{@value{AS}} has the following @dfn{prefix operators}. They each take
47342e8f 2771one argument, which must be absolute.
d0281557
RP
2772
2773@c the tex/end tex stuff surrounding this small table is meant to make
2774@c it align, on the printed page, with the similar table in the next
2775@c section (which is inside an enumerate).
2776@tex
2777\global\advance\leftskip by \itemindent
2778@end tex
2779
b50e59fe 2780@table @code
93b45514 2781@item -
b50e59fe 2782@dfn{Negation}. Two's complement negation.
93b45514 2783@item ~
b50e59fe 2784@dfn{Complementation}. Bitwise not.
93b45514
RP
2785@end table
2786
d0281557
RP
2787@tex
2788\global\advance\leftskip by -\itemindent
2789@end tex
2790
242d9c06 2791@node Infix Ops
b50e59fe 2792@subsection Infix Operators
47342e8f 2793
66b818fb
RP
2794@cindex infix operators
2795@cindex operators, permitted arguments
b50e59fe
RP
2796@dfn{Infix operators} take two arguments, one on either side. Operators
2797have precedence, but operations with equal precedence are performed left
2798to right. Apart from @code{+} or @code{-}, both arguments must be
2799absolute, and the result is absolute.
47342e8f 2800
93b45514 2801@enumerate
66b818fb
RP
2802@cindex operator precedence
2803@cindex precedence of operators
47342e8f 2804
93b45514 2805@item
47342e8f 2806Highest Precedence
66b818fb 2807
93b45514
RP
2808@table @code
2809@item *
2810@dfn{Multiplication}.
66b818fb 2811
93b45514
RP
2812@item /
2813@dfn{Division}. Truncation is the same as the C operator @samp{/}
66b818fb 2814
93b45514
RP
2815@item %
2816@dfn{Remainder}.
66b818fb 2817
f009d0ab
RP
2818@item <
2819@itemx <<
2820@dfn{Shift Left}. Same as the C operator @samp{<<}.
66b818fb 2821
f009d0ab
RP
2822@item >
2823@itemx >>
2824@dfn{Shift Right}. Same as the C operator @samp{>>}.
93b45514 2825@end table
47342e8f 2826
93b45514 2827@item
47342e8f 2828Intermediate precedence
66b818fb 2829
47342e8f 2830@table @code
93b45514 2831@item |
66b818fb 2832
93b45514 2833@dfn{Bitwise Inclusive Or}.
66b818fb 2834
93b45514
RP
2835@item &
2836@dfn{Bitwise And}.
66b818fb 2837
93b45514
RP
2838@item ^
2839@dfn{Bitwise Exclusive Or}.
66b818fb 2840
93b45514
RP
2841@item !
2842@dfn{Bitwise Or Not}.
2843@end table
47342e8f 2844
93b45514 2845@item
47342e8f 2846Lowest Precedence
66b818fb 2847
47342e8f 2848@table @code
66b818fb
RP
2849@cindex addition, permitted arguments
2850@cindex plus, permitted arguments
2851@cindex arguments for addition
71dd3c40 2852@item +
dd565f85
RP
2853@dfn{Addition}. If either argument is absolute, the result has the section of
2854the other argument. You may not add together arguments from different
2855sections.
66b818fb 2856
66b818fb
RP
2857@cindex subtraction, permitted arguments
2858@cindex minus, permitted arguments
2859@cindex arguments for subtraction
71dd3c40 2860@item -
47342e8f 2861@dfn{Subtraction}. If the right argument is absolute, the
24b1493d 2862result has the section of the left argument.
dd565f85
RP
2863If both arguments are in the same section, the result is absolute.
2864You may not subtract arguments from different sections.
2865@c FIXME is there still something useful to say about undefined - undefined ?
93b45514
RP
2866@end table
2867@end enumerate
2868
dd565f85
RP
2869In short, it's only meaningful to add or subtract the @emph{offsets} in an
2870address; you can only have a defined section in one of the two arguments.
47342e8f 2871
242d9c06 2872@node Pseudo Ops
93b45514 2873@chapter Assembler Directives
d0281557 2874
66b818fb
RP
2875@cindex directives, machine independent
2876@cindex pseudo-ops, machine independent
2877@cindex machine independent directives
d0281557 2878All assembler directives have names that begin with a period (@samp{.}).
66b818fb 2879The rest of the name is letters, usually in lower case.
d0281557 2880
f009d0ab 2881This chapter discusses directives that are available regardless of the
8babef85 2882target machine configuration for the @sc{gnu} assembler.
f009d0ab
RP
2883@ifset GENERIC
2884Some machine configurations provide additional directives.
2885@xref{Machine Dependencies}.
2886@end ifset
2887@ifclear GENERIC
2888@ifset machine-directives
2889@xref{Machine Dependencies} for additional directives.
2890@end ifset
2891@end ifclear
d0281557 2892
7a4c8e5c 2893@menu
ba487f3a 2894* Abort:: @code{.abort}
f009d0ab
RP
2895@ifset COFF
2896* ABORT:: @code{.ABORT}
2897@end ifset
2898
ba487f3a 2899* Align:: @code{.align @var{abs-expr} , @var{abs-expr}}
2d8e0f62 2900* App-File:: @code{.app-file @var{string}}
ba487f3a
RP
2901* Ascii:: @code{.ascii "@var{string}"}@dots{}
2902* Asciz:: @code{.asciz "@var{string}"}@dots{}
931a8fab 2903* Balign:: @code{.balign @var{abs-expr} , @var{abs-expr}}
ba487f3a
RP
2904* Byte:: @code{.byte @var{expressions}}
2905* Comm:: @code{.comm @var{symbol} , @var{length} }
2906* Data:: @code{.data @var{subsection}}
f009d0ab 2907@ifset COFF
ba487f3a 2908* Def:: @code{.def @var{name}}
f009d0ab
RP
2909@end ifset
2910@ifset aout-bout
ba487f3a 2911* Desc:: @code{.desc @var{symbol}, @var{abs-expression}}
f009d0ab
RP
2912@end ifset
2913@ifset COFF
ba487f3a 2914* Dim:: @code{.dim}
f009d0ab
RP
2915@end ifset
2916
ba487f3a
RP
2917* Double:: @code{.double @var{flonums}}
2918* Eject:: @code{.eject}
2919* Else:: @code{.else}
f009d0ab 2920@ifset COFF
ba487f3a 2921* Endef:: @code{.endef}
f009d0ab
RP
2922@end ifset
2923
ba487f3a
RP
2924* Endif:: @code{.endif}
2925* Equ:: @code{.equ @var{symbol}, @var{expression}}
35cfacf0
ILT
2926* Equiv:: @code{.equiv @var{symbol}, @var{expression}}
2927* Err:: @code{.err}
ba487f3a 2928* Extern:: @code{.extern}
f009d0ab 2929@ifclear no-file-dir
ba487f3a 2930* File:: @code{.file @var{string}}
f009d0ab
RP
2931@end ifclear
2932
ba487f3a
RP
2933* Fill:: @code{.fill @var{repeat} , @var{size} , @var{value}}
2934* Float:: @code{.float @var{flonums}}
2935* Global:: @code{.global @var{symbol}}, @code{.globl @var{symbol}}
2936* hword:: @code{.hword @var{expressions}}
2937* Ident:: @code{.ident}
2938* If:: @code{.if @var{absolute expression}}
2939* Include:: @code{.include "@var{file}"}
2940* Int:: @code{.int @var{expressions}}
95074dc3
ILT
2941* Irp:: @code{.irp @var{symbol},@var{values}}@dots{}
2942* Irpc:: @code{.irpc @var{symbol},@var{values}}@dots{}
ba487f3a 2943* Lcomm:: @code{.lcomm @var{symbol} , @var{length}}
66b818fb 2944* Lflags:: @code{.lflags}
f009d0ab 2945@ifclear no-line-dir
ba487f3a 2946* Line:: @code{.line @var{line-number}}
f009d0ab
RP
2947@end ifclear
2948
ba487f3a 2949* Ln:: @code{.ln @var{line-number}}
910d7df2 2950* Linkonce:: @code{.linkonce [@var{type}]}
ba487f3a
RP
2951* List:: @code{.list}
2952* Long:: @code{.long @var{expressions}}
f009d0ab 2953@ignore
ba487f3a 2954* Lsym:: @code{.lsym @var{symbol}, @var{expression}}
f009d0ab
RP
2955@end ignore
2956
95074dc3 2957* Macro:: @code{.macro @var{name} @var{args}}@dots{}
910d7df2 2958* MRI:: @code{.mri @var{val}}
95074dc3 2959
ba487f3a
RP
2960* Nolist:: @code{.nolist}
2961* Octa:: @code{.octa @var{bignums}}
2962* Org:: @code{.org @var{new-lc} , @var{fill}}
931a8fab 2963* P2align:: @code{.p2align @var{abs-expr} , @var{abs-expr}}
66b818fb 2964* Psize:: @code{.psize @var{lines}, @var{columns}}
ba487f3a 2965* Quad:: @code{.quad @var{bignums}}
95074dc3 2966* Rept:: @code{.rept @var{count}}
ba487f3a 2967* Sbttl:: @code{.sbttl "@var{subheading}"}
f009d0ab 2968@ifset COFF
ba487f3a 2969* Scl:: @code{.scl @var{class}}
f009d0ab
RP
2970@end ifset
2971@ifset COFF
66b818fb 2972* Section:: @code{.section @var{name}, @var{subsection}}
f009d0ab
RP
2973@end ifset
2974
ba487f3a
RP
2975* Set:: @code{.set @var{symbol}, @var{expression}}
2976* Short:: @code{.short @var{expressions}}
2977* Single:: @code{.single @var{flonums}}
f009d0ab 2978@ifset COFF
ba487f3a 2979* Size:: @code{.size}
f009d0ab
RP
2980@end ifset
2981
910d7df2 2982* Skip:: @code{.skip @var{size} , @var{fill}}
ba487f3a 2983* Space:: @code{.space @var{size} , @var{fill}}
f009d0ab 2984@ifset have-stabs
ba487f3a 2985* Stab:: @code{.stabd, .stabn, .stabs}
f009d0ab 2986@end ifset
e680d737
RP
2987
2988* String:: @code{.string "@var{str}"}
35cfacf0
ILT
2989@ifset ELF
2990* Symver:: @code{.symver @var{name},@var{name2@@nodename}}
2991@end ifset
f009d0ab 2992@ifset COFF
ba487f3a 2993* Tag:: @code{.tag @var{structname}}
f009d0ab
RP
2994@end ifset
2995
ba487f3a
RP
2996* Text:: @code{.text @var{subsection}}
2997* Title:: @code{.title "@var{heading}"}
f009d0ab 2998@ifset COFF
ba487f3a
RP
2999* Type:: @code{.type @var{int}}
3000* Val:: @code{.val @var{addr}}
f009d0ab
RP
3001@end ifset
3002
ba487f3a
RP
3003* Word:: @code{.word @var{expressions}}
3004* Deprecated:: Deprecated Directives
7a4c8e5c
RP
3005@end menu
3006
242d9c06 3007@node Abort
b50e59fe 3008@section @code{.abort}
66b818fb
RP
3009
3010@cindex @code{abort} directive
3011@cindex stopping the assembly
93b45514
RP
3012This directive stops the assembly immediately. It is for
3013compatibility with other assemblers. The original idea was that the
d0281557 3014assembly language source would be piped into the assembler. If the sender
f009d0ab 3015of the source quit, it could use this directive tells @code{@value{AS}} to
93b45514
RP
3016quit also. One day @code{.abort} will not be supported.
3017
f009d0ab
RP
3018@ifset COFF
3019@node ABORT
d0281557 3020@section @code{.ABORT}
66b818fb
RP
3021
3022@cindex @code{ABORT} directive
f009d0ab 3023When producing COFF output, @code{@value{AS}} accepts this directive as a
d0281557 3024synonym for @samp{.abort}.
66b818fb 3025
f009d0ab
RP
3026@ifset BOUT
3027When producing @code{b.out} output, @code{@value{AS}} accepts this directive,
d0281557 3028but ignores it.
f009d0ab
RP
3029@end ifset
3030@end ifset
d0281557 3031
242d9c06 3032@node Align
c6c7035c 3033@section @code{.align @var{abs-expr}, @var{abs-expr}, @var{abs-expr}}
66b818fb
RP
3034
3035@cindex padding the location counter
66b818fb 3036@cindex @code{align} directive
c6c7035c
MM
3037Pad the location counter (in the current subsection) to a particular storage
3038boundary. The first expression (which must be absolute) is the alignment
3039required, as described below.
3040
3041The second expression (also absolute) gives the fill value to be stored in the
3042padding bytes. It (and the comma) may be omitted. If it is omitted, the
3043padding bytes are normally zero. However, on some systems, if the section is
3044marked as containing code and the fill value is omitted, the space is filled
3045with no-op instructions.
3046
3047The third expression is also absolute, and is also optional. If it is present,
3048it is the maximum number of bytes that should be skipped by this alignment
3049directive. If doing the alignment would require skipping more bytes than the
3050specified maximum, then the alignment is not done at all. You can omit the
3051fill value (the second argument) entirely by simply using two commas after the
3052required alignment; this can be useful if you want the alignment to be filled
3053with no-op instructions when appropriate.
93b45514 3054
931a8fab 3055The way the required alignment is specified varies from system to system.
910d7df2 3056For the a29k, hppa, m68k, m88k, w65, sparc, and Hitachi SH, and i386 using ELF
71dd3c40 3057format,
931a8fab 3058the first expression is the
05a0e43b 3059alignment request in bytes. For example @samp{.align 8} advances
9dcf8057
JL
3060the location counter until it is a multiple of 8. If the location counter
3061is already a multiple of 8, no change is needed.
9dcf8057 3062
931a8fab
KR
3063For other systems, including the i386 using a.out format, it is the
3064number of low-order zero bits the location counter must have after
3065advancement. For example @samp{.align 3} advances the location
3066counter until it a multiple of 8. If the location counter is already a
3067multiple of 8, no change is needed.
3068
3069This inconsistency is due to the different behaviors of the various
3070native assemblers for these systems which GAS must emulate.
3071GAS also provides @code{.balign} and @code{.p2align} directives,
3072described later, which have a consistent behavior across all
3073architectures (but are specific to GAS).
93b45514 3074
2d8e0f62
RP
3075@node App-File
3076@section @code{.app-file @var{string}}
66b818fb
RP
3077
3078@cindex logical file name
3079@cindex file name, logical
2d8e0f62
RP
3080@cindex @code{app-file} directive
3081@code{.app-file}
f009d0ab 3082@ifclear no-file-dir
d0281557 3083(which may also be spelled @samp{.file})
f009d0ab
RP
3084@end ifclear
3085tells @code{@value{AS}} that we are about to start a new
d0281557
RP
3086logical file. @var{string} is the new file name. In general, the
3087filename is recognized whether or not it is surrounded by quotes @samp{"};
b50e59fe
RP
3088but if you wish to specify an empty file name is permitted,
3089you must give the quotes--@code{""}. This statement may go away in
f009d0ab 3090future: it is only recognized to be compatible with old @code{@value{AS}}
d0281557 3091programs.@refill
b50e59fe 3092
242d9c06 3093@node Ascii
b50e59fe 3094@section @code{.ascii "@var{string}"}@dots{}
66b818fb
RP
3095
3096@cindex @code{ascii} directive
3097@cindex string literals
47342e8f 3098@code{.ascii} expects zero or more string literals (@pxref{Strings})
93b45514
RP
3099separated by commas. It assembles each string (with no automatic
3100trailing zero byte) into consecutive addresses.
3101
242d9c06 3102@node Asciz
b50e59fe 3103@section @code{.asciz "@var{string}"}@dots{}
66b818fb
RP
3104
3105@cindex @code{asciz} directive
3106@cindex zero-terminated strings
3107@cindex null-terminated strings
b50e59fe
RP
3108@code{.asciz} is just like @code{.ascii}, but each string is followed by
3109a zero byte. The ``z'' in @samp{.asciz} stands for ``zero''.
93b45514 3110
931a8fab 3111@node Balign
c6c7035c 3112@section @code{.balign[wl] @var{abs-expr}, @var{abs-expr}, @var{abs-expr}}
931a8fab
KR
3113
3114@cindex padding the location counter given number of bytes
3115@cindex @code{balign} directive
3116Pad the location counter (in the current subsection) to a particular
3117storage boundary. The first expression (which must be absolute) is the
3118alignment request in bytes. For example @samp{.balign 8} advances
3119the location counter until it is a multiple of 8. If the location counter
3120is already a multiple of 8, no change is needed.
3121
c6c7035c
MM
3122The second expression (also absolute) gives the fill value to be stored in the
3123padding bytes. It (and the comma) may be omitted. If it is omitted, the
3124padding bytes are normally zero. However, on some systems, if the section is
3125marked as containing code and the fill value is omitted, the space is filled
3126with no-op instructions.
3127
3128The third expression is also absolute, and is also optional. If it is present,
3129it is the maximum number of bytes that should be skipped by this alignment
3130directive. If doing the alignment would require skipping more bytes than the
3131specified maximum, then the alignment is not done at all. You can omit the
3132fill value (the second argument) entirely by simply using two commas after the
3133required alignment; this can be useful if you want the alignment to be filled
3134with no-op instructions when appropriate.
931a8fab 3135
71dd3c40
ILT
3136@cindex @code{balignw} directive
3137@cindex @code{balignl} directive
3138The @code{.balignw} and @code{.balignl} directives are variants of the
3139@code{.balign} directive. The @code{.balignw} directive treats the fill
3140pattern as a two byte word value. The @code{.balignl} directives treats the
3141fill pattern as a four byte longword value. For example, @code{.balignw
31424,0x368d} will align to a multiple of 4. If it skips two bytes, they will be
3143filled in with the value 0x368d (the exact placement of the bytes depends upon
3144the endianness of the processor). If it skips 1 or 3 bytes, the fill value is
3145undefined.
3146
242d9c06 3147@node Byte
b50e59fe 3148@section @code{.byte @var{expressions}}
93b45514 3149
66b818fb
RP
3150@cindex @code{byte} directive
3151@cindex integers, one byte
47342e8f 3152@code{.byte} expects zero or more expressions, separated by commas.
93b45514
RP
3153Each expression is assembled into the next byte.
3154
242d9c06 3155@node Comm
b50e59fe 3156@section @code{.comm @var{symbol} , @var{length} }
66b818fb
RP
3157
3158@cindex @code{comm} directive
3159@cindex symbol, common
35cfacf0
ILT
3160@code{.comm} declares a common symbol named @var{symbol}. When linking, a
3161common symbol in one object file may be merged with a defined or common symbol
3162of the same name in another object file. If @code{@value{LD}} does not see a
3163definition for the symbol--just one or more common symbols--then it will
3164allocate @var{length} bytes of uninitialized memory. @var{length} must be an
3165absolute expression. If @code{@value{LD}} sees multiple common symbols with
3166the same name, and they do not all have the same size, it will allocate space
3167using the largest size.
3168
3169@ifset ELF
3170When using ELF, the @code{.comm} directive takes an optional third argument.
3171This is the desired alignment of the symbol, specified as a byte boundary (for
3172example, an alignment of 16 means that the least significant 4 bits of the
3173address should be zero). The alignment must be an absolute expression, and it
3174must be a power of two. If @code{@value{LD}} allocates uninitialized memory
3175for the common symbol, it will use the alignment when placing the symbol. If
3176no alignment is specified, @code{@value{AS}} will set the alignment to the
3177largest power of two less than or equal to the size of the symbol, up to a
3178maximum of 16.
3179@end ifset
47342e8f 3180
9dcf8057
JL
3181@ifset HPPA
3182The syntax for @code{.comm} differs slightly on the HPPA. The syntax is
509d5555 3183@samp{@var{symbol} .comm, @var{length}}; @var{symbol} is optional.
9dcf8057
JL
3184@end ifset
3185
242d9c06 3186@node Data
24b1493d 3187@section @code{.data @var{subsection}}
66b818fb
RP
3188
3189@cindex @code{data} directive
f009d0ab 3190@code{.data} tells @code{@value{AS}} to assemble the following statements onto the
24b1493d
RP
3191end of the data subsection numbered @var{subsection} (which is an
3192absolute expression). If @var{subsection} is omitted, it defaults
93b45514
RP
3193to zero.
3194
f009d0ab 3195@ifset COFF
242d9c06 3196@node Def
d0281557 3197@section @code{.def @var{name}}
66b818fb
RP
3198
3199@cindex @code{def} directive
3200@cindex COFF symbols, debugging
3201@cindex debugging COFF symbols
d0281557
RP
3202Begin defining debugging information for a symbol @var{name}; the
3203definition extends until the @code{.endef} directive is encountered.
f009d0ab 3204@ifset BOUT
d0281557 3205
f009d0ab 3206This directive is only observed when @code{@value{AS}} is configured for COFF
d0281557
RP
3207format output; when producing @code{b.out}, @samp{.def} is recognized,
3208but ignored.
f009d0ab
RP
3209@end ifset
3210@end ifset
d0281557 3211
f009d0ab 3212@ifset aout-bout
242d9c06 3213@node Desc
f4335d56 3214@section @code{.desc @var{symbol}, @var{abs-expression}}
66b818fb
RP
3215
3216@cindex @code{desc} directive
3217@cindex COFF symbol descriptor
3218@cindex symbol descriptor, COFF
b50e59fe 3219This directive sets the descriptor of the symbol (@pxref{Symbol Attributes})
f4335d56 3220to the low 16 bits of an absolute expression.
93b45514 3221
f009d0ab
RP
3222@ifset COFF
3223The @samp{.desc} directive is not available when @code{@value{AS}} is
d0281557 3224configured for COFF output; it is only for @code{a.out} or @code{b.out}
05a0e43b
RP
3225object format. For the sake of compatibility, @code{@value{AS}} accepts
3226it, but produces no output, when configured for COFF.
f009d0ab
RP
3227@end ifset
3228@end ifset
d0281557 3229
f009d0ab 3230@ifset COFF
242d9c06 3231@node Dim
d0281557 3232@section @code{.dim}
66b818fb
RP
3233
3234@cindex @code{dim} directive
3235@cindex COFF auxiliary symbol information
3236@cindex auxiliary symbol information, COFF
d0281557
RP
3237This directive is generated by compilers to include auxiliary debugging
3238information in the symbol table. It is only permitted inside
3239@code{.def}/@code{.endef} pairs.
f009d0ab 3240@ifset BOUT
d0281557
RP
3241
3242@samp{.dim} is only meaningful when generating COFF format output; when
f009d0ab 3243@code{@value{AS}} is generating @code{b.out}, it accepts this directive but
d0281557 3244ignores it.
f009d0ab
RP
3245@end ifset
3246@end ifset
d0281557 3247
242d9c06 3248@node Double
b50e59fe 3249@section @code{.double @var{flonums}}
66b818fb
RP
3250
3251@cindex @code{double} directive
3252@cindex floating point numbers (double)
d0281557
RP
3253@code{.double} expects zero or more flonums, separated by commas. It
3254assembles floating point numbers.
f009d0ab 3255@ifset GENERIC
09352a5d 3256The exact kind of floating point numbers emitted depends on how
f009d0ab
RP
3257@code{@value{AS}} is configured. @xref{Machine Dependencies}.
3258@end ifset
3259@ifclear GENERIC
3260@ifset IEEEFLOAT
3261On the @value{TARGET} family @samp{.double} emits 64-bit floating-point numbers
66b818fb 3262in @sc{ieee} format.
f009d0ab
RP
3263@end ifset
3264@end ifclear
b50e59fe 3265
242d9c06 3266@node Eject
66b818fb
RP
3267@section @code{.eject}
3268
3269@cindex @code{eject} directive
3270@cindex new page, in listings
3271@cindex page, in listings
3272@cindex listing control: new page
3273Force a page break at this point, when generating assembly listings.
3274
242d9c06 3275@node Else
b50e59fe 3276@section @code{.else}
66b818fb
RP
3277
3278@cindex @code{else} directive
f009d0ab 3279@code{.else} is part of the @code{@value{AS}} support for conditional
7a4c8e5c
RP
3280assembly; @pxref{If,,@code{.if}}. It marks the beginning of a section
3281of code to be assembled if the condition for the preceding @code{.if}
3282was false.
b50e59fe 3283
f009d0ab 3284@ignore
7a4c8e5c 3285@node End, Endef, Else, Pseudo Ops
b50e59fe 3286@section @code{.end}
66b818fb
RP
3287
3288@cindex @code{end} directive
b50e59fe
RP
3289This doesn't do anything---but isn't an s_ignore, so I suspect it's
3290meant to do something eventually (which is why it isn't documented here
3291as "for compatibility with blah").
f009d0ab 3292@end ignore
d0281557 3293
f009d0ab 3294@ifset COFF
242d9c06 3295@node Endef
d0281557 3296@section @code{.endef}
66b818fb
RP
3297
3298@cindex @code{endef} directive
d0281557 3299This directive flags the end of a symbol definition begun with
f009d0ab
RP
3300@code{.def}.
3301@ifset BOUT
d0281557
RP
3302
3303@samp{.endef} is only meaningful when generating COFF format output; if
f009d0ab 3304@code{@value{AS}} is configured to generate @code{b.out}, it accepts this
d0281557 3305directive but ignores it.
f009d0ab
RP
3306@end ifset
3307@end ifset
7a4c8e5c 3308
242d9c06 3309@node Endif
b50e59fe 3310@section @code{.endif}
66b818fb
RP
3311
3312@cindex @code{endif} directive
f009d0ab 3313@code{.endif} is part of the @code{@value{AS}} support for conditional assembly;
b50e59fe 3314it marks the end of a block of code that is only assembled
7a4c8e5c 3315conditionally. @xref{If,,@code{.if}}.
b50e59fe 3316
242d9c06 3317@node Equ
b50e59fe
RP
3318@section @code{.equ @var{symbol}, @var{expression}}
3319
66b818fb
RP
3320@cindex @code{equ} directive
3321@cindex assigning values to symbols
3322@cindex symbols, assigning values to
d0281557 3323This directive sets the value of @var{symbol} to @var{expression}.
7a4c8e5c
RP
3324It is synonymous with @samp{.set}; @pxref{Set,,@code{.set}}.
3325
9dcf8057
JL
3326@ifset HPPA
3327The syntax for @code{equ} on the HPPA is
509d5555 3328@samp{@var{symbol} .equ @var{expression}}.
9dcf8057
JL
3329@end ifset
3330
35cfacf0
ILT
3331@node Equiv
3332@section @code{.equiv @var{symbol}, @var{expression}}
3333@cindex @code{equiv} directive
3334The @code{.equiv} directive is like @code{.equ} and @code{.set}, except that
3335the assembler will signal an error if @var{symbol} is already defined.
3336
3337Except for the contents of the error message, this is roughly equivalent to
3338@smallexample
3339.ifdef SYM
3340.err
3341.endif
3342.equ SYM,VAL
3343@end smallexample
3344
3345@node Err
3346@section @code{.err}
3347@cindex @code{err} directive
3348If @code{@value{AS}} assembles a @code{.err} directive, it will print an error
3349message and, unless the @code{-Z} option was used, it will not generate an
3350object file. This can be used to signal error an conditionally compiled code.
3351
242d9c06 3352@node Extern
b50e59fe 3353@section @code{.extern}
66b818fb
RP
3354
3355@cindex @code{extern} directive
b50e59fe 3356@code{.extern} is accepted in the source program---for compatibility
f009d0ab 3357with other assemblers---but it is ignored. @code{@value{AS}} treats
b50e59fe
RP
3358all undefined symbols as external.
3359
f009d0ab 3360@ifclear no-file-dir
242d9c06 3361@node File
66b818fb
RP
3362@section @code{.file @var{string}}
3363
3364@cindex @code{file} directive
3365@cindex logical file name
3366@cindex file name, logical
2d8e0f62 3367@code{.file} (which may also be spelled @samp{.app-file}) tells
f009d0ab 3368@code{@value{AS}} that we are about to start a new logical file.
d0281557
RP
3369@var{string} is the new file name. In general, the filename is
3370recognized whether or not it is surrounded by quotes @samp{"}; but if
3371you wish to specify an empty file name, you must give the
3372quotes--@code{""}. This statement may go away in future: it is only
f009d0ab
RP
3373recognized to be compatible with old @code{@value{AS}} programs.
3374@ifset A29K
3375In some configurations of @code{@value{AS}}, @code{.file} has already been
3376removed to avoid conflicts with other assemblers. @xref{Machine Dependencies}.
3377@end ifset
3378@end ifclear
7a4c8e5c 3379
242d9c06 3380@node Fill
b50e59fe 3381@section @code{.fill @var{repeat} , @var{size} , @var{value}}
66b818fb
RP
3382
3383@cindex @code{fill} directive
3384@cindex writing patterns in memory
3385@cindex patterns, writing in memory
93b45514
RP
3386@var{result}, @var{size} and @var{value} are absolute expressions.
3387This emits @var{repeat} copies of @var{size} bytes. @var{Repeat}
3388may be zero or more. @var{Size} may be zero or more, but if it is
3389more than 8, then it is deemed to have the value 8, compatible with
3390other people's assemblers. The contents of each @var{repeat} bytes
3391is taken from an 8-byte number. The highest order 4 bytes are
3392zero. The lowest order 4 bytes are @var{value} rendered in the
f009d0ab 3393byte-order of an integer on the computer @code{@value{AS}} is assembling for.
93b45514
RP
3394Each @var{size} bytes in a repetition is taken from the lowest order
3395@var{size} bytes of this number. Again, this bizarre behavior is
3396compatible with other people's assemblers.
3397
d0281557 3398@var{size} and @var{value} are optional.
93b45514
RP
3399If the second comma and @var{value} are absent, @var{value} is
3400assumed zero. If the first comma and following tokens are absent,
3401@var{size} is assumed to be 1.
3402
242d9c06 3403@node Float
b50e59fe 3404@section @code{.float @var{flonums}}
66b818fb
RP
3405
3406@cindex floating point numbers (single)
3407@cindex @code{float} directive
b50e59fe 3408This directive assembles zero or more flonums, separated by commas. It
d0281557 3409has the same effect as @code{.single}.
f009d0ab 3410@ifset GENERIC
09352a5d 3411The exact kind of floating point numbers emitted depends on how
f009d0ab
RP
3412@code{@value{AS}} is configured.
3413@xref{Machine Dependencies}.
3414@end ifset
3415@ifclear GENERIC
3416@ifset IEEEFLOAT
3417On the @value{TARGET} family, @code{.float} emits 32-bit floating point numbers
66b818fb 3418in @sc{ieee} format.
f009d0ab
RP
3419@end ifset
3420@end ifclear
93b45514 3421
242d9c06 3422@node Global
b50e59fe 3423@section @code{.global @var{symbol}}, @code{.globl @var{symbol}}
66b818fb
RP
3424
3425@cindex @code{global} directive
3426@cindex symbol, making visible to linker
f009d0ab 3427@code{.global} makes the symbol visible to @code{@value{LD}}. If you define
93b45514
RP
3428@var{symbol} in your partial program, its value is made available to
3429other partial programs that are linked with it. Otherwise,
05a0e43b
RP
3430@var{symbol} takes its attributes from a symbol of the same name
3431from another file linked into the same program.
93b45514 3432
b50e59fe
RP
3433Both spellings (@samp{.globl} and @samp{.global}) are accepted, for
3434compatibility with other assemblers.
3435
9dcf8057 3436@ifset HPPA
e680d737
RP
3437On the HPPA, @code{.global} is not always enough to make it accessible to other
3438partial programs. You may need the HPPA-only @code{.EXPORT} directive as well.
3439@xref{HPPA Directives,, HPPA Assembler Directives}.
9dcf8057
JL
3440@end ifset
3441
242d9c06 3442@node hword
d0281557 3443@section @code{.hword @var{expressions}}
66b818fb
RP
3444
3445@cindex @code{hword} directive
3446@cindex integers, 16-bit
3447@cindex numbers, 16-bit
3448@cindex sixteen bit integers
d0281557
RP
3449This expects zero or more @var{expressions}, and emits
3450a 16 bit number for each.
3451
f009d0ab 3452@ifset GENERIC
d0281557
RP
3453This directive is a synonym for @samp{.short}; depending on the target
3454architecture, it may also be a synonym for @samp{.word}.
f009d0ab
RP
3455@end ifset
3456@ifclear GENERIC
3457@ifset W32
d0281557 3458This directive is a synonym for @samp{.short}.
f009d0ab
RP
3459@end ifset
3460@ifset W16
24b1493d 3461This directive is a synonym for both @samp{.short} and @samp{.word}.
f009d0ab
RP
3462@end ifset
3463@end ifclear
d0281557 3464
242d9c06 3465@node Ident
b50e59fe 3466@section @code{.ident}
66b818fb
RP
3467
3468@cindex @code{ident} directive
b50e59fe 3469This directive is used by some assemblers to place tags in object files.
f009d0ab 3470@code{@value{AS}} simply accepts the directive for source-file
b50e59fe
RP
3471compatibility with such assemblers, but does not actually emit anything
3472for it.
3473
242d9c06 3474@node If
b50e59fe 3475@section @code{.if @var{absolute expression}}
66b818fb
RP
3476
3477@cindex conditional assembly
3478@cindex @code{if} directive
b50e59fe
RP
3479@code{.if} marks the beginning of a section of code which is only
3480considered part of the source program being assembled if the argument
3481(which must be an @var{absolute expression}) is non-zero. The end of
3482the conditional section of code must be marked by @code{.endif}
7a4c8e5c 3483(@pxref{Endif,,@code{.endif}}); optionally, you may include code for the
910d7df2 3484alternative condition, flagged by @code{.else} (@pxref{Else,,@code{.else}}).
b50e59fe
RP
3485
3486The following variants of @code{.if} are also supported:
3487@table @code
66b818fb 3488@cindex @code{ifdef} directive
71dd3c40 3489@item .ifdef @var{symbol}
b50e59fe
RP
3490Assembles the following section of code if the specified @var{symbol}
3491has been defined.
3492
f009d0ab 3493@ignore
66b818fb 3494@cindex @code{ifeqs} directive
71dd3c40 3495@item .ifeqs
d0281557 3496Not yet implemented.
f009d0ab 3497@end ignore
b50e59fe 3498
66b818fb
RP
3499@cindex @code{ifndef} directive
3500@cindex @code{ifnotdef} directive
71dd3c40 3501@item .ifndef @var{symbol}
910d7df2 3502@itemx .ifnotdef @var{symbol}
b50e59fe
RP
3503Assembles the following section of code if the specified @var{symbol}
3504has not been defined. Both spelling variants are equivalent.
93b45514 3505
f009d0ab 3506@ignore
b50e59fe 3507@item ifnes
d0281557 3508Not yet implemented.
f009d0ab 3509@end ignore
b50e59fe
RP
3510@end table
3511
242d9c06 3512@node Include
b50e59fe 3513@section @code{.include "@var{file}"}
66b818fb
RP
3514
3515@cindex @code{include} directive
3516@cindex supporting files, including
3517@cindex files, including
b50e59fe
RP
3518This directive provides a way to include supporting files at specified
3519points in your source program. The code from @var{file} is assembled as
3520if it followed the point of the @code{.include}; when the end of the
3521included file is reached, assembly of the original file continues. You
3522can control the search paths used with the @samp{-I} command-line option
7a4c8e5c
RP
3523(@pxref{Invoking,,Command-Line Options}). Quotation marks are required
3524around @var{file}.
b50e59fe 3525
242d9c06 3526@node Int
b50e59fe 3527@section @code{.int @var{expressions}}
66b818fb
RP
3528
3529@cindex @code{int} directive
f009d0ab 3530@cindex integers, 32-bit
05a0e43b
RP
3531Expect zero or more @var{expressions}, of any section, separated by commas.
3532For each expression, emit a number that, at run time, is the value of that
3533expression. The byte order and bit size of the number depends on what kind
3534of target the assembly is for.
f009d0ab
RP
3535
3536@ifclear GENERIC
3537@ifset H8
8d8ddccb
RP
3538On the H8/500 and most forms of the H8/300, @code{.int} emits 16-bit
3539integers. On the H8/300H and the Hitachi SH, however, @code{.int} emits
354032-bit integers.
f009d0ab
RP
3541@end ifset
3542@end ifclear
93b45514 3543
95074dc3
ILT
3544@node Irp
3545@section @code{.irp @var{symbol},@var{values}}@dots{}
3546
3547@cindex @code{irp} directive
3548Evaluate a sequence of statements assigning different values to @var{symbol}.
3549The sequence of statements starts at the @code{.irp} directive, and is
3550terminated by an @code{.endr} directive. For each @var{value}, @var{symbol} is
3551set to @var{value}, and the sequence of statements is assembled. If no
3552@var{value} is listed, the sequence of statements is assembled once, with
3553@var{symbol} set to the null string. To refer to @var{symbol} within the
3554sequence of statements, use @var{\symbol}.
3555
3556For example, assembling
3557
3558@example
3559 .irp param,1,2,3
3560 move d\param,sp@@-
3561 .endr
3562@end example
3563
3564is equivalent to assembling
3565
3566@example
3567 move d1,sp@@-
3568 move d2,sp@@-
3569 move d3,sp@@-
3570@end example
3571
3572@node Irpc
3573@section @code{.irpc @var{symbol},@var{values}}@dots{}
3574
3575@cindex @code{irpc} directive
3576Evaluate a sequence of statements assigning different values to @var{symbol}.
3577The sequence of statements starts at the @code{.irpc} directive, and is
3578terminated by an @code{.endr} directive. For each character in @var{value},
3579@var{symbol} is set to the character, and the sequence of statements is
3580assembled. If no @var{value} is listed, the sequence of statements is
3581assembled once, with @var{symbol} set to the null string. To refer to
3582@var{symbol} within the sequence of statements, use @var{\symbol}.
3583
3584For example, assembling
3585
3586@example
3587 .irpc param,123
3588 move d\param,sp@@-
3589 .endr
3590@end example
3591
3592is equivalent to assembling
3593
3594@example
3595 move d1,sp@@-
3596 move d2,sp@@-
3597 move d3,sp@@-
3598@end example
3599
242d9c06 3600@node Lcomm
b50e59fe 3601@section @code{.lcomm @var{symbol} , @var{length}}
66b818fb
RP
3602
3603@cindex @code{lcomm} directive
3604@cindex local common symbols
3605@cindex symbols, local common
7a4c8e5c 3606Reserve @var{length} (an absolute expression) bytes for a local common
24b1493d 3607denoted by @var{symbol}. The section and value of @var{symbol} are
7a4c8e5c 3608those of the new local common. The addresses are allocated in the bss
05a0e43b 3609section, so that at run-time the bytes start off zeroed. @var{Symbol}
7a4c8e5c 3610is not declared global (@pxref{Global,,@code{.global}}), so is normally
f009d0ab 3611not visible to @code{@value{LD}}.
93b45514 3612
35cfacf0
ILT
3613@ifset GENERIC
3614Some targets permit a third argument to be used with @code{.lcomm}. This
3615argument specifies the desired alignment of the symbol in the bss section.
3616@end ifset
3617
9dcf8057
JL
3618@ifset HPPA
3619The syntax for @code{.lcomm} differs slightly on the HPPA. The syntax is
509d5555 3620@samp{@var{symbol} .lcomm, @var{length}}; @var{symbol} is optional.
9dcf8057
JL
3621@end ifset
3622
242d9c06 3623@node Lflags
66b818fb
RP
3624@section @code{.lflags}
3625
3626@cindex @code{lflags} directive (ignored)
f009d0ab 3627@code{@value{AS}} accepts this directive, for compatibility with other
66b818fb
RP
3628assemblers, but ignores it.
3629
f009d0ab 3630@ifclear no-line-dir
242d9c06 3631@node Line
d0281557 3632@section @code{.line @var{line-number}}
66b818fb
RP
3633
3634@cindex @code{line} directive
f009d0ab
RP
3635@end ifclear
3636@ifset no-line-dir
242d9c06 3637@node Ln
b50e59fe 3638@section @code{.ln @var{line-number}}
66b818fb
RP
3639
3640@cindex @code{ln} directive
f009d0ab 3641@end ifset
66b818fb 3642@cindex logical line number
f009d0ab 3643@ifset aout-bout
05a0e43b
RP
3644Change the logical line number. @var{line-number} must be an absolute
3645expression. The next line has that logical line number. Therefore any other
3646statements on the current line (after a statement separator character) are
3647reported as on logical line number @var{line-number} @minus{} 1. One day
3648@code{@value{AS}} will no longer support this directive: it is recognized only
f009d0ab 3649for compatibility with existing assembler programs.
7a4c8e5c 3650
f009d0ab
RP
3651@ifset GENERIC
3652@ifset A29K
3653@emph{Warning:} In the AMD29K configuration of @value{AS}, this command is
65fbb2d7 3654not available; use the synonym @code{.ln} in that context.
f009d0ab
RP
3655@end ifset
3656@end ifset
3657@end ifset
d0281557 3658
f009d0ab 3659@ifclear no-line-dir
d0281557 3660Even though this is a directive associated with the @code{a.out} or
05a0e43b
RP
3661@code{b.out} object-code formats, @code{@value{AS}} still recognizes it
3662when producing COFF output, and treats @samp{.line} as though it
d0281557 3663were the COFF @samp{.ln} @emph{if} it is found outside a
f009d0ab 3664@code{.def}/@code{.endef} pair.
d0281557
RP
3665
3666Inside a @code{.def}, @samp{.line} is, instead, one of the directives
3667used by compilers to generate auxiliary symbol information for
3668debugging.
f009d0ab 3669@end ifclear
d0281557 3670
910d7df2
C
3671@node Linkonce
3672@section @code{.linkonce [@var{type}]}
3673@cindex COMDAT
3674@cindex @code{linkonce} directive
3675@cindex common sections
3676Mark the current section so that the linker only includes a single copy of it.
3677This may be used to include the same section in several different object files,
3678but ensure that the linker will only include it once in the final output file.
3679The @code{.linkonce} pseudo-op must be used for each instance of the section.
3680Duplicate sections are detected based on the section name, so it should be
3681unique.
3682
3683This directive is only supported by a few object file formats; as of this
3684writing, the only object file format which supports it is the Portable
3685Executable format used on Windows NT.
3686
3687The @var{type} argument is optional. If specified, it must be one of the
3688following strings. For example:
3689@smallexample
3690.linkonce same_size
3691@end smallexample
3692Not all types may be supported on all object file formats.
3693
3694@table @code
3695@item discard
3696Silently discard duplicate sections. This is the default.
3697
3698@item one_only
3699Warn if there are duplicate sections, but still keep only one copy.
3700
3701@item same_size
3702Warn if any of the duplicates have different sizes.
3703
3704@item same_contents
3705Warn if any of the duplicates do not have exactly the same contents.
3706@end table
3707
242d9c06 3708@node Ln
d0281557 3709@section @code{.ln @var{line-number}}
66b818fb
RP
3710
3711@cindex @code{ln} directive
f009d0ab 3712@ifclear no-line-dir
d0281557 3713@samp{.ln} is a synonym for @samp{.line}.
f009d0ab
RP
3714@end ifclear
3715@ifset no-line-dir
3716Tell @code{@value{AS}} to change the logical line number. @var{line-number}
05a0e43b 3717must be an absolute expression. The next line has that logical
7a4c8e5c 3718line number, so any other statements on the current line (after a
05a0e43b 3719statement separator character @code{;}) are reported as on logical
d0281557 3720line number @var{line-number} @minus{} 1.
f009d0ab 3721@ifset BOUT
d0281557 3722
f009d0ab
RP
3723This directive is accepted, but ignored, when @code{@value{AS}} is
3724configured for @code{b.out}; its effect is only associated with COFF
3725output format.
3726@end ifset
3727@end ifset
d0281557 3728
910d7df2
C
3729@node MRI
3730@section @code{.mri @var{val}}
3731
3732@cindex @code{mri} directive
3733@cindex MRI mode, temporarily
3734If @var{val} is non-zero, this tells @code{@value{AS}} to enter MRI mode. If
3735@var{val} is zero, this tells @code{@value{AS}} to exit MRI mode. This change
3736affects code assembled until the next @code{.mri} directive, or until the end
3737of the file. @xref{M, MRI mode, MRI mode}.
3738
242d9c06 3739@node List
66b818fb
RP
3740@section @code{.list}
3741
3742@cindex @code{list} directive
3743@cindex listing control, turning on
3744Control (in conjunction with the @code{.nolist} directive) whether or
3745not assembly listings are generated. These two directives maintain an
3746internal counter (which is zero initially). @code{.list} increments the
3747counter, and @code{.nolist} decrements it. Assembly listings are
3748generated whenever the counter is greater than zero.
3749
3750By default, listings are disabled. When you enable them (with the
3751@samp{-a} command line option; @pxref{Invoking,,Command-Line Options}),
3752the initial value of the listing counter is one.
b50e59fe 3753
242d9c06 3754@node Long
b50e59fe 3755@section @code{.long @var{expressions}}
66b818fb
RP
3756
3757@cindex @code{long} directive
7a4c8e5c 3758@code{.long} is the same as @samp{.int}, @pxref{Int,,@code{.int}}.
93b45514 3759
242d9c06
SC
3760@ignore
3761@c no one seems to know what this is for or whether this description is
3762@c what it really ought to do
3763@node Lsym
b50e59fe 3764@section @code{.lsym @var{symbol}, @var{expression}}
66b818fb
RP
3765
3766@cindex @code{lsym} directive
3767@cindex symbol, not referenced in assembly
47342e8f 3768@code{.lsym} creates a new symbol named @var{symbol}, but does not put it in
93b45514
RP
3769the hash table, ensuring it cannot be referenced by name during the
3770rest of the assembly. This sets the attributes of the symbol to be
47342e8f 3771the same as the expression value:
d0281557 3772@smallexample
b50e59fe 3773@var{other} = @var{descriptor} = 0
24b1493d 3774@var{type} = @r{(section of @var{expression})}
b50e59fe 3775@var{value} = @var{expression}
d0281557
RP
3776@end smallexample
3777@noindent
3778The new symbol is not flagged as external.
242d9c06 3779@end ignore
93b45514 3780
95074dc3
ILT
3781@node Macro
3782@section @code{.macro}
3783
3784@cindex macros
3785The commands @code{.macro} and @code{.endm} allow you to define macros that
3786generate assembly output. For example, this definition specifies a macro
3787@code{sum} that puts a sequence of numbers into memory:
3788
3789@example
3790 .macro sum from=0, to=5
3791 .long \from
3792 .if \to-\from
3793 sum "(\from+1)",\to
3794 .endif
3795 .endm
3796@end example
3797
3798@noindent
3799With that definition, @samp{SUM 0,5} is equivalent to this assembly input:
3800
3801@example
3802 .long 0
3803 .long 1
3804 .long 2
3805 .long 3
3806 .long 4
3807 .long 5
3808@end example
3809
3810@ftable @code
3811@item .macro @var{macname}
3812@itemx .macro @var{macname} @var{macargs} @dots{}
3813@cindex @code{macro} directive
3814Begin the definition of a macro called @var{macname}. If your macro
3815definition requires arguments, specify their names after the macro name,
3816separated by commas or spaces. You can supply a default value for any
3817macro argument by following the name with @samp{=@var{deflt}}. For
3818example, these are all valid @code{.macro} statements:
3819
3820@table @code
3821@item .macro comm
3822Begin the definition of a macro called @code{comm}, which takes no
3823arguments.
3824
3825@item .macro plus1 p, p1
3826@itemx .macro plus1 p p1
3827Either statement begins the definition of a macro called @code{plus1},
3828which takes two arguments; within the macro definition, write
3829@samp{\p} or @samp{\p1} to evaluate the arguments.
3830
3831@item .macro reserve_str p1=0 p2
3832Begin the definition of a macro called @code{reserve_str}, with two
3833arguments. The first argument has a default value, but not the second.
3834After the definition is complete, you can call the macro either as
3835@samp{reserve_str @var{a},@var{b}} (with @samp{\p1} evaluating to
3836@var{a} and @samp{\p2} evaluating to @var{b}), or as @samp{reserve_str
3837,@var{b}} (with @samp{\p1} evaluating as the default, in this case
3838@samp{0}, and @samp{\p2} evaluating to @var{b}).
3839@end table
3840
3841When you call a macro, you can specify the argument values either by
3842position, or by keyword. For example, @samp{sum 9,17} is equivalent to
3843@samp{sum to=17, from=9}.
3844
3845@item .endm
3846@cindex @code{endm} directive
3847Mark the end of a macro definition.
3848
3849@item .exitm
3850@cindex @code{exitm} directive
3851Exit early from the current macro definition.
3852
3853@cindex number of macros executed
3854@cindex macros, count executed
3855@item \@@
3856@code{@value{AS}} maintains a counter of how many macros it has
3857executed in this pseudo-variable; you can copy that number to your
3858output with @samp{\@@}, but @emph{only within a macro definition}.
3859
3860@ignore
3861@item LOCAL @var{name} [ , @dots{} ]
3862@emph{Warning: @code{LOCAL} is only available if you select ``alternate
3863macro syntax'' with @samp{-a} or @samp{--alternate}.} @xref{Alternate,,
3864Alternate macro syntax}.
3865
3866Generate a string replacement for each of the @var{name} arguments, and
3867replace any instances of @var{name} in each macro expansion. The
3868replacement string is unique in the assembly, and different for each
3869separate macro expansion. @code{LOCAL} allows you to write macros that
3870define symbols, without fear of conflict between separate macro expansions.
3871@end ignore
3872@end ftable
3873
242d9c06 3874@node Nolist
66b818fb
RP
3875@section @code{.nolist}
3876
3877@cindex @code{nolist} directive
3878@cindex listing control, turning off
3879Control (in conjunction with the @code{.list} directive) whether or
3880not assembly listings are generated. These two directives maintain an
3881internal counter (which is zero initially). @code{.list} increments the
3882counter, and @code{.nolist} decrements it. Assembly listings are
3883generated whenever the counter is greater than zero.
3884
242d9c06 3885@node Octa
b50e59fe 3886@section @code{.octa @var{bignums}}
66b818fb
RP
3887
3888@c FIXME: double size emitted for "octa" on i960, others? Or warn?
3889@cindex @code{octa} directive
3890@cindex integer, 16-byte
3891@cindex sixteen byte integer
47342e8f 3892This directive expects zero or more bignums, separated by commas. For each
b50e59fe
RP
3893bignum, it emits a 16-byte integer.
3894
d0281557
RP
3895The term ``octa'' comes from contexts in which a ``word'' is two bytes;
3896hence @emph{octa}-word for 16 bytes.
93b45514 3897
242d9c06 3898@node Org
b50e59fe 3899@section @code{.org @var{new-lc} , @var{fill}}
47342e8f 3900
66b818fb
RP
3901@cindex @code{org} directive
3902@cindex location counter, advancing
3903@cindex advancing location counter
3904@cindex current address, advancing
05a0e43b 3905Advance the location counter of the current section to
93b45514 3906@var{new-lc}. @var{new-lc} is either an absolute expression or an
24b1493d
RP
3907expression with the same section as the current subsection. That is,
3908you can't use @code{.org} to cross sections: if @var{new-lc} has the
3909wrong section, the @code{.org} directive is ignored. To be compatible
3910with former assemblers, if the section of @var{new-lc} is absolute,
05a0e43b 3911@code{@value{AS}} issues a warning, then pretends the section of @var{new-lc}
24b1493d 3912is the same as the current subsection.
47342e8f
RP
3913
3914@code{.org} may only increase the location counter, or leave it
3915unchanged; you cannot use @code{.org} to move the location counter
d0281557 3916backwards.
47342e8f 3917
b50e59fe
RP
3918@c double negative used below "not undefined" because this is a specific
3919@c reference to "undefined" (as SEG_UNKNOWN is called in this manual)
71dd3c40 3920@c section. doc@cygnus.com 18feb91
dd565f85 3921Because @code{@value{AS}} tries to assemble programs in one pass, @var{new-lc}
b50e59fe 3922may not be undefined. If you really detest this restriction we eagerly await
d0281557 3923a chance to share your improved assembler.
93b45514 3924
24b1493d
RP
3925Beware that the origin is relative to the start of the section, not
3926to the start of the subsection. This is compatible with other
93b45514
RP
3927people's assemblers.
3928
24b1493d 3929When the location counter (of the current subsection) is advanced, the
93b45514
RP
3930intervening bytes are filled with @var{fill} which should be an
3931absolute expression. If the comma and @var{fill} are omitted,
3932@var{fill} defaults to zero.
3933
931a8fab 3934@node P2align
c6c7035c 3935@section @code{.p2align[wl] @var{abs-expr}, @var{abs-expr}, @var{abs-expr}}
931a8fab
KR
3936
3937@cindex padding the location counter given a power of two
3938@cindex @code{p2align} directive
3939Pad the location counter (in the current subsection) to a particular
3940storage boundary. The first expression (which must be absolute) is the
3941number of low-order zero bits the location counter must have after
3942advancement. For example @samp{.p2align 3} advances the location
3943counter until it a multiple of 8. If the location counter is already a
3944multiple of 8, no change is needed.
3945
c6c7035c
MM
3946The second expression (also absolute) gives the fill value to be stored in the
3947padding bytes. It (and the comma) may be omitted. If it is omitted, the
3948padding bytes are normally zero. However, on some systems, if the section is
3949marked as containing code and the fill value is omitted, the space is filled
3950with no-op instructions.
3951
3952The third expression is also absolute, and is also optional. If it is present,
3953it is the maximum number of bytes that should be skipped by this alignment
3954directive. If doing the alignment would require skipping more bytes than the
3955specified maximum, then the alignment is not done at all. You can omit the
3956fill value (the second argument) entirely by simply using two commas after the
3957required alignment; this can be useful if you want the alignment to be filled
3958with no-op instructions when appropriate.
931a8fab 3959
71dd3c40
ILT
3960@cindex @code{p2alignw} directive
3961@cindex @code{p2alignl} directive
3962The @code{.p2alignw} and @code{.p2alignl} directives are variants of the
3963@code{.p2align} directive. The @code{.p2alignw} directive treats the fill
3964pattern as a two byte word value. The @code{.p2alignl} directives treats the
3965fill pattern as a four byte longword value. For example, @code{.p2alignw
39662,0x368d} will align to a multiple of 4. If it skips two bytes, they will be
3967filled in with the value 0x368d (the exact placement of the bytes depends upon
3968the endianness of the processor). If it skips 1 or 3 bytes, the fill value is
3969undefined.
3970
242d9c06 3971@node Psize
66b818fb
RP
3972@section @code{.psize @var{lines} , @var{columns}}
3973
3974@cindex @code{psize} directive
3975@cindex listing control: paper size
3976@cindex paper size, for listings
3977Use this directive to declare the number of lines---and, optionally, the
f009d0ab 3978number of columns---to use for each page, when generating listings.
66b818fb 3979
05a0e43b 3980If you do not use @code{.psize}, listings use a default line-count
66b818fb
RP
3981of 60. You may omit the comma and @var{columns} specification; the
3982default width is 200 columns.
3983
05a0e43b 3984@code{@value{AS}} generates formfeeds whenever the specified number of
66b818fb 3985lines is exceeded (or whenever you explicitly request one, using
f009d0ab 3986@code{.eject}).
66b818fb
RP
3987
3988If you specify @var{lines} as @code{0}, no formfeeds are generated save
3989those explicitly specified with @code{.eject}.
3990
242d9c06 3991@node Quad
b50e59fe 3992@section @code{.quad @var{bignums}}
66b818fb
RP
3993
3994@cindex @code{quad} directive
b50e59fe 3995@code{.quad} expects zero or more bignums, separated by commas. For
d0281557 3996each bignum, it emits
f009d0ab
RP
3997@ifclear bignum-16
3998an 8-byte integer. If the bignum won't fit in 8 bytes, it prints a
3999warning message; and just takes the lowest order 8 bytes of the bignum.
66b818fb
RP
4000@cindex eight-byte integer
4001@cindex integer, 8-byte
b50e59fe 4002
d0281557 4003The term ``quad'' comes from contexts in which a ``word'' is two bytes;
b50e59fe 4004hence @emph{quad}-word for 8 bytes.
f009d0ab
RP
4005@end ifclear
4006@ifset bignum-16
d0281557 4007a 16-byte integer. If the bignum won't fit in 16 bytes, it prints a
f009d0ab 4008warning message; and just takes the lowest order 16 bytes of the bignum.
66b818fb
RP
4009@cindex sixteen-byte integer
4010@cindex integer, 16-byte
f009d0ab 4011@end ifset
d0281557 4012
95074dc3
ILT
4013@node Rept
4014@section @code{.rept @var{count}}
4015
4016@cindex @code{rept} directive
4017Repeat the sequence of lines between the @code{.rept} directive and the next
4018@code{.endr} directive @var{count} times.
4019
4020For example, assembling
4021
4022@example
4023 .rept 3
4024 .long 0
4025 .endr
4026@end example
4027
4028is equivalent to assembling
4029
4030@example
4031 .long 0
4032 .long 0
4033 .long 0
4034@end example
4035
242d9c06 4036@node Sbttl
66b818fb
RP
4037@section @code{.sbttl "@var{subheading}"}
4038
4039@cindex @code{sbttl} directive
4040@cindex subtitles for listings
4041@cindex listing control: subtitle
4042Use @var{subheading} as the title (third line, immediately after the
f009d0ab 4043title line) when generating assembly listings.
66b818fb
RP
4044
4045This directive affects subsequent pages, as well as the current page if
4046it appears within ten lines of the top of a page.
4047
f009d0ab 4048@ifset COFF
242d9c06 4049@node Scl
d0281557 4050@section @code{.scl @var{class}}
66b818fb
RP
4051
4052@cindex @code{scl} directive
4053@cindex symbol storage class (COFF)
4054@cindex COFF symbol storage class
d0281557
RP
4055Set the storage-class value for a symbol. This directive may only be
4056used inside a @code{.def}/@code{.endef} pair. Storage class may flag
4057whether a symbol is static or external, or it may record further
4058symbolic debugging information.
f009d0ab 4059@ifset BOUT
d0281557
RP
4060
4061The @samp{.scl} directive is primarily associated with COFF output; when
05a0e43b
RP
4062configured to generate @code{b.out} output format, @code{@value{AS}}
4063accepts this directive but ignores it.
f009d0ab
RP
4064@end ifset
4065@end ifset
d0281557 4066
242d9c06 4067@node Section
868c3513 4068@section @code{.section @var{name}}
66b818fb
RP
4069
4070@cindex @code{section} directive
868c3513
ILT
4071@cindex named section
4072Use the @code{.section} directive to assemble the following code into a section
4073named @var{name}.
4074
4b9f4409
KR
4075This directive is only supported for targets that actually support arbitrarily
4076named sections; on @code{a.out} targets, for example, it is not accepted, even
868c3513
ILT
4077with a standard @code{a.out} section name.
4078
4079@ifset COFF
4080For COFF targets, the @code{.section} directive is used in one of the following
4081ways:
4082@smallexample
4083.section @var{name}[, "@var{flags}"]
4084.section @var{name}[, @var{subsegment}]
4085@end smallexample
4086
4087If the optional argument is quoted, it is taken as flags to use for the
4088section. Each flag is a single character. The following flags are recognized:
4089@table @code
4090@item b
4091bss section (uninitialized data)
4092@item n
4093section is not loaded
4094@item w
4095writable section
4096@item d
4097data section
35cfacf0
ILT
4098@item r
4099read-only section
868c3513
ILT
4100@item x
4101executable section
4102@end table
4103
4104If no flags are specified, the default flags depend upon the section name. If
4105the section name is not recognized, the default will be for the section to be
4106loaded and writable.
4107
4108If the optional argument to the @code{.section} directive is not quoted, it is
4109taken as a subsegment number (@pxref{Sub-Sections}).
4b9f4409 4110@end ifset
868c3513
ILT
4111
4112@ifset ELF
4113For ELF targets, the @code{.section} directive is used like this:
4114@smallexample
4115.section @var{name}[, "@var{flags}"[, @@@var{type}]]
4116@end smallexample
4117The optional @var{flags} argument is a quoted string which may contain any
4118combintion of the following characters:
4119@table @code
4120@item a
4121section is allocatable
4122@item w
4123section is writable
4124@item x
4125section is executable
4126@end table
4127
4128The optional @var{type} argument may contain one of the following constants:
4129@table @code
4130@item @@progbits
4131section contains data
4132@item @@nobits
4133section does not contain data (i.e., section only occupies space)
4134@end table
4135
4136If no flags are specified, the default flags depend upon the section name. If
4137the section name is not recognized, the default will be for the section to have
4138none of the above flags: it will not be allocated in memory, nor writable, nor
4139executable. The section will contain data.
4140
4141For ELF targets, the assembler supports another type of @code{.section}
4142directive for compatibility with the Solaris assembler:
4143@smallexample
4144.section "@var{name}"[, @var{flags}...]
4145@end smallexample
4146Note that the section name is quoted. There may be a sequence of comma
4147separated flags:
4148@table @code
4149@item #alloc
4150section is allocatable
4151@item #write
4152section is writable
4153@item #execinstr
4154section is executable
4155@end table
f009d0ab 4156@end ifset
242d9c06
SC
4157
4158@node Set
b50e59fe 4159@section @code{.set @var{symbol}, @var{expression}}
93b45514 4160
66b818fb
RP
4161@cindex @code{set} directive
4162@cindex symbol value, setting
05a0e43b
RP
4163Set the value of @var{symbol} to @var{expression}. This
4164changes @var{symbol}'s value and type to conform to
d0281557 4165@var{expression}. If @var{symbol} was flagged as external, it remains
c6c7035c 4166flagged (@pxref{Symbol Attributes}).
93b45514 4167
47342e8f 4168You may @code{.set} a symbol many times in the same assembly.
93b45514
RP
4169
4170If you @code{.set} a global symbol, the value stored in the object
4171file is the last value stored into it.
4172
9dcf8057
JL
4173@ifset HPPA
4174The syntax for @code{set} on the HPPA is
509d5555 4175@samp{@var{symbol} .set @var{expression}}.
9dcf8057
JL
4176@end ifset
4177
242d9c06 4178@node Short
b50e59fe 4179@section @code{.short @var{expressions}}
66b818fb
RP
4180
4181@cindex @code{short} directive
f009d0ab
RP
4182@ifset GENERIC
4183@code{.short} is normally the same as @samp{.word}.
4184@xref{Word,,@code{.word}}.
4185
7a4c8e5c 4186In some configurations, however, @code{.short} and @code{.word} generate
f009d0ab
RP
4187numbers of different lengths; @pxref{Machine Dependencies}.
4188@end ifset
4189@ifclear GENERIC
4190@ifset W16
4191@code{.short} is the same as @samp{.word}. @xref{Word,,@code{.word}}.
4192@end ifset
4193@ifset W32
b50e59fe
RP
4194This expects zero or more @var{expressions}, and emits
4195a 16 bit number for each.
f009d0ab
RP
4196@end ifset
4197@end ifclear
242d9c06
SC
4198
4199@node Single
b50e59fe 4200@section @code{.single @var{flonums}}
66b818fb
RP
4201
4202@cindex @code{single} directive
4203@cindex floating point numbers (single)
b50e59fe 4204This directive assembles zero or more flonums, separated by commas. It
d0281557 4205has the same effect as @code{.float}.
f009d0ab 4206@ifset GENERIC
09352a5d 4207The exact kind of floating point numbers emitted depends on how
f009d0ab
RP
4208@code{@value{AS}} is configured. @xref{Machine Dependencies}.
4209@end ifset
4210@ifclear GENERIC
4211@ifset IEEEFLOAT
4212On the @value{TARGET} family, @code{.single} emits 32-bit floating point
66b818fb 4213numbers in @sc{ieee} format.
f009d0ab
RP
4214@end ifset
4215@end ifclear
d0281557 4216
f009d0ab 4217@ifset COFF
242d9c06 4218@node Size
d0281557 4219@section @code{.size}
66b818fb
RP
4220
4221@cindex @code{size} directive
d0281557
RP
4222This directive is generated by compilers to include auxiliary debugging
4223information in the symbol table. It is only permitted inside
4224@code{.def}/@code{.endef} pairs.
f009d0ab 4225@ifset BOUT
d0281557
RP
4226
4227@samp{.size} is only meaningful when generating COFF format output; when
f009d0ab 4228@code{@value{AS}} is generating @code{b.out}, it accepts this directive but
d0281557 4229ignores it.
f009d0ab
RP
4230@end ifset
4231@end ifset
7a4c8e5c 4232
f009d0ab 4233@ifclear no-space-dir
910d7df2
C
4234@node Skip
4235@section @code{.skip @var{size} , @var{fill}}
4236
4237@cindex @code{skip} directive
4238@cindex filling memory
4239This directive emits @var{size} bytes, each of value @var{fill}. Both
4240@var{size} and @var{fill} are absolute expressions. If the comma and
4241@var{fill} are omitted, @var{fill} is assumed to be zero. This is the same as
4242@samp{.space}.
4243
242d9c06 4244@node Space
b50e59fe 4245@section @code{.space @var{size} , @var{fill}}
66b818fb
RP
4246
4247@cindex @code{space} directive
4248@cindex filling memory
47342e8f 4249This directive emits @var{size} bytes, each of value @var{fill}. Both
93b45514 4250@var{size} and @var{fill} are absolute expressions. If the comma
910d7df2
C
4251and @var{fill} are omitted, @var{fill} is assumed to be zero. This is the same
4252as @samp{.skip}.
05a0e43b
RP
4253
4254@ifset HPPA
4255@quotation
4256@emph{Warning:} @code{.space} has a completely different meaning for HPPA
e680d737
RP
4257targets; use @code{.block} as a substitute. See @cite{HP9000 Series 800
4258Assembly Language Reference Manual} (HP 92432-90001) for the meaning of the
4259@code{.space} directive. @xref{HPPA Directives,,HPPA Assembler Directives},
4260for a summary.
05a0e43b
RP
4261@end quotation
4262@end ifset
f009d0ab 4263@end ifclear
b50e59fe 4264
f009d0ab
RP
4265@ifset A29K
4266@ifclear GENERIC
4267@node Space
24b1493d 4268@section @code{.space}
66b818fb 4269@cindex @code{space} directive
f009d0ab 4270@end ifclear
7a4c8e5c
RP
4271On the AMD 29K, this directive is ignored; it is accepted for
4272compatibility with other AMD 29K assemblers.
b50e59fe
RP
4273
4274@quotation
8babef85 4275@emph{Warning:} In most versions of the @sc{gnu} assembler, the directive
f009d0ab 4276@code{.space} has the effect of @code{.block} @xref{Machine Dependencies}.
b50e59fe 4277@end quotation
f009d0ab 4278@end ifset
93b45514 4279
f009d0ab 4280@ifset have-stabs
242d9c06 4281@node Stab
b50e59fe 4282@section @code{.stabd, .stabn, .stabs}
66b818fb
RP
4283
4284@cindex symbolic debuggers, information for
4285@cindex @code{stab@var{x}} directives
47342e8f 4286There are three directives that begin @samp{.stab}.
b50e59fe 4287All emit symbols (@pxref{Symbols}), for use by symbolic debuggers.
f009d0ab 4288The symbols are not entered in the @code{@value{AS}} hash table: they
d0281557 4289cannot be referenced elsewhere in the source file.
93b45514 4290Up to five fields are required:
f009d0ab 4291
93b45514
RP
4292@table @var
4293@item string
f009d0ab
RP
4294This is the symbol's name. It may contain any character except
4295@samp{\000}, so is more general than ordinary symbol names. Some
4296debuggers used to code arbitrarily complex structures into symbol names
4297using this field.
4298
93b45514 4299@item type
f009d0ab
RP
4300An absolute expression. The symbol's type is set to the low 8 bits of
4301this expression. Any bit pattern is permitted, but @code{@value{LD}}
05a0e43b 4302and debuggers choke on silly bit patterns.
f009d0ab 4303
93b45514 4304@item other
f009d0ab
RP
4305An absolute expression. The symbol's ``other'' attribute is set to the
4306low 8 bits of this expression.
4307
93b45514 4308@item desc
f009d0ab
RP
4309An absolute expression. The symbol's descriptor is set to the low 16
4310bits of this expression.
4311
93b45514 4312@item value
b50e59fe 4313An absolute expression which becomes the symbol's value.
93b45514
RP
4314@end table
4315
b50e59fe 4316If a warning is detected while reading a @code{.stabd}, @code{.stabn},
05a0e43b
RP
4317or @code{.stabs} statement, the symbol has probably already been created;
4318you get a half-formed symbol in your object file. This is
b50e59fe 4319compatible with earlier assemblers!
93b45514 4320
47342e8f 4321@table @code
66b818fb 4322@cindex @code{stabd} directive
47342e8f 4323@item .stabd @var{type} , @var{other} , @var{desc}
93b45514
RP
4324
4325The ``name'' of the symbol generated is not even an empty string.
4326It is a null pointer, for compatibility. Older assemblers used a
4327null pointer so they didn't waste space in object files with empty
4328strings.
4329
b50e59fe 4330The symbol's value is set to the location counter,
93b45514 4331relocatably. When your program is linked, the value of this symbol
05a0e43b 4332is the address of the location counter when the @code{.stabd} was
93b45514
RP
4333assembled.
4334
66b818fb 4335@cindex @code{stabn} directive
71dd3c40 4336@item .stabn @var{type} , @var{other} , @var{desc} , @var{value}
93b45514
RP
4337The name of the symbol is set to the empty string @code{""}.
4338
66b818fb 4339@cindex @code{stabs} directive
71dd3c40 4340@item .stabs @var{string} , @var{type} , @var{other} , @var{desc} , @var{value}
47342e8f
RP
4341All five fields are specified.
4342@end table
f009d0ab
RP
4343@end ifset
4344@c end have-stabs
d0281557 4345
e680d737
RP
4346@node String
4347@section @code{.string} "@var{str}"
4348
4349@cindex string, copying to object file
4350@cindex @code{string} directive
4351
4352Copy the characters in @var{str} to the object file. You may specify more than
4353one string to copy, separated by commas. Unless otherwise specified for a
4354particular machine, the assembler marks the end of each string with a 0 byte.
81fcb3ff 4355You can use any of the escape sequences described in @ref{Strings,,Strings}.
e680d737 4356
35cfacf0
ILT
4357@ifset ELF
4358@node Symver
4359@section @code{.symver}
4360@cindex @code{symver} directive
4361@cindex symbol versioning
4362@cindex versions of symbols
4363Use the @code{.symver} directive to bind symbols to specific version nodes
4364within a source file. This is only supported on ELF platforms, and is
4365typically used when assembling files to be linked into a shared library.
4366There are cases where it may make sense to use this in objects to be bound
4367into an application itself so as to override a versioned symbol from a
4368shared library.
4369
4370For ELF targets, the @code{.symver} directive is used like this:
4371@smallexample
4372.symver @var{name}, @var{name2@@nodename}
4373@end smallexample
4374In this case, the symbol @var{name} must exist and be defined within the file
4375being assembled. The @code{.versym} directive effectively creates a symbol
4376alias with the name @var{name2@@nodename}, and in fact the main reason that we
4377just don't try and create a regular alias is that the @var{@@} character isn't
4378permitted in symbol names. The @var{name2} part of the name is the actual name
4379of the symbol by which it will be externally referenced. The name @var{name}
4380itself is merely a name of convenience that is used so that it is possible to
4381have definitions for multiple versions of a function within a single source
4382file, and so that the compiler can unambiguously know which version of a
4383function is being mentioned. The @var{nodename} portion of the alias should be
4384the name of a node specified in the version script supplied to the linker when
4385building a shared library. If you are attempting to override a versioned
4386symbol from a shared library, then @var{nodename} should correspond to the
4387nodename of the symbol you are trying to override.
4388@end ifset
4389
f009d0ab 4390@ifset COFF
242d9c06 4391@node Tag
d0281557 4392@section @code{.tag @var{structname}}
66b818fb
RP
4393
4394@cindex COFF structure debugging
4395@cindex structure debugging, COFF
4396@cindex @code{tag} directive
d0281557
RP
4397This directive is generated by compilers to include auxiliary debugging
4398information in the symbol table. It is only permitted inside
4399@code{.def}/@code{.endef} pairs. Tags are used to link structure
4400definitions in the symbol table with instances of those structures.
f009d0ab 4401@ifset BOUT
d0281557
RP
4402
4403@samp{.tag} is only used when generating COFF format output; when
f009d0ab 4404@code{@value{AS}} is generating @code{b.out}, it accepts this directive but
d0281557 4405ignores it.
f009d0ab
RP
4406@end ifset
4407@end ifset
7a4c8e5c 4408
242d9c06 4409@node Text
24b1493d 4410@section @code{.text @var{subsection}}
66b818fb
RP
4411
4412@cindex @code{text} directive
f009d0ab 4413Tells @code{@value{AS}} to assemble the following statements onto the end of
24b1493d
RP
4414the text subsection numbered @var{subsection}, which is an absolute
4415expression. If @var{subsection} is omitted, subsection number zero
93b45514
RP
4416is used.
4417
242d9c06 4418@node Title
66b818fb
RP
4419@section @code{.title "@var{heading}"}
4420
4421@cindex @code{title} directive
4422@cindex listing control: title line
4423Use @var{heading} as the title (second line, immediately after the
f009d0ab 4424source file name and pagenumber) when generating assembly listings.
66b818fb
RP
4425
4426This directive affects subsequent pages, as well as the current page if
4427it appears within ten lines of the top of a page.
4428
f009d0ab 4429@ifset COFF
242d9c06 4430@node Type
d0281557 4431@section @code{.type @var{int}}
66b818fb
RP
4432
4433@cindex COFF symbol type
4434@cindex symbol type, COFF
4435@cindex @code{type} directive
d0281557
RP
4436This directive, permitted only within @code{.def}/@code{.endef} pairs,
4437records the integer @var{int} as the type attribute of a symbol table entry.
f009d0ab 4438@ifset BOUT
d0281557
RP
4439
4440@samp{.type} is associated only with COFF format output; when
f009d0ab 4441@code{@value{AS}} is configured for @code{b.out} output, it accepts this
d0281557 4442directive but ignores it.
f009d0ab
RP
4443@end ifset
4444@end ifset
d0281557 4445
f009d0ab 4446@ifset COFF
242d9c06 4447@node Val
d0281557 4448@section @code{.val @var{addr}}
66b818fb
RP
4449
4450@cindex @code{val} directive
4451@cindex COFF value attribute
4452@cindex value attribute, COFF
d0281557
RP
4453This directive, permitted only within @code{.def}/@code{.endef} pairs,
4454records the address @var{addr} as the value attribute of a symbol table
4455entry.
f009d0ab 4456@ifset BOUT
d0281557 4457
f009d0ab 4458@samp{.val} is used only for COFF output; when @code{@value{AS}} is
d0281557 4459configured for @code{b.out}, it accepts this directive but ignores it.
f009d0ab
RP
4460@end ifset
4461@end ifset
7a4c8e5c 4462
242d9c06 4463@node Word
b50e59fe 4464@section @code{.word @var{expressions}}
66b818fb
RP
4465
4466@cindex @code{word} directive
24b1493d 4467This directive expects zero or more @var{expressions}, of any section,
b50e59fe 4468separated by commas.
f009d0ab
RP
4469@ifclear GENERIC
4470@ifset W32
4471For each expression, @code{@value{AS}} emits a 32-bit number.
4472@end ifset
4473@ifset W16
4474For each expression, @code{@value{AS}} emits a 16-bit number.
4475@end ifset
4476@end ifclear
4477@ifset GENERIC
4478
0b5b143a 4479The size of the number emitted, and its byte order,
05a0e43b 4480depend on what target computer the assembly is for.
f009d0ab 4481@end ifset
09352a5d 4482
7a4c8e5c 4483@c on amd29k, i960, sparc the "special treatment to support compilers" doesn't
09352a5d 4484@c happen---32-bit addressability, period; no long/short jumps.
f009d0ab 4485@ifset DIFF-TBL-KLUGE
66b818fb
RP
4486@cindex difference tables altered
4487@cindex altered difference tables
0b5b143a
RP
4488@quotation
4489@emph{Warning: Special Treatment to support Compilers}
4490@end quotation
47342e8f 4491
f009d0ab 4492@ifset GENERIC
24b1493d
RP
4493Machines with a 32-bit address space, but that do less than 32-bit
4494addressing, require the following special treatment. If the machine of
4495interest to you does 32-bit addressing (or doesn't require it;
f009d0ab 4496@pxref{Machine Dependencies}), you can ignore this issue.
7a4c8e5c 4497
f009d0ab 4498@end ifset
05a0e43b
RP
4499In order to assemble compiler output into something that works,
4500@code{@value{AS}} occasionlly does strange things to @samp{.word} directives.
47342e8f 4501Directives of the form @samp{.word sym1-sym2} are often emitted by
f009d0ab 4502compilers as part of jump tables. Therefore, when @code{@value{AS}} assembles a
47342e8f 4503directive of the form @samp{.word sym1-sym2}, and the difference between
05a0e43b
RP
4504@code{sym1} and @code{sym2} does not fit in 16 bits, @code{@value{AS}}
4505creates a @dfn{secondary jump table}, immediately before the next label.
4506This secondary jump table is preceded by a short-jump to the
47342e8f
RP
4507first byte after the secondary table. This short-jump prevents the flow
4508of control from accidentally falling into the new table. Inside the
05a0e43b
RP
4509table is a long-jump to @code{sym2}. The original @samp{.word}
4510contains @code{sym1} minus the address of the long-jump to
d0281557 4511@code{sym2}.
47342e8f
RP
4512
4513If there were several occurrences of @samp{.word sym1-sym2} before the
05a0e43b 4514secondary jump table, all of them are adjusted. If there was a
47342e8f 4515@samp{.word sym3-sym4}, that also did not fit in sixteen bits, a
05a0e43b
RP
4516long-jump to @code{sym4} is included in the secondary jump table,
4517and the @code{.word} directives are adjusted to contain @code{sym3}
47342e8f 4518minus the address of the long-jump to @code{sym4}; and so on, for as many
d0281557 4519entries in the original jump table as necessary.
09352a5d 4520
f009d0ab
RP
4521@ifset INTERNALS
4522@emph{This feature may be disabled by compiling @code{@value{AS}} with the
47342e8f
RP
4523@samp{-DWORKING_DOT_WORD} option.} This feature is likely to confuse
4524assembly language programmers.
f009d0ab
RP
4525@end ifset
4526@end ifset
4527@c end DIFF-TBL-KLUGE
93b45514 4528
242d9c06 4529@node Deprecated
93b45514 4530@section Deprecated Directives
66b818fb
RP
4531
4532@cindex deprecated directives
4533@cindex obsolescent directives
93b45514
RP
4534One day these directives won't work.
4535They are included for compatibility with older assemblers.
4536@table @t
4537@item .abort
2d8e0f62 4538@item .app-file
93b45514
RP
4539@item .line
4540@end table
4541
f009d0ab
RP
4542@ifset GENERIC
4543@node Machine Dependencies
09352a5d 4544@chapter Machine Dependent Features
66b818fb
RP
4545
4546@cindex machine dependencies
4547The machine instruction sets are (almost by definition) different on
f009d0ab
RP
4548each machine where @code{@value{AS}} runs. Floating point representations
4549vary as well, and @code{@value{AS}} often supports a few additional
66b818fb
RP
4550directives or command-line options for compatibility with other
4551assemblers on a particular platform. Finally, some versions of
f009d0ab 4552@code{@value{AS}} support special pseudo-instructions for branch
66b818fb
RP
4553optimization.
4554
4555This chapter discusses most of these differences, though it does not
4556include details on any machine's instruction set. For details on that
4557subject, see the hardware manufacturer's manual.
4558
7a4c8e5c 4559@menu
910d7df2
C
4560@ifset A29K
4561* AMD29K-Dependent:: AMD 29K Dependent Features
4562@end ifset
99c4053d
KR
4563@c start-sanitize-arc
4564@ifset ARC
4565* ARC-Dependent:: ARC Dependent Features
4566@end ifset
4567@c end-sanitize-arc
9a5acea8
ILT
4568@ifset D10V
4569* D10V-Dependent:: D10V Dependent Features
4570@end ifset
f009d0ab 4571@ifset H8/300
ba487f3a 4572* H8/300-Dependent:: Hitachi H8/300 Dependent Features
f009d0ab
RP
4573@end ifset
4574@ifset H8/500
4575* H8/500-Dependent:: Hitachi H8/500 Dependent Features
4576@end ifset
9dcf8057 4577@ifset HPPA
fb5bec49 4578* HPPA-Dependent:: HPPA Dependent Features
9dcf8057 4579@end ifset
910d7df2
C
4580@ifset I80386
4581* i386-Dependent:: Intel 80386 Dependent Features
f009d0ab 4582@end ifset
f009d0ab 4583@ifset I960
ba487f3a 4584* i960-Dependent:: Intel 80960 Dependent Features
f009d0ab
RP
4585@end ifset
4586@ifset M680X0
ba487f3a 4587* M68K-Dependent:: M680x0 Dependent Features
f009d0ab 4588@end ifset
910d7df2
C
4589@ifset MIPS
4590* MIPS-Dependent:: MIPS Dependent Features
4591@end ifset
4592@ifset SH
4593* SH-Dependent:: Hitachi SH Dependent Features
4594@end ifset
f009d0ab 4595@ifset SPARC
ba487f3a 4596* Sparc-Dependent:: SPARC Dependent Features
f009d0ab
RP
4597@end ifset
4598@ifset Z8000
ba487f3a 4599* Z8000-Dependent:: Z8000 Dependent Features
f009d0ab 4600@end ifset
910d7df2
C
4601@ifset VAX
4602* Vax-Dependent:: VAX Dependent Features
f009d0ab 4603@end ifset
7a4c8e5c
RP
4604@end menu
4605
9dcf8057 4606@lowersections
f009d0ab
RP
4607@end ifset
4608
4609@c The following major nodes are *sections* in the GENERIC version, *chapters*
9dcf8057 4610@c in single-cpu versions. This is mainly achieved by @lowersections. There is a
f009d0ab
RP
4611@c peculiarity: to preserve cross-references, there must be a node called
4612@c "Machine Dependencies". Hence the conditional nodenames in each
4613@c major node below. Node defaulting in makeinfo requires adjacency of
4614@c node and sectioning commands; hence the repetition of @chapter BLAH
4615@c in both conditional blocks.
99c4053d
KR
4616
4617@c start-sanitize-arc
4618@ifset ARC
4619@ifset GENERIC
4620@page
4621@node ARC-Dependent
4622@chapter ARC Dependent Features
4623@end ifset
4624@ifclear GENERIC
4625@node Machine Dependencies
4626@chapter ARC Dependent Features
4627@end ifclear
4628
4629@cindex ARC support
4630@menu
4631* ARC-Opts:: Options
4632* ARC-Float:: Floating Point
4633* ARC-Directives:: Sparc Machine Directives
4634@end menu
4635
4636@node ARC-Opts
4637@section Options
4638
4639@cindex options for ARC
4640@cindex ARC options
4641@cindex architectures, ARC
4642@cindex ARC architectures
4643The ARC chip family includes several successive levels (or other
4644variants) of chip, using the same core instruction set, but including
4645a few additional instructions at each level.
4646
4647By default, @code{@value{AS}} assumes the core instruction set (ARC
4648base). The @code{.cpu} pseudo-op is used to select a different variant.
4649
4650@table @code
4651@cindex @code{-mbig-endian} option (ARC)
4652@cindex @code{-mlittle-endian} option (ARC)
4653@cindex ARC big-endian output
4654@cindex ARC little-endian output
4655@cindex big-endian output, ARC
4656@cindex little-endian output, ARC
4657@item -mbig-endian
4658@itemx -mlittle-endian
4659Any @sc{arc} configuration of @code{@value{AS}} can select big-endian or
4660little-endian output at run time (unlike most other @sc{gnu} development
4661tools, which must be configured for one or the other). Use
4662@samp{-mbig-endian} to select big-endian output, and @samp{-mlittle-endian}
4663for little-endian.
4664@end table
4665
4666@node ARC-Float
4667@section Floating Point
4668
4669@cindex floating point, ARC (@sc{ieee})
4670@cindex ARC floating point (@sc{ieee})
4671The ARC cpu family currently does not have hardware floating point
4672support. Software floating point support is provided by @code{GCC}
4673and uses @sc{ieee} floating-point numbers.
4674
4675@node ARC-Directives
4676@section ARC Machine Directives
4677
4678@cindex ARC machine directives
4679@cindex machine directives, ARC
4680The ARC version of @code{@value{AS}} supports the following additional
4681machine directives:
4682
4683@table @code
4684@item .cpu
4685@cindex @code{cpu} directive, SPARC
4686This must be followed by the desired cpu. It must be one of
4687@code{base}, @code{host}, @code{graphics}, or @code{audio}.
4688
4689@end table
4690
4691@end ifset
4692@c end-sanitize-arc
4693
f009d0ab 4694@ifset A29K
79e15b8a 4695@include c-a29k.texi
f009d0ab 4696@end ifset
b50e59fe 4697
f009d0ab
RP
4698@ifset Hitachi-all
4699@ifclear GENERIC
4700@node Machine Dependencies
4701@chapter Machine Dependent Features
4702
4703The machine instruction sets are different on each Hitachi chip family,
4704and there are also some syntax differences among the families. This
4705chapter describes the specific @code{@value{AS}} features for each
4706family.
4707
4708@menu
4709* H8/300-Dependent:: Hitachi H8/300 Dependent Features
4710* H8/500-Dependent:: Hitachi H8/500 Dependent Features
f009d0ab 4711* SH-Dependent:: Hitachi SH Dependent Features
f009d0ab 4712@end menu
9dcf8057 4713@lowersections
f009d0ab
RP
4714@end ifclear
4715@end ifset
4716
9a5acea8
ILT
4717@ifset D10V
4718@include c-d10v.texi
4719@end ifset
9a5acea8 4720
f009d0ab 4721@ifset H8/300
79e15b8a 4722@include c-h8300.texi
f009d0ab 4723@end ifset
24b1493d 4724
79e15b8a
ILT
4725@ifset H8/500
4726@include c-h8500.texi
fb5bec49 4727@end ifset
66b818fb 4728
79e15b8a
ILT
4729@ifset HPPA
4730@include c-hppa.texi
4731@end ifset
66b818fb 4732
910d7df2
C
4733@ifset I80386
4734@include c-i386.texi
79e15b8a 4735@end ifset
66b818fb 4736
79e15b8a
ILT
4737@ifset I960
4738@include c-i960.texi
f009d0ab
RP
4739@end ifset
4740
79e15b8a
ILT
4741@ifset M680X0
4742@include c-m68k.texi
4743@end ifset
f009d0ab 4744
910d7df2
C
4745@ifset MIPS
4746@include c-mips.texi
4747@end ifset
4748
71dd3c40
ILT
4749@ifset NS32K
4750@include c-ns32k.texi
4751@end ifset
f009d0ab 4752
910d7df2
C
4753@ifset SH
4754@include c-sh.texi
79e15b8a 4755@end ifset
f009d0ab 4756
910d7df2
C
4757@ifset SPARC
4758@include c-sparc.texi
79e15b8a 4759@end ifset
fb5bec49 4760
79e15b8a
ILT
4761@ifset Z8000
4762@include c-z8k.texi
4763@end ifset
34214344 4764
910d7df2
C
4765@ifset VAX
4766@include c-vax.texi
34214344
KR
4767@end ifset
4768
f009d0ab
RP
4769@ifset GENERIC
4770@c reverse effect of @down at top of generic Machine-Dep chapter
9dcf8057 4771@raisesections
f009d0ab
RP
4772@end ifset
4773
9a5acea8
ILT
4774@node Reporting Bugs
4775@chapter Reporting Bugs
4776@cindex bugs in @code{@value{AS}}
4777@cindex reporting bugs in @code{@value{AS}}
4778
4779Your bug reports play an essential role in making @code{@value{AS}} reliable.
4780
4781Reporting a bug may help you by bringing a solution to your problem, or it may
4782not. But in any case the principal function of a bug report is to help the
4783entire community by making the next version of @code{@value{AS}} work better.
4784Bug reports are your contribution to the maintenance of @code{@value{AS}}.
4785
4786In order for a bug report to serve its purpose, you must include the
4787information that enables us to fix the bug.
4788
4789@menu
4790* Bug Criteria:: Have you found a bug?
4791* Bug Reporting:: How to report bugs
4792@end menu
4793
4794@node Bug Criteria
4795@section Have you found a bug?
4796@cindex bug criteria
4797
4798If you are not sure whether you have found a bug, here are some guidelines:
4799
4800@itemize @bullet
4801@cindex fatal signal
4802@cindex assembler crash
4803@cindex crash of assembler
4804@item
4805If the assembler gets a fatal signal, for any input whatever, that is a
4806@code{@value{AS}} bug. Reliable assemblers never crash.
4807
4808@cindex error on valid input
4809@item
4810If @code{@value{AS}} produces an error message for valid input, that is a bug.
4811
4812@cindex invalid input
4813@item
4814If @code{@value{AS}} does not produce an error message for invalid input, that
4815is a bug. However, you should note that your idea of ``invalid input'' might
4816be our idea of ``an extension'' or ``support for traditional practice''.
4817
4818@item
4819If you are an experienced user of assemblers, your suggestions for improvement
4820of @code{@value{AS}} are welcome in any case.
4821@end itemize
4822
4823@node Bug Reporting
4824@section How to report bugs
4825@cindex bug reports
4826@cindex @code{@value{AS}} bugs, reporting
4827
4828A number of companies and individuals offer support for @sc{gnu} products. If
4829you obtained @code{@value{AS}} from a support organization, we recommend you
4830contact that organization first.
4831
4832You can find contact information for many support companies and
4833individuals in the file @file{etc/SERVICE} in the @sc{gnu} Emacs
4834distribution.
4835
4836In any event, we also recommend that you send bug reports for @code{@value{AS}}
4837to @samp{bug-gnu-utils@@prep.ai.mit.edu}.
4838
4839The fundamental principle of reporting bugs usefully is this:
4840@strong{report all the facts}. If you are not sure whether to state a
4841fact or leave it out, state it!
4842
4843Often people omit facts because they think they know what causes the problem
4844and assume that some details do not matter. Thus, you might assume that the
4845name of a symbol you use in an example does not matter. Well, probably it does
4846not, but one cannot be sure. Perhaps the bug is a stray memory reference which
4847happens to fetch from the location where that name is stored in memory;
4848perhaps, if the name were different, the contents of that location would fool
4849the assembler into doing the right thing despite the bug. Play it safe and
4850give a specific, complete example. That is the easiest thing for you to do,
4851and the most helpful.
4852
4853Keep in mind that the purpose of a bug report is to enable us to fix the bug if
4854it is new to us. Therefore, always write your bug reports on the assumption
4855that the bug has not been reported previously.
4856
4857Sometimes people give a few sketchy facts and ask, ``Does this ring a
4858bell?'' Those bug reports are useless, and we urge everyone to
4859@emph{refuse to respond to them} except to chide the sender to report
4860bugs properly.
4861
4862To enable us to fix the bug, you should include all these things:
4863
4864@itemize @bullet
4865@item
4866The version of @code{@value{AS}}. @code{@value{AS}} announces it if you start
868c3513 4867it with the @samp{--version} argument.
9a5acea8
ILT
4868
4869Without this, we will not know whether there is any point in looking for
4870the bug in the current version of @code{@value{AS}}.
4871
4872@item
4873Any patches you may have applied to the @code{@value{AS}} source.
4874
4875@item
4876The type of machine you are using, and the operating system name and
4877version number.
4878
4879@item
4880What compiler (and its version) was used to compile @code{@value{AS}}---e.g.
4881``@code{gcc-2.7}''.
4882
4883@item
4884The command arguments you gave the assembler to assemble your example and
4885observe the bug. To guarantee you will not omit something important, list them
4886all. A copy of the Makefile (or the output from make) is sufficient.
4887
4888If we were to try to guess the arguments, we would probably guess wrong
4889and then we might not encounter the bug.
4890
4891@item
4892A complete input file that will reproduce the bug. If the bug is observed when
4893the assembler is invoked via a compiler, send the assembler source, not the
4894high level language source. Most compilers will produce the assembler source
4895when run with the @samp{-S} option. If you are using @code{@value{GCC}}, use
4896the options @samp{-v --save-temps}; this will save the assembler source in a
4897file with an extension of @file{.s}, and also show you exactly how
4898@code{@value{AS}} is being run.
4899
4900@item
4901A description of what behavior you observe that you believe is
4902incorrect. For example, ``It gets a fatal signal.''
4903
4904Of course, if the bug is that @code{@value{AS}} gets a fatal signal, then we
4905will certainly notice it. But if the bug is incorrect output, we might not
4906notice unless it is glaringly wrong. You might as well not give us a chance to
4907make a mistake.
4908
4909Even if the problem you experience is a fatal signal, you should still say so
4910explicitly. Suppose something strange is going on, such as, your copy of
4911@code{@value{AS}} is out of synch, or you have encountered a bug in the C
4912library on your system. (This has happened!) Your copy might crash and ours
4913would not. If you told us to expect a crash, then when ours fails to crash, we
4914would know that the bug was not happening for us. If you had not told us to
4915expect a crash, then we would not be able to draw any conclusion from our
4916observations.
4917
4918@item
4919If you wish to suggest changes to the @code{@value{AS}} source, send us context
4920diffs, as generated by @code{diff} with the @samp{-u}, @samp{-c}, or @samp{-p}
4921option. Always send diffs from the old file to the new file. If you even
4922discuss something in the @code{@value{AS}} source, refer to it by context, not
4923by line number.
4924
4925The line numbers in our development sources will not match those in your
4926sources. Your line numbers would convey no useful information to us.
4927@end itemize
4928
4929Here are some things that are not necessary:
4930
4931@itemize @bullet
4932@item
4933A description of the envelope of the bug.
4934
4935Often people who encounter a bug spend a lot of time investigating
4936which changes to the input file will make the bug go away and which
4937changes will not affect it.
4938
4939This is often time consuming and not very useful, because the way we
4940will find the bug is by running a single example under the debugger
4941with breakpoints, not by pure deduction from a series of examples.
4942We recommend that you save your time for something else.
4943
4944Of course, if you can find a simpler example to report @emph{instead}
4945of the original one, that is a convenience for us. Errors in the
4946output will be easier to spot, running under the debugger will take
4947less time, and so on.
4948
4949However, simplification is not vital; if you do not want to do this,
4950report the bug anyway and send us the entire test case you used.
4951
4952@item
4953A patch for the bug.
4954
4955A patch for the bug does help us if it is a good one. But do not omit
4956the necessary information, such as the test case, on the assumption that
4957a patch is all we need. We might see problems with your patch and decide
4958to fix the problem another way, or we might not understand it at all.
4959
4960Sometimes with a program as complicated as @code{@value{AS}} it is very hard to
4961construct an example that will make the program follow a certain path through
4962the code. If you do not send us the example, we will not be able to construct
4963one, so we will not be able to verify that the bug is fixed.
4964
4965And if we cannot understand what bug you are trying to fix, or why your
4966patch should be an improvement, we will not install it. A test case will
4967help us to understand.
4968
4969@item
4970A guess about what the bug is or what it depends on.
4971
4972Such guesses are usually wrong. Even we cannot guess right about such
4973things without first using the debugger to find the facts.
4974@end itemize
4975
9dcf8057
JL
4976@node Acknowledgements
4977@chapter Acknowledgements
4978
05a0e43b
RP
4979If you have contributed to @code{@value{AS}} and your name isn't listed here,
4980it is not meant as a slight. We just don't know about it. Send mail to the
71dd3c40
ILT
4981maintainer, and we'll correct the situation. Currently
4982@c (January 1994),
4983the maintainer is Ken Raeburn (email address @code{raeburn@@cygnus.com}).
9dcf8057 4984
79e15b8a
ILT
4985Dean Elsner wrote the original @sc{gnu} assembler for the VAX.@footnote{Any
4986more details?}
9dcf8057 4987
05a0e43b 4988Jay Fenlason maintained GAS for a while, adding support for GDB-specific debug
9dcf8057 4989information and the 68k series machines, most of the preprocessing pass, and
05a0e43b 4990extensive changes in @file{messages.c}, @file{input-file.c}, @file{write.c}.
9dcf8057
JL
4991
4992K. Richard Pixley maintained GAS for a while, adding various enhancements and
4993many bug fixes, including merging support for several processors, breaking GAS
05a0e43b
RP
4994up to handle multiple object file format back ends (including heavy rewrite,
4995testing, an integration of the coff and b.out back ends), adding configuration
9dcf8057 4996including heavy testing and verification of cross assemblers and file splits
05a0e43b
RP
4997and renaming, converted GAS to strictly ANSI C including full prototypes, added
4998support for m680[34]0 and cpu32, did considerable work on i960 including a COFF
4999port (including considerable amounts of reverse engineering), a SPARC opcode
5000file rewrite, DECstation, rs6000, and hp300hpux host ports, updated ``know''
9dcf8057
JL
5001assertions and made them work, much other reorganization, cleanup, and lint.
5002
5003Ken Raeburn wrote the high-level BFD interface code to replace most of the code
5004in format-specific I/O modules.
5005
5006The original VMS support was contributed by David L. Kashtan. Eric Youngdale
5007has done much work with it since.
5008
5009The Intel 80386 machine description was written by Eliot Dresselhaus.
5010
5011Minh Tran-Le at IntelliCorp contributed some AIX 386 support.
5012
5013The Motorola 88k machine description was contributed by Devon Bowen of Buffalo
5014University and Torbjorn Granlund of the Swedish Institute of Computer Science.
5015
5016Keith Knowles at the Open Software Foundation wrote the original MIPS back end
05a0e43b
RP
5017(@file{tc-mips.c}, @file{tc-mips.h}), and contributed Rose format support
5018(which hasn't been merged in yet). Ralph Campbell worked with the MIPS code to
5019support a.out format.
9dcf8057
JL
5020
5021Support for the Zilog Z8k and Hitachi H8/300 and H8/500 processors (tc-z8k,
5022tc-h8300, tc-h8500), and IEEE 695 object file format (obj-ieee), was written by
5023Steve Chamberlain of Cygnus Support. Steve also modified the COFF back end to
5024use BFD for some low-level operations, for use with the H8/300 and AMD 29k
5025targets.
5026
05a0e43b
RP
5027John Gilmore built the AMD 29000 support, added @code{.include} support, and
5028simplified the configuration of which versions accept which directives. He
9dcf8057 5029updated the 68k machine description so that Motorola's opcodes always produced
05a0e43b
RP
5030fixed-size instructions (e.g. @code{jsr}), while synthetic instructions
5031remained shrinkable (@code{jbsr}). John fixed many bugs, including true tested
9dcf8057 5032cross-compilation support, and one bug in relaxation that took a week and
47c7ceb5 5033required the proverbial one-bit fix.
9dcf8057 5034
05a0e43b 5035Ian Lance Taylor of Cygnus Support merged the Motorola and MIT syntax for the
9dcf8057 503668k, completed support for some COFF targets (68k, i386 SVR3, and SCO Unix),
910d7df2
C
5037added support for MIPS ECOFF and ELF targets, wrote the initial RS/6000 and
5038PowerPC assembler, and made a few other minor patches.
9dcf8057
JL
5039
5040Steve Chamberlain made @code{@value{AS}} able to generate listings.
5041
05a0e43b 5042Hewlett-Packard contributed support for the HP9000/300.
9dcf8057 5043
05a0e43b
RP
5044Jeff Law wrote GAS and BFD support for the native HPPA object format (SOM)
5045along with a fairly extensive HPPA testsuite (for both SOM and ELF object
5046formats). This work was supported by both the Center for Software Science at
5047the University of Utah and Cygnus Support.
9dcf8057
JL
5048
5049Support for ELF format files has been worked on by Mark Eichin of Cygnus
5050Support (original, incomplete implementation for SPARC), Pete Hoogenboom and
5051Jeff Law at the University of Utah (HPPA mainly), Michael Meissner of the Open
5052Software Foundation (i386 mainly), and Ken Raeburn of Cygnus Support (sparc,
5053and some initial 64-bit support).
5054
910d7df2
C
5055Richard Henderson rewrote the Alpha assembler.
5056
9dcf8057
JL
5057Several engineers at Cygnus Support have also provided many small bug fixes and
5058configuration enhancements.
5059
5060Many others have contributed large or small bugfixes and enhancements. If
05a0e43b
RP
5061you have contributed significant work and are not mentioned on this list, and
5062want to be, let us know. Some of the history has been lost; we are not
9dcf8057
JL
5063intentionally leaving anyone out.
5064
242d9c06 5065@node Index
66b818fb
RP
5066@unnumbered Index
5067
5068@printindex cp
5069
93b45514
RP
5070@contents
5071@bye
9dcf8057
JL
5072@c Local Variables:
5073@c fill-column: 79
5074@c End:
This page took 0.505083 seconds and 4 git commands to generate.