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