xref: /netbsd-src/external/gpl3/binutils.old/dist/gas/doc/as.info (revision e992f068c547fd6e84b3f104dc2340adcc955732)
1This is
2/usr/src/tools/binutils/../../external/gpl3/binutils/dist/gas/doc/as.info,
3produced by makeinfo version 4.8 from
4/usr/src/tools/binutils/../../external/gpl3/binutils/dist/gas/doc/as.texi.
5
6INFO-DIR-SECTION Software development
7START-INFO-DIR-ENTRY
8* As: (as).                     The GNU assembler.
9* Gas: (as).                    The GNU assembler.
10END-INFO-DIR-ENTRY
11
12   This file documents the GNU Assembler "as".
13
14   Copyright (C) 1991-2022 Free Software Foundation, Inc.
15
16   Permission is granted to copy, distribute and/or modify this document
17under the terms of the GNU Free Documentation License, Version 1.3 or
18any later version published by the Free Software Foundation; with no
19Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
20Texts.  A copy of the license is included in the section entitled "GNU
21Free Documentation License".
22
23
24File: as.info,  Node: Top,  Next: Overview,  Up: (dir)
25
26Using as
27********
28
29This file is a user guide to the GNU assembler `as' (NetBSD Binutils
30nb1) version 2.39.
31
32   This document is distributed under the terms of the GNU Free
33Documentation License.  A copy of the license is included in the
34section entitled "GNU Free Documentation License".
35
36* Menu:
37
38* Overview::                    Overview
39* Invoking::                    Command-Line Options
40* Syntax::                      Syntax
41* Sections::                    Sections and Relocation
42* Symbols::                     Symbols
43* Expressions::                 Expressions
44* Pseudo Ops::                  Assembler Directives
45
46* Object Attributes::           Object Attributes
47* Machine Dependencies::        Machine Dependent Features
48* Reporting Bugs::              Reporting Bugs
49* Acknowledgements::            Who Did What
50* GNU Free Documentation License::  GNU Free Documentation License
51* AS Index::                    AS Index
52
53
54File: as.info,  Node: Overview,  Next: Invoking,  Prev: Top,  Up: Top
55
561 Overview
57**********
58
59Here is a brief summary of how to invoke `as'.  For details, see *Note
60Command-Line Options: Invoking.
61
62     as [-a[cdghlns][=FILE]] [-alternate] [-D]
63      [-compress-debug-sections]  [-nocompress-debug-sections]
64      [-debug-prefix-map OLD=NEW]
65      [-defsym SYM=VAL] [-f] [-g] [-gstabs]
66      [-gstabs+] [-gdwarf-<N>] [-gdwarf-sections]
67      [-gdwarf-cie-version=VERSION]
68      [-help] [-I DIR] [-J]
69      [-K] [-L] [-listing-lhs-width=NUM]
70      [-listing-lhs-width2=NUM] [-listing-rhs-width=NUM]
71      [-listing-cont-lines=NUM] [-keep-locals]
72      [-no-pad-sections]
73      [-o OBJFILE] [-R]
74      [-statistics]
75      [-v] [-version] [-version]
76      [-W] [-warn] [-fatal-warnings] [-w] [-x]
77      [-Z] [@FILE]
78      [-sectname-subst] [-size-check=[error|warning]]
79      [-elf-stt-common=[no|yes]]
80      [-generate-missing-build-notes=[no|yes]]
81      [-multibyte-handling=[allow|warn|warn-sym-only]]
82      [-target-help] [TARGET-OPTIONS]
83      [-|FILES ...]
84
85     _Target AArch64 options:_
86        [-EB|-EL]
87        [-mabi=ABI]
88
89     _Target Alpha options:_
90        [-mCPU]
91        [-mdebug | -no-mdebug]
92        [-replace | -noreplace]
93        [-relax] [-g] [-GSIZE]
94        [-F] [-32addr]
95
96     _Target ARC options:_
97        [-mcpu=CPU]
98        [-mA6|-mARC600|-mARC601|-mA7|-mARC700|-mEM|-mHS]
99        [-mcode-density]
100        [-mrelax]
101        [-EB|-EL]
102
103     _Target ARM options:_
104        [-mcpu=PROCESSOR[+EXTENSION...]]
105        [-march=ARCHITECTURE[+EXTENSION...]]
106        [-mfpu=FLOATING-POINT-FORMAT]
107        [-mfloat-abi=ABI]
108        [-meabi=VER]
109        [-mthumb]
110        [-EB|-EL]
111        [-mapcs-32|-mapcs-26|-mapcs-float|
112         -mapcs-reentrant]
113        [-mthumb-interwork] [-k]
114
115     _Target Blackfin options:_
116        [-mcpu=PROCESSOR[-SIREVISION]]
117        [-mfdpic]
118        [-mno-fdpic]
119        [-mnopic]
120
121     _Target BPF options:_
122        [-EL] [-EB]
123
124     _Target CRIS options:_
125        [-underscore | -no-underscore]
126        [-pic] [-N]
127        [-emulation=criself | -emulation=crisaout]
128        [-march=v0_v10 | -march=v10 | -march=v32 | -march=common_v10_v32]
129
130     _Target C-SKY options:_
131        [-march=ARCH] [-mcpu=CPU]
132        [-EL] [-mlittle-endian] [-EB] [-mbig-endian]
133        [-fpic] [-pic]
134        [-mljump] [-mno-ljump]
135        [-force2bsr] [-mforce2bsr] [-no-force2bsr] [-mno-force2bsr]
136        [-jsri2bsr] [-mjsri2bsr] [-no-jsri2bsr ] [-mno-jsri2bsr]
137        [-mnolrw ] [-mno-lrw]
138        [-melrw] [-mno-elrw]
139        [-mlaf ] [-mliterals-after-func]
140        [-mno-laf] [-mno-literals-after-func]
141        [-mlabr] [-mliterals-after-br]
142        [-mno-labr] [-mnoliterals-after-br]
143        [-mistack] [-mno-istack]
144        [-mhard-float] [-mmp] [-mcp] [-mcache]
145        [-msecurity] [-mtrust]
146        [-mdsp] [-medsp] [-mvdsp]
147
148     _Target D10V options:_
149        [-O]
150
151     _Target D30V options:_
152        [-O|-n|-N]
153
154     _Target EPIPHANY options:_
155        [-mepiphany|-mepiphany16]
156
157     _Target H8/300 options:_
158        [-h-tick-hex]
159
160     _Target i386 options:_
161        [-32|-x32|-64] [-n]
162        [-march=CPU[+EXTENSION...]] [-mtune=CPU]
163
164     _Target IA-64 options:_
165        [-mconstant-gp|-mauto-pic]
166        [-milp32|-milp64|-mlp64|-mp64]
167        [-mle|mbe]
168        [-mtune=itanium1|-mtune=itanium2]
169        [-munwind-check=warning|-munwind-check=error]
170        [-mhint.b=ok|-mhint.b=warning|-mhint.b=error]
171        [-x|-xexplicit] [-xauto] [-xdebug]
172
173     _Target IP2K options:_
174        [-mip2022|-mip2022ext]
175
176     _Target M32C options:_
177        [-m32c|-m16c] [-relax] [-h-tick-hex]
178
179     _Target M32R options:_
180        [-m32rx|-[no-]warn-explicit-parallel-conflicts|
181        -W[n]p]
182
183     _Target M680X0 options:_
184        [-l] [-m68000|-m68010|-m68020|...]
185
186     _Target M68HC11 options:_
187        [-m68hc11|-m68hc12|-m68hcs12|-mm9s12x|-mm9s12xg]
188        [-mshort|-mlong]
189        [-mshort-double|-mlong-double]
190        [-force-long-branches] [-short-branches]
191        [-strict-direct-mode] [-print-insn-syntax]
192        [-print-opcodes] [-generate-example]
193
194     _Target MCORE options:_
195        [-jsri2bsr] [-sifilter] [-relax]
196        [-mcpu=[210|340]]
197
198     _Target Meta options:_
199        [-mcpu=CPU] [-mfpu=CPU] [-mdsp=CPU]
200     _Target MICROBLAZE options:_
201
202     _Target MIPS options:_
203        [-nocpp] [-EL] [-EB] [-O[OPTIMIZATION LEVEL]]
204        [-g[DEBUG LEVEL]] [-G NUM] [-KPIC] [-call_shared]
205        [-non_shared] [-xgot [-mvxworks-pic]
206        [-mabi=ABI] [-32] [-n32] [-64] [-mfp32] [-mgp32]
207        [-mfp64] [-mgp64] [-mfpxx]
208        [-modd-spreg] [-mno-odd-spreg]
209        [-march=CPU] [-mtune=CPU] [-mips1] [-mips2]
210        [-mips3] [-mips4] [-mips5] [-mips32] [-mips32r2]
211        [-mips32r3] [-mips32r5] [-mips32r6] [-mips64] [-mips64r2]
212        [-mips64r3] [-mips64r5] [-mips64r6]
213        [-construct-floats] [-no-construct-floats]
214        [-mignore-branch-isa] [-mno-ignore-branch-isa]
215        [-mnan=ENCODING]
216        [-trap] [-no-break] [-break] [-no-trap]
217        [-mips16] [-no-mips16]
218        [-mmips16e2] [-mno-mips16e2]
219        [-mmicromips] [-mno-micromips]
220        [-msmartmips] [-mno-smartmips]
221        [-mips3d] [-no-mips3d]
222        [-mdmx] [-no-mdmx]
223        [-mdsp] [-mno-dsp]
224        [-mdspr2] [-mno-dspr2]
225        [-mdspr3] [-mno-dspr3]
226        [-mmsa] [-mno-msa]
227        [-mxpa] [-mno-xpa]
228        [-mmt] [-mno-mt]
229        [-mmcu] [-mno-mcu]
230        [-mcrc] [-mno-crc]
231        [-mginv] [-mno-ginv]
232        [-mloongson-mmi] [-mno-loongson-mmi]
233        [-mloongson-cam] [-mno-loongson-cam]
234        [-mloongson-ext] [-mno-loongson-ext]
235        [-mloongson-ext2] [-mno-loongson-ext2]
236        [-minsn32] [-mno-insn32]
237        [-mfix7000] [-mno-fix7000]
238        [-mfix-rm7000] [-mno-fix-rm7000]
239        [-mfix-vr4120] [-mno-fix-vr4120]
240        [-mfix-vr4130] [-mno-fix-vr4130]
241        [-mfix-r5900] [-mno-fix-r5900]
242        [-mdebug] [-no-mdebug]
243        [-mpdr] [-mno-pdr]
244
245     _Target MMIX options:_
246        [-fixed-special-register-names] [-globalize-symbols]
247        [-gnu-syntax] [-relax] [-no-predefined-symbols]
248        [-no-expand] [-no-merge-gregs] [-x]
249        [-linker-allocated-gregs]
250
251     _Target Nios II options:_
252        [-relax-all] [-relax-section] [-no-relax]
253        [-EB] [-EL]
254
255     _Target NDS32 options:_
256         [-EL] [-EB] [-O] [-Os] [-mcpu=CPU]
257         [-misa=ISA] [-mabi=ABI] [-mall-ext]
258         [-m[no-]16-bit]  [-m[no-]perf-ext] [-m[no-]perf2-ext]
259         [-m[no-]string-ext] [-m[no-]dsp-ext] [-m[no-]mac] [-m[no-]div]
260         [-m[no-]audio-isa-ext] [-m[no-]fpu-sp-ext] [-m[no-]fpu-dp-ext]
261         [-m[no-]fpu-fma] [-mfpu-freg=FREG] [-mreduced-regs]
262         [-mfull-regs] [-m[no-]dx-regs] [-mpic] [-mno-relax]
263         [-mb2bb]
264
265     _Target PDP11 options:_
266        [-mpic|-mno-pic] [-mall] [-mno-extensions]
267        [-mEXTENSION|-mno-EXTENSION]
268        [-mCPU] [-mMACHINE]
269
270     _Target picoJava options:_
271        [-mb|-me]
272
273     _Target PowerPC options:_
274        [-a32|-a64]
275        [-mpwrx|-mpwr2|-mpwr|-m601|-mppc|-mppc32|-m603|-m604|-m403|-m405|
276         -m440|-m464|-m476|-m7400|-m7410|-m7450|-m7455|-m750cl|-mgekko|
277         -mbroadway|-mppc64|-m620|-me500|-e500x2|-me500mc|-me500mc64|-me5500|
278         -me6500|-mppc64bridge|-mbooke|-mpower4|-mpwr4|-mpower5|-mpwr5|-mpwr5x|
279         -mpower6|-mpwr6|-mpower7|-mpwr7|-mpower8|-mpwr8|-mpower9|-mpwr9-ma2|
280         -mcell|-mspe|-mspe2|-mtitan|-me300|-mcom]
281        [-many] [-maltivec|-mvsx|-mhtm|-mvle]
282        [-mregnames|-mno-regnames]
283        [-mrelocatable|-mrelocatable-lib|-K PIC] [-memb]
284        [-mlittle|-mlittle-endian|-le|-mbig|-mbig-endian|-be]
285        [-msolaris|-mno-solaris]
286        [-nops=COUNT]
287
288     _Target PRU options:_
289        [-link-relax]
290        [-mnolink-relax]
291        [-mno-warn-regname-label]
292
293     _Target RISC-V options:_
294        [-fpic|-fPIC|-fno-pic]
295        [-march=ISA]
296        [-mabi=ABI]
297        [-mlittle-endian|-mbig-endian]
298
299     _Target RL78 options:_
300        [-mg10]
301        [-m32bit-doubles|-m64bit-doubles]
302
303     _Target RX options:_
304        [-mlittle-endian|-mbig-endian]
305        [-m32bit-doubles|-m64bit-doubles]
306        [-muse-conventional-section-names]
307        [-msmall-data-limit]
308        [-mpid]
309        [-mrelax]
310        [-mint-register=NUMBER]
311        [-mgcc-abi|-mrx-abi]
312
313     _Target s390 options:_
314        [-m31|-m64] [-mesa|-mzarch] [-march=CPU]
315        [-mregnames|-mno-regnames]
316        [-mwarn-areg-zero]
317
318     _Target SCORE options:_
319        [-EB][-EL][-FIXDD][-NWARN]
320        [-SCORE5][-SCORE5U][-SCORE7][-SCORE3]
321        [-march=score7][-march=score3]
322        [-USE_R1][-KPIC][-O0][-G NUM][-V]
323
324     _Target SPARC options:_
325        [-Av6|-Av7|-Av8|-Aleon|-Asparclet|-Asparclite
326         -Av8plus|-Av8plusa|-Av8plusb|-Av8plusc|-Av8plusd
327         -Av8plusv|-Av8plusm|-Av9|-Av9a|-Av9b|-Av9c
328         -Av9d|-Av9e|-Av9v|-Av9m|-Asparc|-Asparcvis
329         -Asparcvis2|-Asparcfmaf|-Asparcima|-Asparcvis3
330         -Asparcvisr|-Asparc5]
331        [-xarch=v8plus|-xarch=v8plusa]|-xarch=v8plusb|-xarch=v8plusc
332         -xarch=v8plusd|-xarch=v8plusv|-xarch=v8plusm|-xarch=v9
333         -xarch=v9a|-xarch=v9b|-xarch=v9c|-xarch=v9d|-xarch=v9e
334         -xarch=v9v|-xarch=v9m|-xarch=sparc|-xarch=sparcvis
335         -xarch=sparcvis2|-xarch=sparcfmaf|-xarch=sparcima
336         -xarch=sparcvis3|-xarch=sparcvisr|-xarch=sparc5
337         -bump]
338        [-32|-64]
339        [-enforce-aligned-data][-dcti-couples-detect]
340
341     _Target TIC54X options:_
342      [-mcpu=54[123589]|-mcpu=54[56]lp] [-mfar-mode|-mf]
343      [-merrors-to-file <FILENAME>|-me <FILENAME>]
344
345     _Target TIC6X options:_
346        [-march=ARCH] [-mbig-endian|-mlittle-endian]
347        [-mdsbt|-mno-dsbt] [-mpid=no|-mpid=near|-mpid=far]
348        [-mpic|-mno-pic]
349
350     _Target TILE-Gx options:_
351        [-m32|-m64][-EB][-EL]
352
353     _Target Visium options:_
354        [-mtune=ARCH]
355
356     _Target Xtensa options:_
357      [-[no-]text-section-literals] [-[no-]auto-litpools]
358      [-[no-]absolute-literals]
359      [-[no-]target-align] [-[no-]longcalls]
360      [-[no-]transform]
361      [-rename-section OLDNAME=NEWNAME]
362      [-[no-]trampolines]
363      [-abi-windowed|-abi-call0]
364
365     _Target Z80 options:_
366       [-march=CPU[-EXT][+EXT]]
367       [-local-prefix=PREFIX]
368       [-colonless]
369       [-sdcc]
370       [-fp-s=FORMAT]
371       [-fp-d=FORMAT]
372
373`@FILE'
374     Read command-line options from FILE.  The options read are
375     inserted in place of the original @FILE option.  If FILE does not
376     exist, or cannot be read, then the option will be treated
377     literally, and not removed.
378
379     Options in FILE are separated by whitespace.  A whitespace
380     character may be included in an option by surrounding the entire
381     option in either single or double quotes.  Any character
382     (including a backslash) may be included by prefixing the character
383     to be included with a backslash.  The FILE may itself contain
384     additional @FILE options; any such options will be processed
385     recursively.
386
387`-a[cdghlmns]'
388     Turn on listings, in any of a variety of ways:
389
390    `-ac'
391          omit false conditionals
392
393    `-ad'
394          omit debugging directives
395
396    `-ag'
397          include general information, like as version and options
398          passed
399
400    `-ah'
401          include high-level source
402
403    `-al'
404          include assembly
405
406    `-am'
407          include macro expansions
408
409    `-an'
410          omit forms processing
411
412    `-as'
413          include symbols
414
415    `=file'
416          set the name of the listing file
417
418     You may combine these options; for example, use `-aln' for assembly
419     listing without forms processing.  The `=file' option, if used,
420     must be the last one.  By itself, `-a' defaults to `-ahls'.
421
422`--alternate'
423     Begin in alternate macro mode.  *Note `.altmacro': Altmacro.
424
425`--compress-debug-sections'
426     Compress DWARF debug sections using zlib with SHF_COMPRESSED from
427     the ELF ABI.  The resulting object file may not be compatible with
428     older linkers and object file utilities.  Note if compression
429     would make a given section _larger_ then it is not compressed.
430
431`--compress-debug-sections=none'
432`--compress-debug-sections=zlib'
433`--compress-debug-sections=zlib-gnu'
434`--compress-debug-sections=zlib-gabi'
435     These options control how DWARF debug sections are compressed.
436     `--compress-debug-sections=none' is equivalent to
437     `--nocompress-debug-sections'.  `--compress-debug-sections=zlib'
438     and `--compress-debug-sections=zlib-gabi' are equivalent to
439     `--compress-debug-sections'.  `--compress-debug-sections=zlib-gnu'
440     compresses DWARF debug sections using zlib.  The debug sections
441     are renamed to begin with `.zdebug'.  Note if compression would
442     make a given section _larger_ then it is not compressed nor
443     renamed.
444
445`--nocompress-debug-sections'
446     Do not compress DWARF debug sections.  This is usually the default
447     for all targets except the x86/x86_64, but a configure time option
448     can be used to override this.
449
450`-D'
451     Ignored.  This option is accepted for script compatibility with
452     calls to other assemblers.
453
454`--debug-prefix-map OLD=NEW'
455     When assembling files in directory `OLD', record debugging
456     information describing them as in `NEW' instead.
457
458`--defsym SYM=VALUE'
459     Define the symbol SYM to be VALUE before assembling the input file.
460     VALUE must be an integer constant.  As in C, a leading `0x'
461     indicates a hexadecimal value, and a leading `0' indicates an octal
462     value.  The value of the symbol can be overridden inside a source
463     file via the use of a `.set' pseudo-op.
464
465`-f'
466     "fast"--skip whitespace and comment preprocessing (assume source is
467     compiler output).
468
469`-g'
470`--gen-debug'
471     Generate debugging information for each assembler source line
472     using whichever debug format is preferred by the target.  This
473     currently means either STABS, ECOFF or DWARF2.  When the debug
474     format is DWARF then a `.debug_info' and `.debug_line' section is
475     only emitted when the assembly file doesn't generate one itself.
476
477`--gstabs'
478     Generate stabs debugging information for each assembler line.  This
479     may help debugging assembler code, if the debugger can handle it.
480
481`--gstabs+'
482     Generate stabs debugging information for each assembler line, with
483     GNU extensions that probably only gdb can handle, and that could
484     make other debuggers crash or refuse to read your program.  This
485     may help debugging assembler code.  Currently the only GNU
486     extension is the location of the current working directory at
487     assembling time.
488
489`--gdwarf-2'
490     Generate DWARF2 debugging information for each assembler line.
491     This may help debugging assembler code, if the debugger can handle
492     it.  Note--this option is only supported by some targets, not all
493     of them.
494
495`--gdwarf-3'
496     This option is the same as the `--gdwarf-2' option, except that it
497     allows for the possibility of the generation of extra debug
498     information as per version 3 of the DWARF specification.  Note -
499     enabling this option does not guarantee the generation of any
500     extra information, the choice to do so is on a per target basis.
501
502`--gdwarf-4'
503     This option is the same as the `--gdwarf-2' option, except that it
504     allows for the possibility of the generation of extra debug
505     information as per version 4 of the DWARF specification.  Note -
506     enabling this option does not guarantee the generation of any
507     extra information, the choice to do so is on a per target basis.
508
509`--gdwarf-5'
510     This option is the same as the `--gdwarf-2' option, except that it
511     allows for the possibility of the generation of extra debug
512     information as per version 5 of the DWARF specification.  Note -
513     enabling this option does not guarantee the generation of any
514     extra information, the choice to do so is on a per target basis.
515
516`--gdwarf-sections'
517     Instead of creating a .debug_line section, create a series of
518     .debug_line.FOO sections where FOO is the name of the
519     corresponding code section.  For example a code section called
520     .TEXT.FUNC will have its dwarf line number information placed into
521     a section called .DEBUG_LINE.TEXT.FUNC.  If the code section is
522     just called .TEXT then debug line section will still be called
523     just .DEBUG_LINE without any suffix.
524
525`--gdwarf-cie-version=VERSION'
526     Control which version of DWARF Common Information Entries (CIEs)
527     are produced.  When this flag is not specificed the default is
528     version 1, though some targets can modify this default.  Other
529     possible values for VERSION are 3 or 4.
530
531`--size-check=error'
532`--size-check=warning'
533     Issue an error or warning for invalid ELF .size directive.
534
535`--elf-stt-common=no'
536`--elf-stt-common=yes'
537     These options control whether the ELF assembler should generate
538     common symbols with the `STT_COMMON' type.  The default can be
539     controlled by a configure option `--enable-elf-stt-common'.
540
541`--generate-missing-build-notes=yes'
542`--generate-missing-build-notes=no'
543     These options control whether the ELF assembler should generate
544     GNU Build attribute notes if none are present in the input sources.
545     The default can be controlled by the
546     `--enable-generate-build-notes' configure option.
547
548`--help'
549     Print a summary of the command-line options and exit.
550
551`--target-help'
552     Print a summary of all target specific options and exit.
553
554`-I DIR'
555     Add directory DIR to the search list for `.include' directives.
556
557`-J'
558     Don't warn about signed overflow.
559
560`-K'
561     Issue warnings when difference tables altered for long
562     displacements.
563
564`-L'
565`--keep-locals'
566     Keep (in the symbol table) local symbols.  These symbols start with
567     system-specific local label prefixes, typically `.L' for ELF
568     systems or `L' for traditional a.out systems.  *Note Symbol
569     Names::.
570
571`--listing-lhs-width=NUMBER'
572     Set the maximum width, in words, of the output data column for an
573     assembler listing to NUMBER.
574
575`--listing-lhs-width2=NUMBER'
576     Set the maximum width, in words, of the output data column for
577     continuation lines in an assembler listing to NUMBER.
578
579`--listing-rhs-width=NUMBER'
580     Set the maximum width of an input source line, as displayed in a
581     listing, to NUMBER bytes.
582
583`--listing-cont-lines=NUMBER'
584     Set the maximum number of lines printed in a listing for a single
585     line of input to NUMBER + 1.
586
587`--multibyte-handling=allow'
588`--multibyte-handling=warn'
589`--multibyte-handling=warn-sym-only'
590     Controls how the assembler handles multibyte characters in the
591     input.  The default (which can be restored by using the `allow'
592     argument) is to allow such characters without complaint.  Using
593     the `warn' argument will make the assembler generate a warning
594     message whenever any multibyte character is encountered.  Using
595     the `warn-sym-only' argument will only cause a warning to be
596     generated when a symbol is defined with a name that contains
597     multibyte characters.  (References to undefined symbols will not
598     generate a warning).
599
600`--no-pad-sections'
601     Stop the assembler for padding the ends of output sections to the
602     alignment of that section.  The default is to pad the sections,
603     but this can waste space which might be needed on targets which
604     have tight memory constraints.
605
606`-o OBJFILE'
607     Name the object-file output from `as' OBJFILE.
608
609`-R'
610     Fold the data section into the text section.
611
612`--sectname-subst'
613     Honor substitution sequences in section names.  *Note `.section
614     NAME': Section Name Substitutions.
615
616`--statistics'
617     Print the maximum space (in bytes) and total time (in seconds)
618     used by assembly.
619
620`--strip-local-absolute'
621     Remove local absolute symbols from the outgoing symbol table.
622
623`-v'
624`-version'
625     Print the `as' version.
626
627`--version'
628     Print the `as' version and exit.
629
630`-W'
631`--no-warn'
632     Suppress warning messages.
633
634`--fatal-warnings'
635     Treat warnings as errors.
636
637`--warn'
638     Don't suppress warning messages or treat them as errors.
639
640`-w'
641     Ignored.
642
643`-x'
644     Ignored.
645
646`-Z'
647     Generate an object file even after errors.
648
649`-- | FILES ...'
650     Standard input, or source files to assemble.
651
652
653   *Note AArch64 Options::, for the options available when as is
654configured for the 64-bit mode of the ARM Architecture (AArch64).
655
656   *Note Alpha Options::, for the options available when as is
657configured for an Alpha processor.
658
659   The following options are available when as is configured for an ARC
660processor.
661
662`-mcpu=CPU'
663     This option selects the core processor variant.
664
665`-EB | -EL'
666     Select either big-endian (-EB) or little-endian (-EL) output.
667
668`-mcode-density'
669     Enable Code Density extension instructions.
670
671   The following options are available when as is configured for the ARM
672processor family.
673
674`-mcpu=PROCESSOR[+EXTENSION...]'
675     Specify which ARM processor variant is the target.
676
677`-march=ARCHITECTURE[+EXTENSION...]'
678     Specify which ARM architecture variant is used by the target.
679
680`-mfpu=FLOATING-POINT-FORMAT'
681     Select which Floating Point architecture is the target.
682
683`-mfloat-abi=ABI'
684     Select which floating point ABI is in use.
685
686`-mthumb'
687     Enable Thumb only instruction decoding.
688
689`-mapcs-32 | -mapcs-26 | -mapcs-float | -mapcs-reentrant'
690     Select which procedure calling convention is in use.
691
692`-EB | -EL'
693     Select either big-endian (-EB) or little-endian (-EL) output.
694
695`-mthumb-interwork'
696     Specify that the code has been generated with interworking between
697     Thumb and ARM code in mind.
698
699`-mccs'
700     Turns on CodeComposer Studio assembly syntax compatibility mode.
701
702`-k'
703     Specify that PIC code has been generated.
704
705   *Note Blackfin Options::, for the options available when as is
706configured for the Blackfin processor family.
707
708   *Note BPF Options::, for the options available when as is configured
709for the Linux kernel BPF processor family.
710
711   See the info pages for documentation of the CRIS-specific options.
712
713   *Note C-SKY Options::, for the options available when as is
714configured for the C-SKY processor family.
715
716   The following options are available when as is configured for a D10V
717processor.
718`-O'
719     Optimize output by parallelizing instructions.
720
721   The following options are available when as is configured for a D30V
722processor.
723`-O'
724     Optimize output by parallelizing instructions.
725
726`-n'
727     Warn when nops are generated.
728
729`-N'
730     Warn when a nop after a 32-bit multiply instruction is generated.
731
732   The following options are available when as is configured for the
733Adapteva EPIPHANY series.
734
735   *Note Epiphany Options::, for the options available when as is
736configured for an Epiphany processor.
737
738   *Note i386-Options::, for the options available when as is
739configured for an i386 processor.
740
741   The following options are available when as is configured for the
742Ubicom IP2K series.
743
744`-mip2022ext'
745     Specifies that the extended IP2022 instructions are allowed.
746
747`-mip2022'
748     Restores the default behaviour, which restricts the permitted
749     instructions to just the basic IP2022 ones.
750
751
752   The following options are available when as is configured for the
753Renesas M32C and M16C processors.
754
755`-m32c'
756     Assemble M32C instructions.
757
758`-m16c'
759     Assemble M16C instructions (the default).
760
761`-relax'
762     Enable support for link-time relaxations.
763
764`-h-tick-hex'
765     Support H'00 style hex constants in addition to 0x00 style.
766
767
768   The following options are available when as is configured for the
769Renesas M32R (formerly Mitsubishi M32R) series.
770
771`--m32rx'
772     Specify which processor in the M32R family is the target.  The
773     default is normally the M32R, but this option changes it to the
774     M32RX.
775
776`--warn-explicit-parallel-conflicts or --Wp'
777     Produce warning messages when questionable parallel constructs are
778     encountered.
779
780`--no-warn-explicit-parallel-conflicts or --Wnp'
781     Do not produce warning messages when questionable parallel
782     constructs are encountered.
783
784
785   The following options are available when as is configured for the
786Motorola 68000 series.
787
788`-l'
789     Shorten references to undefined symbols, to one word instead of
790     two.
791
792`-m68000 | -m68008 | -m68010 | -m68020 | -m68030'
793`| -m68040 | -m68060 | -m68302 | -m68331 | -m68332'
794`| -m68333 | -m68340 | -mcpu32 | -m5200'
795     Specify what processor in the 68000 family is the target.  The
796     default is normally the 68020, but this can be changed at
797     configuration time.
798
799`-m68881 | -m68882 | -mno-68881 | -mno-68882'
800     The target machine does (or does not) have a floating-point
801     coprocessor.  The default is to assume a coprocessor for 68020,
802     68030, and cpu32.  Although the basic 68000 is not compatible with
803     the 68881, a combination of the two can be specified, since it's
804     possible to do emulation of the coprocessor instructions with the
805     main processor.
806
807`-m68851 | -mno-68851'
808     The target machine does (or does not) have a memory-management
809     unit coprocessor.  The default is to assume an MMU for 68020 and
810     up.
811
812
813   *Note Nios II Options::, for the options available when as is
814configured for an Altera Nios II processor.
815
816   For details about the PDP-11 machine dependent features options, see
817*Note PDP-11-Options::.
818
819`-mpic | -mno-pic'
820     Generate position-independent (or position-dependent) code.  The
821     default is `-mpic'.
822
823`-mall'
824`-mall-extensions'
825     Enable all instruction set extensions.  This is the default.
826
827`-mno-extensions'
828     Disable all instruction set extensions.
829
830`-mEXTENSION | -mno-EXTENSION'
831     Enable (or disable) a particular instruction set extension.
832
833`-mCPU'
834     Enable the instruction set extensions supported by a particular
835     CPU, and disable all other extensions.
836
837`-mMACHINE'
838     Enable the instruction set extensions supported by a particular
839     machine model, and disable all other extensions.
840
841   The following options are available when as is configured for a
842picoJava processor.
843
844`-mb'
845     Generate "big endian" format output.
846
847`-ml'
848     Generate "little endian" format output.
849
850
851   *Note PRU Options::, for the options available when as is configured
852for a PRU processor.
853
854   The following options are available when as is configured for the
855Motorola 68HC11 or 68HC12 series.
856
857`-m68hc11 | -m68hc12 | -m68hcs12 | -mm9s12x | -mm9s12xg'
858     Specify what processor is the target.  The default is defined by
859     the configuration option when building the assembler.
860
861`--xgate-ramoffset'
862     Instruct the linker to offset RAM addresses from S12X address
863     space into XGATE address space.
864
865`-mshort'
866     Specify to use the 16-bit integer ABI.
867
868`-mlong'
869     Specify to use the 32-bit integer ABI.
870
871`-mshort-double'
872     Specify to use the 32-bit double ABI.
873
874`-mlong-double'
875     Specify to use the 64-bit double ABI.
876
877`--force-long-branches'
878     Relative branches are turned into absolute ones. This concerns
879     conditional branches, unconditional branches and branches to a sub
880     routine.
881
882`-S | --short-branches'
883     Do not turn relative branches into absolute ones when the offset
884     is out of range.
885
886`--strict-direct-mode'
887     Do not turn the direct addressing mode into extended addressing
888     mode when the instruction does not support direct addressing mode.
889
890`--print-insn-syntax'
891     Print the syntax of instruction in case of error.
892
893`--print-opcodes'
894     Print the list of instructions with syntax and then exit.
895
896`--generate-example'
897     Print an example of instruction for each possible instruction and
898     then exit.  This option is only useful for testing `as'.
899
900
901   The following options are available when `as' is configured for the
902SPARC architecture:
903
904`-Av6 | -Av7 | -Av8 | -Asparclet | -Asparclite'
905`-Av8plus | -Av8plusa | -Av9 | -Av9a'
906     Explicitly select a variant of the SPARC architecture.
907
908     `-Av8plus' and `-Av8plusa' select a 32 bit environment.  `-Av9'
909     and `-Av9a' select a 64 bit environment.
910
911     `-Av8plusa' and `-Av9a' enable the SPARC V9 instruction set with
912     UltraSPARC extensions.
913
914`-xarch=v8plus | -xarch=v8plusa'
915     For compatibility with the Solaris v9 assembler.  These options are
916     equivalent to -Av8plus and -Av8plusa, respectively.
917
918`-bump'
919     Warn when the assembler switches to another architecture.
920
921   The following options are available when as is configured for the
922'c54x architecture.
923
924`-mfar-mode'
925     Enable extended addressing mode.  All addresses and relocations
926     will assume extended addressing (usually 23 bits).
927
928`-mcpu=CPU_VERSION'
929     Sets the CPU version being compiled for.
930
931`-merrors-to-file FILENAME'
932     Redirect error output to a file, for broken systems which don't
933     support such behaviour in the shell.
934
935   The following options are available when as is configured for a MIPS
936processor.
937
938`-G NUM'
939     This option sets the largest size of an object that can be
940     referenced implicitly with the `gp' register.  It is only accepted
941     for targets that use ECOFF format, such as a DECstation running
942     Ultrix.  The default value is 8.
943
944`-EB'
945     Generate "big endian" format output.
946
947`-EL'
948     Generate "little endian" format output.
949
950`-mips1'
951`-mips2'
952`-mips3'
953`-mips4'
954`-mips5'
955`-mips32'
956`-mips32r2'
957`-mips32r3'
958`-mips32r5'
959`-mips32r6'
960`-mips64'
961`-mips64r2'
962`-mips64r3'
963`-mips64r5'
964`-mips64r6'
965     Generate code for a particular MIPS Instruction Set Architecture
966     level.  `-mips1' is an alias for `-march=r3000', `-mips2' is an
967     alias for `-march=r6000', `-mips3' is an alias for `-march=r4000'
968     and `-mips4' is an alias for `-march=r8000'.  `-mips5', `-mips32',
969     `-mips32r2', `-mips32r3', `-mips32r5', `-mips32r6', `-mips64',
970     `-mips64r2', `-mips64r3', `-mips64r5', and `-mips64r6' correspond
971     to generic MIPS V, MIPS32, MIPS32 Release 2, MIPS32 Release 3,
972     MIPS32 Release 5, MIPS32 Release 6, MIPS64, MIPS64 Release 2,
973     MIPS64 Release 3, MIPS64 Release 5, and MIPS64 Release 6 ISA
974     processors, respectively.
975
976`-march=CPU'
977     Generate code for a particular MIPS CPU.
978
979`-mtune=CPU'
980     Schedule and tune for a particular MIPS CPU.
981
982`-mfix7000'
983`-mno-fix7000'
984     Cause nops to be inserted if the read of the destination register
985     of an mfhi or mflo instruction occurs in the following two
986     instructions.
987
988`-mfix-rm7000'
989`-mno-fix-rm7000'
990     Cause nops to be inserted if a dmult or dmultu instruction is
991     followed by a load instruction.
992
993`-mfix-r5900'
994`-mno-fix-r5900'
995     Do not attempt to schedule the preceding instruction into the
996     delay slot of a branch instruction placed at the end of a short
997     loop of six instructions or fewer and always schedule a `nop'
998     instruction there instead.  The short loop bug under certain
999     conditions causes loops to execute only once or twice, due to a
1000     hardware bug in the R5900 chip.
1001
1002`-mdebug'
1003`-no-mdebug'
1004     Cause stabs-style debugging output to go into an ECOFF-style
1005     .mdebug section instead of the standard ELF .stabs sections.
1006
1007`-mpdr'
1008`-mno-pdr'
1009     Control generation of `.pdr' sections.
1010
1011`-mgp32'
1012`-mfp32'
1013     The register sizes are normally inferred from the ISA and ABI, but
1014     these flags force a certain group of registers to be treated as 32
1015     bits wide at all times.  `-mgp32' controls the size of
1016     general-purpose registers and `-mfp32' controls the size of
1017     floating-point registers.
1018
1019`-mgp64'
1020`-mfp64'
1021     The register sizes are normally inferred from the ISA and ABI, but
1022     these flags force a certain group of registers to be treated as 64
1023     bits wide at all times.  `-mgp64' controls the size of
1024     general-purpose registers and `-mfp64' controls the size of
1025     floating-point registers.
1026
1027`-mfpxx'
1028     The register sizes are normally inferred from the ISA and ABI, but
1029     using this flag in combination with `-mabi=32' enables an ABI
1030     variant which will operate correctly with floating-point registers
1031     which are 32 or 64 bits wide.
1032
1033`-modd-spreg'
1034`-mno-odd-spreg'
1035     Enable use of floating-point operations on odd-numbered
1036     single-precision registers when supported by the ISA.  `-mfpxx'
1037     implies `-mno-odd-spreg', otherwise the default is `-modd-spreg'.
1038
1039`-mips16'
1040`-no-mips16'
1041     Generate code for the MIPS 16 processor.  This is equivalent to
1042     putting `.module mips16' at the start of the assembly file.
1043     `-no-mips16' turns off this option.
1044
1045`-mmips16e2'
1046`-mno-mips16e2'
1047     Enable the use of MIPS16e2 instructions in MIPS16 mode.  This is
1048     equivalent to putting `.module mips16e2' at the start of the
1049     assembly file.  `-mno-mips16e2' turns off this option.
1050
1051`-mmicromips'
1052`-mno-micromips'
1053     Generate code for the microMIPS processor.  This is equivalent to
1054     putting `.module micromips' at the start of the assembly file.
1055     `-mno-micromips' turns off this option.  This is equivalent to
1056     putting `.module nomicromips' at the start of the assembly file.
1057
1058`-msmartmips'
1059`-mno-smartmips'
1060     Enables the SmartMIPS extension to the MIPS32 instruction set.
1061     This is equivalent to putting `.module smartmips' at the start of
1062     the assembly file.  `-mno-smartmips' turns off this option.
1063
1064`-mips3d'
1065`-no-mips3d'
1066     Generate code for the MIPS-3D Application Specific Extension.
1067     This tells the assembler to accept MIPS-3D instructions.
1068     `-no-mips3d' turns off this option.
1069
1070`-mdmx'
1071`-no-mdmx'
1072     Generate code for the MDMX Application Specific Extension.  This
1073     tells the assembler to accept MDMX instructions.  `-no-mdmx' turns
1074     off this option.
1075
1076`-mdsp'
1077`-mno-dsp'
1078     Generate code for the DSP Release 1 Application Specific Extension.
1079     This tells the assembler to accept DSP Release 1 instructions.
1080     `-mno-dsp' turns off this option.
1081
1082`-mdspr2'
1083`-mno-dspr2'
1084     Generate code for the DSP Release 2 Application Specific Extension.
1085     This option implies `-mdsp'.  This tells the assembler to accept
1086     DSP Release 2 instructions.  `-mno-dspr2' turns off this option.
1087
1088`-mdspr3'
1089`-mno-dspr3'
1090     Generate code for the DSP Release 3 Application Specific Extension.
1091     This option implies `-mdsp' and `-mdspr2'.  This tells the
1092     assembler to accept DSP Release 3 instructions.  `-mno-dspr3'
1093     turns off this option.
1094
1095`-mmsa'
1096`-mno-msa'
1097     Generate code for the MIPS SIMD Architecture Extension.  This
1098     tells the assembler to accept MSA instructions.  `-mno-msa' turns
1099     off this option.
1100
1101`-mxpa'
1102`-mno-xpa'
1103     Generate code for the MIPS eXtended Physical Address (XPA)
1104     Extension.  This tells the assembler to accept XPA instructions.
1105     `-mno-xpa' turns off this option.
1106
1107`-mmt'
1108`-mno-mt'
1109     Generate code for the MT Application Specific Extension.  This
1110     tells the assembler to accept MT instructions.  `-mno-mt' turns
1111     off this option.
1112
1113`-mmcu'
1114`-mno-mcu'
1115     Generate code for the MCU Application Specific Extension.  This
1116     tells the assembler to accept MCU instructions.  `-mno-mcu' turns
1117     off this option.
1118
1119`-mcrc'
1120`-mno-crc'
1121     Generate code for the MIPS cyclic redundancy check (CRC)
1122     Application Specific Extension.  This tells the assembler to
1123     accept CRC instructions.  `-mno-crc' turns off this option.
1124
1125`-mginv'
1126`-mno-ginv'
1127     Generate code for the Global INValidate (GINV) Application Specific
1128     Extension.  This tells the assembler to accept GINV instructions.
1129     `-mno-ginv' turns off this option.
1130
1131`-mloongson-mmi'
1132`-mno-loongson-mmi'
1133     Generate code for the Loongson MultiMedia extensions Instructions
1134     (MMI) Application Specific Extension.  This tells the assembler to
1135     accept MMI instructions.  `-mno-loongson-mmi' turns off this
1136     option.
1137
1138`-mloongson-cam'
1139`-mno-loongson-cam'
1140     Generate code for the Loongson Content Address Memory (CAM)
1141     instructions.  This tells the assembler to accept Loongson CAM
1142     instructions.  `-mno-loongson-cam' turns off this option.
1143
1144`-mloongson-ext'
1145`-mno-loongson-ext'
1146     Generate code for the Loongson EXTensions (EXT) instructions.
1147     This tells the assembler to accept Loongson EXT instructions.
1148     `-mno-loongson-ext' turns off this option.
1149
1150`-mloongson-ext2'
1151`-mno-loongson-ext2'
1152     Generate code for the Loongson EXTensions R2 (EXT2) instructions.
1153     This option implies `-mloongson-ext'.  This tells the assembler to
1154     accept Loongson EXT2 instructions.  `-mno-loongson-ext2' turns off
1155     this option.
1156
1157`-minsn32'
1158`-mno-insn32'
1159     Only use 32-bit instruction encodings when generating code for the
1160     microMIPS processor.  This option inhibits the use of any 16-bit
1161     instructions.  This is equivalent to putting `.set insn32' at the
1162     start of the assembly file.  `-mno-insn32' turns off this option.
1163     This is equivalent to putting `.set noinsn32' at the start of the
1164     assembly file.  By default `-mno-insn32' is selected, allowing all
1165     instructions to be used.
1166
1167`--construct-floats'
1168`--no-construct-floats'
1169     The `--no-construct-floats' option disables the construction of
1170     double width floating point constants by loading the two halves of
1171     the value into the two single width floating point registers that
1172     make up the double width register.  By default
1173     `--construct-floats' is selected, allowing construction of these
1174     floating point constants.
1175
1176`--relax-branch'
1177`--no-relax-branch'
1178     The `--relax-branch' option enables the relaxation of out-of-range
1179     branches.  By default `--no-relax-branch' is selected, causing any
1180     out-of-range branches to produce an error.
1181
1182`-mignore-branch-isa'
1183`-mno-ignore-branch-isa'
1184     Ignore branch checks for invalid transitions between ISA modes.
1185     The semantics of branches does not provide for an ISA mode switch,
1186     so in most cases the ISA mode a branch has been encoded for has to
1187     be the same as the ISA mode of the branch's target label.
1188     Therefore GAS has checks implemented that verify in branch
1189     assembly that the two ISA modes match.  `-mignore-branch-isa'
1190     disables these checks.  By default `-mno-ignore-branch-isa' is
1191     selected, causing any invalid branch requiring a transition
1192     between ISA modes to produce an error.
1193
1194`-mnan=ENCODING'
1195     Select between the IEEE 754-2008 (`-mnan=2008') or the legacy
1196     (`-mnan=legacy') NaN encoding format.  The latter is the default.
1197
1198`--emulation=NAME'
1199     This option was formerly used to switch between ELF and ECOFF
1200     output on targets like IRIX 5 that supported both.  MIPS ECOFF
1201     support was removed in GAS 2.24, so the option now serves little
1202     purpose.  It is retained for backwards compatibility.
1203
1204     The available configuration names are: `mipself', `mipslelf' and
1205     `mipsbelf'.  Choosing `mipself' now has no effect, since the output
1206     is always ELF.  `mipslelf' and `mipsbelf' select little- and
1207     big-endian output respectively, but `-EL' and `-EB' are now the
1208     preferred options instead.
1209
1210`-nocpp'
1211     `as' ignores this option.  It is accepted for compatibility with
1212     the native tools.
1213
1214`--trap'
1215`--no-trap'
1216`--break'
1217`--no-break'
1218     Control how to deal with multiplication overflow and division by
1219     zero.  `--trap' or `--no-break' (which are synonyms) take a trap
1220     exception (and only work for Instruction Set Architecture level 2
1221     and higher); `--break' or `--no-trap' (also synonyms, and the
1222     default) take a break exception.
1223
1224`-n'
1225     When this option is used, `as' will issue a warning every time it
1226     generates a nop instruction from a macro.
1227
1228   The following options are available when as is configured for an
1229MCore processor.
1230
1231`-jsri2bsr'
1232`-nojsri2bsr'
1233     Enable or disable the JSRI to BSR transformation.  By default this
1234     is enabled.  The command-line option `-nojsri2bsr' can be used to
1235     disable it.
1236
1237`-sifilter'
1238`-nosifilter'
1239     Enable or disable the silicon filter behaviour.  By default this
1240     is disabled.  The default can be overridden by the `-sifilter'
1241     command-line option.
1242
1243`-relax'
1244     Alter jump instructions for long displacements.
1245
1246`-mcpu=[210|340]'
1247     Select the cpu type on the target hardware.  This controls which
1248     instructions can be assembled.
1249
1250`-EB'
1251     Assemble for a big endian target.
1252
1253`-EL'
1254     Assemble for a little endian target.
1255
1256
1257   *Note Meta Options::, for the options available when as is configured
1258for a Meta processor.
1259
1260   See the info pages for documentation of the MMIX-specific options.
1261
1262   *Note NDS32 Options::, for the options available when as is
1263configured for a NDS32 processor.
1264
1265   *Note PowerPC-Opts::, for the options available when as is configured
1266for a PowerPC processor.
1267
1268   *Note RISC-V-Options::, for the options available when as is
1269configured for a RISC-V processor.
1270
1271   See the info pages for documentation of the RX-specific options.
1272
1273   The following options are available when as is configured for the
1274s390 processor family.
1275
1276`-m31'
1277`-m64'
1278     Select the word size, either 31/32 bits or 64 bits.
1279
1280`-mesa'
1281
1282`-mzarch'
1283     Select the architecture mode, either the Enterprise System
1284     Architecture (esa) or the z/Architecture mode (zarch).
1285
1286`-march=PROCESSOR'
1287     Specify which s390 processor variant is the target, `g5' (or
1288     `arch3'), `g6', `z900' (or `arch5'), `z990' (or `arch6'),
1289     `z9-109', `z9-ec' (or `arch7'), `z10' (or `arch8'), `z196' (or
1290     `arch9'), `zEC12' (or `arch10'), `z13' (or `arch11'), `z14' (or
1291     `arch12'), `z15' (or `arch13'), or `z16' (or `arch14').
1292
1293`-mregnames'
1294`-mno-regnames'
1295     Allow or disallow symbolic names for registers.
1296
1297`-mwarn-areg-zero'
1298     Warn whenever the operand for a base or index register has been
1299     specified but evaluates to zero.
1300
1301   *Note TIC6X Options::, for the options available when as is
1302configured for a TMS320C6000 processor.
1303
1304   *Note TILE-Gx Options::, for the options available when as is
1305configured for a TILE-Gx processor.
1306
1307   *Note Visium Options::, for the options available when as is
1308configured for a Visium processor.
1309
1310   *Note Xtensa Options::, for the options available when as is
1311configured for an Xtensa processor.
1312
1313   *Note Z80 Options::, for the options available when as is configured
1314for an Z80 processor.
1315
1316* Menu:
1317
1318* Manual::                      Structure of this Manual
1319* GNU Assembler::               The GNU Assembler
1320* Object Formats::              Object File Formats
1321* Command Line::                Command Line
1322* Input Files::                 Input Files
1323* Object::                      Output (Object) File
1324* Errors::                      Error and Warning Messages
1325
1326
1327File: as.info,  Node: Manual,  Next: GNU Assembler,  Up: Overview
1328
13291.1 Structure of this Manual
1330============================
1331
1332This manual is intended to describe what you need to know to use GNU
1333`as'.  We cover the syntax expected in source files, including notation
1334for symbols, constants, and expressions; the directives that `as'
1335understands; and of course how to invoke `as'.
1336
1337   This manual also describes some of the machine-dependent features of
1338various flavors of the assembler.
1339
1340   On the other hand, this manual is _not_ intended as an introduction
1341to programming in assembly language--let alone programming in general!
1342In a similar vein, we make no attempt to introduce the machine
1343architecture; we do _not_ describe the instruction set, standard
1344mnemonics, registers or addressing modes that are standard to a
1345particular architecture.  You may want to consult the manufacturer's
1346machine architecture manual for this information.
1347
1348
1349File: as.info,  Node: GNU Assembler,  Next: Object Formats,  Prev: Manual,  Up: Overview
1350
13511.2 The GNU Assembler
1352=====================
1353
1354GNU `as' is really a family of assemblers.  If you use (or have used)
1355the GNU assembler on one architecture, you should find a fairly similar
1356environment when you use it on another architecture.  Each version has
1357much in common with the others, including object file formats, most
1358assembler directives (often called "pseudo-ops") and assembler syntax.
1359
1360   `as' is primarily intended to assemble the output of the GNU C
1361compiler `gcc' for use by the linker `ld'.  Nevertheless, we've tried
1362to make `as' assemble correctly everything that other assemblers for
1363the same machine would assemble.  Any exceptions are documented
1364explicitly (*note Machine Dependencies::).  This doesn't mean `as'
1365always uses the same syntax as another assembler for the same
1366architecture; for example, we know of several incompatible versions of
1367680x0 assembly language syntax.
1368
1369   Unlike older assemblers, `as' is designed to assemble a source
1370program in one pass of the source file.  This has a subtle impact on the
1371`.org' directive (*note `.org': Org.).
1372
1373
1374File: as.info,  Node: Object Formats,  Next: Command Line,  Prev: GNU Assembler,  Up: Overview
1375
13761.3 Object File Formats
1377=======================
1378
1379The GNU assembler can be configured to produce several alternative
1380object file formats.  For the most part, this does not affect how you
1381write assembly language programs; but directives for debugging symbols
1382are typically different in different file formats.  *Note Symbol
1383Attributes: Symbol Attributes.
1384
1385
1386File: as.info,  Node: Command Line,  Next: Input Files,  Prev: Object Formats,  Up: Overview
1387
13881.4 Command Line
1389================
1390
1391After the program name `as', the command line may contain options and
1392file names.  Options may appear in any order, and may be before, after,
1393or between file names.  The order of file names is significant.
1394
1395   `--' (two hyphens) by itself names the standard input file
1396explicitly, as one of the files for `as' to assemble.
1397
1398   Except for `--' any command-line argument that begins with a hyphen
1399(`-') is an option.  Each option changes the behavior of `as'.  No
1400option changes the way another option works.  An option is a `-'
1401followed by one or more letters; the case of the letter is important.
1402All options are optional.
1403
1404   Some options expect exactly one file name to follow them.  The file
1405name may either immediately follow the option's letter (compatible with
1406older assemblers) or it may be the next command argument (GNU
1407standard).  These two command lines are equivalent:
1408
1409     as -o my-object-file.o mumble.s
1410     as -omy-object-file.o mumble.s
1411
1412
1413File: as.info,  Node: Input Files,  Next: Object,  Prev: Command Line,  Up: Overview
1414
14151.5 Input Files
1416===============
1417
1418We use the phrase "source program", abbreviated "source", to describe
1419the program input to one run of `as'.  The program may be in one or
1420more files; how the source is partitioned into files doesn't change the
1421meaning of the source.
1422
1423   The source program is a concatenation of the text in all the files,
1424in the order specified.
1425
1426   Each time you run `as' it assembles exactly one source program.  The
1427source program is made up of one or more files.  (The standard input is
1428also a file.)
1429
1430   You give `as' a command line that has zero or more input file names.
1431The input files are read (from left file name to right).  A
1432command-line argument (in any position) that has no special meaning is
1433taken to be an input file name.
1434
1435   If you give `as' no file names it attempts to read one input file
1436from the `as' standard input, which is normally your terminal.  You may
1437have to type <ctl-D> to tell `as' there is no more program to assemble.
1438
1439   Use `--' if you need to explicitly name the standard input file in
1440your command line.
1441
1442   If the source is empty, `as' produces a small, empty object file.
1443
1444Filenames and Line-numbers
1445--------------------------
1446
1447There are two ways of locating a line in the input file (or files) and
1448either may be used in reporting error messages.  One way refers to a
1449line number in a physical file; the other refers to a line number in a
1450"logical" file.  *Note Error and Warning Messages: Errors.
1451
1452   "Physical files" are those files named in the command line given to
1453`as'.
1454
1455   "Logical files" are simply names declared explicitly by assembler
1456directives; they bear no relation to physical files.  Logical file
1457names help error messages reflect the original source file, when `as'
1458source is itself synthesized from other files.  `as' understands the
1459`#' directives emitted by the `gcc' preprocessor.  See also *Note
1460`.file': File.
1461
1462
1463File: as.info,  Node: Object,  Next: Errors,  Prev: Input Files,  Up: Overview
1464
14651.6 Output (Object) File
1466========================
1467
1468Every time you run `as' it produces an output file, which is your
1469assembly language program translated into numbers.  This file is the
1470object file.  Its default name is `a.out'.  You can give it another
1471name by using the `-o' option.  Conventionally, object file names end
1472with `.o'.  The default name is used for historical reasons: older
1473assemblers were capable of assembling self-contained programs directly
1474into a runnable program.  (For some formats, this isn't currently
1475possible, but it can be done for the `a.out' format.)
1476
1477   The object file is meant for input to the linker `ld'.  It contains
1478assembled program code, information to help `ld' integrate the
1479assembled program into a runnable file, and (optionally) symbolic
1480information for the debugger.
1481
1482
1483File: as.info,  Node: Errors,  Prev: Object,  Up: Overview
1484
14851.7 Error and Warning Messages
1486==============================
1487
1488`as' may write warnings and error messages to the standard error file
1489(usually your terminal).  This should not happen when  a compiler runs
1490`as' automatically.  Warnings report an assumption made so that `as'
1491could keep assembling a flawed program; errors report a grave problem
1492that stops the assembly.
1493
1494   Warning messages have the format
1495
1496     file_name:NNN:Warning Message Text
1497
1498(where NNN is a line number).  If both a logical file name (*note
1499`.file': File.) and a logical line number (*note `.line': Line.)  have
1500been given then they will be used, otherwise the file name and line
1501number in the current assembler source file will be used.  The message
1502text is intended to be self explanatory (in the grand Unix tradition).
1503
1504   Note the file name must be set via the logical version of the `.file'
1505directive, not the DWARF2 version of the `.file' directive.  For
1506example:
1507
1508       .file 2 "bar.c"
1509          error_assembler_source
1510       .file "foo.c"
1511       .line 30
1512           error_c_source
1513
1514   produces this output:
1515
1516       Assembler messages:
1517       asm.s:2: Error: no such instruction: `error_assembler_source'
1518       foo.c:31: Error: no such instruction: `error_c_source'
1519
1520   Error messages have the format
1521
1522     file_name:NNN:FATAL:Error Message Text
1523
1524   The file name and line number are derived as for warning messages.
1525The actual message text may be rather less explanatory because many of
1526them aren't supposed to happen.
1527
1528
1529File: as.info,  Node: Invoking,  Next: Syntax,  Prev: Overview,  Up: Top
1530
15312 Command-Line Options
1532**********************
1533
1534This chapter describes command-line options available in _all_ versions
1535of the GNU assembler; see *Note Machine Dependencies::, for options
1536specific to particular machine architectures.
1537
1538   If you are invoking `as' via the GNU C compiler, you can use the
1539`-Wa' option to pass arguments through to the assembler.  The assembler
1540arguments must be separated from each other (and the `-Wa') by commas.
1541For example:
1542
1543     gcc -c -g -O -Wa,-alh,-L file.c
1544
1545This passes two options to the assembler: `-alh' (emit a listing to
1546standard output with high-level and assembly source) and `-L' (retain
1547local symbols in the symbol table).
1548
1549   Usually you do not need to use this `-Wa' mechanism, since many
1550compiler command-line options are automatically passed to the assembler
1551by the compiler.  (You can call the GNU compiler driver with the `-v'
1552option to see precisely what options it passes to each compilation
1553pass, including the assembler.)
1554
1555* Menu:
1556
1557* a::             -a[cdghlns] enable listings
1558* alternate::     --alternate enable alternate macro syntax
1559* D::             -D for compatibility
1560* f::             -f to work faster
1561* I::             -I for .include search path
1562
1563* K::             -K for difference tables
1564
1565* L::             -L to retain local symbols
1566* listing::       --listing-XXX to configure listing output
1567* M::		  -M or --mri to assemble in MRI compatibility mode
1568* MD::            --MD for dependency tracking
1569* no-pad-sections:: --no-pad-sections to stop section padding
1570* o::             -o to name the object file
1571* R::             -R to join data and text sections
1572* statistics::    --statistics to see statistics about assembly
1573* traditional-format:: --traditional-format for compatible output
1574* v::             -v to announce version
1575* W::             -W, --no-warn, --warn, --fatal-warnings to control warnings
1576* Z::             -Z to make object file even after errors
1577
1578
1579File: as.info,  Node: a,  Next: alternate,  Up: Invoking
1580
15812.1 Enable Listings: `-a[cdghlns]'
1582==================================
1583
1584These options enable listing output from the assembler.  By itself,
1585`-a' requests high-level, assembly, and symbols listing.  You can use
1586other letters to select specific options for the list: `-ah' requests a
1587high-level language listing, `-al' requests an output-program assembly
1588listing, and `-as' requests a symbol table listing.  High-level
1589listings require that a compiler debugging option like `-g' be used,
1590and that assembly listings (`-al') be requested also.
1591
1592   Use the `-ag' option to print a first section with general assembly
1593information, like as version, switches passed, or time stamp.
1594
1595   Use the `-ac' option to omit false conditionals from a listing.  Any
1596lines which are not assembled because of a false `.if' (or `.ifdef', or
1597any other conditional), or a true `.if' followed by an `.else', will be
1598omitted from the listing.
1599
1600   Use the `-ad' option to omit debugging directives from the listing.
1601
1602   Once you have specified one of these options, you can further control
1603listing output and its appearance using the directives `.list',
1604`.nolist', `.psize', `.eject', `.title', and `.sbttl'.  The `-an'
1605option turns off all forms processing.  If you do not request listing
1606output with one of the `-a' options, the listing-control directives
1607have no effect.
1608
1609   The letters after `-a' may be combined into one option, _e.g._,
1610`-aln'.
1611
1612   Note if the assembler source is coming from the standard input (e.g.,
1613because it is being created by `gcc' and the `-pipe' command-line switch
1614is being used) then the listing will not contain any comments or
1615preprocessor directives.  This is because the listing code buffers
1616input source lines from stdin only after they have been preprocessed by
1617the assembler.  This reduces memory usage and makes the code more
1618efficient.
1619
1620
1621File: as.info,  Node: alternate,  Next: D,  Prev: a,  Up: Invoking
1622
16232.2 `--alternate'
1624=================
1625
1626Begin in alternate macro mode, see *Note `.altmacro': Altmacro.
1627
1628
1629File: as.info,  Node: D,  Next: f,  Prev: alternate,  Up: Invoking
1630
16312.3 `-D'
1632========
1633
1634This option has no effect whatsoever, but it is accepted to make it more
1635likely that scripts written for other assemblers also work with `as'.
1636
1637
1638File: as.info,  Node: f,  Next: I,  Prev: D,  Up: Invoking
1639
16402.4 Work Faster: `-f'
1641=====================
1642
1643`-f' should only be used when assembling programs written by a
1644(trusted) compiler.  `-f' stops the assembler from doing whitespace and
1645comment preprocessing on the input file(s) before assembling them.
1646*Note Preprocessing: Preprocessing.
1647
1648     _Warning:_ if you use `-f' when the files actually need to be
1649     preprocessed (if they contain comments, for example), `as' does
1650     not work correctly.
1651
1652
1653File: as.info,  Node: I,  Next: K,  Prev: f,  Up: Invoking
1654
16552.5 `.include' Search Path: `-I' PATH
1656=====================================
1657
1658Use this option to add a PATH to the list of directories `as' searches
1659for files specified in `.include' directives (*note `.include':
1660Include.).  You may use `-I' as many times as necessary to include a
1661variety of paths.  The current working directory is always searched
1662first; after that, `as' searches any `-I' directories in the same order
1663as they were specified (left to right) on the command line.
1664
1665
1666File: as.info,  Node: K,  Next: L,  Prev: I,  Up: Invoking
1667
16682.6 Difference Tables: `-K'
1669===========================
1670
1671`as' sometimes alters the code emitted for directives of the form
1672`.word SYM1-SYM2'.  *Note `.word': Word.  You can use the `-K' option
1673if you want a warning issued when this is done.
1674
1675
1676File: as.info,  Node: L,  Next: listing,  Prev: K,  Up: Invoking
1677
16782.7 Include Local Symbols: `-L'
1679===============================
1680
1681Symbols beginning with system-specific local label prefixes, typically
1682`.L' for ELF systems or `L' for traditional a.out systems, are called
1683"local symbols".  *Note Symbol Names::.  Normally you do not see such
1684symbols when debugging, because they are intended for the use of
1685programs (like compilers) that compose assembler programs, not for your
1686notice.  Normally both `as' and `ld' discard such symbols, so you do
1687not normally debug with them.
1688
1689   This option tells `as' to retain those local symbols in the object
1690file.  Usually if you do this you also tell the linker `ld' to preserve
1691those symbols.
1692
1693
1694File: as.info,  Node: listing,  Next: M,  Prev: L,  Up: Invoking
1695
16962.8 Configuring listing output: `--listing'
1697===========================================
1698
1699The listing feature of the assembler can be enabled via the
1700command-line switch `-a' (*note a::).  This feature combines the input
1701source file(s) with a hex dump of the corresponding locations in the
1702output object file, and displays them as a listing file.  The format of
1703this listing can be controlled by directives inside the assembler
1704source (i.e., `.list' (*note List::), `.title' (*note Title::),
1705`.sbttl' (*note Sbttl::), `.psize' (*note Psize::), and `.eject' (*note
1706Eject::) and also by the following switches:
1707
1708`--listing-lhs-width=`number''
1709     Sets the maximum width, in words, of the first line of the hex
1710     byte dump.  This dump appears on the left hand side of the listing
1711     output.
1712
1713`--listing-lhs-width2=`number''
1714     Sets the maximum width, in words, of any further lines of the hex
1715     byte dump for a given input source line.  If this value is not
1716     specified, it defaults to being the same as the value specified
1717     for `--listing-lhs-width'.  If neither switch is used the default
1718     is to one.
1719
1720`--listing-rhs-width=`number''
1721     Sets the maximum width, in characters, of the source line that is
1722     displayed alongside the hex dump.  The default value for this
1723     parameter is 100.  The source line is displayed on the right hand
1724     side of the listing output.
1725
1726`--listing-cont-lines=`number''
1727     Sets the maximum number of continuation lines of hex dump that
1728     will be displayed for a given single line of source input.  The
1729     default value is 4.
1730
1731
1732File: as.info,  Node: M,  Next: MD,  Prev: listing,  Up: Invoking
1733
17342.9 Assemble in MRI Compatibility Mode: `-M'
1735============================================
1736
1737The `-M' or `--mri' option selects MRI compatibility mode.  This
1738changes the syntax and pseudo-op handling of `as' to make it compatible
1739with the `ASM68K' assembler from Microtec Research.  The exact nature
1740of the MRI syntax will not be documented here; see the MRI manuals for
1741more information.  Note in particular that the handling of macros and
1742macro arguments is somewhat different.  The purpose of this option is
1743to permit assembling existing MRI assembler code using `as'.
1744
1745   The MRI compatibility is not complete.  Certain operations of the
1746MRI assembler depend upon its object file format, and can not be
1747supported using other object file formats.  Supporting these would
1748require enhancing each object file format individually.  These are:
1749
1750   * global symbols in common section
1751
1752     The m68k MRI assembler supports common sections which are merged
1753     by the linker.  Other object file formats do not support this.
1754     `as' handles common sections by treating them as a single common
1755     symbol.  It permits local symbols to be defined within a common
1756     section, but it can not support global symbols, since it has no
1757     way to describe them.
1758
1759   * complex relocations
1760
1761     The MRI assemblers support relocations against a negated section
1762     address, and relocations which combine the start addresses of two
1763     or more sections.  These are not support by other object file
1764     formats.
1765
1766   * `END' pseudo-op specifying start address
1767
1768     The MRI `END' pseudo-op permits the specification of a start
1769     address.  This is not supported by other object file formats.  The
1770     start address may instead be specified using the `-e' option to
1771     the linker, or in a linker script.
1772
1773   * `IDNT', `.ident' and `NAME' pseudo-ops
1774
1775     The MRI `IDNT', `.ident' and `NAME' pseudo-ops assign a module
1776     name to the output file.  This is not supported by other object
1777     file formats.
1778
1779   * `ORG' pseudo-op
1780
1781     The m68k MRI `ORG' pseudo-op begins an absolute section at a given
1782     address.  This differs from the usual `as' `.org' pseudo-op, which
1783     changes the location within the current section.  Absolute
1784     sections are not supported by other object file formats.  The
1785     address of a section may be assigned within a linker script.
1786
1787   There are some other features of the MRI assembler which are not
1788supported by `as', typically either because they are difficult or
1789because they seem of little consequence.  Some of these may be
1790supported in future releases.
1791
1792   * EBCDIC strings
1793
1794     EBCDIC strings are not supported.
1795
1796   * packed binary coded decimal
1797
1798     Packed binary coded decimal is not supported.  This means that the
1799     `DC.P' and `DCB.P' pseudo-ops are not supported.
1800
1801   * `FEQU' pseudo-op
1802
1803     The m68k `FEQU' pseudo-op is not supported.
1804
1805   * `NOOBJ' pseudo-op
1806
1807     The m68k `NOOBJ' pseudo-op is not supported.
1808
1809   * `OPT' branch control options
1810
1811     The m68k `OPT' branch control options--`B', `BRS', `BRB', `BRL',
1812     and `BRW'--are ignored.  `as' automatically relaxes all branches,
1813     whether forward or backward, to an appropriate size, so these
1814     options serve no purpose.
1815
1816   * `OPT' list control options
1817
1818     The following m68k `OPT' list control options are ignored: `C',
1819     `CEX', `CL', `CRE', `E', `G', `I', `M', `MEX', `MC', `MD', `X'.
1820
1821   * other `OPT' options
1822
1823     The following m68k `OPT' options are ignored: `NEST', `O', `OLD',
1824     `OP', `P', `PCO', `PCR', `PCS', `R'.
1825
1826   * `OPT' `D' option is default
1827
1828     The m68k `OPT' `D' option is the default, unlike the MRI assembler.
1829     `OPT NOD' may be used to turn it off.
1830
1831   * `XREF' pseudo-op.
1832
1833     The m68k `XREF' pseudo-op is ignored.
1834
1835
1836
1837File: as.info,  Node: MD,  Next: no-pad-sections,  Prev: M,  Up: Invoking
1838
18392.10 Dependency Tracking: `--MD'
1840================================
1841
1842`as' can generate a dependency file for the file it creates.  This file
1843consists of a single rule suitable for `make' describing the
1844dependencies of the main source file.
1845
1846   The rule is written to the file named in its argument.
1847
1848   This feature is used in the automatic updating of makefiles.
1849
1850
1851File: as.info,  Node: no-pad-sections,  Next: o,  Prev: MD,  Up: Invoking
1852
18532.11 Output Section Padding
1854===========================
1855
1856Normally the assembler will pad the end of each output section up to its
1857alignment boundary.  But this can waste space, which can be significant
1858on memory constrained targets.  So the `--no-pad-sections' option will
1859disable this behaviour.
1860
1861
1862File: as.info,  Node: o,  Next: R,  Prev: no-pad-sections,  Up: Invoking
1863
18642.12 Name the Object File: `-o'
1865===============================
1866
1867There is always one object file output when you run `as'.  By default
1868it has the name `a.out'.  You use this option (which takes exactly one
1869filename) to give the object file a different name.
1870
1871   Whatever the object file is called, `as' overwrites any existing
1872file of the same name.
1873
1874
1875File: as.info,  Node: R,  Next: statistics,  Prev: o,  Up: Invoking
1876
18772.13 Join Data and Text Sections: `-R'
1878======================================
1879
1880`-R' tells `as' to write the object file as if all data-section data
1881lives in the text section.  This is only done at the very last moment:
1882your binary data are the same, but data section parts are relocated
1883differently.  The data section part of your object file is zero bytes
1884long because all its bytes are appended to the text section.  (*Note
1885Sections and Relocation: Sections.)
1886
1887   When you specify `-R' it would be possible to generate shorter
1888address displacements (because we do not have to cross between text and
1889data section).  We refrain from doing this simply for compatibility with
1890older versions of `as'.  In future, `-R' may work this way.
1891
1892   When `as' is configured for COFF or ELF output, this option is only
1893useful if you use sections named `.text' and `.data'.
1894
1895   `-R' is not supported for any of the HPPA targets.  Using `-R'
1896generates a warning from `as'.
1897
1898
1899File: as.info,  Node: statistics,  Next: traditional-format,  Prev: R,  Up: Invoking
1900
19012.14 Display Assembly Statistics: `--statistics'
1902================================================
1903
1904Use `--statistics' to display two statistics about the resources used by
1905`as': the maximum amount of space allocated during the assembly (in
1906bytes), and the total execution time taken for the assembly (in CPU
1907seconds).
1908
1909
1910File: as.info,  Node: traditional-format,  Next: v,  Prev: statistics,  Up: Invoking
1911
19122.15 Compatible Output: `--traditional-format'
1913==============================================
1914
1915For some targets, the output of `as' is different in some ways from the
1916output of some existing assembler.  This switch requests `as' to use
1917the traditional format instead.
1918
1919   For example, it disables the exception frame optimizations which
1920`as' normally does by default on `gcc' output.
1921
1922
1923File: as.info,  Node: v,  Next: W,  Prev: traditional-format,  Up: Invoking
1924
19252.16 Announce Version: `-v'
1926===========================
1927
1928You can find out what version of as is running by including the option
1929`-v' (which you can also spell as `-version') on the command line.
1930
1931
1932File: as.info,  Node: W,  Next: Z,  Prev: v,  Up: Invoking
1933
19342.17 Control Warnings: `-W', `--warn', `--no-warn', `--fatal-warnings'
1935======================================================================
1936
1937`as' should never give a warning or error message when assembling
1938compiler output.  But programs written by people often cause `as' to
1939give a warning that a particular assumption was made.  All such
1940warnings are directed to the standard error file.
1941
1942   If you use the `-W' and `--no-warn' options, no warnings are issued.
1943This only affects the warning messages: it does not change any
1944particular of how `as' assembles your file.  Errors, which stop the
1945assembly, are still reported.
1946
1947   If you use the `--fatal-warnings' option, `as' considers files that
1948generate warnings to be in error.
1949
1950   You can switch these options off again by specifying `--warn', which
1951causes warnings to be output as usual.
1952
1953
1954File: as.info,  Node: Z,  Prev: W,  Up: Invoking
1955
19562.18 Generate Object File in Spite of Errors: `-Z'
1957==================================================
1958
1959After an error message, `as' normally produces no output.  If for some
1960reason you are interested in object file output even after `as' gives
1961an error message on your program, use the `-Z' option.  If there are
1962any errors, `as' continues anyways, and writes an object file after a
1963final warning message of the form `N errors, M warnings, generating bad
1964object file.'
1965
1966
1967File: as.info,  Node: Syntax,  Next: Sections,  Prev: Invoking,  Up: Top
1968
19693 Syntax
1970********
1971
1972This chapter describes the machine-independent syntax allowed in a
1973source file.  `as' syntax is similar to what many other assemblers use;
1974it is inspired by the BSD 4.2 assembler, except that `as' does not
1975assemble Vax bit-fields.
1976
1977* Menu:
1978
1979* Preprocessing::               Preprocessing
1980* Whitespace::                  Whitespace
1981* Comments::                    Comments
1982* Symbol Intro::                Symbols
1983* Statements::                  Statements
1984* Constants::                   Constants
1985
1986
1987File: as.info,  Node: Preprocessing,  Next: Whitespace,  Up: Syntax
1988
19893.1 Preprocessing
1990=================
1991
1992The `as' internal preprocessor:
1993   * adjusts and removes extra whitespace.  It leaves one space or tab
1994     before the keywords on a line, and turns any other whitespace on
1995     the line into a single space.
1996
1997   * removes all comments, replacing them with a single space, or an
1998     appropriate number of newlines.
1999
2000   * converts character constants into the appropriate numeric values.
2001
2002   It does not do macro processing, include file handling, or anything
2003else you may get from your C compiler's preprocessor.  You can do
2004include file processing with the `.include' directive (*note
2005`.include': Include.).  You can use the GNU C compiler driver to get
2006other "CPP" style preprocessing by giving the input file a `.S' suffix.
2007See the 'Options Controlling the Kind of Output' section of the GCC
2008manual for more details
2009(https://gcc.gnu.org/onlinedocs/gcc/Overall-Options.html#Overall-Options)
2010
2011   Excess whitespace, comments, and character constants cannot be used
2012in the portions of the input text that are not preprocessed.
2013
2014   If the first line of an input file is `#NO_APP' or if you use the
2015`-f' option, whitespace and comments are not removed from the input
2016file.  Within an input file, you can ask for whitespace and comment
2017removal in specific portions of the by putting a line that says `#APP'
2018before the text that may contain whitespace or comments, and putting a
2019line that says `#NO_APP' after this text.  This feature is mainly
2020intend to support `asm' statements in compilers whose output is
2021otherwise free of comments and whitespace.
2022
2023
2024File: as.info,  Node: Whitespace,  Next: Comments,  Prev: Preprocessing,  Up: Syntax
2025
20263.2 Whitespace
2027==============
2028
2029"Whitespace" is one or more blanks or tabs, in any order.  Whitespace
2030is used to separate symbols, and to make programs neater for people to
2031read.  Unless within character constants (*note Character Constants:
2032Characters.), any whitespace means the same as exactly one space.
2033
2034
2035File: as.info,  Node: Comments,  Next: Symbol Intro,  Prev: Whitespace,  Up: Syntax
2036
20373.3 Comments
2038============
2039
2040There are two ways of rendering comments to `as'.  In both cases the
2041comment is equivalent to one space.
2042
2043   Anything from `/*' through the next `*/' is a comment.  This means
2044you may not nest these comments.
2045
2046     /*
2047       The only way to include a newline ('\n') in a comment
2048       is to use this sort of comment.
2049     */
2050
2051     /* This sort of comment does not nest. */
2052
2053   Anything from a "line comment" character up to the next newline is
2054considered a comment and is ignored.  The line comment character is
2055target specific, and some targets multiple comment characters.  Some
2056targets also have line comment characters that only work if they are
2057the first character on a line.  Some targets use a sequence of two
2058characters to introduce a line comment.  Some targets can also change
2059their line comment characters depending upon command-line options that
2060have been used.  For more details see the _Syntax_ section in the
2061documentation for individual targets.
2062
2063   If the line comment character is the hash sign (`#') then it still
2064has the special ability to enable and disable preprocessing (*note
2065Preprocessing::) and to specify logical line numbers:
2066
2067   To be compatible with past assemblers, lines that begin with `#'
2068have a special interpretation.  Following the `#' should be an absolute
2069expression (*note Expressions::): the logical line number of the _next_
2070line.  Then a string (*note Strings: Strings.) is allowed: if present
2071it is a new logical file name.  The rest of the line, if any, should be
2072whitespace.
2073
2074   If the first non-whitespace characters on the line are not numeric,
2075the line is ignored.  (Just like a comment.)
2076
2077                               # This is an ordinary comment.
2078     # 42-6 "new_file_name"    # New logical file name
2079                               # This is logical line # 36.
2080   This feature is deprecated, and may disappear from future versions
2081of `as'.
2082
2083
2084File: as.info,  Node: Symbol Intro,  Next: Statements,  Prev: Comments,  Up: Syntax
2085
20863.4 Symbols
2087===========
2088
2089A "symbol" is one or more characters chosen from the set of all letters
2090(both upper and lower case), digits and the three characters `_.$'.  On
2091most machines, you can also use `$' in symbol names; exceptions are
2092noted in *Note Machine Dependencies::.  No symbol may begin with a
2093digit.  Case is significant.  There is no length limit; all characters
2094are significant.  Multibyte characters are supported, but note that the
2095setting of the `--multibyte-handling' option might prevent their use.
2096Symbols are delimited by characters not in that set, or by the
2097beginning of a file (since the source program must end with a newline,
2098the end of a file is not a possible symbol delimiter).  *Note Symbols::.
2099
2100Symbol names may also be enclosed in double quote `"' characters.  In
2101such cases any characters are allowed, except for the NUL character.
2102If a double quote character is to be included in the symbol name it
2103must be preceded by a backslash `\' character.
2104
2105
2106File: as.info,  Node: Statements,  Next: Constants,  Prev: Symbol Intro,  Up: Syntax
2107
21083.5 Statements
2109==============
2110
2111A "statement" ends at a newline character (`\n') or a "line separator
2112character".  The line separator character is target specific and
2113described in the _Syntax_ section of each target's documentation.  Not
2114all targets support a line separator character.  The newline or line
2115separator character is considered to be part of the preceding
2116statement.  Newlines and separators within character constants are an
2117exception: they do not end statements.
2118
2119   It is an error to end any statement with end-of-file:  the last
2120character of any input file should be a newline.
2121
2122   An empty statement is allowed, and may include whitespace.  It is
2123ignored.
2124
2125   A statement begins with zero or more labels, optionally followed by a
2126key symbol which determines what kind of statement it is.  The key
2127symbol determines the syntax of the rest of the statement.  If the
2128symbol begins with a dot `.' then the statement is an assembler
2129directive: typically valid for any computer.  If the symbol begins with
2130a letter the statement is an assembly language "instruction": it
2131assembles into a machine language instruction.  Different versions of
2132`as' for different computers recognize different instructions.  In
2133fact, the same symbol may represent a different instruction in a
2134different computer's assembly language.
2135
2136   A label is a symbol immediately followed by a colon (`:').
2137Whitespace before a label or after a colon is permitted, but you may not
2138have whitespace between a label's symbol and its colon. *Note Labels::.
2139
2140   For HPPA targets, labels need not be immediately followed by a
2141colon, but the definition of a label must begin in column zero.  This
2142also implies that only one label may be defined on each line.
2143
2144     label:     .directive    followed by something
2145     another_label:           # This is an empty statement.
2146                instruction   operand_1, operand_2, ...
2147
2148
2149File: as.info,  Node: Constants,  Prev: Statements,  Up: Syntax
2150
21513.6 Constants
2152=============
2153
2154A constant is a number, written so that its value is known by
2155inspection, without knowing any context.  Like this:
2156     .byte  74, 0112, 092, 0x4A, 0X4a, 'J, '\J # All the same value.
2157     .ascii "Ring the bell\7"                  # A string constant.
2158     .octa  0x123456789abcdef0123456789ABCDEF0 # A bignum.
2159     .float 0f-314159265358979323846264338327\
2160     95028841971.693993751E-40                 # - pi, a flonum.
2161
2162* Menu:
2163
2164* Characters::                  Character Constants
2165* Numbers::                     Number Constants
2166
2167
2168File: as.info,  Node: Characters,  Next: Numbers,  Up: Constants
2169
21703.6.1 Character Constants
2171-------------------------
2172
2173There are two kinds of character constants.  A "character" stands for
2174one character in one byte and its value may be used in numeric
2175expressions.  String constants (properly called string _literals_) are
2176potentially many bytes and their values may not be used in arithmetic
2177expressions.
2178
2179* Menu:
2180
2181* Strings::                     Strings
2182* Chars::                       Characters
2183
2184
2185File: as.info,  Node: Strings,  Next: Chars,  Up: Characters
2186
21873.6.1.1 Strings
2188...............
2189
2190A "string" is written between double-quotes.  It may contain
2191double-quotes or null characters.  The way to get special characters
2192into a string is to "escape" these characters: precede them with a
2193backslash `\' character.  For example `\\' represents one backslash:
2194the first `\' is an escape which tells `as' to interpret the second
2195character literally as a backslash (which prevents `as' from
2196recognizing the second `\' as an escape character).  The complete list
2197of escapes follows.
2198
2199`\b'
2200     Mnemonic for backspace; for ASCII this is octal code 010.
2201
2202`backslash-f'
2203     Mnemonic for FormFeed; for ASCII this is octal code 014.
2204
2205`\n'
2206     Mnemonic for newline; for ASCII this is octal code 012.
2207
2208`\r'
2209     Mnemonic for carriage-Return; for ASCII this is octal code 015.
2210
2211`\t'
2212     Mnemonic for horizontal Tab; for ASCII this is octal code 011.
2213
2214`\ DIGIT DIGIT DIGIT'
2215     An octal character code.  The numeric code is 3 octal digits.  For
2216     compatibility with other Unix systems, 8 and 9 are accepted as
2217     digits: for example, `\008' has the value 010, and `\009' the
2218     value 011.
2219
2220`\`x' HEX-DIGITS...'
2221     A hex character code.  All trailing hex digits are combined.
2222     Either upper or lower case `x' works.
2223
2224`\\'
2225     Represents one `\' character.
2226
2227`\"'
2228     Represents one `"' character.  Needed in strings to represent this
2229     character, because an unescaped `"' would end the string.
2230
2231`\ ANYTHING-ELSE'
2232     Any other character when escaped by `\' gives a warning, but
2233     assembles as if the `\' was not present.  The idea is that if you
2234     used an escape sequence you clearly didn't want the literal
2235     interpretation of the following character.  However `as' has no
2236     other interpretation, so `as' knows it is giving you the wrong
2237     code and warns you of the fact.
2238
2239   Which characters are escapable, and what those escapes represent,
2240varies widely among assemblers.  The current set is what we think the
2241BSD 4.2 assembler recognizes, and is a subset of what most C compilers
2242recognize.  If you are in doubt, do not use an escape sequence.
2243
2244
2245File: as.info,  Node: Chars,  Prev: Strings,  Up: Characters
2246
22473.6.1.2 Characters
2248..................
2249
2250A single character may be written as a single quote immediately
2251followed by that character.  Some backslash escapes apply to
2252characters, `\b', `\f', `\n', `\r', `\t', and `\"' with the same meaning
2253as for strings, plus `\'' for a single quote.  So if you want to write
2254the character backslash, you must write `'\\' where the first `\'
2255escapes the second `\'.  As you can see, the quote is an acute accent,
2256not a grave accent.  A newline immediately following an acute accent is
2257taken as a literal character and does not count as the end of a
2258statement.  The value of a character constant in a numeric expression
2259is the machine's byte-wide code for that character.  `as' assumes your
2260character code is ASCII: `'A' means 65, `'B' means 66, and so on.
2261
2262
2263File: as.info,  Node: Numbers,  Prev: Characters,  Up: Constants
2264
22653.6.2 Number Constants
2266----------------------
2267
2268`as' distinguishes three kinds of numbers according to how they are
2269stored in the target machine.  _Integers_ are numbers that would fit
2270into an `int' in the C language.  _Bignums_ are integers, but they are
2271stored in more than 32 bits.  _Flonums_ are floating point numbers,
2272described below.
2273
2274* Menu:
2275
2276* Integers::                    Integers
2277* Bignums::                     Bignums
2278* Flonums::                     Flonums
2279
2280
2281File: as.info,  Node: Integers,  Next: Bignums,  Up: Numbers
2282
22833.6.2.1 Integers
2284................
2285
2286A binary integer is `0b' or `0B' followed by zero or more of the binary
2287digits `01'.
2288
2289   An octal integer is `0' followed by zero or more of the octal digits
2290(`01234567').
2291
2292   A decimal integer starts with a non-zero digit followed by zero or
2293more digits (`0123456789').
2294
2295   A hexadecimal integer is `0x' or `0X' followed by one or more
2296hexadecimal digits chosen from `0123456789abcdefABCDEF'.
2297
2298   Integers have the usual values.  To denote a negative integer, use
2299the prefix operator `-' discussed under expressions (*note Prefix
2300Operators: Prefix Ops.).
2301
2302
2303File: as.info,  Node: Bignums,  Next: Flonums,  Prev: Integers,  Up: Numbers
2304
23053.6.2.2 Bignums
2306...............
2307
2308A "bignum" has the same syntax and semantics as an integer except that
2309the number (or its negative) takes more than 32 bits to represent in
2310binary.  The distinction is made because in some places integers are
2311permitted while bignums are not.
2312
2313
2314File: as.info,  Node: Flonums,  Prev: Bignums,  Up: Numbers
2315
23163.6.2.3 Flonums
2317...............
2318
2319A "flonum" represents a floating point number.  The translation is
2320indirect: a decimal floating point number from the text is converted by
2321`as' to a generic binary floating point number of more than sufficient
2322precision.  This generic floating point number is converted to a
2323particular computer's floating point format (or formats) by a portion
2324of `as' specialized to that computer.
2325
2326   A flonum is written by writing (in order)
2327   * The digit `0'.  (`0' is optional on the HPPA.)
2328
2329   * A letter, to tell `as' the rest of the number is a flonum.  `e' is
2330     recommended.  Case is not important.
2331
2332     On the H8/300 and Renesas / SuperH SH architectures, the letter
2333     must be one of the letters `DFPRSX' (in upper or lower case).
2334
2335     On the ARC, the letter must be one of the letters `DFRS' (in upper
2336     or lower case).
2337
2338     On the HPPA architecture, the letter must be `E' (upper case only).
2339
2340   * An optional sign: either `+' or `-'.
2341
2342   * An optional "integer part": zero or more decimal digits.
2343
2344   * An optional "fractional part": `.' followed by zero or more
2345     decimal digits.
2346
2347   * An optional exponent, consisting of:
2348
2349        * An `E' or `e'.
2350
2351        * Optional sign: either `+' or `-'.
2352
2353        * One or more decimal digits.
2354
2355
2356   At least one of the integer part or the fractional part must be
2357present.  The floating point number has the usual base-10 value.
2358
2359   `as' does all processing using integers.  Flonums are computed
2360independently of any floating point hardware in the computer running
2361`as'.
2362
2363
2364File: as.info,  Node: Sections,  Next: Symbols,  Prev: Syntax,  Up: Top
2365
23664 Sections and Relocation
2367*************************
2368
2369* Menu:
2370
2371* Secs Background::             Background
2372* Ld Sections::                 Linker Sections
2373* As Sections::                 Assembler Internal Sections
2374* Sub-Sections::                Sub-Sections
2375* bss::                         bss Section
2376
2377
2378File: as.info,  Node: Secs Background,  Next: Ld Sections,  Up: Sections
2379
23804.1 Background
2381==============
2382
2383Roughly, a section is a range of addresses, with no gaps; all data "in"
2384those addresses is treated the same for some particular purpose.  For
2385example there may be a "read only" section.
2386
2387   The linker `ld' reads many object files (partial programs) and
2388combines their contents to form a runnable program.  When `as' emits an
2389object file, the partial program is assumed to start at address 0.
2390`ld' assigns the final addresses for the partial program, so that
2391different partial programs do not overlap.  This is actually an
2392oversimplification, but it suffices to explain how `as' uses sections.
2393
2394   `ld' moves blocks of bytes of your program to their run-time
2395addresses.  These blocks slide to their run-time addresses as rigid
2396units; their length does not change and neither does the order of bytes
2397within them.  Such a rigid unit is called a _section_.  Assigning
2398run-time addresses to sections is called "relocation".  It includes the
2399task of adjusting mentions of object-file addresses so they refer to
2400the proper run-time addresses.  For the H8/300, and for the Renesas /
2401SuperH SH, `as' pads sections if needed to ensure they end on a word
2402(sixteen bit) boundary.
2403
2404   An object file written by `as' has at least three sections, any of
2405which may be empty.  These are named "text", "data" and "bss" sections.
2406
2407   When it generates COFF or ELF output, `as' can also generate
2408whatever other named sections you specify using the `.section'
2409directive (*note `.section': Section.).  If you do not use any
2410directives that place output in the `.text' or `.data' sections, these
2411sections still exist, but are empty.
2412
2413   When `as' generates SOM or ELF output for the HPPA, `as' can also
2414generate whatever other named sections you specify using the `.space'
2415and `.subspace' directives.  See `HP9000 Series 800 Assembly Language
2416Reference Manual' (HP 92432-90001) for details on the `.space' and
2417`.subspace' assembler directives.
2418
2419   Additionally, `as' uses different names for the standard text, data,
2420and bss sections when generating SOM output.  Program text is placed
2421into the `$CODE$' section, data into `$DATA$', and BSS into `$BSS$'.
2422
2423   Within the object file, the text section starts at address `0', the
2424data section follows, and the bss section follows the data section.
2425
2426   When generating either SOM or ELF output files on the HPPA, the text
2427section starts at address `0', the data section at address `0x4000000',
2428and the bss section follows the data section.
2429
2430   To let `ld' know which data changes when the sections are relocated,
2431and how to change that data, `as' also writes to the object file
2432details of the relocation needed.  To perform relocation `ld' must
2433know, each time an address in the object file is mentioned:
2434   * Where in the object file is the beginning of this reference to an
2435     address?
2436
2437   * How long (in bytes) is this reference?
2438
2439   * Which section does the address refer to?  What is the numeric
2440     value of
2441          (ADDRESS) - (START-ADDRESS OF SECTION)?
2442
2443   * Is the reference to an address "Program-Counter relative"?
2444
2445   In fact, every address `as' ever uses is expressed as
2446     (SECTION) + (OFFSET INTO SECTION)
2447   Further, most expressions `as' computes have this section-relative
2448nature.  (For some object formats, such as SOM for the HPPA, some
2449expressions are symbol-relative instead.)
2450
2451   In this manual we use the notation {SECNAME N} to mean "offset N
2452into section SECNAME."
2453
2454   Apart from text, data and bss sections you need to know about the
2455"absolute" section.  When `ld' mixes partial programs, addresses in the
2456absolute section remain unchanged.  For example, address `{absolute 0}'
2457is "relocated" to run-time address 0 by `ld'.  Although the linker
2458never arranges two partial programs' data sections with overlapping
2459addresses after linking, _by definition_ their absolute sections must
2460overlap.  Address `{absolute 239}' in one part of a program is always
2461the same address when the program is running as address `{absolute
2462239}' in any other part of the program.
2463
2464   The idea of sections is extended to the "undefined" section.  Any
2465address whose section is unknown at assembly time is by definition
2466rendered {undefined U}--where U is filled in later.  Since numbers are
2467always defined, the only way to generate an undefined address is to
2468mention an undefined symbol.  A reference to a named common block would
2469be such a symbol: its value is unknown at assembly time so it has
2470section _undefined_.
2471
2472   By analogy the word _section_ is used to describe groups of sections
2473in the linked program.  `ld' puts all partial programs' text sections
2474in contiguous addresses in the linked program.  It is customary to
2475refer to the _text section_ of a program, meaning all the addresses of
2476all partial programs' text sections.  Likewise for data and bss
2477sections.
2478
2479   Some sections are manipulated by `ld'; others are invented for use
2480of `as' and have no meaning except during assembly.
2481
2482
2483File: as.info,  Node: Ld Sections,  Next: As Sections,  Prev: Secs Background,  Up: Sections
2484
24854.2 Linker Sections
2486===================
2487
2488`ld' deals with just four kinds of sections, summarized below.
2489
2490*named sections*
2491*text section*
2492*data section*
2493     These sections hold your program.  `as' and `ld' treat them as
2494     separate but equal sections.  Anything you can say of one section
2495     is true of another.  When the program is running, however, it is
2496     customary for the text section to be unalterable.  The text
2497     section is often shared among processes: it contains instructions,
2498     constants and the like.  The data section of a running program is
2499     usually alterable: for example, C variables would be stored in the
2500     data section.
2501
2502*bss section*
2503     This section contains zeroed bytes when your program begins
2504     running.  It is used to hold uninitialized variables or common
2505     storage.  The length of each partial program's bss section is
2506     important, but because it starts out containing zeroed bytes there
2507     is no need to store explicit zero bytes in the object file.  The
2508     bss section was invented to eliminate those explicit zeros from
2509     object files.
2510
2511*absolute section*
2512     Address 0 of this section is always "relocated" to runtime address
2513     0.  This is useful if you want to refer to an address that `ld'
2514     must not change when relocating.  In this sense we speak of
2515     absolute addresses being "unrelocatable": they do not change
2516     during relocation.
2517
2518*undefined section*
2519     This "section" is a catch-all for address references to objects
2520     not in the preceding sections.
2521
2522   An idealized example of three relocatable sections follows.  The
2523example uses the traditional section names `.text' and `.data'.  Memory
2524addresses are on the horizontal axis.
2525
2526                           +-----+----+--+
2527     partial program # 1:  |ttttt|dddd|00|
2528                           +-----+----+--+
2529
2530                           text   data bss
2531                           seg.   seg. seg.
2532
2533                           +---+---+---+
2534     partial program # 2:  |TTT|DDD|000|
2535                           +---+---+---+
2536
2537                           +--+---+-----+--+----+---+-----+~~
2538     linked program:       |  |TTT|ttttt|  |dddd|DDD|00000|
2539                           +--+---+-----+--+----+---+-----+~~
2540
2541         addresses:        0 ...
2542
2543
2544File: as.info,  Node: As Sections,  Next: Sub-Sections,  Prev: Ld Sections,  Up: Sections
2545
25464.3 Assembler Internal Sections
2547===============================
2548
2549These sections are meant only for the internal use of `as'.  They have
2550no meaning at run-time.  You do not really need to know about these
2551sections for most purposes; but they can be mentioned in `as' warning
2552messages, so it might be helpful to have an idea of their meanings to
2553`as'.  These sections are used to permit the value of every expression
2554in your assembly language program to be a section-relative address.
2555
2556ASSEMBLER-INTERNAL-LOGIC-ERROR!
2557     An internal assembler logic error has been found.  This means
2558     there is a bug in the assembler.
2559
2560expr section
2561     The assembler stores complex expression internally as combinations
2562     of symbols.  When it needs to represent an expression as a symbol,
2563     it puts it in the expr section.
2564
2565
2566File: as.info,  Node: Sub-Sections,  Next: bss,  Prev: As Sections,  Up: Sections
2567
25684.4 Sub-Sections
2569================
2570
2571Assembled bytes conventionally fall into two sections: text and data.
2572You may have separate groups of data in named sections that you want to
2573end up near to each other in the object file, even though they are not
2574contiguous in the assembler source.  `as' allows you to use
2575"subsections" for this purpose.  Within each section, there can be
2576numbered subsections with values from 0 to 8192.  Objects assembled
2577into the same subsection go into the object file together with other
2578objects in the same subsection.  For example, a compiler might want to
2579store constants in the text section, but might not want to have them
2580interspersed with the program being assembled.  In this case, the
2581compiler could issue a `.text 0' before each section of code being
2582output, and a `.text 1' before each group of constants being output.
2583
2584Subsections are optional.  If you do not use subsections, everything
2585goes in subsection number zero.
2586
2587   Each subsection is zero-padded up to a multiple of four bytes.
2588(Subsections may be padded a different amount on different flavors of
2589`as'.)
2590
2591   Subsections appear in your object file in numeric order, lowest
2592numbered to highest.  (All this to be compatible with other people's
2593assemblers.)  The object file contains no representation of
2594subsections; `ld' and other programs that manipulate object files see
2595no trace of them.  They just see all your text subsections as a text
2596section, and all your data subsections as a data section.
2597
2598   To specify which subsection you want subsequent statements assembled
2599into, use a numeric argument to specify it, in a `.text EXPRESSION' or
2600a `.data EXPRESSION' statement.  When generating COFF output, you can
2601also use an extra subsection argument with arbitrary named sections:
2602`.section NAME, EXPRESSION'.  When generating ELF output, you can also
2603use the `.subsection' directive (*note SubSection::) to specify a
2604subsection: `.subsection EXPRESSION'.  EXPRESSION should be an absolute
2605expression (*note Expressions::).  If you just say `.text' then `.text
26060' is assumed.  Likewise `.data' means `.data 0'.  Assembly begins in
2607`text 0'.  For instance:
2608     .text 0     # The default subsection is text 0 anyway.
2609     .ascii "This lives in the first text subsection. *"
2610     .text 1
2611     .ascii "But this lives in the second text subsection."
2612     .data 0
2613     .ascii "This lives in the data section,"
2614     .ascii "in the first data subsection."
2615     .text 0
2616     .ascii "This lives in the first text section,"
2617     .ascii "immediately following the asterisk (*)."
2618
2619   Each section has a "location counter" incremented by one for every
2620byte assembled into that section.  Because subsections are merely a
2621convenience restricted to `as' there is no concept of a subsection
2622location counter.  There is no way to directly manipulate a location
2623counter--but the `.align' directive changes it, and any label
2624definition captures its current value.  The location counter of the
2625section where statements are being assembled is said to be the "active"
2626location counter.
2627
2628
2629File: as.info,  Node: bss,  Prev: Sub-Sections,  Up: Sections
2630
26314.5 bss Section
2632===============
2633
2634The bss section is used for local common variable storage.  You may
2635allocate address space in the bss section, but you may not dictate data
2636to load into it before your program executes.  When your program starts
2637running, all the contents of the bss section are zeroed bytes.
2638
2639   The `.lcomm' pseudo-op defines a symbol in the bss section; see
2640*Note `.lcomm': Lcomm.
2641
2642   The `.comm' pseudo-op may be used to declare a common symbol, which
2643is another form of uninitialized symbol; see *Note `.comm': Comm.
2644
2645   When assembling for a target which supports multiple sections, such
2646as ELF or COFF, you may switch into the `.bss' section and define
2647symbols as usual; see *Note `.section': Section.  You may only assemble
2648zero values into the section.  Typically the section will only contain
2649symbol definitions and `.skip' directives (*note `.skip': Skip.).
2650
2651
2652File: as.info,  Node: Symbols,  Next: Expressions,  Prev: Sections,  Up: Top
2653
26545 Symbols
2655*********
2656
2657Symbols are a central concept: the programmer uses symbols to name
2658things, the linker uses symbols to link, and the debugger uses symbols
2659to debug.
2660
2661     _Warning:_ `as' does not place symbols in the object file in the
2662     same order they were declared.  This may break some debuggers.
2663
2664* Menu:
2665
2666* Labels::                      Labels
2667* Setting Symbols::             Giving Symbols Other Values
2668* Symbol Names::                Symbol Names
2669* Dot::                         The Special Dot Symbol
2670* Symbol Attributes::           Symbol Attributes
2671
2672
2673File: as.info,  Node: Labels,  Next: Setting Symbols,  Up: Symbols
2674
26755.1 Labels
2676==========
2677
2678A "label" is written as a symbol immediately followed by a colon `:'.
2679The symbol then represents the current value of the active location
2680counter, and is, for example, a suitable instruction operand.  You are
2681warned if you use the same symbol to represent two different locations:
2682the first definition overrides any other definitions.
2683
2684   On the HPPA, the usual form for a label need not be immediately
2685followed by a colon, but instead must start in column zero.  Only one
2686label may be defined on a single line.  To work around this, the HPPA
2687version of `as' also provides a special directive `.label' for defining
2688labels more flexibly.
2689
2690
2691File: as.info,  Node: Setting Symbols,  Next: Symbol Names,  Prev: Labels,  Up: Symbols
2692
26935.2 Giving Symbols Other Values
2694===============================
2695
2696A symbol can be given an arbitrary value by writing a symbol, followed
2697by an equals sign `=', followed by an expression (*note Expressions::).
2698This is equivalent to using the `.set' directive.  *Note `.set': Set.
2699In the same way, using a double equals sign `='`=' here represents an
2700equivalent of the `.eqv' directive.  *Note `.eqv': Eqv.
2701
2702   Blackfin does not support symbol assignment with `='.
2703
2704
2705File: as.info,  Node: Symbol Names,  Next: Dot,  Prev: Setting Symbols,  Up: Symbols
2706
27075.3 Symbol Names
2708================
2709
2710Symbol names begin with a letter or with one of `._'.  On most
2711machines, you can also use `$' in symbol names; exceptions are noted in
2712*Note Machine Dependencies::.  That character may be followed by any
2713string of digits, letters, dollar signs (unless otherwise noted for a
2714particular target machine), and underscores.  These restrictions do not
2715apply when quoting symbol names by `"', which is permitted for most
2716targets.  Escaping characters in quoted symbol names with `\' generally
2717extends only to `\' itself and `"', at the time of writing.
2718
2719Case of letters is significant: `foo' is a different symbol name than
2720`Foo'.
2721
2722   Symbol names do not start with a digit.  An exception to this rule
2723is made for Local Labels.  See below.
2724
2725   Multibyte characters are supported, but note that the setting of the
2726`multibyte-handling' option might prevent their use.  To generate a
2727symbol name containing multibyte characters enclose it within double
2728quotes and use escape codes. cf *Note Strings::.  Generating a
2729multibyte symbol name from a label is not currently supported.
2730
2731   Since multibyte symbol names are unusual, and could possibly be used
2732maliciously, `as' provides a command line option
2733(`--multibyte-handling=warn-sym-only') which can be used to generate a
2734warning message whenever a symbol name containing multibyte characters
2735is defined.
2736
2737   Each symbol has exactly one name.  Each name in an assembly language
2738program refers to exactly one symbol.  You may use that symbol name any
2739number of times in a program.
2740
2741Local Symbol Names
2742------------------
2743
2744A local symbol is any symbol beginning with certain local label
2745prefixes.  By default, the local label prefix is `.L' for ELF systems or
2746`L' for traditional a.out systems, but each target may have its own set
2747of local label prefixes.  On the HPPA local symbols begin with `L$'.
2748
2749   Local symbols are defined and used within the assembler, but they are
2750normally not saved in object files.  Thus, they are not visible when
2751debugging.  You may use the `-L' option (*note Include Local Symbols:
2752L.)  to retain the local symbols in the object files.
2753
2754Local Labels
2755------------
2756
2757Local labels are different from local symbols.  Local labels help
2758compilers and programmers use names temporarily.  They create symbols
2759which are guaranteed to be unique over the entire scope of the input
2760source code and which can be referred to by a simple notation.  To
2761define a local label, write a label of the form `N:' (where N
2762represents any non-negative integer).  To refer to the most recent
2763previous definition of that label write `Nb', using the same number as
2764when you defined the label.  To refer to the next definition of a local
2765label, write `Nf'.  The `b' stands for "backwards" and the `f' stands
2766for "forwards".
2767
2768   There is no restriction on how you can use these labels, and you can
2769reuse them too.  So that it is possible to repeatedly define the same
2770local label (using the same number `N'), although you can only refer to
2771the most recently defined local label of that number (for a backwards
2772reference) or the next definition of a specific local label for a
2773forward reference.  It is also worth noting that the first 10 local
2774labels (`0:'...`9:') are implemented in a slightly more efficient
2775manner than the others.
2776
2777   Here is an example:
2778
2779     1:        branch 1f
2780     2:        branch 1b
2781     1:        branch 2f
2782     2:        branch 1b
2783
2784   Which is the equivalent of:
2785
2786     label_1:  branch label_3
2787     label_2:  branch label_1
2788     label_3:  branch label_4
2789     label_4:  branch label_3
2790
2791   Local label names are only a notational device.  They are immediately
2792transformed into more conventional symbol names before the assembler
2793uses them.  The symbol names are stored in the symbol table, appear in
2794error messages, and are optionally emitted to the object file.  The
2795names are constructed using these parts:
2796
2797`_local label prefix_'
2798     All local symbols begin with the system-specific local label
2799     prefix.  Normally both `as' and `ld' forget symbols that start
2800     with the local label prefix.  These labels are used for symbols
2801     you are never intended to see.  If you use the `-L' option then
2802     `as' retains these symbols in the object file. If you also
2803     instruct `ld' to retain these symbols, you may use them in
2804     debugging.
2805
2806`NUMBER'
2807     This is the number that was used in the local label definition.
2808     So if the label is written `55:' then the number is `55'.
2809
2810`C-B'
2811     This unusual character is included so you do not accidentally
2812     invent a symbol of the same name.  The character has ASCII value
2813     of `\002' (control-B).
2814
2815`_ordinal number_'
2816     This is a serial number to keep the labels distinct.  The first
2817     definition of `0:' gets the number `1'.  The 15th definition of
2818     `0:' gets the number `15', and so on.  Likewise the first
2819     definition of `1:' gets the number `1' and its 15th definition
2820     gets `15' as well.
2821
2822   So for example, the first `1:' may be named `.L1C-B1', and the 44th
2823`3:' may be named `.L3C-B44'.
2824
2825Dollar Local Labels
2826-------------------
2827
2828On some targets `as' also supports an even more local form of local
2829labels called dollar labels.  These labels go out of scope (i.e., they
2830become undefined) as soon as a non-local label is defined.  Thus they
2831remain valid for only a small region of the input source code.  Normal
2832local labels, by contrast, remain in scope for the entire file, or
2833until they are redefined by another occurrence of the same local label.
2834
2835   Dollar labels are defined in exactly the same way as ordinary local
2836labels, except that they have a dollar sign suffix to their numeric
2837value, e.g., `55$:'.
2838
2839   They can also be distinguished from ordinary local labels by their
2840transformed names which use ASCII character `\001' (control-A) as the
2841magic character to distinguish them from ordinary labels.  For example,
2842the fifth definition of `6$' may be named `.L6C-A5'.
2843
2844
2845File: as.info,  Node: Dot,  Next: Symbol Attributes,  Prev: Symbol Names,  Up: Symbols
2846
28475.4 The Special Dot Symbol
2848==========================
2849
2850The special symbol `.' refers to the current address that `as' is
2851assembling into.  Thus, the expression `melvin: .long .' defines
2852`melvin' to contain its own address.  Assigning a value to `.' is
2853treated the same as a `.org' directive.  Thus, the expression `.=.+4'
2854is the same as saying `.space 4'.
2855
2856
2857File: as.info,  Node: Symbol Attributes,  Prev: Dot,  Up: Symbols
2858
28595.5 Symbol Attributes
2860=====================
2861
2862Every symbol has, as well as its name, the attributes "Value" and
2863"Type".  Depending on output format, symbols can also have auxiliary
2864attributes.
2865
2866   If you use a symbol without defining it, `as' assumes zero for all
2867these attributes, and probably won't warn you.  This makes the symbol
2868an externally defined symbol, which is generally what you would want.
2869
2870* Menu:
2871
2872* Symbol Value::                Value
2873* Symbol Type::                 Type
2874
2875* a.out Symbols::               Symbol Attributes: `a.out'
2876
2877* COFF Symbols::                Symbol Attributes for COFF
2878
2879* SOM Symbols::                Symbol Attributes for SOM
2880
2881
2882File: as.info,  Node: Symbol Value,  Next: Symbol Type,  Up: Symbol Attributes
2883
28845.5.1 Value
2885-----------
2886
2887The value of a symbol is (usually) 32 bits.  For a symbol which labels a
2888location in the text, data, bss or absolute sections the value is the
2889number of addresses from the start of that section to the label.
2890Naturally for text, data and bss sections the value of a symbol changes
2891as `ld' changes section base addresses during linking.  Absolute
2892symbols' values do not change during linking: that is why they are
2893called absolute.
2894
2895   The value of an undefined symbol is treated in a special way.  If it
2896is 0 then the symbol is not defined in this assembler source file, and
2897`ld' tries to determine its value from other files linked into the same
2898program.  You make this kind of symbol simply by mentioning a symbol
2899name without defining it.  A non-zero value represents a `.comm' common
2900declaration.  The value is how much common storage to reserve, in bytes
2901(addresses).  The symbol refers to the first address of the allocated
2902storage.
2903
2904
2905File: as.info,  Node: Symbol Type,  Next: a.out Symbols,  Prev: Symbol Value,  Up: Symbol Attributes
2906
29075.5.2 Type
2908----------
2909
2910The type attribute of a symbol contains relocation (section)
2911information, any flag settings indicating that a symbol is external, and
2912(optionally), other information for linkers and debuggers.  The exact
2913format depends on the object-code output format in use.
2914
2915
2916File: as.info,  Node: a.out Symbols,  Next: COFF Symbols,  Prev: Symbol Type,  Up: Symbol Attributes
2917
29185.5.3 Symbol Attributes: `a.out'
2919--------------------------------
2920
2921* Menu:
2922
2923* Symbol Desc::                 Descriptor
2924* Symbol Other::                Other
2925
2926
2927File: as.info,  Node: Symbol Desc,  Next: Symbol Other,  Up: a.out Symbols
2928
29295.5.3.1 Descriptor
2930..................
2931
2932This is an arbitrary 16-bit value.  You may establish a symbol's
2933descriptor value by using a `.desc' statement (*note `.desc': Desc.).
2934A descriptor value means nothing to `as'.
2935
2936
2937File: as.info,  Node: Symbol Other,  Prev: Symbol Desc,  Up: a.out Symbols
2938
29395.5.3.2 Other
2940.............
2941
2942This is an arbitrary 8-bit value.  It means nothing to `as'.
2943
2944
2945File: as.info,  Node: COFF Symbols,  Next: SOM Symbols,  Prev: a.out Symbols,  Up: Symbol Attributes
2946
29475.5.4 Symbol Attributes for COFF
2948--------------------------------
2949
2950The COFF format supports a multitude of auxiliary symbol attributes;
2951like the primary symbol attributes, they are set between `.def' and
2952`.endef' directives.
2953
29545.5.4.1 Primary Attributes
2955..........................
2956
2957The symbol name is set with `.def'; the value and type, respectively,
2958with `.val' and `.type'.
2959
29605.5.4.2 Auxiliary Attributes
2961............................
2962
2963The `as' directives `.dim', `.line', `.scl', `.size', `.tag', and
2964`.weak' can generate auxiliary symbol table information for COFF.
2965
2966
2967File: as.info,  Node: SOM Symbols,  Prev: COFF Symbols,  Up: Symbol Attributes
2968
29695.5.5 Symbol Attributes for SOM
2970-------------------------------
2971
2972The SOM format for the HPPA supports a multitude of symbol attributes
2973set with the `.EXPORT' and `.IMPORT' directives.
2974
2975   The attributes are described in `HP9000 Series 800 Assembly Language
2976Reference Manual' (HP 92432-90001) under the `IMPORT' and `EXPORT'
2977assembler directive documentation.
2978
2979
2980File: as.info,  Node: Expressions,  Next: Pseudo Ops,  Prev: Symbols,  Up: Top
2981
29826 Expressions
2983*************
2984
2985An "expression" specifies an address or numeric value.  Whitespace may
2986precede and/or follow an expression.
2987
2988   The result of an expression must be an absolute number, or else an
2989offset into a particular section.  If an expression is not absolute,
2990and there is not enough information when `as' sees the expression to
2991know its section, a second pass over the source program might be
2992necessary to interpret the expression--but the second pass is currently
2993not implemented.  `as' aborts with an error message in this situation.
2994
2995* Menu:
2996
2997* Empty Exprs::                 Empty Expressions
2998* Integer Exprs::               Integer Expressions
2999
3000
3001File: as.info,  Node: Empty Exprs,  Next: Integer Exprs,  Up: Expressions
3002
30036.1 Empty Expressions
3004=====================
3005
3006An empty expression has no value: it is just whitespace or null.
3007Wherever an absolute expression is required, you may omit the
3008expression, and `as' assumes a value of (absolute) 0.  This is
3009compatible with other assemblers.
3010
3011
3012File: as.info,  Node: Integer Exprs,  Prev: Empty Exprs,  Up: Expressions
3013
30146.2 Integer Expressions
3015=======================
3016
3017An "integer expression" is one or more _arguments_ delimited by
3018_operators_.
3019
3020* Menu:
3021
3022* Arguments::                   Arguments
3023* Operators::                   Operators
3024* Prefix Ops::                  Prefix Operators
3025* Infix Ops::                   Infix Operators
3026
3027
3028File: as.info,  Node: Arguments,  Next: Operators,  Up: Integer Exprs
3029
30306.2.1 Arguments
3031---------------
3032
3033"Arguments" are symbols, numbers or subexpressions.  In other contexts
3034arguments are sometimes called "arithmetic operands".  In this manual,
3035to avoid confusing them with the "instruction operands" of the machine
3036language, we use the term "argument" to refer to parts of expressions
3037only, reserving the word "operand" to refer only to machine instruction
3038operands.
3039
3040   Symbols are evaluated to yield {SECTION NNN} where SECTION is one of
3041text, data, bss, absolute, or undefined.  NNN is a signed, 2's
3042complement 32 bit integer.
3043
3044   Numbers are usually integers.
3045
3046   A number can be a flonum or bignum.  In this case, you are warned
3047that only the low order 32 bits are used, and `as' pretends these 32
3048bits are an integer.  You may write integer-manipulating instructions
3049that act on exotic constants, compatible with other assemblers.
3050
3051   Subexpressions are a left parenthesis `(' followed by an integer
3052expression, followed by a right parenthesis `)'; or a prefix operator
3053followed by an argument.
3054
3055
3056File: as.info,  Node: Operators,  Next: Prefix Ops,  Prev: Arguments,  Up: Integer Exprs
3057
30586.2.2 Operators
3059---------------
3060
3061"Operators" are arithmetic functions, like `+' or `%'.  Prefix
3062operators are followed by an argument.  Infix operators appear between
3063their arguments.  Operators may be preceded and/or followed by
3064whitespace.
3065
3066
3067File: as.info,  Node: Prefix Ops,  Next: Infix Ops,  Prev: Operators,  Up: Integer Exprs
3068
30696.2.3 Prefix Operator
3070---------------------
3071
3072`as' has the following "prefix operators".  They each take one
3073argument, which must be absolute.
3074
3075`-'
3076     "Negation".  Two's complement negation.
3077
3078`~'
3079     "Complementation".  Bitwise not.
3080
3081
3082File: as.info,  Node: Infix Ops,  Prev: Prefix Ops,  Up: Integer Exprs
3083
30846.2.4 Infix Operators
3085---------------------
3086
3087"Infix operators" take two arguments, one on either side.  Operators
3088have precedence, but operations with equal precedence are performed left
3089to right.  Apart from `+' or `-', both arguments must be absolute, and
3090the result is absolute.
3091
3092  1. Highest Precedence
3093
3094    `*'
3095          "Multiplication".
3096
3097    `/'
3098          "Division".  Truncation is the same as the C operator `/'
3099
3100    `%'
3101          "Remainder".
3102
3103    `<<'
3104          "Shift Left".  Same as the C operator `<<'.
3105
3106    `>>'
3107          "Shift Right".  Same as the C operator `>>'.
3108
3109  2. Intermediate precedence
3110
3111    `|'
3112          "Bitwise Inclusive Or".
3113
3114    `&'
3115          "Bitwise And".
3116
3117    `^'
3118          "Bitwise Exclusive Or".
3119
3120    `!'
3121          "Bitwise Or Not".
3122
3123  3. Low Precedence
3124
3125    `+'
3126          "Addition".  If either argument is absolute, the result has
3127          the section of the other argument.  You may not add together
3128          arguments from different sections.
3129
3130    `-'
3131          "Subtraction".  If the right argument is absolute, the result
3132          has the section of the left argument.  If both arguments are
3133          in the same section, the result is absolute.  You may not
3134          subtract arguments from different sections.
3135
3136    `=='
3137          "Is Equal To"
3138
3139    `<>'
3140    `!='
3141          "Is Not Equal To"
3142
3143    `<'
3144          "Is Less Than"
3145
3146    `>'
3147          "Is Greater Than"
3148
3149    `>='
3150          "Is Greater Than Or Equal To"
3151
3152    `<='
3153          "Is Less Than Or Equal To"
3154
3155          The comparison operators can be used as infix operators.  A
3156          true result has a value of -1 whereas a false result has a
3157          value of 0.   Note, these operators perform signed
3158          comparisons.
3159
3160  4. Lowest Precedence
3161
3162    `&&'
3163          "Logical And".
3164
3165    `||'
3166          "Logical Or".
3167
3168          These two logical operations can be used to combine the
3169          results of sub expressions.  Note, unlike the comparison
3170          operators a true result returns a value of 1 but a false
3171          results does still return 0.  Also note that the logical or
3172          operator has a slightly lower precedence than logical and.
3173
3174
3175   In short, it's only meaningful to add or subtract the _offsets_ in an
3176address; you can only have a defined section in one of the two
3177arguments.
3178
3179
3180File: as.info,  Node: Pseudo Ops,  Next: Object Attributes,  Prev: Expressions,  Up: Top
3181
31827 Assembler Directives
3183**********************
3184
3185All assembler directives have names that begin with a period (`.').
3186The names are case insensitive for most targets, and usually written in
3187lower case.
3188
3189   This chapter discusses directives that are available regardless of
3190the target machine configuration for the GNU assembler.  Some machine
3191configurations provide additional directives.  *Note Machine
3192Dependencies::.
3193
3194* Menu:
3195
3196* Abort::                       `.abort'
3197
3198* ABORT (COFF)::                `.ABORT'
3199
3200* Align::                       `.align [ABS-EXPR[, ABS-EXPR[, ABS-EXPR]]]'
3201* Altmacro::                    `.altmacro'
3202* Ascii::                       `.ascii "STRING"'...
3203* Asciz::                       `.asciz "STRING"'...
3204* Attach_to_group::             `.attach_to_group NAME'
3205* Balign::                      `.balign [ABS-EXPR[, ABS-EXPR]]'
3206* Bss::                         `.bss SUBSECTION'
3207* Bundle directives::           `.bundle_align_mode ABS-EXPR', etc
3208* Byte::                        `.byte EXPRESSIONS'
3209* CFI directives::		`.cfi_startproc [simple]', `.cfi_endproc', etc.
3210* Comm::                        `.comm SYMBOL , LENGTH '
3211* Data::                        `.data SUBSECTION'
3212* Dc::                          `.dc[SIZE] EXPRESSIONS'
3213* Dcb::                         `.dcb[SIZE] NUMBER [,FILL]'
3214* Ds::                          `.ds[SIZE] NUMBER [,FILL]'
3215
3216* Def::                         `.def NAME'
3217
3218* Desc::                        `.desc SYMBOL, ABS-EXPRESSION'
3219
3220* Dim::                         `.dim'
3221
3222* Double::                      `.double FLONUMS'
3223* Eject::                       `.eject'
3224* Else::                        `.else'
3225* Elseif::                      `.elseif'
3226* End::				`.end'
3227
3228* Endef::                       `.endef'
3229
3230* Endfunc::                     `.endfunc'
3231* Endif::                       `.endif'
3232* Equ::                         `.equ SYMBOL, EXPRESSION'
3233* Equiv::                       `.equiv SYMBOL, EXPRESSION'
3234* Eqv::                         `.eqv SYMBOL, EXPRESSION'
3235* Err::				`.err'
3236* Error::			`.error STRING'
3237* Exitm::			`.exitm'
3238* Extern::                      `.extern'
3239* Fail::			`.fail'
3240* File::                        `.file'
3241* Fill::                        `.fill REPEAT , SIZE , VALUE'
3242* Float::                       `.float FLONUMS'
3243* Func::                        `.func'
3244* Global::                      `.global SYMBOL', `.globl SYMBOL'
3245
3246* Gnu_attribute::               `.gnu_attribute TAG,VALUE'
3247* Hidden::                      `.hidden NAMES'
3248
3249* hword::                       `.hword EXPRESSIONS'
3250* Ident::                       `.ident'
3251* If::                          `.if ABSOLUTE EXPRESSION'
3252* Incbin::                      `.incbin "FILE"[,SKIP[,COUNT]]'
3253* Include::                     `.include "FILE"'
3254* Int::                         `.int EXPRESSIONS'
3255
3256* Internal::                    `.internal NAMES'
3257
3258* Irp::				`.irp SYMBOL,VALUES'...
3259* Irpc::			`.irpc SYMBOL,VALUES'...
3260* Lcomm::                       `.lcomm SYMBOL , LENGTH'
3261* Lflags::                      `.lflags'
3262
3263* Line::                        `.line LINE-NUMBER'
3264
3265* Linkonce::			`.linkonce [TYPE]'
3266* List::                        `.list'
3267* Ln::                          `.ln LINE-NUMBER'
3268* Loc::                         `.loc FILENO LINENO'
3269* Loc_mark_labels::             `.loc_mark_labels ENABLE'
3270
3271* Local::                       `.local NAMES'
3272
3273* Long::                        `.long EXPRESSIONS'
3274
3275* Macro::			`.macro NAME ARGS'...
3276* MRI::				`.mri VAL'
3277* Noaltmacro::                  `.noaltmacro'
3278* Nolist::                      `.nolist'
3279* Nop::                         `.nop'
3280* Nops::                        `.nops SIZE[, CONTROL]'
3281* Octa::                        `.octa BIGNUMS'
3282* Offset::			`.offset LOC'
3283* Org::                         `.org NEW-LC, FILL'
3284* P2align::                     `.p2align [ABS-EXPR[, ABS-EXPR[, ABS-EXPR]]]'
3285
3286* PopSection::                  `.popsection'
3287* Previous::                    `.previous'
3288
3289* Print::			`.print STRING'
3290
3291* Protected::                   `.protected NAMES'
3292
3293* Psize::                       `.psize LINES, COLUMNS'
3294* Purgem::			`.purgem NAME'
3295
3296* PushSection::                 `.pushsection NAME'
3297
3298* Quad::                        `.quad BIGNUMS'
3299* Reloc::			`.reloc OFFSET, RELOC_NAME[, EXPRESSION]'
3300* Rept::			`.rept COUNT'
3301* Sbttl::                       `.sbttl "SUBHEADING"'
3302
3303* Scl::                         `.scl CLASS'
3304
3305* Section::                     `.section NAME[, FLAGS]'
3306
3307* Set::                         `.set SYMBOL, EXPRESSION'
3308* Short::                       `.short EXPRESSIONS'
3309* Single::                      `.single FLONUMS'
3310
3311* Size::                        `.size [NAME , EXPRESSION]'
3312
3313* Skip::                        `.skip SIZE [,FILL]'
3314
3315* Sleb128::			`.sleb128 EXPRESSIONS'
3316
3317* Space::                       `.space SIZE [,FILL]'
3318
3319* Stab::                        `.stabd, .stabn, .stabs'
3320
3321* String::                      `.string "STR"', `.string8 "STR"', `.string16 "STR"', `.string32 "STR"', `.string64 "STR"'
3322* Struct::			`.struct EXPRESSION'
3323
3324* SubSection::                  `.subsection'
3325* Symver::                      `.symver NAME,NAME2@NODENAME[,VISIBILITY]'
3326
3327
3328* Tag::                         `.tag STRUCTNAME'
3329
3330* Text::                        `.text SUBSECTION'
3331* Title::                       `.title "HEADING"'
3332
3333* Tls_common::                  `.tls_common SYMBOL, LENGTH[, ALIGNMENT]'
3334
3335* Type::                        `.type <INT | NAME , TYPE DESCRIPTION>'
3336
3337* Uleb128::                     `.uleb128 EXPRESSIONS'
3338
3339* Val::                         `.val ADDR'
3340
3341
3342* Version::                     `.version "STRING"'
3343* VTableEntry::                 `.vtable_entry TABLE, OFFSET'
3344* VTableInherit::               `.vtable_inherit CHILD, PARENT'
3345
3346* Warning::			`.warning STRING'
3347* Weak::                        `.weak NAMES'
3348* Weakref::                     `.weakref ALIAS, SYMBOL'
3349* Word::                        `.word EXPRESSIONS'
3350
3351* Zero::                        `.zero SIZE'
3352* 2byte::                       `.2byte EXPRESSIONS'
3353* 4byte::                       `.4byte EXPRESSIONS'
3354* 8byte::                       `.8byte BIGNUMS'
3355* Deprecated::                  Deprecated Directives
3356
3357
3358File: as.info,  Node: Abort,  Next: ABORT (COFF),  Up: Pseudo Ops
3359
33607.1 `.abort'
3361============
3362
3363This directive stops the assembly immediately.  It is for compatibility
3364with other assemblers.  The original idea was that the assembly
3365language source would be piped into the assembler.  If the sender of
3366the source quit, it could use this directive tells `as' to quit also.
3367One day `.abort' will not be supported.
3368
3369
3370File: as.info,  Node: ABORT (COFF),  Next: Align,  Prev: Abort,  Up: Pseudo Ops
3371
33727.2 `.ABORT' (COFF)
3373===================
3374
3375When producing COFF output, `as' accepts this directive as a synonym
3376for `.abort'.
3377
3378
3379File: as.info,  Node: Align,  Next: Altmacro,  Prev: ABORT (COFF),  Up: Pseudo Ops
3380
33817.3 `.align [ABS-EXPR[, ABS-EXPR[, ABS-EXPR]]]'
3382===============================================
3383
3384Pad the location counter (in the current subsection) to a particular
3385storage boundary.  The first expression (which must be absolute) is the
3386alignment required, as described below.  If this expression is omitted
3387then a default value of 0 is used, effectively disabling alignment
3388requirements.
3389
3390   The second expression (also absolute) gives the fill value to be
3391stored in the padding bytes.  It (and the comma) may be omitted.  If it
3392is omitted, the padding bytes are normally zero.  However, on most
3393systems, if the section is marked as containing code and the fill value
3394is omitted, the space is filled with no-op instructions.
3395
3396   The third expression is also absolute, and is also optional.  If it
3397is present, it is the maximum number of bytes that should be skipped by
3398this alignment directive.  If doing the alignment would require
3399skipping more bytes than the specified maximum, then the alignment is
3400not done at all.  You can omit the fill value (the second argument)
3401entirely by simply using two commas after the required alignment; this
3402can be useful if you want the alignment to be filled with no-op
3403instructions when appropriate.
3404
3405   The way the required alignment is specified varies from system to
3406system.  For the arc, hppa, i386 using ELF, iq2000, m68k, or1k, s390,
3407sparc, tic4x and xtensa, the first expression is the alignment request
3408in bytes.  For example `.align 8' advances the location counter until
3409it is a multiple of 8.  If the location counter is already a multiple
3410of 8, no change is needed.  For the tic54x, the first expression is the
3411alignment request in words.
3412
3413   For other systems, including ppc, i386 using a.out format, arm and
3414strongarm, it is the number of low-order zero bits the location counter
3415must have after advancement.  For example `.align 3' advances the
3416location counter until it is a multiple of 8.  If the location counter
3417is already a multiple of 8, no change is needed.
3418
3419   This inconsistency is due to the different behaviors of the various
3420native assemblers for these systems which GAS must emulate.  GAS also
3421provides `.balign' and `.p2align' directives, described later, which
3422have a consistent behavior across all architectures (but are specific
3423to GAS).
3424
3425
3426File: as.info,  Node: Altmacro,  Next: Ascii,  Prev: Align,  Up: Pseudo Ops
3427
34287.4 `.altmacro'
3429===============
3430
3431Enable alternate macro mode, enabling:
3432
3433`LOCAL NAME [ , ... ]'
3434     One additional directive, `LOCAL', is available.  It is used to
3435     generate a string replacement for each of the NAME arguments, and
3436     replace any instances of NAME in each macro expansion.  The
3437     replacement string is unique in the assembly, and different for
3438     each separate macro expansion.  `LOCAL' allows you to write macros
3439     that define symbols, without fear of conflict between separate
3440     macro expansions.
3441
3442`String delimiters'
3443     You can write strings delimited in these other ways besides
3444     `"STRING"':
3445
3446    `'STRING''
3447          You can delimit strings with single-quote characters.
3448
3449    `<STRING>'
3450          You can delimit strings with matching angle brackets.
3451
3452`single-character string escape'
3453     To include any single character literally in a string (even if the
3454     character would otherwise have some special meaning), you can
3455     prefix the character with `!' (an exclamation mark).  For example,
3456     you can write `<4.3 !> 5.4!!>' to get the literal text `4.3 >
3457     5.4!'.
3458
3459`Expression results as strings'
3460     You can write `%EXPR' to evaluate the expression EXPR and use the
3461     result as a string.
3462
3463
3464File: as.info,  Node: Ascii,  Next: Asciz,  Prev: Altmacro,  Up: Pseudo Ops
3465
34667.5 `.ascii "STRING"'...
3467========================
3468
3469`.ascii' expects zero or more string literals (*note Strings::)
3470separated by commas.  It assembles each string (with no automatic
3471trailing zero byte) into consecutive addresses.
3472
3473
3474File: as.info,  Node: Asciz,  Next: Attach_to_group,  Prev: Ascii,  Up: Pseudo Ops
3475
34767.6 `.asciz "STRING"'...
3477========================
3478
3479`.asciz' is just like `.ascii', but each string is followed by a zero
3480byte.  The "z" in `.asciz' stands for "zero".  Note that multiple
3481string arguments not separated by commas will be concatenated together
3482and only one final zero byte will be stored.
3483
3484
3485File: as.info,  Node: Attach_to_group,  Next: Balign,  Prev: Asciz,  Up: Pseudo Ops
3486
34877.7 `.attach_to_group NAME'
3488===========================
3489
3490Attaches the current section to the named group.  This is like declaring
3491the section with the `G' attribute, but can be done after the section
3492has been created.  Note if the group section  does not exist at the
3493point that this directive is used then it will be created.
3494
3495
3496File: as.info,  Node: Balign,  Next: Bss,  Prev: Attach_to_group,  Up: Pseudo Ops
3497
34987.8 `.balign[wl] [ABS-EXPR[, ABS-EXPR[, ABS-EXPR]]]'
3499====================================================
3500
3501Pad the location counter (in the current subsection) to a particular
3502storage boundary.  The first expression (which must be absolute) is the
3503alignment request in bytes.  For example `.balign 8' advances the
3504location counter until it is a multiple of 8.  If the location counter
3505is already a multiple of 8, no change is needed.  If the expression is
3506omitted then a default value of 0 is used, effectively disabling
3507alignment requirements.
3508
3509   The second expression (also absolute) gives the fill value to be
3510stored in the padding bytes.  It (and the comma) may be omitted.  If it
3511is omitted, the padding bytes are normally zero.  However, on most
3512systems, if the section is marked as containing code and the fill value
3513is omitted, the space is filled with no-op instructions.
3514
3515   The third expression is also absolute, and is also optional.  If it
3516is present, it is the maximum number of bytes that should be skipped by
3517this alignment directive.  If doing the alignment would require
3518skipping more bytes than the specified maximum, then the alignment is
3519not done at all.  You can omit the fill value (the second argument)
3520entirely by simply using two commas after the required alignment; this
3521can be useful if you want the alignment to be filled with no-op
3522instructions when appropriate.
3523
3524   The `.balignw' and `.balignl' directives are variants of the
3525`.balign' directive.  The `.balignw' directive treats the fill pattern
3526as a two byte word value.  The `.balignl' directives treats the fill
3527pattern as a four byte longword value.  For example, `.balignw
35284,0x368d' will align to a multiple of 4.  If it skips two bytes, they
3529will be filled in with the value 0x368d (the exact placement of the
3530bytes depends upon the endianness of the processor).  If it skips 1 or
35313 bytes, the fill value is undefined.
3532
3533
3534File: as.info,  Node: Bss,  Next: Bundle directives,  Prev: Balign,  Up: Pseudo Ops
3535
35367.9 `.bss SUBSECTION'
3537=====================
3538
3539`.bss' tells `as' to assemble the following statements onto the end of
3540the bss section.  For ELF based targets an optional SUBSECTION
3541expression (which must evaluate to a positive integer) can be provided.
3542In this case the statements are appended to the end of the indicated
3543bss subsection.
3544
3545
3546File: as.info,  Node: Bundle directives,  Next: Byte,  Prev: Bss,  Up: Pseudo Ops
3547
35487.10 Bundle directives
3549======================
3550
35517.10.1 `.bundle_align_mode ABS-EXPR'
3552------------------------------------
3553
3554`.bundle_align_mode' enables or disables "aligned instruction bundle"
3555mode.  In this mode, sequences of adjacent instructions are grouped
3556into fixed-sized "bundles".  If the argument is zero, this mode is
3557disabled (which is the default state).  If the argument it not zero, it
3558gives the size of an instruction bundle as a power of two (as for the
3559`.p2align' directive, *note P2align::).
3560
3561   For some targets, it's an ABI requirement that no instruction may
3562span a certain aligned boundary.  A "bundle" is simply a sequence of
3563instructions that starts on an aligned boundary.  For example, if
3564ABS-EXPR is `5' then the bundle size is 32, so each aligned chunk of 32
3565bytes is a bundle.  When aligned instruction bundle mode is in effect,
3566no single instruction may span a boundary between bundles.  If an
3567instruction would start too close to the end of a bundle for the length
3568of that particular instruction to fit within the bundle, then the space
3569at the end of that bundle is filled with no-op instructions so the
3570instruction starts in the next bundle.  As a corollary, it's an error
3571if any single instruction's encoding is longer than the bundle size.
3572
35737.10.2 `.bundle_lock' and `.bundle_unlock'
3574------------------------------------------
3575
3576The `.bundle_lock' and directive `.bundle_unlock' directives allow
3577explicit control over instruction bundle padding.  These directives are
3578only valid when `.bundle_align_mode' has been used to enable aligned
3579instruction bundle mode.  It's an error if they appear when
3580`.bundle_align_mode' has not been used at all, or when the last
3581directive was `.bundle_align_mode 0'.
3582
3583   For some targets, it's an ABI requirement that certain instructions
3584may appear only as part of specified permissible sequences of multiple
3585instructions, all within the same bundle.  A pair of `.bundle_lock' and
3586`.bundle_unlock' directives define a "bundle-locked" instruction
3587sequence.  For purposes of aligned instruction bundle mode, a sequence
3588starting with `.bundle_lock' and ending with `.bundle_unlock' is
3589treated as a single instruction.  That is, the entire sequence must fit
3590into a single bundle and may not span a bundle boundary.  If necessary,
3591no-op instructions will be inserted before the first instruction of the
3592sequence so that the whole sequence starts on an aligned bundle
3593boundary.  It's an error if the sequence is longer than the bundle size.
3594
3595   For convenience when using `.bundle_lock' and `.bundle_unlock'
3596inside assembler macros (*note Macro::), bundle-locked sequences may be
3597nested.  That is, a second `.bundle_lock' directive before the next
3598`.bundle_unlock' directive has no effect except that it must be matched
3599by another closing `.bundle_unlock' so that there is the same number of
3600`.bundle_lock' and `.bundle_unlock' directives.
3601
3602
3603File: as.info,  Node: Byte,  Next: CFI directives,  Prev: Bundle directives,  Up: Pseudo Ops
3604
36057.11 `.byte EXPRESSIONS'
3606========================
3607
3608`.byte' expects zero or more expressions, separated by commas.  Each
3609expression is assembled into the next byte.
3610
3611
3612File: as.info,  Node: CFI directives,  Next: Comm,  Prev: Byte,  Up: Pseudo Ops
3613
36147.12 CFI directives
3615===================
3616
36177.12.1 `.cfi_sections SECTION_LIST'
3618-----------------------------------
3619
3620`.cfi_sections' may be used to specify whether CFI directives should
3621emit `.eh_frame' section and/or `.debug_frame' section.  If
3622SECTION_LIST is `.eh_frame', `.eh_frame' is emitted, if SECTION_LIST is
3623`.debug_frame', `.debug_frame' is emitted.  To emit both use
3624`.eh_frame, .debug_frame'.  The default if this directive is not used
3625is `.cfi_sections .eh_frame'.
3626
3627   On targets that support compact unwinding tables these can be
3628generated by specifying `.eh_frame_entry' instead of `.eh_frame'.
3629
3630   Some targets may support an additional name, such as `.c6xabi.exidx'
3631which is used by the  target.
3632
3633   The `.cfi_sections' directive can be repeated, with the same or
3634different arguments, provided that CFI generation has not yet started.
3635Once CFI generation has started however the section list is fixed and
3636any attempts to redefine it will result in an error.
3637
36387.12.2 `.cfi_startproc [simple]'
3639--------------------------------
3640
3641`.cfi_startproc' is used at the beginning of each function that should
3642have an entry in `.eh_frame'. It initializes some internal data
3643structures. Don't forget to close the function by `.cfi_endproc'.
3644
3645   Unless `.cfi_startproc' is used along with parameter `simple' it
3646also emits some architecture dependent initial CFI instructions.
3647
36487.12.3 `.cfi_endproc'
3649---------------------
3650
3651`.cfi_endproc' is used at the end of a function where it closes its
3652unwind entry previously opened by `.cfi_startproc', and emits it to
3653`.eh_frame'.
3654
36557.12.4 `.cfi_personality ENCODING [, EXP]'
3656------------------------------------------
3657
3658`.cfi_personality' defines personality routine and its encoding.
3659ENCODING must be a constant determining how the personality should be
3660encoded.  If it is 255 (`DW_EH_PE_omit'), second argument is not
3661present, otherwise second argument should be a constant or a symbol
3662name.  When using indirect encodings, the symbol provided should be the
3663location where personality can be loaded from, not the personality
3664routine itself.  The default after `.cfi_startproc' is
3665`.cfi_personality 0xff', no personality routine.
3666
36677.12.5 `.cfi_personality_id ID'
3668-------------------------------
3669
3670`cfi_personality_id' defines a personality routine by its index as
3671defined in a compact unwinding format.  Only valid when generating
3672compact EH frames (i.e.  with `.cfi_sections eh_frame_entry'.
3673
36747.12.6 `.cfi_fde_data [OPCODE1 [, ...]]'
3675----------------------------------------
3676
3677`cfi_fde_data' is used to describe the compact unwind opcodes to be
3678used for the current function.  These are emitted inline in the
3679`.eh_frame_entry' section if small enough and there is no LSDA, or in
3680the `.gnu.extab' section otherwise.  Only valid when generating compact
3681EH frames (i.e.  with `.cfi_sections eh_frame_entry'.
3682
36837.12.7 `.cfi_lsda ENCODING [, EXP]'
3684-----------------------------------
3685
3686`.cfi_lsda' defines LSDA and its encoding.  ENCODING must be a constant
3687determining how the LSDA should be encoded.  If it is 255
3688(`DW_EH_PE_omit'), the second argument is not present, otherwise the
3689second argument should be a constant or a symbol name.  The default
3690after `.cfi_startproc' is `.cfi_lsda 0xff', meaning that no LSDA is
3691present.
3692
36937.12.8 `.cfi_inline_lsda' [ALIGN]
3694---------------------------------
3695
3696`.cfi_inline_lsda' marks the start of a LSDA data section and switches
3697to the corresponding `.gnu.extab' section.  Must be preceded by a CFI
3698block containing a `.cfi_lsda' directive.  Only valid when generating
3699compact EH frames (i.e.  with `.cfi_sections eh_frame_entry'.
3700
3701   The table header and unwinding opcodes will be generated at this
3702point, so that they are immediately followed by the LSDA data.  The
3703symbol referenced by the `.cfi_lsda' directive should still be defined
3704in case a fallback FDE based encoding is used.  The LSDA data is
3705terminated by a section directive.
3706
3707   The optional ALIGN argument specifies the alignment required.  The
3708alignment is specified as a power of two, as with the `.p2align'
3709directive.
3710
37117.12.9 `.cfi_def_cfa REGISTER, OFFSET'
3712--------------------------------------
3713
3714`.cfi_def_cfa' defines a rule for computing CFA as: take address from
3715REGISTER and add OFFSET to it.
3716
37177.12.10 `.cfi_def_cfa_register REGISTER'
3718----------------------------------------
3719
3720`.cfi_def_cfa_register' modifies a rule for computing CFA. From now on
3721REGISTER will be used instead of the old one. Offset remains the same.
3722
37237.12.11 `.cfi_def_cfa_offset OFFSET'
3724------------------------------------
3725
3726`.cfi_def_cfa_offset' modifies a rule for computing CFA. Register
3727remains the same, but OFFSET is new. Note that it is the absolute
3728offset that will be added to a defined register to compute CFA address.
3729
37307.12.12 `.cfi_adjust_cfa_offset OFFSET'
3731---------------------------------------
3732
3733Same as `.cfi_def_cfa_offset' but OFFSET is a relative value that is
3734added/subtracted from the previous offset.
3735
37367.12.13 `.cfi_offset REGISTER, OFFSET'
3737--------------------------------------
3738
3739Previous value of REGISTER is saved at offset OFFSET from CFA.
3740
37417.12.14 `.cfi_val_offset REGISTER, OFFSET'
3742------------------------------------------
3743
3744Previous value of REGISTER is CFA + OFFSET.
3745
37467.12.15 `.cfi_rel_offset REGISTER, OFFSET'
3747------------------------------------------
3748
3749Previous value of REGISTER is saved at offset OFFSET from the current
3750CFA register.  This is transformed to `.cfi_offset' using the known
3751displacement of the CFA register from the CFA.  This is often easier to
3752use, because the number will match the code it's annotating.
3753
37547.12.16 `.cfi_register REGISTER1, REGISTER2'
3755--------------------------------------------
3756
3757Previous value of REGISTER1 is saved in register REGISTER2.
3758
37597.12.17 `.cfi_restore REGISTER'
3760-------------------------------
3761
3762`.cfi_restore' says that the rule for REGISTER is now the same as it
3763was at the beginning of the function, after all initial instruction
3764added by `.cfi_startproc' were executed.
3765
37667.12.18 `.cfi_undefined REGISTER'
3767---------------------------------
3768
3769From now on the previous value of REGISTER can't be restored anymore.
3770
37717.12.19 `.cfi_same_value REGISTER'
3772----------------------------------
3773
3774Current value of REGISTER is the same like in the previous frame, i.e.
3775no restoration needed.
3776
37777.12.20 `.cfi_remember_state' and `.cfi_restore_state'
3778------------------------------------------------------
3779
3780`.cfi_remember_state' pushes the set of rules for every register onto an
3781implicit stack, while `.cfi_restore_state' pops them off the stack and
3782places them in the current row.  This is useful for situations where
3783you have multiple `.cfi_*' directives that need to be undone due to the
3784control flow of the program.  For example, we could have something like
3785this (assuming the CFA is the value of `rbp'):
3786
3787             je label
3788             popq %rbx
3789             .cfi_restore %rbx
3790             popq %r12
3791             .cfi_restore %r12
3792             popq %rbp
3793             .cfi_restore %rbp
3794             .cfi_def_cfa %rsp, 8
3795             ret
3796     label:
3797             /* Do something else */
3798
3799   Here, we want the `.cfi' directives to affect only the rows
3800corresponding to the instructions before `label'.  This means we'd have
3801to add multiple `.cfi' directives after `label' to recreate the
3802original save locations of the registers, as well as setting the CFA
3803back to the value of `rbp'.  This would be clumsy, and result in a
3804larger binary size. Instead, we can write:
3805
3806             je label
3807             popq %rbx
3808             .cfi_remember_state
3809             .cfi_restore %rbx
3810             popq %r12
3811             .cfi_restore %r12
3812             popq %rbp
3813             .cfi_restore %rbp
3814             .cfi_def_cfa %rsp, 8
3815             ret
3816     label:
3817             .cfi_restore_state
3818             /* Do something else */
3819
3820   That way, the rules for the instructions after `label' will be the
3821same as before the first `.cfi_restore' without having to use multiple
3822`.cfi' directives.
3823
38247.12.21 `.cfi_return_column REGISTER'
3825-------------------------------------
3826
3827Change return column REGISTER, i.e. the return address is either
3828directly in REGISTER or can be accessed by rules for REGISTER.
3829
38307.12.22 `.cfi_signal_frame'
3831---------------------------
3832
3833Mark current function as signal trampoline.
3834
38357.12.23 `.cfi_window_save'
3836--------------------------
3837
3838SPARC register window has been saved.
3839
38407.12.24 `.cfi_escape' EXPRESSION[, ...]
3841---------------------------------------
3842
3843Allows the user to add arbitrary bytes to the unwind info.  One might
3844use this to add OS-specific CFI opcodes, or generic CFI opcodes that
3845GAS does not yet support.
3846
38477.12.25 `.cfi_val_encoded_addr REGISTER, ENCODING, LABEL'
3848---------------------------------------------------------
3849
3850The current value of REGISTER is LABEL.  The value of LABEL will be
3851encoded in the output file according to ENCODING; see the description
3852of `.cfi_personality' for details on this encoding.
3853
3854   The usefulness of equating a register to a fixed label is probably
3855limited to the return address register.  Here, it can be useful to mark
3856a code segment that has only one return address which is reached by a
3857direct branch and no copy of the return address exists in memory or
3858another register.
3859
3860
3861File: as.info,  Node: Comm,  Next: Data,  Prev: CFI directives,  Up: Pseudo Ops
3862
38637.13 `.comm SYMBOL , LENGTH '
3864=============================
3865
3866`.comm' declares a common symbol named SYMBOL.  When linking, a common
3867symbol in one object file may be merged with a defined or common symbol
3868of the same name in another object file.  If `ld' does not see a
3869definition for the symbol-just one or more common symbols-then it will
3870allocate LENGTH bytes of uninitialized memory.  LENGTH must be an
3871absolute expression.  If `ld' sees multiple common symbols with the
3872same name, and they do not all have the same size, it will allocate
3873space using the largest size.
3874
3875   When using ELF or (as a GNU extension) PE, the `.comm' directive
3876takes an optional third argument.  This is the desired alignment of the
3877symbol, specified for ELF as a byte boundary (for example, an alignment
3878of 16 means that the least significant 4 bits of the address should be
3879zero), and for PE as a power of two (for example, an alignment of 5
3880means aligned to a 32-byte boundary).  The alignment must be an
3881absolute expression, and it must be a power of two.  If `ld' allocates
3882uninitialized memory for the common symbol, it will use the alignment
3883when placing the symbol.  If no alignment is specified, `as' will set
3884the alignment to the largest power of two less than or equal to the
3885size of the symbol, up to a maximum of 16 on ELF, or the default
3886section alignment of 4 on PE(1).
3887
3888   The syntax for `.comm' differs slightly on the HPPA.  The syntax is
3889`SYMBOL .comm, LENGTH'; SYMBOL is optional.
3890
3891   ---------- Footnotes ----------
3892
3893   (1) This is not the same as the executable image file alignment
3894controlled by `ld''s `--section-alignment' option; image file sections
3895in PE are aligned to multiples of 4096, which is far too large an
3896alignment for ordinary variables.  It is rather the default alignment
3897for (non-debug) sections within object (`*.o') files, which are less
3898strictly aligned.
3899
3900
3901File: as.info,  Node: Data,  Next: Dc,  Prev: Comm,  Up: Pseudo Ops
3902
39037.14 `.data SUBSECTION'
3904=======================
3905
3906`.data' tells `as' to assemble the following statements onto the end of
3907the data subsection numbered SUBSECTION (which is an absolute
3908expression).  If SUBSECTION is omitted, it defaults to zero.
3909
3910
3911File: as.info,  Node: Dc,  Next: Dcb,  Prev: Data,  Up: Pseudo Ops
3912
39137.15 `.dc[SIZE] EXPRESSIONS'
3914============================
3915
3916The `.dc' directive expects zero or more EXPRESSIONS separated by
3917commas.  These expressions are evaluated and their values inserted into
3918the current section.  The size of the emitted value depends upon the
3919suffix to the `.dc' directive:
3920
3921``.a''
3922     Emits N-bit values, where N is the size of an address on the
3923     target system.
3924
3925``.b''
3926     Emits 8-bit values.
3927
3928``.d''
3929     Emits double precision floating-point values.
3930
3931``.l''
3932     Emits 32-bit values.
3933
3934``.s''
3935     Emits single precision floating-point values.
3936
3937``.w''
3938     Emits 16-bit values.  Note - this is true even on targets where
3939     the `.word' directive would emit 32-bit values.
3940
3941``.x''
3942     Emits long double precision floating-point values.
3943
3944   If no suffix is used then `.w' is assumed.
3945
3946   The byte ordering is target dependent, as is the size and format of
3947floating point values.
3948
3949
3950File: as.info,  Node: Dcb,  Next: Ds,  Prev: Dc,  Up: Pseudo Ops
3951
39527.16 `.dcb[SIZE] NUMBER [,FILL]'
3953================================
3954
3955This directive emits NUMBER copies of FILL, each of SIZE bytes.  Both
3956NUMBER and FILL are absolute expressions.  If the comma and FILL are
3957omitted, FILL is assumed to be zero.  The SIZE suffix, if present, must
3958be one of:
3959
3960``.b''
3961     Emits single byte values.
3962
3963``.d''
3964     Emits double-precision floating point values.
3965
3966``.l''
3967     Emits 4-byte values.
3968
3969``.s''
3970     Emits single-precision floating point values.
3971
3972``.w''
3973     Emits 2-byte values.
3974
3975``.x''
3976     Emits long double-precision floating point values.
3977
3978   If the SIZE suffix is omitted then `.w' is assumed.
3979
3980   The byte ordering is target dependent, as is the size and format of
3981floating point values.
3982
3983
3984File: as.info,  Node: Ds,  Next: Def,  Prev: Dcb,  Up: Pseudo Ops
3985
39867.17 `.ds[SIZE] NUMBER [,FILL]'
3987===============================
3988
3989This directive emits NUMBER copies of FILL, each of SIZE bytes.  Both
3990NUMBER and FILL are absolute expressions.  If the comma and FILL are
3991omitted, FILL is assumed to be zero.  The SIZE suffix, if present, must
3992be one of:
3993
3994``.b''
3995     Emits single byte values.
3996
3997``.d''
3998     Emits 8-byte values.
3999
4000``.l''
4001     Emits 4-byte values.
4002
4003``.p''
4004     Emits values with size matching packed-decimal floating-point ones.
4005
4006``.s''
4007     Emits 4-byte values.
4008
4009``.w''
4010     Emits 2-byte values.
4011
4012``.x''
4013     Emits values with size matching long double precision
4014     floating-point ones.
4015
4016   Note - unlike the `.dcb' directive the `.d', `.s' and `.x' suffixes
4017do not indicate that floating-point values are to be inserted.
4018
4019   If the SIZE suffix is omitted then `.w' is assumed.
4020
4021   The byte ordering is target dependent.
4022
4023
4024File: as.info,  Node: Def,  Next: Desc,  Prev: Ds,  Up: Pseudo Ops
4025
40267.18 `.def NAME'
4027================
4028
4029Begin defining debugging information for a symbol NAME; the definition
4030extends until the `.endef' directive is encountered.
4031
4032
4033File: as.info,  Node: Desc,  Next: Dim,  Prev: Def,  Up: Pseudo Ops
4034
40357.19 `.desc SYMBOL, ABS-EXPRESSION'
4036===================================
4037
4038This directive sets the descriptor of the symbol (*note Symbol
4039Attributes::) to the low 16 bits of an absolute expression.
4040
4041   The `.desc' directive is not available when `as' is configured for
4042COFF output; it is only for `a.out' or `b.out' object format.  For the
4043sake of compatibility, `as' accepts it, but produces no output, when
4044configured for COFF.
4045
4046
4047File: as.info,  Node: Dim,  Next: Double,  Prev: Desc,  Up: Pseudo Ops
4048
40497.20 `.dim'
4050===========
4051
4052This directive is generated by compilers to include auxiliary debugging
4053information in the symbol table.  It is only permitted inside
4054`.def'/`.endef' pairs.
4055
4056
4057File: as.info,  Node: Double,  Next: Eject,  Prev: Dim,  Up: Pseudo Ops
4058
40597.21 `.double FLONUMS'
4060======================
4061
4062`.double' expects zero or more flonums, separated by commas.  It
4063assembles floating point numbers.  The exact kind of floating point
4064numbers emitted depends on how `as' is configured.  *Note Machine
4065Dependencies::.
4066
4067
4068File: as.info,  Node: Eject,  Next: Else,  Prev: Double,  Up: Pseudo Ops
4069
40707.22 `.eject'
4071=============
4072
4073Force a page break at this point, when generating assembly listings.
4074
4075
4076File: as.info,  Node: Else,  Next: Elseif,  Prev: Eject,  Up: Pseudo Ops
4077
40787.23 `.else'
4079============
4080
4081`.else' is part of the `as' support for conditional assembly; see *Note
4082`.if': If.  It marks the beginning of a section of code to be assembled
4083if the condition for the preceding `.if' was false.
4084
4085
4086File: as.info,  Node: Elseif,  Next: End,  Prev: Else,  Up: Pseudo Ops
4087
40887.24 `.elseif'
4089==============
4090
4091`.elseif' is part of the `as' support for conditional assembly; see
4092*Note `.if': If.  It is shorthand for beginning a new `.if' block that
4093would otherwise fill the entire `.else' section.
4094
4095
4096File: as.info,  Node: End,  Next: Endef,  Prev: Elseif,  Up: Pseudo Ops
4097
40987.25 `.end'
4099===========
4100
4101`.end' marks the end of the assembly file.  `as' does not process
4102anything in the file past the `.end' directive.
4103
4104
4105File: as.info,  Node: Endef,  Next: Endfunc,  Prev: End,  Up: Pseudo Ops
4106
41077.26 `.endef'
4108=============
4109
4110This directive flags the end of a symbol definition begun with `.def'.
4111
4112
4113File: as.info,  Node: Endfunc,  Next: Endif,  Prev: Endef,  Up: Pseudo Ops
4114
41157.27 `.endfunc'
4116===============
4117
4118`.endfunc' marks the end of a function specified with `.func'.
4119
4120
4121File: as.info,  Node: Endif,  Next: Equ,  Prev: Endfunc,  Up: Pseudo Ops
4122
41237.28 `.endif'
4124=============
4125
4126`.endif' is part of the `as' support for conditional assembly; it marks
4127the end of a block of code that is only assembled conditionally.  *Note
4128`.if': If.
4129
4130
4131File: as.info,  Node: Equ,  Next: Equiv,  Prev: Endif,  Up: Pseudo Ops
4132
41337.29 `.equ SYMBOL, EXPRESSION'
4134==============================
4135
4136This directive sets the value of SYMBOL to EXPRESSION.  It is
4137synonymous with `.set'; see *Note `.set': Set.
4138
4139   The syntax for `equ' on the HPPA is `SYMBOL .equ EXPRESSION'.
4140
4141   The syntax for `equ' on the Z80 is `SYMBOL equ EXPRESSION'.  On the
4142Z80 it is an error if SYMBOL is already defined, but the symbol is not
4143protected from later redefinition.  Compare *Note Equiv::.
4144
4145
4146File: as.info,  Node: Equiv,  Next: Eqv,  Prev: Equ,  Up: Pseudo Ops
4147
41487.30 `.equiv SYMBOL, EXPRESSION'
4149================================
4150
4151The `.equiv' directive is like `.equ' and `.set', except that the
4152assembler will signal an error if SYMBOL is already defined.  Note a
4153symbol which has been referenced but not actually defined is considered
4154to be undefined.
4155
4156   Except for the contents of the error message, this is roughly
4157equivalent to
4158     .ifdef SYM
4159     .err
4160     .endif
4161     .equ SYM,VAL
4162   plus it protects the symbol from later redefinition.
4163
4164
4165File: as.info,  Node: Eqv,  Next: Err,  Prev: Equiv,  Up: Pseudo Ops
4166
41677.31 `.eqv SYMBOL, EXPRESSION'
4168==============================
4169
4170The `.eqv' directive is like `.equiv', but no attempt is made to
4171evaluate the expression or any part of it immediately.  Instead each
4172time the resulting symbol is used in an expression, a snapshot of its
4173current value is taken.
4174
4175
4176File: as.info,  Node: Err,  Next: Error,  Prev: Eqv,  Up: Pseudo Ops
4177
41787.32 `.err'
4179===========
4180
4181If `as' assembles a `.err' directive, it will print an error message
4182and, unless the `-Z' option was used, it will not generate an object
4183file.  This can be used to signal an error in conditionally compiled
4184code.
4185
4186
4187File: as.info,  Node: Error,  Next: Exitm,  Prev: Err,  Up: Pseudo Ops
4188
41897.33 `.error "STRING"'
4190======================
4191
4192Similarly to `.err', this directive emits an error, but you can specify
4193a string that will be emitted as the error message.  If you don't
4194specify the message, it defaults to `".error directive invoked in
4195source file"'.  *Note Error and Warning Messages: Errors.
4196
4197      .error "This code has not been assembled and tested."
4198
4199
4200File: as.info,  Node: Exitm,  Next: Extern,  Prev: Error,  Up: Pseudo Ops
4201
42027.34 `.exitm'
4203=============
4204
4205Exit early from the current macro definition.  *Note Macro::.
4206
4207
4208File: as.info,  Node: Extern,  Next: Fail,  Prev: Exitm,  Up: Pseudo Ops
4209
42107.35 `.extern'
4211==============
4212
4213`.extern' is accepted in the source program--for compatibility with
4214other assemblers--but it is ignored.  `as' treats all undefined symbols
4215as external.
4216
4217
4218File: as.info,  Node: Fail,  Next: File,  Prev: Extern,  Up: Pseudo Ops
4219
42207.36 `.fail EXPRESSION'
4221=======================
4222
4223Generates an error or a warning.  If the value of the EXPRESSION is 500
4224or more, `as' will print a warning message.  If the value is less than
4225500, `as' will print an error message.  The message will include the
4226value of EXPRESSION.  This can occasionally be useful inside complex
4227nested macros or conditional assembly.
4228
4229
4230File: as.info,  Node: File,  Next: Fill,  Prev: Fail,  Up: Pseudo Ops
4231
42327.37 `.file'
4233============
4234
4235There are two different versions of the `.file' directive.  Targets
4236that support DWARF2 line number information use the DWARF2 version of
4237`.file'.  Other targets use the default version.
4238
4239Default Version
4240---------------
4241
4242This version of the `.file' directive tells `as' that we are about to
4243start a new logical file.  The syntax is:
4244
4245     .file STRING
4246
4247   STRING is the new file name.  In general, the filename is recognized
4248whether or not it is surrounded by quotes `"'; but if you wish to
4249specify an empty file name, you must give the quotes-`""'.  This
4250statement may go away in future: it is only recognized to be compatible
4251with old `as' programs.
4252
4253DWARF2 Version
4254--------------
4255
4256When emitting DWARF2 line number information, `.file' assigns filenames
4257to the `.debug_line' file name table.  The syntax is:
4258
4259     .file FILENO FILENAME
4260
4261   The FILENO operand should be a unique positive integer to use as the
4262index of the entry in the table.  The FILENAME operand is a C string
4263literal enclosed in double quotes.  The FILENAME can include directory
4264elements.  If it does, then the directory will be added to the
4265directory table and the basename will be added to the file table.
4266
4267   The detail of filename indices is exposed to the user because the
4268filename table is shared with the `.debug_info' section of the DWARF2
4269debugging information, and thus the user must know the exact indices
4270that table entries will have.
4271
4272   If DWARF5 support has been enabled via the `-gdwarf-5' option then
4273an extended version of `.file' is also allowed:
4274
4275     .file FILENO [DIRNAME] FILENAME [md5 VALUE]
4276
4277   With this version a separate directory name is allowed, although if
4278this is used then FILENAME should not contain any directory component,
4279except for FILENO equal to 0: in this case, DIRNAME is expected to be
4280the current directory and FILENAME the currently processed file, and
4281the latter need not be located in the former. In addtion an MD5 hash
4282value of the contents of FILENAME can be provided. This will be stored
4283in the the file table as well, and can be used by tools reading the
4284debug information to verify that the contents of the source file match
4285the contents of the compiled file.
4286
4287
4288File: as.info,  Node: Fill,  Next: Float,  Prev: File,  Up: Pseudo Ops
4289
42907.38 `.fill REPEAT , SIZE , VALUE'
4291==================================
4292
4293REPEAT, SIZE and VALUE are absolute expressions.  This emits REPEAT
4294copies of SIZE bytes.  REPEAT may be zero or more.  SIZE may be zero or
4295more, but if it is more than 8, then it is deemed to have the value 8,
4296compatible with other people's assemblers.  The contents of each REPEAT
4297bytes is taken from an 8-byte number.  The highest order 4 bytes are
4298zero.  The lowest order 4 bytes are VALUE rendered in the byte-order of
4299an integer on the computer `as' is assembling for.  Each SIZE bytes in
4300a repetition is taken from the lowest order SIZE bytes of this number.
4301Again, this bizarre behavior is compatible with other people's
4302assemblers.
4303
4304   SIZE and VALUE are optional.  If the second comma and VALUE are
4305absent, VALUE is assumed zero.  If the first comma and following tokens
4306are absent, SIZE is assumed to be 1.
4307
4308
4309File: as.info,  Node: Float,  Next: Func,  Prev: Fill,  Up: Pseudo Ops
4310
43117.39 `.float FLONUMS'
4312=====================
4313
4314This directive assembles zero or more flonums, separated by commas.  It
4315has the same effect as `.single'.  The exact kind of floating point
4316numbers emitted depends on how `as' is configured.  *Note Machine
4317Dependencies::.
4318
4319
4320File: as.info,  Node: Func,  Next: Global,  Prev: Float,  Up: Pseudo Ops
4321
43227.40 `.func NAME[,LABEL]'
4323=========================
4324
4325`.func' emits debugging information to denote function NAME, and is
4326ignored unless the file is assembled with debugging enabled.  Only
4327`--gstabs[+]' is currently supported.  LABEL is the entry point of the
4328function and if omitted NAME prepended with the `leading char' is used.
4329`leading char' is usually `_' or nothing, depending on the target.  All
4330functions are currently defined to have `void' return type.  The
4331function must be terminated with `.endfunc'.
4332
4333
4334File: as.info,  Node: Global,  Next: Gnu_attribute,  Prev: Func,  Up: Pseudo Ops
4335
43367.41 `.global SYMBOL', `.globl SYMBOL'
4337======================================
4338
4339`.global' makes the symbol visible to `ld'.  If you define SYMBOL in
4340your partial program, its value is made available to other partial
4341programs that are linked with it.  Otherwise, SYMBOL takes its
4342attributes from a symbol of the same name from another file linked into
4343the same program.
4344
4345   Both spellings (`.globl' and `.global') are accepted, for
4346compatibility with other assemblers.
4347
4348   On the HPPA, `.global' is not always enough to make it accessible to
4349other partial programs.  You may need the HPPA-only `.EXPORT' directive
4350as well.  *Note HPPA Assembler Directives: HPPA Directives.
4351
4352
4353File: as.info,  Node: Gnu_attribute,  Next: Hidden,  Prev: Global,  Up: Pseudo Ops
4354
43557.42 `.gnu_attribute TAG,VALUE'
4356===============================
4357
4358Record a GNU object attribute for this file.  *Note Object Attributes::.
4359
4360
4361File: as.info,  Node: Hidden,  Next: hword,  Prev: Gnu_attribute,  Up: Pseudo Ops
4362
43637.43 `.hidden NAMES'
4364====================
4365
4366This is one of the ELF visibility directives.  The other two are
4367`.internal' (*note `.internal': Internal.) and `.protected' (*note
4368`.protected': Protected.).
4369
4370   This directive overrides the named symbols default visibility (which
4371is set by their binding: local, global or weak).  The directive sets
4372the visibility to `hidden' which means that the symbols are not visible
4373to other components.  Such symbols are always considered to be
4374`protected' as well.
4375
4376
4377File: as.info,  Node: hword,  Next: Ident,  Prev: Hidden,  Up: Pseudo Ops
4378
43797.44 `.hword EXPRESSIONS'
4380=========================
4381
4382This expects zero or more EXPRESSIONS, and emits a 16 bit number for
4383each.
4384
4385   This directive is a synonym for `.short'; depending on the target
4386architecture, it may also be a synonym for `.word'.
4387
4388
4389File: as.info,  Node: Ident,  Next: If,  Prev: hword,  Up: Pseudo Ops
4390
43917.45 `.ident'
4392=============
4393
4394This directive is used by some assemblers to place tags in object
4395files.  The behavior of this directive varies depending on the target.
4396When using the a.out object file format, `as' simply accepts the
4397directive for source-file compatibility with existing assemblers, but
4398does not emit anything for it.  When using COFF, comments are emitted
4399to the `.comment' or `.rdata' section, depending on the target.  When
4400using ELF, comments are emitted to the `.comment' section.
4401
4402
4403File: as.info,  Node: If,  Next: Incbin,  Prev: Ident,  Up: Pseudo Ops
4404
44057.46 `.if ABSOLUTE EXPRESSION'
4406==============================
4407
4408`.if' marks the beginning of a section of code which is only considered
4409part of the source program being assembled if the argument (which must
4410be an ABSOLUTE EXPRESSION) is non-zero.  The end of the conditional
4411section of code must be marked by `.endif' (*note `.endif': Endif.);
4412optionally, you may include code for the alternative condition, flagged
4413by `.else' (*note `.else': Else.).  If you have several conditions to
4414check, `.elseif' may be used to avoid nesting blocks if/else within
4415each subsequent `.else' block.
4416
4417   The following variants of `.if' are also supported:
4418`.ifdef SYMBOL'
4419     Assembles the following section of code if the specified SYMBOL
4420     has been defined.  Note a symbol which has been referenced but not
4421     yet defined is considered to be undefined.
4422
4423`.ifb TEXT'
4424     Assembles the following section of code if the operand is blank
4425     (empty).
4426
4427`.ifc STRING1,STRING2'
4428     Assembles the following section of code if the two strings are the
4429     same.  The strings may be optionally quoted with single quotes.
4430     If they are not quoted, the first string stops at the first comma,
4431     and the second string stops at the end of the line.  Strings which
4432     contain whitespace should be quoted.  The string comparison is
4433     case sensitive.
4434
4435`.ifeq ABSOLUTE EXPRESSION'
4436     Assembles the following section of code if the argument is zero.
4437
4438`.ifeqs STRING1,STRING2'
4439     Another form of `.ifc'.  The strings must be quoted using double
4440     quotes.
4441
4442`.ifge ABSOLUTE EXPRESSION'
4443     Assembles the following section of code if the argument is greater
4444     than or equal to zero.
4445
4446`.ifgt ABSOLUTE EXPRESSION'
4447     Assembles the following section of code if the argument is greater
4448     than zero.
4449
4450`.ifle ABSOLUTE EXPRESSION'
4451     Assembles the following section of code if the argument is less
4452     than or equal to zero.
4453
4454`.iflt ABSOLUTE EXPRESSION'
4455     Assembles the following section of code if the argument is less
4456     than zero.
4457
4458`.ifnb TEXT'
4459     Like `.ifb', but the sense of the test is reversed: this assembles
4460     the following section of code if the operand is non-blank
4461     (non-empty).
4462
4463`.ifnc STRING1,STRING2.'
4464     Like `.ifc', but the sense of the test is reversed: this assembles
4465     the following section of code if the two strings are not the same.
4466
4467`.ifndef SYMBOL'
4468`.ifnotdef SYMBOL'
4469     Assembles the following section of code if the specified SYMBOL
4470     has not been defined.  Both spelling variants are equivalent.
4471     Note a symbol which has been referenced but not yet defined is
4472     considered to be undefined.
4473
4474`.ifne ABSOLUTE EXPRESSION'
4475     Assembles the following section of code if the argument is not
4476     equal to zero (in other words, this is equivalent to `.if').
4477
4478`.ifnes STRING1,STRING2'
4479     Like `.ifeqs', but the sense of the test is reversed: this
4480     assembles the following section of code if the two strings are not
4481     the same.
4482
4483
4484File: as.info,  Node: Incbin,  Next: Include,  Prev: If,  Up: Pseudo Ops
4485
44867.47 `.incbin "FILE"[,SKIP[,COUNT]]'
4487====================================
4488
4489The `incbin' directive includes FILE verbatim at the current location.
4490You can control the search paths used with the `-I' command-line option
4491(*note Command-Line Options: Invoking.).  Quotation marks are required
4492around FILE.
4493
4494   The SKIP argument skips a number of bytes from the start of the
4495FILE.  The COUNT argument indicates the maximum number of bytes to
4496read.  Note that the data is not aligned in any way, so it is the user's
4497responsibility to make sure that proper alignment is provided both
4498before and after the `incbin' directive.
4499
4500
4501File: as.info,  Node: Include,  Next: Int,  Prev: Incbin,  Up: Pseudo Ops
4502
45037.48 `.include "FILE"'
4504======================
4505
4506This directive provides a way to include supporting files at specified
4507points in your source program.  The code from FILE is assembled as if
4508it followed the point of the `.include'; when the end of the included
4509file is reached, assembly of the original file continues.  You can
4510control the search paths used with the `-I' command-line option (*note
4511Command-Line Options: Invoking.).  Quotation marks are required around
4512FILE.
4513
4514
4515File: as.info,  Node: Int,  Next: Internal,  Prev: Include,  Up: Pseudo Ops
4516
45177.49 `.int EXPRESSIONS'
4518=======================
4519
4520Expect zero or more EXPRESSIONS, of any section, separated by commas.
4521For each expression, emit a number that, at run time, is the value of
4522that expression.  The byte order and bit size of the number depends on
4523what kind of target the assembly is for.
4524
4525
4526File: as.info,  Node: Internal,  Next: Irp,  Prev: Int,  Up: Pseudo Ops
4527
45287.50 `.internal NAMES'
4529======================
4530
4531This is one of the ELF visibility directives.  The other two are
4532`.hidden' (*note `.hidden': Hidden.) and `.protected' (*note
4533`.protected': Protected.).
4534
4535   This directive overrides the named symbols default visibility (which
4536is set by their binding: local, global or weak).  The directive sets
4537the visibility to `internal' which means that the symbols are
4538considered to be `hidden' (i.e., not visible to other components), and
4539that some extra, processor specific processing must also be performed
4540upon the  symbols as well.
4541
4542
4543File: as.info,  Node: Irp,  Next: Irpc,  Prev: Internal,  Up: Pseudo Ops
4544
45457.51 `.irp SYMBOL,VALUES'...
4546============================
4547
4548Evaluate a sequence of statements assigning different values to SYMBOL.
4549The sequence of statements starts at the `.irp' directive, and is
4550terminated by an `.endr' directive.  For each VALUE, SYMBOL is set to
4551VALUE, and the sequence of statements is assembled.  If no VALUE is
4552listed, the sequence of statements is assembled once, with SYMBOL set
4553to the null string.  To refer to SYMBOL within the sequence of
4554statements, use \SYMBOL.
4555
4556   For example, assembling
4557
4558             .irp    param,1,2,3
4559             move    d\param,sp@-
4560             .endr
4561
4562   is equivalent to assembling
4563
4564             move    d1,sp@-
4565             move    d2,sp@-
4566             move    d3,sp@-
4567
4568   For some caveats with the spelling of SYMBOL, see also *Note Macro::.
4569
4570
4571File: as.info,  Node: Irpc,  Next: Lcomm,  Prev: Irp,  Up: Pseudo Ops
4572
45737.52 `.irpc SYMBOL,VALUES'...
4574=============================
4575
4576Evaluate a sequence of statements assigning different values to SYMBOL.
4577The sequence of statements starts at the `.irpc' directive, and is
4578terminated by an `.endr' directive.  For each character in VALUE,
4579SYMBOL is set to the character, and the sequence of statements is
4580assembled.  If no VALUE is listed, the sequence of statements is
4581assembled once, with SYMBOL set to the null string.  To refer to SYMBOL
4582within the sequence of statements, use \SYMBOL.
4583
4584   For example, assembling
4585
4586             .irpc    param,123
4587             move    d\param,sp@-
4588             .endr
4589
4590   is equivalent to assembling
4591
4592             move    d1,sp@-
4593             move    d2,sp@-
4594             move    d3,sp@-
4595
4596   For some caveats with the spelling of SYMBOL, see also the discussion
4597at *Note Macro::.
4598
4599
4600File: as.info,  Node: Lcomm,  Next: Lflags,  Prev: Irpc,  Up: Pseudo Ops
4601
46027.53 `.lcomm SYMBOL , LENGTH'
4603=============================
4604
4605Reserve LENGTH (an absolute expression) bytes for a local common
4606denoted by SYMBOL.  The section and value of SYMBOL are those of the
4607new local common.  The addresses are allocated in the bss section, so
4608that at run-time the bytes start off zeroed.  SYMBOL is not declared
4609global (*note `.global': Global.), so is normally not visible to `ld'.
4610
4611   Some targets permit a third argument to be used with `.lcomm'.  This
4612argument specifies the desired alignment of the symbol in the bss
4613section.
4614
4615   The syntax for `.lcomm' differs slightly on the HPPA.  The syntax is
4616`SYMBOL .lcomm, LENGTH'; SYMBOL is optional.
4617
4618
4619File: as.info,  Node: Lflags,  Next: Line,  Prev: Lcomm,  Up: Pseudo Ops
4620
46217.54 `.lflags'
4622==============
4623
4624`as' accepts this directive, for compatibility with other assemblers,
4625but ignores it.
4626
4627
4628File: as.info,  Node: Line,  Next: Linkonce,  Prev: Lflags,  Up: Pseudo Ops
4629
46307.55 `.line LINE-NUMBER'
4631========================
4632
4633Change the logical line number.  LINE-NUMBER must be an absolute
4634expression.  The next line has that logical line number.  Therefore any
4635other statements on the current line (after a statement separator
4636character) are reported as on logical line number LINE-NUMBER - 1.  One
4637day `as' will no longer support this directive: it is recognized only
4638for compatibility with existing assembler programs.
4639
4640Even though this is a directive associated with the `a.out' or `b.out'
4641object-code formats, `as' still recognizes it when producing COFF
4642output, and treats `.line' as though it were the COFF `.ln' _if_ it is
4643found outside a `.def'/`.endef' pair.
4644
4645   Inside a `.def', `.line' is, instead, one of the directives used by
4646compilers to generate auxiliary symbol information for debugging.
4647
4648
4649File: as.info,  Node: Linkonce,  Next: List,  Prev: Line,  Up: Pseudo Ops
4650
46517.56 `.linkonce [TYPE]'
4652=======================
4653
4654Mark the current section so that the linker only includes a single copy
4655of it.  This may be used to include the same section in several
4656different object files, but ensure that the linker will only include it
4657once in the final output file.  The `.linkonce' pseudo-op must be used
4658for each instance of the section.  Duplicate sections are detected
4659based on the section name, so it should be unique.
4660
4661   This directive is only supported by a few object file formats; as of
4662this writing, the only object file format which supports it is the
4663Portable Executable format used on Windows NT.
4664
4665   The TYPE argument is optional.  If specified, it must be one of the
4666following strings.  For example:
4667     .linkonce same_size
4668   Not all types may be supported on all object file formats.
4669
4670`discard'
4671     Silently discard duplicate sections.  This is the default.
4672
4673`one_only'
4674     Warn if there are duplicate sections, but still keep only one copy.
4675
4676`same_size'
4677     Warn if any of the duplicates have different sizes.
4678
4679`same_contents'
4680     Warn if any of the duplicates do not have exactly the same
4681     contents.
4682
4683
4684File: as.info,  Node: List,  Next: Ln,  Prev: Linkonce,  Up: Pseudo Ops
4685
46867.57 `.list'
4687============
4688
4689Control (in conjunction with the `.nolist' directive) whether or not
4690assembly listings are generated.  These two directives maintain an
4691internal counter (which is zero initially).   `.list' increments the
4692counter, and `.nolist' decrements it.  Assembly listings are generated
4693whenever the counter is greater than zero.
4694
4695   By default, listings are disabled.  When you enable them (with the
4696`-a' command-line option; *note Command-Line Options: Invoking.), the
4697initial value of the listing counter is one.
4698
4699
4700File: as.info,  Node: Ln,  Next: Loc,  Prev: List,  Up: Pseudo Ops
4701
47027.58 `.ln LINE-NUMBER'
4703======================
4704
4705`.ln' is a synonym for `.line'.
4706
4707
4708File: as.info,  Node: Loc,  Next: Loc_mark_labels,  Prev: Ln,  Up: Pseudo Ops
4709
47107.59 `.loc FILENO LINENO [COLUMN] [OPTIONS]'
4711============================================
4712
4713When emitting DWARF2 line number information, the `.loc' directive will
4714add a row to the `.debug_line' line number matrix corresponding to the
4715immediately following assembly instruction.  The FILENO, LINENO, and
4716optional COLUMN arguments will be applied to the `.debug_line' state
4717machine before the row is added.  It is an error for the input assembly
4718file to generate a non-empty `.debug_line' and also use `loc'
4719directives.
4720
4721   The OPTIONS are a sequence of the following tokens in any order:
4722
4723`basic_block'
4724     This option will set the `basic_block' register in the
4725     `.debug_line' state machine to `true'.
4726
4727`prologue_end'
4728     This option will set the `prologue_end' register in the
4729     `.debug_line' state machine to `true'.
4730
4731`epilogue_begin'
4732     This option will set the `epilogue_begin' register in the
4733     `.debug_line' state machine to `true'.
4734
4735`is_stmt VALUE'
4736     This option will set the `is_stmt' register in the `.debug_line'
4737     state machine to `value', which must be either 0 or 1.
4738
4739`isa VALUE'
4740     This directive will set the `isa' register in the `.debug_line'
4741     state machine to VALUE, which must be an unsigned integer.
4742
4743`discriminator VALUE'
4744     This directive will set the `discriminator' register in the
4745     `.debug_line' state machine to VALUE, which must be an unsigned
4746     integer.
4747
4748`view VALUE'
4749     This option causes a row to be added to `.debug_line' in reference
4750     to the current address (which might not be the same as that of the
4751     following assembly instruction), and to associate VALUE with the
4752     `view' register in the `.debug_line' state machine.  If VALUE is a
4753     label, both the `view' register and the label are set to the
4754     number of prior `.loc' directives at the same program location.
4755     If VALUE is the literal `0', the `view' register is set to zero,
4756     and the assembler asserts that there aren't any prior `.loc'
4757     directives at the same program location.  If VALUE is the literal
4758     `-0', the assembler arrange for the `view' register to be reset in
4759     this row, even if there are prior `.loc' directives at the same
4760     program location.
4761
4762
4763
4764File: as.info,  Node: Loc_mark_labels,  Next: Local,  Prev: Loc,  Up: Pseudo Ops
4765
47667.60 `.loc_mark_labels ENABLE'
4767==============================
4768
4769When emitting DWARF2 line number information, the `.loc_mark_labels'
4770directive makes the assembler emit an entry to the `.debug_line' line
4771number matrix with the `basic_block' register in the state machine set
4772whenever a code label is seen.  The ENABLE argument should be either 1
4773or 0, to enable or disable this function respectively.
4774
4775
4776File: as.info,  Node: Local,  Next: Long,  Prev: Loc_mark_labels,  Up: Pseudo Ops
4777
47787.61 `.local NAMES'
4779===================
4780
4781This directive, which is available for ELF targets, marks each symbol in
4782the comma-separated list of `names' as a local symbol so that it will
4783not be externally visible.  If the symbols do not already exist, they
4784will be created.
4785
4786   For targets where the `.lcomm' directive (*note Lcomm::) does not
4787accept an alignment argument, which is the case for most ELF targets,
4788the `.local' directive can be used in combination with `.comm' (*note
4789Comm::) to define aligned local common data.
4790
4791
4792File: as.info,  Node: Long,  Next: Macro,  Prev: Local,  Up: Pseudo Ops
4793
47947.62 `.long EXPRESSIONS'
4795========================
4796
4797`.long' is the same as `.int'.  *Note `.int': Int.
4798
4799
4800File: as.info,  Node: Macro,  Next: MRI,  Prev: Long,  Up: Pseudo Ops
4801
48027.63 `.macro'
4803=============
4804
4805The commands `.macro' and `.endm' allow you to define macros that
4806generate assembly output.  For example, this definition specifies a
4807macro `sum' that puts a sequence of numbers into memory:
4808
4809             .macro  sum from=0, to=5
4810             .long   \from
4811             .if     \to-\from
4812             sum     "(\from+1)",\to
4813             .endif
4814             .endm
4815
4816With that definition, `SUM 0,5' is equivalent to this assembly input:
4817
4818             .long   0
4819             .long   1
4820             .long   2
4821             .long   3
4822             .long   4
4823             .long   5
4824
4825`.macro MACNAME'
4826`.macro MACNAME MACARGS ...'
4827     Begin the definition of a macro called MACNAME.  If your macro
4828     definition requires arguments, specify their names after the macro
4829     name, separated by commas or spaces.  You can qualify the macro
4830     argument to indicate whether all invocations must specify a
4831     non-blank value (through `:`req''), or whether it takes all of the
4832     remaining arguments (through `:`vararg'').  You can supply a
4833     default value for any macro argument by following the name with
4834     `=DEFLT'.  You cannot define two macros with the same MACNAME
4835     unless it has been subject to the `.purgem' directive (*note
4836     Purgem::) between the two definitions.  For example, these are all
4837     valid `.macro' statements:
4838
4839    `.macro comm'
4840          Begin the definition of a macro called `comm', which takes no
4841          arguments.
4842
4843    `.macro plus1 p, p1'
4844    `.macro plus1 p p1'
4845          Either statement begins the definition of a macro called
4846          `plus1', which takes two arguments; within the macro
4847          definition, write `\p' or `\p1' to evaluate the arguments.
4848
4849    `.macro reserve_str p1=0 p2'
4850          Begin the definition of a macro called `reserve_str', with two
4851          arguments.  The first argument has a default value, but not
4852          the second.  After the definition is complete, you can call
4853          the macro either as `reserve_str A,B' (with `\p1' evaluating
4854          to A and `\p2' evaluating to B), or as `reserve_str ,B' (with
4855          `\p1' evaluating as the default, in this case `0', and `\p2'
4856          evaluating to B).
4857
4858    `.macro m p1:req, p2=0, p3:vararg'
4859          Begin the definition of a macro called `m', with at least
4860          three arguments.  The first argument must always have a value
4861          specified, but not the second, which instead has a default
4862          value. The third formal will get assigned all remaining
4863          arguments specified at invocation time.
4864
4865          When you call a macro, you can specify the argument values
4866          either by position, or by keyword.  For example, `sum 9,17'
4867          is equivalent to `sum to=17, from=9'.
4868
4869
4870     Note that since each of the MACARGS can be an identifier exactly
4871     as any other one permitted by the target architecture, there may be
4872     occasional problems if the target hand-crafts special meanings to
4873     certain characters when they occur in a special position.  For
4874     example, if the colon (`:') is generally permitted to be part of a
4875     symbol name, but the architecture specific code special-cases it
4876     when occurring as the final character of a symbol (to denote a
4877     label), then the macro parameter replacement code will have no way
4878     of knowing that and consider the whole construct (including the
4879     colon) an identifier, and check only this identifier for being the
4880     subject to parameter substitution.  So for example this macro
4881     definition:
4882
4883          	.macro label l
4884          \l:
4885          	.endm
4886
4887     might not work as expected.  Invoking `label foo' might not create
4888     a label called `foo' but instead just insert the text `\l:' into
4889     the assembler source, probably generating an error about an
4890     unrecognised identifier.
4891
4892     Similarly problems might occur with the period character (`.')
4893     which is often allowed inside opcode names (and hence identifier
4894     names).  So for example constructing a macro to build an opcode
4895     from a base name and a length specifier like this:
4896
4897          	.macro opcode base length
4898                  \base.\length
4899          	.endm
4900
4901     and invoking it as `opcode store l' will not create a `store.l'
4902     instruction but instead generate some kind of error as the
4903     assembler tries to interpret the text `\base.\length'.
4904
4905     There are several possible ways around this problem:
4906
4907    `Insert white space'
4908          If it is possible to use white space characters then this is
4909          the simplest solution.  eg:
4910
4911               	.macro label l
4912               \l :
4913               	.endm
4914
4915    `Use `\()''
4916          The string `\()' can be used to separate the end of a macro
4917          argument from the following text.  eg:
4918
4919               	.macro opcode base length
4920                       \base\().\length
4921               	.endm
4922
4923    `Use the alternate macro syntax mode'
4924          In the alternative macro syntax mode the ampersand character
4925          (`&') can be used as a separator.  eg:
4926
4927               	.altmacro
4928               	.macro label l
4929               l&:
4930               	.endm
4931
4932     Note: this problem of correctly identifying string parameters to
4933     pseudo ops also applies to the identifiers used in `.irp' (*note
4934     Irp::) and `.irpc' (*note Irpc::) as well.
4935
4936     Another issue can occur with the actual arguments passed during
4937     macro invocation: Multiple arguments can be separated by blanks or
4938     commas.  To have arguments actually contain blanks or commas (or
4939     potentially other non-alpha- numeric characters), individual
4940     arguments will need to be enclosed in either parentheses `()',
4941     square brackets `[]', or double quote `"' characters.  The latter
4942     may be the only viable option in certain situations, as only
4943     double quotes are actually stripped while establishing arguments.
4944     It may be important to be aware of two escaping models used when
4945     processing such quoted argument strings: For one two adjacent
4946     double quotes represent a single double quote in the resulting
4947     argument, going along the lines of the stripping of the enclosing
4948     quotes.  But then double quotes can also be escaped by a backslash
4949     `\', but this backslash will not be retained in the resulting
4950     actual argument as then seen / used while expanding the macro.
4951
4952     As a consequence to the first of these escaping mechanisms two
4953     string literals intended to be representing separate macro
4954     arguments need to be separated by white space (or, better yet, by
4955     a comma).  To state it differently, such adjacent string literals
4956     - even if separated only by a blank - will not be concatenated
4957     when determining macro arguments, even if they're only separated
4958     by white space.  This is unlike certain other pseudo ops, e.g.
4959     `.ascii'.
4960
4961`.endm'
4962     Mark the end of a macro definition.
4963
4964`.exitm'
4965     Exit early from the current macro definition.
4966
4967`\@'
4968     `as' maintains a counter of how many macros it has executed in
4969     this pseudo-variable; you can copy that number to your output with
4970     `\@', but _only within a macro definition_.
4971
4972`LOCAL NAME [ , ... ]'
4973     _Warning: `LOCAL' is only available if you select "alternate macro
4974     syntax" with `--alternate' or `.altmacro'._ *Note `.altmacro':
4975     Altmacro.
4976
4977
4978File: as.info,  Node: MRI,  Next: Noaltmacro,  Prev: Macro,  Up: Pseudo Ops
4979
49807.64 `.mri VAL'
4981===============
4982
4983If VAL is non-zero, this tells `as' to enter MRI mode.  If VAL is zero,
4984this tells `as' to exit MRI mode.  This change affects code assembled
4985until the next `.mri' directive, or until the end of the file.  *Note
4986MRI mode: M.
4987
4988
4989File: as.info,  Node: Noaltmacro,  Next: Nolist,  Prev: MRI,  Up: Pseudo Ops
4990
49917.65 `.noaltmacro'
4992==================
4993
4994Disable alternate macro mode.  *Note Altmacro::.
4995
4996
4997File: as.info,  Node: Nolist,  Next: Nop,  Prev: Noaltmacro,  Up: Pseudo Ops
4998
49997.66 `.nolist'
5000==============
5001
5002Control (in conjunction with the `.list' directive) whether or not
5003assembly listings are generated.  These two directives maintain an
5004internal counter (which is zero initially).   `.list' increments the
5005counter, and `.nolist' decrements it.  Assembly listings are generated
5006whenever the counter is greater than zero.
5007
5008
5009File: as.info,  Node: Nop,  Next: Nops,  Prev: Nolist,  Up: Pseudo Ops
5010
50117.67 `.nop [SIZE]'
5012==================
5013
5014This directive emits no-op instructions.  It is provided on all
5015architectures, allowing the creation of architecture neutral tests
5016involving actual code.  The size of the generated instruction is target
5017specific, but if the optional SIZE argument is given and resolves to an
5018absolute positive value at that point in assembly (no forward
5019expressions allowed) then the fewest no-op instructions are emitted
5020that equal or exceed a total SIZE in bytes.  `.nop' does affect the
5021generation of DWARF debug line information.  Some targets do not
5022support using `.nop' with SIZE.
5023
5024
5025File: as.info,  Node: Nops,  Next: Octa,  Prev: Nop,  Up: Pseudo Ops
5026
50277.68 `.nops SIZE[, CONTROL]'
5028============================
5029
5030This directive emits no-op instructions.  It is specific to the Intel
503180386 and AMD x86-64 targets.  It takes a SIZE argument and generates
5032SIZE bytes of no-op instructions.  SIZE must be absolute and positive.
5033These bytes do not affect the generation of DWARF debug line
5034information.
5035
5036   The optional CONTROL argument specifies a size limit for a single
5037no-op instruction.  If not provided then a value of 0 is assumed.  The
5038valid values of CONTROL are between 0 and 4 in 16-bit mode, between 0
5039and 7 when tuning for older processors in 32-bit mode, between 0 and 11
5040in 64-bit mode or when tuning for newer processors in 32-bit mode.
5041When 0 is used, the no-op instruction size limit is set to the maximum
5042supported size.
5043
5044
5045File: as.info,  Node: Octa,  Next: Offset,  Prev: Nops,  Up: Pseudo Ops
5046
50477.69 `.octa BIGNUMS'
5048====================
5049
5050This directive expects zero or more bignums, separated by commas.  For
5051each bignum, it emits a 16-byte integer.
5052
5053   The term "octa" comes from contexts in which a "word" is two bytes;
5054hence _octa_-word for 16 bytes.
5055
5056
5057File: as.info,  Node: Offset,  Next: Org,  Prev: Octa,  Up: Pseudo Ops
5058
50597.70 `.offset LOC'
5060==================
5061
5062Set the location counter to LOC in the absolute section.  LOC must be
5063an absolute expression.  This directive may be useful for defining
5064symbols with absolute values.  Do not confuse it with the `.org'
5065directive.
5066
5067
5068File: as.info,  Node: Org,  Next: P2align,  Prev: Offset,  Up: Pseudo Ops
5069
50707.71 `.org NEW-LC , FILL'
5071=========================
5072
5073Advance the location counter of the current section to NEW-LC.  NEW-LC
5074is either an absolute expression or an expression with the same section
5075as the current subsection.  That is, you can't use `.org' to cross
5076sections: if NEW-LC has the wrong section, the `.org' directive is
5077ignored.  To be compatible with former assemblers, if the section of
5078NEW-LC is absolute, `as' issues a warning, then pretends the section of
5079NEW-LC is the same as the current subsection.
5080
5081   `.org' may only increase the location counter, or leave it
5082unchanged; you cannot use `.org' to move the location counter backwards.
5083
5084   Because `as' tries to assemble programs in one pass, NEW-LC may not
5085be undefined.  If you really detest this restriction we eagerly await a
5086chance to share your improved assembler.
5087
5088   Beware that the origin is relative to the start of the section, not
5089to the start of the subsection.  This is compatible with other people's
5090assemblers.
5091
5092   When the location counter (of the current subsection) is advanced,
5093the intervening bytes are filled with FILL which should be an absolute
5094expression.  If the comma and FILL are omitted, FILL defaults to zero.
5095
5096
5097File: as.info,  Node: P2align,  Next: PopSection,  Prev: Org,  Up: Pseudo Ops
5098
50997.72 `.p2align[wl] [ABS-EXPR[, ABS-EXPR[, ABS-EXPR]]]'
5100======================================================
5101
5102Pad the location counter (in the current subsection) to a particular
5103storage boundary.  The first expression (which must be absolute) is the
5104number of low-order zero bits the location counter must have after
5105advancement.  For example `.p2align 3' advances the location counter
5106until it is a multiple of 8.  If the location counter is already a
5107multiple of 8, no change is needed.  If the expression is omitted then a
5108default value of 0 is used, effectively disabling alignment
5109requirements.
5110
5111   The second expression (also absolute) gives the fill value to be
5112stored in the padding bytes.  It (and the comma) may be omitted.  If it
5113is omitted, the padding bytes are normally zero.  However, on most
5114systems, if the section is marked as containing code and the fill value
5115is omitted, the space is filled with no-op instructions.
5116
5117   The third expression is also absolute, and is also optional.  If it
5118is present, it is the maximum number of bytes that should be skipped by
5119this alignment directive.  If doing the alignment would require
5120skipping more bytes than the specified maximum, then the alignment is
5121not done at all.  You can omit the fill value (the second argument)
5122entirely by simply using two commas after the required alignment; this
5123can be useful if you want the alignment to be filled with no-op
5124instructions when appropriate.
5125
5126   The `.p2alignw' and `.p2alignl' directives are variants of the
5127`.p2align' directive.  The `.p2alignw' directive treats the fill
5128pattern as a two byte word value.  The `.p2alignl' directives treats the
5129fill pattern as a four byte longword value.  For example, `.p2alignw
51302,0x368d' will align to a multiple of 4.  If it skips two bytes, they
5131will be filled in with the value 0x368d (the exact placement of the
5132bytes depends upon the endianness of the processor).  If it skips 1 or
51333 bytes, the fill value is undefined.
5134
5135
5136File: as.info,  Node: PopSection,  Next: Previous,  Prev: P2align,  Up: Pseudo Ops
5137
51387.73 `.popsection'
5139==================
5140
5141This is one of the ELF section stack manipulation directives.  The
5142others are `.section' (*note Section::), `.subsection' (*note
5143SubSection::), `.pushsection' (*note PushSection::), and `.previous'
5144(*note Previous::).
5145
5146   This directive replaces the current section (and subsection) with
5147the top section (and subsection) on the section stack.  This section is
5148popped off the stack.
5149
5150
5151File: as.info,  Node: Previous,  Next: Print,  Prev: PopSection,  Up: Pseudo Ops
5152
51537.74 `.previous'
5154================
5155
5156This is one of the ELF section stack manipulation directives.  The
5157others are `.section' (*note Section::), `.subsection' (*note
5158SubSection::), `.pushsection' (*note PushSection::), and `.popsection'
5159(*note PopSection::).
5160
5161   This directive swaps the current section (and subsection) with most
5162recently referenced section/subsection pair prior to this one.  Multiple
5163`.previous' directives in a row will flip between two sections (and
5164their subsections).  For example:
5165
5166     .section A
5167      .subsection 1
5168       .word 0x1234
5169      .subsection 2
5170       .word 0x5678
5171     .previous
5172      .word 0x9abc
5173
5174   Will place 0x1234 and 0x9abc into subsection 1 and 0x5678 into
5175subsection 2 of section A.  Whilst:
5176
5177     .section A
5178     .subsection 1
5179       # Now in section A subsection 1
5180       .word 0x1234
5181     .section B
5182     .subsection 0
5183       # Now in section B subsection 0
5184       .word 0x5678
5185     .subsection 1
5186       # Now in section B subsection 1
5187       .word 0x9abc
5188     .previous
5189       # Now in section B subsection 0
5190       .word 0xdef0
5191
5192   Will place 0x1234 into section A, 0x5678 and 0xdef0 into subsection
51930 of section B and 0x9abc into subsection 1 of section B.
5194
5195   In terms of the section stack, this directive swaps the current
5196section with the top section on the section stack.
5197
5198
5199File: as.info,  Node: Print,  Next: Protected,  Prev: Previous,  Up: Pseudo Ops
5200
52017.75 `.print STRING'
5202====================
5203
5204`as' will print STRING on the standard output during assembly.  You
5205must put STRING in double quotes.
5206
5207
5208File: as.info,  Node: Protected,  Next: Psize,  Prev: Print,  Up: Pseudo Ops
5209
52107.76 `.protected NAMES'
5211=======================
5212
5213This is one of the ELF visibility directives.  The other two are
5214`.hidden' (*note Hidden::) and `.internal' (*note Internal::).
5215
5216   This directive overrides the named symbols default visibility (which
5217is set by their binding: local, global or weak).  The directive sets
5218the visibility to `protected' which means that any references to the
5219symbols from within the components that defines them must be resolved
5220to the definition in that component, even if a definition in another
5221component would normally preempt this.
5222
5223
5224File: as.info,  Node: Psize,  Next: Purgem,  Prev: Protected,  Up: Pseudo Ops
5225
52267.77 `.psize LINES , COLUMNS'
5227=============================
5228
5229Use this directive to declare the number of lines--and, optionally, the
5230number of columns--to use for each page, when generating listings.
5231
5232   If you do not use `.psize', listings use a default line-count of 60.
5233You may omit the comma and COLUMNS specification; the default width is
5234200 columns.
5235
5236   `as' generates formfeeds whenever the specified number of lines is
5237exceeded (or whenever you explicitly request one, using `.eject').
5238
5239   If you specify LINES as `0', no formfeeds are generated save those
5240explicitly specified with `.eject'.
5241
5242
5243File: as.info,  Node: Purgem,  Next: PushSection,  Prev: Psize,  Up: Pseudo Ops
5244
52457.78 `.purgem NAME'
5246===================
5247
5248Undefine the macro NAME, so that later uses of the string will not be
5249expanded.  *Note Macro::.
5250
5251
5252File: as.info,  Node: PushSection,  Next: Quad,  Prev: Purgem,  Up: Pseudo Ops
5253
52547.79 `.pushsection NAME [, SUBSECTION] [, "FLAGS"[, @TYPE[,ARGUMENTS]]]'
5255========================================================================
5256
5257This is one of the ELF section stack manipulation directives.  The
5258others are `.section' (*note Section::), `.subsection' (*note
5259SubSection::), `.popsection' (*note PopSection::), and `.previous'
5260(*note Previous::).
5261
5262   This directive pushes the current section (and subsection) onto the
5263top of the section stack, and then replaces the current section and
5264subsection with `name' and `subsection'. The optional `flags', `type'
5265and `arguments' are treated the same as in the `.section' (*note
5266Section::) directive.
5267
5268
5269File: as.info,  Node: Quad,  Next: Reloc,  Prev: PushSection,  Up: Pseudo Ops
5270
52717.80 `.quad BIGNUMS'
5272====================
5273
5274`.quad' expects zero or more bignums, separated by commas.  For each
5275bignum, it emits an 8-byte integer.  If the bignum won't fit in 8
5276bytes, it prints a warning message; and just takes the lowest order 8
5277bytes of the bignum.
5278
5279   The term "quad" comes from contexts in which a "word" is two bytes;
5280hence _quad_-word for 8 bytes.
5281
5282
5283File: as.info,  Node: Reloc,  Next: Rept,  Prev: Quad,  Up: Pseudo Ops
5284
52857.81 `.reloc OFFSET, RELOC_NAME[, EXPRESSION]'
5286==============================================
5287
5288Generate a relocation at OFFSET of type RELOC_NAME with value
5289EXPRESSION.  If OFFSET is a number, the relocation is generated in the
5290current section.  If OFFSET is an expression that resolves to a symbol
5291plus offset, the relocation is generated in the given symbol's section.
5292EXPRESSION, if present, must resolve to a symbol plus addend or to an
5293absolute value, but note that not all targets support an addend.  e.g.
5294ELF REL targets such as i386 store an addend in the section contents
5295rather than in the relocation.  This low level interface does not
5296support addends stored in the section.
5297
5298
5299File: as.info,  Node: Rept,  Next: Sbttl,  Prev: Reloc,  Up: Pseudo Ops
5300
53017.82 `.rept COUNT'
5302==================
5303
5304Repeat the sequence of lines between the `.rept' directive and the next
5305`.endr' directive COUNT times.
5306
5307   For example, assembling
5308
5309             .rept   3
5310             .long   0
5311             .endr
5312
5313   is equivalent to assembling
5314
5315             .long   0
5316             .long   0
5317             .long   0
5318
5319   A count of zero is allowed, but nothing is generated.  Negative
5320counts are not allowed and if encountered will be treated as if they
5321were zero.
5322
5323
5324File: as.info,  Node: Sbttl,  Next: Scl,  Prev: Rept,  Up: Pseudo Ops
5325
53267.83 `.sbttl "SUBHEADING"'
5327==========================
5328
5329Use SUBHEADING as the title (third line, immediately after the title
5330line) when generating assembly listings.
5331
5332   This directive affects subsequent pages, as well as the current page
5333if it appears within ten lines of the top of a page.
5334
5335
5336File: as.info,  Node: Scl,  Next: Section,  Prev: Sbttl,  Up: Pseudo Ops
5337
53387.84 `.scl CLASS'
5339=================
5340
5341Set the storage-class value for a symbol.  This directive may only be
5342used inside a `.def'/`.endef' pair.  Storage class may flag whether a
5343symbol is static or external, or it may record further symbolic
5344debugging information.
5345
5346
5347File: as.info,  Node: Section,  Next: Set,  Prev: Scl,  Up: Pseudo Ops
5348
53497.85 `.section NAME'
5350====================
5351
5352Use the `.section' directive to assemble the following code into a
5353section named NAME.
5354
5355   This directive is only supported for targets that actually support
5356arbitrarily named sections; on `a.out' targets, for example, it is not
5357accepted, even with a standard `a.out' section name.
5358
5359COFF Version
5360------------
5361
5362   For COFF targets, the `.section' directive is used in one of the
5363following ways:
5364
5365     .section NAME[, "FLAGS"]
5366     .section NAME[, SUBSECTION]
5367
5368   If the optional argument is quoted, it is taken as flags to use for
5369the section.  Each flag is a single character.  The following flags are
5370recognized:
5371
5372`b'
5373     bss section (uninitialized data)
5374
5375`n'
5376     section is not loaded
5377
5378`w'
5379     writable section
5380
5381`d'
5382     data section
5383
5384`e'
5385     exclude section from linking
5386
5387`r'
5388     read-only section
5389
5390`x'
5391     executable section
5392
5393`s'
5394     shared section (meaningful for PE targets)
5395
5396`a'
5397     ignored.  (For compatibility with the ELF version)
5398
5399`y'
5400     section is not readable (meaningful for PE targets)
5401
5402`0-9'
5403     single-digit power-of-two section alignment (GNU extension)
5404
5405   If no flags are specified, the default flags depend upon the section
5406name.  If the section name is not recognized, the default will be for
5407the section to be loaded and writable.  Note the `n' and `w' flags
5408remove attributes from the section, rather than adding them, so if they
5409are used on their own it will be as if no flags had been specified at
5410all.
5411
5412   If the optional argument to the `.section' directive is not quoted,
5413it is taken as a subsection number (*note Sub-Sections::).
5414
5415ELF Version
5416-----------
5417
5418   This is one of the ELF section stack manipulation directives.  The
5419others are `.subsection' (*note SubSection::), `.pushsection' (*note
5420PushSection::), `.popsection' (*note PopSection::), and `.previous'
5421(*note Previous::).
5422
5423   For ELF targets, the `.section' directive is used like this:
5424
5425     .section NAME [, "FLAGS"[, @TYPE[,FLAG_SPECIFIC_ARGUMENTS]]]
5426
5427   If the `--sectname-subst' command-line option is provided, the NAME
5428argument may contain a substitution sequence. Only `%S' is supported at
5429the moment, and substitutes the current section name. For example:
5430
5431     .macro exception_code
5432     .section %S.exception
5433     [exception code here]
5434     .previous
5435     .endm
5436
5437     .text
5438     [code]
5439     exception_code
5440     [...]
5441
5442     .section .init
5443     [init code]
5444     exception_code
5445     [...]
5446
5447   The two `exception_code' invocations above would create the
5448`.text.exception' and `.init.exception' sections respectively.  This is
5449useful e.g. to discriminate between ancillary sections that are tied to
5450setup code to be discarded after use from ancillary sections that need
5451to stay resident without having to define multiple `exception_code'
5452macros just for that purpose.
5453
5454   The optional FLAGS argument is a quoted string which may contain any
5455combination of the following characters:
5456
5457`a'
5458     section is allocatable
5459
5460`d'
5461     section is a GNU_MBIND section
5462
5463`e'
5464     section is excluded from executable and shared library.
5465
5466`o'
5467     section references a symbol defined in another section (the
5468     linked-to section) in the same file.
5469
5470`w'
5471     section is writable
5472
5473`x'
5474     section is executable
5475
5476`M'
5477     section is mergeable
5478
5479`S'
5480     section contains zero terminated strings
5481
5482`G'
5483     section is a member of a section group
5484
5485`T'
5486     section is used for thread-local-storage
5487
5488`?'
5489     section is a member of the previously-current section's group, if
5490     any
5491
5492`R'
5493     retained section (apply SHF_GNU_RETAIN to prevent linker garbage
5494     collection, GNU ELF extension)
5495
5496``<number>''
5497     a numeric value indicating the bits to be set in the ELF section
5498     header's flags field.  Note - if one or more of the alphabetic
5499     characters described above is also included in the flags field,
5500     their bit values will be ORed into the resulting value.
5501
5502``<target specific>''
5503     some targets extend this list with their own flag characters
5504
5505   Note - once a section's flags have been set they cannot be changed.
5506There are a few exceptions to this rule however.  Processor and
5507application specific flags can be added to an already defined section.
5508The `.interp', `.strtab' and `.symtab' sections can have the allocate
5509flag (`a') set after they are initially defined, and the
5510`.note-GNU-stack' section may have the executable (`x') flag added.
5511Also note that the `.attach_to_group' directive can be used to add a
5512section to a group even if the section was not originally declared to
5513be part of that group.
5514
5515   The optional TYPE argument may contain one of the following
5516constants:
5517
5518`@progbits'
5519     section contains data
5520
5521`@nobits'
5522     section does not contain data (i.e., section only occupies space)
5523
5524`@note'
5525     section contains data which is used by things other than the
5526     program
5527
5528`@init_array'
5529     section contains an array of pointers to init functions
5530
5531`@fini_array'
5532     section contains an array of pointers to finish functions
5533
5534`@preinit_array'
5535     section contains an array of pointers to pre-init functions
5536
5537`@`<number>''
5538     a numeric value to be set as the ELF section header's type field.
5539
5540`@`<target specific>''
5541     some targets extend this list with their own types
5542
5543   Many targets only support the first three section types.  The type
5544may be enclosed in double quotes if necessary.
5545
5546   Note on targets where the `@' character is the start of a comment (eg
5547ARM) then another character is used instead.  For example the ARM port
5548uses the `%' character.
5549
5550   Note - some sections, eg `.text' and `.data' are considered to be
5551special and have fixed types.  Any attempt to declare them with a
5552different type will generate an error from the assembler.
5553
5554   If FLAGS contains the `M' symbol then the TYPE argument must be
5555specified as well as an extra argument--ENTSIZE--like this:
5556
5557     .section NAME , "FLAGS"M, @TYPE, ENTSIZE
5558
5559   Sections with the `M' flag but not `S' flag must contain fixed size
5560constants, each ENTSIZE octets long. Sections with both `M' and `S'
5561must contain zero terminated strings where each character is ENTSIZE
5562bytes long. The linker may remove duplicates within sections with the
5563same name, same entity size and same flags.  ENTSIZE must be an
5564absolute expression.  For sections with both `M' and `S', a string
5565which is a suffix of a larger string is considered a duplicate.  Thus
5566`"def"' will be merged with `"abcdef"';  A reference to the first
5567`"def"' will be changed to a reference to `"abcdef"+3'.
5568
5569   If FLAGS contains the `o' flag, then the TYPE argument must be
5570present along with an additional field like this:
5571
5572     .section NAME,"FLAGS"o,@TYPE,SYMBOLNAME|SECTIONINDEX
5573
5574   The SYMBOLNAME field specifies the symbol name which the section
5575references.  Alternatively a numeric SECTIONINDEX can be provided.  This
5576is not generally a good idea as section indicies are rarely known at
5577assembly time, but the facility is provided for testing purposes.  An
5578index of zero is allowed.  It indicates that the linked-to section has
5579already been discarded.
5580
5581   Note: If both the M and O flags are present, then the fields for the
5582Merge flag should come first, like this:
5583
5584     .section NAME,"FLAGS"Mo,@TYPE,ENTSIZE,SYMBOLNAME
5585
5586   If FLAGS contains the `G' symbol then the TYPE argument must be
5587present along with an additional field like this:
5588
5589     .section NAME , "FLAGS"G, @TYPE, GROUPNAME[, LINKAGE]
5590
5591   The GROUPNAME field specifies the name of the section group to which
5592this particular section belongs.  The optional linkage field can
5593contain:
5594
5595`comdat'
5596     indicates that only one copy of this section should be retained
5597
5598`.gnu.linkonce'
5599     an alias for comdat
5600
5601   Note: if both the M and G flags are present then the fields for the
5602Merge flag should come first, like this:
5603
5604     .section NAME , "FLAGS"MG, @TYPE, ENTSIZE, GROUPNAME[, LINKAGE]
5605
5606   If both `o' flag and `G' flag are present, then the SYMBOLNAME field
5607for `o' comes first, like this:
5608
5609     .section NAME,"FLAGS"oG,@TYPE,SYMBOLNAME,GROUPNAME[,LINKAGE]
5610
5611   If FLAGS contains the `?' symbol then it may not also contain the
5612`G' symbol and the GROUPNAME or LINKAGE fields should not be present.
5613Instead, `?' says to consider the section that's current before this
5614directive.  If that section used `G', then the new section will use `G'
5615with those same GROUPNAME and LINKAGE fields implicitly.  If not, then
5616the `?' symbol has no effect.
5617
5618   The optional UNIQUE,`<NUMBER>' argument must come last.  It assigns
5619`<NUMBER>' as a unique section ID to distinguish different sections
5620with the same section name like these:
5621
5622     .section NAME,"FLAGS",@TYPE,UNIQUE,`<NUMBER>'
5623     .section NAME,"FLAGS"G,@TYPE,GROUPNAME,[LINKAGE],UNIQUE,`<NUMBER>'
5624     .section NAME,"FLAGS"MG,@TYPE,ENTSIZE,GROUPNAME[,LINKAGE],UNIQUE,`<NUMBER>'
5625
5626   The valid values of `<NUMBER>' are between 0 and 4294967295.
5627
5628   If no flags are specified, the default flags depend upon the section
5629name.  If the section name is not recognized, the default will be for
5630the section to have none of the above flags: it will not be allocated
5631in memory, nor writable, nor executable.  The section will contain data.
5632
5633   For ELF targets, the assembler supports another type of `.section'
5634directive for compatibility with the Solaris assembler:
5635
5636     .section "NAME"[, FLAGS...]
5637
5638   Note that the section name is quoted.  There may be a sequence of
5639comma separated flags:
5640
5641`#alloc'
5642     section is allocatable
5643
5644`#write'
5645     section is writable
5646
5647`#execinstr'
5648     section is executable
5649
5650`#exclude'
5651     section is excluded from executable and shared library.
5652
5653`#tls'
5654     section is used for thread local storage
5655
5656   This directive replaces the current section and subsection.  See the
5657contents of the gas testsuite directory `gas/testsuite/gas/elf' for
5658some examples of how this directive and the other section stack
5659directives work.
5660
5661
5662File: as.info,  Node: Set,  Next: Short,  Prev: Section,  Up: Pseudo Ops
5663
56647.86 `.set SYMBOL, EXPRESSION'
5665==============================
5666
5667Set the value of SYMBOL to EXPRESSION.  This changes SYMBOL's value and
5668type to conform to EXPRESSION.  If SYMBOL was flagged as external, it
5669remains flagged (*note Symbol Attributes::).
5670
5671   You may `.set' a symbol many times in the same assembly provided
5672that the values given to the symbol are constants.  Values that are
5673based on expressions involving other symbols are allowed, but some
5674targets may restrict this to only being done once per assembly.  This
5675is because those targets do not set the addresses of symbols at
5676assembly time, but rather delay the assignment until a final link is
5677performed.  This allows the linker a chance to change the code in the
5678files, changing the location of, and the relative distance between,
5679various different symbols.
5680
5681   If you `.set' a global symbol, the value stored in the object file
5682is the last value stored into it.
5683
5684   On Z80 `set' is a real instruction, use `.set' or `SYMBOL defl
5685EXPRESSION' instead.
5686
5687
5688File: as.info,  Node: Short,  Next: Single,  Prev: Set,  Up: Pseudo Ops
5689
56907.87 `.short EXPRESSIONS'
5691=========================
5692
5693`.short' is normally the same as `.word'.  *Note `.word': Word.
5694
5695   In some configurations, however, `.short' and `.word' generate
5696numbers of different lengths.  *Note Machine Dependencies::.
5697
5698
5699File: as.info,  Node: Single,  Next: Size,  Prev: Short,  Up: Pseudo Ops
5700
57017.88 `.single FLONUMS'
5702======================
5703
5704This directive assembles zero or more flonums, separated by commas.  It
5705has the same effect as `.float'.  The exact kind of floating point
5706numbers emitted depends on how `as' is configured.  *Note Machine
5707Dependencies::.
5708
5709
5710File: as.info,  Node: Size,  Next: Skip,  Prev: Single,  Up: Pseudo Ops
5711
57127.89 `.size'
5713============
5714
5715This directive is used to set the size associated with a symbol.
5716
5717COFF Version
5718------------
5719
5720   For COFF targets, the `.size' directive is only permitted inside
5721`.def'/`.endef' pairs.  It is used like this:
5722
5723     .size EXPRESSION
5724
5725ELF Version
5726-----------
5727
5728   For ELF targets, the `.size' directive is used like this:
5729
5730     .size NAME , EXPRESSION
5731
5732   This directive sets the size associated with a symbol NAME.  The
5733size in bytes is computed from EXPRESSION which can make use of label
5734arithmetic.  This directive is typically used to set the size of
5735function symbols.
5736
5737
5738File: as.info,  Node: Skip,  Next: Sleb128,  Prev: Size,  Up: Pseudo Ops
5739
57407.90 `.skip SIZE [,FILL]'
5741=========================
5742
5743This directive emits SIZE bytes, each of value FILL.  Both SIZE and
5744FILL are absolute expressions.  If the comma and FILL are omitted, FILL
5745is assumed to be zero.  This is the same as `.space'.
5746
5747
5748File: as.info,  Node: Sleb128,  Next: Space,  Prev: Skip,  Up: Pseudo Ops
5749
57507.91 `.sleb128 EXPRESSIONS'
5751===========================
5752
5753SLEB128 stands for "signed little endian base 128."  This is a compact,
5754variable length representation of numbers used by the DWARF symbolic
5755debugging format.  *Note `.uleb128': Uleb128.
5756
5757
5758File: as.info,  Node: Space,  Next: Stab,  Prev: Sleb128,  Up: Pseudo Ops
5759
57607.92 `.space SIZE [,FILL]'
5761==========================
5762
5763This directive emits SIZE bytes, each of value FILL.  Both SIZE and
5764FILL are absolute expressions.  If the comma and FILL are omitted, FILL
5765is assumed to be zero.  This is the same as `.skip'.
5766
5767     _Warning:_ `.space' has a completely different meaning for HPPA
5768     targets; use `.block' as a substitute.  See `HP9000 Series 800
5769     Assembly Language Reference Manual' (HP 92432-90001) for the
5770     meaning of the `.space' directive.  *Note HPPA Assembler
5771     Directives: HPPA Directives, for a summary.
5772
5773
5774File: as.info,  Node: Stab,  Next: String,  Prev: Space,  Up: Pseudo Ops
5775
57767.93 `.stabd, .stabn, .stabs'
5777=============================
5778
5779There are three directives that begin `.stab'.  All emit symbols (*note
5780Symbols::), for use by symbolic debuggers.  The symbols are not entered
5781in the `as' hash table: they cannot be referenced elsewhere in the
5782source file.  Up to five fields are required:
5783
5784STRING
5785     This is the symbol's name.  It may contain any character except
5786     `\000', so is more general than ordinary symbol names.  Some
5787     debuggers used to code arbitrarily complex structures into symbol
5788     names using this field.
5789
5790TYPE
5791     An absolute expression.  The symbol's type is set to the low 8
5792     bits of this expression.  Any bit pattern is permitted, but `ld'
5793     and debuggers choke on silly bit patterns.
5794
5795OTHER
5796     An absolute expression.  The symbol's "other" attribute is set to
5797     the low 8 bits of this expression.
5798
5799DESC
5800     An absolute expression.  The symbol's descriptor is set to the low
5801     16 bits of this expression.
5802
5803VALUE
5804     An absolute expression which becomes the symbol's value.
5805
5806   If a warning is detected while reading a `.stabd', `.stabn', or
5807`.stabs' statement, the symbol has probably already been created; you
5808get a half-formed symbol in your object file.  This is compatible with
5809earlier assemblers!
5810
5811`.stabd TYPE , OTHER , DESC'
5812     The "name" of the symbol generated is not even an empty string.
5813     It is a null pointer, for compatibility.  Older assemblers used a
5814     null pointer so they didn't waste space in object files with empty
5815     strings.
5816
5817     The symbol's value is set to the location counter, relocatably.
5818     When your program is linked, the value of this symbol is the
5819     address of the location counter when the `.stabd' was assembled.
5820
5821`.stabn TYPE , OTHER , DESC , VALUE'
5822     The name of the symbol is set to the empty string `""'.
5823
5824`.stabs STRING ,  TYPE , OTHER , DESC , VALUE'
5825     All five fields are specified.
5826
5827
5828File: as.info,  Node: String,  Next: Struct,  Prev: Stab,  Up: Pseudo Ops
5829
58307.94 `.string' "STR", `.string8' "STR", `.string16'
5831===================================================
5832
5833"STR", `.string32' "STR", `.string64' "STR"
5834
5835   Copy the characters in STR to the object file.  You may specify more
5836than one string to copy, separated by commas.  Unless otherwise
5837specified for a particular machine, the assembler marks the end of each
5838string with a 0 byte.  You can use any of the escape sequences
5839described in *Note Strings: Strings.
5840
5841   The variants `string16', `string32' and `string64' differ from the
5842`string' pseudo opcode in that each 8-bit character from STR is copied
5843and expanded to 16, 32 or 64 bits respectively.  The expanded characters
5844are stored in target endianness byte order.
5845
5846   Example:
5847     	.string32 "BYE"
5848     expands to:
5849     	.string   "B\0\0\0Y\0\0\0E\0\0\0"  /* On little endian targets.  */
5850     	.string   "\0\0\0B\0\0\0Y\0\0\0E"  /* On big endian targets.  */
5851
5852
5853File: as.info,  Node: Struct,  Next: SubSection,  Prev: String,  Up: Pseudo Ops
5854
58557.95 `.struct EXPRESSION'
5856=========================
5857
5858Switch to the absolute section, and set the section offset to
5859EXPRESSION, which must be an absolute expression.  You might use this
5860as follows:
5861             .struct 0
5862     field1:
5863             .struct field1 + 4
5864     field2:
5865             .struct field2 + 4
5866     field3:
5867   This would define the symbol `field1' to have the value 0, the symbol
5868`field2' to have the value 4, and the symbol `field3' to have the value
58698.  Assembly would be left in the absolute section, and you would need
5870to use a `.section' directive of some sort to change to some other
5871section before further assembly.
5872
5873
5874File: as.info,  Node: SubSection,  Next: Symver,  Prev: Struct,  Up: Pseudo Ops
5875
58767.96 `.subsection NAME'
5877=======================
5878
5879This is one of the ELF section stack manipulation directives.  The
5880others are `.section' (*note Section::), `.pushsection' (*note
5881PushSection::), `.popsection' (*note PopSection::), and `.previous'
5882(*note Previous::).
5883
5884   This directive replaces the current subsection with `name'.  The
5885current section is not changed.  The replaced subsection is put onto
5886the section stack in place of the then current top of stack subsection.
5887
5888
5889File: as.info,  Node: Symver,  Next: Tag,  Prev: SubSection,  Up: Pseudo Ops
5890
58917.97 `.symver'
5892==============
5893
5894Use the `.symver' directive to bind symbols to specific version nodes
5895within a source file.  This is only supported on ELF platforms, and is
5896typically used when assembling files to be linked into a shared library.
5897There are cases where it may make sense to use this in objects to be
5898bound into an application itself so as to override a versioned symbol
5899from a shared library.
5900
5901   For ELF targets, the `.symver' directive can be used like this:
5902     .symver NAME, NAME2@NODENAME[ ,VISIBILITY]
5903   If the original symbol NAME is defined within the file being
5904assembled, the `.symver' directive effectively creates a symbol alias
5905with the name NAME2@NODENAME, and in fact the main reason that we just
5906don't try and create a regular alias is that the @ character isn't
5907permitted in symbol names.  The NAME2 part of the name is the actual
5908name of the symbol by which it will be externally referenced.  The name
5909NAME itself is merely a name of convenience that is used so that it is
5910possible to have definitions for multiple versions of a function within
5911a single source file, and so that the compiler can unambiguously know
5912which version of a function is being mentioned.  The NODENAME portion
5913of the alias should be the name of a node specified in the version
5914script supplied to the linker when building a shared library.  If you
5915are attempting to override a versioned symbol from a shared library,
5916then NODENAME should correspond to the nodename of the symbol you are
5917trying to override.  The optional argument VISIBILITY updates the
5918visibility of the original symbol.  The valid visibilities are `local',
5919`hidden', and `remove'.  The `local' visibility makes the original
5920symbol a local symbol (*note Local::).  The `hidden' visibility sets
5921the visibility of the original symbol to `hidden' (*note Hidden::).
5922The `remove' visibility removes the original symbol from the symbol
5923table.  If visibility isn't specified, the original symbol is unchanged.
5924
5925   If the symbol NAME is not defined within the file being assembled,
5926all references to NAME will be changed to NAME2@NODENAME.  If no
5927reference to NAME is made, NAME2@NODENAME will be removed from the
5928symbol table.
5929
5930   Another usage of the `.symver' directive is:
5931     .symver NAME, NAME2@@NODENAME
5932   In this case, the symbol NAME must exist and be defined within the
5933file being assembled. It is similar to NAME2@NODENAME. The difference
5934is NAME2@@NODENAME will also be used to resolve references to NAME2 by
5935the linker.
5936
5937   The third usage of the `.symver' directive is:
5938     .symver NAME, NAME2@@@NODENAME
5939   When NAME is not defined within the file being assembled, it is
5940treated as NAME2@NODENAME. When NAME is defined within the file being
5941assembled, the symbol name, NAME, will be changed to NAME2@@NODENAME.
5942
5943
5944File: as.info,  Node: Tag,  Next: Text,  Prev: Symver,  Up: Pseudo Ops
5945
59467.98 `.tag STRUCTNAME'
5947======================
5948
5949This directive is generated by compilers to include auxiliary debugging
5950information in the symbol table.  It is only permitted inside
5951`.def'/`.endef' pairs.  Tags are used to link structure definitions in
5952the symbol table with instances of those structures.
5953
5954
5955File: as.info,  Node: Text,  Next: Title,  Prev: Tag,  Up: Pseudo Ops
5956
59577.99 `.text SUBSECTION'
5958=======================
5959
5960Tells `as' to assemble the following statements onto the end of the
5961text subsection numbered SUBSECTION, which is an absolute expression.
5962If SUBSECTION is omitted, subsection number zero is used.
5963
5964
5965File: as.info,  Node: Title,  Next: Tls_common,  Prev: Text,  Up: Pseudo Ops
5966
59677.100 `.title "HEADING"'
5968========================
5969
5970Use HEADING as the title (second line, immediately after the source
5971file name and pagenumber) when generating assembly listings.
5972
5973   This directive affects subsequent pages, as well as the current page
5974if it appears within ten lines of the top of a page.
5975
5976
5977File: as.info,  Node: Tls_common,  Next: Type,  Prev: Title,  Up: Pseudo Ops
5978
59797.101 `.tls_common SYMBOL, LENGTH[, ALIGNMENT]'
5980===============================================
5981
5982This directive behaves in the same way as the `.comm' directive (*note
5983Comm::) except that SYMBOL has type of STT_TLS instead of STT_OBJECT.
5984
5985
5986File: as.info,  Node: Type,  Next: Uleb128,  Prev: Tls_common,  Up: Pseudo Ops
5987
59887.102 `.type'
5989=============
5990
5991This directive is used to set the type of a symbol.
5992
5993COFF Version
5994------------
5995
5996   For COFF targets, this directive is permitted only within
5997`.def'/`.endef' pairs.  It is used like this:
5998
5999     .type INT
6000
6001   This records the integer INT as the type attribute of a symbol table
6002entry.
6003
6004ELF Version
6005-----------
6006
6007   For ELF targets, the `.type' directive is used like this:
6008
6009     .type NAME , TYPE DESCRIPTION
6010
6011   This sets the type of symbol NAME to be either a function symbol or
6012an object symbol.  There are five different syntaxes supported for the
6013TYPE DESCRIPTION field, in order to provide compatibility with various
6014other assemblers.
6015
6016   Because some of the characters used in these syntaxes (such as `@'
6017and `#') are comment characters for some architectures, some of the
6018syntaxes below do not work on all architectures.  The first variant
6019will be accepted by the GNU assembler on all architectures so that
6020variant should be used for maximum portability, if you do not need to
6021assemble your code with other assemblers.
6022
6023   The syntaxes supported are:
6024
6025       .type <name> STT_<TYPE_IN_UPPER_CASE>
6026       .type <name>,#<type>
6027       .type <name>,@<type>
6028       .type <name>,%<type>
6029       .type <name>,"<type>"
6030
6031   The types supported are:
6032
6033`STT_FUNC'
6034`function'
6035     Mark the symbol as being a function name.
6036
6037`STT_GNU_IFUNC'
6038`gnu_indirect_function'
6039     Mark the symbol as an indirect function when evaluated during reloc
6040     processing.  (This is only supported on assemblers targeting GNU
6041     systems).
6042
6043`STT_OBJECT'
6044`object'
6045     Mark the symbol as being a data object.
6046
6047`STT_TLS'
6048`tls_object'
6049     Mark the symbol as being a thread-local data object.
6050
6051`STT_COMMON'
6052`common'
6053     Mark the symbol as being a common data object.
6054
6055`STT_NOTYPE'
6056`notype'
6057     Does not mark the symbol in any way.  It is supported just for
6058     completeness.
6059
6060`gnu_unique_object'
6061     Marks the symbol as being a globally unique data object.  The
6062     dynamic linker will make sure that in the entire process there is
6063     just one symbol with this name and type in use.  (This is only
6064     supported on assemblers targeting GNU systems).
6065
6066
6067   Changing between incompatible types other than from/to STT_NOTYPE
6068will result in a diagnostic.  An intermediate change to STT_NOTYPE will
6069silence this.
6070
6071   Note: Some targets support extra types in addition to those listed
6072above.
6073
6074
6075File: as.info,  Node: Uleb128,  Next: Val,  Prev: Type,  Up: Pseudo Ops
6076
60777.103 `.uleb128 EXPRESSIONS'
6078============================
6079
6080ULEB128 stands for "unsigned little endian base 128."  This is a
6081compact, variable length representation of numbers used by the DWARF
6082symbolic debugging format.  *Note `.sleb128': Sleb128.
6083
6084
6085File: as.info,  Node: Val,  Next: Version,  Prev: Uleb128,  Up: Pseudo Ops
6086
60877.104 `.val ADDR'
6088=================
6089
6090This directive, permitted only within `.def'/`.endef' pairs, records
6091the address ADDR as the value attribute of a symbol table entry.
6092
6093
6094File: as.info,  Node: Version,  Next: VTableEntry,  Prev: Val,  Up: Pseudo Ops
6095
60967.105 `.version "STRING"'
6097=========================
6098
6099This directive creates a `.note' section and places into it an ELF
6100formatted note of type NT_VERSION.  The note's name is set to `string'.
6101
6102
6103File: as.info,  Node: VTableEntry,  Next: VTableInherit,  Prev: Version,  Up: Pseudo Ops
6104
61057.106 `.vtable_entry TABLE, OFFSET'
6106===================================
6107
6108This directive finds or creates a symbol `table' and creates a
6109`VTABLE_ENTRY' relocation for it with an addend of `offset'.
6110
6111
6112File: as.info,  Node: VTableInherit,  Next: Warning,  Prev: VTableEntry,  Up: Pseudo Ops
6113
61147.107 `.vtable_inherit CHILD, PARENT'
6115=====================================
6116
6117This directive finds the symbol `child' and finds or creates the symbol
6118`parent' and then creates a `VTABLE_INHERIT' relocation for the parent
6119whose addend is the value of the child symbol.  As a special case the
6120parent name of `0' is treated as referring to the `*ABS*' section.
6121
6122
6123File: as.info,  Node: Warning,  Next: Weak,  Prev: VTableInherit,  Up: Pseudo Ops
6124
61257.108 `.warning "STRING"'
6126=========================
6127
6128Similar to the directive `.error' (*note `.error "STRING"': Error.),
6129but just emits a warning.
6130
6131
6132File: as.info,  Node: Weak,  Next: Weakref,  Prev: Warning,  Up: Pseudo Ops
6133
61347.109 `.weak NAMES'
6135===================
6136
6137This directive sets the weak attribute on the comma separated list of
6138symbol `names'.  If the symbols do not already exist, they will be
6139created.
6140
6141   On COFF targets other than PE, weak symbols are a GNU extension.
6142This directive sets the weak attribute on the comma separated list of
6143symbol `names'.  If the symbols do not already exist, they will be
6144created.
6145
6146   On the PE target, weak symbols are supported natively as weak
6147aliases.  When a weak symbol is created that is not an alias, GAS
6148creates an alternate symbol to hold the default value.
6149
6150
6151File: as.info,  Node: Weakref,  Next: Word,  Prev: Weak,  Up: Pseudo Ops
6152
61537.110 `.weakref ALIAS, TARGET'
6154==============================
6155
6156This directive creates an alias to the target symbol that enables the
6157symbol to be referenced with weak-symbol semantics, but without
6158actually making it weak.  If direct references or definitions of the
6159symbol are present, then the symbol will not be weak, but if all
6160references to it are through weak references, the symbol will be marked
6161as weak in the symbol table.
6162
6163   The effect is equivalent to moving all references to the alias to a
6164separate assembly source file, renaming the alias to the symbol in it,
6165declaring the symbol as weak there, and running a reloadable link to
6166merge the object files resulting from the assembly of the new source
6167file and the old source file that had the references to the alias
6168removed.
6169
6170   The alias itself never makes to the symbol table, and is entirely
6171handled within the assembler.
6172
6173
6174File: as.info,  Node: Word,  Next: Zero,  Prev: Weakref,  Up: Pseudo Ops
6175
61767.111 `.word EXPRESSIONS'
6177=========================
6178
6179This directive expects zero or more EXPRESSIONS, of any section,
6180separated by commas.
6181
6182   The size of the number emitted, and its byte order, depend on what
6183target computer the assembly is for.
6184
6185     _Warning: Special Treatment to support Compilers_
6186
6187   Machines with a 32-bit address space, but that do less than 32-bit
6188addressing, require the following special treatment.  If the machine of
6189interest to you does 32-bit addressing (or doesn't require it; *note
6190Machine Dependencies::), you can ignore this issue.
6191
6192   In order to assemble compiler output into something that works, `as'
6193occasionally does strange things to `.word' directives.  Directives of
6194the form `.word sym1-sym2' are often emitted by compilers as part of
6195jump tables.  Therefore, when `as' assembles a directive of the form
6196`.word sym1-sym2', and the difference between `sym1' and `sym2' does
6197not fit in 16 bits, `as' creates a "secondary jump table", immediately
6198before the next label.  This secondary jump table is preceded by a
6199short-jump to the first byte after the secondary table.  This
6200short-jump prevents the flow of control from accidentally falling into
6201the new table.  Inside the table is a long-jump to `sym2'.  The
6202original `.word' contains `sym1' minus the address of the long-jump to
6203`sym2'.
6204
6205   If there were several occurrences of `.word sym1-sym2' before the
6206secondary jump table, all of them are adjusted.  If there was a `.word
6207sym3-sym4', that also did not fit in sixteen bits, a long-jump to
6208`sym4' is included in the secondary jump table, and the `.word'
6209directives are adjusted to contain `sym3' minus the address of the
6210long-jump to `sym4'; and so on, for as many entries in the original
6211jump table as necessary.
6212
6213
6214File: as.info,  Node: Zero,  Next: 2byte,  Prev: Word,  Up: Pseudo Ops
6215
62167.112 `.zero SIZE'
6217==================
6218
6219This directive emits SIZE 0-valued bytes.  SIZE must be an absolute
6220expression.  This directive is actually an alias for the `.skip'
6221directive so it can take an optional second argument of the value to
6222store in the bytes instead of zero.  Using `.zero' in this way would be
6223confusing however.
6224
6225
6226File: as.info,  Node: 2byte,  Next: 4byte,  Prev: Zero,  Up: Pseudo Ops
6227
62287.113 `.2byte EXPRESSION [, EXPRESSION]*'
6229=========================================
6230
6231This directive expects zero or more expressions, separated by commas.
6232If there are no expressions then the directive does nothing.  Otherwise
6233each expression is evaluated in turn and placed in the next two bytes
6234of the current output section, using the endian model of the target.
6235If an expression will not fit in two bytes, a warning message is
6236displayed and the least significant two bytes of the expression's value
6237are used.  If an expression cannot be evaluated at assembly time then
6238relocations will be generated in order to compute the value at link
6239time.
6240
6241   This directive does not apply any alignment before or after
6242inserting the values.  As a result of this, if relocations are
6243generated, they may be different from those used for inserting values
6244with a guaranteed alignment.
6245
6246
6247File: as.info,  Node: 4byte,  Next: 8byte,  Prev: 2byte,  Up: Pseudo Ops
6248
62497.114 `.4byte EXPRESSION [, EXPRESSION]*'
6250=========================================
6251
6252Like the `.2byte' directive, except that it inserts unaligned, four byte
6253long values into the output.
6254
6255
6256File: as.info,  Node: 8byte,  Next: Deprecated,  Prev: 4byte,  Up: Pseudo Ops
6257
62587.115 `.8byte EXPRESSION [, EXPRESSION]*'
6259=========================================
6260
6261Like the `.2byte' directive, except that it inserts unaligned, eight
6262byte long bignum values into the output.
6263
6264
6265File: as.info,  Node: Deprecated,  Prev: 8byte,  Up: Pseudo Ops
6266
62677.116 Deprecated Directives
6268===========================
6269
6270One day these directives won't work.  They are included for
6271compatibility with older assemblers.
6272.abort
6273
6274.line
6275
6276
6277File: as.info,  Node: Object Attributes,  Next: Machine Dependencies,  Prev: Pseudo Ops,  Up: Top
6278
62798 Object Attributes
6280*******************
6281
6282`as' assembles source files written for a specific architecture into
6283object files for that architecture.  But not all object files are alike.
6284Many architectures support incompatible variations.  For instance,
6285floating point arguments might be passed in floating point registers if
6286the object file requires hardware floating point support--or floating
6287point arguments might be passed in integer registers if the object file
6288supports processors with no hardware floating point unit.  Or, if two
6289objects are built for different generations of the same architecture,
6290the combination may require the newer generation at run-time.
6291
6292   This information is useful during and after linking.  At link time,
6293`ld' can warn about incompatible object files.  After link time, tools
6294like `gdb' can use it to process the linked file correctly.
6295
6296   Compatibility information is recorded as a series of object
6297attributes.  Each attribute has a "vendor", "tag", and "value".  The
6298vendor is a string, and indicates who sets the meaning of the tag.  The
6299tag is an integer, and indicates what property the attribute describes.
6300The value may be a string or an integer, and indicates how the
6301property affects this object.  Missing attributes are the same as
6302attributes with a zero value or empty string value.
6303
6304   Object attributes were developed as part of the ABI for the ARM
6305Architecture.  The file format is documented in `ELF for the ARM
6306Architecture'.
6307
6308* Menu:
6309
6310* GNU Object Attributes::               GNU Object Attributes
6311* Defining New Object Attributes::      Defining New Object Attributes
6312
6313
6314File: as.info,  Node: GNU Object Attributes,  Next: Defining New Object Attributes,  Up: Object Attributes
6315
63168.1 GNU Object Attributes
6317=========================
6318
6319The `.gnu_attribute' directive records an object attribute with vendor
6320`gnu'.
6321
6322   Except for `Tag_compatibility', which has both an integer and a
6323string for its value, GNU attributes have a string value if the tag
6324number is odd and an integer value if the tag number is even.  The
6325second bit (`TAG & 2' is set for architecture-independent attributes
6326and clear for architecture-dependent ones.
6327
63288.1.1 Common GNU attributes
6329---------------------------
6330
6331These attributes are valid on all architectures.
6332
6333Tag_compatibility (32)
6334     The compatibility attribute takes an integer flag value and a
6335     vendor name.  If the flag value is 0, the file is compatible with
6336     other toolchains.  If it is 1, then the file is only compatible
6337     with the named toolchain.  If it is greater than 1, the file can
6338     only be processed by other toolchains under some private
6339     arrangement indicated by the flag value and the vendor name.
6340
63418.1.2 M680x0 Attributes
6342-----------------------
6343
6344Tag_GNU_M68K_ABI_FP (4)
6345     The floating-point ABI used by this object file.  The value will
6346     be:
6347
6348        * 0 for files not affected by the floating-point ABI.
6349
6350        * 1 for files using double-precision hardware floating-point
6351          ABI.
6352
6353        * 2 for files using the software floating-point ABI.
6354
63558.1.3 MIPS Attributes
6356---------------------
6357
6358Tag_GNU_MIPS_ABI_FP (4)
6359     The floating-point ABI used by this object file.  The value will
6360     be:
6361
6362        * 0 for files not affected by the floating-point ABI.
6363
6364        * 1 for files using the hardware floating-point ABI with a
6365          standard double-precision FPU.
6366
6367        * 2 for files using the hardware floating-point ABI with a
6368          single-precision FPU.
6369
6370        * 3 for files using the software floating-point ABI.
6371
6372        * 4 for files using the deprecated hardware floating-point ABI
6373          which used 64-bit floating-point registers, 32-bit
6374          general-purpose registers and increased the number of
6375          callee-saved floating-point registers.
6376
6377        * 5 for files using the hardware floating-point ABI with a
6378          double-precision FPU with either 32-bit or 64-bit
6379          floating-point registers and 32-bit general-purpose registers.
6380
6381        * 6 for files using the hardware floating-point ABI with 64-bit
6382          floating-point registers and 32-bit general-purpose registers.
6383
6384        * 7 for files using the hardware floating-point ABI with 64-bit
6385          floating-point registers, 32-bit general-purpose registers
6386          and a rule that forbids the direct use of odd-numbered
6387          single-precision floating-point registers.
6388
63898.1.4 PowerPC Attributes
6390------------------------
6391
6392Tag_GNU_Power_ABI_FP (4)
6393     The floating-point ABI used by this object file.  The value will
6394     be:
6395
6396        * 0 for files not affected by the floating-point ABI.
6397
6398        * 1 for files using double-precision hardware floating-point
6399          ABI.
6400
6401        * 2 for files using the software floating-point ABI.
6402
6403        * 3 for files using single-precision hardware floating-point
6404          ABI.
6405
6406Tag_GNU_Power_ABI_Vector (8)
6407     The vector ABI used by this object file.  The value will be:
6408
6409        * 0 for files not affected by the vector ABI.
6410
6411        * 1 for files using general purpose registers to pass vectors.
6412
6413        * 2 for files using AltiVec registers to pass vectors.
6414
6415        * 3 for files using SPE registers to pass vectors.
6416
64178.1.5 IBM z Systems Attributes
6418------------------------------
6419
6420Tag_GNU_S390_ABI_Vector (8)
6421     The vector ABI used by this object file.  The value will be:
6422
6423        * 0 for files not affected by the vector ABI.
6424
6425        * 1 for files using software vector ABI.
6426
6427        * 2 for files using hardware vector ABI.
6428
64298.1.6 MSP430 Attributes
6430-----------------------
6431
6432Tag_GNU_MSP430_Data_Region (4)
6433     The data region used by this object file.  The value will be:
6434
6435        * 0 for files not using the large memory model.
6436
6437        * 1 for files which have been compiled with the condition that
6438          all data is in the lower memory region, i.e. below address
6439          0x10000.
6440
6441        * 2 for files which allow data to be placed in the full 20-bit
6442          memory range.
6443
6444
6445File: as.info,  Node: Defining New Object Attributes,  Prev: GNU Object Attributes,  Up: Object Attributes
6446
64478.2 Defining New Object Attributes
6448==================================
6449
6450If you want to define a new GNU object attribute, here are the places
6451you will need to modify.  New attributes should be discussed on the
6452`binutils' mailing list.
6453
6454   * This manual, which is the official register of attributes.
6455
6456   * The header for your architecture `include/elf', to define the tag.
6457
6458   * The `bfd' support file for your architecture, to merge the
6459     attribute and issue any appropriate link warnings.
6460
6461   * Test cases in `ld/testsuite' for merging and link warnings.
6462
6463   * `binutils/readelf.c' to display your attribute.
6464
6465   * GCC, if you want the compiler to mark the attribute automatically.
6466
6467
6468File: as.info,  Node: Machine Dependencies,  Next: Reporting Bugs,  Prev: Object Attributes,  Up: Top
6469
64709 Machine Dependent Features
6471****************************
6472
6473The machine instruction sets are (almost by definition) different on
6474each machine where `as' runs.  Floating point representations vary as
6475well, and `as' often supports a few additional directives or
6476command-line options for compatibility with other assemblers on a
6477particular platform.  Finally, some versions of `as' support special
6478pseudo-instructions for branch optimization.
6479
6480   This chapter discusses most of these differences, though it does not
6481include details on any machine's instruction set.  For details on that
6482subject, see the hardware manufacturer's manual.
6483
6484* Menu:
6485
6486
6487* AArch64-Dependent::		AArch64 Dependent Features
6488
6489* Alpha-Dependent::		Alpha Dependent Features
6490
6491* ARC-Dependent::               ARC Dependent Features
6492
6493* ARM-Dependent::               ARM Dependent Features
6494
6495* AVR-Dependent::               AVR Dependent Features
6496
6497* Blackfin-Dependent::		Blackfin Dependent Features
6498
6499* BPF-Dependent::		BPF Dependent Features
6500
6501* CR16-Dependent::              CR16 Dependent Features
6502
6503* CRIS-Dependent::              CRIS Dependent Features
6504
6505* C-SKY-Dependent::             C-SKY Dependent Features
6506
6507* D10V-Dependent::              D10V Dependent Features
6508
6509* D30V-Dependent::              D30V Dependent Features
6510
6511* Epiphany-Dependent::          EPIPHANY Dependent Features
6512
6513* H8/300-Dependent::            Renesas H8/300 Dependent Features
6514
6515* HPPA-Dependent::              HPPA Dependent Features
6516
6517* i386-Dependent::              Intel 80386 and AMD x86-64 Dependent Features
6518
6519* IA-64-Dependent::             Intel IA-64 Dependent Features
6520
6521* IP2K-Dependent::              IP2K Dependent Features
6522
6523* LM32-Dependent::              LM32 Dependent Features
6524
6525* M32C-Dependent::              M32C Dependent Features
6526
6527* M32R-Dependent::              M32R Dependent Features
6528
6529* M68K-Dependent::              M680x0 Dependent Features
6530
6531* M68HC11-Dependent::           M68HC11 and 68HC12 Dependent Features
6532
6533* S12Z-Dependent::              S12Z Dependent Features
6534
6535* Meta-Dependent ::             Meta Dependent Features
6536
6537* MicroBlaze-Dependent::	MICROBLAZE Dependent Features
6538
6539* MIPS-Dependent::              MIPS Dependent Features
6540
6541* MMIX-Dependent::              MMIX Dependent Features
6542
6543* MSP430-Dependent::		MSP430 Dependent Features
6544
6545* NDS32-Dependent::             Andes NDS32 Dependent Features
6546
6547* NiosII-Dependent::            Altera Nios II Dependent Features
6548
6549* NS32K-Dependent::		NS32K Dependent Features
6550
6551* OpenRISC-Dependent::		OpenRISC 1000 Features
6552
6553* PDP-11-Dependent::            PDP-11 Dependent Features
6554
6555* PJ-Dependent::                picoJava Dependent Features
6556
6557* PPC-Dependent::               PowerPC Dependent Features
6558
6559* PRU-Dependent::               PRU Dependent Features
6560
6561* RISC-V-Dependent::            RISC-V Dependent Features
6562
6563* RL78-Dependent::              RL78 Dependent Features
6564
6565* RX-Dependent::                RX Dependent Features
6566
6567* S/390-Dependent::             IBM S/390 Dependent Features
6568
6569* SCORE-Dependent::             SCORE Dependent Features
6570
6571* SH-Dependent::                Renesas / SuperH SH Dependent Features
6572
6573* Sparc-Dependent::             SPARC Dependent Features
6574
6575* TIC54X-Dependent::            TI TMS320C54x Dependent Features
6576
6577* TIC6X-Dependent ::            TI TMS320C6x Dependent Features
6578
6579* TILE-Gx-Dependent ::          Tilera TILE-Gx Dependent Features
6580
6581* TILEPro-Dependent ::          Tilera TILEPro Dependent Features
6582
6583* V850-Dependent::              V850 Dependent Features
6584
6585* Vax-Dependent::               VAX Dependent Features
6586
6587* Visium-Dependent::            Visium Dependent Features
6588
6589* WebAssembly-Dependent::       WebAssembly Dependent Features
6590
6591* XGATE-Dependent::             XGATE Dependent Features
6592
6593* XSTORMY16-Dependent::         XStormy16 Dependent Features
6594
6595* Xtensa-Dependent::            Xtensa Dependent Features
6596
6597* Z80-Dependent::               Z80 Dependent Features
6598
6599* Z8000-Dependent::             Z8000 Dependent Features
6600
6601
6602File: as.info,  Node: AArch64-Dependent,  Next: Alpha-Dependent,  Up: Machine Dependencies
6603
66049.1 AArch64 Dependent Features
6605==============================
6606
6607* Menu:
6608
6609* AArch64 Options::              Options
6610* AArch64 Extensions::		 Extensions
6611* AArch64 Syntax::               Syntax
6612* AArch64 Floating Point::       Floating Point
6613* AArch64 Directives::           AArch64 Machine Directives
6614* AArch64 Opcodes::              Opcodes
6615* AArch64 Mapping Symbols::      Mapping Symbols
6616
6617
6618File: as.info,  Node: AArch64 Options,  Next: AArch64 Extensions,  Up: AArch64-Dependent
6619
66209.1.1 Options
6621-------------
6622
6623`-EB'
6624     This option specifies that the output generated by the assembler
6625     should be marked as being encoded for a big-endian processor.
6626
6627`-EL'
6628     This option specifies that the output generated by the assembler
6629     should be marked as being encoded for a little-endian processor.
6630
6631`-mabi=ABI'
6632     Specify which ABI the source code uses.  The recognized arguments
6633     are: `ilp32' and `lp64', which decides the generated object file
6634     in ELF32 and ELF64 format respectively.  The default is `lp64'.
6635
6636`-mcpu=PROCESSOR[+EXTENSION...]'
6637     This option specifies the target processor.  The assembler will
6638     issue an error message if an attempt is made to assemble an
6639     instruction which will not execute on the target processor.  The
6640     following processor names are recognized: `cortex-a34',
6641     `cortex-a35', `cortex-a53', `cortex-a55', `cortex-a57',
6642     `cortex-a65', `cortex-a65ae', `cortex-a72', `cortex-a73',
6643     `cortex-a75', `cortex-a76', `cortex-a76ae', `cortex-a77',
6644     `cortex-a78', `cortex-a78ae', `cortex-a78c', `cortex-a510',
6645     `cortex-a710', `ares', `exynos-m1', `falkor', `neoverse-n1',
6646     `neoverse-n2', `neoverse-e1', `neoverse-v1', `qdf24xx', `saphira',
6647     `thunderx', `vulcan', `xgene1' `xgene2', `cortex-r82', `cortex-x1',
6648     and `cortex-x2'.  The special name `all' may be used to allow the
6649     assembler to accept instructions valid for any supported
6650     processor, including all optional extensions.
6651
6652     In addition to the basic instruction set, the assembler can be
6653     told to accept, or restrict, various extension mnemonics that
6654     extend the processor.  *Note AArch64 Extensions::.
6655
6656     If some implementations of a particular processor can have an
6657     extension, then then those extensions are automatically enabled.
6658     Consequently, you will not normally have to specify any additional
6659     extensions.
6660
6661`-march=ARCHITECTURE[+EXTENSION...]'
6662     This option specifies the target architecture.  The assembler will
6663     issue an error message if an attempt is made to assemble an
6664     instruction which will not execute on the target architecture.  The
6665     following architecture names are recognized: `armv8-a',
6666     `armv8.1-a', `armv8.2-a', `armv8.3-a', `armv8.4-a' `armv8.5-a',
6667     `armv8.6-a', `armv8.7-a', `armv8.8-a', `armv8-r', `armv9-a',
6668     `armv9.1-a', `armv9.2-a', and `armv9.3-a'.
6669
6670     If both `-mcpu' and `-march' are specified, the assembler will use
6671     the setting for `-mcpu'.  If neither are specified, the assembler
6672     will default to `-mcpu=all'.
6673
6674     The architecture option can be extended with the same instruction
6675     set extension options as the `-mcpu' option.  Unlike `-mcpu',
6676     extensions are not always enabled by default, *Note AArch64
6677     Extensions::.
6678
6679`-mverbose-error'
6680     This option enables verbose error messages for AArch64 gas.  This
6681     option is enabled by default.
6682
6683`-mno-verbose-error'
6684     This option disables verbose error messages in AArch64 gas.
6685
6686
6687
6688File: as.info,  Node: AArch64 Extensions,  Next: AArch64 Syntax,  Prev: AArch64 Options,  Up: AArch64-Dependent
6689
66909.1.2 Architecture Extensions
6691-----------------------------
6692
6693The table below lists the permitted architecture extensions that are
6694supported by the assembler and the conditions under which they are
6695automatically enabled.
6696
6697   Multiple extensions may be specified, separated by a `+'.  Extension
6698mnemonics may also be removed from those the assembler accepts.  This
6699is done by prepending `no' to the option that adds the extension.
6700Extensions that are removed must be listed after all extensions that
6701have been added.
6702
6703   Enabling an extension that requires other extensions will
6704automatically cause those extensions to be enabled.  Similarly,
6705disabling an extension that is required by other extensions will
6706automatically cause those extensions to be disabled.
6707
6708Extension Minimum      Enabled by   Description
6709          Architecture default
6710----------------------------------------------------------------------------
6711`aes'     ARMv8-A      No           Enable the AES cryptographic
6712                                    extensions. This implies `fp' and
6713                                    `simd'.
6714`bf16'    ARMv8.2-A    ARMv8.6-A    Enable BFloat16 extension.
6715                       or later
6716`compnum' ARMv8.2-A    ARMv8.3-A    Enable the complex number SIMD
6717                       or later     extensions.  This implies `fp16' and
6718                                    `simd'.
6719`crc'     ARMv8-A      ARMv8.1-A    Enable CRC instructions.
6720                       or later
6721`crypto'  ARMv8-A      No           Enable cryptographic extensions.  This
6722                                    implies `fp', `simd',  `aes' and
6723                                    `sha2'.
6724`dotprod' ARMv8.2-A    ARMv8.4-A    Enable the Dot Product extension.
6725                       or later     This implies `simd'.
6726`f32mm'   ARMv8.2-A    No           Enable F32 Matrix Multiply extension.
6727                                    This implies `sve'.
6728`f64mm'   ARMv8.2-A    No           Enable F64 Matrix Multiply extension.
6729                                    This implies `sve'.
6730`flagm'   ARMv8-A      ARMv8.4-A    Enable Flag Manipulation instructions.
6731                       or later
6732`fp16fml' ARMv8.2-A    ARMv8.4-A    Enable ARMv8.2 16-bit floating-point
6733                       or later     multiplication variant support. This
6734                                    implies `fp' and  `fp16'.
6735`fp16'    ARMv8.2-A    ARMv8.2-A    Enable ARMv8.2 16-bit floating-point
6736                       or later     support.  This implies `fp'.
6737`fp'      ARMv8-A      ARMv8-A or   Enable floating-point extensions.
6738                       later
6739`hbc'                  Armv8.8-A    Enable Armv8.8-A hinted conditional
6740                       or later     branch instructions
6741`i8mm'    ARMv8.2-A    ARMv8.6-A    Enable Int8 Matrix Multiply extension.
6742                       or later
6743`lor'     ARMv8-A      ARMv8.1-A    Enable Limited Ordering Regions
6744                       or later     extensions.
6745`ls64'    ARMv8.6-A    ARMv8.7-A    Enable 64 Byte Loads/Stores.
6746                       or later
6747`lse'     ARMv8-A      ARMv8.1-A    Enable Large System extensions.
6748                       or later
6749`memtag'  ARMv8.5-A    No           Enable ARMv8.5-A Memory Tagging
6750                                    Extensions.
6751`mops'                 Armv8.8-A    Enable Armv8.8-A memcpy and memset
6752                       or later     acceleration instructions
6753`pan'     ARMv8-A      ARMv8.1-A    Enable Privileged Access Never support.
6754                       or later
6755`pauth'   ARMv8-A      No           Enable Pointer Authentication.
6756`predres' ARMv8-A      ARMv8.5-A    Enable the Execution and Data and
6757                       or later     Prediction instructions.
6758`profile' ARMv8.2-A    No           Enable statistical profiling
6759                                    extensions.
6760`ras'     ARMv8-A      ARMv8.2-A    Enable the Reliability, Availability
6761                       or later     and Serviceability extension.
6762`rcpc'    ARMv8.2-A    ARMv8.3-A    Enable the weak release consistency
6763                       or later     extension.
6764`rdma'    ARMv8-A      ARMv8.1-A    Enable ARMv8.1 Advanced SIMD
6765                       or later     extensions.  This implies `simd'.
6766`rng'     ARMv8.5-A    No           Enable ARMv8.5-A random number
6767                                    instructions.
6768`sb'      ARMv8-A      ARMv8.5-A    Enable the speculation barrier
6769                       or later     instruction sb.
6770`sha2'    ARMv8-A      No           Enable the SHA2 cryptographic
6771                                    extensions. This implies `fp' and
6772                                    `simd'.
6773`sha3'    ARMv8.2-A    No           Enable the ARMv8.2-A SHA2 and SHA3
6774                                    cryptographic extensions. This implies
6775                                    `fp', `simd' and `sha2'.
6776`simd'    ARMv8-A      ARMv8-A or   Enable Advanced SIMD extensions.  This
6777                       later        implies `fp'.
6778`sm4'     ARMv8.2-A    No           Enable the ARMv8.2-A SM3 and SM4
6779                                    cryptographic extensions. This implies
6780                                    `fp' and `simd'.
6781`sme'     Armv9-A      No           Enable SME Extension.
6782`sme-f64' Armv9-A      No           Enable SME F64 Extension.
6783`sme-i64' Armv9-A      No           Enable SME I64 Extension.
6784`ssbs'    ARMv8-A      ARMv8.5-A    Enable Speculative Store Bypassing
6785                       or later     Safe state read and write.
6786`sve'     ARMv8.2-A    Armv9-A or   Enable the Scalable Vector Extensions.
6787                       later        This implies `fp16',  `simd' and
6788                                    `compnum'.
6789`sve2'    ARMv8-A      Armv9-A or   Enable the SVE2 Extension.  This
6790                       later        implies `sve'.
6791`sve2-aes'ARMv8-A      No           Enable SVE2 AES Extension.  This also
6792                                    enables the .Q->.B form of the
6793                                    `pmullt' and `pmullb' instructions.
6794                                    This implies `aes' and  `sve2'.
6795`sve2-bitperm'ARMv8-A      No           Enable SVE2 BITPERM Extension.
6796`sve2-sha3'ARMv8-A      No           Enable SVE2 SHA3 Extension.  This
6797                                    implies `sha3' and `sve2'.
6798`sve2-sm4'ARMv8-A      No           Enable SVE2 SM4 Extension.  This
6799                                    implies `sm4' and `sve2'.
6800`tme'     ARMv8-A      No           Enable Transactional Memory Extensions.
6801
6802
6803File: as.info,  Node: AArch64 Syntax,  Next: AArch64 Floating Point,  Prev: AArch64 Extensions,  Up: AArch64-Dependent
6804
68059.1.3 Syntax
6806------------
6807
6808* Menu:
6809
6810* AArch64-Chars::                Special Characters
6811* AArch64-Regs::                 Register Names
6812* AArch64-Relocations::	     Relocations
6813
6814
6815File: as.info,  Node: AArch64-Chars,  Next: AArch64-Regs,  Up: AArch64 Syntax
6816
68179.1.3.1 Special Characters
6818..........................
6819
6820The presence of a `//' on a line indicates the start of a comment that
6821extends to the end of the current line.  If a `#' appears as the first
6822character of a line, the whole line is treated as a comment.
6823
6824   The `;' character can be used instead of a newline to separate
6825statements.
6826
6827   The `#' can be optionally used to indicate immediate operands.
6828
6829
6830File: as.info,  Node: AArch64-Regs,  Next: AArch64-Relocations,  Prev: AArch64-Chars,  Up: AArch64 Syntax
6831
68329.1.3.2 Register Names
6833......................
6834
6835Please refer to the section `4.4 Register Names' of `ARMv8 Instruction
6836Set Overview', which is available at `http://infocenter.arm.com'.
6837
6838
6839File: as.info,  Node: AArch64-Relocations,  Prev: AArch64-Regs,  Up: AArch64 Syntax
6840
68419.1.3.3 Relocations
6842...................
6843
6844Relocations for `MOVZ' and `MOVK' instructions can be generated by
6845prefixing the label with `#:abs_g2:' etc.  For example to load the
684648-bit absolute address of FOO into x0:
6847
6848             movz x0, #:abs_g2:foo		// bits 32-47, overflow check
6849             movk x0, #:abs_g1_nc:foo	// bits 16-31, no overflow check
6850             movk x0, #:abs_g0_nc:foo	// bits  0-15, no overflow check
6851
6852   Relocations for `ADRP', and `ADD', `LDR' or `STR' instructions can
6853be generated by prefixing the label with `:pg_hi21:' and `#:lo12:'
6854respectively.
6855
6856   For example to use 33-bit (+/-4GB) pc-relative addressing to load
6857the address of FOO into x0:
6858
6859             adrp x0, :pg_hi21:foo
6860             add  x0, x0, #:lo12:foo
6861
6862   Or to load the value of FOO into x0:
6863
6864             adrp x0, :pg_hi21:foo
6865             ldr  x0, [x0, #:lo12:foo]
6866
6867   Note that `:pg_hi21:' is optional.
6868
6869             adrp x0, foo
6870
6871   is equivalent to
6872
6873             adrp x0, :pg_hi21:foo
6874
6875
6876File: as.info,  Node: AArch64 Floating Point,  Next: AArch64 Directives,  Prev: AArch64 Syntax,  Up: AArch64-Dependent
6877
68789.1.4 Floating Point
6879--------------------
6880
6881The AArch64 architecture uses IEEE floating-point numbers.
6882
6883
6884File: as.info,  Node: AArch64 Directives,  Next: AArch64 Opcodes,  Prev: AArch64 Floating Point,  Up: AArch64-Dependent
6885
68869.1.5 AArch64 Machine Directives
6887--------------------------------
6888
6889`.arch NAME'
6890     Select the target architecture.  Valid values for NAME are the
6891     same as for the `-march' command-line option.
6892
6893     Specifying `.arch' clears any previously selected architecture
6894     extensions.
6895
6896`.arch_extension NAME'
6897     Add or remove an architecture extension to the target
6898     architecture.  Valid values for NAME are the same as those
6899     accepted as architectural extensions by the `-mcpu' command-line
6900     option.
6901
6902     `.arch_extension' may be used multiple times to add or remove
6903     extensions incrementally to the architecture being compiled for.
6904
6905`.bss'
6906     This directive switches to the `.bss' section.
6907
6908`.cpu NAME'
6909     Set the target processor.  Valid values for NAME are the same as
6910     those accepted by the `-mcpu=' command-line option.
6911
6912`.dword EXPRESSIONS'
6913     The `.dword' directive produces 64 bit values.
6914
6915`.even'
6916     The `.even' directive aligns the output on the next even byte
6917     boundary.
6918
6919`.float16 VALUE [,...,VALUE_N]'
6920     Place the half precision floating point representation of one or
6921     more floating-point values into the current section.  The format
6922     used to encode the floating point values is always the IEEE
6923     754-2008 half precision floating point format.
6924
6925`.inst EXPRESSIONS'
6926     Inserts the expressions into the output as if they were
6927     instructions, rather than data.
6928
6929`.ltorg'
6930     This directive causes the current contents of the literal pool to
6931     be dumped into the current section (which is assumed to be the
6932     .text section) at the current location (aligned to a word
6933     boundary).  GAS maintains a separate literal pool for each section
6934     and each sub-section.  The `.ltorg' directive will only affect the
6935     literal pool of the current section and sub-section.  At the end
6936     of assembly all remaining, un-empty literal pools will
6937     automatically be dumped.
6938
6939     Note - older versions of GAS would dump the current literal pool
6940     any time a section change occurred.  This is no longer done, since
6941     it prevents accurate control of the placement of literal pools.
6942
6943`.pool'
6944     This is a synonym for .ltorg.
6945
6946`NAME .req REGISTER NAME'
6947     This creates an alias for REGISTER NAME called NAME.  For example:
6948
6949                  foo .req w0
6950
6951     ip0, ip1, lr and fp are automatically defined to alias to X16,
6952     X17, X30 and X29 respectively.
6953
6954``.tlsdescadd''
6955     Emits a TLSDESC_ADD reloc on the next instruction.
6956
6957``.tlsdesccall''
6958     Emits a TLSDESC_CALL reloc on the next instruction.
6959
6960``.tlsdescldr''
6961     Emits a TLSDESC_LDR reloc on the next instruction.
6962
6963`.unreq ALIAS-NAME'
6964     This undefines a register alias which was previously defined using
6965     the `req' directive.  For example:
6966
6967                  foo .req w0
6968                  .unreq foo
6969
6970     An error occurs if the name is undefined.  Note - this pseudo op
6971     can be used to delete builtin in register name aliases (eg 'w0').
6972     This should only be done if it is really necessary.
6973
6974`.variant_pcs SYMBOL'
6975     This directive marks SYMBOL referencing a function that may follow
6976     a variant procedure call standard with different register usage
6977     convention from the base procedure call standard.
6978
6979`.xword EXPRESSIONS'
6980     The `.xword' directive produces 64 bit values.  This is the same
6981     as the `.dword' directive.
6982
6983``.cfi_b_key_frame''
6984     The `.cfi_b_key_frame' directive inserts a 'B' character into the
6985     CIE corresponding to the current frame's FDE, meaning that its
6986     return address has been signed with the B-key.  If two frames are
6987     signed with differing keys then they will not share the same CIE.
6988     This information is intended to be used by the stack unwinder in
6989     order to properly authenticate return addresses.
6990
6991
6992
6993File: as.info,  Node: AArch64 Opcodes,  Next: AArch64 Mapping Symbols,  Prev: AArch64 Directives,  Up: AArch64-Dependent
6994
69959.1.6 Opcodes
6996-------------
6997
6998GAS implements all the standard AArch64 opcodes.  It also implements
6999several pseudo opcodes, including several synthetic load instructions.
7000
7001`LDR ='
7002            ldr <register> , =<expression>
7003
7004     The constant expression will be placed into the nearest literal
7005     pool (if it not already there) and a PC-relative LDR instruction
7006     will be generated.
7007
7008
7009   For more information on the AArch64 instruction set and assembly
7010language notation, see `ARMv8 Instruction Set Overview' available at
7011`http://infocenter.arm.com'.
7012
7013
7014File: as.info,  Node: AArch64 Mapping Symbols,  Prev: AArch64 Opcodes,  Up: AArch64-Dependent
7015
70169.1.7 Mapping Symbols
7017---------------------
7018
7019The AArch64 ELF specification requires that special symbols be inserted
7020into object files to mark certain features:
7021
7022`$x'
7023     At the start of a region of code containing AArch64 instructions.
7024
7025`$d'
7026     At the start of a region of data.
7027
7028
7029
7030File: as.info,  Node: Alpha-Dependent,  Next: ARC-Dependent,  Prev: AArch64-Dependent,  Up: Machine Dependencies
7031
70329.2 Alpha Dependent Features
7033============================
7034
7035* Menu:
7036
7037* Alpha Notes::                Notes
7038* Alpha Options::              Options
7039* Alpha Syntax::               Syntax
7040* Alpha Floating Point::       Floating Point
7041* Alpha Directives::           Alpha Machine Directives
7042* Alpha Opcodes::              Opcodes
7043
7044
7045File: as.info,  Node: Alpha Notes,  Next: Alpha Options,  Up: Alpha-Dependent
7046
70479.2.1 Notes
7048-----------
7049
7050The documentation here is primarily for the ELF object format.  `as'
7051also supports the ECOFF and EVAX formats, but features specific to
7052these formats are not yet documented.
7053
7054
7055File: as.info,  Node: Alpha Options,  Next: Alpha Syntax,  Prev: Alpha Notes,  Up: Alpha-Dependent
7056
70579.2.2 Options
7058-------------
7059
7060`-mCPU'
7061     This option specifies the target processor.  If an attempt is made
7062     to assemble an instruction which will not execute on the target
7063     processor, the assembler may either expand the instruction as a
7064     macro or issue an error message.  This option is equivalent to the
7065     `.arch' directive.
7066
7067     The following processor names are recognized: `21064', `21064a',
7068     `21066', `21068', `21164', `21164a', `21164pc', `21264', `21264a',
7069     `21264b', `ev4', `ev5', `lca45', `ev5', `ev56', `pca56', `ev6',
7070     `ev67', `ev68'.  The special name `all' may be used to allow the
7071     assembler to accept instructions valid for any Alpha processor.
7072
7073     In order to support existing practice in OSF/1 with respect to
7074     `.arch', and existing practice within `MILO' (the Linux ARC
7075     bootloader), the numbered processor names (e.g. 21064) enable the
7076     processor-specific PALcode instructions, while the
7077     "electro-vlasic" names (e.g. `ev4') do not.
7078
7079`-mdebug'
7080`-no-mdebug'
7081     Enables or disables the generation of `.mdebug' encapsulation for
7082     stabs directives and procedure descriptors.  The default is to
7083     automatically enable `.mdebug' when the first stabs directive is
7084     seen.
7085
7086`-relax'
7087     This option forces all relocations to be put into the object file,
7088     instead of saving space and resolving some relocations at assembly
7089     time.  Note that this option does not propagate all symbol
7090     arithmetic into the object file, because not all symbol arithmetic
7091     can be represented.  However, the option can still be useful in
7092     specific applications.
7093
7094`-replace'
7095`-noreplace'
7096     Enables or disables the optimization of procedure calls, both at
7097     assemblage and at link time.  These options are only available for
7098     VMS targets and `-replace' is the default.  See section 1.4.1 of
7099     the OpenVMS Linker Utility Manual.
7100
7101`-g'
7102     This option is used when the compiler generates debug information.
7103     When `gcc' is using `mips-tfile' to generate debug information
7104     for ECOFF, local labels must be passed through to the object file.
7105     Otherwise this option has no effect.
7106
7107`-GSIZE'
7108     A local common symbol larger than SIZE is placed in `.bss', while
7109     smaller symbols are placed in `.sbss'.
7110
7111`-F'
7112`-32addr'
7113     These options are ignored for backward compatibility.
7114
7115
7116File: as.info,  Node: Alpha Syntax,  Next: Alpha Floating Point,  Prev: Alpha Options,  Up: Alpha-Dependent
7117
71189.2.3 Syntax
7119------------
7120
7121The assembler syntax closely follow the Alpha Reference Manual;
7122assembler directives and general syntax closely follow the OSF/1 and
7123OpenVMS syntax, with a few differences for ELF.
7124
7125* Menu:
7126
7127* Alpha-Chars::                Special Characters
7128* Alpha-Regs::                 Register Names
7129* Alpha-Relocs::               Relocations
7130
7131
7132File: as.info,  Node: Alpha-Chars,  Next: Alpha-Regs,  Up: Alpha Syntax
7133
71349.2.3.1 Special Characters
7135..........................
7136
7137`#' is the line comment character.  Note that if `#' is the first
7138character on a line then it can also be a logical line number directive
7139(*note Comments::) or a preprocessor control command (*note
7140Preprocessing::).
7141
7142   `;' can be used instead of a newline to separate statements.
7143
7144
7145File: as.info,  Node: Alpha-Regs,  Next: Alpha-Relocs,  Prev: Alpha-Chars,  Up: Alpha Syntax
7146
71479.2.3.2 Register Names
7148......................
7149
7150The 32 integer registers are referred to as `$N' or `$rN'.  In
7151addition, registers 15, 28, 29, and 30 may be referred to by the
7152symbols `$fp', `$at', `$gp', and `$sp' respectively.
7153
7154   The 32 floating-point registers are referred to as `$fN'.
7155
7156
7157File: as.info,  Node: Alpha-Relocs,  Prev: Alpha-Regs,  Up: Alpha Syntax
7158
71599.2.3.3 Relocations
7160...................
7161
7162Some of these relocations are available for ECOFF, but mostly only for
7163ELF.  They are modeled after the relocation format introduced in
7164Digital Unix 4.0, but there are additions.
7165
7166   The format is `!TAG' or `!TAG!NUMBER' where TAG is the name of the
7167relocation.  In some cases NUMBER is used to relate specific
7168instructions.
7169
7170   The relocation is placed at the end of the instruction like so:
7171
7172     ldah  $0,a($29)    !gprelhigh
7173     lda   $0,a($0)     !gprellow
7174     ldq   $1,b($29)    !literal!100
7175     ldl   $2,0($1)     !lituse_base!100
7176
7177`!literal'
7178`!literal!N'
7179     Used with an `ldq' instruction to load the address of a symbol
7180     from the GOT.
7181
7182     A sequence number N is optional, and if present is used to pair
7183     `lituse' relocations with this `literal' relocation.  The `lituse'
7184     relocations are used by the linker to optimize the code based on
7185     the final location of the symbol.
7186
7187     Note that these optimizations are dependent on the data flow of the
7188     program.  Therefore, if _any_ `lituse' is paired with a `literal'
7189     relocation, then _all_ uses of the register set by the `literal'
7190     instruction must also be marked with `lituse' relocations.  This
7191     is because the original `literal' instruction may be deleted or
7192     transformed into another instruction.
7193
7194     Also note that there may be a one-to-many relationship between
7195     `literal' and `lituse', but not a many-to-one.  That is, if there
7196     are two code paths that load up the same address and feed the
7197     value to a single use, then the use may not use a `lituse'
7198     relocation.
7199
7200`!lituse_base!N'
7201     Used with any memory format instruction (e.g. `ldl') to indicate
7202     that the literal is used for an address load.  The offset field of
7203     the instruction must be zero.  During relaxation, the code may be
7204     altered to use a gp-relative load.
7205
7206`!lituse_jsr!N'
7207     Used with a register branch format instruction (e.g. `jsr') to
7208     indicate that the literal is used for a call.  During relaxation,
7209     the code may be altered to use a direct branch (e.g. `bsr').
7210
7211`!lituse_jsrdirect!N'
7212     Similar to `lituse_jsr', but also that this call cannot be vectored
7213     through a PLT entry.  This is useful for functions with special
7214     calling conventions which do not allow the normal call-clobbered
7215     registers to be clobbered.
7216
7217`!lituse_bytoff!N'
7218     Used with a byte mask instruction (e.g. `extbl') to indicate that
7219     only the low 3 bits of the address are relevant.  During
7220     relaxation, the code may be altered to use an immediate instead of
7221     a register shift.
7222
7223`!lituse_addr!N'
7224     Used with any other instruction to indicate that the original
7225     address is in fact used, and the original `ldq' instruction may
7226     not be altered or deleted.  This is useful in conjunction with
7227     `lituse_jsr' to test whether a weak symbol is defined.
7228
7229          ldq  $27,foo($29)   !literal!1
7230          beq  $27,is_undef   !lituse_addr!1
7231          jsr  $26,($27),foo  !lituse_jsr!1
7232
7233`!lituse_tlsgd!N'
7234     Used with a register branch format instruction to indicate that the
7235     literal is the call to `__tls_get_addr' used to compute the
7236     address of the thread-local storage variable whose descriptor was
7237     loaded with `!tlsgd!N'.
7238
7239`!lituse_tlsldm!N'
7240     Used with a register branch format instruction to indicate that the
7241     literal is the call to `__tls_get_addr' used to compute the
7242     address of the base of the thread-local storage block for the
7243     current module.  The descriptor for the module must have been
7244     loaded with `!tlsldm!N'.
7245
7246`!gpdisp!N'
7247     Used with `ldah' and `lda' to load the GP from the current
7248     address, a-la the `ldgp' macro.  The source register for the
7249     `ldah' instruction must contain the address of the `ldah'
7250     instruction.  There must be exactly one `lda' instruction paired
7251     with the `ldah' instruction, though it may appear anywhere in the
7252     instruction stream.  The immediate operands must be zero.
7253
7254          bsr  $26,foo
7255          ldah $29,0($26)     !gpdisp!1
7256          lda  $29,0($29)     !gpdisp!1
7257
7258`!gprelhigh'
7259     Used with an `ldah' instruction to add the high 16 bits of a
7260     32-bit displacement from the GP.
7261
7262`!gprellow'
7263     Used with any memory format instruction to add the low 16 bits of a
7264     32-bit displacement from the GP.
7265
7266`!gprel'
7267     Used with any memory format instruction to add a 16-bit
7268     displacement from the GP.
7269
7270`!samegp'
7271     Used with any branch format instruction to skip the GP load at the
7272     target address.  The referenced symbol must have the same GP as the
7273     source object file, and it must be declared to either not use `$27'
7274     or perform a standard GP load in the first two instructions via the
7275     `.prologue' directive.
7276
7277`!tlsgd'
7278`!tlsgd!N'
7279     Used with an `lda' instruction to load the address of a TLS
7280     descriptor for a symbol in the GOT.
7281
7282     The sequence number N is optional, and if present it used to pair
7283     the descriptor load with both the `literal' loading the address of
7284     the `__tls_get_addr' function and the `lituse_tlsgd' marking the
7285     call to that function.
7286
7287     For proper relaxation, both the `tlsgd', `literal' and `lituse'
7288     relocations must be in the same extended basic block.  That is,
7289     the relocation with the lowest address must be executed first at
7290     runtime.
7291
7292`!tlsldm'
7293`!tlsldm!N'
7294     Used with an `lda' instruction to load the address of a TLS
7295     descriptor for the current module in the GOT.
7296
7297     Similar in other respects to `tlsgd'.
7298
7299`!gotdtprel'
7300     Used with an `ldq' instruction to load the offset of the TLS
7301     symbol within its module's thread-local storage block.  Also known
7302     as the dynamic thread pointer offset or dtp-relative offset.
7303
7304`!dtprelhi'
7305`!dtprello'
7306`!dtprel'
7307     Like `gprel' relocations except they compute dtp-relative offsets.
7308
7309`!gottprel'
7310     Used with an `ldq' instruction to load the offset of the TLS
7311     symbol from the thread pointer.  Also known as the tp-relative
7312     offset.
7313
7314`!tprelhi'
7315`!tprello'
7316`!tprel'
7317     Like `gprel' relocations except they compute tp-relative offsets.
7318
7319
7320File: as.info,  Node: Alpha Floating Point,  Next: Alpha Directives,  Prev: Alpha Syntax,  Up: Alpha-Dependent
7321
73229.2.4 Floating Point
7323--------------------
7324
7325The Alpha family uses both IEEE and VAX floating-point numbers.
7326
7327
7328File: as.info,  Node: Alpha Directives,  Next: Alpha Opcodes,  Prev: Alpha Floating Point,  Up: Alpha-Dependent
7329
73309.2.5 Alpha Assembler Directives
7331--------------------------------
7332
7333`as' for the Alpha supports many additional directives for
7334compatibility with the native assembler.  This section describes them
7335only briefly.
7336
7337   These are the additional directives in `as' for the Alpha:
7338
7339`.arch CPU'
7340     Specifies the target processor.  This is equivalent to the `-mCPU'
7341     command-line option.  *Note Options: Alpha Options, for a list of
7342     values for CPU.
7343
7344`.ent FUNCTION[, N]'
7345     Mark the beginning of FUNCTION.  An optional number may follow for
7346     compatibility with the OSF/1 assembler, but is ignored.  When
7347     generating `.mdebug' information, this will create a procedure
7348     descriptor for the function.  In ELF, it will mark the symbol as a
7349     function a-la the generic `.type' directive.
7350
7351`.end FUNCTION'
7352     Mark the end of FUNCTION.  In ELF, it will set the size of the
7353     symbol a-la the generic `.size' directive.
7354
7355`.mask MASK, OFFSET'
7356     Indicate which of the integer registers are saved in the current
7357     function's stack frame.  MASK is interpreted a bit mask in which
7358     bit N set indicates that register N is saved.  The registers are
7359     saved in a block located OFFSET bytes from the "canonical frame
7360     address" (CFA) which is the value of the stack pointer on entry to
7361     the function.  The registers are saved sequentially, except that
7362     the return address register (normally `$26') is saved first.
7363
7364     This and the other directives that describe the stack frame are
7365     currently only used when generating `.mdebug' information.  They
7366     may in the future be used to generate DWARF2 `.debug_frame' unwind
7367     information for hand written assembly.
7368
7369`.fmask MASK, OFFSET'
7370     Indicate which of the floating-point registers are saved in the
7371     current stack frame.  The MASK and OFFSET parameters are
7372     interpreted as with `.mask'.
7373
7374`.frame FRAMEREG, FRAMEOFFSET, RETREG[, ARGOFFSET]'
7375     Describes the shape of the stack frame.  The frame pointer in use
7376     is FRAMEREG; normally this is either `$fp' or `$sp'.  The frame
7377     pointer is FRAMEOFFSET bytes below the CFA.  The return address is
7378     initially located in RETREG until it is saved as indicated in
7379     `.mask'.  For compatibility with OSF/1 an optional ARGOFFSET
7380     parameter is accepted and ignored.  It is believed to indicate the
7381     offset from the CFA to the saved argument registers.
7382
7383`.prologue N'
7384     Indicate that the stack frame is set up and all registers have been
7385     spilled.  The argument N indicates whether and how the function
7386     uses the incoming "procedure vector" (the address of the called
7387     function) in `$27'.  0 indicates that `$27' is not used; 1
7388     indicates that the first two instructions of the function use `$27'
7389     to perform a load of the GP register; 2 indicates that `$27' is
7390     used in some non-standard way and so the linker cannot elide the
7391     load of the procedure vector during relaxation.
7392
7393`.usepv FUNCTION, WHICH'
7394     Used to indicate the use of the `$27' register, similar to
7395     `.prologue', but without the other semantics of needing to be
7396     inside an open `.ent'/`.end' block.
7397
7398     The WHICH argument should be either `no', indicating that `$27' is
7399     not used, or `std', indicating that the first two instructions of
7400     the function perform a GP load.
7401
7402     One might use this directive instead of `.prologue' if you are
7403     also using dwarf2 CFI directives.
7404
7405`.gprel32 EXPRESSION'
7406     Computes the difference between the address in EXPRESSION and the
7407     GP for the current object file, and stores it in 4 bytes.  In
7408     addition to being smaller than a full 8 byte address, this also
7409     does not require a dynamic relocation when used in a shared
7410     library.
7411
7412`.t_floating EXPRESSION'
7413     Stores EXPRESSION as an IEEE double precision value.
7414
7415`.s_floating EXPRESSION'
7416     Stores EXPRESSION as an IEEE single precision value.
7417
7418`.f_floating EXPRESSION'
7419     Stores EXPRESSION as a VAX F format value.
7420
7421`.g_floating EXPRESSION'
7422     Stores EXPRESSION as a VAX G format value.
7423
7424`.d_floating EXPRESSION'
7425     Stores EXPRESSION as a VAX D format value.
7426
7427`.set FEATURE'
7428     Enables or disables various assembler features.  Using the positive
7429     name of the feature enables while using `noFEATURE' disables.
7430
7431    `at'
7432          Indicates that macro expansions may clobber the "assembler
7433          temporary" (`$at' or `$28') register.  Some macros may not be
7434          expanded without this and will generate an error message if
7435          `noat' is in effect.  When `at' is in effect, a warning will
7436          be generated if `$at' is used by the programmer.
7437
7438    `macro'
7439          Enables the expansion of macro instructions.  Note that
7440          variants of real instructions, such as `br label' vs `br
7441          $31,label' are considered alternate forms and not macros.
7442
7443    `move'
7444    `reorder'
7445    `volatile'
7446          These control whether and how the assembler may re-order
7447          instructions.  Accepted for compatibility with the OSF/1
7448          assembler, but `as' does not do instruction scheduling, so
7449          these features are ignored.
7450
7451   The following directives are recognized for compatibility with the
7452OSF/1 assembler but are ignored.
7453
7454     .proc           .aproc
7455     .reguse         .livereg
7456     .option         .aent
7457     .ugen           .eflag
7458     .alias          .noalias
7459
7460
7461File: as.info,  Node: Alpha Opcodes,  Prev: Alpha Directives,  Up: Alpha-Dependent
7462
74639.2.6 Opcodes
7464-------------
7465
7466For detailed information on the Alpha machine instruction set, see the
7467Alpha Architecture Handbook
7468(ftp://ftp.digital.com/pub/Digital/info/semiconductor/literature/alphaahb.pdf).
7469
7470
7471File: as.info,  Node: ARC-Dependent,  Next: ARM-Dependent,  Prev: Alpha-Dependent,  Up: Machine Dependencies
7472
74739.3 ARC Dependent Features
7474==========================
7475
7476* Menu:
7477
7478* ARC Options::              Options
7479* ARC Syntax::               Syntax
7480* ARC Directives::           ARC Machine Directives
7481* ARC Modifiers::            ARC Assembler Modifiers
7482* ARC Symbols::              ARC Pre-defined Symbols
7483* ARC Opcodes::              Opcodes
7484
7485
7486File: as.info,  Node: ARC Options,  Next: ARC Syntax,  Up: ARC-Dependent
7487
74889.3.1 Options
7489-------------
7490
7491The following options control the type of CPU for which code is
7492assembled, and generic constraints on the code generated:
7493
7494`-mcpu=CPU'
7495     Set architecture type and register usage for CPU.  There are also
7496     shortcut alias options available for backward compatibility and
7497     convenience.  Supported values for CPU are
7498
7499    `arc600'
7500          Assemble for ARC 600.  Aliases: `-mA6', `-mARC600'.
7501
7502    `arc600_norm'
7503          Assemble for ARC 600 with norm instructions.
7504
7505    `arc600_mul64'
7506          Assemble for ARC 600 with mul64 instructions.
7507
7508    `arc600_mul32x16'
7509          Assemble for ARC 600 with mul32x16 instructions.
7510
7511    `arc601'
7512          Assemble for ARC 601.  Alias: `-mARC601'.
7513
7514    `arc601_norm'
7515          Assemble for ARC 601 with norm instructions.
7516
7517    `arc601_mul64'
7518          Assemble for ARC 601 with mul64 instructions.
7519
7520    `arc601_mul32x16'
7521          Assemble for ARC 601 with mul32x16 instructions.
7522
7523    `arc700'
7524          Assemble for ARC 700.  Aliases: `-mA7', `-mARC700'.
7525
7526    `arcem'
7527          Assemble for ARC EM.  Aliases: `-mEM'
7528
7529    `em'
7530          Assemble for ARC EM, identical as arcem variant.
7531
7532    `em4'
7533          Assemble for ARC EM with code-density instructions.
7534
7535    `em4_dmips'
7536          Assemble for ARC EM with code-density instructions.
7537
7538    `em4_fpus'
7539          Assemble for ARC EM with code-density instructions.
7540
7541    `em4_fpuda'
7542          Assemble for ARC EM with code-density, and double-precision
7543          assist instructions.
7544
7545    `quarkse_em'
7546          Assemble for QuarkSE-EM cpu.
7547
7548    `archs'
7549          Assemble for ARC HS.  Aliases: `-mHS', `-mav2hs'.
7550
7551    `hs'
7552          Assemble for ARC HS.
7553
7554    `hs34'
7555          Assemble for ARC HS34.
7556
7557    `hs38'
7558          Assemble for ARC HS38.
7559
7560    `hs38_linux'
7561          Assemble for ARC HS38 with floating point support on.
7562
7563    `nps400'
7564          Assemble for ARC 700 with NPS-400 extended instructions.
7565
7566
7567     Note: the `.cpu' directive (*note ARC Directives::) can to be used
7568     to select a core variant from within assembly code.
7569
7570`-EB'
7571     This option specifies that the output generated by the assembler
7572     should be marked as being encoded for a big-endian processor.
7573
7574`-EL'
7575     This option specifies that the output generated by the assembler
7576     should be marked as being encoded for a little-endian processor -
7577     this is the default.
7578
7579`-mcode-density'
7580     This option turns on Code Density instructions.  Only valid for
7581     ARC EM processors.
7582
7583`-mrelax'
7584     Enable support for assembly-time relaxation.  The assembler will
7585     replace a longer version of an instruction with a shorter one,
7586     whenever it is possible.
7587
7588`-mnps400'
7589     Enable support for NPS-400 extended instructions.
7590
7591`-mspfp'
7592     Enable support for single-precision floating point instructions.
7593
7594`-mdpfp'
7595     Enable support for double-precision floating point instructions.
7596
7597`-mfpuda'
7598     Enable support for double-precision assist floating point
7599     instructions.  Only valid for ARC EM processors.
7600
7601
7602
7603File: as.info,  Node: ARC Syntax,  Next: ARC Directives,  Prev: ARC Options,  Up: ARC-Dependent
7604
76059.3.2 Syntax
7606------------
7607
7608* Menu:
7609
7610* ARC-Chars::                Special Characters
7611* ARC-Regs::                 Register Names
7612
7613
7614File: as.info,  Node: ARC-Chars,  Next: ARC-Regs,  Up: ARC Syntax
7615
76169.3.2.1 Special Characters
7617..........................
7618
7619`%'
7620     A register name can optionally be prefixed by a `%' character.  So
7621     register `%r0' is equivalent to `r0' in the assembly code.
7622
7623`#'
7624     The presence of a `#' character within a line (but not at the
7625     start of a line) indicates the start of a comment that extends to
7626     the end of the current line.
7627
7628     _Note:_ if a line starts with a `#' character then it can also be
7629     a logical line number directive (*note Comments::) or a
7630     preprocessor control command (*note Preprocessing::).
7631
7632`@'
7633     Prefixing an operand with an `@' specifies that the operand is a
7634     symbol and not a register.  This is how the assembler disambiguates
7635     the use of an ARC register name as a symbol.  So the instruction
7636          mov r0, @r0
7637     moves the address of symbol `r0' into register `r0'.
7638
7639``'
7640     The ``' (backtick) character is used to separate statements on a
7641     single line.
7642
7643`-'
7644     Used as a separator to obtain a sequence of commands from a C
7645     preprocessor macro.
7646
7647
7648
7649File: as.info,  Node: ARC-Regs,  Prev: ARC-Chars,  Up: ARC Syntax
7650
76519.3.2.2 Register Names
7652......................
7653
7654The ARC assembler uses the following register names for its core
7655registers:
7656
7657`r0-r31'
7658     The core general registers.  Registers `r26' through `r31' have
7659     special functions, and are usually referred to by those synonyms.
7660
7661`gp'
7662     The global pointer and a synonym for `r26'.
7663
7664`fp'
7665     The frame pointer and a synonym for `r27'.
7666
7667`sp'
7668     The stack pointer and a synonym for `r28'.
7669
7670`ilink1'
7671     For ARC 600 and ARC 700, the level 1 interrupt link register and a
7672     synonym for `r29'.  Not supported for ARCv2.
7673
7674`ilink'
7675     For ARCv2, the interrupt link register and a synonym for `r29'.
7676     Not supported for ARC 600 and ARC 700.
7677
7678`ilink2'
7679     For ARC 600 and ARC 700, the level 2 interrupt link register and a
7680     synonym for `r30'.  Not supported for ARC v2.
7681
7682`blink'
7683     The link register and a synonym for `r31'.
7684
7685`r32-r59'
7686     The extension core registers.
7687
7688`lp_count'
7689     The loop count register.
7690
7691`pcl'
7692     The word aligned program counter.
7693
7694
7695   In addition the ARC processor has a large number of _auxiliary
7696registers_.  The precise set depends on the extensions being supported,
7697but the following baseline set are always defined:
7698
7699`identity'
7700     Processor Identification register.  Auxiliary register address 0x4.
7701
7702`pc'
7703     Program Counter.  Auxiliary register address 0x6.
7704
7705`status32'
7706     Status register.  Auxiliary register address 0x0a.
7707
7708`bta'
7709     Branch Target Address.  Auxiliary register address 0x412.
7710
7711`ecr'
7712     Exception Cause Register.  Auxiliary register address 0x403.
7713
7714`int_vector_base'
7715     Interrupt Vector Base address.  Auxiliary register address 0x25.
7716
7717`status32_p0'
7718     Stored STATUS32 register on entry to level P0 interrupts.
7719     Auxiliary register address 0xb.
7720
7721`aux_user_sp'
7722     Saved User Stack Pointer.  Auxiliary register address 0xd.
7723
7724`eret'
7725     Exception Return Address.  Auxiliary register address 0x400.
7726
7727`erbta'
7728     BTA saved on exception entry.  Auxiliary register address 0x401.
7729
7730`erstatus'
7731     STATUS32 saved on exception.  Auxiliary register address 0x402.
7732
7733`bcr_ver'
7734     Build Configuration Registers Version.  Auxiliary register address
7735     0x60.
7736
7737`bta_link_build'
7738     Build configuration for: BTA Registers.  Auxiliary register
7739     address 0x63.
7740
7741`vecbase_ac_build'
7742     Build configuration for: Interrupts.  Auxiliary register address
7743     0x68.
7744
7745`rf_build'
7746     Build configuration for: Core Registers.  Auxiliary register
7747     address 0x6e.
7748
7749`dccm_build'
7750     DCCM RAM Configuration Register.  Auxiliary register address 0xc1.
7751
7752
7753   Additional auxiliary register names are defined according to the
7754processor architecture version and extensions selected by the options.
7755
7756
7757File: as.info,  Node: ARC Directives,  Next: ARC Modifiers,  Prev: ARC Syntax,  Up: ARC-Dependent
7758
77599.3.3 ARC Machine Directives
7760----------------------------
7761
7762The ARC version of `as' supports the following additional machine
7763directives:
7764
7765`.lcomm SYMBOL, LENGTH[, ALIGNMENT]'
7766     Reserve LENGTH (an absolute expression) bytes for a local common
7767     denoted by SYMBOL.  The section and value of SYMBOL are those of
7768     the new local common.  The addresses are allocated in the bss
7769     section, so that at run-time the bytes start off zeroed.  Since
7770     SYMBOL is not declared global, it is normally not visible to `ld'.
7771     The optional third parameter, ALIGNMENT, specifies the desired
7772     alignment of the symbol in the bss section, specified as a byte
7773     boundary (for example, an alignment of 16 means that the least
7774     significant 4 bits of the address should be zero).  The alignment
7775     must be an absolute expression, and it must be a power of two.  If
7776     no alignment is specified, as will set the alignment to the
7777     largest power of two less than or equal to the size of the symbol,
7778     up to a maximum of 16.
7779
7780`.lcommon SYMBOL, LENGTH[, ALIGNMENT]'
7781     The same as `lcomm' directive.
7782
7783`.cpu CPU'
7784     The `.cpu' directive must be followed by the desired core version.
7785     Permitted values for CPU are:
7786    `ARC600'
7787          Assemble for the ARC600 instruction set.
7788
7789    `arc600_norm'
7790          Assemble for ARC 600 with norm instructions.
7791
7792    `arc600_mul64'
7793          Assemble for ARC 600 with mul64 instructions.
7794
7795    `arc600_mul32x16'
7796          Assemble for ARC 600 with mul32x16 instructions.
7797
7798    `arc601'
7799          Assemble for ARC 601 instruction set.
7800
7801    `arc601_norm'
7802          Assemble for ARC 601 with norm instructions.
7803
7804    `arc601_mul64'
7805          Assemble for ARC 601 with mul64 instructions.
7806
7807    `arc601_mul32x16'
7808          Assemble for ARC 601 with mul32x16 instructions.
7809
7810    `ARC700'
7811          Assemble for the ARC700 instruction set.
7812
7813    `NPS400'
7814          Assemble for the NPS400 instruction set.
7815
7816    `EM'
7817          Assemble for the ARC EM instruction set.
7818
7819    `arcem'
7820          Assemble for ARC EM instruction set
7821
7822    `em4'
7823          Assemble for ARC EM with code-density instructions.
7824
7825    `em4_dmips'
7826          Assemble for ARC EM with code-density instructions.
7827
7828    `em4_fpus'
7829          Assemble for ARC EM with code-density instructions.
7830
7831    `em4_fpuda'
7832          Assemble for ARC EM with code-density, and double-precision
7833          assist instructions.
7834
7835    `quarkse_em'
7836          Assemble for QuarkSE-EM instruction set.
7837
7838    `HS'
7839          Assemble for the ARC HS instruction set.
7840
7841    `archs'
7842          Assemble for ARC HS instruction set.
7843
7844    `hs'
7845          Assemble for ARC HS instruction set.
7846
7847    `hs34'
7848          Assemble for ARC HS34 instruction set.
7849
7850    `hs38'
7851          Assemble for ARC HS38 instruction set.
7852
7853    `hs38_linux'
7854          Assemble for ARC HS38 with floating point support on.
7855
7856
7857     Note: the `.cpu' directive overrides the command-line option
7858     `-mcpu=CPU'; a warning is emitted when the version is not
7859     consistent between the two.
7860
7861`.extAuxRegister NAME, ADDR, MODE'
7862     Auxiliary registers can be defined in the assembler source code by
7863     using this directive.  The first parameter, NAME, is the name of
7864     the new auxiliary register.  The second parameter, ADDR, is
7865     address the of the auxiliary register.  The third parameter, MODE,
7866     specifies whether the register is readable and/or writable and is
7867     one of:
7868    `r'
7869          Read only;
7870
7871    `w'
7872          Write only;
7873
7874    `r|w'
7875          Read and write.
7876
7877
7878     For example:
7879          	.extAuxRegister mulhi, 0x12, w
7880     specifies a write only extension auxiliary register, MULHI at
7881     address 0x12.
7882
7883`.extCondCode SUFFIX, VAL'
7884     ARC supports extensible condition codes.  This directive defines a
7885     new condition code, to be known by the suffix, SUFFIX and will
7886     depend on the value, VAL in the condition code.
7887
7888     For example:
7889          	.extCondCode is_busy,0x14
7890          	add.is_busy  r1,r2,r3
7891     will only execute the `add' instruction if the condition code
7892     value is 0x14.
7893
7894`.extCoreRegister NAME, REGNUM, MODE, SHORTCUT'
7895     Specifies an extension core register named NAME as a synonym for
7896     the register numbered REGNUM.  The register number must be between
7897     32 and 59.  The third argument, MODE, indicates whether the
7898     register is readable and/or writable and is one of:
7899    `r'
7900          Read only;
7901
7902    `w'
7903          Write only;
7904
7905    `r|w'
7906          Read and write.
7907
7908
7909     The final parameter, SHORTCUT indicates whether the register has a
7910     short cut in the pipeline.  The valid values are:
7911    `can_shortcut'
7912          The register has a short cut in the pipeline;
7913
7914    `cannot_shortcut'
7915          The register does not have a short cut in the pipeline.
7916
7917     For example:
7918          	.extCoreRegister mlo, 57, r , can_shortcut
7919     defines a read only extension core register, `mlo', which is
7920     register 57, and can short cut the pipeline.
7921
7922`.extInstruction NAME, OPCODE, SUBOPCODE, SUFFIXCLASS, SYNTAXCLASS'
7923     ARC allows the user to specify extension instructions.  These
7924     extension instructions are not macros; the assembler creates
7925     encodings for use of these instructions according to the
7926     specification by the user.
7927
7928     The first argument, NAME, gives the name of the instruction.
7929
7930     The second argument, OPCODE, is the opcode to be used (bits 31:27
7931     in the encoding).
7932
7933     The third argument, SUBOPCODE, is the sub-opcode to be used, but
7934     the correct value also depends on the fifth argument, SYNTAXCLASS
7935
7936     The fourth argument, SUFFIXCLASS, determines the kinds of suffixes
7937     to be allowed.  Valid values are:
7938    `SUFFIX_NONE'
7939          No suffixes are permitted;
7940
7941    `SUFFIX_COND'
7942          Conditional suffixes are permitted;
7943
7944    `SUFFIX_FLAG'
7945          Flag setting suffixes are permitted.
7946
7947    `SUFFIX_COND|SUFFIX_FLAG'
7948          Both conditional and flag setting suffices are permitted.
7949
7950
7951     The fifth and final argument, SYNTAXCLASS, determines the syntax
7952     class for the instruction.  It can have the following values:
7953    `SYNTAX_2OP'
7954          Two Operand Instruction;
7955
7956    `SYNTAX_3OP'
7957          Three Operand Instruction.
7958
7959    `SYNTAX_1OP'
7960          One Operand Instruction.
7961
7962    `SYNTAX_NOP'
7963          No Operand Instruction.
7964
7965     The syntax class may be followed by `|' and one of the following
7966     modifiers.
7967    `OP1_MUST_BE_IMM'
7968          Modifies syntax class `SYNTAX_3OP', specifying that the first
7969          operand of a three-operand instruction must be an immediate
7970          (i.e., the result is discarded).  This is usually used to set
7971          the flags using specific instructions and not retain results.
7972
7973    `OP1_IMM_IMPLIED'
7974          Modifies syntax class `SYNTAX_20P', specifying that there is
7975          an implied immediate destination operand which does not
7976          appear in the syntax.
7977
7978          For example, if the source code contains an instruction like:
7979               inst r1,r2
7980          the first argument is an implied immediate (that is, the
7981          result is discarded).  This is the same as though the source
7982          code were: inst 0,r1,r2.
7983
7984
7985     For example, defining a 64-bit multiplier with immediate operands:
7986          	.extInstruction  mp64, 0x07, 0x2d, SUFFIX_COND|SUFFIX_FLAG,
7987          			 SYNTAX_3OP|OP1_MUST_BE_IMM
7988     which specifies an extension instruction named `mp64' with 3
7989     operands.  It sets the flags and can be used with a condition code,
7990     for which the first operand is an immediate, i.e. equivalent to
7991     discarding the result of the operation.
7992
7993     A two operands instruction variant would be:
7994          	.extInstruction mul64, 0x07, 0x2d, SUFFIX_COND,
7995          	SYNTAX_2OP|OP1_IMM_IMPLIED
7996     which describes a two operand instruction with an implicit first
7997     immediate operand.  The result of this operation would be
7998     discarded.
7999
8000`.arc_attribute TAG, VALUE'
8001     Set the ARC object attribute TAG to VALUE.
8002
8003     The TAG is either an attribute number, or one of the following:
8004     `Tag_ARC_PCS_config', `Tag_ARC_CPU_base', `Tag_ARC_CPU_variation',
8005     `Tag_ARC_CPU_name', `Tag_ARC_ABI_rf16', `Tag_ARC_ABI_osver',
8006     `Tag_ARC_ABI_sda', `Tag_ARC_ABI_pic', `Tag_ARC_ABI_tls',
8007     `Tag_ARC_ABI_enumsize', `Tag_ARC_ABI_exceptions',
8008     `Tag_ARC_ABI_double_size', `Tag_ARC_ISA_config',
8009     `Tag_ARC_ISA_apex', `Tag_ARC_ISA_mpy_option'
8010
8011     The VALUE is either a `number', `"string"', or `number, "string"'
8012     depending on the tag.
8013
8014
8015
8016File: as.info,  Node: ARC Modifiers,  Next: ARC Symbols,  Prev: ARC Directives,  Up: ARC-Dependent
8017
80189.3.4 ARC Assembler Modifiers
8019-----------------------------
8020
8021The following additional assembler modifiers have been added for
8022position-independent code.  These modifiers are available only with the
8023ARC 700 and above processors and generate relocation entries, which are
8024interpreted by the linker as follows:
8025
8026`@pcl(SYMBOL)'
8027     Relative distance of SYMBOL's from the current program counter
8028     location.
8029
8030`@gotpc(SYMBOL)'
8031     Relative distance of SYMBOL's Global Offset Table entry from the
8032     current program counter location.
8033
8034`@gotoff(SYMBOL)'
8035     Distance of SYMBOL from the base of the Global Offset Table.
8036
8037`@plt(SYMBOL)'
8038     Distance of SYMBOL's Procedure Linkage Table entry from the
8039     current program counter.  This is valid only with branch and link
8040     instructions and PC-relative calls.
8041
8042`@sda(SYMBOL)'
8043     Relative distance of SYMBOL from the base of the Small Data
8044     Pointer.
8045
8046
8047
8048File: as.info,  Node: ARC Symbols,  Next: ARC Opcodes,  Prev: ARC Modifiers,  Up: ARC-Dependent
8049
80509.3.5 ARC Pre-defined Symbols
8051-----------------------------
8052
8053The following assembler symbols will prove useful when developing
8054position-independent code.  These symbols are available only with the
8055ARC 700 and above processors.
8056
8057`__GLOBAL_OFFSET_TABLE__'
8058     Symbol referring to the base of the Global Offset Table.
8059
8060`__DYNAMIC__'
8061     An alias for the Global Offset Table
8062     `Base__GLOBAL_OFFSET_TABLE__'.  It can be used only with `@gotpc'
8063     modifiers.
8064
8065
8066
8067File: as.info,  Node: ARC Opcodes,  Prev: ARC Symbols,  Up: ARC-Dependent
8068
80699.3.6 Opcodes
8070-------------
8071
8072For information on the ARC instruction set, see `ARC Programmers
8073Reference Manual', available where you download the processor IP
8074library.
8075
8076
8077File: as.info,  Node: ARM-Dependent,  Next: AVR-Dependent,  Prev: ARC-Dependent,  Up: Machine Dependencies
8078
80799.4 ARM Dependent Features
8080==========================
8081
8082* Menu:
8083
8084* ARM Options::              Options
8085* ARM Syntax::               Syntax
8086* ARM Floating Point::       Floating Point
8087* ARM Directives::           ARM Machine Directives
8088* ARM Opcodes::              Opcodes
8089* ARM Mapping Symbols::      Mapping Symbols
8090* ARM Unwinding Tutorial::   Unwinding
8091
8092
8093File: as.info,  Node: ARM Options,  Next: ARM Syntax,  Up: ARM-Dependent
8094
80959.4.1 Options
8096-------------
8097
8098`-mcpu=PROCESSOR[+EXTENSION...]'
8099     This option specifies the target processor.  The assembler will
8100     issue an error message if an attempt is made to assemble an
8101     instruction which will not execute on the target processor.  The
8102     following processor names are recognized: `arm1', `arm2', `arm250',
8103     `arm3', `arm6', `arm60', `arm600', `arm610', `arm620', `arm7',
8104     `arm7m', `arm7d', `arm7dm', `arm7di', `arm7dmi', `arm70', `arm700',
8105     `arm700i', `arm710', `arm710t', `arm720', `arm720t', `arm740t',
8106     `arm710c', `arm7100', `arm7500', `arm7500fe', `arm7t', `arm7tdmi',
8107     `arm7tdmi-s', `arm8', `arm810', `strongarm', `strongarm1',
8108     `strongarm110', `strongarm1100', `strongarm1110', `arm9', `arm920',
8109     `arm920t', `arm922t', `arm940t', `arm9tdmi', `fa526' (Faraday
8110     FA526 processor), `fa626' (Faraday FA626 processor), `arm9e',
8111     `arm926e', `arm926ej-s', `arm946e-r0', `arm946e', `arm946e-s',
8112     `arm966e-r0', `arm966e', `arm966e-s', `arm968e-s', `arm10t',
8113     `arm10tdmi', `arm10e', `arm1020', `arm1020t', `arm1020e',
8114     `arm1022e', `arm1026ej-s', `fa606te' (Faraday FA606TE processor),
8115     `fa616te' (Faraday FA616TE processor), `fa626te' (Faraday FA626TE
8116     processor), `fmp626' (Faraday FMP626 processor), `fa726te'
8117     (Faraday FA726TE processor), `arm1136j-s', `arm1136jf-s',
8118     `arm1156t2-s', `arm1156t2f-s', `arm1176jz-s', `arm1176jzf-s',
8119     `mpcore', `mpcorenovfp', `cortex-a5', `cortex-a7', `cortex-a8',
8120     `cortex-a9', `cortex-a15', `cortex-a17', `cortex-a32',
8121     `cortex-a35', `cortex-a53', `cortex-a55', `cortex-a57',
8122     `cortex-a72', `cortex-a73', `cortex-a75', `cortex-a76',
8123     `cortex-a76ae', `cortex-a77', `cortex-a78', `cortex-a78ae',
8124     `cortex-a78c', `cortex-a710', `ares', `cortex-r4', `cortex-r4f',
8125     `cortex-r5', `cortex-r7', `cortex-r8', `cortex-r52',
8126     `cortex-r52plus', `cortex-m35p', `cortex-m33', `cortex-m23',
8127     `cortex-m7', `cortex-m4', `cortex-m3', `cortex-m1', `cortex-m0',
8128     `cortex-m0plus', `cortex-x1', `exynos-m1', `marvell-pj4',
8129     `marvell-whitney', `neoverse-n1', `neoverse-n2', `neoverse-v1',
8130     `xgene1', `xgene2', `ep9312' (ARM920 with Cirrus Maverick
8131     coprocessor), `i80200' (Intel XScale processor) `iwmmxt' (Intel
8132     XScale processor with Wireless MMX technology coprocessor) and
8133     `xscale'.  The special name `all' may be used to allow the
8134     assembler to accept instructions valid for any ARM processor.
8135
8136     In addition to the basic instruction set, the assembler can be
8137     told to accept various extension mnemonics that extend the
8138     processor using the co-processor instruction space.  For example,
8139     `-mcpu=arm920+maverick' is equivalent to specifying `-mcpu=ep9312'.
8140
8141     Multiple extensions may be specified, separated by a `+'.  The
8142     extensions should be specified in ascending alphabetical order.
8143
8144     Some extensions may be restricted to particular architectures;
8145     this is documented in the list of extensions below.
8146
8147     Extension mnemonics may also be removed from those the assembler
8148     accepts.  This is done be prepending `no' to the option that adds
8149     the extension.  Extensions that are removed should be listed after
8150     all extensions which have been added, again in ascending
8151     alphabetical order.  For example, `-mcpu=ep9312+nomaverick' is
8152     equivalent to specifying `-mcpu=arm920'.
8153
8154     The following extensions are currently supported: `bf16' (BFloat16
8155     extensions for v8.6-A architecture), `i8mm' (Int8 Matrix Multiply
8156     extensions for v8.6-A architecture), `crc' `crypto' (Cryptography
8157     Extensions for v8-A architecture, implies `fp+simd'), `dotprod'
8158     (Dot Product Extensions for v8.2-A architecture, implies
8159     `fp+simd'), `fp' (Floating Point Extensions for v8-A architecture),
8160     `fp16' (FP16 Extensions for v8.2-A architecture, implies `fp'),
8161     `fp16fml' (FP16 Floating Point Multiplication Variant Extensions
8162     for v8.2-A architecture, implies `fp16'), `idiv' (Integer Divide
8163     Extensions for v7-A and v7-R architectures), `iwmmxt', `iwmmxt2',
8164     `xscale', `maverick', `mp' (Multiprocessing Extensions for v7-A
8165     and v7-R architectures), `os' (Operating System for v6M
8166     architecture), `predres' (Execution and Data Prediction
8167     Restriction Instruction for v8-A architectures, added by default
8168     from v8.5-A), `sb' (Speculation Barrier Instruction for v8-A
8169     architectures, added by default from v8.5-A), `sec' (Security
8170     Extensions for v6K and v7-A architectures), `simd' (Advanced SIMD
8171     Extensions for v8-A architecture, implies `fp'), `virt'
8172     (Virtualization Extensions for v7-A architecture, implies `idiv'),
8173     `pan' (Privileged Access Never Extensions for v8-A architecture),
8174     `ras' (Reliability, Availability and Serviceability extensions for
8175     v8-A architecture), `rdma' (ARMv8.1 Advanced SIMD extensions for
8176     v8-A architecture, implies `simd') and `xscale'.
8177
8178`-march=ARCHITECTURE[+EXTENSION...]'
8179     This option specifies the target architecture.  The assembler will
8180     issue an error message if an attempt is made to assemble an
8181     instruction which will not execute on the target architecture.
8182     The following architecture names are recognized: `armv1', `armv2',
8183     `armv2a', `armv2s', `armv3', `armv3m', `armv4', `armv4xm',
8184     `armv4t', `armv4txm', `armv5', `armv5t', `armv5txm', `armv5te',
8185     `armv5texp', `armv6', `armv6j', `armv6k', `armv6z', `armv6kz',
8186     `armv6-m', `armv6s-m', `armv7', `armv7-a', `armv7ve', `armv7-r',
8187     `armv7-m', `armv7e-m', `armv8-a', `armv8.1-a', `armv8.2-a',
8188     `armv8.3-a', `armv8-r', `armv8.4-a', `armv8.5-a', `armv8-m.base',
8189     `armv8-m.main', `armv8.1-m.main', `armv8.6-a', `armv8.7-a',
8190     `armv8.8-a', `armv9-a', `iwmmxt', `iwmmxt2' and `xscale'.  If both
8191     `-mcpu' and `-march' are specified, the assembler will use the
8192     setting for `-mcpu'.
8193
8194     The architecture option can be extended with a set extension
8195     options.  These extensions are context sensitive, i.e. the same
8196     extension may mean different things when used with different
8197     architectures.  When used together with a `-mfpu' option, the
8198     union of both feature enablement is taken.  See their availability
8199     and meaning below:
8200
8201     For `armv5te', `armv5texp', `armv5tej', `armv6', `armv6j',
8202     `armv6k', `armv6z', `armv6kz', `armv6zk', `armv6t2', `armv6kt2'
8203     and `armv6zt2':
8204
8205     `+fp': Enables VFPv2 instructions.  `+nofp': Disables all FPU
8206     instrunctions.
8207
8208     For `armv7':
8209
8210     `+fp': Enables VFPv3 instructions with 16 double-word registers.
8211     `+nofp': Disables all FPU instructions.
8212
8213     For `armv7-a':
8214
8215     `+fp': Enables VFPv3 instructions with 16 double-word registers.
8216     `+vfpv3-d16': Alias for `+fp'.  `+vfpv3': Enables VFPv3
8217     instructions with 32 double-word registers.  `+vfpv3-d16-fp16':
8218     Enables VFPv3 with half precision floating-point conversion
8219     instructions and 16 double-word registers.  `+vfpv3-fp16': Enables
8220     VFPv3 with half precision floating-point conversion instructions
8221     and 32 double-word registers.  `+vfpv4-d16': Enables VFPv4
8222     instructions with 16 double-word registers.  `+vfpv4': Enables
8223     VFPv4 instructions with 32 double-word registers.  `+simd':
8224     Enables VFPv3 and NEONv1 instructions with 32 double-word
8225     registers.  `+neon': Alias for `+simd'.  `+neon-vfpv3': Alias for
8226     `+simd'.  `+neon-fp16': Enables VFPv3, half precision
8227     floating-point conversion and NEONv1 instructions with 32
8228     double-word registers.  `+neon-vfpv4': Enables VFPv4 and NEONv1
8229     with Fused-MAC instructions and 32 double-word registers.  `+mp':
8230     Enables Multiprocessing Extensions.  `+sec': Enables Security
8231     Extensions.  `+nofp': Disables all FPU and NEON instructions.
8232     `+nosimd': Disables all NEON instructions.
8233
8234     For `armv7ve':
8235
8236     `+fp': Enables VFPv4 instructions with 16 double-word registers.
8237     `+vfpv4-d16': Alias for `+fp'.  `+vfpv3-d16': Enables VFPv3
8238     instructions with 16 double-word registers.  `+vfpv3': Enables
8239     VFPv3 instructions with 32 double-word registers.
8240     `+vfpv3-d16-fp16': Enables VFPv3 with half precision floating-point
8241     conversion instructions and 16 double-word registers.
8242     `+vfpv3-fp16': Enables VFPv3 with half precision floating-point
8243     conversion instructions and 32 double-word registers.  `+vfpv4':
8244     Enables VFPv4 instructions with 32 double-word registers.
8245     `+simd': Enables VFPv4 and NEONv1 with Fused-MAC instructions and
8246     32 double-word registers.  `+neon-vfpv4': Alias for `+simd'.
8247     `+neon': Enables VFPv3 and NEONv1 instructions with 32 double-word
8248     registers.  `+neon-vfpv3': Alias for `+neon'.  `+neon-fp16':
8249     Enables VFPv3, half precision floating-point conversion and NEONv1
8250     instructions with 32 double-word registers.  double-word registers.
8251     `+nofp': Disables all FPU and NEON instructions.  `+nosimd':
8252     Disables all NEON instructions.
8253
8254     For `armv7-r':
8255
8256     `+fp.sp': Enables single-precision only VFPv3 instructions with 16
8257     double-word registers.  `+vfpv3xd': Alias for `+fp.sp'.  `+fp':
8258     Enables VFPv3 instructions with 16 double-word registers.
8259     `+vfpv3-d16': Alias for `+fp'.  `+vfpv3xd-fp16': Enables
8260     single-precision only VFPv3 and half floating-point conversion
8261     instructions with 16 double-word registers.  `+vfpv3-d16-fp16':
8262     Enables VFPv3 and half precision floating-point conversion
8263     instructions with 16 double-word registers.  `+idiv': Enables
8264     integer division instructions in ARM mode.  `+nofp': Disables all
8265     FPU instructions.
8266
8267     For `armv7e-m':
8268
8269     `+fp': Enables single-precision only VFPv4 instructions with 16
8270     double-word registers.  `+vfpvf4-sp-d16': Alias for `+fp'.
8271     `+fpv5': Enables single-precision only VFPv5 instructions with 16
8272     double-word registers.  `+fp.dp': Enables VFPv5 instructions with
8273     16 double-word registers.  `+fpv5-d16"': Alias for `+fp.dp'.
8274     `+nofp': Disables all FPU instructions.
8275
8276     For `armv8-m.main':
8277
8278     `+dsp': Enables DSP Extension.  `+fp': Enables single-precision
8279     only VFPv5 instructions with 16 double-word registers.  `+fp.dp':
8280     Enables VFPv5 instructions with 16 double-word registers.
8281     `+cdecp0' (CDE extensions for v8-m architecture with coprocessor
8282     0), `+cdecp1' (CDE extensions for v8-m architecture with
8283     coprocessor 1), `+cdecp2' (CDE extensions for v8-m architecture
8284     with coprocessor 2), `+cdecp3' (CDE extensions for v8-m
8285     architecture with coprocessor 3), `+cdecp4' (CDE extensions for
8286     v8-m architecture with coprocessor 4), `+cdecp5' (CDE extensions
8287     for v8-m architecture with coprocessor 5), `+cdecp6' (CDE
8288     extensions for v8-m architecture with coprocessor 6), `+cdecp7'
8289     (CDE extensions for v8-m architecture with coprocessor 7),
8290     `+nofp': Disables all FPU instructions.  `+nodsp': Disables DSP
8291     Extension.
8292
8293     For `armv8.1-m.main':
8294
8295     `+dsp': Enables DSP Extension.  `+fp': Enables single and half
8296     precision scalar Floating Point Extensions for Armv8.1-M Mainline
8297     with 16 double-word registers.  `+fp.dp': Enables double precision
8298     scalar Floating Point Extensions for Armv8.1-M Mainline, implies
8299     `+fp'.  `+mve': Enables integer only M-profile Vector Extension for
8300     Armv8.1-M Mainline, implies `+dsp'.  `+mve.fp': Enables Floating
8301     Point M-profile Vector Extension for Armv8.1-M Mainline, implies
8302     `+mve' and `+fp'.  `+nofp': Disables all FPU instructions.
8303     `+nodsp': Disables DSP Extension.  `+nomve': Disables all
8304     M-profile Vector Extensions.
8305
8306     For `armv8-a':
8307
8308     `+crc': Enables CRC32 Extension.  `+simd': Enables VFP and NEON
8309     for Armv8-A.  `+crypto': Enables Cryptography Extensions for
8310     Armv8-A, implies `+simd'.  `+sb': Enables Speculation Barrier
8311     Instruction for Armv8-A.  `+predres': Enables Execution and Data
8312     Prediction Restriction Instruction for Armv8-A.  `+nofp': Disables
8313     all FPU, NEON and Cryptography Extensions.  `+nocrypto': Disables
8314     Cryptography Extensions.
8315
8316     For `armv8.1-a':
8317
8318     `+simd': Enables VFP and NEON for Armv8.1-A.  `+crypto': Enables
8319     Cryptography Extensions for Armv8-A, implies `+simd'.  `+sb':
8320     Enables Speculation Barrier Instruction for Armv8-A.  `+predres':
8321     Enables Execution and Data Prediction Restriction Instruction for
8322     Armv8-A.  `+nofp': Disables all FPU, NEON and Cryptography
8323     Extensions.  `+nocrypto': Disables Cryptography Extensions.
8324
8325     For `armv8.2-a' and `armv8.3-a':
8326
8327     `+simd': Enables VFP and NEON for Armv8.1-A.  `+fp16': Enables
8328     FP16 Extension for Armv8.2-A, implies `+simd'.  `+fp16fml':
8329     Enables FP16 Floating Point Multiplication Variant Extensions for
8330     Armv8.2-A, implies `+fp16'.  `+crypto': Enables Cryptography
8331     Extensions for Armv8-A, implies `+simd'.  `+dotprod': Enables Dot
8332     Product Extensions for Armv8.2-A, implies `+simd'.  `+sb': Enables
8333     Speculation Barrier Instruction for Armv8-A.  `+predres': Enables
8334     Execution and Data Prediction Restriction Instruction for Armv8-A.
8335     `+nofp': Disables all FPU, NEON, Cryptography and Dot Product
8336     Extensions.  `+nocrypto': Disables Cryptography Extensions.
8337
8338     For `armv8.4-a':
8339
8340     `+simd': Enables VFP and NEON for Armv8.1-A and Dot Product
8341     Extensions for Armv8.2-A.  `+fp16': Enables FP16 Floating Point
8342     and Floating Point Multiplication Variant Extensions for
8343     Armv8.2-A, implies `+simd'.  `+crypto': Enables Cryptography
8344     Extensions for Armv8-A, implies `+simd'.  `+sb': Enables
8345     Speculation Barrier Instruction for Armv8-A.  `+predres': Enables
8346     Execution and Data Prediction Restriction Instruction for Armv8-A.
8347     `+nofp': Disables all FPU, NEON, Cryptography and Dot Product
8348     Extensions.  `+nocryptp': Disables Cryptography Extensions.
8349
8350     For `armv8.5-a':
8351
8352     `+simd': Enables VFP and NEON for Armv8.1-A and Dot Product
8353     Extensions for Armv8.2-A.  `+fp16': Enables FP16 Floating Point
8354     and Floating Point Multiplication Variant Extensions for
8355     Armv8.2-A, implies `+simd'.  `+crypto': Enables Cryptography
8356     Extensions for Armv8-A, implies `+simd'.  `+nofp': Disables all
8357     FPU, NEON, Cryptography and Dot Product Extensions.  `+nocryptp':
8358     Disables Cryptography Extensions.
8359
8360`-mfpu=FLOATING-POINT-FORMAT'
8361     This option specifies the floating point format to assemble for.
8362     The assembler will issue an error message if an attempt is made to
8363     assemble an instruction which will not execute on the target
8364     floating point unit.  The following format options are recognized:
8365     `softfpa', `fpe', `fpe2', `fpe3', `fpa', `fpa10', `fpa11',
8366     `arm7500fe', `softvfp', `softvfp+vfp', `vfp', `vfp10', `vfp10-r0',
8367     `vfp9', `vfpxd', `vfpv2', `vfpv3', `vfpv3-fp16', `vfpv3-d16',
8368     `vfpv3-d16-fp16', `vfpv3xd', `vfpv3xd-d16', `vfpv4', `vfpv4-d16',
8369     `fpv4-sp-d16', `fpv5-sp-d16', `fpv5-d16', `fp-armv8', `arm1020t',
8370     `arm1020e', `arm1136jf-s', `maverick', `neon', `neon-vfpv3',
8371     `neon-fp16', `neon-vfpv4', `neon-fp-armv8', `crypto-neon-fp-armv8',
8372     `neon-fp-armv8.1' and `crypto-neon-fp-armv8.1'.
8373
8374     In addition to determining which instructions are assembled, this
8375     option also affects the way in which the `.double' assembler
8376     directive behaves when assembling little-endian code.
8377
8378     The default is dependent on the processor selected.  For
8379     Architecture 5 or later, the default is to assemble for VFP
8380     instructions; for earlier architectures the default is to assemble
8381     for FPA instructions.
8382
8383`-mfp16-format=FORMAT'
8384     This option specifies the half-precision floating point format to
8385     use when assembling floating point numbers emitted by the
8386     `.float16' directive.  The following format options are recognized:
8387     `ieee', `alternative'.  If `ieee' is specified then the IEEE
8388     754-2008 half-precision floating point format is used, if
8389     `alternative' is specified then the Arm alternative half-precision
8390     format is used. If this option is set on the command line then the
8391     format is fixed and cannot be changed with the `float16_format'
8392     directive. If this value is not set then the IEEE 754-2008 format
8393     is used until the format is explicitly set with the
8394     `float16_format' directive.
8395
8396`-mthumb'
8397     This option specifies that the assembler should start assembling
8398     Thumb instructions; that is, it should behave as though the file
8399     starts with a `.code 16' directive.
8400
8401`-mthumb-interwork'
8402     This option specifies that the output generated by the assembler
8403     should be marked as supporting interworking.  It also affects the
8404     behaviour of the `ADR' and `ADRL' pseudo opcodes.
8405
8406`-mimplicit-it=never'
8407`-mimplicit-it=always'
8408`-mimplicit-it=arm'
8409`-mimplicit-it=thumb'
8410     The `-mimplicit-it' option controls the behavior of the assembler
8411     when conditional instructions are not enclosed in IT blocks.
8412     There are four possible behaviors.  If `never' is specified, such
8413     constructs cause a warning in ARM code and an error in Thumb-2
8414     code.  If `always' is specified, such constructs are accepted in
8415     both ARM and Thumb-2 code, where the IT instruction is added
8416     implicitly.  If `arm' is specified, such constructs are accepted
8417     in ARM code and cause an error in Thumb-2 code.  If `thumb' is
8418     specified, such constructs cause a warning in ARM code and are
8419     accepted in Thumb-2 code.  If you omit this option, the behavior
8420     is equivalent to `-mimplicit-it=arm'.
8421
8422`-mapcs-26'
8423`-mapcs-32'
8424     These options specify that the output generated by the assembler
8425     should be marked as supporting the indicated version of the Arm
8426     Procedure.  Calling Standard.
8427
8428`-matpcs'
8429     This option specifies that the output generated by the assembler
8430     should be marked as supporting the Arm/Thumb Procedure Calling
8431     Standard.  If enabled this option will cause the assembler to
8432     create an empty debugging section in the object file called
8433     .arm.atpcs.  Debuggers can use this to determine the ABI being
8434     used by.
8435
8436`-mapcs-float'
8437     This indicates the floating point variant of the APCS should be
8438     used.  In this variant floating point arguments are passed in FP
8439     registers rather than integer registers.
8440
8441`-mapcs-reentrant'
8442     This indicates that the reentrant variant of the APCS should be
8443     used.  This variant supports position independent code.
8444
8445`-mfloat-abi=ABI'
8446     This option specifies that the output generated by the assembler
8447     should be marked as using specified floating point ABI.  The
8448     following values are recognized: `soft', `softfp' and `hard'.
8449
8450`-meabi=VER'
8451     This option specifies which EABI version the produced object files
8452     should conform to.  The following values are recognized: `gnu', `4'
8453     and `5'.
8454
8455`-EB'
8456     This option specifies that the output generated by the assembler
8457     should be marked as being encoded for a big-endian processor.
8458
8459     Note: If a program is being built for a system with big-endian data
8460     and little-endian instructions then it should be assembled with the
8461     `-EB' option, (all of it, code and data) and then linked with the
8462     `--be8' option.  This will reverse the endianness of the
8463     instructions back to little-endian, but leave the data as
8464     big-endian.
8465
8466`-EL'
8467     This option specifies that the output generated by the assembler
8468     should be marked as being encoded for a little-endian processor.
8469
8470`-k'
8471     This option specifies that the output of the assembler should be
8472     marked as position-independent code (PIC).
8473
8474`--fix-v4bx'
8475     Allow `BX' instructions in ARMv4 code.  This is intended for use
8476     with the linker option of the same name.
8477
8478`-mwarn-deprecated'
8479`-mno-warn-deprecated'
8480     Enable or disable warnings about using deprecated options or
8481     features.  The default is to warn.
8482
8483`-mccs'
8484     Turns on CodeComposer Studio assembly syntax compatibility mode.
8485
8486`-mwarn-syms'
8487`-mno-warn-syms'
8488     Enable or disable warnings about symbols that match the names of
8489     ARM instructions.  The default is to warn.
8490
8491
8492
8493File: as.info,  Node: ARM Syntax,  Next: ARM Floating Point,  Prev: ARM Options,  Up: ARM-Dependent
8494
84959.4.2 Syntax
8496------------
8497
8498* Menu:
8499
8500* ARM-Instruction-Set::      Instruction Set
8501* ARM-Chars::                Special Characters
8502* ARM-Regs::                 Register Names
8503* ARM-Relocations::	     Relocations
8504* ARM-Neon-Alignment::	     NEON Alignment Specifiers
8505
8506
8507File: as.info,  Node: ARM-Instruction-Set,  Next: ARM-Chars,  Up: ARM Syntax
8508
85099.4.2.1 Instruction Set Syntax
8510..............................
8511
8512Two slightly different syntaxes are support for ARM and THUMB
8513instructions.  The default, `divided', uses the old style where ARM and
8514THUMB instructions had their own, separate syntaxes.  The new,
8515`unified' syntax, which can be selected via the `.syntax' directive,
8516and has the following main features:
8517
8518   * Immediate operands do not require a `#' prefix.
8519
8520   * The `IT' instruction may appear, and if it does it is validated
8521     against subsequent conditional affixes.  In ARM mode it does not
8522     generate machine code, in THUMB mode it does.
8523
8524   * For ARM instructions the conditional affixes always appear at the
8525     end of the instruction.  For THUMB instructions conditional
8526     affixes can be used, but only inside the scope of an `IT'
8527     instruction.
8528
8529   * All of the instructions new to the V6T2 architecture (and later)
8530     are available.  (Only a few such instructions can be written in the
8531     `divided' syntax).
8532
8533   * The `.N' and `.W' suffixes are recognized and honored.
8534
8535   * All instructions set the flags if and only if they have an `s'
8536     affix.
8537
8538
8539File: as.info,  Node: ARM-Chars,  Next: ARM-Regs,  Prev: ARM-Instruction-Set,  Up: ARM Syntax
8540
85419.4.2.2 Special Characters
8542..........................
8543
8544The presence of a `@' anywhere on a line indicates the start of a
8545comment that extends to the end of that line.
8546
8547   If a `#' appears as the first character of a line then the whole
8548line is treated as a comment, but in this case the line could also be a
8549logical line number directive (*note Comments::) or a preprocessor
8550control command (*note Preprocessing::).
8551
8552   The `;' character can be used instead of a newline to separate
8553statements.
8554
8555   Either `#' or `$' can be used to indicate immediate operands.
8556
8557   *TODO* Explain about /data modifier on symbols.
8558
8559
8560File: as.info,  Node: ARM-Regs,  Next: ARM-Relocations,  Prev: ARM-Chars,  Up: ARM Syntax
8561
85629.4.2.3 Register Names
8563......................
8564
8565*TODO* Explain about ARM register naming, and the predefined names.
8566
8567
8568File: as.info,  Node: ARM-Relocations,  Next: ARM-Neon-Alignment,  Prev: ARM-Regs,  Up: ARM Syntax
8569
85709.4.2.4 ARM relocation generation
8571.................................
8572
8573Specific data relocations can be generated by putting the relocation
8574name in parentheses after the symbol name.  For example:
8575
8576             .word foo(TARGET1)
8577
8578   This will generate an `R_ARM_TARGET1' relocation against the symbol
8579FOO.  The following relocations are supported: `GOT', `GOTOFF',
8580`TARGET1', `TARGET2', `SBREL', `TLSGD', `TLSLDM', `TLSLDO', `TLSDESC',
8581`TLSCALL', `GOTTPOFF', `GOT_PREL' and `TPOFF'.
8582
8583   For compatibility with older toolchains the assembler also accepts
8584`(PLT)' after branch targets.  On legacy targets this will generate the
8585deprecated `R_ARM_PLT32' relocation.  On EABI targets it will encode
8586either the `R_ARM_CALL' or `R_ARM_JUMP24' relocation, as appropriate.
8587
8588   Relocations for `MOVW' and `MOVT' instructions can be generated by
8589prefixing the value with `#:lower16:' and `#:upper16' respectively.
8590For example to load the 32-bit address of foo into r0:
8591
8592             MOVW r0, #:lower16:foo
8593             MOVT r0, #:upper16:foo
8594
8595   Relocations `R_ARM_THM_ALU_ABS_G0_NC', `R_ARM_THM_ALU_ABS_G1_NC',
8596`R_ARM_THM_ALU_ABS_G2_NC' and `R_ARM_THM_ALU_ABS_G3_NC' can be
8597generated by prefixing the value with `#:lower0_7:#', `#:lower8_15:#',
8598`#:upper0_7:#' and `#:upper8_15:#' respectively.  For example to load
8599the 32-bit address of foo into r0:
8600
8601             MOVS r0, #:upper8_15:#foo
8602             LSLS r0, r0, #8
8603             ADDS r0, #:upper0_7:#foo
8604             LSLS r0, r0, #8
8605             ADDS r0, #:lower8_15:#foo
8606             LSLS r0, r0, #8
8607             ADDS r0, #:lower0_7:#foo
8608
8609
8610File: as.info,  Node: ARM-Neon-Alignment,  Prev: ARM-Relocations,  Up: ARM Syntax
8611
86129.4.2.5 NEON Alignment Specifiers
8613.................................
8614
8615Some NEON load/store instructions allow an optional address alignment
8616qualifier.  The ARM documentation specifies that this is indicated by
8617`@ ALIGN'. However GAS already interprets the `@' character as a "line
8618comment" start, so `: ALIGN' is used instead.  For example:
8619
8620             vld1.8 {q0}, [r0, :128]
8621
8622
8623File: as.info,  Node: ARM Floating Point,  Next: ARM Directives,  Prev: ARM Syntax,  Up: ARM-Dependent
8624
86259.4.3 Floating Point
8626--------------------
8627
8628The ARM family uses IEEE floating-point numbers.
8629
8630
8631File: as.info,  Node: ARM Directives,  Next: ARM Opcodes,  Prev: ARM Floating Point,  Up: ARM-Dependent
8632
86339.4.4 ARM Machine Directives
8634----------------------------
8635
8636`.align EXPRESSION [, EXPRESSION]'
8637     This is the generic .ALIGN directive.  For the ARM however if the
8638     first argument is zero (ie no alignment is needed) the assembler
8639     will behave as if the argument had been 2 (ie pad to the next four
8640     byte boundary).  This is for compatibility with ARM's own
8641     assembler.
8642
8643`.arch NAME'
8644     Select the target architecture.  Valid values for NAME are the
8645     same as for the `-march' command-line option without the
8646     instruction set extension.
8647
8648     Specifying `.arch' clears any previously selected architecture
8649     extensions.
8650
8651`.arch_extension NAME'
8652     Add or remove an architecture extension to the target
8653     architecture.  Valid values for NAME are the same as those
8654     accepted as architectural extensions by the `-mcpu' and `-march'
8655     command-line options.
8656
8657     `.arch_extension' may be used multiple times to add or remove
8658     extensions incrementally to the architecture being compiled for.
8659
8660`.arm'
8661     This performs the same action as .CODE 32.
8662
8663`.bss'
8664     This directive switches to the `.bss' section.
8665
8666`.cantunwind'
8667     Prevents unwinding through the current function.  No personality
8668     routine or exception table data is required or permitted.
8669
8670`.code `[16|32]''
8671     This directive selects the instruction set being generated. The
8672     value 16 selects Thumb, with the value 32 selecting ARM.
8673
8674`.cpu NAME'
8675     Select the target processor.  Valid values for NAME are the same as
8676     for the `-mcpu' command-line option without the instruction set
8677     extension.
8678
8679     Specifying `.cpu' clears any previously selected architecture
8680     extensions.
8681
8682`NAME .dn REGISTER NAME [.TYPE] [[INDEX]]'
8683`NAME .qn REGISTER NAME [.TYPE] [[INDEX]]'
8684     The `dn' and `qn' directives are used to create typed and/or
8685     indexed register aliases for use in Advanced SIMD Extension (Neon)
8686     instructions.  The former should be used to create aliases of
8687     double-precision registers, and the latter to create aliases of
8688     quad-precision registers.
8689
8690     If these directives are used to create typed aliases, those
8691     aliases can be used in Neon instructions instead of writing types
8692     after the mnemonic or after each operand.  For example:
8693
8694                  x .dn d2.f32
8695                  y .dn d3.f32
8696                  z .dn d4.f32[1]
8697                  vmul x,y,z
8698
8699     This is equivalent to writing the following:
8700
8701                  vmul.f32 d2,d3,d4[1]
8702
8703     Aliases created using `dn' or `qn' can be destroyed using `unreq'.
8704
8705`.eabi_attribute TAG, VALUE'
8706     Set the EABI object attribute TAG to VALUE.
8707
8708     The TAG is either an attribute number, or one of the following:
8709     `Tag_CPU_raw_name', `Tag_CPU_name', `Tag_CPU_arch',
8710     `Tag_CPU_arch_profile', `Tag_ARM_ISA_use', `Tag_THUMB_ISA_use',
8711     `Tag_FP_arch', `Tag_WMMX_arch', `Tag_Advanced_SIMD_arch',
8712     `Tag_MVE_arch', `Tag_PCS_config', `Tag_ABI_PCS_R9_use',
8713     `Tag_ABI_PCS_RW_data', `Tag_ABI_PCS_RO_data',
8714     `Tag_ABI_PCS_GOT_use', `Tag_ABI_PCS_wchar_t',
8715     `Tag_ABI_FP_rounding', `Tag_ABI_FP_denormal',
8716     `Tag_ABI_FP_exceptions', `Tag_ABI_FP_user_exceptions',
8717     `Tag_ABI_FP_number_model', `Tag_ABI_align_needed',
8718     `Tag_ABI_align_preserved', `Tag_ABI_enum_size',
8719     `Tag_ABI_HardFP_use', `Tag_ABI_VFP_args', `Tag_ABI_WMMX_args',
8720     `Tag_ABI_optimization_goals', `Tag_ABI_FP_optimization_goals',
8721     `Tag_compatibility', `Tag_CPU_unaligned_access',
8722     `Tag_FP_HP_extension', `Tag_ABI_FP_16bit_format',
8723     `Tag_MPextension_use', `Tag_DIV_use', `Tag_nodefaults',
8724     `Tag_also_compatible_with', `Tag_conformance', `Tag_T2EE_use',
8725     `Tag_Virtualization_use'
8726
8727     The VALUE is either a `number', `"string"', or `number, "string"'
8728     depending on the tag.
8729
8730     Note - the following legacy values are also accepted by TAG:
8731     `Tag_VFP_arch', `Tag_ABI_align8_needed',
8732     `Tag_ABI_align8_preserved', `Tag_VFP_HP_extension',
8733
8734`.even'
8735     This directive aligns to an even-numbered address.
8736
8737`.extend  EXPRESSION [, EXPRESSION]*'
8738`.ldouble  EXPRESSION [, EXPRESSION]*'
8739     These directives write 12byte long double floating-point values to
8740     the output section.  These are not compatible with current ARM
8741     processors or ABIs.
8742
8743`.float16 VALUE [,...,VALUE_N]'
8744     Place the half precision floating point representation of one or
8745     more floating-point values into the current section. The exact
8746     format of the encoding is specified by `.float16_format'. If the
8747     format has not been explicitly set yet (either via the
8748     `.float16_format' directive or the command line option) then the
8749     IEEE 754-2008 format is used.
8750
8751`.float16_format FORMAT'
8752     Set the format to use when encoding float16 values emitted by the
8753     `.float16' directive.  Once the format has been set it cannot be
8754     changed.  `format' should be one of the following: `ieee' (encode
8755     in the IEEE 754-2008 half precision format) or `alternative'
8756     (encode in the Arm alternative half precision format).
8757
8758`.fnend'
8759     Marks the end of a function with an unwind table entry.  The
8760     unwind index table entry is created when this directive is
8761     processed.
8762
8763     If no personality routine has been specified then standard
8764     personality routine 0 or 1 will be used, depending on the number
8765     of unwind opcodes required.
8766
8767`.fnstart'
8768     Marks the start of a function with an unwind table entry.
8769
8770`.force_thumb'
8771     This directive forces the selection of Thumb instructions, even if
8772     the target processor does not support those instructions
8773
8774`.fpu NAME'
8775     Select the floating-point unit to assemble for.  Valid values for
8776     NAME are the same as for the `-mfpu' command-line option.
8777
8778`.handlerdata'
8779     Marks the end of the current function, and the start of the
8780     exception table entry for that function.  Anything between this
8781     directive and the `.fnend' directive will be added to the
8782     exception table entry.
8783
8784     Must be preceded by a `.personality' or `.personalityindex'
8785     directive.
8786
8787`.inst OPCODE [ , ... ]'
8788`.inst.n OPCODE [ , ... ]'
8789`.inst.w OPCODE [ , ... ]'
8790     Generates the instruction corresponding to the numerical value
8791     OPCODE.  `.inst.n' and `.inst.w' allow the Thumb instruction size
8792     to be specified explicitly, overriding the normal encoding rules.
8793
8794`.ldouble  EXPRESSION [, EXPRESSION]*'
8795     See `.extend'.
8796
8797`.ltorg'
8798     This directive causes the current contents of the literal pool to
8799     be dumped into the current section (which is assumed to be the
8800     .text section) at the current location (aligned to a word
8801     boundary).  `GAS' maintains a separate literal pool for each
8802     section and each sub-section.  The `.ltorg' directive will only
8803     affect the literal pool of the current section and sub-section.
8804     At the end of assembly all remaining, un-empty literal pools will
8805     automatically be dumped.
8806
8807     Note - older versions of `GAS' would dump the current literal pool
8808     any time a section change occurred.  This is no longer done, since
8809     it prevents accurate control of the placement of literal pools.
8810
8811`.movsp REG [, #OFFSET]'
8812     Tell the unwinder that REG contains an offset from the current
8813     stack pointer.  If OFFSET is not specified then it is assumed to be
8814     zero.
8815
8816`.object_arch NAME'
8817     Override the architecture recorded in the EABI object attribute
8818     section.  Valid values for NAME are the same as for the `.arch'
8819     directive.  Typically this is useful when code uses runtime
8820     detection of CPU features.
8821
8822`.packed  EXPRESSION [, EXPRESSION]*'
8823     This directive writes 12-byte packed floating-point values to the
8824     output section.  These are not compatible with current ARM
8825     processors or ABIs.
8826
8827`.pad #COUNT'
8828     Generate unwinder annotations for a stack adjustment of COUNT
8829     bytes.  A positive value indicates the function prologue allocated
8830     stack space by decrementing the stack pointer.
8831
8832`.personality NAME'
8833     Sets the personality routine for the current function to NAME.
8834
8835`.personalityindex INDEX'
8836     Sets the personality routine for the current function to the EABI
8837     standard routine number INDEX
8838
8839`.pool'
8840     This is a synonym for .ltorg.
8841
8842`NAME .req REGISTER NAME'
8843     This creates an alias for REGISTER NAME called NAME.  For example:
8844
8845                  foo .req r0
8846
8847`.save REGLIST'
8848     Generate unwinder annotations to restore the registers in REGLIST.
8849     The format of REGLIST is the same as the corresponding
8850     store-multiple instruction.
8851
8852     _core registers_
8853            .save {r4, r5, r6, lr}
8854            stmfd sp!, {r4, r5, r6, lr}
8855     _FPA registers_
8856            .save f4, 2
8857            sfmfd f4, 2, [sp]!
8858     _VFP registers_
8859            .save {d8, d9, d10}
8860            fstmdx sp!, {d8, d9, d10}
8861     _iWMMXt registers_
8862            .save {wr10, wr11}
8863            wstrd wr11, [sp, #-8]!
8864            wstrd wr10, [sp, #-8]!
8865          or
8866            .save wr11
8867            wstrd wr11, [sp, #-8]!
8868            .save wr10
8869            wstrd wr10, [sp, #-8]!
8870
8871`.setfp FPREG, SPREG [, #OFFSET]'
8872     Make all unwinder annotations relative to a frame pointer.
8873     Without this the unwinder will use offsets from the stack pointer.
8874
8875     The syntax of this directive is the same as the `add' or `mov'
8876     instruction used to set the frame pointer.  SPREG must be either
8877     `sp' or mentioned in a previous `.movsp' directive.
8878
8879          .movsp ip
8880          mov ip, sp
8881          ...
8882          .setfp fp, ip, #4
8883          add fp, ip, #4
8884
8885`.secrel32 EXPRESSION [, EXPRESSION]*'
8886     This directive emits relocations that evaluate to the
8887     section-relative offset of each expression's symbol.  This
8888     directive is only supported for PE targets.
8889
8890`.syntax [`unified' | `divided']'
8891     This directive sets the Instruction Set Syntax as described in the
8892     *Note ARM-Instruction-Set:: section.
8893
8894`.thumb'
8895     This performs the same action as .CODE 16.
8896
8897`.thumb_func'
8898     This directive specifies that the following symbol is the name of a
8899     Thumb encoded function.  This information is necessary in order to
8900     allow the assembler and linker to generate correct code for
8901     interworking between Arm and Thumb instructions and should be used
8902     even if interworking is not going to be performed.  The presence
8903     of this directive also implies `.thumb'
8904
8905     This directive is not necessary when generating EABI objects.  On
8906     these targets the encoding is implicit when generating Thumb code.
8907
8908`.thumb_set'
8909     This performs the equivalent of a `.set' directive in that it
8910     creates a symbol which is an alias for another symbol (possibly
8911     not yet defined).  This directive also has the added property in
8912     that it marks the aliased symbol as being a thumb function entry
8913     point, in the same way that the `.thumb_func' directive does.
8914
8915`.tlsdescseq TLS-VARIABLE'
8916     This directive is used to annotate parts of an inlined TLS
8917     descriptor trampoline.  Normally the trampoline is provided by the
8918     linker, and this directive is not needed.
8919
8920`.unreq ALIAS-NAME'
8921     This undefines a register alias which was previously defined using
8922     the `req', `dn' or `qn' directives.  For example:
8923
8924                  foo .req r0
8925                  .unreq foo
8926
8927     An error occurs if the name is undefined.  Note - this pseudo op
8928     can be used to delete builtin in register name aliases (eg 'r0').
8929     This should only be done if it is really necessary.
8930
8931`.unwind_raw OFFSET, BYTE1, ...'
8932     Insert one of more arbitrary unwind opcode bytes, which are known
8933     to adjust the stack pointer by OFFSET bytes.
8934
8935     For example `.unwind_raw 4, 0xb1, 0x01' is equivalent to `.save
8936     {r0}'
8937
8938`.vsave VFP-REGLIST'
8939     Generate unwinder annotations to restore the VFP registers in
8940     VFP-REGLIST using FLDMD.  Also works for VFPv3 registers that are
8941     to be restored using VLDM.  The format of VFP-REGLIST is the same
8942     as the corresponding store-multiple instruction.
8943
8944     _VFP registers_
8945            .vsave {d8, d9, d10}
8946            fstmdd sp!, {d8, d9, d10}
8947     _VFPv3 registers_
8948            .vsave {d15, d16, d17}
8949            vstm sp!, {d15, d16, d17}
8950
8951     Since FLDMX and FSTMX are now deprecated, this directive should be
8952     used in favour of `.save' for saving VFP registers for ARMv6 and
8953     above.
8954
8955
8956
8957File: as.info,  Node: ARM Opcodes,  Next: ARM Mapping Symbols,  Prev: ARM Directives,  Up: ARM-Dependent
8958
89599.4.5 Opcodes
8960-------------
8961
8962`as' implements all the standard ARM opcodes.  It also implements
8963several pseudo opcodes, including several synthetic load instructions.
8964
8965`NOP'
8966            nop
8967
8968     This pseudo op will always evaluate to a legal ARM instruction
8969     that does nothing.  Currently it will evaluate to MOV r0, r0.
8970
8971`LDR'
8972            ldr <register> , = <expression>
8973
8974     If expression evaluates to a numeric constant then a MOV or MVN
8975     instruction will be used in place of the LDR instruction, if the
8976     constant can be generated by either of these instructions.
8977     Otherwise the constant will be placed into the nearest literal
8978     pool (if it not already there) and a PC relative LDR instruction
8979     will be generated.
8980
8981`ADR'
8982            adr <register> <label>
8983
8984     This instruction will load the address of LABEL into the indicated
8985     register.  The instruction will evaluate to a PC relative ADD or
8986     SUB instruction depending upon where the label is located.  If the
8987     label is out of range, or if it is not defined in the same file
8988     (and section) as the ADR instruction, then an error will be
8989     generated.  This instruction will not make use of the literal pool.
8990
8991     If LABEL is a thumb function symbol, and thumb interworking has
8992     been enabled via the `-mthumb-interwork' option then the bottom
8993     bit of the value stored into REGISTER will be set.  This allows
8994     the following sequence to work as expected:
8995
8996            adr     r0, thumb_function
8997            blx     r0
8998
8999`ADRL'
9000            adrl <register> <label>
9001
9002     This instruction will load the address of LABEL into the indicated
9003     register.  The instruction will evaluate to one or two PC relative
9004     ADD or SUB instructions depending upon where the label is located.
9005     If a second instruction is not needed a NOP instruction will be
9006     generated in its place, so that this instruction is always 8 bytes
9007     long.
9008
9009     If the label is out of range, or if it is not defined in the same
9010     file (and section) as the ADRL instruction, then an error will be
9011     generated.  This instruction will not make use of the literal pool.
9012
9013     If LABEL is a thumb function symbol, and thumb interworking has
9014     been enabled via the `-mthumb-interwork' option then the bottom
9015     bit of the value stored into REGISTER will be set.
9016
9017
9018   For information on the ARM or Thumb instruction sets, see `ARM
9019Software Development Toolkit Reference Manual', Advanced RISC Machines
9020Ltd.
9021
9022
9023File: as.info,  Node: ARM Mapping Symbols,  Next: ARM Unwinding Tutorial,  Prev: ARM Opcodes,  Up: ARM-Dependent
9024
90259.4.6 Mapping Symbols
9026---------------------
9027
9028The ARM ELF specification requires that special symbols be inserted
9029into object files to mark certain features:
9030
9031`$a'
9032     At the start of a region of code containing ARM instructions.
9033
9034`$t'
9035     At the start of a region of code containing THUMB instructions.
9036
9037`$d'
9038     At the start of a region of data.
9039
9040
9041   The assembler will automatically insert these symbols for you - there
9042is no need to code them yourself.  Support for tagging symbols ($b, $f,
9043$p and $m) which is also mentioned in the current ARM ELF specification
9044is not implemented.  This is because they have been dropped from the
9045new EABI and so tools cannot rely upon their presence.
9046
9047
9048File: as.info,  Node: ARM Unwinding Tutorial,  Prev: ARM Mapping Symbols,  Up: ARM-Dependent
9049
90509.4.7 Unwinding
9051---------------
9052
9053The ABI for the ARM Architecture specifies a standard format for
9054exception unwind information.  This information is used when an
9055exception is thrown to determine where control should be transferred.
9056In particular, the unwind information is used to determine which
9057function called the function that threw the exception, and which
9058function called that one, and so forth.  This information is also used
9059to restore the values of callee-saved registers in the function
9060catching the exception.
9061
9062   If you are writing functions in assembly code, and those functions
9063call other functions that throw exceptions, you must use assembly
9064pseudo ops to ensure that appropriate exception unwind information is
9065generated.  Otherwise, if one of the functions called by your assembly
9066code throws an exception, the run-time library will be unable to unwind
9067the stack through your assembly code and your program will not behave
9068correctly.
9069
9070   To illustrate the use of these pseudo ops, we will examine the code
9071that G++ generates for the following C++ input:
9072
9073
9074void callee (int *);
9075
9076int
9077caller ()
9078{
9079  int i;
9080  callee (&i);
9081  return i;
9082}
9083
9084   This example does not show how to throw or catch an exception from
9085assembly code.  That is a much more complex operation and should always
9086be done in a high-level language, such as C++, that directly supports
9087exceptions.
9088
9089   The code generated by one particular version of G++ when compiling
9090the example above is:
9091
9092
9093_Z6callerv:
9094	.fnstart
9095.LFB2:
9096	@ Function supports interworking.
9097	@ args = 0, pretend = 0, frame = 8
9098	@ frame_needed = 1, uses_anonymous_args = 0
9099	stmfd	sp!, {fp, lr}
9100	.save {fp, lr}
9101.LCFI0:
9102	.setfp fp, sp, #4
9103	add	fp, sp, #4
9104.LCFI1:
9105	.pad #8
9106	sub	sp, sp, #8
9107.LCFI2:
9108	sub	r3, fp, #8
9109	mov	r0, r3
9110	bl	_Z6calleePi
9111	ldr	r3, [fp, #-8]
9112	mov	r0, r3
9113	sub	sp, fp, #4
9114	ldmfd	sp!, {fp, lr}
9115	bx	lr
9116.LFE2:
9117	.fnend
9118
9119   Of course, the sequence of instructions varies based on the options
9120you pass to GCC and on the version of GCC in use.  The exact
9121instructions are not important since we are focusing on the pseudo ops
9122that are used to generate unwind information.
9123
9124   An important assumption made by the unwinder is that the stack frame
9125does not change during the body of the function.  In particular, since
9126we assume that the assembly code does not itself throw an exception,
9127the only point where an exception can be thrown is from a call, such as
9128the `bl' instruction above.  At each call site, the same saved
9129registers (including `lr', which indicates the return address) must be
9130located in the same locations relative to the frame pointer.
9131
9132   The `.fnstart' (*note .fnstart pseudo op: arm_fnstart.) pseudo op
9133appears immediately before the first instruction of the function while
9134the `.fnend' (*note .fnend pseudo op: arm_fnend.) pseudo op appears
9135immediately after the last instruction of the function.  These pseudo
9136ops specify the range of the function.
9137
9138   Only the order of the other pseudos ops (e.g., `.setfp' or `.pad')
9139matters; their exact locations are irrelevant.  In the example above,
9140the compiler emits the pseudo ops with particular instructions.  That
9141makes it easier to understand the code, but it is not required for
9142correctness.  It would work just as well to emit all of the pseudo ops
9143other than `.fnend' in the same order, but immediately after `.fnstart'.
9144
9145   The `.save' (*note .save pseudo op: arm_save.) pseudo op indicates
9146registers that have been saved to the stack so that they can be
9147restored before the function returns.  The argument to the `.save'
9148pseudo op is a list of registers to save.  If a register is
9149"callee-saved" (as specified by the ABI) and is modified by the
9150function you are writing, then your code must save the value before it
9151is modified and restore the original value before the function returns.
9152If an exception is thrown, the run-time library restores the values of
9153these registers from their locations on the stack before returning
9154control to the exception handler.  (Of course, if an exception is not
9155thrown, the function that contains the `.save' pseudo op restores these
9156registers in the function epilogue, as is done with the `ldmfd'
9157instruction above.)
9158
9159   You do not have to save callee-saved registers at the very beginning
9160of the function and you do not need to use the `.save' pseudo op
9161immediately following the point at which the registers are saved.
9162However, if you modify a callee-saved register, you must save it on the
9163stack before modifying it and before calling any functions which might
9164throw an exception.  And, you must use the `.save' pseudo op to
9165indicate that you have done so.
9166
9167   The `.pad' (*note .pad: arm_pad.) pseudo op indicates a modification
9168of the stack pointer that does not save any registers.  The argument is
9169the number of bytes (in decimal) that are subtracted from the stack
9170pointer.  (On ARM CPUs, the stack grows downwards, so subtracting from
9171the stack pointer increases the size of the stack.)
9172
9173   The `.setfp' (*note .setfp pseudo op: arm_setfp.) pseudo op
9174indicates the register that contains the frame pointer.  The first
9175argument is the register that is set, which is typically `fp'.  The
9176second argument indicates the register from which the frame pointer
9177takes its value.  The third argument, if present, is the value (in
9178decimal) added to the register specified by the second argument to
9179compute the value of the frame pointer.  You should not modify the
9180frame pointer in the body of the function.
9181
9182   If you do not use a frame pointer, then you should not use the
9183`.setfp' pseudo op.  If you do not use a frame pointer, then you should
9184avoid modifying the stack pointer outside of the function prologue.
9185Otherwise, the run-time library will be unable to find saved registers
9186when it is unwinding the stack.
9187
9188   The pseudo ops described above are sufficient for writing assembly
9189code that calls functions which may throw exceptions.  If you need to
9190know more about the object-file format used to represent unwind
9191information, you may consult the `Exception Handling ABI for the ARM
9192Architecture' available from `http://infocenter.arm.com'.
9193
9194
9195File: as.info,  Node: AVR-Dependent,  Next: Blackfin-Dependent,  Prev: ARM-Dependent,  Up: Machine Dependencies
9196
91979.5 AVR Dependent Features
9198==========================
9199
9200* Menu:
9201
9202* AVR Options::              Options
9203* AVR Syntax::               Syntax
9204* AVR Opcodes::              Opcodes
9205* AVR Pseudo Instructions::  Pseudo Instructions
9206
9207
9208File: as.info,  Node: AVR Options,  Next: AVR Syntax,  Up: AVR-Dependent
9209
92109.5.1 Options
9211-------------
9212
9213`-mmcu=MCU'
9214     Specify ATMEL AVR instruction set or MCU type.
9215
9216     Instruction set avr1 is for the minimal AVR core, not supported by
9217     the C compiler, only for assembler programs (MCU types: at90s1200,
9218     attiny11, attiny12, attiny15, attiny28).
9219
9220     Instruction set avr2 (default) is for the classic AVR core with up
9221     to 8K program memory space (MCU types: at90s2313, at90s2323,
9222     at90s2333, at90s2343, attiny22, attiny26, at90s4414, at90s4433,
9223     at90s4434, at90s8515, at90c8534, at90s8535).
9224
9225     Instruction set avr25 is for the classic AVR core with up to 8K
9226     program memory space plus the MOVW instruction (MCU types:
9227     attiny13, attiny13a, attiny2313, attiny2313a, attiny24, attiny24a,
9228     attiny4313, attiny44, attiny44a, attiny84, attiny84a, attiny25,
9229     attiny45, attiny85, attiny261, attiny261a, attiny461, attiny461a,
9230     attiny861, attiny861a, attiny87, attiny43u, attiny48, attiny88,
9231     attiny828, at86rf401, ata6289, ata5272).
9232
9233     Instruction set avr3 is for the classic AVR core with up to 128K
9234     program memory space (MCU types: at43usb355, at76c711).
9235
9236     Instruction set avr31 is for the classic AVR core with exactly
9237     128K program memory space (MCU types: atmega103, at43usb320).
9238
9239     Instruction set avr35 is for classic AVR core plus MOVW, CALL, and
9240     JMP instructions (MCU types: attiny167, attiny1634, at90usb82,
9241     at90usb162, atmega8u2, atmega16u2, atmega32u2, ata5505).
9242
9243     Instruction set avr4 is for the enhanced AVR core with up to 8K
9244     program memory space (MCU types: atmega48, atmega48a, atmega48pa,
9245     atmega48p, atmega8, atmega8a, atmega88, atmega88a, atmega88p,
9246     atmega88pa, atmega8515, atmega8535, atmega8hva, at90pwm1,
9247     at90pwm2, at90pwm2b, at90pwm3, at90pwm3b, at90pwm81, ata6285,
9248     ata6286).
9249
9250     Instruction set avr5 is for the enhanced AVR core with up to 128K
9251     program memory space (MCU types: at90pwm161, atmega16, atmega16a,
9252     atmega161, atmega162, atmega163, atmega164a, atmega164p,
9253     atmega164pa, atmega165, atmega165a, atmega165p, atmega165pa,
9254     atmega168, atmega168a, atmega168p, atmega168pa, atmega169,
9255     atmega169a, atmega169p, atmega169pa, atmega32, atmega323,
9256     atmega324a, atmega324p, atmega324pa, atmega325, atmega325a,
9257     atmega32, atmega32a, atmega323, atmega324a, atmega324p,
9258     atmega324pa, atmega325, atmega325a, atmega325p, atmega325p,
9259     atmega325pa, atmega3250, atmega3250a, atmega3250p, atmega3250pa,
9260     atmega328, atmega328p, atmega329, atmega329a, atmega329p,
9261     atmega329pa, atmega3290a, atmega3290p, atmega3290pa, atmega406,
9262     atmega64, atmega64a, atmega64rfr2, atmega644rfr2, atmega640,
9263     atmega644, atmega644a, atmega644p, atmega644pa, atmega645,
9264     atmega645a, atmega645p, atmega6450, atmega6450a, atmega6450p,
9265     atmega649, atmega649a, atmega649p, atmega6490, atmega6490a,
9266     atmega6490p, atmega16hva, atmega16hva2, atmega16hvb,
9267     atmega16hvbrevb, atmega32hvb, atmega32hvbrevb, atmega64hve,
9268     at90can32, at90can64, at90pwm161, at90pwm216, at90pwm316,
9269     atmega32c1, atmega64c1, atmega16m1, atmega32m1, atmega64m1,
9270     atmega16u4, atmega32u4, atmega32u6, at90usb646, at90usb647, at94k,
9271     at90scr100, ata5790, ata5795).
9272
9273     Instruction set avr51 is for the enhanced AVR core with exactly
9274     128K program memory space (MCU types: atmega128, atmega128a,
9275     atmega1280, atmega1281, atmega1284, atmega1284p, atmega128rfa1,
9276     atmega128rfr2, atmega1284rfr2, at90can128, at90usb1286,
9277     at90usb1287, m3000).
9278
9279     Instruction set avr6 is for the enhanced AVR core with a 3-byte PC
9280     (MCU types: atmega2560, atmega2561, atmega256rfr2, atmega2564rfr2).
9281
9282     Instruction set avrxmega2 is for the XMEGA AVR core with 8K to 64K
9283     program memory space and less than 64K data space (MCU types:
9284     atxmega16a4, atxmega16a4u, atxmega16c4, atxmega16d4, atxmega16x1,
9285     atxmega32a4, atxmega32a4u, atxmega32c4, atxmega32d4, atxmega16e5,
9286     atxmega8e5, atxmega32e5, atxmega32x1).
9287
9288     Instruction set avrxmega3 is for the XMEGA AVR core with up to 64K
9289     of combined program memory and RAM, and with program memory
9290     visible in the RAM address space (MCU types: attiny212, attiny214,
9291     attiny412, attiny414, attiny416, attiny417, attiny814, attiny816,
9292     attiny817, attiny1614, attiny1616, attiny1617, attiny3214,
9293     attiny3216, attiny3217).
9294
9295     Instruction set avrxmega4 is for the XMEGA AVR core with up to 64K
9296     program memory space and less than 64K data space (MCU types:
9297     atxmega64a3, atxmega64a3u, atxmega64a4u, atxmega64b1, atxmega64b3,
9298     atxmega64c3, atxmega64d3, atxmega64d4).
9299
9300     Instruction set avrxmega5 is for the XMEGA AVR core with up to 64K
9301     program memory space and greater than 64K data space (MCU types:
9302     atxmega64a1, atxmega64a1u).
9303
9304     Instruction set avrxmega6 is for the XMEGA AVR core with larger
9305     than 64K program memory space and less than 64K data space (MCU
9306     types: atxmega128a3, atxmega128a3u, atxmega128c3, atxmega128d3,
9307     atxmega128d4, atxmega192a3, atxmega192a3u, atxmega128b1,
9308     atxmega128b3, atxmega192c3, atxmega192d3, atxmega256a3,
9309     atxmega256a3u, atxmega256a3b, atxmega256a3bu, atxmega256c3,
9310     atxmega256d3, atxmega384c3, atxmega256d3).
9311
9312     Instruction set avrxmega7 is for the XMEGA AVR core with larger
9313     than 64K program memory space and greater than 64K data space (MCU
9314     types: atxmega128a1, atxmega128a1u, atxmega128a4u).
9315
9316     Instruction set avrtiny is for the ATtiny4/5/9/10/20/40
9317     microcontrollers.
9318
9319`-mall-opcodes'
9320     Accept all AVR opcodes, even if not supported by `-mmcu'.
9321
9322`-mno-skip-bug'
9323     This option disable warnings for skipping two-word instructions.
9324
9325`-mno-wrap'
9326     This option reject `rjmp/rcall' instructions with 8K wrap-around.
9327
9328`-mrmw'
9329     Accept Read-Modify-Write (`XCH,LAC,LAS,LAT') instructions.
9330
9331`-mlink-relax'
9332     Enable support for link-time relaxation.  This is now on by default
9333     and this flag no longer has any effect.
9334
9335`-mno-link-relax'
9336     Disable support for link-time relaxation.  The assembler will
9337     resolve relocations when it can, and may be able to better
9338     compress some debug information.
9339
9340`-mgcc-isr'
9341     Enable the `__gcc_isr' pseudo instruction.
9342
9343`-mno-dollar-line-separator'
9344     Do not treat the `$' character as a line separator character.
9345     This is for languages where `$' is valid character inside symbol
9346     names.
9347
9348
9349
9350File: as.info,  Node: AVR Syntax,  Next: AVR Opcodes,  Prev: AVR Options,  Up: AVR-Dependent
9351
93529.5.2 Syntax
9353------------
9354
9355* Menu:
9356
9357* AVR-Chars::                Special Characters
9358* AVR-Regs::                 Register Names
9359* AVR-Modifiers::            Relocatable Expression Modifiers
9360
9361
9362File: as.info,  Node: AVR-Chars,  Next: AVR-Regs,  Up: AVR Syntax
9363
93649.5.2.1 Special Characters
9365..........................
9366
9367The presence of a `;' anywhere on a line indicates the start of a
9368comment that extends to the end of that line.
9369
9370   If a `#' appears as the first character of a line, the whole line is
9371treated as a comment, but in this case the line can also be a logical
9372line number directive (*note Comments::) or a preprocessor control
9373command (*note Preprocessing::).
9374
9375   The `$' character can be used instead of a newline to separate
9376statements.  Note: the `-mno-dollar-line-separator' option disables
9377this behaviour.
9378
9379
9380File: as.info,  Node: AVR-Regs,  Next: AVR-Modifiers,  Prev: AVR-Chars,  Up: AVR Syntax
9381
93829.5.2.2 Register Names
9383......................
9384
9385The AVR has 32 x 8-bit general purpose working registers `r0', `r1',
9386... `r31'.  Six of the 32 registers can be used as three 16-bit
9387indirect address register pointers for Data Space addressing. One of
9388the these address pointers can also be used as an address pointer for
9389look up tables in Flash program memory. These added function registers
9390are the 16-bit `X', `Y' and `Z' - registers.
9391
9392     X = r26:r27
9393     Y = r28:r29
9394     Z = r30:r31
9395
9396
9397File: as.info,  Node: AVR-Modifiers,  Prev: AVR-Regs,  Up: AVR Syntax
9398
93999.5.2.3 Relocatable Expression Modifiers
9400........................................
9401
9402The assembler supports several modifiers when using relocatable
9403addresses in AVR instruction operands.  The general syntax is the
9404following:
9405
9406     modifier(relocatable-expression)
9407
9408`lo8'
9409     This modifier allows you to use bits 0 through 7 of an address
9410     expression as an 8 bit relocatable expression.
9411
9412`hi8'
9413     This modifier allows you to use bits 7 through 15 of an address
9414     expression as an 8 bit relocatable expression. This is useful
9415     with, for example, the AVR `ldi' instruction and `lo8' modifier.
9416
9417     For example
9418
9419          ldi r26, lo8(sym+10)
9420          ldi r27, hi8(sym+10)
9421
9422`hh8'
9423     This modifier allows you to use bits 16 through 23 of an address
9424     expression as an 8 bit relocatable expression.  Also, can be
9425     useful for loading 32 bit constants.
9426
9427`hlo8'
9428     Synonym of `hh8'.
9429
9430`hhi8'
9431     This modifier allows you to use bits 24 through 31 of an
9432     expression as an 8 bit expression. This is useful with, for
9433     example, the AVR `ldi' instruction and `lo8', `hi8', `hlo8',
9434     `hhi8', modifier.
9435
9436     For example
9437
9438          ldi r26, lo8(285774925)
9439          ldi r27, hi8(285774925)
9440          ldi r28, hlo8(285774925)
9441          ldi r29, hhi8(285774925)
9442          ; r29,r28,r27,r26 = 285774925
9443
9444`pm_lo8'
9445     This modifier allows you to use bits 0 through 7 of an address
9446     expression as an 8 bit relocatable expression.  This modifier is
9447     useful for addressing data or code from Flash/Program memory by
9448     two-byte words. The use of `pm_lo8' is similar to `lo8'.
9449
9450`pm_hi8'
9451     This modifier allows you to use bits 8 through 15 of an address
9452     expression as an 8 bit relocatable expression.  This modifier is
9453     useful for addressing data or code from Flash/Program memory by
9454     two-byte words.
9455
9456     For example, when setting the AVR `Z' register with the `ldi'
9457     instruction for subsequent use by the `ijmp' instruction:
9458
9459          ldi r30, pm_lo8(sym)
9460          ldi r31, pm_hi8(sym)
9461          ijmp
9462
9463`pm_hh8'
9464     This modifier allows you to use bits 15 through 23 of an address
9465     expression as an 8 bit relocatable expression.  This modifier is
9466     useful for addressing data or code from Flash/Program memory by
9467     two-byte words.
9468
9469
9470
9471File: as.info,  Node: AVR Opcodes,  Next: AVR Pseudo Instructions,  Prev: AVR Syntax,  Up: AVR-Dependent
9472
94739.5.3 Opcodes
9474-------------
9475
9476For detailed information on the AVR machine instruction set, see
9477`www.atmel.com/products/AVR'.
9478
9479   `as' implements all the standard AVR opcodes.  The following table
9480summarizes the AVR opcodes, and their arguments.
9481
9482     Legend:
9483        r   any register
9484        d   `ldi' register (r16-r31)
9485        v   `movw' even register (r0, r2, ..., r28, r30)
9486        a   `fmul' register (r16-r23)
9487        w   `adiw' register (r24,r26,r28,r30)
9488        e   pointer registers (X,Y,Z)
9489        b   base pointer register and displacement ([YZ]+disp)
9490        z   Z pointer register (for [e]lpm Rd,Z[+])
9491        M   immediate value from 0 to 255
9492        n   immediate value from 0 to 255 ( n = ~M ). Relocation impossible
9493        s   immediate value from 0 to 7
9494        P   Port address value from 0 to 63. (in, out)
9495        p   Port address value from 0 to 31. (cbi, sbi, sbic, sbis)
9496        K   immediate value from 0 to 63 (used in `adiw', `sbiw')
9497        i   immediate value
9498        l   signed pc relative offset from -64 to 63
9499        L   signed pc relative offset from -2048 to 2047
9500        h   absolute code address (call, jmp)
9501        S   immediate value from 0 to 7 (S = s << 4)
9502        ?   use this opcode entry if no parameters, else use next opcode entry
9503
9504     1001010010001000   clc
9505     1001010011011000   clh
9506     1001010011111000   cli
9507     1001010010101000   cln
9508     1001010011001000   cls
9509     1001010011101000   clt
9510     1001010010111000   clv
9511     1001010010011000   clz
9512     1001010000001000   sec
9513     1001010001011000   seh
9514     1001010001111000   sei
9515     1001010000101000   sen
9516     1001010001001000   ses
9517     1001010001101000   set
9518     1001010000111000   sev
9519     1001010000011000   sez
9520     100101001SSS1000   bclr    S
9521     100101000SSS1000   bset    S
9522     1001010100001001   icall
9523     1001010000001001   ijmp
9524     1001010111001000   lpm     ?
9525     1001000ddddd010+   lpm     r,z
9526     1001010111011000   elpm    ?
9527     1001000ddddd011+   elpm    r,z
9528     0000000000000000   nop
9529     1001010100001000   ret
9530     1001010100011000   reti
9531     1001010110001000   sleep
9532     1001010110011000   break
9533     1001010110101000   wdr
9534     1001010111101000   spm
9535     000111rdddddrrrr   adc     r,r
9536     000011rdddddrrrr   add     r,r
9537     001000rdddddrrrr   and     r,r
9538     000101rdddddrrrr   cp      r,r
9539     000001rdddddrrrr   cpc     r,r
9540     000100rdddddrrrr   cpse    r,r
9541     001001rdddddrrrr   eor     r,r
9542     001011rdddddrrrr   mov     r,r
9543     100111rdddddrrrr   mul     r,r
9544     001010rdddddrrrr   or      r,r
9545     000010rdddddrrrr   sbc     r,r
9546     000110rdddddrrrr   sub     r,r
9547     001001rdddddrrrr   clr     r
9548     000011rdddddrrrr   lsl     r
9549     000111rdddddrrrr   rol     r
9550     001000rdddddrrrr   tst     r
9551     0111KKKKddddKKKK   andi    d,M
9552     0111KKKKddddKKKK   cbr     d,n
9553     1110KKKKddddKKKK   ldi     d,M
9554     11101111dddd1111   ser     d
9555     0110KKKKddddKKKK   ori     d,M
9556     0110KKKKddddKKKK   sbr     d,M
9557     0011KKKKddddKKKK   cpi     d,M
9558     0100KKKKddddKKKK   sbci    d,M
9559     0101KKKKddddKKKK   subi    d,M
9560     1111110rrrrr0sss   sbrc    r,s
9561     1111111rrrrr0sss   sbrs    r,s
9562     1111100ddddd0sss   bld     r,s
9563     1111101ddddd0sss   bst     r,s
9564     10110PPdddddPPPP   in      r,P
9565     10111PPrrrrrPPPP   out     P,r
9566     10010110KKddKKKK   adiw    w,K
9567     10010111KKddKKKK   sbiw    w,K
9568     10011000pppppsss   cbi     p,s
9569     10011010pppppsss   sbi     p,s
9570     10011001pppppsss   sbic    p,s
9571     10011011pppppsss   sbis    p,s
9572     111101lllllll000   brcc    l
9573     111100lllllll000   brcs    l
9574     111100lllllll001   breq    l
9575     111101lllllll100   brge    l
9576     111101lllllll101   brhc    l
9577     111100lllllll101   brhs    l
9578     111101lllllll111   brid    l
9579     111100lllllll111   brie    l
9580     111100lllllll000   brlo    l
9581     111100lllllll100   brlt    l
9582     111100lllllll010   brmi    l
9583     111101lllllll001   brne    l
9584     111101lllllll010   brpl    l
9585     111101lllllll000   brsh    l
9586     111101lllllll110   brtc    l
9587     111100lllllll110   brts    l
9588     111101lllllll011   brvc    l
9589     111100lllllll011   brvs    l
9590     111101lllllllsss   brbc    s,l
9591     111100lllllllsss   brbs    s,l
9592     1101LLLLLLLLLLLL   rcall   L
9593     1100LLLLLLLLLLLL   rjmp    L
9594     1001010hhhhh111h   call    h
9595     1001010hhhhh110h   jmp     h
9596     1001010rrrrr0101   asr     r
9597     1001010rrrrr0000   com     r
9598     1001010rrrrr1010   dec     r
9599     1001010rrrrr0011   inc     r
9600     1001010rrrrr0110   lsr     r
9601     1001010rrrrr0001   neg     r
9602     1001000rrrrr1111   pop     r
9603     1001001rrrrr1111   push    r
9604     1001010rrrrr0111   ror     r
9605     1001010rrrrr0010   swap    r
9606     00000001ddddrrrr   movw    v,v
9607     00000010ddddrrrr   muls    d,d
9608     000000110ddd0rrr   mulsu   a,a
9609     000000110ddd1rrr   fmul    a,a
9610     000000111ddd0rrr   fmuls   a,a
9611     000000111ddd1rrr   fmulsu  a,a
9612     1001001ddddd0000   sts     i,r
9613     1001000ddddd0000   lds     r,i
9614     10o0oo0dddddbooo   ldd     r,b
9615     100!000dddddee-+   ld      r,e
9616     10o0oo1rrrrrbooo   std     b,r
9617     100!001rrrrree-+   st      e,r
9618     1001010100011001   eicall
9619     1001010000011001   eijmp
9620
9621
9622File: as.info,  Node: AVR Pseudo Instructions,  Prev: AVR Opcodes,  Up: AVR-Dependent
9623
96249.5.4 Pseudo Instructions
9625-------------------------
9626
9627The only available pseudo-instruction `__gcc_isr' can be activated by
9628option `-mgcc-isr'.
9629
9630`__gcc_isr 1'
9631     Emit code chunk to be used in avr-gcc ISR prologue.  It will
9632     expand to at most six 1-word instructions, all optional: push of
9633     `tmp_reg', push of `SREG', push and clear of `zero_reg', push of
9634     REG.
9635
9636`__gcc_isr 2'
9637     Emit code chunk to be used in an avr-gcc ISR epilogue.  It will
9638     expand to at most five 1-word instructions, all optional: pop of
9639     REG, pop of `zero_reg', pop of `SREG', pop of `tmp_reg'.
9640
9641`__gcc_isr 0, REG'
9642     Finish avr-gcc ISR function.  Scan code since the last prologue
9643     for usage of: `SREG', `tmp_reg', `zero_reg'.  Prologue chunk and
9644     epilogue chunks will be replaced by appropriate code to save /
9645     restore `SREG', `tmp_reg', `zero_reg' and REG.
9646
9647
9648   Example input:
9649
9650     __vector1:
9651         __gcc_isr 1
9652         lds r24, var
9653         inc r24
9654         sts var, r24
9655         __gcc_isr 2
9656         reti
9657         __gcc_isr 0, r24
9658
9659   Example output:
9660
9661     00000000 <__vector1>:
9662        0:   8f 93           push    r24
9663        2:   8f b7           in      r24, 0x3f
9664        4:   8f 93           push    r24
9665        6:   80 91 60 00     lds     r24, 0x0060     ; 0x800060 <var>
9666        a:   83 95           inc     r24
9667        c:   80 93 60 00     sts     0x0060, r24     ; 0x800060 <var>
9668       10:   8f 91           pop     r24
9669       12:   8f bf           out     0x3f, r24
9670       14:   8f 91           pop     r24
9671       16:   18 95           reti
9672
9673
9674File: as.info,  Node: Blackfin-Dependent,  Next: BPF-Dependent,  Prev: AVR-Dependent,  Up: Machine Dependencies
9675
96769.6 Blackfin Dependent Features
9677===============================
9678
9679* Menu:
9680
9681* Blackfin Options::		Blackfin Options
9682* Blackfin Syntax::		Blackfin Syntax
9683* Blackfin Directives::		Blackfin Directives
9684
9685
9686File: as.info,  Node: Blackfin Options,  Next: Blackfin Syntax,  Up: Blackfin-Dependent
9687
96889.6.1 Options
9689-------------
9690
9691`-mcpu=PROCESSOR[-SIREVISION]'
9692     This option specifies the target processor.  The optional
9693     SIREVISION is not used in assembler.  It's here such that GCC can
9694     easily pass down its `-mcpu=' option.  The assembler will issue an
9695     error message if an attempt is made to assemble an instruction
9696     which will not execute on the target processor.  The following
9697     processor names are recognized: `bf504', `bf506', `bf512', `bf514',
9698     `bf516', `bf518', `bf522', `bf523', `bf524', `bf525', `bf526',
9699     `bf527', `bf531', `bf532', `bf533', `bf534', `bf535' (not
9700     implemented yet), `bf536', `bf537', `bf538', `bf539', `bf542',
9701     `bf542m', `bf544', `bf544m', `bf547', `bf547m', `bf548', `bf548m',
9702     `bf549', `bf549m', `bf561', and `bf592'.
9703
9704`-mfdpic'
9705     Assemble for the FDPIC ABI.
9706
9707`-mno-fdpic'
9708`-mnopic'
9709     Disable -mfdpic.
9710
9711
9712File: as.info,  Node: Blackfin Syntax,  Next: Blackfin Directives,  Prev: Blackfin Options,  Up: Blackfin-Dependent
9713
97149.6.2 Syntax
9715------------
9716
9717`Special Characters'
9718     Assembler input is free format and may appear anywhere on the line.
9719     One instruction may extend across multiple lines or more than one
9720     instruction may appear on the same line.  White space (space, tab,
9721     comments or newline) may appear anywhere between tokens.  A token
9722     must not have embedded spaces.  Tokens include numbers, register
9723     names, keywords, user identifiers, and also some multicharacter
9724     special symbols like "+=", "/*" or "||".
9725
9726     Comments are introduced by the `#' character and extend to the end
9727     of the current line.  If the `#' appears as the first character of
9728     a line, the whole line is treated as a comment, but in this case
9729     the line can also be a logical line number directive (*note
9730     Comments::) or a preprocessor control command (*note
9731     Preprocessing::).
9732
9733`Instruction Delimiting'
9734     A semicolon must terminate every instruction.  Sometimes a complete
9735     instruction will consist of more than one operation.  There are two
9736     cases where this occurs.  The first is when two general operations
9737     are combined.  Normally a comma separates the different parts, as
9738     in
9739
9740          a0= r3.h * r2.l, a1 = r3.l * r2.h ;
9741
9742     The second case occurs when a general instruction is combined with
9743     one or two memory references for joint issue.  The latter portions
9744     are set off by a "||" token.
9745
9746          a0 = r3.h * r2.l || r1 = [p3++] || r4 = [i2++];
9747
9748     Multiple instructions can occur on the same line.  Each must be
9749     terminated by a semicolon character.
9750
9751`Register Names'
9752     The assembler treats register names and instruction keywords in a
9753     case insensitive manner.  User identifiers are case sensitive.
9754     Thus, R3.l, R3.L, r3.l and r3.L are all equivalent input to the
9755     assembler.
9756
9757     Register names are reserved and may not be used as program
9758     identifiers.
9759
9760     Some operations (such as "Move Register") require a register pair.
9761     Register pairs are always data registers and are denoted using a
9762     colon, eg., R3:2.  The larger number must be written firsts.  Note
9763     that the hardware only supports odd-even pairs, eg., R7:6, R5:4,
9764     R3:2, and R1:0.
9765
9766     Some instructions (such as -SP (Push Multiple)) require a group of
9767     adjacent registers.  Adjacent registers are denoted in the syntax
9768     by the range enclosed in parentheses and separated by a colon,
9769     eg., (R7:3).  Again, the larger number appears first.
9770
9771     Portions of a particular register may be individually specified.
9772     This is written with a dot (".") following the register name and
9773     then a letter denoting the desired portion.  For 32-bit registers,
9774     ".H" denotes the most significant ("High") portion.  ".L" denotes
9775     the least-significant portion.  The subdivisions of the 40-bit
9776     registers are described later.
9777
9778`Accumulators'
9779     The set of 40-bit registers A1 and A0 that normally contain data
9780     that is being manipulated.  Each accumulator can be accessed in
9781     four ways.
9782
9783    `one 40-bit register'
9784          The register will be referred to as A1 or A0.
9785
9786    `one 32-bit register'
9787          The registers are designated as A1.W or A0.W.
9788
9789    `two 16-bit registers'
9790          The registers are designated as A1.H, A1.L, A0.H or A0.L.
9791
9792    `one 8-bit register'
9793          The registers are designated as A1.X or A0.X for the bits that
9794          extend beyond bit 31.
9795
9796`Data Registers'
9797     The set of 32-bit registers (R0, R1, R2, R3, R4, R5, R6 and R7)
9798     that normally contain data for manipulation.  These are
9799     abbreviated as D-register or Dreg.  Data registers can be accessed
9800     as 32-bit registers or as two independent 16-bit registers.  The
9801     least significant 16 bits of each register is called the "low"
9802     half and is designated with ".L" following the register name.  The
9803     most significant 16 bits are called the "high" half and is
9804     designated with ".H" following the name.
9805
9806             R7.L, r2.h, r4.L, R0.H
9807
9808`Pointer Registers'
9809     The set of 32-bit registers (P0, P1, P2, P3, P4, P5, SP and FP)
9810     that normally contain byte addresses of data structures.  These are
9811     abbreviated as P-register or Preg.
9812
9813          p2, p5, fp, sp
9814
9815`Stack Pointer SP'
9816     The stack pointer contains the 32-bit address of the last occupied
9817     byte location in the stack.  The stack grows by decrementing the
9818     stack pointer.
9819
9820`Frame Pointer FP'
9821     The frame pointer contains the 32-bit address of the previous frame
9822     pointer in the stack.  It is located at the top of a frame.
9823
9824`Loop Top'
9825     LT0 and LT1.  These registers contain the 32-bit address of the
9826     top of a zero overhead loop.
9827
9828`Loop Count'
9829     LC0 and LC1.  These registers contain the 32-bit counter of the
9830     zero overhead loop executions.
9831
9832`Loop Bottom'
9833     LB0 and LB1.  These registers contain the 32-bit address of the
9834     bottom of a zero overhead loop.
9835
9836`Index Registers'
9837     The set of 32-bit registers (I0, I1, I2, I3) that normally contain
9838     byte addresses of data structures.  Abbreviated I-register or Ireg.
9839
9840`Modify Registers'
9841     The set of 32-bit registers (M0, M1, M2, M3) that normally contain
9842     offset values that are added and subtracted to one of the index
9843     registers.  Abbreviated as Mreg.
9844
9845`Length Registers'
9846     The set of 32-bit registers (L0, L1, L2, L3) that normally contain
9847     the length in bytes of the circular buffer.  Abbreviated as Lreg.
9848     Clear the Lreg to disable circular addressing for the
9849     corresponding Ireg.
9850
9851`Base Registers'
9852     The set of 32-bit registers (B0, B1, B2, B3) that normally contain
9853     the base address in bytes of the circular buffer.  Abbreviated as
9854     Breg.
9855
9856`Floating Point'
9857     The Blackfin family has no hardware floating point but the .float
9858     directive generates ieee floating point numbers for use with
9859     software floating point libraries.
9860
9861`Blackfin Opcodes'
9862     For detailed information on the Blackfin machine instruction set,
9863     see the Blackfin Processor Instruction Set Reference.
9864
9865
9866
9867File: as.info,  Node: Blackfin Directives,  Prev: Blackfin Syntax,  Up: Blackfin-Dependent
9868
98699.6.3 Directives
9870----------------
9871
9872The following directives are provided for compatibility with the VDSP
9873assembler.
9874
9875`.byte2'
9876     Initializes a two byte data object.
9877
9878     This maps to the `.short' directive.
9879
9880`.byte4'
9881     Initializes a four byte data object.
9882
9883     This maps to the `.int' directive.
9884
9885`.db'
9886     Initializes a single byte data object.
9887
9888     This directive is a synonym for `.byte'.
9889
9890`.dw'
9891     Initializes a two byte data object.
9892
9893     This directive is a synonym for `.byte2'.
9894
9895`.dd'
9896     Initializes a four byte data object.
9897
9898     This directive is a synonym for `.byte4'.
9899
9900`.var'
9901     Define and initialize a 32 bit data object.
9902
9903
9904File: as.info,  Node: BPF-Dependent,  Next: CR16-Dependent,  Prev: Blackfin-Dependent,  Up: Machine Dependencies
9905
99069.7 BPF Dependent Features
9907==========================
9908
9909* Menu:
9910
9911* BPF Options::                 Options
9912* BPF Syntax::		        Syntax
9913* BPF Directives::		Machine Directives
9914* BPF Opcodes::			Opcodes
9915
9916
9917File: as.info,  Node: BPF Options,  Next: BPF Syntax,  Up: BPF-Dependent
9918
99199.7.1 Options
9920-------------
9921
9922`-EB'
9923     This option specifies that the assembler should emit big-endian
9924     eBPF.
9925
9926`-EL'
9927     This option specifies that the assembler should emit little-endian
9928     eBPF.
9929
9930   Note that if no endianness option is specified in the command line,
9931the host endianness is used.
9932
9933
9934File: as.info,  Node: BPF Syntax,  Next: BPF Directives,  Prev: BPF Options,  Up: BPF-Dependent
9935
99369.7.2 Syntax
9937------------
9938
9939* Menu:
9940
9941* BPF-Chars::                Special Characters
9942* BPF-Regs::                 Register Names
9943* BPF-Pseudo-Maps::	     Pseudo map fds
9944
9945
9946File: as.info,  Node: BPF-Chars,  Next: BPF-Regs,  Up: BPF Syntax
9947
99489.7.2.1 Special Characters
9949..........................
9950
9951The presence of a `;' on a line indicates the start of a comment that
9952extends to the end of the current line.  If a `#' appears as the first
9953character of a line, the whole line is treated as a comment.
9954
9955   Statements and assembly directives are separated by newlines.
9956
9957
9958File: as.info,  Node: BPF-Regs,  Next: BPF-Pseudo-Maps,  Prev: BPF-Chars,  Up: BPF Syntax
9959
99609.7.2.2 Register Names
9961......................
9962
9963The eBPF processor provides ten general-purpose 64-bit registers, which
9964are read-write, and a read-only frame pointer register:
9965
9966`%r0 .. %r9'
9967     General-purpose registers.
9968
9969`%r10'
9970     Frame pointer register.
9971
9972   Some registers have additional names, to reflect their role in the
9973eBPF ABI:
9974
9975`%a'
9976     This is `%r0'.
9977
9978`%ctx'
9979     This is `%r6'.
9980
9981`%fp'
9982     This is `%r10'.
9983
9984
9985File: as.info,  Node: BPF-Pseudo-Maps,  Prev: BPF-Regs,  Up: BPF Syntax
9986
99879.7.2.3 Pseudo Maps
9988...................
9989
9990The `LDDW' instruction can take a literal pseudo map file descriptor as
9991its second argument.  This uses the syntax `%map_fd(N)' where `N' is a
9992signed number.
9993
9994   For example, to load the address of the pseudo map with file
9995descriptor `2' in register `r1' we would do:
9996
9997             lddw %r1, %map_fd(2)
9998
9999
10000File: as.info,  Node: BPF Directives,  Next: BPF Opcodes,  Prev: BPF Syntax,  Up: BPF-Dependent
10001
100029.7.3 Machine Directives
10003------------------------
10004
10005The BPF version of `as' supports the following additional machine
10006directives:
10007
10008`.word'
10009     The `.half' directive produces a 16 bit value.
10010
10011`.word'
10012     The `.word' directive produces a 32 bit value.
10013
10014`.dword'
10015     The `.dword' directive produces a 64 bit value.
10016
10017
10018File: as.info,  Node: BPF Opcodes,  Prev: BPF Directives,  Up: BPF-Dependent
10019
100209.7.4 Opcodes
10021-------------
10022
10023In the instruction descriptions below the following field descriptors
10024are used:
10025
10026`%d'
10027     Destination general-purpose register whose role is to be
10028     destination of an operation.
10029
10030`%s'
10031     Source general-purpose register whose role is to be the source of
10032     an operation.
10033
10034`disp16'
10035     16-bit signed PC-relative offset, measured in number of 64-bit
10036     words, minus one.
10037
10038`disp32'
10039     32-bit signed PC-relative offset, measured in number of 64-bit
10040     words, minus one.
10041
10042`offset16'
10043     Signed 16-bit immediate.
10044
10045`imm32'
10046     Signed 32-bit immediate.
10047
10048`imm64'
10049     Signed 64-bit immediate.
10050
100519.7.4.1 Arithmetic instructions
10052...............................
10053
10054The destination register in these instructions act like an accumulator.
10055
10056`add %d, (%s|imm32)'
10057     64-bit arithmetic addition.
10058
10059`sub %d, (%s|imm32)'
10060     64-bit arithmetic subtraction.
10061
10062`mul %d, (%s|imm32)'
10063     64-bit arithmetic multiplication.
10064
10065`div %d, (%s|imm32)'
10066     64-bit arithmetic integer division.
10067
10068`mod %d, (%s|imm32)'
10069     64-bit integer remainder.
10070
10071`and %d, (%s|imm32)'
10072     64-bit bit-wise "and" operation.
10073
10074`or %d, (%s|imm32)'
10075     64-bit bit-wise "or" operation.
10076
10077`xor %d, (%s|imm32)'
10078     64-bit bit-wise exclusive-or operation.
10079
10080`lsh %d, (%s|imm32)'
10081     64-bit left shift, by `%s' or `imm32' bits.
10082
10083`rsh %d, (%s|imm32)'
10084     64-bit right logical shift, by `%s' or `imm32' bits.
10085
10086`arsh %d, (%s|imm32)'
10087     64-bit right arithmetic shift, by `%s' or `imm32' bits.
10088
10089`neg %d'
10090     64-bit arithmetic negation.
10091
10092`mov %d, (%s|imm32)'
10093     Move the 64-bit value of `%s' in `%d', or load `imm32' in `%d'.
10094
100959.7.4.2 32-bit arithmetic instructions
10096......................................
10097
10098The destination register in these instructions act as an accumulator.
10099
10100`add32 %d, (%s|imm32)'
10101     32-bit arithmetic addition.
10102
10103`sub32 %d, (%s|imm32)'
10104     32-bit arithmetic subtraction.
10105
10106`mul32 %d, (%s|imm32)'
10107     32-bit arithmetic multiplication.
10108
10109`div32 %d, (%s|imm32)'
10110     32-bit arithmetic integer division.
10111
10112`mod32 %d, (%s|imm32)'
10113     32-bit integer remainder.
10114
10115`and32 %d, (%s|imm32)'
10116     32-bit bit-wise "and" operation.
10117
10118`or32 %d, (%s|imm32)'
10119     32-bit bit-wise "or" operation.
10120
10121`xor32 %d, (%s|imm32)'
10122     32-bit bit-wise exclusive-or operation.
10123
10124`lsh32 %d, (%s|imm32)'
10125     32-bit left shift, by `%s' or `imm32' bits.
10126
10127`rsh32 %d, (%s|imm32)'
10128     32-bit right logical shift, by `%s' or `imm32' bits.
10129
10130`arsh32 %d, (%s|imm32)'
10131     32-bit right arithmetic shift, by `%s' or `imm32' bits.
10132
10133`neg32 %d'
10134     32-bit arithmetic negation.
10135
10136`mov32 %d, (%s|imm32)'
10137     Move the 32-bit value of `%s' in `%d', or load `imm32' in `%d'.
10138
101399.7.4.3 Endianness conversion instructions
10140..........................................
10141
10142`endle %d, (8|16|32)'
10143     Convert the 8-bit, 16-bit or 32-bit value in `%d' to little-endian.
10144
10145`endbe %d, (8|16|32)'
10146     Convert the 8-bit, 16-bit or 32-bit value in `%d' to big-endian.
10147
101489.7.4.4 64-bit load and pseudo maps
10149...................................
10150
10151`lddw %d, imm64'
10152     Load the given signed 64-bit immediate, or pseudo map descriptor,
10153     to the destination register `%d'.
10154
10155`lddw %d, %map_fd(N)'
10156     Load the address of the given pseudo map fd _N_ to the destination
10157     register `%d'.
10158
101599.7.4.5 Load instructions for socket filters
10160............................................
10161
10162The following instructions are intended to be used in socket filters,
10163and are therefore not general-purpose: they make assumptions on the
10164contents of several registers.  See the file
10165`Documentation/networking/filter.txt' in the Linux kernel source tree
10166for more information.
10167
10168   Absolute loads:
10169
10170`ldabsdw imm32'
10171     Absolute 64-bit load.
10172
10173`ldabsw imm32'
10174     Absolute 32-bit load.
10175
10176`ldabsh imm32'
10177     Absolute 16-bit load.
10178
10179`ldabsb imm32'
10180     Absolute 8-bit load.
10181
10182   Indirect loads:
10183
10184`ldinddw %s, imm32'
10185     Indirect 64-bit load.
10186
10187`ldindw %s, imm32'
10188     Indirect 32-bit load.
10189
10190`ldindh %s, imm32'
10191     Indirect 16-bit load.
10192
10193`ldindb %s, imm32'
10194     Indirect 8-bit load.
10195
101969.7.4.6 Generic load/store instructions
10197.......................................
10198
10199General-purpose load and store instructions are provided for several
10200word sizes.
10201
10202   Load to register instructions:
10203
10204`ldxdw %d, [%s+offset16]'
10205     Generic 64-bit load.
10206
10207`ldxw %d, [%s+offset16]'
10208     Generic 32-bit load.
10209
10210`ldxh %d, [%s+offset16]'
10211     Generic 16-bit load.
10212
10213`ldxb %d, [%s+offset16]'
10214     Generic 8-bit load.
10215
10216   Store from register instructions:
10217
10218`stxdw [%d+offset16], %s'
10219     Generic 64-bit store.
10220
10221`stxw [%d+offset16], %s'
10222     Generic 32-bit store.
10223
10224`stxh [%d+offset16], %s'
10225     Generic 16-bit store.
10226
10227`stxb [%d+offset16], %s'
10228     Generic 8-bit store.
10229
10230   Store from immediates instructions:
10231
10232`stddw [%d+offset16], imm32'
10233     Store immediate as 64-bit.
10234
10235`stdw [%d+offset16], imm32'
10236     Store immediate as 32-bit.
10237
10238`stdh [%d+offset16], imm32'
10239     Store immediate as 16-bit.
10240
10241`stdb [%d+offset16], imm32'
10242     Store immediate as 8-bit.
10243
102449.7.4.7 Jump instructions
10245.........................
10246
10247eBPF provides the following compare-and-jump instructions, which
10248compare the values of the two given registers, or the values of a
10249register and an immediate, and perform a branch in case the comparison
10250holds true.
10251
10252`ja %d,(%s|imm32),disp16'
10253     Jump-always.
10254
10255`jeq %d,(%s|imm32),disp16'
10256     Jump if equal.
10257
10258`jgt %d,(%s|imm32),disp16'
10259     Jump if greater.
10260
10261`jge %d,(%s|imm32),disp16'
10262     Jump if greater or equal.
10263
10264`jlt %d,(%s|imm32),disp16'
10265     Jump if lesser.
10266
10267`jle %d,(%s|imm32),disp16'
10268     Jump if lesser or equal.
10269
10270`jset %d,(%s|imm32),disp16'
10271     Jump if signed equal.
10272
10273`jne %d,(%s|imm32),disp16'
10274     Jump if not equal.
10275
10276`jsgt %d,(%s|imm32),disp16'
10277     Jump if signed greater.
10278
10279`jsge %d,(%s|imm32),disp16'
10280     Jump if signed greater or equal.
10281
10282`jslt %d,(%s|imm32),disp16'
10283     Jump if signed lesser.
10284
10285`jsle %d,(%s|imm32),disp16'
10286     Jump if signed lesser or equal.
10287
10288   A call instruction is provided in order to perform calls to other
10289eBPF functions, or to external kernel helpers:
10290
10291`call (disp32|imm32)'
10292     Jump and link to the offset _disp32_, or to the kernel helper
10293     function identified by _imm32_.
10294
10295   Finally:
10296
10297`exit'
10298     Terminate the eBPF program.
10299
103009.7.4.8 Atomic instructions
10301...........................
10302
10303Atomic exchange-and-add instructions are provided in two flavors: one
10304for swapping 64-bit quantities and another for 32-bit quantities.
10305
10306`xadddw [%d+offset16],%s'
10307     Exchange-and-add a 64-bit value at the specified location.
10308
10309`xaddw [%d+offset16],%s'
10310     Exchange-and-add a 32-bit value at the specified location.
10311
10312
10313File: as.info,  Node: CR16-Dependent,  Next: CRIS-Dependent,  Prev: BPF-Dependent,  Up: Machine Dependencies
10314
103159.8 CR16 Dependent Features
10316===========================
10317
10318* Menu:
10319
10320* CR16 Operand Qualifiers::     CR16 Machine Operand Qualifiers
10321* CR16 Syntax::                 Syntax for the CR16
10322
10323
10324File: as.info,  Node: CR16 Operand Qualifiers,  Next: CR16 Syntax,  Up: CR16-Dependent
10325
103269.8.1 CR16 Operand Qualifiers
10327-----------------------------
10328
10329The National Semiconductor CR16 target of `as' has a few machine
10330dependent operand qualifiers.
10331
10332   Operand expression type qualifier is an optional field in the
10333instruction operand, to determines the type of the expression field of
10334an operand. The `@' is required. CR16 architecture uses one of the
10335following expression qualifiers:
10336
10337`s'
10338     - `Specifies expression operand type as small'
10339
10340`m'
10341     - `Specifies expression operand type as medium'
10342
10343`l'
10344     - `Specifies expression operand type as large'
10345
10346`c'
10347     - `Specifies the CR16 Assembler generates a relocation entry for
10348     the operand, where pc has implied bit, the expression is adjusted
10349     accordingly. The linker uses the relocation entry to update the
10350     operand address at link time.'
10351
10352`got/GOT'
10353     - `Specifies the CR16 Assembler generates a relocation entry for
10354     the operand, offset from Global Offset Table. The linker uses this
10355     relocation entry to update the operand address at link time'
10356
10357`cgot/cGOT'
10358     - `Specifies the CompactRISC Assembler generates a relocation
10359     entry for the operand, where pc has implied bit, the expression is
10360     adjusted accordingly. The linker uses the relocation entry to
10361     update the operand address at link time.'
10362
10363   CR16 target operand qualifiers and its size (in bits):
10364
10365`Immediate Operand: s'
10366     4 bits.
10367
10368`Immediate Operand: m'
10369     16 bits, for movb and movw instructions.
10370
10371`Immediate Operand: m'
10372     20 bits, movd instructions.
10373
10374`Immediate Operand: l'
10375     32 bits.
10376
10377`Absolute Operand: s'
10378     Illegal specifier for this operand.
10379
10380`Absolute Operand: m'
10381     20 bits, movd instructions.
10382
10383`Displacement Operand: s'
10384     8 bits.
10385
10386`Displacement Operand: m'
10387     16 bits.
10388
10389`Displacement Operand: l'
10390     24 bits.
10391
10392
10393   For example:
10394     1   `movw $_myfun@c,r1'
10395
10396         This loads the address of _myfun, shifted right by 1, into r1.
10397
10398     2   `movd $_myfun@c,(r2,r1)'
10399
10400         This loads the address of _myfun, shifted right by 1, into register-pair r2-r1.
10401
10402     3   `_myfun_ptr:'
10403         `.long _myfun@c'
10404         `loadd _myfun_ptr, (r1,r0)'
10405         `jal (r1,r0)'
10406
10407         This .long directive, the address of _myfunc, shifted right by 1 at link time.
10408
10409     4   `loadd  _data1@GOT(r12), (r1,r0)'
10410
10411         This loads the address of _data1, into global offset table (ie GOT) and its offset value from GOT loads into register-pair r2-r1.
10412
10413     5   `loadd  _myfunc@cGOT(r12), (r1,r0)'
10414
10415         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.
10416
10417
10418File: as.info,  Node: CR16 Syntax,  Prev: CR16 Operand Qualifiers,  Up: CR16-Dependent
10419
104209.8.2 CR16 Syntax
10421-----------------
10422
10423* Menu:
10424
10425* CR16-Chars::                Special Characters
10426
10427
10428File: as.info,  Node: CR16-Chars,  Up: CR16 Syntax
10429
104309.8.2.1 Special Characters
10431..........................
10432
10433The presence of a `#' on a line indicates the start of a comment that
10434extends to the end of the current line.  If the `#' appears as the
10435first character of a line, the whole line is treated as a comment, but
10436in this case the line can also be a logical line number directive
10437(*note Comments::) or a preprocessor control command (*note
10438Preprocessing::).
10439
10440   The `;' character can be used to separate statements on the same
10441line.
10442
10443
10444File: as.info,  Node: CRIS-Dependent,  Next: C-SKY-Dependent,  Prev: CR16-Dependent,  Up: Machine Dependencies
10445
104469.9 CRIS Dependent Features
10447===========================
10448
10449* Menu:
10450
10451* CRIS-Opts::              Command-line Options
10452* CRIS-Expand::            Instruction expansion
10453* CRIS-Symbols::           Symbols
10454* CRIS-Syntax::            Syntax
10455
10456
10457File: as.info,  Node: CRIS-Opts,  Next: CRIS-Expand,  Up: CRIS-Dependent
10458
104599.9.1 Command-line Options
10460--------------------------
10461
10462The CRIS version of `as' has these machine-dependent command-line
10463options.
10464
10465   The format of the generated object files can be either ELF or a.out,
10466specified by the command-line options `--emulation=crisaout' and
10467`--emulation=criself'.  The default is ELF (criself), unless `as' has
10468been configured specifically for a.out by using the configuration name
10469`cris-axis-aout'.
10470
10471   There are two different link-incompatible ELF object file variants
10472for CRIS, for use in environments where symbols are expected to be
10473prefixed by a leading `_' character and for environments without such a
10474symbol prefix.  The variant used for GNU/Linux port has no symbol
10475prefix.  Which variant to produce is specified by either of the options
10476`--underscore' and `--no-underscore'.  The default is `--underscore'.
10477Since symbols in CRIS a.out objects are expected to have a `_' prefix,
10478specifying `--no-underscore' when generating a.out objects is an error.
10479Besides the object format difference, the effect of this option is to
10480parse register names differently (*note crisnous::).  The
10481`--no-underscore' option makes a `$' register prefix mandatory.
10482
10483   The option `--pic' must be passed to `as' in order to recognize the
10484symbol syntax used for ELF (SVR4 PIC) position-independent-code (*note
10485crispic::).  This will also affect expansion of instructions.  The
10486expansion with `--pic' will use PC-relative rather than (slightly
10487faster) absolute addresses in those expansions.  This option is only
10488valid when generating ELF format object files.
10489
10490   The option `--march=ARCHITECTURE' specifies the recognized
10491instruction set and recognized register names.  It also controls the
10492architecture type of the object file.  Valid values for ARCHITECTURE
10493are:
10494`v0_v10'
10495     All instructions and register names for any architecture variant
10496     in the set v0...v10 are recognized.  This is the default if the
10497     target is configured as cris-*.
10498
10499`v10'
10500     Only instructions and register names for CRIS v10 (as found in
10501     ETRAX 100 LX) are recognized.  This is the default if the target
10502     is configured as crisv10-*.
10503
10504`v32'
10505     Only instructions and register names for CRIS v32 (code name
10506     Guinness) are recognized.  This is the default if the target is
10507     configured as crisv32-*.  This value implies `--no-mul-bug-abort'.
10508     (A subsequent `--mul-bug-abort' will turn it back on.)
10509
10510`common_v10_v32'
10511     Only instructions with register names and addressing modes with
10512     opcodes common to the v10 and v32 are recognized.
10513
10514   When `-N' is specified, `as' will emit a warning when a 16-bit
10515branch instruction is expanded into a 32-bit multiple-instruction
10516construct (*note CRIS-Expand::).
10517
10518   Some versions of the CRIS v10, for example in the Etrax 100 LX,
10519contain a bug that causes destabilizing memory accesses when a multiply
10520instruction is executed with certain values in the first operand just
10521before a cache-miss.  When the `--mul-bug-abort' command-line option is
10522active (the default value), `as' will refuse to assemble a file
10523containing a multiply instruction at a dangerous offset, one that could
10524be the last on a cache-line, or is in a section with insufficient
10525alignment.  This placement checking does not catch any case where the
10526multiply instruction is dangerously placed because it is located in a
10527delay-slot.  The `--mul-bug-abort' command-line option turns off the
10528checking.
10529
10530
10531File: as.info,  Node: CRIS-Expand,  Next: CRIS-Symbols,  Prev: CRIS-Opts,  Up: CRIS-Dependent
10532
105339.9.2 Instruction expansion
10534---------------------------
10535
10536`as' will silently choose an instruction that fits the operand size for
10537`[register+constant]' operands.  For example, the offset `127' in
10538`move.d [r3+127],r4' fits in an instruction using a signed-byte offset.
10539Similarly, `move.d [r2+32767],r1' will generate an instruction using a
1054016-bit offset.  For symbolic expressions and constants that do not fit
10541in 16 bits including the sign bit, a 32-bit offset is generated.
10542
10543   For branches, `as' will expand from a 16-bit branch instruction into
10544a sequence of instructions that can reach a full 32-bit address.  Since
10545this does not correspond to a single instruction, such expansions can
10546optionally be warned about.  *Note CRIS-Opts::.
10547
10548   If the operand is found to fit the range, a `lapc' mnemonic will
10549translate to a `lapcq' instruction.  Use `lapc.d' to force the 32-bit
10550`lapc' instruction.
10551
10552   Similarly, the `addo' mnemonic will translate to the shortest
10553fitting instruction of `addoq', `addo.w' and `addo.d', when used with a
10554operand that is a constant known at assembly time.
10555
10556
10557File: as.info,  Node: CRIS-Symbols,  Next: CRIS-Syntax,  Prev: CRIS-Expand,  Up: CRIS-Dependent
10558
105599.9.3 Symbols
10560-------------
10561
10562Some symbols are defined by the assembler.  They're intended to be used
10563in conditional assembly, for example:
10564      .if ..asm.arch.cris.v32
10565      CODE FOR CRIS V32
10566      .elseif ..asm.arch.cris.common_v10_v32
10567      CODE COMMON TO CRIS V32 AND CRIS V10
10568      .elseif ..asm.arch.cris.v10 | ..asm.arch.cris.any_v0_v10
10569      CODE FOR V10
10570      .else
10571      .error "Code needs to be added here."
10572      .endif
10573
10574   These symbols are defined in the assembler, reflecting command-line
10575options, either when specified or the default.  They are always
10576defined, to 0 or 1.
10577`..asm.arch.cris.any_v0_v10'
10578     This symbol is non-zero when `--march=v0_v10' is specified or the
10579     default.
10580
10581`..asm.arch.cris.common_v10_v32'
10582     Set according to the option `--march=common_v10_v32'.
10583
10584`..asm.arch.cris.v10'
10585     Reflects the option `--march=v10'.
10586
10587`..asm.arch.cris.v32'
10588     Corresponds to `--march=v10'.
10589
10590   Speaking of symbols, when a symbol is used in code, it can have a
10591suffix modifying its value for use in position-independent code. *Note
10592CRIS-Pic::.
10593
10594
10595File: as.info,  Node: CRIS-Syntax,  Prev: CRIS-Symbols,  Up: CRIS-Dependent
10596
105979.9.4 Syntax
10598------------
10599
10600There are different aspects of the CRIS assembly syntax.
10601
10602* Menu:
10603
10604* CRIS-Chars::		        Special Characters
10605* CRIS-Pic::			Position-Independent Code Symbols
10606* CRIS-Regs::			Register Names
10607* CRIS-Pseudos::		Assembler Directives
10608
10609
10610File: as.info,  Node: CRIS-Chars,  Next: CRIS-Pic,  Up: CRIS-Syntax
10611
106129.9.4.1 Special Characters
10613..........................
10614
10615The character `#' is a line comment character.  It starts a comment if
10616and only if it is placed at the beginning of a line.
10617
10618   A `;' character starts a comment anywhere on the line, causing all
10619characters up to the end of the line to be ignored.
10620
10621   A `@' character is handled as a line separator equivalent to a
10622logical new-line character (except in a comment), so separate
10623instructions can be specified on a single line.
10624
10625
10626File: as.info,  Node: CRIS-Pic,  Next: CRIS-Regs,  Prev: CRIS-Chars,  Up: CRIS-Syntax
10627
106289.9.4.2 Symbols in position-independent code
10629............................................
10630
10631When generating position-independent code (SVR4 PIC) for use in
10632cris-axis-linux-gnu or crisv32-axis-linux-gnu shared libraries, symbol
10633suffixes are used to specify what kind of run-time symbol lookup will
10634be used, expressed in the object as different _relocation types_.
10635Usually, all absolute symbol values must be located in a table, the
10636_global offset table_, leaving the code position-independent;
10637independent of values of global symbols and independent of the address
10638of the code.  The suffix modifies the value of the symbol, into for
10639example an index into the global offset table where the real symbol
10640value is entered, or a PC-relative value, or a value relative to the
10641start of the global offset table.  All symbol suffixes start with the
10642character `:' (omitted in the list below).  Every symbol use in code or
10643a read-only section must therefore have a PIC suffix to enable a useful
10644shared library to be created.  Usually, these constructs must not be
10645used with an additive constant offset as is usually allowed, i.e. no 4
10646as in `symbol + 4' is allowed.  This restriction is checked at
10647link-time, not at assembly-time.
10648
10649`GOT'
10650     Attaching this suffix to a symbol in an instruction causes the
10651     symbol to be entered into the global offset table.  The value is a
10652     32-bit index for that symbol into the global offset table.  The
10653     name of the corresponding relocation is `R_CRIS_32_GOT'.  Example:
10654     `move.d [$r0+extsym:GOT],$r9'
10655
10656`GOT16'
10657     Same as for `GOT', but the value is a 16-bit index into the global
10658     offset table.  The corresponding relocation is `R_CRIS_16_GOT'.
10659     Example: `move.d [$r0+asymbol:GOT16],$r10'
10660
10661`PLT'
10662     This suffix is used for function symbols.  It causes a _procedure
10663     linkage table_, an array of code stubs, to be created at the time
10664     the shared object is created or linked against, together with a
10665     global offset table entry.  The value is a pc-relative offset to
10666     the corresponding stub code in the procedure linkage table.  This
10667     arrangement causes the run-time symbol resolver to be called to
10668     look up and set the value of the symbol the first time the
10669     function is called (at latest; depending environment variables).
10670     It is only safe to leave the symbol unresolved this way if all
10671     references are function calls.  The name of the relocation is
10672     `R_CRIS_32_PLT_PCREL'.  Example: `add.d fnname:PLT,$pc'
10673
10674`PLTG'
10675     Like PLT, but the value is relative to the beginning of the global
10676     offset table.  The relocation is `R_CRIS_32_PLT_GOTREL'.  Example:
10677     `move.d fnname:PLTG,$r3'
10678
10679`GOTPLT'
10680     Similar to `PLT', but the value of the symbol is a 32-bit index
10681     into the global offset table.  This is somewhat of a mix between
10682     the effect of the `GOT' and the `PLT' suffix; the difference to
10683     `GOT' is that there will be a procedure linkage table entry
10684     created, and that the symbol is assumed to be a function entry and
10685     will be resolved by the run-time resolver as with `PLT'.  The
10686     relocation is `R_CRIS_32_GOTPLT'.  Example: `jsr
10687     [$r0+fnname:GOTPLT]'
10688
10689`GOTPLT16'
10690     A variant of `GOTPLT' giving a 16-bit value.  Its relocation name
10691     is `R_CRIS_16_GOTPLT'.  Example: `jsr [$r0+fnname:GOTPLT16]'
10692
10693`GOTOFF'
10694     This suffix must only be attached to a local symbol, but may be
10695     used in an expression adding an offset.  The value is the address
10696     of the symbol relative to the start of the global offset table.
10697     The relocation name is `R_CRIS_32_GOTREL'.  Example: `move.d
10698     [$r0+localsym:GOTOFF],r3'
10699
10700
10701File: as.info,  Node: CRIS-Regs,  Next: CRIS-Pseudos,  Prev: CRIS-Pic,  Up: CRIS-Syntax
10702
107039.9.4.3 Register names
10704......................
10705
10706A `$' character may always prefix a general or special register name in
10707an instruction operand but is mandatory when the option
10708`--no-underscore' is specified or when the `.syntax register_prefix'
10709directive is in effect (*note crisnous::).  Register names are
10710case-insensitive.
10711
10712
10713File: as.info,  Node: CRIS-Pseudos,  Prev: CRIS-Regs,  Up: CRIS-Syntax
10714
107159.9.4.4 Assembler Directives
10716............................
10717
10718There are a few CRIS-specific pseudo-directives in addition to the
10719generic ones.  *Note Pseudo Ops::.  Constants emitted by
10720pseudo-directives are in little-endian order for CRIS.  There is no
10721support for floating-point-specific directives for CRIS.
10722
10723`.dword EXPRESSIONS'
10724     The `.dword' directive is a synonym for `.int', expecting zero or
10725     more EXPRESSIONS, separated by commas.  For each expression, a
10726     32-bit little-endian constant is emitted.
10727
10728`.syntax ARGUMENT'
10729     The `.syntax' directive takes as ARGUMENT one of the following
10730     case-sensitive choices.
10731
10732    `no_register_prefix'
10733          The `.syntax no_register_prefix' directive makes a `$'
10734          character prefix on all registers optional.  It overrides a
10735          previous setting, including the corresponding effect of the
10736          option `--no-underscore'.  If this directive is used when
10737          ordinary symbols do not have a `_' character prefix, care
10738          must be taken to avoid ambiguities whether an operand is a
10739          register or a symbol; using symbols with names the same as
10740          general or special registers then invoke undefined behavior.
10741
10742    `register_prefix'
10743          This directive makes a `$' character prefix on all registers
10744          mandatory.  It overrides a previous setting, including the
10745          corresponding effect of the option `--underscore'.
10746
10747    `leading_underscore'
10748          This is an assertion directive, emitting an error if the
10749          `--no-underscore' option is in effect.
10750
10751    `no_leading_underscore'
10752          This is the opposite of the `.syntax leading_underscore'
10753          directive and emits an error if the option `--underscore' is
10754          in effect.
10755
10756`.arch ARGUMENT'
10757     This is an assertion directive, giving an error if the specified
10758     ARGUMENT is not the same as the specified or default value for the
10759     `--march=ARCHITECTURE' option (*note march-option::).
10760
10761
10762
10763File: as.info,  Node: C-SKY-Dependent,  Next: D10V-Dependent,  Prev: CRIS-Dependent,  Up: Machine Dependencies
10764
107659.10 C-SKY Dependent Features
10766=============================
10767
10768* Menu:
10769
10770* C-SKY Options::              Options
10771* C-SKY Syntax::               Syntax
10772
10773
10774File: as.info,  Node: C-SKY Options,  Next: C-SKY Syntax,  Up: C-SKY-Dependent
10775
107769.10.1 Options
10777--------------
10778
10779`-march=ARCHNAME'
10780     Assemble for architecture ARCHNAME.  The `--help' option lists
10781     valid values for ARCHNAME.
10782
10783`-mcpu=CPUNAME'
10784     Assemble for architecture CPUNAME.  The `--help' option lists
10785     valid values for CPUNAME.
10786
10787`-EL'
10788`-mlittle-endian'
10789     Generate little-endian output.
10790
10791`-EB'
10792`-mbig-endian'
10793     Generate big-endian output.
10794
10795`-fpic'
10796`-pic'
10797     Generate position-independent code.
10798
10799`-mljump'
10800`-mno-ljump'
10801     Enable/disable transformation of the short branch instructions
10802     `jbf', `jbt', and `jbr' to `jmpi'.  This option is for V2
10803     processors only.  It is ignored on CK801 and CK802 targets, which
10804     do not support the `jmpi' instruction, and is enabled by default
10805     for other processors.
10806
10807`-mbranch-stub'
10808`-mno-branch-stub'
10809     Pass through `R_CKCORE_PCREL_IMM26BY2' relocations for `bsr'
10810     instructions to the linker.
10811
10812     This option is only available for bare-metal C-SKY V2 ELF targets,
10813     where it is enabled by default.  It cannot be used in code that
10814     will be dynamically linked against shared libraries.
10815
10816`-force2bsr'
10817`-mforce2bsr'
10818`-no-force2bsr'
10819`-mno-force2bsr'
10820     Enable/disable transformation of `jbsr' instructions to `bsr'.
10821     This option is always enabled (and `-mno-force2bsr' is ignored)
10822     for CK801/CK802 targets.  It is also always enabled when
10823     `-mbranch-stub' is in effect.
10824
10825`-jsri2bsr'
10826`-mjsri2bsr'
10827`-no-jsri2bsr'
10828`-mno-jsri2bsr'
10829     Enable/disable transformation of `jsri' instructions to `bsr'.
10830     This option is enabled by default.
10831
10832`-mnolrw'
10833`-mno-lrw'
10834     Enable/disable transformation of `lrw' instructions into a
10835     `movih'/`ori' pair.
10836
10837`-melrw'
10838`-mno-elrw'
10839     Enable/disable extended `lrw' instructions.  This option is
10840     enabled by default for CK800-series processors.
10841
10842`-mlaf'
10843`-mliterals-after-func'
10844`-mno-laf'
10845`-mno-literals-after-func'
10846     Enable/disable placement of literal pools after each function.
10847
10848`-mlabr'
10849`-mliterals-after-br'
10850`-mno-labr'
10851`-mnoliterals-after-br'
10852     Enable/disable placement of literal pools after unconditional
10853     branches.  This option is enabled by default.
10854
10855`-mistack'
10856`-mno-istack'
10857     Enable/disable interrupt stack instructions.  This option is
10858     enabled by default on CK801, CK802, and CK802 processors.
10859
10860
10861   The following options explicitly enable certain optional
10862instructions.  These features are also enabled implicitly by using
10863`-mcpu=' to specify a processor that supports it.
10864
10865`-mhard-float'
10866     Enable hard float instructions.
10867
10868`-mmp'
10869     Enable multiprocessor instructions.
10870
10871`-mcp'
10872     Enable coprocessor instructions.
10873
10874`-mcache'
10875     Enable cache prefetch instruction.
10876
10877`-msecurity'
10878     Enable C-SKY security instructions.
10879
10880`-mtrust'
10881     Enable C-SKY trust instructions.
10882
10883`-mdsp'
10884     Enable DSP instructions.
10885
10886`-medsp'
10887     Enable enhanced DSP instructions.
10888
10889`-mvdsp'
10890     Enable vector DSP instructions.
10891
10892
10893
10894File: as.info,  Node: C-SKY Syntax,  Prev: C-SKY Options,  Up: C-SKY-Dependent
10895
108969.10.2 Syntax
10897-------------
10898
10899`as' implements the standard C-SKY assembler syntax documented in the
10900`C-SKY V2 CPU Applications Binary Interface Standards Manual'.
10901
10902
10903File: as.info,  Node: D10V-Dependent,  Next: D30V-Dependent,  Prev: C-SKY-Dependent,  Up: Machine Dependencies
10904
109059.11 D10V Dependent Features
10906============================
10907
10908* Menu:
10909
10910* D10V-Opts::                   D10V Options
10911* D10V-Syntax::                 Syntax
10912* D10V-Float::                  Floating Point
10913* D10V-Opcodes::                Opcodes
10914
10915
10916File: as.info,  Node: D10V-Opts,  Next: D10V-Syntax,  Up: D10V-Dependent
10917
109189.11.1 D10V Options
10919-------------------
10920
10921The Mitsubishi D10V version of `as' has a few machine dependent options.
10922
10923`-O'
10924     The D10V can often execute two sub-instructions in parallel. When
10925     this option is used, `as' will attempt to optimize its output by
10926     detecting when instructions can be executed in parallel.
10927
10928`--nowarnswap'
10929     To optimize execution performance, `as' will sometimes swap the
10930     order of instructions. Normally this generates a warning. When
10931     this option is used, no warning will be generated when
10932     instructions are swapped.
10933
10934`--gstabs-packing'
10935`--no-gstabs-packing'
10936     `as' packs adjacent short instructions into a single packed
10937     instruction. `--no-gstabs-packing' turns instruction packing off if
10938     `--gstabs' is specified as well; `--gstabs-packing' (the default)
10939     turns instruction packing on even when `--gstabs' is specified.
10940
10941
10942File: as.info,  Node: D10V-Syntax,  Next: D10V-Float,  Prev: D10V-Opts,  Up: D10V-Dependent
10943
109449.11.2 Syntax
10945-------------
10946
10947The D10V syntax is based on the syntax in Mitsubishi's D10V
10948architecture manual.  The differences are detailed below.
10949
10950* Menu:
10951
10952* D10V-Size::                 Size Modifiers
10953* D10V-Subs::                 Sub-Instructions
10954* D10V-Chars::                Special Characters
10955* D10V-Regs::                 Register Names
10956* D10V-Addressing::           Addressing Modes
10957* D10V-Word::                 @WORD Modifier
10958
10959
10960File: as.info,  Node: D10V-Size,  Next: D10V-Subs,  Up: D10V-Syntax
10961
109629.11.2.1 Size Modifiers
10963.......................
10964
10965The D10V version of `as' uses the instruction names in the D10V
10966Architecture Manual.  However, the names in the manual are sometimes
10967ambiguous.  There are instruction names that can assemble to a short or
10968long form opcode.  How does the assembler pick the correct form?  `as'
10969will always pick the smallest form if it can.  When dealing with a
10970symbol that is not defined yet when a line is being assembled, it will
10971always use the long form.  If you need to force the assembler to use
10972either the short or long form of the instruction, you can append either
10973`.s' (short) or `.l' (long) to it.  For example, if you are writing an
10974assembly program and you want to do a branch to a symbol that is
10975defined later in your program, you can write `bra.s   foo'.  Objdump
10976and GDB will always append `.s' or `.l' to instructions which have both
10977short and long forms.
10978
10979
10980File: as.info,  Node: D10V-Subs,  Next: D10V-Chars,  Prev: D10V-Size,  Up: D10V-Syntax
10981
109829.11.2.2 Sub-Instructions
10983.........................
10984
10985The D10V assembler takes as input a series of instructions, either
10986one-per-line, or in the special two-per-line format described in the
10987next section.  Some of these instructions will be short-form or
10988sub-instructions.  These sub-instructions can be packed into a single
10989instruction.  The assembler will do this automatically.  It will also
10990detect when it should not pack instructions.  For example, when a label
10991is defined, the next instruction will never be packaged with the
10992previous one.  Whenever a branch and link instruction is called, it
10993will not be packaged with the next instruction so the return address
10994will be valid.  Nops are automatically inserted when necessary.
10995
10996   If you do not want the assembler automatically making these
10997decisions, you can control the packaging and execution type (parallel
10998or sequential) with the special execution symbols described in the next
10999section.
11000
11001
11002File: as.info,  Node: D10V-Chars,  Next: D10V-Regs,  Prev: D10V-Subs,  Up: D10V-Syntax
11003
110049.11.2.3 Special Characters
11005...........................
11006
11007A semicolon (`;') can be used anywhere on a line to start a comment
11008that extends to the end of the line.
11009
11010   If a `#' appears as the first character of a line, the whole line is
11011treated as a comment, but in this case the line could also be a logical
11012line number directive (*note Comments::) or a preprocessor control
11013command (*note Preprocessing::).
11014
11015   Sub-instructions may be executed in order, in reverse-order, or in
11016parallel.  Instructions listed in the standard one-per-line format will
11017be executed sequentially.  To specify the executing order, use the
11018following symbols:
11019`->'
11020     Sequential with instruction on the left first.
11021
11022`<-'
11023     Sequential with instruction on the right first.
11024
11025`||'
11026     Parallel
11027   The D10V syntax allows either one instruction per line, one
11028instruction per line with the execution symbol, or two instructions per
11029line.  For example
11030`abs       a1      ->      abs     r0'
11031     Execute these sequentially.  The instruction on the right is in
11032     the right container and is executed second.
11033
11034`abs       r0      <-      abs     a1'
11035     Execute these reverse-sequentially.  The instruction on the right
11036     is in the right container, and is executed first.
11037
11038`ld2w    r2,@r8+         ||      mac     a0,r0,r7'
11039     Execute these in parallel.
11040
11041`ld2w    r2,@r8+         ||'
11042`mac     a0,r0,r7'
11043     Two-line format. Execute these in parallel.
11044
11045`ld2w    r2,@r8+'
11046`mac     a0,r0,r7'
11047     Two-line format. Execute these sequentially.  Assembler will put
11048     them in the proper containers.
11049
11050`ld2w    r2,@r8+         ->'
11051`mac     a0,r0,r7'
11052     Two-line format. Execute these sequentially.  Same as above but
11053     second instruction will always go into right container.
11054   Since `$' has no special meaning, you may use it in symbol names.
11055
11056
11057File: as.info,  Node: D10V-Regs,  Next: D10V-Addressing,  Prev: D10V-Chars,  Up: D10V-Syntax
11058
110599.11.2.4 Register Names
11060.......................
11061
11062You can use the predefined symbols `r0' through `r15' to refer to the
11063D10V registers.  You can also use `sp' as an alias for `r15'.  The
11064accumulators are `a0' and `a1'.  There are special register-pair names
11065that may optionally be used in opcodes that require even-numbered
11066registers. Register names are not case sensitive.
11067
11068   Register Pairs
11069`r0-r1'
11070
11071`r2-r3'
11072
11073`r4-r5'
11074
11075`r6-r7'
11076
11077`r8-r9'
11078
11079`r10-r11'
11080
11081`r12-r13'
11082
11083`r14-r15'
11084
11085   The D10V also has predefined symbols for these control registers and
11086status bits:
11087`psw'
11088     Processor Status Word
11089
11090`bpsw'
11091     Backup Processor Status Word
11092
11093`pc'
11094     Program Counter
11095
11096`bpc'
11097     Backup Program Counter
11098
11099`rpt_c'
11100     Repeat Count
11101
11102`rpt_s'
11103     Repeat Start address
11104
11105`rpt_e'
11106     Repeat End address
11107
11108`mod_s'
11109     Modulo Start address
11110
11111`mod_e'
11112     Modulo End address
11113
11114`iba'
11115     Instruction Break Address
11116
11117`f0'
11118     Flag 0
11119
11120`f1'
11121     Flag 1
11122
11123`c'
11124     Carry flag
11125
11126
11127File: as.info,  Node: D10V-Addressing,  Next: D10V-Word,  Prev: D10V-Regs,  Up: D10V-Syntax
11128
111299.11.2.5 Addressing Modes
11130.........................
11131
11132`as' understands the following addressing modes for the D10V.  `RN' in
11133the following refers to any of the numbered registers, but _not_ the
11134control registers.
11135`RN'
11136     Register direct
11137
11138`@RN'
11139     Register indirect
11140
11141`@RN+'
11142     Register indirect with post-increment
11143
11144`@RN-'
11145     Register indirect with post-decrement
11146
11147`@-SP'
11148     Register indirect with pre-decrement
11149
11150`@(DISP, RN)'
11151     Register indirect with displacement
11152
11153`ADDR'
11154     PC relative address (for branch or rep).
11155
11156`#IMM'
11157     Immediate data (the `#' is optional and ignored)
11158
11159
11160File: as.info,  Node: D10V-Word,  Prev: D10V-Addressing,  Up: D10V-Syntax
11161
111629.11.2.6 @WORD Modifier
11163.......................
11164
11165Any symbol followed by `@word' will be replaced by the symbol's value
11166shifted right by 2.  This is used in situations such as loading a
11167register with the address of a function (or any other code fragment).
11168For example, if you want to load a register with the location of the
11169function `main' then jump to that function, you could do it as follows:
11170     ldi     r2, main@word
11171     jmp     r2
11172
11173
11174File: as.info,  Node: D10V-Float,  Next: D10V-Opcodes,  Prev: D10V-Syntax,  Up: D10V-Dependent
11175
111769.11.3 Floating Point
11177---------------------
11178
11179The D10V has no hardware floating point, but the `.float' and `.double'
11180directives generates IEEE floating-point numbers for compatibility with
11181other development tools.
11182
11183
11184File: as.info,  Node: D10V-Opcodes,  Prev: D10V-Float,  Up: D10V-Dependent
11185
111869.11.4 Opcodes
11187--------------
11188
11189For detailed information on the D10V machine instruction set, see `D10V
11190Architecture: A VLIW Microprocessor for Multimedia Applications'
11191(Mitsubishi Electric Corp.).  `as' implements all the standard D10V
11192opcodes.  The only changes are those described in the section on size
11193modifiers
11194
11195
11196File: as.info,  Node: D30V-Dependent,  Next: Epiphany-Dependent,  Prev: D10V-Dependent,  Up: Machine Dependencies
11197
111989.12 D30V Dependent Features
11199============================
11200
11201* Menu:
11202
11203* D30V-Opts::                   D30V Options
11204* D30V-Syntax::                 Syntax
11205* D30V-Float::                  Floating Point
11206* D30V-Opcodes::                Opcodes
11207
11208
11209File: as.info,  Node: D30V-Opts,  Next: D30V-Syntax,  Up: D30V-Dependent
11210
112119.12.1 D30V Options
11212-------------------
11213
11214The Mitsubishi D30V version of `as' has a few machine dependent options.
11215
11216`-O'
11217     The D30V can often execute two sub-instructions in parallel. When
11218     this option is used, `as' will attempt to optimize its output by
11219     detecting when instructions can be executed in parallel.
11220
11221`-n'
11222     When this option is used, `as' will issue a warning every time it
11223     adds a nop instruction.
11224
11225`-N'
11226     When this option is used, `as' will issue a warning if it needs to
11227     insert a nop after a 32-bit multiply before a load or 16-bit
11228     multiply instruction.
11229
11230
11231File: as.info,  Node: D30V-Syntax,  Next: D30V-Float,  Prev: D30V-Opts,  Up: D30V-Dependent
11232
112339.12.2 Syntax
11234-------------
11235
11236The D30V syntax is based on the syntax in Mitsubishi's D30V
11237architecture manual.  The differences are detailed below.
11238
11239* Menu:
11240
11241* D30V-Size::                 Size Modifiers
11242* D30V-Subs::                 Sub-Instructions
11243* D30V-Chars::                Special Characters
11244* D30V-Guarded::              Guarded Execution
11245* D30V-Regs::                 Register Names
11246* D30V-Addressing::           Addressing Modes
11247
11248
11249File: as.info,  Node: D30V-Size,  Next: D30V-Subs,  Up: D30V-Syntax
11250
112519.12.2.1 Size Modifiers
11252.......................
11253
11254The D30V version of `as' uses the instruction names in the D30V
11255Architecture Manual.  However, the names in the manual are sometimes
11256ambiguous.  There are instruction names that can assemble to a short or
11257long form opcode.  How does the assembler pick the correct form?  `as'
11258will always pick the smallest form if it can.  When dealing with a
11259symbol that is not defined yet when a line is being assembled, it will
11260always use the long form.  If you need to force the assembler to use
11261either the short or long form of the instruction, you can append either
11262`.s' (short) or `.l' (long) to it.  For example, if you are writing an
11263assembly program and you want to do a branch to a symbol that is
11264defined later in your program, you can write `bra.s foo'.  Objdump and
11265GDB will always append `.s' or `.l' to instructions which have both
11266short and long forms.
11267
11268
11269File: as.info,  Node: D30V-Subs,  Next: D30V-Chars,  Prev: D30V-Size,  Up: D30V-Syntax
11270
112719.12.2.2 Sub-Instructions
11272.........................
11273
11274The D30V assembler takes as input a series of instructions, either
11275one-per-line, or in the special two-per-line format described in the
11276next section.  Some of these instructions will be short-form or
11277sub-instructions.  These sub-instructions can be packed into a single
11278instruction.  The assembler will do this automatically.  It will also
11279detect when it should not pack instructions.  For example, when a label
11280is defined, the next instruction will never be packaged with the
11281previous one.  Whenever a branch and link instruction is called, it
11282will not be packaged with the next instruction so the return address
11283will be valid.  Nops are automatically inserted when necessary.
11284
11285   If you do not want the assembler automatically making these
11286decisions, you can control the packaging and execution type (parallel
11287or sequential) with the special execution symbols described in the next
11288section.
11289
11290
11291File: as.info,  Node: D30V-Chars,  Next: D30V-Guarded,  Prev: D30V-Subs,  Up: D30V-Syntax
11292
112939.12.2.3 Special Characters
11294...........................
11295
11296A semicolon (`;') can be used anywhere on a line to start a comment
11297that extends to the end of the line.
11298
11299   If a `#' appears as the first character of a line, the whole line is
11300treated as a comment, but in this case the line could also be a logical
11301line number directive (*note Comments::) or a preprocessor control
11302command (*note Preprocessing::).
11303
11304   Sub-instructions may be executed in order, in reverse-order, or in
11305parallel.  Instructions listed in the standard one-per-line format will
11306be executed sequentially unless you use the `-O' option.
11307
11308   To specify the executing order, use the following symbols:
11309`->'
11310     Sequential with instruction on the left first.
11311
11312`<-'
11313     Sequential with instruction on the right first.
11314
11315`||'
11316     Parallel
11317
11318   The D30V syntax allows either one instruction per line, one
11319instruction per line with the execution symbol, or two instructions per
11320line.  For example
11321`abs r2,r3 -> abs r4,r5'
11322     Execute these sequentially.  The instruction on the right is in
11323     the right container and is executed second.
11324
11325`abs r2,r3 <- abs r4,r5'
11326     Execute these reverse-sequentially.  The instruction on the right
11327     is in the right container, and is executed first.
11328
11329`abs r2,r3 || abs r4,r5'
11330     Execute these in parallel.
11331
11332`ldw r2,@(r3,r4) ||'
11333`mulx r6,r8,r9'
11334     Two-line format. Execute these in parallel.
11335
11336`mulx a0,r8,r9'
11337`stw r2,@(r3,r4)'
11338     Two-line format. Execute these sequentially unless `-O' option is
11339     used.  If the `-O' option is used, the assembler will determine if
11340     the instructions could be done in parallel (the above two
11341     instructions can be done in parallel), and if so, emit them as
11342     parallel instructions.  The assembler will put them in the proper
11343     containers.  In the above example, the assembler will put the
11344     `stw' instruction in left container and the `mulx' instruction in
11345     the right container.
11346
11347`stw r2,@(r3,r4) ->'
11348`mulx a0,r8,r9'
11349     Two-line format.  Execute the `stw' instruction followed by the
11350     `mulx' instruction sequentially.  The first instruction goes in the
11351     left container and the second instruction goes into right
11352     container.  The assembler will give an error if the machine
11353     ordering constraints are violated.
11354
11355`stw r2,@(r3,r4) <-'
11356`mulx a0,r8,r9'
11357     Same as previous example, except that the `mulx' instruction is
11358     executed before the `stw' instruction.
11359
11360   Since `$' has no special meaning, you may use it in symbol names.
11361
11362
11363File: as.info,  Node: D30V-Guarded,  Next: D30V-Regs,  Prev: D30V-Chars,  Up: D30V-Syntax
11364
113659.12.2.4 Guarded Execution
11366..........................
11367
11368`as' supports the full range of guarded execution directives for each
11369instruction.  Just append the directive after the instruction proper.
11370The directives are:
11371
11372`/tx'
11373     Execute the instruction if flag f0 is true.
11374
11375`/fx'
11376     Execute the instruction if flag f0 is false.
11377
11378`/xt'
11379     Execute the instruction if flag f1 is true.
11380
11381`/xf'
11382     Execute the instruction if flag f1 is false.
11383
11384`/tt'
11385     Execute the instruction if both flags f0 and f1 are true.
11386
11387`/tf'
11388     Execute the instruction if flag f0 is true and flag f1 is false.
11389
11390
11391File: as.info,  Node: D30V-Regs,  Next: D30V-Addressing,  Prev: D30V-Guarded,  Up: D30V-Syntax
11392
113939.12.2.5 Register Names
11394.......................
11395
11396You can use the predefined symbols `r0' through `r63' to refer to the
11397D30V registers.  You can also use `sp' as an alias for `r63' and `link'
11398as an alias for `r62'.  The accumulators are `a0' and `a1'.
11399
11400   The D30V also has predefined symbols for these control registers and
11401status bits:
11402`psw'
11403     Processor Status Word
11404
11405`bpsw'
11406     Backup Processor Status Word
11407
11408`pc'
11409     Program Counter
11410
11411`bpc'
11412     Backup Program Counter
11413
11414`rpt_c'
11415     Repeat Count
11416
11417`rpt_s'
11418     Repeat Start address
11419
11420`rpt_e'
11421     Repeat End address
11422
11423`mod_s'
11424     Modulo Start address
11425
11426`mod_e'
11427     Modulo End address
11428
11429`iba'
11430     Instruction Break Address
11431
11432`f0'
11433     Flag 0
11434
11435`f1'
11436     Flag 1
11437
11438`f2'
11439     Flag 2
11440
11441`f3'
11442     Flag 3
11443
11444`f4'
11445     Flag 4
11446
11447`f5'
11448     Flag 5
11449
11450`f6'
11451     Flag 6
11452
11453`f7'
11454     Flag 7
11455
11456`s'
11457     Same as flag 4 (saturation flag)
11458
11459`v'
11460     Same as flag 5 (overflow flag)
11461
11462`va'
11463     Same as flag 6 (sticky overflow flag)
11464
11465`c'
11466     Same as flag 7 (carry/borrow flag)
11467
11468`b'
11469     Same as flag 7 (carry/borrow flag)
11470
11471
11472File: as.info,  Node: D30V-Addressing,  Prev: D30V-Regs,  Up: D30V-Syntax
11473
114749.12.2.6 Addressing Modes
11475.........................
11476
11477`as' understands the following addressing modes for the D30V.  `RN' in
11478the following refers to any of the numbered registers, but _not_ the
11479control registers.
11480`RN'
11481     Register direct
11482
11483`@RN'
11484     Register indirect
11485
11486`@RN+'
11487     Register indirect with post-increment
11488
11489`@RN-'
11490     Register indirect with post-decrement
11491
11492`@-SP'
11493     Register indirect with pre-decrement
11494
11495`@(DISP, RN)'
11496     Register indirect with displacement
11497
11498`ADDR'
11499     PC relative address (for branch or rep).
11500
11501`#IMM'
11502     Immediate data (the `#' is optional and ignored)
11503
11504
11505File: as.info,  Node: D30V-Float,  Next: D30V-Opcodes,  Prev: D30V-Syntax,  Up: D30V-Dependent
11506
115079.12.3 Floating Point
11508---------------------
11509
11510The D30V has no hardware floating point, but the `.float' and `.double'
11511directives generates IEEE floating-point numbers for compatibility with
11512other development tools.
11513
11514
11515File: as.info,  Node: D30V-Opcodes,  Prev: D30V-Float,  Up: D30V-Dependent
11516
115179.12.4 Opcodes
11518--------------
11519
11520For detailed information on the D30V machine instruction set, see `D30V
11521Architecture: A VLIW Microprocessor for Multimedia Applications'
11522(Mitsubishi Electric Corp.).  `as' implements all the standard D30V
11523opcodes.  The only changes are those described in the section on size
11524modifiers
11525
11526
11527File: as.info,  Node: Epiphany-Dependent,  Next: H8/300-Dependent,  Prev: D30V-Dependent,  Up: Machine Dependencies
11528
115299.13 Epiphany Dependent Features
11530================================
11531
11532* Menu:
11533
11534* Epiphany Options::              Options
11535* Epiphany Syntax::               Epiphany Syntax
11536
11537
11538File: as.info,  Node: Epiphany Options,  Next: Epiphany Syntax,  Up: Epiphany-Dependent
11539
115409.13.1 Options
11541--------------
11542
11543`as' has two additional command-line options for the Epiphany
11544architecture.
11545
11546`-mepiphany'
11547     Specifies that the both 32 and 16 bit instructions are allowed.
11548     This is the default behavior.
11549
11550`-mepiphany16'
11551     Restricts the permitted instructions to just the 16 bit set.
11552
11553
11554File: as.info,  Node: Epiphany Syntax,  Prev: Epiphany Options,  Up: Epiphany-Dependent
11555
115569.13.2 Epiphany Syntax
11557----------------------
11558
11559* Menu:
11560
11561* Epiphany-Chars::                Special Characters
11562
11563
11564File: as.info,  Node: Epiphany-Chars,  Up: Epiphany Syntax
11565
115669.13.2.1 Special Characters
11567...........................
11568
11569The presence of a `;' on a line indicates the start of a comment that
11570extends to the end of the current line.
11571
11572   If a `#' appears as the first character of a line then the whole
11573line is treated as a comment, but in this case the line could also be a
11574logical line number directive (*note Comments::) or a preprocessor
11575control command (*note Preprocessing::).
11576
11577   The ``' character can be used to separate statements on the same
11578line.
11579
11580
11581File: as.info,  Node: H8/300-Dependent,  Next: HPPA-Dependent,  Prev: Epiphany-Dependent,  Up: Machine Dependencies
11582
115839.14 H8/300 Dependent Features
11584==============================
11585
11586* Menu:
11587
11588* H8/300 Options::              Options
11589* H8/300 Syntax::               Syntax
11590* H8/300 Floating Point::       Floating Point
11591* H8/300 Directives::           H8/300 Machine Directives
11592* H8/300 Opcodes::              Opcodes
11593
11594
11595File: as.info,  Node: H8/300 Options,  Next: H8/300 Syntax,  Up: H8/300-Dependent
11596
115979.14.1 Options
11598--------------
11599
11600The Renesas H8/300 version of `as' has one machine-dependent option:
11601
11602`-h-tick-hex'
11603     Support H'00 style hex constants in addition to 0x00 style.
11604
11605`-mach=NAME'
11606     Sets the H8300 machine variant.  The following machine names are
11607     recognised: `h8300h', `h8300hn', `h8300s', `h8300sn', `h8300sx' and
11608     `h8300sxn'.
11609
11610
11611
11612File: as.info,  Node: H8/300 Syntax,  Next: H8/300 Floating Point,  Prev: H8/300 Options,  Up: H8/300-Dependent
11613
116149.14.2 Syntax
11615-------------
11616
11617* Menu:
11618
11619* H8/300-Chars::                Special Characters
11620* H8/300-Regs::                 Register Names
11621* H8/300-Addressing::           Addressing Modes
11622
11623
11624File: as.info,  Node: H8/300-Chars,  Next: H8/300-Regs,  Up: H8/300 Syntax
11625
116269.14.2.1 Special Characters
11627...........................
11628
11629`;' is the line comment character.
11630
11631   `$' can be used instead of a newline to separate statements.
11632Therefore _you may not use `$' in symbol names_ on the H8/300.
11633
11634
11635File: as.info,  Node: H8/300-Regs,  Next: H8/300-Addressing,  Prev: H8/300-Chars,  Up: H8/300 Syntax
11636
116379.14.2.2 Register Names
11638.......................
11639
11640You can use predefined symbols of the form `rNh' and `rNl' to refer to
11641the H8/300 registers as sixteen 8-bit general-purpose registers.  N is
11642a digit from `0' to `7'); for instance, both `r0h' and `r7l' are valid
11643register names.
11644
11645   You can also use the eight predefined symbols `rN' to refer to the
11646H8/300 registers as 16-bit registers (you must use this form for
11647addressing).
11648
11649   On the H8/300H, you can also use the eight predefined symbols `erN'
11650(`er0' ... `er7') to refer to the 32-bit general purpose registers.
11651
11652   The two control registers are called `pc' (program counter; a 16-bit
11653register, except on the H8/300H where it is 24 bits) and `ccr'
11654(condition code register; an 8-bit register).  `r7' is used as the
11655stack pointer, and can also be called `sp'.
11656
11657
11658File: as.info,  Node: H8/300-Addressing,  Prev: H8/300-Regs,  Up: H8/300 Syntax
11659
116609.14.2.3 Addressing Modes
11661.........................
11662
11663as understands the following addressing modes for the H8/300:
11664`rN'
11665     Register direct
11666
11667`@rN'
11668     Register indirect
11669
11670`@(D, rN)'
11671`@(D:16, rN)'
11672`@(D:24, rN)'
11673     Register indirect: 16-bit or 24-bit displacement D from register
11674     N.  (24-bit displacements are only meaningful on the H8/300H.)
11675
11676`@rN+'
11677     Register indirect with post-increment
11678
11679`@-rN'
11680     Register indirect with pre-decrement
11681
11682``@'AA'
11683``@'AA:8'
11684``@'AA:16'
11685``@'AA:24'
11686     Absolute address `aa'.  (The address size `:24' only makes sense
11687     on the H8/300H.)
11688
11689`#XX'
11690`#XX:8'
11691`#XX:16'
11692`#XX:32'
11693     Immediate data XX.  You may specify the `:8', `:16', or `:32' for
11694     clarity, if you wish; but `as' neither requires this nor uses
11695     it--the data size required is taken from context.
11696
11697``@'`@'AA'
11698``@'`@'AA:8'
11699     Memory indirect.  You may specify the `:8' for clarity, if you
11700     wish; but `as' neither requires this nor uses it.
11701
11702
11703File: as.info,  Node: H8/300 Floating Point,  Next: H8/300 Directives,  Prev: H8/300 Syntax,  Up: H8/300-Dependent
11704
117059.14.3 Floating Point
11706---------------------
11707
11708The H8/300 family has no hardware floating point, but the `.float'
11709directive generates IEEE floating-point numbers for compatibility with
11710other development tools.
11711
11712
11713File: as.info,  Node: H8/300 Directives,  Next: H8/300 Opcodes,  Prev: H8/300 Floating Point,  Up: H8/300-Dependent
11714
117159.14.4 H8/300 Machine Directives
11716--------------------------------
11717
11718`as' has the following machine-dependent directives for the H8/300:
11719
11720`.h8300h'
11721     Recognize and emit additional instructions for the H8/300H
11722     variant, and also make `.int' emit 32-bit numbers rather than the
11723     usual (16-bit) for the H8/300 family.
11724
11725`.h8300s'
11726     Recognize and emit additional instructions for the H8S variant, and
11727     also make `.int' emit 32-bit numbers rather than the usual (16-bit)
11728     for the H8/300 family.
11729
11730`.h8300hn'
11731     Recognize and emit additional instructions for the H8/300H variant
11732     in normal mode, and also make `.int' emit 32-bit numbers rather
11733     than the usual (16-bit) for the H8/300 family.
11734
11735`.h8300sn'
11736     Recognize and emit additional instructions for the H8S variant in
11737     normal mode, and also make `.int' emit 32-bit numbers rather than
11738     the usual (16-bit) for the H8/300 family.
11739
11740   On the H8/300 family (including the H8/300H) `.word' directives
11741generate 16-bit numbers.
11742
11743
11744File: as.info,  Node: H8/300 Opcodes,  Prev: H8/300 Directives,  Up: H8/300-Dependent
11745
117469.14.5 Opcodes
11747--------------
11748
11749For detailed information on the H8/300 machine instruction set, see
11750`H8/300 Series Programming Manual'.  For information specific to the
11751H8/300H, see `H8/300H Series Programming Manual' (Renesas).
11752
11753   `as' implements all the standard H8/300 opcodes.  No additional
11754pseudo-instructions are needed on this family.
11755
11756   The following table summarizes the H8/300 opcodes, and their
11757arguments.  Entries marked `*' are opcodes used only on the H8/300H.
11758
11759              Legend:
11760                 Rs   source register
11761                 Rd   destination register
11762                 abs  absolute address
11763                 imm  immediate data
11764              disp:N  N-bit displacement from a register
11765             pcrel:N  N-bit displacement relative to program counter
11766
11767        add.b #imm,rd              *  andc #imm,ccr
11768        add.b rs,rd                   band #imm,rd
11769        add.w rs,rd                   band #imm,@rd
11770     *  add.w #imm,rd                 band #imm,@abs:8
11771     *  add.l rs,rd                   bra  pcrel:8
11772     *  add.l #imm,rd              *  bra  pcrel:16
11773        adds #imm,rd                  bt   pcrel:8
11774        addx #imm,rd               *  bt   pcrel:16
11775        addx rs,rd                    brn  pcrel:8
11776        and.b #imm,rd              *  brn  pcrel:16
11777        and.b rs,rd                   bf   pcrel:8
11778     *  and.w rs,rd                *  bf   pcrel:16
11779     *  and.w #imm,rd                 bhi  pcrel:8
11780     *  and.l #imm,rd              *  bhi  pcrel:16
11781     *  and.l rs,rd                   bls  pcrel:8
11782
11783     *  bls  pcrel:16                 bld  #imm,rd
11784        bcc  pcrel:8                  bld  #imm,@rd
11785     *  bcc  pcrel:16                 bld  #imm,@abs:8
11786        bhs  pcrel:8                  bnot #imm,rd
11787     *  bhs  pcrel:16                 bnot #imm,@rd
11788        bcs  pcrel:8                  bnot #imm,@abs:8
11789     *  bcs  pcrel:16                 bnot rs,rd
11790        blo  pcrel:8                  bnot rs,@rd
11791     *  blo  pcrel:16                 bnot rs,@abs:8
11792        bne  pcrel:8                  bor  #imm,rd
11793     *  bne  pcrel:16                 bor  #imm,@rd
11794        beq  pcrel:8                  bor  #imm,@abs:8
11795     *  beq  pcrel:16                 bset #imm,rd
11796        bvc  pcrel:8                  bset #imm,@rd
11797     *  bvc  pcrel:16                 bset #imm,@abs:8
11798        bvs  pcrel:8                  bset rs,rd
11799     *  bvs  pcrel:16                 bset rs,@rd
11800        bpl  pcrel:8                  bset rs,@abs:8
11801     *  bpl  pcrel:16                 bsr  pcrel:8
11802        bmi  pcrel:8                  bsr  pcrel:16
11803     *  bmi  pcrel:16                 bst  #imm,rd
11804        bge  pcrel:8                  bst  #imm,@rd
11805     *  bge  pcrel:16                 bst  #imm,@abs:8
11806        blt  pcrel:8                  btst #imm,rd
11807     *  blt  pcrel:16                 btst #imm,@rd
11808        bgt  pcrel:8                  btst #imm,@abs:8
11809     *  bgt  pcrel:16                 btst rs,rd
11810        ble  pcrel:8                  btst rs,@rd
11811     *  ble  pcrel:16                 btst rs,@abs:8
11812        bclr #imm,rd                  bxor #imm,rd
11813        bclr #imm,@rd                 bxor #imm,@rd
11814        bclr #imm,@abs:8              bxor #imm,@abs:8
11815        bclr rs,rd                    cmp.b #imm,rd
11816        bclr rs,@rd                   cmp.b rs,rd
11817        bclr rs,@abs:8                cmp.w rs,rd
11818        biand #imm,rd                 cmp.w rs,rd
11819        biand #imm,@rd             *  cmp.w #imm,rd
11820        biand #imm,@abs:8          *  cmp.l #imm,rd
11821        bild #imm,rd               *  cmp.l rs,rd
11822        bild #imm,@rd                 daa  rs
11823        bild #imm,@abs:8              das  rs
11824        bior #imm,rd                  dec.b rs
11825        bior #imm,@rd              *  dec.w #imm,rd
11826        bior #imm,@abs:8           *  dec.l #imm,rd
11827        bist #imm,rd                  divxu.b rs,rd
11828        bist #imm,@rd              *  divxu.w rs,rd
11829        bist #imm,@abs:8           *  divxs.b rs,rd
11830        bixor #imm,rd              *  divxs.w rs,rd
11831        bixor #imm,@rd                eepmov
11832        bixor #imm,@abs:8          *  eepmovw
11833
11834     *  exts.w rd                     mov.w rs,@abs:16
11835     *  exts.l rd                  *  mov.l #imm,rd
11836     *  extu.w rd                  *  mov.l rs,rd
11837     *  extu.l rd                  *  mov.l @rs,rd
11838        inc  rs                    *  mov.l @(disp:16,rs),rd
11839     *  inc.w #imm,rd              *  mov.l @(disp:24,rs),rd
11840     *  inc.l #imm,rd              *  mov.l @rs+,rd
11841        jmp  @rs                   *  mov.l @abs:16,rd
11842        jmp  abs                   *  mov.l @abs:24,rd
11843        jmp  @@abs:8               *  mov.l rs,@rd
11844        jsr  @rs                   *  mov.l rs,@(disp:16,rd)
11845        jsr  abs                   *  mov.l rs,@(disp:24,rd)
11846        jsr  @@abs:8               *  mov.l rs,@-rd
11847        ldc  #imm,ccr              *  mov.l rs,@abs:16
11848        ldc  rs,ccr                *  mov.l rs,@abs:24
11849     *  ldc  @abs:16,ccr              movfpe @abs:16,rd
11850     *  ldc  @abs:24,ccr              movtpe rs,@abs:16
11851     *  ldc  @(disp:16,rs),ccr        mulxu.b rs,rd
11852     *  ldc  @(disp:24,rs),ccr     *  mulxu.w rs,rd
11853     *  ldc  @rs+,ccr              *  mulxs.b rs,rd
11854     *  ldc  @rs,ccr               *  mulxs.w rs,rd
11855     *  mov.b @(disp:24,rs),rd        neg.b rs
11856     *  mov.b rs,@(disp:24,rd)     *  neg.w rs
11857        mov.b @abs:16,rd           *  neg.l rs
11858        mov.b rs,rd                   nop
11859        mov.b @abs:8,rd               not.b rs
11860        mov.b rs,@abs:8            *  not.w rs
11861        mov.b rs,rd                *  not.l rs
11862        mov.b #imm,rd                 or.b #imm,rd
11863        mov.b @rs,rd                  or.b rs,rd
11864        mov.b @(disp:16,rs),rd     *  or.w #imm,rd
11865        mov.b @rs+,rd              *  or.w rs,rd
11866        mov.b @abs:8,rd            *  or.l #imm,rd
11867        mov.b rs,@rd               *  or.l rs,rd
11868        mov.b rs,@(disp:16,rd)        orc  #imm,ccr
11869        mov.b rs,@-rd                 pop.w rs
11870        mov.b rs,@abs:8            *  pop.l rs
11871        mov.w rs,@rd                  push.w rs
11872     *  mov.w @(disp:24,rs),rd     *  push.l rs
11873     *  mov.w rs,@(disp:24,rd)        rotl.b rs
11874     *  mov.w @abs:24,rd           *  rotl.w rs
11875     *  mov.w rs,@abs:24           *  rotl.l rs
11876        mov.w rs,rd                   rotr.b rs
11877        mov.w #imm,rd              *  rotr.w rs
11878        mov.w @rs,rd               *  rotr.l rs
11879        mov.w @(disp:16,rs),rd        rotxl.b rs
11880        mov.w @rs+,rd              *  rotxl.w rs
11881        mov.w @abs:16,rd           *  rotxl.l rs
11882        mov.w rs,@(disp:16,rd)        rotxr.b rs
11883        mov.w rs,@-rd              *  rotxr.w rs
11884
11885     *  rotxr.l rs                 *  stc  ccr,@(disp:24,rd)
11886        bpt                        *  stc  ccr,@-rd
11887        rte                        *  stc  ccr,@abs:16
11888        rts                        *  stc  ccr,@abs:24
11889        shal.b rs                     sub.b rs,rd
11890     *  shal.w rs                     sub.w rs,rd
11891     *  shal.l rs                  *  sub.w #imm,rd
11892        shar.b rs                  *  sub.l rs,rd
11893     *  shar.w rs                  *  sub.l #imm,rd
11894     *  shar.l rs                     subs #imm,rd
11895        shll.b rs                     subx #imm,rd
11896     *  shll.w rs                     subx rs,rd
11897     *  shll.l rs                  *  trapa #imm
11898        shlr.b rs                     xor  #imm,rd
11899     *  shlr.w rs                     xor  rs,rd
11900     *  shlr.l rs                  *  xor.w #imm,rd
11901        sleep                      *  xor.w rs,rd
11902        stc  ccr,rd                *  xor.l #imm,rd
11903     *  stc  ccr,@rs               *  xor.l rs,rd
11904     *  stc  ccr,@(disp:16,rd)        xorc #imm,ccr
11905
11906   Four H8/300 instructions (`add', `cmp', `mov', `sub') are defined
11907with variants using the suffixes `.b', `.w', and `.l' to specify the
11908size of a memory operand.  `as' supports these suffixes, but does not
11909require them; since one of the operands is always a register, `as' can
11910deduce the correct size.
11911
11912   For example, since `r0' refers to a 16-bit register,
11913     mov    r0,@foo
11914is equivalent to
11915     mov.w  r0,@foo
11916
11917   If you use the size suffixes, `as' issues a warning when the suffix
11918and the register size do not match.
11919
11920
11921File: as.info,  Node: HPPA-Dependent,  Next: i386-Dependent,  Prev: H8/300-Dependent,  Up: Machine Dependencies
11922
119239.15 HPPA Dependent Features
11924============================
11925
11926* Menu:
11927
11928* HPPA Notes::                Notes
11929* HPPA Options::              Options
11930* HPPA Syntax::               Syntax
11931* HPPA Floating Point::       Floating Point
11932* HPPA Directives::           HPPA Machine Directives
11933* HPPA Opcodes::              Opcodes
11934
11935
11936File: as.info,  Node: HPPA Notes,  Next: HPPA Options,  Up: HPPA-Dependent
11937
119389.15.1 Notes
11939------------
11940
11941As a back end for GNU CC `as' has been thoroughly tested and should
11942work extremely well.  We have tested it only minimally on hand written
11943assembly code and no one has tested it much on the assembly output from
11944the HP compilers.
11945
11946   The format of the debugging sections has changed since the original
11947`as' port (version 1.3X) was released; therefore, you must rebuild all
11948HPPA objects and libraries with the new assembler so that you can debug
11949the final executable.
11950
11951   The HPPA `as' port generates a small subset of the relocations
11952available in the SOM and ELF object file formats.  Additional relocation
11953support will be added as it becomes necessary.
11954
11955
11956File: as.info,  Node: HPPA Options,  Next: HPPA Syntax,  Prev: HPPA Notes,  Up: HPPA-Dependent
11957
119589.15.2 Options
11959--------------
11960
11961`as' has no machine-dependent command-line options for the HPPA.
11962
11963
11964File: as.info,  Node: HPPA Syntax,  Next: HPPA Floating Point,  Prev: HPPA Options,  Up: HPPA-Dependent
11965
119669.15.3 Syntax
11967-------------
11968
11969The assembler syntax closely follows the HPPA instruction set reference
11970manual; assembler directives and general syntax closely follow the HPPA
11971assembly language reference manual, with a few noteworthy differences.
11972
11973   First, a colon may immediately follow a label definition.  This is
11974simply for compatibility with how most assembly language programmers
11975write code.
11976
11977   Some obscure expression parsing problems may affect hand written
11978code which uses the `spop' instructions, or code which makes significant
11979use of the `!' line separator.
11980
11981   `as' is much less forgiving about missing arguments and other
11982similar oversights than the HP assembler.  `as' notifies you of missing
11983arguments as syntax errors; this is regarded as a feature, not a bug.
11984
11985   Finally, `as' allows you to use an external symbol without
11986explicitly importing the symbol.  _Warning:_ in the future this will be
11987an error for HPPA targets.
11988
11989   Special characters for HPPA targets include:
11990
11991   `;' is the line comment character.
11992
11993   `!' can be used instead of a newline to separate statements.
11994
11995   Since `$' has no special meaning, you may use it in symbol names.
11996
11997
11998File: as.info,  Node: HPPA Floating Point,  Next: HPPA Directives,  Prev: HPPA Syntax,  Up: HPPA-Dependent
11999
120009.15.4 Floating Point
12001---------------------
12002
12003The HPPA family uses IEEE floating-point numbers.
12004
12005
12006File: as.info,  Node: HPPA Directives,  Next: HPPA Opcodes,  Prev: HPPA Floating Point,  Up: HPPA-Dependent
12007
120089.15.5 HPPA Assembler Directives
12009--------------------------------
12010
12011`as' for the HPPA supports many additional directives for compatibility
12012with the native assembler.  This section describes them only briefly.
12013For detailed information on HPPA-specific assembler directives, see
12014`HP9000 Series 800 Assembly Language Reference Manual' (HP 92432-90001).
12015
12016   `as' does _not_ support the following assembler directives described
12017in the HP manual:
12018
12019     .endm           .liston
12020     .enter          .locct
12021     .leave          .macro
12022     .listoff
12023
12024   Beyond those implemented for compatibility, `as' supports one
12025additional assembler directive for the HPPA: `.param'.  It conveys
12026register argument locations for static functions.  Its syntax closely
12027follows the `.export' directive.
12028
12029   These are the additional directives in `as' for the HPPA:
12030
12031`.block N'
12032`.blockz N'
12033     Reserve N bytes of storage, and initialize them to zero.
12034
12035`.call'
12036     Mark the beginning of a procedure call.  Only the special case
12037     with _no arguments_ is allowed.
12038
12039`.callinfo [ PARAM=VALUE, ... ]  [ FLAG, ... ]'
12040     Specify a number of parameters and flags that define the
12041     environment for a procedure.
12042
12043     PARAM may be any of `frame' (frame size), `entry_gr' (end of
12044     general register range), `entry_fr' (end of float register range),
12045     `entry_sr' (end of space register range).
12046
12047     The values for FLAG are `calls' or `caller' (proc has
12048     subroutines), `no_calls' (proc does not call subroutines),
12049     `save_rp' (preserve return pointer), `save_sp' (proc preserves
12050     stack pointer), `no_unwind' (do not unwind this proc), `hpux_int'
12051     (proc is interrupt routine).
12052
12053`.code'
12054     Assemble into the standard section called `$TEXT$', subsection
12055     `$CODE$'.
12056
12057`.copyright "STRING"'
12058     In the SOM object format, insert STRING into the object code,
12059     marked as a copyright string.
12060
12061`.copyright "STRING"'
12062     In the ELF object format, insert STRING into the object code,
12063     marked as a version string.
12064
12065`.enter'
12066     Not yet supported; the assembler rejects programs containing this
12067     directive.
12068
12069`.entry'
12070     Mark the beginning of a procedure.
12071
12072`.exit'
12073     Mark the end of a procedure.
12074
12075`.export NAME [ ,TYP ]  [ ,PARAM=R ]'
12076     Make a procedure NAME available to callers.  TYP, if present, must
12077     be one of `absolute', `code' (ELF only, not SOM), `data', `entry',
12078     `data', `entry', `millicode', `plabel', `pri_prog', or `sec_prog'.
12079
12080     PARAM, if present, provides either relocation information for the
12081     procedure arguments and result, or a privilege level.  PARAM may be
12082     `argwN' (where N ranges from `0' to `3', and indicates one of four
12083     one-word arguments); `rtnval' (the procedure's result); or
12084     `priv_lev' (privilege level).  For arguments or the result, R
12085     specifies how to relocate, and must be one of `no' (not
12086     relocatable), `gr' (argument is in general register), `fr' (in
12087     floating point register), or `fu' (upper half of float register).
12088     For `priv_lev', R is an integer.
12089
12090`.half N'
12091     Define a two-byte integer constant N; synonym for the portable
12092     `as' directive `.short'.
12093
12094`.import NAME [ ,TYP ]'
12095     Converse of `.export'; make a procedure available to call.  The
12096     arguments use the same conventions as the first two arguments for
12097     `.export'.
12098
12099`.label NAME'
12100     Define NAME as a label for the current assembly location.
12101
12102`.leave'
12103     Not yet supported; the assembler rejects programs containing this
12104     directive.
12105
12106`.origin LC'
12107     Advance location counter to LC. Synonym for the `as' portable
12108     directive `.org'.
12109
12110`.param NAME [ ,TYP ]  [ ,PARAM=R ]'
12111     Similar to `.export', but used for static procedures.
12112
12113`.proc'
12114     Use preceding the first statement of a procedure.
12115
12116`.procend'
12117     Use following the last statement of a procedure.
12118
12119`LABEL .reg EXPR'
12120     Synonym for `.equ'; define LABEL with the absolute expression EXPR
12121     as its value.
12122
12123`.space SECNAME [ ,PARAMS ]'
12124     Switch to section SECNAME, creating a new section by that name if
12125     necessary.  You may only use PARAMS when creating a new section,
12126     not when switching to an existing one.  SECNAME may identify a
12127     section by number rather than by name.
12128
12129     If specified, the list PARAMS declares attributes of the section,
12130     identified by keywords.  The keywords recognized are `spnum=EXP'
12131     (identify this section by the number EXP, an absolute expression),
12132     `sort=EXP' (order sections according to this sort key when linking;
12133     EXP is an absolute expression), `unloadable' (section contains no
12134     loadable data), `notdefined' (this section defined elsewhere), and
12135     `private' (data in this section not available to other programs).
12136
12137`.spnum SECNAM'
12138     Allocate four bytes of storage, and initialize them with the
12139     section number of the section named SECNAM.  (You can define the
12140     section number with the HPPA `.space' directive.)
12141
12142`.string "STR"'
12143     Copy the characters in the string STR to the object file.  *Note
12144     Strings: Strings, for information on escape sequences you can use
12145     in `as' strings.
12146
12147     _Warning!_ The HPPA version of `.string' differs from the usual
12148     `as' definition: it does _not_ write a zero byte after copying STR.
12149
12150`.stringz "STR"'
12151     Like `.string', but appends a zero byte after copying STR to object
12152     file.
12153
12154`.subspa NAME [ ,PARAMS ]'
12155`.nsubspa NAME [ ,PARAMS ]'
12156     Similar to `.space', but selects a subsection NAME within the
12157     current section.  You may only specify PARAMS when you create a
12158     subsection (in the first instance of `.subspa' for this NAME).
12159
12160     If specified, the list PARAMS declares attributes of the
12161     subsection, identified by keywords.  The keywords recognized are
12162     `quad=EXPR' ("quadrant" for this subsection), `align=EXPR'
12163     (alignment for beginning of this subsection; a power of two),
12164     `access=EXPR' (value for "access rights" field), `sort=EXPR'
12165     (sorting order for this subspace in link), `code_only' (subsection
12166     contains only code), `unloadable' (subsection cannot be loaded
12167     into memory), `comdat' (subsection is comdat), `common'
12168     (subsection is common block), `dup_comm' (subsection may have
12169     duplicate names), or `zero' (subsection is all zeros, do not write
12170     in object file).
12171
12172     `.nsubspa' always creates a new subspace with the given name, even
12173     if one with the same name already exists.
12174
12175     `comdat', `common' and `dup_comm' can be used to implement various
12176     flavors of one-only support when using the SOM linker.  The SOM
12177     linker only supports specific combinations of these flags.  The
12178     details are not documented.  A brief description is provided here.
12179
12180     `comdat' provides a form of linkonce support.  It is useful for
12181     both code and data subspaces.  A `comdat' subspace has a key symbol
12182     marked by the `is_comdat' flag or `ST_COMDAT'.  Only the first
12183     subspace for any given key is selected.  The key symbol becomes
12184     universal in shared links.  This is similar to the behavior of
12185     `secondary_def' symbols.
12186
12187     `common' provides Fortran named common support.  It is only useful
12188     for data subspaces.  Symbols with the flag `is_common' retain this
12189     flag in shared links.  Referencing a `is_common' symbol in a shared
12190     library from outside the library doesn't work.  Thus, `is_common'
12191     symbols must be output whenever they are needed.
12192
12193     `common' and `dup_comm' together provide Cobol common support.
12194     The subspaces in this case must all be the same length.
12195     Otherwise, this support is similar to the Fortran common support.
12196
12197     `dup_comm' by itself provides a type of one-only support for code.
12198     Only the first `dup_comm' subspace is selected.  There is a rather
12199     complex algorithm to compare subspaces.  Code symbols marked with
12200     the `dup_common' flag are hidden.  This support was intended for
12201     "C++ duplicate inlines".
12202
12203     A simplified technique is used to mark the flags of symbols based
12204     on the flags of their subspace.  A symbol with the scope
12205     SS_UNIVERSAL and type ST_ENTRY, ST_CODE or ST_DATA is marked with
12206     the corresponding settings of `comdat', `common' and `dup_comm'
12207     from the subspace, respectively.  This avoids having to introduce
12208     additional directives to mark these symbols.  The HP assembler
12209     sets `is_common' from `common'.  However, it doesn't set the
12210     `dup_common' from `dup_comm'.  It doesn't have `comdat' support.
12211
12212`.version "STR"'
12213     Write STR as version identifier in object code.
12214
12215
12216File: as.info,  Node: HPPA Opcodes,  Prev: HPPA Directives,  Up: HPPA-Dependent
12217
122189.15.6 Opcodes
12219--------------
12220
12221For detailed information on the HPPA machine instruction set, see
12222`PA-RISC Architecture and Instruction Set Reference Manual' (HP
1222309740-90039).
12224
12225
12226File: as.info,  Node: i386-Dependent,  Next: IA-64-Dependent,  Prev: HPPA-Dependent,  Up: Machine Dependencies
12227
122289.16 80386 Dependent Features
12229=============================
12230
12231   The i386 version `as' supports both the original Intel 386
12232architecture in both 16 and 32-bit mode as well as AMD x86-64
12233architecture extending the Intel architecture to 64-bits.
12234
12235* Menu:
12236
12237* i386-Options::                Options
12238* i386-Directives::             X86 specific directives
12239* i386-Syntax::                 Syntactical considerations
12240* i386-Mnemonics::              Instruction Naming
12241* i386-Regs::                   Register Naming
12242* i386-Prefixes::               Instruction Prefixes
12243* i386-Memory::                 Memory References
12244* i386-Jumps::                  Handling of Jump Instructions
12245* i386-Float::                  Floating Point
12246* i386-SIMD::                   Intel's MMX and AMD's 3DNow! SIMD Operations
12247* i386-LWP::                    AMD's Lightweight Profiling Instructions
12248* i386-BMI::                    Bit Manipulation Instruction
12249* i386-TBM::                    AMD's Trailing Bit Manipulation Instructions
12250* i386-16bit::                  Writing 16-bit Code
12251* i386-Arch::                   Specifying an x86 CPU architecture
12252* i386-ISA::                    AMD64 ISA vs. Intel64 ISA
12253* i386-Bugs::                   AT&T Syntax bugs
12254* i386-Notes::                  Notes
12255
12256
12257File: as.info,  Node: i386-Options,  Next: i386-Directives,  Up: i386-Dependent
12258
122599.16.1 Options
12260--------------
12261
12262The i386 version of `as' has a few machine dependent options:
12263
12264`--32 | --x32 | --64'
12265     Select the word size, either 32 bits or 64 bits.  `--32' implies
12266     Intel i386 architecture, while `--x32' and `--64' imply AMD x86-64
12267     architecture with 32-bit or 64-bit word-size respectively.
12268
12269     These options are only available with the ELF object file format,
12270     and require that the necessary BFD support has been included (on a
12271     32-bit platform you have to add -enable-64-bit-bfd to configure
12272     enable 64-bit usage and use x86-64 as target platform).
12273
12274`-n'
12275     By default, x86 GAS replaces multiple nop instructions used for
12276     alignment within code sections with multi-byte nop instructions
12277     such as leal 0(%esi,1),%esi.  This switch disables the
12278     optimization if a single byte nop (0x90) is explicitly specified
12279     as the fill byte for alignment.
12280
12281`--divide'
12282     On SVR4-derived platforms, the character `/' is treated as a
12283     comment character, which means that it cannot be used in
12284     expressions.  The `--divide' option turns `/' into a normal
12285     character.  This does not disable `/' at the beginning of a line
12286     starting a comment, or affect using `#' for starting a comment.
12287
12288`-march=CPU[+EXTENSION...]'
12289     This option specifies the target processor.  The assembler will
12290     issue an error message if an attempt is made to assemble an
12291     instruction which will not execute on the target processor.  The
12292     following processor names are recognized: `i8086', `i186', `i286',
12293     `i386', `i486', `i586', `i686', `pentium', `pentiumpro',
12294     `pentiumii', `pentiumiii', `pentium4', `prescott', `nocona',
12295     `core', `core2', `corei7', `iamcu', `k6', `k6_2', `athlon',
12296     `opteron', `k8', `amdfam10', `bdver1', `bdver2', `bdver3',
12297     `bdver4', `znver1', `znver2', `znver3', `btver1', `btver2',
12298     `generic32' and `generic64'.
12299
12300     In addition to the basic instruction set, the assembler can be
12301     told to accept various extension mnemonics.  For example,
12302     `-march=i686+sse4+vmx' extends I686 with SSE4 and VMX.  The
12303     following extensions are currently supported: `8087', `287', `387',
12304     `687', `no87', `no287', `no387', `no687', `cmov', `nocmov', `fxsr',
12305     `nofxsr', `mmx', `nommx', `sse', `sse2', `sse3', `sse4a', `ssse3',
12306     `sse4.1', `sse4.2', `sse4', `nosse', `nosse2', `nosse3', `nosse4a',
12307     `nossse3', `nosse4.1', `nosse4.2', `nosse4', `avx', `avx2',
12308     `noavx', `noavx2', `adx', `rdseed', `prfchw', `smap', `mpx', `sha',
12309     `rdpid', `ptwrite', `cet', `gfni', `vaes', `vpclmulqdq',
12310     `prefetchwt1', `clflushopt', `se1', `clwb', `movdiri', `movdir64b',
12311     `enqcmd', `serialize', `tsxldtrk', `kl', `nokl', `widekl',
12312     `nowidekl', `hreset', `avx512f', `avx512cd', `avx512er',
12313     `avx512pf', `avx512vl', `avx512bw', `avx512dq', `avx512ifma',
12314     `avx512vbmi', `avx512_4fmaps', `avx512_4vnniw', `avx512_vpopcntdq',
12315     `avx512_vbmi2', `avx512_vnni', `avx512_bitalg',
12316     `avx512_vp2intersect', `tdx', `avx512_bf16', `avx_vnni',
12317     `avx512_fp16', `noavx512f', `noavx512cd', `noavx512er',
12318     `noavx512pf', `noavx512vl', `noavx512bw', `noavx512dq',
12319     `noavx512ifma', `noavx512vbmi', `noavx512_4fmaps',
12320     `noavx512_4vnniw', `noavx512_vpopcntdq', `noavx512_vbmi2',
12321     `noavx512_vnni', `noavx512_bitalg', `noavx512_vp2intersect',
12322     `notdx', `noavx512_bf16', `noavx_vnni', `noavx512_fp16',
12323     `noenqcmd', `noserialize', `notsxldtrk', `amx_int8', `noamx_int8',
12324     `amx_bf16', `noamx_bf16', `amx_tile', `noamx_tile', `nouintr',
12325     `nohreset', `vmx', `vmfunc', `smx', `xsave', `xsaveopt', `xsavec',
12326     `xsaves', `aes', `pclmul', `fsgsbase', `rdrnd', `f16c', `bmi2',
12327     `fma', `movbe', `ept', `lzcnt', `popcnt', `hle', `rtm', `invpcid',
12328     `clflush', `mwaitx', `clzero', `wbnoinvd', `pconfig', `waitpkg',
12329     `uintr', `cldemote', `rdpru', `mcommit', `sev_es', `lwp', `fma4',
12330     `xop', `cx16', `syscall', `rdtscp', `3dnow', `3dnowa', `sse4a',
12331     `sse5', `snp', `invlpgb', `tlbsync', `svme' and `padlock'.  Note
12332     that rather than extending a basic instruction set, the extension
12333     mnemonics starting with `no' revoke the respective functionality.
12334
12335     When the `.arch' directive is used with `-march', the `.arch'
12336     directive will take precedent.
12337
12338`-mtune=CPU'
12339     This option specifies a processor to optimize for. When used in
12340     conjunction with the `-march' option, only instructions of the
12341     processor specified by the `-march' option will be generated.
12342
12343     Valid CPU values are identical to the processor list of
12344     `-march=CPU'.
12345
12346`-msse2avx'
12347     This option specifies that the assembler should encode SSE
12348     instructions with VEX prefix.
12349
12350`-muse-unaligned-vector-move'
12351     This option specifies that the assembler should encode aligned
12352     vector move as unaligned vector move.
12353
12354`-msse-check=NONE'
12355`-msse-check=WARNING'
12356`-msse-check=ERROR'
12357     These options control if the assembler should check SSE
12358     instructions.  `-msse-check=NONE' will make the assembler not to
12359     check SSE instructions,  which is the default.
12360     `-msse-check=WARNING' will make the assembler issue a warning for
12361     any SSE instruction.  `-msse-check=ERROR' will make the assembler
12362     issue an error for any SSE instruction.
12363
12364`-mavxscalar=128'
12365`-mavxscalar=256'
12366     These options control how the assembler should encode scalar AVX
12367     instructions.  `-mavxscalar=128' will encode scalar AVX
12368     instructions with 128bit vector length, which is the default.
12369     `-mavxscalar=256' will encode scalar AVX instructions with 256bit
12370     vector length.
12371
12372     WARNING: Don't use this for production code - due to CPU errata the
12373     resulting code may not work on certain models.
12374
12375`-mvexwig=0'
12376`-mvexwig=1'
12377     These options control how the assembler should encode
12378     VEX.W-ignored (WIG) VEX instructions.  `-mvexwig=0' will encode
12379     WIG VEX instructions with vex.w = 0, which is the default.
12380     `-mvexwig=1' will encode WIG EVEX instructions with vex.w = 1.
12381
12382     WARNING: Don't use this for production code - due to CPU errata the
12383     resulting code may not work on certain models.
12384
12385`-mevexlig=128'
12386`-mevexlig=256'
12387`-mevexlig=512'
12388     These options control how the assembler should encode
12389     length-ignored (LIG) EVEX instructions.  `-mevexlig=128' will
12390     encode LIG EVEX instructions with 128bit vector length, which is
12391     the default.  `-mevexlig=256' and `-mevexlig=512' will encode LIG
12392     EVEX instructions with 256bit and 512bit vector length,
12393     respectively.
12394
12395`-mevexwig=0'
12396`-mevexwig=1'
12397     These options control how the assembler should encode w-ignored
12398     (WIG) EVEX instructions.  `-mevexwig=0' will encode WIG EVEX
12399     instructions with evex.w = 0, which is the default.  `-mevexwig=1'
12400     will encode WIG EVEX instructions with evex.w = 1.
12401
12402`-mmnemonic=ATT'
12403`-mmnemonic=INTEL'
12404     This option specifies instruction mnemonic for matching
12405     instructions.  The `.att_mnemonic' and `.intel_mnemonic'
12406     directives will take precedent.
12407
12408`-msyntax=ATT'
12409`-msyntax=INTEL'
12410     This option specifies instruction syntax when processing
12411     instructions.  The `.att_syntax' and `.intel_syntax' directives
12412     will take precedent.
12413
12414`-mnaked-reg'
12415     This option specifies that registers don't require a `%' prefix.
12416     The `.att_syntax' and `.intel_syntax' directives will take
12417     precedent.
12418
12419`-madd-bnd-prefix'
12420     This option forces the assembler to add BND prefix to all
12421     branches, even if such prefix was not explicitly specified in the
12422     source code.
12423
12424`-mno-shared'
12425     On ELF target, the assembler normally optimizes out non-PLT
12426     relocations against defined non-weak global branch targets with
12427     default visibility.  The `-mshared' option tells the assembler to
12428     generate code which may go into a shared library where all
12429     non-weak global branch targets with default visibility can be
12430     preempted.  The resulting code is slightly bigger.  This option
12431     only affects the handling of branch instructions.
12432
12433`-mbig-obj'
12434     On PE/COFF target this option forces the use of big object file
12435     format, which allows more than 32768 sections.
12436
12437`-momit-lock-prefix=NO'
12438`-momit-lock-prefix=YES'
12439     These options control how the assembler should encode lock prefix.
12440     This option is intended as a workaround for processors, that fail
12441     on lock prefix. This option can only be safely used with
12442     single-core, single-thread computers `-momit-lock-prefix=YES' will
12443     omit all lock prefixes.  `-momit-lock-prefix=NO' will encode lock
12444     prefix as usual, which is the default.
12445
12446`-mfence-as-lock-add=NO'
12447`-mfence-as-lock-add=YES'
12448     These options control how the assembler should encode lfence,
12449     mfence and sfence.  `-mfence-as-lock-add=YES' will encode lfence,
12450     mfence and sfence as `lock addl $0x0, (%rsp)' in 64-bit mode and
12451     `lock addl $0x0, (%esp)' in 32-bit mode.  `-mfence-as-lock-add=NO'
12452     will encode lfence, mfence and sfence as usual, which is the
12453     default.
12454
12455`-mrelax-relocations=NO'
12456`-mrelax-relocations=YES'
12457     These options control whether the assembler should generate relax
12458     relocations, R_386_GOT32X, in 32-bit mode, or R_X86_64_GOTPCRELX
12459     and R_X86_64_REX_GOTPCRELX, in 64-bit mode.
12460     `-mrelax-relocations=YES' will generate relax relocations.
12461     `-mrelax-relocations=NO' will not generate relax relocations.  The
12462     default can be controlled by a configure option
12463     `--enable-x86-relax-relocations'.
12464
12465`-malign-branch-boundary=NUM'
12466     This option controls how the assembler should align branches with
12467     segment prefixes or NOP.  NUM must be a power of 2.  It should be
12468     0 or no less than 16.  Branches will be aligned within NUM byte
12469     boundary.  `-malign-branch-boundary=0', which is the default,
12470     doesn't align branches.
12471
12472`-malign-branch=TYPE[+TYPE...]'
12473     This option specifies types of branches to align. TYPE is
12474     combination of `jcc', which aligns conditional jumps, `fused',
12475     which aligns fused conditional jumps, `jmp', which aligns
12476     unconditional jumps, `call' which aligns calls, `ret', which
12477     aligns rets, `indirect', which aligns indirect jumps and calls.
12478     The default is `-malign-branch=jcc+fused+jmp'.
12479
12480`-malign-branch-prefix-size=NUM'
12481     This option specifies the maximum number of prefixes on an
12482     instruction to align branches.  NUM should be between 0 and 5.
12483     The default NUM is 5.
12484
12485`-mbranches-within-32B-boundaries'
12486     This option aligns conditional jumps, fused conditional jumps and
12487     unconditional jumps within 32 byte boundary with up to 5 segment
12488     prefixes on an instruction.  It is equivalent to
12489     `-malign-branch-boundary=32' `-malign-branch=jcc+fused+jmp'
12490     `-malign-branch-prefix-size=5'.  The default doesn't align
12491     branches.
12492
12493`-mlfence-after-load=NO'
12494`-mlfence-after-load=YES'
12495     These options control whether the assembler should generate lfence
12496     after load instructions.  `-mlfence-after-load=YES' will generate
12497     lfence.  `-mlfence-after-load=NO' will not generate lfence, which
12498     is the default.
12499
12500`-mlfence-before-indirect-branch=NONE'
12501
12502`-mlfence-before-indirect-branch=ALL'
12503
12504`-mlfence-before-indirect-branch=REGISTER'
12505`-mlfence-before-indirect-branch=MEMORY'
12506     These options control whether the assembler should generate lfence
12507     before indirect near branch instructions.
12508     `-mlfence-before-indirect-branch=ALL' will generate lfence before
12509     indirect near branch via register and issue a warning before
12510     indirect near branch via memory.  It also implicitly sets
12511     `-mlfence-before-ret=SHL' when there's no explicit
12512     `-mlfence-before-ret='.
12513     `-mlfence-before-indirect-branch=REGISTER' will generate lfence
12514     before indirect near branch via register.
12515     `-mlfence-before-indirect-branch=MEMORY' will issue a warning
12516     before indirect near branch via memory.
12517     `-mlfence-before-indirect-branch=NONE' will not generate lfence
12518     nor issue warning, which is the default.  Note that lfence won't
12519     be generated before indirect near branch via register with
12520     `-mlfence-after-load=YES' since lfence will be generated after
12521     loading branch target register.
12522
12523`-mlfence-before-ret=NONE'
12524
12525`-mlfence-before-ret=SHL'
12526
12527`-mlfence-before-ret=OR'
12528
12529`-mlfence-before-ret=YES'
12530`-mlfence-before-ret=NOT'
12531     These options control whether the assembler should generate lfence
12532     before ret.  `-mlfence-before-ret=OR' will generate generate or
12533     instruction with lfence.  `-mlfence-before-ret=SHL/YES' will
12534     generate shl instruction with lfence. `-mlfence-before-ret=NOT'
12535     will generate not instruction with lfence.
12536     `-mlfence-before-ret=NONE' will not generate lfence, which is the
12537     default.
12538
12539`-mx86-used-note=NO'
12540`-mx86-used-note=YES'
12541     These options control whether the assembler should generate
12542     GNU_PROPERTY_X86_ISA_1_USED and GNU_PROPERTY_X86_FEATURE_2_USED
12543     GNU property notes.  The default can be controlled by the
12544     `--enable-x86-used-note' configure option.
12545
12546`-mevexrcig=RNE'
12547`-mevexrcig=RD'
12548`-mevexrcig=RU'
12549`-mevexrcig=RZ'
12550     These options control how the assembler should encode SAE-only
12551     EVEX instructions.  `-mevexrcig=RNE' will encode RC bits of EVEX
12552     instruction with 00, which is the default.  `-mevexrcig=RD',
12553     `-mevexrcig=RU' and `-mevexrcig=RZ' will encode SAE-only EVEX
12554     instructions with 01, 10 and 11 RC bits, respectively.
12555
12556`-mamd64'
12557`-mintel64'
12558     This option specifies that the assembler should accept only AMD64
12559     or Intel64 ISA in 64-bit mode.  The default is to accept common,
12560     Intel64 only and AMD64 ISAs.
12561
12562`-O0 | -O | -O1 | -O2 | -Os'
12563     Optimize instruction encoding with smaller instruction size.  `-O'
12564     and `-O1' encode 64-bit register load instructions with 64-bit
12565     immediate as 32-bit register load instructions with 31-bit or
12566     32-bits immediates, encode 64-bit register clearing instructions
12567     with 32-bit register clearing instructions, encode 256-bit/512-bit
12568     VEX/EVEX vector register clearing instructions with 128-bit VEX
12569     vector register clearing instructions, encode 128-bit/256-bit EVEX
12570     vector register load/store instructions with VEX vector register
12571     load/store instructions, and encode 128-bit/256-bit EVEX packed
12572     integer logical instructions with 128-bit/256-bit VEX packed
12573     integer logical.
12574
12575     `-O2' includes `-O1' optimization plus encodes 256-bit/512-bit
12576     EVEX vector register clearing instructions with 128-bit EVEX
12577     vector register clearing instructions.  In 64-bit mode VEX encoded
12578     instructions with commutative source operands will also have their
12579     source operands swapped if this allows using the 2-byte VEX prefix
12580     form instead of the 3-byte one.  Certain forms of AND as well as
12581     OR with the same (register) operand specified twice will also be
12582     changed to TEST.
12583
12584     `-Os' includes `-O2' optimization plus encodes 16-bit, 32-bit and
12585     64-bit register tests with immediate as 8-bit register test with
12586     immediate.  `-O0' turns off this optimization.
12587
12588
12589
12590File: as.info,  Node: i386-Directives,  Next: i386-Syntax,  Prev: i386-Options,  Up: i386-Dependent
12591
125929.16.2 x86 specific Directives
12593------------------------------
12594
12595`.lcomm SYMBOL , LENGTH[, ALIGNMENT]'
12596     Reserve LENGTH (an absolute expression) bytes for a local common
12597     denoted by SYMBOL.  The section and value of SYMBOL are those of
12598     the new local common.  The addresses are allocated in the bss
12599     section, so that at run-time the bytes start off zeroed.  Since
12600     SYMBOL is not declared global, it is normally not visible to `ld'.
12601     The optional third parameter, ALIGNMENT, specifies the desired
12602     alignment of the symbol in the bss section.
12603
12604     This directive is only available for COFF based x86 targets.
12605
12606`.largecomm SYMBOL , LENGTH[, ALIGNMENT]'
12607     This directive behaves in the same way as the `comm' directive
12608     except that the data is placed into the .LBSS section instead of
12609     the .BSS section *Note Comm::.
12610
12611     The directive is intended to be used for data which requires a
12612     large amount of space, and it is only available for ELF based
12613     x86_64 targets.
12614
12615`.value EXPRESSION [, EXPRESSION]'
12616     This directive behaves in the same way as the `.short' directive,
12617     taking a series of comma separated expressions and storing them as
12618     two-byte wide values into the current section.
12619
12620
12621
12622File: as.info,  Node: i386-Syntax,  Next: i386-Mnemonics,  Prev: i386-Directives,  Up: i386-Dependent
12623
126249.16.3 i386 Syntactical Considerations
12625--------------------------------------
12626
12627* Menu:
12628
12629* i386-Variations::           AT&T Syntax versus Intel Syntax
12630* i386-Chars::                Special Characters
12631
12632
12633File: as.info,  Node: i386-Variations,  Next: i386-Chars,  Up: i386-Syntax
12634
126359.16.3.1 AT&T Syntax versus Intel Syntax
12636........................................
12637
12638`as' now supports assembly using Intel assembler syntax.
12639`.intel_syntax' selects Intel mode, and `.att_syntax' switches back to
12640the usual AT&T mode for compatibility with the output of `gcc'.  Either
12641of these directives may have an optional argument, `prefix', or
12642`noprefix' specifying whether registers require a `%' prefix.  AT&T
12643System V/386 assembler syntax is quite different from Intel syntax.  We
12644mention these differences because almost all 80386 documents use Intel
12645syntax.  Notable differences between the two syntaxes are:
12646
12647   * AT&T immediate operands are preceded by `$'; Intel immediate
12648     operands are undelimited (Intel `push 4' is AT&T `pushl $4').
12649     AT&T register operands are preceded by `%'; Intel register operands
12650     are undelimited.  AT&T absolute (as opposed to PC relative)
12651     jump/call operands are prefixed by `*'; they are undelimited in
12652     Intel syntax.
12653
12654   * AT&T and Intel syntax use the opposite order for source and
12655     destination operands.  Intel `add eax, 4' is `addl $4, %eax'.  The
12656     `source, dest' convention is maintained for compatibility with
12657     previous Unix assemblers.  Note that `bound', `invlpga', and
12658     instructions with 2 immediate operands, such as the `enter'
12659     instruction, do _not_ have reversed order.  *Note i386-Bugs::.
12660
12661   * In AT&T syntax the size of memory operands is determined from the
12662     last character of the instruction mnemonic.  Mnemonic suffixes of
12663     `b', `w', `l' and `q' specify byte (8-bit), word (16-bit), long
12664     (32-bit) and quadruple word (64-bit) memory references.  Mnemonic
12665     suffixes of `x', `y' and `z' specify xmm (128-bit vector), ymm
12666     (256-bit vector) and zmm (512-bit vector) memory references, only
12667     when there's no other way to disambiguate an instruction.  Intel
12668     syntax accomplishes this by prefixing memory operands (_not_ the
12669     instruction mnemonics) with `byte ptr', `word ptr', `dword ptr',
12670     `qword ptr', `xmmword ptr', `ymmword ptr' and `zmmword ptr'.
12671     Thus, Intel syntax `mov al, byte ptr FOO' is `movb FOO, %al' in
12672     AT&T syntax.  In Intel syntax, `fword ptr', `tbyte ptr' and `oword
12673     ptr' specify 48-bit, 80-bit and 128-bit memory references.
12674
12675     In 64-bit code, `movabs' can be used to encode the `mov'
12676     instruction with the 64-bit displacement or immediate operand.
12677
12678   * Immediate form long jumps and calls are `lcall/ljmp $SECTION,
12679     $OFFSET' in AT&T syntax; the Intel syntax is `call/jmp far
12680     SECTION:OFFSET'.  Also, the far return instruction is `lret
12681     $STACK-ADJUST' in AT&T syntax; Intel syntax is `ret far
12682     STACK-ADJUST'.
12683
12684   * The AT&T assembler does not provide support for multiple section
12685     programs.  Unix style systems expect all programs to be single
12686     sections.
12687
12688
12689File: as.info,  Node: i386-Chars,  Prev: i386-Variations,  Up: i386-Syntax
12690
126919.16.3.2 Special Characters
12692...........................
12693
12694The presence of a `#' appearing anywhere on a line indicates the start
12695of a comment that extends to the end of that line.
12696
12697   If a `#' appears as the first character of a line then the whole
12698line is treated as a comment, but in this case the line can also be a
12699logical line number directive (*note Comments::) or a preprocessor
12700control command (*note Preprocessing::).
12701
12702   If the `--divide' command-line option has not been specified then
12703the `/' character appearing anywhere on a line also introduces a line
12704comment.
12705
12706   The `;' character can be used to separate statements on the same
12707line.
12708
12709
12710File: as.info,  Node: i386-Mnemonics,  Next: i386-Regs,  Prev: i386-Syntax,  Up: i386-Dependent
12711
127129.16.4 i386-Mnemonics
12713---------------------
12714
127159.16.4.1 Instruction Naming
12716...........................
12717
12718Instruction mnemonics are suffixed with one character modifiers which
12719specify the size of operands.  The letters `b', `w', `l' and `q'
12720specify byte, word, long and quadruple word operands.  If no suffix is
12721specified by an instruction then `as' tries to fill in the missing
12722suffix based on the destination register operand (the last one by
12723convention).  Thus, `mov %ax, %bx' is equivalent to `movw %ax, %bx';
12724also, `mov $1, %bx' is equivalent to `movw $1, bx'.  Note that this is
12725incompatible with the AT&T Unix assembler which assumes that a missing
12726mnemonic suffix implies long operand size.  (This incompatibility does
12727not affect compiler output since compilers always explicitly specify
12728the mnemonic suffix.)
12729
12730   When there is no sizing suffix and no (suitable) register operands to
12731deduce the size of memory operands, with a few exceptions and where long
12732operand size is possible in the first place, operand size will default
12733to long in 32- and 64-bit modes.  Similarly it will default to short in
1273416-bit mode. Noteworthy exceptions are
12735
12736   * Instructions with an implicit on-stack operand as well as branches,
12737     which default to quad in 64-bit mode.
12738
12739   * Sign- and zero-extending moves, which default to byte size source
12740     operands.
12741
12742   * Floating point insns with integer operands, which default to short
12743     (for perhaps historical reasons).
12744
12745   * CRC32 with a 64-bit destination, which defaults to a quad source
12746     operand.
12747
12748
12749   Different encoding options can be specified via pseudo prefixes:
12750
12751   * `{disp8}' - prefer 8-bit displacement.
12752
12753   * `{disp32}' - prefer 32-bit displacement.
12754
12755   * `{disp16}' - prefer 16-bit displacement.
12756
12757   * `{load}' - prefer load-form instruction.
12758
12759   * `{store}' - prefer store-form instruction.
12760
12761   * `{vex}' -  encode with VEX prefix.
12762
12763   * `{vex3}' - encode with 3-byte VEX prefix.
12764
12765   * `{evex}' -  encode with EVEX prefix.
12766
12767   * `{rex}' - prefer REX prefix for integer and legacy vector
12768     instructions (x86-64 only).  Note that this differs from the `rex'
12769     prefix which generates REX prefix unconditionally.
12770
12771   * `{nooptimize}' - disable instruction size optimization.
12772
12773   Mnemonics of Intel VNNI instructions are encoded with the EVEX prefix
12774by default.  The pseudo `{vex}' prefix can be used to encode mnemonics
12775of Intel VNNI instructions with the VEX prefix.
12776
12777   The Intel-syntax conversion instructions
12778
12779   * `cbw' -- sign-extend byte in `%al' to word in `%ax',
12780
12781   * `cwde' -- sign-extend word in `%ax' to long in `%eax',
12782
12783   * `cwd' -- sign-extend word in `%ax' to long in `%dx:%ax',
12784
12785   * `cdq' -- sign-extend dword in `%eax' to quad in `%edx:%eax',
12786
12787   * `cdqe' -- sign-extend dword in `%eax' to quad in `%rax' (x86-64
12788     only),
12789
12790   * `cqo' -- sign-extend quad in `%rax' to octuple in `%rdx:%rax'
12791     (x86-64 only),
12792
12793are called `cbtw', `cwtl', `cwtd', `cltd', `cltq', and `cqto' in AT&T
12794naming.  `as' accepts either naming for these instructions.
12795
12796   The Intel-syntax extension instructions
12797
12798   * `movsx' -- sign-extend `reg8/mem8' to `reg16'.
12799
12800   * `movsx' -- sign-extend `reg8/mem8' to `reg32'.
12801
12802   * `movsx' -- sign-extend `reg8/mem8' to `reg64' (x86-64 only).
12803
12804   * `movsx' -- sign-extend `reg16/mem16' to `reg32'
12805
12806   * `movsx' -- sign-extend `reg16/mem16' to `reg64' (x86-64 only).
12807
12808   * `movsxd' -- sign-extend `reg32/mem32' to `reg64' (x86-64 only).
12809
12810   * `movzx' -- zero-extend `reg8/mem8' to `reg16'.
12811
12812   * `movzx' -- zero-extend `reg8/mem8' to `reg32'.
12813
12814   * `movzx' -- zero-extend `reg8/mem8' to `reg64' (x86-64 only).
12815
12816   * `movzx' -- zero-extend `reg16/mem16' to `reg32'
12817
12818   * `movzx' -- zero-extend `reg16/mem16' to `reg64' (x86-64 only).
12819
12820are called `movsbw/movsxb/movsx', `movsbl/movsxb/movsx',
12821`movsbq/movsxb/movsx', `movswl/movsxw', `movswq/movsxw',
12822`movslq/movsxl', `movzbw/movzxb/movzx', `movzbl/movzxb/movzx',
12823`movzbq/movzxb/movzx', `movzwl/movzxw' and `movzwq/movzxw' in AT&T
12824syntax.
12825
12826   Far call/jump instructions are `lcall' and `ljmp' in AT&T syntax,
12827but are `call far' and `jump far' in Intel convention.
12828
128299.16.4.2 AT&T Mnemonic versus Intel Mnemonic
12830............................................
12831
12832`as' supports assembly using Intel mnemonic.  `.intel_mnemonic' selects
12833Intel mnemonic with Intel syntax, and `.att_mnemonic' switches back to
12834the usual AT&T mnemonic with AT&T syntax for compatibility with the
12835output of `gcc'.  Several x87 instructions, `fadd', `fdiv', `fdivp',
12836`fdivr', `fdivrp', `fmul', `fsub', `fsubp', `fsubr' and `fsubrp',  are
12837implemented in AT&T System V/386 assembler with different mnemonics
12838from those in Intel IA32 specification.  `gcc' generates those
12839instructions with AT&T mnemonic.
12840
12841   * `movslq' with AT&T mnemonic only accepts 64-bit destination
12842     register.  `movsxd' should be used to encode 16-bit or 32-bit
12843     destination register with both AT&T and Intel mnemonics.
12844
12845
12846File: as.info,  Node: i386-Regs,  Next: i386-Prefixes,  Prev: i386-Mnemonics,  Up: i386-Dependent
12847
128489.16.5 Register Naming
12849----------------------
12850
12851Register operands are always prefixed with `%'.  The 80386 registers
12852consist of
12853
12854   * the 8 32-bit registers `%eax' (the accumulator), `%ebx', `%ecx',
12855     `%edx', `%edi', `%esi', `%ebp' (the frame pointer), and `%esp'
12856     (the stack pointer).
12857
12858   * the 8 16-bit low-ends of these: `%ax', `%bx', `%cx', `%dx', `%di',
12859     `%si', `%bp', and `%sp'.
12860
12861   * the 8 8-bit registers: `%ah', `%al', `%bh', `%bl', `%ch', `%cl',
12862     `%dh', and `%dl' (These are the high-bytes and low-bytes of `%ax',
12863     `%bx', `%cx', and `%dx')
12864
12865   * the 6 section registers `%cs' (code section), `%ds' (data
12866     section), `%ss' (stack section), `%es', `%fs', and `%gs'.
12867
12868   * the 5 processor control registers `%cr0', `%cr2', `%cr3', `%cr4',
12869     and `%cr8'.
12870
12871   * the 6 debug registers `%db0', `%db1', `%db2', `%db3', `%db6', and
12872     `%db7'.
12873
12874   * the 2 test registers `%tr6' and `%tr7'.
12875
12876   * the 8 floating point register stack `%st' or equivalently
12877     `%st(0)', `%st(1)', `%st(2)', `%st(3)', `%st(4)', `%st(5)',
12878     `%st(6)', and `%st(7)'.  These registers are overloaded by 8 MMX
12879     registers `%mm0', `%mm1', `%mm2', `%mm3', `%mm4', `%mm5', `%mm6'
12880     and `%mm7'.
12881
12882   * the 8 128-bit SSE registers registers `%xmm0', `%xmm1', `%xmm2',
12883     `%xmm3', `%xmm4', `%xmm5', `%xmm6' and `%xmm7'.
12884
12885   The AMD x86-64 architecture extends the register set by:
12886
12887   * enhancing the 8 32-bit registers to 64-bit: `%rax' (the
12888     accumulator), `%rbx', `%rcx', `%rdx', `%rdi', `%rsi', `%rbp' (the
12889     frame pointer), `%rsp' (the stack pointer)
12890
12891   * the 8 extended registers `%r8'-`%r15'.
12892
12893   * the 8 32-bit low ends of the extended registers: `%r8d'-`%r15d'.
12894
12895   * the 8 16-bit low ends of the extended registers: `%r8w'-`%r15w'.
12896
12897   * the 8 8-bit low ends of the extended registers: `%r8b'-`%r15b'.
12898
12899   * the 4 8-bit registers: `%sil', `%dil', `%bpl', `%spl'.
12900
12901   * the 8 debug registers: `%db8'-`%db15'.
12902
12903   * the 8 128-bit SSE registers: `%xmm8'-`%xmm15'.
12904
12905   With the AVX extensions more registers were made available:
12906
12907   * the 16 256-bit SSE `%ymm0'-`%ymm15' (only the first 8 available in
12908     32-bit mode).  The bottom 128 bits are overlaid with the
12909     `xmm0'-`xmm15' registers.
12910
12911
12912   The AVX512 extensions added the following registers:
12913
12914   * the 32 512-bit registers `%zmm0'-`%zmm31' (only the first 8
12915     available in 32-bit mode).  The bottom 128 bits are overlaid with
12916     the `%xmm0'-`%xmm31' registers and the first 256 bits are overlaid
12917     with the `%ymm0'-`%ymm31' registers.
12918
12919   * the 8 mask registers `%k0'-`%k7'.
12920
12921
12922
12923File: as.info,  Node: i386-Prefixes,  Next: i386-Memory,  Prev: i386-Regs,  Up: i386-Dependent
12924
129259.16.6 Instruction Prefixes
12926---------------------------
12927
12928Instruction prefixes are used to modify the following instruction.  They
12929are used to repeat string instructions, to provide section overrides, to
12930perform bus lock operations, and to change operand and address sizes.
12931(Most instructions that normally operate on 32-bit operands will use
1293216-bit operands if the instruction has an "operand size" prefix.)
12933Instruction prefixes are best written on the same line as the
12934instruction they act upon. For example, the `scas' (scan string)
12935instruction is repeated with:
12936
12937             repne scas %es:(%edi),%al
12938
12939   You may also place prefixes on the lines immediately preceding the
12940instruction, but this circumvents checks that `as' does with prefixes,
12941and will not work with all prefixes.
12942
12943   Here is a list of instruction prefixes:
12944
12945   * Section override prefixes `cs', `ds', `ss', `es', `fs', `gs'.
12946     These are automatically added by specifying using the
12947     SECTION:MEMORY-OPERAND form for memory references.
12948
12949   * Operand/Address size prefixes `data16' and `addr16' change 32-bit
12950     operands/addresses into 16-bit operands/addresses, while `data32'
12951     and `addr32' change 16-bit ones (in a `.code16' section) into
12952     32-bit operands/addresses.  These prefixes _must_ appear on the
12953     same line of code as the instruction they modify. For example, in
12954     a 16-bit `.code16' section, you might write:
12955
12956                  addr32 jmpl *(%ebx)
12957
12958   * The bus lock prefix `lock' inhibits interrupts during execution of
12959     the instruction it precedes.  (This is only valid with certain
12960     instructions; see a 80386 manual for details).
12961
12962   * The wait for coprocessor prefix `wait' waits for the coprocessor to
12963     complete the current instruction.  This should never be needed for
12964     the 80386/80387 combination.
12965
12966   * The `rep', `repe', and `repne' prefixes are added to string
12967     instructions to make them repeat `%ecx' times (`%cx' times if the
12968     current address size is 16-bits).
12969
12970   * The `rex' family of prefixes is used by x86-64 to encode
12971     extensions to i386 instruction set.  The `rex' prefix has four
12972     bits -- an operand size overwrite (`64') used to change operand
12973     size from 32-bit to 64-bit and X, Y and Z extensions bits used to
12974     extend the register set.
12975
12976     You may write the `rex' prefixes directly. The `rex64xyz'
12977     instruction emits `rex' prefix with all the bits set.  By omitting
12978     the `64', `x', `y' or `z' you may write other prefixes as well.
12979     Normally, there is no need to write the prefixes explicitly, since
12980     gas will automatically generate them based on the instruction
12981     operands.
12982
12983
12984File: as.info,  Node: i386-Memory,  Next: i386-Jumps,  Prev: i386-Prefixes,  Up: i386-Dependent
12985
129869.16.7 Memory References
12987------------------------
12988
12989An Intel syntax indirect memory reference of the form
12990
12991     SECTION:[BASE + INDEX*SCALE + DISP]
12992
12993is translated into the AT&T syntax
12994
12995     SECTION:DISP(BASE, INDEX, SCALE)
12996
12997where BASE and INDEX are the optional 32-bit base and index registers,
12998DISP is the optional displacement, and SCALE, taking the values 1, 2,
129994, and 8, multiplies INDEX to calculate the address of the operand.  If
13000no SCALE is specified, SCALE is taken to be 1.  SECTION specifies the
13001optional section register for the memory operand, and may override the
13002default section register (see a 80386 manual for section register
13003defaults). Note that section overrides in AT&T syntax _must_ be
13004preceded by a `%'.  If you specify a section override which coincides
13005with the default section register, `as' does _not_ output any section
13006register override prefixes to assemble the given instruction.  Thus,
13007section overrides can be specified to emphasize which section register
13008is used for a given memory operand.
13009
13010   Here are some examples of Intel and AT&T style memory references:
13011
13012AT&T: `-4(%ebp)', Intel:  `[ebp - 4]'
13013     BASE is `%ebp'; DISP is `-4'. SECTION is missing, and the default
13014     section is used (`%ss' for addressing with `%ebp' as the base
13015     register).  INDEX, SCALE are both missing.
13016
13017AT&T: `foo(,%eax,4)', Intel: `[foo + eax*4]'
13018     INDEX is `%eax' (scaled by a SCALE 4); DISP is `foo'.  All other
13019     fields are missing.  The section register here defaults to `%ds'.
13020
13021AT&T: `foo(,1)'; Intel `[foo]'
13022     This uses the value pointed to by `foo' as a memory operand.  Note
13023     that BASE and INDEX are both missing, but there is only _one_ `,'.
13024     This is a syntactic exception.
13025
13026AT&T: `%gs:foo'; Intel `gs:foo'
13027     This selects the contents of the variable `foo' with section
13028     register SECTION being `%gs'.
13029
13030   Absolute (as opposed to PC relative) call and jump operands must be
13031prefixed with `*'.  If no `*' is specified, `as' always chooses PC
13032relative addressing for jump/call labels.
13033
13034   Any instruction that has a memory operand, but no register operand,
13035_must_ specify its size (byte, word, long, or quadruple) with an
13036instruction mnemonic suffix (`b', `w', `l' or `q', respectively).
13037
13038   The x86-64 architecture adds an RIP (instruction pointer relative)
13039addressing.  This addressing mode is specified by using `rip' as a base
13040register.  Only constant offsets are valid. For example:
13041
13042AT&T: `1234(%rip)', Intel: `[rip + 1234]'
13043     Points to the address 1234 bytes past the end of the current
13044     instruction.
13045
13046AT&T: `symbol(%rip)', Intel: `[rip + symbol]'
13047     Points to the `symbol' in RIP relative way, this is shorter than
13048     the default absolute addressing.
13049
13050   Other addressing modes remain unchanged in x86-64 architecture,
13051except registers used are 64-bit instead of 32-bit.
13052
13053
13054File: as.info,  Node: i386-Jumps,  Next: i386-Float,  Prev: i386-Memory,  Up: i386-Dependent
13055
130569.16.8 Handling of Jump Instructions
13057------------------------------------
13058
13059Jump instructions are always optimized to use the smallest possible
13060displacements.  This is accomplished by using byte (8-bit) displacement
13061jumps whenever the target is sufficiently close.  If a byte displacement
13062is insufficient a long displacement is used.  We do not support word
13063(16-bit) displacement jumps in 32-bit mode (i.e. prefixing the jump
13064instruction with the `data16' instruction prefix), since the 80386
13065insists upon masking `%eip' to 16 bits after the word displacement is
13066added. (See also *note i386-Arch::)
13067
13068   Note that the `jcxz', `jecxz', `loop', `loopz', `loope', `loopnz'
13069and `loopne' instructions only come in byte displacements, so that if
13070you use these instructions (`gcc' does not use them) you may get an
13071error message (and incorrect code).  The AT&T 80386 assembler tries to
13072get around this problem by expanding `jcxz foo' to
13073
13074              jcxz cx_zero
13075              jmp cx_nonzero
13076     cx_zero: jmp foo
13077     cx_nonzero:
13078
13079
13080File: as.info,  Node: i386-Float,  Next: i386-SIMD,  Prev: i386-Jumps,  Up: i386-Dependent
13081
130829.16.9 Floating Point
13083---------------------
13084
13085All 80387 floating point types except packed BCD are supported.  (BCD
13086support may be added without much difficulty).  These data types are
1308716-, 32-, and 64- bit integers, and single (32-bit), double (64-bit),
13088and extended (80-bit) precision floating point.  Each supported type
13089has an instruction mnemonic suffix and a constructor associated with
13090it.  Instruction mnemonic suffixes specify the operand's data type.
13091Constructors build these data types into memory.
13092
13093   * Floating point constructors are `.float' or `.single', `.double',
13094     `.tfloat', `.hfloat', and `.bfloat16' for 32-, 64-, 80-, and
13095     16-bit (two flavors) formats respectively.  The former three
13096     correspond to instruction mnemonic suffixes `s', `l', and `t'.
13097     `t' stands for 80-bit (ten byte) real.  The 80387 only supports
13098     this format via the `fldt' (load 80-bit real to stack top) and
13099     `fstpt' (store 80-bit real and pop stack) instructions.
13100
13101   * Integer constructors are `.word', `.long' or `.int', and `.quad'
13102     for the 16-, 32-, and 64-bit integer formats.  The corresponding
13103     instruction mnemonic suffixes are `s' (short), `l' (long), and `q'
13104     (quad).  As with the 80-bit real format, the 64-bit `q' format is
13105     only present in the `fildq' (load quad integer to stack top) and
13106     `fistpq' (store quad integer and pop stack) instructions.
13107
13108   Register to register operations should not use instruction mnemonic
13109suffixes.  `fstl %st, %st(1)' will give a warning, and be assembled as
13110if you wrote `fst %st, %st(1)', since all register to register
13111operations use 80-bit floating point operands. (Contrast this with
13112`fstl %st, mem', which converts `%st' from 80-bit to 64-bit floating
13113point format, then stores the result in the 4 byte location `mem')
13114
13115
13116File: as.info,  Node: i386-SIMD,  Next: i386-LWP,  Prev: i386-Float,  Up: i386-Dependent
13117
131189.16.10 Intel's MMX and AMD's 3DNow! SIMD Operations
13119----------------------------------------------------
13120
13121`as' supports Intel's MMX instruction set (SIMD instructions for
13122integer data), available on Intel's Pentium MMX processors and Pentium
13123II processors, AMD's K6 and K6-2 processors, Cyrix' M2 processor, and
13124probably others.  It also supports AMD's 3DNow!  instruction set (SIMD
13125instructions for 32-bit floating point data) available on AMD's K6-2
13126processor and possibly others in the future.
13127
13128   Currently, `as' does not support Intel's floating point SIMD, Katmai
13129(KNI).
13130
13131   The eight 64-bit MMX operands, also used by 3DNow!, are called
13132`%mm0', `%mm1', ... `%mm7'.  They contain eight 8-bit integers, four
1313316-bit integers, two 32-bit integers, one 64-bit integer, or two 32-bit
13134floating point values.  The MMX registers cannot be used at the same
13135time as the floating point stack.
13136
13137   See Intel and AMD documentation, keeping in mind that the operand
13138order in instructions is reversed from the Intel syntax.
13139
13140
13141File: as.info,  Node: i386-LWP,  Next: i386-BMI,  Prev: i386-SIMD,  Up: i386-Dependent
13142
131439.16.11 AMD's Lightweight Profiling Instructions
13144------------------------------------------------
13145
13146`as' supports AMD's Lightweight Profiling (LWP) instruction set,
13147available on AMD's Family 15h (Orochi) processors.
13148
13149   LWP enables applications to collect and manage performance data, and
13150react to performance events.  The collection of performance data
13151requires no context switches.  LWP runs in the context of a thread and
13152so several counters can be used independently across multiple threads.
13153LWP can be used in both 64-bit and legacy 32-bit modes.
13154
13155   For detailed information on the LWP instruction set, see the `AMD
13156Lightweight Profiling Specification' available at Lightweight Profiling
13157Specification (http://developer.amd.com/cpu/LWP).
13158
13159
13160File: as.info,  Node: i386-BMI,  Next: i386-TBM,  Prev: i386-LWP,  Up: i386-Dependent
13161
131629.16.12 Bit Manipulation Instructions
13163-------------------------------------
13164
13165`as' supports the Bit Manipulation (BMI) instruction set.
13166
13167   BMI instructions provide several instructions implementing individual
13168bit manipulation operations such as isolation, masking, setting, or
13169resetting.
13170
13171
13172File: as.info,  Node: i386-TBM,  Next: i386-16bit,  Prev: i386-BMI,  Up: i386-Dependent
13173
131749.16.13 AMD's Trailing Bit Manipulation Instructions
13175----------------------------------------------------
13176
13177`as' supports AMD's Trailing Bit Manipulation (TBM) instruction set,
13178available on AMD's BDVER2 processors (Trinity and Viperfish).
13179
13180   TBM instructions provide instructions implementing individual bit
13181manipulation operations such as isolating, masking, setting, resetting,
13182complementing, and operations on trailing zeros and ones.
13183
13184
13185File: as.info,  Node: i386-16bit,  Next: i386-Arch,  Prev: i386-TBM,  Up: i386-Dependent
13186
131879.16.14 Writing 16-bit Code
13188---------------------------
13189
13190While `as' normally writes only "pure" 32-bit i386 code or 64-bit
13191x86-64 code depending on the default configuration, it also supports
13192writing code to run in real mode or in 16-bit protected mode code
13193segments.  To do this, put a `.code16' or `.code16gcc' directive before
13194the assembly language instructions to be run in 16-bit mode.  You can
13195switch `as' to writing 32-bit code with the `.code32' directive or
1319664-bit code with the `.code64' directive.
13197
13198   `.code16gcc' provides experimental support for generating 16-bit
13199code from gcc, and differs from `.code16' in that `call', `ret',
13200`enter', `leave', `push', `pop', `pusha', `popa', `pushf', and `popf'
13201instructions default to 32-bit size.  This is so that the stack pointer
13202is manipulated in the same way over function calls, allowing access to
13203function parameters at the same stack offsets as in 32-bit mode.
13204`.code16gcc' also automatically adds address size prefixes where
13205necessary to use the 32-bit addressing modes that gcc generates.
13206
13207   The code which `as' generates in 16-bit mode will not necessarily
13208run on a 16-bit pre-80386 processor.  To write code that runs on such a
13209processor, you must refrain from using _any_ 32-bit constructs which
13210require `as' to output address or operand size prefixes.
13211
13212   Note that writing 16-bit code instructions by explicitly specifying a
13213prefix or an instruction mnemonic suffix within a 32-bit code section
13214generates different machine instructions than those generated for a
1321516-bit code segment.  In a 32-bit code section, the following code
13216generates the machine opcode bytes `66 6a 04', which pushes the value
13217`4' onto the stack, decrementing `%esp' by 2.
13218
13219             pushw $4
13220
13221   The same code in a 16-bit code section would generate the machine
13222opcode bytes `6a 04' (i.e., without the operand size prefix), which is
13223correct since the processor default operand size is assumed to be 16
13224bits in a 16-bit code section.
13225
13226
13227File: as.info,  Node: i386-Arch,  Next: i386-ISA,  Prev: i386-16bit,  Up: i386-Dependent
13228
132299.16.15 Specifying CPU Architecture
13230-----------------------------------
13231
13232`as' may be told to assemble for a particular CPU (sub-)architecture
13233with the `.arch CPU_TYPE' directive.  This directive enables a warning
13234when gas detects an instruction that is not supported on the CPU
13235specified.  The choices for CPU_TYPE are:
13236
13237`default'      `push'         `pop'
13238`i8086'        `i186'         `i286'         `i386'
13239`i486'         `i586'         `i686'         `pentium'
13240`pentiumpro'   `pentiumii'    `pentiumiii'   `pentium4'
13241`prescott'     `nocona'       `core'         `core2'
13242`corei7'       `iamcu'
13243`k6'           `k6_2'         `athlon'       `k8'
13244`amdfam10'     `bdver1'       `bdver2'       `bdver3'
13245`bdver4'       `znver1'       `znver2'       `znver3'
13246`btver1'       `btver2'       `generic32'    `generic64'
13247`.cmov'        `.fxsr'        `.mmx'
13248`.sse'         `.sse2'        `.sse3'        `.sse4a'
13249`.ssse3'       `.sse4.1'      `.sse4.2'      `.sse4'
13250`.avx'         `.vmx'         `.smx'         `.ept'
13251`.clflush'     `.movbe'       `.xsave'       `.xsaveopt'
13252`.aes'         `.pclmul'      `.fma'         `.fsgsbase'
13253`.rdrnd'       `.f16c'        `.avx2'        `.bmi2'
13254`.lzcnt'       `.popcnt'      `.invpcid'     `.vmfunc'
13255`.hle'
13256`.rtm'         `.adx'         `.rdseed'      `.prfchw'
13257`.smap'        `.mpx'         `.sha'         `.prefetchwt1'
13258`.clflushopt'  `.xsavec'      `.xsaves'      `.se1'
13259`.avx512f'     `.avx512cd'    `.avx512er'    `.avx512pf'
13260`.avx512vl'    `.avx512bw'    `.avx512dq'    `.avx512ifma'
13261`.avx512vbmi'  `.avx512_4fmaps'`.avx512_4vnniw'
13262`.avx512_vpopcntdq'`.avx512_vbmi2'`.avx512_vnni'
13263`.avx512_bitalg'`.avx512_bf16' `.avx512_vp2intersect'
13264`.tdx'         `.avx_vnni'    `.avx512_fp16'
13265`.clwb'        `.rdpid'       `.ptwrite'     `.ibt'
13266`.wbnoinvd'    `.pconfig'     `.waitpkg'     `.cldemote'
13267`.shstk'       `.gfni'        `.vaes'        `.vpclmulqdq'
13268`.movdiri'     `.movdir64b'   `.enqcmd'      `.tsxldtrk'
13269`.amx_int8'    `.amx_bf16'    `.amx_tile'
13270`.kl'          `.widekl'      `.uintr'       `.hreset'
13271`.3dnow'       `.3dnowa'      `.sse4a'       `.sse5'
13272`.syscall'     `.rdtscp'      `.svme'
13273`.lwp'         `.fma4'        `.xop'         `.cx16'
13274`.padlock'     `.clzero'      `.mwaitx'      `.rdpru'
13275`.mcommit'     `.sev_es'      `.snp'         `.invlpgb'
13276`.tlbsync'
13277
13278   Apart from the warning, there are only two other effects on `as'
13279operation;  Firstly, if you specify a CPU other than `i486', then shift
13280by one instructions such as `sarl $1, %eax' will automatically use a
13281two byte opcode sequence.  The larger three byte opcode sequence is
13282used on the 486 (and when no architecture is specified) because it
13283executes faster on the 486.  Note that you can explicitly request the
13284two byte opcode by writing `sarl %eax'.  Secondly, if you specify
13285`i8086', `i186', or `i286', _and_ `.code16' or `.code16gcc' then byte
13286offset conditional jumps will be promoted when necessary to a two
13287instruction sequence consisting of a conditional jump of the opposite
13288sense around an unconditional jump to the target.
13289
13290   Following the CPU architecture (but not a sub-architecture, which
13291are those starting with a dot), you may specify `jumps' or `nojumps' to
13292control automatic promotion of conditional jumps. `jumps' is the
13293default, and enables jump promotion;  All external jumps will be of the
13294long variety, and file-local jumps will be promoted as necessary.
13295(*note i386-Jumps::)  `nojumps' leaves external conditional jumps as
13296byte offset jumps, and warns about file-local conditional jumps that
13297`as' promotes.  Unconditional jumps are treated as for `jumps'.
13298
13299   For example
13300
13301      .arch i8086,nojumps
13302
13303
13304File: as.info,  Node: i386-ISA,  Next: i386-Bugs,  Prev: i386-Arch,  Up: i386-Dependent
13305
133069.16.16 AMD64 ISA vs. Intel64 ISA
13307---------------------------------
13308
13309There are some discrepancies between AMD64 and Intel64 ISAs.
13310
13311   * For `movsxd' with 16-bit destination register, AMD64 supports
13312     32-bit source operand and Intel64 supports 16-bit source operand.
13313
13314   * For far branches (with explicit memory operand), both ISAs support
13315     32- and 16-bit operand size.  Intel64 additionally supports 64-bit
13316     operand size, encoded as `ljmpq' and `lcallq' in AT&T syntax and
13317     with an explicit `tbyte ptr' operand size specifier in Intel
13318     syntax.
13319
13320   * `lfs', `lgs', and `lss' similarly allow for 16- and 32-bit operand
13321     size (32- and 48-bit memory operand) in both ISAs, while Intel64
13322     additionally supports 64-bit operand sise (80-bit memory operands).
13323
13324
13325
13326File: as.info,  Node: i386-Bugs,  Next: i386-Notes,  Prev: i386-ISA,  Up: i386-Dependent
13327
133289.16.17 AT&T Syntax bugs
13329------------------------
13330
13331The UnixWare assembler, and probably other AT&T derived ix86 Unix
13332assemblers, generate floating point instructions with reversed source
13333and destination registers in certain cases.  Unfortunately, gcc and
13334possibly many other programs use this reversed syntax, so we're stuck
13335with it.
13336
13337   For example
13338
13339             fsub %st,%st(3)
13340   results in `%st(3)' being updated to `%st - %st(3)' rather than the
13341expected `%st(3) - %st'.  This happens with all the non-commutative
13342arithmetic floating point operations with two register operands where
13343the source register is `%st' and the destination register is `%st(i)'.
13344
13345
13346File: as.info,  Node: i386-Notes,  Prev: i386-Bugs,  Up: i386-Dependent
13347
133489.16.18 Notes
13349-------------
13350
13351There is some trickery concerning the `mul' and `imul' instructions
13352that deserves mention.  The 16-, 32-, 64- and 128-bit expanding
13353multiplies (base opcode `0xf6'; extension 4 for `mul' and 5 for `imul')
13354can be output only in the one operand form.  Thus, `imul %ebx, %eax'
13355does _not_ select the expanding multiply; the expanding multiply would
13356clobber the `%edx' register, and this would confuse `gcc' output.  Use
13357`imul %ebx' to get the 64-bit product in `%edx:%eax'.
13358
13359   We have added a two operand form of `imul' when the first operand is
13360an immediate mode expression and the second operand is a register.
13361This is just a shorthand, so that, multiplying `%eax' by 69, for
13362example, can be done with `imul $69, %eax' rather than `imul $69, %eax,
13363%eax'.
13364
13365
13366File: as.info,  Node: IA-64-Dependent,  Next: IP2K-Dependent,  Prev: i386-Dependent,  Up: Machine Dependencies
13367
133689.17 IA-64 Dependent Features
13369=============================
13370
13371* Menu:
13372
13373* IA-64 Options::              Options
13374* IA-64 Syntax::               Syntax
13375* IA-64 Opcodes::              Opcodes
13376
13377
13378File: as.info,  Node: IA-64 Options,  Next: IA-64 Syntax,  Up: IA-64-Dependent
13379
133809.17.1 Options
13381--------------
13382
13383`-mconstant-gp'
13384     This option instructs the assembler to mark the resulting object
13385     file as using the "constant GP" model.  With this model, it is
13386     assumed that the entire program uses a single global pointer (GP)
13387     value.  Note that this option does not in any fashion affect the
13388     machine code emitted by the assembler.  All it does is turn on the
13389     EF_IA_64_CONS_GP flag in the ELF file header.
13390
13391`-mauto-pic'
13392     This option instructs the assembler to mark the resulting object
13393     file as using the "constant GP without function descriptor" data
13394     model.  This model is like the "constant GP" model, except that it
13395     additionally does away with function descriptors.  What this means
13396     is that the address of a function refers directly to the
13397     function's code entry-point.  Normally, such an address would
13398     refer to a function descriptor, which contains both the code
13399     entry-point and the GP-value needed by the function.  Note that
13400     this option does not in any fashion affect the machine code
13401     emitted by the assembler.  All it does is turn on the
13402     EF_IA_64_NOFUNCDESC_CONS_GP flag in the ELF file header.
13403
13404`-milp32'
13405`-milp64'
13406`-mlp64'
13407`-mp64'
13408     These options select the data model.  The assembler defaults to
13409     `-mlp64' (LP64 data model).
13410
13411`-mle'
13412`-mbe'
13413     These options select the byte order.  The `-mle' option selects
13414     little-endian byte order (default) and `-mbe' selects big-endian
13415     byte order.  Note that IA-64 machine code always uses
13416     little-endian byte order.
13417
13418`-mtune=itanium1'
13419`-mtune=itanium2'
13420     Tune for a particular IA-64 CPU, ITANIUM1 or ITANIUM2. The default
13421     is ITANIUM2.
13422
13423`-munwind-check=warning'
13424`-munwind-check=error'
13425     These options control what the assembler will do when performing
13426     consistency checks on unwind directives.  `-munwind-check=warning'
13427     will make the assembler issue a warning when an unwind directive
13428     check fails.  This is the default.  `-munwind-check=error' will
13429     make the assembler issue an error when an unwind directive check
13430     fails.
13431
13432`-mhint.b=ok'
13433`-mhint.b=warning'
13434`-mhint.b=error'
13435     These options control what the assembler will do when the `hint.b'
13436     instruction is used.  `-mhint.b=ok' will make the assembler accept
13437     `hint.b'.  `-mint.b=warning' will make the assembler issue a
13438     warning when `hint.b' is used.  `-mhint.b=error' will make the
13439     assembler treat `hint.b' as an error, which is the default.
13440
13441`-x'
13442`-xexplicit'
13443     These options turn on dependency violation checking.
13444
13445`-xauto'
13446     This option instructs the assembler to automatically insert stop
13447     bits where necessary to remove dependency violations.  This is the
13448     default mode.
13449
13450`-xnone'
13451     This option turns off dependency violation checking.
13452
13453`-xdebug'
13454     This turns on debug output intended to help tracking down bugs in
13455     the dependency violation checker.
13456
13457`-xdebugn'
13458     This is a shortcut for -xnone -xdebug.
13459
13460`-xdebugx'
13461     This is a shortcut for -xexplicit -xdebug.
13462
13463
13464
13465File: as.info,  Node: IA-64 Syntax,  Next: IA-64 Opcodes,  Prev: IA-64 Options,  Up: IA-64-Dependent
13466
134679.17.2 Syntax
13468-------------
13469
13470The assembler syntax closely follows the IA-64 Assembly Language
13471Reference Guide.
13472
13473* Menu:
13474
13475* IA-64-Chars::                Special Characters
13476* IA-64-Regs::                 Register Names
13477* IA-64-Bits::                 Bit Names
13478* IA-64-Relocs::               Relocations
13479
13480
13481File: as.info,  Node: IA-64-Chars,  Next: IA-64-Regs,  Up: IA-64 Syntax
13482
134839.17.2.1 Special Characters
13484...........................
13485
13486`//' is the line comment token.
13487
13488   `;' can be used instead of a newline to separate statements.
13489
13490
13491File: as.info,  Node: IA-64-Regs,  Next: IA-64-Bits,  Prev: IA-64-Chars,  Up: IA-64 Syntax
13492
134939.17.2.2 Register Names
13494.......................
13495
13496The 128 integer registers are referred to as `rN'.  The 128
13497floating-point registers are referred to as `fN'.  The 128 application
13498registers are referred to as `arN'.  The 128 control registers are
13499referred to as `crN'.  The 64 one-bit predicate registers are referred
13500to as `pN'.  The 8 branch registers are referred to as `bN'.  In
13501addition, the assembler defines a number of aliases: `gp' (`r1'), `sp'
13502(`r12'), `rp' (`b0'), `ret0' (`r8'), `ret1' (`r9'), `ret2' (`r10'),
13503`ret3' (`r9'), `fargN' (`f8+N'), and `fretN' (`f8+N').
13504
13505   For convenience, the assembler also defines aliases for all named
13506application and control registers.  For example, `ar.bsp' refers to the
13507register backing store pointer (`ar17').  Similarly, `cr.eoi' refers to
13508the end-of-interrupt register (`cr67').
13509
13510
13511File: as.info,  Node: IA-64-Bits,  Next: IA-64-Relocs,  Prev: IA-64-Regs,  Up: IA-64 Syntax
13512
135139.17.2.3 IA-64 Processor-Status-Register (PSR) Bit Names
13514........................................................
13515
13516The assembler defines bit masks for each of the bits in the IA-64
13517processor status register.  For example, `psr.ic' corresponds to a
13518value of 0x2000.  These masks are primarily intended for use with the
13519`ssm'/`sum' and `rsm'/`rum' instructions, but they can be used anywhere
13520else where an integer constant is expected.
13521
13522
13523File: as.info,  Node: IA-64-Relocs,  Prev: IA-64-Bits,  Up: IA-64 Syntax
13524
135259.17.2.4 Relocations
13526....................
13527
13528In addition to the standard IA-64 relocations, the following
13529relocations are implemented by `as':
13530
13531`@slotcount(V)'
13532     Convert the address offset V into a slot count.  This pseudo
13533     function is available only on VMS.  The expression V must be known
13534     at assembly time: it can't reference undefined symbols or symbols
13535     in different sections.
13536
13537
13538File: as.info,  Node: IA-64 Opcodes,  Prev: IA-64 Syntax,  Up: IA-64-Dependent
13539
135409.17.3 Opcodes
13541--------------
13542
13543For detailed information on the IA-64 machine instruction set, see the
13544IA-64 Architecture Handbook
13545(http://developer.intel.com/design/itanium/arch_spec.htm).
13546
13547
13548File: as.info,  Node: IP2K-Dependent,  Next: LM32-Dependent,  Prev: IA-64-Dependent,  Up: Machine Dependencies
13549
135509.18 IP2K Dependent Features
13551============================
13552
13553* Menu:
13554
13555* IP2K-Opts::                   IP2K Options
13556* IP2K-Syntax::                 IP2K Syntax
13557
13558
13559File: as.info,  Node: IP2K-Opts,  Next: IP2K-Syntax,  Up: IP2K-Dependent
13560
135619.18.1 IP2K Options
13562-------------------
13563
13564The Ubicom IP2K version of `as' has a few machine dependent options:
13565
13566`-mip2022ext'
13567     `as' can assemble the extended IP2022 instructions, but it will
13568     only do so if this is specifically allowed via this command line
13569     option.
13570
13571`-mip2022'
13572     This option restores the assembler's default behaviour of not
13573     permitting the extended IP2022 instructions to be assembled.
13574
13575
13576
13577File: as.info,  Node: IP2K-Syntax,  Prev: IP2K-Opts,  Up: IP2K-Dependent
13578
135799.18.2 IP2K Syntax
13580------------------
13581
13582* Menu:
13583
13584* IP2K-Chars::                Special Characters
13585
13586
13587File: as.info,  Node: IP2K-Chars,  Up: IP2K-Syntax
13588
135899.18.2.1 Special Characters
13590...........................
13591
13592The presence of a `;' on a line indicates the start of a comment that
13593extends to the end of the current line.
13594
13595   If a `#' appears as the first character of a line, the whole line is
13596treated as a comment, but in this case the line can also be a logical
13597line number directive (*note Comments::) or a preprocessor control
13598command (*note Preprocessing::).
13599
13600   The IP2K assembler does not currently support a line separator
13601character.
13602
13603
13604File: as.info,  Node: LM32-Dependent,  Next: M32C-Dependent,  Prev: IP2K-Dependent,  Up: Machine Dependencies
13605
136069.19 LM32 Dependent Features
13607============================
13608
13609* Menu:
13610
13611* LM32 Options::              Options
13612* LM32 Syntax::               Syntax
13613* LM32 Opcodes::              Opcodes
13614
13615
13616File: as.info,  Node: LM32 Options,  Next: LM32 Syntax,  Up: LM32-Dependent
13617
136189.19.1 Options
13619--------------
13620
13621`-mmultiply-enabled'
13622     Enable multiply instructions.
13623
13624`-mdivide-enabled'
13625     Enable divide instructions.
13626
13627`-mbarrel-shift-enabled'
13628     Enable barrel-shift instructions.
13629
13630`-msign-extend-enabled'
13631     Enable sign extend instructions.
13632
13633`-muser-enabled'
13634     Enable user defined instructions.
13635
13636`-micache-enabled'
13637     Enable instruction cache related CSRs.
13638
13639`-mdcache-enabled'
13640     Enable data cache related CSRs.
13641
13642`-mbreak-enabled'
13643     Enable break instructions.
13644
13645`-mall-enabled'
13646     Enable all instructions and CSRs.
13647
13648
13649
13650File: as.info,  Node: LM32 Syntax,  Next: LM32 Opcodes,  Prev: LM32 Options,  Up: LM32-Dependent
13651
136529.19.2 Syntax
13653-------------
13654
13655* Menu:
13656
13657* LM32-Regs::                 Register Names
13658* LM32-Modifiers::            Relocatable Expression Modifiers
13659* LM32-Chars::                Special Characters
13660
13661
13662File: as.info,  Node: LM32-Regs,  Next: LM32-Modifiers,  Up: LM32 Syntax
13663
136649.19.2.1 Register Names
13665.......................
13666
13667LM32 has 32 x 32-bit general purpose registers `r0', `r1', ... `r31'.
13668
13669   The following aliases are defined: `gp' - `r26', `fp' - `r27', `sp'
13670- `r28', `ra' - `r29', `ea' - `r30', `ba' - `r31'.
13671
13672   LM32 has the following Control and Status Registers (CSRs).
13673
13674`IE'
13675     Interrupt enable.
13676
13677`IM'
13678     Interrupt mask.
13679
13680`IP'
13681     Interrupt pending.
13682
13683`ICC'
13684     Instruction cache control.
13685
13686`DCC'
13687     Data cache control.
13688
13689`CC'
13690     Cycle counter.
13691
13692`CFG'
13693     Configuration.
13694
13695`EBA'
13696     Exception base address.
13697
13698`DC'
13699     Debug control.
13700
13701`DEBA'
13702     Debug exception base address.
13703
13704`JTX'
13705     JTAG transmit.
13706
13707`JRX'
13708     JTAG receive.
13709
13710`BP0'
13711     Breakpoint 0.
13712
13713`BP1'
13714     Breakpoint 1.
13715
13716`BP2'
13717     Breakpoint 2.
13718
13719`BP3'
13720     Breakpoint 3.
13721
13722`WP0'
13723     Watchpoint 0.
13724
13725`WP1'
13726     Watchpoint 1.
13727
13728`WP2'
13729     Watchpoint 2.
13730
13731`WP3'
13732     Watchpoint 3.
13733
13734
13735File: as.info,  Node: LM32-Modifiers,  Next: LM32-Chars,  Prev: LM32-Regs,  Up: LM32 Syntax
13736
137379.19.2.2 Relocatable Expression Modifiers
13738.........................................
13739
13740The assembler supports several modifiers when using relocatable
13741addresses in LM32 instruction operands.  The general syntax is the
13742following:
13743
13744     modifier(relocatable-expression)
13745
13746`lo'
13747     This modifier allows you to use bits 0 through 15 of an address
13748     expression as 16 bit relocatable expression.
13749
13750`hi'
13751     This modifier allows you to use bits 16 through 23 of an address
13752     expression as 16 bit relocatable expression.
13753
13754     For example
13755
13756          ori  r4, r4, lo(sym+10)
13757          orhi r4, r4, hi(sym+10)
13758
13759`gp'
13760     This modified creates a 16-bit relocatable expression that is the
13761     offset of the symbol from the global pointer.
13762
13763          mva r4, gp(sym)
13764
13765`got'
13766     This modifier places a symbol in the GOT and creates a 16-bit
13767     relocatable expression that is the offset into the GOT of this
13768     symbol.
13769
13770          lw r4, (gp+got(sym))
13771
13772`gotofflo16'
13773     This modifier allows you to use the bits 0 through 15 of an
13774     address which is an offset from the GOT.
13775
13776`gotoffhi16'
13777     This modifier allows you to use the bits 16 through 31 of an
13778     address which is an offset from the GOT.
13779
13780          orhi r4, r4, gotoffhi16(lsym)
13781          addi r4, r4, gotofflo16(lsym)
13782
13783
13784
13785File: as.info,  Node: LM32-Chars,  Prev: LM32-Modifiers,  Up: LM32 Syntax
13786
137879.19.2.3 Special Characters
13788...........................
13789
13790The presence of a `#' on a line indicates the start of a comment that
13791extends to the end of the current line.  Note that if a line starts
13792with a `#' character then it can also be a logical line number
13793directive (*note Comments::) or a preprocessor control command (*note
13794Preprocessing::).
13795
13796   A semicolon (`;') can be used to separate multiple statements on the
13797same line.
13798
13799
13800File: as.info,  Node: LM32 Opcodes,  Prev: LM32 Syntax,  Up: LM32-Dependent
13801
138029.19.3 Opcodes
13803--------------
13804
13805For detailed information on the LM32 machine instruction set, see
13806`http://www.latticesemi.com/products/intellectualproperty/ipcores/mico32/'.
13807
13808   `as' implements all the standard LM32 opcodes.
13809
13810
13811File: as.info,  Node: M32C-Dependent,  Next: M32R-Dependent,  Prev: LM32-Dependent,  Up: Machine Dependencies
13812
138139.20 M32C Dependent Features
13814============================
13815
13816   `as' can assemble code for several different members of the Renesas
13817M32C family.  Normally the default is to assemble code for the M16C
13818microprocessor.  The `-m32c' option may be used to change the default
13819to the M32C microprocessor.
13820
13821* Menu:
13822
13823* M32C-Opts::                   M32C Options
13824* M32C-Syntax::                 M32C Syntax
13825
13826
13827File: as.info,  Node: M32C-Opts,  Next: M32C-Syntax,  Up: M32C-Dependent
13828
138299.20.1 M32C Options
13830-------------------
13831
13832The Renesas M32C version of `as' has these machine-dependent options:
13833
13834`-m32c'
13835     Assemble M32C instructions.
13836
13837`-m16c'
13838     Assemble M16C instructions (default).
13839
13840`-relax'
13841     Enable support for link-time relaxations.
13842
13843`-h-tick-hex'
13844     Support H'00 style hex constants in addition to 0x00 style.
13845
13846
13847
13848File: as.info,  Node: M32C-Syntax,  Prev: M32C-Opts,  Up: M32C-Dependent
13849
138509.20.2 M32C Syntax
13851------------------
13852
13853* Menu:
13854
13855* M32C-Modifiers::              Symbolic Operand Modifiers
13856* M32C-Chars::                  Special Characters
13857
13858
13859File: as.info,  Node: M32C-Modifiers,  Next: M32C-Chars,  Up: M32C-Syntax
13860
138619.20.2.1 Symbolic Operand Modifiers
13862...................................
13863
13864The assembler supports several modifiers when using symbol addresses in
13865M32C instruction operands.  The general syntax is the following:
13866
13867     %modifier(symbol)
13868
13869`%dsp8'
13870`%dsp16'
13871     These modifiers override the assembler's assumptions about how big
13872     a symbol's address is.  Normally, when it sees an operand like
13873     `sym[a0]' it assumes `sym' may require the widest displacement
13874     field (16 bits for `-m16c', 24 bits for `-m32c').  These modifiers
13875     tell it to assume the address will fit in an 8 or 16 bit
13876     (respectively) unsigned displacement.  Note that, of course, if it
13877     doesn't actually fit you will get linker errors.  Example:
13878
13879          mov.w %dsp8(sym)[a0],r1
13880          mov.b #0,%dsp8(sym)[a0]
13881
13882`%hi8'
13883     This modifier allows you to load bits 16 through 23 of a 24 bit
13884     address into an 8 bit register.  This is useful with, for example,
13885     the M16C `smovf' instruction, which expects a 20 bit address in
13886     `r1h' and `a0'.  Example:
13887
13888          mov.b #%hi8(sym),r1h
13889          mov.w #%lo16(sym),a0
13890          smovf.b
13891
13892`%lo16'
13893     Likewise, this modifier allows you to load bits 0 through 15 of a
13894     24 bit address into a 16 bit register.
13895
13896`%hi16'
13897     This modifier allows you to load bits 16 through 31 of a 32 bit
13898     address into a 16 bit register.  While the M32C family only has 24
13899     bits of address space, it does support addresses in pairs of 16 bit
13900     registers (like `a1a0' for the `lde' instruction).  This modifier
13901     is for loading the upper half in such cases.  Example:
13902
13903          mov.w #%hi16(sym),a1
13904          mov.w #%lo16(sym),a0
13905          ...
13906          lde.w [a1a0],r1
13907
13908
13909
13910File: as.info,  Node: M32C-Chars,  Prev: M32C-Modifiers,  Up: M32C-Syntax
13911
139129.20.2.2 Special Characters
13913...........................
13914
13915The presence of a `;' character on a line indicates the start of a
13916comment that extends to the end of that line.
13917
13918   If a `#' appears as the first character of a line, the whole line is
13919treated as a comment, but in this case the line can also be a logical
13920line number directive (*note Comments::) or a preprocessor control
13921command (*note Preprocessing::).
13922
13923   The `|' character can be used to separate statements on the same
13924line.
13925
13926
13927File: as.info,  Node: M32R-Dependent,  Next: M68K-Dependent,  Prev: M32C-Dependent,  Up: Machine Dependencies
13928
139299.21 M32R Dependent Features
13930============================
13931
13932* Menu:
13933
13934* M32R-Opts::                   M32R Options
13935* M32R-Directives::             M32R Directives
13936* M32R-Warnings::               M32R Warnings
13937
13938
13939File: as.info,  Node: M32R-Opts,  Next: M32R-Directives,  Up: M32R-Dependent
13940
139419.21.1 M32R Options
13942-------------------
13943
13944The Renesas M32R version of `as' has a few machine dependent options:
13945
13946`-m32rx'
13947     `as' can assemble code for several different members of the
13948     Renesas M32R family.  Normally the default is to assemble code for
13949     the M32R microprocessor.  This option may be used to change the
13950     default to the M32RX microprocessor, which adds some more
13951     instructions to the basic M32R instruction set, and some
13952     additional parameters to some of the original instructions.
13953
13954`-m32r2'
13955     This option changes the target processor to the M32R2
13956     microprocessor.
13957
13958`-m32r'
13959     This option can be used to restore the assembler's default
13960     behaviour of assembling for the M32R microprocessor.  This can be
13961     useful if the default has been changed by a previous command-line
13962     option.
13963
13964`-little'
13965     This option tells the assembler to produce little-endian code and
13966     data.  The default is dependent upon how the toolchain was
13967     configured.
13968
13969`-EL'
13970     This is a synonym for _-little_.
13971
13972`-big'
13973     This option tells the assembler to produce big-endian code and
13974     data.
13975
13976`-EB'
13977     This is a synonym for _-big_.
13978
13979`-KPIC'
13980     This option specifies that the output of the assembler should be
13981     marked as position-independent code (PIC).
13982
13983`-parallel'
13984     This option tells the assembler to attempts to combine two
13985     sequential instructions into a single, parallel instruction, where
13986     it is legal to do so.
13987
13988`-no-parallel'
13989     This option disables a previously enabled _-parallel_ option.
13990
13991`-no-bitinst'
13992     This option disables the support for the extended bit-field
13993     instructions provided by the M32R2.  If this support needs to be
13994     re-enabled the _-bitinst_ switch can be used to restore it.
13995
13996`-O'
13997     This option tells the assembler to attempt to optimize the
13998     instructions that it produces.  This includes filling delay slots
13999     and converting sequential instructions into parallel ones.  This
14000     option implies _-parallel_.
14001
14002`-warn-explicit-parallel-conflicts'
14003     Instructs `as' to produce warning messages when questionable
14004     parallel instructions are encountered.  This option is enabled by
14005     default, but `gcc' disables it when it invokes `as' directly.
14006     Questionable instructions are those whose behaviour would be
14007     different if they were executed sequentially.  For example the
14008     code fragment `mv r1, r2 || mv r3, r1' produces a different result
14009     from `mv r1, r2 \n mv r3, r1' since the former moves r1 into r3
14010     and then r2 into r1, whereas the later moves r2 into r1 and r3.
14011
14012`-Wp'
14013     This is a shorter synonym for the
14014     _-warn-explicit-parallel-conflicts_ option.
14015
14016`-no-warn-explicit-parallel-conflicts'
14017     Instructs `as' not to produce warning messages when questionable
14018     parallel instructions are encountered.
14019
14020`-Wnp'
14021     This is a shorter synonym for the
14022     _-no-warn-explicit-parallel-conflicts_ option.
14023
14024`-ignore-parallel-conflicts'
14025     This option tells the assembler's to stop checking parallel
14026     instructions for constraint violations.  This ability is provided
14027     for hardware vendors testing chip designs and should not be used
14028     under normal circumstances.
14029
14030`-no-ignore-parallel-conflicts'
14031     This option restores the assembler's default behaviour of checking
14032     parallel instructions to detect constraint violations.
14033
14034`-Ip'
14035     This is a shorter synonym for the _-ignore-parallel-conflicts_
14036     option.
14037
14038`-nIp'
14039     This is a shorter synonym for the _-no-ignore-parallel-conflicts_
14040     option.
14041
14042`-warn-unmatched-high'
14043     This option tells the assembler to produce a warning message if a
14044     `.high' pseudo op is encountered without a matching `.low' pseudo
14045     op.  The presence of such an unmatched pseudo op usually indicates
14046     a programming error.
14047
14048`-no-warn-unmatched-high'
14049     Disables a previously enabled _-warn-unmatched-high_ option.
14050
14051`-Wuh'
14052     This is a shorter synonym for the _-warn-unmatched-high_ option.
14053
14054`-Wnuh'
14055     This is a shorter synonym for the _-no-warn-unmatched-high_ option.
14056
14057
14058
14059File: as.info,  Node: M32R-Directives,  Next: M32R-Warnings,  Prev: M32R-Opts,  Up: M32R-Dependent
14060
140619.21.2 M32R Directives
14062----------------------
14063
14064The Renesas M32R version of `as' has a few architecture specific
14065directives:
14066
14067`low EXPRESSION'
14068     The `low' directive computes the value of its expression and
14069     places the lower 16-bits of the result into the immediate-field of
14070     the instruction.  For example:
14071
14072             or3   r0, r0, #low(0x12345678) ; compute r0 = r0 | 0x5678
14073             add3, r0, r0, #low(fred)   ; compute r0 = r0 + low 16-bits of address of fred
14074
14075`high EXPRESSION'
14076     The `high' directive computes the value of its expression and
14077     places the upper 16-bits of the result into the immediate-field of
14078     the instruction.  For example:
14079
14080             seth  r0, #high(0x12345678) ; compute r0 = 0x12340000
14081             seth, r0, #high(fred)       ; compute r0 = upper 16-bits of address of fred
14082
14083`shigh EXPRESSION'
14084     The `shigh' directive is very similar to the `high' directive.  It
14085     also computes the value of its expression and places the upper
14086     16-bits of the result into the immediate-field of the instruction.
14087     The difference is that `shigh' also checks to see if the lower
14088     16-bits could be interpreted as a signed number, and if so it
14089     assumes that a borrow will occur from the upper-16 bits.  To
14090     compensate for this the `shigh' directive pre-biases the upper 16
14091     bit value by adding one to it.  For example:
14092
14093     For example:
14094
14095             seth  r0, #shigh(0x12345678) ; compute r0 = 0x12340000
14096             seth  r0, #shigh(0x00008000) ; compute r0 = 0x00010000
14097
14098     In the second example the lower 16-bits are 0x8000.  If these are
14099     treated as a signed value and sign extended to 32-bits then the
14100     value becomes 0xffff8000.  If this value is then added to
14101     0x00010000 then the result is 0x00008000.
14102
14103     This behaviour is to allow for the different semantics of the
14104     `or3' and `add3' instructions.  The `or3' instruction treats its
14105     16-bit immediate argument as unsigned whereas the `add3' treats
14106     its 16-bit immediate as a signed value.  So for example:
14107
14108             seth  r0, #shigh(0x00008000)
14109             add3  r0, r0, #low(0x00008000)
14110
14111     Produces the correct result in r0, whereas:
14112
14113             seth  r0, #shigh(0x00008000)
14114             or3   r0, r0, #low(0x00008000)
14115
14116     Stores 0xffff8000 into r0.
14117
14118     Note - the `shigh' directive does not know where in the assembly
14119     source code the lower 16-bits of the value are going set, so it
14120     cannot check to make sure that an `or3' instruction is being used
14121     rather than an `add3' instruction.  It is up to the programmer to
14122     make sure that correct directives are used.
14123
14124`.m32r'
14125     The directive performs a similar thing as the _-m32r_ command line
14126     option.  It tells the assembler to only accept M32R instructions
14127     from now on.  An instructions from later M32R architectures are
14128     refused.
14129
14130`.m32rx'
14131     The directive performs a similar thing as the _-m32rx_ command
14132     line option.  It tells the assembler to start accepting the extra
14133     instructions in the M32RX ISA as well as the ordinary M32R ISA.
14134
14135`.m32r2'
14136     The directive performs a similar thing as the _-m32r2_ command
14137     line option.  It tells the assembler to start accepting the extra
14138     instructions in the M32R2 ISA as well as the ordinary M32R ISA.
14139
14140`.little'
14141     The directive performs a similar thing as the _-little_ command
14142     line option.  It tells the assembler to start producing
14143     little-endian code and data.  This option should be used with care
14144     as producing mixed-endian binary files is fraught with danger.
14145
14146`.big'
14147     The directive performs a similar thing as the _-big_ command line
14148     option.  It tells the assembler to start producing big-endian code
14149     and data.  This option should be used with care as producing
14150     mixed-endian binary files is fraught with danger.
14151
14152
14153
14154File: as.info,  Node: M32R-Warnings,  Prev: M32R-Directives,  Up: M32R-Dependent
14155
141569.21.3 M32R Warnings
14157--------------------
14158
14159There are several warning and error messages that can be produced by
14160`as' which are specific to the M32R:
14161
14162`output of 1st instruction is the same as an input to 2nd instruction - is this intentional ?'
14163     This message is only produced if warnings for explicit parallel
14164     conflicts have been enabled.  It indicates that the assembler has
14165     encountered a parallel instruction in which the destination
14166     register of the left hand instruction is used as an input register
14167     in the right hand instruction.  For example in this code fragment
14168     `mv r1, r2 || neg r3, r1' register r1 is the destination of the
14169     move instruction and the input to the neg instruction.
14170
14171`output of 2nd instruction is the same as an input to 1st instruction - is this intentional ?'
14172     This message is only produced if warnings for explicit parallel
14173     conflicts have been enabled.  It indicates that the assembler has
14174     encountered a parallel instruction in which the destination
14175     register of the right hand instruction is used as an input
14176     register in the left hand instruction.  For example in this code
14177     fragment `mv r1, r2 || neg r2, r3' register r2 is the destination
14178     of the neg instruction and the input to the move instruction.
14179
14180`instruction `...' is for the M32RX only'
14181     This message is produced when the assembler encounters an
14182     instruction which is only supported by the M32Rx processor, and
14183     the `-m32rx' command-line flag has not been specified to allow
14184     assembly of such instructions.
14185
14186`unknown instruction `...''
14187     This message is produced when the assembler encounters an
14188     instruction which it does not recognize.
14189
14190`only the NOP instruction can be issued in parallel on the m32r'
14191     This message is produced when the assembler encounters a parallel
14192     instruction which does not involve a NOP instruction and the
14193     `-m32rx' command-line flag has not been specified.  Only the M32Rx
14194     processor is able to execute two instructions in parallel.
14195
14196`instruction `...' cannot be executed in parallel.'
14197     This message is produced when the assembler encounters a parallel
14198     instruction which is made up of one or two instructions which
14199     cannot be executed in parallel.
14200
14201`Instructions share the same execution pipeline'
14202     This message is produced when the assembler encounters a parallel
14203     instruction whose components both use the same execution pipeline.
14204
14205`Instructions write to the same destination register.'
14206     This message is produced when the assembler encounters a parallel
14207     instruction where both components attempt to modify the same
14208     register.  For example these code fragments will produce this
14209     message: `mv r1, r2 || neg r1, r3' `jl r0 || mv r14, r1' `st r2,
14210     @-r1 || mv r1, r3' `mv r1, r2 || ld r0, @r1+' `cmp r1, r2 || addx
14211     r3, r4' (Both write to the condition bit)
14212
14213
14214
14215File: as.info,  Node: M68K-Dependent,  Next: M68HC11-Dependent,  Prev: M32R-Dependent,  Up: Machine Dependencies
14216
142179.22 M680x0 Dependent Features
14218==============================
14219
14220* Menu:
14221
14222* M68K-Opts::                   M680x0 Options
14223* M68K-Syntax::                 Syntax
14224* M68K-Moto-Syntax::            Motorola Syntax
14225* M68K-Float::                  Floating Point
14226* M68K-Directives::             680x0 Machine Directives
14227* M68K-opcodes::                Opcodes
14228
14229
14230File: as.info,  Node: M68K-Opts,  Next: M68K-Syntax,  Up: M68K-Dependent
14231
142329.22.1 M680x0 Options
14233---------------------
14234
14235The Motorola 680x0 version of `as' has a few machine dependent options:
14236
14237`-march=ARCHITECTURE'
14238     This option specifies a target architecture.  The following
14239     architectures are recognized: `68000', `68010', `68020', `68030',
14240     `68040', `68060', `cpu32', `isaa', `isaaplus', `isab', `isac' and
14241     `cfv4e'.
14242
14243`-mcpu=CPU'
14244     This option specifies a target cpu.  When used in conjunction with
14245     the `-march' option, the cpu must be within the specified
14246     architecture.  Also, the generic features of the architecture are
14247     used for instruction generation, rather than those of the specific
14248     chip.
14249
14250`-m[no-]68851'
14251`-m[no-]68881'
14252`-m[no-]div'
14253`-m[no-]usp'
14254`-m[no-]float'
14255`-m[no-]mac'
14256`-m[no-]emac'
14257     Enable or disable various architecture specific features.  If a
14258     chip or architecture by default supports an option (for instance
14259     `-march=isaaplus' includes the `-mdiv' option), explicitly
14260     disabling the option will override the default.
14261
14262`-l'
14263     You can use the `-l' option to shorten the size of references to
14264     undefined symbols.  If you do not use the `-l' option, references
14265     to undefined symbols are wide enough for a full `long' (32 bits).
14266     (Since `as' cannot know where these symbols end up, `as' can only
14267     allocate space for the linker to fill in later.  Since `as' does
14268     not know how far away these symbols are, it allocates as much
14269     space as it can.)  If you use this option, the references are only
14270     one word wide (16 bits).  This may be useful if you want the
14271     object file to be as small as possible, and you know that the
14272     relevant symbols are always less than 17 bits away.
14273
14274`--register-prefix-optional'
14275     For some configurations, especially those where the compiler
14276     normally does not prepend an underscore to the names of user
14277     variables, the assembler requires a `%' before any use of a
14278     register name.  This is intended to let the assembler distinguish
14279     between C variables and functions named `a0' through `a7', and so
14280     on.  The `%' is always accepted, but is not required for certain
14281     configurations, notably `sun3'.  The `--register-prefix-optional'
14282     option may be used to permit omitting the `%' even for
14283     configurations for which it is normally required.  If this is
14284     done, it will generally be impossible to refer to C variables and
14285     functions with the same names as register names.
14286
14287`--bitwise-or'
14288     Normally the character `|' is treated as a comment character, which
14289     means that it can not be used in expressions.  The `--bitwise-or'
14290     option turns `|' into a normal character.  In this mode, you must
14291     either use C style comments, or start comments with a `#' character
14292     at the beginning of a line.
14293
14294`--base-size-default-16  --base-size-default-32'
14295     If you use an addressing mode with a base register without
14296     specifying the size, `as' will normally use the full 32 bit value.
14297     For example, the addressing mode `%a0@(%d0)' is equivalent to
14298     `%a0@(%d0:l)'.  You may use the `--base-size-default-16' option to
14299     tell `as' to default to using the 16 bit value.  In this case,
14300     `%a0@(%d0)' is equivalent to `%a0@(%d0:w)'.  You may use the
14301     `--base-size-default-32' option to restore the default behaviour.
14302
14303`--disp-size-default-16  --disp-size-default-32'
14304     If you use an addressing mode with a displacement, and the value
14305     of the displacement is not known, `as' will normally assume that
14306     the value is 32 bits.  For example, if the symbol `disp' has not
14307     been defined, `as' will assemble the addressing mode
14308     `%a0@(disp,%d0)' as though `disp' is a 32 bit value.  You may use
14309     the `--disp-size-default-16' option to tell `as' to instead assume
14310     that the displacement is 16 bits.  In this case, `as' will
14311     assemble `%a0@(disp,%d0)' as though `disp' is a 16 bit value.  You
14312     may use the `--disp-size-default-32' option to restore the default
14313     behaviour.
14314
14315`--pcrel'
14316     Always keep branches PC-relative.  In the M680x0 architecture all
14317     branches are defined as PC-relative.  However, on some processors
14318     they are limited to word displacements maximum.  When `as' needs a
14319     long branch that is not available, it normally emits an absolute
14320     jump instead.  This option disables this substitution.  When this
14321     option is given and no long branches are available, only word
14322     branches will be emitted.  An error message will be generated if a
14323     word branch cannot reach its target.  This option has no effect on
14324     68020 and other processors that have long branches.  *note Branch
14325     Improvement: M68K-Branch.
14326
14327`-m68000'
14328     `as' can assemble code for several different members of the
14329     Motorola 680x0 family.  The default depends upon how `as' was
14330     configured when it was built; normally, the default is to assemble
14331     code for the 68020 microprocessor.  The following options may be
14332     used to change the default.  These options control which
14333     instructions and addressing modes are permitted.  The members of
14334     the 680x0 family are very similar.  For detailed information about
14335     the differences, see the Motorola manuals.
14336
14337    `-m68000'
14338    `-m68ec000'
14339    `-m68hc000'
14340    `-m68hc001'
14341    `-m68008'
14342    `-m68302'
14343    `-m68306'
14344    `-m68307'
14345    `-m68322'
14346    `-m68356'
14347          Assemble for the 68000. `-m68008', `-m68302', and so on are
14348          synonyms for `-m68000', since the chips are the same from the
14349          point of view of the assembler.
14350
14351    `-m68010'
14352          Assemble for the 68010.
14353
14354    `-m68020'
14355    `-m68ec020'
14356          Assemble for the 68020.  This is normally the default.
14357
14358    `-m68030'
14359    `-m68ec030'
14360          Assemble for the 68030.
14361
14362    `-m68040'
14363    `-m68ec040'
14364          Assemble for the 68040.
14365
14366    `-m68060'
14367    `-m68ec060'
14368          Assemble for the 68060.
14369
14370    `-mcpu32'
14371    `-m68330'
14372    `-m68331'
14373    `-m68332'
14374    `-m68333'
14375    `-m68334'
14376    `-m68336'
14377    `-m68340'
14378    `-m68341'
14379    `-m68349'
14380    `-m68360'
14381          Assemble for the CPU32 family of chips.
14382
14383    `-m5200'
14384    `-m5202'
14385    `-m5204'
14386    `-m5206'
14387    `-m5206e'
14388    `-m521x'
14389    `-m5249'
14390    `-m528x'
14391    `-m5307'
14392    `-m5407'
14393    `-m547x'
14394    `-m548x'
14395    `-mcfv4'
14396    `-mcfv4e'
14397          Assemble for the ColdFire family of chips.
14398
14399    `-m68881'
14400    `-m68882'
14401          Assemble 68881 floating point instructions.  This is the
14402          default for the 68020, 68030, and the CPU32.  The 68040 and
14403          68060 always support floating point instructions.
14404
14405    `-mno-68881'
14406          Do not assemble 68881 floating point instructions.  This is
14407          the default for 68000 and the 68010.  The 68040 and 68060
14408          always support floating point instructions, even if this
14409          option is used.
14410
14411    `-m68851'
14412          Assemble 68851 MMU instructions.  This is the default for the
14413          68020, 68030, and 68060.  The 68040 accepts a somewhat
14414          different set of MMU instructions; `-m68851' and `-m68040'
14415          should not be used together.
14416
14417    `-mno-68851'
14418          Do not assemble 68851 MMU instructions.  This is the default
14419          for the 68000, 68010, and the CPU32.  The 68040 accepts a
14420          somewhat different set of MMU instructions.
14421
14422
14423File: as.info,  Node: M68K-Syntax,  Next: M68K-Moto-Syntax,  Prev: M68K-Opts,  Up: M68K-Dependent
14424
144259.22.2 Syntax
14426-------------
14427
14428This syntax for the Motorola 680x0 was developed at MIT.
14429
14430   The 680x0 version of `as' uses instructions names and syntax
14431compatible with the Sun assembler.  Intervening periods are ignored;
14432for example, `movl' is equivalent to `mov.l'.
14433
14434   In the following table APC stands for any of the address registers
14435(`%a0' through `%a7'), the program counter (`%pc'), the zero-address
14436relative to the program counter (`%zpc'), a suppressed address register
14437(`%za0' through `%za7'), or it may be omitted entirely.  The use of
14438SIZE means one of `w' or `l', and it may be omitted, along with the
14439leading colon, unless a scale is also specified.  The use of SCALE
14440means one of `1', `2', `4', or `8', and it may always be omitted along
14441with the leading colon.
14442
14443   The following addressing modes are understood:
14444"Immediate"
14445     `#NUMBER'
14446
14447"Data Register"
14448     `%d0' through `%d7'
14449
14450"Address Register"
14451     `%a0' through `%a7'
14452     `%a7' is also known as `%sp', i.e., the Stack Pointer.  `%a6' is
14453     also known as `%fp', the Frame Pointer.
14454
14455"Address Register Indirect"
14456     `%a0@' through `%a7@'
14457
14458"Address Register Postincrement"
14459     `%a0@+' through `%a7@+'
14460
14461"Address Register Predecrement"
14462     `%a0@-' through `%a7@-'
14463
14464"Indirect Plus Offset"
14465     `APC@(NUMBER)'
14466
14467"Index"
14468     `APC@(NUMBER,REGISTER:SIZE:SCALE)'
14469
14470     The NUMBER may be omitted.
14471
14472"Postindex"
14473     `APC@(NUMBER)@(ONUMBER,REGISTER:SIZE:SCALE)'
14474
14475     The ONUMBER or the REGISTER, but not both, may be omitted.
14476
14477"Preindex"
14478     `APC@(NUMBER,REGISTER:SIZE:SCALE)@(ONUMBER)'
14479
14480     The NUMBER may be omitted.  Omitting the REGISTER produces the
14481     Postindex addressing mode.
14482
14483"Absolute"
14484     `SYMBOL', or `DIGITS', optionally followed by `:b', `:w', or `:l'.
14485
14486
14487File: as.info,  Node: M68K-Moto-Syntax,  Next: M68K-Float,  Prev: M68K-Syntax,  Up: M68K-Dependent
14488
144899.22.3 Motorola Syntax
14490----------------------
14491
14492The standard Motorola syntax for this chip differs from the syntax
14493already discussed (*note Syntax: M68K-Syntax.).  `as' can accept
14494Motorola syntax for operands, even if MIT syntax is used for other
14495operands in the same instruction.  The two kinds of syntax are fully
14496compatible.
14497
14498   In the following table APC stands for any of the address registers
14499(`%a0' through `%a7'), the program counter (`%pc'), the zero-address
14500relative to the program counter (`%zpc'), or a suppressed address
14501register (`%za0' through `%za7').  The use of SIZE means one of `w' or
14502`l', and it may always be omitted along with the leading dot.  The use
14503of SCALE means one of `1', `2', `4', or `8', and it may always be
14504omitted along with the leading asterisk.
14505
14506   The following additional addressing modes are understood:
14507
14508"Address Register Indirect"
14509     `(%a0)' through `(%a7)'
14510     `%a7' is also known as `%sp', i.e., the Stack Pointer.  `%a6' is
14511     also known as `%fp', the Frame Pointer.
14512
14513"Address Register Postincrement"
14514     `(%a0)+' through `(%a7)+'
14515
14516"Address Register Predecrement"
14517     `-(%a0)' through `-(%a7)'
14518
14519"Indirect Plus Offset"
14520     `NUMBER(%A0)' through `NUMBER(%A7)', or `NUMBER(%PC)'.
14521
14522     The NUMBER may also appear within the parentheses, as in
14523     `(NUMBER,%A0)'.  When used with the PC, the NUMBER may be omitted
14524     (with an address register, omitting the NUMBER produces Address
14525     Register Indirect mode).
14526
14527"Index"
14528     `NUMBER(APC,REGISTER.SIZE*SCALE)'
14529
14530     The NUMBER may be omitted, or it may appear within the
14531     parentheses.  The APC may be omitted.  The REGISTER and the APC
14532     may appear in either order.  If both APC and REGISTER are address
14533     registers, and the SIZE and SCALE are omitted, then the first
14534     register is taken as the base register, and the second as the
14535     index register.
14536
14537"Postindex"
14538     `([NUMBER,APC],REGISTER.SIZE*SCALE,ONUMBER)'
14539
14540     The ONUMBER, or the REGISTER, or both, may be omitted.  Either the
14541     NUMBER or the APC may be omitted, but not both.
14542
14543"Preindex"
14544     `([NUMBER,APC,REGISTER.SIZE*SCALE],ONUMBER)'
14545
14546     The NUMBER, or the APC, or the REGISTER, or any two of them, may
14547     be omitted.  The ONUMBER may be omitted.  The REGISTER and the APC
14548     may appear in either order.  If both APC and REGISTER are address
14549     registers, and the SIZE and SCALE are omitted, then the first
14550     register is taken as the base register, and the second as the
14551     index register.
14552
14553
14554File: as.info,  Node: M68K-Float,  Next: M68K-Directives,  Prev: M68K-Moto-Syntax,  Up: M68K-Dependent
14555
145569.22.4 Floating Point
14557---------------------
14558
14559Packed decimal (P) format floating literals are not supported.  Feel
14560free to add the code!
14561
14562   The floating point formats generated by directives are these.
14563
14564`.float'
14565     `Single' precision floating point constants.
14566
14567`.double'
14568     `Double' precision floating point constants.
14569
14570`.extend'
14571`.ldouble'
14572     `Extended' precision (`long double') floating point constants.
14573
14574
14575File: as.info,  Node: M68K-Directives,  Next: M68K-opcodes,  Prev: M68K-Float,  Up: M68K-Dependent
14576
145779.22.5 680x0 Machine Directives
14578-------------------------------
14579
14580In order to be compatible with the Sun assembler the 680x0 assembler
14581understands the following directives.
14582
14583`.data1'
14584     This directive is identical to a `.data 1' directive.
14585
14586`.data2'
14587     This directive is identical to a `.data 2' directive.
14588
14589`.even'
14590     This directive is a special case of the `.align' directive; it
14591     aligns the output to an even byte boundary.
14592
14593`.skip'
14594     This directive is identical to a `.space' directive.
14595
14596`.arch NAME'
14597     Select the target architecture and extension features.  Valid
14598     values for NAME are the same as for the `-march' command-line
14599     option.  This directive cannot be specified after any instructions
14600     have been assembled.  If it is given multiple times, or in
14601     conjunction with the `-march' option, all uses must be for the
14602     same architecture and extension set.
14603
14604`.cpu NAME'
14605     Select the target cpu.  Valid values for NAME are the same as for
14606     the `-mcpu' command-line option.  This directive cannot be
14607     specified after any instructions have been assembled.  If it is
14608     given multiple times, or in conjunction with the `-mopt' option,
14609     all uses must be for the same cpu.
14610
14611
14612
14613File: as.info,  Node: M68K-opcodes,  Prev: M68K-Directives,  Up: M68K-Dependent
14614
146159.22.6 Opcodes
14616--------------
14617
14618* Menu:
14619
14620* M68K-Branch::                 Branch Improvement
14621* M68K-Chars::                  Special Characters
14622
14623
14624File: as.info,  Node: M68K-Branch,  Next: M68K-Chars,  Up: M68K-opcodes
14625
146269.22.6.1 Branch Improvement
14627...........................
14628
14629Certain pseudo opcodes are permitted for branch instructions.  They
14630expand to the shortest branch instruction that reach the target.
14631Generally these mnemonics are made by substituting `j' for `b' at the
14632start of a Motorola mnemonic.
14633
14634   The following table summarizes the pseudo-operations.  A `*' flags
14635cases that are more fully described after the table:
14636
14637               Displacement
14638               +------------------------------------------------------------
14639               |                68020           68000/10, not PC-relative OK
14640     Pseudo-Op |BYTE    WORD    LONG            ABSOLUTE LONG JUMP    **
14641               +------------------------------------------------------------
14642          jbsr |bsrs    bsrw    bsrl            jsr
14643           jra |bras    braw    bral            jmp
14644     *     jXX |bXXs    bXXw    bXXl            bNXs;jmp
14645     *    dbXX | N/A    dbXXw   dbXX;bras;bral  dbXX;bras;jmp
14646          fjXX | N/A    fbXXw   fbXXl            N/A
14647
14648     XX: condition
14649     NX: negative of condition XX
14650                       `*'--see full description below
14651         `**'--this expansion mode is disallowed by `--pcrel'
14652
14653`jbsr'
14654`jra'
14655     These are the simplest jump pseudo-operations; they always map to
14656     one particular machine instruction, depending on the displacement
14657     to the branch target.  This instruction will be a byte or word
14658     branch is that is sufficient.  Otherwise, a long branch will be
14659     emitted if available.  If no long branches are available and the
14660     `--pcrel' option is not given, an absolute long jump will be
14661     emitted instead.  If no long branches are available, the `--pcrel'
14662     option is given, and a word branch cannot reach the target, an
14663     error message is generated.
14664
14665     In addition to standard branch operands, `as' allows these
14666     pseudo-operations to have all operands that are allowed for jsr
14667     and jmp, substituting these instructions if the operand given is
14668     not valid for a branch instruction.
14669
14670`jXX'
14671     Here, `jXX' stands for an entire family of pseudo-operations,
14672     where XX is a conditional branch or condition-code test.  The full
14673     list of pseudo-ops in this family is:
14674           jhi   jls   jcc   jcs   jne   jeq   jvc
14675           jvs   jpl   jmi   jge   jlt   jgt   jle
14676
14677     Usually, each of these pseudo-operations expands to a single branch
14678     instruction.  However, if a word branch is not sufficient, no long
14679     branches are available, and the `--pcrel' option is not given, `as'
14680     issues a longer code fragment in terms of NX, the opposite
14681     condition to XX.  For example, under these conditions:
14682              jXX foo
14683     gives
14684               bNXs oof
14685               jmp foo
14686           oof:
14687
14688`dbXX'
14689     The full family of pseudo-operations covered here is
14690           dbhi   dbls   dbcc   dbcs   dbne   dbeq   dbvc
14691           dbvs   dbpl   dbmi   dbge   dblt   dbgt   dble
14692           dbf    dbra   dbt
14693
14694     Motorola `dbXX' instructions allow word displacements only.  When
14695     a word displacement is sufficient, each of these pseudo-operations
14696     expands to the corresponding Motorola instruction.  When a word
14697     displacement is not sufficient and long branches are available,
14698     when the source reads `dbXX foo', `as' emits
14699               dbXX oo1
14700               bras oo2
14701           oo1:bral foo
14702           oo2:
14703
14704     If, however, long branches are not available and the `--pcrel'
14705     option is not given, `as' emits
14706               dbXX oo1
14707               bras oo2
14708           oo1:jmp foo
14709           oo2:
14710
14711`fjXX'
14712     This family includes
14713           fjne   fjeq   fjge   fjlt   fjgt   fjle   fjf
14714           fjt    fjgl   fjgle  fjnge  fjngl  fjngle fjngt
14715           fjnle  fjnlt  fjoge  fjogl  fjogt  fjole  fjolt
14716           fjor   fjseq  fjsf   fjsne  fjst   fjueq  fjuge
14717           fjugt  fjule  fjult  fjun
14718
14719     Each of these pseudo-operations always expands to a single Motorola
14720     coprocessor branch instruction, word or long.  All Motorola
14721     coprocessor branch instructions allow both word and long
14722     displacements.
14723
14724
14725
14726File: as.info,  Node: M68K-Chars,  Prev: M68K-Branch,  Up: M68K-opcodes
14727
147289.22.6.2 Special Characters
14729...........................
14730
14731Line comments are introduced by the `|' character appearing anywhere on
14732a line, unless the `--bitwise-or' command-line option has been
14733specified.
14734
14735   An asterisk (`*') as the first character on a line marks the start
14736of a line comment as well.
14737
14738   A hash character (`#') as the first character on a line also marks
14739the start of a line comment, but in this case it could also be a
14740logical line number directive (*note Comments::) or a preprocessor
14741control command (*note Preprocessing::).  If the hash character appears
14742elsewhere on a line it is used to introduce an immediate value.  (This
14743is for compatibility with Sun's assembler).
14744
14745   Multiple statements on the same line can appear if they are separated
14746by the `;' character.
14747
14748
14749File: as.info,  Node: M68HC11-Dependent,  Next: S12Z-Dependent,  Prev: M68K-Dependent,  Up: Machine Dependencies
14750
147519.23 M68HC11 and M68HC12 Dependent Features
14752===========================================
14753
14754* Menu:
14755
14756* M68HC11-Opts::                   M68HC11 and M68HC12 Options
14757* M68HC11-Syntax::                 Syntax
14758* M68HC11-Modifiers::              Symbolic Operand Modifiers
14759* M68HC11-Directives::             Assembler Directives
14760* M68HC11-Float::                  Floating Point
14761* M68HC11-opcodes::                Opcodes
14762
14763
14764File: as.info,  Node: M68HC11-Opts,  Next: M68HC11-Syntax,  Up: M68HC11-Dependent
14765
147669.23.1 M68HC11 and M68HC12 Options
14767----------------------------------
14768
14769The Motorola 68HC11 and 68HC12 version of `as' have a few machine
14770dependent options.
14771
14772`-m68hc11'
14773     This option switches the assembler into the M68HC11 mode. In this
14774     mode, the assembler only accepts 68HC11 operands and mnemonics. It
14775     produces code for the 68HC11.
14776
14777`-m68hc12'
14778     This option switches the assembler into the M68HC12 mode. In this
14779     mode, the assembler also accepts 68HC12 operands and mnemonics. It
14780     produces code for the 68HC12. A few 68HC11 instructions are
14781     replaced by some 68HC12 instructions as recommended by Motorola
14782     specifications.
14783
14784`-m68hcs12'
14785     This option switches the assembler into the M68HCS12 mode.  This
14786     mode is similar to `-m68hc12' but specifies to assemble for the
14787     68HCS12 series.  The only difference is on the assembling of the
14788     `movb' and `movw' instruction when a PC-relative operand is used.
14789
14790`-mm9s12x'
14791     This option switches the assembler into the M9S12X mode.  This
14792     mode is similar to `-m68hc12' but specifies to assemble for the
14793     S12X series which is a superset of the HCS12.
14794
14795`-mm9s12xg'
14796     This option switches the assembler into the XGATE mode for the RISC
14797     co-processor featured on some S12X-family chips.
14798
14799`--xgate-ramoffset'
14800     This option instructs the linker to offset RAM addresses from S12X
14801     address space into XGATE address space.
14802
14803`-mshort'
14804     This option controls the ABI and indicates to use a 16-bit integer
14805     ABI.  It has no effect on the assembled instructions.  This is the
14806     default.
14807
14808`-mlong'
14809     This option controls the ABI and indicates to use a 32-bit integer
14810     ABI.
14811
14812`-mshort-double'
14813     This option controls the ABI and indicates to use a 32-bit float
14814     ABI.  This is the default.
14815
14816`-mlong-double'
14817     This option controls the ABI and indicates to use a 64-bit float
14818     ABI.
14819
14820`--strict-direct-mode'
14821     You can use the `--strict-direct-mode' option to disable the
14822     automatic translation of direct page mode addressing into extended
14823     mode when the instruction does not support direct mode.  For
14824     example, the `clr' instruction does not support direct page mode
14825     addressing. When it is used with the direct page mode, `as' will
14826     ignore it and generate an absolute addressing.  This option
14827     prevents `as' from doing this, and the wrong usage of the direct
14828     page mode will raise an error.
14829
14830`--short-branches'
14831     The `--short-branches' option turns off the translation of
14832     relative branches into absolute branches when the branch offset is
14833     out of range. By default `as' transforms the relative branch
14834     (`bsr', `bgt', `bge', `beq', `bne', `ble', `blt', `bhi', `bcc',
14835     `bls', `bcs', `bmi', `bvs', `bvs', `bra') into an absolute branch
14836     when the offset is out of the -128 .. 127 range.  In that case,
14837     the `bsr' instruction is translated into a `jsr', the `bra'
14838     instruction is translated into a `jmp' and the conditional
14839     branches instructions are inverted and followed by a `jmp'. This
14840     option disables these translations and `as' will generate an error
14841     if a relative branch is out of range. This option does not affect
14842     the optimization associated to the `jbra', `jbsr' and `jbXX'
14843     pseudo opcodes.
14844
14845`--force-long-branches'
14846     The `--force-long-branches' option forces the translation of
14847     relative branches into absolute branches. This option does not
14848     affect the optimization associated to the `jbra', `jbsr' and
14849     `jbXX' pseudo opcodes.
14850
14851`--print-insn-syntax'
14852     You can use the `--print-insn-syntax' option to obtain the syntax
14853     description of the instruction when an error is detected.
14854
14855`--print-opcodes'
14856     The `--print-opcodes' option prints the list of all the
14857     instructions with their syntax. The first item of each line
14858     represents the instruction name and the rest of the line indicates
14859     the possible operands for that instruction. The list is printed in
14860     alphabetical order. Once the list is printed `as' exits.
14861
14862`--generate-example'
14863     The `--generate-example' option is similar to `--print-opcodes'
14864     but it generates an example for each instruction instead.
14865
14866
14867File: as.info,  Node: M68HC11-Syntax,  Next: M68HC11-Modifiers,  Prev: M68HC11-Opts,  Up: M68HC11-Dependent
14868
148699.23.2 Syntax
14870-------------
14871
14872In the M68HC11 syntax, the instruction name comes first and it may be
14873followed by one or several operands (up to three). Operands are
14874separated by comma (`,'). In the normal mode, `as' will complain if too
14875many operands are specified for a given instruction. In the MRI mode
14876(turned on with `-M' option), it will treat them as comments. Example:
14877
14878     inx
14879     lda  #23
14880     bset 2,x #4
14881     brclr *bot #8 foo
14882
14883   The presence of a `;' character or a `!' character anywhere on a
14884line indicates the start of a comment that extends to the end of that
14885line.
14886
14887   A `*' or a `#' character at the start of a line also introduces a
14888line comment, but these characters do not work elsewhere on the line.
14889If the first character of the line is a `#' then as well as starting a
14890comment, the line could also be logical line number directive (*note
14891Comments::) or a preprocessor control command (*note Preprocessing::).
14892
14893   The M68HC11 assembler does not currently support a line separator
14894character.
14895
14896   The following addressing modes are understood for 68HC11 and 68HC12:
14897"Immediate"
14898     `#NUMBER'
14899
14900"Address Register"
14901     `NUMBER,X', `NUMBER,Y'
14902
14903     The NUMBER may be omitted in which case 0 is assumed.
14904
14905"Direct Addressing mode"
14906     `*SYMBOL', or `*DIGITS'
14907
14908"Absolute"
14909     `SYMBOL', or `DIGITS'
14910
14911   The M68HC12 has other more complex addressing modes. All of them are
14912supported and they are represented below:
14913
14914"Constant Offset Indexed Addressing Mode"
14915     `NUMBER,REG'
14916
14917     The NUMBER may be omitted in which case 0 is assumed.  The
14918     register can be either `X', `Y', `SP' or `PC'.  The assembler will
14919     use the smaller post-byte definition according to the constant
14920     value (5-bit constant offset, 9-bit constant offset or 16-bit
14921     constant offset).  If the constant is not known by the assembler
14922     it will use the 16-bit constant offset post-byte and the value
14923     will be resolved at link time.
14924
14925"Offset Indexed Indirect"
14926     `[NUMBER,REG]'
14927
14928     The register can be either `X', `Y', `SP' or `PC'.
14929
14930"Auto Pre-Increment/Pre-Decrement/Post-Increment/Post-Decrement"
14931     `NUMBER,-REG' `NUMBER,+REG' `NUMBER,REG-' `NUMBER,REG+'
14932
14933     The number must be in the range `-8'..`+8' and must not be 0.  The
14934     register can be either `X', `Y', `SP' or `PC'.
14935
14936"Accumulator Offset"
14937     `ACC,REG'
14938
14939     The accumulator register can be either `A', `B' or `D'.  The
14940     register can be either `X', `Y', `SP' or `PC'.
14941
14942"Accumulator D offset indexed-indirect"
14943     `[D,REG]'
14944
14945     The register can be either `X', `Y', `SP' or `PC'.
14946
14947
14948   For example:
14949
14950     ldab 1024,sp
14951     ldd [10,x]
14952     orab 3,+x
14953     stab -2,y-
14954     ldx a,pc
14955     sty [d,sp]
14956
14957
14958File: as.info,  Node: M68HC11-Modifiers,  Next: M68HC11-Directives,  Prev: M68HC11-Syntax,  Up: M68HC11-Dependent
14959
149609.23.3 Symbolic Operand Modifiers
14961---------------------------------
14962
14963The assembler supports several modifiers when using symbol addresses in
1496468HC11 and 68HC12 instruction operands.  The general syntax is the
14965following:
14966
14967     %modifier(symbol)
14968
14969`%addr'
14970     This modifier indicates to the assembler and linker to use the
14971     16-bit physical address corresponding to the symbol.  This is
14972     intended to be used on memory window systems to map a symbol in
14973     the memory bank window.  If the symbol is in a memory expansion
14974     part, the physical address corresponds to the symbol address
14975     within the memory bank window.  If the symbol is not in a memory
14976     expansion part, this is the symbol address (using or not using the
14977     %addr modifier has no effect in that case).
14978
14979`%page'
14980     This modifier indicates to use the memory page number corresponding
14981     to the symbol.  If the symbol is in a memory expansion part, its
14982     page number is computed by the linker as a number used to map the
14983     page containing the symbol in the memory bank window.  If the
14984     symbol is not in a memory expansion part, the page number is 0.
14985
14986`%hi'
14987     This modifier indicates to use the 8-bit high part of the physical
14988     address of the symbol.
14989
14990`%lo'
14991     This modifier indicates to use the 8-bit low part of the physical
14992     address of the symbol.
14993
14994
14995   For example a 68HC12 call to a function `foo_example' stored in
14996memory expansion part could be written as follows:
14997
14998     call %addr(foo_example),%page(foo_example)
14999
15000   and this is equivalent to
15001
15002     call foo_example
15003
15004   And for 68HC11 it could be written as follows:
15005
15006     ldab #%page(foo_example)
15007     stab _page_switch
15008     jsr  %addr(foo_example)
15009
15010
15011File: as.info,  Node: M68HC11-Directives,  Next: M68HC11-Float,  Prev: M68HC11-Modifiers,  Up: M68HC11-Dependent
15012
150139.23.4 Assembler Directives
15014---------------------------
15015
15016The 68HC11 and 68HC12 version of `as' have the following specific
15017assembler directives:
15018
15019`.relax'
15020     The relax directive is used by the `GNU Compiler' to emit a
15021     specific relocation to mark a group of instructions for linker
15022     relaxation.  The sequence of instructions within the group must be
15023     known to the linker so that relaxation can be performed.
15024
15025`.mode [mshort|mlong|mshort-double|mlong-double]'
15026     This directive specifies the ABI.  It overrides the `-mshort',
15027     `-mlong', `-mshort-double' and `-mlong-double' options.
15028
15029`.far SYMBOL'
15030     This directive marks the symbol as a `far' symbol meaning that it
15031     uses a `call/rtc' calling convention as opposed to `jsr/rts'.
15032     During a final link, the linker will identify references to the
15033     `far' symbol and will verify the proper calling convention.
15034
15035`.interrupt SYMBOL'
15036     This directive marks the symbol as an interrupt entry point.  This
15037     information is then used by the debugger to correctly unwind the
15038     frame across interrupts.
15039
15040`.xrefb SYMBOL'
15041     This directive is defined for compatibility with the
15042     `Specification for Motorola 8 and 16-Bit Assembly Language Input
15043     Standard' and is ignored.
15044
15045
15046
15047File: as.info,  Node: M68HC11-Float,  Next: M68HC11-opcodes,  Prev: M68HC11-Directives,  Up: M68HC11-Dependent
15048
150499.23.5 Floating Point
15050---------------------
15051
15052Packed decimal (P) format floating literals are not supported.  Feel
15053free to add the code!
15054
15055   The floating point formats generated by directives are these.
15056
15057`.float'
15058     `Single' precision floating point constants.
15059
15060`.double'
15061     `Double' precision floating point constants.
15062
15063`.extend'
15064`.ldouble'
15065     `Extended' precision (`long double') floating point constants.
15066
15067
15068File: as.info,  Node: M68HC11-opcodes,  Prev: M68HC11-Float,  Up: M68HC11-Dependent
15069
150709.23.6 Opcodes
15071--------------
15072
15073* Menu:
15074
15075* M68HC11-Branch::                 Branch Improvement
15076
15077
15078File: as.info,  Node: M68HC11-Branch,  Up: M68HC11-opcodes
15079
150809.23.6.1 Branch Improvement
15081...........................
15082
15083Certain pseudo opcodes are permitted for branch instructions.  They
15084expand to the shortest branch instruction that reach the target.
15085Generally these mnemonics are made by prepending `j' to the start of
15086Motorola mnemonic. These pseudo opcodes are not affected by the
15087`--short-branches' or `--force-long-branches' options.
15088
15089   The following table summarizes the pseudo-operations.
15090
15091                             Displacement Width
15092          +-------------------------------------------------------------+
15093          |                     Options                                 |
15094          |    --short-branches           --force-long-branches         |
15095          +--------------------------+----------------------------------+
15096       Op |BYTE             WORD     | BYTE          WORD               |
15097          +--------------------------+----------------------------------+
15098      bsr | bsr <pc-rel>    <error>  |               jsr <abs>          |
15099      bra | bra <pc-rel>    <error>  |               jmp <abs>          |
15100     jbsr | bsr <pc-rel>   jsr <abs> | bsr <pc-rel>  jsr <abs>          |
15101     jbra | bra <pc-rel>   jmp <abs> | bra <pc-rel>  jmp <abs>          |
15102      bXX | bXX <pc-rel>    <error>  |               bNX +3; jmp <abs>  |
15103     jbXX | bXX <pc-rel>   bNX +3;   | bXX <pc-rel>  bNX +3; jmp <abs>  |
15104          |                jmp <abs> |                                  |
15105          +--------------------------+----------------------------------+
15106     XX: condition
15107     NX: negative of condition XX
15108
15109`jbsr'
15110`jbra'
15111     These are the simplest jump pseudo-operations; they always map to
15112     one particular machine instruction, depending on the displacement
15113     to the branch target.
15114
15115`jbXX'
15116     Here, `jbXX' stands for an entire family of pseudo-operations,
15117     where XX is a conditional branch or condition-code test.  The full
15118     list of pseudo-ops in this family is:
15119           jbcc   jbeq   jbge   jbgt   jbhi   jbvs   jbpl  jblo
15120           jbcs   jbne   jblt   jble   jbls   jbvc   jbmi
15121
15122     For the cases of non-PC relative displacements and long
15123     displacements, `as' issues a longer code fragment in terms of NX,
15124     the opposite condition to XX.  For example, for the non-PC
15125     relative case:
15126              jbXX foo
15127     gives
15128               bNXs oof
15129               jmp foo
15130           oof:
15131
15132
15133
15134File: as.info,  Node: S12Z-Dependent,  Next: Meta-Dependent,  Prev: M68HC11-Dependent,  Up: Machine Dependencies
15135
151369.24 S12Z Dependent Features
15137============================
15138
15139   The Freescale S12Z version of `as' has a few machine dependent
15140features.
15141
15142* Menu:
15143
15144* S12Z Options::                S12Z Options
15145* S12Z Syntax::                 Syntax
15146
15147
15148File: as.info,  Node: S12Z Options,  Next: S12Z Syntax,  Up: S12Z-Dependent
15149
151509.24.1 S12Z Options
15151-------------------
15152
15153The S12Z version of `as' recognizes the following options:
15154
15155`-mreg-prefix=PREFIX'
15156     You can use the `-mreg-prefix=PFX' option to indicate that the
15157     assembler should expect all register names to be prefixed with the
15158     string PFX.
15159
15160     For an explanation of what this means and why it might be needed,
15161     see *Note S12Z Register Notation::.
15162
15163`-mdollar-hex'
15164     The `-mdollar-hex' option affects the way that literal hexadecimal
15165     constants are represented.  When this option is specified, the
15166     assembler will consider the `$' character as the start of a
15167     hexadecimal integer constant.  Without this option, the standard
15168     value of `0x' is expected.
15169
15170     If you use this option, then you cannot have symbol names starting
15171     with `$'.  `-mdollar-hex' is implied if the `--traditional-format'
15172     (*note traditional-format::) is used.
15173
15174
15175File: as.info,  Node: S12Z Syntax,  Prev: S12Z Options,  Up: S12Z-Dependent
15176
151779.24.2 Syntax
15178-------------
15179
15180* Menu:
15181
15182* S12Z Syntax Overview::                  General description
15183* S12Z Addressing Modes::                 Operands and their semantics
15184* S12Z Register Notation::                How to refer to registers
15185
15186
15187File: as.info,  Node: S12Z Syntax Overview,  Next: S12Z Addressing Modes,  Up: S12Z Syntax
15188
151899.24.2.1 Overview
15190.................
15191
15192In the S12Z syntax, the instruction name comes first and it may be
15193followed by one, or by several operands.  In most cases the maximum
15194number of operands is three.  Operands are separated by a comma (`,').
15195A comma however does not act as a separator if it appears within
15196parentheses (`()') or within square brackets (`[]').  `as' will
15197complain if too many, too few or inappropriate operands are specified
15198for a given instruction.
15199
15200   Some instructions accept and (in certain situations require) a suffix
15201indicating the size of the operand.  The suffix is separated from the
15202instruction name by a period (`.') and may be one of `b', `w', `p' or
15203`l' indicating `byte' (a single byte), `word' (2 bytes), `pointer' (3
15204bytes) or `long' (4 bytes) respectively.
15205
15206   Example:
15207
15208     	bset.b  0xA98, #5
15209     	mov.b   #6, 0x2409
15210     	ld      d0, #4
15211     	mov.l   (d0, x), 0x2409
15212     	inc     d0
15213     	cmp     d0, #12
15214     	blt     *-4
15215     	lea     x, 0x2409
15216     	st      y,  (1, x)
15217
15218   The presence of a `;' character anywhere on a line indicates the
15219start of a comment that extends to the end of that line.
15220
15221   A `*' or a `#' character at the start of a line also introduces a
15222line comment, but these characters do not work elsewhere on the line.
15223If the first character of the line is a `#' then as well as starting a
15224comment, the line could also be logical line number directive (*note
15225Comments::) or a preprocessor control command (*note Preprocessing::).
15226
15227   The S12Z assembler does not currently support a line separator
15228character.
15229
15230
15231File: as.info,  Node: S12Z Addressing Modes,  Next: S12Z Register Notation,  Prev: S12Z Syntax Overview,  Up: S12Z Syntax
15232
152339.24.2.2 Addressing Modes
15234.........................
15235
15236The following addressing modes are understood for the S12Z.
15237"Immediate"
15238     `#NUMBER'
15239
15240"Immediate Bit Field"
15241     `#WIDTH:OFFSET'
15242
15243     Bit field instructions in the immediate mode require the width and
15244     offset to be specified.  The WIDTH parameter specifies the number
15245     of bits in the field.  It should be a number in the range [1,32].
15246     OFFSET determines the position within the field where the operation
15247     should start.  It should be a number in the range [0,31].
15248
15249"Relative"
15250     `*SYMBOL', or `*[+-]DIGITS'
15251
15252     Program counter relative addresses have a width of 15 bits.  Thus,
15253     they must be within the range [-32768, 32767].
15254
15255"Register"
15256     `REG'
15257
15258     Some instructions accept a register as an operand.  In general,
15259     REG may be a data register (`D0', `D1' ... `D7'), the `X' register
15260     or the `Y' register.
15261
15262     A few instructions accept as an argument the stack pointer
15263     register (`S'), and/or the program counter (`P').
15264
15265     Some very special instructions accept arguments which refer to the
15266     condition code register.  For these arguments the  syntax is
15267     `CCR', `CCH' or `CCL' which refer to the complete condition code
15268     register, the condition code register high byte and the condition
15269     code register low byte respectively.
15270
15271"Absolute Direct"
15272     `SYMBOL', or `DIGITS'
15273
15274"Absolute Indirect"
15275     `[SYMBOL', or `DIGITS]'
15276
15277"Constant Offset Indexed"
15278     `(NUMBER,REG)'
15279
15280     REG may be either `X', `Y', `S' or `P' or one of the data
15281     registers `D0', `D1' ...  `D7'.  If any of the registers `D2' ...
15282     `D5' are specified, then the register value is treated as a signed
15283     value.  Otherwise it is treated as unsigned.  NUMBER may be any
15284     integer in the range [-8388608,8388607].
15285
15286"Offset Indexed Indirect"
15287     `[NUMBER,REG]'
15288
15289     REG may be either `X', `Y', `S' or `P'.  NUMBER may be any integer
15290     in the range [-8388608,8388607].
15291
15292"Auto Pre-Increment/Pre-Decrement/Post-Increment/Post-Decrement"
15293     `-REG', `+REG', `REG-' or `REG+'
15294
15295     This addressing mode is typically used to access a value at an
15296     address, and simultaneously to increment/decrement the register
15297     pointing to that address.  Thus REG may be any of the 24 bit
15298     registers `X', `Y', or `S'.  Pre-increment and post-decrement are
15299     not available for register `S' (only post-increment and
15300     pre-decrement are available).
15301
15302"Register Offset Direct"
15303     `(DATA-REG,REG)'
15304
15305     REG can be either `X', `Y', or `S'.  DATA-REG must be one of the
15306     data registers `D0', `D1' ... `D7'.  If any of the registers `D2'
15307     ... `D5' are specified, then the register value is treated as a
15308     signed value.  Otherwise it is treated as unsigned.
15309
15310"Register Offset Indirect"
15311     `[DATA-REG,REG]'
15312
15313     REG can be either `X' or `Y'.  DATA-REG must be one of the data
15314     registers `D0', `D1' ... `D7'.  If any of the registers `D2' ...
15315     `D5' are specified, then the register value is treated as a signed
15316     value.  Otherwise it is treated as unsigned.
15317
15318   For example:
15319
15320     	trap    #197        ;; Immediate mode
15321     	bra     *+49        ;; Relative mode
15322     	bra     .L0         ;;     ditto
15323     	jmp     0xFE0034    ;; Absolute direct mode
15324     	jmp     [0xFD0012]  ;; Absolute indirect mode
15325     	inc.b   (4,x)       ;; Constant offset indexed mode
15326     	jsr     (45, d0)    ;;     ditto
15327     	dec.w   [4,y]       ;; Constant offset indexed indirect mode
15328     	clr.p   (-s)        ;; Pre-decrement mode
15329     	neg.l   (d0, s)     ;; Register offset direct mode
15330     	com.b   [d1, x]     ;; Register offset indirect mode
15331     	psh     cch         ;; Register mode
15332
15333
15334File: as.info,  Node: S12Z Register Notation,  Prev: S12Z Addressing Modes,  Up: S12Z Syntax
15335
153369.24.2.3 Register Notation
15337..........................
15338
15339Without a register prefix (*note S12Z Options::), S12Z assembler code
15340is expected in the traditional format like this:
15341     lea s, (-2,s)
15342     st d2, (0,s)
15343     ld x,  symbol
15344     tfr d2, d6
15345     cmp d6, #1532
15346
15347However, if `as' is started with (for example) `-mreg-prefix=%' then
15348all register names must be prefixed with `%' as follows:
15349     lea %s, (-2,%s)
15350     st %d2, (0,%s)
15351     ld %x,  symbol
15352     tfr %d2, %d6
15353     cmp %d6, #1532
15354
15355   The register prefix feature is intended to be used by compilers to
15356avoid ambiguity between symbols and register names.  Consider the
15357following assembler instruction:
15358     st d0, d1
15359   The destination operand of this instruction could either refer to
15360the register `D1', or it could refer to the symbol named "d1".  If the
15361latter is intended then `as' must be invoked with `-mreg-prefix=PFX'
15362and the code written as
15363     st PFXd0, d1
15364   where PFX is the chosen register prefix.  For this reason, compiler
15365back-ends should choose a register prefix which cannot be confused with
15366a symbol name.
15367
15368
15369File: as.info,  Node: Meta-Dependent,  Next: MicroBlaze-Dependent,  Prev: S12Z-Dependent,  Up: Machine Dependencies
15370
153719.25 Meta Dependent Features
15372============================
15373
15374* Menu:
15375
15376* Meta Options::                Options
15377* Meta Syntax::                 Meta Assembler Syntax
15378
15379
15380File: as.info,  Node: Meta Options,  Next: Meta Syntax,  Up: Meta-Dependent
15381
153829.25.1 Options
15383--------------
15384
15385The Imagination Technologies Meta architecture is implemented in a
15386number of versions, with each new version adding new features such as
15387instructions and registers. For precise details of what instructions
15388each core supports, please see the chip's technical reference manual.
15389
15390   The following table lists all available Meta options.
15391
15392`-mcpu=metac11'
15393     Generate code for Meta 1.1.
15394
15395`-mcpu=metac12'
15396     Generate code for Meta 1.2.
15397
15398`-mcpu=metac21'
15399     Generate code for Meta 2.1.
15400
15401`-mfpu=metac21'
15402     Allow code to use FPU hardware of Meta 2.1.
15403
15404
15405
15406File: as.info,  Node: Meta Syntax,  Prev: Meta Options,  Up: Meta-Dependent
15407
154089.25.2 Syntax
15409-------------
15410
15411* Menu:
15412
15413* Meta-Chars::                Special Characters
15414* Meta-Regs::                 Register Names
15415
15416
15417File: as.info,  Node: Meta-Chars,  Next: Meta-Regs,  Up: Meta Syntax
15418
154199.25.2.1 Special Characters
15420...........................
15421
15422`!' is the line comment character.
15423
15424   You can use `;' instead of a newline to separate statements.
15425
15426   Since `$' has no special meaning, you may use it in symbol names.
15427
15428
15429File: as.info,  Node: Meta-Regs,  Prev: Meta-Chars,  Up: Meta Syntax
15430
154319.25.2.2 Register Names
15432.......................
15433
15434Registers can be specified either using their mnemonic names, such as
15435`D0Re0', or using the unit plus register number separated by a `.',
15436such as `D0.0'.
15437
15438
15439File: as.info,  Node: MicroBlaze-Dependent,  Next: MIPS-Dependent,  Prev: Meta-Dependent,  Up: Machine Dependencies
15440
154419.26 MicroBlaze Dependent Features
15442==================================
15443
15444   The Xilinx MicroBlaze processor family includes several variants,
15445all using the same core instruction set.  This chapter covers features
15446of the GNU assembler that are specific to the MicroBlaze architecture.
15447For details about the MicroBlaze instruction set, please see the
15448`MicroBlaze Processor Reference Guide (UG081)' available at
15449www.xilinx.com.
15450
15451* Menu:
15452
15453* MicroBlaze Directives::           Directives for MicroBlaze Processors.
15454* MicroBlaze Syntax::               Syntax for the MicroBlaze
15455
15456
15457File: as.info,  Node: MicroBlaze Directives,  Next: MicroBlaze Syntax,  Up: MicroBlaze-Dependent
15458
154599.26.1 Directives
15460-----------------
15461
15462A number of assembler directives are available for MicroBlaze.
15463
15464`.data8 EXPRESSION,...'
15465     This directive is an alias for `.byte'. Each expression is
15466     assembled into an eight-bit value.
15467
15468`.data16 EXPRESSION,...'
15469     This directive is an alias for `.hword'. Each expression is
15470     assembled into an 16-bit value.
15471
15472`.data32 EXPRESSION,...'
15473     This directive is an alias for `.word'. Each expression is
15474     assembled into an 32-bit value.
15475
15476`.ent NAME[,LABEL]'
15477     This directive is an alias for `.func' denoting the start of
15478     function NAME at (optional) LABEL.
15479
15480`.end NAME[,LABEL]'
15481     This directive is an alias for `.endfunc' denoting the end of
15482     function NAME.
15483
15484`.gpword LABEL,...'
15485     This directive is an alias for `.rva'.  The resolved address of
15486     LABEL is stored in the data section.
15487
15488`.weakext LABEL'
15489     Declare that LABEL is a weak external symbol.
15490
15491`.rodata'
15492     Switch to .rodata section. Equivalent to `.section .rodata'
15493
15494`.sdata2'
15495     Switch to .sdata2 section. Equivalent to `.section .sdata2'
15496
15497`.sdata'
15498     Switch to .sdata section. Equivalent to `.section .sdata'
15499
15500`.bss'
15501     Switch to .bss section. Equivalent to `.section .bss'
15502
15503`.sbss'
15504     Switch to .sbss section. Equivalent to `.section .sbss'
15505
15506
15507File: as.info,  Node: MicroBlaze Syntax,  Prev: MicroBlaze Directives,  Up: MicroBlaze-Dependent
15508
155099.26.2 Syntax for the MicroBlaze
15510--------------------------------
15511
15512* Menu:
15513
15514* MicroBlaze-Chars::                Special Characters
15515
15516
15517File: as.info,  Node: MicroBlaze-Chars,  Up: MicroBlaze Syntax
15518
155199.26.2.1 Special Characters
15520...........................
15521
15522The presence of a `#' on a line indicates the start of a comment that
15523extends to the end of the current line.
15524
15525   If a `#' appears as the first character of a line, the whole line is
15526treated as a comment, but in this case the line can also be a logical
15527line number directive (*note Comments::) or a preprocessor control
15528command (*note Preprocessing::).
15529
15530   The `;' character can be used to separate statements on the same
15531line.
15532
15533
15534File: as.info,  Node: MIPS-Dependent,  Next: MMIX-Dependent,  Prev: MicroBlaze-Dependent,  Up: Machine Dependencies
15535
155369.27 MIPS Dependent Features
15537============================
15538
15539   GNU `as' for MIPS architectures supports several different MIPS
15540processors, and MIPS ISA levels I through V, MIPS32, and MIPS64.  For
15541information about the MIPS instruction set, see `MIPS RISC
15542Architecture', by Kane and Heindrich (Prentice-Hall).  For an overview
15543of MIPS assembly conventions, see "Appendix D: Assembly Language
15544Programming" in the same work.
15545
15546* Menu:
15547
15548* MIPS Options::   	Assembler options
15549* MIPS Macros:: 	High-level assembly macros
15550* MIPS Symbol Sizes::	Directives to override the size of symbols
15551* MIPS Small Data:: 	Controlling the use of small data accesses
15552* MIPS ISA::    	Directives to override the ISA level
15553* MIPS assembly options:: Directives to control code generation
15554* MIPS autoextend::	Directives for extending MIPS 16 bit instructions
15555* MIPS insn::		Directive to mark data as an instruction
15556* MIPS FP ABIs::	Marking which FP ABI is in use
15557* MIPS NaN Encodings::	Directives to record which NaN encoding is being used
15558* MIPS Option Stack::	Directives to save and restore options
15559* MIPS ASE Instruction Generation Overrides:: Directives to control
15560  			generation of MIPS ASE instructions
15561* MIPS Floating-Point:: Directives to override floating-point options
15562* MIPS Syntax::         MIPS specific syntactical considerations
15563
15564
15565File: as.info,  Node: MIPS Options,  Next: MIPS Macros,  Up: MIPS-Dependent
15566
155679.27.1 Assembler options
15568------------------------
15569
15570The MIPS configurations of GNU `as' support these special options:
15571
15572`-G NUM'
15573     Set the "small data" limit to N bytes.  The default limit is 8
15574     bytes.  *Note Controlling the use of small data accesses: MIPS
15575     Small Data.
15576
15577`-EB'
15578`-EL'
15579     Any MIPS configuration of `as' can select big-endian or
15580     little-endian output at run time (unlike the other GNU development
15581     tools, which must be configured for one or the other).  Use `-EB'
15582     to select big-endian output, and `-EL' for little-endian.
15583
15584`-KPIC'
15585     Generate SVR4-style PIC.  This option tells the assembler to
15586     generate SVR4-style position-independent macro expansions.  It
15587     also tells the assembler to mark the output file as PIC.
15588
15589`-mvxworks-pic'
15590     Generate VxWorks PIC.  This option tells the assembler to generate
15591     VxWorks-style position-independent macro expansions.
15592
15593`-mips1'
15594`-mips2'
15595`-mips3'
15596`-mips4'
15597`-mips5'
15598`-mips32'
15599`-mips32r2'
15600`-mips32r3'
15601`-mips32r5'
15602`-mips32r6'
15603`-mips64'
15604`-mips64r2'
15605`-mips64r3'
15606`-mips64r5'
15607`-mips64r6'
15608     Generate code for a particular MIPS Instruction Set Architecture
15609     level.  `-mips1' corresponds to the R2000 and R3000 processors,
15610     `-mips2' to the R6000 processor, `-mips3' to the R4000 processor,
15611     and `-mips4' to the R8000 and R10000 processors.  `-mips5',
15612     `-mips32', `-mips32r2', `-mips32r3', `-mips32r5', `-mips32r6',
15613     `-mips64', `-mips64r2', `-mips64r3', `-mips64r5', and `-mips64r6'
15614     correspond to generic MIPS V, MIPS32, MIPS32 Release 2, MIPS32
15615     Release 3, MIPS32 Release 5, MIPS32 Release 6, MIPS64, and MIPS64
15616     Release 2, MIPS64 Release 3, MIPS64 Release 5, and MIPS64 Release
15617     6 ISA processors, respectively.  You can also switch instruction
15618     sets during the assembly; see *Note Directives to override the ISA
15619     level: MIPS ISA.
15620
15621`-mgp32'
15622`-mfp32'
15623     Some macros have different expansions for 32-bit and 64-bit
15624     registers.  The register sizes are normally inferred from the ISA
15625     and ABI, but these flags force a certain group of registers to be
15626     treated as 32 bits wide at all times.  `-mgp32' controls the size
15627     of general-purpose registers and `-mfp32' controls the size of
15628     floating-point registers.
15629
15630     The `.set gp=32' and `.set fp=32' directives allow the size of
15631     registers to be changed for parts of an object. The default value
15632     is restored by `.set gp=default' and `.set fp=default'.
15633
15634     On some MIPS variants there is a 32-bit mode flag; when this flag
15635     is set, 64-bit instructions generate a trap.  Also, some 32-bit
15636     OSes only save the 32-bit registers on a context switch, so it is
15637     essential never to use the 64-bit registers.
15638
15639`-mgp64'
15640`-mfp64'
15641     Assume that 64-bit registers are available.  This is provided in
15642     the interests of symmetry with `-mgp32' and `-mfp32'.
15643
15644     The `.set gp=64' and `.set fp=64' directives allow the size of
15645     registers to be changed for parts of an object. The default value
15646     is restored by `.set gp=default' and `.set fp=default'.
15647
15648`-mfpxx'
15649     Make no assumptions about whether 32-bit or 64-bit floating-point
15650     registers are available. This is provided to support having modules
15651     compatible with either `-mfp32' or `-mfp64'. This option can only
15652     be used with MIPS II and above.
15653
15654     The `.set fp=xx' directive allows a part of an object to be marked
15655     as not making assumptions about 32-bit or 64-bit FP registers.  The
15656     default value is restored by `.set fp=default'.
15657
15658`-modd-spreg'
15659`-mno-odd-spreg'
15660     Enable use of floating-point operations on odd-numbered
15661     single-precision registers when supported by the ISA.  `-mfpxx'
15662     implies `-mno-odd-spreg', otherwise the default is `-modd-spreg'
15663
15664`-mips16'
15665`-no-mips16'
15666     Generate code for the MIPS 16 processor.  This is equivalent to
15667     putting `.module mips16' at the start of the assembly file.
15668     `-no-mips16' turns off this option.
15669
15670`-mmips16e2'
15671`-mno-mips16e2'
15672     Enable the use of MIPS16e2 instructions in MIPS16 mode.  This is
15673     equivalent to putting `.module mips16e2' at the start of the
15674     assembly file.  `-mno-mips16e2' turns off this option.
15675
15676`-mmicromips'
15677`-mno-micromips'
15678     Generate code for the microMIPS processor.  This is equivalent to
15679     putting `.module micromips' at the start of the assembly file.
15680     `-mno-micromips' turns off this option.  This is equivalent to
15681     putting `.module nomicromips' at the start of the assembly file.
15682
15683`-msmartmips'
15684`-mno-smartmips'
15685     Enables the SmartMIPS extensions to the MIPS32 instruction set,
15686     which provides a number of new instructions which target smartcard
15687     and cryptographic applications.  This is equivalent to putting
15688     `.module smartmips' at the start of the assembly file.
15689     `-mno-smartmips' turns off this option.
15690
15691`-mips3d'
15692`-no-mips3d'
15693     Generate code for the MIPS-3D Application Specific Extension.
15694     This tells the assembler to accept MIPS-3D instructions.
15695     `-no-mips3d' turns off this option.
15696
15697`-mdmx'
15698`-no-mdmx'
15699     Generate code for the MDMX Application Specific Extension.  This
15700     tells the assembler to accept MDMX instructions.  `-no-mdmx' turns
15701     off this option.
15702
15703`-mdsp'
15704`-mno-dsp'
15705     Generate code for the DSP Release 1 Application Specific Extension.
15706     This tells the assembler to accept DSP Release 1 instructions.
15707     `-mno-dsp' turns off this option.
15708
15709`-mdspr2'
15710`-mno-dspr2'
15711     Generate code for the DSP Release 2 Application Specific Extension.
15712     This option implies `-mdsp'.  This tells the assembler to accept
15713     DSP Release 2 instructions.  `-mno-dspr2' turns off this option.
15714
15715`-mdspr3'
15716`-mno-dspr3'
15717     Generate code for the DSP Release 3 Application Specific Extension.
15718     This option implies `-mdsp' and `-mdspr2'.  This tells the
15719     assembler to accept DSP Release 3 instructions.  `-mno-dspr3'
15720     turns off this option.
15721
15722`-mmt'
15723`-mno-mt'
15724     Generate code for the MT Application Specific Extension.  This
15725     tells the assembler to accept MT instructions.  `-mno-mt' turns
15726     off this option.
15727
15728`-mmcu'
15729`-mno-mcu'
15730     Generate code for the MCU Application Specific Extension.  This
15731     tells the assembler to accept MCU instructions.  `-mno-mcu' turns
15732     off this option.
15733
15734`-mmsa'
15735`-mno-msa'
15736     Generate code for the MIPS SIMD Architecture Extension.  This
15737     tells the assembler to accept MSA instructions.  `-mno-msa' turns
15738     off this option.
15739
15740`-mxpa'
15741`-mno-xpa'
15742     Generate code for the MIPS eXtended Physical Address (XPA)
15743     Extension.  This tells the assembler to accept XPA instructions.
15744     `-mno-xpa' turns off this option.
15745
15746`-mvirt'
15747`-mno-virt'
15748     Generate code for the Virtualization Application Specific
15749     Extension.  This tells the assembler to accept Virtualization
15750     instructions.  `-mno-virt' turns off this option.
15751
15752`-mcrc'
15753`-mno-crc'
15754     Generate code for the cyclic redundancy check (CRC) Application
15755     Specific Extension.  This tells the assembler to accept CRC
15756     instructions.  `-mno-crc' turns off this option.
15757
15758`-mginv'
15759`-mno-ginv'
15760     Generate code for the Global INValidate (GINV) Application Specific
15761     Extension.  This tells the assembler to accept GINV instructions.
15762     `-mno-ginv' turns off this option.
15763
15764`-mloongson-mmi'
15765`-mno-loongson-mmi'
15766     Generate code for the Loongson MultiMedia extensions Instructions
15767     (MMI) Application Specific Extension.  This tells the assembler to
15768     accept MMI instructions.  `-mno-loongson-mmi' turns off this
15769     option.
15770
15771`-mloongson-cam'
15772`-mno-loongson-cam'
15773     Generate code for the Loongson Content Address Memory (CAM)
15774     Application Specific Extension.  This tells the assembler to
15775     accept CAM instructions.  `-mno-loongson-cam' turns off this
15776     option.
15777
15778`-mloongson-ext'
15779`-mno-loongson-ext'
15780     Generate code for the Loongson EXTensions (EXT) instructions
15781     Application Specific Extension.  This tells the assembler to
15782     accept EXT instructions.  `-mno-loongson-ext' turns off this
15783     option.
15784
15785`-mloongson-ext2'
15786`-mno-loongson-ext2'
15787     Generate code for the Loongson EXTensions R2 (EXT2) instructions
15788     Application Specific Extension.  This tells the assembler to
15789     accept EXT2 instructions.  `-mno-loongson-ext2' turns off this
15790     option.
15791
15792`-minsn32'
15793`-mno-insn32'
15794     Only use 32-bit instruction encodings when generating code for the
15795     microMIPS processor.  This option inhibits the use of any 16-bit
15796     instructions.  This is equivalent to putting `.set insn32' at the
15797     start of the assembly file.  `-mno-insn32' turns off this option.
15798     This is equivalent to putting `.set noinsn32' at the start of the
15799     assembly file.  By default `-mno-insn32' is selected, allowing all
15800     instructions to be used.
15801
15802`-mfix7000'
15803`-mno-fix7000'
15804     Cause nops to be inserted if the read of the destination register
15805     of an mfhi or mflo instruction occurs in the following two
15806     instructions.
15807
15808`-mfix-rm7000'
15809`-mno-fix-rm7000'
15810     Cause nops to be inserted if a dmult or dmultu instruction is
15811     followed by a load instruction.
15812
15813`-mfix-loongson2f-jump'
15814`-mno-fix-loongson2f-jump'
15815     Eliminate instruction fetch from outside 256M region to work
15816     around the Loongson2F `jump' instructions.  Without it, under
15817     extreme cases, the kernel may crash.  The issue has been solved in
15818     latest processor batches, but this fix has no side effect to them.
15819
15820`-mfix-loongson2f-nop'
15821`-mno-fix-loongson2f-nop'
15822     Replace nops by `or at,at,zero' to work around the Loongson2F
15823     `nop' errata.  Without it, under extreme cases, the CPU might
15824     deadlock.  The issue has been solved in later Loongson2F batches,
15825     but this fix has no side effect to them.
15826
15827`-mfix-loongson3-llsc'
15828`-mno-fix-loongson3-llsc'
15829     Insert `sync' before `ll' and `lld' to work around Loongson3 LLSC
15830     errata.  Without it, under extrame cases, the CPU might deadlock.
15831     The default can be controlled by the
15832     `--enable-mips-fix-loongson3-llsc=[yes|no]' configure option.
15833
15834`-mfix-vr4120'
15835`-mno-fix-vr4120'
15836     Insert nops to work around certain VR4120 errata.  This option is
15837     intended to be used on GCC-generated code: it is not designed to
15838     catch all problems in hand-written assembler code.
15839
15840`-mfix-vr4130'
15841`-mno-fix-vr4130'
15842     Insert nops to work around the VR4130 `mflo'/`mfhi' errata.
15843
15844`-mfix-loongson2f-btb'
15845`-mno-fix-loongson2f-btb'
15846     Clear the Branch Target Buffer before any jump through a register.
15847     This option is intended to be used on kernel code for the
15848     Loongson 2F processor only; userland code compiled with this
15849     option will fault, and kernel code compiled with this option run
15850     on another processor than Loongson 2F will yield unpredictable
15851     results.
15852
15853`-mfix-24k'
15854`-mno-fix-24k'
15855     Insert nops to work around the 24K `eret'/`deret' errata.
15856
15857`-mfix-cn63xxp1'
15858`-mno-fix-cn63xxp1'
15859     Replace `pref' hints 0 - 4 and 6 - 24 with hint 28 to work around
15860     certain CN63XXP1 errata.
15861
15862`-mfix-r5900'
15863`-mno-fix-r5900'
15864     Do not attempt to schedule the preceding instruction into the
15865     delay slot of a branch instruction placed at the end of a short
15866     loop of six instructions or fewer and always schedule a `nop'
15867     instruction there instead.  The short loop bug under certain
15868     conditions causes loops to execute only once or twice, due to a
15869     hardware bug in the R5900 chip.
15870
15871`-m4010'
15872`-no-m4010'
15873     Generate code for the LSI R4010 chip.  This tells the assembler to
15874     accept the R4010-specific instructions (`addciu', `ffc', etc.),
15875     and to not schedule `nop' instructions around accesses to the `HI'
15876     and `LO' registers.  `-no-m4010' turns off this option.
15877
15878`-m4650'
15879`-no-m4650'
15880     Generate code for the MIPS R4650 chip.  This tells the assembler
15881     to accept the `mad' and `madu' instruction, and to not schedule
15882     `nop' instructions around accesses to the `HI' and `LO' registers.
15883     `-no-m4650' turns off this option.
15884
15885`-m3900'
15886`-no-m3900'
15887`-m4100'
15888`-no-m4100'
15889     For each option `-mNNNN', generate code for the MIPS RNNNN chip.
15890     This tells the assembler to accept instructions specific to that
15891     chip, and to schedule for that chip's hazards.
15892
15893`-march=CPU'
15894     Generate code for a particular MIPS CPU.  It is exactly equivalent
15895     to `-mCPU', except that there are more value of CPU understood.
15896     Valid CPU value are:
15897
15898          2000, 3000, 3900, 4000, 4010, 4100, 4111, vr4120, vr4130,
15899          vr4181, 4300, 4400, 4600, 4650, 5000, rm5200, rm5230, rm5231,
15900          rm5261, rm5721, vr5400, vr5500, 6000, rm7000, 8000, rm9000,
15901          10000, 12000, 14000, 16000, 4kc, 4km, 4kp, 4ksc, 4kec, 4kem,
15902          4kep, 4ksd, m4k, m4kp, m14k, m14kc, m14ke, m14kec, 24kc,
15903          24kf2_1, 24kf, 24kf1_1, 24kec, 24kef2_1, 24kef, 24kef1_1,
15904          34kc, 34kf2_1, 34kf, 34kf1_1, 34kn, 74kc, 74kf2_1, 74kf,
15905          74kf1_1, 74kf3_2, 1004kc, 1004kf2_1, 1004kf, 1004kf1_1,
15906          interaptiv, interaptiv-mr2, m5100, m5101, p5600, 5kc, 5kf,
15907          20kc, 25kf, sb1, sb1a, i6400, i6500, p6600, loongson2e,
15908          loongson2f, gs464, gs464e, gs264e, octeon, octeon+, octeon2,
15909          octeon3, xlr, xlp
15910
15911     For compatibility reasons, `Nx' and `Bfx' are accepted as synonyms
15912     for `Nf1_1'.  These values are deprecated.
15913
15914`-mtune=CPU'
15915     Schedule and tune for a particular MIPS CPU.  Valid CPU values are
15916     identical to `-march=CPU'.
15917
15918`-mabi=ABI'
15919     Record which ABI the source code uses.  The recognized arguments
15920     are: `32', `n32', `o64', `64' and `eabi'.
15921
15922`-msym32'
15923`-mno-sym32'
15924     Equivalent to adding `.set sym32' or `.set nosym32' to the
15925     beginning of the assembler input.  *Note MIPS Symbol Sizes::.
15926
15927`-nocpp'
15928     This option is ignored.  It is accepted for command-line
15929     compatibility with other assemblers, which use it to turn off C
15930     style preprocessing.  With GNU `as', there is no need for
15931     `-nocpp', because the GNU assembler itself never runs the C
15932     preprocessor.
15933
15934`-msoft-float'
15935`-mhard-float'
15936     Disable or enable floating-point instructions.  Note that by
15937     default floating-point instructions are always allowed even with
15938     CPU targets that don't have support for these instructions.
15939
15940`-msingle-float'
15941`-mdouble-float'
15942     Disable or enable double-precision floating-point operations.  Note
15943     that by default double-precision floating-point operations are
15944     always allowed even with CPU targets that don't have support for
15945     these operations.
15946
15947`--construct-floats'
15948`--no-construct-floats'
15949     The `--no-construct-floats' option disables the construction of
15950     double width floating point constants by loading the two halves of
15951     the value into the two single width floating point registers that
15952     make up the double width register.  This feature is useful if the
15953     processor support the FR bit in its status  register, and this bit
15954     is known (by the programmer) to be set.  This bit prevents the
15955     aliasing of the double width register by the single width
15956     registers.
15957
15958     By default `--construct-floats' is selected, allowing construction
15959     of these floating point constants.
15960
15961`--relax-branch'
15962`--no-relax-branch'
15963     The `--relax-branch' option enables the relaxation of out-of-range
15964     branches.  Any branches whose target cannot be reached directly are
15965     converted to a small instruction sequence including an
15966     inverse-condition branch to the physically next instruction, and a
15967     jump to the original target is inserted between the two
15968     instructions.  In PIC code the jump will involve further
15969     instructions for address calculation.
15970
15971     The `BC1ANY2F', `BC1ANY2T', `BC1ANY4F', `BC1ANY4T', `BPOSGE32' and
15972     `BPOSGE64' instructions are excluded from relaxation, because they
15973     have no complementing counterparts.  They could be relaxed with
15974     the use of a longer sequence involving another branch, however
15975     this has not been implemented and if their target turns out of
15976     reach, they produce an error even if branch relaxation is enabled.
15977
15978     Also no MIPS16 branches are ever relaxed.
15979
15980     By default `--no-relax-branch' is selected, causing any
15981     out-of-range branches to produce an error.
15982
15983`-mignore-branch-isa'
15984`-mno-ignore-branch-isa'
15985     Ignore branch checks for invalid transitions between ISA modes.
15986
15987     The semantics of branches does not provide for an ISA mode switch,
15988     so in most cases the ISA mode a branch has been encoded for has to
15989     be the same as the ISA mode of the branch's target label.  If the
15990     ISA modes do not match, then such a branch, if taken, will cause
15991     the ISA mode to remain unchanged and instructions that follow will
15992     be executed in the wrong ISA mode causing the program to misbehave
15993     or crash.
15994
15995     In the case of the `BAL' instruction it may be possible to relax
15996     it to an equivalent `JALX' instruction so that the ISA mode is
15997     switched at the run time as required.  For other branches no
15998     relaxation is possible and therefore GAS has checks implemented
15999     that verify in branch assembly that the two ISA modes match, and
16000     report an error otherwise so that the problem with code can be
16001     diagnosed at the assembly time rather than at the run time.
16002
16003     However some assembly code, including generated code produced by
16004     some versions of GCC, may incorrectly include branches to data
16005     labels, which appear to require a mode switch but are either dead
16006     or immediately followed by valid instructions encoded for the same
16007     ISA the branch has been encoded for.  While not strictly correct
16008     at the source level such code will execute as intended, so to help
16009     with these cases `-mignore-branch-isa' is supported which disables
16010     ISA mode checks for branches.
16011
16012     By default `-mno-ignore-branch-isa' is selected, causing any
16013     invalid branch requiring a transition between ISA modes to produce
16014     an error.
16015
16016`-mnan=ENCODING'
16017     This option indicates whether the source code uses the IEEE 2008
16018     NaN encoding (`-mnan=2008') or the original MIPS encoding
16019     (`-mnan=legacy').  It is equivalent to adding a `.nan' directive
16020     to the beginning of the source file.  *Note MIPS NaN Encodings::.
16021
16022     `-mnan=legacy' is the default if no `-mnan' option or `.nan'
16023     directive is used.
16024
16025`--trap'
16026`--no-break'
16027     `as' automatically macro expands certain division and
16028     multiplication instructions to check for overflow and division by
16029     zero.  This option causes `as' to generate code to take a trap
16030     exception rather than a break exception when an error is detected.
16031     The trap instructions are only supported at Instruction Set
16032     Architecture level 2 and higher.
16033
16034`--break'
16035`--no-trap'
16036     Generate code to take a break exception rather than a trap
16037     exception when an error is detected.  This is the default.
16038
16039`-mpdr'
16040`-mno-pdr'
16041     Control generation of `.pdr' sections.  Off by default on IRIX, on
16042     elsewhere.
16043
16044`-mshared'
16045`-mno-shared'
16046     When generating code using the Unix calling conventions (selected
16047     by `-KPIC' or `-mcall_shared'), gas will normally generate code
16048     which can go into a shared library.  The `-mno-shared' option
16049     tells gas to generate code which uses the calling convention, but
16050     can not go into a shared library.  The resulting code is slightly
16051     more efficient.  This option only affects the handling of the
16052     `.cpload' and `.cpsetup' pseudo-ops.
16053
16054
16055File: as.info,  Node: MIPS Macros,  Next: MIPS Symbol Sizes,  Prev: MIPS Options,  Up: MIPS-Dependent
16056
160579.27.2 High-level assembly macros
16058---------------------------------
16059
16060MIPS assemblers have traditionally provided a wider range of
16061instructions than the MIPS architecture itself.  These extra
16062instructions are usually referred to as "macro" instructions (1).
16063
16064   Some MIPS macro instructions extend an underlying architectural
16065instruction while others are entirely new.  An example of the former
16066type is `and', which allows the third operand to be either a register
16067or an arbitrary immediate value.  Examples of the latter type include
16068`bgt', which branches to the third operand when the first operand is
16069greater than the second operand, and `ulh', which implements an
16070unaligned 2-byte load.
16071
16072   One of the most common extensions provided by macros is to expand
16073memory offsets to the full address range (32 or 64 bits) and to allow
16074symbolic offsets such as `my_data + 4' to be used in place of integer
16075constants.  For example, the architectural instruction `lbu' allows
16076only a signed 16-bit offset, whereas the macro `lbu' allows code such
16077as `lbu $4,array+32769($5)'.  The implementation of these symbolic
16078offsets depends on several factors, such as whether the assembler is
16079generating SVR4-style PIC (selected by `-KPIC', *note Assembler
16080options: MIPS Options.), the size of symbols (*note Directives to
16081override the size of symbols: MIPS Symbol Sizes.), and the small data
16082limit (*note Controlling the use of small data accesses: MIPS Small
16083Data.).
16084
16085   Sometimes it is undesirable to have one assembly instruction expand
16086to several machine instructions.  The directive `.set nomacro' tells
16087the assembler to warn when this happens.  `.set macro' restores the
16088default behavior.
16089
16090   Some macro instructions need a temporary register to store
16091intermediate results.  This register is usually `$1', also known as
16092`$at', but it can be changed to any core register REG using `.set
16093at=REG'.  Note that `$at' always refers to `$1' regardless of which
16094register is being used as the temporary register.
16095
16096   Implicit uses of the temporary register in macros could interfere
16097with explicit uses in the assembly code.  The assembler therefore warns
16098whenever it sees an explicit use of the temporary register.  The
16099directive `.set noat' silences this warning while `.set at' restores
16100the default behavior.  It is safe to use `.set noat' while `.set
16101nomacro' is in effect since single-instruction macros never need a
16102temporary register.
16103
16104   Note that while the GNU assembler provides these macros for
16105compatibility, it does not make any attempt to optimize them with the
16106surrounding code.
16107
16108   ---------- Footnotes ----------
16109
16110   (1) The term "macro" is somewhat overloaded here, since these macros
16111have no relation to those defined by `.macro', *note `.macro': Macro.
16112
16113
16114File: as.info,  Node: MIPS Symbol Sizes,  Next: MIPS Small Data,  Prev: MIPS Macros,  Up: MIPS-Dependent
16115
161169.27.3 Directives to override the size of symbols
16117-------------------------------------------------
16118
16119The n64 ABI allows symbols to have any 64-bit value.  Although this
16120provides a great deal of flexibility, it means that some macros have
16121much longer expansions than their 32-bit counterparts.  For example,
16122the non-PIC expansion of `dla $4,sym' is usually:
16123
16124     lui     $4,%highest(sym)
16125     lui     $1,%hi(sym)
16126     daddiu  $4,$4,%higher(sym)
16127     daddiu  $1,$1,%lo(sym)
16128     dsll32  $4,$4,0
16129     daddu   $4,$4,$1
16130
16131   whereas the 32-bit expansion is simply:
16132
16133     lui     $4,%hi(sym)
16134     daddiu  $4,$4,%lo(sym)
16135
16136   n64 code is sometimes constructed in such a way that all symbolic
16137constants are known to have 32-bit values, and in such cases, it's
16138preferable to use the 32-bit expansion instead of the 64-bit expansion.
16139
16140   You can use the `.set sym32' directive to tell the assembler that,
16141from this point on, all expressions of the form `SYMBOL' or `SYMBOL +
16142OFFSET' have 32-bit values.  For example:
16143
16144     .set sym32
16145     dla     $4,sym
16146     lw      $4,sym+16
16147     sw      $4,sym+0x8000($4)
16148
16149   will cause the assembler to treat `sym', `sym+16' and `sym+0x8000'
16150as 32-bit values.  The handling of non-symbolic addresses is not
16151affected.
16152
16153   The directive `.set nosym32' ends a `.set sym32' block and reverts
16154to the normal behavior.  It is also possible to change the symbol size
16155using the command-line options `-msym32' and `-mno-sym32'.
16156
16157   These options and directives are always accepted, but at present,
16158they have no effect for anything other than n64.
16159
16160
16161File: as.info,  Node: MIPS Small Data,  Next: MIPS ISA,  Prev: MIPS Symbol Sizes,  Up: MIPS-Dependent
16162
161639.27.4 Controlling the use of small data accesses
16164-------------------------------------------------
16165
16166It often takes several instructions to load the address of a symbol.
16167For example, when `addr' is a 32-bit symbol, the non-PIC expansion of
16168`dla $4,addr' is usually:
16169
16170     lui     $4,%hi(addr)
16171     daddiu  $4,$4,%lo(addr)
16172
16173   The sequence is much longer when `addr' is a 64-bit symbol.  *Note
16174Directives to override the size of symbols: MIPS Symbol Sizes.
16175
16176   In order to cut down on this overhead, most embedded MIPS systems
16177set aside a 64-kilobyte "small data" area and guarantee that all data
16178of size N and smaller will be placed in that area.  The limit N is
16179passed to both the assembler and the linker using the command-line
16180option `-G N', *note Assembler options: MIPS Options.  Note that the
16181same value of N must be used when linking and when assembling all input
16182files to the link; any inconsistency could cause a relocation overflow
16183error.
16184
16185   The size of an object in the `.bss' section is set by the `.comm' or
16186`.lcomm' directive that defines it.  The size of an external object may
16187be set with the `.extern' directive.  For example, `.extern sym,4'
16188declares that the object at `sym' is 4 bytes in length, while leaving
16189`sym' otherwise undefined.
16190
16191   When no `-G' option is given, the default limit is 8 bytes.  The
16192option `-G 0' prevents any data from being automatically classified as
16193small.
16194
16195   It is also possible to mark specific objects as small by putting them
16196in the special sections `.sdata' and `.sbss', which are "small"
16197counterparts of `.data' and `.bss' respectively.  The toolchain will
16198treat such data as small regardless of the `-G' setting.
16199
16200   On startup, systems that support a small data area are expected to
16201initialize register `$28', also known as `$gp', in such a way that
16202small data can be accessed using a 16-bit offset from that register.
16203For example, when `addr' is small data, the `dla $4,addr' instruction
16204above is equivalent to:
16205
16206     daddiu  $4,$28,%gp_rel(addr)
16207
16208   Small data is not supported for SVR4-style PIC.
16209
16210
16211File: as.info,  Node: MIPS ISA,  Next: MIPS assembly options,  Prev: MIPS Small Data,  Up: MIPS-Dependent
16212
162139.27.5 Directives to override the ISA level
16214-------------------------------------------
16215
16216GNU `as' supports an additional directive to change the MIPS
16217Instruction Set Architecture level on the fly: `.set mipsN'.  N should
16218be a number from 0 to 5, or 32, 32r2, 32r3, 32r5, 32r6, 64, 64r2, 64r3,
1621964r5 or 64r6.  The values other than 0 make the assembler accept
16220instructions for the corresponding ISA level, from that point on in the
16221assembly.  `.set mipsN' affects not only which instructions are
16222permitted, but also how certain macros are expanded.  `.set mips0'
16223restores the ISA level to its original level: either the level you
16224selected with command-line options, or the default for your
16225configuration.  You can use this feature to permit specific MIPS III
16226instructions while assembling in 32 bit mode.  Use this directive with
16227care!
16228
16229   The `.set arch=CPU' directive provides even finer control.  It
16230changes the effective CPU target and allows the assembler to use
16231instructions specific to a particular CPU.  All CPUs supported by the
16232`-march' command-line option are also selectable by this directive.
16233The original value is restored by `.set arch=default'.
16234
16235   The directive `.set mips16' puts the assembler into MIPS 16 mode, in
16236which it will assemble instructions for the MIPS 16 processor.  Use
16237`.set nomips16' to return to normal 32 bit mode.
16238
16239   Traditional MIPS assemblers do not support this directive.
16240
16241   The directive `.set micromips' puts the assembler into microMIPS
16242mode, in which it will assemble instructions for the microMIPS
16243processor.  Use `.set nomicromips' to return to normal 32 bit mode.
16244
16245   Traditional MIPS assemblers do not support this directive.
16246
16247
16248File: as.info,  Node: MIPS assembly options,  Next: MIPS autoextend,  Prev: MIPS ISA,  Up: MIPS-Dependent
16249
162509.27.6 Directives to control code generation
16251--------------------------------------------
16252
16253The `.module' directive allows command-line options to be set directly
16254from assembly.  The format of the directive matches the `.set'
16255directive but only those options which are relevant to a whole module
16256are supported.  The effect of a `.module' directive is the same as the
16257corresponding command-line option.  Where `.set' directives support
16258returning to a default then the `.module' directives do not as they
16259define the defaults.
16260
16261   These module-level directives must appear first in assembly.
16262
16263   Traditional MIPS assemblers do not support this directive.
16264
16265   The directive `.set insn32' makes the assembler only use 32-bit
16266instruction encodings when generating code for the microMIPS processor.
16267This directive inhibits the use of any 16-bit instructions from that
16268point on in the assembly.  The `.set noinsn32' directive allows 16-bit
16269instructions to be accepted.
16270
16271   Traditional MIPS assemblers do not support this directive.
16272
16273
16274File: as.info,  Node: MIPS autoextend,  Next: MIPS insn,  Prev: MIPS assembly options,  Up: MIPS-Dependent
16275
162769.27.7 Directives for extending MIPS 16 bit instructions
16277--------------------------------------------------------
16278
16279By default, MIPS 16 instructions are automatically extended to 32 bits
16280when necessary.  The directive `.set noautoextend' will turn this off.
16281When `.set noautoextend' is in effect, any 32 bit instruction must be
16282explicitly extended with the `.e' modifier (e.g., `li.e $4,1000').  The
16283directive `.set autoextend' may be used to once again automatically
16284extend instructions when necessary.
16285
16286   This directive is only meaningful when in MIPS 16 mode.  Traditional
16287MIPS assemblers do not support this directive.
16288
16289
16290File: as.info,  Node: MIPS insn,  Next: MIPS FP ABIs,  Prev: MIPS autoextend,  Up: MIPS-Dependent
16291
162929.27.8 Directive to mark data as an instruction
16293-----------------------------------------------
16294
16295The `.insn' directive tells `as' that the following data is actually
16296instructions.  This makes a difference in MIPS 16 and microMIPS modes:
16297when loading the address of a label which precedes instructions, `as'
16298automatically adds 1 to the value, so that jumping to the loaded
16299address will do the right thing.
16300
16301   The `.global' and `.globl' directives supported by `as' will by
16302default mark the symbol as pointing to a region of data not code.  This
16303means that, for example, any instructions following such a symbol will
16304not be disassembled by `objdump' as it will regard them as data.  To
16305change this behavior an optional section name can be placed after the
16306symbol name in the `.global' directive.  If this section exists and is
16307known to be a code section, then the symbol will be marked as pointing
16308at code not data.  Ie the syntax for the directive is:
16309
16310   `.global SYMBOL[ SECTION][, SYMBOL[ SECTION]] ...',
16311
16312   Here is a short example:
16313
16314             .global foo .text, bar, baz .data
16315     foo:
16316             nop
16317     bar:
16318             .word 0x0
16319     baz:
16320             .word 0x1
16321
16322
16323File: as.info,  Node: MIPS FP ABIs,  Next: MIPS NaN Encodings,  Prev: MIPS insn,  Up: MIPS-Dependent
16324
163259.27.9 Directives to control the FP ABI
16326---------------------------------------
16327
16328* Menu:
16329
16330* MIPS FP ABI History::                History of FP ABIs
16331* MIPS FP ABI Variants::               Supported FP ABIs
16332* MIPS FP ABI Selection::              Automatic selection of FP ABI
16333* MIPS FP ABI Compatibility::          Linking different FP ABI variants
16334
16335
16336File: as.info,  Node: MIPS FP ABI History,  Next: MIPS FP ABI Variants,  Up: MIPS FP ABIs
16337
163389.27.9.1 History of FP ABIs
16339...........................
16340
16341The MIPS ABIs support a variety of different floating-point extensions
16342where calling-convention and register sizes vary for floating-point
16343data.  The extensions exist to support a wide variety of optional
16344architecture features.  The resulting ABI variants are generally
16345incompatible with each other and must be tracked carefully.
16346
16347   Traditionally the use of an explicit `.gnu_attribute 4, N' directive
16348is used to indicate which ABI is in use by a specific module.  It was
16349then left to the user to ensure that command-line options and the
16350selected ABI were compatible with some potential for inconsistencies.
16351
16352
16353File: as.info,  Node: MIPS FP ABI Variants,  Next: MIPS FP ABI Selection,  Prev: MIPS FP ABI History,  Up: MIPS FP ABIs
16354
163559.27.9.2 Supported FP ABIs
16356..........................
16357
16358The supported floating-point ABI variants are:
16359
16360`0 - No floating-point'
16361     This variant is used to indicate that floating-point is not used
16362     within the module at all and therefore has no impact on the ABI.
16363     This is the default.
16364
16365`1 - Double-precision'
16366     This variant indicates that double-precision support is used.  For
16367     64-bit ABIs this means that 64-bit wide floating-point registers
16368     are required.  For 32-bit ABIs this means that 32-bit wide
16369     floating-point registers are required and double-precision
16370     operations use pairs of registers.
16371
16372`2 - Single-precision'
16373     This variant indicates that single-precision support is used.
16374     Double precision operations will be supported via soft-float
16375     routines.
16376
16377`3 - Soft-float'
16378     This variant indicates that although floating-point support is
16379     used all operations are emulated in software.  This means the ABI
16380     is modified to pass all floating-point data in general-purpose
16381     registers.
16382
16383`4 - Deprecated'
16384     This variant existed as an initial attempt at supporting 64-bit
16385     wide floating-point registers for O32 ABI on a MIPS32r2 CPU.  This
16386     has been superseded by 5, 6 and 7.
16387
16388`5 - Double-precision 32-bit CPU, 32-bit or 64-bit FPU'
16389     This variant is used by 32-bit ABIs to indicate that the
16390     floating-point code in the module has been designed to operate
16391     correctly with either 32-bit wide or 64-bit wide floating-point
16392     registers.  Double-precision support is used.  Only O32 currently
16393     supports this variant and requires a minimum architecture of MIPS
16394     II.
16395
16396`6 - Double-precision 32-bit FPU, 64-bit FPU'
16397     This variant is used by 32-bit ABIs to indicate that the
16398     floating-point code in the module requires 64-bit wide
16399     floating-point registers.  Double-precision support is used.  Only
16400     O32 currently supports this variant and requires a minimum
16401     architecture of MIPS32r2.
16402
16403`7 - Double-precision compat 32-bit FPU, 64-bit FPU'
16404     This variant is used by 32-bit ABIs to indicate that the
16405     floating-point code in the module requires 64-bit wide
16406     floating-point registers.  Double-precision support is used.  This
16407     differs from the previous ABI as it restricts use of odd-numbered
16408     single-precision registers.  Only O32 currently supports this
16409     variant and requires a minimum architecture of MIPS32r2.
16410
16411
16412File: as.info,  Node: MIPS FP ABI Selection,  Next: MIPS FP ABI Compatibility,  Prev: MIPS FP ABI Variants,  Up: MIPS FP ABIs
16413
164149.27.9.3 Automatic selection of FP ABI
16415......................................
16416
16417In order to simplify and add safety to the process of selecting the
16418correct floating-point ABI, the assembler will automatically infer the
16419correct `.gnu_attribute 4, N' directive based on command-line options
16420and `.module' overrides.  Where an explicit `.gnu_attribute 4, N'
16421directive has been seen then a warning will be raised if it does not
16422match an inferred setting.
16423
16424   The floating-point ABI is inferred as follows.  If `-msoft-float'
16425has been used the module will be marked as soft-float.  If
16426`-msingle-float' has been used then the module will be marked as
16427single-precision.  The remaining ABIs are then selected based on the FP
16428register width.  Double-precision is selected if the width of GP and FP
16429registers match and the special double-precision variants for 32-bit
16430ABIs are then selected depending on `-mfpxx', `-mfp64' and
16431`-mno-odd-spreg'.
16432
16433
16434File: as.info,  Node: MIPS FP ABI Compatibility,  Prev: MIPS FP ABI Selection,  Up: MIPS FP ABIs
16435
164369.27.9.4 Linking different FP ABI variants
16437..........................................
16438
16439Modules using the default FP ABI (no floating-point) can be linked with
16440any other (singular) FP ABI variant.
16441
16442   Special compatibility support exists for O32 with the four
16443double-precision FP ABI variants.  The `-mfpxx' FP ABI is specifically
16444designed to be compatible with the standard double-precision ABI and the
16445`-mfp64' FP ABIs.  This makes it desirable for O32 modules to be built
16446as `-mfpxx' to ensure the maximum compatibility with other modules
16447produced for more specific needs.  The only FP ABIs which cannot be
16448linked together are the standard double-precision ABI and the full
16449`-mfp64' ABI with `-modd-spreg'.
16450
16451
16452File: as.info,  Node: MIPS NaN Encodings,  Next: MIPS Option Stack,  Prev: MIPS FP ABIs,  Up: MIPS-Dependent
16453
164549.27.10 Directives to record which NaN encoding is being used
16455-------------------------------------------------------------
16456
16457The IEEE 754 floating-point standard defines two types of not-a-number
16458(NaN) data: "signalling" NaNs and "quiet" NaNs.  The original version
16459of the standard did not specify how these two types should be
16460distinguished.  Most implementations followed the i387 model, in which
16461the first bit of the significand is set for quiet NaNs and clear for
16462signalling NaNs.  However, the original MIPS implementation assigned the
16463opposite meaning to the bit, so that it was set for signalling NaNs and
16464clear for quiet NaNs.
16465
16466   The 2008 revision of the standard formally suggested the i387 choice
16467and as from Sep 2012 the current release of the MIPS architecture
16468therefore optionally supports that form.  Code that uses one NaN
16469encoding would usually be incompatible with code that uses the other
16470NaN encoding, so MIPS ELF objects have a flag (`EF_MIPS_NAN2008') to
16471record which encoding is being used.
16472
16473   Assembly files can use the `.nan' directive to select between the
16474two encodings.  `.nan 2008' says that the assembly file uses the IEEE
16475754-2008 encoding while `.nan legacy' says that the file uses the
16476original MIPS encoding.  If several `.nan' directives are given, the
16477final setting is the one that is used.
16478
16479   The command-line options `-mnan=legacy' and `-mnan=2008' can be used
16480instead of `.nan legacy' and `.nan 2008' respectively.  However, any
16481`.nan' directive overrides the command-line setting.
16482
16483   `.nan legacy' is the default if no `.nan' directive or `-mnan'
16484option is given.
16485
16486   Note that GNU `as' does not produce NaNs itself and therefore these
16487directives do not affect code generation.  They simply control the
16488setting of the `EF_MIPS_NAN2008' flag.
16489
16490   Traditional MIPS assemblers do not support these directives.
16491
16492
16493File: as.info,  Node: MIPS Option Stack,  Next: MIPS ASE Instruction Generation Overrides,  Prev: MIPS NaN Encodings,  Up: MIPS-Dependent
16494
164959.27.11 Directives to save and restore options
16496----------------------------------------------
16497
16498The directives `.set push' and `.set pop' may be used to save and
16499restore the current settings for all the options which are controlled
16500by `.set'.  The `.set push' directive saves the current settings on a
16501stack.  The `.set pop' directive pops the stack and restores the
16502settings.
16503
16504   These directives can be useful inside an macro which must change an
16505option such as the ISA level or instruction reordering but does not want
16506to change the state of the code which invoked the macro.
16507
16508   Traditional MIPS assemblers do not support these directives.
16509
16510
16511File: as.info,  Node: MIPS ASE Instruction Generation Overrides,  Next: MIPS Floating-Point,  Prev: MIPS Option Stack,  Up: MIPS-Dependent
16512
165139.27.12 Directives to control generation of MIPS ASE instructions
16514-----------------------------------------------------------------
16515
16516The directive `.set mips3d' makes the assembler accept instructions
16517from the MIPS-3D Application Specific Extension from that point on in
16518the assembly.  The `.set nomips3d' directive prevents MIPS-3D
16519instructions from being accepted.
16520
16521   The directive `.set smartmips' makes the assembler accept
16522instructions from the SmartMIPS Application Specific Extension to the
16523MIPS32 ISA from that point on in the assembly.  The `.set nosmartmips'
16524directive prevents SmartMIPS instructions from being accepted.
16525
16526   The directive `.set mdmx' makes the assembler accept instructions
16527from the MDMX Application Specific Extension from that point on in the
16528assembly.  The `.set nomdmx' directive prevents MDMX instructions from
16529being accepted.
16530
16531   The directive `.set dsp' makes the assembler accept instructions
16532from the DSP Release 1 Application Specific Extension from that point
16533on in the assembly.  The `.set nodsp' directive prevents DSP Release 1
16534instructions from being accepted.
16535
16536   The directive `.set dspr2' makes the assembler accept instructions
16537from the DSP Release 2 Application Specific Extension from that point
16538on in the assembly.  This directive implies `.set dsp'.  The `.set
16539nodspr2' directive prevents DSP Release 2 instructions from being
16540accepted.
16541
16542   The directive `.set dspr3' makes the assembler accept instructions
16543from the DSP Release 3 Application Specific Extension from that point
16544on in the assembly.  This directive implies `.set dsp' and `.set
16545dspr2'.  The `.set nodspr3' directive prevents DSP Release 3
16546instructions from being accepted.
16547
16548   The directive `.set mt' makes the assembler accept instructions from
16549the MT Application Specific Extension from that point on in the
16550assembly.  The `.set nomt' directive prevents MT instructions from
16551being accepted.
16552
16553   The directive `.set mcu' makes the assembler accept instructions
16554from the MCU Application Specific Extension from that point on in the
16555assembly.  The `.set nomcu' directive prevents MCU instructions from
16556being accepted.
16557
16558   The directive `.set msa' makes the assembler accept instructions
16559from the MIPS SIMD Architecture Extension from that point on in the
16560assembly.  The `.set nomsa' directive prevents MSA instructions from
16561being accepted.
16562
16563   The directive `.set virt' makes the assembler accept instructions
16564from the Virtualization Application Specific Extension from that point
16565on in the assembly.  The `.set novirt' directive prevents Virtualization
16566instructions from being accepted.
16567
16568   The directive `.set xpa' makes the assembler accept instructions
16569from the XPA Extension from that point on in the assembly.  The `.set
16570noxpa' directive prevents XPA instructions from being accepted.
16571
16572   The directive `.set mips16e2' makes the assembler accept instructions
16573from the MIPS16e2 Application Specific Extension from that point on in
16574the assembly, whenever in MIPS16 mode.  The `.set nomips16e2' directive
16575prevents MIPS16e2 instructions from being accepted, in MIPS16 mode.
16576Neither directive affects the state of MIPS16 mode being active itself
16577which has separate controls.
16578
16579   The directive `.set crc' makes the assembler accept instructions
16580from the CRC Extension from that point on in the assembly.  The `.set
16581nocrc' directive prevents CRC instructions from being accepted.
16582
16583   The directive `.set ginv' makes the assembler accept instructions
16584from the GINV Extension from that point on in the assembly.  The `.set
16585noginv' directive prevents GINV instructions from being accepted.
16586
16587   The directive `.set loongson-mmi' makes the assembler accept
16588instructions from the MMI Extension from that point on in the assembly.
16589The `.set noloongson-mmi' directive prevents MMI instructions from
16590being accepted.
16591
16592   The directive `.set loongson-cam' makes the assembler accept
16593instructions from the Loongson CAM from that point on in the assembly.
16594The `.set noloongson-cam' directive prevents Loongson CAM instructions
16595from being accepted.
16596
16597   The directive `.set loongson-ext' makes the assembler accept
16598instructions from the Loongson EXT from that point on in the assembly.
16599The `.set noloongson-ext' directive prevents Loongson EXT instructions
16600from being accepted.
16601
16602   The directive `.set loongson-ext2' makes the assembler accept
16603instructions from the Loongson EXT2 from that point on in the assembly.
16604This directive implies `.set loognson-ext'.  The `.set noloongson-ext2'
16605directive prevents Loongson EXT2 instructions from being accepted.
16606
16607   Traditional MIPS assemblers do not support these directives.
16608
16609
16610File: as.info,  Node: MIPS Floating-Point,  Next: MIPS Syntax,  Prev: MIPS ASE Instruction Generation Overrides,  Up: MIPS-Dependent
16611
166129.27.13 Directives to override floating-point options
16613-----------------------------------------------------
16614
16615The directives `.set softfloat' and `.set hardfloat' provide finer
16616control of disabling and enabling float-point instructions.  These
16617directives always override the default (that hard-float instructions
16618are accepted) or the command-line options (`-msoft-float' and
16619`-mhard-float').
16620
16621   The directives `.set singlefloat' and `.set doublefloat' provide
16622finer control of disabling and enabling double-precision float-point
16623operations.  These directives always override the default (that
16624double-precision operations are accepted) or the command-line options
16625(`-msingle-float' and `-mdouble-float').
16626
16627   Traditional MIPS assemblers do not support these directives.
16628
16629
16630File: as.info,  Node: MIPS Syntax,  Prev: MIPS Floating-Point,  Up: MIPS-Dependent
16631
166329.27.14 Syntactical considerations for the MIPS assembler
16633---------------------------------------------------------
16634
16635* Menu:
16636
16637* MIPS-Chars::                Special Characters
16638
16639
16640File: as.info,  Node: MIPS-Chars,  Up: MIPS Syntax
16641
166429.27.14.1 Special Characters
16643............................
16644
16645The presence of a `#' on a line indicates the start of a comment that
16646extends to the end of the current line.
16647
16648   If a `#' appears as the first character of a line, the whole line is
16649treated as a comment, but in this case the line can also be a logical
16650line number directive (*note Comments::) or a preprocessor control
16651command (*note Preprocessing::).
16652
16653   The `;' character can be used to separate statements on the same
16654line.
16655
16656
16657File: as.info,  Node: MMIX-Dependent,  Next: MSP430-Dependent,  Prev: MIPS-Dependent,  Up: Machine Dependencies
16658
166599.28 MMIX Dependent Features
16660============================
16661
16662* Menu:
16663
16664* MMIX-Opts::              Command-line Options
16665* MMIX-Expand::            Instruction expansion
16666* MMIX-Syntax::            Syntax
16667* MMIX-mmixal::		   Differences to `mmixal' syntax and semantics
16668
16669
16670File: as.info,  Node: MMIX-Opts,  Next: MMIX-Expand,  Up: MMIX-Dependent
16671
166729.28.1 Command-line Options
16673---------------------------
16674
16675The MMIX version of `as' has some machine-dependent options.
16676
16677   When `--fixed-special-register-names' is specified, only the register
16678names specified in *Note MMIX-Regs:: are recognized in the instructions
16679`PUT' and `GET'.
16680
16681   You can use the `--globalize-symbols' to make all symbols global.
16682This option is useful when splitting up a `mmixal' program into several
16683files.
16684
16685   The `--gnu-syntax' turns off most syntax compatibility with
16686`mmixal'.  Its usability is currently doubtful.
16687
16688   The `--relax' option is not fully supported, but will eventually make
16689the object file prepared for linker relaxation.
16690
16691   If you want to avoid inadvertently calling a predefined symbol and
16692would rather get an error, for example when using `as' with a compiler
16693or other machine-generated code, specify `--no-predefined-syms'.  This
16694turns off built-in predefined definitions of all such symbols,
16695including rounding-mode symbols, segment symbols, `BIT' symbols, and
16696`TRAP' symbols used in `mmix' "system calls".  It also turns off
16697predefined special-register names, except when used in `PUT' and `GET'
16698instructions.
16699
16700   By default, some instructions are expanded to fit the size of the
16701operand or an external symbol (*note MMIX-Expand::).  By passing
16702`--no-expand', no such expansion will be done, instead causing errors
16703at link time if the operand does not fit.
16704
16705   The `mmixal' documentation (*note mmixsite::) specifies that global
16706registers allocated with the `GREG' directive (*note MMIX-greg::) and
16707initialized to the same non-zero value, will refer to the same global
16708register.  This isn't strictly enforceable in `as' since the final
16709addresses aren't known until link-time, but it will do an effort unless
16710the `--no-merge-gregs' option is specified.  (Register merging isn't
16711yet implemented in `ld'.)
16712
16713   `as' will warn every time it expands an instruction to fit an
16714operand unless the option `-x' is specified.  It is believed that this
16715behaviour is more useful than just mimicking `mmixal''s behaviour, in
16716which instructions are only expanded if the `-x' option is specified,
16717and assembly fails otherwise, when an instruction needs to be expanded.
16718It needs to be kept in mind that `mmixal' is both an assembler and
16719linker, while `as' will expand instructions that at link stage can be
16720contracted.  (Though linker relaxation isn't yet implemented in `ld'.)
16721The option `-x' also implies `--linker-allocated-gregs'.
16722
16723   If instruction expansion is enabled, `as' can expand a `PUSHJ'
16724instruction into a series of instructions.  The shortest expansion is
16725to not expand it, but just mark the call as redirectable to a stub,
16726which `ld' creates at link-time, but only if the original `PUSHJ'
16727instruction is found not to reach the target.  The stub consists of the
16728necessary instructions to form a jump to the target.  This happens if
16729`as' can assert that the `PUSHJ' instruction can reach such a stub.
16730The option `--no-pushj-stubs' disables this shorter expansion, and the
16731longer series of instructions is then created at assembly-time.  The
16732option `--no-stubs' is a synonym, intended for compatibility with
16733future releases, where generation of stubs for other instructions may
16734be implemented.
16735
16736   Usually a two-operand-expression (*note GREG-base::) without a
16737matching `GREG' directive is treated as an error by `as'.  When the
16738option `--linker-allocated-gregs' is in effect, they are instead passed
16739through to the linker, which will allocate as many global registers as
16740is needed.
16741
16742
16743File: as.info,  Node: MMIX-Expand,  Next: MMIX-Syntax,  Prev: MMIX-Opts,  Up: MMIX-Dependent
16744
167459.28.2 Instruction expansion
16746----------------------------
16747
16748When `as' encounters an instruction with an operand that is either not
16749known or does not fit the operand size of the instruction, `as' (and
16750`ld') will expand the instruction into a sequence of instructions
16751semantically equivalent to the operand fitting the instruction.
16752Expansion will take place for the following instructions:
16753
16754`GETA'
16755     Expands to a sequence of four instructions: `SETL', `INCML',
16756     `INCMH' and `INCH'.  The operand must be a multiple of four.
16757
16758Conditional branches
16759     A branch instruction is turned into a branch with the complemented
16760     condition and prediction bit over five instructions; four
16761     instructions setting `$255' to the operand value, which like with
16762     `GETA' must be a multiple of four, and a final `GO $255,$255,0'.
16763
16764`PUSHJ'
16765     Similar to expansion for conditional branches; four instructions
16766     set `$255' to the operand value, followed by a `PUSHGO
16767     $255,$255,0'.
16768
16769`JMP'
16770     Similar to conditional branches and `PUSHJ'.  The final instruction
16771     is `GO $255,$255,0'.
16772
16773   The linker `ld' is expected to shrink these expansions for code
16774assembled with `--relax' (though not currently implemented).
16775
16776
16777File: as.info,  Node: MMIX-Syntax,  Next: MMIX-mmixal,  Prev: MMIX-Expand,  Up: MMIX-Dependent
16778
167799.28.3 Syntax
16780-------------
16781
16782The assembly syntax is supposed to be upward compatible with that
16783described in Sections 1.3 and 1.4 of `The Art of Computer Programming,
16784Volume 1'.  Draft versions of those chapters as well as other MMIX
16785information is located at
16786`http://www-cs-faculty.stanford.edu/~knuth/mmix-news.html'.  Most code
16787examples from the mmixal package located there should work unmodified
16788when assembled and linked as single files, with a few noteworthy
16789exceptions (*note MMIX-mmixal::).
16790
16791   Before an instruction is emitted, the current location is aligned to
16792the next four-byte boundary.  If a label is defined at the beginning of
16793the line, its value will be the aligned value.
16794
16795   In addition to the traditional hex-prefix `0x', a hexadecimal number
16796can also be specified by the prefix character `#'.
16797
16798   After all operands to an MMIX instruction or directive have been
16799specified, the rest of the line is ignored, treated as a comment.
16800
16801* Menu:
16802
16803* MMIX-Chars::		        Special Characters
16804* MMIX-Symbols::		Symbols
16805* MMIX-Regs::			Register Names
16806* MMIX-Pseudos::		Assembler Directives
16807
16808
16809File: as.info,  Node: MMIX-Chars,  Next: MMIX-Symbols,  Up: MMIX-Syntax
16810
168119.28.3.1 Special Characters
16812...........................
16813
16814The characters `*' and `#' are line comment characters; each start a
16815comment at the beginning of a line, but only at the beginning of a
16816line.  A `#' prefixes a hexadecimal number if found elsewhere on a
16817line.  If a `#' appears at the start of a line the whole line is
16818treated as a comment, but the line can also act as a logical line
16819number directive (*note Comments::) or a preprocessor control command
16820(*note Preprocessing::).
16821
16822   Two other characters, `%' and `!', each start a comment anywhere on
16823the line.  Thus you can't use the `modulus' and `not' operators in
16824expressions normally associated with these two characters.
16825
16826   A `;' is a line separator, treated as a new-line, so separate
16827instructions can be specified on a single line.
16828
16829
16830File: as.info,  Node: MMIX-Symbols,  Next: MMIX-Regs,  Prev: MMIX-Chars,  Up: MMIX-Syntax
16831
168329.28.3.2 Symbols
16833................
16834
16835The character `:' is permitted in identifiers.  There are two
16836exceptions to it being treated as any other symbol character: if a
16837symbol begins with `:', it means that the symbol is in the global
16838namespace and that the current prefix should not be prepended to that
16839symbol (*note MMIX-prefix::).  The `:' is then not considered part of
16840the symbol.  For a symbol in the label position (first on a line), a `:'
16841at the end of a symbol is silently stripped off.  A label is permitted,
16842but not required, to be followed by a `:', as with many other assembly
16843formats.
16844
16845   The character `@' in an expression, is a synonym for `.', the
16846current location.
16847
16848   In addition to the common forward and backward local symbol formats
16849(*note Symbol Names::), they can be specified with upper-case `B' and
16850`F', as in `8B' and `9F'.  A local label defined for the current
16851position is written with a `H' appended to the number:
16852     3H LDB $0,$1,2
16853   This and traditional local-label formats cannot be mixed: a label
16854must be defined and referred to using the same format.
16855
16856   There's a minor caveat: just as for the ordinary local symbols, the
16857local symbols are translated into ordinary symbols using control
16858characters are to hide the ordinal number of the symbol.
16859Unfortunately, these symbols are not translated back in error messages.
16860Thus you may see confusing error messages when local symbols are used.
16861Control characters `\003' (control-C) and `\004' (control-D) are used
16862for the MMIX-specific local-symbol syntax.
16863
16864   The symbol `Main' is handled specially; it is always global.
16865
16866   By defining the symbols `__.MMIX.start..text' and
16867`__.MMIX.start..data', the address of respectively the `.text' and
16868`.data' segments of the final program can be defined, though when
16869linking more than one object file, the code or data in the object file
16870containing the symbol is not guaranteed to be start at that position;
16871just the final executable.  *Note MMIX-loc::.
16872
16873
16874File: as.info,  Node: MMIX-Regs,  Next: MMIX-Pseudos,  Prev: MMIX-Symbols,  Up: MMIX-Syntax
16875
168769.28.3.3 Register names
16877.......................
16878
16879Local and global registers are specified as `$0' to `$255'.  The
16880recognized special register names are `rJ', `rA', `rB', `rC', `rD',
16881`rE', `rF', `rG', `rH', `rI', `rK', `rL', `rM', `rN', `rO', `rP', `rQ',
16882`rR', `rS', `rT', `rU', `rV', `rW', `rX', `rY', `rZ', `rBB', `rTT',
16883`rWW', `rXX', `rYY' and `rZZ'.  A leading `:' is optional for special
16884register names.
16885
16886   Local and global symbols can be equated to register names and used in
16887place of ordinary registers.
16888
16889   Similarly for special registers, local and global symbols can be
16890used.  Also, symbols equated from numbers and constant expressions are
16891allowed in place of a special register, except when either of the
16892options `--no-predefined-syms' and `--fixed-special-register-names' are
16893specified.  Then only the special register names above are allowed for
16894the instructions having a special register operand; `GET' and `PUT'.
16895
16896
16897File: as.info,  Node: MMIX-Pseudos,  Prev: MMIX-Regs,  Up: MMIX-Syntax
16898
168999.28.3.4 Assembler Directives
16900.............................
16901
16902`LOC'
16903     The `LOC' directive sets the current location to the value of the
16904     operand field, which may include changing sections.  If the
16905     operand is a constant, the section is set to either `.data' if the
16906     value is `0x2000000000000000' or larger, else it is set to `.text'.
16907     Within a section, the current location may only be changed to
16908     monotonically higher addresses.  A LOC expression must be a
16909     previously defined symbol or a "pure" constant.
16910
16911     An example, which sets the label PREV to the current location, and
16912     updates the current location to eight bytes forward:
16913          prev LOC @+8
16914
16915     When a LOC has a constant as its operand, a symbol
16916     `__.MMIX.start..text' or `__.MMIX.start..data' is defined
16917     depending on the address as mentioned above.  Each such symbol is
16918     interpreted as special by the linker, locating the section at that
16919     address.  Note that if multiple files are linked, the first object
16920     file with that section will be mapped to that address (not
16921     necessarily the file with the LOC definition).
16922
16923`LOCAL'
16924     Example:
16925           LOCAL external_symbol
16926           LOCAL 42
16927           .local asymbol
16928
16929     This directive-operation generates a link-time assertion that the
16930     operand does not correspond to a global register.  The operand is
16931     an expression that at link-time resolves to a register symbol or a
16932     number.  A number is treated as the register having that number.
16933     There is one restriction on the use of this directive: the
16934     pseudo-directive must be placed in a section with contents, code
16935     or data.
16936
16937`IS'
16938     The `IS' directive:
16939          asymbol IS an_expression
16940     sets the symbol `asymbol' to `an_expression'.  A symbol may not be
16941     set more than once using this directive.  Local labels may be set
16942     using this directive, for example:
16943          5H IS @+4
16944
16945`GREG'
16946     This directive reserves a global register, gives it an initial
16947     value and optionally gives it a symbolic name.  Some examples:
16948
16949          areg GREG
16950          breg GREG data_value
16951               GREG data_buffer
16952               .greg creg, another_data_value
16953
16954     The symbolic register name can be used in place of a (non-special)
16955     register.  If a value isn't provided, it defaults to zero.  Unless
16956     the option `--no-merge-gregs' is specified, non-zero registers
16957     allocated with this directive may be eliminated by `as'; another
16958     register with the same value used in its place.  Any of the
16959     instructions `CSWAP', `GO', `LDA', `LDBU', `LDB', `LDHT', `LDOU',
16960     `LDO', `LDSF', `LDTU', `LDT', `LDUNC', `LDVTS', `LDWU', `LDW',
16961     `PREGO', `PRELD', `PREST', `PUSHGO', `STBU', `STB', `STCO', `STHT',
16962     `STOU', `STSF', `STTU', `STT', `STUNC', `SYNCD', `SYNCID', can
16963     have a value nearby an initial value in place of its second and
16964     third operands.  Here, "nearby" is defined as within the range
16965     0...255 from the initial value of such an allocated register.
16966
16967          buffer1 BYTE 0,0,0,0,0
16968          buffer2 BYTE 0,0,0,0,0
16969           ...
16970           GREG buffer1
16971           LDOU $42,buffer2
16972     In the example above, the `Y' field of the `LDOUI' instruction
16973     (LDOU with a constant Z) will be replaced with the global register
16974     allocated for `buffer1', and the `Z' field will have the value 5,
16975     the offset from `buffer1' to `buffer2'.  The result is equivalent
16976     to this code:
16977          buffer1 BYTE 0,0,0,0,0
16978          buffer2 BYTE 0,0,0,0,0
16979           ...
16980          tmpreg GREG buffer1
16981           LDOU $42,tmpreg,(buffer2-buffer1)
16982
16983     Global registers allocated with this directive are allocated in
16984     order higher-to-lower within a file.  Other than that, the exact
16985     order of register allocation and elimination is undefined.  For
16986     example, the order is undefined when more than one file with such
16987     directives are linked together.  With the options `-x' and
16988     `--linker-allocated-gregs', `GREG' directives for two-operand
16989     cases like the one mentioned above can be omitted.  Sufficient
16990     global registers will then be allocated by the linker.
16991
16992`BYTE'
16993     The `BYTE' directive takes a series of operands separated by a
16994     comma.  If an operand is a string (*note Strings::), each
16995     character of that string is emitted as a byte.  Other operands
16996     must be constant expressions without forward references, in the
16997     range 0...255.  If you need operands having expressions with
16998     forward references, use `.byte' (*note Byte::).  An operand can be
16999     omitted, defaulting to a zero value.
17000
17001`WYDE'
17002`TETRA'
17003`OCTA'
17004     The directives `WYDE', `TETRA' and `OCTA' emit constants of two,
17005     four and eight bytes size respectively.  Before anything else
17006     happens for the directive, the current location is aligned to the
17007     respective constant-size boundary.  If a label is defined at the
17008     beginning of the line, its value will be that after the alignment.
17009     A single operand can be omitted, defaulting to a zero value
17010     emitted for the directive.  Operands can be expressed as strings
17011     (*note Strings::), in which case each character in the string is
17012     emitted as a separate constant of the size indicated by the
17013     directive.
17014
17015`PREFIX'
17016     The `PREFIX' directive sets a symbol name prefix to be prepended to
17017     all symbols (except local symbols, *note MMIX-Symbols::), that are
17018     not prefixed with `:', until the next `PREFIX' directive.  Such
17019     prefixes accumulate.  For example,
17020           PREFIX a
17021           PREFIX b
17022          c IS 0
17023     defines a symbol `abc' with the value 0.
17024
17025`BSPEC'
17026`ESPEC'
17027     A pair of `BSPEC' and `ESPEC' directives delimit a section of
17028     special contents (without specified semantics).  Example:
17029           BSPEC 42
17030           TETRA 1,2,3
17031           ESPEC
17032     The single operand to `BSPEC' must be number in the range 0...255.
17033     The `BSPEC' number 80 is used by the GNU binutils implementation.
17034
17035
17036File: as.info,  Node: MMIX-mmixal,  Prev: MMIX-Syntax,  Up: MMIX-Dependent
17037
170389.28.4 Differences to `mmixal'
17039------------------------------
17040
17041The binutils `as' and `ld' combination has a few differences in
17042function compared to `mmixal' (*note mmixsite::).
17043
17044   The replacement of a symbol with a GREG-allocated register (*note
17045GREG-base::) is not handled the exactly same way in `as' as in
17046`mmixal'.  This is apparent in the `mmixal' example file `inout.mms',
17047where different registers with different offsets, eventually yielding
17048the same address, are used in the first instruction.  This type of
17049difference should however not affect the function of any program unless
17050it has specific assumptions about the allocated register number.
17051
17052   Line numbers (in the `mmo' object format) are currently not
17053supported.
17054
17055   Expression operator precedence is not that of mmixal: operator
17056precedence is that of the C programming language.  It's recommended to
17057use parentheses to explicitly specify wanted operator precedence
17058whenever more than one type of operators are used.
17059
17060   The serialize unary operator `&', the fractional division operator
17061`//', the logical not operator `!' and the modulus operator `%' are not
17062available.
17063
17064   Symbols are not global by default, unless the option
17065`--globalize-symbols' is passed.  Use the `.global' directive to
17066globalize symbols (*note Global::).
17067
17068   Operand syntax is a bit stricter with `as' than `mmixal'.  For
17069example, you can't say `addu 1,2,3', instead you must write `addu
17070$1,$2,3'.
17071
17072   You can't LOC to a lower address than those already visited (i.e.,
17073"backwards").
17074
17075   A LOC directive must come before any emitted code.
17076
17077   Predefined symbols are visible as file-local symbols after use.  (In
17078the ELF file, that is--the linked mmo file has no notion of a file-local
17079symbol.)
17080
17081   Some mapping of constant expressions to sections in LOC expressions
17082is attempted, but that functionality is easily confused and should be
17083avoided unless compatibility with `mmixal' is required.  A LOC
17084expression to `0x2000000000000000' or higher, maps to the `.data'
17085section and lower addresses map to the `.text' section (*note
17086MMIX-loc::).
17087
17088   The code and data areas are each contiguous.  Sparse programs with
17089far-away LOC directives will take up the same amount of space as a
17090contiguous program with zeros filled in the gaps between the LOC
17091directives.  If you need sparse programs, you might try and get the
17092wanted effect with a linker script and splitting up the code parts into
17093sections (*note Section::).  Assembly code for this, to be compatible
17094with `mmixal', would look something like:
17095      .if 0
17096      LOC away_expression
17097      .else
17098      .section away,"ax"
17099      .fi
17100   `as' will not execute the LOC directive and `mmixal' ignores the
17101lines with `.'.  This construct can be used generally to help
17102compatibility.
17103
17104   Symbols can't be defined twice-not even to the same value.
17105
17106   Instruction mnemonics are recognized case-insensitive, though the
17107`IS' and `GREG' pseudo-operations must be specified in upper-case
17108characters.
17109
17110   There's no unicode support.
17111
17112   The following is a list of programs in `mmix.tar.gz', available at
17113`http://www-cs-faculty.stanford.edu/~knuth/mmix-news.html', last
17114checked with the version dated 2001-08-25 (md5sum
17115c393470cfc86fac040487d22d2bf0172) that assemble with `mmixal' but do
17116not assemble with `as':
17117
17118`silly.mms'
17119     LOC to a previous address.
17120
17121`sim.mms'
17122     Redefines symbol `Done'.
17123
17124`test.mms'
17125     Uses the serial operator `&'.
17126
17127
17128File: as.info,  Node: MSP430-Dependent,  Next: NDS32-Dependent,  Prev: MMIX-Dependent,  Up: Machine Dependencies
17129
171309.29 MSP 430 Dependent Features
17131===============================
17132
17133* Menu:
17134
17135* MSP430 Options::              Options
17136* MSP430 Syntax::               Syntax
17137* MSP430 Floating Point::       Floating Point
17138* MSP430 Directives::           MSP 430 Machine Directives
17139* MSP430 Opcodes::              Opcodes
17140* MSP430 Profiling Capability::	Profiling Capability
17141
17142
17143File: as.info,  Node: MSP430 Options,  Next: MSP430 Syntax,  Up: MSP430-Dependent
17144
171459.29.1 Options
17146--------------
17147
17148`-mmcu'
17149     selects the mcu architecture.  If the architecture is 430Xv2 then
17150     this also enables NOP generation unless the `-mN' is also
17151     specified.
17152
17153`-mcpu'
17154     selects the cpu architecture.  If the architecture is 430Xv2 then
17155     this also enables NOP generation unless the `-mN' is also
17156     specified.
17157
17158`-msilicon-errata=NAME[,NAME...]'
17159     Implements a fixup for named silicon errata.  Multiple silicon
17160     errata can be specified by multiple uses of the `-msilicon-errata'
17161     option and/or by including the errata names, separated by commas,
17162     on an individual `-msilicon-errata' option.  Errata names
17163     currently recognised by the assembler are:
17164
17165    `cpu4'
17166          `PUSH #4' and `PUSH #8' need longer encodings on the MSP430.
17167          This option is enabled by default, and cannot be disabled.
17168
17169    `cpu8'
17170          Do not set the `SP' to an odd value.
17171
17172    `cpu11'
17173          Do not update the `SR' and the `PC' in the same instruction.
17174
17175    `cpu12'
17176          Do not use the `PC' in a `CMP' or `BIT' instruction.
17177
17178    `cpu13'
17179          Do not use an arithmetic instruction to modify the `SR'.
17180
17181    `cpu19'
17182          Insert `NOP' after `CPUOFF'.
17183
17184`-msilicon-errata-warn=NAME[,NAME...]'
17185     Like the `-msilicon-errata' option except that instead of fixing
17186     the specified errata, a warning message is issued instead.  This
17187     option can be used alongside `-msilicon-errata' to generate
17188     messages whenever a problem is fixed, or on its own in order to
17189     inspect code for potential problems.
17190
17191`-mP'
17192     enables polymorph instructions handler.
17193
17194`-mQ'
17195     enables relaxation at assembly time. DANGEROUS!
17196
17197`-ml'
17198     indicates that the input uses the large code model.
17199
17200`-mn'
17201     enables the generation of a NOP instruction following any
17202     instruction that might change the interrupts enabled/disabled
17203     state.  The pipelined nature of the MSP430 core means that any
17204     instruction that changes the interrupt state (`EINT', `DINT', `BIC
17205     #8, SR', `BIS #8, SR' or `MOV.W <>, SR') must be followed by a NOP
17206     instruction in order to ensure the correct processing of
17207     interrupts.  By default it is up to the programmer to supply these
17208     NOP instructions, but this command-line option enables the
17209     automatic insertion by the assembler, if they are missing.
17210
17211`-mN'
17212     disables the generation of a NOP instruction following any
17213     instruction that might change the interrupts enabled/disabled
17214     state.  This is the default behaviour.
17215
17216`-my'
17217     tells the assembler to generate a warning message if a NOP does not
17218     immediately follow an instruction that enables or disables
17219     interrupts.  This is the default.
17220
17221     Note that this option can be stacked with the `-mn' option so that
17222     the assembler will both warn about missing NOP instructions and
17223     then insert them automatically.
17224
17225`-mY'
17226     disables warnings about missing NOP instructions.
17227
17228`-md'
17229     mark the object file as one that requires data to copied from ROM
17230     to RAM at execution startup.  Disabled by default.
17231
17232`-mdata-region=REGION'
17233     Select the region data will be placed in.  Region placement is
17234     performed by the compiler and linker.  The only effect this option
17235     will have on the assembler is that if UPPER or EITHER is selected,
17236     then the symbols to initialise high data and bss will be defined.
17237     Valid REGION values are:
17238    `none'
17239
17240    `lower'
17241
17242    `upper'
17243
17244    `either'
17245
17246
17247
17248File: as.info,  Node: MSP430 Syntax,  Next: MSP430 Floating Point,  Prev: MSP430 Options,  Up: MSP430-Dependent
17249
172509.29.2 Syntax
17251-------------
17252
17253* Menu:
17254
17255* MSP430-Macros::		Macros
17256* MSP430-Chars::                Special Characters
17257* MSP430-Regs::                 Register Names
17258* MSP430-Ext::			Assembler Extensions
17259
17260
17261File: as.info,  Node: MSP430-Macros,  Next: MSP430-Chars,  Up: MSP430 Syntax
17262
172639.29.2.1 Macros
17264...............
17265
17266The macro syntax used on the MSP 430 is like that described in the MSP
17267430 Family Assembler Specification.  Normal `as' macros should still
17268work.
17269
17270   Additional built-in macros are:
17271
17272`llo(exp)'
17273     Extracts least significant word from 32-bit expression 'exp'.
17274
17275`lhi(exp)'
17276     Extracts most significant word from 32-bit expression 'exp'.
17277
17278`hlo(exp)'
17279     Extracts 3rd word from 64-bit expression 'exp'.
17280
17281`hhi(exp)'
17282     Extracts 4rd word from 64-bit expression 'exp'.
17283
17284
17285   They normally being used as an immediate source operand.
17286         mov	#llo(1), r10	;	== mov	#1, r10
17287         mov	#lhi(1), r10	;	== mov	#0, r10
17288
17289
17290File: as.info,  Node: MSP430-Chars,  Next: MSP430-Regs,  Prev: MSP430-Macros,  Up: MSP430 Syntax
17291
172929.29.2.2 Special Characters
17293...........................
17294
17295A semicolon (`;') appearing anywhere on a line starts a comment that
17296extends to the end of that line.
17297
17298   If a `#' appears as the first character of a line then the whole
17299line is treated as a comment, but it can also be a logical line number
17300directive (*note Comments::) or a preprocessor control command (*note
17301Preprocessing::).
17302
17303   Multiple statements can appear on the same line provided that they
17304are separated by the `{' character.
17305
17306   The character `$' in jump instructions indicates current location and
17307implemented only for TI syntax compatibility.
17308
17309
17310File: as.info,  Node: MSP430-Regs,  Next: MSP430-Ext,  Prev: MSP430-Chars,  Up: MSP430 Syntax
17311
173129.29.2.3 Register Names
17313.......................
17314
17315General-purpose registers are represented by predefined symbols of the
17316form `rN' (for global registers), where N represents a number between
17317`0' and `15'.  The leading letters may be in either upper or lower
17318case; for example, `r13' and `R7' are both valid register names.
17319
17320   Register names `PC', `SP' and `SR' cannot be used as register names
17321and will be treated as variables. Use `r0', `r1', and `r2' instead.
17322
17323
17324File: as.info,  Node: MSP430-Ext,  Prev: MSP430-Regs,  Up: MSP430 Syntax
17325
173269.29.2.4 Assembler Extensions
17327.............................
17328
17329`@rN'
17330     As destination operand being treated as `0(rn)'
17331
17332`0(rN)'
17333     As source operand being treated as `@rn'
17334
17335`jCOND +N'
17336     Skips next N bytes followed by jump instruction and equivalent to
17337     `jCOND $+N+2'
17338
17339
17340   Also, there are some instructions, which cannot be found in other
17341assemblers.  These are branch instructions, which has different opcodes
17342upon jump distance.  They all got PC relative addressing mode.
17343
17344`beq label'
17345     A polymorph instruction which is `jeq label' in case if jump
17346     distance within allowed range for cpu's jump instruction. If not,
17347     this unrolls into a sequence of
17348            jne $+6
17349            br  label
17350
17351`bne label'
17352     A polymorph instruction which is `jne label' or `jeq +4; br label'
17353
17354`blt label'
17355     A polymorph instruction which is `jl label' or `jge +4; br label'
17356
17357`bltn label'
17358     A polymorph instruction which is `jn label' or `jn +2; jmp +4; br
17359     label'
17360
17361`bltu label'
17362     A polymorph instruction which is `jlo label' or `jhs +2; br label'
17363
17364`bge label'
17365     A polymorph instruction which is `jge label' or `jl +4; br label'
17366
17367`bgeu label'
17368     A polymorph instruction which is `jhs label' or `jlo +4; br label'
17369
17370`bgt label'
17371     A polymorph instruction which is `jeq +2; jge label' or `jeq +6;
17372     jl  +4; br label'
17373
17374`bgtu label'
17375     A polymorph instruction which is `jeq +2; jhs label' or `jeq +6;
17376     jlo +4; br label'
17377
17378`bleu label'
17379     A polymorph instruction which is `jeq label; jlo label' or `jeq
17380     +2; jhs +4; br label'
17381
17382`ble label'
17383     A polymorph instruction which is `jeq label; jl  label' or `jeq
17384     +2; jge +4; br label'
17385
17386`jump label'
17387     A polymorph instruction which is `jmp label' or `br label'
17388
17389
17390File: as.info,  Node: MSP430 Floating Point,  Next: MSP430 Directives,  Prev: MSP430 Syntax,  Up: MSP430-Dependent
17391
173929.29.3 Floating Point
17393---------------------
17394
17395The MSP 430 family uses IEEE 32-bit floating-point numbers.
17396
17397
17398File: as.info,  Node: MSP430 Directives,  Next: MSP430 Opcodes,  Prev: MSP430 Floating Point,  Up: MSP430-Dependent
17399
174009.29.4 MSP 430 Machine Directives
17401---------------------------------
17402
17403`.file'
17404     This directive is ignored; it is accepted for compatibility with
17405     other MSP 430 assemblers.
17406
17407          _Warning:_ in other versions of the GNU assembler, `.file' is
17408          used for the directive called `.app-file' in the MSP 430
17409          support.
17410
17411`.line'
17412     This directive is ignored; it is accepted for compatibility with
17413     other MSP 430 assemblers.
17414
17415`.arch'
17416     Sets the target microcontroller in the same way as the `-mmcu'
17417     command-line option.
17418
17419`.cpu'
17420     Sets the target architecture in the same way as the `-mcpu'
17421     command-line option.
17422
17423`.profiler'
17424     This directive instructs assembler to add new profile entry to the
17425     object file.
17426
17427`.refsym'
17428     This directive instructs assembler to add an undefined reference to
17429     the symbol following the directive.  The maximum symbol name
17430     length is 1023 characters.  No relocation is created for this
17431     symbol; it will exist purely for pulling in object files from
17432     archives.  Note that this reloc is not sufficient to prevent
17433     garbage collection; use a KEEP() directive in the linker file to
17434     preserve such objects.
17435
17436`.mspabi_attribute'
17437     This directive tells the assembler what the MSPABI build
17438     attributes for this file are.  This is used for validating the
17439     command line options passed to the assembler against the options
17440     the original source file was compiled with.  The expected format
17441     is: `.mspabi_attribute tag_name, tag_value' For example, to set
17442     the tag `OFBA_MSPABI_Tag_ISA' to `MSP430X': `.mspabi_attribute 4,
17443     2'
17444
17445     See the `MSP430 EABI, document slaa534' for the details on tag
17446     names and values.
17447
17448
17449File: as.info,  Node: MSP430 Opcodes,  Next: MSP430 Profiling Capability,  Prev: MSP430 Directives,  Up: MSP430-Dependent
17450
174519.29.5 Opcodes
17452--------------
17453
17454`as' implements all the standard MSP 430 opcodes.  No additional
17455pseudo-instructions are needed on this family.
17456
17457   For information on the 430 machine instruction set, see `MSP430
17458User's Manual, document slau049d', Texas Instrument, Inc.
17459
17460
17461File: as.info,  Node: MSP430 Profiling Capability,  Prev: MSP430 Opcodes,  Up: MSP430-Dependent
17462
174639.29.6 Profiling Capability
17464---------------------------
17465
17466It is a performance hit to use gcc's profiling approach for this tiny
17467target.  Even more - jtag hardware facility does not perform any
17468profiling functions.  However we've got gdb's built-in simulator where
17469we can do anything.
17470
17471   We define new section `.profiler' which holds all profiling
17472information.  We define new pseudo operation `.profiler' which will
17473instruct assembler to add new profile entry to the object file. Profile
17474should take place at the present address.
17475
17476   Pseudo operation format:
17477
17478   `.profiler flags,function_to_profile [, cycle_corrector, extra]'
17479
17480   where:
17481
17482          `flags' is a combination of the following characters:
17483
17484    `s'
17485          function entry
17486
17487    `x'
17488          function exit
17489
17490    `i'
17491          function is in init section
17492
17493    `f'
17494          function is in fini section
17495
17496    `l'
17497          library call
17498
17499    `c'
17500          libc standard call
17501
17502    `d'
17503          stack value demand
17504
17505    `I'
17506          interrupt service routine
17507
17508    `P'
17509          prologue start
17510
17511    `p'
17512          prologue end
17513
17514    `E'
17515          epilogue start
17516
17517    `e'
17518          epilogue end
17519
17520    `j'
17521          long jump / sjlj unwind
17522
17523    `a'
17524          an arbitrary code fragment
17525
17526    `t'
17527          extra parameter saved (a constant value like frame size)
17528
17529`function_to_profile'
17530     a function address
17531
17532`cycle_corrector'
17533     a value which should be added to the cycle counter, zero if
17534     omitted.
17535
17536`extra'
17537     any extra parameter, zero if omitted.
17538
17539
17540   For example:
17541     .global fxx
17542     .type fxx,@function
17543     fxx:
17544     .LFrameOffset_fxx=0x08
17545     .profiler "scdP", fxx     ; function entry.
17546     			  ; we also demand stack value to be saved
17547       push r11
17548       push r10
17549       push r9
17550       push r8
17551     .profiler "cdpt",fxx,0, .LFrameOffset_fxx  ; check stack value at this point
17552     					  ; (this is a prologue end)
17553     					  ; note, that spare var filled with
17554     					  ; the farme size
17555       mov r15,r8
17556     ...
17557     .profiler cdE,fxx         ; check stack
17558       pop r8
17559       pop r9
17560       pop r10
17561       pop r11
17562     .profiler xcde,fxx,3      ; exit adds 3 to the cycle counter
17563       ret                     ; cause 'ret' insn takes 3 cycles
17564
17565
17566File: as.info,  Node: NDS32-Dependent,  Next: NiosII-Dependent,  Prev: MSP430-Dependent,  Up: Machine Dependencies
17567
175689.30 NDS32 Dependent Features
17569=============================
17570
17571   The NDS32 processors family includes high-performance and low-power
1757232-bit processors for high-end to low-end.  GNU `as' for NDS32
17573architectures supports NDS32 ISA version 3.  For detail about NDS32
17574instruction set, please see the AndeStar ISA User Manual which is
17575available at http://www.andestech.com/en/index/index.htm
17576
17577* Menu:
17578
17579* NDS32 Options::         Assembler options
17580* NDS32 Syntax::          High-level assembly macros
17581
17582
17583File: as.info,  Node: NDS32 Options,  Next: NDS32 Syntax,  Up: NDS32-Dependent
17584
175859.30.1 NDS32 Options
17586--------------------
17587
17588The NDS32 configurations of GNU `as' support these special options:
17589
17590`-O1'
17591     Optimize for performance.
17592
17593`-Os'
17594     Optimize for space.
17595
17596`-EL'
17597     Produce little endian data output.
17598
17599`-EB'
17600     Produce little endian data output.
17601
17602`-mpic'
17603     Generate PIC.
17604
17605`-mno-fp-as-gp-relax'
17606     Suppress fp-as-gp relaxation for this file.
17607
17608`-mb2bb-relax'
17609     Back-to-back branch optimization.
17610
17611`-mno-all-relax'
17612     Suppress all relaxation for this file.
17613
17614`-march=<arch name>'
17615     Assemble for architecture <arch name> which could be v3, v3j, v3m,
17616     v3f, v3s, v2, v2j, v2f, v2s.
17617
17618`-mbaseline=<baseline>'
17619     Assemble for baseline <baseline> which could be v2, v3, v3m.
17620
17621`-mfpu-freg=FREG'
17622     Specify a FPU configuration.
17623    `0      8 SP /  4 DP registers'
17624
17625    `1     16 SP /  8 DP registers'
17626
17627    `2     32 SP / 16 DP registers'
17628
17629    `3     32 SP / 32 DP registers'
17630
17631`-mabi=ABI'
17632     Specify a abi version <abi> could be v1, v2, v2fp, v2fpp.
17633
17634`-m[no-]mac'
17635     Enable/Disable Multiply instructions support.
17636
17637`-m[no-]div'
17638     Enable/Disable Divide instructions support.
17639
17640`-m[no-]16bit-ext'
17641     Enable/Disable 16-bit extension
17642
17643`-m[no-]dx-regs'
17644     Enable/Disable d0/d1 registers
17645
17646`-m[no-]perf-ext'
17647     Enable/Disable Performance extension
17648
17649`-m[no-]perf2-ext'
17650     Enable/Disable Performance extension 2
17651
17652`-m[no-]string-ext'
17653     Enable/Disable String extension
17654
17655`-m[no-]reduced-regs'
17656     Enable/Disable Reduced Register configuration (GPR16) option
17657
17658`-m[no-]audio-isa-ext'
17659     Enable/Disable AUDIO ISA extension
17660
17661`-m[no-]fpu-sp-ext'
17662     Enable/Disable FPU SP extension
17663
17664`-m[no-]fpu-dp-ext'
17665     Enable/Disable FPU DP extension
17666
17667`-m[no-]fpu-fma'
17668     Enable/Disable FPU fused-multiply-add instructions
17669
17670`-mall-ext'
17671     Turn on all extensions and instructions support
17672
17673
17674File: as.info,  Node: NDS32 Syntax,  Prev: NDS32 Options,  Up: NDS32-Dependent
17675
176769.30.2 Syntax
17677-------------
17678
17679* Menu:
17680
17681* NDS32-Chars::                Special Characters
17682* NDS32-Regs::                 Register Names
17683* NDS32-Ops::                  Pseudo Instructions
17684
17685
17686File: as.info,  Node: NDS32-Chars,  Next: NDS32-Regs,  Up: NDS32 Syntax
17687
176889.30.2.1 Special Characters
17689...........................
17690
17691Use `#' at column 1 and `!' anywhere in the line except inside quotes.
17692
17693   Multiple instructions in a line are allowed though not recommended
17694and should be separated by `;'.
17695
17696   Assembler is not case-sensitive in general except user defined label.
17697For example, `jral F1' is different from `jral f1' while it is the same
17698as `JRAL F1'.
17699
17700
17701File: as.info,  Node: NDS32-Regs,  Next: NDS32-Ops,  Prev: NDS32-Chars,  Up: NDS32 Syntax
17702
177039.30.2.2 Register Names
17704.......................
17705
17706`General purpose registers (GPR)'
17707     There are 32 32-bit general purpose registers $r0 to $r31.
17708
17709`Accumulators d0 and d1'
17710     64-bit accumulators: $d0.hi, $d0.lo, $d1.hi, and $d1.lo.
17711
17712`Assembler reserved register $ta'
17713     Register $ta ($r15) is reserved for assembler using.
17714
17715`Operating system reserved registers $p0 and $p1'
17716     Registers $p0 ($r26) and $p1 ($r27) are used by operating system
17717     as scratch registers.
17718
17719`Frame pointer $fp'
17720     Register $r28 is regarded as the frame pointer.
17721
17722`Global pointer'
17723     Register $r29 is regarded as the global pointer.
17724
17725`Link pointer'
17726     Register $r30 is regarded as the link pointer.
17727
17728`Stack pointer'
17729     Register $r31 is regarded as the stack pointer.
17730
17731
17732File: as.info,  Node: NDS32-Ops,  Prev: NDS32-Regs,  Up: NDS32 Syntax
17733
177349.30.2.3 Pseudo Instructions
17735............................
17736
17737`li rt5,imm32'
17738     load 32-bit integer into register rt5.  `sethi rt5,hi20(imm32)'
17739     and then `ori rt5,reg,lo12(imm32)'.
17740
17741`la rt5,var'
17742     Load 32-bit address of var into register rt5.  `sethi
17743     rt5,hi20(var)' and then `ori reg,rt5,lo12(var)'
17744
17745`l.[bhw] rt5,var'
17746     Load value of var into register rt5.  `sethi $ta,hi20(var)' and
17747     then `l[bhw]i rt5,[$ta+lo12(var)]'
17748
17749`l.[bh]s rt5,var'
17750     Load value of var into register rt5.  `sethi $ta,hi20(var)' and
17751     then `l[bh]si rt5,[$ta+lo12(var)]'
17752
17753`l.[bhw]p rt5,var,inc'
17754     Load value of var into register rt5 and increment $ta by amount
17755     inc.  `la $ta,var' and then `l[bhw]i.bi rt5,[$ta],inc'
17756
17757`l.[bhw]pc rt5,inc'
17758     Continue loading value of var into register rt5 and increment $ta
17759     by amount inc.  `l[bhw]i.bi rt5,[$ta],inc.'
17760
17761`l.[bh]sp rt5,var,inc'
17762     Load value of var into register rt5 and increment $ta by amount
17763     inc.  `la $ta,var' and then `l[bh]si.bi rt5,[$ta],inc'
17764
17765`l.[bh]spc rt5,inc'
17766     Continue loading value of var into register rt5 and increment $ta
17767     by amount inc.  `l[bh]si.bi rt5,[$ta],inc.'
17768
17769`s.[bhw] rt5,var'
17770     Store register rt5 to var.  `sethi $ta,hi20(var)' and then
17771     `s[bhw]i rt5,[$ta+lo12(var)]'
17772
17773`s.[bhw]p rt5,var,inc'
17774     Store register rt5 to var and increment $ta by amount inc.  `la
17775     $ta,var' and then `s[bhw]i.bi rt5,[$ta],inc'
17776
17777`s.[bhw]pc rt5,inc'
17778     Continue storing register rt5 to var and increment $ta by amount
17779     inc.  `s[bhw]i.bi rt5,[$ta],inc.'
17780
17781`not rt5,ra5'
17782     Alias of `nor rt5,ra5,ra5'.
17783
17784`neg rt5,ra5'
17785     Alias of `subri rt5,ra5,0'.
17786
17787`br rb5'
17788     Depending on how it is assembled, it is translated into `r5 rb5'
17789     or `jr rb5'.
17790
17791`b label'
17792     Branch to label depending on how it is assembled, it is translated
17793     into `j8 label', `j label', or "`la $ta,label' `br $ta'".
17794
17795`bral rb5'
17796     Alias of jral br5 depending on how it is assembled, it is
17797     translated into `jral5 rb5' or `jral rb5'.
17798
17799`bal fname'
17800     Alias of jal fname depending on how it is assembled, it is
17801     translated into `jal fname' or "`la $ta,fname' `bral $ta'".
17802
17803`call fname'
17804     Call function fname same as `jal fname'.
17805
17806`move rt5,ra5'
17807     For 16-bit, this is `mov55 rt5,ra5'.  For no 16-bit, this is `ori
17808     rt5,ra5,0'.
17809
17810`move rt5,var'
17811     This is the same as `l.w rt5,var'.
17812
17813`move rt5,imm32'
17814     This is the same as `li rt5,imm32'.
17815
17816`pushm ra5,rb5'
17817     Push contents of registers from ra5 to rb5 into stack.
17818
17819`push ra5'
17820     Push content of register ra5 into stack. (same `pushm ra5,ra5').
17821
17822`push.d var'
17823     Push value of double-word variable var into stack.
17824
17825`push.w var'
17826     Push value of word variable var into stack.
17827
17828`push.h var'
17829     Push value of half-word variable var into stack.
17830
17831`push.b var'
17832     Push value of byte variable var into stack.
17833
17834`pusha var'
17835     Push 32-bit address of variable var into stack.
17836
17837`pushi imm32'
17838     Push 32-bit immediate value into stack.
17839
17840`popm ra5,rb5'
17841     Pop top of stack values into registers ra5 to rb5.
17842
17843`pop rt5'
17844     Pop top of stack value into register. (same as `popm rt5,rt5'.)
17845
17846`pop.d var,ra5'
17847     Pop value of double-word variable var from stack using register ra5
17848     as 2nd scratch register. (1st is $ta)
17849
17850`pop.w var,ra5'
17851     Pop value of word variable var from stack using register ra5.
17852
17853`pop.h var,ra5'
17854     Pop value of half-word variable var from stack using register ra5.
17855
17856`pop.b var,ra5'
17857     Pop value of byte variable var from stack using register ra5.
17858
17859
17860
17861File: as.info,  Node: NiosII-Dependent,  Next: NS32K-Dependent,  Prev: NDS32-Dependent,  Up: Machine Dependencies
17862
178639.31 Nios II Dependent Features
17864===============================
17865
17866* Menu:
17867
17868* Nios II Options::              Options
17869* Nios II Syntax::               Syntax
17870* Nios II Relocations::          Relocations
17871* Nios II Directives::           Nios II Machine Directives
17872* Nios II Opcodes::              Opcodes
17873
17874
17875File: as.info,  Node: Nios II Options,  Next: Nios II Syntax,  Up: NiosII-Dependent
17876
178779.31.1 Options
17878--------------
17879
17880`-relax-section'
17881     Replace identified out-of-range branches with PC-relative `jmp'
17882     sequences when possible.  The generated code sequences are suitable
17883     for use in position-independent code, but there is a practical
17884     limit on the extended branch range because of the length of the
17885     sequences.  This option is the default.
17886
17887`-relax-all'
17888     Replace branch instructions not determinable to be in range and
17889     all call instructions with `jmp' and `callr' sequences
17890     (respectively).  This option generates absolute relocations
17891     against the target symbols and is not appropriate for
17892     position-independent code.
17893
17894`-no-relax'
17895     Do not replace any branches or calls.
17896
17897`-EB'
17898     Generate big-endian output.
17899
17900`-EL'
17901     Generate little-endian output.  This is the default.
17902
17903`-march=ARCHITECTURE'
17904     This option specifies the target architecture.  The assembler
17905     issues an error message if an attempt is made to assemble an
17906     instruction which will not execute on the target architecture.
17907     The following architecture names are recognized: `r1', `r2'.  The
17908     default is `r1'.
17909
17910
17911
17912File: as.info,  Node: Nios II Syntax,  Next: Nios II Relocations,  Prev: Nios II Options,  Up: NiosII-Dependent
17913
179149.31.2 Syntax
17915-------------
17916
17917* Menu:
17918
17919* Nios II Chars::                Special Characters
17920
17921
17922File: as.info,  Node: Nios II Chars,  Up: Nios II Syntax
17923
179249.31.2.1 Special Characters
17925...........................
17926
17927`#' is the line comment character.  `;' is the line separator character.
17928
17929
17930File: as.info,  Node: Nios II Relocations,  Next: Nios II Directives,  Prev: Nios II Syntax,  Up: NiosII-Dependent
17931
179329.31.3 Nios II Machine Relocations
17933----------------------------------
17934
17935`%hiadj(EXPRESSION)'
17936     Extract the upper 16 bits of EXPRESSION and add one if the 15th
17937     bit is set.
17938
17939     The value of `%hiadj(EXPRESSION)' is:
17940          ((EXPRESSION >> 16) & 0xffff) + ((EXPRESSION >> 15) & 0x01)
17941
17942     The `%hiadj' relocation is intended to be used with the `addi',
17943     `ld' or `st' instructions along with a `%lo', in order to load a
17944     32-bit constant.
17945
17946          movhi r2, %hiadj(symbol)
17947          addi r2, r2, %lo(symbol)
17948
17949`%hi(EXPRESSION)'
17950     Extract the upper 16 bits of EXPRESSION.
17951
17952`%lo(EXPRESSION)'
17953     Extract the lower 16 bits of EXPRESSION.
17954
17955`%gprel(EXPRESSION)'
17956     Subtract the value of the symbol `_gp' from EXPRESSION.
17957
17958     The intention of the `%gprel' relocation is to have a fast small
17959     area of memory which only takes a 16-bit immediate to access.
17960
17961          	.section .sdata
17962          fastint:
17963          	.int 123
17964          	.section .text
17965          	ldw r4, %gprel(fastint)(gp)
17966
17967`%call(EXPRESSION)'
17968
17969`%call_lo(EXPRESSION)'
17970
17971`%call_hiadj(EXPRESSION)'
17972`%got(EXPRESSION)'
17973`%got_lo(EXPRESSION)'
17974`%got_hiadj(EXPRESSION)'
17975`%gotoff(EXPRESSION)'
17976`%gotoff_lo(EXPRESSION)'
17977`%gotoff_hiadj(EXPRESSION)'
17978`%tls_gd(EXPRESSION)'
17979`%tls_ie(EXPRESSION)'
17980`%tls_le(EXPRESSION)'
17981`%tls_ldm(EXPRESSION)'
17982`%tls_ldo(EXPRESSION)'
17983     These relocations support the ABI for Linux Systems documented in
17984     the `Nios II Processor Reference Handbook'.
17985
17986
17987File: as.info,  Node: Nios II Directives,  Next: Nios II Opcodes,  Prev: Nios II Relocations,  Up: NiosII-Dependent
17988
179899.31.4 Nios II Machine Directives
17990---------------------------------
17991
17992`.align EXPRESSION [, EXPRESSION]'
17993     This is the generic `.align' directive, however this aligns to a
17994     power of two.
17995
17996`.half EXPRESSION'
17997     Create an aligned constant 2 bytes in size.
17998
17999`.word EXPRESSION'
18000     Create an aligned constant 4 bytes in size.
18001
18002`.dword EXPRESSION'
18003     Create an aligned constant 8 bytes in size.
18004
18005`.2byte EXPRESSION'
18006     Create an unaligned constant 2 bytes in size.
18007
18008`.4byte EXPRESSION'
18009     Create an unaligned constant 4 bytes in size.
18010
18011`.8byte EXPRESSION'
18012     Create an unaligned constant 8 bytes in size.
18013
18014`.16byte EXPRESSION'
18015     Create an unaligned constant 16 bytes in size.
18016
18017`.set noat'
18018     Allows assembly code to use `at' register without warning.  Macro
18019     or relaxation expansions generate warnings.
18020
18021`.set at'
18022     Assembly code using `at' register generates warnings, and macro
18023     expansion and relaxation are enabled.
18024
18025`.set nobreak'
18026     Allows assembly code to use `ba' and `bt' registers without
18027     warning.
18028
18029`.set break'
18030     Turns warnings back on for using `ba' and `bt' registers.
18031
18032`.set norelax'
18033     Do not replace any branches or calls.
18034
18035`.set relaxsection'
18036     Replace identified out-of-range branches with `jmp' sequences
18037     (default).
18038
18039`.set relaxsection'
18040     Replace all branch and call instructions with `jmp' and `callr'
18041     sequences.
18042
18043`.set ...'
18044     All other `.set' are the normal use.
18045
18046
18047
18048File: as.info,  Node: Nios II Opcodes,  Prev: Nios II Directives,  Up: NiosII-Dependent
18049
180509.31.5 Opcodes
18051--------------
18052
18053`as' implements all the standard Nios II opcodes documented in the
18054`Nios II Processor Reference Handbook', including the assembler
18055pseudo-instructions.
18056
18057
18058File: as.info,  Node: NS32K-Dependent,  Next: OpenRISC-Dependent,  Prev: NiosII-Dependent,  Up: Machine Dependencies
18059
180609.32 NS32K Dependent Features
18061=============================
18062
18063* Menu:
18064
18065* NS32K Syntax::               Syntax
18066
18067
18068File: as.info,  Node: NS32K Syntax,  Up: NS32K-Dependent
18069
180709.32.1 Syntax
18071-------------
18072
18073* Menu:
18074
18075* NS32K-Chars::                Special Characters
18076
18077
18078File: as.info,  Node: NS32K-Chars,  Up: NS32K Syntax
18079
180809.32.1.1 Special Characters
18081...........................
18082
18083The presence of a `#' appearing anywhere on a line indicates the start
18084of a comment that extends to the end of that line.
18085
18086   If a `#' appears as the first character of a line then the whole
18087line is treated as a comment, but in this case the line can also be a
18088logical line number directive (*note Comments::) or a preprocessor
18089control command (*note Preprocessing::).
18090
18091   If Sequent compatibility has been configured into the assembler then
18092the `|' character appearing as the first character on a line will also
18093indicate the start of a line comment.
18094
18095   The `;' character can be used to separate statements on the same
18096line.
18097
18098
18099File: as.info,  Node: OpenRISC-Dependent,  Next: PDP-11-Dependent,  Prev: NS32K-Dependent,  Up: Machine Dependencies
18100
181019.33 OPENRISC Dependent Features
18102================================
18103
18104* Menu:
18105
18106* OpenRISC-Syntax::		Syntax
18107* OpenRISC-Float::		Floating Point
18108* OpenRISC-Directives::		OpenRISC Machine Directives
18109* OpenRISC-Opcodes::		Opcodes
18110
18111
18112File: as.info,  Node: OpenRISC-Syntax,  Next: OpenRISC-Float,  Up: OpenRISC-Dependent
18113
181149.33.1 OpenRISC Syntax
18115----------------------
18116
18117The assembler syntax follows the OpenRISC 1000 Architecture Manual.
18118
18119* Menu:
18120
18121* OpenRISC-Chars::		Special Characters
18122* OpenRISC-Regs::		Register Names
18123* OpenRISC-Relocs::		Relocations
18124
18125
18126File: as.info,  Node: OpenRISC-Chars,  Next: OpenRISC-Regs,  Up: OpenRISC-Syntax
18127
181289.33.1.1 Special Characters
18129...........................
18130
18131A `#' character appearing anywhere on a line indicates the start of a
18132comment that extends to the end of that line.
18133
18134   `;' can be used instead of a newline to separate statements.
18135
18136
18137File: as.info,  Node: OpenRISC-Regs,  Next: OpenRISC-Relocs,  Prev: OpenRISC-Chars,  Up: OpenRISC-Syntax
18138
181399.33.1.2 Register Names
18140.......................
18141
18142The OpenRISC register file contains 32 general pupose registers.
18143
18144   * The 32 general purpose registers are referred to as `rN'.
18145
18146   * The stack pointer register `r1' can be referenced using the alias
18147     `sp'.
18148
18149   * The frame pointer register `r2' can be referenced using the alias
18150     `fp'.
18151
18152   * The link register `r9' can be referenced using the alias `lr'.
18153
18154   Floating point operations use the same general purpose registers.
18155The instructions `lf.itof.s' (single precision) and `lf.itof.d' (double
18156precision) can be used to convert integer values to floating point.
18157Likewise, instructions `lf.ftoi.s' (single precision) and `lf.ftoi.d'
18158(double precision) can be used to convert floating point to integer.
18159
18160   OpenRISC also contains privileged special purpose registers (SPRs).
18161The SPRs are accessed using the `l.mfspr' and `l.mtspr' instructions.
18162
18163
18164File: as.info,  Node: OpenRISC-Relocs,  Prev: OpenRISC-Regs,  Up: OpenRISC-Syntax
18165
181669.33.1.3 Relocations
18167....................
18168
18169ELF relocations are available as defined in the OpenRISC architecture
18170specification.
18171
18172   `R_OR1K_HI_16_IN_INSN' is obtained using `hi' and
18173`R_OR1K_LO_16_IN_INSN' and `R_OR1K_SLO16' are obtained using `lo'.  For
18174signed offsets `R_OR1K_AHI16' is obtained from `ha'.  For example:
18175
18176     l.movhi r5, hi(symbol)
18177     l.ori   r5, r5, lo(symbol)
18178
18179     l.movhi r5, ha(symbol)
18180     l.addi  r5, r5, lo(symbol)
18181
18182   These "high" mnemonics extract bits 31:16 of their operand, and the
18183"low" mnemonics extract bits 15:0 of their operand.
18184
18185   The PC relative relocation `R_OR1K_GOTPC_HI16' can be obtained by
18186enclosing an operand inside of `gotpchi'.  Likewise, the
18187`R_OR1K_GOTPC_LO16' relocation can be obtained using `gotpclo'.  These
18188are mostly used when assembling PIC code.  For example, the standard
18189PIC sequence on OpenRISC to get the base of the global offset table, PC
18190relative, into a register, can be performed as:
18191
18192     l.jal   0x8
18193      l.movhi r17, gotpchi(_GLOBAL_OFFSET_TABLE_-4)
18194     l.ori   r17, r17, gotpclo(_GLOBAL_OFFSET_TABLE_+0)
18195     l.add   r17, r17, r9
18196
18197   Several relocations exist to allow the link editor to perform GOT
18198data references.  The `R_OR1K_GOT16' relocation can obtained by
18199enclosing an operand inside of `got'.  For example, assuming the GOT
18200base is in register `r17'.
18201
18202     l.lwz   r19, got(a)(r17)
18203     l.lwz   r21, 0(r19)
18204
18205   Also, several relocations exist for local GOT references.  The
18206`R_OR1K_GOTOFF_AHI16' relocation can obtained by enclosing an operand
18207inside of `gotoffha'.  Likewise, `R_OR1K_GOTOFF_LO16' and
18208`R_OR1K_GOTOFF_SLO16' can be obtained by enclosing an operand inside of
18209`gotofflo'.  For example, assuming the GOT base is in register `rl7':
18210
18211     l.movhi r19, gotoffha(symbol)
18212     l.add   r19, r19, r17
18213     l.lwz   r19, gotofflo(symbol)(r19)
18214
18215   The above PC relative relocations use a `l.jal' (jump) instruction
18216and reading of the link register to load the PC.  OpenRISC also supports
18217page offset PC relative locations without a jump instruction using the
18218`l.adrp' instruction.  By default the `l.adrp' instruction will create
18219an `R_OR1K_PCREL_PG21' relocation.  Likewise, `BFD_RELOC_OR1K_LO13' and
18220`BFD_RELOC_OR1K_SLO13' can be obtained by enclosing an operand inside
18221of `po'.  For example:
18222
18223     l.adrp  r3, symbol
18224     l.ori   r4, r3, po(symbol)
18225     l.lbz   r5, po(symbol)(r3)
18226     l.sb    po(symbol)(r3), r6
18227
18228   Likewise the page offset relocations can be used with GOT
18229references.  The relocation `R_OR1K_GOT_PG21' can be obtained by
18230enclosing an `l.adrp' immediate operand inside of `got'.  Likewise,
18231`R_OR1K_GOT_LO13' can be obtained by enclosing an operand inside of
18232`gotpo'.  For example to load the value of a GOT symbol into register
18233`r5' we can do:
18234
18235     l.adrp  r17, got(_GLOBAL_OFFSET_TABLE_)
18236     l.lwz   r5, gotpo(symbol)(r17)
18237
18238   There are many relocations that can be requested for access to
18239thread local storage variables.  All of the OpenRISC TLS mnemonics are
18240supported:
18241
18242   * `R_OR1K_TLS_GD_HI16' is requested using `tlsgdhi'.
18243
18244   * `R_OR1K_TLS_GD_LO16' is requested using `tlsgdlo'.
18245
18246   * `R_OR1K_TLS_GD_PG21' is requested using `tldgd'.
18247
18248   * `R_OR1K_TLS_GD_LO13' is requested using `tlsgdpo'.
18249
18250   * `R_OR1K_TLS_LDM_HI16' is requested using `tlsldmhi'.
18251
18252   * `R_OR1K_TLS_LDM_LO16' is requested using `tlsldmlo'.
18253
18254   * `R_OR1K_TLS_LDM_PG21' is requested using `tldldm'.
18255
18256   * `R_OR1K_TLS_LDM_LO13' is requested using `tlsldmpo'.
18257
18258   * `R_OR1K_TLS_LDO_HI16' is requested using `dtpoffhi'.
18259
18260   * `R_OR1K_TLS_LDO_LO16' is requested using `dtpofflo'.
18261
18262   * `R_OR1K_TLS_IE_HI16' is requested using `gottpoffhi'.
18263
18264   * `R_OR1K_TLS_IE_AHI16' is requested using `gottpoffha'.
18265
18266   * `R_OR1K_TLS_IE_LO16' is requested using `gottpofflo'.
18267
18268   * `R_OR1K_TLS_IE_PG21' is requested using `gottp'.
18269
18270   * `R_OR1K_TLS_IE_LO13' is requested using `gottppo'.
18271
18272   * `R_OR1K_TLS_LE_HI16' is requested using `tpoffhi'.
18273
18274   * `R_OR1K_TLS_LE_AHI16' is requested using `tpoffha'.
18275
18276   * `R_OR1K_TLS_LE_LO16' is requested using `tpofflo'.
18277
18278   * `R_OR1K_TLS_LE_SLO16' also is requested using `tpofflo' depending
18279     on the instruction format.
18280
18281   Here are some example TLS model sequences.
18282
18283   First, General Dynamic:
18284
18285     l.movhi r17, tlsgdhi(symbol)
18286     l.ori   r17, r17, tlsgdlo(symbol)
18287     l.add   r17, r17, r16
18288     l.or    r3, r17, r17
18289     l.jal   plt(__tls_get_addr)
18290      l.nop
18291
18292   Initial Exec:
18293
18294     l.movhi r17, gottpoffhi(symbol)
18295     l.add   r17, r17, r16
18296     l.lwz   r17, gottpofflo(symbol)(r17)
18297     l.add   r17, r17, r10
18298     l.lbs   r17, 0(r17)
18299
18300   And finally, Local Exec:
18301
18302     l.movhi r17, tpoffha(symbol)
18303     l.add   r17, r17, r10
18304     l.addi  r17, r17, tpofflo(symbol)
18305     l.lbs   r17, 0(r17)
18306
18307
18308File: as.info,  Node: OpenRISC-Float,  Next: OpenRISC-Directives,  Prev: OpenRISC-Syntax,  Up: OpenRISC-Dependent
18309
183109.33.2 Floating Point
18311---------------------
18312
18313OpenRISC uses IEEE floating-point numbers.
18314
18315
18316File: as.info,  Node: OpenRISC-Directives,  Next: OpenRISC-Opcodes,  Prev: OpenRISC-Float,  Up: OpenRISC-Dependent
18317
183189.33.3 OpenRISC Machine Directives
18319----------------------------------
18320
18321The OpenRISC version of `as' supports the following additional machine
18322directives:
18323
18324`.align'
18325     This must be followed by the desired alignment in bytes.
18326
18327`.word'
18328     On the OpenRISC, the `.word' directive produces a 32 bit value.
18329
18330`.nodelay'
18331     On the OpenRISC, the `.nodelay' directive sets a flag in elf
18332     binaries indicating that the binary is generated catering for no
18333     delay slots.
18334
18335`.proc'
18336     This directive is ignored.  Any text following it on the same line
18337     is also ignored.
18338
18339`.endproc'
18340     This directive is ignored.  Any text following it on the same line
18341     is also ignored.
18342
18343
18344File: as.info,  Node: OpenRISC-Opcodes,  Prev: OpenRISC-Directives,  Up: OpenRISC-Dependent
18345
183469.33.4 Opcodes
18347--------------
18348
18349For detailed information on the OpenRISC machine instruction set, see
18350`http://www.openrisc.io/architecture/'.
18351
18352   `as' implements all the standard OpenRISC opcodes.
18353
18354
18355File: as.info,  Node: PDP-11-Dependent,  Next: PJ-Dependent,  Prev: OpenRISC-Dependent,  Up: Machine Dependencies
18356
183579.34 PDP-11 Dependent Features
18358==============================
18359
18360* Menu:
18361
18362* PDP-11-Options::		Options
18363* PDP-11-Pseudos::		Assembler Directives
18364* PDP-11-Syntax::		DEC Syntax versus BSD Syntax
18365* PDP-11-Mnemonics::		Instruction Naming
18366* PDP-11-Synthetic::		Synthetic Instructions
18367
18368
18369File: as.info,  Node: PDP-11-Options,  Next: PDP-11-Pseudos,  Up: PDP-11-Dependent
18370
183719.34.1 Options
18372--------------
18373
18374The PDP-11 version of `as' has a rich set of machine dependent options.
18375
183769.34.1.1 Code Generation Options
18377................................
18378
18379`-mpic | -mno-pic'
18380     Generate position-independent (or position-dependent) code.
18381
18382     The default is to generate position-independent code.
18383
183849.34.1.2 Instruction Set Extension Options
18385..........................................
18386
18387These options enables or disables the use of extensions over the base
18388line instruction set as introduced by the first PDP-11 CPU: the KA11.
18389Most options come in two variants: a `-m'EXTENSION that enables
18390EXTENSION, and a `-mno-'EXTENSION that disables EXTENSION.
18391
18392   The default is to enable all extensions.
18393
18394`-mall | -mall-extensions'
18395     Enable all instruction set extensions.
18396
18397`-mno-extensions'
18398     Disable all instruction set extensions.
18399
18400`-mcis | -mno-cis'
18401     Enable (or disable) the use of the commercial instruction set,
18402     which consists of these instructions: `ADDNI', `ADDN', `ADDPI',
18403     `ADDP', `ASHNI', `ASHN', `ASHPI', `ASHP', `CMPCI', `CMPC',
18404     `CMPNI', `CMPN', `CMPPI', `CMPP', `CVTLNI', `CVTLN', `CVTLPI',
18405     `CVTLP', `CVTNLI', `CVTNL', `CVTNPI', `CVTNP', `CVTPLI', `CVTPL',
18406     `CVTPNI', `CVTPN', `DIVPI', `DIVP', `L2DR', `L3DR', `LOCCI',
18407     `LOCC', `MATCI', `MATC', `MOVCI', `MOVC', `MOVRCI', `MOVRC',
18408     `MOVTCI', `MOVTC', `MULPI', `MULP', `SCANCI', `SCANC', `SKPCI',
18409     `SKPC', `SPANCI', `SPANC', `SUBNI', `SUBN', `SUBPI', and `SUBP'.
18410
18411`-mcsm | -mno-csm'
18412     Enable (or disable) the use of the `CSM' instruction.
18413
18414`-meis | -mno-eis'
18415     Enable (or disable) the use of the extended instruction set, which
18416     consists of these instructions: `ASHC', `ASH', `DIV', `MARK',
18417     `MUL', `RTT', `SOB' `SXT', and `XOR'.
18418
18419`-mfis | -mkev11'
18420`-mno-fis | -mno-kev11'
18421     Enable (or disable) the use of the KEV11 floating-point
18422     instructions: `FADD', `FDIV', `FMUL', and `FSUB'.
18423
18424`-mfpp | -mfpu | -mfp-11'
18425`-mno-fpp | -mno-fpu | -mno-fp-11'
18426     Enable (or disable) the use of FP-11 floating-point instructions:
18427     `ABSF', `ADDF', `CFCC', `CLRF', `CMPF', `DIVF', `LDCFF', `LDCIF',
18428     `LDEXP', `LDF', `LDFPS', `MODF', `MULF', `NEGF', `SETD', `SETF',
18429     `SETI', `SETL', `STCFF', `STCFI', `STEXP', `STF', `STFPS', `STST',
18430     `SUBF', and `TSTF'.
18431
18432`-mlimited-eis | -mno-limited-eis'
18433     Enable (or disable) the use of the limited extended instruction
18434     set: `MARK', `RTT', `SOB', `SXT', and `XOR'.
18435
18436     The -mno-limited-eis options also implies -mno-eis.
18437
18438`-mmfpt | -mno-mfpt'
18439     Enable (or disable) the use of the `MFPT' instruction.
18440
18441`-mmultiproc | -mno-multiproc'
18442     Enable (or disable) the use of multiprocessor instructions:
18443     `TSTSET' and `WRTLCK'.
18444
18445`-mmxps | -mno-mxps'
18446     Enable (or disable) the use of the `MFPS' and `MTPS' instructions.
18447
18448`-mspl | -mno-spl'
18449     Enable (or disable) the use of the `SPL' instruction.
18450
18451     Enable (or disable) the use of the microcode instructions: `LDUB',
18452     `MED', and `XFC'.
18453
184549.34.1.3 CPU Model Options
18455..........................
18456
18457These options enable the instruction set extensions supported by a
18458particular CPU, and disables all other extensions.
18459
18460`-mka11'
18461     KA11 CPU.  Base line instruction set only.
18462
18463`-mkb11'
18464     KB11 CPU.  Enable extended instruction set and `SPL'.
18465
18466`-mkd11a'
18467     KD11-A CPU.  Enable limited extended instruction set.
18468
18469`-mkd11b'
18470     KD11-B CPU.  Base line instruction set only.
18471
18472`-mkd11d'
18473     KD11-D CPU.  Base line instruction set only.
18474
18475`-mkd11e'
18476     KD11-E CPU.  Enable extended instruction set, `MFPS', and `MTPS'.
18477
18478`-mkd11f | -mkd11h | -mkd11q'
18479     KD11-F, KD11-H, or KD11-Q CPU.  Enable limited extended
18480     instruction set, `MFPS', and `MTPS'.
18481
18482`-mkd11k'
18483     KD11-K CPU.  Enable extended instruction set, `LDUB', `MED',
18484     `MFPS', `MFPT', `MTPS', and `XFC'.
18485
18486`-mkd11z'
18487     KD11-Z CPU.  Enable extended instruction set, `CSM', `MFPS',
18488     `MFPT', `MTPS', and `SPL'.
18489
18490`-mf11'
18491     F11 CPU.  Enable extended instruction set, `MFPS', `MFPT', and
18492     `MTPS'.
18493
18494`-mj11'
18495     J11 CPU.  Enable extended instruction set, `CSM', `MFPS', `MFPT',
18496     `MTPS', `SPL', `TSTSET', and `WRTLCK'.
18497
18498`-mt11'
18499     T11 CPU.  Enable limited extended instruction set, `MFPS', and
18500     `MTPS'.
18501
185029.34.1.4 Machine Model Options
18503..............................
18504
18505These options enable the instruction set extensions supported by a
18506particular machine model, and disables all other extensions.
18507
18508`-m11/03'
18509     Same as `-mkd11f'.
18510
18511`-m11/04'
18512     Same as `-mkd11d'.
18513
18514`-m11/05 | -m11/10'
18515     Same as `-mkd11b'.
18516
18517`-m11/15 | -m11/20'
18518     Same as `-mka11'.
18519
18520`-m11/21'
18521     Same as `-mt11'.
18522
18523`-m11/23 | -m11/24'
18524     Same as `-mf11'.
18525
18526`-m11/34'
18527     Same as `-mkd11e'.
18528
18529`-m11/34a'
18530     Ame as `-mkd11e' `-mfpp'.
18531
18532`-m11/35 | -m11/40'
18533     Same as `-mkd11a'.
18534
18535`-m11/44'
18536     Same as `-mkd11z'.
18537
18538`-m11/45 | -m11/50 | -m11/55 | -m11/70'
18539     Same as `-mkb11'.
18540
18541`-m11/53 | -m11/73 | -m11/83 | -m11/84 | -m11/93 | -m11/94'
18542     Same as `-mj11'.
18543
18544`-m11/60'
18545     Same as `-mkd11k'.
18546
18547
18548File: as.info,  Node: PDP-11-Pseudos,  Next: PDP-11-Syntax,  Prev: PDP-11-Options,  Up: PDP-11-Dependent
18549
185509.34.2 Assembler Directives
18551---------------------------
18552
18553The PDP-11 version of `as' has a few machine dependent assembler
18554directives.
18555
18556`.bss'
18557     Switch to the `bss' section.
18558
18559`.even'
18560     Align the location counter to an even number.
18561
18562
18563File: as.info,  Node: PDP-11-Syntax,  Next: PDP-11-Mnemonics,  Prev: PDP-11-Pseudos,  Up: PDP-11-Dependent
18564
185659.34.3 PDP-11 Assembly Language Syntax
18566--------------------------------------
18567
18568`as' supports both DEC syntax and BSD syntax.  The only difference is
18569that in DEC syntax, a `#' character is used to denote an immediate
18570constants, while in BSD syntax the character for this purpose is `$'.
18571
18572   general-purpose registers are named `r0' through `r7'.  Mnemonic
18573alternatives for `r6' and `r7' are `sp' and `pc', respectively.
18574
18575   Floating-point registers are named `ac0' through `ac3', or
18576alternatively `fr0' through `fr3'.
18577
18578   Comments are started with a `#' or a `/' character, and extend to
18579the end of the line.  (FIXME: clash with immediates?)
18580
18581   Multiple statements on the same line can be separated by the `;'
18582character.
18583
18584
18585File: as.info,  Node: PDP-11-Mnemonics,  Next: PDP-11-Synthetic,  Prev: PDP-11-Syntax,  Up: PDP-11-Dependent
18586
185879.34.4 Instruction Naming
18588-------------------------
18589
18590Some instructions have alternative names.
18591
18592`BCC'
18593     `BHIS'
18594
18595`BCS'
18596     `BLO'
18597
18598`L2DR'
18599     `L2D'
18600
18601`L3DR'
18602     `L3D'
18603
18604`SYS'
18605     `TRAP'
18606
18607
18608File: as.info,  Node: PDP-11-Synthetic,  Prev: PDP-11-Mnemonics,  Up: PDP-11-Dependent
18609
186109.34.5 Synthetic Instructions
18611-----------------------------
18612
18613The `JBR' and `J'CC synthetic instructions are not supported yet.
18614
18615
18616File: as.info,  Node: PJ-Dependent,  Next: PPC-Dependent,  Prev: PDP-11-Dependent,  Up: Machine Dependencies
18617
186189.35 picoJava Dependent Features
18619================================
18620
18621* Menu:
18622
18623* PJ Options::              Options
18624* PJ Syntax::               PJ Syntax
18625
18626
18627File: as.info,  Node: PJ Options,  Next: PJ Syntax,  Up: PJ-Dependent
18628
186299.35.1 Options
18630--------------
18631
18632`as' has two additional command-line options for the picoJava
18633architecture.
18634`-ml'
18635     This option selects little endian data output.
18636
18637`-mb'
18638     This option selects big endian data output.
18639
18640
18641File: as.info,  Node: PJ Syntax,  Prev: PJ Options,  Up: PJ-Dependent
18642
186439.35.2 PJ Syntax
18644----------------
18645
18646* Menu:
18647
18648* PJ-Chars::                Special Characters
18649
18650
18651File: as.info,  Node: PJ-Chars,  Up: PJ Syntax
18652
186539.35.2.1 Special Characters
18654...........................
18655
18656The presence of a `!' or `/' on a line indicates the start of a comment
18657that extends to the end of the current line.
18658
18659   If a `#' appears as the first character of a line then the whole
18660line is treated as a comment, but in this case the line could also be a
18661logical line number directive (*note Comments::) or a preprocessor
18662control command (*note Preprocessing::).
18663
18664   The `;' character can be used to separate statements on the same
18665line.
18666
18667
18668File: as.info,  Node: PPC-Dependent,  Next: PRU-Dependent,  Prev: PJ-Dependent,  Up: Machine Dependencies
18669
186709.36 PowerPC Dependent Features
18671===============================
18672
18673* Menu:
18674
18675* PowerPC-Opts::                Options
18676* PowerPC-Pseudo::              PowerPC Assembler Directives
18677* PowerPC-Syntax::              PowerPC Syntax
18678
18679
18680File: as.info,  Node: PowerPC-Opts,  Next: PowerPC-Pseudo,  Up: PPC-Dependent
18681
186829.36.1 Options
18683--------------
18684
18685The PowerPC chip family includes several successive levels, using the
18686same core instruction set, but including a few additional instructions
18687at each level.  There are exceptions to this however.  For details on
18688what instructions each variant supports, please see the chip's
18689architecture reference manual.
18690
18691   The following table lists all available PowerPC options.
18692
18693`-a32'
18694     Generate ELF32 or XCOFF32.
18695
18696`-a64'
18697     Generate ELF64 or XCOFF64.
18698
18699`-K PIC'
18700     Set EF_PPC_RELOCATABLE_LIB in ELF flags.
18701
18702`-mpwrx | -mpwr2'
18703     Generate code for POWER/2 (RIOS2).
18704
18705`-mpwr'
18706     Generate code for POWER (RIOS1)
18707
18708`-m601'
18709     Generate code for PowerPC 601.
18710
18711`-mppc, -mppc32, -m603, -m604'
18712     Generate code for PowerPC 603/604.
18713
18714`-m403, -m405'
18715     Generate code for PowerPC 403/405.
18716
18717`-m440'
18718     Generate code for PowerPC 440.  BookE and some 405 instructions.
18719
18720`-m464'
18721     Generate code for PowerPC 464.
18722
18723`-m476'
18724     Generate code for PowerPC 476.
18725
18726`-m7400, -m7410, -m7450, -m7455'
18727     Generate code for PowerPC 7400/7410/7450/7455.
18728
18729`-m750cl, -mgekko, -mbroadway'
18730     Generate code for PowerPC 750CL/Gekko/Broadway.
18731
18732`-m821, -m850, -m860'
18733     Generate code for PowerPC 821/850/860.
18734
18735`-mppc64, -m620'
18736     Generate code for PowerPC 620/625/630.
18737
18738`-me500, -me500x2'
18739     Generate code for Motorola e500 core complex.
18740
18741`-me500mc'
18742     Generate code for Freescale e500mc core complex.
18743
18744`-me500mc64'
18745     Generate code for Freescale e500mc64 core complex.
18746
18747`-me5500'
18748     Generate code for Freescale e5500 core complex.
18749
18750`-me6500'
18751     Generate code for Freescale e6500 core complex.
18752
18753`-mspe'
18754     Generate code for Motorola SPE instructions.
18755
18756`-mspe2'
18757     Generate code for Freescale SPE2 instructions.
18758
18759`-mtitan'
18760     Generate code for AppliedMicro Titan core complex.
18761
18762`-mppc64bridge'
18763     Generate code for PowerPC 64, including bridge insns.
18764
18765`-mbooke'
18766     Generate code for 32-bit BookE.
18767
18768`-ma2'
18769     Generate code for A2 architecture.
18770
18771`-me300'
18772     Generate code for PowerPC e300 family.
18773
18774`-maltivec'
18775     Generate code for processors with AltiVec instructions.
18776
18777`-mvle'
18778     Generate code for Freescale PowerPC VLE instructions.
18779
18780`-mvsx'
18781     Generate code for processors with Vector-Scalar (VSX) instructions.
18782
18783`-mhtm'
18784     Generate code for processors with Hardware Transactional Memory
18785     instructions.
18786
18787`-mpower4, -mpwr4'
18788     Generate code for Power4 architecture.
18789
18790`-mpower5, -mpwr5, -mpwr5x'
18791     Generate code for Power5 architecture.
18792
18793`-mpower6, -mpwr6'
18794     Generate code for Power6 architecture.
18795
18796`-mpower7, -mpwr7'
18797     Generate code for Power7 architecture.
18798
18799`-mpower8, -mpwr8'
18800     Generate code for Power8 architecture.
18801
18802`-mpower9, -mpwr9'
18803     Generate code for Power9 architecture.
18804
18805`-mpower10, -mpwr10'
18806     Generate code for Power10 architecture.
18807
18808`-mcell'
18809
18810`-mcell'
18811     Generate code for Cell Broadband Engine architecture.
18812
18813`-mcom'
18814     Generate code Power/PowerPC common instructions.
18815
18816`-many'
18817     Generate code for any architecture (PWR/PWRX/PPC).
18818
18819`-mregnames'
18820     Allow symbolic names for registers.
18821
18822`-mno-regnames'
18823     Do not allow symbolic names for registers.
18824
18825`-mrelocatable'
18826     Support for GCC's -mrelocatable option.
18827
18828`-mrelocatable-lib'
18829     Support for GCC's -mrelocatable-lib option.
18830
18831`-memb'
18832     Set PPC_EMB bit in ELF flags.
18833
18834`-mlittle, -mlittle-endian, -le'
18835     Generate code for a little endian machine.
18836
18837`-mbig, -mbig-endian, -be'
18838     Generate code for a big endian machine.
18839
18840`-msolaris'
18841     Generate code for Solaris.
18842
18843`-mno-solaris'
18844     Do not generate code for Solaris.
18845
18846`-nops=COUNT'
18847     If an alignment directive inserts more than COUNT nops, put a
18848     branch at the beginning to skip execution of the nops.
18849
18850
18851File: as.info,  Node: PowerPC-Pseudo,  Next: PowerPC-Syntax,  Prev: PowerPC-Opts,  Up: PPC-Dependent
18852
188539.36.2 PowerPC Assembler Directives
18854-----------------------------------
18855
18856A number of assembler directives are available for PowerPC.  The
18857following table is far from complete.
18858
18859`.machine "string"'
18860     This directive allows you to change the machine for which code is
18861     generated.  `"string"' may be any of the -m cpu selection options
18862     (without the -m) enclosed in double quotes, `"push"', or `"pop"'.
18863     `.machine "push"' saves the currently selected cpu, which may be
18864     restored with `.machine "pop"'.
18865
18866
18867File: as.info,  Node: PowerPC-Syntax,  Prev: PowerPC-Pseudo,  Up: PPC-Dependent
18868
188699.36.3 PowerPC Syntax
18870---------------------
18871
18872* Menu:
18873
18874* PowerPC-Chars::                Special Characters
18875
18876
18877File: as.info,  Node: PowerPC-Chars,  Up: PowerPC-Syntax
18878
188799.36.3.1 Special Characters
18880...........................
18881
18882The presence of a `#' on a line indicates the start of a comment that
18883extends to the end of the current line.
18884
18885   If a `#' appears as the first character of a line then the whole
18886line is treated as a comment, but in this case the line could also be a
18887logical line number directive (*note Comments::) or a preprocessor
18888control command (*note Preprocessing::).
18889
18890   If the assembler has been configured for the ppc-*-solaris* target
18891then the `!' character also acts as a line comment character.  This can
18892be disabled via the `-mno-solaris' command-line option.
18893
18894   The `;' character can be used to separate statements on the same
18895line.
18896
18897
18898File: as.info,  Node: PRU-Dependent,  Next: RISC-V-Dependent,  Prev: PPC-Dependent,  Up: Machine Dependencies
18899
189009.37 PRU Dependent Features
18901===========================
18902
18903* Menu:
18904
18905* PRU Options::              Options
18906* PRU Syntax::               Syntax
18907* PRU Relocations::          Relocations
18908* PRU Directives::           PRU Machine Directives
18909* PRU Opcodes::              Opcodes
18910
18911
18912File: as.info,  Node: PRU Options,  Next: PRU Syntax,  Up: PRU-Dependent
18913
189149.37.1 Options
18915--------------
18916
18917`-mlink-relax'
18918     Assume that LD would optimize LDI32 instructions by checking the
18919     upper 16 bits of the EXPRESSION. If they are all zeros, then LD
18920     would shorten the LDI32 instruction to a single LDI. In such case
18921     `as' will output DIFF relocations for diff expressions.
18922
18923`-mno-link-relax'
18924     Assume that LD would not optimize LDI32 instructions. As a
18925     consequence, DIFF relocations will not be emitted.
18926
18927`-mno-warn-regname-label'
18928     Do not warn if a label name matches a register name. Usually
18929     assembler programmers will want this warning to be emitted. C
18930     compilers may want to turn this off.
18931
18932
18933
18934File: as.info,  Node: PRU Syntax,  Next: PRU Relocations,  Prev: PRU Options,  Up: PRU-Dependent
18935
189369.37.2 Syntax
18937-------------
18938
18939* Menu:
18940
18941* PRU Chars::                Special Characters
18942
18943
18944File: as.info,  Node: PRU Chars,  Up: PRU Syntax
18945
189469.37.2.1 Special Characters
18947...........................
18948
18949`#' and `;' are the line comment characters.
18950
18951
18952File: as.info,  Node: PRU Relocations,  Next: PRU Directives,  Prev: PRU Syntax,  Up: PRU-Dependent
18953
189549.37.3 PRU Machine Relocations
18955------------------------------
18956
18957`%pmem(EXPRESSION)'
18958     Convert EXPRESSION from byte-address to a word-address.  In other
18959     words, shift right by two.
18960
18961`%label(EXPRESSION)'
18962     Mark the given operand as a label. This is useful if you need to
18963     jump to a label that matches a register name.
18964
18965          r1:
18966              jmp r1		; Will jump to register R1
18967              jmp %label(r1)	; Will jump to label r1
18968
18969
18970
18971File: as.info,  Node: PRU Directives,  Next: PRU Opcodes,  Prev: PRU Relocations,  Up: PRU-Dependent
18972
189739.37.4 PRU Machine Directives
18974-----------------------------
18975
18976`.align EXPRESSION [, EXPRESSION]'
18977     This is the generic `.align' directive, however this aligns to a
18978     power of two.
18979
18980`.word EXPRESSION'
18981     Create an aligned constant 4 bytes in size.
18982
18983`.dword EXPRESSION'
18984     Create an aligned constant 8 bytes in size.
18985
18986`.2byte EXPRESSION'
18987     Create an unaligned constant 2 bytes in size.
18988
18989`.4byte EXPRESSION'
18990     Create an unaligned constant 4 bytes in size.
18991
18992`.8byte EXPRESSION'
18993     Create an unaligned constant 8 bytes in size.
18994
18995`.16byte EXPRESSION'
18996     Create an unaligned constant 16 bytes in size.
18997
18998`.set no_warn_regname_label'
18999     Do not output warnings when a label name matches a register name.
19000     Equivalent to passing the `-mno-warn-regname-label' command-line
19001     option.
19002
19003
19004
19005File: as.info,  Node: PRU Opcodes,  Prev: PRU Directives,  Up: PRU-Dependent
19006
190079.37.5 Opcodes
19008--------------
19009
19010`as' implements all the standard PRU core V3 opcodes in the original
19011pasm assembler.  Older cores are not supported by `as'.
19012
19013   GAS also implements the LDI32 pseudo instruction for loading a 32-bit
19014immediate value into a register.
19015
19016            ldi32   sp, __stack_top
19017            ldi32   r14, 0x12345678
19018
19019
19020File: as.info,  Node: RISC-V-Dependent,  Next: RL78-Dependent,  Prev: PRU-Dependent,  Up: Machine Dependencies
19021
190229.38 RISC-V Dependent Features
19023==============================
19024
19025* Menu:
19026
19027* RISC-V-Options::        RISC-V Options
19028* RISC-V-Directives::     RISC-V Directives
19029* RISC-V-Modifiers::      RISC-V Assembler Modifiers
19030* RISC-V-Formats::        RISC-V Instruction Formats
19031* RISC-V-ATTRIBUTE::      RISC-V Object Attribute
19032
19033
19034File: as.info,  Node: RISC-V-Options,  Next: RISC-V-Directives,  Up: RISC-V-Dependent
19035
190369.38.1 RISC-V Options
19037---------------------
19038
19039The following table lists all available RISC-V specific options.
19040
19041`-fpic'
19042`-fPIC'
19043     Generate position-independent code
19044
19045`-fno-pic'
19046     Don't generate position-independent code (default)
19047
19048`-march=ISA'
19049     Select the base isa, as specified by ISA.  For example
19050     -march=rv32ima.  If this option and the architecture attributes
19051     aren't set, then assembler will check the default configure
19052     setting -with-arch=ISA.
19053
19054`-misa-spec=ISAspec'
19055     Select the default isa spec version.  If the version of ISA isn't
19056     set by -march, then assembler helps to set the version according to
19057     the default chosen spec.  If this option isn't set, then assembler
19058     will check the default configure setting -with-isa-spec=ISAspec.
19059
19060`-mpriv-spec=PRIVspec'
19061     Select the privileged spec version.  We can decide whether the CSR
19062     is valid or not according to the chosen spec.  If this option and
19063     the privilege attributes aren't set, then assembler will check the
19064     default configure setting -with-priv-spec=PRIVspec.
19065
19066`-mabi=ABI'
19067     Selects the ABI, which is either "ilp32" or "lp64", optionally
19068     followed by "f", "d", or "q" to indicate single-precision,
19069     double-precision, or quad-precision floating-point calling
19070     convention, or none to indicate the soft-float calling convention.
19071     Also, "ilp32" can optionally be followed by "e" to indicate the
19072     RVE ABI, which is always soft-float.
19073
19074`-mrelax'
19075     Take advantage of linker relaxations to reduce the number of
19076     instructions required to materialize symbol addresses. (default)
19077
19078`-mno-relax'
19079     Don't do linker relaxations.
19080
19081`-march-attr'
19082     Generate the default contents for the riscv elf attribute section
19083     if the .attribute directives are not set.  This section is used to
19084     record the information that a linker or runtime loader needs to
19085     check compatibility.  This information includes ISA string, stack
19086     alignment requirement, unaligned memory accesses, and the major,
19087     minor and revision version of privileged specification.
19088
19089`-mno-arch-attr'
19090     Don't generate the default riscv elf attribute section if the
19091     .attribute directives are not set.
19092
19093`-mcsr-check'
19094     Enable the CSR checking for the ISA-dependent CRS and the
19095     read-only CSR.  The ISA-dependent CSR are only valid when the
19096     specific ISA is set.  The read-only CSR can not be written by the
19097     CSR instructions.
19098
19099`-mno-csr-check'
19100     Don't do CSR checking.
19101
19102`-mlittle-endian'
19103     Generate code for a little endian machine.
19104
19105`-mbig-endian'
19106     Generate code for a big endian machine.
19107
19108
19109File: as.info,  Node: RISC-V-Directives,  Next: RISC-V-Modifiers,  Prev: RISC-V-Options,  Up: RISC-V-Dependent
19110
191119.38.2 RISC-V Directives
19112------------------------
19113
19114The following table lists all available RISC-V specific directives.
19115
19116`.align SIZE-LOG-2'
19117     Align to the given boundary, with the size given as log2 the
19118     number of bytes to align to.
19119
19120`.half VALUE'
19121`.word VALUE'
19122`.dword VALUE'
19123     Emits a half-word, word, or double-word value at the current
19124     position.
19125
19126`.dtprelword VALUE'
19127`.dtpreldword VALUE'
19128     Emits a DTP-relative word (or double-word) at the current
19129     position.  This is meant to be used by the compiler in shared
19130     libraries for DWARF debug info for thread local variables.
19131
19132`.bss'
19133     Sets the current section to the BSS section.
19134
19135`.uleb128 VALUE'
19136`.sleb128 VALUE'
19137     Emits a signed or unsigned LEB128 value at the current position.
19138     This only accepts constant expressions, because symbol addresses
19139     can change with relaxation, and we don't support relocations to
19140     modify LEB128 values at link time.
19141
19142`.option ARGUMENT'
19143     Modifies RISC-V specific assembler options inline with the
19144     assembly code.  This is used when particular instruction sequences
19145     must be assembled with a specific set of options.  For example,
19146     since we relax addressing sequences to shorter GP-relative
19147     sequences when possible the initial load of GP must not be relaxed
19148     and should be emitted as something like
19149
19150          	.option push
19151          	.option norelax
19152          	la gp, __global_pointer$
19153          	.option pop
19154
19155     in order to produce after linker relaxation the expected
19156
19157          	auipc gp, %pcrel_hi(__global_pointer$)
19158          	addi gp, gp, %pcrel_lo(__global_pointer$)
19159
19160     instead of just
19161
19162          	addi gp, gp, 0
19163
19164     It's not expected that options are changed in this manner during
19165     regular use, but there are a handful of esoteric cases like the
19166     one above where users need to disable particular features of the
19167     assembler for particular code sequences.  The complete list of
19168     option arguments is shown below:
19169
19170    `push'
19171    `pop'
19172          Pushes or pops the current option stack.  These should be
19173          used whenever changing an option in line with assembly code
19174          in order to ensure the user's command-line options are
19175          respected for the bulk of the file being assembled.
19176
19177    `rvc'
19178    `norvc'
19179          Enables or disables the generation of compressed
19180          instructions.  Instructions are opportunistically compressed
19181          by the RISC-V assembler when possible, but sometimes this
19182          behavior is not desirable, especially when handling
19183          alignments.
19184
19185    `pic'
19186    `nopic'
19187          Enables or disables position-independent code generation.
19188          Unless you really know what you're doing, this should only be
19189          at the top of a file.
19190
19191    `relax'
19192    `norelax'
19193          Enables or disables relaxation.  The RISC-V assembler and
19194          linker opportunistically relax some code sequences, but
19195          sometimes this behavior is not desirable.
19196
19197    `csr-check'
19198    `no-csr-check'
19199          Enables or disables the CSR checking.
19200
19201    `arch, +EXTENSION[VERSION] [,...,+EXTENSION_N[VERSION_N]]'
19202    `arch, -EXTENSION [,...,-EXTENSION_N]'
19203    `arch, =ISA'
19204          Enables or disables the extensions for specific code region.
19205          For example, `.option arch, +m2p0' means add m extension with
19206          version 2.0, and `.option arch, -f, -d' means remove
19207          extensions, f and d, from the architecture string.  Note
19208          that, `.option arch, +c, -c' have the same behavior as
19209          `.option rvc, norvc'.  However, they are also undesirable
19210          sometimes.  Besides, `.option arch, -i' is illegal, since we
19211          cannot remove the base i extension anytime.  If you want to
19212          reset the whole ISA string, you can also use `.option arch,
19213          =rv32imac' to overwrite the previous settings.
19214
19215`.insn TYPE, OPERAND [,...,OPERAND_N]'
19216`.insn INSN_LENGTH, VALUE'
19217`.insn VALUE'
19218     This directive permits the numeric representation of an
19219     instructions and makes the assembler insert the operands according
19220     to one of the instruction formats for `.insn' (*Note
19221     RISC-V-Formats::).  For example, the instruction `add a0, a1, a2'
19222     could be written as `.insn r 0x33, 0, 0, a0, a1, a2'.  But in
19223     fact, the instruction formats are difficult to use for some users,
19224     so most of them are using `.word' to encode the instruction
19225     directly, rather than using `.insn'.  It is fine for now, but will
19226     be wrong when the mapping symbols are supported, since `.word'
19227     will not be shown as an instruction, it should be shown as data.
19228     Therefore, we also support two more formats of the `.insn', the
19229     instruction `add a0, a1, a2' could also be written as `.insn 0x4,
19230     0xc58533' or `.insn 0xc58533'.  When the INSN_LENGTH is set, then
19231     assembler will check if the VALUE is a valid INSN_LENGTH bytes
19232     instruction.
19233
19234`.attribute TAG, VALUE'
19235     Set the object attribute TAG to VALUE.
19236
19237     The TAG is either an attribute number, or one of the following:
19238     `Tag_RISCV_arch', `Tag_RISCV_stack_align',
19239     `Tag_RISCV_unaligned_access', `Tag_RISCV_priv_spec',
19240     `Tag_RISCV_priv_spec_minor', `Tag_RISCV_priv_spec_revision'.
19241
19242
19243
19244File: as.info,  Node: RISC-V-Modifiers,  Next: RISC-V-Formats,  Prev: RISC-V-Directives,  Up: RISC-V-Dependent
19245
192469.38.3 RISC-V Assembler Modifiers
19247---------------------------------
19248
19249The RISC-V assembler supports following modifiers for relocatable
19250addresses used in RISC-V instruction operands.  However, we also
19251support some pseudo instructions that are easier to use than these
19252modifiers.
19253
19254`%lo(SYMBOL)'
19255     The low 12 bits of absolute address for SYMBOL.
19256
19257`%hi(SYMBOL)'
19258     The high 20 bits of absolute address for SYMBOL.  This is usually
19259     used with the %lo modifier to represent a 32-bit absolute address.
19260
19261          	lui        a0, %hi(SYMBOL)     // R_RISCV_HI20
19262          	addi       a0, a0, %lo(SYMBOL) // R_RISCV_LO12_I
19263
19264          	lui        a0, %hi(SYMBOL)     // R_RISCV_HI20
19265          	load/store a0, %lo(SYMBOL)(a0) // R_RISCV_LO12_I/S
19266
19267`%pcrel_lo(LABEL)'
19268     The low 12 bits of relative address between pc and SYMBOL.  The
19269     SYMBOL is related to the high part instruction which is marked by
19270     LABEL.
19271
19272`%pcrel_hi(SYMBOL)'
19273     The high 20 bits of relative address between pc and SYMBOL.  This
19274     is usually used with the %pcrel_lo modifier to represent a +/-2GB
19275     pc-relative range.
19276
19277          LABEL:
19278          	auipc      a0, %pcrel_hi(SYMBOL)    // R_RISCV_PCREL_HI20
19279          	addi       a0, a0, %pcrel_lo(LABEL) // R_RISCV_PCREL_LO12_I
19280
19281          LABEL:
19282          	auipc      a0, %pcrel_hi(SYMBOL)    // R_RISCV_PCREL_HI20
19283          	load/store a0, %pcrel_lo(LABEL)(a0) // R_RISCV_PCREL_LO12_I/S
19284
19285     Or you can use the pseudo lla/lw/sw/... instruction to do this.
19286
19287          	lla  a0, SYMBOL
19288
19289`%got_pcrel_hi(SYMBOL)'
19290     The high 20 bits of relative address between pc and the GOT entry
19291     of SYMBOL.  This is usually used with the %pcrel_lo modifier to
19292     access the GOT entry.
19293
19294          LABEL:
19295          	auipc      a0, %got_pcrel_hi(SYMBOL) // R_RISCV_GOT_HI20
19296          	addi       a0, a0, %pcrel_lo(LABEL)  // R_RISCV_PCREL_LO12_I
19297
19298          LABEL:
19299          	auipc      a0, %got_pcrel_hi(SYMBOL) // R_RISCV_GOT_HI20
19300          	load/store a0, %pcrel_lo(LABEL)(a0)  // R_RISCV_PCREL_LO12_I/S
19301
19302     Also, the pseudo la instruction with PIC has similar behavior.
19303
19304`%tprel_add(SYMBOL)'
19305     This is used purely to associate the R_RISCV_TPREL_ADD relocation
19306     for TLS relaxation.  This one is only valid as the fourth operand
19307     to the normally 3 operand add instruction.
19308
19309`%tprel_lo(SYMBOL)'
19310     The low 12 bits of relative address between tp and SYMBOL.
19311
19312`%tprel_hi(SYMBOL)'
19313     The high 20 bits of relative address between tp and SYMBOL.  This
19314     is usually used with the %tprel_lo and %tprel_add modifiers to
19315     access the thread local variable SYMBOL in TLS Local Exec.
19316
19317          	lui        a5, %tprel_hi(SYMBOL)          // R_RISCV_TPREL_HI20
19318          	add        a5, a5, tp, %tprel_add(SYMBOL) // R_RISCV_TPREL_ADD
19319          	load/store t0, %tprel_lo(SYMBOL)(a5)      // R_RISCV_TPREL_LO12_I/S
19320
19321`%tls_ie_pcrel_hi(SYMBOL)'
19322     The high 20 bits of relative address between pc and GOT entry.  It
19323     is usually used with the %pcrel_lo modifier to access the thread
19324     local variable SYMBOL in TLS Initial Exec.
19325
19326          	la.tls.ie  a5, SYMBOL
19327          	add        a5, a5, tp
19328          	load/store t0, 0(a5)
19329
19330     The pseudo la.tls.ie instruction can be expended to
19331
19332          LABEL:
19333          	auipc a5, %tls_ie_pcrel_hi(SYMBOL) // R_RISCV_TLS_GOT_HI20
19334          	load  a5, %pcrel_lo(LABEL)(a5)     // R_RISCV_PCREL_LO12_I
19335
19336`%tls_gd_pcrel_hi(SYMBOL)'
19337     The high 20 bits of relative address between pc and GOT entry.  It
19338     is usually used with the %pcrel_lo modifier to access the thread
19339     local variable SYMBOL in TLS Global Dynamic.
19340
19341          	la.tls.gd  a0, SYMBOL
19342          	call       __tls_get_addr@plt
19343          	mv         a5, a0
19344          	load/store t0, 0(a5)
19345
19346     The pseudo la.tls.gd instruction can be expended to
19347
19348          LABEL:
19349          	auipc a0, %tls_gd_pcrel_hi(SYMBOL) // R_RISCV_TLS_GD_HI20
19350          	addi  a0, a0, %pcrel_lo(LABEL)     // R_RISCV_PCREL_LO12_I
19351
19352
19353
19354File: as.info,  Node: RISC-V-Formats,  Next: RISC-V-ATTRIBUTE,  Prev: RISC-V-Modifiers,  Up: RISC-V-Dependent
19355
193569.38.4 RISC-V Instruction Formats
19357---------------------------------
19358
19359The RISC-V Instruction Set Manual Volume I: User-Level ISA lists 15
19360instruction formats where some of the formats have multiple variants.
19361For the `.insn' pseudo directive the assembler recognizes some of the
19362formats.  Typically, the most general variant of the instruction format
19363is used by the `.insn' directive.
19364
19365   The following table lists the abbreviations used in the table of
19366instruction formats:
19367
19368     opcode     Unsigned immediate or opcode name for 7-bits opcode.
19369     opcode2    Unsigned immediate or opcode name for 2-bits opcode.
19370     func7      Unsigned immediate for 7-bits function code.
19371     func6      Unsigned immediate for 6-bits function code.
19372     func4      Unsigned immediate for 4-bits function code.
19373     func3      Unsigned immediate for 3-bits function code.
19374     func2      Unsigned immediate for 2-bits function code.
19375     rd         Destination register number for operand x, can be GPR or FPR.
19376     rd'        Destination register number for operand x,
19377                only accept s0-s1, a0-a5, fs0-fs1 and fa0-fa5.
19378     rs1        First source register number for operand x, can be GPR or FPR.
19379     rs1'       First source register number for operand x,
19380                only accept s0-s1, a0-a5, fs0-fs1 and fa0-fa5.
19381     rs2        Second source register number for operand x, can be GPR or FPR.
19382     rs2'       Second source register number for operand x,
19383                only accept s0-s1, a0-a5, fs0-fs1 and fa0-fa5.
19384     simm12     Sign-extended 12-bit immediate for operand x.
19385     simm20     Sign-extended 20-bit immediate for operand x.
19386     simm6      Sign-extended 6-bit immediate for operand x.
19387     uimm5      Unsigned 5-bit immediate for operand x.
19388     uimm6      Unsigned 6-bit immediate for operand x.
19389     uimm8      Unsigned 8-bit immediate for operand x.
19390     symbol     Symbol or lable reference for operand x.
19391
19392   The following table lists all available opcode name:
19393
19394`C0'
19395
19396`C1'
19397
19398`C2'
19399     Opcode space for compressed instructions.
19400
19401`LOAD'
19402     Opcode space for load instructions.
19403
19404`LOAD_FP'
19405     Opcode space for floating-point load instructions.
19406
19407`STORE'
19408     Opcode space for store instructions.
19409
19410`STORE_FP'
19411     Opcode space for floating-point store instructions.
19412
19413`AUIPC'
19414     Opcode space for auipc instruction.
19415
19416`LUI'
19417     Opcode space for lui instruction.
19418
19419`BRANCH'
19420     Opcode space for branch instructions.
19421
19422`JAL'
19423     Opcode space for jal instruction.
19424
19425`JALR'
19426     Opcode space for jalr instruction.
19427
19428`OP'
19429     Opcode space for ALU instructions.
19430
19431`OP_32'
19432     Opcode space for 32-bits ALU instructions.
19433
19434`OP_IMM'
19435     Opcode space for ALU with immediate instructions.
19436
19437`OP_IMM_32'
19438     Opcode space for 32-bits ALU with immediate instructions.
19439
19440`OP_FP'
19441     Opcode space for floating-point operation instructions.
19442
19443`MADD'
19444     Opcode space for madd instruction.
19445
19446`MSUB'
19447     Opcode space for msub instruction.
19448
19449`NMADD'
19450     Opcode space for nmadd instruction.
19451
19452`NMSUB'
19453     Opcode space for msub instruction.
19454
19455`AMO'
19456     Opcode space for atomic memory operation instructions.
19457
19458`MISC_MEM'
19459     Opcode space for misc instructions.
19460
19461`SYSTEM'
19462     Opcode space for system instructions.
19463
19464`CUSTOM_0'
19465
19466`CUSTOM_1'
19467
19468`CUSTOM_2'
19469
19470`CUSTOM_3'
19471     Opcode space for customize instructions.
19472
19473
19474   An instruction is two or four bytes in length and must be aligned on
19475a 2 byte boundary. The first two bits of the instruction specify the
19476length of the instruction, 00, 01 and 10 indicates a two byte
19477instruction, 11 indicates a four byte instruction.
19478
19479   The following table lists the RISC-V instruction formats that are
19480available with the `.insn' pseudo directive:
19481
19482`R type: .insn r opcode6, func3, func7, rd, rs1, rs2'
19483
19484     +-------+-----+-----+-------+----+---------+
19485     | func7 | rs2 | rs1 | func3 | rd | opcode6 |
19486     +-------+-----+-----+-------+----+---------+
19487     31      25    20    15      12   7        0
19488
19489`R type with 4 register operands: .insn r opcode6, func3, func2, rd, rs1, rs2, rs3'
19490`R4 type: .insn r4 opcode6, func3, func2, rd, rs1, rs2, rs3'
19491
19492     +-----+-------+-----+-----+-------+----+---------+
19493     | rs3 | func2 | rs2 | rs1 | func3 | rd | opcode6 |
19494     +-----+-------+-----+-----+-------+----+---------+
19495     31    27      25    20    15      12   7         0
19496
19497`I type: .insn i opcode6, func3, rd, rs1, simm12'
19498`I type: .insn i opcode6, func3, rd, simm12(rs1)'
19499
19500     +--------------+-----+-------+----+---------+
19501     | simm12[11:0] | rs1 | func3 | rd | opcode6 |
19502     +--------------+-----+-------+----+---------+
19503     31             20    15      12   7         0
19504
19505`S type: .insn s opcode6, func3, rs2, simm12(rs1)'
19506
19507     +--------------+-----+-----+-------+-------------+---------+
19508     | simm12[11:5] | rs2 | rs1 | func3 | simm12[4:0] | opcode6 |
19509     +--------------+-----+-----+-------+-------------+---------+
19510     31             25    20    15      12            7         0
19511
19512`B type: .insn s opcode6, func3, rs1, rs2, symbol'
19513`SB type: .insn sb opcode6, func3, rs1, rs2, symbol'
19514
19515     +-----------------+-----+-----+-------+----------------+---------+
19516     | simm12[12|10:5] | rs2 | rs1 | func3 | simm12[4:1|11] | opcode6 |
19517     +-----------------+-----+-----+-------+----------------+---------+
19518     31                25    20    15      12               7         0
19519
19520`U type: .insn u opcode6, rd, simm20'
19521
19522     +--------------------------+----+---------+
19523     | simm20[20|10:1|11|19:12] | rd | opcode6 |
19524     +--------------------------+----+---------+
19525     31                         12   7         0
19526
19527`J type: .insn j opcode6, rd, symbol'
19528`UJ type: .insn uj opcode6, rd, symbol'
19529
19530     +------------+--------------+------------+---------------+----+---------+
19531     | simm20[20] | simm20[10:1] | simm20[11] | simm20[19:12] | rd | opcode6 |
19532     +------------+--------------+------------+---------------+----+---------+
19533     31           30             21           20              12   7         0
19534
19535`CR type: .insn cr opcode2, func4, rd, rs2'
19536
19537     +-------+--------+-----+---------+
19538     | func4 | rd/rs1 | rs2 | opcode2 |
19539     +-------+--------+-----+---------+
19540     15      12       7     2        0
19541
19542`CI type: .insn ci opcode2, func3, rd, simm6'
19543
19544     +-------+----------+--------+------------+---------+
19545     | func3 | simm6[5] | rd/rs1 | simm6[4:0] | opcode2 |
19546     +-------+----------+--------+------------+---------+
19547     15      13         12       7            2         0
19548
19549`CIW type: .insn ciw opcode2, func3, rd', uimm8'
19550
19551     +-------+------------+-----+---------+
19552     | func3 | uimm8[7:0] | rd' | opcode2 |
19553     +-------+-------- ---+-----+---------+
19554     15      13           5     2         0
19555
19556`CSS type: .insn css opcode2, func3, rd, uimm6'
19557
19558     +-------+------------+----+---------+
19559     | func3 | uimm6[5:0] | rd | opcode2 |
19560     +-------+------------+----+---------+
19561     15      13           7    2         0
19562
19563`CL type: .insn cl opcode2, func3, rd', uimm5(rs1')'
19564
19565     +-------+------------+------+------------+------+---------+
19566     | func3 | uimm5[4:2] | rs1' | uimm5[1:0] |  rd' | opcode2 |
19567     +-------+------------+------+------------+------+---------+
19568     15      13           10     7            5      2         0
19569
19570`CS type: .insn cs opcode2, func3, rs2', uimm5(rs1')'
19571
19572     +-------+------------+------+------------+------+---------+
19573     | func3 | uimm5[4:2] | rs1' | uimm5[1:0] | rs2' | opcode2 |
19574     +-------+------------+------+------------+------+---------+
19575     15      13           10     7            5      2         0
19576
19577`CA type: .insn ca opcode2, func6, func2, rd', rs2''
19578
19579     +-- ----+----------+-------+------+---------+
19580     | func6 | rd'/rs1' | func2 | rs2' | opcode2 |
19581     +-------+----------+-------+------+---------+
19582     15      10         7       5      2         0
19583
19584`CB type: .insn cb opcode2, func3, rs1', symbol'
19585
19586     +-------+--------------+------+------------------+---------+
19587     | func3 | simm8[8|4:3] | rs1' | simm8[7:6|2:1|5] | opcode2 |
19588     +-------+--------------+------+------------------+---------+
19589     15      13             10     7                  2         0
19590
19591`CJ type: .insn cj opcode2, symbol'
19592
19593     +-------+-------------------------------+---------+
19594     | func3 | simm11[11|4|9:8|10|6|7|3:1|5] | opcode2 |
19595     +-------+-------------------------------+---------+
19596     15      13                              2         0
19597
19598
19599   For the complete list of all instruction format variants see The
19600RISC-V Instruction Set Manual Volume I: User-Level ISA.
19601
19602
19603File: as.info,  Node: RISC-V-ATTRIBUTE,  Prev: RISC-V-Formats,  Up: RISC-V-Dependent
19604
196059.38.5 RISC-V Object Attribute
19606------------------------------
19607
19608RISC-V attributes have a string value if the tag number is odd and an
19609integer value if the tag number is even.
19610
19611Tag_RISCV_stack_align (4)
19612     Tag_RISCV_strict_align records the N-byte stack alignment for this
19613     object.  The default value is 16 for RV32I or RV64I, and 4 for
19614     RV32E.
19615
19616     The smallest value will be used if object files with different
19617     Tag_RISCV_stack_align values are merged.
19618
19619Tag_RISCV_arch (5)
19620     Tag_RISCV_arch contains a string for the target architecture taken
19621     from the option `-march'.  Different architectures will be
19622     integrated into a superset when object files are merged.
19623
19624     Note that the version information of the target architecture must
19625     be presented explicitly in the attribute and abbreviations must be
19626     expanded.  The version information, if not given by `-march', must
19627     be in accordance with the default specified by the tool.  For
19628     example, the architecture `RV32I' has to be recorded in the
19629     attribute as `RV32I2P0' in which `2P0' stands for the default
19630     version of its base ISA.  On the other hand, the architecture
19631     `RV32G' has to be presented as `RV32I2P0_M2P0_A2P0_F2P0_D2P0' in
19632     which the abbreviation `G' is expanded to the `IMAFD' combination
19633     with default versions of the standard extensions.
19634
19635Tag_RISCV_unaligned_access (6)
19636     Tag_RISCV_unaligned_access is 0 for files that do not allow any
19637     unaligned memory accesses, and 1 for files that do allow unaligned
19638     memory accesses.
19639
19640Tag_RISCV_priv_spec (8)
19641
19642Tag_RISCV_priv_spec_minor (10)
19643
19644Tag_RISCV_priv_spec_revision (12)
19645     Tag_RISCV_priv_spec contains the major/minor/revision version
19646     information of the privileged specification.  It will report
19647     errors if object files of different privileged specification
19648     versions are merged.
19649
19650
19651
19652File: as.info,  Node: RL78-Dependent,  Next: RX-Dependent,  Prev: RISC-V-Dependent,  Up: Machine Dependencies
19653
196549.39 RL78 Dependent Features
19655============================
19656
19657* Menu:
19658
19659* RL78-Opts::                   RL78 Assembler Command-line Options
19660* RL78-Modifiers::              Symbolic Operand Modifiers
19661* RL78-Directives::             Assembler Directives
19662* RL78-Syntax::                 Syntax
19663
19664
19665File: as.info,  Node: RL78-Opts,  Next: RL78-Modifiers,  Up: RL78-Dependent
19666
196679.39.1 RL78 Options
19668-------------------
19669
19670`relax'
19671     Enable support for link-time relaxation.
19672
19673`norelax'
19674     Disable support for link-time relaxation (default).
19675
19676`mg10'
19677     Mark the generated binary as targeting the G10 variant of the RL78
19678     architecture.
19679
19680`mg13'
19681     Mark the generated binary as targeting the G13 variant of the RL78
19682     architecture.
19683
19684`mg14'
19685`mrl78'
19686     Mark the generated binary as targeting the G14 variant of the RL78
19687     architecture.  This is the default.
19688
19689`m32bit-doubles'
19690     Mark the generated binary as one that uses 32-bits to hold the
19691     `double' floating point type.  This is the default.
19692
19693`m64bit-doubles'
19694     Mark the generated binary as one that uses 64-bits to hold the
19695     `double' floating point type.
19696
19697
19698
19699File: as.info,  Node: RL78-Modifiers,  Next: RL78-Directives,  Prev: RL78-Opts,  Up: RL78-Dependent
19700
197019.39.2 Symbolic Operand Modifiers
19702---------------------------------
19703
19704The RL78 has three modifiers that adjust the relocations used by the
19705linker:
19706
19707`%lo16()'
19708     When loading a 20-bit (or wider) address into registers, this
19709     modifier selects the 16 least significant bits.
19710
19711            movw ax,#%lo16(_sym)
19712
19713`%hi16()'
19714     When loading a 20-bit (or wider) address into registers, this
19715     modifier selects the 16 most significant bits.
19716
19717            movw ax,#%hi16(_sym)
19718
19719`%hi8()'
19720     When loading a 20-bit (or wider) address into registers, this
19721     modifier selects the 8 bits that would go into CS or ES (i.e. bits
19722     23..16).
19723
19724            mov es, #%hi8(_sym)
19725
19726
19727
19728File: as.info,  Node: RL78-Directives,  Next: RL78-Syntax,  Prev: RL78-Modifiers,  Up: RL78-Dependent
19729
197309.39.3 Assembler Directives
19731---------------------------
19732
19733In addition to the common directives, the RL78 adds these:
19734
19735`.double'
19736     Output a constant in "double" format, which is either a 32-bit or
19737     a 64-bit floating point value, depending upon the setting of the
19738     `-m32bit-doubles'|`-m64bit-doubles' command-line option.
19739
19740`.bss'
19741     Select the BSS section.
19742
19743`.3byte'
19744     Output a constant value in a three byte format.
19745
19746`.int'
19747`.word'
19748     Output a constant value in a four byte format.
19749
19750
19751
19752File: as.info,  Node: RL78-Syntax,  Prev: RL78-Directives,  Up: RL78-Dependent
19753
197549.39.4 Syntax for the RL78
19755--------------------------
19756
19757* Menu:
19758
19759* RL78-Chars::                Special Characters
19760
19761
19762File: as.info,  Node: RL78-Chars,  Up: RL78-Syntax
19763
197649.39.4.1 Special Characters
19765...........................
19766
19767The presence of a `;' appearing anywhere on a line indicates the start
19768of a comment that extends to the end of that line.
19769
19770   If a `#' appears as the first character of a line then the whole
19771line is treated as a comment, but in this case the line can also be a
19772logical line number directive (*note Comments::) or a preprocessor
19773control command (*note Preprocessing::).
19774
19775   The `|' character can be used to separate statements on the same
19776line.
19777
19778
19779File: as.info,  Node: RX-Dependent,  Next: S/390-Dependent,  Prev: RL78-Dependent,  Up: Machine Dependencies
19780
197819.40 RX Dependent Features
19782==========================
19783
19784* Menu:
19785
19786* RX-Opts::                   RX Assembler Command-line Options
19787* RX-Modifiers::              Symbolic Operand Modifiers
19788* RX-Directives::             Assembler Directives
19789* RX-Float::                  Floating Point
19790* RX-Syntax::                 Syntax
19791
19792
19793File: as.info,  Node: RX-Opts,  Next: RX-Modifiers,  Up: RX-Dependent
19794
197959.40.1 RX Options
19796-----------------
19797
19798The Renesas RX port of `as' has a few target specific command-line
19799options:
19800
19801`-m32bit-doubles'
19802     This option controls the ABI and indicates to use a 32-bit float
19803     ABI.  It has no effect on the assembled instructions, but it does
19804     influence the behaviour of the `.double' pseudo-op.  This is the
19805     default.
19806
19807`-m64bit-doubles'
19808     This option controls the ABI and indicates to use a 64-bit float
19809     ABI.  It has no effect on the assembled instructions, but it does
19810     influence the behaviour of the `.double' pseudo-op.
19811
19812`-mbig-endian'
19813     This option controls the ABI and indicates to use a big-endian data
19814     ABI.  It has no effect on the assembled instructions, but it does
19815     influence the behaviour of the `.short', `.hword', `.int',
19816     `.word', `.long', `.quad' and `.octa' pseudo-ops.
19817
19818`-mlittle-endian'
19819     This option controls the ABI and indicates to use a little-endian
19820     data ABI.  It has no effect on the assembled instructions, but it
19821     does influence the behaviour of the `.short', `.hword', `.int',
19822     `.word', `.long', `.quad' and `.octa' pseudo-ops.  This is the
19823     default.
19824
19825`-muse-conventional-section-names'
19826     This option controls the default names given to the code (.text),
19827     initialised data (.data) and uninitialised data sections (.bss).
19828
19829`-muse-renesas-section-names'
19830     This option controls the default names given to the code (P),
19831     initialised data (D_1) and uninitialised data sections (B_1).
19832     This is the default.
19833
19834`-msmall-data-limit'
19835     This option tells the assembler that the small data limit feature
19836     of the RX port of GCC is being used.  This results in the assembler
19837     generating an undefined reference to a symbol called `__gp' for
19838     use by the relocations that are needed to support the small data
19839     limit feature.   This option is not enabled by default as it would
19840     otherwise pollute the symbol table.
19841
19842`-mpid'
19843     This option tells the assembler that the position independent data
19844     of the RX port of GCC is being used.  This results in the assembler
19845     generating an undefined reference to a symbol called `__pid_base',
19846     and also setting the RX_PID flag bit in the e_flags field of the
19847     ELF header of the object file.
19848
19849`-mint-register=NUM'
19850     This option tells the assembler how many registers have been
19851     reserved for use by interrupt handlers.  This is needed in order
19852     to compute the correct values for the `%gpreg' and `%pidreg' meta
19853     registers.
19854
19855`-mgcc-abi'
19856     This option tells the assembler that the old GCC ABI is being used
19857     by the assembled code.  With this version of the ABI function
19858     arguments that are passed on the stack are aligned to a 32-bit
19859     boundary.
19860
19861`-mrx-abi'
19862     This option tells the assembler that the official RX ABI is being
19863     used by the assembled code.  With this version of the ABI function
19864     arguments that are passed on the stack are aligned to their natural
19865     alignments.  This option is the default.
19866
19867`-mcpu=NAME'
19868     This option tells the assembler the target CPU type.  Currently the
19869     `rx100', `rx200', `rx600', `rx610', `rxv2', `rxv3' and `rxv3-dfpu'
19870     are recognised as valid cpu names.  Attempting to assemble an
19871     instructionnot supported by the indicated cpu type will result in
19872     an error message being generated.
19873
19874`-mno-allow-string-insns'
19875     This option tells the assembler to mark the object file that it is
19876     building as one that does not use the string instructions `SMOVF',
19877     `SCMPU', `SMOVB', `SMOVU', `SUNTIL' `SWHILE' or the `RMPA'
19878     instruction.  In addition the mark tells the linker to complain if
19879     an attempt is made to link the binary with another one that does
19880     use any of these instructions.
19881
19882     Note - the inverse of this option, `-mallow-string-insns', is not
19883     needed.  The assembler automatically detects the use of the the
19884     instructions in the source code and labels the resulting object
19885     file appropriately.  If no string instructions are detected then
19886     the object file is labelled as being one that can be linked with
19887     either string-using or string-banned object files.
19888
19889
19890File: as.info,  Node: RX-Modifiers,  Next: RX-Directives,  Prev: RX-Opts,  Up: RX-Dependent
19891
198929.40.2 Symbolic Operand Modifiers
19893---------------------------------
19894
19895The assembler supports one modifier when using symbol addresses in RX
19896instruction operands.  The general syntax is the following:
19897
19898     %gp(symbol)
19899
19900   The modifier returns the offset from the __GP symbol to the
19901specified symbol as a 16-bit value.  The intent is that this offset
19902should be used in a register+offset move instruction when generating
19903references to small data.  Ie, like this:
19904
19905       mov.W	 %gp(_foo)[%gpreg], r1
19906
19907   The assembler also supports two meta register names which can be used
19908to refer to registers whose values may not be known to the programmer.
19909These meta register names are:
19910
19911`%gpreg'
19912     The small data address register.
19913
19914`%pidreg'
19915     The PID base address register.
19916
19917
19918   Both registers normally have the value r13, but this can change if
19919some registers have been reserved for use by interrupt handlers or if
19920both the small data limit and position independent data features are
19921being used at the same time.
19922
19923
19924File: as.info,  Node: RX-Directives,  Next: RX-Float,  Prev: RX-Modifiers,  Up: RX-Dependent
19925
199269.40.3 Assembler Directives
19927---------------------------
19928
19929The RX version of `as' has the following specific assembler directives:
19930
19931`.3byte'
19932     Inserts a 3-byte value into the output file at the current
19933     location.
19934
19935`.fetchalign'
19936     If the next opcode following this directive spans a fetch line
19937     boundary (8 byte boundary), the opcode is aligned to that boundary.
19938     If the next opcode does not span a fetch line, this directive has
19939     no effect.  Note that one or more labels may be between this
19940     directive and the opcode; those labels are aligned as well.  Any
19941     inserted bytes due to alignment will form a NOP opcode.
19942
19943
19944
19945File: as.info,  Node: RX-Float,  Next: RX-Syntax,  Prev: RX-Directives,  Up: RX-Dependent
19946
199479.40.4 Floating Point
19948---------------------
19949
19950The floating point formats generated by directives are these.
19951
19952`.float'
19953     `Single' precision (32-bit) floating point constants.
19954
19955`.double'
19956     If the `-m64bit-doubles' command-line option has been specified
19957     then then `double' directive generates `double' precision (64-bit)
19958     floating point constants, otherwise it generates `single'
19959     precision (32-bit) floating point constants.  To force the
19960     generation of 64-bit floating point constants used the `dc.d'
19961     directive instead.
19962
19963
19964
19965File: as.info,  Node: RX-Syntax,  Prev: RX-Float,  Up: RX-Dependent
19966
199679.40.5 Syntax for the RX
19968------------------------
19969
19970* Menu:
19971
19972* RX-Chars::                Special Characters
19973
19974
19975File: as.info,  Node: RX-Chars,  Up: RX-Syntax
19976
199779.40.5.1 Special Characters
19978...........................
19979
19980The presence of a `;' appearing anywhere on a line indicates the start
19981of a comment that extends to the end of that line.
19982
19983   If a `#' appears as the first character of a line then the whole
19984line is treated as a comment, but in this case the line can also be a
19985logical line number directive (*note Comments::) or a preprocessor
19986control command (*note Preprocessing::).
19987
19988   The `!' character can be used to separate statements on the same
19989line.
19990
19991
19992File: as.info,  Node: S/390-Dependent,  Next: SCORE-Dependent,  Prev: RX-Dependent,  Up: Machine Dependencies
19993
199949.41 IBM S/390 Dependent Features
19995=================================
19996
19997   The s390 version of `as' supports two architectures modes and eleven
19998chip levels. The architecture modes are the Enterprise System
19999Architecture (ESA) and the newer z/Architecture mode. The chip levels
20000are g5 (or arch3), g6, z900 (or arch5), z990 (or arch6), z9-109, z9-ec
20001(or arch7), z10 (or arch8), z196 (or arch9), zEC12 (or arch10), z13 (or
20002arch11), z14 (or arch12), z15 (or arch13), or z16 (or arch14).
20003
20004* Menu:
20005
20006* s390 Options::                Command-line Options.
20007* s390 Characters::		Special Characters.
20008* s390 Syntax::                 Assembler Instruction syntax.
20009* s390 Directives::             Assembler Directives.
20010* s390 Floating Point::         Floating Point.
20011
20012
20013File: as.info,  Node: s390 Options,  Next: s390 Characters,  Up: S/390-Dependent
20014
200159.41.1 Options
20016--------------
20017
20018The following table lists all available s390 specific options:
20019
20020`-m31 | -m64'
20021     Select 31- or 64-bit ABI implying a word size of 32- or 64-bit.
20022
20023     These options are only available with the ELF object file format,
20024     and require that the necessary BFD support has been included (on a
20025     31-bit platform you must add -enable-64-bit-bfd on the call to the
20026     configure script to enable 64-bit usage and use s390x as target
20027     platform).
20028
20029`-mesa | -mzarch'
20030     Select the architecture mode, either the Enterprise System
20031     Architecture (esa) mode or the z/Architecture mode (zarch).
20032
20033     The 64-bit instructions are only available with the z/Architecture
20034     mode.  The combination of `-m64' and `-mesa' results in a warning
20035     message.
20036
20037`-march=CPU'
20038     This option specifies the target processor. The following
20039     processor names are recognized: `g5' (or `arch3'), `g6', `z900'
20040     (or `arch5'), `z990' (or `arch6'), `z9-109', `z9-ec' (or `arch7'),
20041     `z10' (or `arch8'), `z196' (or `arch9'), `zEC12' (or `arch10'),
20042     `z13' (or `arch11'), `z14' (or `arch12'), `z15' (or `arch13'), and
20043     `z16' (or `arch14').
20044
20045     Assembling an instruction that is not supported on the target
20046     processor results in an error message.
20047
20048     The processor names starting with `arch' refer to the edition
20049     number in the Principle of Operations manual.  They can be used as
20050     alternate processor names and have been added for compatibility
20051     with the IBM XL compiler.
20052
20053     `arch3', `g5' and `g6' cannot be used with the `-mzarch' option
20054     since the z/Architecture mode is not supported on these processor
20055     levels.
20056
20057     There is no `arch4' option supported. `arch4' matches
20058     `-march=arch5 -mesa'.
20059
20060`-mregnames'
20061     Allow symbolic names for registers.
20062
20063`-mno-regnames'
20064     Do not allow symbolic names for registers.
20065
20066`-mwarn-areg-zero'
20067     Warn whenever the operand for a base or index register has been
20068     specified but evaluates to zero. This can indicate the misuse of
20069     general purpose register 0 as an address register.
20070
20071
20072
20073File: as.info,  Node: s390 Characters,  Next: s390 Syntax,  Prev: s390 Options,  Up: S/390-Dependent
20074
200759.41.2 Special Characters
20076-------------------------
20077
20078`#' is the line comment character.
20079
20080   If a `#' appears as the first character of a line then the whole
20081line is treated as a comment, but in this case the line could also be a
20082logical line number directive (*note Comments::) or a preprocessor
20083control command (*note Preprocessing::).
20084
20085   The `;' character can be used instead of a newline to separate
20086statements.
20087
20088
20089File: as.info,  Node: s390 Syntax,  Next: s390 Directives,  Prev: s390 Characters,  Up: S/390-Dependent
20090
200919.41.3 Instruction syntax
20092-------------------------
20093
20094The assembler syntax closely follows the syntax outlined in Enterprise
20095Systems Architecture/390 Principles of Operation (SA22-7201) and the
20096z/Architecture Principles of Operation (SA22-7832).
20097
20098   Each instruction has two major parts, the instruction mnemonic and
20099the instruction operands. The instruction format varies.
20100
20101* Menu:
20102
20103* s390 Register::               Register Naming
20104* s390 Mnemonics::              Instruction Mnemonics
20105* s390 Operands::               Instruction Operands
20106* s390 Formats::                Instruction Formats
20107* s390 Aliases::		Instruction Aliases
20108* s390 Operand Modifier::       Instruction Operand Modifier
20109* s390 Instruction Marker::     Instruction Marker
20110* s390 Literal Pool Entries::   Literal Pool Entries
20111
20112
20113File: as.info,  Node: s390 Register,  Next: s390 Mnemonics,  Up: s390 Syntax
20114
201159.41.3.1 Register naming
20116........................
20117
20118The `as' recognizes a number of predefined symbols for the various
20119processor registers. A register specification in one of the instruction
20120formats is an unsigned integer between 0 and 15. The specific
20121instruction and the position of the register in the instruction format
20122denotes the type of the register. The register symbols are prefixed with
20123`%':
20124
20125     %rN   the 16 general purpose registers, 0 <= N <= 15
20126     %fN   the 16 floating point registers, 0 <= N <= 15
20127     %aN   the 16 access registers, 0 <= N <= 15
20128     %cN   the 16 control registers, 0 <= N <= 15
20129     %lit  an alias for the general purpose register %r13
20130     %sp   an alias for the general purpose register %r15
20131
20132
20133File: as.info,  Node: s390 Mnemonics,  Next: s390 Operands,  Prev: s390 Register,  Up: s390 Syntax
20134
201359.41.3.2 Instruction Mnemonics
20136..............................
20137
20138All instructions documented in the Principles of Operation are supported
20139with the mnemonic and order of operands as described.  The instruction
20140mnemonic identifies the instruction format (*Note s390 Formats::) and
20141the specific operation code for the instruction.  For example, the `lr'
20142mnemonic denotes the instruction format `RR' with the operation code
20143`0x18'.
20144
20145   The definition of the various mnemonics follows a scheme, where the
20146first character usually hint at the type of the instruction:
20147
20148     a          add instruction, for example `al' for add logical 32-bit
20149     b          branch instruction, for example `bc' for branch on condition
20150     c          compare or convert instruction, for example `cr' for compare
20151                register 32-bit
20152     d          divide instruction, for example `dlr' devide logical register
20153                64-bit to 32-bit
20154     i          insert instruction, for example `ic' insert character
20155     l          load instruction, for example `ltr' load and test register
20156     mv         move instruction, for example `mvc' move character
20157     m          multiply instruction, for example `mh' multiply halfword
20158     n          and instruction, for example `ni' and immediate
20159     o          or instruction, for example `oc' or character
20160     sla, sll   shift left single instruction
20161     sra, srl   shift right single instruction
20162     st         store instruction, for example `stm' store multiple
20163     s          subtract instruction, for example `slr' subtract
20164                logical 32-bit
20165     t          test or translate instruction, of example `tm' test under mask
20166     x          exclusive or instruction, for example `xc' exclusive or
20167                character
20168
20169   Certain characters at the end of the mnemonic may describe a property
20170of the instruction:
20171
20172     c   the instruction uses a 8-bit character operand
20173     f   the instruction extends a 32-bit operand to 64 bit
20174     g   the operands are treated as 64-bit values
20175     h   the operand uses a 16-bit halfword operand
20176     i   the instruction uses an immediate operand
20177     l   the instruction uses unsigned, logical operands
20178     m   the instruction uses a mask or operates on multiple values
20179     r   if r is the last character, the instruction operates on registers
20180     y   the instruction uses 20-bit displacements
20181
20182   There are many exceptions to the scheme outlined in the above lists,
20183in particular for the privileged instructions. For non-privileged
20184instruction it works quite well, for example the instruction `clgfr' c:
20185compare instruction, l: unsigned operands, g: 64-bit operands, f: 32-
20186to 64-bit extension, r: register operands. The instruction compares an
2018764-bit value in a register with the zero extended 32-bit value from a
20188second register.  For a complete list of all mnemonics see appendix B
20189in the Principles of Operation.
20190
20191
20192File: as.info,  Node: s390 Operands,  Next: s390 Formats,  Prev: s390 Mnemonics,  Up: s390 Syntax
20193
201949.41.3.3 Instruction Operands
20195.............................
20196
20197Instruction operands can be grouped into three classes, operands located
20198in registers, immediate operands, and operands in storage.
20199
20200   A register operand can be located in general, floating-point, access,
20201or control register. The register is identified by a four-bit field.
20202The field containing the register operand is called the R field.
20203
20204   Immediate operands are contained within the instruction and can have
202058, 16 or 32 bits. The field containing the immediate operand is called
20206the I field. Dependent on the instruction the I field is either signed
20207or unsigned.
20208
20209   A storage operand consists of an address and a length. The address
20210of a storage operands can be specified in any of these ways:
20211
20212   * The content of a single general R
20213
20214   * The sum of the content of a general register called the base
20215     register B plus the content of a displacement field D
20216
20217   * The sum of the contents of two general registers called the index
20218     register X and the base register B plus the content of a
20219     displacement field
20220
20221   * The sum of the current instruction address and a 32-bit signed
20222     immediate field multiplied by two.
20223
20224   The length of a storage operand can be:
20225
20226   * Implied by the instruction
20227
20228   * Specified by a bitmask
20229
20230   * Specified by a four-bit or eight-bit length field L
20231
20232   * Specified by the content of a general register
20233
20234   The notation for storage operand addresses formed from multiple
20235fields is as follows:
20236
20237`Dn(Bn)'
20238     the address for operand number n is formed from the content of
20239     general register Bn called the base register and the displacement
20240     field Dn.
20241
20242`Dn(Xn,Bn)'
20243     the address for operand number n is formed from the content of
20244     general register Xn called the index register, general register Bn
20245     called the base register and the displacement field Dn.
20246
20247`Dn(Ln,Bn)'
20248     the address for operand number n is formed from the content of
20249     general register Bn called the base register and the displacement
20250     field Dn.  The length of the operand n is specified by the field
20251     Ln.
20252
20253   The base registers Bn and the index registers Xn of a storage
20254operand can be skipped. If Bn and Xn are skipped, a zero will be stored
20255to the operand field. The notation changes as follows:
20256
20257     full notation        short notation
20258     ------------------------------------------
20259     Dn(0,Bn)             Dn(Bn)
20260     Dn(0,0)              Dn
20261     Dn(0)                Dn
20262     Dn(Ln,0)             Dn(Ln)
20263
20264
20265File: as.info,  Node: s390 Formats,  Next: s390 Aliases,  Prev: s390 Operands,  Up: s390 Syntax
20266
202679.41.3.4 Instruction Formats
20268............................
20269
20270The Principles of Operation manuals lists 35 instruction formats where
20271some of the formats have multiple variants. For the `.insn' pseudo
20272directive the assembler recognizes some of the formats.  Typically, the
20273most general variant of the instruction format is used by the `.insn'
20274directive.
20275
20276   The following table lists the abbreviations used in the table of
20277instruction formats:
20278
20279     OpCode / OpCd   Part of the op code.
20280     Bx              Base register number for operand x.
20281     Dx              Displacement for operand x.
20282     DLx             Displacement lower 12 bits for operand x.
20283     DHx             Displacement higher 8-bits for operand x.
20284     Rx              Register number for operand x.
20285     Xx              Index register number for operand x.
20286     Ix              Signed immediate for operand x.
20287     Ux              Unsigned immediate for operand x.
20288
20289   An instruction is two, four, or six bytes in length and must be
20290aligned on a 2 byte boundary. The first two bits of the instruction
20291specify the length of the instruction, 00 indicates a two byte
20292instruction, 01 and 10 indicates a four byte instruction, and 11
20293indicates a six byte instruction.
20294
20295   The following table lists the s390 instruction formats that are
20296available with the `.insn' pseudo directive:
20297
20298`E format'
20299
20300     +-------------+
20301     |    OpCode   |
20302     +-------------+
20303     0            15
20304
20305`RI format: <insn> R1,I2'
20306
20307     +--------+----+----+------------------+
20308     | OpCode | R1 |OpCd|        I2        |
20309     +--------+----+----+------------------+
20310     0        8    12   16                31
20311
20312`RIE format: <insn> R1,R3,I2'
20313
20314     +--------+----+----+------------------+--------+--------+
20315     | OpCode | R1 | R3 |        I2        |////////| OpCode |
20316     +--------+----+----+------------------+--------+--------+
20317     0        8    12   16                 32       40      47
20318
20319`RIL format: <insn> R1,I2'
20320
20321     +--------+----+----+------------------------------------+
20322     | OpCode | R1 |OpCd|                  I2                |
20323     +--------+----+----+------------------------------------+
20324     0        8    12   16                                  47
20325
20326`RILU format: <insn> R1,U2'
20327
20328     +--------+----+----+------------------------------------+
20329     | OpCode | R1 |OpCd|                  U2                |
20330     +--------+----+----+------------------------------------+
20331     0        8    12   16                                  47
20332
20333`RIS format: <insn> R1,I2,M3,D4(B4)'
20334
20335     +--------+----+----+----+-------------+--------+--------+
20336     | OpCode | R1 | M3 | B4 |     D4      |   I2   | Opcode |
20337     +--------+----+----+----+-------------+--------+--------+
20338     0        8    12   16   20            32       36      47
20339
20340`RR format: <insn> R1,R2'
20341
20342     +--------+----+----+
20343     | OpCode | R1 | R2 |
20344     +--------+----+----+
20345     0        8    12  15
20346
20347`RRE format: <insn> R1,R2'
20348
20349     +------------------+--------+----+----+
20350     |      OpCode      |////////| R1 | R2 |
20351     +------------------+--------+----+----+
20352     0                  16       24   28  31
20353
20354`RRF format: <insn> R1,R2,R3,M4'
20355
20356     +------------------+----+----+----+----+
20357     |      OpCode      | R3 | M4 | R1 | R2 |
20358     +------------------+----+----+----+----+
20359     0                  16   20   24   28  31
20360
20361`RRS format: <insn> R1,R2,M3,D4(B4)'
20362
20363     +--------+----+----+----+-------------+----+----+--------+
20364     | OpCode | R1 | R3 | B4 |     D4      | M3 |////| OpCode |
20365     +--------+----+----+----+-------------+----+----+--------+
20366     0        8    12   16   20            32   36   40      47
20367
20368`RS format: <insn> R1,R3,D2(B2)'
20369
20370     +--------+----+----+----+-------------+
20371     | OpCode | R1 | R3 | B2 |     D2      |
20372     +--------+----+----+----+-------------+
20373     0        8    12   16   20           31
20374
20375`RSE format: <insn> R1,R3,D2(B2)'
20376
20377     +--------+----+----+----+-------------+--------+--------+
20378     | OpCode | R1 | R3 | B2 |     D2      |////////| OpCode |
20379     +--------+----+----+----+-------------+--------+--------+
20380     0        8    12   16   20            32       40      47
20381
20382`RSI format: <insn> R1,R3,I2'
20383
20384     +--------+----+----+------------------------------------+
20385     | OpCode | R1 | R3 |                  I2                |
20386     +--------+----+----+------------------------------------+
20387     0        8    12   16                                  47
20388
20389`RSY format: <insn> R1,R3,D2(B2)'
20390
20391     +--------+----+----+----+-------------+--------+--------+
20392     | OpCode | R1 | R3 | B2 |    DL2      |  DH2   | OpCode |
20393     +--------+----+----+----+-------------+--------+--------+
20394     0        8    12   16   20            32       40      47
20395
20396`RX format: <insn> R1,D2(X2,B2)'
20397
20398     +--------+----+----+----+-------------+
20399     | OpCode | R1 | X2 | B2 |     D2      |
20400     +--------+----+----+----+-------------+
20401     0        8    12   16   20           31
20402
20403`RXE format: <insn> R1,D2(X2,B2)'
20404
20405     +--------+----+----+----+-------------+--------+--------+
20406     | OpCode | R1 | X2 | B2 |     D2      |////////| OpCode |
20407     +--------+----+----+----+-------------+--------+--------+
20408     0        8    12   16   20            32       40      47
20409
20410`RXF format: <insn> R1,R3,D2(X2,B2)'
20411
20412     +--------+----+----+----+-------------+----+---+--------+
20413     | OpCode | R3 | X2 | B2 |     D2      | R1 |///| OpCode |
20414     +--------+----+----+----+-------------+----+---+--------+
20415     0        8    12   16   20            32   36  40      47
20416
20417`RXY format: <insn> R1,D2(X2,B2)'
20418
20419     +--------+----+----+----+-------------+--------+--------+
20420     | OpCode | R1 | X2 | B2 |     DL2     |   DH2  | OpCode |
20421     +--------+----+----+----+-------------+--------+--------+
20422     0        8    12   16   20            32   36   40      47
20423
20424`S format: <insn> D2(B2)'
20425
20426     +------------------+----+-------------+
20427     |      OpCode      | B2 |     D2      |
20428     +------------------+----+-------------+
20429     0                  16   20           31
20430
20431`SI format: <insn> D1(B1),I2'
20432
20433     +--------+---------+----+-------------+
20434     | OpCode |   I2    | B1 |     D1      |
20435     +--------+---------+----+-------------+
20436     0        8         16   20           31
20437
20438`SIY format: <insn> D1(B1),U2'
20439
20440     +--------+---------+----+-------------+--------+--------+
20441     | OpCode |   I2    | B1 |     DL1     |  DH1   | OpCode |
20442     +--------+---------+----+-------------+--------+--------+
20443     0        8         16   20            32   36   40      47
20444
20445`SIL format: <insn> D1(B1),I2'
20446
20447     +------------------+----+-------------+-----------------+
20448     |      OpCode      | B1 |      D1     |       I2        |
20449     +------------------+----+-------------+-----------------+
20450     0                  16   20            32               47
20451
20452`SS format: <insn> D1(R1,B1),D2(B3),R3'
20453
20454     +--------+----+----+----+-------------+----+------------+
20455     | OpCode | R1 | R3 | B1 |     D1      | B2 |     D2     |
20456     +--------+----+----+----+-------------+----+------------+
20457     0        8    12   16   20            32   36          47
20458
20459`SSE format: <insn> D1(B1),D2(B2)'
20460
20461     +------------------+----+-------------+----+------------+
20462     |      OpCode      | B1 |     D1      | B2 |     D2     |
20463     +------------------+----+-------------+----+------------+
20464     0        8    12   16   20            32   36           47
20465
20466`SSF format: <insn> D1(B1),D2(B2),R3'
20467
20468     +--------+----+----+----+-------------+----+------------+
20469     | OpCode | R3 |OpCd| B1 |     D1      | B2 |     D2     |
20470     +--------+----+----+----+-------------+----+------------+
20471     0        8    12   16   20            32   36           47
20472
20473`VRV format: <insn> V1,D2(V2,B2),M3'
20474
20475     +--------+----+----+----+-------------+----+------------+
20476     | OpCode | V1 | V2 | B2 |     D2      | M3 |   Opcode   |
20477     +--------+----+----+----+-------------+----+------------+
20478     0        8    12   16   20            32   36           47
20479
20480`VRI format: <insn> V1,V2,I3,M4,M5'
20481
20482     +--------+----+----+-------------+----+----+------------+
20483     | OpCode | V1 | V2 |     I3      | M5 | M4 |   Opcode   |
20484     +--------+----+----+-------------+----+----+------------+
20485     0        8    12   16            28   32   36           47
20486
20487`VRX format: <insn> V1,D2(R2,B2),M3'
20488
20489     +--------+----+----+----+-------------+----+------------+
20490     | OpCode | V1 | R2 | B2 |     D2      | M3 |   Opcode   |
20491     +--------+----+----+----+-------------+----+------------+
20492     0        8    12   16   20            32   36           47
20493
20494`VRS format: <insn> R1,V3,D2(B2),M4'
20495
20496     +--------+----+----+----+-------------+----+------------+
20497     | OpCode | R1 | V3 | B2 |     D2      | M4 |   Opcode   |
20498     +--------+----+----+----+-------------+----+------------+
20499     0        8    12   16   20            32   36           47
20500
20501`VRR format: <insn> V1,V2,V3,M4,M5,M6'
20502
20503     +--------+----+----+----+---+----+----+----+------------+
20504     | OpCode | V1 | V2 | V3 |///| M6 | M5 | M4 |   Opcode   |
20505     +--------+----+----+----+---+----+----+----+------------+
20506     0        8    12   16       24   28   32   36           47
20507
20508`VSI format: <insn> V1,D2(B2),I3'
20509
20510     +--------+---------+----+-------------+----+------------+
20511     | OpCode |   I3    | B2 |     D2      | V1 |   Opcode   |
20512     +--------+---------+----+-------------+----+------------+
20513     0        8         16   20            32   36           47
20514
20515
20516   For the complete list of all instruction format variants see the
20517Principles of Operation manuals.
20518
20519
20520File: as.info,  Node: s390 Aliases,  Next: s390 Operand Modifier,  Prev: s390 Formats,  Up: s390 Syntax
20521
205229.41.3.5 Instruction Aliases
20523............................
20524
20525A specific bit pattern can have multiple mnemonics, for example the bit
20526pattern `0xa7000000' has the mnemonics `tmh' and `tmlh'. In addition,
20527there are a number of mnemonics recognized by `as' that are not present
20528in the Principles of Operation.  These are the short forms of the
20529branch instructions, where the condition code mask operand is encoded
20530in the mnemonic. This is relevant for the branch instructions, the
20531compare and branch instructions, and the compare and trap instructions.
20532
20533   For the branch instructions there are 20 condition code strings that
20534can be used as part of the mnemonic in place of a mask operand in the
20535instruction format:
20536
20537     instruction          short form
20538     ------------------------------------------
20539     bcr   M1,R2          b<m>r  R2
20540     bc    M1,D2(X2,B2)   b<m>   D2(X2,B2)
20541     brc   M1,I2          j<m>   I2
20542     brcl  M1,I2          jg<m>  I2
20543
20544   In the mnemonic for a branch instruction the condition code string
20545<m> can be any of the following:
20546
20547     o     jump on overflow / if ones
20548     h     jump on A high
20549     p     jump on plus
20550     nle   jump on not low or equal
20551     l     jump on A low
20552     m     jump on minus
20553     nhe   jump on not high or equal
20554     lh    jump on low or high
20555     ne    jump on A not equal B
20556     nz    jump on not zero / if not zeros
20557     e     jump on A equal B
20558     z     jump on zero / if zeroes
20559     nlh   jump on not low or high
20560     he    jump on high or equal
20561     nl    jump on A not low
20562     nm    jump on not minus / if not mixed
20563     le    jump on low or equal
20564     nh    jump on A not high
20565     np    jump on not plus
20566     no    jump on not overflow / if not ones
20567
20568   For the compare and branch, and compare and trap instructions there
20569are 12 condition code strings that can be used as part of the mnemonic
20570in place of a mask operand in the instruction format:
20571
20572     instruction                 short form
20573     --------------------------------------------------------
20574     crb    R1,R2,M3,D4(B4)      crb<m>    R1,R2,D4(B4)
20575     cgrb   R1,R2,M3,D4(B4)      cgrb<m>   R1,R2,D4(B4)
20576     crj    R1,R2,M3,I4          crj<m>    R1,R2,I4
20577     cgrj   R1,R2,M3,I4          cgrj<m>   R1,R2,I4
20578     cib    R1,I2,M3,D4(B4)      cib<m>    R1,I2,D4(B4)
20579     cgib   R1,I2,M3,D4(B4)      cgib<m>   R1,I2,D4(B4)
20580     cij    R1,I2,M3,I4          cij<m>    R1,I2,I4
20581     cgij   R1,I2,M3,I4          cgij<m>   R1,I2,I4
20582     crt    R1,R2,M3             crt<m>    R1,R2
20583     cgrt   R1,R2,M3             cgrt<m>   R1,R2
20584     cit    R1,I2,M3             cit<m>    R1,I2
20585     cgit   R1,I2,M3             cgit<m>   R1,I2
20586     clrb   R1,R2,M3,D4(B4)      clrb<m>   R1,R2,D4(B4)
20587     clgrb  R1,R2,M3,D4(B4)      clgrb<m>  R1,R2,D4(B4)
20588     clrj   R1,R2,M3,I4          clrj<m>   R1,R2,I4
20589     clgrj  R1,R2,M3,I4          clgrj<m>  R1,R2,I4
20590     clib   R1,I2,M3,D4(B4)      clib<m>   R1,I2,D4(B4)
20591     clgib  R1,I2,M3,D4(B4)      clgib<m>  R1,I2,D4(B4)
20592     clij   R1,I2,M3,I4          clij<m>   R1,I2,I4
20593     clgij  R1,I2,M3,I4          clgij<m>  R1,I2,I4
20594     clrt   R1,R2,M3             clrt<m>   R1,R2
20595     clgrt  R1,R2,M3             clgrt<m>  R1,R2
20596     clfit  R1,I2,M3             clfit<m>  R1,I2
20597     clgit  R1,I2,M3             clgit<m>  R1,I2
20598
20599   In the mnemonic for a compare and branch and compare and trap
20600instruction the condition code string <m> can be any of the following:
20601
20602     h     jump on A high
20603     nle   jump on not low or equal
20604     l     jump on A low
20605     nhe   jump on not high or equal
20606     ne    jump on A not equal B
20607     lh    jump on low or high
20608     e     jump on A equal B
20609     nlh   jump on not low or high
20610     nl    jump on A not low
20611     he    jump on high or equal
20612     nh    jump on A not high
20613     le    jump on low or equal
20614
20615
20616File: as.info,  Node: s390 Operand Modifier,  Next: s390 Instruction Marker,  Prev: s390 Aliases,  Up: s390 Syntax
20617
206189.41.3.6 Instruction Operand Modifier
20619.....................................
20620
20621If a symbol modifier is attached to a symbol in an expression for an
20622instruction operand field, the symbol term is replaced with a reference
20623to an object in the global offset table (GOT) or the procedure linkage
20624table (PLT). The following expressions are allowed: `symbol@modifier +
20625constant', `symbol@modifier + label + constant', and `symbol@modifier -
20626label + constant'.  The term `symbol' is the symbol that will be
20627entered into the GOT or PLT, `label' is a local label, and `constant'
20628is an arbitrary expression that the assembler can evaluate to a
20629constant value.
20630
20631   The term `(symbol + constant1)@modifier +/- label + constant2' is
20632also accepted but a warning message is printed and the term is
20633converted to `symbol@modifier +/- label + constant1 + constant2'.
20634
20635`@got'
20636`@got12'
20637     The @got modifier can be used for displacement fields, 16-bit
20638     immediate fields and 32-bit pc-relative immediate fields. The
20639     @got12 modifier is synonym to @got. The symbol is added to the
20640     GOT. For displacement fields and 16-bit immediate fields the
20641     symbol term is replaced with the offset from the start of the GOT
20642     to the GOT slot for the symbol.  For a 32-bit pc-relative field
20643     the pc-relative offset to the GOT slot from the current
20644     instruction address is used.
20645
20646`@gotent'
20647     The @gotent modifier can be used for 32-bit pc-relative immediate
20648     fields.  The symbol is added to the GOT and the symbol term is
20649     replaced with the pc-relative offset from the current instruction
20650     to the GOT slot for the symbol.
20651
20652`@gotoff'
20653     The @gotoff modifier can be used for 16-bit immediate fields. The
20654     symbol term is replaced with the offset from the start of the GOT
20655     to the address of the symbol.
20656
20657`@gotplt'
20658     The @gotplt modifier can be used for displacement fields, 16-bit
20659     immediate fields, and 32-bit pc-relative immediate fields. A
20660     procedure linkage table entry is generated for the symbol and a
20661     jump slot for the symbol is added to the GOT. For displacement
20662     fields and 16-bit immediate fields the symbol term is replaced
20663     with the offset from the start of the GOT to the jump slot for the
20664     symbol. For a 32-bit pc-relative field the pc-relative offset to
20665     the jump slot from the current instruction address is used.
20666
20667`@plt'
20668     The @plt modifier can be used for 16-bit and 32-bit pc-relative
20669     immediate fields. A procedure linkage table entry is generated for
20670     the symbol.  The symbol term is replaced with the relative offset
20671     from the current instruction to the PLT entry for the symbol.
20672
20673`@pltoff'
20674     The @pltoff modifier can be used for 16-bit immediate fields. The
20675     symbol term is replaced with the offset from the start of the PLT
20676     to the address of the symbol.
20677
20678`@gotntpoff'
20679     The @gotntpoff modifier can be used for displacement fields. The
20680     symbol is added to the static TLS block and the negated offset to
20681     the symbol in the static TLS block is added to the GOT. The symbol
20682     term is replaced with the offset to the GOT slot from the start of
20683     the GOT.
20684
20685`@indntpoff'
20686     The @indntpoff modifier can be used for 32-bit pc-relative
20687     immediate fields. The symbol is added to the static TLS block and
20688     the negated offset to the symbol in the static TLS block is added
20689     to the GOT. The symbol term is replaced with the pc-relative
20690     offset to the GOT slot from the current instruction address.
20691
20692   For more information about the thread local storage modifiers
20693`gotntpoff' and `indntpoff' see the ELF extension documentation `ELF
20694Handling For Thread-Local Storage'.
20695
20696
20697File: as.info,  Node: s390 Instruction Marker,  Next: s390 Literal Pool Entries,  Prev: s390 Operand Modifier,  Up: s390 Syntax
20698
206999.41.3.7 Instruction Marker
20700...........................
20701
20702The thread local storage instruction markers are used by the linker to
20703perform code optimization.
20704
20705`:tls_load'
20706     The :tls_load marker is used to flag the load instruction in the
20707     initial exec TLS model that retrieves the offset from the thread
20708     pointer to a thread local storage variable from the GOT.
20709
20710`:tls_gdcall'
20711     The :tls_gdcall marker is used to flag the branch-and-save
20712     instruction to the __tls_get_offset function in the global dynamic
20713     TLS model.
20714
20715`:tls_ldcall'
20716     The :tls_ldcall marker is used to flag the branch-and-save
20717     instruction to the __tls_get_offset function in the local dynamic
20718     TLS model.
20719
20720   For more information about the thread local storage instruction
20721marker and the linker optimizations see the ELF extension documentation
20722`ELF Handling For Thread-Local Storage'.
20723
20724
20725File: as.info,  Node: s390 Literal Pool Entries,  Prev: s390 Instruction Marker,  Up: s390 Syntax
20726
207279.41.3.8 Literal Pool Entries
20728.............................
20729
20730A literal pool is a collection of values. To access the values a pointer
20731to the literal pool is loaded to a register, the literal pool register.
20732Usually, register %r13 is used as the literal pool register (*Note s390
20733Register::). Literal pool entries are created by adding the suffix
20734:lit1, :lit2, :lit4, or :lit8 to the end of an expression for an
20735instruction operand. The expression is added to the literal pool and the
20736operand is replaced with the offset to the literal in the literal pool.
20737
20738`:lit1'
20739     The literal pool entry is created as an 8-bit value. An operand
20740     modifier must not be used for the original expression.
20741
20742`:lit2'
20743     The literal pool entry is created as a 16 bit value. The operand
20744     modifier @got may be used in the original expression. The term
20745     `x@got:lit2' will put the got offset for the global symbol x to
20746     the literal pool as 16 bit value.
20747
20748`:lit4'
20749     The literal pool entry is created as a 32-bit value. The operand
20750     modifier @got and @plt may be used in the original expression. The
20751     term `x@got:lit4' will put the got offset for the global symbol x
20752     to the literal pool as a 32-bit value. The term `x@plt:lit4' will
20753     put the plt offset for the global symbol x to the literal pool as
20754     a 32-bit value.
20755
20756`:lit8'
20757     The literal pool entry is created as a 64-bit value. The operand
20758     modifier @got and @plt may be used in the original expression. The
20759     term `x@got:lit8' will put the got offset for the global symbol x
20760     to the literal pool as a 64-bit value. The term `x@plt:lit8' will
20761     put the plt offset for the global symbol x to the literal pool as
20762     a 64-bit value.
20763
20764   The assembler directive `.ltorg' is used to emit all literal pool
20765entries to the current position.
20766
20767
20768File: as.info,  Node: s390 Directives,  Next: s390 Floating Point,  Prev: s390 Syntax,  Up: S/390-Dependent
20769
207709.41.4 Assembler Directives
20771---------------------------
20772
20773`as' for s390 supports all of the standard ELF assembler directives as
20774outlined in the main part of this document.  Some directives have been
20775extended and there are some additional directives, which are only
20776available for the s390 `as'.
20777
20778`.insn'
20779     This directive permits the numeric representation of an
20780     instructions and makes the assembler insert the operands according
20781     to one of the instructions formats for `.insn' (*Note s390
20782     Formats::).  For example, the instruction `l %r1,24(%r15)' could
20783     be written as `.insn rx,0x58000000,%r1,24(%r15)'.
20784
20785`.short'
20786`.long'
20787`.quad'
20788     This directive places one or more 16-bit (.short), 32-bit (.long),
20789     or 64-bit (.quad) values into the current section. If an ELF or
20790     TLS modifier is used only the following expressions are allowed:
20791     `symbol@modifier + constant', `symbol@modifier + label +
20792     constant', and `symbol@modifier - label + constant'.  The
20793     following modifiers are available:
20794    `@got'
20795    `@got12'
20796          The @got modifier can be used for .short, .long and .quad.
20797          The @got12 modifier is synonym to @got. The symbol is added
20798          to the GOT. The symbol term is replaced with offset from the
20799          start of the GOT to the GOT slot for the symbol.
20800
20801    `@gotoff'
20802          The @gotoff modifier can be used for .short, .long and .quad.
20803          The symbol term is replaced with the offset from the start of
20804          the GOT to the address of the symbol.
20805
20806    `@gotplt'
20807          The @gotplt modifier can be used for .long and .quad. A
20808          procedure linkage table entry is generated for the symbol and
20809          a jump slot for the symbol is added to the GOT. The symbol
20810          term is replaced with the offset from the start of the GOT to
20811          the jump slot for the symbol.
20812
20813    `@plt'
20814          The @plt modifier can be used for .long and .quad. A
20815          procedure linkage table entry us generated for the symbol.
20816          The symbol term is replaced with the address of the PLT entry
20817          for the symbol.
20818
20819    `@pltoff'
20820          The @pltoff modifier can be used for .short, .long and .quad.
20821          The symbol term is replaced with the offset from the start of
20822          the PLT to the address of the symbol.
20823
20824    `@tlsgd'
20825    `@tlsldm'
20826          The @tlsgd and @tlsldm modifier can be used for .long and
20827          .quad. A tls_index structure for the symbol is added to the
20828          GOT. The symbol term is replaced with the offset from the
20829          start of the GOT to the tls_index structure.
20830
20831    `@gotntpoff'
20832    `@indntpoff'
20833          The @gotntpoff and @indntpoff modifier can be used for .long
20834          and .quad.  The symbol is added to the static TLS block and
20835          the negated offset to the symbol in the static TLS block is
20836          added to the GOT. For @gotntpoff the symbol term is replaced
20837          with the offset from the start of the GOT to the GOT slot,
20838          for @indntpoff the symbol term is replaced with the address
20839          of the GOT slot.
20840
20841    `@dtpoff'
20842          The @dtpoff modifier can be used for .long and .quad. The
20843          symbol term is replaced with the offset of the symbol
20844          relative to the start of the TLS block it is contained in.
20845
20846    `@ntpoff'
20847          The @ntpoff modifier can be used for .long and .quad. The
20848          symbol term is replaced with the offset of the symbol
20849          relative to the TCB pointer.
20850
20851     For more information about the thread local storage modifiers see
20852     the ELF extension documentation `ELF Handling For Thread-Local
20853     Storage'.
20854
20855`.ltorg'
20856     This directive causes the current contents of the literal pool to
20857     be dumped to the current location (*Note s390 Literal Pool
20858     Entries::).
20859
20860`.machine STRING[+EXTENSION]...'
20861     This directive allows changing the machine for which code is
20862     generated.  `string' may be any of the `-march=' selection
20863     options, or `push', or `pop'.  `.machine push' saves the currently
20864     selected cpu, which may be restored with `.machine pop'.  Be aware
20865     that the cpu string has to be put into double quotes in case it
20866     contains characters not appropriate for identifiers.  So you have
20867     to write `"z9-109"' instead of just `z9-109'.  Extensions can be
20868     specified after the cpu name, separated by plus characters.  Valid
20869     extensions are: `htm', `nohtm', `vx', `novx'.  They extend the
20870     basic instruction set with features from a higher cpu level, or
20871     remove support for a feature from the given cpu level.
20872
20873     Example: `z13+nohtm' allows all instructions of the z13 cpu except
20874     instructions from the HTM facility.
20875
20876`.machinemode string'
20877     This directive allows one to change the architecture mode for
20878     which code is being generated.  `string' may be `esa', `zarch',
20879     `zarch_nohighgprs', `push', or `pop'.  `.machinemode
20880     zarch_nohighgprs' can be used to prevent the `highgprs' flag from
20881     being set in the ELF header of the output file.  This is useful in
20882     situations where the code is gated with a runtime check which
20883     makes sure that the code is only executed on kernels providing the
20884     `highgprs' feature.  `.machinemode push' saves the currently
20885     selected mode, which may be restored with `.machinemode pop'.
20886
20887
20888File: as.info,  Node: s390 Floating Point,  Prev: s390 Directives,  Up: S/390-Dependent
20889
208909.41.5 Floating Point
20891---------------------
20892
20893The assembler recognizes both the IEEE floating-point instruction and
20894the hexadecimal floating-point instructions. The floating-point
20895constructors `.float', `.single', and `.double' always emit the IEEE
20896format. To assemble hexadecimal floating-point constants the `.long'
20897and `.quad' directives must be used.
20898
20899
20900File: as.info,  Node: SCORE-Dependent,  Next: SH-Dependent,  Prev: S/390-Dependent,  Up: Machine Dependencies
20901
209029.42 SCORE Dependent Features
20903=============================
20904
20905* Menu:
20906
20907* SCORE-Opts::   	Assembler options
20908* SCORE-Pseudo::        SCORE Assembler Directives
20909* SCORE-Syntax::        Syntax
20910
20911
20912File: as.info,  Node: SCORE-Opts,  Next: SCORE-Pseudo,  Up: SCORE-Dependent
20913
209149.42.1 Options
20915--------------
20916
20917The following table lists all available SCORE options.
20918
20919`-G NUM'
20920     This option sets the largest size of an object that can be
20921     referenced implicitly with the `gp' register. The default value is
20922     8.
20923
20924`-EB'
20925     Assemble code for a big-endian cpu
20926
20927`-EL'
20928     Assemble code for a little-endian cpu
20929
20930`-FIXDD'
20931     Assemble code for fix data dependency
20932
20933`-NWARN'
20934     Assemble code for no warning message for fix data dependency
20935
20936`-SCORE5'
20937     Assemble code for target is SCORE5
20938
20939`-SCORE5U'
20940     Assemble code for target is SCORE5U
20941
20942`-SCORE7'
20943     Assemble code for target is SCORE7, this is default setting
20944
20945`-SCORE3'
20946     Assemble code for target is SCORE3
20947
20948`-march=score7'
20949     Assemble code for target is SCORE7, this is default setting
20950
20951`-march=score3'
20952     Assemble code for target is SCORE3
20953
20954`-USE_R1'
20955     Assemble code for no warning message when using temp register r1
20956
20957`-KPIC'
20958     Generate code for PIC.  This option tells the assembler to generate
20959     score position-independent macro expansions.  It also tells the
20960     assembler to mark the output file as PIC.
20961
20962`-O0'
20963     Assembler will not perform any optimizations
20964
20965`-V'
20966     Sunplus release version
20967
20968
20969
20970File: as.info,  Node: SCORE-Pseudo,  Next: SCORE-Syntax,  Prev: SCORE-Opts,  Up: SCORE-Dependent
20971
209729.42.2 SCORE Assembler Directives
20973---------------------------------
20974
20975A number of assembler directives are available for SCORE.  The
20976following table is far from complete.
20977
20978`.set nwarn'
20979     Let the assembler not to generate warnings if the source machine
20980     language instructions happen data dependency.
20981
20982`.set fixdd'
20983     Let the assembler to insert bubbles (32 bit nop instruction / 16
20984     bit nop! Instruction) if the source machine language instructions
20985     happen data dependency.
20986
20987`.set nofixdd'
20988     Let the assembler to generate warnings if the source machine
20989     language instructions happen data dependency. (Default)
20990
20991`.set r1'
20992     Let the assembler not to generate warnings if the source program
20993     uses r1. allow user to use r1
20994
20995`set nor1'
20996     Let the assembler to generate warnings if the source program uses
20997     r1. (Default)
20998
20999`.sdata'
21000     Tell the assembler to add subsequent data into the sdata section
21001
21002`.rdata'
21003     Tell the assembler to add subsequent data into the rdata section
21004
21005`.frame "frame-register", "offset", "return-pc-register"'
21006     Describe a stack frame. "frame-register" is the frame register,
21007     "offset" is the distance from the frame register to the virtual
21008     frame pointer, "return-pc-register" is the return program register.
21009     You must use ".ent" before ".frame" and only one ".frame" can be
21010     used per ".ent".
21011
21012`.mask "bitmask", "frameoffset"'
21013     Indicate which of the integer registers are saved in the current
21014     function's stack frame, this is for the debugger to explain the
21015     frame chain.
21016
21017`.ent "proc-name"'
21018     Set the beginning of the procedure "proc_name". Use this directive
21019     when you want to generate information for the debugger.
21020
21021`.end proc-name'
21022     Set the end of a procedure. Use this directive to generate
21023     information for the debugger.
21024
21025`.bss'
21026     Switch the destination of following statements into the bss
21027     section, which is used for data that is uninitialized anywhere.
21028
21029
21030
21031File: as.info,  Node: SCORE-Syntax,  Prev: SCORE-Pseudo,  Up: SCORE-Dependent
21032
210339.42.3 SCORE Syntax
21034-------------------
21035
21036* Menu:
21037
21038* SCORE-Chars::                Special Characters
21039
21040
21041File: as.info,  Node: SCORE-Chars,  Up: SCORE-Syntax
21042
210439.42.3.1 Special Characters
21044...........................
21045
21046The presence of a `#' appearing anywhere on a line indicates the start
21047of a comment that extends to the end of that line.
21048
21049   If a `#' appears as the first character of a line then the whole
21050line is treated as a comment, but in this case the line can also be a
21051logical line number directive (*note Comments::) or a preprocessor
21052control command (*note Preprocessing::).
21053
21054   The `;' character can be used to separate statements on the same
21055line.
21056
21057
21058File: as.info,  Node: SH-Dependent,  Next: Sparc-Dependent,  Prev: SCORE-Dependent,  Up: Machine Dependencies
21059
210609.43 Renesas / SuperH SH Dependent Features
21061===========================================
21062
21063* Menu:
21064
21065* SH Options::              Options
21066* SH Syntax::               Syntax
21067* SH Floating Point::       Floating Point
21068* SH Directives::           SH Machine Directives
21069* SH Opcodes::              Opcodes
21070
21071
21072File: as.info,  Node: SH Options,  Next: SH Syntax,  Up: SH-Dependent
21073
210749.43.1 Options
21075--------------
21076
21077`as' has following command-line options for the Renesas (formerly
21078Hitachi) / SuperH SH family.
21079
21080`--little'
21081     Generate little endian code.
21082
21083`--big'
21084     Generate big endian code.
21085
21086`--relax'
21087     Alter jump instructions for long displacements.
21088
21089`--small'
21090     Align sections to 4 byte boundaries, not 16.
21091
21092`--dsp'
21093     Enable sh-dsp insns, and disable sh3e / sh4 insns.
21094
21095`--renesas'
21096     Disable optimization with section symbol for compatibility with
21097     Renesas assembler.
21098
21099`--allow-reg-prefix'
21100     Allow '$' as a register name prefix.
21101
21102`--fdpic'
21103     Generate an FDPIC object file.
21104
21105`--isa=sh4 | sh4a'
21106     Specify the sh4 or sh4a instruction set.
21107
21108`--isa=dsp'
21109     Enable sh-dsp insns, and disable sh3e / sh4 insns.
21110
21111`--isa=fp'
21112     Enable sh2e, sh3e, sh4, and sh4a insn sets.
21113
21114`--isa=all'
21115     Enable sh1, sh2, sh2e, sh3, sh3e, sh4, sh4a, and sh-dsp insn sets.
21116
21117`-h-tick-hex'
21118     Support H'00 style hex constants in addition to 0x00 style.
21119
21120
21121
21122File: as.info,  Node: SH Syntax,  Next: SH Floating Point,  Prev: SH Options,  Up: SH-Dependent
21123
211249.43.2 Syntax
21125-------------
21126
21127* Menu:
21128
21129* SH-Chars::                Special Characters
21130* SH-Regs::                 Register Names
21131* SH-Addressing::           Addressing Modes
21132
21133
21134File: as.info,  Node: SH-Chars,  Next: SH-Regs,  Up: SH Syntax
21135
211369.43.2.1 Special Characters
21137...........................
21138
21139`!' is the line comment character.
21140
21141   You can use `;' instead of a newline to separate statements.
21142
21143   If a `#' appears as the first character of a line then the whole
21144line is treated as a comment, but in this case the line could also be a
21145logical line number directive (*note Comments::) or a preprocessor
21146control command (*note Preprocessing::).
21147
21148   Since `$' has no special meaning, you may use it in symbol names.
21149
21150
21151File: as.info,  Node: SH-Regs,  Next: SH-Addressing,  Prev: SH-Chars,  Up: SH Syntax
21152
211539.43.2.2 Register Names
21154.......................
21155
21156You can use the predefined symbols `r0', `r1', `r2', `r3', `r4', `r5',
21157`r6', `r7', `r8', `r9', `r10', `r11', `r12', `r13', `r14', and `r15' to
21158refer to the SH registers.
21159
21160   The SH also has these control registers:
21161
21162`pr'
21163     procedure register (holds return address)
21164
21165`pc'
21166     program counter
21167
21168`mach'
21169`macl'
21170     high and low multiply accumulator registers
21171
21172`sr'
21173     status register
21174
21175`gbr'
21176     global base register
21177
21178`vbr'
21179     vector base register (for interrupt vectors)
21180
21181
21182File: as.info,  Node: SH-Addressing,  Prev: SH-Regs,  Up: SH Syntax
21183
211849.43.2.3 Addressing Modes
21185.........................
21186
21187`as' understands the following addressing modes for the SH.  `RN' in
21188the following refers to any of the numbered registers, but _not_ the
21189control registers.
21190
21191`RN'
21192     Register direct
21193
21194`@RN'
21195     Register indirect
21196
21197`@-RN'
21198     Register indirect with pre-decrement
21199
21200`@RN+'
21201     Register indirect with post-increment
21202
21203`@(DISP, RN)'
21204     Register indirect with displacement
21205
21206`@(R0, RN)'
21207     Register indexed
21208
21209`@(DISP, GBR)'
21210     `GBR' offset
21211
21212`@(R0, GBR)'
21213     GBR indexed
21214
21215`ADDR'
21216`@(DISP, PC)'
21217     PC relative address (for branch or for addressing memory).  The
21218     `as' implementation allows you to use the simpler form ADDR
21219     anywhere a PC relative address is called for; the alternate form
21220     is supported for compatibility with other assemblers.
21221
21222`#IMM'
21223     Immediate data
21224
21225
21226File: as.info,  Node: SH Floating Point,  Next: SH Directives,  Prev: SH Syntax,  Up: SH-Dependent
21227
212289.43.3 Floating Point
21229---------------------
21230
21231SH2E, SH3E and SH4 groups have on-chip floating-point unit (FPU). Other
21232SH groups can use `.float' directive to generate IEEE floating-point
21233numbers.
21234
21235   SH2E and SH3E support single-precision floating point calculations as
21236well as entirely PCAPI compatible emulation of double-precision
21237floating point calculations. SH2E and SH3E instructions are a subset of
21238the floating point calculations conforming to the IEEE754 standard.
21239
21240   In addition to single-precision and double-precision floating-point
21241operation capability, the on-chip FPU of SH4 has a 128-bit graphic
21242engine that enables 32-bit floating-point data to be processed 128 bits
21243at a time. It also supports 4 * 4 array operations and inner product
21244operations. Also, a superscalar architecture is employed that enables
21245simultaneous execution of two instructions (including FPU
21246instructions), providing performance of up to twice that of
21247conventional architectures at the same frequency.
21248
21249
21250File: as.info,  Node: SH Directives,  Next: SH Opcodes,  Prev: SH Floating Point,  Up: SH-Dependent
21251
212529.43.4 SH Machine Directives
21253----------------------------
21254
21255`uaword'
21256`ualong'
21257`uaquad'
21258     `as' will issue a warning when a misaligned `.word', `.long', or
21259     `.quad' directive is used.  You may use `.uaword', `.ualong', or
21260     `.uaquad' to indicate that the value is intentionally misaligned.
21261
21262
21263File: as.info,  Node: SH Opcodes,  Prev: SH Directives,  Up: SH-Dependent
21264
212659.43.5 Opcodes
21266--------------
21267
21268For detailed information on the SH machine instruction set, see
21269`SH-Microcomputer User's Manual' (Renesas) or `SH-4 32-bit CPU Core
21270Architecture' (SuperH) and `SuperH (SH) 64-Bit RISC Series' (SuperH).
21271
21272   `as' implements all the standard SH opcodes.  No additional
21273pseudo-instructions are needed on this family.  Note, however, that
21274because `as' supports a simpler form of PC-relative addressing, you may
21275simply write (for example)
21276
21277     mov.l  bar,r0
21278
21279where other assemblers might require an explicit displacement to `bar'
21280from the program counter:
21281
21282     mov.l  @(DISP, PC)
21283
21284   Here is a summary of SH opcodes:
21285
21286     Legend:
21287     Rn        a numbered register
21288     Rm        another numbered register
21289     #imm      immediate data
21290     disp      displacement
21291     disp8     8-bit displacement
21292     disp12    12-bit displacement
21293
21294     add #imm,Rn                    lds.l @Rn+,PR
21295     add Rm,Rn                      mac.w @Rm+,@Rn+
21296     addc Rm,Rn                     mov #imm,Rn
21297     addv Rm,Rn                     mov Rm,Rn
21298     and #imm,R0                    mov.b Rm,@(R0,Rn)
21299     and Rm,Rn                      mov.b Rm,@-Rn
21300     and.b #imm,@(R0,GBR)           mov.b Rm,@Rn
21301     bf disp8                       mov.b @(disp,Rm),R0
21302     bra disp12                     mov.b @(disp,GBR),R0
21303     bsr disp12                     mov.b @(R0,Rm),Rn
21304     bt disp8                       mov.b @Rm+,Rn
21305     clrmac                         mov.b @Rm,Rn
21306     clrt                           mov.b R0,@(disp,Rm)
21307     cmp/eq #imm,R0                 mov.b R0,@(disp,GBR)
21308     cmp/eq Rm,Rn                   mov.l Rm,@(disp,Rn)
21309     cmp/ge Rm,Rn                   mov.l Rm,@(R0,Rn)
21310     cmp/gt Rm,Rn                   mov.l Rm,@-Rn
21311     cmp/hi Rm,Rn                   mov.l Rm,@Rn
21312     cmp/hs Rm,Rn                   mov.l @(disp,Rn),Rm
21313     cmp/pl Rn                      mov.l @(disp,GBR),R0
21314     cmp/pz Rn                      mov.l @(disp,PC),Rn
21315     cmp/str Rm,Rn                  mov.l @(R0,Rm),Rn
21316     div0s Rm,Rn                    mov.l @Rm+,Rn
21317     div0u                          mov.l @Rm,Rn
21318     div1 Rm,Rn                     mov.l R0,@(disp,GBR)
21319     exts.b Rm,Rn                   mov.w Rm,@(R0,Rn)
21320     exts.w Rm,Rn                   mov.w Rm,@-Rn
21321     extu.b Rm,Rn                   mov.w Rm,@Rn
21322     extu.w Rm,Rn                   mov.w @(disp,Rm),R0
21323     jmp @Rn                        mov.w @(disp,GBR),R0
21324     jsr @Rn                        mov.w @(disp,PC),Rn
21325     ldc Rn,GBR                     mov.w @(R0,Rm),Rn
21326     ldc Rn,SR                      mov.w @Rm+,Rn
21327     ldc Rn,VBR                     mov.w @Rm,Rn
21328     ldc.l @Rn+,GBR                 mov.w R0,@(disp,Rm)
21329     ldc.l @Rn+,SR                  mov.w R0,@(disp,GBR)
21330     ldc.l @Rn+,VBR                 mova @(disp,PC),R0
21331     lds Rn,MACH                    movt Rn
21332     lds Rn,MACL                    muls Rm,Rn
21333     lds Rn,PR                      mulu Rm,Rn
21334     lds.l @Rn+,MACH                neg Rm,Rn
21335     lds.l @Rn+,MACL                negc Rm,Rn
21336
21337     nop                            stc VBR,Rn
21338     not Rm,Rn                      stc.l GBR,@-Rn
21339     or #imm,R0                     stc.l SR,@-Rn
21340     or Rm,Rn                       stc.l VBR,@-Rn
21341     or.b #imm,@(R0,GBR)            sts MACH,Rn
21342     rotcl Rn                       sts MACL,Rn
21343     rotcr Rn                       sts PR,Rn
21344     rotl Rn                        sts.l MACH,@-Rn
21345     rotr Rn                        sts.l MACL,@-Rn
21346     rte                            sts.l PR,@-Rn
21347     rts                            sub Rm,Rn
21348     sett                           subc Rm,Rn
21349     shal Rn                        subv Rm,Rn
21350     shar Rn                        swap.b Rm,Rn
21351     shll Rn                        swap.w Rm,Rn
21352     shll16 Rn                      tas.b @Rn
21353     shll2 Rn                       trapa #imm
21354     shll8 Rn                       tst #imm,R0
21355     shlr Rn                        tst Rm,Rn
21356     shlr16 Rn                      tst.b #imm,@(R0,GBR)
21357     shlr2 Rn                       xor #imm,R0
21358     shlr8 Rn                       xor Rm,Rn
21359     sleep                          xor.b #imm,@(R0,GBR)
21360     stc GBR,Rn                     xtrct Rm,Rn
21361     stc SR,Rn
21362
21363
21364File: as.info,  Node: Sparc-Dependent,  Next: TIC54X-Dependent,  Prev: SH-Dependent,  Up: Machine Dependencies
21365
213669.44 SPARC Dependent Features
21367=============================
21368
21369* Menu:
21370
21371* Sparc-Opts::                  Options
21372* Sparc-Aligned-Data::		Option to enforce aligned data
21373* Sparc-Syntax::		Syntax
21374* Sparc-Float::                 Floating Point
21375* Sparc-Directives::            Sparc Machine Directives
21376
21377
21378File: as.info,  Node: Sparc-Opts,  Next: Sparc-Aligned-Data,  Up: Sparc-Dependent
21379
213809.44.1 Options
21381--------------
21382
21383The SPARC chip family includes several successive versions, using the
21384same core instruction set, but including a few additional instructions
21385at each version.  There are exceptions to this however.  For details on
21386what instructions each variant supports, please see the chip's
21387architecture reference manual.
21388
21389   By default, `as' assumes the core instruction set (SPARC v6), but
21390"bumps" the architecture level as needed: it switches to successively
21391higher architectures as it encounters instructions that only exist in
21392the higher levels.
21393
21394   If not configured for SPARC v9 (`sparc64-*-*') GAS will not bump
21395past sparclite by default, an option must be passed to enable the v9
21396instructions.
21397
21398   GAS treats sparclite as being compatible with v8, unless an
21399architecture is explicitly requested.  SPARC v9 is always incompatible
21400with sparclite.
21401
21402`-Av6 | -Av7 | -Av8 | -Aleon | -Asparclet | -Asparclite'
21403`-Av8plus | -Av8plusa | -Av8plusb | -Av8plusc | -Av8plusd |'
21404`-Av8plusv | -Av8plusm | -Av8plusm8'
21405`-Av9 | -Av9a | -Av9b | -Av9c | -Av9d | -Av9e | -Av9v | -Av9m | -Av9m8'
21406`-Asparc | -Asparcvis | -Asparcvis2 | -Asparcfmaf | -Asparcima'
21407`-Asparcvis3 | -Asparcvis3r | -Asparc5 | -Asparc6'
21408     Use one of the `-A' options to select one of the SPARC
21409     architectures explicitly.  If you select an architecture
21410     explicitly, `as' reports a fatal error if it encounters an
21411     instruction or feature requiring an incompatible or higher level.
21412
21413     `-Av8plus', `-Av8plusa', `-Av8plusb', `-Av8plusc', `-Av8plusd',
21414     and `-Av8plusv' select a 32 bit environment.
21415
21416     `-Av9', `-Av9a', `-Av9b', `-Av9c', `-Av9d', `-Av9e', `-Av9v' and
21417     `-Av9m' select a 64 bit environment and are not available unless
21418     GAS is explicitly configured with 64 bit environment support.
21419
21420     `-Av8plusa' and `-Av9a' enable the SPARC V9 instruction set with
21421     UltraSPARC VIS 1.0 extensions.
21422
21423     `-Av8plusb' and `-Av9b' enable the UltraSPARC VIS 2.0 instructions,
21424     as well as the instructions enabled by `-Av8plusa' and `-Av9a'.
21425
21426     `-Av8plusc' and `-Av9c' enable the UltraSPARC Niagara instructions,
21427     as well as the instructions enabled by `-Av8plusb' and `-Av9b'.
21428
21429     `-Av8plusd' and `-Av9d' enable the floating point fused
21430     multiply-add, VIS 3.0, and HPC extension instructions, as well as
21431     the instructions enabled by `-Av8plusc' and `-Av9c'.
21432
21433     `-Av8pluse' and `-Av9e' enable the cryptographic instructions, as
21434     well as the instructions enabled by `-Av8plusd' and `-Av9d'.
21435
21436     `-Av8plusv' and `-Av9v' enable floating point unfused
21437     multiply-add, and integer multiply-add, as well as the instructions
21438     enabled by `-Av8pluse' and `-Av9e'.
21439
21440     `-Av8plusm' and `-Av9m' enable the VIS 4.0, subtract extended,
21441     xmpmul, xmontmul and xmontsqr instructions, as well as the
21442     instructions enabled by `-Av8plusv' and `-Av9v'.
21443
21444     `-Av8plusm8' and `-Av9m8' enable the instructions introduced in
21445     the Oracle SPARC Architecture 2017 and the M8 processor, as well
21446     as the instructions enabled by `-Av8plusm' and `-Av9m'.
21447
21448     `-Asparc' specifies a v9 environment.  It is equivalent to `-Av9'
21449     if the word size is 64-bit, and `-Av8plus' otherwise.
21450
21451     `-Asparcvis' specifies a v9a environment.  It is equivalent to
21452     `-Av9a' if the word size is 64-bit, and `-Av8plusa' otherwise.
21453
21454     `-Asparcvis2' specifies a v9b environment.  It is equivalent to
21455     `-Av9b' if the word size is 64-bit, and `-Av8plusb' otherwise.
21456
21457     `-Asparcfmaf' specifies a v9b environment with the floating point
21458     fused multiply-add instructions enabled.
21459
21460     `-Asparcima' specifies a v9b environment with the integer
21461     multiply-add instructions enabled.
21462
21463     `-Asparcvis3' specifies a v9b environment with the VIS 3.0, HPC ,
21464     and floating point fused multiply-add instructions enabled.
21465
21466     `-Asparcvis3r' specifies a v9b environment with the VIS 3.0, HPC,
21467     and floating point unfused multiply-add instructions enabled.
21468
21469     `-Asparc5' is equivalent to `-Av9m'.
21470
21471     `-Asparc6' is equivalent to `-Av9m8'.
21472
21473`-xarch=v8plus | -xarch=v8plusa | -xarch=v8plusb | -xarch=v8plusc'
21474`-xarch=v8plusd | -xarch=v8plusv | -xarch=v8plusm |'
21475`-xarch=v8plusm8 | -xarch=v9 | -xarch=v9a | -xarch=v9b'
21476`-xarch=v9c | -xarch=v9d | -xarch=v9e | -xarch=v9v'
21477`-xarch=v9m | -xarch=v9m8'
21478`-xarch=sparc | -xarch=sparcvis | -xarch=sparcvis2'
21479`-xarch=sparcfmaf | -xarch=sparcima | -xarch=sparcvis3'
21480`-xarch=sparcvis3r | -xarch=sparc5 | -xarch=sparc6'
21481     For compatibility with the SunOS v9 assembler.  These options are
21482     equivalent to -Av8plus, -Av8plusa, -Av8plusb, -Av8plusc, -Av8plusd,
21483     -Av8plusv, -Av8plusm, -Av8plusm8, -Av9, -Av9a, -Av9b, -Av9c, -Av9d,
21484     -Av9e, -Av9v, -Av9m, -Av9m8, -Asparc, -Asparcvis, -Asparcvis2,
21485     -Asparcfmaf, -Asparcima, -Asparcvis3, -Asparcvis3r, -Asparc5 and
21486     -Asparc6 respectively.
21487
21488`-bump'
21489     Warn whenever it is necessary to switch to another level.  If an
21490     architecture level is explicitly requested, GAS will not issue
21491     warnings until that level is reached, and will then bump the level
21492     as required (except between incompatible levels).
21493
21494`-32 | -64'
21495     Select the word size, either 32 bits or 64 bits.  These options
21496     are only available with the ELF object file format, and require
21497     that the necessary BFD support has been included.
21498
21499`--dcti-couples-detect'
21500     Warn if a DCTI (delayed control transfer instruction) couple is
21501     found when generating code for a variant of the SPARC architecture
21502     in which the execution of the couple is unpredictable, or very
21503     slow.  This is disabled by default.
21504
21505
21506File: as.info,  Node: Sparc-Aligned-Data,  Next: Sparc-Syntax,  Prev: Sparc-Opts,  Up: Sparc-Dependent
21507
215089.44.2 Enforcing aligned data
21509-----------------------------
21510
21511SPARC GAS normally permits data to be misaligned.  For example, it
21512permits the `.long' pseudo-op to be used on a byte boundary.  However,
21513the native SunOS assemblers issue an error when they see misaligned
21514data.
21515
21516   You can use the `--enforce-aligned-data' option to make SPARC GAS
21517also issue an error about misaligned data, just as the SunOS assemblers
21518do.
21519
21520   The `--enforce-aligned-data' option is not the default because gcc
21521issues misaligned data pseudo-ops when it initializes certain packed
21522data structures (structures defined using the `packed' attribute).  You
21523may have to assemble with GAS in order to initialize packed data
21524structures in your own code.
21525
21526
21527File: as.info,  Node: Sparc-Syntax,  Next: Sparc-Float,  Prev: Sparc-Aligned-Data,  Up: Sparc-Dependent
21528
215299.44.3 Sparc Syntax
21530-------------------
21531
21532The assembler syntax closely follows The Sparc Architecture Manual,
21533versions 8 and 9, as well as most extensions defined by Sun for their
21534UltraSPARC and Niagara line of processors.
21535
21536* Menu:
21537
21538* Sparc-Chars::                Special Characters
21539* Sparc-Regs::                 Register Names
21540* Sparc-Constants::            Constant Names
21541* Sparc-Relocs::               Relocations
21542* Sparc-Size-Translations::    Size Translations
21543
21544
21545File: as.info,  Node: Sparc-Chars,  Next: Sparc-Regs,  Up: Sparc-Syntax
21546
215479.44.3.1 Special Characters
21548...........................
21549
21550A `!' character appearing anywhere on a line indicates the start of a
21551comment that extends to the end of that line.
21552
21553   If a `#' appears as the first character of a line then the whole
21554line is treated as a comment, but in this case the line could also be a
21555logical line number directive (*note Comments::) or a preprocessor
21556control command (*note Preprocessing::).
21557
21558   `;' can be used instead of a newline to separate statements.
21559
21560
21561File: as.info,  Node: Sparc-Regs,  Next: Sparc-Constants,  Prev: Sparc-Chars,  Up: Sparc-Syntax
21562
215639.44.3.2 Register Names
21564.......................
21565
21566The Sparc integer register file is broken down into global, outgoing,
21567local, and incoming.
21568
21569   * The 8 global registers are referred to as `%gN'.
21570
21571   * The 8 outgoing registers are referred to as `%oN'.
21572
21573   * The 8 local registers are referred to as `%lN'.
21574
21575   * The 8 incoming registers are referred to as `%iN'.
21576
21577   * The frame pointer register `%i6' can be referenced using the alias
21578     `%fp'.
21579
21580   * The stack pointer register `%o6' can be referenced using the alias
21581     `%sp'.
21582
21583   Floating point registers are simply referred to as `%fN'.  When
21584assembling for pre-V9, only 32 floating point registers are available.
21585For V9 and later there are 64, but there are restrictions when
21586referencing the upper 32 registers.  They can only be accessed as
21587double or quad, and thus only even or quad numbered accesses are
21588allowed.  For example, `%f34' is a legal floating point register, but
21589`%f35' is not.
21590
21591   Floating point registers accessed as double can also be referred
21592using the `%dN' notation, where N is even.  Similarly, floating point
21593registers accessed as quad can be referred using the `%qN' notation,
21594where N is a multiple of 4.  For example, `%f4' can be denoted as both
21595`%d4' and `%q4'.  On the other hand, `%f2' can be denoted as `%d2' but
21596not as `%q2'.
21597
21598   Certain V9 instructions allow access to ancillary state registers.
21599Most simply they can be referred to as `%asrN' where N can be from 16
21600to 31.  However, there are some aliases defined to reference ASR
21601registers defined for various UltraSPARC processors:
21602
21603   * The tick compare register is referred to as `%tick_cmpr'.
21604
21605   * The system tick register is referred to as `%stick'.  An alias,
21606     `%sys_tick', exists but is deprecated and should not be used by
21607     new software.
21608
21609   * The system tick compare register is referred to as `%stick_cmpr'.
21610     An alias, `%sys_tick_cmpr', exists but is deprecated and should
21611     not be used by new software.
21612
21613   * The software interrupt register is referred to as `%softint'.
21614
21615   * The set software interrupt register is referred to as
21616     `%set_softint'.  The mnemonic `%softint_set' is provided as an
21617     alias.
21618
21619   * The clear software interrupt register is referred to as
21620     `%clear_softint'.  The mnemonic `%softint_clear' is provided as an
21621     alias.
21622
21623   * The performance instrumentation counters register is referred to as
21624     `%pic'.
21625
21626   * The performance control register is referred to as `%pcr'.
21627
21628   * The graphics status register is referred to as `%gsr'.
21629
21630   * The V9 dispatch control register is referred to as `%dcr'.
21631
21632   Various V9 branch and conditional move instructions allow
21633specification of which set of integer condition codes to test.  These
21634are referred to as `%xcc' and `%icc'.
21635
21636   Additionally, GAS supports the so-called "natural" condition codes;
21637these are referred to as `%ncc' and reference to `%icc' if the word
21638size is 32, `%xcc' if the word size is 64.
21639
21640   In V9, there are 4 sets of floating point condition codes which are
21641referred to as `%fccN'.
21642
21643   Several special privileged and non-privileged registers exist:
21644
21645   * The V9 address space identifier register is referred to as `%asi'.
21646
21647   * The V9 restorable windows register is referred to as `%canrestore'.
21648
21649   * The V9 savable windows register is referred to as `%cansave'.
21650
21651   * The V9 clean windows register is referred to as `%cleanwin'.
21652
21653   * The V9 current window pointer register is referred to as `%cwp'.
21654
21655   * The floating-point queue register is referred to as `%fq'.
21656
21657   * The V8 co-processor queue register is referred to as `%cq'.
21658
21659   * The floating point status register is referred to as `%fsr'.
21660
21661   * The other windows register is referred to as `%otherwin'.
21662
21663   * The V9 program counter register is referred to as `%pc'.
21664
21665   * The V9 next program counter register is referred to as `%npc'.
21666
21667   * The V9 processor interrupt level register is referred to as `%pil'.
21668
21669   * The V9 processor state register is referred to as `%pstate'.
21670
21671   * The trap base address register is referred to as `%tba'.
21672
21673   * The V9 tick register is referred to as `%tick'.
21674
21675   * The V9 trap level is referred to as `%tl'.
21676
21677   * The V9 trap program counter is referred to as `%tpc'.
21678
21679   * The V9 trap next program counter is referred to as `%tnpc'.
21680
21681   * The V9 trap state is referred to as `%tstate'.
21682
21683   * The V9 trap type is referred to as `%tt'.
21684
21685   * The V9 condition codes is referred to as `%ccr'.
21686
21687   * The V9 floating-point registers state is referred to as `%fprs'.
21688
21689   * The V9 version register is referred to as `%ver'.
21690
21691   * The V9 window state register is referred to as `%wstate'.
21692
21693   * The Y register is referred to as `%y'.
21694
21695   * The V8 window invalid mask register is referred to as `%wim'.
21696
21697   * The V8 processor state register is referred to as `%psr'.
21698
21699   * The V9 global register level register is referred to as `%gl'.
21700
21701   Several special register names exist for hypervisor mode code:
21702
21703   * The hyperprivileged processor state register is referred to as
21704     `%hpstate'.
21705
21706   * The hyperprivileged trap state register is referred to as
21707     `%htstate'.
21708
21709   * The hyperprivileged interrupt pending register is referred to as
21710     `%hintp'.
21711
21712   * The hyperprivileged trap base address register is referred to as
21713     `%htba'.
21714
21715   * The hyperprivileged implementation version register is referred to
21716     as `%hver'.
21717
21718   * The hyperprivileged system tick offset register is referred to as
21719     `%hstick_offset'.  Note that there is no `%hstick' register, the
21720     normal `%stick' is used.
21721
21722   * The hyperprivileged system tick enable register is referred to as
21723     `%hstick_enable'.
21724
21725   * The hyperprivileged system tick compare register is referred to as
21726     `%hstick_cmpr'.
21727
21728
21729File: as.info,  Node: Sparc-Constants,  Next: Sparc-Relocs,  Prev: Sparc-Regs,  Up: Sparc-Syntax
21730
217319.44.3.3 Constants
21732..................
21733
21734Several Sparc instructions take an immediate operand field for which
21735mnemonic names exist.  Two such examples are `membar' and `prefetch'.
21736Another example are the set of V9 memory access instruction that allow
21737specification of an address space identifier.
21738
21739   The `membar' instruction specifies a memory barrier that is the
21740defined by the operand which is a bitmask.  The supported mask
21741mnemonics are:
21742
21743   * `#Sync' requests that all operations (including nonmemory
21744     reference operations) appearing prior to the `membar' must have
21745     been performed and the effects of any exceptions become visible
21746     before any instructions after the `membar' may be initiated.  This
21747     corresponds to `membar' cmask field bit 2.
21748
21749   * `#MemIssue' requests that all memory reference operations
21750     appearing prior to the `membar' must have been performed before
21751     any memory operation after the `membar' may be initiated.  This
21752     corresponds to `membar' cmask field bit 1.
21753
21754   * `#Lookaside' requests that a store appearing prior to the `membar'
21755     must complete before any load following the `membar' referencing
21756     the same address can be initiated.  This corresponds to `membar'
21757     cmask field bit 0.
21758
21759   * `#StoreStore' defines that the effects of all stores appearing
21760     prior to the `membar' instruction must be visible to all
21761     processors before the effect of any stores following the `membar'.
21762     Equivalent to the deprecated `stbar' instruction.  This
21763     corresponds to `membar' mmask field bit 3.
21764
21765   * `#LoadStore' defines all loads appearing prior to the `membar'
21766     instruction must have been performed before the effect of any
21767     stores following the `membar' is visible to any other processor.
21768     This corresponds to `membar' mmask field bit 2.
21769
21770   * `#StoreLoad' defines that the effects of all stores appearing
21771     prior to the `membar' instruction must be visible to all
21772     processors before loads following the `membar' may be performed.
21773     This corresponds to `membar' mmask field bit 1.
21774
21775   * `#LoadLoad' defines that all loads appearing prior to the `membar'
21776     instruction must have been performed before any loads following
21777     the `membar' may be performed.  This corresponds to `membar' mmask
21778     field bit 0.
21779
21780
21781   These values can be ored together, for example:
21782
21783     membar #Sync
21784     membar #StoreLoad | #LoadLoad
21785     membar #StoreLoad | #StoreStore
21786
21787   The `prefetch' and `prefetcha' instructions take a prefetch function
21788code.  The following prefetch function code constant mnemonics are
21789available:
21790
21791   * `#n_reads' requests a prefetch for several reads, and corresponds
21792     to a prefetch function code of 0.
21793
21794     `#one_read' requests a prefetch for one read, and corresponds to a
21795     prefetch function code of 1.
21796
21797     `#n_writes' requests a prefetch for several writes (and possibly
21798     reads), and corresponds to a prefetch function code of 2.
21799
21800     `#one_write' requests a prefetch for one write, and corresponds to
21801     a prefetch function code of 3.
21802
21803     `#page' requests a prefetch page, and corresponds to a prefetch
21804     function code of 4.
21805
21806     `#invalidate' requests a prefetch invalidate, and corresponds to a
21807     prefetch function code of 16.
21808
21809     `#unified' requests a prefetch to the nearest unified cache, and
21810     corresponds to a prefetch function code of 17.
21811
21812     `#n_reads_strong' requests a strong prefetch for several reads,
21813     and corresponds to a prefetch function code of 20.
21814
21815     `#one_read_strong' requests a strong prefetch for one read, and
21816     corresponds to a prefetch function code of 21.
21817
21818     `#n_writes_strong' requests a strong prefetch for several writes,
21819     and corresponds to a prefetch function code of 22.
21820
21821     `#one_write_strong' requests a strong prefetch for one write, and
21822     corresponds to a prefetch function code of 23.
21823
21824     Onle one prefetch code may be specified.  Here are some examples:
21825
21826          prefetch  [%l0 + %l2], #one_read
21827          prefetch  [%g2 + 8], #n_writes
21828          prefetcha [%g1] 0x8, #unified
21829          prefetcha [%o0 + 0x10] %asi, #n_reads
21830
21831     The actual behavior of a given prefetch function code is processor
21832     specific.  If a processor does not implement a given prefetch
21833     function code, it will treat the prefetch instruction as a nop.
21834
21835     For instructions that accept an immediate address space identifier,
21836     `as' provides many mnemonics corresponding to V9 defined as well
21837     as UltraSPARC and Niagara extended values.  For example, `#ASI_P'
21838     and `#ASI_BLK_INIT_QUAD_LDD_AIUS'.  See the V9 and processor
21839     specific manuals for details.
21840
21841
21842
21843File: as.info,  Node: Sparc-Relocs,  Next: Sparc-Size-Translations,  Prev: Sparc-Constants,  Up: Sparc-Syntax
21844
218459.44.3.4 Relocations
21846....................
21847
21848ELF relocations are available as defined in the 32-bit and 64-bit Sparc
21849ELF specifications.
21850
21851   `R_SPARC_HI22' is obtained using `%hi' and `R_SPARC_LO10' is
21852obtained using `%lo'.  Likewise `R_SPARC_HIX22' is obtained from `%hix'
21853and `R_SPARC_LOX10' is obtained using `%lox'.  For example:
21854
21855     sethi %hi(symbol), %g1
21856     or    %g1, %lo(symbol), %g1
21857
21858     sethi %hix(symbol), %g1
21859     xor   %g1, %lox(symbol), %g1
21860
21861   These "high" mnemonics extract bits 31:10 of their operand, and the
21862"low" mnemonics extract bits 9:0 of their operand.
21863
21864   V9 code model relocations can be requested as follows:
21865
21866   * `R_SPARC_HH22' is requested using `%hh'.  It can also be generated
21867     using `%uhi'.
21868
21869   * `R_SPARC_HM10' is requested using `%hm'.  It can also be generated
21870     using `%ulo'.
21871
21872   * `R_SPARC_LM22' is requested using `%lm'.
21873
21874   * `R_SPARC_H44' is requested using `%h44'.
21875
21876   * `R_SPARC_M44' is requested using `%m44'.
21877
21878   * `R_SPARC_L44' is requested using `%l44' or `%l34'.
21879
21880   * `R_SPARC_H34' is requested using `%h34'.
21881
21882   The `%l34' generates a `R_SPARC_L44' relocation because it
21883calculates the necessary value, and therefore no explicit `R_SPARC_L34'
21884relocation needed to be created for this purpose.
21885
21886   The `%h34' and `%l34' relocations are used for the abs34 code model.
21887Here is an example abs34 address generation sequence:
21888
21889     sethi %h34(symbol), %g1
21890     sllx  %g1, 2, %g1
21891     or    %g1, %l34(symbol), %g1
21892
21893   The PC relative relocation `R_SPARC_PC22' can be obtained by
21894enclosing an operand inside of `%pc22'.  Likewise, the `R_SPARC_PC10'
21895relocation can be obtained using `%pc10'.  These are mostly used when
21896assembling PIC code.  For example, the standard PIC sequence on Sparc
21897to get the base of the global offset table, PC relative, into a
21898register, can be performed as:
21899
21900     sethi %pc22(_GLOBAL_OFFSET_TABLE_-4), %l7
21901     add   %l7, %pc10(_GLOBAL_OFFSET_TABLE_+4), %l7
21902
21903   Several relocations exist to allow the link editor to potentially
21904optimize GOT data references.  The `R_SPARC_GOTDATA_OP_HIX22'
21905relocation can obtained by enclosing an operand inside of
21906`%gdop_hix22'.  The `R_SPARC_GOTDATA_OP_LOX10' relocation can obtained
21907by enclosing an operand inside of `%gdop_lox10'.  Likewise,
21908`R_SPARC_GOTDATA_OP' can be obtained by enclosing an operand inside of
21909`%gdop'.  For example, assuming the GOT base is in register `%l7':
21910
21911     sethi %gdop_hix22(symbol), %l1
21912     xor   %l1, %gdop_lox10(symbol), %l1
21913     ld    [%l7 + %l1], %l2, %gdop(symbol)
21914
21915   There are many relocations that can be requested for access to
21916thread local storage variables.  All of the Sparc TLS mnemonics are
21917supported:
21918
21919   * `R_SPARC_TLS_GD_HI22' is requested using `%tgd_hi22'.
21920
21921   * `R_SPARC_TLS_GD_LO10' is requested using `%tgd_lo10'.
21922
21923   * `R_SPARC_TLS_GD_ADD' is requested using `%tgd_add'.
21924
21925   * `R_SPARC_TLS_GD_CALL' is requested using `%tgd_call'.
21926
21927   * `R_SPARC_TLS_LDM_HI22' is requested using `%tldm_hi22'.
21928
21929   * `R_SPARC_TLS_LDM_LO10' is requested using `%tldm_lo10'.
21930
21931   * `R_SPARC_TLS_LDM_ADD' is requested using `%tldm_add'.
21932
21933   * `R_SPARC_TLS_LDM_CALL' is requested using `%tldm_call'.
21934
21935   * `R_SPARC_TLS_LDO_HIX22' is requested using `%tldo_hix22'.
21936
21937   * `R_SPARC_TLS_LDO_LOX10' is requested using `%tldo_lox10'.
21938
21939   * `R_SPARC_TLS_LDO_ADD' is requested using `%tldo_add'.
21940
21941   * `R_SPARC_TLS_IE_HI22' is requested using `%tie_hi22'.
21942
21943   * `R_SPARC_TLS_IE_LO10' is requested using `%tie_lo10'.
21944
21945   * `R_SPARC_TLS_IE_LD' is requested using `%tie_ld'.
21946
21947   * `R_SPARC_TLS_IE_LDX' is requested using `%tie_ldx'.
21948
21949   * `R_SPARC_TLS_IE_ADD' is requested using `%tie_add'.
21950
21951   * `R_SPARC_TLS_LE_HIX22' is requested using `%tle_hix22'.
21952
21953   * `R_SPARC_TLS_LE_LOX10' is requested using `%tle_lox10'.
21954
21955   Here are some example TLS model sequences.
21956
21957   First, General Dynamic:
21958
21959     sethi  %tgd_hi22(symbol), %l1
21960     add    %l1, %tgd_lo10(symbol), %l1
21961     add    %l7, %l1, %o0, %tgd_add(symbol)
21962     call   __tls_get_addr, %tgd_call(symbol)
21963     nop
21964
21965   Local Dynamic:
21966
21967     sethi  %tldm_hi22(symbol), %l1
21968     add    %l1, %tldm_lo10(symbol), %l1
21969     add    %l7, %l1, %o0, %tldm_add(symbol)
21970     call   __tls_get_addr, %tldm_call(symbol)
21971     nop
21972
21973     sethi  %tldo_hix22(symbol), %l1
21974     xor    %l1, %tldo_lox10(symbol), %l1
21975     add    %o0, %l1, %l1, %tldo_add(symbol)
21976
21977   Initial Exec:
21978
21979     sethi  %tie_hi22(symbol), %l1
21980     add    %l1, %tie_lo10(symbol), %l1
21981     ld     [%l7 + %l1], %o0, %tie_ld(symbol)
21982     add    %g7, %o0, %o0, %tie_add(symbol)
21983
21984     sethi  %tie_hi22(symbol), %l1
21985     add    %l1, %tie_lo10(symbol), %l1
21986     ldx    [%l7 + %l1], %o0, %tie_ldx(symbol)
21987     add    %g7, %o0, %o0, %tie_add(symbol)
21988
21989   And finally, Local Exec:
21990
21991     sethi  %tle_hix22(symbol), %l1
21992     add    %l1, %tle_lox10(symbol), %l1
21993     add    %g7, %l1, %l1
21994
21995   When assembling for 64-bit, and a secondary constant addend is
21996specified in an address expression that would normally generate an
21997`R_SPARC_LO10' relocation, the assembler will emit an `R_SPARC_OLO10'
21998instead.
21999
22000
22001File: as.info,  Node: Sparc-Size-Translations,  Prev: Sparc-Relocs,  Up: Sparc-Syntax
22002
220039.44.3.5 Size Translations
22004..........................
22005
22006Often it is desirable to write code in an operand size agnostic manner.
22007`as' provides support for this via operand size opcode translations.
22008Translations are supported for loads, stores, shifts, compare-and-swap
22009atomics, and the `clr' synthetic instruction.
22010
22011   If generating 32-bit code, `as' will generate the 32-bit opcode.
22012Whereas if 64-bit code is being generated, the 64-bit opcode will be
22013emitted.  For example `ldn' will be transformed into `ld' for 32-bit
22014code and `ldx' for 64-bit code.
22015
22016   Here is an example meant to demonstrate all the supported opcode
22017translations:
22018
22019     ldn   [%o0], %o1
22020     ldna  [%o0] %asi, %o2
22021     stn   %o1, [%o0]
22022     stna  %o2, [%o0] %asi
22023     slln  %o3, 3, %o3
22024     srln  %o4, 8, %o4
22025     sran  %o5, 12, %o5
22026     casn  [%o0], %o1, %o2
22027     casna [%o0] %asi, %o1, %o2
22028     clrn  %g1
22029
22030   In 32-bit mode `as' will emit:
22031
22032     ld   [%o0], %o1
22033     lda  [%o0] %asi, %o2
22034     st   %o1, [%o0]
22035     sta  %o2, [%o0] %asi
22036     sll  %o3, 3, %o3
22037     srl  %o4, 8, %o4
22038     sra  %o5, 12, %o5
22039     cas  [%o0], %o1, %o2
22040     casa [%o0] %asi, %o1, %o2
22041     clr  %g1
22042
22043   And in 64-bit mode `as' will emit:
22044
22045     ldx   [%o0], %o1
22046     ldxa  [%o0] %asi, %o2
22047     stx   %o1, [%o0]
22048     stxa  %o2, [%o0] %asi
22049     sllx  %o3, 3, %o3
22050     srlx  %o4, 8, %o4
22051     srax  %o5, 12, %o5
22052     casx  [%o0], %o1, %o2
22053     casxa [%o0] %asi, %o1, %o2
22054     clrx  %g1
22055
22056   Finally, the `.nword' translating directive is supported as well.
22057It is documented in the section on Sparc machine directives.
22058
22059
22060File: as.info,  Node: Sparc-Float,  Next: Sparc-Directives,  Prev: Sparc-Syntax,  Up: Sparc-Dependent
22061
220629.44.4 Floating Point
22063---------------------
22064
22065The Sparc uses IEEE floating-point numbers.
22066
22067
22068File: as.info,  Node: Sparc-Directives,  Prev: Sparc-Float,  Up: Sparc-Dependent
22069
220709.44.5 Sparc Machine Directives
22071-------------------------------
22072
22073The Sparc version of `as' supports the following additional machine
22074directives:
22075
22076`.align'
22077     This must be followed by the desired alignment in bytes.
22078
22079`.common'
22080     This must be followed by a symbol name, a positive number, and
22081     `"bss"'.  This behaves somewhat like `.comm', but the syntax is
22082     different.
22083
22084`.half'
22085     This is functionally identical to `.short'.
22086
22087`.nword'
22088     On the Sparc, the `.nword' directive produces native word sized
22089     value, ie. if assembling with -32 it is equivalent to `.word', if
22090     assembling with -64 it is equivalent to `.xword'.
22091
22092`.proc'
22093     This directive is ignored.  Any text following it on the same line
22094     is also ignored.
22095
22096`.register'
22097     This directive declares use of a global application or system
22098     register.  It must be followed by a register name %g2, %g3, %g6 or
22099     %g7, comma and the symbol name for that register.  If symbol name
22100     is `#scratch', it is a scratch register, if it is `#ignore', it
22101     just suppresses any errors about using undeclared global register,
22102     but does not emit any information about it into the object file.
22103     This can be useful e.g. if you save the register before use and
22104     restore it after.
22105
22106`.reserve'
22107     This must be followed by a symbol name, a positive number, and
22108     `"bss"'.  This behaves somewhat like `.lcomm', but the syntax is
22109     different.
22110
22111`.seg'
22112     This must be followed by `"text"', `"data"', or `"data1"'.  It
22113     behaves like `.text', `.data', or `.data 1'.
22114
22115`.skip'
22116     This is functionally identical to the `.space' directive.
22117
22118`.word'
22119     On the Sparc, the `.word' directive produces 32 bit values,
22120     instead of the 16 bit values it produces on many other machines.
22121
22122`.xword'
22123     On the Sparc V9 processor, the `.xword' directive produces 64 bit
22124     values.
22125
22126
22127File: as.info,  Node: TIC54X-Dependent,  Next: TIC6X-Dependent,  Prev: Sparc-Dependent,  Up: Machine Dependencies
22128
221299.45 TIC54X Dependent Features
22130==============================
22131
22132* Menu:
22133
22134* TIC54X-Opts::              Command-line Options
22135* TIC54X-Block::             Blocking
22136* TIC54X-Env::               Environment Settings
22137* TIC54X-Constants::         Constants Syntax
22138* TIC54X-Subsyms::           String Substitution
22139* TIC54X-Locals::            Local Label Syntax
22140* TIC54X-Builtins::          Builtin Assembler Math Functions
22141* TIC54X-Ext::               Extended Addressing Support
22142* TIC54X-Directives::        Directives
22143* TIC54X-Macros::            Macro Features
22144* TIC54X-MMRegs::            Memory-mapped Registers
22145* TIC54X-Syntax::            Syntax
22146
22147
22148File: as.info,  Node: TIC54X-Opts,  Next: TIC54X-Block,  Up: TIC54X-Dependent
22149
221509.45.1 Options
22151--------------
22152
22153The TMS320C54X version of `as' has a few machine-dependent options.
22154
22155   You can use the `-mfar-mode' option to enable extended addressing
22156mode.  All addresses will be assumed to be > 16 bits, and the
22157appropriate relocation types will be used.  This option is equivalent
22158to using the `.far_mode' directive in the assembly code.  If you do not
22159use the `-mfar-mode' option, all references will be assumed to be 16
22160bits.  This option may be abbreviated to `-mf'.
22161
22162   You can use the `-mcpu' option to specify a particular CPU.  This
22163option is equivalent to using the `.version' directive in the assembly
22164code.  For recognized CPU codes, see *Note `.version':
22165TIC54X-Directives.  The default CPU version is `542'.
22166
22167   You can use the `-merrors-to-file' option to redirect error output
22168to a file (this provided for those deficient environments which don't
22169provide adequate output redirection).  This option may be abbreviated to
22170`-me'.
22171
22172
22173File: as.info,  Node: TIC54X-Block,  Next: TIC54X-Env,  Prev: TIC54X-Opts,  Up: TIC54X-Dependent
22174
221759.45.2 Blocking
22176---------------
22177
22178A blocked section or memory block is guaranteed not to cross the
22179blocking boundary (usually a page, or 128 words) if it is smaller than
22180the blocking size, or to start on a page boundary if it is larger than
22181the blocking size.
22182
22183
22184File: as.info,  Node: TIC54X-Env,  Next: TIC54X-Constants,  Prev: TIC54X-Block,  Up: TIC54X-Dependent
22185
221869.45.3 Environment Settings
22187---------------------------
22188
22189`C54XDSP_DIR' and `A_DIR' are semicolon-separated paths which are added
22190to the list of directories normally searched for source and include
22191files.  `C54XDSP_DIR' will override `A_DIR'.
22192
22193
22194File: as.info,  Node: TIC54X-Constants,  Next: TIC54X-Subsyms,  Prev: TIC54X-Env,  Up: TIC54X-Dependent
22195
221969.45.4 Constants Syntax
22197-----------------------
22198
22199The TIC54X version of `as' allows the following additional constant
22200formats, using a suffix to indicate the radix:
22201
22202     Binary                  `000000B, 011000b'
22203     Octal                   `10Q, 224q'
22204     Hexadecimal             `45h, 0FH'
22205
22206
22207File: as.info,  Node: TIC54X-Subsyms,  Next: TIC54X-Locals,  Prev: TIC54X-Constants,  Up: TIC54X-Dependent
22208
222099.45.5 String Substitution
22210--------------------------
22211
22212A subset of allowable symbols (which we'll call subsyms) may be assigned
22213arbitrary string values.  This is roughly equivalent to C preprocessor
22214#define macros.  When `as' encounters one of these symbols, the symbol
22215is replaced in the input stream by its string value.  Subsym names
22216*must* begin with a letter.
22217
22218   Subsyms may be defined using the `.asg' and `.eval' directives
22219(*Note `.asg': TIC54X-Directives, *Note `.eval': TIC54X-Directives.
22220
22221   Expansion is recursive until a previously encountered symbol is
22222seen, at which point substitution stops.
22223
22224   In this example, x is replaced with SYM2; SYM2 is replaced with
22225SYM1, and SYM1 is replaced with x.  At this point, x has already been
22226encountered and the substitution stops.
22227
22228      .asg   "x",SYM1
22229      .asg   "SYM1",SYM2
22230      .asg   "SYM2",x
22231      add    x,a             ; final code assembled is "add  x, a"
22232
22233   Macro parameters are converted to subsyms; a side effect of this is
22234the normal `as' '\ARG' dereferencing syntax is unnecessary.  Subsyms
22235defined within a macro will have global scope, unless the `.var'
22236directive is used to identify the subsym as a local macro variable
22237*note `.var': TIC54X-Directives.
22238
22239   Substitution may be forced in situations where replacement might be
22240ambiguous by placing colons on either side of the subsym.  The following
22241code:
22242
22243      .eval  "10",x
22244     LAB:X:  add     #x, a
22245
22246   When assembled becomes:
22247
22248     LAB10  add     #10, a
22249
22250   Smaller parts of the string assigned to a subsym may be accessed with
22251the following syntax:
22252
22253``:SYMBOL(CHAR_INDEX):''
22254     Evaluates to a single-character string, the character at
22255     CHAR_INDEX.
22256
22257``:SYMBOL(START,LENGTH):''
22258     Evaluates to a substring of SYMBOL beginning at START with length
22259     LENGTH.
22260
22261
22262File: as.info,  Node: TIC54X-Locals,  Next: TIC54X-Builtins,  Prev: TIC54X-Subsyms,  Up: TIC54X-Dependent
22263
222649.45.6 Local Labels
22265-------------------
22266
22267Local labels may be defined in two ways:
22268
22269   * $N, where N is a decimal number between 0 and 9
22270
22271   * LABEL?, where LABEL is any legal symbol name.
22272
22273   Local labels thus defined may be redefined or automatically
22274generated.  The scope of a local label is based on when it may be
22275undefined or reset.  This happens when one of the following situations
22276is encountered:
22277
22278   * .newblock directive *note `.newblock': TIC54X-Directives.
22279
22280   * The current section is changed (.sect, .text, or .data)
22281
22282   * Entering or leaving an included file
22283
22284   * The macro scope where the label was defined is exited
22285
22286
22287File: as.info,  Node: TIC54X-Builtins,  Next: TIC54X-Ext,  Prev: TIC54X-Locals,  Up: TIC54X-Dependent
22288
222899.45.7 Math Builtins
22290--------------------
22291
22292The following built-in functions may be used to generate a
22293floating-point value.  All return a floating-point value except `$cvi',
22294`$int', and `$sgn', which return an integer value.
22295
22296``$acos(EXPR)''
22297     Returns the floating point arccosine of EXPR.
22298
22299``$asin(EXPR)''
22300     Returns the floating point arcsine of EXPR.
22301
22302``$atan(EXPR)''
22303     Returns the floating point arctangent of EXPR.
22304
22305``$atan2(EXPR1,EXPR2)''
22306     Returns the floating point arctangent of EXPR1 / EXPR2.
22307
22308``$ceil(EXPR)''
22309     Returns the smallest integer not less than EXPR as floating point.
22310
22311``$cosh(EXPR)''
22312     Returns the floating point hyperbolic cosine of EXPR.
22313
22314``$cos(EXPR)''
22315     Returns the floating point cosine of EXPR.
22316
22317``$cvf(EXPR)''
22318     Returns the integer value EXPR converted to floating-point.
22319
22320``$cvi(EXPR)''
22321     Returns the floating point value EXPR converted to integer.
22322
22323``$exp(EXPR)''
22324     Returns the floating point value e ^ EXPR.
22325
22326``$fabs(EXPR)''
22327     Returns the floating point absolute value of EXPR.
22328
22329``$floor(EXPR)''
22330     Returns the largest integer that is not greater than EXPR as
22331     floating point.
22332
22333``$fmod(EXPR1,EXPR2)''
22334     Returns the floating point remainder of EXPR1 / EXPR2.
22335
22336``$int(EXPR)''
22337     Returns 1 if EXPR evaluates to an integer, zero otherwise.
22338
22339``$ldexp(EXPR1,EXPR2)''
22340     Returns the floating point value EXPR1 * 2 ^ EXPR2.
22341
22342``$log10(EXPR)''
22343     Returns the base 10 logarithm of EXPR.
22344
22345``$log(EXPR)''
22346     Returns the natural logarithm of EXPR.
22347
22348``$max(EXPR1,EXPR2)''
22349     Returns the floating point maximum of EXPR1 and EXPR2.
22350
22351``$min(EXPR1,EXPR2)''
22352     Returns the floating point minimum of EXPR1 and EXPR2.
22353
22354``$pow(EXPR1,EXPR2)''
22355     Returns the floating point value EXPR1 ^ EXPR2.
22356
22357``$round(EXPR)''
22358     Returns the nearest integer to EXPR as a floating point number.
22359
22360``$sgn(EXPR)''
22361     Returns -1, 0, or 1 based on the sign of EXPR.
22362
22363``$sin(EXPR)''
22364     Returns the floating point sine of EXPR.
22365
22366``$sinh(EXPR)''
22367     Returns the floating point hyperbolic sine of EXPR.
22368
22369``$sqrt(EXPR)''
22370     Returns the floating point square root of EXPR.
22371
22372``$tan(EXPR)''
22373     Returns the floating point tangent of EXPR.
22374
22375``$tanh(EXPR)''
22376     Returns the floating point hyperbolic tangent of EXPR.
22377
22378``$trunc(EXPR)''
22379     Returns the integer value of EXPR truncated towards zero as
22380     floating point.
22381
22382
22383
22384File: as.info,  Node: TIC54X-Ext,  Next: TIC54X-Directives,  Prev: TIC54X-Builtins,  Up: TIC54X-Dependent
22385
223869.45.8 Extended Addressing
22387--------------------------
22388
22389The `LDX' pseudo-op is provided for loading the extended addressing bits
22390of a label or address.  For example, if an address `_label' resides in
22391extended program memory, the value of `_label' may be loaded as follows:
22392      ldx     #_label,16,a    ; loads extended bits of _label
22393      or      #_label,a       ; loads lower 16 bits of _label
22394      bacc    a               ; full address is in accumulator A
22395
22396
22397File: as.info,  Node: TIC54X-Directives,  Next: TIC54X-Macros,  Prev: TIC54X-Ext,  Up: TIC54X-Dependent
22398
223999.45.9 Directives
22400-----------------
22401
22402`.align [SIZE]'
22403`.even'
22404     Align the section program counter on the next boundary, based on
22405     SIZE.  SIZE may be any power of 2.  `.even' is equivalent to
22406     `.align' with a SIZE of 2.
22407    `1'
22408          Align SPC to word boundary
22409
22410    `2'
22411          Align SPC to longword boundary (same as .even)
22412
22413    `128'
22414          Align SPC to page boundary
22415
22416`.asg STRING, NAME'
22417     Assign NAME the string STRING.  String replacement is performed on
22418     STRING before assignment.
22419
22420`.eval STRING, NAME'
22421     Evaluate the contents of string STRING and assign the result as a
22422     string to the subsym NAME.  String replacement is performed on
22423     STRING before assignment.
22424
22425`.bss SYMBOL, SIZE [, [BLOCKING_FLAG] [,ALIGNMENT_FLAG]]'
22426     Reserve space for SYMBOL in the .bss section.  SIZE is in words.
22427     If present, BLOCKING_FLAG indicates the allocated space should be
22428     aligned on a page boundary if it would otherwise cross a page
22429     boundary.  If present, ALIGNMENT_FLAG causes the assembler to
22430     allocate SIZE on a long word boundary.
22431
22432`.byte VALUE [,...,VALUE_N]'
22433`.ubyte VALUE [,...,VALUE_N]'
22434`.char VALUE [,...,VALUE_N]'
22435`.uchar VALUE [,...,VALUE_N]'
22436     Place one or more bytes into consecutive words of the current
22437     section.  The upper 8 bits of each word is zero-filled.  If a
22438     label is used, it points to the word allocated for the first byte
22439     encountered.
22440
22441`.clink ["SECTION_NAME"]'
22442     Set STYP_CLINK flag for this section, which indicates to the
22443     linker that if no symbols from this section are referenced, the
22444     section should not be included in the link.  If SECTION_NAME is
22445     omitted, the current section is used.
22446
22447`.c_mode'
22448     TBD.
22449
22450`.copy "FILENAME" | FILENAME'
22451`.include "FILENAME" | FILENAME'
22452     Read source statements from FILENAME.  The normal include search
22453     path is used.  Normally .copy will cause statements from the
22454     included file to be printed in the assembly listing and .include
22455     will not, but this distinction is not currently implemented.
22456
22457`.data'
22458     Begin assembling code into the .data section.
22459
22460`.double VALUE [,...,VALUE_N]'
22461`.ldouble VALUE [,...,VALUE_N]'
22462`.float VALUE [,...,VALUE_N]'
22463`.xfloat VALUE [,...,VALUE_N]'
22464     Place an IEEE single-precision floating-point representation of
22465     one or more floating-point values into the current section.  All
22466     but `.xfloat' align the result on a longword boundary.  Values are
22467     stored most-significant word first.
22468
22469`.drlist'
22470`.drnolist'
22471     Control printing of directives to the listing file.  Ignored.
22472
22473`.emsg STRING'
22474`.mmsg STRING'
22475`.wmsg STRING'
22476     Emit a user-defined error, message, or warning, respectively.
22477
22478`.far_mode'
22479     Use extended addressing when assembling statements.  This should
22480     appear only once per file, and is equivalent to the -mfar-mode
22481     option *note `-mfar-mode': TIC54X-Opts.
22482
22483`.fclist'
22484`.fcnolist'
22485     Control printing of false conditional blocks to the listing file.
22486
22487`.field VALUE [,SIZE]'
22488     Initialize a bitfield of SIZE bits in the current section.  If
22489     VALUE is relocatable, then SIZE must be 16.  SIZE defaults to 16
22490     bits.  If VALUE does not fit into SIZE bits, the value will be
22491     truncated.  Successive `.field' directives will pack starting at
22492     the current word, filling the most significant bits first, and
22493     aligning to the start of the next word if the field size does not
22494     fit into the space remaining in the current word.  A `.align'
22495     directive with an operand of 1 will force the next `.field'
22496     directive to begin packing into a new word.  If a label is used, it
22497     points to the word that contains the specified field.
22498
22499`.global SYMBOL [,...,SYMBOL_N]'
22500`.def SYMBOL [,...,SYMBOL_N]'
22501`.ref SYMBOL [,...,SYMBOL_N]'
22502     `.def' nominally identifies a symbol defined in the current file
22503     and available to other files.  `.ref' identifies a symbol used in
22504     the current file but defined elsewhere.  Both map to the standard
22505     `.global' directive.
22506
22507`.half VALUE [,...,VALUE_N]'
22508`.uhalf VALUE [,...,VALUE_N]'
22509`.short VALUE [,...,VALUE_N]'
22510`.ushort VALUE [,...,VALUE_N]'
22511`.int VALUE [,...,VALUE_N]'
22512`.uint VALUE [,...,VALUE_N]'
22513`.word VALUE [,...,VALUE_N]'
22514`.uword VALUE [,...,VALUE_N]'
22515     Place one or more values into consecutive words of the current
22516     section.  If a label is used, it points to the word allocated for
22517     the first value encountered.
22518
22519`.label SYMBOL'
22520     Define a special SYMBOL to refer to the load time address of the
22521     current section program counter.
22522
22523`.length'
22524`.width'
22525     Set the page length and width of the output listing file.  Ignored.
22526
22527`.list'
22528`.nolist'
22529     Control whether the source listing is printed.  Ignored.
22530
22531`.long VALUE [,...,VALUE_N]'
22532`.ulong VALUE [,...,VALUE_N]'
22533`.xlong VALUE [,...,VALUE_N]'
22534     Place one or more 32-bit values into consecutive words in the
22535     current section.  The most significant word is stored first.
22536     `.long' and `.ulong' align the result on a longword boundary;
22537     `xlong' does not.
22538
22539`.loop [COUNT]'
22540`.break [CONDITION]'
22541`.endloop'
22542     Repeatedly assemble a block of code.  `.loop' begins the block, and
22543     `.endloop' marks its termination.  COUNT defaults to 1024, and
22544     indicates the number of times the block should be repeated.
22545     `.break' terminates the loop so that assembly begins after the
22546     `.endloop' directive.  The optional CONDITION will cause the loop
22547     to terminate only if it evaluates to zero.
22548
22549`MACRO_NAME .macro [PARAM1][,...PARAM_N]'
22550`[.mexit]'
22551`.endm'
22552     See the section on macros for more explanation (*Note
22553     TIC54X-Macros::.
22554
22555`.mlib "FILENAME" | FILENAME'
22556     Load the macro library FILENAME.  FILENAME must be an archived
22557     library (BFD ar-compatible) of text files, expected to contain
22558     only macro definitions.   The standard include search path is used.
22559
22560`.mlist'
22561`.mnolist'
22562     Control whether to include macro and loop block expansions in the
22563     listing output.  Ignored.
22564
22565`.mmregs'
22566     Define global symbolic names for the 'c54x registers.  Supposedly
22567     equivalent to executing `.set' directives for each register with
22568     its memory-mapped value, but in reality is provided only for
22569     compatibility and does nothing.
22570
22571`.newblock'
22572     This directive resets any TIC54X local labels currently defined.
22573     Normal `as' local labels are unaffected.
22574
22575`.option OPTION_LIST'
22576     Set listing options.  Ignored.
22577
22578`.sblock "SECTION_NAME" | SECTION_NAME [,"NAME_N" | NAME_N]'
22579     Designate SECTION_NAME for blocking.  Blocking guarantees that a
22580     section will start on a page boundary (128 words) if it would
22581     otherwise cross a page boundary.  Only initialized sections may be
22582     designated with this directive.  See also *Note TIC54X-Block::.
22583
22584`.sect "SECTION_NAME"'
22585     Define a named initialized section and make it the current section.
22586
22587`SYMBOL .set "VALUE"'
22588`SYMBOL .equ "VALUE"'
22589     Equate a constant VALUE to a SYMBOL, which is placed in the symbol
22590     table.  SYMBOL may not be previously defined.
22591
22592`.space SIZE_IN_BITS'
22593`.bes SIZE_IN_BITS'
22594     Reserve the given number of bits in the current section and
22595     zero-fill them.  If a label is used with `.space', it points to the
22596     *first* word reserved.  With `.bes', the label points to the
22597     *last* word reserved.
22598
22599`.sslist'
22600`.ssnolist'
22601     Controls the inclusion of subsym replacement in the listing
22602     output.  Ignored.
22603
22604`.string "STRING" [,...,"STRING_N"]'
22605`.pstring "STRING" [,...,"STRING_N"]'
22606     Place 8-bit characters from STRING into the current section.
22607     `.string' zero-fills the upper 8 bits of each word, while
22608     `.pstring' puts two characters into each word, filling the
22609     most-significant bits first.  Unused space is zero-filled.  If a
22610     label is used, it points to the first word initialized.
22611
22612`[STAG] .struct [OFFSET]'
22613`[NAME_1] element [COUNT_1]'
22614`[NAME_2] element [COUNT_2]'
22615`[TNAME] .tag STAGX [TCOUNT]'
22616`...'
22617`[NAME_N] element [COUNT_N]'
22618`[SSIZE] .endstruct'
22619`LABEL .tag [STAG]'
22620     Assign symbolic offsets to the elements of a structure.  STAG
22621     defines a symbol to use to reference the structure.  OFFSET
22622     indicates a starting value to use for the first element
22623     encountered; otherwise it defaults to zero.  Each element can have
22624     a named offset, NAME, which is a symbol assigned the value of the
22625     element's offset into the structure.  If STAG is missing, these
22626     become global symbols.  COUNT adjusts the offset that many times,
22627     as if `element' were an array.  `element' may be one of `.byte',
22628     `.word', `.long', `.float', or any equivalent of those, and the
22629     structure offset is adjusted accordingly.  `.field' and `.string'
22630     are also allowed; the size of `.field' is one bit, and `.string'
22631     is considered to be one word in size.  Only element descriptors,
22632     structure/union tags, `.align' and conditional assembly directives
22633     are allowed within `.struct'/`.endstruct'.  `.align' aligns member
22634     offsets to word boundaries only.  SSIZE, if provided, will always
22635     be assigned the size of the structure.
22636
22637     The `.tag' directive, in addition to being used to define a
22638     structure/union element within a structure, may be used to apply a
22639     structure to a symbol.  Once applied to LABEL, the individual
22640     structure elements may be applied to LABEL to produce the desired
22641     offsets using LABEL as the structure base.
22642
22643`.tab'
22644     Set the tab size in the output listing.  Ignored.
22645
22646`[UTAG] .union'
22647`[NAME_1] element [COUNT_1]'
22648`[NAME_2] element [COUNT_2]'
22649`[TNAME] .tag UTAGX[,TCOUNT]'
22650`...'
22651`[NAME_N] element [COUNT_N]'
22652`[USIZE] .endstruct'
22653`LABEL .tag [UTAG]'
22654     Similar to `.struct', but the offset after each element is reset to
22655     zero, and the USIZE is set to the maximum of all defined elements.
22656     Starting offset for the union is always zero.
22657
22658`[SYMBOL] .usect "SECTION_NAME", SIZE, [,[BLOCKING_FLAG] [,ALIGNMENT_FLAG]]'
22659     Reserve space for variables in a named, uninitialized section
22660     (similar to .bss).  `.usect' allows definitions sections
22661     independent of .bss.  SYMBOL points to the first location reserved
22662     by this allocation.  The symbol may be used as a variable name.
22663     SIZE is the allocated size in words.  BLOCKING_FLAG indicates
22664     whether to block this section on a page boundary (128 words)
22665     (*note TIC54X-Block::).  ALIGNMENT FLAG indicates whether the
22666     section should be longword-aligned.
22667
22668`.var SYM[,..., SYM_N]'
22669     Define a subsym to be a local variable within a macro.  See *Note
22670     TIC54X-Macros::.
22671
22672`.version VERSION'
22673     Set which processor to build instructions for.  Though the
22674     following values are accepted, the op is ignored.
22675    `541'
22676    `542'
22677    `543'
22678    `545'
22679    `545LP'
22680    `546LP'
22681    `548'
22682    `549'
22683
22684
22685File: as.info,  Node: TIC54X-Macros,  Next: TIC54X-MMRegs,  Prev: TIC54X-Directives,  Up: TIC54X-Dependent
22686
226879.45.10 Macros
22688--------------
22689
22690Macros do not require explicit dereferencing of arguments (i.e., \ARG).
22691
22692   During macro expansion, the macro parameters are converted to
22693subsyms.  If the number of arguments passed the macro invocation
22694exceeds the number of parameters defined, the last parameter is
22695assigned the string equivalent of all remaining arguments.  If fewer
22696arguments are given than parameters, the missing parameters are
22697assigned empty strings.  To include a comma in an argument, you must
22698enclose the argument in quotes.
22699
22700   The following built-in subsym functions allow examination of the
22701string value of subsyms (or ordinary strings).  The arguments are
22702strings unless otherwise indicated (subsyms passed as args will be
22703replaced by the strings they represent).
22704``$symlen(STR)''
22705     Returns the length of STR.
22706
22707``$symcmp(STR1,STR2)''
22708     Returns 0 if STR1 == STR2, non-zero otherwise.
22709
22710``$firstch(STR,CH)''
22711     Returns index of the first occurrence of character constant CH in
22712     STR.
22713
22714``$lastch(STR,CH)''
22715     Returns index of the last occurrence of character constant CH in
22716     STR.
22717
22718``$isdefed(SYMBOL)''
22719     Returns zero if the symbol SYMBOL is not in the symbol table,
22720     non-zero otherwise.
22721
22722``$ismember(SYMBOL,LIST)''
22723     Assign the first member of comma-separated string LIST to SYMBOL;
22724     LIST is reassigned the remainder of the list.  Returns zero if
22725     LIST is a null string.  Both arguments must be subsyms.
22726
22727``$iscons(EXPR)''
22728     Returns 1 if string EXPR is binary, 2 if octal, 3 if hexadecimal,
22729     4 if a character, 5 if decimal, and zero if not an integer.
22730
22731``$isname(NAME)''
22732     Returns 1 if NAME is a valid symbol name, zero otherwise.
22733
22734``$isreg(REG)''
22735     Returns 1 if REG is a valid predefined register name (AR0-AR7
22736     only).
22737
22738``$structsz(STAG)''
22739     Returns the size of the structure or union represented by STAG.
22740
22741``$structacc(STAG)''
22742     Returns the reference point of the structure or union represented
22743     by STAG.   Always returns zero.
22744
22745
22746
22747File: as.info,  Node: TIC54X-MMRegs,  Next: TIC54X-Syntax,  Prev: TIC54X-Macros,  Up: TIC54X-Dependent
22748
227499.45.11 Memory-mapped Registers
22750-------------------------------
22751
22752The following symbols are recognized as memory-mapped registers:
22753
22754
22755
22756File: as.info,  Node: TIC54X-Syntax,  Prev: TIC54X-MMRegs,  Up: TIC54X-Dependent
22757
227589.45.12 TIC54X Syntax
22759---------------------
22760
22761* Menu:
22762
22763* TIC54X-Chars::                Special Characters
22764
22765
22766File: as.info,  Node: TIC54X-Chars,  Up: TIC54X-Syntax
22767
227689.45.12.1 Special Characters
22769............................
22770
22771The presence of a `;' appearing anywhere on a line indicates the start
22772of a comment that extends to the end of that line.
22773
22774   If a `#' appears as the first character of a line then the whole
22775line is treated as a comment, but in this case the line can also be a
22776logical line number directive (*note Comments::) or a preprocessor
22777control command (*note Preprocessing::).
22778
22779   The presence of an asterisk (`*') at the start of a line also
22780indicates a comment that extends to the end of that line.
22781
22782   The TIC54X assembler does not currently support a line separator
22783character.
22784
22785
22786File: as.info,  Node: TIC6X-Dependent,  Next: TILE-Gx-Dependent,  Prev: TIC54X-Dependent,  Up: Machine Dependencies
22787
227889.46 TIC6X Dependent Features
22789=============================
22790
22791* Menu:
22792
22793* TIC6X Options::            Options
22794* TIC6X Syntax::             Syntax
22795* TIC6X Directives::         Directives
22796
22797
22798File: as.info,  Node: TIC6X Options,  Next: TIC6X Syntax,  Up: TIC6X-Dependent
22799
228009.46.1 TIC6X Options
22801--------------------
22802
22803`-march=ARCH'
22804     Enable (only) instructions from architecture ARCH.  By default,
22805     all instructions are permitted.
22806
22807     The following values of ARCH are accepted: `c62x', `c64x',
22808     `c64x+', `c67x', `c67x+', `c674x'.
22809
22810`-mdsbt'
22811`-mno-dsbt'
22812     The `-mdsbt' option causes the assembler to generate the
22813     `Tag_ABI_DSBT' attribute with a value of 1, indicating that the
22814     code is using DSBT addressing.  The `-mno-dsbt' option, the
22815     default, causes the tag to have a value of 0, indicating that the
22816     code does not use DSBT addressing.  The linker will emit a warning
22817     if objects of different type (DSBT and non-DSBT) are linked
22818     together.
22819
22820`-mpid=no'
22821`-mpid=near'
22822`-mpid=far'
22823     The `-mpid=' option causes the assembler to generate the
22824     `Tag_ABI_PID' attribute with a value indicating the form of data
22825     addressing used by the code.  `-mpid=no', the default, indicates
22826     position-dependent data addressing, `-mpid=near' indicates
22827     position-independent addressing with GOT accesses using near DP
22828     addressing, and `-mpid=far' indicates position-independent
22829     addressing with GOT accesses using far DP addressing.  The linker
22830     will emit a warning if objects built with different settings of
22831     this option are linked together.
22832
22833`-mpic'
22834`-mno-pic'
22835     The `-mpic' option causes the assembler to generate the
22836     `Tag_ABI_PIC' attribute with a value of 1, indicating that the
22837     code is using position-independent code addressing,  The
22838     `-mno-pic' option, the default, causes the tag to have a value of
22839     0, indicating position-dependent code addressing.  The linker will
22840     emit a warning if objects of different type (position-dependent and
22841     position-independent) are linked together.
22842
22843`-mbig-endian'
22844`-mlittle-endian'
22845     Generate code for the specified endianness.  The default is
22846     little-endian.
22847
22848
22849
22850File: as.info,  Node: TIC6X Syntax,  Next: TIC6X Directives,  Prev: TIC6X Options,  Up: TIC6X-Dependent
22851
228529.46.2 TIC6X Syntax
22853-------------------
22854
22855The presence of a `;' on a line indicates the start of a comment that
22856extends to the end of the current line.  If a `#' or `*' appears as the
22857first character of a line, the whole line is treated as a comment.
22858Note that if a line starts with a `#' character then it can also be a
22859logical line number directive (*note Comments::) or a preprocessor
22860control command (*note Preprocessing::).
22861
22862   The `@' character can be used instead of a newline to separate
22863statements.
22864
22865   Instruction, register and functional unit names are case-insensitive.
22866`as' requires fully-specified functional unit names, such as `.S1',
22867`.L1X' or `.D1T2', on all instructions using a functional unit.
22868
22869   For some instructions, there may be syntactic ambiguity between
22870register or functional unit names and the names of labels or other
22871symbols.  To avoid this, enclose the ambiguous symbol name in
22872parentheses; register and functional unit names may not be enclosed in
22873parentheses.
22874
22875
22876File: as.info,  Node: TIC6X Directives,  Prev: TIC6X Syntax,  Up: TIC6X-Dependent
22877
228789.46.3 TIC6X Directives
22879-----------------------
22880
22881Directives controlling the set of instructions accepted by the
22882assembler have effect for instructions between the directive and any
22883subsequent directive overriding it.
22884
22885`.arch ARCH'
22886     This has the same effect as `-march=ARCH'.
22887
22888`.cantunwind'
22889     Prevents unwinding through the current function.  No personality
22890     routine or exception table data is required or permitted.
22891
22892     If this is not specified then frame unwinding information will be
22893     constructed from CFI directives. *note CFI directives::.
22894
22895`.c6xabi_attribute TAG, VALUE'
22896     Set the C6000 EABI build attribute TAG to VALUE.
22897
22898     The TAG is either an attribute number or one of `Tag_ISA',
22899     `Tag_ABI_wchar_t', `Tag_ABI_stack_align_needed',
22900     `Tag_ABI_stack_align_preserved', `Tag_ABI_DSBT', `Tag_ABI_PID',
22901     `Tag_ABI_PIC', `TAG_ABI_array_object_alignment',
22902     `TAG_ABI_array_object_align_expected', `Tag_ABI_compatibility' and
22903     `Tag_ABI_conformance'.  The VALUE is either a `number',
22904     `"string"', or `number, "string"' depending on the tag.
22905
22906`.ehtype SYMBOL'
22907     Output an exception type table reference to SYMBOL.
22908
22909`.endp'
22910     Marks the end of and exception table or function.  If preceded by a
22911     `.handlerdata' directive then this also switched back to the
22912     previous text section.
22913
22914`.handlerdata'
22915     Marks the end of the current function, and the start of the
22916     exception table entry for that function.  Anything between this
22917     directive and the `.endp' directive will be added to the exception
22918     table entry.
22919
22920     Must be preceded by a CFI block containing a `.cfi_lsda' directive.
22921
22922`.nocmp'
22923     Disallow use of C64x+ compact instructions in the current text
22924     section.
22925
22926`.personalityindex INDEX'
22927     Sets the personality routine for the current function to the ABI
22928     specified compact routine number INDEX
22929
22930`.personality NAME'
22931     Sets the personality routine for the current function to NAME.
22932
22933`.scomm SYMBOL, SIZE, ALIGN'
22934     Like `.comm', creating a common symbol SYMBOL with size SIZE and
22935     alignment ALIGN, but unlike when using `.comm', this symbol will
22936     be placed into the small BSS section by the linker.
22937
22938
22939
22940File: as.info,  Node: TILE-Gx-Dependent,  Next: TILEPro-Dependent,  Prev: TIC6X-Dependent,  Up: Machine Dependencies
22941
229429.47 TILE-Gx Dependent Features
22943===============================
22944
22945* Menu:
22946
22947* TILE-Gx Options::		TILE-Gx Options
22948* TILE-Gx Syntax::		TILE-Gx Syntax
22949* TILE-Gx Directives::		TILE-Gx Directives
22950
22951
22952File: as.info,  Node: TILE-Gx Options,  Next: TILE-Gx Syntax,  Up: TILE-Gx-Dependent
22953
229549.47.1 Options
22955--------------
22956
22957The following table lists all available TILE-Gx specific options:
22958
22959`-m32 | -m64'
22960     Select the word size, either 32 bits or 64 bits.
22961
22962`-EB | -EL'
22963     Select the endianness, either big-endian (-EB) or little-endian
22964     (-EL).
22965
22966
22967
22968File: as.info,  Node: TILE-Gx Syntax,  Next: TILE-Gx Directives,  Prev: TILE-Gx Options,  Up: TILE-Gx-Dependent
22969
229709.47.2 Syntax
22971-------------
22972
22973Block comments are delimited by `/*' and `*/'.  End of line comments
22974may be introduced by `#'.
22975
22976   Instructions consist of a leading opcode or macro name followed by
22977whitespace and an optional comma-separated list of operands:
22978
22979     OPCODE [OPERAND, ...]
22980
22981   Instructions must be separated by a newline or semicolon.
22982
22983   There are two ways to write code: either write naked instructions,
22984which the assembler is free to combine into VLIW bundles, or specify
22985the VLIW bundles explicitly.
22986
22987   Bundles are specified using curly braces:
22988
22989     { ADD r3,r4,r5 ; ADD r7,r8,r9 ; LW r10,r11 }
22990
22991   A bundle can span multiple lines. If you want to put multiple
22992instructions on a line, whether in a bundle or not, you need to
22993separate them with semicolons as in this example.
22994
22995   A bundle may contain one or more instructions, up to the limit
22996specified by the ISA (currently three). If fewer instructions are
22997specified than the hardware supports in a bundle, the assembler inserts
22998`fnop' instructions automatically.
22999
23000   The assembler will prefer to preserve the ordering of instructions
23001within the bundle, putting the first instruction in a lower-numbered
23002pipeline than the next one, etc.  This fact, combined with the optional
23003use of explicit `fnop' or `nop' instructions, allows precise control
23004over which pipeline executes each instruction.
23005
23006   If the instructions cannot be bundled in the listed order, the
23007assembler will automatically try to find a valid pipeline assignment.
23008If there is no way to bundle the instructions together, the assembler
23009reports an error.
23010
23011   The assembler does not yet auto-bundle (automatically combine
23012multiple instructions into one bundle), but it reserves the right to do
23013so in the future.  If you want to force an instruction to run by
23014itself, put it in a bundle explicitly with curly braces and use `nop'
23015instructions (not `fnop') to fill the remaining pipeline slots in that
23016bundle.
23017
23018* Menu:
23019
23020* TILE-Gx Opcodes::              Opcode Naming Conventions.
23021* TILE-Gx Registers::            Register Naming.
23022* TILE-Gx Modifiers::            Symbolic Operand Modifiers.
23023
23024
23025File: as.info,  Node: TILE-Gx Opcodes,  Next: TILE-Gx Registers,  Up: TILE-Gx Syntax
23026
230279.47.2.1 Opcode Names
23028.....................
23029
23030For a complete list of opcodes and descriptions of their semantics, see
23031`TILE-Gx Instruction Set Architecture', available upon request at
23032www.tilera.com.
23033
23034
23035File: as.info,  Node: TILE-Gx Registers,  Next: TILE-Gx Modifiers,  Prev: TILE-Gx Opcodes,  Up: TILE-Gx Syntax
23036
230379.47.2.2 Register Names
23038.......................
23039
23040General-purpose registers are represented by predefined symbols of the
23041form `rN', where N represents a number between `0' and `63'.  However,
23042the following registers have canonical names that must be used instead:
23043
23044`r54'
23045     sp
23046
23047`r55'
23048     lr
23049
23050`r56'
23051     sn
23052
23053`r57'
23054     idn0
23055
23056`r58'
23057     idn1
23058
23059`r59'
23060     udn0
23061
23062`r60'
23063     udn1
23064
23065`r61'
23066     udn2
23067
23068`r62'
23069     udn3
23070
23071`r63'
23072     zero
23073
23074
23075   The assembler will emit a warning if a numeric name is used instead
23076of the non-numeric name.  The `.no_require_canonical_reg_names'
23077assembler pseudo-op turns off this warning.
23078`.require_canonical_reg_names' turns it back on.
23079
23080
23081File: as.info,  Node: TILE-Gx Modifiers,  Prev: TILE-Gx Registers,  Up: TILE-Gx Syntax
23082
230839.47.2.3 Symbolic Operand Modifiers
23084...................................
23085
23086The assembler supports several modifiers when using symbol addresses in
23087TILE-Gx instruction operands.  The general syntax is the following:
23088
23089     modifier(symbol)
23090
23091   The following modifiers are supported:
23092
23093`hw0'
23094     This modifier is used to load bits 0-15 of the symbol's address.
23095
23096`hw1'
23097     This modifier is used to load bits 16-31 of the symbol's address.
23098
23099`hw2'
23100     This modifier is used to load bits 32-47 of the symbol's address.
23101
23102`hw3'
23103     This modifier is used to load bits 48-63 of the symbol's address.
23104
23105`hw0_last'
23106     This modifier yields the same value as `hw0', but it also checks
23107     that the value does not overflow.
23108
23109`hw1_last'
23110     This modifier yields the same value as `hw1', but it also checks
23111     that the value does not overflow.
23112
23113`hw2_last'
23114     This modifier yields the same value as `hw2', but it also checks
23115     that the value does not overflow.
23116
23117     A 48-bit symbolic value is constructed by using the following
23118     idiom:
23119
23120          moveli r0, hw2_last(sym)
23121          shl16insli r0, r0, hw1(sym)
23122          shl16insli r0, r0, hw0(sym)
23123
23124`hw0_got'
23125     This modifier is used to load bits 0-15 of the symbol's offset in
23126     the GOT entry corresponding to the symbol.
23127
23128`hw0_last_got'
23129     This modifier yields the same value as `hw0_got', but it also
23130     checks that the value does not overflow.
23131
23132`hw1_last_got'
23133     This modifier is used to load bits 16-31 of the symbol's offset in
23134     the GOT entry corresponding to the symbol, and it also checks that
23135     the value does not overflow.
23136
23137`plt'
23138     This modifier is used for function symbols.  It causes a
23139     _procedure linkage table_, an array of code stubs, to be created
23140     at the time the shared object is created or linked against,
23141     together with a global offset table entry.  The value is a
23142     pc-relative offset to the corresponding stub code in the procedure
23143     linkage table.  This arrangement causes the run-time symbol
23144     resolver to be called to look up and set the value of the symbol
23145     the first time the function is called (at latest; depending
23146     environment variables).  It is only safe to leave the symbol
23147     unresolved this way if all references are function calls.
23148
23149`hw0_plt'
23150     This modifier is used to load bits 0-15 of the pc-relative address
23151     of a plt entry.
23152
23153`hw1_plt'
23154     This modifier is used to load bits 16-31 of the pc-relative
23155     address of a plt entry.
23156
23157`hw1_last_plt'
23158     This modifier yields the same value as `hw1_plt', but it also
23159     checks that the value does not overflow.
23160
23161`hw2_last_plt'
23162     This modifier is used to load bits 32-47 of the pc-relative
23163     address of a plt entry, and it also checks that the value does not
23164     overflow.
23165
23166`hw0_tls_gd'
23167     This modifier is used to load bits 0-15 of the offset of the GOT
23168     entry of the symbol's TLS descriptor, to be used for
23169     general-dynamic TLS accesses.
23170
23171`hw0_last_tls_gd'
23172     This modifier yields the same value as `hw0_tls_gd', but it also
23173     checks that the value does not overflow.
23174
23175`hw1_last_tls_gd'
23176     This modifier is used to load bits 16-31 of the offset of the GOT
23177     entry of the symbol's TLS descriptor, to be used for
23178     general-dynamic TLS accesses.  It also checks that the value does
23179     not overflow.
23180
23181`hw0_tls_ie'
23182     This modifier is used to load bits 0-15 of the offset of the GOT
23183     entry containing the offset of the symbol's address from the TCB,
23184     to be used for initial-exec TLS accesses.
23185
23186`hw0_last_tls_ie'
23187     This modifier yields the same value as `hw0_tls_ie', but it also
23188     checks that the value does not overflow.
23189
23190`hw1_last_tls_ie'
23191     This modifier is used to load bits 16-31 of the offset of the GOT
23192     entry containing the offset of the symbol's address from the TCB,
23193     to be used for initial-exec TLS accesses.  It also checks that the
23194     value does not overflow.
23195
23196`hw0_tls_le'
23197     This modifier is used to load bits 0-15 of the offset of the
23198     symbol's address from the TCB, to be used for local-exec TLS
23199     accesses.
23200
23201`hw0_last_tls_le'
23202     This modifier yields the same value as `hw0_tls_le', but it also
23203     checks that the value does not overflow.
23204
23205`hw1_last_tls_le'
23206     This modifier is used to load bits 16-31 of the offset of the
23207     symbol's address from the TCB, to be used for local-exec TLS
23208     accesses.  It also checks that the value does not overflow.
23209
23210`tls_gd_call'
23211     This modifier is used to tag an instruction as the "call" part of a
23212     calling sequence for a TLS GD reference of its operand.
23213
23214`tls_gd_add'
23215     This modifier is used to tag an instruction as the "add" part of a
23216     calling sequence for a TLS GD reference of its operand.
23217
23218`tls_ie_load'
23219     This modifier is used to tag an instruction as the "load" part of a
23220     calling sequence for a TLS IE reference of its operand.
23221
23222
23223
23224File: as.info,  Node: TILE-Gx Directives,  Prev: TILE-Gx Syntax,  Up: TILE-Gx-Dependent
23225
232269.47.3 TILE-Gx Directives
23227-------------------------
23228
23229`.align EXPRESSION [, EXPRESSION]'
23230     This is the generic .ALIGN directive.  The first argument is the
23231     requested alignment in bytes.
23232
23233`.allow_suspicious_bundles'
23234     Turns on error checking for combinations of instructions in a
23235     bundle that probably indicate a programming error.  This is on by
23236     default.
23237
23238`.no_allow_suspicious_bundles'
23239     Turns off error checking for combinations of instructions in a
23240     bundle that probably indicate a programming error.
23241
23242`.require_canonical_reg_names'
23243     Require that canonical register names be used, and emit a warning
23244     if the numeric names are used.  This is on by default.
23245
23246`.no_require_canonical_reg_names'
23247     Permit the use of numeric names for registers that have canonical
23248     names.
23249
23250
23251
23252File: as.info,  Node: TILEPro-Dependent,  Next: V850-Dependent,  Prev: TILE-Gx-Dependent,  Up: Machine Dependencies
23253
232549.48 TILEPro Dependent Features
23255===============================
23256
23257* Menu:
23258
23259* TILEPro Options::		TILEPro Options
23260* TILEPro Syntax::		TILEPro Syntax
23261* TILEPro Directives::		TILEPro Directives
23262
23263
23264File: as.info,  Node: TILEPro Options,  Next: TILEPro Syntax,  Up: TILEPro-Dependent
23265
232669.48.1 Options
23267--------------
23268
23269`as' has no machine-dependent command-line options for TILEPro.
23270
23271
23272File: as.info,  Node: TILEPro Syntax,  Next: TILEPro Directives,  Prev: TILEPro Options,  Up: TILEPro-Dependent
23273
232749.48.2 Syntax
23275-------------
23276
23277Block comments are delimited by `/*' and `*/'.  End of line comments
23278may be introduced by `#'.
23279
23280   Instructions consist of a leading opcode or macro name followed by
23281whitespace and an optional comma-separated list of operands:
23282
23283     OPCODE [OPERAND, ...]
23284
23285   Instructions must be separated by a newline or semicolon.
23286
23287   There are two ways to write code: either write naked instructions,
23288which the assembler is free to combine into VLIW bundles, or specify
23289the VLIW bundles explicitly.
23290
23291   Bundles are specified using curly braces:
23292
23293     { ADD r3,r4,r5 ; ADD r7,r8,r9 ; LW r10,r11 }
23294
23295   A bundle can span multiple lines. If you want to put multiple
23296instructions on a line, whether in a bundle or not, you need to
23297separate them with semicolons as in this example.
23298
23299   A bundle may contain one or more instructions, up to the limit
23300specified by the ISA (currently three). If fewer instructions are
23301specified than the hardware supports in a bundle, the assembler inserts
23302`fnop' instructions automatically.
23303
23304   The assembler will prefer to preserve the ordering of instructions
23305within the bundle, putting the first instruction in a lower-numbered
23306pipeline than the next one, etc.  This fact, combined with the optional
23307use of explicit `fnop' or `nop' instructions, allows precise control
23308over which pipeline executes each instruction.
23309
23310   If the instructions cannot be bundled in the listed order, the
23311assembler will automatically try to find a valid pipeline assignment.
23312If there is no way to bundle the instructions together, the assembler
23313reports an error.
23314
23315   The assembler does not yet auto-bundle (automatically combine
23316multiple instructions into one bundle), but it reserves the right to do
23317so in the future.  If you want to force an instruction to run by
23318itself, put it in a bundle explicitly with curly braces and use `nop'
23319instructions (not `fnop') to fill the remaining pipeline slots in that
23320bundle.
23321
23322* Menu:
23323
23324* TILEPro Opcodes::              Opcode Naming Conventions.
23325* TILEPro Registers::            Register Naming.
23326* TILEPro Modifiers::            Symbolic Operand Modifiers.
23327
23328
23329File: as.info,  Node: TILEPro Opcodes,  Next: TILEPro Registers,  Up: TILEPro Syntax
23330
233319.48.2.1 Opcode Names
23332.....................
23333
23334For a complete list of opcodes and descriptions of their semantics, see
23335`TILE Processor User Architecture Manual', available upon request at
23336www.tilera.com.
23337
23338
23339File: as.info,  Node: TILEPro Registers,  Next: TILEPro Modifiers,  Prev: TILEPro Opcodes,  Up: TILEPro Syntax
23340
233419.48.2.2 Register Names
23342.......................
23343
23344General-purpose registers are represented by predefined symbols of the
23345form `rN', where N represents a number between `0' and `63'.  However,
23346the following registers have canonical names that must be used instead:
23347
23348`r54'
23349     sp
23350
23351`r55'
23352     lr
23353
23354`r56'
23355     sn
23356
23357`r57'
23358     idn0
23359
23360`r58'
23361     idn1
23362
23363`r59'
23364     udn0
23365
23366`r60'
23367     udn1
23368
23369`r61'
23370     udn2
23371
23372`r62'
23373     udn3
23374
23375`r63'
23376     zero
23377
23378
23379   The assembler will emit a warning if a numeric name is used instead
23380of the canonical name.  The `.no_require_canonical_reg_names' assembler
23381pseudo-op turns off this warning. `.require_canonical_reg_names' turns
23382it back on.
23383
23384
23385File: as.info,  Node: TILEPro Modifiers,  Prev: TILEPro Registers,  Up: TILEPro Syntax
23386
233879.48.2.3 Symbolic Operand Modifiers
23388...................................
23389
23390The assembler supports several modifiers when using symbol addresses in
23391TILEPro instruction operands.  The general syntax is the following:
23392
23393     modifier(symbol)
23394
23395   The following modifiers are supported:
23396
23397`lo16'
23398     This modifier is used to load the low 16 bits of the symbol's
23399     address, sign-extended to a 32-bit value (sign-extension allows it
23400     to be range-checked against signed 16 bit immediate operands
23401     without complaint).
23402
23403`hi16'
23404     This modifier is used to load the high 16 bits of the symbol's
23405     address, also sign-extended to a 32-bit value.
23406
23407`ha16'
23408     `ha16(N)' is identical to `hi16(N)', except if `lo16(N)' is
23409     negative it adds one to the `hi16(N)' value. This way `lo16' and
23410     `ha16' can be added to create any 32-bit value using `auli'.  For
23411     example, here is how you move an arbitrary 32-bit address into r3:
23412
23413          moveli r3, lo16(sym)
23414          auli r3, r3, ha16(sym)
23415
23416`got'
23417     This modifier is used to load the offset of the GOT entry
23418     corresponding to the symbol.
23419
23420`got_lo16'
23421     This modifier is used to load the sign-extended low 16 bits of the
23422     offset of the GOT entry corresponding to the symbol.
23423
23424`got_hi16'
23425     This modifier is used to load the sign-extended high 16 bits of the
23426     offset of the GOT entry corresponding to the symbol.
23427
23428`got_ha16'
23429     This modifier is like `got_hi16', but it adds one if `got_lo16' of
23430     the input value is negative.
23431
23432`plt'
23433     This modifier is used for function symbols.  It causes a
23434     _procedure linkage table_, an array of code stubs, to be created
23435     at the time the shared object is created or linked against,
23436     together with a global offset table entry.  The value is a
23437     pc-relative offset to the corresponding stub code in the procedure
23438     linkage table.  This arrangement causes the run-time symbol
23439     resolver to be called to look up and set the value of the symbol
23440     the first time the function is called (at latest; depending
23441     environment variables).  It is only safe to leave the symbol
23442     unresolved this way if all references are function calls.
23443
23444`tls_gd'
23445     This modifier is used to load the offset of the GOT entry of the
23446     symbol's TLS descriptor, to be used for general-dynamic TLS
23447     accesses.
23448
23449`tls_gd_lo16'
23450     This modifier is used to load the sign-extended low 16 bits of the
23451     offset of the GOT entry of the symbol's TLS descriptor, to be used
23452     for general dynamic TLS accesses.
23453
23454`tls_gd_hi16'
23455     This modifier is used to load the sign-extended high 16 bits of the
23456     offset of the GOT entry of the symbol's TLS descriptor, to be used
23457     for general dynamic TLS accesses.
23458
23459`tls_gd_ha16'
23460     This modifier is like `tls_gd_hi16', but it adds one to the value
23461     if `tls_gd_lo16' of the input value is negative.
23462
23463`tls_ie'
23464     This modifier is used to load the offset of the GOT entry
23465     containing the offset of the symbol's address from the TCB, to be
23466     used for initial-exec TLS accesses.
23467
23468`tls_ie_lo16'
23469     This modifier is used to load the low 16 bits of the offset of the
23470     GOT entry containing the offset of the symbol's address from the
23471     TCB, to be used for initial-exec TLS accesses.
23472
23473`tls_ie_hi16'
23474     This modifier is used to load the high 16 bits of the offset of the
23475     GOT entry containing the offset of the symbol's address from the
23476     TCB, to be used for initial-exec TLS accesses.
23477
23478`tls_ie_ha16'
23479     This modifier is like `tls_ie_hi16', but it adds one to the value
23480     if `tls_ie_lo16' of the input value is negative.
23481
23482`tls_le'
23483     This modifier is used to load the offset of the symbol's address
23484     from the TCB, to be used for local-exec TLS accesses.
23485
23486`tls_le_lo16'
23487     This modifier is used to load the low 16 bits of the offset of the
23488     symbol's address from the TCB, to be used for local-exec TLS
23489     accesses.
23490
23491`tls_le_hi16'
23492     This modifier is used to load the high 16 bits of the offset of the
23493     symbol's address from the TCB, to be used for local-exec TLS
23494     accesses.
23495
23496`tls_le_ha16'
23497     This modifier is like `tls_le_hi16', but it adds one to the value
23498     if `tls_le_lo16' of the input value is negative.
23499
23500`tls_gd_call'
23501     This modifier is used to tag an instruction as the "call" part of a
23502     calling sequence for a TLS GD reference of its operand.
23503
23504`tls_gd_add'
23505     This modifier is used to tag an instruction as the "add" part of a
23506     calling sequence for a TLS GD reference of its operand.
23507
23508`tls_ie_load'
23509     This modifier is used to tag an instruction as the "load" part of a
23510     calling sequence for a TLS IE reference of its operand.
23511
23512
23513
23514File: as.info,  Node: TILEPro Directives,  Prev: TILEPro Syntax,  Up: TILEPro-Dependent
23515
235169.48.3 TILEPro Directives
23517-------------------------
23518
23519`.align EXPRESSION [, EXPRESSION]'
23520     This is the generic .ALIGN directive.  The first argument is the
23521     requested alignment in bytes.
23522
23523`.allow_suspicious_bundles'
23524     Turns on error checking for combinations of instructions in a
23525     bundle that probably indicate a programming error.  This is on by
23526     default.
23527
23528`.no_allow_suspicious_bundles'
23529     Turns off error checking for combinations of instructions in a
23530     bundle that probably indicate a programming error.
23531
23532`.require_canonical_reg_names'
23533     Require that canonical register names be used, and emit a warning
23534     if the numeric names are used.  This is on by default.
23535
23536`.no_require_canonical_reg_names'
23537     Permit the use of numeric names for registers that have canonical
23538     names.
23539
23540
23541
23542File: as.info,  Node: V850-Dependent,  Next: Vax-Dependent,  Prev: TILEPro-Dependent,  Up: Machine Dependencies
23543
235449.49 v850 Dependent Features
23545============================
23546
23547* Menu:
23548
23549* V850 Options::              Options
23550* V850 Syntax::               Syntax
23551* V850 Floating Point::       Floating Point
23552* V850 Directives::           V850 Machine Directives
23553* V850 Opcodes::              Opcodes
23554
23555
23556File: as.info,  Node: V850 Options,  Next: V850 Syntax,  Up: V850-Dependent
23557
235589.49.1 Options
23559--------------
23560
23561`as' supports the following additional command-line options for the
23562V850 processor family:
23563
23564`-wsigned_overflow'
23565     Causes warnings to be produced when signed immediate values
23566     overflow the space available for then within their opcodes.  By
23567     default this option is disabled as it is possible to receive
23568     spurious warnings due to using exact bit patterns as immediate
23569     constants.
23570
23571`-wunsigned_overflow'
23572     Causes warnings to be produced when unsigned immediate values
23573     overflow the space available for then within their opcodes.  By
23574     default this option is disabled as it is possible to receive
23575     spurious warnings due to using exact bit patterns as immediate
23576     constants.
23577
23578`-mv850'
23579     Specifies that the assembled code should be marked as being
23580     targeted at the V850 processor.  This allows the linker to detect
23581     attempts to link such code with code assembled for other
23582     processors.
23583
23584`-mv850e'
23585     Specifies that the assembled code should be marked as being
23586     targeted at the V850E processor.  This allows the linker to detect
23587     attempts to link such code with code assembled for other
23588     processors.
23589
23590`-mv850e1'
23591     Specifies that the assembled code should be marked as being
23592     targeted at the V850E1 processor.  This allows the linker to
23593     detect attempts to link such code with code assembled for other
23594     processors.
23595
23596`-mv850any'
23597     Specifies that the assembled code should be marked as being
23598     targeted at the V850 processor but support instructions that are
23599     specific to the extended variants of the process.  This allows the
23600     production of binaries that contain target specific code, but
23601     which are also intended to be used in a generic fashion.  For
23602     example libgcc.a contains generic routines used by the code
23603     produced by GCC for all versions of the v850 architecture,
23604     together with support routines only used by the V850E architecture.
23605
23606`-mv850e2'
23607     Specifies that the assembled code should be marked as being
23608     targeted at the V850E2 processor.  This allows the linker to
23609     detect attempts to link such code with code assembled for other
23610     processors.
23611
23612`-mv850e2v3'
23613     Specifies that the assembled code should be marked as being
23614     targeted at the V850E2V3 processor.  This allows the linker to
23615     detect attempts to link such code with code assembled for other
23616     processors.
23617
23618`-mv850e2v4'
23619     This is an alias for `-mv850e3v5'.
23620
23621`-mv850e3v5'
23622     Specifies that the assembled code should be marked as being
23623     targeted at the V850E3V5 processor.  This allows the linker to
23624     detect attempts to link such code with code assembled for other
23625     processors.
23626
23627`-mrelax'
23628     Enables relaxation.  This allows the .longcall and .longjump pseudo
23629     ops to be used in the assembler source code.  These ops label
23630     sections of code which are either a long function call or a long
23631     branch.  The assembler will then flag these sections of code and
23632     the linker will attempt to relax them.
23633
23634`-mgcc-abi'
23635     Marks the generated object file as supporting the old GCC ABI.
23636
23637`-mrh850-abi'
23638     Marks the generated object file as supporting the RH850 ABI.  This
23639     is the default.
23640
23641`-m8byte-align'
23642     Marks the generated object file as supporting a maximum 64-bits of
23643     alignment for variables defined in the source code.
23644
23645`-m4byte-align'
23646     Marks the generated object file as supporting a maximum 32-bits of
23647     alignment for variables defined in the source code.  This is the
23648     default.
23649
23650`-msoft-float'
23651     Marks the generated object file as not using any floating point
23652     instructions - and hence can be linked with other V850 binaries
23653     that do or do not use floating point.  This is the default for
23654     binaries for architectures earlier than the `e2v3'.
23655
23656`-mhard-float'
23657     Marks the generated object file as one that uses floating point
23658     instructions - and hence can only be linked with other V850
23659     binaries that use the same kind of floating point instructions, or
23660     with binaries that do not use floating point at all.  This is the
23661     default for binaries the `e2v3' and later architectures.
23662
23663
23664
23665File: as.info,  Node: V850 Syntax,  Next: V850 Floating Point,  Prev: V850 Options,  Up: V850-Dependent
23666
236679.49.2 Syntax
23668-------------
23669
23670* Menu:
23671
23672* V850-Chars::                Special Characters
23673* V850-Regs::                 Register Names
23674
23675
23676File: as.info,  Node: V850-Chars,  Next: V850-Regs,  Up: V850 Syntax
23677
236789.49.2.1 Special Characters
23679...........................
23680
23681`#' is the line comment character.  If a `#' appears as the first
23682character of a line, the whole line is treated as a comment, but in
23683this case the line can also be a logical line number directive (*note
23684Comments::) or a preprocessor control command (*note Preprocessing::).
23685
23686   Two dashes (`--') can also be used to start a line comment.
23687
23688   The `;' character can be used to separate statements on the same
23689line.
23690
23691
23692File: as.info,  Node: V850-Regs,  Prev: V850-Chars,  Up: V850 Syntax
23693
236949.49.2.2 Register Names
23695.......................
23696
23697`as' supports the following names for registers:
23698`general register 0'
23699     r0, zero
23700
23701`general register 1'
23702     r1
23703
23704`general register 2'
23705     r2, hp
23706
23707`general register 3'
23708     r3, sp
23709
23710`general register 4'
23711     r4, gp
23712
23713`general register 5'
23714     r5, tp
23715
23716`general register 6'
23717     r6
23718
23719`general register 7'
23720     r7
23721
23722`general register 8'
23723     r8
23724
23725`general register 9'
23726     r9
23727
23728`general register 10'
23729     r10
23730
23731`general register 11'
23732     r11
23733
23734`general register 12'
23735     r12
23736
23737`general register 13'
23738     r13
23739
23740`general register 14'
23741     r14
23742
23743`general register 15'
23744     r15
23745
23746`general register 16'
23747     r16
23748
23749`general register 17'
23750     r17
23751
23752`general register 18'
23753     r18
23754
23755`general register 19'
23756     r19
23757
23758`general register 20'
23759     r20
23760
23761`general register 21'
23762     r21
23763
23764`general register 22'
23765     r22
23766
23767`general register 23'
23768     r23
23769
23770`general register 24'
23771     r24
23772
23773`general register 25'
23774     r25
23775
23776`general register 26'
23777     r26
23778
23779`general register 27'
23780     r27
23781
23782`general register 28'
23783     r28
23784
23785`general register 29'
23786     r29
23787
23788`general register 30'
23789     r30, ep
23790
23791`general register 31'
23792     r31, lp
23793
23794`system register 0'
23795     eipc
23796
23797`system register 1'
23798     eipsw
23799
23800`system register 2'
23801     fepc
23802
23803`system register 3'
23804     fepsw
23805
23806`system register 4'
23807     ecr
23808
23809`system register 5'
23810     psw
23811
23812`system register 16'
23813     ctpc
23814
23815`system register 17'
23816     ctpsw
23817
23818`system register 18'
23819     dbpc
23820
23821`system register 19'
23822     dbpsw
23823
23824`system register 20'
23825     ctbp
23826
23827
23828File: as.info,  Node: V850 Floating Point,  Next: V850 Directives,  Prev: V850 Syntax,  Up: V850-Dependent
23829
238309.49.3 Floating Point
23831---------------------
23832
23833The V850 family uses IEEE floating-point numbers.
23834
23835
23836File: as.info,  Node: V850 Directives,  Next: V850 Opcodes,  Prev: V850 Floating Point,  Up: V850-Dependent
23837
238389.49.4 V850 Machine Directives
23839------------------------------
23840
23841`.offset <EXPRESSION>'
23842     Moves the offset into the current section to the specified amount.
23843
23844`.section "name", <type>'
23845     This is an extension to the standard .section directive.  It sets
23846     the current section to be <type> and creates an alias for this
23847     section called "name".
23848
23849`.v850'
23850     Specifies that the assembled code should be marked as being
23851     targeted at the V850 processor.  This allows the linker to detect
23852     attempts to link such code with code assembled for other
23853     processors.
23854
23855`.v850e'
23856     Specifies that the assembled code should be marked as being
23857     targeted at the V850E processor.  This allows the linker to detect
23858     attempts to link such code with code assembled for other
23859     processors.
23860
23861`.v850e1'
23862     Specifies that the assembled code should be marked as being
23863     targeted at the V850E1 processor.  This allows the linker to
23864     detect attempts to link such code with code assembled for other
23865     processors.
23866
23867`.v850e2'
23868     Specifies that the assembled code should be marked as being
23869     targeted at the V850E2 processor.  This allows the linker to
23870     detect attempts to link such code with code assembled for other
23871     processors.
23872
23873`.v850e2v3'
23874     Specifies that the assembled code should be marked as being
23875     targeted at the V850E2V3 processor.  This allows the linker to
23876     detect attempts to link such code with code assembled for other
23877     processors.
23878
23879`.v850e2v4'
23880     Specifies that the assembled code should be marked as being
23881     targeted at the V850E3V5 processor.  This allows the linker to
23882     detect attempts to link such code with code assembled for other
23883     processors.
23884
23885`.v850e3v5'
23886     Specifies that the assembled code should be marked as being
23887     targeted at the V850E3V5 processor.  This allows the linker to
23888     detect attempts to link such code with code assembled for other
23889     processors.
23890
23891
23892
23893File: as.info,  Node: V850 Opcodes,  Prev: V850 Directives,  Up: V850-Dependent
23894
238959.49.5 Opcodes
23896--------------
23897
23898`as' implements all the standard V850 opcodes.
23899
23900   `as' also implements the following pseudo ops:
23901
23902`hi0()'
23903     Computes the higher 16 bits of the given expression and stores it
23904     into the immediate operand field of the given instruction.  For
23905     example:
23906
23907     `mulhi hi0(here - there), r5, r6'
23908
23909     computes the difference between the address of labels 'here' and
23910     'there', takes the upper 16 bits of this difference, shifts it
23911     down 16 bits and then multiplies it by the lower 16 bits in
23912     register 5, putting the result into register 6.
23913
23914`lo()'
23915     Computes the lower 16 bits of the given expression and stores it
23916     into the immediate operand field of the given instruction.  For
23917     example:
23918
23919     `addi lo(here - there), r5, r6'
23920
23921     computes the difference between the address of labels 'here' and
23922     'there', takes the lower 16 bits of this difference and adds it to
23923     register 5, putting the result into register 6.
23924
23925`hi()'
23926     Computes the higher 16 bits of the given expression and then adds
23927     the value of the most significant bit of the lower 16 bits of the
23928     expression and stores the result into the immediate operand field
23929     of the given instruction.  For example the following code can be
23930     used to compute the address of the label 'here' and store it into
23931     register 6:
23932
23933     `movhi hi(here), r0, r6'     `movea lo(here), r6, r6'
23934
23935     The reason for this special behaviour is that movea performs a sign
23936     extension on its immediate operand.  So for example if the address
23937     of 'here' was 0xFFFFFFFF then without the special behaviour of the
23938     hi() pseudo-op the movhi instruction would put 0xFFFF0000 into r6,
23939     then the movea instruction would takes its immediate operand,
23940     0xFFFF, sign extend it to 32 bits, 0xFFFFFFFF, and then add it
23941     into r6 giving 0xFFFEFFFF which is wrong (the fifth nibble is E).
23942     With the hi() pseudo op adding in the top bit of the lo() pseudo
23943     op, the movhi instruction actually stores 0 into r6 (0xFFFF + 1 =
23944     0x0000), so that the movea instruction stores 0xFFFFFFFF into r6 -
23945     the right value.
23946
23947`hilo()'
23948     Computes the 32 bit value of the given expression and stores it
23949     into the immediate operand field of the given instruction (which
23950     must be a mov instruction).  For example:
23951
23952     `mov hilo(here), r6'
23953
23954     computes the absolute address of label 'here' and puts the result
23955     into register 6.
23956
23957`sdaoff()'
23958     Computes the offset of the named variable from the start of the
23959     Small Data Area (whose address is held in register 4, the GP
23960     register) and stores the result as a 16 bit signed value in the
23961     immediate operand field of the given instruction.  For example:
23962
23963     `ld.w sdaoff(_a_variable)[gp],r6'
23964
23965     loads the contents of the location pointed to by the label
23966     '_a_variable' into register 6, provided that the label is located
23967     somewhere within +/- 32K of the address held in the GP register.
23968     [Note the linker assumes that the GP register contains a fixed
23969     address set to the address of the label called '__gp'.  This can
23970     either be set up automatically by the linker, or specifically set
23971     by using the `--defsym __gp=<value>' command-line option].
23972
23973`tdaoff()'
23974     Computes the offset of the named variable from the start of the
23975     Tiny Data Area (whose address is held in register 30, the EP
23976     register) and stores the result as a 4,5, 7 or 8 bit unsigned
23977     value in the immediate operand field of the given instruction.
23978     For example:
23979
23980     `sld.w tdaoff(_a_variable)[ep],r6'
23981
23982     loads the contents of the location pointed to by the label
23983     '_a_variable' into register 6, provided that the label is located
23984     somewhere within +256 bytes of the address held in the EP
23985     register.  [Note the linker assumes that the EP register contains
23986     a fixed address set to the address of the label called '__ep'.
23987     This can either be set up automatically by the linker, or
23988     specifically set by using the `--defsym __ep=<value>' command-line
23989     option].
23990
23991`zdaoff()'
23992     Computes the offset of the named variable from address 0 and
23993     stores the result as a 16 bit signed value in the immediate
23994     operand field of the given instruction.  For example:
23995
23996     `movea zdaoff(_a_variable),zero,r6'
23997
23998     puts the address of the label '_a_variable' into register 6,
23999     assuming that the label is somewhere within the first 32K of
24000     memory.  (Strictly speaking it also possible to access the last
24001     32K of memory as well, as the offsets are signed).
24002
24003`ctoff()'
24004     Computes the offset of the named variable from the start of the
24005     Call Table Area (whose address is held in system register 20, the
24006     CTBP register) and stores the result a 6 or 16 bit unsigned value
24007     in the immediate field of then given instruction or piece of data.
24008     For example:
24009
24010     `callt ctoff(table_func1)'
24011
24012     will put the call the function whose address is held in the call
24013     table at the location labeled 'table_func1'.
24014
24015`.longcall `name''
24016     Indicates that the following sequence of instructions is a long
24017     call to function `name'.  The linker will attempt to shorten this
24018     call sequence if `name' is within a 22bit offset of the call.  Only
24019     valid if the `-mrelax' command-line switch has been enabled.
24020
24021`.longjump `name''
24022     Indicates that the following sequence of instructions is a long
24023     jump to label `name'.  The linker will attempt to shorten this code
24024     sequence if `name' is within a 22bit offset of the jump.  Only
24025     valid if the `-mrelax' command-line switch has been enabled.
24026
24027
24028   For information on the V850 instruction set, see `V850 Family
2402932-/16-Bit single-Chip Microcontroller Architecture Manual' from NEC.
24030Ltd.
24031
24032
24033File: as.info,  Node: Vax-Dependent,  Next: Visium-Dependent,  Prev: V850-Dependent,  Up: Machine Dependencies
24034
240359.50 VAX Dependent Features
24036===========================
24037
24038* Menu:
24039
24040* VAX-Opts::                    VAX Command-Line Options
24041* VAX-float::                   VAX Floating Point
24042* VAX-directives::              Vax Machine Directives
24043* VAX-opcodes::                 VAX Opcodes
24044* VAX-branch::                  VAX Branch Improvement
24045* VAX-operands::                VAX Operands
24046* VAX-no::                      Not Supported on VAX
24047* VAX-Syntax::                  VAX Syntax
24048
24049
24050File: as.info,  Node: VAX-Opts,  Next: VAX-float,  Up: Vax-Dependent
24051
240529.50.1 VAX Command-Line Options
24053-------------------------------
24054
24055The Vax version of `as' accepts any of the following options, gives a
24056warning message that the option was ignored and proceeds.  These
24057options are for compatibility with scripts designed for other people's
24058assemblers.
24059
24060``-D' (Debug)'
24061``-S' (Symbol Table)'
24062``-T' (Token Trace)'
24063     These are obsolete options used to debug old assemblers.
24064
24065``-d' (Displacement size for JUMPs)'
24066     This option expects a number following the `-d'.  Like options
24067     that expect filenames, the number may immediately follow the `-d'
24068     (old standard) or constitute the whole of the command-line
24069     argument that follows `-d' (GNU standard).
24070
24071``-V' (Virtualize Interpass Temporary File)'
24072     Some other assemblers use a temporary file.  This option commanded
24073     them to keep the information in active memory rather than in a
24074     disk file.  `as' always does this, so this option is redundant.
24075
24076``-J' (JUMPify Longer Branches)'
24077     Many 32-bit computers permit a variety of branch instructions to
24078     do the same job.  Some of these instructions are short (and fast)
24079     but have a limited range; others are long (and slow) but can
24080     branch anywhere in virtual memory.  Often there are 3 flavors of
24081     branch: short, medium and long.  Some other assemblers would emit
24082     short and medium branches, unless told by this option to emit
24083     short and long branches.
24084
24085``-t' (Temporary File Directory)'
24086     Some other assemblers may use a temporary file, and this option
24087     takes a filename being the directory to site the temporary file.
24088     Since `as' does not use a temporary disk file, this option makes
24089     no difference.  `-t' needs exactly one filename.
24090
24091   The Vax version of the assembler accepts additional options when
24092compiled for VMS:
24093
24094`-h N'
24095     External symbol or section (used for global variables) names are
24096     not case sensitive on VAX/VMS and always mapped to upper case.
24097     This is contrary to the C language definition which explicitly
24098     distinguishes upper and lower case.  To implement a standard
24099     conforming C compiler, names must be changed (mapped) to preserve
24100     the case information.  The default mapping is to convert all lower
24101     case characters to uppercase and adding an underscore followed by
24102     a 6 digit hex value, representing a 24 digit binary value.  The
24103     one digits in the binary value represent which characters are
24104     uppercase in the original symbol name.
24105
24106     The `-h N' option determines how we map names.  This takes several
24107     values.  No `-h' switch at all allows case hacking as described
24108     above.  A value of zero (`-h0') implies names should be upper
24109     case, and inhibits the case hack.  A value of 2 (`-h2') implies
24110     names should be all lower case, with no case hack.  A value of 3
24111     (`-h3') implies that case should be preserved.  The value 1 is
24112     unused.  The `-H' option directs `as' to display every mapped
24113     symbol during assembly.
24114
24115     Symbols whose names include a dollar sign `$' are exceptions to the
24116     general name mapping.  These symbols are normally only used to
24117     reference VMS library names.  Such symbols are always mapped to
24118     upper case.
24119
24120`-+'
24121     The `-+' option causes `as' to truncate any symbol name larger
24122     than 31 characters.  The `-+' option also prevents some code
24123     following the `_main' symbol normally added to make the object
24124     file compatible with Vax-11 "C".
24125
24126`-1'
24127     This option is ignored for backward compatibility with `as'
24128     version 1.x.
24129
24130`-H'
24131     The `-H' option causes `as' to print every symbol which was
24132     changed by case mapping.
24133
24134
24135File: as.info,  Node: VAX-float,  Next: VAX-directives,  Prev: VAX-Opts,  Up: Vax-Dependent
24136
241379.50.2 VAX Floating Point
24138-------------------------
24139
24140Conversion of flonums to floating point is correct, and compatible with
24141previous assemblers.  Rounding is towards zero if the remainder is
24142exactly half the least significant bit.
24143
24144   `D', `F', `G' and `H' floating point formats are understood.
24145
24146   Immediate floating literals (_e.g._ `S`$6.9') are rendered
24147correctly.  Again, rounding is towards zero in the boundary case.
24148
24149   The `.float' directive produces `f' format numbers.  The `.double'
24150directive produces `d' format numbers.
24151
24152
24153File: as.info,  Node: VAX-directives,  Next: VAX-opcodes,  Prev: VAX-float,  Up: Vax-Dependent
24154
241559.50.3 Vax Machine Directives
24156-----------------------------
24157
24158The Vax version of the assembler supports four directives for
24159generating Vax floating point constants.  They are described in the
24160table below.
24161
24162`.dfloat'
24163     This expects zero or more flonums, separated by commas, and
24164     assembles Vax `d' format 64-bit floating point constants.
24165
24166`.ffloat'
24167     This expects zero or more flonums, separated by commas, and
24168     assembles Vax `f' format 32-bit floating point constants.
24169
24170`.gfloat'
24171     This expects zero or more flonums, separated by commas, and
24172     assembles Vax `g' format 64-bit floating point constants.
24173
24174`.hfloat'
24175     This expects zero or more flonums, separated by commas, and
24176     assembles Vax `h' format 128-bit floating point constants.
24177
24178
24179
24180File: as.info,  Node: VAX-opcodes,  Next: VAX-branch,  Prev: VAX-directives,  Up: Vax-Dependent
24181
241829.50.4 VAX Opcodes
24183------------------
24184
24185All DEC mnemonics are supported.  Beware that `case...' instructions
24186have exactly 3 operands.  The dispatch table that follows the `case...'
24187instruction should be made with `.word' statements.  This is compatible
24188with all unix assemblers we know of.
24189
24190
24191File: as.info,  Node: VAX-branch,  Next: VAX-operands,  Prev: VAX-opcodes,  Up: Vax-Dependent
24192
241939.50.5 VAX Branch Improvement
24194-----------------------------
24195
24196Certain pseudo opcodes are permitted.  They are for branch
24197instructions.  They expand to the shortest branch instruction that
24198reaches the target.  Generally these mnemonics are made by substituting
24199`j' for `b' at the start of a DEC mnemonic.  This feature is included
24200both for compatibility and to help compilers.  If you do not need this
24201feature, avoid these opcodes.  Here are the mnemonics, and the code
24202they can expand into.
24203
24204`jbsb'
24205     `Jsb' is already an instruction mnemonic, so we chose `jbsb'.
24206    (byte displacement)
24207          `bsbb ...'
24208
24209    (word displacement)
24210          `bsbw ...'
24211
24212    (long displacement)
24213          `jsb ...'
24214
24215`jbr'
24216`jr'
24217     Unconditional branch.
24218    (byte displacement)
24219          `brb ...'
24220
24221    (word displacement)
24222          `brw ...'
24223
24224    (long displacement)
24225          `jmp ...'
24226
24227`jCOND'
24228     COND may be any one of the conditional branches `neq', `nequ',
24229     `eql', `eqlu', `gtr', `geq', `lss', `gtru', `lequ', `vc', `vs',
24230     `gequ', `cc', `lssu', `cs'.  COND may also be one of the bit tests
24231     `bs', `bc', `bss', `bcs', `bsc', `bcc', `bssi', `bcci', `lbs',
24232     `lbc'.  NOTCOND is the opposite condition to COND.
24233    (byte displacement)
24234          `bCOND ...'
24235
24236    (word displacement)
24237          `bNOTCOND foo ; brw ... ; foo:'
24238
24239    (long displacement)
24240          `bNOTCOND foo ; jmp ... ; foo:'
24241
24242`jacbX'
24243     X may be one of `b d f g h l w'.
24244    (word displacement)
24245          `OPCODE ...'
24246
24247    (long displacement)
24248               OPCODE ..., foo ;
24249               brb bar ;
24250               foo: jmp ... ;
24251               bar:
24252
24253`jaobYYY'
24254     YYY may be one of `lss leq'.
24255
24256`jsobZZZ'
24257     ZZZ may be one of `geq gtr'.
24258    (byte displacement)
24259          `OPCODE ...'
24260
24261    (word displacement)
24262               OPCODE ..., foo ;
24263               brb bar ;
24264               foo: brw DESTINATION ;
24265               bar:
24266
24267    (long displacement)
24268               OPCODE ..., foo ;
24269               brb bar ;
24270               foo: jmp DESTINATION ;
24271               bar:
24272
24273`aobleq'
24274`aoblss'
24275`sobgeq'
24276`sobgtr'
24277
24278    (byte displacement)
24279          `OPCODE ...'
24280
24281    (word displacement)
24282               OPCODE ..., foo ;
24283               brb bar ;
24284               foo: brw DESTINATION ;
24285               bar:
24286
24287    (long displacement)
24288               OPCODE ..., foo ;
24289               brb bar ;
24290               foo: jmp DESTINATION ;
24291               bar:
24292
24293
24294File: as.info,  Node: VAX-operands,  Next: VAX-no,  Prev: VAX-branch,  Up: Vax-Dependent
24295
242969.50.6 VAX Operands
24297-------------------
24298
24299The immediate character is `$' for Unix compatibility, not `#' as DEC
24300writes it.
24301
24302   The indirect character is `*' for Unix compatibility, not `@' as DEC
24303writes it.
24304
24305   The displacement sizing character is ``' (an accent grave) for Unix
24306compatibility, not `^' as DEC writes it.  The letter preceding ``' may
24307have either case.  `G' is not understood, but all other letters (`b i l
24308s w') are understood.
24309
24310   Register names understood are `r0 r1 r2 ... r15 ap fp sp pc'.  Upper
24311and lower case letters are equivalent.
24312
24313   For instance
24314     tstb *w`$4(r5)
24315
24316   Any expression is permitted in an operand.  Operands are comma
24317separated.
24318
24319
24320File: as.info,  Node: VAX-no,  Next: VAX-Syntax,  Prev: VAX-operands,  Up: Vax-Dependent
24321
243229.50.7 Not Supported on VAX
24323---------------------------
24324
24325Vax bit fields can not be assembled with `as'.  Someone can add the
24326required code if they really need it.
24327
24328
24329File: as.info,  Node: VAX-Syntax,  Prev: VAX-no,  Up: Vax-Dependent
24330
243319.50.8 VAX Syntax
24332-----------------
24333
24334* Menu:
24335
24336* VAX-Chars::                Special Characters
24337
24338
24339File: as.info,  Node: VAX-Chars,  Up: VAX-Syntax
24340
243419.50.8.1 Special Characters
24342...........................
24343
24344The presence of a `#' appearing anywhere on a line indicates the start
24345of a comment that extends to the end of that line.
24346
24347   If a `#' appears as the first character of a line then the whole
24348line is treated as a comment, but in this case the line can also be a
24349logical line number directive (*note Comments::) or a preprocessor
24350control command (*note Preprocessing::).
24351
24352   The `;' character can be used to separate statements on the same
24353line.
24354
24355
24356File: as.info,  Node: Visium-Dependent,  Next: WebAssembly-Dependent,  Prev: Vax-Dependent,  Up: Machine Dependencies
24357
243589.51 Visium Dependent Features
24359==============================
24360
24361* Menu:
24362
24363* Visium Options::              Options
24364* Visium Syntax::               Syntax
24365* Visium Opcodes::              Opcodes
24366
24367
24368File: as.info,  Node: Visium Options,  Next: Visium Syntax,  Up: Visium-Dependent
24369
243709.51.1 Options
24371--------------
24372
24373The Visium assembler implements one machine-specific option:
24374
24375`-mtune=ARCH'
24376     This option specifies the target architecture.  If an attempt is
24377     made to assemble an instruction that will not execute on the
24378     target architecture, the assembler will issue an error message.
24379
24380     The following names are recognized: `mcm24' `mcm' `gr5' `gr6'
24381
24382
24383File: as.info,  Node: Visium Syntax,  Next: Visium Opcodes,  Prev: Visium Options,  Up: Visium-Dependent
24384
243859.51.2 Syntax
24386-------------
24387
24388* Menu:
24389
24390* Visium Characters::           Special Characters
24391* Visium Registers::            Register Names
24392
24393
24394File: as.info,  Node: Visium Characters,  Next: Visium Registers,  Up: Visium Syntax
24395
243969.51.2.1 Special Characters
24397...........................
24398
24399Line comments are introduced either by the `!' character or by the `;'
24400character appearing anywhere on a line.
24401
24402   A hash character (`#') as the first character on a line also marks
24403the start of a line comment, but in this case it could also be a
24404logical line number directive (*note Comments::) or a preprocessor
24405control command (*note Preprocessing::).
24406
24407   The Visium assembler does not currently support a line separator
24408character.
24409
24410
24411File: as.info,  Node: Visium Registers,  Prev: Visium Characters,  Up: Visium Syntax
24412
244139.51.2.2 Register Names
24414.......................
24415
24416Registers can be specified either by using their canonical mnemonic
24417names or by using their alias if they have one, for example `sp'.
24418
24419
24420File: as.info,  Node: Visium Opcodes,  Prev: Visium Syntax,  Up: Visium-Dependent
24421
244229.51.3 Opcodes
24423--------------
24424
24425All the standard opcodes of the architecture are implemented, along
24426with the following three pseudo-instructions: `cmp', `cmpc', `move'.
24427
24428   In addition, the following two illegal opcodes are implemented and
24429used by the simulation:
24430
24431     stop    5-bit immediate, SourceA
24432     trace   5-bit immediate, SourceA
24433
24434
24435File: as.info,  Node: WebAssembly-Dependent,  Next: XGATE-Dependent,  Prev: Visium-Dependent,  Up: Machine Dependencies
24436
244379.52 WebAssembly Dependent Features
24438===================================
24439
24440* Menu:
24441
24442* WebAssembly-Notes::                Notes
24443* WebAssembly-Syntax::               Syntax
24444* WebAssembly-Floating-Point::       Floating Point
24445* WebAssembly-Opcodes::              Opcodes
24446* WebAssembly-module-layout::        Module Layout
24447
24448
24449File: as.info,  Node: WebAssembly-Notes,  Next: WebAssembly-Syntax,  Up: WebAssembly-Dependent
24450
244519.52.1 Notes
24452------------
24453
24454While WebAssembly provides its own module format for executables, this
24455documentation describes how to use `as' to produce intermediate ELF
24456object format files.
24457
24458
24459File: as.info,  Node: WebAssembly-Syntax,  Next: WebAssembly-Floating-Point,  Prev: WebAssembly-Notes,  Up: WebAssembly-Dependent
24460
244619.52.2 Syntax
24462-------------
24463
24464The assembler syntax directly encodes sequences of opcodes as defined
24465in the WebAssembly binary encoding specification at
24466https://github.com/webassembly/spec/BinaryEncoding.md.  Structured
24467sexp-style expressions are not supported as input.
24468
24469* Menu:
24470
24471* WebAssembly-Chars::                Special Characters
24472* WebAssembly-Relocs::               Relocations
24473* WebAssembly-Signatures::           Signatures
24474
24475
24476File: as.info,  Node: WebAssembly-Chars,  Next: WebAssembly-Relocs,  Up: WebAssembly-Syntax
24477
244789.52.2.1 Special Characters
24479...........................
24480
24481`#' and `;' are the line comment characters.  Note that if `#' is the
24482first character on a line then it can also be a logical line number
24483directive (*note Comments::) or a preprocessor control command (*note
24484Preprocessing::).
24485
24486
24487File: as.info,  Node: WebAssembly-Relocs,  Next: WebAssembly-Signatures,  Prev: WebAssembly-Chars,  Up: WebAssembly-Syntax
24488
244899.52.2.2 Relocations
24490....................
24491
24492Special relocations are available by using the `@PLT', `@GOT', or
24493`@GOT' suffixes after a constant expression, which correspond to the
24494R_ASMJS_LEB128_PLT, R_ASMJS_LEB128_GOT, and R_ASMJS_LEB128_GOT_CODE
24495relocations, respectively.
24496
24497   The `@PLT' suffix is followed by a symbol name in braces; the symbol
24498value is used to determine the function signature for which a PLT stub
24499is generated. Currently, the symbol _name_ is parsed from its last `F'
24500character to determine the argument count of the function, which is
24501also necessary for generating a PLT stub.
24502
24503
24504File: as.info,  Node: WebAssembly-Signatures,  Prev: WebAssembly-Relocs,  Up: WebAssembly-Syntax
24505
245069.52.2.3 Signatures
24507...................
24508
24509Function signatures are specified with the `signature' pseudo-opcode,
24510followed by a simple function signature imitating a C++-mangled
24511function type: `F' followed by an optional `v', then a sequence of `i',
24512`l', `f', and `d' characters to mark i32, i64, f32, and f64 parameters,
24513respectively; followed by a final `E' to mark the end of the function
24514signature.
24515
24516
24517File: as.info,  Node: WebAssembly-Floating-Point,  Next: WebAssembly-Opcodes,  Prev: WebAssembly-Syntax,  Up: WebAssembly-Dependent
24518
245199.52.3 Floating Point
24520---------------------
24521
24522WebAssembly uses little-endian IEEE floating-point numbers.
24523
24524
24525File: as.info,  Node: WebAssembly-Opcodes,  Next: WebAssembly-module-layout,  Prev: WebAssembly-Floating-Point,  Up: WebAssembly-Dependent
24526
245279.52.4 Regular Opcodes
24528----------------------
24529
24530Ordinary instructions are encoded with the WebAssembly mnemonics as
24531listed at:
24532`https://github.com/WebAssembly/design/blob/master/BinaryEncoding.md'.
24533
24534   Opcodes are written directly in the order in which they are encoded,
24535without going through an intermediate sexp-style expression as in the
24536`was' format.
24537
24538   For "typed" opcodes (block, if, etc.), the type of the block is
24539specified in square brackets following the opcode: `if[i]', `if[]'.
24540
24541
24542File: as.info,  Node: WebAssembly-module-layout,  Prev: WebAssembly-Opcodes,  Up: WebAssembly-Dependent
24543
245449.52.5 WebAssembly Module Layout
24545--------------------------------
24546
24547`as' will only produce ELF output, not a valid WebAssembly module. It
24548is possible to make `as' produce output in a single ELF section which
24549becomes a valid WebAssembly module, but a linker script to do so may be
24550preferable, as it doesn't require running the entire module through the
24551assembler at once.
24552
24553
24554File: as.info,  Node: XGATE-Dependent,  Next: XSTORMY16-Dependent,  Prev: WebAssembly-Dependent,  Up: Machine Dependencies
24555
245569.53 XGATE Dependent Features
24557=============================
24558
24559* Menu:
24560
24561* XGATE-Opts::                   XGATE Options
24562* XGATE-Syntax::                 Syntax
24563* XGATE-Directives::             Assembler Directives
24564* XGATE-Float::                  Floating Point
24565* XGATE-opcodes::                Opcodes
24566
24567
24568File: as.info,  Node: XGATE-Opts,  Next: XGATE-Syntax,  Up: XGATE-Dependent
24569
245709.53.1 XGATE Options
24571--------------------
24572
24573The Freescale XGATE version of `as' has a few machine dependent options.
24574
24575`-mshort'
24576     This option controls the ABI and indicates to use a 16-bit integer
24577     ABI.  It has no effect on the assembled instructions.  This is the
24578     default.
24579
24580`-mlong'
24581     This option controls the ABI and indicates to use a 32-bit integer
24582     ABI.
24583
24584`-mshort-double'
24585     This option controls the ABI and indicates to use a 32-bit float
24586     ABI.  This is the default.
24587
24588`-mlong-double'
24589     This option controls the ABI and indicates to use a 64-bit float
24590     ABI.
24591
24592`--print-insn-syntax'
24593     You can use the `--print-insn-syntax' option to obtain the syntax
24594     description of the instruction when an error is detected.
24595
24596`--print-opcodes'
24597     The `--print-opcodes' option prints the list of all the
24598     instructions with their syntax. Once the list is printed `as'
24599     exits.
24600
24601
24602
24603File: as.info,  Node: XGATE-Syntax,  Next: XGATE-Directives,  Prev: XGATE-Opts,  Up: XGATE-Dependent
24604
246059.53.2 Syntax
24606-------------
24607
24608In XGATE RISC syntax, the instruction name comes first and it may be
24609followed by up to three operands. Operands are separated by commas
24610(`,'). `as' will complain if too many operands are specified for a
24611given instruction. The same will happen if you specified too few
24612operands.
24613
24614     nop
24615     ldl  #23
24616     CMP  R1, R2
24617
24618   The presence of a `;' character or a `!' character anywhere on a
24619line indicates the start of a comment that extends to the end of that
24620line.
24621
24622   A `*' or a `#' character at the start of a line also introduces a
24623line comment, but these characters do not work elsewhere on the line.
24624If the first character of the line is a `#' then as well as starting a
24625comment, the line could also be logical line number directive (*note
24626Comments::) or a preprocessor control command (*note Preprocessing::).
24627
24628   The XGATE assembler does not currently support a line separator
24629character.
24630
24631   The following addressing modes are understood for XGATE:
24632"Inherent"
24633     `'
24634
24635"Immediate 3 Bit Wide"
24636     `#NUMBER'
24637
24638"Immediate 4 Bit Wide"
24639     `#NUMBER'
24640
24641"Immediate 8 Bit Wide"
24642     `#NUMBER'
24643
24644"Monadic Addressing"
24645     `REG'
24646
24647"Dyadic Addressing"
24648     `REG, REG'
24649
24650"Triadic Addressing"
24651     `REG, REG, REG'
24652
24653"Relative Addressing 9 Bit Wide"
24654     `*SYMBOL'
24655
24656"Relative Addressing 10 Bit Wide"
24657     `*SYMBOL'
24658
24659"Index Register plus Immediate Offset"
24660     `REG, (REG, #NUMBER)'
24661
24662"Index Register plus Register Offset"
24663     `REG, REG, REG'
24664
24665"Index Register plus Register Offset with Post-increment"
24666     `REG, REG, REG+'
24667
24668"Index Register plus Register Offset with Pre-decrement"
24669     `REG, REG, -REG'
24670
24671     The register can be either `R0', `R1', `R2', `R3', `R4', `R5',
24672     `R6' or `R7'.
24673
24674
24675   Convene macro opcodes to deal with 16-bit values have been added.
24676
24677"Immediate 16 Bit Wide"
24678     `#NUMBER', or `*SYMBOL'
24679
24680     For example:
24681
24682          ldw R1, #1024
24683          ldw R3, timer
24684          ldw R1, (R1, #0)
24685          COM R1
24686          stw R2, (R1, #0)
24687
24688
24689File: as.info,  Node: XGATE-Directives,  Next: XGATE-Float,  Prev: XGATE-Syntax,  Up: XGATE-Dependent
24690
246919.53.3 Assembler Directives
24692---------------------------
24693
24694The XGATE version of `as' have the following specific assembler
24695directives:
24696
24697
24698File: as.info,  Node: XGATE-Float,  Next: XGATE-opcodes,  Prev: XGATE-Directives,  Up: XGATE-Dependent
24699
247009.53.4 Floating Point
24701---------------------
24702
24703Packed decimal (P) format floating literals are not supported(yet).
24704
24705   The floating point formats generated by directives are these.
24706
24707`.float'
24708     `Single' precision floating point constants.
24709
24710`.double'
24711     `Double' precision floating point constants.
24712
24713`.extend'
24714`.ldouble'
24715     `Extended' precision (`long double') floating point constants.
24716
24717
24718File: as.info,  Node: XGATE-opcodes,  Prev: XGATE-Float,  Up: XGATE-Dependent
24719
247209.53.5 Opcodes
24721--------------
24722
24723
24724File: as.info,  Node: XSTORMY16-Dependent,  Next: Xtensa-Dependent,  Prev: XGATE-Dependent,  Up: Machine Dependencies
24725
247269.54 XStormy16 Dependent Features
24727=================================
24728
24729* Menu:
24730
24731* XStormy16 Syntax::               Syntax
24732* XStormy16 Directives::           Machine Directives
24733* XStormy16 Opcodes::              Pseudo-Opcodes
24734
24735
24736File: as.info,  Node: XStormy16 Syntax,  Next: XStormy16 Directives,  Up: XSTORMY16-Dependent
24737
247389.54.1 Syntax
24739-------------
24740
24741* Menu:
24742
24743* XStormy16-Chars::                Special Characters
24744
24745
24746File: as.info,  Node: XStormy16-Chars,  Up: XStormy16 Syntax
24747
247489.54.1.1 Special Characters
24749...........................
24750
24751`#' is the line comment character.  If a `#' appears as the first
24752character of a line, the whole line is treated as a comment, but in
24753this case the line can also be a logical line number directive (*note
24754Comments::) or a preprocessor control command (*note Preprocessing::).
24755
24756   A semicolon (`;') can be used to start a comment that extends from
24757wherever the character appears on the line up to the end of the line.
24758
24759   The `|' character can be used to separate statements on the same
24760line.
24761
24762
24763File: as.info,  Node: XStormy16 Directives,  Next: XStormy16 Opcodes,  Prev: XStormy16 Syntax,  Up: XSTORMY16-Dependent
24764
247659.54.2 XStormy16 Machine Directives
24766-----------------------------------
24767
24768`.16bit_pointers'
24769     Like the `--16bit-pointers' command-line option this directive
24770     indicates that the assembly code makes use of 16-bit pointers.
24771
24772`.32bit_pointers'
24773     Like the `--32bit-pointers' command-line option this directive
24774     indicates that the assembly code makes use of 32-bit pointers.
24775
24776`.no_pointers'
24777     Like the `--no-pointers' command-line option this directive
24778     indicates that the assembly code does not makes use pointers.
24779
24780
24781
24782File: as.info,  Node: XStormy16 Opcodes,  Prev: XStormy16 Directives,  Up: XSTORMY16-Dependent
24783
247849.54.3 XStormy16 Pseudo-Opcodes
24785-------------------------------
24786
24787`as' implements all the standard XStormy16 opcodes.
24788
24789   `as' also implements the following pseudo ops:
24790
24791`@lo()'
24792     Computes the lower 16 bits of the given expression and stores it
24793     into the immediate operand field of the given instruction.  For
24794     example:
24795
24796     `add r6, @lo(here - there)'
24797
24798     computes the difference between the address of labels 'here' and
24799     'there', takes the lower 16 bits of this difference and adds it to
24800     register 6.
24801
24802`@hi()'
24803     Computes the higher 16 bits of the given expression and stores it
24804     into the immediate operand field of the given instruction.  For
24805     example:
24806
24807     `addc r7, @hi(here - there)'
24808
24809     computes the difference between the address of labels 'here' and
24810     'there', takes the upper 16 bits of this difference, shifts it
24811     down 16 bits and then adds it, along with the carry bit, to the
24812     value in register 7.
24813
24814
24815
24816File: as.info,  Node: Xtensa-Dependent,  Next: Z80-Dependent,  Prev: XSTORMY16-Dependent,  Up: Machine Dependencies
24817
248189.55 Xtensa Dependent Features
24819==============================
24820
24821   This chapter covers features of the GNU assembler that are specific
24822to the Xtensa architecture.  For details about the Xtensa instruction
24823set, please consult the `Xtensa Instruction Set Architecture (ISA)
24824Reference Manual'.
24825
24826* Menu:
24827
24828* Xtensa Options::              Command-line Options.
24829* Xtensa Syntax::               Assembler Syntax for Xtensa Processors.
24830* Xtensa Optimizations::        Assembler Optimizations.
24831* Xtensa Relaxation::           Other Automatic Transformations.
24832* Xtensa Directives::           Directives for Xtensa Processors.
24833
24834
24835File: as.info,  Node: Xtensa Options,  Next: Xtensa Syntax,  Up: Xtensa-Dependent
24836
248379.55.1 Command-line Options
24838---------------------------
24839
24840`--text-section-literals | --no-text-section-literals'
24841     Control the treatment of literal pools.  The default is
24842     `--no-text-section-literals', which places literals in separate
24843     sections in the output file.  This allows the literal pool to be
24844     placed in a data RAM/ROM.  With `--text-section-literals', the
24845     literals are interspersed in the text section in order to keep
24846     them as close as possible to their references.  This may be
24847     necessary for large assembly files, where the literals would
24848     otherwise be out of range of the `L32R' instructions in the text
24849     section.  Literals are grouped into pools following
24850     `.literal_position' directives or preceding `ENTRY' instructions.
24851     These options only affect literals referenced via PC-relative
24852     `L32R' instructions; literals for absolute mode `L32R'
24853     instructions are handled separately.  *Note literal: Literal
24854     Directive.
24855
24856`--auto-litpools | --no-auto-litpools'
24857     Control the treatment of literal pools.  The default is
24858     `--no-auto-litpools', which in the absence of
24859     `--text-section-literals' places literals in separate sections in
24860     the output file.  This allows the literal pool to be placed in a
24861     data RAM/ROM.  With `--auto-litpools', the literals are
24862     interspersed in the text section in order to keep them as close as
24863     possible to their references, explicit `.literal_position'
24864     directives are not required.  This may be necessary for very large
24865     functions, where single literal pool at the beginning of the
24866     function may not be reachable by `L32R' instructions at the end.
24867     These options only affect literals referenced via PC-relative
24868     `L32R' instructions; literals for absolute mode `L32R'
24869     instructions are handled separately.  When used together with
24870     `--text-section-literals', `--auto-litpools' takes precedence.
24871     *Note literal: Literal Directive.
24872
24873`--absolute-literals | --no-absolute-literals'
24874     Indicate to the assembler whether `L32R' instructions use absolute
24875     or PC-relative addressing.  If the processor includes the absolute
24876     addressing option, the default is to use absolute `L32R'
24877     relocations.  Otherwise, only the PC-relative `L32R' relocations
24878     can be used.
24879
24880`--target-align | --no-target-align'
24881     Enable or disable automatic alignment to reduce branch penalties
24882     at some expense in code size.  *Note Automatic Instruction
24883     Alignment: Xtensa Automatic Alignment.  This optimization is
24884     enabled by default.  Note that the assembler will always align
24885     instructions like `LOOP' that have fixed alignment requirements.
24886
24887`--longcalls | --no-longcalls'
24888     Enable or disable transformation of call instructions to allow
24889     calls across a greater range of addresses.  *Note Function Call
24890     Relaxation: Xtensa Call Relaxation.  This option should be used
24891     when call targets can potentially be out of range.  It may degrade
24892     both code size and performance, but the linker can generally
24893     optimize away the unnecessary overhead when a call ends up within
24894     range.  The default is `--no-longcalls'.
24895
24896`--transform | --no-transform'
24897     Enable or disable all assembler transformations of Xtensa
24898     instructions, including both relaxation and optimization.  The
24899     default is `--transform'; `--no-transform' should only be used in
24900     the rare cases when the instructions must be exactly as specified
24901     in the assembly source.  Using `--no-transform' causes out of range
24902     instruction operands to be errors.
24903
24904`--rename-section OLDNAME=NEWNAME'
24905     Rename the OLDNAME section to NEWNAME.  This option can be used
24906     multiple times to rename multiple sections.
24907
24908`--trampolines | --no-trampolines'
24909     Enable or disable transformation of jump instructions to allow
24910     jumps across a greater range of addresses.  *Note Jump
24911     Trampolines: Xtensa Jump Relaxation.  This option should be used
24912     when jump targets can potentially be out of range.  In the absence
24913     of such jumps this option does not affect code size or
24914     performance.  The default is `--trampolines'.
24915
24916`--abi-windowed | --abi-call0'
24917     Choose ABI tag written to the `.xtensa.info' section.  ABI tag
24918     indicates ABI of the assembly code.  A warning is issued by the
24919     linker on an attempt to link object files with inconsistent ABI
24920     tags.  Default ABI is chosen by the Xtensa core configuration.
24921
24922
24923File: as.info,  Node: Xtensa Syntax,  Next: Xtensa Optimizations,  Prev: Xtensa Options,  Up: Xtensa-Dependent
24924
249259.55.2 Assembler Syntax
24926-----------------------
24927
24928Block comments are delimited by `/*' and `*/'.  End of line comments
24929may be introduced with either `#' or `//'.
24930
24931   If a `#' appears as the first character of a line then the whole
24932line is treated as a comment, but in this case the line could also be a
24933logical line number directive (*note Comments::) or a preprocessor
24934control command (*note Preprocessing::).
24935
24936   Instructions consist of a leading opcode or macro name followed by
24937whitespace and an optional comma-separated list of operands:
24938
24939     OPCODE [OPERAND, ...]
24940
24941   Instructions must be separated by a newline or semicolon (`;').
24942
24943   FLIX instructions, which bundle multiple opcodes together in a single
24944instruction, are specified by enclosing the bundled opcodes inside
24945braces:
24946
24947     {
24948     [FORMAT]
24949     OPCODE0 [OPERANDS]
24950     OPCODE1 [OPERANDS]
24951     OPCODE2 [OPERANDS]
24952     ...
24953     }
24954
24955   The opcodes in a FLIX instruction are listed in the same order as the
24956corresponding instruction slots in the TIE format declaration.
24957Directives and labels are not allowed inside the braces of a FLIX
24958instruction.  A particular TIE format name can optionally be specified
24959immediately after the opening brace, but this is usually unnecessary.
24960The assembler will automatically search for a format that can encode the
24961specified opcodes, so the format name need only be specified in rare
24962cases where there is more than one applicable format and where it
24963matters which of those formats is used.  A FLIX instruction can also be
24964specified on a single line by separating the opcodes with semicolons:
24965
24966     { [FORMAT;] OPCODE0 [OPERANDS]; OPCODE1 [OPERANDS]; OPCODE2 [OPERANDS]; ... }
24967
24968   If an opcode can only be encoded in a FLIX instruction but is not
24969specified as part of a FLIX bundle, the assembler will choose the
24970smallest format where the opcode can be encoded and will fill unused
24971instruction slots with no-ops.
24972
24973* Menu:
24974
24975* Xtensa Opcodes::              Opcode Naming Conventions.
24976* Xtensa Registers::            Register Naming.
24977
24978
24979File: as.info,  Node: Xtensa Opcodes,  Next: Xtensa Registers,  Up: Xtensa Syntax
24980
249819.55.2.1 Opcode Names
24982.....................
24983
24984See the `Xtensa Instruction Set Architecture (ISA) Reference Manual'
24985for a complete list of opcodes and descriptions of their semantics.
24986
24987   If an opcode name is prefixed with an underscore character (`_'),
24988`as' will not transform that instruction in any way.  The underscore
24989prefix disables both optimization (*note Xtensa Optimizations: Xtensa
24990Optimizations.) and relaxation (*note Xtensa Relaxation: Xtensa
24991Relaxation.) for that particular instruction.  Only use the underscore
24992prefix when it is essential to select the exact opcode produced by the
24993assembler.  Using this feature unnecessarily makes the code less
24994efficient by disabling assembler optimization and less flexible by
24995disabling relaxation.
24996
24997   Note that this special handling of underscore prefixes only applies
24998to Xtensa opcodes, not to either built-in macros or user-defined macros.
24999When an underscore prefix is used with a macro (e.g., `_MOV'), it
25000refers to a different macro.  The assembler generally provides built-in
25001macros both with and without the underscore prefix, where the underscore
25002versions behave as if the underscore carries through to the instructions
25003in the macros.  For example, `_MOV' may expand to `_MOV.N'.
25004
25005   The underscore prefix only applies to individual instructions, not to
25006series of instructions.  For example, if a series of instructions have
25007underscore prefixes, the assembler will not transform the individual
25008instructions, but it may insert other instructions between them (e.g.,
25009to align a `LOOP' instruction).  To prevent the assembler from
25010modifying a series of instructions as a whole, use the `no-transform'
25011directive.  *Note transform: Transform Directive.
25012
25013
25014File: as.info,  Node: Xtensa Registers,  Prev: Xtensa Opcodes,  Up: Xtensa Syntax
25015
250169.55.2.2 Register Names
25017.......................
25018
25019The assembly syntax for a register file entry is the "short" name for a
25020TIE register file followed by the index into that register file.  For
25021example, the general-purpose `AR' register file has a short name of
25022`a', so these registers are named `a0'...`a15'.  As a special feature,
25023`sp' is also supported as a synonym for `a1'.  Additional registers may
25024be added by processor configuration options and by designer-defined TIE
25025extensions.  An initial `$' character is optional in all register names.
25026
25027
25028File: as.info,  Node: Xtensa Optimizations,  Next: Xtensa Relaxation,  Prev: Xtensa Syntax,  Up: Xtensa-Dependent
25029
250309.55.3 Xtensa Optimizations
25031---------------------------
25032
25033The optimizations currently supported by `as' are generation of density
25034instructions where appropriate and automatic branch target alignment.
25035
25036* Menu:
25037
25038* Density Instructions::        Using Density Instructions.
25039* Xtensa Automatic Alignment::  Automatic Instruction Alignment.
25040
25041
25042File: as.info,  Node: Density Instructions,  Next: Xtensa Automatic Alignment,  Up: Xtensa Optimizations
25043
250449.55.3.1 Using Density Instructions
25045...................................
25046
25047The Xtensa instruction set has a code density option that provides
2504816-bit versions of some of the most commonly used opcodes.  Use of these
25049opcodes can significantly reduce code size.  When possible, the
25050assembler automatically translates instructions from the core Xtensa
25051instruction set into equivalent instructions from the Xtensa code
25052density option.  This translation can be disabled by using underscore
25053prefixes (*note Opcode Names: Xtensa Opcodes.), by using the
25054`--no-transform' command-line option (*note Command Line Options:
25055Xtensa Options.), or by using the `no-transform' directive (*note
25056transform: Transform Directive.).
25057
25058   It is a good idea _not_ to use the density instructions directly.
25059The assembler will automatically select dense instructions where
25060possible.  If you later need to use an Xtensa processor without the code
25061density option, the same assembly code will then work without
25062modification.
25063
25064
25065File: as.info,  Node: Xtensa Automatic Alignment,  Prev: Density Instructions,  Up: Xtensa Optimizations
25066
250679.55.3.2 Automatic Instruction Alignment
25068........................................
25069
25070The Xtensa assembler will automatically align certain instructions, both
25071to optimize performance and to satisfy architectural requirements.
25072
25073   As an optimization to improve performance, the assembler attempts to
25074align branch targets so they do not cross instruction fetch boundaries.
25075(Xtensa processors can be configured with either 32-bit or 64-bit
25076instruction fetch widths.)  An instruction immediately following a call
25077is treated as a branch target in this context, because it will be the
25078target of a return from the call.  This alignment has the potential to
25079reduce branch penalties at some expense in code size.  This
25080optimization is enabled by default.  You can disable it with the
25081`--no-target-align' command-line option (*note Command-line Options:
25082Xtensa Options.).
25083
25084   The target alignment optimization is done without adding instructions
25085that could increase the execution time of the program.  If there are
25086density instructions in the code preceding a target, the assembler can
25087change the target alignment by widening some of those instructions to
25088the equivalent 24-bit instructions.  Extra bytes of padding can be
25089inserted immediately following unconditional jump and return
25090instructions.  This approach is usually successful in aligning many,
25091but not all, branch targets.
25092
25093   The `LOOP' family of instructions must be aligned such that the
25094first instruction in the loop body does not cross an instruction fetch
25095boundary (e.g., with a 32-bit fetch width, a `LOOP' instruction must be
25096on either a 1 or 2 mod 4 byte boundary).  The assembler knows about
25097this restriction and inserts the minimal number of 2 or 3 byte no-op
25098instructions to satisfy it.  When no-op instructions are added, any
25099label immediately preceding the original loop will be moved in order to
25100refer to the loop instruction, not the newly generated no-op
25101instruction.  To preserve binary compatibility across processors with
25102different fetch widths, the assembler conservatively assumes a 32-bit
25103fetch width when aligning `LOOP' instructions (except if the first
25104instruction in the loop is a 64-bit instruction).
25105
25106   Previous versions of the assembler automatically aligned `ENTRY'
25107instructions to 4-byte boundaries, but that alignment is now the
25108programmer's responsibility.
25109
25110
25111File: as.info,  Node: Xtensa Relaxation,  Next: Xtensa Directives,  Prev: Xtensa Optimizations,  Up: Xtensa-Dependent
25112
251139.55.4 Xtensa Relaxation
25114------------------------
25115
25116When an instruction operand is outside the range allowed for that
25117particular instruction field, `as' can transform the code to use a
25118functionally-equivalent instruction or sequence of instructions.  This
25119process is known as "relaxation".  This is typically done for branch
25120instructions because the distance of the branch targets is not known
25121until assembly-time.  The Xtensa assembler offers branch relaxation and
25122also extends this concept to function calls, `MOVI' instructions and
25123other instructions with immediate fields.
25124
25125* Menu:
25126
25127* Xtensa Branch Relaxation::        Relaxation of Branches.
25128* Xtensa Call Relaxation::          Relaxation of Function Calls.
25129* Xtensa Jump Relaxation::          Relaxation of Jumps.
25130* Xtensa Immediate Relaxation::     Relaxation of other Immediate Fields.
25131
25132
25133File: as.info,  Node: Xtensa Branch Relaxation,  Next: Xtensa Call Relaxation,  Up: Xtensa Relaxation
25134
251359.55.4.1 Conditional Branch Relaxation
25136......................................
25137
25138When the target of a branch is too far away from the branch itself,
25139i.e., when the offset from the branch to the target is too large to fit
25140in the immediate field of the branch instruction, it may be necessary to
25141replace the branch with a branch around a jump.  For example,
25142
25143         beqz    a2, L
25144
25145   may result in:
25146
25147         bnez.n  a2, M
25148         j L
25149     M:
25150
25151   (The `BNEZ.N' instruction would be used in this example only if the
25152density option is available.  Otherwise, `BNEZ' would be used.)
25153
25154   This relaxation works well because the unconditional jump instruction
25155has a much larger offset range than the various conditional branches.
25156However, an error will occur if a branch target is beyond the range of a
25157jump instruction.  `as' cannot relax unconditional jumps.  Similarly,
25158an error will occur if the original input contains an unconditional
25159jump to a target that is out of range.
25160
25161   Branch relaxation is enabled by default.  It can be disabled by using
25162underscore prefixes (*note Opcode Names: Xtensa Opcodes.), the
25163`--no-transform' command-line option (*note Command-line Options:
25164Xtensa Options.), or the `no-transform' directive (*note transform:
25165Transform Directive.).
25166
25167
25168File: as.info,  Node: Xtensa Call Relaxation,  Next: Xtensa Jump Relaxation,  Prev: Xtensa Branch Relaxation,  Up: Xtensa Relaxation
25169
251709.55.4.2 Function Call Relaxation
25171.................................
25172
25173Function calls may require relaxation because the Xtensa immediate call
25174instructions (`CALL0', `CALL4', `CALL8' and `CALL12') provide a
25175PC-relative offset of only 512 Kbytes in either direction.  For larger
25176programs, it may be necessary to use indirect calls (`CALLX0',
25177`CALLX4', `CALLX8' and `CALLX12') where the target address is specified
25178in a register.  The Xtensa assembler can automatically relax immediate
25179call instructions into indirect call instructions.  This relaxation is
25180done by loading the address of the called function into the callee's
25181return address register and then using a `CALLX' instruction.  So, for
25182example:
25183
25184         call8 func
25185
25186   might be relaxed to:
25187
25188         .literal .L1, func
25189         l32r    a8, .L1
25190         callx8  a8
25191
25192   Because the addresses of targets of function calls are not generally
25193known until link-time, the assembler must assume the worst and relax all
25194the calls to functions in other source files, not just those that really
25195will be out of range.  The linker can recognize calls that were
25196unnecessarily relaxed, and it will remove the overhead introduced by the
25197assembler for those cases where direct calls are sufficient.
25198
25199   Call relaxation is disabled by default because it can have a negative
25200effect on both code size and performance, although the linker can
25201usually eliminate the unnecessary overhead.  If a program is too large
25202and some of the calls are out of range, function call relaxation can be
25203enabled using the `--longcalls' command-line option or the `longcalls'
25204directive (*note longcalls: Longcalls Directive.).
25205
25206
25207File: as.info,  Node: Xtensa Jump Relaxation,  Next: Xtensa Immediate Relaxation,  Prev: Xtensa Call Relaxation,  Up: Xtensa Relaxation
25208
252099.55.4.3 Jump Relaxation
25210........................
25211
25212Jump instruction may require relaxation because the Xtensa jump
25213instruction (`J') provide a PC-relative offset of only 128 Kbytes in
25214either direction.  One option is to use jump long (`J.L') instruction,
25215which depending on jump distance may be assembled as jump (`J') or
25216indirect jump (`JX').  However it needs a free register.  When there's
25217no spare register it is possible to plant intermediate jump sites
25218(trampolines) between the jump instruction and its target.  These sites
25219may be located in areas unreachable by normal code execution flow, in
25220that case they only contain intermediate jumps, or they may be inserted
25221in the middle of code block, in which case there's an additional jump
25222from the beginning of the trampoline to the instruction past its end.
25223So, for example:
25224
25225         j 1f
25226         ...
25227         retw
25228         ...
25229         mov a10, a2
25230         call8 func
25231         ...
25232     1:
25233         ...
25234
25235   might be relaxed to:
25236
25237         j .L0_TR_1
25238         ...
25239         retw
25240     .L0_TR_1:
25241         j 1f
25242         ...
25243         mov a10, a2
25244         call8 func
25245         ...
25246     1:
25247         ...
25248
25249   or to:
25250
25251         j .L0_TR_1
25252         ...
25253         retw
25254         ...
25255         mov a10, a2
25256         j .L0_TR_0
25257     .L0_TR_1:
25258         j 1f
25259     .L0_TR_0:
25260         call8 func
25261         ...
25262     1:
25263         ...
25264
25265   The Xtensa assembler uses trampolines with jump around only when it
25266cannot find suitable unreachable trampoline.  There may be multiple
25267trampolines between the jump instruction and its target.
25268
25269   This relaxation does not apply to jumps to undefined symbols,
25270assuming they will reach their targets once resolved.
25271
25272   Jump relaxation is enabled by default because it does not affect
25273code size or performance while the code itself is small.  This
25274relaxation may be disabled completely with `--no-trampolines' or
25275`--no-transform' command-line options (*note Command-line Options:
25276Xtensa Options.).
25277
25278
25279File: as.info,  Node: Xtensa Immediate Relaxation,  Prev: Xtensa Jump Relaxation,  Up: Xtensa Relaxation
25280
252819.55.4.4 Other Immediate Field Relaxation
25282.........................................
25283
25284The assembler normally performs the following other relaxations.  They
25285can be disabled by using underscore prefixes (*note Opcode Names:
25286Xtensa Opcodes.), the `--no-transform' command-line option (*note
25287Command-line Options: Xtensa Options.), or the `no-transform' directive
25288(*note transform: Transform Directive.).
25289
25290   The `MOVI' machine instruction can only materialize values in the
25291range from -2048 to 2047.  Values outside this range are best
25292materialized with `L32R' instructions.  Thus:
25293
25294         movi a0, 100000
25295
25296   is assembled into the following machine code:
25297
25298         .literal .L1, 100000
25299         l32r a0, .L1
25300
25301   The `L8UI' machine instruction can only be used with immediate
25302offsets in the range from 0 to 255. The `L16SI' and `L16UI' machine
25303instructions can only be used with offsets from 0 to 510.  The `L32I'
25304machine instruction can only be used with offsets from 0 to 1020.  A
25305load offset outside these ranges can be materialized with an `L32R'
25306instruction if the destination register of the load is different than
25307the source address register.  For example:
25308
25309         l32i a1, a0, 2040
25310
25311   is translated to:
25312
25313         .literal .L1, 2040
25314         l32r a1, .L1
25315         add a1, a0, a1
25316         l32i a1, a1, 0
25317
25318If the load destination and source address register are the same, an
25319out-of-range offset causes an error.
25320
25321   The Xtensa `ADDI' instruction only allows immediate operands in the
25322range from -128 to 127.  There are a number of alternate instruction
25323sequences for the `ADDI' operation.  First, if the immediate is 0, the
25324`ADDI' will be turned into a `MOV.N' instruction (or the equivalent
25325`OR' instruction if the code density option is not available).  If the
25326`ADDI' immediate is outside of the range -128 to 127, but inside the
25327range -32896 to 32639, an `ADDMI' instruction or `ADDMI'/`ADDI'
25328sequence will be used.  Finally, if the immediate is outside of this
25329range and a free register is available, an `L32R'/`ADD' sequence will
25330be used with a literal allocated from the literal pool.
25331
25332   For example:
25333
25334         addi    a5, a6, 0
25335         addi    a5, a6, 512
25336         addi    a5, a6, 513
25337         addi    a5, a6, 50000
25338
25339   is assembled into the following:
25340
25341         .literal .L1, 50000
25342         mov.n   a5, a6
25343         addmi   a5, a6, 0x200
25344         addmi   a5, a6, 0x200
25345         addi    a5, a5, 1
25346         l32r    a5, .L1
25347         add     a5, a6, a5
25348
25349
25350File: as.info,  Node: Xtensa Directives,  Prev: Xtensa Relaxation,  Up: Xtensa-Dependent
25351
253529.55.5 Directives
25353-----------------
25354
25355The Xtensa assembler supports a region-based directive syntax:
25356
25357         .begin DIRECTIVE [OPTIONS]
25358         ...
25359         .end DIRECTIVE
25360
25361   All the Xtensa-specific directives that apply to a region of code use
25362this syntax.
25363
25364   The directive applies to code between the `.begin' and the `.end'.
25365The state of the option after the `.end' reverts to what it was before
25366the `.begin'.  A nested `.begin'/`.end' region can further change the
25367state of the directive without having to be aware of its outer state.
25368For example, consider:
25369
25370         .begin no-transform
25371     L:  add a0, a1, a2
25372         .begin transform
25373     M:  add a0, a1, a2
25374         .end transform
25375     N:  add a0, a1, a2
25376         .end no-transform
25377
25378   The `ADD' opcodes at `L' and `N' in the outer `no-transform' region
25379both result in `ADD' machine instructions, but the assembler selects an
25380`ADD.N' instruction for the `ADD' at `M' in the inner `transform'
25381region.
25382
25383   The advantage of this style is that it works well inside macros
25384which can preserve the context of their callers.
25385
25386   The following directives are available:
25387
25388* Menu:
25389
25390* Schedule Directive::         Enable instruction scheduling.
25391* Longcalls Directive::        Use Indirect Calls for Greater Range.
25392* Transform Directive::        Disable All Assembler Transformations.
25393* Literal Directive::          Intermix Literals with Instructions.
25394* Literal Position Directive:: Specify Inline Literal Pool Locations.
25395* Literal Prefix Directive::   Specify Literal Section Name Prefix.
25396* Absolute Literals Directive:: Control PC-Relative vs. Absolute Literals.
25397
25398
25399File: as.info,  Node: Schedule Directive,  Next: Longcalls Directive,  Up: Xtensa Directives
25400
254019.55.5.1 schedule
25402.................
25403
25404The `schedule' directive is recognized only for compatibility with
25405Tensilica's assembler.
25406
25407         .begin [no-]schedule
25408         .end [no-]schedule
25409
25410   This directive is ignored and has no effect on `as'.
25411
25412
25413File: as.info,  Node: Longcalls Directive,  Next: Transform Directive,  Prev: Schedule Directive,  Up: Xtensa Directives
25414
254159.55.5.2 longcalls
25416..................
25417
25418The `longcalls' directive enables or disables function call relaxation.
25419*Note Function Call Relaxation: Xtensa Call Relaxation.
25420
25421         .begin [no-]longcalls
25422         .end [no-]longcalls
25423
25424   Call relaxation is disabled by default unless the `--longcalls'
25425command-line option is specified.  The `longcalls' directive overrides
25426the default determined by the command-line options.
25427
25428
25429File: as.info,  Node: Transform Directive,  Next: Literal Directive,  Prev: Longcalls Directive,  Up: Xtensa Directives
25430
254319.55.5.3 transform
25432..................
25433
25434This directive enables or disables all assembler transformation,
25435including relaxation (*note Xtensa Relaxation: Xtensa Relaxation.) and
25436optimization (*note Xtensa Optimizations: Xtensa Optimizations.).
25437
25438         .begin [no-]transform
25439         .end [no-]transform
25440
25441   Transformations are enabled by default unless the `--no-transform'
25442option is used.  The `transform' directive overrides the default
25443determined by the command-line options.  An underscore opcode prefix,
25444disabling transformation of that opcode, always takes precedence over
25445both directives and command-line flags.
25446
25447
25448File: as.info,  Node: Literal Directive,  Next: Literal Position Directive,  Prev: Transform Directive,  Up: Xtensa Directives
25449
254509.55.5.4 literal
25451................
25452
25453The `.literal' directive is used to define literal pool data, i.e.,
25454read-only 32-bit data accessed via `L32R' instructions.
25455
25456         .literal LABEL, VALUE[, VALUE...]
25457
25458   This directive is similar to the standard `.word' directive, except
25459that the actual location of the literal data is determined by the
25460assembler and linker, not by the position of the `.literal' directive.
25461Using this directive gives the assembler freedom to locate the literal
25462data in the most appropriate place and possibly to combine identical
25463literals.  For example, the code:
25464
25465         entry sp, 40
25466         .literal .L1, sym
25467         l32r    a4, .L1
25468
25469   can be used to load a pointer to the symbol `sym' into register
25470`a4'.  The value of `sym' will not be placed between the `ENTRY' and
25471`L32R' instructions; instead, the assembler puts the data in a literal
25472pool.
25473
25474   Literal pools are placed by default in separate literal sections;
25475however, when using the `--text-section-literals' option (*note
25476Command-line Options: Xtensa Options.), the literal pools for
25477PC-relative mode `L32R' instructions are placed in the current
25478section.(1) These text section literal pools are created automatically
25479before `ENTRY' instructions and manually after `.literal_position'
25480directives (*note literal_position: Literal Position Directive.).  If
25481there are no preceding `ENTRY' instructions, explicit
25482`.literal_position' directives must be used to place the text section
25483literal pools; otherwise, `as' will report an error.
25484
25485   When literals are placed in separate sections, the literal section
25486names are derived from the names of the sections where the literals are
25487defined.  The base literal section names are `.literal' for PC-relative
25488mode `L32R' instructions and `.lit4' for absolute mode `L32R'
25489instructions (*note absolute-literals: Absolute Literals Directive.).
25490These base names are used for literals defined in the default `.text'
25491section.  For literals defined in other sections or within the scope of
25492a `literal_prefix' directive (*note literal_prefix: Literal Prefix
25493Directive.), the following rules determine the literal section name:
25494
25495  1. If the current section is a member of a section group, the literal
25496     section name includes the group name as a suffix to the base
25497     `.literal' or `.lit4' name, with a period to separate the base
25498     name and group name.  The literal section is also made a member of
25499     the group.
25500
25501  2. If the current section name (or `literal_prefix' value) begins with
25502     "`.gnu.linkonce.KIND.'", the literal section name is formed by
25503     replacing "`.KIND'" with the base `.literal' or `.lit4' name.  For
25504     example, for literals defined in a section named
25505     `.gnu.linkonce.t.func', the literal section will be
25506     `.gnu.linkonce.literal.func' or `.gnu.linkonce.lit4.func'.
25507
25508  3. If the current section name (or `literal_prefix' value) ends with
25509     `.text', the literal section name is formed by replacing that
25510     suffix with the base `.literal' or `.lit4' name.  For example, for
25511     literals defined in a section named `.iram0.text', the literal
25512     section will be `.iram0.literal' or `.iram0.lit4'.
25513
25514  4. If none of the preceding conditions apply, the literal section
25515     name is formed by adding the base `.literal' or `.lit4' name as a
25516     suffix to the current section name (or `literal_prefix' value).
25517
25518   ---------- Footnotes ----------
25519
25520   (1) Literals for the `.init' and `.fini' sections are always placed
25521in separate sections, even when `--text-section-literals' is enabled.
25522
25523
25524File: as.info,  Node: Literal Position Directive,  Next: Literal Prefix Directive,  Prev: Literal Directive,  Up: Xtensa Directives
25525
255269.55.5.5 literal_position
25527.........................
25528
25529When using `--text-section-literals' to place literals inline in the
25530section being assembled, the `.literal_position' directive can be used
25531to mark a potential location for a literal pool.
25532
25533         .literal_position
25534
25535   The `.literal_position' directive is ignored when the
25536`--text-section-literals' option is not used or when `L32R'
25537instructions use the absolute addressing mode.
25538
25539   The assembler will automatically place text section literal pools
25540before `ENTRY' instructions, so the `.literal_position' directive is
25541only needed to specify some other location for a literal pool.  You may
25542need to add an explicit jump instruction to skip over an inline literal
25543pool.
25544
25545   For example, an interrupt vector does not begin with an `ENTRY'
25546instruction so the assembler will be unable to automatically find a good
25547place to put a literal pool.  Moreover, the code for the interrupt
25548vector must be at a specific starting address, so the literal pool
25549cannot come before the start of the code.  The literal pool for the
25550vector must be explicitly positioned in the middle of the vector (before
25551any uses of the literals, due to the negative offsets used by
25552PC-relative `L32R' instructions).  The `.literal_position' directive
25553can be used to do this.  In the following code, the literal for `M'
25554will automatically be aligned correctly and is placed after the
25555unconditional jump.
25556
25557         .global M
25558     code_start:
25559         j continue
25560         .literal_position
25561         .align 4
25562     continue:
25563         movi    a4, M
25564
25565
25566File: as.info,  Node: Literal Prefix Directive,  Next: Absolute Literals Directive,  Prev: Literal Position Directive,  Up: Xtensa Directives
25567
255689.55.5.6 literal_prefix
25569.......................
25570
25571The `literal_prefix' directive allows you to override the default
25572literal section names, which are derived from the names of the sections
25573where the literals are defined.
25574
25575         .begin literal_prefix [NAME]
25576         .end literal_prefix
25577
25578   For literals defined within the delimited region, the literal section
25579names are derived from the NAME argument instead of the name of the
25580current section.  The rules used to derive the literal section names do
25581not change.  *Note literal: Literal Directive.  If the NAME argument is
25582omitted, the literal sections revert to the defaults.  This directive
25583has no effect when using the `--text-section-literals' option (*note
25584Command-line Options: Xtensa Options.).
25585
25586
25587File: as.info,  Node: Absolute Literals Directive,  Prev: Literal Prefix Directive,  Up: Xtensa Directives
25588
255899.55.5.7 absolute-literals
25590..........................
25591
25592The `absolute-literals' and `no-absolute-literals' directives control
25593the absolute vs. PC-relative mode for `L32R' instructions.  These are
25594relevant only for Xtensa configurations that include the absolute
25595addressing option for `L32R' instructions.
25596
25597         .begin [no-]absolute-literals
25598         .end [no-]absolute-literals
25599
25600   These directives do not change the `L32R' mode--they only cause the
25601assembler to emit the appropriate kind of relocation for `L32R'
25602instructions and to place the literal values in the appropriate section.
25603To change the `L32R' mode, the program must write the `LITBASE' special
25604register.  It is the programmer's responsibility to keep track of the
25605mode and indicate to the assembler which mode is used in each region of
25606code.
25607
25608   If the Xtensa configuration includes the absolute `L32R' addressing
25609option, the default is to assume absolute `L32R' addressing unless the
25610`--no-absolute-literals' command-line option is specified.  Otherwise,
25611the default is to assume PC-relative `L32R' addressing.  The
25612`absolute-literals' directive can then be used to override the default
25613determined by the command-line options.
25614
25615
25616File: as.info,  Node: Z80-Dependent,  Next: Z8000-Dependent,  Prev: Xtensa-Dependent,  Up: Machine Dependencies
25617
256189.56 Z80 Dependent Features
25619===========================
25620
25621* Menu:
25622
25623* Z80 Options::              Options
25624* Z80 Syntax::               Syntax
25625* Z80 Floating Point::       Floating Point
25626* Z80 Directives::           Z80 Machine Directives
25627* Z80 Opcodes::              Opcodes
25628
25629
25630File: as.info,  Node: Z80 Options,  Next: Z80 Syntax,  Up: Z80-Dependent
25631
256329.56.1 Command-line Options
25633---------------------------
25634
25635`-march=CPU[-EXT...][+EXT...]'
25636     This option specifies the target processor. The assembler will
25637     issue an error message if an attempt is made to assemble an
25638     instruction which will not execute on the target processor. The
25639     following processor names are recognized: `z80', `z180', `ez80',
25640     `gbz80', `z80n', `r800'.  In addition to the basic instruction
25641     set, the assembler can be told to accept some extention mnemonics.
25642     For example, `-march=z180+sli+infc' extends Z180 with SLI
25643     instructions and IN F,(C). The following extentions are currently
25644     supported: `full' (all known instructions), `adl' (ADL CPU mode by
25645     default, eZ80 only), `sli' (instruction known as SLI, SLL or SL1),
25646     `xyhl' (instructions with halves of index registers: IXL, IXH,
25647     IYL, IYH), `xdcb' (instructions like ROTOP (II+D),R and BITOP
25648     N,(II+D),R), `infc' (instruction IN F,(C) or IN (C)), `outc0'
25649     (instruction OUT (C),0).  Note that rather than extending a basic
25650     instruction set, the extention mnemonics starting with `-' revoke
25651     the respective functionality: `-march=z80-full+xyhl' first removes
25652     all default extentions and adds support for index registers halves
25653     only.
25654
25655     If this option is not specified then `-march=z80+xyhl+infc' is
25656     assumed.
25657
25658`-local-prefix=PREFIX'
25659     Mark all labels with specified prefix as local. But such label can
25660     be marked global explicitly in the code. This option do not change
25661     default local label prefix `.L', it is just adds new one.
25662
25663`-colonless'
25664     Accept colonless labels. All symbols at line begin are treated as
25665     labels.
25666
25667`-sdcc'
25668     Accept assembler code produced by SDCC.
25669
25670`-fp-s=FORMAT'
25671     Single precision floating point numbers format. Default: ieee754
25672     (32 bit).
25673
25674`-fp-d=FORMAT'
25675     Double precision floating point numbers format. Default: ieee754
25676     (64 bit).
25677
25678   Floating point numbers formats.
25679``ieee754''
25680     Single or double precision IEEE754 compatible format.
25681
25682``half''
25683     Half precision IEEE754 compatible format (16 bits).
25684
25685``single''
25686     Single precision IEEE754 compatible format (32 bits).
25687
25688``double''
25689     Double precision IEEE754 compatible format (64 bits).
25690
25691``zeda32''
25692     32 bit floating point format from z80float library by Zeda.
25693
25694``math48''
25695     48 bit floating point format from Math48 package by Anders
25696     Hejlsberg.
25697
25698
25699File: as.info,  Node: Z80 Syntax,  Next: Z80 Floating Point,  Prev: Z80 Options,  Up: Z80-Dependent
25700
257019.56.2 Syntax
25702-------------
25703
25704The assembler syntax closely follows the 'Z80 family CPU User Manual' by
25705Zilog.  In expressions a single `=' may be used as "is equal to"
25706comparison operator.
25707
25708   Suffices can be used to indicate the radix of integer constants; `H'
25709or `h' for hexadecimal, `D' or `d' for decimal, `Q', `O', `q' or `o'
25710for octal, and `B' for binary.
25711
25712   The suffix `b' denotes a backreference to local label.
25713
25714* Menu:
25715
25716* Z80-Chars::                Special Characters
25717* Z80-Regs::                 Register Names
25718* Z80-Case::                 Case Sensitivity
25719* Z80-Labels::               Labels
25720
25721
25722File: as.info,  Node: Z80-Chars,  Next: Z80-Regs,  Up: Z80 Syntax
25723
257249.56.2.1 Special Characters
25725...........................
25726
25727The semicolon `;' is the line comment character;
25728
25729   If a `#' appears as the first character of a line then the whole
25730line is treated as a comment, but in this case the line could also be a
25731logical line number directive (*note Comments::) or a preprocessor
25732control command (*note Preprocessing::).
25733
25734   The Z80 assembler does not support a line separator character.
25735
25736   The dollar sign `$' can be used as a prefix for hexadecimal numbers
25737and as a symbol denoting the current location counter.
25738
25739   A backslash `\' is an ordinary character for the Z80 assembler.
25740
25741   The single quote `'' must be followed by a closing quote. If there
25742is one character in between, it is a character constant, otherwise it is
25743a string constant.
25744
25745
25746File: as.info,  Node: Z80-Regs,  Next: Z80-Case,  Prev: Z80-Chars,  Up: Z80 Syntax
25747
257489.56.2.2 Register Names
25749.......................
25750
25751The registers are referred to with the letters assigned to them by
25752Zilog. In addition `as' recognizes `ixl' and `ixh' as the least and
25753most significant octet in `ix', and similarly `iyl' and  `iyh' as parts
25754of `iy'.
25755
25756
25757File: as.info,  Node: Z80-Case,  Next: Z80-Labels,  Prev: Z80-Regs,  Up: Z80 Syntax
25758
257599.56.2.3 Case Sensitivity
25760.........................
25761
25762Upper and lower case are equivalent in register names, opcodes,
25763condition codes  and assembler directives.  The case of letters is
25764significant in labels and symbol names. The case is also important to
25765distinguish the suffix `b' for a backward reference to a local label
25766from the suffix `B' for a number in binary notation.
25767
25768
25769File: as.info,  Node: Z80-Labels,  Prev: Z80-Case,  Up: Z80 Syntax
25770
257719.56.2.4 Labels
25772...............
25773
25774Labels started by `.L' acts as local labels. You may specify custom
25775local label prefix by `-local-prefix' command-line option.  Dollar,
25776forward and backward local labels are supported. By default, all labels
25777are followed by colon.  Legacy code with colonless labels can be built
25778with `-colonless' command-line option specified. In this case all
25779tokens at line begin are treated as labels.
25780
25781
25782File: as.info,  Node: Z80 Floating Point,  Next: Z80 Directives,  Prev: Z80 Syntax,  Up: Z80-Dependent
25783
257849.56.3 Floating Point
25785---------------------
25786
25787Floating-point numbers of following types are supported:
25788
25789``ieee754''
25790     Supported half, single and double precision IEEE754 compatible
25791     numbers.
25792
25793``zeda32''
25794     32 bit floating point numbers from z80float library by Zeda.
25795
25796``math48''
25797     48 bit floating point numbers from Math48 package by Anders
25798     Hejlsberg.
25799
25800
25801File: as.info,  Node: Z80 Directives,  Next: Z80 Opcodes,  Prev: Z80 Floating Point,  Up: Z80-Dependent
25802
258039.56.4 Z80 Assembler Directives
25804-------------------------------
25805
25806`as' for the Z80 supports some additional directives for compatibility
25807with other assemblers.
25808
25809   These are the additional directives in `as' for the Z80:
25810
25811``.assume ADL = EXPRESSION''
25812     Set ADL status for eZ80. Non-zero value enable compilation in ADL
25813     mode else used Z80 mode. ADL and Z80 mode produces incompatible
25814     object code. Mixing both of them within one binary may lead
25815     problems with disassembler.
25816
25817``db EXPRESSION|STRING[,EXPRESSION|STRING...]''
25818``defb EXPRESSION|STRING[,EXPRESSION|STRING...]''
25819``defm STRING[,STRING...]''
25820     For each STRING the characters are copied to the object file, for
25821     each other EXPRESSION the value is stored in one byte.  A warning
25822     is issued in case of an overflow.  Backslash symbol in the strings
25823     is generic symbol, it cannot be used as escape character.  *Note
25824     `.ascii': Ascii.
25825
25826``dw EXPRESSION[,EXPRESSION...]''
25827``defw EXPRESSION[,EXPRESSION...]''
25828     For each EXPRESSION the value is stored in two bytes, ignoring
25829     overflow.
25830
25831``d24 EXPRESSION[,EXPRESSION...]''
25832``def24 EXPRESSION[,EXPRESSION...]''
25833     For each EXPRESSION the value is stored in three bytes, ignoring
25834     overflow.
25835
25836``d32 EXPRESSION[,EXPRESSION...]''
25837``def32 EXPRESSION[,EXPRESSION...]''
25838     For each EXPRESSION the value is stored in four bytes, ignoring
25839     overflow.
25840
25841``ds COUNT[, VALUE]''
25842``defs COUNT[, VALUE]''
25843     Fill COUNT bytes in the object file with VALUE, if VALUE is
25844     omitted it defaults to zero.
25845
25846``SYMBOL defl EXPRESSION''
25847     The `defl' directive is like `.set' but with different syntax.
25848     *Note `.set': Set.  It set the value of SYMBOL to EXPRESSION.
25849     Symbols defined with `defl' are not protected from redefinition.
25850
25851``SYMBOL equ EXPRESSION''
25852     The `equ' directive is like `.equiv' but with different syntax.
25853     *Note `.equiv': Equiv.  It set the value of SYMBOL to EXPRESSION.
25854     It is an error if SYMBOL is already defined. Symbols defined with
25855     `equ' are not protected from redefinition.
25856
25857``psect NAME''
25858     A synonym for `.section', no second argument should be given.
25859     *Note `.section': Section.
25860
25861``xdef SYMBOL''
25862     A synonym for `.global', make SYMBOL is visible to linker.  *Note
25863     `.global': Global.
25864
25865``xref NAME''
25866     A synonym for `.extern' (*Note `.extern': Extern.).
25867
25868
25869
25870File: as.info,  Node: Z80 Opcodes,  Prev: Z80 Directives,  Up: Z80-Dependent
25871
258729.56.5 Opcodes
25873--------------
25874
25875In line with common practice, Z80 mnemonics are used for the Z80, Z80N,
25876Z180, eZ80, Ascii R800 and the GameBoy Z80.
25877
25878   In many instructions it is possible to use one of the half index
25879registers (`ixl',`ixh',`iyl',`iyh') in stead of an 8-bit general
25880purpose register. This yields instructions that are documented on the
25881eZ80 and the R800, undocumented on the Z80 and unsupported on the Z180.
25882Similarly `in f,(c)' is documented on the R800, undocumented on the Z80
25883and unsupported on the Z180 and the eZ80.
25884
25885   The assembler also supports the following undocumented
25886Z80-instructions, that have not been adopted in any other instruction
25887set:
25888`out (c),0'
25889     Sends zero to the port pointed to by register `C'.
25890
25891`sli M'
25892     Equivalent to `M = (M<<1)+1', the operand M can be any operand
25893     that is valid for `sla'. One can use `sll' as a synonym for `sli'.
25894
25895`OP (ix+D), R'
25896     This is equivalent to
25897
25898          ld R, (ix+D)
25899          OP R
25900          ld (ix+D), R
25901
25902     The operation `OP' may be any of `res B,', `set B,', `rl', `rlc',
25903     `rr', `rrc', `sla', `sli', `sra' and `srl', and the register `R'
25904     may be any of `a', `b', `c', `d', `e', `h' and `l'.
25905
25906`OP (iy+D), R'
25907     As above, but with `iy' instead of `ix'.
25908
25909   The web site at `http://www.z80.info' is a good starting place to
25910find more information on programming the Z80.
25911
25912   You may enable or disable any of these instructions for any target
25913CPU even this instruction is not supported by any real CPU of this type.
25914Useful for custom CPU cores.
25915
25916
25917File: as.info,  Node: Z8000-Dependent,  Prev: Z80-Dependent,  Up: Machine Dependencies
25918
259199.57 Z8000 Dependent Features
25920=============================
25921
25922   The Z8000 as supports both members of the Z8000 family: the
25923unsegmented Z8002, with 16 bit addresses, and the segmented Z8001 with
2592424 bit addresses.
25925
25926   When the assembler is in unsegmented mode (specified with the
25927`unsegm' directive), an address takes up one word (16 bit) sized
25928register.  When the assembler is in segmented mode (specified with the
25929`segm' directive), a 24-bit address takes up a long (32 bit) register.
25930*Note Assembler Directives for the Z8000: Z8000 Directives, for a list
25931of other Z8000 specific assembler directives.
25932
25933* Menu:
25934
25935* Z8000 Options::               Command-line options for the Z8000
25936* Z8000 Syntax::                Assembler syntax for the Z8000
25937* Z8000 Directives::            Special directives for the Z8000
25938* Z8000 Opcodes::               Opcodes
25939
25940
25941File: as.info,  Node: Z8000 Options,  Next: Z8000 Syntax,  Up: Z8000-Dependent
25942
259439.57.1 Options
25944--------------
25945
25946`-z8001'
25947     Generate segmented code by default.
25948
25949`-z8002'
25950     Generate unsegmented code by default.
25951
25952
25953File: as.info,  Node: Z8000 Syntax,  Next: Z8000 Directives,  Prev: Z8000 Options,  Up: Z8000-Dependent
25954
259559.57.2 Syntax
25956-------------
25957
25958* Menu:
25959
25960* Z8000-Chars::                Special Characters
25961* Z8000-Regs::                 Register Names
25962* Z8000-Addressing::           Addressing Modes
25963
25964
25965File: as.info,  Node: Z8000-Chars,  Next: Z8000-Regs,  Up: Z8000 Syntax
25966
259679.57.2.1 Special Characters
25968...........................
25969
25970`!' is the line comment character.
25971
25972   If a `#' appears as the first character of a line then the whole
25973line is treated as a comment, but in this case the line could also be a
25974logical line number directive (*note Comments::) or a preprocessor
25975control command (*note Preprocessing::).
25976
25977   You can use `;' instead of a newline to separate statements.
25978
25979
25980File: as.info,  Node: Z8000-Regs,  Next: Z8000-Addressing,  Prev: Z8000-Chars,  Up: Z8000 Syntax
25981
259829.57.2.2 Register Names
25983.......................
25984
25985The Z8000 has sixteen 16 bit registers, numbered 0 to 15.  You can refer
25986to different sized groups of registers by register number, with the
25987prefix `r' for 16 bit registers, `rr' for 32 bit registers and `rq' for
2598864 bit registers.  You can also refer to the contents of the first
25989eight (of the sixteen 16 bit registers) by bytes.  They are named `rlN'
25990and `rhN'.
25991
25992_byte registers_
25993     rl0 rh0 rl1 rh1 rl2 rh2 rl3 rh3
25994     rl4 rh4 rl5 rh5 rl6 rh6 rl7 rh7
25995
25996_word registers_
25997     r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15
25998
25999_long word registers_
26000     rr0 rr2 rr4 rr6 rr8 rr10 rr12 rr14
26001
26002_quad word registers_
26003     rq0 rq4 rq8 rq12
26004
26005
26006File: as.info,  Node: Z8000-Addressing,  Prev: Z8000-Regs,  Up: Z8000 Syntax
26007
260089.57.2.3 Addressing Modes
26009.........................
26010
26011as understands the following addressing modes for the Z8000:
26012
26013`rlN'
26014`rhN'
26015`rN'
26016`rrN'
26017`rqN'
26018     Register direct:  8bit, 16bit, 32bit, and 64bit registers.
26019
26020`@rN'
26021`@rrN'
26022     Indirect register:  @rrN in segmented mode, @rN in unsegmented
26023     mode.
26024
26025`ADDR'
26026     Direct: the 16 bit or 24 bit address (depending on whether the
26027     assembler is in segmented or unsegmented mode) of the operand is
26028     in the instruction.
26029
26030`address(rN)'
26031     Indexed: the 16 or 24 bit address is added to the 16 bit register
26032     to produce the final address in memory of the operand.
26033
26034`rN(#IMM)'
26035`rrN(#IMM)'
26036     Base Address: the 16 or 24 bit register is added to the 16 bit sign
26037     extended immediate displacement to produce the final address in
26038     memory of the operand.
26039
26040`rN(rM)'
26041`rrN(rM)'
26042     Base Index: the 16 or 24 bit register rN or rrN is added to the
26043     sign extended 16 bit index register rM to produce the final
26044     address in memory of the operand.
26045
26046`#XX'
26047     Immediate data XX.
26048
26049
26050File: as.info,  Node: Z8000 Directives,  Next: Z8000 Opcodes,  Prev: Z8000 Syntax,  Up: Z8000-Dependent
26051
260529.57.3 Assembler Directives for the Z8000
26053-----------------------------------------
26054
26055The Z8000 port of as includes additional assembler directives, for
26056compatibility with other Z8000 assemblers.  These do not begin with `.'
26057(unlike the ordinary as directives).
26058
26059`segm'
26060`.z8001'
26061     Generate code for the segmented Z8001.
26062
26063`unsegm'
26064`.z8002'
26065     Generate code for the unsegmented Z8002.
26066
26067`name'
26068     Synonym for `.file'
26069
26070`global'
26071     Synonym for `.global'
26072
26073`wval'
26074     Synonym for `.word'
26075
26076`lval'
26077     Synonym for `.long'
26078
26079`bval'
26080     Synonym for `.byte'
26081
26082`sval'
26083     Assemble a string.  `sval' expects one string literal, delimited by
26084     single quotes.  It assembles each byte of the string into
26085     consecutive addresses.  You can use the escape sequence `%XX'
26086     (where XX represents a two-digit hexadecimal number) to represent
26087     the character whose ASCII value is XX.  Use this feature to
26088     describe single quote and other characters that may not appear in
26089     string literals as themselves.  For example, the C statement
26090     `char *a = "he said \"it's 50% off\"";' is represented in Z8000
26091     assembly language (shown with the assembler output in hex at the
26092     left) as
26093
26094          68652073    sval    'he said %22it%27s 50%25 off%22%00'
26095          61696420
26096          22697427
26097          73203530
26098          25206F66
26099          662200
26100
26101`rsect'
26102     synonym for `.section'
26103
26104`block'
26105     synonym for `.space'
26106
26107`even'
26108     special case of `.align'; aligns output to even byte boundary.
26109
26110
26111File: as.info,  Node: Z8000 Opcodes,  Prev: Z8000 Directives,  Up: Z8000-Dependent
26112
261139.57.4 Opcodes
26114--------------
26115
26116For detailed information on the Z8000 machine instruction set, see
26117`Z8000 Technical Manual'.
26118
26119   The following table summarizes the opcodes and their arguments:
26120
26121                 rs   16 bit source register
26122                 rd   16 bit destination register
26123                 rbs   8 bit source register
26124                 rbd   8 bit destination register
26125                 rrs   32 bit source register
26126                 rrd   32 bit destination register
26127                 rqs   64 bit source register
26128                 rqd   64 bit destination register
26129                 addr 16/24 bit address
26130                 imm  immediate data
26131
26132     adc rd,rs               clrb addr               cpsir @rd,@rs,rr,cc
26133     adcb rbd,rbs            clrb addr(rd)           cpsirb @rd,@rs,rr,cc
26134     add rd,@rs              clrb rbd                dab rbd
26135     add rd,addr             com @rd                 dbjnz rbd,disp7
26136     add rd,addr(rs)         com addr                dec @rd,imm4m1
26137     add rd,imm16            com addr(rd)            dec addr(rd),imm4m1
26138     add rd,rs               com rd                  dec addr,imm4m1
26139     addb rbd,@rs            comb @rd                dec rd,imm4m1
26140     addb rbd,addr           comb addr               decb @rd,imm4m1
26141     addb rbd,addr(rs)       comb addr(rd)           decb addr(rd),imm4m1
26142     addb rbd,imm8           comb rbd                decb addr,imm4m1
26143     addb rbd,rbs            comflg flags            decb rbd,imm4m1
26144     addl rrd,@rs            cp @rd,imm16            di i2
26145     addl rrd,addr           cp addr(rd),imm16       div rrd,@rs
26146     addl rrd,addr(rs)       cp addr,imm16           div rrd,addr
26147     addl rrd,imm32          cp rd,@rs               div rrd,addr(rs)
26148     addl rrd,rrs            cp rd,addr              div rrd,imm16
26149     and rd,@rs              cp rd,addr(rs)          div rrd,rs
26150     and rd,addr             cp rd,imm16             divl rqd,@rs
26151     and rd,addr(rs)         cp rd,rs                divl rqd,addr
26152     and rd,imm16            cpb @rd,imm8            divl rqd,addr(rs)
26153     and rd,rs               cpb addr(rd),imm8       divl rqd,imm32
26154     andb rbd,@rs            cpb addr,imm8           divl rqd,rrs
26155     andb rbd,addr           cpb rbd,@rs             djnz rd,disp7
26156     andb rbd,addr(rs)       cpb rbd,addr            ei i2
26157     andb rbd,imm8           cpb rbd,addr(rs)        ex rd,@rs
26158     andb rbd,rbs            cpb rbd,imm8            ex rd,addr
26159     bit @rd,imm4            cpb rbd,rbs             ex rd,addr(rs)
26160     bit addr(rd),imm4       cpd rd,@rs,rr,cc        ex rd,rs
26161     bit addr,imm4           cpdb rbd,@rs,rr,cc      exb rbd,@rs
26162     bit rd,imm4             cpdr rd,@rs,rr,cc       exb rbd,addr
26163     bit rd,rs               cpdrb rbd,@rs,rr,cc     exb rbd,addr(rs)
26164     bitb @rd,imm4           cpi rd,@rs,rr,cc        exb rbd,rbs
26165     bitb addr(rd),imm4      cpib rbd,@rs,rr,cc      ext0e imm8
26166     bitb addr,imm4          cpir rd,@rs,rr,cc       ext0f imm8
26167     bitb rbd,imm4           cpirb rbd,@rs,rr,cc     ext8e imm8
26168     bitb rbd,rs             cpl rrd,@rs             ext8f imm8
26169     bpt                     cpl rrd,addr            exts rrd
26170     call @rd                cpl rrd,addr(rs)        extsb rd
26171     call addr               cpl rrd,imm32           extsl rqd
26172     call addr(rd)           cpl rrd,rrs             halt
26173     calr disp12             cpsd @rd,@rs,rr,cc      in rd,@rs
26174     clr @rd                 cpsdb @rd,@rs,rr,cc     in rd,imm16
26175     clr addr                cpsdr @rd,@rs,rr,cc     inb rbd,@rs
26176     clr addr(rd)            cpsdrb @rd,@rs,rr,cc    inb rbd,imm16
26177     clr rd                  cpsi @rd,@rs,rr,cc      inc @rd,imm4m1
26178     clrb @rd                cpsib @rd,@rs,rr,cc     inc addr(rd),imm4m1
26179     inc addr,imm4m1         ldb rbd,rs(rx)          mult rrd,addr(rs)
26180     inc rd,imm4m1           ldb rd(imm16),rbs       mult rrd,imm16
26181     incb @rd,imm4m1         ldb rd(rx),rbs          mult rrd,rs
26182     incb addr(rd),imm4m1    ldctl ctrl,rs           multl rqd,@rs
26183     incb addr,imm4m1        ldctl rd,ctrl           multl rqd,addr
26184     incb rbd,imm4m1         ldd @rs,@rd,rr          multl rqd,addr(rs)
26185     ind @rd,@rs,ra          lddb @rs,@rd,rr         multl rqd,imm32
26186     indb @rd,@rs,rba        lddr @rs,@rd,rr         multl rqd,rrs
26187     inib @rd,@rs,ra         lddrb @rs,@rd,rr        neg @rd
26188     inibr @rd,@rs,ra        ldi @rd,@rs,rr          neg addr
26189     iret                    ldib @rd,@rs,rr         neg addr(rd)
26190     jp cc,@rd               ldir @rd,@rs,rr         neg rd
26191     jp cc,addr              ldirb @rd,@rs,rr        negb @rd
26192     jp cc,addr(rd)          ldk rd,imm4             negb addr
26193     jr cc,disp8             ldl @rd,rrs             negb addr(rd)
26194     ld @rd,imm16            ldl addr(rd),rrs        negb rbd
26195     ld @rd,rs               ldl addr,rrs            nop
26196     ld addr(rd),imm16       ldl rd(imm16),rrs       or rd,@rs
26197     ld addr(rd),rs          ldl rd(rx),rrs          or rd,addr
26198     ld addr,imm16           ldl rrd,@rs             or rd,addr(rs)
26199     ld addr,rs              ldl rrd,addr            or rd,imm16
26200     ld rd(imm16),rs         ldl rrd,addr(rs)        or rd,rs
26201     ld rd(rx),rs            ldl rrd,imm32           orb rbd,@rs
26202     ld rd,@rs               ldl rrd,rrs             orb rbd,addr
26203     ld rd,addr              ldl rrd,rs(imm16)       orb rbd,addr(rs)
26204     ld rd,addr(rs)          ldl rrd,rs(rx)          orb rbd,imm8
26205     ld rd,imm16             ldm @rd,rs,n            orb rbd,rbs
26206     ld rd,rs                ldm addr(rd),rs,n       out @rd,rs
26207     ld rd,rs(imm16)         ldm addr,rs,n           out imm16,rs
26208     ld rd,rs(rx)            ldm rd,@rs,n            outb @rd,rbs
26209     lda rd,addr             ldm rd,addr(rs),n       outb imm16,rbs
26210     lda rd,addr(rs)         ldm rd,addr,n           outd @rd,@rs,ra
26211     lda rd,rs(imm16)        ldps @rs                outdb @rd,@rs,rba
26212     lda rd,rs(rx)           ldps addr               outib @rd,@rs,ra
26213     ldar rd,disp16          ldps addr(rs)           outibr @rd,@rs,ra
26214     ldb @rd,imm8            ldr disp16,rs           pop @rd,@rs
26215     ldb @rd,rbs             ldr rd,disp16           pop addr(rd),@rs
26216     ldb addr(rd),imm8       ldrb disp16,rbs         pop addr,@rs
26217     ldb addr(rd),rbs        ldrb rbd,disp16         pop rd,@rs
26218     ldb addr,imm8           ldrl disp16,rrs         popl @rd,@rs
26219     ldb addr,rbs            ldrl rrd,disp16         popl addr(rd),@rs
26220     ldb rbd,@rs             mbit                    popl addr,@rs
26221     ldb rbd,addr            mreq rd                 popl rrd,@rs
26222     ldb rbd,addr(rs)        mres                    push @rd,@rs
26223     ldb rbd,imm8            mset                    push @rd,addr
26224     ldb rbd,rbs             mult rrd,@rs            push @rd,addr(rs)
26225     ldb rbd,rs(imm16)       mult rrd,addr           push @rd,imm16
26226     push @rd,rs             set addr,imm4           subl rrd,imm32
26227     pushl @rd,@rs           set rd,imm4             subl rrd,rrs
26228     pushl @rd,addr          set rd,rs               tcc cc,rd
26229     pushl @rd,addr(rs)      setb @rd,imm4           tccb cc,rbd
26230     pushl @rd,rrs           setb addr(rd),imm4      test @rd
26231     res @rd,imm4            setb addr,imm4          test addr
26232     res addr(rd),imm4       setb rbd,imm4           test addr(rd)
26233     res addr,imm4           setb rbd,rs             test rd
26234     res rd,imm4             setflg imm4             testb @rd
26235     res rd,rs               sinb rbd,imm16          testb addr
26236     resb @rd,imm4           sinb rd,imm16           testb addr(rd)
26237     resb addr(rd),imm4      sind @rd,@rs,ra         testb rbd
26238     resb addr,imm4          sindb @rd,@rs,rba       testl @rd
26239     resb rbd,imm4           sinib @rd,@rs,ra        testl addr
26240     resb rbd,rs             sinibr @rd,@rs,ra       testl addr(rd)
26241     resflg imm4             sla rd,imm8             testl rrd
26242     ret cc                  slab rbd,imm8           trdb @rd,@rs,rba
26243     rl rd,imm1or2           slal rrd,imm8           trdrb @rd,@rs,rba
26244     rlb rbd,imm1or2         sll rd,imm8             trib @rd,@rs,rbr
26245     rlc rd,imm1or2          sllb rbd,imm8           trirb @rd,@rs,rbr
26246     rlcb rbd,imm1or2        slll rrd,imm8           trtdrb @ra,@rb,rbr
26247     rldb rbb,rba            sout imm16,rs           trtib @ra,@rb,rr
26248     rr rd,imm1or2           soutb imm16,rbs         trtirb @ra,@rb,rbr
26249     rrb rbd,imm1or2         soutd @rd,@rs,ra        trtrb @ra,@rb,rbr
26250     rrc rd,imm1or2          soutdb @rd,@rs,rba      tset @rd
26251     rrcb rbd,imm1or2        soutib @rd,@rs,ra       tset addr
26252     rrdb rbb,rba            soutibr @rd,@rs,ra      tset addr(rd)
26253     rsvd36                  sra rd,imm8             tset rd
26254     rsvd38                  srab rbd,imm8           tsetb @rd
26255     rsvd78                  sral rrd,imm8           tsetb addr
26256     rsvd7e                  srl rd,imm8             tsetb addr(rd)
26257     rsvd9d                  srlb rbd,imm8           tsetb rbd
26258     rsvd9f                  srll rrd,imm8           xor rd,@rs
26259     rsvdb9                  sub rd,@rs              xor rd,addr
26260     rsvdbf                  sub rd,addr             xor rd,addr(rs)
26261     sbc rd,rs               sub rd,addr(rs)         xor rd,imm16
26262     sbcb rbd,rbs            sub rd,imm16            xor rd,rs
26263     sc imm8                 sub rd,rs               xorb rbd,@rs
26264     sda rd,rs               subb rbd,@rs            xorb rbd,addr
26265     sdab rbd,rs             subb rbd,addr           xorb rbd,addr(rs)
26266     sdal rrd,rs             subb rbd,addr(rs)       xorb rbd,imm8
26267     sdl rd,rs               subb rbd,imm8           xorb rbd,rbs
26268     sdlb rbd,rs             subb rbd,rbs            xorb rbd,rbs
26269     sdll rrd,rs             subl rrd,@rs
26270     set @rd,imm4            subl rrd,addr
26271     set addr(rd),imm4       subl rrd,addr(rs)
26272
26273
26274File: as.info,  Node: Reporting Bugs,  Next: Acknowledgements,  Prev: Machine Dependencies,  Up: Top
26275
2627610 Reporting Bugs
26277*****************
26278
26279Your bug reports play an essential role in making `as' reliable.
26280
26281   Reporting a bug may help you by bringing a solution to your problem,
26282or it may not.  But in any case the principal function of a bug report
26283is to help the entire community by making the next version of `as' work
26284better.  Bug reports are your contribution to the maintenance of `as'.
26285
26286   In order for a bug report to serve its purpose, you must include the
26287information that enables us to fix the bug.
26288
26289* Menu:
26290
26291* Bug Criteria::                Have you found a bug?
26292* Bug Reporting::               How to report bugs
26293
26294
26295File: as.info,  Node: Bug Criteria,  Next: Bug Reporting,  Up: Reporting Bugs
26296
2629710.1 Have You Found a Bug?
26298==========================
26299
26300If you are not sure whether you have found a bug, here are some
26301guidelines:
26302
26303   * If the assembler gets a fatal signal, for any input whatever, that
26304     is a `as' bug.  Reliable assemblers never crash.
26305
26306   * If `as' produces an error message for valid input, that is a bug.
26307
26308   * If `as' does not produce an error message for invalid input, that
26309     is a bug.  However, you should note that your idea of "invalid
26310     input" might be our idea of "an extension" or "support for
26311     traditional practice".
26312
26313   * If you are an experienced user of assemblers, your suggestions for
26314     improvement of `as' are welcome in any case.
26315
26316
26317File: as.info,  Node: Bug Reporting,  Prev: Bug Criteria,  Up: Reporting Bugs
26318
2631910.2 How to Report Bugs
26320=======================
26321
26322A number of companies and individuals offer support for GNU products.
26323If you obtained `as' from a support organization, we recommend you
26324contact that organization first.
26325
26326   You can find contact information for many support companies and
26327individuals in the file `etc/SERVICE' in the GNU Emacs distribution.
26328
26329   In any event, we also recommend that you send bug reports for `as'
26330to `http://www.NetBSD.org/support/send-pr.html'.
26331
26332   The fundamental principle of reporting bugs usefully is this:
26333*report all the facts*.  If you are not sure whether to state a fact or
26334leave it out, state it!
26335
26336   Often people omit facts because they think they know what causes the
26337problem and assume that some details do not matter.  Thus, you might
26338assume that the name of a symbol you use in an example does not matter.
26339Well, probably it does not, but one cannot be sure.  Perhaps the bug
26340is a stray memory reference which happens to fetch from the location
26341where that name is stored in memory; perhaps, if the name were
26342different, the contents of that location would fool the assembler into
26343doing the right thing despite the bug.  Play it safe and give a
26344specific, complete example.  That is the easiest thing for you to do,
26345and the most helpful.
26346
26347   Keep in mind that the purpose of a bug report is to enable us to fix
26348the bug if it is new to us.  Therefore, always write your bug reports
26349on the assumption that the bug has not been reported previously.
26350
26351   Sometimes people give a few sketchy facts and ask, "Does this ring a
26352bell?"  This cannot help us fix a bug, so it is basically useless.  We
26353respond by asking for enough details to enable us to investigate.  You
26354might as well expedite matters by sending them to begin with.
26355
26356   To enable us to fix the bug, you should include all these things:
26357
26358   * The version of `as'.  `as' announces it if you start it with the
26359     `--version' argument.
26360
26361     Without this, we will not know whether there is any point in
26362     looking for the bug in the current version of `as'.
26363
26364   * Any patches you may have applied to the `as' source.
26365
26366   * The type of machine you are using, and the operating system name
26367     and version number.
26368
26369   * What compiler (and its version) was used to compile `as'--e.g.
26370     "`gcc-2.7'".
26371
26372   * The command arguments you gave the assembler to assemble your
26373     example and observe the bug.  To guarantee you will not omit
26374     something important, list them all.  A copy of the Makefile (or
26375     the output from make) is sufficient.
26376
26377     If we were to try to guess the arguments, we would probably guess
26378     wrong and then we might not encounter the bug.
26379
26380   * A complete input file that will reproduce the bug.  If the bug is
26381     observed when the assembler is invoked via a compiler, send the
26382     assembler source, not the high level language source.  Most
26383     compilers will produce the assembler source when run with the `-S'
26384     option.  If you are using `gcc', use the options `-v
26385     --save-temps'; this will save the assembler source in a file with
26386     an extension of `.s', and also show you exactly how `as' is being
26387     run.
26388
26389   * A description of what behavior you observe that you believe is
26390     incorrect.  For example, "It gets a fatal signal."
26391
26392     Of course, if the bug is that `as' gets a fatal signal, then we
26393     will certainly notice it.  But if the bug is incorrect output, we
26394     might not notice unless it is glaringly wrong.  You might as well
26395     not give us a chance to make a mistake.
26396
26397     Even if the problem you experience is a fatal signal, you should
26398     still say so explicitly.  Suppose something strange is going on,
26399     such as, your copy of `as' is out of sync, or you have encountered
26400     a bug in the C library on your system.  (This has happened!)  Your
26401     copy might crash and ours would not.  If you told us to expect a
26402     crash, then when ours fails to crash, we would know that the bug
26403     was not happening for us.  If you had not told us to expect a
26404     crash, then we would not be able to draw any conclusion from our
26405     observations.
26406
26407   * If you wish to suggest changes to the `as' source, send us context
26408     diffs, as generated by `diff' with the `-u', `-c', or `-p' option.
26409     Always send diffs from the old file to the new file.  If you even
26410     discuss something in the `as' source, refer to it by context, not
26411     by line number.
26412
26413     The line numbers in our development sources will not match those
26414     in your sources.  Your line numbers would convey no useful
26415     information to us.
26416
26417   Here are some things that are not necessary:
26418
26419   * A description of the envelope of the bug.
26420
26421     Often people who encounter a bug spend a lot of time investigating
26422     which changes to the input file will make the bug go away and which
26423     changes will not affect it.
26424
26425     This is often time consuming and not very useful, because the way
26426     we will find the bug is by running a single example under the
26427     debugger with breakpoints, not by pure deduction from a series of
26428     examples.  We recommend that you save your time for something else.
26429
26430     Of course, if you can find a simpler example to report _instead_
26431     of the original one, that is a convenience for us.  Errors in the
26432     output will be easier to spot, running under the debugger will take
26433     less time, and so on.
26434
26435     However, simplification is not vital; if you do not want to do
26436     this, report the bug anyway and send us the entire test case you
26437     used.
26438
26439   * A patch for the bug.
26440
26441     A patch for the bug does help us if it is a good one.  But do not
26442     omit the necessary information, such as the test case, on the
26443     assumption that a patch is all we need.  We might see problems
26444     with your patch and decide to fix the problem another way, or we
26445     might not understand it at all.
26446
26447     Sometimes with a program as complicated as `as' it is very hard to
26448     construct an example that will make the program follow a certain
26449     path through the code.  If you do not send us the example, we will
26450     not be able to construct one, so we will not be able to verify
26451     that the bug is fixed.
26452
26453     And if we cannot understand what bug you are trying to fix, or why
26454     your patch should be an improvement, we will not install it.  A
26455     test case will help us to understand.
26456
26457   * A guess about what the bug is or what it depends on.
26458
26459     Such guesses are usually wrong.  Even we cannot guess right about
26460     such things without first using the debugger to find the facts.
26461
26462
26463File: as.info,  Node: Acknowledgements,  Next: GNU Free Documentation License,  Prev: Reporting Bugs,  Up: Top
26464
2646511 Acknowledgements
26466*******************
26467
26468If you have contributed to GAS and your name isn't listed here, it is
26469not meant as a slight.  We just don't know about it.  Send mail to the
26470maintainer, and we'll correct the situation.  Currently the maintainer
26471is Nick Clifton (email address `nickc@redhat.com').
26472
26473   Dean Elsner wrote the original GNU assembler for the VAX.(1)
26474
26475   Jay Fenlason maintained GAS for a while, adding support for
26476GDB-specific debug information and the 68k series machines, most of the
26477preprocessing pass, and extensive changes in `messages.c',
26478`input-file.c', `write.c'.
26479
26480   K. Richard Pixley maintained GAS for a while, adding various
26481enhancements and many bug fixes, including merging support for several
26482processors, breaking GAS up to handle multiple object file format back
26483ends (including heavy rewrite, testing, an integration of the coff and
26484b.out back ends), adding configuration including heavy testing and
26485verification of cross assemblers and file splits and renaming,
26486converted GAS to strictly ANSI C including full prototypes, added
26487support for m680[34]0 and cpu32, did considerable work on i960
26488including a COFF port (including considerable amounts of reverse
26489engineering), a SPARC opcode file rewrite, DECstation, rs6000, and
26490hp300hpux host ports, updated "know" assertions and made them work,
26491much other reorganization, cleanup, and lint.
26492
26493   Ken Raeburn wrote the high-level BFD interface code to replace most
26494of the code in format-specific I/O modules.
26495
26496   The original VMS support was contributed by David L. Kashtan.  Eric
26497Youngdale has done much work with it since.
26498
26499   The Intel 80386 machine description was written by Eliot Dresselhaus.
26500
26501   Minh Tran-Le at IntelliCorp contributed some AIX 386 support.
26502
26503   The Motorola 88k machine description was contributed by Devon Bowen
26504of Buffalo University and Torbjorn Granlund of the Swedish Institute of
26505Computer Science.
26506
26507   Keith Knowles at the Open Software Foundation wrote the original
26508MIPS back end (`tc-mips.c', `tc-mips.h'), and contributed Rose format
26509support (which hasn't been merged in yet).  Ralph Campbell worked with
26510the MIPS code to support a.out format.
26511
26512   Support for the Zilog Z8k and Renesas H8/300 processors (tc-z8k,
26513tc-h8300), and IEEE 695 object file format (obj-ieee), was written by
26514Steve Chamberlain of Cygnus Support.  Steve also modified the COFF back
26515end to use BFD for some low-level operations, for use with the H8/300
26516and AMD 29k targets.
26517
26518   John Gilmore built the AMD 29000 support, added `.include' support,
26519and simplified the configuration of which versions accept which
26520directives.  He updated the 68k machine description so that Motorola's
26521opcodes always produced fixed-size instructions (e.g., `jsr'), while
26522synthetic instructions remained shrinkable (`jbsr').  John fixed many
26523bugs, including true tested cross-compilation support, and one bug in
26524relaxation that took a week and required the proverbial one-bit fix.
26525
26526   Ian Lance Taylor of Cygnus Support merged the Motorola and MIT
26527syntax for the 68k, completed support for some COFF targets (68k, i386
26528SVR3, and SCO Unix), added support for MIPS ECOFF and ELF targets,
26529wrote the initial RS/6000 and PowerPC assembler, and made a few other
26530minor patches.
26531
26532   Steve Chamberlain made GAS able to generate listings.
26533
26534   Hewlett-Packard contributed support for the HP9000/300.
26535
26536   Jeff Law wrote GAS and BFD support for the native HPPA object format
26537(SOM) along with a fairly extensive HPPA testsuite (for both SOM and
26538ELF object formats).  This work was supported by both the Center for
26539Software Science at the University of Utah and Cygnus Support.
26540
26541   Support for ELF format files has been worked on by Mark Eichin of
26542Cygnus Support (original, incomplete implementation for SPARC), Pete
26543Hoogenboom and Jeff Law at the University of Utah (HPPA mainly),
26544Michael Meissner of the Open Software Foundation (i386 mainly), and Ken
26545Raeburn of Cygnus Support (sparc, and some initial 64-bit support).
26546
26547   Linas Vepstas added GAS support for the ESA/390 "IBM 370"
26548architecture.
26549
26550   Richard Henderson rewrote the Alpha assembler. Klaus Kaempf wrote
26551GAS and BFD support for openVMS/Alpha.
26552
26553   Timothy Wall, Michael Hayes, and Greg Smart contributed to the
26554various tic* flavors.
26555
26556   David Heine, Sterling Augustine, Bob Wilson and John Ruttenberg from
26557Tensilica, Inc. added support for Xtensa processors.
26558
26559   Several engineers at Cygnus Support have also provided many small
26560bug fixes and configuration enhancements.
26561
26562   Jon Beniston added support for the Lattice Mico32 architecture.
26563
26564   Many others have contributed large or small bugfixes and
26565enhancements.  If you have contributed significant work and are not
26566mentioned on this list, and want to be, let us know.  Some of the
26567history has been lost; we are not intentionally leaving anyone out.
26568
26569   ---------- Footnotes ----------
26570
26571   (1) Any more details?
26572
26573
26574File: as.info,  Node: GNU Free Documentation License,  Next: AS Index,  Prev: Acknowledgements,  Up: Top
26575
26576Appendix A GNU Free Documentation License
26577*****************************************
26578
26579                     Version 1.3, 3 November 2008
26580
26581     Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
26582     `http://fsf.org/'
26583
26584     Everyone is permitted to copy and distribute verbatim copies
26585     of this license document, but changing it is not allowed.
26586
26587  0. PREAMBLE
26588
26589     The purpose of this License is to make a manual, textbook, or other
26590     functional and useful document "free" in the sense of freedom: to
26591     assure everyone the effective freedom to copy and redistribute it,
26592     with or without modifying it, either commercially or
26593     noncommercially.  Secondarily, this License preserves for the
26594     author and publisher a way to get credit for their work, while not
26595     being considered responsible for modifications made by others.
26596
26597     This License is a kind of "copyleft", which means that derivative
26598     works of the document must themselves be free in the same sense.
26599     It complements the GNU General Public License, which is a copyleft
26600     license designed for free software.
26601
26602     We have designed this License in order to use it for manuals for
26603     free software, because free software needs free documentation: a
26604     free program should come with manuals providing the same freedoms
26605     that the software does.  But this License is not limited to
26606     software manuals; it can be used for any textual work, regardless
26607     of subject matter or whether it is published as a printed book.
26608     We recommend this License principally for works whose purpose is
26609     instruction or reference.
26610
26611  1. APPLICABILITY AND DEFINITIONS
26612
26613     This License applies to any manual or other work, in any medium,
26614     that contains a notice placed by the copyright holder saying it
26615     can be distributed under the terms of this License.  Such a notice
26616     grants a world-wide, royalty-free license, unlimited in duration,
26617     to use that work under the conditions stated herein.  The
26618     "Document", below, refers to any such manual or work.  Any member
26619     of the public is a licensee, and is addressed as "you".  You
26620     accept the license if you copy, modify or distribute the work in a
26621     way requiring permission under copyright law.
26622
26623     A "Modified Version" of the Document means any work containing the
26624     Document or a portion of it, either copied verbatim, or with
26625     modifications and/or translated into another language.
26626
26627     A "Secondary Section" is a named appendix or a front-matter section
26628     of the Document that deals exclusively with the relationship of the
26629     publishers or authors of the Document to the Document's overall
26630     subject (or to related matters) and contains nothing that could
26631     fall directly within that overall subject.  (Thus, if the Document
26632     is in part a textbook of mathematics, a Secondary Section may not
26633     explain any mathematics.)  The relationship could be a matter of
26634     historical connection with the subject or with related matters, or
26635     of legal, commercial, philosophical, ethical or political position
26636     regarding them.
26637
26638     The "Invariant Sections" are certain Secondary Sections whose
26639     titles are designated, as being those of Invariant Sections, in
26640     the notice that says that the Document is released under this
26641     License.  If a section does not fit the above definition of
26642     Secondary then it is not allowed to be designated as Invariant.
26643     The Document may contain zero Invariant Sections.  If the Document
26644     does not identify any Invariant Sections then there are none.
26645
26646     The "Cover Texts" are certain short passages of text that are
26647     listed, as Front-Cover Texts or Back-Cover Texts, in the notice
26648     that says that the Document is released under this License.  A
26649     Front-Cover Text may be at most 5 words, and a Back-Cover Text may
26650     be at most 25 words.
26651
26652     A "Transparent" copy of the Document means a machine-readable copy,
26653     represented in a format whose specification is available to the
26654     general public, that is suitable for revising the document
26655     straightforwardly with generic text editors or (for images
26656     composed of pixels) generic paint programs or (for drawings) some
26657     widely available drawing editor, and that is suitable for input to
26658     text formatters or for automatic translation to a variety of
26659     formats suitable for input to text formatters.  A copy made in an
26660     otherwise Transparent file format whose markup, or absence of
26661     markup, has been arranged to thwart or discourage subsequent
26662     modification by readers is not Transparent.  An image format is
26663     not Transparent if used for any substantial amount of text.  A
26664     copy that is not "Transparent" is called "Opaque".
26665
26666     Examples of suitable formats for Transparent copies include plain
26667     ASCII without markup, Texinfo input format, LaTeX input format,
26668     SGML or XML using a publicly available DTD, and
26669     standard-conforming simple HTML, PostScript or PDF designed for
26670     human modification.  Examples of transparent image formats include
26671     PNG, XCF and JPG.  Opaque formats include proprietary formats that
26672     can be read and edited only by proprietary word processors, SGML or
26673     XML for which the DTD and/or processing tools are not generally
26674     available, and the machine-generated HTML, PostScript or PDF
26675     produced by some word processors for output purposes only.
26676
26677     The "Title Page" means, for a printed book, the title page itself,
26678     plus such following pages as are needed to hold, legibly, the
26679     material this License requires to appear in the title page.  For
26680     works in formats which do not have any title page as such, "Title
26681     Page" means the text near the most prominent appearance of the
26682     work's title, preceding the beginning of the body of the text.
26683
26684     The "publisher" means any person or entity that distributes copies
26685     of the Document to the public.
26686
26687     A section "Entitled XYZ" means a named subunit of the Document
26688     whose title either is precisely XYZ or contains XYZ in parentheses
26689     following text that translates XYZ in another language.  (Here XYZ
26690     stands for a specific section name mentioned below, such as
26691     "Acknowledgements", "Dedications", "Endorsements", or "History".)
26692     To "Preserve the Title" of such a section when you modify the
26693     Document means that it remains a section "Entitled XYZ" according
26694     to this definition.
26695
26696     The Document may include Warranty Disclaimers next to the notice
26697     which states that this License applies to the Document.  These
26698     Warranty Disclaimers are considered to be included by reference in
26699     this License, but only as regards disclaiming warranties: any other
26700     implication that these Warranty Disclaimers may have is void and
26701     has no effect on the meaning of this License.
26702
26703  2. VERBATIM COPYING
26704
26705     You may copy and distribute the Document in any medium, either
26706     commercially or noncommercially, provided that this License, the
26707     copyright notices, and the license notice saying this License
26708     applies to the Document are reproduced in all copies, and that you
26709     add no other conditions whatsoever to those of this License.  You
26710     may not use technical measures to obstruct or control the reading
26711     or further copying of the copies you make or distribute.  However,
26712     you may accept compensation in exchange for copies.  If you
26713     distribute a large enough number of copies you must also follow
26714     the conditions in section 3.
26715
26716     You may also lend copies, under the same conditions stated above,
26717     and you may publicly display copies.
26718
26719  3. COPYING IN QUANTITY
26720
26721     If you publish printed copies (or copies in media that commonly
26722     have printed covers) of the Document, numbering more than 100, and
26723     the Document's license notice requires Cover Texts, you must
26724     enclose the copies in covers that carry, clearly and legibly, all
26725     these Cover Texts: Front-Cover Texts on the front cover, and
26726     Back-Cover Texts on the back cover.  Both covers must also clearly
26727     and legibly identify you as the publisher of these copies.  The
26728     front cover must present the full title with all words of the
26729     title equally prominent and visible.  You may add other material
26730     on the covers in addition.  Copying with changes limited to the
26731     covers, as long as they preserve the title of the Document and
26732     satisfy these conditions, can be treated as verbatim copying in
26733     other respects.
26734
26735     If the required texts for either cover are too voluminous to fit
26736     legibly, you should put the first ones listed (as many as fit
26737     reasonably) on the actual cover, and continue the rest onto
26738     adjacent pages.
26739
26740     If you publish or distribute Opaque copies of the Document
26741     numbering more than 100, you must either include a
26742     machine-readable Transparent copy along with each Opaque copy, or
26743     state in or with each Opaque copy a computer-network location from
26744     which the general network-using public has access to download
26745     using public-standard network protocols a complete Transparent
26746     copy of the Document, free of added material.  If you use the
26747     latter option, you must take reasonably prudent steps, when you
26748     begin distribution of Opaque copies in quantity, to ensure that
26749     this Transparent copy will remain thus accessible at the stated
26750     location until at least one year after the last time you
26751     distribute an Opaque copy (directly or through your agents or
26752     retailers) of that edition to the public.
26753
26754     It is requested, but not required, that you contact the authors of
26755     the Document well before redistributing any large number of
26756     copies, to give them a chance to provide you with an updated
26757     version of the Document.
26758
26759  4. MODIFICATIONS
26760
26761     You may copy and distribute a Modified Version of the Document
26762     under the conditions of sections 2 and 3 above, provided that you
26763     release the Modified Version under precisely this License, with
26764     the Modified Version filling the role of the Document, thus
26765     licensing distribution and modification of the Modified Version to
26766     whoever possesses a copy of it.  In addition, you must do these
26767     things in the Modified Version:
26768
26769       A. Use in the Title Page (and on the covers, if any) a title
26770          distinct from that of the Document, and from those of
26771          previous versions (which should, if there were any, be listed
26772          in the History section of the Document).  You may use the
26773          same title as a previous version if the original publisher of
26774          that version gives permission.
26775
26776       B. List on the Title Page, as authors, one or more persons or
26777          entities responsible for authorship of the modifications in
26778          the Modified Version, together with at least five of the
26779          principal authors of the Document (all of its principal
26780          authors, if it has fewer than five), unless they release you
26781          from this requirement.
26782
26783       C. State on the Title page the name of the publisher of the
26784          Modified Version, as the publisher.
26785
26786       D. Preserve all the copyright notices of the Document.
26787
26788       E. Add an appropriate copyright notice for your modifications
26789          adjacent to the other copyright notices.
26790
26791       F. Include, immediately after the copyright notices, a license
26792          notice giving the public permission to use the Modified
26793          Version under the terms of this License, in the form shown in
26794          the Addendum below.
26795
26796       G. Preserve in that license notice the full lists of Invariant
26797          Sections and required Cover Texts given in the Document's
26798          license notice.
26799
26800       H. Include an unaltered copy of this License.
26801
26802       I. Preserve the section Entitled "History", Preserve its Title,
26803          and add to it an item stating at least the title, year, new
26804          authors, and publisher of the Modified Version as given on
26805          the Title Page.  If there is no section Entitled "History" in
26806          the Document, create one stating the title, year, authors,
26807          and publisher of the Document as given on its Title Page,
26808          then add an item describing the Modified Version as stated in
26809          the previous sentence.
26810
26811       J. Preserve the network location, if any, given in the Document
26812          for public access to a Transparent copy of the Document, and
26813          likewise the network locations given in the Document for
26814          previous versions it was based on.  These may be placed in
26815          the "History" section.  You may omit a network location for a
26816          work that was published at least four years before the
26817          Document itself, or if the original publisher of the version
26818          it refers to gives permission.
26819
26820       K. For any section Entitled "Acknowledgements" or "Dedications",
26821          Preserve the Title of the section, and preserve in the
26822          section all the substance and tone of each of the contributor
26823          acknowledgements and/or dedications given therein.
26824
26825       L. Preserve all the Invariant Sections of the Document,
26826          unaltered in their text and in their titles.  Section numbers
26827          or the equivalent are not considered part of the section
26828          titles.
26829
26830       M. Delete any section Entitled "Endorsements".  Such a section
26831          may not be included in the Modified Version.
26832
26833       N. Do not retitle any existing section to be Entitled
26834          "Endorsements" or to conflict in title with any Invariant
26835          Section.
26836
26837       O. Preserve any Warranty Disclaimers.
26838
26839     If the Modified Version includes new front-matter sections or
26840     appendices that qualify as Secondary Sections and contain no
26841     material copied from the Document, you may at your option
26842     designate some or all of these sections as invariant.  To do this,
26843     add their titles to the list of Invariant Sections in the Modified
26844     Version's license notice.  These titles must be distinct from any
26845     other section titles.
26846
26847     You may add a section Entitled "Endorsements", provided it contains
26848     nothing but endorsements of your Modified Version by various
26849     parties--for example, statements of peer review or that the text
26850     has been approved by an organization as the authoritative
26851     definition of a standard.
26852
26853     You may add a passage of up to five words as a Front-Cover Text,
26854     and a passage of up to 25 words as a Back-Cover Text, to the end
26855     of the list of Cover Texts in the Modified Version.  Only one
26856     passage of Front-Cover Text and one of Back-Cover Text may be
26857     added by (or through arrangements made by) any one entity.  If the
26858     Document already includes a cover text for the same cover,
26859     previously added by you or by arrangement made by the same entity
26860     you are acting on behalf of, you may not add another; but you may
26861     replace the old one, on explicit permission from the previous
26862     publisher that added the old one.
26863
26864     The author(s) and publisher(s) of the Document do not by this
26865     License give permission to use their names for publicity for or to
26866     assert or imply endorsement of any Modified Version.
26867
26868  5. COMBINING DOCUMENTS
26869
26870     You may combine the Document with other documents released under
26871     this License, under the terms defined in section 4 above for
26872     modified versions, provided that you include in the combination
26873     all of the Invariant Sections of all of the original documents,
26874     unmodified, and list them all as Invariant Sections of your
26875     combined work in its license notice, and that you preserve all
26876     their Warranty Disclaimers.
26877
26878     The combined work need only contain one copy of this License, and
26879     multiple identical Invariant Sections may be replaced with a single
26880     copy.  If there are multiple Invariant Sections with the same name
26881     but different contents, make the title of each such section unique
26882     by adding at the end of it, in parentheses, the name of the
26883     original author or publisher of that section if known, or else a
26884     unique number.  Make the same adjustment to the section titles in
26885     the list of Invariant Sections in the license notice of the
26886     combined work.
26887
26888     In the combination, you must combine any sections Entitled
26889     "History" in the various original documents, forming one section
26890     Entitled "History"; likewise combine any sections Entitled
26891     "Acknowledgements", and any sections Entitled "Dedications".  You
26892     must delete all sections Entitled "Endorsements."
26893
26894  6. COLLECTIONS OF DOCUMENTS
26895
26896     You may make a collection consisting of the Document and other
26897     documents released under this License, and replace the individual
26898     copies of this License in the various documents with a single copy
26899     that is included in the collection, provided that you follow the
26900     rules of this License for verbatim copying of each of the
26901     documents in all other respects.
26902
26903     You may extract a single document from such a collection, and
26904     distribute it individually under this License, provided you insert
26905     a copy of this License into the extracted document, and follow
26906     this License in all other respects regarding verbatim copying of
26907     that document.
26908
26909  7. AGGREGATION WITH INDEPENDENT WORKS
26910
26911     A compilation of the Document or its derivatives with other
26912     separate and independent documents or works, in or on a volume of
26913     a storage or distribution medium, is called an "aggregate" if the
26914     copyright resulting from the compilation is not used to limit the
26915     legal rights of the compilation's users beyond what the individual
26916     works permit.  When the Document is included in an aggregate, this
26917     License does not apply to the other works in the aggregate which
26918     are not themselves derivative works of the Document.
26919
26920     If the Cover Text requirement of section 3 is applicable to these
26921     copies of the Document, then if the Document is less than one half
26922     of the entire aggregate, the Document's Cover Texts may be placed
26923     on covers that bracket the Document within the aggregate, or the
26924     electronic equivalent of covers if the Document is in electronic
26925     form.  Otherwise they must appear on printed covers that bracket
26926     the whole aggregate.
26927
26928  8. TRANSLATION
26929
26930     Translation is considered a kind of modification, so you may
26931     distribute translations of the Document under the terms of section
26932     4.  Replacing Invariant Sections with translations requires special
26933     permission from their copyright holders, but you may include
26934     translations of some or all Invariant Sections in addition to the
26935     original versions of these Invariant Sections.  You may include a
26936     translation of this License, and all the license notices in the
26937     Document, and any Warranty Disclaimers, provided that you also
26938     include the original English version of this License and the
26939     original versions of those notices and disclaimers.  In case of a
26940     disagreement between the translation and the original version of
26941     this License or a notice or disclaimer, the original version will
26942     prevail.
26943
26944     If a section in the Document is Entitled "Acknowledgements",
26945     "Dedications", or "History", the requirement (section 4) to
26946     Preserve its Title (section 1) will typically require changing the
26947     actual title.
26948
26949  9. TERMINATION
26950
26951     You may not copy, modify, sublicense, or distribute the Document
26952     except as expressly provided under this License.  Any attempt
26953     otherwise to copy, modify, sublicense, or distribute it is void,
26954     and will automatically terminate your rights under this License.
26955
26956     However, if you cease all violation of this License, then your
26957     license from a particular copyright holder is reinstated (a)
26958     provisionally, unless and until the copyright holder explicitly
26959     and finally terminates your license, and (b) permanently, if the
26960     copyright holder fails to notify you of the violation by some
26961     reasonable means prior to 60 days after the cessation.
26962
26963     Moreover, your license from a particular copyright holder is
26964     reinstated permanently if the copyright holder notifies you of the
26965     violation by some reasonable means, this is the first time you have
26966     received notice of violation of this License (for any work) from
26967     that copyright holder, and you cure the violation prior to 30 days
26968     after your receipt of the notice.
26969
26970     Termination of your rights under this section does not terminate
26971     the licenses of parties who have received copies or rights from
26972     you under this License.  If your rights have been terminated and
26973     not permanently reinstated, receipt of a copy of some or all of
26974     the same material does not give you any rights to use it.
26975
26976 10. FUTURE REVISIONS OF THIS LICENSE
26977
26978     The Free Software Foundation may publish new, revised versions of
26979     the GNU Free Documentation License from time to time.  Such new
26980     versions will be similar in spirit to the present version, but may
26981     differ in detail to address new problems or concerns.  See
26982     `http://www.gnu.org/copyleft/'.
26983
26984     Each version of the License is given a distinguishing version
26985     number.  If the Document specifies that a particular numbered
26986     version of this License "or any later version" applies to it, you
26987     have the option of following the terms and conditions either of
26988     that specified version or of any later version that has been
26989     published (not as a draft) by the Free Software Foundation.  If
26990     the Document does not specify a version number of this License,
26991     you may choose any version ever published (not as a draft) by the
26992     Free Software Foundation.  If the Document specifies that a proxy
26993     can decide which future versions of this License can be used, that
26994     proxy's public statement of acceptance of a version permanently
26995     authorizes you to choose that version for the Document.
26996
26997 11. RELICENSING
26998
26999     "Massive Multiauthor Collaboration Site" (or "MMC Site") means any
27000     World Wide Web server that publishes copyrightable works and also
27001     provides prominent facilities for anybody to edit those works.  A
27002     public wiki that anybody can edit is an example of such a server.
27003     A "Massive Multiauthor Collaboration" (or "MMC") contained in the
27004     site means any set of copyrightable works thus published on the MMC
27005     site.
27006
27007     "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0
27008     license published by Creative Commons Corporation, a not-for-profit
27009     corporation with a principal place of business in San Francisco,
27010     California, as well as future copyleft versions of that license
27011     published by that same organization.
27012
27013     "Incorporate" means to publish or republish a Document, in whole or
27014     in part, as part of another Document.
27015
27016     An MMC is "eligible for relicensing" if it is licensed under this
27017     License, and if all works that were first published under this
27018     License somewhere other than this MMC, and subsequently
27019     incorporated in whole or in part into the MMC, (1) had no cover
27020     texts or invariant sections, and (2) were thus incorporated prior
27021     to November 1, 2008.
27022
27023     The operator of an MMC Site may republish an MMC contained in the
27024     site under CC-BY-SA on the same site at any time before August 1,
27025     2009, provided the MMC is eligible for relicensing.
27026
27027
27028ADDENDUM: How to use this License for your documents
27029====================================================
27030
27031To use this License in a document you have written, include a copy of
27032the License in the document and put the following copyright and license
27033notices just after the title page:
27034
27035       Copyright (C)  YEAR  YOUR NAME.
27036       Permission is granted to copy, distribute and/or modify this document
27037       under the terms of the GNU Free Documentation License, Version 1.3
27038       or any later version published by the Free Software Foundation;
27039       with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
27040       Texts.  A copy of the license is included in the section entitled ``GNU
27041       Free Documentation License''.
27042
27043   If you have Invariant Sections, Front-Cover Texts and Back-Cover
27044Texts, replace the "with...Texts." line with this:
27045
27046         with the Invariant Sections being LIST THEIR TITLES, with
27047         the Front-Cover Texts being LIST, and with the Back-Cover Texts
27048         being LIST.
27049
27050   If you have Invariant Sections without Cover Texts, or some other
27051combination of the three, merge those two alternatives to suit the
27052situation.
27053
27054   If your document contains nontrivial examples of program code, we
27055recommend releasing these examples in parallel under your choice of
27056free software license, such as the GNU General Public License, to
27057permit their use in free software.
27058
27059
27060File: as.info,  Node: AS Index,  Prev: GNU Free Documentation License,  Up: Top
27061
27062AS Index
27063********
27064
27065�[index�]
27066* Menu:
27067
27068*  \" (doublequote character):           Strings.            (line   43)
27069*  \\ (\ character):                     Strings.            (line   40)
27070*  \b (backspace character):             Strings.            (line   15)
27071*  \DDD (octal character code):          Strings.            (line   30)
27072*  \f (formfeed character):              Strings.            (line   18)
27073*  \n (newline character):               Strings.            (line   21)
27074*  \r (carriage return character):       Strings.            (line   24)
27075*  \t (tab):                             Strings.            (line   27)
27076*  \XD... (hex character code):          Strings.            (line   36)
27077* #:                                     Comments.           (line   33)
27078* #APP:                                  Preprocessing.      (line   28)
27079* #NO_APP:                               Preprocessing.      (line   28)
27080* $ in symbol names <1>:                 SH-Chars.           (line   15)
27081* $ in symbol names <2>:                 D10V-Chars.         (line   53)
27082* $ in symbol names <3>:                 Meta-Chars.         (line   10)
27083* $ in symbol names:                     D30V-Chars.         (line   70)
27084* $a:                                    ARM Mapping Symbols.
27085                                                             (line    9)
27086* $acos math builtin, TIC54X:            TIC54X-Builtins.    (line   10)
27087* $asin math builtin, TIC54X:            TIC54X-Builtins.    (line   13)
27088* $atan math builtin, TIC54X:            TIC54X-Builtins.    (line   16)
27089* $atan2 math builtin, TIC54X:           TIC54X-Builtins.    (line   19)
27090* $ceil math builtin, TIC54X:            TIC54X-Builtins.    (line   22)
27091* $cos math builtin, TIC54X:             TIC54X-Builtins.    (line   28)
27092* $cosh math builtin, TIC54X:            TIC54X-Builtins.    (line   25)
27093* $cvf math builtin, TIC54X:             TIC54X-Builtins.    (line   31)
27094* $cvi math builtin, TIC54X:             TIC54X-Builtins.    (line   34)
27095* $d <1>:                                AArch64 Mapping Symbols.
27096                                                             (line   12)
27097* $d:                                    ARM Mapping Symbols.
27098                                                             (line   15)
27099* $exp math builtin, TIC54X:             TIC54X-Builtins.    (line   37)
27100* $fabs math builtin, TIC54X:            TIC54X-Builtins.    (line   40)
27101* $firstch subsym builtin, TIC54X:       TIC54X-Macros.      (line   26)
27102* $floor math builtin, TIC54X:           TIC54X-Builtins.    (line   43)
27103* $fmod math builtin, TIC54X:            TIC54X-Builtins.    (line   47)
27104* $int math builtin, TIC54X:             TIC54X-Builtins.    (line   50)
27105* $iscons subsym builtin, TIC54X:        TIC54X-Macros.      (line   43)
27106* $isdefed subsym builtin, TIC54X:       TIC54X-Macros.      (line   34)
27107* $ismember subsym builtin, TIC54X:      TIC54X-Macros.      (line   38)
27108* $isname subsym builtin, TIC54X:        TIC54X-Macros.      (line   47)
27109* $isreg subsym builtin, TIC54X:         TIC54X-Macros.      (line   50)
27110* $lastch subsym builtin, TIC54X:        TIC54X-Macros.      (line   30)
27111* $ldexp math builtin, TIC54X:           TIC54X-Builtins.    (line   53)
27112* $log math builtin, TIC54X:             TIC54X-Builtins.    (line   59)
27113* $log10 math builtin, TIC54X:           TIC54X-Builtins.    (line   56)
27114* $max math builtin, TIC54X:             TIC54X-Builtins.    (line   62)
27115* $min math builtin, TIC54X:             TIC54X-Builtins.    (line   65)
27116* $pow math builtin, TIC54X:             TIC54X-Builtins.    (line   68)
27117* $round math builtin, TIC54X:           TIC54X-Builtins.    (line   71)
27118* $sgn math builtin, TIC54X:             TIC54X-Builtins.    (line   74)
27119* $sin math builtin, TIC54X:             TIC54X-Builtins.    (line   77)
27120* $sinh math builtin, TIC54X:            TIC54X-Builtins.    (line   80)
27121* $sqrt math builtin, TIC54X:            TIC54X-Builtins.    (line   83)
27122* $structacc subsym builtin, TIC54X:     TIC54X-Macros.      (line   57)
27123* $structsz subsym builtin, TIC54X:      TIC54X-Macros.      (line   54)
27124* $symcmp subsym builtin, TIC54X:        TIC54X-Macros.      (line   23)
27125* $symlen subsym builtin, TIC54X:        TIC54X-Macros.      (line   20)
27126* $t:                                    ARM Mapping Symbols.
27127                                                             (line   12)
27128* $tan math builtin, TIC54X:             TIC54X-Builtins.    (line   86)
27129* $tanh math builtin, TIC54X:            TIC54X-Builtins.    (line   89)
27130* $trunc math builtin, TIC54X:           TIC54X-Builtins.    (line   92)
27131* $x:                                    AArch64 Mapping Symbols.
27132                                                             (line    9)
27133* %gp:                                   RX-Modifiers.       (line    6)
27134* %gpreg:                                RX-Modifiers.       (line   22)
27135* %pidreg:                               RX-Modifiers.       (line   25)
27136* -+ option, VAX/VMS:                    VAX-Opts.           (line   71)
27137* --:                                    Command Line.       (line   10)
27138* --32 option, i386:                     i386-Options.       (line    8)
27139* --32 option, x86-64:                   i386-Options.       (line    8)
27140* --64 option, i386:                     i386-Options.       (line    8)
27141* --64 option, x86-64:                   i386-Options.       (line    8)
27142* --abi-call0:                           Xtensa Options.     (line   83)
27143* --abi-windowed:                        Xtensa Options.     (line   83)
27144* --absolute-literals:                   Xtensa Options.     (line   40)
27145* --allow-reg-prefix:                    SH Options.         (line    9)
27146* --alternate:                           alternate.          (line    6)
27147* --auto-litpools:                       Xtensa Options.     (line   23)
27148* --base-size-default-16:                M68K-Opts.          (line   65)
27149* --base-size-default-32:                M68K-Opts.          (line   65)
27150* --big:                                 SH Options.         (line    9)
27151* --bitwise-or option, M680x0:           M68K-Opts.          (line   58)
27152* --compress-debug-sections= option:     Overview.           (line  378)
27153* --disp-size-default-16:                M68K-Opts.          (line   74)
27154* --disp-size-default-32:                M68K-Opts.          (line   74)
27155* --divide option, i386:                 i386-Options.       (line   25)
27156* --dsp:                                 SH Options.         (line    9)
27157* --emulation=crisaout command-line option, CRIS: CRIS-Opts. (line    9)
27158* --emulation=criself command-line option, CRIS: CRIS-Opts.  (line    9)
27159* --enforce-aligned-data:                Sparc-Aligned-Data. (line   11)
27160* --fatal-warnings:                      W.                  (line   16)
27161* --fdpic:                               SH Options.         (line   31)
27162* --fix-v4bx command-line option, ARM:   ARM Options.        (line  382)
27163* --fixed-special-register-names command-line option, MMIX: MMIX-Opts.
27164                                                             (line    8)
27165* --force-long-branches:                 M68HC11-Opts.       (line   82)
27166* --generate-example:                    M68HC11-Opts.       (line   99)
27167* --globalize-symbols command-line option, MMIX: MMIX-Opts.  (line   12)
27168* --gnu-syntax command-line option, MMIX: MMIX-Opts.         (line   16)
27169* --linker-allocated-gregs command-line option, MMIX: MMIX-Opts.
27170                                                             (line   67)
27171* --listing-cont-lines:                  listing.            (line   34)
27172* --listing-lhs-width:                   listing.            (line   16)
27173* --listing-lhs-width2:                  listing.            (line   21)
27174* --listing-rhs-width:                   listing.            (line   28)
27175* --little:                              SH Options.         (line    9)
27176* --longcalls:                           Xtensa Options.     (line   54)
27177* --march=ARCHITECTURE command-line option, CRIS: CRIS-Opts. (line   34)
27178* --MD:                                  MD.                 (line    6)
27179* --mul-bug-abort command-line option, CRIS: CRIS-Opts.      (line   62)
27180* --no-absolute-literals:                Xtensa Options.     (line   40)
27181* --no-auto-litpools:                    Xtensa Options.     (line   23)
27182* --no-expand command-line option, MMIX: MMIX-Opts.          (line   31)
27183* --no-longcalls:                        Xtensa Options.     (line   54)
27184* --no-merge-gregs command-line option, MMIX: MMIX-Opts.     (line   36)
27185* --no-mul-bug-abort command-line option, CRIS: CRIS-Opts.   (line   62)
27186* --no-pad-sections:                     no-pad-sections.    (line    6)
27187* --no-predefined-syms command-line option, MMIX: MMIX-Opts. (line   22)
27188* --no-pushj-stubs command-line option, MMIX: MMIX-Opts.     (line   54)
27189* --no-stubs command-line option, MMIX:  MMIX-Opts.          (line   54)
27190* --no-target-align:                     Xtensa Options.     (line   47)
27191* --no-text-section-literals:            Xtensa Options.     (line    7)
27192* --no-trampolines:                      Xtensa Options.     (line   75)
27193* --no-transform:                        Xtensa Options.     (line   63)
27194* --no-underscore command-line option, CRIS: CRIS-Opts.      (line   15)
27195* --no-warn:                             W.                  (line   11)
27196* --pcrel:                               M68K-Opts.          (line   86)
27197* --pic command-line option, CRIS:       CRIS-Opts.          (line   27)
27198* --print-insn-syntax <1>:               M68HC11-Opts.       (line   88)
27199* --print-insn-syntax:                   XGATE-Opts.         (line   25)
27200* --print-opcodes <1>:                   M68HC11-Opts.       (line   92)
27201* --print-opcodes:                       XGATE-Opts.         (line   29)
27202* --register-prefix-optional option, M680x0: M68K-Opts.      (line   45)
27203* --relax:                               SH Options.         (line    9)
27204* --relax command-line option, MMIX:     MMIX-Opts.          (line   19)
27205* --rename-section:                      Xtensa Options.     (line   71)
27206* --renesas:                             SH Options.         (line    9)
27207* --sectname-subst:                      Section.            (line   81)
27208* --short-branches:                      M68HC11-Opts.       (line   67)
27209* --small:                               SH Options.         (line    9)
27210* --statistics:                          statistics.         (line    6)
27211* --strict-direct-mode:                  M68HC11-Opts.       (line   57)
27212* --target-align:                        Xtensa Options.     (line   47)
27213* --text-section-literals:               Xtensa Options.     (line    7)
27214* --traditional-format:                  traditional-format. (line    6)
27215* --trampolines:                         Xtensa Options.     (line   75)
27216* --transform:                           Xtensa Options.     (line   63)
27217* --underscore command-line option, CRIS: CRIS-Opts.         (line   15)
27218* --warn:                                W.                  (line   19)
27219* --x32 option, i386:                    i386-Options.       (line    8)
27220* --x32 option, x86-64:                  i386-Options.       (line    8)
27221* --xgate-ramoffset:                     M68HC11-Opts.       (line   36)
27222* -1 option, VAX/VMS:                    VAX-Opts.           (line   77)
27223* -32addr command-line option, Alpha:    Alpha Options.      (line   57)
27224* -a:                                    a.                  (line    6)
27225* -ac:                                   a.                  (line    6)
27226* -ad:                                   a.                  (line    6)
27227* -ag:                                   a.                  (line    6)
27228* -ah:                                   a.                  (line    6)
27229* -al:                                   a.                  (line    6)
27230* -Aleon:                                Sparc-Opts.         (line   25)
27231* -an:                                   a.                  (line    6)
27232* -as:                                   a.                  (line    6)
27233* -Asparc:                               Sparc-Opts.         (line   25)
27234* -Asparcfmaf:                           Sparc-Opts.         (line   25)
27235* -Asparcima:                            Sparc-Opts.         (line   25)
27236* -Asparclet:                            Sparc-Opts.         (line   25)
27237* -Asparclite:                           Sparc-Opts.         (line   25)
27238* -Asparcvis:                            Sparc-Opts.         (line   25)
27239* -Asparcvis2:                           Sparc-Opts.         (line   25)
27240* -Asparcvis3:                           Sparc-Opts.         (line   25)
27241* -Asparcvis3r:                          Sparc-Opts.         (line   25)
27242* -Av6:                                  Sparc-Opts.         (line   25)
27243* -Av7:                                  Sparc-Opts.         (line   25)
27244* -Av8:                                  Sparc-Opts.         (line   25)
27245* -Av9:                                  Sparc-Opts.         (line   25)
27246* -Av9a:                                 Sparc-Opts.         (line   25)
27247* -Av9b:                                 Sparc-Opts.         (line   25)
27248* -Av9c:                                 Sparc-Opts.         (line   25)
27249* -Av9d:                                 Sparc-Opts.         (line   25)
27250* -Av9e:                                 Sparc-Opts.         (line   25)
27251* -Av9m:                                 Sparc-Opts.         (line   25)
27252* -Av9v:                                 Sparc-Opts.         (line   25)
27253* -big option, M32R:                     M32R-Opts.          (line   35)
27254* -colonless command-line option, Z80:   Z80 Options.        (line   34)
27255* -D:                                    D.                  (line    6)
27256* -D, ignored on VAX:                    VAX-Opts.           (line   11)
27257* -d, VAX option:                        VAX-Opts.           (line   16)
27258* -eabi= command-line option, ARM:       ARM Options.        (line  358)
27259* -EB command-line option, AArch64:      AArch64 Options.    (line    6)
27260* -EB command-line option, ARC:          ARC Options.        (line   85)
27261* -EB command-line option, ARM:          ARM Options.        (line  363)
27262* -EB command-line option, BPF:          BPF Options.        (line    6)
27263* -EB option (MIPS):                     MIPS Options.       (line   13)
27264* -EB option, M32R:                      M32R-Opts.          (line   39)
27265* -EB option, TILE-Gx:                   TILE-Gx Options.    (line   11)
27266* -EL command-line option, AArch64:      AArch64 Options.    (line   10)
27267* -EL command-line option, ARC:          ARC Options.        (line   89)
27268* -EL command-line option, ARM:          ARM Options.        (line  374)
27269* -EL command-line option, BPF:          BPF Options.        (line   10)
27270* -EL option (MIPS):                     MIPS Options.       (line   13)
27271* -EL option, M32R:                      M32R-Opts.          (line   32)
27272* -EL option, TILE-Gx:                   TILE-Gx Options.    (line   11)
27273* -f:                                    f.                  (line    6)
27274* -F command-line option, Alpha:         Alpha Options.      (line   57)
27275* -fno-pic option, RISC-V:               RISC-V-Options.     (line   12)
27276* -fp-d command-line option, Z80:        Z80 Options.        (line   45)
27277* -fp-s command-line option, Z80:        Z80 Options.        (line   41)
27278* -fpic option, RISC-V:                  RISC-V-Options.     (line    8)
27279* -G command-line option, Alpha:         Alpha Options.      (line   53)
27280* -g command-line option, Alpha:         Alpha Options.      (line   47)
27281* -G option (MIPS):                      MIPS Options.       (line    8)
27282* -h option, VAX/VMS:                    VAX-Opts.           (line   45)
27283* -H option, VAX/VMS:                    VAX-Opts.           (line   81)
27284* -I PATH:                               I.                  (line    6)
27285* -ignore-parallel-conflicts option, M32RX: M32R-Opts.       (line   87)
27286* -Ip option, M32RX:                     M32R-Opts.          (line   97)
27287* -J, ignored on VAX:                    VAX-Opts.           (line   27)
27288* -K:                                    K.                  (line    6)
27289* -k command-line option, ARM:           ARM Options.        (line  378)
27290* -KPIC option, M32R:                    M32R-Opts.          (line   42)
27291* -KPIC option, MIPS:                    MIPS Options.       (line   21)
27292* -L:                                    L.                  (line    6)
27293* -l option, M680x0:                     M68K-Opts.          (line   33)
27294* -little option, M32R:                  M32R-Opts.          (line   27)
27295* -local-prefix command-line option, Z80: Z80 Options.       (line   29)
27296* -M:                                    M.                  (line    6)
27297* -m11/03:                               PDP-11-Options.     (line  140)
27298* -m11/04:                               PDP-11-Options.     (line  143)
27299* -m11/05:                               PDP-11-Options.     (line  146)
27300* -m11/10:                               PDP-11-Options.     (line  146)
27301* -m11/15:                               PDP-11-Options.     (line  149)
27302* -m11/20:                               PDP-11-Options.     (line  149)
27303* -m11/21:                               PDP-11-Options.     (line  152)
27304* -m11/23:                               PDP-11-Options.     (line  155)
27305* -m11/24:                               PDP-11-Options.     (line  155)
27306* -m11/34:                               PDP-11-Options.     (line  158)
27307* -m11/34a:                              PDP-11-Options.     (line  161)
27308* -m11/35:                               PDP-11-Options.     (line  164)
27309* -m11/40:                               PDP-11-Options.     (line  164)
27310* -m11/44:                               PDP-11-Options.     (line  167)
27311* -m11/45:                               PDP-11-Options.     (line  170)
27312* -m11/50:                               PDP-11-Options.     (line  170)
27313* -m11/53:                               PDP-11-Options.     (line  173)
27314* -m11/55:                               PDP-11-Options.     (line  170)
27315* -m11/60:                               PDP-11-Options.     (line  176)
27316* -m11/70:                               PDP-11-Options.     (line  170)
27317* -m11/73:                               PDP-11-Options.     (line  173)
27318* -m11/83:                               PDP-11-Options.     (line  173)
27319* -m11/84:                               PDP-11-Options.     (line  173)
27320* -m11/93:                               PDP-11-Options.     (line  173)
27321* -m11/94:                               PDP-11-Options.     (line  173)
27322* -m16c option, M16C:                    M32C-Opts.          (line   12)
27323* -m31 option, s390:                     s390 Options.       (line    8)
27324* -m32 option, TILE-Gx:                  TILE-Gx Options.    (line    8)
27325* -m32bit-doubles:                       RX-Opts.            (line    9)
27326* -m32c option, M32C:                    M32C-Opts.          (line    9)
27327* -m32r option, M32R:                    M32R-Opts.          (line   21)
27328* -m32rx option, M32R2:                  M32R-Opts.          (line   17)
27329* -m32rx option, M32RX:                  M32R-Opts.          (line    9)
27330* -m4byte-align command-line option, V850: V850 Options.     (line   90)
27331* -m64 option, s390:                     s390 Options.       (line    8)
27332* -m64 option, TILE-Gx:                  TILE-Gx Options.    (line    8)
27333* -m64bit-doubles:                       RX-Opts.            (line   15)
27334* -m68000 and related options:           M68K-Opts.          (line   98)
27335* -m68hc11:                              M68HC11-Opts.       (line    9)
27336* -m68hc12:                              M68HC11-Opts.       (line   14)
27337* -m68hcs12:                             M68HC11-Opts.       (line   21)
27338* -m8byte-align command-line option, V850: V850 Options.     (line   86)
27339* -m[no-]68851 command-line option, M680x0: M68K-Opts.       (line   21)
27340* -m[no-]68881 command-line option, M680x0: M68K-Opts.       (line   21)
27341* -m[no-]div command-line option, M680x0: M68K-Opts.         (line   21)
27342* -m[no-]emac command-line option, M680x0: M68K-Opts.        (line   21)
27343* -m[no-]float command-line option, M680x0: M68K-Opts.       (line   21)
27344* -m[no-]mac command-line option, M680x0: M68K-Opts.         (line   21)
27345* -m[no-]usp command-line option, M680x0: M68K-Opts.         (line   21)
27346* -mabi= command-line option, AArch64:   AArch64 Options.    (line   14)
27347* -mabi=ABI option, RISC-V:              RISC-V-Options.     (line   33)
27348* -madd-bnd-prefix option, i386:         i386-Options.       (line  163)
27349* -madd-bnd-prefix option, x86-64:       i386-Options.       (line  163)
27350* -malign-branch-boundary= option, i386: i386-Options.       (line  209)
27351* -malign-branch-boundary= option, x86-64: i386-Options.     (line  209)
27352* -malign-branch-prefix-size= option, i386: i386-Options.    (line  224)
27353* -malign-branch-prefix-size= option, x86-64: i386-Options.  (line  224)
27354* -malign-branch= option, i386:          i386-Options.       (line  216)
27355* -malign-branch= option, x86-64:        i386-Options.       (line  216)
27356* -mall:                                 PDP-11-Options.     (line   26)
27357* -mall-enabled command-line option, LM32: LM32 Options.     (line   30)
27358* -mall-extensions:                      PDP-11-Options.     (line   26)
27359* -mall-opcodes command-line option, AVR: AVR Options.       (line  112)
27360* -mamd64 option, x86-64:                i386-Options.       (line  300)
27361* -mapcs-26 command-line option, ARM:    ARM Options.        (line  330)
27362* -mapcs-32 command-line option, ARM:    ARM Options.        (line  330)
27363* -mapcs-float command-line option, ARM: ARM Options.        (line  344)
27364* -mapcs-reentrant command-line option, ARM: ARM Options.    (line  349)
27365* -march-attr option, RISC-V:            RISC-V-Options.     (line   48)
27366* -march= command-line option, AArch64:  AArch64 Options.    (line   44)
27367* -march= command-line option, ARM:      ARM Options.        (line   86)
27368* -march= command-line option, M680x0:   M68K-Opts.          (line    8)
27369* -march= command-line option, TIC6X:    TIC6X Options.      (line    6)
27370* -march= command-line option, Z80:      Z80 Options.        (line    6)
27371* -march= option, i386:                  i386-Options.       (line   32)
27372* -march= option, s390:                  s390 Options.       (line   25)
27373* -march= option, x86-64:                i386-Options.       (line   32)
27374* -march=ISA option, RISC-V:             RISC-V-Options.     (line   15)
27375* -matpcs command-line option, ARM:      ARM Options.        (line  336)
27376* -mavxscalar= option, i386:             i386-Options.       (line  108)
27377* -mavxscalar= option, x86-64:           i386-Options.       (line  108)
27378* -mbarrel-shift-enabled command-line option, LM32: LM32 Options.
27379                                                             (line   12)
27380* -mbig-endian:                          RX-Opts.            (line   20)
27381* -mbig-endian option, RISC-V:           RISC-V-Options.     (line   72)
27382* -mbig-obj option, i386:                i386-Options.       (line  177)
27383* -mbig-obj option, x86-64:              i386-Options.       (line  177)
27384* -mbranches-within-32B-boundaries option, i386: i386-Options.
27385                                                             (line  229)
27386* -mbranches-within-32B-boundaries option, x86-64: i386-Options.
27387                                                             (line  229)
27388* -mbreak-enabled command-line option, LM32: LM32 Options.   (line   27)
27389* -mccs command-line option, ARM:        ARM Options.        (line  391)
27390* -mcis:                                 PDP-11-Options.     (line   32)
27391* -mcode-density command-line option, ARC: ARC Options.      (line   94)
27392* -mconstant-gp command-line option, IA-64: IA-64 Options.   (line    6)
27393* -mCPU command-line option, Alpha:      Alpha Options.      (line    6)
27394* -mcpu option, cpu:                     TIC54X-Opts.        (line   15)
27395* -mcpu=:                                RX-Opts.            (line   75)
27396* -mcpu= command-line option, AArch64:   AArch64 Options.    (line   19)
27397* -mcpu= command-line option, ARM:       ARM Options.        (line    6)
27398* -mcpu= command-line option, Blackfin:  Blackfin Options.   (line    6)
27399* -mcpu= command-line option, M680x0:    M68K-Opts.          (line   14)
27400* -mcpu=CPU command-line option, ARC:    ARC Options.        (line   10)
27401* -mcsm:                                 PDP-11-Options.     (line   43)
27402* -mcsr-check option, RISC-V:            RISC-V-Options.     (line   60)
27403* -mdcache-enabled command-line option, LM32: LM32 Options.  (line   24)
27404* -mdebug command-line option, Alpha:    Alpha Options.      (line   25)
27405* -mdivide-enabled command-line option, LM32: LM32 Options.  (line    9)
27406* -mdollar-hex option, dollar-hex:       S12Z Options.       (line   17)
27407* -mdpfp command-line option, ARC:       ARC Options.        (line  109)
27408* -mdsbt command-line option, TIC6X:     TIC6X Options.      (line   13)
27409* -me option, stderr redirect:           TIC54X-Opts.        (line   20)
27410* -meis:                                 PDP-11-Options.     (line   46)
27411* -mepiphany command-line option, Epiphany: Epiphany Options.
27412                                                             (line    9)
27413* -mepiphany16 command-line option, Epiphany: Epiphany Options.
27414                                                             (line   13)
27415* -merrors-to-file option, stderr redirect: TIC54X-Opts.     (line   20)
27416* -mesa option, s390:                    s390 Options.       (line   17)
27417* -mevexlig= option, i386:               i386-Options.       (line  129)
27418* -mevexlig= option, x86-64:             i386-Options.       (line  129)
27419* -mevexrcig= option, i386:              i386-Options.       (line  290)
27420* -mevexrcig= option, x86-64:            i386-Options.       (line  290)
27421* -mevexwig= option, i386:               i386-Options.       (line  139)
27422* -mevexwig= option, x86-64:             i386-Options.       (line  139)
27423* -mf option, far-mode:                  TIC54X-Opts.        (line    8)
27424* -mf11:                                 PDP-11-Options.     (line  122)
27425* -mfar-mode option, far-mode:           TIC54X-Opts.        (line    8)
27426* -mfdpic command-line option, Blackfin: Blackfin Options.   (line   19)
27427* -mfence-as-lock-add= option, i386:     i386-Options.       (line  190)
27428* -mfence-as-lock-add= option, x86-64:   i386-Options.       (line  190)
27429* -mfis:                                 PDP-11-Options.     (line   51)
27430* -mfloat-abi= command-line option, ARM: ARM Options.        (line  353)
27431* -mfp-11:                               PDP-11-Options.     (line   56)
27432* -mfp16-format= command-line option:    ARM Options.        (line  291)
27433* -mfpp:                                 PDP-11-Options.     (line   56)
27434* -mfpu:                                 PDP-11-Options.     (line   56)
27435* -mfpu= command-line option, ARM:       ARM Options.        (line  268)
27436* -mfpuda command-line option, ARC:      ARC Options.        (line  112)
27437* -mgcc-abi:                             RX-Opts.            (line   63)
27438* -mgcc-abi command-line option, V850:   V850 Options.       (line   79)
27439* -mgcc-isr command-line option, AVR:    AVR Options.        (line  133)
27440* -mhard-float command-line option, V850: V850 Options.      (line  101)
27441* -micache-enabled command-line option, LM32: LM32 Options.  (line   21)
27442* -mimplicit-it command-line option, ARM: ARM Options.       (line  314)
27443* -mint-register:                        RX-Opts.            (line   57)
27444* -mintel64 option, x86-64:              i386-Options.       (line  300)
27445* -mip2022 option, IP2K:                 IP2K-Opts.          (line   14)
27446* -mip2022ext option, IP2022:            IP2K-Opts.          (line    9)
27447* -misa-spec=ISAspec option, RISC-V:     RISC-V-Options.     (line   21)
27448* -mj11:                                 PDP-11-Options.     (line  126)
27449* -mka11:                                PDP-11-Options.     (line   92)
27450* -mkb11:                                PDP-11-Options.     (line   95)
27451* -mkd11a:                               PDP-11-Options.     (line   98)
27452* -mkd11b:                               PDP-11-Options.     (line  101)
27453* -mkd11d:                               PDP-11-Options.     (line  104)
27454* -mkd11e:                               PDP-11-Options.     (line  107)
27455* -mkd11f:                               PDP-11-Options.     (line  110)
27456* -mkd11h:                               PDP-11-Options.     (line  110)
27457* -mkd11k:                               PDP-11-Options.     (line  114)
27458* -mkd11q:                               PDP-11-Options.     (line  110)
27459* -mkd11z:                               PDP-11-Options.     (line  118)
27460* -mkev11:                               PDP-11-Options.     (line   51)
27461* -mlfence-after-load= option, i386:     i386-Options.       (line  237)
27462* -mlfence-after-load= option, x86-64:   i386-Options.       (line  237)
27463* -mlfence-before-indirect-branch= option, i386: i386-Options.
27464                                                             (line  244)
27465* -mlfence-before-indirect-branch= option, x86-64: i386-Options.
27466                                                             (line  244)
27467* -mlfence-before-ret= option, i386:     i386-Options.       (line  267)
27468* -mlfence-before-ret= option, x86-64:   i386-Options.       (line  267)
27469* -mlimited-eis:                         PDP-11-Options.     (line   64)
27470* -mlink-relax command-line option, AVR: AVR Options.        (line  124)
27471* -mlittle-endian:                       RX-Opts.            (line   26)
27472* -mlittle-endian option, RISC-V:        RISC-V-Options.     (line   69)
27473* -mlong <1>:                            M68HC11-Opts.       (line   45)
27474* -mlong:                                XGATE-Opts.         (line   13)
27475* -mlong-double <1>:                     M68HC11-Opts.       (line   53)
27476* -mlong-double:                         XGATE-Opts.         (line   21)
27477* -mm9s12x:                              M68HC11-Opts.       (line   27)
27478* -mm9s12xg:                             M68HC11-Opts.       (line   32)
27479* -mmcu= command-line option, AVR:       AVR Options.        (line    6)
27480* -mmfpt:                                PDP-11-Options.     (line   70)
27481* -mmicrocode:                           PDP-11-Options.     (line   83)
27482* -mmnemonic= option, i386:              i386-Options.       (line  146)
27483* -mmnemonic= option, x86-64:            i386-Options.       (line  146)
27484* -mmultiply-enabled command-line option, LM32: LM32 Options.
27485                                                             (line    6)
27486* -mmutiproc:                            PDP-11-Options.     (line   73)
27487* -mmxps:                                PDP-11-Options.     (line   77)
27488* -mnaked-reg option, i386:              i386-Options.       (line  158)
27489* -mnaked-reg option, x86-64:            i386-Options.       (line  158)
27490* -mnan= command-line option, MIPS:      MIPS Options.       (line  452)
27491* -mno-allow-string-insns:               RX-Opts.            (line   82)
27492* -mno-arch-attr option, RISC-V:         RISC-V-Options.     (line   56)
27493* -mno-cis:                              PDP-11-Options.     (line   32)
27494* -mno-csm:                              PDP-11-Options.     (line   43)
27495* -mno-csr-check option, RISC-V:         RISC-V-Options.     (line   66)
27496* -mno-dollar-line-separator command line option, AVR: AVR Options.
27497                                                             (line  136)
27498* -mno-dsbt command-line option, TIC6X:  TIC6X Options.      (line   13)
27499* -mno-eis:                              PDP-11-Options.     (line   46)
27500* -mno-extensions:                       PDP-11-Options.     (line   29)
27501* -mno-fdpic command-line option, Blackfin: Blackfin Options.
27502                                                             (line   22)
27503* -mno-fis:                              PDP-11-Options.     (line   51)
27504* -mno-fp-11:                            PDP-11-Options.     (line   56)
27505* -mno-fpp:                              PDP-11-Options.     (line   56)
27506* -mno-fpu:                              PDP-11-Options.     (line   56)
27507* -mno-kev11:                            PDP-11-Options.     (line   51)
27508* -mno-limited-eis:                      PDP-11-Options.     (line   64)
27509* -mno-link-relax command-line option, AVR: AVR Options.     (line  128)
27510* -mno-mfpt:                             PDP-11-Options.     (line   70)
27511* -mno-microcode:                        PDP-11-Options.     (line   83)
27512* -mno-mutiproc:                         PDP-11-Options.     (line   73)
27513* -mno-mxps:                             PDP-11-Options.     (line   77)
27514* -mno-pic:                              PDP-11-Options.     (line   11)
27515* -mno-pic command-line option, TIC6X:   TIC6X Options.      (line   36)
27516* -mno-regnames option, s390:            s390 Options.       (line   51)
27517* -mno-relax option, RISC-V:             RISC-V-Options.     (line   45)
27518* -mno-skip-bug command-line option, AVR: AVR Options.       (line  115)
27519* -mno-spl:                              PDP-11-Options.     (line   80)
27520* -mno-sym32:                            MIPS Options.       (line  360)
27521* -mno-verbose-error command-line option, AArch64: AArch64 Options.
27522                                                             (line   66)
27523* -mno-wrap command-line option, AVR:    AVR Options.        (line  118)
27524* -mnopic command-line option, Blackfin: Blackfin Options.   (line   22)
27525* -mnps400 command-line option, ARC:     ARC Options.        (line  103)
27526* -momit-lock-prefix= option, i386:      i386-Options.       (line  181)
27527* -momit-lock-prefix= option, x86-64:    i386-Options.       (line  181)
27528* -mpic:                                 PDP-11-Options.     (line   11)
27529* -mpic command-line option, TIC6X:      TIC6X Options.      (line   36)
27530* -mpid:                                 RX-Opts.            (line   50)
27531* -mpid= command-line option, TIC6X:     TIC6X Options.      (line   23)
27532* -mpriv-spec=PRIVspec option, RISC-V:   RISC-V-Options.     (line   27)
27533* -mreg-prefix=PREFIX option, reg-prefix: S12Z Options.      (line    9)
27534* -mregnames option, s390:               s390 Options.       (line   48)
27535* -mrelax command-line option, ARC:      ARC Options.        (line   98)
27536* -mrelax command-line option, V850:     V850 Options.       (line   72)
27537* -mrelax option, RISC-V:                RISC-V-Options.     (line   41)
27538* -mrelax-relocations= option, i386:     i386-Options.       (line  199)
27539* -mrelax-relocations= option, x86-64:   i386-Options.       (line  199)
27540* -mrh850-abi command-line option, V850: V850 Options.       (line   82)
27541* -mrmw command-line option, AVR:        AVR Options.        (line  121)
27542* -mrx-abi:                              RX-Opts.            (line   69)
27543* -mshared option, i386:                 i386-Options.       (line  168)
27544* -mshared option, x86-64:               i386-Options.       (line  168)
27545* -mshort <1>:                           XGATE-Opts.         (line    8)
27546* -mshort:                               M68HC11-Opts.       (line   40)
27547* -mshort-double <1>:                    M68HC11-Opts.       (line   49)
27548* -mshort-double:                        XGATE-Opts.         (line   17)
27549* -msign-extend-enabled command-line option, LM32: LM32 Options.
27550                                                             (line   15)
27551* -msmall-data-limit:                    RX-Opts.            (line   42)
27552* -msoft-float command-line option, V850: V850 Options.      (line   95)
27553* -mspfp command-line option, ARC:       ARC Options.        (line  106)
27554* -mspl:                                 PDP-11-Options.     (line   80)
27555* -msse-check= option, i386:             i386-Options.       (line   98)
27556* -msse-check= option, x86-64:           i386-Options.       (line   98)
27557* -msse2avx option, i386:                i386-Options.       (line   90)
27558* -msse2avx option, x86-64:              i386-Options.       (line   90)
27559* -msym32:                               MIPS Options.       (line  360)
27560* -msyntax= option, i386:                i386-Options.       (line  152)
27561* -msyntax= option, x86-64:              i386-Options.       (line  152)
27562* -mt11:                                 PDP-11-Options.     (line  130)
27563* -mthumb command-line option, ARM:      ARM Options.        (line  304)
27564* -mthumb-interwork command-line option, ARM: ARM Options.   (line  309)
27565* -mtune= option, i386:                  i386-Options.       (line   82)
27566* -mtune= option, x86-64:                i386-Options.       (line   82)
27567* -mtune=ARCH command-line option, Visium: Visium Options.   (line    8)
27568* -muse-conventional-section-names:      RX-Opts.            (line   33)
27569* -muse-renesas-section-names:           RX-Opts.            (line   37)
27570* -muse-unaligned-vector-move option, i386: i386-Options.    (line   94)
27571* -muse-unaligned-vector-move option, x86-64: i386-Options.  (line   94)
27572* -muser-enabled command-line option, LM32: LM32 Options.    (line   18)
27573* -mv850 command-line option, V850:      V850 Options.       (line   23)
27574* -mv850any command-line option, V850:   V850 Options.       (line   41)
27575* -mv850e command-line option, V850:     V850 Options.       (line   29)
27576* -mv850e1 command-line option, V850:    V850 Options.       (line   35)
27577* -mv850e2 command-line option, V850:    V850 Options.       (line   51)
27578* -mv850e2v3 command-line option, V850:  V850 Options.       (line   57)
27579* -mv850e2v4 command-line option, V850:  V850 Options.       (line   63)
27580* -mv850e3v5 command-line option, V850:  V850 Options.       (line   66)
27581* -mverbose-error command-line option, AArch64: AArch64 Options.
27582                                                             (line   62)
27583* -mvexwig= option, i386:                i386-Options.       (line  119)
27584* -mvexwig= option, x86-64:              i386-Options.       (line  119)
27585* -mvxworks-pic option, MIPS:            MIPS Options.       (line   26)
27586* -mwarn-areg-zero option, s390:         s390 Options.       (line   54)
27587* -mwarn-deprecated command-line option, ARM: ARM Options.   (line  386)
27588* -mwarn-syms command-line option, ARM:  ARM Options.        (line  394)
27589* -mx86-used-note= option, i386:         i386-Options.       (line  283)
27590* -mx86-used-note= option, x86-64:       i386-Options.       (line  283)
27591* -mzarch option, s390:                  s390 Options.       (line   17)
27592* -N command-line option, CRIS:          CRIS-Opts.          (line   58)
27593* -nIp option, M32RX:                    M32R-Opts.          (line  101)
27594* -no-bitinst, M32R2:                    M32R-Opts.          (line   54)
27595* -no-ignore-parallel-conflicts option, M32RX: M32R-Opts.    (line   93)
27596* -no-mdebug command-line option, Alpha: Alpha Options.      (line   25)
27597* -no-parallel option, M32RX:            M32R-Opts.          (line   51)
27598* -no-warn-explicit-parallel-conflicts option, M32RX: M32R-Opts.
27599                                                             (line   79)
27600* -no-warn-unmatched-high option, M32R:  M32R-Opts.          (line  111)
27601* -nocpp ignored (MIPS):                 MIPS Options.       (line  363)
27602* -noreplace command-line option, Alpha: Alpha Options.      (line   40)
27603* -o:                                    o.                  (line    6)
27604* -O option, i386:                       i386-Options.       (line  306)
27605* -O option, M32RX:                      M32R-Opts.          (line   59)
27606* -O option, x86-64:                     i386-Options.       (line  306)
27607* -O0 option, i386:                      i386-Options.       (line  306)
27608* -O0 option, x86-64:                    i386-Options.       (line  306)
27609* -O1 option, i386:                      i386-Options.       (line  306)
27610* -O1 option, x86-64:                    i386-Options.       (line  306)
27611* -O2 option, i386:                      i386-Options.       (line  306)
27612* -O2 option, x86-64:                    i386-Options.       (line  306)
27613* -Os option, i386:                      i386-Options.       (line  306)
27614* -Os option, x86-64:                    i386-Options.       (line  306)
27615* -parallel option, M32RX:               M32R-Opts.          (line   46)
27616* -R:                                    R.                  (line    6)
27617* -relax command-line option, Alpha:     Alpha Options.      (line   32)
27618* -replace command-line option, Alpha:   Alpha Options.      (line   40)
27619* -S, ignored on VAX:                    VAX-Opts.           (line   11)
27620* -sdcc command-line option, Z80:        Z80 Options.        (line   38)
27621* -T, ignored on VAX:                    VAX-Opts.           (line   11)
27622* -t, ignored on VAX:                    VAX-Opts.           (line   36)
27623* -v:                                    v.                  (line    6)
27624* -V, redundant on VAX:                  VAX-Opts.           (line   22)
27625* -version:                              v.                  (line    6)
27626* -W:                                    W.                  (line   11)
27627* -warn-explicit-parallel-conflicts option, M32RX: M32R-Opts.
27628                                                             (line   65)
27629* -warn-unmatched-high option, M32R:     M32R-Opts.          (line  105)
27630* -Wnp option, M32RX:                    M32R-Opts.          (line   83)
27631* -Wnuh option, M32RX:                   M32R-Opts.          (line  117)
27632* -Wp option, M32RX:                     M32R-Opts.          (line   75)
27633* -wsigned_overflow command-line option, V850: V850 Options. (line    9)
27634* -Wuh option, M32RX:                    M32R-Opts.          (line  114)
27635* -wunsigned_overflow command-line option, V850: V850 Options.
27636                                                             (line   16)
27637* -x command-line option, MMIX:          MMIX-Opts.          (line   44)
27638* -z8001 command-line option, Z8000:     Z8000 Options.      (line    6)
27639* -z8002 command-line option, Z8000:     Z8000 Options.      (line    9)
27640* . (symbol):                            Dot.                (line    6)
27641* .align directive, ARM:                 ARM Directives.     (line    6)
27642* .align directive, TILE-Gx:             TILE-Gx Directives. (line    6)
27643* .align directive, TILEPro:             TILEPro Directives. (line    6)
27644* .allow_suspicious_bundles directive, TILE-Gx: TILE-Gx Directives.
27645                                                             (line   10)
27646* .allow_suspicious_bundles directive, TILEPro: TILEPro Directives.
27647                                                             (line   10)
27648* .arc_attribute directive, ARC:         ARC Directives.     (line  244)
27649* .arch directive, AArch64:              AArch64 Directives. (line    6)
27650* .arch directive, ARM:                  ARM Directives.     (line   13)
27651* .arch directive, TIC6X:                TIC6X Directives.   (line   10)
27652* .arch_extension directive, AArch64:    AArch64 Directives. (line   13)
27653* .arch_extension directive, ARM:        ARM Directives.     (line   21)
27654* .arm directive, ARM:                   ARM Directives.     (line   30)
27655* .assume directive, Z80:                Z80 Directives.     (line   12)
27656* .attribute directive, RISC-V:          RISC-V-Directives.  (line  126)
27657* .big directive, M32RX:                 M32R-Directives.    (line   88)
27658* .bss directive, AArch64:               AArch64 Directives. (line   22)
27659* .bss directive, ARM:                   ARM Directives.     (line   33)
27660* .c6xabi_attribute directive, TIC6X:    TIC6X Directives.   (line   20)
27661* .cantunwind directive, ARM:            ARM Directives.     (line   36)
27662* .cantunwind directive, TIC6X:          TIC6X Directives.   (line   13)
27663* .cfi_b_key_frame directive, AArch64:   AArch64 Directives. (line  100)
27664* .code directive, ARM:                  ARM Directives.     (line   40)
27665* .cpu directive, AArch64:               AArch64 Directives. (line   25)
27666* .cpu directive, ARM:                   ARM Directives.     (line   44)
27667* .dn and .qn directives, ARM:           ARM Directives.     (line   52)
27668* .dword directive, AArch64:             AArch64 Directives. (line   29)
27669* .eabi_attribute directive, ARM:        ARM Directives.     (line   75)
27670* .ehtype directive, TIC6X:              TIC6X Directives.   (line   31)
27671* .endp directive, TIC6X:                TIC6X Directives.   (line   34)
27672* .even directive, AArch64:              AArch64 Directives. (line   32)
27673* .even directive, ARM:                  ARM Directives.     (line  104)
27674* .extend directive, ARM:                ARM Directives.     (line  107)
27675* .float16 directive, AArch64:           AArch64 Directives. (line   36)
27676* .float16 directive, ARM:               ARM Directives.     (line  113)
27677* .float16_format directive, ARM:        ARM Directives.     (line  121)
27678* .fnend directive, ARM:                 ARM Directives.     (line  128)
27679* .fnstart directive, ARM:               ARM Directives.     (line  137)
27680* .force_thumb directive, ARM:           ARM Directives.     (line  140)
27681* .fpu directive, ARM:                   ARM Directives.     (line  144)
27682* .global:                               MIPS insn.          (line   12)
27683* .gnu_attribute 4, N directive, MIPS:   MIPS FP ABI History.
27684                                                             (line    6)
27685* .gnu_attribute Tag_GNU_MIPS_ABI_FP, N directive, MIPS: MIPS FP ABI History.
27686                                                             (line    6)
27687* .handlerdata directive, ARM:           ARM Directives.     (line  148)
27688* .handlerdata directive, TIC6X:         TIC6X Directives.   (line   39)
27689* .insn:                                 MIPS insn.          (line    6)
27690* .insn directive, s390:                 s390 Directives.    (line   11)
27691* .inst directive, AArch64:              AArch64 Directives. (line   42)
27692* .inst directive, ARM:                  ARM Directives.     (line  157)
27693* .ldouble directive, ARM:               ARM Directives.     (line  107)
27694* .little directive, M32RX:              M32R-Directives.    (line   82)
27695* .long directive, s390:                 s390 Directives.    (line   16)
27696* .ltorg directive, AArch64:             AArch64 Directives. (line   46)
27697* .ltorg directive, ARM:                 ARM Directives.     (line  167)
27698* .ltorg directive, s390:                s390 Directives.    (line   88)
27699* .m32r directive, M32R:                 M32R-Directives.    (line   66)
27700* .m32r2 directive, M32R2:               M32R-Directives.    (line   77)
27701* .m32rx directive, M32RX:               M32R-Directives.    (line   72)
27702* .machine directive, s390:              s390 Directives.    (line   93)
27703* .machinemode directive, s390:          s390 Directives.    (line  109)
27704* .module:                               MIPS assembly options.
27705                                                             (line    6)
27706* .module fp=NN directive, MIPS:         MIPS FP ABI Selection.
27707                                                             (line    6)
27708* .movsp directive, ARM:                 ARM Directives.     (line  181)
27709* .nan directive, MIPS:                  MIPS NaN Encodings. (line    6)
27710* .no_pointers directive, XStormy16:     XStormy16 Directives.
27711                                                             (line   14)
27712* .nocmp directive, TIC6X:               TIC6X Directives.   (line   47)
27713* .o:                                    Object.             (line    6)
27714* .object_arch directive, ARM:           ARM Directives.     (line  186)
27715* .packed directive, ARM:                ARM Directives.     (line  192)
27716* .pad directive, ARM:                   ARM Directives.     (line  197)
27717* .param on HPPA:                        HPPA Directives.    (line   19)
27718* .personality directive, ARM:           ARM Directives.     (line  202)
27719* .personality directive, TIC6X:         TIC6X Directives.   (line   55)
27720* .personalityindex directive, ARM:      ARM Directives.     (line  205)
27721* .personalityindex directive, TIC6X:    TIC6X Directives.   (line   51)
27722* .pool directive, AArch64:              AArch64 Directives. (line   60)
27723* .pool directive, ARM:                  ARM Directives.     (line  209)
27724* .quad directive, s390:                 s390 Directives.    (line   16)
27725* .req directive, AArch64:               AArch64 Directives. (line   63)
27726* .req directive, ARM:                   ARM Directives.     (line  212)
27727* .require_canonical_reg_names directive, TILE-Gx: TILE-Gx Directives.
27728                                                             (line   19)
27729* .require_canonical_reg_names directive, TILEPro: TILEPro Directives.
27730                                                             (line   19)
27731* .save directive, ARM:                  ARM Directives.     (line  217)
27732* .scomm directive, TIC6X:               TIC6X Directives.   (line   58)
27733* .secrel32 directive, ARM:              ARM Directives.     (line  255)
27734* .set arch=CPU:                         MIPS ISA.           (line   19)
27735* .set at:                               MIPS Macros.        (line   42)
27736* .set at=REG:                           MIPS Macros.        (line   36)
27737* .set autoextend:                       MIPS autoextend.    (line    6)
27738* .set crc:                              MIPS ASE Instruction Generation Overrides.
27739                                                             (line   69)
27740* .set doublefloat:                      MIPS Floating-Point.
27741                                                             (line   12)
27742* .set dsp:                              MIPS ASE Instruction Generation Overrides.
27743                                                             (line   21)
27744* .set dspr2:                            MIPS ASE Instruction Generation Overrides.
27745                                                             (line   26)
27746* .set dspr3:                            MIPS ASE Instruction Generation Overrides.
27747                                                             (line   32)
27748* .set ginv:                             MIPS ASE Instruction Generation Overrides.
27749                                                             (line   73)
27750* .set hardfloat:                        MIPS Floating-Point.
27751                                                             (line    6)
27752* .set insn32:                           MIPS assembly options.
27753                                                             (line   18)
27754* .set loongson-cam:                     MIPS ASE Instruction Generation Overrides.
27755                                                             (line   82)
27756* .set loongson-ext:                     MIPS ASE Instruction Generation Overrides.
27757                                                             (line   87)
27758* .set loongson-ext2:                    MIPS ASE Instruction Generation Overrides.
27759                                                             (line   92)
27760* .set loongson-mmi:                     MIPS ASE Instruction Generation Overrides.
27761                                                             (line   77)
27762* .set macro:                            MIPS Macros.        (line   31)
27763* .set mcu:                              MIPS ASE Instruction Generation Overrides.
27764                                                             (line   43)
27765* .set mdmx:                             MIPS ASE Instruction Generation Overrides.
27766                                                             (line   16)
27767* .set mips16e2:                         MIPS ASE Instruction Generation Overrides.
27768                                                             (line   62)
27769* .set mips3d:                           MIPS ASE Instruction Generation Overrides.
27770                                                             (line    6)
27771* .set mipsN:                            MIPS ISA.           (line    6)
27772* .set msa:                              MIPS ASE Instruction Generation Overrides.
27773                                                             (line   48)
27774* .set mt:                               MIPS ASE Instruction Generation Overrides.
27775                                                             (line   38)
27776* .set noat:                             MIPS Macros.        (line   42)
27777* .set noautoextend:                     MIPS autoextend.    (line    6)
27778* .set nocrc:                            MIPS ASE Instruction Generation Overrides.
27779                                                             (line   69)
27780* .set nodsp:                            MIPS ASE Instruction Generation Overrides.
27781                                                             (line   21)
27782* .set nodspr2:                          MIPS ASE Instruction Generation Overrides.
27783                                                             (line   26)
27784* .set nodspr3:                          MIPS ASE Instruction Generation Overrides.
27785                                                             (line   32)
27786* .set noginv:                           MIPS ASE Instruction Generation Overrides.
27787                                                             (line   73)
27788* .set noinsn32:                         MIPS assembly options.
27789                                                             (line   18)
27790* .set noloongson-cam:                   MIPS ASE Instruction Generation Overrides.
27791                                                             (line   82)
27792* .set noloongson-ext:                   MIPS ASE Instruction Generation Overrides.
27793                                                             (line   87)
27794* .set noloongson-ext2:                  MIPS ASE Instruction Generation Overrides.
27795                                                             (line   92)
27796* .set noloongson-mmi:                   MIPS ASE Instruction Generation Overrides.
27797                                                             (line   77)
27798* .set nomacro:                          MIPS Macros.        (line   31)
27799* .set nomcu:                            MIPS ASE Instruction Generation Overrides.
27800                                                             (line   43)
27801* .set nomdmx:                           MIPS ASE Instruction Generation Overrides.
27802                                                             (line   16)
27803* .set nomips16e2:                       MIPS ASE Instruction Generation Overrides.
27804                                                             (line   62)
27805* .set nomips3d:                         MIPS ASE Instruction Generation Overrides.
27806                                                             (line    6)
27807* .set nomsa:                            MIPS ASE Instruction Generation Overrides.
27808                                                             (line   48)
27809* .set nomt:                             MIPS ASE Instruction Generation Overrides.
27810                                                             (line   38)
27811* .set nosmartmips:                      MIPS ASE Instruction Generation Overrides.
27812                                                             (line   11)
27813* .set nosym32:                          MIPS Symbol Sizes.  (line    6)
27814* .set novirt:                           MIPS ASE Instruction Generation Overrides.
27815                                                             (line   53)
27816* .set noxpa:                            MIPS ASE Instruction Generation Overrides.
27817                                                             (line   58)
27818* .set pop:                              MIPS Option Stack.  (line    6)
27819* .set push:                             MIPS Option Stack.  (line    6)
27820* .set singlefloat:                      MIPS Floating-Point.
27821                                                             (line   12)
27822* .set smartmips:                        MIPS ASE Instruction Generation Overrides.
27823                                                             (line   11)
27824* .set softfloat:                        MIPS Floating-Point.
27825                                                             (line    6)
27826* .set sym32:                            MIPS Symbol Sizes.  (line    6)
27827* .set virt:                             MIPS ASE Instruction Generation Overrides.
27828                                                             (line   53)
27829* .set xpa:                              MIPS ASE Instruction Generation Overrides.
27830                                                             (line   58)
27831* .setfp directive, ARM:                 ARM Directives.     (line  241)
27832* .short directive, s390:                s390 Directives.    (line   16)
27833* .syntax directive, ARM:                ARM Directives.     (line  260)
27834* .thumb directive, ARM:                 ARM Directives.     (line  264)
27835* .thumb_func directive, ARM:            ARM Directives.     (line  267)
27836* .thumb_set directive, ARM:             ARM Directives.     (line  278)
27837* .tlsdescadd directive, AArch64:        AArch64 Directives. (line   71)
27838* .tlsdesccall directive, AArch64:       AArch64 Directives. (line   74)
27839* .tlsdescldr directive, AArch64:        AArch64 Directives. (line   77)
27840* .tlsdescseq directive, ARM:            ARM Directives.     (line  285)
27841* .unreq directive, AArch64:             AArch64 Directives. (line   80)
27842* .unreq directive, ARM:                 ARM Directives.     (line  290)
27843* .unwind_raw directive, ARM:            ARM Directives.     (line  301)
27844* .v850 directive, V850:                 V850 Directives.    (line   14)
27845* .v850e directive, V850:                V850 Directives.    (line   20)
27846* .v850e1 directive, V850:               V850 Directives.    (line   26)
27847* .v850e2 directive, V850:               V850 Directives.    (line   32)
27848* .v850e2v3 directive, V850:             V850 Directives.    (line   38)
27849* .v850e2v4 directive, V850:             V850 Directives.    (line   44)
27850* .v850e3v5 directive, V850:             V850 Directives.    (line   50)
27851* .variant_pcs directive, AArch64:       AArch64 Directives. (line   91)
27852* .vsave directive, ARM:                 ARM Directives.     (line  308)
27853* .xword directive, AArch64:             AArch64 Directives. (line   96)
27854* .z8001:                                Z8000 Directives.   (line   11)
27855* .z8002:                                Z8000 Directives.   (line   15)
27856* 16-bit code, i386:                     i386-16bit.         (line    6)
27857* 16bit_pointers directive, XStormy16:   XStormy16 Directives.
27858                                                             (line    6)
27859* 16byte directive, Nios II:             Nios II Directives. (line   28)
27860* 16byte directive, PRU:                 PRU Directives.     (line   25)
27861* 2byte directive:                       2byte.              (line    6)
27862* 2byte directive, Nios II:              Nios II Directives. (line   19)
27863* 2byte directive, PRU:                  PRU Directives.     (line   16)
27864* 32bit_pointers directive, XStormy16:   XStormy16 Directives.
27865                                                             (line   10)
27866* 3DNow!, i386:                          i386-SIMD.          (line    6)
27867* 3DNow!, x86-64:                        i386-SIMD.          (line    6)
27868* 430 support:                           MSP430-Dependent.   (line    6)
27869* 4byte directive:                       4byte.              (line    6)
27870* 4byte directive, Nios II:              Nios II Directives. (line   22)
27871* 4byte directive, PRU:                  PRU Directives.     (line   19)
27872* 8byte directive:                       8byte.              (line    6)
27873* 8byte directive, Nios II:              Nios II Directives. (line   25)
27874* 8byte directive, PRU:                  PRU Directives.     (line   22)
27875* : (label):                             Statements.         (line   31)
27876* @gotoff(SYMBOL), ARC modifier:         ARC Modifiers.      (line   20)
27877* @gotpc(SYMBOL), ARC modifier:          ARC Modifiers.      (line   16)
27878* @hi pseudo-op, XStormy16:              XStormy16 Opcodes.  (line   21)
27879* @lo pseudo-op, XStormy16:              XStormy16 Opcodes.  (line   10)
27880* @pcl(SYMBOL), ARC modifier:            ARC Modifiers.      (line   12)
27881* @plt(SYMBOL), ARC modifier:            ARC Modifiers.      (line   23)
27882* @sda(SYMBOL), ARC modifier:            ARC Modifiers.      (line   28)
27883* @word modifier, D10V:                  D10V-Word.          (line    6)
27884* _ opcode prefix:                       Xtensa Opcodes.     (line    9)
27885* __DYNAMIC__, ARC pre-defined symbol:   ARC Symbols.        (line   14)
27886* __GLOBAL_OFFSET_TABLE__, ARC pre-defined symbol: ARC Symbols.
27887                                                             (line   11)
27888* a.out:                                 Object.             (line    6)
27889* a.out symbol attributes:               a.out Symbols.      (line    6)
27890* A_DIR environment variable, TIC54X:    TIC54X-Env.         (line    6)
27891* AArch64 floating point (IEEE):         AArch64 Floating Point.
27892                                                             (line    6)
27893* AArch64 immediate character:           AArch64-Chars.      (line   13)
27894* AArch64 line comment character:        AArch64-Chars.      (line    6)
27895* AArch64 line separator:                AArch64-Chars.      (line   10)
27896* AArch64 machine directives:            AArch64 Directives. (line    6)
27897* AArch64 opcodes:                       AArch64 Opcodes.    (line    6)
27898* AArch64 options (none):                AArch64 Options.    (line    6)
27899* AArch64 register names:                AArch64-Regs.       (line    6)
27900* AArch64 relocations:                   AArch64-Relocations.
27901                                                             (line    6)
27902* AArch64 support:                       AArch64-Dependent.  (line    6)
27903* ABORT directive:                       ABORT (COFF).       (line    6)
27904* abort directive:                       Abort.              (line    6)
27905* absolute section:                      Ld Sections.        (line   29)
27906* absolute-literals directive:           Absolute Literals Directive.
27907                                                             (line    6)
27908* ADDI instructions, relaxation:         Xtensa Immediate Relaxation.
27909                                                             (line   43)
27910* addition, permitted arguments:         Infix Ops.          (line   44)
27911* addresses:                             Expressions.        (line    6)
27912* addresses, format of:                  Secs Background.    (line   68)
27913* addressing modes, D10V:                D10V-Addressing.    (line    6)
27914* addressing modes, D30V:                D30V-Addressing.    (line    6)
27915* addressing modes, H8/300:              H8/300-Addressing.  (line    6)
27916* addressing modes, M680x0:              M68K-Syntax.        (line   21)
27917* addressing modes, M68HC11:             M68HC11-Syntax.     (line   30)
27918* addressing modes, S12Z:                S12Z Addressing Modes.
27919                                                             (line    6)
27920* addressing modes, SH:                  SH-Addressing.      (line    6)
27921* addressing modes, XGATE:               XGATE-Syntax.       (line   29)
27922* addressing modes, Z8000:               Z8000-Addressing.   (line    6)
27923* ADR reg,<label> pseudo op, ARM:        ARM Opcodes.        (line   25)
27924* ADRL reg,<label> pseudo op, ARM:       ARM Opcodes.        (line   43)
27925* ADRP, ADD, LDR/STR group relocations, AArch64: AArch64-Relocations.
27926                                                             (line   14)
27927* advancing location counter:            Org.                (line    6)
27928* align directive <1>:                   Align.              (line    6)
27929* align directive:                       RISC-V-Directives.  (line    8)
27930* align directive, Nios II:              Nios II Directives. (line    6)
27931* align directive, OpenRISC:             OpenRISC-Directives.
27932                                                             (line    9)
27933* align directive, PRU:                  PRU Directives.     (line    6)
27934* align directive, SPARC:                Sparc-Directives.   (line    9)
27935* align directive, TIC54X:               TIC54X-Directives.  (line    6)
27936* aligned instruction bundle:            Bundle directives.  (line    9)
27937* alignment for NEON instructions:       ARM-Neon-Alignment. (line    6)
27938* alignment of branch targets:           Xtensa Automatic Alignment.
27939                                                             (line    6)
27940* alignment of LOOP instructions:        Xtensa Automatic Alignment.
27941                                                             (line    6)
27942* Alpha floating point (IEEE):           Alpha Floating Point.
27943                                                             (line    6)
27944* Alpha line comment character:          Alpha-Chars.        (line    6)
27945* Alpha line separator:                  Alpha-Chars.        (line   11)
27946* Alpha notes:                           Alpha Notes.        (line    6)
27947* Alpha options:                         Alpha Options.      (line    6)
27948* Alpha registers:                       Alpha-Regs.         (line    6)
27949* Alpha relocations:                     Alpha-Relocs.       (line    6)
27950* Alpha support:                         Alpha-Dependent.    (line    6)
27951* Alpha Syntax:                          Alpha Options.      (line   61)
27952* Alpha-only directives:                 Alpha Directives.   (line   10)
27953* Altera Nios II support:                NiosII-Dependent.   (line    6)
27954* altered difference tables:             Word.               (line   12)
27955* alternate syntax for the 680x0:        M68K-Moto-Syntax.   (line    6)
27956* ARC Branch Target Address:             ARC-Regs.           (line   61)
27957* ARC BTA saved on exception entry:      ARC-Regs.           (line   80)
27958* ARC Build configuration for: BTA Registers: ARC-Regs.      (line   90)
27959* ARC Build configuration for: Core Registers: ARC-Regs.     (line   98)
27960* ARC Build configuration for: Interrupts: ARC-Regs.         (line   94)
27961* ARC Build Configuration Registers Version: ARC-Regs.       (line   86)
27962* ARC C preprocessor macro separator:    ARC-Chars.          (line   31)
27963* ARC core general registers:            ARC-Regs.           (line   10)
27964* ARC DCCM RAM Configuration Register:   ARC-Regs.           (line  102)
27965* ARC Exception Cause Register:          ARC-Regs.           (line   64)
27966* ARC Exception Return Address:          ARC-Regs.           (line   77)
27967* ARC extension core registers:          ARC-Regs.           (line   38)
27968* ARC frame pointer:                     ARC-Regs.           (line   17)
27969* ARC global pointer:                    ARC-Regs.           (line   14)
27970* ARC interrupt link register:           ARC-Regs.           (line   27)
27971* ARC Interrupt Vector Base address:     ARC-Regs.           (line   67)
27972* ARC level 1 interrupt link register:   ARC-Regs.           (line   23)
27973* ARC level 2 interrupt link register:   ARC-Regs.           (line   31)
27974* ARC line comment character:            ARC-Chars.          (line   11)
27975* ARC line separator:                    ARC-Chars.          (line   27)
27976* ARC link register:                     ARC-Regs.           (line   35)
27977* ARC loop counter:                      ARC-Regs.           (line   41)
27978* ARC machine directives:                ARC Directives.     (line    6)
27979* ARC opcodes:                           ARC Opcodes.        (line    6)
27980* ARC options:                           ARC Options.        (line    6)
27981* ARC Processor Identification register: ARC-Regs.           (line   52)
27982* ARC Program Counter:                   ARC-Regs.           (line   55)
27983* ARC register name prefix character:    ARC-Chars.          (line    7)
27984* ARC register names:                    ARC-Regs.           (line    6)
27985* ARC Saved User Stack Pointer:          ARC-Regs.           (line   74)
27986* ARC stack pointer:                     ARC-Regs.           (line   20)
27987* ARC Status register:                   ARC-Regs.           (line   58)
27988* ARC STATUS32 saved on exception:       ARC-Regs.           (line   83)
27989* ARC Stored STATUS32 register on entry to level P0 interrupts: ARC-Regs.
27990                                                             (line   70)
27991* ARC support:                           ARC-Dependent.      (line    6)
27992* ARC symbol prefix character:           ARC-Chars.          (line   20)
27993* ARC word aligned program counter:      ARC-Regs.           (line   44)
27994* arch directive, i386:                  i386-Arch.          (line    6)
27995* arch directive, M680x0:                M68K-Directives.    (line   22)
27996* arch directive, MSP 430:               MSP430 Directives.  (line   18)
27997* arch directive, x86-64:                i386-Arch.          (line    6)
27998* architecture options, IP2022:          IP2K-Opts.          (line    9)
27999* architecture options, IP2K:            IP2K-Opts.          (line   14)
28000* architecture options, M16C:            M32C-Opts.          (line   12)
28001* architecture options, M32C:            M32C-Opts.          (line    9)
28002* architecture options, M32R:            M32R-Opts.          (line   21)
28003* architecture options, M32R2:           M32R-Opts.          (line   17)
28004* architecture options, M32RX:           M32R-Opts.          (line    9)
28005* architecture options, M680x0:          M68K-Opts.          (line   98)
28006* Architecture variant option, CRIS:     CRIS-Opts.          (line   34)
28007* architectures, Meta:                   Meta Options.       (line    6)
28008* architectures, PowerPC:                PowerPC-Opts.       (line    6)
28009* architectures, SCORE:                  SCORE-Opts.         (line    6)
28010* architectures, SPARC:                  Sparc-Opts.         (line    6)
28011* arguments for addition:                Infix Ops.          (line   44)
28012* arguments for subtraction:             Infix Ops.          (line   49)
28013* arguments in expressions:              Arguments.          (line    6)
28014* arithmetic functions:                  Operators.          (line    6)
28015* arithmetic operands:                   Arguments.          (line    6)
28016* ARM data relocations:                  ARM-Relocations.    (line    6)
28017* ARM floating point (IEEE):             ARM Floating Point. (line    6)
28018* ARM identifiers:                       ARM-Chars.          (line   19)
28019* ARM immediate character:               ARM-Chars.          (line   17)
28020* ARM line comment character:            ARM-Chars.          (line    6)
28021* ARM line separator:                    ARM-Chars.          (line   14)
28022* ARM machine directives:                ARM Directives.     (line    6)
28023* ARM opcodes:                           ARM Opcodes.        (line    6)
28024* ARM options (none):                    ARM Options.        (line    6)
28025* ARM register names:                    ARM-Regs.           (line    6)
28026* ARM support:                           ARM-Dependent.      (line    6)
28027* ascii directive:                       Ascii.              (line    6)
28028* asciz directive:                       Asciz.              (line    6)
28029* asg directive, TIC54X:                 TIC54X-Directives.  (line   20)
28030* assembler bugs, reporting:             Bug Reporting.      (line    6)
28031* assembler crash:                       Bug Criteria.       (line    9)
28032* assembler directive .3byte, RX:        RX-Directives.      (line    9)
28033* assembler directive .arch, CRIS:       CRIS-Pseudos.       (line   45)
28034* assembler directive .dword, CRIS:      CRIS-Pseudos.       (line   12)
28035* assembler directive .far, M68HC11:     M68HC11-Directives. (line   20)
28036* assembler directive .fetchalign, RX:   RX-Directives.      (line   13)
28037* assembler directive .interrupt, M68HC11: M68HC11-Directives.
28038                                                             (line   26)
28039* assembler directive .mode, M68HC11:    M68HC11-Directives. (line   16)
28040* assembler directive .relax, M68HC11:   M68HC11-Directives. (line   10)
28041* assembler directive .syntax, CRIS:     CRIS-Pseudos.       (line   17)
28042* assembler directive .xrefb, M68HC11:   M68HC11-Directives. (line   31)
28043* assembler directive BSPEC, MMIX:       MMIX-Pseudos.       (line  131)
28044* assembler directive BYTE, MMIX:        MMIX-Pseudos.       (line   97)
28045* assembler directive ESPEC, MMIX:       MMIX-Pseudos.       (line  131)
28046* assembler directive GREG, MMIX:        MMIX-Pseudos.       (line   50)
28047* assembler directive IS, MMIX:          MMIX-Pseudos.       (line   42)
28048* assembler directive LOC, MMIX:         MMIX-Pseudos.       (line    7)
28049* assembler directive LOCAL, MMIX:       MMIX-Pseudos.       (line   28)
28050* assembler directive OCTA, MMIX:        MMIX-Pseudos.       (line  108)
28051* assembler directive PREFIX, MMIX:      MMIX-Pseudos.       (line  120)
28052* assembler directive TETRA, MMIX:       MMIX-Pseudos.       (line  108)
28053* assembler directive WYDE, MMIX:        MMIX-Pseudos.       (line  108)
28054* assembler directives, CRIS:            CRIS-Pseudos.       (line    6)
28055* assembler directives, M68HC11:         M68HC11-Directives. (line    6)
28056* assembler directives, M68HC12:         M68HC11-Directives. (line    6)
28057* assembler directives, MMIX:            MMIX-Pseudos.       (line    6)
28058* assembler directives, RL78:            RL78-Directives.    (line    6)
28059* assembler directives, RX:              RX-Directives.      (line    6)
28060* assembler directives, XGATE:           XGATE-Directives.   (line    6)
28061* assembler internal logic error:        As Sections.        (line   13)
28062* assembler version:                     v.                  (line    6)
28063* assembler, and linker:                 Secs Background.    (line   10)
28064* assembly listings, enabling:           a.                  (line    6)
28065* assigning values to symbols <1>:       Setting Symbols.    (line    6)
28066* assigning values to symbols:           Equ.                (line    6)
28067* at register, MIPS:                     MIPS Macros.        (line   36)
28068* att_syntax pseudo op, i386:            i386-Variations.    (line    6)
28069* att_syntax pseudo op, x86-64:          i386-Variations.    (line    6)
28070* attributes, symbol:                    Symbol Attributes.  (line    6)
28071* auxiliary attributes, COFF symbols:    COFF Symbols.       (line   19)
28072* auxiliary symbol information, COFF:    Dim.                (line    6)
28073* AVR line comment character:            AVR-Chars.          (line    6)
28074* AVR line separator:                    AVR-Chars.          (line   14)
28075* AVR modifiers:                         AVR-Modifiers.      (line    6)
28076* AVR opcode summary:                    AVR Opcodes.        (line    6)
28077* AVR options (none):                    AVR Options.        (line    6)
28078* AVR register names:                    AVR-Regs.           (line    6)
28079* AVR support:                           AVR-Dependent.      (line    6)
28080* backslash (\\):                        Strings.            (line   40)
28081* backspace (\b):                        Strings.            (line   15)
28082* balign directive:                      Balign.             (line    6)
28083* balignl directive:                     Balign.             (line   29)
28084* balignw directive:                     Balign.             (line   29)
28085* bes directive, TIC54X:                 TIC54X-Directives.  (line  196)
28086* bfloat16 directive, i386:              i386-Float.         (line   14)
28087* bfloat16 directive, x86-64:            i386-Float.         (line   14)
28088* big endian output, MIPS:               Overview.           (line  891)
28089* big endian output, PJ:                 Overview.           (line  791)
28090* big-endian output, MIPS:               MIPS Options.       (line   13)
28091* big-endian output, TIC6X:              TIC6X Options.      (line   46)
28092* bignums:                               Bignums.            (line    6)
28093* binary constants, TIC54X:              TIC54X-Constants.   (line    8)
28094* binary files, including:               Incbin.             (line    6)
28095* binary integers:                       Integers.           (line    6)
28096* bit names, IA-64:                      IA-64-Bits.         (line    6)
28097* bitfields, not supported on VAX:       VAX-no.             (line    6)
28098* Blackfin directives:                   Blackfin Directives.
28099                                                             (line    6)
28100* Blackfin options (none):               Blackfin Options.   (line    6)
28101* Blackfin support:                      Blackfin-Dependent. (line    6)
28102* Blackfin syntax:                       Blackfin Syntax.    (line    6)
28103* block:                                 Z8000 Directives.   (line   55)
28104* BMI, i386:                             i386-BMI.           (line    6)
28105* BMI, x86-64:                           i386-BMI.           (line    6)
28106* BPF line comment character:            BPF-Chars.          (line    6)
28107* BPF opcodes:                           BPF Opcodes.        (line    6)
28108* BPF options (none):                    BPF Options.        (line    6)
28109* BPF register names:                    BPF-Regs.           (line    6)
28110* BPF support:                           BPF-Dependent.      (line    6)
28111* branch improvement, M680x0:            M68K-Branch.        (line    6)
28112* branch improvement, M68HC11:           M68HC11-Branch.     (line    6)
28113* branch improvement, VAX:               VAX-branch.         (line    6)
28114* branch instructions, relaxation:       Xtensa Branch Relaxation.
28115                                                             (line    6)
28116* Branch Target Address, ARC:            ARC-Regs.           (line   61)
28117* branch target alignment:               Xtensa Automatic Alignment.
28118                                                             (line    6)
28119* break directive, TIC54X:               TIC54X-Directives.  (line  143)
28120* BSD syntax:                            PDP-11-Syntax.      (line    6)
28121* bss directive:                         Bss.                (line    6)
28122* BSS directive:                         RISC-V-Directives.  (line   24)
28123* bss directive, TIC54X:                 TIC54X-Directives.  (line   29)
28124* bss section <1>:                       bss.                (line    6)
28125* bss section:                           Ld Sections.        (line   20)
28126* BTA saved on exception entry, ARC:     ARC-Regs.           (line   80)
28127* bug criteria:                          Bug Criteria.       (line    6)
28128* bug reports:                           Bug Reporting.      (line    6)
28129* bugs in assembler:                     Reporting Bugs.     (line    6)
28130* Build configuration for: BTA Registers, ARC: ARC-Regs.     (line   90)
28131* Build configuration for: Core Registers, ARC: ARC-Regs.    (line   98)
28132* Build configuration for: Interrupts, ARC: ARC-Regs.        (line   94)
28133* Build Configuration Registers Version, ARC: ARC-Regs.      (line   86)
28134* Built-in symbols, CRIS:                CRIS-Symbols.       (line    6)
28135* builtin math functions, TIC54X:        TIC54X-Builtins.    (line    6)
28136* builtin subsym functions, TIC54X:      TIC54X-Macros.      (line   16)
28137* bundle:                                Bundle directives.  (line    9)
28138* bundle-locked:                         Bundle directives.  (line   38)
28139* bundle_align_mode directive:           Bundle directives.  (line    9)
28140* bundle_lock directive:                 Bundle directives.  (line   31)
28141* bundle_unlock directive:               Bundle directives.  (line   31)
28142* bus lock prefixes, i386:               i386-Prefixes.      (line   36)
28143* bval:                                  Z8000 Directives.   (line   30)
28144* byte directive:                        Byte.               (line    6)
28145* byte directive, TIC54X:                TIC54X-Directives.  (line   36)
28146* C preprocessor macro separator, ARC:   ARC-Chars.          (line   31)
28147* C-SKY options:                         C-SKY Options.      (line    6)
28148* C-SKY support:                         C-SKY-Dependent.    (line    6)
28149* C54XDSP_DIR environment variable, TIC54X: TIC54X-Env.      (line    6)
28150* c_mode directive, TIC54X:              TIC54X-Directives.  (line   51)
28151* call directive, Nios II:               Nios II Relocations.
28152                                                             (line   38)
28153* call instructions, i386:               i386-Mnemonics.     (line  117)
28154* call instructions, relaxation:         Xtensa Call Relaxation.
28155                                                             (line    6)
28156* call instructions, x86-64:             i386-Mnemonics.     (line  117)
28157* call_hiadj directive, Nios II:         Nios II Relocations.
28158                                                             (line   38)
28159* call_lo directive, Nios II:            Nios II Relocations.
28160                                                             (line   38)
28161* carriage return (backslash-r):         Strings.            (line   24)
28162* case sensitivity, Z80:                 Z80-Case.           (line    6)
28163* cfi_endproc directive:                 CFI directives.     (line   40)
28164* cfi_fde_data directive:                CFI directives.     (line   66)
28165* cfi_personality directive:             CFI directives.     (line   47)
28166* cfi_personality_id directive:          CFI directives.     (line   59)
28167* cfi_sections directive:                CFI directives.     (line    9)
28168* cfi_startproc directive:               CFI directives.     (line   30)
28169* char directive, TIC54X:                TIC54X-Directives.  (line   36)
28170* character constant, Z80:               Z80-Chars.          (line   20)
28171* character constants:                   Characters.         (line    6)
28172* character escape codes:                Strings.            (line   15)
28173* character escapes, Z80:                Z80-Chars.          (line   18)
28174* character, single:                     Chars.              (line    6)
28175* characters used in symbols:            Symbol Intro.       (line    6)
28176* clink directive, TIC54X:               TIC54X-Directives.  (line   45)
28177* code16 directive, i386:                i386-16bit.         (line    6)
28178* code16gcc directive, i386:             i386-16bit.         (line    6)
28179* code32 directive, i386:                i386-16bit.         (line    6)
28180* code64 directive, i386:                i386-16bit.         (line    6)
28181* code64 directive, x86-64:              i386-16bit.         (line    6)
28182* COFF auxiliary symbol information:     Dim.                (line    6)
28183* COFF structure debugging:              Tag.                (line    6)
28184* COFF symbol attributes:                COFF Symbols.       (line    6)
28185* COFF symbol descriptor:                Desc.               (line    6)
28186* COFF symbol storage class:             Scl.                (line    6)
28187* COFF symbol type:                      Type.               (line   11)
28188* COFF symbols, debugging:               Def.                (line    6)
28189* COFF value attribute:                  Val.                (line    6)
28190* COMDAT:                                Linkonce.           (line    6)
28191* comm directive:                        Comm.               (line    6)
28192* command line conventions:              Command Line.       (line    6)
28193* command-line options ignored, VAX:     VAX-Opts.           (line    6)
28194* command-line options, V850:            V850 Options.       (line    9)
28195* comment character, XStormy16:          XStormy16-Chars.    (line   11)
28196* comments:                              Comments.           (line    6)
28197* comments, M680x0:                      M68K-Chars.         (line    6)
28198* comments, removed by preprocessor:     Preprocessing.      (line   11)
28199* common directive, SPARC:               Sparc-Directives.   (line   12)
28200* common sections:                       Linkonce.           (line    6)
28201* common variable storage:               bss.                (line    6)
28202* comparison expressions:                Infix Ops.          (line   55)
28203* conditional assembly:                  If.                 (line    6)
28204* constant, single character:            Chars.              (line    6)
28205* constants:                             Constants.          (line    6)
28206* constants, bignum:                     Bignums.            (line    6)
28207* constants, character:                  Characters.         (line    6)
28208* constants, converted by preprocessor:  Preprocessing.      (line   14)
28209* constants, floating point:             Flonums.            (line    6)
28210* constants, integer:                    Integers.           (line    6)
28211* constants, number:                     Numbers.            (line    6)
28212* constants, Sparc:                      Sparc-Constants.    (line    6)
28213* constants, string:                     Strings.            (line    6)
28214* constants, TIC54X:                     TIC54X-Constants.   (line    6)
28215* conversion instructions, i386:         i386-Mnemonics.     (line   68)
28216* conversion instructions, x86-64:       i386-Mnemonics.     (line   68)
28217* coprocessor wait, i386:                i386-Prefixes.      (line   40)
28218* copy directive, TIC54X:                TIC54X-Directives.  (line   54)
28219* core general registers, ARC:           ARC-Regs.           (line   10)
28220* cpu directive, ARC:                    ARC Directives.     (line   27)
28221* cpu directive, M680x0:                 M68K-Directives.    (line   30)
28222* cpu directive, MSP 430:                MSP430 Directives.  (line   22)
28223* CR16 line comment character:           CR16-Chars.         (line    6)
28224* CR16 line separator:                   CR16-Chars.         (line   13)
28225* CR16 Operand Qualifiers:               CR16 Operand Qualifiers.
28226                                                             (line    6)
28227* CR16 support:                          CR16-Dependent.     (line    6)
28228* crash of assembler:                    Bug Criteria.       (line    9)
28229* CRIS --emulation=crisaout command-line option: CRIS-Opts.  (line    9)
28230* CRIS --emulation=criself command-line option: CRIS-Opts.   (line    9)
28231* CRIS --march=ARCHITECTURE command-line option: CRIS-Opts.  (line   34)
28232* CRIS --mul-bug-abort command-line option: CRIS-Opts.       (line   62)
28233* CRIS --no-mul-bug-abort command-line option: CRIS-Opts.    (line   62)
28234* CRIS --no-underscore command-line option: CRIS-Opts.       (line   15)
28235* CRIS --pic command-line option:        CRIS-Opts.          (line   27)
28236* CRIS --underscore command-line option: CRIS-Opts.          (line   15)
28237* CRIS -N command-line option:           CRIS-Opts.          (line   58)
28238* CRIS architecture variant option:      CRIS-Opts.          (line   34)
28239* CRIS assembler directive .arch:        CRIS-Pseudos.       (line   45)
28240* CRIS assembler directive .dword:       CRIS-Pseudos.       (line   12)
28241* CRIS assembler directive .syntax:      CRIS-Pseudos.       (line   17)
28242* CRIS assembler directives:             CRIS-Pseudos.       (line    6)
28243* CRIS built-in symbols:                 CRIS-Symbols.       (line    6)
28244* CRIS instruction expansion:            CRIS-Expand.        (line    6)
28245* CRIS line comment characters:          CRIS-Chars.         (line    6)
28246* CRIS options:                          CRIS-Opts.          (line    6)
28247* CRIS position-independent code:        CRIS-Opts.          (line   27)
28248* CRIS pseudo-op .arch:                  CRIS-Pseudos.       (line   45)
28249* CRIS pseudo-op .dword:                 CRIS-Pseudos.       (line   12)
28250* CRIS pseudo-op .syntax:                CRIS-Pseudos.       (line   17)
28251* CRIS pseudo-ops:                       CRIS-Pseudos.       (line    6)
28252* CRIS register names:                   CRIS-Regs.          (line    6)
28253* CRIS support:                          CRIS-Dependent.     (line    6)
28254* CRIS symbols in position-independent code: CRIS-Pic.       (line    6)
28255* ctbp register, V850:                   V850-Regs.          (line  131)
28256* ctoff pseudo-op, V850:                 V850 Opcodes.       (line  111)
28257* ctpc register, V850:                   V850-Regs.          (line  119)
28258* ctpsw register, V850:                  V850-Regs.          (line  122)
28259* current address:                       Dot.                (line    6)
28260* current address, advancing:            Org.                (line    6)
28261* D10V @word modifier:                   D10V-Word.          (line    6)
28262* D10V addressing modes:                 D10V-Addressing.    (line    6)
28263* D10V floating point:                   D10V-Float.         (line    6)
28264* D10V line comment character:           D10V-Chars.         (line    6)
28265* D10V opcode summary:                   D10V-Opcodes.       (line    6)
28266* D10V optimization:                     Overview.           (line  665)
28267* D10V options:                          D10V-Opts.          (line    6)
28268* D10V registers:                        D10V-Regs.          (line    6)
28269* D10V size modifiers:                   D10V-Size.          (line    6)
28270* D10V sub-instruction ordering:         D10V-Chars.         (line   14)
28271* D10V sub-instructions:                 D10V-Subs.          (line    6)
28272* D10V support:                          D10V-Dependent.     (line    6)
28273* D10V syntax:                           D10V-Syntax.        (line    6)
28274* d24 directive, Z80:                    Z80 Directives.     (line   32)
28275* D30V addressing modes:                 D30V-Addressing.    (line    6)
28276* D30V floating point:                   D30V-Float.         (line    6)
28277* D30V Guarded Execution:                D30V-Guarded.       (line    6)
28278* D30V line comment character:           D30V-Chars.         (line    6)
28279* D30V nops:                             Overview.           (line  673)
28280* D30V nops after 32-bit multiply:       Overview.           (line  676)
28281* D30V opcode summary:                   D30V-Opcodes.       (line    6)
28282* D30V optimization:                     Overview.           (line  670)
28283* D30V options:                          D30V-Opts.          (line    6)
28284* D30V registers:                        D30V-Regs.          (line    6)
28285* D30V size modifiers:                   D30V-Size.          (line    6)
28286* D30V sub-instruction ordering:         D30V-Chars.         (line   14)
28287* D30V sub-instructions:                 D30V-Subs.          (line    6)
28288* D30V support:                          D30V-Dependent.     (line    6)
28289* D30V syntax:                           D30V-Syntax.        (line    6)
28290* d32 directive, Z80:                    Z80 Directives.     (line   37)
28291* data alignment on SPARC:               Sparc-Aligned-Data. (line    6)
28292* data and text sections, joining:       R.                  (line    6)
28293* data directive:                        Data.               (line    6)
28294* data directive, TIC54X:                TIC54X-Directives.  (line   61)
28295* Data directives:                       RISC-V-Directives.  (line   12)
28296* data relocations, ARM:                 ARM-Relocations.    (line    6)
28297* data section:                          Ld Sections.        (line    9)
28298* data1 directive, M680x0:               M68K-Directives.    (line    9)
28299* data2 directive, M680x0:               M68K-Directives.    (line   12)
28300* db directive, Z80:                     Z80 Directives.     (line   18)
28301* dbpc register, V850:                   V850-Regs.          (line  125)
28302* dbpsw register, V850:                  V850-Regs.          (line  128)
28303* dc directive:                          Dc.                 (line    6)
28304* dcb directive:                         Dcb.                (line    6)
28305* DCCM RAM Configuration Register, ARC:  ARC-Regs.           (line  102)
28306* debuggers, and symbol order:           Symbols.            (line   10)
28307* debugging COFF symbols:                Def.                (line    6)
28308* DEC syntax:                            PDP-11-Syntax.      (line    6)
28309* decimal integers:                      Integers.           (line   12)
28310* def directive:                         Def.                (line    6)
28311* def directive, TIC54X:                 TIC54X-Directives.  (line  103)
28312* def24 directive, Z80:                  Z80 Directives.     (line   33)
28313* def32 directive, Z80:                  Z80 Directives.     (line   38)
28314* defb directive, Z80:                   Z80 Directives.     (line   19)
28315* defl directive, Z80:                   Z80 Directives.     (line   47)
28316* defm directive, Z80:                   Z80 Directives.     (line   20)
28317* defs directive, Z80:                   Z80 Directives.     (line   43)
28318* defw directive, Z80:                   Z80 Directives.     (line   28)
28319* density instructions:                  Density Instructions.
28320                                                             (line    6)
28321* dependency tracking:                   MD.                 (line    6)
28322* deprecated directives:                 Deprecated.         (line    6)
28323* desc directive:                        Desc.               (line    6)
28324* descriptor, of a.out symbol:           Symbol Desc.        (line    6)
28325* dfloat directive, VAX:                 VAX-directives.     (line   10)
28326* difference tables altered:             Word.               (line   12)
28327* difference tables, warning:            K.                  (line    6)
28328* differences, mmixal:                   MMIX-mmixal.        (line    6)
28329* dim directive:                         Dim.                (line    6)
28330* directives and instructions:           Statements.         (line   20)
28331* directives for PowerPC:                PowerPC-Pseudo.     (line    6)
28332* directives for SCORE:                  SCORE-Pseudo.       (line    6)
28333* directives, Blackfin:                  Blackfin Directives.
28334                                                             (line    6)
28335* directives, M32R:                      M32R-Directives.    (line    6)
28336* directives, M680x0:                    M68K-Directives.    (line    6)
28337* directives, machine independent:       Pseudo Ops.         (line    6)
28338* directives, Xtensa:                    Xtensa Directives.  (line    6)
28339* directives, Z8000:                     Z8000 Directives.   (line    6)
28340* Disable floating-point instructions:   MIPS Floating-Point.
28341                                                             (line    6)
28342* Disable single-precision floating-point operations: MIPS Floating-Point.
28343                                                             (line   12)
28344* displacement sizing character, VAX:    VAX-operands.       (line   12)
28345* dollar local symbols:                  Symbol Names.       (line  124)
28346* dot (symbol):                          Dot.                (line    6)
28347* double directive:                      Double.             (line    6)
28348* double directive, i386:                i386-Float.         (line   14)
28349* double directive, M680x0:              M68K-Float.         (line   14)
28350* double directive, M68HC11:             M68HC11-Float.      (line   14)
28351* double directive, RX:                  RX-Float.           (line   11)
28352* double directive, TIC54X:              TIC54X-Directives.  (line   64)
28353* double directive, VAX:                 VAX-float.          (line   15)
28354* double directive, x86-64:              i386-Float.         (line   14)
28355* double directive, XGATE:               XGATE-Float.        (line   13)
28356* doublequote (\"):                      Strings.            (line   43)
28357* drlist directive, TIC54X:              TIC54X-Directives.  (line   73)
28358* drnolist directive, TIC54X:            TIC54X-Directives.  (line   73)
28359* ds directive:                          Ds.                 (line    6)
28360* ds directive, Z80:                     Z80 Directives.     (line   42)
28361* DTP-relative data directives:          RISC-V-Directives.  (line   18)
28362* dw directive, Z80:                     Z80 Directives.     (line   27)
28363* dword directive, BPF:                  BPF Directives.     (line   15)
28364* dword directive, Nios II:              Nios II Directives. (line   16)
28365* dword directive, PRU:                  PRU Directives.     (line   13)
28366* EB command-line option, C-SKY:         C-SKY Options.      (line   18)
28367* EB command-line option, Nios II:       Nios II Options.    (line   23)
28368* ecr register, V850:                    V850-Regs.          (line  113)
28369* eight-byte integer <1>:                Quad.               (line    9)
28370* eight-byte integer:                    8byte.              (line    6)
28371* eipc register, V850:                   V850-Regs.          (line  101)
28372* eipsw register, V850:                  V850-Regs.          (line  104)
28373* eject directive:                       Eject.              (line    6)
28374* EL command-line option, C-SKY:         C-SKY Options.      (line   14)
28375* EL command-line option, Nios II:       Nios II Options.    (line   26)
28376* ELF symbol type:                       Type.               (line   22)
28377* else directive:                        Else.               (line    6)
28378* elseif directive:                      Elseif.             (line    6)
28379* empty expressions:                     Empty Exprs.        (line    6)
28380* emsg directive, TIC54X:                TIC54X-Directives.  (line   77)
28381* emulation:                             Overview.           (line 1145)
28382* encoding options, i386:                i386-Mnemonics.     (line   40)
28383* encoding options, x86-64:              i386-Mnemonics.     (line   40)
28384* end directive:                         End.                (line    6)
28385* endef directive:                       Endef.              (line    6)
28386* endfunc directive:                     Endfunc.            (line    6)
28387* endianness, MIPS:                      Overview.           (line  891)
28388* endianness, PJ:                        Overview.           (line  791)
28389* endif directive:                       Endif.              (line    6)
28390* endloop directive, TIC54X:             TIC54X-Directives.  (line  143)
28391* endm directive:                        Macro.              (line  163)
28392* endm directive, TIC54X:                TIC54X-Directives.  (line  153)
28393* endproc directive, OpenRISC:           OpenRISC-Directives.
28394                                                             (line   24)
28395* endstruct directive, TIC54X:           TIC54X-Directives.  (line  216)
28396* endunion directive, TIC54X:            TIC54X-Directives.  (line  250)
28397* environment settings, TIC54X:          TIC54X-Env.         (line    6)
28398* EOF, newline must precede:             Statements.         (line   14)
28399* ep register, V850:                     V850-Regs.          (line   95)
28400* Epiphany line comment character:       Epiphany-Chars.     (line    6)
28401* Epiphany line separator:               Epiphany-Chars.     (line   14)
28402* Epiphany options:                      Epiphany Options.   (line    6)
28403* Epiphany support:                      Epiphany-Dependent. (line    6)
28404* equ directive:                         Equ.                (line    6)
28405* equ directive, TIC54X:                 TIC54X-Directives.  (line  191)
28406* equ directive, Z80:                    Z80 Directives.     (line   52)
28407* equiv directive:                       Equiv.              (line    6)
28408* eqv directive:                         Eqv.                (line    6)
28409* err directive:                         Err.                (line    6)
28410* error directive:                       Error.              (line    6)
28411* error messages:                        Errors.             (line    6)
28412* error on valid input:                  Bug Criteria.       (line   12)
28413* errors, caused by warnings:            W.                  (line   16)
28414* errors, continuing after:              Z.                  (line    6)
28415* escape codes, character:               Strings.            (line   15)
28416* eval directive, TIC54X:                TIC54X-Directives.  (line   24)
28417* even:                                  Z8000 Directives.   (line   58)
28418* even directive, M680x0:                M68K-Directives.    (line   15)
28419* even directive, TIC54X:                TIC54X-Directives.  (line    6)
28420* Exception Cause Register, ARC:         ARC-Regs.           (line   64)
28421* Exception Return Address, ARC:         ARC-Regs.           (line   77)
28422* exitm directive:                       Macro.              (line  166)
28423* expr (internal section):               As Sections.        (line   17)
28424* expression arguments:                  Arguments.          (line    6)
28425* expressions:                           Expressions.        (line    6)
28426* expressions, comparison:               Infix Ops.          (line   55)
28427* expressions, empty:                    Empty Exprs.        (line    6)
28428* expressions, integer:                  Integer Exprs.      (line    6)
28429* extAuxRegister directive, ARC:         ARC Directives.     (line  106)
28430* extCondCode directive, ARC:            ARC Directives.     (line  128)
28431* extCoreRegister directive, ARC:        ARC Directives.     (line  139)
28432* extend directive M680x0:               M68K-Float.         (line   17)
28433* extend directive M68HC11:              M68HC11-Float.      (line   17)
28434* extend directive XGATE:                XGATE-Float.        (line   16)
28435* extension core registers, ARC:         ARC-Regs.           (line   38)
28436* extension instructions, i386:          i386-Mnemonics.     (line   87)
28437* extension instructions, x86-64:        i386-Mnemonics.     (line   87)
28438* extern directive:                      Extern.             (line    6)
28439* extInstruction directive, ARC:         ARC Directives.     (line  167)
28440* fail directive:                        Fail.               (line    6)
28441* far_mode directive, TIC54X:            TIC54X-Directives.  (line   82)
28442* faster processing (-f):                f.                  (line    6)
28443* fatal signal:                          Bug Criteria.       (line    9)
28444* fclist directive, TIC54X:              TIC54X-Directives.  (line   87)
28445* fcnolist directive, TIC54X:            TIC54X-Directives.  (line   87)
28446* fepc register, V850:                   V850-Regs.          (line  107)
28447* fepsw register, V850:                  V850-Regs.          (line  110)
28448* ffloat directive, VAX:                 VAX-directives.     (line   14)
28449* field directive, TIC54X:               TIC54X-Directives.  (line   91)
28450* file directive:                        File.               (line    6)
28451* file directive, MSP 430:               MSP430 Directives.  (line    6)
28452* file name, logical:                    File.               (line   13)
28453* file names and line numbers, in warnings/errors: Errors.   (line   16)
28454* files, including:                      Include.            (line    6)
28455* files, input:                          Input Files.        (line    6)
28456* fill directive:                        Fill.               (line    6)
28457* filling memory <1>:                    Space.              (line    6)
28458* filling memory:                        Skip.               (line    6)
28459* filling memory with no-op instructions <1>: Nops.          (line    6)
28460* filling memory with no-op instructions: Nop.               (line    6)
28461* filling memory with zero bytes:        Zero.               (line    6)
28462* FLIX syntax:                           Xtensa Syntax.      (line    6)
28463* float directive:                       Float.              (line    6)
28464* float directive, i386:                 i386-Float.         (line   14)
28465* float directive, M680x0:               M68K-Float.         (line   11)
28466* float directive, M68HC11:              M68HC11-Float.      (line   11)
28467* float directive, RX:                   RX-Float.           (line    8)
28468* float directive, TIC54X:               TIC54X-Directives.  (line   64)
28469* float directive, VAX:                  VAX-float.          (line   15)
28470* float directive, x86-64:               i386-Float.         (line   14)
28471* float directive, XGATE:                XGATE-Float.        (line   10)
28472* floating point numbers:                Flonums.            (line    6)
28473* floating point numbers (double):       Double.             (line    6)
28474* floating point numbers (single) <1>:   Single.             (line    6)
28475* floating point numbers (single):       Float.              (line    6)
28476* floating point, AArch64 (IEEE):        AArch64 Floating Point.
28477                                                             (line    6)
28478* floating point, Alpha (IEEE):          Alpha Floating Point.
28479                                                             (line    6)
28480* floating point, ARM (IEEE):            ARM Floating Point. (line    6)
28481* floating point, D10V:                  D10V-Float.         (line    6)
28482* floating point, D30V:                  D30V-Float.         (line    6)
28483* floating point, H8/300 (IEEE):         H8/300 Floating Point.
28484                                                             (line    6)
28485* floating point, HPPA (IEEE):           HPPA Floating Point.
28486                                                             (line    6)
28487* floating point, i386:                  i386-Float.         (line    6)
28488* floating point, M680x0:                M68K-Float.         (line    6)
28489* floating point, M68HC11:               M68HC11-Float.      (line    6)
28490* floating point, MSP 430 (IEEE):        MSP430 Floating Point.
28491                                                             (line    6)
28492* floating point, OPENRISC (IEEE):       OpenRISC-Float.     (line    6)
28493* floating point, RX:                    RX-Float.           (line    6)
28494* floating point, s390:                  s390 Floating Point.
28495                                                             (line    6)
28496* floating point, SH (IEEE):             SH Floating Point.  (line    6)
28497* floating point, SPARC (IEEE):          Sparc-Float.        (line    6)
28498* floating point, V850 (IEEE):           V850 Floating Point.
28499                                                             (line    6)
28500* floating point, VAX:                   VAX-float.          (line    6)
28501* floating point, WebAssembly (IEEE):    WebAssembly-Floating-Point.
28502                                                             (line    6)
28503* floating point, x86-64:                i386-Float.         (line    6)
28504* floating point, XGATE:                 XGATE-Float.        (line    6)
28505* floating point, Z80:                   Z80 Floating Point. (line    6)
28506* flonums:                               Flonums.            (line    6)
28507* force2bsr command-line option, C-SKY:  C-SKY Options.      (line   43)
28508* format of error messages:              Errors.             (line   38)
28509* format of warning messages:            Errors.             (line   12)
28510* formfeed (\f):                         Strings.            (line   18)
28511* four-byte integer:                     4byte.              (line    6)
28512* fpic command-line option, C-SKY:       C-SKY Options.      (line   22)
28513* frame pointer, ARC:                    ARC-Regs.           (line   17)
28514* func directive:                        Func.               (line    6)
28515* functions, in expressions:             Operators.          (line    6)
28516* gfloat directive, VAX:                 VAX-directives.     (line   18)
28517* global:                                Z8000 Directives.   (line   21)
28518* global directive:                      Global.             (line    6)
28519* global directive, TIC54X:              TIC54X-Directives.  (line  103)
28520* global pointer, ARC:                   ARC-Regs.           (line   14)
28521* got directive, Nios II:                Nios II Relocations.
28522                                                             (line   38)
28523* got_hiadj directive, Nios II:          Nios II Relocations.
28524                                                             (line   38)
28525* got_lo directive, Nios II:             Nios II Relocations.
28526                                                             (line   38)
28527* gotoff directive, Nios II:             Nios II Relocations.
28528                                                             (line   38)
28529* gotoff_hiadj directive, Nios II:       Nios II Relocations.
28530                                                             (line   38)
28531* gotoff_lo directive, Nios II:          Nios II Relocations.
28532                                                             (line   38)
28533* gp register, MIPS:                     MIPS Small Data.    (line    6)
28534* gp register, V850:                     V850-Regs.          (line   17)
28535* gprel directive, Nios II:              Nios II Relocations.
28536                                                             (line   26)
28537* grouping data:                         Sub-Sections.       (line    6)
28538* H8/300 addressing modes:               H8/300-Addressing.  (line    6)
28539* H8/300 floating point (IEEE):          H8/300 Floating Point.
28540                                                             (line    6)
28541* H8/300 line comment character:         H8/300-Chars.       (line    6)
28542* H8/300 line separator:                 H8/300-Chars.       (line    8)
28543* H8/300 machine directives (none):      H8/300 Directives.  (line    6)
28544* H8/300 opcode summary:                 H8/300 Opcodes.     (line    6)
28545* H8/300 options:                        H8/300 Options.     (line    6)
28546* H8/300 registers:                      H8/300-Regs.        (line    6)
28547* H8/300 size suffixes:                  H8/300 Opcodes.     (line  163)
28548* H8/300 support:                        H8/300-Dependent.   (line    6)
28549* H8/300H, assembling for:               H8/300 Directives.  (line    8)
28550* half directive, BPF:                   BPF Directives.     (line    9)
28551* half directive, Nios II:               Nios II Directives. (line   10)
28552* half directive, SPARC:                 Sparc-Directives.   (line   17)
28553* half directive, TIC54X:                TIC54X-Directives.  (line  111)
28554* hex character code (\XD...):           Strings.            (line   36)
28555* hexadecimal integers:                  Integers.           (line   15)
28556* hexadecimal prefix, S12Z:              S12Z Options.       (line   17)
28557* hexadecimal prefix, Z80:               Z80-Chars.          (line   15)
28558* hfloat directive, i386:                i386-Float.         (line   14)
28559* hfloat directive, VAX:                 VAX-directives.     (line   22)
28560* hfloat directive, x86-64:              i386-Float.         (line   14)
28561* hi directive, Nios II:                 Nios II Relocations.
28562                                                             (line   20)
28563* hi pseudo-op, V850:                    V850 Opcodes.       (line   33)
28564* hi0 pseudo-op, V850:                   V850 Opcodes.       (line   10)
28565* hiadj directive, Nios II:              Nios II Relocations.
28566                                                             (line    6)
28567* hidden directive:                      Hidden.             (line    6)
28568* high directive, M32R:                  M32R-Directives.    (line   18)
28569* hilo pseudo-op, V850:                  V850 Opcodes.       (line   55)
28570* HPPA directives not supported:         HPPA Directives.    (line   11)
28571* HPPA floating point (IEEE):            HPPA Floating Point.
28572                                                             (line    6)
28573* HPPA Syntax:                           HPPA Options.       (line    8)
28574* HPPA-only directives:                  HPPA Directives.    (line   24)
28575* hword directive:                       hword.              (line    6)
28576* i386 16-bit code:                      i386-16bit.         (line    6)
28577* i386 arch directive:                   i386-Arch.          (line    6)
28578* i386 att_syntax pseudo op:             i386-Variations.    (line    6)
28579* i386 conversion instructions:          i386-Mnemonics.     (line   68)
28580* i386 extension instructions:           i386-Mnemonics.     (line   87)
28581* i386 floating point:                   i386-Float.         (line    6)
28582* i386 immediate operands:               i386-Variations.    (line   15)
28583* i386 instruction naming:               i386-Mnemonics.     (line    9)
28584* i386 instruction prefixes:             i386-Prefixes.      (line    6)
28585* i386 intel_syntax pseudo op:           i386-Variations.    (line    6)
28586* i386 jump optimization:                i386-Jumps.         (line    6)
28587* i386 jump, call, return:               i386-Variations.    (line   46)
28588* i386 jump/call operands:               i386-Variations.    (line   15)
28589* i386 line comment character:           i386-Chars.         (line    6)
28590* i386 line separator:                   i386-Chars.         (line   18)
28591* i386 memory references:                i386-Memory.        (line    6)
28592* i386 mnemonic compatibility:           i386-Mnemonics.     (line  123)
28593* i386 mul, imul instructions:           i386-Notes.         (line    6)
28594* i386 options:                          i386-Options.       (line    6)
28595* i386 register operands:                i386-Variations.    (line   15)
28596* i386 registers:                        i386-Regs.          (line    6)
28597* i386 sections:                         i386-Variations.    (line   52)
28598* i386 size suffixes:                    i386-Variations.    (line   29)
28599* i386 source, destination operands:     i386-Variations.    (line   22)
28600* i386 support:                          i386-Dependent.     (line    6)
28601* i386 syntax compatibility:             i386-Variations.    (line    6)
28602* i80386 support:                        i386-Dependent.     (line    6)
28603* IA-64 line comment character:          IA-64-Chars.        (line    6)
28604* IA-64 line separator:                  IA-64-Chars.        (line    8)
28605* IA-64 options:                         IA-64 Options.      (line    6)
28606* IA-64 Processor-status-Register bit names: IA-64-Bits.     (line    6)
28607* IA-64 registers:                       IA-64-Regs.         (line    6)
28608* IA-64 relocations:                     IA-64-Relocs.       (line    6)
28609* IA-64 support:                         IA-64-Dependent.    (line    6)
28610* IA-64 Syntax:                          IA-64 Options.      (line   87)
28611* ident directive:                       Ident.              (line    6)
28612* identifiers, ARM:                      ARM-Chars.          (line   19)
28613* identifiers, MSP 430:                  MSP430-Chars.       (line   17)
28614* if directive:                          If.                 (line    6)
28615* ifb directive:                         If.                 (line   21)
28616* ifc directive:                         If.                 (line   25)
28617* ifdef directive:                       If.                 (line   16)
28618* ifeq directive:                        If.                 (line   33)
28619* ifeqs directive:                       If.                 (line   36)
28620* ifge directive:                        If.                 (line   40)
28621* ifgt directive:                        If.                 (line   44)
28622* ifle directive:                        If.                 (line   48)
28623* iflt directive:                        If.                 (line   52)
28624* ifnb directive:                        If.                 (line   56)
28625* ifnc directive:                        If.                 (line   61)
28626* ifndef directive:                      If.                 (line   65)
28627* ifne directive:                        If.                 (line   72)
28628* ifnes directive:                       If.                 (line   76)
28629* ifnotdef directive:                    If.                 (line   65)
28630* immediate character, AArch64:          AArch64-Chars.      (line   13)
28631* immediate character, ARM:              ARM-Chars.          (line   17)
28632* immediate character, M680x0:           M68K-Chars.         (line   13)
28633* immediate character, VAX:              VAX-operands.       (line    6)
28634* immediate fields, relaxation:          Xtensa Immediate Relaxation.
28635                                                             (line    6)
28636* immediate operands, i386:              i386-Variations.    (line   15)
28637* immediate operands, x86-64:            i386-Variations.    (line   15)
28638* imul instruction, i386:                i386-Notes.         (line    6)
28639* imul instruction, x86-64:              i386-Notes.         (line    6)
28640* incbin directive:                      Incbin.             (line    6)
28641* include directive:                     Include.            (line    6)
28642* include directive search path:         I.                  (line    6)
28643* indirect character, VAX:               VAX-operands.       (line    9)
28644* infix operators:                       Infix Ops.          (line    6)
28645* inhibiting interrupts, i386:           i386-Prefixes.      (line   36)
28646* input:                                 Input Files.        (line    6)
28647* input file linenumbers:                Input Files.        (line   35)
28648* INSN directives:                       RISC-V-Directives.  (line  107)
28649* instruction aliases, s390:             s390 Aliases.       (line    6)
28650* instruction bundle:                    Bundle directives.  (line    9)
28651* instruction expansion, CRIS:           CRIS-Expand.        (line    6)
28652* instruction expansion, MMIX:           MMIX-Expand.        (line    6)
28653* instruction formats, risc-v:           RISC-V-Formats.     (line    6)
28654* instruction formats, s390:             s390 Formats.       (line    6)
28655* instruction marker, s390:              s390 Instruction Marker.
28656                                                             (line    6)
28657* instruction mnemonics, s390:           s390 Mnemonics.     (line    6)
28658* instruction naming, i386:              i386-Mnemonics.     (line    9)
28659* instruction naming, x86-64:            i386-Mnemonics.     (line    9)
28660* instruction operand modifier, s390:    s390 Operand Modifier.
28661                                                             (line    6)
28662* instruction operands, s390:            s390 Operands.      (line    6)
28663* instruction prefixes, i386:            i386-Prefixes.      (line    6)
28664* instruction set, M680x0:               M68K-opcodes.       (line    6)
28665* instruction set, M68HC11:              M68HC11-opcodes.    (line    6)
28666* instruction set, XGATE:                XGATE-opcodes.      (line    6)
28667* instruction summary, AVR:              AVR Opcodes.        (line    6)
28668* instruction summary, D10V:             D10V-Opcodes.       (line    6)
28669* instruction summary, D30V:             D30V-Opcodes.       (line    6)
28670* instruction summary, H8/300:           H8/300 Opcodes.     (line    6)
28671* instruction summary, LM32 <1>:         OpenRISC-Opcodes.   (line    6)
28672* instruction summary, LM32:             LM32 Opcodes.       (line    6)
28673* instruction summary, SH:               SH Opcodes.         (line    6)
28674* instruction summary, Z8000:            Z8000 Opcodes.      (line    6)
28675* instruction syntax, s390:              s390 Syntax.        (line    6)
28676* instructions and directives:           Statements.         (line   20)
28677* int directive:                         Int.                (line    6)
28678* int directive, H8/300:                 H8/300 Directives.  (line    6)
28679* int directive, i386:                   i386-Float.         (line   22)
28680* int directive, TIC54X:                 TIC54X-Directives.  (line  111)
28681* int directive, x86-64:                 i386-Float.         (line   22)
28682* integer expressions:                   Integer Exprs.      (line    6)
28683* integer, 16-byte:                      Octa.               (line    6)
28684* integer, 2-byte:                       2byte.              (line    6)
28685* integer, 4-byte:                       4byte.              (line    6)
28686* integer, 8-byte <1>:                   Quad.               (line    9)
28687* integer, 8-byte:                       8byte.              (line    6)
28688* integers:                              Integers.           (line    6)
28689* integers, 16-bit:                      hword.              (line    6)
28690* integers, 32-bit:                      Int.                (line    6)
28691* integers, binary:                      Integers.           (line    6)
28692* integers, decimal:                     Integers.           (line   12)
28693* integers, hexadecimal:                 Integers.           (line   15)
28694* integers, octal:                       Integers.           (line    9)
28695* integers, one byte:                    Byte.               (line    6)
28696* intel_syntax pseudo op, i386:          i386-Variations.    (line    6)
28697* intel_syntax pseudo op, x86-64:        i386-Variations.    (line    6)
28698* internal assembler sections:           As Sections.        (line    6)
28699* internal directive:                    Internal.           (line    6)
28700* interrupt link register, ARC:          ARC-Regs.           (line   27)
28701* Interrupt Vector Base address, ARC:    ARC-Regs.           (line   67)
28702* invalid input:                         Bug Criteria.       (line   14)
28703* invocation summary:                    Overview.           (line    6)
28704* IP2K architecture options:             IP2K-Opts.          (line   14)
28705* IP2K line comment character:           IP2K-Chars.         (line    6)
28706* IP2K line separator:                   IP2K-Chars.         (line   14)
28707* IP2K options:                          IP2K-Opts.          (line    6)
28708* IP2K support:                          IP2K-Dependent.     (line    6)
28709* irp directive:                         Irp.                (line    6)
28710* irpc directive:                        Irpc.               (line    6)
28711* joining text and data sections:        R.                  (line    6)
28712* jsri2bsr command-line option, C-SKY:   C-SKY Options.      (line   52)
28713* jump instructions, i386:               i386-Mnemonics.     (line  117)
28714* jump instructions, relaxation:         Xtensa Jump Relaxation.
28715                                                             (line    6)
28716* jump instructions, x86-64:             i386-Mnemonics.     (line  117)
28717* jump optimization, i386:               i386-Jumps.         (line    6)
28718* jump optimization, x86-64:             i386-Jumps.         (line    6)
28719* jump/call operands, i386:              i386-Variations.    (line   15)
28720* jump/call operands, x86-64:            i386-Variations.    (line   15)
28721* L16SI instructions, relaxation:        Xtensa Immediate Relaxation.
28722                                                             (line   23)
28723* L16UI instructions, relaxation:        Xtensa Immediate Relaxation.
28724                                                             (line   23)
28725* L32I instructions, relaxation:         Xtensa Immediate Relaxation.
28726                                                             (line   23)
28727* L8UI instructions, relaxation:         Xtensa Immediate Relaxation.
28728                                                             (line   23)
28729* label (:):                             Statements.         (line   31)
28730* label directive, TIC54X:               TIC54X-Directives.  (line  123)
28731* labels:                                Labels.             (line    6)
28732* labels, Z80:                           Z80-Labels.         (line    6)
28733* largecomm directive, ELF:              i386-Directives.    (line   17)
28734* lcomm directive <1>:                   ARC Directives.     (line    9)
28735* lcomm directive:                       Lcomm.              (line    6)
28736* lcomm directive, COFF:                 i386-Directives.    (line    6)
28737* lcommon directive, ARC:                ARC Directives.     (line   24)
28738* ld:                                    Object.             (line   15)
28739* ldouble directive M680x0:              M68K-Float.         (line   17)
28740* ldouble directive M68HC11:             M68HC11-Float.      (line   17)
28741* ldouble directive XGATE:               XGATE-Float.        (line   16)
28742* ldouble directive, TIC54X:             TIC54X-Directives.  (line   64)
28743* LDR reg,=<expr> pseudo op, AArch64:    AArch64 Opcodes.    (line    9)
28744* LDR reg,=<label> pseudo op, ARM:       ARM Opcodes.        (line   15)
28745* LEB128 directives:                     RISC-V-Directives.  (line   27)
28746* length directive, TIC54X:              TIC54X-Directives.  (line  127)
28747* length of symbols:                     Symbol Intro.       (line   20)
28748* level 1 interrupt link register, ARC:  ARC-Regs.           (line   23)
28749* level 2 interrupt link register, ARC:  ARC-Regs.           (line   31)
28750* lflags directive (ignored):            Lflags.             (line    6)
28751* line:                                  ARC-Chars.          (line   30)
28752* line comment character:                Comments.           (line   19)
28753* line comment character, AArch64:       AArch64-Chars.      (line    6)
28754* line comment character, Alpha:         Alpha-Chars.        (line    6)
28755* line comment character, ARC:           ARC-Chars.          (line   11)
28756* line comment character, ARM:           ARM-Chars.          (line    6)
28757* line comment character, AVR:           AVR-Chars.          (line    6)
28758* line comment character, BPF:           BPF-Chars.          (line    6)
28759* line comment character, CR16:          CR16-Chars.         (line    6)
28760* line comment character, D10V:          D10V-Chars.         (line    6)
28761* line comment character, D30V:          D30V-Chars.         (line    6)
28762* line comment character, Epiphany:      Epiphany-Chars.     (line    6)
28763* line comment character, H8/300:        H8/300-Chars.       (line    6)
28764* line comment character, i386:          i386-Chars.         (line    6)
28765* line comment character, IA-64:         IA-64-Chars.        (line    6)
28766* line comment character, IP2K:          IP2K-Chars.         (line    6)
28767* line comment character, LM32:          LM32-Chars.         (line    6)
28768* line comment character, M32C:          M32C-Chars.         (line    6)
28769* line comment character, M680x0:        M68K-Chars.         (line    6)
28770* line comment character, M68HC11:       M68HC11-Syntax.     (line   17)
28771* line comment character, Meta:          Meta-Chars.         (line    6)
28772* line comment character, MicroBlaze:    MicroBlaze-Chars.   (line    6)
28773* line comment character, MIPS:          MIPS-Chars.         (line    6)
28774* line comment character, MSP 430:       MSP430-Chars.       (line    6)
28775* line comment character, Nios II:       Nios II Chars.      (line    6)
28776* line comment character, NS32K:         NS32K-Chars.        (line    6)
28777* line comment character, OpenRISC:      OpenRISC-Chars.     (line    6)
28778* line comment character, PJ:            PJ-Chars.           (line    6)
28779* line comment character, PowerPC:       PowerPC-Chars.      (line    6)
28780* line comment character, PRU:           PRU Chars.          (line    6)
28781* line comment character, RL78:          RL78-Chars.         (line    6)
28782* line comment character, RX:            RX-Chars.           (line    6)
28783* line comment character, S12Z:          S12Z Syntax Overview.
28784                                                             (line   32)
28785* line comment character, s390:          s390 Characters.    (line    6)
28786* line comment character, SCORE:         SCORE-Chars.        (line    6)
28787* line comment character, SH:            SH-Chars.           (line    6)
28788* line comment character, Sparc:         Sparc-Chars.        (line    6)
28789* line comment character, TIC54X:        TIC54X-Chars.       (line    6)
28790* line comment character, TIC6X:         TIC6X Syntax.       (line    6)
28791* line comment character, V850:          V850-Chars.         (line    6)
28792* line comment character, VAX:           VAX-Chars.          (line    6)
28793* line comment character, Visium:        Visium Characters.  (line    6)
28794* line comment character, WebAssembly:   WebAssembly-Chars.  (line    6)
28795* line comment character, XGATE:         XGATE-Syntax.       (line   16)
28796* line comment character, XStormy16:     XStormy16-Chars.    (line    6)
28797* line comment character, Z80:           Z80-Chars.          (line    6)
28798* line comment character, Z8000:         Z8000-Chars.        (line    6)
28799* line comment characters, CRIS:         CRIS-Chars.         (line    6)
28800* line comment characters, MMIX:         MMIX-Chars.         (line    6)
28801* line directive:                        Line.               (line    6)
28802* line directive, MSP 430:               MSP430 Directives.  (line   14)
28803* line numbers, in input files:          Input Files.        (line   35)
28804* line separator character:              Statements.         (line    6)
28805* line separator character, Nios II:     Nios II Chars.      (line    6)
28806* line separator, AArch64:               AArch64-Chars.      (line   10)
28807* line separator, Alpha:                 Alpha-Chars.        (line   11)
28808* line separator, ARC:                   ARC-Chars.          (line   27)
28809* line separator, ARM:                   ARM-Chars.          (line   14)
28810* line separator, AVR:                   AVR-Chars.          (line   14)
28811* line separator, CR16:                  CR16-Chars.         (line   13)
28812* line separator, Epiphany:              Epiphany-Chars.     (line   14)
28813* line separator, H8/300:                H8/300-Chars.       (line    8)
28814* line separator, i386:                  i386-Chars.         (line   18)
28815* line separator, IA-64:                 IA-64-Chars.        (line    8)
28816* line separator, IP2K:                  IP2K-Chars.         (line   14)
28817* line separator, LM32:                  LM32-Chars.         (line   12)
28818* line separator, M32C:                  M32C-Chars.         (line   14)
28819* line separator, M680x0:                M68K-Chars.         (line   20)
28820* line separator, M68HC11:               M68HC11-Syntax.     (line   27)
28821* line separator, Meta:                  Meta-Chars.         (line    8)
28822* line separator, MicroBlaze:            MicroBlaze-Chars.   (line   14)
28823* line separator, MIPS:                  MIPS-Chars.         (line   14)
28824* line separator, MSP 430:               MSP430-Chars.       (line   14)
28825* line separator, NS32K:                 NS32K-Chars.        (line   18)
28826* line separator, OpenRISC:              OpenRISC-Chars.     (line    9)
28827* line separator, PJ:                    PJ-Chars.           (line   14)
28828* line separator, PowerPC:               PowerPC-Chars.      (line   18)
28829* line separator, RL78:                  RL78-Chars.         (line   14)
28830* line separator, RX:                    RX-Chars.           (line   14)
28831* line separator, S12Z:                  S12Z Syntax Overview.
28832                                                             (line   41)
28833* line separator, s390:                  s390 Characters.    (line   13)
28834* line separator, SCORE:                 SCORE-Chars.        (line   14)
28835* line separator, SH:                    SH-Chars.           (line    8)
28836* line separator, Sparc:                 Sparc-Chars.        (line   14)
28837* line separator, TIC54X:                TIC54X-Chars.       (line   17)
28838* line separator, TIC6X:                 TIC6X Syntax.       (line   13)
28839* line separator, V850:                  V850-Chars.         (line   13)
28840* line separator, VAX:                   VAX-Chars.          (line   14)
28841* line separator, Visium:                Visium Characters.  (line   14)
28842* line separator, XGATE:                 XGATE-Syntax.       (line   26)
28843* line separator, XStormy16:             XStormy16-Chars.    (line   14)
28844* line separator, Z80:                   Z80-Chars.          (line   13)
28845* line separator, Z8000:                 Z8000-Chars.        (line   13)
28846* lines starting with #:                 Comments.           (line   33)
28847* link register, ARC:                    ARC-Regs.           (line   35)
28848* linker:                                Object.             (line   15)
28849* linker, and assembler:                 Secs Background.    (line   10)
28850* linkonce directive:                    Linkonce.           (line    6)
28851* list directive:                        List.               (line    6)
28852* list directive, TIC54X:                TIC54X-Directives.  (line  131)
28853* listing control, turning off:          Nolist.             (line    6)
28854* listing control, turning on:           List.               (line    6)
28855* listing control: new page:             Eject.              (line    6)
28856* listing control: paper size:           Psize.              (line    6)
28857* listing control: subtitle:             Sbttl.              (line    6)
28858* listing control: title line:           Title.              (line    6)
28859* listings, enabling:                    a.                  (line    6)
28860* literal directive:                     Literal Directive.  (line    6)
28861* literal pool entries, s390:            s390 Literal Pool Entries.
28862                                                             (line    6)
28863* literal_position directive:            Literal Position Directive.
28864                                                             (line    6)
28865* literal_prefix directive:              Literal Prefix Directive.
28866                                                             (line    6)
28867* little endian output, MIPS:            Overview.           (line  894)
28868* little endian output, PJ:              Overview.           (line  794)
28869* little-endian output, MIPS:            MIPS Options.       (line   13)
28870* little-endian output, TIC6X:           TIC6X Options.      (line   46)
28871* LM32 line comment character:           LM32-Chars.         (line    6)
28872* LM32 line separator:                   LM32-Chars.         (line   12)
28873* LM32 modifiers:                        LM32-Modifiers.     (line    6)
28874* LM32 opcode summary:                   LM32 Opcodes.       (line    6)
28875* LM32 options (none):                   LM32 Options.       (line    6)
28876* LM32 register names:                   LM32-Regs.          (line    6)
28877* LM32 support:                          LM32-Dependent.     (line    6)
28878* ln directive:                          Ln.                 (line    6)
28879* lo directive, Nios II:                 Nios II Relocations.
28880                                                             (line   23)
28881* lo pseudo-op, V850:                    V850 Opcodes.       (line   22)
28882* loc directive:                         Loc.                (line    6)
28883* loc_mark_labels directive:             Loc_mark_labels.    (line    6)
28884* local common symbols:                  Lcomm.              (line    6)
28885* local directive:                       Local.              (line    6)
28886* local labels:                          Symbol Names.       (line   53)
28887* local symbol names:                    Symbol Names.       (line   40)
28888* local symbols, retaining in output:    L.                  (line    6)
28889* location counter:                      Dot.                (line    6)
28890* location counter, advancing:           Org.                (line    6)
28891* location counter, Z80:                 Z80-Chars.          (line   15)
28892* logical file name:                     File.               (line   13)
28893* logical line number:                   Line.               (line    6)
28894* logical line numbers:                  Comments.           (line   33)
28895* long directive:                        Long.               (line    6)
28896* long directive, i386:                  i386-Float.         (line   22)
28897* long directive, TIC54X:                TIC54X-Directives.  (line  135)
28898* long directive, x86-64:                i386-Float.         (line   22)
28899* longcall pseudo-op, V850:              V850 Opcodes.       (line  123)
28900* longcalls directive:                   Longcalls Directive.
28901                                                             (line    6)
28902* longjump pseudo-op, V850:              V850 Opcodes.       (line  129)
28903* Loongson Content Address Memory (CAM) generation override: MIPS ASE Instruction Generation Overrides.
28904                                                             (line   82)
28905* Loongson EXTensions (EXT) instructions generation override: MIPS ASE Instruction Generation Overrides.
28906                                                             (line   87)
28907* Loongson EXTensions R2 (EXT2) instructions generation override: MIPS ASE Instruction Generation Overrides.
28908                                                             (line   92)
28909* Loongson MultiMedia extensions Instructions (MMI) generation override: MIPS ASE Instruction Generation Overrides.
28910                                                             (line   77)
28911* loop counter, ARC:                     ARC-Regs.           (line   41)
28912* loop directive, TIC54X:                TIC54X-Directives.  (line  143)
28913* LOOP instructions, alignment:          Xtensa Automatic Alignment.
28914                                                             (line    6)
28915* low directive, M32R:                   M32R-Directives.    (line    9)
28916* lp register, V850:                     V850-Regs.          (line   98)
28917* lval:                                  Z8000 Directives.   (line   27)
28918* LWP, i386:                             i386-LWP.           (line    6)
28919* LWP, x86-64:                           i386-LWP.           (line    6)
28920* M16C architecture option:              M32C-Opts.          (line   12)
28921* M32C architecture option:              M32C-Opts.          (line    9)
28922* M32C line comment character:           M32C-Chars.         (line    6)
28923* M32C line separator:                   M32C-Chars.         (line   14)
28924* M32C modifiers:                        M32C-Modifiers.     (line    6)
28925* M32C options:                          M32C-Opts.          (line    6)
28926* M32C support:                          M32C-Dependent.     (line    6)
28927* M32R architecture options:             M32R-Opts.          (line   17)
28928* M32R directives:                       M32R-Directives.    (line    6)
28929* M32R options:                          M32R-Opts.          (line    6)
28930* M32R support:                          M32R-Dependent.     (line    6)
28931* M32R warnings:                         M32R-Warnings.      (line    6)
28932* M680x0 addressing modes:               M68K-Syntax.        (line   21)
28933* M680x0 architecture options:           M68K-Opts.          (line   98)
28934* M680x0 branch improvement:             M68K-Branch.        (line    6)
28935* M680x0 directives:                     M68K-Directives.    (line    6)
28936* M680x0 floating point:                 M68K-Float.         (line    6)
28937* M680x0 immediate character:            M68K-Chars.         (line   13)
28938* M680x0 line comment character:         M68K-Chars.         (line    6)
28939* M680x0 line separator:                 M68K-Chars.         (line   20)
28940* M680x0 opcodes:                        M68K-opcodes.       (line    6)
28941* M680x0 options:                        M68K-Opts.          (line    6)
28942* M680x0 pseudo-opcodes:                 M68K-Branch.        (line    6)
28943* M680x0 size modifiers:                 M68K-Syntax.        (line    8)
28944* M680x0 support:                        M68K-Dependent.     (line    6)
28945* M680x0 syntax:                         M68K-Syntax.        (line    8)
28946* M68HC11 addressing modes:              M68HC11-Syntax.     (line   30)
28947* M68HC11 and M68HC12 support:           M68HC11-Dependent.  (line    6)
28948* M68HC11 assembler directive .far:      M68HC11-Directives. (line   20)
28949* M68HC11 assembler directive .interrupt: M68HC11-Directives.
28950                                                             (line   26)
28951* M68HC11 assembler directive .mode:     M68HC11-Directives. (line   16)
28952* M68HC11 assembler directive .relax:    M68HC11-Directives. (line   10)
28953* M68HC11 assembler directive .xrefb:    M68HC11-Directives. (line   31)
28954* M68HC11 assembler directives:          M68HC11-Directives. (line    6)
28955* M68HC11 branch improvement:            M68HC11-Branch.     (line    6)
28956* M68HC11 floating point:                M68HC11-Float.      (line    6)
28957* M68HC11 line comment character:        M68HC11-Syntax.     (line   17)
28958* M68HC11 line separator:                M68HC11-Syntax.     (line   27)
28959* M68HC11 modifiers:                     M68HC11-Modifiers.  (line    6)
28960* M68HC11 opcodes:                       M68HC11-opcodes.    (line    6)
28961* M68HC11 options:                       M68HC11-Opts.       (line    6)
28962* M68HC11 pseudo-opcodes:                M68HC11-Branch.     (line    6)
28963* M68HC11 syntax:                        M68HC11-Syntax.     (line    6)
28964* M68HC12 assembler directives:          M68HC11-Directives. (line    6)
28965* mA6 command-line option, ARC:          ARC Options.        (line   14)
28966* mA7 command-line option, ARC:          ARC Options.        (line   39)
28967* machine dependencies:                  Machine Dependencies.
28968                                                             (line    6)
28969* machine directives, AArch64:           AArch64 Directives. (line    6)
28970* machine directives, ARC:               ARC Directives.     (line    6)
28971* machine directives, ARM:               ARM Directives.     (line    6)
28972* machine directives, BPF:               BPF Directives.     (line    6)
28973* machine directives, H8/300 (none):     H8/300 Directives.  (line    6)
28974* machine directives, MSP 430:           MSP430 Directives.  (line    6)
28975* machine directives, Nios II:           Nios II Directives. (line    6)
28976* machine directives, OPENRISC:          OpenRISC-Directives.
28977                                                             (line    6)
28978* machine directives, PRU:               PRU Directives.     (line    6)
28979* machine directives, RISC-V:            RISC-V-Directives.  (line    6)
28980* machine directives, SH:                SH Directives.      (line    6)
28981* machine directives, SPARC:             Sparc-Directives.   (line    6)
28982* machine directives, TIC54X:            TIC54X-Directives.  (line    6)
28983* machine directives, TIC6X:             TIC6X Directives.   (line    6)
28984* machine directives, TILE-Gx:           TILE-Gx Directives. (line    6)
28985* machine directives, TILEPro:           TILEPro Directives. (line    6)
28986* machine directives, V850:              V850 Directives.    (line    6)
28987* machine directives, VAX:               VAX-directives.     (line    6)
28988* machine directives, x86:               i386-Directives.    (line    6)
28989* machine directives, XStormy16:         XStormy16 Directives.
28990                                                             (line    6)
28991* machine independent directives:        Pseudo Ops.         (line    6)
28992* machine instructions (not covered):    Manual.             (line   14)
28993* machine relocations, Nios II:          Nios II Relocations.
28994                                                             (line    6)
28995* machine relocations, PRU:              PRU Relocations.    (line    6)
28996* machine-independent syntax:            Syntax.             (line    6)
28997* macro directive:                       Macro.              (line   28)
28998* macro directive, TIC54X:               TIC54X-Directives.  (line  153)
28999* macros:                                Macro.              (line    6)
29000* macros, count executed:                Macro.              (line  168)
29001* Macros, MSP 430:                       MSP430-Macros.      (line    6)
29002* macros, TIC54X:                        TIC54X-Macros.      (line    6)
29003* make rules:                            MD.                 (line    6)
29004* manual, structure and purpose:         Manual.             (line    6)
29005* marc600 command-line option, ARC:      ARC Options.        (line   14)
29006* mARC601 command-line option, ARC:      ARC Options.        (line   27)
29007* mARC700 command-line option, ARC:      ARC Options.        (line   39)
29008* march command-line option, C-SKY:      C-SKY Options.      (line    6)
29009* march command-line option, Nios II:    Nios II Options.    (line   29)
29010* math builtins, TIC54X:                 TIC54X-Builtins.    (line    6)
29011* Maximum number of continuation lines:  listing.            (line   34)
29012* mbig-endian command-line option, C-SKY: C-SKY Options.     (line   18)
29013* mbranch-stub command-line option, C-SKY: C-SKY Options.    (line   34)
29014* mcache command-line option, C-SKY:     C-SKY Options.      (line  101)
29015* mcp command-line option, C-SKY:        C-SKY Options.      (line   98)
29016* mcpu command-line option, C-SKY:       C-SKY Options.      (line   10)
29017* mdsp command-line option, C-SKY:       C-SKY Options.      (line  110)
29018* medsp command-line option, C-SKY:      C-SKY Options.      (line  113)
29019* melrw command-line option, C-SKY:      C-SKY Options.      (line   64)
29020* mEM command-line option, ARC:          ARC Options.        (line   42)
29021* memory references, i386:               i386-Memory.        (line    6)
29022* memory references, x86-64:             i386-Memory.        (line    6)
29023* memory-mapped registers, TIC54X:       TIC54X-MMRegs.      (line    6)
29024* merging text and data sections:        R.                  (line    6)
29025* messages from assembler:               Errors.             (line    6)
29026* Meta architectures:                    Meta Options.       (line    6)
29027* Meta line comment character:           Meta-Chars.         (line    6)
29028* Meta line separator:                   Meta-Chars.         (line    8)
29029* Meta options:                          Meta Options.       (line    6)
29030* Meta registers:                        Meta-Regs.          (line    6)
29031* Meta support:                          Meta-Dependent.     (line    6)
29032* mforce2bsr command-line option, C-SKY: C-SKY Options.      (line   43)
29033* mhard-float command-line option, C-SKY: C-SKY Options.     (line   92)
29034* mHS command-line option, ARC:          ARC Options.        (line   64)
29035* MicroBlaze architectures:              MicroBlaze-Dependent.
29036                                                             (line    6)
29037* MicroBlaze directives:                 MicroBlaze Directives.
29038                                                             (line    6)
29039* MicroBlaze line comment character:     MicroBlaze-Chars.   (line    6)
29040* MicroBlaze line separator:             MicroBlaze-Chars.   (line   14)
29041* MicroBlaze support:                    MicroBlaze-Dependent.
29042                                                             (line   13)
29043* minus, permitted arguments:            Infix Ops.          (line   49)
29044* MIPS 32-bit microMIPS instruction generation override: MIPS assembly options.
29045                                                             (line   18)
29046* MIPS architecture options:             MIPS Options.       (line   29)
29047* MIPS big-endian output:                MIPS Options.       (line   13)
29048* MIPS CPU override:                     MIPS ISA.           (line   19)
29049* MIPS cyclic redundancy check (CRC) instruction generation override: MIPS ASE Instruction Generation Overrides.
29050                                                             (line   69)
29051* MIPS directives to override command-line options: MIPS assembly options.
29052                                                             (line    6)
29053* MIPS DSP Release 1 instruction generation override: MIPS ASE Instruction Generation Overrides.
29054                                                             (line   21)
29055* MIPS DSP Release 2 instruction generation override: MIPS ASE Instruction Generation Overrides.
29056                                                             (line   26)
29057* MIPS DSP Release 3 instruction generation override: MIPS ASE Instruction Generation Overrides.
29058                                                             (line   32)
29059* MIPS endianness:                       Overview.           (line  891)
29060* MIPS eXtended Physical Address (XPA) instruction generation override: MIPS ASE Instruction Generation Overrides.
29061                                                             (line   58)
29062* MIPS Global INValidate (GINV) instruction generation override: MIPS ASE Instruction Generation Overrides.
29063                                                             (line   73)
29064* MIPS IEEE 754 NaN data encoding selection: MIPS NaN Encodings.
29065                                                             (line    6)
29066* MIPS ISA:                              Overview.           (line  897)
29067* MIPS ISA override:                     MIPS ISA.           (line    6)
29068* MIPS line comment character:           MIPS-Chars.         (line    6)
29069* MIPS line separator:                   MIPS-Chars.         (line   14)
29070* MIPS little-endian output:             MIPS Options.       (line   13)
29071* MIPS MCU instruction generation override: MIPS ASE Instruction Generation Overrides.
29072                                                             (line   43)
29073* MIPS MDMX instruction generation override: MIPS ASE Instruction Generation Overrides.
29074                                                             (line   16)
29075* MIPS MIPS-3D instruction generation override: MIPS ASE Instruction Generation Overrides.
29076                                                             (line    6)
29077* MIPS MT instruction generation override: MIPS ASE Instruction Generation Overrides.
29078                                                             (line   38)
29079* MIPS option stack:                     MIPS Option Stack.  (line    6)
29080* MIPS processor:                        MIPS-Dependent.     (line    6)
29081* MIPS SIMD Architecture instruction generation override: MIPS ASE Instruction Generation Overrides.
29082                                                             (line   48)
29083* MIPS16e2 instruction generation override: MIPS ASE Instruction Generation Overrides.
29084                                                             (line   62)
29085* mistack command-line option, C-SKY:    C-SKY Options.      (line   82)
29086* MIT:                                   M68K-Syntax.        (line    6)
29087* mjsri2bsr command-line option, C-SKY:  C-SKY Options.      (line   52)
29088* mlabr command-line option, C-SKY:      C-SKY Options.      (line   75)
29089* mlaf command-line option, C-SKY:       C-SKY Options.      (line   69)
29090* mlib directive, TIC54X:                TIC54X-Directives.  (line  159)
29091* mlink-relax command-line option, PRU:  PRU Options.        (line    6)
29092* mlist directive, TIC54X:               TIC54X-Directives.  (line  164)
29093* mliterals-after-br command-line option, C-SKY: C-SKY Options.
29094                                                             (line   75)
29095* mliterals-after-func command-line option, C-SKY: C-SKY Options.
29096                                                             (line   69)
29097* mlittle-endian command-line option, C-SKY: C-SKY Options.  (line   14)
29098* mljump command-line option, C-SKY:     C-SKY Options.      (line   26)
29099* MMIX assembler directive BSPEC:        MMIX-Pseudos.       (line  131)
29100* MMIX assembler directive BYTE:         MMIX-Pseudos.       (line   97)
29101* MMIX assembler directive ESPEC:        MMIX-Pseudos.       (line  131)
29102* MMIX assembler directive GREG:         MMIX-Pseudos.       (line   50)
29103* MMIX assembler directive IS:           MMIX-Pseudos.       (line   42)
29104* MMIX assembler directive LOC:          MMIX-Pseudos.       (line    7)
29105* MMIX assembler directive LOCAL:        MMIX-Pseudos.       (line   28)
29106* MMIX assembler directive OCTA:         MMIX-Pseudos.       (line  108)
29107* MMIX assembler directive PREFIX:       MMIX-Pseudos.       (line  120)
29108* MMIX assembler directive TETRA:        MMIX-Pseudos.       (line  108)
29109* MMIX assembler directive WYDE:         MMIX-Pseudos.       (line  108)
29110* MMIX assembler directives:             MMIX-Pseudos.       (line    6)
29111* MMIX line comment characters:          MMIX-Chars.         (line    6)
29112* MMIX options:                          MMIX-Opts.          (line    6)
29113* MMIX pseudo-op BSPEC:                  MMIX-Pseudos.       (line  131)
29114* MMIX pseudo-op BYTE:                   MMIX-Pseudos.       (line   97)
29115* MMIX pseudo-op ESPEC:                  MMIX-Pseudos.       (line  131)
29116* MMIX pseudo-op GREG:                   MMIX-Pseudos.       (line   50)
29117* MMIX pseudo-op IS:                     MMIX-Pseudos.       (line   42)
29118* MMIX pseudo-op LOC:                    MMIX-Pseudos.       (line    7)
29119* MMIX pseudo-op LOCAL:                  MMIX-Pseudos.       (line   28)
29120* MMIX pseudo-op OCTA:                   MMIX-Pseudos.       (line  108)
29121* MMIX pseudo-op PREFIX:                 MMIX-Pseudos.       (line  120)
29122* MMIX pseudo-op TETRA:                  MMIX-Pseudos.       (line  108)
29123* MMIX pseudo-op WYDE:                   MMIX-Pseudos.       (line  108)
29124* MMIX pseudo-ops:                       MMIX-Pseudos.       (line    6)
29125* MMIX register names:                   MMIX-Regs.          (line    6)
29126* MMIX support:                          MMIX-Dependent.     (line    6)
29127* mmixal differences:                    MMIX-mmixal.        (line    6)
29128* mmp command-line option, C-SKY:        C-SKY Options.      (line   95)
29129* mmregs directive, TIC54X:              TIC54X-Directives.  (line  169)
29130* mmsg directive, TIC54X:                TIC54X-Directives.  (line   77)
29131* MMX, i386:                             i386-SIMD.          (line    6)
29132* MMX, x86-64:                           i386-SIMD.          (line    6)
29133* mnemonic compatibility, i386:          i386-Mnemonics.     (line  123)
29134* mnemonic suffixes, i386:               i386-Variations.    (line   29)
29135* mnemonic suffixes, x86-64:             i386-Variations.    (line   29)
29136* mnemonics for opcodes, VAX:            VAX-opcodes.        (line    6)
29137* mnemonics, AVR:                        AVR Opcodes.        (line    6)
29138* mnemonics, D10V:                       D10V-Opcodes.       (line    6)
29139* mnemonics, D30V:                       D30V-Opcodes.       (line    6)
29140* mnemonics, H8/300:                     H8/300 Opcodes.     (line    6)
29141* mnemonics, LM32:                       LM32 Opcodes.       (line    6)
29142* mnemonics, OpenRISC:                   OpenRISC-Opcodes.   (line    6)
29143* mnemonics, SH:                         SH Opcodes.         (line    6)
29144* mnemonics, Z8000:                      Z8000 Opcodes.      (line    6)
29145* mno-branch-stub command-line option, C-SKY: C-SKY Options. (line   34)
29146* mno-elrw command-line option, C-SKY:   C-SKY Options.      (line   64)
29147* mno-force2bsr command-line option, C-SKY: C-SKY Options.   (line   43)
29148* mno-istack command-line option, C-SKY: C-SKY Options.      (line   82)
29149* mno-jsri2bsr command-line option, C-SKY: C-SKY Options.    (line   52)
29150* mno-labr command-line option, C-SKY:   C-SKY Options.      (line   75)
29151* mno-laf command-line option, C-SKY:    C-SKY Options.      (line   69)
29152* mno-link-relax command-line option, PRU: PRU Options.      (line   12)
29153* mno-literals-after-func command-line option, C-SKY: C-SKY Options.
29154                                                             (line   69)
29155* mno-ljump command-line option, C-SKY:  C-SKY Options.      (line   26)
29156* mno-lrw command-line option, C-SKY:    C-SKY Options.      (line   59)
29157* mno-warn-regname-label command-line option, PRU: PRU Options.
29158                                                             (line   16)
29159* mnolist directive, TIC54X:             TIC54X-Directives.  (line  164)
29160* mnoliterals-after-br command-line option, C-SKY: C-SKY Options.
29161                                                             (line   75)
29162* mnolrw command-line option, C-SKY:     C-SKY Options.      (line   59)
29163* mnps400 command-line option, ARC:      ARC Options.        (line   79)
29164* modifiers, M32C:                       M32C-Modifiers.     (line    6)
29165* module layout, WebAssembly:            WebAssembly-module-layout.
29166                                                             (line    6)
29167* Motorola syntax for the 680x0:         M68K-Moto-Syntax.   (line    6)
29168* MOVI instructions, relaxation:         Xtensa Immediate Relaxation.
29169                                                             (line   12)
29170* MOVN, MOVZ and MOVK group relocations, AArch64: AArch64-Relocations.
29171                                                             (line    6)
29172* MOVW and MOVT relocations, ARM:        ARM-Relocations.    (line   21)
29173* MRI compatibility mode:                M.                  (line    6)
29174* mri directive:                         MRI.                (line    6)
29175* MRI mode, temporarily:                 MRI.                (line    6)
29176* msecurity command-line option, C-SKY:  C-SKY Options.      (line  104)
29177* MSP 430 floating point (IEEE):         MSP430 Floating Point.
29178                                                             (line    6)
29179* MSP 430 identifiers:                   MSP430-Chars.       (line   17)
29180* MSP 430 line comment character:        MSP430-Chars.       (line    6)
29181* MSP 430 line separator:                MSP430-Chars.       (line   14)
29182* MSP 430 machine directives:            MSP430 Directives.  (line    6)
29183* MSP 430 macros:                        MSP430-Macros.      (line    6)
29184* MSP 430 opcodes:                       MSP430 Opcodes.     (line    6)
29185* MSP 430 options (none):                MSP430 Options.     (line    6)
29186* MSP 430 profiling capability:          MSP430 Profiling Capability.
29187                                                             (line    6)
29188* MSP 430 register names:                MSP430-Regs.        (line    6)
29189* MSP 430 support:                       MSP430-Dependent.   (line    6)
29190* MSP430 Assembler Extensions:           MSP430-Ext.         (line    6)
29191* mspabi_attribute directive, MSP430:    MSP430 Directives.  (line   39)
29192* mtrust command-line option, C-SKY:     C-SKY Options.      (line  107)
29193* mul instruction, i386:                 i386-Notes.         (line    6)
29194* mul instruction, x86-64:               i386-Notes.         (line    6)
29195* mvdsp command-line option, C-SKY:      C-SKY Options.      (line  116)
29196* N32K support:                          NS32K-Dependent.    (line    6)
29197* name:                                  Z8000 Directives.   (line   18)
29198* named section:                         Section.            (line    6)
29199* named sections:                        Ld Sections.        (line    8)
29200* names, symbol:                         Symbol Names.       (line    6)
29201* naming object file:                    o.                  (line    6)
29202* NDS32 options:                         NDS32 Options.      (line    6)
29203* NDS32 processor:                       NDS32-Dependent.    (line    6)
29204* new page, in listings:                 Eject.              (line    6)
29205* newblock directive, TIC54X:            TIC54X-Directives.  (line  175)
29206* newline (\n):                          Strings.            (line   21)
29207* newline, required at file end:         Statements.         (line   14)
29208* Nios II line comment character:        Nios II Chars.      (line    6)
29209* Nios II line separator character:      Nios II Chars.      (line    6)
29210* Nios II machine directives:            Nios II Directives. (line    6)
29211* Nios II machine relocations:           Nios II Relocations.
29212                                                             (line    6)
29213* Nios II opcodes:                       Nios II Opcodes.    (line    6)
29214* Nios II options:                       Nios II Options.    (line    6)
29215* Nios II support:                       NiosII-Dependent.   (line    6)
29216* Nios support:                          NiosII-Dependent.   (line    6)
29217* no-absolute-literals directive:        Absolute Literals Directive.
29218                                                             (line    6)
29219* no-force2bsr command-line option, C-SKY: C-SKY Options.    (line   43)
29220* no-jsri2bsr command-line option, C-SKY: C-SKY Options.     (line   52)
29221* no-longcalls directive:                Longcalls Directive.
29222                                                             (line    6)
29223* no-relax command-line option, Nios II: Nios II Options.    (line   20)
29224* no-schedule directive:                 Schedule Directive. (line    6)
29225* no-transform directive:                Transform Directive.
29226                                                             (line    6)
29227* nodelay directive, OpenRISC:           OpenRISC-Directives.
29228                                                             (line   15)
29229* nolist directive:                      Nolist.             (line    6)
29230* nolist directive, TIC54X:              TIC54X-Directives.  (line  131)
29231* nop directive:                         Nop.                (line    6)
29232* NOP pseudo op, ARM:                    ARM Opcodes.        (line    9)
29233* nops directive:                        Nops.               (line    6)
29234* notes for Alpha:                       Alpha Notes.        (line    6)
29235* notes for WebAssembly:                 WebAssembly-Notes.  (line    6)
29236* NS32K line comment character:          NS32K-Chars.        (line    6)
29237* NS32K line separator:                  NS32K-Chars.        (line   18)
29238* null-terminated strings:               Asciz.              (line    6)
29239* number constants:                      Numbers.            (line    6)
29240* number of macros executed:             Macro.              (line  168)
29241* numbered subsections:                  Sub-Sections.       (line    6)
29242* numbers, 16-bit:                       hword.              (line    6)
29243* numeric values:                        Expressions.        (line    6)
29244* nword directive, SPARC:                Sparc-Directives.   (line   20)
29245* Object Attribute, RISC-V:              RISC-V-ATTRIBUTE.   (line    6)
29246* object attributes:                     Object Attributes.  (line    6)
29247* object file:                           Object.             (line    6)
29248* object file format:                    Object Formats.     (line    6)
29249* object file name:                      o.                  (line    6)
29250* object file, after errors:             Z.                  (line    6)
29251* obsolescent directives:                Deprecated.         (line    6)
29252* octa directive:                        Octa.               (line    6)
29253* octal character code (\DDD):           Strings.            (line   30)
29254* octal integers:                        Integers.           (line    9)
29255* offset directive:                      Offset.             (line    6)
29256* offset directive, V850:                V850 Directives.    (line    6)
29257* opcode mnemonics, VAX:                 VAX-opcodes.        (line    6)
29258* opcode names, TILE-Gx:                 TILE-Gx Opcodes.    (line    6)
29259* opcode names, TILEPro:                 TILEPro Opcodes.    (line    6)
29260* opcode names, Xtensa:                  Xtensa Opcodes.     (line    6)
29261* opcode summary, AVR:                   AVR Opcodes.        (line    6)
29262* opcode summary, D10V:                  D10V-Opcodes.       (line    6)
29263* opcode summary, D30V:                  D30V-Opcodes.       (line    6)
29264* opcode summary, H8/300:                H8/300 Opcodes.     (line    6)
29265* opcode summary, LM32:                  LM32 Opcodes.       (line    6)
29266* opcode summary, OpenRISC:              OpenRISC-Opcodes.   (line    6)
29267* opcode summary, SH:                    SH Opcodes.         (line    6)
29268* opcode summary, Z8000:                 Z8000 Opcodes.      (line    6)
29269* opcodes for AArch64:                   AArch64 Opcodes.    (line    6)
29270* opcodes for ARC:                       ARC Opcodes.        (line    6)
29271* opcodes for ARM:                       ARM Opcodes.        (line    6)
29272* opcodes for BPF:                       BPF Opcodes.        (line    6)
29273* opcodes for MSP 430:                   MSP430 Opcodes.     (line    6)
29274* opcodes for Nios II:                   Nios II Opcodes.    (line    6)
29275* opcodes for PRU:                       PRU Opcodes.        (line    6)
29276* opcodes for V850:                      V850 Opcodes.       (line    6)
29277* opcodes, M680x0:                       M68K-opcodes.       (line    6)
29278* opcodes, M68HC11:                      M68HC11-opcodes.    (line    6)
29279* opcodes, WebAssembly:                  WebAssembly-Opcodes.
29280                                                             (line    6)
29281* OPENRISC floating point (IEEE):        OpenRISC-Float.     (line    6)
29282* OpenRISC line comment character:       OpenRISC-Chars.     (line    6)
29283* OpenRISC line separator:               OpenRISC-Chars.     (line    9)
29284* OPENRISC machine directives:           OpenRISC-Directives.
29285                                                             (line    6)
29286* OpenRISC opcode summary:               OpenRISC-Opcodes.   (line    6)
29287* OpenRISC registers:                    OpenRISC-Regs.      (line    6)
29288* OpenRISC relocations:                  OpenRISC-Relocs.    (line    6)
29289* OPENRISC support:                      OpenRISC-Dependent. (line    6)
29290* OPENRISC syntax:                       OpenRISC-Dependent. (line   13)
29291* operand delimiters, i386:              i386-Variations.    (line   15)
29292* operand delimiters, x86-64:            i386-Variations.    (line   15)
29293* operand notation, VAX:                 VAX-operands.       (line    6)
29294* operands in expressions:               Arguments.          (line    6)
29295* operator precedence:                   Infix Ops.          (line   11)
29296* operators, in expressions:             Operators.          (line    6)
29297* operators, permitted arguments:        Infix Ops.          (line    6)
29298* optimization, D10V:                    Overview.           (line  665)
29299* optimization, D30V:                    Overview.           (line  670)
29300* optimizations:                         Xtensa Optimizations.
29301                                                             (line    6)
29302* option directive:                      RISC-V-Directives.  (line   34)
29303* Option directive:                      RISC-V-Directives.  (line   34)
29304* option directive, TIC54X:              TIC54X-Directives.  (line  179)
29305* option summary:                        Overview.           (line    6)
29306* options for AArch64 (none):            AArch64 Options.    (line    6)
29307* options for Alpha:                     Alpha Options.      (line    6)
29308* options for ARC:                       ARC Options.        (line    6)
29309* options for ARM (none):                ARM Options.        (line    6)
29310* options for AVR (none):                AVR Options.        (line    6)
29311* options for Blackfin (none):           Blackfin Options.   (line    6)
29312* options for BPF (none):                BPF Options.        (line    6)
29313* options for C-SKY:                     C-SKY Options.      (line    6)
29314* options for i386:                      i386-Options.       (line    6)
29315* options for IA-64:                     IA-64 Options.      (line    6)
29316* options for LM32 (none):               LM32 Options.       (line    6)
29317* options for Meta:                      Meta Options.       (line    6)
29318* options for MSP430 (none):             MSP430 Options.     (line    6)
29319* options for NDS32:                     NDS32 Options.      (line    6)
29320* options for Nios II:                   Nios II Options.    (line    6)
29321* options for PDP-11:                    PDP-11-Options.     (line    6)
29322* options for PowerPC:                   PowerPC-Opts.       (line    6)
29323* options for PRU:                       PRU Options.        (line    6)
29324* options for s390:                      s390 Options.       (line    6)
29325* options for SCORE:                     SCORE-Opts.         (line    6)
29326* options for SPARC:                     Sparc-Opts.         (line    6)
29327* options for TIC6X:                     TIC6X Options.      (line    6)
29328* options for V850 (none):               V850 Options.       (line    6)
29329* options for VAX/VMS:                   VAX-Opts.           (line   42)
29330* options for Visium:                    Visium Options.     (line    6)
29331* options for x86-64:                    i386-Options.       (line    6)
29332* options for Z80:                       Z80 Options.        (line    6)
29333* options, all versions of assembler:    Invoking.           (line    6)
29334* options, command line:                 Command Line.       (line   13)
29335* options, CRIS:                         CRIS-Opts.          (line    6)
29336* options, D10V:                         D10V-Opts.          (line    6)
29337* options, D30V:                         D30V-Opts.          (line    6)
29338* options, Epiphany:                     Epiphany Options.   (line    6)
29339* options, H8/300:                       H8/300 Options.     (line    6)
29340* options, IP2K:                         IP2K-Opts.          (line    6)
29341* options, M32C:                         M32C-Opts.          (line    6)
29342* options, M32R:                         M32R-Opts.          (line    6)
29343* options, M680x0:                       M68K-Opts.          (line    6)
29344* options, M68HC11:                      M68HC11-Opts.       (line    6)
29345* options, MMIX:                         MMIX-Opts.          (line    6)
29346* options, PJ:                           PJ Options.         (line    6)
29347* options, RL78:                         RL78-Opts.          (line    6)
29348* options, RX:                           RX-Opts.            (line    6)
29349* options, S12Z:                         S12Z Options.       (line    6)
29350* options, SH:                           SH Options.         (line    6)
29351* options, TIC54X:                       TIC54X-Opts.        (line    6)
29352* options, XGATE:                        XGATE-Opts.         (line    6)
29353* options, Z8000:                        Z8000 Options.      (line    6)
29354* org directive:                         Org.                (line    6)
29355* other attribute, of a.out symbol:      Symbol Other.       (line    6)
29356* output file:                           Object.             (line    6)
29357* output section padding:                no-pad-sections.    (line    6)
29358* p2align directive:                     P2align.            (line    6)
29359* p2alignl directive:                    P2align.            (line   30)
29360* p2alignw directive:                    P2align.            (line   30)
29361* padding the location counter:          Align.              (line    6)
29362* padding the location counter given a power of two: P2align.
29363                                                             (line    6)
29364* padding the location counter given number of bytes: Balign.
29365                                                             (line    6)
29366* page, in listings:                     Eject.              (line    6)
29367* paper size, for listings:              Psize.              (line    6)
29368* paths for .include:                    I.                  (line    6)
29369* patterns, writing in memory:           Fill.               (line    6)
29370* PDP-11 comments:                       PDP-11-Syntax.      (line   16)
29371* PDP-11 floating-point register syntax: PDP-11-Syntax.      (line   13)
29372* PDP-11 general-purpose register syntax: PDP-11-Syntax.     (line   10)
29373* PDP-11 instruction naming:             PDP-11-Mnemonics.   (line    6)
29374* PDP-11 line separator:                 PDP-11-Syntax.      (line   19)
29375* PDP-11 support:                        PDP-11-Dependent.   (line    6)
29376* PDP-11 syntax:                         PDP-11-Syntax.      (line    6)
29377* PIC code generation for ARM:           ARM Options.        (line  378)
29378* PIC code generation for M32R:          M32R-Opts.          (line   42)
29379* pic command-line option, C-SKY:        C-SKY Options.      (line   22)
29380* PIC selection, MIPS:                   MIPS Options.       (line   21)
29381* PJ endianness:                         Overview.           (line  791)
29382* PJ line comment character:             PJ-Chars.           (line    6)
29383* PJ line separator:                     PJ-Chars.           (line   14)
29384* PJ options:                            PJ Options.         (line    6)
29385* PJ support:                            PJ-Dependent.       (line    6)
29386* plus, permitted arguments:             Infix Ops.          (line   44)
29387* pmem directive, PRU:                   PRU Relocations.    (line    6)
29388* popsection directive:                  PopSection.         (line    6)
29389* Position-independent code, CRIS:       CRIS-Opts.          (line   27)
29390* Position-independent code, symbols in, CRIS: CRIS-Pic.     (line    6)
29391* PowerPC architectures:                 PowerPC-Opts.       (line    6)
29392* PowerPC directives:                    PowerPC-Pseudo.     (line    6)
29393* PowerPC line comment character:        PowerPC-Chars.      (line    6)
29394* PowerPC line separator:                PowerPC-Chars.      (line   18)
29395* PowerPC options:                       PowerPC-Opts.       (line    6)
29396* PowerPC support:                       PPC-Dependent.      (line    6)
29397* precedence of operators:               Infix Ops.          (line   11)
29398* precision, floating point:             Flonums.            (line    6)
29399* prefix operators:                      Prefix Ops.         (line    6)
29400* prefixes, i386:                        i386-Prefixes.      (line    6)
29401* preprocessing:                         Preprocessing.      (line    6)
29402* preprocessing, turning on and off:     Preprocessing.      (line   28)
29403* previous directive:                    Previous.           (line    6)
29404* primary attributes, COFF symbols:      COFF Symbols.       (line   13)
29405* print directive:                       Print.              (line    6)
29406* proc directive, OpenRISC:              OpenRISC-Directives.
29407                                                             (line   20)
29408* proc directive, SPARC:                 Sparc-Directives.   (line   25)
29409* Processor Identification register, ARC: ARC-Regs.          (line   52)
29410* profiler directive, MSP 430:           MSP430 Directives.  (line   26)
29411* profiling capability for MSP 430:      MSP430 Profiling Capability.
29412                                                             (line    6)
29413* Program Counter, ARC:                  ARC-Regs.           (line   55)
29414* protected directive:                   Protected.          (line    6)
29415* PRU line comment character:            PRU Chars.          (line    6)
29416* PRU machine directives:                PRU Directives.     (line    6)
29417* PRU machine relocations:               PRU Relocations.    (line    6)
29418* PRU opcodes:                           PRU Opcodes.        (line    6)
29419* PRU options:                           PRU Options.        (line    6)
29420* PRU support:                           PRU-Dependent.      (line    6)
29421* psect directive, Z80:                  Z80 Directives.     (line   58)
29422* pseudo map fd, BPF:                    BPF-Pseudo-Maps.    (line    6)
29423* pseudo-op .arch, CRIS:                 CRIS-Pseudos.       (line   45)
29424* pseudo-op .dword, CRIS:                CRIS-Pseudos.       (line   12)
29425* pseudo-op .syntax, CRIS:               CRIS-Pseudos.       (line   17)
29426* pseudo-op BSPEC, MMIX:                 MMIX-Pseudos.       (line  131)
29427* pseudo-op BYTE, MMIX:                  MMIX-Pseudos.       (line   97)
29428* pseudo-op ESPEC, MMIX:                 MMIX-Pseudos.       (line  131)
29429* pseudo-op GREG, MMIX:                  MMIX-Pseudos.       (line   50)
29430* pseudo-op IS, MMIX:                    MMIX-Pseudos.       (line   42)
29431* pseudo-op LOC, MMIX:                   MMIX-Pseudos.       (line    7)
29432* pseudo-op LOCAL, MMIX:                 MMIX-Pseudos.       (line   28)
29433* pseudo-op OCTA, MMIX:                  MMIX-Pseudos.       (line  108)
29434* pseudo-op PREFIX, MMIX:                MMIX-Pseudos.       (line  120)
29435* pseudo-op TETRA, MMIX:                 MMIX-Pseudos.       (line  108)
29436* pseudo-op WYDE, MMIX:                  MMIX-Pseudos.       (line  108)
29437* pseudo-opcodes for XStormy16:          XStormy16 Opcodes.  (line    6)
29438* pseudo-opcodes, M680x0:                M68K-Branch.        (line    6)
29439* pseudo-opcodes, M68HC11:               M68HC11-Branch.     (line    6)
29440* pseudo-ops for branch, VAX:            VAX-branch.         (line    6)
29441* pseudo-ops, CRIS:                      CRIS-Pseudos.       (line    6)
29442* pseudo-ops, machine independent:       Pseudo Ops.         (line    6)
29443* pseudo-ops, MMIX:                      MMIX-Pseudos.       (line    6)
29444* psize directive:                       Psize.              (line    6)
29445* PSR bits:                              IA-64-Bits.         (line    6)
29446* pstring directive, TIC54X:             TIC54X-Directives.  (line  208)
29447* psw register, V850:                    V850-Regs.          (line  116)
29448* purgem directive:                      Purgem.             (line    6)
29449* purpose of GNU assembler:              GNU Assembler.      (line   12)
29450* pushsection directive:                 PushSection.        (line    6)
29451* quad directive:                        Quad.               (line    6)
29452* quad directive, i386:                  i386-Float.         (line   22)
29453* quad directive, x86-64:                i386-Float.         (line   22)
29454* real-mode code, i386:                  i386-16bit.         (line    6)
29455* ref directive, TIC54X:                 TIC54X-Directives.  (line  103)
29456* refsym directive, MSP 430:             MSP430 Directives.  (line   30)
29457* register directive, SPARC:             Sparc-Directives.   (line   29)
29458* register name prefix character, ARC:   ARC-Chars.          (line    7)
29459* register names, AArch64:               AArch64-Regs.       (line    6)
29460* register names, Alpha:                 Alpha-Regs.         (line    6)
29461* register names, ARC:                   ARC-Regs.           (line    6)
29462* register names, ARM:                   ARM-Regs.           (line    6)
29463* register names, AVR:                   AVR-Regs.           (line    6)
29464* register names, BPF:                   BPF-Regs.           (line    6)
29465* register names, CRIS:                  CRIS-Regs.          (line    6)
29466* register names, H8/300:                H8/300-Regs.        (line    6)
29467* register names, IA-64:                 IA-64-Regs.         (line    6)
29468* register names, LM32:                  LM32-Regs.          (line    6)
29469* register names, MMIX:                  MMIX-Regs.          (line    6)
29470* register names, MSP 430:               MSP430-Regs.        (line    6)
29471* register names, OpenRISC:              OpenRISC-Regs.      (line    6)
29472* register names, S12Z:                  S12Z Addressing Modes.
29473                                                             (line   28)
29474* register names, Sparc:                 Sparc-Regs.         (line    6)
29475* register names, TILE-Gx:               TILE-Gx Registers.  (line    6)
29476* register names, TILEPro:               TILEPro Registers.  (line    6)
29477* register names, V850:                  V850-Regs.          (line    6)
29478* register names, VAX:                   VAX-operands.       (line   17)
29479* register names, Visium:                Visium Registers.   (line    6)
29480* register names, Xtensa:                Xtensa Registers.   (line    6)
29481* register names, Z80:                   Z80-Regs.           (line    6)
29482* register naming, s390:                 s390 Register.      (line    6)
29483* register notation, S12Z:               S12Z Register Notation.
29484                                                             (line    6)
29485* register operands, i386:               i386-Variations.    (line   15)
29486* register operands, x86-64:             i386-Variations.    (line   15)
29487* registers, D10V:                       D10V-Regs.          (line    6)
29488* registers, D30V:                       D30V-Regs.          (line    6)
29489* registers, i386:                       i386-Regs.          (line    6)
29490* registers, Meta:                       Meta-Regs.          (line    6)
29491* registers, SH:                         SH-Regs.            (line    6)
29492* registers, TIC54X memory-mapped:       TIC54X-MMRegs.      (line    6)
29493* registers, x86-64:                     i386-Regs.          (line    6)
29494* registers, Z8000:                      Z8000-Regs.         (line    6)
29495* relax-all command-line option, Nios II: Nios II Options.   (line   13)
29496* relax-section command-line option, Nios II: Nios II Options.
29497                                                             (line    6)
29498* relaxation:                            Xtensa Relaxation.  (line    6)
29499* relaxation of ADDI instructions:       Xtensa Immediate Relaxation.
29500                                                             (line   43)
29501* relaxation of branch instructions:     Xtensa Branch Relaxation.
29502                                                             (line    6)
29503* relaxation of call instructions:       Xtensa Call Relaxation.
29504                                                             (line    6)
29505* relaxation of immediate fields:        Xtensa Immediate Relaxation.
29506                                                             (line    6)
29507* relaxation of jump instructions:       Xtensa Jump Relaxation.
29508                                                             (line    6)
29509* relaxation of L16SI instructions:      Xtensa Immediate Relaxation.
29510                                                             (line   23)
29511* relaxation of L16UI instructions:      Xtensa Immediate Relaxation.
29512                                                             (line   23)
29513* relaxation of L32I instructions:       Xtensa Immediate Relaxation.
29514                                                             (line   23)
29515* relaxation of L8UI instructions:       Xtensa Immediate Relaxation.
29516                                                             (line   23)
29517* relaxation of MOVI instructions:       Xtensa Immediate Relaxation.
29518                                                             (line   12)
29519* reloc directive:                       Reloc.              (line    6)
29520* relocation:                            Sections.           (line    6)
29521* relocation example:                    Ld Sections.        (line   40)
29522* relocations, AArch64:                  AArch64-Relocations.
29523                                                             (line    6)
29524* relocations, Alpha:                    Alpha-Relocs.       (line    6)
29525* relocations, OpenRISC:                 OpenRISC-Relocs.    (line    6)
29526* relocations, Sparc:                    Sparc-Relocs.       (line    6)
29527* relocations, WebAssembly:              WebAssembly-Relocs. (line    6)
29528* repeat prefixes, i386:                 i386-Prefixes.      (line   44)
29529* reporting bugs in assembler:           Reporting Bugs.     (line    6)
29530* rept directive:                        Rept.               (line    6)
29531* reserve directive, SPARC:              Sparc-Directives.   (line   39)
29532* return instructions, i386:             i386-Variations.    (line   46)
29533* return instructions, x86-64:           i386-Variations.    (line   46)
29534* REX prefixes, i386:                    i386-Prefixes.      (line   46)
29535* RISC-V instruction formats:            RISC-V-Formats.     (line    6)
29536* RISC-V machine directives:             RISC-V-Directives.  (line    6)
29537* RISC-V support:                        RISC-V-Dependent.   (line    6)
29538* RL78 assembler directives:             RL78-Directives.    (line    6)
29539* RL78 line comment character:           RL78-Chars.         (line    6)
29540* RL78 line separator:                   RL78-Chars.         (line   14)
29541* RL78 modifiers:                        RL78-Modifiers.     (line    6)
29542* RL78 options:                          RL78-Opts.          (line    6)
29543* RL78 support:                          RL78-Dependent.     (line    6)
29544* rsect:                                 Z8000 Directives.   (line   52)
29545* RX assembler directive .3byte:         RX-Directives.      (line    9)
29546* RX assembler directive .fetchalign:    RX-Directives.      (line   13)
29547* RX assembler directives:               RX-Directives.      (line    6)
29548* RX floating point:                     RX-Float.           (line    6)
29549* RX line comment character:             RX-Chars.           (line    6)
29550* RX line separator:                     RX-Chars.           (line   14)
29551* RX modifiers:                          RX-Modifiers.       (line    6)
29552* RX options:                            RX-Opts.            (line    6)
29553* RX support:                            RX-Dependent.       (line    6)
29554* S12Z addressing modes:                 S12Z Addressing Modes.
29555                                                             (line    6)
29556* S12Z line separator:                   S12Z Syntax Overview.
29557                                                             (line   41)
29558* S12Z options:                          S12Z Options.       (line    6)
29559* S12Z support:                          S12Z-Dependent.     (line    9)
29560* S12Z syntax:                           S12Z Syntax.        (line   12)
29561* s390 floating point:                   s390 Floating Point.
29562                                                             (line    6)
29563* s390 instruction aliases:              s390 Aliases.       (line    6)
29564* s390 instruction formats:              s390 Formats.       (line    6)
29565* s390 instruction marker:               s390 Instruction Marker.
29566                                                             (line    6)
29567* s390 instruction mnemonics:            s390 Mnemonics.     (line    6)
29568* s390 instruction operand modifier:     s390 Operand Modifier.
29569                                                             (line    6)
29570* s390 instruction operands:             s390 Operands.      (line    6)
29571* s390 instruction syntax:               s390 Syntax.        (line    6)
29572* s390 line comment character:           s390 Characters.    (line    6)
29573* s390 line separator:                   s390 Characters.    (line   13)
29574* s390 literal pool entries:             s390 Literal Pool Entries.
29575                                                             (line    6)
29576* s390 options:                          s390 Options.       (line    6)
29577* s390 register naming:                  s390 Register.      (line    6)
29578* s390 support:                          S/390-Dependent.    (line    6)
29579* Saved User Stack Pointer, ARC:         ARC-Regs.           (line   74)
29580* sblock directive, TIC54X:              TIC54X-Directives.  (line  182)
29581* sbttl directive:                       Sbttl.              (line    6)
29582* schedule directive:                    Schedule Directive. (line    6)
29583* scl directive:                         Scl.                (line    6)
29584* SCORE architectures:                   SCORE-Opts.         (line    6)
29585* SCORE directives:                      SCORE-Pseudo.       (line    6)
29586* SCORE line comment character:          SCORE-Chars.        (line    6)
29587* SCORE line separator:                  SCORE-Chars.        (line   14)
29588* SCORE options:                         SCORE-Opts.         (line    6)
29589* SCORE processor:                       SCORE-Dependent.    (line    6)
29590* sdaoff pseudo-op, V850:                V850 Opcodes.       (line   65)
29591* search path for .include:              I.                  (line    6)
29592* sect directive, TIC54X:                TIC54X-Directives.  (line  188)
29593* section directive (COFF version):      Section.            (line   16)
29594* section directive (ELF version):       Section.            (line   77)
29595* section directive, V850:               V850 Directives.    (line    9)
29596* section name substitution:             Section.            (line   81)
29597* section override prefixes, i386:       i386-Prefixes.      (line   23)
29598* Section Stack <1>:                     Previous.           (line    6)
29599* Section Stack <2>:                     SubSection.         (line    6)
29600* Section Stack <3>:                     PopSection.         (line    6)
29601* Section Stack <4>:                     PushSection.        (line    6)
29602* Section Stack:                         Section.            (line   72)
29603* section-relative addressing:           Secs Background.    (line   68)
29604* sections:                              Sections.           (line    6)
29605* sections in messages, internal:        As Sections.        (line    6)
29606* sections, i386:                        i386-Variations.    (line   52)
29607* sections, named:                       Ld Sections.        (line    8)
29608* sections, x86-64:                      i386-Variations.    (line   52)
29609* seg directive, SPARC:                  Sparc-Directives.   (line   44)
29610* segm:                                  Z8000 Directives.   (line   10)
29611* set at directive, Nios II:             Nios II Directives. (line   35)
29612* set break directive, Nios II:          Nios II Directives. (line   43)
29613* set directive:                         Set.                (line    6)
29614* set directive, Nios II:                Nios II Directives. (line   57)
29615* set directive, TIC54X:                 TIC54X-Directives.  (line  191)
29616* set no_warn_regname_label directive, PRU: PRU Directives.  (line   28)
29617* set noat directive, Nios II:           Nios II Directives. (line   31)
29618* set nobreak directive, Nios II:        Nios II Directives. (line   39)
29619* set norelax directive, Nios II:        Nios II Directives. (line   46)
29620* set relaxall directive, Nios II:       Nios II Directives. (line   53)
29621* set relaxsection directive, Nios II:   Nios II Directives. (line   49)
29622* SH addressing modes:                   SH-Addressing.      (line    6)
29623* SH floating point (IEEE):              SH Floating Point.  (line    6)
29624* SH line comment character:             SH-Chars.           (line    6)
29625* SH line separator:                     SH-Chars.           (line    8)
29626* SH machine directives:                 SH Directives.      (line    6)
29627* SH opcode summary:                     SH Opcodes.         (line    6)
29628* SH options:                            SH Options.         (line    6)
29629* SH registers:                          SH-Regs.            (line    6)
29630* SH support:                            SH-Dependent.       (line    6)
29631* shigh directive, M32R:                 M32R-Directives.    (line   26)
29632* short directive:                       Short.              (line    6)
29633* short directive, TIC54X:               TIC54X-Directives.  (line  111)
29634* signatures, WebAssembly:               WebAssembly-Signatures.
29635                                                             (line    6)
29636* SIMD, i386:                            i386-SIMD.          (line    6)
29637* SIMD, x86-64:                          i386-SIMD.          (line    6)
29638* single character constant:             Chars.              (line    6)
29639* single directive:                      Single.             (line    6)
29640* single directive, i386:                i386-Float.         (line   14)
29641* single directive, x86-64:              i386-Float.         (line   14)
29642* single quote, Z80:                     Z80-Chars.          (line   20)
29643* sixteen bit integers:                  hword.              (line    6)
29644* sixteen byte integer:                  Octa.               (line    6)
29645* size directive (COFF version):         Size.               (line   11)
29646* size directive (ELF version):          Size.               (line   19)
29647* size modifiers, D10V:                  D10V-Size.          (line    6)
29648* size modifiers, D30V:                  D30V-Size.          (line    6)
29649* size modifiers, M680x0:                M68K-Syntax.        (line    8)
29650* size prefixes, i386:                   i386-Prefixes.      (line   27)
29651* size suffixes, H8/300:                 H8/300 Opcodes.     (line  163)
29652* size, translations, Sparc:             Sparc-Size-Translations.
29653                                                             (line    6)
29654* sizes operands, i386:                  i386-Variations.    (line   29)
29655* sizes operands, x86-64:                i386-Variations.    (line   29)
29656* skip directive:                        Skip.               (line    6)
29657* skip directive, M680x0:                M68K-Directives.    (line   19)
29658* skip directive, SPARC:                 Sparc-Directives.   (line   48)
29659* sleb128 directive:                     Sleb128.            (line    6)
29660* small data, MIPS:                      MIPS Small Data.    (line    6)
29661* SmartMIPS instruction generation override: MIPS ASE Instruction Generation Overrides.
29662                                                             (line   11)
29663* SOM symbol attributes:                 SOM Symbols.        (line    6)
29664* source program:                        Input Files.        (line    6)
29665* source, destination operands; i386:    i386-Variations.    (line   22)
29666* source, destination operands; x86-64:  i386-Variations.    (line   22)
29667* sp register:                           Xtensa Registers.   (line    6)
29668* sp register, V850:                     V850-Regs.          (line   14)
29669* space directive:                       Space.              (line    6)
29670* space directive, TIC54X:               TIC54X-Directives.  (line  196)
29671* space used, maximum for assembly:      statistics.         (line    6)
29672* SPARC architectures:                   Sparc-Opts.         (line    6)
29673* Sparc constants:                       Sparc-Constants.    (line    6)
29674* SPARC data alignment:                  Sparc-Aligned-Data. (line    6)
29675* SPARC floating point (IEEE):           Sparc-Float.        (line    6)
29676* Sparc line comment character:          Sparc-Chars.        (line    6)
29677* Sparc line separator:                  Sparc-Chars.        (line   14)
29678* SPARC machine directives:              Sparc-Directives.   (line    6)
29679* SPARC options:                         Sparc-Opts.         (line    6)
29680* Sparc registers:                       Sparc-Regs.         (line    6)
29681* Sparc relocations:                     Sparc-Relocs.       (line    6)
29682* Sparc size translations:               Sparc-Size-Translations.
29683                                                             (line    6)
29684* SPARC support:                         Sparc-Dependent.    (line    6)
29685* SPARC syntax:                          Sparc-Aligned-Data. (line   21)
29686* special characters, M680x0:            M68K-Chars.         (line    6)
29687* special purpose registers, MSP 430:    MSP430-Regs.        (line   11)
29688* sslist directive, TIC54X:              TIC54X-Directives.  (line  203)
29689* ssnolist directive, TIC54X:            TIC54X-Directives.  (line  203)
29690* stabd directive:                       Stab.               (line   38)
29691* stabn directive:                       Stab.               (line   48)
29692* stabs directive:                       Stab.               (line   51)
29693* stabX directives:                      Stab.               (line    6)
29694* stack pointer, ARC:                    ARC-Regs.           (line   20)
29695* standard assembler sections:           Secs Background.    (line   27)
29696* standard input, as input file:         Command Line.       (line   10)
29697* statement separator character:         Statements.         (line    6)
29698* statement separator, AArch64:          AArch64-Chars.      (line   10)
29699* statement separator, Alpha:            Alpha-Chars.        (line   11)
29700* statement separator, ARC:              ARC-Chars.          (line   27)
29701* statement separator, ARM:              ARM-Chars.          (line   14)
29702* statement separator, AVR:              AVR-Chars.          (line   14)
29703* statement separator, BPF:              BPF-Chars.          (line   10)
29704* statement separator, CR16:             CR16-Chars.         (line   13)
29705* statement separator, Epiphany:         Epiphany-Chars.     (line   14)
29706* statement separator, H8/300:           H8/300-Chars.       (line    8)
29707* statement separator, i386:             i386-Chars.         (line   18)
29708* statement separator, IA-64:            IA-64-Chars.        (line    8)
29709* statement separator, IP2K:             IP2K-Chars.         (line   14)
29710* statement separator, LM32:             LM32-Chars.         (line   12)
29711* statement separator, M32C:             M32C-Chars.         (line   14)
29712* statement separator, M68HC11:          M68HC11-Syntax.     (line   27)
29713* statement separator, Meta:             Meta-Chars.         (line    8)
29714* statement separator, MicroBlaze:       MicroBlaze-Chars.   (line   14)
29715* statement separator, MIPS:             MIPS-Chars.         (line   14)
29716* statement separator, MSP 430:          MSP430-Chars.       (line   14)
29717* statement separator, NS32K:            NS32K-Chars.        (line   18)
29718* statement separator, OpenRISC:         OpenRISC-Chars.     (line    9)
29719* statement separator, PJ:               PJ-Chars.           (line   14)
29720* statement separator, PowerPC:          PowerPC-Chars.      (line   18)
29721* statement separator, RL78:             RL78-Chars.         (line   14)
29722* statement separator, RX:               RX-Chars.           (line   14)
29723* statement separator, S12Z:             S12Z Syntax Overview.
29724                                                             (line   41)
29725* statement separator, s390:             s390 Characters.    (line   13)
29726* statement separator, SCORE:            SCORE-Chars.        (line   14)
29727* statement separator, SH:               SH-Chars.           (line    8)
29728* statement separator, Sparc:            Sparc-Chars.        (line   14)
29729* statement separator, TIC54X:           TIC54X-Chars.       (line   17)
29730* statement separator, TIC6X:            TIC6X Syntax.       (line   13)
29731* statement separator, V850:             V850-Chars.         (line   13)
29732* statement separator, VAX:              VAX-Chars.          (line   14)
29733* statement separator, Visium:           Visium Characters.  (line   14)
29734* statement separator, XGATE:            XGATE-Syntax.       (line   26)
29735* statement separator, XStormy16:        XStormy16-Chars.    (line   14)
29736* statement separator, Z80:              Z80-Chars.          (line   13)
29737* statement separator, Z8000:            Z8000-Chars.        (line   13)
29738* statements, structure of:              Statements.         (line    6)
29739* statistics, about assembly:            statistics.         (line    6)
29740* Status register, ARC:                  ARC-Regs.           (line   58)
29741* STATUS32 saved on exception, ARC:      ARC-Regs.           (line   83)
29742* stopping the assembly:                 Abort.              (line    6)
29743* Stored STATUS32 register on entry to level P0 interrupts, ARC: ARC-Regs.
29744                                                             (line   70)
29745* string constants:                      Strings.            (line    6)
29746* string directive:                      String.             (line    8)
29747* string directive on HPPA:              HPPA Directives.    (line  137)
29748* string directive, TIC54X:              TIC54X-Directives.  (line  208)
29749* string literals:                       Ascii.              (line    6)
29750* string, copying to object file:        String.             (line    8)
29751* string16 directive:                    String.             (line    8)
29752* string16, copying to object file:      String.             (line    8)
29753* string32 directive:                    String.             (line    8)
29754* string32, copying to object file:      String.             (line    8)
29755* string64 directive:                    String.             (line    8)
29756* string64, copying to object file:      String.             (line    8)
29757* string8 directive:                     String.             (line    8)
29758* string8, copying to object file:       String.             (line    8)
29759* struct directive:                      Struct.             (line    6)
29760* struct directive, TIC54X:              TIC54X-Directives.  (line  216)
29761* structure debugging, COFF:             Tag.                (line    6)
29762* sub-instruction ordering, D10V:        D10V-Chars.         (line   14)
29763* sub-instruction ordering, D30V:        D30V-Chars.         (line   14)
29764* sub-instructions, D10V:                D10V-Subs.          (line    6)
29765* sub-instructions, D30V:                D30V-Subs.          (line    6)
29766* subexpressions:                        Arguments.          (line   24)
29767* subsection directive:                  SubSection.         (line    6)
29768* subsym builtins, TIC54X:               TIC54X-Macros.      (line   16)
29769* subtitles for listings:                Sbttl.              (line    6)
29770* subtraction, permitted arguments:      Infix Ops.          (line   49)
29771* summary of options:                    Overview.           (line    6)
29772* support:                               HPPA-Dependent.     (line    6)
29773* supporting files, including:           Include.            (line    6)
29774* suppressing warnings:                  W.                  (line   11)
29775* sval:                                  Z8000 Directives.   (line   33)
29776* symbol attributes:                     Symbol Attributes.  (line    6)
29777* symbol attributes, a.out:              a.out Symbols.      (line    6)
29778* symbol attributes, COFF:               COFF Symbols.       (line    6)
29779* symbol attributes, SOM:                SOM Symbols.        (line    6)
29780* symbol descriptor, COFF:               Desc.               (line    6)
29781* symbol modifiers <1>:                  LM32-Modifiers.     (line   12)
29782* symbol modifiers <2>:                  AVR-Modifiers.      (line   12)
29783* symbol modifiers <3>:                  M32C-Modifiers.     (line   11)
29784* symbol modifiers:                      M68HC11-Modifiers.  (line   12)
29785* symbol modifiers, TILE-Gx:             TILE-Gx Modifiers.  (line    6)
29786* symbol modifiers, TILEPro:             TILEPro Modifiers.  (line    6)
29787* symbol names:                          Symbol Names.       (line    6)
29788* symbol names, $ in <1>:                SH-Chars.           (line   15)
29789* symbol names, $ in <2>:                D10V-Chars.         (line   53)
29790* symbol names, $ in <3>:                Meta-Chars.         (line   10)
29791* symbol names, $ in:                    D30V-Chars.         (line   70)
29792* symbol names, local:                   Symbol Names.       (line   40)
29793* symbol names, temporary:               Symbol Names.       (line   53)
29794* symbol prefix character, ARC:          ARC-Chars.          (line   20)
29795* symbol storage class (COFF):           Scl.                (line    6)
29796* symbol type:                           Symbol Type.        (line    6)
29797* symbol type, COFF:                     Type.               (line   11)
29798* symbol type, ELF:                      Type.               (line   22)
29799* symbol value:                          Symbol Value.       (line    6)
29800* symbol value, setting:                 Set.                (line    6)
29801* symbol values, assigning:              Setting Symbols.    (line    6)
29802* symbol versioning:                     Symver.             (line    6)
29803* symbol, common:                        Comm.               (line    6)
29804* symbol, making visible to linker:      Global.             (line    6)
29805* symbolic debuggers, information for:   Stab.               (line    6)
29806* symbols:                               Symbols.            (line    6)
29807* Symbols in position-independent code, CRIS: CRIS-Pic.      (line    6)
29808* symbols with uppercase, VAX/VMS:       VAX-Opts.           (line   42)
29809* symbols, assigning values to:          Equ.                (line    6)
29810* Symbols, built-in, CRIS:               CRIS-Symbols.       (line    6)
29811* Symbols, CRIS, built-in:               CRIS-Symbols.       (line    6)
29812* symbols, local common:                 Lcomm.              (line    6)
29813* symver directive:                      Symver.             (line    6)
29814* syntax compatibility, i386:            i386-Variations.    (line    6)
29815* syntax compatibility, x86-64:          i386-Variations.    (line    6)
29816* syntax, AVR:                           AVR-Modifiers.      (line    6)
29817* syntax, Blackfin:                      Blackfin Syntax.    (line    6)
29818* syntax, D10V:                          D10V-Syntax.        (line    6)
29819* syntax, D30V:                          D30V-Syntax.        (line    6)
29820* syntax, LM32:                          LM32-Modifiers.     (line    6)
29821* syntax, M680x0:                        M68K-Syntax.        (line    8)
29822* syntax, M68HC11 <1>:                   M68HC11-Syntax.     (line    6)
29823* syntax, M68HC11:                       M68HC11-Modifiers.  (line    6)
29824* syntax, machine-independent:           Syntax.             (line    6)
29825* syntax, OPENRISC:                      OpenRISC-Dependent. (line   13)
29826* syntax, RL78:                          RL78-Modifiers.     (line    6)
29827* syntax, RX:                            RX-Modifiers.       (line    6)
29828* syntax, S12Z:                          S12Z Syntax.        (line   12)
29829* syntax, SPARC:                         Sparc-Aligned-Data. (line   21)
29830* syntax, TILE-Gx:                       TILE-Gx Syntax.     (line    6)
29831* syntax, TILEPro:                       TILEPro Syntax.     (line    6)
29832* syntax, XGATE:                         XGATE-Syntax.       (line    6)
29833* syntax, Xtensa assembler:              Xtensa Syntax.      (line    6)
29834* tab (\t):                              Strings.            (line   27)
29835* tab directive, TIC54X:                 TIC54X-Directives.  (line  247)
29836* tag directive:                         Tag.                (line    6)
29837* tag directive, TIC54X:                 TIC54X-Directives.  (line  250)
29838* TBM, i386:                             i386-TBM.           (line    6)
29839* TBM, x86-64:                           i386-TBM.           (line    6)
29840* tdaoff pseudo-op, V850:                V850 Opcodes.       (line   81)
29841* temporary symbol names:                Symbol Names.       (line   53)
29842* text and data sections, joining:       R.                  (line    6)
29843* text directive:                        Text.               (line    6)
29844* text section:                          Ld Sections.        (line    9)
29845* tfloat directive, i386:                i386-Float.         (line   14)
29846* tfloat directive, x86-64:              i386-Float.         (line   14)
29847* Thumb support:                         ARM-Dependent.      (line    6)
29848* TIC54X builtin math functions:         TIC54X-Builtins.    (line    6)
29849* TIC54X line comment character:         TIC54X-Chars.       (line    6)
29850* TIC54X line separator:                 TIC54X-Chars.       (line   17)
29851* TIC54X machine directives:             TIC54X-Directives.  (line    6)
29852* TIC54X memory-mapped registers:        TIC54X-MMRegs.      (line    6)
29853* TIC54X options:                        TIC54X-Opts.        (line    6)
29854* TIC54X subsym builtins:                TIC54X-Macros.      (line   16)
29855* TIC54X support:                        TIC54X-Dependent.   (line    6)
29856* TIC54X-specific macros:                TIC54X-Macros.      (line    6)
29857* TIC6X big-endian output:               TIC6X Options.      (line   46)
29858* TIC6X line comment character:          TIC6X Syntax.       (line    6)
29859* TIC6X line separator:                  TIC6X Syntax.       (line   13)
29860* TIC6X little-endian output:            TIC6X Options.      (line   46)
29861* TIC6X machine directives:              TIC6X Directives.   (line    6)
29862* TIC6X options:                         TIC6X Options.      (line    6)
29863* TIC6X support:                         TIC6X-Dependent.    (line    6)
29864* TILE-Gx machine directives:            TILE-Gx Directives. (line    6)
29865* TILE-Gx modifiers:                     TILE-Gx Modifiers.  (line    6)
29866* TILE-Gx opcode names:                  TILE-Gx Opcodes.    (line    6)
29867* TILE-Gx register names:                TILE-Gx Registers.  (line    6)
29868* TILE-Gx support:                       TILE-Gx-Dependent.  (line    6)
29869* TILE-Gx syntax:                        TILE-Gx Syntax.     (line    6)
29870* TILEPro machine directives:            TILEPro Directives. (line    6)
29871* TILEPro modifiers:                     TILEPro Modifiers.  (line    6)
29872* TILEPro opcode names:                  TILEPro Opcodes.    (line    6)
29873* TILEPro register names:                TILEPro Registers.  (line    6)
29874* TILEPro support:                       TILEPro-Dependent.  (line    6)
29875* TILEPro syntax:                        TILEPro Syntax.     (line    6)
29876* time, total for assembly:              statistics.         (line    6)
29877* title directive:                       Title.              (line    6)
29878* tls_common directive:                  Tls_common.         (line    6)
29879* tls_gd directive, Nios II:             Nios II Relocations.
29880                                                             (line   38)
29881* tls_ie directive, Nios II:             Nios II Relocations.
29882                                                             (line   38)
29883* tls_ldm directive, Nios II:            Nios II Relocations.
29884                                                             (line   38)
29885* tls_ldo directive, Nios II:            Nios II Relocations.
29886                                                             (line   38)
29887* tls_le directive, Nios II:             Nios II Relocations.
29888                                                             (line   38)
29889* TMS320C6X support:                     TIC6X-Dependent.    (line    6)
29890* tp register, V850:                     V850-Regs.          (line   20)
29891* transform directive:                   Transform Directive.
29892                                                             (line    6)
29893* trusted compiler:                      f.                  (line    6)
29894* turning preprocessing on and off:      Preprocessing.      (line   28)
29895* two-byte integer:                      2byte.              (line    6)
29896* type directive (COFF version):         Type.               (line   11)
29897* type directive (ELF version):          Type.               (line   22)
29898* type of a symbol:                      Symbol Type.        (line    6)
29899* ualong directive, SH:                  SH Directives.      (line    6)
29900* uaquad directive, SH:                  SH Directives.      (line    6)
29901* uaword directive, SH:                  SH Directives.      (line    6)
29902* ubyte directive, TIC54X:               TIC54X-Directives.  (line   36)
29903* uchar directive, TIC54X:               TIC54X-Directives.  (line   36)
29904* uhalf directive, TIC54X:               TIC54X-Directives.  (line  111)
29905* uint directive, TIC54X:                TIC54X-Directives.  (line  111)
29906* uleb128 directive:                     Uleb128.            (line    6)
29907* ulong directive, TIC54X:               TIC54X-Directives.  (line  135)
29908* undefined section:                     Ld Sections.        (line   36)
29909* union directive, TIC54X:               TIC54X-Directives.  (line  250)
29910* unsegm:                                Z8000 Directives.   (line   14)
29911* usect directive, TIC54X:               TIC54X-Directives.  (line  262)
29912* ushort directive, TIC54X:              TIC54X-Directives.  (line  111)
29913* uword directive, TIC54X:               TIC54X-Directives.  (line  111)
29914* V850 command-line options:             V850 Options.       (line    9)
29915* V850 floating point (IEEE):            V850 Floating Point.
29916                                                             (line    6)
29917* V850 line comment character:           V850-Chars.         (line    6)
29918* V850 line separator:                   V850-Chars.         (line   13)
29919* V850 machine directives:               V850 Directives.    (line    6)
29920* V850 opcodes:                          V850 Opcodes.       (line    6)
29921* V850 options (none):                   V850 Options.       (line    6)
29922* V850 register names:                   V850-Regs.          (line    6)
29923* V850 support:                          V850-Dependent.     (line    6)
29924* val directive:                         Val.                (line    6)
29925* value attribute, COFF:                 Val.                (line    6)
29926* value directive:                       i386-Directives.    (line   26)
29927* value of a symbol:                     Symbol Value.       (line    6)
29928* var directive, TIC54X:                 TIC54X-Directives.  (line  272)
29929* VAX bitfields not supported:           VAX-no.             (line    6)
29930* VAX branch improvement:                VAX-branch.         (line    6)
29931* VAX command-line options ignored:      VAX-Opts.           (line    6)
29932* VAX displacement sizing character:     VAX-operands.       (line   12)
29933* VAX floating point:                    VAX-float.          (line    6)
29934* VAX immediate character:               VAX-operands.       (line    6)
29935* VAX indirect character:                VAX-operands.       (line    9)
29936* VAX line comment character:            VAX-Chars.          (line    6)
29937* VAX line separator:                    VAX-Chars.          (line   14)
29938* VAX machine directives:                VAX-directives.     (line    6)
29939* VAX opcode mnemonics:                  VAX-opcodes.        (line    6)
29940* VAX operand notation:                  VAX-operands.       (line    6)
29941* VAX register names:                    VAX-operands.       (line   17)
29942* VAX support:                           Vax-Dependent.      (line    6)
29943* Vax-11 C compatibility:                VAX-Opts.           (line   42)
29944* VAX/VMS options:                       VAX-Opts.           (line   42)
29945* version directive:                     Version.            (line    6)
29946* version directive, TIC54X:             TIC54X-Directives.  (line  276)
29947* version of assembler:                  v.                  (line    6)
29948* versions of symbols:                   Symver.             (line    6)
29949* Virtualization instruction generation override: MIPS ASE Instruction Generation Overrides.
29950                                                             (line   53)
29951* visibility <1>:                        Hidden.             (line    6)
29952* visibility <2>:                        Protected.          (line    6)
29953* visibility:                            Internal.           (line    6)
29954* Visium line comment character:         Visium Characters.  (line    6)
29955* Visium line separator:                 Visium Characters.  (line   14)
29956* Visium options:                        Visium Options.     (line    6)
29957* Visium registers:                      Visium Registers.   (line    6)
29958* Visium support:                        Visium-Dependent.   (line    6)
29959* VMS (VAX) options:                     VAX-Opts.           (line   42)
29960* vtable_entry directive:                VTableEntry.        (line    6)
29961* vtable_inherit directive:              VTableInherit.      (line    6)
29962* warning directive:                     Warning.            (line    6)
29963* warning for altered difference tables: K.                  (line    6)
29964* warning messages:                      Errors.             (line    6)
29965* warnings, causing error:               W.                  (line   16)
29966* warnings, M32R:                        M32R-Warnings.      (line    6)
29967* warnings, suppressing:                 W.                  (line   11)
29968* warnings, switching on:                W.                  (line   19)
29969* weak directive:                        Weak.               (line    6)
29970* weakref directive:                     Weakref.            (line    6)
29971* WebAssembly floating point (IEEE):     WebAssembly-Floating-Point.
29972                                                             (line    6)
29973* WebAssembly line comment character:    WebAssembly-Chars.  (line    6)
29974* WebAssembly module layout:             WebAssembly-module-layout.
29975                                                             (line    6)
29976* WebAssembly notes:                     WebAssembly-Notes.  (line    6)
29977* WebAssembly opcodes:                   WebAssembly-Opcodes.
29978                                                             (line    6)
29979* WebAssembly relocations:               WebAssembly-Relocs. (line    6)
29980* WebAssembly signatures:                WebAssembly-Signatures.
29981                                                             (line    6)
29982* WebAssembly support:                   WebAssembly-Dependent.
29983                                                             (line    6)
29984* WebAssembly Syntax:                    WebAssembly-Syntax. (line    6)
29985* whitespace:                            Whitespace.         (line    6)
29986* whitespace, removed by preprocessor:   Preprocessing.      (line    7)
29987* wide floating point directives, VAX:   VAX-directives.     (line   10)
29988* width directive, TIC54X:               TIC54X-Directives.  (line  127)
29989* Width of continuation lines of disassembly output: listing.
29990                                                             (line   21)
29991* Width of first line disassembly output: listing.           (line   16)
29992* Width of source line output:           listing.            (line   28)
29993* wmsg directive, TIC54X:                TIC54X-Directives.  (line   77)
29994* word aligned program counter, ARC:     ARC-Regs.           (line   44)
29995* word directive:                        Word.               (line    6)
29996* word directive, BPF:                   BPF Directives.     (line   12)
29997* word directive, H8/300:                H8/300 Directives.  (line    6)
29998* word directive, i386:                  i386-Float.         (line   22)
29999* word directive, Nios II:               Nios II Directives. (line   13)
30000* word directive, OpenRISC:              OpenRISC-Directives.
30001                                                             (line   12)
30002* word directive, PRU:                   PRU Directives.     (line   10)
30003* word directive, SPARC:                 Sparc-Directives.   (line   51)
30004* word directive, TIC54X:                TIC54X-Directives.  (line  111)
30005* word directive, x86-64:                i386-Float.         (line   22)
30006* writing patterns in memory:            Fill.               (line    6)
30007* wval:                                  Z8000 Directives.   (line   24)
30008* x86 machine directives:                i386-Directives.    (line    6)
30009* x86-64 arch directive:                 i386-Arch.          (line    6)
30010* x86-64 att_syntax pseudo op:           i386-Variations.    (line    6)
30011* x86-64 conversion instructions:        i386-Mnemonics.     (line   68)
30012* x86-64 extension instructions:         i386-Mnemonics.     (line   87)
30013* x86-64 floating point:                 i386-Float.         (line    6)
30014* x86-64 immediate operands:             i386-Variations.    (line   15)
30015* x86-64 instruction naming:             i386-Mnemonics.     (line    9)
30016* x86-64 intel_syntax pseudo op:         i386-Variations.    (line    6)
30017* x86-64 jump optimization:              i386-Jumps.         (line    6)
30018* x86-64 jump, call, return:             i386-Variations.    (line   46)
30019* x86-64 jump/call operands:             i386-Variations.    (line   15)
30020* x86-64 memory references:              i386-Memory.        (line    6)
30021* x86-64 options:                        i386-Options.       (line    6)
30022* x86-64 register operands:              i386-Variations.    (line   15)
30023* x86-64 registers:                      i386-Regs.          (line    6)
30024* x86-64 sections:                       i386-Variations.    (line   52)
30025* x86-64 size suffixes:                  i386-Variations.    (line   29)
30026* x86-64 source, destination operands:   i386-Variations.    (line   22)
30027* x86-64 support:                        i386-Dependent.     (line    6)
30028* x86-64 syntax compatibility:           i386-Variations.    (line    6)
30029* xdef directive, Z80:                   Z80 Directives.     (line   62)
30030* xfloat directive, TIC54X:              TIC54X-Directives.  (line   64)
30031* XGATE addressing modes:                XGATE-Syntax.       (line   29)
30032* XGATE assembler directives:            XGATE-Directives.   (line    6)
30033* XGATE floating point:                  XGATE-Float.        (line    6)
30034* XGATE line comment character:          XGATE-Syntax.       (line   16)
30035* XGATE line separator:                  XGATE-Syntax.       (line   26)
30036* XGATE opcodes:                         XGATE-opcodes.      (line    6)
30037* XGATE options:                         XGATE-Opts.         (line    6)
30038* XGATE support:                         XGATE-Dependent.    (line    6)
30039* XGATE syntax:                          XGATE-Syntax.       (line    6)
30040* xlong directive, TIC54X:               TIC54X-Directives.  (line  135)
30041* xref directive, Z80:                   Z80 Directives.     (line   66)
30042* XStormy16 comment character:           XStormy16-Chars.    (line   11)
30043* XStormy16 line comment character:      XStormy16-Chars.    (line    6)
30044* XStormy16 line separator:              XStormy16-Chars.    (line   14)
30045* XStormy16 machine directives:          XStormy16 Directives.
30046                                                             (line    6)
30047* XStormy16 pseudo-opcodes:              XStormy16 Opcodes.  (line    6)
30048* XStormy16 support:                     XSTORMY16-Dependent.
30049                                                             (line    6)
30050* Xtensa architecture:                   Xtensa-Dependent.   (line    6)
30051* Xtensa assembler syntax:               Xtensa Syntax.      (line    6)
30052* Xtensa directives:                     Xtensa Directives.  (line    6)
30053* Xtensa opcode names:                   Xtensa Opcodes.     (line    6)
30054* Xtensa register names:                 Xtensa Registers.   (line    6)
30055* xword directive, SPARC:                Sparc-Directives.   (line   55)
30056* Z80 $:                                 Z80-Chars.          (line   15)
30057* Z80 ':                                 Z80-Chars.          (line   20)
30058* Z80 floating point:                    Z80 Floating Point. (line    6)
30059* Z80 labels:                            Z80-Labels.         (line    6)
30060* Z80 line comment character:            Z80-Chars.          (line    6)
30061* Z80 line separator:                    Z80-Chars.          (line   13)
30062* Z80 options:                           Z80 Options.        (line    6)
30063* Z80 registers:                         Z80-Regs.           (line    6)
30064* Z80 support:                           Z80-Dependent.      (line    6)
30065* Z80 Syntax:                            Z80 Options.        (line   69)
30066* Z80, \:                                Z80-Chars.          (line   18)
30067* Z80, case sensitivity:                 Z80-Case.           (line    6)
30068* Z80-only directives:                   Z80 Directives.     (line    6)
30069* Z800 addressing modes:                 Z8000-Addressing.   (line    6)
30070* Z8000 directives:                      Z8000 Directives.   (line    6)
30071* Z8000 line comment character:          Z8000-Chars.        (line    6)
30072* Z8000 line separator:                  Z8000-Chars.        (line   13)
30073* Z8000 opcode summary:                  Z8000 Opcodes.      (line    6)
30074* Z8000 options:                         Z8000 Options.      (line    6)
30075* Z8000 registers:                       Z8000-Regs.         (line    6)
30076* Z8000 support:                         Z8000-Dependent.    (line    6)
30077* zdaoff pseudo-op, V850:                V850 Opcodes.       (line   99)
30078* zero directive:                        Zero.               (line    6)
30079* zero register, V850:                   V850-Regs.          (line    7)
30080* zero-terminated strings:               Asciz.              (line    6)
30081
30082
30083
30084Tag Table:
30085Node: Top868
30086Node: Overview1861
30087Node: Manual44415
30088Node: GNU Assembler45359
30089Node: Object Formats46530
30090Node: Command Line46982
30091Node: Input Files48069
30092Node: Object50050
30093Node: Errors50946
30094Node: Invoking52510
30095Node: a54527
30096Node: alternate56438
30097Node: D56610
30098Node: f56843
30099Node: I57351
30100Node: K57895
30101Node: L58199
30102Node: listing58938
30103Node: M60597
30104Node: MD64435
30105Node: no-pad-sections64875
30106Node: o65250
30107Node: R65677
30108Node: statistics66707
30109Node: traditional-format67114
30110Node: v67587
30111Node: W67862
30112Node: Z68769
30113Node: Syntax69291
30114Node: Preprocessing69883
30115Node: Whitespace71539
30116Node: Comments71935
30117Node: Symbol Intro73946
30118Node: Statements75015
30119Node: Constants77004
30120Node: Characters77635
30121Node: Strings78137
30122Node: Chars80312
30123Node: Numbers81165
30124Node: Integers81705
30125Node: Bignums82361
30126Node: Flonums82717
30127Node: Sections84337
30128Node: Secs Background84715
30129Node: Ld Sections89754
30130Node: As Sections92138
30131Node: Sub-Sections93048
30132Node: bss96193
30133Node: Symbols97143
30134Node: Labels97791
30135Node: Setting Symbols98522
30136Node: Symbol Names99076
30137Node: Dot105130
30138Node: Symbol Attributes105577
30139Node: Symbol Value106313
30140Node: Symbol Type107358
30141Node: a.out Symbols107746
30142Node: Symbol Desc108008
30143Node: Symbol Other108303
30144Node: COFF Symbols108472
30145Node: SOM Symbols109145
30146Node: Expressions109587
30147Node: Empty Exprs110336
30148Node: Integer Exprs110683
30149Node: Arguments111078
30150Node: Operators112184
30151Node: Prefix Ops112519
30152Node: Infix Ops112847
30153Node: Pseudo Ops115236
30154Node: Abort121550
30155Node: ABORT (COFF)121962
30156Node: Align122170
30157Node: Altmacro124566
30158Node: Ascii125895
30159Node: Asciz126204
30160Node: Attach_to_group126594
30161Node: Balign127009
30162Node: Bss129004
30163Node: Bundle directives129428
30164Node: Byte132413
30165Node: CFI directives132674
30166Node: Comm141982
30167Ref: Comm-Footnote-1143583
30168Node: Data143945
30169Node: Dc144261
30170Node: Dcb145244
30171Node: Ds146042
30172Node: Def146982
30173Node: Desc147212
30174Node: Dim147712
30175Node: Double147969
30176Node: Eject148307
30177Node: Else148482
30178Node: Elseif148782
30179Node: End149076
30180Node: Endef149291
30181Node: Endfunc149468
30182Node: Endif149643
30183Node: Equ149904
30184Node: Equiv150419
30185Node: Eqv150975
30186Node: Err151339
30187Node: Error151650
30188Node: Exitm152095
30189Node: Extern152264
30190Node: Fail152525
30191Node: File152970
30192Node: Fill155255
30193Node: Float156219
30194Node: Func156561
30195Node: Global157151
30196Node: Gnu_attribute157908
30197Node: Hidden158133
30198Node: hword158719
30199Node: Ident159047
30200Node: If159621
30201Node: Incbin162680
30202Node: Include163375
30203Node: Int163926
30204Node: Internal164307
30205Node: Irp164955
30206Node: Irpc165834
30207Node: Lcomm166751
30208Node: Lflags167499
30209Node: Line167693
30210Node: Linkonce168606
30211Node: List169835
30212Node: Ln170443
30213Node: Loc170593
30214Node: Loc_mark_labels172898
30215Node: Local173382
30216Node: Long173994
30217Node: Macro174172
30218Node: MRI181627
30219Node: Noaltmacro181965
30220Node: Nolist182134
30221Node: Nop182563
30222Node: Nops183247
30223Node: Octa184101
30224Node: Offset184436
30225Node: Org184763
30226Node: P2align186048
30227Node: PopSection188102
30228Node: Previous188610
30229Node: Print190023
30230Node: Protected190252
30231Node: Psize190899
30232Node: Purgem191583
30233Node: PushSection191804
30234Node: Quad192547
30235Node: Reloc193003
30236Node: Rept193764
30237Node: Sbttl194326
30238Node: Scl194691
30239Node: Section195032
30240Ref: Section Name Substitutions197106
30241Node: Set204969
30242Node: Short206061
30243Node: Single206382
30244Node: Size206727
30245Node: Skip207399
30246Node: Sleb128207723
30247Node: Space208045
30248Node: Stab208686
30249Node: String210688
30250Node: Struct211680
30251Node: SubSection212403
30252Node: Symver212964
30253Node: Tag215841
30254Node: Text216221
30255Node: Title216540
30256Node: Tls_common216927
30257Node: Type217246
30258Node: Uleb128219721
30259Node: Val220045
30260Node: Version220295
30261Node: VTableEntry220570
30262Node: VTableInherit220860
30263Node: Warning221310
30264Node: Weak221544
30265Node: Weakref222213
30266Node: Word223178
30267Node: Zero225018
30268Node: 2byte225425
30269Node: 4byte226374
30270Node: 8byte226638
30271Node: Deprecated226915
30272Node: Object Attributes227151
30273Node: GNU Object Attributes228871
30274Node: Defining New Object Attributes233235
30275Node: Machine Dependencies234032
30276Node: AArch64-Dependent238124
30277Node: AArch64 Options238606
30278Node: AArch64 Extensions241712
30279Node: AArch64 Syntax248346
30280Node: AArch64-Chars248646
30281Node: AArch64-Regs249132
30282Node: AArch64-Relocations249426
30283Node: AArch64 Floating Point250500
30284Node: AArch64 Directives250725
30285Node: AArch64 Opcodes254667
30286Node: AArch64 Mapping Symbols255345
30287Node: Alpha-Dependent255727
30288Node: Alpha Notes256167
30289Node: Alpha Options256448
30290Node: Alpha Syntax258923
30291Node: Alpha-Chars259392
30292Node: Alpha-Regs259804
30293Node: Alpha-Relocs260191
30294Node: Alpha Floating Point266449
30295Node: Alpha Directives266671
30296Node: Alpha Opcodes272194
30297Node: ARC-Dependent272489
30298Node: ARC Options272934
30299Node: ARC Syntax276042
30300Node: ARC-Chars276270
30301Node: ARC-Regs277393
30302Node: ARC Directives280163
30303Node: ARC Modifiers288781
30304Node: ARC Symbols289792
30305Node: ARC Opcodes290353
30306Node: ARM-Dependent290599
30307Node: ARM Options291064
30308Node: ARM Syntax311338
30309Node: ARM-Instruction-Set311706
30310Node: ARM-Chars312926
30311Node: ARM-Regs313637
30312Node: ARM-Relocations313846
30313Node: ARM-Neon-Alignment315531
30314Node: ARM Floating Point315995
30315Node: ARM Directives316194
30316Ref: arm_fnend321354
30317Ref: arm_fnstart321678
30318Ref: arm_pad324087
30319Ref: arm_save324689
30320Ref: arm_setfp325390
30321Node: ARM Opcodes328682
30322Node: ARM Mapping Symbols331285
30323Node: ARM Unwinding Tutorial332095
30324Node: AVR-Dependent338297
30325Node: AVR Options338636
30326Node: AVR Syntax345139
30327Node: AVR-Chars345426
30328Node: AVR-Regs346057
30329Node: AVR-Modifiers346636
30330Node: AVR Opcodes348999
30331Node: AVR Pseudo Instructions354277
30332Node: Blackfin-Dependent355937
30333Node: Blackfin Options356248
30334Node: Blackfin Syntax357222
30335Node: Blackfin Directives363426
30336Node: BPF-Dependent364172
30337Node: BPF Options364489
30338Node: BPF Syntax364872
30339Node: BPF-Chars365140
30340Node: BPF-Regs365533
30341Node: BPF-Pseudo-Maps366048
30342Node: BPF Directives366468
30343Node: BPF Opcodes366882
30344Node: CR16-Dependent373499
30345Node: CR16 Operand Qualifiers373794
30346Node: CR16 Syntax376523
30347Node: CR16-Chars376709
30348Node: CRIS-Dependent377246
30349Node: CRIS-Opts377593
30350Ref: march-option379279
30351Node: CRIS-Expand381096
30352Node: CRIS-Symbols382279
30353Node: CRIS-Syntax383448
30354Node: CRIS-Chars383784
30355Node: CRIS-Pic384335
30356Ref: crispic384531
30357Node: CRIS-Regs388071
30358Node: CRIS-Pseudos388488
30359Ref: crisnous389264
30360Node: C-SKY-Dependent390546
30361Node: C-SKY Options390808
30362Node: C-SKY Syntax393795
30363Node: D10V-Dependent394040
30364Node: D10V-Opts394394
30365Node: D10V-Syntax395358
30366Node: D10V-Size395889
30367Node: D10V-Subs396864
30368Node: D10V-Chars397901
30369Node: D10V-Regs399815
30370Node: D10V-Addressing400862
30371Node: D10V-Word401550
30372Node: D10V-Float402067
30373Node: D10V-Opcodes402380
30374Node: D30V-Dependent402775
30375Node: D30V-Opts403132
30376Node: D30V-Syntax403809
30377Node: D30V-Size404343
30378Node: D30V-Subs405316
30379Node: D30V-Chars406353
30380Node: D30V-Guarded408961
30381Node: D30V-Regs409643
30382Node: D30V-Addressing410784
30383Node: D30V-Float411454
30384Node: D30V-Opcodes411767
30385Node: Epiphany-Dependent412162
30386Node: Epiphany Options412450
30387Node: Epiphany Syntax412849
30388Node: Epiphany-Chars413050
30389Node: H8/300-Dependent413604
30390Node: H8/300 Options414020
30391Node: H8/300 Syntax414461
30392Node: H8/300-Chars414762
30393Node: H8/300-Regs415061
30394Node: H8/300-Addressing415980
30395Node: H8/300 Floating Point417021
30396Node: H8/300 Directives417348
30397Node: H8/300 Opcodes418476
30398Node: HPPA-Dependent426798
30399Node: HPPA Notes427230
30400Node: HPPA Options427989
30401Node: HPPA Syntax428184
30402Node: HPPA Floating Point429454
30403Node: HPPA Directives429660
30404Node: HPPA Opcodes438346
30405Node: i386-Dependent438605
30406Node: i386-Options439991
30407Node: i386-Directives455166
30408Node: i386-Syntax456509
30409Node: i386-Variations456814
30410Node: i386-Chars459741
30411Node: i386-Mnemonics460470
30412Node: i386-Regs465480
30413Node: i386-Prefixes468145
30414Node: i386-Memory470905
30415Node: i386-Jumps473842
30416Node: i386-Float474963
30417Node: i386-SIMD476863
30418Node: i386-LWP477972
30419Node: i386-BMI478806
30420Node: i386-TBM479184
30421Node: i386-16bit479714
30422Node: i386-Arch481785
30423Node: i386-ISA485637
30424Node: i386-Bugs486509
30425Node: i386-Notes487262
30426Node: IA-64-Dependent488120
30427Node: IA-64 Options488421
30428Node: IA-64 Syntax491572
30429Node: IA-64-Chars491978
30430Node: IA-64-Regs492208
30431Node: IA-64-Bits493134
30432Node: IA-64-Relocs493664
30433Node: IA-64 Opcodes494136
30434Node: IP2K-Dependent494408
30435Node: IP2K-Opts494680
30436Node: IP2K-Syntax495180
30437Node: IP2K-Chars495354
30438Node: LM32-Dependent495897
30439Node: LM32 Options496192
30440Node: LM32 Syntax496826
30441Node: LM32-Regs497122
30442Node: LM32-Modifiers498081
30443Node: LM32-Chars499456
30444Node: LM32 Opcodes499964
30445Node: M32C-Dependent500268
30446Node: M32C-Opts500777
30447Node: M32C-Syntax501197
30448Node: M32C-Modifiers501432
30449Node: M32C-Chars503221
30450Node: M32R-Dependent503787
30451Node: M32R-Opts504108
30452Node: M32R-Directives508271
30453Node: M32R-Warnings512246
30454Node: M68K-Dependent515252
30455Node: M68K-Opts515719
30456Node: M68K-Syntax523092
30457Node: M68K-Moto-Syntax524932
30458Node: M68K-Float527522
30459Node: M68K-Directives528042
30460Node: M68K-opcodes529370
30461Node: M68K-Branch529596
30462Node: M68K-Chars533794
30463Node: M68HC11-Dependent534657
30464Node: M68HC11-Opts535188
30465Node: M68HC11-Syntax539493
30466Node: M68HC11-Modifiers542284
30467Node: M68HC11-Directives544112
30468Node: M68HC11-Float545488
30469Node: M68HC11-opcodes546016
30470Node: M68HC11-Branch546198
30471Node: S12Z-Dependent548647
30472Node: S12Z Options548993
30473Node: S12Z Syntax549977
30474Node: S12Z Syntax Overview550296
30475Node: S12Z Addressing Modes551958
30476Node: S12Z Register Notation555765
30477Node: Meta-Dependent556947
30478Node: Meta Options557229
30479Node: Meta Syntax557891
30480Node: Meta-Chars558103
30481Node: Meta-Regs558403
30482Node: MicroBlaze-Dependent558679
30483Node: MicroBlaze Directives559368
30484Node: MicroBlaze Syntax560751
30485Node: MicroBlaze-Chars560983
30486Node: MIPS-Dependent561535
30487Node: MIPS Options562972
30488Node: MIPS Macros582488
30489Ref: MIPS Macros-Footnote-1585202
30490Node: MIPS Symbol Sizes585345
30491Node: MIPS Small Data587017
30492Node: MIPS ISA589180
30493Node: MIPS assembly options590965
30494Node: MIPS autoextend592098
30495Node: MIPS insn592832
30496Node: MIPS FP ABIs594112
30497Node: MIPS FP ABI History594564
30498Node: MIPS FP ABI Variants595324
30499Node: MIPS FP ABI Selection597878
30500Node: MIPS FP ABI Compatibility598942
30501Node: MIPS NaN Encodings599752
30502Node: MIPS Option Stack601715
30503Node: MIPS ASE Instruction Generation Overrides602500
30504Node: MIPS Floating-Point607263
30505Node: MIPS Syntax608169
30506Node: MIPS-Chars608431
30507Node: MMIX-Dependent608973
30508Node: MMIX-Opts609353
30509Node: MMIX-Expand612958
30510Node: MMIX-Syntax614273
30511Ref: mmixsite614630
30512Node: MMIX-Chars615471
30513Node: MMIX-Symbols616345
30514Node: MMIX-Regs618413
30515Node: MMIX-Pseudos619438
30516Ref: MMIX-loc619579
30517Ref: MMIX-local620659
30518Ref: MMIX-is621191
30519Ref: MMIX-greg621462
30520Ref: GREG-base622381
30521Ref: MMIX-byte623698
30522Ref: MMIX-constants624169
30523Ref: MMIX-prefix624815
30524Ref: MMIX-spec625189
30525Node: MMIX-mmixal625523
30526Node: MSP430-Dependent629021
30527Node: MSP430 Options629490
30528Node: MSP430 Syntax633056
30529Node: MSP430-Macros633372
30530Node: MSP430-Chars634103
30531Node: MSP430-Regs634818
30532Node: MSP430-Ext635378
30533Node: MSP430 Floating Point637199
30534Node: MSP430 Directives637423
30535Node: MSP430 Opcodes639274
30536Node: MSP430 Profiling Capability639669
30537Node: NDS32-Dependent641998
30538Node: NDS32 Options642610
30539Node: NDS32 Syntax644511
30540Node: NDS32-Chars644779
30541Node: NDS32-Regs645246
30542Node: NDS32-Ops646100
30543Node: NiosII-Dependent649695
30544Node: Nios II Options650114
30545Node: Nios II Syntax651352
30546Node: Nios II Chars651558
30547Node: Nios II Relocations651749
30548Node: Nios II Directives653321
30549Node: Nios II Opcodes654884
30550Node: NS32K-Dependent655159
30551Node: NS32K Syntax655388
30552Node: NS32K-Chars655537
30553Node: OpenRISC-Dependent656277
30554Node: OpenRISC-Syntax656620
30555Node: OpenRISC-Chars656941
30556Node: OpenRISC-Regs657264
30557Node: OpenRISC-Relocs658277
30558Node: OpenRISC-Float663073
30559Node: OpenRISC-Directives663279
30560Node: OpenRISC-Opcodes664077
30561Node: PDP-11-Dependent664369
30562Node: PDP-11-Options664762
30563Node: PDP-11-Pseudos669833
30564Node: PDP-11-Syntax670178
30565Node: PDP-11-Mnemonics671010
30566Node: PDP-11-Synthetic671312
30567Node: PJ-Dependent671530
30568Node: PJ Options671793
30569Node: PJ Syntax672088
30570Node: PJ-Chars672253
30571Node: PPC-Dependent672802
30572Node: PowerPC-Opts673134
30573Node: PowerPC-Pseudo676926
30574Node: PowerPC-Syntax677548
30575Node: PowerPC-Chars677738
30576Node: PRU-Dependent678489
30577Node: PRU Options678872
30578Node: PRU Syntax679608
30579Node: PRU Chars679795
30580Node: PRU Relocations679950
30581Node: PRU Directives680501
30582Node: PRU Opcodes681405
30583Node: RISC-V-Dependent681822
30584Node: RISC-V-Options682250
30585Node: RISC-V-Directives684970
30586Node: RISC-V-Modifiers690325
30587Node: RISC-V-Formats694393
30588Node: RISC-V-ATTRIBUTE702994
30589Node: RL78-Dependent704960
30590Node: RL78-Opts705361
30591Node: RL78-Modifiers706196
30592Node: RL78-Directives706972
30593Node: RL78-Syntax707577
30594Node: RL78-Chars707773
30595Node: RX-Dependent708329
30596Node: RX-Opts708760
30597Node: RX-Modifiers713026
30598Node: RX-Directives714130
30599Node: RX-Float714870
30600Node: RX-Syntax715511
30601Node: RX-Chars715690
30602Node: S/390-Dependent716242
30603Node: s390 Options717104
30604Node: s390 Characters719288
30605Node: s390 Syntax719809
30606Node: s390 Register720710
30607Node: s390 Mnemonics721523
30608Node: s390 Operands724541
30609Node: s390 Formats727161
30610Node: s390 Aliases736782
30611Node: s390 Operand Modifier740679
30612Node: s390 Instruction Marker744480
30613Node: s390 Literal Pool Entries745496
30614Node: s390 Directives747419
30615Node: s390 Floating Point752867
30616Node: SCORE-Dependent753313
30617Node: SCORE-Opts753615
30618Node: SCORE-Pseudo754903
30619Node: SCORE-Syntax756980
30620Node: SCORE-Chars757162
30621Node: SH-Dependent757720
30622Node: SH Options758132
30623Node: SH Syntax759187
30624Node: SH-Chars759460
30625Node: SH-Regs760003
30626Node: SH-Addressing760617
30627Node: SH Floating Point761526
30628Node: SH Directives762620
30629Node: SH Opcodes763021
30630Node: Sparc-Dependent767343
30631Node: Sparc-Opts767752
30632Node: Sparc-Aligned-Data773465
30633Node: Sparc-Syntax774297
30634Node: Sparc-Chars774871
30635Node: Sparc-Regs775434
30636Node: Sparc-Constants781282
30637Node: Sparc-Relocs786042
30638Node: Sparc-Size-Translations791178
30639Node: Sparc-Float792827
30640Node: Sparc-Directives793022
30641Node: TIC54X-Dependent794982
30642Node: TIC54X-Opts795745
30643Node: TIC54X-Block796788
30644Node: TIC54X-Env797148
30645Node: TIC54X-Constants797496
30646Node: TIC54X-Subsyms797898
30647Node: TIC54X-Locals799807
30648Node: TIC54X-Builtins800551
30649Node: TIC54X-Ext803022
30650Node: TIC54X-Directives803593
30651Node: TIC54X-Macros814494
30652Node: TIC54X-MMRegs816605
30653Node: TIC54X-Syntax816843
30654Node: TIC54X-Chars817033
30655Node: TIC6X-Dependent817724
30656Node: TIC6X Options818027
30657Node: TIC6X Syntax820028
30658Node: TIC6X Directives821130
30659Node: TILE-Gx-Dependent823414
30660Node: TILE-Gx Options823724
30661Node: TILE-Gx Syntax824074
30662Node: TILE-Gx Opcodes826308
30663Node: TILE-Gx Registers826596
30664Node: TILE-Gx Modifiers827368
30665Node: TILE-Gx Directives832341
30666Node: TILEPro-Dependent833245
30667Node: TILEPro Options833554
30668Node: TILEPro Syntax833738
30669Node: TILEPro Opcodes835972
30670Node: TILEPro Registers836263
30671Node: TILEPro Modifiers837033
30672Node: TILEPro Directives841799
30673Node: V850-Dependent842703
30674Node: V850 Options843099
30675Node: V850 Syntax847379
30676Node: V850-Chars847619
30677Node: V850-Regs848163
30678Node: V850 Floating Point849731
30679Node: V850 Directives849937
30680Node: V850 Opcodes852004
30681Node: Vax-Dependent857896
30682Node: VAX-Opts858480
30683Node: VAX-float862215
30684Node: VAX-directives862847
30685Node: VAX-opcodes863708
30686Node: VAX-branch864097
30687Node: VAX-operands866604
30688Node: VAX-no867367
30689Node: VAX-Syntax867623
30690Node: VAX-Chars867789
30691Node: Visium-Dependent868343
30692Node: Visium Options868656
30693Node: Visium Syntax869122
30694Node: Visium Characters869367
30695Node: Visium Registers869948
30696Node: Visium Opcodes870220
30697Node: WebAssembly-Dependent870646
30698Node: WebAssembly-Notes871087
30699Node: WebAssembly-Syntax871373
30700Node: WebAssembly-Chars871939
30701Node: WebAssembly-Relocs872318
30702Node: WebAssembly-Signatures873043
30703Node: WebAssembly-Floating-Point873544
30704Node: WebAssembly-Opcodes873785
30705Node: WebAssembly-module-layout874418
30706Node: XGATE-Dependent874896
30707Node: XGATE-Opts875323
30708Node: XGATE-Syntax876314
30709Node: XGATE-Directives878391
30710Node: XGATE-Float878630
30711Node: XGATE-opcodes879127
30712Node: XSTORMY16-Dependent879239
30713Node: XStormy16 Syntax879585
30714Node: XStormy16-Chars879775
30715Node: XStormy16 Directives880388
30716Node: XStormy16 Opcodes881043
30717Node: Xtensa-Dependent882099
30718Node: Xtensa Options882833
30719Node: Xtensa Syntax887410
30720Node: Xtensa Opcodes889554
30721Node: Xtensa Registers891348
30722Node: Xtensa Optimizations891981
30723Node: Density Instructions892433
30724Node: Xtensa Automatic Alignment893535
30725Node: Xtensa Relaxation895982
30726Node: Xtensa Branch Relaxation896947
30727Node: Xtensa Call Relaxation898319
30728Node: Xtensa Jump Relaxation900100
30729Node: Xtensa Immediate Relaxation902200
30730Node: Xtensa Directives904774
30731Node: Schedule Directive906483
30732Node: Longcalls Directive906823
30733Node: Transform Directive907367
30734Node: Literal Directive908109
30735Ref: Literal Directive-Footnote-1911648
30736Node: Literal Position Directive911790
30737Node: Literal Prefix Directive913489
30738Node: Absolute Literals Directive914387
30739Node: Z80-Dependent915694
30740Node: Z80 Options916082
30741Node: Z80 Syntax918589
30742Node: Z80-Chars919297
30743Node: Z80-Regs920147
30744Node: Z80-Case920499
30745Node: Z80-Labels920963
30746Node: Z80 Floating Point921456
30747Node: Z80 Directives921931
30748Node: Z80 Opcodes924394
30749Node: Z8000-Dependent926018
30750Node: Z8000 Options926957
30751Node: Z8000 Syntax927174
30752Node: Z8000-Chars927464
30753Node: Z8000-Regs927946
30754Node: Z8000-Addressing928736
30755Node: Z8000 Directives929853
30756Node: Z8000 Opcodes931462
30757Node: Reporting Bugs941404
30758Node: Bug Criteria942130
30759Node: Bug Reporting942897
30760Node: Acknowledgements949553
30761Ref: Acknowledgements-Footnote-1954518
30762Node: GNU Free Documentation License954544
30763Node: AS Index979713
30764
30765End Tag Table
30766