z8000 documentation
[deliverable/binutils-gdb.git] / gas / doc / as.texinfo
CommitLineData
66b818fb
RP
1_dnl__ -*-Texinfo-*-
2_dnl__ Copyright (c) 1991 1992 Free Software Foundation, Inc.
3_dnl__ $Id$
4\input texinfo @c -*-Texinfo-*-
5@c Copyright (c) 1991 1992 Free Software Foundation, Inc.
6@c %**start of header
7@setfilename _AS__.info
0b5b143a 8_if__(_GENERIC__)
66b818fb 9@settitle Using _AS__
0b5b143a 10_fi__(_GENERIC__)
66b818fb
RP
11_if__(!_GENERIC__)
12@settitle Using _AS__ (_HOST__)
13_fi__(!_GENERIC__)
14@setchapternewpage odd
eaeebcc9
RP
15@c @smallbook
16@c @cropmarks
66b818fb
RP
17@c %**end of header
18
80381063
RP
19@ifinfo
20@format
21START-INFO-DIR-ENTRY
22* As: (as). The GNU assembler.
23END-INFO-DIR-ENTRY
24@end format
25@end ifinfo
26
66b818fb
RP
27@finalout
28@syncodeindex ky cp
29
d0281557
RP
30_if__(0)
31
0b5b143a
RP
32NOTE: this manual is marked up for preprocessing with a collection
33of m4 macros called "pretex.m4".
34
d0281557
RP
35THIS IS THE FULL SOURCE. The full source needs to be run through m4
36before either tex- or info- formatting: for example,
37 m4 pretex.m4 none.m4 m680x0.m4 as.texinfo >as-680x0.texinfo
38will produce (assuming your path finds either GNU or SysV m4; Berkeley
66b818fb
RP
39won't do) a file, configured for the M680x0 version of GAS, suitable for
40formatting. See the text in "pretex.m4" for a fuller explanation (and
41the macro definitions).
d0281557
RP
42
43_fi__(0)
09352a5d 44@c
47342e8f 45@ifinfo
d0281557 46This file documents the GNU Assembler "_AS__".
47342e8f
RP
47
48Copyright (C) 1991 Free Software Foundation, Inc.
49
50Permission is granted to make and distribute verbatim copies of
51this manual provided the copyright notice and this permission notice
52are preserved on all copies.
53
54@ignore
55Permission is granted to process this file through Tex and print the
56results, provided the printed document carries copying permission
57notice identical to this one except for the removal of this paragraph
58(this paragraph not being relevant to the printed manual).
59
60@end ignore
61Permission is granted to copy and distribute modified versions of this
62manual under the conditions for verbatim copying, provided also that the
63section entitled ``GNU General Public License'' is included exactly as
64in the original, and provided that the entire resulting derived work is
65distributed under the terms of a permission notice identical to this
66one.
67
68Permission is granted to copy and distribute translations of this manual
69into another language, under the above conditions for modified versions,
70except that the section entitled ``GNU General Public License'' may be
0b5b143a
RP
71included in a translation approved by the Free Software Foundation
72instead of in the original English.
47342e8f 73@end ifinfo
66b818fb 74
93b45514 75@titlepage
7d7ecbdd
RP
76@title Using _AS__
77@subtitle The GNU Assembler
0b5b143a 78_if__(!_GENERIC__)
7d7ecbdd 79@subtitle for the _HOST__ family
0b5b143a 80_fi__(!_GENERIC__)
93b45514 81@sp 1
66b818fb 82@subtitle January 1992
0b5b143a 83@sp 1
93b45514
RP
84@sp 13
85The Free Software Foundation Inc. thanks The Nice Computer
86Company of Australia for loaning Dean Elsner to write the
87first (Vax) version of @code{as} for Project GNU.
88The proprietors, management and staff of TNCCA thank FSF for
89distracting the boss while they got some work
90done.
91@sp 3
7d7ecbdd 92@author Dean Elsner, Jay Fenlason & friends
7a4c8e5c 93@c edited by: pesch@cygnus.com
47342e8f
RP
94@page
95@tex
96\def\$#1${{#1}} % Kluge: collect RCS revision info without $...$
97\xdef\manvers{\$Revision$} % For use in headers, footers too
98{\parskip=0pt
80381063 99\hfill {\it Using {\tt _AS__}} \manvers\par
47342e8f 100\hfill \TeX{}info \texinfoversion\par
80381063 101\hfill Edited by Roland Pesch for Cygnus Support\par
47342e8f 102}
b50e59fe
RP
103%"boxit" macro for figures:
104%Modified from Knuth's ``boxit'' macro from TeXbook (answer to exercise 21.3)
105\gdef\boxit#1#2{\vbox{\hrule\hbox{\vrule\kern3pt
106 \vbox{\parindent=0pt\parskip=0pt\hsize=#1\kern3pt\strut\hfil
107#2\hfil\strut\kern3pt}\kern3pt\vrule}\hrule}}%box with visible outline
108\gdef\ibox#1#2{\hbox to #1{#2\hfil}\kern8pt}% invisible box
47342e8f 109@end tex
93b45514 110
47342e8f
RP
111@vskip 0pt plus 1filll
112Copyright @copyright{} 1991 Free Software Foundation, Inc.
93b45514
RP
113
114Permission is granted to make and distribute verbatim copies of
115this manual provided the copyright notice and this permission notice
116are preserved on all copies.
117
93b45514 118Permission is granted to copy and distribute modified versions of this
47342e8f
RP
119manual under the conditions for verbatim copying, provided also that the
120section entitled ``GNU General Public License'' is included exactly as
121in the original, and provided that the entire resulting derived work is
122distributed under the terms of a permission notice identical to this
123one.
93b45514
RP
124
125Permission is granted to copy and distribute translations of this manual
47342e8f
RP
126into another language, under the above conditions for modified versions,
127except that the section entitled ``GNU General Public License'' may be
0b5b143a
RP
128included in a translation approved by the Free Software Foundation
129instead of in the original English.
93b45514 130@end titlepage
47342e8f 131@page
d0281557 132@ifinfo
242d9c06
SC
133@node Top
134@top Using _AS__
135
d0281557 136This file is a user guide to the GNU assembler @code{_AS__}.
0b5b143a 137_if__(!_GENERIC__)
d0281557
RP
138This version of the file describes @code{_AS__} configured to generate
139code for _HOST__ architectures.
0b5b143a 140_fi__(!_GENERIC__)
7a4c8e5c
RP
141@menu
142* Overview:: Overview
143* Invoking:: Command-Line Options
144* Syntax:: Syntax
24b1493d 145* Sections:: Sections and Relocation
7a4c8e5c
RP
146* Symbols:: Symbols
147* Expressions:: Expressions
148* Pseudo Ops:: Assembler Directives
66b818fb 149* _MACH_DEP__:: Machine Dependent Features
24b1493d 150* Copying:: GNU GENERAL PUBLIC LICENSE
66b818fb 151* Index:: Index
7a4c8e5c 152@end menu
242d9c06 153@end ifinfo
7a4c8e5c 154
242d9c06 155@node Overview
b50e59fe 156@chapter Overview
d0281557
RP
157@iftex
158This manual is a user guide to the GNU assembler @code{_AS__}.
0b5b143a 159_if__(!_GENERIC__)
d0281557
RP
160This version of the manual describes @code{_AS__} configured to generate
161code for _HOST__ architectures.
0b5b143a 162_fi__(!_GENERIC__)
d0281557 163@end iftex
b50e59fe 164
66b818fb
RP
165@cindex invocation summary
166@cindex option summary
167@cindex summary of options
d0281557 168Here is a brief summary of how to invoke @code{_AS__}. For details,
7a4c8e5c 169@pxref{Invoking,,Comand-Line Options}.
b50e59fe 170
7d7ecbdd 171@c We don't use deffn and friends for the following because they seem
b50e59fe 172@c to be limited to one line for the header.
d0281557 173@smallexample
66b818fb 174 _AS__ [ -a | -al | -as ] [ -D ] [ -f ]
80381063 175 [ -I @var{path} ] [ -K ] [ -L ]
d0281557 176 [ -o @var{objfile} ] [ -R ] [ -v ] [ -w ]
7d7ecbdd 177_if__(_A29K__)
09352a5d 178@c am29k has no machine-dependent assembler options
7d7ecbdd 179_fi__(_A29K__)
24b1493d
RP
180_if__(_H8__)
181@c h8/300 has no machine-dependent assembler options
182_fi__(_H8__)
242d9c06
SC
183_if__(_Z8000__)
184@c Z8000 has no machine-dependent assembler options
185_fi__(_Z8000__)
d0281557
RP
186_if__(_I960__)
187@c see md_parse_option in i960.c
188 [ -ACA | -ACA_A | -ACB | -ACC | -AKA | -AKB | -AKC | -AMC ]
189 [ -b ] [ -norelax ]
190_fi__(_I960__)
191_if__(_M680X0__)
192 [ -l ] [ -mc68000 | -mc68010 | -mc68020 ]
193_fi__(_M680X0__)
47342e8f 194 [ -- | @var{files} @dots{} ]
d0281557 195@end smallexample
47342e8f
RP
196
197@table @code
66b818fb
RP
198@item -a | -al | -as
199Turn on assembly listings; @samp{-al}, listing only, @samp{-as}, symbols
200only, @samp{-a}, everything.
b50e59fe
RP
201
202@item -D
203This option is accepted only for script compatibility with calls to
d0281557 204other assemblers; it has no effect on @code{_AS__}.
b50e59fe 205
47342e8f
RP
206@item -f
207``fast''---skip preprocessing (assume source is compiler output)
208
b50e59fe
RP
209@item -I @var{path}
210Add @var{path} to the search list for @code{.include} directives
211
80381063 212@item -K
66b818fb 213_if__((!_GENERIC__) && !_DIFFTABKLUG__)
d0281557 214This option is accepted but has no effect on the _HOST__ family.
66b818fb
RP
215_fi__((!_GENERIC__) && !_DIFFTABKLUG__)
216_if__(_GENERIC__ || _DIFFTABKLUG__)
0b5b143a 217Issue warnings when difference tables altered for long displacements.
66b818fb 218_fi__(_GENERIC__ || _DIFFTABKLUG__)
47342e8f
RP
219
220@item -L
221Keep (in symbol table) local symbols, starting with @samp{L}
222
223@item -o @var{objfile}
d0281557 224Name the object-file output from @code{_AS__}
47342e8f
RP
225
226@item -R
24b1493d 227Fold data section into text section
47342e8f 228
7d7ecbdd
RP
229@item -v
230Announce @code{as} version
231
47342e8f 232@item -W
b50e59fe 233Suppress warning messages
47342e8f 234
d0281557
RP
235_if__(_I960__)
236@item -ACA | -ACA_A | -ACB | -ACC | -AKA | -AKB | -AKC | -AMC
66b818fb
RP
237_if__(_GENERIC__)
238(When configured for Intel 960).
239_fi__(_GENERIC__)
d0281557
RP
240Specify which variant of the 960 architecture is the target.
241
242@item -b
66b818fb
RP
243_if__(_GENERIC__)
244(When configured for Intel 960).
245_fi__(_GENERIC__)
d0281557
RP
246Add code to collect statistics about branches taken.
247
248@item -norelax
66b818fb
RP
249_if__(_GENERIC__)
250(When configured for Intel 960).
251_fi__(_GENERIC__)
252Do not alter compare-and-branch instructions for long displacements;
d0281557
RP
253error if necessary.
254_fi__(_I960__)
255
09352a5d
RP
256_if__(_M680X0__)
257@item -l
7a4c8e5c
RP
258_if__(_GENERIC__)
259(When configured for Motorola 68000).
260_fi__(_GENERIC__)
09352a5d
RP
261Shorten references to undefined symbols, to one word instead of two
262
d0281557 263@item -mc68000 | -mc68010 | -mc68020
7a4c8e5c
RP
264_if__(_GENERIC__)
265(When configured for Motorola 68000).
266_fi__(_GENERIC__)
09352a5d
RP
267Specify what processor in the 68000 family is the target (default 68020)
268_fi__(_M680X0__)
47342e8f
RP
269
270@item -- | @var{files} @dots{}
66b818fb 271Standard input, or source files to assemble
47342e8f
RP
272@end table
273
7a4c8e5c
RP
274@menu
275* Manual:: Structure of this Manual
276* GNU Assembler:: _AS__, the GNU Assembler
277* Object Formats:: Object File Formats
278* Command Line:: Command Line
279* Input Files:: Input Files
280* Object:: Output (Object) File
281* Errors:: Error and Warning Messages
282@end menu
283
242d9c06 284@node Manual
d0281557 285@section Structure of this Manual
66b818fb
RP
286
287@cindex manual, structure and purpose
288This manual is intended to describe what you need to know to use
289@sc{gnu} @code{_AS__}. We cover the syntax expected in source files, including
47342e8f 290notation for symbols, constants, and expressions; the directives that
d0281557 291@code{_AS__} understands; and of course how to invoke @code{_AS__}.
47342e8f 292
0b5b143a 293_if__(!_GENERIC__)
d0281557
RP
294We also cover special features in the _HOST__
295configuration of @code{_AS__}, including assembler directives.
0b5b143a
RP
296_fi__(!_GENERIC__)
297_if__(_GENERIC__)
66b818fb 298This manual also describes some of the machine-dependent features of
09352a5d 299various flavors of the assembler.
0b5b143a 300_fi__(_GENERIC__)
09352a5d 301_if__(_INTERNALS__)
66b818fb 302This manual also describes how the assembler works internally, and
93b45514
RP
303provides some information that may be useful to people attempting to
304port the assembler to another machine.
09352a5d 305_fi__(_INTERNALS__)
d0281557 306@refill
93b45514 307
66b818fb 308@cindex machine instructions (not covered)
47342e8f 309On the other hand, this manual is @emph{not} intended as an introduction
b50e59fe
RP
310to programming in assembly language---let alone programming in general!
311In a similar vein, we make no attempt to introduce the machine
47342e8f
RP
312architecture; we do @emph{not} describe the instruction set, standard
313mnemonics, registers or addressing modes that are standard to a
66b818fb
RP
314particular architecture.
315_if__(_GENERIC__)
316You may want to consult the manufacturer's
b50e59fe 317machine architecture manual for this information.
66b818fb
RP
318_fi__(_GENERIC__)
319_if__(_H8__&&!_GENERIC__)
320For information on the H8/300 machine instruction set, see @cite{H8/300
321Series Programming Manual} (Hitachi ADE--602--025).
322_fi__(_H8__&&!_GENERIC__)
242d9c06
SC
323_if__(_Z8000__&&!_GENERIC__)
324For information on the Z8000 machine instruction set, see @cite{Z8000 CPU Technical Manual}
325_fi__(_Z8000__&&!_GENERIC__)
b50e59fe 326
93b45514 327
47342e8f
RP
328@c I think this is premature---pesch@cygnus.com, 17jan1991
329@ignore
66b818fb 330Throughout this manual, we assume that you are running @dfn{GNU},
93b45514
RP
331the portable operating system from the @dfn{Free Software
332Foundation, Inc.}. This restricts our attention to certain kinds of
47342e8f 333computer (in particular, the kinds of computers that GNU can run on);
93b45514
RP
334once this assumption is granted examples and definitions need less
335qualification.
336
d0281557 337@code{_AS__} is part of a team of programs that turn a high-level
93b45514
RP
338human-readable series of instructions into a low-level
339computer-readable series of instructions. Different versions of
d0281557 340@code{_AS__} are used for different kinds of computer.
47342e8f 341@end ignore
93b45514 342
b50e59fe
RP
343@c There used to be a section "Terminology" here, which defined
344@c "contents", "byte", "word", and "long". Defining "word" to any
345@c particular size is confusing when the .word directive may generate 16
346@c bits on one machine and 32 bits on another; in general, for the user
347@c version of this manual, none of these terms seem essential to define.
348@c They were used very little even in the former draft of the manual;
349@c this draft makes an effort to avoid them (except in names of
d0281557
RP
350@c directives).
351
242d9c06 352@node GNU Assembler
d0281557 353@section _AS__, the GNU Assembler
66b818fb 354
d0281557 355GNU @code{as} is really a family of assemblers.
0b5b143a 356_if__(!_GENERIC__)
66b818fb 357This manual describes @code{_AS__}, a member of that family which is
d0281557 358configured for the _HOST__ architectures.
0b5b143a 359_fi__(!_GENERIC__)
7a4c8e5c
RP
360If you use (or have used) the GNU assembler on one architecture, you
361should find a fairly similar environment when you use it on another
362architecture. Each version has much in common with the others,
363including object file formats, most assembler directives (often called
364@dfn{pseudo-ops)} and assembler syntax.@refill
d0281557 365
66b818fb
RP
366_if__(_GENERIC__||!_H8__)
367@cindex purpose of @sc{gnu} @code{_AS__}
d0281557
RP
368@code{_AS__} is primarily intended to assemble the output of the GNU C
369compiler @code{_GCC__} for use by the linker @code{_LD__}. Nevertheless,
370we've tried to make @code{_AS__} assemble correctly everything that the native
b50e59fe 371assembler would.
66b818fb 372_fi__(_GENERIC__||!_H8__)
09352a5d 373_if__(_VAX__)
d0281557 374Any exceptions are documented explicitly (@pxref{_MACH_DEP__}).
09352a5d 375_fi__(_VAX__)
0b5b143a 376_if__(_GENERIC__||_M680X0__)
d0281557 377This doesn't mean @code{_AS__} always uses the same syntax as another
b50e59fe
RP
378assembler for the same architecture; for example, we know of several
379incompatible versions of 680x0 assembly language syntax.
0b5b143a 380_fi__(_GENERIC__||_M680X0__)
47342e8f 381
d0281557 382Unlike older assemblers, @code{_AS__} is designed to assemble a source
b50e59fe 383program in one pass of the source file. This has a subtle impact on the
7a4c8e5c 384@kbd{.org} directive (@pxref{Org,,@code{.org}}).
93b45514 385
242d9c06 386@node Object Formats
d0281557 387@section Object File Formats
66b818fb
RP
388
389@cindex object file format
d0281557 390The GNU assembler can be configured to produce several alternative
7d7ecbdd
RP
391object file formats. For the most part, this does not affect how you
392write assembly language programs; but directives for debugging symbols
393are typically different in different file formats. @xref{Symbol
394Attributes,,Symbol Attributes}.
0b5b143a 395_if__(!_GENERIC__)
24b1493d
RP
396_if__(!(_I960__||_A29K__))
397_if__(_AOUT__ && (!_COFF__) && (!_ELF__))
7d7ecbdd 398On the _HOST__, @code{_AS__} is configured to produce @code{a.out} format object
d0281557 399files.@refill
24b1493d
RP
400_fi__(_AOUT__ && (!_COFF__) && (!_ELF__))
401_if__((!_AOUT__) && _COFF__ && (!_ELF__))
402On the _HOST__, @code{_AS__} is configured to produce COFF format object
403files.@refill
404_fi__((!_AOUT__) && _COFF__ && (!_ELF__))
405_fi__(!(_I960__||_A29K__))
406_if__(_A29K__)
407On the _HOST__, @code{_AS__} can be configured to produce either
408@code{a.out} or COFF format object files.
409_fi__(_A29K__)
d0281557 410_if__(_I960__)
7d7ecbdd 411On the _HOST__, @code{_AS__} can be configured to produce either @code{b.out} or COFF
d0281557
RP
412format object files.
413_fi__(_I960__)
0b5b143a 414_fi__(!_GENERIC__)
d0281557 415
242d9c06 416@node Command Line
b50e59fe 417@section Command Line
93b45514 418
66b818fb 419@cindex command line conventions
d0281557 420After the program name @code{_AS__}, the command line may contain
66b818fb 421options and file names. Options may appear in any order, and may be
93b45514
RP
422before, after, or between file names. The order of file names is
423significant.
424
66b818fb
RP
425@cindex standard input, as input file
426@kindex --
47342e8f 427@file{--} (two hyphens) by itself names the standard input file
d0281557 428explicitly, as one of the files for @code{_AS__} to assemble.
47342e8f 429
66b818fb 430@cindex options, command line
93b45514
RP
431Except for @samp{--} any command line argument that begins with a
432hyphen (@samp{-}) is an option. Each option changes the behavior of
d0281557 433@code{_AS__}. No option changes the way another option works. An
47342e8f 434option is a @samp{-} followed by one or more letters; the case of
b50e59fe 435the letter is important. All options are optional.
93b45514
RP
436
437Some options expect exactly one file name to follow them. The file
438name may either immediately follow the option's letter (compatible
439with older assemblers) or it may be the next command argument (GNU
440standard). These two command lines are equivalent:
441
d0281557
RP
442@smallexample
443_AS__ -o my-object-file.o mumble.s
444_AS__ -omy-object-file.o mumble.s
445@end smallexample
93b45514 446
242d9c06 447@node Input Files
47342e8f 448@section Input Files
93b45514 449
66b818fb
RP
450@cindex input
451@cindex source program
452@cindex files, input
47342e8f 453We use the phrase @dfn{source program}, abbreviated @dfn{source}, to
d0281557 454describe the program input to one run of @code{_AS__}. The program may
93b45514
RP
455be in one or more files; how the source is partitioned into files
456doesn't change the meaning of the source.
457
b50e59fe
RP
458@c I added "con" prefix to "catenation" just to prove I can overcome my
459@c APL training... pesch@cygnus.com
460The source program is a concatenation of the text in all the files, in the
47342e8f 461order specified.
93b45514 462
d0281557 463Each time you run @code{_AS__} it assembles exactly one source
47342e8f 464program. The source program is made up of one or more files.
93b45514
RP
465(The standard input is also a file.)
466
d0281557 467You give @code{_AS__} a command line that has zero or more input file
93b45514
RP
468names. The input files are read (from left file name to right). A
469command line argument (in any position) that has no special meaning
d0281557 470is taken to be an input file name.
93b45514 471
66b818fb 472If you give @code{_AS__} no file names it attempts to read one input file
d0281557
RP
473from the @code{_AS__} standard input, which is normally your terminal. You
474may have to type @key{ctl-D} to tell @code{_AS__} there is no more program
475to assemble.
93b45514 476
47342e8f
RP
477Use @samp{--} if you need to explicitly name the standard input file
478in your command line.
93b45514 479
d0281557
RP
480If the source is empty, @code{_AS__} will produce a small, empty object
481file.
b50e59fe 482
7a4c8e5c 483@subheading Filenames and Line-numbers
66b818fb
RP
484
485@cindex input file linenumbers
486@cindex line numbers, in input files
487There are two ways of locating a line in the input file (or files) and
488either may be used in reporting error messages. One way refers to a line
93b45514 489number in a physical file; the other refers to a line number in a
66b818fb 490``logical'' file. @xref{Errors, ,Error and Warning Messages}.
93b45514
RP
491
492@dfn{Physical files} are those files named in the command line given
d0281557 493to @code{_AS__}.
93b45514 494
47342e8f
RP
495@dfn{Logical files} are simply names declared explicitly by assembler
496directives; they bear no relation to physical files. Logical file names
d0281557 497help error messages reflect the original source file, when @code{_AS__}
7a4c8e5c
RP
498source is itself synthesized from other files.
499@xref{App-File,,@code{.app-file}}.
93b45514 500
242d9c06 501@node Object
93b45514 502@section Output (Object) File
66b818fb
RP
503
504@cindex object file
505@cindex output file
506@kindex a.out
507@kindex .o
d0281557 508Every time you run @code{_AS__} it produces an output file, which is
93b45514 509your assembly language program translated into numbers. This file
d0281557 510is the object file, named @code{a.out} unless you tell @code{_AS__} to
93b45514
RP
511give it another name by using the @code{-o} option. Conventionally,
512object file names end with @file{.o}. The default name of
47342e8f 513@file{a.out} is used for historical reasons: older assemblers were
93b45514 514capable of assembling self-contained programs directly into a
d0281557 515runnable program.
47342e8f 516@c This may still work, but hasn't been tested.
93b45514 517
66b818fb
RP
518@cindex linker
519@kindex ld
d0281557
RP
520The object file is meant for input to the linker @code{_LD__}. It contains
521assembled program code, information to help @code{_LD__} integrate
b50e59fe 522the assembled program into a runnable file, and (optionally) symbolic
d0281557 523information for the debugger.
93b45514 524
66b818fb
RP
525@c link above to some info file(s) like the description of a.out.
526@c don't forget to describe GNU info as well as Unix lossage.
93b45514 527
242d9c06 528@node Errors
93b45514
RP
529@section Error and Warning Messages
530
66b818fb
RP
531@cindex error messsages
532@cindex warning messages
533@cindex messages from @code{_AS__}
d0281557 534@code{_AS__} may write warnings and error messages to the standard error
66b818fb
RP
535file (usually your terminal). This should not happen when a compiler
536runs @code{_AS__} automatically. Warnings report an assumption made so
d0281557 537that @code{_AS__} could keep assembling a flawed program; errors report a
b50e59fe 538grave problem that stops the assembly.
93b45514 539
66b818fb 540@cindex format of warning messages
93b45514 541Warning messages have the format
66b818fb 542
d0281557 543@smallexample
b50e59fe 544file_name:@b{NNN}:Warning Message Text
d0281557 545@end smallexample
66b818fb 546
0b5b143a 547@noindent
66b818fb 548@cindex line numbers, in warnings/errors
0b5b143a 549(where @b{NNN} is a line number). If a logical file name has
7a4c8e5c 550been given (@pxref{App-File,,@code{.app-file}}) it is used for the filename, otherwise the
b50e59fe 551name of the current input file is used. If a logical line number was
d0281557 552given
7d7ecbdd 553_if__(!_A29K__)
7a4c8e5c 554(@pxref{Line,,@code{.line}})
7d7ecbdd
RP
555_fi__(!_A29K__)
556_if__(_A29K__)
7a4c8e5c 557(@pxref{Ln,,@code{.ln}})
7d7ecbdd 558_fi__(_A29K__)
63f5d795 559then it is used to calculate the number printed,
b50e59fe
RP
560otherwise the actual line in the current source file is printed. The
561message text is intended to be self explanatory (in the grand Unix
63f5d795 562tradition). @refill
93b45514 563
66b818fb 564@cindex format of error messages
93b45514 565Error messages have the format
d0281557 566@smallexample
b50e59fe 567file_name:@b{NNN}:FATAL:Error Message Text
d0281557 568@end smallexample
47342e8f 569The file name and line number are derived as for warning
93b45514
RP
570messages. The actual message text may be rather less explanatory
571because many of them aren't supposed to happen.
572
242d9c06 573@node Invoking
7a4c8e5c 574@chapter Command-Line Options
66b818fb
RP
575
576@cindex options, all versions of @code{_AS__}
577This chapter describes command-line options available in @emph{all}
d0281557 578versions of the GNU assembler; @pxref{_MACH_DEP__}, for options specific
0b5b143a 579_if__(!_GENERIC__)
d0281557 580to the _HOST__.
0b5b143a
RP
581_fi__(!_GENERIC__)
582_if__(_GENERIC__)
583to particular machine architectures.
584_fi__(_GENERIC__)
d0281557 585
80381063 586@section Enable Listings: @code{-a}, @code{-al}, @code{-as}
66b818fb
RP
587
588@kindex -a
589@kindex -al
590@kindex -as
591@cindex listings, enabling
592@cindex assembly listings, enabling
593These options enable listing output from the assembler. @samp{-a} by
594itself requests all listing output; @samp{-al} requests only the
595output-program listing, and @samp{-as} requests only a symbol table
596listing.
597
598Once you have specified one of these options, you can further control
599listing output and its appearance using the directives @code{.list},
600@code{.nolist}, @code{.psize}, @code{.eject}, @code{.title}, and
601@code{.sbttl}.
602
603If you do not request listing output with one of the @samp{-a} options, the
604listing-control directives have no effect.
605
606@section @code{-D}
607
608@kindex -D
b50e59fe
RP
609This option has no effect whatsoever, but it is accepted to make it more
610likely that scripts written for other assemblers will also work with
d0281557 611@code{_AS__}.
b50e59fe 612
66b818fb
RP
613@section Work Faster: @code{-f}
614
615@kindex -f
616@cindex trusted compiler
617@cindex faster processing (@code{-f})
93b45514 618@samp{-f} should only be used when assembling programs written by a
47342e8f 619(trusted) compiler. @samp{-f} stops the assembler from pre-processing
66b818fb
RP
620the input file(s) before assembling them. @xref{Pre-processing,
621,Pre-processing}.
622
b50e59fe
RP
623@quotation
624@emph{Warning:} if the files actually need to be pre-processed (if they
d0281557 625contain comments, for example), @code{_AS__} will not work correctly if
b50e59fe
RP
626@samp{-f} is used.
627@end quotation
628
66b818fb
RP
629@section @code{.include} search path: @code{-I} @var{path}
630
631@kindex -I @var{path}
632@cindex paths for @code{.include}
633@cindex search path for @code{.include}
634@cindex @code{include} directive search path
d0281557 635Use this option to add a @var{path} to the list of directories
7a4c8e5c
RP
636@code{_AS__} will search for files specified in @code{.include}
637directives (@pxref{Include,,@code{.include}}). You may use @code{-I} as
638many times as necessary to include a variety of paths. The current
639working directory is always searched first; after that, @code{_AS__}
640searches any @samp{-I} directories in the same order as they were
641specified (left to right) on the command line.
d0281557 642
80381063 643@section Difference Tables: @code{-K}
66b818fb 644
80381063 645@kindex -K
24b1493d 646_if__((!_GENERIC__) && (!_DIFFTABKLUG__))
d0281557
RP
647On the _HOST__ family, this option is allowed, but has no effect. It is
648permitted for compatibility with the GNU assembler on other platforms,
649where it can be used to warn when the assembler alters the machine code
650generated for @samp{.word} directives in difference tables. The _HOST__
b50e59fe
RP
651family does not have the addressing limitations that sometimes lead to this
652alteration on other platforms.
24b1493d 653_fi__((!_GENERIC__) && (!_DIFFTABKLUG__))
b50e59fe 654
24b1493d 655_if__(_GENERIC__ || _DIFFTABKLUG__ )
66b818fb
RP
656@cindex difference tables, warning
657@cindex warning for altered difference tables
d0281557 658@code{_AS__} sometimes alters the code emitted for directives of the form
7a4c8e5c 659@samp{.word @var{sym1}-@var{sym2}}; @pxref{Word,,@code{.word}}.
80381063 660You can use the @samp{-K} option if you want a warning issued when this
d0281557 661is done.
24b1493d 662_fi__(_GENERIC__ || _DIFFTABKLUG__ )
47342e8f 663
66b818fb
RP
664@section Include Local Labels: @code{-L}
665
666@kindex -L
667@cindex local labels, retaining in output
b50e59fe
RP
668Labels beginning with @samp{L} (upper case only) are called @dfn{local
669labels}. @xref{Symbol Names}. Normally you don't see such labels when
47342e8f 670debugging, because they are intended for the use of programs (like
b50e59fe 671compilers) that compose assembler programs, not for your notice.
d0281557 672Normally both @code{_AS__} and @code{_LD__} discard such labels, so you don't
b50e59fe 673normally debug with them.
93b45514 674
d0281557 675This option tells @code{_AS__} to retain those @samp{L@dots{}} symbols
93b45514 676in the object file. Usually if you do this you also tell the linker
d0281557 677@code{_LD__} to preserve symbols whose names begin with @samp{L}.
93b45514 678
66b818fb
RP
679@section Name the Object File: @code{-o}
680
681@kindex -o
682@cindex naming object file
683@cindex object file name
d0281557 684There is always one object file output when you run @code{_AS__}. By
93b45514
RP
685default it has the name @file{a.out}. You use this option (which
686takes exactly one filename) to give the object file a different name.
687
d0281557 688Whatever the object file is called, @code{_AS__} will overwrite any
93b45514
RP
689existing file of the same name.
690
66b818fb
RP
691@section Join Data and Text Sections: @code{-R}
692
693@kindex -R
694@cindex data and text sections, joining
695@cindex text and data sections, joining
696@cindex joining text and data sections
697@cindex merging text and data sections
d0281557 698@code{-R} tells @code{_AS__} to write the object file as if all
24b1493d 699data-section data lives in the text section. This is only done at
93b45514 700the very last moment: your binary data are the same, but data
24b1493d 701section parts are relocated differently. The data section part of
93b45514 702your object file is zero bytes long because all it bytes are
24b1493d 703appended to the text section. (@xref{Sections,,Sections and Relocation}.)
93b45514 704
b50e59fe 705When you specify @code{-R} it would be possible to generate shorter
47342e8f 706address displacements (because we don't have to cross between text and
24b1493d 707data section). We refrain from doing this simply for compatibility with
d0281557 708older versions of @code{_AS__}. In future, @code{-R} may work this way.
93b45514 709
66b818fb
RP
710_if__(_COFF__)
711When @code{_AS__} is configured for COFF output,
712this option is only useful if you use sections named @samp{.text} and
713@samp{.data}.
714_fi__(_COFF__)
715
716@section Announce Version: @code{-v}
717
718@kindex -v
719@kindex -version
720@cindex @code{_AS__} version
721@cindex version of @code{_AS__}
7d7ecbdd
RP
722You can find out what version of as is running by including the
723option @samp{-v} (which you can also spell as @samp{-version}) on the
724command line.
725
66b818fb
RP
726@section Suppress Warnings: @code{-W}
727
728@kindex -W
729@cindex suppressing warnings
730@cindex warnings, suppressing
d0281557 731@code{_AS__} should never give a warning or error message when
93b45514 732assembling compiler output. But programs written by people often
d0281557 733cause @code{_AS__} to give a warning that a particular assumption was
93b45514 734made. All such warnings are directed to the standard error file.
47342e8f
RP
735If you use this option, no warnings are issued. This option only
736affects the warning messages: it does not change any particular of how
d0281557 737@code{_AS__} assembles your file. Errors, which stop the assembly, are
93b45514
RP
738still reported.
739
242d9c06 740@node Syntax
d0281557 741@chapter Syntax
66b818fb
RP
742
743@cindex machine-independent syntax
744@cindex syntax, machine-independent
47342e8f 745This chapter describes the machine-independent syntax allowed in a
d0281557
RP
746source file. @code{_AS__} syntax is similar to what many other assemblers
747use; it is inspired in BSD 4.2
09352a5d 748_if__(!_VAX__)
b50e59fe 749assembler. @refill
09352a5d
RP
750_fi__(!_VAX__)
751_if__(_VAX__)
d0281557 752assembler, except that @code{_AS__} does not assemble Vax bit-fields.
09352a5d 753_fi__(_VAX__)
b50e59fe 754
7a4c8e5c
RP
755@menu
756* Pre-processing:: Pre-processing
757* Whitespace:: Whitespace
758* Comments:: Comments
759* Symbol Intro:: Symbols
760* Statements:: Statements
761* Constants:: Constants
762@end menu
763
242d9c06 764@node Pre-processing
66b818fb 765@section Pre-Processing
93b45514 766
66b818fb 767@cindex preprocessing
b50e59fe
RP
768The pre-processor:
769@itemize @bullet
66b818fb 770@cindex whitespace, removed by preprocessor
b50e59fe
RP
771@item
772adjusts and removes extra whitespace. It leaves one space or tab before
773the keywords on a line, and turns any other whitespace on the line into
774a single space.
93b45514 775
66b818fb 776@cindex comments, removed by preprocessor
b50e59fe
RP
777@item
778removes all comments, replacing them with a single space, or an
779appropriate number of newlines.
93b45514 780
66b818fb 781@cindex constants, converted by preprocessor
b50e59fe
RP
782@item
783converts character constants into the appropriate numeric values.
784@end itemize
785
786Excess whitespace, comments, and character constants
93b45514
RP
787cannot be used in the portions of the input text that are not
788pre-processed.
789
66b818fb
RP
790@cindex turning preprocessing on and off
791@cindex preprocessing, turning on and off
792@kindex #NO_APP
793@kindex #APP
b50e59fe
RP
794If the first line of an input file is @code{#NO_APP} or the @samp{-f}
795option is given, the input file will not be pre-processed. Within such
796an input file, parts of the file can be pre-processed by putting a line
797that says @code{#APP} before the text that should be pre-processed, and
798putting a line that says @code{#NO_APP} after them. This feature is
799mainly intend to support @code{asm} statements in compilers whose output
800normally does not need to be pre-processed.
93b45514 801
242d9c06 802@node Whitespace
93b45514 803@section Whitespace
66b818fb
RP
804
805@cindex whitespace
93b45514 806@dfn{Whitespace} is one or more blanks or tabs, in any order.
7a4c8e5c
RP
807Whitespace is used to separate symbols, and to make programs neater for
808people to read. Unless within character constants
809(@pxref{Characters,,Character Constants}), any whitespace means the same
810as exactly one space.
93b45514 811
242d9c06 812@node Comments
93b45514 813@section Comments
66b818fb
RP
814
815@cindex comments
d0281557 816There are two ways of rendering comments to @code{_AS__}. In both
93b45514
RP
817cases the comment is equivalent to one space.
818
d0281557
RP
819Anything from @samp{/*} through the next @samp{*/} is a comment.
820This means you may not nest these comments.
93b45514 821
d0281557 822@smallexample
93b45514
RP
823/*
824 The only way to include a newline ('\n') in a comment
825 is to use this sort of comment.
826*/
47342e8f 827
93b45514 828/* This sort of comment does not nest. */
d0281557 829@end smallexample
93b45514 830
66b818fb 831@cindex line comment character
93b45514 832Anything from the @dfn{line comment} character to the next newline
47342e8f 833is considered a comment and is ignored. The line comment character is
0b5b143a
RP
834_if__(_VAX__)
835@samp{#} on the Vax;
836_fi__(_VAX__)
837_if__(_I960__)
838@samp{#} on the i960;
839_fi__(_I960__)
09352a5d 840_if__(_M680X0__)
d0281557 841@samp{|} on the 680x0;
09352a5d 842_fi__(_M680X0__)
7d7ecbdd 843_if__(_A29K__)
d0281557 844@samp{;} for the AMD 29K family;
7d7ecbdd 845_fi__(_A29K__)
24b1493d
RP
846_if__(_H8__)
847@samp{;} for the _HOST__ family;
848_fi__(_H8__)
242d9c06
SC
849_if__(_Z8000__)
850@samp{!} for the Z8000.
851_fi__(_Z8000__)
d0281557 852@pxref{_MACH_DEP__}. @refill
0b5b143a 853@c FIXME: fill in SPARC line comment char
09352a5d 854
0b5b143a 855_if__(_GENERIC__)
b50e59fe
RP
856On some machines there are two different line comment characters. One
857will only begin a comment if it is the first non-whitespace character on
858a line, while the other will always begin a comment.
0b5b143a 859_fi__(_GENERIC__)
93b45514 860
66b818fb
RP
861@kindex #
862@cindex lines starting with @code{#}
863@cindex logical line numbers
864To be compatible with past assemblers, a special interpretation is
93b45514
RP
865given to lines that begin with @samp{#}. Following the @samp{#} an
866absolute expression (@pxref{Expressions}) is expected: this will be
867the logical line number of the @b{next} line. Then a string
868(@xref{Strings}.) is allowed: if present it is a new logical file
869name. The rest of the line, if any, should be whitespace.
870
871If the first non-whitespace characters on the line are not numeric,
872the line is ignored. (Just like a comment.)
d0281557 873@smallexample
93b45514
RP
874 # This is an ordinary comment.
875# 42-6 "new_file_name" # New logical file name
876 # This is logical line # 36.
d0281557 877@end smallexample
93b45514 878This feature is deprecated, and may disappear from future versions
d0281557 879of @code{_AS__}.
93b45514 880
242d9c06 881@node Symbol Intro
93b45514 882@section Symbols
66b818fb 883
66b818fb 884@cindex characters used in symbols
93b45514 885A @dfn{symbol} is one or more characters chosen from the set of all
24b1493d
RP
886letters (both upper and lower case), digits and
887_if__(!_H8__)
888the three characters @samp{_.$}
889_fi__(!_H8__)
890_if__(_H8__)
891the two characters @samp{_.}
892_if__(_GENERIC__)
893On most machines, you can also use @code{$} in symbol names; exceptions
894are noted in @ref{_MACH_DEP__}.
895_fi__(_GENERIC__)
896_fi__(_H8__)
897No symbol may begin with a digit. Case is significant.
b50e59fe
RP
898There is no length limit: all characters are significant. Symbols are
899delimited by characters not in that set, or by the beginning of a file
900(since the source program must end with a newline, the end of a file is
901not a possible symbol delimiter). @xref{Symbols}.
66b818fb 902@cindex length of symbols
93b45514 903
242d9c06 904@node Statements
93b45514 905@section Statements
66b818fb
RP
906
907@cindex statements, structure of
908@cindex line separator character
909@cindex statement separator character
24b1493d
RP
910_if__(!_GENERIC__)
911_if__(!(_A29K__||_H8__))
d0281557
RP
912A @dfn{statement} ends at a newline character (@samp{\n}) or at a
913semicolon (@samp{;}). The newline or semicolon is considered part of
914the preceding statement. Newlines and semicolons within character
915constants are an exception: they don't end statements.
24b1493d 916_fi__(!(_A29K__||_H8__))
7d7ecbdd 917_if__(_A29K__)
d0281557
RP
918A @dfn{statement} ends at a newline character (@samp{\n}) or an ``at''
919sign (@samp{@@}). The newline or at sign is considered part of the
920preceding statement. Newlines and at signs within character constants
921are an exception: they don't end statements.
7d7ecbdd 922_fi__(_A29K__)
24b1493d
RP
923_if__(_H8__)
924A @dfn{statement} ends at a newline character (@samp{\n}) or a dollar
925sign (@samp{$}). The newline or dollar sign is considered part of the
926preceding statement. Newlines and dollar signs within character constants
927are an exception: they don't end statements.
928_fi__(_H8__)
929_fi__(!_GENERIC__)
930_if__(_GENERIC__)
931A @dfn{statement} ends at a newline character (@samp{\n}) or line
932separator character. (The line separator is usually @samp{;}, unless
933this conflicts with the comment character; @pxref{_MACH_DEP__}.) The
934newline or separator character is considered part of the preceding
935statement. Newlines and separators within character constants are an
936exception: they don't end statements.
937_fi__(_GENERIC__)
d0281557 938
66b818fb
RP
939@cindex newline, required at file end
940@cindex EOF, newline must precede
93b45514 941It is an error to end any statement with end-of-file: the last
b50e59fe 942character of any input file should be a newline.@refill
93b45514 943
66b818fb
RP
944@cindex continuing statements
945@cindex multi-line statements
946@cindex statement on multiple lines
93b45514
RP
947You may write a statement on more than one line if you put a
948backslash (@kbd{\}) immediately in front of any newlines within the
d0281557 949statement. When @code{_AS__} reads a backslashed newline both
93b45514
RP
950characters are ignored. You can even put backslashed newlines in
951the middle of symbol names without changing the meaning of your
952source program.
953
47342e8f 954An empty statement is allowed, and may include whitespace. It is ignored.
93b45514 955
66b818fb
RP
956@cindex instructions and directives
957@cindex directives and instructions
b50e59fe
RP
958@c "key symbol" is not used elsewhere in the document; seems pedantic to
959@c @defn{} it in that case, as was done previously... pesch@cygnus.com,
d0281557 960@c 13feb91.
47342e8f 961A statement begins with zero or more labels, optionally followed by a
b50e59fe 962key symbol which determines what kind of statement it is. The key
93b45514 963symbol determines the syntax of the rest of the statement. If the
b50e59fe 964symbol begins with a dot @samp{.} then the statement is an assembler
47342e8f
RP
965directive: typically valid for any computer. If the symbol begins with
966a letter the statement is an assembly language @dfn{instruction}: it
d0281557 967will assemble into a machine language instruction.
0b5b143a 968_if__(_GENERIC__)
d0281557
RP
969Different versions of @code{_AS__} for different computers will
970recognize different instructions. In fact, the same symbol may
971represent a different instruction in a different computer's assembly
972language.@refill
0b5b143a 973_fi__(_GENERIC__)
47342e8f 974
66b818fb
RP
975@cindex @code{:} (label)
976@cindex label (@code{:})
d0281557 977A label is a symbol immediately followed by a colon (@code{:}).
47342e8f 978Whitespace before a label or after a colon is permitted, but you may not
d0281557 979have whitespace between a label's symbol and its colon. @xref{Labels}.
93b45514 980
d0281557 981@smallexample
93b45514 982label: .directive followed by something
24b1493d 983another_label: # This is an empty statement.
93b45514 984 instruction operand_1, operand_2, @dots{}
d0281557 985@end smallexample
93b45514 986
242d9c06 987@node Constants
93b45514 988@section Constants
66b818fb
RP
989
990@cindex constants
93b45514
RP
991A constant is a number, written so that its value is known by
992inspection, without knowing any context. Like this:
f4335d56 993@smallexample
93b45514
RP
994.byte 74, 0112, 092, 0x4A, 0X4a, 'J, '\J # All the same value.
995.ascii "Ring the bell\7" # A string constant.
996.octa 0x123456789abcdef0123456789ABCDEF0 # A bignum.
997.float 0f-314159265358979323846264338327\
99895028841971.693993751E-40 # - pi, a flonum.
f4335d56 999@end smallexample
93b45514 1000
7a4c8e5c
RP
1001@menu
1002* Characters:: Character Constants
1003* Numbers:: Number Constants
1004@end menu
1005
242d9c06 1006@node Characters
93b45514 1007@subsection Character Constants
66b818fb
RP
1008
1009@cindex character constants
1010@cindex constants, character
47342e8f
RP
1011There are two kinds of character constants. A @dfn{character} stands
1012for one character in one byte and its value may be used in
93b45514 1013numeric expressions. String constants (properly called string
47342e8f 1014@emph{literals}) are potentially many bytes and their values may not be
93b45514
RP
1015used in arithmetic expressions.
1016
7a4c8e5c
RP
1017@menu
1018* Strings:: Strings
1019* Chars:: Characters
1020@end menu
1021
242d9c06 1022@node Strings
93b45514 1023@subsubsection Strings
66b818fb
RP
1024
1025@cindex string constants
1026@cindex constants, string
93b45514 1027A @dfn{string} is written between double-quotes. It may contain
47342e8f 1028double-quotes or null characters. The way to get special characters
93b45514 1029into a string is to @dfn{escape} these characters: precede them with
b50e59fe 1030a backslash @samp{\} character. For example @samp{\\} represents
93b45514 1031one backslash: the first @code{\} is an escape which tells
d0281557
RP
1032@code{_AS__} to interpret the second character literally as a backslash
1033(which prevents @code{_AS__} from recognizing the second @code{\} as an
93b45514
RP
1034escape character). The complete list of escapes follows.
1035
66b818fb
RP
1036@cindex escape codes, character
1037@cindex character escape codes
93b45514 1038@table @kbd
93b45514
RP
1039@c @item \a
1040@c Mnemonic for ACKnowledge; for ASCII this is octal code 007.
66b818fb 1041@c
93b45514 1042@item \b
66b818fb
RP
1043@cindex @code{\b} (backspace character)
1044@cindex backspace (@code{\b})
93b45514 1045Mnemonic for backspace; for ASCII this is octal code 010.
66b818fb 1046
93b45514
RP
1047@c @item \e
1048@c Mnemonic for EOText; for ASCII this is octal code 004.
66b818fb 1049@c
93b45514 1050@item \f
66b818fb
RP
1051@cindex @code{\f} (formfeed character)
1052@cindex formfeed (@code{\f})
93b45514 1053Mnemonic for FormFeed; for ASCII this is octal code 014.
66b818fb 1054
93b45514 1055@item \n
66b818fb
RP
1056@cindex @code{\n} (newline character)
1057@cindex newline (@code{\n})
93b45514 1058Mnemonic for newline; for ASCII this is octal code 012.
66b818fb 1059
93b45514
RP
1060@c @item \p
1061@c Mnemonic for prefix; for ASCII this is octal code 033, usually known as @code{escape}.
66b818fb 1062@c
93b45514 1063@item \r
66b818fb
RP
1064@cindex @code{\r} (carriage return character)
1065@cindex carriage return (@code{\r})
93b45514 1066Mnemonic for carriage-Return; for ASCII this is octal code 015.
66b818fb 1067
93b45514
RP
1068@c @item \s
1069@c Mnemonic for space; for ASCII this is octal code 040. Included for compliance with
1070@c other assemblers.
66b818fb 1071@c
93b45514 1072@item \t
66b818fb
RP
1073@cindex @code{\t} (tab)
1074@cindex tab (@code{\t})
93b45514 1075Mnemonic for horizontal Tab; for ASCII this is octal code 011.
66b818fb 1076
93b45514
RP
1077@c @item \v
1078@c Mnemonic for Vertical tab; for ASCII this is octal code 013.
1079@c @item \x @var{digit} @var{digit} @var{digit}
1080@c A hexadecimal character code. The numeric code is 3 hexadecimal digits.
66b818fb 1081@c
93b45514 1082@item \ @var{digit} @var{digit} @var{digit}
66b818fb
RP
1083@cindex @code{\@var{ddd}} (octal character code)
1084@cindex octal character code (@code{\@var{ddd}})
93b45514 1085An octal character code. The numeric code is 3 octal digits.
47342e8f
RP
1086For compatibility with other Unix systems, 8 and 9 are accepted as digits:
1087for example, @code{\008} has the value 010, and @code{\009} the value 011.
66b818fb 1088
93b45514 1089@item \\
66b818fb
RP
1090@cindex @code{\\} (@samp{\} character)
1091@cindex backslash (@code{\\})
93b45514 1092Represents one @samp{\} character.
66b818fb 1093
93b45514
RP
1094@c @item \'
1095@c Represents one @samp{'} (accent acute) character.
1096@c This is needed in single character literals
7a4c8e5c 1097@c (@xref{Characters,,Character Constants}.) to represent
93b45514 1098@c a @samp{'}.
66b818fb 1099@c
93b45514 1100@item \"
66b818fb
RP
1101@cindex @code{\"} (doublequote character)
1102@cindex doublequote (@code{\"})
93b45514
RP
1103Represents one @samp{"} character. Needed in strings to represent
1104this character, because an unescaped @samp{"} would end the string.
66b818fb 1105
93b45514
RP
1106@item \ @var{anything-else}
1107Any other character when escaped by @kbd{\} will give a warning, but
1108assemble as if the @samp{\} was not present. The idea is that if
1109you used an escape sequence you clearly didn't want the literal
d0281557
RP
1110interpretation of the following character. However @code{_AS__} has no
1111other interpretation, so @code{_AS__} knows it is giving you the wrong
93b45514
RP
1112code and warns you of the fact.
1113@end table
1114
1115Which characters are escapable, and what those escapes represent,
1116varies widely among assemblers. The current set is what we think
d0281557 1117the BSD 4.2 assembler recognizes, and is a subset of what most C
93b45514
RP
1118compilers recognize. If you are in doubt, don't use an escape
1119sequence.
1120
242d9c06 1121@node Chars
93b45514 1122@subsubsection Characters
66b818fb
RP
1123
1124@cindex single character constant
1125@cindex character, single
1126@cindex constant, single character
93b45514
RP
1127A single character may be written as a single quote immediately
1128followed by that character. The same escapes apply to characters as
1129to strings. So if you want to write the character backslash, you
1130must write @kbd{'\\} where the first @code{\} escapes the second
b50e59fe 1131@code{\}. As you can see, the quote is an acute accent, not a
d0281557 1132grave accent. A newline
24b1493d
RP
1133_if__(!_GENERIC__)
1134_if__(!(_A29K__||_H8__))
09352a5d 1135(or semicolon @samp{;})
24b1493d 1136_fi__(!(_A29K__||_H8__))
7d7ecbdd 1137_if__(_A29K__)
b50e59fe 1138(or at sign @samp{@@})
7d7ecbdd 1139_fi__(_A29K__)
24b1493d
RP
1140_if__(_H8__)
1141(or dollar sign @samp{$})
1142_fi__(_H8__)
1143_fi__(!_GENERIC__)
d0281557
RP
1144immediately following an acute accent is taken as a literal character
1145and does not count as the end of a statement. The value of a character
93b45514 1146constant in a numeric expression is the machine's byte-wide code for
d0281557
RP
1147that character. @code{_AS__} assumes your character code is ASCII:
1148@kbd{'A} means 65, @kbd{'B} means 66, and so on. @refill
93b45514 1149
242d9c06 1150@node Numbers
93b45514 1151@subsection Number Constants
66b818fb
RP
1152
1153@cindex constants, number
1154@cindex number constants
d0281557 1155@code{_AS__} distinguishes three kinds of numbers according to how they
47342e8f
RP
1156are stored in the target machine. @emph{Integers} are numbers that
1157would fit into an @code{int} in the C language. @emph{Bignums} are
d0281557 1158integers, but they are stored in more than 32 bits. @emph{Flonums}
93b45514
RP
1159are floating point numbers, described below.
1160
7a4c8e5c
RP
1161@menu
1162* Integers:: Integers
1163* Bignums:: Bignums
1164* Flonums:: Flonums
1165_if__(_I960__&&!_GENERIC__)
1166* Bit Fields:: Bit Fields
1167_fi__(_I960__&&!_GENERIC__)
1168@end menu
1169
242d9c06 1170@node Integers
93b45514 1171@subsubsection Integers
66b818fb
RP
1172@cindex integers
1173@cindex constants, integer
1174
1175@cindex binary integers
1176@cindex integers, binary
b50e59fe
RP
1177A binary integer is @samp{0b} or @samp{0B} followed by zero or more of
1178the binary digits @samp{01}.
1179
66b818fb
RP
1180@cindex octal integers
1181@cindex integers, octal
93b45514
RP
1182An octal integer is @samp{0} followed by zero or more of the octal
1183digits (@samp{01234567}).
1184
66b818fb
RP
1185@cindex decimal integers
1186@cindex integers, decimal
93b45514
RP
1187A decimal integer starts with a non-zero digit followed by zero or
1188more digits (@samp{0123456789}).
1189
66b818fb
RP
1190@cindex hexadecimal integers
1191@cindex integers, hexadecimal
93b45514
RP
1192A hexadecimal integer is @samp{0x} or @samp{0X} followed by one or
1193more hexadecimal digits chosen from @samp{0123456789abcdefABCDEF}.
1194
47342e8f 1195Integers have the usual values. To denote a negative integer, use
b50e59fe 1196the prefix operator @samp{-} discussed under expressions
7a4c8e5c 1197(@pxref{Prefix Ops,,Prefix Operators}).
93b45514 1198
242d9c06 1199@node Bignums
93b45514 1200@subsubsection Bignums
66b818fb
RP
1201
1202@cindex bignums
1203@cindex constants, bignum
93b45514
RP
1204A @dfn{bignum} has the same syntax and semantics as an integer
1205except that the number (or its negative) takes more than 32 bits to
1206represent in binary. The distinction is made because in some places
1207integers are permitted while bignums are not.
1208
242d9c06 1209@node Flonums
93b45514 1210@subsubsection Flonums
66b818fb
RP
1211@cindex flonums
1212@cindex floating point numbers
1213@cindex constants, floating point
1214
1215@cindex precision, floating point
b50e59fe 1216A @dfn{flonum} represents a floating point number. The translation is
66b818fb 1217indirect: a decimal floating point number from the text is converted by
d0281557 1218@code{_AS__} to a generic binary floating point number of more than
b50e59fe
RP
1219sufficient precision. This generic floating point number is converted
1220to a particular computer's floating point format (or formats) by a
d0281557 1221portion of @code{_AS__} specialized to that computer.
93b45514
RP
1222
1223A flonum is written by writing (in order)
1224@itemize @bullet
1225@item
1226The digit @samp{0}.
1227@item
66b818fb 1228A letter, to tell @code{_AS__} the rest of the number is a flonum.
0b5b143a 1229_if__(_GENERIC__)
66b818fb 1230@kbd{e} is recommended. Case is not important.
0b5b143a
RP
1231@ignore
1232@c FIXME: verify if flonum syntax really this vague for most cases
1233 (Any otherwise illegal letter
1234will work here, but that might be changed. Vax BSD 4.2 assembler seems
1235to allow any of @samp{defghDEFGH}.)
1236@end ignore
1237_fi__(_GENERIC__)
24b1493d 1238_if__(_A29K__||_H8__)
0b5b143a 1239_if__(_GENERIC__)
24b1493d 1240On the AMD 29K and H8/300 architectures, the letter must be:
0b5b143a 1241_fi__(_GENERIC__)
66b818fb 1242One of the letters @samp{DFPRSX} (in upper or lower case).
24b1493d 1243_fi__(_A29K__||_H8__)
d0281557 1244_if__(_I960__)
0b5b143a
RP
1245_if__(_GENERIC__)
1246On the Intel 960 architecture, the letter must be:
1247_fi__(_GENERIC__)
66b818fb 1248One of the letters @samp{DFT} (in upper or lower case).
d0281557 1249_fi__(_I960__)
93b45514
RP
1250@item
1251An optional sign: either @samp{+} or @samp{-}.
1252@item
47342e8f 1253An optional @dfn{integer part}: zero or more decimal digits.
93b45514 1254@item
66b818fb 1255An optional @dfn{fractional part}: @samp{.} followed by zero
93b45514
RP
1256or more decimal digits.
1257@item
1258An optional exponent, consisting of:
1259@itemize @bullet
1260@item
b50e59fe 1261An @samp{E} or @samp{e}.
d0281557
RP
1262@c I can't find a config where "EXP_CHARS" is other than 'eE', but in
1263@c principle this can perfectly well be different on different targets.
93b45514
RP
1264@item
1265Optional sign: either @samp{+} or @samp{-}.
1266@item
1267One or more decimal digits.
1268@end itemize
1269@end itemize
1270
66b818fb 1271At least one of the integer part or the fractional part must be
47342e8f 1272present. The floating point number has the usual base-10 value.
93b45514 1273
d0281557 1274@code{_AS__} does all processing using integers. Flonums are computed
47342e8f 1275independently of any floating point hardware in the computer running
d0281557
RP
1276@code{_AS__}.
1277
7a4c8e5c 1278_if__(_I960__&&!_GENERIC__)
d0281557
RP
1279@c Bit fields are written as a general facility but are also controlled
1280@c by a conditional-compilation flag---which is as of now (21mar91)
1281@c turned on only by the i960 config of GAS.
242d9c06 1282@node Bit Fields
d0281557 1283@subsubsection Bit Fields
66b818fb
RP
1284
1285@cindex bit fields
1286@cindex constants, bit field
d0281557
RP
1287You can also define numeric constants as @dfn{bit fields}.
1288specify two numbers separated by a colon---
1289@example
1290@var{mask}:@var{value}
1291@end example
1292@noindent
1293the first will act as a mask; @code{_AS__} will bitwise-and it with the
1294second value.
1295
1296The resulting number is then packed
0b5b143a 1297_if__(_GENERIC__)
7a4c8e5c 1298@c this conditional paren in case bit fields turned on elsewhere than 960
d0281557 1299(in host-dependent byte order)
0b5b143a 1300_fi__(_GENERIC__)
d0281557
RP
1301into a field whose width depends on which assembler directive has the
1302bit-field as its argument. Overflow (a result from the bitwise and
1303requiring more binary digits to represent) is not an error; instead,
1304more constants are generated, of the specified width, beginning with the
1305least significant digits.@refill
1306
1307The directives @code{.byte}, @code{.hword}, @code{.int}, @code{.long},
1308@code{.short}, and @code{.word} accept bit-field arguments.
7a4c8e5c 1309_fi__(_I960__&&!_GENERIC__)
93b45514 1310
242d9c06 1311@node Sections
24b1493d 1312@chapter Sections and Relocation
66b818fb
RP
1313@cindex sections
1314@cindex relocation
d0281557 1315
7a4c8e5c 1316@menu
24b1493d
RP
1317* Secs Background:: Background
1318* _LD__ Sections:: _LD__ Sections
1319* _AS__ Sections:: _AS__ Internal Sections
24b1493d 1320* Sub-Sections:: Sub-Sections
24b1493d 1321* bss:: bss Section
7a4c8e5c
RP
1322@end menu
1323
242d9c06 1324@node Secs Background
b50e59fe 1325@section Background
66b818fb 1326
24b1493d 1327Roughly, a section is a range of addresses, with no gaps; all data
d0281557 1328``in'' those addresses is treated the same for some particular purpose.
24b1493d 1329For example there may be a ``read only'' section.
93b45514 1330
66b818fb
RP
1331@cindex linker, and assembler
1332@cindex assembler, and linker
d0281557
RP
1333The linker @code{_LD__} reads many object files (partial programs) and
1334combines their contents to form a runnable program. When @code{_AS__}
47342e8f 1335emits an object file, the partial program is assumed to start at address
d0281557 13360. @code{_LD__} will assign the final addresses the partial program
47342e8f
RP
1337occupies, so that different partial programs don't overlap. This is
1338actually an over-simplification, but it will suffice to explain how
24b1493d 1339@code{_AS__} uses sections.
93b45514 1340
d0281557 1341@code{_LD__} moves blocks of bytes of your program to their run-time
93b45514 1342addresses. These blocks slide to their run-time addresses as rigid
47342e8f 1343units; their length does not change and neither does the order of bytes
24b1493d
RP
1344within them. Such a rigid unit is called a @emph{section}. Assigning
1345run-time addresses to sections is called @dfn{relocation}. It includes
47342e8f 1346the task of adjusting mentions of object-file addresses so they refer to
d0281557 1347the proper run-time addresses.
66b818fb
RP
1348_if__(_H8__)
1349For the H8/300, @code{_AS__} pads sections if needed to ensure they end
1350on a word (sixteen bit) boundary.
1351_fi__(_H8__)
93b45514 1352
66b818fb 1353@cindex standard @code{_AS__} sections
24b1493d
RP
1354An object file written by @code{_AS__} has at least three sections, any
1355of which may be empty. These are named @dfn{text}, @dfn{data} and
1356@dfn{bss} sections.
93b45514 1357
24b1493d
RP
1358_if__(_COFF__)
1359_if__(_GENERIC__)
1360When it generates COFF output,
1361_fi__(_GENERIC__)
1362@code{_AS__} can also generate whatever other named sections you specify
1363using the @samp{.section} directive (@pxref{Section,,@code{.section}}).
1364If you don't use any directives that place output in the @samp{.text}
1365or @samp{.data} sections, these sections will still exist, but will be empty.
d0281557
RP
1366_fi__(_COFF__)
1367
24b1493d
RP
1368Within the object file, the text section starts at address @code{0}, the
1369data section follows, and the bss section follows the data section.
d0281557 1370
24b1493d 1371To let @code{_LD__} know which data will change when the sections are
d0281557 1372relocated, and how to change that data, @code{_AS__} also writes to the
93b45514 1373object file details of the relocation needed. To perform relocation
d0281557 1374@code{_LD__} must know, each time an address in the object
47342e8f 1375file is mentioned:
93b45514
RP
1376@itemize @bullet
1377@item
47342e8f
RP
1378Where in the object file is the beginning of this reference to
1379an address?
93b45514 1380@item
47342e8f 1381How long (in bytes) is this reference?
93b45514 1382@item
24b1493d 1383Which section does the address refer to? What is the numeric value of
b50e59fe 1384@display
24b1493d 1385(@var{address}) @minus{} (@var{start-address of section})?
b50e59fe 1386@end display
93b45514 1387@item
b50e59fe 1388Is the reference to an address ``Program-Counter relative''?
93b45514
RP
1389@end itemize
1390
66b818fb
RP
1391@cindex addresses, format of
1392@cindex section-relative addressing
d0281557
RP
1393In fact, every address @code{_AS__} ever uses is expressed as
1394@display
24b1493d 1395(@var{section}) + (@var{offset into section})
d0281557
RP
1396@end display
1397@noindent
24b1493d
RP
1398Further, every expression @code{_AS__} computes is of this section-relative
1399nature. @dfn{Absolute expression} means an expression with section
1400``absolute'' (@pxref{_LD__ Sections}). A @dfn{pass1 expression} means
1401an expression with section ``pass1'' (@pxref{_AS__ Sections,,_AS__
1402Internal Sections}). In this manual we use the notation @{@var{secname}
1403@var{N}@} to mean ``offset @var{N} into section @var{secname}''.
1404
1405Apart from text, data and bss sections you need to know about the
1406@dfn{absolute} section. When @code{_LD__} mixes partial programs,
66b818fb 1407addresses in the absolute section remain unchanged. For example, address
d0281557 1408@code{@{absolute 0@}} is ``relocated'' to run-time address 0 by @code{_LD__}.
24b1493d
RP
1409Although two partial programs' data sections will not overlap addresses
1410after linking, @emph{by definition} their absolute sections will overlap.
b50e59fe
RP
1411Address @code{@{absolute@ 239@}} in one partial program will always be the same
1412address when the program is running as address @code{@{absolute@ 239@}} in any
d0281557 1413other partial program.
47342e8f 1414
24b1493d
RP
1415The idea of sections is extended to the @dfn{undefined} section. Any
1416address whose section is unknown at assembly time is by definition
d0281557 1417rendered @{undefined @var{U}@}---where @var{U} will be filled in later.
47342e8f 1418Since numbers are always defined, the only way to generate an undefined
93b45514
RP
1419address is to mention an undefined symbol. A reference to a named
1420common block would be such a symbol: its value is unknown at assembly
24b1493d 1421time so it has section @emph{undefined}.
93b45514 1422
24b1493d 1423By analogy the word @emph{section} is used to describe groups of sections in
d0281557 1424the linked program. @code{_LD__} puts all partial programs' text
24b1493d
RP
1425sections in contiguous addresses in the linked program. It is
1426customary to refer to the @emph{text section} of a program, meaning all
1427the addresses of all partial program's text sections. Likewise for
1428data and bss sections.
93b45514 1429
24b1493d 1430Some sections are manipulated by @code{_LD__}; others are invented for
d0281557 1431use of @code{_AS__} and have no meaning except during assembly.
47342e8f 1432
242d9c06 1433@node _LD__ Sections
24b1493d
RP
1434@section _LD__ Sections
1435@code{_LD__} deals with just four kinds of sections, summarized below.
b50e59fe
RP
1436
1437@table @strong
47342e8f 1438
24b1493d 1439_if__(_GENERIC__||_COFF__)
66b818fb
RP
1440@cindex named sections
1441@cindex sections, named
24b1493d
RP
1442@item named sections
1443_fi__(_GENERIC__||_COFF__)
1444_if__(_AOUT__||_BOUT__)
66b818fb
RP
1445@cindex text section
1446@cindex data section
24b1493d
RP
1447@item text section
1448@itemx data section
1449_fi__(_AOUT__||_BOUT__)
1450These sections hold your program. @code{_AS__} and @code{_LD__} treat them as
1451separate but equal sections. Anything you can say of one section is
1452true another.
1453_if__(_AOUT__||_BOUT__)
1454When the program is running, however, it is
1455customary for the text section to be unalterable. The
1456text section is often shared among processes: it will contain
1457instructions, constants and the like. The data section of a running
b50e59fe 1458program is usually alterable: for example, C variables would be stored
24b1493d
RP
1459in the data section.
1460_fi__(_AOUT__||_BOUT__)
47342e8f 1461
66b818fb 1462@cindex bss section
24b1493d
RP
1463@item bss section
1464This section contains zeroed bytes when your program begins running. It
47342e8f 1465is used to hold unitialized variables or common storage. The length of
24b1493d 1466each partial program's bss section is important, but because it starts
47342e8f 1467out containing zeroed bytes there is no need to store explicit zero
24b1493d 1468bytes in the object file. The bss section was invented to eliminate
d0281557 1469those explicit zeros from object files.
47342e8f 1470
66b818fb 1471@cindex absolute section
24b1493d
RP
1472@item absolute section
1473Address 0 of this section is always ``relocated'' to runtime address 0.
d0281557 1474This is useful if you want to refer to an address that @code{_LD__} must
47342e8f 1475not change when relocating. In this sense we speak of absolute
d0281557 1476addresses being ``unrelocatable'': they don't change during relocation.
47342e8f 1477
66b818fb 1478@cindex undefined section
24b1493d
RP
1479@item undefined section
1480This ``section'' is a catch-all for address references to objects not in
1481the preceding sections.
47342e8f 1482@c FIXME: ref to some other doc on obj-file formats could go here.
93b45514 1483@end table
47342e8f 1484
66b818fb 1485@cindex relocation example
24b1493d
RP
1486An idealized example of three relocatable sections follows.
1487_if__(_COFF__)
66b818fb 1488The example uses the traditional section names @samp{.text} and @samp{.data}.
24b1493d
RP
1489_fi__(_COFF__)
1490Memory addresses are on the horizontal axis.
93b45514 1491
7d7ecbdd 1492@c TEXI2ROFF-KILL
b50e59fe 1493@ifinfo
7d7ecbdd 1494@c END TEXI2ROFF-KILL
d0281557 1495@smallexample
93b45514
RP
1496 +-----+----+--+
1497partial program # 1: |ttttt|dddd|00|
1498 +-----+----+--+
1499
1500 text data bss
1501 seg. seg. seg.
1502
1503 +---+---+---+
1504partial program # 2: |TTT|DDD|000|
1505 +---+---+---+
1506
1507 +--+---+-----+--+----+---+-----+~~
1508linked program: | |TTT|ttttt| |dddd|DDD|00000|
1509 +--+---+-----+--+----+---+-----+~~
1510
1511 addresses: 0 @dots{}
d0281557 1512@end smallexample
7d7ecbdd 1513@c TEXI2ROFF-KILL
b50e59fe 1514@end ifinfo
24b1493d 1515@c FIXME make sure no page breaks inside figure!!
b50e59fe 1516@tex
d0281557 1517
66b818fb 1518\line{\it Partial program \#1: \hfil}
d0281557
RP
1519\line{\ibox{2.5cm}{\tt text}\ibox{2cm}{\tt data}\ibox{1cm}{\tt bss}\hfil}
1520\line{\boxit{2.5cm}{\tt ttttt}\boxit{2cm}{\tt dddd}\boxit{1cm}{\tt 00}\hfil}
1521
66b818fb 1522\line{\it Partial program \#2: \hfil}
d0281557
RP
1523\line{\ibox{1cm}{\tt text}\ibox{1.5cm}{\tt data}\ibox{1cm}{\tt bss}\hfil}
1524\line{\boxit{1cm}{\tt TTT}\boxit{1.5cm}{\tt DDDD}\boxit{1cm}{\tt 000}\hfil}
1525
66b818fb 1526\line{\it linked program: \hfil}
d0281557
RP
1527\line{\ibox{.5cm}{}\ibox{1cm}{\tt text}\ibox{2.5cm}{}\ibox{.75cm}{}\ibox{2cm}{\tt data}\ibox{1.5cm}{}\ibox{2cm}{\tt bss}\hfil}
1528\line{\boxit{.5cm}{}\boxit{1cm}{\tt TTT}\boxit{2.5cm}{\tt
b50e59fe 1529ttttt}\boxit{.75cm}{}\boxit{2cm}{\tt dddd}\boxit{1.5cm}{\tt
d0281557
RP
1530DDDD}\boxit{2cm}{\tt 00000}\ \dots\hfil}
1531
66b818fb 1532\line{\it addresses: \hfil}
d0281557
RP
1533\line{0\dots\hfil}
1534
b50e59fe 1535@end tex
7d7ecbdd 1536@c END TEXI2ROFF-KILL
93b45514 1537
242d9c06 1538@node _AS__ Sections
24b1493d 1539@section _AS__ Internal Sections
66b818fb
RP
1540
1541@cindex internal @code{_AS__} sections
1542@cindex sections in messages, internal
24b1493d
RP
1543These sections are meant only for the internal use of @code{_AS__}. They
1544have no meaning at run-time. You don't really need to know about these
1545sections for most purposes; but they can be mentioned in @code{_AS__}
1546warning messages, so it might be helpful to have an idea of their
1547meanings to @code{_AS__}. These sections are used to permit the
1548value of every expression in your assembly language program to be a
1549section-relative address.
93b45514 1550
d0281557 1551@table @b
24b1493d 1552@item absent
66b818fb 1553@cindex absent (internal section)
24b1493d
RP
1554An expression was expected and none was found.
1555
1556@item ASSEMBLER-INTERNAL-LOGIC-ERROR!
66b818fb 1557@cindex assembler internal logic error
24b1493d
RP
1558An internal assembler logic error has been found. This means there is a
1559bug in the assembler.
1560
1561@item bignum/flonum
66b818fb 1562@cindex bignum/flonum (internal section)
24b1493d
RP
1563If a number can't be written as a C @code{int} constant (a bignum or a
1564flonum, but not an integer), it is recorded as belonging to this
1565``section''. @code{_AS__} has to remember that a flonum or a bignum
1566does not fit into 32 bits, and cannot be an argument (@pxref{Arguments})
1567in an expression: this is done by making a flonum or bignum be in a
1568separate internal section. This is purely for internal @code{_AS__}
1569convenience; bignum/flonum section behaves similarly to absolute
1570section.
1571
1572@item pass1 section
66b818fb 1573@cindex pass1 (internal section)
93b45514 1574The expression was impossible to evaluate in the first pass. The
47342e8f
RP
1575assembler will attempt a second pass (second reading of the source) to
1576evaluate the expression. Your expression mentioned an undefined symbol
24b1493d 1577in a way that defies the one-pass (section + offset in section) assembly
d0281557 1578process. No compiler need emit such an expression.
47342e8f 1579
b50e59fe 1580@quotation
d0281557 1581@emph{Warning:} the second pass is currently not implemented. @code{_AS__}
b50e59fe
RP
1582will abort with an error message if one is required.
1583@end quotation
47342e8f 1584
24b1493d 1585@item difference section
66b818fb 1586@cindex difference (internal section)
93b45514 1587As an assist to the C compiler, expressions of the forms
b50e59fe 1588@display
d0281557
RP
1589 (@var{undefined symbol}) @minus{} (@var{expression})
1590 @var{something} @minus{} (@var{undefined symbol})
b50e59fe
RP
1591 (@var{undefined symbol}) @minus{} (@var{undefined symbol})
1592@end display
66b818fb 1593
24b1493d 1594are permitted, and belong to the difference section. @code{_AS__}
47342e8f
RP
1595re-evaluates such expressions after the source file has been read and
1596the symbol table built. If by that time there are no undefined symbols
24b1493d 1597in the expression then the expression assumes a new section. The
d0281557
RP
1598intention is to permit statements like
1599@samp{.word label - base_of_table}
47342e8f
RP
1600to be assembled in one pass where both @code{label} and
1601@code{base_of_table} are undefined. This is useful for compiling C and
1602Algol switch statements, Pascal case statements, FORTRAN computed goto
d0281557 1603statements and the like.
24b1493d
RP
1604@c FIXME item debug
1605@c FIXME item transfer[t] vector preload
1606@c FIXME item transfer[t] vector postload
1607@c FIXME item register
93b45514
RP
1608@end table
1609
242d9c06 1610@node Sub-Sections
24b1493d 1611@section Sub-Sections
66b818fb
RP
1612
1613@cindex numbered subsections
1614@cindex grouping data
1615_if__(_AOUT__||_BOUT__)
24b1493d
RP
1616Assembled bytes
1617_if__(_COFF__)
1618conventionally
1619_fi__(_COFF__)
66b818fb
RP
1620fall into two sections: text and data.
1621_fi__(_AOUT__||_BOUT__)
1622You may have separate groups of
1623_if__(_COFF__||_GENERIC__)
1624data in named sections
1625_fi__(_COFF__||_GENERIC__)
1626_if__((_AOUT__||_BOUT__)&&!_GENERIC__)
1627text or data
1628_fi__((_AOUT__||_BOUT__)&&!_GENERIC__)
1629that you want to end up near to each other in the object
1630file, even though they are not contiguous in the assembler source.
1631@code{_AS__} allows you to use @dfn{subsections} for this purpose.
1632Within each section, there can be numbered subsections with
24b1493d
RP
1633values from 0 to 8192. Objects assembled into the same subsection will
1634be grouped with other objects in the same subsection when they are all
1635put into the object file. For example, a compiler might want to store
1636constants in the text section, but might not want to have them
1637interspersed with the program being assembled. In this case, the
1638compiler could issue a @samp{.text 0} before each section of code being
1639output, and a @samp{.text 1} before each group of constants being output.
1640
1641Subsections are optional. If you don't use subsections, everything
1642will be stored in subsection number zero.
93b45514 1643
0b5b143a 1644_if__(_GENERIC__)
24b1493d
RP
1645Each subsection is zero-padded up to a multiple of four bytes.
1646(Subsections may be padded a different amount on different flavors
d0281557 1647of @code{_AS__}.)
0b5b143a 1648_fi__(_GENERIC__)
66b818fb
RP
1649_if__(!_GENERIC__)
1650_if__(_H8__)
1651On the H8/300 platform, each subsection is zero-padded to a word
1652boundary (two bytes).
1653_fi__(_H8__)
d0281557 1654_if__(_I960__)
24b1493d 1655@c FIXME section padding (alignment)?
d0281557
RP
1656@c Rich Pixley says padding here depends on target obj code format; that
1657@c doesn't seem particularly useful to say without further elaboration,
1658@c so for now I say nothing about it. If this is a generic BFD issue,
1659@c these paragraphs might need to vanish from this manual, and be
1660@c discussed in BFD chapter of binutils (or some such).
1661_fi__(_I960__)
7d7ecbdd 1662_if__(_A29K__)
66b818fb
RP
1663On the AMD 29K family, no particular padding is added to section or
1664subsection sizes; _AS__ forces no alignment on this platform.
7d7ecbdd 1665_fi__(_A29K__)
66b818fb
RP
1666_fi__(!_GENERIC__)
1667
24b1493d 1668Subsections appear in your object file in numeric order, lowest numbered
b50e59fe 1669to highest. (All this to be compatible with other people's assemblers.)
24b1493d 1670The object file contains no representation of subsections; @code{_LD__} and
b50e59fe 1671other programs that manipulate object files will see no trace of them.
24b1493d
RP
1672They just see all your text subsections as a text section, and all your
1673data subsections as a data section.
93b45514 1674
24b1493d 1675To specify which subsection you want subsequent statements assembled
66b818fb
RP
1676into, use a numeric argument to specify it, in a @samp{.text
1677@var{expression}} or a @samp{.data @var{expression}} statement.
1678_if__(_COFF__)
1679_if__(_GENERIC__)
1680When generating COFF output, you
1681_fi__(_GENERIC__)
1682_if__(!_GENERIC__)
1683You
1684_fi__(!_GENERIC__)
1685can also use an extra subsection
1686argument with arbitrary named sections: @samp{.section @var{name},
1687@var{expression}}.
1688_fi__(_COFF__)
1689@var{Expression} should be an absolute expression.
1690(@xref{Expressions}.) If you just say @samp{.text} then @samp{.text 0}
1691is assumed. Likewise @samp{.data} means @samp{.data 0}. Assembly
1692begins in @code{text 0}. For instance:
d0281557 1693@smallexample
24b1493d
RP
1694.text 0 # The default subsection is text 0 anyway.
1695.ascii "This lives in the first text subsection. *"
93b45514 1696.text 1
24b1493d 1697.ascii "But this lives in the second text subsection."
93b45514 1698.data 0
24b1493d
RP
1699.ascii "This lives in the data section,"
1700.ascii "in the first data subsection."
93b45514 1701.text 0
24b1493d 1702.ascii "This lives in the first text section,"
93b45514 1703.ascii "immediately following the asterisk (*)."
d0281557 1704@end smallexample
93b45514 1705
24b1493d
RP
1706Each section has a @dfn{location counter} incremented by one for every
1707byte assembled into that section. Because subsections are merely a
1708convenience restricted to @code{_AS__} there is no concept of a subsection
b50e59fe
RP
1709location counter. There is no way to directly manipulate a location
1710counter---but the @code{.align} directive will change it, and any label
1711definition will capture its current value. The location counter of the
24b1493d 1712section that statements are being assembled into is said to be the
93b45514
RP
1713@dfn{active} location counter.
1714
242d9c06 1715@node bss
24b1493d 1716@section bss Section
66b818fb
RP
1717
1718@cindex bss section
1719@cindex common variable storage
24b1493d
RP
1720The bss section is used for local common variable storage.
1721You may allocate address space in the bss section, but you may
93b45514 1722not dictate data to load into it before your program executes. When
b50e59fe 1723your program starts running, all the contents of the bss
24b1493d 1724section are zeroed bytes.
93b45514 1725
24b1493d
RP
1726Addresses in the bss section are allocated with special directives; you
1727may not assemble anything directly into the bss section. Hence there
1728are no bss subsections. @xref{Comm,,@code{.comm}},
7a4c8e5c 1729@pxref{Lcomm,,@code{.lcomm}}.
93b45514 1730
242d9c06 1731@node Symbols
93b45514 1732@chapter Symbols
66b818fb
RP
1733
1734@cindex symbols
47342e8f
RP
1735Symbols are a central concept: the programmer uses symbols to name
1736things, the linker uses symbols to link, and the debugger uses symbols
d0281557 1737to debug.
47342e8f 1738
b50e59fe 1739@quotation
66b818fb 1740@cindex debuggers, and symbol order
d0281557 1741@emph{Warning:} @code{_AS__} does not place symbols in the object file in
b50e59fe
RP
1742the same order they were declared. This may break some debuggers.
1743@end quotation
93b45514 1744
7a4c8e5c
RP
1745@menu
1746* Labels:: Labels
1747* Setting Symbols:: Giving Symbols Other Values
1748* Symbol Names:: Symbol Names
1749* Dot:: The Special Dot Symbol
1750* Symbol Attributes:: Symbol Attributes
1751@end menu
1752
242d9c06 1753@node Labels
93b45514 1754@section Labels
66b818fb
RP
1755
1756@cindex labels
93b45514 1757A @dfn{label} is written as a symbol immediately followed by a colon
b50e59fe 1758@samp{:}. The symbol then represents the current value of the
93b45514
RP
1759active location counter, and is, for example, a suitable instruction
1760operand. You are warned if you use the same symbol to represent two
1761different locations: the first definition overrides any other
1762definitions.
1763
242d9c06 1764@node Setting Symbols
93b45514 1765@section Giving Symbols Other Values
66b818fb
RP
1766
1767@cindex assigning values to symbols
1768@cindex symbol values, assigning
b50e59fe
RP
1769A symbol can be given an arbitrary value by writing a symbol, followed
1770by an equals sign @samp{=}, followed by an expression
93b45514 1771(@pxref{Expressions}). This is equivalent to using the @code{.set}
7a4c8e5c 1772directive. @xref{Set,,@code{.set}}.
93b45514 1773
242d9c06 1774@node Symbol Names
93b45514 1775@section Symbol Names
66b818fb
RP
1776
1777@cindex symbol names
1778@cindex names, symbol
24b1493d
RP
1779Symbol names begin with a letter or with one of
1780_if__(!_H8__)
1781@samp{_.$}
1782_fi__(!_H8__)
1783_if__(_H8__)
1784@samp{_.}
1785_if__(_GENERIC__)
1786(On most machines, you can also use @code{$} in symbol names; exceptions
1787are noted in @ref{_MACH_DEP__}.)
1788_fi__(_GENERIC__)
1789_fi__(_H8__)
1790That character may be followed by any string of digits, letters,
1791_if__(!_H8__)
1792underscores and dollar signs.
1793_fi__(!_H8__)
1794_if__(_H8__)
1795_if__(_GENERIC__)
66b818fb 1796dollar signs (unless otherwise noted in @ref{_MACH_DEP__}),
24b1493d
RP
1797_fi__(_GENERIC__)
1798and underscores.
1799_fi__(_H8__)
1800Case of letters is significant:
93b45514
RP
1801@code{foo} is a different symbol name than @code{Foo}.
1802
7d7ecbdd 1803_if__(_A29K__)
b50e59fe
RP
1804For the AMD 29K family, @samp{?} is also allowed in the
1805body of a symbol name, though not at its beginning.
7d7ecbdd 1806_fi__(_A29K__)
b50e59fe 1807
47342e8f
RP
1808Each symbol has exactly one name. Each name in an assembly language
1809program refers to exactly one symbol. You may use that symbol name any
1810number of times in a program.
93b45514 1811
7a4c8e5c 1812@subheading Local Symbol Names
93b45514 1813
66b818fb
RP
1814@cindex local symbol names
1815@cindex symbol names, local
1816@cindex temporary symbol names
1817@cindex symbol names, temporary
93b45514 1818Local symbols help compilers and programmers use names temporarily.
b50e59fe
RP
1819There are ten local symbol names, which are re-used throughout the
1820program. You may refer to them using the names @samp{0} @samp{1}
1821@dots{} @samp{9}. To define a local symbol, write a label of the form
1822@samp{@b{N}:} (where @b{N} represents any digit). To refer to the most
1823recent previous definition of that symbol write @samp{@b{N}b}, using the
1824same digit as when you defined the label. To refer to the next
1825definition of a local label, write @samp{@b{N}f}---where @b{N} gives you
1826a choice of 10 forward references. The @samp{b} stands for
1827``backwards'' and the @samp{f} stands for ``forwards''.
1828
1829Local symbols are not emitted by the current GNU C compiler.
93b45514
RP
1830
1831There is no restriction on how you can use these labels, but
1832remember that at any point in the assembly you can refer to at most
183310 prior local labels and to at most 10 forward local labels.
1834
47342e8f 1835Local symbol names are only a notation device. They are immediately
93b45514 1836transformed into more conventional symbol names before the assembler
47342e8f
RP
1837uses them. The symbol names stored in the symbol table, appearing in
1838error messages and optionally emitted to the object file have these
1839parts:
1840
1841@table @code
93b45514 1842@item L
d0281557
RP
1843All local labels begin with @samp{L}. Normally both @code{_AS__} and
1844@code{_LD__} forget symbols that start with @samp{L}. These labels are
93b45514 1845used for symbols you are never intended to see. If you give the
d0281557
RP
1846@samp{-L} option then @code{_AS__} will retain these symbols in the
1847object file. If you also instruct @code{_LD__} to retain these symbols,
93b45514 1848you may use them in debugging.
47342e8f
RP
1849
1850@item @var{digit}
93b45514
RP
1851If the label is written @samp{0:} then the digit is @samp{0}.
1852If the label is written @samp{1:} then the digit is @samp{1}.
1853And so on up through @samp{9:}.
47342e8f
RP
1854
1855@item @ctrl{A}
93b45514
RP
1856This unusual character is included so you don't accidentally invent
1857a symbol of the same name. The character has ASCII value
1858@samp{\001}.
47342e8f
RP
1859
1860@item @emph{ordinal number}
1861This is a serial number to keep the labels distinct. The first
93b45514 1862@samp{0:} gets the number @samp{1}; The 15th @samp{0:} gets the
47342e8f 1863number @samp{15}; @emph{etc.}. Likewise for the other labels @samp{1:}
93b45514
RP
1864through @samp{9:}.
1865@end table
47342e8f
RP
1866
1867For instance, the first @code{1:} is named @code{L1@ctrl{A}1}, the 44th
d0281557 1868@code{3:} is named @code{L3@ctrl{A}44}.
93b45514 1869
242d9c06 1870@node Dot
93b45514
RP
1871@section The Special Dot Symbol
1872
66b818fb
RP
1873@cindex dot (symbol)
1874@cindex @code{.} (symbol)
1875@cindex current address
1876@cindex location counter
b50e59fe 1877The special symbol @samp{.} refers to the current address that
d0281557 1878@code{_AS__} is assembling into. Thus, the expression @samp{melvin:
b50e59fe 1879.long .} will cause @code{melvin} to contain its own address.
93b45514
RP
1880Assigning a value to @code{.} is treated the same as a @code{.org}
1881directive. Thus, the expression @samp{.=.+4} is the same as saying
7d7ecbdd 1882_if__(!_A29K__)
09352a5d 1883@samp{.space 4}.
7d7ecbdd
RP
1884_fi__(!_A29K__)
1885_if__(_A29K__)
b50e59fe 1886@samp{.block 4}.
7d7ecbdd 1887_fi__(_A29K__)
b50e59fe 1888
242d9c06 1889@node Symbol Attributes
93b45514 1890@section Symbol Attributes
66b818fb
RP
1891
1892@cindex symbol attributes
1893@cindex attributes, symbol
d0281557 1894Every symbol has, as well as its name, the attributes ``Value'' and
66b818fb
RP
1895``Type''. Depending on output format, symbols can also have auxiliary
1896attributes.
09352a5d
RP
1897_if__(_INTERNALS__)
1898The detailed definitions are in _0__<a.out.h>_1__.
1899_fi__(_INTERNALS__)
93b45514 1900
d0281557 1901If you use a symbol without defining it, @code{_AS__} assumes zero for
93b45514
RP
1902all these attributes, and probably won't warn you. This makes the
1903symbol an externally defined symbol, which is generally what you
1904would want.
1905
7a4c8e5c
RP
1906@menu
1907* Symbol Value:: Value
1908* Symbol Type:: Type
66b818fb 1909_if__(_AOUT__||_BOUT__)
7a4c8e5c
RP
1910_if__(_GENERIC__||!_BOUT__)
1911* a.out Symbols:: Symbol Attributes: @code{a.out}
1912_fi__(_GENERIC__||!_BOUT__)
1913_if__(_BOUT__&&!_GENERIC__)
1914* a.out Symbols:: Symbol Attributes: @code{a.out}, @code{b.out}
1915_fi__(_BOUT__&&!_GENERIC__)
66b818fb 1916_fi__(_AOUT__||_BOUT__)
7a4c8e5c
RP
1917_if__(_COFF__)
1918* COFF Symbols:: Symbol Attributes for COFF
1919_fi__(_COFF__)
1920@end menu
1921
242d9c06 1922@node Symbol Value
93b45514 1923@subsection Value
66b818fb
RP
1924
1925@cindex value of a symbol
1926@cindex symbol value
24b1493d
RP
1927The value of a symbol is (usually) 32 bits. For a symbol which labels a
1928location in the text, data, bss or absolute sections the value is the
1929number of addresses from the start of that section to the label.
1930Naturally for text, data and bss sections the value of a symbol changes
1931as @code{_LD__} changes section base addresses during linking. Absolute
1932symbols' values do not change during linking: that is why they are
1933called absolute.
93b45514 1934
b50e59fe
RP
1935The value of an undefined symbol is treated in a special way. If it is
19360 then the symbol is not defined in this assembler source program, and
d0281557 1937@code{_LD__} will try to determine its value from other programs it is
b50e59fe
RP
1938linked with. You make this kind of symbol simply by mentioning a symbol
1939name without defining it. A non-zero value represents a @code{.comm}
1940common declaration. The value is how much common storage to reserve, in
1941bytes (addresses). The symbol refers to the first address of the
1942allocated storage.
93b45514 1943
242d9c06 1944@node Symbol Type
93b45514 1945@subsection Type
66b818fb
RP
1946
1947@cindex type of a symbol
1948@cindex symbol type
24b1493d 1949The type attribute of a symbol contains relocation (section)
d0281557
RP
1950information, any flag settings indicating that a symbol is external, and
1951(optionally), other information for linkers and debuggers. The exact
1952format depends on the object-code output format in use.
93b45514 1953
d0281557 1954_if__(_AOUT__||_BOUT__)
242d9c06 1955@node a.out Symbols
7a4c8e5c 1956_if__(_BOUT__&&!_GENERIC__)
d0281557 1957@subsection Symbol Attributes: @code{a.out}, @code{b.out}
66b818fb
RP
1958
1959@cindex @code{b.out} symbol attributes
1960@cindex symbol attributes, @code{b.out}
d0281557
RP
1961These symbol attributes appear only when @code{_AS__} is configured for
1962one of the Berkeley-descended object output formats.
7a4c8e5c
RP
1963_fi__(_BOUT__&&!_GENERIC__)
1964_if__(_GENERIC__||!_BOUT__)
0b5b143a 1965@subsection Symbol Attributes: @code{a.out}
7a4c8e5c
RP
1966_fi__(_GENERIC__||!_BOUT__)
1967
66b818fb
RP
1968@cindex @code{a.out} symbol attributes
1969@cindex symbol attributes, @code{a.out}
1970
7a4c8e5c
RP
1971@menu
1972* Symbol Desc:: Descriptor
1973* Symbol Other:: Other
1974@end menu
93b45514 1975
242d9c06 1976@node Symbol Desc
d0281557 1977@subsubsection Descriptor
66b818fb
RP
1978
1979@cindex descriptor, of @code{a.out} symbol
93b45514 1980This is an arbitrary 16-bit value. You may establish a symbol's
7a4c8e5c
RP
1981descriptor value by using a @code{.desc} statement
1982(@pxref{Desc,,@code{.desc}}). A descriptor value means nothing to
1983@code{_AS__}.
93b45514 1984
242d9c06 1985@node Symbol Other
d0281557 1986@subsubsection Other
66b818fb
RP
1987
1988@cindex other attribute, of @code{a.out} symbol
d0281557
RP
1989This is an arbitrary 8-bit value. It means nothing to @code{_AS__}.
1990_fi__(_AOUT__||_BOUT__)
1991
1992_if__(_COFF__)
242d9c06 1993@node COFF Symbols
d0281557 1994@subsection Symbol Attributes for COFF
66b818fb
RP
1995
1996@cindex COFF symbol attributes
1997@cindex symbol attributes, COFF
1998
d0281557
RP
1999The COFF format supports a multitude of auxiliary symbol attributes;
2000like the primary symbol attributes, they are set between @code{.def} and
2001@code{.endef} directives.
2002
2003@subsubsection Primary Attributes
66b818fb
RP
2004
2005@cindex primary attributes, COFF symbols
d0281557
RP
2006The symbol name is set with @code{.def}; the value and type,
2007respectively, with @code{.val} and @code{.type}.
2008
2009@subsubsection Auxiliary Attributes
66b818fb
RP
2010
2011@cindex auxiliary attributes, COFF symbols
d0281557
RP
2012The @code{_AS__} directives @code{.dim}, @code{.line}, @code{.scl},
2013@code{.size}, and @code{.tag} can generate auxiliary symbol table
2014information for COFF.
2015_fi__(_COFF__)
93b45514 2016
242d9c06 2017@node Expressions
93b45514 2018@chapter Expressions
66b818fb
RP
2019
2020@cindex expressions
2021@cindex addresses
2022@cindex numeric values
93b45514
RP
2023An @dfn{expression} specifies an address or numeric value.
2024Whitespace may precede and/or follow an expression.
2025
7a4c8e5c
RP
2026@menu
2027* Empty Exprs:: Empty Expressions
2028* Integer Exprs:: Integer Expressions
2029@end menu
2030
242d9c06 2031@node Empty Exprs
93b45514 2032@section Empty Expressions
66b818fb
RP
2033
2034@cindex empty expressions
2035@cindex expressions, empty
47342e8f 2036An empty expression has no value: it is just whitespace or null.
93b45514 2037Wherever an absolute expression is required, you may omit the
d0281557 2038expression and @code{_AS__} will assume a value of (absolute) 0. This
93b45514
RP
2039is compatible with other assemblers.
2040
242d9c06 2041@node Integer Exprs
93b45514 2042@section Integer Expressions
66b818fb
RP
2043
2044@cindex integer expressions
2045@cindex expressions, integer
47342e8f
RP
2046An @dfn{integer expression} is one or more @emph{arguments} delimited
2047by @emph{operators}.
2048
7a4c8e5c
RP
2049@menu
2050* Arguments:: Arguments
2051* Operators:: Operators
2052* Prefix Ops:: Prefix Operators
2053* Infix Ops:: Infix Operators
2054@end menu
2055
242d9c06 2056@node Arguments
47342e8f 2057@subsection Arguments
93b45514 2058
66b818fb
RP
2059@cindex expression arguments
2060@cindex arguments in expressions
2061@cindex operands in expressions
2062@cindex arithmetic operands
47342e8f
RP
2063@dfn{Arguments} are symbols, numbers or subexpressions. In other
2064contexts arguments are sometimes called ``arithmetic operands''. In
2065this manual, to avoid confusing them with the ``instruction operands'' of
2066the machine language, we use the term ``argument'' to refer to parts of
b50e59fe 2067expressions only, reserving the word ``operand'' to refer only to machine
d0281557 2068instruction operands.
93b45514 2069
24b1493d
RP
2070Symbols are evaluated to yield @{@var{section} @var{NNN}@} where
2071@var{section} is one of text, data, bss, absolute,
d0281557 2072or undefined. @var{NNN} is a signed, 2's complement 32 bit
93b45514
RP
2073integer.
2074
2075Numbers are usually integers.
2076
2077A number can be a flonum or bignum. In this case, you are warned
d0281557 2078that only the low order 32 bits are used, and @code{_AS__} pretends
93b45514
RP
2079these 32 bits are an integer. You may write integer-manipulating
2080instructions that act on exotic constants, compatible with other
2081assemblers.
2082
66b818fb 2083@cindex subexpressions
b50e59fe
RP
2084Subexpressions are a left parenthesis @samp{(} followed by an integer
2085expression, followed by a right parenthesis @samp{)}; or a prefix
47342e8f 2086operator followed by an argument.
93b45514 2087
242d9c06 2088@node Operators
93b45514 2089@subsection Operators
66b818fb
RP
2090
2091@cindex operators, in expressions
2092@cindex arithmetic functions
2093@cindex functions, in expressions
b50e59fe
RP
2094@dfn{Operators} are arithmetic functions, like @code{+} or @code{%}. Prefix
2095operators are followed by an argument. Infix operators appear
47342e8f 2096between their arguments. Operators may be preceded and/or followed by
93b45514
RP
2097whitespace.
2098
242d9c06 2099@node Prefix Ops
66b818fb
RP
2100@subsection Prefix Operator
2101
2102@cindex prefix operators
d0281557 2103@code{_AS__} has the following @dfn{prefix operators}. They each take
47342e8f 2104one argument, which must be absolute.
d0281557
RP
2105
2106@c the tex/end tex stuff surrounding this small table is meant to make
2107@c it align, on the printed page, with the similar table in the next
2108@c section (which is inside an enumerate).
2109@tex
2110\global\advance\leftskip by \itemindent
2111@end tex
2112
b50e59fe 2113@table @code
93b45514 2114@item -
b50e59fe 2115@dfn{Negation}. Two's complement negation.
93b45514 2116@item ~
b50e59fe 2117@dfn{Complementation}. Bitwise not.
93b45514
RP
2118@end table
2119
d0281557
RP
2120@tex
2121\global\advance\leftskip by -\itemindent
2122@end tex
2123
242d9c06 2124@node Infix Ops
b50e59fe 2125@subsection Infix Operators
47342e8f 2126
66b818fb
RP
2127@cindex infix operators
2128@cindex operators, permitted arguments
b50e59fe
RP
2129@dfn{Infix operators} take two arguments, one on either side. Operators
2130have precedence, but operations with equal precedence are performed left
2131to right. Apart from @code{+} or @code{-}, both arguments must be
2132absolute, and the result is absolute.
47342e8f 2133
93b45514 2134@enumerate
66b818fb
RP
2135@cindex operator precedence
2136@cindex precedence of operators
47342e8f 2137
93b45514 2138@item
47342e8f 2139Highest Precedence
66b818fb 2140
93b45514
RP
2141@table @code
2142@item *
2143@dfn{Multiplication}.
66b818fb 2144
93b45514
RP
2145@item /
2146@dfn{Division}. Truncation is the same as the C operator @samp{/}
66b818fb 2147
93b45514
RP
2148@item %
2149@dfn{Remainder}.
66b818fb 2150
09352a5d
RP
2151@item _0__<_1__
2152@itemx _0__<<_1__
2153@dfn{Shift Left}. Same as the C operator @samp{_0__<<_1__}
66b818fb 2154
09352a5d
RP
2155@item _0__>_1__
2156@itemx _0__>>_1__
2157@dfn{Shift Right}. Same as the C operator @samp{_0__>>_1__}
93b45514 2158@end table
47342e8f 2159
93b45514 2160@item
47342e8f 2161Intermediate precedence
66b818fb 2162
47342e8f 2163@table @code
93b45514 2164@item |
66b818fb 2165
93b45514 2166@dfn{Bitwise Inclusive Or}.
66b818fb 2167
93b45514
RP
2168@item &
2169@dfn{Bitwise And}.
66b818fb 2170
93b45514
RP
2171@item ^
2172@dfn{Bitwise Exclusive Or}.
66b818fb 2173
93b45514
RP
2174@item !
2175@dfn{Bitwise Or Not}.
2176@end table
47342e8f 2177
93b45514 2178@item
47342e8f 2179Lowest Precedence
66b818fb 2180
47342e8f 2181@table @code
93b45514 2182@item +
66b818fb
RP
2183@cindex addition, permitted arguments
2184@cindex plus, permitted arguments
2185@cindex arguments for addition
47342e8f 2186@dfn{Addition}. If either argument is absolute, the result
24b1493d 2187has the section of the other argument.
47342e8f
RP
2188If either argument is pass1 or undefined, the result is pass1.
2189Otherwise @code{+} is illegal.
66b818fb 2190
93b45514 2191@item -
66b818fb
RP
2192@cindex subtraction, permitted arguments
2193@cindex minus, permitted arguments
2194@cindex arguments for subtraction
47342e8f 2195@dfn{Subtraction}. If the right argument is absolute, the
24b1493d 2196result has the section of the left argument.
47342e8f 2197If either argument is pass1 the result is pass1.
24b1493d
RP
2198If either argument is undefined the result is difference section.
2199If both arguments are in the same section, the result is absolute---provided
2200that section is one of text, data or bss.
b50e59fe 2201Otherwise subtraction is illegal.
93b45514
RP
2202@end table
2203@end enumerate
2204
b50e59fe 2205The sense of the rule for addition is that it's only meaningful to add
24b1493d 2206the @emph{offsets} in an address; you can only have a defined section in
d0281557 2207one of the two arguments.
93b45514 2208
24b1493d 2209Similarly, you can't subtract quantities from two different sections.
47342e8f 2210
242d9c06 2211@node Pseudo Ops
93b45514 2212@chapter Assembler Directives
d0281557 2213
66b818fb
RP
2214@cindex directives, machine independent
2215@cindex pseudo-ops, machine independent
2216@cindex machine independent directives
d0281557 2217All assembler directives have names that begin with a period (@samp{.}).
66b818fb 2218The rest of the name is letters, usually in lower case.
d0281557
RP
2219
2220This chapter discusses directives present regardless of the target
66b818fb
RP
2221machine configuration for the GNU assembler.
2222_if__(!_H8__)
2223@xref{_MACH_DEP__} for additional directives.
2224_fi__(!_H8__)
d0281557 2225
7a4c8e5c
RP
2226@menu
2227* Abort:: @code{.abort}
2228_if__(_COFF__)
2229* coff-ABORT:: @code{.ABORT}
2230_fi__(_COFF__)
2231_if__(_BOUT__&&!_COFF__)
2232* bout-ABORT:: @code{.ABORT}
2233_fi__(_BOUT__&&!_COFF__)
2234* Align:: @code{.align @var{abs-expr} , @var{abs-expr}}
2235* App-File:: @code{.app-file @var{string}}
2236* Ascii:: @code{.ascii "@var{string}"}@dots{}
2237* Asciz:: @code{.asciz "@var{string}"}@dots{}
2238* Byte:: @code{.byte @var{expressions}}
2239* Comm:: @code{.comm @var{symbol} , @var{length} }
24b1493d 2240* Data:: @code{.data @var{subsection}}
7a4c8e5c
RP
2241_if__(_COFF__||_BOUT__)
2242* Def:: @code{.def @var{name}}
2243_fi__(_COFF__||_BOUT__)
66b818fb 2244_if__(_AOUT__||_BOUT__)
7a4c8e5c 2245* Desc:: @code{.desc @var{symbol}, @var{abs-expression}}
66b818fb 2246_fi__(_AOUT__||_BOUT__)
7a4c8e5c
RP
2247_if__(_COFF__||_BOUT__)
2248* Dim:: @code{.dim}
2249_fi__(_COFF__||_BOUT__)
2250* Double:: @code{.double @var{flonums}}
66b818fb 2251* Eject:: @code{.eject}
7a4c8e5c
RP
2252* Else:: @code{.else}
2253_if__(_COFF__||_BOUT__)
2254* Endef:: @code{.endef}
2255_fi__(_COFF__||_BOUT__)
2256* Endif:: @code{.endif}
2257* Equ:: @code{.equ @var{symbol}, @var{expression}}
2258* Extern:: @code{.extern}
7d7ecbdd 2259_if__(_GENERIC__||!_A29K__)
24b1493d 2260* File:: @code{.file @var{string}}
7d7ecbdd 2261_fi__(_GENERIC__||!_A29K__)
7a4c8e5c
RP
2262* Fill:: @code{.fill @var{repeat} , @var{size} , @var{value}}
2263* Float:: @code{.float @var{flonums}}
2264* Global:: @code{.global @var{symbol}}, @code{.globl @var{symbol}}
2265* hword:: @code{.hword @var{expressions}}
2266* Ident:: @code{.ident}
2267* If:: @code{.if @var{absolute expression}}
2268* Include:: @code{.include "@var{file}"}
2269* Int:: @code{.int @var{expressions}}
2270* Lcomm:: @code{.lcomm @var{symbol} , @var{length}}
66b818fb 2271* Lflags:: @code{.lflags}
7d7ecbdd 2272_if__(_GENERIC__||!_A29K__)
7a4c8e5c 2273* Line:: @code{.line @var{line-number}}
7d7ecbdd 2274_fi__(_GENERIC__||!_A29K__)
7a4c8e5c 2275* Ln:: @code{.ln @var{line-number}}
66b818fb 2276* List:: @code{.list}
7a4c8e5c 2277* Long:: @code{.long @var{expressions}}
242d9c06 2278_if__(0)
7a4c8e5c 2279* Lsym:: @code{.lsym @var{symbol}, @var{expression}}
242d9c06 2280_fi__(0)
66b818fb 2281* Nolist:: @code{.nolist}
7a4c8e5c
RP
2282* Octa:: @code{.octa @var{bignums}}
2283* Org:: @code{.org @var{new-lc} , @var{fill}}
66b818fb 2284* Psize:: @code{.psize @var{lines}, @var{columns}}
7a4c8e5c 2285* Quad:: @code{.quad @var{bignums}}
66b818fb 2286* Sbttl:: @code{.sbttl "@var{subheading}"}
7a4c8e5c
RP
2287_if__(_COFF__||_BOUT__)
2288* Scl:: @code{.scl @var{class}}
2289_fi__(_COFF__||_BOUT__)
24b1493d 2290_if__(_COFF__)
66b818fb 2291* Section:: @code{.section @var{name}, @var{subsection}}
24b1493d 2292_fi__(_COFF__)
7a4c8e5c
RP
2293* Set:: @code{.set @var{symbol}, @var{expression}}
2294* Short:: @code{.short @var{expressions}}
2295* Single:: @code{.single @var{flonums}}
2296_if__(_COFF__||_BOUT__)
2297* Size:: @code{.size}
2298_fi__(_COFF__||_BOUT__)
2299* Space:: @code{.space @var{size} , @var{fill}}
24b1493d 2300_if__(_GENERIC__||!_H8__)
7a4c8e5c 2301* Stab:: @code{.stabd, .stabn, .stabs}
24b1493d 2302_fi__(_GENERIC__||!_H8__)
7a4c8e5c
RP
2303_if__(_COFF__||_BOUT__)
2304* Tag:: @code{.tag @var{structname}}
2305_fi__(_COFF__||_BOUT__)
24b1493d 2306* Text:: @code{.text @var{subsection}}
66b818fb 2307* Title:: @code{.title "@var{heading}"}
7a4c8e5c
RP
2308_if__(_COFF__||_BOUT__)
2309* Type:: @code{.type @var{int}}
2310* Val:: @code{.val @var{addr}}
2311_fi__(_COFF__||_BOUT__)
2312* Word:: @code{.word @var{expressions}}
2313* Deprecated:: Deprecated Directives
2314@end menu
2315
242d9c06 2316@node Abort
b50e59fe 2317@section @code{.abort}
66b818fb
RP
2318
2319@cindex @code{abort} directive
2320@cindex stopping the assembly
93b45514
RP
2321This directive stops the assembly immediately. It is for
2322compatibility with other assemblers. The original idea was that the
d0281557
RP
2323assembly language source would be piped into the assembler. If the sender
2324of the source quit, it could use this directive tells @code{_AS__} to
93b45514
RP
2325quit also. One day @code{.abort} will not be supported.
2326
d0281557 2327_if__(_COFF__)
242d9c06 2328@node coff-ABORT
d0281557 2329@section @code{.ABORT}
66b818fb
RP
2330
2331@cindex @code{ABORT} directive
d0281557
RP
2332When producing COFF output, @code{_AS__} accepts this directive as a
2333synonym for @samp{.abort}.
2334_fi__(_COFF__)
7a4c8e5c 2335
d0281557
RP
2336_if__(_BOUT__)
2337_if__(!_COFF__)
242d9c06 2338@node bout-ABORT
d0281557 2339@section @code{.ABORT}
66b818fb
RP
2340
2341@cindex @code{ABORT} directive
d0281557
RP
2342_fi__(!_COFF__)
2343
2344When producing @code{b.out} output, @code{_AS__} accepts this directive,
2345but ignores it.
2346_fi__(_BOUT__)
2347
242d9c06 2348@node Align
d0281557 2349@section @code{.align @var{abs-expr} , @var{abs-expr}}
66b818fb
RP
2350
2351@cindex padding the location counter
66b818fb 2352@cindex @code{align} directive
24b1493d 2353Pad the location counter (in the current subsection) to a particular
f4335d56
RP
2354storage boundary. The first expression (which must be absolute) is the
2355number of low-order zero bits the location counter will have after
2356advancement. For example @samp{.align 3} will advance the location
2357counter until it a multiple of 8. If the location counter is already a
2358multiple of 8, no change is needed.
93b45514 2359
f4335d56
RP
2360The second expression (also absolute) gives the value to be stored in
2361the padding bytes. It (and the comma) may be omitted. If it is
2362omitted, the padding bytes are zero.
93b45514 2363
242d9c06 2364@node App-File
b50e59fe 2365@section @code{.app-file @var{string}}
66b818fb
RP
2366
2367@cindex logical file name
2368@cindex file name, logical
2369@cindex @code{app-file} directive
d0281557 2370@code{.app-file}
7d7ecbdd 2371_if__(!_A29K__)
d0281557 2372(which may also be spelled @samp{.file})
7d7ecbdd 2373_fi__(!_A29K__)
d0281557
RP
2374tells @code{_AS__} that we are about to start a new
2375logical file. @var{string} is the new file name. In general, the
2376filename is recognized whether or not it is surrounded by quotes @samp{"};
b50e59fe
RP
2377but if you wish to specify an empty file name is permitted,
2378you must give the quotes--@code{""}. This statement may go away in
d0281557
RP
2379future: it is only recognized to be compatible with old @code{_AS__}
2380programs.@refill
b50e59fe 2381
242d9c06 2382@node Ascii
b50e59fe 2383@section @code{.ascii "@var{string}"}@dots{}
66b818fb
RP
2384
2385@cindex @code{ascii} directive
2386@cindex string literals
47342e8f 2387@code{.ascii} expects zero or more string literals (@pxref{Strings})
93b45514
RP
2388separated by commas. It assembles each string (with no automatic
2389trailing zero byte) into consecutive addresses.
2390
242d9c06 2391@node Asciz
b50e59fe 2392@section @code{.asciz "@var{string}"}@dots{}
66b818fb
RP
2393
2394@cindex @code{asciz} directive
2395@cindex zero-terminated strings
2396@cindex null-terminated strings
b50e59fe
RP
2397@code{.asciz} is just like @code{.ascii}, but each string is followed by
2398a zero byte. The ``z'' in @samp{.asciz} stands for ``zero''.
93b45514 2399
242d9c06 2400@node Byte
b50e59fe 2401@section @code{.byte @var{expressions}}
93b45514 2402
66b818fb
RP
2403@cindex @code{byte} directive
2404@cindex integers, one byte
47342e8f 2405@code{.byte} expects zero or more expressions, separated by commas.
93b45514
RP
2406Each expression is assembled into the next byte.
2407
242d9c06 2408@node Comm
b50e59fe 2409@section @code{.comm @var{symbol} , @var{length} }
66b818fb
RP
2410
2411@cindex @code{comm} directive
2412@cindex symbol, common
24b1493d 2413@code{.comm} declares a named common area in the bss section. Normally
d0281557 2414@code{_LD__} reserves memory addresses for it during linking, so no partial
47342e8f 2415program defines the location of the symbol. Use @code{.comm} to tell
d0281557 2416@code{_LD__} that it must be at least @var{length} bytes long. @code{_LD__}
47342e8f
RP
2417will allocate space for each @code{.comm} symbol that is at least as
2418long as the longest @code{.comm} request in any of the partial programs
d0281557 2419linked. @var{length} is an absolute expression.
47342e8f 2420
242d9c06 2421@node Data
24b1493d 2422@section @code{.data @var{subsection}}
66b818fb
RP
2423
2424@cindex @code{data} directive
d0281557 2425@code{.data} tells @code{_AS__} to assemble the following statements onto the
24b1493d
RP
2426end of the data subsection numbered @var{subsection} (which is an
2427absolute expression). If @var{subsection} is omitted, it defaults
93b45514
RP
2428to zero.
2429
7a4c8e5c 2430_if__(_COFF__ || _BOUT__)
242d9c06 2431@node Def
d0281557 2432@section @code{.def @var{name}}
66b818fb
RP
2433
2434@cindex @code{def} directive
2435@cindex COFF symbols, debugging
2436@cindex debugging COFF symbols
d0281557
RP
2437Begin defining debugging information for a symbol @var{name}; the
2438definition extends until the @code{.endef} directive is encountered.
2439_if__(_BOUT__)
2440
2441This directive is only observed when @code{_AS__} is configured for COFF
2442format output; when producing @code{b.out}, @samp{.def} is recognized,
2443but ignored.
2444_fi__(_BOUT__)
7a4c8e5c 2445_fi__(_COFF__ || _BOUT__)
d0281557
RP
2446
2447_if__(_AOUT__||_BOUT__)
242d9c06 2448@node Desc
f4335d56 2449@section @code{.desc @var{symbol}, @var{abs-expression}}
66b818fb
RP
2450
2451@cindex @code{desc} directive
2452@cindex COFF symbol descriptor
2453@cindex symbol descriptor, COFF
b50e59fe 2454This directive sets the descriptor of the symbol (@pxref{Symbol Attributes})
f4335d56 2455to the low 16 bits of an absolute expression.
93b45514 2456
d0281557
RP
2457_if__(_COFF__)
2458The @samp{.desc} directive is not available when @code{_AS__} is
2459configured for COFF output; it is only for @code{a.out} or @code{b.out}
2460object format. For the sake of compatibility, @code{_AS__} will accept
2461it, but produce no output, when configured for COFF.
2462_fi__(_COFF__)
2463_fi__(_AOUT__||_BOUT__)
2464
7a4c8e5c 2465_if__(_COFF__ || _BOUT__)
242d9c06 2466@node Dim
d0281557 2467@section @code{.dim}
66b818fb
RP
2468
2469@cindex @code{dim} directive
2470@cindex COFF auxiliary symbol information
2471@cindex auxiliary symbol information, COFF
d0281557
RP
2472This directive is generated by compilers to include auxiliary debugging
2473information in the symbol table. It is only permitted inside
2474@code{.def}/@code{.endef} pairs.
2475_if__(_BOUT__)
2476
2477@samp{.dim} is only meaningful when generating COFF format output; when
2478@code{_AS__} is generating @code{b.out}, it accepts this directive but
2479ignores it.
2480_fi__(_BOUT__)
7a4c8e5c 2481_fi__(_COFF__ || _BOUT__)
d0281557 2482
242d9c06 2483@node Double
b50e59fe 2484@section @code{.double @var{flonums}}
66b818fb
RP
2485
2486@cindex @code{double} directive
2487@cindex floating point numbers (double)
d0281557
RP
2488@code{.double} expects zero or more flonums, separated by commas. It
2489assembles floating point numbers.
0b5b143a 2490_if__(_GENERIC__)
09352a5d 2491The exact kind of floating point numbers emitted depends on how
d0281557 2492@code{_AS__} is configured. @xref{_MACH_DEP__}.
0b5b143a 2493_fi__(_GENERIC__)
24b1493d 2494_if__((!_GENERIC__) && _IEEEFLOAT__)
d0281557 2495On the _HOST__ family @samp{.double} emits 64-bit floating-point numbers
66b818fb 2496in @sc{ieee} format.
24b1493d 2497_fi__((!_GENERIC__) && _IEEEFLOAT__)
b50e59fe 2498
242d9c06 2499@node Eject
66b818fb
RP
2500@section @code{.eject}
2501
2502@cindex @code{eject} directive
2503@cindex new page, in listings
2504@cindex page, in listings
2505@cindex listing control: new page
2506Force a page break at this point, when generating assembly listings.
2507
242d9c06 2508@node Else
b50e59fe 2509@section @code{.else}
66b818fb
RP
2510
2511@cindex @code{else} directive
7a4c8e5c
RP
2512@code{.else} is part of the @code{_AS__} support for conditional
2513assembly; @pxref{If,,@code{.if}}. It marks the beginning of a section
2514of code to be assembled if the condition for the preceding @code{.if}
2515was false.
b50e59fe 2516
d0281557 2517_if__(0)
7a4c8e5c 2518@node End, Endef, Else, Pseudo Ops
b50e59fe 2519@section @code{.end}
66b818fb
RP
2520
2521@cindex @code{end} directive
b50e59fe
RP
2522This doesn't do anything---but isn't an s_ignore, so I suspect it's
2523meant to do something eventually (which is why it isn't documented here
2524as "for compatibility with blah").
d0281557
RP
2525_fi__(0)
2526
7a4c8e5c 2527_if__(_COFF__||_BOUT__)
242d9c06 2528@node Endef
d0281557 2529@section @code{.endef}
66b818fb
RP
2530
2531@cindex @code{endef} directive
d0281557
RP
2532This directive flags the end of a symbol definition begun with
2533@code{.def}.
2534_if__(_BOUT__)
2535
2536@samp{.endef} is only meaningful when generating COFF format output; if
2537@code{_AS__} is configured to generate @code{b.out}, it accepts this
2538directive but ignores it.
2539_fi__(_BOUT__)
7a4c8e5c
RP
2540_fi__(_COFF__||_BOUT__)
2541
242d9c06 2542@node Endif
b50e59fe 2543@section @code{.endif}
66b818fb
RP
2544
2545@cindex @code{endif} directive
d0281557 2546@code{.endif} is part of the @code{_AS__} support for conditional assembly;
b50e59fe 2547it marks the end of a block of code that is only assembled
7a4c8e5c 2548conditionally. @xref{If,,@code{.if}}.
b50e59fe 2549
242d9c06 2550@node Equ
b50e59fe
RP
2551@section @code{.equ @var{symbol}, @var{expression}}
2552
66b818fb
RP
2553@cindex @code{equ} directive
2554@cindex assigning values to symbols
2555@cindex symbols, assigning values to
d0281557 2556This directive sets the value of @var{symbol} to @var{expression}.
7a4c8e5c
RP
2557It is synonymous with @samp{.set}; @pxref{Set,,@code{.set}}.
2558
242d9c06 2559@node Extern
b50e59fe 2560@section @code{.extern}
66b818fb
RP
2561
2562@cindex @code{extern} directive
b50e59fe 2563@code{.extern} is accepted in the source program---for compatibility
d0281557 2564with other assemblers---but it is ignored. @code{_AS__} treats
b50e59fe
RP
2565all undefined symbols as external.
2566
7d7ecbdd 2567_if__(_GENERIC__||!_A29K__)
242d9c06 2568@node File
66b818fb
RP
2569@section @code{.file @var{string}}
2570
2571@cindex @code{file} directive
2572@cindex logical file name
2573@cindex file name, logical
d0281557
RP
2574@code{.file} (which may also be spelled @samp{.app-file}) tells
2575@code{_AS__} that we are about to start a new logical file.
2576@var{string} is the new file name. In general, the filename is
2577recognized whether or not it is surrounded by quotes @samp{"}; but if
2578you wish to specify an empty file name, you must give the
2579quotes--@code{""}. This statement may go away in future: it is only
2580recognized to be compatible with old @code{_AS__} programs.
7d7ecbdd 2581_if__(_A29K__)
7a4c8e5c
RP
2582In some configurations of @code{_AS__}, @code{.file} has already been
2583removed to avoid conflicts with other assemblers. @xref{_MACH_DEP__}.
7d7ecbdd
RP
2584_fi__(_A29K__)
2585_fi__(_GENERIC__||!_A29K__)
7a4c8e5c 2586
242d9c06 2587@node Fill
b50e59fe 2588@section @code{.fill @var{repeat} , @var{size} , @var{value}}
66b818fb
RP
2589
2590@cindex @code{fill} directive
2591@cindex writing patterns in memory
2592@cindex patterns, writing in memory
93b45514
RP
2593@var{result}, @var{size} and @var{value} are absolute expressions.
2594This emits @var{repeat} copies of @var{size} bytes. @var{Repeat}
2595may be zero or more. @var{Size} may be zero or more, but if it is
2596more than 8, then it is deemed to have the value 8, compatible with
2597other people's assemblers. The contents of each @var{repeat} bytes
2598is taken from an 8-byte number. The highest order 4 bytes are
2599zero. The lowest order 4 bytes are @var{value} rendered in the
d0281557 2600byte-order of an integer on the computer @code{_AS__} is assembling for.
93b45514
RP
2601Each @var{size} bytes in a repetition is taken from the lowest order
2602@var{size} bytes of this number. Again, this bizarre behavior is
2603compatible with other people's assemblers.
2604
d0281557 2605@var{size} and @var{value} are optional.
93b45514
RP
2606If the second comma and @var{value} are absent, @var{value} is
2607assumed zero. If the first comma and following tokens are absent,
2608@var{size} is assumed to be 1.
2609
242d9c06 2610@node Float
b50e59fe 2611@section @code{.float @var{flonums}}
66b818fb
RP
2612
2613@cindex floating point numbers (single)
2614@cindex @code{float} directive
b50e59fe 2615This directive assembles zero or more flonums, separated by commas. It
d0281557 2616has the same effect as @code{.single}.
0b5b143a 2617_if__(_GENERIC__)
09352a5d 2618The exact kind of floating point numbers emitted depends on how
d0281557
RP
2619@code{_AS__} is configured.
2620@xref{_MACH_DEP__}.
0b5b143a 2621_fi__(_GENERIC__)
24b1493d 2622_if__((!_GENERIC__) && _IEEEFLOAT__)
d0281557 2623On the _HOST__ family, @code{.float} emits 32-bit floating point numbers
66b818fb 2624in @sc{ieee} format.
24b1493d 2625_fi__((!_GENERIC__) && _IEEEFLOAT__)
93b45514 2626
242d9c06 2627@node Global
b50e59fe 2628@section @code{.global @var{symbol}}, @code{.globl @var{symbol}}
66b818fb
RP
2629
2630@cindex @code{global} directive
2631@cindex symbol, making visible to linker
d0281557 2632@code{.global} makes the symbol visible to @code{_LD__}. If you define
93b45514
RP
2633@var{symbol} in your partial program, its value is made available to
2634other partial programs that are linked with it. Otherwise,
2635@var{symbol} will take its attributes from a symbol of the same name
2636from another partial program it is linked with.
2637
b50e59fe
RP
2638Both spellings (@samp{.globl} and @samp{.global}) are accepted, for
2639compatibility with other assemblers.
2640
242d9c06 2641@node hword
d0281557 2642@section @code{.hword @var{expressions}}
66b818fb
RP
2643
2644@cindex @code{hword} directive
2645@cindex integers, 16-bit
2646@cindex numbers, 16-bit
2647@cindex sixteen bit integers
d0281557
RP
2648This expects zero or more @var{expressions}, and emits
2649a 16 bit number for each.
2650
0b5b143a 2651_if__(_GENERIC__)
d0281557
RP
2652This directive is a synonym for @samp{.short}; depending on the target
2653architecture, it may also be a synonym for @samp{.word}.
0b5b143a 2654_fi__(_GENERIC__)
24b1493d 2655_if__( _W32__ && !_GENERIC__ )
d0281557 2656This directive is a synonym for @samp{.short}.
24b1493d
RP
2657_fi__( _W32__ && !_GENERIC__ )
2658_if__(_W16__ && !_GENERIC__ )
2659This directive is a synonym for both @samp{.short} and @samp{.word}.
2660_fi__(_W16__ && !_GENERIC__ )
d0281557
RP
2661
2662_if__(_AOUT__||_BOUT__||_COFF__)
242d9c06 2663@node Ident
b50e59fe 2664@section @code{.ident}
66b818fb
RP
2665
2666@cindex @code{ident} directive
b50e59fe 2667This directive is used by some assemblers to place tags in object files.
d0281557 2668@code{_AS__} simply accepts the directive for source-file
b50e59fe
RP
2669compatibility with such assemblers, but does not actually emit anything
2670for it.
d0281557 2671_fi__(_AOUT__||_BOUT__||_COFF__)
b50e59fe 2672
242d9c06 2673@node If
b50e59fe 2674@section @code{.if @var{absolute expression}}
66b818fb
RP
2675
2676@cindex conditional assembly
2677@cindex @code{if} directive
b50e59fe
RP
2678@code{.if} marks the beginning of a section of code which is only
2679considered part of the source program being assembled if the argument
2680(which must be an @var{absolute expression}) is non-zero. The end of
2681the conditional section of code must be marked by @code{.endif}
7a4c8e5c
RP
2682(@pxref{Endif,,@code{.endif}}); optionally, you may include code for the
2683alternative condition, flagged by @code{.else} (@pxref{Else,,@code{.else}}.
b50e59fe
RP
2684
2685The following variants of @code{.if} are also supported:
2686@table @code
66b818fb
RP
2687@item .ifdef @var{symbol}
2688@cindex @code{ifdef} directive
b50e59fe
RP
2689Assembles the following section of code if the specified @var{symbol}
2690has been defined.
2691
d0281557 2692_if__(0)
66b818fb
RP
2693@item .ifeqs
2694@cindex @code{ifeqs} directive
d0281557
RP
2695Not yet implemented.
2696_fi__(0)
b50e59fe 2697
66b818fb 2698@item .ifndef @var{symbol}
b50e59fe 2699@itemx ifnotdef @var{symbol}
66b818fb
RP
2700@cindex @code{ifndef} directive
2701@cindex @code{ifnotdef} directive
b50e59fe
RP
2702Assembles the following section of code if the specified @var{symbol}
2703has not been defined. Both spelling variants are equivalent.
93b45514 2704
d0281557 2705_if__(0)
b50e59fe 2706@item ifnes
d0281557
RP
2707Not yet implemented.
2708_fi__(0)
b50e59fe
RP
2709@end table
2710
242d9c06 2711@node Include
b50e59fe 2712@section @code{.include "@var{file}"}
66b818fb
RP
2713
2714@cindex @code{include} directive
2715@cindex supporting files, including
2716@cindex files, including
b50e59fe
RP
2717This directive provides a way to include supporting files at specified
2718points in your source program. The code from @var{file} is assembled as
2719if it followed the point of the @code{.include}; when the end of the
2720included file is reached, assembly of the original file continues. You
2721can control the search paths used with the @samp{-I} command-line option
7a4c8e5c
RP
2722(@pxref{Invoking,,Command-Line Options}). Quotation marks are required
2723around @var{file}.
b50e59fe 2724
242d9c06 2725@node Int
b50e59fe 2726@section @code{.int @var{expressions}}
66b818fb
RP
2727
2728@cindex @code{int} directive
2729_if__(_GENERIC__||!_H8__)
2730@cindex integers, 32-bit
2731_fi__(_GENERIC__||!_H8__)
24b1493d
RP
2732Expect zero or more @var{expressions}, of any section, separated by
2733commas. For each expression, emit a
66b818fb 2734_if__(_GENERIC__||!_H8__)
24b1493d 273532-bit
66b818fb
RP
2736_fi__(_GENERIC__||!_H8__)
2737_if__(_H8__&&!_GENERIC__)
24b1493d 273816-bit
66b818fb 2739_fi__(_H8__&&!_GENERIC__)
24b1493d 2740number that will, at run
93b45514
RP
2741time, be the value of that expression. The byte order of the
2742expression depends on what kind of computer will run the program.
2743
242d9c06 2744@node Lcomm
b50e59fe 2745@section @code{.lcomm @var{symbol} , @var{length}}
66b818fb
RP
2746
2747@cindex @code{lcomm} directive
2748@cindex local common symbols
2749@cindex symbols, local common
7a4c8e5c 2750Reserve @var{length} (an absolute expression) bytes for a local common
24b1493d 2751denoted by @var{symbol}. The section and value of @var{symbol} are
7a4c8e5c 2752those of the new local common. The addresses are allocated in the bss
24b1493d 2753section, so at run-time the bytes will start off zeroed. @var{Symbol}
7a4c8e5c 2754is not declared global (@pxref{Global,,@code{.global}}), so is normally
d0281557 2755not visible to @code{_LD__}.
93b45514 2756
242d9c06 2757@node Lflags
66b818fb
RP
2758@section @code{.lflags}
2759
2760@cindex @code{lflags} directive (ignored)
2761@code{_AS__} accepts this directive, for compatibility with other
2762assemblers, but ignores it.
2763
7d7ecbdd 2764_if__(_GENERIC__ || !_A29K__)
242d9c06 2765@node Line
d0281557 2766@section @code{.line @var{line-number}}
66b818fb
RP
2767
2768@cindex @code{line} directive
7d7ecbdd 2769_fi__(_GENERIC__ || (!_A29K__))
242d9c06
SC
2770_if__(_A29K__ && (!_GENERIC__) && !_COFF__)
2771@node Ln
b50e59fe 2772@section @code{.ln @var{line-number}}
66b818fb
RP
2773
2774@cindex @code{ln} directive
242d9c06 2775_fi__(_A29K__ && (!_GENERIC__) && !_COFF__)
66b818fb 2776@cindex logical line number
d0281557
RP
2777_if__(_AOUT__||_BOUT__)
2778Tell @code{_AS__} to change the logical line number. @var{line-number} must be
b50e59fe
RP
2779an absolute expression. The next line will have that logical line
2780number. So any other statements on the current line (after a statement
24b1493d
RP
2781separator
2782_if__(_GENERIC__)
2783character)
2784_fi__(_GENERIC__)
2785_if__(!_GENERIC__)
2786_if__(! (_A29K__||_H8__) )
2787character @code{;})
2788_fi__(! (_A29K__||_H8__) )
2789_if__(_A29K__)
2790character @samp{@@})
2791_fi__(_A29K__)
2792_if__(_H8__)
2793character @samp{$})
2794_fi__(_H8__)
2795_fi__(!_GENERIC__)
d0281557
RP
2796will be reported as on logical line number
2797@var{line-number} @minus{} 1.
b50e59fe
RP
2798One day this directive will be unsupported: it is used only
2799for compatibility with existing assembler programs. @refill
7a4c8e5c 2800
7d7ecbdd 2801_if__(_GENERIC__ && _A29K__)
7a4c8e5c
RP
2802@emph{Warning:} In the AMD29K configuration of _AS__, this command is
2803only available with the name @code{.ln}, rather than as either
24b1493d 2804@code{.line} or @code{.ln}.
7d7ecbdd 2805_fi__(_GENERIC__ && _A29K__)
d0281557 2806_fi__(_AOUT__||_BOUT__)
242d9c06 2807_if__(_COFF__ && !_A29K__)
d0281557
RP
2808
2809Even though this is a directive associated with the @code{a.out} or
2810@code{b.out} object-code formats, @code{_AS__} will still recognize it
2811when producing COFF output, and will treat @samp{.line} as though it
2812were the COFF @samp{.ln} @emph{if} it is found outside a
2813@code{.def}/@code{.endef} pair.
2814
2815Inside a @code{.def}, @samp{.line} is, instead, one of the directives
2816used by compilers to generate auxiliary symbol information for
2817debugging.
242d9c06 2818_fi__(_COFF__ && !_A29K__)
d0281557 2819
7d7ecbdd 2820_if__(_AOUT__&&(_GENERIC__||!_A29K__))
242d9c06 2821@node Ln
d0281557 2822@section @code{.ln @var{line-number}}
66b818fb
RP
2823
2824@cindex @code{ln} directive
d0281557 2825@samp{.ln} is a synonym for @samp{.line}.
7d7ecbdd 2826_fi__(_AOUT__&&(_GENERIC__||!_A29K__))
d0281557 2827_if__(_COFF__&&!_AOUT__)
242d9c06 2828@node Ln
d0281557 2829@section @code{.ln @var{line-number}}
66b818fb
RP
2830
2831@cindex @code{ln} directive
d0281557
RP
2832Tell @code{_AS__} to change the logical line number. @var{line-number}
2833must be an absolute expression. The next line will have that logical
7a4c8e5c 2834line number, so any other statements on the current line (after a
d0281557
RP
2835statement separator character @code{;}) will be reported as on logical
2836line number @var{line-number} @minus{} 1.
2837_if__(_BOUT__)
2838
2839This directive is accepted, but ignored, when @code{_AS__} is configured for
2840@code{b.out}; its effect is only associated with COFF output format.
2841_fi__(_BOUT__)
2842_fi__(_COFF__&&!_AOUT__)
2843
242d9c06 2844@node List
66b818fb
RP
2845@section @code{.list}
2846
2847@cindex @code{list} directive
2848@cindex listing control, turning on
2849Control (in conjunction with the @code{.nolist} directive) whether or
2850not assembly listings are generated. These two directives maintain an
2851internal counter (which is zero initially). @code{.list} increments the
2852counter, and @code{.nolist} decrements it. Assembly listings are
2853generated whenever the counter is greater than zero.
2854
2855By default, listings are disabled. When you enable them (with the
2856@samp{-a} command line option; @pxref{Invoking,,Command-Line Options}),
2857the initial value of the listing counter is one.
b50e59fe 2858
242d9c06 2859@node Long
b50e59fe 2860@section @code{.long @var{expressions}}
66b818fb
RP
2861
2862@cindex @code{long} directive
7a4c8e5c 2863@code{.long} is the same as @samp{.int}, @pxref{Int,,@code{.int}}.
93b45514 2864
242d9c06
SC
2865@ignore
2866@c no one seems to know what this is for or whether this description is
2867@c what it really ought to do
2868@node Lsym
b50e59fe 2869@section @code{.lsym @var{symbol}, @var{expression}}
66b818fb
RP
2870
2871@cindex @code{lsym} directive
2872@cindex symbol, not referenced in assembly
47342e8f 2873@code{.lsym} creates a new symbol named @var{symbol}, but does not put it in
93b45514
RP
2874the hash table, ensuring it cannot be referenced by name during the
2875rest of the assembly. This sets the attributes of the symbol to be
47342e8f 2876the same as the expression value:
d0281557 2877@smallexample
b50e59fe 2878@var{other} = @var{descriptor} = 0
24b1493d 2879@var{type} = @r{(section of @var{expression})}
b50e59fe 2880@var{value} = @var{expression}
d0281557
RP
2881@end smallexample
2882@noindent
2883The new symbol is not flagged as external.
242d9c06 2884@end ignore
93b45514 2885
242d9c06 2886@node Nolist
66b818fb
RP
2887@section @code{.nolist}
2888
2889@cindex @code{nolist} directive
2890@cindex listing control, turning off
2891Control (in conjunction with the @code{.list} directive) whether or
2892not assembly listings are generated. These two directives maintain an
2893internal counter (which is zero initially). @code{.list} increments the
2894counter, and @code{.nolist} decrements it. Assembly listings are
2895generated whenever the counter is greater than zero.
2896
242d9c06 2897@node Octa
b50e59fe 2898@section @code{.octa @var{bignums}}
66b818fb
RP
2899
2900@c FIXME: double size emitted for "octa" on i960, others? Or warn?
2901@cindex @code{octa} directive
2902@cindex integer, 16-byte
2903@cindex sixteen byte integer
47342e8f 2904This directive expects zero or more bignums, separated by commas. For each
b50e59fe
RP
2905bignum, it emits a 16-byte integer.
2906
d0281557
RP
2907The term ``octa'' comes from contexts in which a ``word'' is two bytes;
2908hence @emph{octa}-word for 16 bytes.
93b45514 2909
242d9c06 2910@node Org
b50e59fe 2911@section @code{.org @var{new-lc} , @var{fill}}
47342e8f 2912
66b818fb
RP
2913@cindex @code{org} directive
2914@cindex location counter, advancing
2915@cindex advancing location counter
2916@cindex current address, advancing
24b1493d 2917@code{.org} will advance the location counter of the current section to
93b45514 2918@var{new-lc}. @var{new-lc} is either an absolute expression or an
24b1493d
RP
2919expression with the same section as the current subsection. That is,
2920you can't use @code{.org} to cross sections: if @var{new-lc} has the
2921wrong section, the @code{.org} directive is ignored. To be compatible
2922with former assemblers, if the section of @var{new-lc} is absolute,
2923@code{_AS__} will issue a warning, then pretend the section of @var{new-lc}
2924is the same as the current subsection.
47342e8f
RP
2925
2926@code{.org} may only increase the location counter, or leave it
2927unchanged; you cannot use @code{.org} to move the location counter
d0281557 2928backwards.
47342e8f 2929
b50e59fe
RP
2930@c double negative used below "not undefined" because this is a specific
2931@c reference to "undefined" (as SEG_UNKNOWN is called in this manual)
24b1493d 2932@c section. pesch@cygnus.com 18feb91
d0281557 2933Because @code{_AS__} tries to assemble programs in one pass @var{new-lc}
b50e59fe 2934may not be undefined. If you really detest this restriction we eagerly await
d0281557 2935a chance to share your improved assembler.
93b45514 2936
24b1493d
RP
2937Beware that the origin is relative to the start of the section, not
2938to the start of the subsection. This is compatible with other
93b45514
RP
2939people's assemblers.
2940
24b1493d 2941When the location counter (of the current subsection) is advanced, the
93b45514
RP
2942intervening bytes are filled with @var{fill} which should be an
2943absolute expression. If the comma and @var{fill} are omitted,
2944@var{fill} defaults to zero.
2945
242d9c06 2946@node Psize
66b818fb
RP
2947@section @code{.psize @var{lines} , @var{columns}}
2948
2949@cindex @code{psize} directive
2950@cindex listing control: paper size
2951@cindex paper size, for listings
2952Use this directive to declare the number of lines---and, optionally, the
2953number of columns---to use for each page, when generating listings.
2954
2955If you don't use @code{.psize}, listings will use a default line-count
2956of 60. You may omit the comma and @var{columns} specification; the
2957default width is 200 columns.
2958
2959@code{_AS__} will generate formfeeds whenever the specified number of
2960lines is exceeded (or whenever you explicitly request one, using
2961@code{.eject}).
2962
2963If you specify @var{lines} as @code{0}, no formfeeds are generated save
2964those explicitly specified with @code{.eject}.
2965
242d9c06 2966@node Quad
b50e59fe 2967@section @code{.quad @var{bignums}}
66b818fb
RP
2968
2969@cindex @code{quad} directive
b50e59fe 2970@code{.quad} expects zero or more bignums, separated by commas. For
d0281557 2971each bignum, it emits
7a4c8e5c 2972_if__(_GENERIC__||(!_I960__))
d0281557 2973an 8-byte integer. If the bignum won't fit in 8
b50e59fe 2974bytes, it prints a warning message; and just takes the lowest order 8
d0281557 2975bytes of the bignum.@refill
66b818fb
RP
2976@cindex eight-byte integer
2977@cindex integer, 8-byte
b50e59fe 2978
d0281557 2979The term ``quad'' comes from contexts in which a ``word'' is two bytes;
b50e59fe 2980hence @emph{quad}-word for 8 bytes.
7a4c8e5c
RP
2981_fi__(_GENERIC__||(!_I960__))
2982_if__(_I960__&&(!_GENERIC__))
d0281557
RP
2983a 16-byte integer. If the bignum won't fit in 16 bytes, it prints a
2984warning message; and just takes the lowest order 16 bytes of the
2985bignum.@refill
66b818fb
RP
2986@cindex sixteen-byte integer
2987@cindex integer, 16-byte
7a4c8e5c 2988_fi__(_I960__&&(!_GENERIC__))
d0281557 2989
242d9c06 2990@node Sbttl
66b818fb
RP
2991@section @code{.sbttl "@var{subheading}"}
2992
2993@cindex @code{sbttl} directive
2994@cindex subtitles for listings
2995@cindex listing control: subtitle
2996Use @var{subheading} as the title (third line, immediately after the
2997title line) when generating assembly listings.
2998
2999This directive affects subsequent pages, as well as the current page if
3000it appears within ten lines of the top of a page.
3001
7a4c8e5c 3002_if__(_COFF__||_BOUT__)
242d9c06 3003@node Scl
d0281557 3004@section @code{.scl @var{class}}
66b818fb
RP
3005
3006@cindex @code{scl} directive
3007@cindex symbol storage class (COFF)
3008@cindex COFF symbol storage class
d0281557
RP
3009Set the storage-class value for a symbol. This directive may only be
3010used inside a @code{.def}/@code{.endef} pair. Storage class may flag
3011whether a symbol is static or external, or it may record further
3012symbolic debugging information.
3013_if__(_BOUT__)
3014
3015The @samp{.scl} directive is primarily associated with COFF output; when
3016configured to generate @code{b.out} output format, @code{_AS__} will
3017accept this directive but ignore it.
3018_fi__(_BOUT__)
7a4c8e5c 3019_fi__(_COFF__||_BOUT__)
d0281557 3020
24b1493d 3021_if__(_COFF__)
242d9c06 3022@node Section
66b818fb
RP
3023@section @code{.section @var{name}, @var{subsection}}
3024
3025@cindex @code{section} directive
3026@cindex named section (COFF)
3027@cindex COFF named section
3028Assemble the following code into end of subsection numbered
3029@var{subsection} in the COFF named section @var{name}. If you omit
3030@var{subsection}, @code{_AS__} uses subsection number zero.
24b1493d
RP
3031@samp{.section .text} is equivalent to the @code{.text} directive;
3032@samp{.section .data} is equivalent to the @code{.data} directive.
24b1493d 3033_fi__(_COFF__)
242d9c06
SC
3034
3035@node Set
b50e59fe 3036@section @code{.set @var{symbol}, @var{expression}}
93b45514 3037
66b818fb
RP
3038@cindex @code{set} directive
3039@cindex symbol value, setting
47342e8f 3040This directive sets the value of @var{symbol} to @var{expression}. This
b50e59fe 3041will change @var{symbol}'s value and type to conform to
d0281557
RP
3042@var{expression}. If @var{symbol} was flagged as external, it remains
3043flagged. (@xref{Symbol Attributes}.)
93b45514 3044
47342e8f 3045You may @code{.set} a symbol many times in the same assembly.
24b1493d 3046If the expression's section is unknowable during pass 1, a second
93b45514 3047pass over the source program will be forced. The second pass is
d0281557 3048currently not implemented. @code{_AS__} will abort with an error
93b45514
RP
3049message if one is required.
3050
3051If you @code{.set} a global symbol, the value stored in the object
3052file is the last value stored into it.
3053
242d9c06 3054@node Short
b50e59fe 3055@section @code{.short @var{expressions}}
66b818fb
RP
3056
3057@cindex @code{short} directive
24b1493d 3058_if__(_GENERIC__ || _W16__)
7a4c8e5c 3059@code{.short} is the same as @samp{.word}. @xref{Word,,@code{.word}}.
24b1493d 3060_if__(_W32__)
7a4c8e5c
RP
3061In some configurations, however, @code{.short} and @code{.word} generate
3062numbers of different lengths; @pxref{_MACH_DEP__}.
24b1493d
RP
3063_fi__(_W32__)
3064_fi__(_GENERIC__|| _W16__)
3065_if__((!_GENERIC__) && _W32__)
b50e59fe
RP
3066This expects zero or more @var{expressions}, and emits
3067a 16 bit number for each.
24b1493d 3068_fi__((!_GENERIC__) && _W32__)
242d9c06
SC
3069
3070@node Single
b50e59fe 3071@section @code{.single @var{flonums}}
66b818fb
RP
3072
3073@cindex @code{single} directive
3074@cindex floating point numbers (single)
b50e59fe 3075This directive assembles zero or more flonums, separated by commas. It
d0281557 3076has the same effect as @code{.float}.
0b5b143a 3077_if__(_GENERIC__)
09352a5d 3078The exact kind of floating point numbers emitted depends on how
d0281557 3079@code{_AS__} is configured. @xref{_MACH_DEP__}.
0b5b143a 3080_fi__(_GENERIC__)
24b1493d 3081_if__((!_GENERIC__) && _IEEEFLOAT__)
d0281557 3082On the _HOST__ family, @code{.single} emits 32-bit floating point
66b818fb 3083numbers in @sc{ieee} format.
24b1493d 3084_fi__((!_GENERIC__) && _IEEEFLOAT__)
d0281557 3085
7a4c8e5c 3086_if__(_COFF__||_BOUT__)
242d9c06 3087@node Size
d0281557 3088@section @code{.size}
66b818fb
RP
3089
3090@cindex @code{size} directive
d0281557
RP
3091This directive is generated by compilers to include auxiliary debugging
3092information in the symbol table. It is only permitted inside
3093@code{.def}/@code{.endef} pairs.
3094_if__(_BOUT__)
3095
3096@samp{.size} is only meaningful when generating COFF format output; when
3097@code{_AS__} is generating @code{b.out}, it accepts this directive but
3098ignores it.
3099_fi__(_BOUT__)
7a4c8e5c
RP
3100_fi__(_COFF__||_BOUT__)
3101
242d9c06 3102@node Space
7d7ecbdd 3103_if__(_GENERIC__ || !_A29K__)
b50e59fe 3104@section @code{.space @var{size} , @var{fill}}
66b818fb
RP
3105
3106@cindex @code{space} directive
3107@cindex filling memory
47342e8f 3108This directive emits @var{size} bytes, each of value @var{fill}. Both
93b45514
RP
3109@var{size} and @var{fill} are absolute expressions. If the comma
3110and @var{fill} are omitted, @var{fill} is assumed to be zero.
7d7ecbdd 3111_fi__(_GENERIC__ || !_A29K__)
b50e59fe 3112
7d7ecbdd 3113_if__(_A29K__)
80381063 3114_if__(!_GENERIC__)
24b1493d 3115@section @code{.space}
66b818fb 3116@cindex @code{space} directive
80381063 3117_fi__(!_GENERIC__)
7a4c8e5c
RP
3118On the AMD 29K, this directive is ignored; it is accepted for
3119compatibility with other AMD 29K assemblers.
b50e59fe
RP
3120
3121@quotation
d0281557 3122@emph{Warning:} In other versions of the GNU assembler, the directive
0b5b143a 3123@code{.space} has the effect of @code{.block} @xref{_MACH_DEP__}.
b50e59fe 3124@end quotation
7d7ecbdd 3125_fi__(_A29K__)
93b45514 3126
24b1493d 3127_if__(_GENERIC__||!_H8__)
d0281557 3128_if__(_AOUT__||_BOUT__||_COFF__)
242d9c06 3129@node Stab
b50e59fe 3130@section @code{.stabd, .stabn, .stabs}
66b818fb
RP
3131
3132@cindex symbolic debuggers, information for
3133@cindex @code{stab@var{x}} directives
47342e8f 3134There are three directives that begin @samp{.stab}.
b50e59fe 3135All emit symbols (@pxref{Symbols}), for use by symbolic debuggers.
d0281557
RP
3136The symbols are not entered in the @code{_AS__} hash table: they
3137cannot be referenced elsewhere in the source file.
93b45514
RP
3138Up to five fields are required:
3139@table @var
3140@item string
3141This is the symbol's name. It may contain any character except @samp{\000},
3142so is more general than ordinary symbol names. Some debuggers used to
47342e8f 3143code arbitrarily complex structures into symbol names using this field.
93b45514 3144@item type
b50e59fe 3145An absolute expression. The symbol's type is set to the low 8
93b45514 3146bits of this expression.
d0281557 3147Any bit pattern is permitted, but @code{_LD__} and debuggers will choke on
93b45514
RP
3148silly bit patterns.
3149@item other
3150An absolute expression.
b50e59fe 3151The symbol's ``other'' attribute is set to the low 8 bits of this expression.
93b45514
RP
3152@item desc
3153An absolute expression.
b50e59fe 3154The symbol's descriptor is set to the low 16 bits of this expression.
93b45514 3155@item value
b50e59fe 3156An absolute expression which becomes the symbol's value.
93b45514
RP
3157@end table
3158
b50e59fe
RP
3159If a warning is detected while reading a @code{.stabd}, @code{.stabn},
3160or @code{.stabs} statement, the symbol has probably already been created
3161and you will get a half-formed symbol in your object file. This is
3162compatible with earlier assemblers!
93b45514 3163
47342e8f 3164@table @code
66b818fb 3165@cindex @code{stabd} directive
47342e8f 3166@item .stabd @var{type} , @var{other} , @var{desc}
93b45514
RP
3167
3168The ``name'' of the symbol generated is not even an empty string.
3169It is a null pointer, for compatibility. Older assemblers used a
3170null pointer so they didn't waste space in object files with empty
3171strings.
3172
b50e59fe 3173The symbol's value is set to the location counter,
93b45514
RP
3174relocatably. When your program is linked, the value of this symbol
3175will be where the location counter was when the @code{.stabd} was
3176assembled.
3177
47342e8f 3178@item .stabn @var{type} , @var{other} , @var{desc} , @var{value}
66b818fb 3179@cindex @code{stabn} directive
93b45514
RP
3180The name of the symbol is set to the empty string @code{""}.
3181
47342e8f 3182@item .stabs @var{string} , @var{type} , @var{other} , @var{desc} , @var{value}
66b818fb 3183@cindex @code{stabs} directive
47342e8f
RP
3184All five fields are specified.
3185@end table
d0281557 3186_fi__(_AOUT__||_BOUT__||_COFF__)
24b1493d 3187_fi__(_GENERIC__||!_H8__)
d0281557 3188
7a4c8e5c 3189_if__(_COFF__||_BOUT__)
242d9c06 3190@node Tag
d0281557 3191@section @code{.tag @var{structname}}
66b818fb
RP
3192
3193@cindex COFF structure debugging
3194@cindex structure debugging, COFF
3195@cindex @code{tag} directive
d0281557
RP
3196This directive is generated by compilers to include auxiliary debugging
3197information in the symbol table. It is only permitted inside
3198@code{.def}/@code{.endef} pairs. Tags are used to link structure
3199definitions in the symbol table with instances of those structures.
3200_if__(_BOUT__)
3201
3202@samp{.tag} is only used when generating COFF format output; when
3203@code{_AS__} is generating @code{b.out}, it accepts this directive but
3204ignores it.
3205_fi__(_BOUT__)
7a4c8e5c
RP
3206_fi__(_COFF__||_BOUT__)
3207
242d9c06 3208@node Text
24b1493d 3209@section @code{.text @var{subsection}}
66b818fb
RP
3210
3211@cindex @code{text} directive
d0281557 3212Tells @code{_AS__} to assemble the following statements onto the end of
24b1493d
RP
3213the text subsection numbered @var{subsection}, which is an absolute
3214expression. If @var{subsection} is omitted, subsection number zero
93b45514
RP
3215is used.
3216
242d9c06 3217@node Title
66b818fb
RP
3218@section @code{.title "@var{heading}"}
3219
3220@cindex @code{title} directive
3221@cindex listing control: title line
3222Use @var{heading} as the title (second line, immediately after the
3223source file name and pagenumber) when generating assembly listings.
3224
3225This directive affects subsequent pages, as well as the current page if
3226it appears within ten lines of the top of a page.
3227
3228_if__(_COFF__||_BOUT__)
242d9c06 3229@node Type
d0281557 3230@section @code{.type @var{int}}
66b818fb
RP
3231
3232@cindex COFF symbol type
3233@cindex symbol type, COFF
3234@cindex @code{type} directive
d0281557
RP
3235This directive, permitted only within @code{.def}/@code{.endef} pairs,
3236records the integer @var{int} as the type attribute of a symbol table entry.
3237_if__(_BOUT__)
3238
3239@samp{.type} is associated only with COFF format output; when
3240@code{_AS__} is configured for @code{b.out} output, it accepts this
3241directive but ignores it.
3242_fi__(_BOUT__)
7a4c8e5c 3243_fi__(_COFF__||_BOUT__)
d0281557 3244
7a4c8e5c 3245_if__(_COFF__||_BOUT__)
242d9c06 3246@node Val
d0281557 3247@section @code{.val @var{addr}}
66b818fb
RP
3248
3249@cindex @code{val} directive
3250@cindex COFF value attribute
3251@cindex value attribute, COFF
d0281557
RP
3252This directive, permitted only within @code{.def}/@code{.endef} pairs,
3253records the address @var{addr} as the value attribute of a symbol table
3254entry.
3255_if__(_BOUT__)
3256
3257@samp{.val} is used only for COFF output; when @code{_AS__} is
3258configured for @code{b.out}, it accepts this directive but ignores it.
3259_fi__(_BOUT__)
7a4c8e5c
RP
3260_fi__(_COFF__||_BOUT__)
3261
242d9c06 3262@node Word
b50e59fe 3263@section @code{.word @var{expressions}}
66b818fb
RP
3264
3265@cindex @code{word} directive
24b1493d 3266This directive expects zero or more @var{expressions}, of any section,
b50e59fe 3267separated by commas.
24b1493d 3268_if__((!_GENERIC__) && _W32__)
d0281557 3269For each expression, @code{_AS__} emits a 32-bit number.
24b1493d
RP
3270_fi__((!_GENERIC__) && _W32__)
3271_if__((!_GENERIC__) && _W16__)
d0281557 3272For each expression, @code{_AS__} emits a 16-bit number.
24b1493d 3273_fi__((!_GENERIC__) && _W16__)
09352a5d 3274
0b5b143a
RP
3275_if__(_GENERIC__)
3276The size of the number emitted, and its byte order,
3277depends on what kind of computer will run the program.
3278_fi__(_GENERIC__)
09352a5d 3279
7a4c8e5c 3280@c on amd29k, i960, sparc the "special treatment to support compilers" doesn't
09352a5d 3281@c happen---32-bit addressability, period; no long/short jumps.
24b1493d 3282_if__(_GENERIC__ || _DIFFTABKLUG__)
66b818fb
RP
3283@cindex difference tables altered
3284@cindex altered difference tables
0b5b143a
RP
3285@quotation
3286@emph{Warning: Special Treatment to support Compilers}
3287@end quotation
47342e8f 3288
7a4c8e5c 3289_if__(_GENERIC__)
24b1493d
RP
3290Machines with a 32-bit address space, but that do less than 32-bit
3291addressing, require the following special treatment. If the machine of
3292interest to you does 32-bit addressing (or doesn't require it;
3293@pxref{_MACH_DEP__}), you can ignore this issue.
7a4c8e5c
RP
3294
3295_fi__(_GENERIC__)
47342e8f 3296In order to assemble compiler output into something that will work,
d0281557 3297@code{_AS__} will occasionlly do strange things to @samp{.word} directives.
47342e8f 3298Directives of the form @samp{.word sym1-sym2} are often emitted by
d0281557 3299compilers as part of jump tables. Therefore, when @code{_AS__} assembles a
47342e8f 3300directive of the form @samp{.word sym1-sym2}, and the difference between
d0281557
RP
3301@code{sym1} and @code{sym2} does not fit in 16 bits, @code{_AS__} will
3302create a @dfn{secondary jump table}, immediately before the next label.
24b1493d 3303This secondary jump table will be preceded by a short-jump to the
47342e8f
RP
3304first byte after the secondary table. This short-jump prevents the flow
3305of control from accidentally falling into the new table. Inside the
3306table will be a long-jump to @code{sym2}. The original @samp{.word}
3307will contain @code{sym1} minus the address of the long-jump to
d0281557 3308@code{sym2}.
47342e8f
RP
3309
3310If there were several occurrences of @samp{.word sym1-sym2} before the
3311secondary jump table, all of them will be adjusted. If there was a
3312@samp{.word sym3-sym4}, that also did not fit in sixteen bits, a
3313long-jump to @code{sym4} will be included in the secondary jump table,
3314and the @code{.word} directives will be adjusted to contain @code{sym3}
3315minus the address of the long-jump to @code{sym4}; and so on, for as many
d0281557 3316entries in the original jump table as necessary.
09352a5d
RP
3317
3318_if__(_INTERNALS__)
d0281557 3319@emph{This feature may be disabled by compiling @code{_AS__} with the
47342e8f
RP
3320@samp{-DWORKING_DOT_WORD} option.} This feature is likely to confuse
3321assembly language programmers.
09352a5d 3322_fi__(_INTERNALS__)
24b1493d 3323_fi__(_GENERIC__ || _DIFFTABKLUG__)
93b45514 3324
242d9c06 3325@node Deprecated
93b45514 3326@section Deprecated Directives
66b818fb
RP
3327
3328@cindex deprecated directives
3329@cindex obsolescent directives
93b45514
RP
3330One day these directives won't work.
3331They are included for compatibility with older assemblers.
3332@table @t
3333@item .abort
b50e59fe 3334@item .app-file
93b45514
RP
3335@item .line
3336@end table
3337
242d9c06 3338@node _MACH_DEP__
0b5b143a 3339_if__(_GENERIC__)
09352a5d 3340@chapter Machine Dependent Features
66b818fb
RP
3341
3342@cindex machine dependencies
3343The machine instruction sets are (almost by definition) different on
3344each machine where @code{_AS__} runs. Floating point representations
3345vary as well, and @code{_AS__} often supports a few additional
3346directives or command-line options for compatibility with other
3347assemblers on a particular platform. Finally, some versions of
3348@code{_AS__} support special pseudo-instructions for branch
3349optimization.
3350
3351This chapter discusses most of these differences, though it does not
3352include details on any machine's instruction set. For details on that
3353subject, see the hardware manufacturer's manual.
3354
7a4c8e5c
RP
3355@menu
3356_if__(_VAX__)
3357* Vax-Dependent:: VAX Dependent Features
3358_fi__(_VAX__)
7d7ecbdd 3359_if__(_A29K__)
7a4c8e5c 3360* AMD29K-Dependent:: AMD 29K Dependent Features
7d7ecbdd 3361_fi__(_A29K__)
24b1493d 3362_if__(_H8__)
242d9c06 3363* H8/300-Dependent:: Hitachi H8/300 Dependent Features
24b1493d 3364_fi__(_H8__)
7a4c8e5c
RP
3365_if__(_I960__)
3366* i960-Dependent:: Intel 80960 Dependent Features
3367_fi__(_I960__)
3368_if__(_M680X0__)
3369* M68K-Dependent:: M680x0 Dependent Features
3370_fi__(_M680X0__)
3371_if__(_SPARC__)
3372* Sparc-Dependent:: SPARC Dependent Features
3373_fi__(_SPARC__)
242d9c06
SC
3374_if__(_Z8000__)
3375* Z8000-Dependent:: Z8000 Dependent Features
3376_fi__(_Z8000__)
7a4c8e5c
RP
3377_if__(_I80386__)
3378* i386-Dependent:: 80386 Dependent Features
3379_fi__(_I80386__)
3380@end menu
3381
0b5b143a 3382_fi__(_GENERIC__)
09352a5d 3383_if__(_VAX__)
7a4c8e5c 3384_if__(_GENERIC__)
242d9c06 3385@node Vax-Dependent
7a4c8e5c 3386_fi__(_GENERIC__)
0b5b143a 3387_CHAPSEC__(0+_GENERIC__) VAX Dependent Features
66b818fb
RP
3388
3389@cindex VAX support
7a4c8e5c
RP
3390@menu
3391* Vax-Opts:: VAX Command-Line Options
3392* VAX-float:: VAX Floating Point
3393* VAX-directives:: Vax Machine Directives
3394* VAX-opcodes:: VAX Opcodes
3395* VAX-branch:: VAX Branch Improvement
3396* VAX-operands:: VAX Operands
3397* VAX-no:: Not Supported on VAX
3398@end menu
3399
242d9c06 3400@node Vax-Opts
7a4c8e5c 3401_CHAPSEC__(1+_GENERIC__) VAX Command-Line Options
93b45514 3402
66b818fb
RP
3403@cindex command-line options ignored, VAX
3404@cindex VAX command-line options ignored
d0281557 3405The Vax version of @code{_AS__} accepts any of the following options,
93b45514
RP
3406gives a warning message that the option was ignored and proceeds.
3407These options are for compatibility with scripts designed for other
3408people's assemblers.
3409
3410@table @asis
3411@item @kbd{-D} (Debug)
3412@itemx @kbd{-S} (Symbol Table)
3413@itemx @kbd{-T} (Token Trace)
66b818fb
RP
3414@cindex @code{-D}, ignored on VAX
3415@cindex @code{-S}, ignored on VAX
3416@cindex @code{-T}, ignored on VAX
93b45514
RP
3417These are obsolete options used to debug old assemblers.
3418
3419@item @kbd{-d} (Displacement size for JUMPs)
66b818fb 3420@cindex @code{-d}, VAX option
93b45514
RP
3421This option expects a number following the @kbd{-d}. Like options
3422that expect filenames, the number may immediately follow the
3423@kbd{-d} (old standard) or constitute the whole of the command line
3424argument that follows @kbd{-d} (GNU standard).
3425
3426@item @kbd{-V} (Virtualize Interpass Temporary File)
66b818fb 3427@cindex @code{-V}, redundant on VAX
93b45514
RP
3428Some other assemblers use a temporary file. This option
3429commanded them to keep the information in active memory rather
d0281557 3430than in a disk file. @code{_AS__} always does this, so this
93b45514
RP
3431option is redundant.
3432
3433@item @kbd{-J} (JUMPify Longer Branches)
66b818fb 3434@cindex @code{-J}, ignored on VAX
93b45514
RP
3435Many 32-bit computers permit a variety of branch instructions
3436to do the same job. Some of these instructions are short (and
3437fast) but have a limited range; others are long (and slow) but
3438can branch anywhere in virtual memory. Often there are 3
3439flavors of branch: short, medium and long. Some other
3440assemblers would emit short and medium branches, unless told by
3441this option to emit short and long branches.
3442
3443@item @kbd{-t} (Temporary File Directory)
66b818fb 3444@cindex @code{-t}, ignored on VAX
93b45514
RP
3445Some other assemblers may use a temporary file, and this option
3446takes a filename being the directory to site the temporary
d0281557 3447file. @code{_AS__} does not use a temporary disk file, so this
93b45514
RP
3448option makes no difference. @kbd{-t} needs exactly one
3449filename.
3450@end table
3451
66b818fb
RP
3452@cindex VMS (VAX) options
3453@cindex options for VAX/VMS
3454@cindex VAX/VMS options
3455@cindex @code{-h} option, VAX/VMS
3456@cindex @code{-+} option, VAX/VMS
3457@cindex Vax-11 C compatibility
3458@cindex symbols with lowercase, VAX/VMS
3459@c FIXME! look into "I think" below, correct if needed, delete.
93b45514
RP
3460The Vax version of the assembler accepts two options when
3461compiled for VMS. They are @kbd{-h}, and @kbd{-+}. The
d0281557 3462@kbd{-h} option prevents @code{_AS__} from modifying the
93b45514 3463symbol-table entries for symbols that contain lowercase
d0281557 3464characters (I think). The @kbd{-+} option causes @code{_AS__} to
93b45514
RP
3465print warning messages if the FILENAME part of the object file,
3466or any symbol name is larger than 31 characters. The @kbd{-+}
3467option also insertes some code following the @samp{_main}
47342e8f 3468symbol so that the object file will be compatible with Vax-11
93b45514
RP
3469"C".
3470
242d9c06 3471@node VAX-float
7a4c8e5c 3472_CHAPSEC__(1+_GENERIC__) VAX Floating Point
66b818fb
RP
3473
3474@cindex VAX floating point
3475@cindex floating point, VAX
93b45514
RP
3476Conversion of flonums to floating point is correct, and
3477compatible with previous assemblers. Rounding is
3478towards zero if the remainder is exactly half the least significant bit.
3479
3480@code{D}, @code{F}, @code{G} and @code{H} floating point formats
3481are understood.
3482
47342e8f 3483Immediate floating literals (@emph{e.g.} @samp{S`$6.9})
93b45514
RP
3484are rendered correctly. Again, rounding is towards zero in the
3485boundary case.
3486
66b818fb
RP
3487@cindex @code{float} directive, VAX
3488@cindex @code{double} directive, VAX
93b45514
RP
3489The @code{.float} directive produces @code{f} format numbers.
3490The @code{.double} directive produces @code{d} format numbers.
3491
242d9c06 3492@node VAX-directives
0b5b143a 3493_CHAPSEC__(1+_GENERIC__) Vax Machine Directives
66b818fb
RP
3494
3495@cindex machine directives, VAX
3496@cindex VAX machine directives
93b45514
RP
3497The Vax version of the assembler supports four directives for
3498generating Vax floating point constants. They are described in the
3499table below.
3500
66b818fb 3501@cindex wide floating point directives, VAX
93b45514
RP
3502@table @code
3503@item .dfloat
66b818fb 3504@cindex @code{dfloat} directive, VAX
93b45514
RP
3505This expects zero or more flonums, separated by commas, and
3506assembles Vax @code{d} format 64-bit floating point constants.
3507
3508@item .ffloat
66b818fb 3509@cindex @code{ffloat} directive, VAX
93b45514
RP
3510This expects zero or more flonums, separated by commas, and
3511assembles Vax @code{f} format 32-bit floating point constants.
3512
3513@item .gfloat
66b818fb 3514@cindex @code{gfloat} directive, VAX
93b45514
RP
3515This expects zero or more flonums, separated by commas, and
3516assembles Vax @code{g} format 64-bit floating point constants.
3517
3518@item .hfloat
66b818fb 3519@cindex @code{hfloat} directive, VAX
93b45514
RP
3520This expects zero or more flonums, separated by commas, and
3521assembles Vax @code{h} format 128-bit floating point constants.
3522
3523@end table
3524
242d9c06 3525@node VAX-opcodes
7a4c8e5c 3526_CHAPSEC__(1+_GENERIC__) VAX Opcodes
66b818fb
RP
3527
3528@cindex VAX opcode mnemonics
3529@cindex opcode mnemonics, VAX
3530@cindex mnemonics for opcodes, VAX
93b45514
RP
3531All DEC mnemonics are supported. Beware that @code{case@dots{}}
3532instructions have exactly 3 operands. The dispatch table that
3533follows the @code{case@dots{}} instruction should be made with
3534@code{.word} statements. This is compatible with all unix
3535assemblers we know of.
3536
242d9c06 3537@node VAX-branch
7a4c8e5c 3538_CHAPSEC__(1+_GENERIC__) VAX Branch Improvement
66b818fb
RP
3539
3540@cindex VAX branch improvement
3541@cindex branch improvement, VAX
3542@cindex pseudo-ops for branch, VAX
93b45514
RP
3543Certain pseudo opcodes are permitted. They are for branch
3544instructions. They expand to the shortest branch instruction that
3545will reach the target. Generally these mnemonics are made by
3546substituting @samp{j} for @samp{b} at the start of a DEC mnemonic.
3547This feature is included both for compatibility and to help
3548compilers. If you don't need this feature, don't use these
3549opcodes. Here are the mnemonics, and the code they can expand into.
3550
3551@table @code
3552@item jbsb
3553@samp{Jsb} is already an instruction mnemonic, so we chose @samp{jbsb}.
3554@table @asis
3555@item (byte displacement)
3556@kbd{bsbb @dots{}}
3557@item (word displacement)
3558@kbd{bsbw @dots{}}
3559@item (long displacement)
3560@kbd{jsb @dots{}}
3561@end table
3562@item jbr
3563@itemx jr
3564Unconditional branch.
3565@table @asis
3566@item (byte displacement)
3567@kbd{brb @dots{}}
3568@item (word displacement)
3569@kbd{brw @dots{}}
3570@item (long displacement)
3571@kbd{jmp @dots{}}
3572@end table
3573@item j@var{COND}
3574@var{COND} may be any one of the conditional branches
80381063
RP
3575@code{neq}, @code{nequ}, @code{eql}, @code{eqlu}, @code{gtr},
3576@code{geq}, @code{lss}, @code{gtru}, @code{lequ}, @code{vc}, @code{vs},
3577@code{gequ}, @code{cc}, @code{lssu}, @code{cs}.
93b45514 3578@var{COND} may also be one of the bit tests
80381063
RP
3579@code{bs}, @code{bc}, @code{bss}, @code{bcs}, @code{bsc}, @code{bcc},
3580@code{bssi}, @code{bcci}, @code{lbs}, @code{lbc}.
93b45514
RP
3581@var{NOTCOND} is the opposite condition to @var{COND}.
3582@table @asis
3583@item (byte displacement)
3584@kbd{b@var{COND} @dots{}}
3585@item (word displacement)
0b5b143a 3586@kbd{b@var{NOTCOND} foo ; brw @dots{} ; foo:}
93b45514 3587@item (long displacement)
0b5b143a 3588@kbd{b@var{NOTCOND} foo ; jmp @dots{} ; foo:}
93b45514
RP
3589@end table
3590@item jacb@var{X}
3591@var{X} may be one of @code{b d f g h l w}.
3592@table @asis
3593@item (word displacement)
3594@kbd{@var{OPCODE} @dots{}}
3595@item (long displacement)
0b5b143a
RP
3596@example
3597@var{OPCODE} @dots{}, foo ;
3598brb bar ;
3599foo: jmp @dots{} ;
3600bar:
3601@end example
93b45514
RP
3602@end table
3603@item jaob@var{YYY}
3604@var{YYY} may be one of @code{lss leq}.
3605@item jsob@var{ZZZ}
3606@var{ZZZ} may be one of @code{geq gtr}.
3607@table @asis
3608@item (byte displacement)
3609@kbd{@var{OPCODE} @dots{}}
3610@item (word displacement)
0b5b143a
RP
3611@example
3612@var{OPCODE} @dots{}, foo ;
3613brb bar ;
3614foo: brw @var{destination} ;
3615bar:
3616@end example
93b45514 3617@item (long displacement)
0b5b143a
RP
3618@example
3619@var{OPCODE} @dots{}, foo ;
3620brb bar ;
3621foo: jmp @var{destination} ;
3622bar:
3623@end example
93b45514
RP
3624@end table
3625@item aobleq
3626@itemx aoblss
3627@itemx sobgeq
3628@itemx sobgtr
3629@table @asis
3630@item (byte displacement)
3631@kbd{@var{OPCODE} @dots{}}
3632@item (word displacement)
0b5b143a
RP
3633@example
3634@var{OPCODE} @dots{}, foo ;
3635brb bar ;
3636foo: brw @var{destination} ;
3637bar:
3638@end example
93b45514 3639@item (long displacement)
0b5b143a
RP
3640@example
3641@var{OPCODE} @dots{}, foo ;
3642brb bar ;
3643foo: jmp @var{destination} ;
3644bar:
3645@end example
93b45514
RP
3646@end table
3647@end table
3648
242d9c06 3649@node VAX-operands
7a4c8e5c 3650_CHAPSEC__(1+_GENERIC__) VAX Operands
66b818fb
RP
3651
3652@cindex VAX operand notation
3653@cindex operand notation, VAX
3654@cindex immediate character, VAX
3655@cindex VAX immediate character
93b45514
RP
3656The immediate character is @samp{$} for Unix compatibility, not
3657@samp{#} as DEC writes it.
3658
66b818fb
RP
3659@cindex indirect character, VAX
3660@cindex VAX indirect character
93b45514
RP
3661The indirect character is @samp{*} for Unix compatibility, not
3662@samp{@@} as DEC writes it.
3663
66b818fb
RP
3664@cindex displacement sizing character, VAX
3665@cindex VAX displacement sizing character
93b45514
RP
3666The displacement sizing character is @samp{`} (an accent grave) for
3667Unix compatibility, not @samp{^} as DEC writes it. The letter
3668preceding @samp{`} may have either case. @samp{G} is not
3669understood, but all other letters (@code{b i l s w}) are understood.
3670
66b818fb
RP
3671@cindex register names, VAX
3672@cindex VAX register names
93b45514
RP
3673Register names understood are @code{r0 r1 r2 @dots{} r15 ap fp sp
3674pc}. Any case of letters will do.
3675
3676For instance
d0281557 3677@smallexample
93b45514 3678tstb *w`$4(r5)
d0281557 3679@end smallexample
93b45514
RP
3680
3681Any expression is permitted in an operand. Operands are comma
3682separated.
3683
3684@c There is some bug to do with recognizing expressions
3685@c in operands, but I forget what it is. It is
3686@c a syntax clash because () is used as an address mode
3687@c and to encapsulate sub-expressions.
7a4c8e5c 3688
242d9c06 3689@node VAX-no
7a4c8e5c 3690_CHAPSEC__(1+_GENERIC__) Not Supported on VAX
66b818fb
RP
3691
3692@cindex VAX bitfields not supported
3693@cindex bitfields, not supported on VAX
d0281557 3694Vax bit fields can not be assembled with @code{_AS__}. Someone
93b45514 3695can add the required code if they really need it.
0b5b143a 3696
09352a5d 3697_fi__(_VAX__)
7d7ecbdd 3698_if__(_A29K__)
7a4c8e5c 3699_if__(_GENERIC__)
242d9c06 3700@node AMD29K-Dependent
7a4c8e5c 3701_fi__(_GENERIC__)
0b5b143a 3702_CHAPSEC__(0+_GENERIC__) AMD 29K Dependent Features
66b818fb
RP
3703
3704@cindex AMD 29K support
3705@cindex 29K support
7a4c8e5c
RP
3706@menu
3707* AMD29K Options:: Options
3708* AMD29K Syntax:: Syntax
3709* AMD29K Floating Point:: Floating Point
3710* AMD29K Directives:: AMD 29K Machine Directives
3711* AMD29K Opcodes:: Opcodes
3712@end menu
3713
242d9c06 3714@node AMD29K Options
0b5b143a 3715_CHAPSEC__(1+_GENERIC__) Options
66b818fb
RP
3716@cindex AMD 29K options (none)
3717@cindex options for AMD29K (none)
d0281557 3718@code{_AS__} has no additional command-line options for the AMD
b50e59fe
RP
371929K family.
3720
242d9c06 3721@node AMD29K Syntax
0b5b143a 3722_CHAPSEC__(1+_GENERIC__) Syntax
7a4c8e5c
RP
3723@menu
3724* AMD29K-Chars:: Special Characters
3725* AMD29K-Regs:: Register Names
3726@end menu
3727
242d9c06 3728@node AMD29K-Chars
0b5b143a 3729_CHAPSEC__(2+_GENERIC__) Special Characters
66b818fb
RP
3730
3731@cindex line comment character, AMD 29K
3732@cindex AMD 29K line comment character
d0281557 3733@samp{;} is the line comment character.
b50e59fe 3734
66b818fb
RP
3735@cindex line separator, AMD 29K
3736@cindex AMD 29K line separator
3737@cindex statement separator, AMD 29K
3738@cindex AMD 29K statement separator
b50e59fe
RP
3739@samp{@@} can be used instead of a newline to separate statements.
3740
66b818fb
RP
3741@cindex identifiers, AMD 29K
3742@cindex AMD 29K identifiers
b50e59fe
RP
3743The character @samp{?} is permitted in identifiers (but may not begin
3744an identifier).
3745
242d9c06 3746@node AMD29K-Regs
0b5b143a 3747_CHAPSEC__(2+_GENERIC__) Register Names
66b818fb
RP
3748
3749@cindex AMD 29K register names
3750@cindex register names, AMD 29K
b50e59fe
RP
3751General-purpose registers are represented by predefined symbols of the
3752form @samp{GR@var{nnn}} (for global registers) or @samp{LR@var{nnn}}
3753(for local registers), where @var{nnn} represents a number between
3754@code{0} and @code{127}, written with no leading zeros. The leading
3755letters may be in either upper or lower case; for example, @samp{gr13}
3756and @samp{LR7} are both valid register names.
3757
3758You may also refer to general-purpose registers by specifying the
3759register number as the result of an expression (prefixed with @samp{%%}
3760to flag the expression as a register number):
d0281557 3761@smallexample
b50e59fe 3762%%@var{expression}
d0281557 3763@end smallexample
7a4c8e5c
RP
3764@noindent
3765---where @var{expression} must be an absolute expression evaluating to a
3766number between @code{0} and @code{255}. The range [0, 127] refers to
3767global registers, and the range [128, 255] to local registers.
b50e59fe 3768
66b818fb
RP
3769@cindex special purpose registers, AMD 29K
3770@cindex AMD 29K special purpose registers
3771@cindex protected registers, AMD 29K
3772@cindex AMD 29K protected registers
d0281557 3773In addition, @code{_AS__} understands the following protected
b50e59fe
RP
3774special-purpose register names for the AMD 29K family:
3775
d0281557 3776@smallexample
b50e59fe
RP
3777 vab chd pc0
3778 ops chc pc1
3779 cps rbp pc2
3780 cfg tmc mmu
3781 cha tmr lru
d0281557 3782@end smallexample
b50e59fe
RP
3783
3784These unprotected special-purpose register names are also recognized:
d0281557
RP
3785@smallexample
3786 ipc alu fpe
b50e59fe 3787 ipa bp inte
d0281557 3788 ipb fc fps
b50e59fe 3789 q cr exop
d0281557 3790@end smallexample
b50e59fe 3791
242d9c06 3792@node AMD29K Floating Point
0b5b143a 3793_CHAPSEC__(1+_GENERIC__) Floating Point
66b818fb
RP
3794
3795@cindex floating point, AMD 29K (@sc{ieee})
3796@cindex AMD 29K floating point (@sc{ieee})
3797The AMD 29K family uses @sc{ieee} floating-point numbers.
b50e59fe 3798
242d9c06 3799@node AMD29K Directives
0b5b143a 3800_CHAPSEC__(1+_GENERIC__) AMD 29K Machine Directives
d0281557 3801
66b818fb
RP
3802@cindex machine directives, AMD 29K
3803@cindex AMD 29K machine directives
0b5b143a
RP
3804@table @code
3805@item .block @var{size} , @var{fill}
66b818fb 3806@cindex @code{block} directive, AMD 29K
b50e59fe
RP
3807This directive emits @var{size} bytes, each of value @var{fill}. Both
3808@var{size} and @var{fill} are absolute expressions. If the comma
3809and @var{fill} are omitted, @var{fill} is assumed to be zero.
3810
d0281557
RP
3811In other versions of the GNU assembler, this directive is called
3812@samp{.space}.
0b5b143a 3813@end table
b50e59fe 3814
0b5b143a
RP
3815@table @code
3816@item .cputype
66b818fb 3817@cindex @code{cputype} directive, AMD 29K
b50e59fe
RP
3818This directive is ignored; it is accepted for compatibility with other
3819AMD 29K assemblers.
3820
0b5b143a 3821@item .file
66b818fb 3822@cindex @code{file} directive, AMD 29K
b50e59fe
RP
3823This directive is ignored; it is accepted for compatibility with other
3824AMD 29K assemblers.
3825
3826@quotation
d0281557
RP
3827@emph{Warning:} in other versions of the GNU assembler, @code{.file} is
3828used for the directive called @code{.app-file} in the AMD 29K support.
b50e59fe
RP
3829@end quotation
3830
0b5b143a 3831@item .line
66b818fb 3832@cindex @code{line} directive, AMD 29K
b50e59fe
RP
3833This directive is ignored; it is accepted for compatibility with other
3834AMD 29K assemblers.
3835
242d9c06
SC
3836@ignore
3837@c since we're ignoring .lsym...
0b5b143a 3838@item .reg @var{symbol}, @var{expression}
66b818fb 3839@cindex @code{reg} directive, AMD 29K
7a4c8e5c 3840@code{.reg} has the same effect as @code{.lsym}; @pxref{Lsym,,@code{.lsym}}.
242d9c06 3841@end ignore
b50e59fe 3842
0b5b143a 3843@item .sect
66b818fb 3844@cindex @code{sect} directive, AMD 29K
b50e59fe
RP
3845This directive is ignored; it is accepted for compatibility with other
3846AMD 29K assemblers.
3847
24b1493d 3848@item .use @var{section name}
66b818fb 3849@cindex @code{use} directive, AMD 29K
24b1493d
RP
3850Establishes the section and subsection for the following code;
3851@var{section name} may be one of @code{.text}, @code{.data},
3852@code{.data1}, or @code{.lit}. With one of the first three @var{section
b50e59fe 3853name} options, @samp{.use} is equivalent to the machine directive
24b1493d 3854@var{section name}; the remaining case, @samp{.use .lit}, is the same as
b50e59fe 3855@samp{.data 200}.
0b5b143a 3856@end table
b50e59fe 3857
242d9c06 3858@node AMD29K Opcodes
7a4c8e5c 3859_CHAPSEC__(1+_GENERIC__) Opcodes
66b818fb
RP
3860
3861@cindex AMD 29K opcodes
3862@cindex opcodes for AMD 29K
d0281557 3863@code{_AS__} implements all the standard AMD 29K opcodes. No
b50e59fe
RP
3864additional pseudo-instructions are needed on this family.
3865
3866For information on the 29K machine instruction set, see @cite{Am29000
3867User's Manual}, Advanced Micro Devices, Inc.
3868
7d7ecbdd 3869_fi__(_A29K__)
24b1493d
RP
3870_if__(_H8__)
3871_if__(_GENERIC__)
242d9c06 3872@node H8/300-Dependent
24b1493d
RP
3873_fi__(_GENERIC__)
3874_CHAPSEC__(0+_GENERIC__) H8/300 Dependent Features
66b818fb
RP
3875
3876@cindex H8/300 support
24b1493d 3877@menu
66b818fb
RP
3878* H8/300 Options:: Options
3879* H8/300 Syntax:: Syntax
3880* H8/300 Floating Point:: Floating Point
3881* H8/300 Directives:: H8/300 Machine Directives
3882* H8/300 Opcodes:: Opcodes
24b1493d
RP
3883@end menu
3884
242d9c06 3885@node H8/300 Options
24b1493d 3886_CHAPSEC__(1+_GENERIC__) Options
66b818fb
RP
3887
3888@cindex H8/300 options (none)
3889@cindex options, H8/300 (none)
24b1493d
RP
3890@code{_AS__} has no additional command-line options for the Hitachi
3891H8/300 family.
3892
242d9c06 3893@node H8/300 Syntax
24b1493d
RP
3894_CHAPSEC__(1+_GENERIC__) Syntax
3895@menu
66b818fb
RP
3896* H8/300-Chars:: Special Characters
3897* H8/300-Regs:: Register Names
3898* H8/300-Addressing:: Addressing Modes
24b1493d
RP
3899@end menu
3900
242d9c06 3901@node H8/300-Chars
24b1493d 3902_CHAPSEC__(2+_GENERIC__) Special Characters
66b818fb
RP
3903
3904@cindex line comment character, H8/300
3905@cindex H8/300 line comment character
24b1493d
RP
3906@samp{;} is the line comment character.
3907
66b818fb
RP
3908@cindex line separator, H8/300
3909@cindex statement separator, H8/300
3910@cindex H8/300 line separator
24b1493d
RP
3911@samp{$} can be used instead of a newline to separate statements.
3912Therefore @emph{you may not use @samp{$} in symbol names} on the H8/300.
3913
242d9c06 3914@node H8/300-Regs
24b1493d 3915_CHAPSEC__(2+_GENERIC__) Register Names
66b818fb
RP
3916
3917@cindex H8/300 registers
3918@cindex registers, H8/300
24b1493d
RP
3919You can use predefined symbols of the form @samp{r@var{n}h} and
3920@samp{r@var{n}l} to refer to the H8/300 registers as sixteen 8-bit
3921general-purpose registers. @var{n} is a digit from @samp{0} to
3922@samp{7}); for instance, both @samp{r0h} and @samp{r7l} are valid
3923register names.
3924
3925You can also use the eight predefined symbols @samp{r@var{n}} to refer
3926to the H8/300 registers as 16-bit registers (you must use this form for
3927addressing).
3928
3929The two control registers are called @code{pc} (program counter; a
393016-bit register) and @code{ccr} (condition code register; an 8-bit
3931register). @code{r7} is used as the stack pointer, and can also be
3932called @code{sp}.
3933
242d9c06 3934@node H8/300-Addressing
66b818fb
RP
3935_CHAPSEC__(2+_GENERIC__) Addressing Modes
3936
3937@cindex addressing modes, H8/300
3938@cindex H8/300 addressing modes
24b1493d
RP
3939_AS__ understands the following addressing modes for the H8/300:
3940@table @code
24b1493d
RP
3941@item r@var{n}
3942Register direct
3943
3944@item @@r@var{n}
24b1493d
RP
3945Register indirect
3946
66b818fb
RP
3947@item @@(@var{d}, r@var{n})
3948@itemx @@(@var{d}:16, r@var{n})
24b1493d 3949Register indirect: 16-bit displacement @var{d} from register @var{n}.
66b818fb
RP
3950(You may specify the @samp{:16} for clarity if you wish, but it is not
3951required and has no effect.)
24b1493d
RP
3952
3953@item @@r@var{n}+
24b1493d
RP
3954Register indirect with post-increment
3955
3956@item @@-r@var{n}
24b1493d
RP
3957Register indirect with pre-decrement
3958
3959@item @code{@@}@var{aa}
3960@itemx @code{@@}@var{aa}:8
3961@itemx @code{@@}@var{aa}:16
66b818fb
RP
3962Absolute address @code{aa}. You may specify the @samp{:8} or @samp{:16}
3963for clarity, if you wish; but @code{_AS__} neither requires this nor
3964uses it---the address size required is taken from context.
24b1493d
RP
3965
3966@item #@var{xx}
3967@itemx #@var{xx}:8
3968@itemx #@var{xx}:16
66b818fb
RP
3969Immediate data @var{xx}. You may specify the @samp{:8} or @samp{:16}
3970for clarity, if you wish; but @code{_AS__} neither requires this nor
3971uses it---the data size required is taken from context.
24b1493d
RP
3972
3973@item @code{@@}@code{@@}@var{aa}
3974@itemx @code{@@}@code{@@}@var{aa}:8
66b818fb
RP
3975Memory indirect. You may specify the @samp{:8} for clarity, if you
3976wish; but @code{_AS__} neither requires this nor uses it.
24b1493d
RP
3977@end table
3978
242d9c06 3979@node H8/300 Floating Point
24b1493d 3980_CHAPSEC__(1+_GENERIC__) Floating Point
24b1493d 3981
66b818fb
RP
3982@cindex floating point, H8/300 (@sc{ieee})
3983@cindex H8/300 floating point (@sc{ieee})
3984The H8/300 family uses @sc{ieee} floating-point numbers.
3985
242d9c06 3986@node H8/300 Directives
24b1493d 3987_CHAPSEC__(1+_GENERIC__) H8/300 Machine Directives
66b818fb
RP
3988
3989@cindex H8/300 machine directives (none)
3990@cindex machine directives, H8/300 (none)
3991@cindex @code{word} directive, H8/300
3992@cindex @code{int} directive, H8/300
24b1493d 3993@code{_AS__} has no machine-dependent directives for the H8/300.
66b818fb
RP
3994However, on this platform the @samp{.int} and @samp{.word} directives
3995generate 16-bit numbers.
24b1493d 3996
242d9c06 3997@node H8/300 Opcodes
24b1493d 3998_CHAPSEC__(1+_GENERIC__) Opcodes
24b1493d 3999
66b818fb
RP
4000@cindex H8/300 opcode summary
4001@cindex opcode summary, H8/300
4002@cindex mnemonics, H8/300
4003@cindex instruction summary, H8/300
4004For detailed information on the H8/300 machine instruction set, see
4005@cite{H8/300 Series Programming Manual} (Hitachi ADE--602--025).
4006
4007@code{_AS__} implements all the standard H8/300 opcodes. No additional
4008pseudo-instructions are needed on this family.
4009
4010The following table summarizes the opcodes and their arguments:
4011@c kluge due to lack of group outside example
4012@page
4013@smallexample
4014@group
4015 Rs @r{source register}
4016 Rd @r{destination register}
4017 imm @r{immediate data}
4018 x:3 @r{a bit (as a number between 0 and 7)}
4019 d:8 @r{eight bit displacement from @code{pc}}
4020 d:16 @r{sixteen bit displacement from @code{Rs}}
4021
4022add.b Rs,Rd biand #x:3,Rd
4023add.b #imm:8,Rd biand #x:3,@@Rd
4024add.w Rs,Rd biand #x:3,@@aa:8
4025adds #1,Rd bild #x:3,Rd
4026adds #2,Rd bild #x:3,@@Rd
4027addx #imm:8,Rd bild #x:3,@@aa:8
4028addx Rs,Rd bior #x:3,Rd
4029and #imm:8,Rd bior #x:3,@@Rd
4030and Rs,Rd bior #x:3,@@aa:8
4031andc #imm:8,ccr bist #x:3,Rd
4032band #x:3,Rd bist #x:3,@@Rd
4033band #x:3,@@Rd bist #x:3,@@aa:8
4034bra d:8 bixor #x:3,Rd
4035bt d:8 bixor #x:3,@@Rd
4036brn d:8 bixor #x:3,@@aa:8
4037bf d:8 bld #x:3,Rd
4038bhi d:8 bld #x:3,@@Rd
4039bls d:8 bld #x:3,@@aa:8
4040bcc d:8 bnot #x:3,Rd
4041bhs d:8 bnot #x:3,@@Rd
4042bcs d:8 bnot #x:3,@@aa:8
4043blo d:8 bnot Rs,Rd
4044bne d:8 bnot Rs,@@Rd
4045beq d:8 bnot Rs,@@aa:8
4046bvc d:8 bor #x:3,Rd
4047bvs d:8 bor #x:3,@@Rd
4048bpl d:8 bor #x:3,@@aa:8
4049bmi d:8 bset #x:3,@@Rd
4050bge d:8 bset #x:3,@@aa:8
4051blt d:8 bset Rs,Rd
4052bgt d:8 bset Rs,@@Rd
4053ble d:8 bset Rs,@@aa:8
4054bclr #x:3,Rd bsr d:8
4055bclr #x:3,@@Rd bst #x:3,Rd
4056bclr #x:3,@@aa:8 bst #x:3,@@Rd
4057bclr Rs,Rd bst #x:3,@@aa:8
4058bclr Rs,@@Rd btst #x:3,Rd
4059@end group
4060@group
4061btst #x:3,@@Rd mov.w @@(d:16, Rs),Rd
4062btst #x:3,@@aa:8 mov.w @@Rs+,Rd
4063btst Rs,Rd mov.w @@aa:16,Rd
4064btst Rs,@@Rd mov.w Rs,@@Rd
4065btst Rs,@@aa:8 mov.w Rs,@@(d:16, Rd)
4066bxor #x:3,Rd mov.w Rs,@@-Rd
4067bxor #x:3,@@Rd mov.w Rs,@@aa:16
4068bxor #x:3,@@aa:8 movfpe @@aa:16,Rd
4069cmp.b #imm:8,Rd movtpe Rs,@@aa:16
4070cmp.b Rs,Rd mulxu Rs,Rd
4071cmp.w Rs,Rd neg Rs
4072daa Rs nop
4073das Rs not Rs
4074dec Rs or #imm:8,Rd
4075divxu Rs,Rd or Rs,Rd
4076eepmov orc #imm:8,ccr
4077inc Rs pop Rs
4078jmp @@Rs push Rs
4079jmp @@aa:16 rotl Rs
4080jmp @@@@aa rotr Rs
4081jsr @@Rs rotxl Rs
4082jsr @@aa:16 rotxr Rs
4083jsr @@@@aa:8 rte
4084ldc #imm:8,ccr rts
4085ldc Rs,ccr shal Rs
4086mov.b Rs,Rd shar Rs
4087mov.b #imm:8,Rd shll Rs
4088mov.b @@Rs,Rd shlr Rs
4089mov.b @@(d:16, Rs),Rd sleep
4090mov.b @@Rs+,Rd stc ccr,Rd
4091mov.b @@aa:16,Rd sub.b Rs,Rd
4092mov.b @@aa:8,Rd sub.w Rs,Rd
4093mov.b Rs,@@Rd subs #1,Rd
4094mov.b Rs,@@(d:16, Rd) subs #2,Rd
4095mov.b Rs,@@-Rd subx #imm:8,Rd
4096mov.b Rs,@@aa:16 subx Rs,Rd
4097mov.b Rs,@@aa:8 xor #imm:8,Rd
4098mov.w Rs,Rd xor Rs,Rd
4099mov.w #imm:16,Rd xorc #imm:8,ccr
4100mov.w @@Rs,Rd
4101@end group
4102@end smallexample
4103
4104@cindex size suffixes, H8/300
4105@cindex H8/300 size suffixes
4106Four H8/300 instructions (@code{add}, @code{cmp}, @code{mov},
4107@code{sub}) are defined with variants using the suffixes @samp{.b} and
4108@samp{.w} to specify the size of a memory operand. @code{_AS__}
4109supports these suffixes, but does not require them; since one of the
4110operands is always a register, @code{_AS__} can deduce the correct size.
4111
4112For example, since @code{r0} refers to a 16-bit register,
4113@example
4114mov r0,@@foo
4115@exdent is equivalent to
4116mov.w r0,@@foo
4117@end example
4118
4119If you use the size suffixes, @code{_AS__} will issue a warning if
4120there's a mismatch between the suffix and the register size.
24b1493d
RP
4121
4122_fi__(_H8__)
d0281557 4123_if__(_I960__)
7a4c8e5c 4124_if__(_GENERIC__)
242d9c06 4125@node i960-Dependent
7a4c8e5c 4126_fi__(_GENERIC__)
0b5b143a 4127_CHAPSEC__(0+_GENERIC__) Intel 80960 Dependent Features
66b818fb
RP
4128
4129@cindex i960 support
7a4c8e5c
RP
4130@menu
4131* Options-i960:: i960 Command-line Options
4132* Floating Point-i960:: Floating Point
4133* Directives-i960:: i960 Machine Directives
4134* Opcodes for i960:: i960 Opcodes
4135@end menu
4136
4137@c FIXME! Add Syntax sec with discussion of bitfields here, at least so
4138@c long as they're not turned on for other machines than 960.
242d9c06
SC
4139
4140@node Options-i960
66b818fb 4141
7a4c8e5c 4142_CHAPSEC__(1+_GENERIC__) i960 Command-line Options
66b818fb
RP
4143
4144@cindex i960 options
4145@cindex options, i960
d0281557
RP
4146@table @code
4147
4148@item -ACA | -ACA_A | -ACB | -ACC | -AKA | -AKB | -AKC | -AMC
66b818fb
RP
4149@cindex i960 architecture options
4150@cindex architecture options, i960
4151@cindex @code{-A} options, i960
d0281557
RP
4152Select the 80960 architecture. Instructions or features not supported
4153by the selected architecture cause fatal errors.
4154
4155@samp{-ACA} is equivalent to @samp{-ACA_A}; @samp{-AKC} is equivalent to
4156@samp{-AMC}. Synonyms are provided for compatibility with other tools.
4157
4158If none of these options is specified, @code{_AS__} will generate code for any
4159instruction or feature that is supported by @emph{some} version of the
4160960 (even if this means mixing architectures!). In principle,
4161@code{_AS__} will attempt to deduce the minimal sufficient processor
4162type if none is specified; depending on the object code format, the
4163processor type may be recorded in the object file. If it is critical
4164that the @code{_AS__} output match a specific architecture, specify that
4165architecture explicitly.
4166
d0281557 4167@item -b
66b818fb
RP
4168@cindex @code{-b} option, i960
4169@cindex branch recording, i960
4170@cindex i960 branch recording
d0281557
RP
4171Add code to collect information about conditional branches taken, for
4172later optimization using branch prediction bits. (The conditional branch
4173instructions have branch prediction bits in the CA, CB, and CC
4174architectures.) If @var{BR} represents a conditional branch instruction,
4175the following represents the code generated by the assembler when
4176@samp{-b} is specified:
4177
4178@smallexample
4179 call @var{increment routine}
4180 .word 0 # pre-counter
4181Label: @var{BR}
4182 call @var{increment routine}
4183 .word 0 # post-counter
4184@end smallexample
4185
4186The counter following a branch records the number of times that branch
4187was @emph{not} taken; the differenc between the two counters is the
4188number of times the branch @emph{was} taken.
4189
66b818fb
RP
4190@cindex @code{gbr960}, i960 postprocessor
4191@cindex branch statistics table, i960
4192A table of every such @code{Label} is also generated, so that the
4193external postprocessor @code{gbr960} (supplied by Intel) can locate all
d0281557
RP
4194the counters. This table is always labelled @samp{__BRANCH_TABLE__};
4195this is a local symbol to permit collecting statistics for many separate
4196object files. The table is word aligned, and begins with a two-word
4197header. The first word, initialized to 0, is used in maintaining linked
4198lists of branch tables. The second word is a count of the number of
4199entries in the table, which follow immediately: each is a word, pointing
4200to one of the labels illustrated above.
4201
7d7ecbdd 4202@c TEXI2ROFF-KILL
d0281557 4203@ifinfo
7d7ecbdd 4204@c END TEXI2ROFF-KILL
d0281557
RP
4205@example
4206 +------------+------------+------------+ ... +------------+
4207 | | | | | |
4208 | *NEXT | COUNT: N | *BRLAB 1 | | *BRLAB N |
4209 | | | | | |
4210 +------------+------------+------------+ ... +------------+
4211
4212 __BRANCH_TABLE__ layout
4213@end example
7d7ecbdd 4214@c TEXI2ROFF-KILL
d0281557
RP
4215@end ifinfo
4216@tex
4217\vskip 1pc
4218\line{\leftskip=0pt\hskip\tableindent
4219\boxit{2cm}{\tt *NEXT}\boxit{2cm}{\tt COUNT: \it N}\boxit{2cm}{\tt
4220*BRLAB 1}\ibox{1cm}{\quad\dots}\boxit{2cm}{\tt *BRLAB \it N}\hfil}
4221\centerline{\it {\tt \_\_BRANCH\_TABLE\_\_} layout}
4222@end tex
7d7ecbdd 4223@c END TEXI2ROFF-KILL
d0281557
RP
4224
4225The first word of the header is used to locate multiple branch tables,
4226since each object file may contain one. Normally the links are
4227maintained with a call to an initialization routine, placed at the
4228beginning of each function in the file. The GNU C compiler will
4229generate these calls automatically when you give it a @samp{-b} option.
4230For further details, see the documentation of @samp{gbr960}.
4231
4232@item -norelax
66b818fb 4233@cindex @code{-norelax} option, i960
d0281557
RP
4234Normally, Compare-and-Branch instructions with targets that require
4235displacements greater than 13 bits (or that have external targets) are
4236replaced with the corresponding compare (or @samp{chkbit}) and branch
4237instructions. You can use the @samp{-norelax} option to specify that
4238@code{_AS__} should generate errors instead, if the target displacement
4239is larger than 13 bits.
4240
4241This option does not affect the Compare-and-Jump instructions; the code
4242emitted for them is @emph{always} adjusted when necessary (depending on
4243displacement size), regardless of whether you use @samp{-norelax}.
4244@end table
4245
242d9c06 4246@node Floating Point-i960
0b5b143a 4247_CHAPSEC__(1+_GENERIC__) Floating Point
66b818fb
RP
4248
4249@cindex floating point, i960 (@sc{ieee})
4250@cindex i960 floating point (@sc{ieee})
4251@code{_AS__} generates @sc{ieee} floating-point numbers for the directives
4252@samp{.float}, @samp{.double}, @samp{.extended}, and @samp{.single}.
d0281557 4253
242d9c06 4254@node Directives-i960
0b5b143a 4255_CHAPSEC__(1+_GENERIC__) i960 Machine Directives
d0281557 4256
66b818fb
RP
4257@cindex machine directives, i960
4258@cindex i960 machine directives
4259
0b5b143a 4260@table @code
66b818fb 4261@cindex @code{bss} directive, i960
0b5b143a 4262@item .bss @var{symbol}, @var{length}, @var{align}
24b1493d 4263Reserve @var{length} bytes in the bss section for a local @var{symbol},
d0281557
RP
4264aligned to the power of two specified by @var{align}. @var{length} and
4265@var{align} must be positive absolute expressions. This directive
4266differs from @samp{.lcomm} only in that it permits you to specify
7a4c8e5c 4267an alignment. @xref{Lcomm,,@code{.lcomm}}.
0b5b143a 4268@end table
d0281557 4269
0b5b143a
RP
4270@table @code
4271@item .extended @var{flonums}
66b818fb 4272@cindex @code{extended} directive, i960
d0281557 4273@code{.extended} expects zero or more flonums, separated by commas; for
66b818fb 4274each flonum, @samp{.extended} emits an @sc{ieee} extended-format (80-bit)
d0281557
RP
4275floating-point number.
4276
0b5b143a 4277@item .leafproc @var{call-lab}, @var{bal-lab}
66b818fb 4278@cindex @code{leafproc} directive, i960
d0281557
RP
4279You can use the @samp{.leafproc} directive in conjunction with the
4280optimized @code{callj} instruction to enable faster calls of leaf
4281procedures. If a procedure is known to call no other procedures, you
4282may define an entry point that skips procedure prolog code (and that does
4283not depend on system-supplied saved context), and declare it as the
4284@var{bal-lab} using @samp{.leafproc}. If the procedure also has an
4285entry point that goes through the normal prolog, you can specify that
4286entry point as @var{call-lab}.
4287
4288A @samp{.leafproc} declaration is meant for use in conjunction with the
4289optimized call instruction @samp{callj}; the directive records the data
4290needed later to choose between converting the @samp{callj} into a
4291@code{bal} or a @code{call}.
4292
4293@var{call-lab} is optional; if only one argument is present, or if the
4294two arguments are identical, the single argument is assumed to be the
4295@code{bal} entry point.
4296
0b5b143a 4297@item .sysproc @var{name}, @var{index}
66b818fb 4298@cindex @code{sysproc} directive, i960
d0281557
RP
4299The @samp{.sysproc} directive defines a name for a system procedure.
4300After you define it using @samp{.sysproc}, you can use @var{name} to
4301refer to the system procedure identified by @var{index} when calling
4302procedures with the optimized call instruction @samp{callj}.
4303
4304Both arguments are required; @var{index} must be between 0 and 31
4305(inclusive).
0b5b143a 4306@end table
d0281557 4307
242d9c06 4308@node Opcodes for i960
0b5b143a 4309_CHAPSEC__(1+_GENERIC__) i960 Opcodes
66b818fb
RP
4310
4311@cindex opcodes, i960
4312@cindex i960 opcodes
7a4c8e5c
RP
4313All Intel 960 machine instructions are supported;
4314@pxref{Options-i960,,i960 Command-line Options} for a discussion of
4315selecting the instruction subset for a particular 960
4316architecture.@refill
d0281557
RP
4317
4318Some opcodes are processed beyond simply emitting a single corresponding
4319instruction: @samp{callj}, and Compare-and-Branch or Compare-and-Jump
4320instructions with target displacements larger than 13 bits.
4321
7a4c8e5c
RP
4322@menu
4323* callj-i960:: @code{callj}
4324* Compare-and-branch-i960:: Compare-and-Branch
4325@end menu
4326
242d9c06 4327@node callj-i960
0b5b143a 4328_CHAPSEC__(2+_GENERIC__) @code{callj}
66b818fb
RP
4329
4330@cindex @code{callj}, i960 pseudo-opcode
4331@cindex i960 @code{callj} pseudo-opcode
d0281557
RP
4332You can write @code{callj} to have the assembler or the linker determine
4333the most appropriate form of subroutine call: @samp{call},
4334@samp{bal}, or @samp{calls}. If the assembly source contains
4335enough information---a @samp{.leafproc} or @samp{.sysproc} directive
4336defining the operand---then @code{_AS__} will translate the
4337@code{callj}; if not, it will simply emit the @code{callj}, leaving it
4338for the linker to resolve.
4339
242d9c06 4340@node Compare-and-branch-i960
0b5b143a 4341_CHAPSEC__(2+_GENERIC__) Compare-and-Branch
d0281557 4342
80381063
RP
4343@cindex i960 compare/branch instructions
4344@cindex compare/branch instructions, i960
d0281557
RP
4345The 960 architectures provide combined Compare-and-Branch instructions
4346that permit you to store the branch target in the lower 13 bits of the
4347instruction word itself. However, if you specify a branch target far
4348enough away that its address won't fit in 13 bits, the assembler can
4349either issue an error, or convert your Compare-and-Branch instruction
4350into separate instructions to do the compare and the branch.
4351
66b818fb
RP
4352@cindex compare and jump expansions, i960
4353@cindex i960 compare and jump expansions
d0281557
RP
4354Whether @code{_AS__} gives an error or expands the instruction depends
4355on two choices you can make: whether you use the @samp{-norelax} option,
4356and whether you use a ``Compare and Branch'' instruction or a ``Compare
4357and Jump'' instruction. The ``Jump'' instructions are @emph{always}
4358expanded if necessary; the ``Branch'' instructions are expanded when
4359necessary @emph{unless} you specify @code{-norelax}---in which case
4360@code{_AS__} gives an error instead.
4361
4362These are the Compare-and-Branch instructions, their ``Jump'' variants,
4363and the instruction pairs they may expand into:
4364
7d7ecbdd 4365@c TEXI2ROFF-KILL
d0281557 4366@ifinfo
7d7ecbdd 4367@c END TEXI2ROFF-KILL
d0281557
RP
4368@example
4369 Compare and
4370 Branch Jump Expanded to
4371 ------ ------ ------------
4372 bbc chkbit; bno
4373 bbs chkbit; bo
4374 cmpibe cmpije cmpi; be
4375 cmpibg cmpijg cmpi; bg
4376 cmpibge cmpijge cmpi; bge
4377 cmpibl cmpijl cmpi; bl
4378 cmpible cmpijle cmpi; ble
4379 cmpibno cmpijno cmpi; bno
4380 cmpibne cmpijne cmpi; bne
4381 cmpibo cmpijo cmpi; bo
4382 cmpobe cmpoje cmpo; be
4383 cmpobg cmpojg cmpo; bg
4384 cmpobge cmpojge cmpo; bge
4385 cmpobl cmpojl cmpo; bl
4386 cmpoble cmpojle cmpo; ble
4387 cmpobne cmpojne cmpo; bne
4388@end example
7d7ecbdd 4389@c TEXI2ROFF-KILL
d0281557
RP
4390@end ifinfo
4391@tex
4392\hskip\tableindent
4393\halign{\hfil {\tt #}\quad&\hfil {\tt #}\qquad&{\tt #}\hfil\cr
4394\omit{\hfil\it Compare and\hfil}\span\omit&\cr
4395{\it Branch}&{\it Jump}&{\it Expanded to}\cr
4396 bbc& & chkbit; bno\cr
4397 bbs& & chkbit; bo\cr
4398 cmpibe& cmpije& cmpi; be\cr
4399 cmpibg& cmpijg& cmpi; bg\cr
4400 cmpibge& cmpijge& cmpi; bge\cr
4401 cmpibl& cmpijl& cmpi; bl\cr
4402 cmpible& cmpijle& cmpi; ble\cr
4403 cmpibno& cmpijno& cmpi; bno\cr
4404 cmpibne& cmpijne& cmpi; bne\cr
4405 cmpibo& cmpijo& cmpi; bo\cr
4406 cmpobe& cmpoje& cmpo; be\cr
4407 cmpobg& cmpojg& cmpo; bg\cr
4408 cmpobge& cmpojge& cmpo; bge\cr
4409 cmpobl& cmpojl& cmpo; bl\cr
4410 cmpoble& cmpojle& cmpo; ble\cr
4411 cmpobne& cmpojne& cmpo; bne\cr}
4412@end tex
7d7ecbdd 4413@c END TEXI2ROFF-KILL
d0281557 4414_fi__(_I960__)
7a4c8e5c 4415
09352a5d 4416_if__(_M680X0__)
7a4c8e5c 4417_if__(_GENERIC__)
242d9c06 4418@node M68K-Dependent
7a4c8e5c 4419_fi__(_GENERIC__)
66b818fb
RP
4420_CHAPSEC__(0+_GENERIC__) M680x0 Dependent Features
4421
4422@cindex M680x0 support
7a4c8e5c
RP
4423@menu
4424* M68K-Opts:: M680x0 Options
4425* M68K-Syntax:: Syntax
4426* M68K-Float:: Floating Point
4427* M68K-Directives:: 680x0 Machine Directives
4428* M68K-opcodes:: Opcodes
4429@end menu
4430
242d9c06 4431@node M68K-Opts
0b5b143a 4432_CHAPSEC__(1+_GENERIC__) M680x0 Options
66b818fb
RP
4433
4434@cindex options, M680x0
4435@cindex M680x0 options
d0281557 4436The Motorola 680x0 version of @code{_AS__} has two machine dependent options.
93b45514 4437One shortens undefined references from 32 to 16 bits, while the
d0281557 4438other is used to tell @code{_AS__} what kind of machine it is
93b45514
RP
4439assembling for.
4440
66b818fb 4441@cindex @code{-l} option, M680x0
93b45514 4442You can use the @kbd{-l} option to shorten the size of references to
47342e8f 4443undefined symbols. If the @kbd{-l} option is not given, references to
d0281557
RP
4444undefined symbols will be a full long (32 bits) wide. (Since @code{_AS__}
4445cannot know where these symbols will end up, @code{_AS__} can only allocate
4446space for the linker to fill in later. Since @code{_AS__} doesn't know how
47342e8f
RP
4447far away these symbols will be, it allocates as much space as it can.)
4448If this option is given, the references will only be one word wide (16
4449bits). This may be useful if you want the object file to be as small as
4450possible, and you know that the relevant symbols will be less than 17
d0281557 4451bits away.
47342e8f 4452
80381063 4453@cindex @code{-m68000} and related options
66b818fb
RP
4454@cindex architecture options, M680x0
4455@cindex M680x0 architecture options
d0281557 4456The 680x0 version of @code{_AS__} is most frequently used to assemble
47342e8f
RP
4457programs for the Motorola MC68020 microprocessor. Occasionally it is
4458used to assemble programs for the mostly similar, but slightly different
d0281557 4459MC68000 or MC68010 microprocessors. You can give @code{_AS__} the options
47342e8f
RP
4460@samp{-m68000}, @samp{-mc68000}, @samp{-m68010}, @samp{-mc68010},
4461@samp{-m68020}, and @samp{-mc68020} to tell it what processor is the
4462target.
4463
242d9c06 4464@node M68K-Syntax
0b5b143a 4465_CHAPSEC__(1+_GENERIC__) Syntax
47342e8f 4466
66b818fb
RP
4467@cindex M680x0 syntax
4468@cindex syntax, M680x0
4469@cindex M680x0 size modifiers
4470@cindex size modifiers, M680x0
d0281557 4471The 680x0 version of @code{_AS__} uses syntax similar to the Sun assembler.
47342e8f
RP
4472Size modifiers are appended directly to the end of the opcode without an
4473intervening period. For example, write @samp{movl} rather than
d0281557 4474@samp{move.l}.
47342e8f 4475
09352a5d 4476_if__(_INTERNALS__)
d0281557
RP
4477If @code{_AS__} is compiled with SUN_ASM_SYNTAX defined, it will also allow
4478Sun-style local labels of the form @samp{1$} through @samp{$9}.
09352a5d 4479_fi__(_INTERNALS__)
93b45514
RP
4480
4481In the following table @dfn{apc} stands for any of the address
4482registers (@samp{a0} through @samp{a7}), nothing, (@samp{}), the
4483Program Counter (@samp{pc}), or the zero-address relative to the
4484program counter (@samp{zpc}).
4485
66b818fb
RP
4486@cindex M680x0 addressing modes
4487@cindex addressing modes, M680x0
93b45514
RP
4488The following addressing modes are understood:
4489@table @dfn
4490@item Immediate
4491@samp{#@var{digits}}
4492
4493@item Data Register
4494@samp{d0} through @samp{d7}
4495
4496@item Address Register
4497@samp{a0} through @samp{a7}
4498
4499@item Address Register Indirect
4500@samp{a0@@} through @samp{a7@@}
4501
4502@item Address Register Postincrement
4503@samp{a0@@+} through @samp{a7@@+}
4504
4505@item Address Register Predecrement
4506@samp{a0@@-} through @samp{a7@@-}
4507
4508@item Indirect Plus Offset
4509@samp{@var{apc}@@(@var{digits})}
4510
4511@item Index
4512@samp{@var{apc}@@(@var{digits},@var{register}:@var{size}:@var{scale})}
0b5b143a 4513
93b45514
RP
4514or @samp{@var{apc}@@(@var{register}:@var{size}:@var{scale})}
4515
4516@item Postindex
4517@samp{@var{apc}@@(@var{digits})@@(@var{digits},@var{register}:@var{size}:@var{scale})}
0b5b143a 4518
93b45514
RP
4519or @samp{@var{apc}@@(@var{digits})@@(@var{register}:@var{size}:@var{scale})}
4520
4521@item Preindex
4522@samp{@var{apc}@@(@var{digits},@var{register}:@var{size}:@var{scale})@@(@var{digits})}
0b5b143a 4523
93b45514
RP
4524or @samp{@var{apc}@@(@var{register}:@var{size}:@var{scale})@@(@var{digits})}
4525
4526@item Memory Indirect
4527@samp{@var{apc}@@(@var{digits})@@(@var{digits})}
4528
4529@item Absolute
47342e8f 4530@samp{@var{symbol}}, or @samp{@var{digits}}
09352a5d 4531@ignore
47342e8f
RP
4532@c pesch@cygnus.com: gnu, rich concur the following needs careful
4533@c research before documenting.
4534 , or either of the above followed
93b45514 4535by @samp{:b}, @samp{:w}, or @samp{:l}.
09352a5d 4536@end ignore
93b45514
RP
4537@end table
4538
242d9c06 4539@node M68K-Float
0b5b143a 4540_CHAPSEC__(1+_GENERIC__) Floating Point
66b818fb
RP
4541
4542@cindex floating point, M680x0
4543@cindex M680x0 floating point
4544@c FIXME is this "not too well tested" crud STILL true?
93b45514
RP
4545The floating point code is not too well tested, and may have
4546subtle bugs in it.
4547
4548Packed decimal (P) format floating literals are not supported.
47342e8f 4549Feel free to add the code!
93b45514
RP
4550
4551The floating point formats generated by directives are these.
66b818fb 4552
93b45514
RP
4553@table @code
4554@item .float
66b818fb 4555@cindex @code{float} directive, M680x0
93b45514 4556@code{Single} precision floating point constants.
66b818fb 4557
93b45514 4558@item .double
66b818fb 4559@cindex @code{double} directive, M680x0
93b45514
RP
4560@code{Double} precision floating point constants.
4561@end table
4562
4563There is no directive to produce regions of memory holding
4564extended precision numbers, however they can be used as
4565immediate operands to floating-point instructions. Adding a
4566directive to create extended precision numbers would not be
47342e8f 4567hard, but it has not yet seemed necessary.
93b45514 4568
242d9c06 4569@node M68K-Directives
0b5b143a 4570_CHAPSEC__(1+_GENERIC__) 680x0 Machine Directives
66b818fb
RP
4571
4572@cindex M680x0 directives
4573@cindex directives, M680x0
93b45514
RP
4574In order to be compatible with the Sun assembler the 680x0 assembler
4575understands the following directives.
66b818fb 4576
93b45514
RP
4577@table @code
4578@item .data1
66b818fb 4579@cindex @code{data1} directive, M680x0
93b45514 4580This directive is identical to a @code{.data 1} directive.
66b818fb 4581
93b45514 4582@item .data2
66b818fb 4583@cindex @code{data2} directive, M680x0
93b45514 4584This directive is identical to a @code{.data 2} directive.
66b818fb 4585
93b45514 4586@item .even
66b818fb 4587@cindex @code{even} directive, M680x0
93b45514
RP
4588This directive is identical to a @code{.align 1} directive.
4589@c Is this true? does it work???
66b818fb 4590
93b45514 4591@item .skip
66b818fb 4592@cindex @code{skip} directive, M680x0
93b45514
RP
4593This directive is identical to a @code{.space} directive.
4594@end table
4595
242d9c06 4596@node M68K-opcodes
0b5b143a 4597_CHAPSEC__(1+_GENERIC__) Opcodes
66b818fb
RP
4598
4599@cindex M680x0 opcodes
4600@cindex opcodes, M680x0
4601@cindex instruction set, M680x0
47342e8f
RP
4602@c pesch@cygnus.com: I don't see any point in the following
4603@c paragraph. Bugs are bugs; how does saying this
4604@c help anyone?
09352a5d 4605@ignore
93b45514
RP
4606Danger: Several bugs have been found in the opcode table (and
4607fixed). More bugs may exist. Be careful when using obscure
4608instructions.
09352a5d 4609@end ignore
47342e8f 4610
7a4c8e5c
RP
4611@menu
4612* M68K-Branch:: Branch Improvement
4613* M68K-Chars:: Special Characters
4614@end menu
4615
242d9c06 4616@node M68K-Branch
0b5b143a 4617_CHAPSEC__(2+_GENERIC__) Branch Improvement
47342e8f 4618
66b818fb
RP
4619@cindex pseudo-opcodes, M680x0
4620@cindex M680x0 pseudo-opcodes
4621@cindex branch improvement, M680x0
4622@cindex M680x0 branch improvement
d0281557 4623Certain pseudo opcodes are permitted for branch instructions.
47342e8f
RP
4624They expand to the shortest branch instruction that will reach the
4625target. Generally these mnemonics are made by substituting @samp{j} for
d0281557 4626@samp{b} at the start of a Motorola mnemonic.
47342e8f
RP
4627
4628The following table summarizes the pseudo-operations. A @code{*} flags
4629cases that are more fully described after the table:
4630
d0281557 4631@smallexample
47342e8f 4632 Displacement
80381063 4633 +-------------------------------------------------
47342e8f
RP
4634 | 68020 68000/10
4635Pseudo-Op |BYTE WORD LONG LONG non-PC relative
80381063 4636 +-------------------------------------------------
47342e8f
RP
4637 jbsr |bsrs bsr bsrl jsr jsr
4638 jra |bras bra bral jmp jmp
d0281557
RP
4639* jXX |bXXs bXX bXXl bNXs;jmpl bNXs;jmp
4640* dbXX |dbXX dbXX dbXX; bra; jmpl
4641* fjXX |fbXXw fbXXw fbXXl fbNXw;jmp
47342e8f
RP
4642
4643XX: condition
4644NX: negative of condition XX
4645
d0281557 4646@end smallexample
7a4c8e5c 4647@center @code{*}---see full description below
47342e8f
RP
4648
4649@table @code
4650@item jbsr
4651@itemx jra
4652These are the simplest jump pseudo-operations; they always map to one
4653particular machine instruction, depending on the displacement to the
4654branch target.
4655
4656@item j@var{XX}
4657Here, @samp{j@var{XX}} stands for an entire family of pseudo-operations,
4658where @var{XX} is a conditional branch or condition-code test. The full
4659list of pseudo-ops in this family is:
d0281557
RP
4660@smallexample
4661 jhi jls jcc jcs jne jeq jvc
4662 jvs jpl jmi jge jlt jgt jle
4663@end smallexample
93b45514 4664
47342e8f 4665For the cases of non-PC relative displacements and long displacements on
d0281557 4666the 68000 or 68010, @code{_AS__} will issue a longer code fragment in terms of
242d9c06
SC
4667@var{NX}, the opposite condition to @var{XX}. For example, for the
4668non-PC relative case:
d0281557 4669@smallexample
47342e8f 4670 j@var{XX} foo
d0281557 4671@end smallexample
47342e8f 4672gives
d0281557 4673@smallexample
47342e8f
RP
4674 b@var{NX}s oof
4675 jmp foo
4676 oof:
d0281557 4677@end smallexample
93b45514 4678
47342e8f
RP
4679@item db@var{XX}
4680The full family of pseudo-operations covered here is
d0281557 4681@smallexample
47342e8f
RP
4682 dbhi dbls dbcc dbcs dbne dbeq dbvc
4683 dbvs dbpl dbmi dbge dblt dbgt dble
4684 dbf dbra dbt
d0281557 4685@end smallexample
47342e8f
RP
4686
4687Other than for word and byte displacements, when the source reads
d0281557
RP
4688@samp{db@var{XX} foo}, @code{_AS__} will emit
4689@smallexample
47342e8f
RP
4690 db@var{XX} oo1
4691 bra oo2
4692 oo1:jmpl foo
d0281557
RP
4693 oo2:
4694@end smallexample
47342e8f
RP
4695
4696@item fj@var{XX}
4697This family includes
d0281557 4698@smallexample
47342e8f 4699 fjne fjeq fjge fjlt fjgt fjle fjf
d0281557
RP
4700 fjt fjgl fjgle fjnge fjngl fjngle fjngt
4701 fjnle fjnlt fjoge fjogl fjogt fjole fjolt
47342e8f
RP
4702 fjor fjseq fjsf fjsne fjst fjueq fjuge
4703 fjugt fjule fjult fjun
d0281557 4704@end smallexample
47342e8f 4705
d0281557
RP
4706For branch targets that are not PC relative, @code{_AS__} emits
4707@smallexample
47342e8f
RP
4708 fb@var{NX} oof
4709 jmp foo
4710 oof:
d0281557 4711@end smallexample
47342e8f
RP
4712when it encounters @samp{fj@var{XX} foo}.
4713
4714@end table
4715
242d9c06 4716@node M68K-Chars
0b5b143a 4717_CHAPSEC__(2+_GENERIC__) Special Characters
66b818fb
RP
4718
4719@cindex special characters, M680x0
4720@cindex M680x0 immediate character
4721@cindex immediate character, M680x0
4722@cindex M680x0 line comment character
4723@cindex line comment character, M680x0
4724@cindex comments, M680x0
93b45514
RP
4725The immediate character is @samp{#} for Sun compatibility. The
4726line-comment character is @samp{|}. If a @samp{#} appears at the
4727beginning of a line, it is treated as a comment unless it looks like
4728@samp{# line file}, in which case it is treated normally.
0b5b143a 4729
09352a5d 4730_fi__(_M680X0__)
d0281557 4731_if__(0)
7a4c8e5c 4732@c pesch@cygnus.com: conditionalize on something other than 0 when filled in.
93b45514 4733@section 32x32
47342e8f 4734@section Options
d0281557 4735The 32x32 version of @code{_AS__} accepts a @kbd{-m32032} option to
93b45514
RP
4736specify thiat it is compiling for a 32032 processor, or a
4737@kbd{-m32532} to specify that it is compiling for a 32532 option.
4738The default (if neither is specified) is chosen when the assembler
4739is compiled.
4740
4741@subsection Syntax
4742I don't know anything about the 32x32 syntax assembled by
d0281557 4743@code{_AS__}. Someone who undersands the processor (I've never seen
93b45514
RP
4744one) and the possible syntaxes should write this section.
4745
4746@subsection Floating Point
66b818fb 4747The 32x32 uses @sc{ieee} floating point numbers, but @code{_AS__} will only
93b45514
RP
4748create single or double precision values. I don't know if the 32x32
4749understands extended precision numbers.
4750
0b5b143a 4751@subsection 32x32 Machine Directives
93b45514 4752The 32x32 has no machine dependent directives.
0b5b143a 4753
d0281557
RP
4754_fi__(0)
4755_if__(_SPARC__)
7a4c8e5c 4756_if__(_GENERIC__)
242d9c06 4757@node Sparc-Dependent
7a4c8e5c 4758_fi__(_GENERIC__)
0b5b143a 4759_CHAPSEC__(0+_GENERIC__) SPARC Dependent Features
66b818fb
RP
4760
4761@cindex SPARC support
7a4c8e5c
RP
4762@menu
4763* Sparc-Opts:: Options
4764* Sparc-Float:: Floating Point
4765* Sparc-Directives:: Sparc Machine Directives
4766@end menu
4767
242d9c06 4768@node Sparc-Opts
7a4c8e5c 4769_CHAPSEC__(1+_GENERIC__) Options
66b818fb
RP
4770
4771@cindex options for SPARC (none)
4772@cindex SPARC options (none)
7a4c8e5c 4773The Sparc has no machine dependent options.
93b45514 4774
0b5b143a
RP
4775@ignore
4776@c FIXME: (sparc) Fill in "syntax" section!
7a4c8e5c 4777@c subsection syntax
93b45514
RP
4778I don't know anything about Sparc syntax. Someone who does
4779will have to write this section.
0b5b143a 4780@end ignore
93b45514 4781
242d9c06 4782@node Sparc-Float
7a4c8e5c 4783_CHAPSEC__(1+_GENERIC__) Floating Point
66b818fb
RP
4784
4785@cindex floating point, SPARC (@sc{ieee})
4786@cindex SPARC floating point (@sc{ieee})
7a4c8e5c 4787The Sparc uses @sc{ieee} floating-point numbers.
93b45514 4788
242d9c06 4789@node Sparc-Directives
7a4c8e5c 4790_CHAPSEC__(1+_GENERIC__) Sparc Machine Directives
66b818fb
RP
4791
4792@cindex SPARC machine directives
4793@cindex machine directives, SPARC
d0281557 4794The Sparc version of @code{_AS__} supports the following additional
93b45514
RP
4795machine directives:
4796
4797@table @code
4798@item .common
66b818fb 4799@cindex @code{common} directive, SPARC
93b45514
RP
4800This must be followed by a symbol name, a positive number, and
4801@code{"bss"}. This behaves somewhat like @code{.comm}, but the
4802syntax is different.
4803
93b45514 4804@item .half
66b818fb 4805@cindex @code{half} directive, SPARC
93b45514
RP
4806This is functionally identical to @code{.short}.
4807
4808@item .proc
66b818fb 4809@cindex @code{proc} directive, SPARC
93b45514
RP
4810This directive is ignored. Any text following it on the same
4811line is also ignored.
4812
4813@item .reserve
66b818fb 4814@cindex @code{reserve} directive, SPARC
93b45514
RP
4815This must be followed by a symbol name, a positive number, and
4816@code{"bss"}. This behaves somewhat like @code{.lcomm}, but the
4817syntax is different.
4818
4819@item .seg
66b818fb 4820@cindex @code{seg} directive, SPARC
93b45514
RP
4821This must be followed by @code{"text"}, @code{"data"}, or
4822@code{"data1"}. It behaves like @code{.text}, @code{.data}, or
4823@code{.data 1}.
4824
4825@item .skip
66b818fb 4826@cindex @code{skip} directive, SPARC
7a4c8e5c 4827This is functionally identical to the @code{.space} directive.
93b45514
RP
4828
4829@item .word
66b818fb 4830@cindex @code{word} directive, SPARC
93b45514 4831On the Sparc, the .word directive produces 32 bit values,
7d7ecbdd 4832instead of the 16 bit values it produces on many other machines.
93b45514 4833@end table
0b5b143a 4834
d0281557 4835_fi__(_SPARC__)
09352a5d 4836_if__(_I80386__)
7a4c8e5c 4837_if__(_GENERIC__)
242d9c06 4838@node i386-Dependent
7a4c8e5c 4839_fi__(_GENERIC__)
0b5b143a 4840_CHAPSEC__(0+_GENERIC__) 80386 Dependent Features
7a4c8e5c 4841
66b818fb
RP
4842@cindex i386 support
4843@cindex i80306 support
7a4c8e5c
RP
4844@menu
4845* i386-Options:: Options
4846* i386-Syntax:: AT&T Syntax versus Intel Syntax
4847* i386-Opcodes:: Opcode Naming
4848* i386-Regs:: Register Naming
4849* i386-prefixes:: Opcode Prefixes
4850* i386-Memory:: Memory References
4851* i386-jumps:: Handling of Jump Instructions
4852* i386-Float:: Floating Point
4853* i386-Notes:: Notes
4854@end menu
4855
242d9c06 4856@node i386-Options
0b5b143a 4857_CHAPSEC__(1+_GENERIC__) Options
66b818fb
RP
4858
4859@cindex options for i386 (none)
4860@cindex i386 options (none)
93b45514
RP
4861The 80386 has no machine dependent options.
4862
242d9c06 4863@node i386-Syntax
0b5b143a 4864_CHAPSEC__(1+_GENERIC__) AT&T Syntax versus Intel Syntax
66b818fb
RP
4865
4866@cindex i386 syntax compatibility
4867@cindex syntax compatibility, i386
d0281557
RP
4868In order to maintain compatibility with the output of @code{_GCC__},
4869@code{_AS__} supports AT&T System V/386 assembler syntax. This is quite
93b45514
RP
4870different from Intel syntax. We mention these differences because
4871almost all 80386 documents used only Intel syntax. Notable differences
4872between the two syntaxes are:
66b818fb 4873
93b45514
RP
4874@itemize @bullet
4875@item
66b818fb
RP
4876@cindex immediate operands, i386
4877@cindex i386 immediate operands
4878@cindex register operands, i386
4879@cindex i386 register operands
4880@cindex jump/call operands, i386
4881@cindex i386 jump/call operands
4882@cindex operand delimiters, i386
93b45514
RP
4883AT&T immediate operands are preceded by @samp{$}; Intel immediate
4884operands are undelimited (Intel @samp{push 4} is AT&T @samp{pushl $4}).
4885AT&T register operands are preceded by @samp{%}; Intel register operands
4886are undelimited. AT&T absolute (as opposed to PC relative) jump/call
4887operands are prefixed by @samp{*}; they are undelimited in Intel syntax.
4888
4889@item
66b818fb
RP
4890@cindex i386 source, destination operands
4891@cindex source, destination operands; i386
93b45514
RP
4892AT&T and Intel syntax use the opposite order for source and destination
4893operands. Intel @samp{add eax, 4} is @samp{addl $4, %eax}. The
4894@samp{source, dest} convention is maintained for compatibility with
4895previous Unix assemblers.
4896
4897@item
66b818fb
RP
4898@cindex opcode suffixes, i386
4899@cindex sizes operands, i386
4900@cindex i386 size suffixes
93b45514
RP
4901In AT&T syntax the size of memory operands is determined from the last
4902character of the opcode name. Opcode suffixes of @samp{b}, @samp{w},
4903and @samp{l} specify byte (8-bit), word (16-bit), and long (32-bit)
4904memory references. Intel syntax accomplishes this by prefixes memory
4905operands (@emph{not} the opcodes themselves) with @samp{byte ptr},
4906@samp{word ptr}, and @samp{dword ptr}. Thus, Intel @samp{mov al, byte
4907ptr @var{foo}} is @samp{movb @var{foo}, %al} in AT&T syntax.
4908
4909@item
66b818fb
RP
4910@cindex return instructions, i386
4911@cindex i386 jump, call, return
93b45514 4912Immediate form long jumps and calls are
24b1493d 4913@samp{lcall/ljmp $@var{section}, $@var{offset}} in AT&T syntax; the
93b45514 4914Intel syntax is
24b1493d 4915@samp{call/jmp far @var{section}:@var{offset}}. Also, the far return
d0281557 4916instruction
93b45514
RP
4917is @samp{lret $@var{stack-adjust}} in AT&T syntax; Intel syntax is
4918@samp{ret far @var{stack-adjust}}.
4919
4920@item
66b818fb
RP
4921@cindex sections, i386
4922@cindex i386 sections
24b1493d
RP
4923The AT&T assembler does not provide support for multiple section
4924programs. Unix style systems expect all programs to be single sections.
93b45514
RP
4925@end itemize
4926
242d9c06 4927@node i386-Opcodes
0b5b143a 4928_CHAPSEC__(1+_GENERIC__) Opcode Naming
66b818fb
RP
4929
4930@cindex i386 opcode naming
4931@cindex opcode naming, i386
93b45514
RP
4932Opcode names are suffixed with one character modifiers which specify the
4933size of operands. The letters @samp{b}, @samp{w}, and @samp{l} specify
4934byte, word, and long operands. If no suffix is specified by an
d0281557 4935instruction and it contains no memory operands then @code{_AS__} tries to
93b45514
RP
4936fill in the missing suffix based on the destination register operand
4937(the last one by convention). Thus, @samp{mov %ax, %bx} is equivalent
4938to @samp{movw %ax, %bx}; also, @samp{mov $1, %bx} is equivalent to
4939@samp{movw $1, %bx}. Note that this is incompatible with the AT&T Unix
4940assembler which assumes that a missing opcode suffix implies long
4941operand size. (This incompatibility does not affect compiler output
4942since compilers always explicitly specify the opcode suffix.)
4943
4944Almost all opcodes have the same names in AT&T and Intel format. There
4945are a few exceptions. The sign extend and zero extend instructions need
4946two sizes to specify them. They need a size to sign/zero extend
4947@emph{from} and a size to zero extend @emph{to}. This is accomplished
4948by using two opcode suffixes in AT&T syntax. Base names for sign extend
4949and zero extend are @samp{movs@dots{}} and @samp{movz@dots{}} in AT&T
4950syntax (@samp{movsx} and @samp{movzx} in Intel syntax). The opcode
4951suffixes are tacked on to this base name, the @emph{from} suffix before
4952the @emph{to} suffix. Thus, @samp{movsbl %al, %edx} is AT&T syntax for
4953``move sign extend @emph{from} %al @emph{to} %edx.'' Possible suffixes,
4954thus, are @samp{bl} (from byte to long), @samp{bw} (from byte to word),
4955and @samp{wl} (from word to long).
4956
66b818fb
RP
4957@cindex conversion instructions, i386
4958@cindex i386 conversion instructions
4959The Intel-syntax conversion instructions
4960
93b45514
RP
4961@itemize @bullet
4962@item
4963@samp{cbw} --- sign-extend byte in @samp{%al} to word in @samp{%ax},
66b818fb 4964
93b45514
RP
4965@item
4966@samp{cwde} --- sign-extend word in @samp{%ax} to long in @samp{%eax},
66b818fb 4967
93b45514
RP
4968@item
4969@samp{cwd} --- sign-extend word in @samp{%ax} to long in @samp{%dx:%ax},
66b818fb 4970
93b45514
RP
4971@item
4972@samp{cdq} --- sign-extend dword in @samp{%eax} to quad in @samp{%edx:%eax},
4973@end itemize
66b818fb
RP
4974
4975@noindent
93b45514 4976are called @samp{cbtw}, @samp{cwtl}, @samp{cwtd}, and @samp{cltd} in
d0281557 4977AT&T naming. @code{_AS__} accepts either naming for these instructions.
93b45514 4978
66b818fb
RP
4979@cindex jump instructions, i386
4980@cindex call instructions, i386
93b45514
RP
4981Far call/jump instructions are @samp{lcall} and @samp{ljmp} in
4982AT&T syntax, but are @samp{call far} and @samp{jump far} in Intel
d0281557 4983convention.
93b45514 4984
242d9c06 4985@node i386-Regs
0b5b143a 4986_CHAPSEC__(1+_GENERIC__) Register Naming
66b818fb
RP
4987
4988@cindex i386 registers
4989@cindex registers, i386
93b45514
RP
4990Register operands are always prefixes with @samp{%}. The 80386 registers
4991consist of
66b818fb 4992
93b45514
RP
4993@itemize @bullet
4994@item
4995the 8 32-bit registers @samp{%eax} (the accumulator), @samp{%ebx},
4996@samp{%ecx}, @samp{%edx}, @samp{%edi}, @samp{%esi}, @samp{%ebp} (the
4997frame pointer), and @samp{%esp} (the stack pointer).
4998
4999@item
5000the 8 16-bit low-ends of these: @samp{%ax}, @samp{%bx}, @samp{%cx},
5001@samp{%dx}, @samp{%di}, @samp{%si}, @samp{%bp}, and @samp{%sp}.
5002
5003@item
5004the 8 8-bit registers: @samp{%ah}, @samp{%al}, @samp{%bh},
5005@samp{%bl}, @samp{%ch}, @samp{%cl}, @samp{%dh}, and @samp{%dl} (These
5006are the high-bytes and low-bytes of @samp{%ax}, @samp{%bx},
5007@samp{%cx}, and @samp{%dx})
5008
5009@item
24b1493d
RP
5010the 6 section registers @samp{%cs} (code section), @samp{%ds}
5011(data section), @samp{%ss} (stack section), @samp{%es}, @samp{%fs},
93b45514
RP
5012and @samp{%gs}.
5013
5014@item
5015the 3 processor control registers @samp{%cr0}, @samp{%cr2}, and
5016@samp{%cr3}.
5017
5018@item
5019the 6 debug registers @samp{%db0}, @samp{%db1}, @samp{%db2},
5020@samp{%db3}, @samp{%db6}, and @samp{%db7}.
5021
5022@item
5023the 2 test registers @samp{%tr6} and @samp{%tr7}.
5024
5025@item
5026the 8 floating point register stack @samp{%st} or equivalently
5027@samp{%st(0)}, @samp{%st(1)}, @samp{%st(2)}, @samp{%st(3)},
5028@samp{%st(4)}, @samp{%st(5)}, @samp{%st(6)}, and @samp{%st(7)}.
5029@end itemize
5030
242d9c06 5031@node i386-prefixes
0b5b143a 5032_CHAPSEC__(1+_GENERIC__) Opcode Prefixes
66b818fb
RP
5033
5034@cindex i386 opcode prefixes
5035@cindex opcode prefixes, i386
5036@cindex prefixes, i386
93b45514 5037Opcode prefixes are used to modify the following opcode. They are used
24b1493d 5038to repeat string instructions, to provide section overrides, to perform
93b45514
RP
5039bus lock operations, and to give operand and address size (16-bit
5040operands are specified in an instruction by prefixing what would
5041normally be 32-bit operands with a ``operand size'' opcode prefix).
5042Opcode prefixes are usually given as single-line instructions with no
5043operands, and must directly precede the instruction they act upon. For
5044example, the @samp{scas} (scan string) instruction is repeated with:
d0281557 5045@smallexample
93b45514
RP
5046 repne
5047 scas
d0281557 5048@end smallexample
93b45514
RP
5049
5050Here is a list of opcode prefixes:
66b818fb 5051
93b45514
RP
5052@itemize @bullet
5053@item
66b818fb 5054@cindex section override prefixes, i386
24b1493d 5055Section override prefixes @samp{cs}, @samp{ds}, @samp{ss}, @samp{es},
93b45514 5056@samp{fs}, @samp{gs}. These are automatically added by specifying
24b1493d 5057using the @var{section}:@var{memory-operand} form for memory references.
93b45514
RP
5058
5059@item
66b818fb 5060@cindex size prefixes, i386
93b45514
RP
5061Operand/Address size prefixes @samp{data16} and @samp{addr16}
5062change 32-bit operands/addresses into 16-bit operands/addresses. Note
5063that 16-bit addressing modes (i.e. 8086 and 80286 addressing modes)
5064are not supported (yet).
5065
5066@item
66b818fb
RP
5067@cindex bus lock prefixes, i386
5068@cindex inhibiting interrupts, i386
93b45514
RP
5069The bus lock prefix @samp{lock} inhibits interrupts during
5070execution of the instruction it precedes. (This is only valid with
5071certain instructions; see a 80386 manual for details).
5072
5073@item
66b818fb 5074@cindex coprocessor wait, i386
93b45514
RP
5075The wait for coprocessor prefix @samp{wait} waits for the
5076coprocessor to complete the current instruction. This should never be
5077needed for the 80386/80387 combination.
5078
5079@item
66b818fb 5080@cindex repeat prefixes, i386
93b45514
RP
5081The @samp{rep}, @samp{repe}, and @samp{repne} prefixes are added
5082to string instructions to make them repeat @samp{%ecx} times.
5083@end itemize
5084
242d9c06 5085@node i386-Memory
0b5b143a 5086_CHAPSEC__(1+_GENERIC__) Memory References
66b818fb
RP
5087
5088@cindex i386 memory references
5089@cindex memory references, i386
93b45514 5090An Intel syntax indirect memory reference of the form
66b818fb 5091
d0281557 5092@smallexample
24b1493d 5093@var{section}:[@var{base} + @var{index}*@var{scale} + @var{disp}]
d0281557 5094@end smallexample
66b818fb
RP
5095
5096@noindent
93b45514 5097is translated into the AT&T syntax
66b818fb 5098
d0281557 5099@smallexample
24b1493d 5100@var{section}:@var{disp}(@var{base}, @var{index}, @var{scale})
d0281557 5101@end smallexample
66b818fb
RP
5102
5103@noindent
93b45514
RP
5104where @var{base} and @var{index} are the optional 32-bit base and
5105index registers, @var{disp} is the optional displacement, and
5106@var{scale}, taking the values 1, 2, 4, and 8, multiplies @var{index}
5107to calculate the address of the operand. If no @var{scale} is
24b1493d
RP
5108specified, @var{scale} is taken to be 1. @var{section} specifies the
5109optional section register for the memory operand, and may override the
5110default section register (see a 80386 manual for section register
5111defaults). Note that section overrides in AT&T syntax @emph{must} have
5112be preceded by a @samp{%}. If you specify a section override which
5113coincides with the default section register, @code{_AS__} will @emph{not}
5114output any section register override prefixes to assemble the given
5115instruction. Thus, section overrides can be specified to emphasize which
5116section register is used for a given memory operand.
93b45514
RP
5117
5118Here are some examples of Intel and AT&T style memory references:
93b45514 5119
66b818fb 5120@table @asis
93b45514 5121@item AT&T: @samp{-4(%ebp)}, Intel: @samp{[ebp - 4]}
24b1493d
RP
5122@var{base} is @samp{%ebp}; @var{disp} is @samp{-4}. @var{section} is
5123missing, and the default section is used (@samp{%ss} for addressing with
93b45514
RP
5124@samp{%ebp} as the base register). @var{index}, @var{scale} are both missing.
5125
5126@item AT&T: @samp{foo(,%eax,4)}, Intel: @samp{[foo + eax*4]}
5127@var{index} is @samp{%eax} (scaled by a @var{scale} 4); @var{disp} is
24b1493d 5128@samp{foo}. All other fields are missing. The section register here
93b45514
RP
5129defaults to @samp{%ds}.
5130
5131@item AT&T: @samp{foo(,1)}; Intel @samp{[foo]}
5132This uses the value pointed to by @samp{foo} as a memory operand.
5133Note that @var{base} and @var{index} are both missing, but there is only
5134@emph{one} @samp{,}. This is a syntactic exception.
5135
5136@item AT&T: @samp{%gs:foo}; Intel @samp{gs:foo}
24b1493d
RP
5137This selects the contents of the variable @samp{foo} with section
5138register @var{section} being @samp{%gs}.
93b45514
RP
5139@end table
5140
5141Absolute (as opposed to PC relative) call and jump operands must be
d0281557
RP
5142prefixed with @samp{*}. If no @samp{*} is specified, @code{_AS__} will
5143always choose PC relative addressing for jump/call labels.
93b45514
RP
5144
5145Any instruction that has a memory operand @emph{must} specify its size (byte,
5146word, or long) with an opcode suffix (@samp{b}, @samp{w}, or @samp{l},
5147respectively).
5148
242d9c06 5149@node i386-jumps
0b5b143a 5150_CHAPSEC__(1+_GENERIC__) Handling of Jump Instructions
66b818fb
RP
5151
5152@cindex jump optimization, i386
5153@cindex i386 jump optimization
93b45514
RP
5154Jump instructions are always optimized to use the smallest possible
5155displacements. This is accomplished by using byte (8-bit) displacement
5156jumps whenever the target is sufficiently close. If a byte displacement
5157is insufficient a long (32-bit) displacement is used. We do not support
5158word (16-bit) displacement jumps (i.e. prefixing the jump instruction
5159with the @samp{addr16} opcode prefix), since the 80386 insists upon masking
5160@samp{%eip} to 16 bits after the word displacement is added.
5161
5162Note that the @samp{jcxz}, @samp{jecxz}, @samp{loop}, @samp{loopz},
5163@samp{loope}, @samp{loopnz} and @samp{loopne} instructions only come in
5164byte displacements, so that it is possible that use of these
d0281557 5165instructions (@code{_GCC__} does not use them) will cause the assembler to
93b45514
RP
5166print an error message (and generate incorrect code). The AT&T 80386
5167assembler tries to get around this problem by expanding @samp{jcxz foo} to
d0281557 5168@smallexample
93b45514
RP
5169 jcxz cx_zero
5170 jmp cx_nonzero
5171cx_zero: jmp foo
5172cx_nonzero:
d0281557 5173@end smallexample
93b45514 5174
242d9c06 5175@node i386-Float
0b5b143a 5176_CHAPSEC__(1+_GENERIC__) Floating Point
66b818fb
RP
5177
5178@cindex i386 floating point
5179@cindex floating point, i386
93b45514
RP
5180All 80387 floating point types except packed BCD are supported.
5181(BCD support may be added without much difficulty). These data
5182types are 16-, 32-, and 64- bit integers, and single (32-bit),
5183double (64-bit), and extended (80-bit) precision floating point.
5184Each supported type has an opcode suffix and a constructor
5185associated with it. Opcode suffixes specify operand's data
5186types. Constructors build these data types into memory.
5187
5188@itemize @bullet
5189@item
66b818fb
RP
5190@cindex @code{float} directive, i386
5191@cindex @code{single} directive, i386
5192@cindex @code{double} directive, i386
5193@cindex @code{tfloat} directive, i386
93b45514
RP
5194Floating point constructors are @samp{.float} or @samp{.single},
5195@samp{.double}, and @samp{.tfloat} for 32-, 64-, and 80-bit formats.
5196These correspond to opcode suffixes @samp{s}, @samp{l}, and @samp{t}.
5197@samp{t} stands for temporary real, and that the 80387 only supports
5198this format via the @samp{fldt} (load temporary real to stack top) and
5199@samp{fstpt} (store temporary real and pop stack) instructions.
5200
5201@item
66b818fb
RP
5202@cindex @code{word} directive, i386
5203@cindex @code{long} directive, i386
5204@cindex @code{int} directive, i386
5205@cindex @code{quad} directive, i386
93b45514
RP
5206Integer constructors are @samp{.word}, @samp{.long} or @samp{.int}, and
5207@samp{.quad} for the 16-, 32-, and 64-bit integer formats. The corresponding
5208opcode suffixes are @samp{s} (single), @samp{l} (long), and @samp{q}
5209(quad). As with the temporary real format the 64-bit @samp{q} format is
5210only present in the @samp{fildq} (load quad integer to stack top) and
5211@samp{fistpq} (store quad integer and pop stack) instructions.
5212@end itemize
5213
5214Register to register operations do not require opcode suffixes,
5215so that @samp{fst %st, %st(1)} is equivalent to @samp{fstl %st, %st(1)}.
5216
66b818fb
RP
5217@cindex i386 @code{fwait} instruction
5218@cindex @code{fwait instruction}, i386
93b45514
RP
5219Since the 80387 automatically synchronizes with the 80386 @samp{fwait}
5220instructions are almost never needed (this is not the case for the
d0281557 522180286/80287 and 8086/8087 combinations). Therefore, @code{_AS__} suppresses
93b45514
RP
5222the @samp{fwait} instruction whenever it is implicitly selected by one
5223of the @samp{fn@dots{}} instructions. For example, @samp{fsave} and
5224@samp{fnsave} are treated identically. In general, all the @samp{fn@dots{}}
5225instructions are made equivalent to @samp{f@dots{}} instructions. If
5226@samp{fwait} is desired it must be explicitly coded.
5227
242d9c06 5228@node i386-Notes
0b5b143a 5229_CHAPSEC__(1+_GENERIC__) Notes
66b818fb
RP
5230
5231@cindex i386 @code{mul}, @code{imul} instructions
5232@cindex @code{mul} instruction, i386
5233@cindex @code{imul} instruction, i386
93b45514
RP
5234There is some trickery concerning the @samp{mul} and @samp{imul}
5235instructions that deserves mention. The 16-, 32-, and 64-bit expanding
5236multiplies (base opcode @samp{0xf6}; extension 4 for @samp{mul} and 5
5237for @samp{imul}) can be output only in the one operand form. Thus,
5238@samp{imul %ebx, %eax} does @emph{not} select the expanding multiply;
5239the expanding multiply would clobber the @samp{%edx} register, and this
d0281557 5240would confuse @code{_GCC__} output. Use @samp{imul %ebx} to get the
93b45514
RP
524164-bit product in @samp{%edx:%eax}.
5242
5243We have added a two operand form of @samp{imul} when the first operand
5244is an immediate mode expression and the second operand is a register.
5245This is just a shorthand, so that, multiplying @samp{%eax} by 69, for
5246example, can be done with @samp{imul $69, %eax} rather than @samp{imul
5247$69, %eax, %eax}.
0b5b143a 5248
09352a5d 5249_fi__(_I80386__)
242d9c06
SC
5250_if__(_Z8000__)
5251_if__(_GENERIC__)
5252@node Z8000-Dependent
5253_fi__(_GENERIC__)
5254_CHAPSEC__(0+_GENERIC__) Z8000 Dependent Features
5255
5256@cindex Z8000 support
5257@menu
5258* Z8000 Options:: Options
5259* Z8000 Syntax:: Syntax
5260* Z8000 Directives:: Z8000 Machine Directives
5261* Z8000 Opcodes:: Opcodes
5262@end menu
5263
5264@node Z8000 Options
5265_CHAPSEC__(1+_GENERIC__) Options
5266
5267@cindex Z8000 options
5268@cindex options, Z8000
5269@code{_AS__} has no additional command-line options for the Zilog
5270Z8000 family.
5271
5272@node Z8000 Syntax
5273_CHAPSEC__(1+_GENERIC__) Syntax
5274@menu
5275* Z8000-Chars:: Special Characters
5276* Z8000-Regs:: Register Names
5277* Z8000-Addressing:: Addressing Modes
5278@end menu
5279
5280@node Z8000-Chars
5281_CHAPSEC__(2+_GENERIC__) Special Characters
5282
5283@cindex line comment character, Z8000
5284@cindex Z8000 line comment character
5285@samp{!} is the line comment character.
5286
5287@cindex line separator, Z8000
5288@cindex statement separator, Z8000
5289@cindex Z8000 line separator
5290@samp{;} can be used instead of a newline to separate statements.
5291
5292@node Z8000
5293_CHAPSEC__(2+_GENERIC__) Register Names
5294
5295@cindex Z8000 registers
5296@cindex registers, Z8000
5297The Z8000 has sixteen 16 bit registers, numbered 0 to 15. You can refer to different
5298sized groups of registers with the prefix @samp{r} for 16 bit registers, @samp{rr}
5299for 32 bit registers and @samp{rq} for 64 bit registers. The first eight of the sixteen
530016 bit registers may also be accessed by bytes. They are named @samp{r@var{n}h} and @samp{r@var{n}l}}.
5301@example
5302byte registers
5303 r0l r0h r1h r1l r2h r2l r3h r3l r4h r4l r5h r5l r6h r6l r7h r7l
5304
5305word registers
5306 r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15
5307
5308long word registers
5309 rr0 rr2 rr4 rr6 rr8 rr10 rr12 rr14
5310
5311quad word registers
5312 rq0 rq4 rq8 rq12
5313@end example
5314@node Z8000-Addressing
5315_CHAPSEC__(2+_GENERIC__) Addressing Modes
5316@cindex addressing modes, Z8000
5317@cindex Z800 addressing modes
5318_AS__ understands the following addressing modes for the Z8000:
5319@table @code
5320@item r@var{n}
5321Register direct
5322
5323@item @@r@var{n}
5324Indirect register
5325
5326@item var{address}
5327Direct: the 16/24 bit address of the operand is in the instruction.
5328
5329@item address(r@var{n})
5330Indexed: the 16/24 bit address is added to the 16 bit register to produce
5331the final address in memory of the operand.
5332
5333@item r@var{n}(#@var{imm})
5334Base Address: the 16/24 bit register is added to the 16 bit sign extended immediate displacement to produce the final address in memory of the operand.
5335
5336@item r@var{n}(r@var{m})
5337Base Index: the 16/24 bit register r@var{n} is added to the sign extended
533816 bit index register r@var{m} to produce the final address in memory of the operand.
5339
5340@item #@var{xx}
5341Immediate data @var{xx}.
5342@end table
5343@node Z8000 Opcodes
5344_CHAPSEC__(1+_GENERIC__) Opcodes
5345
5346@cindex Z8000 opcode summary
5347@cindex opcode summary, Z8000
5348@cindex mnemonics, Z8000
5349@cindex instruction summary, Z8000
5350For detailed information on the Z8000 machine instruction set, see
5351@cite{Z8000 Technical Manual}.
5352
5353@cindex Z8000 pseudo ops
5354
5355The Z8000 port of gas provides a superficial resemblance to YASM, and
5356provides these YASM compatible pseudo ops:
5357@table @code
5358@item segm
5359@cindex segm
5360Generates code for the segmented Z8001.
5361@item unsegm
5362Generates code for the unsegmented Z8002.
5363@item name
5364Synonym for @code{.file}
5365@item global
5366Synonum for @code{.global}
5367@item wval
5368Synonym for .word
5369@item lval
5370Synonym for .long
5371@item bval
5372Synonym for .byte
5373@item sval
5374Assemble a string.
5375@code {sval} expects one string literal, delimited by single quotes. It assembles each byte of the string into consecutive addresses. Single quote
5376and other non-representable characters may be descrbed by escaping them
5377with a percent sign and their ascii value as a two digit hex number.
5378
5379@example
5380char *a = "he said \"it's 50% off\"";
5381
53820000 68652073 sval 'he said %22it%27s 50%25 off%22%00'
5383 61696420
5384 22697427
5385 73203530
5386 25206F66
5387 662200
5388
5389@end example
5390@item rsect
5391synonym for @code{.section}
5392@item block
5393synonym for @code{.space}
5394@item even
5395synonym for @code{.align 1}
5396@end table
5397
5398The following table summarizes the opcodes and their arguments:
5399@c kluge due to lack of group outside example
5400@page
5401@group
5402@smallexample
5403
5404 rs @r{16 bit source register}
5405 rd @r{16 bit destination register}
5406 rbs @r{8 bit source register}
5407 rbd @r{8 bit destination register}
5408 rrs @r{32 bit source register}
5409 rrd @r{32 bit destination register}
5410 rqs @r{64 bit source register}
5411 rqd @r{64 bit destination register}
5412 addr @r{16/24 bit address}
5413 imm @r{immediate data}
5414
5415adc rd,rs clrb addr cpsir @@rd,@@rs,rr,cc
5416adcb rbd,rbs clrb addr(rd) cpsirb @@rd,@@rs,rr,cc
5417add rd,@@rs clrb rbd dab rbd
5418add rd,addr com @@rd dbjnz rbd,disp7
5419add rd,addr(rs) com addr dec @@rd,imm4m1
5420add rd,imm16 com addr(rd) dec addr(rd),imm4m1
5421add rd,rs com rd dec addr,imm4m1
5422addb rbd,@@rs comb @@rd dec rd,imm4m1
5423addb rbd,addr comb addr decb @@rd,imm4m1
5424addb rbd,addr(rs) comb addr(rd) decb addr(rd),imm4m1
5425addb rbd,imm8 comb rbd decb addr,imm4m1
5426addb rbd,rbs comflg flags decb rbd,imm4m1
5427addl rrd,@@rs cp @@rd,imm16 di i2
5428addl rrd,addr cp addr(rd),imm16 div rrd,@@rs
5429addl rrd,addr(rs) cp addr,imm16 div rrd,addr
5430addl rrd,imm32 cp rd,@@rs div rrd,addr(rs)
5431addl rrd,rrs cp rd,addr div rrd,imm16
5432and rd,@@rs cp rd,addr(rs) div rrd,rs
5433and rd,addr cp rd,imm16 divl rqd,@@rs
5434and rd,addr(rs) cp rd,rs divl rqd,addr
5435and rd,imm16 cpb @@rd,imm8 divl rqd,addr(rs)
5436and rd,rs cpb addr(rd),imm8 divl rqd,imm32
5437andb rbd,@@rs cpb addr,imm8 divl rqd,rrs
5438andb rbd,addr cpb rbd,@@rs djnz rd,disp7
5439andb rbd,addr(rs) cpb rbd,addr ei i2
5440andb rbd,imm8 cpb rbd,addr(rs) ex rd,@@rs
5441andb rbd,rbs cpb rbd,imm8 ex rd,addr
5442bit @@rd,imm4 cpb rbd,rbs ex rd,addr(rs)
5443bit addr(rd),imm4 cpd rd,@@rs,rr,cc ex rd,rs
5444bit addr,imm4 cpdb rbd,@@rs,rr,cc exb rbd,@@rs
5445bit rd,imm4 cpdr rd,@@rs,rr,cc exb rbd,addr
5446bit rd,rs cpdrb rbd,@@rs,rr,cc exb rbd,addr(rs)
5447bitb @@rd,imm4 cpi rd,@@rs,rr,cc exb rbd,rbs
5448bitb addr(rd),imm4 cpib rbd,@@rs,rr,cc ext0e imm8
5449bitb addr,imm4 cpir rd,@@rs,rr,cc ext0f imm8
5450bitb rbd,imm4 cpirb rbd,@@rs,rr,cc ext8e imm8
5451bitb rbd,rs cpl rrd,@@rs ext8f imm8
5452bpt cpl rrd,addr exts rrd
5453call @@rd cpl rrd,addr(rs) extsb rd
5454call addr cpl rrd,imm32 extsl rqd
5455call addr(rd) cpl rrd,rrs halt
5456calr disp12 cpsd @@rd,@@rs,rr,cc in rd,@@rs
5457clr @@rd cpsdb @@rd,@@rs,rr,cc in rd,imm16
5458clr addr cpsdr @@rd,@@rs,rr,cc inb rbd,@@rs
5459clr addr(rd) cpsdrb @@rd,@@rs,rr,cc inb rbd,imm16
5460clr rd cpsi @@rd,@@rs,rr,cc inc @@rd,imm4m1
5461clrb @@rd cpsib @@rd,@@rs,rr,cc inc addr(rd),imm4m1
5462@end group
5463@group
5464inc addr,imm4m1 ldb rbd,rs(rx) mult rrd,addr(rs)
5465inc rd,imm4m1 ldb rd(imm16),rbs mult rrd,imm16
5466incb @@rd,imm4m1 ldb rd(rx),rbs mult rrd,rs
5467incb addr(rd),imm4m1 ldctl ctrl,rs multl rqd,@@rs
5468incb addr,imm4m1 ldctl rd,ctrl multl rqd,addr
5469incb rbd,imm4m1 ldd @@rs,@@rd,rr multl rqd,addr(rs)
5470ind @@rd,@@rs,ra lddb @@rs,@@rd,rr multl rqd,imm32
5471indb @@rd,@@rs,rba lddr @@rs,@@rd,rr multl rqd,rrs
5472inib @@rd,@@rs,ra lddrb @@rs,@@rd,rr neg @@rd
5473inibr @@rd,@@rs,ra ldi @@rd,@@rs,rr neg addr
5474iret ldib @@rd,@@rs,rr neg addr(rd)
5475jp cc,@@rd ldir @@rd,@@rs,rr neg rd
5476jp cc,addr ldirb @@rd,@@rs,rr negb @@rd
5477jp cc,addr(rd) ldk rd,imm4 negb addr
5478jr cc,disp8 ldl @@rd,rrs negb addr(rd)
5479ld @@rd,imm16 ldl addr(rd),rrs negb rbd
5480ld @@rd,rs ldl addr,rrs nop
5481ld addr(rd),imm16 ldl rd(imm16),rrs or rd,@@rs
5482ld addr(rd),rs ldl rd(rx),rrs or rd,addr
5483ld addr,imm16 ldl rrd,@@rs or rd,addr(rs)
5484ld addr,rs ldl rrd,addr or rd,imm16
5485ld rd(imm16),rs ldl rrd,addr(rs) or rd,rs
5486ld rd(rx),rs ldl rrd,imm32 orb rbd,@@rs
5487ld rd,@@rs ldl rrd,rrs orb rbd,addr
5488ld rd,addr ldl rrd,rs(imm16) orb rbd,addr(rs)
5489ld rd,addr(rs) ldl rrd,rs(rx) orb rbd,imm8
5490ld rd,imm16 ldm @@rd,rs,n orb rbd,rbs
5491ld rd,rs ldm addr(rd),rs,n out @@rd,rs
5492ld rd,rs(imm16) ldm addr,rs,n out imm16,rs
5493ld rd,rs(rx) ldm rd,@@rs,n outb @@rd,rbs
5494lda rd,addr ldm rd,addr(rs),n outb imm16,rbs
5495lda rd,addr(rs) ldm rd,addr,n outd @@rd,@@rs,ra
5496lda rd,rs(imm16) ldps @@rs outdb @@rd,@@rs,rba
5497lda rd,rs(rx) ldps addr outib @@rd,@@rs,ra
5498ldar rd,disp16 ldps addr(rs) outibr @@rd,@@rs,ra
5499ldb @@rd,imm8 ldr disp16,rs pop @@rd,@@rs
5500ldb @@rd,rbs ldr rd,disp16 pop addr(rd),@@rs
5501ldb addr(rd),imm8 ldrb disp16,rbs pop addr,@@rs
5502ldb addr(rd),rbs ldrb rbd,disp16 pop rd,@@rs
5503ldb addr,imm8 ldrl disp16,rrs popl @@rd,@@rs
5504ldb addr,rbs ldrl rrd,disp16 popl addr(rd),@@rs
5505ldb rbd,@@rs mbit popl addr,@@rs
5506ldb rbd,addr mreq rd popl rrd,@@rs
5507ldb rbd,addr(rs) mres push @@rd,@@rs
5508ldb rbd,imm8 mset push @@rd,addr
5509ldb rbd,rbs mult rrd,@@rs push @@rd,addr(rs)
5510ldb rbd,rs(imm16) mult rrd,addr push @@rd,imm16
5511@end group
5512@group
5513push @@rd,rs set addr,imm4 subl rrd,imm32
5514pushl @@rd,@@rs set rd,imm4 subl rrd,rrs
5515pushl @@rd,addr set rd,rs tcc cc,rd
5516pushl @@rd,addr(rs) setb @@rd,imm4 tccb cc,rbd
5517pushl @@rd,rrs setb addr(rd),imm4 test @@rd
5518res @@rd,imm4 setb addr,imm4 test addr
5519res addr(rd),imm4 setb rbd,imm4 test addr(rd)
5520res addr,imm4 setb rbd,rs test rd
5521res rd,imm4 setflg imm4 testb @@rd
5522res rd,rs sinb rbd,imm16 testb addr
5523resb @@rd,imm4 sinb rd,imm16 testb addr(rd)
5524resb addr(rd),imm4 sind @@rd,@@rs,ra testb rbd
5525resb addr,imm4 sindb @@rd,@@rs,rba testl @@rd
5526resb rbd,imm4 sinib @@rd,@@rs,ra testl addr
5527resb rbd,rs sinibr @@rd,@@rs,ra testl addr(rd)
5528resflg imm4 sla rd,imm8 testl rrd
5529ret cc slab rbd,imm8 trdb @@rd,@@rs,rba
5530rl rd,imm1or2 slal rrd,imm8 trdrb @@rd,@@rs,rba
5531rlb rbd,imm1or2 sll rd,imm8 trib @@rd,@@rs,rbr
5532rlc rd,imm1or2 sllb rbd,imm8 trirb @@rd,@@rs,rbr
5533rlcb rbd,imm1or2 slll rrd,imm8 trtdrb @@ra,@@rb,rbr
5534rldb rbb,rba sout imm16,rs trtib @@ra,@@rb,rr
5535rr rd,imm1or2 soutb imm16,rbs trtirb @@ra,@@rb,rbr
5536rrb rbd,imm1or2 soutd @@rd,@@rs,ra trtrb @@ra,@@rb,rbr
5537rrc rd,imm1or2 soutdb @@rd,@@rs,rba tset @@rd
5538rrcb rbd,imm1or2 soutib @@rd,@@rs,ra tset addr
5539rrdb rbb,rba soutibr @@rd,@@rs,ra tset addr(rd)
5540rsvd36 sra rd,imm8 tset rd
5541rsvd38 srab rbd,imm8 tsetb @@rd
5542rsvd78 sral rrd,imm8 tsetb addr
5543rsvd7e srl rd,imm8 tsetb addr(rd)
5544rsvd9d srlb rbd,imm8 tsetb rbd
5545rsvd9f srll rrd,imm8 xor rd,@@rs
5546rsvdb9 sub rd,@@rs xor rd,addr
5547rsvdbf sub rd,addr xor rd,addr(rs)
5548sbc rd,rs sub rd,addr(rs) xor rd,imm16
5549sbcb rbd,rbs sub rd,imm16 xor rd,rs
5550sc imm8 sub rd,rs xorb rbd,@@rs
5551sda rd,rs subb rbd,@@rs xorb rbd,addr
5552sdab rbd,rs subb rbd,addr xorb rbd,addr(rs)
5553sdal rrd,rs subb rbd,addr(rs) xorb rbd,imm8
5554sdl rd,rs subb rbd,imm8 xorb rbd,rbs
5555sdlb rbd,rs subb rbd,rbs xorb rbd,rbs
5556sdll rrd,rs subl rrd,@@rs
5557set @@rd,imm4 subl rrd,addr
5558set addr(rd),imm4 subl rrd,addr(rs)
5559@end group
5560@end smallexample
5561
5562_fi__(_Z8000__)
d0281557 5563_if__(0)
09352a5d
RP
5564@c pesch@cygnus.com: we ignore the following chapters, since internals are
5565@c changing rapidly. These may need to be moved to another
47342e8f 5566@c book anyhow, if we adopt the model of user/modifier
d0281557 5567@c books.
242d9c06 5568@node Maintenance
93b45514
RP
5569@chapter Maintaining the Assembler
5570[[this chapter is still being built]]
5571
5572@section Design
5573We had these goals, in descending priority:
5574@table @b
5575@item Accuracy.
d0281557 5576For every program composed by a compiler, @code{_AS__} should emit
93b45514
RP
5577``correct'' code. This leaves some latitude in choosing addressing
5578modes, order of @code{relocation_info} structures in the object
47342e8f 5579file, @emph{etc}.
93b45514
RP
5580
5581@item Speed, for usual case.
d0281557 5582By far the most common use of @code{_AS__} will be assembling compiler
93b45514
RP
5583emissions.
5584
5585@item Upward compatibility for existing assembler code.
5586Well @dots{} we don't support Vax bit fields but everything else
5587seems to be upward compatible.
5588
5589@item Readability.
5590The code should be maintainable with few surprises. (JF: ha!)
5591
5592@end table
5593
5594We assumed that disk I/O was slow and expensive while memory was
5595fast and access to memory was cheap. We expect the in-memory data
5596structures to be less than 10 times the size of the emitted object
5597file. (Contrast this with the C compiler where in-memory structures
5598might be 100 times object file size!)
5599This suggests:
5600@itemize @bullet
5601@item
5602Try to read the source file from disk only one time. For other
5603reasons, we keep large chunks of the source file in memory during
5604assembly so this is not a problem. Also the assembly algorithm
5605should only scan the source text once if the compiler composed the
5606text according to a few simple rules.
5607@item
5608Emit the object code bytes only once. Don't store values and then
5609backpatch later.
5610@item
5611Build the object file in memory and do direct writes to disk of
5612large buffers.
5613@end itemize
5614
5615RMS suggested a one-pass algorithm which seems to work well. By not
5616parsing text during a second pass considerable time is saved on
47342e8f 5617large programs (@emph{e.g.} the sort of C program @code{yacc} would
93b45514
RP
5618emit).
5619
5620It happened that the data structures needed to emit relocation
5621information to the object file were neatly subsumed into the data
5622structures that do backpatching of addresses after pass 1.
5623
5624Many of the functions began life as re-usable modules, loosely
5625connected. RMS changed this to gain speed. For example, input
5626parsing routines which used to work on pre-sanitized strings now
5627must parse raw data. Hence they have to import knowledge of the
47342e8f 5628assemblers' comment conventions @emph{etc}.
93b45514
RP
5629
5630@section Deprecated Feature(?)s
5631We have stopped supporting some features:
5632@itemize @bullet
5633@item
5634@code{.org} statements must have @b{defined} expressions.
5635@item
5636Vax Bit fields (@kbd{:} operator) are entirely unsupported.
5637@end itemize
5638
5639It might be a good idea to not support these features in a future release:
5640@itemize @bullet
5641@item
5642@kbd{#} should begin a comment, even in column 1.
5643@item
5644Why support the logical line & file concept any more?
5645@item
24b1493d 5646Subsections are a good candidate for flushing.
93b45514
RP
5647Depends on which compilers need them I guess.
5648@end itemize
5649
5650@section Bugs, Ideas, Further Work
5651Clearly the major improvement is DON'T USE A TEXT-READING
5652ASSEMBLER for the back end of a compiler. It is much faster to
5653interpret binary gobbledygook from a compiler's tables than to
5654ask the compiler to write out human-readable code just so the
5655assembler can parse it back to binary.
5656
d0281557 5657Assuming you use @code{_AS__} for human written programs: here are
93b45514
RP
5658some ideas:
5659@itemize @bullet
5660@item
5661Document (here) @code{APP}.
5662@item
5663Take advantage of knowing no spaces except after opcode
d0281557 5664to speed up @code{_AS__}. (Modify @code{app.c} to flush useless spaces:
93b45514
RP
5665only keep space/tabs at begin of line or between 2
5666symbols.)
5667@item
5668Put pointers in this documentation to @file{a.out} documentation.
5669@item
5670Split the assembler into parts so it can gobble direct binary
47342e8f 5671from @emph{e.g.} @code{cc}. It is silly for@code{cc} to compose text
d0281557 5672just so @code{_AS__} can parse it back to binary.
93b45514
RP
5673@item
5674Rewrite hash functions: I want a more modular, faster library.
5675@item
5676Clean up LOTS of code.
5677@item
5678Include all the non-@file{.c} files in the maintenance chapter.
5679@item
5680Document flonums.
5681@item
5682Implement flonum short literals.
5683@item
5684Change all talk of expression operands to expression quantities,
47342e8f 5685or perhaps to expression arguments.
93b45514
RP
5686@item
5687Implement pass 2.
5688@item
5689Whenever a @code{.text} or @code{.data} statement is seen, we close
5690of the current frag with an imaginary @code{.fill 0}. This is
5691because we only have one obstack for frags, and we can't grow new
24b1493d 5692frags for a new subsection, then go back to the old subsection and
93b45514 5693append bytes to the old frag. All this nonsense goes away if we
24b1493d 5694give each subsection its own obstack. It makes code simpler in
93b45514 5695about 10 places, but nobody has bothered to do it because C compiler
24b1493d 5696output rarely changes subsections (compared to ending frags with
93b45514
RP
5697relaxable addresses, which is common).
5698@end itemize
5699
5700@section Sources
d0281557 5701@c The following files in the @file{_AS__} directory
93b45514
RP
5702@c are symbolic links to other files, of
5703@c the same name, in a different directory.
5704@c @itemize @bullet
5705@c @item
5706@c @file{atof_generic.c}
5707@c @item
5708@c @file{atof_vax.c}
5709@c @item
5710@c @file{flonum_const.c}
5711@c @item
5712@c @file{flonum_copy.c}
5713@c @item
5714@c @file{flonum_get.c}
5715@c @item
5716@c @file{flonum_multip.c}
5717@c @item
5718@c @file{flonum_normal.c}
5719@c @item
5720@c @file{flonum_print.c}
5721@c @end itemize
5722
d0281557 5723Here is a list of the source files in the @file{_AS__} directory.
93b45514
RP
5724
5725@table @file
5726@item app.c
5727This contains the pre-processing phase, which deletes comments,
5728handles whitespace, etc. This was recently re-written, since app
5729used to be a separate program, but RMS wanted it to be inline.
5730
5731@item append.c
5732This is a subroutine to append a string to another string returning a
5733pointer just after the last @code{char} appended. (JF: All these
5734little routines should probably all be put in one file.)
5735
5736@item as.c
d0281557 5737Here you will find the main program of the assembler @code{_AS__}.
93b45514
RP
5738
5739@item expr.c
5740This is a branch office of @file{read.c}. This understands
d0281557 5741expressions, arguments. Inside @code{_AS__}, arguments are called
47342e8f
RP
5742(expression) @emph{operands}. This is confusing, because we also talk
5743(elsewhere) about instruction @emph{operands}. Also, expression
5744operands are called @emph{quantities} explicitly to avoid confusion
93b45514
RP
5745with instruction operands. What a mess.
5746
5747@item frags.c
5748This implements the @b{frag} concept. Without frags, finding the
5749right size for branch instructions would be a lot harder.
5750
5751@item hash.c
47342e8f 5752This contains the symbol table, opcode table @emph{etc.} hashing
93b45514
RP
5753functions.
5754
5755@item hex_value.c
5756This is a table of values of digits, for use in atoi() type
5757functions. Could probably be flushed by using calls to strtol(), or
5758something similar.
5759
5760@item input-file.c
5761This contains Operating system dependent source file reading
5762routines. Since error messages often say where we are in reading
d0281557 5763the source file, they live here too. Since @code{_AS__} is intended to
93b45514
RP
5764run under GNU and Unix only, this might be worth flushing. Anyway,
5765almost all C compilers support stdio.
5766
5767@item input-scrub.c
5768This deals with calling the pre-processor (if needed) and feeding the
5769chunks back to the rest of the assembler the right way.
5770
5771@item messages.c
5772This contains operating system independent parts of fatal and
5773warning message reporting. See @file{append.c} above.
5774
5775@item output-file.c
5776This contains operating system dependent functions that write an
d0281557 5777object file for @code{_AS__}. See @file{input-file.c} above.
93b45514
RP
5778
5779@item read.c
d0281557 5780This implements all the directives of @code{_AS__}. This also deals
93b45514
RP
5781with passing input lines to the machine dependent part of the
5782assembler.
5783
5784@item strstr.c
5785This is a C library function that isn't in most C libraries yet.
5786See @file{append.c} above.
5787
5788@item subsegs.c
24b1493d 5789This implements subsections.
93b45514
RP
5790
5791@item symbols.c
5792This implements symbols.
5793
5794@item write.c
5795This contains the code to perform relaxation, and to write out
5796the object file. It is mostly operating system independent, but
5797different OSes have different object file formats in any case.
5798
5799@item xmalloc.c
5800This implements @code{malloc()} or bust. See @file{append.c} above.
5801
5802@item xrealloc.c
5803This implements @code{realloc()} or bust. See @file{append.c} above.
5804
5805@item atof-generic.c
5806The following files were taken from a machine-independent subroutine
5807library for manipulating floating point numbers and very large
5808integers.
5809
5810@file{atof-generic.c} turns a string into a flonum internal format
5811floating-point number.
5812
5813@item flonum-const.c
5814This contains some potentially useful floating point numbers in
5815flonum format.
5816
5817@item flonum-copy.c
5818This copies a flonum.
5819
5820@item flonum-multip.c
5821This multiplies two flonums together.
5822
5823@item bignum-copy.c
5824This copies a bignum.
5825
5826@end table
5827
5828Here is a table of all the machine-specific files (this includes
5829both source and header files). Typically, there is a
5830@var{machine}.c file, a @var{machine}-opcode.h file, and an
5831atof-@var{machine}.c file. The @var{machine}-opcode.h file should
5832be identical to the one used by GDB (which uses it for disassembly.)
5833
5834@table @file
5835
5836@item atof-ieee.c
5837This contains code to turn a flonum into a ieee literal constant.
d0281557 5838This is used by tye 680x0, 32x32, sparc, and i386 versions of @code{_AS__}.
93b45514
RP
5839
5840@item i386-opcode.h
5841This is the opcode-table for the i386 version of the assembler.
5842
5843@item i386.c
5844This contains all the code for the i386 version of the assembler.
5845
5846@item i386.h
5847This defines constants and macros used by the i386 version of the assembler.
5848
5849@item m-generic.h
5850generic 68020 header file. To be linked to m68k.h on a
5851non-sun3, non-hpux system.
5852
5853@item m-sun2.h
585468010 header file for Sun2 workstations. Not well tested. To be linked
5855to m68k.h on a sun2. (See also @samp{-DSUN_ASM_SYNTAX} in the
5856@file{Makefile}.)
5857
5858@item m-sun3.h
585968020 header file for Sun3 workstations. To be linked to m68k.h before
5860compiling on a Sun3 system. (See also @samp{-DSUN_ASM_SYNTAX} in the
5861@file{Makefile}.)
5862
5863@item m-hpux.h
586468020 header file for a HPUX (system 5?) box. Which box, which
5865version of HPUX, etc? I don't know.
5866
5867@item m68k.h
5868A hard- or symbolic- link to one of @file{m-generic.h},
5869@file{m-hpux.h} or @file{m-sun3.h} depending on which kind of
5870680x0 you are assembling for. (See also @samp{-DSUN_ASM_SYNTAX} in the
5871@file{Makefile}.)
5872
5873@item m68k-opcode.h
5874Opcode table for 68020. This is now a link to the opcode table
5875in the @code{GDB} source directory.
5876
5877@item m68k.c
5878All the mc680x0 code, in one huge, slow-to-compile file.
5879
5880@item ns32k.c
5881This contains the code for the ns32032/ns32532 version of the
5882assembler.
5883
5884@item ns32k-opcode.h
5885This contains the opcode table for the ns32032/ns32532 version
5886of the assembler.
5887
5888@item vax-inst.h
5889Vax specific file for describing Vax operands and other Vax-ish things.
5890
5891@item vax-opcode.h
5892Vax opcode table.
5893
5894@item vax.c
d0281557 5895Vax specific parts of @code{_AS__}. Also includes the former files
93b45514
RP
5896@file{vax-ins-parse.c}, @file{vax-reg-parse.c} and @file{vip-op.c}.
5897
5898@item atof-vax.c
5899Turns a flonum into a Vax constant.
5900
5901@item vms.c
5902This file contains the special code needed to put out a VMS
5903style object file for the Vax.
5904
5905@end table
5906
5907Here is a list of the header files in the source directory.
5908(Warning: This section may not be very accurate. I didn't
5909write the header files; I just report them.) Also note that I
5910think many of these header files could be cleaned up or
5911eliminated.
5912
5913@table @file
5914
5915@item a.out.h
5916This describes the structures used to create the binary header data
5917inside the object file. Perhaps we should use the one in
5918@file{/usr/include}?
5919
5920@item as.h
09352a5d
RP
5921This defines all the globally useful things, and pulls in _0__<stdio.h>_1__
5922and _0__<assert.h>_1__.
93b45514
RP
5923
5924@item bignum.h
5925This defines macros useful for dealing with bignums.
5926
5927@item expr.h
5928Structure and macros for dealing with expression()
5929
5930@item flonum.h
5931This defines the structure for dealing with floating point
5932numbers. It #includes @file{bignum.h}.
5933
5934@item frags.h
5935This contains macro for appending a byte to the current frag.
5936
5937@item hash.h
5938Structures and function definitions for the hashing functions.
5939
5940@item input-file.h
5941Function headers for the input-file.c functions.
5942
5943@item md.h
5944structures and function headers for things defined in the
5945machine dependent part of the assembler.
5946
5947@item obstack.h
5948This is the GNU systemwide include file for manipulating obstacks.
5949Since nobody is running under real GNU yet, we include this file.
5950
5951@item read.h
5952Macros and function headers for reading in source files.
5953
5954@item struct-symbol.h
d0281557 5955Structure definition and macros for dealing with the _AS__
93b45514
RP
5956internal form of a symbol.
5957
5958@item subsegs.h
24b1493d
RP
5959structure definition for dealing with the numbered subsections
5960of the text and data sections.
93b45514
RP
5961
5962@item symbols.h
5963Macros and function headers for dealing with symbols.
5964
5965@item write.h
24b1493d 5966Structure for doing section fixups.
93b45514
RP
5967@end table
5968
242d9c06
SC
5969@c ~subsection Test Directory
5970@c (Note: The test directory seems to have disappeared somewhere
5971@c along the line. If you want it, you'll probably have to find a
5972@c REALLY OLD dump tape~dots{})
5973@c
5974@c The ~file{test/} directory is used for regression testing.
5975@c After you modify ~@code{_AS__}, you can get a quick go/nogo
5976@c confidence test by running the new ~@code{_AS__} over the source
5977@c files in this directory. You use a shell script ~file{test/do}.
5978@c
5979@c The tests in this suite are evolving. They are not comprehensive.
5980@c They have, however, caught hundreds of bugs early in the debugging
5981@c cycle of ~@code{_AS__}. Most test statements in this suite were naturally
5982@c selected: they were used to demonstrate actual ~@code{_AS__} bugs rather
5983@c than being written ~i{a prioi}.
5984@c
5985@c Another testing suggestion: over 30 bugs have been found simply by
5986@c running examples from this manual through ~@code{_AS__}.
5987@c Some examples in this manual are selected
5988@c to distinguish boundary conditions; they are good for testing ~@code{_AS__}.
5989@c
5990@c ~subsubsection Regression Testing
5991@c Each regression test involves assembling a file and comparing the
5992@c actual output of ~@code{_AS__} to ``known good'' output files. Both
5993@c the object file and the error/warning message file (stderr) are
5994@c inspected. Optionally the ~@code{_AS__} exit status may be checked.
5995@c Discrepencies are reported. Each discrepency means either that
5996@c you broke some part of ~@code{_AS__} or that the ``known good'' files
5997@c are now out of date and should be changed to reflect the new
5998@c definition of ``good''.
5999@c
6000@c Each regression test lives in its own directory, in a tree
6001@c rooted in the directory ~file{test/}. Each such directory
6002@c has a name ending in ~file{.ret}, where `ret' stands for
6003@c REgression Test. The ~file{.ret} ending allows ~code{find
6004@c (1)} to find all regression tests in the tree, without
6005@c needing to list them explicitly.
6006@c
6007@c Any ~file{.ret} directory must contain a file called
6008@c ~file{input} which is the source file to assemble. During
6009@c testing an object file ~file{output} is created, as well as
6010@c a file ~file{stdouterr} which contains the output to both
6011@c stderr and stderr. If there is a file ~file{output.good} in
6012@c the directory, and if ~file{output} contains exactly the
6013@c same data as ~file{output.good}, the file ~file{output} is
6014@c deleted. Likewise ~file{stdouterr} is removed if it exactly
6015@c matches a file ~file{stdouterr.good}. If file
6016@c ~file{status.good} is present, containing a decimal number
6017@c before a newline, the exit status of ~@code{_AS__} is compared
6018@c to this number. If the status numbers are not equal, a file
6019@c ~file{status} is written to the directory, containing the
6020@c actual status as a decimal number followed by newline.
6021@c
6022@c Should any of the ~file{*.good} files fail to match their corresponding
6023@c actual files, this is noted by a 1-line message on the screen during
6024@c the regression test, and you can use ~@code{find (1)} to find any
6025@c files named ~file{status}, ~file {output} or ~file{stdouterr}.
6026@c
6027
6028@node Retargeting
93b45514
RP
6029@chapter Teaching the Assembler about a New Machine
6030
6031This chapter describes the steps required in order to make the
6032assembler work with another machine's assembly language. This
6033chapter is not complete, and only describes the steps in the
6034broadest terms. You should look at the source for the
6035currently supported machine in order to discover some of the
6036details that aren't mentioned here.
6037
6038You should create a new file called @file{@var{machine}.c}, and
6039add the appropriate lines to the file @file{Makefile} so that
6040you can compile your new version of the assembler. This should
6041be straighforward; simply add lines similar to the ones there
6042for the four current versions of the assembler.
6043
47342e8f 6044If you want to be compatible with GDB, (and the current
93b45514
RP
6045machine-dependent versions of the assembler), you should create
6046a file called @file{@var{machine}-opcode.h} which should
6047contain all the information about the names of the machine
6048instructions, their opcodes, and what addressing modes they
6049support. If you do this right, the assembler and GDB can share
6050this file, and you'll only have to write it once. Note that
d0281557 6051while you're writing @code{_AS__}, you may want to use an
93b45514 6052independent program (if you have access to one), to make sure
d0281557 6053that @code{_AS__} is emitting the correct bytes. Since @code{_AS__}
93b45514
RP
6054and @code{GDB} share the opcode table, an incorrect opcode
6055table entry may make invalid bytes look OK when you disassemble
6056them with @code{GDB}.
6057
6058@section Functions You will Have to Write
6059
6060Your file @file{@var{machine}.c} should contain definitions for
6061the following functions and variables. It will need to include
6062some header files in order to use some of the structures
6063defined in the machine-independent part of the assembler. The
6064needed header files are mentioned in the descriptions of the
6065functions that will need them.
6066
6067@table @code
6068
6069@item long omagic;
6070This long integer holds the value to place at the beginning of
6071the @file{a.out} file. It is usually @samp{OMAGIC}, except on
6072machines that store additional information in the magic-number.
6073
6074@item char comment_chars[];
6075This character array holds the values of the characters that
6076start a comment anywhere in a line. Comments are stripped off
6077automatically by the machine independent part of the
6078assembler. Note that the @samp{/*} will always start a
6079comment, and that only @samp{*/} will end a comment started by
d0281557 6080@samp{*/}.
93b45514
RP
6081
6082@item char line_comment_chars[];
6083This character array holds the values of the chars that start a
6084comment only if they are the first (non-whitespace) character
6085on a line. If the character @samp{#} does not appear in this
6086list, you may get unexpected results. (Various
6087machine-independent parts of the assembler treat the comments
6088@samp{#APP} and @samp{#NO_APP} specially, and assume that lines
6089that start with @samp{#} are comments.)
6090
6091@item char EXP_CHARS[];
6092This character array holds the letters that can separate the
6093mantissa and the exponent of a floating point number. Typical
6094values are @samp{e} and @samp{E}.
6095
6096@item char FLT_CHARS[];
6097This character array holds the letters that--when they appear
6098immediately after a leading zero--indicate that a number is a
6099floating-point number. (Sort of how 0x indicates that a
6100hexadecimal number follows.)
6101
6102@item pseudo_typeS md_pseudo_table[];
6103(@var{pseudo_typeS} is defined in @file{md.h})
6104This array contains a list of the machine_dependent directives
6105the assembler must support. It contains the name of each
6106pseudo op (Without the leading @samp{.}), a pointer to a
6107function to be called when that directive is encountered, and
6108an integer argument to be passed to that function.
6109
6110@item void md_begin(void)
6111This function is called as part of the assembler's
6112initialization. It should do any initialization required by
6113any of your other routines.
6114
6115@item int md_parse_option(char **optionPTR, int *argcPTR, char ***argvPTR)
6116This routine is called once for each option on the command line
d0281557 6117that the machine-independent part of @code{_AS__} does not
93b45514
RP
6118understand. This function should return non-zero if the option
6119pointed to by @var{optionPTR} is a valid option. If it is not
6120a valid option, this routine should return zero. The variables
6121@var{argcPTR} and @var{argvPTR} are provided in case the option
6122requires a filename or something similar as an argument. If
6123the option is multi-character, @var{optionPTR} should be
6124advanced past the end of the option, otherwise every letter in
6125the option will be treated as a separate single-character
6126option.
6127
6128@item void md_assemble(char *string)
6129This routine is called for every machine-dependent
6130non-directive line in the source file. It does all the real
6131work involved in reading the opcode, parsing the operands,
6132etc. @var{string} is a pointer to a null-terminated string,
6133that comprises the input line, with all excess whitespace and
6134comments removed.
6135
6136@item void md_number_to_chars(char *outputPTR,long value,int nbytes)
6137This routine is called to turn a C long int, short int, or char
6138into the series of bytes that represents that number on the
6139target machine. @var{outputPTR} points to an array where the
6140result should be stored; @var{value} is the value to store; and
6141@var{nbytes} is the number of bytes in 'value' that should be
6142stored.
6143
6144@item void md_number_to_imm(char *outputPTR,long value,int nbytes)
6145This routine is called to turn a C long int, short int, or char
6146into the series of bytes that represent an immediate value on
6147the target machine. It is identical to the function @code{md_number_to_chars},
6148except on NS32K machines.@refill
6149
6150@item void md_number_to_disp(char *outputPTR,long value,int nbytes)
6151This routine is called to turn a C long int, short int, or char
6152into the series of bytes that represent an displacement value on
6153the target machine. It is identical to the function @code{md_number_to_chars},
6154except on NS32K machines.@refill
6155
6156@item void md_number_to_field(char *outputPTR,long value,int nbytes)
6157This routine is identical to @code{md_number_to_chars},
6158except on NS32K machines.
6159
6160@item void md_ri_to_chars(struct relocation_info *riPTR,ri)
6161(@code{struct relocation_info} is defined in @file{a.out.h})
6162This routine emits the relocation info in @var{ri}
6163in the appropriate bit-pattern for the target machine.
6164The result should be stored in the location pointed
6165to by @var{riPTR}. This routine may be a no-op unless you are
6166attempting to do cross-assembly.
6167
6168@item char *md_atof(char type,char *outputPTR,int *sizePTR)
6169This routine turns a series of digits into the appropriate
6170internal representation for a floating-point number.
6171@var{type} is a character from @var{FLT_CHARS[]} that describes
6172what kind of floating point number is wanted; @var{outputPTR}
6173is a pointer to an array that the result should be stored in;
6174and @var{sizePTR} is a pointer to an integer where the size (in
6175bytes) of the result should be stored. This routine should
6176return an error message, or an empty string (not (char *)0) for
6177success.
6178
6179@item int md_short_jump_size;
6180This variable holds the (maximum) size in bytes of a short (16
6181bit or so) jump created by @code{md_create_short_jump()}. This
6182variable is used as part of the broken-word feature, and isn't
6183needed if the assembler is compiled with
6184@samp{-DWORKING_DOT_WORD}.
6185
6186@item int md_long_jump_size;
6187This variable holds the (maximum) size in bytes of a long (32
6188bit or so) jump created by @code{md_create_long_jump()}. This
6189variable is used as part of the broken-word feature, and isn't
6190needed if the assembler is compiled with
6191@samp{-DWORKING_DOT_WORD}.
6192
6193@item void md_create_short_jump(char *resultPTR,long from_addr,
6194@code{long to_addr,fragS *frag,symbolS *to_symbol)}
6195This function emits a jump from @var{from_addr} to @var{to_addr} in
6196the array of bytes pointed to by @var{resultPTR}. If this creates a
6197type of jump that must be relocated, this function should call
6198@code{fix_new()} with @var{frag} and @var{to_symbol}. The jump
6199emitted by this function may be smaller than @var{md_short_jump_size},
6200but it must never create a larger one.
6201(If it creates a smaller jump, the extra bytes of memory will not be
6202used.) This function is used as part of the broken-word feature,
6203and isn't needed if the assembler is compiled with
6204@samp{-DWORKING_DOT_WORD}.@refill
6205
6206@item void md_create_long_jump(char *ptr,long from_addr,
6207@code{long to_addr,fragS *frag,symbolS *to_symbol)}
6208This function is similar to the previous function,
6209@code{md_create_short_jump()}, except that it creates a long
6210jump instead of a short one. This function is used as part of
6211the broken-word feature, and isn't needed if the assembler is
6212compiled with @samp{-DWORKING_DOT_WORD}.
6213
6214@item int md_estimate_size_before_relax(fragS *fragPTR,int segment_type)
6215This function does the initial setting up for relaxation. This
6216includes forcing references to still-undefined symbols to the
6217appropriate addressing modes.
6218
6219@item relax_typeS md_relax_table[];
6220(relax_typeS is defined in md.h)
6221This array describes the various machine dependent states a
6222frag may be in before relaxation. You will need one group of
6223entries for each type of addressing mode you intend to relax.
6224
6225@item void md_convert_frag(fragS *fragPTR)
6226(@var{fragS} is defined in @file{as.h})
6227This routine does the required cleanup after relaxation.
6228Relaxation has changed the type of the frag to a type that can
6229reach its destination. This function should adjust the opcode
6230of the frag to use the appropriate addressing mode.
6231@var{fragPTR} points to the frag to clean up.
6232
6233@item void md_end(void)
6234This function is called just before the assembler exits. It
6235need not free up memory unless the operating system doesn't do
6236it automatically on exit. (In which case you'll also have to
6237track down all the other places where the assembler allocates
6238space but never frees it.)
6239
6240@end table
6241
6242@section External Variables You will Need to Use
6243
6244You will need to refer to or change the following external variables
6245from within the machine-dependent part of the assembler.
6246
6247@table @code
6248@item extern char flagseen[];
6249This array holds non-zero values in locations corresponding to
6250the options that were on the command line. Thus, if the
6251assembler was called with @samp{-W}, @var{flagseen['W']} would
6252be non-zero.
6253
6254@item extern fragS *frag_now;
6255This pointer points to the current frag--the frag that bytes
6256are currently being added to. If nothing else, you will need
6257to pass it as an argument to various machine-independent
6258functions. It is maintained automatically by the
6259frag-manipulating functions; you should never have to change it
6260yourself.
6261
6262@item extern LITTLENUM_TYPE generic_bignum[];
6263(@var{LITTLENUM_TYPE} is defined in @file{bignum.h}.
6264This is where @dfn{bignums}--numbers larger than 32 bits--are
6265returned when they are encountered in an expression. You will
6266need to use this if you need to implement directives (or
6267anything else) that must deal with these large numbers.
6268@code{Bignums} are of @code{segT} @code{SEG_BIG} (defined in
6269@file{as.h}, and have a positive @code{X_add_number}. The
6270@code{X_add_number} of a @code{bignum} is the number of
6271@code{LITTLENUMS} in @var{generic_bignum} that the number takes
6272up.
6273
6274@item extern FLONUM_TYPE generic_floating_point_number;
6275(@var{FLONUM_TYPE} is defined in @file{flonum.h}.
6276The is where @dfn{flonums}--floating-point numbers within
6277expressions--are returned. @code{Flonums} are of @code{segT}
6278@code{SEG_BIG}, and have a negative @code{X_add_number}.
6279@code{Flonums} are returned in a generic format. You will have
6280to write a routine to turn this generic format into the
6281appropriate floating-point format for your machine.
6282
6283@item extern int need_pass_2;
6284If this variable is non-zero, the assembler has encountered an
6285expression that cannot be assembled in a single pass. Since
6286the second pass isn't implemented, this flag means that the
6287assembler is punting, and is only looking for additional syntax
6288errors. (Or something like that.)
6289
6290@item extern segT now_seg;
24b1493d 6291This variable holds the value of the section the assembler is
93b45514
RP
6292currently assembling into.
6293
6294@end table
6295
6296@section External functions will you need
6297
6298You will find the following external functions useful (or
6299indispensable) when you're writing the machine-dependent part
6300of the assembler.
6301
6302@table @code
6303
6304@item char *frag_more(int bytes)
6305This function allocates @var{bytes} more bytes in the current
6306frag (or starts a new frag, if it can't expand the current frag
6307any more.) for you to store some object-file bytes in. It
6308returns a pointer to the bytes, ready for you to store data in.
6309
6310@item void fix_new(fragS *frag, int where, short size, symbolS *add_symbol, symbolS *sub_symbol, long offset, int pcrel)
6311This function stores a relocation fixup to be acted on later.
6312@var{frag} points to the frag the relocation belongs in;
6313@var{where} is the location within the frag where the relocation begins;
6314@var{size} is the size of the relocation, and is usually 1 (a single byte),
6315 2 (sixteen bits), or 4 (a longword).
6316The value @var{add_symbol} @minus{} @var{sub_symbol} + @var{offset}, is added to the byte(s)
09352a5d 6317at _0__@var{frag->literal[where]}_1__. If @var{pcrel} is non-zero, the address of the
93b45514
RP
6318location is subtracted from the result. A relocation entry is also added
6319to the @file{a.out} file. @var{add_symbol}, @var{sub_symbol}, and/or
6320@var{offset} may be NULL.@refill
6321
6322@item char *frag_var(relax_stateT type, int max_chars, int var,
6323@code{relax_substateT subtype, symbolS *symbol, char *opcode)}
6324This function creates a machine-dependent frag of type @var{type}
6325(usually @code{rs_machine_dependent}).
6326@var{max_chars} is the maximum size in bytes that the frag may grow by;
6327@var{var} is the current size of the variable end of the frag;
6328@var{subtype} is the sub-type of the frag. The sub-type is used to index into
6329@var{md_relax_table[]} during @code{relaxation}.
6330@var{symbol} is the symbol whose value should be used to when relax-ing this frag.
6331@var{opcode} points into a byte whose value may have to be modified if the
6332addressing mode used by this frag changes. It typically points into the
6333@var{fr_literal[]} of the previous frag, and is used to point to a location
6334that @code{md_convert_frag()}, may have to change.@refill
6335
6336@item void frag_wane(fragS *fragPTR)
6337This function is useful from within @code{md_convert_frag}. It
6338changes a frag to type rs_fill, and sets the variable-sized
6339piece of the frag to zero. The frag will never change in size
6340again.
6341
6342@item segT expression(expressionS *retval)
6343(@var{segT} is defined in @file{as.h}; @var{expressionS} is defined in @file{expr.h})
6344This function parses the string pointed to by the external char
24b1493d 6345pointer @var{input_line_pointer}, and returns the section-type
93b45514
RP
6346of the expression. It also stores the results in the
6347@var{expressionS} pointed to by @var{retval}.
6348@var{input_line_pointer} is advanced to point past the end of
6349the expression. (@var{input_line_pointer} is used by other
6350parts of the assembler. If you modify it, be sure to restore
6351it to its original value.)
6352
6353@item as_warn(char *message,@dots{})
6354If warning messages are disabled, this function does nothing.
6355Otherwise, it prints out the current file name, and the current
6356line number, then uses @code{fprintf} to print the
6357@var{message} and any arguments it was passed.
6358
6359@item as_bad(char *message,@dots{})
d0281557
RP
6360This function should be called when @code{_AS__} encounters
6361conditions that are bad enough that @code{_AS__} should not
93b45514
RP
6362produce an object file, but should continue reading input and
6363printing warning and bad error messages.
6364
6365@item as_fatal(char *message,@dots{})
6366This function prints out the current file name and line number,
6367prints the word @samp{FATAL:}, then uses @code{fprintf} to
6368print the @var{message} and any arguments it was passed. Then
6369the assembler exits. This function should only be used for
6370serious, unrecoverable errors.
6371
6372@item void float_const(int float_type)
6373This function reads floating-point constants from the current
6374input line, and calls @code{md_atof} to assemble them. It is
6375useful as the function to call for the directives
6376@samp{.single}, @samp{.double}, @samp{.float}, etc.
6377@var{float_type} must be a character from @var{FLT_CHARS}.
6378
6379@item void demand_empty_rest_of_line(void);
6380This function can be used by machine-dependent directives to
6381make sure the rest of the input line is empty. It prints a
6382warning message if there are additional characters on the line.
6383
6384@item long int get_absolute_expression(void)
6385This function can be used by machine-dependent directives to
6386read an absolute number from the current input line. It
6387returns the result. If it isn't given an absolute expression,
6388it prints a warning message and returns zero.
6389
6390@end table
6391
6392
6393@section The concept of Frags
6394
6395This assembler works to optimize the size of certain addressing
6396modes. (e.g. branch instructions) This means the size of many
6397pieces of object code cannot be determined until after assembly
6398is finished. (This means that the addresses of symbols cannot be
6399determined until assembly is finished.) In order to do this,
d0281557 6400@code{_AS__} stores the output bytes as @dfn{frags}.
93b45514
RP
6401
6402Here is the definition of a frag (from @file{as.h})
d0281557 6403@smallexample
93b45514
RP
6404struct frag
6405@{
6406 long int fr_fix;
6407 long int fr_var;
6408 relax_stateT fr_type;
6409 relax_substateT fr_substate;
6410 unsigned long fr_address;
6411 long int fr_offset;
6412 struct symbol *fr_symbol;
6413 char *fr_opcode;
6414 struct frag *fr_next;
6415 char fr_literal[];
6416@}
d0281557 6417@end smallexample
93b45514
RP
6418
6419@table @var
6420@item fr_fix
6421is the size of the fixed-size piece of the frag.
6422
6423@item fr_var
6424is the maximum (?) size of the variable-sized piece of the frag.
6425
6426@item fr_type
6427is the type of the frag.
6428Current types are:
6429rs_fill
6430rs_align
6431rs_org
6432rs_machine_dependent
6433
6434@item fr_substate
6435This stores the type of machine-dependent frag this is. (what
6436kind of addressing mode is being used, and what size is being
6437tried/will fit/etc.
6438
6439@item fr_address
6440@var{fr_address} is only valid after relaxation is finished.
6441Before relaxation, the only way to store an address is (pointer
6442to frag containing the address) plus (offset into the frag).
6443
6444@item fr_offset
6445This contains a number, whose meaning depends on the type of
6446the frag.
6447for machine_dependent frags, this contains the offset from
6448fr_symbol that the frag wants to go to. Thus, for branch
6449instructions it is usually zero. (unless the instruction was
6450@samp{jba foo+12} or something like that.)
6451
6452@item fr_symbol
6453for machine_dependent frags, this points to the symbol the frag
6454needs to reach.
6455
6456@item fr_opcode
6457This points to the location in the frag (or in a previous frag)
6458of the opcode for the instruction that caused this to be a frag.
6459@var{fr_opcode} is needed if the actual opcode must be changed
6460in order to use a different form of the addressing mode.
6461(For example, if a conditional branch only comes in size tiny,
6462a large-size branch could be implemented by reversing the sense
6463of the test, and turning it into a tiny branch over a large jump.
6464This would require changing the opcode.)
6465
6466@var{fr_literal} is a variable-size array that contains the
6467actual object bytes. A frag consists of a fixed size piece of
6468object data, (which may be zero bytes long), followed by a
6469piece of object data whose size may not have been determined
6470yet. Other information includes the type of the frag (which
d0281557 6471controls how it is relaxed),
93b45514
RP
6472
6473@item fr_next
6474This is the next frag in the singly-linked list. This is
6475usually only needed by the machine-independent part of
d0281557 6476@code{_AS__}.
93b45514
RP
6477
6478@end table
d0281557 6479_fi__(0)
47342e8f 6480
242d9c06 6481@node Copying
47342e8f 6482@unnumbered GNU GENERAL PUBLIC LICENSE
66b818fb
RP
6483
6484@cindex license
6485@cindex GPL
6486@cindex copying @code{_AS__}
24b1493d 6487@center Version 2, June 1991
47342e8f
RP
6488
6489@display
24b1493d 6490Copyright @copyright{} 1989, 1991 Free Software Foundation, Inc.
47342e8f
RP
6491675 Mass Ave, Cambridge, MA 02139, USA
6492
6493Everyone is permitted to copy and distribute verbatim copies
6494of this license document, but changing it is not allowed.
6495@end display
6496
6497@unnumberedsec Preamble
6498
24b1493d
RP
6499 The licenses for most software are designed to take away your
6500freedom to share and change it. By contrast, the GNU General Public
47342e8f 6501License is intended to guarantee your freedom to share and change free
24b1493d
RP
6502software---to make sure the software is free for all its users. This
6503General Public License applies to most of the Free Software
6504Foundation's software and to any other program whose authors commit to
6505using it. (Some other Free Software Foundation software is covered by
6506the GNU Library General Public License instead.) You can apply it to
6507your programs, too.
47342e8f
RP
6508
6509 When we speak of free software, we are referring to freedom, not
24b1493d
RP
6510price. Our General Public Licenses are designed to make sure that you
6511have the freedom to distribute copies of free software (and charge for
6512this service if you wish), that you receive source code or can get it
6513if you want it, that you can change the software or use pieces of it
6514in new free programs; and that you know you can do these things.
47342e8f
RP
6515
6516 To protect your rights, we need to make restrictions that forbid
6517anyone to deny you these rights or to ask you to surrender the rights.
6518These restrictions translate to certain responsibilities for you if you
6519distribute copies of the software, or if you modify it.
6520
24b1493d 6521 For example, if you distribute copies of such a program, whether
47342e8f
RP
6522gratis or for a fee, you must give the recipients all the rights that
6523you have. You must make sure that they, too, receive or can get the
24b1493d
RP
6524source code. And you must show them these terms so they know their
6525rights.
47342e8f
RP
6526
6527 We protect your rights with two steps: (1) copyright the software, and
6528(2) offer you this license which gives you legal permission to copy,
6529distribute and/or modify the software.
6530
6531 Also, for each author's protection and ours, we want to make certain
6532that everyone understands that there is no warranty for this free
6533software. If the software is modified by someone else and passed on, we
6534want its recipients to know that what they have is not the original, so
6535that any problems introduced by others will not reflect on the original
6536authors' reputations.
6537
24b1493d
RP
6538 Finally, any free program is threatened constantly by software
6539patents. We wish to avoid the danger that redistributors of a free
6540program will individually obtain patent licenses, in effect making the
6541program proprietary. To prevent this, we have made it clear that any
6542patent must be licensed for everyone's free use or not licensed at all.
6543
47342e8f
RP
6544 The precise terms and conditions for copying, distribution and
6545modification follow.
6546
6547@iftex
24b1493d 6548@unnumberedsec TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
47342e8f
RP
6549@end iftex
6550@ifinfo
24b1493d 6551@center TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
47342e8f
RP
6552@end ifinfo
6553
6554@enumerate
6555@item
24b1493d
RP
6556This License applies to any program or other work which contains
6557a notice placed by the copyright holder saying it may be distributed
6558under the terms of this General Public License. The ``Program'', below,
6559refers to any such program or work, and a ``work based on the Program''
6560means either the Program or any derivative work under copyright law:
6561that is to say, a work containing the Program or a portion of it,
6562either verbatim or with modifications and/or translated into another
6563language. (Hereinafter, translation is included without limitation in
6564the term ``modification''.) Each licensee is addressed as ``you''.
6565
6566Activities other than copying, distribution and modification are not
6567covered by this License; they are outside its scope. The act of
6568running the Program is not restricted, and the output from the Program
6569is covered only if its contents constitute a work based on the
6570Program (independent of having been made by running the Program).
6571Whether that is true depends on what the Program does.
47342e8f
RP
6572
6573@item
24b1493d
RP
6574You may copy and distribute verbatim copies of the Program's
6575source code as you receive it, in any medium, provided that you
6576conspicuously and appropriately publish on each copy an appropriate
6577copyright notice and disclaimer of warranty; keep intact all the
6578notices that refer to this License and to the absence of any warranty;
6579and give any other recipients of the Program a copy of this License
6580along with the Program.
47342e8f 6581
24b1493d
RP
6582You may charge a fee for the physical act of transferring a copy, and
6583you may at your option offer warranty protection in exchange for a fee.
47342e8f 6584
47342e8f 6585@item
24b1493d
RP
6586You may modify your copy or copies of the Program or any portion
6587of it, thus forming a work based on the Program, and copy and
6588distribute such modifications or work under the terms of Section 1
6589above, provided that you also meet all of these conditions:
47342e8f 6590
66b818fb 6591@enumerate a
47342e8f 6592@item
24b1493d
RP
6593You must cause the modified files to carry prominent notices
6594stating that you changed the files and the date of any change.
47342e8f
RP
6595
6596@item
24b1493d
RP
6597You must cause any work that you distribute or publish, that in
6598whole or in part contains or is derived from the Program or any
6599part thereof, to be licensed as a whole at no charge to all third
6600parties under the terms of this License.
47342e8f
RP
6601
6602@item
24b1493d
RP
6603If the modified program normally reads commands interactively
6604when run, you must cause it, when started running for such
6605interactive use in the most ordinary way, to print or display an
6606announcement including an appropriate copyright notice and a
6607notice that there is no warranty (or else, saying that you provide
6608a warranty) and that users may redistribute the program under
6609these conditions, and telling the user how to view a copy of this
6610License. (Exception: if the Program itself is interactive but
6611does not normally print such an announcement, your work based on
6612the Program is not required to print an announcement.)
66b818fb 6613@end enumerate
24b1493d
RP
6614
6615These requirements apply to the modified work as a whole. If
6616identifiable sections of that work are not derived from the Program,
6617and can be reasonably considered independent and separate works in
6618themselves, then this License, and its terms, do not apply to those
6619sections when you distribute them as separate works. But when you
6620distribute the same sections as part of a whole which is a work based
6621on the Program, the distribution of the whole must be on the terms of
6622this License, whose permissions for other licensees extend to the
6623entire whole, and thus to each and every part regardless of who wrote it.
6624
6625Thus, it is not the intent of this section to claim rights or contest
6626your rights to work written entirely by you; rather, the intent is to
6627exercise the right to control the distribution of derivative or
6628collective works based on the Program.
6629
6630In addition, mere aggregation of another work not based on the Program
6631with the Program (or with a work based on the Program) on a volume of
6632a storage or distribution medium does not bring the other work under
6633the scope of this License.
47342e8f
RP
6634
6635@item
24b1493d
RP
6636You may copy and distribute the Program (or a work based on it,
6637under Section 2) in object code or executable form under the terms of
6638Sections 1 and 2 above provided that you also do one of the following:
47342e8f 6639
66b818fb 6640@enumerate a
47342e8f 6641@item
24b1493d
RP
6642Accompany it with the complete corresponding machine-readable
6643source code, which must be distributed under the terms of Sections
66441 and 2 above on a medium customarily used for software interchange; or,
47342e8f
RP
6645
6646@item
24b1493d
RP
6647Accompany it with a written offer, valid for at least three
6648years, to give any third party, for a charge no more than your
6649cost of physically performing source distribution, a complete
6650machine-readable copy of the corresponding source code, to be
6651distributed under the terms of Sections 1 and 2 above on a medium
6652customarily used for software interchange; or,
47342e8f
RP
6653
6654@item
24b1493d
RP
6655Accompany it with the information you received as to the offer
6656to distribute corresponding source code. (This alternative is
47342e8f 6657allowed only for noncommercial distribution and only if you
24b1493d
RP
6658received the program in object code or executable form with such
6659an offer, in accord with Subsection b above.)
66b818fb 6660@end enumerate
24b1493d
RP
6661
6662The source code for a work means the preferred form of the work for
6663making modifications to it. For an executable work, complete source
6664code means all the source code for all modules it contains, plus any
6665associated interface definition files, plus the scripts used to
6666control compilation and installation of the executable. However, as a
6667special exception, the source code distributed need not include
6668anything that is normally distributed (in either source or binary
6669form) with the major components (compiler, kernel, and so on) of the
6670operating system on which the executable runs, unless that component
6671itself accompanies the executable.
6672
6673If distribution of executable or object code is made by offering
6674access to copy from a designated place, then offering equivalent
6675access to copy the source code from the same place counts as
6676distribution of the source code, even though third parties are not
6677compelled to copy the source along with the object code.
47342e8f
RP
6678
6679@item
24b1493d
RP
6680You may not copy, modify, sublicense, or distribute the Program
6681except as expressly provided under this License. Any attempt
6682otherwise to copy, modify, sublicense or distribute the Program is
6683void, and will automatically terminate your rights under this License.
6684However, parties who have received copies, or rights, from you under
6685this License will not have their licenses terminated so long as such
6686parties remain in full compliance.
47342e8f
RP
6687
6688@item
24b1493d
RP
6689You are not required to accept this License, since you have not
6690signed it. However, nothing else grants you permission to modify or
6691distribute the Program or its derivative works. These actions are
6692prohibited by law if you do not accept this License. Therefore, by
6693modifying or distributing the Program (or any work based on the
6694Program), you indicate your acceptance of this License to do so, and
6695all its terms and conditions for copying, distributing or modifying
6696the Program or works based on it.
47342e8f
RP
6697
6698@item
6699Each time you redistribute the Program (or any work based on the
24b1493d
RP
6700Program), the recipient automatically receives a license from the
6701original licensor to copy, distribute or modify the Program subject to
6702these terms and conditions. You may not impose any further
6703restrictions on the recipients' exercise of the rights granted herein.
6704You are not responsible for enforcing compliance by third parties to
6705this License.
6706
6707@item
6708If, as a consequence of a court judgment or allegation of patent
6709infringement or for any other reason (not limited to patent issues),
6710conditions are imposed on you (whether by court order, agreement or
6711otherwise) that contradict the conditions of this License, they do not
6712excuse you from the conditions of this License. If you cannot
6713distribute so as to satisfy simultaneously your obligations under this
6714License and any other pertinent obligations, then as a consequence you
6715may not distribute the Program at all. For example, if a patent
6716license would not permit royalty-free redistribution of the Program by
6717all those who receive copies directly or indirectly through you, then
6718the only way you could satisfy both it and this License would be to
6719refrain entirely from distribution of the Program.
6720
6721If any portion of this section is held invalid or unenforceable under
6722any particular circumstance, the balance of the section is intended to
6723apply and the section as a whole is intended to apply in other
6724circumstances.
6725
6726It is not the purpose of this section to induce you to infringe any
6727patents or other property right claims or to contest validity of any
6728such claims; this section has the sole purpose of protecting the
6729integrity of the free software distribution system, which is
6730implemented by public license practices. Many people have made
6731generous contributions to the wide range of software distributed
6732through that system in reliance on consistent application of that
6733system; it is up to the author/donor to decide if he or she is willing
6734to distribute software through any other system and a licensee cannot
6735impose that choice.
6736
6737This section is intended to make thoroughly clear what is believed to
6738be a consequence of the rest of this License.
6739
6740@item
6741If the distribution and/or use of the Program is restricted in
6742certain countries either by patents or by copyrighted interfaces, the
6743original copyright holder who places the Program under this License
6744may add an explicit geographical distribution limitation excluding
6745those countries, so that distribution is permitted only in or among
6746countries not thus excluded. In such case, this License incorporates
6747the limitation as if written in the body of this License.
47342e8f
RP
6748
6749@item
6750The Free Software Foundation may publish revised and/or new versions
6751of the General Public License from time to time. Such new versions will
6752be similar in spirit to the present version, but may differ in detail to
6753address new problems or concerns.
6754
6755Each version is given a distinguishing version number. If the Program
24b1493d 6756specifies a version number of this License which applies to it and ``any
47342e8f
RP
6757later version'', you have the option of following the terms and conditions
6758either of that version or of any later version published by the Free
6759Software Foundation. If the Program does not specify a version number of
24b1493d 6760this License, you may choose any version ever published by the Free Software
47342e8f
RP
6761Foundation.
6762
6763@item
6764If you wish to incorporate parts of the Program into other free
6765programs whose distribution conditions are different, write to the author
6766to ask for permission. For software which is copyrighted by the Free
6767Software Foundation, write to the Free Software Foundation; we sometimes
6768make exceptions for this. Our decision will be guided by the two goals
6769of preserving the free status of all derivatives of our free software and
6770of promoting the sharing and reuse of software generally.
93b45514 6771
93b45514 6772@iftex
47342e8f 6773@heading NO WARRANTY
93b45514 6774@end iftex
47342e8f
RP
6775@ifinfo
6776@center NO WARRANTY
6777@end ifinfo
6778
6779@item
6780BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
6781FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
6782OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
6783PROVIDE THE PROGRAM ``AS IS'' WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
6784OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
6785MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
6786TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
6787PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
6788REPAIR OR CORRECTION.
6789
6790@item
24b1493d
RP
6791IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
6792WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
47342e8f 6793REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
24b1493d
RP
6794INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
6795OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
6796TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
6797YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
6798PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
6799POSSIBILITY OF SUCH DAMAGES.
47342e8f
RP
6800@end enumerate
6801
6802@iftex
6803@heading END OF TERMS AND CONDITIONS
6804@end iftex
6805@ifinfo
6806@center END OF TERMS AND CONDITIONS
6807@end ifinfo
6808
6809@page
d0281557 6810@unnumberedsec Applying These Terms to Your New Programs
47342e8f
RP
6811
6812 If you develop a new program, and you want it to be of the greatest
24b1493d
RP
6813possible use to the public, the best way to achieve this is to make it
6814free software which everyone can redistribute and change under these terms.
47342e8f 6815
24b1493d
RP
6816 To do so, attach the following notices to the program. It is safest
6817to attach them to the start of each source file to most effectively
6818convey the exclusion of warranty; and each file should have at least
6819the ``copyright'' line and a pointer to where the full notice is found.
47342e8f
RP
6820
6821@smallexample
24b1493d 6822@var{one line to give the program's name and an idea of what it does.}
47342e8f
RP
6823Copyright (C) 19@var{yy} @var{name of author}
6824
24b1493d
RP
6825This program is free software; you can redistribute it and/or
6826modify it under the terms of the GNU General Public License
6827as published by the Free Software Foundation; either version 2
6828of the License, or (at your option) any later version.
47342e8f
RP
6829
6830This program is distributed in the hope that it will be useful,
6831but WITHOUT ANY WARRANTY; without even the implied warranty of
6832MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
6833GNU General Public License for more details.
6834
6835You should have received a copy of the GNU General Public License
24b1493d
RP
6836along with this program; if not, write to the
6837Free Software Foundation, Inc., 675 Mass Ave,
6838Cambridge, MA 02139, USA.
47342e8f
RP
6839@end smallexample
6840
6841Also add information on how to contact you by electronic and paper mail.
6842
6843If the program is interactive, make it output a short notice like this
6844when it starts in an interactive mode:
6845
6846@smallexample
6847Gnomovision version 69, Copyright (C) 19@var{yy} @var{name of author}
24b1493d
RP
6848Gnomovision comes with ABSOLUTELY NO WARRANTY; for details
6849type `show w'. This is free software, and you are welcome
6850to redistribute it under certain conditions; type `show c'
6851for details.
47342e8f
RP
6852@end smallexample
6853
24b1493d
RP
6854The hypothetical commands @samp{show w} and @samp{show c} should show
6855the appropriate parts of the General Public License. Of course, the
6856commands you use may be called something other than @samp{show w} and
6857@samp{show c}; they could even be mouse-clicks or menu items---whatever
6858suits your program.
47342e8f
RP
6859
6860You should also get your employer (if you work as a programmer) or your
6861school, if any, to sign a ``copyright disclaimer'' for the program, if
b50e59fe 6862necessary. Here is a sample; alter the names:
47342e8f 6863
f4335d56 6864@smallexample
24b1493d
RP
6865Yoyodyne, Inc., hereby disclaims all copyright interest in
6866the program `Gnomovision' (which makes passes at compilers)
6867written by James Hacker.
47342e8f
RP
6868
6869@var{signature of Ty Coon}, 1 April 1989
6870Ty Coon, President of Vice
f4335d56 6871@end smallexample
47342e8f 6872
24b1493d
RP
6873This General Public License does not permit incorporating your program into
6874proprietary programs. If your program is a subroutine library, you may
6875consider it more useful to permit linking proprietary applications with the
6876library. If this is what you want to do, use the GNU Library General
6877Public License instead of this License.
47342e8f 6878
242d9c06 6879@node Index
66b818fb
RP
6880@unnumbered Index
6881
6882@printindex cp
6883
93b45514
RP
6884@summarycontents
6885@contents
6886@bye
This page took 0.387374 seconds and 4 git commands to generate.