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