]> rtime.felk.cvut.cz Git - fpga/lx-cpu1/binutils-tumbl.git/blob - gas/doc/as.info
bfd/
[fpga/lx-cpu1/binutils-tumbl.git] / gas / doc / as.info
1 This is as.info, produced by makeinfo version 4.8 from as.texinfo.
2
3 INFO-DIR-SECTION Software development
4 START-INFO-DIR-ENTRY
5 * As: (as).                     The GNU assembler.
6 * Gas: (as).                    The GNU assembler.
7 END-INFO-DIR-ENTRY
8
9    This file documents the GNU Assembler "as".
10
11    Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
12 2000, 2001, 2002, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
13 Foundation, Inc.
14
15    Permission is granted to copy, distribute and/or modify this document
16 under the terms of the GNU Free Documentation License, Version 1.3 or
17 any later version published by the Free Software Foundation; with no
18 Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
19 Texts.  A copy of the license is included in the section entitled "GNU
20 Free Documentation License".
21
22 \1f
23 File: as.info,  Node: Top,  Next: Overview,  Up: (dir)
24
25 Using as
26 ********
27
28 This file is a user guide to the GNU assembler `as' (GNU Binutils)
29 version 2.23.2.
30
31    This document is distributed under the terms of the GNU Free
32 Documentation License.  A copy of the license is included in the
33 section entitled "GNU Free Documentation License".
34
35 * Menu:
36
37 * Overview::                    Overview
38 * Invoking::                    Command-Line Options
39 * Syntax::                      Syntax
40 * Sections::                    Sections and Relocation
41 * Symbols::                     Symbols
42 * Expressions::                 Expressions
43 * Pseudo Ops::                  Assembler Directives
44
45 * Object Attributes::           Object Attributes
46 * Machine Dependencies::        Machine Dependent Features
47 * Reporting Bugs::              Reporting Bugs
48 * Acknowledgements::            Who Did What
49 * GNU Free Documentation License::  GNU Free Documentation License
50 * AS Index::                    AS Index
51
52 \1f
53 File: as.info,  Node: Overview,  Next: Invoking,  Prev: Top,  Up: Top
54
55 1 Overview
56 **********
57
58 Here is a brief summary of how to invoke `as'.  For details, see *Note
59 Command-Line Options: Invoking.
60
61      as [-a[cdghlns][=FILE]] [-alternate] [-D]
62       [-compress-debug-sections]  [-nocompress-debug-sections]
63       [-debug-prefix-map OLD=NEW]
64       [-defsym SYM=VAL] [-f] [-g] [-gstabs]
65       [-gstabs+] [-gdwarf-2] [-help] [-I DIR] [-J]
66       [-K] [-L] [-listing-lhs-width=NUM]
67       [-listing-lhs-width2=NUM] [-listing-rhs-width=NUM]
68       [-listing-cont-lines=NUM] [-keep-locals] [-o
69       OBJFILE] [-R] [-reduce-memory-overheads] [-statistics]
70       [-v] [-version] [-version] [-W] [-warn]
71       [-fatal-warnings] [-w] [-x] [-Z] [@FILE]
72       [-size-check=[error|warning]]
73       [-target-help] [TARGET-OPTIONS]
74       [-|FILES ...]
75
76      _Target AArch64 options:_
77         [-EB|-EL]
78
79      _Target Alpha options:_
80         [-mCPU]
81         [-mdebug | -no-mdebug]
82         [-replace | -noreplace]
83         [-relax] [-g] [-GSIZE]
84         [-F] [-32addr]
85
86      _Target ARC options:_
87         [-marc[5|6|7|8]]
88         [-EB|-EL]
89
90      _Target ARM options:_
91         [-mcpu=PROCESSOR[+EXTENSION...]]
92         [-march=ARCHITECTURE[+EXTENSION...]]
93         [-mfpu=FLOATING-POINT-FORMAT]
94         [-mfloat-abi=ABI]
95         [-meabi=VER]
96         [-mthumb]
97         [-EB|-EL]
98         [-mapcs-32|-mapcs-26|-mapcs-float|
99          -mapcs-reentrant]
100         [-mthumb-interwork] [-k]
101
102      _Target Blackfin options:_
103         [-mcpu=PROCESSOR[-SIREVISION]]
104         [-mfdpic]
105         [-mno-fdpic]
106         [-mnopic]
107
108      _Target CRIS options:_
109         [-underscore | -no-underscore]
110         [-pic] [-N]
111         [-emulation=criself | -emulation=crisaout]
112         [-march=v0_v10 | -march=v10 | -march=v32 | -march=common_v10_v32]
113
114      _Target D10V options:_
115         [-O]
116
117      _Target D30V options:_
118         [-O|-n|-N]
119
120      _Target EPIPHANY options:_
121         [-mepiphany|-mepiphany16]
122
123      _Target H8/300 options:_
124         [-h-tick-hex]
125
126      _Target i386 options:_
127         [-32|-n32|-64] [-n]
128         [-march=CPU[+EXTENSION...]] [-mtune=CPU]
129
130      _Target i960 options:_
131         [-ACA|-ACA_A|-ACB|-ACC|-AKA|-AKB|
132          -AKC|-AMC]
133         [-b] [-no-relax]
134
135      _Target IA-64 options:_
136         [-mconstant-gp|-mauto-pic]
137         [-milp32|-milp64|-mlp64|-mp64]
138         [-mle|mbe]
139         [-mtune=itanium1|-mtune=itanium2]
140         [-munwind-check=warning|-munwind-check=error]
141         [-mhint.b=ok|-mhint.b=warning|-mhint.b=error]
142         [-x|-xexplicit] [-xauto] [-xdebug]
143
144      _Target IP2K options:_
145         [-mip2022|-mip2022ext]
146
147      _Target M32C options:_
148         [-m32c|-m16c] [-relax] [-h-tick-hex]
149
150      _Target M32R options:_
151         [-m32rx|-[no-]warn-explicit-parallel-conflicts|
152         -W[n]p]
153
154      _Target M680X0 options:_
155         [-l] [-m68000|-m68010|-m68020|...]
156
157      _Target M68HC11 options:_
158         [-m68hc11|-m68hc12|-m68hcs12|-mm9s12x|-mm9s12xg]
159         [-mshort|-mlong]
160         [-mshort-double|-mlong-double]
161         [-force-long-branches] [-short-branches]
162         [-strict-direct-mode] [-print-insn-syntax]
163         [-print-opcodes] [-generate-example]
164
165      _Target MCORE options:_
166         [-jsri2bsr] [-sifilter] [-relax]
167         [-mcpu=[210|340]]
168      _Target MICROBLAZE options:_
169
170      _Target MIPS options:_
171         [-nocpp] [-EL] [-EB] [-O[OPTIMIZATION LEVEL]]
172         [-g[DEBUG LEVEL]] [-G NUM] [-KPIC] [-call_shared]
173         [-non_shared] [-xgot [-mvxworks-pic]
174         [-mabi=ABI] [-32] [-n32] [-64] [-mfp32] [-mgp32]
175         [-march=CPU] [-mtune=CPU] [-mips1] [-mips2]
176         [-mips3] [-mips4] [-mips5] [-mips32] [-mips32r2]
177         [-mips64] [-mips64r2]
178         [-construct-floats] [-no-construct-floats]
179         [-trap] [-no-break] [-break] [-no-trap]
180         [-mips16] [-no-mips16]
181         [-mmicromips] [-mno-micromips]
182         [-msmartmips] [-mno-smartmips]
183         [-mips3d] [-no-mips3d]
184         [-mdmx] [-no-mdmx]
185         [-mdsp] [-mno-dsp]
186         [-mdspr2] [-mno-dspr2]
187         [-mmt] [-mno-mt]
188         [-mmcu] [-mno-mcu]
189         [-mfix7000] [-mno-fix7000]
190         [-mfix-vr4120] [-mno-fix-vr4120]
191         [-mfix-vr4130] [-mno-fix-vr4130]
192         [-mdebug] [-no-mdebug]
193         [-mpdr] [-mno-pdr]
194
195      _Target MMIX options:_
196         [-fixed-special-register-names] [-globalize-symbols]
197         [-gnu-syntax] [-relax] [-no-predefined-symbols]
198         [-no-expand] [-no-merge-gregs] [-x]
199         [-linker-allocated-gregs]
200
201      _Target PDP11 options:_
202         [-mpic|-mno-pic] [-mall] [-mno-extensions]
203         [-mEXTENSION|-mno-EXTENSION]
204         [-mCPU] [-mMACHINE]
205
206      _Target picoJava options:_
207         [-mb|-me]
208
209      _Target PowerPC options:_
210         [-a32|-a64]
211         [-mpwrx|-mpwr2|-mpwr|-m601|-mppc|-mppc32|-m603|-m604|-m403|-m405|
212          -m440|-m464|-m476|-m7400|-m7410|-m7450|-m7455|-m750cl|-mppc64|
213          -m620|-me500|-e500x2|-me500mc|-me500mc64|-me5500|-me6500|-mppc64bridge|
214          -mbooke|-mpower4|-mpr4|-mpower5|-mpwr5|-mpwr5x|-mpower6|-mpwr6|
215          -mpower7|-mpw7|-ma2|-mcell|-mspe|-mtitan|-me300|-mcom]
216         [-many] [-maltivec|-mvsx]
217         [-mregnames|-mno-regnames]
218         [-mrelocatable|-mrelocatable-lib|-K PIC] [-memb]
219         [-mlittle|-mlittle-endian|-le|-mbig|-mbig-endian|-be]
220         [-msolaris|-mno-solaris]
221         [-nops=COUNT]
222
223      _Target RX options:_
224         [-mlittle-endian|-mbig-endian]
225         [-m32bit-ints|-m16bit-ints]
226         [-m32bit-doubles|-m64bit-doubles]
227
228      _Target s390 options:_
229         [-m31|-m64] [-mesa|-mzarch] [-march=CPU]
230         [-mregnames|-mno-regnames]
231         [-mwarn-areg-zero]
232
233      _Target SCORE options:_
234         [-EB][-EL][-FIXDD][-NWARN]
235         [-SCORE5][-SCORE5U][-SCORE7][-SCORE3]
236         [-march=score7][-march=score3]
237         [-USE_R1][-KPIC][-O0][-G NUM][-V]
238
239      _Target SPARC options:_
240         [-Av6|-Av7|-Av8|-Asparclet|-Asparclite
241          -Av8plus|-Av8plusa|-Av9|-Av9a]
242         [-xarch=v8plus|-xarch=v8plusa] [-bump]
243         [-32|-64]
244
245      _Target TIC54X options:_
246       [-mcpu=54[123589]|-mcpu=54[56]lp] [-mfar-mode|-mf]
247       [-merrors-to-file <FILENAME>|-me <FILENAME>]
248
249
250      _Target TIC6X options:_
251         [-march=ARCH] [-mbig-endian|-mlittle-endian]
252         [-mdsbt|-mno-dsbt] [-mpid=no|-mpid=near|-mpid=far]
253         [-mpic|-mno-pic]
254
255      _Target TILE-Gx options:_
256         [-m32|-m64][-EB][-EL]
257
258
259      _Target Xtensa options:_
260       [-[no-]text-section-literals] [-[no-]absolute-literals]
261       [-[no-]target-align] [-[no-]longcalls]
262       [-[no-]transform]
263       [-rename-section OLDNAME=NEWNAME]
264
265
266      _Target Z80 options:_
267        [-z80] [-r800]
268        [ -ignore-undocumented-instructions] [-Wnud]
269        [ -ignore-unportable-instructions] [-Wnup]
270        [ -warn-undocumented-instructions] [-Wud]
271        [ -warn-unportable-instructions] [-Wup]
272        [ -forbid-undocumented-instructions] [-Fud]
273        [ -forbid-unportable-instructions] [-Fup]
274
275 `@FILE'
276      Read command-line options from FILE.  The options read are
277      inserted in place of the original @FILE option.  If FILE does not
278      exist, or cannot be read, then the option will be treated
279      literally, and not removed.
280
281      Options in FILE are separated by whitespace.  A whitespace
282      character may be included in an option by surrounding the entire
283      option in either single or double quotes.  Any character
284      (including a backslash) may be included by prefixing the character
285      to be included with a backslash.  The FILE may itself contain
286      additional @FILE options; any such options will be processed
287      recursively.
288
289 `-a[cdghlmns]'
290      Turn on listings, in any of a variety of ways:
291
292     `-ac'
293           omit false conditionals
294
295     `-ad'
296           omit debugging directives
297
298     `-ag'
299           include general information, like as version and options
300           passed
301
302     `-ah'
303           include high-level source
304
305     `-al'
306           include assembly
307
308     `-am'
309           include macro expansions
310
311     `-an'
312           omit forms processing
313
314     `-as'
315           include symbols
316
317     `=file'
318           set the name of the listing file
319
320      You may combine these options; for example, use `-aln' for assembly
321      listing without forms processing.  The `=file' option, if used,
322      must be the last one.  By itself, `-a' defaults to `-ahls'.
323
324 `--alternate'
325      Begin in alternate macro mode.  *Note `.altmacro': Altmacro.
326
327 `--compress-debug-sections'
328      Compress DWARF debug sections using zlib.  The debug sections are
329      renamed to begin with `.zdebug', and the resulting object file may
330      not be compatible with older linkers and object file utilities.
331
332 `--nocompress-debug-sections'
333      Do not compress DWARF debug sections.  This is the default.
334
335 `-D'
336      Ignored.  This option is accepted for script compatibility with
337      calls to other assemblers.
338
339 `--debug-prefix-map OLD=NEW'
340      When assembling files in directory `OLD', record debugging
341      information describing them as in `NEW' instead.
342
343 `--defsym SYM=VALUE'
344      Define the symbol SYM to be VALUE before assembling the input file.
345      VALUE must be an integer constant.  As in C, a leading `0x'
346      indicates a hexadecimal value, and a leading `0' indicates an octal
347      value.  The value of the symbol can be overridden inside a source
348      file via the use of a `.set' pseudo-op.
349
350 `-f'
351      "fast"--skip whitespace and comment preprocessing (assume source is
352      compiler output).
353
354 `-g'
355 `--gen-debug'
356      Generate debugging information for each assembler source line
357      using whichever debug format is preferred by the target.  This
358      currently means either STABS, ECOFF or DWARF2.
359
360 `--gstabs'
361      Generate stabs debugging information for each assembler line.  This
362      may help debugging assembler code, if the debugger can handle it.
363
364 `--gstabs+'
365      Generate stabs debugging information for each assembler line, with
366      GNU extensions that probably only gdb can handle, and that could
367      make other debuggers crash or refuse to read your program.  This
368      may help debugging assembler code.  Currently the only GNU
369      extension is the location of the current working directory at
370      assembling time.
371
372 `--gdwarf-2'
373      Generate DWARF2 debugging information for each assembler line.
374      This may help debugging assembler code, if the debugger can handle
375      it.  Note--this option is only supported by some targets, not all
376      of them.
377
378 `--size-check=error'
379 `--size-check=warning'
380      Issue an error or warning for invalid ELF .size directive.
381
382 `--help'
383      Print a summary of the command line options and exit.
384
385 `--target-help'
386      Print a summary of all target specific options and exit.
387
388 `-I DIR'
389      Add directory DIR to the search list for `.include' directives.
390
391 `-J'
392      Don't warn about signed overflow.
393
394 `-K'
395      Issue warnings when difference tables altered for long
396      displacements.
397
398 `-L'
399 `--keep-locals'
400      Keep (in the symbol table) local symbols.  These symbols start with
401      system-specific local label prefixes, typically `.L' for ELF
402      systems or `L' for traditional a.out systems.  *Note Symbol
403      Names::.
404
405 `--listing-lhs-width=NUMBER'
406      Set the maximum width, in words, of the output data column for an
407      assembler listing to NUMBER.
408
409 `--listing-lhs-width2=NUMBER'
410      Set the maximum width, in words, of the output data column for
411      continuation lines in an assembler listing to NUMBER.
412
413 `--listing-rhs-width=NUMBER'
414      Set the maximum width of an input source line, as displayed in a
415      listing, to NUMBER bytes.
416
417 `--listing-cont-lines=NUMBER'
418      Set the maximum number of lines printed in a listing for a single
419      line of input to NUMBER + 1.
420
421 `-o OBJFILE'
422      Name the object-file output from `as' OBJFILE.
423
424 `-R'
425      Fold the data section into the text section.
426
427      Set the default size of GAS's hash tables to a prime number close
428      to NUMBER.  Increasing this value can reduce the length of time it
429      takes the assembler to perform its tasks, at the expense of
430      increasing the assembler's memory requirements.  Similarly
431      reducing this value can reduce the memory requirements at the
432      expense of speed.
433
434 `--reduce-memory-overheads'
435      This option reduces GAS's memory requirements, at the expense of
436      making the assembly processes slower.  Currently this switch is a
437      synonym for `--hash-size=4051', but in the future it may have
438      other effects as well.
439
440 `--statistics'
441      Print the maximum space (in bytes) and total time (in seconds)
442      used by assembly.
443
444 `--strip-local-absolute'
445      Remove local absolute symbols from the outgoing symbol table.
446
447 `-v'
448 `-version'
449      Print the `as' version.
450
451 `--version'
452      Print the `as' version and exit.
453
454 `-W'
455 `--no-warn'
456      Suppress warning messages.
457
458 `--fatal-warnings'
459      Treat warnings as errors.
460
461 `--warn'
462      Don't suppress warning messages or treat them as errors.
463
464 `-w'
465      Ignored.
466
467 `-x'
468      Ignored.
469
470 `-Z'
471      Generate an object file even after errors.
472
473 `-- | FILES ...'
474      Standard input, or source files to assemble.
475
476
477    *Note AArch64 Options::, for the options available when as is
478 configured for the 64-bit mode of the ARM Architecture (AArch64).
479
480    *Note Alpha Options::, for the options available when as is
481 configured for an Alpha processor.
482
483    The following options are available when as is configured for an ARC
484 processor.
485
486 `-marc[5|6|7|8]'
487      This option selects the core processor variant.
488
489 `-EB | -EL'
490      Select either big-endian (-EB) or little-endian (-EL) output.
491
492    The following options are available when as is configured for the ARM
493 processor family.
494
495 `-mcpu=PROCESSOR[+EXTENSION...]'
496      Specify which ARM processor variant is the target.
497
498 `-march=ARCHITECTURE[+EXTENSION...]'
499      Specify which ARM architecture variant is used by the target.
500
501 `-mfpu=FLOATING-POINT-FORMAT'
502      Select which Floating Point architecture is the target.
503
504 `-mfloat-abi=ABI'
505      Select which floating point ABI is in use.
506
507 `-mthumb'
508      Enable Thumb only instruction decoding.
509
510 `-mapcs-32 | -mapcs-26 | -mapcs-float | -mapcs-reentrant'
511      Select which procedure calling convention is in use.
512
513 `-EB | -EL'
514      Select either big-endian (-EB) or little-endian (-EL) output.
515
516 `-mthumb-interwork'
517      Specify that the code has been generated with interworking between
518      Thumb and ARM code in mind.
519
520 `-k'
521      Specify that PIC code has been generated.
522
523    *Note Blackfin Options::, for the options available when as is
524 configured for the Blackfin processor family.
525
526    See the info pages for documentation of the CRIS-specific options.
527
528    The following options are available when as is configured for a D10V
529 processor.
530 `-O'
531      Optimize output by parallelizing instructions.
532
533    The following options are available when as is configured for a D30V
534 processor.
535 `-O'
536      Optimize output by parallelizing instructions.
537
538 `-n'
539      Warn when nops are generated.
540
541 `-N'
542      Warn when a nop after a 32-bit multiply instruction is generated.
543
544    The following options are available when as is configured for the
545 Adapteva EPIPHANY series.
546
547    *Note Epiphany Options::, for the options available when as is
548 configured for an Epiphany processor.
549
550    *Note i386-Options::, for the options available when as is
551 configured for an i386 processor.
552
553    The following options are available when as is configured for the
554 Intel 80960 processor.
555
556 `-ACA | -ACA_A | -ACB | -ACC | -AKA | -AKB | -AKC | -AMC'
557      Specify which variant of the 960 architecture is the target.
558
559 `-b'
560      Add code to collect statistics about branches taken.
561
562 `-no-relax'
563      Do not alter compare-and-branch instructions for long
564      displacements; error if necessary.
565
566
567    The following options are available when as is configured for the
568 Ubicom IP2K series.
569
570 `-mip2022ext'
571      Specifies that the extended IP2022 instructions are allowed.
572
573 `-mip2022'
574      Restores the default behaviour, which restricts the permitted
575      instructions to just the basic IP2022 ones.
576
577
578    The following options are available when as is configured for the
579 Renesas M32C and M16C processors.
580
581 `-m32c'
582      Assemble M32C instructions.
583
584 `-m16c'
585      Assemble M16C instructions (the default).
586
587 `-relax'
588      Enable support for link-time relaxations.
589
590 `-h-tick-hex'
591      Support H'00 style hex constants in addition to 0x00 style.
592
593
594    The following options are available when as is configured for the
595 Renesas M32R (formerly Mitsubishi M32R) series.
596
597 `--m32rx'
598      Specify which processor in the M32R family is the target.  The
599      default is normally the M32R, but this option changes it to the
600      M32RX.
601
602 `--warn-explicit-parallel-conflicts or --Wp'
603      Produce warning messages when questionable parallel constructs are
604      encountered.
605
606 `--no-warn-explicit-parallel-conflicts or --Wnp'
607      Do not produce warning messages when questionable parallel
608      constructs are encountered.
609
610
611    The following options are available when as is configured for the
612 Motorola 68000 series.
613
614 `-l'
615      Shorten references to undefined symbols, to one word instead of
616      two.
617
618 `-m68000 | -m68008 | -m68010 | -m68020 | -m68030'
619 `| -m68040 | -m68060 | -m68302 | -m68331 | -m68332'
620 `| -m68333 | -m68340 | -mcpu32 | -m5200'
621      Specify what processor in the 68000 family is the target.  The
622      default is normally the 68020, but this can be changed at
623      configuration time.
624
625 `-m68881 | -m68882 | -mno-68881 | -mno-68882'
626      The target machine does (or does not) have a floating-point
627      coprocessor.  The default is to assume a coprocessor for 68020,
628      68030, and cpu32.  Although the basic 68000 is not compatible with
629      the 68881, a combination of the two can be specified, since it's
630      possible to do emulation of the coprocessor instructions with the
631      main processor.
632
633 `-m68851 | -mno-68851'
634      The target machine does (or does not) have a memory-management
635      unit coprocessor.  The default is to assume an MMU for 68020 and
636      up.
637
638
639    For details about the PDP-11 machine dependent features options, see
640 *Note PDP-11-Options::.
641
642 `-mpic | -mno-pic'
643      Generate position-independent (or position-dependent) code.  The
644      default is `-mpic'.
645
646 `-mall'
647 `-mall-extensions'
648      Enable all instruction set extensions.  This is the default.
649
650 `-mno-extensions'
651      Disable all instruction set extensions.
652
653 `-mEXTENSION | -mno-EXTENSION'
654      Enable (or disable) a particular instruction set extension.
655
656 `-mCPU'
657      Enable the instruction set extensions supported by a particular
658      CPU, and disable all other extensions.
659
660 `-mMACHINE'
661      Enable the instruction set extensions supported by a particular
662      machine model, and disable all other extensions.
663
664    The following options are available when as is configured for a
665 picoJava processor.
666
667 `-mb'
668      Generate "big endian" format output.
669
670 `-ml'
671      Generate "little endian" format output.
672
673
674    The following options are available when as is configured for the
675 Motorola 68HC11 or 68HC12 series.
676
677 `-m68hc11 | -m68hc12 | -m68hcs12 | -mm9s12x | -mm9s12xg'
678      Specify what processor is the target.  The default is defined by
679      the configuration option when building the assembler.
680
681 `--xgate-ramoffset'
682      Instruct the linker to offset RAM addresses from S12X address
683      space into XGATE address space.
684
685 `-mshort'
686      Specify to use the 16-bit integer ABI.
687
688 `-mlong'
689      Specify to use the 32-bit integer ABI.
690
691 `-mshort-double'
692      Specify to use the 32-bit double ABI.
693
694 `-mlong-double'
695      Specify to use the 64-bit double ABI.
696
697 `--force-long-branches'
698      Relative branches are turned into absolute ones. This concerns
699      conditional branches, unconditional branches and branches to a sub
700      routine.
701
702 `-S | --short-branches'
703      Do not turn relative branches into absolute ones when the offset
704      is out of range.
705
706 `--strict-direct-mode'
707      Do not turn the direct addressing mode into extended addressing
708      mode when the instruction does not support direct addressing mode.
709
710 `--print-insn-syntax'
711      Print the syntax of instruction in case of error.
712
713 `--print-opcodes'
714      Print the list of instructions with syntax and then exit.
715
716 `--generate-example'
717      Print an example of instruction for each possible instruction and
718      then exit.  This option is only useful for testing `as'.
719
720
721    The following options are available when `as' is configured for the
722 SPARC architecture:
723
724 `-Av6 | -Av7 | -Av8 | -Asparclet | -Asparclite'
725 `-Av8plus | -Av8plusa | -Av9 | -Av9a'
726      Explicitly select a variant of the SPARC architecture.
727
728      `-Av8plus' and `-Av8plusa' select a 32 bit environment.  `-Av9'
729      and `-Av9a' select a 64 bit environment.
730
731      `-Av8plusa' and `-Av9a' enable the SPARC V9 instruction set with
732      UltraSPARC extensions.
733
734 `-xarch=v8plus | -xarch=v8plusa'
735      For compatibility with the Solaris v9 assembler.  These options are
736      equivalent to -Av8plus and -Av8plusa, respectively.
737
738 `-bump'
739      Warn when the assembler switches to another architecture.
740
741    The following options are available when as is configured for the
742 'c54x architecture.
743
744 `-mfar-mode'
745      Enable extended addressing mode.  All addresses and relocations
746      will assume extended addressing (usually 23 bits).
747
748 `-mcpu=CPU_VERSION'
749      Sets the CPU version being compiled for.
750
751 `-merrors-to-file FILENAME'
752      Redirect error output to a file, for broken systems which don't
753      support such behaviour in the shell.
754
755    The following options are available when as is configured for a MIPS
756 processor.
757
758 `-G NUM'
759      This option sets the largest size of an object that can be
760      referenced implicitly with the `gp' register.  It is only accepted
761      for targets that use ECOFF format, such as a DECstation running
762      Ultrix.  The default value is 8.
763
764 `-EB'
765      Generate "big endian" format output.
766
767 `-EL'
768      Generate "little endian" format output.
769
770 `-mips1'
771 `-mips2'
772 `-mips3'
773 `-mips4'
774 `-mips5'
775 `-mips32'
776 `-mips32r2'
777 `-mips64'
778 `-mips64r2'
779      Generate code for a particular MIPS Instruction Set Architecture
780      level.  `-mips1' is an alias for `-march=r3000', `-mips2' is an
781      alias for `-march=r6000', `-mips3' is an alias for `-march=r4000'
782      and `-mips4' is an alias for `-march=r8000'.  `-mips5', `-mips32',
783      `-mips32r2', `-mips64', and `-mips64r2' correspond to generic
784      `MIPS V', `MIPS32', `MIPS32 Release 2', `MIPS64', and `MIPS64
785      Release 2' ISA processors, respectively.
786
787 `-march=CPU'
788      Generate code for a particular MIPS cpu.
789
790 `-mtune=CPU'
791      Schedule and tune for a particular MIPS cpu.
792
793 `-mfix7000'
794 `-mno-fix7000'
795      Cause nops to be inserted if the read of the destination register
796      of an mfhi or mflo instruction occurs in the following two
797      instructions.
798
799 `-mdebug'
800 `-no-mdebug'
801      Cause stabs-style debugging output to go into an ECOFF-style
802      .mdebug section instead of the standard ELF .stabs sections.
803
804 `-mpdr'
805 `-mno-pdr'
806      Control generation of `.pdr' sections.
807
808 `-mgp32'
809 `-mfp32'
810      The register sizes are normally inferred from the ISA and ABI, but
811      these flags force a certain group of registers to be treated as 32
812      bits wide at all times.  `-mgp32' controls the size of
813      general-purpose registers and `-mfp32' controls the size of
814      floating-point registers.
815
816 `-mips16'
817 `-no-mips16'
818      Generate code for the MIPS 16 processor.  This is equivalent to
819      putting `.set mips16' at the start of the assembly file.
820      `-no-mips16' turns off this option.
821
822 `-mmicromips'
823 `-mno-micromips'
824      Generate code for the microMIPS processor.  This is equivalent to
825      putting `.set micromips' at the start of the assembly file.
826      `-mno-micromips' turns off this option.  This is equivalent to
827      putting `.set nomicromips' at the start of the assembly file.
828
829 `-msmartmips'
830 `-mno-smartmips'
831      Enables the SmartMIPS extension to the MIPS32 instruction set.
832      This is equivalent to putting `.set smartmips' at the start of the
833      assembly file.  `-mno-smartmips' turns off this option.
834
835 `-mips3d'
836 `-no-mips3d'
837      Generate code for the MIPS-3D Application Specific Extension.
838      This tells the assembler to accept MIPS-3D instructions.
839      `-no-mips3d' turns off this option.
840
841 `-mdmx'
842 `-no-mdmx'
843      Generate code for the MDMX Application Specific Extension.  This
844      tells the assembler to accept MDMX instructions.  `-no-mdmx' turns
845      off this option.
846
847 `-mdsp'
848 `-mno-dsp'
849      Generate code for the DSP Release 1 Application Specific Extension.
850      This tells the assembler to accept DSP Release 1 instructions.
851      `-mno-dsp' turns off this option.
852
853 `-mdspr2'
854 `-mno-dspr2'
855      Generate code for the DSP Release 2 Application Specific Extension.
856      This option implies -mdsp.  This tells the assembler to accept DSP
857      Release 2 instructions.  `-mno-dspr2' turns off this option.
858
859 `-mmt'
860 `-mno-mt'
861      Generate code for the MT Application Specific Extension.  This
862      tells the assembler to accept MT instructions.  `-mno-mt' turns
863      off this option.
864
865 `-mmcu'
866 `-mno-mcu'
867      Generate code for the MCU Application Specific Extension.  This
868      tells the assembler to accept MCU instructions.  `-mno-mcu' turns
869      off this option.
870
871 `--construct-floats'
872 `--no-construct-floats'
873      The `--no-construct-floats' option disables the construction of
874      double width floating point constants by loading the two halves of
875      the value into the two single width floating point registers that
876      make up the double width register.  By default
877      `--construct-floats' is selected, allowing construction of these
878      floating point constants.
879
880 `--emulation=NAME'
881      This option causes `as' to emulate `as' configured for some other
882      target, in all respects, including output format (choosing between
883      ELF and ECOFF only), handling of pseudo-opcodes which may generate
884      debugging information or store symbol table information, and
885      default endianness.  The available configuration names are:
886      `mipsecoff', `mipself', `mipslecoff', `mipsbecoff', `mipslelf',
887      `mipsbelf'.  The first two do not alter the default endianness
888      from that of the primary target for which the assembler was
889      configured; the others change the default to little- or big-endian
890      as indicated by the `b' or `l' in the name.  Using `-EB' or `-EL'
891      will override the endianness selection in any case.
892
893      This option is currently supported only when the primary target
894      `as' is configured for is a MIPS ELF or ECOFF target.
895      Furthermore, the primary target or others specified with
896      `--enable-targets=...' at configuration time must include support
897      for the other format, if both are to be available.  For example,
898      the Irix 5 configuration includes support for both.
899
900      Eventually, this option will support more configurations, with more
901      fine-grained control over the assembler's behavior, and will be
902      supported for more processors.
903
904 `-nocpp'
905      `as' ignores this option.  It is accepted for compatibility with
906      the native tools.
907
908 `--trap'
909 `--no-trap'
910 `--break'
911 `--no-break'
912      Control how to deal with multiplication overflow and division by
913      zero.  `--trap' or `--no-break' (which are synonyms) take a trap
914      exception (and only work for Instruction Set Architecture level 2
915      and higher); `--break' or `--no-trap' (also synonyms, and the
916      default) take a break exception.
917
918 `-n'
919      When this option is used, `as' will issue a warning every time it
920      generates a nop instruction from a macro.
921
922    The following options are available when as is configured for an
923 MCore processor.
924
925 `-jsri2bsr'
926 `-nojsri2bsr'
927      Enable or disable the JSRI to BSR transformation.  By default this
928      is enabled.  The command line option `-nojsri2bsr' can be used to
929      disable it.
930
931 `-sifilter'
932 `-nosifilter'
933      Enable or disable the silicon filter behaviour.  By default this
934      is disabled.  The default can be overridden by the `-sifilter'
935      command line option.
936
937 `-relax'
938      Alter jump instructions for long displacements.
939
940 `-mcpu=[210|340]'
941      Select the cpu type on the target hardware.  This controls which
942      instructions can be assembled.
943
944 `-EB'
945      Assemble for a big endian target.
946
947 `-EL'
948      Assemble for a little endian target.
949
950
951    See the info pages for documentation of the MMIX-specific options.
952
953    *Note PowerPC-Opts::, for the options available when as is configured
954 for a PowerPC processor.
955
956    See the info pages for documentation of the RX-specific options.
957
958    The following options are available when as is configured for the
959 s390 processor family.
960
961 `-m31'
962 `-m64'
963      Select the word size, either 31/32 bits or 64 bits.
964
965 `-mesa'
966
967 `-mzarch'
968      Select the architecture mode, either the Enterprise System
969      Architecture (esa) or the z/Architecture mode (zarch).
970
971 `-march=PROCESSOR'
972      Specify which s390 processor variant is the target, `g6', `g6',
973      `z900', `z990', `z9-109', `z9-ec', or `z10'.
974
975 `-mregnames'
976 `-mno-regnames'
977      Allow or disallow symbolic names for registers.
978
979 `-mwarn-areg-zero'
980      Warn whenever the operand for a base or index register has been
981      specified but evaluates to zero.
982
983    *Note TIC6X Options::, for the options available when as is
984 configured for a TMS320C6000 processor.
985
986    *Note TILE-Gx Options::, for the options available when as is
987 configured for a TILE-Gx processor.
988
989    *Note Xtensa Options::, for the options available when as is
990 configured for an Xtensa processor.
991
992    The following options are available when as is configured for a Z80
993 family processor.
994 `-z80'
995      Assemble for Z80 processor.
996
997 `-r800'
998      Assemble for R800 processor.
999
1000 `-ignore-undocumented-instructions'
1001 `-Wnud'
1002      Assemble undocumented Z80 instructions that also work on R800
1003      without warning.
1004
1005 `-ignore-unportable-instructions'
1006 `-Wnup'
1007      Assemble all undocumented Z80 instructions without warning.
1008
1009 `-warn-undocumented-instructions'
1010 `-Wud'
1011      Issue a warning for undocumented Z80 instructions that also work
1012      on R800.
1013
1014 `-warn-unportable-instructions'
1015 `-Wup'
1016      Issue a warning for undocumented Z80 instructions that do not work
1017      on R800.
1018
1019 `-forbid-undocumented-instructions'
1020 `-Fud'
1021      Treat all undocumented instructions as errors.
1022
1023 `-forbid-unportable-instructions'
1024 `-Fup'
1025      Treat undocumented Z80 instructions that do not work on R800 as
1026      errors.
1027
1028 * Menu:
1029
1030 * Manual::                      Structure of this Manual
1031 * GNU Assembler::               The GNU Assembler
1032 * Object Formats::              Object File Formats
1033 * Command Line::                Command Line
1034 * Input Files::                 Input Files
1035 * Object::                      Output (Object) File
1036 * Errors::                      Error and Warning Messages
1037
1038 \1f
1039 File: as.info,  Node: Manual,  Next: GNU Assembler,  Up: Overview
1040
1041 1.1 Structure of this Manual
1042 ============================
1043
1044 This manual is intended to describe what you need to know to use GNU
1045 `as'.  We cover the syntax expected in source files, including notation
1046 for symbols, constants, and expressions; the directives that `as'
1047 understands; and of course how to invoke `as'.
1048
1049    This manual also describes some of the machine-dependent features of
1050 various flavors of the assembler.
1051
1052    On the other hand, this manual is _not_ intended as an introduction
1053 to programming in assembly language--let alone programming in general!
1054 In a similar vein, we make no attempt to introduce the machine
1055 architecture; we do _not_ describe the instruction set, standard
1056 mnemonics, registers or addressing modes that are standard to a
1057 particular architecture.  You may want to consult the manufacturer's
1058 machine architecture manual for this information.
1059
1060 \1f
1061 File: as.info,  Node: GNU Assembler,  Next: Object Formats,  Prev: Manual,  Up: Overview
1062
1063 1.2 The GNU Assembler
1064 =====================
1065
1066 GNU `as' is really a family of assemblers.  If you use (or have used)
1067 the GNU assembler on one architecture, you should find a fairly similar
1068 environment when you use it on another architecture.  Each version has
1069 much in common with the others, including object file formats, most
1070 assembler directives (often called "pseudo-ops") and assembler syntax.
1071
1072    `as' is primarily intended to assemble the output of the GNU C
1073 compiler `gcc' for use by the linker `ld'.  Nevertheless, we've tried
1074 to make `as' assemble correctly everything that other assemblers for
1075 the same machine would assemble.  Any exceptions are documented
1076 explicitly (*note Machine Dependencies::).  This doesn't mean `as'
1077 always uses the same syntax as another assembler for the same
1078 architecture; for example, we know of several incompatible versions of
1079 680x0 assembly language syntax.
1080
1081    Unlike older assemblers, `as' is designed to assemble a source
1082 program in one pass of the source file.  This has a subtle impact on the
1083 `.org' directive (*note `.org': Org.).
1084
1085 \1f
1086 File: as.info,  Node: Object Formats,  Next: Command Line,  Prev: GNU Assembler,  Up: Overview
1087
1088 1.3 Object File Formats
1089 =======================
1090
1091 The GNU assembler can be configured to produce several alternative
1092 object file formats.  For the most part, this does not affect how you
1093 write assembly language programs; but directives for debugging symbols
1094 are typically different in different file formats.  *Note Symbol
1095 Attributes: Symbol Attributes.
1096
1097 \1f
1098 File: as.info,  Node: Command Line,  Next: Input Files,  Prev: Object Formats,  Up: Overview
1099
1100 1.4 Command Line
1101 ================
1102
1103 After the program name `as', the command line may contain options and
1104 file names.  Options may appear in any order, and may be before, after,
1105 or between file names.  The order of file names is significant.
1106
1107    `--' (two hyphens) by itself names the standard input file
1108 explicitly, as one of the files for `as' to assemble.
1109
1110    Except for `--' any command line argument that begins with a hyphen
1111 (`-') is an option.  Each option changes the behavior of `as'.  No
1112 option changes the way another option works.  An option is a `-'
1113 followed by one or more letters; the case of the letter is important.
1114 All options are optional.
1115
1116    Some options expect exactly one file name to follow them.  The file
1117 name may either immediately follow the option's letter (compatible with
1118 older assemblers) or it may be the next command argument (GNU
1119 standard).  These two command lines are equivalent:
1120
1121      as -o my-object-file.o mumble.s
1122      as -omy-object-file.o mumble.s
1123
1124 \1f
1125 File: as.info,  Node: Input Files,  Next: Object,  Prev: Command Line,  Up: Overview
1126
1127 1.5 Input Files
1128 ===============
1129
1130 We use the phrase "source program", abbreviated "source", to describe
1131 the program input to one run of `as'.  The program may be in one or
1132 more files; how the source is partitioned into files doesn't change the
1133 meaning of the source.
1134
1135    The source program is a concatenation of the text in all the files,
1136 in the order specified.
1137
1138    Each time you run `as' it assembles exactly one source program.  The
1139 source program is made up of one or more files.  (The standard input is
1140 also a file.)
1141
1142    You give `as' a command line that has zero or more input file names.
1143 The input files are read (from left file name to right).  A command
1144 line argument (in any position) that has no special meaning is taken to
1145 be an input file name.
1146
1147    If you give `as' no file names it attempts to read one input file
1148 from the `as' standard input, which is normally your terminal.  You may
1149 have to type <ctl-D> to tell `as' there is no more program to assemble.
1150
1151    Use `--' if you need to explicitly name the standard input file in
1152 your command line.
1153
1154    If the source is empty, `as' produces a small, empty object file.
1155
1156 Filenames and Line-numbers
1157 --------------------------
1158
1159 There are two ways of locating a line in the input file (or files) and
1160 either may be used in reporting error messages.  One way refers to a
1161 line number in a physical file; the other refers to a line number in a
1162 "logical" file.  *Note Error and Warning Messages: Errors.
1163
1164    "Physical files" are those files named in the command line given to
1165 `as'.
1166
1167    "Logical files" are simply names declared explicitly by assembler
1168 directives; they bear no relation to physical files.  Logical file
1169 names help error messages reflect the original source file, when `as'
1170 source is itself synthesized from other files.  `as' understands the
1171 `#' directives emitted by the `gcc' preprocessor.  See also *Note
1172 `.file': File.
1173
1174 \1f
1175 File: as.info,  Node: Object,  Next: Errors,  Prev: Input Files,  Up: Overview
1176
1177 1.6 Output (Object) File
1178 ========================
1179
1180 Every time you run `as' it produces an output file, which is your
1181 assembly language program translated into numbers.  This file is the
1182 object file.  Its default name is `a.out'.  You can give it another
1183 name by using the `-o' option.  Conventionally, object file names end
1184 with `.o'.  The default name is used for historical reasons: older
1185 assemblers were capable of assembling self-contained programs directly
1186 into a runnable program.  (For some formats, this isn't currently
1187 possible, but it can be done for the `a.out' format.)
1188
1189    The object file is meant for input to the linker `ld'.  It contains
1190 assembled program code, information to help `ld' integrate the
1191 assembled program into a runnable file, and (optionally) symbolic
1192 information for the debugger.
1193
1194 \1f
1195 File: as.info,  Node: Errors,  Prev: Object,  Up: Overview
1196
1197 1.7 Error and Warning Messages
1198 ==============================
1199
1200 `as' may write warnings and error messages to the standard error file
1201 (usually your terminal).  This should not happen when  a compiler runs
1202 `as' automatically.  Warnings report an assumption made so that `as'
1203 could keep assembling a flawed program; errors report a grave problem
1204 that stops the assembly.
1205
1206    Warning messages have the format
1207
1208      file_name:NNN:Warning Message Text
1209
1210 (where NNN is a line number).  If a logical file name has been given
1211 (*note `.file': File.) it is used for the filename, otherwise the name
1212 of the current input file is used.  If a logical line number was given
1213 (*note `.line': Line.)  then it is used to calculate the number printed,
1214 otherwise the actual line in the current source file is printed.  The
1215 message text is intended to be self explanatory (in the grand Unix
1216 tradition).
1217
1218    Error messages have the format
1219      file_name:NNN:FATAL:Error Message Text
1220    The file name and line number are derived as for warning messages.
1221 The actual message text may be rather less explanatory because many of
1222 them aren't supposed to happen.
1223
1224 \1f
1225 File: as.info,  Node: Invoking,  Next: Syntax,  Prev: Overview,  Up: Top
1226
1227 2 Command-Line Options
1228 **********************
1229
1230 This chapter describes command-line options available in _all_ versions
1231 of the GNU assembler; see *Note Machine Dependencies::, for options
1232 specific to particular machine architectures.
1233
1234    If you are invoking `as' via the GNU C compiler, you can use the
1235 `-Wa' option to pass arguments through to the assembler.  The assembler
1236 arguments must be separated from each other (and the `-Wa') by commas.
1237 For example:
1238
1239      gcc -c -g -O -Wa,-alh,-L file.c
1240
1241 This passes two options to the assembler: `-alh' (emit a listing to
1242 standard output with high-level and assembly source) and `-L' (retain
1243 local symbols in the symbol table).
1244
1245    Usually you do not need to use this `-Wa' mechanism, since many
1246 compiler command-line options are automatically passed to the assembler
1247 by the compiler.  (You can call the GNU compiler driver with the `-v'
1248 option to see precisely what options it passes to each compilation
1249 pass, including the assembler.)
1250
1251 * Menu:
1252
1253 * a::             -a[cdghlns] enable listings
1254 * alternate::     --alternate enable alternate macro syntax
1255 * D::             -D for compatibility
1256 * f::             -f to work faster
1257 * I::             -I for .include search path
1258
1259 * K::             -K for difference tables
1260
1261 * L::             -L to retain local symbols
1262 * listing::       --listing-XXX to configure listing output
1263 * M::             -M or --mri to assemble in MRI compatibility mode
1264 * MD::            --MD for dependency tracking
1265 * o::             -o to name the object file
1266 * R::             -R to join data and text sections
1267 * statistics::    --statistics to see statistics about assembly
1268 * traditional-format:: --traditional-format for compatible output
1269 * v::             -v to announce version
1270 * W::             -W, --no-warn, --warn, --fatal-warnings to control warnings
1271 * Z::             -Z to make object file even after errors
1272
1273 \1f
1274 File: as.info,  Node: a,  Next: alternate,  Up: Invoking
1275
1276 2.1 Enable Listings: `-a[cdghlns]'
1277 ==================================
1278
1279 These options enable listing output from the assembler.  By itself,
1280 `-a' requests high-level, assembly, and symbols listing.  You can use
1281 other letters to select specific options for the list: `-ah' requests a
1282 high-level language listing, `-al' requests an output-program assembly
1283 listing, and `-as' requests a symbol table listing.  High-level
1284 listings require that a compiler debugging option like `-g' be used,
1285 and that assembly listings (`-al') be requested also.
1286
1287    Use the `-ag' option to print a first section with general assembly
1288 information, like as version, switches passed, or time stamp.
1289
1290    Use the `-ac' option to omit false conditionals from a listing.  Any
1291 lines which are not assembled because of a false `.if' (or `.ifdef', or
1292 any other conditional), or a true `.if' followed by an `.else', will be
1293 omitted from the listing.
1294
1295    Use the `-ad' option to omit debugging directives from the listing.
1296
1297    Once you have specified one of these options, you can further control
1298 listing output and its appearance using the directives `.list',
1299 `.nolist', `.psize', `.eject', `.title', and `.sbttl'.  The `-an'
1300 option turns off all forms processing.  If you do not request listing
1301 output with one of the `-a' options, the listing-control directives
1302 have no effect.
1303
1304    The letters after `-a' may be combined into one option, _e.g._,
1305 `-aln'.
1306
1307    Note if the assembler source is coming from the standard input (e.g.,
1308 because it is being created by `gcc' and the `-pipe' command line switch
1309 is being used) then the listing will not contain any comments or
1310 preprocessor directives.  This is because the listing code buffers
1311 input source lines from stdin only after they have been preprocessed by
1312 the assembler.  This reduces memory usage and makes the code more
1313 efficient.
1314
1315 \1f
1316 File: as.info,  Node: alternate,  Next: D,  Prev: a,  Up: Invoking
1317
1318 2.2 `--alternate'
1319 =================
1320
1321 Begin in alternate macro mode, see *Note `.altmacro': Altmacro.
1322
1323 \1f
1324 File: as.info,  Node: D,  Next: f,  Prev: alternate,  Up: Invoking
1325
1326 2.3 `-D'
1327 ========
1328
1329 This option has no effect whatsoever, but it is accepted to make it more
1330 likely that scripts written for other assemblers also work with `as'.
1331
1332 \1f
1333 File: as.info,  Node: f,  Next: I,  Prev: D,  Up: Invoking
1334
1335 2.4 Work Faster: `-f'
1336 =====================
1337
1338 `-f' should only be used when assembling programs written by a
1339 (trusted) compiler.  `-f' stops the assembler from doing whitespace and
1340 comment preprocessing on the input file(s) before assembling them.
1341 *Note Preprocessing: Preprocessing.
1342
1343      _Warning:_ if you use `-f' when the files actually need to be
1344      preprocessed (if they contain comments, for example), `as' does
1345      not work correctly.
1346
1347 \1f
1348 File: as.info,  Node: I,  Next: K,  Prev: f,  Up: Invoking
1349
1350 2.5 `.include' Search Path: `-I' PATH
1351 =====================================
1352
1353 Use this option to add a PATH to the list of directories `as' searches
1354 for files specified in `.include' directives (*note `.include':
1355 Include.).  You may use `-I' as many times as necessary to include a
1356 variety of paths.  The current working directory is always searched
1357 first; after that, `as' searches any `-I' directories in the same order
1358 as they were specified (left to right) on the command line.
1359
1360 \1f
1361 File: as.info,  Node: K,  Next: L,  Prev: I,  Up: Invoking
1362
1363 2.6 Difference Tables: `-K'
1364 ===========================
1365
1366 `as' sometimes alters the code emitted for directives of the form
1367 `.word SYM1-SYM2'.  *Note `.word': Word.  You can use the `-K' option
1368 if you want a warning issued when this is done.
1369
1370 \1f
1371 File: as.info,  Node: L,  Next: listing,  Prev: K,  Up: Invoking
1372
1373 2.7 Include Local Symbols: `-L'
1374 ===============================
1375
1376 Symbols beginning with system-specific local label prefixes, typically
1377 `.L' for ELF systems or `L' for traditional a.out systems, are called
1378 "local symbols".  *Note Symbol Names::.  Normally you do not see such
1379 symbols when debugging, because they are intended for the use of
1380 programs (like compilers) that compose assembler programs, not for your
1381 notice.  Normally both `as' and `ld' discard such symbols, so you do
1382 not normally debug with them.
1383
1384    This option tells `as' to retain those local symbols in the object
1385 file.  Usually if you do this you also tell the linker `ld' to preserve
1386 those symbols.
1387
1388 \1f
1389 File: as.info,  Node: listing,  Next: M,  Prev: L,  Up: Invoking
1390
1391 2.8 Configuring listing output: `--listing'
1392 ===========================================
1393
1394 The listing feature of the assembler can be enabled via the command
1395 line switch `-a' (*note a::).  This feature combines the input source
1396 file(s) with a hex dump of the corresponding locations in the output
1397 object file, and displays them as a listing file.  The format of this
1398 listing can be controlled by directives inside the assembler source
1399 (i.e., `.list' (*note List::), `.title' (*note Title::), `.sbttl'
1400 (*note Sbttl::), `.psize' (*note Psize::), and `.eject' (*note Eject::)
1401 and also by the following switches:
1402
1403 `--listing-lhs-width=`number''
1404      Sets the maximum width, in words, of the first line of the hex
1405      byte dump.  This dump appears on the left hand side of the listing
1406      output.
1407
1408 `--listing-lhs-width2=`number''
1409      Sets the maximum width, in words, of any further lines of the hex
1410      byte dump for a given input source line.  If this value is not
1411      specified, it defaults to being the same as the value specified
1412      for `--listing-lhs-width'.  If neither switch is used the default
1413      is to one.
1414
1415 `--listing-rhs-width=`number''
1416      Sets the maximum width, in characters, of the source line that is
1417      displayed alongside the hex dump.  The default value for this
1418      parameter is 100.  The source line is displayed on the right hand
1419      side of the listing output.
1420
1421 `--listing-cont-lines=`number''
1422      Sets the maximum number of continuation lines of hex dump that
1423      will be displayed for a given single line of source input.  The
1424      default value is 4.
1425
1426 \1f
1427 File: as.info,  Node: M,  Next: MD,  Prev: listing,  Up: Invoking
1428
1429 2.9 Assemble in MRI Compatibility Mode: `-M'
1430 ============================================
1431
1432 The `-M' or `--mri' option selects MRI compatibility mode.  This
1433 changes the syntax and pseudo-op handling of `as' to make it compatible
1434 with the `ASM68K' or the `ASM960' (depending upon the configured
1435 target) assembler from Microtec Research.  The exact nature of the MRI
1436 syntax will not be documented here; see the MRI manuals for more
1437 information.  Note in particular that the handling of macros and macro
1438 arguments is somewhat different.  The purpose of this option is to
1439 permit assembling existing MRI assembler code using `as'.
1440
1441    The MRI compatibility is not complete.  Certain operations of the
1442 MRI assembler depend upon its object file format, and can not be
1443 supported using other object file formats.  Supporting these would
1444 require enhancing each object file format individually.  These are:
1445
1446    * global symbols in common section
1447
1448      The m68k MRI assembler supports common sections which are merged
1449      by the linker.  Other object file formats do not support this.
1450      `as' handles common sections by treating them as a single common
1451      symbol.  It permits local symbols to be defined within a common
1452      section, but it can not support global symbols, since it has no
1453      way to describe them.
1454
1455    * complex relocations
1456
1457      The MRI assemblers support relocations against a negated section
1458      address, and relocations which combine the start addresses of two
1459      or more sections.  These are not support by other object file
1460      formats.
1461
1462    * `END' pseudo-op specifying start address
1463
1464      The MRI `END' pseudo-op permits the specification of a start
1465      address.  This is not supported by other object file formats.  The
1466      start address may instead be specified using the `-e' option to
1467      the linker, or in a linker script.
1468
1469    * `IDNT', `.ident' and `NAME' pseudo-ops
1470
1471      The MRI `IDNT', `.ident' and `NAME' pseudo-ops assign a module
1472      name to the output file.  This is not supported by other object
1473      file formats.
1474
1475    * `ORG' pseudo-op
1476
1477      The m68k MRI `ORG' pseudo-op begins an absolute section at a given
1478      address.  This differs from the usual `as' `.org' pseudo-op, which
1479      changes the location within the current section.  Absolute
1480      sections are not supported by other object file formats.  The
1481      address of a section may be assigned within a linker script.
1482
1483    There are some other features of the MRI assembler which are not
1484 supported by `as', typically either because they are difficult or
1485 because they seem of little consequence.  Some of these may be
1486 supported in future releases.
1487
1488    * EBCDIC strings
1489
1490      EBCDIC strings are not supported.
1491
1492    * packed binary coded decimal
1493
1494      Packed binary coded decimal is not supported.  This means that the
1495      `DC.P' and `DCB.P' pseudo-ops are not supported.
1496
1497    * `FEQU' pseudo-op
1498
1499      The m68k `FEQU' pseudo-op is not supported.
1500
1501    * `NOOBJ' pseudo-op
1502
1503      The m68k `NOOBJ' pseudo-op is not supported.
1504
1505    * `OPT' branch control options
1506
1507      The m68k `OPT' branch control options--`B', `BRS', `BRB', `BRL',
1508      and `BRW'--are ignored.  `as' automatically relaxes all branches,
1509      whether forward or backward, to an appropriate size, so these
1510      options serve no purpose.
1511
1512    * `OPT' list control options
1513
1514      The following m68k `OPT' list control options are ignored: `C',
1515      `CEX', `CL', `CRE', `E', `G', `I', `M', `MEX', `MC', `MD', `X'.
1516
1517    * other `OPT' options
1518
1519      The following m68k `OPT' options are ignored: `NEST', `O', `OLD',
1520      `OP', `P', `PCO', `PCR', `PCS', `R'.
1521
1522    * `OPT' `D' option is default
1523
1524      The m68k `OPT' `D' option is the default, unlike the MRI assembler.
1525      `OPT NOD' may be used to turn it off.
1526
1527    * `XREF' pseudo-op.
1528
1529      The m68k `XREF' pseudo-op is ignored.
1530
1531    * `.debug' pseudo-op
1532
1533      The i960 `.debug' pseudo-op is not supported.
1534
1535    * `.extended' pseudo-op
1536
1537      The i960 `.extended' pseudo-op is not supported.
1538
1539    * `.list' pseudo-op.
1540
1541      The various options of the i960 `.list' pseudo-op are not
1542      supported.
1543
1544    * `.optimize' pseudo-op
1545
1546      The i960 `.optimize' pseudo-op is not supported.
1547
1548    * `.output' pseudo-op
1549
1550      The i960 `.output' pseudo-op is not supported.
1551
1552    * `.setreal' pseudo-op
1553
1554      The i960 `.setreal' pseudo-op is not supported.
1555
1556
1557 \1f
1558 File: as.info,  Node: MD,  Next: o,  Prev: M,  Up: Invoking
1559
1560 2.10 Dependency Tracking: `--MD'
1561 ================================
1562
1563 `as' can generate a dependency file for the file it creates.  This file
1564 consists of a single rule suitable for `make' describing the
1565 dependencies of the main source file.
1566
1567    The rule is written to the file named in its argument.
1568
1569    This feature is used in the automatic updating of makefiles.
1570
1571 \1f
1572 File: as.info,  Node: o,  Next: R,  Prev: MD,  Up: Invoking
1573
1574 2.11 Name the Object File: `-o'
1575 ===============================
1576
1577 There is always one object file output when you run `as'.  By default
1578 it has the name `a.out' (or `b.out', for Intel 960 targets only).  You
1579 use this option (which takes exactly one filename) to give the object
1580 file a different name.
1581
1582    Whatever the object file is called, `as' overwrites any existing
1583 file of the same name.
1584
1585 \1f
1586 File: as.info,  Node: R,  Next: statistics,  Prev: o,  Up: Invoking
1587
1588 2.12 Join Data and Text Sections: `-R'
1589 ======================================
1590
1591 `-R' tells `as' to write the object file as if all data-section data
1592 lives in the text section.  This is only done at the very last moment:
1593 your binary data are the same, but data section parts are relocated
1594 differently.  The data section part of your object file is zero bytes
1595 long because all its bytes are appended to the text section.  (*Note
1596 Sections and Relocation: Sections.)
1597
1598    When you specify `-R' it would be possible to generate shorter
1599 address displacements (because we do not have to cross between text and
1600 data section).  We refrain from doing this simply for compatibility with
1601 older versions of `as'.  In future, `-R' may work this way.
1602
1603    When `as' is configured for COFF or ELF output, this option is only
1604 useful if you use sections named `.text' and `.data'.
1605
1606    `-R' is not supported for any of the HPPA targets.  Using `-R'
1607 generates a warning from `as'.
1608
1609 \1f
1610 File: as.info,  Node: statistics,  Next: traditional-format,  Prev: R,  Up: Invoking
1611
1612 2.13 Display Assembly Statistics: `--statistics'
1613 ================================================
1614
1615 Use `--statistics' to display two statistics about the resources used by
1616 `as': the maximum amount of space allocated during the assembly (in
1617 bytes), and the total execution time taken for the assembly (in CPU
1618 seconds).
1619
1620 \1f
1621 File: as.info,  Node: traditional-format,  Next: v,  Prev: statistics,  Up: Invoking
1622
1623 2.14 Compatible Output: `--traditional-format'
1624 ==============================================
1625
1626 For some targets, the output of `as' is different in some ways from the
1627 output of some existing assembler.  This switch requests `as' to use
1628 the traditional format instead.
1629
1630    For example, it disables the exception frame optimizations which
1631 `as' normally does by default on `gcc' output.
1632
1633 \1f
1634 File: as.info,  Node: v,  Next: W,  Prev: traditional-format,  Up: Invoking
1635
1636 2.15 Announce Version: `-v'
1637 ===========================
1638
1639 You can find out what version of as is running by including the option
1640 `-v' (which you can also spell as `-version') on the command line.
1641
1642 \1f
1643 File: as.info,  Node: W,  Next: Z,  Prev: v,  Up: Invoking
1644
1645 2.16 Control Warnings: `-W', `--warn', `--no-warn', `--fatal-warnings'
1646 ======================================================================
1647
1648 `as' should never give a warning or error message when assembling
1649 compiler output.  But programs written by people often cause `as' to
1650 give a warning that a particular assumption was made.  All such
1651 warnings are directed to the standard error file.
1652
1653    If you use the `-W' and `--no-warn' options, no warnings are issued.
1654 This only affects the warning messages: it does not change any
1655 particular of how `as' assembles your file.  Errors, which stop the
1656 assembly, are still reported.
1657
1658    If you use the `--fatal-warnings' option, `as' considers files that
1659 generate warnings to be in error.
1660
1661    You can switch these options off again by specifying `--warn', which
1662 causes warnings to be output as usual.
1663
1664 \1f
1665 File: as.info,  Node: Z,  Prev: W,  Up: Invoking
1666
1667 2.17 Generate Object File in Spite of Errors: `-Z'
1668 ==================================================
1669
1670 After an error message, `as' normally produces no output.  If for some
1671 reason you are interested in object file output even after `as' gives
1672 an error message on your program, use the `-Z' option.  If there are
1673 any errors, `as' continues anyways, and writes an object file after a
1674 final warning message of the form `N errors, M warnings, generating bad
1675 object file.'
1676
1677 \1f
1678 File: as.info,  Node: Syntax,  Next: Sections,  Prev: Invoking,  Up: Top
1679
1680 3 Syntax
1681 ********
1682
1683 This chapter describes the machine-independent syntax allowed in a
1684 source file.  `as' syntax is similar to what many other assemblers use;
1685 it is inspired by the BSD 4.2 assembler, except that `as' does not
1686 assemble Vax bit-fields.
1687
1688 * Menu:
1689
1690 * Preprocessing::               Preprocessing
1691 * Whitespace::                  Whitespace
1692 * Comments::                    Comments
1693 * Symbol Intro::                Symbols
1694 * Statements::                  Statements
1695 * Constants::                   Constants
1696
1697 \1f
1698 File: as.info,  Node: Preprocessing,  Next: Whitespace,  Up: Syntax
1699
1700 3.1 Preprocessing
1701 =================
1702
1703 The `as' internal preprocessor:
1704    * adjusts and removes extra whitespace.  It leaves one space or tab
1705      before the keywords on a line, and turns any other whitespace on
1706      the line into a single space.
1707
1708    * removes all comments, replacing them with a single space, or an
1709      appropriate number of newlines.
1710
1711    * converts character constants into the appropriate numeric values.
1712
1713    It does not do macro processing, include file handling, or anything
1714 else you may get from your C compiler's preprocessor.  You can do
1715 include file processing with the `.include' directive (*note
1716 `.include': Include.).  You can use the GNU C compiler driver to get
1717 other "CPP" style preprocessing by giving the input file a `.S' suffix.
1718 *Note Options Controlling the Kind of Output: (gcc.info)Overall
1719 Options.
1720
1721    Excess whitespace, comments, and character constants cannot be used
1722 in the portions of the input text that are not preprocessed.
1723
1724    If the first line of an input file is `#NO_APP' or if you use the
1725 `-f' option, whitespace and comments are not removed from the input
1726 file.  Within an input file, you can ask for whitespace and comment
1727 removal in specific portions of the by putting a line that says `#APP'
1728 before the text that may contain whitespace or comments, and putting a
1729 line that says `#NO_APP' after this text.  This feature is mainly
1730 intend to support `asm' statements in compilers whose output is
1731 otherwise free of comments and whitespace.
1732
1733 \1f
1734 File: as.info,  Node: Whitespace,  Next: Comments,  Prev: Preprocessing,  Up: Syntax
1735
1736 3.2 Whitespace
1737 ==============
1738
1739 "Whitespace" is one or more blanks or tabs, in any order.  Whitespace
1740 is used to separate symbols, and to make programs neater for people to
1741 read.  Unless within character constants (*note Character Constants:
1742 Characters.), any whitespace means the same as exactly one space.
1743
1744 \1f
1745 File: as.info,  Node: Comments,  Next: Symbol Intro,  Prev: Whitespace,  Up: Syntax
1746
1747 3.3 Comments
1748 ============
1749
1750 There are two ways of rendering comments to `as'.  In both cases the
1751 comment is equivalent to one space.
1752
1753    Anything from `/*' through the next `*/' is a comment.  This means
1754 you may not nest these comments.
1755
1756      /*
1757        The only way to include a newline ('\n') in a comment
1758        is to use this sort of comment.
1759      */
1760
1761      /* This sort of comment does not nest. */
1762
1763    Anything from a "line comment" character up to the next newline is
1764 considered a comment and is ignored.  The line comment character is
1765 target specific, and some targets multiple comment characters.  Some
1766 targets also have line comment characters that only work if they are
1767 the first character on a line.  Some targets use a sequence of two
1768 characters to introduce a line comment.  Some targets can also change
1769 their line comment characters depending upon command line options that
1770 have been used.  For more details see the _Syntax_ section in the
1771 documentation for individual targets.
1772
1773    If the line comment character is the hash sign (`#') then it still
1774 has the special ability to enable and disable preprocessing (*note
1775 Preprocessing::) and to specify logical line numbers:
1776
1777    To be compatible with past assemblers, lines that begin with `#'
1778 have a special interpretation.  Following the `#' should be an absolute
1779 expression (*note Expressions::): the logical line number of the _next_
1780 line.  Then a string (*note Strings: Strings.) is allowed: if present
1781 it is a new logical file name.  The rest of the line, if any, should be
1782 whitespace.
1783
1784    If the first non-whitespace characters on the line are not numeric,
1785 the line is ignored.  (Just like a comment.)
1786
1787                                # This is an ordinary comment.
1788      # 42-6 "new_file_name"    # New logical file name
1789                                # This is logical line # 36.
1790    This feature is deprecated, and may disappear from future versions
1791 of `as'.
1792
1793 \1f
1794 File: as.info,  Node: Symbol Intro,  Next: Statements,  Prev: Comments,  Up: Syntax
1795
1796 3.4 Symbols
1797 ===========
1798
1799 A "symbol" is one or more characters chosen from the set of all letters
1800 (both upper and lower case), digits and the three characters `_.$'.  On
1801 most machines, you can also use `$' in symbol names; exceptions are
1802 noted in *Note Machine Dependencies::.  No symbol may begin with a
1803 digit.  Case is significant.  There is no length limit: all characters
1804 are significant.  Multibyte characters are supported.  Symbols are
1805 delimited by characters not in that set, or by the beginning of a file
1806 (since the source program must end with a newline, the end of a file is
1807 not a possible symbol delimiter).  *Note Symbols::.  
1808
1809 \1f
1810 File: as.info,  Node: Statements,  Next: Constants,  Prev: Symbol Intro,  Up: Syntax
1811
1812 3.5 Statements
1813 ==============
1814
1815 A "statement" ends at a newline character (`\n') or a "line separator
1816 character".  The line separator character is target specific and
1817 described in the _Syntax_ section of each target's documentation.  Not
1818 all targets support a line separator character.  The newline or line
1819 separator character is considered to be part of the preceding
1820 statement.  Newlines and separators within character constants are an
1821 exception: they do not end statements.
1822
1823    It is an error to end any statement with end-of-file:  the last
1824 character of any input file should be a newline.
1825
1826    An empty statement is allowed, and may include whitespace.  It is
1827 ignored.
1828
1829    A statement begins with zero or more labels, optionally followed by a
1830 key symbol which determines what kind of statement it is.  The key
1831 symbol determines the syntax of the rest of the statement.  If the
1832 symbol begins with a dot `.' then the statement is an assembler
1833 directive: typically valid for any computer.  If the symbol begins with
1834 a letter the statement is an assembly language "instruction": it
1835 assembles into a machine language instruction.  Different versions of
1836 `as' for different computers recognize different instructions.  In
1837 fact, the same symbol may represent a different instruction in a
1838 different computer's assembly language.
1839
1840    A label is a symbol immediately followed by a colon (`:').
1841 Whitespace before a label or after a colon is permitted, but you may not
1842 have whitespace between a label's symbol and its colon. *Note Labels::.
1843
1844    For HPPA targets, labels need not be immediately followed by a
1845 colon, but the definition of a label must begin in column zero.  This
1846 also implies that only one label may be defined on each line.
1847
1848      label:     .directive    followed by something
1849      another_label:           # This is an empty statement.
1850                 instruction   operand_1, operand_2, ...
1851
1852 \1f
1853 File: as.info,  Node: Constants,  Prev: Statements,  Up: Syntax
1854
1855 3.6 Constants
1856 =============
1857
1858 A constant is a number, written so that its value is known by
1859 inspection, without knowing any context.  Like this:
1860      .byte  74, 0112, 092, 0x4A, 0X4a, 'J, '\J # All the same value.
1861      .ascii "Ring the bell\7"                  # A string constant.
1862      .octa  0x123456789abcdef0123456789ABCDEF0 # A bignum.
1863      .float 0f-314159265358979323846264338327\
1864      95028841971.693993751E-40                 # - pi, a flonum.
1865
1866 * Menu:
1867
1868 * Characters::                  Character Constants
1869 * Numbers::                     Number Constants
1870
1871 \1f
1872 File: as.info,  Node: Characters,  Next: Numbers,  Up: Constants
1873
1874 3.6.1 Character Constants
1875 -------------------------
1876
1877 There are two kinds of character constants.  A "character" stands for
1878 one character in one byte and its value may be used in numeric
1879 expressions.  String constants (properly called string _literals_) are
1880 potentially many bytes and their values may not be used in arithmetic
1881 expressions.
1882
1883 * Menu:
1884
1885 * Strings::                     Strings
1886 * Chars::                       Characters
1887
1888 \1f
1889 File: as.info,  Node: Strings,  Next: Chars,  Up: Characters
1890
1891 3.6.1.1 Strings
1892 ...............
1893
1894 A "string" is written between double-quotes.  It may contain
1895 double-quotes or null characters.  The way to get special characters
1896 into a string is to "escape" these characters: precede them with a
1897 backslash `\' character.  For example `\\' represents one backslash:
1898 the first `\' is an escape which tells `as' to interpret the second
1899 character literally as a backslash (which prevents `as' from
1900 recognizing the second `\' as an escape character).  The complete list
1901 of escapes follows.
1902
1903 `\b'
1904      Mnemonic for backspace; for ASCII this is octal code 010.
1905
1906 `\f'
1907      Mnemonic for FormFeed; for ASCII this is octal code 014.
1908
1909 `\n'
1910      Mnemonic for newline; for ASCII this is octal code 012.
1911
1912 `\r'
1913      Mnemonic for carriage-Return; for ASCII this is octal code 015.
1914
1915 `\t'
1916      Mnemonic for horizontal Tab; for ASCII this is octal code 011.
1917
1918 `\ DIGIT DIGIT DIGIT'
1919      An octal character code.  The numeric code is 3 octal digits.  For
1920      compatibility with other Unix systems, 8 and 9 are accepted as
1921      digits: for example, `\008' has the value 010, and `\009' the
1922      value 011.
1923
1924 `\`x' HEX-DIGITS...'
1925      A hex character code.  All trailing hex digits are combined.
1926      Either upper or lower case `x' works.
1927
1928 `\\'
1929      Represents one `\' character.
1930
1931 `\"'
1932      Represents one `"' character.  Needed in strings to represent this
1933      character, because an unescaped `"' would end the string.
1934
1935 `\ ANYTHING-ELSE'
1936      Any other character when escaped by `\' gives a warning, but
1937      assembles as if the `\' was not present.  The idea is that if you
1938      used an escape sequence you clearly didn't want the literal
1939      interpretation of the following character.  However `as' has no
1940      other interpretation, so `as' knows it is giving you the wrong
1941      code and warns you of the fact.
1942
1943    Which characters are escapable, and what those escapes represent,
1944 varies widely among assemblers.  The current set is what we think the
1945 BSD 4.2 assembler recognizes, and is a subset of what most C compilers
1946 recognize.  If you are in doubt, do not use an escape sequence.
1947
1948 \1f
1949 File: as.info,  Node: Chars,  Prev: Strings,  Up: Characters
1950
1951 3.6.1.2 Characters
1952 ..................
1953
1954 A single character may be written as a single quote immediately
1955 followed by that character.  The same escapes apply to characters as to
1956 strings.  So if you want to write the character backslash, you must
1957 write `'\\' where the first `\' escapes the second `\'.  As you can
1958 see, the quote is an acute accent, not a grave accent.  A newline
1959 immediately following an acute accent is taken as a literal character
1960 and does not count as the end of a statement.  The value of a character
1961 constant in a numeric expression is the machine's byte-wide code for
1962 that character.  `as' assumes your character code is ASCII: `'A' means
1963 65, `'B' means 66, and so on.
1964
1965 \1f
1966 File: as.info,  Node: Numbers,  Prev: Characters,  Up: Constants
1967
1968 3.6.2 Number Constants
1969 ----------------------
1970
1971 `as' distinguishes three kinds of numbers according to how they are
1972 stored in the target machine.  _Integers_ are numbers that would fit
1973 into an `int' in the C language.  _Bignums_ are integers, but they are
1974 stored in more than 32 bits.  _Flonums_ are floating point numbers,
1975 described below.
1976
1977 * Menu:
1978
1979 * Integers::                    Integers
1980 * Bignums::                     Bignums
1981 * Flonums::                     Flonums
1982
1983 \1f
1984 File: as.info,  Node: Integers,  Next: Bignums,  Up: Numbers
1985
1986 3.6.2.1 Integers
1987 ................
1988
1989 A binary integer is `0b' or `0B' followed by zero or more of the binary
1990 digits `01'.
1991
1992    An octal integer is `0' followed by zero or more of the octal digits
1993 (`01234567').
1994
1995    A decimal integer starts with a non-zero digit followed by zero or
1996 more digits (`0123456789').
1997
1998    A hexadecimal integer is `0x' or `0X' followed by one or more
1999 hexadecimal digits chosen from `0123456789abcdefABCDEF'.
2000
2001    Integers have the usual values.  To denote a negative integer, use
2002 the prefix operator `-' discussed under expressions (*note Prefix
2003 Operators: Prefix Ops.).
2004
2005 \1f
2006 File: as.info,  Node: Bignums,  Next: Flonums,  Prev: Integers,  Up: Numbers
2007
2008 3.6.2.2 Bignums
2009 ...............
2010
2011 A "bignum" has the same syntax and semantics as an integer except that
2012 the number (or its negative) takes more than 32 bits to represent in
2013 binary.  The distinction is made because in some places integers are
2014 permitted while bignums are not.
2015
2016 \1f
2017 File: as.info,  Node: Flonums,  Prev: Bignums,  Up: Numbers
2018
2019 3.6.2.3 Flonums
2020 ...............
2021
2022 A "flonum" represents a floating point number.  The translation is
2023 indirect: a decimal floating point number from the text is converted by
2024 `as' to a generic binary floating point number of more than sufficient
2025 precision.  This generic floating point number is converted to a
2026 particular computer's floating point format (or formats) by a portion
2027 of `as' specialized to that computer.
2028
2029    A flonum is written by writing (in order)
2030    * The digit `0'.  (`0' is optional on the HPPA.)
2031
2032    * A letter, to tell `as' the rest of the number is a flonum.  `e' is
2033      recommended.  Case is not important.
2034
2035      On the H8/300, Renesas / SuperH SH, and AMD 29K architectures, the
2036      letter must be one of the letters `DFPRSX' (in upper or lower
2037      case).
2038
2039      On the ARC, the letter must be one of the letters `DFRS' (in upper
2040      or lower case).
2041
2042      On the Intel 960 architecture, the letter must be one of the
2043      letters `DFT' (in upper or lower case).
2044
2045      On the HPPA architecture, the letter must be `E' (upper case only).
2046
2047    * An optional sign: either `+' or `-'.
2048
2049    * An optional "integer part": zero or more decimal digits.
2050
2051    * An optional "fractional part": `.' followed by zero or more
2052      decimal digits.
2053
2054    * An optional exponent, consisting of:
2055
2056         * An `E' or `e'.
2057
2058         * Optional sign: either `+' or `-'.
2059
2060         * One or more decimal digits.
2061
2062
2063    At least one of the integer part or the fractional part must be
2064 present.  The floating point number has the usual base-10 value.
2065
2066    `as' does all processing using integers.  Flonums are computed
2067 independently of any floating point hardware in the computer running
2068 `as'.
2069
2070 \1f
2071 File: as.info,  Node: Sections,  Next: Symbols,  Prev: Syntax,  Up: Top
2072
2073 4 Sections and Relocation
2074 *************************
2075
2076 * Menu:
2077
2078 * Secs Background::             Background
2079 * Ld Sections::                 Linker Sections
2080 * As Sections::                 Assembler Internal Sections
2081 * Sub-Sections::                Sub-Sections
2082 * bss::                         bss Section
2083
2084 \1f
2085 File: as.info,  Node: Secs Background,  Next: Ld Sections,  Up: Sections
2086
2087 4.1 Background
2088 ==============
2089
2090 Roughly, a section is a range of addresses, with no gaps; all data "in"
2091 those addresses is treated the same for some particular purpose.  For
2092 example there may be a "read only" section.
2093
2094    The linker `ld' reads many object files (partial programs) and
2095 combines their contents to form a runnable program.  When `as' emits an
2096 object file, the partial program is assumed to start at address 0.
2097 `ld' assigns the final addresses for the partial program, so that
2098 different partial programs do not overlap.  This is actually an
2099 oversimplification, but it suffices to explain how `as' uses sections.
2100
2101    `ld' moves blocks of bytes of your program to their run-time
2102 addresses.  These blocks slide to their run-time addresses as rigid
2103 units; their length does not change and neither does the order of bytes
2104 within them.  Such a rigid unit is called a _section_.  Assigning
2105 run-time addresses to sections is called "relocation".  It includes the
2106 task of adjusting mentions of object-file addresses so they refer to
2107 the proper run-time addresses.  For the H8/300, and for the Renesas /
2108 SuperH SH, `as' pads sections if needed to ensure they end on a word
2109 (sixteen bit) boundary.
2110
2111    An object file written by `as' has at least three sections, any of
2112 which may be empty.  These are named "text", "data" and "bss" sections.
2113
2114    When it generates COFF or ELF output, `as' can also generate
2115 whatever other named sections you specify using the `.section'
2116 directive (*note `.section': Section.).  If you do not use any
2117 directives that place output in the `.text' or `.data' sections, these
2118 sections still exist, but are empty.
2119
2120    When `as' generates SOM or ELF output for the HPPA, `as' can also
2121 generate whatever other named sections you specify using the `.space'
2122 and `.subspace' directives.  See `HP9000 Series 800 Assembly Language
2123 Reference Manual' (HP 92432-90001) for details on the `.space' and
2124 `.subspace' assembler directives.
2125
2126    Additionally, `as' uses different names for the standard text, data,
2127 and bss sections when generating SOM output.  Program text is placed
2128 into the `$CODE$' section, data into `$DATA$', and BSS into `$BSS$'.
2129
2130    Within the object file, the text section starts at address `0', the
2131 data section follows, and the bss section follows the data section.
2132
2133    When generating either SOM or ELF output files on the HPPA, the text
2134 section starts at address `0', the data section at address `0x4000000',
2135 and the bss section follows the data section.
2136
2137    To let `ld' know which data changes when the sections are relocated,
2138 and how to change that data, `as' also writes to the object file
2139 details of the relocation needed.  To perform relocation `ld' must
2140 know, each time an address in the object file is mentioned:
2141    * Where in the object file is the beginning of this reference to an
2142      address?
2143
2144    * How long (in bytes) is this reference?
2145
2146    * Which section does the address refer to?  What is the numeric
2147      value of
2148           (ADDRESS) - (START-ADDRESS OF SECTION)?
2149
2150    * Is the reference to an address "Program-Counter relative"?
2151
2152    In fact, every address `as' ever uses is expressed as
2153      (SECTION) + (OFFSET INTO SECTION)
2154    Further, most expressions `as' computes have this section-relative
2155 nature.  (For some object formats, such as SOM for the HPPA, some
2156 expressions are symbol-relative instead.)
2157
2158    In this manual we use the notation {SECNAME N} to mean "offset N
2159 into section SECNAME."
2160
2161    Apart from text, data and bss sections you need to know about the
2162 "absolute" section.  When `ld' mixes partial programs, addresses in the
2163 absolute section remain unchanged.  For example, address `{absolute 0}'
2164 is "relocated" to run-time address 0 by `ld'.  Although the linker
2165 never arranges two partial programs' data sections with overlapping
2166 addresses after linking, _by definition_ their absolute sections must
2167 overlap.  Address `{absolute 239}' in one part of a program is always
2168 the same address when the program is running as address `{absolute
2169 239}' in any other part of the program.
2170
2171    The idea of sections is extended to the "undefined" section.  Any
2172 address whose section is unknown at assembly time is by definition
2173 rendered {undefined U}--where U is filled in later.  Since numbers are
2174 always defined, the only way to generate an undefined address is to
2175 mention an undefined symbol.  A reference to a named common block would
2176 be such a symbol: its value is unknown at assembly time so it has
2177 section _undefined_.
2178
2179    By analogy the word _section_ is used to describe groups of sections
2180 in the linked program.  `ld' puts all partial programs' text sections
2181 in contiguous addresses in the linked program.  It is customary to
2182 refer to the _text section_ of a program, meaning all the addresses of
2183 all partial programs' text sections.  Likewise for data and bss
2184 sections.
2185
2186    Some sections are manipulated by `ld'; others are invented for use
2187 of `as' and have no meaning except during assembly.
2188
2189 \1f
2190 File: as.info,  Node: Ld Sections,  Next: As Sections,  Prev: Secs Background,  Up: Sections
2191
2192 4.2 Linker Sections
2193 ===================
2194
2195 `ld' deals with just four kinds of sections, summarized below.
2196
2197 *named sections*
2198 *text section*
2199 *data section*
2200      These sections hold your program.  `as' and `ld' treat them as
2201      separate but equal sections.  Anything you can say of one section
2202      is true of another.  When the program is running, however, it is
2203      customary for the text section to be unalterable.  The text
2204      section is often shared among processes: it contains instructions,
2205      constants and the like.  The data section of a running program is
2206      usually alterable: for example, C variables would be stored in the
2207      data section.
2208
2209 *bss section*
2210      This section contains zeroed bytes when your program begins
2211      running.  It is used to hold uninitialized variables or common
2212      storage.  The length of each partial program's bss section is
2213      important, but because it starts out containing zeroed bytes there
2214      is no need to store explicit zero bytes in the object file.  The
2215      bss section was invented to eliminate those explicit zeros from
2216      object files.
2217
2218 *absolute section*
2219      Address 0 of this section is always "relocated" to runtime address
2220      0.  This is useful if you want to refer to an address that `ld'
2221      must not change when relocating.  In this sense we speak of
2222      absolute addresses being "unrelocatable": they do not change
2223      during relocation.
2224
2225 *undefined section*
2226      This "section" is a catch-all for address references to objects
2227      not in the preceding sections.
2228
2229    An idealized example of three relocatable sections follows.  The
2230 example uses the traditional section names `.text' and `.data'.  Memory
2231 addresses are on the horizontal axis.
2232
2233                            +-----+----+--+
2234      partial program # 1:  |ttttt|dddd|00|
2235                            +-----+----+--+
2236
2237                            text   data bss
2238                            seg.   seg. seg.
2239
2240                            +---+---+---+
2241      partial program # 2:  |TTT|DDD|000|
2242                            +---+---+---+
2243
2244                            +--+---+-----+--+----+---+-----+~~
2245      linked program:       |  |TTT|ttttt|  |dddd|DDD|00000|
2246                            +--+---+-----+--+----+---+-----+~~
2247
2248          addresses:        0 ...
2249
2250 \1f
2251 File: as.info,  Node: As Sections,  Next: Sub-Sections,  Prev: Ld Sections,  Up: Sections
2252
2253 4.3 Assembler Internal Sections
2254 ===============================
2255
2256 These sections are meant only for the internal use of `as'.  They have
2257 no meaning at run-time.  You do not really need to know about these
2258 sections for most purposes; but they can be mentioned in `as' warning
2259 messages, so it might be helpful to have an idea of their meanings to
2260 `as'.  These sections are used to permit the value of every expression
2261 in your assembly language program to be a section-relative address.
2262
2263 ASSEMBLER-INTERNAL-LOGIC-ERROR!
2264      An internal assembler logic error has been found.  This means
2265      there is a bug in the assembler.
2266
2267 expr section
2268      The assembler stores complex expression internally as combinations
2269      of symbols.  When it needs to represent an expression as a symbol,
2270      it puts it in the expr section.
2271
2272 \1f
2273 File: as.info,  Node: Sub-Sections,  Next: bss,  Prev: As Sections,  Up: Sections
2274
2275 4.4 Sub-Sections
2276 ================
2277
2278 Assembled bytes conventionally fall into two sections: text and data.
2279 You may have separate groups of data in named sections that you want to
2280 end up near to each other in the object file, even though they are not
2281 contiguous in the assembler source.  `as' allows you to use
2282 "subsections" for this purpose.  Within each section, there can be
2283 numbered subsections with values from 0 to 8192.  Objects assembled
2284 into the same subsection go into the object file together with other
2285 objects in the same subsection.  For example, a compiler might want to
2286 store constants in the text section, but might not want to have them
2287 interspersed with the program being assembled.  In this case, the
2288 compiler could issue a `.text 0' before each section of code being
2289 output, and a `.text 1' before each group of constants being output.
2290
2291 Subsections are optional.  If you do not use subsections, everything
2292 goes in subsection number zero.
2293
2294    Each subsection is zero-padded up to a multiple of four bytes.
2295 (Subsections may be padded a different amount on different flavors of
2296 `as'.)
2297
2298    Subsections appear in your object file in numeric order, lowest
2299 numbered to highest.  (All this to be compatible with other people's
2300 assemblers.)  The object file contains no representation of
2301 subsections; `ld' and other programs that manipulate object files see
2302 no trace of them.  They just see all your text subsections as a text
2303 section, and all your data subsections as a data section.
2304
2305    To specify which subsection you want subsequent statements assembled
2306 into, use a numeric argument to specify it, in a `.text EXPRESSION' or
2307 a `.data EXPRESSION' statement.  When generating COFF output, you can
2308 also use an extra subsection argument with arbitrary named sections:
2309 `.section NAME, EXPRESSION'.  When generating ELF output, you can also
2310 use the `.subsection' directive (*note SubSection::) to specify a
2311 subsection: `.subsection EXPRESSION'.  EXPRESSION should be an absolute
2312 expression (*note Expressions::).  If you just say `.text' then `.text
2313 0' is assumed.  Likewise `.data' means `.data 0'.  Assembly begins in
2314 `text 0'.  For instance:
2315      .text 0     # The default subsection is text 0 anyway.
2316      .ascii "This lives in the first text subsection. *"
2317      .text 1
2318      .ascii "But this lives in the second text subsection."
2319      .data 0
2320      .ascii "This lives in the data section,"
2321      .ascii "in the first data subsection."
2322      .text 0
2323      .ascii "This lives in the first text section,"
2324      .ascii "immediately following the asterisk (*)."
2325
2326    Each section has a "location counter" incremented by one for every
2327 byte assembled into that section.  Because subsections are merely a
2328 convenience restricted to `as' there is no concept of a subsection
2329 location counter.  There is no way to directly manipulate a location
2330 counter--but the `.align' directive changes it, and any label
2331 definition captures its current value.  The location counter of the
2332 section where statements are being assembled is said to be the "active"
2333 location counter.
2334
2335 \1f
2336 File: as.info,  Node: bss,  Prev: Sub-Sections,  Up: Sections
2337
2338 4.5 bss Section
2339 ===============
2340
2341 The bss section is used for local common variable storage.  You may
2342 allocate address space in the bss section, but you may not dictate data
2343 to load into it before your program executes.  When your program starts
2344 running, all the contents of the bss section are zeroed bytes.
2345
2346    The `.lcomm' pseudo-op defines a symbol in the bss section; see
2347 *Note `.lcomm': Lcomm.
2348
2349    The `.comm' pseudo-op may be used to declare a common symbol, which
2350 is another form of uninitialized symbol; see *Note `.comm': Comm.
2351
2352    When assembling for a target which supports multiple sections, such
2353 as ELF or COFF, you may switch into the `.bss' section and define
2354 symbols as usual; see *Note `.section': Section.  You may only assemble
2355 zero values into the section.  Typically the section will only contain
2356 symbol definitions and `.skip' directives (*note `.skip': Skip.).
2357
2358 \1f
2359 File: as.info,  Node: Symbols,  Next: Expressions,  Prev: Sections,  Up: Top
2360
2361 5 Symbols
2362 *********
2363
2364 Symbols are a central concept: the programmer uses symbols to name
2365 things, the linker uses symbols to link, and the debugger uses symbols
2366 to debug.
2367
2368      _Warning:_ `as' does not place symbols in the object file in the
2369      same order they were declared.  This may break some debuggers.
2370
2371 * Menu:
2372
2373 * Labels::                      Labels
2374 * Setting Symbols::             Giving Symbols Other Values
2375 * Symbol Names::                Symbol Names
2376 * Dot::                         The Special Dot Symbol
2377 * Symbol Attributes::           Symbol Attributes
2378
2379 \1f
2380 File: as.info,  Node: Labels,  Next: Setting Symbols,  Up: Symbols
2381
2382 5.1 Labels
2383 ==========
2384
2385 A "label" is written as a symbol immediately followed by a colon `:'.
2386 The symbol then represents the current value of the active location
2387 counter, and is, for example, a suitable instruction operand.  You are
2388 warned if you use the same symbol to represent two different locations:
2389 the first definition overrides any other definitions.
2390
2391    On the HPPA, the usual form for a label need not be immediately
2392 followed by a colon, but instead must start in column zero.  Only one
2393 label may be defined on a single line.  To work around this, the HPPA
2394 version of `as' also provides a special directive `.label' for defining
2395 labels more flexibly.
2396
2397 \1f
2398 File: as.info,  Node: Setting Symbols,  Next: Symbol Names,  Prev: Labels,  Up: Symbols
2399
2400 5.2 Giving Symbols Other Values
2401 ===============================
2402
2403 A symbol can be given an arbitrary value by writing a symbol, followed
2404 by an equals sign `=', followed by an expression (*note Expressions::).
2405 This is equivalent to using the `.set' directive.  *Note `.set': Set.
2406 In the same way, using a double equals sign `='`=' here represents an
2407 equivalent of the `.eqv' directive.  *Note `.eqv': Eqv.
2408
2409    Blackfin does not support symbol assignment with `='.
2410
2411 \1f
2412 File: as.info,  Node: Symbol Names,  Next: Dot,  Prev: Setting Symbols,  Up: Symbols
2413
2414 5.3 Symbol Names
2415 ================
2416
2417 Symbol names begin with a letter or with one of `._'.  On most
2418 machines, you can also use `$' in symbol names; exceptions are noted in
2419 *Note Machine Dependencies::.  That character may be followed by any
2420 string of digits, letters, dollar signs (unless otherwise noted for a
2421 particular target machine), and underscores.
2422
2423 Case of letters is significant: `foo' is a different symbol name than
2424 `Foo'.
2425
2426    Multibyte characters are supported.  To generate a symbol name
2427 containing multibyte characters enclose it within double quotes and use
2428 escape codes. cf *Note Strings::.  Generating a multibyte symbol name
2429 from a label is not currently supported.
2430
2431    Each symbol has exactly one name.  Each name in an assembly language
2432 program refers to exactly one symbol.  You may use that symbol name any
2433 number of times in a program.
2434
2435 Local Symbol Names
2436 ------------------
2437
2438 A local symbol is any symbol beginning with certain local label
2439 prefixes.  By default, the local label prefix is `.L' for ELF systems or
2440 `L' for traditional a.out systems, but each target may have its own set
2441 of local label prefixes.  On the HPPA local symbols begin with `L$'.
2442
2443    Local symbols are defined and used within the assembler, but they are
2444 normally not saved in object files.  Thus, they are not visible when
2445 debugging.  You may use the `-L' option (*note Include Local Symbols:
2446 `-L': L.) to retain the local symbols in the object files.
2447
2448 Local Labels
2449 ------------
2450
2451 Local labels help compilers and programmers use names temporarily.
2452 They create symbols which are guaranteed to be unique over the entire
2453 scope of the input source code and which can be referred to by a simple
2454 notation.  To define a local label, write a label of the form `N:'
2455 (where N represents any positive integer).  To refer to the most recent
2456 previous definition of that label write `Nb', using the same number as
2457 when you defined the label.  To refer to the next definition of a local
2458 label, write `Nf'--the `b' stands for "backwards" and the `f' stands
2459 for "forwards".
2460
2461    There is no restriction on how you can use these labels, and you can
2462 reuse them too.  So that it is possible to repeatedly define the same
2463 local label (using the same number `N'), although you can only refer to
2464 the most recently defined local label of that number (for a backwards
2465 reference) or the next definition of a specific local label for a
2466 forward reference.  It is also worth noting that the first 10 local
2467 labels (`0:'...`9:') are implemented in a slightly more efficient
2468 manner than the others.
2469
2470    Here is an example:
2471
2472      1:        branch 1f
2473      2:        branch 1b
2474      1:        branch 2f
2475      2:        branch 1b
2476
2477    Which is the equivalent of:
2478
2479      label_1:  branch label_3
2480      label_2:  branch label_1
2481      label_3:  branch label_4
2482      label_4:  branch label_3
2483
2484    Local label names are only a notational device.  They are immediately
2485 transformed into more conventional symbol names before the assembler
2486 uses them.  The symbol names are stored in the symbol table, appear in
2487 error messages, and are optionally emitted to the object file.  The
2488 names are constructed using these parts:
2489
2490 `_local label prefix_'
2491      All local symbols begin with the system-specific local label
2492      prefix.  Normally both `as' and `ld' forget symbols that start
2493      with the local label prefix.  These labels are used for symbols
2494      you are never intended to see.  If you use the `-L' option then
2495      `as' retains these symbols in the object file. If you also
2496      instruct `ld' to retain these symbols, you may use them in
2497      debugging.
2498
2499 `NUMBER'
2500      This is the number that was used in the local label definition.
2501      So if the label is written `55:' then the number is `55'.
2502
2503 `C-B'
2504      This unusual character is included so you do not accidentally
2505      invent a symbol of the same name.  The character has ASCII value
2506      of `\002' (control-B).
2507
2508 `_ordinal number_'
2509      This is a serial number to keep the labels distinct.  The first
2510      definition of `0:' gets the number `1'.  The 15th definition of
2511      `0:' gets the number `15', and so on.  Likewise the first
2512      definition of `1:' gets the number `1' and its 15th definition
2513      gets `15' as well.
2514
2515    So for example, the first `1:' may be named `.L1C-B1', and the 44th
2516 `3:' may be named `.L3C-B44'.
2517
2518 Dollar Local Labels
2519 -------------------
2520
2521 `as' also supports an even more local form of local labels called
2522 dollar labels.  These labels go out of scope (i.e., they become
2523 undefined) as soon as a non-local label is defined.  Thus they remain
2524 valid for only a small region of the input source code.  Normal local
2525 labels, by contrast, remain in scope for the entire file, or until they
2526 are redefined by another occurrence of the same local label.
2527
2528    Dollar labels are defined in exactly the same way as ordinary local
2529 labels, except that they have a dollar sign suffix to their numeric
2530 value, e.g., `55$:'.
2531
2532    They can also be distinguished from ordinary local labels by their
2533 transformed names which use ASCII character `\001' (control-A) as the
2534 magic character to distinguish them from ordinary labels.  For example,
2535 the fifth definition of `6$' may be named `.L6C-A5'.
2536
2537 \1f
2538 File: as.info,  Node: Dot,  Next: Symbol Attributes,  Prev: Symbol Names,  Up: Symbols
2539
2540 5.4 The Special Dot Symbol
2541 ==========================
2542
2543 The special symbol `.' refers to the current address that `as' is
2544 assembling into.  Thus, the expression `melvin: .long .' defines
2545 `melvin' to contain its own address.  Assigning a value to `.' is
2546 treated the same as a `.org' directive.  Thus, the expression `.=.+4'
2547 is the same as saying `.space 4'.
2548
2549 \1f
2550 File: as.info,  Node: Symbol Attributes,  Prev: Dot,  Up: Symbols
2551
2552 5.5 Symbol Attributes
2553 =====================
2554
2555 Every symbol has, as well as its name, the attributes "Value" and
2556 "Type".  Depending on output format, symbols can also have auxiliary
2557 attributes.
2558
2559    If you use a symbol without defining it, `as' assumes zero for all
2560 these attributes, and probably won't warn you.  This makes the symbol
2561 an externally defined symbol, which is generally what you would want.
2562
2563 * Menu:
2564
2565 * Symbol Value::                Value
2566 * Symbol Type::                 Type
2567
2568
2569 * a.out Symbols::               Symbol Attributes: `a.out'
2570
2571 * COFF Symbols::                Symbol Attributes for COFF
2572
2573 * SOM Symbols::                Symbol Attributes for SOM
2574
2575 \1f
2576 File: as.info,  Node: Symbol Value,  Next: Symbol Type,  Up: Symbol Attributes
2577
2578 5.5.1 Value
2579 -----------
2580
2581 The value of a symbol is (usually) 32 bits.  For a symbol which labels a
2582 location in the text, data, bss or absolute sections the value is the
2583 number of addresses from the start of that section to the label.
2584 Naturally for text, data and bss sections the value of a symbol changes
2585 as `ld' changes section base addresses during linking.  Absolute
2586 symbols' values do not change during linking: that is why they are
2587 called absolute.
2588
2589    The value of an undefined symbol is treated in a special way.  If it
2590 is 0 then the symbol is not defined in this assembler source file, and
2591 `ld' tries to determine its value from other files linked into the same
2592 program.  You make this kind of symbol simply by mentioning a symbol
2593 name without defining it.  A non-zero value represents a `.comm' common
2594 declaration.  The value is how much common storage to reserve, in bytes
2595 (addresses).  The symbol refers to the first address of the allocated
2596 storage.
2597
2598 \1f
2599 File: as.info,  Node: Symbol Type,  Next: a.out Symbols,  Prev: Symbol Value,  Up: Symbol Attributes
2600
2601 5.5.2 Type
2602 ----------
2603
2604 The type attribute of a symbol contains relocation (section)
2605 information, any flag settings indicating that a symbol is external, and
2606 (optionally), other information for linkers and debuggers.  The exact
2607 format depends on the object-code output format in use.
2608
2609 \1f
2610 File: as.info,  Node: a.out Symbols,  Next: COFF Symbols,  Prev: Symbol Type,  Up: Symbol Attributes
2611
2612 5.5.3 Symbol Attributes: `a.out'
2613 --------------------------------
2614
2615 * Menu:
2616
2617 * Symbol Desc::                 Descriptor
2618 * Symbol Other::                Other
2619
2620 \1f
2621 File: as.info,  Node: Symbol Desc,  Next: Symbol Other,  Up: a.out Symbols
2622
2623 5.5.3.1 Descriptor
2624 ..................
2625
2626 This is an arbitrary 16-bit value.  You may establish a symbol's
2627 descriptor value by using a `.desc' statement (*note `.desc': Desc.).
2628 A descriptor value means nothing to `as'.
2629
2630 \1f
2631 File: as.info,  Node: Symbol Other,  Prev: Symbol Desc,  Up: a.out Symbols
2632
2633 5.5.3.2 Other
2634 .............
2635
2636 This is an arbitrary 8-bit value.  It means nothing to `as'.
2637
2638 \1f
2639 File: as.info,  Node: COFF Symbols,  Next: SOM Symbols,  Prev: a.out Symbols,  Up: Symbol Attributes
2640
2641 5.5.4 Symbol Attributes for COFF
2642 --------------------------------
2643
2644 The COFF format supports a multitude of auxiliary symbol attributes;
2645 like the primary symbol attributes, they are set between `.def' and
2646 `.endef' directives.
2647
2648 5.5.4.1 Primary Attributes
2649 ..........................
2650
2651 The symbol name is set with `.def'; the value and type, respectively,
2652 with `.val' and `.type'.
2653
2654 5.5.4.2 Auxiliary Attributes
2655 ............................
2656
2657 The `as' directives `.dim', `.line', `.scl', `.size', `.tag', and
2658 `.weak' can generate auxiliary symbol table information for COFF.
2659
2660 \1f
2661 File: as.info,  Node: SOM Symbols,  Prev: COFF Symbols,  Up: Symbol Attributes
2662
2663 5.5.5 Symbol Attributes for SOM
2664 -------------------------------
2665
2666 The SOM format for the HPPA supports a multitude of symbol attributes
2667 set with the `.EXPORT' and `.IMPORT' directives.
2668
2669    The attributes are described in `HP9000 Series 800 Assembly Language
2670 Reference Manual' (HP 92432-90001) under the `IMPORT' and `EXPORT'
2671 assembler directive documentation.
2672
2673 \1f
2674 File: as.info,  Node: Expressions,  Next: Pseudo Ops,  Prev: Symbols,  Up: Top
2675
2676 6 Expressions
2677 *************
2678
2679 An "expression" specifies an address or numeric value.  Whitespace may
2680 precede and/or follow an expression.
2681
2682    The result of an expression must be an absolute number, or else an
2683 offset into a particular section.  If an expression is not absolute,
2684 and there is not enough information when `as' sees the expression to
2685 know its section, a second pass over the source program might be
2686 necessary to interpret the expression--but the second pass is currently
2687 not implemented.  `as' aborts with an error message in this situation.
2688
2689 * Menu:
2690
2691 * Empty Exprs::                 Empty Expressions
2692 * Integer Exprs::               Integer Expressions
2693
2694 \1f
2695 File: as.info,  Node: Empty Exprs,  Next: Integer Exprs,  Up: Expressions
2696
2697 6.1 Empty Expressions
2698 =====================
2699
2700 An empty expression has no value: it is just whitespace or null.
2701 Wherever an absolute expression is required, you may omit the
2702 expression, and `as' assumes a value of (absolute) 0.  This is
2703 compatible with other assemblers.
2704
2705 \1f
2706 File: as.info,  Node: Integer Exprs,  Prev: Empty Exprs,  Up: Expressions
2707
2708 6.2 Integer Expressions
2709 =======================
2710
2711 An "integer expression" is one or more _arguments_ delimited by
2712 _operators_.
2713
2714 * Menu:
2715
2716 * Arguments::                   Arguments
2717 * Operators::                   Operators
2718 * Prefix Ops::                  Prefix Operators
2719 * Infix Ops::                   Infix Operators
2720
2721 \1f
2722 File: as.info,  Node: Arguments,  Next: Operators,  Up: Integer Exprs
2723
2724 6.2.1 Arguments
2725 ---------------
2726
2727 "Arguments" are symbols, numbers or subexpressions.  In other contexts
2728 arguments are sometimes called "arithmetic operands".  In this manual,
2729 to avoid confusing them with the "instruction operands" of the machine
2730 language, we use the term "argument" to refer to parts of expressions
2731 only, reserving the word "operand" to refer only to machine instruction
2732 operands.
2733
2734    Symbols are evaluated to yield {SECTION NNN} where SECTION is one of
2735 text, data, bss, absolute, or undefined.  NNN is a signed, 2's
2736 complement 32 bit integer.
2737
2738    Numbers are usually integers.
2739
2740    A number can be a flonum or bignum.  In this case, you are warned
2741 that only the low order 32 bits are used, and `as' pretends these 32
2742 bits are an integer.  You may write integer-manipulating instructions
2743 that act on exotic constants, compatible with other assemblers.
2744
2745    Subexpressions are a left parenthesis `(' followed by an integer
2746 expression, followed by a right parenthesis `)'; or a prefix operator
2747 followed by an argument.
2748
2749 \1f
2750 File: as.info,  Node: Operators,  Next: Prefix Ops,  Prev: Arguments,  Up: Integer Exprs
2751
2752 6.2.2 Operators
2753 ---------------
2754
2755 "Operators" are arithmetic functions, like `+' or `%'.  Prefix
2756 operators are followed by an argument.  Infix operators appear between
2757 their arguments.  Operators may be preceded and/or followed by
2758 whitespace.
2759
2760 \1f
2761 File: as.info,  Node: Prefix Ops,  Next: Infix Ops,  Prev: Operators,  Up: Integer Exprs
2762
2763 6.2.3 Prefix Operator
2764 ---------------------
2765
2766 `as' has the following "prefix operators".  They each take one
2767 argument, which must be absolute.
2768
2769 `-'
2770      "Negation".  Two's complement negation.
2771
2772 `~'
2773      "Complementation".  Bitwise not.
2774
2775 \1f
2776 File: as.info,  Node: Infix Ops,  Prev: Prefix Ops,  Up: Integer Exprs
2777
2778 6.2.4 Infix Operators
2779 ---------------------
2780
2781 "Infix operators" take two arguments, one on either side.  Operators
2782 have precedence, but operations with equal precedence are performed left
2783 to right.  Apart from `+' or `-', both arguments must be absolute, and
2784 the result is absolute.
2785
2786   1. Highest Precedence
2787
2788     `*'
2789           "Multiplication".
2790
2791     `/'
2792           "Division".  Truncation is the same as the C operator `/'
2793
2794     `%'
2795           "Remainder".
2796
2797     `<<'
2798           "Shift Left".  Same as the C operator `<<'.
2799
2800     `>>'
2801           "Shift Right".  Same as the C operator `>>'.
2802
2803   2. Intermediate precedence
2804
2805     `|'
2806           "Bitwise Inclusive Or".
2807
2808     `&'
2809           "Bitwise And".
2810
2811     `^'
2812           "Bitwise Exclusive Or".
2813
2814     `!'
2815           "Bitwise Or Not".
2816
2817   3. Low Precedence
2818
2819     `+'
2820           "Addition".  If either argument is absolute, the result has
2821           the section of the other argument.  You may not add together
2822           arguments from different sections.
2823
2824     `-'
2825           "Subtraction".  If the right argument is absolute, the result
2826           has the section of the left argument.  If both arguments are
2827           in the same section, the result is absolute.  You may not
2828           subtract arguments from different sections.
2829
2830     `=='
2831           "Is Equal To"
2832
2833     `<>'
2834     `!='
2835           "Is Not Equal To"
2836
2837     `<'
2838           "Is Less Than"
2839
2840     `>'
2841           "Is Greater Than"
2842
2843     `>='
2844           "Is Greater Than Or Equal To"
2845
2846     `<='
2847           "Is Less Than Or Equal To"
2848
2849           The comparison operators can be used as infix operators.  A
2850           true results has a value of -1 whereas a false result has a
2851           value of 0.   Note, these operators perform signed
2852           comparisons.
2853
2854   4. Lowest Precedence
2855
2856     `&&'
2857           "Logical And".
2858
2859     `||'
2860           "Logical Or".
2861
2862           These two logical operations can be used to combine the
2863           results of sub expressions.  Note, unlike the comparison
2864           operators a true result returns a value of 1 but a false
2865           results does still return 0.  Also note that the logical or
2866           operator has a slightly lower precedence than logical and.
2867
2868
2869    In short, it's only meaningful to add or subtract the _offsets_ in an
2870 address; you can only have a defined section in one of the two
2871 arguments.
2872
2873 \1f
2874 File: as.info,  Node: Pseudo Ops,  Next: Object Attributes,  Prev: Expressions,  Up: Top
2875
2876 7 Assembler Directives
2877 **********************
2878
2879 All assembler directives have names that begin with a period (`.').
2880 The rest of the name is letters, usually in lower case.
2881
2882    This chapter discusses directives that are available regardless of
2883 the target machine configuration for the GNU assembler.  Some machine
2884 configurations provide additional directives.  *Note Machine
2885 Dependencies::.
2886
2887 * Menu:
2888
2889 * Abort::                       `.abort'
2890
2891 * ABORT (COFF)::                `.ABORT'
2892
2893 * Align::                       `.align ABS-EXPR , ABS-EXPR'
2894 * Altmacro::                    `.altmacro'
2895 * Ascii::                       `.ascii "STRING"'...
2896 * Asciz::                       `.asciz "STRING"'...
2897 * Balign::                      `.balign ABS-EXPR , ABS-EXPR'
2898 * Bundle directives::           `.bundle_align_mode ABS-EXPR', `.bundle_lock', `.bundle_unlock'
2899 * Byte::                        `.byte EXPRESSIONS'
2900 * CFI directives::              `.cfi_startproc [simple]', `.cfi_endproc', etc.
2901 * Comm::                        `.comm SYMBOL , LENGTH '
2902 * Data::                        `.data SUBSECTION'
2903
2904 * Def::                         `.def NAME'
2905
2906 * Desc::                        `.desc SYMBOL, ABS-EXPRESSION'
2907
2908 * Dim::                         `.dim'
2909
2910 * Double::                      `.double FLONUMS'
2911 * Eject::                       `.eject'
2912 * Else::                        `.else'
2913 * Elseif::                      `.elseif'
2914 * End::                         `.end'
2915
2916 * Endef::                       `.endef'
2917
2918 * Endfunc::                     `.endfunc'
2919 * Endif::                       `.endif'
2920 * Equ::                         `.equ SYMBOL, EXPRESSION'
2921 * Equiv::                       `.equiv SYMBOL, EXPRESSION'
2922 * Eqv::                         `.eqv SYMBOL, EXPRESSION'
2923 * Err::                         `.err'
2924 * Error::                       `.error STRING'
2925 * Exitm::                       `.exitm'
2926 * Extern::                      `.extern'
2927 * Fail::                        `.fail'
2928 * File::                        `.file'
2929 * Fill::                        `.fill REPEAT , SIZE , VALUE'
2930 * Float::                       `.float FLONUMS'
2931 * Func::                        `.func'
2932 * Global::                      `.global SYMBOL', `.globl SYMBOL'
2933
2934 * Gnu_attribute::               `.gnu_attribute TAG,VALUE'
2935 * Hidden::                      `.hidden NAMES'
2936
2937 * hword::                       `.hword EXPRESSIONS'
2938 * Ident::                       `.ident'
2939 * If::                          `.if ABSOLUTE EXPRESSION'
2940 * Incbin::                      `.incbin "FILE"[,SKIP[,COUNT]]'
2941 * Include::                     `.include "FILE"'
2942 * Int::                         `.int EXPRESSIONS'
2943
2944 * Internal::                    `.internal NAMES'
2945
2946 * Irp::                         `.irp SYMBOL,VALUES'...
2947 * Irpc::                        `.irpc SYMBOL,VALUES'...
2948 * Lcomm::                       `.lcomm SYMBOL , LENGTH'
2949 * Lflags::                      `.lflags'
2950
2951 * Line::                        `.line LINE-NUMBER'
2952
2953 * Linkonce::                    `.linkonce [TYPE]'
2954 * List::                        `.list'
2955 * Ln::                          `.ln LINE-NUMBER'
2956 * Loc::                         `.loc FILENO LINENO'
2957 * Loc_mark_labels::             `.loc_mark_labels ENABLE'
2958
2959 * Local::                       `.local NAMES'
2960
2961 * Long::                        `.long EXPRESSIONS'
2962
2963 * Macro::                       `.macro NAME ARGS'...
2964 * MRI::                         `.mri VAL'
2965 * Noaltmacro::                  `.noaltmacro'
2966 * Nolist::                      `.nolist'
2967 * Octa::                        `.octa BIGNUMS'
2968 * Offset::                      `.offset LOC'
2969 * Org::                         `.org NEW-LC, FILL'
2970 * P2align::                     `.p2align ABS-EXPR, ABS-EXPR, ABS-EXPR'
2971
2972 * PopSection::                  `.popsection'
2973 * Previous::                    `.previous'
2974
2975 * Print::                       `.print STRING'
2976
2977 * Protected::                   `.protected NAMES'
2978
2979 * Psize::                       `.psize LINES, COLUMNS'
2980 * Purgem::                      `.purgem NAME'
2981
2982 * PushSection::                 `.pushsection NAME'
2983
2984 * Quad::                        `.quad BIGNUMS'
2985 * Reloc::                       `.reloc OFFSET, RELOC_NAME[, EXPRESSION]'
2986 * Rept::                        `.rept COUNT'
2987 * Sbttl::                       `.sbttl "SUBHEADING"'
2988
2989 * Scl::                         `.scl CLASS'
2990
2991 * Section::                     `.section NAME[, FLAGS]'
2992
2993 * Set::                         `.set SYMBOL, EXPRESSION'
2994 * Short::                       `.short EXPRESSIONS'
2995 * Single::                      `.single FLONUMS'
2996
2997 * Size::                        `.size [NAME , EXPRESSION]'
2998
2999 * Skip::                        `.skip SIZE , FILL'
3000
3001 * Sleb128::                     `.sleb128 EXPRESSIONS'
3002
3003 * Space::                       `.space SIZE , FILL'
3004
3005 * Stab::                        `.stabd, .stabn, .stabs'
3006
3007 * String::                      `.string "STR"', `.string8 "STR"', `.string16 "STR"', `.string32 "STR"', `.string64 "STR"'
3008 * Struct::                      `.struct EXPRESSION'
3009
3010 * SubSection::                  `.subsection'
3011 * Symver::                      `.symver NAME,NAME2@NODENAME'
3012
3013
3014 * Tag::                         `.tag STRUCTNAME'
3015
3016 * Text::                        `.text SUBSECTION'
3017 * Title::                       `.title "HEADING"'
3018
3019 * Type::                        `.type <INT | NAME , TYPE DESCRIPTION>'
3020
3021 * Uleb128::                     `.uleb128 EXPRESSIONS'
3022
3023 * Val::                         `.val ADDR'
3024
3025
3026 * Version::                     `.version "STRING"'
3027 * VTableEntry::                 `.vtable_entry TABLE, OFFSET'
3028 * VTableInherit::               `.vtable_inherit CHILD, PARENT'
3029
3030 * Warning::                     `.warning STRING'
3031 * Weak::                        `.weak NAMES'
3032 * Weakref::                     `.weakref ALIAS, SYMBOL'
3033 * Word::                        `.word EXPRESSIONS'
3034 * Deprecated::                  Deprecated Directives
3035
3036 \1f
3037 File: as.info,  Node: Abort,  Next: ABORT (COFF),  Up: Pseudo Ops
3038
3039 7.1 `.abort'
3040 ============
3041
3042 This directive stops the assembly immediately.  It is for compatibility
3043 with other assemblers.  The original idea was that the assembly
3044 language source would be piped into the assembler.  If the sender of
3045 the source quit, it could use this directive tells `as' to quit also.
3046 One day `.abort' will not be supported.
3047
3048 \1f
3049 File: as.info,  Node: ABORT (COFF),  Next: Align,  Prev: Abort,  Up: Pseudo Ops
3050
3051 7.2 `.ABORT' (COFF)
3052 ===================
3053
3054 When producing COFF output, `as' accepts this directive as a synonym
3055 for `.abort'.
3056
3057 \1f
3058 File: as.info,  Node: Align,  Next: Altmacro,  Prev: ABORT (COFF),  Up: Pseudo Ops
3059
3060 7.3 `.align ABS-EXPR, ABS-EXPR, ABS-EXPR'
3061 =========================================
3062
3063 Pad the location counter (in the current subsection) to a particular
3064 storage boundary.  The first expression (which must be absolute) is the
3065 alignment required, as described below.
3066
3067    The second expression (also absolute) gives the fill value to be
3068 stored in the padding bytes.  It (and the comma) may be omitted.  If it
3069 is omitted, the padding bytes are normally zero.  However, on some
3070 systems, if the section is marked as containing code and the fill value
3071 is omitted, the space is filled with no-op instructions.
3072
3073    The third expression is also absolute, and is also optional.  If it
3074 is present, it is the maximum number of bytes that should be skipped by
3075 this alignment directive.  If doing the alignment would require
3076 skipping more bytes than the specified maximum, then the alignment is
3077 not done at all.  You can omit the fill value (the second argument)
3078 entirely by simply using two commas after the required alignment; this
3079 can be useful if you want the alignment to be filled with no-op
3080 instructions when appropriate.
3081
3082    The way the required alignment is specified varies from system to
3083 system.  For the arc, hppa, i386 using ELF, i860, iq2000, m68k, or32,
3084 s390, sparc, tic4x, tic80 and xtensa, the first expression is the
3085 alignment request in bytes.  For example `.align 8' advances the
3086 location counter until it is a multiple of 8.  If the location counter
3087 is already a multiple of 8, no change is needed.  For the tic54x, the
3088 first expression is the alignment request in words.
3089
3090    For other systems, including ppc, i386 using a.out format, arm and
3091 strongarm, it is the number of low-order zero bits the location counter
3092 must have after advancement.  For example `.align 3' advances the
3093 location counter until it a multiple of 8.  If the location counter is
3094 already a multiple of 8, no change is needed.
3095
3096    This inconsistency is due to the different behaviors of the various
3097 native assemblers for these systems which GAS must emulate.  GAS also
3098 provides `.balign' and `.p2align' directives, described later, which
3099 have a consistent behavior across all architectures (but are specific
3100 to GAS).
3101
3102 \1f
3103 File: as.info,  Node: Altmacro,  Next: Ascii,  Prev: Align,  Up: Pseudo Ops
3104
3105 7.4 `.altmacro'
3106 ===============
3107
3108 Enable alternate macro mode, enabling:
3109
3110 `LOCAL NAME [ , ... ]'
3111      One additional directive, `LOCAL', is available.  It is used to
3112      generate a string replacement for each of the NAME arguments, and
3113      replace any instances of NAME in each macro expansion.  The
3114      replacement string is unique in the assembly, and different for
3115      each separate macro expansion.  `LOCAL' allows you to write macros
3116      that define symbols, without fear of conflict between separate
3117      macro expansions.
3118
3119 `String delimiters'
3120      You can write strings delimited in these other ways besides
3121      `"STRING"':
3122
3123     `'STRING''
3124           You can delimit strings with single-quote characters.
3125
3126     `<STRING>'
3127           You can delimit strings with matching angle brackets.
3128
3129 `single-character string escape'
3130      To include any single character literally in a string (even if the
3131      character would otherwise have some special meaning), you can
3132      prefix the character with `!' (an exclamation mark).  For example,
3133      you can write `<4.3 !> 5.4!!>' to get the literal text `4.3 >
3134      5.4!'.
3135
3136 `Expression results as strings'
3137      You can write `%EXPR' to evaluate the expression EXPR and use the
3138      result as a string.
3139
3140 \1f
3141 File: as.info,  Node: Ascii,  Next: Asciz,  Prev: Altmacro,  Up: Pseudo Ops
3142
3143 7.5 `.ascii "STRING"'...
3144 ========================
3145
3146 `.ascii' expects zero or more string literals (*note Strings::)
3147 separated by commas.  It assembles each string (with no automatic
3148 trailing zero byte) into consecutive addresses.
3149
3150 \1f
3151 File: as.info,  Node: Asciz,  Next: Balign,  Prev: Ascii,  Up: Pseudo Ops
3152
3153 7.6 `.asciz "STRING"'...
3154 ========================
3155
3156 `.asciz' is just like `.ascii', but each string is followed by a zero
3157 byte.  The "z" in `.asciz' stands for "zero".
3158
3159 \1f
3160 File: as.info,  Node: Balign,  Next: Bundle directives,  Prev: Asciz,  Up: Pseudo Ops
3161
3162 7.7 `.balign[wl] ABS-EXPR, ABS-EXPR, ABS-EXPR'
3163 ==============================================
3164
3165 Pad the location counter (in the current subsection) to a particular
3166 storage boundary.  The first expression (which must be absolute) is the
3167 alignment request in bytes.  For example `.balign 8' advances the
3168 location counter until it is a multiple of 8.  If the location counter
3169 is already a multiple of 8, no change is needed.
3170
3171    The second expression (also absolute) gives the fill value to be
3172 stored in the padding bytes.  It (and the comma) may be omitted.  If it
3173 is omitted, the padding bytes are normally zero.  However, on some
3174 systems, if the section is marked as containing code and the fill value
3175 is omitted, the space is filled with no-op instructions.
3176
3177    The third expression is also absolute, and is also optional.  If it
3178 is present, it is the maximum number of bytes that should be skipped by
3179 this alignment directive.  If doing the alignment would require
3180 skipping more bytes than the specified maximum, then the alignment is
3181 not done at all.  You can omit the fill value (the second argument)
3182 entirely by simply using two commas after the required alignment; this
3183 can be useful if you want the alignment to be filled with no-op
3184 instructions when appropriate.
3185
3186    The `.balignw' and `.balignl' directives are variants of the
3187 `.balign' directive.  The `.balignw' directive treats the fill pattern
3188 as a two byte word value.  The `.balignl' directives treats the fill
3189 pattern as a four byte longword value.  For example, `.balignw
3190 4,0x368d' will align to a multiple of 4.  If it skips two bytes, they
3191 will be filled in with the value 0x368d (the exact placement of the
3192 bytes depends upon the endianness of the processor).  If it skips 1 or
3193 3 bytes, the fill value is undefined.
3194
3195 \1f
3196 File: as.info,  Node: Bundle directives,  Next: Byte,  Prev: Balign,  Up: Pseudo Ops
3197
3198 7.8 `.bundle_align_mode ABS-EXPR'
3199 =================================
3200
3201 `.bundle_align_mode' enables or disables "aligned instruction bundle"
3202 mode.  In this mode, sequences of adjacent instructions are grouped
3203 into fixed-sized "bundles".  If the argument is zero, this mode is
3204 disabled (which is the default state).  If the argument it not zero, it
3205 gives the size of an instruction bundle as a power of two (as for the
3206 `.p2align' directive, *note P2align::).
3207
3208    For some targets, it's an ABI requirement that no instruction may
3209 span a certain aligned boundary.  A "bundle" is simply a sequence of
3210 instructions that starts on an aligned boundary.  For example, if
3211 ABS-EXPR is `5' then the bundle size is 32, so each aligned chunk of 32
3212 bytes is a bundle.  When aligned instruction bundle mode is in effect,
3213 no single instruction may span a boundary between bundles.  If an
3214 instruction would start too close to the end of a bundle for the length
3215 of that particular instruction to fit within the bundle, then the space
3216 at the end of that bundle is filled with no-op instructions so the
3217 instruction starts in the next bundle.  As a corollary, it's an error
3218 if any single instruction's encoding is longer than the bundle size.
3219
3220 7.9 `.bundle_lock' and `.bundle_unlock'
3221 =======================================
3222
3223 The `.bundle_lock' and directive `.bundle_unlock' directives allow
3224 explicit control over instruction bundle padding.  These directives are
3225 only valid when `.bundle_align_mode' has been used to enable aligned
3226 instruction bundle mode.  It's an error if they appear when
3227 `.bundle_align_mode' has not been used at all, or when the last
3228 directive was `.bundle_align_mode 0'.
3229
3230    For some targets, it's an ABI requirement that certain instructions
3231 may appear only as part of specified permissible sequences of multiple
3232 instructions, all within the same bundle.  A pair of `.bundle_lock' and
3233 `.bundle_unlock' directives define a "bundle-locked" instruction
3234 sequence.  For purposes of aligned instruction bundle mode, a sequence
3235 starting with `.bundle_lock' and ending with `.bundle_unlock' is
3236 treated as a single instruction.  That is, the entire sequence must fit
3237 into a single bundle and may not span a bundle boundary.  If necessary,
3238 no-op instructions will be inserted before the first instruction of the
3239 sequence so that the whole sequence starts on an aligned bundle
3240 boundary.  It's an error if the sequence is longer than the bundle size.
3241
3242    For convenience when using `.bundle_lock' and `.bundle_unlock'
3243 inside assembler macros (*note Macro::), bundle-locked sequences may be
3244 nested.  That is, a second `.bundle_lock' directive before the next
3245 `.bundle_unlock' directive has no effect except that it must be matched
3246 by another closing `.bundle_unlock' so that there is the same number of
3247 `.bundle_lock' and `.bundle_unlock' directives.
3248
3249 \1f
3250 File: as.info,  Node: Byte,  Next: CFI directives,  Prev: Bundle directives,  Up: Pseudo Ops
3251
3252 7.10 `.byte EXPRESSIONS'
3253 ========================
3254
3255 `.byte' expects zero or more expressions, separated by commas.  Each
3256 expression is assembled into the next byte.
3257
3258 \1f
3259 File: as.info,  Node: CFI directives,  Next: Comm,  Prev: Byte,  Up: Pseudo Ops
3260
3261 7.11 `.cfi_sections SECTION_LIST'
3262 =================================
3263
3264 `.cfi_sections' may be used to specify whether CFI directives should
3265 emit `.eh_frame' section and/or `.debug_frame' section.  If
3266 SECTION_LIST is `.eh_frame', `.eh_frame' is emitted, if SECTION_LIST is
3267 `.debug_frame', `.debug_frame' is emitted.  To emit both use
3268 `.eh_frame, .debug_frame'.  The default if this directive is not used
3269 is `.cfi_sections .eh_frame'.
3270
3271 7.12 `.cfi_startproc [simple]'
3272 ==============================
3273
3274 `.cfi_startproc' is used at the beginning of each function that should
3275 have an entry in `.eh_frame'. It initializes some internal data
3276 structures. Don't forget to close the function by `.cfi_endproc'.
3277
3278    Unless `.cfi_startproc' is used along with parameter `simple' it
3279 also emits some architecture dependent initial CFI instructions.
3280
3281 7.13 `.cfi_endproc'
3282 ===================
3283
3284 `.cfi_endproc' is used at the end of a function where it closes its
3285 unwind entry previously opened by `.cfi_startproc', and emits it to
3286 `.eh_frame'.
3287
3288 7.14 `.cfi_personality ENCODING [, EXP]'
3289 ========================================
3290
3291 `.cfi_personality' defines personality routine and its encoding.
3292 ENCODING must be a constant determining how the personality should be
3293 encoded.  If it is 255 (`DW_EH_PE_omit'), second argument is not
3294 present, otherwise second argument should be a constant or a symbol
3295 name.  When using indirect encodings, the symbol provided should be the
3296 location where personality can be loaded from, not the personality
3297 routine itself.  The default after `.cfi_startproc' is
3298 `.cfi_personality 0xff', no personality routine.
3299
3300 7.15 `.cfi_lsda ENCODING [, EXP]'
3301 =================================
3302
3303 `.cfi_lsda' defines LSDA and its encoding.  ENCODING must be a constant
3304 determining how the LSDA should be encoded.  If it is 255
3305 (`DW_EH_PE_omit'), second argument is not present, otherwise second
3306 argument should be a constant or a symbol name.  The default after
3307 `.cfi_startproc' is `.cfi_lsda 0xff', no LSDA.
3308
3309 7.16 `.cfi_def_cfa REGISTER, OFFSET'
3310 ====================================
3311
3312 `.cfi_def_cfa' defines a rule for computing CFA as: take address from
3313 REGISTER and add OFFSET to it.
3314
3315 7.17 `.cfi_def_cfa_register REGISTER'
3316 =====================================
3317
3318 `.cfi_def_cfa_register' modifies a rule for computing CFA. From now on
3319 REGISTER will be used instead of the old one. Offset remains the same.
3320
3321 7.18 `.cfi_def_cfa_offset OFFSET'
3322 =================================
3323
3324 `.cfi_def_cfa_offset' modifies a rule for computing CFA. Register
3325 remains the same, but OFFSET is new. Note that it is the absolute
3326 offset that will be added to a defined register to compute CFA address.
3327
3328 7.19 `.cfi_adjust_cfa_offset OFFSET'
3329 ====================================
3330
3331 Same as `.cfi_def_cfa_offset' but OFFSET is a relative value that is
3332 added/substracted from the previous offset.
3333
3334 7.20 `.cfi_offset REGISTER, OFFSET'
3335 ===================================
3336
3337 Previous value of REGISTER is saved at offset OFFSET from CFA.
3338
3339 7.21 `.cfi_rel_offset REGISTER, OFFSET'
3340 =======================================
3341
3342 Previous value of REGISTER is saved at offset OFFSET from the current
3343 CFA register.  This is transformed to `.cfi_offset' using the known
3344 displacement of the CFA register from the CFA.  This is often easier to
3345 use, because the number will match the code it's annotating.
3346
3347 7.22 `.cfi_register REGISTER1, REGISTER2'
3348 =========================================
3349
3350 Previous value of REGISTER1 is saved in register REGISTER2.
3351
3352 7.23 `.cfi_restore REGISTER'
3353 ============================
3354
3355 `.cfi_restore' says that the rule for REGISTER is now the same as it
3356 was at the beginning of the function, after all initial instruction
3357 added by `.cfi_startproc' were executed.
3358
3359 7.24 `.cfi_undefined REGISTER'
3360 ==============================
3361
3362 From now on the previous value of REGISTER can't be restored anymore.
3363
3364 7.25 `.cfi_same_value REGISTER'
3365 ===============================
3366
3367 Current value of REGISTER is the same like in the previous frame, i.e.
3368 no restoration needed.
3369
3370 7.26 `.cfi_remember_state',
3371 ===========================
3372
3373 First save all current rules for all registers by `.cfi_remember_state',
3374 then totally screw them up by subsequent `.cfi_*' directives and when
3375 everything is hopelessly bad, use `.cfi_restore_state' to restore the
3376 previous saved state.
3377
3378 7.27 `.cfi_return_column REGISTER'
3379 ==================================
3380
3381 Change return column REGISTER, i.e. the return address is either
3382 directly in REGISTER or can be accessed by rules for REGISTER.
3383
3384 7.28 `.cfi_signal_frame'
3385 ========================
3386
3387 Mark current function as signal trampoline.
3388
3389 7.29 `.cfi_window_save'
3390 =======================
3391
3392 SPARC register window has been saved.
3393
3394 7.30 `.cfi_escape' EXPRESSION[, ...]
3395 ====================================
3396
3397 Allows the user to add arbitrary bytes to the unwind info.  One might
3398 use this to add OS-specific CFI opcodes, or generic CFI opcodes that
3399 GAS does not yet support.
3400
3401 7.31 `.cfi_val_encoded_addr REGISTER, ENCODING, LABEL'
3402 ======================================================
3403
3404 The current value of REGISTER is LABEL.  The value of LABEL will be
3405 encoded in the output file according to ENCODING; see the description
3406 of `.cfi_personality' for details on this encoding.
3407
3408    The usefulness of equating a register to a fixed label is probably
3409 limited to the return address register.  Here, it can be useful to mark
3410 a code segment that has only one return address which is reached by a
3411 direct branch and no copy of the return address exists in memory or
3412 another register.
3413
3414 \1f
3415 File: as.info,  Node: Comm,  Next: Data,  Prev: CFI directives,  Up: Pseudo Ops
3416
3417 7.32 `.comm SYMBOL , LENGTH '
3418 =============================
3419
3420 `.comm' declares a common symbol named SYMBOL.  When linking, a common
3421 symbol in one object file may be merged with a defined or common symbol
3422 of the same name in another object file.  If `ld' does not see a
3423 definition for the symbol-just one or more common symbols-then it will
3424 allocate LENGTH bytes of uninitialized memory.  LENGTH must be an
3425 absolute expression.  If `ld' sees multiple common symbols with the
3426 same name, and they do not all have the same size, it will allocate
3427 space using the largest size.
3428
3429    When using ELF or (as a GNU extension) PE, the `.comm' directive
3430 takes an optional third argument.  This is the desired alignment of the
3431 symbol, specified for ELF as a byte boundary (for example, an alignment
3432 of 16 means that the least significant 4 bits of the address should be
3433 zero), and for PE as a power of two (for example, an alignment of 5
3434 means aligned to a 32-byte boundary).  The alignment must be an
3435 absolute expression, and it must be a power of two.  If `ld' allocates
3436 uninitialized memory for the common symbol, it will use the alignment
3437 when placing the symbol.  If no alignment is specified, `as' will set
3438 the alignment to the largest power of two less than or equal to the
3439 size of the symbol, up to a maximum of 16 on ELF, or the default
3440 section alignment of 4 on PE(1).
3441
3442    The syntax for `.comm' differs slightly on the HPPA.  The syntax is
3443 `SYMBOL .comm, LENGTH'; SYMBOL is optional.
3444
3445    ---------- Footnotes ----------
3446
3447    (1) This is not the same as the executable image file alignment
3448 controlled by `ld''s `--section-alignment' option; image file sections
3449 in PE are aligned to multiples of 4096, which is far too large an
3450 alignment for ordinary variables.  It is rather the default alignment
3451 for (non-debug) sections within object (`*.o') files, which are less
3452 strictly aligned.
3453
3454 \1f
3455 File: as.info,  Node: Data,  Next: Def,  Prev: Comm,  Up: Pseudo Ops
3456
3457 7.33 `.data SUBSECTION'
3458 =======================
3459
3460 `.data' tells `as' to assemble the following statements onto the end of
3461 the data subsection numbered SUBSECTION (which is an absolute
3462 expression).  If SUBSECTION is omitted, it defaults to zero.
3463
3464 \1f
3465 File: as.info,  Node: Def,  Next: Desc,  Prev: Data,  Up: Pseudo Ops
3466
3467 7.34 `.def NAME'
3468 ================
3469
3470 Begin defining debugging information for a symbol NAME; the definition
3471 extends until the `.endef' directive is encountered.
3472
3473 \1f
3474 File: as.info,  Node: Desc,  Next: Dim,  Prev: Def,  Up: Pseudo Ops
3475
3476 7.35 `.desc SYMBOL, ABS-EXPRESSION'
3477 ===================================
3478
3479 This directive sets the descriptor of the symbol (*note Symbol
3480 Attributes::) to the low 16 bits of an absolute expression.
3481
3482    The `.desc' directive is not available when `as' is configured for
3483 COFF output; it is only for `a.out' or `b.out' object format.  For the
3484 sake of compatibility, `as' accepts it, but produces no output, when
3485 configured for COFF.
3486
3487 \1f
3488 File: as.info,  Node: Dim,  Next: Double,  Prev: Desc,  Up: Pseudo Ops
3489
3490 7.36 `.dim'
3491 ===========
3492
3493 This directive is generated by compilers to include auxiliary debugging
3494 information in the symbol table.  It is only permitted inside
3495 `.def'/`.endef' pairs.
3496
3497 \1f
3498 File: as.info,  Node: Double,  Next: Eject,  Prev: Dim,  Up: Pseudo Ops
3499
3500 7.37 `.double FLONUMS'
3501 ======================
3502
3503 `.double' expects zero or more flonums, separated by commas.  It
3504 assembles floating point numbers.  The exact kind of floating point
3505 numbers emitted depends on how `as' is configured.  *Note Machine
3506 Dependencies::.
3507
3508 \1f
3509 File: as.info,  Node: Eject,  Next: Else,  Prev: Double,  Up: Pseudo Ops
3510
3511 7.38 `.eject'
3512 =============
3513
3514 Force a page break at this point, when generating assembly listings.
3515
3516 \1f
3517 File: as.info,  Node: Else,  Next: Elseif,  Prev: Eject,  Up: Pseudo Ops
3518
3519 7.39 `.else'
3520 ============
3521
3522 `.else' is part of the `as' support for conditional assembly; see *Note
3523 `.if': If.  It marks the beginning of a section of code to be assembled
3524 if the condition for the preceding `.if' was false.
3525
3526 \1f
3527 File: as.info,  Node: Elseif,  Next: End,  Prev: Else,  Up: Pseudo Ops
3528
3529 7.40 `.elseif'
3530 ==============
3531
3532 `.elseif' is part of the `as' support for conditional assembly; see
3533 *Note `.if': If.  It is shorthand for beginning a new `.if' block that
3534 would otherwise fill the entire `.else' section.
3535
3536 \1f
3537 File: as.info,  Node: End,  Next: Endef,  Prev: Elseif,  Up: Pseudo Ops
3538
3539 7.41 `.end'
3540 ===========
3541
3542 `.end' marks the end of the assembly file.  `as' does not process
3543 anything in the file past the `.end' directive.
3544
3545 \1f
3546 File: as.info,  Node: Endef,  Next: Endfunc,  Prev: End,  Up: Pseudo Ops
3547
3548 7.42 `.endef'
3549 =============
3550
3551 This directive flags the end of a symbol definition begun with `.def'.
3552
3553 \1f
3554 File: as.info,  Node: Endfunc,  Next: Endif,  Prev: Endef,  Up: Pseudo Ops
3555
3556 7.43 `.endfunc'
3557 ===============
3558
3559 `.endfunc' marks the end of a function specified with `.func'.
3560
3561 \1f
3562 File: as.info,  Node: Endif,  Next: Equ,  Prev: Endfunc,  Up: Pseudo Ops
3563
3564 7.44 `.endif'
3565 =============
3566
3567 `.endif' is part of the `as' support for conditional assembly; it marks
3568 the end of a block of code that is only assembled conditionally.  *Note
3569 `.if': If.
3570
3571 \1f
3572 File: as.info,  Node: Equ,  Next: Equiv,  Prev: Endif,  Up: Pseudo Ops
3573
3574 7.45 `.equ SYMBOL, EXPRESSION'
3575 ==============================
3576
3577 This directive sets the value of SYMBOL to EXPRESSION.  It is
3578 synonymous with `.set'; see *Note `.set': Set.
3579
3580    The syntax for `equ' on the HPPA is `SYMBOL .equ EXPRESSION'.
3581
3582    The syntax for `equ' on the Z80 is `SYMBOL equ EXPRESSION'.  On the
3583 Z80 it is an eror if SYMBOL is already defined, but the symbol is not
3584 protected from later redefinition.  Compare *Note Equiv::.
3585
3586 \1f
3587 File: as.info,  Node: Equiv,  Next: Eqv,  Prev: Equ,  Up: Pseudo Ops
3588
3589 7.46 `.equiv SYMBOL, EXPRESSION'
3590 ================================
3591
3592 The `.equiv' directive is like `.equ' and `.set', except that the
3593 assembler will signal an error if SYMBOL is already defined.  Note a
3594 symbol which has been referenced but not actually defined is considered
3595 to be undefined.
3596
3597    Except for the contents of the error message, this is roughly
3598 equivalent to
3599      .ifdef SYM
3600      .err
3601      .endif
3602      .equ SYM,VAL
3603    plus it protects the symbol from later redefinition.
3604
3605 \1f
3606 File: as.info,  Node: Eqv,  Next: Err,  Prev: Equiv,  Up: Pseudo Ops
3607
3608 7.47 `.eqv SYMBOL, EXPRESSION'
3609 ==============================
3610
3611 The `.eqv' directive is like `.equiv', but no attempt is made to
3612 evaluate the expression or any part of it immediately.  Instead each
3613 time the resulting symbol is used in an expression, a snapshot of its
3614 current value is taken.
3615
3616 \1f
3617 File: as.info,  Node: Err,  Next: Error,  Prev: Eqv,  Up: Pseudo Ops
3618
3619 7.48 `.err'
3620 ===========
3621
3622 If `as' assembles a `.err' directive, it will print an error message
3623 and, unless the `-Z' option was used, it will not generate an object
3624 file.  This can be used to signal an error in conditionally compiled
3625 code.
3626
3627 \1f
3628 File: as.info,  Node: Error,  Next: Exitm,  Prev: Err,  Up: Pseudo Ops
3629
3630 7.49 `.error "STRING"'
3631 ======================
3632
3633 Similarly to `.err', this directive emits an error, but you can specify
3634 a string that will be emitted as the error message.  If you don't
3635 specify the message, it defaults to `".error directive invoked in
3636 source file"'.  *Note Error and Warning Messages: Errors.
3637
3638       .error "This code has not been assembled and tested."
3639
3640 \1f
3641 File: as.info,  Node: Exitm,  Next: Extern,  Prev: Error,  Up: Pseudo Ops
3642
3643 7.50 `.exitm'
3644 =============
3645
3646 Exit early from the current macro definition.  *Note Macro::.
3647
3648 \1f
3649 File: as.info,  Node: Extern,  Next: Fail,  Prev: Exitm,  Up: Pseudo Ops
3650
3651 7.51 `.extern'
3652 ==============
3653
3654 `.extern' is accepted in the source program--for compatibility with
3655 other assemblers--but it is ignored.  `as' treats all undefined symbols
3656 as external.
3657
3658 \1f
3659 File: as.info,  Node: Fail,  Next: File,  Prev: Extern,  Up: Pseudo Ops
3660
3661 7.52 `.fail EXPRESSION'
3662 =======================
3663
3664 Generates an error or a warning.  If the value of the EXPRESSION is 500
3665 or more, `as' will print a warning message.  If the value is less than
3666 500, `as' will print an error message.  The message will include the
3667 value of EXPRESSION.  This can occasionally be useful inside complex
3668 nested macros or conditional assembly.
3669
3670 \1f
3671 File: as.info,  Node: File,  Next: Fill,  Prev: Fail,  Up: Pseudo Ops
3672
3673 7.53 `.file'
3674 ============
3675
3676 There are two different versions of the `.file' directive.  Targets
3677 that support DWARF2 line number information use the DWARF2 version of
3678 `.file'.  Other targets use the default version.
3679
3680 Default Version
3681 ---------------
3682
3683 This version of the `.file' directive tells `as' that we are about to
3684 start a new logical file.  The syntax is:
3685
3686      .file STRING
3687
3688    STRING is the new file name.  In general, the filename is recognized
3689 whether or not it is surrounded by quotes `"'; but if you wish to
3690 specify an empty file name, you must give the quotes-`""'.  This
3691 statement may go away in future: it is only recognized to be compatible
3692 with old `as' programs.
3693
3694 DWARF2 Version
3695 --------------
3696
3697 When emitting DWARF2 line number information, `.file' assigns filenames
3698 to the `.debug_line' file name table.  The syntax is:
3699
3700      .file FILENO FILENAME
3701
3702    The FILENO operand should be a unique positive integer to use as the
3703 index of the entry in the table.  The FILENAME operand is a C string
3704 literal.
3705
3706    The detail of filename indices is exposed to the user because the
3707 filename table is shared with the `.debug_info' section of the DWARF2
3708 debugging information, and thus the user must know the exact indices
3709 that table entries will have.
3710
3711 \1f
3712 File: as.info,  Node: Fill,  Next: Float,  Prev: File,  Up: Pseudo Ops
3713
3714 7.54 `.fill REPEAT , SIZE , VALUE'
3715 ==================================
3716
3717 REPEAT, SIZE and VALUE are absolute expressions.  This emits REPEAT
3718 copies of SIZE bytes.  REPEAT may be zero or more.  SIZE may be zero or
3719 more, but if it is more than 8, then it is deemed to have the value 8,
3720 compatible with other people's assemblers.  The contents of each REPEAT
3721 bytes is taken from an 8-byte number.  The highest order 4 bytes are
3722 zero.  The lowest order 4 bytes are VALUE rendered in the byte-order of
3723 an integer on the computer `as' is assembling for.  Each SIZE bytes in
3724 a repetition is taken from the lowest order SIZE bytes of this number.
3725 Again, this bizarre behavior is compatible with other people's
3726 assemblers.
3727
3728    SIZE and VALUE are optional.  If the second comma and VALUE are
3729 absent, VALUE is assumed zero.  If the first comma and following tokens
3730 are absent, SIZE is assumed to be 1.
3731
3732 \1f
3733 File: as.info,  Node: Float,  Next: Func,  Prev: Fill,  Up: Pseudo Ops
3734
3735 7.55 `.float FLONUMS'
3736 =====================
3737
3738 This directive assembles zero or more flonums, separated by commas.  It
3739 has the same effect as `.single'.  The exact kind of floating point
3740 numbers emitted depends on how `as' is configured.  *Note Machine
3741 Dependencies::.
3742
3743 \1f
3744 File: as.info,  Node: Func,  Next: Global,  Prev: Float,  Up: Pseudo Ops
3745
3746 7.56 `.func NAME[,LABEL]'
3747 =========================
3748
3749 `.func' emits debugging information to denote function NAME, and is
3750 ignored unless the file is assembled with debugging enabled.  Only
3751 `--gstabs[+]' is currently supported.  LABEL is the entry point of the
3752 function and if omitted NAME prepended with the `leading char' is used.
3753 `leading char' is usually `_' or nothing, depending on the target.  All
3754 functions are currently defined to have `void' return type.  The
3755 function must be terminated with `.endfunc'.
3756
3757 \1f
3758 File: as.info,  Node: Global,  Next: Gnu_attribute,  Prev: Func,  Up: Pseudo Ops
3759
3760 7.57 `.global SYMBOL', `.globl SYMBOL'
3761 ======================================
3762
3763 `.global' makes the symbol visible to `ld'.  If you define SYMBOL in
3764 your partial program, its value is made available to other partial
3765 programs that are linked with it.  Otherwise, SYMBOL takes its
3766 attributes from a symbol of the same name from another file linked into
3767 the same program.
3768
3769    Both spellings (`.globl' and `.global') are accepted, for
3770 compatibility with other assemblers.
3771
3772    On the HPPA, `.global' is not always enough to make it accessible to
3773 other partial programs.  You may need the HPPA-only `.EXPORT' directive
3774 as well.  *Note HPPA Assembler Directives: HPPA Directives.
3775
3776 \1f
3777 File: as.info,  Node: Gnu_attribute,  Next: Hidden,  Prev: Global,  Up: Pseudo Ops
3778
3779 7.58 `.gnu_attribute TAG,VALUE'
3780 ===============================
3781
3782 Record a GNU object attribute for this file.  *Note Object Attributes::.
3783
3784 \1f
3785 File: as.info,  Node: Hidden,  Next: hword,  Prev: Gnu_attribute,  Up: Pseudo Ops
3786
3787 7.59 `.hidden NAMES'
3788 ====================
3789
3790 This is one of the ELF visibility directives.  The other two are
3791 `.internal' (*note `.internal': Internal.) and `.protected' (*note
3792 `.protected': Protected.).
3793
3794    This directive overrides the named symbols default visibility (which
3795 is set by their binding: local, global or weak).  The directive sets
3796 the visibility to `hidden' which means that the symbols are not visible
3797 to other components.  Such symbols are always considered to be
3798 `protected' as well.
3799
3800 \1f
3801 File: as.info,  Node: hword,  Next: Ident,  Prev: Hidden,  Up: Pseudo Ops
3802
3803 7.60 `.hword EXPRESSIONS'
3804 =========================
3805
3806 This expects zero or more EXPRESSIONS, and emits a 16 bit number for
3807 each.
3808
3809    This directive is a synonym for `.short'; depending on the target
3810 architecture, it may also be a synonym for `.word'.
3811
3812 \1f
3813 File: as.info,  Node: Ident,  Next: If,  Prev: hword,  Up: Pseudo Ops
3814
3815 7.61 `.ident'
3816 =============
3817
3818 This directive is used by some assemblers to place tags in object
3819 files.  The behavior of this directive varies depending on the target.
3820 When using the a.out object file format, `as' simply accepts the
3821 directive for source-file compatibility with existing assemblers, but
3822 does not emit anything for it.  When using COFF, comments are emitted
3823 to the `.comment' or `.rdata' section, depending on the target.  When
3824 using ELF, comments are emitted to the `.comment' section.
3825
3826 \1f
3827 File: as.info,  Node: If,  Next: Incbin,  Prev: Ident,  Up: Pseudo Ops
3828
3829 7.62 `.if ABSOLUTE EXPRESSION'
3830 ==============================
3831
3832 `.if' marks the beginning of a section of code which is only considered
3833 part of the source program being assembled if the argument (which must
3834 be an ABSOLUTE EXPRESSION) is non-zero.  The end of the conditional
3835 section of code must be marked by `.endif' (*note `.endif': Endif.);
3836 optionally, you may include code for the alternative condition, flagged
3837 by `.else' (*note `.else': Else.).  If you have several conditions to
3838 check, `.elseif' may be used to avoid nesting blocks if/else within
3839 each subsequent `.else' block.
3840
3841    The following variants of `.if' are also supported:
3842 `.ifdef SYMBOL'
3843      Assembles the following section of code if the specified SYMBOL
3844      has been defined.  Note a symbol which has been referenced but not
3845      yet defined is considered to be undefined.
3846
3847 `.ifb TEXT'
3848      Assembles the following section of code if the operand is blank
3849      (empty).
3850
3851 `.ifc STRING1,STRING2'
3852      Assembles the following section of code if the two strings are the
3853      same.  The strings may be optionally quoted with single quotes.
3854      If they are not quoted, the first string stops at the first comma,
3855      and the second string stops at the end of the line.  Strings which
3856      contain whitespace should be quoted.  The string comparison is
3857      case sensitive.
3858
3859 `.ifeq ABSOLUTE EXPRESSION'
3860      Assembles the following section of code if the argument is zero.
3861
3862 `.ifeqs STRING1,STRING2'
3863      Another form of `.ifc'.  The strings must be quoted using double
3864      quotes.
3865
3866 `.ifge ABSOLUTE EXPRESSION'
3867      Assembles the following section of code if the argument is greater
3868      than or equal to zero.
3869
3870 `.ifgt ABSOLUTE EXPRESSION'
3871      Assembles the following section of code if the argument is greater
3872      than zero.
3873
3874 `.ifle ABSOLUTE EXPRESSION'
3875      Assembles the following section of code if the argument is less
3876      than or equal to zero.
3877
3878 `.iflt ABSOLUTE EXPRESSION'
3879      Assembles the following section of code if the argument is less
3880      than zero.
3881
3882 `.ifnb TEXT'
3883      Like `.ifb', but the sense of the test is reversed: this assembles
3884      the following section of code if the operand is non-blank
3885      (non-empty).
3886
3887 `.ifnc STRING1,STRING2.'
3888      Like `.ifc', but the sense of the test is reversed: this assembles
3889      the following section of code if the two strings are not the same.
3890
3891 `.ifndef SYMBOL'
3892 `.ifnotdef SYMBOL'
3893      Assembles the following section of code if the specified SYMBOL
3894      has not been defined.  Both spelling variants are equivalent.
3895      Note a symbol which has been referenced but not yet defined is
3896      considered to be undefined.
3897
3898 `.ifne ABSOLUTE EXPRESSION'
3899      Assembles the following section of code if the argument is not
3900      equal to zero (in other words, this is equivalent to `.if').
3901
3902 `.ifnes STRING1,STRING2'
3903      Like `.ifeqs', but the sense of the test is reversed: this
3904      assembles the following section of code if the two strings are not
3905      the same.
3906
3907 \1f
3908 File: as.info,  Node: Incbin,  Next: Include,  Prev: If,  Up: Pseudo Ops
3909
3910 7.63 `.incbin "FILE"[,SKIP[,COUNT]]'
3911 ====================================
3912
3913 The `incbin' directive includes FILE verbatim at the current location.
3914 You can control the search paths used with the `-I' command-line option
3915 (*note Command-Line Options: Invoking.).  Quotation marks are required
3916 around FILE.
3917
3918    The SKIP argument skips a number of bytes from the start of the
3919 FILE.  The COUNT argument indicates the maximum number of bytes to
3920 read.  Note that the data is not aligned in any way, so it is the user's
3921 responsibility to make sure that proper alignment is provided both
3922 before and after the `incbin' directive.
3923
3924 \1f
3925 File: as.info,  Node: Include,  Next: Int,  Prev: Incbin,  Up: Pseudo Ops
3926
3927 7.64 `.include "FILE"'
3928 ======================
3929
3930 This directive provides a way to include supporting files at specified
3931 points in your source program.  The code from FILE is assembled as if
3932 it followed the point of the `.include'; when the end of the included
3933 file is reached, assembly of the original file continues.  You can
3934 control the search paths used with the `-I' command-line option (*note
3935 Command-Line Options: Invoking.).  Quotation marks are required around
3936 FILE.
3937
3938 \1f
3939 File: as.info,  Node: Int,  Next: Internal,  Prev: Include,  Up: Pseudo Ops
3940
3941 7.65 `.int EXPRESSIONS'
3942 =======================
3943
3944 Expect zero or more EXPRESSIONS, of any section, separated by commas.
3945 For each expression, emit a number that, at run time, is the value of
3946 that expression.  The byte order and bit size of the number depends on
3947 what kind of target the assembly is for.
3948
3949 \1f
3950 File: as.info,  Node: Internal,  Next: Irp,  Prev: Int,  Up: Pseudo Ops
3951
3952 7.66 `.internal NAMES'
3953 ======================
3954
3955 This is one of the ELF visibility directives.  The other two are
3956 `.hidden' (*note `.hidden': Hidden.) and `.protected' (*note
3957 `.protected': Protected.).
3958
3959    This directive overrides the named symbols default visibility (which
3960 is set by their binding: local, global or weak).  The directive sets
3961 the visibility to `internal' which means that the symbols are
3962 considered to be `hidden' (i.e., not visible to other components), and
3963 that some extra, processor specific processing must also be performed
3964 upon the  symbols as well.
3965
3966 \1f
3967 File: as.info,  Node: Irp,  Next: Irpc,  Prev: Internal,  Up: Pseudo Ops
3968
3969 7.67 `.irp SYMBOL,VALUES'...
3970 ============================
3971
3972 Evaluate a sequence of statements assigning different values to SYMBOL.
3973 The sequence of statements starts at the `.irp' directive, and is
3974 terminated by an `.endr' directive.  For each VALUE, SYMBOL is set to
3975 VALUE, and the sequence of statements is assembled.  If no VALUE is
3976 listed, the sequence of statements is assembled once, with SYMBOL set
3977 to the null string.  To refer to SYMBOL within the sequence of
3978 statements, use \SYMBOL.
3979
3980    For example, assembling
3981
3982              .irp    param,1,2,3
3983              move    d\param,sp@-
3984              .endr
3985
3986    is equivalent to assembling
3987
3988              move    d1,sp@-
3989              move    d2,sp@-
3990              move    d3,sp@-
3991
3992    For some caveats with the spelling of SYMBOL, see also *Note Macro::.
3993
3994 \1f
3995 File: as.info,  Node: Irpc,  Next: Lcomm,  Prev: Irp,  Up: Pseudo Ops
3996
3997 7.68 `.irpc SYMBOL,VALUES'...
3998 =============================
3999
4000 Evaluate a sequence of statements assigning different values to SYMBOL.
4001 The sequence of statements starts at the `.irpc' directive, and is
4002 terminated by an `.endr' directive.  For each character in VALUE,
4003 SYMBOL is set to the character, and the sequence of statements is
4004 assembled.  If no VALUE is listed, the sequence of statements is
4005 assembled once, with SYMBOL set to the null string.  To refer to SYMBOL
4006 within the sequence of statements, use \SYMBOL.
4007
4008    For example, assembling
4009
4010              .irpc    param,123
4011              move    d\param,sp@-
4012              .endr
4013
4014    is equivalent to assembling
4015
4016              move    d1,sp@-
4017              move    d2,sp@-
4018              move    d3,sp@-
4019
4020    For some caveats with the spelling of SYMBOL, see also the discussion
4021 at *Note Macro::.
4022
4023 \1f
4024 File: as.info,  Node: Lcomm,  Next: Lflags,  Prev: Irpc,  Up: Pseudo Ops
4025
4026 7.69 `.lcomm SYMBOL , LENGTH'
4027 =============================
4028
4029 Reserve LENGTH (an absolute expression) bytes for a local common
4030 denoted by SYMBOL.  The section and value of SYMBOL are those of the
4031 new local common.  The addresses are allocated in the bss section, so
4032 that at run-time the bytes start off zeroed.  SYMBOL is not declared
4033 global (*note `.global': Global.), so is normally not visible to `ld'.
4034
4035    Some targets permit a third argument to be used with `.lcomm'.  This
4036 argument specifies the desired alignment of the symbol in the bss
4037 section.
4038
4039    The syntax for `.lcomm' differs slightly on the HPPA.  The syntax is
4040 `SYMBOL .lcomm, LENGTH'; SYMBOL is optional.
4041
4042 \1f
4043 File: as.info,  Node: Lflags,  Next: Line,  Prev: Lcomm,  Up: Pseudo Ops
4044
4045 7.70 `.lflags'
4046 ==============
4047
4048 `as' accepts this directive, for compatibility with other assemblers,
4049 but ignores it.
4050
4051 \1f
4052 File: as.info,  Node: Line,  Next: Linkonce,  Prev: Lflags,  Up: Pseudo Ops
4053
4054 7.71 `.line LINE-NUMBER'
4055 ========================
4056
4057 Change the logical line number.  LINE-NUMBER must be an absolute
4058 expression.  The next line has that logical line number.  Therefore any
4059 other statements on the current line (after a statement separator
4060 character) are reported as on logical line number LINE-NUMBER - 1.  One
4061 day `as' will no longer support this directive: it is recognized only
4062 for compatibility with existing assembler programs.
4063
4064 Even though this is a directive associated with the `a.out' or `b.out'
4065 object-code formats, `as' still recognizes it when producing COFF
4066 output, and treats `.line' as though it were the COFF `.ln' _if_ it is
4067 found outside a `.def'/`.endef' pair.
4068
4069    Inside a `.def', `.line' is, instead, one of the directives used by
4070 compilers to generate auxiliary symbol information for debugging.
4071
4072 \1f
4073 File: as.info,  Node: Linkonce,  Next: List,  Prev: Line,  Up: Pseudo Ops
4074
4075 7.72 `.linkonce [TYPE]'
4076 =======================
4077
4078 Mark the current section so that the linker only includes a single copy
4079 of it.  This may be used to include the same section in several
4080 different object files, but ensure that the linker will only include it
4081 once in the final output file.  The `.linkonce' pseudo-op must be used
4082 for each instance of the section.  Duplicate sections are detected
4083 based on the section name, so it should be unique.
4084
4085    This directive is only supported by a few object file formats; as of
4086 this writing, the only object file format which supports it is the
4087 Portable Executable format used on Windows NT.
4088
4089    The TYPE argument is optional.  If specified, it must be one of the
4090 following strings.  For example:
4091      .linkonce same_size
4092    Not all types may be supported on all object file formats.
4093
4094 `discard'
4095      Silently discard duplicate sections.  This is the default.
4096
4097 `one_only'
4098      Warn if there are duplicate sections, but still keep only one copy.
4099
4100 `same_size'
4101      Warn if any of the duplicates have different sizes.
4102
4103 `same_contents'
4104      Warn if any of the duplicates do not have exactly the same
4105      contents.
4106
4107 \1f
4108 File: as.info,  Node: List,  Next: Ln,  Prev: Linkonce,  Up: Pseudo Ops
4109
4110 7.73 `.list'
4111 ============
4112
4113 Control (in conjunction with the `.nolist' directive) whether or not
4114 assembly listings are generated.  These two directives maintain an
4115 internal counter (which is zero initially).   `.list' increments the
4116 counter, and `.nolist' decrements it.  Assembly listings are generated
4117 whenever the counter is greater than zero.
4118
4119    By default, listings are disabled.  When you enable them (with the
4120 `-a' command line option; *note Command-Line Options: Invoking.), the
4121 initial value of the listing counter is one.
4122
4123 \1f
4124 File: as.info,  Node: Ln,  Next: Loc,  Prev: List,  Up: Pseudo Ops
4125
4126 7.74 `.ln LINE-NUMBER'
4127 ======================
4128
4129 `.ln' is a synonym for `.line'.
4130
4131 \1f
4132 File: as.info,  Node: Loc,  Next: Loc_mark_labels,  Prev: Ln,  Up: Pseudo Ops
4133
4134 7.75 `.loc FILENO LINENO [COLUMN] [OPTIONS]'
4135 ============================================
4136
4137 When emitting DWARF2 line number information, the `.loc' directive will
4138 add a row to the `.debug_line' line number matrix corresponding to the
4139 immediately following assembly instruction.  The FILENO, LINENO, and
4140 optional COLUMN arguments will be applied to the `.debug_line' state
4141 machine before the row is added.
4142
4143    The OPTIONS are a sequence of the following tokens in any order:
4144
4145 `basic_block'
4146      This option will set the `basic_block' register in the
4147      `.debug_line' state machine to `true'.
4148
4149 `prologue_end'
4150      This option will set the `prologue_end' register in the
4151      `.debug_line' state machine to `true'.
4152
4153 `epilogue_begin'
4154      This option will set the `epilogue_begin' register in the
4155      `.debug_line' state machine to `true'.
4156
4157 `is_stmt VALUE'
4158      This option will set the `is_stmt' register in the `.debug_line'
4159      state machine to `value', which must be either 0 or 1.
4160
4161 `isa VALUE'
4162      This directive will set the `isa' register in the `.debug_line'
4163      state machine to VALUE, which must be an unsigned integer.
4164
4165 `discriminator VALUE'
4166      This directive will set the `discriminator' register in the
4167      `.debug_line' state machine to VALUE, which must be an unsigned
4168      integer.
4169
4170
4171 \1f
4172 File: as.info,  Node: Loc_mark_labels,  Next: Local,  Prev: Loc,  Up: Pseudo Ops
4173
4174 7.76 `.loc_mark_labels ENABLE'
4175 ==============================
4176
4177 When emitting DWARF2 line number information, the `.loc_mark_labels'
4178 directive makes the assembler emit an entry to the `.debug_line' line
4179 number matrix with the `basic_block' register in the state machine set
4180 whenever a code label is seen.  The ENABLE argument should be either 1
4181 or 0, to enable or disable this function respectively.
4182
4183 \1f
4184 File: as.info,  Node: Local,  Next: Long,  Prev: Loc_mark_labels,  Up: Pseudo Ops
4185
4186 7.77 `.local NAMES'
4187 ===================
4188
4189 This directive, which is available for ELF targets, marks each symbol in
4190 the comma-separated list of `names' as a local symbol so that it will
4191 not be externally visible.  If the symbols do not already exist, they
4192 will be created.
4193
4194    For targets where the `.lcomm' directive (*note Lcomm::) does not
4195 accept an alignment argument, which is the case for most ELF targets,
4196 the `.local' directive can be used in combination with `.comm' (*note
4197 Comm::) to define aligned local common data.
4198
4199 \1f
4200 File: as.info,  Node: Long,  Next: Macro,  Prev: Local,  Up: Pseudo Ops
4201
4202 7.78 `.long EXPRESSIONS'
4203 ========================
4204
4205 `.long' is the same as `.int'.  *Note `.int': Int.
4206
4207 \1f
4208 File: as.info,  Node: Macro,  Next: MRI,  Prev: Long,  Up: Pseudo Ops
4209
4210 7.79 `.macro'
4211 =============
4212
4213 The commands `.macro' and `.endm' allow you to define macros that
4214 generate assembly output.  For example, this definition specifies a
4215 macro `sum' that puts a sequence of numbers into memory:
4216
4217              .macro  sum from=0, to=5
4218              .long   \from
4219              .if     \to-\from
4220              sum     "(\from+1)",\to
4221              .endif
4222              .endm
4223
4224 With that definition, `SUM 0,5' is equivalent to this assembly input:
4225
4226              .long   0
4227              .long   1
4228              .long   2
4229              .long   3
4230              .long   4
4231              .long   5
4232
4233 `.macro MACNAME'
4234 `.macro MACNAME MACARGS ...'
4235      Begin the definition of a macro called MACNAME.  If your macro
4236      definition requires arguments, specify their names after the macro
4237      name, separated by commas or spaces.  You can qualify the macro
4238      argument to indicate whether all invocations must specify a
4239      non-blank value (through `:`req''), or whether it takes all of the
4240      remaining arguments (through `:`vararg'').  You can supply a
4241      default value for any macro argument by following the name with
4242      `=DEFLT'.  You cannot define two macros with the same MACNAME
4243      unless it has been subject to the `.purgem' directive (*note
4244      Purgem::) between the two definitions.  For example, these are all
4245      valid `.macro' statements:
4246
4247     `.macro comm'
4248           Begin the definition of a macro called `comm', which takes no
4249           arguments.
4250
4251     `.macro plus1 p, p1'
4252     `.macro plus1 p p1'
4253           Either statement begins the definition of a macro called
4254           `plus1', which takes two arguments; within the macro
4255           definition, write `\p' or `\p1' to evaluate the arguments.
4256
4257     `.macro reserve_str p1=0 p2'
4258           Begin the definition of a macro called `reserve_str', with two
4259           arguments.  The first argument has a default value, but not
4260           the second.  After the definition is complete, you can call
4261           the macro either as `reserve_str A,B' (with `\p1' evaluating
4262           to A and `\p2' evaluating to B), or as `reserve_str ,B' (with
4263           `\p1' evaluating as the default, in this case `0', and `\p2'
4264           evaluating to B).
4265
4266     `.macro m p1:req, p2=0, p3:vararg'
4267           Begin the definition of a macro called `m', with at least
4268           three arguments.  The first argument must always have a value
4269           specified, but not the second, which instead has a default
4270           value. The third formal will get assigned all remaining
4271           arguments specified at invocation time.
4272
4273           When you call a macro, you can specify the argument values
4274           either by position, or by keyword.  For example, `sum 9,17'
4275           is equivalent to `sum to=17, from=9'.
4276
4277
4278      Note that since each of the MACARGS can be an identifier exactly
4279      as any other one permitted by the target architecture, there may be
4280      occasional problems if the target hand-crafts special meanings to
4281      certain characters when they occur in a special position.  For
4282      example, if the colon (`:') is generally permitted to be part of a
4283      symbol name, but the architecture specific code special-cases it
4284      when occurring as the final character of a symbol (to denote a
4285      label), then the macro parameter replacement code will have no way
4286      of knowing that and consider the whole construct (including the
4287      colon) an identifier, and check only this identifier for being the
4288      subject to parameter substitution.  So for example this macro
4289      definition:
4290
4291                 .macro label l
4292           \l:
4293                 .endm
4294
4295      might not work as expected.  Invoking `label foo' might not create
4296      a label called `foo' but instead just insert the text `\l:' into
4297      the assembler source, probably generating an error about an
4298      unrecognised identifier.
4299
4300      Similarly problems might occur with the period character (`.')
4301      which is often allowed inside opcode names (and hence identifier
4302      names).  So for example constructing a macro to build an opcode
4303      from a base name and a length specifier like this:
4304
4305                 .macro opcode base length
4306                   \base.\length
4307                 .endm
4308
4309      and invoking it as `opcode store l' will not create a `store.l'
4310      instruction but instead generate some kind of error as the
4311      assembler tries to interpret the text `\base.\length'.
4312
4313      There are several possible ways around this problem:
4314
4315     `Insert white space'
4316           If it is possible to use white space characters then this is
4317           the simplest solution.  eg:
4318
4319                 .macro label l
4320                \l :
4321                 .endm
4322
4323     `Use `\()''
4324           The string `\()' can be used to separate the end of a macro
4325           argument from the following text.  eg:
4326
4327                 .macro opcode base length
4328                        \base\().\length
4329                 .endm
4330
4331     `Use the alternate macro syntax mode'
4332           In the alternative macro syntax mode the ampersand character
4333           (`&') can be used as a separator.  eg:
4334
4335                 .altmacro
4336                 .macro label l
4337                l&:
4338                 .endm
4339
4340      Note: this problem of correctly identifying string parameters to
4341      pseudo ops also applies to the identifiers used in `.irp' (*note
4342      Irp::) and `.irpc' (*note Irpc::) as well.
4343
4344 `.endm'
4345      Mark the end of a macro definition.
4346
4347 `.exitm'
4348      Exit early from the current macro definition.
4349
4350 `\@'
4351      `as' maintains a counter of how many macros it has executed in
4352      this pseudo-variable; you can copy that number to your output with
4353      `\@', but _only within a macro definition_.
4354
4355 `LOCAL NAME [ , ... ]'
4356      _Warning: `LOCAL' is only available if you select "alternate macro
4357      syntax" with `--alternate' or `.altmacro'._ *Note `.altmacro':
4358      Altmacro.
4359
4360 \1f
4361 File: as.info,  Node: MRI,  Next: Noaltmacro,  Prev: Macro,  Up: Pseudo Ops
4362
4363 7.80 `.mri VAL'
4364 ===============
4365
4366 If VAL is non-zero, this tells `as' to enter MRI mode.  If VAL is zero,
4367 this tells `as' to exit MRI mode.  This change affects code assembled
4368 until the next `.mri' directive, or until the end of the file.  *Note
4369 MRI mode: M.
4370
4371 \1f
4372 File: as.info,  Node: Noaltmacro,  Next: Nolist,  Prev: MRI,  Up: Pseudo Ops
4373
4374 7.81 `.noaltmacro'
4375 ==================
4376
4377 Disable alternate macro mode.  *Note Altmacro::.
4378
4379 \1f
4380 File: as.info,  Node: Nolist,  Next: Octa,  Prev: Noaltmacro,  Up: Pseudo Ops
4381
4382 7.82 `.nolist'
4383 ==============
4384
4385 Control (in conjunction with the `.list' directive) whether or not
4386 assembly listings are generated.  These two directives maintain an
4387 internal counter (which is zero initially).   `.list' increments the
4388 counter, and `.nolist' decrements it.  Assembly listings are generated
4389 whenever the counter is greater than zero.
4390
4391 \1f
4392 File: as.info,  Node: Octa,  Next: Offset,  Prev: Nolist,  Up: Pseudo Ops
4393
4394 7.83 `.octa BIGNUMS'
4395 ====================
4396
4397 This directive expects zero or more bignums, separated by commas.  For
4398 each bignum, it emits a 16-byte integer.
4399
4400    The term "octa" comes from contexts in which a "word" is two bytes;
4401 hence _octa_-word for 16 bytes.
4402
4403 \1f
4404 File: as.info,  Node: Offset,  Next: Org,  Prev: Octa,  Up: Pseudo Ops
4405
4406 7.84 `.offset LOC'
4407 ==================
4408
4409 Set the location counter to LOC in the absolute section.  LOC must be
4410 an absolute expression.  This directive may be useful for defining
4411 symbols with absolute values.  Do not confuse it with the `.org'
4412 directive.
4413
4414 \1f
4415 File: as.info,  Node: Org,  Next: P2align,  Prev: Offset,  Up: Pseudo Ops
4416
4417 7.85 `.org NEW-LC , FILL'
4418 =========================
4419
4420 Advance the location counter of the current section to NEW-LC.  NEW-LC
4421 is either an absolute expression or an expression with the same section
4422 as the current subsection.  That is, you can't use `.org' to cross
4423 sections: if NEW-LC has the wrong section, the `.org' directive is
4424 ignored.  To be compatible with former assemblers, if the section of
4425 NEW-LC is absolute, `as' issues a warning, then pretends the section of
4426 NEW-LC is the same as the current subsection.
4427
4428    `.org' may only increase the location counter, or leave it
4429 unchanged; you cannot use `.org' to move the location counter backwards.
4430
4431    Because `as' tries to assemble programs in one pass, NEW-LC may not
4432 be undefined.  If you really detest this restriction we eagerly await a
4433 chance to share your improved assembler.
4434
4435    Beware that the origin is relative to the start of the section, not
4436 to the start of the subsection.  This is compatible with other people's
4437 assemblers.
4438
4439    When the location counter (of the current subsection) is advanced,
4440 the intervening bytes are filled with FILL which should be an absolute
4441 expression.  If the comma and FILL are omitted, FILL defaults to zero.
4442
4443 \1f
4444 File: as.info,  Node: P2align,  Next: PopSection,  Prev: Org,  Up: Pseudo Ops
4445
4446 7.86 `.p2align[wl] ABS-EXPR, ABS-EXPR, ABS-EXPR'
4447 ================================================
4448
4449 Pad the location counter (in the current subsection) to a particular
4450 storage boundary.  The first expression (which must be absolute) is the
4451 number of low-order zero bits the location counter must have after
4452 advancement.  For example `.p2align 3' advances the location counter
4453 until it a multiple of 8.  If the location counter is already a
4454 multiple of 8, no change is needed.
4455
4456    The second expression (also absolute) gives the fill value to be
4457 stored in the padding bytes.  It (and the comma) may be omitted.  If it
4458 is omitted, the padding bytes are normally zero.  However, on some
4459 systems, if the section is marked as containing code and the fill value
4460 is omitted, the space is filled with no-op instructions.
4461
4462    The third expression is also absolute, and is also optional.  If it
4463 is present, it is the maximum number of bytes that should be skipped by
4464 this alignment directive.  If doing the alignment would require
4465 skipping more bytes than the specified maximum, then the alignment is
4466 not done at all.  You can omit the fill value (the second argument)
4467 entirely by simply using two commas after the required alignment; this
4468 can be useful if you want the alignment to be filled with no-op
4469 instructions when appropriate.
4470
4471    The `.p2alignw' and `.p2alignl' directives are variants of the
4472 `.p2align' directive.  The `.p2alignw' directive treats the fill
4473 pattern as a two byte word value.  The `.p2alignl' directives treats the
4474 fill pattern as a four byte longword value.  For example, `.p2alignw
4475 2,0x368d' will align to a multiple of 4.  If it skips two bytes, they
4476 will be filled in with the value 0x368d (the exact placement of the
4477 bytes depends upon the endianness of the processor).  If it skips 1 or
4478 3 bytes, the fill value is undefined.
4479
4480 \1f
4481 File: as.info,  Node: PopSection,  Next: Previous,  Prev: P2align,  Up: Pseudo Ops
4482
4483 7.87 `.popsection'
4484 ==================
4485
4486 This is one of the ELF section stack manipulation directives.  The
4487 others are `.section' (*note Section::), `.subsection' (*note
4488 SubSection::), `.pushsection' (*note PushSection::), and `.previous'
4489 (*note Previous::).
4490
4491    This directive replaces the current section (and subsection) with
4492 the top section (and subsection) on the section stack.  This section is
4493 popped off the stack.
4494
4495 \1f
4496 File: as.info,  Node: Previous,  Next: Print,  Prev: PopSection,  Up: Pseudo Ops
4497
4498 7.88 `.previous'
4499 ================
4500
4501 This is one of the ELF section stack manipulation directives.  The
4502 others are `.section' (*note Section::), `.subsection' (*note
4503 SubSection::), `.pushsection' (*note PushSection::), and `.popsection'
4504 (*note PopSection::).
4505
4506    This directive swaps the current section (and subsection) with most
4507 recently referenced section/subsection pair prior to this one.  Multiple
4508 `.previous' directives in a row will flip between two sections (and
4509 their subsections).  For example:
4510
4511      .section A
4512       .subsection 1
4513        .word 0x1234
4514       .subsection 2
4515        .word 0x5678
4516      .previous
4517       .word 0x9abc
4518
4519    Will place 0x1234 and 0x9abc into subsection 1 and 0x5678 into
4520 subsection 2 of section A.  Whilst:
4521
4522      .section A
4523      .subsection 1
4524        # Now in section A subsection 1
4525        .word 0x1234
4526      .section B
4527      .subsection 0
4528        # Now in section B subsection 0
4529        .word 0x5678
4530      .subsection 1
4531        # Now in section B subsection 1
4532        .word 0x9abc
4533      .previous
4534        # Now in section B subsection 0
4535        .word 0xdef0
4536
4537    Will place 0x1234 into section A, 0x5678 and 0xdef0 into subsection
4538 0 of section B and 0x9abc into subsection 1 of section B.
4539
4540    In terms of the section stack, this directive swaps the current
4541 section with the top section on the section stack.
4542
4543 \1f
4544 File: as.info,  Node: Print,  Next: Protected,  Prev: Previous,  Up: Pseudo Ops
4545
4546 7.89 `.print STRING'
4547 ====================
4548
4549 `as' will print STRING on the standard output during assembly.  You
4550 must put STRING in double quotes.
4551
4552 \1f
4553 File: as.info,  Node: Protected,  Next: Psize,  Prev: Print,  Up: Pseudo Ops
4554
4555 7.90 `.protected NAMES'
4556 =======================
4557
4558 This is one of the ELF visibility directives.  The other two are
4559 `.hidden' (*note Hidden::) and `.internal' (*note Internal::).
4560
4561    This directive overrides the named symbols default visibility (which
4562 is set by their binding: local, global or weak).  The directive sets
4563 the visibility to `protected' which means that any references to the
4564 symbols from within the components that defines them must be resolved
4565 to the definition in that component, even if a definition in another
4566 component would normally preempt this.
4567
4568 \1f
4569 File: as.info,  Node: Psize,  Next: Purgem,  Prev: Protected,  Up: Pseudo Ops
4570
4571 7.91 `.psize LINES , COLUMNS'
4572 =============================
4573
4574 Use this directive to declare the number of lines--and, optionally, the
4575 number of columns--to use for each page, when generating listings.
4576
4577    If you do not use `.psize', listings use a default line-count of 60.
4578 You may omit the comma and COLUMNS specification; the default width is
4579 200 columns.
4580
4581    `as' generates formfeeds whenever the specified number of lines is
4582 exceeded (or whenever you explicitly request one, using `.eject').
4583
4584    If you specify LINES as `0', no formfeeds are generated save those
4585 explicitly specified with `.eject'.
4586
4587 \1f
4588 File: as.info,  Node: Purgem,  Next: PushSection,  Prev: Psize,  Up: Pseudo Ops
4589
4590 7.92 `.purgem NAME'
4591 ===================
4592
4593 Undefine the macro NAME, so that later uses of the string will not be
4594 expanded.  *Note Macro::.
4595
4596 \1f
4597 File: as.info,  Node: PushSection,  Next: Quad,  Prev: Purgem,  Up: Pseudo Ops
4598
4599 7.93 `.pushsection NAME [, SUBSECTION] [, "FLAGS"[, @TYPE[,ARGUMENTS]]]'
4600 ========================================================================
4601
4602 This is one of the ELF section stack manipulation directives.  The
4603 others are `.section' (*note Section::), `.subsection' (*note
4604 SubSection::), `.popsection' (*note PopSection::), and `.previous'
4605 (*note Previous::).
4606
4607    This directive pushes the current section (and subsection) onto the
4608 top of the section stack, and then replaces the current section and
4609 subsection with `name' and `subsection'. The optional `flags', `type'
4610 and `arguments' are treated the same as in the `.section' (*note
4611 Section::) directive.
4612
4613 \1f
4614 File: as.info,  Node: Quad,  Next: Reloc,  Prev: PushSection,  Up: Pseudo Ops
4615
4616 7.94 `.quad BIGNUMS'
4617 ====================
4618
4619 `.quad' expects zero or more bignums, separated by commas.  For each
4620 bignum, it emits an 8-byte integer.  If the bignum won't fit in 8
4621 bytes, it prints a warning message; and just takes the lowest order 8
4622 bytes of the bignum.  
4623
4624    The term "quad" comes from contexts in which a "word" is two bytes;
4625 hence _quad_-word for 8 bytes.
4626
4627 \1f
4628 File: as.info,  Node: Reloc,  Next: Rept,  Prev: Quad,  Up: Pseudo Ops
4629
4630 7.95 `.reloc OFFSET, RELOC_NAME[, EXPRESSION]'
4631 ==============================================
4632
4633 Generate a relocation at OFFSET of type RELOC_NAME with value
4634 EXPRESSION.  If OFFSET is a number, the relocation is generated in the
4635 current section.  If OFFSET is an expression that resolves to a symbol
4636 plus offset, the relocation is generated in the given symbol's section.
4637 EXPRESSION, if present, must resolve to a symbol plus addend or to an
4638 absolute value, but note that not all targets support an addend.  e.g.
4639 ELF REL targets such as i386 store an addend in the section contents
4640 rather than in the relocation.  This low level interface does not
4641 support addends stored in the section.
4642
4643 \1f
4644 File: as.info,  Node: Rept,  Next: Sbttl,  Prev: Reloc,  Up: Pseudo Ops
4645
4646 7.96 `.rept COUNT'
4647 ==================
4648
4649 Repeat the sequence of lines between the `.rept' directive and the next
4650 `.endr' directive COUNT times.
4651
4652    For example, assembling
4653
4654              .rept   3
4655              .long   0
4656              .endr
4657
4658    is equivalent to assembling
4659
4660              .long   0
4661              .long   0
4662              .long   0
4663
4664 \1f
4665 File: as.info,  Node: Sbttl,  Next: Scl,  Prev: Rept,  Up: Pseudo Ops
4666
4667 7.97 `.sbttl "SUBHEADING"'
4668 ==========================
4669
4670 Use SUBHEADING as the title (third line, immediately after the title
4671 line) when generating assembly listings.
4672
4673    This directive affects subsequent pages, as well as the current page
4674 if it appears within ten lines of the top of a page.
4675
4676 \1f
4677 File: as.info,  Node: Scl,  Next: Section,  Prev: Sbttl,  Up: Pseudo Ops
4678
4679 7.98 `.scl CLASS'
4680 =================
4681
4682 Set the storage-class value for a symbol.  This directive may only be
4683 used inside a `.def'/`.endef' pair.  Storage class may flag whether a
4684 symbol is static or external, or it may record further symbolic
4685 debugging information.
4686
4687 \1f
4688 File: as.info,  Node: Section,  Next: Set,  Prev: Scl,  Up: Pseudo Ops
4689
4690 7.99 `.section NAME'
4691 ====================
4692
4693 Use the `.section' directive to assemble the following code into a
4694 section named NAME.
4695
4696    This directive is only supported for targets that actually support
4697 arbitrarily named sections; on `a.out' targets, for example, it is not
4698 accepted, even with a standard `a.out' section name.
4699
4700 COFF Version
4701 ------------
4702
4703    For COFF targets, the `.section' directive is used in one of the
4704 following ways:
4705
4706      .section NAME[, "FLAGS"]
4707      .section NAME[, SUBSECTION]
4708
4709    If the optional argument is quoted, it is taken as flags to use for
4710 the section.  Each flag is a single character.  The following flags are
4711 recognized:
4712 `b'
4713      bss section (uninitialized data)
4714
4715 `n'
4716      section is not loaded
4717
4718 `w'
4719      writable section
4720
4721 `d'
4722      data section
4723
4724 `r'
4725      read-only section
4726
4727 `x'
4728      executable section
4729
4730 `s'
4731      shared section (meaningful for PE targets)
4732
4733 `a'
4734      ignored.  (For compatibility with the ELF version)
4735
4736 `y'
4737      section is not readable (meaningful for PE targets)
4738
4739 `0-9'
4740      single-digit power-of-two section alignment (GNU extension)
4741
4742    If no flags are specified, the default flags depend upon the section
4743 name.  If the section name is not recognized, the default will be for
4744 the section to be loaded and writable.  Note the `n' and `w' flags
4745 remove attributes from the section, rather than adding them, so if they
4746 are used on their own it will be as if no flags had been specified at
4747 all.
4748
4749    If the optional argument to the `.section' directive is not quoted,
4750 it is taken as a subsection number (*note Sub-Sections::).
4751
4752 ELF Version
4753 -----------
4754
4755    This is one of the ELF section stack manipulation directives.  The
4756 others are `.subsection' (*note SubSection::), `.pushsection' (*note
4757 PushSection::), `.popsection' (*note PopSection::), and `.previous'
4758 (*note Previous::).
4759
4760    For ELF targets, the `.section' directive is used like this:
4761
4762      .section NAME [, "FLAGS"[, @TYPE[,FLAG_SPECIFIC_ARGUMENTS]]]
4763
4764    The optional FLAGS argument is a quoted string which may contain any
4765 combination of the following characters:
4766 `a'
4767      section is allocatable
4768
4769 `e'
4770      section is excluded from executable and shared library.
4771
4772 `w'
4773      section is writable
4774
4775 `x'
4776      section is executable
4777
4778 `M'
4779      section is mergeable
4780
4781 `S'
4782      section contains zero terminated strings
4783
4784 `G'
4785      section is a member of a section group
4786
4787 `T'
4788      section is used for thread-local-storage
4789
4790 `?'
4791      section is a member of the previously-current section's group, if
4792      any
4793
4794    The optional TYPE argument may contain one of the following
4795 constants:
4796 `@progbits'
4797      section contains data
4798
4799 `@nobits'
4800      section does not contain data (i.e., section only occupies space)
4801
4802 `@note'
4803      section contains data which is used by things other than the
4804      program
4805
4806 `@init_array'
4807      section contains an array of pointers to init functions
4808
4809 `@fini_array'
4810      section contains an array of pointers to finish functions
4811
4812 `@preinit_array'
4813      section contains an array of pointers to pre-init functions
4814
4815    Many targets only support the first three section types.
4816
4817    Note on targets where the `@' character is the start of a comment (eg
4818 ARM) then another character is used instead.  For example the ARM port
4819 uses the `%' character.
4820
4821    If FLAGS contains the `M' symbol then the TYPE argument must be
4822 specified as well as an extra argument--ENTSIZE--like this:
4823
4824      .section NAME , "FLAGS"M, @TYPE, ENTSIZE
4825
4826    Sections with the `M' flag but not `S' flag must contain fixed size
4827 constants, each ENTSIZE octets long. Sections with both `M' and `S'
4828 must contain zero terminated strings where each character is ENTSIZE
4829 bytes long. The linker may remove duplicates within sections with the
4830 same name, same entity size and same flags.  ENTSIZE must be an
4831 absolute expression.  For sections with both `M' and `S', a string
4832 which is a suffix of a larger string is considered a duplicate.  Thus
4833 `"def"' will be merged with `"abcdef"';  A reference to the first
4834 `"def"' will be changed to a reference to `"abcdef"+3'.
4835
4836    If FLAGS contains the `G' symbol then the TYPE argument must be
4837 present along with an additional field like this:
4838
4839      .section NAME , "FLAGS"G, @TYPE, GROUPNAME[, LINKAGE]
4840
4841    The GROUPNAME field specifies the name of the section group to which
4842 this particular section belongs.  The optional linkage field can
4843 contain:
4844 `comdat'
4845      indicates that only one copy of this section should be retained
4846
4847 `.gnu.linkonce'
4848      an alias for comdat
4849
4850    Note: if both the M and G flags are present then the fields for the
4851 Merge flag should come first, like this:
4852
4853      .section NAME , "FLAGS"MG, @TYPE, ENTSIZE, GROUPNAME[, LINKAGE]
4854
4855    If FLAGS contains the `?' symbol then it may not also contain the
4856 `G' symbol and the GROUPNAME or LINKAGE fields should not be present.
4857 Instead, `?' says to consider the section that's current before this
4858 directive.  If that section used `G', then the new section will use `G'
4859 with those same GROUPNAME and LINKAGE fields implicitly.  If not, then
4860 the `?' symbol has no effect.
4861
4862    If no flags are specified, the default flags depend upon the section
4863 name.  If the section name is not recognized, the default will be for
4864 the section to have none of the above flags: it will not be allocated
4865 in memory, nor writable, nor executable.  The section will contain data.
4866
4867    For ELF targets, the assembler supports another type of `.section'
4868 directive for compatibility with the Solaris assembler:
4869
4870      .section "NAME"[, FLAGS...]
4871
4872    Note that the section name is quoted.  There may be a sequence of
4873 comma separated flags:
4874 `#alloc'
4875      section is allocatable
4876
4877 `#write'
4878      section is writable
4879
4880 `#execinstr'
4881      section is executable
4882
4883 `#exclude'
4884      section is excluded from executable and shared library.
4885
4886 `#tls'
4887      section is used for thread local storage
4888
4889    This directive replaces the current section and subsection.  See the
4890 contents of the gas testsuite directory `gas/testsuite/gas/elf' for
4891 some examples of how this directive and the other section stack
4892 directives work.
4893
4894 \1f
4895 File: as.info,  Node: Set,  Next: Short,  Prev: Section,  Up: Pseudo Ops
4896
4897 7.100 `.set SYMBOL, EXPRESSION'
4898 ===============================
4899
4900 Set the value of SYMBOL to EXPRESSION.  This changes SYMBOL's value and
4901 type to conform to EXPRESSION.  If SYMBOL was flagged as external, it
4902 remains flagged (*note Symbol Attributes::).
4903
4904    You may `.set' a symbol many times in the same assembly.
4905
4906    If you `.set' a global symbol, the value stored in the object file
4907 is the last value stored into it.
4908
4909    On Z80 `set' is a real instruction, use `SYMBOL defl EXPRESSION'
4910 instead.
4911
4912 \1f
4913 File: as.info,  Node: Short,  Next: Single,  Prev: Set,  Up: Pseudo Ops
4914
4915 7.101 `.short EXPRESSIONS'
4916 ==========================
4917
4918 `.short' is normally the same as `.word'.  *Note `.word': Word.
4919
4920    In some configurations, however, `.short' and `.word' generate
4921 numbers of different lengths.  *Note Machine Dependencies::.
4922
4923 \1f
4924 File: as.info,  Node: Single,  Next: Size,  Prev: Short,  Up: Pseudo Ops
4925
4926 7.102 `.single FLONUMS'
4927 =======================
4928
4929 This directive assembles zero or more flonums, separated by commas.  It
4930 has the same effect as `.float'.  The exact kind of floating point
4931 numbers emitted depends on how `as' is configured.  *Note Machine
4932 Dependencies::.
4933
4934 \1f
4935 File: as.info,  Node: Size,  Next: Skip,  Prev: Single,  Up: Pseudo Ops
4936
4937 7.103 `.size'
4938 =============
4939
4940 This directive is used to set the size associated with a symbol.
4941
4942 COFF Version
4943 ------------
4944
4945    For COFF targets, the `.size' directive is only permitted inside
4946 `.def'/`.endef' pairs.  It is used like this:
4947
4948      .size EXPRESSION
4949
4950 ELF Version
4951 -----------
4952
4953    For ELF targets, the `.size' directive is used like this:
4954
4955      .size NAME , EXPRESSION
4956
4957    This directive sets the size associated with a symbol NAME.  The
4958 size in bytes is computed from EXPRESSION which can make use of label
4959 arithmetic.  This directive is typically used to set the size of
4960 function symbols.
4961
4962 \1f
4963 File: as.info,  Node: Skip,  Next: Sleb128,  Prev: Size,  Up: Pseudo Ops
4964
4965 7.104 `.skip SIZE , FILL'
4966 =========================
4967
4968 This directive emits SIZE bytes, each of value FILL.  Both SIZE and
4969 FILL are absolute expressions.  If the comma and FILL are omitted, FILL
4970 is assumed to be zero.  This is the same as `.space'.
4971
4972 \1f
4973 File: as.info,  Node: Sleb128,  Next: Space,  Prev: Skip,  Up: Pseudo Ops
4974
4975 7.105 `.sleb128 EXPRESSIONS'
4976 ============================
4977
4978 SLEB128 stands for "signed little endian base 128."  This is a compact,
4979 variable length representation of numbers used by the DWARF symbolic
4980 debugging format.  *Note `.uleb128': Uleb128.
4981
4982 \1f
4983 File: as.info,  Node: Space,  Next: Stab,  Prev: Sleb128,  Up: Pseudo Ops
4984
4985 7.106 `.space SIZE , FILL'
4986 ==========================
4987
4988 This directive emits SIZE bytes, each of value FILL.  Both SIZE and
4989 FILL are absolute expressions.  If the comma and FILL are omitted, FILL
4990 is assumed to be zero.  This is the same as `.skip'.
4991
4992      _Warning:_ `.space' has a completely different meaning for HPPA
4993      targets; use `.block' as a substitute.  See `HP9000 Series 800
4994      Assembly Language Reference Manual' (HP 92432-90001) for the
4995      meaning of the `.space' directive.  *Note HPPA Assembler
4996      Directives: HPPA Directives, for a summary.
4997
4998 \1f
4999 File: as.info,  Node: Stab,  Next: String,  Prev: Space,  Up: Pseudo Ops
5000
5001 7.107 `.stabd, .stabn, .stabs'
5002 ==============================
5003
5004 There are three directives that begin `.stab'.  All emit symbols (*note
5005 Symbols::), for use by symbolic debuggers.  The symbols are not entered
5006 in the `as' hash table: they cannot be referenced elsewhere in the
5007 source file.  Up to five fields are required:
5008
5009 STRING
5010      This is the symbol's name.  It may contain any character except
5011      `\000', so is more general than ordinary symbol names.  Some
5012      debuggers used to code arbitrarily complex structures into symbol
5013      names using this field.
5014
5015 TYPE
5016      An absolute expression.  The symbol's type is set to the low 8
5017      bits of this expression.  Any bit pattern is permitted, but `ld'
5018      and debuggers choke on silly bit patterns.
5019
5020 OTHER
5021      An absolute expression.  The symbol's "other" attribute is set to
5022      the low 8 bits of this expression.
5023
5024 DESC
5025      An absolute expression.  The symbol's descriptor is set to the low
5026      16 bits of this expression.
5027
5028 VALUE
5029      An absolute expression which becomes the symbol's value.
5030
5031    If a warning is detected while reading a `.stabd', `.stabn', or
5032 `.stabs' statement, the symbol has probably already been created; you
5033 get a half-formed symbol in your object file.  This is compatible with
5034 earlier assemblers!
5035
5036 `.stabd TYPE , OTHER , DESC'
5037      The "name" of the symbol generated is not even an empty string.
5038      It is a null pointer, for compatibility.  Older assemblers used a
5039      null pointer so they didn't waste space in object files with empty
5040      strings.
5041
5042      The symbol's value is set to the location counter, relocatably.
5043      When your program is linked, the value of this symbol is the
5044      address of the location counter when the `.stabd' was assembled.
5045
5046 `.stabn TYPE , OTHER , DESC , VALUE'
5047      The name of the symbol is set to the empty string `""'.
5048
5049 `.stabs STRING ,  TYPE , OTHER , DESC , VALUE'
5050      All five fields are specified.
5051
5052 \1f
5053 File: as.info,  Node: String,  Next: Struct,  Prev: Stab,  Up: Pseudo Ops
5054
5055 7.108 `.string' "STR", `.string8' "STR", `.string16'
5056 ====================================================
5057
5058 "STR", `.string32' "STR", `.string64' "STR"
5059
5060    Copy the characters in STR to the object file.  You may specify more
5061 than one string to copy, separated by commas.  Unless otherwise
5062 specified for a particular machine, the assembler marks the end of each
5063 string with a 0 byte.  You can use any of the escape sequences
5064 described in *Note Strings: Strings.
5065
5066    The variants `string16', `string32' and `string64' differ from the
5067 `string' pseudo opcode in that each 8-bit character from STR is copied
5068 and expanded to 16, 32 or 64 bits respectively.  The expanded characters
5069 are stored in target endianness byte order.
5070
5071    Example:
5072         .string32 "BYE"
5073      expands to:
5074         .string   "B\0\0\0Y\0\0\0E\0\0\0"  /* On little endian targets.  */
5075         .string   "\0\0\0B\0\0\0Y\0\0\0E"  /* On big endian targets.  */
5076
5077 \1f
5078 File: as.info,  Node: Struct,  Next: SubSection,  Prev: String,  Up: Pseudo Ops
5079
5080 7.109 `.struct EXPRESSION'
5081 ==========================
5082
5083 Switch to the absolute section, and set the section offset to
5084 EXPRESSION, which must be an absolute expression.  You might use this
5085 as follows:
5086              .struct 0
5087      field1:
5088              .struct field1 + 4
5089      field2:
5090              .struct field2 + 4
5091      field3:
5092    This would define the symbol `field1' to have the value 0, the symbol
5093 `field2' to have the value 4, and the symbol `field3' to have the value
5094 8.  Assembly would be left in the absolute section, and you would need
5095 to use a `.section' directive of some sort to change to some other
5096 section before further assembly.
5097
5098 \1f
5099 File: as.info,  Node: SubSection,  Next: Symver,  Prev: Struct,  Up: Pseudo Ops
5100
5101 7.110 `.subsection NAME'
5102 ========================
5103
5104 This is one of the ELF section stack manipulation directives.  The
5105 others are `.section' (*note Section::), `.pushsection' (*note
5106 PushSection::), `.popsection' (*note PopSection::), and `.previous'
5107 (*note Previous::).
5108
5109    This directive replaces the current subsection with `name'.  The
5110 current section is not changed.  The replaced subsection is put onto
5111 the section stack in place of the then current top of stack subsection.
5112
5113 \1f
5114 File: as.info,  Node: Symver,  Next: Tag,  Prev: SubSection,  Up: Pseudo Ops
5115
5116 7.111 `.symver'
5117 ===============
5118
5119 Use the `.symver' directive to bind symbols to specific version nodes
5120 within a source file.  This is only supported on ELF platforms, and is
5121 typically used when assembling files to be linked into a shared library.
5122 There are cases where it may make sense to use this in objects to be
5123 bound into an application itself so as to override a versioned symbol
5124 from a shared library.
5125
5126    For ELF targets, the `.symver' directive can be used like this:
5127      .symver NAME, NAME2@NODENAME
5128    If the symbol NAME is defined within the file being assembled, the
5129 `.symver' directive effectively creates a symbol alias with the name
5130 NAME2@NODENAME, and in fact the main reason that we just don't try and
5131 create a regular alias is that the @ character isn't permitted in
5132 symbol names.  The NAME2 part of the name is the actual name of the
5133 symbol by which it will be externally referenced.  The name NAME itself
5134 is merely a name of convenience that is used so that it is possible to
5135 have definitions for multiple versions of a function within a single
5136 source file, and so that the compiler can unambiguously know which
5137 version of a function is being mentioned.  The NODENAME portion of the
5138 alias should be the name of a node specified in the version script
5139 supplied to the linker when building a shared library.  If you are
5140 attempting to override a versioned symbol from a shared library, then
5141 NODENAME should correspond to the nodename of the symbol you are trying
5142 to override.
5143
5144    If the symbol NAME is not defined within the file being assembled,
5145 all references to NAME will be changed to NAME2@NODENAME.  If no
5146 reference to NAME is made, NAME2@NODENAME will be removed from the
5147 symbol table.
5148
5149    Another usage of the `.symver' directive is:
5150      .symver NAME, NAME2@@NODENAME
5151    In this case, the symbol NAME must exist and be defined within the
5152 file being assembled. It is similar to NAME2@NODENAME. The difference
5153 is NAME2@@NODENAME will also be used to resolve references to NAME2 by
5154 the linker.
5155
5156    The third usage of the `.symver' directive is:
5157      .symver NAME, NAME2@@@NODENAME
5158    When NAME is not defined within the file being assembled, it is
5159 treated as NAME2@NODENAME. When NAME is defined within the file being
5160 assembled, the symbol name, NAME, will be changed to NAME2@@NODENAME.
5161
5162 \1f
5163 File: as.info,  Node: Tag,  Next: Text,  Prev: Symver,  Up: Pseudo Ops
5164
5165 7.112 `.tag STRUCTNAME'
5166 =======================
5167
5168 This directive is generated by compilers to include auxiliary debugging
5169 information in the symbol table.  It is only permitted inside
5170 `.def'/`.endef' pairs.  Tags are used to link structure definitions in
5171 the symbol table with instances of those structures.
5172
5173 \1f
5174 File: as.info,  Node: Text,  Next: Title,  Prev: Tag,  Up: Pseudo Ops
5175
5176 7.113 `.text SUBSECTION'
5177 ========================
5178
5179 Tells `as' to assemble the following statements onto the end of the
5180 text subsection numbered SUBSECTION, which is an absolute expression.
5181 If SUBSECTION is omitted, subsection number zero is used.
5182
5183 \1f
5184 File: as.info,  Node: Title,  Next: Type,  Prev: Text,  Up: Pseudo Ops
5185
5186 7.114 `.title "HEADING"'
5187 ========================
5188
5189 Use HEADING as the title (second line, immediately after the source
5190 file name and pagenumber) when generating assembly listings.
5191
5192    This directive affects subsequent pages, as well as the current page
5193 if it appears within ten lines of the top of a page.
5194
5195 \1f
5196 File: as.info,  Node: Type,  Next: Uleb128,  Prev: Title,  Up: Pseudo Ops
5197
5198 7.115 `.type'
5199 =============
5200
5201 This directive is used to set the type of a symbol.
5202
5203 COFF Version
5204 ------------
5205
5206    For COFF targets, this directive is permitted only within
5207 `.def'/`.endef' pairs.  It is used like this:
5208
5209      .type INT
5210
5211    This records the integer INT as the type attribute of a symbol table
5212 entry.
5213
5214 ELF Version
5215 -----------
5216
5217    For ELF targets, the `.type' directive is used like this:
5218
5219      .type NAME , TYPE DESCRIPTION
5220
5221    This sets the type of symbol NAME to be either a function symbol or
5222 an object symbol.  There are five different syntaxes supported for the
5223 TYPE DESCRIPTION field, in order to provide compatibility with various
5224 other assemblers.
5225
5226    Because some of the characters used in these syntaxes (such as `@'
5227 and `#') are comment characters for some architectures, some of the
5228 syntaxes below do not work on all architectures.  The first variant
5229 will be accepted by the GNU assembler on all architectures so that
5230 variant should be used for maximum portability, if you do not need to
5231 assemble your code with other assemblers.
5232
5233    The syntaxes supported are:
5234
5235        .type <name> STT_<TYPE_IN_UPPER_CASE>
5236        .type <name>,#<type>
5237        .type <name>,@<type>
5238        .type <name>,%<type>
5239        .type <name>,"<type>"
5240
5241    The types supported are:
5242
5243 `STT_FUNC'
5244 `function'
5245      Mark the symbol as being a function name.
5246
5247 `STT_GNU_IFUNC'
5248 `gnu_indirect_function'
5249      Mark the symbol as an indirect function when evaluated during reloc
5250      processing.  (This is only supported on assemblers targeting GNU
5251      systems).
5252
5253 `STT_OBJECT'
5254 `object'
5255      Mark the symbol as being a data object.
5256
5257 `STT_TLS'
5258 `tls_object'
5259      Mark the symbol as being a thead-local data object.
5260
5261 `STT_COMMON'
5262 `common'
5263      Mark the symbol as being a common data object.
5264
5265 `STT_NOTYPE'
5266 `notype'
5267      Does not mark the symbol in any way.  It is supported just for
5268      completeness.
5269
5270 `gnu_unique_object'
5271      Marks the symbol as being a globally unique data object.  The
5272      dynamic linker will make sure that in the entire process there is
5273      just one symbol with this name and type in use.  (This is only
5274      supported on assemblers targeting GNU systems).
5275
5276
5277    Note: Some targets support extra types in addition to those listed
5278 above.
5279
5280 \1f
5281 File: as.info,  Node: Uleb128,  Next: Val,  Prev: Type,  Up: Pseudo Ops
5282
5283 7.116 `.uleb128 EXPRESSIONS'
5284 ============================
5285
5286 ULEB128 stands for "unsigned little endian base 128."  This is a
5287 compact, variable length representation of numbers used by the DWARF
5288 symbolic debugging format.  *Note `.sleb128': Sleb128.
5289
5290 \1f
5291 File: as.info,  Node: Val,  Next: Version,  Prev: Uleb128,  Up: Pseudo Ops
5292
5293 7.117 `.val ADDR'
5294 =================
5295
5296 This directive, permitted only within `.def'/`.endef' pairs, records
5297 the address ADDR as the value attribute of a symbol table entry.
5298
5299 \1f
5300 File: as.info,  Node: Version,  Next: VTableEntry,  Prev: Val,  Up: Pseudo Ops
5301
5302 7.118 `.version "STRING"'
5303 =========================
5304
5305 This directive creates a `.note' section and places into it an ELF
5306 formatted note of type NT_VERSION.  The note's name is set to `string'.
5307
5308 \1f
5309 File: as.info,  Node: VTableEntry,  Next: VTableInherit,  Prev: Version,  Up: Pseudo Ops
5310
5311 7.119 `.vtable_entry TABLE, OFFSET'
5312 ===================================
5313
5314 This directive finds or creates a symbol `table' and creates a
5315 `VTABLE_ENTRY' relocation for it with an addend of `offset'.
5316
5317 \1f
5318 File: as.info,  Node: VTableInherit,  Next: Warning,  Prev: VTableEntry,  Up: Pseudo Ops
5319
5320 7.120 `.vtable_inherit CHILD, PARENT'
5321 =====================================
5322
5323 This directive finds the symbol `child' and finds or creates the symbol
5324 `parent' and then creates a `VTABLE_INHERIT' relocation for the parent
5325 whose addend is the value of the child symbol.  As a special case the
5326 parent name of `0' is treated as referring to the `*ABS*' section.
5327
5328 \1f
5329 File: as.info,  Node: Warning,  Next: Weak,  Prev: VTableInherit,  Up: Pseudo Ops
5330
5331 7.121 `.warning "STRING"'
5332 =========================
5333
5334 Similar to the directive `.error' (*note `.error "STRING"': Error.),
5335 but just emits a warning.
5336
5337 \1f
5338 File: as.info,  Node: Weak,  Next: Weakref,  Prev: Warning,  Up: Pseudo Ops
5339
5340 7.122 `.weak NAMES'
5341 ===================
5342
5343 This directive sets the weak attribute on the comma separated list of
5344 symbol `names'.  If the symbols do not already exist, they will be
5345 created.
5346
5347    On COFF targets other than PE, weak symbols are a GNU extension.
5348 This directive sets the weak attribute on the comma separated list of
5349 symbol `names'.  If the symbols do not already exist, they will be
5350 created.
5351
5352    On the PE target, weak symbols are supported natively as weak
5353 aliases.  When a weak symbol is created that is not an alias, GAS
5354 creates an alternate symbol to hold the default value.
5355
5356 \1f
5357 File: as.info,  Node: Weakref,  Next: Word,  Prev: Weak,  Up: Pseudo Ops
5358
5359 7.123 `.weakref ALIAS, TARGET'
5360 ==============================
5361
5362 This directive creates an alias to the target symbol that enables the
5363 symbol to be referenced with weak-symbol semantics, but without
5364 actually making it weak.  If direct references or definitions of the
5365 symbol are present, then the symbol will not be weak, but if all
5366 references to it are through weak references, the symbol will be marked
5367 as weak in the symbol table.
5368
5369    The effect is equivalent to moving all references to the alias to a
5370 separate assembly source file, renaming the alias to the symbol in it,
5371 declaring the symbol as weak there, and running a reloadable link to
5372 merge the object files resulting from the assembly of the new source
5373 file and the old source file that had the references to the alias
5374 removed.
5375
5376    The alias itself never makes to the symbol table, and is entirely
5377 handled within the assembler.
5378
5379 \1f
5380 File: as.info,  Node: Word,  Next: Deprecated,  Prev: Weakref,  Up: Pseudo Ops
5381
5382 7.124 `.word EXPRESSIONS'
5383 =========================
5384
5385 This directive expects zero or more EXPRESSIONS, of any section,
5386 separated by commas.
5387
5388    The size of the number emitted, and its byte order, depend on what
5389 target computer the assembly is for.
5390
5391      _Warning: Special Treatment to support Compilers_
5392
5393    Machines with a 32-bit address space, but that do less than 32-bit
5394 addressing, require the following special treatment.  If the machine of
5395 interest to you does 32-bit addressing (or doesn't require it; *note
5396 Machine Dependencies::), you can ignore this issue.
5397
5398    In order to assemble compiler output into something that works, `as'
5399 occasionally does strange things to `.word' directives.  Directives of
5400 the form `.word sym1-sym2' are often emitted by compilers as part of
5401 jump tables.  Therefore, when `as' assembles a directive of the form
5402 `.word sym1-sym2', and the difference between `sym1' and `sym2' does
5403 not fit in 16 bits, `as' creates a "secondary jump table", immediately
5404 before the next label.  This secondary jump table is preceded by a
5405 short-jump to the first byte after the secondary table.  This
5406 short-jump prevents the flow of control from accidentally falling into
5407 the new table.  Inside the table is a long-jump to `sym2'.  The
5408 original `.word' contains `sym1' minus the address of the long-jump to
5409 `sym2'.
5410
5411    If there were several occurrences of `.word sym1-sym2' before the
5412 secondary jump table, all of them are adjusted.  If there was a `.word
5413 sym3-sym4', that also did not fit in sixteen bits, a long-jump to
5414 `sym4' is included in the secondary jump table, and the `.word'
5415 directives are adjusted to contain `sym3' minus the address of the
5416 long-jump to `sym4'; and so on, for as many entries in the original
5417 jump table as necessary.
5418
5419 \1f
5420 File: as.info,  Node: Deprecated,  Prev: Word,  Up: Pseudo Ops
5421
5422 7.125 Deprecated Directives
5423 ===========================
5424
5425 One day these directives won't work.  They are included for
5426 compatibility with older assemblers.
5427 .abort
5428
5429 .line
5430
5431 \1f
5432 File: as.info,  Node: Object Attributes,  Next: Machine Dependencies,  Prev: Pseudo Ops,  Up: Top
5433
5434 8 Object Attributes
5435 *******************
5436
5437 `as' assembles source files written for a specific architecture into
5438 object files for that architecture.  But not all object files are alike.
5439 Many architectures support incompatible variations.  For instance,
5440 floating point arguments might be passed in floating point registers if
5441 the object file requires hardware floating point support--or floating
5442 point arguments might be passed in integer registers if the object file
5443 supports processors with no hardware floating point unit.  Or, if two
5444 objects are built for different generations of the same architecture,
5445 the combination may require the newer generation at run-time.
5446
5447    This information is useful during and after linking.  At link time,
5448 `ld' can warn about incompatible object files.  After link time, tools
5449 like `gdb' can use it to process the linked file correctly.
5450
5451    Compatibility information is recorded as a series of object
5452 attributes.  Each attribute has a "vendor", "tag", and "value".  The
5453 vendor is a string, and indicates who sets the meaning of the tag.  The
5454 tag is an integer, and indicates what property the attribute describes.
5455 The value may be a string or an integer, and indicates how the
5456 property affects this object.  Missing attributes are the same as
5457 attributes with a zero value or empty string value.
5458
5459    Object attributes were developed as part of the ABI for the ARM
5460 Architecture.  The file format is documented in `ELF for the ARM
5461 Architecture'.
5462
5463 * Menu:
5464
5465 * GNU Object Attributes::               GNU Object Attributes
5466 * Defining New Object Attributes::      Defining New Object Attributes
5467
5468 \1f
5469 File: as.info,  Node: GNU Object Attributes,  Next: Defining New Object Attributes,  Up: Object Attributes
5470
5471 8.1 GNU Object Attributes
5472 =========================
5473
5474 The `.gnu_attribute' directive records an object attribute with vendor
5475 `gnu'.
5476
5477    Except for `Tag_compatibility', which has both an integer and a
5478 string for its value, GNU attributes have a string value if the tag
5479 number is odd and an integer value if the tag number is even.  The
5480 second bit (`TAG & 2' is set for architecture-independent attributes
5481 and clear for architecture-dependent ones.
5482
5483 8.1.1 Common GNU attributes
5484 ---------------------------
5485
5486 These attributes are valid on all architectures.
5487
5488 Tag_compatibility (32)
5489      The compatibility attribute takes an integer flag value and a
5490      vendor name.  If the flag value is 0, the file is compatible with
5491      other toolchains.  If it is 1, then the file is only compatible
5492      with the named toolchain.  If it is greater than 1, the file can
5493      only be processed by other toolchains under some private
5494      arrangement indicated by the flag value and the vendor name.
5495
5496 8.1.2 MIPS Attributes
5497 ---------------------
5498
5499 Tag_GNU_MIPS_ABI_FP (4)
5500      The floating-point ABI used by this object file.  The value will
5501      be:
5502
5503         * 0 for files not affected by the floating-point ABI.
5504
5505         * 1 for files using the hardware floating-point with a standard
5506           double-precision FPU.
5507
5508         * 2 for files using the hardware floating-point ABI with a
5509           single-precision FPU.
5510
5511         * 3 for files using the software floating-point ABI.
5512
5513         * 4 for files using the hardware floating-point ABI with 64-bit
5514           wide double-precision floating-point registers and 32-bit
5515           wide general purpose registers.
5516
5517 8.1.3 PowerPC Attributes
5518 ------------------------
5519
5520 Tag_GNU_Power_ABI_FP (4)
5521      The floating-point ABI used by this object file.  The value will
5522      be:
5523
5524         * 0 for files not affected by the floating-point ABI.
5525
5526         * 1 for files using double-precision hardware floating-point
5527           ABI.
5528
5529         * 2 for files using the software floating-point ABI.
5530
5531         * 3 for files using single-precision hardware floating-point
5532           ABI.
5533
5534 Tag_GNU_Power_ABI_Vector (8)
5535      The vector ABI used by this object file.  The value will be:
5536
5537         * 0 for files not affected by the vector ABI.
5538
5539         * 1 for files using general purpose registers to pass vectors.
5540
5541         * 2 for files using AltiVec registers to pass vectors.
5542
5543         * 3 for files using SPE registers to pass vectors.
5544
5545 \1f
5546 File: as.info,  Node: Defining New Object Attributes,  Prev: GNU Object Attributes,  Up: Object Attributes
5547
5548 8.2 Defining New Object Attributes
5549 ==================================
5550
5551 If you want to define a new GNU object attribute, here are the places
5552 you will need to modify.  New attributes should be discussed on the
5553 `binutils' mailing list.
5554
5555    * This manual, which is the official register of attributes.
5556
5557    * The header for your architecture `include/elf', to define the tag.
5558
5559    * The `bfd' support file for your architecture, to merge the
5560      attribute and issue any appropriate link warnings.
5561
5562    * Test cases in `ld/testsuite' for merging and link warnings.
5563
5564    * `binutils/readelf.c' to display your attribute.
5565
5566    * GCC, if you want the compiler to mark the attribute automatically.
5567
5568 \1f
5569 File: as.info,  Node: Machine Dependencies,  Next: Reporting Bugs,  Prev: Object Attributes,  Up: Top
5570
5571 9 Machine Dependent Features
5572 ****************************
5573
5574 The machine instruction sets are (almost by definition) different on
5575 each machine where `as' runs.  Floating point representations vary as
5576 well, and `as' often supports a few additional directives or
5577 command-line options for compatibility with other assemblers on a
5578 particular platform.  Finally, some versions of `as' support special
5579 pseudo-instructions for branch optimization.
5580
5581    This chapter discusses most of these differences, though it does not
5582 include details on any machine's instruction set.  For details on that
5583 subject, see the hardware manufacturer's manual.
5584
5585 * Menu:
5586
5587
5588 * AArch64-Dependent::           AArch64 Dependent Features
5589
5590 * Alpha-Dependent::             Alpha Dependent Features
5591
5592 * ARC-Dependent::               ARC Dependent Features
5593
5594 * ARM-Dependent::               ARM Dependent Features
5595
5596 * AVR-Dependent::               AVR Dependent Features
5597
5598 * Blackfin-Dependent::          Blackfin Dependent Features
5599
5600 * CR16-Dependent::              CR16 Dependent Features
5601
5602 * CRIS-Dependent::              CRIS Dependent Features
5603
5604 * D10V-Dependent::              D10V Dependent Features
5605
5606 * D30V-Dependent::              D30V Dependent Features
5607
5608 * Epiphany-Dependent::          EPIPHANY Dependent Features
5609
5610 * H8/300-Dependent::            Renesas H8/300 Dependent Features
5611
5612 * HPPA-Dependent::              HPPA Dependent Features
5613
5614 * ESA/390-Dependent::           IBM ESA/390 Dependent Features
5615
5616 * i386-Dependent::              Intel 80386 and AMD x86-64 Dependent Features
5617
5618 * i860-Dependent::              Intel 80860 Dependent Features
5619
5620 * i960-Dependent::              Intel 80960 Dependent Features
5621
5622 * IA-64-Dependent::             Intel IA-64 Dependent Features
5623
5624 * IP2K-Dependent::              IP2K Dependent Features
5625
5626 * LM32-Dependent::              LM32 Dependent Features
5627
5628 * M32C-Dependent::              M32C Dependent Features
5629
5630 * M32R-Dependent::              M32R Dependent Features
5631
5632 * M68K-Dependent::              M680x0 Dependent Features
5633
5634 * M68HC11-Dependent::           M68HC11 and 68HC12 Dependent Features
5635
5636 * MicroBlaze-Dependent::        MICROBLAZE Dependent Features
5637
5638 * MIPS-Dependent::              MIPS Dependent Features
5639
5640 * MMIX-Dependent::              MMIX Dependent Features
5641
5642 * MSP430-Dependent::            MSP430 Dependent Features
5643
5644 * NS32K-Dependent::             NS32K Dependent Features
5645
5646 * SH-Dependent::                Renesas / SuperH SH Dependent Features
5647 * SH64-Dependent::              SuperH SH64 Dependent Features
5648
5649 * PDP-11-Dependent::            PDP-11 Dependent Features
5650
5651 * PJ-Dependent::                picoJava Dependent Features
5652
5653 * PPC-Dependent::               PowerPC Dependent Features
5654
5655 * RL78-Dependent::              RL78 Dependent Features
5656
5657 * RX-Dependent::                RX Dependent Features
5658
5659 * S/390-Dependent::             IBM S/390 Dependent Features
5660
5661 * SCORE-Dependent::             SCORE Dependent Features
5662
5663 * Sparc-Dependent::             SPARC Dependent Features
5664
5665 * TIC54X-Dependent::            TI TMS320C54x Dependent Features
5666
5667 * TIC6X-Dependent ::            TI TMS320C6x Dependent Features
5668
5669 * TILE-Gx-Dependent ::          Tilera TILE-Gx Dependent Features
5670
5671 * TILEPro-Dependent ::          Tilera TILEPro Dependent Features
5672
5673 * V850-Dependent::              V850 Dependent Features
5674
5675 * XGATE-Dependent::             XGATE Features
5676
5677 * XSTORMY16-Dependent::         XStormy16 Dependent Features
5678
5679 * Xtensa-Dependent::            Xtensa Dependent Features
5680
5681 * Z80-Dependent::               Z80 Dependent Features
5682
5683 * Z8000-Dependent::             Z8000 Dependent Features
5684
5685 * Vax-Dependent::               VAX Dependent Features
5686
5687 \1f
5688 File: as.info,  Node: AArch64-Dependent,  Next: Alpha-Dependent,  Up: Machine Dependencies
5689
5690 9.1 AArch64 Dependent Features
5691 ==============================
5692
5693 * Menu:
5694
5695 * AArch64 Options::              Options
5696 * AArch64 Syntax::               Syntax
5697 * AArch64 Floating Point::       Floating Point
5698 * AArch64 Directives::           AArch64 Machine Directives
5699 * AArch64 Opcodes::              Opcodes
5700 * AArch64 Mapping Symbols::      Mapping Symbols
5701
5702 \1f
5703 File: as.info,  Node: AArch64 Options,  Next: AArch64 Syntax,  Up: AArch64-Dependent
5704
5705 9.1.1 Options
5706 -------------
5707
5708 `-EB'
5709      This option specifies that the output generated by the assembler
5710      should be marked as being encoded for a big-endian processor.
5711
5712 `-EL'
5713      This option specifies that the output generated by the assembler
5714      should be marked as being encoded for a little-endian processor.
5715
5716
5717 \1f
5718 File: as.info,  Node: AArch64 Syntax,  Next: AArch64 Floating Point,  Prev: AArch64 Options,  Up: AArch64-Dependent
5719
5720 9.1.2 Syntax
5721 ------------
5722
5723 * Menu:
5724
5725 * AArch64-Chars::                Special Characters
5726 * AArch64-Regs::                 Register Names
5727 * AArch64-Relocations::      Relocations
5728
5729 \1f
5730 File: as.info,  Node: AArch64-Chars,  Next: AArch64-Regs,  Up: AArch64 Syntax
5731
5732 9.1.2.1 Special Characters
5733 ..........................
5734
5735 The presence of a `//' on a line indicates the start of a comment that
5736 extends to the end of the current line.  If a `#' appears as the first
5737 character of a line, the whole line is treated as a comment.
5738
5739    The `;' character can be used instead of a newline to separate
5740 statements.
5741
5742    The `#' can be optionally used to indicate immediate operands.
5743
5744 \1f
5745 File: as.info,  Node: AArch64-Regs,  Next: AArch64-Relocations,  Prev: AArch64-Chars,  Up: AArch64 Syntax
5746
5747 9.1.2.2 Register Names
5748 ......................
5749
5750 Please refer to the section `4.4 Register Names' of `ARMv8 Instruction
5751 Set Overview', which is available at `http://infocenter.arm.com'.
5752
5753 \1f
5754 File: as.info,  Node: AArch64-Relocations,  Prev: AArch64-Regs,  Up: AArch64 Syntax
5755
5756 9.1.2.3 Relocations
5757 ...................
5758
5759 Relocations for `MOVZ' and `MOVK' instructions can be generated by
5760 prefixing the label with `#:abs_g2:' etc.  For example to load the
5761 48-bit absolute address of FOO into x0:
5762
5763              movz x0, #:abs_g2:foo              // bits 32-47, overflow check
5764              movk x0, #:abs_g1_nc:foo   // bits 16-31, no overflow check
5765              movk x0, #:abs_g0_nc:foo   // bits  0-15, no overflow check
5766
5767    Relocations for `ADRP', and `ADD', `LDR' or `STR' instructions can
5768 be generated by prefixing the label with `#:pg_hi21:' and `#:lo12:'
5769 respectively.
5770
5771    For example to use 33-bit (+/-4GB) pc-relative addressing to load
5772 the address of FOO into x0:
5773
5774              adrp x0, #:pg_hi21:foo
5775              add  x0, x0, #:lo12:foo
5776
5777    Or to load the value of FOO into x0:
5778
5779              adrp x0, #:pg_hi21:foo
5780              ldr  x0, [x0, #:lo12:foo]
5781
5782    Note that `#:pg_hi21:' is optional.
5783
5784              adrp x0, foo
5785
5786    is equivalent to
5787
5788              adrp x0, #:pg_hi21:foo
5789
5790 \1f
5791 File: as.info,  Node: AArch64 Floating Point,  Next: AArch64 Directives,  Prev: AArch64 Syntax,  Up: AArch64-Dependent
5792
5793 9.1.3 Floating Point
5794 --------------------
5795
5796 The AArch64 architecture uses IEEE floating-point numbers.
5797
5798 \1f
5799 File: as.info,  Node: AArch64 Directives,  Next: AArch64 Opcodes,  Prev: AArch64 Floating Point,  Up: AArch64-Dependent
5800
5801 9.1.4 AArch64 Machine Directives
5802 --------------------------------
5803
5804 `.bss'
5805      This directive switches to the `.bss' section.
5806
5807 `.ltorg'
5808      This directive causes the current contents of the literal pool to
5809      be dumped into the current section (which is assumed to be the
5810      .text section) at the current location (aligned to a word
5811      boundary).  `GAS' maintains a separate literal pool for each
5812      section and each sub-section.  The `.ltorg' directive will only
5813      affect the literal pool of the current section and sub-section.
5814      At the end of assembly all remaining, un-empty literal pools will
5815      automatically be dumped.
5816
5817      Note - older versions of `GAS' would dump the current literal pool
5818      any time a section change occurred.  This is no longer done, since
5819      it prevents accurate control of the placement of literal pools.
5820
5821 `.pool'
5822      This is a synonym for .ltorg.
5823
5824 `NAME .req REGISTER NAME'
5825      This creates an alias for REGISTER NAME called NAME.  For example:
5826
5827                   foo .req w0
5828
5829 `.unreq ALIAS-NAME'
5830      This undefines a register alias which was previously defined using
5831      the `req' directive.  For example:
5832
5833                   foo .req w0
5834                   .unreq foo
5835
5836      An error occurs if the name is undefined.  Note - this pseudo op
5837      can be used to delete builtin in register name aliases (eg 'w0').
5838      This should only be done if it is really necessary.
5839
5840
5841 \1f
5842 File: as.info,  Node: AArch64 Opcodes,  Next: AArch64 Mapping Symbols,  Prev: AArch64 Directives,  Up: AArch64-Dependent
5843
5844 9.1.5 Opcodes
5845 -------------
5846
5847 `as' implements all the standard AArch64 opcodes.  It also implements
5848 several pseudo opcodes, including several synthetic load instructions.
5849
5850 `LDR ='
5851             ldr <register> , =<expression>
5852
5853      The constant expression will be placed into the nearest literal
5854      pool (if it not already there) and a PC-relative LDR instruction
5855      will be generated.
5856
5857
5858    For more information on the AArch64 instruction set and assembly
5859 language notation, see `ARMv8 Instruction Set Overview' available at
5860 `http://infocenter.arm.com'.
5861
5862 \1f
5863 File: as.info,  Node: AArch64 Mapping Symbols,  Prev: AArch64 Opcodes,  Up: AArch64-Dependent
5864
5865 9.1.6 Mapping Symbols
5866 ---------------------
5867
5868 The AArch64 ELF specification requires that special symbols be inserted
5869 into object files to mark certain features:
5870
5871 `$x'
5872      At the start of a region of code containing AArch64 instructions.
5873
5874 `$d'
5875      At the start of a region of data.
5876
5877
5878 \1f
5879 File: as.info,  Node: Alpha-Dependent,  Next: ARC-Dependent,  Prev: AArch64-Dependent,  Up: Machine Dependencies
5880
5881 9.2 Alpha Dependent Features
5882 ============================
5883
5884 * Menu:
5885
5886 * Alpha Notes::                Notes
5887 * Alpha Options::              Options
5888 * Alpha Syntax::               Syntax
5889 * Alpha Floating Point::       Floating Point
5890 * Alpha Directives::           Alpha Machine Directives
5891 * Alpha Opcodes::              Opcodes
5892
5893 \1f
5894 File: as.info,  Node: Alpha Notes,  Next: Alpha Options,  Up: Alpha-Dependent
5895
5896 9.2.1 Notes
5897 -----------
5898
5899 The documentation here is primarily for the ELF object format.  `as'
5900 also supports the ECOFF and EVAX formats, but features specific to
5901 these formats are not yet documented.
5902
5903 \1f
5904 File: as.info,  Node: Alpha Options,  Next: Alpha Syntax,  Prev: Alpha Notes,  Up: Alpha-Dependent
5905
5906 9.2.2 Options
5907 -------------
5908
5909 `-mCPU'
5910      This option specifies the target processor.  If an attempt is made
5911      to assemble an instruction which will not execute on the target
5912      processor, the assembler may either expand the instruction as a
5913      macro or issue an error message.  This option is equivalent to the
5914      `.arch' directive.
5915
5916      The following processor names are recognized: `21064', `21064a',
5917      `21066', `21068', `21164', `21164a', `21164pc', `21264', `21264a',
5918      `21264b', `ev4', `ev5', `lca45', `ev5', `ev56', `pca56', `ev6',
5919      `ev67', `ev68'.  The special name `all' may be used to allow the
5920      assembler to accept instructions valid for any Alpha processor.
5921
5922      In order to support existing practice in OSF/1 with respect to
5923      `.arch', and existing practice within `MILO' (the Linux ARC
5924      bootloader), the numbered processor names (e.g. 21064) enable the
5925      processor-specific PALcode instructions, while the
5926      "electro-vlasic" names (e.g. `ev4') do not.
5927
5928 `-mdebug'
5929 `-no-mdebug'
5930      Enables or disables the generation of `.mdebug' encapsulation for
5931      stabs directives and procedure descriptors.  The default is to
5932      automatically enable `.mdebug' when the first stabs directive is
5933      seen.
5934
5935 `-relax'
5936      This option forces all relocations to be put into the object file,
5937      instead of saving space and resolving some relocations at assembly
5938      time.  Note that this option does not propagate all symbol
5939      arithmetic into the object file, because not all symbol arithmetic
5940      can be represented.  However, the option can still be useful in
5941      specific applications.
5942
5943 `-replace'
5944 `-noreplace'
5945      Enables or disables the optimization of procedure calls, both at
5946      assemblage and at link time.  These options are only available for
5947      VMS targets and `-replace' is the default.  See section 1.4.1 of
5948      the OpenVMS Linker Utility Manual.
5949
5950 `-g'
5951      This option is used when the compiler generates debug information.
5952      When `gcc' is using `mips-tfile' to generate debug information
5953      for ECOFF, local labels must be passed through to the object file.
5954      Otherwise this option has no effect.
5955
5956 `-GSIZE'
5957      A local common symbol larger than SIZE is placed in `.bss', while
5958      smaller symbols are placed in `.sbss'.
5959
5960 `-F'
5961 `-32addr'
5962      These options are ignored for backward compatibility.
5963
5964 \1f
5965 File: as.info,  Node: Alpha Syntax,  Next: Alpha Floating Point,  Prev: Alpha Options,  Up: Alpha-Dependent
5966
5967 9.2.3 Syntax
5968 ------------
5969
5970 The assembler syntax closely follow the Alpha Reference Manual;
5971 assembler directives and general syntax closely follow the OSF/1 and
5972 OpenVMS syntax, with a few differences for ELF.
5973
5974 * Menu:
5975
5976 * Alpha-Chars::                Special Characters
5977 * Alpha-Regs::                 Register Names
5978 * Alpha-Relocs::               Relocations
5979
5980 \1f
5981 File: as.info,  Node: Alpha-Chars,  Next: Alpha-Regs,  Up: Alpha Syntax
5982
5983 9.2.3.1 Special Characters
5984 ..........................
5985
5986 `#' is the line comment character.  Note that if `#' is the first
5987 character on a line then it can also be a logical line number directive
5988 (*note Comments::) or a preprocessor control command (*note
5989 Preprocessing::).
5990
5991    `;' can be used instead of a newline to separate statements.
5992
5993 \1f
5994 File: as.info,  Node: Alpha-Regs,  Next: Alpha-Relocs,  Prev: Alpha-Chars,  Up: Alpha Syntax
5995
5996 9.2.3.2 Register Names
5997 ......................
5998
5999 The 32 integer registers are referred to as `$N' or `$rN'.  In
6000 addition, registers 15, 28, 29, and 30 may be referred to by the
6001 symbols `$fp', `$at', `$gp', and `$sp' respectively.
6002
6003    The 32 floating-point registers are referred to as `$fN'.
6004
6005 \1f
6006 File: as.info,  Node: Alpha-Relocs,  Prev: Alpha-Regs,  Up: Alpha Syntax
6007
6008 9.2.3.3 Relocations
6009 ...................
6010
6011 Some of these relocations are available for ECOFF, but mostly only for
6012 ELF.  They are modeled after the relocation format introduced in
6013 Digital Unix 4.0, but there are additions.
6014
6015    The format is `!TAG' or `!TAG!NUMBER' where TAG is the name of the
6016 relocation.  In some cases NUMBER is used to relate specific
6017 instructions.
6018
6019    The relocation is placed at the end of the instruction like so:
6020
6021      ldah  $0,a($29)    !gprelhigh
6022      lda   $0,a($0)     !gprellow
6023      ldq   $1,b($29)    !literal!100
6024      ldl   $2,0($1)     !lituse_base!100
6025
6026 `!literal'
6027 `!literal!N'
6028      Used with an `ldq' instruction to load the address of a symbol
6029      from the GOT.
6030
6031      A sequence number N is optional, and if present is used to pair
6032      `lituse' relocations with this `literal' relocation.  The `lituse'
6033      relocations are used by the linker to optimize the code based on
6034      the final location of the symbol.
6035
6036      Note that these optimizations are dependent on the data flow of the
6037      program.  Therefore, if _any_ `lituse' is paired with a `literal'
6038      relocation, then _all_ uses of the register set by the `literal'
6039      instruction must also be marked with `lituse' relocations.  This
6040      is because the original `literal' instruction may be deleted or
6041      transformed into another instruction.
6042
6043      Also note that there may be a one-to-many relationship between
6044      `literal' and `lituse', but not a many-to-one.  That is, if there
6045      are two code paths that load up the same address and feed the
6046      value to a single use, then the use may not use a `lituse'
6047      relocation.
6048
6049 `!lituse_base!N'
6050      Used with any memory format instruction (e.g. `ldl') to indicate
6051      that the literal is used for an address load.  The offset field of
6052      the instruction must be zero.  During relaxation, the code may be
6053      altered to use a gp-relative load.
6054
6055 `!lituse_jsr!N'
6056      Used with a register branch format instruction (e.g. `jsr') to
6057      indicate that the literal is used for a call.  During relaxation,
6058      the code may be altered to use a direct branch (e.g. `bsr').
6059
6060 `!lituse_jsrdirect!N'
6061      Similar to `lituse_jsr', but also that this call cannot be vectored
6062      through a PLT entry.  This is useful for functions with special
6063      calling conventions which do not allow the normal call-clobbered
6064      registers to be clobbered.
6065
6066 `!lituse_bytoff!N'
6067      Used with a byte mask instruction (e.g. `extbl') to indicate that
6068      only the low 3 bits of the address are relevant.  During
6069      relaxation, the code may be altered to use an immediate instead of
6070      a register shift.
6071
6072 `!lituse_addr!N'
6073      Used with any other instruction to indicate that the original
6074      address is in fact used, and the original `ldq' instruction may
6075      not be altered or deleted.  This is useful in conjunction with
6076      `lituse_jsr' to test whether a weak symbol is defined.
6077
6078           ldq  $27,foo($29)   !literal!1
6079           beq  $27,is_undef   !lituse_addr!1
6080           jsr  $26,($27),foo  !lituse_jsr!1
6081
6082 `!lituse_tlsgd!N'
6083      Used with a register branch format instruction to indicate that the
6084      literal is the call to `__tls_get_addr' used to compute the
6085      address of the thread-local storage variable whose descriptor was
6086      loaded with `!tlsgd!N'.
6087
6088 `!lituse_tlsldm!N'
6089      Used with a register branch format instruction to indicate that the
6090      literal is the call to `__tls_get_addr' used to compute the
6091      address of the base of the thread-local storage block for the
6092      current module.  The descriptor for the module must have been
6093      loaded with `!tlsldm!N'.
6094
6095 `!gpdisp!N'
6096      Used with `ldah' and `lda' to load the GP from the current
6097      address, a-la the `ldgp' macro.  The source register for the
6098      `ldah' instruction must contain the address of the `ldah'
6099      instruction.  There must be exactly one `lda' instruction paired
6100      with the `ldah' instruction, though it may appear anywhere in the
6101      instruction stream.  The immediate operands must be zero.
6102
6103           bsr  $26,foo
6104           ldah $29,0($26)     !gpdisp!1
6105           lda  $29,0($29)     !gpdisp!1
6106
6107 `!gprelhigh'
6108      Used with an `ldah' instruction to add the high 16 bits of a
6109      32-bit displacement from the GP.
6110
6111 `!gprellow'
6112      Used with any memory format instruction to add the low 16 bits of a
6113      32-bit displacement from the GP.
6114
6115 `!gprel'
6116      Used with any memory format instruction to add a 16-bit
6117      displacement from the GP.
6118
6119 `!samegp'
6120      Used with any branch format instruction to skip the GP load at the
6121      target address.  The referenced symbol must have the same GP as the
6122      source object file, and it must be declared to either not use `$27'
6123      or perform a standard GP load in the first two instructions via the
6124      `.prologue' directive.
6125
6126 `!tlsgd'
6127 `!tlsgd!N'
6128      Used with an `lda' instruction to load the address of a TLS
6129      descriptor for a symbol in the GOT.
6130
6131      The sequence number N is optional, and if present it used to pair
6132      the descriptor load with both the `literal' loading the address of
6133      the `__tls_get_addr' function and the `lituse_tlsgd' marking the
6134      call to that function.
6135
6136      For proper relaxation, both the `tlsgd', `literal' and `lituse'
6137      relocations must be in the same extended basic block.  That is,
6138      the relocation with the lowest address must be executed first at
6139      runtime.
6140
6141 `!tlsldm'
6142 `!tlsldm!N'
6143      Used with an `lda' instruction to load the address of a TLS
6144      descriptor for the current module in the GOT.
6145
6146      Similar in other respects to `tlsgd'.
6147
6148 `!gotdtprel'
6149      Used with an `ldq' instruction to load the offset of the TLS
6150      symbol within its module's thread-local storage block.  Also known
6151      as the dynamic thread pointer offset or dtp-relative offset.
6152
6153 `!dtprelhi'
6154 `!dtprello'
6155 `!dtprel'
6156      Like `gprel' relocations except they compute dtp-relative offsets.
6157
6158 `!gottprel'
6159      Used with an `ldq' instruction to load the offset of the TLS
6160      symbol from the thread pointer.  Also known as the tp-relative
6161      offset.
6162
6163 `!tprelhi'
6164 `!tprello'
6165 `!tprel'
6166      Like `gprel' relocations except they compute tp-relative offsets.
6167
6168 \1f
6169 File: as.info,  Node: Alpha Floating Point,  Next: Alpha Directives,  Prev: Alpha Syntax,  Up: Alpha-Dependent
6170
6171 9.2.4 Floating Point
6172 --------------------
6173
6174 The Alpha family uses both IEEE and VAX floating-point numbers.
6175
6176 \1f
6177 File: as.info,  Node: Alpha Directives,  Next: Alpha Opcodes,  Prev: Alpha Floating Point,  Up: Alpha-Dependent
6178
6179 9.2.5 Alpha Assembler Directives
6180 --------------------------------
6181
6182 `as' for the Alpha supports many additional directives for
6183 compatibility with the native assembler.  This section describes them
6184 only briefly.
6185
6186    These are the additional directives in `as' for the Alpha:
6187
6188 `.arch CPU'
6189      Specifies the target processor.  This is equivalent to the `-mCPU'
6190      command-line option.  *Note Options: Alpha Options, for a list of
6191      values for CPU.
6192
6193 `.ent FUNCTION[, N]'
6194      Mark the beginning of FUNCTION.  An optional number may follow for
6195      compatibility with the OSF/1 assembler, but is ignored.  When
6196      generating `.mdebug' information, this will create a procedure
6197      descriptor for the function.  In ELF, it will mark the symbol as a
6198      function a-la the generic `.type' directive.
6199
6200 `.end FUNCTION'
6201      Mark the end of FUNCTION.  In ELF, it will set the size of the
6202      symbol a-la the generic `.size' directive.
6203
6204 `.mask MASK, OFFSET'
6205      Indicate which of the integer registers are saved in the current
6206      function's stack frame.  MASK is interpreted a bit mask in which
6207      bit N set indicates that register N is saved.  The registers are
6208      saved in a block located OFFSET bytes from the "canonical frame
6209      address" (CFA) which is the value of the stack pointer on entry to
6210      the function.  The registers are saved sequentially, except that
6211      the return address register (normally `$26') is saved first.
6212
6213      This and the other directives that describe the stack frame are
6214      currently only used when generating `.mdebug' information.  They
6215      may in the future be used to generate DWARF2 `.debug_frame' unwind
6216      information for hand written assembly.
6217
6218 `.fmask MASK, OFFSET'
6219      Indicate which of the floating-point registers are saved in the
6220      current stack frame.  The MASK and OFFSET parameters are
6221      interpreted as with `.mask'.
6222
6223 `.frame FRAMEREG, FRAMEOFFSET, RETREG[, ARGOFFSET]'
6224      Describes the shape of the stack frame.  The frame pointer in use
6225      is FRAMEREG; normally this is either `$fp' or `$sp'.  The frame
6226      pointer is FRAMEOFFSET bytes below the CFA.  The return address is
6227      initially located in RETREG until it is saved as indicated in
6228      `.mask'.  For compatibility with OSF/1 an optional ARGOFFSET
6229      parameter is accepted and ignored.  It is believed to indicate the
6230      offset from the CFA to the saved argument registers.
6231
6232 `.prologue N'
6233      Indicate that the stack frame is set up and all registers have been
6234      spilled.  The argument N indicates whether and how the function
6235      uses the incoming "procedure vector" (the address of the called
6236      function) in `$27'.  0 indicates that `$27' is not used; 1
6237      indicates that the first two instructions of the function use `$27'
6238      to perform a load of the GP register; 2 indicates that `$27' is
6239      used in some non-standard way and so the linker cannot elide the
6240      load of the procedure vector during relaxation.
6241
6242 `.usepv FUNCTION, WHICH'
6243      Used to indicate the use of the `$27' register, similar to
6244      `.prologue', but without the other semantics of needing to be
6245      inside an open `.ent'/`.end' block.
6246
6247      The WHICH argument should be either `no', indicating that `$27' is
6248      not used, or `std', indicating that the first two instructions of
6249      the function perform a GP load.
6250
6251      One might use this directive instead of `.prologue' if you are
6252      also using dwarf2 CFI directives.
6253
6254 `.gprel32 EXPRESSION'
6255      Computes the difference between the address in EXPRESSION and the
6256      GP for the current object file, and stores it in 4 bytes.  In
6257      addition to being smaller than a full 8 byte address, this also
6258      does not require a dynamic relocation when used in a shared
6259      library.
6260
6261 `.t_floating EXPRESSION'
6262      Stores EXPRESSION as an IEEE double precision value.
6263
6264 `.s_floating EXPRESSION'
6265      Stores EXPRESSION as an IEEE single precision value.
6266
6267 `.f_floating EXPRESSION'
6268      Stores EXPRESSION as a VAX F format value.
6269
6270 `.g_floating EXPRESSION'
6271      Stores EXPRESSION as a VAX G format value.
6272
6273 `.d_floating EXPRESSION'
6274      Stores EXPRESSION as a VAX D format value.
6275
6276 `.set FEATURE'
6277      Enables or disables various assembler features.  Using the positive
6278      name of the feature enables while using `noFEATURE' disables.
6279
6280     `at'
6281           Indicates that macro expansions may clobber the "assembler
6282           temporary" (`$at' or `$28') register.  Some macros may not be
6283           expanded without this and will generate an error message if
6284           `noat' is in effect.  When `at' is in effect, a warning will
6285           be generated if `$at' is used by the programmer.
6286
6287     `macro'
6288           Enables the expansion of macro instructions.  Note that
6289           variants of real instructions, such as `br label' vs `br
6290           $31,label' are considered alternate forms and not macros.
6291
6292     `move'
6293     `reorder'
6294     `volatile'
6295           These control whether and how the assembler may re-order
6296           instructions.  Accepted for compatibility with the OSF/1
6297           assembler, but `as' does not do instruction scheduling, so
6298           these features are ignored.
6299
6300    The following directives are recognized for compatibility with the
6301 OSF/1 assembler but are ignored.
6302
6303      .proc           .aproc
6304      .reguse         .livereg
6305      .option         .aent
6306      .ugen           .eflag
6307      .alias          .noalias
6308
6309 \1f
6310 File: as.info,  Node: Alpha Opcodes,  Prev: Alpha Directives,  Up: Alpha-Dependent
6311
6312 9.2.6 Opcodes
6313 -------------
6314
6315 For detailed information on the Alpha machine instruction set, see the
6316 Alpha Architecture Handbook
6317 (ftp://ftp.digital.com/pub/Digital/info/semiconductor/literature/alphaahb.pdf).
6318
6319 \1f
6320 File: as.info,  Node: ARC-Dependent,  Next: ARM-Dependent,  Prev: Alpha-Dependent,  Up: Machine Dependencies
6321
6322 9.3 ARC Dependent Features
6323 ==========================
6324
6325 * Menu:
6326
6327 * ARC Options::              Options
6328 * ARC Syntax::               Syntax
6329 * ARC Floating Point::       Floating Point
6330 * ARC Directives::           ARC Machine Directives
6331 * ARC Opcodes::              Opcodes
6332
6333 \1f
6334 File: as.info,  Node: ARC Options,  Next: ARC Syntax,  Up: ARC-Dependent
6335
6336 9.3.1 Options
6337 -------------
6338
6339 `-marc[5|6|7|8]'
6340      This option selects the core processor variant.  Using `-marc' is
6341      the same as `-marc6', which is also the default.
6342
6343     `arc5'
6344           Base instruction set.
6345
6346     `arc6'
6347           Jump-and-link (jl) instruction.  No requirement of an
6348           instruction between setting flags and conditional jump.  For
6349           example:
6350
6351                  mov.f r0,r1
6352                  beq   foo
6353
6354     `arc7'
6355           Break (brk) and sleep (sleep) instructions.
6356
6357     `arc8'
6358           Software interrupt (swi) instruction.
6359
6360
6361      Note: the `.option' directive can to be used to select a core
6362      variant from within assembly code.
6363
6364 `-EB'
6365      This option specifies that the output generated by the assembler
6366      should be marked as being encoded for a big-endian processor.
6367
6368 `-EL'
6369      This option specifies that the output generated by the assembler
6370      should be marked as being encoded for a little-endian processor -
6371      this is the default.
6372
6373
6374 \1f
6375 File: as.info,  Node: ARC Syntax,  Next: ARC Floating Point,  Prev: ARC Options,  Up: ARC-Dependent
6376
6377 9.3.2 Syntax
6378 ------------
6379
6380 * Menu:
6381
6382 * ARC-Chars::                Special Characters
6383 * ARC-Regs::                 Register Names
6384
6385 \1f
6386 File: as.info,  Node: ARC-Chars,  Next: ARC-Regs,  Up: ARC Syntax
6387
6388 9.3.2.1 Special Characters
6389 ..........................
6390
6391 The presence of a `#' on a line indicates the start of a comment that
6392 extends to the end of the current line.  Note that if a line starts
6393 with a `#' character then it can also be a logical line number
6394 directive (*note Comments::) or a preprocessor control command (*note
6395 Preprocessing::).
6396
6397    The ARC assembler does not support a line separator character.
6398
6399 \1f
6400 File: as.info,  Node: ARC-Regs,  Prev: ARC-Chars,  Up: ARC Syntax
6401
6402 9.3.2.2 Register Names
6403 ......................
6404
6405 *TODO*
6406
6407 \1f
6408 File: as.info,  Node: ARC Floating Point,  Next: ARC Directives,  Prev: ARC Syntax,  Up: ARC-Dependent
6409
6410 9.3.3 Floating Point
6411 --------------------
6412
6413 The ARC core does not currently have hardware floating point support.
6414 Software floating point support is provided by `GCC' and uses IEEE
6415 floating-point numbers.
6416
6417 \1f
6418 File: as.info,  Node: ARC Directives,  Next: ARC Opcodes,  Prev: ARC Floating Point,  Up: ARC-Dependent
6419
6420 9.3.4 ARC Machine Directives
6421 ----------------------------
6422
6423 The ARC version of `as' supports the following additional machine
6424 directives:
6425
6426 `.2byte EXPRESSIONS'
6427      *TODO*
6428
6429 `.3byte EXPRESSIONS'
6430      *TODO*
6431
6432 `.4byte EXPRESSIONS'
6433      *TODO*
6434
6435 `.extAuxRegister NAME,ADDRESS,MODE'
6436      The ARCtangent A4 has extensible auxiliary register space.  The
6437      auxiliary registers can be defined in the assembler source code by
6438      using this directive.  The first parameter is the NAME of the new
6439      auxiallry register.  The second parameter is the ADDRESS of the
6440      register in the auxiliary register memory map for the variant of
6441      the ARC.  The third parameter specifies the MODE in which the
6442      register can be operated is and it can be one of:
6443
6444     `r          (readonly)'
6445
6446     `w          (write only)'
6447
6448     `r|w        (read or write)'
6449
6450      For example:
6451
6452             .extAuxRegister mulhi,0x12,w
6453
6454      This specifies an extension auxiliary register called _mulhi_
6455      which is at address 0x12 in the memory space and which is only
6456      writable.
6457
6458 `.extCondCode SUFFIX,VALUE'
6459      The condition codes on the ARCtangent A4 are extensible and can be
6460      specified by means of this assembler directive.  They are specified
6461      by the suffix and the value for the condition code.  They can be
6462      used to specify extra condition codes with any values.  For
6463      example:
6464
6465             .extCondCode is_busy,0x14
6466
6467              add.is_busy  r1,r2,r3
6468              bis_busy     _main
6469
6470 `.extCoreRegister NAME,REGNUM,MODE,SHORTCUT'
6471      Specifies an extension core register NAME for the application.
6472      This allows a register NAME with a valid REGNUM between 0 and 60,
6473      with the following as valid values for MODE
6474
6475     `_r_   (readonly)'
6476
6477     `_w_   (write only)'
6478
6479     `_r|w_ (read or write)'
6480
6481      The other parameter gives a description of the register having a
6482      SHORTCUT in the pipeline.  The valid values are:
6483
6484     `can_shortcut'
6485
6486     `cannot_shortcut'
6487
6488      For example:
6489
6490             .extCoreRegister mlo,57,r,can_shortcut
6491
6492      This defines an extension core register mlo with the value 57 which
6493      can shortcut the pipeline.
6494
6495 `.extInstruction NAME,OPCODE,SUBOPCODE,SUFFIXCLASS,SYNTAXCLASS'
6496      The ARCtangent A4 allows the user to specify extension
6497      instructions.  The extension instructions are not macros.  The
6498      assembler creates encodings for use of these instructions
6499      according to the specification by the user.  The parameters are:
6500
6501     *NAME
6502           Name of the extension instruction
6503
6504     *OPCODE
6505           Opcode to be used. (Bits 27:31 in the encoding).  Valid values
6506           0x10-0x1f or 0x03
6507
6508     *SUBOPCODE
6509           Subopcode to be used.  Valid values are from 0x09-0x3f.
6510           However the correct value also depends on SYNTAXCLASS
6511
6512     *SUFFIXCLASS
6513           Determines the kinds of suffixes to be allowed.  Valid values
6514           are `SUFFIX_NONE', `SUFFIX_COND', `SUFFIX_FLAG' which
6515           indicates the absence or presence of conditional suffixes and
6516           flag setting by the extension instruction.  It is also
6517           possible to specify that an instruction sets the flags and is
6518           conditional by using `SUFFIX_CODE' | `SUFFIX_FLAG'.
6519
6520     *SYNTAXCLASS
6521           Determines the syntax class for the instruction.  It can have
6522           the following values:
6523
6524          ``SYNTAX_2OP':'
6525                2 Operand Instruction
6526
6527          ``SYNTAX_3OP':'
6528                3 Operand Instruction
6529
6530           In addition there could be modifiers for the syntax class as
6531           described below:
6532
6533                Syntax Class Modifiers are:
6534
6535              - `OP1_MUST_BE_IMM': Modifies syntax class SYNTAX_3OP,
6536                specifying that the first operand of a three-operand
6537                instruction must be an immediate (i.e., the result is
6538                discarded).  OP1_MUST_BE_IMM is used by bitwise ORing it
6539                with SYNTAX_3OP as given in the example below.  This
6540                could usually be used to set the flags using specific
6541                instructions and not retain results.
6542
6543              - `OP1_IMM_IMPLIED': Modifies syntax class SYNTAX_20P, it
6544                specifies that there is an implied immediate destination
6545                operand which does not appear in the syntax.  For
6546                example, if the source code contains an instruction like:
6547
6548                     inst r1,r2
6549
6550                it really means that the first argument is an implied
6551                immediate (that is, the result is discarded).  This is
6552                the same as though the source code were: inst 0,r1,r2.
6553                You use OP1_IMM_IMPLIED by bitwise ORing it with
6554                SYNTAX_20P.
6555
6556
6557      For example, defining 64-bit multiplier with immediate operands:
6558
6559           .extInstruction mp64,0x14,0x0,SUFFIX_COND | SUFFIX_FLAG ,
6560                           SYNTAX_3OP|OP1_MUST_BE_IMM
6561
6562      The above specifies an extension instruction called mp64 which has
6563      3 operands, sets the flags, can be used with a condition code, for
6564      which the first operand is an immediate.  (Equivalent to
6565      discarding the result of the operation).
6566
6567            .extInstruction mul64,0x14,0x00,SUFFIX_COND, SYNTAX_2OP|OP1_IMM_IMPLIED
6568
6569      This describes a 2 operand instruction with an implicit first
6570      immediate operand.  The result of this operation would be
6571      discarded.
6572
6573 `.half EXPRESSIONS'
6574      *TODO*
6575
6576 `.long EXPRESSIONS'
6577      *TODO*
6578
6579 `.option ARC|ARC5|ARC6|ARC7|ARC8'
6580      The `.option' directive must be followed by the desired core
6581      version. Again `arc' is an alias for `arc6'.
6582
6583      Note: the `.option' directive overrides the command line option
6584      `-marc'; a warning is emitted when the version is not consistent
6585      between the two - even for the implicit default core version
6586      (arc6).
6587
6588 `.short EXPRESSIONS'
6589      *TODO*
6590
6591 `.word EXPRESSIONS'
6592      *TODO*
6593
6594
6595 \1f
6596 File: as.info,  Node: ARC Opcodes,  Prev: ARC Directives,  Up: ARC-Dependent
6597
6598 9.3.5 Opcodes
6599 -------------
6600
6601 For information on the ARC instruction set, see `ARC Programmers
6602 Reference Manual', ARC International (www.arc.com)
6603
6604 \1f
6605 File: as.info,  Node: ARM-Dependent,  Next: AVR-Dependent,  Prev: ARC-Dependent,  Up: Machine Dependencies
6606
6607 9.4 ARM Dependent Features
6608 ==========================
6609
6610 * Menu:
6611
6612 * ARM Options::              Options
6613 * ARM Syntax::               Syntax
6614 * ARM Floating Point::       Floating Point
6615 * ARM Directives::           ARM Machine Directives
6616 * ARM Opcodes::              Opcodes
6617 * ARM Mapping Symbols::      Mapping Symbols
6618 * ARM Unwinding Tutorial::   Unwinding
6619
6620 \1f
6621 File: as.info,  Node: ARM Options,  Next: ARM Syntax,  Up: ARM-Dependent
6622
6623 9.4.1 Options
6624 -------------
6625
6626 `-mcpu=PROCESSOR[+EXTENSION...]'
6627      This option specifies the target processor.  The assembler will
6628      issue an error message if an attempt is made to assemble an
6629      instruction which will not execute on the target processor.  The
6630      following processor names are recognized: `arm1', `arm2', `arm250',
6631      `arm3', `arm6', `arm60', `arm600', `arm610', `arm620', `arm7',
6632      `arm7m', `arm7d', `arm7dm', `arm7di', `arm7dmi', `arm70', `arm700',
6633      `arm700i', `arm710', `arm710t', `arm720', `arm720t', `arm740t',
6634      `arm710c', `arm7100', `arm7500', `arm7500fe', `arm7t', `arm7tdmi',
6635      `arm7tdmi-s', `arm8', `arm810', `strongarm', `strongarm1',
6636      `strongarm110', `strongarm1100', `strongarm1110', `arm9', `arm920',
6637      `arm920t', `arm922t', `arm940t', `arm9tdmi', `fa526' (Faraday
6638      FA526 processor), `fa626' (Faraday FA626 processor), `arm9e',
6639      `arm926e', `arm926ej-s', `arm946e-r0', `arm946e', `arm946e-s',
6640      `arm966e-r0', `arm966e', `arm966e-s', `arm968e-s', `arm10t',
6641      `arm10tdmi', `arm10e', `arm1020', `arm1020t', `arm1020e',
6642      `arm1022e', `arm1026ej-s', `fa606te' (Faraday FA606TE processor),
6643      `fa616te' (Faraday FA616TE processor), `fa626te' (Faraday FA626TE
6644      processor), `fmp626' (Faraday FMP626 processor), `fa726te'
6645      (Faraday FA726TE processor), `arm1136j-s', `arm1136jf-s',
6646      `arm1156t2-s', `arm1156t2f-s', `arm1176jz-s', `arm1176jzf-s',
6647      `mpcore', `mpcorenovfp', `cortex-a5', `cortex-a7', `cortex-a8',
6648      `cortex-a9', `cortex-a15', `cortex-r4', `cortex-r4f', `cortex-r5',
6649      `cortex-r7', `cortex-m4', `cortex-m3', `cortex-m1', `cortex-m0',
6650      `cortex-m0plus', `ep9312' (ARM920 with Cirrus Maverick
6651      coprocessor), `i80200' (Intel XScale processor) `iwmmxt' (Intel(r)
6652      XScale processor with Wireless MMX(tm) technology coprocessor) and
6653      `xscale'.  The special name `all' may be used to allow the
6654      assembler to accept instructions valid for any ARM processor.
6655
6656      In addition to the basic instruction set, the assembler can be
6657      told to accept various extension mnemonics that extend the
6658      processor using the co-processor instruction space.  For example,
6659      `-mcpu=arm920+maverick' is equivalent to specifying `-mcpu=ep9312'.
6660
6661      Multiple extensions may be specified, separated by a `+'.  The
6662      extensions should be specified in ascending alphabetical order.
6663
6664      Some extensions may be restricted to particular architectures;
6665      this is documented in the list of extensions below.
6666
6667      Extension mnemonics may also be removed from those the assembler
6668      accepts.  This is done be prepending `no' to the option that adds
6669      the extension.  Extensions that are removed should be listed after
6670      all extensions which have been added, again in ascending
6671      alphabetical order.  For example, `-mcpu=ep9312+nomaverick' is
6672      equivalent to specifying `-mcpu=arm920'.
6673
6674      The following extensions are currently supported: `crypto'
6675      (Cryptography Extensions for v8-A architecture, implies `fp+simd'),
6676      `fp' (Floating Point Extensions for v8-A architecture), `idiv'
6677      (Integer Divide Extensions for v7-A and v7-R architectures),
6678      `iwmmxt', `iwmmxt2', `maverick', `mp' (Multiprocessing Extensions
6679      for v7-A and v7-R architectures), `os' (Operating System for v6M
6680      architecture), `sec' (Security Extensions for v6K and v7-A
6681      architectures), `simd' (Advanced SIMD Extensions for v8-A
6682      architecture, implies `fp'), `virt' (Virtualization Extensions for
6683      v7-A architecture, implies `idiv'), and `xscale'.
6684
6685 `-march=ARCHITECTURE[+EXTENSION...]'
6686      This option specifies the target architecture.  The assembler will
6687      issue an error message if an attempt is made to assemble an
6688      instruction which will not execute on the target architecture.
6689      The following architecture names are recognized: `armv1', `armv2',
6690      `armv2a', `armv2s', `armv3', `armv3m', `armv4', `armv4xm',
6691      `armv4t', `armv4txm', `armv5', `armv5t', `armv5txm', `armv5te',
6692      `armv5texp', `armv6', `armv6j', `armv6k', `armv6z', `armv6zk',
6693      `armv6-m', `armv6s-m', `armv7', `armv7-a', `armv7-r', `armv7-m',
6694      `armv7e-m', `armv8-a', `iwmmxt' and `xscale'.  If both `-mcpu' and
6695      `-march' are specified, the assembler will use the setting for
6696      `-mcpu'.
6697
6698      The architecture option can be extended with the same instruction
6699      set extension options as the `-mcpu' option.
6700
6701 `-mfpu=FLOATING-POINT-FORMAT'
6702      This option specifies the floating point format to assemble for.
6703      The assembler will issue an error message if an attempt is made to
6704      assemble an instruction which will not execute on the target
6705      floating point unit.  The following format options are recognized:
6706      `softfpa', `fpe', `fpe2', `fpe3', `fpa', `fpa10', `fpa11',
6707      `arm7500fe', `softvfp', `softvfp+vfp', `vfp', `vfp10', `vfp10-r0',
6708      `vfp9', `vfpxd', `vfpv2', `vfpv3', `vfpv3-fp16', `vfpv3-d16',
6709      `vfpv3-d16-fp16', `vfpv3xd', `vfpv3xd-d16', `vfpv4', `vfpv4-d16',
6710      `fpv4-sp-d16', `fp-armv8', `arm1020t', `arm1020e', `arm1136jf-s',
6711      `maverick', `neon', `neon-vfpv4', `neon-fp-armv8', and
6712      `crypto-neon-fp-armv8'.
6713
6714      In addition to determining which instructions are assembled, this
6715      option also affects the way in which the `.double' assembler
6716      directive behaves when assembling little-endian code.
6717
6718      The default is dependent on the processor selected.  For
6719      Architecture 5 or later, the default is to assembler for VFP
6720      instructions; for earlier architectures the default is to assemble
6721      for FPA instructions.
6722
6723 `-mthumb'
6724      This option specifies that the assembler should start assembling
6725      Thumb instructions; that is, it should behave as though the file
6726      starts with a `.code 16' directive.
6727
6728 `-mthumb-interwork'
6729      This option specifies that the output generated by the assembler
6730      should be marked as supporting interworking.
6731
6732 `-mimplicit-it=never'
6733 `-mimplicit-it=always'
6734 `-mimplicit-it=arm'
6735 `-mimplicit-it=thumb'
6736      The `-mimplicit-it' option controls the behavior of the assembler
6737      when conditional instructions are not enclosed in IT blocks.
6738      There are four possible behaviors.  If `never' is specified, such
6739      constructs cause a warning in ARM code and an error in Thumb-2
6740      code.  If `always' is specified, such constructs are accepted in
6741      both ARM and Thumb-2 code, where the IT instruction is added
6742      implicitly.  If `arm' is specified, such constructs are accepted
6743      in ARM code and cause an error in Thumb-2 code.  If `thumb' is
6744      specified, such constructs cause a warning in ARM code and are
6745      accepted in Thumb-2 code.  If you omit this option, the behavior
6746      is equivalent to `-mimplicit-it=arm'.
6747
6748 `-mapcs-26'
6749 `-mapcs-32'
6750      These options specify that the output generated by the assembler
6751      should be marked as supporting the indicated version of the Arm
6752      Procedure.  Calling Standard.
6753
6754 `-matpcs'
6755      This option specifies that the output generated by the assembler
6756      should be marked as supporting the Arm/Thumb Procedure Calling
6757      Standard.  If enabled this option will cause the assembler to
6758      create an empty debugging section in the object file called
6759      .arm.atpcs.  Debuggers can use this to determine the ABI being
6760      used by.
6761
6762 `-mapcs-float'
6763      This indicates the floating point variant of the APCS should be
6764      used.  In this variant floating point arguments are passed in FP
6765      registers rather than integer registers.
6766
6767 `-mapcs-reentrant'
6768      This indicates that the reentrant variant of the APCS should be
6769      used.  This variant supports position independent code.
6770
6771 `-mfloat-abi=ABI'
6772      This option specifies that the output generated by the assembler
6773      should be marked as using specified floating point ABI.  The
6774      following values are recognized: `soft', `softfp' and `hard'.
6775
6776 `-meabi=VER'
6777      This option specifies which EABI version the produced object files
6778      should conform to.  The following values are recognized: `gnu', `4'
6779      and `5'.
6780
6781 `-EB'
6782      This option specifies that the output generated by the assembler
6783      should be marked as being encoded for a big-endian processor.
6784
6785 `-EL'
6786      This option specifies that the output generated by the assembler
6787      should be marked as being encoded for a little-endian processor.
6788
6789 `-k'
6790      This option specifies that the output of the assembler should be
6791      marked as position-independent code (PIC).
6792
6793 `--fix-v4bx'
6794      Allow `BX' instructions in ARMv4 code.  This is intended for use
6795      with the linker option of the same name.
6796
6797 `-mwarn-deprecated'
6798 `-mno-warn-deprecated'
6799      Enable or disable warnings about using deprecated options or
6800      features.  The default is to warn.
6801
6802
6803 \1f
6804 File: as.info,  Node: ARM Syntax,  Next: ARM Floating Point,  Prev: ARM Options,  Up: ARM-Dependent
6805
6806 9.4.2 Syntax
6807 ------------
6808
6809 * Menu:
6810
6811 * ARM-Instruction-Set::      Instruction Set
6812 * ARM-Chars::                Special Characters
6813 * ARM-Regs::                 Register Names
6814 * ARM-Relocations::          Relocations
6815 * ARM-Neon-Alignment::       NEON Alignment Specifiers
6816
6817 \1f
6818 File: as.info,  Node: ARM-Instruction-Set,  Next: ARM-Chars,  Up: ARM Syntax
6819
6820 9.4.2.1 Instruction Set Syntax
6821 ..............................
6822
6823 Two slightly different syntaxes are support for ARM and THUMB
6824 instructions.  The default, `divided', uses the old style where ARM and
6825 THUMB instructions had their own, separate syntaxes.  The new,
6826 `unified' syntax, which can be selected via the `.syntax' directive,
6827 and has the following main features:
6828
6829 *
6830      Immediate operands do not require a `#' prefix.
6831
6832 *
6833      The `IT' instruction may appear, and if it does it is validated
6834      against subsequent conditional affixes.  In ARM mode it does not
6835      generate machine code, in THUMB mode it does.
6836
6837 *
6838      For ARM instructions the conditional affixes always appear at the
6839      end of the instruction.  For THUMB instructions conditional
6840      affixes can be used, but only inside the scope of an `IT'
6841      instruction.
6842
6843 *
6844      All of the instructions new to the V6T2 architecture (and later)
6845      are available.  (Only a few such instructions can be written in the
6846      `divided' syntax).
6847
6848 *
6849      The `.N' and `.W' suffixes are recognized and honored.
6850
6851 *
6852      All instructions set the flags if and only if they have an `s'
6853      affix.
6854
6855 \1f
6856 File: as.info,  Node: ARM-Chars,  Next: ARM-Regs,  Prev: ARM-Instruction-Set,  Up: ARM Syntax
6857
6858 9.4.2.2 Special Characters
6859 ..........................
6860
6861 The presence of a `@' anywhere on a line indicates the start of a
6862 comment that extends to the end of that line.
6863
6864    If a `#' appears as the first character of a line then the whole
6865 line is treated as a comment, but in this case the line could also be a
6866 logical line number directive (*note Comments::) or a preprocessor
6867 control command (*note Preprocessing::).
6868
6869    The `;' character can be used instead of a newline to separate
6870 statements.
6871
6872    Either `#' or `$' can be used to indicate immediate operands.
6873
6874    *TODO* Explain about /data modifier on symbols.
6875
6876 \1f
6877 File: as.info,  Node: ARM-Regs,  Next: ARM-Relocations,  Prev: ARM-Chars,  Up: ARM Syntax
6878
6879 9.4.2.3 Register Names
6880 ......................
6881
6882 *TODO* Explain about ARM register naming, and the predefined names.
6883
6884 \1f
6885 File: as.info,  Node: ARM-Neon-Alignment,  Prev: ARM-Relocations,  Up: ARM Syntax
6886
6887 9.4.2.4 NEON Alignment Specifiers
6888 .................................
6889
6890 Some NEON load/store instructions allow an optional address alignment
6891 qualifier.  The ARM documentation specifies that this is indicated by
6892 `@ ALIGN'. However GAS already interprets the `@' character as a "line
6893 comment" start, so `: ALIGN' is used instead.  For example:
6894
6895              vld1.8 {q0}, [r0, :128]
6896
6897 \1f
6898 File: as.info,  Node: ARM Floating Point,  Next: ARM Directives,  Prev: ARM Syntax,  Up: ARM-Dependent
6899
6900 9.4.3 Floating Point
6901 --------------------
6902
6903 The ARM family uses IEEE floating-point numbers.
6904
6905 \1f
6906 File: as.info,  Node: ARM-Relocations,  Next: ARM-Neon-Alignment,  Prev: ARM-Regs,  Up: ARM Syntax
6907
6908 9.4.3.1 ARM relocation generation
6909 .................................
6910
6911 Specific data relocations can be generated by putting the relocation
6912 name in parentheses after the symbol name.  For example:
6913
6914              .word foo(TARGET1)
6915
6916    This will generate an `R_ARM_TARGET1' relocation against the symbol
6917 FOO.  The following relocations are supported: `GOT', `GOTOFF',
6918 `TARGET1', `TARGET2', `SBREL', `TLSGD', `TLSLDM', `TLSLDO', `TLSDESC',
6919 `TLSCALL', `GOTTPOFF', `GOT_PREL' and `TPOFF'.
6920
6921    For compatibility with older toolchains the assembler also accepts
6922 `(PLT)' after branch targets.  On legacy targets this will generate the
6923 deprecated `R_ARM_PLT32' relocation.  On EABI targets it will encode
6924 either the `R_ARM_CALL' or `R_ARM_JUMP24' relocation, as appropriate.
6925
6926    Relocations for `MOVW' and `MOVT' instructions can be generated by
6927 prefixing the value with `#:lower16:' and `#:upper16' respectively.
6928 For example to load the 32-bit address of foo into r0:
6929
6930              MOVW r0, #:lower16:foo
6931              MOVT r0, #:upper16:foo
6932
6933 \1f
6934 File: as.info,  Node: ARM Directives,  Next: ARM Opcodes,  Prev: ARM Floating Point,  Up: ARM-Dependent
6935
6936 9.4.4 ARM Machine Directives
6937 ----------------------------
6938
6939 `.2byte EXPRESSION [, EXPRESSION]*'
6940 `.4byte EXPRESSION [, EXPRESSION]*'
6941 `.8byte EXPRESSION [, EXPRESSION]*'
6942      These directives write 2, 4 or 8 byte values to the output section.
6943
6944 `.align EXPRESSION [, EXPRESSION]'
6945      This is the generic .ALIGN directive.  For the ARM however if the
6946      first argument is zero (ie no alignment is needed) the assembler
6947      will behave as if the argument had been 2 (ie pad to the next four
6948      byte boundary).  This is for compatibility with ARM's own
6949      assembler.
6950
6951 `.arch NAME'
6952      Select the target architecture.  Valid values for NAME are the
6953      same as for the `-march' commandline option.
6954
6955      Specifying `.arch' clears any previously selected architecture
6956      extensions.
6957
6958 `.arch_extension NAME'
6959      Add or remove an architecture extension to the target
6960      architecture.  Valid values for NAME are the same as those
6961      accepted as architectural extensions by the `-mcpu' commandline
6962      option.
6963
6964      `.arch_extension' may be used multiple times to add or remove
6965      extensions incrementally to the architecture being compiled for.
6966
6967 `.arm'
6968      This performs the same action as .CODE 32.
6969
6970 `.pad #COUNT'
6971      Generate unwinder annotations for a stack adjustment of COUNT
6972      bytes.  A positive value indicates the function prologue allocated
6973      stack space by decrementing the stack pointer.
6974
6975 `.bss'
6976      This directive switches to the `.bss' section.
6977
6978 `.cantunwind'
6979      Prevents unwinding through the current function.  No personality
6980      routine or exception table data is required or permitted.
6981
6982 `.code `[16|32]''
6983      This directive selects the instruction set being generated. The
6984      value 16 selects Thumb, with the value 32 selecting ARM.
6985
6986 `.cpu NAME'
6987      Select the target processor.  Valid values for NAME are the same as
6988      for the `-mcpu' commandline option.
6989
6990      Specifying `.cpu' clears any previously selected architecture
6991      extensions.
6992
6993 `NAME .dn REGISTER NAME [.TYPE] [[INDEX]]'
6994 `NAME .qn REGISTER NAME [.TYPE] [[INDEX]]'
6995      The `dn' and `qn' directives are used to create typed and/or
6996      indexed register aliases for use in Advanced SIMD Extension (Neon)
6997      instructions.  The former should be used to create aliases of
6998      double-precision registers, and the latter to create aliases of
6999      quad-precision registers.
7000
7001      If these directives are used to create typed aliases, those
7002      aliases can be used in Neon instructions instead of writing types
7003      after the mnemonic or after each operand.  For example:
7004
7005                   x .dn d2.f32
7006                   y .dn d3.f32
7007                   z .dn d4.f32[1]
7008                   vmul x,y,z
7009
7010      This is equivalent to writing the following:
7011
7012                   vmul.f32 d2,d3,d4[1]
7013
7014      Aliases created using `dn' or `qn' can be destroyed using `unreq'.
7015
7016 `.eabi_attribute TAG, VALUE'
7017      Set the EABI object attribute TAG to VALUE.
7018
7019      The TAG is either an attribute number, or one of the following:
7020      `Tag_CPU_raw_name', `Tag_CPU_name', `Tag_CPU_arch',
7021      `Tag_CPU_arch_profile', `Tag_ARM_ISA_use', `Tag_THUMB_ISA_use',
7022      `Tag_FP_arch', `Tag_WMMX_arch', `Tag_Advanced_SIMD_arch',
7023      `Tag_PCS_config', `Tag_ABI_PCS_R9_use', `Tag_ABI_PCS_RW_data',
7024      `Tag_ABI_PCS_RO_data', `Tag_ABI_PCS_GOT_use',
7025      `Tag_ABI_PCS_wchar_t', `Tag_ABI_FP_rounding',
7026      `Tag_ABI_FP_denormal', `Tag_ABI_FP_exceptions',
7027      `Tag_ABI_FP_user_exceptions', `Tag_ABI_FP_number_model',
7028      `Tag_ABI_align_needed', `Tag_ABI_align_preserved',
7029      `Tag_ABI_enum_size', `Tag_ABI_HardFP_use', `Tag_ABI_VFP_args',
7030      `Tag_ABI_WMMX_args', `Tag_ABI_optimization_goals',
7031      `Tag_ABI_FP_optimization_goals', `Tag_compatibility',
7032      `Tag_CPU_unaligned_access', `Tag_FP_HP_extension',
7033      `Tag_ABI_FP_16bit_format', `Tag_MPextension_use', `Tag_DIV_use',
7034      `Tag_nodefaults', `Tag_also_compatible_with', `Tag_conformance',
7035      `Tag_T2EE_use', `Tag_Virtualization_use'
7036
7037      The VALUE is either a `number', `"string"', or `number, "string"'
7038      depending on the tag.
7039
7040      Note - the following legacy values are also accepted by TAG:
7041      `Tag_VFP_arch', `Tag_ABI_align8_needed',
7042      `Tag_ABI_align8_preserved', `Tag_VFP_HP_extension',
7043
7044 `.even'
7045      This directive aligns to an even-numbered address.
7046
7047 `.extend  EXPRESSION [, EXPRESSION]*'
7048 `.ldouble  EXPRESSION [, EXPRESSION]*'
7049      These directives write 12byte long double floating-point values to
7050      the output section.  These are not compatible with current ARM
7051      processors or ABIs.
7052
7053 `.fnend'
7054      Marks the end of a function with an unwind table entry.  The
7055      unwind index table entry is created when this directive is
7056      processed.
7057
7058      If no personality routine has been specified then standard
7059      personality routine 0 or 1 will be used, depending on the number
7060      of unwind opcodes required.
7061
7062 `.fnstart'
7063      Marks the start of a function with an unwind table entry.
7064
7065 `.force_thumb'
7066      This directive forces the selection of Thumb instructions, even if
7067      the target processor does not support those instructions
7068
7069 `.fpu NAME'
7070      Select the floating-point unit to assemble for.  Valid values for
7071      NAME are the same as for the `-mfpu' commandline option.
7072
7073 `.handlerdata'
7074      Marks the end of the current function, and the start of the
7075      exception table entry for that function.  Anything between this
7076      directive and the `.fnend' directive will be added to the
7077      exception table entry.
7078
7079      Must be preceded by a `.personality' or `.personalityindex'
7080      directive.
7081
7082 `.inst OPCODE [ , ... ]'
7083 `.inst.n OPCODE [ , ... ]'
7084 `.inst.w OPCODE [ , ... ]'
7085      Generates the instruction corresponding to the numerical value
7086      OPCODE.  `.inst.n' and `.inst.w' allow the Thumb instruction size
7087      to be specified explicitly, overriding the normal encoding rules.
7088
7089 `.ldouble  EXPRESSION [, EXPRESSION]*'
7090      See `.extend'.
7091
7092 `.ltorg'
7093      This directive causes the current contents of the literal pool to
7094      be dumped into the current section (which is assumed to be the
7095      .text section) at the current location (aligned to a word
7096      boundary).  `GAS' maintains a separate literal pool for each
7097      section and each sub-section.  The `.ltorg' directive will only
7098      affect the literal pool of the current section and sub-section.
7099      At the end of assembly all remaining, un-empty literal pools will
7100      automatically be dumped.
7101
7102      Note - older versions of `GAS' would dump the current literal pool
7103      any time a section change occurred.  This is no longer done, since
7104      it prevents accurate control of the placement of literal pools.
7105
7106 `.movsp REG [, #OFFSET]'
7107      Tell the unwinder that REG contains an offset from the current
7108      stack pointer.  If OFFSET is not specified then it is assumed to be
7109      zero.
7110
7111 `.object_arch NAME'
7112      Override the architecture recorded in the EABI object attribute
7113      section.  Valid values for NAME are the same as for the `.arch'
7114      directive.  Typically this is useful when code uses runtime
7115      detection of CPU features.
7116
7117 `.packed  EXPRESSION [, EXPRESSION]*'
7118      This directive writes 12-byte packed floating-point values to the
7119      output section.  These are not compatible with current ARM
7120      processors or ABIs.
7121
7122 `.pad #COUNT'
7123      Generate unwinder annotations for a stack adjustment of COUNT
7124      bytes.  A positive value indicates the function prologue allocated
7125      stack space by decrementing the stack pointer.
7126
7127 `.personality NAME'
7128      Sets the personality routine for the current function to NAME.
7129
7130 `.personalityindex INDEX'
7131      Sets the personality routine for the current function to the EABI
7132      standard routine number INDEX
7133
7134 `.pool'
7135      This is a synonym for .ltorg.
7136
7137 `NAME .req REGISTER NAME'
7138      This creates an alias for REGISTER NAME called NAME.  For example:
7139
7140                   foo .req r0
7141
7142 `.save REGLIST'
7143      Generate unwinder annotations to restore the registers in REGLIST.
7144      The format of REGLIST is the same as the corresponding
7145      store-multiple instruction.
7146
7147      _core registers_
7148             .save {r4, r5, r6, lr}
7149             stmfd sp!, {r4, r5, r6, lr}
7150      _FPA registers_
7151             .save f4, 2
7152             sfmfd f4, 2, [sp]!
7153      _VFP registers_
7154             .save {d8, d9, d10}
7155             fstmdx sp!, {d8, d9, d10}
7156      _iWMMXt registers_
7157             .save {wr10, wr11}
7158             wstrd wr11, [sp, #-8]!
7159             wstrd wr10, [sp, #-8]!
7160           or
7161             .save wr11
7162             wstrd wr11, [sp, #-8]!
7163             .save wr10
7164             wstrd wr10, [sp, #-8]!
7165
7166 `.setfp FPREG, SPREG [, #OFFSET]'
7167      Make all unwinder annotations relative to a frame pointer.
7168      Without this the unwinder will use offsets from the stack pointer.
7169
7170      The syntax of this directive is the same as the `add' or `mov'
7171      instruction used to set the frame pointer.  SPREG must be either
7172      `sp' or mentioned in a previous `.movsp' directive.
7173
7174           .movsp ip
7175           mov ip, sp
7176           ...
7177           .setfp fp, ip, #4
7178           add fp, ip, #4
7179
7180 `.secrel32 EXPRESSION [, EXPRESSION]*'
7181      This directive emits relocations that evaluate to the
7182      section-relative offset of each expression's symbol.  This
7183      directive is only supported for PE targets.
7184
7185 `.syntax [`unified' | `divided']'
7186      This directive sets the Instruction Set Syntax as described in the
7187      *Note ARM-Instruction-Set:: section.
7188
7189 `.thumb'
7190      This performs the same action as .CODE 16.
7191
7192 `.thumb_func'
7193      This directive specifies that the following symbol is the name of a
7194      Thumb encoded function.  This information is necessary in order to
7195      allow the assembler and linker to generate correct code for
7196      interworking between Arm and Thumb instructions and should be used
7197      even if interworking is not going to be performed.  The presence
7198      of this directive also implies `.thumb'
7199
7200      This directive is not neccessary when generating EABI objects.  On
7201      these targets the encoding is implicit when generating Thumb code.
7202
7203 `.thumb_set'
7204      This performs the equivalent of a `.set' directive in that it
7205      creates a symbol which is an alias for another symbol (possibly
7206      not yet defined).  This directive also has the added property in
7207      that it marks the aliased symbol as being a thumb function entry
7208      point, in the same way that the `.thumb_func' directive does.
7209
7210 `.tlsdescseq TLS-VARIABLE'
7211      This directive is used to annotate parts of an inlined TLS
7212      descriptor trampoline.  Normally the trampoline is provided by the
7213      linker, and this directive is not needed.
7214
7215 `.unreq ALIAS-NAME'
7216      This undefines a register alias which was previously defined using
7217      the `req', `dn' or `qn' directives.  For example:
7218
7219                   foo .req r0
7220                   .unreq foo
7221
7222      An error occurs if the name is undefined.  Note - this pseudo op
7223      can be used to delete builtin in register name aliases (eg 'r0').
7224      This should only be done if it is really necessary.
7225
7226 `.unwind_raw OFFSET, BYTE1, ...'
7227      Insert one of more arbitary unwind opcode bytes, which are known
7228      to adjust the stack pointer by OFFSET bytes.
7229
7230      For example `.unwind_raw 4, 0xb1, 0x01' is equivalent to `.save
7231      {r0}'
7232
7233 `.vsave VFP-REGLIST'
7234      Generate unwinder annotations to restore the VFP registers in
7235      VFP-REGLIST using FLDMD.  Also works for VFPv3 registers that are
7236      to be restored using VLDM.  The format of VFP-REGLIST is the same
7237      as the corresponding store-multiple instruction.
7238
7239      _VFP registers_
7240             .vsave {d8, d9, d10}
7241             fstmdd sp!, {d8, d9, d10}
7242      _VFPv3 registers_
7243             .vsave {d15, d16, d17}
7244             vstm sp!, {d15, d16, d17}
7245
7246      Since FLDMX and FSTMX are now deprecated, this directive should be
7247      used in favour of `.save' for saving VFP registers for ARMv6 and
7248      above.
7249
7250
7251 \1f
7252 File: as.info,  Node: ARM Opcodes,  Next: ARM Mapping Symbols,  Prev: ARM Directives,  Up: ARM-Dependent
7253
7254 9.4.5 Opcodes
7255 -------------
7256
7257 `as' implements all the standard ARM opcodes.  It also implements
7258 several pseudo opcodes, including several synthetic load instructions.
7259
7260 `NOP'
7261             nop
7262
7263      This pseudo op will always evaluate to a legal ARM instruction
7264      that does nothing.  Currently it will evaluate to MOV r0, r0.
7265
7266 `LDR'
7267             ldr <register> , = <expression>
7268
7269      If expression evaluates to a numeric constant then a MOV or MVN
7270      instruction will be used in place of the LDR instruction, if the
7271      constant can be generated by either of these instructions.
7272      Otherwise the constant will be placed into the nearest literal
7273      pool (if it not already there) and a PC relative LDR instruction
7274      will be generated.
7275
7276 `ADR'
7277             adr <register> <label>
7278
7279      This instruction will load the address of LABEL into the indicated
7280      register.  The instruction will evaluate to a PC relative ADD or
7281      SUB instruction depending upon where the label is located.  If the
7282      label is out of range, or if it is not defined in the same file
7283      (and section) as the ADR instruction, then an error will be
7284      generated.  This instruction will not make use of the literal pool.
7285
7286 `ADRL'
7287             adrl <register> <label>
7288
7289      This instruction will load the address of LABEL into the indicated
7290      register.  The instruction will evaluate to one or two PC relative
7291      ADD or SUB instructions depending upon where the label is located.
7292      If a second instruction is not needed a NOP instruction will be
7293      generated in its place, so that this instruction is always 8 bytes
7294      long.
7295
7296      If the label is out of range, or if it is not defined in the same
7297      file (and section) as the ADRL instruction, then an error will be
7298      generated.  This instruction will not make use of the literal pool.
7299
7300
7301    For information on the ARM or Thumb instruction sets, see `ARM
7302 Software Development Toolkit Reference Manual', Advanced RISC Machines
7303 Ltd.
7304
7305 \1f
7306 File: as.info,  Node: ARM Mapping Symbols,  Next: ARM Unwinding Tutorial,  Prev: ARM Opcodes,  Up: ARM-Dependent
7307
7308 9.4.6 Mapping Symbols
7309 ---------------------
7310
7311 The ARM ELF specification requires that special symbols be inserted
7312 into object files to mark certain features:
7313
7314 `$a'
7315      At the start of a region of code containing ARM instructions.
7316
7317 `$t'
7318      At the start of a region of code containing THUMB instructions.
7319
7320 `$d'
7321      At the start of a region of data.
7322
7323
7324    The assembler will automatically insert these symbols for you - there
7325 is no need to code them yourself.  Support for tagging symbols ($b, $f,
7326 $p and $m) which is also mentioned in the current ARM ELF specification
7327 is not implemented.  This is because they have been dropped from the
7328 new EABI and so tools cannot rely upon their presence.
7329
7330 \1f
7331 File: as.info,  Node: ARM Unwinding Tutorial,  Prev: ARM Mapping Symbols,  Up: ARM-Dependent
7332
7333 9.4.7 Unwinding
7334 ---------------
7335
7336 The ABI for the ARM Architecture specifies a standard format for
7337 exception unwind information.  This information is used when an
7338 exception is thrown to determine where control should be transferred.
7339 In particular, the unwind information is used to determine which
7340 function called the function that threw the exception, and which
7341 function called that one, and so forth.  This information is also used
7342 to restore the values of callee-saved registers in the function
7343 catching the exception.
7344
7345    If you are writing functions in assembly code, and those functions
7346 call other functions that throw exceptions, you must use assembly
7347 pseudo ops to ensure that appropriate exception unwind information is
7348 generated.  Otherwise, if one of the functions called by your assembly
7349 code throws an exception, the run-time library will be unable to unwind
7350 the stack through your assembly code and your program will not behave
7351 correctly.
7352
7353    To illustrate the use of these pseudo ops, we will examine the code
7354 that G++ generates for the following C++ input:
7355
7356
7357 void callee (int *);
7358
7359 int
7360 caller ()
7361 {
7362   int i;
7363   callee (&i);
7364   return i;
7365 }
7366
7367    This example does not show how to throw or catch an exception from
7368 assembly code.  That is a much more complex operation and should always
7369 be done in a high-level language, such as C++, that directly supports
7370 exceptions.
7371
7372    The code generated by one particular version of G++ when compiling
7373 the example above is:
7374
7375
7376 _Z6callerv:
7377         .fnstart
7378 .LFB2:
7379         @ Function supports interworking.
7380         @ args = 0, pretend = 0, frame = 8
7381         @ frame_needed = 1, uses_anonymous_args = 0
7382         stmfd   sp!, {fp, lr}
7383         .save {fp, lr}
7384 .LCFI0:
7385         .setfp fp, sp, #4
7386         add     fp, sp, #4
7387 .LCFI1:
7388         .pad #8
7389         sub     sp, sp, #8
7390 .LCFI2:
7391         sub     r3, fp, #8
7392         mov     r0, r3
7393         bl      _Z6calleePi
7394         ldr     r3, [fp, #-8]
7395         mov     r0, r3
7396         sub     sp, fp, #4
7397         ldmfd   sp!, {fp, lr}
7398         bx      lr
7399 .LFE2:
7400         .fnend
7401
7402    Of course, the sequence of instructions varies based on the options
7403 you pass to GCC and on the version of GCC in use.  The exact
7404 instructions are not important since we are focusing on the pseudo ops
7405 that are used to generate unwind information.
7406
7407    An important assumption made by the unwinder is that the stack frame
7408 does not change during the body of the function.  In particular, since
7409 we assume that the assembly code does not itself throw an exception,
7410 the only point where an exception can be thrown is from a call, such as
7411 the `bl' instruction above.  At each call site, the same saved
7412 registers (including `lr', which indicates the return address) must be
7413 located in the same locations relative to the frame pointer.
7414
7415    The `.fnstart' (*note .fnstart pseudo op: arm_fnstart.) pseudo op
7416 appears immediately before the first instruction of the function while
7417 the `.fnend' (*note .fnend pseudo op: arm_fnend.) pseudo op appears
7418 immediately after the last instruction of the function.  These pseudo
7419 ops specify the range of the function.
7420
7421    Only the order of the other pseudos ops (e.g., `.setfp' or `.pad')
7422 matters; their exact locations are irrelevant.  In the example above,
7423 the compiler emits the pseudo ops with particular instructions.  That
7424 makes it easier to understand the code, but it is not required for
7425 correctness.  It would work just as well to emit all of the pseudo ops
7426 other than `.fnend' in the same order, but immediately after `.fnstart'.
7427
7428    The `.save' (*note .save pseudo op: arm_save.) pseudo op indicates
7429 registers that have been saved to the stack so that they can be
7430 restored before the function returns.  The argument to the `.save'
7431 pseudo op is a list of registers to save.  If a register is
7432 "callee-saved" (as specified by the ABI) and is modified by the
7433 function you are writing, then your code must save the value before it
7434 is modified and restore the original value before the function returns.
7435 If an exception is thrown, the run-time library restores the values of
7436 these registers from their locations on the stack before returning
7437 control to the exception handler.  (Of course, if an exception is not
7438 thrown, the function that contains the `.save' pseudo op restores these
7439 registers in the function epilogue, as is done with the `ldmfd'
7440 instruction above.)
7441
7442    You do not have to save callee-saved registers at the very beginning
7443 of the function and you do not need to use the `.save' pseudo op
7444 immediately following the point at which the registers are saved.
7445 However, if you modify a callee-saved register, you must save it on the
7446 stack before modifying it and before calling any functions which might
7447 throw an exception.  And, you must use the `.save' pseudo op to
7448 indicate that you have done so.
7449
7450    The `.pad' (*note .pad: arm_pad.) pseudo op indicates a modification
7451 of the stack pointer that does not save any registers.  The argument is
7452 the number of bytes (in decimal) that are subtracted from the stack
7453 pointer.  (On ARM CPUs, the stack grows downwards, so subtracting from
7454 the stack pointer increases the size of the stack.)
7455
7456    The `.setfp' (*note .setfp pseudo op: arm_setfp.) pseudo op
7457 indicates the register that contains the frame pointer.  The first
7458 argument is the register that is set, which is typically `fp'.  The
7459 second argument indicates the register from which the frame pointer
7460 takes its value.  The third argument, if present, is the value (in
7461 decimal) added to the register specified by the second argument to
7462 compute the value of the frame pointer.  You should not modify the
7463 frame pointer in the body of the function.
7464
7465    If you do not use a frame pointer, then you should not use the
7466 `.setfp' pseudo op.  If you do not use a frame pointer, then you should
7467 avoid modifying the stack pointer outside of the function prologue.
7468 Otherwise, the run-time library will be unable to find saved registers
7469 when it is unwinding the stack.
7470
7471    The pseudo ops described above are sufficient for writing assembly
7472 code that calls functions which may throw exceptions.  If you need to
7473 know more about the object-file format used to represent unwind
7474 information, you may consult the `Exception Handling ABI for the ARM
7475 Architecture' available from `http://infocenter.arm.com'.
7476
7477 \1f
7478 File: as.info,  Node: AVR-Dependent,  Next: Blackfin-Dependent,  Prev: ARM-Dependent,  Up: Machine Dependencies
7479
7480 9.5 AVR Dependent Features
7481 ==========================
7482
7483 * Menu:
7484
7485 * AVR Options::              Options
7486 * AVR Syntax::               Syntax
7487 * AVR Opcodes::              Opcodes
7488
7489 \1f
7490 File: as.info,  Node: AVR Options,  Next: AVR Syntax,  Up: AVR-Dependent
7491
7492 9.5.1 Options
7493 -------------
7494
7495 `-mmcu=MCU'
7496      Specify ATMEL AVR instruction set or MCU type.
7497
7498      Instruction set avr1 is for the minimal AVR core, not supported by
7499      the C compiler, only for assembler programs (MCU types: at90s1200,
7500      attiny11, attiny12, attiny15, attiny28).
7501
7502      Instruction set avr2 (default) is for the classic AVR core with up
7503      to 8K program memory space (MCU types: at90s2313, at90s2323,
7504      at90s2333, at90s2343, attiny22, attiny26, at90s4414, at90s4433,
7505      at90s4434, at90s8515, at90c8534, at90s8535).
7506
7507      Instruction set avr25 is for the classic AVR core with up to 8K
7508      program memory space plus the MOVW instruction (MCU types:
7509      attiny13, attiny13a, attiny2313, attiny2313a, attiny24, attiny24a,
7510      attiny4313, attiny44, attiny44a, attiny84, attiny84a, attiny25,
7511      attiny45, attiny85, attiny261, attiny261a, attiny461, attiny461a,
7512      attiny861, attiny861a, attiny87, attiny43u, attiny48, attiny88,
7513      at86rf401, ata6289).
7514
7515      Instruction set avr3 is for the classic AVR core with up to 128K
7516      program memory space (MCU types: at43usb355, at76c711).
7517
7518      Instruction set avr31 is for the classic AVR core with exactly
7519      128K program memory space (MCU types: atmega103, at43usb320).
7520
7521      Instruction set avr35 is for classic AVR core plus MOVW, CALL, and
7522      JMP instructions (MCU types: attiny167, at90usb82, at90usb162,
7523      atmega8u2, atmega16u2, atmega32u2).
7524
7525      Instruction set avr4 is for the enhanced AVR core with up to 8K
7526      program memory space (MCU types: atmega48, atmega48a, atmega48p,
7527      atmega8, atmega88, atmega88a, atmega88p, atmega88pa, atmega8515,
7528      atmega8535, atmega8hva, at90pwm1, at90pwm2, at90pwm2b, at90pwm3,
7529      at90pwm3b, at90pwm81).
7530
7531      Instruction set avr5 is for the enhanced AVR core with up to 128K
7532      program memory space (MCU types: atmega16, atmega16a, atmega161,
7533      atmega162, atmega163, atmega164a, atmega164p, atmega165,
7534      atmega165a, atmega165p, atmega168, atmega168a, atmega168p,
7535      atmega169, atmega169a, atmega169p, atmega169pa, atmega32,
7536      atmega323, atmega324a, atmega324p, atmega325, atmega325a,
7537      atmega325p, atmega325pa, atmega3250, atmega3250a, atmega3250p,
7538      atmega3250pa, atmega328, atmega328p, atmega329, atmega329a,
7539      atmega329p, atmega329pa, atmega3290, atmega3290a, atmega3290p,
7540      atmega3290pa, atmega406, atmega64, atmega640, atmega644,
7541      atmega644a, atmega644p, atmega644pa, atmega645, atmega645a,
7542      atmega645p, atmega6450, atmega6450a, atmega6450p, atmega649,
7543      atmega649a, atmega649p, atmega6490, atmega6490a, atmega6490p,
7544      atmega16hva, atmega16hva2, atmega16hvb, atmega16hvbrevb,
7545      atmega32hvb, atmega32hvbrevb, atmega64hve, at90can32, at90can64,
7546      at90pwm161, at90pwm216, at90pwm316, atmega32c1, atmega64c1,
7547      atmega16m1, atmega32m1, atmega64m1, atmega16u4, atmega32u4,
7548      atmega32u6, at90usb646, at90usb647, at94k, at90scr100).
7549
7550      Instruction set avr51 is for the enhanced AVR core with exactly
7551      128K program memory space (MCU types: atmega128, atmega1280,
7552      atmega1281, atmega1284p, atmega128rfa1, at90can128, at90usb1286,
7553      at90usb1287, m3000).
7554
7555      Instruction set avr6 is for the enhanced AVR core with a 3-byte PC
7556      (MCU types: atmega2560, atmega2561).
7557
7558      Instruction set avrxmega2 is for the XMEGA AVR core with 8K to 64K
7559      program memory space and less than 64K data space (MCU types:
7560      atxmega16a4, atxmega16d4, atxmega16x1, atxmega32a4, atxmega32d4,
7561      atxmega32x1).
7562
7563      Instruction set avrxmega3 is for the XMEGA AVR core with 8K to 64K
7564      program memory space and greater than 64K data space (MCU types:
7565      none).
7566
7567      Instruction set avrxmega4 is for the XMEGA AVR core with up to 64K
7568      program memory space and less than 64K data space (MCU types:
7569      atxmega64a3, atxmega64d3).
7570
7571      Instruction set avrxmega5 is for the XMEGA AVR core with up to 64K
7572      program memory space and greater than 64K data space (MCU types:
7573      atxmega64a1, atxmega64a1u).
7574
7575      Instruction set avrxmega6 is for the XMEGA AVR core with up to
7576      256K program memory space and less than 64K data space (MCU types:
7577      atxmega128a3, atxmega128d3, atxmega192a3, atxmega128b1,
7578      atxmega192d3, atxmega256a3, atxmega256a3b, atxmega256a3bu,
7579      atxmega192d3).
7580
7581      Instruction set avrxmega7 is for the XMEGA AVR core with up to
7582      256K program memory space and greater than 64K data space (MCU
7583      types: atxmega128a1, atxmega128a1u).
7584
7585 `-mall-opcodes'
7586      Accept all AVR opcodes, even if not supported by `-mmcu'.
7587
7588 `-mno-skip-bug'
7589      This option disable warnings for skipping two-word instructions.
7590
7591 `-mno-wrap'
7592      This option reject `rjmp/rcall' instructions with 8K wrap-around.
7593
7594
7595 \1f
7596 File: as.info,  Node: AVR Syntax,  Next: AVR Opcodes,  Prev: AVR Options,  Up: AVR-Dependent
7597
7598 9.5.2 Syntax
7599 ------------
7600
7601 * Menu:
7602
7603 * AVR-Chars::                Special Characters
7604 * AVR-Regs::                 Register Names
7605 * AVR-Modifiers::            Relocatable Expression Modifiers
7606
7607 \1f
7608 File: as.info,  Node: AVR-Chars,  Next: AVR-Regs,  Up: AVR Syntax
7609
7610 9.5.2.1 Special Characters
7611 ..........................
7612
7613 The presence of a `;' anywhere on a line indicates the start of a
7614 comment that extends to the end of that line.
7615
7616    If a `#' appears as the first character of a line, the whole line is
7617 treated as a comment, but in this case the line can also be a logical
7618 line number directive (*note Comments::) or a preprocessor control
7619 command (*note Preprocessing::).
7620
7621    The `$' character can be used instead of a newline to separate
7622 statements.
7623
7624 \1f
7625 File: as.info,  Node: AVR-Regs,  Next: AVR-Modifiers,  Prev: AVR-Chars,  Up: AVR Syntax
7626
7627 9.5.2.2 Register Names
7628 ......................
7629
7630 The AVR has 32 x 8-bit general purpose working registers `r0', `r1',
7631 ... `r31'.  Six of the 32 registers can be used as three 16-bit
7632 indirect address register pointers for Data Space addressing. One of
7633 the these address pointers can also be used as an address pointer for
7634 look up tables in Flash program memory. These added function registers
7635 are the 16-bit `X', `Y' and `Z' - registers.
7636
7637      X = r26:r27
7638      Y = r28:r29
7639      Z = r30:r31
7640
7641 \1f
7642 File: as.info,  Node: AVR-Modifiers,  Prev: AVR-Regs,  Up: AVR Syntax
7643
7644 9.5.2.3 Relocatable Expression Modifiers
7645 ........................................
7646
7647 The assembler supports several modifiers when using relocatable
7648 addresses in AVR instruction operands.  The general syntax is the
7649 following:
7650
7651      modifier(relocatable-expression)
7652
7653 `lo8'
7654      This modifier allows you to use bits 0 through 7 of an address
7655      expression as 8 bit relocatable expression.
7656
7657 `hi8'
7658      This modifier allows you to use bits 7 through 15 of an address
7659      expression as 8 bit relocatable expression.  This is useful with,
7660      for example, the AVR `ldi' instruction and `lo8' modifier.
7661
7662      For example
7663
7664           ldi r26, lo8(sym+10)
7665           ldi r27, hi8(sym+10)
7666
7667 `hh8'
7668      This modifier allows you to use bits 16 through 23 of an address
7669      expression as 8 bit relocatable expression.  Also, can be useful
7670      for loading 32 bit constants.
7671
7672 `hlo8'
7673      Synonym of `hh8'.
7674
7675 `hhi8'
7676      This modifier allows you to use bits 24 through 31 of an
7677      expression as 8 bit expression. This is useful with, for example,
7678      the AVR `ldi' instruction and `lo8', `hi8', `hlo8', `hhi8',
7679      modifier.
7680
7681      For example
7682
7683           ldi r26, lo8(285774925)
7684           ldi r27, hi8(285774925)
7685           ldi r28, hlo8(285774925)
7686           ldi r29, hhi8(285774925)
7687           ; r29,r28,r27,r26 = 285774925
7688
7689 `pm_lo8'
7690      This modifier allows you to use bits 0 through 7 of an address
7691      expression as 8 bit relocatable expression.  This modifier useful
7692      for addressing data or code from Flash/Program memory. The using
7693      of `pm_lo8' similar to `lo8'.
7694
7695 `pm_hi8'
7696      This modifier allows you to use bits 8 through 15 of an address
7697      expression as 8 bit relocatable expression.  This modifier useful
7698      for addressing data or code from Flash/Program memory.
7699
7700 `pm_hh8'
7701      This modifier allows you to use bits 15 through 23 of an address
7702      expression as 8 bit relocatable expression.  This modifier useful
7703      for addressing data or code from Flash/Program memory.
7704
7705
7706 \1f
7707 File: as.info,  Node: AVR Opcodes,  Prev: AVR Syntax,  Up: AVR-Dependent
7708
7709 9.5.3 Opcodes
7710 -------------
7711
7712 For detailed information on the AVR machine instruction set, see
7713 `www.atmel.com/products/AVR'.
7714
7715    `as' implements all the standard AVR opcodes.  The following table
7716 summarizes the AVR opcodes, and their arguments.
7717
7718      Legend:
7719         r   any register
7720         d   `ldi' register (r16-r31)
7721         v   `movw' even register (r0, r2, ..., r28, r30)
7722         a   `fmul' register (r16-r23)
7723         w   `adiw' register (r24,r26,r28,r30)
7724         e   pointer registers (X,Y,Z)
7725         b   base pointer register and displacement ([YZ]+disp)
7726         z   Z pointer register (for [e]lpm Rd,Z[+])
7727         M   immediate value from 0 to 255
7728         n   immediate value from 0 to 255 ( n = ~M ). Relocation impossible
7729         s   immediate value from 0 to 7
7730         P   Port address value from 0 to 63. (in, out)
7731         p   Port address value from 0 to 31. (cbi, sbi, sbic, sbis)
7732         K   immediate value from 0 to 63 (used in `adiw', `sbiw')
7733         i   immediate value
7734         l   signed pc relative offset from -64 to 63
7735         L   signed pc relative offset from -2048 to 2047
7736         h   absolute code address (call, jmp)
7737         S   immediate value from 0 to 7 (S = s << 4)
7738         ?   use this opcode entry if no parameters, else use next opcode entry
7739
7740      1001010010001000   clc
7741      1001010011011000   clh
7742      1001010011111000   cli
7743      1001010010101000   cln
7744      1001010011001000   cls
7745      1001010011101000   clt
7746      1001010010111000   clv
7747      1001010010011000   clz
7748      1001010000001000   sec
7749      1001010001011000   seh
7750      1001010001111000   sei
7751      1001010000101000   sen
7752      1001010001001000   ses
7753      1001010001101000   set
7754      1001010000111000   sev
7755      1001010000011000   sez
7756      100101001SSS1000   bclr    S
7757      100101000SSS1000   bset    S
7758      1001010100001001   icall
7759      1001010000001001   ijmp
7760      1001010111001000   lpm     ?
7761      1001000ddddd010+   lpm     r,z
7762      1001010111011000   elpm    ?
7763      1001000ddddd011+   elpm    r,z
7764      0000000000000000   nop
7765      1001010100001000   ret
7766      1001010100011000   reti
7767      1001010110001000   sleep
7768      1001010110011000   break
7769      1001010110101000   wdr
7770      1001010111101000   spm
7771      000111rdddddrrrr   adc     r,r
7772      000011rdddddrrrr   add     r,r
7773      001000rdddddrrrr   and     r,r
7774      000101rdddddrrrr   cp      r,r
7775      000001rdddddrrrr   cpc     r,r
7776      000100rdddddrrrr   cpse    r,r
7777      001001rdddddrrrr   eor     r,r
7778      001011rdddddrrrr   mov     r,r
7779      100111rdddddrrrr   mul     r,r
7780      001010rdddddrrrr   or      r,r
7781      000010rdddddrrrr   sbc     r,r
7782      000110rdddddrrrr   sub     r,r
7783      001001rdddddrrrr   clr     r
7784      000011rdddddrrrr   lsl     r
7785      000111rdddddrrrr   rol     r
7786      001000rdddddrrrr   tst     r
7787      0111KKKKddddKKKK   andi    d,M
7788      0111KKKKddddKKKK   cbr     d,n
7789      1110KKKKddddKKKK   ldi     d,M
7790      11101111dddd1111   ser     d
7791      0110KKKKddddKKKK   ori     d,M
7792      0110KKKKddddKKKK   sbr     d,M
7793      0011KKKKddddKKKK   cpi     d,M
7794      0100KKKKddddKKKK   sbci    d,M
7795      0101KKKKddddKKKK   subi    d,M
7796      1111110rrrrr0sss   sbrc    r,s
7797      1111111rrrrr0sss   sbrs    r,s
7798      1111100ddddd0sss   bld     r,s
7799      1111101ddddd0sss   bst     r,s
7800      10110PPdddddPPPP   in      r,P
7801      10111PPrrrrrPPPP   out     P,r
7802      10010110KKddKKKK   adiw    w,K
7803      10010111KKddKKKK   sbiw    w,K
7804      10011000pppppsss   cbi     p,s
7805      10011010pppppsss   sbi     p,s
7806      10011001pppppsss   sbic    p,s
7807      10011011pppppsss   sbis    p,s
7808      111101lllllll000   brcc    l
7809      111100lllllll000   brcs    l
7810      111100lllllll001   breq    l
7811      111101lllllll100   brge    l
7812      111101lllllll101   brhc    l
7813      111100lllllll101   brhs    l
7814      111101lllllll111   brid    l
7815      111100lllllll111   brie    l
7816      111100lllllll000   brlo    l
7817      111100lllllll100   brlt    l
7818      111100lllllll010   brmi    l
7819      111101lllllll001   brne    l
7820      111101lllllll010   brpl    l
7821      111101lllllll000   brsh    l
7822      111101lllllll110   brtc    l
7823      111100lllllll110   brts    l
7824      111101lllllll011   brvc    l
7825      111100lllllll011   brvs    l
7826      111101lllllllsss   brbc    s,l
7827      111100lllllllsss   brbs    s,l
7828      1101LLLLLLLLLLLL   rcall   L
7829      1100LLLLLLLLLLLL   rjmp    L
7830      1001010hhhhh111h   call    h
7831      1001010hhhhh110h   jmp     h
7832      1001010rrrrr0101   asr     r
7833      1001010rrrrr0000   com     r
7834      1001010rrrrr1010   dec     r
7835      1001010rrrrr0011   inc     r
7836      1001010rrrrr0110   lsr     r
7837      1001010rrrrr0001   neg     r
7838      1001000rrrrr1111   pop     r
7839      1001001rrrrr1111   push    r
7840      1001010rrrrr0111   ror     r
7841      1001010rrrrr0010   swap    r
7842      00000001ddddrrrr   movw    v,v
7843      00000010ddddrrrr   muls    d,d
7844      000000110ddd0rrr   mulsu   a,a
7845      000000110ddd1rrr   fmul    a,a
7846      000000111ddd0rrr   fmuls   a,a
7847      000000111ddd1rrr   fmulsu  a,a
7848      1001001ddddd0000   sts     i,r
7849      1001000ddddd0000   lds     r,i
7850      10o0oo0dddddbooo   ldd     r,b
7851      100!000dddddee-+   ld      r,e
7852      10o0oo1rrrrrbooo   std     b,r
7853      100!001rrrrree-+   st      e,r
7854      1001010100011001   eicall
7855      1001010000011001   eijmp
7856
7857 \1f
7858 File: as.info,  Node: Blackfin-Dependent,  Next: CR16-Dependent,  Prev: AVR-Dependent,  Up: Machine Dependencies
7859
7860 9.6 Blackfin Dependent Features
7861 ===============================
7862
7863 * Menu:
7864
7865 * Blackfin Options::            Blackfin Options
7866 * Blackfin Syntax::             Blackfin Syntax
7867 * Blackfin Directives::         Blackfin Directives
7868
7869 \1f
7870 File: as.info,  Node: Blackfin Options,  Next: Blackfin Syntax,  Up: Blackfin-Dependent
7871
7872 9.6.1 Options
7873 -------------
7874
7875 `-mcpu=PROCESSOR[-SIREVISION]'
7876      This option specifies the target processor.  The optional
7877      SIREVISION is not used in assembler.  It's here such that GCC can
7878      easily pass down its `-mcpu=' option.  The assembler will issue an
7879      error message if an attempt is made to assemble an instruction
7880      which will not execute on the target processor.  The following
7881      processor names are recognized: `bf504', `bf506', `bf512', `bf514',
7882      `bf516', `bf518', `bf522', `bf523', `bf524', `bf525', `bf526',
7883      `bf527', `bf531', `bf532', `bf533', `bf534', `bf535' (not
7884      implemented yet), `bf536', `bf537', `bf538', `bf539', `bf542',
7885      `bf542m', `bf544', `bf544m', `bf547', `bf547m', `bf548', `bf548m',
7886      `bf549', `bf549m', `bf561', and `bf592'.
7887
7888 `-mfdpic'
7889      Assemble for the FDPIC ABI.
7890
7891 `-mno-fdpic'
7892 `-mnopic'
7893      Disable -mfdpic.
7894
7895 \1f
7896 File: as.info,  Node: Blackfin Syntax,  Next: Blackfin Directives,  Prev: Blackfin Options,  Up: Blackfin-Dependent
7897
7898 9.6.2 Syntax
7899 ------------
7900
7901 `Special Characters'
7902      Assembler input is free format and may appear anywhere on the line.
7903      One instruction may extend across multiple lines or more than one
7904      instruction may appear on the same line.  White space (space, tab,
7905      comments or newline) may appear anywhere between tokens.  A token
7906      must not have embedded spaces.  Tokens include numbers, register
7907      names, keywords, user identifiers, and also some multicharacter
7908      special symbols like "+=", "/*" or "||".
7909
7910      Comments are introduced by the `#' character and extend to the end
7911      of the current line.  If the `#' appears as the first character of
7912      a line, the whole line is treated as a comment, but in this case
7913      the line can also be a logical line number directive (*note
7914      Comments::) or a preprocessor control command (*note
7915      Preprocessing::).
7916
7917 `Instruction Delimiting'
7918      A semicolon must terminate every instruction.  Sometimes a complete
7919      instruction will consist of more than one operation.  There are two
7920      cases where this occurs.  The first is when two general operations
7921      are combined.  Normally a comma separates the different parts, as
7922      in
7923
7924           a0= r3.h * r2.l, a1 = r3.l * r2.h ;
7925
7926      The second case occurs when a general instruction is combined with
7927      one or two memory references for joint issue.  The latter portions
7928      are set off by a "||" token.
7929
7930           a0 = r3.h * r2.l || r1 = [p3++] || r4 = [i2++];
7931
7932      Multiple instructions can occur on the same line.  Each must be
7933      terminated by a semicolon character.
7934
7935 `Register Names'
7936      The assembler treats register names and instruction keywords in a
7937      case insensitive manner.  User identifiers are case sensitive.
7938      Thus, R3.l, R3.L, r3.l and r3.L are all equivalent input to the
7939      assembler.
7940
7941      Register names are reserved and may not be used as program
7942      identifiers.
7943
7944      Some operations (such as "Move Register") require a register pair.
7945      Register pairs are always data registers and are denoted using a
7946      colon, eg., R3:2.  The larger number must be written firsts.  Note
7947      that the hardware only supports odd-even pairs, eg., R7:6, R5:4,
7948      R3:2, and R1:0.
7949
7950      Some instructions (such as -SP (Push Multiple)) require a group of
7951      adjacent registers.  Adjacent registers are denoted in the syntax
7952      by the range enclosed in parentheses and separated by a colon,
7953      eg., (R7:3).  Again, the larger number appears first.
7954
7955      Portions of a particular register may be individually specified.
7956      This is written with a dot (".") following the register name and
7957      then a letter denoting the desired portion.  For 32-bit registers,
7958      ".H" denotes the most significant ("High") portion.  ".L" denotes
7959      the least-significant portion.  The subdivisions of the 40-bit
7960      registers are described later.
7961
7962 `Accumulators'
7963      The set of 40-bit registers A1 and A0 that normally contain data
7964      that is being manipulated.  Each accumulator can be accessed in
7965      four ways.
7966
7967     `one 40-bit register'
7968           The register will be referred to as A1 or A0.
7969
7970     `one 32-bit register'
7971           The registers are designated as A1.W or A0.W.
7972
7973     `two 16-bit registers'
7974           The registers are designated as A1.H, A1.L, A0.H or A0.L.
7975
7976     `one 8-bit register'
7977           The registers are designated as A1.X or A0.X for the bits that
7978           extend beyond bit 31.
7979
7980 `Data Registers'
7981      The set of 32-bit registers (R0, R1, R2, R3, R4, R5, R6 and R7)
7982      that normally contain data for manipulation.  These are
7983      abbreviated as D-register or Dreg.  Data registers can be accessed
7984      as 32-bit registers or as two independent 16-bit registers.  The
7985      least significant 16 bits of each register is called the "low"
7986      half and is designated with ".L" following the register name.  The
7987      most significant 16 bits are called the "high" half and is
7988      designated with ".H" following the name.
7989
7990              R7.L, r2.h, r4.L, R0.H
7991
7992 `Pointer Registers'
7993      The set of 32-bit registers (P0, P1, P2, P3, P4, P5, SP and FP)
7994      that normally contain byte addresses of data structures.  These are
7995      abbreviated as P-register or Preg.
7996
7997           p2, p5, fp, sp
7998
7999 `Stack Pointer SP'
8000      The stack pointer contains the 32-bit address of the last occupied
8001      byte location in the stack.  The stack grows by decrementing the
8002      stack pointer.
8003
8004 `Frame Pointer FP'
8005      The frame pointer contains the 32-bit address of the previous frame
8006      pointer in the stack.  It is located at the top of a frame.
8007
8008 `Loop Top'
8009      LT0 and LT1.  These registers contain the 32-bit address of the
8010      top of a zero overhead loop.
8011
8012 `Loop Count'
8013      LC0 and LC1.  These registers contain the 32-bit counter of the
8014      zero overhead loop executions.
8015
8016 `Loop Bottom'
8017      LB0 and LB1.  These registers contain the 32-bit address of the
8018      bottom of a zero overhead loop.
8019
8020 `Index Registers'
8021      The set of 32-bit registers (I0, I1, I2, I3) that normally contain
8022      byte addresses of data structures.  Abbreviated I-register or Ireg.
8023
8024 `Modify Registers'
8025      The set of 32-bit registers (M0, M1, M2, M3) that normally contain
8026      offset values that are added and subtracted to one of the index
8027      registers.  Abbreviated as Mreg.
8028
8029 `Length Registers'
8030      The set of 32-bit registers (L0, L1, L2, L3) that normally contain
8031      the length in bytes of the circular buffer.  Abbreviated as Lreg.
8032      Clear the Lreg to disable circular addressing for the
8033      corresponding Ireg.
8034
8035 `Base Registers'
8036      The set of 32-bit registers (B0, B1, B2, B3) that normally contain
8037      the base address in bytes of the circular buffer.  Abbreviated as
8038      Breg.
8039
8040 `Floating Point'
8041      The Blackfin family has no hardware floating point but the .float
8042      directive generates ieee floating point numbers for use with
8043      software floating point libraries.
8044
8045 `Blackfin Opcodes'
8046      For detailed information on the Blackfin machine instruction set,
8047      see the Blackfin(r) Processor Instruction Set Reference.
8048
8049
8050 \1f
8051 File: as.info,  Node: Blackfin Directives,  Prev: Blackfin Syntax,  Up: Blackfin-Dependent
8052
8053 9.6.3 Directives
8054 ----------------
8055
8056 The following directives are provided for compatibility with the VDSP
8057 assembler.
8058
8059 `.byte2'
8060      Initializes a two byte data object.
8061
8062      This maps to the `.short' directive.
8063
8064 `.byte4'
8065      Initializes a four byte data object.
8066
8067      This maps to the `.int' directive.
8068
8069 `.db'
8070      Initializes a single byte data object.
8071
8072      This directive is a synonym for `.byte'.
8073
8074 `.dw'
8075      Initializes a two byte data object.
8076
8077      This directive is a synonym for `.byte2'.
8078
8079 `.dd'
8080      Initializes a four byte data object.
8081
8082      This directive is a synonym for `.byte4'.
8083
8084 `.var'
8085      Define and initialize a 32 bit data object.
8086
8087 \1f
8088 File: as.info,  Node: CR16-Dependent,  Next: CRIS-Dependent,  Prev: Blackfin-Dependent,  Up: Machine Dependencies
8089
8090 9.7 CR16 Dependent Features
8091 ===========================
8092
8093 * Menu:
8094
8095 * CR16 Operand Qualifiers::     CR16 Machine Operand Qualifiers
8096 * CR16 Syntax::                 Syntax for the CR16
8097
8098 \1f
8099 File: as.info,  Node: CR16 Operand Qualifiers,  Next: CR16 Syntax,  Up: CR16-Dependent
8100
8101 9.7.1 CR16 Operand Qualifiers
8102 -----------------------------
8103
8104 The National Semiconductor CR16 target of `as' has a few machine
8105 dependent operand qualifiers.
8106
8107    Operand expression type qualifier is an optional field in the
8108 instruction operand, to determines the type of the expression field of
8109 an operand. The `@' is required. CR16 architecture uses one of the
8110 following expression qualifiers:
8111
8112 `s'
8113      - `Specifies expression operand type as small'
8114
8115 `m'
8116      - `Specifies expression operand type as medium'
8117
8118 `l'
8119      - `Specifies expression operand type as large'
8120
8121 `c'
8122      - `Specifies the CR16 Assembler generates a relocation entry for
8123      the operand, where pc has implied bit, the expression is adjusted
8124      accordingly. The linker uses the relocation entry to update the
8125      operand address at link time.'
8126
8127 `got/GOT'
8128      - `Specifies the CR16 Assembler generates a relocation entry for
8129      the operand, offset from Global Offset Table. The linker uses this
8130      relocation entry to update the operand address at link time'
8131
8132 `cgot/cGOT'
8133      - `Specifies the CompactRISC Assembler generates a relocation
8134      entry for the operand, where pc has implied bit, the expression is
8135      adjusted accordingly. The linker uses the relocation entry to
8136      update the operand address at link time.'
8137
8138    CR16 target operand qualifiers and its size (in bits):
8139
8140 `Immediate Operand'
8141      - s --- 4 bits
8142
8143 `'
8144      - m --- 16 bits, for movb and movw instructions.
8145
8146 `'
8147      - m --- 20 bits, movd instructions.
8148
8149 `'
8150      - l --- 32 bits
8151
8152 `Absolute Operand'
8153      - s --- Illegal specifier for this operand.
8154
8155 `'
8156      - m --- 20 bits, movd instructions.
8157
8158 `Displacement Operand'
8159      - s --- 8 bits
8160
8161 `'
8162      - m --- 16 bits
8163
8164 `'
8165      - l --- 24 bits
8166
8167    For example:
8168      1   `movw $_myfun@c,r1'
8169
8170          This loads the address of _myfun, shifted right by 1, into r1.
8171
8172      2   `movd $_myfun@c,(r2,r1)'
8173
8174          This loads the address of _myfun, shifted right by 1, into register-pair r2-r1.
8175
8176      3   `_myfun_ptr:'
8177          `.long _myfun@c'
8178          `loadd _myfun_ptr, (r1,r0)'
8179          `jal (r1,r0)'
8180
8181          This .long directive, the address of _myfunc, shifted right by 1 at link time.
8182
8183      4   `loadd  _data1@GOT(r12), (r1,r0)'
8184
8185          This loads the address of _data1, into global offset table (ie GOT) and its offset value from GOT loads into register-pair r2-r1.
8186
8187      5   `loadd  _myfunc@cGOT(r12), (r1,r0)'
8188
8189          This loads the address of _myfun, shifted right by 1, into global offset table (ie GOT) and its offset value from GOT loads into register-pair r1-r0.
8190
8191 \1f
8192 File: as.info,  Node: CR16 Syntax,  Prev: CR16 Operand Qualifiers,  Up: CR16-Dependent
8193
8194 9.7.2 CR16 Syntax
8195 -----------------
8196
8197 * Menu:
8198
8199 * CR16-Chars::                Special Characters
8200
8201 \1f
8202 File: as.info,  Node: CR16-Chars,  Up: CR16 Syntax
8203
8204 9.7.2.1 Special Characters
8205 ..........................
8206
8207 The presence of a `#' on a line indicates the start of a comment that
8208 extends to the end of the current line.  If the `#' appears as the
8209 first character of a line, the whole line is treated as a comment, but
8210 in this case the line can also be a logical line number directive
8211 (*note Comments::) or a preprocessor control command (*note
8212 Preprocessing::).
8213
8214    The `;' character can be used to separate statements on the same
8215 line.
8216
8217 \1f
8218 File: as.info,  Node: CRIS-Dependent,  Next: D10V-Dependent,  Prev: CR16-Dependent,  Up: Machine Dependencies
8219
8220 9.8 CRIS Dependent Features
8221 ===========================
8222
8223 * Menu:
8224
8225 * CRIS-Opts::              Command-line Options
8226 * CRIS-Expand::            Instruction expansion
8227 * CRIS-Symbols::           Symbols
8228 * CRIS-Syntax::            Syntax
8229
8230 \1f
8231 File: as.info,  Node: CRIS-Opts,  Next: CRIS-Expand,  Up: CRIS-Dependent
8232
8233 9.8.1 Command-line Options
8234 --------------------------
8235
8236 The CRIS version of `as' has these machine-dependent command-line
8237 options.
8238
8239    The format of the generated object files can be either ELF or a.out,
8240 specified by the command-line options `--emulation=crisaout' and
8241 `--emulation=criself'.  The default is ELF (criself), unless `as' has
8242 been configured specifically for a.out by using the configuration name
8243 `cris-axis-aout'.
8244
8245    There are two different link-incompatible ELF object file variants
8246 for CRIS, for use in environments where symbols are expected to be
8247 prefixed by a leading `_' character and for environments without such a
8248 symbol prefix.  The variant used for GNU/Linux port has no symbol
8249 prefix.  Which variant to produce is specified by either of the options
8250 `--underscore' and `--no-underscore'.  The default is `--underscore'.
8251 Since symbols in CRIS a.out objects are expected to have a `_' prefix,
8252 specifying `--no-underscore' when generating a.out objects is an error.
8253 Besides the object format difference, the effect of this option is to
8254 parse register names differently (*note crisnous::).  The
8255 `--no-underscore' option makes a `$' register prefix mandatory.
8256
8257    The option `--pic' must be passed to `as' in order to recognize the
8258 symbol syntax used for ELF (SVR4 PIC) position-independent-code (*note
8259 crispic::).  This will also affect expansion of instructions.  The
8260 expansion with `--pic' will use PC-relative rather than (slightly
8261 faster) absolute addresses in those expansions.  This option is only
8262 valid when generating ELF format object files.
8263
8264    The option `--march=ARCHITECTURE' specifies the recognized
8265 instruction set and recognized register names.  It also controls the
8266 architecture type of the object file.  Valid values for ARCHITECTURE
8267 are:
8268 `v0_v10'
8269      All instructions and register names for any architecture variant
8270      in the set v0...v10 are recognized.  This is the default if the
8271      target is configured as cris-*.
8272
8273 `v10'
8274      Only instructions and register names for CRIS v10 (as found in
8275      ETRAX 100 LX) are recognized.  This is the default if the target
8276      is configured as crisv10-*.
8277
8278 `v32'
8279      Only instructions and register names for CRIS v32 (code name
8280      Guinness) are recognized.  This is the default if the target is
8281      configured as crisv32-*.  This value implies `--no-mul-bug-abort'.
8282      (A subsequent `--mul-bug-abort' will turn it back on.)
8283
8284 `common_v10_v32'
8285      Only instructions with register names and addressing modes with
8286      opcodes common to the v10 and v32 are recognized.
8287
8288    When `-N' is specified, `as' will emit a warning when a 16-bit
8289 branch instruction is expanded into a 32-bit multiple-instruction
8290 construct (*note CRIS-Expand::).
8291
8292    Some versions of the CRIS v10, for example in the Etrax 100 LX,
8293 contain a bug that causes destabilizing memory accesses when a multiply
8294 instruction is executed with certain values in the first operand just
8295 before a cache-miss.  When the `--mul-bug-abort' command line option is
8296 active (the default value), `as' will refuse to assemble a file
8297 containing a multiply instruction at a dangerous offset, one that could
8298 be the last on a cache-line, or is in a section with insufficient
8299 alignment.  This placement checking does not catch any case where the
8300 multiply instruction is dangerously placed because it is located in a
8301 delay-slot.  The `--mul-bug-abort' command line option turns off the
8302 checking.
8303
8304 \1f
8305 File: as.info,  Node: CRIS-Expand,  Next: CRIS-Symbols,  Prev: CRIS-Opts,  Up: CRIS-Dependent
8306
8307 9.8.2 Instruction expansion
8308 ---------------------------
8309
8310 `as' will silently choose an instruction that fits the operand size for
8311 `[register+constant]' operands.  For example, the offset `127' in
8312 `move.d [r3+127],r4' fits in an instruction using a signed-byte offset.
8313 Similarly, `move.d [r2+32767],r1' will generate an instruction using a
8314 16-bit offset.  For symbolic expressions and constants that do not fit
8315 in 16 bits including the sign bit, a 32-bit offset is generated.
8316
8317    For branches, `as' will expand from a 16-bit branch instruction into
8318 a sequence of instructions that can reach a full 32-bit address.  Since
8319 this does not correspond to a single instruction, such expansions can
8320 optionally be warned about.  *Note CRIS-Opts::.
8321
8322    If the operand is found to fit the range, a `lapc' mnemonic will
8323 translate to a `lapcq' instruction.  Use `lapc.d' to force the 32-bit
8324 `lapc' instruction.
8325
8326    Similarly, the `addo' mnemonic will translate to the shortest
8327 fitting instruction of `addoq', `addo.w' and `addo.d', when used with a
8328 operand that is a constant known at assembly time.
8329
8330 \1f
8331 File: as.info,  Node: CRIS-Symbols,  Next: CRIS-Syntax,  Prev: CRIS-Expand,  Up: CRIS-Dependent
8332
8333 9.8.3 Symbols
8334 -------------
8335
8336 Some symbols are defined by the assembler.  They're intended to be used
8337 in conditional assembly, for example:
8338       .if ..asm.arch.cris.v32
8339       CODE FOR CRIS V32
8340       .elseif ..asm.arch.cris.common_v10_v32
8341       CODE COMMON TO CRIS V32 AND CRIS V10
8342       .elseif ..asm.arch.cris.v10 | ..asm.arch.cris.any_v0_v10
8343       CODE FOR V10
8344       .else
8345       .error "Code needs to be added here."
8346       .endif
8347
8348    These symbols are defined in the assembler, reflecting command-line
8349 options, either when specified or the default.  They are always
8350 defined, to 0 or 1.
8351 `..asm.arch.cris.any_v0_v10'
8352      This symbol is non-zero when `--march=v0_v10' is specified or the
8353      default.
8354
8355 `..asm.arch.cris.common_v10_v32'
8356      Set according to the option `--march=common_v10_v32'.
8357
8358 `..asm.arch.cris.v10'
8359      Reflects the option `--march=v10'.
8360
8361 `..asm.arch.cris.v32'
8362      Corresponds to `--march=v10'.
8363
8364    Speaking of symbols, when a symbol is used in code, it can have a
8365 suffix modifying its value for use in position-independent code. *Note
8366 CRIS-Pic::.
8367
8368 \1f
8369 File: as.info,  Node: CRIS-Syntax,  Prev: CRIS-Symbols,  Up: CRIS-Dependent
8370
8371 9.8.4 Syntax
8372 ------------
8373
8374 There are different aspects of the CRIS assembly syntax.
8375
8376 * Menu:
8377
8378 * CRIS-Chars::                  Special Characters
8379 * CRIS-Pic::                    Position-Independent Code Symbols
8380 * CRIS-Regs::                   Register Names
8381 * CRIS-Pseudos::                Assembler Directives
8382
8383 \1f
8384 File: as.info,  Node: CRIS-Chars,  Next: CRIS-Pic,  Up: CRIS-Syntax
8385
8386 9.8.4.1 Special Characters
8387 ..........................
8388
8389 The character `#' is a line comment character.  It starts a comment if
8390 and only if it is placed at the beginning of a line.
8391
8392    A `;' character starts a comment anywhere on the line, causing all
8393 characters up to the end of the line to be ignored.
8394
8395    A `@' character is handled as a line separator equivalent to a
8396 logical new-line character (except in a comment), so separate
8397 instructions can be specified on a single line.
8398
8399 \1f
8400 File: as.info,  Node: CRIS-Pic,  Next: CRIS-Regs,  Prev: CRIS-Chars,  Up: CRIS-Syntax
8401
8402 9.8.4.2 Symbols in position-independent code
8403 ............................................
8404
8405 When generating position-independent code (SVR4 PIC) for use in
8406 cris-axis-linux-gnu or crisv32-axis-linux-gnu shared libraries, symbol
8407 suffixes are used to specify what kind of run-time symbol lookup will
8408 be used, expressed in the object as different _relocation types_.
8409 Usually, all absolute symbol values must be located in a table, the
8410 _global offset table_, leaving the code position-independent;
8411 independent of values of global symbols and independent of the address
8412 of the code.  The suffix modifies the value of the symbol, into for
8413 example an index into the global offset table where the real symbol
8414 value is entered, or a PC-relative value, or a value relative to the
8415 start of the global offset table.  All symbol suffixes start with the
8416 character `:' (omitted in the list below).  Every symbol use in code or
8417 a read-only section must therefore have a PIC suffix to enable a useful
8418 shared library to be created.  Usually, these constructs must not be
8419 used with an additive constant offset as is usually allowed, i.e. no 4
8420 as in `symbol + 4' is allowed.  This restriction is checked at
8421 link-time, not at assembly-time.
8422
8423 `GOT'
8424      Attaching this suffix to a symbol in an instruction causes the
8425      symbol to be entered into the global offset table.  The value is a
8426      32-bit index for that symbol into the global offset table.  The
8427      name of the corresponding relocation is `R_CRIS_32_GOT'.  Example:
8428      `move.d [$r0+extsym:GOT],$r9'
8429
8430 `GOT16'
8431      Same as for `GOT', but the value is a 16-bit index into the global
8432      offset table.  The corresponding relocation is `R_CRIS_16_GOT'.
8433      Example: `move.d [$r0+asymbol:GOT16],$r10'
8434
8435 `PLT'
8436      This suffix is used for function symbols.  It causes a _procedure
8437      linkage table_, an array of code stubs, to be created at the time
8438      the shared object is created or linked against, together with a
8439      global offset table entry.  The value is a pc-relative offset to
8440      the corresponding stub code in the procedure linkage table.  This
8441      arrangement causes the run-time symbol resolver to be called to
8442      look up and set the value of the symbol the first time the
8443      function is called (at latest; depending environment variables).
8444      It is only safe to leave the symbol unresolved this way if all
8445      references are function calls.  The name of the relocation is
8446      `R_CRIS_32_PLT_PCREL'.  Example: `add.d fnname:PLT,$pc'
8447
8448 `PLTG'
8449      Like PLT, but the value is relative to the beginning of the global
8450      offset table.  The relocation is `R_CRIS_32_PLT_GOTREL'.  Example:
8451      `move.d fnname:PLTG,$r3'
8452
8453 `GOTPLT'
8454      Similar to `PLT', but the value of the symbol is a 32-bit index
8455      into the global offset table.  This is somewhat of a mix between
8456      the effect of the `GOT' and the `PLT' suffix; the difference to
8457      `GOT' is that there will be a procedure linkage table entry
8458      created, and that the symbol is assumed to be a function entry and
8459      will be resolved by the run-time resolver as with `PLT'.  The
8460      relocation is `R_CRIS_32_GOTPLT'.  Example: `jsr
8461      [$r0+fnname:GOTPLT]'
8462
8463 `GOTPLT16'
8464      A variant of `GOTPLT' giving a 16-bit value.  Its relocation name
8465      is `R_CRIS_16_GOTPLT'.  Example: `jsr [$r0+fnname:GOTPLT16]'
8466
8467 `GOTOFF'
8468      This suffix must only be attached to a local symbol, but may be
8469      used in an expression adding an offset.  The value is the address
8470      of the symbol relative to the start of the global offset table.
8471      The relocation name is `R_CRIS_32_GOTREL'.  Example: `move.d
8472      [$r0+localsym:GOTOFF],r3'
8473
8474 \1f
8475 File: as.info,  Node: CRIS-Regs,  Next: CRIS-Pseudos,  Prev: CRIS-Pic,  Up: CRIS-Syntax
8476
8477 9.8.4.3 Register names
8478 ......................
8479
8480 A `$' character may always prefix a general or special register name in
8481 an instruction operand but is mandatory when the option
8482 `--no-underscore' is specified or when the `.syntax register_prefix'
8483 directive is in effect (*note crisnous::).  Register names are
8484 case-insensitive.
8485
8486 \1f
8487 File: as.info,  Node: CRIS-Pseudos,  Prev: CRIS-Regs,  Up: CRIS-Syntax
8488
8489 9.8.4.4 Assembler Directives
8490 ............................
8491
8492 There are a few CRIS-specific pseudo-directives in addition to the
8493 generic ones.  *Note Pseudo Ops::.  Constants emitted by
8494 pseudo-directives are in little-endian order for CRIS.  There is no
8495 support for floating-point-specific directives for CRIS.
8496
8497 `.dword EXPRESSIONS'
8498      The `.dword' directive is a synonym for `.int', expecting zero or
8499      more EXPRESSIONS, separated by commas.  For each expression, a
8500      32-bit little-endian constant is emitted.
8501
8502 `.syntax ARGUMENT'
8503      The `.syntax' directive takes as ARGUMENT one of the following
8504      case-sensitive choices.
8505
8506     `no_register_prefix'
8507           The `.syntax no_register_prefix' directive makes a `$'
8508           character prefix on all registers optional.  It overrides a
8509           previous setting, including the corresponding effect of the
8510           option `--no-underscore'.  If this directive is used when
8511           ordinary symbols do not have a `_' character prefix, care
8512           must be taken to avoid ambiguities whether an operand is a
8513           register or a symbol; using symbols with names the same as
8514           general or special registers then invoke undefined behavior.
8515
8516     `register_prefix'
8517           This directive makes a `$' character prefix on all registers
8518           mandatory.  It overrides a previous setting, including the
8519           corresponding effect of the option `--underscore'.
8520
8521     `leading_underscore'
8522           This is an assertion directive, emitting an error if the
8523           `--no-underscore' option is in effect.
8524
8525     `no_leading_underscore'
8526           This is the opposite of the `.syntax leading_underscore'
8527           directive and emits an error if the option `--underscore' is
8528           in effect.
8529
8530 `.arch ARGUMENT'
8531      This is an assertion directive, giving an error if the specified
8532      ARGUMENT is not the same as the specified or default value for the
8533      `--march=ARCHITECTURE' option (*note march-option::).
8534
8535
8536 \1f
8537 File: as.info,  Node: D10V-Dependent,  Next: D30V-Dependent,  Prev: CRIS-Dependent,  Up: Machine Dependencies
8538
8539 9.9 D10V Dependent Features
8540 ===========================
8541
8542 * Menu:
8543
8544 * D10V-Opts::                   D10V Options
8545 * D10V-Syntax::                 Syntax
8546 * D10V-Float::                  Floating Point
8547 * D10V-Opcodes::                Opcodes
8548
8549 \1f
8550 File: as.info,  Node: D10V-Opts,  Next: D10V-Syntax,  Up: D10V-Dependent
8551
8552 9.9.1 D10V Options
8553 ------------------
8554
8555 The Mitsubishi D10V version of `as' has a few machine dependent options.
8556
8557 `-O'
8558      The D10V can often execute two sub-instructions in parallel. When
8559      this option is used, `as' will attempt to optimize its output by
8560      detecting when instructions can be executed in parallel.
8561
8562 `--nowarnswap'
8563      To optimize execution performance, `as' will sometimes swap the
8564      order of instructions. Normally this generates a warning. When
8565      this option is used, no warning will be generated when
8566      instructions are swapped.
8567
8568 `--gstabs-packing'
8569 `--no-gstabs-packing'
8570      `as' packs adjacent short instructions into a single packed
8571      instruction. `--no-gstabs-packing' turns instruction packing off if
8572      `--gstabs' is specified as well; `--gstabs-packing' (the default)
8573      turns instruction packing on even when `--gstabs' is specified.
8574
8575 \1f
8576 File: as.info,  Node: D10V-Syntax,  Next: D10V-Float,  Prev: D10V-Opts,  Up: D10V-Dependent
8577
8578 9.9.2 Syntax
8579 ------------
8580
8581 The D10V syntax is based on the syntax in Mitsubishi's D10V
8582 architecture manual.  The differences are detailed below.
8583
8584 * Menu:
8585
8586 * D10V-Size::                 Size Modifiers
8587 * D10V-Subs::                 Sub-Instructions
8588 * D10V-Chars::                Special Characters
8589 * D10V-Regs::                 Register Names
8590 * D10V-Addressing::           Addressing Modes
8591 * D10V-Word::                 @WORD Modifier
8592
8593 \1f
8594 File: as.info,  Node: D10V-Size,  Next: D10V-Subs,  Up: D10V-Syntax
8595
8596 9.9.2.1 Size Modifiers
8597 ......................
8598
8599 The D10V version of `as' uses the instruction names in the D10V
8600 Architecture Manual.  However, the names in the manual are sometimes
8601 ambiguous.  There are instruction names that can assemble to a short or
8602 long form opcode.  How does the assembler pick the correct form?  `as'
8603 will always pick the smallest form if it can.  When dealing with a
8604 symbol that is not defined yet when a line is being assembled, it will
8605 always use the long form.  If you need to force the assembler to use
8606 either the short or long form of the instruction, you can append either
8607 `.s' (short) or `.l' (long) to it.  For example, if you are writing an
8608 assembly program and you want to do a branch to a symbol that is
8609 defined later in your program, you can write `bra.s   foo'.  Objdump
8610 and GDB will always append `.s' or `.l' to instructions which have both
8611 short and long forms.
8612
8613 \1f
8614 File: as.info,  Node: D10V-Subs,  Next: D10V-Chars,  Prev: D10V-Size,  Up: D10V-Syntax
8615
8616 9.9.2.2 Sub-Instructions
8617 ........................
8618
8619 The D10V assembler takes as input a series of instructions, either
8620 one-per-line, or in the special two-per-line format described in the
8621 next section.  Some of these instructions will be short-form or
8622 sub-instructions.  These sub-instructions can be packed into a single
8623 instruction.  The assembler will do this automatically.  It will also
8624 detect when it should not pack instructions.  For example, when a label
8625 is defined, the next instruction will never be packaged with the
8626 previous one.  Whenever a branch and link instruction is called, it
8627 will not be packaged with the next instruction so the return address
8628 will be valid.  Nops are automatically inserted when necessary.
8629
8630    If you do not want the assembler automatically making these
8631 decisions, you can control the packaging and execution type (parallel
8632 or sequential) with the special execution symbols described in the next
8633 section.
8634
8635 \1f
8636 File: as.info,  Node: D10V-Chars,  Next: D10V-Regs,  Prev: D10V-Subs,  Up: D10V-Syntax
8637
8638 9.9.2.3 Special Characters
8639 ..........................
8640
8641 A semicolon (`;') can be used anywhere on a line to start a comment
8642 that extends to the end of the line.
8643
8644    If a `#' appears as the first character of a line, the whole line is
8645 treated as a comment, but in this case the line could also be a logical
8646 line number directive (*note Comments::) or a preprocessor control
8647 command (*note Preprocessing::).
8648
8649    Sub-instructions may be executed in order, in reverse-order, or in
8650 parallel.  Instructions listed in the standard one-per-line format will
8651 be executed sequentially.  To specify the executing order, use the
8652 following symbols:
8653 `->'
8654      Sequential with instruction on the left first.
8655
8656 `<-'
8657      Sequential with instruction on the right first.
8658
8659 `||'
8660      Parallel
8661    The D10V syntax allows either one instruction per line, one
8662 instruction per line with the execution symbol, or two instructions per
8663 line.  For example
8664 `abs       a1      ->      abs     r0'
8665      Execute these sequentially.  The instruction on the right is in
8666      the right container and is executed second.
8667
8668 `abs       r0      <-      abs     a1'
8669      Execute these reverse-sequentially.  The instruction on the right
8670      is in the right container, and is executed first.
8671
8672 `ld2w    r2,@r8+         ||      mac     a0,r0,r7'
8673      Execute these in parallel.
8674
8675 `ld2w    r2,@r8+         ||'
8676 `mac     a0,r0,r7'
8677      Two-line format. Execute these in parallel.
8678
8679 `ld2w    r2,@r8+'
8680 `mac     a0,r0,r7'
8681      Two-line format. Execute these sequentially.  Assembler will put
8682      them in the proper containers.
8683
8684 `ld2w    r2,@r8+         ->'
8685 `mac     a0,r0,r7'
8686      Two-line format. Execute these sequentially.  Same as above but
8687      second instruction will always go into right container.
8688    Since `$' has no special meaning, you may use it in symbol names.
8689
8690 \1f
8691 File: as.info,  Node: D10V-Regs,  Next: D10V-Addressing,  Prev: D10V-Chars,  Up: D10V-Syntax
8692
8693 9.9.2.4 Register Names
8694 ......................
8695
8696 You can use the predefined symbols `r0' through `r15' to refer to the
8697 D10V registers.  You can also use `sp' as an alias for `r15'.  The
8698 accumulators are `a0' and `a1'.  There are special register-pair names
8699 that may optionally be used in opcodes that require even-numbered
8700 registers. Register names are not case sensitive.
8701
8702    Register Pairs
8703 `r0-r1'
8704
8705 `r2-r3'
8706
8707 `r4-r5'
8708
8709 `r6-r7'
8710
8711 `r8-r9'
8712
8713 `r10-r11'
8714
8715 `r12-r13'
8716
8717 `r14-r15'
8718
8719    The D10V also has predefined symbols for these control registers and
8720 status bits:
8721 `psw'
8722      Processor Status Word
8723
8724 `bpsw'
8725      Backup Processor Status Word
8726
8727 `pc'
8728      Program Counter
8729
8730 `bpc'
8731      Backup Program Counter
8732
8733 `rpt_c'
8734      Repeat Count
8735
8736 `rpt_s'
8737      Repeat Start address
8738
8739 `rpt_e'
8740      Repeat End address
8741
8742 `mod_s'
8743      Modulo Start address
8744
8745 `mod_e'
8746      Modulo End address
8747
8748 `iba'
8749      Instruction Break Address
8750
8751 `f0'
8752      Flag 0
8753
8754 `f1'
8755      Flag 1
8756
8757 `c'
8758      Carry flag
8759
8760 \1f
8761 File: as.info,  Node: D10V-Addressing,  Next: D10V-Word,  Prev: D10V-Regs,  Up: D10V-Syntax
8762
8763 9.9.2.5 Addressing Modes
8764 ........................
8765
8766 `as' understands the following addressing modes for the D10V.  `RN' in
8767 the following refers to any of the numbered registers, but _not_ the
8768 control registers.
8769 `RN'
8770      Register direct
8771
8772 `@RN'
8773      Register indirect
8774
8775 `@RN+'
8776      Register indirect with post-increment
8777
8778 `@RN-'
8779      Register indirect with post-decrement
8780
8781 `@-SP'
8782      Register indirect with pre-decrement
8783
8784 `@(DISP, RN)'
8785      Register indirect with displacement
8786
8787 `ADDR'
8788      PC relative address (for branch or rep).
8789
8790 `#IMM'
8791      Immediate data (the `#' is optional and ignored)
8792
8793 \1f
8794 File: as.info,  Node: D10V-Word,  Prev: D10V-Addressing,  Up: D10V-Syntax
8795
8796 9.9.2.6 @WORD Modifier
8797 ......................
8798
8799 Any symbol followed by `@word' will be replaced by the symbol's value
8800 shifted right by 2.  This is used in situations such as loading a
8801 register with the address of a function (or any other code fragment).
8802 For example, if you want to load a register with the location of the
8803 function `main' then jump to that function, you could do it as follows:
8804      ldi     r2, main@word
8805      jmp     r2
8806
8807 \1f
8808 File: as.info,  Node: D10V-Float,  Next: D10V-Opcodes,  Prev: D10V-Syntax,  Up: D10V-Dependent
8809
8810 9.9.3 Floating Point
8811 --------------------
8812
8813 The D10V has no hardware floating point, but the `.float' and `.double'
8814 directives generates IEEE floating-point numbers for compatibility with
8815 other development tools.
8816
8817 \1f
8818 File: as.info,  Node: D10V-Opcodes,  Prev: D10V-Float,  Up: D10V-Dependent
8819
8820 9.9.4 Opcodes
8821 -------------
8822
8823 For detailed information on the D10V machine instruction set, see `D10V
8824 Architecture: A VLIW Microprocessor for Multimedia Applications'
8825 (Mitsubishi Electric Corp.).  `as' implements all the standard D10V
8826 opcodes.  The only changes are those described in the section on size
8827 modifiers
8828
8829 \1f
8830 File: as.info,  Node: D30V-Dependent,  Next: Epiphany-Dependent,  Prev: D10V-Dependent,  Up: Machine Dependencies
8831
8832 9.10 D30V Dependent Features
8833 ============================
8834
8835 * Menu:
8836
8837 * D30V-Opts::                   D30V Options
8838 * D30V-Syntax::                 Syntax
8839 * D30V-Float::                  Floating Point
8840 * D30V-Opcodes::                Opcodes
8841
8842 \1f
8843 File: as.info,  Node: D30V-Opts,  Next: D30V-Syntax,  Up: D30V-Dependent
8844
8845 9.10.1 D30V Options
8846 -------------------
8847
8848 The Mitsubishi D30V version of `as' has a few machine dependent options.
8849
8850 `-O'
8851      The D30V can often execute two sub-instructions in parallel. When
8852      this option is used, `as' will attempt to optimize its output by
8853      detecting when instructions can be executed in parallel.
8854
8855 `-n'
8856      When this option is used, `as' will issue a warning every time it
8857      adds a nop instruction.
8858
8859 `-N'
8860      When this option is used, `as' will issue a warning if it needs to
8861      insert a nop after a 32-bit multiply before a load or 16-bit
8862      multiply instruction.
8863
8864 \1f
8865 File: as.info,  Node: D30V-Syntax,  Next: D30V-Float,  Prev: D30V-Opts,  Up: D30V-Dependent
8866
8867 9.10.2 Syntax
8868 -------------
8869
8870 The D30V syntax is based on the syntax in Mitsubishi's D30V
8871 architecture manual.  The differences are detailed below.
8872
8873 * Menu:
8874
8875 * D30V-Size::                 Size Modifiers
8876 * D30V-Subs::                 Sub-Instructions
8877 * D30V-Chars::                Special Characters
8878 * D30V-Guarded::              Guarded Execution
8879 * D30V-Regs::                 Register Names
8880 * D30V-Addressing::           Addressing Modes
8881
8882 \1f
8883 File: as.info,  Node: D30V-Size,  Next: D30V-Subs,  Up: D30V-Syntax
8884
8885 9.10.2.1 Size Modifiers
8886 .......................
8887
8888 The D30V version of `as' uses the instruction names in the D30V
8889 Architecture Manual.  However, the names in the manual are sometimes
8890 ambiguous.  There are instruction names that can assemble to a short or
8891 long form opcode.  How does the assembler pick the correct form?  `as'
8892 will always pick the smallest form if it can.  When dealing with a
8893 symbol that is not defined yet when a line is being assembled, it will
8894 always use the long form.  If you need to force the assembler to use
8895 either the short or long form of the instruction, you can append either
8896 `.s' (short) or `.l' (long) to it.  For example, if you are writing an
8897 assembly program and you want to do a branch to a symbol that is
8898 defined later in your program, you can write `bra.s foo'.  Objdump and
8899 GDB will always append `.s' or `.l' to instructions which have both
8900 short and long forms.
8901
8902 \1f
8903 File: as.info,  Node: D30V-Subs,  Next: D30V-Chars,  Prev: D30V-Size,  Up: D30V-Syntax
8904
8905 9.10.2.2 Sub-Instructions
8906 .........................
8907
8908 The D30V assembler takes as input a series of instructions, either
8909 one-per-line, or in the special two-per-line format described in the
8910 next section.  Some of these instructions will be short-form or
8911 sub-instructions.  These sub-instructions can be packed into a single
8912 instruction.  The assembler will do this automatically.  It will also
8913 detect when it should not pack instructions.  For example, when a label
8914 is defined, the next instruction will never be packaged with the
8915 previous one.  Whenever a branch and link instruction is called, it
8916 will not be packaged with the next instruction so the return address
8917 will be valid.  Nops are automatically inserted when necessary.
8918
8919    If you do not want the assembler automatically making these
8920 decisions, you can control the packaging and execution type (parallel
8921 or sequential) with the special execution symbols described in the next
8922 section.
8923
8924 \1f
8925 File: as.info,  Node: D30V-Chars,  Next: D30V-Guarded,  Prev: D30V-Subs,  Up: D30V-Syntax
8926
8927 9.10.2.3 Special Characters
8928 ...........................
8929
8930 A semicolon (`;') can be used anywhere on a line to start a comment
8931 that extends to the end of the line.
8932
8933    If a `#' appears as the first character of a line, the whole line is
8934 treated as a comment, but in this case the line could also be a logical
8935 line number directive (*note Comments::) or a preprocessor control
8936 command (*note Preprocessing::).
8937
8938    Sub-instructions may be executed in order, in reverse-order, or in
8939 parallel.  Instructions listed in the standard one-per-line format will
8940 be executed sequentially unless you use the `-O' option.
8941
8942    To specify the executing order, use the following symbols:
8943 `->'
8944      Sequential with instruction on the left first.
8945
8946 `<-'
8947      Sequential with instruction on the right first.
8948
8949 `||'
8950      Parallel
8951
8952    The D30V syntax allows either one instruction per line, one
8953 instruction per line with the execution symbol, or two instructions per
8954 line.  For example
8955 `abs r2,r3 -> abs r4,r5'
8956      Execute these sequentially.  The instruction on the right is in
8957      the right container and is executed second.
8958
8959 `abs r2,r3 <- abs r4,r5'
8960      Execute these reverse-sequentially.  The instruction on the right
8961      is in the right container, and is executed first.
8962
8963 `abs r2,r3 || abs r4,r5'
8964      Execute these in parallel.
8965
8966 `ldw r2,@(r3,r4) ||'
8967 `mulx r6,r8,r9'
8968      Two-line format. Execute these in parallel.
8969
8970 `mulx a0,r8,r9'
8971 `stw r2,@(r3,r4)'
8972      Two-line format. Execute these sequentially unless `-O' option is
8973      used.  If the `-O' option is used, the assembler will determine if
8974      the instructions could be done in parallel (the above two
8975      instructions can be done in parallel), and if so, emit them as
8976      parallel instructions.  The assembler will put them in the proper
8977      containers.  In the above example, the assembler will put the
8978      `stw' instruction in left container and the `mulx' instruction in
8979      the right container.
8980
8981 `stw r2,@(r3,r4) ->'
8982 `mulx a0,r8,r9'
8983      Two-line format.  Execute the `stw' instruction followed by the
8984      `mulx' instruction sequentially.  The first instruction goes in the
8985      left container and the second instruction goes into right
8986      container.  The assembler will give an error if the machine
8987      ordering constraints are violated.
8988
8989 `stw r2,@(r3,r4) <-'
8990 `mulx a0,r8,r9'
8991      Same as previous example, except that the `mulx' instruction is
8992      executed before the `stw' instruction.
8993
8994    Since `$' has no special meaning, you may use it in symbol names.
8995
8996 \1f
8997 File: as.info,  Node: D30V-Guarded,  Next: D30V-Regs,  Prev: D30V-Chars,  Up: D30V-Syntax
8998
8999 9.10.2.4 Guarded Execution
9000 ..........................
9001
9002 `as' supports the full range of guarded execution directives for each
9003 instruction.  Just append the directive after the instruction proper.
9004 The directives are:
9005
9006 `/tx'
9007      Execute the instruction if flag f0 is true.
9008
9009 `/fx'
9010      Execute the instruction if flag f0 is false.
9011
9012 `/xt'
9013      Execute the instruction if flag f1 is true.
9014
9015 `/xf'
9016      Execute the instruction if flag f1 is false.
9017
9018 `/tt'
9019      Execute the instruction if both flags f0 and f1 are true.
9020
9021 `/tf'
9022      Execute the instruction if flag f0 is true and flag f1 is false.
9023
9024 \1f
9025 File: as.info,  Node: D30V-Regs,  Next: D30V-Addressing,  Prev: D30V-Guarded,  Up: D30V-Syntax
9026
9027 9.10.2.5 Register Names
9028 .......................
9029
9030 You can use the predefined symbols `r0' through `r63' to refer to the
9031 D30V registers.  You can also use `sp' as an alias for `r63' and `link'
9032 as an alias for `r62'.  The accumulators are `a0' and `a1'.
9033
9034    The D30V also has predefined symbols for these control registers and
9035 status bits:
9036 `psw'
9037      Processor Status Word
9038
9039 `bpsw'
9040      Backup Processor Status Word
9041
9042 `pc'
9043      Program Counter
9044
9045 `bpc'
9046      Backup Program Counter
9047
9048 `rpt_c'
9049      Repeat Count
9050
9051 `rpt_s'
9052      Repeat Start address
9053
9054 `rpt_e'
9055      Repeat End address
9056
9057 `mod_s'
9058      Modulo Start address
9059
9060 `mod_e'
9061      Modulo End address
9062
9063 `iba'
9064      Instruction Break Address
9065
9066 `f0'
9067      Flag 0
9068
9069 `f1'
9070      Flag 1
9071
9072 `f2'
9073      Flag 2
9074
9075 `f3'
9076      Flag 3
9077
9078 `f4'
9079      Flag 4
9080
9081 `f5'
9082      Flag 5
9083
9084 `f6'
9085      Flag 6
9086
9087 `f7'
9088      Flag 7
9089
9090 `s'
9091      Same as flag 4 (saturation flag)
9092
9093 `v'
9094      Same as flag 5 (overflow flag)
9095
9096 `va'
9097      Same as flag 6 (sticky overflow flag)
9098
9099 `c'
9100      Same as flag 7 (carry/borrow flag)
9101
9102 `b'
9103      Same as flag 7 (carry/borrow flag)
9104
9105 \1f
9106 File: as.info,  Node: D30V-Addressing,  Prev: D30V-Regs,  Up: D30V-Syntax
9107
9108 9.10.2.6 Addressing Modes
9109 .........................
9110
9111 `as' understands the following addressing modes for the D30V.  `RN' in
9112 the following refers to any of the numbered registers, but _not_ the
9113 control registers.
9114 `RN'
9115      Register direct
9116
9117 `@RN'
9118      Register indirect
9119
9120 `@RN+'
9121      Register indirect with post-increment
9122
9123 `@RN-'
9124      Register indirect with post-decrement
9125
9126 `@-SP'
9127      Register indirect with pre-decrement
9128
9129 `@(DISP, RN)'
9130      Register indirect with displacement
9131
9132 `ADDR'
9133      PC relative address (for branch or rep).
9134
9135 `#IMM'
9136      Immediate data (the `#' is optional and ignored)
9137
9138 \1f
9139 File: as.info,  Node: D30V-Float,  Next: D30V-Opcodes,  Prev: D30V-Syntax,  Up: D30V-Dependent
9140
9141 9.10.3 Floating Point
9142 ---------------------
9143
9144 The D30V has no hardware floating point, but the `.float' and `.double'
9145 directives generates IEEE floating-point numbers for compatibility with
9146 other development tools.
9147
9148 \1f
9149 File: as.info,  Node: D30V-Opcodes,  Prev: D30V-Float,  Up: D30V-Dependent
9150
9151 9.10.4 Opcodes
9152 --------------
9153
9154 For detailed information on the D30V machine instruction set, see `D30V
9155 Architecture: A VLIW Microprocessor for Multimedia Applications'
9156 (Mitsubishi Electric Corp.).  `as' implements all the standard D30V
9157 opcodes.  The only changes are those described in the section on size
9158 modifiers
9159
9160 \1f
9161 File: as.info,  Node: Epiphany-Dependent,  Next: H8/300-Dependent,  Prev: D30V-Dependent,  Up: Machine Dependencies
9162
9163 9.11 Epiphany Dependent Features
9164 ================================
9165
9166 * Menu:
9167
9168 * Epiphany Options::              Options
9169 * Epiphany Syntax::               Epiphany Syntax
9170
9171 \1f
9172 File: as.info,  Node: Epiphany Options,  Next: Epiphany Syntax,  Up: Epiphany-Dependent
9173
9174 9.11.1 Options
9175 --------------
9176
9177 `as' has two additional command-line options for the Epiphany
9178 architecture.
9179
9180 `-mepiphany'
9181      Specifies that the both 32 and 16 bit instructions are allowed.
9182      This is the default behavior.
9183
9184 `-mepiphany16'
9185      Restricts the permitted instructions to just the 16 bit set.
9186
9187 \1f
9188 File: as.info,  Node: Epiphany Syntax,  Prev: Epiphany Options,  Up: Epiphany-Dependent
9189
9190 9.11.2 Epiphany Syntax
9191 ----------------------
9192
9193 * Menu:
9194
9195 * Epiphany-Chars::                Special Characters
9196
9197 \1f
9198 File: as.info,  Node: Epiphany-Chars,  Up: Epiphany Syntax
9199
9200 9.11.2.1 Special Characters
9201 ...........................
9202
9203 The presence of a `;' on a line indicates the start of a comment that
9204 extends to the end of the current line.
9205
9206    If a `#' appears as the first character of a line then the whole
9207 line is treated as a comment, but in this case the line could also be a
9208 logical line number directive (*note Comments::) or a preprocessor
9209 control command (*note Preprocessing::).
9210
9211    The ``' character can be used to separate statements on the same
9212 line.
9213
9214 \1f
9215 File: as.info,  Node: H8/300-Dependent,  Next: HPPA-Dependent,  Prev: Epiphany-Dependent,  Up: Machine Dependencies
9216
9217 9.12 H8/300 Dependent Features
9218 ==============================
9219
9220 * Menu:
9221
9222 * H8/300 Options::              Options
9223 * H8/300 Syntax::               Syntax
9224 * H8/300 Floating Point::       Floating Point
9225 * H8/300 Directives::           H8/300 Machine Directives
9226 * H8/300 Opcodes::              Opcodes
9227
9228 \1f
9229 File: as.info,  Node: H8/300 Options,  Next: H8/300 Syntax,  Up: H8/300-Dependent
9230
9231 9.12.1 Options
9232 --------------
9233
9234 The Renesas H8/300 version of `as' has one machine-dependent option:
9235
9236 `-h-tick-hex'
9237      Support H'00 style hex constants in addition to 0x00 style.
9238
9239
9240 \1f
9241 File: as.info,  Node: H8/300 Syntax,  Next: H8/300 Floating Point,  Prev: H8/300 Options,  Up: H8/300-Dependent
9242
9243 9.12.2 Syntax
9244 -------------
9245
9246 * Menu:
9247
9248 * H8/300-Chars::                Special Characters
9249 * H8/300-Regs::                 Register Names
9250 * H8/300-Addressing::           Addressing Modes
9251
9252 \1f
9253 File: as.info,  Node: H8/300-Chars,  Next: H8/300-Regs,  Up: H8/300 Syntax
9254
9255 9.12.2.1 Special Characters
9256 ...........................
9257
9258 `;' is the line comment character.
9259
9260    `$' can be used instead of a newline to separate statements.
9261 Therefore _you may not use `$' in symbol names_ on the H8/300.
9262
9263 \1f
9264 File: as.info,  Node: H8/300-Regs,  Next: H8/300-Addressing,  Prev: H8/300-Chars,  Up: H8/300 Syntax
9265
9266 9.12.2.2 Register Names
9267 .......................
9268
9269 You can use predefined symbols of the form `rNh' and `rNl' to refer to
9270 the H8/300 registers as sixteen 8-bit general-purpose registers.  N is
9271 a digit from `0' to `7'); for instance, both `r0h' and `r7l' are valid
9272 register names.
9273
9274    You can also use the eight predefined symbols `rN' to refer to the
9275 H8/300 registers as 16-bit registers (you must use this form for
9276 addressing).
9277
9278    On the H8/300H, you can also use the eight predefined symbols `erN'
9279 (`er0' ... `er7') to refer to the 32-bit general purpose registers.
9280
9281    The two control registers are called `pc' (program counter; a 16-bit
9282 register, except on the H8/300H where it is 24 bits) and `ccr'
9283 (condition code register; an 8-bit register).  `r7' is used as the
9284 stack pointer, and can also be called `sp'.
9285
9286 \1f
9287 File: as.info,  Node: H8/300-Addressing,  Prev: H8/300-Regs,  Up: H8/300 Syntax
9288
9289 9.12.2.3 Addressing Modes
9290 .........................
9291
9292 as understands the following addressing modes for the H8/300:
9293 `rN'
9294      Register direct
9295
9296 `@rN'
9297      Register indirect
9298
9299 `@(D, rN)'
9300 `@(D:16, rN)'
9301 `@(D:24, rN)'
9302      Register indirect: 16-bit or 24-bit displacement D from register
9303      N.  (24-bit displacements are only meaningful on the H8/300H.)
9304
9305 `@rN+'
9306      Register indirect with post-increment
9307
9308 `@-rN'
9309      Register indirect with pre-decrement
9310
9311 ``@'AA'
9312 ``@'AA:8'
9313 ``@'AA:16'
9314 ``@'AA:24'
9315      Absolute address `aa'.  (The address size `:24' only makes sense
9316      on the H8/300H.)
9317
9318 `#XX'
9319 `#XX:8'
9320 `#XX:16'
9321 `#XX:32'
9322      Immediate data XX.  You may specify the `:8', `:16', or `:32' for
9323      clarity, if you wish; but `as' neither requires this nor uses
9324      it--the data size required is taken from context.
9325
9326 ``@'`@'AA'
9327 ``@'`@'AA:8'
9328      Memory indirect.  You may specify the `:8' for clarity, if you
9329      wish; but `as' neither requires this nor uses it.
9330
9331 \1f
9332 File: as.info,  Node: H8/300 Floating Point,  Next: H8/300 Directives,  Prev: H8/300 Syntax,  Up: H8/300-Dependent
9333
9334 9.12.3 Floating Point
9335 ---------------------
9336
9337 The H8/300 family has no hardware floating point, but the `.float'
9338 directive generates IEEE floating-point numbers for compatibility with
9339 other development tools.
9340
9341 \1f
9342 File: as.info,  Node: H8/300 Directives,  Next: H8/300 Opcodes,  Prev: H8/300 Floating Point,  Up: H8/300-Dependent
9343
9344 9.12.4 H8/300 Machine Directives
9345 --------------------------------
9346
9347 `as' has the following machine-dependent directives for the H8/300:
9348
9349 `.h8300h'
9350      Recognize and emit additional instructions for the H8/300H
9351      variant, and also make `.int' emit 32-bit numbers rather than the
9352      usual (16-bit) for the H8/300 family.
9353
9354 `.h8300s'
9355      Recognize and emit additional instructions for the H8S variant, and
9356      also make `.int' emit 32-bit numbers rather than the usual (16-bit)
9357      for the H8/300 family.
9358
9359 `.h8300hn'
9360      Recognize and emit additional instructions for the H8/300H variant
9361      in normal mode, and also make `.int' emit 32-bit numbers rather
9362      than the usual (16-bit) for the H8/300 family.
9363
9364 `.h8300sn'
9365      Recognize and emit additional instructions for the H8S variant in
9366      normal mode, and also make `.int' emit 32-bit numbers rather than
9367      the usual (16-bit) for the H8/300 family.
9368
9369    On the H8/300 family (including the H8/300H) `.word' directives
9370 generate 16-bit numbers.
9371
9372 \1f
9373 File: as.info,  Node: H8/300 Opcodes,  Prev: H8/300 Directives,  Up: H8/300-Dependent
9374
9375 9.12.5 Opcodes
9376 --------------
9377
9378 For detailed information on the H8/300 machine instruction set, see
9379 `H8/300 Series Programming Manual'.  For information specific to the
9380 H8/300H, see `H8/300H Series Programming Manual' (Renesas).
9381
9382    `as' implements all the standard H8/300 opcodes.  No additional
9383 pseudo-instructions are needed on this family.
9384
9385    The following table summarizes the H8/300 opcodes, and their
9386 arguments.  Entries marked `*' are opcodes used only on the H8/300H.
9387
9388               Legend:
9389                  Rs   source register
9390                  Rd   destination register
9391                  abs  absolute address
9392                  imm  immediate data
9393               disp:N  N-bit displacement from a register
9394              pcrel:N  N-bit displacement relative to program counter
9395
9396         add.b #imm,rd              *  andc #imm,ccr
9397         add.b rs,rd                   band #imm,rd
9398         add.w rs,rd                   band #imm,@rd
9399      *  add.w #imm,rd                 band #imm,@abs:8
9400      *  add.l rs,rd                   bra  pcrel:8
9401      *  add.l #imm,rd              *  bra  pcrel:16
9402         adds #imm,rd                  bt   pcrel:8
9403         addx #imm,rd               *  bt   pcrel:16
9404         addx rs,rd                    brn  pcrel:8
9405         and.b #imm,rd              *  brn  pcrel:16
9406         and.b rs,rd                   bf   pcrel:8
9407      *  and.w rs,rd                *  bf   pcrel:16
9408      *  and.w #imm,rd                 bhi  pcrel:8
9409      *  and.l #imm,rd              *  bhi  pcrel:16
9410      *  and.l rs,rd                   bls  pcrel:8
9411
9412      *  bls  pcrel:16                 bld  #imm,rd
9413         bcc  pcrel:8                  bld  #imm,@rd
9414      *  bcc  pcrel:16                 bld  #imm,@abs:8
9415         bhs  pcrel:8                  bnot #imm,rd
9416      *  bhs  pcrel:16                 bnot #imm,@rd
9417         bcs  pcrel:8                  bnot #imm,@abs:8
9418      *  bcs  pcrel:16                 bnot rs,rd
9419         blo  pcrel:8                  bnot rs,@rd
9420      *  blo  pcrel:16                 bnot rs,@abs:8
9421         bne  pcrel:8                  bor  #imm,rd
9422      *  bne  pcrel:16                 bor  #imm,@rd
9423         beq  pcrel:8                  bor  #imm,@abs:8
9424      *  beq  pcrel:16                 bset #imm,rd
9425         bvc  pcrel:8                  bset #imm,@rd
9426      *  bvc  pcrel:16                 bset #imm,@abs:8
9427         bvs  pcrel:8                  bset rs,rd
9428      *  bvs  pcrel:16                 bset rs,@rd
9429         bpl  pcrel:8                  bset rs,@abs:8
9430      *  bpl  pcrel:16                 bsr  pcrel:8
9431         bmi  pcrel:8                  bsr  pcrel:16
9432      *  bmi  pcrel:16                 bst  #imm,rd
9433         bge  pcrel:8                  bst  #imm,@rd
9434      *  bge  pcrel:16                 bst  #imm,@abs:8
9435         blt  pcrel:8                  btst #imm,rd
9436      *  blt  pcrel:16                 btst #imm,@rd
9437         bgt  pcrel:8                  btst #imm,@abs:8
9438      *  bgt  pcrel:16                 btst rs,rd
9439         ble  pcrel:8                  btst rs,@rd
9440      *  ble  pcrel:16                 btst rs,@abs:8
9441         bclr #imm,rd                  bxor #imm,rd
9442         bclr #imm,@rd                 bxor #imm,@rd
9443         bclr #imm,@abs:8              bxor #imm,@abs:8
9444         bclr rs,rd                    cmp.b #imm,rd
9445         bclr rs,@rd                   cmp.b rs,rd
9446         bclr rs,@abs:8                cmp.w rs,rd
9447         biand #imm,rd                 cmp.w rs,rd
9448         biand #imm,@rd             *  cmp.w #imm,rd
9449         biand #imm,@abs:8          *  cmp.l #imm,rd
9450         bild #imm,rd               *  cmp.l rs,rd
9451         bild #imm,@rd                 daa  rs
9452         bild #imm,@abs:8              das  rs
9453         bior #imm,rd                  dec.b rs
9454         bior #imm,@rd              *  dec.w #imm,rd
9455         bior #imm,@abs:8           *  dec.l #imm,rd
9456         bist #imm,rd                  divxu.b rs,rd
9457         bist #imm,@rd              *  divxu.w rs,rd
9458         bist #imm,@abs:8           *  divxs.b rs,rd
9459         bixor #imm,rd              *  divxs.w rs,rd
9460         bixor #imm,@rd                eepmov
9461         bixor #imm,@abs:8          *  eepmovw
9462
9463      *  exts.w rd                     mov.w rs,@abs:16
9464      *  exts.l rd                  *  mov.l #imm,rd
9465      *  extu.w rd                  *  mov.l rs,rd
9466      *  extu.l rd                  *  mov.l @rs,rd
9467         inc  rs                    *  mov.l @(disp:16,rs),rd
9468      *  inc.w #imm,rd              *  mov.l @(disp:24,rs),rd
9469      *  inc.l #imm,rd              *  mov.l @rs+,rd
9470         jmp  @rs                   *  mov.l @abs:16,rd
9471         jmp  abs                   *  mov.l @abs:24,rd
9472         jmp  @@abs:8               *  mov.l rs,@rd
9473         jsr  @rs                   *  mov.l rs,@(disp:16,rd)
9474         jsr  abs                   *  mov.l rs,@(disp:24,rd)
9475         jsr  @@abs:8               *  mov.l rs,@-rd
9476         ldc  #imm,ccr              *  mov.l rs,@abs:16
9477         ldc  rs,ccr                *  mov.l rs,@abs:24
9478      *  ldc  @abs:16,ccr              movfpe @abs:16,rd
9479      *  ldc  @abs:24,ccr              movtpe rs,@abs:16
9480      *  ldc  @(disp:16,rs),ccr        mulxu.b rs,rd
9481      *  ldc  @(disp:24,rs),ccr     *  mulxu.w rs,rd
9482      *  ldc  @rs+,ccr              *  mulxs.b rs,rd
9483      *  ldc  @rs,ccr               *  mulxs.w rs,rd
9484      *  mov.b @(disp:24,rs),rd        neg.b rs
9485      *  mov.b rs,@(disp:24,rd)     *  neg.w rs
9486         mov.b @abs:16,rd           *  neg.l rs
9487         mov.b rs,rd                   nop
9488         mov.b @abs:8,rd               not.b rs
9489         mov.b rs,@abs:8            *  not.w rs
9490         mov.b rs,rd                *  not.l rs
9491         mov.b #imm,rd                 or.b #imm,rd
9492         mov.b @rs,rd                  or.b rs,rd
9493         mov.b @(disp:16,rs),rd     *  or.w #imm,rd
9494         mov.b @rs+,rd              *  or.w rs,rd
9495         mov.b @abs:8,rd            *  or.l #imm,rd
9496         mov.b rs,@rd               *  or.l rs,rd
9497         mov.b rs,@(disp:16,rd)        orc  #imm,ccr
9498         mov.b rs,@-rd                 pop.w rs
9499         mov.b rs,@abs:8            *  pop.l rs
9500         mov.w rs,@rd                  push.w rs
9501      *  mov.w @(disp:24,rs),rd     *  push.l rs
9502      *  mov.w rs,@(disp:24,rd)        rotl.b rs
9503      *  mov.w @abs:24,rd           *  rotl.w rs
9504      *  mov.w rs,@abs:24           *  rotl.l rs
9505         mov.w rs,rd                   rotr.b rs
9506         mov.w #imm,rd              *  rotr.w rs
9507         mov.w @rs,rd               *  rotr.l rs
9508         mov.w @(disp:16,rs),rd        rotxl.b rs
9509         mov.w @rs+,rd              *  rotxl.w rs
9510         mov.w @abs:16,rd           *  rotxl.l rs
9511         mov.w rs,@(disp:16,rd)        rotxr.b rs
9512         mov.w rs,@-rd              *  rotxr.w rs
9513
9514      *  rotxr.l rs                 *  stc  ccr,@(disp:24,rd)
9515         bpt                        *  stc  ccr,@-rd
9516         rte                        *  stc  ccr,@abs:16
9517         rts                        *  stc  ccr,@abs:24
9518         shal.b rs                     sub.b rs,rd
9519      *  shal.w rs                     sub.w rs,rd
9520      *  shal.l rs                  *  sub.w #imm,rd
9521         shar.b rs                  *  sub.l rs,rd
9522      *  shar.w rs                  *  sub.l #imm,rd
9523      *  shar.l rs                     subs #imm,rd
9524         shll.b rs                     subx #imm,rd
9525      *  shll.w rs                     subx rs,rd
9526      *  shll.l rs                  *  trapa #imm
9527         shlr.b rs                     xor  #imm,rd
9528      *  shlr.w rs                     xor  rs,rd
9529      *  shlr.l rs                  *  xor.w #imm,rd
9530         sleep                      *  xor.w rs,rd
9531         stc  ccr,rd                *  xor.l #imm,rd
9532      *  stc  ccr,@rs               *  xor.l rs,rd
9533      *  stc  ccr,@(disp:16,rd)        xorc #imm,ccr
9534
9535    Four H8/300 instructions (`add', `cmp', `mov', `sub') are defined
9536 with variants using the suffixes `.b', `.w', and `.l' to specify the
9537 size of a memory operand.  `as' supports these suffixes, but does not
9538 require them; since one of the operands is always a register, `as' can
9539 deduce the correct size.
9540
9541    For example, since `r0' refers to a 16-bit register,
9542      mov    r0,@foo
9543 is equivalent to
9544      mov.w  r0,@foo
9545
9546    If you use the size suffixes, `as' issues a warning when the suffix
9547 and the register size do not match.
9548
9549 \1f
9550 File: as.info,  Node: HPPA-Dependent,  Next: ESA/390-Dependent,  Prev: H8/300-Dependent,  Up: Machine Dependencies
9551
9552 9.13 HPPA Dependent Features
9553 ============================
9554
9555 * Menu:
9556
9557 * HPPA Notes::                Notes
9558 * HPPA Options::              Options
9559 * HPPA Syntax::               Syntax
9560 * HPPA Floating Point::       Floating Point
9561 * HPPA Directives::           HPPA Machine Directives
9562 * HPPA Opcodes::              Opcodes
9563
9564 \1f
9565 File: as.info,  Node: HPPA Notes,  Next: HPPA Options,  Up: HPPA-Dependent
9566
9567 9.13.1 Notes
9568 ------------
9569
9570 As a back end for GNU CC `as' has been throughly tested and should work
9571 extremely well.  We have tested it only minimally on hand written
9572 assembly code and no one has tested it much on the assembly output from
9573 the HP compilers.
9574
9575    The format of the debugging sections has changed since the original
9576 `as' port (version 1.3X) was released; therefore, you must rebuild all
9577 HPPA objects and libraries with the new assembler so that you can debug
9578 the final executable.
9579
9580    The HPPA `as' port generates a small subset of the relocations
9581 available in the SOM and ELF object file formats.  Additional relocation
9582 support will be added as it becomes necessary.
9583
9584 \1f
9585 File: as.info,  Node: HPPA Options,  Next: HPPA Syntax,  Prev: HPPA Notes,  Up: HPPA-Dependent
9586
9587 9.13.2 Options
9588 --------------
9589
9590 `as' has no machine-dependent command-line options for the HPPA.
9591
9592 \1f
9593 File: as.info,  Node: HPPA Syntax,  Next: HPPA Floating Point,  Prev: HPPA Options,  Up: HPPA-Dependent
9594
9595 9.13.3 Syntax
9596 -------------
9597
9598 The assembler syntax closely follows the HPPA instruction set reference
9599 manual; assembler directives and general syntax closely follow the HPPA
9600 assembly language reference manual, with a few noteworthy differences.
9601
9602    First, a colon may immediately follow a label definition.  This is
9603 simply for compatibility with how most assembly language programmers
9604 write code.
9605
9606    Some obscure expression parsing problems may affect hand written
9607 code which uses the `spop' instructions, or code which makes significant
9608 use of the `!' line separator.
9609
9610    `as' is much less forgiving about missing arguments and other
9611 similar oversights than the HP assembler.  `as' notifies you of missing
9612 arguments as syntax errors; this is regarded as a feature, not a bug.
9613
9614    Finally, `as' allows you to use an external symbol without
9615 explicitly importing the symbol.  _Warning:_ in the future this will be
9616 an error for HPPA targets.
9617
9618    Special characters for HPPA targets include:
9619
9620    `;' is the line comment character.
9621
9622    `!' can be used instead of a newline to separate statements.
9623
9624    Since `$' has no special meaning, you may use it in symbol names.
9625
9626 \1f
9627 File: as.info,  Node: HPPA Floating Point,  Next: HPPA Directives,  Prev: HPPA Syntax,  Up: HPPA-Dependent
9628
9629 9.13.4 Floating Point
9630 ---------------------
9631
9632 The HPPA family uses IEEE floating-point numbers.
9633
9634 \1f
9635 File: as.info,  Node: HPPA Directives,  Next: HPPA Opcodes,  Prev: HPPA Floating Point,  Up: HPPA-Dependent
9636
9637 9.13.5 HPPA Assembler Directives
9638 --------------------------------
9639
9640 `as' for the HPPA supports many additional directives for compatibility
9641 with the native assembler.  This section describes them only briefly.
9642 For detailed information on HPPA-specific assembler directives, see
9643 `HP9000 Series 800 Assembly Language Reference Manual' (HP 92432-90001).
9644
9645    `as' does _not_ support the following assembler directives described
9646 in the HP manual:
9647
9648      .endm           .liston
9649      .enter          .locct
9650      .leave          .macro
9651      .listoff
9652
9653    Beyond those implemented for compatibility, `as' supports one
9654 additional assembler directive for the HPPA: `.param'.  It conveys
9655 register argument locations for static functions.  Its syntax closely
9656 follows the `.export' directive.
9657
9658    These are the additional directives in `as' for the HPPA:
9659
9660 `.block N'
9661 `.blockz N'
9662      Reserve N bytes of storage, and initialize them to zero.
9663
9664 `.call'
9665      Mark the beginning of a procedure call.  Only the special case
9666      with _no arguments_ is allowed.
9667
9668 `.callinfo [ PARAM=VALUE, ... ]  [ FLAG, ... ]'
9669      Specify a number of parameters and flags that define the
9670      environment for a procedure.
9671
9672      PARAM may be any of `frame' (frame size), `entry_gr' (end of
9673      general register range), `entry_fr' (end of float register range),
9674      `entry_sr' (end of space register range).
9675
9676      The values for FLAG are `calls' or `caller' (proc has
9677      subroutines), `no_calls' (proc does not call subroutines),
9678      `save_rp' (preserve return pointer), `save_sp' (proc preserves
9679      stack pointer), `no_unwind' (do not unwind this proc), `hpux_int'
9680      (proc is interrupt routine).
9681
9682 `.code'
9683      Assemble into the standard section called `$TEXT$', subsection
9684      `$CODE$'.
9685
9686 `.copyright "STRING"'
9687      In the SOM object format, insert STRING into the object code,
9688      marked as a copyright string.
9689
9690 `.copyright "STRING"'
9691      In the ELF object format, insert STRING into the object code,
9692      marked as a version string.
9693
9694 `.enter'
9695      Not yet supported; the assembler rejects programs containing this
9696      directive.
9697
9698 `.entry'
9699      Mark the beginning of a procedure.
9700
9701 `.exit'
9702      Mark the end of a procedure.
9703
9704 `.export NAME [ ,TYP ]  [ ,PARAM=R ]'
9705      Make a procedure NAME available to callers.  TYP, if present, must
9706      be one of `absolute', `code' (ELF only, not SOM), `data', `entry',
9707      `data', `entry', `millicode', `plabel', `pri_prog', or `sec_prog'.
9708
9709      PARAM, if present, provides either relocation information for the
9710      procedure arguments and result, or a privilege level.  PARAM may be
9711      `argwN' (where N ranges from `0' to `3', and indicates one of four
9712      one-word arguments); `rtnval' (the procedure's result); or
9713      `priv_lev' (privilege level).  For arguments or the result, R
9714      specifies how to relocate, and must be one of `no' (not
9715      relocatable), `gr' (argument is in general register), `fr' (in
9716      floating point register), or `fu' (upper half of float register).
9717      For `priv_lev', R is an integer.
9718
9719 `.half N'
9720      Define a two-byte integer constant N; synonym for the portable
9721      `as' directive `.short'.
9722
9723 `.import NAME [ ,TYP ]'
9724      Converse of `.export'; make a procedure available to call.  The
9725      arguments use the same conventions as the first two arguments for
9726      `.export'.
9727
9728 `.label NAME'
9729      Define NAME as a label for the current assembly location.
9730
9731 `.leave'
9732      Not yet supported; the assembler rejects programs containing this
9733      directive.
9734
9735 `.origin LC'
9736      Advance location counter to LC. Synonym for the `as' portable
9737      directive `.org'.
9738
9739 `.param NAME [ ,TYP ]  [ ,PARAM=R ]'
9740      Similar to `.export', but used for static procedures.
9741
9742 `.proc'
9743      Use preceding the first statement of a procedure.
9744
9745 `.procend'
9746      Use following the last statement of a procedure.
9747
9748 `LABEL .reg EXPR'
9749      Synonym for `.equ'; define LABEL with the absolute expression EXPR
9750      as its value.
9751
9752 `.space SECNAME [ ,PARAMS ]'
9753      Switch to section SECNAME, creating a new section by that name if
9754      necessary.  You may only use PARAMS when creating a new section,
9755      not when switching to an existing one.  SECNAME may identify a
9756      section by number rather than by name.
9757
9758      If specified, the list PARAMS declares attributes of the section,
9759      identified by keywords.  The keywords recognized are `spnum=EXP'
9760      (identify this section by the number EXP, an absolute expression),
9761      `sort=EXP' (order sections according to this sort key when linking;
9762      EXP is an absolute expression), `unloadable' (section contains no
9763      loadable data), `notdefined' (this section defined elsewhere), and
9764      `private' (data in this section not available to other programs).
9765
9766 `.spnum SECNAM'
9767      Allocate four bytes of storage, and initialize them with the
9768      section number of the section named SECNAM.  (You can define the
9769      section number with the HPPA `.space' directive.)
9770
9771 `.string "STR"'
9772      Copy the characters in the string STR to the object file.  *Note
9773      Strings: Strings, for information on escape sequences you can use
9774      in `as' strings.
9775
9776      _Warning!_ The HPPA version of `.string' differs from the usual
9777      `as' definition: it does _not_ write a zero byte after copying STR.
9778
9779 `.stringz "STR"'
9780      Like `.string', but appends a zero byte after copying STR to object
9781      file.
9782
9783 `.subspa NAME [ ,PARAMS ]'
9784 `.nsubspa NAME [ ,PARAMS ]'
9785      Similar to `.space', but selects a subsection NAME within the
9786      current section.  You may only specify PARAMS when you create a
9787      subsection (in the first instance of `.subspa' for this NAME).
9788
9789      If specified, the list PARAMS declares attributes of the
9790      subsection, identified by keywords.  The keywords recognized are
9791      `quad=EXPR' ("quadrant" for this subsection), `align=EXPR'
9792      (alignment for beginning of this subsection; a power of two),
9793      `access=EXPR' (value for "access rights" field), `sort=EXPR'
9794      (sorting order for this subspace in link), `code_only' (subsection
9795      contains only code), `unloadable' (subsection cannot be loaded
9796      into memory), `comdat' (subsection is comdat), `common'
9797      (subsection is common block), `dup_comm' (subsection may have
9798      duplicate names), or `zero' (subsection is all zeros, do not write
9799      in object file).
9800
9801      `.nsubspa' always creates a new subspace with the given name, even
9802      if one with the same name already exists.
9803
9804      `comdat', `common' and `dup_comm' can be used to implement various
9805      flavors of one-only support when using the SOM linker.  The SOM
9806      linker only supports specific combinations of these flags.  The
9807      details are not documented.  A brief description is provided here.
9808
9809      `comdat' provides a form of linkonce support.  It is useful for
9810      both code and data subspaces.  A `comdat' subspace has a key symbol
9811      marked by the `is_comdat' flag or `ST_COMDAT'.  Only the first
9812      subspace for any given key is selected.  The key symbol becomes
9813      universal in shared links.  This is similar to the behavior of
9814      `secondary_def' symbols.
9815
9816      `common' provides Fortran named common support.  It is only useful
9817      for data subspaces.  Symbols with the flag `is_common' retain this
9818      flag in shared links.  Referencing a `is_common' symbol in a shared
9819      library from outside the library doesn't work.  Thus, `is_common'
9820      symbols must be output whenever they are needed.
9821
9822      `common' and `dup_comm' together provide Cobol common support.
9823      The subspaces in this case must all be the same length.
9824      Otherwise, this support is similar to the Fortran common support.
9825
9826      `dup_comm' by itself provides a type of one-only support for code.
9827      Only the first `dup_comm' subspace is selected.  There is a rather
9828      complex algorithm to compare subspaces.  Code symbols marked with
9829      the `dup_common' flag are hidden.  This support was intended for
9830      "C++ duplicate inlines".
9831
9832      A simplified technique is used to mark the flags of symbols based
9833      on the flags of their subspace.  A symbol with the scope
9834      SS_UNIVERSAL and type ST_ENTRY, ST_CODE or ST_DATA is marked with
9835      the corresponding settings of `comdat', `common' and `dup_comm'
9836      from the subspace, respectively.  This avoids having to introduce
9837      additional directives to mark these symbols.  The HP assembler
9838      sets `is_common' from `common'.  However, it doesn't set the
9839      `dup_common' from `dup_comm'.  It doesn't have `comdat' support.
9840
9841 `.version "STR"'
9842      Write STR as version identifier in object code.
9843
9844 \1f
9845 File: as.info,  Node: HPPA Opcodes,  Prev: HPPA Directives,  Up: HPPA-Dependent
9846
9847 9.13.6 Opcodes
9848 --------------
9849
9850 For detailed information on the HPPA machine instruction set, see
9851 `PA-RISC Architecture and Instruction Set Reference Manual' (HP
9852 09740-90039).
9853
9854 \1f
9855 File: as.info,  Node: ESA/390-Dependent,  Next: i386-Dependent,  Prev: HPPA-Dependent,  Up: Machine Dependencies
9856
9857 9.14 ESA/390 Dependent Features
9858 ===============================
9859
9860 * Menu:
9861
9862 * ESA/390 Notes::                Notes
9863 * ESA/390 Options::              Options
9864 * ESA/390 Syntax::               Syntax
9865 * ESA/390 Floating Point::       Floating Point
9866 * ESA/390 Directives::           ESA/390 Machine Directives
9867 * ESA/390 Opcodes::              Opcodes
9868
9869 \1f
9870 File: as.info,  Node: ESA/390 Notes,  Next: ESA/390 Options,  Up: ESA/390-Dependent
9871
9872 9.14.1 Notes
9873 ------------
9874
9875 The ESA/390 `as' port is currently intended to be a back-end for the
9876 GNU CC compiler.  It is not HLASM compatible, although it does support
9877 a subset of some of the HLASM directives.  The only supported binary
9878 file format is ELF; none of the usual MVS/VM/OE/USS object file
9879 formats, such as ESD or XSD, are supported.
9880
9881    When used with the GNU CC compiler, the ESA/390 `as' will produce
9882 correct, fully relocated, functional binaries, and has been used to
9883 compile and execute large projects.  However, many aspects should still
9884 be considered experimental; these include shared library support,
9885 dynamically loadable objects, and any relocation other than the 31-bit
9886 relocation.
9887
9888 \1f
9889 File: as.info,  Node: ESA/390 Options,  Next: ESA/390 Syntax,  Prev: ESA/390 Notes,  Up: ESA/390-Dependent
9890
9891 9.14.2 Options
9892 --------------
9893
9894 `as' has no machine-dependent command-line options for the ESA/390.
9895
9896 \1f
9897 File: as.info,  Node: ESA/390 Syntax,  Next: ESA/390 Floating Point,  Prev: ESA/390 Options,  Up: ESA/390-Dependent
9898
9899 9.14.3 Syntax
9900 -------------
9901
9902 The opcode/operand syntax follows the ESA/390 Principles of Operation
9903 manual; assembler directives and general syntax are loosely based on the
9904 prevailing AT&T/SVR4/ELF/Solaris style notation.  HLASM-style directives
9905 are _not_ supported for the most part, with the exception of those
9906 described herein.
9907
9908    A leading dot in front of directives is optional, and the case of
9909 directives is ignored; thus for example, .using and USING have the same
9910 effect.
9911
9912    A colon may immediately follow a label definition.  This is simply
9913 for compatibility with how most assembly language programmers write
9914 code.
9915
9916    `#' is the line comment character.
9917
9918    `;' can be used instead of a newline to separate statements.
9919
9920    Since `$' has no special meaning, you may use it in symbol names.
9921
9922    Registers can be given the symbolic names r0..r15, fp0, fp2, fp4,
9923 fp6.  By using thesse symbolic names, `as' can detect simple syntax
9924 errors. The name rarg or r.arg is a synonym for r11, rtca or r.tca for
9925 r12, sp, r.sp, dsa r.dsa for r13, lr or r.lr for r14, rbase or r.base
9926 for r3 and rpgt or r.pgt for r4.
9927
9928    `*' is the current location counter.  Unlike `.' it is always
9929 relative to the last USING directive.  Note that this means that
9930 expressions cannot use multiplication, as any occurrence of `*' will be
9931 interpreted as a location counter.
9932
9933    All labels are relative to the last USING.  Thus, branches to a label
9934 always imply the use of base+displacement.
9935
9936    Many of the usual forms of address constants / address literals are
9937 supported.  Thus,
9938         .using  *,r3
9939         L       r15,=A(some_routine)
9940         LM      r6,r7,=V(some_longlong_extern)
9941         A       r1,=F'12'
9942         AH      r0,=H'42'
9943         ME      r6,=E'3.1416'
9944         MD      r6,=D'3.14159265358979'
9945         O       r6,=XL4'cacad0d0'
9946         .ltorg
9947    should all behave as expected: that is, an entry in the literal pool
9948 will be created (or reused if it already exists), and the instruction
9949 operands will be the displacement into the literal pool using the
9950 current base register (as last declared with the `.using' directive).
9951
9952 \1f
9953 File: as.info,  Node: ESA/390 Floating Point,  Next: ESA/390 Directives,  Prev: ESA/390 Syntax,  Up: ESA/390-Dependent
9954
9955 9.14.4 Floating Point
9956 ---------------------
9957
9958 The assembler generates only IEEE floating-point numbers.  The older
9959 floating point formats are not supported.
9960
9961 \1f
9962 File: as.info,  Node: ESA/390 Directives,  Next: ESA/390 Opcodes,  Prev: ESA/390 Floating Point,  Up: ESA/390-Dependent
9963
9964 9.14.5 ESA/390 Assembler Directives
9965 -----------------------------------
9966
9967 `as' for the ESA/390 supports all of the standard ELF/SVR4 assembler
9968 directives that are documented in the main part of this documentation.
9969 Several additional directives are supported in order to implement the
9970 ESA/390 addressing model.  The most important of these are `.using' and
9971 `.ltorg'
9972
9973    These are the additional directives in `as' for the ESA/390:
9974
9975 `.dc'
9976      A small subset of the usual DC directive is supported.
9977
9978 `.drop REGNO'
9979      Stop using REGNO as the base register.  The REGNO must have been
9980      previously declared with a `.using' directive in the same section
9981      as the current section.
9982
9983 `.ebcdic STRING'
9984      Emit the EBCDIC equivalent of the indicated string.  The emitted
9985      string will be null terminated.  Note that the directives
9986      `.string' etc. emit ascii strings by default.
9987
9988 `EQU'
9989      The standard HLASM-style EQU directive is not supported; however,
9990      the standard `as' directive .equ can be used to the same effect.
9991
9992 `.ltorg'
9993      Dump the literal pool accumulated so far; begin a new literal pool.
9994      The literal pool will be written in the current section; in order
9995      to generate correct assembly, a `.using' must have been previously
9996      specified in the same section.
9997
9998 `.using EXPR,REGNO'
9999      Use REGNO as the base register for all subsequent RX, RS, and SS
10000      form instructions. The EXPR will be evaluated to obtain the base
10001      address; usually, EXPR will merely be `*'.
10002
10003      This assembler allows two `.using' directives to be simultaneously
10004      outstanding, one in the `.text' section, and one in another section
10005      (typically, the `.data' section).  This feature allows dynamically
10006      loaded objects to be implemented in a relatively straightforward
10007      way.  A `.using' directive must always be specified in the `.text'
10008      section; this will specify the base register that will be used for
10009      branches in the `.text' section.  A second `.using' may be
10010      specified in another section; this will specify the base register
10011      that is used for non-label address literals.  When a second
10012      `.using' is specified, then the subsequent `.ltorg' must be put in
10013      the same section; otherwise an error will result.
10014
10015      Thus, for example, the following code uses `r3' to address branch
10016      targets and `r4' to address the literal pool, which has been
10017      written to the `.data' section.  The is, the constants
10018      `=A(some_routine)', `=H'42'' and `=E'3.1416'' will all appear in
10019      the `.data' section.
10020
10021           .data
10022                 .using  LITPOOL,r4
10023           .text
10024                 BASR    r3,0
10025                 .using  *,r3
10026                   B       START
10027                 .long   LITPOOL
10028           START:
10029                 L       r4,4(,r3)
10030                 L       r15,=A(some_routine)
10031                 LTR     r15,r15
10032                 BNE     LABEL
10033                 AH      r0,=H'42'
10034           LABEL:
10035                 ME      r6,=E'3.1416'
10036           .data
10037           LITPOOL:
10038                 .ltorg
10039
10040      Note that this dual-`.using' directive semantics extends and is
10041      not compatible with HLASM semantics.  Note that this assembler
10042      directive does not support the full range of HLASM semantics.
10043
10044
10045 \1f
10046 File: as.info,  Node: ESA/390 Opcodes,  Prev: ESA/390 Directives,  Up: ESA/390-Dependent
10047
10048 9.14.6 Opcodes
10049 --------------
10050
10051 For detailed information on the ESA/390 machine instruction set, see
10052 `ESA/390 Principles of Operation' (IBM Publication Number DZ9AR004).
10053
10054 \1f
10055 File: as.info,  Node: i386-Dependent,  Next: i860-Dependent,  Prev: ESA/390-Dependent,  Up: Machine Dependencies
10056
10057 9.15 80386 Dependent Features
10058 =============================
10059
10060    The i386 version `as' supports both the original Intel 386
10061 architecture in both 16 and 32-bit mode as well as AMD x86-64
10062 architecture extending the Intel architecture to 64-bits.
10063
10064 * Menu:
10065
10066 * i386-Options::                Options
10067 * i386-Directives::             X86 specific directives
10068 * i386-Syntax::                 Syntactical considerations
10069 * i386-Mnemonics::              Instruction Naming
10070 * i386-Regs::                   Register Naming
10071 * i386-Prefixes::               Instruction Prefixes
10072 * i386-Memory::                 Memory References
10073 * i386-Jumps::                  Handling of Jump Instructions
10074 * i386-Float::                  Floating Point
10075 * i386-SIMD::                   Intel's MMX and AMD's 3DNow! SIMD Operations
10076 * i386-LWP::                    AMD's Lightweight Profiling Instructions
10077 * i386-BMI::                    Bit Manipulation Instruction
10078 * i386-TBM::                    AMD's Trailing Bit Manipulation Instructions
10079 * i386-16bit::                  Writing 16-bit Code
10080 * i386-Arch::                   Specifying an x86 CPU architecture
10081 * i386-Bugs::                   AT&T Syntax bugs
10082 * i386-Notes::                  Notes
10083
10084 \1f
10085 File: as.info,  Node: i386-Options,  Next: i386-Directives,  Up: i386-Dependent
10086
10087 9.15.1 Options
10088 --------------
10089
10090 The i386 version of `as' has a few machine dependent options:
10091
10092 `--32 | --x32 | --64'
10093      Select the word size, either 32 bits or 64 bits.  `--32' implies
10094      Intel i386 architecture, while `--x32' and `--64' imply AMD x86-64
10095      architecture with 32-bit or 64-bit word-size respectively.
10096
10097      These options are only available with the ELF object file format,
10098      and require that the necessary BFD support has been included (on a
10099      32-bit platform you have to add -enable-64-bit-bfd to configure
10100      enable 64-bit usage and use x86-64 as target platform).
10101
10102 `-n'
10103      By default, x86 GAS replaces multiple nop instructions used for
10104      alignment within code sections with multi-byte nop instructions
10105      such as leal 0(%esi,1),%esi.  This switch disables the
10106      optimization.
10107
10108 `--divide'
10109      On SVR4-derived platforms, the character `/' is treated as a
10110      comment character, which means that it cannot be used in
10111      expressions.  The `--divide' option turns `/' into a normal
10112      character.  This does not disable `/' at the beginning of a line
10113      starting a comment, or affect using `#' for starting a comment.
10114
10115 `-march=CPU[+EXTENSION...]'
10116      This option specifies the target processor.  The assembler will
10117      issue an error message if an attempt is made to assemble an
10118      instruction which will not execute on the target processor.  The
10119      following processor names are recognized: `i8086', `i186', `i286',
10120      `i386', `i486', `i586', `i686', `pentium', `pentiumpro',
10121      `pentiumii', `pentiumiii', `pentium4', `prescott', `nocona',
10122      `core', `core2', `corei7', `l1om', `k1om', `k6', `k6_2', `athlon',
10123      `opteron', `k8', `amdfam10', `bdver1', `bdver2', `bdver3',
10124      `btver1', `btver2', `generic32' and `generic64'.
10125
10126      In addition to the basic instruction set, the assembler can be
10127      told to accept various extension mnemonics.  For example,
10128      `-march=i686+sse4+vmx' extends I686 with SSE4 and VMX.  The
10129      following extensions are currently supported: `8087', `287', `387',
10130      `no87', `mmx', `nommx', `sse', `sse2', `sse3', `ssse3', `sse4.1',
10131      `sse4.2', `sse4', `nosse', `avx', `avx2', `adx', `rdseed',
10132      `prfchw', `noavx', `vmx', `vmfunc', `smx', `xsave', `xsaveopt',
10133      `aes', `pclmul', `fsgsbase', `rdrnd', `f16c', `bmi2', `fma',
10134      `movbe', `ept', `lzcnt', `hle', `rtm', `invpcid', `clflush', `lwp',
10135      `fma4', `xop', `syscall', `rdtscp', `3dnow', `3dnowa', `sse4a',
10136      `sse5', `svme', `abm' and `padlock'.  Note that rather than
10137      extending a basic instruction set, the extension mnemonics
10138      starting with `no' revoke the respective functionality.
10139
10140      When the `.arch' directive is used with `-march', the `.arch'
10141      directive will take precedent.
10142
10143 `-mtune=CPU'
10144      This option specifies a processor to optimize for. When used in
10145      conjunction with the `-march' option, only instructions of the
10146      processor specified by the `-march' option will be generated.
10147
10148      Valid CPU values are identical to the processor list of
10149      `-march=CPU'.
10150
10151 `-msse2avx'
10152      This option specifies that the assembler should encode SSE
10153      instructions with VEX prefix.
10154
10155 `-msse-check=NONE'
10156 `-msse-check=WARNING'
10157 `-msse-check=ERROR'
10158      These options control if the assembler should check SSE
10159      intructions.  `-msse-check=NONE' will make the assembler not to
10160      check SSE instructions,  which is the default.
10161      `-msse-check=WARNING' will make the assembler issue a warning for
10162      any SSE intruction.  `-msse-check=ERROR' will make the assembler
10163      issue an error for any SSE intruction.
10164
10165 `-mavxscalar=128'
10166 `-mavxscalar=256'
10167      These options control how the assembler should encode scalar AVX
10168      instructions.  `-mavxscalar=128' will encode scalar AVX
10169      instructions with 128bit vector length, which is the default.
10170      `-mavxscalar=256' will encode scalar AVX instructions with 256bit
10171      vector length.
10172
10173 `-mmnemonic=ATT'
10174 `-mmnemonic=INTEL'
10175      This option specifies instruction mnemonic for matching
10176      instructions.  The `.att_mnemonic' and `.intel_mnemonic'
10177      directives will take precedent.
10178
10179 `-msyntax=ATT'
10180 `-msyntax=INTEL'
10181      This option specifies instruction syntax when processing
10182      instructions.  The `.att_syntax' and `.intel_syntax' directives
10183      will take precedent.
10184
10185 `-mnaked-reg'
10186      This opetion specifies that registers don't require a `%' prefix.
10187      The `.att_syntax' and `.intel_syntax' directives will take
10188      precedent.
10189
10190
10191 \1f
10192 File: as.info,  Node: i386-Directives,  Next: i386-Syntax,  Prev: i386-Options,  Up: i386-Dependent
10193
10194 9.15.2 x86 specific Directives
10195 ------------------------------
10196
10197 `.lcomm SYMBOL , LENGTH[, ALIGNMENT]'
10198      Reserve LENGTH (an absolute expression) bytes for a local common
10199      denoted by SYMBOL.  The section and value of SYMBOL are those of
10200      the new local common.  The addresses are allocated in the bss
10201      section, so that at run-time the bytes start off zeroed.  Since
10202      SYMBOL is not declared global, it is normally not visible to `ld'.
10203      The optional third parameter, ALIGNMENT, specifies the desired
10204      alignment of the symbol in the bss section.
10205
10206      This directive is only available for COFF based x86 targets.
10207
10208
10209 \1f
10210 File: as.info,  Node: i386-Syntax,  Next: i386-Mnemonics,  Prev: i386-Directives,  Up: i386-Dependent
10211
10212 9.15.3 i386 Syntactical Considerations
10213 --------------------------------------
10214
10215 * Menu:
10216
10217 * i386-Variations::           AT&T Syntax versus Intel Syntax
10218 * i386-Chars::                Special Characters
10219
10220 \1f
10221 File: as.info,  Node: i386-Variations,  Next: i386-Chars,  Up: i386-Syntax
10222
10223 9.15.3.1 AT&T Syntax versus Intel Syntax
10224 ........................................
10225
10226 `as' now supports assembly using Intel assembler syntax.
10227 `.intel_syntax' selects Intel mode, and `.att_syntax' switches back to
10228 the usual AT&T mode for compatibility with the output of `gcc'.  Either
10229 of these directives may have an optional argument, `prefix', or
10230 `noprefix' specifying whether registers require a `%' prefix.  AT&T
10231 System V/386 assembler syntax is quite different from Intel syntax.  We
10232 mention these differences because almost all 80386 documents use Intel
10233 syntax.  Notable differences between the two syntaxes are:
10234
10235    * AT&T immediate operands are preceded by `$'; Intel immediate
10236      operands are undelimited (Intel `push 4' is AT&T `pushl $4').
10237      AT&T register operands are preceded by `%'; Intel register operands
10238      are undelimited.  AT&T absolute (as opposed to PC relative)
10239      jump/call operands are prefixed by `*'; they are undelimited in
10240      Intel syntax.
10241
10242    * AT&T and Intel syntax use the opposite order for source and
10243      destination operands.  Intel `add eax, 4' is `addl $4, %eax'.  The
10244      `source, dest' convention is maintained for compatibility with
10245      previous Unix assemblers.  Note that `bound', `invlpga', and
10246      instructions with 2 immediate operands, such as the `enter'
10247      instruction, do _not_ have reversed order.  *Note i386-Bugs::.
10248
10249    * In AT&T syntax the size of memory operands is determined from the
10250      last character of the instruction mnemonic.  Mnemonic suffixes of
10251      `b', `w', `l' and `q' specify byte (8-bit), word (16-bit), long
10252      (32-bit) and quadruple word (64-bit) memory references.  Intel
10253      syntax accomplishes this by prefixing memory operands (_not_ the
10254      instruction mnemonics) with `byte ptr', `word ptr', `dword ptr'
10255      and `qword ptr'.  Thus, Intel `mov al, byte ptr FOO' is `movb FOO,
10256      %al' in AT&T syntax.
10257
10258      In 64-bit code, `movabs' can be used to encode the `mov'
10259      instruction with the 64-bit displacement or immediate operand.
10260
10261    * Immediate form long jumps and calls are `lcall/ljmp $SECTION,
10262      $OFFSET' in AT&T syntax; the Intel syntax is `call/jmp far
10263      SECTION:OFFSET'.  Also, the far return instruction is `lret
10264      $STACK-ADJUST' in AT&T syntax; Intel syntax is `ret far
10265      STACK-ADJUST'.
10266
10267    * The AT&T assembler does not provide support for multiple section
10268      programs.  Unix style systems expect all programs to be single
10269      sections.
10270
10271 \1f
10272 File: as.info,  Node: i386-Chars,  Prev: i386-Variations,  Up: i386-Syntax
10273
10274 9.15.3.2 Special Characters
10275 ...........................
10276
10277 The presence of a `#' appearing anywhere on a line indicates the start
10278 of a comment that extends to the end of that line.
10279
10280    If a `#' appears as the first character of a line then the whole
10281 line is treated as a comment, but in this case the line can also be a
10282 logical line number directive (*note Comments::) or a preprocessor
10283 control command (*note Preprocessing::).
10284
10285    If the `--divide' command line option has not been specified then
10286 the `/' character appearing anywhere on a line also introduces a line
10287 comment.
10288
10289    The `;' character can be used to separate statements on the same
10290 line.
10291
10292 \1f
10293 File: as.info,  Node: i386-Mnemonics,  Next: i386-Regs,  Prev: i386-Syntax,  Up: i386-Dependent
10294
10295 9.15.4 Instruction Naming
10296 -------------------------
10297
10298 Instruction mnemonics are suffixed with one character modifiers which
10299 specify the size of operands.  The letters `b', `w', `l' and `q'
10300 specify byte, word, long and quadruple word operands.  If no suffix is
10301 specified by an instruction then `as' tries to fill in the missing
10302 suffix based on the destination register operand (the last one by
10303 convention).  Thus, `mov %ax, %bx' is equivalent to `movw %ax, %bx';
10304 also, `mov $1, %bx' is equivalent to `movw $1, bx'.  Note that this is
10305 incompatible with the AT&T Unix assembler which assumes that a missing
10306 mnemonic suffix implies long operand size.  (This incompatibility does
10307 not affect compiler output since compilers always explicitly specify
10308 the mnemonic suffix.)
10309
10310    Almost all instructions have the same names in AT&T and Intel format.
10311 There are a few exceptions.  The sign extend and zero extend
10312 instructions need two sizes to specify them.  They need a size to
10313 sign/zero extend _from_ and a size to zero extend _to_.  This is
10314 accomplished by using two instruction mnemonic suffixes in AT&T syntax.
10315 Base names for sign extend and zero extend are `movs...' and `movz...'
10316 in AT&T syntax (`movsx' and `movzx' in Intel syntax).  The instruction
10317 mnemonic suffixes are tacked on to this base name, the _from_ suffix
10318 before the _to_ suffix.  Thus, `movsbl %al, %edx' is AT&T syntax for
10319 "move sign extend _from_ %al _to_ %edx."  Possible suffixes, thus, are
10320 `bl' (from byte to long), `bw' (from byte to word), `wl' (from word to
10321 long), `bq' (from byte to quadruple word), `wq' (from word to quadruple
10322 word), and `lq' (from long to quadruple word).
10323
10324    Different encoding options can be specified via optional mnemonic
10325 suffix.  `.s' suffix swaps 2 register operands in encoding when moving
10326 from one register to another.  `.d8' or `.d32' suffix prefers 8bit or
10327 32bit displacement in encoding.
10328
10329    The Intel-syntax conversion instructions
10330
10331    * `cbw' -- sign-extend byte in `%al' to word in `%ax',
10332
10333    * `cwde' -- sign-extend word in `%ax' to long in `%eax',
10334
10335    * `cwd' -- sign-extend word in `%ax' to long in `%dx:%ax',
10336
10337    * `cdq' -- sign-extend dword in `%eax' to quad in `%edx:%eax',
10338
10339    * `cdqe' -- sign-extend dword in `%eax' to quad in `%rax' (x86-64
10340      only),
10341
10342    * `cqo' -- sign-extend quad in `%rax' to octuple in `%rdx:%rax'
10343      (x86-64 only),
10344
10345 are called `cbtw', `cwtl', `cwtd', `cltd', `cltq', and `cqto' in AT&T
10346 naming.  `as' accepts either naming for these instructions.
10347
10348    Far call/jump instructions are `lcall' and `ljmp' in AT&T syntax,
10349 but are `call far' and `jump far' in Intel convention.
10350
10351 9.15.5 AT&T Mnemonic versus Intel Mnemonic
10352 ------------------------------------------
10353
10354 `as' supports assembly using Intel mnemonic.  `.intel_mnemonic' selects
10355 Intel mnemonic with Intel syntax, and `.att_mnemonic' switches back to
10356 the usual AT&T mnemonic with AT&T syntax for compatibility with the
10357 output of `gcc'.  Several x87 instructions, `fadd', `fdiv', `fdivp',
10358 `fdivr', `fdivrp', `fmul', `fsub', `fsubp', `fsubr' and `fsubrp',  are
10359 implemented in AT&T System V/386 assembler with different mnemonics
10360 from those in Intel IA32 specification.  `gcc' generates those
10361 instructions with AT&T mnemonic.
10362
10363 \1f
10364 File: as.info,  Node: i386-Regs,  Next: i386-Prefixes,  Prev: i386-Mnemonics,  Up: i386-Dependent
10365
10366 9.15.6 Register Naming
10367 ----------------------
10368
10369 Register operands are always prefixed with `%'.  The 80386 registers
10370 consist of
10371
10372    * the 8 32-bit registers `%eax' (the accumulator), `%ebx', `%ecx',
10373      `%edx', `%edi', `%esi', `%ebp' (the frame pointer), and `%esp'
10374      (the stack pointer).
10375
10376    * the 8 16-bit low-ends of these: `%ax', `%bx', `%cx', `%dx', `%di',
10377      `%si', `%bp', and `%sp'.
10378
10379    * the 8 8-bit registers: `%ah', `%al', `%bh', `%bl', `%ch', `%cl',
10380      `%dh', and `%dl' (These are the high-bytes and low-bytes of `%ax',
10381      `%bx', `%cx', and `%dx')
10382
10383    * the 6 section registers `%cs' (code section), `%ds' (data
10384      section), `%ss' (stack section), `%es', `%fs', and `%gs'.
10385
10386    * the 3 processor control registers `%cr0', `%cr2', and `%cr3'.
10387
10388    * the 6 debug registers `%db0', `%db1', `%db2', `%db3', `%db6', and
10389      `%db7'.
10390
10391    * the 2 test registers `%tr6' and `%tr7'.
10392
10393    * the 8 floating point register stack `%st' or equivalently
10394      `%st(0)', `%st(1)', `%st(2)', `%st(3)', `%st(4)', `%st(5)',
10395      `%st(6)', and `%st(7)'.  These registers are overloaded by 8 MMX
10396      registers `%mm0', `%mm1', `%mm2', `%mm3', `%mm4', `%mm5', `%mm6'
10397      and `%mm7'.
10398
10399    * the 8 SSE registers registers `%xmm0', `%xmm1', `%xmm2', `%xmm3',
10400      `%xmm4', `%xmm5', `%xmm6' and `%xmm7'.
10401
10402    The AMD x86-64 architecture extends the register set by:
10403
10404    * enhancing the 8 32-bit registers to 64-bit: `%rax' (the
10405      accumulator), `%rbx', `%rcx', `%rdx', `%rdi', `%rsi', `%rbp' (the
10406      frame pointer), `%rsp' (the stack pointer)
10407
10408    * the 8 extended registers `%r8'-`%r15'.
10409
10410    * the 8 32-bit low ends of the extended registers: `%r8d'-`%r15d'
10411
10412    * the 8 16-bit low ends of the extended registers: `%r8w'-`%r15w'
10413
10414    * the 8 8-bit low ends of the extended registers: `%r8b'-`%r15b'
10415
10416    * the 4 8-bit registers: `%sil', `%dil', `%bpl', `%spl'.
10417
10418    * the 8 debug registers: `%db8'-`%db15'.
10419
10420    * the 8 SSE registers: `%xmm8'-`%xmm15'.
10421
10422 \1f
10423 File: as.info,  Node: i386-Prefixes,  Next: i386-Memory,  Prev: i386-Regs,  Up: i386-Dependent
10424
10425 9.15.7 Instruction Prefixes
10426 ---------------------------
10427
10428 Instruction prefixes are used to modify the following instruction.  They
10429 are used to repeat string instructions, to provide section overrides, to
10430 perform bus lock operations, and to change operand and address sizes.
10431 (Most instructions that normally operate on 32-bit operands will use
10432 16-bit operands if the instruction has an "operand size" prefix.)
10433 Instruction prefixes are best written on the same line as the
10434 instruction they act upon. For example, the `scas' (scan string)
10435 instruction is repeated with:
10436
10437              repne scas %es:(%edi),%al
10438
10439    You may also place prefixes on the lines immediately preceding the
10440 instruction, but this circumvents checks that `as' does with prefixes,
10441 and will not work with all prefixes.
10442
10443    Here is a list of instruction prefixes:
10444
10445    * Section override prefixes `cs', `ds', `ss', `es', `fs', `gs'.
10446      These are automatically added by specifying using the
10447      SECTION:MEMORY-OPERAND form for memory references.
10448
10449    * Operand/Address size prefixes `data16' and `addr16' change 32-bit
10450      operands/addresses into 16-bit operands/addresses, while `data32'
10451      and `addr32' change 16-bit ones (in a `.code16' section) into
10452      32-bit operands/addresses.  These prefixes _must_ appear on the
10453      same line of code as the instruction they modify. For example, in
10454      a 16-bit `.code16' section, you might write:
10455
10456                   addr32 jmpl *(%ebx)
10457
10458    * The bus lock prefix `lock' inhibits interrupts during execution of
10459      the instruction it precedes.  (This is only valid with certain
10460      instructions; see a 80386 manual for details).
10461
10462    * The wait for coprocessor prefix `wait' waits for the coprocessor to
10463      complete the current instruction.  This should never be needed for
10464      the 80386/80387 combination.
10465
10466    * The `rep', `repe', and `repne' prefixes are added to string
10467      instructions to make them repeat `%ecx' times (`%cx' times if the
10468      current address size is 16-bits).  
10469
10470    * The `rex' family of prefixes is used by x86-64 to encode
10471      extensions to i386 instruction set.  The `rex' prefix has four
10472      bits -- an operand size overwrite (`64') used to change operand
10473      size from 32-bit to 64-bit and X, Y and Z extensions bits used to
10474      extend the register set.
10475
10476      You may write the `rex' prefixes directly. The `rex64xyz'
10477      instruction emits `rex' prefix with all the bits set.  By omitting
10478      the `64', `x', `y' or `z' you may write other prefixes as well.
10479      Normally, there is no need to write the prefixes explicitly, since
10480      gas will automatically generate them based on the instruction
10481      operands.
10482
10483 \1f
10484 File: as.info,  Node: i386-Memory,  Next: i386-Jumps,  Prev: i386-Prefixes,  Up: i386-Dependent
10485
10486 9.15.8 Memory References
10487 ------------------------
10488
10489 An Intel syntax indirect memory reference of the form
10490
10491      SECTION:[BASE + INDEX*SCALE + DISP]
10492
10493 is translated into the AT&T syntax
10494
10495      SECTION:DISP(BASE, INDEX, SCALE)
10496
10497 where BASE and INDEX are the optional 32-bit base and index registers,
10498 DISP is the optional displacement, and SCALE, taking the values 1, 2,
10499 4, and 8, multiplies INDEX to calculate the address of the operand.  If
10500 no SCALE is specified, SCALE is taken to be 1.  SECTION specifies the
10501 optional section register for the memory operand, and may override the
10502 default section register (see a 80386 manual for section register
10503 defaults). Note that section overrides in AT&T syntax _must_ be
10504 preceded by a `%'.  If you specify a section override which coincides
10505 with the default section register, `as' does _not_ output any section
10506 register override prefixes to assemble the given instruction.  Thus,
10507 section overrides can be specified to emphasize which section register
10508 is used for a given memory operand.
10509
10510    Here are some examples of Intel and AT&T style memory references:
10511
10512 AT&T: `-4(%ebp)', Intel:  `[ebp - 4]'
10513      BASE is `%ebp'; DISP is `-4'. SECTION is missing, and the default
10514      section is used (`%ss' for addressing with `%ebp' as the base
10515      register).  INDEX, SCALE are both missing.
10516
10517 AT&T: `foo(,%eax,4)', Intel: `[foo + eax*4]'
10518      INDEX is `%eax' (scaled by a SCALE 4); DISP is `foo'.  All other
10519      fields are missing.  The section register here defaults to `%ds'.
10520
10521 AT&T: `foo(,1)'; Intel `[foo]'
10522      This uses the value pointed to by `foo' as a memory operand.  Note
10523      that BASE and INDEX are both missing, but there is only _one_ `,'.
10524      This is a syntactic exception.
10525
10526 AT&T: `%gs:foo'; Intel `gs:foo'
10527      This selects the contents of the variable `foo' with section
10528      register SECTION being `%gs'.
10529
10530    Absolute (as opposed to PC relative) call and jump operands must be
10531 prefixed with `*'.  If no `*' is specified, `as' always chooses PC
10532 relative addressing for jump/call labels.
10533
10534    Any instruction that has a memory operand, but no register operand,
10535 _must_ specify its size (byte, word, long, or quadruple) with an
10536 instruction mnemonic suffix (`b', `w', `l' or `q', respectively).
10537
10538    The x86-64 architecture adds an RIP (instruction pointer relative)
10539 addressing.  This addressing mode is specified by using `rip' as a base
10540 register.  Only constant offsets are valid. For example:
10541
10542 AT&T: `1234(%rip)', Intel: `[rip + 1234]'
10543      Points to the address 1234 bytes past the end of the current
10544      instruction.
10545
10546 AT&T: `symbol(%rip)', Intel: `[rip + symbol]'
10547      Points to the `symbol' in RIP relative way, this is shorter than
10548      the default absolute addressing.
10549
10550    Other addressing modes remain unchanged in x86-64 architecture,
10551 except registers used are 64-bit instead of 32-bit.
10552
10553 \1f
10554 File: as.info,  Node: i386-Jumps,  Next: i386-Float,  Prev: i386-Memory,  Up: i386-Dependent
10555
10556 9.15.9 Handling of Jump Instructions
10557 ------------------------------------
10558
10559 Jump instructions are always optimized to use the smallest possible
10560 displacements.  This is accomplished by using byte (8-bit) displacement
10561 jumps whenever the target is sufficiently close.  If a byte displacement
10562 is insufficient a long displacement is used.  We do not support word
10563 (16-bit) displacement jumps in 32-bit mode (i.e. prefixing the jump
10564 instruction with the `data16' instruction prefix), since the 80386
10565 insists upon masking `%eip' to 16 bits after the word displacement is
10566 added. (See also *note i386-Arch::)
10567
10568    Note that the `jcxz', `jecxz', `loop', `loopz', `loope', `loopnz'
10569 and `loopne' instructions only come in byte displacements, so that if
10570 you use these instructions (`gcc' does not use them) you may get an
10571 error message (and incorrect code).  The AT&T 80386 assembler tries to
10572 get around this problem by expanding `jcxz foo' to
10573
10574               jcxz cx_zero
10575               jmp cx_nonzero
10576      cx_zero: jmp foo
10577      cx_nonzero:
10578
10579 \1f
10580 File: as.info,  Node: i386-Float,  Next: i386-SIMD,  Prev: i386-Jumps,  Up: i386-Dependent
10581
10582 9.15.10 Floating Point
10583 ----------------------
10584
10585 All 80387 floating point types except packed BCD are supported.  (BCD
10586 support may be added without much difficulty).  These data types are
10587 16-, 32-, and 64- bit integers, and single (32-bit), double (64-bit),
10588 and extended (80-bit) precision floating point.  Each supported type
10589 has an instruction mnemonic suffix and a constructor associated with
10590 it.  Instruction mnemonic suffixes specify the operand's data type.
10591 Constructors build these data types into memory.
10592
10593    * Floating point constructors are `.float' or `.single', `.double',
10594      and `.tfloat' for 32-, 64-, and 80-bit formats.  These correspond
10595      to instruction mnemonic suffixes `s', `l', and `t'. `t' stands for
10596      80-bit (ten byte) real.  The 80387 only supports this format via
10597      the `fldt' (load 80-bit real to stack top) and `fstpt' (store
10598      80-bit real and pop stack) instructions.
10599
10600    * Integer constructors are `.word', `.long' or `.int', and `.quad'
10601      for the 16-, 32-, and 64-bit integer formats.  The corresponding
10602      instruction mnemonic suffixes are `s' (single), `l' (long), and
10603      `q' (quad).  As with the 80-bit real format, the 64-bit `q' format
10604      is only present in the `fildq' (load quad integer to stack top)
10605      and `fistpq' (store quad integer and pop stack) instructions.
10606
10607    Register to register operations should not use instruction mnemonic
10608 suffixes.  `fstl %st, %st(1)' will give a warning, and be assembled as
10609 if you wrote `fst %st, %st(1)', since all register to register
10610 operations use 80-bit floating point operands. (Contrast this with
10611 `fstl %st, mem', which converts `%st' from 80-bit to 64-bit floating
10612 point format, then stores the result in the 4 byte location `mem')
10613
10614 \1f
10615 File: as.info,  Node: i386-SIMD,  Next: i386-LWP,  Prev: i386-Float,  Up: i386-Dependent
10616
10617 9.15.11 Intel's MMX and AMD's 3DNow! SIMD Operations
10618 ----------------------------------------------------
10619
10620 `as' supports Intel's MMX instruction set (SIMD instructions for
10621 integer data), available on Intel's Pentium MMX processors and Pentium
10622 II processors, AMD's K6 and K6-2 processors, Cyrix' M2 processor, and
10623 probably others.  It also supports AMD's 3DNow!  instruction set (SIMD
10624 instructions for 32-bit floating point data) available on AMD's K6-2
10625 processor and possibly others in the future.
10626
10627    Currently, `as' does not support Intel's floating point SIMD, Katmai
10628 (KNI).
10629
10630    The eight 64-bit MMX operands, also used by 3DNow!, are called
10631 `%mm0', `%mm1', ... `%mm7'.  They contain eight 8-bit integers, four
10632 16-bit integers, two 32-bit integers, one 64-bit integer, or two 32-bit
10633 floating point values.  The MMX registers cannot be used at the same
10634 time as the floating point stack.
10635
10636    See Intel and AMD documentation, keeping in mind that the operand
10637 order in instructions is reversed from the Intel syntax.
10638
10639 \1f
10640 File: as.info,  Node: i386-LWP,  Next: i386-BMI,  Prev: i386-SIMD,  Up: i386-Dependent
10641
10642 9.15.12 AMD's Lightweight Profiling Instructions
10643 ------------------------------------------------
10644
10645 `as' supports AMD's Lightweight Profiling (LWP) instruction set,
10646 available on AMD's Family 15h (Orochi) processors.
10647
10648    LWP enables applications to collect and manage performance data, and
10649 react to performance events.  The collection of performance data
10650 requires no context switches.  LWP runs in the context of a thread and
10651 so several counters can be used independently across multiple threads.
10652 LWP can be used in both 64-bit and legacy 32-bit modes.
10653
10654    For detailed information on the LWP instruction set, see the `AMD
10655 Lightweight Profiling Specification' available at Lightweight Profiling
10656 Specification (http://developer.amd.com/cpu/LWP).
10657
10658 \1f
10659 File: as.info,  Node: i386-BMI,  Next: i386-TBM,  Prev: i386-LWP,  Up: i386-Dependent
10660
10661 9.15.13 Bit Manipulation Instructions
10662 -------------------------------------
10663
10664 `as' supports the Bit Manipulation (BMI) instruction set.
10665
10666    BMI instructions provide several instructions implementing individual
10667 bit manipulation operations such as isolation, masking, setting, or
10668 resetting.
10669
10670 \1f
10671 File: as.info,  Node: i386-TBM,  Next: i386-16bit,  Prev: i386-BMI,  Up: i386-Dependent
10672
10673 9.15.14 AMD's Trailing Bit Manipulation Instructions
10674 ----------------------------------------------------
10675
10676 `as' supports AMD's Trailing Bit Manipulation (TBM) instruction set,
10677 available on AMD's BDVER2 processors (Trinity and Viperfish).
10678
10679    TBM instructions provide instructions implementing individual bit
10680 manipulation operations such as isolating, masking, setting, resetting,
10681 complementing, and operations on trailing zeros and ones.
10682
10683 \1f
10684 File: as.info,  Node: i386-16bit,  Next: i386-Arch,  Prev: i386-TBM,  Up: i386-Dependent
10685
10686 9.15.15 Writing 16-bit Code
10687 ---------------------------
10688
10689 While `as' normally writes only "pure" 32-bit i386 code or 64-bit
10690 x86-64 code depending on the default configuration, it also supports
10691 writing code to run in real mode or in 16-bit protected mode code
10692 segments.  To do this, put a `.code16' or `.code16gcc' directive before
10693 the assembly language instructions to be run in 16-bit mode.  You can
10694 switch `as' to writing 32-bit code with the `.code32' directive or
10695 64-bit code with the `.code64' directive.
10696
10697    `.code16gcc' provides experimental support for generating 16-bit
10698 code from gcc, and differs from `.code16' in that `call', `ret',
10699 `enter', `leave', `push', `pop', `pusha', `popa', `pushf', and `popf'
10700 instructions default to 32-bit size.  This is so that the stack pointer
10701 is manipulated in the same way over function calls, allowing access to
10702 function parameters at the same stack offsets as in 32-bit mode.
10703 `.code16gcc' also automatically adds address size prefixes where
10704 necessary to use the 32-bit addressing modes that gcc generates.
10705
10706    The code which `as' generates in 16-bit mode will not necessarily
10707 run on a 16-bit pre-80386 processor.  To write code that runs on such a
10708 processor, you must refrain from using _any_ 32-bit constructs which
10709 require `as' to output address or operand size prefixes.
10710
10711    Note that writing 16-bit code instructions by explicitly specifying a
10712 prefix or an instruction mnemonic suffix within a 32-bit code section
10713 generates different machine instructions than those generated for a
10714 16-bit code segment.  In a 32-bit code section, the following code
10715 generates the machine opcode bytes `66 6a 04', which pushes the value
10716 `4' onto the stack, decrementing `%esp' by 2.
10717
10718              pushw $4
10719
10720    The same code in a 16-bit code section would generate the machine
10721 opcode bytes `6a 04' (i.e., without the operand size prefix), which is
10722 correct since the processor default operand size is assumed to be 16
10723 bits in a 16-bit code section.
10724
10725 \1f
10726 File: as.info,  Node: i386-Bugs,  Next: i386-Notes,  Prev: i386-Arch,  Up: i386-Dependent
10727
10728 9.15.16 AT&T Syntax bugs
10729 ------------------------
10730
10731 The UnixWare assembler, and probably other AT&T derived ix86 Unix
10732 assemblers, generate floating point instructions with reversed source
10733 and destination registers in certain cases.  Unfortunately, gcc and
10734 possibly many other programs use this reversed syntax, so we're stuck
10735 with it.
10736
10737    For example
10738
10739              fsub %st,%st(3)
10740    results in `%st(3)' being updated to `%st - %st(3)' rather than the
10741 expected `%st(3) - %st'.  This happens with all the non-commutative
10742 arithmetic floating point operations with two register operands where
10743 the source register is `%st' and the destination register is `%st(i)'.
10744
10745 \1f
10746 File: as.info,  Node: i386-Arch,  Next: i386-Bugs,  Prev: i386-16bit,  Up: i386-Dependent
10747
10748 9.15.17 Specifying CPU Architecture
10749 -----------------------------------
10750
10751 `as' may be told to assemble for a particular CPU (sub-)architecture
10752 with the `.arch CPU_TYPE' directive.  This directive enables a warning
10753 when gas detects an instruction that is not supported on the CPU
10754 specified.  The choices for CPU_TYPE are:
10755
10756 `i8086'        `i186'         `i286'         `i386'
10757 `i486'         `i586'         `i686'         `pentium'
10758 `pentiumpro'   `pentiumii'    `pentiumiii'   `pentium4'
10759 `prescott'     `nocona'       `core'         `core2'
10760 `corei7'       `l1om'         `k1om'         
10761 `k6'           `k6_2'         `athlon'       `k8'
10762 `amdfam10'     `bdver1'       `bdver2'       `bdver3'
10763 `btver1'       `btver2'                      
10764 `generic32'    `generic64'                   
10765 `.mmx'         `.sse'         `.sse2'        `.sse3'
10766 `.ssse3'       `.sse4.1'      `.sse4.2'      `.sse4'
10767 `.avx'         `.vmx'         `.smx'         `.ept'
10768 `.clflush'     `.movbe'       `.xsave'       `.xsaveopt'
10769 `.aes'         `.pclmul'      `.fma'         `.fsgsbase'
10770 `.rdrnd'       `.f16c'        `.avx2'        `.bmi2'
10771 `.lzcnt'       `.invpcid'     `.vmfunc'      `.hle'
10772 `.rtm'         `.adx'         `.rdseed'      `.prfchw'
10773 `.3dnow'       `.3dnowa'      `.sse4a'       `.sse5'
10774 `.syscall'     `.rdtscp'      `.svme'        `.abm'
10775 `.lwp'         `.fma4'        `.xop'         
10776 `.padlock'                                   
10777
10778    Apart from the warning, there are only two other effects on `as'
10779 operation;  Firstly, if you specify a CPU other than `i486', then shift
10780 by one instructions such as `sarl $1, %eax' will automatically use a
10781 two byte opcode sequence.  The larger three byte opcode sequence is
10782 used on the 486 (and when no architecture is specified) because it
10783 executes faster on the 486.  Note that you can explicitly request the
10784 two byte opcode by writing `sarl %eax'.  Secondly, if you specify
10785 `i8086', `i186', or `i286', _and_ `.code16' or `.code16gcc' then byte
10786 offset conditional jumps will be promoted when necessary to a two
10787 instruction sequence consisting of a conditional jump of the opposite
10788 sense around an unconditional jump to the target.
10789
10790    Following the CPU architecture (but not a sub-architecture, which
10791 are those starting with a dot), you may specify `jumps' or `nojumps' to
10792 control automatic promotion of conditional jumps. `jumps' is the
10793 default, and enables jump promotion;  All external jumps will be of the
10794 long variety, and file-local jumps will be promoted as necessary.
10795 (*note i386-Jumps::)  `nojumps' leaves external conditional jumps as
10796 byte offset jumps, and warns about file-local conditional jumps that
10797 `as' promotes.  Unconditional jumps are treated as for `jumps'.
10798
10799    For example
10800
10801       .arch i8086,nojumps
10802
10803 \1f
10804 File: as.info,  Node: i386-Notes,  Prev: i386-Bugs,  Up: i386-Dependent
10805
10806 9.15.18 Notes
10807 -------------
10808
10809 There is some trickery concerning the `mul' and `imul' instructions
10810 that deserves mention.  The 16-, 32-, 64- and 128-bit expanding
10811 multiplies (base opcode `0xf6'; extension 4 for `mul' and 5 for `imul')
10812 can be output only in the one operand form.  Thus, `imul %ebx, %eax'
10813 does _not_ select the expanding multiply; the expanding multiply would
10814 clobber the `%edx' register, and this would confuse `gcc' output.  Use
10815 `imul %ebx' to get the 64-bit product in `%edx:%eax'.
10816
10817    We have added a two operand form of `imul' when the first operand is
10818 an immediate mode expression and the second operand is a register.
10819 This is just a shorthand, so that, multiplying `%eax' by 69, for
10820 example, can be done with `imul $69, %eax' rather than `imul $69, %eax,
10821 %eax'.
10822
10823 \1f
10824 File: as.info,  Node: i860-Dependent,  Next: i960-Dependent,  Prev: i386-Dependent,  Up: Machine Dependencies
10825
10826 9.16 Intel i860 Dependent Features
10827 ==================================
10828
10829 * Menu:
10830
10831 * Notes-i860::                  i860 Notes
10832 * Options-i860::                i860 Command-line Options
10833 * Directives-i860::             i860 Machine Directives
10834 * Opcodes for i860::            i860 Opcodes
10835 * Syntax of i860::              i860 Syntax
10836
10837 \1f
10838 File: as.info,  Node: Notes-i860,  Next: Options-i860,  Up: i860-Dependent
10839
10840 9.16.1 i860 Notes
10841 -----------------
10842
10843 This is a fairly complete i860 assembler which is compatible with the
10844 UNIX System V/860 Release 4 assembler. However, it does not currently
10845 support SVR4 PIC (i.e., `@GOT, @GOTOFF, @PLT').
10846
10847    Like the SVR4/860 assembler, the output object format is ELF32.
10848 Currently, this is the only supported object format. If there is
10849 sufficient interest, other formats such as COFF may be implemented.
10850
10851    Both the Intel and AT&T/SVR4 syntaxes are supported, with the latter
10852 being the default.  One difference is that AT&T syntax requires the '%'
10853 prefix on register names while Intel syntax does not.  Another
10854 difference is in the specification of relocatable expressions.  The
10855 Intel syntax is `ha%expression' whereas the SVR4 syntax is
10856 `[expression]@ha' (and similarly for the "l" and "h" selectors).
10857
10858 \1f
10859 File: as.info,  Node: Options-i860,  Next: Directives-i860,  Prev: Notes-i860,  Up: i860-Dependent
10860
10861 9.16.2 i860 Command-line Options
10862 --------------------------------
10863
10864 9.16.2.1 SVR4 compatibility options
10865 ...................................
10866
10867 `-V'
10868      Print assembler version.
10869
10870 `-Qy'
10871      Ignored.
10872
10873 `-Qn'
10874      Ignored.
10875
10876 9.16.2.2 Other options
10877 ......................
10878
10879 `-EL'
10880      Select little endian output (this is the default).
10881
10882 `-EB'
10883      Select big endian output. Note that the i860 always reads
10884      instructions as little endian data, so this option only effects
10885      data and not instructions.
10886
10887 `-mwarn-expand'
10888      Emit a warning message if any pseudo-instruction expansions
10889      occurred.  For example, a `or' instruction with an immediate
10890      larger than 16-bits will be expanded into two instructions. This
10891      is a very undesirable feature to rely on, so this flag can help
10892      detect any code where it happens. One use of it, for instance, has
10893      been to find and eliminate any place where `gcc' may emit these
10894      pseudo-instructions.
10895
10896 `-mxp'
10897      Enable support for the i860XP instructions and control registers.
10898      By default, this option is disabled so that only the base
10899      instruction set (i.e., i860XR) is supported.
10900
10901 `-mintel-syntax'
10902      The i860 assembler defaults to AT&T/SVR4 syntax.  This option
10903      enables the Intel syntax.
10904
10905 \1f
10906 File: as.info,  Node: Directives-i860,  Next: Opcodes for i860,  Prev: Options-i860,  Up: i860-Dependent
10907
10908 9.16.3 i860 Machine Directives
10909 ------------------------------
10910
10911 `.dual'
10912      Enter dual instruction mode. While this directive is supported, the
10913      preferred way to use dual instruction mode is to explicitly code
10914      the dual bit with the `d.' prefix.
10915
10916 `.enddual'
10917      Exit dual instruction mode. While this directive is supported, the
10918      preferred way to use dual instruction mode is to explicitly code
10919      the dual bit with the `d.' prefix.
10920
10921 `.atmp'
10922      Change the temporary register used when expanding pseudo
10923      operations. The default register is `r31'.
10924
10925    The `.dual', `.enddual', and `.atmp' directives are available only
10926 in the Intel syntax mode.
10927
10928    Both syntaxes allow for the standard `.align' directive.  However,
10929 the Intel syntax additionally allows keywords for the alignment
10930 parameter: "`.align type'", where `type' is one of `.short', `.long',
10931 `.quad', `.single', `.double' representing alignments of 2, 4, 16, 4,
10932 and 8, respectively.
10933
10934 \1f
10935 File: as.info,  Node: Opcodes for i860,  Next: Syntax of i860,  Prev: Directives-i860,  Up: i860-Dependent
10936
10937 9.16.4 i860 Opcodes
10938 -------------------
10939
10940 All of the Intel i860XR and i860XP machine instructions are supported.
10941 Please see either _i860 Microprocessor Programmer's Reference Manual_
10942 or _i860 Microprocessor Architecture_ for more information.
10943
10944 9.16.4.1 Other instruction support (pseudo-instructions)
10945 ........................................................
10946
10947 For compatibility with some other i860 assemblers, a number of
10948 pseudo-instructions are supported. While these are supported, they are
10949 a very undesirable feature that should be avoided - in particular, when
10950 they result in an expansion to multiple actual i860 instructions. Below
10951 are the pseudo-instructions that result in expansions.
10952    * Load large immediate into general register:
10953
10954      The pseudo-instruction `mov imm,%rn' (where the immediate does not
10955      fit within a signed 16-bit field) will be expanded into:
10956           orh large_imm@h,%r0,%rn
10957           or large_imm@l,%rn,%rn
10958
10959    * Load/store with relocatable address expression:
10960
10961      For example, the pseudo-instruction `ld.b addr_exp(%rx),%rn' will
10962      be expanded into:
10963           orh addr_exp@ha,%rx,%r31
10964           ld.l addr_exp@l(%r31),%rn
10965
10966      The analogous expansions apply to `ld.x, st.x, fld.x, pfld.x,
10967      fst.x', and `pst.x' as well.
10968
10969    * Signed large immediate with add/subtract:
10970
10971      If any of the arithmetic operations `adds, addu, subs, subu' are
10972      used with an immediate larger than 16-bits (signed), then they
10973      will be expanded.  For instance, the pseudo-instruction `adds
10974      large_imm,%rx,%rn' expands to:
10975           orh large_imm@h,%r0,%r31
10976           or large_imm@l,%r31,%r31
10977           adds %r31,%rx,%rn
10978
10979    * Unsigned large immediate with logical operations:
10980
10981      Logical operations (`or, andnot, or, xor') also result in
10982      expansions.  The pseudo-instruction `or large_imm,%rx,%rn' results
10983      in:
10984           orh large_imm@h,%rx,%r31
10985           or large_imm@l,%r31,%rn
10986
10987      Similarly for the others, except for `and' which expands to:
10988           andnot (-1 - large_imm)@h,%rx,%r31
10989           andnot (-1 - large_imm)@l,%r31,%rn
10990
10991 \1f
10992 File: as.info,  Node: Syntax of i860,  Prev: Opcodes for i860,  Up: i860-Dependent
10993
10994 9.16.5 i860 Syntax
10995 ------------------
10996
10997 * Menu:
10998
10999 * i860-Chars::                Special Characters
11000
11001 \1f
11002 File: as.info,  Node: i860-Chars,  Up: Syntax of i860
11003
11004 9.16.5.1 Special Characters
11005 ...........................
11006
11007 The presence of a `#' appearing anywhere on a line indicates the start
11008 of a comment that extends to the end of that line.
11009
11010    If a `#' appears as the first character of a line then the whole
11011 line is treated as a comment, but in this case the line can also be a
11012 logical line number directive (*note Comments::) or a preprocessor
11013 control command (*note Preprocessing::).
11014
11015    The `;' character can be used to separate statements on the same
11016 line.
11017
11018 \1f
11019 File: as.info,  Node: i960-Dependent,  Next: IA-64-Dependent,  Prev: i860-Dependent,  Up: Machine Dependencies
11020
11021 9.17 Intel 80960 Dependent Features
11022 ===================================
11023
11024 * Menu:
11025
11026 * Options-i960::                i960 Command-line Options
11027 * Floating Point-i960::         Floating Point
11028 * Directives-i960::             i960 Machine Directives
11029 * Opcodes for i960::            i960 Opcodes
11030 * Syntax of i960::              i960 Syntax
11031
11032 \1f
11033 File: as.info,  Node: Options-i960,  Next: Floating Point-i960,  Up: i960-Dependent
11034
11035 9.17.1 i960 Command-line Options
11036 --------------------------------
11037
11038 `-ACA | -ACA_A | -ACB | -ACC | -AKA | -AKB | -AKC | -AMC'
11039      Select the 80960 architecture.  Instructions or features not
11040      supported by the selected architecture cause fatal errors.
11041
11042      `-ACA' is equivalent to `-ACA_A'; `-AKC' is equivalent to `-AMC'.
11043      Synonyms are provided for compatibility with other tools.
11044
11045      If you do not specify any of these options, `as' generates code
11046      for any instruction or feature that is supported by _some_ version
11047      of the 960 (even if this means mixing architectures!).  In
11048      principle, `as' attempts to deduce the minimal sufficient
11049      processor type if none is specified; depending on the object code
11050      format, the processor type may be recorded in the object file.  If
11051      it is critical that the `as' output match a specific architecture,
11052      specify that architecture explicitly.
11053
11054 `-b'
11055      Add code to collect information about conditional branches taken,
11056      for later optimization using branch prediction bits.  (The
11057      conditional branch instructions have branch prediction bits in the
11058      CA, CB, and CC architectures.)  If BR represents a conditional
11059      branch instruction, the following represents the code generated by
11060      the assembler when `-b' is specified:
11061
11062                   call    INCREMENT ROUTINE
11063                   .word   0       # pre-counter
11064           Label:  BR
11065                   call    INCREMENT ROUTINE
11066                   .word   0       # post-counter
11067
11068      The counter following a branch records the number of times that
11069      branch was _not_ taken; the difference between the two counters is
11070      the number of times the branch _was_ taken.
11071
11072      A table of every such `Label' is also generated, so that the
11073      external postprocessor `gbr960' (supplied by Intel) can locate all
11074      the counters.  This table is always labeled `__BRANCH_TABLE__';
11075      this is a local symbol to permit collecting statistics for many
11076      separate object files.  The table is word aligned, and begins with
11077      a two-word header.  The first word, initialized to 0, is used in
11078      maintaining linked lists of branch tables.  The second word is a
11079      count of the number of entries in the table, which follow
11080      immediately: each is a word, pointing to one of the labels
11081      illustrated above.
11082
11083            +------------+------------+------------+ ... +------------+
11084            |            |            |            |     |            |
11085            |  *NEXT     |  COUNT: N  | *BRLAB 1   |     | *BRLAB N   |
11086            |            |            |            |     |            |
11087            +------------+------------+------------+ ... +------------+
11088
11089                          __BRANCH_TABLE__ layout
11090
11091      The first word of the header is used to locate multiple branch
11092      tables, since each object file may contain one. Normally the links
11093      are maintained with a call to an initialization routine, placed at
11094      the beginning of each function in the file.  The GNU C compiler
11095      generates these calls automatically when you give it a `-b' option.
11096      For further details, see the documentation of `gbr960'.
11097
11098 `-no-relax'
11099      Normally, Compare-and-Branch instructions with targets that require
11100      displacements greater than 13 bits (or that have external targets)
11101      are replaced with the corresponding compare (or `chkbit') and
11102      branch instructions.  You can use the `-no-relax' option to
11103      specify that `as' should generate errors instead, if the target
11104      displacement is larger than 13 bits.
11105
11106      This option does not affect the Compare-and-Jump instructions; the
11107      code emitted for them is _always_ adjusted when necessary
11108      (depending on displacement size), regardless of whether you use
11109      `-no-relax'.
11110
11111 \1f
11112 File: as.info,  Node: Floating Point-i960,  Next: Directives-i960,  Prev: Options-i960,  Up: i960-Dependent
11113
11114 9.17.2 Floating Point
11115 ---------------------
11116
11117 `as' generates IEEE floating-point numbers for the directives `.float',
11118 `.double', `.extended', and `.single'.
11119
11120 \1f
11121 File: as.info,  Node: Directives-i960,  Next: Opcodes for i960,  Prev: Floating Point-i960,  Up: i960-Dependent
11122
11123 9.17.3 i960 Machine Directives
11124 ------------------------------
11125
11126 `.bss SYMBOL, LENGTH, ALIGN'
11127      Reserve LENGTH bytes in the bss section for a local SYMBOL,
11128      aligned to the power of two specified by ALIGN.  LENGTH and ALIGN
11129      must be positive absolute expressions.  This directive differs
11130      from `.lcomm' only in that it permits you to specify an alignment.
11131      *Note `.lcomm': Lcomm.
11132
11133 `.extended FLONUMS'
11134      `.extended' expects zero or more flonums, separated by commas; for
11135      each flonum, `.extended' emits an IEEE extended-format (80-bit)
11136      floating-point number.
11137
11138 `.leafproc CALL-LAB, BAL-LAB'
11139      You can use the `.leafproc' directive in conjunction with the
11140      optimized `callj' instruction to enable faster calls of leaf
11141      procedures.  If a procedure is known to call no other procedures,
11142      you may define an entry point that skips procedure prolog code
11143      (and that does not depend on system-supplied saved context), and
11144      declare it as the BAL-LAB using `.leafproc'.  If the procedure
11145      also has an entry point that goes through the normal prolog, you
11146      can specify that entry point as CALL-LAB.
11147
11148      A `.leafproc' declaration is meant for use in conjunction with the
11149      optimized call instruction `callj'; the directive records the data
11150      needed later to choose between converting the `callj' into a `bal'
11151      or a `call'.
11152
11153      CALL-LAB is optional; if only one argument is present, or if the
11154      two arguments are identical, the single argument is assumed to be
11155      the `bal' entry point.
11156
11157 `.sysproc NAME, INDEX'
11158      The `.sysproc' directive defines a name for a system procedure.
11159      After you define it using `.sysproc', you can use NAME to refer to
11160      the system procedure identified by INDEX when calling procedures
11161      with the optimized call instruction `callj'.
11162
11163      Both arguments are required; INDEX must be between 0 and 31
11164      (inclusive).
11165
11166 \1f
11167 File: as.info,  Node: Opcodes for i960,  Next: Syntax of i960,  Prev: Directives-i960,  Up: i960-Dependent
11168
11169 9.17.4 i960 Opcodes
11170 -------------------
11171
11172 All Intel 960 machine instructions are supported; *note i960
11173 Command-line Options: Options-i960. for a discussion of selecting the
11174 instruction subset for a particular 960 architecture.
11175
11176    Some opcodes are processed beyond simply emitting a single
11177 corresponding instruction: `callj', and Compare-and-Branch or
11178 Compare-and-Jump instructions with target displacements larger than 13
11179 bits.
11180
11181 * Menu:
11182
11183 * callj-i960::                  `callj'
11184 * Compare-and-branch-i960::     Compare-and-Branch
11185
11186 \1f
11187 File: as.info,  Node: callj-i960,  Next: Compare-and-branch-i960,  Up: Opcodes for i960
11188
11189 9.17.4.1 `callj'
11190 ................
11191
11192 You can write `callj' to have the assembler or the linker determine the
11193 most appropriate form of subroutine call: `call', `bal', or `calls'.
11194 If the assembly source contains enough information--a `.leafproc' or
11195 `.sysproc' directive defining the operand--then `as' translates the
11196 `callj'; if not, it simply emits the `callj', leaving it for the linker
11197 to resolve.
11198
11199 \1f
11200 File: as.info,  Node: Compare-and-branch-i960,  Prev: callj-i960,  Up: Opcodes for i960
11201
11202 9.17.4.2 Compare-and-Branch
11203 ...........................
11204
11205 The 960 architectures provide combined Compare-and-Branch instructions
11206 that permit you to store the branch target in the lower 13 bits of the
11207 instruction word itself.  However, if you specify a branch target far
11208 enough away that its address won't fit in 13 bits, the assembler can
11209 either issue an error, or convert your Compare-and-Branch instruction
11210 into separate instructions to do the compare and the branch.
11211
11212    Whether `as' gives an error or expands the instruction depends on
11213 two choices you can make: whether you use the `-no-relax' option, and
11214 whether you use a "Compare and Branch" instruction or a "Compare and
11215 Jump" instruction.  The "Jump" instructions are _always_ expanded if
11216 necessary; the "Branch" instructions are expanded when necessary
11217 _unless_ you specify `-no-relax'--in which case `as' gives an error
11218 instead.
11219
11220    These are the Compare-and-Branch instructions, their "Jump" variants,
11221 and the instruction pairs they may expand into:
11222
11223              Compare and
11224           Branch      Jump       Expanded to
11225           ------    ------       ------------
11226              bbc                 chkbit; bno
11227              bbs                 chkbit; bo
11228           cmpibe    cmpije       cmpi; be
11229           cmpibg    cmpijg       cmpi; bg
11230          cmpibge   cmpijge       cmpi; bge
11231           cmpibl    cmpijl       cmpi; bl
11232          cmpible   cmpijle       cmpi; ble
11233          cmpibno   cmpijno       cmpi; bno
11234          cmpibne   cmpijne       cmpi; bne
11235           cmpibo    cmpijo       cmpi; bo
11236           cmpobe    cmpoje       cmpo; be
11237           cmpobg    cmpojg       cmpo; bg
11238          cmpobge   cmpojge       cmpo; bge
11239           cmpobl    cmpojl       cmpo; bl
11240          cmpoble   cmpojle       cmpo; ble
11241          cmpobne   cmpojne       cmpo; bne
11242
11243 \1f
11244 File: as.info,  Node: Syntax of i960,  Prev: Opcodes for i960,  Up: i960-Dependent
11245
11246 9.17.5 Syntax for the i960
11247 --------------------------
11248
11249 * Menu:
11250
11251 * i960-Chars::                Special Characters
11252
11253 \1f
11254 File: as.info,  Node: i960-Chars,  Up: Syntax of i960
11255
11256 9.17.5.1 Special Characters
11257 ...........................
11258
11259 The presence of a `#' on a line indicates the start of a comment that
11260 extends to the end of the current line.
11261
11262    If a `#' appears as the first character of a line, the whole line is
11263 treated as a comment, but in this case the line can also be a logical
11264 line number directive (*note Comments::) or a preprocessor control
11265 command (*note Preprocessing::).
11266
11267    The `;' character can be used to separate statements on the same
11268 line.
11269
11270 \1f
11271 File: as.info,  Node: IA-64-Dependent,  Next: IP2K-Dependent,  Prev: i960-Dependent,  Up: Machine Dependencies
11272
11273 9.18 IA-64 Dependent Features
11274 =============================
11275
11276 * Menu:
11277
11278 * IA-64 Options::              Options
11279 * IA-64 Syntax::               Syntax
11280 * IA-64 Opcodes::              Opcodes
11281
11282 \1f
11283 File: as.info,  Node: IA-64 Options,  Next: IA-64 Syntax,  Up: IA-64-Dependent
11284
11285 9.18.1 Options
11286 --------------
11287
11288 `-mconstant-gp'
11289      This option instructs the assembler to mark the resulting object
11290      file as using the "constant GP" model.  With this model, it is
11291      assumed that the entire program uses a single global pointer (GP)
11292      value.  Note that this option does not in any fashion affect the
11293      machine code emitted by the assembler.  All it does is turn on the
11294      EF_IA_64_CONS_GP flag in the ELF file header.
11295
11296 `-mauto-pic'
11297      This option instructs the assembler to mark the resulting object
11298      file as using the "constant GP without function descriptor" data
11299      model.  This model is like the "constant GP" model, except that it
11300      additionally does away with function descriptors.  What this means
11301      is that the address of a function refers directly to the
11302      function's code entry-point.  Normally, such an address would
11303      refer to a function descriptor, which contains both the code
11304      entry-point and the GP-value needed by the function.  Note that
11305      this option does not in any fashion affect the machine code
11306      emitted by the assembler.  All it does is turn on the
11307      EF_IA_64_NOFUNCDESC_CONS_GP flag in the ELF file header.
11308
11309 `-milp32'
11310 `-milp64'
11311 `-mlp64'
11312 `-mp64'
11313      These options select the data model.  The assembler defaults to
11314      `-mlp64' (LP64 data model).
11315
11316 `-mle'
11317 `-mbe'
11318      These options select the byte order.  The `-mle' option selects
11319      little-endian byte order (default) and `-mbe' selects big-endian
11320      byte order.  Note that IA-64 machine code always uses
11321      little-endian byte order.
11322
11323 `-mtune=itanium1'
11324 `-mtune=itanium2'
11325      Tune for a particular IA-64 CPU, ITANIUM1 or ITANIUM2. The default
11326      is ITANIUM2.
11327
11328 `-munwind-check=warning'
11329 `-munwind-check=error'
11330      These options control what the assembler will do when performing
11331      consistency checks on unwind directives.  `-munwind-check=warning'
11332      will make the assembler issue a warning when an unwind directive
11333      check fails.  This is the default.  `-munwind-check=error' will
11334      make the assembler issue an error when an unwind directive check
11335      fails.
11336
11337 `-mhint.b=ok'
11338 `-mhint.b=warning'
11339 `-mhint.b=error'
11340      These options control what the assembler will do when the `hint.b'
11341      instruction is used.  `-mhint.b=ok' will make the assembler accept
11342      `hint.b'.  `-mint.b=warning' will make the assembler issue a
11343      warning when `hint.b' is used.  `-mhint.b=error' will make the
11344      assembler treat `hint.b' as an error, which is the default.
11345
11346 `-x'
11347 `-xexplicit'
11348      These options turn on dependency violation checking.
11349
11350 `-xauto'
11351      This option instructs the assembler to automatically insert stop
11352      bits where necessary to remove dependency violations.  This is the
11353      default mode.
11354
11355 `-xnone'
11356      This option turns off dependency violation checking.
11357
11358 `-xdebug'
11359      This turns on debug output intended to help tracking down bugs in
11360      the dependency violation checker.
11361
11362 `-xdebugn'
11363      This is a shortcut for -xnone -xdebug.
11364
11365 `-xdebugx'
11366      This is a shortcut for -xexplicit -xdebug.
11367
11368
11369 \1f
11370 File: as.info,  Node: IA-64 Syntax,  Next: IA-64 Opcodes,  Prev: IA-64 Options,  Up: IA-64-Dependent
11371
11372 9.18.2 Syntax
11373 -------------
11374
11375 The assembler syntax closely follows the IA-64 Assembly Language
11376 Reference Guide.
11377
11378 * Menu:
11379
11380 * IA-64-Chars::                Special Characters
11381 * IA-64-Regs::                 Register Names
11382 * IA-64-Bits::                 Bit Names
11383 * IA-64-Relocs::               Relocations
11384
11385 \1f
11386 File: as.info,  Node: IA-64-Chars,  Next: IA-64-Regs,  Up: IA-64 Syntax
11387
11388 9.18.2.1 Special Characters
11389 ...........................
11390
11391 `//' is the line comment token.
11392
11393    `;' can be used instead of a newline to separate statements.
11394
11395 \1f
11396 File: as.info,  Node: IA-64-Regs,  Next: IA-64-Bits,  Prev: IA-64-Chars,  Up: IA-64 Syntax
11397
11398 9.18.2.2 Register Names
11399 .......................
11400
11401 The 128 integer registers are referred to as `rN'.  The 128
11402 floating-point registers are referred to as `fN'.  The 128 application
11403 registers are referred to as `arN'.  The 128 control registers are
11404 referred to as `crN'.  The 64 one-bit predicate registers are referred
11405 to as `pN'.  The 8 branch registers are referred to as `bN'.  In
11406 addition, the assembler defines a number of aliases: `gp' (`r1'), `sp'
11407 (`r12'), `rp' (`b0'), `ret0' (`r8'), `ret1' (`r9'), `ret2' (`r10'),
11408 `ret3' (`r9'), `fargN' (`f8+N'), and `fretN' (`f8+N').
11409
11410    For convenience, the assembler also defines aliases for all named
11411 application and control registers.  For example, `ar.bsp' refers to the
11412 register backing store pointer (`ar17').  Similarly, `cr.eoi' refers to
11413 the end-of-interrupt register (`cr67').
11414
11415 \1f
11416 File: as.info,  Node: IA-64-Bits,  Next: IA-64-Relocs,  Prev: IA-64-Regs,  Up: IA-64 Syntax
11417
11418 9.18.2.3 IA-64 Processor-Status-Register (PSR) Bit Names
11419 ........................................................
11420
11421 The assembler defines bit masks for each of the bits in the IA-64
11422 processor status register.  For example, `psr.ic' corresponds to a
11423 value of 0x2000.  These masks are primarily intended for use with the
11424 `ssm'/`sum' and `rsm'/`rum' instructions, but they can be used anywhere
11425 else where an integer constant is expected.
11426
11427 \1f
11428 File: as.info,  Node: IA-64-Relocs,  Prev: IA-64-Bits,  Up: IA-64 Syntax
11429
11430 9.18.2.4 Relocations
11431 ....................
11432
11433 In addition to the standard IA-64 relocations, the following
11434 relocations are implemented by `as':
11435
11436 `@slotcount(V)'
11437      Convert the address offset V into a slot count.  This pseudo
11438      function is available only on VMS.  The expression V must be known
11439      at assembly time: it can't reference undefined symbols or symbols
11440      in different sections.
11441
11442 \1f
11443 File: as.info,  Node: IA-64 Opcodes,  Prev: IA-64 Syntax,  Up: IA-64-Dependent
11444
11445 9.18.3 Opcodes
11446 --------------
11447
11448 For detailed information on the IA-64 machine instruction set, see the
11449 IA-64 Architecture Handbook
11450 (http://developer.intel.com/design/itanium/arch_spec.htm).
11451
11452 \1f
11453 File: as.info,  Node: IP2K-Dependent,  Next: LM32-Dependent,  Prev: IA-64-Dependent,  Up: Machine Dependencies
11454
11455 9.19 IP2K Dependent Features
11456 ============================
11457
11458 * Menu:
11459
11460 * IP2K-Opts::                   IP2K Options
11461 * IP2K-Syntax::                 IP2K Syntax
11462
11463 \1f
11464 File: as.info,  Node: IP2K-Opts,  Next: IP2K-Syntax,  Up: IP2K-Dependent
11465
11466 9.19.1 IP2K Options
11467 -------------------
11468
11469 The Ubicom IP2K version of `as' has a few machine dependent options:
11470
11471 `-mip2022ext'
11472      `as' can assemble the extended IP2022 instructions, but it will
11473      only do so if this is specifically allowed via this command line
11474      option.
11475
11476 `-mip2022'
11477      This option restores the assembler's default behaviour of not
11478      permitting the extended IP2022 instructions to be assembled.
11479
11480
11481 \1f
11482 File: as.info,  Node: IP2K-Syntax,  Prev: IP2K-Opts,  Up: IP2K-Dependent
11483
11484 9.19.2 IP2K Syntax
11485 ------------------
11486
11487 * Menu:
11488
11489 * IP2K-Chars::                Special Characters
11490
11491 \1f
11492 File: as.info,  Node: IP2K-Chars,  Up: IP2K-Syntax
11493
11494 9.19.2.1 Special Characters
11495 ...........................
11496
11497 The presence of a `;' on a line indicates the start of a comment that
11498 extends to the end of the current line.
11499
11500    If a `#' appears as the first character of a line, the whole line is
11501 treated as a comment, but in this case the line can also be a logical
11502 line number directive (*note Comments::) or a preprocessor control
11503 command (*note Preprocessing::).
11504
11505    The IP2K assembler does not currently support a line separator
11506 character.
11507
11508 \1f
11509 File: as.info,  Node: LM32-Dependent,  Next: M32C-Dependent,  Prev: IP2K-Dependent,  Up: Machine Dependencies
11510
11511 9.20 LM32 Dependent Features
11512 ============================
11513
11514 * Menu:
11515
11516 * LM32 Options::              Options
11517 * LM32 Syntax::               Syntax
11518 * LM32 Opcodes::              Opcodes
11519
11520 \1f
11521 File: as.info,  Node: LM32 Options,  Next: LM32 Syntax,  Up: LM32-Dependent
11522
11523 9.20.1 Options
11524 --------------
11525
11526 `-mmultiply-enabled'
11527      Enable multiply instructions.
11528
11529 `-mdivide-enabled'
11530      Enable divide instructions.
11531
11532 `-mbarrel-shift-enabled'
11533      Enable barrel-shift instructions.
11534
11535 `-msign-extend-enabled'
11536      Enable sign extend instructions.
11537
11538 `-muser-enabled'
11539      Enable user defined instructions.
11540
11541 `-micache-enabled'
11542      Enable instruction cache related CSRs.
11543
11544 `-mdcache-enabled'
11545      Enable data cache related CSRs.
11546
11547 `-mbreak-enabled'
11548      Enable break instructions.
11549
11550 `-mall-enabled'
11551      Enable all instructions and CSRs.
11552
11553
11554 \1f
11555 File: as.info,  Node: LM32 Syntax,  Next: LM32 Opcodes,  Prev: LM32 Options,  Up: LM32-Dependent
11556
11557 9.20.2 Syntax
11558 -------------
11559
11560 * Menu:
11561
11562 * LM32-Regs::                 Register Names
11563 * LM32-Modifiers::            Relocatable Expression Modifiers
11564 * LM32-Chars::                Special Characters
11565
11566 \1f
11567 File: as.info,  Node: LM32-Regs,  Next: LM32-Modifiers,  Up: LM32 Syntax
11568
11569 9.20.2.1 Register Names
11570 .......................
11571
11572 LM32 has 32 x 32-bit general purpose registers `r0', `r1', ... `r31'.
11573
11574    The following aliases are defined: `gp' - `r26', `fp' - `r27', `sp'
11575 - `r28', `ra' - `r29', `ea' - `r30', `ba' - `r31'.
11576
11577    LM32 has the following Control and Status Registers (CSRs).
11578
11579 `IE'
11580      Interrupt enable.
11581
11582 `IM'
11583      Interrupt mask.
11584
11585 `IP'
11586      Interrupt pending.
11587
11588 `ICC'
11589      Instruction cache control.
11590
11591 `DCC'
11592      Data cache control.
11593
11594 `CC'
11595      Cycle counter.
11596
11597 `CFG'
11598      Configuration.
11599
11600 `EBA'
11601      Exception base address.
11602
11603 `DC'
11604      Debug control.
11605
11606 `DEBA'
11607      Debug exception base address.
11608
11609 `JTX'
11610      JTAG transmit.
11611
11612 `JRX'
11613      JTAG receive.
11614
11615 `BP0'
11616      Breakpoint 0.
11617
11618 `BP1'
11619      Breakpoint 1.
11620
11621 `BP2'
11622      Breakpoint 2.
11623
11624 `BP3'
11625      Breakpoint 3.
11626
11627 `WP0'
11628      Watchpoint 0.
11629
11630 `WP1'
11631      Watchpoint 1.
11632
11633 `WP2'
11634      Watchpoint 2.
11635
11636 `WP3'
11637      Watchpoint 3.
11638
11639 \1f
11640 File: as.info,  Node: LM32-Modifiers,  Next: LM32-Chars,  Prev: LM32-Regs,  Up: LM32 Syntax
11641
11642 9.20.2.2 Relocatable Expression Modifiers
11643 .........................................
11644
11645 The assembler supports several modifiers when using relocatable
11646 addresses in LM32 instruction operands.  The general syntax is the
11647 following:
11648
11649      modifier(relocatable-expression)
11650
11651 `lo'
11652      This modifier allows you to use bits 0 through 15 of an address
11653      expression as 16 bit relocatable expression.
11654
11655 `hi'
11656      This modifier allows you to use bits 16 through 23 of an address
11657      expression as 16 bit relocatable expression.
11658
11659      For example
11660
11661           ori  r4, r4, lo(sym+10)
11662           orhi r4, r4, hi(sym+10)
11663
11664 `gp'
11665      This modified creates a 16-bit relocatable expression that is the
11666      offset of the symbol from the global pointer.
11667
11668           mva r4, gp(sym)
11669
11670 `got'
11671      This modifier places a symbol in the GOT and creates a 16-bit
11672      relocatable expression that is the offset into the GOT of this
11673      symbol.
11674
11675           lw r4, (gp+got(sym))
11676
11677 `gotofflo16'
11678      This modifier allows you to use the bits 0 through 15 of an
11679      address which is an offset from the GOT.
11680
11681 `gotoffhi16'
11682      This modifier allows you to use the bits 16 through 31 of an
11683      address which is an offset from the GOT.
11684
11685           orhi r4, r4, gotoffhi16(lsym)
11686           addi r4, r4, gotofflo16(lsym)
11687
11688
11689 \1f
11690 File: as.info,  Node: LM32-Chars,  Prev: LM32-Modifiers,  Up: LM32 Syntax
11691
11692 9.20.2.3 Special Characters
11693 ...........................
11694
11695 The presence of a `#' on a line indicates the start of a comment that
11696 extends to the end of the current line.  Note that if a line starts
11697 with a `#' character then it can also be a logical line number
11698 directive (*note Comments::) or a preprocessor control command (*note
11699 Preprocessing::).
11700
11701    A semicolon (`;') can be used to separate multiple statements on the
11702 same line.
11703
11704 \1f
11705 File: as.info,  Node: LM32 Opcodes,  Prev: LM32 Syntax,  Up: LM32-Dependent
11706
11707 9.20.3 Opcodes
11708 --------------
11709
11710 For detailed information on the LM32 machine instruction set, see
11711 `http://www.latticesemi.com/products/intellectualproperty/ipcores/mico32/'.
11712
11713    `as' implements all the standard LM32 opcodes.
11714
11715 \1f
11716 File: as.info,  Node: M32C-Dependent,  Next: M32R-Dependent,  Prev: LM32-Dependent,  Up: Machine Dependencies
11717
11718 9.21 M32C Dependent Features
11719 ============================
11720
11721    `as' can assemble code for several different members of the Renesas
11722 M32C family.  Normally the default is to assemble code for the M16C
11723 microprocessor.  The `-m32c' option may be used to change the default
11724 to the M32C microprocessor.
11725
11726 * Menu:
11727
11728 * M32C-Opts::                   M32C Options
11729 * M32C-Syntax::                 M32C Syntax
11730
11731 \1f
11732 File: as.info,  Node: M32C-Opts,  Next: M32C-Syntax,  Up: M32C-Dependent
11733
11734 9.21.1 M32C Options
11735 -------------------
11736
11737 The Renesas M32C version of `as' has these machine-dependent options:
11738
11739 `-m32c'
11740      Assemble M32C instructions.
11741
11742 `-m16c'
11743      Assemble M16C instructions (default).
11744
11745 `-relax'
11746      Enable support for link-time relaxations.
11747
11748 `-h-tick-hex'
11749      Support H'00 style hex constants in addition to 0x00 style.
11750
11751
11752 \1f
11753 File: as.info,  Node: M32C-Syntax,  Prev: M32C-Opts,  Up: M32C-Dependent
11754
11755 9.21.2 M32C Syntax
11756 ------------------
11757
11758 * Menu:
11759
11760 * M32C-Modifiers::              Symbolic Operand Modifiers
11761 * M32C-Chars::                  Special Characters
11762
11763 \1f
11764 File: as.info,  Node: M32C-Modifiers,  Next: M32C-Chars,  Up: M32C-Syntax
11765
11766 9.21.2.1 Symbolic Operand Modifiers
11767 ...................................
11768
11769 The assembler supports several modifiers when using symbol addresses in
11770 M32C instruction operands.  The general syntax is the following:
11771
11772      %modifier(symbol)
11773
11774 `%dsp8'
11775 `%dsp16'
11776      These modifiers override the assembler's assumptions about how big
11777      a symbol's address is.  Normally, when it sees an operand like
11778      `sym[a0]' it assumes `sym' may require the widest displacement
11779      field (16 bits for `-m16c', 24 bits for `-m32c').  These modifiers
11780      tell it to assume the address will fit in an 8 or 16 bit
11781      (respectively) unsigned displacement.  Note that, of course, if it
11782      doesn't actually fit you will get linker errors.  Example:
11783
11784           mov.w %dsp8(sym)[a0],r1
11785           mov.b #0,%dsp8(sym)[a0]
11786
11787 `%hi8'
11788      This modifier allows you to load bits 16 through 23 of a 24 bit
11789      address into an 8 bit register.  This is useful with, for example,
11790      the M16C `smovf' instruction, which expects a 20 bit address in
11791      `r1h' and `a0'.  Example:
11792
11793           mov.b #%hi8(sym),r1h
11794           mov.w #%lo16(sym),a0
11795           smovf.b
11796
11797 `%lo16'
11798      Likewise, this modifier allows you to load bits 0 through 15 of a
11799      24 bit address into a 16 bit register.
11800
11801 `%hi16'
11802      This modifier allows you to load bits 16 through 31 of a 32 bit
11803      address into a 16 bit register.  While the M32C family only has 24
11804      bits of address space, it does support addresses in pairs of 16 bit
11805      registers (like `a1a0' for the `lde' instruction).  This modifier
11806      is for loading the upper half in such cases.  Example:
11807
11808           mov.w #%hi16(sym),a1
11809           mov.w #%lo16(sym),a0
11810           ...
11811           lde.w [a1a0],r1
11812
11813
11814 \1f
11815 File: as.info,  Node: M32C-Chars,  Prev: M32C-Modifiers,  Up: M32C-Syntax
11816
11817 9.21.2.2 Special Characters
11818 ...........................
11819
11820 The presence of a `;' character on a line indicates the start of a
11821 comment that extends to the end of that line.
11822
11823    If a `#' appears as the first character of a line, the whole line is
11824 treated as a comment, but in this case the line can also be a logical
11825 line number directive (*note Comments::) or a preprocessor control
11826 command (*note Preprocessing::).
11827
11828    The `|' character can be used to separate statements on the same
11829 line.
11830
11831 \1f
11832 File: as.info,  Node: M32R-Dependent,  Next: M68K-Dependent,  Prev: M32C-Dependent,  Up: Machine Dependencies
11833
11834 9.22 M32R Dependent Features
11835 ============================
11836
11837 * Menu:
11838
11839 * M32R-Opts::                   M32R Options
11840 * M32R-Directives::             M32R Directives
11841 * M32R-Warnings::               M32R Warnings
11842
11843 \1f
11844 File: as.info,  Node: M32R-Opts,  Next: M32R-Directives,  Up: M32R-Dependent
11845
11846 9.22.1 M32R Options
11847 -------------------
11848
11849 The Renease M32R version of `as' has a few machine dependent options:
11850
11851 `-m32rx'
11852      `as' can assemble code for several different members of the
11853      Renesas M32R family.  Normally the default is to assemble code for
11854      the M32R microprocessor.  This option may be used to change the
11855      default to the M32RX microprocessor, which adds some more
11856      instructions to the basic M32R instruction set, and some
11857      additional parameters to some of the original instructions.
11858
11859 `-m32r2'
11860      This option changes the target processor to the the M32R2
11861      microprocessor.
11862
11863 `-m32r'
11864      This option can be used to restore the assembler's default
11865      behaviour of assembling for the M32R microprocessor.  This can be
11866      useful if the default has been changed by a previous command line
11867      option.
11868
11869 `-little'
11870      This option tells the assembler to produce little-endian code and
11871      data.  The default is dependent upon how the toolchain was
11872      configured.
11873
11874 `-EL'
11875      This is a synonym for _-little_.
11876
11877 `-big'
11878      This option tells the assembler to produce big-endian code and
11879      data.
11880
11881 `-EB'
11882      This is a synonum for _-big_.
11883
11884 `-KPIC'
11885      This option specifies that the output of the assembler should be
11886      marked as position-independent code (PIC).
11887
11888 `-parallel'
11889      This option tells the assembler to attempts to combine two
11890      sequential instructions into a single, parallel instruction, where
11891      it is legal to do so.
11892
11893 `-no-parallel'
11894      This option disables a previously enabled _-parallel_ option.
11895
11896 `-no-bitinst'
11897      This option disables the support for the extended bit-field
11898      instructions provided by the M32R2.  If this support needs to be
11899      re-enabled the _-bitinst_ switch can be used to restore it.
11900
11901 `-O'
11902      This option tells the assembler to attempt to optimize the
11903      instructions that it produces.  This includes filling delay slots
11904      and converting sequential instructions into parallel ones.  This
11905      option implies _-parallel_.
11906
11907 `-warn-explicit-parallel-conflicts'
11908      Instructs `as' to produce warning messages when questionable
11909      parallel instructions are encountered.  This option is enabled by
11910      default, but `gcc' disables it when it invokes `as' directly.
11911      Questionable instructions are those whose behaviour would be
11912      different if they were executed sequentially.  For example the
11913      code fragment `mv r1, r2 || mv r3, r1' produces a different result
11914      from `mv r1, r2 \n mv r3, r1' since the former moves r1 into r3
11915      and then r2 into r1, whereas the later moves r2 into r1 and r3.
11916
11917 `-Wp'
11918      This is a shorter synonym for the
11919      _-warn-explicit-parallel-conflicts_ option.
11920
11921 `-no-warn-explicit-parallel-conflicts'
11922      Instructs `as' not to produce warning messages when questionable
11923      parallel instructions are encountered.
11924
11925 `-Wnp'
11926      This is a shorter synonym for the
11927      _-no-warn-explicit-parallel-conflicts_ option.
11928
11929 `-ignore-parallel-conflicts'
11930      This option tells the assembler's to stop checking parallel
11931      instructions for constraint violations.  This ability is provided
11932      for hardware vendors testing chip designs and should not be used
11933      under normal circumstances.
11934
11935 `-no-ignore-parallel-conflicts'
11936      This option restores the assembler's default behaviour of checking
11937      parallel instructions to detect constraint violations.
11938
11939 `-Ip'
11940      This is a shorter synonym for the _-ignore-parallel-conflicts_
11941      option.
11942
11943 `-nIp'
11944      This is a shorter synonym for the _-no-ignore-parallel-conflicts_
11945      option.
11946
11947 `-warn-unmatched-high'
11948      This option tells the assembler to produce a warning message if a
11949      `.high' pseudo op is encountered without a matching `.low' pseudo
11950      op.  The presence of such an unmatched pseudo op usually indicates
11951      a programming error.
11952
11953 `-no-warn-unmatched-high'
11954      Disables a previously enabled _-warn-unmatched-high_ option.
11955
11956 `-Wuh'
11957      This is a shorter synonym for the _-warn-unmatched-high_ option.
11958
11959 `-Wnuh'
11960      This is a shorter synonym for the _-no-warn-unmatched-high_ option.
11961
11962
11963 \1f
11964 File: as.info,  Node: M32R-Directives,  Next: M32R-Warnings,  Prev: M32R-Opts,  Up: M32R-Dependent
11965
11966 9.22.2 M32R Directives
11967 ----------------------
11968
11969 The Renease M32R version of `as' has a few architecture specific
11970 directives:
11971
11972 `low EXPRESSION'
11973      The `low' directive computes the value of its expression and
11974      places the lower 16-bits of the result into the immediate-field of
11975      the instruction.  For example:
11976
11977              or3   r0, r0, #low(0x12345678) ; compute r0 = r0 | 0x5678
11978              add3, r0, r0, #low(fred)   ; compute r0 = r0 + low 16-bits of address of fred
11979
11980 `high EXPRESSION'
11981      The `high' directive computes the value of its expression and
11982      places the upper 16-bits of the result into the immediate-field of
11983      the instruction.  For example:
11984
11985              seth  r0, #high(0x12345678) ; compute r0 = 0x12340000
11986              seth, r0, #high(fred)       ; compute r0 = upper 16-bits of address of fred
11987
11988 `shigh EXPRESSION'
11989      The `shigh' directive is very similar to the `high' directive.  It
11990      also computes the value of its expression and places the upper
11991      16-bits of the result into the immediate-field of the instruction.
11992      The difference is that `shigh' also checks to see if the lower
11993      16-bits could be interpreted as a signed number, and if so it
11994      assumes that a borrow will occur from the upper-16 bits.  To
11995      compensate for this the `shigh' directive pre-biases the upper 16
11996      bit value by adding one to it.  For example:
11997
11998      For example:
11999
12000              seth  r0, #shigh(0x12345678) ; compute r0 = 0x12340000
12001              seth  r0, #shigh(0x00008000) ; compute r0 = 0x00010000
12002
12003      In the second example the lower 16-bits are 0x8000.  If these are
12004      treated as a signed value and sign extended to 32-bits then the
12005      value becomes 0xffff8000.  If this value is then added to
12006      0x00010000 then the result is 0x00008000.
12007
12008      This behaviour is to allow for the different semantics of the
12009      `or3' and `add3' instructions.  The `or3' instruction treats its
12010      16-bit immediate argument as unsigned whereas the `add3' treats
12011      its 16-bit immediate as a signed value.  So for example:
12012
12013              seth  r0, #shigh(0x00008000)
12014              add3  r0, r0, #low(0x00008000)
12015
12016      Produces the correct result in r0, whereas:
12017
12018              seth  r0, #shigh(0x00008000)
12019              or3   r0, r0, #low(0x00008000)
12020
12021      Stores 0xffff8000 into r0.
12022
12023      Note - the `shigh' directive does not know where in the assembly
12024      source code the lower 16-bits of the value are going set, so it
12025      cannot check to make sure that an `or3' instruction is being used
12026      rather than an `add3' instruction.  It is up to the programmer to
12027      make sure that correct directives are used.
12028
12029 `.m32r'
12030      The directive performs a similar thing as the _-m32r_ command line
12031      option.  It tells the assembler to only accept M32R instructions
12032      from now on.  An instructions from later M32R architectures are
12033      refused.
12034
12035 `.m32rx'
12036      The directive performs a similar thing as the _-m32rx_ command
12037      line option.  It tells the assembler to start accepting the extra
12038      instructions in the M32RX ISA as well as the ordinary M32R ISA.
12039
12040 `.m32r2'
12041      The directive performs a similar thing as the _-m32r2_ command
12042      line option.  It tells the assembler to start accepting the extra
12043      instructions in the M32R2 ISA as well as the ordinary M32R ISA.
12044
12045 `.little'
12046      The directive performs a similar thing as the _-little_ command
12047      line option.  It tells the assembler to start producing
12048      little-endian code and data.  This option should be used with care
12049      as producing mixed-endian binary files is fraught with danger.
12050
12051 `.big'
12052      The directive performs a similar thing as the _-big_ command line
12053      option.  It tells the assembler to start producing big-endian code
12054      and data.  This option should be used with care as producing
12055      mixed-endian binary files is fraught with danger.
12056
12057
12058 \1f
12059 File: as.info,  Node: M32R-Warnings,  Prev: M32R-Directives,  Up: M32R-Dependent
12060
12061 9.22.3 M32R Warnings
12062 --------------------
12063
12064 There are several warning and error messages that can be produced by
12065 `as' which are specific to the M32R:
12066
12067 `output of 1st instruction is the same as an input to 2nd instruction - is this intentional ?'
12068      This message is only produced if warnings for explicit parallel
12069      conflicts have been enabled.  It indicates that the assembler has
12070      encountered a parallel instruction in which the destination
12071      register of the left hand instruction is used as an input register
12072      in the right hand instruction.  For example in this code fragment
12073      `mv r1, r2 || neg r3, r1' register r1 is the destination of the
12074      move instruction and the input to the neg instruction.
12075
12076 `output of 2nd instruction is the same as an input to 1st instruction - is this intentional ?'
12077      This message is only produced if warnings for explicit parallel
12078      conflicts have been enabled.  It indicates that the assembler has
12079      encountered a parallel instruction in which the destination
12080      register of the right hand instruction is used as an input
12081      register in the left hand instruction.  For example in this code
12082      fragment `mv r1, r2 || neg r2, r3' register r2 is the destination
12083      of the neg instruction and the input to the move instruction.
12084
12085 `instruction `...' is for the M32RX only'
12086      This message is produced when the assembler encounters an
12087      instruction which is only supported by the M32Rx processor, and
12088      the `-m32rx' command line flag has not been specified to allow
12089      assembly of such instructions.
12090
12091 `unknown instruction `...''
12092      This message is produced when the assembler encounters an
12093      instruction which it does not recognize.
12094
12095 `only the NOP instruction can be issued in parallel on the m32r'
12096      This message is produced when the assembler encounters a parallel
12097      instruction which does not involve a NOP instruction and the
12098      `-m32rx' command line flag has not been specified.  Only the M32Rx
12099      processor is able to execute two instructions in parallel.
12100
12101 `instruction `...' cannot be executed in parallel.'
12102      This message is produced when the assembler encounters a parallel
12103      instruction which is made up of one or two instructions which
12104      cannot be executed in parallel.
12105
12106 `Instructions share the same execution pipeline'
12107      This message is produced when the assembler encounters a parallel
12108      instruction whoes components both use the same execution pipeline.
12109
12110 `Instructions write to the same destination register.'
12111      This message is produced when the assembler encounters a parallel
12112      instruction where both components attempt to modify the same
12113      register.  For example these code fragments will produce this
12114      message: `mv r1, r2 || neg r1, r3' `jl r0 || mv r14, r1' `st r2,
12115      @-r1 || mv r1, r3' `mv r1, r2 || ld r0, @r1+' `cmp r1, r2 || addx
12116      r3, r4' (Both write to the condition bit)
12117
12118
12119 \1f
12120 File: as.info,  Node: M68K-Dependent,  Next: M68HC11-Dependent,  Prev: M32R-Dependent,  Up: Machine Dependencies
12121
12122 9.23 M680x0 Dependent Features
12123 ==============================
12124
12125 * Menu:
12126
12127 * M68K-Opts::                   M680x0 Options
12128 * M68K-Syntax::                 Syntax
12129 * M68K-Moto-Syntax::            Motorola Syntax
12130 * M68K-Float::                  Floating Point
12131 * M68K-Directives::             680x0 Machine Directives
12132 * M68K-opcodes::                Opcodes
12133
12134 \1f
12135 File: as.info,  Node: M68K-Opts,  Next: M68K-Syntax,  Up: M68K-Dependent
12136
12137 9.23.1 M680x0 Options
12138 ---------------------
12139
12140 The Motorola 680x0 version of `as' has a few machine dependent options:
12141
12142 `-march=ARCHITECTURE'
12143      This option specifies a target architecture.  The following
12144      architectures are recognized: `68000', `68010', `68020', `68030',
12145      `68040', `68060', `cpu32', `isaa', `isaaplus', `isab', `isac' and
12146      `cfv4e'.
12147
12148 `-mcpu=CPU'
12149      This option specifies a target cpu.  When used in conjunction with
12150      the `-march' option, the cpu must be within the specified
12151      architecture.  Also, the generic features of the architecture are
12152      used for instruction generation, rather than those of the specific
12153      chip.
12154
12155 `-m[no-]68851'
12156 `-m[no-]68881'
12157 `-m[no-]div'
12158 `-m[no-]usp'
12159 `-m[no-]float'
12160 `-m[no-]mac'
12161 `-m[no-]emac'
12162      Enable or disable various architecture specific features.  If a
12163      chip or architecture by default supports an option (for instance
12164      `-march=isaaplus' includes the `-mdiv' option), explicitly
12165      disabling the option will override the default.
12166
12167 `-l'
12168      You can use the `-l' option to shorten the size of references to
12169      undefined symbols.  If you do not use the `-l' option, references
12170      to undefined symbols are wide enough for a full `long' (32 bits).
12171      (Since `as' cannot know where these symbols end up, `as' can only
12172      allocate space for the linker to fill in later.  Since `as' does
12173      not know how far away these symbols are, it allocates as much
12174      space as it can.)  If you use this option, the references are only
12175      one word wide (16 bits).  This may be useful if you want the
12176      object file to be as small as possible, and you know that the
12177      relevant symbols are always less than 17 bits away.
12178
12179 `--register-prefix-optional'
12180      For some configurations, especially those where the compiler
12181      normally does not prepend an underscore to the names of user
12182      variables, the assembler requires a `%' before any use of a
12183      register name.  This is intended to let the assembler distinguish
12184      between C variables and functions named `a0' through `a7', and so
12185      on.  The `%' is always accepted, but is not required for certain
12186      configurations, notably `sun3'.  The `--register-prefix-optional'
12187      option may be used to permit omitting the `%' even for
12188      configurations for which it is normally required.  If this is
12189      done, it will generally be impossible to refer to C variables and
12190      functions with the same names as register names.
12191
12192 `--bitwise-or'
12193      Normally the character `|' is treated as a comment character, which
12194      means that it can not be used in expressions.  The `--bitwise-or'
12195      option turns `|' into a normal character.  In this mode, you must
12196      either use C style comments, or start comments with a `#' character
12197      at the beginning of a line.
12198
12199 `--base-size-default-16  --base-size-default-32'
12200      If you use an addressing mode with a base register without
12201      specifying the size, `as' will normally use the full 32 bit value.
12202      For example, the addressing mode `%a0@(%d0)' is equivalent to
12203      `%a0@(%d0:l)'.  You may use the `--base-size-default-16' option to
12204      tell `as' to default to using the 16 bit value.  In this case,
12205      `%a0@(%d0)' is equivalent to `%a0@(%d0:w)'.  You may use the
12206      `--base-size-default-32' option to restore the default behaviour.
12207
12208 `--disp-size-default-16  --disp-size-default-32'
12209      If you use an addressing mode with a displacement, and the value
12210      of the displacement is not known, `as' will normally assume that
12211      the value is 32 bits.  For example, if the symbol `disp' has not
12212      been defined, `as' will assemble the addressing mode
12213      `%a0@(disp,%d0)' as though `disp' is a 32 bit value.  You may use
12214      the `--disp-size-default-16' option to tell `as' to instead assume
12215      that the displacement is 16 bits.  In this case, `as' will
12216      assemble `%a0@(disp,%d0)' as though `disp' is a 16 bit value.  You
12217      may use the `--disp-size-default-32' option to restore the default
12218      behaviour.
12219
12220 `--pcrel'
12221      Always keep branches PC-relative.  In the M680x0 architecture all
12222      branches are defined as PC-relative.  However, on some processors
12223      they are limited to word displacements maximum.  When `as' needs a
12224      long branch that is not available, it normally emits an absolute
12225      jump instead.  This option disables this substitution.  When this
12226      option is given and no long branches are available, only word
12227      branches will be emitted.  An error message will be generated if a
12228      word branch cannot reach its target.  This option has no effect on
12229      68020 and other processors that have long branches.  *note Branch
12230      Improvement: M68K-Branch.
12231
12232 `-m68000'
12233      `as' can assemble code for several different members of the
12234      Motorola 680x0 family.  The default depends upon how `as' was
12235      configured when it was built; normally, the default is to assemble
12236      code for the 68020 microprocessor.  The following options may be
12237      used to change the default.  These options control which
12238      instructions and addressing modes are permitted.  The members of
12239      the 680x0 family are very similar.  For detailed information about
12240      the differences, see the Motorola manuals.
12241
12242     `-m68000'
12243     `-m68ec000'
12244     `-m68hc000'
12245     `-m68hc001'
12246     `-m68008'
12247     `-m68302'
12248     `-m68306'
12249     `-m68307'
12250     `-m68322'
12251     `-m68356'
12252           Assemble for the 68000. `-m68008', `-m68302', and so on are
12253           synonyms for `-m68000', since the chips are the same from the
12254           point of view of the assembler.
12255
12256     `-m68010'
12257           Assemble for the 68010.
12258
12259     `-m68020'
12260     `-m68ec020'
12261           Assemble for the 68020.  This is normally the default.
12262
12263     `-m68030'
12264     `-m68ec030'
12265           Assemble for the 68030.
12266
12267     `-m68040'
12268     `-m68ec040'
12269           Assemble for the 68040.
12270
12271     `-m68060'
12272     `-m68ec060'
12273           Assemble for the 68060.
12274
12275     `-mcpu32'
12276     `-m68330'
12277     `-m68331'
12278     `-m68332'
12279     `-m68333'
12280     `-m68334'
12281     `-m68336'
12282     `-m68340'
12283     `-m68341'
12284     `-m68349'
12285     `-m68360'
12286           Assemble for the CPU32 family of chips.
12287
12288     `-m5200'
12289     `-m5202'
12290     `-m5204'
12291     `-m5206'
12292     `-m5206e'
12293     `-m521x'
12294     `-m5249'
12295     `-m528x'
12296     `-m5307'
12297     `-m5407'
12298     `-m547x'
12299     `-m548x'
12300     `-mcfv4'
12301     `-mcfv4e'
12302           Assemble for the ColdFire family of chips.
12303
12304     `-m68881'
12305     `-m68882'
12306           Assemble 68881 floating point instructions.  This is the
12307           default for the 68020, 68030, and the CPU32.  The 68040 and
12308           68060 always support floating point instructions.
12309
12310     `-mno-68881'
12311           Do not assemble 68881 floating point instructions.  This is
12312           the default for 68000 and the 68010.  The 68040 and 68060
12313           always support floating point instructions, even if this
12314           option is used.
12315
12316     `-m68851'
12317           Assemble 68851 MMU instructions.  This is the default for the
12318           68020, 68030, and 68060.  The 68040 accepts a somewhat
12319           different set of MMU instructions; `-m68851' and `-m68040'
12320           should not be used together.
12321
12322     `-mno-68851'
12323           Do not assemble 68851 MMU instructions.  This is the default
12324           for the 68000, 68010, and the CPU32.  The 68040 accepts a
12325           somewhat different set of MMU instructions.
12326
12327 \1f
12328 File: as.info,  Node: M68K-Syntax,  Next: M68K-Moto-Syntax,  Prev: M68K-Opts,  Up: M68K-Dependent
12329
12330 9.23.2 Syntax
12331 -------------
12332
12333 This syntax for the Motorola 680x0 was developed at MIT.
12334
12335    The 680x0 version of `as' uses instructions names and syntax
12336 compatible with the Sun assembler.  Intervening periods are ignored;
12337 for example, `movl' is equivalent to `mov.l'.
12338
12339    In the following table APC stands for any of the address registers
12340 (`%a0' through `%a7'), the program counter (`%pc'), the zero-address
12341 relative to the program counter (`%zpc'), a suppressed address register
12342 (`%za0' through `%za7'), or it may be omitted entirely.  The use of
12343 SIZE means one of `w' or `l', and it may be omitted, along with the
12344 leading colon, unless a scale is also specified.  The use of SCALE
12345 means one of `1', `2', `4', or `8', and it may always be omitted along
12346 with the leading colon.
12347
12348    The following addressing modes are understood:
12349 "Immediate"
12350      `#NUMBER'
12351
12352 "Data Register"
12353      `%d0' through `%d7'
12354
12355 "Address Register"
12356      `%a0' through `%a7'
12357      `%a7' is also known as `%sp', i.e., the Stack Pointer.  `%a6' is
12358      also known as `%fp', the Frame Pointer.
12359
12360 "Address Register Indirect"
12361      `%a0@' through `%a7@'
12362
12363 "Address Register Postincrement"
12364      `%a0@+' through `%a7@+'
12365
12366 "Address Register Predecrement"
12367      `%a0@-' through `%a7@-'
12368
12369 "Indirect Plus Offset"
12370      `APC@(NUMBER)'
12371
12372 "Index"
12373      `APC@(NUMBER,REGISTER:SIZE:SCALE)'
12374
12375      The NUMBER may be omitted.
12376
12377 "Postindex"
12378      `APC@(NUMBER)@(ONUMBER,REGISTER:SIZE:SCALE)'
12379
12380      The ONUMBER or the REGISTER, but not both, may be omitted.
12381
12382 "Preindex"
12383      `APC@(NUMBER,REGISTER:SIZE:SCALE)@(ONUMBER)'
12384
12385      The NUMBER may be omitted.  Omitting the REGISTER produces the
12386      Postindex addressing mode.
12387
12388 "Absolute"
12389      `SYMBOL', or `DIGITS', optionally followed by `:b', `:w', or `:l'.
12390
12391 \1f
12392 File: as.info,  Node: M68K-Moto-Syntax,  Next: M68K-Float,  Prev: M68K-Syntax,  Up: M68K-Dependent
12393
12394 9.23.3 Motorola Syntax
12395 ----------------------
12396
12397 The standard Motorola syntax for this chip differs from the syntax
12398 already discussed (*note Syntax: M68K-Syntax.).  `as' can accept
12399 Motorola syntax for operands, even if MIT syntax is used for other
12400 operands in the same instruction.  The two kinds of syntax are fully
12401 compatible.
12402
12403    In the following table APC stands for any of the address registers
12404 (`%a0' through `%a7'), the program counter (`%pc'), the zero-address
12405 relative to the program counter (`%zpc'), or a suppressed address
12406 register (`%za0' through `%za7').  The use of SIZE means one of `w' or
12407 `l', and it may always be omitted along with the leading dot.  The use
12408 of SCALE means one of `1', `2', `4', or `8', and it may always be
12409 omitted along with the leading asterisk.
12410
12411    The following additional addressing modes are understood:
12412
12413 "Address Register Indirect"
12414      `(%a0)' through `(%a7)'
12415      `%a7' is also known as `%sp', i.e., the Stack Pointer.  `%a6' is
12416      also known as `%fp', the Frame Pointer.
12417
12418 "Address Register Postincrement"
12419      `(%a0)+' through `(%a7)+'
12420
12421 "Address Register Predecrement"
12422      `-(%a0)' through `-(%a7)'
12423
12424 "Indirect Plus Offset"
12425      `NUMBER(%A0)' through `NUMBER(%A7)', or `NUMBER(%PC)'.
12426
12427      The NUMBER may also appear within the parentheses, as in
12428      `(NUMBER,%A0)'.  When used with the PC, the NUMBER may be omitted
12429      (with an address register, omitting the NUMBER produces Address
12430      Register Indirect mode).
12431
12432 "Index"
12433      `NUMBER(APC,REGISTER.SIZE*SCALE)'
12434
12435      The NUMBER may be omitted, or it may appear within the
12436      parentheses.  The APC may be omitted.  The REGISTER and the APC
12437      may appear in either order.  If both APC and REGISTER are address
12438      registers, and the SIZE and SCALE are omitted, then the first
12439      register is taken as the base register, and the second as the
12440      index register.
12441
12442 "Postindex"
12443      `([NUMBER,APC],REGISTER.SIZE*SCALE,ONUMBER)'
12444
12445      The ONUMBER, or the REGISTER, or both, may be omitted.  Either the
12446      NUMBER or the APC may be omitted, but not both.
12447
12448 "Preindex"
12449      `([NUMBER,APC,REGISTER.SIZE*SCALE],ONUMBER)'
12450
12451      The NUMBER, or the APC, or the REGISTER, or any two of them, may
12452      be omitted.  The ONUMBER may be omitted.  The REGISTER and the APC
12453      may appear in either order.  If both APC and REGISTER are address
12454      registers, and the SIZE and SCALE are omitted, then the first
12455      register is taken as the base register, and the second as the
12456      index register.
12457
12458 \1f
12459 File: as.info,  Node: M68K-Float,  Next: M68K-Directives,  Prev: M68K-Moto-Syntax,  Up: M68K-Dependent
12460
12461 9.23.4 Floating Point
12462 ---------------------
12463
12464 Packed decimal (P) format floating literals are not supported.  Feel
12465 free to add the code!
12466
12467    The floating point formats generated by directives are these.
12468
12469 `.float'
12470      `Single' precision floating point constants.
12471
12472 `.double'
12473      `Double' precision floating point constants.
12474
12475 `.extend'
12476 `.ldouble'
12477      `Extended' precision (`long double') floating point constants.
12478
12479 \1f
12480 File: as.info,  Node: M68K-Directives,  Next: M68K-opcodes,  Prev: M68K-Float,  Up: M68K-Dependent
12481
12482 9.23.5 680x0 Machine Directives
12483 -------------------------------
12484
12485 In order to be compatible with the Sun assembler the 680x0 assembler
12486 understands the following directives.
12487
12488 `.data1'
12489      This directive is identical to a `.data 1' directive.
12490
12491 `.data2'
12492      This directive is identical to a `.data 2' directive.
12493
12494 `.even'
12495      This directive is a special case of the `.align' directive; it
12496      aligns the output to an even byte boundary.
12497
12498 `.skip'
12499      This directive is identical to a `.space' directive.
12500
12501 `.arch NAME'
12502      Select the target architecture and extension features.  Valid
12503      values for NAME are the same as for the `-march' command line
12504      option.  This directive cannot be specified after any instructions
12505      have been assembled.  If it is given multiple times, or in
12506      conjunction with the `-march' option, all uses must be for the
12507      same architecture and extension set.
12508
12509 `.cpu NAME'
12510      Select the target cpu.  Valid valuse for NAME are the same as for
12511      the `-mcpu' command line option.  This directive cannot be
12512      specified after any instructions have been assembled.  If it is
12513      given multiple times, or in conjunction with the `-mopt' option,
12514      all uses must be for the same cpu.
12515
12516
12517 \1f
12518 File: as.info,  Node: M68K-opcodes,  Prev: M68K-Directives,  Up: M68K-Dependent
12519
12520 9.23.6 Opcodes
12521 --------------
12522
12523 * Menu:
12524
12525 * M68K-Branch::                 Branch Improvement
12526 * M68K-Chars::                  Special Characters
12527
12528 \1f
12529 File: as.info,  Node: M68K-Branch,  Next: M68K-Chars,  Up: M68K-opcodes
12530
12531 9.23.6.1 Branch Improvement
12532 ...........................
12533
12534 Certain pseudo opcodes are permitted for branch instructions.  They
12535 expand to the shortest branch instruction that reach the target.
12536 Generally these mnemonics are made by substituting `j' for `b' at the
12537 start of a Motorola mnemonic.
12538
12539    The following table summarizes the pseudo-operations.  A `*' flags
12540 cases that are more fully described after the table:
12541
12542                Displacement
12543                +------------------------------------------------------------
12544                |                68020           68000/10, not PC-relative OK
12545      Pseudo-Op |BYTE    WORD    LONG            ABSOLUTE LONG JUMP    **
12546                +------------------------------------------------------------
12547           jbsr |bsrs    bsrw    bsrl            jsr
12548            jra |bras    braw    bral            jmp
12549      *     jXX |bXXs    bXXw    bXXl            bNXs;jmp
12550      *    dbXX | N/A    dbXXw   dbXX;bras;bral  dbXX;bras;jmp
12551           fjXX | N/A    fbXXw   fbXXl            N/A
12552
12553      XX: condition
12554      NX: negative of condition XX
12555                        `*'--see full description below
12556          `**'--this expansion mode is disallowed by `--pcrel'
12557
12558 `jbsr'
12559 `jra'
12560      These are the simplest jump pseudo-operations; they always map to
12561      one particular machine instruction, depending on the displacement
12562      to the branch target.  This instruction will be a byte or word
12563      branch is that is sufficient.  Otherwise, a long branch will be
12564      emitted if available.  If no long branches are available and the
12565      `--pcrel' option is not given, an absolute long jump will be
12566      emitted instead.  If no long branches are available, the `--pcrel'
12567      option is given, and a word branch cannot reach the target, an
12568      error message is generated.
12569
12570      In addition to standard branch operands, `as' allows these
12571      pseudo-operations to have all operands that are allowed for jsr
12572      and jmp, substituting these instructions if the operand given is
12573      not valid for a branch instruction.
12574
12575 `jXX'
12576      Here, `jXX' stands for an entire family of pseudo-operations,
12577      where XX is a conditional branch or condition-code test.  The full
12578      list of pseudo-ops in this family is:
12579            jhi   jls   jcc   jcs   jne   jeq   jvc
12580            jvs   jpl   jmi   jge   jlt   jgt   jle
12581
12582      Usually, each of these pseudo-operations expands to a single branch
12583      instruction.  However, if a word branch is not sufficient, no long
12584      branches are available, and the `--pcrel' option is not given, `as'
12585      issues a longer code fragment in terms of NX, the opposite
12586      condition to XX.  For example, under these conditions:
12587               jXX foo
12588      gives
12589                bNXs oof
12590                jmp foo
12591            oof:
12592
12593 `dbXX'
12594      The full family of pseudo-operations covered here is
12595            dbhi   dbls   dbcc   dbcs   dbne   dbeq   dbvc
12596            dbvs   dbpl   dbmi   dbge   dblt   dbgt   dble
12597            dbf    dbra   dbt
12598
12599      Motorola `dbXX' instructions allow word displacements only.  When
12600      a word displacement is sufficient, each of these pseudo-operations
12601      expands to the corresponding Motorola instruction.  When a word
12602      displacement is not sufficient and long branches are available,
12603      when the source reads `dbXX foo', `as' emits
12604                dbXX oo1
12605                bras oo2
12606            oo1:bral foo
12607            oo2:
12608
12609      If, however, long branches are not available and the `--pcrel'
12610      option is not given, `as' emits
12611                dbXX oo1
12612                bras oo2
12613            oo1:jmp foo
12614            oo2:
12615
12616 `fjXX'
12617      This family includes
12618            fjne   fjeq   fjge   fjlt   fjgt   fjle   fjf
12619            fjt    fjgl   fjgle  fjnge  fjngl  fjngle fjngt
12620            fjnle  fjnlt  fjoge  fjogl  fjogt  fjole  fjolt
12621            fjor   fjseq  fjsf   fjsne  fjst   fjueq  fjuge
12622            fjugt  fjule  fjult  fjun
12623
12624      Each of these pseudo-operations always expands to a single Motorola
12625      coprocessor branch instruction, word or long.  All Motorola
12626      coprocessor branch instructions allow both word and long
12627      displacements.
12628
12629
12630 \1f
12631 File: as.info,  Node: M68K-Chars,  Prev: M68K-Branch,  Up: M68K-opcodes
12632
12633 9.23.6.2 Special Characters
12634 ...........................
12635
12636 Line comments are introduced by the `|' character appearing anywhere on
12637 a line, unless the `--bitwise-or' command line option has been
12638 specified.
12639
12640    An asterisk (`*') as the first character on a line marks the start
12641 of a line comment as well.
12642
12643    A hash character (`#') as the first character on a line also marks
12644 the start of a line comment, but in this case it could also be a
12645 logical line number directive (*note Comments::) or a preprocessor
12646 control command (*note Preprocessing::).  If the hash character appears
12647 elsewhere on a line it is used to introduce an immediate value.  (This
12648 is for compatibility with Sun's assembler).
12649
12650    Multiple statements on the same line can appear if they are separated
12651 by the `;' character.
12652
12653 \1f
12654 File: as.info,  Node: M68HC11-Dependent,  Next: MicroBlaze-Dependent,  Prev: M68K-Dependent,  Up: Machine Dependencies
12655
12656 9.24 M68HC11 and M68HC12 Dependent Features
12657 ===========================================
12658
12659 * Menu:
12660
12661 * M68HC11-Opts::                   M68HC11 and M68HC12 Options
12662 * M68HC11-Syntax::                 Syntax
12663 * M68HC11-Modifiers::              Symbolic Operand Modifiers
12664 * M68HC11-Directives::             Assembler Directives
12665 * M68HC11-Float::                  Floating Point
12666 * M68HC11-opcodes::                Opcodes
12667
12668 \1f
12669 File: as.info,  Node: M68HC11-Opts,  Next: M68HC11-Syntax,  Up: M68HC11-Dependent
12670
12671 9.24.1 M68HC11 and M68HC12 Options
12672 ----------------------------------
12673
12674 The Motorola 68HC11 and 68HC12 version of `as' have a few machine
12675 dependent options.
12676
12677 `-m68hc11'
12678      This option switches the assembler into the M68HC11 mode. In this
12679      mode, the assembler only accepts 68HC11 operands and mnemonics. It
12680      produces code for the 68HC11.
12681
12682 `-m68hc12'
12683      This option switches the assembler into the M68HC12 mode. In this
12684      mode, the assembler also accepts 68HC12 operands and mnemonics. It
12685      produces code for the 68HC12. A few 68HC11 instructions are
12686      replaced by some 68HC12 instructions as recommended by Motorola
12687      specifications.
12688
12689 `-m68hcs12'
12690      This option switches the assembler into the M68HCS12 mode.  This
12691      mode is similar to `-m68hc12' but specifies to assemble for the
12692      68HCS12 series.  The only difference is on the assembling of the
12693      `movb' and `movw' instruction when a PC-relative operand is used.
12694
12695 `-mm9s12x'
12696      This option switches the assembler into the M9S12X mode.  This
12697      mode is similar to `-m68hc12' but specifies to assemble for the
12698      S12X series which is a superset of the HCS12.
12699
12700 `-mm9s12xg'
12701      This option switches the assembler into the XGATE mode for the RISC
12702      co-processor featured on some S12X-family chips.
12703
12704 `--xgate-ramoffset'
12705      This option instructs the linker to offset RAM addresses from S12X
12706      address space into XGATE address space.
12707
12708 `-mshort'
12709      This option controls the ABI and indicates to use a 16-bit integer
12710      ABI.  It has no effect on the assembled instructions.  This is the
12711      default.
12712
12713 `-mlong'
12714      This option controls the ABI and indicates to use a 32-bit integer
12715      ABI.
12716
12717 `-mshort-double'
12718      This option controls the ABI and indicates to use a 32-bit float
12719      ABI.  This is the default.
12720
12721 `-mlong-double'
12722      This option controls the ABI and indicates to use a 64-bit float
12723      ABI.
12724
12725 `--strict-direct-mode'
12726      You can use the `--strict-direct-mode' option to disable the
12727      automatic translation of direct page mode addressing into extended
12728      mode when the instruction does not support direct mode.  For
12729      example, the `clr' instruction does not support direct page mode
12730      addressing. When it is used with the direct page mode, `as' will
12731      ignore it and generate an absolute addressing.  This option
12732      prevents `as' from doing this, and the wrong usage of the direct
12733      page mode will raise an error.
12734
12735 `--short-branches'
12736      The `--short-branches' option turns off the translation of
12737      relative branches into absolute branches when the branch offset is
12738      out of range. By default `as' transforms the relative branch
12739      (`bsr', `bgt', `bge', `beq', `bne', `ble', `blt', `bhi', `bcc',
12740      `bls', `bcs', `bmi', `bvs', `bvs', `bra') into an absolute branch
12741      when the offset is out of the -128 .. 127 range.  In that case,
12742      the `bsr' instruction is translated into a `jsr', the `bra'
12743      instruction is translated into a `jmp' and the conditional
12744      branches instructions are inverted and followed by a `jmp'. This
12745      option disables these translations and `as' will generate an error
12746      if a relative branch is out of range. This option does not affect
12747      the optimization associated to the `jbra', `jbsr' and `jbXX'
12748      pseudo opcodes.
12749
12750 `--force-long-branches'
12751      The `--force-long-branches' option forces the translation of
12752      relative branches into absolute branches. This option does not
12753      affect the optimization associated to the `jbra', `jbsr' and
12754      `jbXX' pseudo opcodes.
12755
12756 `--print-insn-syntax'
12757      You can use the `--print-insn-syntax' option to obtain the syntax
12758      description of the instruction when an error is detected.
12759
12760 `--print-opcodes'
12761      The `--print-opcodes' option prints the list of all the
12762      instructions with their syntax. The first item of each line
12763      represents the instruction name and the rest of the line indicates
12764      the possible operands for that instruction. The list is printed in
12765      alphabetical order. Once the list is printed `as' exits.
12766
12767 `--generate-example'
12768      The `--generate-example' option is similar to `--print-opcodes'
12769      but it generates an example for each instruction instead.
12770
12771 \1f
12772 File: as.info,  Node: M68HC11-Syntax,  Next: M68HC11-Modifiers,  Prev: M68HC11-Opts,  Up: M68HC11-Dependent
12773
12774 9.24.2 Syntax
12775 -------------
12776
12777 In the M68HC11 syntax, the instruction name comes first and it may be
12778 followed by one or several operands (up to three). Operands are
12779 separated by comma (`,'). In the normal mode, `as' will complain if too
12780 many operands are specified for a given instruction. In the MRI mode
12781 (turned on with `-M' option), it will treat them as comments. Example:
12782
12783      inx
12784      lda  #23
12785      bset 2,x #4
12786      brclr *bot #8 foo
12787
12788    The presence of a `;' character or a `!' character anywhere on a
12789 line indicates the start of a comment that extends to the end of that
12790 line.
12791
12792    A `*' or a `#' character at the start of a line also introduces a
12793 line comment, but these characters do not work elsewhere on the line.
12794 If the first character of the line is a `#' then as well as starting a
12795 comment, the line could also be logical line number directive (*note
12796 Comments::) or a preprocessor control command (*note Preprocessing::).
12797
12798    The M68HC11 assembler does not currently support a line separator
12799 character.
12800
12801    The following addressing modes are understood for 68HC11 and 68HC12:
12802 "Immediate"
12803      `#NUMBER'
12804
12805 "Address Register"
12806      `NUMBER,X', `NUMBER,Y'
12807
12808      The NUMBER may be omitted in which case 0 is assumed.
12809
12810 "Direct Addressing mode"
12811      `*SYMBOL', or `*DIGITS'
12812
12813 "Absolute"
12814      `SYMBOL', or `DIGITS'
12815
12816    The M68HC12 has other more complex addressing modes. All of them are
12817 supported and they are represented below:
12818
12819 "Constant Offset Indexed Addressing Mode"
12820      `NUMBER,REG'
12821
12822      The NUMBER may be omitted in which case 0 is assumed.  The
12823      register can be either `X', `Y', `SP' or `PC'.  The assembler will
12824      use the smaller post-byte definition according to the constant
12825      value (5-bit constant offset, 9-bit constant offset or 16-bit
12826      constant offset).  If the constant is not known by the assembler
12827      it will use the 16-bit constant offset post-byte and the value
12828      will be resolved at link time.
12829
12830 "Offset Indexed Indirect"
12831      `[NUMBER,REG]'
12832
12833      The register can be either `X', `Y', `SP' or `PC'.
12834
12835 "Auto Pre-Increment/Pre-Decrement/Post-Increment/Post-Decrement"
12836      `NUMBER,-REG' `NUMBER,+REG' `NUMBER,REG-' `NUMBER,REG+'
12837
12838      The number must be in the range `-8'..`+8' and must not be 0.  The
12839      register can be either `X', `Y', `SP' or `PC'.
12840
12841 "Accumulator Offset"
12842      `ACC,REG'
12843
12844      The accumulator register can be either `A', `B' or `D'.  The
12845      register can be either `X', `Y', `SP' or `PC'.
12846
12847 "Accumulator D offset indexed-indirect"
12848      `[D,REG]'
12849
12850      The register can be either `X', `Y', `SP' or `PC'.
12851
12852
12853    For example:
12854
12855      ldab 1024,sp
12856      ldd [10,x]
12857      orab 3,+x
12858      stab -2,y-
12859      ldx a,pc
12860      sty [d,sp]
12861
12862 \1f
12863 File: as.info,  Node: M68HC11-Modifiers,  Next: M68HC11-Directives,  Prev: M68HC11-Syntax,  Up: M68HC11-Dependent
12864
12865 9.24.3 Symbolic Operand Modifiers
12866 ---------------------------------
12867
12868 The assembler supports several modifiers when using symbol addresses in
12869 68HC11 and 68HC12 instruction operands.  The general syntax is the
12870 following:
12871
12872      %modifier(symbol)
12873
12874 `%addr'
12875      This modifier indicates to the assembler and linker to use the
12876      16-bit physical address corresponding to the symbol.  This is
12877      intended to be used on memory window systems to map a symbol in
12878      the memory bank window.  If the symbol is in a memory expansion
12879      part, the physical address corresponds to the symbol address
12880      within the memory bank window.  If the symbol is not in a memory
12881      expansion part, this is the symbol address (using or not using the
12882      %addr modifier has no effect in that case).
12883
12884 `%page'
12885      This modifier indicates to use the memory page number corresponding
12886      to the symbol.  If the symbol is in a memory expansion part, its
12887      page number is computed by the linker as a number used to map the
12888      page containing the symbol in the memory bank window.  If the
12889      symbol is not in a memory expansion part, the page number is 0.
12890
12891 `%hi'
12892      This modifier indicates to use the 8-bit high part of the physical
12893      address of the symbol.
12894
12895 `%lo'
12896      This modifier indicates to use the 8-bit low part of the physical
12897      address of the symbol.
12898
12899
12900    For example a 68HC12 call to a function `foo_example' stored in
12901 memory expansion part could be written as follows:
12902
12903      call %addr(foo_example),%page(foo_example)
12904
12905    and this is equivalent to
12906
12907      call foo_example
12908
12909    And for 68HC11 it could be written as follows:
12910
12911      ldab #%page(foo_example)
12912      stab _page_switch
12913      jsr  %addr(foo_example)
12914
12915 \1f
12916 File: as.info,  Node: M68HC11-Directives,  Next: M68HC11-Float,  Prev: M68HC11-Modifiers,  Up: M68HC11-Dependent
12917
12918 9.24.4 Assembler Directives
12919 ---------------------------
12920
12921 The 68HC11 and 68HC12 version of `as' have the following specific
12922 assembler directives:
12923
12924 `.relax'
12925      The relax directive is used by the `GNU Compiler' to emit a
12926      specific relocation to mark a group of instructions for linker
12927      relaxation.  The sequence of instructions within the group must be
12928      known to the linker so that relaxation can be performed.
12929
12930 `.mode [mshort|mlong|mshort-double|mlong-double]'
12931      This directive specifies the ABI.  It overrides the `-mshort',
12932      `-mlong', `-mshort-double' and `-mlong-double' options.
12933
12934 `.far SYMBOL'
12935      This directive marks the symbol as a `far' symbol meaning that it
12936      uses a `call/rtc' calling convention as opposed to `jsr/rts'.
12937      During a final link, the linker will identify references to the
12938      `far' symbol and will verify the proper calling convention.
12939
12940 `.interrupt SYMBOL'
12941      This directive marks the symbol as an interrupt entry point.  This
12942      information is then used by the debugger to correctly unwind the
12943      frame across interrupts.
12944
12945 `.xrefb SYMBOL'
12946      This directive is defined for compatibility with the
12947      `Specification for Motorola 8 and 16-Bit Assembly Language Input
12948      Standard' and is ignored.
12949
12950
12951 \1f
12952 File: as.info,  Node: M68HC11-Float,  Next: M68HC11-opcodes,  Prev: M68HC11-Directives,  Up: M68HC11-Dependent
12953
12954 9.24.5 Floating Point
12955 ---------------------
12956
12957 Packed decimal (P) format floating literals are not supported.  Feel
12958 free to add the code!
12959
12960    The floating point formats generated by directives are these.
12961
12962 `.float'
12963      `Single' precision floating point constants.
12964
12965 `.double'
12966      `Double' precision floating point constants.
12967
12968 `.extend'
12969 `.ldouble'
12970      `Extended' precision (`long double') floating point constants.
12971
12972 \1f
12973 File: as.info,  Node: M68HC11-opcodes,  Prev: M68HC11-Float,  Up: M68HC11-Dependent
12974
12975 9.24.6 Opcodes
12976 --------------
12977
12978 * Menu:
12979
12980 * M68HC11-Branch::                 Branch Improvement
12981
12982 \1f
12983 File: as.info,  Node: M68HC11-Branch,  Up: M68HC11-opcodes
12984
12985 9.24.6.1 Branch Improvement
12986 ...........................
12987
12988 Certain pseudo opcodes are permitted for branch instructions.  They
12989 expand to the shortest branch instruction that reach the target.
12990 Generally these mnemonics are made by prepending `j' to the start of
12991 Motorola mnemonic. These pseudo opcodes are not affected by the
12992 `--short-branches' or `--force-long-branches' options.
12993
12994    The following table summarizes the pseudo-operations.
12995
12996                              Displacement Width
12997           +-------------------------------------------------------------+
12998           |                     Options                                 |
12999           |    --short-branches           --force-long-branches         |
13000           +--------------------------+----------------------------------+
13001        Op |BYTE             WORD     | BYTE          WORD               |
13002           +--------------------------+----------------------------------+
13003       bsr | bsr <pc-rel>    <error>  |               jsr <abs>          |
13004       bra | bra <pc-rel>    <error>  |               jmp <abs>          |
13005      jbsr | bsr <pc-rel>   jsr <abs> | bsr <pc-rel>  jsr <abs>          |
13006      jbra | bra <pc-rel>   jmp <abs> | bra <pc-rel>  jmp <abs>          |
13007       bXX | bXX <pc-rel>    <error>  |               bNX +3; jmp <abs>  |
13008      jbXX | bXX <pc-rel>   bNX +3;   | bXX <pc-rel>  bNX +3; jmp <abs>  |
13009           |                jmp <abs> |                                  |
13010           +--------------------------+----------------------------------+
13011      XX: condition
13012      NX: negative of condition XX
13013
13014 `jbsr'
13015 `jbra'
13016      These are the simplest jump pseudo-operations; they always map to
13017      one particular machine instruction, depending on the displacement
13018      to the branch target.
13019
13020 `jbXX'
13021      Here, `jbXX' stands for an entire family of pseudo-operations,
13022      where XX is a conditional branch or condition-code test.  The full
13023      list of pseudo-ops in this family is:
13024            jbcc   jbeq   jbge   jbgt   jbhi   jbvs   jbpl  jblo
13025            jbcs   jbne   jblt   jble   jbls   jbvc   jbmi
13026
13027      For the cases of non-PC relative displacements and long
13028      displacements, `as' issues a longer code fragment in terms of NX,
13029      the opposite condition to XX.  For example, for the non-PC
13030      relative case:
13031               jbXX foo
13032      gives
13033                bNXs oof
13034                jmp foo
13035            oof:
13036
13037
13038 \1f
13039 File: as.info,  Node: MicroBlaze-Dependent,  Next: MIPS-Dependent,  Prev: M68HC11-Dependent,  Up: Machine Dependencies
13040
13041 9.25 MicroBlaze Dependent Features
13042 ==================================
13043
13044    The Xilinx MicroBlaze processor family includes several variants,
13045 all using the same core instruction set.  This chapter covers features
13046 of the GNU assembler that are specific to the MicroBlaze architecture.
13047 For details about the MicroBlaze instruction set, please see the
13048 `MicroBlaze Processor Reference Guide (UG081)' available at
13049 www.xilinx.com.
13050
13051 * Menu:
13052
13053 * MicroBlaze Directives::           Directives for MicroBlaze Processors.
13054 * MicroBlaze Syntax::               Syntax for the MicroBlaze
13055
13056 \1f
13057 File: as.info,  Node: MicroBlaze Directives,  Next: MicroBlaze Syntax,  Up: MicroBlaze-Dependent
13058
13059 9.25.1 Directives
13060 -----------------
13061
13062 A number of assembler directives are available for MicroBlaze.
13063
13064 `.data8 EXPRESSION,...'
13065      This directive is an alias for `.byte'. Each expression is
13066      assembled into an eight-bit value.
13067
13068 `.data16 EXPRESSION,...'
13069      This directive is an alias for `.hword'. Each expression is
13070      assembled into an 16-bit value.
13071
13072 `.data32 EXPRESSION,...'
13073      This directive is an alias for `.word'. Each expression is
13074      assembled into an 32-bit value.
13075
13076 `.ent NAME[,LABEL]'
13077      This directive is an alias for `.func' denoting the start of
13078      function NAME at (optional) LABEL.
13079
13080 `.end NAME[,LABEL]'
13081      This directive is an alias for `.endfunc' denoting the end of
13082      function NAME.
13083
13084 `.gpword LABEL,...'
13085      This directive is an alias for `.rva'.  The resolved address of
13086      LABEL is stored in the data section.
13087
13088 `.weakext LABEL'
13089      Declare that LABEL is a weak external symbol.
13090
13091 `.rodata'
13092      Switch to .rodata section. Equivalent to `.section .rodata'
13093
13094 `.sdata2'
13095      Switch to .sdata2 section. Equivalent to `.section .sdata2'
13096
13097 `.sdata'
13098      Switch to .sdata section. Equivalent to `.section .sdata'
13099
13100 `.bss'
13101      Switch to .bss section. Equivalent to `.section .bss'
13102
13103 `.sbss'
13104      Switch to .sbss section. Equivalent to `.section .sbss'
13105
13106 \1f
13107 File: as.info,  Node: MicroBlaze Syntax,  Prev: MicroBlaze Directives,  Up: MicroBlaze-Dependent
13108
13109 9.25.2 Syntax for the MicroBlaze
13110 --------------------------------
13111
13112 * Menu:
13113
13114 * MicroBlaze-Chars::                Special Characters
13115
13116 \1f
13117 File: as.info,  Node: MicroBlaze-Chars,  Up: MicroBlaze Syntax
13118
13119 9.25.2.1 Special Characters
13120 ...........................
13121
13122 The presence of a `#' on a line indicates the start of a comment that
13123 extends to the end of the current line.
13124
13125    If a `#' appears as the first character of a line, the whole line is
13126 treated as a comment, but in this case the line can also be a logical
13127 line number directive (*note Comments::) or a preprocessor control
13128 command (*note Preprocessing::).
13129
13130    The `;' character can be used to separate statements on the same
13131 line.
13132
13133 \1f
13134 File: as.info,  Node: MIPS-Dependent,  Next: MMIX-Dependent,  Prev: MicroBlaze-Dependent,  Up: Machine Dependencies
13135
13136 9.26 MIPS Dependent Features
13137 ============================
13138
13139    GNU `as' for MIPS architectures supports several different MIPS
13140 processors, and MIPS ISA levels I through V, MIPS32, and MIPS64.  For
13141 information about the MIPS instruction set, see `MIPS RISC
13142 Architecture', by Kane and Heindrich (Prentice-Hall).  For an overview
13143 of MIPS assembly conventions, see "Appendix D: Assembly Language
13144 Programming" in the same work.
13145
13146 * Menu:
13147
13148 * MIPS Opts::           Assembler options
13149 * MIPS Object::         ECOFF object code
13150 * MIPS Stabs::          Directives for debugging information
13151 * MIPS ISA::            Directives to override the ISA level
13152 * MIPS symbol sizes::   Directives to override the size of symbols
13153 * MIPS autoextend::     Directives for extending MIPS 16 bit instructions
13154 * MIPS insn::           Directive to mark data as an instruction
13155 * MIPS option stack::   Directives to save and restore options
13156 * MIPS ASE instruction generation overrides:: Directives to control
13157                         generation of MIPS ASE instructions
13158 * MIPS floating-point:: Directives to override floating-point options
13159 * MIPS Syntax::         MIPS specific syntactical considerations
13160
13161 \1f
13162 File: as.info,  Node: MIPS Opts,  Next: MIPS Object,  Up: MIPS-Dependent
13163
13164 9.26.1 Assembler options
13165 ------------------------
13166
13167 The MIPS configurations of GNU `as' support these special options:
13168
13169 `-G NUM'
13170      This option sets the largest size of an object that can be
13171      referenced implicitly with the `gp' register.  It is only accepted
13172      for targets that use ECOFF format.  The default value is 8.
13173
13174 `-EB'
13175 `-EL'
13176      Any MIPS configuration of `as' can select big-endian or
13177      little-endian output at run time (unlike the other GNU development
13178      tools, which must be configured for one or the other).  Use `-EB'
13179      to select big-endian output, and `-EL' for little-endian.
13180
13181 `-KPIC'
13182      Generate SVR4-style PIC.  This option tells the assembler to
13183      generate SVR4-style position-independent macro expansions.  It
13184      also tells the assembler to mark the output file as PIC.
13185
13186 `-mvxworks-pic'
13187      Generate VxWorks PIC.  This option tells the assembler to generate
13188      VxWorks-style position-independent macro expansions.
13189
13190 `-mips1'
13191 `-mips2'
13192 `-mips3'
13193 `-mips4'
13194 `-mips5'
13195 `-mips32'
13196 `-mips32r2'
13197 `-mips64'
13198 `-mips64r2'
13199      Generate code for a particular MIPS Instruction Set Architecture
13200      level.  `-mips1' corresponds to the R2000 and R3000 processors,
13201      `-mips2' to the R6000 processor, `-mips3' to the R4000 processor,
13202      and `-mips4' to the R8000 and R10000 processors.  `-mips5',
13203      `-mips32', `-mips32r2', `-mips64', and `-mips64r2' correspond to
13204      generic MIPS V, MIPS32, MIPS32 RELEASE 2, MIPS64, and MIPS64
13205      RELEASE 2 ISA processors, respectively.  You can also switch
13206      instruction sets during the assembly; see *Note Directives to
13207      override the ISA level: MIPS ISA.
13208
13209 `-mgp32'
13210 `-mfp32'
13211      Some macros have different expansions for 32-bit and 64-bit
13212      registers.  The register sizes are normally inferred from the ISA
13213      and ABI, but these flags force a certain group of registers to be
13214      treated as 32 bits wide at all times.  `-mgp32' controls the size
13215      of general-purpose registers and `-mfp32' controls the size of
13216      floating-point registers.
13217
13218      The `.set gp=32' and `.set fp=32' directives allow the size of
13219      registers to be changed for parts of an object. The default value
13220      is restored by `.set gp=default' and `.set fp=default'.
13221
13222      On some MIPS variants there is a 32-bit mode flag; when this flag
13223      is set, 64-bit instructions generate a trap.  Also, some 32-bit
13224      OSes only save the 32-bit registers on a context switch, so it is
13225      essential never to use the 64-bit registers.
13226
13227 `-mgp64'
13228 `-mfp64'
13229      Assume that 64-bit registers are available.  This is provided in
13230      the interests of symmetry with `-mgp32' and `-mfp32'.
13231
13232      The `.set gp=64' and `.set fp=64' directives allow the size of
13233      registers to be changed for parts of an object. The default value
13234      is restored by `.set gp=default' and `.set fp=default'.
13235
13236 `-mips16'
13237 `-no-mips16'
13238      Generate code for the MIPS 16 processor.  This is equivalent to
13239      putting `.set mips16' at the start of the assembly file.
13240      `-no-mips16' turns off this option.
13241
13242 `-mmicromips'
13243 `-mno-micromips'
13244      Generate code for the microMIPS processor.  This is equivalent to
13245      putting `.set micromips' at the start of the assembly file.
13246      `-mno-micromips' turns off this option.  This is equivalent to
13247      putting `.set nomicromips' at the start of the assembly file.
13248
13249 `-msmartmips'
13250 `-mno-smartmips'
13251      Enables the SmartMIPS extensions to the MIPS32 instruction set,
13252      which provides a number of new instructions which target smartcard
13253      and cryptographic applications.  This is equivalent to putting
13254      `.set smartmips' at the start of the assembly file.
13255      `-mno-smartmips' turns off this option.
13256
13257 `-mips3d'
13258 `-no-mips3d'
13259      Generate code for the MIPS-3D Application Specific Extension.
13260      This tells the assembler to accept MIPS-3D instructions.
13261      `-no-mips3d' turns off this option.
13262
13263 `-mdmx'
13264 `-no-mdmx'
13265      Generate code for the MDMX Application Specific Extension.  This
13266      tells the assembler to accept MDMX instructions.  `-no-mdmx' turns
13267      off this option.
13268
13269 `-mdsp'
13270 `-mno-dsp'
13271      Generate code for the DSP Release 1 Application Specific Extension.
13272      This tells the assembler to accept DSP Release 1 instructions.
13273      `-mno-dsp' turns off this option.
13274
13275 `-mdspr2'
13276 `-mno-dspr2'
13277      Generate code for the DSP Release 2 Application Specific Extension.
13278      This option implies -mdsp.  This tells the assembler to accept DSP
13279      Release 2 instructions.  `-mno-dspr2' turns off this option.
13280
13281 `-mmt'
13282 `-mno-mt'
13283      Generate code for the MT Application Specific Extension.  This
13284      tells the assembler to accept MT instructions.  `-mno-mt' turns
13285      off this option.
13286
13287 `-mmcu'
13288 `-mno-mcu'
13289      Generate code for the MCU Application Specific Extension.  This
13290      tells the assembler to accept MCU instructions.  `-mno-mcu' turns
13291      off this option.
13292
13293 `-mfix7000'
13294 `-mno-fix7000'
13295      Cause nops to be inserted if the read of the destination register
13296      of an mfhi or mflo instruction occurs in the following two
13297      instructions.
13298
13299 `-mfix-loongson2f-jump'
13300 `-mno-fix-loongson2f-jump'
13301      Eliminate instruction fetch from outside 256M region to work
13302      around the Loongson2F `jump' instructions.  Without it, under
13303      extreme cases, the kernel may crash.  The issue has been solved in
13304      latest processor batches, but this fix has no side effect to them.
13305
13306 `-mfix-loongson2f-nop'
13307 `-mno-fix-loongson2f-nop'
13308      Replace nops by `or at,at,zero' to work around the Loongson2F
13309      `nop' errata.  Without it, under extreme cases, cpu might
13310      deadlock.  The issue has been solved in latest loongson2f batches,
13311      but this fix has no side effect to them.
13312
13313 `-mfix-vr4120'
13314 `-mno-fix-vr4120'
13315      Insert nops to work around certain VR4120 errata.  This option is
13316      intended to be used on GCC-generated code: it is not designed to
13317      catch all problems in hand-written assembler code.
13318
13319 `-mfix-vr4130'
13320 `-mno-fix-vr4130'
13321      Insert nops to work around the VR4130 `mflo'/`mfhi' errata.
13322
13323 `-mfix-24k'
13324 `-mno-fix-24k'
13325      Insert nops to work around the 24K `eret'/`deret' errata.
13326
13327 `-mfix-cn63xxp1'
13328 `-mno-fix-cn63xxp1'
13329      Replace `pref' hints 0 - 4 and 6 - 24 with hint 28 to work around
13330      certain CN63XXP1 errata.
13331
13332 `-m4010'
13333 `-no-m4010'
13334      Generate code for the LSI R4010 chip.  This tells the assembler to
13335      accept the R4010 specific instructions (`addciu', `ffc', etc.),
13336      and to not schedule `nop' instructions around accesses to the `HI'
13337      and `LO' registers.  `-no-m4010' turns off this option.
13338
13339 `-m4650'
13340 `-no-m4650'
13341      Generate code for the MIPS R4650 chip.  This tells the assembler
13342      to accept the `mad' and `madu' instruction, and to not schedule
13343      `nop' instructions around accesses to the `HI' and `LO' registers.
13344      `-no-m4650' turns off this option.
13345
13346 `-m3900'
13347 `-no-m3900'
13348 `-m4100'
13349 `-no-m4100'
13350      For each option `-mNNNN', generate code for the MIPS RNNNN chip.
13351      This tells the assembler to accept instructions specific to that
13352      chip, and to schedule for that chip's hazards.
13353
13354 `-march=CPU'
13355      Generate code for a particular MIPS cpu.  It is exactly equivalent
13356      to `-mCPU', except that there are more value of CPU understood.
13357      Valid CPU value are:
13358
13359           2000, 3000, 3900, 4000, 4010, 4100, 4111, vr4120, vr4130,
13360           vr4181, 4300, 4400, 4600, 4650, 5000, rm5200, rm5230, rm5231,
13361           rm5261, rm5721, vr5400, vr5500, 6000, rm7000, 8000, rm9000,
13362           10000, 12000, 14000, 16000, 4kc, 4km, 4kp, 4ksc, 4kec, 4kem,
13363           4kep, 4ksd, m4k, m4kp, m14k, m14kc, m14ke, m14kec, 24kc,
13364           24kf2_1, 24kf, 24kf1_1, 24kec, 24kef2_1, 24kef, 24kef1_1,
13365           34kc, 34kf2_1, 34kf, 34kf1_1, 74kc, 74kf2_1, 74kf, 74kf1_1,
13366           74kf3_2, 1004kc, 1004kf2_1, 1004kf, 1004kf1_1, 5kc, 5kf, 20kc,
13367           25kf, sb1, sb1a, loongson2e, loongson2f, loongson3a, octeon,
13368           octeon+, octeon2, xlr, xlp
13369
13370      For compatibility reasons, `Nx' and `Bfx' are accepted as synonyms
13371      for `Nf1_1'.  These values are deprecated.
13372
13373 `-mtune=CPU'
13374      Schedule and tune for a particular MIPS cpu.  Valid CPU values are
13375      identical to `-march=CPU'.
13376
13377 `-mabi=ABI'
13378      Record which ABI the source code uses.  The recognized arguments
13379      are: `32', `n32', `o64', `64' and `eabi'.
13380
13381 `-msym32'
13382 `-mno-sym32'
13383      Equivalent to adding `.set sym32' or `.set nosym32' to the
13384      beginning of the assembler input.  *Note MIPS symbol sizes::.
13385
13386 `-nocpp'
13387      This option is ignored.  It is accepted for command-line
13388      compatibility with other assemblers, which use it to turn off C
13389      style preprocessing.  With GNU `as', there is no need for
13390      `-nocpp', because the GNU assembler itself never runs the C
13391      preprocessor.
13392
13393 `-msoft-float'
13394 `-mhard-float'
13395      Disable or enable floating-point instructions.  Note that by
13396      default floating-point instructions are always allowed even with
13397      CPU targets that don't have support for these instructions.
13398
13399 `-msingle-float'
13400 `-mdouble-float'
13401      Disable or enable double-precision floating-point operations.  Note
13402      that by default double-precision floating-point operations are
13403      always allowed even with CPU targets that don't have support for
13404      these operations.
13405
13406 `--construct-floats'
13407 `--no-construct-floats'
13408      The `--no-construct-floats' option disables the construction of
13409      double width floating point constants by loading the two halves of
13410      the value into the two single width floating point registers that
13411      make up the double width register.  This feature is useful if the
13412      processor support the FR bit in its status  register, and this bit
13413      is known (by the programmer) to be set.  This bit prevents the
13414      aliasing of the double width register by the single width
13415      registers.
13416
13417      By default `--construct-floats' is selected, allowing construction
13418      of these floating point constants.
13419
13420 `--trap'
13421 `--no-break'
13422      `as' automatically macro expands certain division and
13423      multiplication instructions to check for overflow and division by
13424      zero.  This option causes `as' to generate code to take a trap
13425      exception rather than a break exception when an error is detected.
13426      The trap instructions are only supported at Instruction Set
13427      Architecture level 2 and higher.
13428
13429 `--break'
13430 `--no-trap'
13431      Generate code to take a break exception rather than a trap
13432      exception when an error is detected.  This is the default.
13433
13434 `-mpdr'
13435 `-mno-pdr'
13436      Control generation of `.pdr' sections.  Off by default on IRIX, on
13437      elsewhere.
13438
13439 `-mshared'
13440 `-mno-shared'
13441      When generating code using the Unix calling conventions (selected
13442      by `-KPIC' or `-mcall_shared'), gas will normally generate code
13443      which can go into a shared library.  The `-mno-shared' option
13444      tells gas to generate code which uses the calling convention, but
13445      can not go into a shared library.  The resulting code is slightly
13446      more efficient.  This option only affects the handling of the
13447      `.cpload' and `.cpsetup' pseudo-ops.
13448
13449 \1f
13450 File: as.info,  Node: MIPS Object,  Next: MIPS Stabs,  Prev: MIPS Opts,  Up: MIPS-Dependent
13451
13452 9.26.2 MIPS ECOFF object code
13453 -----------------------------
13454
13455 Assembling for a MIPS ECOFF target supports some additional sections
13456 besides the usual `.text', `.data' and `.bss'.  The additional sections
13457 are `.rdata', used for read-only data, `.sdata', used for small data,
13458 and `.sbss', used for small common objects.
13459
13460    When assembling for ECOFF, the assembler uses the `$gp' (`$28')
13461 register to form the address of a "small object".  Any object in the
13462 `.sdata' or `.sbss' sections is considered "small" in this sense.  For
13463 external objects, or for objects in the `.bss' section, you can use the
13464 `gcc' `-G' option to control the size of objects addressed via `$gp';
13465 the default value is 8, meaning that a reference to any object eight
13466 bytes or smaller uses `$gp'.  Passing `-G 0' to `as' prevents it from
13467 using the `$gp' register on the basis of object size (but the assembler
13468 uses `$gp' for objects in `.sdata' or `sbss' in any case).  The size of
13469 an object in the `.bss' section is set by the `.comm' or `.lcomm'
13470 directive that defines it.  The size of an external object may be set
13471 with the `.extern' directive.  For example, `.extern sym,4' declares
13472 that the object at `sym' is 4 bytes in length, whie leaving `sym'
13473 otherwise undefined.
13474
13475    Using small ECOFF objects requires linker support, and assumes that
13476 the `$gp' register is correctly initialized (normally done
13477 automatically by the startup code).  MIPS ECOFF assembly code must not
13478 modify the `$gp' register.
13479
13480 \1f
13481 File: as.info,  Node: MIPS Stabs,  Next: MIPS ISA,  Prev: MIPS Object,  Up: MIPS-Dependent
13482
13483 9.26.3 Directives for debugging information
13484 -------------------------------------------
13485
13486 MIPS ECOFF `as' supports several directives used for generating
13487 debugging information which are not support by traditional MIPS
13488 assemblers.  These are `.def', `.endef', `.dim', `.file', `.scl',
13489 `.size', `.tag', `.type', `.val', `.stabd', `.stabn', and `.stabs'.
13490 The debugging information generated by the three `.stab' directives can
13491 only be read by GDB, not by traditional MIPS debuggers (this
13492 enhancement is required to fully support C++ debugging).  These
13493 directives are primarily used by compilers, not assembly language
13494 programmers!
13495
13496 \1f
13497 File: as.info,  Node: MIPS symbol sizes,  Next: MIPS autoextend,  Prev: MIPS ISA,  Up: MIPS-Dependent
13498
13499 9.26.4 Directives to override the size of symbols
13500 -------------------------------------------------
13501
13502 The n64 ABI allows symbols to have any 64-bit value.  Although this
13503 provides a great deal of flexibility, it means that some macros have
13504 much longer expansions than their 32-bit counterparts.  For example,
13505 the non-PIC expansion of `dla $4,sym' is usually:
13506
13507      lui     $4,%highest(sym)
13508      lui     $1,%hi(sym)
13509      daddiu  $4,$4,%higher(sym)
13510      daddiu  $1,$1,%lo(sym)
13511      dsll32  $4,$4,0
13512      daddu   $4,$4,$1
13513
13514    whereas the 32-bit expansion is simply:
13515
13516      lui     $4,%hi(sym)
13517      daddiu  $4,$4,%lo(sym)
13518
13519    n64 code is sometimes constructed in such a way that all symbolic
13520 constants are known to have 32-bit values, and in such cases, it's
13521 preferable to use the 32-bit expansion instead of the 64-bit expansion.
13522
13523    You can use the `.set sym32' directive to tell the assembler that,
13524 from this point on, all expressions of the form `SYMBOL' or `SYMBOL +
13525 OFFSET' have 32-bit values.  For example:
13526
13527      .set sym32
13528      dla     $4,sym
13529      lw      $4,sym+16
13530      sw      $4,sym+0x8000($4)
13531
13532    will cause the assembler to treat `sym', `sym+16' and `sym+0x8000'
13533 as 32-bit values.  The handling of non-symbolic addresses is not
13534 affected.
13535
13536    The directive `.set nosym32' ends a `.set sym32' block and reverts
13537 to the normal behavior.  It is also possible to change the symbol size
13538 using the command-line options `-msym32' and `-mno-sym32'.
13539
13540    These options and directives are always accepted, but at present,
13541 they have no effect for anything other than n64.
13542
13543 \1f
13544 File: as.info,  Node: MIPS ISA,  Next: MIPS symbol sizes,  Prev: MIPS Stabs,  Up: MIPS-Dependent
13545
13546 9.26.5 Directives to override the ISA level
13547 -------------------------------------------
13548
13549 GNU `as' supports an additional directive to change the MIPS
13550 Instruction Set Architecture level on the fly: `.set mipsN'.  N should
13551 be a number from 0 to 5, or 32, 32r2, 64 or 64r2.  The values other
13552 than 0 make the assembler accept instructions for the corresponding ISA
13553 level, from that point on in the assembly.  `.set mipsN' affects not
13554 only which instructions are permitted, but also how certain macros are
13555 expanded.  `.set mips0' restores the ISA level to its original level:
13556 either the level you selected with command line options, or the default
13557 for your configuration.  You can use this feature to permit specific
13558 MIPS3 instructions while assembling in 32 bit mode.  Use this directive
13559 with care!
13560
13561    The `.set arch=CPU' directive provides even finer control.  It
13562 changes the effective CPU target and allows the assembler to use
13563 instructions specific to a particular CPU.  All CPUs supported by the
13564 `-march' command line option are also selectable by this directive.
13565 The original value is restored by `.set arch=default'.
13566
13567    The directive `.set mips16' puts the assembler into MIPS 16 mode, in
13568 which it will assemble instructions for the MIPS 16 processor.  Use
13569 `.set nomips16' to return to normal 32 bit mode.
13570
13571    Traditional MIPS assemblers do not support this directive.
13572
13573    The directive `.set micromips' puts the assembler into microMIPS
13574 mode, in which it will assemble instructions for the microMIPS
13575 processor.  Use `.set nomicromips' to return to normal 32 bit mode.
13576
13577    Traditional MIPS assemblers do not support this directive.
13578
13579 \1f
13580 File: as.info,  Node: MIPS autoextend,  Next: MIPS insn,  Prev: MIPS symbol sizes,  Up: MIPS-Dependent
13581
13582 9.26.6 Directives for extending MIPS 16 bit instructions
13583 --------------------------------------------------------
13584
13585 By default, MIPS 16 instructions are automatically extended to 32 bits
13586 when necessary.  The directive `.set noautoextend' will turn this off.
13587 When `.set noautoextend' is in effect, any 32 bit instruction must be
13588 explicitly extended with the `.e' modifier (e.g., `li.e $4,1000').  The
13589 directive `.set autoextend' may be used to once again automatically
13590 extend instructions when necessary.
13591
13592    This directive is only meaningful when in MIPS 16 mode.  Traditional
13593 MIPS assemblers do not support this directive.
13594
13595 \1f
13596 File: as.info,  Node: MIPS insn,  Next: MIPS option stack,  Prev: MIPS autoextend,  Up: MIPS-Dependent
13597
13598 9.26.7 Directive to mark data as an instruction
13599 -----------------------------------------------
13600
13601 The `.insn' directive tells `as' that the following data is actually
13602 instructions.  This makes a difference in MIPS 16 and microMIPS modes:
13603 when loading the address of a label which precedes instructions, `as'
13604 automatically adds 1 to the value, so that jumping to the loaded
13605 address will do the right thing.
13606
13607    The `.global' and `.globl' directives supported by `as' will by
13608 default mark the symbol as pointing to a region of data not code.  This
13609 means that, for example, any instructions following such a symbol will
13610 not be disassembled by `objdump' as it will regard them as data.  To
13611 change this behaviour an optional section name can be placed after the
13612 symbol name in the `.global' directive.  If this section exists and is
13613 known to be a code section, then the symbol will be marked as poiting at
13614 code not data.  Ie the syntax for the directive is:
13615
13616    `.global SYMBOL[ SECTION][, SYMBOL[ SECTION]] ...',
13617
13618    Here is a short example:
13619
13620              .global foo .text, bar, baz .data
13621      foo:
13622              nop
13623      bar:
13624              .word 0x0
13625      baz:
13626              .word 0x1
13627
13628 \1f
13629 File: as.info,  Node: MIPS option stack,  Next: MIPS ASE instruction generation overrides,  Prev: MIPS insn,  Up: MIPS-Dependent
13630
13631 9.26.8 Directives to save and restore options
13632 ---------------------------------------------
13633
13634 The directives `.set push' and `.set pop' may be used to save and
13635 restore the current settings for all the options which are controlled
13636 by `.set'.  The `.set push' directive saves the current settings on a
13637 stack.  The `.set pop' directive pops the stack and restores the
13638 settings.
13639
13640    These directives can be useful inside an macro which must change an
13641 option such as the ISA level or instruction reordering but does not want
13642 to change the state of the code which invoked the macro.
13643
13644    Traditional MIPS assemblers do not support these directives.
13645
13646 \1f
13647 File: as.info,  Node: MIPS ASE instruction generation overrides,  Next: MIPS floating-point,  Prev: MIPS option stack,  Up: MIPS-Dependent
13648
13649 9.26.9 Directives to control generation of MIPS ASE instructions
13650 ----------------------------------------------------------------
13651
13652 The directive `.set mips3d' makes the assembler accept instructions
13653 from the MIPS-3D Application Specific Extension from that point on in
13654 the assembly.  The `.set nomips3d' directive prevents MIPS-3D
13655 instructions from being accepted.
13656
13657    The directive `.set smartmips' makes the assembler accept
13658 instructions from the SmartMIPS Application Specific Extension to the
13659 MIPS32 ISA from that point on in the assembly.  The `.set nosmartmips'
13660 directive prevents SmartMIPS instructions from being accepted.
13661
13662    The directive `.set mdmx' makes the assembler accept instructions
13663 from the MDMX Application Specific Extension from that point on in the
13664 assembly.  The `.set nomdmx' directive prevents MDMX instructions from
13665 being accepted.
13666
13667    The directive `.set dsp' makes the assembler accept instructions
13668 from the DSP Release 1 Application Specific Extension from that point
13669 on in the assembly.  The `.set nodsp' directive prevents DSP Release 1
13670 instructions from being accepted.
13671
13672    The directive `.set dspr2' makes the assembler accept instructions
13673 from the DSP Release 2 Application Specific Extension from that point
13674 on in the assembly.  This dirctive implies `.set dsp'.  The `.set
13675 nodspr2' directive prevents DSP Release 2 instructions from being
13676 accepted.
13677
13678    The directive `.set mt' makes the assembler accept instructions from
13679 the MT Application Specific Extension from that point on in the
13680 assembly.  The `.set nomt' directive prevents MT instructions from
13681 being accepted.
13682
13683    The directive `.set mcu' makes the assembler accept instructions
13684 from the MCU Application Specific Extension from that point on in the
13685 assembly.  The `.set nomcu' directive prevents MCU instructions from
13686 being accepted.
13687
13688    Traditional MIPS assemblers do not support these directives.
13689
13690 \1f
13691 File: as.info,  Node: MIPS floating-point,  Next: MIPS Syntax,  Prev: MIPS ASE instruction generation overrides,  Up: MIPS-Dependent
13692
13693 9.26.10 Directives to override floating-point options
13694 -----------------------------------------------------
13695
13696 The directives `.set softfloat' and `.set hardfloat' provide finer
13697 control of disabling and enabling float-point instructions.  These
13698 directives always override the default (that hard-float instructions
13699 are accepted) or the command-line options (`-msoft-float' and
13700 `-mhard-float').
13701
13702    The directives `.set singlefloat' and `.set doublefloat' provide
13703 finer control of disabling and enabling double-precision float-point
13704 operations.  These directives always override the default (that
13705 double-precision operations are accepted) or the command-line options
13706 (`-msingle-float' and `-mdouble-float').
13707
13708    Traditional MIPS assemblers do not support these directives.
13709
13710 \1f
13711 File: as.info,  Node: MIPS Syntax,  Prev: MIPS floating-point,  Up: MIPS-Dependent
13712
13713 9.26.11 Syntactical considerations for the MIPS assembler
13714 ---------------------------------------------------------
13715
13716 * Menu:
13717
13718 * MIPS-Chars::                Special Characters
13719
13720 \1f
13721 File: as.info,  Node: MIPS-Chars,  Up: MIPS Syntax
13722
13723 9.26.11.1 Special Characters
13724 ............................
13725
13726 The presence of a `#' on a line indicates the start of a comment that
13727 extends to the end of the current line.
13728
13729    If a `#' appears as the first character of a line, the whole line is
13730 treated as a comment, but in this case the line can also be a logical
13731 line number directive (*note Comments::) or a preprocessor control
13732 command (*note Preprocessing::).
13733
13734    The `;' character can be used to separate statements on the same
13735 line.
13736
13737 \1f
13738 File: as.info,  Node: MMIX-Dependent,  Next: MSP430-Dependent,  Prev: MIPS-Dependent,  Up: Machine Dependencies
13739
13740 9.27 MMIX Dependent Features
13741 ============================
13742
13743 * Menu:
13744
13745 * MMIX-Opts::              Command-line Options
13746 * MMIX-Expand::            Instruction expansion
13747 * MMIX-Syntax::            Syntax
13748 * MMIX-mmixal::            Differences to `mmixal' syntax and semantics
13749
13750 \1f
13751 File: as.info,  Node: MMIX-Opts,  Next: MMIX-Expand,  Up: MMIX-Dependent
13752
13753 9.27.1 Command-line Options
13754 ---------------------------
13755
13756 The MMIX version of `as' has some machine-dependent options.
13757
13758    When `--fixed-special-register-names' is specified, only the register
13759 names specified in *Note MMIX-Regs:: are recognized in the instructions
13760 `PUT' and `GET'.
13761
13762    You can use the `--globalize-symbols' to make all symbols global.
13763 This option is useful when splitting up a `mmixal' program into several
13764 files.
13765
13766    The `--gnu-syntax' turns off most syntax compatibility with
13767 `mmixal'.  Its usability is currently doubtful.
13768
13769    The `--relax' option is not fully supported, but will eventually make
13770 the object file prepared for linker relaxation.
13771
13772    If you want to avoid inadvertently calling a predefined symbol and
13773 would rather get an error, for example when using `as' with a compiler
13774 or other machine-generated code, specify `--no-predefined-syms'.  This
13775 turns off built-in predefined definitions of all such symbols,
13776 including rounding-mode symbols, segment symbols, `BIT' symbols, and
13777 `TRAP' symbols used in `mmix' "system calls".  It also turns off
13778 predefined special-register names, except when used in `PUT' and `GET'
13779 instructions.
13780
13781    By default, some instructions are expanded to fit the size of the
13782 operand or an external symbol (*note MMIX-Expand::).  By passing
13783 `--no-expand', no such expansion will be done, instead causing errors
13784 at link time if the operand does not fit.
13785
13786    The `mmixal' documentation (*note mmixsite::) specifies that global
13787 registers allocated with the `GREG' directive (*note MMIX-greg::) and
13788 initialized to the same non-zero value, will refer to the same global
13789 register.  This isn't strictly enforceable in `as' since the final
13790 addresses aren't known until link-time, but it will do an effort unless
13791 the `--no-merge-gregs' option is specified.  (Register merging isn't
13792 yet implemented in `ld'.)
13793
13794    `as' will warn every time it expands an instruction to fit an
13795 operand unless the option `-x' is specified.  It is believed that this
13796 behaviour is more useful than just mimicking `mmixal''s behaviour, in
13797 which instructions are only expanded if the `-x' option is specified,
13798 and assembly fails otherwise, when an instruction needs to be expanded.
13799 It needs to be kept in mind that `mmixal' is both an assembler and
13800 linker, while `as' will expand instructions that at link stage can be
13801 contracted.  (Though linker relaxation isn't yet implemented in `ld'.)
13802 The option `-x' also imples `--linker-allocated-gregs'.
13803
13804    If instruction expansion is enabled, `as' can expand a `PUSHJ'
13805 instruction into a series of instructions.  The shortest expansion is
13806 to not expand it, but just mark the call as redirectable to a stub,
13807 which `ld' creates at link-time, but only if the original `PUSHJ'
13808 instruction is found not to reach the target.  The stub consists of the
13809 necessary instructions to form a jump to the target.  This happens if
13810 `as' can assert that the `PUSHJ' instruction can reach such a stub.
13811 The option `--no-pushj-stubs' disables this shorter expansion, and the
13812 longer series of instructions is then created at assembly-time.  The
13813 option `--no-stubs' is a synonym, intended for compatibility with
13814 future releases, where generation of stubs for other instructions may
13815 be implemented.
13816
13817    Usually a two-operand-expression (*note GREG-base::) without a
13818 matching `GREG' directive is treated as an error by `as'.  When the
13819 option `--linker-allocated-gregs' is in effect, they are instead passed
13820 through to the linker, which will allocate as many global registers as
13821 is needed.
13822
13823 \1f
13824 File: as.info,  Node: MMIX-Expand,  Next: MMIX-Syntax,  Prev: MMIX-Opts,  Up: MMIX-Dependent
13825
13826 9.27.2 Instruction expansion
13827 ----------------------------
13828
13829 When `as' encounters an instruction with an operand that is either not
13830 known or does not fit the operand size of the instruction, `as' (and
13831 `ld') will expand the instruction into a sequence of instructions
13832 semantically equivalent to the operand fitting the instruction.
13833 Expansion will take place for the following instructions:
13834
13835 `GETA'
13836      Expands to a sequence of four instructions: `SETL', `INCML',
13837      `INCMH' and `INCH'.  The operand must be a multiple of four.
13838
13839 Conditional branches
13840      A branch instruction is turned into a branch with the complemented
13841      condition and prediction bit over five instructions; four
13842      instructions setting `$255' to the operand value, which like with
13843      `GETA' must be a multiple of four, and a final `GO $255,$255,0'.
13844
13845 `PUSHJ'
13846      Similar to expansion for conditional branches; four instructions
13847      set `$255' to the operand value, followed by a `PUSHGO
13848      $255,$255,0'.
13849
13850 `JMP'
13851      Similar to conditional branches and `PUSHJ'.  The final instruction
13852      is `GO $255,$255,0'.
13853
13854    The linker `ld' is expected to shrink these expansions for code
13855 assembled with `--relax' (though not currently implemented).
13856
13857 \1f
13858 File: as.info,  Node: MMIX-Syntax,  Next: MMIX-mmixal,  Prev: MMIX-Expand,  Up: MMIX-Dependent
13859
13860 9.27.3 Syntax
13861 -------------
13862
13863 The assembly syntax is supposed to be upward compatible with that
13864 described in Sections 1.3 and 1.4 of `The Art of Computer Programming,
13865 Volume 1'.  Draft versions of those chapters as well as other MMIX
13866 information is located at
13867 `http://www-cs-faculty.stanford.edu/~knuth/mmix-news.html'.  Most code
13868 examples from the mmixal package located there should work unmodified
13869 when assembled and linked as single files, with a few noteworthy
13870 exceptions (*note MMIX-mmixal::).
13871
13872    Before an instruction is emitted, the current location is aligned to
13873 the next four-byte boundary.  If a label is defined at the beginning of
13874 the line, its value will be the aligned value.
13875
13876    In addition to the traditional hex-prefix `0x', a hexadecimal number
13877 can also be specified by the prefix character `#'.
13878
13879    After all operands to an MMIX instruction or directive have been
13880 specified, the rest of the line is ignored, treated as a comment.
13881
13882 * Menu:
13883
13884 * MMIX-Chars::                  Special Characters
13885 * MMIX-Symbols::                Symbols
13886 * MMIX-Regs::                   Register Names
13887 * MMIX-Pseudos::                Assembler Directives
13888
13889 \1f
13890 File: as.info,  Node: MMIX-Chars,  Next: MMIX-Symbols,  Up: MMIX-Syntax
13891
13892 9.27.3.1 Special Characters
13893 ...........................
13894
13895 The characters `*' and `#' are line comment characters; each start a
13896 comment at the beginning of a line, but only at the beginning of a
13897 line.  A `#' prefixes a hexadecimal number if found elsewhere on a
13898 line.  If a `#' appears at the start of a line the whole line is
13899 treated as a comment, but the line can also act as a logical line
13900 number directive (*note Comments::) or a preprocessor control command
13901 (*note Preprocessing::).
13902
13903    Two other characters, `%' and `!', each start a comment anywhere on
13904 the line.  Thus you can't use the `modulus' and `not' operators in
13905 expressions normally associated with these two characters.
13906
13907    A `;' is a line separator, treated as a new-line, so separate
13908 instructions can be specified on a single line.
13909
13910 \1f
13911 File: as.info,  Node: MMIX-Symbols,  Next: MMIX-Regs,  Prev: MMIX-Chars,  Up: MMIX-Syntax
13912
13913 9.27.3.2 Symbols
13914 ................
13915
13916 The character `:' is permitted in identifiers.  There are two
13917 exceptions to it being treated as any other symbol character: if a
13918 symbol begins with `:', it means that the symbol is in the global
13919 namespace and that the current prefix should not be prepended to that
13920 symbol (*note MMIX-prefix::).  The `:' is then not considered part of
13921 the symbol.  For a symbol in the label position (first on a line), a `:'
13922 at the end of a symbol is silently stripped off.  A label is permitted,
13923 but not required, to be followed by a `:', as with many other assembly
13924 formats.
13925
13926    The character `@' in an expression, is a synonym for `.', the
13927 current location.
13928
13929    In addition to the common forward and backward local symbol formats
13930 (*note Symbol Names::), they can be specified with upper-case `B' and
13931 `F', as in `8B' and `9F'.  A local label defined for the current
13932 position is written with a `H' appended to the number:
13933      3H LDB $0,$1,2
13934    This and traditional local-label formats cannot be mixed: a label
13935 must be defined and referred to using the same format.
13936
13937    There's a minor caveat: just as for the ordinary local symbols, the
13938 local symbols are translated into ordinary symbols using control
13939 characters are to hide the ordinal number of the symbol.
13940 Unfortunately, these symbols are not translated back in error messages.
13941 Thus you may see confusing error messages when local symbols are used.
13942 Control characters `\003' (control-C) and `\004' (control-D) are used
13943 for the MMIX-specific local-symbol syntax.
13944
13945    The symbol `Main' is handled specially; it is always global.
13946
13947    By defining the symbols `__.MMIX.start..text' and
13948 `__.MMIX.start..data', the address of respectively the `.text' and
13949 `.data' segments of the final program can be defined, though when
13950 linking more than one object file, the code or data in the object file
13951 containing the symbol is not guaranteed to be start at that position;
13952 just the final executable.  *Note MMIX-loc::.
13953
13954 \1f
13955 File: as.info,  Node: MMIX-Regs,  Next: MMIX-Pseudos,  Prev: MMIX-Symbols,  Up: MMIX-Syntax
13956
13957 9.27.3.3 Register names
13958 .......................
13959
13960 Local and global registers are specified as `$0' to `$255'.  The
13961 recognized special register names are `rJ', `rA', `rB', `rC', `rD',
13962 `rE', `rF', `rG', `rH', `rI', `rK', `rL', `rM', `rN', `rO', `rP', `rQ',
13963 `rR', `rS', `rT', `rU', `rV', `rW', `rX', `rY', `rZ', `rBB', `rTT',
13964 `rWW', `rXX', `rYY' and `rZZ'.  A leading `:' is optional for special
13965 register names.
13966
13967    Local and global symbols can be equated to register names and used in
13968 place of ordinary registers.
13969
13970    Similarly for special registers, local and global symbols can be
13971 used.  Also, symbols equated from numbers and constant expressions are
13972 allowed in place of a special register, except when either of the
13973 options `--no-predefined-syms' and `--fixed-special-register-names' are
13974 specified.  Then only the special register names above are allowed for
13975 the instructions having a special register operand; `GET' and `PUT'.
13976
13977 \1f
13978 File: as.info,  Node: MMIX-Pseudos,  Prev: MMIX-Regs,  Up: MMIX-Syntax
13979
13980 9.27.3.4 Assembler Directives
13981 .............................
13982
13983 `LOC'
13984      The `LOC' directive sets the current location to the value of the
13985      operand field, which may include changing sections.  If the
13986      operand is a constant, the section is set to either `.data' if the
13987      value is `0x2000000000000000' or larger, else it is set to `.text'.
13988      Within a section, the current location may only be changed to
13989      monotonically higher addresses.  A LOC expression must be a
13990      previously defined symbol or a "pure" constant.
13991
13992      An example, which sets the label PREV to the current location, and
13993      updates the current location to eight bytes forward:
13994           prev LOC @+8
13995
13996      When a LOC has a constant as its operand, a symbol
13997      `__.MMIX.start..text' or `__.MMIX.start..data' is defined
13998      depending on the address as mentioned above.  Each such symbol is
13999      interpreted as special by the linker, locating the section at that
14000      address.  Note that if multiple files are linked, the first object
14001      file with that section will be mapped to that address (not
14002      necessarily the file with the LOC definition).
14003
14004 `LOCAL'
14005      Example:
14006            LOCAL external_symbol
14007            LOCAL 42
14008            .local asymbol
14009
14010      This directive-operation generates a link-time assertion that the
14011      operand does not correspond to a global register.  The operand is
14012      an expression that at link-time resolves to a register symbol or a
14013      number.  A number is treated as the register having that number.
14014      There is one restriction on the use of this directive: the
14015      pseudo-directive must be placed in a section with contents, code
14016      or data.
14017
14018 `IS'
14019      The `IS' directive:
14020           asymbol IS an_expression
14021      sets the symbol `asymbol' to `an_expression'.  A symbol may not be
14022      set more than once using this directive.  Local labels may be set
14023      using this directive, for example:
14024           5H IS @+4
14025
14026 `GREG'
14027      This directive reserves a global register, gives it an initial
14028      value and optionally gives it a symbolic name.  Some examples:
14029
14030           areg GREG
14031           breg GREG data_value
14032                GREG data_buffer
14033                .greg creg, another_data_value
14034
14035      The symbolic register name can be used in place of a (non-special)
14036      register.  If a value isn't provided, it defaults to zero.  Unless
14037      the option `--no-merge-gregs' is specified, non-zero registers
14038      allocated with this directive may be eliminated by `as'; another
14039      register with the same value used in its place.  Any of the
14040      instructions `CSWAP', `GO', `LDA', `LDBU', `LDB', `LDHT', `LDOU',
14041      `LDO', `LDSF', `LDTU', `LDT', `LDUNC', `LDVTS', `LDWU', `LDW',
14042      `PREGO', `PRELD', `PREST', `PUSHGO', `STBU', `STB', `STCO', `STHT',
14043      `STOU', `STSF', `STTU', `STT', `STUNC', `SYNCD', `SYNCID', can
14044      have a value nearby an initial value in place of its second and
14045      third operands.  Here, "nearby" is defined as within the range
14046      0...255 from the initial value of such an allocated register.
14047
14048           buffer1 BYTE 0,0,0,0,0
14049           buffer2 BYTE 0,0,0,0,0
14050            ...
14051            GREG buffer1
14052            LDOU $42,buffer2
14053      In the example above, the `Y' field of the `LDOUI' instruction
14054      (LDOU with a constant Z) will be replaced with the global register
14055      allocated for `buffer1', and the `Z' field will have the value 5,
14056      the offset from `buffer1' to `buffer2'.  The result is equivalent
14057      to this code:
14058           buffer1 BYTE 0,0,0,0,0
14059           buffer2 BYTE 0,0,0,0,0
14060            ...
14061           tmpreg GREG buffer1
14062            LDOU $42,tmpreg,(buffer2-buffer1)
14063
14064      Global registers allocated with this directive are allocated in
14065      order higher-to-lower within a file.  Other than that, the exact
14066      order of register allocation and elimination is undefined.  For
14067      example, the order is undefined when more than one file with such
14068      directives are linked together.  With the options `-x' and
14069      `--linker-allocated-gregs', `GREG' directives for two-operand
14070      cases like the one mentioned above can be omitted.  Sufficient
14071      global registers will then be allocated by the linker.
14072
14073 `BYTE'
14074      The `BYTE' directive takes a series of operands separated by a
14075      comma.  If an operand is a string (*note Strings::), each
14076      character of that string is emitted as a byte.  Other operands
14077      must be constant expressions without forward references, in the
14078      range 0...255.  If you need operands having expressions with
14079      forward references, use `.byte' (*note Byte::).  An operand can be
14080      omitted, defaulting to a zero value.
14081
14082 `WYDE'
14083 `TETRA'
14084 `OCTA'
14085      The directives `WYDE', `TETRA' and `OCTA' emit constants of two,
14086      four and eight bytes size respectively.  Before anything else
14087      happens for the directive, the current location is aligned to the
14088      respective constant-size boundary.  If a label is defined at the
14089      beginning of the line, its value will be that after the alignment.
14090      A single operand can be omitted, defaulting to a zero value
14091      emitted for the directive.  Operands can be expressed as strings
14092      (*note Strings::), in which case each character in the string is
14093      emitted as a separate constant of the size indicated by the
14094      directive.
14095
14096 `PREFIX'
14097      The `PREFIX' directive sets a symbol name prefix to be prepended to
14098      all symbols (except local symbols, *note MMIX-Symbols::), that are
14099      not prefixed with `:', until the next `PREFIX' directive.  Such
14100      prefixes accumulate.  For example,
14101            PREFIX a
14102            PREFIX b
14103           c IS 0
14104      defines a symbol `abc' with the value 0.
14105
14106 `BSPEC'
14107 `ESPEC'
14108      A pair of `BSPEC' and `ESPEC' directives delimit a section of
14109      special contents (without specified semantics).  Example:
14110            BSPEC 42
14111            TETRA 1,2,3
14112            ESPEC
14113      The single operand to `BSPEC' must be number in the range 0...255.
14114      The `BSPEC' number 80 is used by the GNU binutils implementation.
14115
14116 \1f
14117 File: as.info,  Node: MMIX-mmixal,  Prev: MMIX-Syntax,  Up: MMIX-Dependent
14118
14119 9.27.4 Differences to `mmixal'
14120 ------------------------------
14121
14122 The binutils `as' and `ld' combination has a few differences in
14123 function compared to `mmixal' (*note mmixsite::).
14124
14125    The replacement of a symbol with a GREG-allocated register (*note
14126 GREG-base::) is not handled the exactly same way in `as' as in
14127 `mmixal'.  This is apparent in the `mmixal' example file `inout.mms',
14128 where different registers with different offsets, eventually yielding
14129 the same address, are used in the first instruction.  This type of
14130 difference should however not affect the function of any program unless
14131 it has specific assumptions about the allocated register number.
14132
14133    Line numbers (in the `mmo' object format) are currently not
14134 supported.
14135
14136    Expression operator precedence is not that of mmixal: operator
14137 precedence is that of the C programming language.  It's recommended to
14138 use parentheses to explicitly specify wanted operator precedence
14139 whenever more than one type of operators are used.
14140
14141    The serialize unary operator `&', the fractional division operator
14142 `//', the logical not operator `!' and the modulus operator `%' are not
14143 available.
14144
14145    Symbols are not global by default, unless the option
14146 `--globalize-symbols' is passed.  Use the `.global' directive to
14147 globalize symbols (*note Global::).
14148
14149    Operand syntax is a bit stricter with `as' than `mmixal'.  For
14150 example, you can't say `addu 1,2,3', instead you must write `addu
14151 $1,$2,3'.
14152
14153    You can't LOC to a lower address than those already visited (i.e.,
14154 "backwards").
14155
14156    A LOC directive must come before any emitted code.
14157
14158    Predefined symbols are visible as file-local symbols after use.  (In
14159 the ELF file, that is--the linked mmo file has no notion of a file-local
14160 symbol.)
14161
14162    Some mapping of constant expressions to sections in LOC expressions
14163 is attempted, but that functionality is easily confused and should be
14164 avoided unless compatibility with `mmixal' is required.  A LOC
14165 expression to `0x2000000000000000' or higher, maps to the `.data'
14166 section and lower addresses map to the `.text' section (*note
14167 MMIX-loc::).
14168
14169    The code and data areas are each contiguous.  Sparse programs with
14170 far-away LOC directives will take up the same amount of space as a
14171 contiguous program with zeros filled in the gaps between the LOC
14172 directives.  If you need sparse programs, you might try and get the
14173 wanted effect with a linker script and splitting up the code parts into
14174 sections (*note Section::).  Assembly code for this, to be compatible
14175 with `mmixal', would look something like:
14176       .if 0
14177       LOC away_expression
14178       .else
14179       .section away,"ax"
14180       .fi
14181    `as' will not execute the LOC directive and `mmixal' ignores the
14182 lines with `.'.  This construct can be used generally to help
14183 compatibility.
14184
14185    Symbols can't be defined twice-not even to the same value.
14186
14187    Instruction mnemonics are recognized case-insensitive, though the
14188 `IS' and `GREG' pseudo-operations must be specified in upper-case
14189 characters.
14190
14191    There's no unicode support.
14192
14193    The following is a list of programs in `mmix.tar.gz', available at
14194 `http://www-cs-faculty.stanford.edu/~knuth/mmix-news.html', last
14195 checked with the version dated 2001-08-25 (md5sum
14196 c393470cfc86fac040487d22d2bf0172) that assemble with `mmixal' but do
14197 not assemble with `as':
14198
14199 `silly.mms'
14200      LOC to a previous address.
14201
14202 `sim.mms'
14203      Redefines symbol `Done'.
14204
14205 `test.mms'
14206      Uses the serial operator `&'.
14207
14208 \1f
14209 File: as.info,  Node: MSP430-Dependent,  Next: NS32K-Dependent,  Prev: MMIX-Dependent,  Up: Machine Dependencies
14210
14211 9.28 MSP 430 Dependent Features
14212 ===============================
14213
14214 * Menu:
14215
14216 * MSP430 Options::              Options
14217 * MSP430 Syntax::               Syntax
14218 * MSP430 Floating Point::       Floating Point
14219 * MSP430 Directives::           MSP 430 Machine Directives
14220 * MSP430 Opcodes::              Opcodes
14221 * MSP430 Profiling Capability:: Profiling Capability
14222
14223 \1f
14224 File: as.info,  Node: MSP430 Options,  Next: MSP430 Syntax,  Up: MSP430-Dependent
14225
14226 9.28.1 Options
14227 --------------
14228
14229 `-m'
14230      select the mpu arch. Currently has no effect.
14231
14232 `-mP'
14233      enables polymorph instructions handler.
14234
14235 `-mQ'
14236      enables relaxation at assembly time. DANGEROUS!
14237
14238
14239 \1f
14240 File: as.info,  Node: MSP430 Syntax,  Next: MSP430 Floating Point,  Prev: MSP430 Options,  Up: MSP430-Dependent
14241
14242 9.28.2 Syntax
14243 -------------
14244
14245 * Menu:
14246
14247 * MSP430-Macros::               Macros
14248 * MSP430-Chars::                Special Characters
14249 * MSP430-Regs::                 Register Names
14250 * MSP430-Ext::                  Assembler Extensions
14251
14252 \1f
14253 File: as.info,  Node: MSP430-Macros,  Next: MSP430-Chars,  Up: MSP430 Syntax
14254
14255 9.28.2.1 Macros
14256 ...............
14257
14258 The macro syntax used on the MSP 430 is like that described in the MSP
14259 430 Family Assembler Specification.  Normal `as' macros should still
14260 work.
14261
14262    Additional built-in macros are:
14263
14264 `llo(exp)'
14265      Extracts least significant word from 32-bit expression 'exp'.
14266
14267 `lhi(exp)'
14268      Extracts most significant word from 32-bit expression 'exp'.
14269
14270 `hlo(exp)'
14271      Extracts 3rd word from 64-bit expression 'exp'.
14272
14273 `hhi(exp)'
14274      Extracts 4rd word from 64-bit expression 'exp'.
14275
14276
14277    They normally being used as an immediate source operand.
14278          mov    #llo(1), r10    ;       == mov  #1, r10
14279          mov    #lhi(1), r10    ;       == mov  #0, r10
14280
14281 \1f
14282 File: as.info,  Node: MSP430-Chars,  Next: MSP430-Regs,  Prev: MSP430-Macros,  Up: MSP430 Syntax
14283
14284 9.28.2.2 Special Characters
14285 ...........................
14286
14287 A semicolon (`;') appearing anywhere on a line starts a comment that
14288 extends to the end of that line.
14289
14290    If a `#' appears as the first character of a line then the whole
14291 line is treated as a comment, but it can also be a logical line number
14292 directive (*note Comments::) or a preprocessor control command (*note
14293 Preprocessing::).
14294
14295    Multiple statements can appear on the same line provided that they
14296 are separated by the `{' character.
14297
14298    The character `$' in jump instructions indicates current location and
14299 implemented only for TI syntax compatibility.
14300
14301 \1f
14302 File: as.info,  Node: MSP430-Regs,  Next: MSP430-Ext,  Prev: MSP430-Chars,  Up: MSP430 Syntax
14303
14304 9.28.2.3 Register Names
14305 .......................
14306
14307 General-purpose registers are represented by predefined symbols of the
14308 form `rN' (for global registers), where N represents a number between
14309 `0' and `15'.  The leading letters may be in either upper or lower
14310 case; for example, `r13' and `R7' are both valid register names.
14311
14312    Register names `PC', `SP' and `SR' cannot be used as register names
14313 and will be treated as variables. Use `r0', `r1', and `r2' instead.
14314
14315 \1f
14316 File: as.info,  Node: MSP430-Ext,  Prev: MSP430-Regs,  Up: MSP430 Syntax
14317
14318 9.28.2.4 Assembler Extensions
14319 .............................
14320
14321 `@rN'
14322      As destination operand being treated as `0(rn)'
14323
14324 `0(rN)'
14325      As source operand being treated as `@rn'
14326
14327 `jCOND +N'
14328      Skips next N bytes followed by jump instruction and equivalent to
14329      `jCOND $+N+2'
14330
14331
14332    Also, there are some instructions, which cannot be found in other
14333 assemblers.  These are branch instructions, which has different opcodes
14334 upon jump distance.  They all got PC relative addressing mode.
14335
14336 `beq label'
14337      A polymorph instruction which is `jeq label' in case if jump
14338      distance within allowed range for cpu's jump instruction. If not,
14339      this unrolls into a sequence of
14340             jne $+6
14341             br  label
14342
14343 `bne label'
14344      A polymorph instruction which is `jne label' or `jeq +4; br label'
14345
14346 `blt label'
14347      A polymorph instruction which is `jl label' or `jge +4; br label'
14348
14349 `bltn label'
14350      A polymorph instruction which is `jn label' or `jn +2; jmp +4; br
14351      label'
14352
14353 `bltu label'
14354      A polymorph instruction which is `jlo label' or `jhs +2; br label'
14355
14356 `bge label'
14357      A polymorph instruction which is `jge label' or `jl +4; br label'
14358
14359 `bgeu label'
14360      A polymorph instruction which is `jhs label' or `jlo +4; br label'
14361
14362 `bgt label'
14363      A polymorph instruction which is `jeq +2; jge label' or `jeq +6;
14364      jl  +4; br label'
14365
14366 `bgtu label'
14367      A polymorph instruction which is `jeq +2; jhs label' or `jeq +6;
14368      jlo +4; br label'
14369
14370 `bleu label'
14371      A polymorph instruction which is `jeq label; jlo label' or `jeq
14372      +2; jhs +4; br label'
14373
14374 `ble label'
14375      A polymorph instruction which is `jeq label; jl  label' or `jeq
14376      +2; jge +4; br label'
14377
14378 `jump label'
14379      A polymorph instruction which is `jmp label' or `br label'
14380
14381 \1f
14382 File: as.info,  Node: MSP430 Floating Point,  Next: MSP430 Directives,  Prev: MSP430 Syntax,  Up: MSP430-Dependent
14383
14384 9.28.3 Floating Point
14385 ---------------------
14386
14387 The MSP 430 family uses IEEE 32-bit floating-point numbers.
14388
14389 \1f
14390 File: as.info,  Node: MSP430 Directives,  Next: MSP430 Opcodes,  Prev: MSP430 Floating Point,  Up: MSP430-Dependent
14391
14392 9.28.4 MSP 430 Machine Directives
14393 ---------------------------------
14394
14395 `.file'
14396      This directive is ignored; it is accepted for compatibility with
14397      other MSP 430 assemblers.
14398
14399           _Warning:_ in other versions of the GNU assembler, `.file' is
14400           used for the directive called `.app-file' in the MSP 430
14401           support.
14402
14403 `.line'
14404      This directive is ignored; it is accepted for compatibility with
14405      other MSP 430 assemblers.
14406
14407 `.arch'
14408      Currently this directive is ignored; it is accepted for
14409      compatibility with other MSP 430 assemblers.
14410
14411 `.profiler'
14412      This directive instructs assembler to add new profile entry to the
14413      object file.
14414
14415
14416 \1f
14417 File: as.info,  Node: MSP430 Opcodes,  Next: MSP430 Profiling Capability,  Prev: MSP430 Directives,  Up: MSP430-Dependent
14418
14419 9.28.5 Opcodes
14420 --------------
14421
14422 `as' implements all the standard MSP 430 opcodes.  No additional
14423 pseudo-instructions are needed on this family.
14424
14425    For information on the 430 machine instruction set, see `MSP430
14426 User's Manual, document slau049d', Texas Instrument, Inc.
14427
14428 \1f
14429 File: as.info,  Node: MSP430 Profiling Capability,  Prev: MSP430 Opcodes,  Up: MSP430-Dependent
14430
14431 9.28.6 Profiling Capability
14432 ---------------------------
14433
14434 It is a performance hit to use gcc's profiling approach for this tiny
14435 target.  Even more - jtag hardware facility does not perform any
14436 profiling functions.  However we've got gdb's built-in simulator where
14437 we can do anything.
14438
14439    We define new section `.profiler' which holds all profiling
14440 information.  We define new pseudo operation `.profiler' which will
14441 instruct assembler to add new profile entry to the object file. Profile
14442 should take place at the present address.
14443
14444    Pseudo operation format:
14445
14446    `.profiler flags,function_to_profile [, cycle_corrector, extra]'
14447
14448    where:
14449
14450           `flags' is a combination of the following characters:
14451
14452     `s'
14453           function entry
14454
14455     `x'
14456           function exit
14457
14458     `i'
14459           function is in init section
14460
14461     `f'
14462           function is in fini section
14463
14464     `l'
14465           library call
14466
14467     `c'
14468           libc standard call
14469
14470     `d'
14471           stack value demand
14472
14473     `I'
14474           interrupt service routine
14475
14476     `P'
14477           prologue start
14478
14479     `p'
14480           prologue end
14481
14482     `E'
14483           epilogue start
14484
14485     `e'
14486           epilogue end
14487
14488     `j'
14489           long jump / sjlj unwind
14490
14491     `a'
14492           an arbitrary code fragment
14493
14494     `t'
14495           extra parameter saved (a constant value like frame size)
14496
14497 `function_to_profile'
14498      a function address
14499
14500 `cycle_corrector'
14501      a value which should be added to the cycle counter, zero if
14502      omitted.
14503
14504 `extra'
14505      any extra parameter, zero if omitted.
14506
14507
14508    For example:
14509      .global fxx
14510      .type fxx,@function
14511      fxx:
14512      .LFrameOffset_fxx=0x08
14513      .profiler "scdP", fxx     ; function entry.
14514                           ; we also demand stack value to be saved
14515        push r11
14516        push r10
14517        push r9
14518        push r8
14519      .profiler "cdpt",fxx,0, .LFrameOffset_fxx  ; check stack value at this point
14520                                           ; (this is a prologue end)
14521                                           ; note, that spare var filled with
14522                                           ; the farme size
14523        mov r15,r8
14524      ...
14525      .profiler cdE,fxx         ; check stack
14526        pop r8
14527        pop r9
14528        pop r10
14529        pop r11
14530      .profiler xcde,fxx,3      ; exit adds 3 to the cycle counter
14531        ret                     ; cause 'ret' insn takes 3 cycles
14532
14533 \1f
14534 File: as.info,  Node: NS32K-Dependent,  Next: SH-Dependent,  Prev: MSP430-Dependent,  Up: Machine Dependencies
14535
14536 9.29 NS32K Dependent Features
14537 =============================
14538
14539 * Menu:
14540
14541 * NS32K Syntax::               Syntax
14542
14543 \1f
14544 File: as.info,  Node: NS32K Syntax,  Up: NS32K-Dependent
14545
14546 9.29.1 Syntax
14547 -------------
14548
14549 * Menu:
14550
14551 * NS32K-Chars::                Special Characters
14552
14553 \1f
14554 File: as.info,  Node: NS32K-Chars,  Up: NS32K Syntax
14555
14556 9.29.1.1 Special Characters
14557 ...........................
14558
14559 The presence of a `#' appearing anywhere on a line indicates the start
14560 of a comment that extends to the end of that line.
14561
14562    If a `#' appears as the first character of a line then the whole
14563 line is treated as a comment, but in this case the line can also be a
14564 logical line number directive (*note Comments::) or a preprocessor
14565 control command (*note Preprocessing::).
14566
14567    If Sequent compatibility has been configured into the assembler then
14568 the `|' character appearing as the first character on a line will also
14569 indicate the start of a line comment.
14570
14571    The `;' character can be used to separate statements on the same
14572 line.
14573
14574 \1f
14575 File: as.info,  Node: PDP-11-Dependent,  Next: PJ-Dependent,  Prev: SH64-Dependent,  Up: Machine Dependencies
14576
14577 9.30 PDP-11 Dependent Features
14578 ==============================
14579
14580 * Menu:
14581
14582 * PDP-11-Options::              Options
14583 * PDP-11-Pseudos::              Assembler Directives
14584 * PDP-11-Syntax::               DEC Syntax versus BSD Syntax
14585 * PDP-11-Mnemonics::            Instruction Naming
14586 * PDP-11-Synthetic::            Synthetic Instructions
14587
14588 \1f
14589 File: as.info,  Node: PDP-11-Options,  Next: PDP-11-Pseudos,  Up: PDP-11-Dependent
14590
14591 9.30.1 Options
14592 --------------
14593
14594 The PDP-11 version of `as' has a rich set of machine dependent options.
14595
14596 9.30.1.1 Code Generation Options
14597 ................................
14598
14599 `-mpic | -mno-pic'
14600      Generate position-independent (or position-dependent) code.
14601
14602      The default is to generate position-independent code.
14603
14604 9.30.1.2 Instruction Set Extension Options
14605 ..........................................
14606
14607 These options enables or disables the use of extensions over the base
14608 line instruction set as introduced by the first PDP-11 CPU: the KA11.
14609 Most options come in two variants: a `-m'EXTENSION that enables
14610 EXTENSION, and a `-mno-'EXTENSION that disables EXTENSION.
14611
14612    The default is to enable all extensions.
14613
14614 `-mall | -mall-extensions'
14615      Enable all instruction set extensions.
14616
14617 `-mno-extensions'
14618      Disable all instruction set extensions.
14619
14620 `-mcis | -mno-cis'
14621      Enable (or disable) the use of the commercial instruction set,
14622      which consists of these instructions: `ADDNI', `ADDN', `ADDPI',
14623      `ADDP', `ASHNI', `ASHN', `ASHPI', `ASHP', `CMPCI', `CMPC',
14624      `CMPNI', `CMPN', `CMPPI', `CMPP', `CVTLNI', `CVTLN', `CVTLPI',
14625      `CVTLP', `CVTNLI', `CVTNL', `CVTNPI', `CVTNP', `CVTPLI', `CVTPL',
14626      `CVTPNI', `CVTPN', `DIVPI', `DIVP', `L2DR', `L3DR', `LOCCI',
14627      `LOCC', `MATCI', `MATC', `MOVCI', `MOVC', `MOVRCI', `MOVRC',
14628      `MOVTCI', `MOVTC', `MULPI', `MULP', `SCANCI', `SCANC', `SKPCI',
14629      `SKPC', `SPANCI', `SPANC', `SUBNI', `SUBN', `SUBPI', and `SUBP'.
14630
14631 `-mcsm | -mno-csm'
14632      Enable (or disable) the use of the `CSM' instruction.
14633
14634 `-meis | -mno-eis'
14635      Enable (or disable) the use of the extended instruction set, which
14636      consists of these instructions: `ASHC', `ASH', `DIV', `MARK',
14637      `MUL', `RTT', `SOB' `SXT', and `XOR'.
14638
14639 `-mfis | -mkev11'
14640 `-mno-fis | -mno-kev11'
14641      Enable (or disable) the use of the KEV11 floating-point
14642      instructions: `FADD', `FDIV', `FMUL', and `FSUB'.
14643
14644 `-mfpp | -mfpu | -mfp-11'
14645 `-mno-fpp | -mno-fpu | -mno-fp-11'
14646      Enable (or disable) the use of FP-11 floating-point instructions:
14647      `ABSF', `ADDF', `CFCC', `CLRF', `CMPF', `DIVF', `LDCFF', `LDCIF',
14648      `LDEXP', `LDF', `LDFPS', `MODF', `MULF', `NEGF', `SETD', `SETF',
14649      `SETI', `SETL', `STCFF', `STCFI', `STEXP', `STF', `STFPS', `STST',
14650      `SUBF', and `TSTF'.
14651
14652 `-mlimited-eis | -mno-limited-eis'
14653      Enable (or disable) the use of the limited extended instruction
14654      set: `MARK', `RTT', `SOB', `SXT', and `XOR'.
14655
14656      The -mno-limited-eis options also implies -mno-eis.
14657
14658 `-mmfpt | -mno-mfpt'
14659      Enable (or disable) the use of the `MFPT' instruction.
14660
14661 `-mmultiproc | -mno-multiproc'
14662      Enable (or disable) the use of multiprocessor instructions:
14663      `TSTSET' and `WRTLCK'.
14664
14665 `-mmxps | -mno-mxps'
14666      Enable (or disable) the use of the `MFPS' and `MTPS' instructions.
14667
14668 `-mspl | -mno-spl'
14669      Enable (or disable) the use of the `SPL' instruction.
14670
14671      Enable (or disable) the use of the microcode instructions: `LDUB',
14672      `MED', and `XFC'.
14673
14674 9.30.1.3 CPU Model Options
14675 ..........................
14676
14677 These options enable the instruction set extensions supported by a
14678 particular CPU, and disables all other extensions.
14679
14680 `-mka11'
14681      KA11 CPU.  Base line instruction set only.
14682
14683 `-mkb11'
14684      KB11 CPU.  Enable extended instruction set and `SPL'.
14685
14686 `-mkd11a'
14687      KD11-A CPU.  Enable limited extended instruction set.
14688
14689 `-mkd11b'
14690      KD11-B CPU.  Base line instruction set only.
14691
14692 `-mkd11d'
14693      KD11-D CPU.  Base line instruction set only.
14694
14695 `-mkd11e'
14696      KD11-E CPU.  Enable extended instruction set, `MFPS', and `MTPS'.
14697
14698 `-mkd11f | -mkd11h | -mkd11q'
14699      KD11-F, KD11-H, or KD11-Q CPU.  Enable limited extended
14700      instruction set, `MFPS', and `MTPS'.
14701
14702 `-mkd11k'
14703      KD11-K CPU.  Enable extended instruction set, `LDUB', `MED',
14704      `MFPS', `MFPT', `MTPS', and `XFC'.
14705
14706 `-mkd11z'
14707      KD11-Z CPU.  Enable extended instruction set, `CSM', `MFPS',
14708      `MFPT', `MTPS', and `SPL'.
14709
14710 `-mf11'
14711      F11 CPU.  Enable extended instruction set, `MFPS', `MFPT', and
14712      `MTPS'.
14713
14714 `-mj11'
14715      J11 CPU.  Enable extended instruction set, `CSM', `MFPS', `MFPT',
14716      `MTPS', `SPL', `TSTSET', and `WRTLCK'.
14717
14718 `-mt11'
14719      T11 CPU.  Enable limited extended instruction set, `MFPS', and
14720      `MTPS'.
14721
14722 9.30.1.4 Machine Model Options
14723 ..............................
14724
14725 These options enable the instruction set extensions supported by a
14726 particular machine model, and disables all other extensions.
14727
14728 `-m11/03'
14729      Same as `-mkd11f'.
14730
14731 `-m11/04'
14732      Same as `-mkd11d'.
14733
14734 `-m11/05 | -m11/10'
14735      Same as `-mkd11b'.
14736
14737 `-m11/15 | -m11/20'
14738      Same as `-mka11'.
14739
14740 `-m11/21'
14741      Same as `-mt11'.
14742
14743 `-m11/23 | -m11/24'
14744      Same as `-mf11'.
14745
14746 `-m11/34'
14747      Same as `-mkd11e'.
14748
14749 `-m11/34a'
14750      Ame as `-mkd11e' `-mfpp'.
14751
14752 `-m11/35 | -m11/40'
14753      Same as `-mkd11a'.
14754
14755 `-m11/44'
14756      Same as `-mkd11z'.
14757
14758 `-m11/45 | -m11/50 | -m11/55 | -m11/70'
14759      Same as `-mkb11'.
14760
14761 `-m11/53 | -m11/73 | -m11/83 | -m11/84 | -m11/93 | -m11/94'
14762      Same as `-mj11'.
14763
14764 `-m11/60'
14765      Same as `-mkd11k'.
14766
14767 \1f
14768 File: as.info,  Node: PDP-11-Pseudos,  Next: PDP-11-Syntax,  Prev: PDP-11-Options,  Up: PDP-11-Dependent
14769
14770 9.30.2 Assembler Directives
14771 ---------------------------
14772
14773 The PDP-11 version of `as' has a few machine dependent assembler
14774 directives.
14775
14776 `.bss'
14777      Switch to the `bss' section.
14778
14779 `.even'
14780      Align the location counter to an even number.
14781
14782 \1f
14783 File: as.info,  Node: PDP-11-Syntax,  Next: PDP-11-Mnemonics,  Prev: PDP-11-Pseudos,  Up: PDP-11-Dependent
14784
14785 9.30.3 PDP-11 Assembly Language Syntax
14786 --------------------------------------
14787
14788 `as' supports both DEC syntax and BSD syntax.  The only difference is
14789 that in DEC syntax, a `#' character is used to denote an immediate
14790 constants, while in BSD syntax the character for this purpose is `$'.
14791
14792    general-purpose registers are named `r0' through `r7'.  Mnemonic
14793 alternatives for `r6' and `r7' are `sp' and `pc', respectively.
14794
14795    Floating-point registers are named `ac0' through `ac3', or
14796 alternatively `fr0' through `fr3'.
14797
14798    Comments are started with a `#' or a `/' character, and extend to
14799 the end of the line.  (FIXME: clash with immediates?)
14800
14801    Multiple statements on the same line can be separated by the `;'
14802 character.
14803
14804 \1f
14805 File: as.info,  Node: PDP-11-Mnemonics,  Next: PDP-11-Synthetic,  Prev: PDP-11-Syntax,  Up: PDP-11-Dependent
14806
14807 9.30.4 Instruction Naming
14808 -------------------------
14809
14810 Some instructions have alternative names.
14811
14812 `BCC'
14813      `BHIS'
14814
14815 `BCS'
14816      `BLO'
14817
14818 `L2DR'
14819      `L2D'
14820
14821 `L3DR'
14822      `L3D'
14823
14824 `SYS'
14825      `TRAP'
14826
14827 \1f
14828 File: as.info,  Node: PDP-11-Synthetic,  Prev: PDP-11-Mnemonics,  Up: PDP-11-Dependent
14829
14830 9.30.5 Synthetic Instructions
14831 -----------------------------
14832
14833 The `JBR' and `J'CC synthetic instructions are not supported yet.
14834
14835 \1f
14836 File: as.info,  Node: PJ-Dependent,  Next: PPC-Dependent,  Prev: PDP-11-Dependent,  Up: Machine Dependencies
14837
14838 9.31 picoJava Dependent Features
14839 ================================
14840
14841 * Menu:
14842
14843 * PJ Options::              Options
14844 * PJ Syntax::               PJ Syntax
14845
14846 \1f
14847 File: as.info,  Node: PJ Options,  Next: PJ Syntax,  Up: PJ-Dependent
14848
14849 9.31.1 Options
14850 --------------
14851
14852 `as' has two additional command-line options for the picoJava
14853 architecture.
14854 `-ml'
14855      This option selects little endian data output.
14856
14857 `-mb'
14858      This option selects big endian data output.
14859
14860 \1f
14861 File: as.info,  Node: PJ Syntax,  Prev: PJ Options,  Up: PJ-Dependent
14862
14863 9.31.2 PJ Syntax
14864 ----------------
14865
14866 * Menu:
14867
14868 * PJ-Chars::                Special Characters
14869
14870 \1f
14871 File: as.info,  Node: PJ-Chars,  Up: PJ Syntax
14872
14873 9.31.2.1 Special Characters
14874 ...........................
14875
14876 The presence of a `!' or `/' on a line indicates the start of a comment
14877 that extends to the end of the current line.
14878
14879    If a `#' appears as the first character of a line then the whole
14880 line is treated as a comment, but in this case the line could also be a
14881 logical line number directive (*note Comments::) or a preprocessor
14882 control command (*note Preprocessing::).
14883
14884    The `;' character can be used to separate statements on the same
14885 line.
14886
14887 \1f
14888 File: as.info,  Node: PPC-Dependent,  Next: RL78-Dependent,  Prev: PJ-Dependent,  Up: Machine Dependencies
14889
14890 9.32 PowerPC Dependent Features
14891 ===============================
14892
14893 * Menu:
14894
14895 * PowerPC-Opts::                Options
14896 * PowerPC-Pseudo::              PowerPC Assembler Directives
14897 * PowerPC-Syntax::              PowerPC Syntax
14898
14899 \1f
14900 File: as.info,  Node: PowerPC-Opts,  Next: PowerPC-Pseudo,  Up: PPC-Dependent
14901
14902 9.32.1 Options
14903 --------------
14904
14905 The PowerPC chip family includes several successive levels, using the
14906 same core instruction set, but including a few additional instructions
14907 at each level.  There are exceptions to this however.  For details on
14908 what instructions each variant supports, please see the chip's
14909 architecture reference manual.
14910
14911    The following table lists all available PowerPC options.
14912
14913 `-a32'
14914      Generate ELF32 or XCOFF32.
14915
14916 `-a64'
14917      Generate ELF64 or XCOFF64.
14918
14919 `-K PIC'
14920      Set EF_PPC_RELOCATABLE_LIB in ELF flags.
14921
14922 `-mpwrx | -mpwr2'
14923      Generate code for POWER/2 (RIOS2).
14924
14925 `-mpwr'
14926      Generate code for POWER (RIOS1)
14927
14928 `-m601'
14929      Generate code for PowerPC 601.
14930
14931 `-mppc, -mppc32, -m603, -m604'
14932      Generate code for PowerPC 603/604.
14933
14934 `-m403, -m405'
14935      Generate code for PowerPC 403/405.
14936
14937 `-m440'
14938      Generate code for PowerPC 440.  BookE and some 405 instructions.
14939
14940 `-m464'
14941      Generate code for PowerPC 464.
14942
14943 `-m476'
14944      Generate code for PowerPC 476.
14945
14946 `-m7400, -m7410, -m7450, -m7455'
14947      Generate code for PowerPC 7400/7410/7450/7455.
14948
14949 `-m750cl'
14950      Generate code for PowerPC 750CL.
14951
14952 `-mppc64, -m620'
14953      Generate code for PowerPC 620/625/630.
14954
14955 `-me500, -me500x2'
14956      Generate code for Motorola e500 core complex.
14957
14958 `-me500mc'
14959      Generate code for Freescale e500mc core complex.
14960
14961 `-me500mc64'
14962      Generate code for Freescale e500mc64 core complex.
14963
14964 `-me5500'
14965      Generate code for Freescale e5500 core complex.
14966
14967 `-me6500'
14968      Generate code for Freescale e6500 core complex.
14969
14970 `-mspe'
14971      Generate code for Motorola SPE instructions.
14972
14973 `-mtitan'
14974      Generate code for AppliedMicro Titan core complex.
14975
14976 `-mppc64bridge'
14977      Generate code for PowerPC 64, including bridge insns.
14978
14979 `-mbooke'
14980      Generate code for 32-bit BookE.
14981
14982 `-ma2'
14983      Generate code for A2 architecture.
14984
14985 `-me300'
14986      Generate code for PowerPC e300 family.
14987
14988 `-maltivec'
14989      Generate code for processors with AltiVec instructions.
14990
14991 `-mvsx'
14992      Generate code for processors with Vector-Scalar (VSX) instructions.
14993
14994 `-mpower4, -mpwr4'
14995      Generate code for Power4 architecture.
14996
14997 `-mpower5, -mpwr5, -mpwr5x'
14998      Generate code for Power5 architecture.
14999
15000 `-mpower6, -mpwr6'
15001      Generate code for Power6 architecture.
15002
15003 `-mpower7, -mpwr7'
15004      Generate code for Power7 architecture.
15005
15006 `-mcell'
15007      Generate code for Cell Broadband Engine architecture.
15008
15009 `-mcom'
15010      Generate code Power/PowerPC common instructions.
15011
15012 `-many'
15013      Generate code for any architecture (PWR/PWRX/PPC).
15014
15015 `-mregnames'
15016      Allow symbolic names for registers.
15017
15018 `-mno-regnames'
15019      Do not allow symbolic names for registers.
15020
15021 `-mrelocatable'
15022      Support for GCC's -mrelocatable option.
15023
15024 `-mrelocatable-lib'
15025      Support for GCC's -mrelocatable-lib option.
15026
15027 `-memb'
15028      Set PPC_EMB bit in ELF flags.
15029
15030 `-mlittle, -mlittle-endian, -le'
15031      Generate code for a little endian machine.
15032
15033 `-mbig, -mbig-endian, -be'
15034      Generate code for a big endian machine.
15035
15036 `-msolaris'
15037      Generate code for Solaris.
15038
15039 `-mno-solaris'
15040      Do not generate code for Solaris.
15041
15042 `-nops=COUNT'
15043      If an alignment directive inserts more than COUNT nops, put a
15044      branch at the beginning to skip execution of the nops.
15045
15046 \1f
15047 File: as.info,  Node: PowerPC-Pseudo,  Next: PowerPC-Syntax,  Prev: PowerPC-Opts,  Up: PPC-Dependent
15048
15049 9.32.2 PowerPC Assembler Directives
15050 -----------------------------------
15051
15052 A number of assembler directives are available for PowerPC.  The
15053 following table is far from complete.
15054
15055 `.machine "string"'
15056      This directive allows you to change the machine for which code is
15057      generated.  `"string"' may be any of the -m cpu selection options
15058      (without the -m) enclosed in double quotes, `"push"', or `"pop"'.
15059      `.machine "push"' saves the currently selected cpu, which may be
15060      restored with `.machine "pop"'.
15061
15062 \1f
15063 File: as.info,  Node: PowerPC-Syntax,  Prev: PowerPC-Pseudo,  Up: PPC-Dependent
15064
15065 9.32.3 PowerPC Syntax
15066 ---------------------
15067
15068 * Menu:
15069
15070 * PowerPC-Chars::                Special Characters
15071
15072 \1f
15073 File: as.info,  Node: PowerPC-Chars,  Up: PowerPC-Syntax
15074
15075 9.32.3.1 Special Characters
15076 ...........................
15077
15078 The presence of a `#' on a line indicates the start of a comment that
15079 extends to the end of the current line.
15080
15081    If a `#' appears as the first character of a line then the whole
15082 line is treated as a comment, but in this case the line could also be a
15083 logical line number directive (*note Comments::) or a preprocessor
15084 control command (*note Preprocessing::).
15085
15086    If the assembler has been configured for the ppc-*-solaris* target
15087 then the `!' character also acts as a line comment character.  This can
15088 be disabled via the `-mno-solaris' command line option.
15089
15090    The `;' character can be used to separate statements on the same
15091 line.
15092
15093 \1f
15094 File: as.info,  Node: RL78-Dependent,  Next: RX-Dependent,  Prev: PPC-Dependent,  Up: Machine Dependencies
15095
15096 9.33 RL78 Dependent Features
15097 ============================
15098
15099 * Menu:
15100
15101 * RL78-Opts::                   RL78 Assembler Command Line Options
15102 * RL78-Modifiers::              Symbolic Operand Modifiers
15103 * RL78-Directives::             Assembler Directives
15104 * RL78-Syntax::                 Syntax
15105
15106 \1f
15107 File: as.info,  Node: RL78-Opts,  Next: RL78-Modifiers,  Up: RL78-Dependent
15108
15109 9.33.1 RL78 Options
15110 -------------------
15111
15112 The Renesas RL78 port of `as' has no target-specific options.
15113
15114 \1f
15115 File: as.info,  Node: RL78-Modifiers,  Next: RL78-Directives,  Prev: RL78-Opts,  Up: RL78-Dependent
15116
15117 9.33.2 Symbolic Operand Modifiers
15118 ---------------------------------
15119
15120 The RL78 has three modifiers that adjust the relocations used by the
15121 linker:
15122
15123 `%lo16()'
15124      When loading a 20-bit (or wider) address into registers, this
15125      modifier selects the 16 least significant bits.
15126
15127             movw ax,#%lo16(_sym)
15128
15129 `%hi16()'
15130      When loading a 20-bit (or wider) address into registers, this
15131      modifier selects the 16 most significant bits.
15132
15133             movw ax,#%hi16(_sym)
15134
15135 `%hi8()'
15136      When loading a 20-bit (or wider) address into registers, this
15137      modifier selects the 8 bits that would go into CS or ES (i.e. bits
15138      23..16).
15139
15140             mov es, #%hi8(_sym)
15141
15142
15143 \1f
15144 File: as.info,  Node: RL78-Directives,  Next: RL78-Syntax,  Prev: RL78-Modifiers,  Up: RL78-Dependent
15145
15146 9.33.3 Assembler Directives
15147 ---------------------------
15148
15149 In addition to the common directives, the RL78 adds these:
15150
15151 `.double'
15152      Output a constant in "double" format, which is a 32-bit floating
15153      point value on RL78.
15154
15155 `.bss'
15156      Select the BSS section.
15157
15158 `.3byte'
15159      Output a constant value in a three byte format.
15160
15161 `.int'
15162 `.word'
15163      Output a constant value in a four byte format.
15164
15165
15166 \1f
15167 File: as.info,  Node: RL78-Syntax,  Prev: RL78-Directives,  Up: RL78-Dependent
15168
15169 9.33.4 Syntax for the RL78
15170 --------------------------
15171
15172 * Menu:
15173
15174 * RL78-Chars::                Special Characters
15175
15176 \1f
15177 File: as.info,  Node: RL78-Chars,  Up: RL78-Syntax
15178
15179 9.33.4.1 Special Characters
15180 ...........................
15181
15182 The presence of a `;' appearing anywhere on a line indicates the start
15183 of a comment that extends to the end of that line.
15184
15185    If a `#' appears as the first character of a line then the whole
15186 line is treated as a comment, but in this case the line can also be a
15187 logical line number directive (*note Comments::) or a preprocessor
15188 control command (*note Preprocessing::).
15189
15190    The `|' character can be used to separate statements on the same
15191 line.
15192
15193 \1f
15194 File: as.info,  Node: RX-Dependent,  Next: S/390-Dependent,  Prev: RL78-Dependent,  Up: Machine Dependencies
15195
15196 9.34 RX Dependent Features
15197 ==========================
15198
15199 * Menu:
15200
15201 * RX-Opts::                   RX Assembler Command Line Options
15202 * RX-Modifiers::              Symbolic Operand Modifiers
15203 * RX-Directives::             Assembler Directives
15204 * RX-Float::                  Floating Point
15205 * RX-Syntax::                 Syntax
15206
15207 \1f
15208 File: as.info,  Node: RX-Opts,  Next: RX-Modifiers,  Up: RX-Dependent
15209
15210 9.34.1 RX Options
15211 -----------------
15212
15213 The Renesas RX port of `as' has a few target specfic command line
15214 options:
15215
15216 `-m32bit-doubles'
15217      This option controls the ABI and indicates to use a 32-bit float
15218      ABI.  It has no effect on the assembled instructions, but it does
15219      influence the behaviour of the `.double' pseudo-op.  This is the
15220      default.
15221
15222 `-m64bit-doubles'
15223      This option controls the ABI and indicates to use a 64-bit float
15224      ABI.  It has no effect on the assembled instructions, but it does
15225      influence the behaviour of the `.double' pseudo-op.
15226
15227 `-mbig-endian'
15228      This option controls the ABI and indicates to use a big-endian data
15229      ABI.  It has no effect on the assembled instructions, but it does
15230      influence the behaviour of the `.short', `.hword', `.int',
15231      `.word', `.long', `.quad' and `.octa' pseudo-ops.
15232
15233 `-mlittle-endian'
15234      This option controls the ABI and indicates to use a little-endian
15235      data ABI.  It has no effect on the assembled instructions, but it
15236      does influence the behaviour of the `.short', `.hword', `.int',
15237      `.word', `.long', `.quad' and `.octa' pseudo-ops.  This is the
15238      default.
15239
15240 `-muse-conventional-section-names'
15241      This option controls the default names given to the code (.text),
15242      initialised data (.data) and uninitialised data sections (.bss).
15243
15244 `-muse-renesas-section-names'
15245      This option controls the default names given to the code (.P),
15246      initialised data (.D_1) and uninitialised data sections (.B_1).
15247      This is the default.
15248
15249 `-msmall-data-limit'
15250      This option tells the assembler that the small data limit feature
15251      of the RX port of GCC is being used.  This results in the assembler
15252      generating an undefined reference to a symbol called `__gp' for
15253      use by the relocations that are needed to support the small data
15254      limit feature.   This option is not enabled by default as it would
15255      otherwise pollute the symbol table.
15256
15257 `-mpid'
15258      This option tells the assembler that the position independent data
15259      of the RX port of GCC is being used.  This results in the assembler
15260      generating an undefined reference to a symbol called `__pid_base',
15261      and also setting the RX_PID flag bit in the e_flags field of the
15262      ELF header of the object file.
15263
15264 `-mint-register=NUM'
15265      This option tells the assembler how many registers have been
15266      reserved for use by interrupt handlers.  This is needed in order
15267      to compute the correct values for the `%gpreg' and `%pidreg' meta
15268      registers.
15269
15270
15271 \1f
15272 File: as.info,  Node: RX-Modifiers,  Next: RX-Directives,  Prev: RX-Opts,  Up: RX-Dependent
15273
15274 9.34.2 Symbolic Operand Modifiers
15275 ---------------------------------
15276
15277 The assembler supports one modifier when using symbol addresses in RX
15278 instruction operands.  The general syntax is the following:
15279
15280      %gp(symbol)
15281
15282    The modifier returns the offset from the __GP symbol to the
15283 specified symbol as a 16-bit value.  The intent is that this offset
15284 should be used in a register+offset move instruction when generating
15285 references to small data.  Ie, like this:
15286
15287        mov.W     %gp(_foo)[%gpreg], r1
15288
15289    The assembler also supports two meta register names which can be used
15290 to refer to registers whose values may not be known to the programmer.
15291 These meta register names are:
15292
15293 `%gpreg'
15294      The small data address register.
15295
15296 `%pidreg'
15297      The PID base address register.
15298
15299
15300    Both registers normally have the value r13, but this can change if
15301 some registers have been reserved for use by interrupt handlers or if
15302 both the small data limit and position independent data features are
15303 being used at the same time.
15304
15305 \1f
15306 File: as.info,  Node: RX-Directives,  Next: RX-Float,  Prev: RX-Modifiers,  Up: RX-Dependent
15307
15308 9.34.3 Assembler Directives
15309 ---------------------------
15310
15311 The RX version of `as' has the following specific assembler directives:
15312
15313 `.3byte'
15314      Inserts a 3-byte value into the output file at the current
15315      location.
15316
15317 `.fetchalign'
15318      If the next opcode following this directive spans a fetch line
15319      boundary (8 byte boundary), the opcode is aligned to that boundary.
15320      If the next opcode does not span a fetch line, this directive has
15321      no effect.  Note that one or more labels may be between this
15322      directive and the opcode; those labels are aligned as well.  Any
15323      inserted bytes due to alignment will form a NOP opcode.
15324
15325
15326 \1f
15327 File: as.info,  Node: RX-Float,  Next: RX-Syntax,  Prev: RX-Directives,  Up: RX-Dependent
15328
15329 9.34.4 Floating Point
15330 ---------------------
15331
15332 The floating point formats generated by directives are these.
15333
15334 `.float'
15335      `Single' precision (32-bit) floating point constants.
15336
15337 `.double'
15338      If the `-m64bit-doubles' command line option has been specified
15339      then then `double' directive generates `double' precision (64-bit)
15340      floating point constants, otherwise it generates `single'
15341      precision (32-bit) floating point constants.  To force the
15342      generation of 64-bit floating point constants used the `dc.d'
15343      directive instead.
15344
15345
15346 \1f
15347 File: as.info,  Node: RX-Syntax,  Prev: RX-Float,  Up: RX-Dependent
15348
15349 9.34.5 Syntax for the RX
15350 ------------------------
15351
15352 * Menu:
15353
15354 * RX-Chars::                Special Characters
15355
15356 \1f
15357 File: as.info,  Node: RX-Chars,  Up: RX-Syntax
15358
15359 9.34.5.1 Special Characters
15360 ...........................
15361
15362 The presence of a `;' appearing anywhere on a line indicates the start
15363 of a comment that extends to the end of that line.
15364
15365    If a `#' appears as the first character of a line then the whole
15366 line is treated as a comment, but in this case the line can also be a
15367 logical line number directive (*note Comments::) or a preprocessor
15368 control command (*note Preprocessing::).
15369
15370    The `!' character can be used to separate statements on the same
15371 line.
15372
15373 \1f
15374 File: as.info,  Node: S/390-Dependent,  Next: SCORE-Dependent,  Prev: RX-Dependent,  Up: Machine Dependencies
15375
15376 9.35 IBM S/390 Dependent Features
15377 =================================
15378
15379    The s390 version of `as' supports two architectures modes and seven
15380 chip levels. The architecture modes are the Enterprise System
15381 Architecture (ESA) and the newer z/Architecture mode. The chip levels
15382 are g5, g6, z900, z990, z9-109, z9-ec, z10 and z196.
15383
15384 * Menu:
15385
15386 * s390 Options::                Command-line Options.
15387 * s390 Characters::             Special Characters.
15388 * s390 Syntax::                 Assembler Instruction syntax.
15389 * s390 Directives::             Assembler Directives.
15390 * s390 Floating Point::         Floating Point.
15391
15392 \1f
15393 File: as.info,  Node: s390 Options,  Next: s390 Characters,  Up: S/390-Dependent
15394
15395 9.35.1 Options
15396 --------------
15397
15398 The following table lists all available s390 specific options:
15399
15400 `-m31 | -m64'
15401      Select 31- or 64-bit ABI implying a word size of 32- or 64-bit.
15402
15403      These options are only available with the ELF object file format,
15404      and require that the necessary BFD support has been included (on a
15405      31-bit platform you must add -enable-64-bit-bfd on the call to the
15406      configure script to enable 64-bit usage and use s390x as target
15407      platform).
15408
15409 `-mesa | -mzarch'
15410      Select the architecture mode, either the Enterprise System
15411      Architecture (esa) mode or the z/Architecture mode (zarch).
15412
15413      The 64-bit instructions are only available with the z/Architecture
15414      mode.  The combination of `-m64' and `-mesa' results in a warning
15415      message.
15416
15417 `-march=CPU'
15418      This option specifies the target processor. The following
15419      processor names are recognized: `g5', `g6', `z900', `z990',
15420      `z9-109', `z9-ec', `z10' and `z196'.  Assembling an instruction
15421      that is not supported on the target processor results in an error
15422      message. Do not specify `g5' or `g6' with `-mzarch'.
15423
15424 `-mregnames'
15425      Allow symbolic names for registers.
15426
15427 `-mno-regnames'
15428      Do not allow symbolic names for registers.
15429
15430 `-mwarn-areg-zero'
15431      Warn whenever the operand for a base or index register has been
15432      specified but evaluates to zero. This can indicate the misuse of
15433      general purpose register 0 as an address register.
15434
15435
15436 \1f
15437 File: as.info,  Node: s390 Characters,  Next: s390 Syntax,  Prev: s390 Options,  Up: S/390-Dependent
15438
15439 9.35.2 Special Characters
15440 -------------------------
15441
15442 `#' is the line comment character.
15443
15444    If a `#' appears as the first character of a line then the whole
15445 line is treated as a comment, but in this case the line could also be a
15446 logical line number directive (*note Comments::) or a preprocessor
15447 control command (*note Preprocessing::).
15448
15449    The `;' character can be used instead of a newline to separate
15450 statements.
15451
15452 \1f
15453 File: as.info,  Node: s390 Syntax,  Next: s390 Directives,  Prev: s390 Characters,  Up: S/390-Dependent
15454
15455 9.35.3 Instruction syntax
15456 -------------------------
15457
15458 The assembler syntax closely follows the syntax outlined in Enterprise
15459 Systems Architecture/390 Principles of Operation (SA22-7201) and the
15460 z/Architecture Principles of Operation (SA22-7832).
15461
15462    Each instruction has two major parts, the instruction mnemonic and
15463 the instruction operands. The instruction format varies.
15464
15465 * Menu:
15466
15467 * s390 Register::               Register Naming
15468 * s390 Mnemonics::              Instruction Mnemonics
15469 * s390 Operands::               Instruction Operands
15470 * s390 Formats::                Instruction Formats
15471 * s390 Aliases::                Instruction Aliases
15472 * s390 Operand Modifier::       Instruction Operand Modifier
15473 * s390 Instruction Marker::     Instruction Marker
15474 * s390 Literal Pool Entries::   Literal Pool Entries
15475
15476 \1f
15477 File: as.info,  Node: s390 Register,  Next: s390 Mnemonics,  Up: s390 Syntax
15478
15479 9.35.3.1 Register naming
15480 ........................
15481
15482 The `as' recognizes a number of predefined symbols for the various
15483 processor registers. A register specification in one of the instruction
15484 formats is an unsigned integer between 0 and 15. The specific
15485 instruction and the position of the register in the instruction format
15486 denotes the type of the register. The register symbols are prefixed with
15487 `%':
15488
15489      %rN   the 16 general purpose registers, 0 <= N <= 15
15490      %fN   the 16 floating point registers, 0 <= N <= 15
15491      %aN   the 16 access registers, 0 <= N <= 15
15492      %cN   the 16 control registers, 0 <= N <= 15
15493      %lit  an alias for the general purpose register %r13
15494      %sp   an alias for the general purpose register %r15
15495
15496 \1f
15497 File: as.info,  Node: s390 Mnemonics,  Next: s390 Operands,  Prev: s390 Register,  Up: s390 Syntax
15498
15499 9.35.3.2 Instruction Mnemonics
15500 ..............................
15501
15502 All instructions documented in the Principles of Operation are supported
15503 with the mnemonic and order of operands as described.  The instruction
15504 mnemonic identifies the instruction format (*Note s390 Formats::) and
15505 the specific operation code for the instruction.  For example, the `lr'
15506 mnemonic denotes the instruction format `RR' with the operation code
15507 `0x18'.
15508
15509    The definition of the various mnemonics follows a scheme, where the
15510 first character usually hint at the type of the instruction:
15511
15512      a          add instruction, for example `al' for add logical 32-bit
15513      b          branch instruction, for example `bc' for branch on condition
15514      c          compare or convert instruction, for example `cr' for compare
15515                 register 32-bit
15516      d          divide instruction, for example `dlr' devide logical register
15517                 64-bit to 32-bit
15518      i          insert instruction, for example `ic' insert character
15519      l          load instruction, for example `ltr' load and test register
15520      mv         move instruction, for example `mvc' move character
15521      m          multiply instruction, for example `mh' multiply halfword
15522      n          and instruction, for example `ni' and immediate
15523      o          or instruction, for example `oc' or character
15524      sla, sll   shift left single instruction
15525      sra, srl   shift right single instruction
15526      st         store instruction, for example `stm' store multiple
15527      s          subtract instruction, for example `slr' subtract
15528                 logical 32-bit
15529      t          test or translate instruction, of example `tm' test under mask
15530      x          exclusive or instruction, for example `xc' exclusive or
15531                 character
15532
15533    Certain characters at the end of the mnemonic may describe a property
15534 of the instruction:
15535
15536      c   the instruction uses a 8-bit character operand
15537      f   the instruction extends a 32-bit operand to 64 bit
15538      g   the operands are treated as 64-bit values
15539      h   the operand uses a 16-bit halfword operand
15540      i   the instruction uses an immediate operand
15541      l   the instruction uses unsigned, logical operands
15542      m   the instruction uses a mask or operates on multiple values
15543      r   if r is the last character, the instruction operates on registers
15544      y   the instruction uses 20-bit displacements
15545
15546    There are many exceptions to the scheme outlined in the above lists,
15547 in particular for the priviledged instructions. For non-priviledged
15548 instruction it works quite well, for example the instruction `clgfr' c:
15549 compare instruction, l: unsigned operands, g: 64-bit operands, f: 32-
15550 to 64-bit extension, r: register operands. The instruction compares an
15551 64-bit value in a register with the zero extended 32-bit value from a
15552 second register.  For a complete list of all mnemonics see appendix B
15553 in the Principles of Operation.
15554
15555 \1f
15556 File: as.info,  Node: s390 Operands,  Next: s390 Formats,  Prev: s390 Mnemonics,  Up: s390 Syntax
15557
15558 9.35.3.3 Instruction Operands
15559 .............................
15560
15561 Instruction operands can be grouped into three classes, operands located
15562 in registers, immediate operands, and operands in storage.
15563
15564    A register operand can be located in general, floating-point, access,
15565 or control register. The register is identified by a four-bit field.
15566 The field containing the register operand is called the R field.
15567
15568    Immediate operands are contained within the instruction and can have
15569 8, 16 or 32 bits. The field containing the immediate operand is called
15570 the I field. Dependent on the instruction the I field is either signed
15571 or unsigned.
15572
15573    A storage operand consists of an address and a length. The address
15574 of a storage operands can be specified in any of these ways:
15575
15576    * The content of a single general R
15577
15578    * The sum of the content of a general register called the base
15579      register B plus the content of a displacement field D
15580
15581    * The sum of the contents of two general registers called the index
15582      register X and the base register B plus the content of a
15583      displacement field
15584
15585    * The sum of the current instruction address and a 32-bit signed
15586      immediate field multiplied by two.
15587
15588    The length of a storage operand can be:
15589
15590    * Implied by the instruction
15591
15592    * Specified by a bitmask
15593
15594    * Specified by a four-bit or eight-bit length field L
15595
15596    * Specified by the content of a general register
15597
15598    The notation for storage operand addresses formed from multiple
15599 fields is as follows:
15600
15601 `Dn(Bn)'
15602      the address for operand number n is formed from the content of
15603      general register Bn called the base register and the displacement
15604      field Dn.
15605
15606 `Dn(Xn,Bn)'
15607      the address for operand number n is formed from the content of
15608      general register Xn called the index register, general register Bn
15609      called the base register and the displacement field Dn.
15610
15611 `Dn(Ln,Bn)'
15612      the address for operand number n is formed from the content of
15613      general regiser Bn called the base register and the displacement
15614      field Dn.  The length of the operand n is specified by the field
15615      Ln.
15616
15617    The base registers Bn and the index registers Xn of a storage
15618 operand can be skipped. If Bn and Xn are skipped, a zero will be stored
15619 to the operand field. The notation changes as follows:
15620
15621      full notation        short notation
15622      ------------------------------------------ 
15623      Dn(0,Bn)             Dn(Bn)
15624      Dn(0,0)              Dn
15625      Dn(0)                Dn
15626      Dn(Ln,0)             Dn(Ln)
15627
15628 \1f
15629 File: as.info,  Node: s390 Formats,  Next: s390 Aliases,  Prev: s390 Operands,  Up: s390 Syntax
15630
15631 9.35.3.4 Instruction Formats
15632 ............................
15633
15634 The Principles of Operation manuals lists 26 instruction formats where
15635 some of the formats have multiple variants. For the `.insn' pseudo
15636 directive the assembler recognizes some of the formats.  Typically, the
15637 most general variant of the instruction format is used by the `.insn'
15638 directive.
15639
15640    The following table lists the abbreviations used in the table of
15641 instruction formats:
15642
15643      OpCode / OpCd   Part of the op code.
15644      Bx              Base register number for operand x.
15645      Dx              Displacement for operand x.
15646      DLx             Displacement lower 12 bits for operand x.
15647      DHx             Displacement higher 8-bits for operand x.
15648      Rx              Register number for operand x.
15649      Xx              Index register number for operand x.
15650      Ix              Signed immediate for operand x.
15651      Ux              Unsigned immediate for operand x.
15652
15653    An instruction is two, four, or six bytes in length and must be
15654 aligned on a 2 byte boundary. The first two bits of the instruction
15655 specify the length of the instruction, 00 indicates a two byte
15656 instruction, 01 and 10 indicates a four byte instruction, and 11
15657 indicates a six byte instruction.
15658
15659    The following table lists the s390 instruction formats that are
15660 available with the `.insn' pseudo directive:
15661
15662 `E format'
15663
15664      +-------------+
15665      |    OpCode   |
15666      +-------------+
15667      0            15
15668
15669 `RI format: <insn> R1,I2'
15670
15671      +--------+----+----+------------------+
15672      | OpCode | R1 |OpCd|        I2        |
15673      +--------+----+----+------------------+
15674      0        8    12   16                31
15675
15676 `RIE format: <insn> R1,R3,I2'
15677
15678      +--------+----+----+------------------+--------+--------+
15679      | OpCode | R1 | R3 |        I2        |////////| OpCode |
15680      +--------+----+----+------------------+--------+--------+
15681      0        8    12   16                 32       40      47
15682
15683 `RIL format: <insn> R1,I2'
15684
15685      +--------+----+----+------------------------------------+
15686      | OpCode | R1 |OpCd|                  I2                |
15687      +--------+----+----+------------------------------------+
15688      0        8    12   16                                  47
15689
15690 `RILU format: <insn> R1,U2'
15691
15692      +--------+----+----+------------------------------------+
15693      | OpCode | R1 |OpCd|                  U2                |
15694      +--------+----+----+------------------------------------+
15695      0        8    12   16                                  47
15696
15697 `RIS format: <insn> R1,I2,M3,D4(B4)'
15698
15699      +--------+----+----+----+-------------+--------+--------+
15700      | OpCode | R1 | M3 | B4 |     D4      |   I2   | Opcode |
15701      +--------+----+----+----+-------------+--------+--------+
15702      0        8    12   16   20            32       36      47
15703
15704 `RR format: <insn> R1,R2'
15705
15706      +--------+----+----+
15707      | OpCode | R1 | R2 |
15708      +--------+----+----+
15709      0        8    12  15
15710
15711 `RRE format: <insn> R1,R2'
15712
15713      +------------------+--------+----+----+
15714      |      OpCode      |////////| R1 | R2 |
15715      +------------------+--------+----+----+
15716      0                  16       24   28  31
15717
15718 `RRF format: <insn> R1,R2,R3,M4'
15719
15720      +------------------+----+----+----+----+
15721      |      OpCode      | R3 | M4 | R1 | R2 |
15722      +------------------+----+----+----+----+
15723      0                  16   20   24   28  31
15724
15725 `RRS format: <insn> R1,R2,M3,D4(B4)'
15726
15727      +--------+----+----+----+-------------+----+----+--------+
15728      | OpCode | R1 | R3 | B4 |     D4      | M3 |////| OpCode |
15729      +--------+----+----+----+-------------+----+----+--------+
15730      0        8    12   16   20            32   36   40      47
15731
15732 `RS format: <insn> R1,R3,D2(B2)'
15733
15734      +--------+----+----+----+-------------+
15735      | OpCode | R1 | R3 | B2 |     D2      |
15736      +--------+----+----+----+-------------+
15737      0        8    12   16   20           31
15738
15739 `RSE format: <insn> R1,R3,D2(B2)'
15740
15741      +--------+----+----+----+-------------+--------+--------+
15742      | OpCode | R1 | R3 | B2 |     D2      |////////| OpCode |
15743      +--------+----+----+----+-------------+--------+--------+
15744      0        8    12   16   20            32       40      47
15745
15746 `RSI format: <insn> R1,R3,I2'
15747
15748      +--------+----+----+------------------------------------+
15749      | OpCode | R1 | R3 |                  I2                |
15750      +--------+----+----+------------------------------------+
15751      0        8    12   16                                  47
15752
15753 `RSY format: <insn> R1,R3,D2(B2)'
15754
15755      +--------+----+----+----+-------------+--------+--------+
15756      | OpCode | R1 | R3 | B2 |    DL2      |  DH2   | OpCode |
15757      +--------+----+----+----+-------------+--------+--------+
15758      0        8    12   16   20            32       40      47
15759
15760 `RX format: <insn> R1,D2(X2,B2)'
15761
15762      +--------+----+----+----+-------------+
15763      | OpCode | R1 | X2 | B2 |     D2      |
15764      +--------+----+----+----+-------------+
15765      0        8    12   16   20           31
15766
15767 `RXE format: <insn> R1,D2(X2,B2)'
15768
15769      +--------+----+----+----+-------------+--------+--------+
15770      | OpCode | R1 | X2 | B2 |     D2      |////////| OpCode |
15771      +--------+----+----+----+-------------+--------+--------+
15772      0        8    12   16   20            32       40      47
15773
15774 `RXF format: <insn> R1,R3,D2(X2,B2)'
15775
15776      +--------+----+----+----+-------------+----+---+--------+
15777      | OpCode | R3 | X2 | B2 |     D2      | R1 |///| OpCode |
15778      +--------+----+----+----+-------------+----+---+--------+
15779      0        8    12   16   20            32   36  40      47
15780
15781 `RXY format: <insn> R1,D2(X2,B2)'
15782
15783      +--------+----+----+----+-------------+--------+--------+
15784      | OpCode | R1 | X2 | B2 |     DL2     |   DH2  | OpCode |
15785      +--------+----+----+----+-------------+--------+--------+
15786      0        8    12   16   20            32   36   40      47
15787
15788 `S format: <insn> D2(B2)'
15789
15790      +------------------+----+-------------+
15791      |      OpCode      | B2 |     D2      |
15792      +------------------+----+-------------+
15793      0                  16   20           31
15794
15795 `SI format: <insn> D1(B1),I2'
15796
15797      +--------+---------+----+-------------+
15798      | OpCode |   I2    | B1 |     D1      |
15799      +--------+---------+----+-------------+
15800      0        8         16   20           31
15801
15802 `SIY format: <insn> D1(B1),U2'
15803
15804      +--------+---------+----+-------------+--------+--------+
15805      | OpCode |   I2    | B1 |     DL1     |  DH1   | OpCode |
15806      +--------+---------+----+-------------+--------+--------+
15807      0        8         16   20            32   36   40      47
15808
15809 `SIL format: <insn> D1(B1),I2'
15810
15811      +------------------+----+-------------+-----------------+
15812      |      OpCode      | B1 |      D1     |       I2        |
15813      +------------------+----+-------------+-----------------+
15814      0                  16   20            32               47
15815
15816 `SS format: <insn> D1(R1,B1),D2(B3),R3'
15817
15818      +--------+----+----+----+-------------+----+------------+
15819      | OpCode | R1 | R3 | B1 |     D1      | B2 |     D2     |
15820      +--------+----+----+----+-------------+----+------------+
15821      0        8    12   16   20            32   36          47
15822
15823 `SSE format: <insn> D1(B1),D2(B2)'
15824
15825      +------------------+----+-------------+----+------------+
15826      |      OpCode      | B1 |     D1      | B2 |     D2     |
15827      +------------------+----+-------------+----+------------+
15828      0        8    12   16   20            32   36           47
15829
15830 `SSF format: <insn> D1(B1),D2(B2),R3'
15831
15832      +--------+----+----+----+-------------+----+------------+
15833      | OpCode | R3 |OpCd| B1 |     D1      | B2 |     D2     |
15834      +--------+----+----+----+-------------+----+------------+
15835      0        8    12   16   20            32   36           47
15836
15837
15838    For the complete list of all instruction format variants see the
15839 Principles of Operation manuals.
15840
15841 \1f
15842 File: as.info,  Node: s390 Aliases,  Next: s390 Operand Modifier,  Prev: s390 Formats,  Up: s390 Syntax
15843
15844 9.35.3.5 Instruction Aliases
15845 ............................
15846
15847 A specific bit pattern can have multiple mnemonics, for example the bit
15848 pattern `0xa7000000' has the mnemonics `tmh' and `tmlh'. In addition,
15849 there are a number of mnemonics recognized by `as' that are not present
15850 in the Principles of Operation.  These are the short forms of the
15851 branch instructions, where the condition code mask operand is encoded
15852 in the mnemonic. This is relevant for the branch instructions, the
15853 compare and branch instructions, and the compare and trap instructions.
15854
15855    For the branch instructions there are 20 condition code strings that
15856 can be used as part of the mnemonic in place of a mask operand in the
15857 instruction format:
15858
15859      instruction          short form
15860      ------------------------------------------ 
15861      bcr   M1,R2          b<m>r  R2
15862      bc    M1,D2(X2,B2)   b<m>   D2(X2,B2)
15863      brc   M1,I2          j<m>   I2
15864      brcl  M1,I2          jg<m>  I2
15865
15866    In the mnemonic for a branch instruction the condition code string
15867 <m> can be any of the following:
15868
15869      o     jump on overflow / if ones
15870      h     jump on A high
15871      p     jump on plus
15872      nle   jump on not low or equal
15873      l     jump on A low
15874      m     jump on minus
15875      nhe   jump on not high or equal
15876      lh    jump on low or high
15877      ne    jump on A not equal B
15878      nz    jump on not zero / if not zeros
15879      e     jump on A equal B
15880      z     jump on zero / if zeroes
15881      nlh   jump on not low or high
15882      he    jump on high or equal
15883      nl    jump on A not low
15884      nm    jump on not minus / if not mixed
15885      le    jump on low or equal
15886      nh    jump on A not high
15887      np    jump on not plus
15888      no    jump on not overflow / if not ones
15889
15890    For the compare and branch, and compare and trap instructions there
15891 are 12 condition code strings that can be used as part of the mnemonic
15892 in place of a mask operand in the instruction format:
15893
15894      instruction                 short form
15895      -------------------------------------------------------- 
15896      crb    R1,R2,M3,D4(B4)      crb<m>    R1,R2,D4(B4)
15897      cgrb   R1,R2,M3,D4(B4)      cgrb<m>   R1,R2,D4(B4)
15898      crj    R1,R2,M3,I4          crj<m>    R1,R2,I4
15899      cgrj   R1,R2,M3,I4          cgrj<m>   R1,R2,I4
15900      cib    R1,I2,M3,D4(B4)      cib<m>    R1,I2,D4(B4)
15901      cgib   R1,I2,M3,D4(B4)      cgib<m>   R1,I2,D4(B4)
15902      cij    R1,I2,M3,I4          cij<m>    R1,I2,I4
15903      cgij   R1,I2,M3,I4          cgij<m>   R1,I2,I4
15904      crt    R1,R2,M3             crt<m>    R1,R2
15905      cgrt   R1,R2,M3             cgrt<m>   R1,R2
15906      cit    R1,I2,M3             cit<m>    R1,I2
15907      cgit   R1,I2,M3             cgit<m>   R1,I2
15908      clrb   R1,R2,M3,D4(B4)      clrb<m>   R1,R2,D4(B4)
15909      clgrb  R1,R2,M3,D4(B4)      clgrb<m>  R1,R2,D4(B4)
15910      clrj   R1,R2,M3,I4          clrj<m>   R1,R2,I4
15911      clgrj  R1,R2,M3,I4          clgrj<m>  R1,R2,I4
15912      clib   R1,I2,M3,D4(B4)      clib<m>   R1,I2,D4(B4)
15913      clgib  R1,I2,M3,D4(B4)      clgib<m>  R1,I2,D4(B4)
15914      clij   R1,I2,M3,I4          clij<m>   R1,I2,I4
15915      clgij  R1,I2,M3,I4          clgij<m>  R1,I2,I4
15916      clrt   R1,R2,M3             clrt<m>   R1,R2
15917      clgrt  R1,R2,M3             clgrt<m>  R1,R2
15918      clfit  R1,I2,M3             clfit<m>  R1,I2
15919      clgit  R1,I2,M3             clgit<m>  R1,I2
15920
15921    In the mnemonic for a compare and branch and compare and trap
15922 instruction the condition code string <m> can be any of the following:
15923
15924      h     jump on A high
15925      nle   jump on not low or equal
15926      l     jump on A low
15927      nhe   jump on not high or equal
15928      ne    jump on A not equal B
15929      lh    jump on low or high
15930      e     jump on A equal B
15931      nlh   jump on not low or high
15932      nl    jump on A not low
15933      he    jump on high or equal
15934      nh    jump on A not high
15935      le    jump on low or equal
15936
15937 \1f
15938 File: as.info,  Node: s390 Operand Modifier,  Next: s390 Instruction Marker,  Prev: s390 Aliases,  Up: s390 Syntax
15939
15940 9.35.3.6 Instruction Operand Modifier
15941 .....................................
15942
15943 If a symbol modifier is attached to a symbol in an expression for an
15944 instruction operand field, the symbol term is replaced with a reference
15945 to an object in the global offset table (GOT) or the procedure linkage
15946 table (PLT). The following expressions are allowed: `symbol@modifier +
15947 constant', `symbol@modifier + label + constant', and `symbol@modifier -
15948 label + constant'.  The term `symbol' is the symbol that will be
15949 entered into the GOT or PLT, `label' is a local label, and `constant'
15950 is an arbitrary expression that the assembler can evaluate to a
15951 constant value.
15952
15953    The term `(symbol + constant1)@modifier +/- label + constant2' is
15954 also accepted but a warning message is printed and the term is
15955 converted to `symbol@modifier +/- label + constant1 + constant2'.
15956
15957 `@got'
15958 `@got12'
15959      The @got modifier can be used for displacement fields, 16-bit
15960      immediate fields and 32-bit pc-relative immediate fields. The
15961      @got12 modifier is synonym to @got. The symbol is added to the
15962      GOT. For displacement fields and 16-bit immediate fields the
15963      symbol term is replaced with the offset from the start of the GOT
15964      to the GOT slot for the symbol.  For a 32-bit pc-relative field
15965      the pc-relative offset to the GOT slot from the current
15966      instruction address is used.
15967
15968 `@gotent'
15969      The @gotent modifier can be used for 32-bit pc-relative immediate
15970      fields.  The symbol is added to the GOT and the symbol term is
15971      replaced with the pc-relative offset from the current instruction
15972      to the GOT slot for the symbol.
15973
15974 `@gotoff'
15975      The @gotoff modifier can be used for 16-bit immediate fields. The
15976      symbol term is replaced with the offset from the start of the GOT
15977      to the address of the symbol.
15978
15979 `@gotplt'
15980      The @gotplt modifier can be used for displacement fields, 16-bit
15981      immediate fields, and 32-bit pc-relative immediate fields. A
15982      procedure linkage table entry is generated for the symbol and a
15983      jump slot for the symbol is added to the GOT. For displacement
15984      fields and 16-bit immediate fields the symbol term is replaced
15985      with the offset from the start of the GOT to the jump slot for the
15986      symbol. For a 32-bit pc-relative field the pc-relative offset to
15987      the jump slot from the current instruction address is used.
15988
15989 `@plt'
15990      The @plt modifier can be used for 16-bit and 32-bit pc-relative
15991      immediate fields. A procedure linkage table entry is generated for
15992      the symbol.  The symbol term is replaced with the relative offset
15993      from the current instruction to the PLT entry for the symbol.
15994
15995 `@pltoff'
15996      The @pltoff modifier can be used for 16-bit immediate fields. The
15997      symbol term is replaced with the offset from the start of the PLT
15998      to the address of the symbol.
15999
16000 `@gotntpoff'
16001      The @gotntpoff modifier can be used for displacement fields. The
16002      symbol is added to the static TLS block and the negated offset to
16003      the symbol in the static TLS block is added to the GOT. The symbol
16004      term is replaced with the offset to the GOT slot from the start of
16005      the GOT.
16006
16007 `@indntpoff'
16008      The @indntpoff modifier can be used for 32-bit pc-relative
16009      immediate fields. The symbol is added to the static TLS block and
16010      the negated offset to the symbol in the static TLS block is added
16011      to the GOT. The symbol term is replaced with the pc-relative
16012      offset to the GOT slot from the current instruction address.
16013
16014    For more information about the thread local storage modifiers
16015 `gotntpoff' and `indntpoff' see the ELF extension documentation `ELF
16016 Handling For Thread-Local Storage'.
16017
16018 \1f
16019 File: as.info,  Node: s390 Instruction Marker,  Next: s390 Literal Pool Entries,  Prev: s390 Operand Modifier,  Up: s390 Syntax
16020
16021 9.35.3.7 Instruction Marker
16022 ...........................
16023
16024 The thread local storage instruction markers are used by the linker to
16025 perform code optimization.
16026
16027 `:tls_load'
16028      The :tls_load marker is used to flag the load instruction in the
16029      initial exec TLS model that retrieves the offset from the thread
16030      pointer to a thread local storage variable from the GOT.
16031
16032 `:tls_gdcall'
16033      The :tls_gdcall marker is used to flag the branch-and-save
16034      instruction to the __tls_get_offset function in the global dynamic
16035      TLS model.
16036
16037 `:tls_ldcall'
16038      The :tls_ldcall marker is used to flag the branch-and-save
16039      instruction to the __tls_get_offset function in the local dynamic
16040      TLS model.
16041
16042    For more information about the thread local storage instruction
16043 marker and the linker optimizations see the ELF extension documentation
16044 `ELF Handling For Thread-Local Storage'.
16045
16046 \1f
16047 File: as.info,  Node: s390 Literal Pool Entries,  Prev: s390 Instruction Marker,  Up: s390 Syntax
16048
16049 9.35.3.8 Literal Pool Entries
16050 .............................
16051
16052 A literal pool is a collection of values. To access the values a pointer
16053 to the literal pool is loaded to a register, the literal pool register.
16054 Usually, register %r13 is used as the literal pool register (*Note s390
16055 Register::). Literal pool entries are created by adding the suffix
16056 :lit1, :lit2, :lit4, or :lit8 to the end of an expression for an
16057 instruction operand. The expression is added to the literal pool and the
16058 operand is replaced with the offset to the literal in the literal pool.
16059
16060 `:lit1'
16061      The literal pool entry is created as an 8-bit value. An operand
16062      modifier must not be used for the original expression.
16063
16064 `:lit2'
16065      The literal pool entry is created as a 16 bit value. The operand
16066      modifier @got may be used in the original expression. The term
16067      `x@got:lit2' will put the got offset for the global symbol x to
16068      the literal pool as 16 bit value.
16069
16070 `:lit4'
16071      The literal pool entry is created as a 32-bit value. The operand
16072      modifier @got and @plt may be used in the original expression. The
16073      term `x@got:lit4' will put the got offset for the global symbol x
16074      to the literal pool as a 32-bit value. The term `x@plt:lit4' will
16075      put the plt offset for the global symbol x to the literal pool as
16076      a 32-bit value.
16077
16078 `:lit8'
16079      The literal pool entry is created as a 64-bit value. The operand
16080      modifier @got and @plt may be used in the original expression. The
16081      term `x@got:lit8' will put the got offset for the global symbol x
16082      to the literal pool as a 64-bit value. The term `x@plt:lit8' will
16083      put the plt offset for the global symbol x to the literal pool as
16084      a 64-bit value.
16085
16086    The assembler directive `.ltorg' is used to emit all literal pool
16087 entries to the current position.
16088
16089 \1f
16090 File: as.info,  Node: s390 Directives,  Next: s390 Floating Point,  Prev: s390 Syntax,  Up: S/390-Dependent
16091
16092 9.35.4 Assembler Directives
16093 ---------------------------
16094
16095 `as' for s390 supports all of the standard ELF assembler directives as
16096 outlined in the main part of this document.  Some directives have been
16097 extended and there are some additional directives, which are only
16098 available for the s390 `as'.
16099
16100 `.insn'
16101      This directive permits the numeric representation of an
16102      instructions and makes the assembler insert the operands according
16103      to one of the instructions formats for `.insn' (*Note s390
16104      Formats::).  For example, the instruction `l %r1,24(%r15)' could
16105      be written as `.insn rx,0x58000000,%r1,24(%r15)'.  
16106
16107 `.short'
16108 `.long'
16109 `.quad'
16110      This directive places one or more 16-bit (.short), 32-bit (.long),
16111      or 64-bit (.quad) values into the current section. If an ELF or
16112      TLS modifier is used only the following expressions are allowed:
16113      `symbol@modifier + constant', `symbol@modifier + label +
16114      constant', and `symbol@modifier - label + constant'.  The
16115      following modifiers are available:
16116     `@got'
16117     `@got12'
16118           The @got modifier can be used for .short, .long and .quad.
16119           The @got12 modifier is synonym to @got. The symbol is added
16120           to the GOT. The symbol term is replaced with offset from the
16121           start of the GOT to the GOT slot for the symbol.
16122
16123     `@gotoff'
16124           The @gotoff modifier can be used for .short, .long and .quad.
16125           The symbol term is replaced with the offset from the start of
16126           the GOT to the address of the symbol.
16127
16128     `@gotplt'
16129           The @gotplt modifier can be used for .long and .quad. A
16130           procedure linkage table entry is generated for the symbol and
16131           a jump slot for the symbol is added to the GOT. The symbol
16132           term is replaced with the offset from the start of the GOT to
16133           the jump slot for the symbol.
16134
16135     `@plt'
16136           The @plt modifier can be used for .long and .quad. A
16137           procedure linkage table entry us generated for the symbol.
16138           The symbol term is replaced with the address of the PLT entry
16139           for the symbol.
16140
16141     `@pltoff'
16142           The @pltoff modifier can be used for .short, .long and .quad.
16143           The symbol term is replaced with the offset from the start of
16144           the PLT to the address of the symbol.
16145
16146     `@tlsgd'
16147     `@tlsldm'
16148           The @tlsgd and @tlsldm modifier can be used for .long and
16149           .quad. A tls_index structure for the symbol is added to the
16150           GOT. The symbol term is replaced with the offset from the
16151           start of the GOT to the tls_index structure.
16152
16153     `@gotntpoff'
16154     `@indntpoff'
16155           The @gotntpoff and @indntpoff modifier can be used for .long
16156           and .quad.  The symbol is added to the static TLS block and
16157           the negated offset to the symbol in the static TLS block is
16158           added to the GOT. For @gotntpoff the symbol term is replaced
16159           with the offset from the start of the GOT to the GOT slot,
16160           for @indntpoff the symbol term is replaced with the address
16161           of the GOT slot.
16162
16163     `@dtpoff'
16164           The @dtpoff modifier can be used for .long and .quad. The
16165           symbol term is replaced with the offset of the symbol
16166           relative to the start of the TLS block it is contained in.
16167
16168     `@ntpoff'
16169           The @ntpoff modifier can be used for .long and .quad. The
16170           symbol term is replaced with the offset of the symbol
16171           relative to the TCB pointer.
16172
16173      For more information about the thread local storage modifiers see
16174      the ELF extension documentation `ELF Handling For Thread-Local
16175      Storage'.
16176
16177 `.ltorg'
16178      This directive causes the current contents of the literal pool to
16179      be dumped to the current location (*Note s390 Literal Pool
16180      Entries::).
16181
16182 `.machine string'
16183      This directive allows you to change the machine for which code is
16184      generated.  `string' may be any of the `-march=' selection options
16185      (without the -march=), `push', or `pop'.  `.machine push' saves
16186      the currently selected cpu, which may be restored with `.machine
16187      pop'.  Be aware that the cpu string has to be put into double
16188      quotes in case it contains characters not appropriate for
16189      identifiers.  So you have to write `"z9-109"' instead of just
16190      `z9-109'.
16191
16192 \1f
16193 File: as.info,  Node: s390 Floating Point,  Prev: s390 Directives,  Up: S/390-Dependent
16194
16195 9.35.5 Floating Point
16196 ---------------------
16197
16198 The assembler recognizes both the IEEE floating-point instruction and
16199 the hexadecimal floating-point instructions. The floating-point
16200 constructors `.float', `.single', and `.double' always emit the IEEE
16201 format. To assemble hexadecimal floating-point constants the `.long'
16202 and `.quad' directives must be used.
16203
16204 \1f
16205 File: as.info,  Node: SCORE-Dependent,  Next: Sparc-Dependent,  Prev: S/390-Dependent,  Up: Machine Dependencies
16206
16207 9.36 SCORE Dependent Features
16208 =============================
16209
16210 * Menu:
16211
16212 * SCORE-Opts::          Assembler options
16213 * SCORE-Pseudo::        SCORE Assembler Directives
16214 * SCORE-Syntax::        Syntax
16215
16216 \1f
16217 File: as.info,  Node: SCORE-Opts,  Next: SCORE-Pseudo,  Up: SCORE-Dependent
16218
16219 9.36.1 Options
16220 --------------
16221
16222 The following table lists all available SCORE options.
16223
16224 `-G NUM'
16225      This option sets the largest size of an object that can be
16226      referenced implicitly with the `gp' register. The default value is
16227      8.
16228
16229 `-EB'
16230      Assemble code for a big-endian cpu
16231
16232 `-EL'
16233      Assemble code for a little-endian cpu
16234
16235 `-FIXDD'
16236      Assemble code for fix data dependency
16237
16238 `-NWARN'
16239      Assemble code for no warning message for fix data dependency
16240
16241 `-SCORE5'
16242      Assemble code for target is SCORE5
16243
16244 `-SCORE5U'
16245      Assemble code for target is SCORE5U
16246
16247 `-SCORE7'
16248      Assemble code for target is SCORE7, this is default setting
16249
16250 `-SCORE3'
16251      Assemble code for target is SCORE3
16252
16253 `-march=score7'
16254      Assemble code for target is SCORE7, this is default setting
16255
16256 `-march=score3'
16257      Assemble code for target is SCORE3
16258
16259 `-USE_R1'
16260      Assemble code for no warning message when using temp register r1
16261
16262 `-KPIC'
16263      Generate code for PIC.  This option tells the assembler to generate
16264      score position-independent macro expansions.  It also tells the
16265      assembler to mark the output file as PIC.
16266
16267 `-O0'
16268      Assembler will not perform any optimizations
16269
16270 `-V'
16271      Sunplus release version
16272
16273
16274 \1f
16275 File: as.info,  Node: SCORE-Pseudo,  Next: SCORE-Syntax,  Prev: SCORE-Opts,  Up: SCORE-Dependent
16276
16277 9.36.2 SCORE Assembler Directives
16278 ---------------------------------
16279
16280 A number of assembler directives are available for SCORE.  The
16281 following table is far from complete.
16282
16283 `.set nwarn'
16284      Let the assembler not to generate warnings if the source machine
16285      language instructions happen data dependency.
16286
16287 `.set fixdd'
16288      Let the assembler to insert bubbles (32 bit nop instruction / 16
16289      bit nop! Instruction) if the source machine language instructions
16290      happen data dependency.
16291
16292 `.set nofixdd'
16293      Let the assembler to generate warnings if the source machine
16294      language instructions happen data dependency. (Default)
16295
16296 `.set r1'
16297      Let the assembler not to generate warnings if the source program
16298      uses r1. allow user to use r1
16299
16300 `set nor1'
16301      Let the assembler to generate warnings if the source program uses
16302      r1. (Default)
16303
16304 `.sdata'
16305      Tell the assembler to add subsequent data into the sdata section
16306
16307 `.rdata'
16308      Tell the assembler to add subsequent data into the rdata section
16309
16310 `.frame "frame-register", "offset", "return-pc-register"'
16311      Describe a stack frame. "frame-register" is the frame register,
16312      "offset" is the distance from the frame register to the virtual
16313      frame pointer, "return-pc-register" is the return program register.
16314      You must use ".ent" before ".frame" and only one ".frame" can be
16315      used per ".ent".
16316
16317 `.mask "bitmask", "frameoffset"'
16318      Indicate which of the integer registers are saved in the current
16319      function's stack frame, this is for the debugger to explain the
16320      frame chain.
16321
16322 `.ent "proc-name"'
16323      Set the beginning of the procedure "proc_name". Use this directive
16324      when you want to generate information for the debugger.
16325
16326 `.end proc-name'
16327      Set the end of a procedure. Use this directive to generate
16328      information for the debugger.
16329
16330 `.bss'
16331      Switch the destination of following statements into the bss
16332      section, which is used for data that is uninitialized anywhere.
16333
16334
16335 \1f
16336 File: as.info,  Node: SCORE-Syntax,  Prev: SCORE-Pseudo,  Up: SCORE-Dependent
16337
16338 9.36.3 SCORE Syntax
16339 -------------------
16340
16341 * Menu:
16342
16343 * SCORE-Chars::                Special Characters
16344
16345 \1f
16346 File: as.info,  Node: SCORE-Chars,  Up: SCORE-Syntax
16347
16348 9.36.3.1 Special Characters
16349 ...........................
16350
16351 The presence of a `#' appearing anywhere on a line indicates the start
16352 of a comment that extends to the end of that line.
16353
16354    If a `#' appears as the first character of a line then the whole
16355 line is treated as a comment, but in this case the line can also be a
16356 logical line number directive (*note Comments::) or a preprocessor
16357 control command (*note Preprocessing::).
16358
16359    The `;' character can be used to separate statements on the same
16360 line.
16361
16362 \1f
16363 File: as.info,  Node: SH-Dependent,  Next: SH64-Dependent,  Prev: NS32K-Dependent,  Up: Machine Dependencies
16364
16365 9.37 Renesas / SuperH SH Dependent Features
16366 ===========================================
16367
16368 * Menu:
16369
16370 * SH Options::              Options
16371 * SH Syntax::               Syntax
16372 * SH Floating Point::       Floating Point
16373 * SH Directives::           SH Machine Directives
16374 * SH Opcodes::              Opcodes
16375
16376 \1f
16377 File: as.info,  Node: SH Options,  Next: SH Syntax,  Up: SH-Dependent
16378
16379 9.37.1 Options
16380 --------------
16381
16382 `as' has following command-line options for the Renesas (formerly
16383 Hitachi) / SuperH SH family.
16384
16385 `--little'
16386      Generate little endian code.
16387
16388 `--big'
16389      Generate big endian code.
16390
16391 `--relax'
16392      Alter jump instructions for long displacements.
16393
16394 `--small'
16395      Align sections to 4 byte boundaries, not 16.
16396
16397 `--dsp'
16398      Enable sh-dsp insns, and disable sh3e / sh4 insns.
16399
16400 `--renesas'
16401      Disable optimization with section symbol for compatibility with
16402      Renesas assembler.
16403
16404 `--allow-reg-prefix'
16405      Allow '$' as a register name prefix.
16406
16407 `--fdpic'
16408      Generate an FDPIC object file.
16409
16410 `--isa=sh4 | sh4a'
16411      Specify the sh4 or sh4a instruction set.
16412
16413 `--isa=dsp'
16414      Enable sh-dsp insns, and disable sh3e / sh4 insns.
16415
16416 `--isa=fp'
16417      Enable sh2e, sh3e, sh4, and sh4a insn sets.
16418
16419 `--isa=all'
16420      Enable sh1, sh2, sh2e, sh3, sh3e, sh4, sh4a, and sh-dsp insn sets.
16421
16422 `-h-tick-hex'
16423      Support H'00 style hex constants in addition to 0x00 style.
16424
16425
16426 \1f
16427 File: as.info,  Node: SH Syntax,  Next: SH Floating Point,  Prev: SH Options,  Up: SH-Dependent
16428
16429 9.37.2 Syntax
16430 -------------
16431
16432 * Menu:
16433
16434 * SH-Chars::                Special Characters
16435 * SH-Regs::                 Register Names
16436 * SH-Addressing::           Addressing Modes
16437
16438 \1f
16439 File: as.info,  Node: SH-Chars,  Next: SH-Regs,  Up: SH Syntax
16440
16441 9.37.2.1 Special Characters
16442 ...........................
16443
16444 `!' is the line comment character.
16445
16446    You can use `;' instead of a newline to separate statements.
16447
16448    If a `#' appears as the first character of a line then the whole
16449 line is treated as a comment, but in this case the line could also be a
16450 logical line number directive (*note Comments::) or a preprocessor
16451 control command (*note Preprocessing::).
16452
16453    Since `$' has no special meaning, you may use it in symbol names.
16454
16455 \1f
16456 File: as.info,  Node: SH-Regs,  Next: SH-Addressing,  Prev: SH-Chars,  Up: SH Syntax
16457
16458 9.37.2.2 Register Names
16459 .......................
16460
16461 You can use the predefined symbols `r0', `r1', `r2', `r3', `r4', `r5',
16462 `r6', `r7', `r8', `r9', `r10', `r11', `r12', `r13', `r14', and `r15' to
16463 refer to the SH registers.
16464
16465    The SH also has these control registers:
16466
16467 `pr'
16468      procedure register (holds return address)
16469
16470 `pc'
16471      program counter
16472
16473 `mach'
16474 `macl'
16475      high and low multiply accumulator registers
16476
16477 `sr'
16478      status register
16479
16480 `gbr'
16481      global base register
16482
16483 `vbr'
16484      vector base register (for interrupt vectors)
16485
16486 \1f
16487 File: as.info,  Node: SH-Addressing,  Prev: SH-Regs,  Up: SH Syntax
16488
16489 9.37.2.3 Addressing Modes
16490 .........................
16491
16492 `as' understands the following addressing modes for the SH.  `RN' in
16493 the following refers to any of the numbered registers, but _not_ the
16494 control registers.
16495
16496 `RN'
16497      Register direct
16498
16499 `@RN'
16500      Register indirect
16501
16502 `@-RN'
16503      Register indirect with pre-decrement
16504
16505 `@RN+'
16506      Register indirect with post-increment
16507
16508 `@(DISP, RN)'
16509      Register indirect with displacement
16510
16511 `@(R0, RN)'
16512      Register indexed
16513
16514 `@(DISP, GBR)'
16515      `GBR' offset
16516
16517 `@(R0, GBR)'
16518      GBR indexed
16519
16520 `ADDR'
16521 `@(DISP, PC)'
16522      PC relative address (for branch or for addressing memory).  The
16523      `as' implementation allows you to use the simpler form ADDR
16524      anywhere a PC relative address is called for; the alternate form
16525      is supported for compatibility with other assemblers.
16526
16527 `#IMM'
16528      Immediate data
16529
16530 \1f
16531 File: as.info,  Node: SH Floating Point,  Next: SH Directives,  Prev: SH Syntax,  Up: SH-Dependent
16532
16533 9.37.3 Floating Point
16534 ---------------------
16535
16536 SH2E, SH3E and SH4 groups have on-chip floating-point unit (FPU). Other
16537 SH groups can use `.float' directive to generate IEEE floating-point
16538 numbers.
16539
16540    SH2E and SH3E support single-precision floating point calculations as
16541 well as entirely PCAPI compatible emulation of double-precision
16542 floating point calculations. SH2E and SH3E instructions are a subset of
16543 the floating point calculations conforming to the IEEE754 standard.
16544
16545    In addition to single-precision and double-precision floating-point
16546 operation capability, the on-chip FPU of SH4 has a 128-bit graphic
16547 engine that enables 32-bit floating-point data to be processed 128 bits
16548 at a time. It also supports 4 * 4 array operations and inner product
16549 operations. Also, a superscalar architecture is employed that enables
16550 simultaneous execution of two instructions (including FPU
16551 instructions), providing performance of up to twice that of
16552 conventional architectures at the same frequency.
16553
16554 \1f
16555 File: as.info,  Node: SH Directives,  Next: SH Opcodes,  Prev: SH Floating Point,  Up: SH-Dependent
16556
16557 9.37.4 SH Machine Directives
16558 ----------------------------
16559
16560 `uaword'
16561 `ualong'
16562 `uaquad'
16563      `as' will issue a warning when a misaligned `.word', `.long', or
16564      `.quad' directive is used.  You may use `.uaword', `.ualong', or
16565      `.uaquad' to indicate that the value is intentionally misaligned.
16566
16567 \1f
16568 File: as.info,  Node: SH Opcodes,  Prev: SH Directives,  Up: SH-Dependent
16569
16570 9.37.5 Opcodes
16571 --------------
16572
16573 For detailed information on the SH machine instruction set, see
16574 `SH-Microcomputer User's Manual' (Renesas) or `SH-4 32-bit CPU Core
16575 Architecture' (SuperH) and `SuperH (SH) 64-Bit RISC Series' (SuperH).
16576
16577    `as' implements all the standard SH opcodes.  No additional
16578 pseudo-instructions are needed on this family.  Note, however, that
16579 because `as' supports a simpler form of PC-relative addressing, you may
16580 simply write (for example)
16581
16582      mov.l  bar,r0
16583
16584 where other assemblers might require an explicit displacement to `bar'
16585 from the program counter:
16586
16587      mov.l  @(DISP, PC)
16588
16589    Here is a summary of SH opcodes:
16590
16591      Legend:
16592      Rn        a numbered register
16593      Rm        another numbered register
16594      #imm      immediate data
16595      disp      displacement
16596      disp8     8-bit displacement
16597      disp12    12-bit displacement
16598
16599      add #imm,Rn                    lds.l @Rn+,PR
16600      add Rm,Rn                      mac.w @Rm+,@Rn+
16601      addc Rm,Rn                     mov #imm,Rn
16602      addv Rm,Rn                     mov Rm,Rn
16603      and #imm,R0                    mov.b Rm,@(R0,Rn)
16604      and Rm,Rn                      mov.b Rm,@-Rn
16605      and.b #imm,@(R0,GBR)           mov.b Rm,@Rn
16606      bf disp8                       mov.b @(disp,Rm),R0
16607      bra disp12                     mov.b @(disp,GBR),R0
16608      bsr disp12                     mov.b @(R0,Rm),Rn
16609      bt disp8                       mov.b @Rm+,Rn
16610      clrmac                         mov.b @Rm,Rn
16611      clrt                           mov.b R0,@(disp,Rm)
16612      cmp/eq #imm,R0                 mov.b R0,@(disp,GBR)
16613      cmp/eq Rm,Rn                   mov.l Rm,@(disp,Rn)
16614      cmp/ge Rm,Rn                   mov.l Rm,@(R0,Rn)
16615      cmp/gt Rm,Rn                   mov.l Rm,@-Rn
16616      cmp/hi Rm,Rn                   mov.l Rm,@Rn
16617      cmp/hs Rm,Rn                   mov.l @(disp,Rn),Rm
16618      cmp/pl Rn                      mov.l @(disp,GBR),R0
16619      cmp/pz Rn                      mov.l @(disp,PC),Rn
16620      cmp/str Rm,Rn                  mov.l @(R0,Rm),Rn
16621      div0s Rm,Rn                    mov.l @Rm+,Rn
16622      div0u                          mov.l @Rm,Rn
16623      div1 Rm,Rn                     mov.l R0,@(disp,GBR)
16624      exts.b Rm,Rn                   mov.w Rm,@(R0,Rn)
16625      exts.w Rm,Rn                   mov.w Rm,@-Rn
16626      extu.b Rm,Rn                   mov.w Rm,@Rn
16627      extu.w Rm,Rn                   mov.w @(disp,Rm),R0
16628      jmp @Rn                        mov.w @(disp,GBR),R0
16629      jsr @Rn                        mov.w @(disp,PC),Rn
16630      ldc Rn,GBR                     mov.w @(R0,Rm),Rn
16631      ldc Rn,SR                      mov.w @Rm+,Rn
16632      ldc Rn,VBR                     mov.w @Rm,Rn
16633      ldc.l @Rn+,GBR                 mov.w R0,@(disp,Rm)
16634      ldc.l @Rn+,SR                  mov.w R0,@(disp,GBR)
16635      ldc.l @Rn+,VBR                 mova @(disp,PC),R0
16636      lds Rn,MACH                    movt Rn
16637      lds Rn,MACL                    muls Rm,Rn
16638      lds Rn,PR                      mulu Rm,Rn
16639      lds.l @Rn+,MACH                neg Rm,Rn
16640      lds.l @Rn+,MACL                negc Rm,Rn
16641
16642      nop                            stc VBR,Rn
16643      not Rm,Rn                      stc.l GBR,@-Rn
16644      or #imm,R0                     stc.l SR,@-Rn
16645      or Rm,Rn                       stc.l VBR,@-Rn
16646      or.b #imm,@(R0,GBR)            sts MACH,Rn
16647      rotcl Rn                       sts MACL,Rn
16648      rotcr Rn                       sts PR,Rn
16649      rotl Rn                        sts.l MACH,@-Rn
16650      rotr Rn                        sts.l MACL,@-Rn
16651      rte                            sts.l PR,@-Rn
16652      rts                            sub Rm,Rn
16653      sett                           subc Rm,Rn
16654      shal Rn                        subv Rm,Rn
16655      shar Rn                        swap.b Rm,Rn
16656      shll Rn                        swap.w Rm,Rn
16657      shll16 Rn                      tas.b @Rn
16658      shll2 Rn                       trapa #imm
16659      shll8 Rn                       tst #imm,R0
16660      shlr Rn                        tst Rm,Rn
16661      shlr16 Rn                      tst.b #imm,@(R0,GBR)
16662      shlr2 Rn                       xor #imm,R0
16663      shlr8 Rn                       xor Rm,Rn
16664      sleep                          xor.b #imm,@(R0,GBR)
16665      stc GBR,Rn                     xtrct Rm,Rn
16666      stc SR,Rn
16667
16668 \1f
16669 File: as.info,  Node: SH64-Dependent,  Next: PDP-11-Dependent,  Prev: SH-Dependent,  Up: Machine Dependencies
16670
16671 9.38 SuperH SH64 Dependent Features
16672 ===================================
16673
16674 * Menu:
16675
16676 * SH64 Options::              Options
16677 * SH64 Syntax::               Syntax
16678 * SH64 Directives::           SH64 Machine Directives
16679 * SH64 Opcodes::              Opcodes
16680
16681 \1f
16682 File: as.info,  Node: SH64 Options,  Next: SH64 Syntax,  Up: SH64-Dependent
16683
16684 9.38.1 Options
16685 --------------
16686
16687 `-isa=sh4 | sh4a'
16688      Specify the sh4 or sh4a instruction set.
16689
16690 `-isa=dsp'
16691      Enable sh-dsp insns, and disable sh3e / sh4 insns.
16692
16693 `-isa=fp'
16694      Enable sh2e, sh3e, sh4, and sh4a insn sets.
16695
16696 `-isa=all'
16697      Enable sh1, sh2, sh2e, sh3, sh3e, sh4, sh4a, and sh-dsp insn sets.
16698
16699 `-isa=shmedia | -isa=shcompact'
16700      Specify the default instruction set.  `SHmedia' specifies the
16701      32-bit opcodes, and `SHcompact' specifies the 16-bit opcodes
16702      compatible with previous SH families.  The default depends on the
16703      ABI selected; the default for the 64-bit ABI is SHmedia, and the
16704      default for the 32-bit ABI is SHcompact.  If neither the ABI nor
16705      the ISA is specified, the default is 32-bit SHcompact.
16706
16707      Note that the `.mode' pseudo-op is not permitted if the ISA is not
16708      specified on the command line.
16709
16710 `-abi=32 | -abi=64'
16711      Specify the default ABI.  If the ISA is specified and the ABI is
16712      not, the default ABI depends on the ISA, with SHmedia defaulting
16713      to 64-bit and SHcompact defaulting to 32-bit.
16714
16715      Note that the `.abi' pseudo-op is not permitted if the ABI is not
16716      specified on the command line.  When the ABI is specified on the
16717      command line, any `.abi' pseudo-ops in the source must match it.
16718
16719 `-shcompact-const-crange'
16720      Emit code-range descriptors for constants in SHcompact code
16721      sections.
16722
16723 `-no-mix'
16724      Disallow SHmedia code in the same section as constants and
16725      SHcompact code.
16726
16727 `-no-expand'
16728      Do not expand MOVI, PT, PTA or PTB instructions.
16729
16730 `-expand-pt32'
16731      With -abi=64, expand PT, PTA and PTB instructions to 32 bits only.
16732
16733 `-h-tick-hex'
16734      Support H'00 style hex constants in addition to 0x00 style.
16735
16736
16737 \1f
16738 File: as.info,  Node: SH64 Syntax,  Next: SH64 Directives,  Prev: SH64 Options,  Up: SH64-Dependent
16739
16740 9.38.2 Syntax
16741 -------------
16742
16743 * Menu:
16744
16745 * SH64-Chars::                Special Characters
16746 * SH64-Regs::                 Register Names
16747 * SH64-Addressing::           Addressing Modes
16748
16749 \1f
16750 File: as.info,  Node: SH64-Chars,  Next: SH64-Regs,  Up: SH64 Syntax
16751
16752 9.38.2.1 Special Characters
16753 ...........................
16754
16755 `!' is the line comment character.
16756
16757    If a `#' appears as the first character of a line then the whole
16758 line is treated as a comment, but in this case the line could also be a
16759 logical line number directive (*note Comments::) or a preprocessor
16760 control command (*note Preprocessing::).
16761
16762    You can use `;' instead of a newline to separate statements.
16763
16764    Since `$' has no special meaning, you may use it in symbol names.
16765
16766 \1f
16767 File: as.info,  Node: SH64-Regs,  Next: SH64-Addressing,  Prev: SH64-Chars,  Up: SH64 Syntax
16768
16769 9.38.2.2 Register Names
16770 .......................
16771
16772 You can use the predefined symbols `r0' through `r63' to refer to the
16773 SH64 general registers, `cr0' through `cr63' for control registers,
16774 `tr0' through `tr7' for target address registers, `fr0' through `fr63'
16775 for single-precision floating point registers, `dr0' through `dr62'
16776 (even numbered registers only) for double-precision floating point
16777 registers, `fv0' through `fv60' (multiples of four only) for
16778 single-precision floating point vectors, `fp0' through `fp62' (even
16779 numbered registers only) for single-precision floating point pairs,
16780 `mtrx0' through `mtrx48' (multiples of 16 only) for 4x4 matrices of
16781 single-precision floating point registers, `pc' for the program
16782 counter, and `fpscr' for the floating point status and control register.
16783
16784    You can also refer to the control registers by the mnemonics `sr',
16785 `ssr', `pssr', `intevt', `expevt', `pexpevt', `tra', `spc', `pspc',
16786 `resvec', `vbr', `tea', `dcr', `kcr0', `kcr1', `ctc', and `usr'.
16787
16788 \1f
16789 File: as.info,  Node: SH64-Addressing,  Prev: SH64-Regs,  Up: SH64 Syntax
16790
16791 9.38.2.3 Addressing Modes
16792 .........................
16793
16794 SH64 operands consist of either a register or immediate value.  The
16795 immediate value can be a constant or label reference (or portion of a
16796 label reference), as in this example:
16797
16798         movi    4,r2
16799         pt      function, tr4
16800         movi    (function >> 16) & 65535,r0
16801         shori   function & 65535, r0
16802         ld.l    r0,4,r0
16803
16804    Instruction label references can reference labels in either SHmedia
16805 or SHcompact.  To differentiate between the two, labels in SHmedia
16806 sections will always have the least significant bit set (i.e. they will
16807 be odd), which SHcompact labels will have the least significant bit
16808 reset (i.e. they will be even).  If you need to reference the actual
16809 address of a label, you can use the `datalabel' modifier, as in this
16810 example:
16811
16812         .long   function
16813         .long   datalabel function
16814
16815    In that example, the first longword may or may not have the least
16816 significant bit set depending on whether the label is an SHmedia label
16817 or an SHcompact label.  The second longword will be the actual address
16818 of the label, regardless of what type of label it is.
16819
16820 \1f
16821 File: as.info,  Node: SH64 Directives,  Next: SH64 Opcodes,  Prev: SH64 Syntax,  Up: SH64-Dependent
16822
16823 9.38.3 SH64 Machine Directives
16824 ------------------------------
16825
16826 In addition to the SH directives, the SH64 provides the following
16827 directives:
16828
16829 `.mode [shmedia|shcompact]'
16830 `.isa [shmedia|shcompact]'
16831      Specify the ISA for the following instructions (the two directives
16832      are equivalent).  Note that programs such as `objdump' rely on
16833      symbolic labels to determine when such mode switches occur (by
16834      checking the least significant bit of the label's address), so
16835      such mode/isa changes should always be followed by a label (in
16836      practice, this is true anyway).  Note that you cannot use these
16837      directives if you didn't specify an ISA on the command line.
16838
16839 `.abi [32|64]'
16840      Specify the ABI for the following instructions.  Note that you
16841      cannot use this directive unless you specified an ABI on the
16842      command line, and the ABIs specified must match.
16843
16844
16845 \1f
16846 File: as.info,  Node: SH64 Opcodes,  Prev: SH64 Directives,  Up: SH64-Dependent
16847
16848 9.38.4 Opcodes
16849 --------------
16850
16851 For detailed information on the SH64 machine instruction set, see
16852 `SuperH 64 bit RISC Series Architecture Manual' (SuperH, Inc.).
16853
16854    `as' implements all the standard SH64 opcodes.  In addition, the
16855 following pseudo-opcodes may be expanded into one or more alternate
16856 opcodes:
16857
16858 `movi'
16859      If the value doesn't fit into a standard `movi' opcode, `as' will
16860      replace the `movi' with a sequence of `movi' and `shori' opcodes.
16861
16862 `pt'
16863      This expands to a sequence of `movi' and `shori' opcode, followed
16864      by a `ptrel' opcode, or to a `pta' or `ptb' opcode, depending on
16865      the label referenced.
16866
16867
16868 \1f
16869 File: as.info,  Node: Sparc-Dependent,  Next: TIC54X-Dependent,  Prev: SCORE-Dependent,  Up: Machine Dependencies
16870
16871 9.39 SPARC Dependent Features
16872 =============================
16873
16874 * Menu:
16875
16876 * Sparc-Opts::                  Options
16877 * Sparc-Aligned-Data::          Option to enforce aligned data
16878 * Sparc-Syntax::                Syntax
16879 * Sparc-Float::                 Floating Point
16880 * Sparc-Directives::            Sparc Machine Directives
16881
16882 \1f
16883 File: as.info,  Node: Sparc-Opts,  Next: Sparc-Aligned-Data,  Up: Sparc-Dependent
16884
16885 9.39.1 Options
16886 --------------
16887
16888 The SPARC chip family includes several successive versions, using the
16889 same core instruction set, but including a few additional instructions
16890 at each version.  There are exceptions to this however.  For details on
16891 what instructions each variant supports, please see the chip's
16892 architecture reference manual.
16893
16894    By default, `as' assumes the core instruction set (SPARC v6), but
16895 "bumps" the architecture level as needed: it switches to successively
16896 higher architectures as it encounters instructions that only exist in
16897 the higher levels.
16898
16899    If not configured for SPARC v9 (`sparc64-*-*') GAS will not bump
16900 past sparclite by default, an option must be passed to enable the v9
16901 instructions.
16902
16903    GAS treats sparclite as being compatible with v8, unless an
16904 architecture is explicitly requested.  SPARC v9 is always incompatible
16905 with sparclite.
16906
16907 `-Av6 | -Av7 | -Av8 | -Asparclet | -Asparclite'
16908 `-Av8plus | -Av8plusa | -Av8plusb | -Av8plusc | -Av8plusd | -Av8plusv'
16909 `-Av9 | -Av9a | -Av9b | -Av9c | -Av9d | -Av9v'
16910 `-Asparc | -Asparcvis | -Asparcvis2 | -Asparcfmaf | -Asparcima'
16911 `-Asparcvis3 | -Asparcvis3r'
16912      Use one of the `-A' options to select one of the SPARC
16913      architectures explicitly.  If you select an architecture
16914      explicitly, `as' reports a fatal error if it encounters an
16915      instruction or feature requiring an incompatible or higher level.
16916
16917      `-Av8plus', `-Av8plusa', `-Av8plusb', `-Av8plusc', `-Av8plusd',
16918      and `-Av8plusv' select a 32 bit environment.
16919
16920      `-Av9', `-Av9a', `-Av9b', `-Av9c', `-Av9d', and `-Av9v' select a
16921      64 bit environment and are not available unless GAS is explicitly
16922      configured with 64 bit environment support.
16923
16924      `-Av8plusa' and `-Av9a' enable the SPARC V9 instruction set with
16925      UltraSPARC VIS 1.0 extensions.
16926
16927      `-Av8plusb' and `-Av9b' enable the UltraSPARC VIS 2.0 instructions,
16928      as well as the instructions enabled by `-Av8plusa' and `-Av9a'.
16929
16930      `-Av8plusc' and `-Av9c' enable the UltraSPARC Niagara instructions,
16931      as well as the instructions enabled by `-Av8plusb' and `-Av9b'.
16932
16933      `-Av8plusd' and `-Av9d' enable the floating point fused
16934      multiply-add, VIS 3.0, and HPC extension instructions, as well as
16935      the instructions enabled by `-Av8plusc' and `-Av9c'.
16936
16937      `-Av8plusv' and `-Av9v' enable the 'random', transactional memory,
16938      floating point unfused multiply-add, integer multiply-add, and
16939      cache sparing store instructions, as well as the instructions
16940      enabled by `-Av8plusd' and `-Av9d'.
16941
16942      `-Asparc' specifies a v9 environment.  It is equivalent to `-Av9'
16943      if the word size is 64-bit, and `-Av8plus' otherwise.
16944
16945      `-Asparcvis' specifies a v9a environment.  It is equivalent to
16946      `-Av9a' if the word size is 64-bit, and `-Av8plusa' otherwise.
16947
16948      `-Asparcvis2' specifies a v9b environment.  It is equivalent to
16949      `-Av9b' if the word size is 64-bit, and `-Av8plusb' otherwise.
16950
16951      `-Asparcfmaf' specifies a v9b environment with the floating point
16952      fused multiply-add instructions enabled.
16953
16954      `-Asparcima' specifies a v9b environment with the integer
16955      multiply-add instructions enabled.
16956
16957      `-Asparcvis3' specifies a v9b environment with the VIS 3.0, HPC ,
16958      and floating point fused multiply-add instructions enabled.
16959
16960      `-Asparcvis3r' specifies a v9b environment with the VIS 3.0, HPC,
16961      transactional memory, random, and floating point unfused
16962      multiply-add instructions enabled.
16963
16964 `-xarch=v8plus | -xarch=v8plusa | -xarch=v8plusb | -xarch=v8plusc'
16965 `-xarch=v8plusd | -xarch=v8plusv | -xarch=v9 | -xarch=v9a'
16966 `-xarch=v9b | -xarch=v9c | -xarch=v9d | -xarch=v9v'
16967 `-xarch=sparc | -xarch=sparcvis | -xarch=sparcvis2'
16968 `-xarch=sparcfmaf | -xarch=sparcima | -xarch=sparcvis3'
16969 `-xarch=sparcvis3r'
16970      For compatibility with the SunOS v9 assembler.  These options are
16971      equivalent to -Av8plus, -Av8plusa, -Av8plusb, -Av8plusc, -Av8plusd,
16972      -Av8plusv, -Av9, -Av9a, -Av9b, -Av9c, -Av9d, -Av9v, -Asparc,
16973      -Asparcvis, -Asparcvis2, -Asparcfmaf, -Asparcima, -Asparcvis3, and
16974      -Asparcvis3r, respectively.
16975
16976 `-bump'
16977      Warn whenever it is necessary to switch to another level.  If an
16978      architecture level is explicitly requested, GAS will not issue
16979      warnings until that level is reached, and will then bump the level
16980      as required (except between incompatible levels).
16981
16982 `-32 | -64'
16983      Select the word size, either 32 bits or 64 bits.  These options
16984      are only available with the ELF object file format, and require
16985      that the necessary BFD support has been included.
16986
16987 \1f
16988 File: as.info,  Node: Sparc-Aligned-Data,  Next: Sparc-Syntax,  Prev: Sparc-Opts,  Up: Sparc-Dependent
16989
16990 9.39.2 Enforcing aligned data
16991 -----------------------------
16992
16993 SPARC GAS normally permits data to be misaligned.  For example, it
16994 permits the `.long' pseudo-op to be used on a byte boundary.  However,
16995 the native SunOS assemblers issue an error when they see misaligned
16996 data.
16997
16998    You can use the `--enforce-aligned-data' option to make SPARC GAS
16999 also issue an error about misaligned data, just as the SunOS assemblers
17000 do.
17001
17002    The `--enforce-aligned-data' option is not the default because gcc
17003 issues misaligned data pseudo-ops when it initializes certain packed
17004 data structures (structures defined using the `packed' attribute).  You
17005 may have to assemble with GAS in order to initialize packed data
17006 structures in your own code.
17007
17008 \1f
17009 File: as.info,  Node: Sparc-Syntax,  Next: Sparc-Float,  Prev: Sparc-Aligned-Data,  Up: Sparc-Dependent
17010
17011 9.39.3 Sparc Syntax
17012 -------------------
17013
17014 The assembler syntax closely follows The Sparc Architecture Manual,
17015 versions 8 and 9, as well as most extensions defined by Sun for their
17016 UltraSPARC and Niagara line of processors.
17017
17018 * Menu:
17019
17020 * Sparc-Chars::                Special Characters
17021 * Sparc-Regs::                 Register Names
17022 * Sparc-Constants::            Constant Names
17023 * Sparc-Relocs::               Relocations
17024 * Sparc-Size-Translations::    Size Translations
17025
17026 \1f
17027 File: as.info,  Node: Sparc-Chars,  Next: Sparc-Regs,  Up: Sparc-Syntax
17028
17029 9.39.3.1 Special Characters
17030 ...........................
17031
17032 A `!' character appearing anywhere on a line indicates the start of a
17033 comment that extends to the end of that line.
17034
17035    If a `#' appears as the first character of a line then the whole
17036 line is treated as a comment, but in this case the line could also be a
17037 logical line number directive (*note Comments::) or a preprocessor
17038 control command (*note Preprocessing::).
17039
17040    `;' can be used instead of a newline to separate statements.
17041
17042 \1f
17043 File: as.info,  Node: Sparc-Regs,  Next: Sparc-Constants,  Prev: Sparc-Chars,  Up: Sparc-Syntax
17044
17045 9.39.3.2 Register Names
17046 .......................
17047
17048 The Sparc integer register file is broken down into global, outgoing,
17049 local, and incoming.
17050
17051    * The 8 global registers are referred to as `%gN'.
17052
17053    * The 8 outgoing registers are referred to as `%oN'.
17054
17055    * The 8 local registers are referred to as `%lN'.
17056
17057    * The 8 incoming registers are referred to as `%iN'.
17058
17059    * The frame pointer register `%i6' can be referenced using the alias
17060      `%fp'.
17061
17062    * The stack pointer register `%o6' can be referenced using the alias
17063      `%sp'.
17064
17065    Floating point registers are simply referred to as `%fN'.  When
17066 assembling for pre-V9, only 32 floating point registers are available.
17067 For V9 and later there are 64, but there are restrictions when
17068 referencing the upper 32 registers.  They can only be accessed as
17069 double or quad, and thus only even or quad numbered accesses are
17070 allowed.  For example, `%f34' is a legal floating point register, but
17071 `%f35' is not.
17072
17073    Certain V9 instructions allow access to ancillary state registers.
17074 Most simply they can be referred to as `%asrN' where N can be from 16
17075 to 31.  However, there are some aliases defined to reference ASR
17076 registers defined for various UltraSPARC processors:
17077
17078    * The tick compare register is referred to as `%tick_cmpr'.
17079
17080    * The system tick register is referred to as `%stick'.  An alias,
17081      `%sys_tick', exists but is deprecated and should not be used by
17082      new software.
17083
17084    * The system tick compare register is referred to as `%stick_cmpr'.
17085      An alias, `%sys_tick_cmpr', exists but is deprecated and should
17086      not be used by new software.
17087
17088    * The software interrupt register is referred to as `%softint'.
17089
17090    * The set software interrupt register is referred to as
17091      `%set_softint'.  The mnemonic `%softint_set' is provided as an
17092      alias.
17093
17094    * The clear software interrupt register is referred to as
17095      `%clear_softint'.  The mnemonic `%softint_clear' is provided as an
17096      alias.
17097
17098    * The performance instrumentation counters register is referred to as
17099      `%pic'.
17100
17101    * The performance control register is referred to as `%pcr'.
17102
17103    * The graphics status register is referred to as `%gsr'.
17104
17105    * The V9 dispatch control register is referred to as `%dcr'.
17106
17107    Various V9 branch and conditional move instructions allow
17108 specification of which set of integer condition codes to test.  These
17109 are referred to as `%xcc' and `%icc'.
17110
17111    In V9, there are 4 sets of floating point condition codes which are
17112 referred to as `%fccN'.
17113
17114    Several special privileged and non-privileged registers exist:
17115
17116    * The V9 address space identifier register is referred to as `%asi'.
17117
17118    * The V9 restorable windows register is referred to as `%canrestore'.
17119
17120    * The V9 savable windows register is referred to as `%cansave'.
17121
17122    * The V9 clean windows register is referred to as `%cleanwin'.
17123
17124    * The V9 current window pointer register is referred to as `%cwp'.
17125
17126    * The floating-point queue register is referred to as `%fq'.
17127
17128    * The V8 co-processor queue register is referred to as `%cq'.
17129
17130    * The floating point status register is referred to as `%fsr'.
17131
17132    * The other windows register is referred to as `%otherwin'.
17133
17134    * The V9 program counter register is referred to as `%pc'.
17135
17136    * The V9 next program counter register is referred to as `%npc'.
17137
17138    * The V9 processor interrupt level register is referred to as `%pil'.
17139
17140    * The V9 processor state register is referred to as `%pstate'.
17141
17142    * The trap base address register is referred to as `%tba'.
17143
17144    * The V9 tick register is referred to as `%tick'.
17145
17146    * The V9 trap level is referred to as `%tl'.
17147
17148    * The V9 trap program counter is referred to as `%tpc'.
17149
17150    * The V9 trap next program counter is referred to as `%tnpc'.
17151
17152    * The V9 trap state is referred to as `%tstate'.
17153
17154    * The V9 trap type is referred to as `%tt'.
17155
17156    * The V9 condition codes is referred to as `%ccr'.
17157
17158    * The V9 floating-point registers state is referred to as `%fprs'.
17159
17160    * The V9 version register is referred to as `%ver'.
17161
17162    * The V9 window state register is referred to as `%wstate'.
17163
17164    * The Y register is referred to as `%y'.
17165
17166    * The V8 window invalid mask register is referred to as `%wim'.
17167
17168    * The V8 processor state register is referred to as `%psr'.
17169
17170    * The V9 global register level register is referred to as `%gl'.
17171
17172    Several special register names exist for hypervisor mode code:
17173
17174    * The hyperprivileged processor state register is referred to as
17175      `%hpstate'.
17176
17177    * The hyperprivileged trap state register is referred to as
17178      `%htstate'.
17179
17180    * The hyperprivileged interrupt pending register is referred to as
17181      `%hintp'.
17182
17183    * The hyperprivileged trap base address register is referred to as
17184      `%htba'.
17185
17186    * The hyperprivileged implementation version register is referred to
17187      as `%hver'.
17188
17189    * The hyperprivileged system tick compare register is referred to as
17190      `%hstick_cmpr'.  Note that there is no `%hstick' register, the
17191      normal `%stick' is used.
17192
17193 \1f
17194 File: as.info,  Node: Sparc-Constants,  Next: Sparc-Relocs,  Prev: Sparc-Regs,  Up: Sparc-Syntax
17195
17196 9.39.3.3 Constants
17197 ..................
17198
17199 Several Sparc instructions take an immediate operand field for which
17200 mnemonic names exist.  Two such examples are `membar' and `prefetch'.
17201 Another example are the set of V9 memory access instruction that allow
17202 specification of an address space identifier.
17203
17204    The `membar' instruction specifies a memory barrier that is the
17205 defined by the operand which is a bitmask.  The supported mask
17206 mnemonics are:
17207
17208    * `#Sync' requests that all operations (including nonmemory
17209      reference operations) appearing prior to the `membar' must have
17210      been performed and the effects of any exceptions become visible
17211      before any instructions after the `membar' may be initiated.  This
17212      corresponds to `membar' cmask field bit 2.
17213
17214    * `#MemIssue' requests that all memory reference operations
17215      appearing prior to the `membar' must have been performed before
17216      any memory operation after the `membar' may be initiated.  This
17217      corresponds to `membar' cmask field bit 1.
17218
17219    * `#Lookaside' requests that a store appearing prior to the `membar'
17220      must complete before any load following the `membar' referencing
17221      the same address can be initiated.  This corresponds to `membar'
17222      cmask field bit 0.
17223
17224    * `#StoreStore' defines that the effects of all stores appearing
17225      prior to the `membar' instruction must be visible to all
17226      processors before the effect of any stores following the `membar'.
17227      Equivalent to the deprecated `stbar' instruction.  This
17228      corresponds to `membar' mmask field bit 3.
17229
17230    * `#LoadStore' defines all loads appearing prior to the `membar'
17231      instruction must have been performed before the effect of any
17232      stores following the `membar' is visible to any other processor.
17233      This corresponds to `membar' mmask field bit 2.
17234
17235    * `#StoreLoad' defines that the effects of all stores appearing
17236      prior to the `membar' instruction must be visible to all
17237      processors before loads following the `membar' may be performed.
17238      This corresponds to `membar' mmask field bit 1.
17239
17240    * `#LoadLoad' defines that all loads appearing prior to the `membar'
17241      instruction must have been performed before any loads following
17242      the `membar' may be performed.  This corresponds to `membar' mmask
17243      field bit 0.
17244
17245
17246    These values can be ored together, for example:
17247
17248      membar #Sync
17249      membar #StoreLoad | #LoadLoad
17250      membar #StoreLoad | #StoreStore
17251
17252    The `prefetch' and `prefetcha' instructions take a prefetch function
17253 code.  The following prefetch function code constant mnemonics are
17254 available:
17255
17256    * `#n_reads' requests a prefetch for several reads, and corresponds
17257      to a prefetch function code of 0.
17258
17259      `#one_read' requests a prefetch for one read, and corresponds to a
17260      prefetch function code of 1.
17261
17262      `#n_writes' requests a prefetch for several writes (and possibly
17263      reads), and corresponds to a prefetch function code of 2.
17264
17265      `#one_write' requests a prefetch for one write, and corresponds to
17266      a prefetch function code of 3.
17267
17268      `#page' requests a prefetch page, and corresponds to a prefetch
17269      function code of 4.
17270
17271      `#invalidate' requests a prefetch invalidate, and corresponds to a
17272      prefetch function code of 16.
17273
17274      `#unified' requests a prefetch to the nearest unified cache, and
17275      corresponds to a prefetch function code of 17.
17276
17277      `#n_reads_strong' requests a strong prefetch for several reads,
17278      and corresponds to a prefetch function code of 20.
17279
17280      `#one_read_strong' requests a strong prefetch for one read, and
17281      corresponds to a prefetch function code of 21.
17282
17283      `#n_writes_strong' requests a strong prefetch for several writes,
17284      and corresponds to a prefetch function code of 22.
17285
17286      `#one_write_strong' requests a strong prefetch for one write, and
17287      corresponds to a prefetch function code of 23.
17288
17289      Onle one prefetch code may be specified.  Here are some examples:
17290
17291           prefetch  [%l0 + %l2], #one_read
17292           prefetch  [%g2 + 8], #n_writes
17293           prefetcha [%g1] 0x8, #unified
17294           prefetcha [%o0 + 0x10] %asi, #n_reads
17295
17296      The actual behavior of a given prefetch function code is processor
17297      specific.  If a processor does not implement a given prefetch
17298      function code, it will treat the prefetch instruction as a nop.
17299
17300      For instructions that accept an immediate address space identifier,
17301      `as' provides many mnemonics corresponding to V9 defined as well
17302      as UltraSPARC and Niagara extended values.  For example, `#ASI_P'
17303      and `#ASI_BLK_INIT_QUAD_LDD_AIUS'.  See the V9 and processor
17304      specific manuals for details.
17305
17306
17307 \1f
17308 File: as.info,  Node: Sparc-Relocs,  Next: Sparc-Size-Translations,  Prev: Sparc-Constants,  Up: Sparc-Syntax
17309
17310 9.39.3.4 Relocations
17311 ....................
17312
17313 ELF relocations are available as defined in the 32-bit and 64-bit Sparc
17314 ELF specifications.
17315
17316    `R_SPARC_HI22' is obtained using `%hi' and `R_SPARC_LO10' is
17317 obtained using `%lo'.  Likewise `R_SPARC_HIX22' is obtained from `%hix'
17318 and `R_SPARC_LOX10' is obtained using `%lox'.  For example:
17319
17320      sethi %hi(symbol), %g1
17321      or    %g1, %lo(symbol), %g1
17322
17323      sethi %hix(symbol), %g1
17324      xor   %g1, %lox(symbol), %g1
17325
17326    These "high" mnemonics extract bits 31:10 of their operand, and the
17327 "low" mnemonics extract bits 9:0 of their operand.
17328
17329    V9 code model relocations can be requested as follows:
17330
17331    * `R_SPARC_HH22' is requested using `%hh'.  It can also be generated
17332      using `%uhi'.
17333
17334    * `R_SPARC_HM10' is requested using `%hm'.  It can also be generated
17335      using `%ulo'.
17336
17337    * `R_SPARC_LM22' is requested using `%lm'.
17338
17339    * `R_SPARC_H44' is requested using `%h44'.
17340
17341    * `R_SPARC_M44' is requested using `%m44'.
17342
17343    * `R_SPARC_L44' is requested using `%l44' or `%l34'.
17344
17345    * `R_SPARC_H34' is requested using `%h34'.
17346
17347    The `%l34' generates a `R_SPARC_L44' relocation because it
17348 calculates the necessary value, and therefore no explicit `R_SPARC_L34'
17349 relocation needed to be created for this purpose.
17350
17351    The `%h34' and `%l34' relocations are used for the abs34 code model.
17352 Here is an example abs34 address generation sequence:
17353
17354      sethi %h34(symbol), %g1
17355      sllx  %g1, 2, %g1
17356      or    %g1, %l34(symbol), %g1
17357
17358    The PC relative relocation `R_SPARC_PC22' can be obtained by
17359 enclosing an operand inside of `%pc22'.  Likewise, the `R_SPARC_PC10'
17360 relocation can be obtained using `%pc10'.  These are mostly used when
17361 assembling PIC code.  For example, the standard PIC sequence on Sparc
17362 to get the base of the global offset table, PC relative, into a
17363 register, can be performed as:
17364
17365      sethi %pc22(_GLOBAL_OFFSET_TABLE_-4), %l7
17366      add   %l7, %pc10(_GLOBAL_OFFSET_TABLE_+4), %l7
17367
17368    Several relocations exist to allow the link editor to potentially
17369 optimize GOT data references.  The `R_SPARC_GOTDATA_OP_HIX22'
17370 relocation can obtained by enclosing an operand inside of
17371 `%gdop_hix22'.  The `R_SPARC_GOTDATA_OP_LOX10' relocation can obtained
17372 by enclosing an operand inside of `%gdop_lox10'.  Likewise,
17373 `R_SPARC_GOTDATA_OP' can be obtained by enclosing an operand inside of
17374 `%gdop'.  For example, assuming the GOT base is in register `%l7':
17375
17376      sethi %gdop_hix22(symbol), %l1
17377      xor   %l1, %gdop_lox10(symbol), %l1
17378      ld    [%l7 + %l1], %l2, %gdop(symbol)
17379
17380    There are many relocations that can be requested for access to
17381 thread local storage variables.  All of the Sparc TLS mnemonics are
17382 supported:
17383
17384    * `R_SPARC_TLS_GD_HI22' is requested using `%tgd_hi22'.
17385
17386    * `R_SPARC_TLS_GD_LO10' is requested using `%tgd_lo10'.
17387
17388    * `R_SPARC_TLS_GD_ADD' is requested using `%tgd_add'.
17389
17390    * `R_SPARC_TLS_GD_CALL' is requested using `%tgd_call'.
17391
17392    * `R_SPARC_TLS_LDM_HI22' is requested using `%tldm_hi22'.
17393
17394    * `R_SPARC_TLS_LDM_LO10' is requested using `%tldm_lo10'.
17395
17396    * `R_SPARC_TLS_LDM_ADD' is requested using `%tldm_add'.
17397
17398    * `R_SPARC_TLS_LDM_CALL' is requested using `%tldm_call'.
17399
17400    * `R_SPARC_TLS_LDO_HIX22' is requested using `%tldo_hix22'.
17401
17402    * `R_SPARC_TLS_LDO_LOX10' is requested using `%tldo_lox10'.
17403
17404    * `R_SPARC_TLS_LDO_ADD' is requested using `%tldo_add'.
17405
17406    * `R_SPARC_TLS_IE_HI22' is requested using `%tie_hi22'.
17407
17408    * `R_SPARC_TLS_IE_LO10' is requested using `%tie_lo10'.
17409
17410    * `R_SPARC_TLS_IE_LD' is requested using `%tie_ld'.
17411
17412    * `R_SPARC_TLS_IE_LDX' is requested using `%tie_ldx'.
17413
17414    * `R_SPARC_TLS_IE_ADD' is requested using `%tie_add'.
17415
17416    * `R_SPARC_TLS_LE_HIX22' is requested using `%tle_hix22'.
17417
17418    * `R_SPARC_TLS_LE_LOX10' is requested using `%tle_lox10'.
17419
17420    Here are some example TLS model sequences.
17421
17422    First, General Dynamic:
17423
17424      sethi  %tgd_hi22(symbol), %l1
17425      add    %l1, %tgd_lo10(symbol), %l1
17426      add    %l7, %l1, %o0, %tgd_add(symbol)
17427      call   __tls_get_addr, %tgd_call(symbol)
17428      nop
17429
17430    Local Dynamic:
17431
17432      sethi  %tldm_hi22(symbol), %l1
17433      add    %l1, %tldm_lo10(symbol), %l1
17434      add    %l7, %l1, %o0, %tldm_add(symbol)
17435      call   __tls_get_addr, %tldm_call(symbol)
17436      nop
17437
17438      sethi  %tldo_hix22(symbol), %l1
17439      xor    %l1, %tldo_lox10(symbol), %l1
17440      add    %o0, %l1, %l1, %tldo_add(symbol)
17441
17442    Initial Exec:
17443
17444      sethi  %tie_hi22(symbol), %l1
17445      add    %l1, %tie_lo10(symbol), %l1
17446      ld     [%l7 + %l1], %o0, %tie_ld(symbol)
17447      add    %g7, %o0, %o0, %tie_add(symbol)
17448
17449      sethi  %tie_hi22(symbol), %l1
17450      add    %l1, %tie_lo10(symbol), %l1
17451      ldx    [%l7 + %l1], %o0, %tie_ldx(symbol)
17452      add    %g7, %o0, %o0, %tie_add(symbol)
17453
17454    And finally, Local Exec:
17455
17456      sethi  %tle_hix22(symbol), %l1
17457      add    %l1, %tle_lox10(symbol), %l1
17458      add    %g7, %l1, %l1
17459
17460    When assembling for 64-bit, and a secondary constant addend is
17461 specified in an address expression that would normally generate an
17462 `R_SPARC_LO10' relocation, the assembler will emit an `R_SPARC_OLO10'
17463 instead.
17464
17465 \1f
17466 File: as.info,  Node: Sparc-Size-Translations,  Prev: Sparc-Relocs,  Up: Sparc-Syntax
17467
17468 9.39.3.5 Size Translations
17469 ..........................
17470
17471 Often it is desirable to write code in an operand size agnostic manner.
17472 `as' provides support for this via operand size opcode translations.
17473 Translations are supported for loads, stores, shifts, compare-and-swap
17474 atomics, and the `clr' synthetic instruction.
17475
17476    If generating 32-bit code, `as' will generate the 32-bit opcode.
17477 Whereas if 64-bit code is being generated, the 64-bit opcode will be
17478 emitted.  For example `ldn' will be transformed into `ld' for 32-bit
17479 code and `ldx' for 64-bit code.
17480
17481    Here is an example meant to demonstrate all the supported opcode
17482 translations:
17483
17484      ldn   [%o0], %o1
17485      ldna  [%o0] %asi, %o2
17486      stn   %o1, [%o0]
17487      stna  %o2, [%o0] %asi
17488      slln  %o3, 3, %o3
17489      srln  %o4, 8, %o4
17490      sran  %o5, 12, %o5
17491      casn  [%o0], %o1, %o2
17492      casna [%o0] %asi, %o1, %o2
17493      clrn  %g1
17494
17495    In 32-bit mode `as' will emit:
17496
17497      ld   [%o0], %o1
17498      lda  [%o0] %asi, %o2
17499      st   %o1, [%o0]
17500      sta  %o2, [%o0] %asi
17501      sll  %o3, 3, %o3
17502      srl  %o4, 8, %o4
17503      sra  %o5, 12, %o5
17504      cas  [%o0], %o1, %o2
17505      casa [%o0] %asi, %o1, %o2
17506      clr  %g1
17507
17508    And in 64-bit mode `as' will emit:
17509
17510      ldx   [%o0], %o1
17511      ldxa  [%o0] %asi, %o2
17512      stx   %o1, [%o0]
17513      stxa  %o2, [%o0] %asi
17514      sllx  %o3, 3, %o3
17515      srlx  %o4, 8, %o4
17516      srax  %o5, 12, %o5
17517      casx  [%o0], %o1, %o2
17518      casxa [%o0] %asi, %o1, %o2
17519      clrx  %g1
17520
17521    Finally, the `.nword' translating directive is supported as well.
17522 It is documented in the section on Sparc machine directives.
17523
17524 \1f
17525 File: as.info,  Node: Sparc-Float,  Next: Sparc-Directives,  Prev: Sparc-Syntax,  Up: Sparc-Dependent
17526
17527 9.39.4 Floating Point
17528 ---------------------
17529
17530 The Sparc uses IEEE floating-point numbers.
17531
17532 \1f
17533 File: as.info,  Node: Sparc-Directives,  Prev: Sparc-Float,  Up: Sparc-Dependent
17534
17535 9.39.5 Sparc Machine Directives
17536 -------------------------------
17537
17538 The Sparc version of `as' supports the following additional machine
17539 directives:
17540
17541 `.align'
17542      This must be followed by the desired alignment in bytes.
17543
17544 `.common'
17545      This must be followed by a symbol name, a positive number, and
17546      `"bss"'.  This behaves somewhat like `.comm', but the syntax is
17547      different.
17548
17549 `.half'
17550      This is functionally identical to `.short'.
17551
17552 `.nword'
17553      On the Sparc, the `.nword' directive produces native word sized
17554      value, ie. if assembling with -32 it is equivalent to `.word', if
17555      assembling with -64 it is equivalent to `.xword'.
17556
17557 `.proc'
17558      This directive is ignored.  Any text following it on the same line
17559      is also ignored.
17560
17561 `.register'
17562      This directive declares use of a global application or system
17563      register.  It must be followed by a register name %g2, %g3, %g6 or
17564      %g7, comma and the symbol name for that register.  If symbol name
17565      is `#scratch', it is a scratch register, if it is `#ignore', it
17566      just suppresses any errors about using undeclared global register,
17567      but does not emit any information about it into the object file.
17568      This can be useful e.g. if you save the register before use and
17569      restore it after.
17570
17571 `.reserve'
17572      This must be followed by a symbol name, a positive number, and
17573      `"bss"'.  This behaves somewhat like `.lcomm', but the syntax is
17574      different.
17575
17576 `.seg'
17577      This must be followed by `"text"', `"data"', or `"data1"'.  It
17578      behaves like `.text', `.data', or `.data 1'.
17579
17580 `.skip'
17581      This is functionally identical to the `.space' directive.
17582
17583 `.word'
17584      On the Sparc, the `.word' directive produces 32 bit values,
17585      instead of the 16 bit values it produces on many other machines.
17586
17587 `.xword'
17588      On the Sparc V9 processor, the `.xword' directive produces 64 bit
17589      values.
17590
17591 \1f
17592 File: as.info,  Node: TIC54X-Dependent,  Next: TIC6X-Dependent,  Prev: Sparc-Dependent,  Up: Machine Dependencies
17593
17594 9.40 TIC54X Dependent Features
17595 ==============================
17596
17597 * Menu:
17598
17599 * TIC54X-Opts::              Command-line Options
17600 * TIC54X-Block::             Blocking
17601 * TIC54X-Env::               Environment Settings
17602 * TIC54X-Constants::         Constants Syntax
17603 * TIC54X-Subsyms::           String Substitution
17604 * TIC54X-Locals::            Local Label Syntax
17605 * TIC54X-Builtins::          Builtin Assembler Math Functions
17606 * TIC54X-Ext::               Extended Addressing Support
17607 * TIC54X-Directives::        Directives
17608 * TIC54X-Macros::            Macro Features
17609 * TIC54X-MMRegs::            Memory-mapped Registers
17610 * TIC54X-Syntax::            Syntax
17611
17612 \1f
17613 File: as.info,  Node: TIC54X-Opts,  Next: TIC54X-Block,  Up: TIC54X-Dependent
17614
17615 9.40.1 Options
17616 --------------
17617
17618 The TMS320C54X version of `as' has a few machine-dependent options.
17619
17620    You can use the `-mfar-mode' option to enable extended addressing
17621 mode.  All addresses will be assumed to be > 16 bits, and the
17622 appropriate relocation types will be used.  This option is equivalent
17623 to using the `.far_mode' directive in the assembly code.  If you do not
17624 use the `-mfar-mode' option, all references will be assumed to be 16
17625 bits.  This option may be abbreviated to `-mf'.
17626
17627    You can use the `-mcpu' option to specify a particular CPU.  This
17628 option is equivalent to using the `.version' directive in the assembly
17629 code.  For recognized CPU codes, see *Note `.version':
17630 TIC54X-Directives.  The default CPU version is `542'.
17631
17632    You can use the `-merrors-to-file' option to redirect error output
17633 to a file (this provided for those deficient environments which don't
17634 provide adequate output redirection).  This option may be abbreviated to
17635 `-me'.
17636
17637 \1f
17638 File: as.info,  Node: TIC54X-Block,  Next: TIC54X-Env,  Prev: TIC54X-Opts,  Up: TIC54X-Dependent
17639
17640 9.40.2 Blocking
17641 ---------------
17642
17643 A blocked section or memory block is guaranteed not to cross the
17644 blocking boundary (usually a page, or 128 words) if it is smaller than
17645 the blocking size, or to start on a page boundary if it is larger than
17646 the blocking size.
17647
17648 \1f
17649 File: as.info,  Node: TIC54X-Env,  Next: TIC54X-Constants,  Prev: TIC54X-Block,  Up: TIC54X-Dependent
17650
17651 9.40.3 Environment Settings
17652 ---------------------------
17653
17654 `C54XDSP_DIR' and `A_DIR' are semicolon-separated paths which are added
17655 to the list of directories normally searched for source and include
17656 files.  `C54XDSP_DIR' will override `A_DIR'.
17657
17658 \1f
17659 File: as.info,  Node: TIC54X-Constants,  Next: TIC54X-Subsyms,  Prev: TIC54X-Env,  Up: TIC54X-Dependent
17660
17661 9.40.4 Constants Syntax
17662 -----------------------
17663
17664 The TIC54X version of `as' allows the following additional constant
17665 formats, using a suffix to indicate the radix:
17666
17667      Binary                  `000000B, 011000b'
17668      Octal                   `10Q, 224q'
17669      Hexadecimal             `45h, 0FH'
17670
17671 \1f
17672 File: as.info,  Node: TIC54X-Subsyms,  Next: TIC54X-Locals,  Prev: TIC54X-Constants,  Up: TIC54X-Dependent
17673
17674 9.40.5 String Substitution
17675 --------------------------
17676
17677 A subset of allowable symbols (which we'll call subsyms) may be assigned
17678 arbitrary string values.  This is roughly equivalent to C preprocessor
17679 #define macros.  When `as' encounters one of these symbols, the symbol
17680 is replaced in the input stream by its string value.  Subsym names
17681 *must* begin with a letter.
17682
17683    Subsyms may be defined using the `.asg' and `.eval' directives
17684 (*Note `.asg': TIC54X-Directives, *Note `.eval': TIC54X-Directives.
17685
17686    Expansion is recursive until a previously encountered symbol is
17687 seen, at which point substitution stops.
17688
17689    In this example, x is replaced with SYM2; SYM2 is replaced with
17690 SYM1, and SYM1 is replaced with x.  At this point, x has already been
17691 encountered and the substitution stops.
17692
17693       .asg   "x",SYM1
17694       .asg   "SYM1",SYM2
17695       .asg   "SYM2",x
17696       add    x,a             ; final code assembled is "add  x, a"
17697
17698    Macro parameters are converted to subsyms; a side effect of this is
17699 the normal `as' '\ARG' dereferencing syntax is unnecessary.  Subsyms
17700 defined within a macro will have global scope, unless the `.var'
17701 directive is used to identify the subsym as a local macro variable
17702 *note `.var': TIC54X-Directives.
17703
17704    Substitution may be forced in situations where replacement might be
17705 ambiguous by placing colons on either side of the subsym.  The following
17706 code:
17707
17708       .eval  "10",x
17709      LAB:X:  add     #x, a
17710
17711    When assembled becomes:
17712
17713      LAB10  add     #10, a
17714
17715    Smaller parts of the string assigned to a subsym may be accessed with
17716 the following syntax:
17717
17718 ``:SYMBOL(CHAR_INDEX):''
17719      Evaluates to a single-character string, the character at
17720      CHAR_INDEX.
17721
17722 ``:SYMBOL(START,LENGTH):''
17723      Evaluates to a substring of SYMBOL beginning at START with length
17724      LENGTH.
17725
17726 \1f
17727 File: as.info,  Node: TIC54X-Locals,  Next: TIC54X-Builtins,  Prev: TIC54X-Subsyms,  Up: TIC54X-Dependent
17728
17729 9.40.6 Local Labels
17730 -------------------
17731
17732 Local labels may be defined in two ways:
17733
17734    * $N, where N is a decimal number between 0 and 9
17735
17736    * LABEL?, where LABEL is any legal symbol name.
17737
17738    Local labels thus defined may be redefined or automatically
17739 generated.  The scope of a local label is based on when it may be
17740 undefined or reset.  This happens when one of the following situations
17741 is encountered:
17742
17743    * .newblock directive *note `.newblock': TIC54X-Directives.
17744
17745    * The current section is changed (.sect, .text, or .data)
17746
17747    * Entering or leaving an included file
17748
17749    * The macro scope where the label was defined is exited
17750
17751 \1f
17752 File: as.info,  Node: TIC54X-Builtins,  Next: TIC54X-Ext,  Prev: TIC54X-Locals,  Up: TIC54X-Dependent
17753
17754 9.40.7 Math Builtins
17755 --------------------
17756
17757 The following built-in functions may be used to generate a
17758 floating-point value.  All return a floating-point value except `$cvi',
17759 `$int', and `$sgn', which return an integer value.
17760
17761 ``$acos(EXPR)''
17762      Returns the floating point arccosine of EXPR.
17763
17764 ``$asin(EXPR)''
17765      Returns the floating point arcsine of EXPR.
17766
17767 ``$atan(EXPR)''
17768      Returns the floating point arctangent of EXPR.
17769
17770 ``$atan2(EXPR1,EXPR2)''
17771      Returns the floating point arctangent of EXPR1 / EXPR2.
17772
17773 ``$ceil(EXPR)''
17774      Returns the smallest integer not less than EXPR as floating point.
17775
17776 ``$cosh(EXPR)''
17777      Returns the floating point hyperbolic cosine of EXPR.
17778
17779 ``$cos(EXPR)''
17780      Returns the floating point cosine of EXPR.
17781
17782 ``$cvf(EXPR)''
17783      Returns the integer value EXPR converted to floating-point.
17784
17785 ``$cvi(EXPR)''
17786      Returns the floating point value EXPR converted to integer.
17787
17788 ``$exp(EXPR)''
17789      Returns the floating point value e ^ EXPR.
17790
17791 ``$fabs(EXPR)''
17792      Returns the floating point absolute value of EXPR.
17793
17794 ``$floor(EXPR)''
17795      Returns the largest integer that is not greater than EXPR as
17796      floating point.
17797
17798 ``$fmod(EXPR1,EXPR2)''
17799      Returns the floating point remainder of EXPR1 / EXPR2.
17800
17801 ``$int(EXPR)''
17802      Returns 1 if EXPR evaluates to an integer, zero otherwise.
17803
17804 ``$ldexp(EXPR1,EXPR2)''
17805      Returns the floating point value EXPR1 * 2 ^ EXPR2.
17806
17807 ``$log10(EXPR)''
17808      Returns the base 10 logarithm of EXPR.
17809
17810 ``$log(EXPR)''
17811      Returns the natural logarithm of EXPR.
17812
17813 ``$max(EXPR1,EXPR2)''
17814      Returns the floating point maximum of EXPR1 and EXPR2.
17815
17816 ``$min(EXPR1,EXPR2)''
17817      Returns the floating point minimum of EXPR1 and EXPR2.
17818
17819 ``$pow(EXPR1,EXPR2)''
17820      Returns the floating point value EXPR1 ^ EXPR2.
17821
17822 ``$round(EXPR)''
17823      Returns the nearest integer to EXPR as a floating point number.
17824
17825 ``$sgn(EXPR)''
17826      Returns -1, 0, or 1 based on the sign of EXPR.
17827
17828 ``$sin(EXPR)''
17829      Returns the floating point sine of EXPR.
17830
17831 ``$sinh(EXPR)''
17832      Returns the floating point hyperbolic sine of EXPR.
17833
17834 ``$sqrt(EXPR)''
17835      Returns the floating point square root of EXPR.
17836
17837 ``$tan(EXPR)''
17838      Returns the floating point tangent of EXPR.
17839
17840 ``$tanh(EXPR)''
17841      Returns the floating point hyperbolic tangent of EXPR.
17842
17843 ``$trunc(EXPR)''
17844      Returns the integer value of EXPR truncated towards zero as
17845      floating point.
17846
17847
17848 \1f
17849 File: as.info,  Node: TIC54X-Ext,  Next: TIC54X-Directives,  Prev: TIC54X-Builtins,  Up: TIC54X-Dependent
17850
17851 9.40.8 Extended Addressing
17852 --------------------------
17853
17854 The `LDX' pseudo-op is provided for loading the extended addressing bits
17855 of a label or address.  For example, if an address `_label' resides in
17856 extended program memory, the value of `_label' may be loaded as follows:
17857       ldx     #_label,16,a    ; loads extended bits of _label
17858       or      #_label,a       ; loads lower 16 bits of _label
17859       bacc    a               ; full address is in accumulator A
17860
17861 \1f
17862 File: as.info,  Node: TIC54X-Directives,  Next: TIC54X-Macros,  Prev: TIC54X-Ext,  Up: TIC54X-Dependent
17863
17864 9.40.9 Directives
17865 -----------------
17866
17867 `.align [SIZE]'
17868 `.even'
17869      Align the section program counter on the next boundary, based on
17870      SIZE.  SIZE may be any power of 2.  `.even' is equivalent to
17871      `.align' with a SIZE of 2.
17872     `1'
17873           Align SPC to word boundary
17874
17875     `2'
17876           Align SPC to longword boundary (same as .even)
17877
17878     `128'
17879           Align SPC to page boundary
17880
17881 `.asg STRING, NAME'
17882      Assign NAME the string STRING.  String replacement is performed on
17883      STRING before assignment.
17884
17885 `.eval STRING, NAME'
17886      Evaluate the contents of string STRING and assign the result as a
17887      string to the subsym NAME.  String replacement is performed on
17888      STRING before assignment.
17889
17890 `.bss SYMBOL, SIZE [, [BLOCKING_FLAG] [,ALIGNMENT_FLAG]]'
17891      Reserve space for SYMBOL in the .bss section.  SIZE is in words.
17892      If present, BLOCKING_FLAG indicates the allocated space should be
17893      aligned on a page boundary if it would otherwise cross a page
17894      boundary.  If present, ALIGNMENT_FLAG causes the assembler to
17895      allocate SIZE on a long word boundary.
17896
17897 `.byte VALUE [,...,VALUE_N]'
17898 `.ubyte VALUE [,...,VALUE_N]'
17899 `.char VALUE [,...,VALUE_N]'
17900 `.uchar VALUE [,...,VALUE_N]'
17901      Place one or more bytes into consecutive words of the current
17902      section.  The upper 8 bits of each word is zero-filled.  If a
17903      label is used, it points to the word allocated for the first byte
17904      encountered.
17905
17906 `.clink ["SECTION_NAME"]'
17907      Set STYP_CLINK flag for this section, which indicates to the
17908      linker that if no symbols from this section are referenced, the
17909      section should not be included in the link.  If SECTION_NAME is
17910      omitted, the current section is used.
17911
17912 `.c_mode'
17913      TBD.
17914
17915 `.copy "FILENAME" | FILENAME'
17916 `.include "FILENAME" | FILENAME'
17917      Read source statements from FILENAME.  The normal include search
17918      path is used.  Normally .copy will cause statements from the
17919      included file to be printed in the assembly listing and .include
17920      will not, but this distinction is not currently implemented.
17921
17922 `.data'
17923      Begin assembling code into the .data section.
17924
17925 `.double VALUE [,...,VALUE_N]'
17926 `.ldouble VALUE [,...,VALUE_N]'
17927 `.float VALUE [,...,VALUE_N]'
17928 `.xfloat VALUE [,...,VALUE_N]'
17929      Place an IEEE single-precision floating-point representation of
17930      one or more floating-point values into the current section.  All
17931      but `.xfloat' align the result on a longword boundary.  Values are
17932      stored most-significant word first.
17933
17934 `.drlist'
17935 `.drnolist'
17936      Control printing of directives to the listing file.  Ignored.
17937
17938 `.emsg STRING'
17939 `.mmsg STRING'
17940 `.wmsg STRING'
17941      Emit a user-defined error, message, or warning, respectively.
17942
17943 `.far_mode'
17944      Use extended addressing when assembling statements.  This should
17945      appear only once per file, and is equivalent to the -mfar-mode
17946      option *note `-mfar-mode': TIC54X-Opts.
17947
17948 `.fclist'
17949 `.fcnolist'
17950      Control printing of false conditional blocks to the listing file.
17951
17952 `.field VALUE [,SIZE]'
17953      Initialize a bitfield of SIZE bits in the current section.  If
17954      VALUE is relocatable, then SIZE must be 16.  SIZE defaults to 16
17955      bits.  If VALUE does not fit into SIZE bits, the value will be
17956      truncated.  Successive `.field' directives will pack starting at
17957      the current word, filling the most significant bits first, and
17958      aligning to the start of the next word if the field size does not
17959      fit into the space remaining in the current word.  A `.align'
17960      directive with an operand of 1 will force the next `.field'
17961      directive to begin packing into a new word.  If a label is used, it
17962      points to the word that contains the specified field.
17963
17964 `.global SYMBOL [,...,SYMBOL_N]'
17965 `.def SYMBOL [,...,SYMBOL_N]'
17966 `.ref SYMBOL [,...,SYMBOL_N]'
17967      `.def' nominally identifies a symbol defined in the current file
17968      and available to other files.  `.ref' identifies a symbol used in
17969      the current file but defined elsewhere.  Both map to the standard
17970      `.global' directive.
17971
17972 `.half VALUE [,...,VALUE_N]'
17973 `.uhalf VALUE [,...,VALUE_N]'
17974 `.short VALUE [,...,VALUE_N]'
17975 `.ushort VALUE [,...,VALUE_N]'
17976 `.int VALUE [,...,VALUE_N]'
17977 `.uint VALUE [,...,VALUE_N]'
17978 `.word VALUE [,...,VALUE_N]'
17979 `.uword VALUE [,...,VALUE_N]'
17980      Place one or more values into consecutive words of the current
17981      section.  If a label is used, it points to the word allocated for
17982      the first value encountered.
17983
17984 `.label SYMBOL'
17985      Define a special SYMBOL to refer to the load time address of the
17986      current section program counter.
17987
17988 `.length'
17989 `.width'
17990      Set the page length and width of the output listing file.  Ignored.
17991
17992 `.list'
17993 `.nolist'
17994      Control whether the source listing is printed.  Ignored.
17995
17996 `.long VALUE [,...,VALUE_N]'
17997 `.ulong VALUE [,...,VALUE_N]'
17998 `.xlong VALUE [,...,VALUE_N]'
17999      Place one or more 32-bit values into consecutive words in the
18000      current section.  The most significant word is stored first.
18001      `.long' and `.ulong' align the result on a longword boundary;
18002      `xlong' does not.
18003
18004 `.loop [COUNT]'
18005 `.break [CONDITION]'
18006 `.endloop'
18007      Repeatedly assemble a block of code.  `.loop' begins the block, and
18008      `.endloop' marks its termination.  COUNT defaults to 1024, and
18009      indicates the number of times the block should be repeated.
18010      `.break' terminates the loop so that assembly begins after the
18011      `.endloop' directive.  The optional CONDITION will cause the loop
18012      to terminate only if it evaluates to zero.
18013
18014 `MACRO_NAME .macro [PARAM1][,...PARAM_N]'
18015 `[.mexit]'
18016 `.endm'
18017      See the section on macros for more explanation (*Note
18018      TIC54X-Macros::.
18019
18020 `.mlib "FILENAME" | FILENAME'
18021      Load the macro library FILENAME.  FILENAME must be an archived
18022      library (BFD ar-compatible) of text files, expected to contain
18023      only macro definitions.   The standard include search path is used.
18024
18025 `.mlist'
18026 `.mnolist'
18027      Control whether to include macro and loop block expansions in the
18028      listing output.  Ignored.
18029
18030 `.mmregs'
18031      Define global symbolic names for the 'c54x registers.  Supposedly
18032      equivalent to executing `.set' directives for each register with
18033      its memory-mapped value, but in reality is provided only for
18034      compatibility and does nothing.
18035
18036 `.newblock'
18037      This directive resets any TIC54X local labels currently defined.
18038      Normal `as' local labels are unaffected.
18039
18040 `.option OPTION_LIST'
18041      Set listing options.  Ignored.
18042
18043 `.sblock "SECTION_NAME" | SECTION_NAME [,"NAME_N" | NAME_N]'
18044      Designate SECTION_NAME for blocking.  Blocking guarantees that a
18045      section will start on a page boundary (128 words) if it would
18046      otherwise cross a page boundary.  Only initialized sections may be
18047      designated with this directive.  See also *Note TIC54X-Block::.
18048
18049 `.sect "SECTION_NAME"'
18050      Define a named initialized section and make it the current section.
18051
18052 `SYMBOL .set "VALUE"'
18053 `SYMBOL .equ "VALUE"'
18054      Equate a constant VALUE to a SYMBOL, which is placed in the symbol
18055      table.  SYMBOL may not be previously defined.
18056
18057 `.space SIZE_IN_BITS'
18058 `.bes SIZE_IN_BITS'
18059      Reserve the given number of bits in the current section and
18060      zero-fill them.  If a label is used with `.space', it points to the
18061      *first* word reserved.  With `.bes', the label points to the
18062      *last* word reserved.
18063
18064 `.sslist'
18065 `.ssnolist'
18066      Controls the inclusion of subsym replacement in the listing
18067      output.  Ignored.
18068
18069 `.string "STRING" [,...,"STRING_N"]'
18070 `.pstring "STRING" [,...,"STRING_N"]'
18071      Place 8-bit characters from STRING into the current section.
18072      `.string' zero-fills the upper 8 bits of each word, while
18073      `.pstring' puts two characters into each word, filling the
18074      most-significant bits first.  Unused space is zero-filled.  If a
18075      label is used, it points to the first word initialized.
18076
18077 `[STAG] .struct [OFFSET]'
18078 `[NAME_1] element [COUNT_1]'
18079 `[NAME_2] element [COUNT_2]'
18080 `[TNAME] .tag STAGX [TCOUNT]'
18081 `...'
18082 `[NAME_N] element [COUNT_N]'
18083 `[SSIZE] .endstruct'
18084 `LABEL .tag [STAG]'
18085      Assign symbolic offsets to the elements of a structure.  STAG
18086      defines a symbol to use to reference the structure.  OFFSET
18087      indicates a starting value to use for the first element
18088      encountered; otherwise it defaults to zero.  Each element can have
18089      a named offset, NAME, which is a symbol assigned the value of the
18090      element's offset into the structure.  If STAG is missing, these
18091      become global symbols.  COUNT adjusts the offset that many times,
18092      as if `element' were an array.  `element' may be one of `.byte',
18093      `.word', `.long', `.float', or any equivalent of those, and the
18094      structure offset is adjusted accordingly.  `.field' and `.string'
18095      are also allowed; the size of `.field' is one bit, and `.string'
18096      is considered to be one word in size.  Only element descriptors,
18097      structure/union tags, `.align' and conditional assembly directives
18098      are allowed within `.struct'/`.endstruct'.  `.align' aligns member
18099      offsets to word boundaries only.  SSIZE, if provided, will always
18100      be assigned the size of the structure.
18101
18102      The `.tag' directive, in addition to being used to define a
18103      structure/union element within a structure, may be used to apply a
18104      structure to a symbol.  Once applied to LABEL, the individual
18105      structure elements may be applied to LABEL to produce the desired
18106      offsets using LABEL as the structure base.
18107
18108 `.tab'
18109      Set the tab size in the output listing.  Ignored.
18110
18111 `[UTAG] .union'
18112 `[NAME_1] element [COUNT_1]'
18113 `[NAME_2] element [COUNT_2]'
18114 `[TNAME] .tag UTAGX[,TCOUNT]'
18115 `...'
18116 `[NAME_N] element [COUNT_N]'
18117 `[USIZE] .endstruct'
18118 `LABEL .tag [UTAG]'
18119      Similar to `.struct', but the offset after each element is reset to
18120      zero, and the USIZE is set to the maximum of all defined elements.
18121      Starting offset for the union is always zero.
18122
18123 `[SYMBOL] .usect "SECTION_NAME", SIZE, [,[BLOCKING_FLAG] [,ALIGNMENT_FLAG]]'
18124      Reserve space for variables in a named, uninitialized section
18125      (similar to .bss).  `.usect' allows definitions sections
18126      independent of .bss.  SYMBOL points to the first location reserved
18127      by this allocation.  The symbol may be used as a variable name.
18128      SIZE is the allocated size in words.  BLOCKING_FLAG indicates
18129      whether to block this section on a page boundary (128 words)
18130      (*note TIC54X-Block::).  ALIGNMENT FLAG indicates whether the
18131      section should be longword-aligned.
18132
18133 `.var SYM[,..., SYM_N]'
18134      Define a subsym to be a local variable within a macro.  See *Note
18135      TIC54X-Macros::.
18136
18137 `.version VERSION'
18138      Set which processor to build instructions for.  Though the
18139      following values are accepted, the op is ignored.
18140     `541'
18141     `542'
18142     `543'
18143     `545'
18144     `545LP'
18145     `546LP'
18146     `548'
18147     `549'
18148
18149 \1f
18150 File: as.info,  Node: TIC54X-Macros,  Next: TIC54X-MMRegs,  Prev: TIC54X-Directives,  Up: TIC54X-Dependent
18151
18152 9.40.10 Macros
18153 --------------
18154
18155 Macros do not require explicit dereferencing of arguments (i.e., \ARG).
18156
18157    During macro expansion, the macro parameters are converted to
18158 subsyms.  If the number of arguments passed the macro invocation
18159 exceeds the number of parameters defined, the last parameter is
18160 assigned the string equivalent of all remaining arguments.  If fewer
18161 arguments are given than parameters, the missing parameters are
18162 assigned empty strings.  To include a comma in an argument, you must
18163 enclose the argument in quotes.
18164
18165    The following built-in subsym functions allow examination of the
18166 string value of subsyms (or ordinary strings).  The arguments are
18167 strings unless otherwise indicated (subsyms passed as args will be
18168 replaced by the strings they represent).
18169 ``$symlen(STR)''
18170      Returns the length of STR.
18171
18172 ``$symcmp(STR1,STR2)''
18173      Returns 0 if STR1 == STR2, non-zero otherwise.
18174
18175 ``$firstch(STR,CH)''
18176      Returns index of the first occurrence of character constant CH in
18177      STR.
18178
18179 ``$lastch(STR,CH)''
18180      Returns index of the last occurrence of character constant CH in
18181      STR.
18182
18183 ``$isdefed(SYMBOL)''
18184      Returns zero if the symbol SYMBOL is not in the symbol table,
18185      non-zero otherwise.
18186
18187 ``$ismember(SYMBOL,LIST)''
18188      Assign the first member of comma-separated string LIST to SYMBOL;
18189      LIST is reassigned the remainder of the list.  Returns zero if
18190      LIST is a null string.  Both arguments must be subsyms.
18191
18192 ``$iscons(EXPR)''
18193      Returns 1 if string EXPR is binary, 2 if octal, 3 if hexadecimal,
18194      4 if a character, 5 if decimal, and zero if not an integer.
18195
18196 ``$isname(NAME)''
18197      Returns 1 if NAME is a valid symbol name, zero otherwise.
18198
18199 ``$isreg(REG)''
18200      Returns 1 if REG is a valid predefined register name (AR0-AR7
18201      only).
18202
18203 ``$structsz(STAG)''
18204      Returns the size of the structure or union represented by STAG.
18205
18206 ``$structacc(STAG)''
18207      Returns the reference point of the structure or union represented
18208      by STAG.   Always returns zero.
18209
18210
18211 \1f
18212 File: as.info,  Node: TIC54X-MMRegs,  Next: TIC54X-Syntax,  Prev: TIC54X-Macros,  Up: TIC54X-Dependent
18213
18214 9.40.11 Memory-mapped Registers
18215 -------------------------------
18216
18217 The following symbols are recognized as memory-mapped registers:
18218
18219
18220 \1f
18221 File: as.info,  Node: TIC54X-Syntax,  Prev: TIC54X-MMRegs,  Up: TIC54X-Dependent
18222
18223 9.40.12 TIC54X Syntax
18224 ---------------------
18225
18226 * Menu:
18227
18228 * TIC54X-Chars::                Special Characters
18229
18230 \1f
18231 File: as.info,  Node: TIC54X-Chars,  Up: TIC54X-Syntax
18232
18233 9.40.12.1 Special Characters
18234 ............................
18235
18236 The presence of a `;' appearing anywhere on a line indicates the start
18237 of a comment that extends to the end of that line.
18238
18239    If a `#' appears as the first character of a line then the whole
18240 line is treated as a comment, but in this case the line can also be a
18241 logical line number directive (*note Comments::) or a preprocessor
18242 control command (*note Preprocessing::).
18243
18244    The presence of an asterisk (`*') at the start of a line also
18245 indicates a comment that extends to the end of that line.
18246
18247    The TIC54X assembler does not currently support a line separator
18248 character.
18249
18250 \1f
18251 File: as.info,  Node: TIC6X-Dependent,  Next: TILE-Gx-Dependent,  Prev: TIC54X-Dependent,  Up: Machine Dependencies
18252
18253 9.41 TIC6X Dependent Features
18254 =============================
18255
18256 * Menu:
18257
18258 * TIC6X Options::            Options
18259 * TIC6X Syntax::             Syntax
18260 * TIC6X Directives::         Directives
18261
18262 \1f
18263 File: as.info,  Node: TIC6X Options,  Next: TIC6X Syntax,  Up: TIC6X-Dependent
18264
18265 9.41.1 TIC6X Options
18266 --------------------
18267
18268 `-march=ARCH'
18269      Enable (only) instructions from architecture ARCH.  By default,
18270      all instructions are permitted.
18271
18272      The following values of ARCH are accepted: `c62x', `c64x',
18273      `c64x+', `c67x', `c67x+', `c674x'.
18274
18275 `-mdsbt'
18276 `-mno-dsbt'
18277      The `-mdsbt' option causes the assembler to generate the
18278      `Tag_ABI_DSBT' attribute with a value of 1, indicating that the
18279      code is using DSBT addressing.  The `-mno-dsbt' option, the
18280      default, causes the tag to have a value of 0, indicating that the
18281      code does not use DSBT addressing.  The linker will emit a warning
18282      if objects of different type (DSBT and non-DSBT) are linked
18283      together.
18284
18285 `-mpid=no'
18286 `-mpid=near'
18287 `-mpid=far'
18288      The `-mpid=' option causes the assembler to generate the
18289      `Tag_ABI_PID' attribute with a value indicating the form of data
18290      addressing used by the code.  `-mpid=no', the default, indicates
18291      position-dependent data addressing, `-mpid=near' indicates
18292      position-independent addressing with GOT accesses using near DP
18293      addressing, and `-mpid=far' indicates position-independent
18294      addressing with GOT accesses using far DP addressing.  The linker
18295      will emit a warning if objects built with different settings of
18296      this option are linked together.
18297
18298 `-mpic'
18299 `-mno-pic'
18300      The `-mpic' option causes the assembler to generate the
18301      `Tag_ABI_PIC' attribute with a value of 1, indicating that the
18302      code is using position-independent code addressing,  The
18303      `-mno-pic' option, the default, causes the tag to have a value of
18304      0, indicating position-dependent code addressing.  The linker will
18305      emit a warning if objects of different type (position-dependent and
18306      position-independent) are linked together.
18307
18308 `-mbig-endian'
18309 `-mlittle-endian'
18310      Generate code for the specified endianness.  The default is
18311      little-endian.
18312
18313
18314 \1f
18315 File: as.info,  Node: TIC6X Syntax,  Next: TIC6X Directives,  Prev: TIC6X Options,  Up: TIC6X-Dependent
18316
18317 9.41.2 TIC6X Syntax
18318 -------------------
18319
18320 The presence of a `;' on a line indicates the start of a comment that
18321 extends to the end of the current line.  If a `#' or `*' appears as the
18322 first character of a line, the whole line is treated as a comment.
18323 Note that if a line starts with a `#' character then it can also be a
18324 logical line number directive (*note Comments::) or a preprocessor
18325 control command (*note Preprocessing::).
18326
18327    The `@' character can be used instead of a newline to separate
18328 statements.
18329
18330    Instruction, register and functional unit names are case-insensitive.
18331 `as' requires fully-specified functional unit names, such as `.S1',
18332 `.L1X' or `.D1T2', on all instructions using a functional unit.
18333
18334    For some instructions, there may be syntactic ambiguity between
18335 register or functional unit names and the names of labels or other
18336 symbols.  To avoid this, enclose the ambiguous symbol name in
18337 parentheses; register and functional unit names may not be enclosed in
18338 parentheses.
18339
18340 \1f
18341 File: as.info,  Node: TIC6X Directives,  Prev: TIC6X Syntax,  Up: TIC6X-Dependent
18342
18343 9.41.3 TIC6X Directives
18344 -----------------------
18345
18346 Directives controlling the set of instructions accepted by the
18347 assembler have effect for instructions between the directive and any
18348 subsequent directive overriding it.
18349
18350 `.arch ARCH'
18351      This has the same effect as `-march=ARCH'.
18352
18353 `.cantunwind'
18354      Prevents unwinding through the current function.  No personality
18355      routine or exception table data is required or permitted.
18356
18357      If this is not specified then frame unwinding information will be
18358      constructed from CFI directives. *note CFI directives::.
18359
18360 `.c6xabi_attribute TAG, VALUE'
18361      Set the C6000 EABI build attribute TAG to VALUE.
18362
18363      The TAG is either an attribute number or one of `Tag_ISA',
18364      `Tag_ABI_wchar_t', `Tag_ABI_stack_align_needed',
18365      `Tag_ABI_stack_align_preserved', `Tag_ABI_DSBT', `Tag_ABI_PID',
18366      `Tag_ABI_PIC', `TAG_ABI_array_object_alignment',
18367      `TAG_ABI_array_object_align_expected', `Tag_ABI_compatibility' and
18368      `Tag_ABI_conformance'.  The VALUE is either a `number',
18369      `"string"', or `number, "string"' depending on the tag.
18370
18371 `.ehtype SYMBOL'
18372      Output an exception type table reference to SYMBOL.
18373
18374 `.endp'
18375      Marks the end of and exception table or function.  If preceeded by
18376      a `.handlerdata' directive then this also switched back to the
18377      previous text section.
18378
18379 `.handlerdata'
18380      Marks the end of the current function, and the start of the
18381      exception table entry for that function.  Anything between this
18382      directive and the `.endp' directive will be added to the exception
18383      table entry.
18384
18385      Must be preceded by a CFI block containing a `.cfi_lsda' directive.
18386
18387 `.nocmp'
18388      Disallow use of C64x+ compact instructions in the current text
18389      section.
18390
18391 `.personalityindex INDEX'
18392      Sets the personality routine for the current function to the ABI
18393      specified compact routine number INDEX
18394
18395 `.personality NAME'
18396      Sets the personality routine for the current function to NAME.
18397
18398 `.scomm SYMBOL, SIZE, ALIGN'
18399      Like `.comm', creating a common symbol SYMBOL with size SIZE and
18400      alignment ALIGN, but unlike when using `.comm', this symbol will
18401      be placed into the small BSS section by the linker.
18402
18403
18404 \1f
18405 File: as.info,  Node: TILE-Gx-Dependent,  Next: TILEPro-Dependent,  Prev: TIC6X-Dependent,  Up: Machine Dependencies
18406
18407 9.42 TILE-Gx Dependent Features
18408 ===============================
18409
18410 * Menu:
18411
18412 * TILE-Gx Options::             TILE-Gx Options
18413 * TILE-Gx Syntax::              TILE-Gx Syntax
18414 * TILE-Gx Directives::          TILE-Gx Directives
18415
18416 \1f
18417 File: as.info,  Node: TILE-Gx Options,  Next: TILE-Gx Syntax,  Up: TILE-Gx-Dependent
18418
18419 9.42.1 Options
18420 --------------
18421
18422 The following table lists all available TILE-Gx specific options:
18423
18424 `-m32 | -m64'
18425      Select the word size, either 32 bits or 64 bits.
18426
18427 `-EB | -EL'
18428      Select the endianness, either big-endian (-EB) or little-endian
18429      (-EL).
18430
18431
18432 \1f
18433 File: as.info,  Node: TILE-Gx Syntax,  Next: TILE-Gx Directives,  Prev: TILE-Gx Options,  Up: TILE-Gx-Dependent
18434
18435 9.42.2 Syntax
18436 -------------
18437
18438 Block comments are delimited by `/*' and `*/'.  End of line comments
18439 may be introduced by `#'.
18440
18441    Instructions consist of a leading opcode or macro name followed by
18442 whitespace and an optional comma-separated list of operands:
18443
18444      OPCODE [OPERAND, ...]
18445
18446    Instructions must be separated by a newline or semicolon.
18447
18448    There are two ways to write code: either write naked instructions,
18449 which the assembler is free to combine into VLIW bundles, or specify
18450 the VLIW bundles explicitly.
18451
18452    Bundles are specified using curly braces:
18453
18454      { ADD r3,r4,r5 ; ADD r7,r8,r9 ; LW r10,r11 }
18455
18456    A bundle can span multiple lines. If you want to put multiple
18457 instructions on a line, whether in a bundle or not, you need to
18458 separate them with semicolons as in this example.
18459
18460    A bundle may contain one or more instructions, up to the limit
18461 specified by the ISA (currently three). If fewer instructions are
18462 specified than the hardware supports in a bundle, the assembler inserts
18463 `fnop' instructions automatically.
18464
18465    The assembler will prefer to preserve the ordering of instructions
18466 within the bundle, putting the first instruction in a lower-numbered
18467 pipeline than the next one, etc.  This fact, combined with the optional
18468 use of explicit `fnop' or `nop' instructions, allows precise control
18469 over which pipeline executes each instruction.
18470
18471    If the instructions cannot be bundled in the listed order, the
18472 assembler will automatically try to find a valid pipeline assignment.
18473 If there is no way to bundle the instructions together, the assembler
18474 reports an error.
18475
18476    The assembler does not yet auto-bundle (automatically combine
18477 multiple instructions into one bundle), but it reserves the right to do
18478 so in the future.  If you want to force an instruction to run by
18479 itself, put it in a bundle explicitly with curly braces and use `nop'
18480 instructions (not `fnop') to fill the remaining pipeline slots in that
18481 bundle.
18482
18483 * Menu:
18484
18485 * TILE-Gx Opcodes::              Opcode Naming Conventions.
18486 * TILE-Gx Registers::            Register Naming.
18487 * TILE-Gx Modifiers::            Symbolic Operand Modifiers.
18488
18489 \1f
18490 File: as.info,  Node: TILE-Gx Opcodes,  Next: TILE-Gx Registers,  Up: TILE-Gx Syntax
18491
18492 9.42.2.1 Opcode Names
18493 .....................
18494
18495 For a complete list of opcodes and descriptions of their semantics, see
18496 `TILE-Gx Instruction Set Architecture', available upon request at
18497 www.tilera.com.
18498
18499 \1f
18500 File: as.info,  Node: TILE-Gx Registers,  Next: TILE-Gx Modifiers,  Prev: TILE-Gx Opcodes,  Up: TILE-Gx Syntax
18501
18502 9.42.2.2 Register Names
18503 .......................
18504
18505 General-purpose registers are represented by predefined symbols of the
18506 form `rN', where N represents a number between `0' and `63'.  However,
18507 the following registers have canonical names that must be used instead:
18508
18509 `r54'
18510      sp
18511
18512 `r55'
18513      lr
18514
18515 `r56'
18516      sn
18517
18518 `r57'
18519      idn0
18520
18521 `r58'
18522      idn1
18523
18524 `r59'
18525      udn0
18526
18527 `r60'
18528      udn1
18529
18530 `r61'
18531      udn2
18532
18533 `r62'
18534      udn3
18535
18536 `r63'
18537      zero
18538
18539
18540    The assembler will emit a warning if a numeric name is used instead
18541 of the non-numeric name.  The `.no_require_canonical_reg_names'
18542 assembler pseudo-op turns off this warning.
18543 `.require_canonical_reg_names' turns it back on.
18544
18545 \1f
18546 File: as.info,  Node: TILE-Gx Modifiers,  Prev: TILE-Gx Registers,  Up: TILE-Gx Syntax
18547
18548 9.42.2.3 Symbolic Operand Modifiers
18549 ...................................
18550
18551 The assembler supports several modifiers when using symbol addresses in
18552 TILE-Gx instruction operands.  The general syntax is the following:
18553
18554      modifier(symbol)
18555
18556    The following modifiers are supported:
18557
18558 `hw0'
18559      This modifier is used to load bits 0-15 of the symbol's address.
18560
18561 `hw1'
18562      This modifier is used to load bits 16-31 of the symbol's address.
18563
18564 `hw2'
18565      This modifier is used to load bits 32-47 of the symbol's address.
18566
18567 `hw3'
18568      This modifier is used to load bits 48-63 of the symbol's address.
18569
18570 `hw0_last'
18571      This modifier yields the same value as `hw0', but it also checks
18572      that the value does not overflow.
18573
18574 `hw1_last'
18575      This modifier yields the same value as `hw1', but it also checks
18576      that the value does not overflow.
18577
18578 `hw2_last'
18579      This modifier yields the same value as `hw2', but it also checks
18580      that the value does not overflow.
18581
18582      A 48-bit symbolic value is constructed by using the following
18583      idiom:
18584
18585           moveli r0, hw2_last(sym)
18586           shl16insli r0, r0, hw1(sym)
18587           shl16insli r0, r0, hw0(sym)
18588
18589 `hw0_got'
18590      This modifier is used to load bits 0-15 of the symbol's offset in
18591      the GOT entry corresponding to the symbol.
18592
18593 `hw0_last_got'
18594      This modifier yields the same value as `hw0_got', but it also
18595      checks that the value does not overflow.
18596
18597 `hw1_last_got'
18598      This modifier is used to load bits 16-31 of the symbol's offset in
18599      the GOT entry corresponding to the symbol, and it also checks that
18600      the value does not overflow.
18601
18602 `plt'
18603      This modifier is used for function symbols.  It causes a
18604      _procedure linkage table_, an array of code stubs, to be created
18605      at the time the shared object is created or linked against,
18606      together with a global offset table entry.  The value is a
18607      pc-relative offset to the corresponding stub code in the procedure
18608      linkage table.  This arrangement causes the run-time symbol
18609      resolver to be called to look up and set the value of the symbol
18610      the first time the function is called (at latest; depending
18611      environment variables).  It is only safe to leave the symbol
18612      unresolved this way if all references are function calls.
18613
18614 `hw0_tls_gd'
18615      This modifier is used to load bits 0-15 of the offset of the GOT
18616      entry of the symbol's TLS descriptor, to be used for
18617      general-dynamic TLS accesses.
18618
18619 `hw0_last_tls_gd'
18620      This modifier yields the same value as `hw0_tls_gd', but it also
18621      checks that the value does not overflow.
18622
18623 `hw1_last_tls_gd'
18624      This modifier is used to load bits 16-31 of the offset of the GOT
18625      entry of the symbol's TLS descriptor, to be used for
18626      general-dynamic TLS accesses.  It also checks that the value does
18627      not overflow.
18628
18629 `hw0_tls_ie'
18630      This modifier is used to load bits 0-15 of the offset of the GOT
18631      entry containing the offset of the symbol's address from the TCB,
18632      to be used for initial-exec TLS accesses.
18633
18634 `hw0_last_tls_ie'
18635      This modifier yields the same value as `hw0_tls_ie', but it also
18636      checks that the value does not overflow.
18637
18638 `hw1_last_tls_ie'
18639      This modifier is used to load bits 16-31 of the offset of the GOT
18640      entry containing the offset of the symbol's address from the TCB,
18641      to be used for initial-exec TLS accesses.  It also checks that the
18642      value does not overflow.
18643
18644 `hw0_tls_le'
18645      This modifier is used to load bits 0-15 of the offset of the
18646      symbol's address from the TCB, to be used for local-exec TLS
18647      accesses.
18648
18649 `hw0_last_tls_le'
18650      This modifier yields the same value as `hw0_tls_le', but it also
18651      checks that the value does not overflow.
18652
18653 `hw1_last_tls_le'
18654      This modifier is used to load bits 16-31 of the offset of the
18655      symbol's address from the TCB, to be used for local-exec TLS
18656      accesses.  It also checks that the value does not overflow.
18657
18658 `tls_gd_call'
18659      This modifier is used to tag an instrution as the "call" part of a
18660      calling sequence for a TLS GD reference of its operand.
18661
18662 `tls_gd_add'
18663      This modifier is used to tag an instruction as the "add" part of a
18664      calling sequence for a TLS GD reference of its operand.
18665
18666 `tls_ie_load'
18667      This modifier is used to tag an instruction as the "load" part of a
18668      calling sequence for a TLS IE reference of its operand.
18669
18670
18671 \1f
18672 File: as.info,  Node: TILE-Gx Directives,  Prev: TILE-Gx Syntax,  Up: TILE-Gx-Dependent
18673
18674 9.42.3 TILE-Gx Directives
18675 -------------------------
18676
18677 `.align EXPRESSION [, EXPRESSION]'
18678      This is the generic .ALIGN directive.  The first argument is the
18679      requested alignment in bytes.
18680
18681 `.allow_suspicious_bundles'
18682      Turns on error checking for combinations of instructions in a
18683      bundle that probably indicate a programming error.  This is on by
18684      default.
18685
18686 `.no_allow_suspicious_bundles'
18687      Turns off error checking for combinations of instructions in a
18688      bundle that probably indicate a programming error.
18689
18690 `.require_canonical_reg_names'
18691      Require that canonical register names be used, and emit a warning
18692      if the numeric names are used.  This is on by default.
18693
18694 `.no_require_canonical_reg_names'
18695      Permit the use of numeric names for registers that have canonical
18696      names.
18697
18698
18699 \1f
18700 File: as.info,  Node: TILEPro-Dependent,  Next: V850-Dependent,  Prev: TILE-Gx-Dependent,  Up: Machine Dependencies
18701
18702 9.43 TILEPro Dependent Features
18703 ===============================
18704
18705 * Menu:
18706
18707 * TILEPro Options::             TILEPro Options
18708 * TILEPro Syntax::              TILEPro Syntax
18709 * TILEPro Directives::          TILEPro Directives
18710
18711 \1f
18712 File: as.info,  Node: TILEPro Options,  Next: TILEPro Syntax,  Up: TILEPro-Dependent
18713
18714 9.43.1 Options
18715 --------------
18716
18717 `as' has no machine-dependent command-line options for TILEPro.
18718
18719 \1f
18720 File: as.info,  Node: TILEPro Syntax,  Next: TILEPro Directives,  Prev: TILEPro Options,  Up: TILEPro-Dependent
18721
18722 9.43.2 Syntax
18723 -------------
18724
18725 Block comments are delimited by `/*' and `*/'.  End of line comments
18726 may be introduced by `#'.
18727
18728    Instructions consist of a leading opcode or macro name followed by
18729 whitespace and an optional comma-separated list of operands:
18730
18731      OPCODE [OPERAND, ...]
18732
18733    Instructions must be separated by a newline or semicolon.
18734
18735    There are two ways to write code: either write naked instructions,
18736 which the assembler is free to combine into VLIW bundles, or specify
18737 the VLIW bundles explicitly.
18738
18739    Bundles are specified using curly braces:
18740
18741      { ADD r3,r4,r5 ; ADD r7,r8,r9 ; LW r10,r11 }
18742
18743    A bundle can span multiple lines. If you want to put multiple
18744 instructions on a line, whether in a bundle or not, you need to
18745 separate them with semicolons as in this example.
18746
18747    A bundle may contain one or more instructions, up to the limit
18748 specified by the ISA (currently three). If fewer instructions are
18749 specified than the hardware supports in a bundle, the assembler inserts
18750 `fnop' instructions automatically.
18751
18752    The assembler will prefer to preserve the ordering of instructions
18753 within the bundle, putting the first instruction in a lower-numbered
18754 pipeline than the next one, etc.  This fact, combined with the optional
18755 use of explicit `fnop' or `nop' instructions, allows precise control
18756 over which pipeline executes each instruction.
18757
18758    If the instructions cannot be bundled in the listed order, the
18759 assembler will automatically try to find a valid pipeline assignment.
18760 If there is no way to bundle the instructions together, the assembler
18761 reports an error.
18762
18763    The assembler does not yet auto-bundle (automatically combine
18764 multiple instructions into one bundle), but it reserves the right to do
18765 so in the future.  If you want to force an instruction to run by
18766 itself, put it in a bundle explicitly with curly braces and use `nop'
18767 instructions (not `fnop') to fill the remaining pipeline slots in that
18768 bundle.
18769
18770 * Menu:
18771
18772 * TILEPro Opcodes::              Opcode Naming Conventions.
18773 * TILEPro Registers::            Register Naming.
18774 * TILEPro Modifiers::            Symbolic Operand Modifiers.
18775
18776 \1f
18777 File: as.info,  Node: TILEPro Opcodes,  Next: TILEPro Registers,  Up: TILEPro Syntax
18778
18779 9.43.2.1 Opcode Names
18780 .....................
18781
18782 For a complete list of opcodes and descriptions of their semantics, see
18783 `TILE Processor User Architecture Manual', available upon request at
18784 www.tilera.com.
18785
18786 \1f
18787 File: as.info,  Node: TILEPro Registers,  Next: TILEPro Modifiers,  Prev: TILEPro Opcodes,  Up: TILEPro Syntax
18788
18789 9.43.2.2 Register Names
18790 .......................
18791
18792 General-purpose registers are represented by predefined symbols of the
18793 form `rN', where N represents a number between `0' and `63'.  However,
18794 the following registers have canonical names that must be used instead:
18795
18796 `r54'
18797      sp
18798
18799 `r55'
18800      lr
18801
18802 `r56'
18803      sn
18804
18805 `r57'
18806      idn0
18807
18808 `r58'
18809      idn1
18810
18811 `r59'
18812      udn0
18813
18814 `r60'
18815      udn1
18816
18817 `r61'
18818      udn2
18819
18820 `r62'
18821      udn3
18822
18823 `r63'
18824      zero
18825
18826
18827    The assembler will emit a warning if a numeric name is used instead
18828 of the canonical name.  The `.no_require_canonical_reg_names' assembler
18829 pseudo-op turns off this warning. `.require_canonical_reg_names' turns
18830 it back on.
18831
18832 \1f
18833 File: as.info,  Node: TILEPro Modifiers,  Prev: TILEPro Registers,  Up: TILEPro Syntax
18834
18835 9.43.2.3 Symbolic Operand Modifiers
18836 ...................................
18837
18838 The assembler supports several modifiers when using symbol addresses in
18839 TILEPro instruction operands.  The general syntax is the following:
18840
18841      modifier(symbol)
18842
18843    The following modifiers are supported:
18844
18845 `lo16'
18846      This modifier is used to load the low 16 bits of the symbol's
18847      address, sign-extended to a 32-bit value (sign-extension allows it
18848      to be range-checked against signed 16 bit immediate operands
18849      without complaint).
18850
18851 `hi16'
18852      This modifier is used to load the high 16 bits of the symbol's
18853      address, also sign-extended to a 32-bit value.
18854
18855 `ha16'
18856      `ha16(N)' is identical to `hi16(N)', except if `lo16(N)' is
18857      negative it adds one to the `hi16(N)' value. This way `lo16' and
18858      `ha16' can be added to create any 32-bit value using `auli'.  For
18859      example, here is how you move an arbitrary 32-bit address into r3:
18860
18861           moveli r3, lo16(sym)
18862           auli r3, r3, ha16(sym)
18863
18864 `got'
18865      This modifier is used to load the offset of the GOT entry
18866      corresponding to the symbol.
18867
18868 `got_lo16'
18869      This modifier is used to load the sign-extended low 16 bits of the
18870      offset of the GOT entry corresponding to the symbol.
18871
18872 `got_hi16'
18873      This modifier is used to load the sign-extended high 16 bits of the
18874      offset of the GOT entry corresponding to the symbol.
18875
18876 `got_ha16'
18877      This modifier is like `got_hi16', but it adds one if `got_lo16' of
18878      the input value is negative.
18879
18880 `plt'
18881      This modifier is used for function symbols.  It causes a
18882      _procedure linkage table_, an array of code stubs, to be created
18883      at the time the shared object is created or linked against,
18884      together with a global offset table entry.  The value is a
18885      pc-relative offset to the corresponding stub code in the procedure
18886      linkage table.  This arrangement causes the run-time symbol
18887      resolver to be called to look up and set the value of the symbol
18888      the first time the function is called (at latest; depending
18889      environment variables).  It is only safe to leave the symbol
18890      unresolved this way if all references are function calls.
18891
18892 `tls_gd'
18893      This modifier is used to load the offset of the GOT entry of the
18894      symbol's TLS descriptor, to be used for general-dynamic TLS
18895      accesses.
18896
18897 `tls_gd_lo16'
18898      This modifier is used to load the sign-extended low 16 bits of the
18899      offset of the GOT entry of the symbol's TLS descriptor, to be used
18900      for general dynamic TLS accesses.
18901
18902 `tls_gd_hi16'
18903      This modifier is used to load the sign-extended high 16 bits of the
18904      offset of the GOT entry of the symbol's TLS descriptor, to be used
18905      for general dynamic TLS accesses.
18906
18907 `tls_gd_ha16'
18908      This modifier is like `tls_gd_hi16', but it adds one to the value
18909      if `tls_gd_lo16' of the input value is negative.
18910
18911 `tls_ie'
18912      This modifier is used to load the offset of the GOT entry
18913      containing the offset of the symbol's address from the TCB, to be
18914      used for initial-exec TLS accesses.
18915
18916 `tls_ie_lo16'
18917      This modifier is used to load the low 16 bits of the offset of the
18918      GOT entry containing the offset of the symbol's address from the
18919      TCB, to be used for initial-exec TLS accesses.
18920
18921 `tls_ie_hi16'
18922      This modifier is used to load the high 16 bits of the offset of the
18923      GOT entry containing the offset of the symbol's address from the
18924      TCB, to be used for initial-exec TLS accesses.
18925
18926 `tls_ie_ha16'
18927      This modifier is like `tls_ie_hi16', but it adds one to the value
18928      if `tls_ie_lo16' of the input value is negative.
18929
18930 `tls_le'
18931      This modifier is used to load the offset of the symbol's address
18932      from the TCB, to be used for local-exec TLS accesses.
18933
18934 `tls_le_lo16'
18935      This modifier is used to load the low 16 bits of the offset of the
18936      symbol's address from the TCB, to be used for local-exec TLS
18937      accesses.
18938
18939 `tls_le_hi16'
18940      This modifier is used to load the high 16 bits of the offset of the
18941      symbol's address from the TCB, to be used for local-exec TLS
18942      accesses.
18943
18944 `tls_le_ha16'
18945      This modifier is like `tls_le_hi16', but it adds one to the value
18946      if `tls_le_lo16' of the input value is negative.
18947
18948 `tls_gd_call'
18949      This modifier is used to tag an instrution as the "call" part of a
18950      calling sequence for a TLS GD reference of its operand.
18951
18952 `tls_gd_add'
18953      This modifier is used to tag an instruction as the "add" part of a
18954      calling sequence for a TLS GD reference of its operand.
18955
18956 `tls_ie_load'
18957      This modifier is used to tag an instruction as the "load" part of a
18958      calling sequence for a TLS IE reference of its operand.
18959
18960
18961 \1f
18962 File: as.info,  Node: TILEPro Directives,  Prev: TILEPro Syntax,  Up: TILEPro-Dependent
18963
18964 9.43.3 TILEPro Directives
18965 -------------------------
18966
18967 `.align EXPRESSION [, EXPRESSION]'
18968      This is the generic .ALIGN directive.  The first argument is the
18969      requested alignment in bytes.
18970
18971 `.allow_suspicious_bundles'
18972      Turns on error checking for combinations of instructions in a
18973      bundle that probably indicate a programming error.  This is on by
18974      default.
18975
18976 `.no_allow_suspicious_bundles'
18977      Turns off error checking for combinations of instructions in a
18978      bundle that probably indicate a programming error.
18979
18980 `.require_canonical_reg_names'
18981      Require that canonical register names be used, and emit a warning
18982      if the numeric names are used.  This is on by default.
18983
18984 `.no_require_canonical_reg_names'
18985      Permit the use of numeric names for registers that have canonical
18986      names.
18987
18988
18989 \1f
18990 File: as.info,  Node: Z80-Dependent,  Next: Z8000-Dependent,  Prev: Xtensa-Dependent,  Up: Machine Dependencies
18991
18992 9.44 Z80 Dependent Features
18993 ===========================
18994
18995 * Menu:
18996
18997 * Z80 Options::              Options
18998 * Z80 Syntax::               Syntax
18999 * Z80 Floating Point::       Floating Point
19000 * Z80 Directives::           Z80 Machine Directives
19001 * Z80 Opcodes::              Opcodes
19002
19003 \1f
19004 File: as.info,  Node: Z80 Options,  Next: Z80 Syntax,  Up: Z80-Dependent
19005
19006 9.44.1 Options
19007 --------------
19008
19009 The Zilog Z80 and Ascii R800 version of `as' have a few machine
19010 dependent options.
19011 `-z80'
19012      Produce code for the Z80 processor. There are additional options to
19013      request warnings and error messages for undocumented instructions.
19014
19015 `-ignore-undocumented-instructions'
19016 `-Wnud'
19017      Silently assemble undocumented Z80-instructions that have been
19018      adopted as documented R800-instructions.
19019
19020 `-ignore-unportable-instructions'
19021 `-Wnup'
19022      Silently assemble all undocumented Z80-instructions.
19023
19024 `-warn-undocumented-instructions'
19025 `-Wud'
19026      Issue warnings for undocumented Z80-instructions that work on
19027      R800, do not assemble other undocumented instructions without
19028      warning.
19029
19030 `-warn-unportable-instructions'
19031 `-Wup'
19032      Issue warnings for other undocumented Z80-instructions, do not
19033      treat any undocumented instructions as errors.
19034
19035 `-forbid-undocumented-instructions'
19036 `-Fud'
19037      Treat all undocumented z80-instructions as errors.
19038
19039 `-forbid-unportable-instructions'
19040 `-Fup'
19041      Treat undocumented z80-instructions that do not work on R800 as
19042      errors.
19043
19044 `-r800'
19045      Produce code for the R800 processor. The assembler does not support
19046      undocumented instructions for the R800.  In line with common
19047      practice, `as' uses Z80 instruction names for the R800 processor,
19048      as far as they exist.
19049
19050 \1f
19051 File: as.info,  Node: Z80 Syntax,  Next: Z80 Floating Point,  Prev: Z80 Options,  Up: Z80-Dependent
19052
19053 9.44.2 Syntax
19054 -------------
19055
19056 The assembler syntax closely follows the 'Z80 family CPU User Manual' by
19057 Zilog.  In expressions a single `=' may be used as "is equal to"
19058 comparison operator.
19059
19060    Suffices can be used to indicate the radix of integer constants; `H'
19061 or `h' for hexadecimal, `D' or `d' for decimal, `Q', `O', `q' or `o'
19062 for octal, and `B' for binary.
19063
19064    The suffix `b' denotes a backreference to local label.
19065
19066 * Menu:
19067
19068 * Z80-Chars::                Special Characters
19069 * Z80-Regs::                 Register Names
19070 * Z80-Case::                 Case Sensitivity
19071
19072 \1f
19073 File: as.info,  Node: Z80-Chars,  Next: Z80-Regs,  Up: Z80 Syntax
19074
19075 9.44.2.1 Special Characters
19076 ...........................
19077
19078 The semicolon `;' is the line comment character;
19079
19080    If a `#' appears as the first character of a line then the whole
19081 line is treated as a comment, but in this case the line could also be a
19082 logical line number directive (*note Comments::) or a preprocessor
19083 control command (*note Preprocessing::).
19084
19085    The Z80 assembler does not support a line separator character.
19086
19087    The dollar sign `$' can be used as a prefix for hexadecimal numbers
19088 and as a symbol denoting the current location counter.
19089
19090    A backslash `\' is an ordinary character for the Z80 assembler.
19091
19092    The single quote `'' must be followed by a closing quote. If there
19093 is one character in between, it is a character constant, otherwise it is
19094 a string constant.
19095
19096 \1f
19097 File: as.info,  Node: Z80-Regs,  Next: Z80-Case,  Prev: Z80-Chars,  Up: Z80 Syntax
19098
19099 9.44.2.2 Register Names
19100 .......................
19101
19102 The registers are referred to with the letters assigned to them by
19103 Zilog. In addition `as' recognizes `ixl' and `ixh' as the least and
19104 most significant octet in `ix', and similarly `iyl' and  `iyh' as parts
19105 of `iy'.
19106
19107 \1f
19108 File: as.info,  Node: Z80-Case,  Prev: Z80-Regs,  Up: Z80 Syntax
19109
19110 9.44.2.3 Case Sensitivity
19111 .........................
19112
19113 Upper and lower case are equivalent in register names, opcodes,
19114 condition codes  and assembler directives.  The case of letters is
19115 significant in labels and symbol names. The case is also important to
19116 distinguish the suffix `b' for a backward reference to a local label
19117 from the suffix `B' for a number in binary notation.
19118
19119 \1f
19120 File: as.info,  Node: Z80 Floating Point,  Next: Z80 Directives,  Prev: Z80 Syntax,  Up: Z80-Dependent
19121
19122 9.44.3 Floating Point
19123 ---------------------
19124
19125 Floating-point numbers are not supported.
19126
19127 \1f
19128 File: as.info,  Node: Z80 Directives,  Next: Z80 Opcodes,  Prev: Z80 Floating Point,  Up: Z80-Dependent
19129
19130 9.44.4 Z80 Assembler Directives
19131 -------------------------------
19132
19133 `as' for the Z80 supports some additional directives for compatibility
19134 with other assemblers.
19135
19136    These are the additional directives in `as' for the Z80:
19137
19138 `db EXPRESSION|STRING[,EXPRESSION|STRING...]'
19139 `defb EXPRESSION|STRING[,EXPRESSION|STRING...]'
19140      For each STRING the characters are copied to the object file, for
19141      each other EXPRESSION the value is stored in one byte.  A warning
19142      is issued in case of an overflow.
19143
19144 `dw EXPRESSION[,EXPRESSION...]'
19145 `defw EXPRESSION[,EXPRESSION...]'
19146      For each EXPRESSION the value is stored in two bytes, ignoring
19147      overflow.
19148
19149 `d24 EXPRESSION[,EXPRESSION...]'
19150 `def24 EXPRESSION[,EXPRESSION...]'
19151      For each EXPRESSION the value is stored in three bytes, ignoring
19152      overflow.
19153
19154 `d32 EXPRESSION[,EXPRESSION...]'
19155 `def32 EXPRESSION[,EXPRESSION...]'
19156      For each EXPRESSION the value is stored in four bytes, ignoring
19157      overflow.
19158
19159 `ds COUNT[, VALUE]'
19160 `defs COUNT[, VALUE]'
19161      Fill COUNT bytes in the object file with VALUE, if VALUE is
19162      omitted it defaults to zero.
19163
19164 `SYMBOL equ EXPRESSION'
19165 `SYMBOL defl EXPRESSION'
19166      These directives set the value of SYMBOL to EXPRESSION. If `equ'
19167      is used, it is an error if SYMBOL is already defined.  Symbols
19168      defined with `equ' are not protected from redefinition.
19169
19170 `set'
19171      This is a normal instruction on Z80, and not an assembler
19172      directive.
19173
19174 `psect NAME'
19175      A synonym for *Note Section::, no second argument should be given.
19176
19177
19178 \1f
19179 File: as.info,  Node: Z80 Opcodes,  Prev: Z80 Directives,  Up: Z80-Dependent
19180
19181 9.44.5 Opcodes
19182 --------------
19183
19184 In line with common practice, Z80 mnemonics are used for both the Z80
19185 and the R800.
19186
19187    In many instructions it is possible to use one of the half index
19188 registers (`ixl',`ixh',`iyl',`iyh') in stead of an 8-bit general
19189 purpose register. This yields instructions that are documented on the
19190 R800 and undocumented on the Z80.  Similarly `in f,(c)' is documented
19191 on the R800 and undocumented on the Z80.
19192
19193    The assembler also supports the following undocumented
19194 Z80-instructions, that have not been adopted in the R800 instruction
19195 set:
19196 `out (c),0'
19197      Sends zero to the port pointed to by register c.
19198
19199 `sli M'
19200      Equivalent to `M = (M<<1)+1', the operand M can be any operand
19201      that is valid for `sla'. One can use `sll' as a synonym for `sli'.
19202
19203 `OP (ix+D), R'
19204      This is equivalent to
19205
19206           ld R, (ix+D)
19207           OPC R
19208           ld (ix+D), R
19209
19210      The operation `OPC' may be any of `res B,', `set B,', `rl', `rlc',
19211      `rr', `rrc', `sla', `sli', `sra' and `srl', and the register `R'
19212      may be any of `a', `b', `c', `d', `e', `h' and `l'.
19213
19214 `OPC (iy+D), R'
19215      As above, but with `iy' instead of `ix'.
19216
19217    The web site at `http://www.z80.info' is a good starting place to
19218 find more information on programming the Z80.
19219
19220 \1f
19221 File: as.info,  Node: Z8000-Dependent,  Next: Vax-Dependent,  Prev: Z80-Dependent,  Up: Machine Dependencies
19222
19223 9.45 Z8000 Dependent Features
19224 =============================
19225
19226    The Z8000 as supports both members of the Z8000 family: the
19227 unsegmented Z8002, with 16 bit addresses, and the segmented Z8001 with
19228 24 bit addresses.
19229
19230    When the assembler is in unsegmented mode (specified with the
19231 `unsegm' directive), an address takes up one word (16 bit) sized
19232 register.  When the assembler is in segmented mode (specified with the
19233 `segm' directive), a 24-bit address takes up a long (32 bit) register.
19234 *Note Assembler Directives for the Z8000: Z8000 Directives, for a list
19235 of other Z8000 specific assembler directives.
19236
19237 * Menu:
19238
19239 * Z8000 Options::               Command-line options for the Z8000
19240 * Z8000 Syntax::                Assembler syntax for the Z8000
19241 * Z8000 Directives::            Special directives for the Z8000
19242 * Z8000 Opcodes::               Opcodes
19243
19244 \1f
19245 File: as.info,  Node: Z8000 Options,  Next: Z8000 Syntax,  Up: Z8000-Dependent
19246
19247 9.45.1 Options
19248 --------------
19249
19250 `-z8001'
19251      Generate segmented code by default.
19252
19253 `-z8002'
19254      Generate unsegmented code by default.
19255
19256 \1f
19257 File: as.info,  Node: Z8000 Syntax,  Next: Z8000 Directives,  Prev: Z8000 Options,  Up: Z8000-Dependent
19258
19259 9.45.2 Syntax
19260 -------------
19261
19262 * Menu:
19263
19264 * Z8000-Chars::                Special Characters
19265 * Z8000-Regs::                 Register Names
19266 * Z8000-Addressing::           Addressing Modes
19267
19268 \1f
19269 File: as.info,  Node: Z8000-Chars,  Next: Z8000-Regs,  Up: Z8000 Syntax
19270
19271 9.45.2.1 Special Characters
19272 ...........................
19273
19274 `!' is the line comment character.
19275
19276    If a `#' appears as the first character of a line then the whole
19277 line is treated as a comment, but in this case the line could also be a
19278 logical line number directive (*note Comments::) or a preprocessor
19279 control command (*note Preprocessing::).
19280
19281    You can use `;' instead of a newline to separate statements.
19282
19283 \1f
19284 File: as.info,  Node: Z8000-Regs,  Next: Z8000-Addressing,  Prev: Z8000-Chars,  Up: Z8000 Syntax
19285
19286 9.45.2.2 Register Names
19287 .......................
19288
19289 The Z8000 has sixteen 16 bit registers, numbered 0 to 15.  You can refer
19290 to different sized groups of registers by register number, with the
19291 prefix `r' for 16 bit registers, `rr' for 32 bit registers and `rq' for
19292 64 bit registers.  You can also refer to the contents of the first
19293 eight (of the sixteen 16 bit registers) by bytes.  They are named `rlN'
19294 and `rhN'.
19295
19296 _byte registers_
19297      rl0 rh0 rl1 rh1 rl2 rh2 rl3 rh3
19298      rl4 rh4 rl5 rh5 rl6 rh6 rl7 rh7
19299
19300 _word registers_
19301      r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15
19302
19303 _long word registers_
19304      rr0 rr2 rr4 rr6 rr8 rr10 rr12 rr14
19305
19306 _quad word registers_
19307      rq0 rq4 rq8 rq12
19308
19309 \1f
19310 File: as.info,  Node: Z8000-Addressing,  Prev: Z8000-Regs,  Up: Z8000 Syntax
19311
19312 9.45.2.3 Addressing Modes
19313 .........................
19314
19315 as understands the following addressing modes for the Z8000:
19316
19317 `rlN'
19318 `rhN'
19319 `rN'
19320 `rrN'
19321 `rqN'
19322      Register direct:  8bit, 16bit, 32bit, and 64bit registers.
19323
19324 `@rN'
19325 `@rrN'
19326      Indirect register:  @rrN in segmented mode, @rN in unsegmented
19327      mode.
19328
19329 `ADDR'
19330      Direct: the 16 bit or 24 bit address (depending on whether the
19331      assembler is in segmented or unsegmented mode) of the operand is
19332      in the instruction.
19333
19334 `address(rN)'
19335      Indexed: the 16 or 24 bit address is added to the 16 bit register
19336      to produce the final address in memory of the operand.
19337
19338 `rN(#IMM)'
19339 `rrN(#IMM)'
19340      Base Address: the 16 or 24 bit register is added to the 16 bit sign
19341      extended immediate displacement to produce the final address in
19342      memory of the operand.
19343
19344 `rN(rM)'
19345 `rrN(rM)'
19346      Base Index: the 16 or 24 bit register rN or rrN is added to the
19347      sign extended 16 bit index register rM to produce the final
19348      address in memory of the operand.
19349
19350 `#XX'
19351      Immediate data XX.
19352
19353 \1f
19354 File: as.info,  Node: Z8000 Directives,  Next: Z8000 Opcodes,  Prev: Z8000 Syntax,  Up: Z8000-Dependent
19355
19356 9.45.3 Assembler Directives for the Z8000
19357 -----------------------------------------
19358
19359 The Z8000 port of as includes additional assembler directives, for
19360 compatibility with other Z8000 assemblers.  These do not begin with `.'
19361 (unlike the ordinary as directives).
19362
19363 `segm'
19364 `.z8001'
19365      Generate code for the segmented Z8001.
19366
19367 `unsegm'
19368 `.z8002'
19369      Generate code for the unsegmented Z8002.
19370
19371 `name'
19372      Synonym for `.file'
19373
19374 `global'
19375      Synonym for `.global'
19376
19377 `wval'
19378      Synonym for `.word'
19379
19380 `lval'
19381      Synonym for `.long'
19382
19383 `bval'
19384      Synonym for `.byte'
19385
19386 `sval'
19387      Assemble a string.  `sval' expects one string literal, delimited by
19388      single quotes.  It assembles each byte of the string into
19389      consecutive addresses.  You can use the escape sequence `%XX'
19390      (where XX represents a two-digit hexadecimal number) to represent
19391      the character whose ASCII value is XX.  Use this feature to
19392      describe single quote and other characters that may not appear in
19393      string literals as themselves.  For example, the C statement
19394      `char *a = "he said \"it's 50% off\"";' is represented in Z8000
19395      assembly language (shown with the assembler output in hex at the
19396      left) as
19397
19398           68652073    sval    'he said %22it%27s 50%25 off%22%00'
19399           61696420
19400           22697427
19401           73203530
19402           25206F66
19403           662200
19404
19405 `rsect'
19406      synonym for `.section'
19407
19408 `block'
19409      synonym for `.space'
19410
19411 `even'
19412      special case of `.align'; aligns output to even byte boundary.
19413
19414 \1f
19415 File: as.info,  Node: Z8000 Opcodes,  Prev: Z8000 Directives,  Up: Z8000-Dependent
19416
19417 9.45.4 Opcodes
19418 --------------
19419
19420 For detailed information on the Z8000 machine instruction set, see
19421 `Z8000 Technical Manual'.
19422
19423    The following table summarizes the opcodes and their arguments:
19424
19425                  rs   16 bit source register
19426                  rd   16 bit destination register
19427                  rbs   8 bit source register
19428                  rbd   8 bit destination register
19429                  rrs   32 bit source register
19430                  rrd   32 bit destination register
19431                  rqs   64 bit source register
19432                  rqd   64 bit destination register
19433                  addr 16/24 bit address
19434                  imm  immediate data
19435
19436      adc rd,rs               clrb addr               cpsir @rd,@rs,rr,cc
19437      adcb rbd,rbs            clrb addr(rd)           cpsirb @rd,@rs,rr,cc
19438      add rd,@rs              clrb rbd                dab rbd
19439      add rd,addr             com @rd                 dbjnz rbd,disp7
19440      add rd,addr(rs)         com addr                dec @rd,imm4m1
19441      add rd,imm16            com addr(rd)            dec addr(rd),imm4m1
19442      add rd,rs               com rd                  dec addr,imm4m1
19443      addb rbd,@rs            comb @rd                dec rd,imm4m1
19444      addb rbd,addr           comb addr               decb @rd,imm4m1
19445      addb rbd,addr(rs)       comb addr(rd)           decb addr(rd),imm4m1
19446      addb rbd,imm8           comb rbd                decb addr,imm4m1
19447      addb rbd,rbs            comflg flags            decb rbd,imm4m1
19448      addl rrd,@rs            cp @rd,imm16            di i2
19449      addl rrd,addr           cp addr(rd),imm16       div rrd,@rs
19450      addl rrd,addr(rs)       cp addr,imm16           div rrd,addr
19451      addl rrd,imm32          cp rd,@rs               div rrd,addr(rs)
19452      addl rrd,rrs            cp rd,addr              div rrd,imm16
19453      and rd,@rs              cp rd,addr(rs)          div rrd,rs
19454      and rd,addr             cp rd,imm16             divl rqd,@rs
19455      and rd,addr(rs)         cp rd,rs                divl rqd,addr
19456      and rd,imm16            cpb @rd,imm8            divl rqd,addr(rs)
19457      and rd,rs               cpb addr(rd),imm8       divl rqd,imm32
19458      andb rbd,@rs            cpb addr,imm8           divl rqd,rrs
19459      andb rbd,addr           cpb rbd,@rs             djnz rd,disp7
19460      andb rbd,addr(rs)       cpb rbd,addr            ei i2
19461      andb rbd,imm8           cpb rbd,addr(rs)        ex rd,@rs
19462      andb rbd,rbs            cpb rbd,imm8            ex rd,addr
19463      bit @rd,imm4            cpb rbd,rbs             ex rd,addr(rs)
19464      bit addr(rd),imm4       cpd rd,@rs,rr,cc        ex rd,rs
19465      bit addr,imm4           cpdb rbd,@rs,rr,cc      exb rbd,@rs
19466      bit rd,imm4             cpdr rd,@rs,rr,cc       exb rbd,addr
19467      bit rd,rs               cpdrb rbd,@rs,rr,cc     exb rbd,addr(rs)
19468      bitb @rd,imm4           cpi rd,@rs,rr,cc        exb rbd,rbs
19469      bitb addr(rd),imm4      cpib rbd,@rs,rr,cc      ext0e imm8
19470      bitb addr,imm4          cpir rd,@rs,rr,cc       ext0f imm8
19471      bitb rbd,imm4           cpirb rbd,@rs,rr,cc     ext8e imm8
19472      bitb rbd,rs             cpl rrd,@rs             ext8f imm8
19473      bpt                     cpl rrd,addr            exts rrd
19474      call @rd                cpl rrd,addr(rs)        extsb rd
19475      call addr               cpl rrd,imm32           extsl rqd
19476      call addr(rd)           cpl rrd,rrs             halt
19477      calr disp12             cpsd @rd,@rs,rr,cc      in rd,@rs
19478      clr @rd                 cpsdb @rd,@rs,rr,cc     in rd,imm16
19479      clr addr                cpsdr @rd,@rs,rr,cc     inb rbd,@rs
19480      clr addr(rd)            cpsdrb @rd,@rs,rr,cc    inb rbd,imm16
19481      clr rd                  cpsi @rd,@rs,rr,cc      inc @rd,imm4m1
19482      clrb @rd                cpsib @rd,@rs,rr,cc     inc addr(rd),imm4m1
19483      inc addr,imm4m1         ldb rbd,rs(rx)          mult rrd,addr(rs)
19484      inc rd,imm4m1           ldb rd(imm16),rbs       mult rrd,imm16
19485      incb @rd,imm4m1         ldb rd(rx),rbs          mult rrd,rs
19486      incb addr(rd),imm4m1    ldctl ctrl,rs           multl rqd,@rs
19487      incb addr,imm4m1        ldctl rd,ctrl           multl rqd,addr
19488      incb rbd,imm4m1         ldd @rs,@rd,rr          multl rqd,addr(rs)
19489      ind @rd,@rs,ra          lddb @rs,@rd,rr         multl rqd,imm32
19490      indb @rd,@rs,rba        lddr @rs,@rd,rr         multl rqd,rrs
19491      inib @rd,@rs,ra         lddrb @rs,@rd,rr        neg @rd
19492      inibr @rd,@rs,ra        ldi @rd,@rs,rr          neg addr
19493      iret                    ldib @rd,@rs,rr         neg addr(rd)
19494      jp cc,@rd               ldir @rd,@rs,rr         neg rd
19495      jp cc,addr              ldirb @rd,@rs,rr        negb @rd
19496      jp cc,addr(rd)          ldk rd,imm4             negb addr
19497      jr cc,disp8             ldl @rd,rrs             negb addr(rd)
19498      ld @rd,imm16            ldl addr(rd),rrs        negb rbd
19499      ld @rd,rs               ldl addr,rrs            nop
19500      ld addr(rd),imm16       ldl rd(imm16),rrs       or rd,@rs
19501      ld addr(rd),rs          ldl rd(rx),rrs          or rd,addr
19502      ld addr,imm16           ldl rrd,@rs             or rd,addr(rs)
19503      ld addr,rs              ldl rrd,addr            or rd,imm16
19504      ld rd(imm16),rs         ldl rrd,addr(rs)        or rd,rs
19505      ld rd(rx),rs            ldl rrd,imm32           orb rbd,@rs
19506      ld rd,@rs               ldl rrd,rrs             orb rbd,addr
19507      ld rd,addr              ldl rrd,rs(imm16)       orb rbd,addr(rs)
19508      ld rd,addr(rs)          ldl rrd,rs(rx)          orb rbd,imm8
19509      ld rd,imm16             ldm @rd,rs,n            orb rbd,rbs
19510      ld rd,rs                ldm addr(rd),rs,n       out @rd,rs
19511      ld rd,rs(imm16)         ldm addr,rs,n           out imm16,rs
19512      ld rd,rs(rx)            ldm rd,@rs,n            outb @rd,rbs
19513      lda rd,addr             ldm rd,addr(rs),n       outb imm16,rbs
19514      lda rd,addr(rs)         ldm rd,addr,n           outd @rd,@rs,ra
19515      lda rd,rs(imm16)        ldps @rs                outdb @rd,@rs,rba
19516      lda rd,rs(rx)           ldps addr               outib @rd,@rs,ra
19517      ldar rd,disp16          ldps addr(rs)           outibr @rd,@rs,ra
19518      ldb @rd,imm8            ldr disp16,rs           pop @rd,@rs
19519      ldb @rd,rbs             ldr rd,disp16           pop addr(rd),@rs
19520      ldb addr(rd),imm8       ldrb disp16,rbs         pop addr,@rs
19521      ldb addr(rd),rbs        ldrb rbd,disp16         pop rd,@rs
19522      ldb addr,imm8           ldrl disp16,rrs         popl @rd,@rs
19523      ldb addr,rbs            ldrl rrd,disp16         popl addr(rd),@rs
19524      ldb rbd,@rs             mbit                    popl addr,@rs
19525      ldb rbd,addr            mreq rd                 popl rrd,@rs
19526      ldb rbd,addr(rs)        mres                    push @rd,@rs
19527      ldb rbd,imm8            mset                    push @rd,addr
19528      ldb rbd,rbs             mult rrd,@rs            push @rd,addr(rs)
19529      ldb rbd,rs(imm16)       mult rrd,addr           push @rd,imm16
19530      push @rd,rs             set addr,imm4           subl rrd,imm32
19531      pushl @rd,@rs           set rd,imm4             subl rrd,rrs
19532      pushl @rd,addr          set rd,rs               tcc cc,rd
19533      pushl @rd,addr(rs)      setb @rd,imm4           tccb cc,rbd
19534      pushl @rd,rrs           setb addr(rd),imm4      test @rd
19535      res @rd,imm4            setb addr,imm4          test addr
19536      res addr(rd),imm4       setb rbd,imm4           test addr(rd)
19537      res addr,imm4           setb rbd,rs             test rd
19538      res rd,imm4             setflg imm4             testb @rd
19539      res rd,rs               sinb rbd,imm16          testb addr
19540      resb @rd,imm4           sinb rd,imm16           testb addr(rd)
19541      resb addr(rd),imm4      sind @rd,@rs,ra         testb rbd
19542      resb addr,imm4          sindb @rd,@rs,rba       testl @rd
19543      resb rbd,imm4           sinib @rd,@rs,ra        testl addr
19544      resb rbd,rs             sinibr @rd,@rs,ra       testl addr(rd)
19545      resflg imm4             sla rd,imm8             testl rrd
19546      ret cc                  slab rbd,imm8           trdb @rd,@rs,rba
19547      rl rd,imm1or2           slal rrd,imm8           trdrb @rd,@rs,rba
19548      rlb rbd,imm1or2         sll rd,imm8             trib @rd,@rs,rbr
19549      rlc rd,imm1or2          sllb rbd,imm8           trirb @rd,@rs,rbr
19550      rlcb rbd,imm1or2        slll rrd,imm8           trtdrb @ra,@rb,rbr
19551      rldb rbb,rba            sout imm16,rs           trtib @ra,@rb,rr
19552      rr rd,imm1or2           soutb imm16,rbs         trtirb @ra,@rb,rbr
19553      rrb rbd,imm1or2         soutd @rd,@rs,ra        trtrb @ra,@rb,rbr
19554      rrc rd,imm1or2          soutdb @rd,@rs,rba      tset @rd
19555      rrcb rbd,imm1or2        soutib @rd,@rs,ra       tset addr
19556      rrdb rbb,rba            soutibr @rd,@rs,ra      tset addr(rd)
19557      rsvd36                  sra rd,imm8             tset rd
19558      rsvd38                  srab rbd,imm8           tsetb @rd
19559      rsvd78                  sral rrd,imm8           tsetb addr
19560      rsvd7e                  srl rd,imm8             tsetb addr(rd)
19561      rsvd9d                  srlb rbd,imm8           tsetb rbd
19562      rsvd9f                  srll rrd,imm8           xor rd,@rs
19563      rsvdb9                  sub rd,@rs              xor rd,addr
19564      rsvdbf                  sub rd,addr             xor rd,addr(rs)
19565      sbc rd,rs               sub rd,addr(rs)         xor rd,imm16
19566      sbcb rbd,rbs            sub rd,imm16            xor rd,rs
19567      sc imm8                 sub rd,rs               xorb rbd,@rs
19568      sda rd,rs               subb rbd,@rs            xorb rbd,addr
19569      sdab rbd,rs             subb rbd,addr           xorb rbd,addr(rs)
19570      sdal rrd,rs             subb rbd,addr(rs)       xorb rbd,imm8
19571      sdl rd,rs               subb rbd,imm8           xorb rbd,rbs
19572      sdlb rbd,rs             subb rbd,rbs            xorb rbd,rbs
19573      sdll rrd,rs             subl rrd,@rs
19574      set @rd,imm4            subl rrd,addr
19575      set addr(rd),imm4       subl rrd,addr(rs)
19576
19577 \1f
19578 File: as.info,  Node: Vax-Dependent,  Prev: Z8000-Dependent,  Up: Machine Dependencies
19579
19580 9.46 VAX Dependent Features
19581 ===========================
19582
19583 * Menu:
19584
19585 * VAX-Opts::                    VAX Command-Line Options
19586 * VAX-float::                   VAX Floating Point
19587 * VAX-directives::              Vax Machine Directives
19588 * VAX-opcodes::                 VAX Opcodes
19589 * VAX-branch::                  VAX Branch Improvement
19590 * VAX-operands::                VAX Operands
19591 * VAX-no::                      Not Supported on VAX
19592 * VAX-Syntax::                  VAX Syntax
19593
19594 \1f
19595 File: as.info,  Node: VAX-Opts,  Next: VAX-float,  Up: Vax-Dependent
19596
19597 9.46.1 VAX Command-Line Options
19598 -------------------------------
19599
19600 The Vax version of `as' accepts any of the following options, gives a
19601 warning message that the option was ignored and proceeds.  These
19602 options are for compatibility with scripts designed for other people's
19603 assemblers.
19604
19605 ``-D' (Debug)'
19606 ``-S' (Symbol Table)'
19607 ``-T' (Token Trace)'
19608      These are obsolete options used to debug old assemblers.
19609
19610 ``-d' (Displacement size for JUMPs)'
19611      This option expects a number following the `-d'.  Like options
19612      that expect filenames, the number may immediately follow the `-d'
19613      (old standard) or constitute the whole of the command line
19614      argument that follows `-d' (GNU standard).
19615
19616 ``-V' (Virtualize Interpass Temporary File)'
19617      Some other assemblers use a temporary file.  This option commanded
19618      them to keep the information in active memory rather than in a
19619      disk file.  `as' always does this, so this option is redundant.
19620
19621 ``-J' (JUMPify Longer Branches)'
19622      Many 32-bit computers permit a variety of branch instructions to
19623      do the same job.  Some of these instructions are short (and fast)
19624      but have a limited range; others are long (and slow) but can
19625      branch anywhere in virtual memory.  Often there are 3 flavors of
19626      branch: short, medium and long.  Some other assemblers would emit
19627      short and medium branches, unless told by this option to emit
19628      short and long branches.
19629
19630 ``-t' (Temporary File Directory)'
19631      Some other assemblers may use a temporary file, and this option
19632      takes a filename being the directory to site the temporary file.
19633      Since `as' does not use a temporary disk file, this option makes
19634      no difference.  `-t' needs exactly one filename.
19635
19636    The Vax version of the assembler accepts additional options when
19637 compiled for VMS:
19638
19639 `-h N'
19640      External symbol or section (used for global variables) names are
19641      not case sensitive on VAX/VMS and always mapped to upper case.
19642      This is contrary to the C language definition which explicitly
19643      distinguishes upper and lower case.  To implement a standard
19644      conforming C compiler, names must be changed (mapped) to preserve
19645      the case information.  The default mapping is to convert all lower
19646      case characters to uppercase and adding an underscore followed by
19647      a 6 digit hex value, representing a 24 digit binary value.  The
19648      one digits in the binary value represent which characters are
19649      uppercase in the original symbol name.
19650
19651      The `-h N' option determines how we map names.  This takes several
19652      values.  No `-h' switch at all allows case hacking as described
19653      above.  A value of zero (`-h0') implies names should be upper
19654      case, and inhibits the case hack.  A value of 2 (`-h2') implies
19655      names should be all lower case, with no case hack.  A value of 3
19656      (`-h3') implies that case should be preserved.  The value 1 is
19657      unused.  The `-H' option directs `as' to display every mapped
19658      symbol during assembly.
19659
19660      Symbols whose names include a dollar sign `$' are exceptions to the
19661      general name mapping.  These symbols are normally only used to
19662      reference VMS library names.  Such symbols are always mapped to
19663      upper case.
19664
19665 `-+'
19666      The `-+' option causes `as' to truncate any symbol name larger
19667      than 31 characters.  The `-+' option also prevents some code
19668      following the `_main' symbol normally added to make the object
19669      file compatible with Vax-11 "C".
19670
19671 `-1'
19672      This option is ignored for backward compatibility with `as'
19673      version 1.x.
19674
19675 `-H'
19676      The `-H' option causes `as' to print every symbol which was
19677      changed by case mapping.
19678
19679 \1f
19680 File: as.info,  Node: VAX-float,  Next: VAX-directives,  Prev: VAX-Opts,  Up: Vax-Dependent
19681
19682 9.46.2 VAX Floating Point
19683 -------------------------
19684
19685 Conversion of flonums to floating point is correct, and compatible with
19686 previous assemblers.  Rounding is towards zero if the remainder is
19687 exactly half the least significant bit.
19688
19689    `D', `F', `G' and `H' floating point formats are understood.
19690
19691    Immediate floating literals (_e.g._ `S`$6.9') are rendered
19692 correctly.  Again, rounding is towards zero in the boundary case.
19693
19694    The `.float' directive produces `f' format numbers.  The `.double'
19695 directive produces `d' format numbers.
19696
19697 \1f
19698 File: as.info,  Node: VAX-directives,  Next: VAX-opcodes,  Prev: VAX-float,  Up: Vax-Dependent
19699
19700 9.46.3 Vax Machine Directives
19701 -----------------------------
19702
19703 The Vax version of the assembler supports four directives for
19704 generating Vax floating point constants.  They are described in the
19705 table below.
19706
19707 `.dfloat'
19708      This expects zero or more flonums, separated by commas, and
19709      assembles Vax `d' format 64-bit floating point constants.
19710
19711 `.ffloat'
19712      This expects zero or more flonums, separated by commas, and
19713      assembles Vax `f' format 32-bit floating point constants.
19714
19715 `.gfloat'
19716      This expects zero or more flonums, separated by commas, and
19717      assembles Vax `g' format 64-bit floating point constants.
19718
19719 `.hfloat'
19720      This expects zero or more flonums, separated by commas, and
19721      assembles Vax `h' format 128-bit floating point constants.
19722
19723
19724 \1f
19725 File: as.info,  Node: VAX-opcodes,  Next: VAX-branch,  Prev: VAX-directives,  Up: Vax-Dependent
19726
19727 9.46.4 VAX Opcodes
19728 ------------------
19729
19730 All DEC mnemonics are supported.  Beware that `case...' instructions
19731 have exactly 3 operands.  The dispatch table that follows the `case...'
19732 instruction should be made with `.word' statements.  This is compatible
19733 with all unix assemblers we know of.
19734
19735 \1f
19736 File: as.info,  Node: VAX-branch,  Next: VAX-operands,  Prev: VAX-opcodes,  Up: Vax-Dependent
19737
19738 9.46.5 VAX Branch Improvement
19739 -----------------------------
19740
19741 Certain pseudo opcodes are permitted.  They are for branch
19742 instructions.  They expand to the shortest branch instruction that
19743 reaches the target.  Generally these mnemonics are made by substituting
19744 `j' for `b' at the start of a DEC mnemonic.  This feature is included
19745 both for compatibility and to help compilers.  If you do not need this
19746 feature, avoid these opcodes.  Here are the mnemonics, and the code
19747 they can expand into.
19748
19749 `jbsb'
19750      `Jsb' is already an instruction mnemonic, so we chose `jbsb'.
19751     (byte displacement)
19752           `bsbb ...'
19753
19754     (word displacement)
19755           `bsbw ...'
19756
19757     (long displacement)
19758           `jsb ...'
19759
19760 `jbr'
19761 `jr'
19762      Unconditional branch.
19763     (byte displacement)
19764           `brb ...'
19765
19766     (word displacement)
19767           `brw ...'
19768
19769     (long displacement)
19770           `jmp ...'
19771
19772 `jCOND'
19773      COND may be any one of the conditional branches `neq', `nequ',
19774      `eql', `eqlu', `gtr', `geq', `lss', `gtru', `lequ', `vc', `vs',
19775      `gequ', `cc', `lssu', `cs'.  COND may also be one of the bit tests
19776      `bs', `bc', `bss', `bcs', `bsc', `bcc', `bssi', `bcci', `lbs',
19777      `lbc'.  NOTCOND is the opposite condition to COND.
19778     (byte displacement)
19779           `bCOND ...'
19780
19781     (word displacement)
19782           `bNOTCOND foo ; brw ... ; foo:'
19783
19784     (long displacement)
19785           `bNOTCOND foo ; jmp ... ; foo:'
19786
19787 `jacbX'
19788      X may be one of `b d f g h l w'.
19789     (word displacement)
19790           `OPCODE ...'
19791
19792     (long displacement)
19793                OPCODE ..., foo ;
19794                brb bar ;
19795                foo: jmp ... ;
19796                bar:
19797
19798 `jaobYYY'
19799      YYY may be one of `lss leq'.
19800
19801 `jsobZZZ'
19802      ZZZ may be one of `geq gtr'.
19803     (byte displacement)
19804           `OPCODE ...'
19805
19806     (word displacement)
19807                OPCODE ..., foo ;
19808                brb bar ;
19809                foo: brw DESTINATION ;
19810                bar:
19811
19812     (long displacement)
19813                OPCODE ..., foo ;
19814                brb bar ;
19815                foo: jmp DESTINATION ;
19816                bar:
19817
19818 `aobleq'
19819 `aoblss'
19820 `sobgeq'
19821 `sobgtr'
19822
19823     (byte displacement)
19824           `OPCODE ...'
19825
19826     (word displacement)
19827                OPCODE ..., foo ;
19828                brb bar ;
19829                foo: brw DESTINATION ;
19830                bar:
19831
19832     (long displacement)
19833                OPCODE ..., foo ;
19834                brb bar ;
19835                foo: jmp DESTINATION ;
19836                bar:
19837
19838 \1f
19839 File: as.info,  Node: VAX-operands,  Next: VAX-no,  Prev: VAX-branch,  Up: Vax-Dependent
19840
19841 9.46.6 VAX Operands
19842 -------------------
19843
19844 The immediate character is `$' for Unix compatibility, not `#' as DEC
19845 writes it.
19846
19847    The indirect character is `*' for Unix compatibility, not `@' as DEC
19848 writes it.
19849
19850    The displacement sizing character is ``' (an accent grave) for Unix
19851 compatibility, not `^' as DEC writes it.  The letter preceding ``' may
19852 have either case.  `G' is not understood, but all other letters (`b i l
19853 s w') are understood.
19854
19855    Register names understood are `r0 r1 r2 ... r15 ap fp sp pc'.  Upper
19856 and lower case letters are equivalent.
19857
19858    For instance
19859      tstb *w`$4(r5)
19860
19861    Any expression is permitted in an operand.  Operands are comma
19862 separated.
19863
19864 \1f
19865 File: as.info,  Node: VAX-no,  Next: VAX-Syntax,  Prev: VAX-operands,  Up: Vax-Dependent
19866
19867 9.46.7 Not Supported on VAX
19868 ---------------------------
19869
19870 Vax bit fields can not be assembled with `as'.  Someone can add the
19871 required code if they really need it.
19872
19873 \1f
19874 File: as.info,  Node: VAX-Syntax,  Prev: VAX-no,  Up: Vax-Dependent
19875
19876 9.46.8 VAX Syntax
19877 -----------------
19878
19879 * Menu:
19880
19881 * VAX-Chars::                Special Characters
19882
19883 \1f
19884 File: as.info,  Node: VAX-Chars,  Up: VAX-Syntax
19885
19886 9.46.8.1 Special Characters
19887 ...........................
19888
19889 The presence of a `#' appearing anywhere on a line indicates the start
19890 of a comment that extends to the end of that line.
19891
19892    If a `#' appears as the first character of a line then the whole
19893 line is treated as a comment, but in this case the line can also be a
19894 logical line number directive (*note Comments::) or a preprocessor
19895 control command (*note Preprocessing::).
19896
19897    The `;' character can be used to separate statements on the same
19898 line.
19899
19900 \1f
19901 File: as.info,  Node: V850-Dependent,  Next: XGATE-Dependent,  Prev: TILEPro-Dependent,  Up: Machine Dependencies
19902
19903 9.47 v850 Dependent Features
19904 ============================
19905
19906 * Menu:
19907
19908 * V850 Options::              Options
19909 * V850 Syntax::               Syntax
19910 * V850 Floating Point::       Floating Point
19911 * V850 Directives::           V850 Machine Directives
19912 * V850 Opcodes::              Opcodes
19913
19914 \1f
19915 File: as.info,  Node: V850 Options,  Next: V850 Syntax,  Up: V850-Dependent
19916
19917 9.47.1 Options
19918 --------------
19919
19920 `as' supports the following additional command-line options for the
19921 V850 processor family:
19922
19923 `-wsigned_overflow'
19924      Causes warnings to be produced when signed immediate values
19925      overflow the space available for then within their opcodes.  By
19926      default this option is disabled as it is possible to receive
19927      spurious warnings due to using exact bit patterns as immediate
19928      constants.
19929
19930 `-wunsigned_overflow'
19931      Causes warnings to be produced when unsigned immediate values
19932      overflow the space available for then within their opcodes.  By
19933      default this option is disabled as it is possible to receive
19934      spurious warnings due to using exact bit patterns as immediate
19935      constants.
19936
19937 `-mv850'
19938      Specifies that the assembled code should be marked as being
19939      targeted at the V850 processor.  This allows the linker to detect
19940      attempts to link such code with code assembled for other
19941      processors.
19942
19943 `-mv850e'
19944      Specifies that the assembled code should be marked as being
19945      targeted at the V850E processor.  This allows the linker to detect
19946      attempts to link such code with code assembled for other
19947      processors.
19948
19949 `-mv850e1'
19950      Specifies that the assembled code should be marked as being
19951      targeted at the V850E1 processor.  This allows the linker to
19952      detect attempts to link such code with code assembled for other
19953      processors.
19954
19955 `-mv850any'
19956      Specifies that the assembled code should be marked as being
19957      targeted at the V850 processor but support instructions that are
19958      specific to the extended variants of the process.  This allows the
19959      production of binaries that contain target specific code, but
19960      which are also intended to be used in a generic fashion.  For
19961      example libgcc.a contains generic routines used by the code
19962      produced by GCC for all versions of the v850 architecture,
19963      together with support routines only used by the V850E architecture.
19964
19965 `-mv850e2'
19966      Specifies that the assembled code should be marked as being
19967      targeted at the V850E2 processor.  This allows the linker to
19968      detect attempts to link such code with code assembled for other
19969      processors.
19970
19971 `-mv850e2v3'
19972      Specifies that the assembled code should be marked as being
19973      targeted at the V850E2V3 processor.  This allows the linker to
19974      detect attempts to link such code with code assembled for other
19975      processors.
19976
19977 `-mrelax'
19978      Enables relaxation.  This allows the .longcall and .longjump pseudo
19979      ops to be used in the assembler source code.  These ops label
19980      sections of code which are either a long function call or a long
19981      branch.  The assembler will then flag these sections of code and
19982      the linker will attempt to relax them.
19983
19984
19985 \1f
19986 File: as.info,  Node: V850 Syntax,  Next: V850 Floating Point,  Prev: V850 Options,  Up: V850-Dependent
19987
19988 9.47.2 Syntax
19989 -------------
19990
19991 * Menu:
19992
19993 * V850-Chars::                Special Characters
19994 * V850-Regs::                 Register Names
19995
19996 \1f
19997 File: as.info,  Node: V850-Chars,  Next: V850-Regs,  Up: V850 Syntax
19998
19999 9.47.2.1 Special Characters
20000 ...........................
20001
20002 `#' is the line comment character.  If a `#' appears as the first
20003 character of a line, the whole line is treated as a comment, but in
20004 this case the line can also be a logical line number directive (*note
20005 Comments::) or a preprocessor control command (*note Preprocessing::).
20006
20007    Two dashes (`--') can also be used to start a line comment.
20008
20009    The `;' character can be used to separate statements on the same
20010 line.
20011
20012 \1f
20013 File: as.info,  Node: V850-Regs,  Prev: V850-Chars,  Up: V850 Syntax
20014
20015 9.47.2.2 Register Names
20016 .......................
20017
20018 `as' supports the following names for registers:
20019 `general register 0'
20020      r0, zero
20021
20022 `general register 1'
20023      r1
20024
20025 `general register 2'
20026      r2, hp 
20027
20028 `general register 3'
20029      r3, sp 
20030
20031 `general register 4'
20032      r4, gp 
20033
20034 `general register 5'
20035      r5, tp
20036
20037 `general register 6'
20038      r6
20039
20040 `general register 7'
20041      r7
20042
20043 `general register 8'
20044      r8
20045
20046 `general register 9'
20047      r9
20048
20049 `general register 10'
20050      r10
20051
20052 `general register 11'
20053      r11
20054
20055 `general register 12'
20056      r12
20057
20058 `general register 13'
20059      r13
20060
20061 `general register 14'
20062      r14
20063
20064 `general register 15'
20065      r15
20066
20067 `general register 16'
20068      r16
20069
20070 `general register 17'
20071      r17
20072
20073 `general register 18'
20074      r18
20075
20076 `general register 19'
20077      r19
20078
20079 `general register 20'
20080      r20
20081
20082 `general register 21'
20083      r21
20084
20085 `general register 22'
20086      r22
20087
20088 `general register 23'
20089      r23
20090
20091 `general register 24'
20092      r24
20093
20094 `general register 25'
20095      r25
20096
20097 `general register 26'
20098      r26
20099
20100 `general register 27'
20101      r27
20102
20103 `general register 28'
20104      r28
20105
20106 `general register 29'
20107      r29 
20108
20109 `general register 30'
20110      r30, ep 
20111
20112 `general register 31'
20113      r31, lp 
20114
20115 `system register 0'
20116      eipc 
20117
20118 `system register 1'
20119      eipsw 
20120
20121 `system register 2'
20122      fepc 
20123
20124 `system register 3'
20125      fepsw 
20126
20127 `system register 4'
20128      ecr 
20129
20130 `system register 5'
20131      psw 
20132
20133 `system register 16'
20134      ctpc 
20135
20136 `system register 17'
20137      ctpsw 
20138
20139 `system register 18'
20140      dbpc 
20141
20142 `system register 19'
20143      dbpsw 
20144
20145 `system register 20'
20146      ctbp
20147
20148 \1f
20149 File: as.info,  Node: V850 Floating Point,  Next: V850 Directives,  Prev: V850 Syntax,  Up: V850-Dependent
20150
20151 9.47.3 Floating Point
20152 ---------------------
20153
20154 The V850 family uses IEEE floating-point numbers.
20155
20156 \1f
20157 File: as.info,  Node: V850 Directives,  Next: V850 Opcodes,  Prev: V850 Floating Point,  Up: V850-Dependent
20158
20159 9.47.4 V850 Machine Directives
20160 ------------------------------
20161
20162 `.offset <EXPRESSION>'
20163      Moves the offset into the current section to the specified amount.
20164
20165 `.section "name", <type>'
20166      This is an extension to the standard .section directive.  It sets
20167      the current section to be <type> and creates an alias for this
20168      section called "name".
20169
20170 `.v850'
20171      Specifies that the assembled code should be marked as being
20172      targeted at the V850 processor.  This allows the linker to detect
20173      attempts to link such code with code assembled for other
20174      processors.
20175
20176 `.v850e'
20177      Specifies that the assembled code should be marked as being
20178      targeted at the V850E processor.  This allows the linker to detect
20179      attempts to link such code with code assembled for other
20180      processors.
20181
20182 `.v850e1'
20183      Specifies that the assembled code should be marked as being
20184      targeted at the V850E1 processor.  This allows the linker to
20185      detect attempts to link such code with code assembled for other
20186      processors.
20187
20188 `.v850e2'
20189      Specifies that the assembled code should be marked as being
20190      targeted at the V850E2 processor.  This allows the linker to
20191      detect attempts to link such code with code assembled for other
20192      processors.
20193
20194 `.v850e2v3'
20195      Specifies that the assembled code should be marked as being
20196      targeted at the V850E2V3 processor.  This allows the linker to
20197      detect attempts to link such code with code assembled for other
20198      processors.
20199
20200
20201 \1f
20202 File: as.info,  Node: V850 Opcodes,  Prev: V850 Directives,  Up: V850-Dependent
20203
20204 9.47.5 Opcodes
20205 --------------
20206
20207 `as' implements all the standard V850 opcodes.
20208
20209    `as' also implements the following pseudo ops:
20210
20211 `hi0()'
20212      Computes the higher 16 bits of the given expression and stores it
20213      into the immediate operand field of the given instruction.  For
20214      example:
20215
20216      `mulhi hi0(here - there), r5, r6'
20217
20218      computes the difference between the address of labels 'here' and
20219      'there', takes the upper 16 bits of this difference, shifts it
20220      down 16 bits and then multiplies it by the lower 16 bits in
20221      register 5, putting the result into register 6.
20222
20223 `lo()'
20224      Computes the lower 16 bits of the given expression and stores it
20225      into the immediate operand field of the given instruction.  For
20226      example:
20227
20228      `addi lo(here - there), r5, r6'
20229
20230      computes the difference between the address of labels 'here' and
20231      'there', takes the lower 16 bits of this difference and adds it to
20232      register 5, putting the result into register 6.
20233
20234 `hi()'
20235      Computes the higher 16 bits of the given expression and then adds
20236      the value of the most significant bit of the lower 16 bits of the
20237      expression and stores the result into the immediate operand field
20238      of the given instruction.  For example the following code can be
20239      used to compute the address of the label 'here' and store it into
20240      register 6:
20241
20242      `movhi hi(here), r0, r6'     `movea lo(here), r6, r6'
20243
20244      The reason for this special behaviour is that movea performs a sign
20245      extension on its immediate operand.  So for example if the address
20246      of 'here' was 0xFFFFFFFF then without the special behaviour of the
20247      hi() pseudo-op the movhi instruction would put 0xFFFF0000 into r6,
20248      then the movea instruction would takes its immediate operand,
20249      0xFFFF, sign extend it to 32 bits, 0xFFFFFFFF, and then add it
20250      into r6 giving 0xFFFEFFFF which is wrong (the fifth nibble is E).
20251      With the hi() pseudo op adding in the top bit of the lo() pseudo
20252      op, the movhi instruction actually stores 0 into r6 (0xFFFF + 1 =
20253      0x0000), so that the movea instruction stores 0xFFFFFFFF into r6 -
20254      the right value.
20255
20256 `hilo()'
20257      Computes the 32 bit value of the given expression and stores it
20258      into the immediate operand field of the given instruction (which
20259      must be a mov instruction).  For example:
20260
20261      `mov hilo(here), r6'
20262
20263      computes the absolute address of label 'here' and puts the result
20264      into register 6.
20265
20266 `sdaoff()'
20267      Computes the offset of the named variable from the start of the
20268      Small Data Area (whoes address is held in register 4, the GP
20269      register) and stores the result as a 16 bit signed value in the
20270      immediate operand field of the given instruction.  For example:
20271
20272      `ld.w sdaoff(_a_variable)[gp],r6'
20273
20274      loads the contents of the location pointed to by the label
20275      '_a_variable' into register 6, provided that the label is located
20276      somewhere within +/- 32K of the address held in the GP register.
20277      [Note the linker assumes that the GP register contains a fixed
20278      address set to the address of the label called '__gp'.  This can
20279      either be set up automatically by the linker, or specifically set
20280      by using the `--defsym __gp=<value>' command line option].
20281
20282 `tdaoff()'
20283      Computes the offset of the named variable from the start of the
20284      Tiny Data Area (whoes address is held in register 30, the EP
20285      register) and stores the result as a 4,5, 7 or 8 bit unsigned
20286      value in the immediate operand field of the given instruction.
20287      For example:
20288
20289      `sld.w tdaoff(_a_variable)[ep],r6'
20290
20291      loads the contents of the location pointed to by the label
20292      '_a_variable' into register 6, provided that the label is located
20293      somewhere within +256 bytes of the address held in the EP
20294      register.  [Note the linker assumes that the EP register contains
20295      a fixed address set to the address of the label called '__ep'.
20296      This can either be set up automatically by the linker, or
20297      specifically set by using the `--defsym __ep=<value>' command line
20298      option].
20299
20300 `zdaoff()'
20301      Computes the offset of the named variable from address 0 and
20302      stores the result as a 16 bit signed value in the immediate
20303      operand field of the given instruction.  For example:
20304
20305      `movea zdaoff(_a_variable),zero,r6'
20306
20307      puts the address of the label '_a_variable' into register 6,
20308      assuming that the label is somewhere within the first 32K of
20309      memory.  (Strictly speaking it also possible to access the last
20310      32K of memory as well, as the offsets are signed).
20311
20312 `ctoff()'
20313      Computes the offset of the named variable from the start of the
20314      Call Table Area (whoes address is helg in system register 20, the
20315      CTBP register) and stores the result a 6 or 16 bit unsigned value
20316      in the immediate field of then given instruction or piece of data.
20317      For example:
20318
20319      `callt ctoff(table_func1)'
20320
20321      will put the call the function whoes address is held in the call
20322      table at the location labeled 'table_func1'.
20323
20324 `.longcall `name''
20325      Indicates that the following sequence of instructions is a long
20326      call to function `name'.  The linker will attempt to shorten this
20327      call sequence if `name' is within a 22bit offset of the call.  Only
20328      valid if the `-mrelax' command line switch has been enabled.
20329
20330 `.longjump `name''
20331      Indicates that the following sequence of instructions is a long
20332      jump to label `name'.  The linker will attempt to shorten this code
20333      sequence if `name' is within a 22bit offset of the jump.  Only
20334      valid if the `-mrelax' command line switch has been enabled.
20335
20336
20337    For information on the V850 instruction set, see `V850 Family
20338 32-/16-Bit single-Chip Microcontroller Architecture Manual' from NEC.
20339 Ltd.
20340
20341 \1f
20342 File: as.info,  Node: XGATE-Dependent,  Next: XSTORMY16-Dependent,  Prev: V850-Dependent,  Up: Machine Dependencies
20343
20344 9.48 XGATE Dependent Features
20345 =============================
20346
20347 * Menu:
20348
20349 * XGATE-Opts::                   XGATE Options
20350 * XGATE-Syntax::                 Syntax
20351 * XGATE-Directives::             Assembler Directives
20352 * XGATE-Float::                  Floating Point
20353 * XGATE-opcodes::                Opcodes
20354
20355 \1f
20356 File: as.info,  Node: XGATE-Opts,  Next: XGATE-Syntax,  Up: XGATE-Dependent
20357
20358 9.48.1 XGATE Options
20359 --------------------
20360
20361 The Freescale XGATE version of `as' has a few machine dependent options.
20362
20363 `-mshort'
20364      This option controls the ABI and indicates to use a 16-bit integer
20365      ABI.  It has no effect on the assembled instructions.  This is the
20366      default.
20367
20368 `-mlong'
20369      This option controls the ABI and indicates to use a 32-bit integer
20370      ABI.
20371
20372 `-mshort-double'
20373      This option controls the ABI and indicates to use a 32-bit float
20374      ABI.  This is the default.
20375
20376 `-mlong-double'
20377      This option controls the ABI and indicates to use a 64-bit float
20378      ABI.
20379
20380 `--print-insn-syntax'
20381      You can use the `--print-insn-syntax' option to obtain the syntax
20382      description of the instruction when an error is detected.
20383
20384 `--print-opcodes'
20385      The `--print-opcodes' option prints the list of all the
20386      instructions with their syntax. Once the list is printed `as'
20387      exits.
20388
20389
20390 \1f
20391 File: as.info,  Node: XGATE-Syntax,  Next: XGATE-Directives,  Prev: XGATE-Opts,  Up: XGATE-Dependent
20392
20393 9.48.2 Syntax
20394 -------------
20395
20396 In XGATE RISC syntax, the instruction name comes first and it may be
20397 followed by up to three operands. Operands are separated by commas
20398 (`,'). `as' will complain if too many operands are specified for a
20399 given instruction. The same will happen if you specified too few
20400 operands.
20401
20402      nop
20403      ldl  #23
20404      CMP  R1, R2
20405
20406    The presence of a `;' character or a `!' character anywhere on a
20407 line indicates the start of a comment that extends to the end of that
20408 line.
20409
20410    A `*' or a `#' character at the start of a line also introduces a
20411 line comment, but these characters do not work elsewhere on the line.
20412 If the first character of the line is a `#' then as well as starting a
20413 comment, the line could also be logical line number directive (*note
20414 Comments::) or a preprocessor control command (*note Preprocessing::).
20415
20416    The XGATE assembler does not currently support a line separator
20417 character.
20418
20419    The following addressing modes are understood for XGATE:
20420 "Inherent"
20421      `'
20422
20423 "Immediate 3 Bit Wide"
20424      `#NUMBER'
20425
20426 "Immediate 4 Bit Wide"
20427      `#NUMBER'
20428
20429 "Immediate 8 Bit Wide"
20430      `#NUMBER'
20431
20432 "Monadic Addressing"
20433      `REG'
20434
20435 "Dyadic Addressing"
20436      `REG, REG'
20437
20438 "Triadic Addressing"
20439      `REG, REG, REG'
20440
20441 "Relative Addressing 9 Bit Wide"
20442      `*SYMBOL'
20443
20444 "Relative Addressing 10 Bit Wide"
20445      `*SYMBOL'
20446
20447 "Index Register plus Immediate Offset"
20448      `REG, (REG, #NUMBER)'
20449
20450 "Index Register plus Register Offset"
20451      `REG, REG, REG'
20452
20453 "Index Register plus Register Offset with Post-increment"
20454      `REG, REG, REG+'
20455
20456 "Index Register plus Register Offset with Pre-decrement"
20457      `REG, REG, -REG'
20458
20459      The register can be either `R0', `R1', `R2', `R3', `R4', `R5',
20460      `R6' or `R7'.
20461
20462
20463    Convience macro opcodes to deal with 16-bit values have been added.
20464
20465 "Immediate 16 Bit Wide"
20466      `#NUMBER', or `*SYMBOL'
20467
20468      For example:
20469
20470           ldw R1, #1024
20471           ldw R3, timer
20472           ldw R1, (R1, #0)
20473           COM R1
20474           stw R2, (R1, #0)
20475
20476 \1f
20477 File: as.info,  Node: XGATE-Directives,  Next: XGATE-Float,  Prev: XGATE-Syntax,  Up: XGATE-Dependent
20478
20479 9.48.3 Assembler Directives
20480 ---------------------------
20481
20482 The XGATE version of `as' have the following specific assembler
20483 directives:
20484
20485 \1f
20486 File: as.info,  Node: XGATE-Float,  Next: XGATE-opcodes,  Prev: XGATE-Directives,  Up: XGATE-Dependent
20487
20488 9.48.4 Floating Point
20489 ---------------------
20490
20491 Packed decimal (P) format floating literals are not supported(yet).
20492
20493    The floating point formats generated by directives are these.
20494
20495 `.float'
20496      `Single' precision floating point constants.
20497
20498 `.double'
20499      `Double' precision floating point constants.
20500
20501 `.extend'
20502 `.ldouble'
20503      `Extended' precision (`long double') floating point constants.
20504
20505 \1f
20506 File: as.info,  Node: XGATE-opcodes,  Prev: XGATE-Float,  Up: XGATE-Dependent
20507
20508 9.48.5 Opcodes
20509 --------------
20510
20511 \1f
20512 File: as.info,  Node: XSTORMY16-Dependent,  Next: Xtensa-Dependent,  Prev: XGATE-Dependent,  Up: Machine Dependencies
20513
20514 9.49 XStormy16 Dependent Features
20515 =================================
20516
20517 * Menu:
20518
20519 * XStormy16 Syntax::               Syntax
20520 * XStormy16 Directives::           Machine Directives
20521 * XStormy16 Opcodes::              Pseudo-Opcodes
20522
20523 \1f
20524 File: as.info,  Node: XStormy16 Syntax,  Next: XStormy16 Directives,  Up: XSTORMY16-Dependent
20525
20526 9.49.1 Syntax
20527 -------------
20528
20529 * Menu:
20530
20531 * XStormy16-Chars::                Special Characters
20532
20533 \1f
20534 File: as.info,  Node: XStormy16-Chars,  Up: XStormy16 Syntax
20535
20536 9.49.1.1 Special Characters
20537 ...........................
20538
20539 `#' is the line comment character.  If a `#' appears as the first
20540 character of a line, the whole line is treated as a comment, but in
20541 this case the line can also be a logical line number directive (*note
20542 Comments::) or a preprocessor control command (*note Preprocessing::).
20543
20544    A semicolon (`;') can be used to start a comment that extends from
20545 wherever the character appears on the line up to the end of the line.
20546
20547    The `|' character can be used to separate statements on the same
20548 line.
20549
20550 \1f
20551 File: as.info,  Node: XStormy16 Directives,  Next: XStormy16 Opcodes,  Prev: XStormy16 Syntax,  Up: XSTORMY16-Dependent
20552
20553 9.49.2 XStormy16 Machine Directives
20554 -----------------------------------
20555
20556 `.16bit_pointers'
20557      Like the `--16bit-pointers' command line option this directive
20558      indicates that the assembly code makes use of 16-bit pointers.
20559
20560 `.32bit_pointers'
20561      Like the `--32bit-pointers' command line option this directive
20562      indicates that the assembly code makes use of 32-bit pointers.
20563
20564 `.no_pointers'
20565      Like the `--no-pointers' command line option this directive
20566      indicates that the assembly code does not makes use pointers.
20567
20568
20569 \1f
20570 File: as.info,  Node: XStormy16 Opcodes,  Prev: XStormy16 Directives,  Up: XSTORMY16-Dependent
20571
20572 9.49.3 XStormy16 Pseudo-Opcodes
20573 -------------------------------
20574
20575 `as' implements all the standard XStormy16 opcodes.
20576
20577    `as' also implements the following pseudo ops:
20578
20579 `@lo()'
20580      Computes the lower 16 bits of the given expression and stores it
20581      into the immediate operand field of the given instruction.  For
20582      example:
20583
20584      `add r6, @lo(here - there)'
20585
20586      computes the difference between the address of labels 'here' and
20587      'there', takes the lower 16 bits of this difference and adds it to
20588      register 6.
20589
20590 `@hi()'
20591      Computes the higher 16 bits of the given expression and stores it
20592      into the immediate operand field of the given instruction.  For
20593      example:
20594
20595      `addc r7, @hi(here - there)'
20596
20597      computes the difference between the address of labels 'here' and
20598      'there', takes the upper 16 bits of this difference, shifts it
20599      down 16 bits and then adds it, along with the carry bit, to the
20600      value in register 7.
20601
20602
20603 \1f
20604 File: as.info,  Node: Xtensa-Dependent,  Next: Z80-Dependent,  Prev: XSTORMY16-Dependent,  Up: Machine Dependencies
20605
20606 9.50 Xtensa Dependent Features
20607 ==============================
20608
20609    This chapter covers features of the GNU assembler that are specific
20610 to the Xtensa architecture.  For details about the Xtensa instruction
20611 set, please consult the `Xtensa Instruction Set Architecture (ISA)
20612 Reference Manual'.
20613
20614 * Menu:
20615
20616 * Xtensa Options::              Command-line Options.
20617 * Xtensa Syntax::               Assembler Syntax for Xtensa Processors.
20618 * Xtensa Optimizations::        Assembler Optimizations.
20619 * Xtensa Relaxation::           Other Automatic Transformations.
20620 * Xtensa Directives::           Directives for Xtensa Processors.
20621
20622 \1f
20623 File: as.info,  Node: Xtensa Options,  Next: Xtensa Syntax,  Up: Xtensa-Dependent
20624
20625 9.50.1 Command Line Options
20626 ---------------------------
20627
20628 `--text-section-literals | --no-text-section-literals'
20629      Control the treatment of literal pools.  The default is
20630      `--no-text-section-literals', which places literals in separate
20631      sections in the output file.  This allows the literal pool to be
20632      placed in a data RAM/ROM.  With `--text-section-literals', the
20633      literals are interspersed in the text section in order to keep
20634      them as close as possible to their references.  This may be
20635      necessary for large assembly files, where the literals would
20636      otherwise be out of range of the `L32R' instructions in the text
20637      section.  These options only affect literals referenced via
20638      PC-relative `L32R' instructions; literals for absolute mode `L32R'
20639      instructions are handled separately.  *Note literal: Literal
20640      Directive.
20641
20642 `--absolute-literals | --no-absolute-literals'
20643      Indicate to the assembler whether `L32R' instructions use absolute
20644      or PC-relative addressing.  If the processor includes the absolute
20645      addressing option, the default is to use absolute `L32R'
20646      relocations.  Otherwise, only the PC-relative `L32R' relocations
20647      can be used.
20648
20649 `--target-align | --no-target-align'
20650      Enable or disable automatic alignment to reduce branch penalties
20651      at some expense in code size.  *Note Automatic Instruction
20652      Alignment: Xtensa Automatic Alignment.  This optimization is
20653      enabled by default.  Note that the assembler will always align
20654      instructions like `LOOP' that have fixed alignment requirements.
20655
20656 `--longcalls | --no-longcalls'
20657      Enable or disable transformation of call instructions to allow
20658      calls across a greater range of addresses.  *Note Function Call
20659      Relaxation: Xtensa Call Relaxation.  This option should be used
20660      when call targets can potentially be out of range.  It may degrade
20661      both code size and performance, but the linker can generally
20662      optimize away the unnecessary overhead when a call ends up within
20663      range.  The default is `--no-longcalls'.
20664
20665 `--transform | --no-transform'
20666      Enable or disable all assembler transformations of Xtensa
20667      instructions, including both relaxation and optimization.  The
20668      default is `--transform'; `--no-transform' should only be used in
20669      the rare cases when the instructions must be exactly as specified
20670      in the assembly source.  Using `--no-transform' causes out of range
20671      instruction operands to be errors.
20672
20673 `--rename-section OLDNAME=NEWNAME'
20674      Rename the OLDNAME section to NEWNAME.  This option can be used
20675      multiple times to rename multiple sections.
20676
20677 \1f
20678 File: as.info,  Node: Xtensa Syntax,  Next: Xtensa Optimizations,  Prev: Xtensa Options,  Up: Xtensa-Dependent
20679
20680 9.50.2 Assembler Syntax
20681 -----------------------
20682
20683 Block comments are delimited by `/*' and `*/'.  End of line comments
20684 may be introduced with either `#' or `//'.
20685
20686    If a `#' appears as the first character of a line then the whole
20687 line is treated as a comment, but in this case the line could also be a
20688 logical line number directive (*note Comments::) or a preprocessor
20689 control command (*note Preprocessing::).
20690
20691    Instructions consist of a leading opcode or macro name followed by
20692 whitespace and an optional comma-separated list of operands:
20693
20694      OPCODE [OPERAND, ...]
20695
20696    Instructions must be separated by a newline or semicolon (`;').
20697
20698    FLIX instructions, which bundle multiple opcodes together in a single
20699 instruction, are specified by enclosing the bundled opcodes inside
20700 braces:
20701
20702      {
20703      [FORMAT]
20704      OPCODE0 [OPERANDS]
20705      OPCODE1 [OPERANDS]
20706      OPCODE2 [OPERANDS]
20707      ...
20708      }
20709
20710    The opcodes in a FLIX instruction are listed in the same order as the
20711 corresponding instruction slots in the TIE format declaration.
20712 Directives and labels are not allowed inside the braces of a FLIX
20713 instruction.  A particular TIE format name can optionally be specified
20714 immediately after the opening brace, but this is usually unnecessary.
20715 The assembler will automatically search for a format that can encode the
20716 specified opcodes, so the format name need only be specified in rare
20717 cases where there is more than one applicable format and where it
20718 matters which of those formats is used.  A FLIX instruction can also be
20719 specified on a single line by separating the opcodes with semicolons:
20720
20721      { [FORMAT;] OPCODE0 [OPERANDS]; OPCODE1 [OPERANDS]; OPCODE2 [OPERANDS]; ... }
20722
20723    If an opcode can only be encoded in a FLIX instruction but is not
20724 specified as part of a FLIX bundle, the assembler will choose the
20725 smallest format where the opcode can be encoded and will fill unused
20726 instruction slots with no-ops.
20727
20728 * Menu:
20729
20730 * Xtensa Opcodes::              Opcode Naming Conventions.
20731 * Xtensa Registers::            Register Naming.
20732
20733 \1f
20734 File: as.info,  Node: Xtensa Opcodes,  Next: Xtensa Registers,  Up: Xtensa Syntax
20735
20736 9.50.2.1 Opcode Names
20737 .....................
20738
20739 See the `Xtensa Instruction Set Architecture (ISA) Reference Manual'
20740 for a complete list of opcodes and descriptions of their semantics.
20741
20742    If an opcode name is prefixed with an underscore character (`_'),
20743 `as' will not transform that instruction in any way.  The underscore
20744 prefix disables both optimization (*note Xtensa Optimizations: Xtensa
20745 Optimizations.) and relaxation (*note Xtensa Relaxation: Xtensa
20746 Relaxation.) for that particular instruction.  Only use the underscore
20747 prefix when it is essential to select the exact opcode produced by the
20748 assembler.  Using this feature unnecessarily makes the code less
20749 efficient by disabling assembler optimization and less flexible by
20750 disabling relaxation.
20751
20752    Note that this special handling of underscore prefixes only applies
20753 to Xtensa opcodes, not to either built-in macros or user-defined macros.
20754 When an underscore prefix is used with a macro (e.g., `_MOV'), it
20755 refers to a different macro.  The assembler generally provides built-in
20756 macros both with and without the underscore prefix, where the underscore
20757 versions behave as if the underscore carries through to the instructions
20758 in the macros.  For example, `_MOV' may expand to `_MOV.N'.
20759
20760    The underscore prefix only applies to individual instructions, not to
20761 series of instructions.  For example, if a series of instructions have
20762 underscore prefixes, the assembler will not transform the individual
20763 instructions, but it may insert other instructions between them (e.g.,
20764 to align a `LOOP' instruction).  To prevent the assembler from
20765 modifying a series of instructions as a whole, use the `no-transform'
20766 directive.  *Note transform: Transform Directive.
20767
20768 \1f
20769 File: as.info,  Node: Xtensa Registers,  Prev: Xtensa Opcodes,  Up: Xtensa Syntax
20770
20771 9.50.2.2 Register Names
20772 .......................
20773
20774 The assembly syntax for a register file entry is the "short" name for a
20775 TIE register file followed by the index into that register file.  For
20776 example, the general-purpose `AR' register file has a short name of
20777 `a', so these registers are named `a0'...`a15'.  As a special feature,
20778 `sp' is also supported as a synonym for `a1'.  Additional registers may
20779 be added by processor configuration options and by designer-defined TIE
20780 extensions.  An initial `$' character is optional in all register names.
20781
20782 \1f
20783 File: as.info,  Node: Xtensa Optimizations,  Next: Xtensa Relaxation,  Prev: Xtensa Syntax,  Up: Xtensa-Dependent
20784
20785 9.50.3 Xtensa Optimizations
20786 ---------------------------
20787
20788 The optimizations currently supported by `as' are generation of density
20789 instructions where appropriate and automatic branch target alignment.
20790
20791 * Menu:
20792
20793 * Density Instructions::        Using Density Instructions.
20794 * Xtensa Automatic Alignment::  Automatic Instruction Alignment.
20795
20796 \1f
20797 File: as.info,  Node: Density Instructions,  Next: Xtensa Automatic Alignment,  Up: Xtensa Optimizations
20798
20799 9.50.3.1 Using Density Instructions
20800 ...................................
20801
20802 The Xtensa instruction set has a code density option that provides
20803 16-bit versions of some of the most commonly used opcodes.  Use of these
20804 opcodes can significantly reduce code size.  When possible, the
20805 assembler automatically translates instructions from the core Xtensa
20806 instruction set into equivalent instructions from the Xtensa code
20807 density option.  This translation can be disabled by using underscore
20808 prefixes (*note Opcode Names: Xtensa Opcodes.), by using the
20809 `--no-transform' command-line option (*note Command Line Options:
20810 Xtensa Options.), or by using the `no-transform' directive (*note
20811 transform: Transform Directive.).
20812
20813    It is a good idea _not_ to use the density instructions directly.
20814 The assembler will automatically select dense instructions where
20815 possible.  If you later need to use an Xtensa processor without the code
20816 density option, the same assembly code will then work without
20817 modification.
20818
20819 \1f
20820 File: as.info,  Node: Xtensa Automatic Alignment,  Prev: Density Instructions,  Up: Xtensa Optimizations
20821
20822 9.50.3.2 Automatic Instruction Alignment
20823 ........................................
20824
20825 The Xtensa assembler will automatically align certain instructions, both
20826 to optimize performance and to satisfy architectural requirements.
20827
20828    As an optimization to improve performance, the assembler attempts to
20829 align branch targets so they do not cross instruction fetch boundaries.
20830 (Xtensa processors can be configured with either 32-bit or 64-bit
20831 instruction fetch widths.)  An instruction immediately following a call
20832 is treated as a branch target in this context, because it will be the
20833 target of a return from the call.  This alignment has the potential to
20834 reduce branch penalties at some expense in code size.  This
20835 optimization is enabled by default.  You can disable it with the
20836 `--no-target-align' command-line option (*note Command Line Options:
20837 Xtensa Options.).
20838
20839    The target alignment optimization is done without adding instructions
20840 that could increase the execution time of the program.  If there are
20841 density instructions in the code preceding a target, the assembler can
20842 change the target alignment by widening some of those instructions to
20843 the equivalent 24-bit instructions.  Extra bytes of padding can be
20844 inserted immediately following unconditional jump and return
20845 instructions.  This approach is usually successful in aligning many,
20846 but not all, branch targets.
20847
20848    The `LOOP' family of instructions must be aligned such that the
20849 first instruction in the loop body does not cross an instruction fetch
20850 boundary (e.g., with a 32-bit fetch width, a `LOOP' instruction must be
20851 on either a 1 or 2 mod 4 byte boundary).  The assembler knows about
20852 this restriction and inserts the minimal number of 2 or 3 byte no-op
20853 instructions to satisfy it.  When no-op instructions are added, any
20854 label immediately preceding the original loop will be moved in order to
20855 refer to the loop instruction, not the newly generated no-op
20856 instruction.  To preserve binary compatibility across processors with
20857 different fetch widths, the assembler conservatively assumes a 32-bit
20858 fetch width when aligning `LOOP' instructions (except if the first
20859 instruction in the loop is a 64-bit instruction).
20860
20861    Previous versions of the assembler automatically aligned `ENTRY'
20862 instructions to 4-byte boundaries, but that alignment is now the
20863 programmer's responsibility.
20864
20865 \1f
20866 File: as.info,  Node: Xtensa Relaxation,  Next: Xtensa Directives,  Prev: Xtensa Optimizations,  Up: Xtensa-Dependent
20867
20868 9.50.4 Xtensa Relaxation
20869 ------------------------
20870
20871 When an instruction operand is outside the range allowed for that
20872 particular instruction field, `as' can transform the code to use a
20873 functionally-equivalent instruction or sequence of instructions.  This
20874 process is known as "relaxation".  This is typically done for branch
20875 instructions because the distance of the branch targets is not known
20876 until assembly-time.  The Xtensa assembler offers branch relaxation and
20877 also extends this concept to function calls, `MOVI' instructions and
20878 other instructions with immediate fields.
20879
20880 * Menu:
20881
20882 * Xtensa Branch Relaxation::        Relaxation of Branches.
20883 * Xtensa Call Relaxation::          Relaxation of Function Calls.
20884 * Xtensa Immediate Relaxation::     Relaxation of other Immediate Fields.
20885
20886 \1f
20887 File: as.info,  Node: Xtensa Branch Relaxation,  Next: Xtensa Call Relaxation,  Up: Xtensa Relaxation
20888
20889 9.50.4.1 Conditional Branch Relaxation
20890 ......................................
20891
20892 When the target of a branch is too far away from the branch itself,
20893 i.e., when the offset from the branch to the target is too large to fit
20894 in the immediate field of the branch instruction, it may be necessary to
20895 replace the branch with a branch around a jump.  For example,
20896
20897          beqz    a2, L
20898
20899    may result in:
20900
20901          bnez.n  a2, M
20902          j L
20903      M:
20904
20905    (The `BNEZ.N' instruction would be used in this example only if the
20906 density option is available.  Otherwise, `BNEZ' would be used.)
20907
20908    This relaxation works well because the unconditional jump instruction
20909 has a much larger offset range than the various conditional branches.
20910 However, an error will occur if a branch target is beyond the range of a
20911 jump instruction.  `as' cannot relax unconditional jumps.  Similarly,
20912 an error will occur if the original input contains an unconditional
20913 jump to a target that is out of range.
20914
20915    Branch relaxation is enabled by default.  It can be disabled by using
20916 underscore prefixes (*note Opcode Names: Xtensa Opcodes.), the
20917 `--no-transform' command-line option (*note Command Line Options:
20918 Xtensa Options.), or the `no-transform' directive (*note transform:
20919 Transform Directive.).
20920
20921 \1f
20922 File: as.info,  Node: Xtensa Call Relaxation,  Next: Xtensa Immediate Relaxation,  Prev: Xtensa Branch Relaxation,  Up: Xtensa Relaxation
20923
20924 9.50.4.2 Function Call Relaxation
20925 .................................
20926
20927 Function calls may require relaxation because the Xtensa immediate call
20928 instructions (`CALL0', `CALL4', `CALL8' and `CALL12') provide a
20929 PC-relative offset of only 512 Kbytes in either direction.  For larger
20930 programs, it may be necessary to use indirect calls (`CALLX0',
20931 `CALLX4', `CALLX8' and `CALLX12') where the target address is specified
20932 in a register.  The Xtensa assembler can automatically relax immediate
20933 call instructions into indirect call instructions.  This relaxation is
20934 done by loading the address of the called function into the callee's
20935 return address register and then using a `CALLX' instruction.  So, for
20936 example:
20937
20938          call8 func
20939
20940    might be relaxed to:
20941
20942          .literal .L1, func
20943          l32r    a8, .L1
20944          callx8  a8
20945
20946    Because the addresses of targets of function calls are not generally
20947 known until link-time, the assembler must assume the worst and relax all
20948 the calls to functions in other source files, not just those that really
20949 will be out of range.  The linker can recognize calls that were
20950 unnecessarily relaxed, and it will remove the overhead introduced by the
20951 assembler for those cases where direct calls are sufficient.
20952
20953    Call relaxation is disabled by default because it can have a negative
20954 effect on both code size and performance, although the linker can
20955 usually eliminate the unnecessary overhead.  If a program is too large
20956 and some of the calls are out of range, function call relaxation can be
20957 enabled using the `--longcalls' command-line option or the `longcalls'
20958 directive (*note longcalls: Longcalls Directive.).
20959
20960 \1f
20961 File: as.info,  Node: Xtensa Immediate Relaxation,  Prev: Xtensa Call Relaxation,  Up: Xtensa Relaxation
20962
20963 9.50.4.3 Other Immediate Field Relaxation
20964 .........................................
20965
20966 The assembler normally performs the following other relaxations.  They
20967 can be disabled by using underscore prefixes (*note Opcode Names:
20968 Xtensa Opcodes.), the `--no-transform' command-line option (*note
20969 Command Line Options: Xtensa Options.), or the `no-transform' directive
20970 (*note transform: Transform Directive.).
20971
20972    The `MOVI' machine instruction can only materialize values in the
20973 range from -2048 to 2047.  Values outside this range are best
20974 materialized with `L32R' instructions.  Thus:
20975
20976          movi a0, 100000
20977
20978    is assembled into the following machine code:
20979
20980          .literal .L1, 100000
20981          l32r a0, .L1
20982
20983    The `L8UI' machine instruction can only be used with immediate
20984 offsets in the range from 0 to 255. The `L16SI' and `L16UI' machine
20985 instructions can only be used with offsets from 0 to 510.  The `L32I'
20986 machine instruction can only be used with offsets from 0 to 1020.  A
20987 load offset outside these ranges can be materialized with an `L32R'
20988 instruction if the destination register of the load is different than
20989 the source address register.  For example:
20990
20991          l32i a1, a0, 2040
20992
20993    is translated to:
20994
20995          .literal .L1, 2040
20996          l32r a1, .L1
20997          add a1, a0, a1
20998          l32i a1, a1, 0
20999
21000 If the load destination and source address register are the same, an
21001 out-of-range offset causes an error.
21002
21003    The Xtensa `ADDI' instruction only allows immediate operands in the
21004 range from -128 to 127.  There are a number of alternate instruction
21005 sequences for the `ADDI' operation.  First, if the immediate is 0, the
21006 `ADDI' will be turned into a `MOV.N' instruction (or the equivalent
21007 `OR' instruction if the code density option is not available).  If the
21008 `ADDI' immediate is outside of the range -128 to 127, but inside the
21009 range -32896 to 32639, an `ADDMI' instruction or `ADDMI'/`ADDI'
21010 sequence will be used.  Finally, if the immediate is outside of this
21011 range and a free register is available, an `L32R'/`ADD' sequence will
21012 be used with a literal allocated from the literal pool.
21013
21014    For example:
21015
21016          addi    a5, a6, 0
21017          addi    a5, a6, 512
21018          addi    a5, a6, 513
21019          addi    a5, a6, 50000
21020
21021    is assembled into the following:
21022
21023          .literal .L1, 50000
21024          mov.n   a5, a6
21025          addmi   a5, a6, 0x200
21026          addmi   a5, a6, 0x200
21027          addi    a5, a5, 1
21028          l32r    a5, .L1
21029          add     a5, a6, a5
21030
21031 \1f
21032 File: as.info,  Node: Xtensa Directives,  Prev: Xtensa Relaxation,  Up: Xtensa-Dependent
21033
21034 9.50.5 Directives
21035 -----------------
21036
21037 The Xtensa assembler supports a region-based directive syntax:
21038
21039          .begin DIRECTIVE [OPTIONS]
21040          ...
21041          .end DIRECTIVE
21042
21043    All the Xtensa-specific directives that apply to a region of code use
21044 this syntax.
21045
21046    The directive applies to code between the `.begin' and the `.end'.
21047 The state of the option after the `.end' reverts to what it was before
21048 the `.begin'.  A nested `.begin'/`.end' region can further change the
21049 state of the directive without having to be aware of its outer state.
21050 For example, consider:
21051
21052          .begin no-transform
21053      L:  add a0, a1, a2
21054          .begin transform
21055      M:  add a0, a1, a2
21056          .end transform
21057      N:  add a0, a1, a2
21058          .end no-transform
21059
21060    The `ADD' opcodes at `L' and `N' in the outer `no-transform' region
21061 both result in `ADD' machine instructions, but the assembler selects an
21062 `ADD.N' instruction for the `ADD' at `M' in the inner `transform'
21063 region.
21064
21065    The advantage of this style is that it works well inside macros
21066 which can preserve the context of their callers.
21067
21068    The following directives are available:
21069
21070 * Menu:
21071
21072 * Schedule Directive::         Enable instruction scheduling.
21073 * Longcalls Directive::        Use Indirect Calls for Greater Range.
21074 * Transform Directive::        Disable All Assembler Transformations.
21075 * Literal Directive::          Intermix Literals with Instructions.
21076 * Literal Position Directive:: Specify Inline Literal Pool Locations.
21077 * Literal Prefix Directive::   Specify Literal Section Name Prefix.
21078 * Absolute Literals Directive:: Control PC-Relative vs. Absolute Literals.
21079
21080 \1f
21081 File: as.info,  Node: Schedule Directive,  Next: Longcalls Directive,  Up: Xtensa Directives
21082
21083 9.50.5.1 schedule
21084 .................
21085
21086 The `schedule' directive is recognized only for compatibility with
21087 Tensilica's assembler.
21088
21089          .begin [no-]schedule
21090          .end [no-]schedule
21091
21092    This directive is ignored and has no effect on `as'.
21093
21094 \1f
21095 File: as.info,  Node: Longcalls Directive,  Next: Transform Directive,  Prev: Schedule Directive,  Up: Xtensa Directives
21096
21097 9.50.5.2 longcalls
21098 ..................
21099
21100 The `longcalls' directive enables or disables function call relaxation.
21101 *Note Function Call Relaxation: Xtensa Call Relaxation.
21102
21103          .begin [no-]longcalls
21104          .end [no-]longcalls
21105
21106    Call relaxation is disabled by default unless the `--longcalls'
21107 command-line option is specified.  The `longcalls' directive overrides
21108 the default determined by the command-line options.
21109
21110 \1f
21111 File: as.info,  Node: Transform Directive,  Next: Literal Directive,  Prev: Longcalls Directive,  Up: Xtensa Directives
21112
21113 9.50.5.3 transform
21114 ..................
21115
21116 This directive enables or disables all assembler transformation,
21117 including relaxation (*note Xtensa Relaxation: Xtensa Relaxation.) and
21118 optimization (*note Xtensa Optimizations: Xtensa Optimizations.).
21119
21120          .begin [no-]transform
21121          .end [no-]transform
21122
21123    Transformations are enabled by default unless the `--no-transform'
21124 option is used.  The `transform' directive overrides the default
21125 determined by the command-line options.  An underscore opcode prefix,
21126 disabling transformation of that opcode, always takes precedence over
21127 both directives and command-line flags.
21128
21129 \1f
21130 File: as.info,  Node: Literal Directive,  Next: Literal Position Directive,  Prev: Transform Directive,  Up: Xtensa Directives
21131
21132 9.50.5.4 literal
21133 ................
21134
21135 The `.literal' directive is used to define literal pool data, i.e.,
21136 read-only 32-bit data accessed via `L32R' instructions.
21137
21138          .literal LABEL, VALUE[, VALUE...]
21139
21140    This directive is similar to the standard `.word' directive, except
21141 that the actual location of the literal data is determined by the
21142 assembler and linker, not by the position of the `.literal' directive.
21143 Using this directive gives the assembler freedom to locate the literal
21144 data in the most appropriate place and possibly to combine identical
21145 literals.  For example, the code:
21146
21147          entry sp, 40
21148          .literal .L1, sym
21149          l32r    a4, .L1
21150
21151    can be used to load a pointer to the symbol `sym' into register
21152 `a4'.  The value of `sym' will not be placed between the `ENTRY' and
21153 `L32R' instructions; instead, the assembler puts the data in a literal
21154 pool.
21155
21156    Literal pools are placed by default in separate literal sections;
21157 however, when using the `--text-section-literals' option (*note Command
21158 Line Options: Xtensa Options.), the literal pools for PC-relative mode
21159 `L32R' instructions are placed in the current section.(1) These text
21160 section literal pools are created automatically before `ENTRY'
21161 instructions and manually after `.literal_position' directives (*note
21162 literal_position: Literal Position Directive.).  If there are no
21163 preceding `ENTRY' instructions, explicit `.literal_position' directives
21164 must be used to place the text section literal pools; otherwise, `as'
21165 will report an error.
21166
21167    When literals are placed in separate sections, the literal section
21168 names are derived from the names of the sections where the literals are
21169 defined.  The base literal section names are `.literal' for PC-relative
21170 mode `L32R' instructions and `.lit4' for absolute mode `L32R'
21171 instructions (*note absolute-literals: Absolute Literals Directive.).
21172 These base names are used for literals defined in the default `.text'
21173 section.  For literals defined in other sections or within the scope of
21174 a `literal_prefix' directive (*note literal_prefix: Literal Prefix
21175 Directive.), the following rules determine the literal section name:
21176
21177   1. If the current section is a member of a section group, the literal
21178      section name includes the group name as a suffix to the base
21179      `.literal' or `.lit4' name, with a period to separate the base
21180      name and group name.  The literal section is also made a member of
21181      the group.
21182
21183   2. If the current section name (or `literal_prefix' value) begins with
21184      "`.gnu.linkonce.KIND.'", the literal section name is formed by
21185      replacing "`.KIND'" with the base `.literal' or `.lit4' name.  For
21186      example, for literals defined in a section named
21187      `.gnu.linkonce.t.func', the literal section will be
21188      `.gnu.linkonce.literal.func' or `.gnu.linkonce.lit4.func'.
21189
21190   3. If the current section name (or `literal_prefix' value) ends with
21191      `.text', the literal section name is formed by replacing that
21192      suffix with the base `.literal' or `.lit4' name.  For example, for
21193      literals defined in a section named `.iram0.text', the literal
21194      section will be `.iram0.literal' or `.iram0.lit4'.
21195
21196   4. If none of the preceding conditions apply, the literal section
21197      name is formed by adding the base `.literal' or `.lit4' name as a
21198      suffix to the current section name (or `literal_prefix' value).
21199
21200    ---------- Footnotes ----------
21201
21202    (1) Literals for the `.init' and `.fini' sections are always placed
21203 in separate sections, even when `--text-section-literals' is enabled.
21204
21205 \1f
21206 File: as.info,  Node: Literal Position Directive,  Next: Literal Prefix Directive,  Prev: Literal Directive,  Up: Xtensa Directives
21207
21208 9.50.5.5 literal_position
21209 .........................
21210
21211 When using `--text-section-literals' to place literals inline in the
21212 section being assembled, the `.literal_position' directive can be used
21213 to mark a potential location for a literal pool.
21214
21215          .literal_position
21216
21217    The `.literal_position' directive is ignored when the
21218 `--text-section-literals' option is not used or when `L32R'
21219 instructions use the absolute addressing mode.
21220
21221    The assembler will automatically place text section literal pools
21222 before `ENTRY' instructions, so the `.literal_position' directive is
21223 only needed to specify some other location for a literal pool.  You may
21224 need to add an explicit jump instruction to skip over an inline literal
21225 pool.
21226
21227    For example, an interrupt vector does not begin with an `ENTRY'
21228 instruction so the assembler will be unable to automatically find a good
21229 place to put a literal pool.  Moreover, the code for the interrupt
21230 vector must be at a specific starting address, so the literal pool
21231 cannot come before the start of the code.  The literal pool for the
21232 vector must be explicitly positioned in the middle of the vector (before
21233 any uses of the literals, due to the negative offsets used by
21234 PC-relative `L32R' instructions).  The `.literal_position' directive
21235 can be used to do this.  In the following code, the literal for `M'
21236 will automatically be aligned correctly and is placed after the
21237 unconditional jump.
21238
21239          .global M
21240      code_start:
21241          j continue
21242          .literal_position
21243          .align 4
21244      continue:
21245          movi    a4, M
21246
21247 \1f
21248 File: as.info,  Node: Literal Prefix Directive,  Next: Absolute Literals Directive,  Prev: Literal Position Directive,  Up: Xtensa Directives
21249
21250 9.50.5.6 literal_prefix
21251 .......................
21252
21253 The `literal_prefix' directive allows you to override the default
21254 literal section names, which are derived from the names of the sections
21255 where the literals are defined.
21256
21257          .begin literal_prefix [NAME]
21258          .end literal_prefix
21259
21260    For literals defined within the delimited region, the literal section
21261 names are derived from the NAME argument instead of the name of the
21262 current section.  The rules used to derive the literal section names do
21263 not change.  *Note literal: Literal Directive.  If the NAME argument is
21264 omitted, the literal sections revert to the defaults.  This directive
21265 has no effect when using the `--text-section-literals' option (*note
21266 Command Line Options: Xtensa Options.).
21267
21268 \1f
21269 File: as.info,  Node: Absolute Literals Directive,  Prev: Literal Prefix Directive,  Up: Xtensa Directives
21270
21271 9.50.5.7 absolute-literals
21272 ..........................
21273
21274 The `absolute-literals' and `no-absolute-literals' directives control
21275 the absolute vs. PC-relative mode for `L32R' instructions.  These are
21276 relevant only for Xtensa configurations that include the absolute
21277 addressing option for `L32R' instructions.
21278
21279          .begin [no-]absolute-literals
21280          .end [no-]absolute-literals
21281
21282    These directives do not change the `L32R' mode--they only cause the
21283 assembler to emit the appropriate kind of relocation for `L32R'
21284 instructions and to place the literal values in the appropriate section.
21285 To change the `L32R' mode, the program must write the `LITBASE' special
21286 register.  It is the programmer's responsibility to keep track of the
21287 mode and indicate to the assembler which mode is used in each region of
21288 code.
21289
21290    If the Xtensa configuration includes the absolute `L32R' addressing
21291 option, the default is to assume absolute `L32R' addressing unless the
21292 `--no-absolute-literals' command-line option is specified.  Otherwise,
21293 the default is to assume PC-relative `L32R' addressing.  The
21294 `absolute-literals' directive can then be used to override the default
21295 determined by the command-line options.
21296
21297 \1f
21298 File: as.info,  Node: Reporting Bugs,  Next: Acknowledgements,  Prev: Machine Dependencies,  Up: Top
21299
21300 10 Reporting Bugs
21301 *****************
21302
21303 Your bug reports play an essential role in making `as' reliable.
21304
21305    Reporting a bug may help you by bringing a solution to your problem,
21306 or it may not.  But in any case the principal function of a bug report
21307 is to help the entire community by making the next version of `as' work
21308 better.  Bug reports are your contribution to the maintenance of `as'.
21309
21310    In order for a bug report to serve its purpose, you must include the
21311 information that enables us to fix the bug.
21312
21313 * Menu:
21314
21315 * Bug Criteria::                Have you found a bug?
21316 * Bug Reporting::               How to report bugs
21317
21318 \1f
21319 File: as.info,  Node: Bug Criteria,  Next: Bug Reporting,  Up: Reporting Bugs
21320
21321 10.1 Have You Found a Bug?
21322 ==========================
21323
21324 If you are not sure whether you have found a bug, here are some
21325 guidelines:
21326
21327    * If the assembler gets a fatal signal, for any input whatever, that
21328      is a `as' bug.  Reliable assemblers never crash.
21329
21330    * If `as' produces an error message for valid input, that is a bug.
21331
21332    * If `as' does not produce an error message for invalid input, that
21333      is a bug.  However, you should note that your idea of "invalid
21334      input" might be our idea of "an extension" or "support for
21335      traditional practice".
21336
21337    * If you are an experienced user of assemblers, your suggestions for
21338      improvement of `as' are welcome in any case.
21339
21340 \1f
21341 File: as.info,  Node: Bug Reporting,  Prev: Bug Criteria,  Up: Reporting Bugs
21342
21343 10.2 How to Report Bugs
21344 =======================
21345
21346 A number of companies and individuals offer support for GNU products.
21347 If you obtained `as' from a support organization, we recommend you
21348 contact that organization first.
21349
21350    You can find contact information for many support companies and
21351 individuals in the file `etc/SERVICE' in the GNU Emacs distribution.
21352
21353    In any event, we also recommend that you send bug reports for `as'
21354 to `http://www.sourceware.org/bugzilla/'.
21355
21356    The fundamental principle of reporting bugs usefully is this:
21357 *report all the facts*.  If you are not sure whether to state a fact or
21358 leave it out, state it!
21359
21360    Often people omit facts because they think they know what causes the
21361 problem and assume that some details do not matter.  Thus, you might
21362 assume that the name of a symbol you use in an example does not matter.
21363 Well, probably it does not, but one cannot be sure.  Perhaps the bug
21364 is a stray memory reference which happens to fetch from the location
21365 where that name is stored in memory; perhaps, if the name were
21366 different, the contents of that location would fool the assembler into
21367 doing the right thing despite the bug.  Play it safe and give a
21368 specific, complete example.  That is the easiest thing for you to do,
21369 and the most helpful.
21370
21371    Keep in mind that the purpose of a bug report is to enable us to fix
21372 the bug if it is new to us.  Therefore, always write your bug reports
21373 on the assumption that the bug has not been reported previously.
21374
21375    Sometimes people give a few sketchy facts and ask, "Does this ring a
21376 bell?"  This cannot help us fix a bug, so it is basically useless.  We
21377 respond by asking for enough details to enable us to investigate.  You
21378 might as well expedite matters by sending them to begin with.
21379
21380    To enable us to fix the bug, you should include all these things:
21381
21382    * The version of `as'.  `as' announces it if you start it with the
21383      `--version' argument.
21384
21385      Without this, we will not know whether there is any point in
21386      looking for the bug in the current version of `as'.
21387
21388    * Any patches you may have applied to the `as' source.
21389
21390    * The type of machine you are using, and the operating system name
21391      and version number.
21392
21393    * What compiler (and its version) was used to compile `as'--e.g.
21394      "`gcc-2.7'".
21395
21396    * The command arguments you gave the assembler to assemble your
21397      example and observe the bug.  To guarantee you will not omit
21398      something important, list them all.  A copy of the Makefile (or
21399      the output from make) is sufficient.
21400
21401      If we were to try to guess the arguments, we would probably guess
21402      wrong and then we might not encounter the bug.
21403
21404    * A complete input file that will reproduce the bug.  If the bug is
21405      observed when the assembler is invoked via a compiler, send the
21406      assembler source, not the high level language source.  Most
21407      compilers will produce the assembler source when run with the `-S'
21408      option.  If you are using `gcc', use the options `-v
21409      --save-temps'; this will save the assembler source in a file with
21410      an extension of `.s', and also show you exactly how `as' is being
21411      run.
21412
21413    * A description of what behavior you observe that you believe is
21414      incorrect.  For example, "It gets a fatal signal."
21415
21416      Of course, if the bug is that `as' gets a fatal signal, then we
21417      will certainly notice it.  But if the bug is incorrect output, we
21418      might not notice unless it is glaringly wrong.  You might as well
21419      not give us a chance to make a mistake.
21420
21421      Even if the problem you experience is a fatal signal, you should
21422      still say so explicitly.  Suppose something strange is going on,
21423      such as, your copy of `as' is out of sync, or you have encountered
21424      a bug in the C library on your system.  (This has happened!)  Your
21425      copy might crash and ours would not.  If you told us to expect a
21426      crash, then when ours fails to crash, we would know that the bug
21427      was not happening for us.  If you had not told us to expect a
21428      crash, then we would not be able to draw any conclusion from our
21429      observations.
21430
21431    * If you wish to suggest changes to the `as' source, send us context
21432      diffs, as generated by `diff' with the `-u', `-c', or `-p' option.
21433      Always send diffs from the old file to the new file.  If you even
21434      discuss something in the `as' source, refer to it by context, not
21435      by line number.
21436
21437      The line numbers in our development sources will not match those
21438      in your sources.  Your line numbers would convey no useful
21439      information to us.
21440
21441    Here are some things that are not necessary:
21442
21443    * A description of the envelope of the bug.
21444
21445      Often people who encounter a bug spend a lot of time investigating
21446      which changes to the input file will make the bug go away and which
21447      changes will not affect it.
21448
21449      This is often time consuming and not very useful, because the way
21450      we will find the bug is by running a single example under the
21451      debugger with breakpoints, not by pure deduction from a series of
21452      examples.  We recommend that you save your time for something else.
21453
21454      Of course, if you can find a simpler example to report _instead_
21455      of the original one, that is a convenience for us.  Errors in the
21456      output will be easier to spot, running under the debugger will take
21457      less time, and so on.
21458
21459      However, simplification is not vital; if you do not want to do
21460      this, report the bug anyway and send us the entire test case you
21461      used.
21462
21463    * A patch for the bug.
21464
21465      A patch for the bug does help us if it is a good one.  But do not
21466      omit the necessary information, such as the test case, on the
21467      assumption that a patch is all we need.  We might see problems
21468      with your patch and decide to fix the problem another way, or we
21469      might not understand it at all.
21470
21471      Sometimes with a program as complicated as `as' it is very hard to
21472      construct an example that will make the program follow a certain
21473      path through the code.  If you do not send us the example, we will
21474      not be able to construct one, so we will not be able to verify
21475      that the bug is fixed.
21476
21477      And if we cannot understand what bug you are trying to fix, or why
21478      your patch should be an improvement, we will not install it.  A
21479      test case will help us to understand.
21480
21481    * A guess about what the bug is or what it depends on.
21482
21483      Such guesses are usually wrong.  Even we cannot guess right about
21484      such things without first using the debugger to find the facts.
21485
21486 \1f
21487 File: as.info,  Node: Acknowledgements,  Next: GNU Free Documentation License,  Prev: Reporting Bugs,  Up: Top
21488
21489 11 Acknowledgements
21490 *******************
21491
21492 If you have contributed to GAS and your name isn't listed here, it is
21493 not meant as a slight.  We just don't know about it.  Send mail to the
21494 maintainer, and we'll correct the situation.  Currently the maintainer
21495 is Ken Raeburn (email address `raeburn@cygnus.com').
21496
21497    Dean Elsner wrote the original GNU assembler for the VAX.(1)
21498
21499    Jay Fenlason maintained GAS for a while, adding support for
21500 GDB-specific debug information and the 68k series machines, most of the
21501 preprocessing pass, and extensive changes in `messages.c',
21502 `input-file.c', `write.c'.
21503
21504    K. Richard Pixley maintained GAS for a while, adding various
21505 enhancements and many bug fixes, including merging support for several
21506 processors, breaking GAS up to handle multiple object file format back
21507 ends (including heavy rewrite, testing, an integration of the coff and
21508 b.out back ends), adding configuration including heavy testing and
21509 verification of cross assemblers and file splits and renaming,
21510 converted GAS to strictly ANSI C including full prototypes, added
21511 support for m680[34]0 and cpu32, did considerable work on i960
21512 including a COFF port (including considerable amounts of reverse
21513 engineering), a SPARC opcode file rewrite, DECstation, rs6000, and
21514 hp300hpux host ports, updated "know" assertions and made them work,
21515 much other reorganization, cleanup, and lint.
21516
21517    Ken Raeburn wrote the high-level BFD interface code to replace most
21518 of the code in format-specific I/O modules.
21519
21520    The original VMS support was contributed by David L. Kashtan.  Eric
21521 Youngdale has done much work with it since.
21522
21523    The Intel 80386 machine description was written by Eliot Dresselhaus.
21524
21525    Minh Tran-Le at IntelliCorp contributed some AIX 386 support.
21526
21527    The Motorola 88k machine description was contributed by Devon Bowen
21528 of Buffalo University and Torbjorn Granlund of the Swedish Institute of
21529 Computer Science.
21530
21531    Keith Knowles at the Open Software Foundation wrote the original
21532 MIPS back end (`tc-mips.c', `tc-mips.h'), and contributed Rose format
21533 support (which hasn't been merged in yet).  Ralph Campbell worked with
21534 the MIPS code to support a.out format.
21535
21536    Support for the Zilog Z8k and Renesas H8/300 processors (tc-z8k,
21537 tc-h8300), and IEEE 695 object file format (obj-ieee), was written by
21538 Steve Chamberlain of Cygnus Support.  Steve also modified the COFF back
21539 end to use BFD for some low-level operations, for use with the H8/300
21540 and AMD 29k targets.
21541
21542    John Gilmore built the AMD 29000 support, added `.include' support,
21543 and simplified the configuration of which versions accept which
21544 directives.  He updated the 68k machine description so that Motorola's
21545 opcodes always produced fixed-size instructions (e.g., `jsr'), while
21546 synthetic instructions remained shrinkable (`jbsr').  John fixed many
21547 bugs, including true tested cross-compilation support, and one bug in
21548 relaxation that took a week and required the proverbial one-bit fix.
21549
21550    Ian Lance Taylor of Cygnus Support merged the Motorola and MIT
21551 syntax for the 68k, completed support for some COFF targets (68k, i386
21552 SVR3, and SCO Unix), added support for MIPS ECOFF and ELF targets,
21553 wrote the initial RS/6000 and PowerPC assembler, and made a few other
21554 minor patches.
21555
21556    Steve Chamberlain made GAS able to generate listings.
21557
21558    Hewlett-Packard contributed support for the HP9000/300.
21559
21560    Jeff Law wrote GAS and BFD support for the native HPPA object format
21561 (SOM) along with a fairly extensive HPPA testsuite (for both SOM and
21562 ELF object formats).  This work was supported by both the Center for
21563 Software Science at the University of Utah and Cygnus Support.
21564
21565    Support for ELF format files has been worked on by Mark Eichin of
21566 Cygnus Support (original, incomplete implementation for SPARC), Pete
21567 Hoogenboom and Jeff Law at the University of Utah (HPPA mainly),
21568 Michael Meissner of the Open Software Foundation (i386 mainly), and Ken
21569 Raeburn of Cygnus Support (sparc, and some initial 64-bit support).
21570
21571    Linas Vepstas added GAS support for the ESA/390 "IBM 370"
21572 architecture.
21573
21574    Richard Henderson rewrote the Alpha assembler. Klaus Kaempf wrote
21575 GAS and BFD support for openVMS/Alpha.
21576
21577    Timothy Wall, Michael Hayes, and Greg Smart contributed to the
21578 various tic* flavors.
21579
21580    David Heine, Sterling Augustine, Bob Wilson and John Ruttenberg from
21581 Tensilica, Inc. added support for Xtensa processors.
21582
21583    Several engineers at Cygnus Support have also provided many small
21584 bug fixes and configuration enhancements.
21585
21586    Jon Beniston added support for the Lattice Mico32 architecture.
21587
21588    Many others have contributed large or small bugfixes and
21589 enhancements.  If you have contributed significant work and are not
21590 mentioned on this list, and want to be, let us know.  Some of the
21591 history has been lost; we are not intentionally leaving anyone out.
21592
21593    ---------- Footnotes ----------
21594
21595    (1) Any more details?
21596
21597 \1f
21598 File: as.info,  Node: GNU Free Documentation License,  Next: AS Index,  Prev: Acknowledgements,  Up: Top
21599
21600 Appendix A GNU Free Documentation License
21601 *****************************************
21602
21603                      Version 1.3, 3 November 2008
21604
21605      Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
21606      `http://fsf.org/'
21607
21608      Everyone is permitted to copy and distribute verbatim copies
21609      of this license document, but changing it is not allowed.
21610
21611   0. PREAMBLE
21612
21613      The purpose of this License is to make a manual, textbook, or other
21614      functional and useful document "free" in the sense of freedom: to
21615      assure everyone the effective freedom to copy and redistribute it,
21616      with or without modifying it, either commercially or
21617      noncommercially.  Secondarily, this License preserves for the
21618      author and publisher a way to get credit for their work, while not
21619      being considered responsible for modifications made by others.
21620
21621      This License is a kind of "copyleft", which means that derivative
21622      works of the document must themselves be free in the same sense.
21623      It complements the GNU General Public License, which is a copyleft
21624      license designed for free software.
21625
21626      We have designed this License in order to use it for manuals for
21627      free software, because free software needs free documentation: a
21628      free program should come with manuals providing the same freedoms
21629      that the software does.  But this License is not limited to
21630      software manuals; it can be used for any textual work, regardless
21631      of subject matter or whether it is published as a printed book.
21632      We recommend this License principally for works whose purpose is
21633      instruction or reference.
21634
21635   1. APPLICABILITY AND DEFINITIONS
21636
21637      This License applies to any manual or other work, in any medium,
21638      that contains a notice placed by the copyright holder saying it
21639      can be distributed under the terms of this License.  Such a notice
21640      grants a world-wide, royalty-free license, unlimited in duration,
21641      to use that work under the conditions stated herein.  The
21642      "Document", below, refers to any such manual or work.  Any member
21643      of the public is a licensee, and is addressed as "you".  You
21644      accept the license if you copy, modify or distribute the work in a
21645      way requiring permission under copyright law.
21646
21647      A "Modified Version" of the Document means any work containing the
21648      Document or a portion of it, either copied verbatim, or with
21649      modifications and/or translated into another language.
21650
21651      A "Secondary Section" is a named appendix or a front-matter section
21652      of the Document that deals exclusively with the relationship of the
21653      publishers or authors of the Document to the Document's overall
21654      subject (or to related matters) and contains nothing that could
21655      fall directly within that overall subject.  (Thus, if the Document
21656      is in part a textbook of mathematics, a Secondary Section may not
21657      explain any mathematics.)  The relationship could be a matter of
21658      historical connection with the subject or with related matters, or
21659      of legal, commercial, philosophical, ethical or political position
21660      regarding them.
21661
21662      The "Invariant Sections" are certain Secondary Sections whose
21663      titles are designated, as being those of Invariant Sections, in
21664      the notice that says that the Document is released under this
21665      License.  If a section does not fit the above definition of
21666      Secondary then it is not allowed to be designated as Invariant.
21667      The Document may contain zero Invariant Sections.  If the Document
21668      does not identify any Invariant Sections then there are none.
21669
21670      The "Cover Texts" are certain short passages of text that are
21671      listed, as Front-Cover Texts or Back-Cover Texts, in the notice
21672      that says that the Document is released under this License.  A
21673      Front-Cover Text may be at most 5 words, and a Back-Cover Text may
21674      be at most 25 words.
21675
21676      A "Transparent" copy of the Document means a machine-readable copy,
21677      represented in a format whose specification is available to the
21678      general public, that is suitable for revising the document
21679      straightforwardly with generic text editors or (for images
21680      composed of pixels) generic paint programs or (for drawings) some
21681      widely available drawing editor, and that is suitable for input to
21682      text formatters or for automatic translation to a variety of
21683      formats suitable for input to text formatters.  A copy made in an
21684      otherwise Transparent file format whose markup, or absence of
21685      markup, has been arranged to thwart or discourage subsequent
21686      modification by readers is not Transparent.  An image format is
21687      not Transparent if used for any substantial amount of text.  A
21688      copy that is not "Transparent" is called "Opaque".
21689
21690      Examples of suitable formats for Transparent copies include plain
21691      ASCII without markup, Texinfo input format, LaTeX input format,
21692      SGML or XML using a publicly available DTD, and
21693      standard-conforming simple HTML, PostScript or PDF designed for
21694      human modification.  Examples of transparent image formats include
21695      PNG, XCF and JPG.  Opaque formats include proprietary formats that
21696      can be read and edited only by proprietary word processors, SGML or
21697      XML for which the DTD and/or processing tools are not generally
21698      available, and the machine-generated HTML, PostScript or PDF
21699      produced by some word processors for output purposes only.
21700
21701      The "Title Page" means, for a printed book, the title page itself,
21702      plus such following pages as are needed to hold, legibly, the
21703      material this License requires to appear in the title page.  For
21704      works in formats which do not have any title page as such, "Title
21705      Page" means the text near the most prominent appearance of the
21706      work's title, preceding the beginning of the body of the text.
21707
21708      The "publisher" means any person or entity that distributes copies
21709      of the Document to the public.
21710
21711      A section "Entitled XYZ" means a named subunit of the Document
21712      whose title either is precisely XYZ or contains XYZ in parentheses
21713      following text that translates XYZ in another language.  (Here XYZ
21714      stands for a specific section name mentioned below, such as
21715      "Acknowledgements", "Dedications", "Endorsements", or "History".)
21716      To "Preserve the Title" of such a section when you modify the
21717      Document means that it remains a section "Entitled XYZ" according
21718      to this definition.
21719
21720      The Document may include Warranty Disclaimers next to the notice
21721      which states that this License applies to the Document.  These
21722      Warranty Disclaimers are considered to be included by reference in
21723      this License, but only as regards disclaiming warranties: any other
21724      implication that these Warranty Disclaimers may have is void and
21725      has no effect on the meaning of this License.
21726
21727   2. VERBATIM COPYING
21728
21729      You may copy and distribute the Document in any medium, either
21730      commercially or noncommercially, provided that this License, the
21731      copyright notices, and the license notice saying this License
21732      applies to the Document are reproduced in all copies, and that you
21733      add no other conditions whatsoever to those of this License.  You
21734      may not use technical measures to obstruct or control the reading
21735      or further copying of the copies you make or distribute.  However,
21736      you may accept compensation in exchange for copies.  If you
21737      distribute a large enough number of copies you must also follow
21738      the conditions in section 3.
21739
21740      You may also lend copies, under the same conditions stated above,
21741      and you may publicly display copies.
21742
21743   3. COPYING IN QUANTITY
21744
21745      If you publish printed copies (or copies in media that commonly
21746      have printed covers) of the Document, numbering more than 100, and
21747      the Document's license notice requires Cover Texts, you must
21748      enclose the copies in covers that carry, clearly and legibly, all
21749      these Cover Texts: Front-Cover Texts on the front cover, and
21750      Back-Cover Texts on the back cover.  Both covers must also clearly
21751      and legibly identify you as the publisher of these copies.  The
21752      front cover must present the full title with all words of the
21753      title equally prominent and visible.  You may add other material
21754      on the covers in addition.  Copying with changes limited to the
21755      covers, as long as they preserve the title of the Document and
21756      satisfy these conditions, can be treated as verbatim copying in
21757      other respects.
21758
21759      If the required texts for either cover are too voluminous to fit
21760      legibly, you should put the first ones listed (as many as fit
21761      reasonably) on the actual cover, and continue the rest onto
21762      adjacent pages.
21763
21764      If you publish or distribute Opaque copies of the Document
21765      numbering more than 100, you must either include a
21766      machine-readable Transparent copy along with each Opaque copy, or
21767      state in or with each Opaque copy a computer-network location from
21768      which the general network-using public has access to download
21769      using public-standard network protocols a complete Transparent
21770      copy of the Document, free of added material.  If you use the
21771      latter option, you must take reasonably prudent steps, when you
21772      begin distribution of Opaque copies in quantity, to ensure that
21773      this Transparent copy will remain thus accessible at the stated
21774      location until at least one year after the last time you
21775      distribute an Opaque copy (directly or through your agents or
21776      retailers) of that edition to the public.
21777
21778      It is requested, but not required, that you contact the authors of
21779      the Document well before redistributing any large number of
21780      copies, to give them a chance to provide you with an updated
21781      version of the Document.
21782
21783   4. MODIFICATIONS
21784
21785      You may copy and distribute a Modified Version of the Document
21786      under the conditions of sections 2 and 3 above, provided that you
21787      release the Modified Version under precisely this License, with
21788      the Modified Version filling the role of the Document, thus
21789      licensing distribution and modification of the Modified Version to
21790      whoever possesses a copy of it.  In addition, you must do these
21791      things in the Modified Version:
21792
21793        A. Use in the Title Page (and on the covers, if any) a title
21794           distinct from that of the Document, and from those of
21795           previous versions (which should, if there were any, be listed
21796           in the History section of the Document).  You may use the
21797           same title as a previous version if the original publisher of
21798           that version gives permission.
21799
21800        B. List on the Title Page, as authors, one or more persons or
21801           entities responsible for authorship of the modifications in
21802           the Modified Version, together with at least five of the
21803           principal authors of the Document (all of its principal
21804           authors, if it has fewer than five), unless they release you
21805           from this requirement.
21806
21807        C. State on the Title page the name of the publisher of the
21808           Modified Version, as the publisher.
21809
21810        D. Preserve all the copyright notices of the Document.
21811
21812        E. Add an appropriate copyright notice for your modifications
21813           adjacent to the other copyright notices.
21814
21815        F. Include, immediately after the copyright notices, a license
21816           notice giving the public permission to use the Modified
21817           Version under the terms of this License, in the form shown in
21818           the Addendum below.
21819
21820        G. Preserve in that license notice the full lists of Invariant
21821           Sections and required Cover Texts given in the Document's
21822           license notice.
21823
21824        H. Include an unaltered copy of this License.
21825
21826        I. Preserve the section Entitled "History", Preserve its Title,
21827           and add to it an item stating at least the title, year, new
21828           authors, and publisher of the Modified Version as given on
21829           the Title Page.  If there is no section Entitled "History" in
21830           the Document, create one stating the title, year, authors,
21831           and publisher of the Document as given on its Title Page,
21832           then add an item describing the Modified Version as stated in
21833           the previous sentence.
21834
21835        J. Preserve the network location, if any, given in the Document
21836           for public access to a Transparent copy of the Document, and
21837           likewise the network locations given in the Document for
21838           previous versions it was based on.  These may be placed in
21839           the "History" section.  You may omit a network location for a
21840           work that was published at least four years before the
21841           Document itself, or if the original publisher of the version
21842           it refers to gives permission.
21843
21844        K. For any section Entitled "Acknowledgements" or "Dedications",
21845           Preserve the Title of the section, and preserve in the
21846           section all the substance and tone of each of the contributor
21847           acknowledgements and/or dedications given therein.
21848
21849        L. Preserve all the Invariant Sections of the Document,
21850           unaltered in their text and in their titles.  Section numbers
21851           or the equivalent are not considered part of the section
21852           titles.
21853
21854        M. Delete any section Entitled "Endorsements".  Such a section
21855           may not be included in the Modified Version.
21856
21857        N. Do not retitle any existing section to be Entitled
21858           "Endorsements" or to conflict in title with any Invariant
21859           Section.
21860
21861        O. Preserve any Warranty Disclaimers.
21862
21863      If the Modified Version includes new front-matter sections or
21864      appendices that qualify as Secondary Sections and contain no
21865      material copied from the Document, you may at your option
21866      designate some or all of these sections as invariant.  To do this,
21867      add their titles to the list of Invariant Sections in the Modified
21868      Version's license notice.  These titles must be distinct from any
21869      other section titles.
21870
21871      You may add a section Entitled "Endorsements", provided it contains
21872      nothing but endorsements of your Modified Version by various
21873      parties--for example, statements of peer review or that the text
21874      has been approved by an organization as the authoritative
21875      definition of a standard.
21876
21877      You may add a passage of up to five words as a Front-Cover Text,
21878      and a passage of up to 25 words as a Back-Cover Text, to the end
21879      of the list of Cover Texts in the Modified Version.  Only one
21880      passage of Front-Cover Text and one of Back-Cover Text may be
21881      added by (or through arrangements made by) any one entity.  If the
21882      Document already includes a cover text for the same cover,
21883      previously added by you or by arrangement made by the same entity
21884      you are acting on behalf of, you may not add another; but you may
21885      replace the old one, on explicit permission from the previous
21886      publisher that added the old one.
21887
21888      The author(s) and publisher(s) of the Document do not by this
21889      License give permission to use their names for publicity for or to
21890      assert or imply endorsement of any Modified Version.
21891
21892   5. COMBINING DOCUMENTS
21893
21894      You may combine the Document with other documents released under
21895      this License, under the terms defined in section 4 above for
21896      modified versions, provided that you include in the combination
21897      all of the Invariant Sections of all of the original documents,
21898      unmodified, and list them all as Invariant Sections of your
21899      combined work in its license notice, and that you preserve all
21900      their Warranty Disclaimers.
21901
21902      The combined work need only contain one copy of this License, and
21903      multiple identical Invariant Sections may be replaced with a single
21904      copy.  If there are multiple Invariant Sections with the same name
21905      but different contents, make the title of each such section unique
21906      by adding at the end of it, in parentheses, the name of the
21907      original author or publisher of that section if known, or else a
21908      unique number.  Make the same adjustment to the section titles in
21909      the list of Invariant Sections in the license notice of the
21910      combined work.
21911
21912      In the combination, you must combine any sections Entitled
21913      "History" in the various original documents, forming one section
21914      Entitled "History"; likewise combine any sections Entitled
21915      "Acknowledgements", and any sections Entitled "Dedications".  You
21916      must delete all sections Entitled "Endorsements."
21917
21918   6. COLLECTIONS OF DOCUMENTS
21919
21920      You may make a collection consisting of the Document and other
21921      documents released under this License, and replace the individual
21922      copies of this License in the various documents with a single copy
21923      that is included in the collection, provided that you follow the
21924      rules of this License for verbatim copying of each of the
21925      documents in all other respects.
21926
21927      You may extract a single document from such a collection, and
21928      distribute it individually under this License, provided you insert
21929      a copy of this License into the extracted document, and follow
21930      this License in all other respects regarding verbatim copying of
21931      that document.
21932
21933   7. AGGREGATION WITH INDEPENDENT WORKS
21934
21935      A compilation of the Document or its derivatives with other
21936      separate and independent documents or works, in or on a volume of
21937      a storage or distribution medium, is called an "aggregate" if the
21938      copyright resulting from the compilation is not used to limit the
21939      legal rights of the compilation's users beyond what the individual
21940      works permit.  When the Document is included in an aggregate, this
21941      License does not apply to the other works in the aggregate which
21942      are not themselves derivative works of the Document.
21943
21944      If the Cover Text requirement of section 3 is applicable to these
21945      copies of the Document, then if the Document is less than one half
21946      of the entire aggregate, the Document's Cover Texts may be placed
21947      on covers that bracket the Document within the aggregate, or the
21948      electronic equivalent of covers if the Document is in electronic
21949      form.  Otherwise they must appear on printed covers that bracket
21950      the whole aggregate.
21951
21952   8. TRANSLATION
21953
21954      Translation is considered a kind of modification, so you may
21955      distribute translations of the Document under the terms of section
21956      4.  Replacing Invariant Sections with translations requires special
21957      permission from their copyright holders, but you may include
21958      translations of some or all Invariant Sections in addition to the
21959      original versions of these Invariant Sections.  You may include a
21960      translation of this License, and all the license notices in the
21961      Document, and any Warranty Disclaimers, provided that you also
21962      include the original English version of this License and the
21963      original versions of those notices and disclaimers.  In case of a
21964      disagreement between the translation and the original version of
21965      this License or a notice or disclaimer, the original version will
21966      prevail.
21967
21968      If a section in the Document is Entitled "Acknowledgements",
21969      "Dedications", or "History", the requirement (section 4) to
21970      Preserve its Title (section 1) will typically require changing the
21971      actual title.
21972
21973   9. TERMINATION
21974
21975      You may not copy, modify, sublicense, or distribute the Document
21976      except as expressly provided under this License.  Any attempt
21977      otherwise to copy, modify, sublicense, or distribute it is void,
21978      and will automatically terminate your rights under this License.
21979
21980      However, if you cease all violation of this License, then your
21981      license from a particular copyright holder is reinstated (a)
21982      provisionally, unless and until the copyright holder explicitly
21983      and finally terminates your license, and (b) permanently, if the
21984      copyright holder fails to notify you of the violation by some
21985      reasonable means prior to 60 days after the cessation.
21986
21987      Moreover, your license from a particular copyright holder is
21988      reinstated permanently if the copyright holder notifies you of the
21989      violation by some reasonable means, this is the first time you have
21990      received notice of violation of this License (for any work) from
21991      that copyright holder, and you cure the violation prior to 30 days
21992      after your receipt of the notice.
21993
21994      Termination of your rights under this section does not terminate
21995      the licenses of parties who have received copies or rights from
21996      you under this License.  If your rights have been terminated and
21997      not permanently reinstated, receipt of a copy of some or all of
21998      the same material does not give you any rights to use it.
21999
22000  10. FUTURE REVISIONS OF THIS LICENSE
22001
22002      The Free Software Foundation may publish new, revised versions of
22003      the GNU Free Documentation License from time to time.  Such new
22004      versions will be similar in spirit to the present version, but may
22005      differ in detail to address new problems or concerns.  See
22006      `http://www.gnu.org/copyleft/'.
22007
22008      Each version of the License is given a distinguishing version
22009      number.  If the Document specifies that a particular numbered
22010      version of this License "or any later version" applies to it, you
22011      have the option of following the terms and conditions either of
22012      that specified version or of any later version that has been
22013      published (not as a draft) by the Free Software Foundation.  If
22014      the Document does not specify a version number of this License,
22015      you may choose any version ever published (not as a draft) by the
22016      Free Software Foundation.  If the Document specifies that a proxy
22017      can decide which future versions of this License can be used, that
22018      proxy's public statement of acceptance of a version permanently
22019      authorizes you to choose that version for the Document.
22020
22021  11. RELICENSING
22022
22023      "Massive Multiauthor Collaboration Site" (or "MMC Site") means any
22024      World Wide Web server that publishes copyrightable works and also
22025      provides prominent facilities for anybody to edit those works.  A
22026      public wiki that anybody can edit is an example of such a server.
22027      A "Massive Multiauthor Collaboration" (or "MMC") contained in the
22028      site means any set of copyrightable works thus published on the MMC
22029      site.
22030
22031      "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0
22032      license published by Creative Commons Corporation, a not-for-profit
22033      corporation with a principal place of business in San Francisco,
22034      California, as well as future copyleft versions of that license
22035      published by that same organization.
22036
22037      "Incorporate" means to publish or republish a Document, in whole or
22038      in part, as part of another Document.
22039
22040      An MMC is "eligible for relicensing" if it is licensed under this
22041      License, and if all works that were first published under this
22042      License somewhere other than this MMC, and subsequently
22043      incorporated in whole or in part into the MMC, (1) had no cover
22044      texts or invariant sections, and (2) were thus incorporated prior
22045      to November 1, 2008.
22046
22047      The operator of an MMC Site may republish an MMC contained in the
22048      site under CC-BY-SA on the same site at any time before August 1,
22049      2009, provided the MMC is eligible for relicensing.
22050
22051
22052 ADDENDUM: How to use this License for your documents
22053 ====================================================
22054
22055 To use this License in a document you have written, include a copy of
22056 the License in the document and put the following copyright and license
22057 notices just after the title page:
22058
22059        Copyright (C)  YEAR  YOUR NAME.
22060        Permission is granted to copy, distribute and/or modify this document
22061        under the terms of the GNU Free Documentation License, Version 1.3
22062        or any later version published by the Free Software Foundation;
22063        with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
22064        Texts.  A copy of the license is included in the section entitled ``GNU
22065        Free Documentation License''.
22066
22067    If you have Invariant Sections, Front-Cover Texts and Back-Cover
22068 Texts, replace the "with...Texts." line with this:
22069
22070          with the Invariant Sections being LIST THEIR TITLES, with
22071          the Front-Cover Texts being LIST, and with the Back-Cover Texts
22072          being LIST.
22073
22074    If you have Invariant Sections without Cover Texts, or some other
22075 combination of the three, merge those two alternatives to suit the
22076 situation.
22077
22078    If your document contains nontrivial examples of program code, we
22079 recommend releasing these examples in parallel under your choice of
22080 free software license, such as the GNU General Public License, to
22081 permit their use in free software.
22082
22083 \1f
22084 File: as.info,  Node: AS Index,  Prev: GNU Free Documentation License,  Up: Top
22085
22086 AS Index
22087 ********
22088
22089 \0\b[index\0\b]
22090 * Menu:
22091
22092 * #:                                     Comments.            (line  33)
22093 * #APP:                                  Preprocessing.       (line  27)
22094 * #NO_APP:                               Preprocessing.       (line  27)
22095 * $ in symbol names <1>:                 SH-Chars.            (line  15)
22096 * $ in symbol names <2>:                 SH64-Chars.          (line  15)
22097 * $ in symbol names <3>:                 D10V-Chars.          (line  53)
22098 * $ in symbol names:                     D30V-Chars.          (line  70)
22099 * $a:                                    ARM Mapping Symbols. (line   9)
22100 * $acos math builtin, TIC54X:            TIC54X-Builtins.     (line  10)
22101 * $asin math builtin, TIC54X:            TIC54X-Builtins.     (line  13)
22102 * $atan math builtin, TIC54X:            TIC54X-Builtins.     (line  16)
22103 * $atan2 math builtin, TIC54X:           TIC54X-Builtins.     (line  19)
22104 * $ceil math builtin, TIC54X:            TIC54X-Builtins.     (line  22)
22105 * $cos math builtin, TIC54X:             TIC54X-Builtins.     (line  28)
22106 * $cosh math builtin, TIC54X:            TIC54X-Builtins.     (line  25)
22107 * $cvf math builtin, TIC54X:             TIC54X-Builtins.     (line  31)
22108 * $cvi math builtin, TIC54X:             TIC54X-Builtins.     (line  34)
22109 * $d <1>:                                AArch64 Mapping Symbols.
22110                                                               (line  12)
22111 * $d:                                    ARM Mapping Symbols. (line  15)
22112 * $exp math builtin, TIC54X:             TIC54X-Builtins.     (line  37)
22113 * $fabs math builtin, TIC54X:            TIC54X-Builtins.     (line  40)
22114 * $firstch subsym builtin, TIC54X:       TIC54X-Macros.       (line  26)
22115 * $floor math builtin, TIC54X:           TIC54X-Builtins.     (line  43)
22116 * $fmod math builtin, TIC54X:            TIC54X-Builtins.     (line  47)
22117 * $int math builtin, TIC54X:             TIC54X-Builtins.     (line  50)
22118 * $iscons subsym builtin, TIC54X:        TIC54X-Macros.       (line  43)
22119 * $isdefed subsym builtin, TIC54X:       TIC54X-Macros.       (line  34)
22120 * $ismember subsym builtin, TIC54X:      TIC54X-Macros.       (line  38)
22121 * $isname subsym builtin, TIC54X:        TIC54X-Macros.       (line  47)
22122 * $isreg subsym builtin, TIC54X:         TIC54X-Macros.       (line  50)
22123 * $lastch subsym builtin, TIC54X:        TIC54X-Macros.       (line  30)
22124 * $ldexp math builtin, TIC54X:           TIC54X-Builtins.     (line  53)
22125 * $log math builtin, TIC54X:             TIC54X-Builtins.     (line  59)
22126 * $log10 math builtin, TIC54X:           TIC54X-Builtins.     (line  56)
22127 * $max math builtin, TIC54X:             TIC54X-Builtins.     (line  62)
22128 * $min math builtin, TIC54X:             TIC54X-Builtins.     (line  65)
22129 * $pow math builtin, TIC54X:             TIC54X-Builtins.     (line  68)
22130 * $round math builtin, TIC54X:           TIC54X-Builtins.     (line  71)
22131 * $sgn math builtin, TIC54X:             TIC54X-Builtins.     (line  74)
22132 * $sin math builtin, TIC54X:             TIC54X-Builtins.     (line  77)
22133 * $sinh math builtin, TIC54X:            TIC54X-Builtins.     (line  80)
22134 * $sqrt math builtin, TIC54X:            TIC54X-Builtins.     (line  83)
22135 * $structacc subsym builtin, TIC54X:     TIC54X-Macros.       (line  57)
22136 * $structsz subsym builtin, TIC54X:      TIC54X-Macros.       (line  54)
22137 * $symcmp subsym builtin, TIC54X:        TIC54X-Macros.       (line  23)
22138 * $symlen subsym builtin, TIC54X:        TIC54X-Macros.       (line  20)
22139 * $t:                                    ARM Mapping Symbols. (line  12)
22140 * $tan math builtin, TIC54X:             TIC54X-Builtins.     (line  86)
22141 * $tanh math builtin, TIC54X:            TIC54X-Builtins.     (line  89)
22142 * $trunc math builtin, TIC54X:           TIC54X-Builtins.     (line  92)
22143 * $x:                                    AArch64 Mapping Symbols.
22144                                                               (line   9)
22145 * %gp:                                   RX-Modifiers.        (line   6)
22146 * %gpreg:                                RX-Modifiers.        (line  22)
22147 * %pidreg:                               RX-Modifiers.        (line  25)
22148 * -+ option, VAX/VMS:                    VAX-Opts.            (line  71)
22149 * --:                                    Command Line.        (line  10)
22150 * --32 option, i386:                     i386-Options.        (line   8)
22151 * --32 option, x86-64:                   i386-Options.        (line   8)
22152 * --64 option, i386:                     i386-Options.        (line   8)
22153 * --64 option, x86-64:                   i386-Options.        (line   8)
22154 * --absolute-literals:                   Xtensa Options.      (line  21)
22155 * --allow-reg-prefix:                    SH Options.          (line   9)
22156 * --alternate:                           alternate.           (line   6)
22157 * --base-size-default-16:                M68K-Opts.           (line  65)
22158 * --base-size-default-32:                M68K-Opts.           (line  65)
22159 * --big:                                 SH Options.          (line   9)
22160 * --bitwise-or option, M680x0:           M68K-Opts.           (line  58)
22161 * --disp-size-default-16:                M68K-Opts.           (line  74)
22162 * --disp-size-default-32:                M68K-Opts.           (line  74)
22163 * --divide option, i386:                 i386-Options.        (line  24)
22164 * --dsp:                                 SH Options.          (line   9)
22165 * --emulation=crisaout command line option, CRIS: CRIS-Opts.  (line   9)
22166 * --emulation=criself command line option, CRIS: CRIS-Opts.   (line   9)
22167 * --enforce-aligned-data:                Sparc-Aligned-Data.  (line  11)
22168 * --fatal-warnings:                      W.                   (line  16)
22169 * --fdpic:                               SH Options.          (line  31)
22170 * --fix-v4bx command line option, ARM:   ARM Options.         (line 173)
22171 * --fixed-special-register-names command line option, MMIX: MMIX-Opts.
22172                                                               (line   8)
22173 * --force-long-branches:                 M68HC11-Opts.        (line  82)
22174 * --generate-example:                    M68HC11-Opts.        (line  99)
22175 * --globalize-symbols command line option, MMIX: MMIX-Opts.   (line  12)
22176 * --gnu-syntax command line option, MMIX: MMIX-Opts.          (line  16)
22177 * --hash-size=NUMBER:                    Overview.            (line 375)
22178 * --linker-allocated-gregs command line option, MMIX: MMIX-Opts.
22179                                                               (line  67)
22180 * --listing-cont-lines:                  listing.             (line  34)
22181 * --listing-lhs-width:                   listing.             (line  16)
22182 * --listing-lhs-width2:                  listing.             (line  21)
22183 * --listing-rhs-width:                   listing.             (line  28)
22184 * --little:                              SH Options.          (line   9)
22185 * --longcalls:                           Xtensa Options.      (line  35)
22186 * --march=ARCHITECTURE command line option, CRIS: CRIS-Opts.  (line  34)
22187 * --MD:                                  MD.                  (line   6)
22188 * --mul-bug-abort command line option, CRIS: CRIS-Opts.       (line  62)
22189 * --no-absolute-literals:                Xtensa Options.      (line  21)
22190 * --no-expand command line option, MMIX: MMIX-Opts.           (line  31)
22191 * --no-longcalls:                        Xtensa Options.      (line  35)
22192 * --no-merge-gregs command line option, MMIX: MMIX-Opts.      (line  36)
22193 * --no-mul-bug-abort command line option, CRIS: CRIS-Opts.    (line  62)
22194 * --no-predefined-syms command line option, MMIX: MMIX-Opts.  (line  22)
22195 * --no-pushj-stubs command line option, MMIX: MMIX-Opts.      (line  54)
22196 * --no-stubs command line option, MMIX:  MMIX-Opts.           (line  54)
22197 * --no-target-align:                     Xtensa Options.      (line  28)
22198 * --no-text-section-literals:            Xtensa Options.      (line   7)
22199 * --no-transform:                        Xtensa Options.      (line  44)
22200 * --no-underscore command line option, CRIS: CRIS-Opts.       (line  15)
22201 * --no-warn:                             W.                   (line  11)
22202 * --pcrel:                               M68K-Opts.           (line  86)
22203 * --pic command line option, CRIS:       CRIS-Opts.           (line  27)
22204 * --print-insn-syntax <1>:               XGATE-Opts.          (line  25)
22205 * --print-insn-syntax:                   M68HC11-Opts.        (line  88)
22206 * --print-opcodes <1>:                   M68HC11-Opts.        (line  92)
22207 * --print-opcodes:                       XGATE-Opts.          (line  29)
22208 * --register-prefix-optional option, M680x0: M68K-Opts.       (line  45)
22209 * --relax:                               SH Options.          (line   9)
22210 * --relax command line option, MMIX:     MMIX-Opts.           (line  19)
22211 * --rename-section:                      Xtensa Options.      (line  52)
22212 * --renesas:                             SH Options.          (line   9)
22213 * --short-branches:                      M68HC11-Opts.        (line  67)
22214 * --small:                               SH Options.          (line   9)
22215 * --statistics:                          statistics.          (line   6)
22216 * --strict-direct-mode:                  M68HC11-Opts.        (line  57)
22217 * --target-align:                        Xtensa Options.      (line  28)
22218 * --text-section-literals:               Xtensa Options.      (line   7)
22219 * --traditional-format:                  traditional-format.  (line   6)
22220 * --transform:                           Xtensa Options.      (line  44)
22221 * --underscore command line option, CRIS: CRIS-Opts.          (line  15)
22222 * --warn:                                W.                   (line  19)
22223 * --x32 option, i386:                    i386-Options.        (line   8)
22224 * --x32 option, x86-64:                  i386-Options.        (line   8)
22225 * --xgate-ramoffset:                     M68HC11-Opts.        (line  36)
22226 * -1 option, VAX/VMS:                    VAX-Opts.            (line  77)
22227 * -32addr command line option, Alpha:    Alpha Options.       (line  57)
22228 * -a:                                    a.                   (line   6)
22229 * -A options, i960:                      Options-i960.        (line   6)
22230 * -ac:                                   a.                   (line   6)
22231 * -ad:                                   a.                   (line   6)
22232 * -ag:                                   a.                   (line   6)
22233 * -ah:                                   a.                   (line   6)
22234 * -al:                                   a.                   (line   6)
22235 * -an:                                   a.                   (line   6)
22236 * -as:                                   a.                   (line   6)
22237 * -Asparc:                               Sparc-Opts.          (line  25)
22238 * -Asparcfmaf:                           Sparc-Opts.          (line  25)
22239 * -Asparcima:                            Sparc-Opts.          (line  25)
22240 * -Asparclet:                            Sparc-Opts.          (line  25)
22241 * -Asparclite:                           Sparc-Opts.          (line  25)
22242 * -Asparcvis:                            Sparc-Opts.          (line  25)
22243 * -Asparcvis2:                           Sparc-Opts.          (line  25)
22244 * -Asparcvis3:                           Sparc-Opts.          (line  25)
22245 * -Asparcvis3r:                          Sparc-Opts.          (line  25)
22246 * -Av6:                                  Sparc-Opts.          (line  25)
22247 * -Av7:                                  Sparc-Opts.          (line  25)
22248 * -Av8:                                  Sparc-Opts.          (line  25)
22249 * -Av9:                                  Sparc-Opts.          (line  25)
22250 * -Av9a:                                 Sparc-Opts.          (line  25)
22251 * -Av9b:                                 Sparc-Opts.          (line  25)
22252 * -Av9c:                                 Sparc-Opts.          (line  25)
22253 * -Av9d:                                 Sparc-Opts.          (line  25)
22254 * -Av9v:                                 Sparc-Opts.          (line  25)
22255 * -b option, i960:                       Options-i960.        (line  22)
22256 * -big option, M32R:                     M32R-Opts.           (line  35)
22257 * -D:                                    D.                   (line   6)
22258 * -D, ignored on VAX:                    VAX-Opts.            (line  11)
22259 * -d, VAX option:                        VAX-Opts.            (line  16)
22260 * -eabi= command line option, ARM:       ARM Options.         (line 156)
22261 * -EB command line option, AArch64:      AArch64 Options.     (line   6)
22262 * -EB command line option, ARC:          ARC Options.         (line  31)
22263 * -EB command line option, ARM:          ARM Options.         (line 161)
22264 * -EB option (MIPS):                     MIPS Opts.           (line  13)
22265 * -EB option, M32R:                      M32R-Opts.           (line  39)
22266 * -EB option, TILE-Gx:                   TILE-Gx Options.     (line  11)
22267 * -EL command line option, AArch64:      AArch64 Options.     (line  10)
22268 * -EL command line option, ARC:          ARC Options.         (line  35)
22269 * -EL command line option, ARM:          ARM Options.         (line 165)
22270 * -EL option (MIPS):                     MIPS Opts.           (line  13)
22271 * -EL option, M32R:                      M32R-Opts.           (line  32)
22272 * -EL option, TILE-Gx:                   TILE-Gx Options.     (line  11)
22273 * -f:                                    f.                   (line   6)
22274 * -F command line option, Alpha:         Alpha Options.       (line  57)
22275 * -g command line option, Alpha:         Alpha Options.       (line  47)
22276 * -G command line option, Alpha:         Alpha Options.       (line  53)
22277 * -G option (MIPS):                      MIPS Opts.           (line   8)
22278 * -H option, VAX/VMS:                    VAX-Opts.            (line  81)
22279 * -h option, VAX/VMS:                    VAX-Opts.            (line  45)
22280 * -I PATH:                               I.                   (line   6)
22281 * -ignore-parallel-conflicts option, M32RX: M32R-Opts.        (line  87)
22282 * -Ip option, M32RX:                     M32R-Opts.           (line  97)
22283 * -J, ignored on VAX:                    VAX-Opts.            (line  27)
22284 * -K:                                    K.                   (line   6)
22285 * -k command line option, ARM:           ARM Options.         (line 169)
22286 * -KPIC option, M32R:                    M32R-Opts.           (line  42)
22287 * -KPIC option, MIPS:                    MIPS Opts.           (line  21)
22288 * -L:                                    L.                   (line   6)
22289 * -l option, M680x0:                     M68K-Opts.           (line  33)
22290 * -little option, M32R:                  M32R-Opts.           (line  27)
22291 * -M:                                    M.                   (line   6)
22292 * -m11/03:                               PDP-11-Options.      (line 140)
22293 * -m11/04:                               PDP-11-Options.      (line 143)
22294 * -m11/05:                               PDP-11-Options.      (line 146)
22295 * -m11/10:                               PDP-11-Options.      (line 146)
22296 * -m11/15:                               PDP-11-Options.      (line 149)
22297 * -m11/20:                               PDP-11-Options.      (line 149)
22298 * -m11/21:                               PDP-11-Options.      (line 152)
22299 * -m11/23:                               PDP-11-Options.      (line 155)
22300 * -m11/24:                               PDP-11-Options.      (line 155)
22301 * -m11/34:                               PDP-11-Options.      (line 158)
22302 * -m11/34a:                              PDP-11-Options.      (line 161)
22303 * -m11/35:                               PDP-11-Options.      (line 164)
22304 * -m11/40:                               PDP-11-Options.      (line 164)
22305 * -m11/44:                               PDP-11-Options.      (line 167)
22306 * -m11/45:                               PDP-11-Options.      (line 170)
22307 * -m11/50:                               PDP-11-Options.      (line 170)
22308 * -m11/53:                               PDP-11-Options.      (line 173)
22309 * -m11/55:                               PDP-11-Options.      (line 170)
22310 * -m11/60:                               PDP-11-Options.      (line 176)
22311 * -m11/70:                               PDP-11-Options.      (line 170)
22312 * -m11/73:                               PDP-11-Options.      (line 173)
22313 * -m11/83:                               PDP-11-Options.      (line 173)
22314 * -m11/84:                               PDP-11-Options.      (line 173)
22315 * -m11/93:                               PDP-11-Options.      (line 173)
22316 * -m11/94:                               PDP-11-Options.      (line 173)
22317 * -m16c option, M16C:                    M32C-Opts.           (line  12)
22318 * -m31 option, s390:                     s390 Options.        (line   8)
22319 * -m32 option, TILE-Gx:                  TILE-Gx Options.     (line   8)
22320 * -m32bit-doubles:                       RX-Opts.             (line   9)
22321 * -m32c option, M32C:                    M32C-Opts.           (line   9)
22322 * -m32r option, M32R:                    M32R-Opts.           (line  21)
22323 * -m32rx option, M32R2:                  M32R-Opts.           (line  17)
22324 * -m32rx option, M32RX:                  M32R-Opts.           (line   9)
22325 * -m64 option, s390:                     s390 Options.        (line   8)
22326 * -m64 option, TILE-Gx:                  TILE-Gx Options.     (line   8)
22327 * -m64bit-doubles:                       RX-Opts.             (line  15)
22328 * -m68000 and related options:           M68K-Opts.           (line  98)
22329 * -m68hc11:                              M68HC11-Opts.        (line   9)
22330 * -m68hc12:                              M68HC11-Opts.        (line  14)
22331 * -m68hcs12:                             M68HC11-Opts.        (line  21)
22332 * -m[no-]68851 command line option, M680x0: M68K-Opts.        (line  21)
22333 * -m[no-]68881 command line option, M680x0: M68K-Opts.        (line  21)
22334 * -m[no-]div command line option, M680x0: M68K-Opts.          (line  21)
22335 * -m[no-]emac command line option, M680x0: M68K-Opts.         (line  21)
22336 * -m[no-]float command line option, M680x0: M68K-Opts.        (line  21)
22337 * -m[no-]mac command line option, M680x0: M68K-Opts.          (line  21)
22338 * -m[no-]usp command line option, M680x0: M68K-Opts.          (line  21)
22339 * -mall:                                 PDP-11-Options.      (line  26)
22340 * -mall-enabled command line option, LM32: LM32 Options.      (line  30)
22341 * -mall-extensions:                      PDP-11-Options.      (line  26)
22342 * -mall-opcodes command line option, AVR: AVR Options.        (line  96)
22343 * -mapcs-26 command line option, ARM:    ARM Options.         (line 128)
22344 * -mapcs-32 command line option, ARM:    ARM Options.         (line 128)
22345 * -mapcs-float command line option, ARM: ARM Options.         (line 142)
22346 * -mapcs-reentrant command line option, ARM: ARM Options.     (line 147)
22347 * -marc[5|6|7|8] command line option, ARC: ARC Options.       (line   6)
22348 * -march= command line option, ARM:      ARM Options.         (line  65)
22349 * -march= command line option, M680x0:   M68K-Opts.           (line   8)
22350 * -march= command line option, TIC6X:    TIC6X Options.       (line   6)
22351 * -march= option, i386:                  i386-Options.        (line  31)
22352 * -march= option, s390:                  s390 Options.        (line  25)
22353 * -march= option, x86-64:                i386-Options.        (line  31)
22354 * -matpcs command line option, ARM:      ARM Options.         (line 134)
22355 * -mavxscalar= option, i386:             i386-Options.        (line  81)
22356 * -mavxscalar= option, x86-64:           i386-Options.        (line  81)
22357 * -mbarrel-shift-enabled command line option, LM32: LM32 Options.
22358                                                               (line  12)
22359 * -mbig-endian:                          RX-Opts.             (line  20)
22360 * -mbreak-enabled command line option, LM32: LM32 Options.    (line  27)
22361 * -mcis:                                 PDP-11-Options.      (line  32)
22362 * -mconstant-gp command line option, IA-64: IA-64 Options.    (line   6)
22363 * -mCPU command line option, Alpha:      Alpha Options.       (line   6)
22364 * -mcpu option, cpu:                     TIC54X-Opts.         (line  15)
22365 * -mcpu= command line option, ARM:       ARM Options.         (line   6)
22366 * -mcpu= command line option, Blackfin:  Blackfin Options.    (line   6)
22367 * -mcpu= command line option, M680x0:    M68K-Opts.           (line  14)
22368 * -mcsm:                                 PDP-11-Options.      (line  43)
22369 * -mdcache-enabled command line option, LM32: LM32 Options.   (line  24)
22370 * -mdebug command line option, Alpha:    Alpha Options.       (line  25)
22371 * -mdivide-enabled command line option, LM32: LM32 Options.   (line   9)
22372 * -mdsbt command line option, TIC6X:     TIC6X Options.       (line  13)
22373 * -me option, stderr redirect:           TIC54X-Opts.         (line  20)
22374 * -meis:                                 PDP-11-Options.      (line  46)
22375 * -mepiphany command line option, Epiphany: Epiphany Options. (line   9)
22376 * -mepiphany16 command line option, Epiphany: Epiphany Options.
22377                                                               (line  13)
22378 * -merrors-to-file option, stderr redirect: TIC54X-Opts.      (line  20)
22379 * -mesa option, s390:                    s390 Options.        (line  17)
22380 * -mf option, far-mode:                  TIC54X-Opts.         (line   8)
22381 * -mf11:                                 PDP-11-Options.      (line 122)
22382 * -mfar-mode option, far-mode:           TIC54X-Opts.         (line   8)
22383 * -mfdpic command line option, Blackfin: Blackfin Options.    (line  19)
22384 * -mfis:                                 PDP-11-Options.      (line  51)
22385 * -mfloat-abi= command line option, ARM: ARM Options.         (line 151)
22386 * -mfp-11:                               PDP-11-Options.      (line  56)
22387 * -mfpp:                                 PDP-11-Options.      (line  56)
22388 * -mfpu:                                 PDP-11-Options.      (line  56)
22389 * -mfpu= command line option, ARM:       ARM Options.         (line  81)
22390 * -micache-enabled command line option, LM32: LM32 Options.   (line  21)
22391 * -mimplicit-it command line option, ARM: ARM Options.        (line 112)
22392 * -mint-register:                        RX-Opts.             (line  57)
22393 * -mip2022 option, IP2K:                 IP2K-Opts.           (line  14)
22394 * -mip2022ext option, IP2022:            IP2K-Opts.           (line   9)
22395 * -mj11:                                 PDP-11-Options.      (line 126)
22396 * -mka11:                                PDP-11-Options.      (line  92)
22397 * -mkb11:                                PDP-11-Options.      (line  95)
22398 * -mkd11a:                               PDP-11-Options.      (line  98)
22399 * -mkd11b:                               PDP-11-Options.      (line 101)
22400 * -mkd11d:                               PDP-11-Options.      (line 104)
22401 * -mkd11e:                               PDP-11-Options.      (line 107)
22402 * -mkd11f:                               PDP-11-Options.      (line 110)
22403 * -mkd11h:                               PDP-11-Options.      (line 110)
22404 * -mkd11k:                               PDP-11-Options.      (line 114)
22405 * -mkd11q:                               PDP-11-Options.      (line 110)
22406 * -mkd11z:                               PDP-11-Options.      (line 118)
22407 * -mkev11:                               PDP-11-Options.      (line  51)
22408 * -mlimited-eis:                         PDP-11-Options.      (line  64)
22409 * -mlittle-endian:                       RX-Opts.             (line  26)
22410 * -mlong <1>:                            M68HC11-Opts.        (line  45)
22411 * -mlong:                                XGATE-Opts.          (line  13)
22412 * -mlong-double <1>:                     XGATE-Opts.          (line  21)
22413 * -mlong-double:                         M68HC11-Opts.        (line  53)
22414 * -mm9s12x:                              M68HC11-Opts.        (line  27)
22415 * -mm9s12xg:                             M68HC11-Opts.        (line  32)
22416 * -mmcu= command line option, AVR:       AVR Options.         (line   6)
22417 * -mmfpt:                                PDP-11-Options.      (line  70)
22418 * -mmicrocode:                           PDP-11-Options.      (line  83)
22419 * -mmnemonic= option, i386:              i386-Options.        (line  89)
22420 * -mmnemonic= option, x86-64:            i386-Options.        (line  89)
22421 * -mmultiply-enabled command line option, LM32: LM32 Options. (line   6)
22422 * -mmutiproc:                            PDP-11-Options.      (line  73)
22423 * -mmxps:                                PDP-11-Options.      (line  77)
22424 * -mnaked-reg option, i386:              i386-Options.        (line 101)
22425 * -mnaked-reg option, x86-64:            i386-Options.        (line 101)
22426 * -mno-cis:                              PDP-11-Options.      (line  32)
22427 * -mno-csm:                              PDP-11-Options.      (line  43)
22428 * -mno-dsbt command line option, TIC6X:  TIC6X Options.       (line  13)
22429 * -mno-eis:                              PDP-11-Options.      (line  46)
22430 * -mno-extensions:                       PDP-11-Options.      (line  29)
22431 * -mno-fdpic command line option, Blackfin: Blackfin Options. (line  22)
22432 * -mno-fis:                              PDP-11-Options.      (line  51)
22433 * -mno-fp-11:                            PDP-11-Options.      (line  56)
22434 * -mno-fpp:                              PDP-11-Options.      (line  56)
22435 * -mno-fpu:                              PDP-11-Options.      (line  56)
22436 * -mno-kev11:                            PDP-11-Options.      (line  51)
22437 * -mno-limited-eis:                      PDP-11-Options.      (line  64)
22438 * -mno-mfpt:                             PDP-11-Options.      (line  70)
22439 * -mno-microcode:                        PDP-11-Options.      (line  83)
22440 * -mno-mutiproc:                         PDP-11-Options.      (line  73)
22441 * -mno-mxps:                             PDP-11-Options.      (line  77)
22442 * -mno-pic:                              PDP-11-Options.      (line  11)
22443 * -mno-pic command line option, TIC6X:   TIC6X Options.       (line  36)
22444 * -mno-regnames option, s390:            s390 Options.        (line  35)
22445 * -mno-skip-bug command line option, AVR: AVR Options.        (line  99)
22446 * -mno-spl:                              PDP-11-Options.      (line  80)
22447 * -mno-sym32:                            MIPS Opts.           (line 222)
22448 * -mno-wrap command line option, AVR:    AVR Options.         (line 102)
22449 * -mnopic command line option, Blackfin: Blackfin Options.    (line  22)
22450 * -mpic:                                 PDP-11-Options.      (line  11)
22451 * -mpic command line option, TIC6X:      TIC6X Options.       (line  36)
22452 * -mpid:                                 RX-Opts.             (line  50)
22453 * -mpid= command line option, TIC6X:     TIC6X Options.       (line  23)
22454 * -mregnames option, s390:               s390 Options.        (line  32)
22455 * -mrelax command line option, V850:     V850 Options.        (line  63)
22456 * -mshort <1>:                           M68HC11-Opts.        (line  40)
22457 * -mshort:                               XGATE-Opts.          (line   8)
22458 * -mshort-double <1>:                    XGATE-Opts.          (line  17)
22459 * -mshort-double:                        M68HC11-Opts.        (line  49)
22460 * -msign-extend-enabled command line option, LM32: LM32 Options.
22461                                                               (line  15)
22462 * -msmall-data-limit:                    RX-Opts.             (line  42)
22463 * -mspl:                                 PDP-11-Options.      (line  80)
22464 * -msse-check= option, i386:             i386-Options.        (line  71)
22465 * -msse-check= option, x86-64:           i386-Options.        (line  71)
22466 * -msse2avx option, i386:                i386-Options.        (line  67)
22467 * -msse2avx option, x86-64:              i386-Options.        (line  67)
22468 * -msym32:                               MIPS Opts.           (line 222)
22469 * -msyntax= option, i386:                i386-Options.        (line  95)
22470 * -msyntax= option, x86-64:              i386-Options.        (line  95)
22471 * -mt11:                                 PDP-11-Options.      (line 130)
22472 * -mthumb command line option, ARM:      ARM Options.         (line 103)
22473 * -mthumb-interwork command line option, ARM: ARM Options.    (line 108)
22474 * -mtune= option, i386:                  i386-Options.        (line  59)
22475 * -mtune= option, x86-64:                i386-Options.        (line  59)
22476 * -muse-conventional-section-names:      RX-Opts.             (line  33)
22477 * -muse-renesas-section-names:           RX-Opts.             (line  37)
22478 * -muser-enabled command line option, LM32: LM32 Options.     (line  18)
22479 * -mv850 command line option, V850:      V850 Options.        (line  23)
22480 * -mv850any command line option, V850:   V850 Options.        (line  41)
22481 * -mv850e command line option, V850:     V850 Options.        (line  29)
22482 * -mv850e1 command line option, V850:    V850 Options.        (line  35)
22483 * -mv850e2 command line option, V850:    V850 Options.        (line  51)
22484 * -mv850e2v3 command line option, V850:  V850 Options.        (line  57)
22485 * -mvxworks-pic option, MIPS:            MIPS Opts.           (line  26)
22486 * -mwarn-areg-zero option, s390:         s390 Options.        (line  38)
22487 * -mwarn-deprecated command line option, ARM: ARM Options.    (line 177)
22488 * -mzarch option, s390:                  s390 Options.        (line  17)
22489 * -N command line option, CRIS:          CRIS-Opts.           (line  58)
22490 * -nIp option, M32RX:                    M32R-Opts.           (line 101)
22491 * -no-bitinst, M32R2:                    M32R-Opts.           (line  54)
22492 * -no-ignore-parallel-conflicts option, M32RX: M32R-Opts.     (line  93)
22493 * -no-mdebug command line option, Alpha: Alpha Options.       (line  25)
22494 * -no-parallel option, M32RX:            M32R-Opts.           (line  51)
22495 * -no-relax option, i960:                Options-i960.        (line  66)
22496 * -no-warn-explicit-parallel-conflicts option, M32RX: M32R-Opts.
22497                                                               (line  79)
22498 * -no-warn-unmatched-high option, M32R:  M32R-Opts.           (line 111)
22499 * -nocpp ignored (MIPS):                 MIPS Opts.           (line 225)
22500 * -noreplace command line option, Alpha: Alpha Options.       (line  40)
22501 * -o:                                    o.                   (line   6)
22502 * -O option, M32RX:                      M32R-Opts.           (line  59)
22503 * -parallel option, M32RX:               M32R-Opts.           (line  46)
22504 * -R:                                    R.                   (line   6)
22505 * -r800 command line option, Z80:        Z80 Options.         (line  41)
22506 * -relax command line option, Alpha:     Alpha Options.       (line  32)
22507 * -replace command line option, Alpha:   Alpha Options.       (line  40)
22508 * -S, ignored on VAX:                    VAX-Opts.            (line  11)
22509 * -t, ignored on VAX:                    VAX-Opts.            (line  36)
22510 * -T, ignored on VAX:                    VAX-Opts.            (line  11)
22511 * -v:                                    v.                   (line   6)
22512 * -V, redundant on VAX:                  VAX-Opts.            (line  22)
22513 * -version:                              v.                   (line   6)
22514 * -W:                                    W.                   (line  11)
22515 * -warn-explicit-parallel-conflicts option, M32RX: M32R-Opts. (line  65)
22516 * -warn-unmatched-high option, M32R:     M32R-Opts.           (line 105)
22517 * -Wnp option, M32RX:                    M32R-Opts.           (line  83)
22518 * -Wnuh option, M32RX:                   M32R-Opts.           (line 117)
22519 * -Wp option, M32RX:                     M32R-Opts.           (line  75)
22520 * -wsigned_overflow command line option, V850: V850 Options.  (line   9)
22521 * -Wuh option, M32RX:                    M32R-Opts.           (line 114)
22522 * -wunsigned_overflow command line option, V850: V850 Options.
22523                                                               (line  16)
22524 * -x command line option, MMIX:          MMIX-Opts.           (line  44)
22525 * -z80 command line option, Z80:         Z80 Options.         (line   8)
22526 * -z8001 command line option, Z8000:     Z8000 Options.       (line   6)
22527 * -z8002 command line option, Z8000:     Z8000 Options.       (line   9)
22528 * . (symbol):                            Dot.                 (line   6)
22529 * .2byte directive, ARM:                 ARM Directives.      (line   6)
22530 * .4byte directive, ARM:                 ARM Directives.      (line   6)
22531 * .8byte directive, ARM:                 ARM Directives.      (line   6)
22532 * .align directive, ARM:                 ARM Directives.      (line  11)
22533 * .align directive, TILE-Gx:             TILE-Gx Directives.  (line   6)
22534 * .align directive, TILEPro:             TILEPro Directives.  (line   6)
22535 * .allow_suspicious_bundles directive, TILE-Gx: TILE-Gx Directives.
22536                                                               (line  10)
22537 * .allow_suspicious_bundles directive, TILEPro: TILEPro Directives.
22538                                                               (line  10)
22539 * .arch directive, ARM:                  ARM Directives.      (line  18)
22540 * .arch directive, TIC6X:                TIC6X Directives.    (line  10)
22541 * .arch_extension directive, ARM:        ARM Directives.      (line  25)
22542 * .arm directive, ARM:                   ARM Directives.      (line  34)
22543 * .big directive, M32RX:                 M32R-Directives.     (line  88)
22544 * .bss directive, AArch64:               AArch64 Directives.  (line   6)
22545 * .bss directive, ARM:                   ARM Directives.      (line  42)
22546 * .c6xabi_attribute directive, TIC6X:    TIC6X Directives.    (line  20)
22547 * .cantunwind directive, ARM:            ARM Directives.      (line  45)
22548 * .cantunwind directive, TIC6X:          TIC6X Directives.    (line  13)
22549 * .code directive, ARM:                  ARM Directives.      (line  49)
22550 * .cpu directive, ARM:                   ARM Directives.      (line  53)
22551 * .dn and .qn directives, ARM:           ARM Directives.      (line  60)
22552 * .eabi_attribute directive, ARM:        ARM Directives.      (line  83)
22553 * .ehtype directive, TIC6X:              TIC6X Directives.    (line  31)
22554 * .endp directive, TIC6X:                TIC6X Directives.    (line  34)
22555 * .even directive, ARM:                  ARM Directives.      (line 111)
22556 * .extend directive, ARM:                ARM Directives.      (line 114)
22557 * .fnend directive, ARM:                 ARM Directives.      (line 120)
22558 * .fnstart directive, ARM:               ARM Directives.      (line 129)
22559 * .force_thumb directive, ARM:           ARM Directives.      (line 132)
22560 * .fpu directive, ARM:                   ARM Directives.      (line 136)
22561 * .global:                               MIPS insn.           (line  12)
22562 * .handlerdata directive, ARM:           ARM Directives.      (line 140)
22563 * .handlerdata directive, TIC6X:         TIC6X Directives.    (line  39)
22564 * .insn:                                 MIPS insn.           (line   6)
22565 * .insn directive, s390:                 s390 Directives.     (line  11)
22566 * .inst directive, ARM:                  ARM Directives.      (line 149)
22567 * .ldouble directive, ARM:               ARM Directives.      (line 114)
22568 * .little directive, M32RX:              M32R-Directives.     (line  82)
22569 * .long directive, s390:                 s390 Directives.     (line  16)
22570 * .ltorg directive, AArch64:             AArch64 Directives.  (line   9)
22571 * .ltorg directive, ARM:                 ARM Directives.      (line 159)
22572 * .ltorg directive, s390:                s390 Directives.     (line  88)
22573 * .m32r directive, M32R:                 M32R-Directives.     (line  66)
22574 * .m32r2 directive, M32R2:               M32R-Directives.     (line  77)
22575 * .m32rx directive, M32RX:               M32R-Directives.     (line  72)
22576 * .machine directive, s390:              s390 Directives.     (line  93)
22577 * .movsp directive, ARM:                 ARM Directives.      (line 173)
22578 * .no_pointers directive, XStormy16:     XStormy16 Directives.
22579                                                               (line  14)
22580 * .nocmp directive, TIC6X:               TIC6X Directives.    (line  47)
22581 * .o:                                    Object.              (line   6)
22582 * .object_arch directive, ARM:           ARM Directives.      (line 178)
22583 * .packed directive, ARM:                ARM Directives.      (line 184)
22584 * .pad directive, ARM:                   ARM Directives.      (line 189)
22585 * .param on HPPA:                        HPPA Directives.     (line  19)
22586 * .personality directive, ARM:           ARM Directives.      (line 194)
22587 * .personality directive, TIC6X:         TIC6X Directives.    (line  55)
22588 * .personalityindex directive, ARM:      ARM Directives.      (line 197)
22589 * .personalityindex directive, TIC6X:    TIC6X Directives.    (line  51)
22590 * .pool directive, AArch64:              AArch64 Directives.  (line  23)
22591 * .pool directive, ARM:                  ARM Directives.      (line 201)
22592 * .quad directive, s390:                 s390 Directives.     (line  16)
22593 * .req directive, AArch64:               AArch64 Directives.  (line  26)
22594 * .req directive, ARM:                   ARM Directives.      (line 204)
22595 * .require_canonical_reg_names directive, TILE-Gx: TILE-Gx Directives.
22596                                                               (line  19)
22597 * .require_canonical_reg_names directive, TILEPro: TILEPro Directives.
22598                                                               (line  19)
22599 * .save directive, ARM:                  ARM Directives.      (line 209)
22600 * .scomm directive, TIC6X:               TIC6X Directives.    (line  58)
22601 * .secrel32 directive, ARM:              ARM Directives.      (line 247)
22602 * .set arch=CPU:                         MIPS ISA.            (line  18)
22603 * .set autoextend:                       MIPS autoextend.     (line   6)
22604 * .set doublefloat:                      MIPS floating-point. (line  12)
22605 * .set dsp:                              MIPS ASE instruction generation overrides.
22606                                                               (line  21)
22607 * .set dspr2:                            MIPS ASE instruction generation overrides.
22608                                                               (line  26)
22609 * .set hardfloat:                        MIPS floating-point. (line   6)
22610 * .set mcu:                              MIPS ASE instruction generation overrides.
22611                                                               (line  37)
22612 * .set mdmx:                             MIPS ASE instruction generation overrides.
22613                                                               (line  16)
22614 * .set mips3d:                           MIPS ASE instruction generation overrides.
22615                                                               (line   6)
22616 * .set mipsN:                            MIPS ISA.            (line   6)
22617 * .set mt:                               MIPS ASE instruction generation overrides.
22618                                                               (line  32)
22619 * .set noautoextend:                     MIPS autoextend.     (line   6)
22620 * .set nodsp:                            MIPS ASE instruction generation overrides.
22621                                                               (line  21)
22622 * .set nodspr2:                          MIPS ASE instruction generation overrides.
22623                                                               (line  26)
22624 * .set nomcu:                            MIPS ASE instruction generation overrides.
22625                                                               (line  37)
22626 * .set nomdmx:                           MIPS ASE instruction generation overrides.
22627                                                               (line  16)
22628 * .set nomips3d:                         MIPS ASE instruction generation overrides.
22629                                                               (line   6)
22630 * .set nomt:                             MIPS ASE instruction generation overrides.
22631                                                               (line  32)
22632 * .set nosmartmips:                      MIPS ASE instruction generation overrides.
22633                                                               (line  11)
22634 * .set nosym32:                          MIPS symbol sizes.   (line   6)
22635 * .set pop:                              MIPS option stack.   (line   6)
22636 * .set push:                             MIPS option stack.   (line   6)
22637 * .set singlefloat:                      MIPS floating-point. (line  12)
22638 * .set smartmips:                        MIPS ASE instruction generation overrides.
22639                                                               (line  11)
22640 * .set softfloat:                        MIPS floating-point. (line   6)
22641 * .set sym32:                            MIPS symbol sizes.   (line   6)
22642 * .setfp directive, ARM:                 ARM Directives.      (line 233)
22643 * .short directive, s390:                s390 Directives.     (line  16)
22644 * .syntax directive, ARM:                ARM Directives.      (line 252)
22645 * .thumb directive, ARM:                 ARM Directives.      (line 256)
22646 * .thumb_func directive, ARM:            ARM Directives.      (line 259)
22647 * .thumb_set directive, ARM:             ARM Directives.      (line 270)
22648 * .tlsdescseq directive, ARM:            ARM Directives.      (line 277)
22649 * .unreq directive, AArch64:             AArch64 Directives.  (line  31)
22650 * .unreq directive, ARM:                 ARM Directives.      (line 282)
22651 * .unwind_raw directive, ARM:            ARM Directives.      (line 293)
22652 * .v850 directive, V850:                 V850 Directives.     (line  14)
22653 * .v850e directive, V850:                V850 Directives.     (line  20)
22654 * .v850e1 directive, V850:               V850 Directives.     (line  26)
22655 * .v850e2 directive, V850:               V850 Directives.     (line  32)
22656 * .v850e2v3 directive, V850:             V850 Directives.     (line  38)
22657 * .vsave directive, ARM:                 ARM Directives.      (line 300)
22658 * .z8001:                                Z8000 Directives.    (line  11)
22659 * .z8002:                                Z8000 Directives.    (line  15)
22660 * 16-bit code, i386:                     i386-16bit.          (line   6)
22661 * 16bit_pointers directive, XStormy16:   XStormy16 Directives.
22662                                                               (line   6)
22663 * 2byte directive, ARC:                  ARC Directives.      (line   9)
22664 * 32bit_pointers directive, XStormy16:   XStormy16 Directives.
22665                                                               (line  10)
22666 * 3byte directive, ARC:                  ARC Directives.      (line  12)
22667 * 3DNow!, i386:                          i386-SIMD.           (line   6)
22668 * 3DNow!, x86-64:                        i386-SIMD.           (line   6)
22669 * 430 support:                           MSP430-Dependent.    (line   6)
22670 * 4byte directive, ARC:                  ARC Directives.      (line  15)
22671 * : (label):                             Statements.          (line  31)
22672 * @hi pseudo-op, XStormy16:              XStormy16 Opcodes.   (line  21)
22673 * @lo pseudo-op, XStormy16:              XStormy16 Opcodes.   (line  10)
22674 * @word modifier, D10V:                  D10V-Word.           (line   6)
22675 * \" (doublequote character):            Strings.             (line  43)
22676 * \\ (\ character):                      Strings.             (line  40)
22677 * \b (backspace character):              Strings.             (line  15)
22678 * \DDD (octal character code):           Strings.             (line  30)
22679 * \f (formfeed character):               Strings.             (line  18)
22680 * \n (newline character):                Strings.             (line  21)
22681 * \r (carriage return character):        Strings.             (line  24)
22682 * \t (tab):                              Strings.             (line  27)
22683 * \XD... (hex character code):           Strings.             (line  36)
22684 * _ opcode prefix:                       Xtensa Opcodes.      (line   9)
22685 * a.out:                                 Object.              (line   6)
22686 * a.out symbol attributes:               a.out Symbols.       (line   6)
22687 * A_DIR environment variable, TIC54X:    TIC54X-Env.          (line   6)
22688 * AArch64 floating point (IEEE):         AArch64 Floating Point.
22689                                                               (line   6)
22690 * AArch64 immediate character:           AArch64-Chars.       (line  13)
22691 * AArch64 line comment character:        AArch64-Chars.       (line   6)
22692 * AArch64 line separator:                AArch64-Chars.       (line  10)
22693 * AArch64 machine directives:            AArch64 Directives.  (line   6)
22694 * AArch64 opcodes:                       AArch64 Opcodes.     (line   6)
22695 * AArch64 options (none):                AArch64 Options.     (line   6)
22696 * AArch64 register names:                AArch64-Regs.        (line   6)
22697 * AArch64 relocations:                   AArch64-Relocations. (line   6)
22698 * AArch64 support:                       AArch64-Dependent.   (line   6)
22699 * ABI options, SH64:                     SH64 Options.        (line  29)
22700 * abort directive:                       Abort.               (line   6)
22701 * ABORT directive:                       ABORT (COFF).        (line   6)
22702 * absolute section:                      Ld Sections.         (line  29)
22703 * absolute-literals directive:           Absolute Literals Directive.
22704                                                               (line   6)
22705 * ADDI instructions, relaxation:         Xtensa Immediate Relaxation.
22706                                                               (line  43)
22707 * addition, permitted arguments:         Infix Ops.           (line  44)
22708 * addresses:                             Expressions.         (line   6)
22709 * addresses, format of:                  Secs Background.     (line  68)
22710 * addressing modes, D10V:                D10V-Addressing.     (line   6)
22711 * addressing modes, D30V:                D30V-Addressing.     (line   6)
22712 * addressing modes, H8/300:              H8/300-Addressing.   (line   6)
22713 * addressing modes, M680x0:              M68K-Syntax.         (line  21)
22714 * addressing modes, M68HC11:             M68HC11-Syntax.      (line  30)
22715 * addressing modes, SH:                  SH-Addressing.       (line   6)
22716 * addressing modes, SH64:                SH64-Addressing.     (line   6)
22717 * addressing modes, XGATE:               XGATE-Syntax.        (line  29)
22718 * addressing modes, Z8000:               Z8000-Addressing.    (line   6)
22719 * ADR reg,<label> pseudo op, ARM:        ARM Opcodes.         (line  25)
22720 * ADRL reg,<label> pseudo op, ARM:       ARM Opcodes.         (line  35)
22721 * ADRP, ADD, LDR/STR group relocations, AArch64: AArch64-Relocations.
22722                                                               (line  14)
22723 * advancing location counter:            Org.                 (line   6)
22724 * align directive:                       Align.               (line   6)
22725 * align directive, SPARC:                Sparc-Directives.    (line   9)
22726 * align directive, TIC54X:               TIC54X-Directives.   (line   6)
22727 * aligned instruction bundle:            Bundle directives.   (line   6)
22728 * alignment for NEON instructions:       ARM-Neon-Alignment.  (line   6)
22729 * alignment of branch targets:           Xtensa Automatic Alignment.
22730                                                               (line   6)
22731 * alignment of LOOP instructions:        Xtensa Automatic Alignment.
22732                                                               (line   6)
22733 * Alpha floating point (IEEE):           Alpha Floating Point.
22734                                                               (line   6)
22735 * Alpha line comment character:          Alpha-Chars.         (line   6)
22736 * Alpha line separator:                  Alpha-Chars.         (line  11)
22737 * Alpha notes:                           Alpha Notes.         (line   6)
22738 * Alpha options:                         Alpha Options.       (line   6)
22739 * Alpha registers:                       Alpha-Regs.          (line   6)
22740 * Alpha relocations:                     Alpha-Relocs.        (line   6)
22741 * Alpha support:                         Alpha-Dependent.     (line   6)
22742 * Alpha Syntax:                          Alpha Options.       (line  61)
22743 * Alpha-only directives:                 Alpha Directives.    (line  10)
22744 * altered difference tables:             Word.                (line  12)
22745 * alternate syntax for the 680x0:        M68K-Moto-Syntax.    (line   6)
22746 * ARC floating point (IEEE):             ARC Floating Point.  (line   6)
22747 * ARC line comment character:            ARC-Chars.           (line   6)
22748 * ARC line separator:                    ARC-Chars.           (line  12)
22749 * ARC machine directives:                ARC Directives.      (line   6)
22750 * ARC opcodes:                           ARC Opcodes.         (line   6)
22751 * ARC options (none):                    ARC Options.         (line   6)
22752 * ARC register names:                    ARC-Regs.            (line   6)
22753 * ARC support:                           ARC-Dependent.       (line   6)
22754 * arc5 arc5, ARC:                        ARC Options.         (line  10)
22755 * arc6 arc6, ARC:                        ARC Options.         (line  13)
22756 * arc7 arc7, ARC:                        ARC Options.         (line  21)
22757 * arc8 arc8, ARC:                        ARC Options.         (line  24)
22758 * arch directive, i386:                  i386-Arch.           (line   6)
22759 * arch directive, M680x0:                M68K-Directives.     (line  22)
22760 * arch directive, x86-64:                i386-Arch.           (line   6)
22761 * architecture options, i960:            Options-i960.        (line   6)
22762 * architecture options, IP2022:          IP2K-Opts.           (line   9)
22763 * architecture options, IP2K:            IP2K-Opts.           (line  14)
22764 * architecture options, M16C:            M32C-Opts.           (line  12)
22765 * architecture options, M32C:            M32C-Opts.           (line   9)
22766 * architecture options, M32R:            M32R-Opts.           (line  21)
22767 * architecture options, M32R2:           M32R-Opts.           (line  17)
22768 * architecture options, M32RX:           M32R-Opts.           (line   9)
22769 * architecture options, M680x0:          M68K-Opts.           (line  98)
22770 * Architecture variant option, CRIS:     CRIS-Opts.           (line  34)
22771 * architectures, PowerPC:                PowerPC-Opts.        (line   6)
22772 * architectures, SCORE:                  SCORE-Opts.          (line   6)
22773 * architectures, SPARC:                  Sparc-Opts.          (line   6)
22774 * arguments for addition:                Infix Ops.           (line  44)
22775 * arguments for subtraction:             Infix Ops.           (line  49)
22776 * arguments in expressions:              Arguments.           (line   6)
22777 * arithmetic functions:                  Operators.           (line   6)
22778 * arithmetic operands:                   Arguments.           (line   6)
22779 * ARM data relocations:                  ARM-Relocations.     (line   6)
22780 * ARM floating point (IEEE):             ARM Floating Point.  (line   6)
22781 * ARM identifiers:                       ARM-Chars.           (line  19)
22782 * ARM immediate character:               ARM-Chars.           (line  17)
22783 * ARM line comment character:            ARM-Chars.           (line   6)
22784 * ARM line separator:                    ARM-Chars.           (line  14)
22785 * ARM machine directives:                ARM Directives.      (line   6)
22786 * ARM opcodes:                           ARM Opcodes.         (line   6)
22787 * ARM options (none):                    ARM Options.         (line   6)
22788 * ARM register names:                    ARM-Regs.            (line   6)
22789 * ARM support:                           ARM-Dependent.       (line   6)
22790 * ascii directive:                       Ascii.               (line   6)
22791 * asciz directive:                       Asciz.               (line   6)
22792 * asg directive, TIC54X:                 TIC54X-Directives.   (line  20)
22793 * assembler bugs, reporting:             Bug Reporting.       (line   6)
22794 * assembler crash:                       Bug Criteria.        (line   9)
22795 * assembler directive .3byte, RX:        RX-Directives.       (line   9)
22796 * assembler directive .arch, CRIS:       CRIS-Pseudos.        (line  45)
22797 * assembler directive .dword, CRIS:      CRIS-Pseudos.        (line  12)
22798 * assembler directive .far, M68HC11:     M68HC11-Directives.  (line  20)
22799 * assembler directive .fetchalign, RX:   RX-Directives.       (line  13)
22800 * assembler directive .interrupt, M68HC11: M68HC11-Directives.
22801                                                               (line  26)
22802 * assembler directive .mode, M68HC11:    M68HC11-Directives.  (line  16)
22803 * assembler directive .relax, M68HC11:   M68HC11-Directives.  (line  10)
22804 * assembler directive .syntax, CRIS:     CRIS-Pseudos.        (line  17)
22805 * assembler directive .xrefb, M68HC11:   M68HC11-Directives.  (line  31)
22806 * assembler directive BSPEC, MMIX:       MMIX-Pseudos.        (line 131)
22807 * assembler directive BYTE, MMIX:        MMIX-Pseudos.        (line  97)
22808 * assembler directive ESPEC, MMIX:       MMIX-Pseudos.        (line 131)
22809 * assembler directive GREG, MMIX:        MMIX-Pseudos.        (line  50)
22810 * assembler directive IS, MMIX:          MMIX-Pseudos.        (line  42)
22811 * assembler directive LOC, MMIX:         MMIX-Pseudos.        (line   7)
22812 * assembler directive LOCAL, MMIX:       MMIX-Pseudos.        (line  28)
22813 * assembler directive OCTA, MMIX:        MMIX-Pseudos.        (line 108)
22814 * assembler directive PREFIX, MMIX:      MMIX-Pseudos.        (line 120)
22815 * assembler directive TETRA, MMIX:       MMIX-Pseudos.        (line 108)
22816 * assembler directive WYDE, MMIX:        MMIX-Pseudos.        (line 108)
22817 * assembler directives, CRIS:            CRIS-Pseudos.        (line   6)
22818 * assembler directives, M68HC11:         M68HC11-Directives.  (line   6)
22819 * assembler directives, M68HC12:         M68HC11-Directives.  (line   6)
22820 * assembler directives, MMIX:            MMIX-Pseudos.        (line   6)
22821 * assembler directives, RL78:            RL78-Directives.     (line   6)
22822 * assembler directives, RX:              RX-Directives.       (line   6)
22823 * assembler directives, XGATE:           XGATE-Directives.    (line   6)
22824 * assembler internal logic error:        As Sections.         (line  13)
22825 * assembler version:                     v.                   (line   6)
22826 * assembler, and linker:                 Secs Background.     (line  10)
22827 * assembly listings, enabling:           a.                   (line   6)
22828 * assigning values to symbols <1>:       Equ.                 (line   6)
22829 * assigning values to symbols:           Setting Symbols.     (line   6)
22830 * atmp directive, i860:                  Directives-i860.     (line  16)
22831 * att_syntax pseudo op, i386:            i386-Variations.     (line   6)
22832 * att_syntax pseudo op, x86-64:          i386-Variations.     (line   6)
22833 * attributes, symbol:                    Symbol Attributes.   (line   6)
22834 * auxiliary attributes, COFF symbols:    COFF Symbols.        (line  19)
22835 * auxiliary symbol information, COFF:    Dim.                 (line   6)
22836 * AVR line comment character:            AVR-Chars.           (line   6)
22837 * AVR line separator:                    AVR-Chars.           (line  14)
22838 * AVR modifiers:                         AVR-Modifiers.       (line   6)
22839 * AVR opcode summary:                    AVR Opcodes.         (line   6)
22840 * AVR options (none):                    AVR Options.         (line   6)
22841 * AVR register names:                    AVR-Regs.            (line   6)
22842 * AVR support:                           AVR-Dependent.       (line   6)
22843 * backslash (\\):                        Strings.             (line  40)
22844 * backspace (\b):                        Strings.             (line  15)
22845 * balign directive:                      Balign.              (line   6)
22846 * balignl directive:                     Balign.              (line  27)
22847 * balignw directive:                     Balign.              (line  27)
22848 * bes directive, TIC54X:                 TIC54X-Directives.   (line 196)
22849 * big endian output, MIPS:               Overview.            (line 712)
22850 * big endian output, PJ:                 Overview.            (line 615)
22851 * big-endian output, MIPS:               MIPS Opts.           (line  13)
22852 * big-endian output, TIC6X:              TIC6X Options.       (line  46)
22853 * bignums:                               Bignums.             (line   6)
22854 * binary constants, TIC54X:              TIC54X-Constants.    (line   8)
22855 * binary files, including:               Incbin.              (line   6)
22856 * binary integers:                       Integers.            (line   6)
22857 * bit names, IA-64:                      IA-64-Bits.          (line   6)
22858 * bitfields, not supported on VAX:       VAX-no.              (line   6)
22859 * Blackfin directives:                   Blackfin Directives. (line   6)
22860 * Blackfin options (none):               Blackfin Options.    (line   6)
22861 * Blackfin support:                      Blackfin-Dependent.  (line   6)
22862 * Blackfin syntax:                       Blackfin Syntax.     (line   6)
22863 * block:                                 Z8000 Directives.    (line  55)
22864 * BMI, i386:                             i386-BMI.            (line   6)
22865 * BMI, x86-64:                           i386-BMI.            (line   6)
22866 * branch improvement, M680x0:            M68K-Branch.         (line   6)
22867 * branch improvement, M68HC11:           M68HC11-Branch.      (line   6)
22868 * branch improvement, VAX:               VAX-branch.          (line   6)
22869 * branch instructions, relaxation:       Xtensa Branch Relaxation.
22870                                                               (line   6)
22871 * branch recording, i960:                Options-i960.        (line  22)
22872 * branch statistics table, i960:         Options-i960.        (line  40)
22873 * branch target alignment:               Xtensa Automatic Alignment.
22874                                                               (line   6)
22875 * break directive, TIC54X:               TIC54X-Directives.   (line 143)
22876 * BSD syntax:                            PDP-11-Syntax.       (line   6)
22877 * bss directive, i960:                   Directives-i960.     (line   6)
22878 * bss directive, TIC54X:                 TIC54X-Directives.   (line  29)
22879 * bss section <1>:                       bss.                 (line   6)
22880 * bss section:                           Ld Sections.         (line  20)
22881 * bug criteria:                          Bug Criteria.        (line   6)
22882 * bug reports:                           Bug Reporting.       (line   6)
22883 * bugs in assembler:                     Reporting Bugs.      (line   6)
22884 * Built-in symbols, CRIS:                CRIS-Symbols.        (line   6)
22885 * builtin math functions, TIC54X:        TIC54X-Builtins.     (line   6)
22886 * builtin subsym functions, TIC54X:      TIC54X-Macros.       (line  16)
22887 * bundle:                                Bundle directives.   (line   6)
22888 * bundle-locked:                         Bundle directives.   (line  35)
22889 * bundle_align_mode directive:           Bundle directives.   (line   6)
22890 * bundle_lock directive:                 Bundle directives.   (line  28)
22891 * bundle_unlock directive:               Bundle directives.   (line  28)
22892 * bus lock prefixes, i386:               i386-Prefixes.       (line  36)
22893 * bval:                                  Z8000 Directives.    (line  30)
22894 * byte directive:                        Byte.                (line   6)
22895 * byte directive, TIC54X:                TIC54X-Directives.   (line  36)
22896 * C54XDSP_DIR environment variable, TIC54X: TIC54X-Env.       (line   6)
22897 * c_mode directive, TIC54X:              TIC54X-Directives.   (line  51)
22898 * call instructions, i386:               i386-Mnemonics.      (line  56)
22899 * call instructions, relaxation:         Xtensa Call Relaxation.
22900                                                               (line   6)
22901 * call instructions, x86-64:             i386-Mnemonics.      (line  56)
22902 * callj, i960 pseudo-opcode:             callj-i960.          (line   6)
22903 * carriage return (\r):                  Strings.             (line  24)
22904 * case sensitivity, Z80:                 Z80-Case.            (line   6)
22905 * cfi_endproc directive:                 CFI directives.      (line  26)
22906 * cfi_sections directive:                CFI directives.      (line   6)
22907 * cfi_startproc directive:               CFI directives.      (line  16)
22908 * char directive, TIC54X:                TIC54X-Directives.   (line  36)
22909 * character constant, Z80:               Z80-Chars.           (line  20)
22910 * character constants:                   Characters.          (line   6)
22911 * character escape codes:                Strings.             (line  15)
22912 * character escapes, Z80:                Z80-Chars.           (line  18)
22913 * character, single:                     Chars.               (line   6)
22914 * characters used in symbols:            Symbol Intro.        (line   6)
22915 * clink directive, TIC54X:               TIC54X-Directives.   (line  45)
22916 * code16 directive, i386:                i386-16bit.          (line   6)
22917 * code16gcc directive, i386:             i386-16bit.          (line   6)
22918 * code32 directive, i386:                i386-16bit.          (line   6)
22919 * code64 directive, i386:                i386-16bit.          (line   6)
22920 * code64 directive, x86-64:              i386-16bit.          (line   6)
22921 * COFF auxiliary symbol information:     Dim.                 (line   6)
22922 * COFF structure debugging:              Tag.                 (line   6)
22923 * COFF symbol attributes:                COFF Symbols.        (line   6)
22924 * COFF symbol descriptor:                Desc.                (line   6)
22925 * COFF symbol storage class:             Scl.                 (line   6)
22926 * COFF symbol type:                      Type.                (line  11)
22927 * COFF symbols, debugging:               Def.                 (line   6)
22928 * COFF value attribute:                  Val.                 (line   6)
22929 * COMDAT:                                Linkonce.            (line   6)
22930 * comm directive:                        Comm.                (line   6)
22931 * command line conventions:              Command Line.        (line   6)
22932 * command line options, V850:            V850 Options.        (line   9)
22933 * command-line options ignored, VAX:     VAX-Opts.            (line   6)
22934 * comment character, XStormy16:          XStormy16-Chars.     (line  11)
22935 * comments:                              Comments.            (line   6)
22936 * comments, M680x0:                      M68K-Chars.          (line   6)
22937 * comments, removed by preprocessor:     Preprocessing.       (line  11)
22938 * common directive, SPARC:               Sparc-Directives.    (line  12)
22939 * common sections:                       Linkonce.            (line   6)
22940 * common variable storage:               bss.                 (line   6)
22941 * compare and jump expansions, i960:     Compare-and-branch-i960.
22942                                                               (line  13)
22943 * compare/branch instructions, i960:     Compare-and-branch-i960.
22944                                                               (line   6)
22945 * comparison expressions:                Infix Ops.           (line  55)
22946 * conditional assembly:                  If.                  (line   6)
22947 * constant, single character:            Chars.               (line   6)
22948 * constants:                             Constants.           (line   6)
22949 * constants, bignum:                     Bignums.             (line   6)
22950 * constants, character:                  Characters.          (line   6)
22951 * constants, converted by preprocessor:  Preprocessing.       (line  14)
22952 * constants, floating point:             Flonums.             (line   6)
22953 * constants, integer:                    Integers.            (line   6)
22954 * constants, number:                     Numbers.             (line   6)
22955 * constants, Sparc:                      Sparc-Constants.     (line   6)
22956 * constants, string:                     Strings.             (line   6)
22957 * constants, TIC54X:                     TIC54X-Constants.    (line   6)
22958 * conversion instructions, i386:         i386-Mnemonics.      (line  37)
22959 * conversion instructions, x86-64:       i386-Mnemonics.      (line  37)
22960 * coprocessor wait, i386:                i386-Prefixes.       (line  40)
22961 * copy directive, TIC54X:                TIC54X-Directives.   (line  54)
22962 * cpu directive, M680x0:                 M68K-Directives.     (line  30)
22963 * CR16 line comment character:           CR16-Chars.          (line   6)
22964 * CR16 line separator:                   CR16-Chars.          (line  13)
22965 * CR16 Operand Qualifiers:               CR16 Operand Qualifiers.
22966                                                               (line   6)
22967 * CR16 support:                          CR16-Dependent.      (line   6)
22968 * crash of assembler:                    Bug Criteria.        (line   9)
22969 * CRIS --emulation=crisaout command line option: CRIS-Opts.   (line   9)
22970 * CRIS --emulation=criself command line option: CRIS-Opts.    (line   9)
22971 * CRIS --march=ARCHITECTURE command line option: CRIS-Opts.   (line  34)
22972 * CRIS --mul-bug-abort command line option: CRIS-Opts.        (line  62)
22973 * CRIS --no-mul-bug-abort command line option: CRIS-Opts.     (line  62)
22974 * CRIS --no-underscore command line option: CRIS-Opts.        (line  15)
22975 * CRIS --pic command line option:        CRIS-Opts.           (line  27)
22976 * CRIS --underscore command line option: CRIS-Opts.           (line  15)
22977 * CRIS -N command line option:           CRIS-Opts.           (line  58)
22978 * CRIS architecture variant option:      CRIS-Opts.           (line  34)
22979 * CRIS assembler directive .arch:        CRIS-Pseudos.        (line  45)
22980 * CRIS assembler directive .dword:       CRIS-Pseudos.        (line  12)
22981 * CRIS assembler directive .syntax:      CRIS-Pseudos.        (line  17)
22982 * CRIS assembler directives:             CRIS-Pseudos.        (line   6)
22983 * CRIS built-in symbols:                 CRIS-Symbols.        (line   6)
22984 * CRIS instruction expansion:            CRIS-Expand.         (line   6)
22985 * CRIS line comment characters:          CRIS-Chars.          (line   6)
22986 * CRIS options:                          CRIS-Opts.           (line   6)
22987 * CRIS position-independent code:        CRIS-Opts.           (line  27)
22988 * CRIS pseudo-op .arch:                  CRIS-Pseudos.        (line  45)
22989 * CRIS pseudo-op .dword:                 CRIS-Pseudos.        (line  12)
22990 * CRIS pseudo-op .syntax:                CRIS-Pseudos.        (line  17)
22991 * CRIS pseudo-ops:                       CRIS-Pseudos.        (line   6)
22992 * CRIS register names:                   CRIS-Regs.           (line   6)
22993 * CRIS support:                          CRIS-Dependent.      (line   6)
22994 * CRIS symbols in position-independent code: CRIS-Pic.        (line   6)
22995 * ctbp register, V850:                   V850-Regs.           (line 131)
22996 * ctoff pseudo-op, V850:                 V850 Opcodes.        (line 111)
22997 * ctpc register, V850:                   V850-Regs.           (line 119)
22998 * ctpsw register, V850:                  V850-Regs.           (line 122)
22999 * current address:                       Dot.                 (line   6)
23000 * current address, advancing:            Org.                 (line   6)
23001 * D10V @word modifier:                   D10V-Word.           (line   6)
23002 * D10V addressing modes:                 D10V-Addressing.     (line   6)
23003 * D10V floating point:                   D10V-Float.          (line   6)
23004 * D10V line comment character:           D10V-Chars.          (line   6)
23005 * D10V opcode summary:                   D10V-Opcodes.        (line   6)
23006 * D10V optimization:                     Overview.            (line 478)
23007 * D10V options:                          D10V-Opts.           (line   6)
23008 * D10V registers:                        D10V-Regs.           (line   6)
23009 * D10V size modifiers:                   D10V-Size.           (line   6)
23010 * D10V sub-instruction ordering:         D10V-Chars.          (line  14)
23011 * D10V sub-instructions:                 D10V-Subs.           (line   6)
23012 * D10V support:                          D10V-Dependent.      (line   6)
23013 * D10V syntax:                           D10V-Syntax.         (line   6)
23014 * D30V addressing modes:                 D30V-Addressing.     (line   6)
23015 * D30V floating point:                   D30V-Float.          (line   6)
23016 * D30V Guarded Execution:                D30V-Guarded.        (line   6)
23017 * D30V line comment character:           D30V-Chars.          (line   6)
23018 * D30V nops:                             Overview.            (line 486)
23019 * D30V nops after 32-bit multiply:       Overview.            (line 489)
23020 * D30V opcode summary:                   D30V-Opcodes.        (line   6)
23021 * D30V optimization:                     Overview.            (line 483)
23022 * D30V options:                          D30V-Opts.           (line   6)
23023 * D30V registers:                        D30V-Regs.           (line   6)
23024 * D30V size modifiers:                   D30V-Size.           (line   6)
23025 * D30V sub-instruction ordering:         D30V-Chars.          (line  14)
23026 * D30V sub-instructions:                 D30V-Subs.           (line   6)
23027 * D30V support:                          D30V-Dependent.      (line   6)
23028 * D30V syntax:                           D30V-Syntax.         (line   6)
23029 * data alignment on SPARC:               Sparc-Aligned-Data.  (line   6)
23030 * data and text sections, joining:       R.                   (line   6)
23031 * data directive:                        Data.                (line   6)
23032 * data directive, TIC54X:                TIC54X-Directives.   (line  61)
23033 * data relocations, ARM:                 ARM-Relocations.     (line   6)
23034 * data section:                          Ld Sections.         (line   9)
23035 * data1 directive, M680x0:               M68K-Directives.     (line   9)
23036 * data2 directive, M680x0:               M68K-Directives.     (line  12)
23037 * datalabel, SH64:                       SH64-Addressing.     (line  16)
23038 * dbpc register, V850:                   V850-Regs.           (line 125)
23039 * dbpsw register, V850:                  V850-Regs.           (line 128)
23040 * debuggers, and symbol order:           Symbols.             (line  10)
23041 * debugging COFF symbols:                Def.                 (line   6)
23042 * DEC syntax:                            PDP-11-Syntax.       (line   6)
23043 * decimal integers:                      Integers.            (line  12)
23044 * def directive:                         Def.                 (line   6)
23045 * def directive, TIC54X:                 TIC54X-Directives.   (line 103)
23046 * density instructions:                  Density Instructions.
23047                                                               (line   6)
23048 * dependency tracking:                   MD.                  (line   6)
23049 * deprecated directives:                 Deprecated.          (line   6)
23050 * desc directive:                        Desc.                (line   6)
23051 * descriptor, of a.out symbol:           Symbol Desc.         (line   6)
23052 * dfloat directive, VAX:                 VAX-directives.      (line  10)
23053 * difference tables altered:             Word.                (line  12)
23054 * difference tables, warning:            K.                   (line   6)
23055 * differences, mmixal:                   MMIX-mmixal.         (line   6)
23056 * dim directive:                         Dim.                 (line   6)
23057 * directives and instructions:           Statements.          (line  20)
23058 * directives for PowerPC:                PowerPC-Pseudo.      (line   6)
23059 * directives for SCORE:                  SCORE-Pseudo.        (line   6)
23060 * directives, Blackfin:                  Blackfin Directives. (line   6)
23061 * directives, M32R:                      M32R-Directives.     (line   6)
23062 * directives, M680x0:                    M68K-Directives.     (line   6)
23063 * directives, machine independent:       Pseudo Ops.          (line   6)
23064 * directives, Xtensa:                    Xtensa Directives.   (line   6)
23065 * directives, Z8000:                     Z8000 Directives.    (line   6)
23066 * Disable floating-point instructions:   MIPS floating-point. (line   6)
23067 * Disable single-precision floating-point operations: MIPS floating-point.
23068                                                               (line  12)
23069 * displacement sizing character, VAX:    VAX-operands.        (line  12)
23070 * dollar local symbols:                  Symbol Names.        (line 110)
23071 * dot (symbol):                          Dot.                 (line   6)
23072 * double directive:                      Double.              (line   6)
23073 * double directive, i386:                i386-Float.          (line  14)
23074 * double directive, M680x0:              M68K-Float.          (line  14)
23075 * double directive, M68HC11:             M68HC11-Float.       (line  14)
23076 * double directive, RX:                  RX-Float.            (line  11)
23077 * double directive, TIC54X:              TIC54X-Directives.   (line  64)
23078 * double directive, VAX:                 VAX-float.           (line  15)
23079 * double directive, x86-64:              i386-Float.          (line  14)
23080 * double directive, XGATE:               XGATE-Float.         (line  13)
23081 * doublequote (\"):                      Strings.             (line  43)
23082 * drlist directive, TIC54X:              TIC54X-Directives.   (line  73)
23083 * drnolist directive, TIC54X:            TIC54X-Directives.   (line  73)
23084 * dual directive, i860:                  Directives-i860.     (line   6)
23085 * ECOFF sections:                        MIPS Object.         (line   6)
23086 * ecr register, V850:                    V850-Regs.           (line 113)
23087 * eight-byte integer:                    Quad.                (line   9)
23088 * eipc register, V850:                   V850-Regs.           (line 101)
23089 * eipsw register, V850:                  V850-Regs.           (line 104)
23090 * eject directive:                       Eject.               (line   6)
23091 * ELF symbol type:                       Type.                (line  22)
23092 * else directive:                        Else.                (line   6)
23093 * elseif directive:                      Elseif.              (line   6)
23094 * empty expressions:                     Empty Exprs.         (line   6)
23095 * emsg directive, TIC54X:                TIC54X-Directives.   (line  77)
23096 * emulation:                             Overview.            (line 828)
23097 * encoding options, i386:                i386-Mnemonics.      (line  32)
23098 * encoding options, x86-64:              i386-Mnemonics.      (line  32)
23099 * end directive:                         End.                 (line   6)
23100 * enddual directive, i860:               Directives-i860.     (line  11)
23101 * endef directive:                       Endef.               (line   6)
23102 * endfunc directive:                     Endfunc.             (line   6)
23103 * endianness, MIPS:                      Overview.            (line 712)
23104 * endianness, PJ:                        Overview.            (line 615)
23105 * endif directive:                       Endif.               (line   6)
23106 * endloop directive, TIC54X:             TIC54X-Directives.   (line 143)
23107 * endm directive:                        Macro.               (line 138)
23108 * endm directive, TIC54X:                TIC54X-Directives.   (line 153)
23109 * endstruct directive, TIC54X:           TIC54X-Directives.   (line 216)
23110 * endunion directive, TIC54X:            TIC54X-Directives.   (line 250)
23111 * environment settings, TIC54X:          TIC54X-Env.          (line   6)
23112 * EOF, newline must precede:             Statements.          (line  14)
23113 * ep register, V850:                     V850-Regs.           (line  95)
23114 * Epiphany line comment character:       Epiphany-Chars.      (line   6)
23115 * Epiphany line separator:               Epiphany-Chars.      (line  14)
23116 * Epiphany options:                      Epiphany Options.    (line   6)
23117 * Epiphany support:                      Epiphany-Dependent.  (line   6)
23118 * equ directive:                         Equ.                 (line   6)
23119 * equ directive, TIC54X:                 TIC54X-Directives.   (line 191)
23120 * equiv directive:                       Equiv.               (line   6)
23121 * eqv directive:                         Eqv.                 (line   6)
23122 * err directive:                         Err.                 (line   6)
23123 * error directive:                       Error.               (line   6)
23124 * error messages:                        Errors.              (line   6)
23125 * error on valid input:                  Bug Criteria.        (line  12)
23126 * errors, caused by warnings:            W.                   (line  16)
23127 * errors, continuing after:              Z.                   (line   6)
23128 * ESA/390 floating point (IEEE):         ESA/390 Floating Point.
23129                                                               (line   6)
23130 * ESA/390 support:                       ESA/390-Dependent.   (line   6)
23131 * ESA/390 Syntax:                        ESA/390 Options.     (line   8)
23132 * ESA/390-only directives:               ESA/390 Directives.  (line  12)
23133 * escape codes, character:               Strings.             (line  15)
23134 * eval directive, TIC54X:                TIC54X-Directives.   (line  24)
23135 * even:                                  Z8000 Directives.    (line  58)
23136 * even directive, M680x0:                M68K-Directives.     (line  15)
23137 * even directive, TIC54X:                TIC54X-Directives.   (line   6)
23138 * exitm directive:                       Macro.               (line 141)
23139 * expr (internal section):               As Sections.         (line  17)
23140 * expression arguments:                  Arguments.           (line   6)
23141 * expressions:                           Expressions.         (line   6)
23142 * expressions, comparison:               Infix Ops.           (line  55)
23143 * expressions, empty:                    Empty Exprs.         (line   6)
23144 * expressions, integer:                  Integer Exprs.       (line   6)
23145 * extAuxRegister directive, ARC:         ARC Directives.      (line  18)
23146 * extCondCode directive, ARC:            ARC Directives.      (line  41)
23147 * extCoreRegister directive, ARC:        ARC Directives.      (line  53)
23148 * extend directive M680x0:               M68K-Float.          (line  17)
23149 * extend directive M68HC11:              M68HC11-Float.       (line  17)
23150 * extend directive XGATE:                XGATE-Float.         (line  16)
23151 * extended directive, i960:              Directives-i960.     (line  13)
23152 * extern directive:                      Extern.              (line   6)
23153 * extInstruction directive, ARC:         ARC Directives.      (line  78)
23154 * fail directive:                        Fail.                (line   6)
23155 * far_mode directive, TIC54X:            TIC54X-Directives.   (line  82)
23156 * faster processing (-f):                f.                   (line   6)
23157 * fatal signal:                          Bug Criteria.        (line   9)
23158 * fclist directive, TIC54X:              TIC54X-Directives.   (line  87)
23159 * fcnolist directive, TIC54X:            TIC54X-Directives.   (line  87)
23160 * fepc register, V850:                   V850-Regs.           (line 107)
23161 * fepsw register, V850:                  V850-Regs.           (line 110)
23162 * ffloat directive, VAX:                 VAX-directives.      (line  14)
23163 * field directive, TIC54X:               TIC54X-Directives.   (line  91)
23164 * file directive:                        File.                (line   6)
23165 * file directive, MSP 430:               MSP430 Directives.   (line   6)
23166 * file name, logical:                    File.                (line  13)
23167 * files, including:                      Include.             (line   6)
23168 * files, input:                          Input Files.         (line   6)
23169 * fill directive:                        Fill.                (line   6)
23170 * filling memory <1>:                    Skip.                (line   6)
23171 * filling memory:                        Space.               (line   6)
23172 * FLIX syntax:                           Xtensa Syntax.       (line   6)
23173 * float directive:                       Float.               (line   6)
23174 * float directive, i386:                 i386-Float.          (line  14)
23175 * float directive, M680x0:               M68K-Float.          (line  11)
23176 * float directive, M68HC11:              M68HC11-Float.       (line  11)
23177 * float directive, RX:                   RX-Float.            (line   8)
23178 * float directive, TIC54X:               TIC54X-Directives.   (line  64)
23179 * float directive, VAX:                  VAX-float.           (line  15)
23180 * float directive, x86-64:               i386-Float.          (line  14)
23181 * float directive, XGATE:                XGATE-Float.         (line  10)
23182 * floating point numbers:                Flonums.             (line   6)
23183 * floating point numbers (double):       Double.              (line   6)
23184 * floating point numbers (single) <1>:   Float.               (line   6)
23185 * floating point numbers (single):       Single.              (line   6)
23186 * floating point, AArch64 (IEEE):        AArch64 Floating Point.
23187                                                               (line   6)
23188 * floating point, Alpha (IEEE):          Alpha Floating Point.
23189                                                               (line   6)
23190 * floating point, ARC (IEEE):            ARC Floating Point.  (line   6)
23191 * floating point, ARM (IEEE):            ARM Floating Point.  (line   6)
23192 * floating point, D10V:                  D10V-Float.          (line   6)
23193 * floating point, D30V:                  D30V-Float.          (line   6)
23194 * floating point, ESA/390 (IEEE):        ESA/390 Floating Point.
23195                                                               (line   6)
23196 * floating point, H8/300 (IEEE):         H8/300 Floating Point.
23197                                                               (line   6)
23198 * floating point, HPPA (IEEE):           HPPA Floating Point. (line   6)
23199 * floating point, i386:                  i386-Float.          (line   6)
23200 * floating point, i960 (IEEE):           Floating Point-i960. (line   6)
23201 * floating point, M680x0:                M68K-Float.          (line   6)
23202 * floating point, M68HC11:               M68HC11-Float.       (line   6)
23203 * floating point, MSP 430 (IEEE):        MSP430 Floating Point.
23204                                                               (line   6)
23205 * floating point, RX:                    RX-Float.            (line   6)
23206 * floating point, s390:                  s390 Floating Point. (line   6)
23207 * floating point, SH (IEEE):             SH Floating Point.   (line   6)
23208 * floating point, SPARC (IEEE):          Sparc-Float.         (line   6)
23209 * floating point, V850 (IEEE):           V850 Floating Point. (line   6)
23210 * floating point, VAX:                   VAX-float.           (line   6)
23211 * floating point, x86-64:                i386-Float.          (line   6)
23212 * floating point, XGATE:                 XGATE-Float.         (line   6)
23213 * floating point, Z80:                   Z80 Floating Point.  (line   6)
23214 * flonums:                               Flonums.             (line   6)
23215 * format of error messages:              Errors.              (line  24)
23216 * format of warning messages:            Errors.              (line  12)
23217 * formfeed (\f):                         Strings.             (line  18)
23218 * func directive:                        Func.                (line   6)
23219 * functions, in expressions:             Operators.           (line   6)
23220 * gbr960, i960 postprocessor:            Options-i960.        (line  40)
23221 * gfloat directive, VAX:                 VAX-directives.      (line  18)
23222 * global:                                Z8000 Directives.    (line  21)
23223 * global directive:                      Global.              (line   6)
23224 * global directive, TIC54X:              TIC54X-Directives.   (line 103)
23225 * gp register, MIPS:                     MIPS Object.         (line  11)
23226 * gp register, V850:                     V850-Regs.           (line  17)
23227 * grouping data:                         Sub-Sections.        (line   6)
23228 * H8/300 addressing modes:               H8/300-Addressing.   (line   6)
23229 * H8/300 floating point (IEEE):          H8/300 Floating Point.
23230                                                               (line   6)
23231 * H8/300 line comment character:         H8/300-Chars.        (line   6)
23232 * H8/300 line separator:                 H8/300-Chars.        (line   8)
23233 * H8/300 machine directives (none):      H8/300 Directives.   (line   6)
23234 * H8/300 opcode summary:                 H8/300 Opcodes.      (line   6)
23235 * H8/300 options:                        H8/300 Options.      (line   6)
23236 * H8/300 registers:                      H8/300-Regs.         (line   6)
23237 * H8/300 size suffixes:                  H8/300 Opcodes.      (line 163)
23238 * H8/300 support:                        H8/300-Dependent.    (line   6)
23239 * H8/300H, assembling for:               H8/300 Directives.   (line   8)
23240 * half directive, ARC:                   ARC Directives.      (line 156)
23241 * half directive, SPARC:                 Sparc-Directives.    (line  17)
23242 * half directive, TIC54X:                TIC54X-Directives.   (line 111)
23243 * hex character code (\XD...):           Strings.             (line  36)
23244 * hexadecimal integers:                  Integers.            (line  15)
23245 * hexadecimal prefix, Z80:               Z80-Chars.           (line  15)
23246 * hfloat directive, VAX:                 VAX-directives.      (line  22)
23247 * hi pseudo-op, V850:                    V850 Opcodes.        (line  33)
23248 * hi0 pseudo-op, V850:                   V850 Opcodes.        (line  10)
23249 * hidden directive:                      Hidden.              (line   6)
23250 * high directive, M32R:                  M32R-Directives.     (line  18)
23251 * hilo pseudo-op, V850:                  V850 Opcodes.        (line  55)
23252 * HPPA directives not supported:         HPPA Directives.     (line  11)
23253 * HPPA floating point (IEEE):            HPPA Floating Point. (line   6)
23254 * HPPA Syntax:                           HPPA Options.        (line   8)
23255 * HPPA-only directives:                  HPPA Directives.     (line  24)
23256 * hword directive:                       hword.               (line   6)
23257 * i370 support:                          ESA/390-Dependent.   (line   6)
23258 * i386 16-bit code:                      i386-16bit.          (line   6)
23259 * i386 arch directive:                   i386-Arch.           (line   6)
23260 * i386 att_syntax pseudo op:             i386-Variations.     (line   6)
23261 * i386 conversion instructions:          i386-Mnemonics.      (line  37)
23262 * i386 floating point:                   i386-Float.          (line   6)
23263 * i386 immediate operands:               i386-Variations.     (line  15)
23264 * i386 instruction naming:               i386-Mnemonics.      (line   6)
23265 * i386 instruction prefixes:             i386-Prefixes.       (line   6)
23266 * i386 intel_syntax pseudo op:           i386-Variations.     (line   6)
23267 * i386 jump optimization:                i386-Jumps.          (line   6)
23268 * i386 jump, call, return:               i386-Variations.     (line  41)
23269 * i386 jump/call operands:               i386-Variations.     (line  15)
23270 * i386 line comment character:           i386-Chars.          (line   6)
23271 * i386 line separator:                   i386-Chars.          (line  18)
23272 * i386 memory references:                i386-Memory.         (line   6)
23273 * i386 mnemonic compatibility:           i386-Mnemonics.      (line  62)
23274 * i386 mul, imul instructions:           i386-Notes.          (line   6)
23275 * i386 options:                          i386-Options.        (line   6)
23276 * i386 register operands:                i386-Variations.     (line  15)
23277 * i386 registers:                        i386-Regs.           (line   6)
23278 * i386 sections:                         i386-Variations.     (line  47)
23279 * i386 size suffixes:                    i386-Variations.     (line  29)
23280 * i386 source, destination operands:     i386-Variations.     (line  22)
23281 * i386 support:                          i386-Dependent.      (line   6)
23282 * i386 syntax compatibility:             i386-Variations.     (line   6)
23283 * i80386 support:                        i386-Dependent.      (line   6)
23284 * i860 line comment character:           i860-Chars.          (line   6)
23285 * i860 line separator:                   i860-Chars.          (line  14)
23286 * i860 machine directives:               Directives-i860.     (line   6)
23287 * i860 opcodes:                          Opcodes for i860.    (line   6)
23288 * i860 support:                          i860-Dependent.      (line   6)
23289 * i960 architecture options:             Options-i960.        (line   6)
23290 * i960 branch recording:                 Options-i960.        (line  22)
23291 * i960 callj pseudo-opcode:              callj-i960.          (line   6)
23292 * i960 compare and jump expansions:      Compare-and-branch-i960.
23293                                                               (line  13)
23294 * i960 compare/branch instructions:      Compare-and-branch-i960.
23295                                                               (line   6)
23296 * i960 floating point (IEEE):            Floating Point-i960. (line   6)
23297 * i960 line comment character:           i960-Chars.          (line   6)
23298 * i960 line separator:                   i960-Chars.          (line  14)
23299 * i960 machine directives:               Directives-i960.     (line   6)
23300 * i960 opcodes:                          Opcodes for i960.    (line   6)
23301 * i960 options:                          Options-i960.        (line   6)
23302 * i960 support:                          i960-Dependent.      (line   6)
23303 * IA-64 line comment character:          IA-64-Chars.         (line   6)
23304 * IA-64 line separator:                  IA-64-Chars.         (line   8)
23305 * IA-64 options:                         IA-64 Options.       (line   6)
23306 * IA-64 Processor-status-Register bit names: IA-64-Bits.      (line   6)
23307 * IA-64 registers:                       IA-64-Regs.          (line   6)
23308 * IA-64 relocations:                     IA-64-Relocs.        (line   6)
23309 * IA-64 support:                         IA-64-Dependent.     (line   6)
23310 * IA-64 Syntax:                          IA-64 Options.       (line  87)
23311 * ident directive:                       Ident.               (line   6)
23312 * identifiers, ARM:                      ARM-Chars.           (line  19)
23313 * identifiers, MSP 430:                  MSP430-Chars.        (line  17)
23314 * if directive:                          If.                  (line   6)
23315 * ifb directive:                         If.                  (line  21)
23316 * ifc directive:                         If.                  (line  25)
23317 * ifdef directive:                       If.                  (line  16)
23318 * ifeq directive:                        If.                  (line  33)
23319 * ifeqs directive:                       If.                  (line  36)
23320 * ifge directive:                        If.                  (line  40)
23321 * ifgt directive:                        If.                  (line  44)
23322 * ifle directive:                        If.                  (line  48)
23323 * iflt directive:                        If.                  (line  52)
23324 * ifnb directive:                        If.                  (line  56)
23325 * ifnc directive:                        If.                  (line  61)
23326 * ifndef directive:                      If.                  (line  65)
23327 * ifne directive:                        If.                  (line  72)
23328 * ifnes directive:                       If.                  (line  76)
23329 * ifnotdef directive:                    If.                  (line  65)
23330 * immediate character, AArch64:          AArch64-Chars.       (line  13)
23331 * immediate character, ARM:              ARM-Chars.           (line  17)
23332 * immediate character, M680x0:           M68K-Chars.          (line  13)
23333 * immediate character, VAX:              VAX-operands.        (line   6)
23334 * immediate fields, relaxation:          Xtensa Immediate Relaxation.
23335                                                               (line   6)
23336 * immediate operands, i386:              i386-Variations.     (line  15)
23337 * immediate operands, x86-64:            i386-Variations.     (line  15)
23338 * imul instruction, i386:                i386-Notes.          (line   6)
23339 * imul instruction, x86-64:              i386-Notes.          (line   6)
23340 * incbin directive:                      Incbin.              (line   6)
23341 * include directive:                     Include.             (line   6)
23342 * include directive search path:         I.                   (line   6)
23343 * indirect character, VAX:               VAX-operands.        (line   9)
23344 * infix operators:                       Infix Ops.           (line   6)
23345 * inhibiting interrupts, i386:           i386-Prefixes.       (line  36)
23346 * input:                                 Input Files.         (line   6)
23347 * input file linenumbers:                Input Files.         (line  35)
23348 * instruction aliases, s390:             s390 Aliases.        (line   6)
23349 * instruction bundle:                    Bundle directives.   (line   6)
23350 * instruction expansion, CRIS:           CRIS-Expand.         (line   6)
23351 * instruction expansion, MMIX:           MMIX-Expand.         (line   6)
23352 * instruction formats, s390:             s390 Formats.        (line   6)
23353 * instruction marker, s390:              s390 Instruction Marker.
23354                                                               (line   6)
23355 * instruction mnemonics, s390:           s390 Mnemonics.      (line   6)
23356 * instruction naming, i386:              i386-Mnemonics.      (line   6)
23357 * instruction naming, x86-64:            i386-Mnemonics.      (line   6)
23358 * instruction operand modifier, s390:    s390 Operand Modifier.
23359                                                               (line   6)
23360 * instruction operands, s390:            s390 Operands.       (line   6)
23361 * instruction prefixes, i386:            i386-Prefixes.       (line   6)
23362 * instruction set, M680x0:               M68K-opcodes.        (line   6)
23363 * instruction set, M68HC11:              M68HC11-opcodes.     (line   6)
23364 * instruction set, XGATE:                XGATE-opcodes.       (line   6)
23365 * instruction summary, AVR:              AVR Opcodes.         (line   6)
23366 * instruction summary, D10V:             D10V-Opcodes.        (line   6)
23367 * instruction summary, D30V:             D30V-Opcodes.        (line   6)
23368 * instruction summary, H8/300:           H8/300 Opcodes.      (line   6)
23369 * instruction summary, LM32:             LM32 Opcodes.        (line   6)
23370 * instruction summary, SH:               SH Opcodes.          (line   6)
23371 * instruction summary, SH64:             SH64 Opcodes.        (line   6)
23372 * instruction summary, Z8000:            Z8000 Opcodes.       (line   6)
23373 * instruction syntax, s390:              s390 Syntax.         (line   6)
23374 * instructions and directives:           Statements.          (line  20)
23375 * int directive:                         Int.                 (line   6)
23376 * int directive, H8/300:                 H8/300 Directives.   (line   6)
23377 * int directive, i386:                   i386-Float.          (line  21)
23378 * int directive, TIC54X:                 TIC54X-Directives.   (line 111)
23379 * int directive, x86-64:                 i386-Float.          (line  21)
23380 * integer expressions:                   Integer Exprs.       (line   6)
23381 * integer, 16-byte:                      Octa.                (line   6)
23382 * integer, 8-byte:                       Quad.                (line   9)
23383 * integers:                              Integers.            (line   6)
23384 * integers, 16-bit:                      hword.               (line   6)
23385 * integers, 32-bit:                      Int.                 (line   6)
23386 * integers, binary:                      Integers.            (line   6)
23387 * integers, decimal:                     Integers.            (line  12)
23388 * integers, hexadecimal:                 Integers.            (line  15)
23389 * integers, octal:                       Integers.            (line   9)
23390 * integers, one byte:                    Byte.                (line   6)
23391 * intel_syntax pseudo op, i386:          i386-Variations.     (line   6)
23392 * intel_syntax pseudo op, x86-64:        i386-Variations.     (line   6)
23393 * internal assembler sections:           As Sections.         (line   6)
23394 * internal directive:                    Internal.            (line   6)
23395 * invalid input:                         Bug Criteria.        (line  14)
23396 * invocation summary:                    Overview.            (line   6)
23397 * IP2K architecture options:             IP2K-Opts.           (line  14)
23398 * IP2K line comment character:           IP2K-Chars.          (line   6)
23399 * IP2K line separator:                   IP2K-Chars.          (line  14)
23400 * IP2K options:                          IP2K-Opts.           (line   6)
23401 * IP2K support:                          IP2K-Dependent.      (line   6)
23402 * irp directive:                         Irp.                 (line   6)
23403 * irpc directive:                        Irpc.                (line   6)
23404 * ISA options, SH64:                     SH64 Options.        (line   6)
23405 * joining text and data sections:        R.                   (line   6)
23406 * jump instructions, i386:               i386-Mnemonics.      (line  56)
23407 * jump instructions, x86-64:             i386-Mnemonics.      (line  56)
23408 * jump optimization, i386:               i386-Jumps.          (line   6)
23409 * jump optimization, x86-64:             i386-Jumps.          (line   6)
23410 * jump/call operands, i386:              i386-Variations.     (line  15)
23411 * jump/call operands, x86-64:            i386-Variations.     (line  15)
23412 * L16SI instructions, relaxation:        Xtensa Immediate Relaxation.
23413                                                               (line  23)
23414 * L16UI instructions, relaxation:        Xtensa Immediate Relaxation.
23415                                                               (line  23)
23416 * L32I instructions, relaxation:         Xtensa Immediate Relaxation.
23417                                                               (line  23)
23418 * L8UI instructions, relaxation:         Xtensa Immediate Relaxation.
23419                                                               (line  23)
23420 * label (:):                             Statements.          (line  31)
23421 * label directive, TIC54X:               TIC54X-Directives.   (line 123)
23422 * labels:                                Labels.              (line   6)
23423 * lcomm directive:                       Lcomm.               (line   6)
23424 * lcomm directive, COFF:                 i386-Directives.     (line   6)
23425 * ld:                                    Object.              (line  15)
23426 * ldouble directive M680x0:              M68K-Float.          (line  17)
23427 * ldouble directive M68HC11:             M68HC11-Float.       (line  17)
23428 * ldouble directive XGATE:               XGATE-Float.         (line  16)
23429 * ldouble directive, TIC54X:             TIC54X-Directives.   (line  64)
23430 * LDR reg,=<expr> pseudo op, AArch64:    AArch64 Opcodes.     (line   9)
23431 * LDR reg,=<label> pseudo op, ARM:       ARM Opcodes.         (line  15)
23432 * leafproc directive, i960:              Directives-i960.     (line  18)
23433 * length directive, TIC54X:              TIC54X-Directives.   (line 127)
23434 * length of symbols:                     Symbol Intro.        (line  14)
23435 * lflags directive (ignored):            Lflags.              (line   6)
23436 * line comment character:                Comments.            (line  19)
23437 * line comment character, AArch64:       AArch64-Chars.       (line   6)
23438 * line comment character, Alpha:         Alpha-Chars.         (line   6)
23439 * line comment character, ARC:           ARC-Chars.           (line   6)
23440 * line comment character, ARM:           ARM-Chars.           (line   6)
23441 * line comment character, AVR:           AVR-Chars.           (line   6)
23442 * line comment character, CR16:          CR16-Chars.          (line   6)
23443 * line comment character, D10V:          D10V-Chars.          (line   6)
23444 * line comment character, D30V:          D30V-Chars.          (line   6)
23445 * line comment character, Epiphany:      Epiphany-Chars.      (line   6)
23446 * line comment character, H8/300:        H8/300-Chars.        (line   6)
23447 * line comment character, i386:          i386-Chars.          (line   6)
23448 * line comment character, i860:          i860-Chars.          (line   6)
23449 * line comment character, i960:          i960-Chars.          (line   6)
23450 * line comment character, IA-64:         IA-64-Chars.         (line   6)
23451 * line comment character, IP2K:          IP2K-Chars.          (line   6)
23452 * line comment character, LM32:          LM32-Chars.          (line   6)
23453 * line comment character, M32C:          M32C-Chars.          (line   6)
23454 * line comment character, M680x0:        M68K-Chars.          (line   6)
23455 * line comment character, M68HC11:       M68HC11-Syntax.      (line  17)
23456 * line comment character, MicroBlaze:    MicroBlaze-Chars.    (line   6)
23457 * line comment character, MIPS:          MIPS-Chars.          (line   6)
23458 * line comment character, MSP 430:       MSP430-Chars.        (line   6)
23459 * line comment character, NS32K:         NS32K-Chars.         (line   6)
23460 * line comment character, PJ:            PJ-Chars.            (line   6)
23461 * line comment character, PowerPC:       PowerPC-Chars.       (line   6)
23462 * line comment character, RL78:          RL78-Chars.          (line   6)
23463 * line comment character, RX:            RX-Chars.            (line   6)
23464 * line comment character, s390:          s390 Characters.     (line   6)
23465 * line comment character, SCORE:         SCORE-Chars.         (line   6)
23466 * line comment character, SH:            SH-Chars.            (line   6)
23467 * line comment character, SH64:          SH64-Chars.          (line   6)
23468 * line comment character, Sparc:         Sparc-Chars.         (line   6)
23469 * line comment character, TIC54X:        TIC54X-Chars.        (line   6)
23470 * line comment character, TIC6X:         TIC6X Syntax.        (line   6)
23471 * line comment character, V850:          V850-Chars.          (line   6)
23472 * line comment character, VAX:           VAX-Chars.           (line   6)
23473 * line comment character, XGATE:         XGATE-Syntax.        (line  16)
23474 * line comment character, XStormy16:     XStormy16-Chars.     (line   6)
23475 * line comment character, Z80:           Z80-Chars.           (line   6)
23476 * line comment character, Z8000:         Z8000-Chars.         (line   6)
23477 * line comment characters, CRIS:         CRIS-Chars.          (line   6)
23478 * line comment characters, MMIX:         MMIX-Chars.          (line   6)
23479 * line directive:                        Line.                (line   6)
23480 * line directive, MSP 430:               MSP430 Directives.   (line  14)
23481 * line numbers, in input files:          Input Files.         (line  35)
23482 * line numbers, in warnings/errors:      Errors.              (line  16)
23483 * line separator character:              Statements.          (line   6)
23484 * line separator, AArch64:               AArch64-Chars.       (line  10)
23485 * line separator, Alpha:                 Alpha-Chars.         (line  11)
23486 * line separator, ARC:                   ARC-Chars.           (line  12)
23487 * line separator, ARM:                   ARM-Chars.           (line  14)
23488 * line separator, AVR:                   AVR-Chars.           (line  14)
23489 * line separator, CR16:                  CR16-Chars.          (line  13)
23490 * line separator, Epiphany:              Epiphany-Chars.      (line  14)
23491 * line separator, H8/300:                H8/300-Chars.        (line   8)
23492 * line separator, i386:                  i386-Chars.          (line  18)
23493 * line separator, i860:                  i860-Chars.          (line  14)
23494 * line separator, i960:                  i960-Chars.          (line  14)
23495 * line separator, IA-64:                 IA-64-Chars.         (line   8)
23496 * line separator, IP2K:                  IP2K-Chars.          (line  14)
23497 * line separator, LM32:                  LM32-Chars.          (line  12)
23498 * line separator, M32C:                  M32C-Chars.          (line  14)
23499 * line separator, M680x0:                M68K-Chars.          (line  20)
23500 * line separator, M68HC11:               M68HC11-Syntax.      (line  27)
23501 * line separator, MicroBlaze:            MicroBlaze-Chars.    (line  14)
23502 * line separator, MIPS:                  MIPS-Chars.          (line  14)
23503 * line separator, MSP 430:               MSP430-Chars.        (line  14)
23504 * line separator, NS32K:                 NS32K-Chars.         (line  18)
23505 * line separator, PJ:                    PJ-Chars.            (line  14)
23506 * line separator, PowerPC:               PowerPC-Chars.       (line  18)
23507 * line separator, RL78:                  RL78-Chars.          (line  14)
23508 * line separator, RX:                    RX-Chars.            (line  14)
23509 * line separator, s390:                  s390 Characters.     (line  13)
23510 * line separator, SCORE:                 SCORE-Chars.         (line  14)
23511 * line separator, SH:                    SH-Chars.            (line   8)
23512 * line separator, SH64:                  SH64-Chars.          (line  13)
23513 * line separator, Sparc:                 Sparc-Chars.         (line  14)
23514 * line separator, TIC54X:                TIC54X-Chars.        (line  17)
23515 * line separator, TIC6X:                 TIC6X Syntax.        (line  13)
23516 * line separator, V850:                  V850-Chars.          (line  13)
23517 * line separator, VAX:                   VAX-Chars.           (line  14)
23518 * line separator, XGATE:                 XGATE-Syntax.        (line  26)
23519 * line separator, XStormy16:             XStormy16-Chars.     (line  14)
23520 * line separator, Z80:                   Z80-Chars.           (line  13)
23521 * line separator, Z8000:                 Z8000-Chars.         (line  13)
23522 * lines starting with #:                 Comments.            (line  33)
23523 * linker:                                Object.              (line  15)
23524 * linker, and assembler:                 Secs Background.     (line  10)
23525 * linkonce directive:                    Linkonce.            (line   6)
23526 * list directive:                        List.                (line   6)
23527 * list directive, TIC54X:                TIC54X-Directives.   (line 131)
23528 * listing control, turning off:          Nolist.              (line   6)
23529 * listing control, turning on:           List.                (line   6)
23530 * listing control: new page:             Eject.               (line   6)
23531 * listing control: paper size:           Psize.               (line   6)
23532 * listing control: subtitle:             Sbttl.               (line   6)
23533 * listing control: title line:           Title.               (line   6)
23534 * listings, enabling:                    a.                   (line   6)
23535 * literal directive:                     Literal Directive.   (line   6)
23536 * literal pool entries, s390:            s390 Literal Pool Entries.
23537                                                               (line   6)
23538 * literal_position directive:            Literal Position Directive.
23539                                                               (line   6)
23540 * literal_prefix directive:              Literal Prefix Directive.
23541                                                               (line   6)
23542 * little endian output, MIPS:            Overview.            (line 715)
23543 * little endian output, PJ:              Overview.            (line 618)
23544 * little-endian output, MIPS:            MIPS Opts.           (line  13)
23545 * little-endian output, TIC6X:           TIC6X Options.       (line  46)
23546 * LM32 line comment character:           LM32-Chars.          (line   6)
23547 * LM32 line separator:                   LM32-Chars.          (line  12)
23548 * LM32 modifiers:                        LM32-Modifiers.      (line   6)
23549 * LM32 opcode summary:                   LM32 Opcodes.        (line   6)
23550 * LM32 options (none):                   LM32 Options.        (line   6)
23551 * LM32 register names:                   LM32-Regs.           (line   6)
23552 * LM32 support:                          LM32-Dependent.      (line   6)
23553 * ln directive:                          Ln.                  (line   6)
23554 * lo pseudo-op, V850:                    V850 Opcodes.        (line  22)
23555 * loc directive:                         Loc.                 (line   6)
23556 * loc_mark_labels directive:             Loc_mark_labels.     (line   6)
23557 * local common symbols:                  Lcomm.               (line   6)
23558 * local directive:                       Local.               (line   6)
23559 * local labels:                          Symbol Names.        (line  40)
23560 * local symbol names:                    Symbol Names.        (line  27)
23561 * local symbols, retaining in output:    L.                   (line   6)
23562 * location counter:                      Dot.                 (line   6)
23563 * location counter, advancing:           Org.                 (line   6)
23564 * location counter, Z80:                 Z80-Chars.           (line  15)
23565 * logical file name:                     File.                (line  13)
23566 * logical line number:                   Line.                (line   6)
23567 * logical line numbers:                  Comments.            (line  33)
23568 * long directive:                        Long.                (line   6)
23569 * long directive, ARC:                   ARC Directives.      (line 159)
23570 * long directive, i386:                  i386-Float.          (line  21)
23571 * long directive, TIC54X:                TIC54X-Directives.   (line 135)
23572 * long directive, x86-64:                i386-Float.          (line  21)
23573 * longcall pseudo-op, V850:              V850 Opcodes.        (line 123)
23574 * longcalls directive:                   Longcalls Directive. (line   6)
23575 * longjump pseudo-op, V850:              V850 Opcodes.        (line 129)
23576 * loop directive, TIC54X:                TIC54X-Directives.   (line 143)
23577 * LOOP instructions, alignment:          Xtensa Automatic Alignment.
23578                                                               (line   6)
23579 * low directive, M32R:                   M32R-Directives.     (line   9)
23580 * lp register, V850:                     V850-Regs.           (line  98)
23581 * lval:                                  Z8000 Directives.    (line  27)
23582 * LWP, i386:                             i386-LWP.            (line   6)
23583 * LWP, x86-64:                           i386-LWP.            (line   6)
23584 * M16C architecture option:              M32C-Opts.           (line  12)
23585 * M32C architecture option:              M32C-Opts.           (line   9)
23586 * M32C line comment character:           M32C-Chars.          (line   6)
23587 * M32C line separator:                   M32C-Chars.          (line  14)
23588 * M32C modifiers:                        M32C-Modifiers.      (line   6)
23589 * M32C options:                          M32C-Opts.           (line   6)
23590 * M32C support:                          M32C-Dependent.      (line   6)
23591 * M32R architecture options:             M32R-Opts.           (line   9)
23592 * M32R directives:                       M32R-Directives.     (line   6)
23593 * M32R options:                          M32R-Opts.           (line   6)
23594 * M32R support:                          M32R-Dependent.      (line   6)
23595 * M32R warnings:                         M32R-Warnings.       (line   6)
23596 * M680x0 addressing modes:               M68K-Syntax.         (line  21)
23597 * M680x0 architecture options:           M68K-Opts.           (line  98)
23598 * M680x0 branch improvement:             M68K-Branch.         (line   6)
23599 * M680x0 directives:                     M68K-Directives.     (line   6)
23600 * M680x0 floating point:                 M68K-Float.          (line   6)
23601 * M680x0 immediate character:            M68K-Chars.          (line  13)
23602 * M680x0 line comment character:         M68K-Chars.          (line   6)
23603 * M680x0 line separator:                 M68K-Chars.          (line  20)
23604 * M680x0 opcodes:                        M68K-opcodes.        (line   6)
23605 * M680x0 options:                        M68K-Opts.           (line   6)
23606 * M680x0 pseudo-opcodes:                 M68K-Branch.         (line   6)
23607 * M680x0 size modifiers:                 M68K-Syntax.         (line   8)
23608 * M680x0 support:                        M68K-Dependent.      (line   6)
23609 * M680x0 syntax:                         M68K-Syntax.         (line   8)
23610 * M68HC11 addressing modes:              M68HC11-Syntax.      (line  30)
23611 * M68HC11 and M68HC12 support:           M68HC11-Dependent.   (line   6)
23612 * M68HC11 assembler directive .far:      M68HC11-Directives.  (line  20)
23613 * M68HC11 assembler directive .interrupt: M68HC11-Directives. (line  26)
23614 * M68HC11 assembler directive .mode:     M68HC11-Directives.  (line  16)
23615 * M68HC11 assembler directive .relax:    M68HC11-Directives.  (line  10)
23616 * M68HC11 assembler directive .xrefb:    M68HC11-Directives.  (line  31)
23617 * M68HC11 assembler directives:          M68HC11-Directives.  (line   6)
23618 * M68HC11 branch improvement:            M68HC11-Branch.      (line   6)
23619 * M68HC11 floating point:                M68HC11-Float.       (line   6)
23620 * M68HC11 line comment character:        M68HC11-Syntax.      (line  17)
23621 * M68HC11 line separator:                M68HC11-Syntax.      (line  27)
23622 * M68HC11 modifiers:                     M68HC11-Modifiers.   (line   6)
23623 * M68HC11 opcodes:                       M68HC11-opcodes.     (line   6)
23624 * M68HC11 options:                       M68HC11-Opts.        (line   6)
23625 * M68HC11 pseudo-opcodes:                M68HC11-Branch.      (line   6)
23626 * M68HC11 syntax:                        M68HC11-Syntax.      (line   6)
23627 * M68HC12 assembler directives:          M68HC11-Directives.  (line   6)
23628 * machine dependencies:                  Machine Dependencies.
23629                                                               (line   6)
23630 * machine directives, AArch64:           AArch64 Directives.  (line   6)
23631 * machine directives, ARC:               ARC Directives.      (line   6)
23632 * machine directives, ARM:               ARM Directives.      (line   6)
23633 * machine directives, H8/300 (none):     H8/300 Directives.   (line   6)
23634 * machine directives, i860:              Directives-i860.     (line   6)
23635 * machine directives, i960:              Directives-i960.     (line   6)
23636 * machine directives, MSP 430:           MSP430 Directives.   (line   6)
23637 * machine directives, SH:                SH Directives.       (line   6)
23638 * machine directives, SH64:              SH64 Directives.     (line   9)
23639 * machine directives, SPARC:             Sparc-Directives.    (line   6)
23640 * machine directives, TIC54X:            TIC54X-Directives.   (line   6)
23641 * machine directives, TIC6X:             TIC6X Directives.    (line   6)
23642 * machine directives, TILE-Gx:           TILE-Gx Directives.  (line   6)
23643 * machine directives, TILEPro:           TILEPro Directives.  (line   6)
23644 * machine directives, V850:              V850 Directives.     (line   6)
23645 * machine directives, VAX:               VAX-directives.      (line   6)
23646 * machine directives, x86:               i386-Directives.     (line   6)
23647 * machine directives, XStormy16:         XStormy16 Directives.
23648                                                               (line   6)
23649 * machine independent directives:        Pseudo Ops.          (line   6)
23650 * machine instructions (not covered):    Manual.              (line  14)
23651 * machine-independent syntax:            Syntax.              (line   6)
23652 * macro directive:                       Macro.               (line  28)
23653 * macro directive, TIC54X:               TIC54X-Directives.   (line 153)
23654 * macros:                                Macro.               (line   6)
23655 * macros, count executed:                Macro.               (line 143)
23656 * Macros, MSP 430:                       MSP430-Macros.       (line   6)
23657 * macros, TIC54X:                        TIC54X-Macros.       (line   6)
23658 * make rules:                            MD.                  (line   6)
23659 * manual, structure and purpose:         Manual.              (line   6)
23660 * math builtins, TIC54X:                 TIC54X-Builtins.     (line   6)
23661 * Maximum number of continuation lines:  listing.             (line  34)
23662 * memory references, i386:               i386-Memory.         (line   6)
23663 * memory references, x86-64:             i386-Memory.         (line   6)
23664 * memory-mapped registers, TIC54X:       TIC54X-MMRegs.       (line   6)
23665 * merging text and data sections:        R.                   (line   6)
23666 * messages from assembler:               Errors.              (line   6)
23667 * MicroBlaze architectures:              MicroBlaze-Dependent.
23668                                                               (line   6)
23669 * MicroBlaze directives:                 MicroBlaze Directives.
23670                                                               (line   6)
23671 * MicroBlaze line comment character:     MicroBlaze-Chars.    (line   6)
23672 * MicroBlaze line separator:             MicroBlaze-Chars.    (line  14)
23673 * MicroBlaze support:                    MicroBlaze-Dependent.
23674                                                               (line  13)
23675 * minus, permitted arguments:            Infix Ops.           (line  49)
23676 * MIPS architecture options:             MIPS Opts.           (line  29)
23677 * MIPS big-endian output:                MIPS Opts.           (line  13)
23678 * MIPS CPU override:                     MIPS ISA.            (line  18)
23679 * MIPS debugging directives:             MIPS Stabs.          (line   6)
23680 * MIPS DSP Release 1 instruction generation override: MIPS ASE instruction generation overrides.
23681                                                               (line  21)
23682 * MIPS DSP Release 2 instruction generation override: MIPS ASE instruction generation overrides.
23683                                                               (line  26)
23684 * MIPS ECOFF sections:                   MIPS Object.         (line   6)
23685 * MIPS endianness:                       Overview.            (line 712)
23686 * MIPS ISA:                              Overview.            (line 718)
23687 * MIPS ISA override:                     MIPS ISA.            (line   6)
23688 * MIPS line comment character:           MIPS-Chars.          (line   6)
23689 * MIPS line separator:                   MIPS-Chars.          (line  14)
23690 * MIPS little-endian output:             MIPS Opts.           (line  13)
23691 * MIPS MCU instruction generation override: MIPS ASE instruction generation overrides.
23692                                                               (line  37)
23693 * MIPS MDMX instruction generation override: MIPS ASE instruction generation overrides.
23694                                                               (line  16)
23695 * MIPS MIPS-3D instruction generation override: MIPS ASE instruction generation overrides.
23696                                                               (line   6)
23697 * MIPS MT instruction generation override: MIPS ASE instruction generation overrides.
23698                                                               (line  32)
23699 * MIPS option stack:                     MIPS option stack.   (line   6)
23700 * MIPS processor:                        MIPS-Dependent.      (line   6)
23701 * MIT:                                   M68K-Syntax.         (line   6)
23702 * mlib directive, TIC54X:                TIC54X-Directives.   (line 159)
23703 * mlist directive, TIC54X:               TIC54X-Directives.   (line 164)
23704 * MMIX assembler directive BSPEC:        MMIX-Pseudos.        (line 131)
23705 * MMIX assembler directive BYTE:         MMIX-Pseudos.        (line  97)
23706 * MMIX assembler directive ESPEC:        MMIX-Pseudos.        (line 131)
23707 * MMIX assembler directive GREG:         MMIX-Pseudos.        (line  50)
23708 * MMIX assembler directive IS:           MMIX-Pseudos.        (line  42)
23709 * MMIX assembler directive LOC:          MMIX-Pseudos.        (line   7)
23710 * MMIX assembler directive LOCAL:        MMIX-Pseudos.        (line  28)
23711 * MMIX assembler directive OCTA:         MMIX-Pseudos.        (line 108)
23712 * MMIX assembler directive PREFIX:       MMIX-Pseudos.        (line 120)
23713 * MMIX assembler directive TETRA:        MMIX-Pseudos.        (line 108)
23714 * MMIX assembler directive WYDE:         MMIX-Pseudos.        (line 108)
23715 * MMIX assembler directives:             MMIX-Pseudos.        (line   6)
23716 * MMIX line comment characters:          MMIX-Chars.          (line   6)
23717 * MMIX options:                          MMIX-Opts.           (line   6)
23718 * MMIX pseudo-op BSPEC:                  MMIX-Pseudos.        (line 131)
23719 * MMIX pseudo-op BYTE:                   MMIX-Pseudos.        (line  97)
23720 * MMIX pseudo-op ESPEC:                  MMIX-Pseudos.        (line 131)
23721 * MMIX pseudo-op GREG:                   MMIX-Pseudos.        (line  50)
23722 * MMIX pseudo-op IS:                     MMIX-Pseudos.        (line  42)
23723 * MMIX pseudo-op LOC:                    MMIX-Pseudos.        (line   7)
23724 * MMIX pseudo-op LOCAL:                  MMIX-Pseudos.        (line  28)
23725 * MMIX pseudo-op OCTA:                   MMIX-Pseudos.        (line 108)
23726 * MMIX pseudo-op PREFIX:                 MMIX-Pseudos.        (line 120)
23727 * MMIX pseudo-op TETRA:                  MMIX-Pseudos.        (line 108)
23728 * MMIX pseudo-op WYDE:                   MMIX-Pseudos.        (line 108)
23729 * MMIX pseudo-ops:                       MMIX-Pseudos.        (line   6)
23730 * MMIX register names:                   MMIX-Regs.           (line   6)
23731 * MMIX support:                          MMIX-Dependent.      (line   6)
23732 * mmixal differences:                    MMIX-mmixal.         (line   6)
23733 * mmregs directive, TIC54X:              TIC54X-Directives.   (line 169)
23734 * mmsg directive, TIC54X:                TIC54X-Directives.   (line  77)
23735 * MMX, i386:                             i386-SIMD.           (line   6)
23736 * MMX, x86-64:                           i386-SIMD.           (line   6)
23737 * mnemonic compatibility, i386:          i386-Mnemonics.      (line  62)
23738 * mnemonic suffixes, i386:               i386-Variations.     (line  29)
23739 * mnemonic suffixes, x86-64:             i386-Variations.     (line  29)
23740 * mnemonics for opcodes, VAX:            VAX-opcodes.         (line   6)
23741 * mnemonics, AVR:                        AVR Opcodes.         (line   6)
23742 * mnemonics, D10V:                       D10V-Opcodes.        (line   6)
23743 * mnemonics, D30V:                       D30V-Opcodes.        (line   6)
23744 * mnemonics, H8/300:                     H8/300 Opcodes.      (line   6)
23745 * mnemonics, LM32:                       LM32 Opcodes.        (line   6)
23746 * mnemonics, SH:                         SH Opcodes.          (line   6)
23747 * mnemonics, SH64:                       SH64 Opcodes.        (line   6)
23748 * mnemonics, Z8000:                      Z8000 Opcodes.       (line   6)
23749 * mnolist directive, TIC54X:             TIC54X-Directives.   (line 164)
23750 * modifiers, M32C:                       M32C-Modifiers.      (line   6)
23751 * Motorola syntax for the 680x0:         M68K-Moto-Syntax.    (line   6)
23752 * MOVI instructions, relaxation:         Xtensa Immediate Relaxation.
23753                                                               (line  12)
23754 * MOVN, MOVZ and MOVK group relocations, AArch64: AArch64-Relocations.
23755                                                               (line   6)
23756 * MOVW and MOVT relocations, ARM:        ARM-Relocations.     (line  21)
23757 * MRI compatibility mode:                M.                   (line   6)
23758 * mri directive:                         MRI.                 (line   6)
23759 * MRI mode, temporarily:                 MRI.                 (line   6)
23760 * MSP 430 floating point (IEEE):         MSP430 Floating Point.
23761                                                               (line   6)
23762 * MSP 430 identifiers:                   MSP430-Chars.        (line  17)
23763 * MSP 430 line comment character:        MSP430-Chars.        (line   6)
23764 * MSP 430 line separator:                MSP430-Chars.        (line  14)
23765 * MSP 430 machine directives:            MSP430 Directives.   (line   6)
23766 * MSP 430 macros:                        MSP430-Macros.       (line   6)
23767 * MSP 430 opcodes:                       MSP430 Opcodes.      (line   6)
23768 * MSP 430 options (none):                MSP430 Options.      (line   6)
23769 * MSP 430 profiling capability:          MSP430 Profiling Capability.
23770                                                               (line   6)
23771 * MSP 430 register names:                MSP430-Regs.         (line   6)
23772 * MSP 430 support:                       MSP430-Dependent.    (line   6)
23773 * MSP430 Assembler Extensions:           MSP430-Ext.          (line   6)
23774 * mul instruction, i386:                 i386-Notes.          (line   6)
23775 * mul instruction, x86-64:               i386-Notes.          (line   6)
23776 * N32K support:                          NS32K-Dependent.     (line   6)
23777 * name:                                  Z8000 Directives.    (line  18)
23778 * named section:                         Section.             (line   6)
23779 * named sections:                        Ld Sections.         (line   8)
23780 * names, symbol:                         Symbol Names.        (line   6)
23781 * naming object file:                    o.                   (line   6)
23782 * new page, in listings:                 Eject.               (line   6)
23783 * newblock directive, TIC54X:            TIC54X-Directives.   (line 175)
23784 * newline (\n):                          Strings.             (line  21)
23785 * newline, required at file end:         Statements.          (line  14)
23786 * no-absolute-literals directive:        Absolute Literals Directive.
23787                                                               (line   6)
23788 * no-longcalls directive:                Longcalls Directive. (line   6)
23789 * no-schedule directive:                 Schedule Directive.  (line   6)
23790 * no-transform directive:                Transform Directive. (line   6)
23791 * nolist directive:                      Nolist.              (line   6)
23792 * nolist directive, TIC54X:              TIC54X-Directives.   (line 131)
23793 * NOP pseudo op, ARM:                    ARM Opcodes.         (line   9)
23794 * notes for Alpha:                       Alpha Notes.         (line   6)
23795 * NS32K line comment character:          NS32K-Chars.         (line   6)
23796 * NS32K line separator:                  NS32K-Chars.         (line  18)
23797 * null-terminated strings:               Asciz.               (line   6)
23798 * number constants:                      Numbers.             (line   6)
23799 * number of macros executed:             Macro.               (line 143)
23800 * numbered subsections:                  Sub-Sections.        (line   6)
23801 * numbers, 16-bit:                       hword.               (line   6)
23802 * numeric values:                        Expressions.         (line   6)
23803 * nword directive, SPARC:                Sparc-Directives.    (line  20)
23804 * object attributes:                     Object Attributes.   (line   6)
23805 * object file:                           Object.              (line   6)
23806 * object file format:                    Object Formats.      (line   6)
23807 * object file name:                      o.                   (line   6)
23808 * object file, after errors:             Z.                   (line   6)
23809 * obsolescent directives:                Deprecated.          (line   6)
23810 * octa directive:                        Octa.                (line   6)
23811 * octal character code (\DDD):           Strings.             (line  30)
23812 * octal integers:                        Integers.            (line   9)
23813 * offset directive:                      Offset.              (line   6)
23814 * offset directive, V850:                V850 Directives.     (line   6)
23815 * opcode mnemonics, VAX:                 VAX-opcodes.         (line   6)
23816 * opcode names, TILE-Gx:                 TILE-Gx Opcodes.     (line   6)
23817 * opcode names, TILEPro:                 TILEPro Opcodes.     (line   6)
23818 * opcode names, Xtensa:                  Xtensa Opcodes.      (line   6)
23819 * opcode summary, AVR:                   AVR Opcodes.         (line   6)
23820 * opcode summary, D10V:                  D10V-Opcodes.        (line   6)
23821 * opcode summary, D30V:                  D30V-Opcodes.        (line   6)
23822 * opcode summary, H8/300:                H8/300 Opcodes.      (line   6)
23823 * opcode summary, LM32:                  LM32 Opcodes.        (line   6)
23824 * opcode summary, SH:                    SH Opcodes.          (line   6)
23825 * opcode summary, SH64:                  SH64 Opcodes.        (line   6)
23826 * opcode summary, Z8000:                 Z8000 Opcodes.       (line   6)
23827 * opcodes for AArch64:                   AArch64 Opcodes.     (line   6)
23828 * opcodes for ARC:                       ARC Opcodes.         (line   6)
23829 * opcodes for ARM:                       ARM Opcodes.         (line   6)
23830 * opcodes for MSP 430:                   MSP430 Opcodes.      (line   6)
23831 * opcodes for V850:                      V850 Opcodes.        (line   6)
23832 * opcodes, i860:                         Opcodes for i860.    (line   6)
23833 * opcodes, i960:                         Opcodes for i960.    (line   6)
23834 * opcodes, M680x0:                       M68K-opcodes.        (line   6)
23835 * opcodes, M68HC11:                      M68HC11-opcodes.     (line   6)
23836 * operand delimiters, i386:              i386-Variations.     (line  15)
23837 * operand delimiters, x86-64:            i386-Variations.     (line  15)
23838 * operand notation, VAX:                 VAX-operands.        (line   6)
23839 * operands in expressions:               Arguments.           (line   6)
23840 * operator precedence:                   Infix Ops.           (line  11)
23841 * operators, in expressions:             Operators.           (line   6)
23842 * operators, permitted arguments:        Infix Ops.           (line   6)
23843 * optimization, D10V:                    Overview.            (line 478)
23844 * optimization, D30V:                    Overview.            (line 483)
23845 * optimizations:                         Xtensa Optimizations.
23846                                                               (line   6)
23847 * option directive, ARC:                 ARC Directives.      (line 162)
23848 * option directive, TIC54X:              TIC54X-Directives.   (line 179)
23849 * option summary:                        Overview.            (line   6)
23850 * options for AArch64 (none):            AArch64 Options.     (line   6)
23851 * options for Alpha:                     Alpha Options.       (line   6)
23852 * options for ARC (none):                ARC Options.         (line   6)
23853 * options for ARM (none):                ARM Options.         (line   6)
23854 * options for AVR (none):                AVR Options.         (line   6)
23855 * options for Blackfin (none):           Blackfin Options.    (line   6)
23856 * options for i386:                      i386-Options.        (line   6)
23857 * options for IA-64:                     IA-64 Options.       (line   6)
23858 * options for LM32 (none):               LM32 Options.        (line   6)
23859 * options for MSP430 (none):             MSP430 Options.      (line   6)
23860 * options for PDP-11:                    PDP-11-Options.      (line   6)
23861 * options for PowerPC:                   PowerPC-Opts.        (line   6)
23862 * options for s390:                      s390 Options.        (line   6)
23863 * options for SCORE:                     SCORE-Opts.          (line   6)
23864 * options for SPARC:                     Sparc-Opts.          (line   6)
23865 * options for TIC6X:                     TIC6X Options.       (line   6)
23866 * options for V850 (none):               V850 Options.        (line   6)
23867 * options for VAX/VMS:                   VAX-Opts.            (line  42)
23868 * options for x86-64:                    i386-Options.        (line   6)
23869 * options for Z80:                       Z80 Options.         (line   6)
23870 * options, all versions of assembler:    Invoking.            (line   6)
23871 * options, command line:                 Command Line.        (line  13)
23872 * options, CRIS:                         CRIS-Opts.           (line   6)
23873 * options, D10V:                         D10V-Opts.           (line   6)
23874 * options, D30V:                         D30V-Opts.           (line   6)
23875 * options, Epiphany:                     Epiphany Options.    (line   6)
23876 * options, H8/300:                       H8/300 Options.      (line   6)
23877 * options, i960:                         Options-i960.        (line   6)
23878 * options, IP2K:                         IP2K-Opts.           (line   6)
23879 * options, M32C:                         M32C-Opts.           (line   6)
23880 * options, M32R:                         M32R-Opts.           (line   6)
23881 * options, M680x0:                       M68K-Opts.           (line   6)
23882 * options, M68HC11:                      M68HC11-Opts.        (line   6)
23883 * options, MMIX:                         MMIX-Opts.           (line   6)
23884 * options, PJ:                           PJ Options.          (line   6)
23885 * options, RL78:                         RL78-Opts.           (line   6)
23886 * options, RX:                           RX-Opts.             (line   6)
23887 * options, SH:                           SH Options.          (line   6)
23888 * options, SH64:                         SH64 Options.        (line   6)
23889 * options, TIC54X:                       TIC54X-Opts.         (line   6)
23890 * options, XGATE:                        XGATE-Opts.          (line   6)
23891 * options, Z8000:                        Z8000 Options.       (line   6)
23892 * org directive:                         Org.                 (line   6)
23893 * other attribute, of a.out symbol:      Symbol Other.        (line   6)
23894 * output file:                           Object.              (line   6)
23895 * p2align directive:                     P2align.             (line   6)
23896 * p2alignl directive:                    P2align.             (line  28)
23897 * p2alignw directive:                    P2align.             (line  28)
23898 * padding the location counter:          Align.               (line   6)
23899 * padding the location counter given a power of two: P2align. (line   6)
23900 * padding the location counter given number of bytes: Balign. (line   6)
23901 * page, in listings:                     Eject.               (line   6)
23902 * paper size, for listings:              Psize.               (line   6)
23903 * paths for .include:                    I.                   (line   6)
23904 * patterns, writing in memory:           Fill.                (line   6)
23905 * PDP-11 comments:                       PDP-11-Syntax.       (line  16)
23906 * PDP-11 floating-point register syntax: PDP-11-Syntax.       (line  13)
23907 * PDP-11 general-purpose register syntax: PDP-11-Syntax.      (line  10)
23908 * PDP-11 instruction naming:             PDP-11-Mnemonics.    (line   6)
23909 * PDP-11 line separator:                 PDP-11-Syntax.       (line  19)
23910 * PDP-11 support:                        PDP-11-Dependent.    (line   6)
23911 * PDP-11 syntax:                         PDP-11-Syntax.       (line   6)
23912 * PIC code generation for ARM:           ARM Options.         (line 169)
23913 * PIC code generation for M32R:          M32R-Opts.           (line  42)
23914 * PIC selection, MIPS:                   MIPS Opts.           (line  21)
23915 * PJ endianness:                         Overview.            (line 615)
23916 * PJ line comment character:             PJ-Chars.            (line   6)
23917 * PJ line separator:                     PJ-Chars.            (line  14)
23918 * PJ options:                            PJ Options.          (line   6)
23919 * PJ support:                            PJ-Dependent.        (line   6)
23920 * plus, permitted arguments:             Infix Ops.           (line  44)
23921 * popsection directive:                  PopSection.          (line   6)
23922 * Position-independent code, CRIS:       CRIS-Opts.           (line  27)
23923 * Position-independent code, symbols in, CRIS: CRIS-Pic.      (line   6)
23924 * PowerPC architectures:                 PowerPC-Opts.        (line   6)
23925 * PowerPC directives:                    PowerPC-Pseudo.      (line   6)
23926 * PowerPC line comment character:        PowerPC-Chars.       (line   6)
23927 * PowerPC line separator:                PowerPC-Chars.       (line  18)
23928 * PowerPC options:                       PowerPC-Opts.        (line   6)
23929 * PowerPC support:                       PPC-Dependent.       (line   6)
23930 * precedence of operators:               Infix Ops.           (line  11)
23931 * precision, floating point:             Flonums.             (line   6)
23932 * prefix operators:                      Prefix Ops.          (line   6)
23933 * prefixes, i386:                        i386-Prefixes.       (line   6)
23934 * preprocessing:                         Preprocessing.       (line   6)
23935 * preprocessing, turning on and off:     Preprocessing.       (line  27)
23936 * previous directive:                    Previous.            (line   6)
23937 * primary attributes, COFF symbols:      COFF Symbols.        (line  13)
23938 * print directive:                       Print.               (line   6)
23939 * proc directive, SPARC:                 Sparc-Directives.    (line  25)
23940 * profiler directive, MSP 430:           MSP430 Directives.   (line  22)
23941 * profiling capability for MSP 430:      MSP430 Profiling Capability.
23942                                                               (line   6)
23943 * protected directive:                   Protected.           (line   6)
23944 * pseudo-op .arch, CRIS:                 CRIS-Pseudos.        (line  45)
23945 * pseudo-op .dword, CRIS:                CRIS-Pseudos.        (line  12)
23946 * pseudo-op .syntax, CRIS:               CRIS-Pseudos.        (line  17)
23947 * pseudo-op BSPEC, MMIX:                 MMIX-Pseudos.        (line 131)
23948 * pseudo-op BYTE, MMIX:                  MMIX-Pseudos.        (line  97)
23949 * pseudo-op ESPEC, MMIX:                 MMIX-Pseudos.        (line 131)
23950 * pseudo-op GREG, MMIX:                  MMIX-Pseudos.        (line  50)
23951 * pseudo-op IS, MMIX:                    MMIX-Pseudos.        (line  42)
23952 * pseudo-op LOC, MMIX:                   MMIX-Pseudos.        (line   7)
23953 * pseudo-op LOCAL, MMIX:                 MMIX-Pseudos.        (line  28)
23954 * pseudo-op OCTA, MMIX:                  MMIX-Pseudos.        (line 108)
23955 * pseudo-op PREFIX, MMIX:                MMIX-Pseudos.        (line 120)
23956 * pseudo-op TETRA, MMIX:                 MMIX-Pseudos.        (line 108)
23957 * pseudo-op WYDE, MMIX:                  MMIX-Pseudos.        (line 108)
23958 * pseudo-opcodes for XStormy16:          XStormy16 Opcodes.   (line   6)
23959 * pseudo-opcodes, M680x0:                M68K-Branch.         (line   6)
23960 * pseudo-opcodes, M68HC11:               M68HC11-Branch.      (line   6)
23961 * pseudo-ops for branch, VAX:            VAX-branch.          (line   6)
23962 * pseudo-ops, CRIS:                      CRIS-Pseudos.        (line   6)
23963 * pseudo-ops, machine independent:       Pseudo Ops.          (line   6)
23964 * pseudo-ops, MMIX:                      MMIX-Pseudos.        (line   6)
23965 * psize directive:                       Psize.               (line   6)
23966 * PSR bits:                              IA-64-Bits.          (line   6)
23967 * pstring directive, TIC54X:             TIC54X-Directives.   (line 208)
23968 * psw register, V850:                    V850-Regs.           (line 116)
23969 * purgem directive:                      Purgem.              (line   6)
23970 * purpose of GNU assembler:              GNU Assembler.       (line  12)
23971 * pushsection directive:                 PushSection.         (line   6)
23972 * quad directive:                        Quad.                (line   6)
23973 * quad directive, i386:                  i386-Float.          (line  21)
23974 * quad directive, x86-64:                i386-Float.          (line  21)
23975 * real-mode code, i386:                  i386-16bit.          (line   6)
23976 * ref directive, TIC54X:                 TIC54X-Directives.   (line 103)
23977 * register directive, SPARC:             Sparc-Directives.    (line  29)
23978 * register names, AArch64:               AArch64-Regs.        (line   6)
23979 * register names, Alpha:                 Alpha-Regs.          (line   6)
23980 * register names, ARC:                   ARC-Regs.            (line   6)
23981 * register names, ARM:                   ARM-Regs.            (line   6)
23982 * register names, AVR:                   AVR-Regs.            (line   6)
23983 * register names, CRIS:                  CRIS-Regs.           (line   6)
23984 * register names, H8/300:                H8/300-Regs.         (line   6)
23985 * register names, IA-64:                 IA-64-Regs.          (line   6)
23986 * register names, LM32:                  LM32-Regs.           (line   6)
23987 * register names, MMIX:                  MMIX-Regs.           (line   6)
23988 * register names, MSP 430:               MSP430-Regs.         (line   6)
23989 * register names, Sparc:                 Sparc-Regs.          (line   6)
23990 * register names, TILE-Gx:               TILE-Gx Registers.   (line   6)
23991 * register names, TILEPro:               TILEPro Registers.   (line   6)
23992 * register names, V850:                  V850-Regs.           (line   6)
23993 * register names, VAX:                   VAX-operands.        (line  17)
23994 * register names, Xtensa:                Xtensa Registers.    (line   6)
23995 * register names, Z80:                   Z80-Regs.            (line   6)
23996 * register naming, s390:                 s390 Register.       (line   6)
23997 * register operands, i386:               i386-Variations.     (line  15)
23998 * register operands, x86-64:             i386-Variations.     (line  15)
23999 * registers, D10V:                       D10V-Regs.           (line   6)
24000 * registers, D30V:                       D30V-Regs.           (line   6)
24001 * registers, i386:                       i386-Regs.           (line   6)
24002 * registers, SH:                         SH-Regs.             (line   6)
24003 * registers, SH64:                       SH64-Regs.           (line   6)
24004 * registers, TIC54X memory-mapped:       TIC54X-MMRegs.       (line   6)
24005 * registers, x86-64:                     i386-Regs.           (line   6)
24006 * registers, Z8000:                      Z8000-Regs.          (line   6)
24007 * relaxation:                            Xtensa Relaxation.   (line   6)
24008 * relaxation of ADDI instructions:       Xtensa Immediate Relaxation.
24009                                                               (line  43)
24010 * relaxation of branch instructions:     Xtensa Branch Relaxation.
24011                                                               (line   6)
24012 * relaxation of call instructions:       Xtensa Call Relaxation.
24013                                                               (line   6)
24014 * relaxation of immediate fields:        Xtensa Immediate Relaxation.
24015                                                               (line   6)
24016 * relaxation of L16SI instructions:      Xtensa Immediate Relaxation.
24017                                                               (line  23)
24018 * relaxation of L16UI instructions:      Xtensa Immediate Relaxation.
24019                                                               (line  23)
24020 * relaxation of L32I instructions:       Xtensa Immediate Relaxation.
24021                                                               (line  23)
24022 * relaxation of L8UI instructions:       Xtensa Immediate Relaxation.
24023                                                               (line  23)
24024 * relaxation of MOVI instructions:       Xtensa Immediate Relaxation.
24025                                                               (line  12)
24026 * reloc directive:                       Reloc.               (line   6)
24027 * relocation:                            Sections.            (line   6)
24028 * relocation example:                    Ld Sections.         (line  40)
24029 * relocations, AArch64:                  AArch64-Relocations. (line   6)
24030 * relocations, Alpha:                    Alpha-Relocs.        (line   6)
24031 * relocations, Sparc:                    Sparc-Relocs.        (line   6)
24032 * repeat prefixes, i386:                 i386-Prefixes.       (line  44)
24033 * reporting bugs in assembler:           Reporting Bugs.      (line   6)
24034 * rept directive:                        Rept.                (line   6)
24035 * reserve directive, SPARC:              Sparc-Directives.    (line  39)
24036 * return instructions, i386:             i386-Variations.     (line  41)
24037 * return instructions, x86-64:           i386-Variations.     (line  41)
24038 * REX prefixes, i386:                    i386-Prefixes.       (line  46)
24039 * RL78 assembler directives:             RL78-Directives.     (line   6)
24040 * RL78 line comment character:           RL78-Chars.          (line   6)
24041 * RL78 line separator:                   RL78-Chars.          (line  14)
24042 * RL78 modifiers:                        RL78-Modifiers.      (line   6)
24043 * RL78 options:                          RL78-Opts.           (line   6)
24044 * RL78 support:                          RL78-Dependent.      (line   6)
24045 * rsect:                                 Z8000 Directives.    (line  52)
24046 * RX assembler directive .3byte:         RX-Directives.       (line   9)
24047 * RX assembler directive .fetchalign:    RX-Directives.       (line  13)
24048 * RX assembler directives:               RX-Directives.       (line   6)
24049 * RX floating point:                     RX-Float.            (line   6)
24050 * RX line comment character:             RX-Chars.            (line   6)
24051 * RX line separator:                     RX-Chars.            (line  14)
24052 * RX modifiers:                          RX-Modifiers.        (line   6)
24053 * RX options:                            RX-Opts.             (line   6)
24054 * RX support:                            RX-Dependent.        (line   6)
24055 * s390 floating point:                   s390 Floating Point. (line   6)
24056 * s390 instruction aliases:              s390 Aliases.        (line   6)
24057 * s390 instruction formats:              s390 Formats.        (line   6)
24058 * s390 instruction marker:               s390 Instruction Marker.
24059                                                               (line   6)
24060 * s390 instruction mnemonics:            s390 Mnemonics.      (line   6)
24061 * s390 instruction operand modifier:     s390 Operand Modifier.
24062                                                               (line   6)
24063 * s390 instruction operands:             s390 Operands.       (line   6)
24064 * s390 instruction syntax:               s390 Syntax.         (line   6)
24065 * s390 line comment character:           s390 Characters.     (line   6)
24066 * s390 line separator:                   s390 Characters.     (line  13)
24067 * s390 literal pool entries:             s390 Literal Pool Entries.
24068                                                               (line   6)
24069 * s390 options:                          s390 Options.        (line   6)
24070 * s390 register naming:                  s390 Register.       (line   6)
24071 * s390 support:                          S/390-Dependent.     (line   6)
24072 * sblock directive, TIC54X:              TIC54X-Directives.   (line 182)
24073 * sbttl directive:                       Sbttl.               (line   6)
24074 * schedule directive:                    Schedule Directive.  (line   6)
24075 * scl directive:                         Scl.                 (line   6)
24076 * SCORE architectures:                   SCORE-Opts.          (line   6)
24077 * SCORE directives:                      SCORE-Pseudo.        (line   6)
24078 * SCORE line comment character:          SCORE-Chars.         (line   6)
24079 * SCORE line separator:                  SCORE-Chars.         (line  14)
24080 * SCORE options:                         SCORE-Opts.          (line   6)
24081 * SCORE processor:                       SCORE-Dependent.     (line   6)
24082 * sdaoff pseudo-op, V850:                V850 Opcodes.        (line  65)
24083 * search path for .include:              I.                   (line   6)
24084 * sect directive, MSP 430:               MSP430 Directives.   (line  18)
24085 * sect directive, TIC54X:                TIC54X-Directives.   (line 188)
24086 * section directive (COFF version):      Section.             (line  16)
24087 * section directive (ELF version):       Section.             (line  73)
24088 * section directive, V850:               V850 Directives.     (line   9)
24089 * section override prefixes, i386:       i386-Prefixes.       (line  23)
24090 * Section Stack <1>:                     Section.             (line  68)
24091 * Section Stack <2>:                     PushSection.         (line   6)
24092 * Section Stack <3>:                     Previous.            (line   6)
24093 * Section Stack <4>:                     SubSection.          (line   6)
24094 * Section Stack:                         PopSection.          (line   6)
24095 * section-relative addressing:           Secs Background.     (line  68)
24096 * sections:                              Sections.            (line   6)
24097 * sections in messages, internal:        As Sections.         (line   6)
24098 * sections, i386:                        i386-Variations.     (line  47)
24099 * sections, named:                       Ld Sections.         (line   8)
24100 * sections, x86-64:                      i386-Variations.     (line  47)
24101 * seg directive, SPARC:                  Sparc-Directives.    (line  44)
24102 * segm:                                  Z8000 Directives.    (line  10)
24103 * set directive:                         Set.                 (line   6)
24104 * set directive, TIC54X:                 TIC54X-Directives.   (line 191)
24105 * SH addressing modes:                   SH-Addressing.       (line   6)
24106 * SH floating point (IEEE):              SH Floating Point.   (line   6)
24107 * SH line comment character:             SH-Chars.            (line   6)
24108 * SH line separator:                     SH-Chars.            (line   8)
24109 * SH machine directives:                 SH Directives.       (line   6)
24110 * SH opcode summary:                     SH Opcodes.          (line   6)
24111 * SH options:                            SH Options.          (line   6)
24112 * SH registers:                          SH-Regs.             (line   6)
24113 * SH support:                            SH-Dependent.        (line   6)
24114 * SH64 ABI options:                      SH64 Options.        (line  29)
24115 * SH64 addressing modes:                 SH64-Addressing.     (line   6)
24116 * SH64 ISA options:                      SH64 Options.        (line   6)
24117 * SH64 line comment character:           SH64-Chars.          (line   6)
24118 * SH64 line separator:                   SH64-Chars.          (line  13)
24119 * SH64 machine directives:               SH64 Directives.     (line   9)
24120 * SH64 opcode summary:                   SH64 Opcodes.        (line   6)
24121 * SH64 options:                          SH64 Options.        (line   6)
24122 * SH64 registers:                        SH64-Regs.           (line   6)
24123 * SH64 support:                          SH64-Dependent.      (line   6)
24124 * shigh directive, M32R:                 M32R-Directives.     (line  26)
24125 * short directive:                       Short.               (line   6)
24126 * short directive, ARC:                  ARC Directives.      (line 171)
24127 * short directive, TIC54X:               TIC54X-Directives.   (line 111)
24128 * SIMD, i386:                            i386-SIMD.           (line   6)
24129 * SIMD, x86-64:                          i386-SIMD.           (line   6)
24130 * single character constant:             Chars.               (line   6)
24131 * single directive:                      Single.              (line   6)
24132 * single directive, i386:                i386-Float.          (line  14)
24133 * single directive, x86-64:              i386-Float.          (line  14)
24134 * single quote, Z80:                     Z80-Chars.           (line  20)
24135 * sixteen bit integers:                  hword.               (line   6)
24136 * sixteen byte integer:                  Octa.                (line   6)
24137 * size directive (COFF version):         Size.                (line  11)
24138 * size directive (ELF version):          Size.                (line  19)
24139 * size modifiers, D10V:                  D10V-Size.           (line   6)
24140 * size modifiers, D30V:                  D30V-Size.           (line   6)
24141 * size modifiers, M680x0:                M68K-Syntax.         (line   8)
24142 * size prefixes, i386:                   i386-Prefixes.       (line  27)
24143 * size suffixes, H8/300:                 H8/300 Opcodes.      (line 163)
24144 * size, translations, Sparc:             Sparc-Size-Translations.
24145                                                               (line   6)
24146 * sizes operands, i386:                  i386-Variations.     (line  29)
24147 * sizes operands, x86-64:                i386-Variations.     (line  29)
24148 * skip directive:                        Skip.                (line   6)
24149 * skip directive, M680x0:                M68K-Directives.     (line  19)
24150 * skip directive, SPARC:                 Sparc-Directives.    (line  48)
24151 * sleb128 directive:                     Sleb128.             (line   6)
24152 * small objects, MIPS ECOFF:             MIPS Object.         (line  11)
24153 * SmartMIPS instruction generation override: MIPS ASE instruction generation overrides.
24154                                                               (line  11)
24155 * SOM symbol attributes:                 SOM Symbols.         (line   6)
24156 * source program:                        Input Files.         (line   6)
24157 * source, destination operands; i386:    i386-Variations.     (line  22)
24158 * source, destination operands; x86-64:  i386-Variations.     (line  22)
24159 * sp register:                           Xtensa Registers.    (line   6)
24160 * sp register, V850:                     V850-Regs.           (line  14)
24161 * space directive:                       Space.               (line   6)
24162 * space directive, TIC54X:               TIC54X-Directives.   (line 196)
24163 * space used, maximum for assembly:      statistics.          (line   6)
24164 * SPARC architectures:                   Sparc-Opts.          (line   6)
24165 * Sparc constants:                       Sparc-Constants.     (line   6)
24166 * SPARC data alignment:                  Sparc-Aligned-Data.  (line   6)
24167 * SPARC floating point (IEEE):           Sparc-Float.         (line   6)
24168 * Sparc line comment character:          Sparc-Chars.         (line   6)
24169 * Sparc line separator:                  Sparc-Chars.         (line  14)
24170 * SPARC machine directives:              Sparc-Directives.    (line   6)
24171 * SPARC options:                         Sparc-Opts.          (line   6)
24172 * Sparc registers:                       Sparc-Regs.          (line   6)
24173 * Sparc relocations:                     Sparc-Relocs.        (line   6)
24174 * Sparc size translations:               Sparc-Size-Translations.
24175                                                               (line   6)
24176 * SPARC support:                         Sparc-Dependent.     (line   6)
24177 * SPARC syntax:                          Sparc-Aligned-Data.  (line  21)
24178 * special characters, M680x0:            M68K-Chars.          (line   6)
24179 * special purpose registers, MSP 430:    MSP430-Regs.         (line  11)
24180 * sslist directive, TIC54X:              TIC54X-Directives.   (line 203)
24181 * ssnolist directive, TIC54X:            TIC54X-Directives.   (line 203)
24182 * stabd directive:                       Stab.                (line  38)
24183 * stabn directive:                       Stab.                (line  48)
24184 * stabs directive:                       Stab.                (line  51)
24185 * stabX directives:                      Stab.                (line   6)
24186 * standard assembler sections:           Secs Background.     (line  27)
24187 * standard input, as input file:         Command Line.        (line  10)
24188 * statement separator character:         Statements.          (line   6)
24189 * statement separator, AArch64:          AArch64-Chars.       (line  10)
24190 * statement separator, Alpha:            Alpha-Chars.         (line  11)
24191 * statement separator, ARC:              ARC-Chars.           (line  12)
24192 * statement separator, ARM:              ARM-Chars.           (line  14)
24193 * statement separator, AVR:              AVR-Chars.           (line  14)
24194 * statement separator, CR16:             CR16-Chars.          (line  13)
24195 * statement separator, Epiphany:         Epiphany-Chars.      (line  14)
24196 * statement separator, H8/300:           H8/300-Chars.        (line   8)
24197 * statement separator, i386:             i386-Chars.          (line  18)
24198 * statement separator, i860:             i860-Chars.          (line  14)
24199 * statement separator, i960:             i960-Chars.          (line  14)
24200 * statement separator, IA-64:            IA-64-Chars.         (line   8)
24201 * statement separator, IP2K:             IP2K-Chars.          (line  14)
24202 * statement separator, LM32:             LM32-Chars.          (line  12)
24203 * statement separator, M32C:             M32C-Chars.          (line  14)
24204 * statement separator, M68HC11:          M68HC11-Syntax.      (line  27)
24205 * statement separator, MicroBlaze:       MicroBlaze-Chars.    (line  14)
24206 * statement separator, MIPS:             MIPS-Chars.          (line  14)
24207 * statement separator, MSP 430:          MSP430-Chars.        (line  14)
24208 * statement separator, NS32K:            NS32K-Chars.         (line  18)
24209 * statement separator, PJ:               PJ-Chars.            (line  14)
24210 * statement separator, PowerPC:          PowerPC-Chars.       (line  18)
24211 * statement separator, RL78:             RL78-Chars.          (line  14)
24212 * statement separator, RX:               RX-Chars.            (line  14)
24213 * statement separator, s390:             s390 Characters.     (line  13)
24214 * statement separator, SCORE:            SCORE-Chars.         (line  14)
24215 * statement separator, SH:               SH-Chars.            (line   8)
24216 * statement separator, SH64:             SH64-Chars.          (line  13)
24217 * statement separator, Sparc:            Sparc-Chars.         (line  14)
24218 * statement separator, TIC54X:           TIC54X-Chars.        (line  17)
24219 * statement separator, TIC6X:            TIC6X Syntax.        (line  13)
24220 * statement separator, V850:             V850-Chars.          (line  13)
24221 * statement separator, VAX:              VAX-Chars.           (line  14)
24222 * statement separator, XGATE:            XGATE-Syntax.        (line  26)
24223 * statement separator, XStormy16:        XStormy16-Chars.     (line  14)
24224 * statement separator, Z80:              Z80-Chars.           (line  13)
24225 * statement separator, Z8000:            Z8000-Chars.         (line  13)
24226 * statements, structure of:              Statements.          (line   6)
24227 * statistics, about assembly:            statistics.          (line   6)
24228 * stopping the assembly:                 Abort.               (line   6)
24229 * string constants:                      Strings.             (line   6)
24230 * string directive:                      String.              (line   8)
24231 * string directive on HPPA:              HPPA Directives.     (line 137)
24232 * string directive, TIC54X:              TIC54X-Directives.   (line 208)
24233 * string literals:                       Ascii.               (line   6)
24234 * string, copying to object file:        String.              (line   8)
24235 * string16 directive:                    String.              (line   8)
24236 * string16, copying to object file:      String.              (line   8)
24237 * string32 directive:                    String.              (line   8)
24238 * string32, copying to object file:      String.              (line   8)
24239 * string64 directive:                    String.              (line   8)
24240 * string64, copying to object file:      String.              (line   8)
24241 * string8 directive:                     String.              (line   8)
24242 * string8, copying to object file:       String.              (line   8)
24243 * struct directive:                      Struct.              (line   6)
24244 * struct directive, TIC54X:              TIC54X-Directives.   (line 216)
24245 * structure debugging, COFF:             Tag.                 (line   6)
24246 * sub-instruction ordering, D10V:        D10V-Chars.          (line  14)
24247 * sub-instruction ordering, D30V:        D30V-Chars.          (line  14)
24248 * sub-instructions, D10V:                D10V-Subs.           (line   6)
24249 * sub-instructions, D30V:                D30V-Subs.           (line   6)
24250 * subexpressions:                        Arguments.           (line  24)
24251 * subsection directive:                  SubSection.          (line   6)
24252 * subsym builtins, TIC54X:               TIC54X-Macros.       (line  16)
24253 * subtitles for listings:                Sbttl.               (line   6)
24254 * subtraction, permitted arguments:      Infix Ops.           (line  49)
24255 * summary of options:                    Overview.            (line   6)
24256 * support:                               HPPA-Dependent.      (line   6)
24257 * supporting files, including:           Include.             (line   6)
24258 * suppressing warnings:                  W.                   (line  11)
24259 * sval:                                  Z8000 Directives.    (line  33)
24260 * symbol attributes:                     Symbol Attributes.   (line   6)
24261 * symbol attributes, a.out:              a.out Symbols.       (line   6)
24262 * symbol attributes, COFF:               COFF Symbols.        (line   6)
24263 * symbol attributes, SOM:                SOM Symbols.         (line   6)
24264 * symbol descriptor, COFF:               Desc.                (line   6)
24265 * symbol modifiers <1>:                  LM32-Modifiers.      (line  12)
24266 * symbol modifiers <2>:                  M32C-Modifiers.      (line  11)
24267 * symbol modifiers <3>:                  M68HC11-Modifiers.   (line  12)
24268 * symbol modifiers:                      AVR-Modifiers.       (line  12)
24269 * symbol modifiers, TILE-Gx:             TILE-Gx Modifiers.   (line   6)
24270 * symbol modifiers, TILEPro:             TILEPro Modifiers.   (line   6)
24271 * symbol names:                          Symbol Names.        (line   6)
24272 * symbol names, $ in <1>:                D10V-Chars.          (line  53)
24273 * symbol names, $ in <2>:                D30V-Chars.          (line  70)
24274 * symbol names, $ in <3>:                SH64-Chars.          (line  15)
24275 * symbol names, $ in:                    SH-Chars.            (line  15)
24276 * symbol names, local:                   Symbol Names.        (line  27)
24277 * symbol names, temporary:               Symbol Names.        (line  40)
24278 * symbol storage class (COFF):           Scl.                 (line   6)
24279 * symbol type:                           Symbol Type.         (line   6)
24280 * symbol type, COFF:                     Type.                (line  11)
24281 * symbol type, ELF:                      Type.                (line  22)
24282 * symbol value:                          Symbol Value.        (line   6)
24283 * symbol value, setting:                 Set.                 (line   6)
24284 * symbol values, assigning:              Setting Symbols.     (line   6)
24285 * symbol versioning:                     Symver.              (line   6)
24286 * symbol, common:                        Comm.                (line   6)
24287 * symbol, making visible to linker:      Global.              (line   6)
24288 * symbolic debuggers, information for:   Stab.                (line   6)
24289 * symbols:                               Symbols.             (line   6)
24290 * Symbols in position-independent code, CRIS: CRIS-Pic.       (line   6)
24291 * symbols with uppercase, VAX/VMS:       VAX-Opts.            (line  42)
24292 * symbols, assigning values to:          Equ.                 (line   6)
24293 * Symbols, built-in, CRIS:               CRIS-Symbols.        (line   6)
24294 * Symbols, CRIS, built-in:               CRIS-Symbols.        (line   6)
24295 * symbols, local common:                 Lcomm.               (line   6)
24296 * symver directive:                      Symver.              (line   6)
24297 * syntax compatibility, i386:            i386-Variations.     (line   6)
24298 * syntax compatibility, x86-64:          i386-Variations.     (line   6)
24299 * syntax, AVR:                           AVR-Modifiers.       (line   6)
24300 * syntax, Blackfin:                      Blackfin Syntax.     (line   6)
24301 * syntax, D10V:                          D10V-Syntax.         (line   6)
24302 * syntax, D30V:                          D30V-Syntax.         (line   6)
24303 * syntax, LM32:                          LM32-Modifiers.      (line   6)
24304 * syntax, M680x0:                        M68K-Syntax.         (line   8)
24305 * syntax, M68HC11 <1>:                   M68HC11-Modifiers.   (line   6)
24306 * syntax, M68HC11:                       M68HC11-Syntax.      (line   6)
24307 * syntax, machine-independent:           Syntax.              (line   6)
24308 * syntax, RL78:                          RL78-Modifiers.      (line   6)
24309 * syntax, RX:                            RX-Modifiers.        (line   6)
24310 * syntax, SPARC:                         Sparc-Aligned-Data.  (line  21)
24311 * syntax, TILE-Gx:                       TILE-Gx Syntax.      (line   6)
24312 * syntax, TILEPro:                       TILEPro Syntax.      (line   6)
24313 * syntax, XGATE:                         XGATE-Syntax.        (line   6)
24314 * syntax, Xtensa assembler:              Xtensa Syntax.       (line   6)
24315 * sysproc directive, i960:               Directives-i960.     (line  37)
24316 * tab (\t):                              Strings.             (line  27)
24317 * tab directive, TIC54X:                 TIC54X-Directives.   (line 247)
24318 * tag directive:                         Tag.                 (line   6)
24319 * tag directive, TIC54X:                 TIC54X-Directives.   (line 216)
24320 * TBM, i386:                             i386-TBM.            (line   6)
24321 * TBM, x86-64:                           i386-TBM.            (line   6)
24322 * tdaoff pseudo-op, V850:                V850 Opcodes.        (line  81)
24323 * temporary symbol names:                Symbol Names.        (line  40)
24324 * text and data sections, joining:       R.                   (line   6)
24325 * text directive:                        Text.                (line   6)
24326 * text section:                          Ld Sections.         (line   9)
24327 * tfloat directive, i386:                i386-Float.          (line  14)
24328 * tfloat directive, x86-64:              i386-Float.          (line  14)
24329 * Thumb support <1>:                     ARM-Dependent.       (line   6)
24330 * Thumb support:                         AArch64-Dependent.   (line   6)
24331 * TIC54X builtin math functions:         TIC54X-Builtins.     (line   6)
24332 * TIC54X line comment character:         TIC54X-Chars.        (line   6)
24333 * TIC54X line separator:                 TIC54X-Chars.        (line  17)
24334 * TIC54X machine directives:             TIC54X-Directives.   (line   6)
24335 * TIC54X memory-mapped registers:        TIC54X-MMRegs.       (line   6)
24336 * TIC54X options:                        TIC54X-Opts.         (line   6)
24337 * TIC54X subsym builtins:                TIC54X-Macros.       (line  16)
24338 * TIC54X support:                        TIC54X-Dependent.    (line   6)
24339 * TIC54X-specific macros:                TIC54X-Macros.       (line   6)
24340 * TIC6X big-endian output:               TIC6X Options.       (line  46)
24341 * TIC6X line comment character:          TIC6X Syntax.        (line   6)
24342 * TIC6X line separator:                  TIC6X Syntax.        (line  13)
24343 * TIC6X little-endian output:            TIC6X Options.       (line  46)
24344 * TIC6X machine directives:              TIC6X Directives.    (line   6)
24345 * TIC6X options:                         TIC6X Options.       (line   6)
24346 * TIC6X support:                         TIC6X-Dependent.     (line   6)
24347 * TILE-Gx machine directives:            TILE-Gx Directives.  (line   6)
24348 * TILE-Gx modifiers:                     TILE-Gx Modifiers.   (line   6)
24349 * TILE-Gx opcode names:                  TILE-Gx Opcodes.     (line   6)
24350 * TILE-Gx register names:                TILE-Gx Registers.   (line   6)
24351 * TILE-Gx support:                       TILE-Gx-Dependent.   (line   6)
24352 * TILE-Gx syntax:                        TILE-Gx Syntax.      (line   6)
24353 * TILEPro machine directives:            TILEPro Directives.  (line   6)
24354 * TILEPro modifiers:                     TILEPro Modifiers.   (line   6)
24355 * TILEPro opcode names:                  TILEPro Opcodes.     (line   6)
24356 * TILEPro register names:                TILEPro Registers.   (line   6)
24357 * TILEPro support:                       TILEPro-Dependent.   (line   6)
24358 * TILEPro syntax:                        TILEPro Syntax.      (line   6)
24359 * time, total for assembly:              statistics.          (line   6)
24360 * title directive:                       Title.               (line   6)
24361 * TMS320C6X support:                     TIC6X-Dependent.     (line   6)
24362 * tp register, V850:                     V850-Regs.           (line  20)
24363 * transform directive:                   Transform Directive. (line   6)
24364 * trusted compiler:                      f.                   (line   6)
24365 * turning preprocessing on and off:      Preprocessing.       (line  27)
24366 * type directive (COFF version):         Type.                (line  11)
24367 * type directive (ELF version):          Type.                (line  22)
24368 * type of a symbol:                      Symbol Type.         (line   6)
24369 * ualong directive, SH:                  SH Directives.       (line   6)
24370 * uaquad directive, SH:                  SH Directives.       (line   6)
24371 * uaword directive, SH:                  SH Directives.       (line   6)
24372 * ubyte directive, TIC54X:               TIC54X-Directives.   (line  36)
24373 * uchar directive, TIC54X:               TIC54X-Directives.   (line  36)
24374 * uhalf directive, TIC54X:               TIC54X-Directives.   (line 111)
24375 * uint directive, TIC54X:                TIC54X-Directives.   (line 111)
24376 * uleb128 directive:                     Uleb128.             (line   6)
24377 * ulong directive, TIC54X:               TIC54X-Directives.   (line 135)
24378 * undefined section:                     Ld Sections.         (line  36)
24379 * union directive, TIC54X:               TIC54X-Directives.   (line 250)
24380 * unsegm:                                Z8000 Directives.    (line  14)
24381 * usect directive, TIC54X:               TIC54X-Directives.   (line 262)
24382 * ushort directive, TIC54X:              TIC54X-Directives.   (line 111)
24383 * uword directive, TIC54X:               TIC54X-Directives.   (line 111)
24384 * V850 command line options:             V850 Options.        (line   9)
24385 * V850 floating point (IEEE):            V850 Floating Point. (line   6)
24386 * V850 line comment character:           V850-Chars.          (line   6)
24387 * V850 line separator:                   V850-Chars.          (line  13)
24388 * V850 machine directives:               V850 Directives.     (line   6)
24389 * V850 opcodes:                          V850 Opcodes.        (line   6)
24390 * V850 options (none):                   V850 Options.        (line   6)
24391 * V850 register names:                   V850-Regs.           (line   6)
24392 * V850 support:                          V850-Dependent.      (line   6)
24393 * val directive:                         Val.                 (line   6)
24394 * value attribute, COFF:                 Val.                 (line   6)
24395 * value of a symbol:                     Symbol Value.        (line   6)
24396 * var directive, TIC54X:                 TIC54X-Directives.   (line 272)
24397 * VAX bitfields not supported:           VAX-no.              (line   6)
24398 * VAX branch improvement:                VAX-branch.          (line   6)
24399 * VAX command-line options ignored:      VAX-Opts.            (line   6)
24400 * VAX displacement sizing character:     VAX-operands.        (line  12)
24401 * VAX floating point:                    VAX-float.           (line   6)
24402 * VAX immediate character:               VAX-operands.        (line   6)
24403 * VAX indirect character:                VAX-operands.        (line   9)
24404 * VAX line comment character:            VAX-Chars.           (line   6)
24405 * VAX line separator:                    VAX-Chars.           (line  14)
24406 * VAX machine directives:                VAX-directives.      (line   6)
24407 * VAX opcode mnemonics:                  VAX-opcodes.         (line   6)
24408 * VAX operand notation:                  VAX-operands.        (line   6)
24409 * VAX register names:                    VAX-operands.        (line  17)
24410 * VAX support:                           Vax-Dependent.       (line   6)
24411 * Vax-11 C compatibility:                VAX-Opts.            (line  42)
24412 * VAX/VMS options:                       VAX-Opts.            (line  42)
24413 * version directive:                     Version.             (line   6)
24414 * version directive, TIC54X:             TIC54X-Directives.   (line 276)
24415 * version of assembler:                  v.                   (line   6)
24416 * versions of symbols:                   Symver.              (line   6)
24417 * visibility <1>:                        Hidden.              (line   6)
24418 * visibility <2>:                        Protected.           (line   6)
24419 * visibility:                            Internal.            (line   6)
24420 * VMS (VAX) options:                     VAX-Opts.            (line  42)
24421 * vtable_entry directive:                VTableEntry.         (line   6)
24422 * vtable_inherit directive:              VTableInherit.       (line   6)
24423 * warning directive:                     Warning.             (line   6)
24424 * warning for altered difference tables: K.                   (line   6)
24425 * warning messages:                      Errors.              (line   6)
24426 * warnings, causing error:               W.                   (line  16)
24427 * warnings, M32R:                        M32R-Warnings.       (line   6)
24428 * warnings, suppressing:                 W.                   (line  11)
24429 * warnings, switching on:                W.                   (line  19)
24430 * weak directive:                        Weak.                (line   6)
24431 * weakref directive:                     Weakref.             (line   6)
24432 * whitespace:                            Whitespace.          (line   6)
24433 * whitespace, removed by preprocessor:   Preprocessing.       (line   7)
24434 * wide floating point directives, VAX:   VAX-directives.      (line  10)
24435 * width directive, TIC54X:               TIC54X-Directives.   (line 127)
24436 * Width of continuation lines of disassembly output: listing. (line  21)
24437 * Width of first line disassembly output: listing.            (line  16)
24438 * Width of source line output:           listing.             (line  28)
24439 * wmsg directive, TIC54X:                TIC54X-Directives.   (line  77)
24440 * word directive:                        Word.                (line   6)
24441 * word directive, ARC:                   ARC Directives.      (line 174)
24442 * word directive, H8/300:                H8/300 Directives.   (line   6)
24443 * word directive, i386:                  i386-Float.          (line  21)
24444 * word directive, SPARC:                 Sparc-Directives.    (line  51)
24445 * word directive, TIC54X:                TIC54X-Directives.   (line 111)
24446 * word directive, x86-64:                i386-Float.          (line  21)
24447 * writing patterns in memory:            Fill.                (line   6)
24448 * wval:                                  Z8000 Directives.    (line  24)
24449 * x86 machine directives:                i386-Directives.     (line   6)
24450 * x86-64 arch directive:                 i386-Arch.           (line   6)
24451 * x86-64 att_syntax pseudo op:           i386-Variations.     (line   6)
24452 * x86-64 conversion instructions:        i386-Mnemonics.      (line  37)
24453 * x86-64 floating point:                 i386-Float.          (line   6)
24454 * x86-64 immediate operands:             i386-Variations.     (line  15)
24455 * x86-64 instruction naming:             i386-Mnemonics.      (line   6)
24456 * x86-64 intel_syntax pseudo op:         i386-Variations.     (line   6)
24457 * x86-64 jump optimization:              i386-Jumps.          (line   6)
24458 * x86-64 jump, call, return:             i386-Variations.     (line  41)
24459 * x86-64 jump/call operands:             i386-Variations.     (line  15)
24460 * x86-64 memory references:              i386-Memory.         (line   6)
24461 * x86-64 options:                        i386-Options.        (line   6)
24462 * x86-64 register operands:              i386-Variations.     (line  15)
24463 * x86-64 registers:                      i386-Regs.           (line   6)
24464 * x86-64 sections:                       i386-Variations.     (line  47)
24465 * x86-64 size suffixes:                  i386-Variations.     (line  29)
24466 * x86-64 source, destination operands:   i386-Variations.     (line  22)
24467 * x86-64 support:                        i386-Dependent.      (line   6)
24468 * x86-64 syntax compatibility:           i386-Variations.     (line   6)
24469 * xfloat directive, TIC54X:              TIC54X-Directives.   (line  64)
24470 * XGATE addressing modes:                XGATE-Syntax.        (line  29)
24471 * XGATE assembler directives:            XGATE-Directives.    (line   6)
24472 * XGATE floating point:                  XGATE-Float.         (line   6)
24473 * XGATE line comment character:          XGATE-Syntax.        (line  16)
24474 * XGATE line separator:                  XGATE-Syntax.        (line  26)
24475 * XGATE opcodes:                         XGATE-opcodes.       (line   6)
24476 * XGATE options:                         XGATE-Opts.          (line   6)
24477 * XGATE support:                         XGATE-Dependent.     (line   6)
24478 * XGATE syntax:                          XGATE-Syntax.        (line   6)
24479 * xlong directive, TIC54X:               TIC54X-Directives.   (line 135)
24480 * XStormy16 comment character:           XStormy16-Chars.     (line  11)
24481 * XStormy16 line comment character:      XStormy16-Chars.     (line   6)
24482 * XStormy16 line separator:              XStormy16-Chars.     (line  14)
24483 * XStormy16 machine directives:          XStormy16 Directives.
24484                                                               (line   6)
24485 * XStormy16 pseudo-opcodes:              XStormy16 Opcodes.   (line   6)
24486 * XStormy16 support:                     XSTORMY16-Dependent. (line   6)
24487 * Xtensa architecture:                   Xtensa-Dependent.    (line   6)
24488 * Xtensa assembler syntax:               Xtensa Syntax.       (line   6)
24489 * Xtensa directives:                     Xtensa Directives.   (line   6)
24490 * Xtensa opcode names:                   Xtensa Opcodes.      (line   6)
24491 * Xtensa register names:                 Xtensa Registers.    (line   6)
24492 * xword directive, SPARC:                Sparc-Directives.    (line  55)
24493 * Z80 $:                                 Z80-Chars.           (line  15)
24494 * Z80 ':                                 Z80-Chars.           (line  20)
24495 * Z80 floating point:                    Z80 Floating Point.  (line   6)
24496 * Z80 line comment character:            Z80-Chars.           (line   6)
24497 * Z80 line separator:                    Z80-Chars.           (line  13)
24498 * Z80 options:                           Z80 Options.         (line   6)
24499 * Z80 registers:                         Z80-Regs.            (line   6)
24500 * Z80 support:                           Z80-Dependent.       (line   6)
24501 * Z80 Syntax:                            Z80 Options.         (line  47)
24502 * Z80, \:                                Z80-Chars.           (line  18)
24503 * Z80, case sensitivity:                 Z80-Case.            (line   6)
24504 * Z80-only directives:                   Z80 Directives.      (line   9)
24505 * Z800 addressing modes:                 Z8000-Addressing.    (line   6)
24506 * Z8000 directives:                      Z8000 Directives.    (line   6)
24507 * Z8000 line comment character:          Z8000-Chars.         (line   6)
24508 * Z8000 line separator:                  Z8000-Chars.         (line  13)
24509 * Z8000 opcode summary:                  Z8000 Opcodes.       (line   6)
24510 * Z8000 options:                         Z8000 Options.       (line   6)
24511 * Z8000 registers:                       Z8000-Regs.          (line   6)
24512 * Z8000 support:                         Z8000-Dependent.     (line   6)
24513 * zdaoff pseudo-op, V850:                V850 Opcodes.        (line  99)
24514 * zero register, V850:                   V850-Regs.           (line   7)
24515 * zero-terminated strings:               Asciz.               (line   6)
24516
24517
24518 \1f
24519 Tag Table:
24520 Node: Top\7f836
24521 Node: Overview\7f1824
24522 Node: Manual\7f32482
24523 Node: GNU Assembler\7f33426
24524 Node: Object Formats\7f34597
24525 Node: Command Line\7f35049
24526 Node: Input Files\7f36136
24527 Node: Object\7f38117
24528 Node: Errors\7f39013
24529 Node: Invoking\7f40208
24530 Node: a\7f42163
24531 Node: alternate\7f44074
24532 Node: D\7f44246
24533 Node: f\7f44479
24534 Node: I\7f44987
24535 Node: K\7f45531
24536 Node: L\7f45835
24537 Node: listing\7f46574
24538 Node: M\7f48233
24539 Node: MD\7f52634
24540 Node: o\7f53060
24541 Node: R\7f53515
24542 Node: statistics\7f54545
24543 Node: traditional-format\7f54952
24544 Node: v\7f55425
24545 Node: W\7f55700
24546 Node: Z\7f56607
24547 Node: Syntax\7f57129
24548 Node: Preprocessing\7f57721
24549 Node: Whitespace\7f59284
24550 Node: Comments\7f59680
24551 Node: Symbol Intro\7f61691
24552 Node: Statements\7f62418
24553 Node: Constants\7f64407
24554 Node: Characters\7f65038
24555 Node: Strings\7f65540
24556 Node: Chars\7f67706
24557 Node: Numbers\7f68460
24558 Node: Integers\7f69000
24559 Node: Bignums\7f69656
24560 Node: Flonums\7f70012
24561 Node: Sections\7f71759
24562 Node: Secs Background\7f72137
24563 Node: Ld Sections\7f77176
24564 Node: As Sections\7f79560
24565 Node: Sub-Sections\7f80470
24566 Node: bss\7f83615
24567 Node: Symbols\7f84565
24568 Node: Labels\7f85213
24569 Node: Setting Symbols\7f85944
24570 Node: Symbol Names\7f86498
24571 Node: Dot\7f91789
24572 Node: Symbol Attributes\7f92236
24573 Node: Symbol Value\7f92973
24574 Node: Symbol Type\7f94018
24575 Node: a.out Symbols\7f94406
24576 Node: Symbol Desc\7f94668
24577 Node: Symbol Other\7f94963
24578 Node: COFF Symbols\7f95132
24579 Node: SOM Symbols\7f95805
24580 Node: Expressions\7f96247
24581 Node: Empty Exprs\7f96996
24582 Node: Integer Exprs\7f97343
24583 Node: Arguments\7f97738
24584 Node: Operators\7f98844
24585 Node: Prefix Ops\7f99179
24586 Node: Infix Ops\7f99507
24587 Node: Pseudo Ops\7f101897
24588 Node: Abort\7f107521
24589 Node: ABORT (COFF)\7f107933
24590 Node: Align\7f108141
24591 Node: Altmacro\7f110423
24592 Node: Ascii\7f111752
24593 Node: Asciz\7f112061
24594 Node: Balign\7f112306
24595 Node: Bundle directives\7f114182
24596 Node: Byte\7f117111
24597 Node: CFI directives\7f117372
24598 Node: Comm\7f123001
24599 Ref: Comm-Footnote-1\7f124602
24600 Node: Data\7f124964
24601 Node: Def\7f125281
24602 Node: Desc\7f125513
24603 Node: Dim\7f126013
24604 Node: Double\7f126270
24605 Node: Eject\7f126608
24606 Node: Else\7f126783
24607 Node: Elseif\7f127083
24608 Node: End\7f127377
24609 Node: Endef\7f127592
24610 Node: Endfunc\7f127769
24611 Node: Endif\7f127944
24612 Node: Equ\7f128205
24613 Node: Equiv\7f128719
24614 Node: Eqv\7f129275
24615 Node: Err\7f129639
24616 Node: Error\7f129950
24617 Node: Exitm\7f130395
24618 Node: Extern\7f130564
24619 Node: Fail\7f130825
24620 Node: File\7f131270
24621 Node: Fill\7f132599
24622 Node: Float\7f133563
24623 Node: Func\7f133905
24624 Node: Global\7f134495
24625 Node: Gnu_attribute\7f135252
24626 Node: Hidden\7f135477
24627 Node: hword\7f136063
24628 Node: Ident\7f136391
24629 Node: If\7f136965
24630 Node: Incbin\7f140024
24631 Node: Include\7f140719
24632 Node: Int\7f141270
24633 Node: Internal\7f141651
24634 Node: Irp\7f142299
24635 Node: Irpc\7f143178
24636 Node: Lcomm\7f144095
24637 Node: Lflags\7f144843
24638 Node: Line\7f145037
24639 Node: Linkonce\7f145950
24640 Node: List\7f147179
24641 Node: Ln\7f147787
24642 Node: Loc\7f147937
24643 Node: Loc_mark_labels\7f149323
24644 Node: Local\7f149807
24645 Node: Long\7f150419
24646 Node: Macro\7f150597
24647 Node: MRI\7f156519
24648 Node: Noaltmacro\7f156857
24649 Node: Nolist\7f157026
24650 Node: Octa\7f157456
24651 Node: Offset\7f157793
24652 Node: Org\7f158120
24653 Node: P2align\7f159405
24654 Node: PopSection\7f161333
24655 Node: Previous\7f161841
24656 Node: Print\7f163254
24657 Node: Protected\7f163483
24658 Node: Psize\7f164130
24659 Node: Purgem\7f164814
24660 Node: PushSection\7f165035
24661 Node: Quad\7f165778
24662 Node: Reloc\7f166234
24663 Node: Rept\7f166995
24664 Node: Sbttl\7f167409
24665 Node: Scl\7f167774
24666 Node: Section\7f168115
24667 Node: Set\7f174230
24668 Node: Short\7f174803
24669 Node: Single\7f175126
24670 Node: Size\7f175473
24671 Node: Skip\7f176147
24672 Node: Sleb128\7f176471
24673 Node: Space\7f176795
24674 Node: Stab\7f177436
24675 Node: String\7f179440
24676 Node: Struct\7f180434
24677 Node: SubSection\7f181159
24678 Node: Symver\7f181722
24679 Node: Tag\7f184115
24680 Node: Text\7f184497
24681 Node: Title\7f184818
24682 Node: Type\7f185199
24683 Node: Uleb128\7f187512
24684 Node: Val\7f187836
24685 Node: Version\7f188086
24686 Node: VTableEntry\7f188361
24687 Node: VTableInherit\7f188651
24688 Node: Warning\7f189101
24689 Node: Weak\7f189335
24690 Node: Weakref\7f190004
24691 Node: Word\7f190969
24692 Node: Deprecated\7f192815
24693 Node: Object Attributes\7f193050
24694 Node: GNU Object Attributes\7f194770
24695 Node: Defining New Object Attributes\7f197323
24696 Node: Machine Dependencies\7f198120
24697 Node: AArch64-Dependent\7f201825
24698 Node: AArch64 Options\7f202271
24699 Node: AArch64 Syntax\7f202680
24700 Node: AArch64-Chars\7f202977
24701 Node: AArch64-Regs\7f203463
24702 Node: AArch64-Relocations\7f203757
24703 Node: AArch64 Floating Point\7f204836
24704 Node: AArch64 Directives\7f205061
24705 Node: AArch64 Opcodes\7f206609
24706 Node: AArch64 Mapping Symbols\7f207288
24707 Node: Alpha-Dependent\7f207670
24708 Node: Alpha Notes\7f208110
24709 Node: Alpha Options\7f208391
24710 Node: Alpha Syntax\7f210866
24711 Node: Alpha-Chars\7f211335
24712 Node: Alpha-Regs\7f211747
24713 Node: Alpha-Relocs\7f212134
24714 Node: Alpha Floating Point\7f218392
24715 Node: Alpha Directives\7f218614
24716 Node: Alpha Opcodes\7f224137
24717 Node: ARC-Dependent\7f224432
24718 Node: ARC Options\7f224815
24719 Node: ARC Syntax\7f225884
24720 Node: ARC-Chars\7f226116
24721 Node: ARC-Regs\7f226597
24722 Node: ARC Floating Point\7f226721
24723 Node: ARC Directives\7f227032
24724 Node: ARC Opcodes\7f233004
24725 Node: ARM-Dependent\7f233230
24726 Node: ARM Options\7f233695
24727 Node: ARM Syntax\7f242529
24728 Node: ARM-Instruction-Set\7f242897
24729 Node: ARM-Chars\7f244129
24730 Node: ARM-Regs\7f244840
24731 Node: ARM-Neon-Alignment\7f245049
24732 Node: ARM Floating Point\7f245513
24733 Node: ARM-Relocations\7f245712
24734 Node: ARM Directives\7f246846
24735 Ref: arm_pad\7f248163
24736 Ref: arm_fnend\7f251500
24737 Ref: arm_fnstart\7f251824
24738 Ref: arm_save\7f254834
24739 Ref: arm_setfp\7f255535
24740 Node: ARM Opcodes\7f258827
24741 Node: ARM Mapping Symbols\7f260915
24742 Node: ARM Unwinding Tutorial\7f261725
24743 Node: AVR-Dependent\7f267927
24744 Node: AVR Options\7f268217
24745 Node: AVR Syntax\7f273009
24746 Node: AVR-Chars\7f273296
24747 Node: AVR-Regs\7f273855
24748 Node: AVR-Modifiers\7f274434
24749 Node: AVR Opcodes\7f276494
24750 Node: Blackfin-Dependent\7f281740
24751 Node: Blackfin Options\7f282052
24752 Node: Blackfin Syntax\7f283026
24753 Node: Blackfin Directives\7f289233
24754 Node: CR16-Dependent\7f289979
24755 Node: CR16 Operand Qualifiers\7f290279
24756 Node: CR16 Syntax\7f292940
24757 Node: CR16-Chars\7f293126
24758 Node: CRIS-Dependent\7f293663
24759 Node: CRIS-Opts\7f294009
24760 Ref: march-option\7f295695
24761 Node: CRIS-Expand\7f297512
24762 Node: CRIS-Symbols\7f298695
24763 Node: CRIS-Syntax\7f299864
24764 Node: CRIS-Chars\7f300200
24765 Node: CRIS-Pic\7f300751
24766 Ref: crispic\7f300947
24767 Node: CRIS-Regs\7f304487
24768 Node: CRIS-Pseudos\7f304904
24769 Ref: crisnous\7f305680
24770 Node: D10V-Dependent\7f306962
24771 Node: D10V-Opts\7f307313
24772 Node: D10V-Syntax\7f308275
24773 Node: D10V-Size\7f308804
24774 Node: D10V-Subs\7f309777
24775 Node: D10V-Chars\7f310812
24776 Node: D10V-Regs\7f312724
24777 Node: D10V-Addressing\7f313769
24778 Node: D10V-Word\7f314455
24779 Node: D10V-Float\7f314970
24780 Node: D10V-Opcodes\7f315281
24781 Node: D30V-Dependent\7f315674
24782 Node: D30V-Opts\7f316031
24783 Node: D30V-Syntax\7f316708
24784 Node: D30V-Size\7f317242
24785 Node: D30V-Subs\7f318215
24786 Node: D30V-Chars\7f319252
24787 Node: D30V-Guarded\7f321860
24788 Node: D30V-Regs\7f322542
24789 Node: D30V-Addressing\7f323683
24790 Node: D30V-Float\7f324353
24791 Node: D30V-Opcodes\7f324666
24792 Node: Epiphany-Dependent\7f325061
24793 Node: Epiphany Options\7f325349
24794 Node: Epiphany Syntax\7f325748
24795 Node: Epiphany-Chars\7f325949
24796 Node: H8/300-Dependent\7f326503
24797 Node: H8/300 Options\7f326919
24798 Node: H8/300 Syntax\7f327186
24799 Node: H8/300-Chars\7f327487
24800 Node: H8/300-Regs\7f327786
24801 Node: H8/300-Addressing\7f328705
24802 Node: H8/300 Floating Point\7f329746
24803 Node: H8/300 Directives\7f330073
24804 Node: H8/300 Opcodes\7f331201
24805 Node: HPPA-Dependent\7f339523
24806 Node: HPPA Notes\7f339958
24807 Node: HPPA Options\7f340716
24808 Node: HPPA Syntax\7f340911
24809 Node: HPPA Floating Point\7f342181
24810 Node: HPPA Directives\7f342387
24811 Node: HPPA Opcodes\7f351073
24812 Node: ESA/390-Dependent\7f351332
24813 Node: ESA/390 Notes\7f351792
24814 Node: ESA/390 Options\7f352583
24815 Node: ESA/390 Syntax\7f352793
24816 Node: ESA/390 Floating Point\7f354966
24817 Node: ESA/390 Directives\7f355245
24818 Node: ESA/390 Opcodes\7f358534
24819 Node: i386-Dependent\7f358796
24820 Node: i386-Options\7f360126
24821 Node: i386-Directives\7f364692
24822 Node: i386-Syntax\7f365430
24823 Node: i386-Variations\7f365735
24824 Node: i386-Chars\7f368276
24825 Node: i386-Mnemonics\7f369005
24826 Node: i386-Regs\7f372316
24827 Node: i386-Prefixes\7f374361
24828 Node: i386-Memory\7f377121
24829 Node: i386-Jumps\7f380058
24830 Node: i386-Float\7f381179
24831 Node: i386-SIMD\7f383010
24832 Node: i386-LWP\7f384119
24833 Node: i386-BMI\7f384953
24834 Node: i386-TBM\7f385331
24835 Node: i386-16bit\7f385861
24836 Node: i386-Bugs\7f387932
24837 Node: i386-Arch\7f388686
24838 Node: i386-Notes\7f391515
24839 Node: i860-Dependent\7f392373
24840 Node: Notes-i860\7f392813
24841 Node: Options-i860\7f393718
24842 Node: Directives-i860\7f395081
24843 Node: Opcodes for i860\7f396150
24844 Node: Syntax of i860\7f398340
24845 Node: i860-Chars\7f398524
24846 Node: i960-Dependent\7f399083
24847 Node: Options-i960\7f399530
24848 Node: Floating Point-i960\7f403415
24849 Node: Directives-i960\7f403683
24850 Node: Opcodes for i960\7f405717
24851 Node: callj-i960\7f406357
24852 Node: Compare-and-branch-i960\7f406846
24853 Node: Syntax of i960\7f408750
24854 Node: i960-Chars\7f408950
24855 Node: IA-64-Dependent\7f409493
24856 Node: IA-64 Options\7f409794
24857 Node: IA-64 Syntax\7f412945
24858 Node: IA-64-Chars\7f413351
24859 Node: IA-64-Regs\7f413581
24860 Node: IA-64-Bits\7f414507
24861 Node: IA-64-Relocs\7f415037
24862 Node: IA-64 Opcodes\7f415509
24863 Node: IP2K-Dependent\7f415781
24864 Node: IP2K-Opts\7f416053
24865 Node: IP2K-Syntax\7f416553
24866 Node: IP2K-Chars\7f416727
24867 Node: LM32-Dependent\7f417270
24868 Node: LM32 Options\7f417565
24869 Node: LM32 Syntax\7f418199
24870 Node: LM32-Regs\7f418495
24871 Node: LM32-Modifiers\7f419454
24872 Node: LM32-Chars\7f420829
24873 Node: LM32 Opcodes\7f421337
24874 Node: M32C-Dependent\7f421641
24875 Node: M32C-Opts\7f422150
24876 Node: M32C-Syntax\7f422570
24877 Node: M32C-Modifiers\7f422805
24878 Node: M32C-Chars\7f424594
24879 Node: M32R-Dependent\7f425160
24880 Node: M32R-Opts\7f425481
24881 Node: M32R-Directives\7f429648
24882 Node: M32R-Warnings\7f433623
24883 Node: M68K-Dependent\7f436629
24884 Node: M68K-Opts\7f437096
24885 Node: M68K-Syntax\7f444469
24886 Node: M68K-Moto-Syntax\7f446309
24887 Node: M68K-Float\7f448899
24888 Node: M68K-Directives\7f449419
24889 Node: M68K-opcodes\7f450747
24890 Node: M68K-Branch\7f450973
24891 Node: M68K-Chars\7f455171
24892 Node: M68HC11-Dependent\7f456034
24893 Node: M68HC11-Opts\7f456571
24894 Node: M68HC11-Syntax\7f460876
24895 Node: M68HC11-Modifiers\7f463667
24896 Node: M68HC11-Directives\7f465495
24897 Node: M68HC11-Float\7f466871
24898 Node: M68HC11-opcodes\7f467399
24899 Node: M68HC11-Branch\7f467581
24900 Node: MicroBlaze-Dependent\7f470030
24901 Node: MicroBlaze Directives\7f470722
24902 Node: MicroBlaze Syntax\7f472105
24903 Node: MicroBlaze-Chars\7f472337
24904 Node: MIPS-Dependent\7f472889
24905 Node: MIPS Opts\7f474117
24906 Node: MIPS Object\7f485185
24907 Node: MIPS Stabs\7f486751
24908 Node: MIPS symbol sizes\7f487473
24909 Node: MIPS ISA\7f489142
24910 Node: MIPS autoextend\7f490879
24911 Node: MIPS insn\7f491609
24912 Node: MIPS option stack\7f492894
24913 Node: MIPS ASE instruction generation overrides\7f493668
24914 Node: MIPS floating-point\7f495706
24915 Node: MIPS Syntax\7f496612
24916 Node: MIPS-Chars\7f496874
24917 Node: MMIX-Dependent\7f497416
24918 Node: MMIX-Opts\7f497796
24919 Node: MMIX-Expand\7f501400
24920 Node: MMIX-Syntax\7f502715
24921 Ref: mmixsite\7f503072
24922 Node: MMIX-Chars\7f503913
24923 Node: MMIX-Symbols\7f504787
24924 Node: MMIX-Regs\7f506855
24925 Node: MMIX-Pseudos\7f507880
24926 Ref: MMIX-loc\7f508021
24927 Ref: MMIX-local\7f509101
24928 Ref: MMIX-is\7f509633
24929 Ref: MMIX-greg\7f509904
24930 Ref: GREG-base\7f510823
24931 Ref: MMIX-byte\7f512140
24932 Ref: MMIX-constants\7f512611
24933 Ref: MMIX-prefix\7f513257
24934 Ref: MMIX-spec\7f513631
24935 Node: MMIX-mmixal\7f513965
24936 Node: MSP430-Dependent\7f517463
24937 Node: MSP430 Options\7f517932
24938 Node: MSP430 Syntax\7f518218
24939 Node: MSP430-Macros\7f518534
24940 Node: MSP430-Chars\7f519265
24941 Node: MSP430-Regs\7f519980
24942 Node: MSP430-Ext\7f520540
24943 Node: MSP430 Floating Point\7f522361
24944 Node: MSP430 Directives\7f522585
24945 Node: MSP430 Opcodes\7f523376
24946 Node: MSP430 Profiling Capability\7f523771
24947 Node: NS32K-Dependent\7f526100
24948 Node: NS32K Syntax\7f526323
24949 Node: NS32K-Chars\7f526472
24950 Node: PDP-11-Dependent\7f527212
24951 Node: PDP-11-Options\7f527601
24952 Node: PDP-11-Pseudos\7f532672
24953 Node: PDP-11-Syntax\7f533017
24954 Node: PDP-11-Mnemonics\7f533849
24955 Node: PDP-11-Synthetic\7f534151
24956 Node: PJ-Dependent\7f534369
24957 Node: PJ Options\7f534632
24958 Node: PJ Syntax\7f534927
24959 Node: PJ-Chars\7f535092
24960 Node: PPC-Dependent\7f535641
24961 Node: PowerPC-Opts\7f535974
24962 Node: PowerPC-Pseudo\7f539231
24963 Node: PowerPC-Syntax\7f539853
24964 Node: PowerPC-Chars\7f540043
24965 Node: RL78-Dependent\7f540794
24966 Node: RL78-Opts\7f541192
24967 Node: RL78-Modifiers\7f541375
24968 Node: RL78-Directives\7f542151
24969 Node: RL78-Syntax\7f542649
24970 Node: RL78-Chars\7f542845
24971 Node: RX-Dependent\7f543401
24972 Node: RX-Opts\7f543832
24973 Node: RX-Modifiers\7f546437
24974 Node: RX-Directives\7f547541
24975 Node: RX-Float\7f548281
24976 Node: RX-Syntax\7f548922
24977 Node: RX-Chars\7f549101
24978 Node: S/390-Dependent\7f549653
24979 Node: s390 Options\7f550361
24980 Node: s390 Characters\7f551907
24981 Node: s390 Syntax\7f552428
24982 Node: s390 Register\7f553329
24983 Node: s390 Mnemonics\7f554142
24984 Node: s390 Operands\7f557162
24985 Node: s390 Formats\7f559781
24986 Node: s390 Aliases\7f567652
24987 Node: s390 Operand Modifier\7f571549
24988 Node: s390 Instruction Marker\7f575350
24989 Node: s390 Literal Pool Entries\7f576366
24990 Node: s390 Directives\7f578289
24991 Node: s390 Floating Point\7f582717
24992 Node: SCORE-Dependent\7f583163
24993 Node: SCORE-Opts\7f583468
24994 Node: SCORE-Pseudo\7f584756
24995 Node: SCORE-Syntax\7f586833
24996 Node: SCORE-Chars\7f587015
24997 Node: SH-Dependent\7f587573
24998 Node: SH Options\7f587984
24999 Node: SH Syntax\7f589039
25000 Node: SH-Chars\7f589312
25001 Node: SH-Regs\7f589855
25002 Node: SH-Addressing\7f590469
25003 Node: SH Floating Point\7f591378
25004 Node: SH Directives\7f592472
25005 Node: SH Opcodes\7f592873
25006 Node: SH64-Dependent\7f597195
25007 Node: SH64 Options\7f597558
25008 Node: SH64 Syntax\7f599355
25009 Node: SH64-Chars\7f599638
25010 Node: SH64-Regs\7f600187
25011 Node: SH64-Addressing\7f601283
25012 Node: SH64 Directives\7f602466
25013 Node: SH64 Opcodes\7f603451
25014 Node: Sparc-Dependent\7f604167
25015 Node: Sparc-Opts\7f604579
25016 Node: Sparc-Aligned-Data\7f609237
25017 Node: Sparc-Syntax\7f610069
25018 Node: Sparc-Chars\7f610643
25019 Node: Sparc-Regs\7f611206
25020 Node: Sparc-Constants\7f616317
25021 Node: Sparc-Relocs\7f621077
25022 Node: Sparc-Size-Translations\7f626213
25023 Node: Sparc-Float\7f627862
25024 Node: Sparc-Directives\7f628057
25025 Node: TIC54X-Dependent\7f630017
25026 Node: TIC54X-Opts\7f630780
25027 Node: TIC54X-Block\7f631823
25028 Node: TIC54X-Env\7f632183
25029 Node: TIC54X-Constants\7f632531
25030 Node: TIC54X-Subsyms\7f632933
25031 Node: TIC54X-Locals\7f634842
25032 Node: TIC54X-Builtins\7f635586
25033 Node: TIC54X-Ext\7f638057
25034 Node: TIC54X-Directives\7f638628
25035 Node: TIC54X-Macros\7f649529
25036 Node: TIC54X-MMRegs\7f651640
25037 Node: TIC54X-Syntax\7f651878
25038 Node: TIC54X-Chars\7f652068
25039 Node: TIC6X-Dependent\7f652759
25040 Node: TIC6X Options\7f653062
25041 Node: TIC6X Syntax\7f655063
25042 Node: TIC6X Directives\7f656165
25043 Node: TILE-Gx-Dependent\7f658450
25044 Node: TILE-Gx Options\7f658760
25045 Node: TILE-Gx Syntax\7f659110
25046 Node: TILE-Gx Opcodes\7f661344
25047 Node: TILE-Gx Registers\7f661632
25048 Node: TILE-Gx Modifiers\7f662404
25049 Node: TILE-Gx Directives\7f666870
25050 Node: TILEPro-Dependent\7f667774
25051 Node: TILEPro Options\7f668083
25052 Node: TILEPro Syntax\7f668267
25053 Node: TILEPro Opcodes\7f670501
25054 Node: TILEPro Registers\7f670792
25055 Node: TILEPro Modifiers\7f671562
25056 Node: TILEPro Directives\7f676327
25057 Node: Z80-Dependent\7f677231
25058 Node: Z80 Options\7f677619
25059 Node: Z80 Syntax\7f679042
25060 Node: Z80-Chars\7f679714
25061 Node: Z80-Regs\7f680564
25062 Node: Z80-Case\7f680916
25063 Node: Z80 Floating Point\7f681361
25064 Node: Z80 Directives\7f681555
25065 Node: Z80 Opcodes\7f683180
25066 Node: Z8000-Dependent\7f684524
25067 Node: Z8000 Options\7f685485
25068 Node: Z8000 Syntax\7f685702
25069 Node: Z8000-Chars\7f685992
25070 Node: Z8000-Regs\7f686474
25071 Node: Z8000-Addressing\7f687264
25072 Node: Z8000 Directives\7f688381
25073 Node: Z8000 Opcodes\7f689990
25074 Node: Vax-Dependent\7f699932
25075 Node: VAX-Opts\7f700492
25076 Node: VAX-float\7f704227
25077 Node: VAX-directives\7f704859
25078 Node: VAX-opcodes\7f705720
25079 Node: VAX-branch\7f706109
25080 Node: VAX-operands\7f708616
25081 Node: VAX-no\7f709379
25082 Node: VAX-Syntax\7f709635
25083 Node: VAX-Chars\7f709801
25084 Node: V850-Dependent\7f710355
25085 Node: V850 Options\7f710753
25086 Node: V850 Syntax\7f713604
25087 Node: V850-Chars\7f713844
25088 Node: V850-Regs\7f714388
25089 Node: V850 Floating Point\7f715956
25090 Node: V850 Directives\7f716162
25091 Node: V850 Opcodes\7f717765
25092 Node: XGATE-Dependent\7f723657
25093 Node: XGATE-Opts\7f724077
25094 Node: XGATE-Syntax\7f725068
25095 Node: XGATE-Directives\7f727147
25096 Node: XGATE-Float\7f727386
25097 Node: XGATE-opcodes\7f727883
25098 Node: XSTORMY16-Dependent\7f727995
25099 Node: XStormy16 Syntax\7f728341
25100 Node: XStormy16-Chars\7f728531
25101 Node: XStormy16 Directives\7f729144
25102 Node: XStormy16 Opcodes\7f729799
25103 Node: Xtensa-Dependent\7f730855
25104 Node: Xtensa Options\7f731589
25105 Node: Xtensa Syntax\7f734326
25106 Node: Xtensa Opcodes\7f736470
25107 Node: Xtensa Registers\7f738264
25108 Node: Xtensa Optimizations\7f738897
25109 Node: Density Instructions\7f739349
25110 Node: Xtensa Automatic Alignment\7f740451
25111 Node: Xtensa Relaxation\7f742898
25112 Node: Xtensa Branch Relaxation\7f743806
25113 Node: Xtensa Call Relaxation\7f745178
25114 Node: Xtensa Immediate Relaxation\7f746964
25115 Node: Xtensa Directives\7f749538
25116 Node: Schedule Directive\7f751247
25117 Node: Longcalls Directive\7f751587
25118 Node: Transform Directive\7f752131
25119 Node: Literal Directive\7f752873
25120 Ref: Literal Directive-Footnote-1\7f756412
25121 Node: Literal Position Directive\7f756554
25122 Node: Literal Prefix Directive\7f758253
25123 Node: Absolute Literals Directive\7f759151
25124 Node: Reporting Bugs\7f760458
25125 Node: Bug Criteria\7f761184
25126 Node: Bug Reporting\7f761951
25127 Node: Acknowledgements\7f768600
25128 Ref: Acknowledgements-Footnote-1\7f773566
25129 Node: GNU Free Documentation License\7f773592
25130 Node: AS Index\7f798761
25131 \1f
25132 End Tag Table