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