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