1This is as.info, produced by makeinfo version 5.1 from as.texi.
2
3This file documents the GNU Assembler "as".
4
5   Copyright (C) 1991-2021 Free Software Foundation, Inc.
6
7   Permission is granted to copy, distribute and/or modify this document
8under the terms of the GNU Free Documentation License, Version 1.3 or
9any later version published by the Free Software Foundation; with no
10Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
11Texts.  A copy of the license is included in the section entitled "GNU
12Free Documentation License".
13
14INFO-DIR-SECTION Software development
15START-INFO-DIR-ENTRY
16* As: (as).                     The GNU assembler.
17* Gas: (as).                    The GNU assembler.
18END-INFO-DIR-ENTRY
19
20
21File: as.info,  Node: Top,  Next: Overview,  Up: (dir)
22
23Using as
24********
25
26This file is a user guide to the GNU assembler 'as' (GNU Toolchain for
27the A-profile Architecture 10.3-2021.07 (arm-10.29)) version 2.36.1.
28
29   This document is distributed under the terms of the GNU Free
30Documentation License.  A copy of the license is included in the section
31entitled "GNU Free Documentation License".
32
33* Menu:
34
35* Overview::                    Overview
36* Invoking::                    Command-Line Options
37* Syntax::                      Syntax
38* Sections::                    Sections and Relocation
39* Symbols::                     Symbols
40* Expressions::                 Expressions
41* Pseudo Ops::                  Assembler Directives
42* Object Attributes::           Object Attributes
43* Machine Dependencies::        Machine Dependent Features
44* Reporting Bugs::              Reporting Bugs
45* Acknowledgements::            Who Did What
46* GNU Free Documentation License::  GNU Free Documentation License
47* AS Index::                    AS Index
48
49
50File: as.info,  Node: Overview,  Next: Invoking,  Prev: Top,  Up: Top
51
521 Overview
53**********
54
55Here is a brief summary of how to invoke 'as'.  For details, see *note
56Command-Line Options: Invoking.
57
58     as [-a[cdghlns][=FILE]] [-alternate] [-D]
59      [-compress-debug-sections]  [-nocompress-debug-sections]
60      [-debug-prefix-map OLD=NEW]
61      [-defsym SYM=VAL] [-f] [-g] [-gstabs]
62      [-gstabs+] [-gdwarf-<N>] [-gdwarf-sections]
63      [-gdwarf-cie-version=VERSION]
64      [-help] [-I DIR] [-J]
65      [-K] [-L] [-listing-lhs-width=NUM]
66      [-listing-lhs-width2=NUM] [-listing-rhs-width=NUM]
67      [-listing-cont-lines=NUM] [-keep-locals]
68      [-no-pad-sections]
69      [-o OBJFILE] [-R]
70      [-statistics]
71      [-v] [-version] [-version]
72      [-W] [-warn] [-fatal-warnings] [-w] [-x]
73      [-Z] [@FILE]
74      [-sectname-subst] [-size-check=[error|warning]]
75      [-elf-stt-common=[no|yes]]
76      [-generate-missing-build-notes=[no|yes]]
77      [-target-help] [TARGET-OPTIONS]
78      [-|FILES ...]
79
80     _Target AArch64 options:_
81        [-EB|-EL]
82        [-mabi=ABI]
83
84     _Target Alpha options:_
85        [-mCPU]
86        [-mdebug | -no-mdebug]
87        [-replace | -noreplace]
88        [-relax] [-g] [-GSIZE]
89        [-F] [-32addr]
90
91     _Target ARC options:_
92        [-mcpu=CPU]
93        [-mA6|-mARC600|-mARC601|-mA7|-mARC700|-mEM|-mHS]
94        [-mcode-density]
95        [-mrelax]
96        [-EB|-EL]
97
98     _Target ARM options:_
99        [-mcpu=PROCESSOR[+EXTENSION...]]
100        [-march=ARCHITECTURE[+EXTENSION...]]
101        [-mfpu=FLOATING-POINT-FORMAT]
102        [-mfloat-abi=ABI]
103        [-meabi=VER]
104        [-mthumb]
105        [-EB|-EL]
106        [-mapcs-32|-mapcs-26|-mapcs-float|
107         -mapcs-reentrant]
108        [-mthumb-interwork] [-k]
109
110     _Target Blackfin options:_
111        [-mcpu=PROCESSOR[-SIREVISION]]
112        [-mfdpic]
113        [-mno-fdpic]
114        [-mnopic]
115
116     _Target BPF options:_
117        [-EL] [-EB]
118
119     _Target CRIS options:_
120        [-underscore | -no-underscore]
121        [-pic] [-N]
122        [-emulation=criself | -emulation=crisaout]
123        [-march=v0_v10 | -march=v10 | -march=v32 | -march=common_v10_v32]
124
125     _Target C-SKY options:_
126        [-march=ARCH] [-mcpu=CPU]
127        [-EL] [-mlittle-endian] [-EB] [-mbig-endian]
128        [-fpic] [-pic]
129        [-mljump] [-mno-ljump]
130        [-force2bsr] [-mforce2bsr] [-no-force2bsr] [-mno-force2bsr]
131        [-jsri2bsr] [-mjsri2bsr] [-no-jsri2bsr ] [-mno-jsri2bsr]
132        [-mnolrw ] [-mno-lrw]
133        [-melrw] [-mno-elrw]
134        [-mlaf ] [-mliterals-after-func]
135        [-mno-laf] [-mno-literals-after-func]
136        [-mlabr] [-mliterals-after-br]
137        [-mno-labr] [-mnoliterals-after-br]
138        [-mistack] [-mno-istack]
139        [-mhard-float] [-mmp] [-mcp] [-mcache]
140        [-msecurity] [-mtrust]
141        [-mdsp] [-medsp] [-mvdsp]
142
143     _Target D10V options:_
144        [-O]
145
146     _Target D30V options:_
147        [-O|-n|-N]
148
149     _Target EPIPHANY options:_
150        [-mepiphany|-mepiphany16]
151
152     _Target H8/300 options:_
153        [-h-tick-hex]
154
155     _Target i386 options:_
156        [-32|-x32|-64] [-n]
157        [-march=CPU[+EXTENSION...]] [-mtune=CPU]
158
159     _Target IA-64 options:_
160        [-mconstant-gp|-mauto-pic]
161        [-milp32|-milp64|-mlp64|-mp64]
162        [-mle|mbe]
163        [-mtune=itanium1|-mtune=itanium2]
164        [-munwind-check=warning|-munwind-check=error]
165        [-mhint.b=ok|-mhint.b=warning|-mhint.b=error]
166        [-x|-xexplicit] [-xauto] [-xdebug]
167
168     _Target IP2K options:_
169        [-mip2022|-mip2022ext]
170
171     _Target M32C options:_
172        [-m32c|-m16c] [-relax] [-h-tick-hex]
173
174     _Target M32R options:_
175        [-m32rx|-[no-]warn-explicit-parallel-conflicts|
176        -W[n]p]
177
178     _Target M680X0 options:_
179        [-l] [-m68000|-m68010|-m68020|...]
180
181     _Target M68HC11 options:_
182        [-m68hc11|-m68hc12|-m68hcs12|-mm9s12x|-mm9s12xg]
183        [-mshort|-mlong]
184        [-mshort-double|-mlong-double]
185        [-force-long-branches] [-short-branches]
186        [-strict-direct-mode] [-print-insn-syntax]
187        [-print-opcodes] [-generate-example]
188
189     _Target MCORE options:_
190        [-jsri2bsr] [-sifilter] [-relax]
191        [-mcpu=[210|340]]
192
193     _Target Meta options:_
194        [-mcpu=CPU] [-mfpu=CPU] [-mdsp=CPU]
195     _Target MICROBLAZE options:_
196
197     _Target MIPS options:_
198        [-nocpp] [-EL] [-EB] [-O[OPTIMIZATION LEVEL]]
199        [-g[DEBUG LEVEL]] [-G NUM] [-KPIC] [-call_shared]
200        [-non_shared] [-xgot [-mvxworks-pic]
201        [-mabi=ABI] [-32] [-n32] [-64] [-mfp32] [-mgp32]
202        [-mfp64] [-mgp64] [-mfpxx]
203        [-modd-spreg] [-mno-odd-spreg]
204        [-march=CPU] [-mtune=CPU] [-mips1] [-mips2]
205        [-mips3] [-mips4] [-mips5] [-mips32] [-mips32r2]
206        [-mips32r3] [-mips32r5] [-mips32r6] [-mips64] [-mips64r2]
207        [-mips64r3] [-mips64r5] [-mips64r6]
208        [-construct-floats] [-no-construct-floats]
209        [-mignore-branch-isa] [-mno-ignore-branch-isa]
210        [-mnan=ENCODING]
211        [-trap] [-no-break] [-break] [-no-trap]
212        [-mips16] [-no-mips16]
213        [-mmips16e2] [-mno-mips16e2]
214        [-mmicromips] [-mno-micromips]
215        [-msmartmips] [-mno-smartmips]
216        [-mips3d] [-no-mips3d]
217        [-mdmx] [-no-mdmx]
218        [-mdsp] [-mno-dsp]
219        [-mdspr2] [-mno-dspr2]
220        [-mdspr3] [-mno-dspr3]
221        [-mmsa] [-mno-msa]
222        [-mxpa] [-mno-xpa]
223        [-mmt] [-mno-mt]
224        [-mmcu] [-mno-mcu]
225        [-mcrc] [-mno-crc]
226        [-mginv] [-mno-ginv]
227        [-mloongson-mmi] [-mno-loongson-mmi]
228        [-mloongson-cam] [-mno-loongson-cam]
229        [-mloongson-ext] [-mno-loongson-ext]
230        [-mloongson-ext2] [-mno-loongson-ext2]
231        [-minsn32] [-mno-insn32]
232        [-mfix7000] [-mno-fix7000]
233        [-mfix-rm7000] [-mno-fix-rm7000]
234        [-mfix-vr4120] [-mno-fix-vr4120]
235        [-mfix-vr4130] [-mno-fix-vr4130]
236        [-mfix-r5900] [-mno-fix-r5900]
237        [-mdebug] [-no-mdebug]
238        [-mpdr] [-mno-pdr]
239
240     _Target MMIX options:_
241        [-fixed-special-register-names] [-globalize-symbols]
242        [-gnu-syntax] [-relax] [-no-predefined-symbols]
243        [-no-expand] [-no-merge-gregs] [-x]
244        [-linker-allocated-gregs]
245
246     _Target Nios II options:_
247        [-relax-all] [-relax-section] [-no-relax]
248        [-EB] [-EL]
249
250     _Target NDS32 options:_
251         [-EL] [-EB] [-O] [-Os] [-mcpu=CPU]
252         [-misa=ISA] [-mabi=ABI] [-mall-ext]
253         [-m[no-]16-bit]  [-m[no-]perf-ext] [-m[no-]perf2-ext]
254         [-m[no-]string-ext] [-m[no-]dsp-ext] [-m[no-]mac] [-m[no-]div]
255         [-m[no-]audio-isa-ext] [-m[no-]fpu-sp-ext] [-m[no-]fpu-dp-ext]
256         [-m[no-]fpu-fma] [-mfpu-freg=FREG] [-mreduced-regs]
257         [-mfull-regs] [-m[no-]dx-regs] [-mpic] [-mno-relax]
258         [-mb2bb]
259
260     _Target PDP11 options:_
261        [-mpic|-mno-pic] [-mall] [-mno-extensions]
262        [-mEXTENSION|-mno-EXTENSION]
263        [-mCPU] [-mMACHINE]
264
265     _Target picoJava options:_
266        [-mb|-me]
267
268     _Target PowerPC options:_
269        [-a32|-a64]
270        [-mpwrx|-mpwr2|-mpwr|-m601|-mppc|-mppc32|-m603|-m604|-m403|-m405|
271         -m440|-m464|-m476|-m7400|-m7410|-m7450|-m7455|-m750cl|-mgekko|
272         -mbroadway|-mppc64|-m620|-me500|-e500x2|-me500mc|-me500mc64|-me5500|
273         -me6500|-mppc64bridge|-mbooke|-mpower4|-mpwr4|-mpower5|-mpwr5|-mpwr5x|
274         -mpower6|-mpwr6|-mpower7|-mpwr7|-mpower8|-mpwr8|-mpower9|-mpwr9-ma2|
275         -mcell|-mspe|-mspe2|-mtitan|-me300|-mcom]
276        [-many] [-maltivec|-mvsx|-mhtm|-mvle]
277        [-mregnames|-mno-regnames]
278        [-mrelocatable|-mrelocatable-lib|-K PIC] [-memb]
279        [-mlittle|-mlittle-endian|-le|-mbig|-mbig-endian|-be]
280        [-msolaris|-mno-solaris]
281        [-nops=COUNT]
282
283     _Target PRU options:_
284        [-link-relax]
285        [-mnolink-relax]
286        [-mno-warn-regname-label]
287
288     _Target RISC-V options:_
289        [-fpic|-fPIC|-fno-pic]
290        [-march=ISA]
291        [-mabi=ABI]
292        [-mlittle-endian|-mbig-endian]
293
294     _Target RL78 options:_
295        [-mg10]
296        [-m32bit-doubles|-m64bit-doubles]
297
298     _Target RX options:_
299        [-mlittle-endian|-mbig-endian]
300        [-m32bit-doubles|-m64bit-doubles]
301        [-muse-conventional-section-names]
302        [-msmall-data-limit]
303        [-mpid]
304        [-mrelax]
305        [-mint-register=NUMBER]
306        [-mgcc-abi|-mrx-abi]
307
308     _Target s390 options:_
309        [-m31|-m64] [-mesa|-mzarch] [-march=CPU]
310        [-mregnames|-mno-regnames]
311        [-mwarn-areg-zero]
312
313     _Target SCORE options:_
314        [-EB][-EL][-FIXDD][-NWARN]
315        [-SCORE5][-SCORE5U][-SCORE7][-SCORE3]
316        [-march=score7][-march=score3]
317        [-USE_R1][-KPIC][-O0][-G NUM][-V]
318
319     _Target SPARC options:_
320        [-Av6|-Av7|-Av8|-Aleon|-Asparclet|-Asparclite
321         -Av8plus|-Av8plusa|-Av8plusb|-Av8plusc|-Av8plusd
322         -Av8plusv|-Av8plusm|-Av9|-Av9a|-Av9b|-Av9c
323         -Av9d|-Av9e|-Av9v|-Av9m|-Asparc|-Asparcvis
324         -Asparcvis2|-Asparcfmaf|-Asparcima|-Asparcvis3
325         -Asparcvisr|-Asparc5]
326        [-xarch=v8plus|-xarch=v8plusa]|-xarch=v8plusb|-xarch=v8plusc
327         -xarch=v8plusd|-xarch=v8plusv|-xarch=v8plusm|-xarch=v9
328         -xarch=v9a|-xarch=v9b|-xarch=v9c|-xarch=v9d|-xarch=v9e
329         -xarch=v9v|-xarch=v9m|-xarch=sparc|-xarch=sparcvis
330         -xarch=sparcvis2|-xarch=sparcfmaf|-xarch=sparcima
331         -xarch=sparcvis3|-xarch=sparcvisr|-xarch=sparc5
332         -bump]
333        [-32|-64]
334        [-enforce-aligned-data][-dcti-couples-detect]
335
336     _Target TIC54X options:_
337      [-mcpu=54[123589]|-mcpu=54[56]lp] [-mfar-mode|-mf]
338      [-merrors-to-file <FILENAME>|-me <FILENAME>]
339
340     _Target TIC6X options:_
341        [-march=ARCH] [-mbig-endian|-mlittle-endian]
342        [-mdsbt|-mno-dsbt] [-mpid=no|-mpid=near|-mpid=far]
343        [-mpic|-mno-pic]
344
345     _Target TILE-Gx options:_
346        [-m32|-m64][-EB][-EL]
347
348     _Target Visium options:_
349        [-mtune=ARCH]
350
351     _Target Xtensa options:_
352      [-[no-]text-section-literals] [-[no-]auto-litpools]
353      [-[no-]absolute-literals]
354      [-[no-]target-align] [-[no-]longcalls]
355      [-[no-]transform]
356      [-rename-section OLDNAME=NEWNAME]
357      [-[no-]trampolines]
358      [-abi-windowed|-abi-call0]
359
360     _Target Z80 options:_
361       [-march=CPU[-EXT][+EXT]]
362       [-local-prefix=PREFIX]
363       [-colonless]
364       [-sdcc]
365       [-fp-s=FORMAT]
366       [-fp-d=FORMAT]
367
368
369'@FILE'
370     Read command-line options from FILE.  The options read are inserted
371     in place of the original @FILE option.  If FILE does not exist, or
372     cannot be read, then the option will be treated literally, and not
373     removed.
374
375     Options in FILE are separated by whitespace.  A whitespace
376     character may be included in an option by surrounding the entire
377     option in either single or double quotes.  Any character (including
378     a backslash) may be included by prefixing the character to be
379     included with a backslash.  The FILE may itself contain additional
380     @FILE options; any such options will be processed recursively.
381
382'-a[cdghlmns]'
383     Turn on listings, in any of a variety of ways:
384
385     '-ac'
386          omit false conditionals
387
388     '-ad'
389          omit debugging directives
390
391     '-ag'
392          include general information, like as version and options
393          passed
394
395     '-ah'
396          include high-level source
397
398     '-al'
399          include assembly
400
401     '-am'
402          include macro expansions
403
404     '-an'
405          omit forms processing
406
407     '-as'
408          include symbols
409
410     '=file'
411          set the name of the listing file
412
413     You may combine these options; for example, use '-aln' for assembly
414     listing without forms processing.  The '=file' option, if used,
415     must be the last one.  By itself, '-a' defaults to '-ahls'.
416
417'--alternate'
418     Begin in alternate macro mode.  *Note '.altmacro': Altmacro.
419
420'--compress-debug-sections'
421     Compress DWARF debug sections using zlib with SHF_COMPRESSED from
422     the ELF ABI. The resulting object file may not be compatible with
423     older linkers and object file utilities.  Note if compression would
424     make a given section _larger_ then it is not compressed.
425
426'--compress-debug-sections=none'
427'--compress-debug-sections=zlib'
428'--compress-debug-sections=zlib-gnu'
429'--compress-debug-sections=zlib-gabi'
430     These options control how DWARF debug sections are compressed.
431     '--compress-debug-sections=none' is equivalent to
432     '--nocompress-debug-sections'.  '--compress-debug-sections=zlib'
433     and '--compress-debug-sections=zlib-gabi' are equivalent to
434     '--compress-debug-sections'.  '--compress-debug-sections=zlib-gnu'
435     compresses DWARF debug sections using zlib.  The debug sections are
436     renamed to begin with '.zdebug'.  Note if compression would make a
437     given section _larger_ then it is not compressed nor renamed.
438
439'--nocompress-debug-sections'
440     Do not compress DWARF debug sections.  This is usually the default
441     for all targets except the x86/x86_64, but a configure time option
442     can be used to override this.
443
444'-D'
445     Ignored.  This option is accepted for script compatibility with
446     calls to other assemblers.
447
448'--debug-prefix-map OLD=NEW'
449     When assembling files in directory 'OLD', record debugging
450     information describing them as in 'NEW' instead.
451
452'--defsym SYM=VALUE'
453     Define the symbol SYM to be VALUE before assembling the input file.
454     VALUE must be an integer constant.  As in C, a leading '0x'
455     indicates a hexadecimal value, and a leading '0' indicates an octal
456     value.  The value of the symbol can be overridden inside a source
457     file via the use of a '.set' pseudo-op.
458
459'-f'
460     "fast"--skip whitespace and comment preprocessing (assume source is
461     compiler output).
462
463'-g'
464'--gen-debug'
465     Generate debugging information for each assembler source line using
466     whichever debug format is preferred by the target.  This currently
467     means either STABS, ECOFF or DWARF2.  When the debug format is
468     DWARF then a '.debug_info' and '.debug_line' section is only
469     emitted when the assembly file doesn't generate one itself.
470
471'--gstabs'
472     Generate stabs debugging information for each assembler line.  This
473     may help debugging assembler code, if the debugger can handle it.
474
475'--gstabs+'
476     Generate stabs debugging information for each assembler line, with
477     GNU extensions that probably only gdb can handle, and that could
478     make other debuggers crash or refuse to read your program.  This
479     may help debugging assembler code.  Currently the only GNU
480     extension is the location of the current working directory at
481     assembling time.
482
483'--gdwarf-2'
484     Generate DWARF2 debugging information for each assembler line.
485     This may help debugging assembler code, if the debugger can handle
486     it.  Note--this option is only supported by some targets, not all
487     of them.
488
489'--gdwarf-3'
490     This option is the same as the '--gdwarf-2' option, except that it
491     allows for the possibility of the generation of extra debug
492     information as per version 3 of the DWARF specification.  Note -
493     enabling this option does not guarantee the generation of any extra
494     information, the choice to do so is on a per target basis.
495
496'--gdwarf-4'
497     This option is the same as the '--gdwarf-2' option, except that it
498     allows for the possibility of the generation of extra debug
499     information as per version 4 of the DWARF specification.  Note -
500     enabling this option does not guarantee the generation of any extra
501     information, the choice to do so is on a per target basis.
502
503'--gdwarf-5'
504     This option is the same as the '--gdwarf-2' option, except that it
505     allows for the possibility of the generation of extra debug
506     information as per version 5 of the DWARF specification.  Note -
507     enabling this option does not guarantee the generation of any extra
508     information, the choice to do so is on a per target basis.
509
510'--gdwarf-sections'
511     Instead of creating a .debug_line section, create a series of
512     .debug_line.FOO sections where FOO is the name of the corresponding
513     code section.  For example a code section called .TEXT.FUNC will
514     have its dwarf line number information placed into a section called
515     .DEBUG_LINE.TEXT.FUNC.  If the code section is just called .TEXT
516     then debug line section will still be called just .DEBUG_LINE
517     without any suffix.
518
519'--gdwarf-cie-version=VERSION'
520     Control which version of DWARF Common Information Entries (CIEs)
521     are produced.  When this flag is not specificed the default is
522     version 1, though some targets can modify this default.  Other
523     possible values for VERSION are 3 or 4.
524
525'--size-check=error'
526'--size-check=warning'
527     Issue an error or warning for invalid ELF .size directive.
528
529'--elf-stt-common=no'
530'--elf-stt-common=yes'
531     These options control whether the ELF assembler should generate
532     common symbols with the 'STT_COMMON' type.  The default can be
533     controlled by a configure option '--enable-elf-stt-common'.
534
535'--generate-missing-build-notes=yes'
536'--generate-missing-build-notes=no'
537     These options control whether the ELF assembler should generate GNU
538     Build attribute notes if none are present in the input sources.
539     The default can be controlled by the
540     '--enable-generate-build-notes' configure option.
541
542'--help'
543     Print a summary of the command-line options and exit.
544
545'--target-help'
546     Print a summary of all target specific options and exit.
547
548'-I DIR'
549     Add directory DIR to the search list for '.include' directives.
550
551'-J'
552     Don't warn about signed overflow.
553
554'-K'
555     Issue warnings when difference tables altered for long
556     displacements.
557
558'-L'
559'--keep-locals'
560     Keep (in the symbol table) local symbols.  These symbols start with
561     system-specific local label prefixes, typically '.L' for ELF
562     systems or 'L' for traditional a.out systems.  *Note Symbol
563     Names::.
564
565'--listing-lhs-width=NUMBER'
566     Set the maximum width, in words, of the output data column for an
567     assembler listing to NUMBER.
568
569'--listing-lhs-width2=NUMBER'
570     Set the maximum width, in words, of the output data column for
571     continuation lines in an assembler listing to NUMBER.
572
573'--listing-rhs-width=NUMBER'
574     Set the maximum width of an input source line, as displayed in a
575     listing, to NUMBER bytes.
576
577'--listing-cont-lines=NUMBER'
578     Set the maximum number of lines printed in a listing for a single
579     line of input to NUMBER + 1.
580
581'--no-pad-sections'
582     Stop the assembler for padding the ends of output sections to the
583     alignment of that section.  The default is to pad the sections, but
584     this can waste space which might be needed on targets which have
585     tight memory constraints.
586
587'-o OBJFILE'
588     Name the object-file output from 'as' OBJFILE.
589
590'-R'
591     Fold the data section into the text section.
592
593'--sectname-subst'
594     Honor substitution sequences in section names.  *Note '.section
595     NAME': Section Name Substitutions.
596
597'--statistics'
598     Print the maximum space (in bytes) and total time (in seconds) used
599     by assembly.
600
601'--strip-local-absolute'
602     Remove local absolute symbols from the outgoing symbol table.
603
604'-v'
605'-version'
606     Print the 'as' version.
607
608'--version'
609     Print the 'as' version and exit.
610
611'-W'
612'--no-warn'
613     Suppress warning messages.
614
615'--fatal-warnings'
616     Treat warnings as errors.
617
618'--warn'
619     Don't suppress warning messages or treat them as errors.
620
621'-w'
622     Ignored.
623
624'-x'
625     Ignored.
626
627'-Z'
628     Generate an object file even after errors.
629
630'-- | FILES ...'
631     Standard input, or source files to assemble.
632
633   *Note AArch64 Options::, for the options available when as is
634configured for the 64-bit mode of the ARM Architecture (AArch64).
635
636   *Note Alpha Options::, for the options available when as is
637configured for an Alpha processor.
638
639   The following options are available when as is configured for an ARC
640processor.
641
642'-mcpu=CPU'
643     This option selects the core processor variant.
644'-EB | -EL'
645     Select either big-endian (-EB) or little-endian (-EL) output.
646'-mcode-density'
647     Enable Code Density extension instructions.
648
649   The following options are available when as is configured for the ARM
650processor family.
651
652'-mcpu=PROCESSOR[+EXTENSION...]'
653     Specify which ARM processor variant is the target.
654'-march=ARCHITECTURE[+EXTENSION...]'
655     Specify which ARM architecture variant is used by the target.
656'-mfpu=FLOATING-POINT-FORMAT'
657     Select which Floating Point architecture is the target.
658'-mfloat-abi=ABI'
659     Select which floating point ABI is in use.
660'-mthumb'
661     Enable Thumb only instruction decoding.
662'-mapcs-32 | -mapcs-26 | -mapcs-float | -mapcs-reentrant'
663     Select which procedure calling convention is in use.
664'-EB | -EL'
665     Select either big-endian (-EB) or little-endian (-EL) output.
666'-mthumb-interwork'
667     Specify that the code has been generated with interworking between
668     Thumb and ARM code in mind.
669'-mccs'
670     Turns on CodeComposer Studio assembly syntax compatibility mode.
671'-k'
672     Specify that PIC code has been generated.
673
674   *Note Blackfin Options::, for the options available when as is
675configured for the Blackfin processor family.
676
677   *Note BPF Options::, for the options available when as is configured
678for the Linux kernel BPF processor family.
679
680   See the info pages for documentation of the CRIS-specific options.
681
682   *Note C-SKY Options::, for the options available when as is
683configured for the C-SKY processor family.
684
685   The following options are available when as is configured for a D10V
686processor.
687'-O'
688     Optimize output by parallelizing instructions.
689
690   The following options are available when as is configured for a D30V
691processor.
692'-O'
693     Optimize output by parallelizing instructions.
694
695'-n'
696     Warn when nops are generated.
697
698'-N'
699     Warn when a nop after a 32-bit multiply instruction is generated.
700
701   The following options are available when as is configured for the
702Adapteva EPIPHANY series.
703
704   *Note Epiphany Options::, for the options available when as is
705configured for an Epiphany processor.
706
707   *Note i386-Options::, for the options available when as is configured
708for an i386 processor.
709
710   The following options are available when as is configured for the
711Ubicom IP2K series.
712
713'-mip2022ext'
714     Specifies that the extended IP2022 instructions are allowed.
715
716'-mip2022'
717     Restores the default behaviour, which restricts the permitted
718     instructions to just the basic IP2022 ones.
719
720   The following options are available when as is configured for the
721Renesas M32C and M16C processors.
722
723'-m32c'
724     Assemble M32C instructions.
725
726'-m16c'
727     Assemble M16C instructions (the default).
728
729'-relax'
730     Enable support for link-time relaxations.
731
732'-h-tick-hex'
733     Support H'00 style hex constants in addition to 0x00 style.
734
735   The following options are available when as is configured for the
736Renesas M32R (formerly Mitsubishi M32R) series.
737
738'--m32rx'
739     Specify which processor in the M32R family is the target.  The
740     default is normally the M32R, but this option changes it to the
741     M32RX.
742
743'--warn-explicit-parallel-conflicts or --Wp'
744     Produce warning messages when questionable parallel constructs are
745     encountered.
746
747'--no-warn-explicit-parallel-conflicts or --Wnp'
748     Do not produce warning messages when questionable parallel
749     constructs are encountered.
750
751   The following options are available when as is configured for the
752Motorola 68000 series.
753
754'-l'
755     Shorten references to undefined symbols, to one word instead of
756     two.
757
758'-m68000 | -m68008 | -m68010 | -m68020 | -m68030'
759'| -m68040 | -m68060 | -m68302 | -m68331 | -m68332'
760'| -m68333 | -m68340 | -mcpu32 | -m5200'
761     Specify what processor in the 68000 family is the target.  The
762     default is normally the 68020, but this can be changed at
763     configuration time.
764
765'-m68881 | -m68882 | -mno-68881 | -mno-68882'
766     The target machine does (or does not) have a floating-point
767     coprocessor.  The default is to assume a coprocessor for 68020,
768     68030, and cpu32.  Although the basic 68000 is not compatible with
769     the 68881, a combination of the two can be specified, since it's
770     possible to do emulation of the coprocessor instructions with the
771     main processor.
772
773'-m68851 | -mno-68851'
774     The target machine does (or does not) have a memory-management unit
775     coprocessor.  The default is to assume an MMU for 68020 and up.
776
777   *Note Nios II Options::, for the options available when as is
778configured for an Altera Nios II processor.
779
780   For details about the PDP-11 machine dependent features options, see
781*note PDP-11-Options::.
782
783'-mpic | -mno-pic'
784     Generate position-independent (or position-dependent) code.  The
785     default is '-mpic'.
786
787'-mall'
788'-mall-extensions'
789     Enable all instruction set extensions.  This is the default.
790
791'-mno-extensions'
792     Disable all instruction set extensions.
793
794'-mEXTENSION | -mno-EXTENSION'
795     Enable (or disable) a particular instruction set extension.
796
797'-mCPU'
798     Enable the instruction set extensions supported by a particular
799     CPU, and disable all other extensions.
800
801'-mMACHINE'
802     Enable the instruction set extensions supported by a particular
803     machine model, and disable all other extensions.
804
805   The following options are available when as is configured for a
806picoJava processor.
807
808'-mb'
809     Generate "big endian" format output.
810
811'-ml'
812     Generate "little endian" format output.
813
814   *Note PRU Options::, for the options available when as is configured
815for a PRU processor.
816
817   The following options are available when as is configured for the
818Motorola 68HC11 or 68HC12 series.
819
820'-m68hc11 | -m68hc12 | -m68hcs12 | -mm9s12x | -mm9s12xg'
821     Specify what processor is the target.  The default is defined by
822     the configuration option when building the assembler.
823
824'--xgate-ramoffset'
825     Instruct the linker to offset RAM addresses from S12X address space
826     into XGATE address space.
827
828'-mshort'
829     Specify to use the 16-bit integer ABI.
830
831'-mlong'
832     Specify to use the 32-bit integer ABI.
833
834'-mshort-double'
835     Specify to use the 32-bit double ABI.
836
837'-mlong-double'
838     Specify to use the 64-bit double ABI.
839
840'--force-long-branches'
841     Relative branches are turned into absolute ones.  This concerns
842     conditional branches, unconditional branches and branches to a sub
843     routine.
844
845'-S | --short-branches'
846     Do not turn relative branches into absolute ones when the offset is
847     out of range.
848
849'--strict-direct-mode'
850     Do not turn the direct addressing mode into extended addressing
851     mode when the instruction does not support direct addressing mode.
852
853'--print-insn-syntax'
854     Print the syntax of instruction in case of error.
855
856'--print-opcodes'
857     Print the list of instructions with syntax and then exit.
858
859'--generate-example'
860     Print an example of instruction for each possible instruction and
861     then exit.  This option is only useful for testing 'as'.
862
863   The following options are available when 'as' is configured for the
864SPARC architecture:
865
866'-Av6 | -Av7 | -Av8 | -Asparclet | -Asparclite'
867'-Av8plus | -Av8plusa | -Av9 | -Av9a'
868     Explicitly select a variant of the SPARC architecture.
869
870     '-Av8plus' and '-Av8plusa' select a 32 bit environment.  '-Av9' and
871     '-Av9a' select a 64 bit environment.
872
873     '-Av8plusa' and '-Av9a' enable the SPARC V9 instruction set with
874     UltraSPARC extensions.
875
876'-xarch=v8plus | -xarch=v8plusa'
877     For compatibility with the Solaris v9 assembler.  These options are
878     equivalent to -Av8plus and -Av8plusa, respectively.
879
880'-bump'
881     Warn when the assembler switches to another architecture.
882
883   The following options are available when as is configured for the
884'c54x architecture.
885
886'-mfar-mode'
887     Enable extended addressing mode.  All addresses and relocations
888     will assume extended addressing (usually 23 bits).
889'-mcpu=CPU_VERSION'
890     Sets the CPU version being compiled for.
891'-merrors-to-file FILENAME'
892     Redirect error output to a file, for broken systems which don't
893     support such behaviour in the shell.
894
895   The following options are available when as is configured for a MIPS
896processor.
897
898'-G NUM'
899     This option sets the largest size of an object that can be
900     referenced implicitly with the 'gp' register.  It is only accepted
901     for targets that use ECOFF format, such as a DECstation running
902     Ultrix.  The default value is 8.
903
904'-EB'
905     Generate "big endian" format output.
906
907'-EL'
908     Generate "little endian" format output.
909
910'-mips1'
911'-mips2'
912'-mips3'
913'-mips4'
914'-mips5'
915'-mips32'
916'-mips32r2'
917'-mips32r3'
918'-mips32r5'
919'-mips32r6'
920'-mips64'
921'-mips64r2'
922'-mips64r3'
923'-mips64r5'
924'-mips64r6'
925     Generate code for a particular MIPS Instruction Set Architecture
926     level.  '-mips1' is an alias for '-march=r3000', '-mips2' is an
927     alias for '-march=r6000', '-mips3' is an alias for '-march=r4000'
928     and '-mips4' is an alias for '-march=r8000'.  '-mips5', '-mips32',
929     '-mips32r2', '-mips32r3', '-mips32r5', '-mips32r6', '-mips64',
930     '-mips64r2', '-mips64r3', '-mips64r5', and '-mips64r6' correspond
931     to generic MIPS V, MIPS32, MIPS32 Release 2, MIPS32 Release 3,
932     MIPS32 Release 5, MIPS32 Release 6, MIPS64, MIPS64 Release 2,
933     MIPS64 Release 3, MIPS64 Release 5, and MIPS64 Release 6 ISA
934     processors, respectively.
935
936'-march=CPU'
937     Generate code for a particular MIPS CPU.
938
939'-mtune=CPU'
940     Schedule and tune for a particular MIPS CPU.
941
942'-mfix7000'
943'-mno-fix7000'
944     Cause nops to be inserted if the read of the destination register
945     of an mfhi or mflo instruction occurs in the following two
946     instructions.
947
948'-mfix-rm7000'
949'-mno-fix-rm7000'
950     Cause nops to be inserted if a dmult or dmultu instruction is
951     followed by a load instruction.
952
953'-mfix-r5900'
954'-mno-fix-r5900'
955     Do not attempt to schedule the preceding instruction into the delay
956     slot of a branch instruction placed at the end of a short loop of
957     six instructions or fewer and always schedule a 'nop' instruction
958     there instead.  The short loop bug under certain conditions causes
959     loops to execute only once or twice, due to a hardware bug in the
960     R5900 chip.
961
962'-mdebug'
963'-no-mdebug'
964     Cause stabs-style debugging output to go into an ECOFF-style
965     .mdebug section instead of the standard ELF .stabs sections.
966
967'-mpdr'
968'-mno-pdr'
969     Control generation of '.pdr' sections.
970
971'-mgp32'
972'-mfp32'
973     The register sizes are normally inferred from the ISA and ABI, but
974     these flags force a certain group of registers to be treated as 32
975     bits wide at all times.  '-mgp32' controls the size of
976     general-purpose registers and '-mfp32' controls the size of
977     floating-point registers.
978
979'-mgp64'
980'-mfp64'
981     The register sizes are normally inferred from the ISA and ABI, but
982     these flags force a certain group of registers to be treated as 64
983     bits wide at all times.  '-mgp64' controls the size of
984     general-purpose registers and '-mfp64' controls the size of
985     floating-point registers.
986
987'-mfpxx'
988     The register sizes are normally inferred from the ISA and ABI, but
989     using this flag in combination with '-mabi=32' enables an ABI
990     variant which will operate correctly with floating-point registers
991     which are 32 or 64 bits wide.
992
993'-modd-spreg'
994'-mno-odd-spreg'
995     Enable use of floating-point operations on odd-numbered
996     single-precision registers when supported by the ISA. '-mfpxx'
997     implies '-mno-odd-spreg', otherwise the default is '-modd-spreg'.
998
999'-mips16'
1000'-no-mips16'
1001     Generate code for the MIPS 16 processor.  This is equivalent to
1002     putting '.module mips16' at the start of the assembly file.
1003     '-no-mips16' turns off this option.
1004
1005'-mmips16e2'
1006'-mno-mips16e2'
1007     Enable the use of MIPS16e2 instructions in MIPS16 mode.  This is
1008     equivalent to putting '.module mips16e2' at the start of the
1009     assembly file.  '-mno-mips16e2' turns off this option.
1010
1011'-mmicromips'
1012'-mno-micromips'
1013     Generate code for the microMIPS processor.  This is equivalent to
1014     putting '.module micromips' at the start of the assembly file.
1015     '-mno-micromips' turns off this option.  This is equivalent to
1016     putting '.module nomicromips' at the start of the assembly file.
1017
1018'-msmartmips'
1019'-mno-smartmips'
1020     Enables the SmartMIPS extension to the MIPS32 instruction set.
1021     This is equivalent to putting '.module smartmips' at the start of
1022     the assembly file.  '-mno-smartmips' turns off this option.
1023
1024'-mips3d'
1025'-no-mips3d'
1026     Generate code for the MIPS-3D Application Specific Extension.  This
1027     tells the assembler to accept MIPS-3D instructions.  '-no-mips3d'
1028     turns off this option.
1029
1030'-mdmx'
1031'-no-mdmx'
1032     Generate code for the MDMX Application Specific Extension.  This
1033     tells the assembler to accept MDMX instructions.  '-no-mdmx' turns
1034     off this option.
1035
1036'-mdsp'
1037'-mno-dsp'
1038     Generate code for the DSP Release 1 Application Specific Extension.
1039     This tells the assembler to accept DSP Release 1 instructions.
1040     '-mno-dsp' turns off this option.
1041
1042'-mdspr2'
1043'-mno-dspr2'
1044     Generate code for the DSP Release 2 Application Specific Extension.
1045     This option implies '-mdsp'.  This tells the assembler to accept
1046     DSP Release 2 instructions.  '-mno-dspr2' turns off this option.
1047
1048'-mdspr3'
1049'-mno-dspr3'
1050     Generate code for the DSP Release 3 Application Specific Extension.
1051     This option implies '-mdsp' and '-mdspr2'.  This tells the
1052     assembler to accept DSP Release 3 instructions.  '-mno-dspr3' turns
1053     off this option.
1054
1055'-mmsa'
1056'-mno-msa'
1057     Generate code for the MIPS SIMD Architecture Extension.  This tells
1058     the assembler to accept MSA instructions.  '-mno-msa' turns off
1059     this option.
1060
1061'-mxpa'
1062'-mno-xpa'
1063     Generate code for the MIPS eXtended Physical Address (XPA)
1064     Extension.  This tells the assembler to accept XPA instructions.
1065     '-mno-xpa' turns off this option.
1066
1067'-mmt'
1068'-mno-mt'
1069     Generate code for the MT Application Specific Extension.  This
1070     tells the assembler to accept MT instructions.  '-mno-mt' turns off
1071     this option.
1072
1073'-mmcu'
1074'-mno-mcu'
1075     Generate code for the MCU Application Specific Extension.  This
1076     tells the assembler to accept MCU instructions.  '-mno-mcu' turns
1077     off this option.
1078
1079'-mcrc'
1080'-mno-crc'
1081     Generate code for the MIPS cyclic redundancy check (CRC)
1082     Application Specific Extension.  This tells the assembler to accept
1083     CRC instructions.  '-mno-crc' turns off this option.
1084
1085'-mginv'
1086'-mno-ginv'
1087     Generate code for the Global INValidate (GINV) Application Specific
1088     Extension.  This tells the assembler to accept GINV instructions.
1089     '-mno-ginv' turns off this option.
1090
1091'-mloongson-mmi'
1092'-mno-loongson-mmi'
1093     Generate code for the Loongson MultiMedia extensions Instructions
1094     (MMI) Application Specific Extension.  This tells the assembler to
1095     accept MMI instructions.  '-mno-loongson-mmi' turns off this
1096     option.
1097
1098'-mloongson-cam'
1099'-mno-loongson-cam'
1100     Generate code for the Loongson Content Address Memory (CAM)
1101     instructions.  This tells the assembler to accept Loongson CAM
1102     instructions.  '-mno-loongson-cam' turns off this option.
1103
1104'-mloongson-ext'
1105'-mno-loongson-ext'
1106     Generate code for the Loongson EXTensions (EXT) instructions.  This
1107     tells the assembler to accept Loongson EXT instructions.
1108     '-mno-loongson-ext' turns off this option.
1109
1110'-mloongson-ext2'
1111'-mno-loongson-ext2'
1112     Generate code for the Loongson EXTensions R2 (EXT2) instructions.
1113     This option implies '-mloongson-ext'.  This tells the assembler to
1114     accept Loongson EXT2 instructions.  '-mno-loongson-ext2' turns off
1115     this option.
1116
1117'-minsn32'
1118'-mno-insn32'
1119     Only use 32-bit instruction encodings when generating code for the
1120     microMIPS processor.  This option inhibits the use of any 16-bit
1121     instructions.  This is equivalent to putting '.set insn32' at the
1122     start of the assembly file.  '-mno-insn32' turns off this option.
1123     This is equivalent to putting '.set noinsn32' at the start of the
1124     assembly file.  By default '-mno-insn32' is selected, allowing all
1125     instructions to be used.
1126
1127'--construct-floats'
1128'--no-construct-floats'
1129     The '--no-construct-floats' option disables the construction of
1130     double width floating point constants by loading the two halves of
1131     the value into the two single width floating point registers that
1132     make up the double width register.  By default '--construct-floats'
1133     is selected, allowing construction of these floating point
1134     constants.
1135
1136'--relax-branch'
1137'--no-relax-branch'
1138     The '--relax-branch' option enables the relaxation of out-of-range
1139     branches.  By default '--no-relax-branch' is selected, causing any
1140     out-of-range branches to produce an error.
1141
1142'-mignore-branch-isa'
1143'-mno-ignore-branch-isa'
1144     Ignore branch checks for invalid transitions between ISA modes.
1145     The semantics of branches does not provide for an ISA mode switch,
1146     so in most cases the ISA mode a branch has been encoded for has to
1147     be the same as the ISA mode of the branch's target label.
1148     Therefore GAS has checks implemented that verify in branch assembly
1149     that the two ISA modes match.  '-mignore-branch-isa' disables these
1150     checks.  By default '-mno-ignore-branch-isa' is selected, causing
1151     any invalid branch requiring a transition between ISA modes to
1152     produce an error.
1153
1154'-mnan=ENCODING'
1155     Select between the IEEE 754-2008 ('-mnan=2008') or the legacy
1156     ('-mnan=legacy') NaN encoding format.  The latter is the default.
1157
1158'--emulation=NAME'
1159     This option was formerly used to switch between ELF and ECOFF
1160     output on targets like IRIX 5 that supported both.  MIPS ECOFF
1161     support was removed in GAS 2.24, so the option now serves little
1162     purpose.  It is retained for backwards compatibility.
1163
1164     The available configuration names are: 'mipself', 'mipslelf' and
1165     'mipsbelf'.  Choosing 'mipself' now has no effect, since the output
1166     is always ELF. 'mipslelf' and 'mipsbelf' select little- and
1167     big-endian output respectively, but '-EL' and '-EB' are now the
1168     preferred options instead.
1169
1170'-nocpp'
1171     'as' ignores this option.  It is accepted for compatibility with
1172     the native tools.
1173
1174'--trap'
1175'--no-trap'
1176'--break'
1177'--no-break'
1178     Control how to deal with multiplication overflow and division by
1179     zero.  '--trap' or '--no-break' (which are synonyms) take a trap
1180     exception (and only work for Instruction Set Architecture level 2
1181     and higher); '--break' or '--no-trap' (also synonyms, and the
1182     default) take a break exception.
1183
1184'-n'
1185     When this option is used, 'as' will issue a warning every time it
1186     generates a nop instruction from a macro.
1187
1188   The following options are available when as is configured for an
1189MCore processor.
1190
1191'-jsri2bsr'
1192'-nojsri2bsr'
1193     Enable or disable the JSRI to BSR transformation.  By default this
1194     is enabled.  The command-line option '-nojsri2bsr' can be used to
1195     disable it.
1196
1197'-sifilter'
1198'-nosifilter'
1199     Enable or disable the silicon filter behaviour.  By default this is
1200     disabled.  The default can be overridden by the '-sifilter'
1201     command-line option.
1202
1203'-relax'
1204     Alter jump instructions for long displacements.
1205
1206'-mcpu=[210|340]'
1207     Select the cpu type on the target hardware.  This controls which
1208     instructions can be assembled.
1209
1210'-EB'
1211     Assemble for a big endian target.
1212
1213'-EL'
1214     Assemble for a little endian target.
1215
1216   *Note Meta Options::, for the options available when as is configured
1217for a Meta processor.
1218
1219   See the info pages for documentation of the MMIX-specific options.
1220
1221   *Note NDS32 Options::, for the options available when as is
1222configured for a NDS32 processor.
1223
1224   *Note PowerPC-Opts::, for the options available when as is configured
1225for a PowerPC processor.
1226
1227   *Note RISC-V-Options::, for the options available when as is
1228configured for a RISC-V processor.
1229
1230   See the info pages for documentation of the RX-specific options.
1231
1232   The following options are available when as is configured for the
1233s390 processor family.
1234
1235'-m31'
1236'-m64'
1237     Select the word size, either 31/32 bits or 64 bits.
1238'-mesa'
1239'-mzarch'
1240     Select the architecture mode, either the Enterprise System
1241     Architecture (esa) or the z/Architecture mode (zarch).
1242'-march=PROCESSOR'
1243     Specify which s390 processor variant is the target, 'g5' (or
1244     'arch3'), 'g6', 'z900' (or 'arch5'), 'z990' (or 'arch6'), 'z9-109',
1245     'z9-ec' (or 'arch7'), 'z10' (or 'arch8'), 'z196' (or 'arch9'),
1246     'zEC12' (or 'arch10'), 'z13' (or 'arch11'), 'z14' (or 'arch12'), or
1247     'z15' (or 'arch13').
1248'-mregnames'
1249'-mno-regnames'
1250     Allow or disallow symbolic names for registers.
1251'-mwarn-areg-zero'
1252     Warn whenever the operand for a base or index register has been
1253     specified but evaluates to zero.
1254
1255   *Note TIC6X Options::, for the options available when as is
1256configured for a TMS320C6000 processor.
1257
1258   *Note TILE-Gx Options::, for the options available when as is
1259configured for a TILE-Gx processor.
1260
1261   *Note Visium Options::, for the options available when as is
1262configured for a Visium processor.
1263
1264   *Note Xtensa Options::, for the options available when as is
1265configured for an Xtensa processor.
1266
1267   *Note Z80 Options::, for the options available when as is configured
1268for an Z80 processor.
1269
1270* Menu:
1271
1272* Manual::                      Structure of this Manual
1273* GNU Assembler::               The GNU Assembler
1274* Object Formats::              Object File Formats
1275* Command Line::                Command Line
1276* Input Files::                 Input Files
1277* Object::                      Output (Object) File
1278* Errors::                      Error and Warning Messages
1279
1280
1281File: as.info,  Node: Manual,  Next: GNU Assembler,  Up: Overview
1282
12831.1 Structure of this Manual
1284============================
1285
1286This manual is intended to describe what you need to know to use GNU
1287'as'.  We cover the syntax expected in source files, including notation
1288for symbols, constants, and expressions; the directives that 'as'
1289understands; and of course how to invoke 'as'.
1290
1291   This manual also describes some of the machine-dependent features of
1292various flavors of the assembler.
1293
1294   On the other hand, this manual is _not_ intended as an introduction
1295to programming in assembly language--let alone programming in general!
1296In a similar vein, we make no attempt to introduce the machine
1297architecture; we do _not_ describe the instruction set, standard
1298mnemonics, registers or addressing modes that are standard to a
1299particular architecture.  You may want to consult the manufacturer's
1300machine architecture manual for this information.
1301
1302
1303File: as.info,  Node: GNU Assembler,  Next: Object Formats,  Prev: Manual,  Up: Overview
1304
13051.2 The GNU Assembler
1306=====================
1307
1308GNU 'as' is really a family of assemblers.  If you use (or have used)
1309the GNU assembler on one architecture, you should find a fairly similar
1310environment when you use it on another architecture.  Each version has
1311much in common with the others, including object file formats, most
1312assembler directives (often called "pseudo-ops") and assembler syntax.
1313
1314   'as' is primarily intended to assemble the output of the GNU C
1315compiler 'gcc' for use by the linker 'ld'.  Nevertheless, we've tried to
1316make 'as' assemble correctly everything that other assemblers for the
1317same machine would assemble.  Any exceptions are documented explicitly
1318(*note Machine Dependencies::).  This doesn't mean 'as' always uses the
1319same syntax as another assembler for the same architecture; for example,
1320we know of several incompatible versions of 680x0 assembly language
1321syntax.
1322
1323   Unlike older assemblers, 'as' is designed to assemble a source
1324program in one pass of the source file.  This has a subtle impact on the
1325'.org' directive (*note '.org': Org.).
1326
1327
1328File: as.info,  Node: Object Formats,  Next: Command Line,  Prev: GNU Assembler,  Up: Overview
1329
13301.3 Object File Formats
1331=======================
1332
1333The GNU assembler can be configured to produce several alternative
1334object file formats.  For the most part, this does not affect how you
1335write assembly language programs; but directives for debugging symbols
1336are typically different in different file formats.  *Note Symbol
1337Attributes: Symbol Attributes.
1338
1339
1340File: as.info,  Node: Command Line,  Next: Input Files,  Prev: Object Formats,  Up: Overview
1341
13421.4 Command Line
1343================
1344
1345After the program name 'as', the command line may contain options and
1346file names.  Options may appear in any order, and may be before, after,
1347or between file names.  The order of file names is significant.
1348
1349   '--' (two hyphens) by itself names the standard input file
1350explicitly, as one of the files for 'as' to assemble.
1351
1352   Except for '--' any command-line argument that begins with a hyphen
1353('-') is an option.  Each option changes the behavior of 'as'.  No
1354option changes the way another option works.  An option is a '-'
1355followed by one or more letters; the case of the letter is important.
1356All options are optional.
1357
1358   Some options expect exactly one file name to follow them.  The file
1359name may either immediately follow the option's letter (compatible with
1360older assemblers) or it may be the next command argument (GNU standard).
1361These two command lines are equivalent:
1362
1363     as -o my-object-file.o mumble.s
1364     as -omy-object-file.o mumble.s
1365
1366
1367File: as.info,  Node: Input Files,  Next: Object,  Prev: Command Line,  Up: Overview
1368
13691.5 Input Files
1370===============
1371
1372We use the phrase "source program", abbreviated "source", to describe
1373the program input to one run of 'as'.  The program may be in one or more
1374files; how the source is partitioned into files doesn't change the
1375meaning of the source.
1376
1377   The source program is a concatenation of the text in all the files,
1378in the order specified.
1379
1380   Each time you run 'as' it assembles exactly one source program.  The
1381source program is made up of one or more files.  (The standard input is
1382also a file.)
1383
1384   You give 'as' a command line that has zero or more input file names.
1385The input files are read (from left file name to right).  A command-line
1386argument (in any position) that has no special meaning is taken to be an
1387input file name.
1388
1389   If you give 'as' no file names it attempts to read one input file
1390from the 'as' standard input, which is normally your terminal.  You may
1391have to type <ctl-D> to tell 'as' there is no more program to assemble.
1392
1393   Use '--' if you need to explicitly name the standard input file in
1394your command line.
1395
1396   If the source is empty, 'as' produces a small, empty object file.
1397
1398Filenames and Line-numbers
1399--------------------------
1400
1401There are two ways of locating a line in the input file (or files) and
1402either may be used in reporting error messages.  One way refers to a
1403line number in a physical file; the other refers to a line number in a
1404"logical" file.  *Note Error and Warning Messages: Errors.
1405
1406   "Physical files" are those files named in the command line given to
1407'as'.
1408
1409   "Logical files" are simply names declared explicitly by assembler
1410directives; they bear no relation to physical files.  Logical file names
1411help error messages reflect the original source file, when 'as' source
1412is itself synthesized from other files.  'as' understands the '#'
1413directives emitted by the 'gcc' preprocessor.  See also *note '.file':
1414File.
1415
1416
1417File: as.info,  Node: Object,  Next: Errors,  Prev: Input Files,  Up: Overview
1418
14191.6 Output (Object) File
1420========================
1421
1422Every time you run 'as' it produces an output file, which is your
1423assembly language program translated into numbers.  This file is the
1424object file.  Its default name is 'a.out'.  You can give it another name
1425by using the '-o' option.  Conventionally, object file names end with
1426'.o'.  The default name is used for historical reasons: older assemblers
1427were capable of assembling self-contained programs directly into a
1428runnable program.  (For some formats, this isn't currently possible, but
1429it can be done for the 'a.out' format.)
1430
1431   The object file is meant for input to the linker 'ld'.  It contains
1432assembled program code, information to help 'ld' integrate the assembled
1433program into a runnable file, and (optionally) symbolic information for
1434the debugger.
1435
1436
1437File: as.info,  Node: Errors,  Prev: Object,  Up: Overview
1438
14391.7 Error and Warning Messages
1440==============================
1441
1442'as' may write warnings and error messages to the standard error file
1443(usually your terminal).  This should not happen when a compiler runs
1444'as' automatically.  Warnings report an assumption made so that 'as'
1445could keep assembling a flawed program; errors report a grave problem
1446that stops the assembly.
1447
1448   Warning messages have the format
1449
1450     file_name:NNN:Warning Message Text
1451
1452(where NNN is a line number).  If both a logical file name (*note
1453'.file': File.) and a logical line number (*note '.line': Line.) have
1454been given then they will be used, otherwise the file name and line
1455number in the current assembler source file will be used.  The message
1456text is intended to be self explanatory (in the grand Unix tradition).
1457
1458   Note the file name must be set via the logical version of the '.file'
1459directive, not the DWARF2 version of the '.file' directive.  For
1460example:
1461
1462       .file 2 "bar.c"
1463          error_assembler_source
1464       .file "foo.c"
1465       .line 30
1466           error_c_source
1467
1468   produces this output:
1469
1470       Assembler messages:
1471       asm.s:2: Error: no such instruction: `error_assembler_source'
1472       foo.c:31: Error: no such instruction: `error_c_source'
1473
1474   Error messages have the format
1475
1476     file_name:NNN:FATAL:Error Message Text
1477
1478   The file name and line number are derived as for warning messages.
1479The actual message text may be rather less explanatory because many of
1480them aren't supposed to happen.
1481
1482
1483File: as.info,  Node: Invoking,  Next: Syntax,  Prev: Overview,  Up: Top
1484
14852 Command-Line Options
1486**********************
1487
1488This chapter describes command-line options available in _all_ versions
1489of the GNU assembler; see *note Machine Dependencies::, for options
1490specific to particular machine architectures.
1491
1492   If you are invoking 'as' via the GNU C compiler, you can use the
1493'-Wa' option to pass arguments through to the assembler.  The assembler
1494arguments must be separated from each other (and the '-Wa') by commas.
1495For example:
1496
1497     gcc -c -g -O -Wa,-alh,-L file.c
1498
1499This passes two options to the assembler: '-alh' (emit a listing to
1500standard output with high-level and assembly source) and '-L' (retain
1501local symbols in the symbol table).
1502
1503   Usually you do not need to use this '-Wa' mechanism, since many
1504compiler command-line options are automatically passed to the assembler
1505by the compiler.  (You can call the GNU compiler driver with the '-v'
1506option to see precisely what options it passes to each compilation pass,
1507including the assembler.)
1508
1509* Menu:
1510
1511* a::             -a[cdghlns] enable listings
1512* alternate::     -alternate enable alternate macro syntax
1513* D::             -D for compatibility
1514* f::             -f to work faster
1515* I::             -I for .include search path
1516* K::             -K for difference tables
1517
1518* L::             -L to retain local symbols
1519* listing::       -listing-XXX to configure listing output
1520* M::		  -M or -mri to assemble in MRI compatibility mode
1521* MD::            -MD for dependency tracking
1522* no-pad-sections:: -no-pad-sections to stop section padding
1523* o::             -o to name the object file
1524* R::             -R to join data and text sections
1525* statistics::    -statistics to see statistics about assembly
1526* traditional-format:: -traditional-format for compatible output
1527* v::             -v to announce version
1528* W::             -W, -no-warn, -warn, -fatal-warnings to control warnings
1529* Z::             -Z to make object file even after errors
1530
1531
1532File: as.info,  Node: a,  Next: alternate,  Up: Invoking
1533
15342.1 Enable Listings: '-a[cdghlns]'
1535==================================
1536
1537These options enable listing output from the assembler.  By itself, '-a'
1538requests high-level, assembly, and symbols listing.  You can use other
1539letters to select specific options for the list: '-ah' requests a
1540high-level language listing, '-al' requests an output-program assembly
1541listing, and '-as' requests a symbol table listing.  High-level listings
1542require that a compiler debugging option like '-g' be used, and that
1543assembly listings ('-al') be requested also.
1544
1545   Use the '-ag' option to print a first section with general assembly
1546information, like as version, switches passed, or time stamp.
1547
1548   Use the '-ac' option to omit false conditionals from a listing.  Any
1549lines which are not assembled because of a false '.if' (or '.ifdef', or
1550any other conditional), or a true '.if' followed by an '.else', will be
1551omitted from the listing.
1552
1553   Use the '-ad' option to omit debugging directives from the listing.
1554
1555   Once you have specified one of these options, you can further control
1556listing output and its appearance using the directives '.list',
1557'.nolist', '.psize', '.eject', '.title', and '.sbttl'.  The '-an' option
1558turns off all forms processing.  If you do not request listing output
1559with one of the '-a' options, the listing-control directives have no
1560effect.
1561
1562   The letters after '-a' may be combined into one option, _e.g._,
1563'-aln'.
1564
1565   Note if the assembler source is coming from the standard input (e.g.,
1566because it is being created by 'gcc' and the '-pipe' command-line switch
1567is being used) then the listing will not contain any comments or
1568preprocessor directives.  This is because the listing code buffers input
1569source lines from stdin only after they have been preprocessed by the
1570assembler.  This reduces memory usage and makes the code more efficient.
1571
1572
1573File: as.info,  Node: alternate,  Next: D,  Prev: a,  Up: Invoking
1574
15752.2 '--alternate'
1576=================
1577
1578Begin in alternate macro mode, see *note '.altmacro': Altmacro.
1579
1580
1581File: as.info,  Node: D,  Next: f,  Prev: alternate,  Up: Invoking
1582
15832.3 '-D'
1584========
1585
1586This option has no effect whatsoever, but it is accepted to make it more
1587likely that scripts written for other assemblers also work with 'as'.
1588
1589
1590File: as.info,  Node: f,  Next: I,  Prev: D,  Up: Invoking
1591
15922.4 Work Faster: '-f'
1593=====================
1594
1595'-f' should only be used when assembling programs written by a (trusted)
1596compiler.  '-f' stops the assembler from doing whitespace and comment
1597preprocessing on the input file(s) before assembling them.  *Note
1598Preprocessing: Preprocessing.
1599
1600     _Warning:_ if you use '-f' when the files actually need to be
1601     preprocessed (if they contain comments, for example), 'as' does not
1602     work correctly.
1603
1604
1605File: as.info,  Node: I,  Next: K,  Prev: f,  Up: Invoking
1606
16072.5 '.include' Search Path: '-I' PATH
1608=====================================
1609
1610Use this option to add a PATH to the list of directories 'as' searches
1611for files specified in '.include' directives (*note '.include':
1612Include.).  You may use '-I' as many times as necessary to include a
1613variety of paths.  The current working directory is always searched
1614first; after that, 'as' searches any '-I' directories in the same order
1615as they were specified (left to right) on the command line.
1616
1617
1618File: as.info,  Node: K,  Next: L,  Prev: I,  Up: Invoking
1619
16202.6 Difference Tables: '-K'
1621===========================
1622
1623'as' sometimes alters the code emitted for directives of the form '.word
1624SYM1-SYM2'.  *Note '.word': Word.  You can use the '-K' option if you
1625want a warning issued when this is done.
1626
1627
1628File: as.info,  Node: L,  Next: listing,  Prev: K,  Up: Invoking
1629
16302.7 Include Local Symbols: '-L'
1631===============================
1632
1633Symbols beginning with system-specific local label prefixes, typically
1634'.L' for ELF systems or 'L' for traditional a.out systems, are called
1635"local symbols".  *Note Symbol Names::.  Normally you do not see such
1636symbols when debugging, because they are intended for the use of
1637programs (like compilers) that compose assembler programs, not for your
1638notice.  Normally both 'as' and 'ld' discard such symbols, so you do not
1639normally debug with them.
1640
1641   This option tells 'as' to retain those local symbols in the object
1642file.  Usually if you do this you also tell the linker 'ld' to preserve
1643those symbols.
1644
1645
1646File: as.info,  Node: listing,  Next: M,  Prev: L,  Up: Invoking
1647
16482.8 Configuring listing output: '--listing'
1649===========================================
1650
1651The listing feature of the assembler can be enabled via the command-line
1652switch '-a' (*note a::).  This feature combines the input source file(s)
1653with a hex dump of the corresponding locations in the output object
1654file, and displays them as a listing file.  The format of this listing
1655can be controlled by directives inside the assembler source (i.e.,
1656'.list' (*note List::), '.title' (*note Title::), '.sbttl' (*note
1657Sbttl::), '.psize' (*note Psize::), and '.eject' (*note Eject::) and
1658also by the following switches:
1659
1660'--listing-lhs-width='number''
1661     Sets the maximum width, in words, of the first line of the hex byte
1662     dump.  This dump appears on the left hand side of the listing
1663     output.
1664
1665'--listing-lhs-width2='number''
1666     Sets the maximum width, in words, of any further lines of the hex
1667     byte dump for a given input source line.  If this value is not
1668     specified, it defaults to being the same as the value specified for
1669     '--listing-lhs-width'.  If neither switch is used the default is to
1670     one.
1671
1672'--listing-rhs-width='number''
1673     Sets the maximum width, in characters, of the source line that is
1674     displayed alongside the hex dump.  The default value for this
1675     parameter is 100.  The source line is displayed on the right hand
1676     side of the listing output.
1677
1678'--listing-cont-lines='number''
1679     Sets the maximum number of continuation lines of hex dump that will
1680     be displayed for a given single line of source input.  The default
1681     value is 4.
1682
1683
1684File: as.info,  Node: M,  Next: MD,  Prev: listing,  Up: Invoking
1685
16862.9 Assemble in MRI Compatibility Mode: '-M'
1687============================================
1688
1689The '-M' or '--mri' option selects MRI compatibility mode.  This changes
1690the syntax and pseudo-op handling of 'as' to make it compatible with the
1691'ASM68K' assembler from Microtec Research.  The exact nature of the MRI
1692syntax will not be documented here; see the MRI manuals for more
1693information.  Note in particular that the handling of macros and macro
1694arguments is somewhat different.  The purpose of this option is to
1695permit assembling existing MRI assembler code using 'as'.
1696
1697   The MRI compatibility is not complete.  Certain operations of the MRI
1698assembler depend upon its object file format, and can not be supported
1699using other object file formats.  Supporting these would require
1700enhancing each object file format individually.  These are:
1701
1702   * global symbols in common section
1703
1704     The m68k MRI assembler supports common sections which are merged by
1705     the linker.  Other object file formats do not support this.  'as'
1706     handles common sections by treating them as a single common symbol.
1707     It permits local symbols to be defined within a common section, but
1708     it can not support global symbols, since it has no way to describe
1709     them.
1710
1711   * complex relocations
1712
1713     The MRI assemblers support relocations against a negated section
1714     address, and relocations which combine the start addresses of two
1715     or more sections.  These are not support by other object file
1716     formats.
1717
1718   * 'END' pseudo-op specifying start address
1719
1720     The MRI 'END' pseudo-op permits the specification of a start
1721     address.  This is not supported by other object file formats.  The
1722     start address may instead be specified using the '-e' option to the
1723     linker, or in a linker script.
1724
1725   * 'IDNT', '.ident' and 'NAME' pseudo-ops
1726
1727     The MRI 'IDNT', '.ident' and 'NAME' pseudo-ops assign a module name
1728     to the output file.  This is not supported by other object file
1729     formats.
1730
1731   * 'ORG' pseudo-op
1732
1733     The m68k MRI 'ORG' pseudo-op begins an absolute section at a given
1734     address.  This differs from the usual 'as' '.org' pseudo-op, which
1735     changes the location within the current section.  Absolute sections
1736     are not supported by other object file formats.  The address of a
1737     section may be assigned within a linker script.
1738
1739   There are some other features of the MRI assembler which are not
1740supported by 'as', typically either because they are difficult or
1741because they seem of little consequence.  Some of these may be supported
1742in future releases.
1743
1744   * EBCDIC strings
1745
1746     EBCDIC strings are not supported.
1747
1748   * packed binary coded decimal
1749
1750     Packed binary coded decimal is not supported.  This means that the
1751     'DC.P' and 'DCB.P' pseudo-ops are not supported.
1752
1753   * 'FEQU' pseudo-op
1754
1755     The m68k 'FEQU' pseudo-op is not supported.
1756
1757   * 'NOOBJ' pseudo-op
1758
1759     The m68k 'NOOBJ' pseudo-op is not supported.
1760
1761   * 'OPT' branch control options
1762
1763     The m68k 'OPT' branch control options--'B', 'BRS', 'BRB', 'BRL',
1764     and 'BRW'--are ignored.  'as' automatically relaxes all branches,
1765     whether forward or backward, to an appropriate size, so these
1766     options serve no purpose.
1767
1768   * 'OPT' list control options
1769
1770     The following m68k 'OPT' list control options are ignored: 'C',
1771     'CEX', 'CL', 'CRE', 'E', 'G', 'I', 'M', 'MEX', 'MC', 'MD', 'X'.
1772
1773   * other 'OPT' options
1774
1775     The following m68k 'OPT' options are ignored: 'NEST', 'O', 'OLD',
1776     'OP', 'P', 'PCO', 'PCR', 'PCS', 'R'.
1777
1778   * 'OPT' 'D' option is default
1779
1780     The m68k 'OPT' 'D' option is the default, unlike the MRI assembler.
1781     'OPT NOD' may be used to turn it off.
1782
1783   * 'XREF' pseudo-op.
1784
1785     The m68k 'XREF' pseudo-op is ignored.
1786
1787
1788File: as.info,  Node: MD,  Next: no-pad-sections,  Prev: M,  Up: Invoking
1789
17902.10 Dependency Tracking: '--MD'
1791================================
1792
1793'as' can generate a dependency file for the file it creates.  This file
1794consists of a single rule suitable for 'make' describing the
1795dependencies of the main source file.
1796
1797   The rule is written to the file named in its argument.
1798
1799   This feature is used in the automatic updating of makefiles.
1800
1801
1802File: as.info,  Node: no-pad-sections,  Next: o,  Prev: MD,  Up: Invoking
1803
18042.11 Output Section Padding
1805===========================
1806
1807Normally the assembler will pad the end of each output section up to its
1808alignment boundary.  But this can waste space, which can be significant
1809on memory constrained targets.  So the '--no-pad-sections' option will
1810disable this behaviour.
1811
1812
1813File: as.info,  Node: o,  Next: R,  Prev: no-pad-sections,  Up: Invoking
1814
18152.12 Name the Object File: '-o'
1816===============================
1817
1818There is always one object file output when you run 'as'.  By default it
1819has the name 'a.out'.  You use this option (which takes exactly one
1820filename) to give the object file a different name.
1821
1822   Whatever the object file is called, 'as' overwrites any existing file
1823of the same name.
1824
1825
1826File: as.info,  Node: R,  Next: statistics,  Prev: o,  Up: Invoking
1827
18282.13 Join Data and Text Sections: '-R'
1829======================================
1830
1831'-R' tells 'as' to write the object file as if all data-section data
1832lives in the text section.  This is only done at the very last moment:
1833your binary data are the same, but data section parts are relocated
1834differently.  The data section part of your object file is zero bytes
1835long because all its bytes are appended to the text section.  (*Note
1836Sections and Relocation: Sections.)
1837
1838   When you specify '-R' it would be possible to generate shorter
1839address displacements (because we do not have to cross between text and
1840data section).  We refrain from doing this simply for compatibility with
1841older versions of 'as'.  In future, '-R' may work this way.
1842
1843   When 'as' is configured for COFF or ELF output, this option is only
1844useful if you use sections named '.text' and '.data'.
1845
1846   '-R' is not supported for any of the HPPA targets.  Using '-R'
1847generates a warning from 'as'.
1848
1849
1850File: as.info,  Node: statistics,  Next: traditional-format,  Prev: R,  Up: Invoking
1851
18522.14 Display Assembly Statistics: '--statistics'
1853================================================
1854
1855Use '--statistics' to display two statistics about the resources used by
1856'as': the maximum amount of space allocated during the assembly (in
1857bytes), and the total execution time taken for the assembly (in CPU
1858seconds).
1859
1860
1861File: as.info,  Node: traditional-format,  Next: v,  Prev: statistics,  Up: Invoking
1862
18632.15 Compatible Output: '--traditional-format'
1864==============================================
1865
1866For some targets, the output of 'as' is different in some ways from the
1867output of some existing assembler.  This switch requests 'as' to use the
1868traditional format instead.
1869
1870   For example, it disables the exception frame optimizations which 'as'
1871normally does by default on 'gcc' output.
1872
1873
1874File: as.info,  Node: v,  Next: W,  Prev: traditional-format,  Up: Invoking
1875
18762.16 Announce Version: '-v'
1877===========================
1878
1879You can find out what version of as is running by including the option
1880'-v' (which you can also spell as '-version') on the command line.
1881
1882
1883File: as.info,  Node: W,  Next: Z,  Prev: v,  Up: Invoking
1884
18852.17 Control Warnings: '-W', '--warn', '--no-warn', '--fatal-warnings'
1886======================================================================
1887
1888'as' should never give a warning or error message when assembling
1889compiler output.  But programs written by people often cause 'as' to
1890give a warning that a particular assumption was made.  All such warnings
1891are directed to the standard error file.
1892
1893   If you use the '-W' and '--no-warn' options, no warnings are issued.
1894This only affects the warning messages: it does not change any
1895particular of how 'as' assembles your file.  Errors, which stop the
1896assembly, are still reported.
1897
1898   If you use the '--fatal-warnings' option, 'as' considers files that
1899generate warnings to be in error.
1900
1901   You can switch these options off again by specifying '--warn', which
1902causes warnings to be output as usual.
1903
1904
1905File: as.info,  Node: Z,  Prev: W,  Up: Invoking
1906
19072.18 Generate Object File in Spite of Errors: '-Z'
1908==================================================
1909
1910After an error message, 'as' normally produces no output.  If for some
1911reason you are interested in object file output even after 'as' gives an
1912error message on your program, use the '-Z' option.  If there are any
1913errors, 'as' continues anyways, and writes an object file after a final
1914warning message of the form 'N errors, M warnings, generating bad object
1915file.'
1916
1917
1918File: as.info,  Node: Syntax,  Next: Sections,  Prev: Invoking,  Up: Top
1919
19203 Syntax
1921********
1922
1923This chapter describes the machine-independent syntax allowed in a
1924source file.  'as' syntax is similar to what many other assemblers use;
1925it is inspired by the BSD 4.2 assembler, except that 'as' does not
1926assemble Vax bit-fields.
1927
1928* Menu:
1929
1930* Preprocessing::               Preprocessing
1931* Whitespace::                  Whitespace
1932* Comments::                    Comments
1933* Symbol Intro::                Symbols
1934* Statements::                  Statements
1935* Constants::                   Constants
1936
1937
1938File: as.info,  Node: Preprocessing,  Next: Whitespace,  Up: Syntax
1939
19403.1 Preprocessing
1941=================
1942
1943The 'as' internal preprocessor:
1944   * adjusts and removes extra whitespace.  It leaves one space or tab
1945     before the keywords on a line, and turns any other whitespace on
1946     the line into a single space.
1947
1948   * removes all comments, replacing them with a single space, or an
1949     appropriate number of newlines.
1950
1951   * converts character constants into the appropriate numeric values.
1952
1953   It does not do macro processing, include file handling, or anything
1954else you may get from your C compiler's preprocessor.  You can do
1955include file processing with the '.include' directive (*note '.include':
1956Include.).  You can use the GNU C compiler driver to get other "CPP"
1957style preprocessing by giving the input file a '.S' suffix.  See the
1958'Options Controlling the Kind of Output' section of the GCC manual for
1959more details
1960(https://gcc.gnu.org/onlinedocs/gcc/Overall-Options.html#Overall-Options)
1961
1962   Excess whitespace, comments, and character constants cannot be used
1963in the portions of the input text that are not preprocessed.
1964
1965   If the first line of an input file is '#NO_APP' or if you use the
1966'-f' option, whitespace and comments are not removed from the input
1967file.  Within an input file, you can ask for whitespace and comment
1968removal in specific portions of the by putting a line that says '#APP'
1969before the text that may contain whitespace or comments, and putting a
1970line that says '#NO_APP' after this text.  This feature is mainly intend
1971to support 'asm' statements in compilers whose output is otherwise free
1972of comments and whitespace.
1973
1974
1975File: as.info,  Node: Whitespace,  Next: Comments,  Prev: Preprocessing,  Up: Syntax
1976
19773.2 Whitespace
1978==============
1979
1980"Whitespace" is one or more blanks or tabs, in any order.  Whitespace is
1981used to separate symbols, and to make programs neater for people to
1982read.  Unless within character constants (*note Character Constants:
1983Characters.), any whitespace means the same as exactly one space.
1984
1985
1986File: as.info,  Node: Comments,  Next: Symbol Intro,  Prev: Whitespace,  Up: Syntax
1987
19883.3 Comments
1989============
1990
1991There are two ways of rendering comments to 'as'.  In both cases the
1992comment is equivalent to one space.
1993
1994   Anything from '/*' through the next '*/' is a comment.  This means
1995you may not nest these comments.
1996
1997     /*
1998       The only way to include a newline ('\n') in a comment
1999       is to use this sort of comment.
2000     */
2001
2002     /* This sort of comment does not nest. */
2003
2004   Anything from a "line comment" character up to the next newline is
2005considered a comment and is ignored.  The line comment character is
2006target specific, and some targets multiple comment characters.  Some
2007targets also have line comment characters that only work if they are the
2008first character on a line.  Some targets use a sequence of two
2009characters to introduce a line comment.  Some targets can also change
2010their line comment characters depending upon command-line options that
2011have been used.  For more details see the _Syntax_ section in the
2012documentation for individual targets.
2013
2014   If the line comment character is the hash sign ('#') then it still
2015has the special ability to enable and disable preprocessing (*note
2016Preprocessing::) and to specify logical line numbers:
2017
2018   To be compatible with past assemblers, lines that begin with '#' have
2019a special interpretation.  Following the '#' should be an absolute
2020expression (*note Expressions::): the logical line number of the _next_
2021line.  Then a string (*note Strings: Strings.) is allowed: if present it
2022is a new logical file name.  The rest of the line, if any, should be
2023whitespace.
2024
2025   If the first non-whitespace characters on the line are not numeric,
2026the line is ignored.  (Just like a comment.)
2027
2028                               # This is an ordinary comment.
2029     # 42-6 "new_file_name"    # New logical file name
2030                               # This is logical line # 36.
2031   This feature is deprecated, and may disappear from future versions of
2032'as'.
2033
2034
2035File: as.info,  Node: Symbol Intro,  Next: Statements,  Prev: Comments,  Up: Syntax
2036
20373.4 Symbols
2038===========
2039
2040A "symbol" is one or more characters chosen from the set of all letters
2041(both upper and lower case), digits and the three characters '_.$'.  On
2042most machines, you can also use '$' in symbol names; exceptions are
2043noted in *note Machine Dependencies::.  No symbol may begin with a
2044digit.  Case is significant.  There is no length limit; all characters
2045are significant.  Multibyte characters are supported.  Symbols are
2046delimited by characters not in that set, or by the beginning of a file
2047(since the source program must end with a newline, the end of a file is
2048not a possible symbol delimiter).  *Note Symbols::.
2049
2050   Symbol names may also be enclosed in double quote '"' characters.  In
2051such cases any characters are allowed, except for the NUL character.  If
2052a double quote character is to be included in the symbol name it must be
2053preceded by a backslash '\' character.
2054
2055
2056File: as.info,  Node: Statements,  Next: Constants,  Prev: Symbol Intro,  Up: Syntax
2057
20583.5 Statements
2059==============
2060
2061A "statement" ends at a newline character ('\n') or a "line separator
2062character".  The line separator character is target specific and
2063described in the _Syntax_ section of each target's documentation.  Not
2064all targets support a line separator character.  The newline or line
2065separator character is considered to be part of the preceding statement.
2066Newlines and separators within character constants are an exception:
2067they do not end statements.
2068
2069   It is an error to end any statement with end-of-file: the last
2070character of any input file should be a newline.
2071
2072   An empty statement is allowed, and may include whitespace.  It is
2073ignored.
2074
2075   A statement begins with zero or more labels, optionally followed by a
2076key symbol which determines what kind of statement it is.  The key
2077symbol determines the syntax of the rest of the statement.  If the
2078symbol begins with a dot '.' then the statement is an assembler
2079directive: typically valid for any computer.  If the symbol begins with
2080a letter the statement is an assembly language "instruction": it
2081assembles into a machine language instruction.  Different versions of
2082'as' for different computers recognize different instructions.  In fact,
2083the same symbol may represent a different instruction in a different
2084computer's assembly language.
2085
2086   A label is a symbol immediately followed by a colon (':').
2087Whitespace before a label or after a colon is permitted, but you may not
2088have whitespace between a label's symbol and its colon.  *Note Labels::.
2089
2090   For HPPA targets, labels need not be immediately followed by a colon,
2091but the definition of a label must begin in column zero.  This also
2092implies that only one label may be defined on each line.
2093
2094     label:     .directive    followed by something
2095     another_label:           # This is an empty statement.
2096                instruction   operand_1, operand_2, ...
2097
2098
2099File: as.info,  Node: Constants,  Prev: Statements,  Up: Syntax
2100
21013.6 Constants
2102=============
2103
2104A constant is a number, written so that its value is known by
2105inspection, without knowing any context.  Like this:
2106     .byte  74, 0112, 092, 0x4A, 0X4a, 'J, '\J # All the same value.
2107     .ascii "Ring the bell\7"                  # A string constant.
2108     .octa  0x123456789abcdef0123456789ABCDEF0 # A bignum.
2109     .float 0f-314159265358979323846264338327\
2110     95028841971.693993751E-40                 # - pi, a flonum.
2111
2112* Menu:
2113
2114* Characters::                  Character Constants
2115* Numbers::                     Number Constants
2116
2117
2118File: as.info,  Node: Characters,  Next: Numbers,  Up: Constants
2119
21203.6.1 Character Constants
2121-------------------------
2122
2123There are two kinds of character constants.  A "character" stands for
2124one character in one byte and its value may be used in numeric
2125expressions.  String constants (properly called string _literals_) are
2126potentially many bytes and their values may not be used in arithmetic
2127expressions.
2128
2129* Menu:
2130
2131* Strings::                     Strings
2132* Chars::                       Characters
2133
2134
2135File: as.info,  Node: Strings,  Next: Chars,  Up: Characters
2136
21373.6.1.1 Strings
2138...............
2139
2140A "string" is written between double-quotes.  It may contain
2141double-quotes or null characters.  The way to get special characters
2142into a string is to "escape" these characters: precede them with a
2143backslash '\' character.  For example '\\' represents one backslash: the
2144first '\' is an escape which tells 'as' to interpret the second
2145character literally as a backslash (which prevents 'as' from recognizing
2146the second '\' as an escape character).  The complete list of escapes
2147follows.
2148
2149'\b'
2150     Mnemonic for backspace; for ASCII this is octal code 010.
2151
2152'backslash-f'
2153     Mnemonic for FormFeed; for ASCII this is octal code 014.
2154
2155'\n'
2156     Mnemonic for newline; for ASCII this is octal code 012.
2157
2158'\r'
2159     Mnemonic for carriage-Return; for ASCII this is octal code 015.
2160
2161'\t'
2162     Mnemonic for horizontal Tab; for ASCII this is octal code 011.
2163
2164'\ DIGIT DIGIT DIGIT'
2165     An octal character code.  The numeric code is 3 octal digits.  For
2166     compatibility with other Unix systems, 8 and 9 are accepted as
2167     digits: for example, '\008' has the value 010, and '\009' the value
2168     011.
2169
2170'\x HEX-DIGITS...'
2171     A hex character code.  All trailing hex digits are combined.
2172     Either upper or lower case 'x' works.
2173
2174'\\'
2175     Represents one '\' character.
2176
2177'\"'
2178     Represents one '"' character.  Needed in strings to represent this
2179     character, because an unescaped '"' would end the string.
2180
2181'\ ANYTHING-ELSE'
2182     Any other character when escaped by '\' gives a warning, but
2183     assembles as if the '\' was not present.  The idea is that if you
2184     used an escape sequence you clearly didn't want the literal
2185     interpretation of the following character.  However 'as' has no
2186     other interpretation, so 'as' knows it is giving you the wrong code
2187     and warns you of the fact.
2188
2189   Which characters are escapable, and what those escapes represent,
2190varies widely among assemblers.  The current set is what we think the
2191BSD 4.2 assembler recognizes, and is a subset of what most C compilers
2192recognize.  If you are in doubt, do not use an escape sequence.
2193
2194
2195File: as.info,  Node: Chars,  Prev: Strings,  Up: Characters
2196
21973.6.1.2 Characters
2198..................
2199
2200A single character may be written as a single quote immediately followed
2201by that character.  Some backslash escapes apply to characters, '\b',
2202'\f', '\n', '\r', '\t', and '\"' with the same meaning as for strings,
2203plus '\'' for a single quote.  So if you want to write the character
2204backslash, you must write ''\\' where the first '\' escapes the second
2205'\'.  As you can see, the quote is an acute accent, not a grave accent.
2206A newline immediately following an acute accent is taken as a literal
2207character and does not count as the end of a statement.  The value of a
2208character constant in a numeric expression is the machine's byte-wide
2209code for that character.  'as' assumes your character code is ASCII:
2210''A' means 65, ''B' means 66, and so on.
2211
2212
2213File: as.info,  Node: Numbers,  Prev: Characters,  Up: Constants
2214
22153.6.2 Number Constants
2216----------------------
2217
2218'as' distinguishes three kinds of numbers according to how they are
2219stored in the target machine.  _Integers_ are numbers that would fit
2220into an 'int' in the C language.  _Bignums_ are integers, but they are
2221stored in more than 32 bits.  _Flonums_ are floating point numbers,
2222described below.
2223
2224* Menu:
2225
2226* Integers::                    Integers
2227* Bignums::                     Bignums
2228* Flonums::                     Flonums
2229
2230
2231File: as.info,  Node: Integers,  Next: Bignums,  Up: Numbers
2232
22333.6.2.1 Integers
2234................
2235
2236A binary integer is '0b' or '0B' followed by zero or more of the binary
2237digits '01'.
2238
2239   An octal integer is '0' followed by zero or more of the octal digits
2240('01234567').
2241
2242   A decimal integer starts with a non-zero digit followed by zero or
2243more digits ('0123456789').
2244
2245   A hexadecimal integer is '0x' or '0X' followed by one or more
2246hexadecimal digits chosen from '0123456789abcdefABCDEF'.
2247
2248   Integers have the usual values.  To denote a negative integer, use
2249the prefix operator '-' discussed under expressions (*note Prefix
2250Operators: Prefix Ops.).
2251
2252
2253File: as.info,  Node: Bignums,  Next: Flonums,  Prev: Integers,  Up: Numbers
2254
22553.6.2.2 Bignums
2256...............
2257
2258A "bignum" has the same syntax and semantics as an integer except that
2259the number (or its negative) takes more than 32 bits to represent in
2260binary.  The distinction is made because in some places integers are
2261permitted while bignums are not.
2262
2263
2264File: as.info,  Node: Flonums,  Prev: Bignums,  Up: Numbers
2265
22663.6.2.3 Flonums
2267...............
2268
2269A "flonum" represents a floating point number.  The translation is
2270indirect: a decimal floating point number from the text is converted by
2271'as' to a generic binary floating point number of more than sufficient
2272precision.  This generic floating point number is converted to a
2273particular computer's floating point format (or formats) by a portion of
2274'as' specialized to that computer.
2275
2276   A flonum is written by writing (in order)
2277   * The digit '0'.  ('0' is optional on the HPPA.)
2278
2279   * A letter, to tell 'as' the rest of the number is a flonum.  'e' is
2280     recommended.  Case is not important.
2281
2282     On the H8/300 and Renesas / SuperH SH architectures, the letter
2283     must be one of the letters 'DFPRSX' (in upper or lower case).
2284
2285     On the ARC, the letter must be one of the letters 'DFRS' (in upper
2286     or lower case).
2287
2288     On the HPPA architecture, the letter must be 'E' (upper case only).
2289
2290   * An optional sign: either '+' or '-'.
2291
2292   * An optional "integer part": zero or more decimal digits.
2293
2294   * An optional "fractional part": '.' followed by zero or more decimal
2295     digits.
2296
2297   * An optional exponent, consisting of:
2298
2299        * An 'E' or 'e'.
2300        * Optional sign: either '+' or '-'.
2301        * One or more decimal digits.
2302
2303   At least one of the integer part or the fractional part must be
2304present.  The floating point number has the usual base-10 value.
2305
2306   'as' does all processing using integers.  Flonums are computed
2307independently of any floating point hardware in the computer running
2308'as'.
2309
2310
2311File: as.info,  Node: Sections,  Next: Symbols,  Prev: Syntax,  Up: Top
2312
23134 Sections and Relocation
2314*************************
2315
2316* Menu:
2317
2318* Secs Background::             Background
2319* Ld Sections::                 Linker Sections
2320* As Sections::                 Assembler Internal Sections
2321* Sub-Sections::                Sub-Sections
2322* bss::                         bss Section
2323
2324
2325File: as.info,  Node: Secs Background,  Next: Ld Sections,  Up: Sections
2326
23274.1 Background
2328==============
2329
2330Roughly, a section is a range of addresses, with no gaps; all data "in"
2331those addresses is treated the same for some particular purpose.  For
2332example there may be a "read only" section.
2333
2334   The linker 'ld' reads many object files (partial programs) and
2335combines their contents to form a runnable program.  When 'as' emits an
2336object file, the partial program is assumed to start at address 0.  'ld'
2337assigns the final addresses for the partial program, so that different
2338partial programs do not overlap.  This is actually an
2339oversimplification, but it suffices to explain how 'as' uses sections.
2340
2341   'ld' moves blocks of bytes of your program to their run-time
2342addresses.  These blocks slide to their run-time addresses as rigid
2343units; their length does not change and neither does the order of bytes
2344within them.  Such a rigid unit is called a _section_.  Assigning
2345run-time addresses to sections is called "relocation".  It includes the
2346task of adjusting mentions of object-file addresses so they refer to the
2347proper run-time addresses.  For the H8/300, and for the Renesas / SuperH
2348SH, 'as' pads sections if needed to ensure they end on a word (sixteen
2349bit) boundary.
2350
2351   An object file written by 'as' has at least three sections, any of
2352which may be empty.  These are named "text", "data" and "bss" sections.
2353
2354   When it generates COFF or ELF output, 'as' can also generate whatever
2355other named sections you specify using the '.section' directive (*note
2356'.section': Section.).  If you do not use any directives that place
2357output in the '.text' or '.data' sections, these sections still exist,
2358but are empty.
2359
2360   When 'as' generates SOM or ELF output for the HPPA, 'as' can also
2361generate whatever other named sections you specify using the '.space'
2362and '.subspace' directives.  See 'HP9000 Series 800 Assembly Language
2363Reference Manual' (HP 92432-90001) for details on the '.space' and
2364'.subspace' assembler directives.
2365
2366   Additionally, 'as' uses different names for the standard text, data,
2367and bss sections when generating SOM output.  Program text is placed
2368into the '$CODE$' section, data into '$DATA$', and BSS into '$BSS$'.
2369
2370   Within the object file, the text section starts at address '0', the
2371data section follows, and the bss section follows the data section.
2372
2373   When generating either SOM or ELF output files on the HPPA, the text
2374section starts at address '0', the data section at address '0x4000000',
2375and the bss section follows the data section.
2376
2377   To let 'ld' know which data changes when the sections are relocated,
2378and how to change that data, 'as' also writes to the object file details
2379of the relocation needed.  To perform relocation 'ld' must know, each
2380time an address in the object file is mentioned:
2381   * Where in the object file is the beginning of this reference to an
2382     address?
2383   * How long (in bytes) is this reference?
2384   * Which section does the address refer to?  What is the numeric value
2385     of
2386          (ADDRESS) - (START-ADDRESS OF SECTION)?
2387   * Is the reference to an address "Program-Counter relative"?
2388
2389   In fact, every address 'as' ever uses is expressed as
2390     (SECTION) + (OFFSET INTO SECTION)
2391Further, most expressions 'as' computes have this section-relative
2392nature.  (For some object formats, such as SOM for the HPPA, some
2393expressions are symbol-relative instead.)
2394
2395   In this manual we use the notation {SECNAME N} to mean "offset N into
2396section SECNAME."
2397
2398   Apart from text, data and bss sections you need to know about the
2399"absolute" section.  When 'ld' mixes partial programs, addresses in the
2400absolute section remain unchanged.  For example, address '{absolute 0}'
2401is "relocated" to run-time address 0 by 'ld'.  Although the linker never
2402arranges two partial programs' data sections with overlapping addresses
2403after linking, _by definition_ their absolute sections must overlap.
2404Address '{absolute 239}' in one part of a program is always the same
2405address when the program is running as address '{absolute 239}' in any
2406other part of the program.
2407
2408   The idea of sections is extended to the "undefined" section.  Any
2409address whose section is unknown at assembly time is by definition
2410rendered {undefined U}--where U is filled in later.  Since numbers are
2411always defined, the only way to generate an undefined address is to
2412mention an undefined symbol.  A reference to a named common block would
2413be such a symbol: its value is unknown at assembly time so it has
2414section _undefined_.
2415
2416   By analogy the word _section_ is used to describe groups of sections
2417in the linked program.  'ld' puts all partial programs' text sections in
2418contiguous addresses in the linked program.  It is customary to refer to
2419the _text section_ of a program, meaning all the addresses of all
2420partial programs' text sections.  Likewise for data and bss sections.
2421
2422   Some sections are manipulated by 'ld'; others are invented for use of
2423'as' and have no meaning except during assembly.
2424
2425
2426File: as.info,  Node: Ld Sections,  Next: As Sections,  Prev: Secs Background,  Up: Sections
2427
24284.2 Linker Sections
2429===================
2430
2431'ld' deals with just four kinds of sections, summarized below.
2432
2433*named sections*
2434*text section*
2435*data section*
2436     These sections hold your program.  'as' and 'ld' treat them as
2437     separate but equal sections.  Anything you can say of one section
2438     is true of another.  When the program is running, however, it is
2439     customary for the text section to be unalterable.  The text section
2440     is often shared among processes: it contains instructions,
2441     constants and the like.  The data section of a running program is
2442     usually alterable: for example, C variables would be stored in the
2443     data section.
2444
2445*bss section*
2446     This section contains zeroed bytes when your program begins
2447     running.  It is used to hold uninitialized variables or common
2448     storage.  The length of each partial program's bss section is
2449     important, but because it starts out containing zeroed bytes there
2450     is no need to store explicit zero bytes in the object file.  The
2451     bss section was invented to eliminate those explicit zeros from
2452     object files.
2453
2454*absolute section*
2455     Address 0 of this section is always "relocated" to runtime address
2456     0.  This is useful if you want to refer to an address that 'ld'
2457     must not change when relocating.  In this sense we speak of
2458     absolute addresses being "unrelocatable": they do not change during
2459     relocation.
2460
2461*undefined section*
2462     This "section" is a catch-all for address references to objects not
2463     in the preceding sections.
2464
2465   An idealized example of three relocatable sections follows.  The
2466example uses the traditional section names '.text' and '.data'.  Memory
2467addresses are on the horizontal axis.
2468
2469                           +-----+----+--+
2470     partial program # 1:  |ttttt|dddd|00|
2471                           +-----+----+--+
2472
2473                           text   data bss
2474                           seg.   seg. seg.
2475
2476                           +---+---+---+
2477     partial program # 2:  |TTT|DDD|000|
2478                           +---+---+---+
2479
2480                           +--+---+-----+--+----+---+-----+~~
2481     linked program:       |  |TTT|ttttt|  |dddd|DDD|00000|
2482                           +--+---+-----+--+----+---+-----+~~
2483
2484         addresses:        0 ...
2485
2486
2487File: as.info,  Node: As Sections,  Next: Sub-Sections,  Prev: Ld Sections,  Up: Sections
2488
24894.3 Assembler Internal Sections
2490===============================
2491
2492These sections are meant only for the internal use of 'as'.  They have
2493no meaning at run-time.  You do not really need to know about these
2494sections for most purposes; but they can be mentioned in 'as' warning
2495messages, so it might be helpful to have an idea of their meanings to
2496'as'.  These sections are used to permit the value of every expression
2497in your assembly language program to be a section-relative address.
2498
2499ASSEMBLER-INTERNAL-LOGIC-ERROR!
2500     An internal assembler logic error has been found.  This means there
2501     is a bug in the assembler.
2502
2503expr section
2504     The assembler stores complex expression internally as combinations
2505     of symbols.  When it needs to represent an expression as a symbol,
2506     it puts it in the expr section.
2507
2508
2509File: as.info,  Node: Sub-Sections,  Next: bss,  Prev: As Sections,  Up: Sections
2510
25114.4 Sub-Sections
2512================
2513
2514Assembled bytes conventionally fall into two sections: text and data.
2515You may have separate groups of data in named sections that you want to
2516end up near to each other in the object file, even though they are not
2517contiguous in the assembler source.  'as' allows you to use
2518"subsections" for this purpose.  Within each section, there can be
2519numbered subsections with values from 0 to 8192.  Objects assembled into
2520the same subsection go into the object file together with other objects
2521in the same subsection.  For example, a compiler might want to store
2522constants in the text section, but might not want to have them
2523interspersed with the program being assembled.  In this case, the
2524compiler could issue a '.text 0' before each section of code being
2525output, and a '.text 1' before each group of constants being output.
2526
2527   Subsections are optional.  If you do not use subsections, everything
2528goes in subsection number zero.
2529
2530   Each subsection is zero-padded up to a multiple of four bytes.
2531(Subsections may be padded a different amount on different flavors of
2532'as'.)
2533
2534   Subsections appear in your object file in numeric order, lowest
2535numbered to highest.  (All this to be compatible with other people's
2536assemblers.)  The object file contains no representation of subsections;
2537'ld' and other programs that manipulate object files see no trace of
2538them.  They just see all your text subsections as a text section, and
2539all your data subsections as a data section.
2540
2541   To specify which subsection you want subsequent statements assembled
2542into, use a numeric argument to specify it, in a '.text EXPRESSION' or a
2543'.data EXPRESSION' statement.  When generating COFF output, you can also
2544use an extra subsection argument with arbitrary named sections:
2545'.section NAME, EXPRESSION'.  When generating ELF output, you can also
2546use the '.subsection' directive (*note SubSection::) to specify a
2547subsection: '.subsection EXPRESSION'.  EXPRESSION should be an absolute
2548expression (*note Expressions::).  If you just say '.text' then '.text
25490' is assumed.  Likewise '.data' means '.data 0'.  Assembly begins in
2550'text 0'.  For instance:
2551     .text 0     # The default subsection is text 0 anyway.
2552     .ascii "This lives in the first text subsection. *"
2553     .text 1
2554     .ascii "But this lives in the second text subsection."
2555     .data 0
2556     .ascii "This lives in the data section,"
2557     .ascii "in the first data subsection."
2558     .text 0
2559     .ascii "This lives in the first text section,"
2560     .ascii "immediately following the asterisk (*)."
2561
2562   Each section has a "location counter" incremented by one for every
2563byte assembled into that section.  Because subsections are merely a
2564convenience restricted to 'as' there is no concept of a subsection
2565location counter.  There is no way to directly manipulate a location
2566counter--but the '.align' directive changes it, and any label definition
2567captures its current value.  The location counter of the section where
2568statements are being assembled is said to be the "active" location
2569counter.
2570
2571
2572File: as.info,  Node: bss,  Prev: Sub-Sections,  Up: Sections
2573
25744.5 bss Section
2575===============
2576
2577The bss section is used for local common variable storage.  You may
2578allocate address space in the bss section, but you may not dictate data
2579to load into it before your program executes.  When your program starts
2580running, all the contents of the bss section are zeroed bytes.
2581
2582   The '.lcomm' pseudo-op defines a symbol in the bss section; see *note
2583'.lcomm': Lcomm.
2584
2585   The '.comm' pseudo-op may be used to declare a common symbol, which
2586is another form of uninitialized symbol; see *note '.comm': Comm.
2587
2588   When assembling for a target which supports multiple sections, such
2589as ELF or COFF, you may switch into the '.bss' section and define
2590symbols as usual; see *note '.section': Section.  You may only assemble
2591zero values into the section.  Typically the section will only contain
2592symbol definitions and '.skip' directives (*note '.skip': Skip.).
2593
2594
2595File: as.info,  Node: Symbols,  Next: Expressions,  Prev: Sections,  Up: Top
2596
25975 Symbols
2598*********
2599
2600Symbols are a central concept: the programmer uses symbols to name
2601things, the linker uses symbols to link, and the debugger uses symbols
2602to debug.
2603
2604     _Warning:_ 'as' does not place symbols in the object file in the
2605     same order they were declared.  This may break some debuggers.
2606
2607* Menu:
2608
2609* Labels::                      Labels
2610* Setting Symbols::             Giving Symbols Other Values
2611* Symbol Names::                Symbol Names
2612* Dot::                         The Special Dot Symbol
2613* Symbol Attributes::           Symbol Attributes
2614
2615
2616File: as.info,  Node: Labels,  Next: Setting Symbols,  Up: Symbols
2617
26185.1 Labels
2619==========
2620
2621A "label" is written as a symbol immediately followed by a colon ':'.
2622The symbol then represents the current value of the active location
2623counter, and is, for example, a suitable instruction operand.  You are
2624warned if you use the same symbol to represent two different locations:
2625the first definition overrides any other definitions.
2626
2627   On the HPPA, the usual form for a label need not be immediately
2628followed by a colon, but instead must start in column zero.  Only one
2629label may be defined on a single line.  To work around this, the HPPA
2630version of 'as' also provides a special directive '.label' for defining
2631labels more flexibly.
2632
2633
2634File: as.info,  Node: Setting Symbols,  Next: Symbol Names,  Prev: Labels,  Up: Symbols
2635
26365.2 Giving Symbols Other Values
2637===============================
2638
2639A symbol can be given an arbitrary value by writing a symbol, followed
2640by an equals sign '=', followed by an expression (*note Expressions::).
2641This is equivalent to using the '.set' directive.  *Note '.set': Set.
2642In the same way, using a double equals sign '=''=' here represents an
2643equivalent of the '.eqv' directive.  *Note '.eqv': Eqv.
2644
2645   Blackfin does not support symbol assignment with '='.
2646
2647
2648File: as.info,  Node: Symbol Names,  Next: Dot,  Prev: Setting Symbols,  Up: Symbols
2649
26505.3 Symbol Names
2651================
2652
2653Symbol names begin with a letter or with one of '._'.  On most machines,
2654you can also use '$' in symbol names; exceptions are noted in *note
2655Machine Dependencies::.  That character may be followed by any string of
2656digits, letters, dollar signs (unless otherwise noted for a particular
2657target machine), and underscores.
2658
2659   Case of letters is significant: 'foo' is a different symbol name than
2660'Foo'.
2661
2662   Symbol names do not start with a digit.  An exception to this rule is
2663made for Local Labels.  See below.
2664
2665   Multibyte characters are supported.  To generate a symbol name
2666containing multibyte characters enclose it within double quotes and use
2667escape codes.  cf *Note Strings::.  Generating a multibyte symbol name
2668from a label is not currently supported.
2669
2670   Each symbol has exactly one name.  Each name in an assembly language
2671program refers to exactly one symbol.  You may use that symbol name any
2672number of times in a program.
2673
2674Local Symbol Names
2675------------------
2676
2677A local symbol is any symbol beginning with certain local label
2678prefixes.  By default, the local label prefix is '.L' for ELF systems or
2679'L' for traditional a.out systems, but each target may have its own set
2680of local label prefixes.  On the HPPA local symbols begin with 'L$'.
2681
2682   Local symbols are defined and used within the assembler, but they are
2683normally not saved in object files.  Thus, they are not visible when
2684debugging.  You may use the '-L' option (*note Include Local Symbols:
2685L.) to retain the local symbols in the object files.
2686
2687Local Labels
2688------------
2689
2690Local labels are different from local symbols.  Local labels help
2691compilers and programmers use names temporarily.  They create symbols
2692which are guaranteed to be unique over the entire scope of the input
2693source code and which can be referred to by a simple notation.  To
2694define a local label, write a label of the form 'N:' (where N represents
2695any non-negative integer).  To refer to the most recent previous
2696definition of that label write 'Nb', using the same number as when you
2697defined the label.  To refer to the next definition of a local label,
2698write 'Nf'.  The 'b' stands for "backwards" and the 'f' stands for
2699"forwards".
2700
2701   There is no restriction on how you can use these labels, and you can
2702reuse them too.  So that it is possible to repeatedly define the same
2703local label (using the same number 'N'), although you can only refer to
2704the most recently defined local label of that number (for a backwards
2705reference) or the next definition of a specific local label for a
2706forward reference.  It is also worth noting that the first 10 local
2707labels ('0:'...'9:') are implemented in a slightly more efficient manner
2708than the others.
2709
2710   Here is an example:
2711
2712     1:        branch 1f
2713     2:        branch 1b
2714     1:        branch 2f
2715     2:        branch 1b
2716
2717   Which is the equivalent of:
2718
2719     label_1:  branch label_3
2720     label_2:  branch label_1
2721     label_3:  branch label_4
2722     label_4:  branch label_3
2723
2724   Local label names are only a notational device.  They are immediately
2725transformed into more conventional symbol names before the assembler
2726uses them.  The symbol names are stored in the symbol table, appear in
2727error messages, and are optionally emitted to the object file.  The
2728names are constructed using these parts:
2729
2730'_local label prefix_'
2731     All local symbols begin with the system-specific local label
2732     prefix.  Normally both 'as' and 'ld' forget symbols that start with
2733     the local label prefix.  These labels are used for symbols you are
2734     never intended to see.  If you use the '-L' option then 'as'
2735     retains these symbols in the object file.  If you also instruct
2736     'ld' to retain these symbols, you may use them in debugging.
2737
2738'NUMBER'
2739     This is the number that was used in the local label definition.  So
2740     if the label is written '55:' then the number is '55'.
2741
2742'C-B'
2743     This unusual character is included so you do not accidentally
2744     invent a symbol of the same name.  The character has ASCII value of
2745     '\002' (control-B).
2746
2747'_ordinal number_'
2748     This is a serial number to keep the labels distinct.  The first
2749     definition of '0:' gets the number '1'.  The 15th definition of
2750     '0:' gets the number '15', and so on.  Likewise the first
2751     definition of '1:' gets the number '1' and its 15th definition gets
2752     '15' as well.
2753
2754   So for example, the first '1:' may be named '.L1C-B1', and the 44th
2755'3:' may be named '.L3C-B44'.
2756
2757Dollar Local Labels
2758-------------------
2759
2760On some targets 'as' also supports an even more local form of local
2761labels called dollar labels.  These labels go out of scope (i.e., they
2762become undefined) as soon as a non-local label is defined.  Thus they
2763remain valid for only a small region of the input source code.  Normal
2764local labels, by contrast, remain in scope for the entire file, or until
2765they are redefined by another occurrence of the same local label.
2766
2767   Dollar labels are defined in exactly the same way as ordinary local
2768labels, except that they have a dollar sign suffix to their numeric
2769value, e.g., '55$:'.
2770
2771   They can also be distinguished from ordinary local labels by their
2772transformed names which use ASCII character '\001' (control-A) as the
2773magic character to distinguish them from ordinary labels.  For example,
2774the fifth definition of '6$' may be named '.L6'C-A'5'.
2775
2776
2777File: as.info,  Node: Dot,  Next: Symbol Attributes,  Prev: Symbol Names,  Up: Symbols
2778
27795.4 The Special Dot Symbol
2780==========================
2781
2782The special symbol '.' refers to the current address that 'as' is
2783assembling into.  Thus, the expression 'melvin: .long .' defines
2784'melvin' to contain its own address.  Assigning a value to '.' is
2785treated the same as a '.org' directive.  Thus, the expression '.=.+4' is
2786the same as saying '.space 4'.
2787
2788
2789File: as.info,  Node: Symbol Attributes,  Prev: Dot,  Up: Symbols
2790
27915.5 Symbol Attributes
2792=====================
2793
2794Every symbol has, as well as its name, the attributes "Value" and
2795"Type".  Depending on output format, symbols can also have auxiliary
2796attributes.
2797
2798   If you use a symbol without defining it, 'as' assumes zero for all
2799these attributes, and probably won't warn you.  This makes the symbol an
2800externally defined symbol, which is generally what you would want.
2801
2802* Menu:
2803
2804* Symbol Value::                Value
2805* Symbol Type::                 Type
2806* a.out Symbols::               Symbol Attributes: 'a.out'
2807* COFF Symbols::                Symbol Attributes for COFF
2808* SOM Symbols::                Symbol Attributes for SOM
2809
2810
2811File: as.info,  Node: Symbol Value,  Next: Symbol Type,  Up: Symbol Attributes
2812
28135.5.1 Value
2814-----------
2815
2816The value of a symbol is (usually) 32 bits.  For a symbol which labels a
2817location in the text, data, bss or absolute sections the value is the
2818number of addresses from the start of that section to the label.
2819Naturally for text, data and bss sections the value of a symbol changes
2820as 'ld' changes section base addresses during linking.  Absolute
2821symbols' values do not change during linking: that is why they are
2822called absolute.
2823
2824   The value of an undefined symbol is treated in a special way.  If it
2825is 0 then the symbol is not defined in this assembler source file, and
2826'ld' tries to determine its value from other files linked into the same
2827program.  You make this kind of symbol simply by mentioning a symbol
2828name without defining it.  A non-zero value represents a '.comm' common
2829declaration.  The value is how much common storage to reserve, in bytes
2830(addresses).  The symbol refers to the first address of the allocated
2831storage.
2832
2833
2834File: as.info,  Node: Symbol Type,  Next: a.out Symbols,  Prev: Symbol Value,  Up: Symbol Attributes
2835
28365.5.2 Type
2837----------
2838
2839The type attribute of a symbol contains relocation (section)
2840information, any flag settings indicating that a symbol is external, and
2841(optionally), other information for linkers and debuggers.  The exact
2842format depends on the object-code output format in use.
2843
2844
2845File: as.info,  Node: a.out Symbols,  Next: COFF Symbols,  Prev: Symbol Type,  Up: Symbol Attributes
2846
28475.5.3 Symbol Attributes: 'a.out'
2848--------------------------------
2849
2850* Menu:
2851
2852* Symbol Desc::                 Descriptor
2853* Symbol Other::                Other
2854
2855
2856File: as.info,  Node: Symbol Desc,  Next: Symbol Other,  Up: a.out Symbols
2857
28585.5.3.1 Descriptor
2859..................
2860
2861This is an arbitrary 16-bit value.  You may establish a symbol's
2862descriptor value by using a '.desc' statement (*note '.desc': Desc.).  A
2863descriptor value means nothing to 'as'.
2864
2865
2866File: as.info,  Node: Symbol Other,  Prev: Symbol Desc,  Up: a.out Symbols
2867
28685.5.3.2 Other
2869.............
2870
2871This is an arbitrary 8-bit value.  It means nothing to 'as'.
2872
2873
2874File: as.info,  Node: COFF Symbols,  Next: SOM Symbols,  Prev: a.out Symbols,  Up: Symbol Attributes
2875
28765.5.4 Symbol Attributes for COFF
2877--------------------------------
2878
2879The COFF format supports a multitude of auxiliary symbol attributes;
2880like the primary symbol attributes, they are set between '.def' and
2881'.endef' directives.
2882
28835.5.4.1 Primary Attributes
2884..........................
2885
2886The symbol name is set with '.def'; the value and type, respectively,
2887with '.val' and '.type'.
2888
28895.5.4.2 Auxiliary Attributes
2890............................
2891
2892The 'as' directives '.dim', '.line', '.scl', '.size', '.tag', and
2893'.weak' can generate auxiliary symbol table information for COFF.
2894
2895
2896File: as.info,  Node: SOM Symbols,  Prev: COFF Symbols,  Up: Symbol Attributes
2897
28985.5.5 Symbol Attributes for SOM
2899-------------------------------
2900
2901The SOM format for the HPPA supports a multitude of symbol attributes
2902set with the '.EXPORT' and '.IMPORT' directives.
2903
2904   The attributes are described in 'HP9000 Series 800 Assembly Language
2905Reference Manual' (HP 92432-90001) under the 'IMPORT' and 'EXPORT'
2906assembler directive documentation.
2907
2908
2909File: as.info,  Node: Expressions,  Next: Pseudo Ops,  Prev: Symbols,  Up: Top
2910
29116 Expressions
2912*************
2913
2914An "expression" specifies an address or numeric value.  Whitespace may
2915precede and/or follow an expression.
2916
2917   The result of an expression must be an absolute number, or else an
2918offset into a particular section.  If an expression is not absolute, and
2919there is not enough information when 'as' sees the expression to know
2920its section, a second pass over the source program might be necessary to
2921interpret the expression--but the second pass is currently not
2922implemented.  'as' aborts with an error message in this situation.
2923
2924* Menu:
2925
2926* Empty Exprs::                 Empty Expressions
2927* Integer Exprs::               Integer Expressions
2928
2929
2930File: as.info,  Node: Empty Exprs,  Next: Integer Exprs,  Up: Expressions
2931
29326.1 Empty Expressions
2933=====================
2934
2935An empty expression has no value: it is just whitespace or null.
2936Wherever an absolute expression is required, you may omit the
2937expression, and 'as' assumes a value of (absolute) 0.  This is
2938compatible with other assemblers.
2939
2940
2941File: as.info,  Node: Integer Exprs,  Prev: Empty Exprs,  Up: Expressions
2942
29436.2 Integer Expressions
2944=======================
2945
2946An "integer expression" is one or more _arguments_ delimited by
2947_operators_.
2948
2949* Menu:
2950
2951* Arguments::                   Arguments
2952* Operators::                   Operators
2953* Prefix Ops::                  Prefix Operators
2954* Infix Ops::                   Infix Operators
2955
2956
2957File: as.info,  Node: Arguments,  Next: Operators,  Up: Integer Exprs
2958
29596.2.1 Arguments
2960---------------
2961
2962"Arguments" are symbols, numbers or subexpressions.  In other contexts
2963arguments are sometimes called "arithmetic operands".  In this manual,
2964to avoid confusing them with the "instruction operands" of the machine
2965language, we use the term "argument" to refer to parts of expressions
2966only, reserving the word "operand" to refer only to machine instruction
2967operands.
2968
2969   Symbols are evaluated to yield {SECTION NNN} where SECTION is one of
2970text, data, bss, absolute, or undefined.  NNN is a signed, 2's
2971complement 32 bit integer.
2972
2973   Numbers are usually integers.
2974
2975   A number can be a flonum or bignum.  In this case, you are warned
2976that only the low order 32 bits are used, and 'as' pretends these 32
2977bits are an integer.  You may write integer-manipulating instructions
2978that act on exotic constants, compatible with other assemblers.
2979
2980   Subexpressions are a left parenthesis '(' followed by an integer
2981expression, followed by a right parenthesis ')'; or a prefix operator
2982followed by an argument.
2983
2984
2985File: as.info,  Node: Operators,  Next: Prefix Ops,  Prev: Arguments,  Up: Integer Exprs
2986
29876.2.2 Operators
2988---------------
2989
2990"Operators" are arithmetic functions, like '+' or '%'.  Prefix operators
2991are followed by an argument.  Infix operators appear between their
2992arguments.  Operators may be preceded and/or followed by whitespace.
2993
2994
2995File: as.info,  Node: Prefix Ops,  Next: Infix Ops,  Prev: Operators,  Up: Integer Exprs
2996
29976.2.3 Prefix Operator
2998---------------------
2999
3000'as' has the following "prefix operators".  They each take one argument,
3001which must be absolute.
3002
3003'-'
3004     "Negation".  Two's complement negation.
3005'~'
3006     "Complementation".  Bitwise not.
3007
3008
3009File: as.info,  Node: Infix Ops,  Prev: Prefix Ops,  Up: Integer Exprs
3010
30116.2.4 Infix Operators
3012---------------------
3013
3014"Infix operators" take two arguments, one on either side.  Operators
3015have precedence, but operations with equal precedence are performed left
3016to right.  Apart from '+' or '-', both arguments must be absolute, and
3017the result is absolute.
3018
3019  1. Highest Precedence
3020
3021     '*'
3022          "Multiplication".
3023
3024     '/'
3025          "Division".  Truncation is the same as the C operator '/'
3026
3027     '%'
3028          "Remainder".
3029
3030     '<<'
3031          "Shift Left".  Same as the C operator '<<'.
3032
3033     '>>'
3034          "Shift Right".  Same as the C operator '>>'.
3035
3036  2. Intermediate precedence
3037
3038     '|'
3039
3040          "Bitwise Inclusive Or".
3041
3042     '&'
3043          "Bitwise And".
3044
3045     '^'
3046          "Bitwise Exclusive Or".
3047
3048     '!'
3049          "Bitwise Or Not".
3050
3051  3. Low Precedence
3052
3053     '+'
3054          "Addition".  If either argument is absolute, the result has
3055          the section of the other argument.  You may not add together
3056          arguments from different sections.
3057
3058     '-'
3059          "Subtraction".  If the right argument is absolute, the result
3060          has the section of the left argument.  If both arguments are
3061          in the same section, the result is absolute.  You may not
3062          subtract arguments from different sections.
3063
3064     '=='
3065          "Is Equal To"
3066     '<>'
3067     '!='
3068          "Is Not Equal To"
3069     '<'
3070          "Is Less Than"
3071     '>'
3072          "Is Greater Than"
3073     '>='
3074          "Is Greater Than Or Equal To"
3075     '<='
3076          "Is Less Than Or Equal To"
3077
3078          The comparison operators can be used as infix operators.  A
3079          true results has a value of -1 whereas a false result has a
3080          value of 0.  Note, these operators perform signed comparisons.
3081
3082  4. Lowest Precedence
3083
3084     '&&'
3085          "Logical And".
3086
3087     '||'
3088          "Logical Or".
3089
3090          These two logical operations can be used to combine the
3091          results of sub expressions.  Note, unlike the comparison
3092          operators a true result returns a value of 1 but a false
3093          results does still return 0.  Also note that the logical or
3094          operator has a slightly lower precedence than logical and.
3095
3096   In short, it's only meaningful to add or subtract the _offsets_ in an
3097address; you can only have a defined section in one of the two
3098arguments.
3099
3100
3101File: as.info,  Node: Pseudo Ops,  Next: Object Attributes,  Prev: Expressions,  Up: Top
3102
31037 Assembler Directives
3104**********************
3105
3106All assembler directives have names that begin with a period ('.').  The
3107names are case insensitive for most targets, and usually written in
3108lower case.
3109
3110   This chapter discusses directives that are available regardless of
3111the target machine configuration for the GNU assembler.  Some machine
3112configurations provide additional directives.  *Note Machine
3113Dependencies::.
3114
3115* Menu:
3116
3117* Abort::                       '.abort'
3118* ABORT (COFF)::                '.ABORT'
3119
3120* Align::                       '.align [ABS-EXPR[, ABS-EXPR[, ABS-EXPR]]]'
3121* Altmacro::                    '.altmacro'
3122* Ascii::                       '.ascii "STRING"'...
3123* Asciz::                       '.asciz "STRING"'...
3124* Attach_to_group::             '.attach_to_group NAME'
3125* Balign::                      '.balign [ABS-EXPR[, ABS-EXPR]]'
3126* Bundle directives::           '.bundle_align_mode ABS-EXPR', etc
3127* Byte::                        '.byte EXPRESSIONS'
3128* CFI directives::		'.cfi_startproc [simple]', '.cfi_endproc', etc.
3129* Comm::                        '.comm SYMBOL , LENGTH '
3130* Data::                        '.data SUBSECTION'
3131* Dc::                          '.dc[SIZE] EXPRESSIONS'
3132* Dcb::                         '.dcb[SIZE] NUMBER [,FILL]'
3133* Ds::                          '.ds[SIZE] NUMBER [,FILL]'
3134* Def::                         '.def NAME'
3135* Desc::                        '.desc SYMBOL, ABS-EXPRESSION'
3136* Dim::                         '.dim'
3137
3138* Double::                      '.double FLONUMS'
3139* Eject::                       '.eject'
3140* Else::                        '.else'
3141* Elseif::                      '.elseif'
3142* End::				'.end'
3143* Endef::                       '.endef'
3144
3145* Endfunc::                     '.endfunc'
3146* Endif::                       '.endif'
3147* Equ::                         '.equ SYMBOL, EXPRESSION'
3148* Equiv::                       '.equiv SYMBOL, EXPRESSION'
3149* Eqv::                         '.eqv SYMBOL, EXPRESSION'
3150* Err::				'.err'
3151* Error::			'.error STRING'
3152* Exitm::			'.exitm'
3153* Extern::                      '.extern'
3154* Fail::			'.fail'
3155* File::                        '.file'
3156* Fill::                        '.fill REPEAT , SIZE , VALUE'
3157* Float::                       '.float FLONUMS'
3158* Func::                        '.func'
3159* Global::                      '.global SYMBOL', '.globl SYMBOL'
3160* Gnu_attribute::               '.gnu_attribute TAG,VALUE'
3161* Hidden::                      '.hidden NAMES'
3162
3163* hword::                       '.hword EXPRESSIONS'
3164* Ident::                       '.ident'
3165* If::                          '.if ABSOLUTE EXPRESSION'
3166* Incbin::                      '.incbin "FILE"[,SKIP[,COUNT]]'
3167* Include::                     '.include "FILE"'
3168* Int::                         '.int EXPRESSIONS'
3169* Internal::                    '.internal NAMES'
3170
3171* Irp::				'.irp SYMBOL,VALUES'...
3172* Irpc::			'.irpc SYMBOL,VALUES'...
3173* Lcomm::                       '.lcomm SYMBOL , LENGTH'
3174* Lflags::                      '.lflags'
3175* Line::                        '.line LINE-NUMBER'
3176
3177* Linkonce::			'.linkonce [TYPE]'
3178* List::                        '.list'
3179* Ln::                          '.ln LINE-NUMBER'
3180* Loc::                         '.loc FILENO LINENO'
3181* Loc_mark_labels::             '.loc_mark_labels ENABLE'
3182* Local::                       '.local NAMES'
3183
3184* Long::                        '.long EXPRESSIONS'
3185
3186* Macro::			'.macro NAME ARGS'...
3187* MRI::				'.mri VAL'
3188* Noaltmacro::                  '.noaltmacro'
3189* Nolist::                      '.nolist'
3190* Nop::                         '.nop'
3191* Nops::                        '.nops SIZE[, CONTROL]'
3192* Octa::                        '.octa BIGNUMS'
3193* Offset::			'.offset LOC'
3194* Org::                         '.org NEW-LC, FILL'
3195* P2align::                     '.p2align [ABS-EXPR[, ABS-EXPR[, ABS-EXPR]]]'
3196* PopSection::                  '.popsection'
3197* Previous::                    '.previous'
3198
3199* Print::			'.print STRING'
3200* Protected::                   '.protected NAMES'
3201
3202* Psize::                       '.psize LINES, COLUMNS'
3203* Purgem::			'.purgem NAME'
3204* PushSection::                 '.pushsection NAME'
3205
3206* Quad::                        '.quad BIGNUMS'
3207* Reloc::			'.reloc OFFSET, RELOC_NAME[, EXPRESSION]'
3208* Rept::			'.rept COUNT'
3209* Sbttl::                       '.sbttl "SUBHEADING"'
3210* Scl::                         '.scl CLASS'
3211* Section::                     '.section NAME[, FLAGS]'
3212
3213* Set::                         '.set SYMBOL, EXPRESSION'
3214* Short::                       '.short EXPRESSIONS'
3215* Single::                      '.single FLONUMS'
3216* Size::                        '.size [NAME , EXPRESSION]'
3217* Skip::                        '.skip SIZE [,FILL]'
3218
3219* Sleb128::			'.sleb128 EXPRESSIONS'
3220* Space::                       '.space SIZE [,FILL]'
3221* Stab::                        '.stabd, .stabn, .stabs'
3222
3223* String::                      '.string "STR"', '.string8 "STR"', '.string16 "STR"', '.string32 "STR"', '.string64 "STR"'
3224* Struct::			'.struct EXPRESSION'
3225* SubSection::                  '.subsection'
3226* Symver::                      '.symver NAME,NAME2@NODENAME[,VISIBILITY]'
3227
3228* Tag::                         '.tag STRUCTNAME'
3229
3230* Text::                        '.text SUBSECTION'
3231* Title::                       '.title "HEADING"'
3232* Tls_common::                  '.tls_common SYMBOL, LENGTH[, ALIGNMENT]'
3233* Type::                        '.type <INT | NAME , TYPE DESCRIPTION>'
3234
3235* Uleb128::                     '.uleb128 EXPRESSIONS'
3236* Val::                         '.val ADDR'
3237
3238* Version::                     '.version "STRING"'
3239* VTableEntry::                 '.vtable_entry TABLE, OFFSET'
3240* VTableInherit::               '.vtable_inherit CHILD, PARENT'
3241
3242* Warning::			'.warning STRING'
3243* Weak::                        '.weak NAMES'
3244* Weakref::                     '.weakref ALIAS, SYMBOL'
3245* Word::                        '.word EXPRESSIONS'
3246* Zero::                        '.zero SIZE'
3247* 2byte::                       '.2byte EXPRESSIONS'
3248* 4byte::                       '.4byte EXPRESSIONS'
3249* 8byte::                       '.8byte BIGNUMS'
3250* Deprecated::                  Deprecated Directives
3251
3252
3253File: as.info,  Node: Abort,  Next: ABORT (COFF),  Up: Pseudo Ops
3254
32557.1 '.abort'
3256============
3257
3258This directive stops the assembly immediately.  It is for compatibility
3259with other assemblers.  The original idea was that the assembly language
3260source would be piped into the assembler.  If the sender of the source
3261quit, it could use this directive tells 'as' to quit also.  One day
3262'.abort' will not be supported.
3263
3264
3265File: as.info,  Node: ABORT (COFF),  Next: Align,  Prev: Abort,  Up: Pseudo Ops
3266
32677.2 '.ABORT' (COFF)
3268===================
3269
3270When producing COFF output, 'as' accepts this directive as a synonym for
3271'.abort'.
3272
3273
3274File: as.info,  Node: Align,  Next: Altmacro,  Prev: ABORT (COFF),  Up: Pseudo Ops
3275
32767.3 '.align [ABS-EXPR[, ABS-EXPR[, ABS-EXPR]]]'
3277===============================================
3278
3279Pad the location counter (in the current subsection) to a particular
3280storage boundary.  The first expression (which must be absolute) is the
3281alignment required, as described below.  If this expression is omitted
3282then a default value of 0 is used, effectively disabling alignment
3283requirements.
3284
3285   The second expression (also absolute) gives the fill value to be
3286stored in the padding bytes.  It (and the comma) may be omitted.  If it
3287is omitted, the padding bytes are normally zero.  However, on most
3288systems, if the section is marked as containing code and the fill value
3289is omitted, the space is filled with no-op instructions.
3290
3291   The third expression is also absolute, and is also optional.  If it
3292is present, it is the maximum number of bytes that should be skipped by
3293this alignment directive.  If doing the alignment would require skipping
3294more bytes than the specified maximum, then the alignment is not done at
3295all.  You can omit the fill value (the second argument) entirely by
3296simply using two commas after the required alignment; this can be useful
3297if you want the alignment to be filled with no-op instructions when
3298appropriate.
3299
3300   The way the required alignment is specified varies from system to
3301system.  For the arc, hppa, i386 using ELF, iq2000, m68k, or1k, s390,
3302sparc, tic4x and xtensa, the first expression is the alignment request
3303in bytes.  For example '.align 8' advances the location counter until it
3304is a multiple of 8.  If the location counter is already a multiple of 8,
3305no change is needed.  For the tic54x, the first expression is the
3306alignment request in words.
3307
3308   For other systems, including ppc, i386 using a.out format, arm and
3309strongarm, it is the number of low-order zero bits the location counter
3310must have after advancement.  For example '.align 3' advances the
3311location counter until it is a multiple of 8.  If the location counter
3312is already a multiple of 8, no change is needed.
3313
3314   This inconsistency is due to the different behaviors of the various
3315native assemblers for these systems which GAS must emulate.  GAS also
3316provides '.balign' and '.p2align' directives, described later, which
3317have a consistent behavior across all architectures (but are specific to
3318GAS).
3319
3320
3321File: as.info,  Node: Altmacro,  Next: Ascii,  Prev: Align,  Up: Pseudo Ops
3322
33237.4 '.altmacro'
3324===============
3325
3326Enable alternate macro mode, enabling:
3327
3328'LOCAL NAME [ , ... ]'
3329     One additional directive, 'LOCAL', is available.  It is used to
3330     generate a string replacement for each of the NAME arguments, and
3331     replace any instances of NAME in each macro expansion.  The
3332     replacement string is unique in the assembly, and different for
3333     each separate macro expansion.  'LOCAL' allows you to write macros
3334     that define symbols, without fear of conflict between separate
3335     macro expansions.
3336
3337'String delimiters'
3338     You can write strings delimited in these other ways besides
3339     '"STRING"':
3340
3341     ''STRING''
3342          You can delimit strings with single-quote characters.
3343
3344     '<STRING>'
3345          You can delimit strings with matching angle brackets.
3346
3347'single-character string escape'
3348     To include any single character literally in a string (even if the
3349     character would otherwise have some special meaning), you can
3350     prefix the character with '!' (an exclamation mark).  For example,
3351     you can write '<4.3 !> 5.4!!>' to get the literal text '4.3 >
3352     5.4!'.
3353
3354'Expression results as strings'
3355     You can write '%EXPR' to evaluate the expression EXPR and use the
3356     result as a string.
3357
3358
3359File: as.info,  Node: Ascii,  Next: Asciz,  Prev: Altmacro,  Up: Pseudo Ops
3360
33617.5 '.ascii "STRING"'...
3362========================
3363
3364'.ascii' expects zero or more string literals (*note Strings::)
3365separated by commas.  It assembles each string (with no automatic
3366trailing zero byte) into consecutive addresses.
3367
3368
3369File: as.info,  Node: Asciz,  Next: Attach_to_group,  Prev: Ascii,  Up: Pseudo Ops
3370
33717.6 '.asciz "STRING"'...
3372========================
3373
3374'.asciz' is just like '.ascii', but each string is followed by a zero
3375byte.  The "z" in '.asciz' stands for "zero".  Note that multiple string
3376arguments not separated by commas will be concatenated together and only
3377one final zero byte will be stored.
3378
3379
3380File: as.info,  Node: Attach_to_group,  Next: Balign,  Prev: Asciz,  Up: Pseudo Ops
3381
33827.7 '.attach_to_group NAME'
3383===========================
3384
3385Attaches the current section to the named group.  This is like declaring
3386the section with the 'G' attribute, but can be done after the section
3387has been created.  Note if the group section does not exist at the point
3388that this directive is used then it will be created.
3389
3390
3391File: as.info,  Node: Balign,  Next: Bundle directives,  Prev: Attach_to_group,  Up: Pseudo Ops
3392
33937.8 '.balign[wl] [ABS-EXPR[, ABS-EXPR[, ABS-EXPR]]]'
3394====================================================
3395
3396Pad the location counter (in the current subsection) to a particular
3397storage boundary.  The first expression (which must be absolute) is the
3398alignment request in bytes.  For example '.balign 8' advances the
3399location counter until it is a multiple of 8.  If the location counter
3400is already a multiple of 8, no change is needed.  If the expression is
3401omitted then a default value of 0 is used, effectively disabling
3402alignment requirements.
3403
3404   The second expression (also absolute) gives the fill value to be
3405stored in the padding bytes.  It (and the comma) may be omitted.  If it
3406is omitted, the padding bytes are normally zero.  However, on most
3407systems, if the section is marked as containing code and the fill value
3408is omitted, the space is filled with no-op instructions.
3409
3410   The third expression is also absolute, and is also optional.  If it
3411is present, it is the maximum number of bytes that should be skipped by
3412this alignment directive.  If doing the alignment would require skipping
3413more bytes than the specified maximum, then the alignment is not done at
3414all.  You can omit the fill value (the second argument) entirely by
3415simply using two commas after the required alignment; this can be useful
3416if you want the alignment to be filled with no-op instructions when
3417appropriate.
3418
3419   The '.balignw' and '.balignl' directives are variants of the
3420'.balign' directive.  The '.balignw' directive treats the fill pattern
3421as a two byte word value.  The '.balignl' directives treats the fill
3422pattern as a four byte longword value.  For example, '.balignw 4,0x368d'
3423will align to a multiple of 4.  If it skips two bytes, they will be
3424filled in with the value 0x368d (the exact placement of the bytes
3425depends upon the endianness of the processor).  If it skips 1 or 3
3426bytes, the fill value is undefined.
3427
3428
3429File: as.info,  Node: Bundle directives,  Next: Byte,  Prev: Balign,  Up: Pseudo Ops
3430
34317.9 Bundle directives
3432=====================
3433
34347.9.1 '.bundle_align_mode ABS-EXPR'
3435-----------------------------------
3436
3437'.bundle_align_mode' enables or disables "aligned instruction bundle"
3438mode.  In this mode, sequences of adjacent instructions are grouped into
3439fixed-sized "bundles".  If the argument is zero, this mode is disabled
3440(which is the default state).  If the argument it not zero, it gives the
3441size of an instruction bundle as a power of two (as for the '.p2align'
3442directive, *note P2align::).
3443
3444   For some targets, it's an ABI requirement that no instruction may
3445span a certain aligned boundary.  A "bundle" is simply a sequence of
3446instructions that starts on an aligned boundary.  For example, if
3447ABS-EXPR is '5' then the bundle size is 32, so each aligned chunk of 32
3448bytes is a bundle.  When aligned instruction bundle mode is in effect,
3449no single instruction may span a boundary between bundles.  If an
3450instruction would start too close to the end of a bundle for the length
3451of that particular instruction to fit within the bundle, then the space
3452at the end of that bundle is filled with no-op instructions so the
3453instruction starts in the next bundle.  As a corollary, it's an error if
3454any single instruction's encoding is longer than the bundle size.
3455
34567.9.2 '.bundle_lock' and '.bundle_unlock'
3457-----------------------------------------
3458
3459The '.bundle_lock' and directive '.bundle_unlock' directives allow
3460explicit control over instruction bundle padding.  These directives are
3461only valid when '.bundle_align_mode' has been used to enable aligned
3462instruction bundle mode.  It's an error if they appear when
3463'.bundle_align_mode' has not been used at all, or when the last
3464directive was '.bundle_align_mode 0'.
3465
3466   For some targets, it's an ABI requirement that certain instructions
3467may appear only as part of specified permissible sequences of multiple
3468instructions, all within the same bundle.  A pair of '.bundle_lock' and
3469'.bundle_unlock' directives define a "bundle-locked" instruction
3470sequence.  For purposes of aligned instruction bundle mode, a sequence
3471starting with '.bundle_lock' and ending with '.bundle_unlock' is treated
3472as a single instruction.  That is, the entire sequence must fit into a
3473single bundle and may not span a bundle boundary.  If necessary, no-op
3474instructions will be inserted before the first instruction of the
3475sequence so that the whole sequence starts on an aligned bundle
3476boundary.  It's an error if the sequence is longer than the bundle size.
3477
3478   For convenience when using '.bundle_lock' and '.bundle_unlock' inside
3479assembler macros (*note Macro::), bundle-locked sequences may be nested.
3480That is, a second '.bundle_lock' directive before the next
3481'.bundle_unlock' directive has no effect except that it must be matched
3482by another closing '.bundle_unlock' so that there is the same number of
3483'.bundle_lock' and '.bundle_unlock' directives.
3484
3485
3486File: as.info,  Node: Byte,  Next: CFI directives,  Prev: Bundle directives,  Up: Pseudo Ops
3487
34887.10 '.byte EXPRESSIONS'
3489========================
3490
3491'.byte' expects zero or more expressions, separated by commas.  Each
3492expression is assembled into the next byte.
3493
3494
3495File: as.info,  Node: CFI directives,  Next: Comm,  Prev: Byte,  Up: Pseudo Ops
3496
34977.11 CFI directives
3498===================
3499
35007.11.1 '.cfi_sections SECTION_LIST'
3501-----------------------------------
3502
3503'.cfi_sections' may be used to specify whether CFI directives should
3504emit '.eh_frame' section and/or '.debug_frame' section.  If SECTION_LIST
3505is '.eh_frame', '.eh_frame' is emitted, if SECTION_LIST is
3506'.debug_frame', '.debug_frame' is emitted.  To emit both use '.eh_frame,
3507.debug_frame'.  The default if this directive is not used is
3508'.cfi_sections .eh_frame'.
3509
3510   On targets that support compact unwinding tables these can be
3511generated by specifying '.eh_frame_entry' instead of '.eh_frame'.
3512
3513   Some targets may support an additional name, such as '.c6xabi.exidx'
3514which is used by the target.
3515
3516   The '.cfi_sections' directive can be repeated, with the same or
3517different arguments, provided that CFI generation has not yet started.
3518Once CFI generation has started however the section list is fixed and
3519any attempts to redefine it will result in an error.
3520
35217.11.2 '.cfi_startproc [simple]'
3522--------------------------------
3523
3524'.cfi_startproc' is used at the beginning of each function that should
3525have an entry in '.eh_frame'.  It initializes some internal data
3526structures.  Don't forget to close the function by '.cfi_endproc'.
3527
3528   Unless '.cfi_startproc' is used along with parameter 'simple' it also
3529emits some architecture dependent initial CFI instructions.
3530
35317.11.3 '.cfi_endproc'
3532---------------------
3533
3534'.cfi_endproc' is used at the end of a function where it closes its
3535unwind entry previously opened by '.cfi_startproc', and emits it to
3536'.eh_frame'.
3537
35387.11.4 '.cfi_personality ENCODING [, EXP]'
3539------------------------------------------
3540
3541'.cfi_personality' defines personality routine and its encoding.
3542ENCODING must be a constant determining how the personality should be
3543encoded.  If it is 255 ('DW_EH_PE_omit'), second argument is not
3544present, otherwise second argument should be a constant or a symbol
3545name.  When using indirect encodings, the symbol provided should be the
3546location where personality can be loaded from, not the personality
3547routine itself.  The default after '.cfi_startproc' is '.cfi_personality
35480xff', no personality routine.
3549
35507.11.5 '.cfi_personality_id ID'
3551-------------------------------
3552
3553'cfi_personality_id' defines a personality routine by its index as
3554defined in a compact unwinding format.  Only valid when generating
3555compact EH frames (i.e.  with '.cfi_sections eh_frame_entry'.
3556
35577.11.6 '.cfi_fde_data [OPCODE1 [, ...]]'
3558----------------------------------------
3559
3560'cfi_fde_data' is used to describe the compact unwind opcodes to be used
3561for the current function.  These are emitted inline in the
3562'.eh_frame_entry' section if small enough and there is no LSDA, or in
3563the '.gnu.extab' section otherwise.  Only valid when generating compact
3564EH frames (i.e.  with '.cfi_sections eh_frame_entry'.
3565
35667.11.7 '.cfi_lsda ENCODING [, EXP]'
3567-----------------------------------
3568
3569'.cfi_lsda' defines LSDA and its encoding.  ENCODING must be a constant
3570determining how the LSDA should be encoded.  If it is 255
3571('DW_EH_PE_omit'), the second argument is not present, otherwise the
3572second argument should be a constant or a symbol name.  The default
3573after '.cfi_startproc' is '.cfi_lsda 0xff', meaning that no LSDA is
3574present.
3575
35767.11.8 '.cfi_inline_lsda' [ALIGN]
3577---------------------------------
3578
3579'.cfi_inline_lsda' marks the start of a LSDA data section and switches
3580to the corresponding '.gnu.extab' section.  Must be preceded by a CFI
3581block containing a '.cfi_lsda' directive.  Only valid when generating
3582compact EH frames (i.e.  with '.cfi_sections eh_frame_entry'.
3583
3584   The table header and unwinding opcodes will be generated at this
3585point, so that they are immediately followed by the LSDA data.  The
3586symbol referenced by the '.cfi_lsda' directive should still be defined
3587in case a fallback FDE based encoding is used.  The LSDA data is
3588terminated by a section directive.
3589
3590   The optional ALIGN argument specifies the alignment required.  The
3591alignment is specified as a power of two, as with the '.p2align'
3592directive.
3593
35947.11.9 '.cfi_def_cfa REGISTER, OFFSET'
3595--------------------------------------
3596
3597'.cfi_def_cfa' defines a rule for computing CFA as: take address from
3598REGISTER and add OFFSET to it.
3599
36007.11.10 '.cfi_def_cfa_register REGISTER'
3601----------------------------------------
3602
3603'.cfi_def_cfa_register' modifies a rule for computing CFA. From now on
3604REGISTER will be used instead of the old one.  Offset remains the same.
3605
36067.11.11 '.cfi_def_cfa_offset OFFSET'
3607------------------------------------
3608
3609'.cfi_def_cfa_offset' modifies a rule for computing CFA. Register
3610remains the same, but OFFSET is new.  Note that it is the absolute
3611offset that will be added to a defined register to compute CFA address.
3612
36137.11.12 '.cfi_adjust_cfa_offset OFFSET'
3614---------------------------------------
3615
3616Same as '.cfi_def_cfa_offset' but OFFSET is a relative value that is
3617added/subtracted from the previous offset.
3618
36197.11.13 '.cfi_offset REGISTER, OFFSET'
3620--------------------------------------
3621
3622Previous value of REGISTER is saved at offset OFFSET from CFA.
3623
36247.11.14 '.cfi_val_offset REGISTER, OFFSET'
3625------------------------------------------
3626
3627Previous value of REGISTER is CFA + OFFSET.
3628
36297.11.15 '.cfi_rel_offset REGISTER, OFFSET'
3630------------------------------------------
3631
3632Previous value of REGISTER is saved at offset OFFSET from the current
3633CFA register.  This is transformed to '.cfi_offset' using the known
3634displacement of the CFA register from the CFA. This is often easier to
3635use, because the number will match the code it's annotating.
3636
36377.11.16 '.cfi_register REGISTER1, REGISTER2'
3638--------------------------------------------
3639
3640Previous value of REGISTER1 is saved in register REGISTER2.
3641
36427.11.17 '.cfi_restore REGISTER'
3643-------------------------------
3644
3645'.cfi_restore' says that the rule for REGISTER is now the same as it was
3646at the beginning of the function, after all initial instruction added by
3647'.cfi_startproc' were executed.
3648
36497.11.18 '.cfi_undefined REGISTER'
3650---------------------------------
3651
3652From now on the previous value of REGISTER can't be restored anymore.
3653
36547.11.19 '.cfi_same_value REGISTER'
3655----------------------------------
3656
3657Current value of REGISTER is the same like in the previous frame, i.e.
3658no restoration needed.
3659
36607.11.20 '.cfi_remember_state' and '.cfi_restore_state'
3661------------------------------------------------------
3662
3663'.cfi_remember_state' pushes the set of rules for every register onto an
3664implicit stack, while '.cfi_restore_state' pops them off the stack and
3665places them in the current row.  This is useful for situations where you
3666have multiple '.cfi_*' directives that need to be undone due to the
3667control flow of the program.  For example, we could have something like
3668this (assuming the CFA is the value of 'rbp'):
3669
3670             je label
3671             popq %rbx
3672             .cfi_restore %rbx
3673             popq %r12
3674             .cfi_restore %r12
3675             popq %rbp
3676             .cfi_restore %rbp
3677             .cfi_def_cfa %rsp, 8
3678             ret
3679     label:
3680             /* Do something else */
3681
3682   Here, we want the '.cfi' directives to affect only the rows
3683corresponding to the instructions before 'label'.  This means we'd have
3684to add multiple '.cfi' directives after 'label' to recreate the original
3685save locations of the registers, as well as setting the CFA back to the
3686value of 'rbp'.  This would be clumsy, and result in a larger binary
3687size.  Instead, we can write:
3688
3689             je label
3690             popq %rbx
3691             .cfi_remember_state
3692             .cfi_restore %rbx
3693             popq %r12
3694             .cfi_restore %r12
3695             popq %rbp
3696             .cfi_restore %rbp
3697             .cfi_def_cfa %rsp, 8
3698             ret
3699     label:
3700             .cfi_restore_state
3701             /* Do something else */
3702
3703   That way, the rules for the instructions after 'label' will be the
3704same as before the first '.cfi_restore' without having to use multiple
3705'.cfi' directives.
3706
37077.11.21 '.cfi_return_column REGISTER'
3708-------------------------------------
3709
3710Change return column REGISTER, i.e.  the return address is either
3711directly in REGISTER or can be accessed by rules for REGISTER.
3712
37137.11.22 '.cfi_signal_frame'
3714---------------------------
3715
3716Mark current function as signal trampoline.
3717
37187.11.23 '.cfi_window_save'
3719--------------------------
3720
3721SPARC register window has been saved.
3722
37237.11.24 '.cfi_escape' EXPRESSION[, ...]
3724---------------------------------------
3725
3726Allows the user to add arbitrary bytes to the unwind info.  One might
3727use this to add OS-specific CFI opcodes, or generic CFI opcodes that GAS
3728does not yet support.
3729
37307.11.25 '.cfi_val_encoded_addr REGISTER, ENCODING, LABEL'
3731---------------------------------------------------------
3732
3733The current value of REGISTER is LABEL.  The value of LABEL will be
3734encoded in the output file according to ENCODING; see the description of
3735'.cfi_personality' for details on this encoding.
3736
3737   The usefulness of equating a register to a fixed label is probably
3738limited to the return address register.  Here, it can be useful to mark
3739a code segment that has only one return address which is reached by a
3740direct branch and no copy of the return address exists in memory or
3741another register.
3742
3743
3744File: as.info,  Node: Comm,  Next: Data,  Prev: CFI directives,  Up: Pseudo Ops
3745
37467.12 '.comm SYMBOL , LENGTH '
3747=============================
3748
3749'.comm' declares a common symbol named SYMBOL.  When linking, a common
3750symbol in one object file may be merged with a defined or common symbol
3751of the same name in another object file.  If 'ld' does not see a
3752definition for the symbol-just one or more common symbols-then it will
3753allocate LENGTH bytes of uninitialized memory.  LENGTH must be an
3754absolute expression.  If 'ld' sees multiple common symbols with the same
3755name, and they do not all have the same size, it will allocate space
3756using the largest size.
3757
3758   When using ELF or (as a GNU extension) PE, the '.comm' directive
3759takes an optional third argument.  This is the desired alignment of the
3760symbol, specified for ELF as a byte boundary (for example, an alignment
3761of 16 means that the least significant 4 bits of the address should be
3762zero), and for PE as a power of two (for example, an alignment of 5
3763means aligned to a 32-byte boundary).  The alignment must be an absolute
3764expression, and it must be a power of two.  If 'ld' allocates
3765uninitialized memory for the common symbol, it will use the alignment
3766when placing the symbol.  If no alignment is specified, 'as' will set
3767the alignment to the largest power of two less than or equal to the size
3768of the symbol, up to a maximum of 16 on ELF, or the default section
3769alignment of 4 on PE(1).
3770
3771   The syntax for '.comm' differs slightly on the HPPA. The syntax is
3772'SYMBOL .comm, LENGTH'; SYMBOL is optional.
3773
3774   ---------- Footnotes ----------
3775
3776   (1) This is not the same as the executable image file alignment
3777controlled by 'ld''s '--section-alignment' option; image file sections
3778in PE are aligned to multiples of 4096, which is far too large an
3779alignment for ordinary variables.  It is rather the default alignment
3780for (non-debug) sections within object ('*.o') files, which are less
3781strictly aligned.
3782
3783
3784File: as.info,  Node: Data,  Next: Dc,  Prev: Comm,  Up: Pseudo Ops
3785
37867.13 '.data SUBSECTION'
3787=======================
3788
3789'.data' tells 'as' to assemble the following statements onto the end of
3790the data subsection numbered SUBSECTION (which is an absolute
3791expression).  If SUBSECTION is omitted, it defaults to zero.
3792
3793
3794File: as.info,  Node: Dc,  Next: Dcb,  Prev: Data,  Up: Pseudo Ops
3795
37967.14 '.dc[SIZE] EXPRESSIONS'
3797============================
3798
3799The '.dc' directive expects zero or more EXPRESSIONS separated by
3800commas.  These expressions are evaluated and their values inserted into
3801the current section.  The size of the emitted value depends upon the
3802suffix to the '.dc' directive:
3803
3804''.a''
3805     Emits N-bit values, where N is the size of an address on the target
3806     system.
3807''.b''
3808     Emits 8-bit values.
3809''.d''
3810     Emits double precision floating-point values.
3811''.l''
3812     Emits 32-bit values.
3813''.s''
3814     Emits single precision floating-point values.
3815''.w''
3816     Emits 16-bit values.  Note - this is true even on targets where the
3817     '.word' directive would emit 32-bit values.
3818''.x''
3819     Emits long double precision floating-point values.
3820
3821   If no suffix is used then '.w' is assumed.
3822
3823   The byte ordering is target dependent, as is the size and format of
3824floating point values.
3825
3826
3827File: as.info,  Node: Dcb,  Next: Ds,  Prev: Dc,  Up: Pseudo Ops
3828
38297.15 '.dcb[SIZE] NUMBER [,FILL]'
3830================================
3831
3832This directive emits NUMBER copies of FILL, each of SIZE bytes.  Both
3833NUMBER and FILL are absolute expressions.  If the comma and FILL are
3834omitted, FILL is assumed to be zero.  The SIZE suffix, if present, must
3835be one of:
3836
3837''.b''
3838     Emits single byte values.
3839''.d''
3840     Emits double-precision floating point values.
3841''.l''
3842     Emits 4-byte values.
3843''.s''
3844     Emits single-precision floating point values.
3845''.w''
3846     Emits 2-byte values.
3847''.x''
3848     Emits long double-precision floating point values.
3849
3850   If the SIZE suffix is omitted then '.w' is assumed.
3851
3852   The byte ordering is target dependent, as is the size and format of
3853floating point values.
3854
3855
3856File: as.info,  Node: Ds,  Next: Def,  Prev: Dcb,  Up: Pseudo Ops
3857
38587.16 '.ds[SIZE] NUMBER [,FILL]'
3859===============================
3860
3861This directive emits NUMBER copies of FILL, each of SIZE bytes.  Both
3862NUMBER and FILL are absolute expressions.  If the comma and FILL are
3863omitted, FILL is assumed to be zero.  The SIZE suffix, if present, must
3864be one of:
3865
3866''.b''
3867     Emits single byte values.
3868''.d''
3869     Emits 8-byte values.
3870''.l''
3871     Emits 4-byte values.
3872''.p''
3873     Emits 12-byte values.
3874''.s''
3875     Emits 4-byte values.
3876''.w''
3877     Emits 2-byte values.
3878''.x''
3879     Emits 12-byte values.
3880
3881   Note - unlike the '.dcb' directive the '.d', '.s' and '.x' suffixes
3882do not indicate that floating-point values are to be inserted.
3883
3884   If the SIZE suffix is omitted then '.w' is assumed.
3885
3886   The byte ordering is target dependent.
3887
3888
3889File: as.info,  Node: Def,  Next: Desc,  Prev: Ds,  Up: Pseudo Ops
3890
38917.17 '.def NAME'
3892================
3893
3894Begin defining debugging information for a symbol NAME; the definition
3895extends until the '.endef' directive is encountered.
3896
3897
3898File: as.info,  Node: Desc,  Next: Dim,  Prev: Def,  Up: Pseudo Ops
3899
39007.18 '.desc SYMBOL, ABS-EXPRESSION'
3901===================================
3902
3903This directive sets the descriptor of the symbol (*note Symbol
3904Attributes::) to the low 16 bits of an absolute expression.
3905
3906   The '.desc' directive is not available when 'as' is configured for
3907COFF output; it is only for 'a.out' or 'b.out' object format.  For the
3908sake of compatibility, 'as' accepts it, but produces no output, when
3909configured for COFF.
3910
3911
3912File: as.info,  Node: Dim,  Next: Double,  Prev: Desc,  Up: Pseudo Ops
3913
39147.19 '.dim'
3915===========
3916
3917This directive is generated by compilers to include auxiliary debugging
3918information in the symbol table.  It is only permitted inside
3919'.def'/'.endef' pairs.
3920
3921
3922File: as.info,  Node: Double,  Next: Eject,  Prev: Dim,  Up: Pseudo Ops
3923
39247.20 '.double FLONUMS'
3925======================
3926
3927'.double' expects zero or more flonums, separated by commas.  It
3928assembles floating point numbers.  The exact kind of floating point
3929numbers emitted depends on how 'as' is configured.  *Note Machine
3930Dependencies::.
3931
3932
3933File: as.info,  Node: Eject,  Next: Else,  Prev: Double,  Up: Pseudo Ops
3934
39357.21 '.eject'
3936=============
3937
3938Force a page break at this point, when generating assembly listings.
3939
3940
3941File: as.info,  Node: Else,  Next: Elseif,  Prev: Eject,  Up: Pseudo Ops
3942
39437.22 '.else'
3944============
3945
3946'.else' is part of the 'as' support for conditional assembly; see *note
3947'.if': If.  It marks the beginning of a section of code to be assembled
3948if the condition for the preceding '.if' was false.
3949
3950
3951File: as.info,  Node: Elseif,  Next: End,  Prev: Else,  Up: Pseudo Ops
3952
39537.23 '.elseif'
3954==============
3955
3956'.elseif' is part of the 'as' support for conditional assembly; see
3957*note '.if': If.  It is shorthand for beginning a new '.if' block that
3958would otherwise fill the entire '.else' section.
3959
3960
3961File: as.info,  Node: End,  Next: Endef,  Prev: Elseif,  Up: Pseudo Ops
3962
39637.24 '.end'
3964===========
3965
3966'.end' marks the end of the assembly file.  'as' does not process
3967anything in the file past the '.end' directive.
3968
3969
3970File: as.info,  Node: Endef,  Next: Endfunc,  Prev: End,  Up: Pseudo Ops
3971
39727.25 '.endef'
3973=============
3974
3975This directive flags the end of a symbol definition begun with '.def'.
3976
3977
3978File: as.info,  Node: Endfunc,  Next: Endif,  Prev: Endef,  Up: Pseudo Ops
3979
39807.26 '.endfunc'
3981===============
3982
3983'.endfunc' marks the end of a function specified with '.func'.
3984
3985
3986File: as.info,  Node: Endif,  Next: Equ,  Prev: Endfunc,  Up: Pseudo Ops
3987
39887.27 '.endif'
3989=============
3990
3991'.endif' is part of the 'as' support for conditional assembly; it marks
3992the end of a block of code that is only assembled conditionally.  *Note
3993'.if': If.
3994
3995
3996File: as.info,  Node: Equ,  Next: Equiv,  Prev: Endif,  Up: Pseudo Ops
3997
39987.28 '.equ SYMBOL, EXPRESSION'
3999==============================
4000
4001This directive sets the value of SYMBOL to EXPRESSION.  It is synonymous
4002with '.set'; see *note '.set': Set.
4003
4004   The syntax for 'equ' on the HPPA is 'SYMBOL .equ EXPRESSION'.
4005
4006   The syntax for 'equ' on the Z80 is 'SYMBOL equ EXPRESSION'.  On the
4007Z80 it is an error if SYMBOL is already defined, but the symbol is not
4008protected from later redefinition.  Compare *note Equiv::.
4009
4010
4011File: as.info,  Node: Equiv,  Next: Eqv,  Prev: Equ,  Up: Pseudo Ops
4012
40137.29 '.equiv SYMBOL, EXPRESSION'
4014================================
4015
4016The '.equiv' directive is like '.equ' and '.set', except that the
4017assembler will signal an error if SYMBOL is already defined.  Note a
4018symbol which has been referenced but not actually defined is considered
4019to be undefined.
4020
4021   Except for the contents of the error message, this is roughly
4022equivalent to
4023     .ifdef SYM
4024     .err
4025     .endif
4026     .equ SYM,VAL
4027   plus it protects the symbol from later redefinition.
4028
4029
4030File: as.info,  Node: Eqv,  Next: Err,  Prev: Equiv,  Up: Pseudo Ops
4031
40327.30 '.eqv SYMBOL, EXPRESSION'
4033==============================
4034
4035The '.eqv' directive is like '.equiv', but no attempt is made to
4036evaluate the expression or any part of it immediately.  Instead each
4037time the resulting symbol is used in an expression, a snapshot of its
4038current value is taken.
4039
4040
4041File: as.info,  Node: Err,  Next: Error,  Prev: Eqv,  Up: Pseudo Ops
4042
40437.31 '.err'
4044===========
4045
4046If 'as' assembles a '.err' directive, it will print an error message
4047and, unless the '-Z' option was used, it will not generate an object
4048file.  This can be used to signal an error in conditionally compiled
4049code.
4050
4051
4052File: as.info,  Node: Error,  Next: Exitm,  Prev: Err,  Up: Pseudo Ops
4053
40547.32 '.error "STRING"'
4055======================
4056
4057Similarly to '.err', this directive emits an error, but you can specify
4058a string that will be emitted as the error message.  If you don't
4059specify the message, it defaults to '".error directive invoked in source
4060file"'.  *Note Error and Warning Messages: Errors.
4061
4062      .error "This code has not been assembled and tested."
4063
4064
4065File: as.info,  Node: Exitm,  Next: Extern,  Prev: Error,  Up: Pseudo Ops
4066
40677.33 '.exitm'
4068=============
4069
4070Exit early from the current macro definition.  *Note Macro::.
4071
4072
4073File: as.info,  Node: Extern,  Next: Fail,  Prev: Exitm,  Up: Pseudo Ops
4074
40757.34 '.extern'
4076==============
4077
4078'.extern' is accepted in the source program--for compatibility with
4079other assemblers--but it is ignored.  'as' treats all undefined symbols
4080as external.
4081
4082
4083File: as.info,  Node: Fail,  Next: File,  Prev: Extern,  Up: Pseudo Ops
4084
40857.35 '.fail EXPRESSION'
4086=======================
4087
4088Generates an error or a warning.  If the value of the EXPRESSION is 500
4089or more, 'as' will print a warning message.  If the value is less than
4090500, 'as' will print an error message.  The message will include the
4091value of EXPRESSION.  This can occasionally be useful inside complex
4092nested macros or conditional assembly.
4093
4094
4095File: as.info,  Node: File,  Next: Fill,  Prev: Fail,  Up: Pseudo Ops
4096
40977.36 '.file'
4098============
4099
4100There are two different versions of the '.file' directive.  Targets that
4101support DWARF2 line number information use the DWARF2 version of
4102'.file'.  Other targets use the default version.
4103
4104Default Version
4105---------------
4106
4107This version of the '.file' directive tells 'as' that we are about to
4108start a new logical file.  The syntax is:
4109
4110     .file STRING
4111
4112   STRING is the new file name.  In general, the filename is recognized
4113whether or not it is surrounded by quotes '"'; but if you wish to
4114specify an empty file name, you must give the quotes-'""'.  This
4115statement may go away in future: it is only recognized to be compatible
4116with old 'as' programs.
4117
4118DWARF2 Version
4119--------------
4120
4121When emitting DWARF2 line number information, '.file' assigns filenames
4122to the '.debug_line' file name table.  The syntax is:
4123
4124     .file FILENO FILENAME
4125
4126   The FILENO operand should be a unique positive integer to use as the
4127index of the entry in the table.  The FILENAME operand is a C string
4128literal enclosed in double quotes.  The FILENAME can include directory
4129elements.  If it does, then the directory will be added to the directory
4130table and the basename will be added to the file table.
4131
4132   The detail of filename indices is exposed to the user because the
4133filename table is shared with the '.debug_info' section of the DWARF2
4134debugging information, and thus the user must know the exact indices
4135that table entries will have.
4136
4137   If DWARF-5 support has been enabled via the '-gdwarf-5' option then
4138an extended version of the 'file' is also allowed:
4139
4140     .file FILENO [DIRNAME] FILENAME [md5 VALUE]
4141
4142   With this version a separate directory name is allowed, although if
4143this is used then FILENAME should not contain any directory components.
4144In addtion an md5 hash value of the contents of FILENAME can be
4145provided.  This will be stored in the the file table as well, and can be
4146used by tools reading the debug information to verify that the contents
4147of the source file match the contents of the compiled file.
4148
4149
4150File: as.info,  Node: Fill,  Next: Float,  Prev: File,  Up: Pseudo Ops
4151
41527.37 '.fill REPEAT , SIZE , VALUE'
4153==================================
4154
4155REPEAT, SIZE and VALUE are absolute expressions.  This emits REPEAT
4156copies of SIZE bytes.  REPEAT may be zero or more.  SIZE may be zero or
4157more, but if it is more than 8, then it is deemed to have the value 8,
4158compatible with other people's assemblers.  The contents of each REPEAT
4159bytes is taken from an 8-byte number.  The highest order 4 bytes are
4160zero.  The lowest order 4 bytes are VALUE rendered in the byte-order of
4161an integer on the computer 'as' is assembling for.  Each SIZE bytes in a
4162repetition is taken from the lowest order SIZE bytes of this number.
4163Again, this bizarre behavior is compatible with other people's
4164assemblers.
4165
4166   SIZE and VALUE are optional.  If the second comma and VALUE are
4167absent, VALUE is assumed zero.  If the first comma and following tokens
4168are absent, SIZE is assumed to be 1.
4169
4170
4171File: as.info,  Node: Float,  Next: Func,  Prev: Fill,  Up: Pseudo Ops
4172
41737.38 '.float FLONUMS'
4174=====================
4175
4176This directive assembles zero or more flonums, separated by commas.  It
4177has the same effect as '.single'.  The exact kind of floating point
4178numbers emitted depends on how 'as' is configured.  *Note Machine
4179Dependencies::.
4180
4181
4182File: as.info,  Node: Func,  Next: Global,  Prev: Float,  Up: Pseudo Ops
4183
41847.39 '.func NAME[,LABEL]'
4185=========================
4186
4187'.func' emits debugging information to denote function NAME, and is
4188ignored unless the file is assembled with debugging enabled.  Only
4189'--gstabs[+]' is currently supported.  LABEL is the entry point of the
4190function and if omitted NAME prepended with the 'leading char' is used.
4191'leading char' is usually '_' or nothing, depending on the target.  All
4192functions are currently defined to have 'void' return type.  The
4193function must be terminated with '.endfunc'.
4194
4195
4196File: as.info,  Node: Global,  Next: Gnu_attribute,  Prev: Func,  Up: Pseudo Ops
4197
41987.40 '.global SYMBOL', '.globl SYMBOL'
4199======================================
4200
4201'.global' makes the symbol visible to 'ld'.  If you define SYMBOL in
4202your partial program, its value is made available to other partial
4203programs that are linked with it.  Otherwise, SYMBOL takes its
4204attributes from a symbol of the same name from another file linked into
4205the same program.
4206
4207   Both spellings ('.globl' and '.global') are accepted, for
4208compatibility with other assemblers.
4209
4210   On the HPPA, '.global' is not always enough to make it accessible to
4211other partial programs.  You may need the HPPA-only '.EXPORT' directive
4212as well.  *Note HPPA Assembler Directives: HPPA Directives.
4213
4214
4215File: as.info,  Node: Gnu_attribute,  Next: Hidden,  Prev: Global,  Up: Pseudo Ops
4216
42177.41 '.gnu_attribute TAG,VALUE'
4218===============================
4219
4220Record a GNU object attribute for this file.  *Note Object Attributes::.
4221
4222
4223File: as.info,  Node: Hidden,  Next: hword,  Prev: Gnu_attribute,  Up: Pseudo Ops
4224
42257.42 '.hidden NAMES'
4226====================
4227
4228This is one of the ELF visibility directives.  The other two are
4229'.internal' (*note '.internal': Internal.) and '.protected' (*note
4230'.protected': Protected.).
4231
4232   This directive overrides the named symbols default visibility (which
4233is set by their binding: local, global or weak).  The directive sets the
4234visibility to 'hidden' which means that the symbols are not visible to
4235other components.  Such symbols are always considered to be 'protected'
4236as well.
4237
4238
4239File: as.info,  Node: hword,  Next: Ident,  Prev: Hidden,  Up: Pseudo Ops
4240
42417.43 '.hword EXPRESSIONS'
4242=========================
4243
4244This expects zero or more EXPRESSIONS, and emits a 16 bit number for
4245each.
4246
4247   This directive is a synonym for '.short'; depending on the target
4248architecture, it may also be a synonym for '.word'.
4249
4250
4251File: as.info,  Node: Ident,  Next: If,  Prev: hword,  Up: Pseudo Ops
4252
42537.44 '.ident'
4254=============
4255
4256This directive is used by some assemblers to place tags in object files.
4257The behavior of this directive varies depending on the target.  When
4258using the a.out object file format, 'as' simply accepts the directive
4259for source-file compatibility with existing assemblers, but does not
4260emit anything for it.  When using COFF, comments are emitted to the
4261'.comment' or '.rdata' section, depending on the target.  When using
4262ELF, comments are emitted to the '.comment' section.
4263
4264
4265File: as.info,  Node: If,  Next: Incbin,  Prev: Ident,  Up: Pseudo Ops
4266
42677.45 '.if ABSOLUTE EXPRESSION'
4268==============================
4269
4270'.if' marks the beginning of a section of code which is only considered
4271part of the source program being assembled if the argument (which must
4272be an ABSOLUTE EXPRESSION) is non-zero.  The end of the conditional
4273section of code must be marked by '.endif' (*note '.endif': Endif.);
4274optionally, you may include code for the alternative condition, flagged
4275by '.else' (*note '.else': Else.).  If you have several conditions to
4276check, '.elseif' may be used to avoid nesting blocks if/else within each
4277subsequent '.else' block.
4278
4279   The following variants of '.if' are also supported:
4280'.ifdef SYMBOL'
4281     Assembles the following section of code if the specified SYMBOL has
4282     been defined.  Note a symbol which has been referenced but not yet
4283     defined is considered to be undefined.
4284
4285'.ifb TEXT'
4286     Assembles the following section of code if the operand is blank
4287     (empty).
4288
4289'.ifc STRING1,STRING2'
4290     Assembles the following section of code if the two strings are the
4291     same.  The strings may be optionally quoted with single quotes.  If
4292     they are not quoted, the first string stops at the first comma, and
4293     the second string stops at the end of the line.  Strings which
4294     contain whitespace should be quoted.  The string comparison is case
4295     sensitive.
4296
4297'.ifeq ABSOLUTE EXPRESSION'
4298     Assembles the following section of code if the argument is zero.
4299
4300'.ifeqs STRING1,STRING2'
4301     Another form of '.ifc'.  The strings must be quoted using double
4302     quotes.
4303
4304'.ifge ABSOLUTE EXPRESSION'
4305     Assembles the following section of code if the argument is greater
4306     than or equal to zero.
4307
4308'.ifgt ABSOLUTE EXPRESSION'
4309     Assembles the following section of code if the argument is greater
4310     than zero.
4311
4312'.ifle ABSOLUTE EXPRESSION'
4313     Assembles the following section of code if the argument is less
4314     than or equal to zero.
4315
4316'.iflt ABSOLUTE EXPRESSION'
4317     Assembles the following section of code if the argument is less
4318     than zero.
4319
4320'.ifnb TEXT'
4321     Like '.ifb', but the sense of the test is reversed: this assembles
4322     the following section of code if the operand is non-blank
4323     (non-empty).
4324
4325'.ifnc STRING1,STRING2.'
4326     Like '.ifc', but the sense of the test is reversed: this assembles
4327     the following section of code if the two strings are not the same.
4328
4329'.ifndef SYMBOL'
4330'.ifnotdef SYMBOL'
4331     Assembles the following section of code if the specified SYMBOL has
4332     not been defined.  Both spelling variants are equivalent.  Note a
4333     symbol which has been referenced but not yet defined is considered
4334     to be undefined.
4335
4336'.ifne ABSOLUTE EXPRESSION'
4337     Assembles the following section of code if the argument is not
4338     equal to zero (in other words, this is equivalent to '.if').
4339
4340'.ifnes STRING1,STRING2'
4341     Like '.ifeqs', but the sense of the test is reversed: this
4342     assembles the following section of code if the two strings are not
4343     the same.
4344
4345
4346File: as.info,  Node: Incbin,  Next: Include,  Prev: If,  Up: Pseudo Ops
4347
43487.46 '.incbin "FILE"[,SKIP[,COUNT]]'
4349====================================
4350
4351The 'incbin' directive includes FILE verbatim at the current location.
4352You can control the search paths used with the '-I' command-line option
4353(*note Command-Line Options: Invoking.).  Quotation marks are required
4354around FILE.
4355
4356   The SKIP argument skips a number of bytes from the start of the FILE.
4357The COUNT argument indicates the maximum number of bytes to read.  Note
4358that the data is not aligned in any way, so it is the user's
4359responsibility to make sure that proper alignment is provided both
4360before and after the 'incbin' directive.
4361
4362
4363File: as.info,  Node: Include,  Next: Int,  Prev: Incbin,  Up: Pseudo Ops
4364
43657.47 '.include "FILE"'
4366======================
4367
4368This directive provides a way to include supporting files at specified
4369points in your source program.  The code from FILE is assembled as if it
4370followed the point of the '.include'; when the end of the included file
4371is reached, assembly of the original file continues.  You can control
4372the search paths used with the '-I' command-line option (*note
4373Command-Line Options: Invoking.).  Quotation marks are required around
4374FILE.
4375
4376
4377File: as.info,  Node: Int,  Next: Internal,  Prev: Include,  Up: Pseudo Ops
4378
43797.48 '.int EXPRESSIONS'
4380=======================
4381
4382Expect zero or more EXPRESSIONS, of any section, separated by commas.
4383For each expression, emit a number that, at run time, is the value of
4384that expression.  The byte order and bit size of the number depends on
4385what kind of target the assembly is for.
4386
4387
4388File: as.info,  Node: Internal,  Next: Irp,  Prev: Int,  Up: Pseudo Ops
4389
43907.49 '.internal NAMES'
4391======================
4392
4393This is one of the ELF visibility directives.  The other two are
4394'.hidden' (*note '.hidden': Hidden.) and '.protected' (*note
4395'.protected': Protected.).
4396
4397   This directive overrides the named symbols default visibility (which
4398is set by their binding: local, global or weak).  The directive sets the
4399visibility to 'internal' which means that the symbols are considered to
4400be 'hidden' (i.e., not visible to other components), and that some
4401extra, processor specific processing must also be performed upon the
4402symbols as well.
4403
4404
4405File: as.info,  Node: Irp,  Next: Irpc,  Prev: Internal,  Up: Pseudo Ops
4406
44077.50 '.irp SYMBOL,VALUES'...
4408============================
4409
4410Evaluate a sequence of statements assigning different values to SYMBOL.
4411The sequence of statements starts at the '.irp' directive, and is
4412terminated by an '.endr' directive.  For each VALUE, SYMBOL is set to
4413VALUE, and the sequence of statements is assembled.  If no VALUE is
4414listed, the sequence of statements is assembled once, with SYMBOL set to
4415the null string.  To refer to SYMBOL within the sequence of statements,
4416use \SYMBOL.
4417
4418   For example, assembling
4419
4420             .irp    param,1,2,3
4421             move    d\param,sp@-
4422             .endr
4423
4424   is equivalent to assembling
4425
4426             move    d1,sp@-
4427             move    d2,sp@-
4428             move    d3,sp@-
4429
4430   For some caveats with the spelling of SYMBOL, see also *note Macro::.
4431
4432
4433File: as.info,  Node: Irpc,  Next: Lcomm,  Prev: Irp,  Up: Pseudo Ops
4434
44357.51 '.irpc SYMBOL,VALUES'...
4436=============================
4437
4438Evaluate a sequence of statements assigning different values to SYMBOL.
4439The sequence of statements starts at the '.irpc' directive, and is
4440terminated by an '.endr' directive.  For each character in VALUE, SYMBOL
4441is set to the character, and the sequence of statements is assembled.
4442If no VALUE is listed, the sequence of statements is assembled once,
4443with SYMBOL set to the null string.  To refer to SYMBOL within the
4444sequence of statements, use \SYMBOL.
4445
4446   For example, assembling
4447
4448             .irpc    param,123
4449             move    d\param,sp@-
4450             .endr
4451
4452   is equivalent to assembling
4453
4454             move    d1,sp@-
4455             move    d2,sp@-
4456             move    d3,sp@-
4457
4458   For some caveats with the spelling of SYMBOL, see also the discussion
4459at *Note Macro::.
4460
4461
4462File: as.info,  Node: Lcomm,  Next: Lflags,  Prev: Irpc,  Up: Pseudo Ops
4463
44647.52 '.lcomm SYMBOL , LENGTH'
4465=============================
4466
4467Reserve LENGTH (an absolute expression) bytes for a local common denoted
4468by SYMBOL.  The section and value of SYMBOL are those of the new local
4469common.  The addresses are allocated in the bss section, so that at
4470run-time the bytes start off zeroed.  SYMBOL is not declared global
4471(*note '.global': Global.), so is normally not visible to 'ld'.
4472
4473   Some targets permit a third argument to be used with '.lcomm'.  This
4474argument specifies the desired alignment of the symbol in the bss
4475section.
4476
4477   The syntax for '.lcomm' differs slightly on the HPPA. The syntax is
4478'SYMBOL .lcomm, LENGTH'; SYMBOL is optional.
4479
4480
4481File: as.info,  Node: Lflags,  Next: Line,  Prev: Lcomm,  Up: Pseudo Ops
4482
44837.53 '.lflags'
4484==============
4485
4486'as' accepts this directive, for compatibility with other assemblers,
4487but ignores it.
4488
4489
4490File: as.info,  Node: Line,  Next: Linkonce,  Prev: Lflags,  Up: Pseudo Ops
4491
44927.54 '.line LINE-NUMBER'
4493========================
4494
4495Change the logical line number.  LINE-NUMBER must be an absolute
4496expression.  The next line has that logical line number.  Therefore any
4497other statements on the current line (after a statement separator
4498character) are reported as on logical line number LINE-NUMBER - 1.  One
4499day 'as' will no longer support this directive: it is recognized only
4500for compatibility with existing assembler programs.
4501
4502   Even though this is a directive associated with the 'a.out' or
4503'b.out' object-code formats, 'as' still recognizes it when producing
4504COFF output, and treats '.line' as though it were the COFF '.ln' _if_ it
4505is found outside a '.def'/'.endef' pair.
4506
4507   Inside a '.def', '.line' is, instead, one of the directives used by
4508compilers to generate auxiliary symbol information for debugging.
4509
4510
4511File: as.info,  Node: Linkonce,  Next: List,  Prev: Line,  Up: Pseudo Ops
4512
45137.55 '.linkonce [TYPE]'
4514=======================
4515
4516Mark the current section so that the linker only includes a single copy
4517of it.  This may be used to include the same section in several
4518different object files, but ensure that the linker will only include it
4519once in the final output file.  The '.linkonce' pseudo-op must be used
4520for each instance of the section.  Duplicate sections are detected based
4521on the section name, so it should be unique.
4522
4523   This directive is only supported by a few object file formats; as of
4524this writing, the only object file format which supports it is the
4525Portable Executable format used on Windows NT.
4526
4527   The TYPE argument is optional.  If specified, it must be one of the
4528following strings.  For example:
4529     .linkonce same_size
4530   Not all types may be supported on all object file formats.
4531
4532'discard'
4533     Silently discard duplicate sections.  This is the default.
4534
4535'one_only'
4536     Warn if there are duplicate sections, but still keep only one copy.
4537
4538'same_size'
4539     Warn if any of the duplicates have different sizes.
4540
4541'same_contents'
4542     Warn if any of the duplicates do not have exactly the same
4543     contents.
4544
4545
4546File: as.info,  Node: List,  Next: Ln,  Prev: Linkonce,  Up: Pseudo Ops
4547
45487.56 '.list'
4549============
4550
4551Control (in conjunction with the '.nolist' directive) whether or not
4552assembly listings are generated.  These two directives maintain an
4553internal counter (which is zero initially).  '.list' increments the
4554counter, and '.nolist' decrements it.  Assembly listings are generated
4555whenever the counter is greater than zero.
4556
4557   By default, listings are disabled.  When you enable them (with the
4558'-a' command-line option; *note Command-Line Options: Invoking.), the
4559initial value of the listing counter is one.
4560
4561
4562File: as.info,  Node: Ln,  Next: Loc,  Prev: List,  Up: Pseudo Ops
4563
45647.57 '.ln LINE-NUMBER'
4565======================
4566
4567'.ln' is a synonym for '.line'.
4568
4569
4570File: as.info,  Node: Loc,  Next: Loc_mark_labels,  Prev: Ln,  Up: Pseudo Ops
4571
45727.58 '.loc FILENO LINENO [COLUMN] [OPTIONS]'
4573============================================
4574
4575When emitting DWARF2 line number information, the '.loc' directive will
4576add a row to the '.debug_line' line number matrix corresponding to the
4577immediately following assembly instruction.  The FILENO, LINENO, and
4578optional COLUMN arguments will be applied to the '.debug_line' state
4579machine before the row is added.  It is an error for the input assembly
4580file to generate a non-empty '.debug_line' and also use 'loc'
4581directives.
4582
4583   The OPTIONS are a sequence of the following tokens in any order:
4584
4585'basic_block'
4586     This option will set the 'basic_block' register in the
4587     '.debug_line' state machine to 'true'.
4588
4589'prologue_end'
4590     This option will set the 'prologue_end' register in the
4591     '.debug_line' state machine to 'true'.
4592
4593'epilogue_begin'
4594     This option will set the 'epilogue_begin' register in the
4595     '.debug_line' state machine to 'true'.
4596
4597'is_stmt VALUE'
4598     This option will set the 'is_stmt' register in the '.debug_line'
4599     state machine to 'value', which must be either 0 or 1.
4600
4601'isa VALUE'
4602     This directive will set the 'isa' register in the '.debug_line'
4603     state machine to VALUE, which must be an unsigned integer.
4604
4605'discriminator VALUE'
4606     This directive will set the 'discriminator' register in the
4607     '.debug_line' state machine to VALUE, which must be an unsigned
4608     integer.
4609
4610'view VALUE'
4611     This option causes a row to be added to '.debug_line' in reference
4612     to the current address (which might not be the same as that of the
4613     following assembly instruction), and to associate VALUE with the
4614     'view' register in the '.debug_line' state machine.  If VALUE is a
4615     label, both the 'view' register and the label are set to the number
4616     of prior '.loc' directives at the same program location.  If VALUE
4617     is the literal '0', the 'view' register is set to zero, and the
4618     assembler asserts that there aren't any prior '.loc' directives at
4619     the same program location.  If VALUE is the literal '-0', the
4620     assembler arrange for the 'view' register to be reset in this row,
4621     even if there are prior '.loc' directives at the same program
4622     location.
4623
4624
4625File: as.info,  Node: Loc_mark_labels,  Next: Local,  Prev: Loc,  Up: Pseudo Ops
4626
46277.59 '.loc_mark_labels ENABLE'
4628==============================
4629
4630When emitting DWARF2 line number information, the '.loc_mark_labels'
4631directive makes the assembler emit an entry to the '.debug_line' line
4632number matrix with the 'basic_block' register in the state machine set
4633whenever a code label is seen.  The ENABLE argument should be either 1
4634or 0, to enable or disable this function respectively.
4635
4636
4637File: as.info,  Node: Local,  Next: Long,  Prev: Loc_mark_labels,  Up: Pseudo Ops
4638
46397.60 '.local NAMES'
4640===================
4641
4642This directive, which is available for ELF targets, marks each symbol in
4643the comma-separated list of 'names' as a local symbol so that it will
4644not be externally visible.  If the symbols do not already exist, they
4645will be created.
4646
4647   For targets where the '.lcomm' directive (*note Lcomm::) does not
4648accept an alignment argument, which is the case for most ELF targets,
4649the '.local' directive can be used in combination with '.comm' (*note
4650Comm::) to define aligned local common data.
4651
4652
4653File: as.info,  Node: Long,  Next: Macro,  Prev: Local,  Up: Pseudo Ops
4654
46557.61 '.long EXPRESSIONS'
4656========================
4657
4658'.long' is the same as '.int'.  *Note '.int': Int.
4659
4660
4661File: as.info,  Node: Macro,  Next: MRI,  Prev: Long,  Up: Pseudo Ops
4662
46637.62 '.macro'
4664=============
4665
4666The commands '.macro' and '.endm' allow you to define macros that
4667generate assembly output.  For example, this definition specifies a
4668macro 'sum' that puts a sequence of numbers into memory:
4669
4670             .macro  sum from=0, to=5
4671             .long   \from
4672             .if     \to-\from
4673             sum     "(\from+1)",\to
4674             .endif
4675             .endm
4676
4677With that definition, 'SUM 0,5' is equivalent to this assembly input:
4678
4679             .long   0
4680             .long   1
4681             .long   2
4682             .long   3
4683             .long   4
4684             .long   5
4685
4686'.macro MACNAME'
4687'.macro MACNAME MACARGS ...'
4688     Begin the definition of a macro called MACNAME.  If your macro
4689     definition requires arguments, specify their names after the macro
4690     name, separated by commas or spaces.  You can qualify the macro
4691     argument to indicate whether all invocations must specify a
4692     non-blank value (through ':'req''), or whether it takes all of the
4693     remaining arguments (through ':'vararg'').  You can supply a
4694     default value for any macro argument by following the name with
4695     '=DEFLT'.  You cannot define two macros with the same MACNAME
4696     unless it has been subject to the '.purgem' directive (*note
4697     Purgem::) between the two definitions.  For example, these are all
4698     valid '.macro' statements:
4699
4700     '.macro comm'
4701          Begin the definition of a macro called 'comm', which takes no
4702          arguments.
4703
4704     '.macro plus1 p, p1'
4705     '.macro plus1 p p1'
4706          Either statement begins the definition of a macro called
4707          'plus1', which takes two arguments; within the macro
4708          definition, write '\p' or '\p1' to evaluate the arguments.
4709
4710     '.macro reserve_str p1=0 p2'
4711          Begin the definition of a macro called 'reserve_str', with two
4712          arguments.  The first argument has a default value, but not
4713          the second.  After the definition is complete, you can call
4714          the macro either as 'reserve_str A,B' (with '\p1' evaluating
4715          to A and '\p2' evaluating to B), or as 'reserve_str ,B' (with
4716          '\p1' evaluating as the default, in this case '0', and '\p2'
4717          evaluating to B).
4718
4719     '.macro m p1:req, p2=0, p3:vararg'
4720          Begin the definition of a macro called 'm', with at least
4721          three arguments.  The first argument must always have a value
4722          specified, but not the second, which instead has a default
4723          value.  The third formal will get assigned all remaining
4724          arguments specified at invocation time.
4725
4726          When you call a macro, you can specify the argument values
4727          either by position, or by keyword.  For example, 'sum 9,17' is
4728          equivalent to 'sum to=17, from=9'.
4729
4730     Note that since each of the MACARGS can be an identifier exactly as
4731     any other one permitted by the target architecture, there may be
4732     occasional problems if the target hand-crafts special meanings to
4733     certain characters when they occur in a special position.  For
4734     example, if the colon (':') is generally permitted to be part of a
4735     symbol name, but the architecture specific code special-cases it
4736     when occurring as the final character of a symbol (to denote a
4737     label), then the macro parameter replacement code will have no way
4738     of knowing that and consider the whole construct (including the
4739     colon) an identifier, and check only this identifier for being the
4740     subject to parameter substitution.  So for example this macro
4741     definition:
4742
4743          	.macro label l
4744          \l:
4745          	.endm
4746
4747     might not work as expected.  Invoking 'label foo' might not create
4748     a label called 'foo' but instead just insert the text '\l:' into
4749     the assembler source, probably generating an error about an
4750     unrecognised identifier.
4751
4752     Similarly problems might occur with the period character ('.')
4753     which is often allowed inside opcode names (and hence identifier
4754     names).  So for example constructing a macro to build an opcode
4755     from a base name and a length specifier like this:
4756
4757          	.macro opcode base length
4758                  \base.\length
4759          	.endm
4760
4761     and invoking it as 'opcode store l' will not create a 'store.l'
4762     instruction but instead generate some kind of error as the
4763     assembler tries to interpret the text '\base.\length'.
4764
4765     There are several possible ways around this problem:
4766
4767     'Insert white space'
4768          If it is possible to use white space characters then this is
4769          the simplest solution.  eg:
4770
4771               	.macro label l
4772               \l :
4773               	.endm
4774
4775     'Use '\()''
4776          The string '\()' can be used to separate the end of a macro
4777          argument from the following text.  eg:
4778
4779               	.macro opcode base length
4780                       \base\().\length
4781               	.endm
4782
4783     'Use the alternate macro syntax mode'
4784          In the alternative macro syntax mode the ampersand character
4785          ('&') can be used as a separator.  eg:
4786
4787               	.altmacro
4788               	.macro label l
4789               l&:
4790               	.endm
4791
4792     Note: this problem of correctly identifying string parameters to
4793     pseudo ops also applies to the identifiers used in '.irp' (*note
4794     Irp::) and '.irpc' (*note Irpc::) as well.
4795
4796'.endm'
4797     Mark the end of a macro definition.
4798
4799'.exitm'
4800     Exit early from the current macro definition.
4801
4802'\@'
4803     'as' maintains a counter of how many macros it has executed in this
4804     pseudo-variable; you can copy that number to your output with '\@',
4805     but _only within a macro definition_.
4806
4807'LOCAL NAME [ , ... ]'
4808     _Warning: 'LOCAL' is only available if you select "alternate macro
4809     syntax" with '--alternate' or '.altmacro'._  *Note '.altmacro':
4810     Altmacro.
4811
4812
4813File: as.info,  Node: MRI,  Next: Noaltmacro,  Prev: Macro,  Up: Pseudo Ops
4814
48157.63 '.mri VAL'
4816===============
4817
4818If VAL is non-zero, this tells 'as' to enter MRI mode.  If VAL is zero,
4819this tells 'as' to exit MRI mode.  This change affects code assembled
4820until the next '.mri' directive, or until the end of the file.  *Note
4821MRI mode: M.
4822
4823
4824File: as.info,  Node: Noaltmacro,  Next: Nolist,  Prev: MRI,  Up: Pseudo Ops
4825
48267.64 '.noaltmacro'
4827==================
4828
4829Disable alternate macro mode.  *Note Altmacro::.
4830
4831
4832File: as.info,  Node: Nolist,  Next: Nop,  Prev: Noaltmacro,  Up: Pseudo Ops
4833
48347.65 '.nolist'
4835==============
4836
4837Control (in conjunction with the '.list' directive) whether or not
4838assembly listings are generated.  These two directives maintain an
4839internal counter (which is zero initially).  '.list' increments the
4840counter, and '.nolist' decrements it.  Assembly listings are generated
4841whenever the counter is greater than zero.
4842
4843
4844File: as.info,  Node: Nop,  Next: Nops,  Prev: Nolist,  Up: Pseudo Ops
4845
48467.66 '.nop [SIZE]'
4847==================
4848
4849This directive emits no-op instructions.  It is provided on all
4850architectures, allowing the creation of architecture neutral tests
4851involving actual code.  The size of the generated instruction is target
4852specific, but if the optional SIZE argument is given and resolves to an
4853absolute positive value at that point in assembly (no forward
4854expressions allowed) then the fewest no-op instructions are emitted that
4855equal or exceed a total SIZE in bytes.  '.nop' does affect the
4856generation of DWARF debug line information.  Some targets do not support
4857using '.nop' with SIZE.
4858
4859
4860File: as.info,  Node: Nops,  Next: Octa,  Prev: Nop,  Up: Pseudo Ops
4861
48627.67 '.nops SIZE[, CONTROL]'
4863============================
4864
4865This directive emits no-op instructions.  It is specific to the Intel
486680386 and AMD x86-64 targets.  It takes a SIZE argument and generates
4867SIZE bytes of no-op instructions.  SIZE must be absolute and positive.
4868These bytes do not affect the generation of DWARF debug line
4869information.
4870
4871   The optional CONTROL argument specifies a size limit for a single
4872no-op instruction.  If not provided then a value of 0 is assumed.  The
4873valid values of CONTROL are between 0 and 4 in 16-bit mode, between 0
4874and 7 when tuning for older processors in 32-bit mode, between 0 and 11
4875in 64-bit mode or when tuning for newer processors in 32-bit mode.  When
48760 is used, the no-op instruction size limit is set to the maximum
4877supported size.
4878
4879
4880File: as.info,  Node: Octa,  Next: Offset,  Prev: Nops,  Up: Pseudo Ops
4881
48827.68 '.octa BIGNUMS'
4883====================
4884
4885This directive expects zero or more bignums, separated by commas.  For
4886each bignum, it emits a 16-byte integer.
4887
4888   The term "octa" comes from contexts in which a "word" is two bytes;
4889hence _octa_-word for 16 bytes.
4890
4891
4892File: as.info,  Node: Offset,  Next: Org,  Prev: Octa,  Up: Pseudo Ops
4893
48947.69 '.offset LOC'
4895==================
4896
4897Set the location counter to LOC in the absolute section.  LOC must be an
4898absolute expression.  This directive may be useful for defining symbols
4899with absolute values.  Do not confuse it with the '.org' directive.
4900
4901
4902File: as.info,  Node: Org,  Next: P2align,  Prev: Offset,  Up: Pseudo Ops
4903
49047.70 '.org NEW-LC , FILL'
4905=========================
4906
4907Advance the location counter of the current section to NEW-LC.  NEW-LC
4908is either an absolute expression or an expression with the same section
4909as the current subsection.  That is, you can't use '.org' to cross
4910sections: if NEW-LC has the wrong section, the '.org' directive is
4911ignored.  To be compatible with former assemblers, if the section of
4912NEW-LC is absolute, 'as' issues a warning, then pretends the section of
4913NEW-LC is the same as the current subsection.
4914
4915   '.org' may only increase the location counter, or leave it unchanged;
4916you cannot use '.org' to move the location counter backwards.
4917
4918   Because 'as' tries to assemble programs in one pass, NEW-LC may not
4919be undefined.  If you really detest this restriction we eagerly await a
4920chance to share your improved assembler.
4921
4922   Beware that the origin is relative to the start of the section, not
4923to the start of the subsection.  This is compatible with other people's
4924assemblers.
4925
4926   When the location counter (of the current subsection) is advanced,
4927the intervening bytes are filled with FILL which should be an absolute
4928expression.  If the comma and FILL are omitted, FILL defaults to zero.
4929
4930
4931File: as.info,  Node: P2align,  Next: PopSection,  Prev: Org,  Up: Pseudo Ops
4932
49337.71 '.p2align[wl] [ABS-EXPR[, ABS-EXPR[, ABS-EXPR]]]'
4934======================================================
4935
4936Pad the location counter (in the current subsection) to a particular
4937storage boundary.  The first expression (which must be absolute) is the
4938number of low-order zero bits the location counter must have after
4939advancement.  For example '.p2align 3' advances the location counter
4940until it is a multiple of 8.  If the location counter is already a
4941multiple of 8, no change is needed.  If the expression is omitted then a
4942default value of 0 is used, effectively disabling alignment
4943requirements.
4944
4945   The second expression (also absolute) gives the fill value to be
4946stored in the padding bytes.  It (and the comma) may be omitted.  If it
4947is omitted, the padding bytes are normally zero.  However, on most
4948systems, if the section is marked as containing code and the fill value
4949is omitted, the space is filled with no-op instructions.
4950
4951   The third expression is also absolute, and is also optional.  If it
4952is present, it is the maximum number of bytes that should be skipped by
4953this alignment directive.  If doing the alignment would require skipping
4954more bytes than the specified maximum, then the alignment is not done at
4955all.  You can omit the fill value (the second argument) entirely by
4956simply using two commas after the required alignment; this can be useful
4957if you want the alignment to be filled with no-op instructions when
4958appropriate.
4959
4960   The '.p2alignw' and '.p2alignl' directives are variants of the
4961'.p2align' directive.  The '.p2alignw' directive treats the fill pattern
4962as a two byte word value.  The '.p2alignl' directives treats the fill
4963pattern as a four byte longword value.  For example, '.p2alignw
49642,0x368d' will align to a multiple of 4.  If it skips two bytes, they
4965will be filled in with the value 0x368d (the exact placement of the
4966bytes depends upon the endianness of the processor).  If it skips 1 or 3
4967bytes, the fill value is undefined.
4968
4969
4970File: as.info,  Node: PopSection,  Next: Previous,  Prev: P2align,  Up: Pseudo Ops
4971
49727.72 '.popsection'
4973==================
4974
4975This is one of the ELF section stack manipulation directives.  The
4976others are '.section' (*note Section::), '.subsection' (*note
4977SubSection::), '.pushsection' (*note PushSection::), and '.previous'
4978(*note Previous::).
4979
4980   This directive replaces the current section (and subsection) with the
4981top section (and subsection) on the section stack.  This section is
4982popped off the stack.
4983
4984
4985File: as.info,  Node: Previous,  Next: Print,  Prev: PopSection,  Up: Pseudo Ops
4986
49877.73 '.previous'
4988================
4989
4990This is one of the ELF section stack manipulation directives.  The
4991others are '.section' (*note Section::), '.subsection' (*note
4992SubSection::), '.pushsection' (*note PushSection::), and '.popsection'
4993(*note PopSection::).
4994
4995   This directive swaps the current section (and subsection) with most
4996recently referenced section/subsection pair prior to this one.  Multiple
4997'.previous' directives in a row will flip between two sections (and
4998their subsections).  For example:
4999
5000     .section A
5001      .subsection 1
5002       .word 0x1234
5003      .subsection 2
5004       .word 0x5678
5005     .previous
5006      .word 0x9abc
5007
5008   Will place 0x1234 and 0x9abc into subsection 1 and 0x5678 into
5009subsection 2 of section A. Whilst:
5010
5011     .section A
5012     .subsection 1
5013       # Now in section A subsection 1
5014       .word 0x1234
5015     .section B
5016     .subsection 0
5017       # Now in section B subsection 0
5018       .word 0x5678
5019     .subsection 1
5020       # Now in section B subsection 1
5021       .word 0x9abc
5022     .previous
5023       # Now in section B subsection 0
5024       .word 0xdef0
5025
5026   Will place 0x1234 into section A, 0x5678 and 0xdef0 into subsection 0
5027of section B and 0x9abc into subsection 1 of section B.
5028
5029   In terms of the section stack, this directive swaps the current
5030section with the top section on the section stack.
5031
5032
5033File: as.info,  Node: Print,  Next: Protected,  Prev: Previous,  Up: Pseudo Ops
5034
50357.74 '.print STRING'
5036====================
5037
5038'as' will print STRING on the standard output during assembly.  You must
5039put STRING in double quotes.
5040
5041
5042File: as.info,  Node: Protected,  Next: Psize,  Prev: Print,  Up: Pseudo Ops
5043
50447.75 '.protected NAMES'
5045=======================
5046
5047This is one of the ELF visibility directives.  The other two are
5048'.hidden' (*note Hidden::) and '.internal' (*note Internal::).
5049
5050   This directive overrides the named symbols default visibility (which
5051is set by their binding: local, global or weak).  The directive sets the
5052visibility to 'protected' which means that any references to the symbols
5053from within the components that defines them must be resolved to the
5054definition in that component, even if a definition in another component
5055would normally preempt this.
5056
5057
5058File: as.info,  Node: Psize,  Next: Purgem,  Prev: Protected,  Up: Pseudo Ops
5059
50607.76 '.psize LINES , COLUMNS'
5061=============================
5062
5063Use this directive to declare the number of lines--and, optionally, the
5064number of columns--to use for each page, when generating listings.
5065
5066   If you do not use '.psize', listings use a default line-count of 60.
5067You may omit the comma and COLUMNS specification; the default width is
5068200 columns.
5069
5070   'as' generates formfeeds whenever the specified number of lines is
5071exceeded (or whenever you explicitly request one, using '.eject').
5072
5073   If you specify LINES as '0', no formfeeds are generated save those
5074explicitly specified with '.eject'.
5075
5076
5077File: as.info,  Node: Purgem,  Next: PushSection,  Prev: Psize,  Up: Pseudo Ops
5078
50797.77 '.purgem NAME'
5080===================
5081
5082Undefine the macro NAME, so that later uses of the string will not be
5083expanded.  *Note Macro::.
5084
5085
5086File: as.info,  Node: PushSection,  Next: Quad,  Prev: Purgem,  Up: Pseudo Ops
5087
50887.78 '.pushsection NAME [, SUBSECTION] [, "FLAGS"[, @TYPE[,ARGUMENTS]]]'
5089========================================================================
5090
5091This is one of the ELF section stack manipulation directives.  The
5092others are '.section' (*note Section::), '.subsection' (*note
5093SubSection::), '.popsection' (*note PopSection::), and '.previous'
5094(*note Previous::).
5095
5096   This directive pushes the current section (and subsection) onto the
5097top of the section stack, and then replaces the current section and
5098subsection with 'name' and 'subsection'.  The optional 'flags', 'type'
5099and 'arguments' are treated the same as in the '.section' (*note
5100Section::) directive.
5101
5102
5103File: as.info,  Node: Quad,  Next: Reloc,  Prev: PushSection,  Up: Pseudo Ops
5104
51057.79 '.quad BIGNUMS'
5106====================
5107
5108'.quad' expects zero or more bignums, separated by commas.  For each
5109bignum, it emits an 8-byte integer.  If the bignum won't fit in 8 bytes,
5110it prints a warning message; and just takes the lowest order 8 bytes of
5111the bignum.
5112
5113   The term "quad" comes from contexts in which a "word" is two bytes;
5114hence _quad_-word for 8 bytes.
5115
5116
5117File: as.info,  Node: Reloc,  Next: Rept,  Prev: Quad,  Up: Pseudo Ops
5118
51197.80 '.reloc OFFSET, RELOC_NAME[, EXPRESSION]'
5120==============================================
5121
5122Generate a relocation at OFFSET of type RELOC_NAME with value
5123EXPRESSION.  If OFFSET is a number, the relocation is generated in the
5124current section.  If OFFSET is an expression that resolves to a symbol
5125plus offset, the relocation is generated in the given symbol's section.
5126EXPRESSION, if present, must resolve to a symbol plus addend or to an
5127absolute value, but note that not all targets support an addend.  e.g.
5128ELF REL targets such as i386 store an addend in the section contents
5129rather than in the relocation.  This low level interface does not
5130support addends stored in the section.
5131
5132
5133File: as.info,  Node: Rept,  Next: Sbttl,  Prev: Reloc,  Up: Pseudo Ops
5134
51357.81 '.rept COUNT'
5136==================
5137
5138Repeat the sequence of lines between the '.rept' directive and the next
5139'.endr' directive COUNT times.
5140
5141   For example, assembling
5142
5143             .rept   3
5144             .long   0
5145             .endr
5146
5147   is equivalent to assembling
5148
5149             .long   0
5150             .long   0
5151             .long   0
5152
5153   A count of zero is allowed, but nothing is generated.  Negative
5154counts are not allowed and if encountered will be treated as if they
5155were zero.
5156
5157
5158File: as.info,  Node: Sbttl,  Next: Scl,  Prev: Rept,  Up: Pseudo Ops
5159
51607.82 '.sbttl "SUBHEADING"'
5161==========================
5162
5163Use SUBHEADING as the title (third line, immediately after the title
5164line) when generating assembly listings.
5165
5166   This directive affects subsequent pages, as well as the current page
5167if it appears within ten lines of the top of a page.
5168
5169
5170File: as.info,  Node: Scl,  Next: Section,  Prev: Sbttl,  Up: Pseudo Ops
5171
51727.83 '.scl CLASS'
5173=================
5174
5175Set the storage-class value for a symbol.  This directive may only be
5176used inside a '.def'/'.endef' pair.  Storage class may flag whether a
5177symbol is static or external, or it may record further symbolic
5178debugging information.
5179
5180
5181File: as.info,  Node: Section,  Next: Set,  Prev: Scl,  Up: Pseudo Ops
5182
51837.84 '.section NAME'
5184====================
5185
5186Use the '.section' directive to assemble the following code into a
5187section named NAME.
5188
5189   This directive is only supported for targets that actually support
5190arbitrarily named sections; on 'a.out' targets, for example, it is not
5191accepted, even with a standard 'a.out' section name.
5192
5193COFF Version
5194------------
5195
5196For COFF targets, the '.section' directive is used in one of the
5197following ways:
5198
5199     .section NAME[, "FLAGS"]
5200     .section NAME[, SUBSECTION]
5201
5202   If the optional argument is quoted, it is taken as flags to use for
5203the section.  Each flag is a single character.  The following flags are
5204recognized:
5205
5206'b'
5207     bss section (uninitialized data)
5208'n'
5209     section is not loaded
5210'w'
5211     writable section
5212'd'
5213     data section
5214'e'
5215     exclude section from linking
5216'r'
5217     read-only section
5218'x'
5219     executable section
5220's'
5221     shared section (meaningful for PE targets)
5222'a'
5223     ignored.  (For compatibility with the ELF version)
5224'y'
5225     section is not readable (meaningful for PE targets)
5226'0-9'
5227     single-digit power-of-two section alignment (GNU extension)
5228
5229   If no flags are specified, the default flags depend upon the section
5230name.  If the section name is not recognized, the default will be for
5231the section to be loaded and writable.  Note the 'n' and 'w' flags
5232remove attributes from the section, rather than adding them, so if they
5233are used on their own it will be as if no flags had been specified at
5234all.
5235
5236   If the optional argument to the '.section' directive is not quoted,
5237it is taken as a subsection number (*note Sub-Sections::).
5238
5239ELF Version
5240-----------
5241
5242This is one of the ELF section stack manipulation directives.  The
5243others are '.subsection' (*note SubSection::), '.pushsection' (*note
5244PushSection::), '.popsection' (*note PopSection::), and '.previous'
5245(*note Previous::).
5246
5247   For ELF targets, the '.section' directive is used like this:
5248
5249     .section NAME [, "FLAGS"[, @TYPE[,FLAG_SPECIFIC_ARGUMENTS]]]
5250
5251   If the '--sectname-subst' command-line option is provided, the NAME
5252argument may contain a substitution sequence.  Only '%S' is supported at
5253the moment, and substitutes the current section name.  For example:
5254
5255     .macro exception_code
5256     .section %S.exception
5257     [exception code here]
5258     .previous
5259     .endm
5260
5261     .text
5262     [code]
5263     exception_code
5264     [...]
5265
5266     .section .init
5267     [init code]
5268     exception_code
5269     [...]
5270
5271   The two 'exception_code' invocations above would create the
5272'.text.exception' and '.init.exception' sections respectively.  This is
5273useful e.g.  to discriminate between ancillary sections that are tied to
5274setup code to be discarded after use from ancillary sections that need
5275to stay resident without having to define multiple 'exception_code'
5276macros just for that purpose.
5277
5278   The optional FLAGS argument is a quoted string which may contain any
5279combination of the following characters:
5280
5281'a'
5282     section is allocatable
5283'd'
5284     section is a GNU_MBIND section
5285'e'
5286     section is excluded from executable and shared library.
5287'o'
5288     section references a symbol defined in another section (the
5289     linked-to section) in the same file.
5290'w'
5291     section is writable
5292'x'
5293     section is executable
5294'M'
5295     section is mergeable
5296'S'
5297     section contains zero terminated strings
5298'G'
5299     section is a member of a section group
5300'T'
5301     section is used for thread-local-storage
5302'?'
5303     section is a member of the previously-current section's group, if
5304     any
5305'R'
5306     retained section (apply SHF_GNU_RETAIN to prevent linker garbage
5307     collection, GNU ELF extension)
5308'<number>'
5309     a numeric value indicating the bits to be set in the ELF section
5310     header's flags field.  Note - if one or more of the alphabetic
5311     characters described above is also included in the flags field,
5312     their bit values will be ORed into the resulting value.
5313'<target specific>'
5314     some targets extend this list with their own flag characters
5315
5316   Note - once a section's flags have been set they cannot be changed.
5317There are a few exceptions to this rule however.  Processor and
5318application specific flags can be added to an already defined section.
5319The '.interp', '.strtab' and '.symtab' sections can have the allocate
5320flag ('a') set after they are initially defined, and the
5321'.note-GNU-stack' section may have the executable ('x') flag added.
5322Also note that the '.attach_to_group' directive can be used to add a
5323section to a group even if the section was not originally declared to be
5324part of that group.
5325
5326   The optional TYPE argument may contain one of the following
5327constants:
5328
5329'@progbits'
5330     section contains data
5331'@nobits'
5332     section does not contain data (i.e., section only occupies space)
5333'@note'
5334     section contains data which is used by things other than the
5335     program
5336'@init_array'
5337     section contains an array of pointers to init functions
5338'@fini_array'
5339     section contains an array of pointers to finish functions
5340'@preinit_array'
5341     section contains an array of pointers to pre-init functions
5342'@<number>'
5343     a numeric value to be set as the ELF section header's type field.
5344'@<target specific>'
5345     some targets extend this list with their own types
5346
5347   Many targets only support the first three section types.  The type
5348may be enclosed in double quotes if necessary.
5349
5350   Note on targets where the '@' character is the start of a comment (eg
5351ARM) then another character is used instead.  For example the ARM port
5352uses the '%' character.
5353
5354   Note - some sections, eg '.text' and '.data' are considered to be
5355special and have fixed types.  Any attempt to declare them with a
5356different type will generate an error from the assembler.
5357
5358   If FLAGS contains the 'M' symbol then the TYPE argument must be
5359specified as well as an extra argument--ENTSIZE--like this:
5360
5361     .section NAME , "FLAGS"M, @TYPE, ENTSIZE
5362
5363   Sections with the 'M' flag but not 'S' flag must contain fixed size
5364constants, each ENTSIZE octets long.  Sections with both 'M' and 'S'
5365must contain zero terminated strings where each character is ENTSIZE
5366bytes long.  The linker may remove duplicates within sections with the
5367same name, same entity size and same flags.  ENTSIZE must be an absolute
5368expression.  For sections with both 'M' and 'S', a string which is a
5369suffix of a larger string is considered a duplicate.  Thus '"def"' will
5370be merged with '"abcdef"'; A reference to the first '"def"' will be
5371changed to a reference to '"abcdef"+3'.
5372
5373   If FLAGS contains the 'o' flag, then the TYPE argument must be
5374present along with an additional field like this:
5375
5376     .section NAME,"FLAGS"o,@TYPE,SYMBOLNAME|SECTIONINDEX
5377
5378   The SYMBOLNAME field specifies the symbol name which the section
5379references.  Alternatively a numeric SECTIONINDEX can be provided.  This
5380is not generally a good idea as section indicies are rarely known at
5381assembly time, but the facility is provided for testing purposes.  An
5382index of zero is allowed.  It indicates that the linked-to section has
5383already been discarded.
5384
5385   Note: If both the M and O flags are present, then the fields for the
5386Merge flag should come first, like this:
5387
5388     .section NAME,"FLAGS"Mo,@TYPE,ENTSIZE,SYMBOLNAME
5389
5390   If FLAGS contains the 'G' symbol then the TYPE argument must be
5391present along with an additional field like this:
5392
5393     .section NAME , "FLAGS"G, @TYPE, GROUPNAME[, LINKAGE]
5394
5395   The GROUPNAME field specifies the name of the section group to which
5396this particular section belongs.  The optional linkage field can
5397contain:
5398
5399'comdat'
5400     indicates that only one copy of this section should be retained
5401'.gnu.linkonce'
5402     an alias for comdat
5403
5404   Note: if both the M and G flags are present then the fields for the
5405Merge flag should come first, like this:
5406
5407     .section NAME , "FLAGS"MG, @TYPE, ENTSIZE, GROUPNAME[, LINKAGE]
5408
5409   If both 'o' flag and 'G' flag are present, then the SYMBOLNAME field
5410for 'o' comes first, like this:
5411
5412     .section NAME,"FLAGS"oG,@TYPE,SYMBOLNAME,GROUPNAME[,LINKAGE]
5413
5414   If FLAGS contains the '?' symbol then it may not also contain the 'G'
5415symbol and the GROUPNAME or LINKAGE fields should not be present.
5416Instead, '?' says to consider the section that's current before this
5417directive.  If that section used 'G', then the new section will use 'G'
5418with those same GROUPNAME and LINKAGE fields implicitly.  If not, then
5419the '?' symbol has no effect.
5420
5421   The optional UNIQUE,'<NUMBER>' argument must come last.  It assigns
5422'<NUMBER>' as a unique section ID to distinguish different sections with
5423the same section name like these:
5424
5425     .section NAME,"FLAGS",@TYPE,UNIQUE,<NUMBER>
5426     .section NAME,"FLAGS"G,@TYPE,GROUPNAME,[LINKAGE],UNIQUE,<NUMBER>
5427     .section NAME,"FLAGS"MG,@TYPE,ENTSIZE,GROUPNAME[,LINKAGE],UNIQUE,<NUMBER>
5428
5429   The valid values of '<NUMBER>' are between 0 and 4294967295.
5430
5431   If no flags are specified, the default flags depend upon the section
5432name.  If the section name is not recognized, the default will be for
5433the section to have none of the above flags: it will not be allocated in
5434memory, nor writable, nor executable.  The section will contain data.
5435
5436   For ELF targets, the assembler supports another type of '.section'
5437directive for compatibility with the Solaris assembler:
5438
5439     .section "NAME"[, FLAGS...]
5440
5441   Note that the section name is quoted.  There may be a sequence of
5442comma separated flags:
5443
5444'#alloc'
5445     section is allocatable
5446'#write'
5447     section is writable
5448'#execinstr'
5449     section is executable
5450'#exclude'
5451     section is excluded from executable and shared library.
5452'#tls'
5453     section is used for thread local storage
5454
5455   This directive replaces the current section and subsection.  See the
5456contents of the gas testsuite directory 'gas/testsuite/gas/elf' for some
5457examples of how this directive and the other section stack directives
5458work.
5459
5460
5461File: as.info,  Node: Set,  Next: Short,  Prev: Section,  Up: Pseudo Ops
5462
54637.85 '.set SYMBOL, EXPRESSION'
5464==============================
5465
5466Set the value of SYMBOL to EXPRESSION.  This changes SYMBOL's value and
5467type to conform to EXPRESSION.  If SYMBOL was flagged as external, it
5468remains flagged (*note Symbol Attributes::).
5469
5470   You may '.set' a symbol many times in the same assembly provided that
5471the values given to the symbol are constants.  Values that are based on
5472expressions involving other symbols are allowed, but some targets may
5473restrict this to only being done once per assembly.  This is because
5474those targets do not set the addresses of symbols at assembly time, but
5475rather delay the assignment until a final link is performed.  This
5476allows the linker a chance to change the code in the files, changing the
5477location of, and the relative distance between, various different
5478symbols.
5479
5480   If you '.set' a global symbol, the value stored in the object file is
5481the last value stored into it.
5482
5483   On Z80 'set' is a real instruction, use '.set' or 'SYMBOL defl
5484EXPRESSION' instead.
5485
5486
5487File: as.info,  Node: Short,  Next: Single,  Prev: Set,  Up: Pseudo Ops
5488
54897.86 '.short EXPRESSIONS'
5490=========================
5491
5492'.short' is normally the same as '.word'.  *Note '.word': Word.
5493
5494   In some configurations, however, '.short' and '.word' generate
5495numbers of different lengths.  *Note Machine Dependencies::.
5496
5497
5498File: as.info,  Node: Single,  Next: Size,  Prev: Short,  Up: Pseudo Ops
5499
55007.87 '.single FLONUMS'
5501======================
5502
5503This directive assembles zero or more flonums, separated by commas.  It
5504has the same effect as '.float'.  The exact kind of floating point
5505numbers emitted depends on how 'as' is configured.  *Note Machine
5506Dependencies::.
5507
5508
5509File: as.info,  Node: Size,  Next: Skip,  Prev: Single,  Up: Pseudo Ops
5510
55117.88 '.size'
5512============
5513
5514This directive is used to set the size associated with a symbol.
5515
5516COFF Version
5517------------
5518
5519For COFF targets, the '.size' directive is only permitted inside
5520'.def'/'.endef' pairs.  It is used like this:
5521
5522     .size EXPRESSION
5523
5524ELF Version
5525-----------
5526
5527For ELF targets, the '.size' directive is used like this:
5528
5529     .size NAME , EXPRESSION
5530
5531   This directive sets the size associated with a symbol NAME.  The size
5532in bytes is computed from EXPRESSION which can make use of label
5533arithmetic.  This directive is typically used to set the size of
5534function symbols.
5535
5536
5537File: as.info,  Node: Skip,  Next: Sleb128,  Prev: Size,  Up: Pseudo Ops
5538
55397.89 '.skip SIZE [,FILL]'
5540=========================
5541
5542This directive emits SIZE bytes, each of value FILL.  Both SIZE and FILL
5543are absolute expressions.  If the comma and FILL are omitted, FILL is
5544assumed to be zero.  This is the same as '.space'.
5545
5546
5547File: as.info,  Node: Sleb128,  Next: Space,  Prev: Skip,  Up: Pseudo Ops
5548
55497.90 '.sleb128 EXPRESSIONS'
5550===========================
5551
5552SLEB128 stands for "signed little endian base 128."  This is a compact,
5553variable length representation of numbers used by the DWARF symbolic
5554debugging format.  *Note '.uleb128': Uleb128.
5555
5556
5557File: as.info,  Node: Space,  Next: Stab,  Prev: Sleb128,  Up: Pseudo Ops
5558
55597.91 '.space SIZE [,FILL]'
5560==========================
5561
5562This directive emits SIZE bytes, each of value FILL.  Both SIZE and FILL
5563are absolute expressions.  If the comma and FILL are omitted, FILL is
5564assumed to be zero.  This is the same as '.skip'.
5565
5566     _Warning:_ '.space' has a completely different meaning for HPPA
5567     targets; use '.block' as a substitute.  See 'HP9000 Series 800
5568     Assembly Language Reference Manual' (HP 92432-90001) for the
5569     meaning of the '.space' directive.  *Note HPPA Assembler
5570     Directives: HPPA Directives, for a summary.
5571
5572
5573File: as.info,  Node: Stab,  Next: String,  Prev: Space,  Up: Pseudo Ops
5574
55757.92 '.stabd, .stabn, .stabs'
5576=============================
5577
5578There are three directives that begin '.stab'.  All emit symbols (*note
5579Symbols::), for use by symbolic debuggers.  The symbols are not entered
5580in the 'as' hash table: they cannot be referenced elsewhere in the
5581source file.  Up to five fields are required:
5582
5583STRING
5584     This is the symbol's name.  It may contain any character except
5585     '\000', so is more general than ordinary symbol names.  Some
5586     debuggers used to code arbitrarily complex structures into symbol
5587     names using this field.
5588
5589TYPE
5590     An absolute expression.  The symbol's type is set to the low 8 bits
5591     of this expression.  Any bit pattern is permitted, but 'ld' and
5592     debuggers choke on silly bit patterns.
5593
5594OTHER
5595     An absolute expression.  The symbol's "other" attribute is set to
5596     the low 8 bits of this expression.
5597
5598DESC
5599     An absolute expression.  The symbol's descriptor is set to the low
5600     16 bits of this expression.
5601
5602VALUE
5603     An absolute expression which becomes the symbol's value.
5604
5605   If a warning is detected while reading a '.stabd', '.stabn', or
5606'.stabs' statement, the symbol has probably already been created; you
5607get a half-formed symbol in your object file.  This is compatible with
5608earlier assemblers!
5609
5610'.stabd TYPE , OTHER , DESC'
5611
5612     The "name" of the symbol generated is not even an empty string.  It
5613     is a null pointer, for compatibility.  Older assemblers used a null
5614     pointer so they didn't waste space in object files with empty
5615     strings.
5616
5617     The symbol's value is set to the location counter, relocatably.
5618     When your program is linked, the value of this symbol is the
5619     address of the location counter when the '.stabd' was assembled.
5620
5621'.stabn TYPE , OTHER , DESC , VALUE'
5622     The name of the symbol is set to the empty string '""'.
5623
5624'.stabs STRING , TYPE , OTHER , DESC , VALUE'
5625     All five fields are specified.
5626
5627
5628File: as.info,  Node: String,  Next: Struct,  Prev: Stab,  Up: Pseudo Ops
5629
56307.93 '.string' "STR", '.string8' "STR", '.string16'
5631===================================================
5632
5633"STR", '.string32' "STR", '.string64' "STR"
5634
5635   Copy the characters in STR to the object file.  You may specify more
5636than one string to copy, separated by commas.  Unless otherwise
5637specified for a particular machine, the assembler marks the end of each
5638string with a 0 byte.  You can use any of the escape sequences described
5639in *note Strings: Strings.
5640
5641   The variants 'string16', 'string32' and 'string64' differ from the
5642'string' pseudo opcode in that each 8-bit character from STR is copied
5643and expanded to 16, 32 or 64 bits respectively.  The expanded characters
5644are stored in target endianness byte order.
5645
5646   Example:
5647     	.string32 "BYE"
5648     expands to:
5649     	.string   "B\0\0\0Y\0\0\0E\0\0\0"  /* On little endian targets.  */
5650     	.string   "\0\0\0B\0\0\0Y\0\0\0E"  /* On big endian targets.  */
5651
5652
5653File: as.info,  Node: Struct,  Next: SubSection,  Prev: String,  Up: Pseudo Ops
5654
56557.94 '.struct EXPRESSION'
5656=========================
5657
5658Switch to the absolute section, and set the section offset to
5659EXPRESSION, which must be an absolute expression.  You might use this as
5660follows:
5661             .struct 0
5662     field1:
5663             .struct field1 + 4
5664     field2:
5665             .struct field2 + 4
5666     field3:
5667   This would define the symbol 'field1' to have the value 0, the symbol
5668'field2' to have the value 4, and the symbol 'field3' to have the value
56698.  Assembly would be left in the absolute section, and you would need
5670to use a '.section' directive of some sort to change to some other
5671section before further assembly.
5672
5673
5674File: as.info,  Node: SubSection,  Next: Symver,  Prev: Struct,  Up: Pseudo Ops
5675
56767.95 '.subsection NAME'
5677=======================
5678
5679This is one of the ELF section stack manipulation directives.  The
5680others are '.section' (*note Section::), '.pushsection' (*note
5681PushSection::), '.popsection' (*note PopSection::), and '.previous'
5682(*note Previous::).
5683
5684   This directive replaces the current subsection with 'name'.  The
5685current section is not changed.  The replaced subsection is put onto the
5686section stack in place of the then current top of stack subsection.
5687
5688
5689File: as.info,  Node: Symver,  Next: Tag,  Prev: SubSection,  Up: Pseudo Ops
5690
56917.96 '.symver'
5692==============
5693
5694Use the '.symver' directive to bind symbols to specific version nodes
5695within a source file.  This is only supported on ELF platforms, and is
5696typically used when assembling files to be linked into a shared library.
5697There are cases where it may make sense to use this in objects to be
5698bound into an application itself so as to override a versioned symbol
5699from a shared library.
5700
5701   For ELF targets, the '.symver' directive can be used like this:
5702     .symver NAME, NAME2@NODENAME[ ,VISIBILITY]
5703   If the original symbol NAME is defined within the file being
5704assembled, the '.symver' directive effectively creates a symbol alias
5705with the name NAME2@NODENAME, and in fact the main reason that we just
5706don't try and create a regular alias is that the @ character isn't
5707permitted in symbol names.  The NAME2 part of the name is the actual
5708name of the symbol by which it will be externally referenced.  The name
5709NAME itself is merely a name of convenience that is used so that it is
5710possible to have definitions for multiple versions of a function within
5711a single source file, and so that the compiler can unambiguously know
5712which version of a function is being mentioned.  The NODENAME portion of
5713the alias should be the name of a node specified in the version script
5714supplied to the linker when building a shared library.  If you are
5715attempting to override a versioned symbol from a shared library, then
5716NODENAME should correspond to the nodename of the symbol you are trying
5717to override.  The optional argument VISIBILITY updates the visibility of
5718the original symbol.  The valid visibilities are 'local', 'hidden', and
5719'remove'.  The 'local' visibility makes the original symbol a local
5720symbol (*note Local::).  The 'hidden' visibility sets the visibility of
5721the original symbol to 'hidden' (*note Hidden::).  The 'remove'
5722visibility removes the original symbol from the symbol table.  If
5723visibility isn't specified, the original symbol is unchanged.
5724
5725   If the symbol NAME is not defined within the file being assembled,
5726all references to NAME will be changed to NAME2@NODENAME.  If no
5727reference to NAME is made, NAME2@NODENAME will be removed from the
5728symbol table.
5729
5730   Another usage of the '.symver' directive is:
5731     .symver NAME, NAME2@@NODENAME
5732   In this case, the symbol NAME must exist and be defined within the
5733file being assembled.  It is similar to NAME2@NODENAME.  The difference
5734is NAME2@@NODENAME will also be used to resolve references to NAME2 by
5735the linker.
5736
5737   The third usage of the '.symver' directive is:
5738     .symver NAME, NAME2@@@NODENAME
5739   When NAME is not defined within the file being assembled, it is
5740treated as NAME2@NODENAME.  When NAME is defined within the file being
5741assembled, the symbol name, NAME, will be changed to NAME2@@NODENAME.
5742
5743
5744File: as.info,  Node: Tag,  Next: Text,  Prev: Symver,  Up: Pseudo Ops
5745
57467.97 '.tag STRUCTNAME'
5747======================
5748
5749This directive is generated by compilers to include auxiliary debugging
5750information in the symbol table.  It is only permitted inside
5751'.def'/'.endef' pairs.  Tags are used to link structure definitions in
5752the symbol table with instances of those structures.
5753
5754
5755File: as.info,  Node: Text,  Next: Title,  Prev: Tag,  Up: Pseudo Ops
5756
57577.98 '.text SUBSECTION'
5758=======================
5759
5760Tells 'as' to assemble the following statements onto the end of the text
5761subsection numbered SUBSECTION, which is an absolute expression.  If
5762SUBSECTION is omitted, subsection number zero is used.
5763
5764
5765File: as.info,  Node: Title,  Next: Tls_common,  Prev: Text,  Up: Pseudo Ops
5766
57677.99 '.title "HEADING"'
5768=======================
5769
5770Use HEADING as the title (second line, immediately after the source file
5771name and pagenumber) when generating assembly listings.
5772
5773   This directive affects subsequent pages, as well as the current page
5774if it appears within ten lines of the top of a page.
5775
5776
5777File: as.info,  Node: Tls_common,  Next: Type,  Prev: Title,  Up: Pseudo Ops
5778
57797.100 '.tls_common SYMBOL, LENGTH[, ALIGNMENT]'
5780===============================================
5781
5782This directive behaves in the same way as the '.comm' directive (*note
5783Comm::) except that SYMBOL has type of STT_TLS instead of STT_OBJECT.
5784
5785
5786File: as.info,  Node: Type,  Next: Uleb128,  Prev: Tls_common,  Up: Pseudo Ops
5787
57887.101 '.type'
5789=============
5790
5791This directive is used to set the type of a symbol.
5792
5793COFF Version
5794------------
5795
5796For COFF targets, this directive is permitted only within
5797'.def'/'.endef' pairs.  It is used like this:
5798
5799     .type INT
5800
5801   This records the integer INT as the type attribute of a symbol table
5802entry.
5803
5804ELF Version
5805-----------
5806
5807For ELF targets, the '.type' directive is used like this:
5808
5809     .type NAME , TYPE DESCRIPTION
5810
5811   This sets the type of symbol NAME to be either a function symbol or
5812an object symbol.  There are five different syntaxes supported for the
5813TYPE DESCRIPTION field, in order to provide compatibility with various
5814other assemblers.
5815
5816   Because some of the characters used in these syntaxes (such as '@'
5817and '#') are comment characters for some architectures, some of the
5818syntaxes below do not work on all architectures.  The first variant will
5819be accepted by the GNU assembler on all architectures so that variant
5820should be used for maximum portability, if you do not need to assemble
5821your code with other assemblers.
5822
5823   The syntaxes supported are:
5824
5825       .type <name> STT_<TYPE_IN_UPPER_CASE>
5826       .type <name>,#<type>
5827       .type <name>,@<type>
5828       .type <name>,%<type>
5829       .type <name>,"<type>"
5830
5831   The types supported are:
5832
5833'STT_FUNC'
5834'function'
5835     Mark the symbol as being a function name.
5836
5837'STT_GNU_IFUNC'
5838'gnu_indirect_function'
5839     Mark the symbol as an indirect function when evaluated during reloc
5840     processing.  (This is only supported on assemblers targeting GNU
5841     systems).
5842
5843'STT_OBJECT'
5844'object'
5845     Mark the symbol as being a data object.
5846
5847'STT_TLS'
5848'tls_object'
5849     Mark the symbol as being a thread-local data object.
5850
5851'STT_COMMON'
5852'common'
5853     Mark the symbol as being a common data object.
5854
5855'STT_NOTYPE'
5856'notype'
5857     Does not mark the symbol in any way.  It is supported just for
5858     completeness.
5859
5860'gnu_unique_object'
5861     Marks the symbol as being a globally unique data object.  The
5862     dynamic linker will make sure that in the entire process there is
5863     just one symbol with this name and type in use.  (This is only
5864     supported on assemblers targeting GNU systems).
5865
5866   Changing between incompatible types other than from/to STT_NOTYPE
5867will result in a diagnostic.  An intermediate change to STT_NOTYPE will
5868silence this.
5869
5870   Note: Some targets support extra types in addition to those listed
5871above.
5872
5873
5874File: as.info,  Node: Uleb128,  Next: Val,  Prev: Type,  Up: Pseudo Ops
5875
58767.102 '.uleb128 EXPRESSIONS'
5877============================
5878
5879ULEB128 stands for "unsigned little endian base 128."  This is a
5880compact, variable length representation of numbers used by the DWARF
5881symbolic debugging format.  *Note '.sleb128': Sleb128.
5882
5883
5884File: as.info,  Node: Val,  Next: Version,  Prev: Uleb128,  Up: Pseudo Ops
5885
58867.103 '.val ADDR'
5887=================
5888
5889This directive, permitted only within '.def'/'.endef' pairs, records the
5890address ADDR as the value attribute of a symbol table entry.
5891
5892
5893File: as.info,  Node: Version,  Next: VTableEntry,  Prev: Val,  Up: Pseudo Ops
5894
58957.104 '.version "STRING"'
5896=========================
5897
5898This directive creates a '.note' section and places into it an ELF
5899formatted note of type NT_VERSION. The note's name is set to 'string'.
5900
5901
5902File: as.info,  Node: VTableEntry,  Next: VTableInherit,  Prev: Version,  Up: Pseudo Ops
5903
59047.105 '.vtable_entry TABLE, OFFSET'
5905===================================
5906
5907This directive finds or creates a symbol 'table' and creates a
5908'VTABLE_ENTRY' relocation for it with an addend of 'offset'.
5909
5910
5911File: as.info,  Node: VTableInherit,  Next: Warning,  Prev: VTableEntry,  Up: Pseudo Ops
5912
59137.106 '.vtable_inherit CHILD, PARENT'
5914=====================================
5915
5916This directive finds the symbol 'child' and finds or creates the symbol
5917'parent' and then creates a 'VTABLE_INHERIT' relocation for the parent
5918whose addend is the value of the child symbol.  As a special case the
5919parent name of '0' is treated as referring to the '*ABS*' section.
5920
5921
5922File: as.info,  Node: Warning,  Next: Weak,  Prev: VTableInherit,  Up: Pseudo Ops
5923
59247.107 '.warning "STRING"'
5925=========================
5926
5927Similar to the directive '.error' (*note '.error "STRING"': Error.), but
5928just emits a warning.
5929
5930
5931File: as.info,  Node: Weak,  Next: Weakref,  Prev: Warning,  Up: Pseudo Ops
5932
59337.108 '.weak NAMES'
5934===================
5935
5936This directive sets the weak attribute on the comma separated list of
5937symbol 'names'.  If the symbols do not already exist, they will be
5938created.
5939
5940   On COFF targets other than PE, weak symbols are a GNU extension.
5941This directive sets the weak attribute on the comma separated list of
5942symbol 'names'.  If the symbols do not already exist, they will be
5943created.
5944
5945   On the PE target, weak symbols are supported natively as weak
5946aliases.  When a weak symbol is created that is not an alias, GAS
5947creates an alternate symbol to hold the default value.
5948
5949
5950File: as.info,  Node: Weakref,  Next: Word,  Prev: Weak,  Up: Pseudo Ops
5951
59527.109 '.weakref ALIAS, TARGET'
5953==============================
5954
5955This directive creates an alias to the target symbol that enables the
5956symbol to be referenced with weak-symbol semantics, but without actually
5957making it weak.  If direct references or definitions of the symbol are
5958present, then the symbol will not be weak, but if all references to it
5959are through weak references, the symbol will be marked as weak in the
5960symbol table.
5961
5962   The effect is equivalent to moving all references to the alias to a
5963separate assembly source file, renaming the alias to the symbol in it,
5964declaring the symbol as weak there, and running a reloadable link to
5965merge the object files resulting from the assembly of the new source
5966file and the old source file that had the references to the alias
5967removed.
5968
5969   The alias itself never makes to the symbol table, and is entirely
5970handled within the assembler.
5971
5972
5973File: as.info,  Node: Word,  Next: Zero,  Prev: Weakref,  Up: Pseudo Ops
5974
59757.110 '.word EXPRESSIONS'
5976=========================
5977
5978This directive expects zero or more EXPRESSIONS, of any section,
5979separated by commas.
5980
5981   The size of the number emitted, and its byte order, depend on what
5982target computer the assembly is for.
5983
5984     _Warning: Special Treatment to support Compilers_
5985
5986   Machines with a 32-bit address space, but that do less than 32-bit
5987addressing, require the following special treatment.  If the machine of
5988interest to you does 32-bit addressing (or doesn't require it; *note
5989Machine Dependencies::), you can ignore this issue.
5990
5991   In order to assemble compiler output into something that works, 'as'
5992occasionally does strange things to '.word' directives.  Directives of
5993the form '.word sym1-sym2' are often emitted by compilers as part of
5994jump tables.  Therefore, when 'as' assembles a directive of the form
5995'.word sym1-sym2', and the difference between 'sym1' and 'sym2' does not
5996fit in 16 bits, 'as' creates a "secondary jump table", immediately
5997before the next label.  This secondary jump table is preceded by a
5998short-jump to the first byte after the secondary table.  This short-jump
5999prevents the flow of control from accidentally falling into the new
6000table.  Inside the table is a long-jump to 'sym2'.  The original '.word'
6001contains 'sym1' minus the address of the long-jump to 'sym2'.
6002
6003   If there were several occurrences of '.word sym1-sym2' before the
6004secondary jump table, all of them are adjusted.  If there was a '.word
6005sym3-sym4', that also did not fit in sixteen bits, a long-jump to 'sym4'
6006is included in the secondary jump table, and the '.word' directives are
6007adjusted to contain 'sym3' minus the address of the long-jump to 'sym4';
6008and so on, for as many entries in the original jump table as necessary.
6009
6010
6011File: as.info,  Node: Zero,  Next: 2byte,  Prev: Word,  Up: Pseudo Ops
6012
60137.111 '.zero SIZE'
6014==================
6015
6016This directive emits SIZE 0-valued bytes.  SIZE must be an absolute
6017expression.  This directive is actually an alias for the '.skip'
6018directive so it can take an optional second argument of the value to
6019store in the bytes instead of zero.  Using '.zero' in this way would be
6020confusing however.
6021
6022
6023File: as.info,  Node: 2byte,  Next: 4byte,  Prev: Zero,  Up: Pseudo Ops
6024
60257.112 '.2byte EXPRESSION [, EXPRESSION]*'
6026=========================================
6027
6028This directive expects zero or more expressions, separated by commas.
6029If there are no expressions then the directive does nothing.  Otherwise
6030each expression is evaluated in turn and placed in the next two bytes of
6031the current output section, using the endian model of the target.  If an
6032expression will not fit in two bytes, a warning message is displayed and
6033the least significant two bytes of the expression's value are used.  If
6034an expression cannot be evaluated at assembly time then relocations will
6035be generated in order to compute the value at link time.
6036
6037   This directive does not apply any alignment before or after inserting
6038the values.  As a result of this, if relocations are generated, they may
6039be different from those used for inserting values with a guaranteed
6040alignment.
6041
6042   This directive is only available for ELF targets,
6043
6044
6045File: as.info,  Node: 4byte,  Next: 8byte,  Prev: 2byte,  Up: Pseudo Ops
6046
60477.113 '.4byte EXPRESSION [, EXPRESSION]*'
6048=========================================
6049
6050Like the '.2byte' directive, except that it inserts unaligned, four byte
6051long values into the output.
6052
6053
6054File: as.info,  Node: 8byte,  Next: Deprecated,  Prev: 4byte,  Up: Pseudo Ops
6055
60567.114 '.8byte EXPRESSION [, EXPRESSION]*'
6057=========================================
6058
6059Like the '.2byte' directive, except that it inserts unaligned, eight
6060byte long bignum values into the output.
6061
6062
6063File: as.info,  Node: Deprecated,  Prev: 8byte,  Up: Pseudo Ops
6064
60657.115 Deprecated Directives
6066===========================
6067
6068One day these directives won't work.  They are included for
6069compatibility with older assemblers.
6070.abort
6071.line
6072
6073
6074File: as.info,  Node: Object Attributes,  Next: Machine Dependencies,  Prev: Pseudo Ops,  Up: Top
6075
60768 Object Attributes
6077*******************
6078
6079'as' assembles source files written for a specific architecture into
6080object files for that architecture.  But not all object files are alike.
6081Many architectures support incompatible variations.  For instance,
6082floating point arguments might be passed in floating point registers if
6083the object file requires hardware floating point support--or floating
6084point arguments might be passed in integer registers if the object file
6085supports processors with no hardware floating point unit.  Or, if two
6086objects are built for different generations of the same architecture,
6087the combination may require the newer generation at run-time.
6088
6089   This information is useful during and after linking.  At link time,
6090'ld' can warn about incompatible object files.  After link time, tools
6091like 'gdb' can use it to process the linked file correctly.
6092
6093   Compatibility information is recorded as a series of object
6094attributes.  Each attribute has a "vendor", "tag", and "value".  The
6095vendor is a string, and indicates who sets the meaning of the tag.  The
6096tag is an integer, and indicates what property the attribute describes.
6097The value may be a string or an integer, and indicates how the property
6098affects this object.  Missing attributes are the same as attributes with
6099a zero value or empty string value.
6100
6101   Object attributes were developed as part of the ABI for the ARM
6102Architecture.  The file format is documented in 'ELF for the ARM
6103Architecture'.
6104
6105* Menu:
6106
6107* GNU Object Attributes::               GNU Object Attributes
6108* Defining New Object Attributes::      Defining New Object Attributes
6109
6110
6111File: as.info,  Node: GNU Object Attributes,  Next: Defining New Object Attributes,  Up: Object Attributes
6112
61138.1 GNU Object Attributes
6114=========================
6115
6116The '.gnu_attribute' directive records an object attribute with vendor
6117'gnu'.
6118
6119   Except for 'Tag_compatibility', which has both an integer and a
6120string for its value, GNU attributes have a string value if the tag
6121number is odd and an integer value if the tag number is even.  The
6122second bit ('TAG & 2' is set for architecture-independent attributes and
6123clear for architecture-dependent ones.
6124
61258.1.1 Common GNU attributes
6126---------------------------
6127
6128These attributes are valid on all architectures.
6129
6130Tag_compatibility (32)
6131     The compatibility attribute takes an integer flag value and a
6132     vendor name.  If the flag value is 0, the file is compatible with
6133     other toolchains.  If it is 1, then the file is only compatible
6134     with the named toolchain.  If it is greater than 1, the file can
6135     only be processed by other toolchains under some private
6136     arrangement indicated by the flag value and the vendor name.
6137
61388.1.2 M680x0 Attributes
6139-----------------------
6140
6141Tag_GNU_M68K_ABI_FP (4)
6142     The floating-point ABI used by this object file.  The value will
6143     be:
6144
6145        * 0 for files not affected by the floating-point ABI.
6146        * 1 for files using double-precision hardware floating-point
6147          ABI.
6148        * 2 for files using the software floating-point ABI.
6149
61508.1.3 MIPS Attributes
6151---------------------
6152
6153Tag_GNU_MIPS_ABI_FP (4)
6154     The floating-point ABI used by this object file.  The value will
6155     be:
6156
6157        * 0 for files not affected by the floating-point ABI.
6158        * 1 for files using the hardware floating-point ABI with a
6159          standard double-precision FPU.
6160        * 2 for files using the hardware floating-point ABI with a
6161          single-precision FPU.
6162        * 3 for files using the software floating-point ABI.
6163        * 4 for files using the deprecated hardware floating-point ABI
6164          which used 64-bit floating-point registers, 32-bit
6165          general-purpose registers and increased the number of
6166          callee-saved floating-point registers.
6167        * 5 for files using the hardware floating-point ABI with a
6168          double-precision FPU with either 32-bit or 64-bit
6169          floating-point registers and 32-bit general-purpose registers.
6170        * 6 for files using the hardware floating-point ABI with 64-bit
6171          floating-point registers and 32-bit general-purpose registers.
6172        * 7 for files using the hardware floating-point ABI with 64-bit
6173          floating-point registers, 32-bit general-purpose registers and
6174          a rule that forbids the direct use of odd-numbered
6175          single-precision floating-point registers.
6176
61778.1.4 PowerPC Attributes
6178------------------------
6179
6180Tag_GNU_Power_ABI_FP (4)
6181     The floating-point ABI used by this object file.  The value will
6182     be:
6183
6184        * 0 for files not affected by the floating-point ABI.
6185        * 1 for files using double-precision hardware floating-point
6186          ABI.
6187        * 2 for files using the software floating-point ABI.
6188        * 3 for files using single-precision hardware floating-point
6189          ABI.
6190
6191Tag_GNU_Power_ABI_Vector (8)
6192     The vector ABI used by this object file.  The value will be:
6193
6194        * 0 for files not affected by the vector ABI.
6195        * 1 for files using general purpose registers to pass vectors.
6196        * 2 for files using AltiVec registers to pass vectors.
6197        * 3 for files using SPE registers to pass vectors.
6198
61998.1.5 IBM z Systems Attributes
6200------------------------------
6201
6202Tag_GNU_S390_ABI_Vector (8)
6203     The vector ABI used by this object file.  The value will be:
6204
6205        * 0 for files not affected by the vector ABI.
6206        * 1 for files using software vector ABI.
6207        * 2 for files using hardware vector ABI.
6208
62098.1.6 MSP430 Attributes
6210-----------------------
6211
6212Tag_GNU_MSP430_Data_Region (4)
6213     The data region used by this object file.  The value will be:
6214
6215        * 0 for files not using the large memory model.
6216        * 1 for files which have been compiled with the condition that
6217          all data is in the lower memory region, i.e.  below address
6218          0x10000.
6219        * 2 for files which allow data to be placed in the full 20-bit
6220          memory range.
6221
6222
6223File: as.info,  Node: Defining New Object Attributes,  Prev: GNU Object Attributes,  Up: Object Attributes
6224
62258.2 Defining New Object Attributes
6226==================================
6227
6228If you want to define a new GNU object attribute, here are the places
6229you will need to modify.  New attributes should be discussed on the
6230'binutils' mailing list.
6231
6232   * This manual, which is the official register of attributes.
6233   * The header for your architecture 'include/elf', to define the tag.
6234   * The 'bfd' support file for your architecture, to merge the
6235     attribute and issue any appropriate link warnings.
6236   * Test cases in 'ld/testsuite' for merging and link warnings.
6237   * 'binutils/readelf.c' to display your attribute.
6238   * GCC, if you want the compiler to mark the attribute automatically.
6239
6240
6241File: as.info,  Node: Machine Dependencies,  Next: Reporting Bugs,  Prev: Object Attributes,  Up: Top
6242
62439 Machine Dependent Features
6244****************************
6245
6246The machine instruction sets are (almost by definition) different on
6247each machine where 'as' runs.  Floating point representations vary as
6248well, and 'as' often supports a few additional directives or
6249command-line options for compatibility with other assemblers on a
6250particular platform.  Finally, some versions of 'as' support special
6251pseudo-instructions for branch optimization.
6252
6253   This chapter discusses most of these differences, though it does not
6254include details on any machine's instruction set.  For details on that
6255subject, see the hardware manufacturer's manual.
6256
6257* Menu:
6258
6259* AArch64-Dependent::		AArch64 Dependent Features
6260* Alpha-Dependent::		Alpha Dependent Features
6261* ARC-Dependent::               ARC Dependent Features
6262* ARM-Dependent::               ARM Dependent Features
6263* AVR-Dependent::               AVR Dependent Features
6264* Blackfin-Dependent::		Blackfin Dependent Features
6265* BPF-Dependent::		BPF Dependent Features
6266* CR16-Dependent::              CR16 Dependent Features
6267* CRIS-Dependent::              CRIS Dependent Features
6268* C-SKY-Dependent::             C-SKY Dependent Features
6269* D10V-Dependent::              D10V Dependent Features
6270* D30V-Dependent::              D30V Dependent Features
6271* Epiphany-Dependent::          EPIPHANY Dependent Features
6272* H8/300-Dependent::            Renesas H8/300 Dependent Features
6273* HPPA-Dependent::              HPPA Dependent Features
6274* i386-Dependent::              Intel 80386 and AMD x86-64 Dependent Features
6275* IA-64-Dependent::             Intel IA-64 Dependent Features
6276* IP2K-Dependent::              IP2K Dependent Features
6277* LM32-Dependent::              LM32 Dependent Features
6278* M32C-Dependent::              M32C Dependent Features
6279* M32R-Dependent::              M32R Dependent Features
6280* M68K-Dependent::              M680x0 Dependent Features
6281* M68HC11-Dependent::           M68HC11 and 68HC12 Dependent Features
6282* S12Z-Dependent::              S12Z Dependent Features
6283* Meta-Dependent ::             Meta Dependent Features
6284* MicroBlaze-Dependent::	MICROBLAZE Dependent Features
6285* MIPS-Dependent::              MIPS Dependent Features
6286* MMIX-Dependent::              MMIX Dependent Features
6287* MSP430-Dependent::		MSP430 Dependent Features
6288* NDS32-Dependent::             Andes NDS32 Dependent Features
6289* NiosII-Dependent::            Altera Nios II Dependent Features
6290* NS32K-Dependent::		NS32K Dependent Features
6291* OpenRISC-Dependent::		OpenRISC 1000 Features
6292* PDP-11-Dependent::            PDP-11 Dependent Features
6293* PJ-Dependent::                picoJava Dependent Features
6294* PPC-Dependent::               PowerPC Dependent Features
6295* PRU-Dependent::               PRU Dependent Features
6296* RISC-V-Dependent::            RISC-V Dependent Features
6297* RL78-Dependent::              RL78 Dependent Features
6298* RX-Dependent::                RX Dependent Features
6299* S/390-Dependent::             IBM S/390 Dependent Features
6300* SCORE-Dependent::             SCORE Dependent Features
6301* SH-Dependent::                Renesas / SuperH SH Dependent Features
6302* Sparc-Dependent::             SPARC Dependent Features
6303* TIC54X-Dependent::            TI TMS320C54x Dependent Features
6304* TIC6X-Dependent ::            TI TMS320C6x Dependent Features
6305* TILE-Gx-Dependent ::          Tilera TILE-Gx Dependent Features
6306* TILEPro-Dependent ::          Tilera TILEPro Dependent Features
6307* V850-Dependent::              V850 Dependent Features
6308* Vax-Dependent::               VAX Dependent Features
6309* Visium-Dependent::            Visium Dependent Features
6310* WebAssembly-Dependent::       WebAssembly Dependent Features
6311* XGATE-Dependent::             XGATE Dependent Features
6312* XSTORMY16-Dependent::         XStormy16 Dependent Features
6313* Xtensa-Dependent::            Xtensa Dependent Features
6314* Z80-Dependent::               Z80 Dependent Features
6315* Z8000-Dependent::             Z8000 Dependent Features
6316
6317
6318File: as.info,  Node: AArch64-Dependent,  Next: Alpha-Dependent,  Up: Machine Dependencies
6319
63209.1 AArch64 Dependent Features
6321==============================
6322
6323* Menu:
6324
6325* AArch64 Options::              Options
6326* AArch64 Extensions::		 Extensions
6327* AArch64 Syntax::               Syntax
6328* AArch64 Floating Point::       Floating Point
6329* AArch64 Directives::           AArch64 Machine Directives
6330* AArch64 Opcodes::              Opcodes
6331* AArch64 Mapping Symbols::      Mapping Symbols
6332
6333
6334File: as.info,  Node: AArch64 Options,  Next: AArch64 Extensions,  Up: AArch64-Dependent
6335
63369.1.1 Options
6337-------------
6338
6339'-EB'
6340     This option specifies that the output generated by the assembler
6341     should be marked as being encoded for a big-endian processor.
6342
6343'-EL'
6344     This option specifies that the output generated by the assembler
6345     should be marked as being encoded for a little-endian processor.
6346
6347'-mabi=ABI'
6348     Specify which ABI the source code uses.  The recognized arguments
6349     are: 'ilp32' and 'lp64', which decides the generated object file in
6350     ELF32 and ELF64 format respectively.  The default is 'lp64'.
6351
6352'-mcpu=PROCESSOR[+EXTENSION...]'
6353     This option specifies the target processor.  The assembler will
6354     issue an error message if an attempt is made to assemble an
6355     instruction which will not execute on the target processor.  The
6356     following processor names are recognized: 'cortex-a34',
6357     'cortex-a35', 'cortex-a53', 'cortex-a55', 'cortex-a57',
6358     'cortex-a65', 'cortex-a65ae', 'cortex-a72', 'cortex-a73',
6359     'cortex-a75', 'cortex-a76', 'cortex-a76ae', 'cortex-a77',
6360     'cortex-a78', 'cortex-a78ae', 'cortex-a78c', 'ares', 'exynos-m1',
6361     'falkor', 'neoverse-n1', 'neoverse-n2', 'neoverse-e1',
6362     'neoverse-v1', 'qdf24xx', 'saphira', 'thunderx', 'vulcan', 'xgene1'
6363     'xgene2', 'cortex-r82', and 'cortex-x1'.  The special name 'all'
6364     may be used to allow the assembler to accept instructions valid for
6365     any supported processor, including all optional extensions.
6366
6367     In addition to the basic instruction set, the assembler can be told
6368     to accept, or restrict, various extension mnemonics that extend the
6369     processor.  *Note AArch64 Extensions::.
6370
6371     If some implementations of a particular processor can have an
6372     extension, then then those extensions are automatically enabled.
6373     Consequently, you will not normally have to specify any additional
6374     extensions.
6375
6376'-march=ARCHITECTURE[+EXTENSION...]'
6377     This option specifies the target architecture.  The assembler will
6378     issue an error message if an attempt is made to assemble an
6379     instruction which will not execute on the target architecture.  The
6380     following architecture names are recognized: 'armv8-a',
6381     'armv8.1-a', 'armv8.2-a', 'armv8.3-a', 'armv8.4-a' 'armv8.5-a',
6382     'armv8.6-a', 'armv8.7-a', and 'armv8-r'.
6383
6384     If both '-mcpu' and '-march' are specified, the assembler will use
6385     the setting for '-mcpu'.  If neither are specified, the assembler
6386     will default to '-mcpu=all'.
6387
6388     The architecture option can be extended with the same instruction
6389     set extension options as the '-mcpu' option.  Unlike '-mcpu',
6390     extensions are not always enabled by default, *Note AArch64
6391     Extensions::.
6392
6393'-mverbose-error'
6394     This option enables verbose error messages for AArch64 gas.  This
6395     option is enabled by default.
6396
6397'-mno-verbose-error'
6398     This option disables verbose error messages in AArch64 gas.
6399
6400
6401File: as.info,  Node: AArch64 Extensions,  Next: AArch64 Syntax,  Prev: AArch64 Options,  Up: AArch64-Dependent
6402
64039.1.2 Architecture Extensions
6404-----------------------------
6405
6406The table below lists the permitted architecture extensions that are
6407supported by the assembler and the conditions under which they are
6408automatically enabled.
6409
6410   Multiple extensions may be specified, separated by a '+'.  Extension
6411mnemonics may also be removed from those the assembler accepts.  This is
6412done by prepending 'no' to the option that adds the extension.
6413Extensions that are removed must be listed after all extensions that
6414have been added.
6415
6416   Enabling an extension that requires other extensions will
6417automatically cause those extensions to be enabled.  Similarly,
6418disabling an extension that is required by other extensions will
6419automatically cause those extensions to be disabled.
6420
6421Extension Minimum      Enabled by   Description
6422          Architecture default
6423----------------------------------------------------------------------------
6424'i8mm'    ARMv8.2-A    ARMv8.6-A    Enable Int8 Matrix Multiply
6425                       or later     extension.
6426'f32mm'   ARMv8.2-A    No           Enable F32 Matrix Multiply extension.
6427'f64mm'   ARMv8.2-A    No           Enable F64 Matrix Multiply extension.
6428'bf16'    ARMv8.2-A    ARMv8.6-A    Enable BFloat16 extension.
6429                       or later
6430'compnum' ARMv8.2-A    ARMv8.3-A    Enable the complex number SIMD
6431                       or later     extensions.  This implies 'fp16' and
6432                                    'simd'.
6433'crc'     ARMv8-A      ARMv8.1-A    Enable CRC instructions.
6434                       or later
6435'crypto'  ARMv8-A      No           Enable cryptographic extensions.
6436                                    This implies 'fp', 'simd', 'aes' and
6437                                    'sha2'.
6438'aes'     ARMv8-A      No           Enable the AES cryptographic
6439                                    extensions.  This implies 'fp' and
6440                                    'simd'.
6441'sha2'    ARMv8-A      No           Enable the SHA2 cryptographic
6442                                    extensions.  This implies 'fp' and
6443                                    'simd'.
6444'sha3'    ARMv8.2-A    No           Enable the ARMv8.2-A SHA2 and SHA3
6445                                    cryptographic extensions.  This
6446                                    implies 'fp', 'simd' and 'sha2'.
6447'sm4'     ARMv8.2-A    No           Enable the ARMv8.2-A SM3 and SM4
6448                                    cryptographic extensions.  This
6449                                    implies 'fp' and 'simd'.
6450'fp'      ARMv8-A      ARMv8-A or   Enable floating-point extensions.
6451                       later
6452'fp16'    ARMv8.2-A    ARMv8.2-A    Enable ARMv8.2 16-bit floating-point
6453                       or later     support.  This implies 'fp'.
6454'lor'     ARMv8-A      ARMv8.1-A    Enable Limited Ordering Regions
6455                       or later     extensions.
6456'lse'     ARMv8-A      ARMv8.1-A    Enable Large System extensions.
6457                       or later
6458'pan'     ARMv8-A      ARMv8.1-A    Enable Privileged Access Never
6459                       or later     support.
6460'profile' ARMv8.2-A    No           Enable statistical profiling
6461                                    extensions.
6462'ras'     ARMv8-A      ARMv8.2-A    Enable the Reliability, Availability
6463                       or later     and Serviceability extension.
6464'rcpc'    ARMv8.2-A    ARMv8.3-A    Enable the weak release consistency
6465                       or later     extension.
6466'rdma'    ARMv8-A      ARMv8.1-A    Enable ARMv8.1 Advanced SIMD
6467                       or later     extensions.  This implies 'simd'.
6468'simd'    ARMv8-A      ARMv8-A or   Enable Advanced SIMD extensions.
6469                       later        This implies 'fp'.
6470'sve'     ARMv8.2-A    No           Enable the Scalable Vector
6471                                    Extensions.  This implies 'fp16',
6472                                    'simd' and 'compnum'.
6473'dotprod' ARMv8.2-A    ARMv8.4-A    Enable the Dot Product extension.
6474                       or later     This implies 'simd'.
6475'fp16fml' ARMv8.2-A    ARMv8.4-A    Enable ARMv8.2 16-bit floating-point
6476                       or later     multiplication variant support.  This
6477                                    implies 'fp16'.
6478'sb'      ARMv8-A      ARMv8.5-A    Enable the speculation barrier
6479                       or later     instruction sb.
6480'predres' ARMv8-A      ARMv8.5-A    Enable the Execution and Data and
6481                       or later     Prediction instructions.
6482'rng'     ARMv8.5-A    No           Enable ARMv8.5-A random number
6483                                    instructions.
6484'ssbs'    ARMv8-A      ARMv8.5-A    Enable Speculative Store Bypassing
6485                       or later     Safe state read and write.
6486'memtag'  ARMv8.5-A    No           Enable ARMv8.5-A Memory Tagging
6487                                    Extensions.
6488'tme'     ARMv8-A      No           Enable Transactional Memory
6489                                    Extensions.
6490'sve2'    ARMv8-A      No           Enable the SVE2 Extension.
6491'sve2-bitperm'ARMv8-A  No           Enable SVE2 BITPERM Extension.
6492'sve2-sm4'ARMv8-A      No           Enable SVE2 SM4 Extension.
6493'sve2-aes'ARMv8-A      No           Enable SVE2 AES Extension.  This also
6494                                    enables the .Q->.B form of the
6495                                    'pmullt' and 'pmullb' instructions.
6496'sve2-sha3'ARMv8-A     No           Enable SVE2 SHA3 Extension.
6497'flagm'   ARMv8-A      ARMv8.4-A    Enable Flag Manipulation
6498                       or later     instructions.
6499'ls64'    ARMv8.6-A    ARMv8.7-A    Enable 64 Byte Loads/Stores.
6500                       or later
6501'pauth'   ARMv8-A      No           Enable Pointer Authentication.
6502
6503
6504File: as.info,  Node: AArch64 Syntax,  Next: AArch64 Floating Point,  Prev: AArch64 Extensions,  Up: AArch64-Dependent
6505
65069.1.3 Syntax
6507------------
6508
6509* Menu:
6510
6511* AArch64-Chars::                Special Characters
6512* AArch64-Regs::                 Register Names
6513* AArch64-Relocations::	     Relocations
6514
6515
6516File: as.info,  Node: AArch64-Chars,  Next: AArch64-Regs,  Up: AArch64 Syntax
6517
65189.1.3.1 Special Characters
6519..........................
6520
6521The presence of a '//' on a line indicates the start of a comment that
6522extends to the end of the current line.  If a '#' appears as the first
6523character of a line, the whole line is treated as a comment.
6524
6525   The ';' character can be used instead of a newline to separate
6526statements.
6527
6528   The '#' can be optionally used to indicate immediate operands.
6529
6530
6531File: as.info,  Node: AArch64-Regs,  Next: AArch64-Relocations,  Prev: AArch64-Chars,  Up: AArch64 Syntax
6532
65339.1.3.2 Register Names
6534......................
6535
6536Please refer to the section '4.4 Register Names' of 'ARMv8 Instruction
6537Set Overview', which is available at <http://infocenter.arm.com>.
6538
6539
6540File: as.info,  Node: AArch64-Relocations,  Prev: AArch64-Regs,  Up: AArch64 Syntax
6541
65429.1.3.3 Relocations
6543...................
6544
6545Relocations for 'MOVZ' and 'MOVK' instructions can be generated by
6546prefixing the label with '#:abs_g2:' etc.  For example to load the
654748-bit absolute address of FOO into x0:
6548
6549             movz x0, #:abs_g2:foo		// bits 32-47, overflow check
6550             movk x0, #:abs_g1_nc:foo	// bits 16-31, no overflow check
6551             movk x0, #:abs_g0_nc:foo	// bits  0-15, no overflow check
6552
6553   Relocations for 'ADRP', and 'ADD', 'LDR' or 'STR' instructions can be
6554generated by prefixing the label with ':pg_hi21:' and '#:lo12:'
6555respectively.
6556
6557   For example to use 33-bit (+/-4GB) pc-relative addressing to load the
6558address of FOO into x0:
6559
6560             adrp x0, :pg_hi21:foo
6561             add  x0, x0, #:lo12:foo
6562
6563   Or to load the value of FOO into x0:
6564
6565             adrp x0, :pg_hi21:foo
6566             ldr  x0, [x0, #:lo12:foo]
6567
6568   Note that ':pg_hi21:' is optional.
6569
6570             adrp x0, foo
6571
6572   is equivalent to
6573
6574             adrp x0, :pg_hi21:foo
6575
6576
6577File: as.info,  Node: AArch64 Floating Point,  Next: AArch64 Directives,  Prev: AArch64 Syntax,  Up: AArch64-Dependent
6578
65799.1.4 Floating Point
6580--------------------
6581
6582The AArch64 architecture uses IEEE floating-point numbers.
6583
6584
6585File: as.info,  Node: AArch64 Directives,  Next: AArch64 Opcodes,  Prev: AArch64 Floating Point,  Up: AArch64-Dependent
6586
65879.1.5 AArch64 Machine Directives
6588--------------------------------
6589
6590'.arch NAME'
6591     Select the target architecture.  Valid values for NAME are the same
6592     as for the '-march' command-line option.
6593
6594     Specifying '.arch' clears any previously selected architecture
6595     extensions.
6596
6597'.arch_extension NAME'
6598     Add or remove an architecture extension to the target architecture.
6599     Valid values for NAME are the same as those accepted as
6600     architectural extensions by the '-mcpu' command-line option.
6601
6602     '.arch_extension' may be used multiple times to add or remove
6603     extensions incrementally to the architecture being compiled for.
6604
6605'.bss'
6606     This directive switches to the '.bss' section.
6607
6608'.cpu NAME'
6609     Set the target processor.  Valid values for NAME are the same as
6610     those accepted by the '-mcpu=' command-line option.
6611
6612'.dword EXPRESSIONS'
6613     The '.dword' directive produces 64 bit values.
6614
6615'.even'
6616     The '.even' directive aligns the output on the next even byte
6617     boundary.
6618
6619'.float16 VALUE [,...,VALUE_N]'
6620     Place the half precision floating point representation of one or
6621     more floating-point values into the current section.  The format
6622     used to encode the floating point values is always the IEEE
6623     754-2008 half precision floating point format.
6624
6625'.inst EXPRESSIONS'
6626     Inserts the expressions into the output as if they were
6627     instructions, rather than data.
6628
6629'.ltorg'
6630     This directive causes the current contents of the literal pool to
6631     be dumped into the current section (which is assumed to be the
6632     .text section) at the current location (aligned to a word
6633     boundary).  GAS maintains a separate literal pool for each section
6634     and each sub-section.  The '.ltorg' directive will only affect the
6635     literal pool of the current section and sub-section.  At the end of
6636     assembly all remaining, un-empty literal pools will automatically
6637     be dumped.
6638
6639     Note - older versions of GAS would dump the current literal pool
6640     any time a section change occurred.  This is no longer done, since
6641     it prevents accurate control of the placement of literal pools.
6642
6643'.pool'
6644     This is a synonym for .ltorg.
6645
6646'NAME .req REGISTER NAME'
6647     This creates an alias for REGISTER NAME called NAME.  For example:
6648
6649                  foo .req w0
6650
6651     ip0, ip1, lr and fp are automatically defined to alias to X16, X17,
6652     X30 and X29 respectively.
6653
6654'.tlsdescadd'
6655     Emits a TLSDESC_ADD reloc on the next instruction.
6656
6657'.tlsdesccall'
6658     Emits a TLSDESC_CALL reloc on the next instruction.
6659
6660'.tlsdescldr'
6661     Emits a TLSDESC_LDR reloc on the next instruction.
6662
6663'.unreq ALIAS-NAME'
6664     This undefines a register alias which was previously defined using
6665     the 'req' directive.  For example:
6666
6667                  foo .req w0
6668                  .unreq foo
6669
6670     An error occurs if the name is undefined.  Note - this pseudo op
6671     can be used to delete builtin in register name aliases (eg 'w0').
6672     This should only be done if it is really necessary.
6673
6674'.variant_pcs SYMBOL'
6675     This directive marks SYMBOL referencing a function that may follow
6676     a variant procedure call standard with different register usage
6677     convention from the base procedure call standard.
6678
6679'.xword EXPRESSIONS'
6680     The '.xword' directive produces 64 bit values.  This is the same as
6681     the '.dword' directive.
6682
6683'.cfi_b_key_frame'
6684     The '.cfi_b_key_frame' directive inserts a 'B' character into the
6685     CIE corresponding to the current frame's FDE, meaning that its
6686     return address has been signed with the B-key.  If two frames are
6687     signed with differing keys then they will not share the same CIE.
6688     This information is intended to be used by the stack unwinder in
6689     order to properly authenticate return addresses.
6690
6691
6692File: as.info,  Node: AArch64 Opcodes,  Next: AArch64 Mapping Symbols,  Prev: AArch64 Directives,  Up: AArch64-Dependent
6693
66949.1.6 Opcodes
6695-------------
6696
6697GAS implements all the standard AArch64 opcodes.  It also implements
6698several pseudo opcodes, including several synthetic load instructions.
6699
6700'LDR ='
6701            ldr <register> , =<expression>
6702
6703     The constant expression will be placed into the nearest literal
6704     pool (if it not already there) and a PC-relative LDR instruction
6705     will be generated.
6706
6707   For more information on the AArch64 instruction set and assembly
6708language notation, see 'ARMv8 Instruction Set Overview' available at
6709<http://infocenter.arm.com>.
6710
6711
6712File: as.info,  Node: AArch64 Mapping Symbols,  Prev: AArch64 Opcodes,  Up: AArch64-Dependent
6713
67149.1.7 Mapping Symbols
6715---------------------
6716
6717The AArch64 ELF specification requires that special symbols be inserted
6718into object files to mark certain features:
6719
6720'$x'
6721     At the start of a region of code containing AArch64 instructions.
6722
6723'$d'
6724     At the start of a region of data.
6725
6726
6727File: as.info,  Node: Alpha-Dependent,  Next: ARC-Dependent,  Prev: AArch64-Dependent,  Up: Machine Dependencies
6728
67299.2 Alpha Dependent Features
6730============================
6731
6732* Menu:
6733
6734* Alpha Notes::                Notes
6735* Alpha Options::              Options
6736* Alpha Syntax::               Syntax
6737* Alpha Floating Point::       Floating Point
6738* Alpha Directives::           Alpha Machine Directives
6739* Alpha Opcodes::              Opcodes
6740
6741
6742File: as.info,  Node: Alpha Notes,  Next: Alpha Options,  Up: Alpha-Dependent
6743
67449.2.1 Notes
6745-----------
6746
6747The documentation here is primarily for the ELF object format.  'as'
6748also supports the ECOFF and EVAX formats, but features specific to these
6749formats are not yet documented.
6750
6751
6752File: as.info,  Node: Alpha Options,  Next: Alpha Syntax,  Prev: Alpha Notes,  Up: Alpha-Dependent
6753
67549.2.2 Options
6755-------------
6756
6757'-mCPU'
6758     This option specifies the target processor.  If an attempt is made
6759     to assemble an instruction which will not execute on the target
6760     processor, the assembler may either expand the instruction as a
6761     macro or issue an error message.  This option is equivalent to the
6762     '.arch' directive.
6763
6764     The following processor names are recognized: '21064', '21064a',
6765     '21066', '21068', '21164', '21164a', '21164pc', '21264', '21264a',
6766     '21264b', 'ev4', 'ev5', 'lca45', 'ev5', 'ev56', 'pca56', 'ev6',
6767     'ev67', 'ev68'.  The special name 'all' may be used to allow the
6768     assembler to accept instructions valid for any Alpha processor.
6769
6770     In order to support existing practice in OSF/1 with respect to
6771     '.arch', and existing practice within 'MILO' (the Linux ARC
6772     bootloader), the numbered processor names (e.g. 21064) enable the
6773     processor-specific PALcode instructions, while the "electro-vlasic"
6774     names (e.g. 'ev4') do not.
6775
6776'-mdebug'
6777'-no-mdebug'
6778     Enables or disables the generation of '.mdebug' encapsulation for
6779     stabs directives and procedure descriptors.  The default is to
6780     automatically enable '.mdebug' when the first stabs directive is
6781     seen.
6782
6783'-relax'
6784     This option forces all relocations to be put into the object file,
6785     instead of saving space and resolving some relocations at assembly
6786     time.  Note that this option does not propagate all symbol
6787     arithmetic into the object file, because not all symbol arithmetic
6788     can be represented.  However, the option can still be useful in
6789     specific applications.
6790
6791'-replace'
6792'-noreplace'
6793     Enables or disables the optimization of procedure calls, both at
6794     assemblage and at link time.  These options are only available for
6795     VMS targets and '-replace' is the default.  See section 1.4.1 of
6796     the OpenVMS Linker Utility Manual.
6797
6798'-g'
6799     This option is used when the compiler generates debug information.
6800     When 'gcc' is using 'mips-tfile' to generate debug information for
6801     ECOFF, local labels must be passed through to the object file.
6802     Otherwise this option has no effect.
6803
6804'-GSIZE'
6805     A local common symbol larger than SIZE is placed in '.bss', while
6806     smaller symbols are placed in '.sbss'.
6807
6808'-F'
6809'-32addr'
6810     These options are ignored for backward compatibility.
6811
6812
6813File: as.info,  Node: Alpha Syntax,  Next: Alpha Floating Point,  Prev: Alpha Options,  Up: Alpha-Dependent
6814
68159.2.3 Syntax
6816------------
6817
6818The assembler syntax closely follow the Alpha Reference Manual;
6819assembler directives and general syntax closely follow the OSF/1 and
6820OpenVMS syntax, with a few differences for ELF.
6821
6822* Menu:
6823
6824* Alpha-Chars::                Special Characters
6825* Alpha-Regs::                 Register Names
6826* Alpha-Relocs::               Relocations
6827
6828
6829File: as.info,  Node: Alpha-Chars,  Next: Alpha-Regs,  Up: Alpha Syntax
6830
68319.2.3.1 Special Characters
6832..........................
6833
6834'#' is the line comment character.  Note that if '#' is the first
6835character on a line then it can also be a logical line number directive
6836(*note Comments::) or a preprocessor control command (*note
6837Preprocessing::).
6838
6839   ';' can be used instead of a newline to separate statements.
6840
6841
6842File: as.info,  Node: Alpha-Regs,  Next: Alpha-Relocs,  Prev: Alpha-Chars,  Up: Alpha Syntax
6843
68449.2.3.2 Register Names
6845......................
6846
6847The 32 integer registers are referred to as '$N' or '$rN'.  In addition,
6848registers 15, 28, 29, and 30 may be referred to by the symbols '$fp',
6849'$at', '$gp', and '$sp' respectively.
6850
6851   The 32 floating-point registers are referred to as '$fN'.
6852
6853
6854File: as.info,  Node: Alpha-Relocs,  Prev: Alpha-Regs,  Up: Alpha Syntax
6855
68569.2.3.3 Relocations
6857...................
6858
6859Some of these relocations are available for ECOFF, but mostly only for
6860ELF. They are modeled after the relocation format introduced in Digital
6861Unix 4.0, but there are additions.
6862
6863   The format is '!TAG' or '!TAG!NUMBER' where TAG is the name of the
6864relocation.  In some cases NUMBER is used to relate specific
6865instructions.
6866
6867   The relocation is placed at the end of the instruction like so:
6868
6869     ldah  $0,a($29)    !gprelhigh
6870     lda   $0,a($0)     !gprellow
6871     ldq   $1,b($29)    !literal!100
6872     ldl   $2,0($1)     !lituse_base!100
6873
6874'!literal'
6875'!literal!N'
6876     Used with an 'ldq' instruction to load the address of a symbol from
6877     the GOT.
6878
6879     A sequence number N is optional, and if present is used to pair
6880     'lituse' relocations with this 'literal' relocation.  The 'lituse'
6881     relocations are used by the linker to optimize the code based on
6882     the final location of the symbol.
6883
6884     Note that these optimizations are dependent on the data flow of the
6885     program.  Therefore, if _any_ 'lituse' is paired with a 'literal'
6886     relocation, then _all_ uses of the register set by the 'literal'
6887     instruction must also be marked with 'lituse' relocations.  This is
6888     because the original 'literal' instruction may be deleted or
6889     transformed into another instruction.
6890
6891     Also note that there may be a one-to-many relationship between
6892     'literal' and 'lituse', but not a many-to-one.  That is, if there
6893     are two code paths that load up the same address and feed the value
6894     to a single use, then the use may not use a 'lituse' relocation.
6895
6896'!lituse_base!N'
6897     Used with any memory format instruction (e.g. 'ldl') to indicate
6898     that the literal is used for an address load.  The offset field of
6899     the instruction must be zero.  During relaxation, the code may be
6900     altered to use a gp-relative load.
6901
6902'!lituse_jsr!N'
6903     Used with a register branch format instruction (e.g. 'jsr') to
6904     indicate that the literal is used for a call.  During relaxation,
6905     the code may be altered to use a direct branch (e.g. 'bsr').
6906
6907'!lituse_jsrdirect!N'
6908     Similar to 'lituse_jsr', but also that this call cannot be vectored
6909     through a PLT entry.  This is useful for functions with special
6910     calling conventions which do not allow the normal call-clobbered
6911     registers to be clobbered.
6912
6913'!lituse_bytoff!N'
6914     Used with a byte mask instruction (e.g. 'extbl') to indicate that
6915     only the low 3 bits of the address are relevant.  During
6916     relaxation, the code may be altered to use an immediate instead of
6917     a register shift.
6918
6919'!lituse_addr!N'
6920     Used with any other instruction to indicate that the original
6921     address is in fact used, and the original 'ldq' instruction may not
6922     be altered or deleted.  This is useful in conjunction with
6923     'lituse_jsr' to test whether a weak symbol is defined.
6924
6925          ldq  $27,foo($29)   !literal!1
6926          beq  $27,is_undef   !lituse_addr!1
6927          jsr  $26,($27),foo  !lituse_jsr!1
6928
6929'!lituse_tlsgd!N'
6930     Used with a register branch format instruction to indicate that the
6931     literal is the call to '__tls_get_addr' used to compute the address
6932     of the thread-local storage variable whose descriptor was loaded
6933     with '!tlsgd!N'.
6934
6935'!lituse_tlsldm!N'
6936     Used with a register branch format instruction to indicate that the
6937     literal is the call to '__tls_get_addr' used to compute the address
6938     of the base of the thread-local storage block for the current
6939     module.  The descriptor for the module must have been loaded with
6940     '!tlsldm!N'.
6941
6942'!gpdisp!N'
6943     Used with 'ldah' and 'lda' to load the GP from the current address,
6944     a-la the 'ldgp' macro.  The source register for the 'ldah'
6945     instruction must contain the address of the 'ldah' instruction.
6946     There must be exactly one 'lda' instruction paired with the 'ldah'
6947     instruction, though it may appear anywhere in the instruction
6948     stream.  The immediate operands must be zero.
6949
6950          bsr  $26,foo
6951          ldah $29,0($26)     !gpdisp!1
6952          lda  $29,0($29)     !gpdisp!1
6953
6954'!gprelhigh'
6955     Used with an 'ldah' instruction to add the high 16 bits of a 32-bit
6956     displacement from the GP.
6957
6958'!gprellow'
6959     Used with any memory format instruction to add the low 16 bits of a
6960     32-bit displacement from the GP.
6961
6962'!gprel'
6963     Used with any memory format instruction to add a 16-bit
6964     displacement from the GP.
6965
6966'!samegp'
6967     Used with any branch format instruction to skip the GP load at the
6968     target address.  The referenced symbol must have the same GP as the
6969     source object file, and it must be declared to either not use '$27'
6970     or perform a standard GP load in the first two instructions via the
6971     '.prologue' directive.
6972
6973'!tlsgd'
6974'!tlsgd!N'
6975     Used with an 'lda' instruction to load the address of a TLS
6976     descriptor for a symbol in the GOT.
6977
6978     The sequence number N is optional, and if present it used to pair
6979     the descriptor load with both the 'literal' loading the address of
6980     the '__tls_get_addr' function and the 'lituse_tlsgd' marking the
6981     call to that function.
6982
6983     For proper relaxation, both the 'tlsgd', 'literal' and 'lituse'
6984     relocations must be in the same extended basic block.  That is, the
6985     relocation with the lowest address must be executed first at
6986     runtime.
6987
6988'!tlsldm'
6989'!tlsldm!N'
6990     Used with an 'lda' instruction to load the address of a TLS
6991     descriptor for the current module in the GOT.
6992
6993     Similar in other respects to 'tlsgd'.
6994
6995'!gotdtprel'
6996     Used with an 'ldq' instruction to load the offset of the TLS symbol
6997     within its module's thread-local storage block.  Also known as the
6998     dynamic thread pointer offset or dtp-relative offset.
6999
7000'!dtprelhi'
7001'!dtprello'
7002'!dtprel'
7003     Like 'gprel' relocations except they compute dtp-relative offsets.
7004
7005'!gottprel'
7006     Used with an 'ldq' instruction to load the offset of the TLS symbol
7007     from the thread pointer.  Also known as the tp-relative offset.
7008
7009'!tprelhi'
7010'!tprello'
7011'!tprel'
7012     Like 'gprel' relocations except they compute tp-relative offsets.
7013
7014
7015File: as.info,  Node: Alpha Floating Point,  Next: Alpha Directives,  Prev: Alpha Syntax,  Up: Alpha-Dependent
7016
70179.2.4 Floating Point
7018--------------------
7019
7020The Alpha family uses both IEEE and VAX floating-point numbers.
7021
7022
7023File: as.info,  Node: Alpha Directives,  Next: Alpha Opcodes,  Prev: Alpha Floating Point,  Up: Alpha-Dependent
7024
70259.2.5 Alpha Assembler Directives
7026--------------------------------
7027
7028'as' for the Alpha supports many additional directives for compatibility
7029with the native assembler.  This section describes them only briefly.
7030
7031   These are the additional directives in 'as' for the Alpha:
7032
7033'.arch CPU'
7034     Specifies the target processor.  This is equivalent to the '-mCPU'
7035     command-line option.  *Note Options: Alpha Options, for a list of
7036     values for CPU.
7037
7038'.ent FUNCTION[, N]'
7039     Mark the beginning of FUNCTION.  An optional number may follow for
7040     compatibility with the OSF/1 assembler, but is ignored.  When
7041     generating '.mdebug' information, this will create a procedure
7042     descriptor for the function.  In ELF, it will mark the symbol as a
7043     function a-la the generic '.type' directive.
7044
7045'.end FUNCTION'
7046     Mark the end of FUNCTION.  In ELF, it will set the size of the
7047     symbol a-la the generic '.size' directive.
7048
7049'.mask MASK, OFFSET'
7050     Indicate which of the integer registers are saved in the current
7051     function's stack frame.  MASK is interpreted a bit mask in which
7052     bit N set indicates that register N is saved.  The registers are
7053     saved in a block located OFFSET bytes from the "canonical frame
7054     address" (CFA) which is the value of the stack pointer on entry to
7055     the function.  The registers are saved sequentially, except that
7056     the return address register (normally '$26') is saved first.
7057
7058     This and the other directives that describe the stack frame are
7059     currently only used when generating '.mdebug' information.  They
7060     may in the future be used to generate DWARF2 '.debug_frame' unwind
7061     information for hand written assembly.
7062
7063'.fmask MASK, OFFSET'
7064     Indicate which of the floating-point registers are saved in the
7065     current stack frame.  The MASK and OFFSET parameters are
7066     interpreted as with '.mask'.
7067
7068'.frame FRAMEREG, FRAMEOFFSET, RETREG[, ARGOFFSET]'
7069     Describes the shape of the stack frame.  The frame pointer in use
7070     is FRAMEREG; normally this is either '$fp' or '$sp'.  The frame
7071     pointer is FRAMEOFFSET bytes below the CFA. The return address is
7072     initially located in RETREG until it is saved as indicated in
7073     '.mask'.  For compatibility with OSF/1 an optional ARGOFFSET
7074     parameter is accepted and ignored.  It is believed to indicate the
7075     offset from the CFA to the saved argument registers.
7076
7077'.prologue N'
7078     Indicate that the stack frame is set up and all registers have been
7079     spilled.  The argument N indicates whether and how the function
7080     uses the incoming "procedure vector" (the address of the called
7081     function) in '$27'.  0 indicates that '$27' is not used; 1
7082     indicates that the first two instructions of the function use '$27'
7083     to perform a load of the GP register; 2 indicates that '$27' is
7084     used in some non-standard way and so the linker cannot elide the
7085     load of the procedure vector during relaxation.
7086
7087'.usepv FUNCTION, WHICH'
7088     Used to indicate the use of the '$27' register, similar to
7089     '.prologue', but without the other semantics of needing to be
7090     inside an open '.ent'/'.end' block.
7091
7092     The WHICH argument should be either 'no', indicating that '$27' is
7093     not used, or 'std', indicating that the first two instructions of
7094     the function perform a GP load.
7095
7096     One might use this directive instead of '.prologue' if you are also
7097     using dwarf2 CFI directives.
7098
7099'.gprel32 EXPRESSION'
7100     Computes the difference between the address in EXPRESSION and the
7101     GP for the current object file, and stores it in 4 bytes.  In
7102     addition to being smaller than a full 8 byte address, this also
7103     does not require a dynamic relocation when used in a shared
7104     library.
7105
7106'.t_floating EXPRESSION'
7107     Stores EXPRESSION as an IEEE double precision value.
7108
7109'.s_floating EXPRESSION'
7110     Stores EXPRESSION as an IEEE single precision value.
7111
7112'.f_floating EXPRESSION'
7113     Stores EXPRESSION as a VAX F format value.
7114
7115'.g_floating EXPRESSION'
7116     Stores EXPRESSION as a VAX G format value.
7117
7118'.d_floating EXPRESSION'
7119     Stores EXPRESSION as a VAX D format value.
7120
7121'.set FEATURE'
7122     Enables or disables various assembler features.  Using the positive
7123     name of the feature enables while using 'noFEATURE' disables.
7124
7125     'at'
7126          Indicates that macro expansions may clobber the "assembler
7127          temporary" ('$at' or '$28') register.  Some macros may not be
7128          expanded without this and will generate an error message if
7129          'noat' is in effect.  When 'at' is in effect, a warning will
7130          be generated if '$at' is used by the programmer.
7131
7132     'macro'
7133          Enables the expansion of macro instructions.  Note that
7134          variants of real instructions, such as 'br label' vs 'br
7135          $31,label' are considered alternate forms and not macros.
7136
7137     'move'
7138     'reorder'
7139     'volatile'
7140          These control whether and how the assembler may re-order
7141          instructions.  Accepted for compatibility with the OSF/1
7142          assembler, but 'as' does not do instruction scheduling, so
7143          these features are ignored.
7144
7145   The following directives are recognized for compatibility with the
7146OSF/1 assembler but are ignored.
7147
7148     .proc           .aproc
7149     .reguse         .livereg
7150     .option         .aent
7151     .ugen           .eflag
7152     .alias          .noalias
7153
7154
7155File: as.info,  Node: Alpha Opcodes,  Prev: Alpha Directives,  Up: Alpha-Dependent
7156
71579.2.6 Opcodes
7158-------------
7159
7160For detailed information on the Alpha machine instruction set, see the
7161Alpha Architecture Handbook
7162(ftp://ftp.digital.com/pub/Digital/info/semiconductor/literature/alphaahb.pdf).
7163
7164
7165File: as.info,  Node: ARC-Dependent,  Next: ARM-Dependent,  Prev: Alpha-Dependent,  Up: Machine Dependencies
7166
71679.3 ARC Dependent Features
7168==========================
7169
7170* Menu:
7171
7172* ARC Options::              Options
7173* ARC Syntax::               Syntax
7174* ARC Directives::           ARC Machine Directives
7175* ARC Modifiers::            ARC Assembler Modifiers
7176* ARC Symbols::              ARC Pre-defined Symbols
7177* ARC Opcodes::              Opcodes
7178
7179
7180File: as.info,  Node: ARC Options,  Next: ARC Syntax,  Up: ARC-Dependent
7181
71829.3.1 Options
7183-------------
7184
7185The following options control the type of CPU for which code is
7186assembled, and generic constraints on the code generated:
7187
7188'-mcpu=CPU'
7189     Set architecture type and register usage for CPU.  There are also
7190     shortcut alias options available for backward compatibility and
7191     convenience.  Supported values for CPU are
7192
7193     'arc600'
7194          Assemble for ARC 600.  Aliases: '-mA6', '-mARC600'.
7195
7196     'arc600_norm'
7197          Assemble for ARC 600 with norm instructions.
7198
7199     'arc600_mul64'
7200          Assemble for ARC 600 with mul64 instructions.
7201
7202     'arc600_mul32x16'
7203          Assemble for ARC 600 with mul32x16 instructions.
7204
7205     'arc601'
7206          Assemble for ARC 601.  Alias: '-mARC601'.
7207
7208     'arc601_norm'
7209          Assemble for ARC 601 with norm instructions.
7210
7211     'arc601_mul64'
7212          Assemble for ARC 601 with mul64 instructions.
7213
7214     'arc601_mul32x16'
7215          Assemble for ARC 601 with mul32x16 instructions.
7216
7217     'arc700'
7218          Assemble for ARC 700.  Aliases: '-mA7', '-mARC700'.
7219
7220     'arcem'
7221          Assemble for ARC EM. Aliases: '-mEM'
7222
7223     'em'
7224          Assemble for ARC EM, identical as arcem variant.
7225
7226     'em4'
7227          Assemble for ARC EM with code-density instructions.
7228
7229     'em4_dmips'
7230          Assemble for ARC EM with code-density instructions.
7231
7232     'em4_fpus'
7233          Assemble for ARC EM with code-density instructions.
7234
7235     'em4_fpuda'
7236          Assemble for ARC EM with code-density, and double-precision
7237          assist instructions.
7238
7239     'quarkse_em'
7240          Assemble for QuarkSE-EM cpu.
7241
7242     'archs'
7243          Assemble for ARC HS. Aliases: '-mHS', '-mav2hs'.
7244
7245     'hs'
7246          Assemble for ARC HS.
7247
7248     'hs34'
7249          Assemble for ARC HS34.
7250
7251     'hs38'
7252          Assemble for ARC HS38.
7253
7254     'hs38_linux'
7255          Assemble for ARC HS38 with floating point support on.
7256
7257     'nps400'
7258          Assemble for ARC 700 with NPS-400 extended instructions.
7259
7260     Note: the '.cpu' directive (*note ARC Directives::) can to be used
7261     to select a core variant from within assembly code.
7262
7263'-EB'
7264     This option specifies that the output generated by the assembler
7265     should be marked as being encoded for a big-endian processor.
7266
7267'-EL'
7268     This option specifies that the output generated by the assembler
7269     should be marked as being encoded for a little-endian processor -
7270     this is the default.
7271
7272'-mcode-density'
7273     This option turns on Code Density instructions.  Only valid for ARC
7274     EM processors.
7275
7276'-mrelax'
7277     Enable support for assembly-time relaxation.  The assembler will
7278     replace a longer version of an instruction with a shorter one,
7279     whenever it is possible.
7280
7281'-mnps400'
7282     Enable support for NPS-400 extended instructions.
7283
7284'-mspfp'
7285     Enable support for single-precision floating point instructions.
7286
7287'-mdpfp'
7288     Enable support for double-precision floating point instructions.
7289
7290'-mfpuda'
7291     Enable support for double-precision assist floating point
7292     instructions.  Only valid for ARC EM processors.
7293
7294
7295File: as.info,  Node: ARC Syntax,  Next: ARC Directives,  Prev: ARC Options,  Up: ARC-Dependent
7296
72979.3.2 Syntax
7298------------
7299
7300* Menu:
7301
7302* ARC-Chars::                Special Characters
7303* ARC-Regs::                 Register Names
7304
7305
7306File: as.info,  Node: ARC-Chars,  Next: ARC-Regs,  Up: ARC Syntax
7307
73089.3.2.1 Special Characters
7309..........................
7310
7311'%'
7312     A register name can optionally be prefixed by a '%' character.  So
7313     register '%r0' is equivalent to 'r0' in the assembly code.
7314
7315'#'
7316     The presence of a '#' character within a line (but not at the start
7317     of a line) indicates the start of a comment that extends to the end
7318     of the current line.
7319
7320     _Note:_ if a line starts with a '#' character then it can also be a
7321     logical line number directive (*note Comments::) or a preprocessor
7322     control command (*note Preprocessing::).
7323
7324'@'
7325     Prefixing an operand with an '@' specifies that the operand is a
7326     symbol and not a register.  This is how the assembler disambiguates
7327     the use of an ARC register name as a symbol.  So the instruction
7328          mov r0, @r0
7329     moves the address of symbol 'r0' into register 'r0'.
7330
7331'`'
7332     The '`' (backtick) character is used to separate statements on a
7333     single line.
7334
7335'-'
7336     Used as a separator to obtain a sequence of commands from a C
7337     preprocessor macro.
7338
7339
7340File: as.info,  Node: ARC-Regs,  Prev: ARC-Chars,  Up: ARC Syntax
7341
73429.3.2.2 Register Names
7343......................
7344
7345The ARC assembler uses the following register names for its core
7346registers:
7347
7348'r0-r31'
7349     The core general registers.  Registers 'r26' through 'r31' have
7350     special functions, and are usually referred to by those synonyms.
7351
7352'gp'
7353     The global pointer and a synonym for 'r26'.
7354
7355'fp'
7356     The frame pointer and a synonym for 'r27'.
7357
7358'sp'
7359     The stack pointer and a synonym for 'r28'.
7360
7361'ilink1'
7362     For ARC 600 and ARC 700, the level 1 interrupt link register and a
7363     synonym for 'r29'.  Not supported for ARCv2.
7364
7365'ilink'
7366     For ARCv2, the interrupt link register and a synonym for 'r29'.
7367     Not supported for ARC 600 and ARC 700.
7368
7369'ilink2'
7370     For ARC 600 and ARC 700, the level 2 interrupt link register and a
7371     synonym for 'r30'.  Not supported for ARC v2.
7372
7373'blink'
7374     The link register and a synonym for 'r31'.
7375
7376'r32-r59'
7377     The extension core registers.
7378
7379'lp_count'
7380     The loop count register.
7381
7382'pcl'
7383     The word aligned program counter.
7384
7385   In addition the ARC processor has a large number of _auxiliary
7386registers_.  The precise set depends on the extensions being supported,
7387but the following baseline set are always defined:
7388
7389'identity'
7390     Processor Identification register.  Auxiliary register address 0x4.
7391
7392'pc'
7393     Program Counter.  Auxiliary register address 0x6.
7394
7395'status32'
7396     Status register.  Auxiliary register address 0x0a.
7397
7398'bta'
7399     Branch Target Address.  Auxiliary register address 0x412.
7400
7401'ecr'
7402     Exception Cause Register.  Auxiliary register address 0x403.
7403
7404'int_vector_base'
7405     Interrupt Vector Base address.  Auxiliary register address 0x25.
7406
7407'status32_p0'
7408     Stored STATUS32 register on entry to level P0 interrupts.
7409     Auxiliary register address 0xb.
7410
7411'aux_user_sp'
7412     Saved User Stack Pointer.  Auxiliary register address 0xd.
7413
7414'eret'
7415     Exception Return Address.  Auxiliary register address 0x400.
7416
7417'erbta'
7418     BTA saved on exception entry.  Auxiliary register address 0x401.
7419
7420'erstatus'
7421     STATUS32 saved on exception.  Auxiliary register address 0x402.
7422
7423'bcr_ver'
7424     Build Configuration Registers Version.  Auxiliary register address
7425     0x60.
7426
7427'bta_link_build'
7428     Build configuration for: BTA Registers.  Auxiliary register address
7429     0x63.
7430
7431'vecbase_ac_build'
7432     Build configuration for: Interrupts.  Auxiliary register address
7433     0x68.
7434
7435'rf_build'
7436     Build configuration for: Core Registers.  Auxiliary register
7437     address 0x6e.
7438
7439'dccm_build'
7440     DCCM RAM Configuration Register.  Auxiliary register address 0xc1.
7441
7442   Additional auxiliary register names are defined according to the
7443processor architecture version and extensions selected by the options.
7444
7445
7446File: as.info,  Node: ARC Directives,  Next: ARC Modifiers,  Prev: ARC Syntax,  Up: ARC-Dependent
7447
74489.3.3 ARC Machine Directives
7449----------------------------
7450
7451The ARC version of 'as' supports the following additional machine
7452directives:
7453
7454'.lcomm SYMBOL, LENGTH[, ALIGNMENT]'
7455     Reserve LENGTH (an absolute expression) bytes for a local common
7456     denoted by SYMBOL.  The section and value of SYMBOL are those of
7457     the new local common.  The addresses are allocated in the bss
7458     section, so that at run-time the bytes start off zeroed.  Since
7459     SYMBOL is not declared global, it is normally not visible to 'ld'.
7460     The optional third parameter, ALIGNMENT, specifies the desired
7461     alignment of the symbol in the bss section, specified as a byte
7462     boundary (for example, an alignment of 16 means that the least
7463     significant 4 bits of the address should be zero).  The alignment
7464     must be an absolute expression, and it must be a power of two.  If
7465     no alignment is specified, as will set the alignment to the largest
7466     power of two less than or equal to the size of the symbol, up to a
7467     maximum of 16.
7468
7469'.lcommon SYMBOL, LENGTH[, ALIGNMENT]'
7470     The same as 'lcomm' directive.
7471
7472'.cpu CPU'
7473     The '.cpu' directive must be followed by the desired core version.
7474     Permitted values for CPU are:
7475     'ARC600'
7476          Assemble for the ARC600 instruction set.
7477
7478     'arc600_norm'
7479          Assemble for ARC 600 with norm instructions.
7480
7481     'arc600_mul64'
7482          Assemble for ARC 600 with mul64 instructions.
7483
7484     'arc600_mul32x16'
7485          Assemble for ARC 600 with mul32x16 instructions.
7486
7487     'arc601'
7488          Assemble for ARC 601 instruction set.
7489
7490     'arc601_norm'
7491          Assemble for ARC 601 with norm instructions.
7492
7493     'arc601_mul64'
7494          Assemble for ARC 601 with mul64 instructions.
7495
7496     'arc601_mul32x16'
7497          Assemble for ARC 601 with mul32x16 instructions.
7498
7499     'ARC700'
7500          Assemble for the ARC700 instruction set.
7501
7502     'NPS400'
7503          Assemble for the NPS400 instruction set.
7504
7505     'EM'
7506          Assemble for the ARC EM instruction set.
7507
7508     'arcem'
7509          Assemble for ARC EM instruction set
7510
7511     'em4'
7512          Assemble for ARC EM with code-density instructions.
7513
7514     'em4_dmips'
7515          Assemble for ARC EM with code-density instructions.
7516
7517     'em4_fpus'
7518          Assemble for ARC EM with code-density instructions.
7519
7520     'em4_fpuda'
7521          Assemble for ARC EM with code-density, and double-precision
7522          assist instructions.
7523
7524     'quarkse_em'
7525          Assemble for QuarkSE-EM instruction set.
7526
7527     'HS'
7528          Assemble for the ARC HS instruction set.
7529
7530     'archs'
7531          Assemble for ARC HS instruction set.
7532
7533     'hs'
7534          Assemble for ARC HS instruction set.
7535
7536     'hs34'
7537          Assemble for ARC HS34 instruction set.
7538
7539     'hs38'
7540          Assemble for ARC HS38 instruction set.
7541
7542     'hs38_linux'
7543          Assemble for ARC HS38 with floating point support on.
7544
7545     Note: the '.cpu' directive overrides the command-line option
7546     '-mcpu=CPU'; a warning is emitted when the version is not
7547     consistent between the two.
7548
7549'.extAuxRegister NAME, ADDR, MODE'
7550     Auxiliary registers can be defined in the assembler source code by
7551     using this directive.  The first parameter, NAME, is the name of
7552     the new auxiliary register.  The second parameter, ADDR, is address
7553     the of the auxiliary register.  The third parameter, MODE,
7554     specifies whether the register is readable and/or writable and is
7555     one of:
7556     'r'
7557          Read only;
7558
7559     'w'
7560          Write only;
7561
7562     'r|w'
7563          Read and write.
7564
7565     For example:
7566          	.extAuxRegister mulhi, 0x12, w
7567     specifies a write only extension auxiliary register, MULHI at
7568     address 0x12.
7569
7570'.extCondCode SUFFIX, VAL'
7571     ARC supports extensible condition codes.  This directive defines a
7572     new condition code, to be known by the suffix, SUFFIX and will
7573     depend on the value, VAL in the condition code.
7574
7575     For example:
7576          	.extCondCode is_busy,0x14
7577          	add.is_busy  r1,r2,r3
7578     will only execute the 'add' instruction if the condition code value
7579     is 0x14.
7580
7581'.extCoreRegister NAME, REGNUM, MODE, SHORTCUT'
7582     Specifies an extension core register named NAME as a synonym for
7583     the register numbered REGNUM.  The register number must be between
7584     32 and 59.  The third argument, MODE, indicates whether the
7585     register is readable and/or writable and is one of:
7586     'r'
7587          Read only;
7588
7589     'w'
7590          Write only;
7591
7592     'r|w'
7593          Read and write.
7594
7595     The final parameter, SHORTCUT indicates whether the register has a
7596     short cut in the pipeline.  The valid values are:
7597     'can_shortcut'
7598          The register has a short cut in the pipeline;
7599
7600     'cannot_shortcut'
7601          The register does not have a short cut in the pipeline.
7602
7603     For example:
7604          	.extCoreRegister mlo, 57, r , can_shortcut
7605     defines a read only extension core register, 'mlo', which is
7606     register 57, and can short cut the pipeline.
7607
7608'.extInstruction NAME, OPCODE, SUBOPCODE, SUFFIXCLASS, SYNTAXCLASS'
7609     ARC allows the user to specify extension instructions.  These
7610     extension instructions are not macros; the assembler creates
7611     encodings for use of these instructions according to the
7612     specification by the user.
7613
7614     The first argument, NAME, gives the name of the instruction.
7615
7616     The second argument, OPCODE, is the opcode to be used (bits 31:27
7617     in the encoding).
7618
7619     The third argument, SUBOPCODE, is the sub-opcode to be used, but
7620     the correct value also depends on the fifth argument, SYNTAXCLASS
7621
7622     The fourth argument, SUFFIXCLASS, determines the kinds of suffixes
7623     to be allowed.  Valid values are:
7624     'SUFFIX_NONE'
7625          No suffixes are permitted;
7626
7627     'SUFFIX_COND'
7628          Conditional suffixes are permitted;
7629
7630     'SUFFIX_FLAG'
7631          Flag setting suffixes are permitted.
7632
7633     'SUFFIX_COND|SUFFIX_FLAG'
7634          Both conditional and flag setting suffices are permitted.
7635
7636     The fifth and final argument, SYNTAXCLASS, determines the syntax
7637     class for the instruction.  It can have the following values:
7638     'SYNTAX_2OP'
7639          Two Operand Instruction;
7640
7641     'SYNTAX_3OP'
7642          Three Operand Instruction.
7643
7644     'SYNTAX_1OP'
7645          One Operand Instruction.
7646
7647     'SYNTAX_NOP'
7648          No Operand Instruction.
7649
7650     The syntax class may be followed by '|' and one of the following
7651     modifiers.
7652
7653     'OP1_MUST_BE_IMM'
7654          Modifies syntax class 'SYNTAX_3OP', specifying that the first
7655          operand of a three-operand instruction must be an immediate
7656          (i.e., the result is discarded).  This is usually used to set
7657          the flags using specific instructions and not retain results.
7658
7659     'OP1_IMM_IMPLIED'
7660          Modifies syntax class 'SYNTAX_20P', specifying that there is
7661          an implied immediate destination operand which does not appear
7662          in the syntax.
7663
7664          For example, if the source code contains an instruction like:
7665               inst r1,r2
7666          the first argument is an implied immediate (that is, the
7667          result is discarded).  This is the same as though the source
7668          code were: inst 0,r1,r2.
7669
7670     For example, defining a 64-bit multiplier with immediate operands:
7671          	.extInstruction  mp64, 0x07, 0x2d, SUFFIX_COND|SUFFIX_FLAG,
7672          			 SYNTAX_3OP|OP1_MUST_BE_IMM
7673     which specifies an extension instruction named 'mp64' with 3
7674     operands.  It sets the flags and can be used with a condition code,
7675     for which the first operand is an immediate, i.e.  equivalent to
7676     discarding the result of the operation.
7677
7678     A two operands instruction variant would be:
7679          	.extInstruction mul64, 0x07, 0x2d, SUFFIX_COND,
7680          	SYNTAX_2OP|OP1_IMM_IMPLIED
7681     which describes a two operand instruction with an implicit first
7682     immediate operand.  The result of this operation would be
7683     discarded.
7684
7685'.arc_attribute TAG, VALUE'
7686     Set the ARC object attribute TAG to VALUE.
7687
7688     The TAG is either an attribute number, or one of the following:
7689     'Tag_ARC_PCS_config', 'Tag_ARC_CPU_base', 'Tag_ARC_CPU_variation',
7690     'Tag_ARC_CPU_name', 'Tag_ARC_ABI_rf16', 'Tag_ARC_ABI_osver',
7691     'Tag_ARC_ABI_sda', 'Tag_ARC_ABI_pic', 'Tag_ARC_ABI_tls',
7692     'Tag_ARC_ABI_enumsize', 'Tag_ARC_ABI_exceptions',
7693     'Tag_ARC_ABI_double_size', 'Tag_ARC_ISA_config',
7694     'Tag_ARC_ISA_apex', 'Tag_ARC_ISA_mpy_option'
7695
7696     The VALUE is either a 'number', '"string"', or 'number, "string"'
7697     depending on the tag.
7698
7699
7700File: as.info,  Node: ARC Modifiers,  Next: ARC Symbols,  Prev: ARC Directives,  Up: ARC-Dependent
7701
77029.3.4 ARC Assembler Modifiers
7703-----------------------------
7704
7705The following additional assembler modifiers have been added for
7706position-independent code.  These modifiers are available only with the
7707ARC 700 and above processors and generate relocation entries, which are
7708interpreted by the linker as follows:
7709
7710'@pcl(SYMBOL)'
7711     Relative distance of SYMBOL's from the current program counter
7712     location.
7713
7714'@gotpc(SYMBOL)'
7715     Relative distance of SYMBOL's Global Offset Table entry from the
7716     current program counter location.
7717
7718'@gotoff(SYMBOL)'
7719     Distance of SYMBOL from the base of the Global Offset Table.
7720
7721'@plt(SYMBOL)'
7722     Distance of SYMBOL's Procedure Linkage Table entry from the current
7723     program counter.  This is valid only with branch and link
7724     instructions and PC-relative calls.
7725
7726'@sda(SYMBOL)'
7727     Relative distance of SYMBOL from the base of the Small Data
7728     Pointer.
7729
7730
7731File: as.info,  Node: ARC Symbols,  Next: ARC Opcodes,  Prev: ARC Modifiers,  Up: ARC-Dependent
7732
77339.3.5 ARC Pre-defined Symbols
7734-----------------------------
7735
7736The following assembler symbols will prove useful when developing
7737position-independent code.  These symbols are available only with the
7738ARC 700 and above processors.
7739
7740'__GLOBAL_OFFSET_TABLE__'
7741     Symbol referring to the base of the Global Offset Table.
7742
7743'__DYNAMIC__'
7744     An alias for the Global Offset Table 'Base__GLOBAL_OFFSET_TABLE__'.
7745     It can be used only with '@gotpc' modifiers.
7746
7747
7748File: as.info,  Node: ARC Opcodes,  Prev: ARC Symbols,  Up: ARC-Dependent
7749
77509.3.6 Opcodes
7751-------------
7752
7753For information on the ARC instruction set, see 'ARC Programmers
7754Reference Manual', available where you download the processor IP
7755library.
7756
7757
7758File: as.info,  Node: ARM-Dependent,  Next: AVR-Dependent,  Prev: ARC-Dependent,  Up: Machine Dependencies
7759
77609.4 ARM Dependent Features
7761==========================
7762
7763* Menu:
7764
7765* ARM Options::              Options
7766* ARM Syntax::               Syntax
7767* ARM Floating Point::       Floating Point
7768* ARM Directives::           ARM Machine Directives
7769* ARM Opcodes::              Opcodes
7770* ARM Mapping Symbols::      Mapping Symbols
7771* ARM Unwinding Tutorial::   Unwinding
7772
7773
7774File: as.info,  Node: ARM Options,  Next: ARM Syntax,  Up: ARM-Dependent
7775
77769.4.1 Options
7777-------------
7778
7779'-mcpu=PROCESSOR[+EXTENSION...]'
7780     This option specifies the target processor.  The assembler will
7781     issue an error message if an attempt is made to assemble an
7782     instruction which will not execute on the target processor.  The
7783     following processor names are recognized: 'arm1', 'arm2', 'arm250',
7784     'arm3', 'arm6', 'arm60', 'arm600', 'arm610', 'arm620', 'arm7',
7785     'arm7m', 'arm7d', 'arm7dm', 'arm7di', 'arm7dmi', 'arm70', 'arm700',
7786     'arm700i', 'arm710', 'arm710t', 'arm720', 'arm720t', 'arm740t',
7787     'arm710c', 'arm7100', 'arm7500', 'arm7500fe', 'arm7t', 'arm7tdmi',
7788     'arm7tdmi-s', 'arm8', 'arm810', 'strongarm', 'strongarm1',
7789     'strongarm110', 'strongarm1100', 'strongarm1110', 'arm9', 'arm920',
7790     'arm920t', 'arm922t', 'arm940t', 'arm9tdmi', 'fa526' (Faraday FA526
7791     processor), 'fa626' (Faraday FA626 processor), 'arm9e', 'arm926e',
7792     'arm926ej-s', 'arm946e-r0', 'arm946e', 'arm946e-s', 'arm966e-r0',
7793     'arm966e', 'arm966e-s', 'arm968e-s', 'arm10t', 'arm10tdmi',
7794     'arm10e', 'arm1020', 'arm1020t', 'arm1020e', 'arm1022e',
7795     'arm1026ej-s', 'fa606te' (Faraday FA606TE processor), 'fa616te'
7796     (Faraday FA616TE processor), 'fa626te' (Faraday FA626TE processor),
7797     'fmp626' (Faraday FMP626 processor), 'fa726te' (Faraday FA726TE
7798     processor), 'arm1136j-s', 'arm1136jf-s', 'arm1156t2-s',
7799     'arm1156t2f-s', 'arm1176jz-s', 'arm1176jzf-s', 'mpcore',
7800     'mpcorenovfp', 'cortex-a5', 'cortex-a7', 'cortex-a8', 'cortex-a9',
7801     'cortex-a15', 'cortex-a17', 'cortex-a32', 'cortex-a35',
7802     'cortex-a53', 'cortex-a55', 'cortex-a57', 'cortex-a72',
7803     'cortex-a73', 'cortex-a75', 'cortex-a76', 'cortex-a76ae',
7804     'cortex-a77', 'cortex-a78', 'cortex-a78ae', 'cortex-a78c', 'ares',
7805     'cortex-r4', 'cortex-r4f', 'cortex-r5', 'cortex-r7', 'cortex-r8',
7806     'cortex-r52', 'cortex-m35p', 'cortex-m33', 'cortex-m23',
7807     'cortex-m7', 'cortex-m4', 'cortex-m3', 'cortex-m1', 'cortex-m0',
7808     'cortex-m0plus', 'cortex-x1', 'exynos-m1', 'marvell-pj4',
7809     'marvell-whitney', 'neoverse-n1', 'neoverse-n2', 'neoverse-v1',
7810     'xgene1', 'xgene2', 'ep9312' (ARM920 with Cirrus Maverick
7811     coprocessor), 'i80200' (Intel XScale processor) 'iwmmxt' (Intel
7812     XScale processor with Wireless MMX technology coprocessor) and
7813     'xscale'.  The special name 'all' may be used to allow the
7814     assembler to accept instructions valid for any ARM processor.
7815
7816     In addition to the basic instruction set, the assembler can be told
7817     to accept various extension mnemonics that extend the processor
7818     using the co-processor instruction space.  For example,
7819     '-mcpu=arm920+maverick' is equivalent to specifying '-mcpu=ep9312'.
7820
7821     Multiple extensions may be specified, separated by a '+'.  The
7822     extensions should be specified in ascending alphabetical order.
7823
7824     Some extensions may be restricted to particular architectures; this
7825     is documented in the list of extensions below.
7826
7827     Extension mnemonics may also be removed from those the assembler
7828     accepts.  This is done be prepending 'no' to the option that adds
7829     the extension.  Extensions that are removed should be listed after
7830     all extensions which have been added, again in ascending
7831     alphabetical order.  For example, '-mcpu=ep9312+nomaverick' is
7832     equivalent to specifying '-mcpu=arm920'.
7833
7834     The following extensions are currently supported: 'bf16' (BFloat16
7835     extensions for v8.6-A architecture), 'i8mm' (Int8 Matrix Multiply
7836     extensions for v8.6-A architecture), 'crc' 'crypto' (Cryptography
7837     Extensions for v8-A architecture, implies 'fp+simd'), 'dotprod'
7838     (Dot Product Extensions for v8.2-A architecture, implies
7839     'fp+simd'), 'fp' (Floating Point Extensions for v8-A architecture),
7840     'fp16' (FP16 Extensions for v8.2-A architecture, implies 'fp'),
7841     'fp16fml' (FP16 Floating Point Multiplication Variant Extensions
7842     for v8.2-A architecture, implies 'fp16'), 'idiv' (Integer Divide
7843     Extensions for v7-A and v7-R architectures), 'iwmmxt', 'iwmmxt2',
7844     'xscale', 'maverick', 'mp' (Multiprocessing Extensions for v7-A and
7845     v7-R architectures), 'os' (Operating System for v6M architecture),
7846     'predres' (Execution and Data Prediction Restriction Instruction
7847     for v8-A architectures, added by default from v8.5-A), 'sb'
7848     (Speculation Barrier Instruction for v8-A architectures, added by
7849     default from v8.5-A), 'sec' (Security Extensions for v6K and v7-A
7850     architectures), 'simd' (Advanced SIMD Extensions for v8-A
7851     architecture, implies 'fp'), 'virt' (Virtualization Extensions for
7852     v7-A architecture, implies 'idiv'), 'pan' (Privileged Access Never
7853     Extensions for v8-A architecture), 'ras' (Reliability, Availability
7854     and Serviceability extensions for v8-A architecture), 'rdma'
7855     (ARMv8.1 Advanced SIMD extensions for v8-A architecture, implies
7856     'simd') and 'xscale'.
7857
7858'-march=ARCHITECTURE[+EXTENSION...]'
7859     This option specifies the target architecture.  The assembler will
7860     issue an error message if an attempt is made to assemble an
7861     instruction which will not execute on the target architecture.  The
7862     following architecture names are recognized: 'armv1', 'armv2',
7863     'armv2a', 'armv2s', 'armv3', 'armv3m', 'armv4', 'armv4xm',
7864     'armv4t', 'armv4txm', 'armv5', 'armv5t', 'armv5txm', 'armv5te',
7865     'armv5texp', 'armv6', 'armv6j', 'armv6k', 'armv6z', 'armv6kz',
7866     'armv6-m', 'armv6s-m', 'armv7', 'armv7-a', 'armv7ve', 'armv7-r',
7867     'armv7-m', 'armv7e-m', 'armv8-a', 'armv8.1-a', 'armv8.2-a',
7868     'armv8.3-a', 'armv8-r', 'armv8.4-a', 'armv8.5-a', 'armv8-m.base',
7869     'armv8-m.main', 'armv8.1-m.main', 'armv8.6-a', 'iwmmxt', 'iwmmxt2'
7870     and 'xscale'.  If both '-mcpu' and '-march' are specified, the
7871     assembler will use the setting for '-mcpu'.
7872
7873     The architecture option can be extended with a set extension
7874     options.  These extensions are context sensitive, i.e.  the same
7875     extension may mean different things when used with different
7876     architectures.  When used together with a '-mfpu' option, the union
7877     of both feature enablement is taken.  See their availability and
7878     meaning below:
7879
7880     For 'armv5te', 'armv5texp', 'armv5tej', 'armv6', 'armv6j',
7881     'armv6k', 'armv6z', 'armv6kz', 'armv6zk', 'armv6t2', 'armv6kt2' and
7882     'armv6zt2':
7883
7884     '+fp': Enables VFPv2 instructions.  '+nofp': Disables all FPU
7885     instrunctions.
7886
7887     For 'armv7':
7888
7889     '+fp': Enables VFPv3 instructions with 16 double-word registers.
7890     '+nofp': Disables all FPU instructions.
7891
7892     For 'armv7-a':
7893
7894     '+fp': Enables VFPv3 instructions with 16 double-word registers.
7895     '+vfpv3-d16': Alias for '+fp'.  '+vfpv3': Enables VFPv3
7896     instructions with 32 double-word registers.  '+vfpv3-d16-fp16':
7897     Enables VFPv3 with half precision floating-point conversion
7898     instructions and 16 double-word registers.  '+vfpv3-fp16': Enables
7899     VFPv3 with half precision floating-point conversion instructions
7900     and 32 double-word registers.  '+vfpv4-d16': Enables VFPv4
7901     instructions with 16 double-word registers.  '+vfpv4': Enables
7902     VFPv4 instructions with 32 double-word registers.  '+simd': Enables
7903     VFPv3 and NEONv1 instructions with 32 double-word registers.
7904     '+neon': Alias for '+simd'.  '+neon-vfpv3': Alias for '+simd'.
7905     '+neon-fp16': Enables VFPv3, half precision floating-point
7906     conversion and NEONv1 instructions with 32 double-word registers.
7907     '+neon-vfpv4': Enables VFPv4 and NEONv1 with Fused-MAC instructions
7908     and 32 double-word registers.  '+mp': Enables Multiprocessing
7909     Extensions.  '+sec': Enables Security Extensions.  '+nofp':
7910     Disables all FPU and NEON instructions.  '+nosimd': Disables all
7911     NEON instructions.
7912
7913     For 'armv7ve':
7914
7915     '+fp': Enables VFPv4 instructions with 16 double-word registers.
7916     '+vfpv4-d16': Alias for '+fp'.  '+vfpv3-d16': Enables VFPv3
7917     instructions with 16 double-word registers.  '+vfpv3': Enables
7918     VFPv3 instructions with 32 double-word registers.
7919     '+vfpv3-d16-fp16': Enables VFPv3 with half precision floating-point
7920     conversion instructions and 16 double-word registers.
7921     '+vfpv3-fp16': Enables VFPv3 with half precision floating-point
7922     conversion instructions and 32 double-word registers.  '+vfpv4':
7923     Enables VFPv4 instructions with 32 double-word registers.  '+simd':
7924     Enables VFPv4 and NEONv1 with Fused-MAC instructions and 32
7925     double-word registers.  '+neon-vfpv4': Alias for '+simd'.  '+neon':
7926     Enables VFPv3 and NEONv1 instructions with 32 double-word
7927     registers.  '+neon-vfpv3': Alias for '+neon'.  '+neon-fp16':
7928     Enables VFPv3, half precision floating-point conversion and NEONv1
7929     instructions with 32 double-word registers.  double-word registers.
7930     '+nofp': Disables all FPU and NEON instructions.  '+nosimd':
7931     Disables all NEON instructions.
7932
7933     For 'armv7-r':
7934
7935     '+fp.sp': Enables single-precision only VFPv3 instructions with 16
7936     double-word registers.  '+vfpv3xd': Alias for '+fp.sp'.  '+fp':
7937     Enables VFPv3 instructions with 16 double-word registers.
7938     '+vfpv3-d16': Alias for '+fp'.  '+vfpv3xd-fp16': Enables
7939     single-precision only VFPv3 and half floating-point conversion
7940     instructions with 16 double-word registers.  '+vfpv3-d16-fp16':
7941     Enables VFPv3 and half precision floating-point conversion
7942     instructions with 16 double-word registers.  '+idiv': Enables
7943     integer division instructions in ARM mode.  '+nofp': Disables all
7944     FPU instructions.
7945
7946     For 'armv7e-m':
7947
7948     '+fp': Enables single-precision only VFPv4 instructions with 16
7949     double-word registers.  '+vfpvf4-sp-d16': Alias for '+fp'.
7950     '+fpv5': Enables single-precision only VFPv5 instructions with 16
7951     double-word registers.  '+fp.dp': Enables VFPv5 instructions with
7952     16 double-word registers.  '+fpv5-d16"': Alias for '+fp.dp'.
7953     '+nofp': Disables all FPU instructions.
7954
7955     For 'armv8-m.main':
7956
7957     '+dsp': Enables DSP Extension.  '+fp': Enables single-precision
7958     only VFPv5 instructions with 16 double-word registers.  '+fp.dp':
7959     Enables VFPv5 instructions with 16 double-word registers.
7960     '+cdecp0' (CDE extensions for v8-m architecture with coprocessor
7961     0), '+cdecp1' (CDE extensions for v8-m architecture with
7962     coprocessor 1), '+cdecp2' (CDE extensions for v8-m architecture
7963     with coprocessor 2), '+cdecp3' (CDE extensions for v8-m
7964     architecture with coprocessor 3), '+cdecp4' (CDE extensions for
7965     v8-m architecture with coprocessor 4), '+cdecp5' (CDE extensions
7966     for v8-m architecture with coprocessor 5), '+cdecp6' (CDE
7967     extensions for v8-m architecture with coprocessor 6), '+cdecp7'
7968     (CDE extensions for v8-m architecture with coprocessor 7), '+nofp':
7969     Disables all FPU instructions.  '+nodsp': Disables DSP Extension.
7970
7971     For 'armv8.1-m.main':
7972
7973     '+dsp': Enables DSP Extension.  '+fp': Enables single and half
7974     precision scalar Floating Point Extensions for Armv8.1-M Mainline
7975     with 16 double-word registers.  '+fp.dp': Enables double precision
7976     scalar Floating Point Extensions for Armv8.1-M Mainline, implies
7977     '+fp'.  '+mve': Enables integer only M-profile Vector Extension for
7978     Armv8.1-M Mainline, implies '+dsp'.  '+mve.fp': Enables Floating
7979     Point M-profile Vector Extension for Armv8.1-M Mainline, implies
7980     '+mve' and '+fp'.  '+nofp': Disables all FPU instructions.
7981     '+nodsp': Disables DSP Extension.  '+nomve': Disables all M-profile
7982     Vector Extensions.
7983
7984     For 'armv8-a':
7985
7986     '+crc': Enables CRC32 Extension.  '+simd': Enables VFP and NEON for
7987     Armv8-A. '+crypto': Enables Cryptography Extensions for Armv8-A,
7988     implies '+simd'.  '+sb': Enables Speculation Barrier Instruction
7989     for Armv8-A. '+predres': Enables Execution and Data Prediction
7990     Restriction Instruction for Armv8-A. '+nofp': Disables all FPU,
7991     NEON and Cryptography Extensions.  '+nocrypto': Disables
7992     Cryptography Extensions.
7993
7994     For 'armv8.1-a':
7995
7996     '+simd': Enables VFP and NEON for Armv8.1-A. '+crypto': Enables
7997     Cryptography Extensions for Armv8-A, implies '+simd'.  '+sb':
7998     Enables Speculation Barrier Instruction for Armv8-A. '+predres':
7999     Enables Execution and Data Prediction Restriction Instruction for
8000     Armv8-A. '+nofp': Disables all FPU, NEON and Cryptography
8001     Extensions.  '+nocrypto': Disables Cryptography Extensions.
8002
8003     For 'armv8.2-a' and 'armv8.3-a':
8004
8005     '+simd': Enables VFP and NEON for Armv8.1-A. '+fp16': Enables FP16
8006     Extension for Armv8.2-A, implies '+simd'.  '+fp16fml': Enables FP16
8007     Floating Point Multiplication Variant Extensions for Armv8.2-A,
8008     implies '+fp16'.  '+crypto': Enables Cryptography Extensions for
8009     Armv8-A, implies '+simd'.  '+dotprod': Enables Dot Product
8010     Extensions for Armv8.2-A, implies '+simd'.  '+sb': Enables
8011     Speculation Barrier Instruction for Armv8-A. '+predres': Enables
8012     Execution and Data Prediction Restriction Instruction for Armv8-A.
8013     '+nofp': Disables all FPU, NEON, Cryptography and Dot Product
8014     Extensions.  '+nocrypto': Disables Cryptography Extensions.
8015
8016     For 'armv8.4-a':
8017
8018     '+simd': Enables VFP and NEON for Armv8.1-A and Dot Product
8019     Extensions for Armv8.2-A. '+fp16': Enables FP16 Floating Point and
8020     Floating Point Multiplication Variant Extensions for Armv8.2-A,
8021     implies '+simd'.  '+crypto': Enables Cryptography Extensions for
8022     Armv8-A, implies '+simd'.  '+sb': Enables Speculation Barrier
8023     Instruction for Armv8-A. '+predres': Enables Execution and Data
8024     Prediction Restriction Instruction for Armv8-A. '+nofp': Disables
8025     all FPU, NEON, Cryptography and Dot Product Extensions.
8026     '+nocryptp': Disables Cryptography Extensions.
8027
8028     For 'armv8.5-a':
8029
8030     '+simd': Enables VFP and NEON for Armv8.1-A and Dot Product
8031     Extensions for Armv8.2-A. '+fp16': Enables FP16 Floating Point and
8032     Floating Point Multiplication Variant Extensions for Armv8.2-A,
8033     implies '+simd'.  '+crypto': Enables Cryptography Extensions for
8034     Armv8-A, implies '+simd'.  '+nofp': Disables all FPU, NEON,
8035     Cryptography and Dot Product Extensions.  '+nocryptp': Disables
8036     Cryptography Extensions.
8037
8038'-mfpu=FLOATING-POINT-FORMAT'
8039
8040     This option specifies the floating point format to assemble for.
8041     The assembler will issue an error message if an attempt is made to
8042     assemble an instruction which will not execute on the target
8043     floating point unit.  The following format options are recognized:
8044     'softfpa', 'fpe', 'fpe2', 'fpe3', 'fpa', 'fpa10', 'fpa11',
8045     'arm7500fe', 'softvfp', 'softvfp+vfp', 'vfp', 'vfp10', 'vfp10-r0',
8046     'vfp9', 'vfpxd', 'vfpv2', 'vfpv3', 'vfpv3-fp16', 'vfpv3-d16',
8047     'vfpv3-d16-fp16', 'vfpv3xd', 'vfpv3xd-d16', 'vfpv4', 'vfpv4-d16',
8048     'fpv4-sp-d16', 'fpv5-sp-d16', 'fpv5-d16', 'fp-armv8', 'arm1020t',
8049     'arm1020e', 'arm1136jf-s', 'maverick', 'neon', 'neon-vfpv3',
8050     'neon-fp16', 'neon-vfpv4', 'neon-fp-armv8', 'crypto-neon-fp-armv8',
8051     'neon-fp-armv8.1' and 'crypto-neon-fp-armv8.1'.
8052
8053     In addition to determining which instructions are assembled, this
8054     option also affects the way in which the '.double' assembler
8055     directive behaves when assembling little-endian code.
8056
8057     The default is dependent on the processor selected.  For
8058     Architecture 5 or later, the default is to assemble for VFP
8059     instructions; for earlier architectures the default is to assemble
8060     for FPA instructions.
8061
8062'-mfp16-format=FORMAT'
8063     This option specifies the half-precision floating point format to
8064     use when assembling floating point numbers emitted by the
8065     '.float16' directive.  The following format options are recognized:
8066     'ieee', 'alternative'.  If 'ieee' is specified then the IEEE
8067     754-2008 half-precision floating point format is used, if
8068     'alternative' is specified then the Arm alternative half-precision
8069     format is used.  If this option is set on the command line then the
8070     format is fixed and cannot be changed with the 'float16_format'
8071     directive.  If this value is not set then the IEEE 754-2008 format
8072     is used until the format is explicitly set with the
8073     'float16_format' directive.
8074
8075'-mthumb'
8076     This option specifies that the assembler should start assembling
8077     Thumb instructions; that is, it should behave as though the file
8078     starts with a '.code 16' directive.
8079
8080'-mthumb-interwork'
8081     This option specifies that the output generated by the assembler
8082     should be marked as supporting interworking.  It also affects the
8083     behaviour of the 'ADR' and 'ADRL' pseudo opcodes.
8084
8085'-mimplicit-it=never'
8086'-mimplicit-it=always'
8087'-mimplicit-it=arm'
8088'-mimplicit-it=thumb'
8089     The '-mimplicit-it' option controls the behavior of the assembler
8090     when conditional instructions are not enclosed in IT blocks.  There
8091     are four possible behaviors.  If 'never' is specified, such
8092     constructs cause a warning in ARM code and an error in Thumb-2
8093     code.  If 'always' is specified, such constructs are accepted in
8094     both ARM and Thumb-2 code, where the IT instruction is added
8095     implicitly.  If 'arm' is specified, such constructs are accepted in
8096     ARM code and cause an error in Thumb-2 code.  If 'thumb' is
8097     specified, such constructs cause a warning in ARM code and are
8098     accepted in Thumb-2 code.  If you omit this option, the behavior is
8099     equivalent to '-mimplicit-it=arm'.
8100
8101'-mapcs-26'
8102'-mapcs-32'
8103     These options specify that the output generated by the assembler
8104     should be marked as supporting the indicated version of the Arm
8105     Procedure.  Calling Standard.
8106
8107'-matpcs'
8108     This option specifies that the output generated by the assembler
8109     should be marked as supporting the Arm/Thumb Procedure Calling
8110     Standard.  If enabled this option will cause the assembler to
8111     create an empty debugging section in the object file called
8112     .arm.atpcs.  Debuggers can use this to determine the ABI being used
8113     by.
8114
8115'-mapcs-float'
8116     This indicates the floating point variant of the APCS should be
8117     used.  In this variant floating point arguments are passed in FP
8118     registers rather than integer registers.
8119
8120'-mapcs-reentrant'
8121     This indicates that the reentrant variant of the APCS should be
8122     used.  This variant supports position independent code.
8123
8124'-mfloat-abi=ABI'
8125     This option specifies that the output generated by the assembler
8126     should be marked as using specified floating point ABI. The
8127     following values are recognized: 'soft', 'softfp' and 'hard'.
8128
8129'-meabi=VER'
8130     This option specifies which EABI version the produced object files
8131     should conform to.  The following values are recognized: 'gnu', '4'
8132     and '5'.
8133
8134'-EB'
8135     This option specifies that the output generated by the assembler
8136     should be marked as being encoded for a big-endian processor.
8137
8138     Note: If a program is being built for a system with big-endian data
8139     and little-endian instructions then it should be assembled with the
8140     '-EB' option, (all of it, code and data) and then linked with the
8141     '--be8' option.  This will reverse the endianness of the
8142     instructions back to little-endian, but leave the data as
8143     big-endian.
8144
8145'-EL'
8146     This option specifies that the output generated by the assembler
8147     should be marked as being encoded for a little-endian processor.
8148
8149'-k'
8150     This option specifies that the output of the assembler should be
8151     marked as position-independent code (PIC).
8152
8153'--fix-v4bx'
8154     Allow 'BX' instructions in ARMv4 code.  This is intended for use
8155     with the linker option of the same name.
8156
8157'-mwarn-deprecated'
8158'-mno-warn-deprecated'
8159     Enable or disable warnings about using deprecated options or
8160     features.  The default is to warn.
8161
8162'-mccs'
8163     Turns on CodeComposer Studio assembly syntax compatibility mode.
8164
8165'-mwarn-syms'
8166'-mno-warn-syms'
8167     Enable or disable warnings about symbols that match the names of
8168     ARM instructions.  The default is to warn.
8169
8170
8171File: as.info,  Node: ARM Syntax,  Next: ARM Floating Point,  Prev: ARM Options,  Up: ARM-Dependent
8172
81739.4.2 Syntax
8174------------
8175
8176* Menu:
8177
8178* ARM-Instruction-Set::      Instruction Set
8179* ARM-Chars::                Special Characters
8180* ARM-Regs::                 Register Names
8181* ARM-Relocations::	     Relocations
8182* ARM-Neon-Alignment::	     NEON Alignment Specifiers
8183
8184
8185File: as.info,  Node: ARM-Instruction-Set,  Next: ARM-Chars,  Up: ARM Syntax
8186
81879.4.2.1 Instruction Set Syntax
8188..............................
8189
8190Two slightly different syntaxes are support for ARM and THUMB
8191instructions.  The default, 'divided', uses the old style where ARM and
8192THUMB instructions had their own, separate syntaxes.  The new, 'unified'
8193syntax, which can be selected via the '.syntax' directive, and has the
8194following main features:
8195
8196   * Immediate operands do not require a '#' prefix.
8197
8198   * The 'IT' instruction may appear, and if it does it is validated
8199     against subsequent conditional affixes.  In ARM mode it does not
8200     generate machine code, in THUMB mode it does.
8201
8202   * For ARM instructions the conditional affixes always appear at the
8203     end of the instruction.  For THUMB instructions conditional affixes
8204     can be used, but only inside the scope of an 'IT' instruction.
8205
8206   * All of the instructions new to the V6T2 architecture (and later)
8207     are available.  (Only a few such instructions can be written in the
8208     'divided' syntax).
8209
8210   * The '.N' and '.W' suffixes are recognized and honored.
8211
8212   * All instructions set the flags if and only if they have an 's'
8213     affix.
8214
8215
8216File: as.info,  Node: ARM-Chars,  Next: ARM-Regs,  Prev: ARM-Instruction-Set,  Up: ARM Syntax
8217
82189.4.2.2 Special Characters
8219..........................
8220
8221The presence of a '@' anywhere on a line indicates the start of a
8222comment that extends to the end of that line.
8223
8224   If a '#' appears as the first character of a line then the whole line
8225is treated as a comment, but in this case the line could also be a
8226logical line number directive (*note Comments::) or a preprocessor
8227control command (*note Preprocessing::).
8228
8229   The ';' character can be used instead of a newline to separate
8230statements.
8231
8232   Either '#' or '$' can be used to indicate immediate operands.
8233
8234   *TODO* Explain about /data modifier on symbols.
8235
8236
8237File: as.info,  Node: ARM-Regs,  Next: ARM-Relocations,  Prev: ARM-Chars,  Up: ARM Syntax
8238
82399.4.2.3 Register Names
8240......................
8241
8242*TODO* Explain about ARM register naming, and the predefined names.
8243
8244
8245File: as.info,  Node: ARM-Relocations,  Next: ARM-Neon-Alignment,  Prev: ARM-Regs,  Up: ARM Syntax
8246
82479.4.2.4 ARM relocation generation
8248.................................
8249
8250Specific data relocations can be generated by putting the relocation
8251name in parentheses after the symbol name.  For example:
8252
8253             .word foo(TARGET1)
8254
8255   This will generate an 'R_ARM_TARGET1' relocation against the symbol
8256FOO.  The following relocations are supported: 'GOT', 'GOTOFF',
8257'TARGET1', 'TARGET2', 'SBREL', 'TLSGD', 'TLSLDM', 'TLSLDO', 'TLSDESC',
8258'TLSCALL', 'GOTTPOFF', 'GOT_PREL' and 'TPOFF'.
8259
8260   For compatibility with older toolchains the assembler also accepts
8261'(PLT)' after branch targets.  On legacy targets this will generate the
8262deprecated 'R_ARM_PLT32' relocation.  On EABI targets it will encode
8263either the 'R_ARM_CALL' or 'R_ARM_JUMP24' relocation, as appropriate.
8264
8265   Relocations for 'MOVW' and 'MOVT' instructions can be generated by
8266prefixing the value with '#:lower16:' and '#:upper16' respectively.  For
8267example to load the 32-bit address of foo into r0:
8268
8269             MOVW r0, #:lower16:foo
8270             MOVT r0, #:upper16:foo
8271
8272   Relocations 'R_ARM_THM_ALU_ABS_G0_NC', 'R_ARM_THM_ALU_ABS_G1_NC',
8273'R_ARM_THM_ALU_ABS_G2_NC' and 'R_ARM_THM_ALU_ABS_G3_NC' can be generated
8274by prefixing the value with '#:lower0_7:#', '#:lower8_15:#',
8275'#:upper0_7:#' and '#:upper8_15:#' respectively.  For example to load
8276the 32-bit address of foo into r0:
8277
8278             MOVS r0, #:upper8_15:#foo
8279             LSLS r0, r0, #8
8280             ADDS r0, #:upper0_7:#foo
8281             LSLS r0, r0, #8
8282             ADDS r0, #:lower8_15:#foo
8283             LSLS r0, r0, #8
8284             ADDS r0, #:lower0_7:#foo
8285
8286
8287File: as.info,  Node: ARM-Neon-Alignment,  Prev: ARM-Relocations,  Up: ARM Syntax
8288
82899.4.2.5 NEON Alignment Specifiers
8290.................................
8291
8292Some NEON load/store instructions allow an optional address alignment
8293qualifier.  The ARM documentation specifies that this is indicated by '@
8294ALIGN'.  However GAS already interprets the '@' character as a "line
8295comment" start, so ': ALIGN' is used instead.  For example:
8296
8297             vld1.8 {q0}, [r0, :128]
8298
8299
8300File: as.info,  Node: ARM Floating Point,  Next: ARM Directives,  Prev: ARM Syntax,  Up: ARM-Dependent
8301
83029.4.3 Floating Point
8303--------------------
8304
8305The ARM family uses IEEE floating-point numbers.
8306
8307
8308File: as.info,  Node: ARM Directives,  Next: ARM Opcodes,  Prev: ARM Floating Point,  Up: ARM-Dependent
8309
83109.4.4 ARM Machine Directives
8311----------------------------
8312
8313'.align EXPRESSION [, EXPRESSION]'
8314     This is the generic .ALIGN directive.  For the ARM however if the
8315     first argument is zero (ie no alignment is needed) the assembler
8316     will behave as if the argument had been 2 (ie pad to the next four
8317     byte boundary).  This is for compatibility with ARM's own
8318     assembler.
8319
8320'.arch NAME'
8321     Select the target architecture.  Valid values for NAME are the same
8322     as for the '-march' command-line option without the instruction set
8323     extension.
8324
8325     Specifying '.arch' clears any previously selected architecture
8326     extensions.
8327
8328'.arch_extension NAME'
8329     Add or remove an architecture extension to the target architecture.
8330     Valid values for NAME are the same as those accepted as
8331     architectural extensions by the '-mcpu' and '-march' command-line
8332     options.
8333
8334     '.arch_extension' may be used multiple times to add or remove
8335     extensions incrementally to the architecture being compiled for.
8336
8337'.arm'
8338     This performs the same action as .CODE 32.
8339
8340'.bss'
8341     This directive switches to the '.bss' section.
8342
8343'.cantunwind'
8344     Prevents unwinding through the current function.  No personality
8345     routine or exception table data is required or permitted.
8346
8347'.code [16|32]'
8348     This directive selects the instruction set being generated.  The
8349     value 16 selects Thumb, with the value 32 selecting ARM.
8350
8351'.cpu NAME'
8352     Select the target processor.  Valid values for NAME are the same as
8353     for the '-mcpu' command-line option without the instruction set
8354     extension.
8355
8356     Specifying '.cpu' clears any previously selected architecture
8357     extensions.
8358
8359'NAME .dn REGISTER NAME [.TYPE] [[INDEX]]'
8360'NAME .qn REGISTER NAME [.TYPE] [[INDEX]]'
8361
8362     The 'dn' and 'qn' directives are used to create typed and/or
8363     indexed register aliases for use in Advanced SIMD Extension (Neon)
8364     instructions.  The former should be used to create aliases of
8365     double-precision registers, and the latter to create aliases of
8366     quad-precision registers.
8367
8368     If these directives are used to create typed aliases, those aliases
8369     can be used in Neon instructions instead of writing types after the
8370     mnemonic or after each operand.  For example:
8371
8372                  x .dn d2.f32
8373                  y .dn d3.f32
8374                  z .dn d4.f32[1]
8375                  vmul x,y,z
8376
8377     This is equivalent to writing the following:
8378
8379                  vmul.f32 d2,d3,d4[1]
8380
8381     Aliases created using 'dn' or 'qn' can be destroyed using 'unreq'.
8382
8383'.eabi_attribute TAG, VALUE'
8384     Set the EABI object attribute TAG to VALUE.
8385
8386     The TAG is either an attribute number, or one of the following:
8387     'Tag_CPU_raw_name', 'Tag_CPU_name', 'Tag_CPU_arch',
8388     'Tag_CPU_arch_profile', 'Tag_ARM_ISA_use', 'Tag_THUMB_ISA_use',
8389     'Tag_FP_arch', 'Tag_WMMX_arch', 'Tag_Advanced_SIMD_arch',
8390     'Tag_MVE_arch', 'Tag_PCS_config', 'Tag_ABI_PCS_R9_use',
8391     'Tag_ABI_PCS_RW_data', 'Tag_ABI_PCS_RO_data',
8392     'Tag_ABI_PCS_GOT_use', 'Tag_ABI_PCS_wchar_t',
8393     'Tag_ABI_FP_rounding', 'Tag_ABI_FP_denormal',
8394     'Tag_ABI_FP_exceptions', 'Tag_ABI_FP_user_exceptions',
8395     'Tag_ABI_FP_number_model', 'Tag_ABI_align_needed',
8396     'Tag_ABI_align_preserved', 'Tag_ABI_enum_size',
8397     'Tag_ABI_HardFP_use', 'Tag_ABI_VFP_args', 'Tag_ABI_WMMX_args',
8398     'Tag_ABI_optimization_goals', 'Tag_ABI_FP_optimization_goals',
8399     'Tag_compatibility', 'Tag_CPU_unaligned_access',
8400     'Tag_FP_HP_extension', 'Tag_ABI_FP_16bit_format',
8401     'Tag_MPextension_use', 'Tag_DIV_use', 'Tag_nodefaults',
8402     'Tag_also_compatible_with', 'Tag_conformance', 'Tag_T2EE_use',
8403     'Tag_Virtualization_use'
8404
8405     The VALUE is either a 'number', '"string"', or 'number, "string"'
8406     depending on the tag.
8407
8408     Note - the following legacy values are also accepted by TAG:
8409     'Tag_VFP_arch', 'Tag_ABI_align8_needed',
8410     'Tag_ABI_align8_preserved', 'Tag_VFP_HP_extension',
8411
8412'.even'
8413     This directive aligns to an even-numbered address.
8414
8415'.extend EXPRESSION [, EXPRESSION]*'
8416'.ldouble EXPRESSION [, EXPRESSION]*'
8417     These directives write 12byte long double floating-point values to
8418     the output section.  These are not compatible with current ARM
8419     processors or ABIs.
8420
8421'.float16 VALUE [,...,VALUE_N]'
8422     Place the half precision floating point representation of one or
8423     more floating-point values into the current section.  The exact
8424     format of the encoding is specified by '.float16_format'.  If the
8425     format has not been explicitly set yet (either via the
8426     '.float16_format' directive or the command line option) then the
8427     IEEE 754-2008 format is used.
8428
8429'.float16_format FORMAT'
8430     Set the format to use when encoding float16 values emitted by the
8431     '.float16' directive.  Once the format has been set it cannot be
8432     changed.  'format' should be one of the following: 'ieee' (encode
8433     in the IEEE 754-2008 half precision format) or 'alternative'
8434     (encode in the Arm alternative half precision format).
8435
8436'.fnend'
8437     Marks the end of a function with an unwind table entry.  The unwind
8438     index table entry is created when this directive is processed.
8439
8440     If no personality routine has been specified then standard
8441     personality routine 0 or 1 will be used, depending on the number of
8442     unwind opcodes required.
8443
8444'.fnstart'
8445     Marks the start of a function with an unwind table entry.
8446
8447'.force_thumb'
8448     This directive forces the selection of Thumb instructions, even if
8449     the target processor does not support those instructions
8450
8451'.fpu NAME'
8452     Select the floating-point unit to assemble for.  Valid values for
8453     NAME are the same as for the '-mfpu' command-line option.
8454
8455'.handlerdata'
8456     Marks the end of the current function, and the start of the
8457     exception table entry for that function.  Anything between this
8458     directive and the '.fnend' directive will be added to the exception
8459     table entry.
8460
8461     Must be preceded by a '.personality' or '.personalityindex'
8462     directive.
8463
8464'.inst OPCODE [ , ... ]'
8465'.inst.n OPCODE [ , ... ]'
8466'.inst.w OPCODE [ , ... ]'
8467     Generates the instruction corresponding to the numerical value
8468     OPCODE.  '.inst.n' and '.inst.w' allow the Thumb instruction size
8469     to be specified explicitly, overriding the normal encoding rules.
8470
8471'.ldouble EXPRESSION [, EXPRESSION]*'
8472     See '.extend'.
8473
8474'.ltorg'
8475     This directive causes the current contents of the literal pool to
8476     be dumped into the current section (which is assumed to be the
8477     .text section) at the current location (aligned to a word
8478     boundary).  'GAS' maintains a separate literal pool for each
8479     section and each sub-section.  The '.ltorg' directive will only
8480     affect the literal pool of the current section and sub-section.  At
8481     the end of assembly all remaining, un-empty literal pools will
8482     automatically be dumped.
8483
8484     Note - older versions of 'GAS' would dump the current literal pool
8485     any time a section change occurred.  This is no longer done, since
8486     it prevents accurate control of the placement of literal pools.
8487
8488'.movsp REG [, #OFFSET]'
8489     Tell the unwinder that REG contains an offset from the current
8490     stack pointer.  If OFFSET is not specified then it is assumed to be
8491     zero.
8492
8493'.object_arch NAME'
8494     Override the architecture recorded in the EABI object attribute
8495     section.  Valid values for NAME are the same as for the '.arch'
8496     directive.  Typically this is useful when code uses runtime
8497     detection of CPU features.
8498
8499'.packed EXPRESSION [, EXPRESSION]*'
8500     This directive writes 12-byte packed floating-point values to the
8501     output section.  These are not compatible with current ARM
8502     processors or ABIs.
8503
8504'.pad #COUNT'
8505     Generate unwinder annotations for a stack adjustment of COUNT
8506     bytes.  A positive value indicates the function prologue allocated
8507     stack space by decrementing the stack pointer.
8508
8509'.personality NAME'
8510     Sets the personality routine for the current function to NAME.
8511
8512'.personalityindex INDEX'
8513     Sets the personality routine for the current function to the EABI
8514     standard routine number INDEX
8515
8516'.pool'
8517     This is a synonym for .ltorg.
8518
8519'NAME .req REGISTER NAME'
8520     This creates an alias for REGISTER NAME called NAME.  For example:
8521
8522                  foo .req r0
8523
8524'.save REGLIST'
8525     Generate unwinder annotations to restore the registers in REGLIST.
8526     The format of REGLIST is the same as the corresponding
8527     store-multiple instruction.
8528
8529     _core registers_
8530            .save {r4, r5, r6, lr}
8531            stmfd sp!, {r4, r5, r6, lr}
8532     _FPA registers_
8533            .save f4, 2
8534            sfmfd f4, 2, [sp]!
8535     _VFP registers_
8536            .save {d8, d9, d10}
8537            fstmdx sp!, {d8, d9, d10}
8538     _iWMMXt registers_
8539            .save {wr10, wr11}
8540            wstrd wr11, [sp, #-8]!
8541            wstrd wr10, [sp, #-8]!
8542          or
8543            .save wr11
8544            wstrd wr11, [sp, #-8]!
8545            .save wr10
8546            wstrd wr10, [sp, #-8]!
8547
8548'.setfp FPREG, SPREG [, #OFFSET]'
8549     Make all unwinder annotations relative to a frame pointer.  Without
8550     this the unwinder will use offsets from the stack pointer.
8551
8552     The syntax of this directive is the same as the 'add' or 'mov'
8553     instruction used to set the frame pointer.  SPREG must be either
8554     'sp' or mentioned in a previous '.movsp' directive.
8555
8556          .movsp ip
8557          mov ip, sp
8558          ...
8559          .setfp fp, ip, #4
8560          add fp, ip, #4
8561
8562'.secrel32 EXPRESSION [, EXPRESSION]*'
8563     This directive emits relocations that evaluate to the
8564     section-relative offset of each expression's symbol.  This
8565     directive is only supported for PE targets.
8566
8567'.syntax [unified | divided]'
8568     This directive sets the Instruction Set Syntax as described in the
8569     *note ARM-Instruction-Set:: section.
8570
8571'.thumb'
8572     This performs the same action as .CODE 16.
8573
8574'.thumb_func'
8575     This directive specifies that the following symbol is the name of a
8576     Thumb encoded function.  This information is necessary in order to
8577     allow the assembler and linker to generate correct code for
8578     interworking between Arm and Thumb instructions and should be used
8579     even if interworking is not going to be performed.  The presence of
8580     this directive also implies '.thumb'
8581
8582     This directive is not necessary when generating EABI objects.  On
8583     these targets the encoding is implicit when generating Thumb code.
8584
8585'.thumb_set'
8586     This performs the equivalent of a '.set' directive in that it
8587     creates a symbol which is an alias for another symbol (possibly not
8588     yet defined).  This directive also has the added property in that
8589     it marks the aliased symbol as being a thumb function entry point,
8590     in the same way that the '.thumb_func' directive does.
8591
8592'.tlsdescseq TLS-VARIABLE'
8593     This directive is used to annotate parts of an inlined TLS
8594     descriptor trampoline.  Normally the trampoline is provided by the
8595     linker, and this directive is not needed.
8596
8597'.unreq ALIAS-NAME'
8598     This undefines a register alias which was previously defined using
8599     the 'req', 'dn' or 'qn' directives.  For example:
8600
8601                  foo .req r0
8602                  .unreq foo
8603
8604     An error occurs if the name is undefined.  Note - this pseudo op
8605     can be used to delete builtin in register name aliases (eg 'r0').
8606     This should only be done if it is really necessary.
8607
8608'.unwind_raw OFFSET, BYTE1, ...'
8609     Insert one of more arbitrary unwind opcode bytes, which are known
8610     to adjust the stack pointer by OFFSET bytes.
8611
8612     For example '.unwind_raw 4, 0xb1, 0x01' is equivalent to '.save
8613     {r0}'
8614
8615'.vsave VFP-REGLIST'
8616     Generate unwinder annotations to restore the VFP registers in
8617     VFP-REGLIST using FLDMD. Also works for VFPv3 registers that are to
8618     be restored using VLDM. The format of VFP-REGLIST is the same as
8619     the corresponding store-multiple instruction.
8620
8621     _VFP registers_
8622            .vsave {d8, d9, d10}
8623            fstmdd sp!, {d8, d9, d10}
8624     _VFPv3 registers_
8625            .vsave {d15, d16, d17}
8626            vstm sp!, {d15, d16, d17}
8627
8628     Since FLDMX and FSTMX are now deprecated, this directive should be
8629     used in favour of '.save' for saving VFP registers for ARMv6 and
8630     above.
8631
8632
8633File: as.info,  Node: ARM Opcodes,  Next: ARM Mapping Symbols,  Prev: ARM Directives,  Up: ARM-Dependent
8634
86359.4.5 Opcodes
8636-------------
8637
8638'as' implements all the standard ARM opcodes.  It also implements
8639several pseudo opcodes, including several synthetic load instructions.
8640
8641'NOP'
8642            nop
8643
8644     This pseudo op will always evaluate to a legal ARM instruction that
8645     does nothing.  Currently it will evaluate to MOV r0, r0.
8646
8647'LDR'
8648            ldr <register> , = <expression>
8649
8650     If expression evaluates to a numeric constant then a MOV or MVN
8651     instruction will be used in place of the LDR instruction, if the
8652     constant can be generated by either of these instructions.
8653     Otherwise the constant will be placed into the nearest literal pool
8654     (if it not already there) and a PC relative LDR instruction will be
8655     generated.
8656
8657'ADR'
8658            adr <register> <label>
8659
8660     This instruction will load the address of LABEL into the indicated
8661     register.  The instruction will evaluate to a PC relative ADD or
8662     SUB instruction depending upon where the label is located.  If the
8663     label is out of range, or if it is not defined in the same file
8664     (and section) as the ADR instruction, then an error will be
8665     generated.  This instruction will not make use of the literal pool.
8666
8667     If LABEL is a thumb function symbol, and thumb interworking has
8668     been enabled via the '-mthumb-interwork' option then the bottom bit
8669     of the value stored into REGISTER will be set.  This allows the
8670     following sequence to work as expected:
8671
8672            adr     r0, thumb_function
8673            blx     r0
8674
8675'ADRL'
8676            adrl <register> <label>
8677
8678     This instruction will load the address of LABEL into the indicated
8679     register.  The instruction will evaluate to one or two PC relative
8680     ADD or SUB instructions depending upon where the label is located.
8681     If a second instruction is not needed a NOP instruction will be
8682     generated in its place, so that this instruction is always 8 bytes
8683     long.
8684
8685     If the label is out of range, or if it is not defined in the same
8686     file (and section) as the ADRL instruction, then an error will be
8687     generated.  This instruction will not make use of the literal pool.
8688
8689     If LABEL is a thumb function symbol, and thumb interworking has
8690     been enabled via the '-mthumb-interwork' option then the bottom bit
8691     of the value stored into REGISTER will be set.
8692
8693   For information on the ARM or Thumb instruction sets, see 'ARM
8694Software Development Toolkit Reference Manual', Advanced RISC Machines
8695Ltd.
8696
8697
8698File: as.info,  Node: ARM Mapping Symbols,  Next: ARM Unwinding Tutorial,  Prev: ARM Opcodes,  Up: ARM-Dependent
8699
87009.4.6 Mapping Symbols
8701---------------------
8702
8703The ARM ELF specification requires that special symbols be inserted into
8704object files to mark certain features:
8705
8706'$a'
8707     At the start of a region of code containing ARM instructions.
8708
8709'$t'
8710     At the start of a region of code containing THUMB instructions.
8711
8712'$d'
8713     At the start of a region of data.
8714
8715   The assembler will automatically insert these symbols for you - there
8716is no need to code them yourself.  Support for tagging symbols ($b, $f,
8717$p and $m) which is also mentioned in the current ARM ELF specification
8718is not implemented.  This is because they have been dropped from the new
8719EABI and so tools cannot rely upon their presence.
8720
8721
8722File: as.info,  Node: ARM Unwinding Tutorial,  Prev: ARM Mapping Symbols,  Up: ARM-Dependent
8723
87249.4.7 Unwinding
8725---------------
8726
8727The ABI for the ARM Architecture specifies a standard format for
8728exception unwind information.  This information is used when an
8729exception is thrown to determine where control should be transferred.
8730In particular, the unwind information is used to determine which
8731function called the function that threw the exception, and which
8732function called that one, and so forth.  This information is also used
8733to restore the values of callee-saved registers in the function catching
8734the exception.
8735
8736   If you are writing functions in assembly code, and those functions
8737call other functions that throw exceptions, you must use assembly pseudo
8738ops to ensure that appropriate exception unwind information is
8739generated.  Otherwise, if one of the functions called by your assembly
8740code throws an exception, the run-time library will be unable to unwind
8741the stack through your assembly code and your program will not behave
8742correctly.
8743
8744   To illustrate the use of these pseudo ops, we will examine the code
8745that G++ generates for the following C++ input:
8746
8747void callee (int *);
8748
8749int
8750caller ()
8751{
8752  int i;
8753  callee (&i);
8754  return i;
8755}
8756
8757   This example does not show how to throw or catch an exception from
8758assembly code.  That is a much more complex operation and should always
8759be done in a high-level language, such as C++, that directly supports
8760exceptions.
8761
8762   The code generated by one particular version of G++ when compiling
8763the example above is:
8764
8765_Z6callerv:
8766	.fnstart
8767.LFB2:
8768	@ Function supports interworking.
8769	@ args = 0, pretend = 0, frame = 8
8770	@ frame_needed = 1, uses_anonymous_args = 0
8771	stmfd	sp!, {fp, lr}
8772	.save {fp, lr}
8773.LCFI0:
8774	.setfp fp, sp, #4
8775	add	fp, sp, #4
8776.LCFI1:
8777	.pad #8
8778	sub	sp, sp, #8
8779.LCFI2:
8780	sub	r3, fp, #8
8781	mov	r0, r3
8782	bl	_Z6calleePi
8783	ldr	r3, [fp, #-8]
8784	mov	r0, r3
8785	sub	sp, fp, #4
8786	ldmfd	sp!, {fp, lr}
8787	bx	lr
8788.LFE2:
8789	.fnend
8790
8791   Of course, the sequence of instructions varies based on the options
8792you pass to GCC and on the version of GCC in use.  The exact
8793instructions are not important since we are focusing on the pseudo ops
8794that are used to generate unwind information.
8795
8796   An important assumption made by the unwinder is that the stack frame
8797does not change during the body of the function.  In particular, since
8798we assume that the assembly code does not itself throw an exception, the
8799only point where an exception can be thrown is from a call, such as the
8800'bl' instruction above.  At each call site, the same saved registers
8801(including 'lr', which indicates the return address) must be located in
8802the same locations relative to the frame pointer.
8803
8804   The '.fnstart' (*note .fnstart pseudo op: arm_fnstart.) pseudo op
8805appears immediately before the first instruction of the function while
8806the '.fnend' (*note .fnend pseudo op: arm_fnend.) pseudo op appears
8807immediately after the last instruction of the function.  These pseudo
8808ops specify the range of the function.
8809
8810   Only the order of the other pseudos ops (e.g., '.setfp' or '.pad')
8811matters; their exact locations are irrelevant.  In the example above,
8812the compiler emits the pseudo ops with particular instructions.  That
8813makes it easier to understand the code, but it is not required for
8814correctness.  It would work just as well to emit all of the pseudo ops
8815other than '.fnend' in the same order, but immediately after '.fnstart'.
8816
8817   The '.save' (*note .save pseudo op: arm_save.) pseudo op indicates
8818registers that have been saved to the stack so that they can be restored
8819before the function returns.  The argument to the '.save' pseudo op is a
8820list of registers to save.  If a register is "callee-saved" (as
8821specified by the ABI) and is modified by the function you are writing,
8822then your code must save the value before it is modified and restore the
8823original value before the function returns.  If an exception is thrown,
8824the run-time library restores the values of these registers from their
8825locations on the stack before returning control to the exception
8826handler.  (Of course, if an exception is not thrown, the function that
8827contains the '.save' pseudo op restores these registers in the function
8828epilogue, as is done with the 'ldmfd' instruction above.)
8829
8830   You do not have to save callee-saved registers at the very beginning
8831of the function and you do not need to use the '.save' pseudo op
8832immediately following the point at which the registers are saved.
8833However, if you modify a callee-saved register, you must save it on the
8834stack before modifying it and before calling any functions which might
8835throw an exception.  And, you must use the '.save' pseudo op to indicate
8836that you have done so.
8837
8838   The '.pad' (*note .pad: arm_pad.) pseudo op indicates a modification
8839of the stack pointer that does not save any registers.  The argument is
8840the number of bytes (in decimal) that are subtracted from the stack
8841pointer.  (On ARM CPUs, the stack grows downwards, so subtracting from
8842the stack pointer increases the size of the stack.)
8843
8844   The '.setfp' (*note .setfp pseudo op: arm_setfp.) pseudo op indicates
8845the register that contains the frame pointer.  The first argument is the
8846register that is set, which is typically 'fp'.  The second argument
8847indicates the register from which the frame pointer takes its value.
8848The third argument, if present, is the value (in decimal) added to the
8849register specified by the second argument to compute the value of the
8850frame pointer.  You should not modify the frame pointer in the body of
8851the function.
8852
8853   If you do not use a frame pointer, then you should not use the
8854'.setfp' pseudo op.  If you do not use a frame pointer, then you should
8855avoid modifying the stack pointer outside of the function prologue.
8856Otherwise, the run-time library will be unable to find saved registers
8857when it is unwinding the stack.
8858
8859   The pseudo ops described above are sufficient for writing assembly
8860code that calls functions which may throw exceptions.  If you need to
8861know more about the object-file format used to represent unwind
8862information, you may consult the 'Exception Handling ABI for the ARM
8863Architecture' available from <http://infocenter.arm.com>.
8864
8865
8866File: as.info,  Node: AVR-Dependent,  Next: Blackfin-Dependent,  Prev: ARM-Dependent,  Up: Machine Dependencies
8867
88689.5 AVR Dependent Features
8869==========================
8870
8871* Menu:
8872
8873* AVR Options::              Options
8874* AVR Syntax::               Syntax
8875* AVR Opcodes::              Opcodes
8876* AVR Pseudo Instructions::  Pseudo Instructions
8877
8878
8879File: as.info,  Node: AVR Options,  Next: AVR Syntax,  Up: AVR-Dependent
8880
88819.5.1 Options
8882-------------
8883
8884'-mmcu=MCU'
8885     Specify ATMEL AVR instruction set or MCU type.
8886
8887     Instruction set avr1 is for the minimal AVR core, not supported by
8888     the C compiler, only for assembler programs (MCU types: at90s1200,
8889     attiny11, attiny12, attiny15, attiny28).
8890
8891     Instruction set avr2 (default) is for the classic AVR core with up
8892     to 8K program memory space (MCU types: at90s2313, at90s2323,
8893     at90s2333, at90s2343, attiny22, attiny26, at90s4414, at90s4433,
8894     at90s4434, at90s8515, at90c8534, at90s8535).
8895
8896     Instruction set avr25 is for the classic AVR core with up to 8K
8897     program memory space plus the MOVW instruction (MCU types:
8898     attiny13, attiny13a, attiny2313, attiny2313a, attiny24, attiny24a,
8899     attiny4313, attiny44, attiny44a, attiny84, attiny84a, attiny25,
8900     attiny45, attiny85, attiny261, attiny261a, attiny461, attiny461a,
8901     attiny861, attiny861a, attiny87, attiny43u, attiny48, attiny88,
8902     attiny828, at86rf401, ata6289, ata5272).
8903
8904     Instruction set avr3 is for the classic AVR core with up to 128K
8905     program memory space (MCU types: at43usb355, at76c711).
8906
8907     Instruction set avr31 is for the classic AVR core with exactly 128K
8908     program memory space (MCU types: atmega103, at43usb320).
8909
8910     Instruction set avr35 is for classic AVR core plus MOVW, CALL, and
8911     JMP instructions (MCU types: attiny167, attiny1634, at90usb82,
8912     at90usb162, atmega8u2, atmega16u2, atmega32u2, ata5505).
8913
8914     Instruction set avr4 is for the enhanced AVR core with up to 8K
8915     program memory space (MCU types: atmega48, atmega48a, atmega48pa,
8916     atmega48p, atmega8, atmega8a, atmega88, atmega88a, atmega88p,
8917     atmega88pa, atmega8515, atmega8535, atmega8hva, at90pwm1, at90pwm2,
8918     at90pwm2b, at90pwm3, at90pwm3b, at90pwm81, ata6285, ata6286).
8919
8920     Instruction set avr5 is for the enhanced AVR core with up to 128K
8921     program memory space (MCU types: at90pwm161, atmega16, atmega16a,
8922     atmega161, atmega162, atmega163, atmega164a, atmega164p,
8923     atmega164pa, atmega165, atmega165a, atmega165p, atmega165pa,
8924     atmega168, atmega168a, atmega168p, atmega168pa, atmega169,
8925     atmega169a, atmega169p, atmega169pa, atmega32, atmega323,
8926     atmega324a, atmega324p, atmega324pa, atmega325, atmega325a,
8927     atmega32, atmega32a, atmega323, atmega324a, atmega324p,
8928     atmega324pa, atmega325, atmega325a, atmega325p, atmega325p,
8929     atmega325pa, atmega3250, atmega3250a, atmega3250p, atmega3250pa,
8930     atmega328, atmega328p, atmega329, atmega329a, atmega329p,
8931     atmega329pa, atmega3290a, atmega3290p, atmega3290pa, atmega406,
8932     atmega64, atmega64a, atmega64rfr2, atmega644rfr2, atmega640,
8933     atmega644, atmega644a, atmega644p, atmega644pa, atmega645,
8934     atmega645a, atmega645p, atmega6450, atmega6450a, atmega6450p,
8935     atmega649, atmega649a, atmega649p, atmega6490, atmega6490a,
8936     atmega6490p, atmega16hva, atmega16hva2, atmega16hvb,
8937     atmega16hvbrevb, atmega32hvb, atmega32hvbrevb, atmega64hve,
8938     at90can32, at90can64, at90pwm161, at90pwm216, at90pwm316,
8939     atmega32c1, atmega64c1, atmega16m1, atmega32m1, atmega64m1,
8940     atmega16u4, atmega32u4, atmega32u6, at90usb646, at90usb647, at94k,
8941     at90scr100, ata5790, ata5795).
8942
8943     Instruction set avr51 is for the enhanced AVR core with exactly
8944     128K program memory space (MCU types: atmega128, atmega128a,
8945     atmega1280, atmega1281, atmega1284, atmega1284p, atmega128rfa1,
8946     atmega128rfr2, atmega1284rfr2, at90can128, at90usb1286,
8947     at90usb1287, m3000).
8948
8949     Instruction set avr6 is for the enhanced AVR core with a 3-byte PC
8950     (MCU types: atmega2560, atmega2561, atmega256rfr2, atmega2564rfr2).
8951
8952     Instruction set avrxmega2 is for the XMEGA AVR core with 8K to 64K
8953     program memory space and less than 64K data space (MCU types:
8954     atxmega16a4, atxmega16a4u, atxmega16c4, atxmega16d4, atxmega16x1,
8955     atxmega32a4, atxmega32a4u, atxmega32c4, atxmega32d4, atxmega16e5,
8956     atxmega8e5, atxmega32e5, atxmega32x1).
8957
8958     Instruction set avrxmega3 is for the XMEGA AVR core with up to 64K
8959     of combined program memory and RAM, and with program memory visible
8960     in the RAM address space (MCU types: attiny212, attiny214,
8961     attiny412, attiny414, attiny416, attiny417, attiny814, attiny816,
8962     attiny817, attiny1614, attiny1616, attiny1617, attiny3214,
8963     attiny3216, attiny3217).
8964
8965     Instruction set avrxmega4 is for the XMEGA AVR core with up to 64K
8966     program memory space and less than 64K data space (MCU types:
8967     atxmega64a3, atxmega64a3u, atxmega64a4u, atxmega64b1, atxmega64b3,
8968     atxmega64c3, atxmega64d3, atxmega64d4).
8969
8970     Instruction set avrxmega5 is for the XMEGA AVR core with up to 64K
8971     program memory space and greater than 64K data space (MCU types:
8972     atxmega64a1, atxmega64a1u).
8973
8974     Instruction set avrxmega6 is for the XMEGA AVR core with larger
8975     than 64K program memory space and less than 64K data space (MCU
8976     types: atxmega128a3, atxmega128a3u, atxmega128c3, atxmega128d3,
8977     atxmega128d4, atxmega192a3, atxmega192a3u, atxmega128b1,
8978     atxmega128b3, atxmega192c3, atxmega192d3, atxmega256a3,
8979     atxmega256a3u, atxmega256a3b, atxmega256a3bu, atxmega256c3,
8980     atxmega256d3, atxmega384c3, atxmega256d3).
8981
8982     Instruction set avrxmega7 is for the XMEGA AVR core with larger
8983     than 64K program memory space and greater than 64K data space (MCU
8984     types: atxmega128a1, atxmega128a1u, atxmega128a4u).
8985
8986     Instruction set avrtiny is for the ATtiny4/5/9/10/20/40
8987     microcontrollers.
8988
8989'-mall-opcodes'
8990     Accept all AVR opcodes, even if not supported by '-mmcu'.
8991
8992'-mno-skip-bug'
8993     This option disable warnings for skipping two-word instructions.
8994
8995'-mno-wrap'
8996     This option reject 'rjmp/rcall' instructions with 8K wrap-around.
8997
8998'-mrmw'
8999     Accept Read-Modify-Write ('XCH,LAC,LAS,LAT') instructions.
9000
9001'-mlink-relax'
9002     Enable support for link-time relaxation.  This is now on by default
9003     and this flag no longer has any effect.
9004
9005'-mno-link-relax'
9006     Disable support for link-time relaxation.  The assembler will
9007     resolve relocations when it can, and may be able to better compress
9008     some debug information.
9009
9010'-mgcc-isr'
9011     Enable the '__gcc_isr' pseudo instruction.
9012
9013
9014File: as.info,  Node: AVR Syntax,  Next: AVR Opcodes,  Prev: AVR Options,  Up: AVR-Dependent
9015
90169.5.2 Syntax
9017------------
9018
9019* Menu:
9020
9021* AVR-Chars::                Special Characters
9022* AVR-Regs::                 Register Names
9023* AVR-Modifiers::            Relocatable Expression Modifiers
9024
9025
9026File: as.info,  Node: AVR-Chars,  Next: AVR-Regs,  Up: AVR Syntax
9027
90289.5.2.1 Special Characters
9029..........................
9030
9031The presence of a ';' anywhere on a line indicates the start of a
9032comment that extends to the end of that line.
9033
9034   If a '#' appears as the first character of a line, the whole line is
9035treated as a comment, but in this case the line can also be a logical
9036line number directive (*note Comments::) or a preprocessor control
9037command (*note Preprocessing::).
9038
9039   The '$' character can be used instead of a newline to separate
9040statements.
9041
9042
9043File: as.info,  Node: AVR-Regs,  Next: AVR-Modifiers,  Prev: AVR-Chars,  Up: AVR Syntax
9044
90459.5.2.2 Register Names
9046......................
9047
9048The AVR has 32 x 8-bit general purpose working registers 'r0', 'r1', ...
9049'r31'.  Six of the 32 registers can be used as three 16-bit indirect
9050address register pointers for Data Space addressing.  One of the these
9051address pointers can also be used as an address pointer for look up
9052tables in Flash program memory.  These added function registers are the
905316-bit 'X', 'Y' and 'Z' - registers.
9054
9055     X = r26:r27
9056     Y = r28:r29
9057     Z = r30:r31
9058
9059
9060File: as.info,  Node: AVR-Modifiers,  Prev: AVR-Regs,  Up: AVR Syntax
9061
90629.5.2.3 Relocatable Expression Modifiers
9063........................................
9064
9065The assembler supports several modifiers when using relocatable
9066addresses in AVR instruction operands.  The general syntax is the
9067following:
9068
9069     modifier(relocatable-expression)
9070
9071'lo8'
9072
9073     This modifier allows you to use bits 0 through 7 of an address
9074     expression as an 8 bit relocatable expression.
9075
9076'hi8'
9077
9078     This modifier allows you to use bits 7 through 15 of an address
9079     expression as an 8 bit relocatable expression.  This is useful
9080     with, for example, the AVR 'ldi' instruction and 'lo8' modifier.
9081
9082     For example
9083
9084          ldi r26, lo8(sym+10)
9085          ldi r27, hi8(sym+10)
9086
9087'hh8'
9088
9089     This modifier allows you to use bits 16 through 23 of an address
9090     expression as an 8 bit relocatable expression.  Also, can be useful
9091     for loading 32 bit constants.
9092
9093'hlo8'
9094
9095     Synonym of 'hh8'.
9096
9097'hhi8'
9098
9099     This modifier allows you to use bits 24 through 31 of an expression
9100     as an 8 bit expression.  This is useful with, for example, the AVR
9101     'ldi' instruction and 'lo8', 'hi8', 'hlo8', 'hhi8', modifier.
9102
9103     For example
9104
9105          ldi r26, lo8(285774925)
9106          ldi r27, hi8(285774925)
9107          ldi r28, hlo8(285774925)
9108          ldi r29, hhi8(285774925)
9109          ; r29,r28,r27,r26 = 285774925
9110
9111'pm_lo8'
9112
9113     This modifier allows you to use bits 0 through 7 of an address
9114     expression as an 8 bit relocatable expression.  This modifier is
9115     useful for addressing data or code from Flash/Program memory by
9116     two-byte words.  The use of 'pm_lo8' is similar to 'lo8'.
9117
9118'pm_hi8'
9119
9120     This modifier allows you to use bits 8 through 15 of an address
9121     expression as an 8 bit relocatable expression.  This modifier is
9122     useful for addressing data or code from Flash/Program memory by
9123     two-byte words.
9124
9125     For example, when setting the AVR 'Z' register with the 'ldi'
9126     instruction for subsequent use by the 'ijmp' instruction:
9127
9128          ldi r30, pm_lo8(sym)
9129          ldi r31, pm_hi8(sym)
9130          ijmp
9131
9132'pm_hh8'
9133
9134     This modifier allows you to use bits 15 through 23 of an address
9135     expression as an 8 bit relocatable expression.  This modifier is
9136     useful for addressing data or code from Flash/Program memory by
9137     two-byte words.
9138
9139
9140File: as.info,  Node: AVR Opcodes,  Next: AVR Pseudo Instructions,  Prev: AVR Syntax,  Up: AVR-Dependent
9141
91429.5.3 Opcodes
9143-------------
9144
9145For detailed information on the AVR machine instruction set, see
9146<www.atmel.com/products/AVR>.
9147
9148   'as' implements all the standard AVR opcodes.  The following table
9149summarizes the AVR opcodes, and their arguments.
9150
9151     Legend:
9152        r   any register
9153        d   'ldi' register (r16-r31)
9154        v   'movw' even register (r0, r2, ..., r28, r30)
9155        a   'fmul' register (r16-r23)
9156        w   'adiw' register (r24,r26,r28,r30)
9157        e   pointer registers (X,Y,Z)
9158        b   base pointer register and displacement ([YZ]+disp)
9159        z   Z pointer register (for [e]lpm Rd,Z[+])
9160        M   immediate value from 0 to 255
9161        n   immediate value from 0 to 255 ( n = ~M ). Relocation impossible
9162        s   immediate value from 0 to 7
9163        P   Port address value from 0 to 63. (in, out)
9164        p   Port address value from 0 to 31. (cbi, sbi, sbic, sbis)
9165        K   immediate value from 0 to 63 (used in 'adiw', 'sbiw')
9166        i   immediate value
9167        l   signed pc relative offset from -64 to 63
9168        L   signed pc relative offset from -2048 to 2047
9169        h   absolute code address (call, jmp)
9170        S   immediate value from 0 to 7 (S = s << 4)
9171        ?   use this opcode entry if no parameters, else use next opcode entry
9172
9173     1001010010001000   clc
9174     1001010011011000   clh
9175     1001010011111000   cli
9176     1001010010101000   cln
9177     1001010011001000   cls
9178     1001010011101000   clt
9179     1001010010111000   clv
9180     1001010010011000   clz
9181     1001010000001000   sec
9182     1001010001011000   seh
9183     1001010001111000   sei
9184     1001010000101000   sen
9185     1001010001001000   ses
9186     1001010001101000   set
9187     1001010000111000   sev
9188     1001010000011000   sez
9189     100101001SSS1000   bclr    S
9190     100101000SSS1000   bset    S
9191     1001010100001001   icall
9192     1001010000001001   ijmp
9193     1001010111001000   lpm     ?
9194     1001000ddddd010+   lpm     r,z
9195     1001010111011000   elpm    ?
9196     1001000ddddd011+   elpm    r,z
9197     0000000000000000   nop
9198     1001010100001000   ret
9199     1001010100011000   reti
9200     1001010110001000   sleep
9201     1001010110011000   break
9202     1001010110101000   wdr
9203     1001010111101000   spm
9204     000111rdddddrrrr   adc     r,r
9205     000011rdddddrrrr   add     r,r
9206     001000rdddddrrrr   and     r,r
9207     000101rdddddrrrr   cp      r,r
9208     000001rdddddrrrr   cpc     r,r
9209     000100rdddddrrrr   cpse    r,r
9210     001001rdddddrrrr   eor     r,r
9211     001011rdddddrrrr   mov     r,r
9212     100111rdddddrrrr   mul     r,r
9213     001010rdddddrrrr   or      r,r
9214     000010rdddddrrrr   sbc     r,r
9215     000110rdddddrrrr   sub     r,r
9216     001001rdddddrrrr   clr     r
9217     000011rdddddrrrr   lsl     r
9218     000111rdddddrrrr   rol     r
9219     001000rdddddrrrr   tst     r
9220     0111KKKKddddKKKK   andi    d,M
9221     0111KKKKddddKKKK   cbr     d,n
9222     1110KKKKddddKKKK   ldi     d,M
9223     11101111dddd1111   ser     d
9224     0110KKKKddddKKKK   ori     d,M
9225     0110KKKKddddKKKK   sbr     d,M
9226     0011KKKKddddKKKK   cpi     d,M
9227     0100KKKKddddKKKK   sbci    d,M
9228     0101KKKKddddKKKK   subi    d,M
9229     1111110rrrrr0sss   sbrc    r,s
9230     1111111rrrrr0sss   sbrs    r,s
9231     1111100ddddd0sss   bld     r,s
9232     1111101ddddd0sss   bst     r,s
9233     10110PPdddddPPPP   in      r,P
9234     10111PPrrrrrPPPP   out     P,r
9235     10010110KKddKKKK   adiw    w,K
9236     10010111KKddKKKK   sbiw    w,K
9237     10011000pppppsss   cbi     p,s
9238     10011010pppppsss   sbi     p,s
9239     10011001pppppsss   sbic    p,s
9240     10011011pppppsss   sbis    p,s
9241     111101lllllll000   brcc    l
9242     111100lllllll000   brcs    l
9243     111100lllllll001   breq    l
9244     111101lllllll100   brge    l
9245     111101lllllll101   brhc    l
9246     111100lllllll101   brhs    l
9247     111101lllllll111   brid    l
9248     111100lllllll111   brie    l
9249     111100lllllll000   brlo    l
9250     111100lllllll100   brlt    l
9251     111100lllllll010   brmi    l
9252     111101lllllll001   brne    l
9253     111101lllllll010   brpl    l
9254     111101lllllll000   brsh    l
9255     111101lllllll110   brtc    l
9256     111100lllllll110   brts    l
9257     111101lllllll011   brvc    l
9258     111100lllllll011   brvs    l
9259     111101lllllllsss   brbc    s,l
9260     111100lllllllsss   brbs    s,l
9261     1101LLLLLLLLLLLL   rcall   L
9262     1100LLLLLLLLLLLL   rjmp    L
9263     1001010hhhhh111h   call    h
9264     1001010hhhhh110h   jmp     h
9265     1001010rrrrr0101   asr     r
9266     1001010rrrrr0000   com     r
9267     1001010rrrrr1010   dec     r
9268     1001010rrrrr0011   inc     r
9269     1001010rrrrr0110   lsr     r
9270     1001010rrrrr0001   neg     r
9271     1001000rrrrr1111   pop     r
9272     1001001rrrrr1111   push    r
9273     1001010rrrrr0111   ror     r
9274     1001010rrrrr0010   swap    r
9275     00000001ddddrrrr   movw    v,v
9276     00000010ddddrrrr   muls    d,d
9277     000000110ddd0rrr   mulsu   a,a
9278     000000110ddd1rrr   fmul    a,a
9279     000000111ddd0rrr   fmuls   a,a
9280     000000111ddd1rrr   fmulsu  a,a
9281     1001001ddddd0000   sts     i,r
9282     1001000ddddd0000   lds     r,i
9283     10o0oo0dddddbooo   ldd     r,b
9284     100!000dddddee-+   ld      r,e
9285     10o0oo1rrrrrbooo   std     b,r
9286     100!001rrrrree-+   st      e,r
9287     1001010100011001   eicall
9288     1001010000011001   eijmp
9289
9290
9291File: as.info,  Node: AVR Pseudo Instructions,  Prev: AVR Opcodes,  Up: AVR-Dependent
9292
92939.5.4 Pseudo Instructions
9294-------------------------
9295
9296The only available pseudo-instruction '__gcc_isr' can be activated by
9297option '-mgcc-isr'.
9298
9299'__gcc_isr 1'
9300     Emit code chunk to be used in avr-gcc ISR prologue.  It will expand
9301     to at most six 1-word instructions, all optional: push of
9302     'tmp_reg', push of 'SREG', push and clear of 'zero_reg', push of
9303     REG.
9304
9305'__gcc_isr 2'
9306     Emit code chunk to be used in an avr-gcc ISR epilogue.  It will
9307     expand to at most five 1-word instructions, all optional: pop of
9308     REG, pop of 'zero_reg', pop of 'SREG', pop of 'tmp_reg'.
9309
9310'__gcc_isr 0, REG'
9311     Finish avr-gcc ISR function.  Scan code since the last prologue for
9312     usage of: 'SREG', 'tmp_reg', 'zero_reg'.  Prologue chunk and
9313     epilogue chunks will be replaced by appropriate code to save /
9314     restore 'SREG', 'tmp_reg', 'zero_reg' and REG.
9315
9316   Example input:
9317
9318     __vector1:
9319         __gcc_isr 1
9320         lds r24, var
9321         inc r24
9322         sts var, r24
9323         __gcc_isr 2
9324         reti
9325         __gcc_isr 0, r24
9326
9327   Example output:
9328
9329     00000000 <__vector1>:
9330        0:   8f 93           push    r24
9331        2:   8f b7           in      r24, 0x3f
9332        4:   8f 93           push    r24
9333        6:   80 91 60 00     lds     r24, 0x0060     ; 0x800060 <var>
9334        a:   83 95           inc     r24
9335        c:   80 93 60 00     sts     0x0060, r24     ; 0x800060 <var>
9336       10:   8f 91           pop     r24
9337       12:   8f bf           out     0x3f, r24
9338       14:   8f 91           pop     r24
9339       16:   18 95           reti
9340
9341
9342File: as.info,  Node: Blackfin-Dependent,  Next: BPF-Dependent,  Prev: AVR-Dependent,  Up: Machine Dependencies
9343
93449.6 Blackfin Dependent Features
9345===============================
9346
9347* Menu:
9348
9349* Blackfin Options::		Blackfin Options
9350* Blackfin Syntax::		Blackfin Syntax
9351* Blackfin Directives::		Blackfin Directives
9352
9353
9354File: as.info,  Node: Blackfin Options,  Next: Blackfin Syntax,  Up: Blackfin-Dependent
9355
93569.6.1 Options
9357-------------
9358
9359'-mcpu=PROCESSOR[-SIREVISION]'
9360     This option specifies the target processor.  The optional
9361     SIREVISION is not used in assembler.  It's here such that GCC can
9362     easily pass down its '-mcpu=' option.  The assembler will issue an
9363     error message if an attempt is made to assemble an instruction
9364     which will not execute on the target processor.  The following
9365     processor names are recognized: 'bf504', 'bf506', 'bf512', 'bf514',
9366     'bf516', 'bf518', 'bf522', 'bf523', 'bf524', 'bf525', 'bf526',
9367     'bf527', 'bf531', 'bf532', 'bf533', 'bf534', 'bf535' (not
9368     implemented yet), 'bf536', 'bf537', 'bf538', 'bf539', 'bf542',
9369     'bf542m', 'bf544', 'bf544m', 'bf547', 'bf547m', 'bf548', 'bf548m',
9370     'bf549', 'bf549m', 'bf561', and 'bf592'.
9371
9372'-mfdpic'
9373     Assemble for the FDPIC ABI.
9374
9375'-mno-fdpic'
9376'-mnopic'
9377     Disable -mfdpic.
9378
9379
9380File: as.info,  Node: Blackfin Syntax,  Next: Blackfin Directives,  Prev: Blackfin Options,  Up: Blackfin-Dependent
9381
93829.6.2 Syntax
9383------------
9384
9385'Special Characters'
9386     Assembler input is free format and may appear anywhere on the line.
9387     One instruction may extend across multiple lines or more than one
9388     instruction may appear on the same line.  White space (space, tab,
9389     comments or newline) may appear anywhere between tokens.  A token
9390     must not have embedded spaces.  Tokens include numbers, register
9391     names, keywords, user identifiers, and also some multicharacter
9392     special symbols like "+=", "/*" or "||".
9393
9394     Comments are introduced by the '#' character and extend to the end
9395     of the current line.  If the '#' appears as the first character of
9396     a line, the whole line is treated as a comment, but in this case
9397     the line can also be a logical line number directive (*note
9398     Comments::) or a preprocessor control command (*note
9399     Preprocessing::).
9400
9401'Instruction Delimiting'
9402     A semicolon must terminate every instruction.  Sometimes a complete
9403     instruction will consist of more than one operation.  There are two
9404     cases where this occurs.  The first is when two general operations
9405     are combined.  Normally a comma separates the different parts, as
9406     in
9407
9408          a0= r3.h * r2.l, a1 = r3.l * r2.h ;
9409
9410     The second case occurs when a general instruction is combined with
9411     one or two memory references for joint issue.  The latter portions
9412     are set off by a "||" token.
9413
9414          a0 = r3.h * r2.l || r1 = [p3++] || r4 = [i2++];
9415
9416     Multiple instructions can occur on the same line.  Each must be
9417     terminated by a semicolon character.
9418
9419'Register Names'
9420
9421     The assembler treats register names and instruction keywords in a
9422     case insensitive manner.  User identifiers are case sensitive.
9423     Thus, R3.l, R3.L, r3.l and r3.L are all equivalent input to the
9424     assembler.
9425
9426     Register names are reserved and may not be used as program
9427     identifiers.
9428
9429     Some operations (such as "Move Register") require a register pair.
9430     Register pairs are always data registers and are denoted using a
9431     colon, eg., R3:2.  The larger number must be written firsts.  Note
9432     that the hardware only supports odd-even pairs, eg., R7:6, R5:4,
9433     R3:2, and R1:0.
9434
9435     Some instructions (such as -SP (Push Multiple)) require a group of
9436     adjacent registers.  Adjacent registers are denoted in the syntax
9437     by the range enclosed in parentheses and separated by a colon, eg.,
9438     (R7:3).  Again, the larger number appears first.
9439
9440     Portions of a particular register may be individually specified.
9441     This is written with a dot (".")  following the register name and
9442     then a letter denoting the desired portion.  For 32-bit registers,
9443     ".H" denotes the most significant ("High") portion.  ".L" denotes
9444     the least-significant portion.  The subdivisions of the 40-bit
9445     registers are described later.
9446
9447'Accumulators'
9448     The set of 40-bit registers A1 and A0 that normally contain data
9449     that is being manipulated.  Each accumulator can be accessed in
9450     four ways.
9451
9452     'one 40-bit register'
9453          The register will be referred to as A1 or A0.
9454     'one 32-bit register'
9455          The registers are designated as A1.W or A0.W.
9456     'two 16-bit registers'
9457          The registers are designated as A1.H, A1.L, A0.H or A0.L.
9458     'one 8-bit register'
9459          The registers are designated as A1.X or A0.X for the bits that
9460          extend beyond bit 31.
9461
9462'Data Registers'
9463     The set of 32-bit registers (R0, R1, R2, R3, R4, R5, R6 and R7)
9464     that normally contain data for manipulation.  These are abbreviated
9465     as D-register or Dreg.  Data registers can be accessed as 32-bit
9466     registers or as two independent 16-bit registers.  The least
9467     significant 16 bits of each register is called the "low" half and
9468     is designated with ".L" following the register name.  The most
9469     significant 16 bits are called the "high" half and is designated
9470     with ".H" following the name.
9471
9472             R7.L, r2.h, r4.L, R0.H
9473
9474'Pointer Registers'
9475     The set of 32-bit registers (P0, P1, P2, P3, P4, P5, SP and FP)
9476     that normally contain byte addresses of data structures.  These are
9477     abbreviated as P-register or Preg.
9478
9479          p2, p5, fp, sp
9480
9481'Stack Pointer SP'
9482     The stack pointer contains the 32-bit address of the last occupied
9483     byte location in the stack.  The stack grows by decrementing the
9484     stack pointer.
9485
9486'Frame Pointer FP'
9487     The frame pointer contains the 32-bit address of the previous frame
9488     pointer in the stack.  It is located at the top of a frame.
9489
9490'Loop Top'
9491     LT0 and LT1.  These registers contain the 32-bit address of the top
9492     of a zero overhead loop.
9493
9494'Loop Count'
9495     LC0 and LC1.  These registers contain the 32-bit counter of the
9496     zero overhead loop executions.
9497
9498'Loop Bottom'
9499     LB0 and LB1.  These registers contain the 32-bit address of the
9500     bottom of a zero overhead loop.
9501
9502'Index Registers'
9503     The set of 32-bit registers (I0, I1, I2, I3) that normally contain
9504     byte addresses of data structures.  Abbreviated I-register or Ireg.
9505
9506'Modify Registers'
9507     The set of 32-bit registers (M0, M1, M2, M3) that normally contain
9508     offset values that are added and subtracted to one of the index
9509     registers.  Abbreviated as Mreg.
9510
9511'Length Registers'
9512     The set of 32-bit registers (L0, L1, L2, L3) that normally contain
9513     the length in bytes of the circular buffer.  Abbreviated as Lreg.
9514     Clear the Lreg to disable circular addressing for the corresponding
9515     Ireg.
9516
9517'Base Registers'
9518     The set of 32-bit registers (B0, B1, B2, B3) that normally contain
9519     the base address in bytes of the circular buffer.  Abbreviated as
9520     Breg.
9521
9522'Floating Point'
9523     The Blackfin family has no hardware floating point but the .float
9524     directive generates ieee floating point numbers for use with
9525     software floating point libraries.
9526
9527'Blackfin Opcodes'
9528     For detailed information on the Blackfin machine instruction set,
9529     see the Blackfin Processor Instruction Set Reference.
9530
9531
9532File: as.info,  Node: Blackfin Directives,  Prev: Blackfin Syntax,  Up: Blackfin-Dependent
9533
95349.6.3 Directives
9535----------------
9536
9537The following directives are provided for compatibility with the VDSP
9538assembler.
9539
9540'.byte2'
9541     Initializes a two byte data object.
9542
9543     This maps to the '.short' directive.
9544'.byte4'
9545     Initializes a four byte data object.
9546
9547     This maps to the '.int' directive.
9548'.db'
9549     Initializes a single byte data object.
9550
9551     This directive is a synonym for '.byte'.
9552'.dw'
9553     Initializes a two byte data object.
9554
9555     This directive is a synonym for '.byte2'.
9556'.dd'
9557     Initializes a four byte data object.
9558
9559     This directive is a synonym for '.byte4'.
9560'.var'
9561     Define and initialize a 32 bit data object.
9562
9563
9564File: as.info,  Node: BPF-Dependent,  Next: CR16-Dependent,  Prev: Blackfin-Dependent,  Up: Machine Dependencies
9565
95669.7 BPF Dependent Features
9567==========================
9568
9569* Menu:
9570
9571* BPF Options::                 Options
9572* BPF Syntax::		        Syntax
9573* BPF Directives::		Machine Directives
9574* BPF Opcodes::			Opcodes
9575
9576
9577File: as.info,  Node: BPF Options,  Next: BPF Syntax,  Up: BPF-Dependent
9578
95799.7.1 Options
9580-------------
9581
9582'-EB'
9583     This option specifies that the assembler should emit big-endian
9584     eBPF.
9585
9586'-EL'
9587     This option specifies that the assembler should emit little-endian
9588     eBPF.
9589
9590   Note that if no endianness option is specified in the command line,
9591the host endianness is used.
9592
9593
9594File: as.info,  Node: BPF Syntax,  Next: BPF Directives,  Prev: BPF Options,  Up: BPF-Dependent
9595
95969.7.2 Syntax
9597------------
9598
9599* Menu:
9600
9601* BPF-Chars::                Special Characters
9602* BPF-Regs::                 Register Names
9603* BPF-Pseudo-Maps::	     Pseudo map fds
9604
9605
9606File: as.info,  Node: BPF-Chars,  Next: BPF-Regs,  Up: BPF Syntax
9607
96089.7.2.1 Special Characters
9609..........................
9610
9611The presence of a ';' on a line indicates the start of a comment that
9612extends to the end of the current line.  If a '#' appears as the first
9613character of a line, the whole line is treated as a comment.
9614
9615   Statements and assembly directives are separated by newlines.
9616
9617
9618File: as.info,  Node: BPF-Regs,  Next: BPF-Pseudo-Maps,  Prev: BPF-Chars,  Up: BPF Syntax
9619
96209.7.2.2 Register Names
9621......................
9622
9623The eBPF processor provides ten general-purpose 64-bit registers, which
9624are read-write, and a read-only frame pointer register:
9625
9626'%r0 .. %r9'
9627     General-purpose registers.
9628'%r10'
9629     Frame pointer register.
9630
9631   Some registers have additional names, to reflect their role in the
9632eBPF ABI:
9633
9634'%a'
9635     This is '%r0'.
9636'%ctx'
9637     This is '%r6'.
9638'%fp'
9639     This is '%r10'.
9640
9641
9642File: as.info,  Node: BPF-Pseudo-Maps,  Prev: BPF-Regs,  Up: BPF Syntax
9643
96449.7.2.3 Pseudo Maps
9645...................
9646
9647The 'LDDW' instruction can take a literal pseudo map file descriptor as
9648its second argument.  This uses the syntax '%map_fd(N)' where 'N' is a
9649signed number.
9650
9651   For example, to load the address of the pseudo map with file
9652descriptor '2' in register 'r1' we would do:
9653
9654             lddw %r1, %map_fd(2)
9655
9656
9657File: as.info,  Node: BPF Directives,  Next: BPF Opcodes,  Prev: BPF Syntax,  Up: BPF-Dependent
9658
96599.7.3 Machine Directives
9660------------------------
9661
9662The BPF version of 'as' supports the following additional machine
9663directives:
9664
9665'.word'
9666     The '.half' directive produces a 16 bit value.
9667
9668'.word'
9669     The '.word' directive produces a 32 bit value.
9670
9671'.dword'
9672     The '.dword' directive produces a 64 bit value.
9673
9674
9675File: as.info,  Node: BPF Opcodes,  Prev: BPF Directives,  Up: BPF-Dependent
9676
96779.7.4 Opcodes
9678-------------
9679
9680In the instruction descriptions below the following field descriptors
9681are used:
9682
9683'%d'
9684     Destination general-purpose register whose role is to be
9685     destination of an operation.
9686'%s'
9687     Source general-purpose register whose role is to be the source of
9688     an operation.
9689'disp16'
9690     16-bit signed PC-relative offset, measured in number of 64-bit
9691     words, minus one.
9692'disp32'
9693     32-bit signed PC-relative offset, measured in number of 64-bit
9694     words, minus one.
9695'offset16'
9696     Signed 16-bit immediate.
9697'imm32'
9698     Signed 32-bit immediate.
9699'imm64'
9700     Signed 64-bit immediate.
9701
97029.7.4.1 Arithmetic instructions
9703...............................
9704
9705The destination register in these instructions act like an accumulator.
9706
9707'add %d, (%s|imm32)'
9708     64-bit arithmetic addition.
9709'sub %d, (%s|imm32)'
9710     64-bit arithmetic subtraction.
9711'mul %d, (%s|imm32)'
9712     64-bit arithmetic multiplication.
9713'div %d, (%s|imm32)'
9714     64-bit arithmetic integer division.
9715'mod %d, (%s|imm32)'
9716     64-bit integer remainder.
9717'and %d, (%s|imm32)'
9718     64-bit bit-wise "and" operation.
9719'or %d, (%s|imm32)'
9720     64-bit bit-wise "or" operation.
9721'xor %d, (%s|imm32)'
9722     64-bit bit-wise exclusive-or operation.
9723'lsh %d, (%s|imm32)'
9724     64-bit left shift, by '%s' or 'imm32' bits.
9725'rsh %d, (%s|imm32)'
9726     64-bit right logical shift, by '%s' or 'imm32' bits.
9727'arsh %d, (%s|imm32)'
9728     64-bit right arithmetic shift, by '%s' or 'imm32' bits.
9729'neg %d'
9730     64-bit arithmetic negation.
9731'mov %d, (%s|imm32)'
9732     Move the 64-bit value of '%s' in '%d', or load 'imm32' in '%d'.
9733
97349.7.4.2 32-bit arithmetic instructions
9735......................................
9736
9737The destination register in these instructions act as an accumulator.
9738
9739'add32 %d, (%s|imm32)'
9740     32-bit arithmetic addition.
9741'sub32 %d, (%s|imm32)'
9742     32-bit arithmetic subtraction.
9743'mul32 %d, (%s|imm32)'
9744     32-bit arithmetic multiplication.
9745'div32 %d, (%s|imm32)'
9746     32-bit arithmetic integer division.
9747'mod32 %d, (%s|imm32)'
9748     32-bit integer remainder.
9749'and32 %d, (%s|imm32)'
9750     32-bit bit-wise "and" operation.
9751'or32 %d, (%s|imm32)'
9752     32-bit bit-wise "or" operation.
9753'xor32 %d, (%s|imm32)'
9754     32-bit bit-wise exclusive-or operation.
9755'lsh32 %d, (%s|imm32)'
9756     32-bit left shift, by '%s' or 'imm32' bits.
9757'rsh32 %d, (%s|imm32)'
9758     32-bit right logical shift, by '%s' or 'imm32' bits.
9759'arsh32 %d, (%s|imm32)'
9760     32-bit right arithmetic shift, by '%s' or 'imm32' bits.
9761'neg32 %d'
9762     32-bit arithmetic negation.
9763'mov32 %d, (%s|imm32)'
9764     Move the 32-bit value of '%s' in '%d', or load 'imm32' in '%d'.
9765
97669.7.4.3 Endianness conversion instructions
9767..........................................
9768
9769'endle %d, (8|16|32)'
9770     Convert the 8-bit, 16-bit or 32-bit value in '%d' to little-endian.
9771'endbe %d, (8|16|32)'
9772     Convert the 8-bit, 16-bit or 32-bit value in '%d' to big-endian.
9773
97749.7.4.4 64-bit load and pseudo maps
9775...................................
9776
9777'lddw %d, imm64'
9778     Load the given signed 64-bit immediate, or pseudo map descriptor,
9779     to the destination register '%d'.
9780'lddw %d, %map_fd(N)'
9781     Load the address of the given pseudo map fd _N_ to the destination
9782     register '%d'.
9783
97849.7.4.5 Load instructions for socket filters
9785............................................
9786
9787The following instructions are intended to be used in socket filters,
9788and are therefore not general-purpose: they make assumptions on the
9789contents of several registers.  See the file
9790'Documentation/networking/filter.txt' in the Linux kernel source tree
9791for more information.
9792
9793   Absolute loads:
9794
9795'ldabsdw imm32'
9796     Absolute 64-bit load.
9797'ldabsw imm32'
9798     Absolute 32-bit load.
9799'ldabsh imm32'
9800     Absolute 16-bit load.
9801'ldabsb imm32'
9802     Absolute 8-bit load.
9803
9804   Indirect loads:
9805
9806'ldinddw %s, imm32'
9807     Indirect 64-bit load.
9808'ldindw %s, imm32'
9809     Indirect 32-bit load.
9810'ldindh %s, imm32'
9811     Indirect 16-bit load.
9812'ldindb %s, imm32'
9813     Indirect 8-bit load.
9814
98159.7.4.6 Generic load/store instructions
9816.......................................
9817
9818General-purpose load and store instructions are provided for several
9819word sizes.
9820
9821   Load to register instructions:
9822
9823'ldxdw %d, [%s+offset16]'
9824     Generic 64-bit load.
9825'ldxw %d, [%s+offset16]'
9826     Generic 32-bit load.
9827'ldxh %d, [%s+offset16]'
9828     Generic 16-bit load.
9829'ldxb %d, [%s+offset16]'
9830     Generic 8-bit load.
9831
9832   Store from register instructions:
9833
9834'stxdw [%d+offset16], %s'
9835     Generic 64-bit store.
9836'stxw [%d+offset16], %s'
9837     Generic 32-bit store.
9838'stxh [%d+offset16], %s'
9839     Generic 16-bit store.
9840'stxb [%d+offset16], %s'
9841     Generic 8-bit store.
9842
9843   Store from immediates instructions:
9844
9845'stddw [%d+offset16], imm32'
9846     Store immediate as 64-bit.
9847'stdw [%d+offset16], imm32'
9848     Store immediate as 32-bit.
9849'stdh [%d+offset16], imm32'
9850     Store immediate as 16-bit.
9851'stdb [%d+offset16], imm32'
9852     Store immediate as 8-bit.
9853
98549.7.4.7 Jump instructions
9855.........................
9856
9857eBPF provides the following compare-and-jump instructions, which compare
9858the values of the two given registers, or the values of a register and
9859an immediate, and perform a branch in case the comparison holds true.
9860
9861'ja %d,(%s|imm32),disp16'
9862     Jump-always.
9863'jeq %d,(%s|imm32),disp16'
9864     Jump if equal.
9865'jgt %d,(%s|imm32),disp16'
9866     Jump if greater.
9867'jge %d,(%s|imm32),disp16'
9868     Jump if greater or equal.
9869'jlt %d,(%s|imm32),disp16'
9870     Jump if lesser.
9871'jle %d,(%s|imm32),disp16'
9872     Jump if lesser or equal.
9873'jset %d,(%s|imm32),disp16'
9874     Jump if signed equal.
9875'jne %d,(%s|imm32),disp16'
9876     Jump if not equal.
9877'jsgt %d,(%s|imm32),disp16'
9878     Jump if signed greater.
9879'jsge %d,(%s|imm32),disp16'
9880     Jump if signed greater or equal.
9881'jslt %d,(%s|imm32),disp16'
9882     Jump if signed lesser.
9883'jsle %d,(%s|imm32),disp16'
9884     Jump if signed lesser or equal.
9885
9886   A call instruction is provided in order to perform calls to other
9887eBPF functions, or to external kernel helpers:
9888
9889'call (disp32|imm32)'
9890     Jump and link to the offset _disp32_, or to the kernel helper
9891     function identified by _imm32_.
9892
9893   Finally:
9894
9895'exit'
9896     Terminate the eBPF program.
9897
98989.7.4.8 Atomic instructions
9899...........................
9900
9901Atomic exchange-and-add instructions are provided in two flavors: one
9902for swapping 64-bit quantities and another for 32-bit quantities.
9903
9904'xadddw [%d+offset16],%s'
9905     Exchange-and-add a 64-bit value at the specified location.
9906'xaddw [%d+offset16],%s'
9907     Exchange-and-add a 32-bit value at the specified location.
9908
9909
9910File: as.info,  Node: CR16-Dependent,  Next: CRIS-Dependent,  Prev: BPF-Dependent,  Up: Machine Dependencies
9911
99129.8 CR16 Dependent Features
9913===========================
9914
9915* Menu:
9916
9917* CR16 Operand Qualifiers::     CR16 Machine Operand Qualifiers
9918* CR16 Syntax::                 Syntax for the CR16
9919
9920
9921File: as.info,  Node: CR16 Operand Qualifiers,  Next: CR16 Syntax,  Up: CR16-Dependent
9922
99239.8.1 CR16 Operand Qualifiers
9924-----------------------------
9925
9926The National Semiconductor CR16 target of 'as' has a few machine
9927dependent operand qualifiers.
9928
9929   Operand expression type qualifier is an optional field in the
9930instruction operand, to determines the type of the expression field of
9931an operand.  The '@' is required.  CR16 architecture uses one of the
9932following expression qualifiers:
9933
9934's'
9935     - 'Specifies expression operand type as small'
9936'm'
9937     - 'Specifies expression operand type as medium'
9938'l'
9939     - 'Specifies expression operand type as large'
9940'c'
9941     - 'Specifies the CR16 Assembler generates a relocation entry for
9942     the operand, where pc has implied bit, the expression is adjusted
9943     accordingly. The linker uses the relocation entry to update the
9944     operand address at link time.'
9945'got/GOT'
9946     - 'Specifies the CR16 Assembler generates a relocation entry for
9947     the operand, offset from Global Offset Table. The linker uses this
9948     relocation entry to update the operand address at link time'
9949'cgot/cGOT'
9950     - 'Specifies the CompactRISC Assembler generates a relocation entry
9951     for the operand, where pc has implied bit, the expression is
9952     adjusted accordingly. The linker uses the relocation entry to
9953     update the operand address at link time.'
9954
9955   CR16 target operand qualifiers and its size (in bits):
9956
9957'Immediate Operand: s'
9958     4 bits.
9959
9960'Immediate Operand: m'
9961     16 bits, for movb and movw instructions.
9962
9963'Immediate Operand: m'
9964     20 bits, movd instructions.
9965
9966'Immediate Operand: l'
9967     32 bits.
9968
9969'Absolute Operand: s'
9970     Illegal specifier for this operand.
9971
9972'Absolute Operand: m'
9973     20 bits, movd instructions.
9974
9975'Displacement Operand: s'
9976     8 bits.
9977
9978'Displacement Operand: m'
9979     16 bits.
9980
9981'Displacement Operand: l'
9982     24 bits.
9983
9984   For example:
9985     1   movw $_myfun@c,r1
9986
9987         This loads the address of _myfun, shifted right by 1, into r1.
9988
9989     2   movd $_myfun@c,(r2,r1)
9990
9991         This loads the address of _myfun, shifted right by 1, into register-pair r2-r1.
9992
9993     3   _myfun_ptr:
9994         .long _myfun@c
9995         loadd _myfun_ptr, (r1,r0)
9996         jal (r1,r0)
9997
9998         This .long directive, the address of _myfunc, shifted right by 1 at link time.
9999
10000     4   loadd  _data1@GOT(r12), (r1,r0)
10001
10002         This loads the address of _data1, into global offset table (ie GOT) and its offset value from GOT loads into register-pair r2-r1.
10003
10004     5   loadd  _myfunc@cGOT(r12), (r1,r0)
10005
10006         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.
10007
10008
10009File: as.info,  Node: CR16 Syntax,  Prev: CR16 Operand Qualifiers,  Up: CR16-Dependent
10010
100119.8.2 CR16 Syntax
10012-----------------
10013
10014* Menu:
10015
10016* CR16-Chars::                Special Characters
10017
10018
10019File: as.info,  Node: CR16-Chars,  Up: CR16 Syntax
10020
100219.8.2.1 Special Characters
10022..........................
10023
10024The presence of a '#' on a line indicates the start of a comment that
10025extends to the end of the current line.  If the '#' appears as the first
10026character of a line, the whole line is treated as a comment, but in this
10027case the line can also be a logical line number directive (*note
10028Comments::) or a preprocessor control command (*note Preprocessing::).
10029
10030   The ';' character can be used to separate statements on the same
10031line.
10032
10033
10034File: as.info,  Node: CRIS-Dependent,  Next: C-SKY-Dependent,  Prev: CR16-Dependent,  Up: Machine Dependencies
10035
100369.9 CRIS Dependent Features
10037===========================
10038
10039* Menu:
10040
10041* CRIS-Opts::              Command-line Options
10042* CRIS-Expand::            Instruction expansion
10043* CRIS-Symbols::           Symbols
10044* CRIS-Syntax::            Syntax
10045
10046
10047File: as.info,  Node: CRIS-Opts,  Next: CRIS-Expand,  Up: CRIS-Dependent
10048
100499.9.1 Command-line Options
10050--------------------------
10051
10052The CRIS version of 'as' has these machine-dependent command-line
10053options.
10054
10055   The format of the generated object files can be either ELF or a.out,
10056specified by the command-line options '--emulation=crisaout' and
10057'--emulation=criself'.  The default is ELF (criself), unless 'as' has
10058been configured specifically for a.out by using the configuration name
10059'cris-axis-aout'.
10060
10061   There are two different link-incompatible ELF object file variants
10062for CRIS, for use in environments where symbols are expected to be
10063prefixed by a leading '_' character and for environments without such a
10064symbol prefix.  The variant used for GNU/Linux port has no symbol
10065prefix.  Which variant to produce is specified by either of the options
10066'--underscore' and '--no-underscore'.  The default is '--underscore'.
10067Since symbols in CRIS a.out objects are expected to have a '_' prefix,
10068specifying '--no-underscore' when generating a.out objects is an error.
10069Besides the object format difference, the effect of this option is to
10070parse register names differently (*note crisnous::).  The
10071'--no-underscore' option makes a '$' register prefix mandatory.
10072
10073   The option '--pic' must be passed to 'as' in order to recognize the
10074symbol syntax used for ELF (SVR4 PIC) position-independent-code (*note
10075crispic::).  This will also affect expansion of instructions.  The
10076expansion with '--pic' will use PC-relative rather than (slightly
10077faster) absolute addresses in those expansions.  This option is only
10078valid when generating ELF format object files.
10079
10080   The option '--march=ARCHITECTURE' specifies the recognized
10081instruction set and recognized register names.  It also controls the
10082architecture type of the object file.  Valid values for ARCHITECTURE
10083are:
10084
10085'v0_v10'
10086     All instructions and register names for any architecture variant in
10087     the set v0...v10 are recognized.  This is the default if the target
10088     is configured as cris-*.
10089
10090'v10'
10091     Only instructions and register names for CRIS v10 (as found in
10092     ETRAX 100 LX) are recognized.  This is the default if the target is
10093     configured as crisv10-*.
10094
10095'v32'
10096     Only instructions and register names for CRIS v32 (code name
10097     Guinness) are recognized.  This is the default if the target is
10098     configured as crisv32-*.  This value implies '--no-mul-bug-abort'.
10099     (A subsequent '--mul-bug-abort' will turn it back on.)
10100
10101'common_v10_v32'
10102     Only instructions with register names and addressing modes with
10103     opcodes common to the v10 and v32 are recognized.
10104
10105   When '-N' is specified, 'as' will emit a warning when a 16-bit branch
10106instruction is expanded into a 32-bit multiple-instruction construct
10107(*note CRIS-Expand::).
10108
10109   Some versions of the CRIS v10, for example in the Etrax 100 LX,
10110contain a bug that causes destabilizing memory accesses when a multiply
10111instruction is executed with certain values in the first operand just
10112before a cache-miss.  When the '--mul-bug-abort' command-line option is
10113active (the default value), 'as' will refuse to assemble a file
10114containing a multiply instruction at a dangerous offset, one that could
10115be the last on a cache-line, or is in a section with insufficient
10116alignment.  This placement checking does not catch any case where the
10117multiply instruction is dangerously placed because it is located in a
10118delay-slot.  The '--mul-bug-abort' command-line option turns off the
10119checking.
10120
10121
10122File: as.info,  Node: CRIS-Expand,  Next: CRIS-Symbols,  Prev: CRIS-Opts,  Up: CRIS-Dependent
10123
101249.9.2 Instruction expansion
10125---------------------------
10126
10127'as' will silently choose an instruction that fits the operand size for
10128'[register+constant]' operands.  For example, the offset '127' in
10129'move.d [r3+127],r4' fits in an instruction using a signed-byte offset.
10130Similarly, 'move.d [r2+32767],r1' will generate an instruction using a
1013116-bit offset.  For symbolic expressions and constants that do not fit
10132in 16 bits including the sign bit, a 32-bit offset is generated.
10133
10134   For branches, 'as' will expand from a 16-bit branch instruction into
10135a sequence of instructions that can reach a full 32-bit address.  Since
10136this does not correspond to a single instruction, such expansions can
10137optionally be warned about.  *Note CRIS-Opts::.
10138
10139   If the operand is found to fit the range, a 'lapc' mnemonic will
10140translate to a 'lapcq' instruction.  Use 'lapc.d' to force the 32-bit
10141'lapc' instruction.
10142
10143   Similarly, the 'addo' mnemonic will translate to the shortest fitting
10144instruction of 'addoq', 'addo.w' and 'addo.d', when used with a operand
10145that is a constant known at assembly time.
10146
10147
10148File: as.info,  Node: CRIS-Symbols,  Next: CRIS-Syntax,  Prev: CRIS-Expand,  Up: CRIS-Dependent
10149
101509.9.3 Symbols
10151-------------
10152
10153Some symbols are defined by the assembler.  They're intended to be used
10154in conditional assembly, for example:
10155      .if ..asm.arch.cris.v32
10156      CODE FOR CRIS V32
10157      .elseif ..asm.arch.cris.common_v10_v32
10158      CODE COMMON TO CRIS V32 AND CRIS V10
10159      .elseif ..asm.arch.cris.v10 | ..asm.arch.cris.any_v0_v10
10160      CODE FOR V10
10161      .else
10162      .error "Code needs to be added here."
10163      .endif
10164
10165   These symbols are defined in the assembler, reflecting command-line
10166options, either when specified or the default.  They are always defined,
10167to 0 or 1.
10168
10169'..asm.arch.cris.any_v0_v10'
10170     This symbol is non-zero when '--march=v0_v10' is specified or the
10171     default.
10172
10173'..asm.arch.cris.common_v10_v32'
10174     Set according to the option '--march=common_v10_v32'.
10175
10176'..asm.arch.cris.v10'
10177     Reflects the option '--march=v10'.
10178
10179'..asm.arch.cris.v32'
10180     Corresponds to '--march=v10'.
10181
10182   Speaking of symbols, when a symbol is used in code, it can have a
10183suffix modifying its value for use in position-independent code.  *Note
10184CRIS-Pic::.
10185
10186
10187File: as.info,  Node: CRIS-Syntax,  Prev: CRIS-Symbols,  Up: CRIS-Dependent
10188
101899.9.4 Syntax
10190------------
10191
10192There are different aspects of the CRIS assembly syntax.
10193
10194* Menu:
10195
10196* CRIS-Chars::		        Special Characters
10197* CRIS-Pic::			Position-Independent Code Symbols
10198* CRIS-Regs::			Register Names
10199* CRIS-Pseudos::		Assembler Directives
10200
10201
10202File: as.info,  Node: CRIS-Chars,  Next: CRIS-Pic,  Up: CRIS-Syntax
10203
102049.9.4.1 Special Characters
10205..........................
10206
10207The character '#' is a line comment character.  It starts a comment if
10208and only if it is placed at the beginning of a line.
10209
10210   A ';' character starts a comment anywhere on the line, causing all
10211characters up to the end of the line to be ignored.
10212
10213   A '@' character is handled as a line separator equivalent to a
10214logical new-line character (except in a comment), so separate
10215instructions can be specified on a single line.
10216
10217
10218File: as.info,  Node: CRIS-Pic,  Next: CRIS-Regs,  Prev: CRIS-Chars,  Up: CRIS-Syntax
10219
102209.9.4.2 Symbols in position-independent code
10221............................................
10222
10223When generating position-independent code (SVR4 PIC) for use in
10224cris-axis-linux-gnu or crisv32-axis-linux-gnu shared libraries, symbol
10225suffixes are used to specify what kind of run-time symbol lookup will be
10226used, expressed in the object as different _relocation types_.  Usually,
10227all absolute symbol values must be located in a table, the _global
10228offset table_, leaving the code position-independent; independent of
10229values of global symbols and independent of the address of the code.
10230The suffix modifies the value of the symbol, into for example an index
10231into the global offset table where the real symbol value is entered, or
10232a PC-relative value, or a value relative to the start of the global
10233offset table.  All symbol suffixes start with the character ':' (omitted
10234in the list below).  Every symbol use in code or a read-only section
10235must therefore have a PIC suffix to enable a useful shared library to be
10236created.  Usually, these constructs must not be used with an additive
10237constant offset as is usually allowed, i.e. no 4 as in 'symbol + 4' is
10238allowed.  This restriction is checked at link-time, not at
10239assembly-time.
10240
10241'GOT'
10242
10243     Attaching this suffix to a symbol in an instruction causes the
10244     symbol to be entered into the global offset table.  The value is a
10245     32-bit index for that symbol into the global offset table.  The
10246     name of the corresponding relocation is 'R_CRIS_32_GOT'.  Example:
10247     'move.d [$r0+extsym:GOT],$r9'
10248
10249'GOT16'
10250
10251     Same as for 'GOT', but the value is a 16-bit index into the global
10252     offset table.  The corresponding relocation is 'R_CRIS_16_GOT'.
10253     Example: 'move.d [$r0+asymbol:GOT16],$r10'
10254
10255'PLT'
10256
10257     This suffix is used for function symbols.  It causes a _procedure
10258     linkage table_, an array of code stubs, to be created at the time
10259     the shared object is created or linked against, together with a
10260     global offset table entry.  The value is a pc-relative offset to
10261     the corresponding stub code in the procedure linkage table.  This
10262     arrangement causes the run-time symbol resolver to be called to
10263     look up and set the value of the symbol the first time the function
10264     is called (at latest; depending environment variables).  It is only
10265     safe to leave the symbol unresolved this way if all references are
10266     function calls.  The name of the relocation is
10267     'R_CRIS_32_PLT_PCREL'.  Example: 'add.d fnname:PLT,$pc'
10268
10269'PLTG'
10270
10271     Like PLT, but the value is relative to the beginning of the global
10272     offset table.  The relocation is 'R_CRIS_32_PLT_GOTREL'.  Example:
10273     'move.d fnname:PLTG,$r3'
10274
10275'GOTPLT'
10276
10277     Similar to 'PLT', but the value of the symbol is a 32-bit index
10278     into the global offset table.  This is somewhat of a mix between
10279     the effect of the 'GOT' and the 'PLT' suffix; the difference to
10280     'GOT' is that there will be a procedure linkage table entry
10281     created, and that the symbol is assumed to be a function entry and
10282     will be resolved by the run-time resolver as with 'PLT'.  The
10283     relocation is 'R_CRIS_32_GOTPLT'.  Example: 'jsr
10284     [$r0+fnname:GOTPLT]'
10285
10286'GOTPLT16'
10287
10288     A variant of 'GOTPLT' giving a 16-bit value.  Its relocation name
10289     is 'R_CRIS_16_GOTPLT'.  Example: 'jsr [$r0+fnname:GOTPLT16]'
10290
10291'GOTOFF'
10292
10293     This suffix must only be attached to a local symbol, but may be
10294     used in an expression adding an offset.  The value is the address
10295     of the symbol relative to the start of the global offset table.
10296     The relocation name is 'R_CRIS_32_GOTREL'.  Example: 'move.d
10297     [$r0+localsym:GOTOFF],r3'
10298
10299
10300File: as.info,  Node: CRIS-Regs,  Next: CRIS-Pseudos,  Prev: CRIS-Pic,  Up: CRIS-Syntax
10301
103029.9.4.3 Register names
10303......................
10304
10305A '$' character may always prefix a general or special register name in
10306an instruction operand but is mandatory when the option
10307'--no-underscore' is specified or when the '.syntax register_prefix'
10308directive is in effect (*note crisnous::).  Register names are
10309case-insensitive.
10310
10311
10312File: as.info,  Node: CRIS-Pseudos,  Prev: CRIS-Regs,  Up: CRIS-Syntax
10313
103149.9.4.4 Assembler Directives
10315............................
10316
10317There are a few CRIS-specific pseudo-directives in addition to the
10318generic ones.  *Note Pseudo Ops::.  Constants emitted by
10319pseudo-directives are in little-endian order for CRIS. There is no
10320support for floating-point-specific directives for CRIS.
10321
10322'.dword EXPRESSIONS'
10323
10324     The '.dword' directive is a synonym for '.int', expecting zero or
10325     more EXPRESSIONS, separated by commas.  For each expression, a
10326     32-bit little-endian constant is emitted.
10327
10328'.syntax ARGUMENT'
10329     The '.syntax' directive takes as ARGUMENT one of the following
10330     case-sensitive choices.
10331
10332     'no_register_prefix'
10333
10334          The '.syntax no_register_prefix' directive makes a '$'
10335          character prefix on all registers optional.  It overrides a
10336          previous setting, including the corresponding effect of the
10337          option '--no-underscore'.  If this directive is used when
10338          ordinary symbols do not have a '_' character prefix, care must
10339          be taken to avoid ambiguities whether an operand is a register
10340          or a symbol; using symbols with names the same as general or
10341          special registers then invoke undefined behavior.
10342
10343     'register_prefix'
10344
10345          This directive makes a '$' character prefix on all registers
10346          mandatory.  It overrides a previous setting, including the
10347          corresponding effect of the option '--underscore'.
10348
10349     'leading_underscore'
10350
10351          This is an assertion directive, emitting an error if the
10352          '--no-underscore' option is in effect.
10353
10354     'no_leading_underscore'
10355
10356          This is the opposite of the '.syntax leading_underscore'
10357          directive and emits an error if the option '--underscore' is
10358          in effect.
10359
10360'.arch ARGUMENT'
10361     This is an assertion directive, giving an error if the specified
10362     ARGUMENT is not the same as the specified or default value for the
10363     '--march=ARCHITECTURE' option (*note march-option::).
10364
10365
10366File: as.info,  Node: C-SKY-Dependent,  Next: D10V-Dependent,  Prev: CRIS-Dependent,  Up: Machine Dependencies
10367
103689.10 C-SKY Dependent Features
10369=============================
10370
10371* Menu:
10372
10373* C-SKY Options::              Options
10374* C-SKY Syntax::               Syntax
10375
10376
10377File: as.info,  Node: C-SKY Options,  Next: C-SKY Syntax,  Up: C-SKY-Dependent
10378
103799.10.1 Options
10380--------------
10381
10382'-march=ARCHNAME'
10383     Assemble for architecture ARCHNAME.  The '--help' option lists
10384     valid values for ARCHNAME.
10385
10386'-mcpu=CPUNAME'
10387     Assemble for architecture CPUNAME.  The '--help' option lists valid
10388     values for CPUNAME.
10389
10390'-EL'
10391'-mlittle-endian'
10392     Generate little-endian output.
10393
10394'-EB'
10395'-mbig-endian'
10396     Generate big-endian output.
10397
10398'-fpic'
10399'-pic'
10400     Generate position-independent code.
10401
10402'-mljump'
10403'-mno-ljump'
10404     Enable/disable transformation of the short branch instructions
10405     'jbf', 'jbt', and 'jbr' to 'jmpi'.  This option is for V2
10406     processors only.  It is ignored on CK801 and CK802 targets, which
10407     do not support the 'jmpi' instruction, and is enabled by default
10408     for other processors.
10409
10410'-mbranch-stub'
10411'-mno-branch-stub'
10412     Pass through 'R_CKCORE_PCREL_IMM26BY2' relocations for 'bsr'
10413     instructions to the linker.
10414
10415     This option is only available for bare-metal C-SKY V2 ELF targets,
10416     where it is enabled by default.  It cannot be used in code that
10417     will be dynamically linked against shared libraries.
10418
10419'-force2bsr'
10420'-mforce2bsr'
10421'-no-force2bsr'
10422'-mno-force2bsr'
10423     Enable/disable transformation of 'jbsr' instructions to 'bsr'.
10424     This option is always enabled (and '-mno-force2bsr' is ignored) for
10425     CK801/CK802 targets.  It is also always enabled when
10426     '-mbranch-stub' is in effect.
10427
10428'-jsri2bsr'
10429'-mjsri2bsr'
10430'-no-jsri2bsr'
10431'-mno-jsri2bsr'
10432     Enable/disable transformation of 'jsri' instructions to 'bsr'.
10433     This option is enabled by default.
10434
10435'-mnolrw'
10436'-mno-lrw'
10437     Enable/disable transformation of 'lrw' instructions into a
10438     'movih'/'ori' pair.
10439
10440'-melrw'
10441'-mno-elrw'
10442     Enable/disable extended 'lrw' instructions.  This option is enabled
10443     by default for CK800-series processors.
10444
10445'-mlaf'
10446'-mliterals-after-func'
10447'-mno-laf'
10448'-mno-literals-after-func'
10449     Enable/disable placement of literal pools after each function.
10450
10451'-mlabr'
10452'-mliterals-after-br'
10453'-mno-labr'
10454'-mnoliterals-after-br'
10455     Enable/disable placement of literal pools after unconditional
10456     branches.  This option is enabled by default.
10457
10458'-mistack'
10459'-mno-istack'
10460     Enable/disable interrupt stack instructions.  This option is
10461     enabled by default on CK801, CK802, and CK802 processors.
10462
10463   The following options explicitly enable certain optional
10464instructions.  These features are also enabled implicitly by using
10465'-mcpu=' to specify a processor that supports it.
10466
10467'-mhard-float'
10468     Enable hard float instructions.
10469
10470'-mmp'
10471     Enable multiprocessor instructions.
10472
10473'-mcp'
10474     Enable coprocessor instructions.
10475
10476'-mcache'
10477     Enable cache prefetch instruction.
10478
10479'-msecurity'
10480     Enable C-SKY security instructions.
10481
10482'-mtrust'
10483     Enable C-SKY trust instructions.
10484
10485'-mdsp'
10486     Enable DSP instructions.
10487
10488'-medsp'
10489     Enable enhanced DSP instructions.
10490
10491'-mvdsp'
10492     Enable vector DSP instructions.
10493
10494
10495File: as.info,  Node: C-SKY Syntax,  Prev: C-SKY Options,  Up: C-SKY-Dependent
10496
104979.10.2 Syntax
10498-------------
10499
10500'as' implements the standard C-SKY assembler syntax documented in the
10501'C-SKY V2 CPU Applications Binary Interface Standards Manual'.
10502
10503
10504File: as.info,  Node: D10V-Dependent,  Next: D30V-Dependent,  Prev: C-SKY-Dependent,  Up: Machine Dependencies
10505
105069.11 D10V Dependent Features
10507============================
10508
10509* Menu:
10510
10511* D10V-Opts::                   D10V Options
10512* D10V-Syntax::                 Syntax
10513* D10V-Float::                  Floating Point
10514* D10V-Opcodes::                Opcodes
10515
10516
10517File: as.info,  Node: D10V-Opts,  Next: D10V-Syntax,  Up: D10V-Dependent
10518
105199.11.1 D10V Options
10520-------------------
10521
10522The Mitsubishi D10V version of 'as' has a few machine dependent options.
10523
10524'-O'
10525     The D10V can often execute two sub-instructions in parallel.  When
10526     this option is used, 'as' will attempt to optimize its output by
10527     detecting when instructions can be executed in parallel.
10528'--nowarnswap'
10529     To optimize execution performance, 'as' will sometimes swap the
10530     order of instructions.  Normally this generates a warning.  When
10531     this option is used, no warning will be generated when instructions
10532     are swapped.
10533'--gstabs-packing'
10534'--no-gstabs-packing'
10535     'as' packs adjacent short instructions into a single packed
10536     instruction.  '--no-gstabs-packing' turns instruction packing off
10537     if '--gstabs' is specified as well; '--gstabs-packing' (the
10538     default) turns instruction packing on even when '--gstabs' is
10539     specified.
10540
10541
10542File: as.info,  Node: D10V-Syntax,  Next: D10V-Float,  Prev: D10V-Opts,  Up: D10V-Dependent
10543
105449.11.2 Syntax
10545-------------
10546
10547The D10V syntax is based on the syntax in Mitsubishi's D10V architecture
10548manual.  The differences are detailed below.
10549
10550* Menu:
10551
10552* D10V-Size::                 Size Modifiers
10553* D10V-Subs::                 Sub-Instructions
10554* D10V-Chars::                Special Characters
10555* D10V-Regs::                 Register Names
10556* D10V-Addressing::           Addressing Modes
10557* D10V-Word::                 @WORD Modifier
10558
10559
10560File: as.info,  Node: D10V-Size,  Next: D10V-Subs,  Up: D10V-Syntax
10561
105629.11.2.1 Size Modifiers
10563.......................
10564
10565The D10V version of 'as' uses the instruction names in the D10V
10566Architecture Manual.  However, the names in the manual are sometimes
10567ambiguous.  There are instruction names that can assemble to a short or
10568long form opcode.  How does the assembler pick the correct form?  'as'
10569will always pick the smallest form if it can.  When dealing with a
10570symbol that is not defined yet when a line is being assembled, it will
10571always use the long form.  If you need to force the assembler to use
10572either the short or long form of the instruction, you can append either
10573'.s' (short) or '.l' (long) to it.  For example, if you are writing an
10574assembly program and you want to do a branch to a symbol that is defined
10575later in your program, you can write 'bra.s foo'.  Objdump and GDB will
10576always append '.s' or '.l' to instructions which have both short and
10577long forms.
10578
10579
10580File: as.info,  Node: D10V-Subs,  Next: D10V-Chars,  Prev: D10V-Size,  Up: D10V-Syntax
10581
105829.11.2.2 Sub-Instructions
10583.........................
10584
10585The D10V assembler takes as input a series of instructions, either
10586one-per-line, or in the special two-per-line format described in the
10587next section.  Some of these instructions will be short-form or
10588sub-instructions.  These sub-instructions can be packed into a single
10589instruction.  The assembler will do this automatically.  It will also
10590detect when it should not pack instructions.  For example, when a label
10591is defined, the next instruction will never be packaged with the
10592previous one.  Whenever a branch and link instruction is called, it will
10593not be packaged with the next instruction so the return address will be
10594valid.  Nops are automatically inserted when necessary.
10595
10596   If you do not want the assembler automatically making these
10597decisions, you can control the packaging and execution type (parallel or
10598sequential) with the special execution symbols described in the next
10599section.
10600
10601
10602File: as.info,  Node: D10V-Chars,  Next: D10V-Regs,  Prev: D10V-Subs,  Up: D10V-Syntax
10603
106049.11.2.3 Special Characters
10605...........................
10606
10607A semicolon (';') can be used anywhere on a line to start a comment that
10608extends to the end of the line.
10609
10610   If a '#' appears as the first character of a line, the whole line is
10611treated as a comment, but in this case the line could also be a logical
10612line number directive (*note Comments::) or a preprocessor control
10613command (*note Preprocessing::).
10614
10615   Sub-instructions may be executed in order, in reverse-order, or in
10616parallel.  Instructions listed in the standard one-per-line format will
10617be executed sequentially.  To specify the executing order, use the
10618following symbols:
10619'->'
10620     Sequential with instruction on the left first.
10621'<-'
10622     Sequential with instruction on the right first.
10623'||'
10624     Parallel
10625   The D10V syntax allows either one instruction per line, one
10626instruction per line with the execution symbol, or two instructions per
10627line.  For example
10628'abs a1 -> abs r0'
10629     Execute these sequentially.  The instruction on the right is in the
10630     right container and is executed second.
10631'abs r0 <- abs a1'
10632     Execute these reverse-sequentially.  The instruction on the right
10633     is in the right container, and is executed first.
10634'ld2w r2,@r8+ || mac a0,r0,r7'
10635     Execute these in parallel.
10636'ld2w r2,@r8+ ||'
10637'mac a0,r0,r7'
10638     Two-line format.  Execute these in parallel.
10639'ld2w r2,@r8+'
10640'mac a0,r0,r7'
10641     Two-line format.  Execute these sequentially.  Assembler will put
10642     them in the proper containers.
10643'ld2w r2,@r8+ ->'
10644'mac a0,r0,r7'
10645     Two-line format.  Execute these sequentially.  Same as above but
10646     second instruction will always go into right container.
10647   Since '$' has no special meaning, you may use it in symbol names.
10648
10649
10650File: as.info,  Node: D10V-Regs,  Next: D10V-Addressing,  Prev: D10V-Chars,  Up: D10V-Syntax
10651
106529.11.2.4 Register Names
10653.......................
10654
10655You can use the predefined symbols 'r0' through 'r15' to refer to the
10656D10V registers.  You can also use 'sp' as an alias for 'r15'.  The
10657accumulators are 'a0' and 'a1'.  There are special register-pair names
10658that may optionally be used in opcodes that require even-numbered
10659registers.  Register names are not case sensitive.
10660
10661   Register Pairs
10662'r0-r1'
10663'r2-r3'
10664'r4-r5'
10665'r6-r7'
10666'r8-r9'
10667'r10-r11'
10668'r12-r13'
10669'r14-r15'
10670
10671   The D10V also has predefined symbols for these control registers and
10672status bits:
10673'psw'
10674     Processor Status Word
10675'bpsw'
10676     Backup Processor Status Word
10677'pc'
10678     Program Counter
10679'bpc'
10680     Backup Program Counter
10681'rpt_c'
10682     Repeat Count
10683'rpt_s'
10684     Repeat Start address
10685'rpt_e'
10686     Repeat End address
10687'mod_s'
10688     Modulo Start address
10689'mod_e'
10690     Modulo End address
10691'iba'
10692     Instruction Break Address
10693'f0'
10694     Flag 0
10695'f1'
10696     Flag 1
10697'c'
10698     Carry flag
10699
10700
10701File: as.info,  Node: D10V-Addressing,  Next: D10V-Word,  Prev: D10V-Regs,  Up: D10V-Syntax
10702
107039.11.2.5 Addressing Modes
10704.........................
10705
10706'as' understands the following addressing modes for the D10V. 'RN' in
10707the following refers to any of the numbered registers, but _not_ the
10708control registers.
10709'RN'
10710     Register direct
10711'@RN'
10712     Register indirect
10713'@RN+'
10714     Register indirect with post-increment
10715'@RN-'
10716     Register indirect with post-decrement
10717'@-SP'
10718     Register indirect with pre-decrement
10719'@(DISP, RN)'
10720     Register indirect with displacement
10721'ADDR'
10722     PC relative address (for branch or rep).
10723'#IMM'
10724     Immediate data (the '#' is optional and ignored)
10725
10726
10727File: as.info,  Node: D10V-Word,  Prev: D10V-Addressing,  Up: D10V-Syntax
10728
107299.11.2.6 @WORD Modifier
10730.......................
10731
10732Any symbol followed by '@word' will be replaced by the symbol's value
10733shifted right by 2.  This is used in situations such as loading a
10734register with the address of a function (or any other code fragment).
10735For example, if you want to load a register with the location of the
10736function 'main' then jump to that function, you could do it as follows:
10737     ldi     r2, main@word
10738     jmp     r2
10739
10740
10741File: as.info,  Node: D10V-Float,  Next: D10V-Opcodes,  Prev: D10V-Syntax,  Up: D10V-Dependent
10742
107439.11.3 Floating Point
10744---------------------
10745
10746The D10V has no hardware floating point, but the '.float' and '.double'
10747directives generates IEEE floating-point numbers for compatibility with
10748other development tools.
10749
10750
10751File: as.info,  Node: D10V-Opcodes,  Prev: D10V-Float,  Up: D10V-Dependent
10752
107539.11.4 Opcodes
10754--------------
10755
10756For detailed information on the D10V machine instruction set, see 'D10V
10757Architecture: A VLIW Microprocessor for Multimedia Applications'
10758(Mitsubishi Electric Corp.).  'as' implements all the standard D10V
10759opcodes.  The only changes are those described in the section on size
10760modifiers
10761
10762
10763File: as.info,  Node: D30V-Dependent,  Next: Epiphany-Dependent,  Prev: D10V-Dependent,  Up: Machine Dependencies
10764
107659.12 D30V Dependent Features
10766============================
10767
10768* Menu:
10769
10770* D30V-Opts::                   D30V Options
10771* D30V-Syntax::                 Syntax
10772* D30V-Float::                  Floating Point
10773* D30V-Opcodes::                Opcodes
10774
10775
10776File: as.info,  Node: D30V-Opts,  Next: D30V-Syntax,  Up: D30V-Dependent
10777
107789.12.1 D30V Options
10779-------------------
10780
10781The Mitsubishi D30V version of 'as' has a few machine dependent options.
10782
10783'-O'
10784     The D30V can often execute two sub-instructions in parallel.  When
10785     this option is used, 'as' will attempt to optimize its output by
10786     detecting when instructions can be executed in parallel.
10787
10788'-n'
10789     When this option is used, 'as' will issue a warning every time it
10790     adds a nop instruction.
10791
10792'-N'
10793     When this option is used, 'as' will issue a warning if it needs to
10794     insert a nop after a 32-bit multiply before a load or 16-bit
10795     multiply instruction.
10796
10797
10798File: as.info,  Node: D30V-Syntax,  Next: D30V-Float,  Prev: D30V-Opts,  Up: D30V-Dependent
10799
108009.12.2 Syntax
10801-------------
10802
10803The D30V syntax is based on the syntax in Mitsubishi's D30V architecture
10804manual.  The differences are detailed below.
10805
10806* Menu:
10807
10808* D30V-Size::                 Size Modifiers
10809* D30V-Subs::                 Sub-Instructions
10810* D30V-Chars::                Special Characters
10811* D30V-Guarded::              Guarded Execution
10812* D30V-Regs::                 Register Names
10813* D30V-Addressing::           Addressing Modes
10814
10815
10816File: as.info,  Node: D30V-Size,  Next: D30V-Subs,  Up: D30V-Syntax
10817
108189.12.2.1 Size Modifiers
10819.......................
10820
10821The D30V version of 'as' uses the instruction names in the D30V
10822Architecture Manual.  However, the names in the manual are sometimes
10823ambiguous.  There are instruction names that can assemble to a short or
10824long form opcode.  How does the assembler pick the correct form?  'as'
10825will always pick the smallest form if it can.  When dealing with a
10826symbol that is not defined yet when a line is being assembled, it will
10827always use the long form.  If you need to force the assembler to use
10828either the short or long form of the instruction, you can append either
10829'.s' (short) or '.l' (long) to it.  For example, if you are writing an
10830assembly program and you want to do a branch to a symbol that is defined
10831later in your program, you can write 'bra.s foo'.  Objdump and GDB will
10832always append '.s' or '.l' to instructions which have both short and
10833long forms.
10834
10835
10836File: as.info,  Node: D30V-Subs,  Next: D30V-Chars,  Prev: D30V-Size,  Up: D30V-Syntax
10837
108389.12.2.2 Sub-Instructions
10839.........................
10840
10841The D30V assembler takes as input a series of instructions, either
10842one-per-line, or in the special two-per-line format described in the
10843next section.  Some of these instructions will be short-form or
10844sub-instructions.  These sub-instructions can be packed into a single
10845instruction.  The assembler will do this automatically.  It will also
10846detect when it should not pack instructions.  For example, when a label
10847is defined, the next instruction will never be packaged with the
10848previous one.  Whenever a branch and link instruction is called, it will
10849not be packaged with the next instruction so the return address will be
10850valid.  Nops are automatically inserted when necessary.
10851
10852   If you do not want the assembler automatically making these
10853decisions, you can control the packaging and execution type (parallel or
10854sequential) with the special execution symbols described in the next
10855section.
10856
10857
10858File: as.info,  Node: D30V-Chars,  Next: D30V-Guarded,  Prev: D30V-Subs,  Up: D30V-Syntax
10859
108609.12.2.3 Special Characters
10861...........................
10862
10863A semicolon (';') can be used anywhere on a line to start a comment that
10864extends to the end of the line.
10865
10866   If a '#' appears as the first character of a line, the whole line is
10867treated as a comment, but in this case the line could also be a logical
10868line number directive (*note Comments::) or a preprocessor control
10869command (*note Preprocessing::).
10870
10871   Sub-instructions may be executed in order, in reverse-order, or in
10872parallel.  Instructions listed in the standard one-per-line format will
10873be executed sequentially unless you use the '-O' option.
10874
10875   To specify the executing order, use the following symbols:
10876'->'
10877     Sequential with instruction on the left first.
10878
10879'<-'
10880     Sequential with instruction on the right first.
10881
10882'||'
10883     Parallel
10884
10885   The D30V syntax allows either one instruction per line, one
10886instruction per line with the execution symbol, or two instructions per
10887line.  For example
10888'abs r2,r3 -> abs r4,r5'
10889     Execute these sequentially.  The instruction on the right is in the
10890     right container and is executed second.
10891
10892'abs r2,r3 <- abs r4,r5'
10893     Execute these reverse-sequentially.  The instruction on the right
10894     is in the right container, and is executed first.
10895
10896'abs r2,r3 || abs r4,r5'
10897     Execute these in parallel.
10898
10899'ldw r2,@(r3,r4) ||'
10900'mulx r6,r8,r9'
10901     Two-line format.  Execute these in parallel.
10902
10903'mulx a0,r8,r9'
10904'stw r2,@(r3,r4)'
10905     Two-line format.  Execute these sequentially unless '-O' option is
10906     used.  If the '-O' option is used, the assembler will determine if
10907     the instructions could be done in parallel (the above two
10908     instructions can be done in parallel), and if so, emit them as
10909     parallel instructions.  The assembler will put them in the proper
10910     containers.  In the above example, the assembler will put the 'stw'
10911     instruction in left container and the 'mulx' instruction in the
10912     right container.
10913
10914'stw r2,@(r3,r4) ->'
10915'mulx a0,r8,r9'
10916     Two-line format.  Execute the 'stw' instruction followed by the
10917     'mulx' instruction sequentially.  The first instruction goes in the
10918     left container and the second instruction goes into right
10919     container.  The assembler will give an error if the machine
10920     ordering constraints are violated.
10921
10922'stw r2,@(r3,r4) <-'
10923'mulx a0,r8,r9'
10924     Same as previous example, except that the 'mulx' instruction is
10925     executed before the 'stw' instruction.
10926
10927   Since '$' has no special meaning, you may use it in symbol names.
10928
10929
10930File: as.info,  Node: D30V-Guarded,  Next: D30V-Regs,  Prev: D30V-Chars,  Up: D30V-Syntax
10931
109329.12.2.4 Guarded Execution
10933..........................
10934
10935'as' supports the full range of guarded execution directives for each
10936instruction.  Just append the directive after the instruction proper.
10937The directives are:
10938
10939'/tx'
10940     Execute the instruction if flag f0 is true.
10941'/fx'
10942     Execute the instruction if flag f0 is false.
10943'/xt'
10944     Execute the instruction if flag f1 is true.
10945'/xf'
10946     Execute the instruction if flag f1 is false.
10947'/tt'
10948     Execute the instruction if both flags f0 and f1 are true.
10949'/tf'
10950     Execute the instruction if flag f0 is true and flag f1 is false.
10951
10952
10953File: as.info,  Node: D30V-Regs,  Next: D30V-Addressing,  Prev: D30V-Guarded,  Up: D30V-Syntax
10954
109559.12.2.5 Register Names
10956.......................
10957
10958You can use the predefined symbols 'r0' through 'r63' to refer to the
10959D30V registers.  You can also use 'sp' as an alias for 'r63' and 'link'
10960as an alias for 'r62'.  The accumulators are 'a0' and 'a1'.
10961
10962   The D30V also has predefined symbols for these control registers and
10963status bits:
10964'psw'
10965     Processor Status Word
10966'bpsw'
10967     Backup Processor Status Word
10968'pc'
10969     Program Counter
10970'bpc'
10971     Backup Program Counter
10972'rpt_c'
10973     Repeat Count
10974'rpt_s'
10975     Repeat Start address
10976'rpt_e'
10977     Repeat End address
10978'mod_s'
10979     Modulo Start address
10980'mod_e'
10981     Modulo End address
10982'iba'
10983     Instruction Break Address
10984'f0'
10985     Flag 0
10986'f1'
10987     Flag 1
10988'f2'
10989     Flag 2
10990'f3'
10991     Flag 3
10992'f4'
10993     Flag 4
10994'f5'
10995     Flag 5
10996'f6'
10997     Flag 6
10998'f7'
10999     Flag 7
11000's'
11001     Same as flag 4 (saturation flag)
11002'v'
11003     Same as flag 5 (overflow flag)
11004'va'
11005     Same as flag 6 (sticky overflow flag)
11006'c'
11007     Same as flag 7 (carry/borrow flag)
11008'b'
11009     Same as flag 7 (carry/borrow flag)
11010
11011
11012File: as.info,  Node: D30V-Addressing,  Prev: D30V-Regs,  Up: D30V-Syntax
11013
110149.12.2.6 Addressing Modes
11015.........................
11016
11017'as' understands the following addressing modes for the D30V. 'RN' in
11018the following refers to any of the numbered registers, but _not_ the
11019control registers.
11020'RN'
11021     Register direct
11022'@RN'
11023     Register indirect
11024'@RN+'
11025     Register indirect with post-increment
11026'@RN-'
11027     Register indirect with post-decrement
11028'@-SP'
11029     Register indirect with pre-decrement
11030'@(DISP, RN)'
11031     Register indirect with displacement
11032'ADDR'
11033     PC relative address (for branch or rep).
11034'#IMM'
11035     Immediate data (the '#' is optional and ignored)
11036
11037
11038File: as.info,  Node: D30V-Float,  Next: D30V-Opcodes,  Prev: D30V-Syntax,  Up: D30V-Dependent
11039
110409.12.3 Floating Point
11041---------------------
11042
11043The D30V has no hardware floating point, but the '.float' and '.double'
11044directives generates IEEE floating-point numbers for compatibility with
11045other development tools.
11046
11047
11048File: as.info,  Node: D30V-Opcodes,  Prev: D30V-Float,  Up: D30V-Dependent
11049
110509.12.4 Opcodes
11051--------------
11052
11053For detailed information on the D30V machine instruction set, see 'D30V
11054Architecture: A VLIW Microprocessor for Multimedia Applications'
11055(Mitsubishi Electric Corp.).  'as' implements all the standard D30V
11056opcodes.  The only changes are those described in the section on size
11057modifiers
11058
11059
11060File: as.info,  Node: Epiphany-Dependent,  Next: H8/300-Dependent,  Prev: D30V-Dependent,  Up: Machine Dependencies
11061
110629.13 Epiphany Dependent Features
11063================================
11064
11065* Menu:
11066
11067* Epiphany Options::              Options
11068* Epiphany Syntax::               Epiphany Syntax
11069
11070
11071File: as.info,  Node: Epiphany Options,  Next: Epiphany Syntax,  Up: Epiphany-Dependent
11072
110739.13.1 Options
11074--------------
11075
11076'as' has two additional command-line options for the Epiphany
11077architecture.
11078
11079'-mepiphany'
11080     Specifies that the both 32 and 16 bit instructions are allowed.
11081     This is the default behavior.
11082
11083'-mepiphany16'
11084     Restricts the permitted instructions to just the 16 bit set.
11085
11086
11087File: as.info,  Node: Epiphany Syntax,  Prev: Epiphany Options,  Up: Epiphany-Dependent
11088
110899.13.2 Epiphany Syntax
11090----------------------
11091
11092* Menu:
11093
11094* Epiphany-Chars::                Special Characters
11095
11096
11097File: as.info,  Node: Epiphany-Chars,  Up: Epiphany Syntax
11098
110999.13.2.1 Special Characters
11100...........................
11101
11102The presence of a ';' on a line indicates the start of a comment that
11103extends to the end of the current line.
11104
11105   If a '#' appears as the first character of a line then the whole line
11106is treated as a comment, but in this case the line could also be a
11107logical line number directive (*note Comments::) or a preprocessor
11108control command (*note Preprocessing::).
11109
11110   The '`' character can be used to separate statements on the same
11111line.
11112
11113
11114File: as.info,  Node: H8/300-Dependent,  Next: HPPA-Dependent,  Prev: Epiphany-Dependent,  Up: Machine Dependencies
11115
111169.14 H8/300 Dependent Features
11117==============================
11118
11119* Menu:
11120
11121* H8/300 Options::              Options
11122* H8/300 Syntax::               Syntax
11123* H8/300 Floating Point::       Floating Point
11124* H8/300 Directives::           H8/300 Machine Directives
11125* H8/300 Opcodes::              Opcodes
11126
11127
11128File: as.info,  Node: H8/300 Options,  Next: H8/300 Syntax,  Up: H8/300-Dependent
11129
111309.14.1 Options
11131--------------
11132
11133The Renesas H8/300 version of 'as' has one machine-dependent option:
11134
11135'-h-tick-hex'
11136     Support H'00 style hex constants in addition to 0x00 style.
11137
11138'-mach=NAME'
11139     Sets the H8300 machine variant.  The following machine names are
11140     recognised: 'h8300h', 'h8300hn', 'h8300s', 'h8300sn', 'h8300sx' and
11141     'h8300sxn'.
11142
11143
11144File: as.info,  Node: H8/300 Syntax,  Next: H8/300 Floating Point,  Prev: H8/300 Options,  Up: H8/300-Dependent
11145
111469.14.2 Syntax
11147-------------
11148
11149* Menu:
11150
11151* H8/300-Chars::                Special Characters
11152* H8/300-Regs::                 Register Names
11153* H8/300-Addressing::           Addressing Modes
11154
11155
11156File: as.info,  Node: H8/300-Chars,  Next: H8/300-Regs,  Up: H8/300 Syntax
11157
111589.14.2.1 Special Characters
11159...........................
11160
11161';' is the line comment character.
11162
11163   '$' can be used instead of a newline to separate statements.
11164Therefore _you may not use '$' in symbol names_ on the H8/300.
11165
11166
11167File: as.info,  Node: H8/300-Regs,  Next: H8/300-Addressing,  Prev: H8/300-Chars,  Up: H8/300 Syntax
11168
111699.14.2.2 Register Names
11170.......................
11171
11172You can use predefined symbols of the form 'rNh' and 'rNl' to refer to
11173the H8/300 registers as sixteen 8-bit general-purpose registers.  N is a
11174digit from '0' to '7'); for instance, both 'r0h' and 'r7l' are valid
11175register names.
11176
11177   You can also use the eight predefined symbols 'rN' to refer to the
11178H8/300 registers as 16-bit registers (you must use this form for
11179addressing).
11180
11181   On the H8/300H, you can also use the eight predefined symbols 'erN'
11182('er0' ... 'er7') to refer to the 32-bit general purpose registers.
11183
11184   The two control registers are called 'pc' (program counter; a 16-bit
11185register, except on the H8/300H where it is 24 bits) and 'ccr'
11186(condition code register; an 8-bit register).  'r7' is used as the stack
11187pointer, and can also be called 'sp'.
11188
11189
11190File: as.info,  Node: H8/300-Addressing,  Prev: H8/300-Regs,  Up: H8/300 Syntax
11191
111929.14.2.3 Addressing Modes
11193.........................
11194
11195as understands the following addressing modes for the H8/300:
11196'rN'
11197     Register direct
11198
11199'@rN'
11200     Register indirect
11201
11202'@(D, rN)'
11203'@(D:16, rN)'
11204'@(D:24, rN)'
11205     Register indirect: 16-bit or 24-bit displacement D from register N.
11206     (24-bit displacements are only meaningful on the H8/300H.)
11207
11208'@rN+'
11209     Register indirect with post-increment
11210
11211'@-rN'
11212     Register indirect with pre-decrement
11213
11214'@AA'
11215'@AA:8'
11216'@AA:16'
11217'@AA:24'
11218     Absolute address 'aa'.  (The address size ':24' only makes sense on
11219     the H8/300H.)
11220
11221'#XX'
11222'#XX:8'
11223'#XX:16'
11224'#XX:32'
11225     Immediate data XX.  You may specify the ':8', ':16', or ':32' for
11226     clarity, if you wish; but 'as' neither requires this nor uses
11227     it--the data size required is taken from context.
11228
11229'@@AA'
11230'@@AA:8'
11231     Memory indirect.  You may specify the ':8' for clarity, if you
11232     wish; but 'as' neither requires this nor uses it.
11233
11234
11235File: as.info,  Node: H8/300 Floating Point,  Next: H8/300 Directives,  Prev: H8/300 Syntax,  Up: H8/300-Dependent
11236
112379.14.3 Floating Point
11238---------------------
11239
11240The H8/300 family has no hardware floating point, but the '.float'
11241directive generates IEEE floating-point numbers for compatibility with
11242other development tools.
11243
11244
11245File: as.info,  Node: H8/300 Directives,  Next: H8/300 Opcodes,  Prev: H8/300 Floating Point,  Up: H8/300-Dependent
11246
112479.14.4 H8/300 Machine Directives
11248--------------------------------
11249
11250'as' has the following machine-dependent directives for the H8/300:
11251
11252'.h8300h'
11253     Recognize and emit additional instructions for the H8/300H variant,
11254     and also make '.int' emit 32-bit numbers rather than the usual
11255     (16-bit) for the H8/300 family.
11256
11257'.h8300s'
11258     Recognize and emit additional instructions for the H8S variant, and
11259     also make '.int' emit 32-bit numbers rather than the usual (16-bit)
11260     for the H8/300 family.
11261
11262'.h8300hn'
11263     Recognize and emit additional instructions for the H8/300H variant
11264     in normal mode, and also make '.int' emit 32-bit numbers rather
11265     than the usual (16-bit) for the H8/300 family.
11266
11267'.h8300sn'
11268     Recognize and emit additional instructions for the H8S variant in
11269     normal mode, and also make '.int' emit 32-bit numbers rather than
11270     the usual (16-bit) for the H8/300 family.
11271
11272   On the H8/300 family (including the H8/300H) '.word' directives
11273generate 16-bit numbers.
11274
11275
11276File: as.info,  Node: H8/300 Opcodes,  Prev: H8/300 Directives,  Up: H8/300-Dependent
11277
112789.14.5 Opcodes
11279--------------
11280
11281For detailed information on the H8/300 machine instruction set, see
11282'H8/300 Series Programming Manual'.  For information specific to the
11283H8/300H, see 'H8/300H Series Programming Manual' (Renesas).
11284
11285   'as' implements all the standard H8/300 opcodes.  No additional
11286pseudo-instructions are needed on this family.
11287
11288   The following table summarizes the H8/300 opcodes, and their
11289arguments.  Entries marked '*' are opcodes used only on the H8/300H.
11290
11291              Legend:
11292                 Rs   source register
11293                 Rd   destination register
11294                 abs  absolute address
11295                 imm  immediate data
11296              disp:N  N-bit displacement from a register
11297             pcrel:N  N-bit displacement relative to program counter
11298
11299        add.b #imm,rd              *  andc #imm,ccr
11300        add.b rs,rd                   band #imm,rd
11301        add.w rs,rd                   band #imm,@rd
11302     *  add.w #imm,rd                 band #imm,@abs:8
11303     *  add.l rs,rd                   bra  pcrel:8
11304     *  add.l #imm,rd              *  bra  pcrel:16
11305        adds #imm,rd                  bt   pcrel:8
11306        addx #imm,rd               *  bt   pcrel:16
11307        addx rs,rd                    brn  pcrel:8
11308        and.b #imm,rd              *  brn  pcrel:16
11309        and.b rs,rd                   bf   pcrel:8
11310     *  and.w rs,rd                *  bf   pcrel:16
11311     *  and.w #imm,rd                 bhi  pcrel:8
11312     *  and.l #imm,rd              *  bhi  pcrel:16
11313     *  and.l rs,rd                   bls  pcrel:8
11314     *  bls  pcrel:16                 bld  #imm,rd
11315        bcc  pcrel:8                  bld  #imm,@rd
11316     *  bcc  pcrel:16                 bld  #imm,@abs:8
11317        bhs  pcrel:8                  bnot #imm,rd
11318     *  bhs  pcrel:16                 bnot #imm,@rd
11319        bcs  pcrel:8                  bnot #imm,@abs:8
11320     *  bcs  pcrel:16                 bnot rs,rd
11321        blo  pcrel:8                  bnot rs,@rd
11322     *  blo  pcrel:16                 bnot rs,@abs:8
11323        bne  pcrel:8                  bor  #imm,rd
11324     *  bne  pcrel:16                 bor  #imm,@rd
11325        beq  pcrel:8                  bor  #imm,@abs:8
11326     *  beq  pcrel:16                 bset #imm,rd
11327        bvc  pcrel:8                  bset #imm,@rd
11328     *  bvc  pcrel:16                 bset #imm,@abs:8
11329        bvs  pcrel:8                  bset rs,rd
11330     *  bvs  pcrel:16                 bset rs,@rd
11331        bpl  pcrel:8                  bset rs,@abs:8
11332     *  bpl  pcrel:16                 bsr  pcrel:8
11333        bmi  pcrel:8                  bsr  pcrel:16
11334     *  bmi  pcrel:16                 bst  #imm,rd
11335        bge  pcrel:8                  bst  #imm,@rd
11336     *  bge  pcrel:16                 bst  #imm,@abs:8
11337        blt  pcrel:8                  btst #imm,rd
11338     *  blt  pcrel:16                 btst #imm,@rd
11339        bgt  pcrel:8                  btst #imm,@abs:8
11340     *  bgt  pcrel:16                 btst rs,rd
11341        ble  pcrel:8                  btst rs,@rd
11342     *  ble  pcrel:16                 btst rs,@abs:8
11343        bclr #imm,rd                  bxor #imm,rd
11344        bclr #imm,@rd                 bxor #imm,@rd
11345        bclr #imm,@abs:8              bxor #imm,@abs:8
11346        bclr rs,rd                    cmp.b #imm,rd
11347        bclr rs,@rd                   cmp.b rs,rd
11348        bclr rs,@abs:8                cmp.w rs,rd
11349        biand #imm,rd                 cmp.w rs,rd
11350        biand #imm,@rd             *  cmp.w #imm,rd
11351        biand #imm,@abs:8          *  cmp.l #imm,rd
11352        bild #imm,rd               *  cmp.l rs,rd
11353        bild #imm,@rd                 daa  rs
11354        bild #imm,@abs:8              das  rs
11355        bior #imm,rd                  dec.b rs
11356        bior #imm,@rd              *  dec.w #imm,rd
11357        bior #imm,@abs:8           *  dec.l #imm,rd
11358        bist #imm,rd                  divxu.b rs,rd
11359        bist #imm,@rd              *  divxu.w rs,rd
11360        bist #imm,@abs:8           *  divxs.b rs,rd
11361        bixor #imm,rd              *  divxs.w rs,rd
11362        bixor #imm,@rd                eepmov
11363        bixor #imm,@abs:8          *  eepmovw
11364     *  exts.w rd                     mov.w rs,@abs:16
11365     *  exts.l rd                  *  mov.l #imm,rd
11366     *  extu.w rd                  *  mov.l rs,rd
11367     *  extu.l rd                  *  mov.l @rs,rd
11368        inc  rs                    *  mov.l @(disp:16,rs),rd
11369     *  inc.w #imm,rd              *  mov.l @(disp:24,rs),rd
11370     *  inc.l #imm,rd              *  mov.l @rs+,rd
11371        jmp  @rs                   *  mov.l @abs:16,rd
11372        jmp  abs                   *  mov.l @abs:24,rd
11373        jmp  @@abs:8               *  mov.l rs,@rd
11374        jsr  @rs                   *  mov.l rs,@(disp:16,rd)
11375        jsr  abs                   *  mov.l rs,@(disp:24,rd)
11376        jsr  @@abs:8               *  mov.l rs,@-rd
11377        ldc  #imm,ccr              *  mov.l rs,@abs:16
11378        ldc  rs,ccr                *  mov.l rs,@abs:24
11379     *  ldc  @abs:16,ccr              movfpe @abs:16,rd
11380     *  ldc  @abs:24,ccr              movtpe rs,@abs:16
11381     *  ldc  @(disp:16,rs),ccr        mulxu.b rs,rd
11382     *  ldc  @(disp:24,rs),ccr     *  mulxu.w rs,rd
11383     *  ldc  @rs+,ccr              *  mulxs.b rs,rd
11384     *  ldc  @rs,ccr               *  mulxs.w rs,rd
11385     *  mov.b @(disp:24,rs),rd        neg.b rs
11386     *  mov.b rs,@(disp:24,rd)     *  neg.w rs
11387        mov.b @abs:16,rd           *  neg.l rs
11388        mov.b rs,rd                   nop
11389        mov.b @abs:8,rd               not.b rs
11390        mov.b rs,@abs:8            *  not.w rs
11391        mov.b rs,rd                *  not.l rs
11392        mov.b #imm,rd                 or.b #imm,rd
11393        mov.b @rs,rd                  or.b rs,rd
11394        mov.b @(disp:16,rs),rd     *  or.w #imm,rd
11395        mov.b @rs+,rd              *  or.w rs,rd
11396        mov.b @abs:8,rd            *  or.l #imm,rd
11397        mov.b rs,@rd               *  or.l rs,rd
11398        mov.b rs,@(disp:16,rd)        orc  #imm,ccr
11399        mov.b rs,@-rd                 pop.w rs
11400        mov.b rs,@abs:8            *  pop.l rs
11401        mov.w rs,@rd                  push.w rs
11402     *  mov.w @(disp:24,rs),rd     *  push.l rs
11403     *  mov.w rs,@(disp:24,rd)        rotl.b rs
11404     *  mov.w @abs:24,rd           *  rotl.w rs
11405     *  mov.w rs,@abs:24           *  rotl.l rs
11406        mov.w rs,rd                   rotr.b rs
11407        mov.w #imm,rd              *  rotr.w rs
11408        mov.w @rs,rd               *  rotr.l rs
11409        mov.w @(disp:16,rs),rd        rotxl.b rs
11410        mov.w @rs+,rd              *  rotxl.w rs
11411        mov.w @abs:16,rd           *  rotxl.l rs
11412        mov.w rs,@(disp:16,rd)        rotxr.b rs
11413        mov.w rs,@-rd              *  rotxr.w rs
11414     *  rotxr.l rs                 *  stc  ccr,@(disp:24,rd)
11415        bpt                        *  stc  ccr,@-rd
11416        rte                        *  stc  ccr,@abs:16
11417        rts                        *  stc  ccr,@abs:24
11418        shal.b rs                     sub.b rs,rd
11419     *  shal.w rs                     sub.w rs,rd
11420     *  shal.l rs                  *  sub.w #imm,rd
11421        shar.b rs                  *  sub.l rs,rd
11422     *  shar.w rs                  *  sub.l #imm,rd
11423     *  shar.l rs                     subs #imm,rd
11424        shll.b rs                     subx #imm,rd
11425     *  shll.w rs                     subx rs,rd
11426     *  shll.l rs                  *  trapa #imm
11427        shlr.b rs                     xor  #imm,rd
11428     *  shlr.w rs                     xor  rs,rd
11429     *  shlr.l rs                  *  xor.w #imm,rd
11430        sleep                      *  xor.w rs,rd
11431        stc  ccr,rd                *  xor.l #imm,rd
11432     *  stc  ccr,@rs               *  xor.l rs,rd
11433     *  stc  ccr,@(disp:16,rd)        xorc #imm,ccr
11434
11435   Four H8/300 instructions ('add', 'cmp', 'mov', 'sub') are defined
11436with variants using the suffixes '.b', '.w', and '.l' to specify the
11437size of a memory operand.  'as' supports these suffixes, but does not
11438require them; since one of the operands is always a register, 'as' can
11439deduce the correct size.
11440
11441   For example, since 'r0' refers to a 16-bit register,
11442     mov    r0,@foo
11443is equivalent to
11444     mov.w  r0,@foo
11445
11446   If you use the size suffixes, 'as' issues a warning when the suffix
11447and the register size do not match.
11448
11449
11450File: as.info,  Node: HPPA-Dependent,  Next: i386-Dependent,  Prev: H8/300-Dependent,  Up: Machine Dependencies
11451
114529.15 HPPA Dependent Features
11453============================
11454
11455* Menu:
11456
11457* HPPA Notes::                Notes
11458* HPPA Options::              Options
11459* HPPA Syntax::               Syntax
11460* HPPA Floating Point::       Floating Point
11461* HPPA Directives::           HPPA Machine Directives
11462* HPPA Opcodes::              Opcodes
11463
11464
11465File: as.info,  Node: HPPA Notes,  Next: HPPA Options,  Up: HPPA-Dependent
11466
114679.15.1 Notes
11468------------
11469
11470As a back end for GNU CC 'as' has been thoroughly tested and should work
11471extremely well.  We have tested it only minimally on hand written
11472assembly code and no one has tested it much on the assembly output from
11473the HP compilers.
11474
11475   The format of the debugging sections has changed since the original
11476'as' port (version 1.3X) was released; therefore, you must rebuild all
11477HPPA objects and libraries with the new assembler so that you can debug
11478the final executable.
11479
11480   The HPPA 'as' port generates a small subset of the relocations
11481available in the SOM and ELF object file formats.  Additional relocation
11482support will be added as it becomes necessary.
11483
11484
11485File: as.info,  Node: HPPA Options,  Next: HPPA Syntax,  Prev: HPPA Notes,  Up: HPPA-Dependent
11486
114879.15.2 Options
11488--------------
11489
11490'as' has no machine-dependent command-line options for the HPPA.
11491
11492
11493File: as.info,  Node: HPPA Syntax,  Next: HPPA Floating Point,  Prev: HPPA Options,  Up: HPPA-Dependent
11494
114959.15.3 Syntax
11496-------------
11497
11498The assembler syntax closely follows the HPPA instruction set reference
11499manual; assembler directives and general syntax closely follow the HPPA
11500assembly language reference manual, with a few noteworthy differences.
11501
11502   First, a colon may immediately follow a label definition.  This is
11503simply for compatibility with how most assembly language programmers
11504write code.
11505
11506   Some obscure expression parsing problems may affect hand written code
11507which uses the 'spop' instructions, or code which makes significant use
11508of the '!' line separator.
11509
11510   'as' is much less forgiving about missing arguments and other similar
11511oversights than the HP assembler.  'as' notifies you of missing
11512arguments as syntax errors; this is regarded as a feature, not a bug.
11513
11514   Finally, 'as' allows you to use an external symbol without explicitly
11515importing the symbol.  _Warning:_ in the future this will be an error
11516for HPPA targets.
11517
11518   Special characters for HPPA targets include:
11519
11520   ';' is the line comment character.
11521
11522   '!' can be used instead of a newline to separate statements.
11523
11524   Since '$' has no special meaning, you may use it in symbol names.
11525
11526
11527File: as.info,  Node: HPPA Floating Point,  Next: HPPA Directives,  Prev: HPPA Syntax,  Up: HPPA-Dependent
11528
115299.15.4 Floating Point
11530---------------------
11531
11532The HPPA family uses IEEE floating-point numbers.
11533
11534
11535File: as.info,  Node: HPPA Directives,  Next: HPPA Opcodes,  Prev: HPPA Floating Point,  Up: HPPA-Dependent
11536
115379.15.5 HPPA Assembler Directives
11538--------------------------------
11539
11540'as' for the HPPA supports many additional directives for compatibility
11541with the native assembler.  This section describes them only briefly.
11542For detailed information on HPPA-specific assembler directives, see
11543'HP9000 Series 800 Assembly Language Reference Manual' (HP 92432-90001).
11544
11545   'as' does _not_ support the following assembler directives described
11546in the HP manual:
11547
11548     .endm           .liston
11549     .enter          .locct
11550     .leave          .macro
11551     .listoff
11552
11553   Beyond those implemented for compatibility, 'as' supports one
11554additional assembler directive for the HPPA: '.param'.  It conveys
11555register argument locations for static functions.  Its syntax closely
11556follows the '.export' directive.
11557
11558   These are the additional directives in 'as' for the HPPA:
11559
11560'.block N'
11561'.blockz N'
11562     Reserve N bytes of storage, and initialize them to zero.
11563
11564'.call'
11565     Mark the beginning of a procedure call.  Only the special case with
11566     _no arguments_ is allowed.
11567
11568'.callinfo [ PARAM=VALUE, ... ] [ FLAG, ... ]'
11569     Specify a number of parameters and flags that define the
11570     environment for a procedure.
11571
11572     PARAM may be any of 'frame' (frame size), 'entry_gr' (end of
11573     general register range), 'entry_fr' (end of float register range),
11574     'entry_sr' (end of space register range).
11575
11576     The values for FLAG are 'calls' or 'caller' (proc has subroutines),
11577     'no_calls' (proc does not call subroutines), 'save_rp' (preserve
11578     return pointer), 'save_sp' (proc preserves stack pointer),
11579     'no_unwind' (do not unwind this proc), 'hpux_int' (proc is
11580     interrupt routine).
11581
11582'.code'
11583     Assemble into the standard section called '$TEXT$', subsection
11584     '$CODE$'.
11585
11586'.copyright "STRING"'
11587     In the SOM object format, insert STRING into the object code,
11588     marked as a copyright string.
11589
11590'.copyright "STRING"'
11591     In the ELF object format, insert STRING into the object code,
11592     marked as a version string.
11593
11594'.enter'
11595     Not yet supported; the assembler rejects programs containing this
11596     directive.
11597
11598'.entry'
11599     Mark the beginning of a procedure.
11600
11601'.exit'
11602     Mark the end of a procedure.
11603
11604'.export NAME [ ,TYP ] [ ,PARAM=R ]'
11605     Make a procedure NAME available to callers.  TYP, if present, must
11606     be one of 'absolute', 'code' (ELF only, not SOM), 'data', 'entry',
11607     'data', 'entry', 'millicode', 'plabel', 'pri_prog', or 'sec_prog'.
11608
11609     PARAM, if present, provides either relocation information for the
11610     procedure arguments and result, or a privilege level.  PARAM may be
11611     'argwN' (where N ranges from '0' to '3', and indicates one of four
11612     one-word arguments); 'rtnval' (the procedure's result); or
11613     'priv_lev' (privilege level).  For arguments or the result, R
11614     specifies how to relocate, and must be one of 'no' (not
11615     relocatable), 'gr' (argument is in general register), 'fr' (in
11616     floating point register), or 'fu' (upper half of float register).
11617     For 'priv_lev', R is an integer.
11618
11619'.half N'
11620     Define a two-byte integer constant N; synonym for the portable 'as'
11621     directive '.short'.
11622
11623'.import NAME [ ,TYP ]'
11624     Converse of '.export'; make a procedure available to call.  The
11625     arguments use the same conventions as the first two arguments for
11626     '.export'.
11627
11628'.label NAME'
11629     Define NAME as a label for the current assembly location.
11630
11631'.leave'
11632     Not yet supported; the assembler rejects programs containing this
11633     directive.
11634
11635'.origin LC'
11636     Advance location counter to LC.  Synonym for the 'as' portable
11637     directive '.org'.
11638
11639'.param NAME [ ,TYP ] [ ,PARAM=R ]'
11640     Similar to '.export', but used for static procedures.
11641
11642'.proc'
11643     Use preceding the first statement of a procedure.
11644
11645'.procend'
11646     Use following the last statement of a procedure.
11647
11648'LABEL .reg EXPR'
11649     Synonym for '.equ'; define LABEL with the absolute expression EXPR
11650     as its value.
11651
11652'.space SECNAME [ ,PARAMS ]'
11653     Switch to section SECNAME, creating a new section by that name if
11654     necessary.  You may only use PARAMS when creating a new section,
11655     not when switching to an existing one.  SECNAME may identify a
11656     section by number rather than by name.
11657
11658     If specified, the list PARAMS declares attributes of the section,
11659     identified by keywords.  The keywords recognized are 'spnum=EXP'
11660     (identify this section by the number EXP, an absolute expression),
11661     'sort=EXP' (order sections according to this sort key when linking;
11662     EXP is an absolute expression), 'unloadable' (section contains no
11663     loadable data), 'notdefined' (this section defined elsewhere), and
11664     'private' (data in this section not available to other programs).
11665
11666'.spnum SECNAM'
11667     Allocate four bytes of storage, and initialize them with the
11668     section number of the section named SECNAM.  (You can define the
11669     section number with the HPPA '.space' directive.)
11670
11671'.string "STR"'
11672     Copy the characters in the string STR to the object file.  *Note
11673     Strings: Strings, for information on escape sequences you can use
11674     in 'as' strings.
11675
11676     _Warning!_  The HPPA version of '.string' differs from the usual
11677     'as' definition: it does _not_ write a zero byte after copying STR.
11678
11679'.stringz "STR"'
11680     Like '.string', but appends a zero byte after copying STR to object
11681     file.
11682
11683'.subspa NAME [ ,PARAMS ]'
11684'.nsubspa NAME [ ,PARAMS ]'
11685     Similar to '.space', but selects a subsection NAME within the
11686     current section.  You may only specify PARAMS when you create a
11687     subsection (in the first instance of '.subspa' for this NAME).
11688
11689     If specified, the list PARAMS declares attributes of the
11690     subsection, identified by keywords.  The keywords recognized are
11691     'quad=EXPR' ("quadrant" for this subsection), 'align=EXPR'
11692     (alignment for beginning of this subsection; a power of two),
11693     'access=EXPR' (value for "access rights" field), 'sort=EXPR'
11694     (sorting order for this subspace in link), 'code_only' (subsection
11695     contains only code), 'unloadable' (subsection cannot be loaded into
11696     memory), 'comdat' (subsection is comdat), 'common' (subsection is
11697     common block), 'dup_comm' (subsection may have duplicate names), or
11698     'zero' (subsection is all zeros, do not write in object file).
11699
11700     '.nsubspa' always creates a new subspace with the given name, even
11701     if one with the same name already exists.
11702
11703     'comdat', 'common' and 'dup_comm' can be used to implement various
11704     flavors of one-only support when using the SOM linker.  The SOM
11705     linker only supports specific combinations of these flags.  The
11706     details are not documented.  A brief description is provided here.
11707
11708     'comdat' provides a form of linkonce support.  It is useful for
11709     both code and data subspaces.  A 'comdat' subspace has a key symbol
11710     marked by the 'is_comdat' flag or 'ST_COMDAT'.  Only the first
11711     subspace for any given key is selected.  The key symbol becomes
11712     universal in shared links.  This is similar to the behavior of
11713     'secondary_def' symbols.
11714
11715     'common' provides Fortran named common support.  It is only useful
11716     for data subspaces.  Symbols with the flag 'is_common' retain this
11717     flag in shared links.  Referencing a 'is_common' symbol in a shared
11718     library from outside the library doesn't work.  Thus, 'is_common'
11719     symbols must be output whenever they are needed.
11720
11721     'common' and 'dup_comm' together provide Cobol common support.  The
11722     subspaces in this case must all be the same length.  Otherwise,
11723     this support is similar to the Fortran common support.
11724
11725     'dup_comm' by itself provides a type of one-only support for code.
11726     Only the first 'dup_comm' subspace is selected.  There is a rather
11727     complex algorithm to compare subspaces.  Code symbols marked with
11728     the 'dup_common' flag are hidden.  This support was intended for
11729     "C++ duplicate inlines".
11730
11731     A simplified technique is used to mark the flags of symbols based
11732     on the flags of their subspace.  A symbol with the scope
11733     SS_UNIVERSAL and type ST_ENTRY, ST_CODE or ST_DATA is marked with
11734     the corresponding settings of 'comdat', 'common' and 'dup_comm'
11735     from the subspace, respectively.  This avoids having to introduce
11736     additional directives to mark these symbols.  The HP assembler sets
11737     'is_common' from 'common'.  However, it doesn't set the
11738     'dup_common' from 'dup_comm'.  It doesn't have 'comdat' support.
11739
11740'.version "STR"'
11741     Write STR as version identifier in object code.
11742
11743
11744File: as.info,  Node: HPPA Opcodes,  Prev: HPPA Directives,  Up: HPPA-Dependent
11745
117469.15.6 Opcodes
11747--------------
11748
11749For detailed information on the HPPA machine instruction set, see
11750'PA-RISC Architecture and Instruction Set Reference Manual' (HP
1175109740-90039).
11752
11753
11754File: as.info,  Node: i386-Dependent,  Next: IA-64-Dependent,  Prev: HPPA-Dependent,  Up: Machine Dependencies
11755
117569.16 80386 Dependent Features
11757=============================
11758
11759The i386 version 'as' supports both the original Intel 386 architecture
11760in both 16 and 32-bit mode as well as AMD x86-64 architecture extending
11761the Intel architecture to 64-bits.
11762
11763* Menu:
11764
11765* i386-Options::                Options
11766* i386-Directives::             X86 specific directives
11767* i386-Syntax::                 Syntactical considerations
11768* i386-Mnemonics::              Instruction Naming
11769* i386-Regs::                   Register Naming
11770* i386-Prefixes::               Instruction Prefixes
11771* i386-Memory::                 Memory References
11772* i386-Jumps::                  Handling of Jump Instructions
11773* i386-Float::                  Floating Point
11774* i386-SIMD::                   Intel's MMX and AMD's 3DNow! SIMD Operations
11775* i386-LWP::                    AMD's Lightweight Profiling Instructions
11776* i386-BMI::                    Bit Manipulation Instruction
11777* i386-TBM::                    AMD's Trailing Bit Manipulation Instructions
11778* i386-16bit::                  Writing 16-bit Code
11779* i386-Arch::                   Specifying an x86 CPU architecture
11780* i386-ISA::                    AMD64 ISA vs. Intel64 ISA
11781* i386-Bugs::                   AT&T Syntax bugs
11782* i386-Notes::                  Notes
11783
11784
11785File: as.info,  Node: i386-Options,  Next: i386-Directives,  Up: i386-Dependent
11786
117879.16.1 Options
11788--------------
11789
11790The i386 version of 'as' has a few machine dependent options:
11791
11792'--32 | --x32 | --64'
11793     Select the word size, either 32 bits or 64 bits.  '--32' implies
11794     Intel i386 architecture, while '--x32' and '--64' imply AMD x86-64
11795     architecture with 32-bit or 64-bit word-size respectively.
11796
11797     These options are only available with the ELF object file format,
11798     and require that the necessary BFD support has been included (on a
11799     32-bit platform you have to add -enable-64-bit-bfd to configure
11800     enable 64-bit usage and use x86-64 as target platform).
11801
11802'-n'
11803     By default, x86 GAS replaces multiple nop instructions used for
11804     alignment within code sections with multi-byte nop instructions
11805     such as leal 0(%esi,1),%esi.  This switch disables the optimization
11806     if a single byte nop (0x90) is explicitly specified as the fill
11807     byte for alignment.
11808
11809'--divide'
11810     On SVR4-derived platforms, the character '/' is treated as a
11811     comment character, which means that it cannot be used in
11812     expressions.  The '--divide' option turns '/' into a normal
11813     character.  This does not disable '/' at the beginning of a line
11814     starting a comment, or affect using '#' for starting a comment.
11815
11816'-march=CPU[+EXTENSION...]'
11817     This option specifies the target processor.  The assembler will
11818     issue an error message if an attempt is made to assemble an
11819     instruction which will not execute on the target processor.  The
11820     following processor names are recognized: 'i8086', 'i186', 'i286',
11821     'i386', 'i486', 'i586', 'i686', 'pentium', 'pentiumpro',
11822     'pentiumii', 'pentiumiii', 'pentium4', 'prescott', 'nocona',
11823     'core', 'core2', 'corei7', 'l1om', 'k1om', 'iamcu', 'k6', 'k6_2',
11824     'athlon', 'opteron', 'k8', 'amdfam10', 'bdver1', 'bdver2',
11825     'bdver3', 'bdver4', 'znver1', 'znver2', 'znver3', 'btver1',
11826     'btver2', 'generic32' and 'generic64'.
11827
11828     In addition to the basic instruction set, the assembler can be told
11829     to accept various extension mnemonics.  For example,
11830     '-march=i686+sse4+vmx' extends I686 with SSE4 and VMX.  The
11831     following extensions are currently supported: '8087', '287', '387',
11832     '687', 'no87', 'no287', 'no387', 'no687', 'cmov', 'nocmov', 'fxsr',
11833     'nofxsr', 'mmx', 'nommx', 'sse', 'sse2', 'sse3', 'sse4a', 'ssse3',
11834     'sse4.1', 'sse4.2', 'sse4', 'nosse', 'nosse2', 'nosse3', 'nosse4a',
11835     'nossse3', 'nosse4.1', 'nosse4.2', 'nosse4', 'avx', 'avx2',
11836     'noavx', 'noavx2', 'adx', 'rdseed', 'prfchw', 'smap', 'mpx', 'sha',
11837     'rdpid', 'ptwrite', 'cet', 'gfni', 'vaes', 'vpclmulqdq',
11838     'prefetchwt1', 'clflushopt', 'se1', 'clwb', 'movdiri', 'movdir64b',
11839     'enqcmd', 'serialize', 'tsxldtrk', 'kl', 'nokl', 'widekl',
11840     'nowidekl', 'hreset', 'avx512f', 'avx512cd', 'avx512er',
11841     'avx512pf', 'avx512vl', 'avx512bw', 'avx512dq', 'avx512ifma',
11842     'avx512vbmi', 'avx512_4fmaps', 'avx512_4vnniw', 'avx512_vpopcntdq',
11843     'avx512_vbmi2', 'avx512_vnni', 'avx512_bitalg',
11844     'avx512_vp2intersect', 'tdx', 'avx512_bf16', 'avx_vnni',
11845     'noavx512f', 'noavx512cd', 'noavx512er', 'noavx512pf',
11846     'noavx512vl', 'noavx512bw', 'noavx512dq', 'noavx512ifma',
11847     'noavx512vbmi', 'noavx512_4fmaps', 'noavx512_4vnniw',
11848     'noavx512_vpopcntdq', 'noavx512_vbmi2', 'noavx512_vnni',
11849     'noavx512_bitalg', 'noavx512_vp2intersect', 'notdx',
11850     'noavx512_bf16', 'noavx_vnni', 'noenqcmd', 'noserialize',
11851     'notsxldtrk', 'amx_int8', 'noamx_int8', 'amx_bf16', 'noamx_bf16',
11852     'amx_tile', 'noamx_tile', 'nouintr', 'nohreset', 'vmx', 'vmfunc',
11853     'smx', 'xsave', 'xsaveopt', 'xsavec', 'xsaves', 'aes', 'pclmul',
11854     'fsgsbase', 'rdrnd', 'f16c', 'bmi2', 'fma', 'movbe', 'ept',
11855     'lzcnt', 'popcnt', 'hle', 'rtm', 'invpcid', 'clflush', 'mwaitx',
11856     'clzero', 'wbnoinvd', 'pconfig', 'waitpkg', 'uintr', 'cldemote',
11857     'rdpru', 'mcommit', 'sev_es', 'lwp', 'fma4', 'xop', 'cx16',
11858     'syscall', 'rdtscp', '3dnow', '3dnowa', 'sse4a', 'sse5', 'snp',
11859     'invlpgb', 'tlbsync', 'svme' and 'padlock'.  Note that rather than
11860     extending a basic instruction set, the extension mnemonics starting
11861     with 'no' revoke the respective functionality.
11862
11863     When the '.arch' directive is used with '-march', the '.arch'
11864     directive will take precedent.
11865
11866'-mtune=CPU'
11867     This option specifies a processor to optimize for.  When used in
11868     conjunction with the '-march' option, only instructions of the
11869     processor specified by the '-march' option will be generated.
11870
11871     Valid CPU values are identical to the processor list of
11872     '-march=CPU'.
11873
11874'-msse2avx'
11875     This option specifies that the assembler should encode SSE
11876     instructions with VEX prefix.
11877
11878'-msse-check=NONE'
11879'-msse-check=WARNING'
11880'-msse-check=ERROR'
11881     These options control if the assembler should check SSE
11882     instructions.  '-msse-check=NONE' will make the assembler not to
11883     check SSE instructions, which is the default.
11884     '-msse-check=WARNING' will make the assembler issue a warning for
11885     any SSE instruction.  '-msse-check=ERROR' will make the assembler
11886     issue an error for any SSE instruction.
11887
11888'-mavxscalar=128'
11889'-mavxscalar=256'
11890     These options control how the assembler should encode scalar AVX
11891     instructions.  '-mavxscalar=128' will encode scalar AVX
11892     instructions with 128bit vector length, which is the default.
11893     '-mavxscalar=256' will encode scalar AVX instructions with 256bit
11894     vector length.
11895
11896     WARNING: Don't use this for production code - due to CPU errata the
11897     resulting code may not work on certain models.
11898
11899'-mvexwig=0'
11900'-mvexwig=1'
11901     These options control how the assembler should encode VEX.W-ignored
11902     (WIG) VEX instructions.  '-mvexwig=0' will encode WIG VEX
11903     instructions with vex.w = 0, which is the default.  '-mvexwig=1'
11904     will encode WIG EVEX instructions with vex.w = 1.
11905
11906     WARNING: Don't use this for production code - due to CPU errata the
11907     resulting code may not work on certain models.
11908
11909'-mevexlig=128'
11910'-mevexlig=256'
11911'-mevexlig=512'
11912     These options control how the assembler should encode
11913     length-ignored (LIG) EVEX instructions.  '-mevexlig=128' will
11914     encode LIG EVEX instructions with 128bit vector length, which is
11915     the default.  '-mevexlig=256' and '-mevexlig=512' will encode LIG
11916     EVEX instructions with 256bit and 512bit vector length,
11917     respectively.
11918
11919'-mevexwig=0'
11920'-mevexwig=1'
11921     These options control how the assembler should encode w-ignored
11922     (WIG) EVEX instructions.  '-mevexwig=0' will encode WIG EVEX
11923     instructions with evex.w = 0, which is the default.  '-mevexwig=1'
11924     will encode WIG EVEX instructions with evex.w = 1.
11925
11926'-mmnemonic=ATT'
11927'-mmnemonic=INTEL'
11928     This option specifies instruction mnemonic for matching
11929     instructions.  The '.att_mnemonic' and '.intel_mnemonic' directives
11930     will take precedent.
11931
11932'-msyntax=ATT'
11933'-msyntax=INTEL'
11934     This option specifies instruction syntax when processing
11935     instructions.  The '.att_syntax' and '.intel_syntax' directives
11936     will take precedent.
11937
11938'-mnaked-reg'
11939     This option specifies that registers don't require a '%' prefix.
11940     The '.att_syntax' and '.intel_syntax' directives will take
11941     precedent.
11942
11943'-madd-bnd-prefix'
11944     This option forces the assembler to add BND prefix to all branches,
11945     even if such prefix was not explicitly specified in the source
11946     code.
11947
11948'-mno-shared'
11949     On ELF target, the assembler normally optimizes out non-PLT
11950     relocations against defined non-weak global branch targets with
11951     default visibility.  The '-mshared' option tells the assembler to
11952     generate code which may go into a shared library where all non-weak
11953     global branch targets with default visibility can be preempted.
11954     The resulting code is slightly bigger.  This option only affects
11955     the handling of branch instructions.
11956
11957'-mbig-obj'
11958     On PE/COFF target this option forces the use of big object file
11959     format, which allows more than 32768 sections.
11960
11961'-momit-lock-prefix=NO'
11962'-momit-lock-prefix=YES'
11963     These options control how the assembler should encode lock prefix.
11964     This option is intended as a workaround for processors, that fail
11965     on lock prefix.  This option can only be safely used with
11966     single-core, single-thread computers '-momit-lock-prefix=YES' will
11967     omit all lock prefixes.  '-momit-lock-prefix=NO' will encode lock
11968     prefix as usual, which is the default.
11969
11970'-mfence-as-lock-add=NO'
11971'-mfence-as-lock-add=YES'
11972     These options control how the assembler should encode lfence,
11973     mfence and sfence.  '-mfence-as-lock-add=YES' will encode lfence,
11974     mfence and sfence as 'lock addl $0x0, (%rsp)' in 64-bit mode and
11975     'lock addl $0x0, (%esp)' in 32-bit mode.  '-mfence-as-lock-add=NO'
11976     will encode lfence, mfence and sfence as usual, which is the
11977     default.
11978
11979'-mrelax-relocations=NO'
11980'-mrelax-relocations=YES'
11981     These options control whether the assembler should generate relax
11982     relocations, R_386_GOT32X, in 32-bit mode, or R_X86_64_GOTPCRELX
11983     and R_X86_64_REX_GOTPCRELX, in 64-bit mode.
11984     '-mrelax-relocations=YES' will generate relax relocations.
11985     '-mrelax-relocations=NO' will not generate relax relocations.  The
11986     default can be controlled by a configure option
11987     '--enable-x86-relax-relocations'.
11988
11989'-malign-branch-boundary=NUM'
11990     This option controls how the assembler should align branches with
11991     segment prefixes or NOP. NUM must be a power of 2.  It should be 0
11992     or no less than 16.  Branches will be aligned within NUM byte
11993     boundary.  '-malign-branch-boundary=0', which is the default,
11994     doesn't align branches.
11995
11996'-malign-branch=TYPE[+TYPE...]'
11997     This option specifies types of branches to align.  TYPE is
11998     combination of 'jcc', which aligns conditional jumps, 'fused',
11999     which aligns fused conditional jumps, 'jmp', which aligns
12000     unconditional jumps, 'call' which aligns calls, 'ret', which aligns
12001     rets, 'indirect', which aligns indirect jumps and calls.  The
12002     default is '-malign-branch=jcc+fused+jmp'.
12003
12004'-malign-branch-prefix-size=NUM'
12005     This option specifies the maximum number of prefixes on an
12006     instruction to align branches.  NUM should be between 0 and 5.  The
12007     default NUM is 5.
12008
12009'-mbranches-within-32B-boundaries'
12010     This option aligns conditional jumps, fused conditional jumps and
12011     unconditional jumps within 32 byte boundary with up to 5 segment
12012     prefixes on an instruction.  It is equivalent to
12013     '-malign-branch-boundary=32' '-malign-branch=jcc+fused+jmp'
12014     '-malign-branch-prefix-size=5'.  The default doesn't align
12015     branches.
12016
12017'-mlfence-after-load=NO'
12018'-mlfence-after-load=YES'
12019     These options control whether the assembler should generate lfence
12020     after load instructions.  '-mlfence-after-load=YES' will generate
12021     lfence.  '-mlfence-after-load=NO' will not generate lfence, which
12022     is the default.
12023
12024'-mlfence-before-indirect-branch=NONE'
12025'-mlfence-before-indirect-branch=ALL'
12026'-mlfence-before-indirect-branch=REGISTER'
12027'-mlfence-before-indirect-branch=MEMORY'
12028     These options control whether the assembler should generate lfence
12029     before indirect near branch instructions.
12030     '-mlfence-before-indirect-branch=ALL' will generate lfence before
12031     indirect near branch via register and issue a warning before
12032     indirect near branch via memory.  It also implicitly sets
12033     '-mlfence-before-ret=SHL' when there's no explicit
12034     '-mlfence-before-ret='.  '-mlfence-before-indirect-branch=REGISTER'
12035     will generate lfence before indirect near branch via register.
12036     '-mlfence-before-indirect-branch=MEMORY' will issue a warning
12037     before indirect near branch via memory.
12038     '-mlfence-before-indirect-branch=NONE' will not generate lfence nor
12039     issue warning, which is the default.  Note that lfence won't be
12040     generated before indirect near branch via register with
12041     '-mlfence-after-load=YES' since lfence will be generated after
12042     loading branch target register.
12043
12044'-mlfence-before-ret=NONE'
12045'-mlfence-before-ret=SHL'
12046'-mlfence-before-ret=OR'
12047'-mlfence-before-ret=YES'
12048'-mlfence-before-ret=NOT'
12049     These options control whether the assembler should generate lfence
12050     before ret.  '-mlfence-before-ret=OR' will generate generate or
12051     instruction with lfence.  '-mlfence-before-ret=SHL/YES' will
12052     generate shl instruction with lfence.  '-mlfence-before-ret=NOT'
12053     will generate not instruction with lfence.
12054     '-mlfence-before-ret=NONE' will not generate lfence, which is the
12055     default.
12056
12057'-mx86-used-note=NO'
12058'-mx86-used-note=YES'
12059     These options control whether the assembler should generate
12060     GNU_PROPERTY_X86_ISA_1_USED and GNU_PROPERTY_X86_FEATURE_2_USED GNU
12061     property notes.  The default can be controlled by the
12062     '--enable-x86-used-note' configure option.
12063
12064'-mevexrcig=RNE'
12065'-mevexrcig=RD'
12066'-mevexrcig=RU'
12067'-mevexrcig=RZ'
12068     These options control how the assembler should encode SAE-only EVEX
12069     instructions.  '-mevexrcig=RNE' will encode RC bits of EVEX
12070     instruction with 00, which is the default.  '-mevexrcig=RD',
12071     '-mevexrcig=RU' and '-mevexrcig=RZ' will encode SAE-only EVEX
12072     instructions with 01, 10 and 11 RC bits, respectively.
12073
12074'-mamd64'
12075'-mintel64'
12076     This option specifies that the assembler should accept only AMD64
12077     or Intel64 ISA in 64-bit mode.  The default is to accept common,
12078     Intel64 only and AMD64 ISAs.
12079
12080'-O0 | -O | -O1 | -O2 | -Os'
12081     Optimize instruction encoding with smaller instruction size.  '-O'
12082     and '-O1' encode 64-bit register load instructions with 64-bit
12083     immediate as 32-bit register load instructions with 31-bit or
12084     32-bits immediates, encode 64-bit register clearing instructions
12085     with 32-bit register clearing instructions, encode 256-bit/512-bit
12086     VEX/EVEX vector register clearing instructions with 128-bit VEX
12087     vector register clearing instructions, encode 128-bit/256-bit EVEX
12088     vector register load/store instructions with VEX vector register
12089     load/store instructions, and encode 128-bit/256-bit EVEX packed
12090     integer logical instructions with 128-bit/256-bit VEX packed
12091     integer logical.
12092
12093     '-O2' includes '-O1' optimization plus encodes 256-bit/512-bit EVEX
12094     vector register clearing instructions with 128-bit EVEX vector
12095     register clearing instructions.  In 64-bit mode VEX encoded
12096     instructions with commutative source operands will also have their
12097     source operands swapped if this allows using the 2-byte VEX prefix
12098     form instead of the 3-byte one.  Certain forms of AND as well as OR
12099     with the same (register) operand specified twice will also be
12100     changed to TEST.
12101
12102     '-Os' includes '-O2' optimization plus encodes 16-bit, 32-bit and
12103     64-bit register tests with immediate as 8-bit register test with
12104     immediate.  '-O0' turns off this optimization.
12105
12106
12107File: as.info,  Node: i386-Directives,  Next: i386-Syntax,  Prev: i386-Options,  Up: i386-Dependent
12108
121099.16.2 x86 specific Directives
12110------------------------------
12111
12112'.lcomm SYMBOL , LENGTH[, ALIGNMENT]'
12113     Reserve LENGTH (an absolute expression) bytes for a local common
12114     denoted by SYMBOL.  The section and value of SYMBOL are those of
12115     the new local common.  The addresses are allocated in the bss
12116     section, so that at run-time the bytes start off zeroed.  Since
12117     SYMBOL is not declared global, it is normally not visible to 'ld'.
12118     The optional third parameter, ALIGNMENT, specifies the desired
12119     alignment of the symbol in the bss section.
12120
12121     This directive is only available for COFF based x86 targets.
12122
12123'.largecomm SYMBOL , LENGTH[, ALIGNMENT]'
12124     This directive behaves in the same way as the 'comm' directive
12125     except that the data is placed into the .LBSS section instead of
12126     the .BSS section *note Comm::.
12127
12128     The directive is intended to be used for data which requires a
12129     large amount of space, and it is only available for ELF based
12130     x86_64 targets.
12131
12132'.value EXPRESSION [, EXPRESSION]'
12133     This directive behaves in the same way as the '.short' directive,
12134     taking a series of comma separated expressions and storing them as
12135     two-byte wide values into the current section.
12136
12137
12138File: as.info,  Node: i386-Syntax,  Next: i386-Mnemonics,  Prev: i386-Directives,  Up: i386-Dependent
12139
121409.16.3 i386 Syntactical Considerations
12141--------------------------------------
12142
12143* Menu:
12144
12145* i386-Variations::           AT&T Syntax versus Intel Syntax
12146* i386-Chars::                Special Characters
12147
12148
12149File: as.info,  Node: i386-Variations,  Next: i386-Chars,  Up: i386-Syntax
12150
121519.16.3.1 AT&T Syntax versus Intel Syntax
12152........................................
12153
12154'as' now supports assembly using Intel assembler syntax.
12155'.intel_syntax' selects Intel mode, and '.att_syntax' switches back to
12156the usual AT&T mode for compatibility with the output of 'gcc'.  Either
12157of these directives may have an optional argument, 'prefix', or
12158'noprefix' specifying whether registers require a '%' prefix.  AT&T
12159System V/386 assembler syntax is quite different from Intel syntax.  We
12160mention these differences because almost all 80386 documents use Intel
12161syntax.  Notable differences between the two syntaxes are:
12162
12163   * AT&T immediate operands are preceded by '$'; Intel immediate
12164     operands are undelimited (Intel 'push 4' is AT&T 'pushl $4').  AT&T
12165     register operands are preceded by '%'; Intel register operands are
12166     undelimited.  AT&T absolute (as opposed to PC relative) jump/call
12167     operands are prefixed by '*'; they are undelimited in Intel syntax.
12168
12169   * AT&T and Intel syntax use the opposite order for source and
12170     destination operands.  Intel 'add eax, 4' is 'addl $4, %eax'.  The
12171     'source, dest' convention is maintained for compatibility with
12172     previous Unix assemblers.  Note that 'bound', 'invlpga', and
12173     instructions with 2 immediate operands, such as the 'enter'
12174     instruction, do _not_ have reversed order.  *note i386-Bugs::.
12175
12176   * In AT&T syntax the size of memory operands is determined from the
12177     last character of the instruction mnemonic.  Mnemonic suffixes of
12178     'b', 'w', 'l' and 'q' specify byte (8-bit), word (16-bit), long
12179     (32-bit) and quadruple word (64-bit) memory references.  Mnemonic
12180     suffixes of 'x', 'y' and 'z' specify xmm (128-bit vector), ymm
12181     (256-bit vector) and zmm (512-bit vector) memory references, only
12182     when there's no other way to disambiguate an instruction.  Intel
12183     syntax accomplishes this by prefixing memory operands (_not_ the
12184     instruction mnemonics) with 'byte ptr', 'word ptr', 'dword ptr',
12185     'qword ptr', 'xmmword ptr', 'ymmword ptr' and 'zmmword ptr'.  Thus,
12186     Intel syntax 'mov al, byte ptr FOO' is 'movb FOO, %al' in AT&T
12187     syntax.  In Intel syntax, 'fword ptr', 'tbyte ptr' and 'oword ptr'
12188     specify 48-bit, 80-bit and 128-bit memory references.
12189
12190     In 64-bit code, 'movabs' can be used to encode the 'mov'
12191     instruction with the 64-bit displacement or immediate operand.
12192
12193   * Immediate form long jumps and calls are 'lcall/ljmp $SECTION,
12194     $OFFSET' in AT&T syntax; the Intel syntax is 'call/jmp far
12195     SECTION:OFFSET'.  Also, the far return instruction is 'lret
12196     $STACK-ADJUST' in AT&T syntax; Intel syntax is 'ret far
12197     STACK-ADJUST'.
12198
12199   * The AT&T assembler does not provide support for multiple section
12200     programs.  Unix style systems expect all programs to be single
12201     sections.
12202
12203
12204File: as.info,  Node: i386-Chars,  Prev: i386-Variations,  Up: i386-Syntax
12205
122069.16.3.2 Special Characters
12207...........................
12208
12209The presence of a '#' appearing anywhere on a line indicates the start
12210of a comment that extends to the end of that line.
12211
12212   If a '#' appears as the first character of a line then the whole line
12213is treated as a comment, but in this case the line can also be a logical
12214line number directive (*note Comments::) or a preprocessor control
12215command (*note Preprocessing::).
12216
12217   If the '--divide' command-line option has not been specified then the
12218'/' character appearing anywhere on a line also introduces a line
12219comment.
12220
12221   The ';' character can be used to separate statements on the same
12222line.
12223
12224
12225File: as.info,  Node: i386-Mnemonics,  Next: i386-Regs,  Prev: i386-Syntax,  Up: i386-Dependent
12226
122279.16.4 i386-Mnemonics
12228---------------------
12229
122309.16.4.1 Instruction Naming
12231...........................
12232
12233Instruction mnemonics are suffixed with one character modifiers which
12234specify the size of operands.  The letters 'b', 'w', 'l' and 'q' specify
12235byte, word, long and quadruple word operands.  If no suffix is specified
12236by an instruction then 'as' tries to fill in the missing suffix based on
12237the destination register operand (the last one by convention).  Thus,
12238'mov %ax, %bx' is equivalent to 'movw %ax, %bx'; also, 'mov $1, %bx' is
12239equivalent to 'movw $1, bx'.  Note that this is incompatible with the
12240AT&T Unix assembler which assumes that a missing mnemonic suffix implies
12241long operand size.  (This incompatibility does not affect compiler
12242output since compilers always explicitly specify the mnemonic suffix.)
12243
12244   When there is no sizing suffix and no (suitable) register operands to
12245deduce the size of memory operands, with a few exceptions and where long
12246operand size is possible in the first place, operand size will default
12247to long in 32- and 64-bit modes.  Similarly it will default to short in
1224816-bit mode.  Noteworthy exceptions are
12249
12250   * Instructions with an implicit on-stack operand as well as branches,
12251     which default to quad in 64-bit mode.
12252
12253   * Sign- and zero-extending moves, which default to byte size source
12254     operands.
12255
12256   * Floating point insns with integer operands, which default to short
12257     (for perhaps historical reasons).
12258
12259   * CRC32 with a 64-bit destination, which defaults to a quad source
12260     operand.
12261
12262   Different encoding options can be specified via pseudo prefixes:
12263
12264   * '{disp8}' - prefer 8-bit displacement.
12265
12266   * '{disp32}' - prefer 32-bit displacement.
12267
12268   * '{disp16}' - prefer 16-bit displacement.
12269
12270   * '{load}' - prefer load-form instruction.
12271
12272   * '{store}' - prefer store-form instruction.
12273
12274   * '{vex}' - encode with VEX prefix.
12275
12276   * '{vex3}' - encode with 3-byte VEX prefix.
12277
12278   * '{evex}' - encode with EVEX prefix.
12279
12280   * '{rex}' - prefer REX prefix for integer and legacy vector
12281     instructions (x86-64 only).  Note that this differs from the 'rex'
12282     prefix which generates REX prefix unconditionally.
12283
12284   * '{nooptimize}' - disable instruction size optimization.
12285
12286   Mnemonics of Intel VNNI instructions are encoded with the EVEX prefix
12287by default.  The pseudo '{vex}' prefix can be used to encode mnemonics
12288of Intel VNNI instructions with the VEX prefix.
12289
12290   The Intel-syntax conversion instructions
12291
12292   * 'cbw' -- sign-extend byte in '%al' to word in '%ax',
12293
12294   * 'cwde' -- sign-extend word in '%ax' to long in '%eax',
12295
12296   * 'cwd' -- sign-extend word in '%ax' to long in '%dx:%ax',
12297
12298   * 'cdq' -- sign-extend dword in '%eax' to quad in '%edx:%eax',
12299
12300   * 'cdqe' -- sign-extend dword in '%eax' to quad in '%rax' (x86-64
12301     only),
12302
12303   * 'cqo' -- sign-extend quad in '%rax' to octuple in '%rdx:%rax'
12304     (x86-64 only),
12305
12306are called 'cbtw', 'cwtl', 'cwtd', 'cltd', 'cltq', and 'cqto' in AT&T
12307naming.  'as' accepts either naming for these instructions.
12308
12309   The Intel-syntax extension instructions
12310
12311   * 'movsx' -- sign-extend 'reg8/mem8' to 'reg16'.
12312
12313   * 'movsx' -- sign-extend 'reg8/mem8' to 'reg32'.
12314
12315   * 'movsx' -- sign-extend 'reg8/mem8' to 'reg64' (x86-64 only).
12316
12317   * 'movsx' -- sign-extend 'reg16/mem16' to 'reg32'
12318
12319   * 'movsx' -- sign-extend 'reg16/mem16' to 'reg64' (x86-64 only).
12320
12321   * 'movsxd' -- sign-extend 'reg32/mem32' to 'reg64' (x86-64 only).
12322
12323   * 'movzx' -- zero-extend 'reg8/mem8' to 'reg16'.
12324
12325   * 'movzx' -- zero-extend 'reg8/mem8' to 'reg32'.
12326
12327   * 'movzx' -- zero-extend 'reg8/mem8' to 'reg64' (x86-64 only).
12328
12329   * 'movzx' -- zero-extend 'reg16/mem16' to 'reg32'
12330
12331   * 'movzx' -- zero-extend 'reg16/mem16' to 'reg64' (x86-64 only).
12332
12333are called 'movsbw/movsxb/movsx', 'movsbl/movsxb/movsx',
12334'movsbq/movsb/movsx', 'movswl/movsxw', 'movswq/movsxw', 'movslq/movsxl',
12335'movzbw/movzxb/movzx', 'movzbl/movzxb/movzx', 'movzbq/movzxb/movzx',
12336'movzwl/movzxw' and 'movzwq/movzxw' in AT&T syntax.
12337
12338   Far call/jump instructions are 'lcall' and 'ljmp' in AT&T syntax, but
12339are 'call far' and 'jump far' in Intel convention.
12340
123419.16.4.2 AT&T Mnemonic versus Intel Mnemonic
12342............................................
12343
12344'as' supports assembly using Intel mnemonic.  '.intel_mnemonic' selects
12345Intel mnemonic with Intel syntax, and '.att_mnemonic' switches back to
12346the usual AT&T mnemonic with AT&T syntax for compatibility with the
12347output of 'gcc'.  Several x87 instructions, 'fadd', 'fdiv', 'fdivp',
12348'fdivr', 'fdivrp', 'fmul', 'fsub', 'fsubp', 'fsubr' and 'fsubrp', are
12349implemented in AT&T System V/386 assembler with different mnemonics from
12350those in Intel IA32 specification.  'gcc' generates those instructions
12351with AT&T mnemonic.
12352
12353   * 'movslq' with AT&T mnemonic only accepts 64-bit destination
12354     register.  'movsxd' should be used to encode 16-bit or 32-bit
12355     destination register with both AT&T and Intel mnemonics.
12356
12357
12358File: as.info,  Node: i386-Regs,  Next: i386-Prefixes,  Prev: i386-Mnemonics,  Up: i386-Dependent
12359
123609.16.5 Register Naming
12361----------------------
12362
12363Register operands are always prefixed with '%'.  The 80386 registers
12364consist of
12365
12366   * the 8 32-bit registers '%eax' (the accumulator), '%ebx', '%ecx',
12367     '%edx', '%edi', '%esi', '%ebp' (the frame pointer), and '%esp' (the
12368     stack pointer).
12369
12370   * the 8 16-bit low-ends of these: '%ax', '%bx', '%cx', '%dx', '%di',
12371     '%si', '%bp', and '%sp'.
12372
12373   * the 8 8-bit registers: '%ah', '%al', '%bh', '%bl', '%ch', '%cl',
12374     '%dh', and '%dl' (These are the high-bytes and low-bytes of '%ax',
12375     '%bx', '%cx', and '%dx')
12376
12377   * the 6 section registers '%cs' (code section), '%ds' (data section),
12378     '%ss' (stack section), '%es', '%fs', and '%gs'.
12379
12380   * the 5 processor control registers '%cr0', '%cr2', '%cr3', '%cr4',
12381     and '%cr8'.
12382
12383   * the 6 debug registers '%db0', '%db1', '%db2', '%db3', '%db6', and
12384     '%db7'.
12385
12386   * the 2 test registers '%tr6' and '%tr7'.
12387
12388   * the 8 floating point register stack '%st' or equivalently '%st(0)',
12389     '%st(1)', '%st(2)', '%st(3)', '%st(4)', '%st(5)', '%st(6)', and
12390     '%st(7)'.  These registers are overloaded by 8 MMX registers
12391     '%mm0', '%mm1', '%mm2', '%mm3', '%mm4', '%mm5', '%mm6' and '%mm7'.
12392
12393   * the 8 128-bit SSE registers registers '%xmm0', '%xmm1', '%xmm2',
12394     '%xmm3', '%xmm4', '%xmm5', '%xmm6' and '%xmm7'.
12395
12396   The AMD x86-64 architecture extends the register set by:
12397
12398   * enhancing the 8 32-bit registers to 64-bit: '%rax' (the
12399     accumulator), '%rbx', '%rcx', '%rdx', '%rdi', '%rsi', '%rbp' (the
12400     frame pointer), '%rsp' (the stack pointer)
12401
12402   * the 8 extended registers '%r8'-'%r15'.
12403
12404   * the 8 32-bit low ends of the extended registers: '%r8d'-'%r15d'.
12405
12406   * the 8 16-bit low ends of the extended registers: '%r8w'-'%r15w'.
12407
12408   * the 8 8-bit low ends of the extended registers: '%r8b'-'%r15b'.
12409
12410   * the 4 8-bit registers: '%sil', '%dil', '%bpl', '%spl'.
12411
12412   * the 8 debug registers: '%db8'-'%db15'.
12413
12414   * the 8 128-bit SSE registers: '%xmm8'-'%xmm15'.
12415
12416   With the AVX extensions more registers were made available:
12417
12418   * the 16 256-bit SSE '%ymm0'-'%ymm15' (only the first 8 available in
12419     32-bit mode).  The bottom 128 bits are overlaid with the
12420     'xmm0'-'xmm15' registers.
12421
12422   The AVX512 extensions added the following registers:
12423
12424   * the 32 512-bit registers '%zmm0'-'%zmm31' (only the first 8
12425     available in 32-bit mode).  The bottom 128 bits are overlaid with
12426     the '%xmm0'-'%xmm31' registers and the first 256 bits are overlaid
12427     with the '%ymm0'-'%ymm31' registers.
12428
12429   * the 8 mask registers '%k0'-'%k7'.
12430
12431
12432File: as.info,  Node: i386-Prefixes,  Next: i386-Memory,  Prev: i386-Regs,  Up: i386-Dependent
12433
124349.16.6 Instruction Prefixes
12435---------------------------
12436
12437Instruction prefixes are used to modify the following instruction.  They
12438are used to repeat string instructions, to provide section overrides, to
12439perform bus lock operations, and to change operand and address sizes.
12440(Most instructions that normally operate on 32-bit operands will use
1244116-bit operands if the instruction has an "operand size" prefix.)
12442Instruction prefixes are best written on the same line as the
12443instruction they act upon.  For example, the 'scas' (scan string)
12444instruction is repeated with:
12445
12446             repne scas %es:(%edi),%al
12447
12448   You may also place prefixes on the lines immediately preceding the
12449instruction, but this circumvents checks that 'as' does with prefixes,
12450and will not work with all prefixes.
12451
12452   Here is a list of instruction prefixes:
12453
12454   * Section override prefixes 'cs', 'ds', 'ss', 'es', 'fs', 'gs'.
12455     These are automatically added by specifying using the
12456     SECTION:MEMORY-OPERAND form for memory references.
12457
12458   * Operand/Address size prefixes 'data16' and 'addr16' change 32-bit
12459     operands/addresses into 16-bit operands/addresses, while 'data32'
12460     and 'addr32' change 16-bit ones (in a '.code16' section) into
12461     32-bit operands/addresses.  These prefixes _must_ appear on the
12462     same line of code as the instruction they modify.  For example, in
12463     a 16-bit '.code16' section, you might write:
12464
12465                  addr32 jmpl *(%ebx)
12466
12467   * The bus lock prefix 'lock' inhibits interrupts during execution of
12468     the instruction it precedes.  (This is only valid with certain
12469     instructions; see a 80386 manual for details).
12470
12471   * The wait for coprocessor prefix 'wait' waits for the coprocessor to
12472     complete the current instruction.  This should never be needed for
12473     the 80386/80387 combination.
12474
12475   * The 'rep', 'repe', and 'repne' prefixes are added to string
12476     instructions to make them repeat '%ecx' times ('%cx' times if the
12477     current address size is 16-bits).
12478   * The 'rex' family of prefixes is used by x86-64 to encode extensions
12479     to i386 instruction set.  The 'rex' prefix has four bits -- an
12480     operand size overwrite ('64') used to change operand size from
12481     32-bit to 64-bit and X, Y and Z extensions bits used to extend the
12482     register set.
12483
12484     You may write the 'rex' prefixes directly.  The 'rex64xyz'
12485     instruction emits 'rex' prefix with all the bits set.  By omitting
12486     the '64', 'x', 'y' or 'z' you may write other prefixes as well.
12487     Normally, there is no need to write the prefixes explicitly, since
12488     gas will automatically generate them based on the instruction
12489     operands.
12490
12491
12492File: as.info,  Node: i386-Memory,  Next: i386-Jumps,  Prev: i386-Prefixes,  Up: i386-Dependent
12493
124949.16.7 Memory References
12495------------------------
12496
12497An Intel syntax indirect memory reference of the form
12498
12499     SECTION:[BASE + INDEX*SCALE + DISP]
12500
12501is translated into the AT&T syntax
12502
12503     SECTION:DISP(BASE, INDEX, SCALE)
12504
12505where BASE and INDEX are the optional 32-bit base and index registers,
12506DISP is the optional displacement, and SCALE, taking the values 1, 2, 4,
12507and 8, multiplies INDEX to calculate the address of the operand.  If no
12508SCALE is specified, SCALE is taken to be 1.  SECTION specifies the
12509optional section register for the memory operand, and may override the
12510default section register (see a 80386 manual for section register
12511defaults).  Note that section overrides in AT&T syntax _must_ be
12512preceded by a '%'.  If you specify a section override which coincides
12513with the default section register, 'as' does _not_ output any section
12514register override prefixes to assemble the given instruction.  Thus,
12515section overrides can be specified to emphasize which section register
12516is used for a given memory operand.
12517
12518   Here are some examples of Intel and AT&T style memory references:
12519
12520AT&T: '-4(%ebp)', Intel: '[ebp - 4]'
12521     BASE is '%ebp'; DISP is '-4'.  SECTION is missing, and the default
12522     section is used ('%ss' for addressing with '%ebp' as the base
12523     register).  INDEX, SCALE are both missing.
12524
12525AT&T: 'foo(,%eax,4)', Intel: '[foo + eax*4]'
12526     INDEX is '%eax' (scaled by a SCALE 4); DISP is 'foo'.  All other
12527     fields are missing.  The section register here defaults to '%ds'.
12528
12529AT&T: 'foo(,1)'; Intel '[foo]'
12530     This uses the value pointed to by 'foo' as a memory operand.  Note
12531     that BASE and INDEX are both missing, but there is only _one_ ','.
12532     This is a syntactic exception.
12533
12534AT&T: '%gs:foo'; Intel 'gs:foo'
12535     This selects the contents of the variable 'foo' with section
12536     register SECTION being '%gs'.
12537
12538   Absolute (as opposed to PC relative) call and jump operands must be
12539prefixed with '*'.  If no '*' is specified, 'as' always chooses PC
12540relative addressing for jump/call labels.
12541
12542   Any instruction that has a memory operand, but no register operand,
12543_must_ specify its size (byte, word, long, or quadruple) with an
12544instruction mnemonic suffix ('b', 'w', 'l' or 'q', respectively).
12545
12546   The x86-64 architecture adds an RIP (instruction pointer relative)
12547addressing.  This addressing mode is specified by using 'rip' as a base
12548register.  Only constant offsets are valid.  For example:
12549
12550AT&T: '1234(%rip)', Intel: '[rip + 1234]'
12551     Points to the address 1234 bytes past the end of the current
12552     instruction.
12553
12554AT&T: 'symbol(%rip)', Intel: '[rip + symbol]'
12555     Points to the 'symbol' in RIP relative way, this is shorter than
12556     the default absolute addressing.
12557
12558   Other addressing modes remain unchanged in x86-64 architecture,
12559except registers used are 64-bit instead of 32-bit.
12560
12561
12562File: as.info,  Node: i386-Jumps,  Next: i386-Float,  Prev: i386-Memory,  Up: i386-Dependent
12563
125649.16.8 Handling of Jump Instructions
12565------------------------------------
12566
12567Jump instructions are always optimized to use the smallest possible
12568displacements.  This is accomplished by using byte (8-bit) displacement
12569jumps whenever the target is sufficiently close.  If a byte displacement
12570is insufficient a long displacement is used.  We do not support word
12571(16-bit) displacement jumps in 32-bit mode (i.e.  prefixing the jump
12572instruction with the 'data16' instruction prefix), since the 80386
12573insists upon masking '%eip' to 16 bits after the word displacement is
12574added.  (See also *note i386-Arch::)
12575
12576   Note that the 'jcxz', 'jecxz', 'loop', 'loopz', 'loope', 'loopnz' and
12577'loopne' instructions only come in byte displacements, so that if you
12578use these instructions ('gcc' does not use them) you may get an error
12579message (and incorrect code).  The AT&T 80386 assembler tries to get
12580around this problem by expanding 'jcxz foo' to
12581
12582              jcxz cx_zero
12583              jmp cx_nonzero
12584     cx_zero: jmp foo
12585     cx_nonzero:
12586
12587
12588File: as.info,  Node: i386-Float,  Next: i386-SIMD,  Prev: i386-Jumps,  Up: i386-Dependent
12589
125909.16.9 Floating Point
12591---------------------
12592
12593All 80387 floating point types except packed BCD are supported.  (BCD
12594support may be added without much difficulty).  These data types are
1259516-, 32-, and 64- bit integers, and single (32-bit), double (64-bit),
12596and extended (80-bit) precision floating point.  Each supported type has
12597an instruction mnemonic suffix and a constructor associated with it.
12598Instruction mnemonic suffixes specify the operand's data type.
12599Constructors build these data types into memory.
12600
12601   * Floating point constructors are '.float' or '.single', '.double',
12602     and '.tfloat' for 32-, 64-, and 80-bit formats.  These correspond
12603     to instruction mnemonic suffixes 's', 'l', and 't'.  't' stands for
12604     80-bit (ten byte) real.  The 80387 only supports this format via
12605     the 'fldt' (load 80-bit real to stack top) and 'fstpt' (store
12606     80-bit real and pop stack) instructions.
12607
12608   * Integer constructors are '.word', '.long' or '.int', and '.quad'
12609     for the 16-, 32-, and 64-bit integer formats.  The corresponding
12610     instruction mnemonic suffixes are 's' (short), 'l' (long), and 'q'
12611     (quad).  As with the 80-bit real format, the 64-bit 'q' format is
12612     only present in the 'fildq' (load quad integer to stack top) and
12613     'fistpq' (store quad integer and pop stack) instructions.
12614
12615   Register to register operations should not use instruction mnemonic
12616suffixes.  'fstl %st, %st(1)' will give a warning, and be assembled as
12617if you wrote 'fst %st, %st(1)', since all register to register
12618operations use 80-bit floating point operands.  (Contrast this with
12619'fstl %st, mem', which converts '%st' from 80-bit to 64-bit floating
12620point format, then stores the result in the 4 byte location 'mem')
12621
12622
12623File: as.info,  Node: i386-SIMD,  Next: i386-LWP,  Prev: i386-Float,  Up: i386-Dependent
12624
126259.16.10 Intel's MMX and AMD's 3DNow! SIMD Operations
12626----------------------------------------------------
12627
12628'as' supports Intel's MMX instruction set (SIMD instructions for integer
12629data), available on Intel's Pentium MMX processors and Pentium II
12630processors, AMD's K6 and K6-2 processors, Cyrix' M2 processor, and
12631probably others.  It also supports AMD's 3DNow! instruction set (SIMD
12632instructions for 32-bit floating point data) available on AMD's K6-2
12633processor and possibly others in the future.
12634
12635   Currently, 'as' does not support Intel's floating point SIMD, Katmai
12636(KNI).
12637
12638   The eight 64-bit MMX operands, also used by 3DNow!, are called
12639'%mm0', '%mm1', ...  '%mm7'.  They contain eight 8-bit integers, four
1264016-bit integers, two 32-bit integers, one 64-bit integer, or two 32-bit
12641floating point values.  The MMX registers cannot be used at the same
12642time as the floating point stack.
12643
12644   See Intel and AMD documentation, keeping in mind that the operand
12645order in instructions is reversed from the Intel syntax.
12646
12647
12648File: as.info,  Node: i386-LWP,  Next: i386-BMI,  Prev: i386-SIMD,  Up: i386-Dependent
12649
126509.16.11 AMD's Lightweight Profiling Instructions
12651------------------------------------------------
12652
12653'as' supports AMD's Lightweight Profiling (LWP) instruction set,
12654available on AMD's Family 15h (Orochi) processors.
12655
12656   LWP enables applications to collect and manage performance data, and
12657react to performance events.  The collection of performance data
12658requires no context switches.  LWP runs in the context of a thread and
12659so several counters can be used independently across multiple threads.
12660LWP can be used in both 64-bit and legacy 32-bit modes.
12661
12662   For detailed information on the LWP instruction set, see the 'AMD
12663Lightweight Profiling Specification' available at Lightweight Profiling
12664Specification (http://developer.amd.com/cpu/LWP).
12665
12666
12667File: as.info,  Node: i386-BMI,  Next: i386-TBM,  Prev: i386-LWP,  Up: i386-Dependent
12668
126699.16.12 Bit Manipulation Instructions
12670-------------------------------------
12671
12672'as' supports the Bit Manipulation (BMI) instruction set.
12673
12674   BMI instructions provide several instructions implementing individual
12675bit manipulation operations such as isolation, masking, setting, or
12676resetting.
12677
12678
12679File: as.info,  Node: i386-TBM,  Next: i386-16bit,  Prev: i386-BMI,  Up: i386-Dependent
12680
126819.16.13 AMD's Trailing Bit Manipulation Instructions
12682----------------------------------------------------
12683
12684'as' supports AMD's Trailing Bit Manipulation (TBM) instruction set,
12685available on AMD's BDVER2 processors (Trinity and Viperfish).
12686
12687   TBM instructions provide instructions implementing individual bit
12688manipulation operations such as isolating, masking, setting, resetting,
12689complementing, and operations on trailing zeros and ones.
12690
12691
12692File: as.info,  Node: i386-16bit,  Next: i386-Arch,  Prev: i386-TBM,  Up: i386-Dependent
12693
126949.16.14 Writing 16-bit Code
12695---------------------------
12696
12697While 'as' normally writes only "pure" 32-bit i386 code or 64-bit x86-64
12698code depending on the default configuration, it also supports writing
12699code to run in real mode or in 16-bit protected mode code segments.  To
12700do this, put a '.code16' or '.code16gcc' directive before the assembly
12701language instructions to be run in 16-bit mode.  You can switch 'as' to
12702writing 32-bit code with the '.code32' directive or 64-bit code with the
12703'.code64' directive.
12704
12705   '.code16gcc' provides experimental support for generating 16-bit code
12706from gcc, and differs from '.code16' in that 'call', 'ret', 'enter',
12707'leave', 'push', 'pop', 'pusha', 'popa', 'pushf', and 'popf'
12708instructions default to 32-bit size.  This is so that the stack pointer
12709is manipulated in the same way over function calls, allowing access to
12710function parameters at the same stack offsets as in 32-bit mode.
12711'.code16gcc' also automatically adds address size prefixes where
12712necessary to use the 32-bit addressing modes that gcc generates.
12713
12714   The code which 'as' generates in 16-bit mode will not necessarily run
12715on a 16-bit pre-80386 processor.  To write code that runs on such a
12716processor, you must refrain from using _any_ 32-bit constructs which
12717require 'as' to output address or operand size prefixes.
12718
12719   Note that writing 16-bit code instructions by explicitly specifying a
12720prefix or an instruction mnemonic suffix within a 32-bit code section
12721generates different machine instructions than those generated for a
1272216-bit code segment.  In a 32-bit code section, the following code
12723generates the machine opcode bytes '66 6a 04', which pushes the value
12724'4' onto the stack, decrementing '%esp' by 2.
12725
12726             pushw $4
12727
12728   The same code in a 16-bit code section would generate the machine
12729opcode bytes '6a 04' (i.e., without the operand size prefix), which is
12730correct since the processor default operand size is assumed to be 16
12731bits in a 16-bit code section.
12732
12733
12734File: as.info,  Node: i386-Arch,  Next: i386-ISA,  Prev: i386-16bit,  Up: i386-Dependent
12735
127369.16.15 Specifying CPU Architecture
12737-----------------------------------
12738
12739'as' may be told to assemble for a particular CPU (sub-)architecture
12740with the '.arch CPU_TYPE' directive.  This directive enables a warning
12741when gas detects an instruction that is not supported on the CPU
12742specified.  The choices for CPU_TYPE are:
12743
12744'i8086'        'i186'         'i286'         'i386'
12745'i486'         'i586'         'i686'         'pentium'
12746'pentiumpro'   'pentiumii'    'pentiumiii'   'pentium4'
12747'prescott'     'nocona'       'core'         'core2'
12748'corei7'       'l1om'         'k1om'         'iamcu'
12749'k6'           'k6_2'         'athlon'       'k8'
12750'amdfam10'     'bdver1'       'bdver2'       'bdver3'
12751'bdver4'       'znver1'       'znver2'       'znver3'
12752'btver1'       'btver2'       'generic32'    'generic64'
12753'.cmov'        '.fxsr'        '.mmx'
12754'.sse'         '.sse2'        '.sse3'        '.sse4a'
12755'.ssse3'       '.sse4.1'      '.sse4.2'      '.sse4'
12756'.avx'         '.vmx'         '.smx'         '.ept'
12757'.clflush'     '.movbe'       '.xsave'       '.xsaveopt'
12758'.aes'         '.pclmul'      '.fma'         '.fsgsbase'
12759'.rdrnd'       '.f16c'        '.avx2'        '.bmi2'
12760'.lzcnt'       '.popcnt'      '.invpcid'     '.vmfunc'
12761'.hle'
12762'.rtm'         '.adx'         '.rdseed'      '.prfchw'
12763'.smap'        '.mpx'         '.sha'         '.prefetchwt1'
12764'.clflushopt'  '.xsavec'      '.xsaves'      '.se1'
12765'.avx512f'     '.avx512cd'    '.avx512er'    '.avx512pf'
12766'.avx512vl'    '.avx512bw'    '.avx512dq'    '.avx512ifma'
12767'.avx512vbmi'  '.avx512_4fmaps''.avx512_4vnniw'
12768'.avx512_vpopcntdq''.avx512_vbmi2''.avx512_vnni'
12769'.avx512_bitalg''.avx512_bf16''.avx512_vp2intersect'
12770'.tdx'         '.avx_vnni'
12771'.clwb'        '.rdpid'       '.ptwrite'
12772'.ibt'
12773'.wbnoinvd'    '.pconfig'     '.waitpkg'     '.cldemote'
12774'.shstk'       '.gfni'        '.vaes'        '.vpclmulqdq'
12775'.movdiri'     '.movdir64b'   '.enqcmd'      '.tsxldtrk'
12776'.amx_int8'    '.amx_bf16'    '.amx_tile'
12777'.kl'          '.widekl'      '.uintr'       '.hreset'
12778'.3dnow'       '.3dnowa'      '.sse4a'       '.sse5'
12779'.syscall'     '.rdtscp'      '.svme'
12780'.lwp'         '.fma4'        '.xop'         '.cx16'
12781'.padlock'     '.clzero'      '.mwaitx'      '.rdpru'
12782'.mcommit'     '.sev_es'      '.snp'         '.invlpgb'
12783'.tlbsync'
12784
12785   Apart from the warning, there are only two other effects on 'as'
12786operation; Firstly, if you specify a CPU other than 'i486', then shift
12787by one instructions such as 'sarl $1, %eax' will automatically use a two
12788byte opcode sequence.  The larger three byte opcode sequence is used on
12789the 486 (and when no architecture is specified) because it executes
12790faster on the 486.  Note that you can explicitly request the two byte
12791opcode by writing 'sarl %eax'.  Secondly, if you specify 'i8086',
12792'i186', or 'i286', _and_ '.code16' or '.code16gcc' then byte offset
12793conditional jumps will be promoted when necessary to a two instruction
12794sequence consisting of a conditional jump of the opposite sense around
12795an unconditional jump to the target.
12796
12797   Following the CPU architecture (but not a sub-architecture, which are
12798those starting with a dot), you may specify 'jumps' or 'nojumps' to
12799control automatic promotion of conditional jumps.  'jumps' is the
12800default, and enables jump promotion; All external jumps will be of the
12801long variety, and file-local jumps will be promoted as necessary.
12802(*note i386-Jumps::) 'nojumps' leaves external conditional jumps as byte
12803offset jumps, and warns about file-local conditional jumps that 'as'
12804promotes.  Unconditional jumps are treated as for 'jumps'.
12805
12806   For example
12807
12808      .arch i8086,nojumps
12809
12810
12811File: as.info,  Node: i386-ISA,  Next: i386-Bugs,  Prev: i386-Arch,  Up: i386-Dependent
12812
128139.16.16 AMD64 ISA vs. Intel64 ISA
12814---------------------------------
12815
12816There are some discrepancies between AMD64 and Intel64 ISAs.
12817
12818   * For 'movsxd' with 16-bit destination register, AMD64 supports
12819     32-bit source operand and Intel64 supports 16-bit source operand.
12820
12821   * For far branches (with explicit memory operand), both ISAs support
12822     32- and 16-bit operand size.  Intel64 additionally supports 64-bit
12823     operand size, encoded as 'ljmpq' and 'lcallq' in AT&T syntax and
12824     with an explicit 'tbyte ptr' operand size specifier in Intel
12825     syntax.
12826
12827   * 'lfs', 'lgs', and 'lss' similarly allow for 16- and 32-bit operand
12828     size (32- and 48-bit memory operand) in both ISAs, while Intel64
12829     additionally supports 64-bit operand sise (80-bit memory operands).
12830
12831
12832File: as.info,  Node: i386-Bugs,  Next: i386-Notes,  Prev: i386-ISA,  Up: i386-Dependent
12833
128349.16.17 AT&T Syntax bugs
12835------------------------
12836
12837The UnixWare assembler, and probably other AT&T derived ix86 Unix
12838assemblers, generate floating point instructions with reversed source
12839and destination registers in certain cases.  Unfortunately, gcc and
12840possibly many other programs use this reversed syntax, so we're stuck
12841with it.
12842
12843   For example
12844
12845             fsub %st,%st(3)
12846results in '%st(3)' being updated to '%st - %st(3)' rather than the
12847expected '%st(3) - %st'.  This happens with all the non-commutative
12848arithmetic floating point operations with two register operands where
12849the source register is '%st' and the destination register is '%st(i)'.
12850
12851
12852File: as.info,  Node: i386-Notes,  Prev: i386-Bugs,  Up: i386-Dependent
12853
128549.16.18 Notes
12855-------------
12856
12857There is some trickery concerning the 'mul' and 'imul' instructions that
12858deserves mention.  The 16-, 32-, 64- and 128-bit expanding multiplies
12859(base opcode '0xf6'; extension 4 for 'mul' and 5 for 'imul') can be
12860output only in the one operand form.  Thus, 'imul %ebx, %eax' does _not_
12861select the expanding multiply; the expanding multiply would clobber the
12862'%edx' register, and this would confuse 'gcc' output.  Use 'imul %ebx'
12863to get the 64-bit product in '%edx:%eax'.
12864
12865   We have added a two operand form of 'imul' when the first operand is
12866an immediate mode expression and the second operand is a register.  This
12867is just a shorthand, so that, multiplying '%eax' by 69, for example, can
12868be done with 'imul $69, %eax' rather than 'imul $69, %eax, %eax'.
12869
12870
12871File: as.info,  Node: IA-64-Dependent,  Next: IP2K-Dependent,  Prev: i386-Dependent,  Up: Machine Dependencies
12872
128739.17 IA-64 Dependent Features
12874=============================
12875
12876* Menu:
12877
12878* IA-64 Options::              Options
12879* IA-64 Syntax::               Syntax
12880* IA-64 Opcodes::              Opcodes
12881
12882
12883File: as.info,  Node: IA-64 Options,  Next: IA-64 Syntax,  Up: IA-64-Dependent
12884
128859.17.1 Options
12886--------------
12887
12888'-mconstant-gp'
12889     This option instructs the assembler to mark the resulting object
12890     file as using the "constant GP" model.  With this model, it is
12891     assumed that the entire program uses a single global pointer (GP)
12892     value.  Note that this option does not in any fashion affect the
12893     machine code emitted by the assembler.  All it does is turn on the
12894     EF_IA_64_CONS_GP flag in the ELF file header.
12895
12896'-mauto-pic'
12897     This option instructs the assembler to mark the resulting object
12898     file as using the "constant GP without function descriptor" data
12899     model.  This model is like the "constant GP" model, except that it
12900     additionally does away with function descriptors.  What this means
12901     is that the address of a function refers directly to the function's
12902     code entry-point.  Normally, such an address would refer to a
12903     function descriptor, which contains both the code entry-point and
12904     the GP-value needed by the function.  Note that this option does
12905     not in any fashion affect the machine code emitted by the
12906     assembler.  All it does is turn on the EF_IA_64_NOFUNCDESC_CONS_GP
12907     flag in the ELF file header.
12908
12909'-milp32'
12910'-milp64'
12911'-mlp64'
12912'-mp64'
12913     These options select the data model.  The assembler defaults to
12914     '-mlp64' (LP64 data model).
12915
12916'-mle'
12917'-mbe'
12918     These options select the byte order.  The '-mle' option selects
12919     little-endian byte order (default) and '-mbe' selects big-endian
12920     byte order.  Note that IA-64 machine code always uses little-endian
12921     byte order.
12922
12923'-mtune=itanium1'
12924'-mtune=itanium2'
12925     Tune for a particular IA-64 CPU, ITANIUM1 or ITANIUM2.  The default
12926     is ITANIUM2.
12927
12928'-munwind-check=warning'
12929'-munwind-check=error'
12930     These options control what the assembler will do when performing
12931     consistency checks on unwind directives.  '-munwind-check=warning'
12932     will make the assembler issue a warning when an unwind directive
12933     check fails.  This is the default.  '-munwind-check=error' will
12934     make the assembler issue an error when an unwind directive check
12935     fails.
12936
12937'-mhint.b=ok'
12938'-mhint.b=warning'
12939'-mhint.b=error'
12940     These options control what the assembler will do when the 'hint.b'
12941     instruction is used.  '-mhint.b=ok' will make the assembler accept
12942     'hint.b'.  '-mint.b=warning' will make the assembler issue a
12943     warning when 'hint.b' is used.  '-mhint.b=error' will make the
12944     assembler treat 'hint.b' as an error, which is the default.
12945
12946'-x'
12947'-xexplicit'
12948     These options turn on dependency violation checking.
12949
12950'-xauto'
12951     This option instructs the assembler to automatically insert stop
12952     bits where necessary to remove dependency violations.  This is the
12953     default mode.
12954
12955'-xnone'
12956     This option turns off dependency violation checking.
12957
12958'-xdebug'
12959     This turns on debug output intended to help tracking down bugs in
12960     the dependency violation checker.
12961
12962'-xdebugn'
12963     This is a shortcut for -xnone -xdebug.
12964
12965'-xdebugx'
12966     This is a shortcut for -xexplicit -xdebug.
12967
12968
12969File: as.info,  Node: IA-64 Syntax,  Next: IA-64 Opcodes,  Prev: IA-64 Options,  Up: IA-64-Dependent
12970
129719.17.2 Syntax
12972-------------
12973
12974The assembler syntax closely follows the IA-64 Assembly Language
12975Reference Guide.
12976
12977* Menu:
12978
12979* IA-64-Chars::                Special Characters
12980* IA-64-Regs::                 Register Names
12981* IA-64-Bits::                 Bit Names
12982* IA-64-Relocs::               Relocations
12983
12984
12985File: as.info,  Node: IA-64-Chars,  Next: IA-64-Regs,  Up: IA-64 Syntax
12986
129879.17.2.1 Special Characters
12988...........................
12989
12990'//' is the line comment token.
12991
12992   ';' can be used instead of a newline to separate statements.
12993
12994
12995File: as.info,  Node: IA-64-Regs,  Next: IA-64-Bits,  Prev: IA-64-Chars,  Up: IA-64 Syntax
12996
129979.17.2.2 Register Names
12998.......................
12999
13000The 128 integer registers are referred to as 'rN'.  The 128
13001floating-point registers are referred to as 'fN'.  The 128 application
13002registers are referred to as 'arN'.  The 128 control registers are
13003referred to as 'crN'.  The 64 one-bit predicate registers are referred
13004to as 'pN'.  The 8 branch registers are referred to as 'bN'.  In
13005addition, the assembler defines a number of aliases: 'gp' ('r1'), 'sp'
13006('r12'), 'rp' ('b0'), 'ret0' ('r8'), 'ret1' ('r9'), 'ret2' ('r10'),
13007'ret3' ('r9'), 'fargN' ('f8+N'), and 'fretN' ('f8+N').
13008
13009   For convenience, the assembler also defines aliases for all named
13010application and control registers.  For example, 'ar.bsp' refers to the
13011register backing store pointer ('ar17').  Similarly, 'cr.eoi' refers to
13012the end-of-interrupt register ('cr67').
13013
13014
13015File: as.info,  Node: IA-64-Bits,  Next: IA-64-Relocs,  Prev: IA-64-Regs,  Up: IA-64 Syntax
13016
130179.17.2.3 IA-64 Processor-Status-Register (PSR) Bit Names
13018........................................................
13019
13020The assembler defines bit masks for each of the bits in the IA-64
13021processor status register.  For example, 'psr.ic' corresponds to a value
13022of 0x2000.  These masks are primarily intended for use with the
13023'ssm'/'sum' and 'rsm'/'rum' instructions, but they can be used anywhere
13024else where an integer constant is expected.
13025
13026
13027File: as.info,  Node: IA-64-Relocs,  Prev: IA-64-Bits,  Up: IA-64 Syntax
13028
130299.17.2.4 Relocations
13030....................
13031
13032In addition to the standard IA-64 relocations, the following relocations
13033are implemented by 'as':
13034
13035'@slotcount(V)'
13036     Convert the address offset V into a slot count.  This pseudo
13037     function is available only on VMS. The expression V must be known
13038     at assembly time: it can't reference undefined symbols or symbols
13039     in different sections.
13040
13041
13042File: as.info,  Node: IA-64 Opcodes,  Prev: IA-64 Syntax,  Up: IA-64-Dependent
13043
130449.17.3 Opcodes
13045--------------
13046
13047For detailed information on the IA-64 machine instruction set, see the
13048IA-64 Architecture Handbook
13049(http://developer.intel.com/design/itanium/arch_spec.htm).
13050
13051
13052File: as.info,  Node: IP2K-Dependent,  Next: LM32-Dependent,  Prev: IA-64-Dependent,  Up: Machine Dependencies
13053
130549.18 IP2K Dependent Features
13055============================
13056
13057* Menu:
13058
13059* IP2K-Opts::                   IP2K Options
13060* IP2K-Syntax::                 IP2K Syntax
13061
13062
13063File: as.info,  Node: IP2K-Opts,  Next: IP2K-Syntax,  Up: IP2K-Dependent
13064
130659.18.1 IP2K Options
13066-------------------
13067
13068The Ubicom IP2K version of 'as' has a few machine dependent options:
13069
13070'-mip2022ext'
13071     'as' can assemble the extended IP2022 instructions, but it will
13072     only do so if this is specifically allowed via this command line
13073     option.
13074
13075'-mip2022'
13076     This option restores the assembler's default behaviour of not
13077     permitting the extended IP2022 instructions to be assembled.
13078
13079
13080File: as.info,  Node: IP2K-Syntax,  Prev: IP2K-Opts,  Up: IP2K-Dependent
13081
130829.18.2 IP2K Syntax
13083------------------
13084
13085* Menu:
13086
13087* IP2K-Chars::                Special Characters
13088
13089
13090File: as.info,  Node: IP2K-Chars,  Up: IP2K-Syntax
13091
130929.18.2.1 Special Characters
13093...........................
13094
13095The presence of a ';' on a line indicates the start of a comment that
13096extends to the end of the current line.
13097
13098   If a '#' appears as the first character of a line, the whole line is
13099treated as a comment, but in this case the line can also be a logical
13100line number directive (*note Comments::) or a preprocessor control
13101command (*note Preprocessing::).
13102
13103   The IP2K assembler does not currently support a line separator
13104character.
13105
13106
13107File: as.info,  Node: LM32-Dependent,  Next: M32C-Dependent,  Prev: IP2K-Dependent,  Up: Machine Dependencies
13108
131099.19 LM32 Dependent Features
13110============================
13111
13112* Menu:
13113
13114* LM32 Options::              Options
13115* LM32 Syntax::               Syntax
13116* LM32 Opcodes::              Opcodes
13117
13118
13119File: as.info,  Node: LM32 Options,  Next: LM32 Syntax,  Up: LM32-Dependent
13120
131219.19.1 Options
13122--------------
13123
13124'-mmultiply-enabled'
13125     Enable multiply instructions.
13126
13127'-mdivide-enabled'
13128     Enable divide instructions.
13129
13130'-mbarrel-shift-enabled'
13131     Enable barrel-shift instructions.
13132
13133'-msign-extend-enabled'
13134     Enable sign extend instructions.
13135
13136'-muser-enabled'
13137     Enable user defined instructions.
13138
13139'-micache-enabled'
13140     Enable instruction cache related CSRs.
13141
13142'-mdcache-enabled'
13143     Enable data cache related CSRs.
13144
13145'-mbreak-enabled'
13146     Enable break instructions.
13147
13148'-mall-enabled'
13149     Enable all instructions and CSRs.
13150
13151
13152File: as.info,  Node: LM32 Syntax,  Next: LM32 Opcodes,  Prev: LM32 Options,  Up: LM32-Dependent
13153
131549.19.2 Syntax
13155-------------
13156
13157* Menu:
13158
13159* LM32-Regs::                 Register Names
13160* LM32-Modifiers::            Relocatable Expression Modifiers
13161* LM32-Chars::                Special Characters
13162
13163
13164File: as.info,  Node: LM32-Regs,  Next: LM32-Modifiers,  Up: LM32 Syntax
13165
131669.19.2.1 Register Names
13167.......................
13168
13169LM32 has 32 x 32-bit general purpose registers 'r0', 'r1', ...  'r31'.
13170
13171   The following aliases are defined: 'gp' - 'r26', 'fp' - 'r27', 'sp' -
13172'r28', 'ra' - 'r29', 'ea' - 'r30', 'ba' - 'r31'.
13173
13174   LM32 has the following Control and Status Registers (CSRs).
13175
13176'IE'
13177     Interrupt enable.
13178'IM'
13179     Interrupt mask.
13180'IP'
13181     Interrupt pending.
13182'ICC'
13183     Instruction cache control.
13184'DCC'
13185     Data cache control.
13186'CC'
13187     Cycle counter.
13188'CFG'
13189     Configuration.
13190'EBA'
13191     Exception base address.
13192'DC'
13193     Debug control.
13194'DEBA'
13195     Debug exception base address.
13196'JTX'
13197     JTAG transmit.
13198'JRX'
13199     JTAG receive.
13200'BP0'
13201     Breakpoint 0.
13202'BP1'
13203     Breakpoint 1.
13204'BP2'
13205     Breakpoint 2.
13206'BP3'
13207     Breakpoint 3.
13208'WP0'
13209     Watchpoint 0.
13210'WP1'
13211     Watchpoint 1.
13212'WP2'
13213     Watchpoint 2.
13214'WP3'
13215     Watchpoint 3.
13216
13217
13218File: as.info,  Node: LM32-Modifiers,  Next: LM32-Chars,  Prev: LM32-Regs,  Up: LM32 Syntax
13219
132209.19.2.2 Relocatable Expression Modifiers
13221.........................................
13222
13223The assembler supports several modifiers when using relocatable
13224addresses in LM32 instruction operands.  The general syntax is the
13225following:
13226
13227     modifier(relocatable-expression)
13228
13229'lo'
13230
13231     This modifier allows you to use bits 0 through 15 of an address
13232     expression as 16 bit relocatable expression.
13233
13234'hi'
13235
13236     This modifier allows you to use bits 16 through 23 of an address
13237     expression as 16 bit relocatable expression.
13238
13239     For example
13240
13241          ori  r4, r4, lo(sym+10)
13242          orhi r4, r4, hi(sym+10)
13243
13244'gp'
13245
13246     This modified creates a 16-bit relocatable expression that is the
13247     offset of the symbol from the global pointer.
13248
13249          mva r4, gp(sym)
13250
13251'got'
13252
13253     This modifier places a symbol in the GOT and creates a 16-bit
13254     relocatable expression that is the offset into the GOT of this
13255     symbol.
13256
13257          lw r4, (gp+got(sym))
13258
13259'gotofflo16'
13260
13261     This modifier allows you to use the bits 0 through 15 of an address
13262     which is an offset from the GOT.
13263
13264'gotoffhi16'
13265
13266     This modifier allows you to use the bits 16 through 31 of an
13267     address which is an offset from the GOT.
13268
13269          orhi r4, r4, gotoffhi16(lsym)
13270          addi r4, r4, gotofflo16(lsym)
13271
13272
13273File: as.info,  Node: LM32-Chars,  Prev: LM32-Modifiers,  Up: LM32 Syntax
13274
132759.19.2.3 Special Characters
13276...........................
13277
13278The presence of a '#' on a line indicates the start of a comment that
13279extends to the end of the current line.  Note that if a line starts with
13280a '#' character then it can also be a logical line number directive
13281(*note Comments::) or a preprocessor control command (*note
13282Preprocessing::).
13283
13284   A semicolon (';') can be used to separate multiple statements on the
13285same line.
13286
13287
13288File: as.info,  Node: LM32 Opcodes,  Prev: LM32 Syntax,  Up: LM32-Dependent
13289
132909.19.3 Opcodes
13291--------------
13292
13293For detailed information on the LM32 machine instruction set, see
13294<http://www.latticesemi.com/products/intellectualproperty/ipcores/mico32/>.
13295
13296   'as' implements all the standard LM32 opcodes.
13297
13298
13299File: as.info,  Node: M32C-Dependent,  Next: M32R-Dependent,  Prev: LM32-Dependent,  Up: Machine Dependencies
13300
133019.20 M32C Dependent Features
13302============================
13303
13304'as' can assemble code for several different members of the Renesas M32C
13305family.  Normally the default is to assemble code for the M16C
13306microprocessor.  The '-m32c' option may be used to change the default to
13307the M32C microprocessor.
13308
13309* Menu:
13310
13311* M32C-Opts::                   M32C Options
13312* M32C-Syntax::                 M32C Syntax
13313
13314
13315File: as.info,  Node: M32C-Opts,  Next: M32C-Syntax,  Up: M32C-Dependent
13316
133179.20.1 M32C Options
13318-------------------
13319
13320The Renesas M32C version of 'as' has these machine-dependent options:
13321
13322'-m32c'
13323     Assemble M32C instructions.
13324
13325'-m16c'
13326     Assemble M16C instructions (default).
13327
13328'-relax'
13329     Enable support for link-time relaxations.
13330
13331'-h-tick-hex'
13332     Support H'00 style hex constants in addition to 0x00 style.
13333
13334
13335File: as.info,  Node: M32C-Syntax,  Prev: M32C-Opts,  Up: M32C-Dependent
13336
133379.20.2 M32C Syntax
13338------------------
13339
13340* Menu:
13341
13342* M32C-Modifiers::              Symbolic Operand Modifiers
13343* M32C-Chars::                  Special Characters
13344
13345
13346File: as.info,  Node: M32C-Modifiers,  Next: M32C-Chars,  Up: M32C-Syntax
13347
133489.20.2.1 Symbolic Operand Modifiers
13349...................................
13350
13351The assembler supports several modifiers when using symbol addresses in
13352M32C instruction operands.  The general syntax is the following:
13353
13354     %modifier(symbol)
13355
13356'%dsp8'
13357'%dsp16'
13358
13359     These modifiers override the assembler's assumptions about how big
13360     a symbol's address is.  Normally, when it sees an operand like
13361     'sym[a0]' it assumes 'sym' may require the widest displacement
13362     field (16 bits for '-m16c', 24 bits for '-m32c').  These modifiers
13363     tell it to assume the address will fit in an 8 or 16 bit
13364     (respectively) unsigned displacement.  Note that, of course, if it
13365     doesn't actually fit you will get linker errors.  Example:
13366
13367          mov.w %dsp8(sym)[a0],r1
13368          mov.b #0,%dsp8(sym)[a0]
13369
13370'%hi8'
13371
13372     This modifier allows you to load bits 16 through 23 of a 24 bit
13373     address into an 8 bit register.  This is useful with, for example,
13374     the M16C 'smovf' instruction, which expects a 20 bit address in
13375     'r1h' and 'a0'.  Example:
13376
13377          mov.b #%hi8(sym),r1h
13378          mov.w #%lo16(sym),a0
13379          smovf.b
13380
13381'%lo16'
13382
13383     Likewise, this modifier allows you to load bits 0 through 15 of a
13384     24 bit address into a 16 bit register.
13385
13386'%hi16'
13387
13388     This modifier allows you to load bits 16 through 31 of a 32 bit
13389     address into a 16 bit register.  While the M32C family only has 24
13390     bits of address space, it does support addresses in pairs of 16 bit
13391     registers (like 'a1a0' for the 'lde' instruction).  This modifier
13392     is for loading the upper half in such cases.  Example:
13393
13394          mov.w #%hi16(sym),a1
13395          mov.w #%lo16(sym),a0
13396          ...
13397          lde.w [a1a0],r1
13398
13399
13400File: as.info,  Node: M32C-Chars,  Prev: M32C-Modifiers,  Up: M32C-Syntax
13401
134029.20.2.2 Special Characters
13403...........................
13404
13405The presence of a ';' character on a line indicates the start of a
13406comment that extends to the end of that line.
13407
13408   If a '#' appears as the first character of a line, the whole line is
13409treated as a comment, but in this case the line can also be a logical
13410line number directive (*note Comments::) or a preprocessor control
13411command (*note Preprocessing::).
13412
13413   The '|' character can be used to separate statements on the same
13414line.
13415
13416
13417File: as.info,  Node: M32R-Dependent,  Next: M68K-Dependent,  Prev: M32C-Dependent,  Up: Machine Dependencies
13418
134199.21 M32R Dependent Features
13420============================
13421
13422* Menu:
13423
13424* M32R-Opts::                   M32R Options
13425* M32R-Directives::             M32R Directives
13426* M32R-Warnings::               M32R Warnings
13427
13428
13429File: as.info,  Node: M32R-Opts,  Next: M32R-Directives,  Up: M32R-Dependent
13430
134319.21.1 M32R Options
13432-------------------
13433
13434The Renesas M32R version of 'as' has a few machine dependent options:
13435
13436'-m32rx'
13437     'as' can assemble code for several different members of the Renesas
13438     M32R family.  Normally the default is to assemble code for the M32R
13439     microprocessor.  This option may be used to change the default to
13440     the M32RX microprocessor, which adds some more instructions to the
13441     basic M32R instruction set, and some additional parameters to some
13442     of the original instructions.
13443
13444'-m32r2'
13445     This option changes the target processor to the M32R2
13446     microprocessor.
13447
13448'-m32r'
13449     This option can be used to restore the assembler's default
13450     behaviour of assembling for the M32R microprocessor.  This can be
13451     useful if the default has been changed by a previous command-line
13452     option.
13453
13454'-little'
13455     This option tells the assembler to produce little-endian code and
13456     data.  The default is dependent upon how the toolchain was
13457     configured.
13458
13459'-EL'
13460     This is a synonym for _-little_.
13461
13462'-big'
13463     This option tells the assembler to produce big-endian code and
13464     data.
13465
13466'-EB'
13467     This is a synonym for _-big_.
13468
13469'-KPIC'
13470     This option specifies that the output of the assembler should be
13471     marked as position-independent code (PIC).
13472
13473'-parallel'
13474     This option tells the assembler to attempts to combine two
13475     sequential instructions into a single, parallel instruction, where
13476     it is legal to do so.
13477
13478'-no-parallel'
13479     This option disables a previously enabled _-parallel_ option.
13480
13481'-no-bitinst'
13482     This option disables the support for the extended bit-field
13483     instructions provided by the M32R2.  If this support needs to be
13484     re-enabled the _-bitinst_ switch can be used to restore it.
13485
13486'-O'
13487     This option tells the assembler to attempt to optimize the
13488     instructions that it produces.  This includes filling delay slots
13489     and converting sequential instructions into parallel ones.  This
13490     option implies _-parallel_.
13491
13492'-warn-explicit-parallel-conflicts'
13493     Instructs 'as' to produce warning messages when questionable
13494     parallel instructions are encountered.  This option is enabled by
13495     default, but 'gcc' disables it when it invokes 'as' directly.
13496     Questionable instructions are those whose behaviour would be
13497     different if they were executed sequentially.  For example the code
13498     fragment 'mv r1, r2 || mv r3, r1' produces a different result from
13499     'mv r1, r2 \n mv r3, r1' since the former moves r1 into r3 and then
13500     r2 into r1, whereas the later moves r2 into r1 and r3.
13501
13502'-Wp'
13503     This is a shorter synonym for the
13504     _-warn-explicit-parallel-conflicts_ option.
13505
13506'-no-warn-explicit-parallel-conflicts'
13507     Instructs 'as' not to produce warning messages when questionable
13508     parallel instructions are encountered.
13509
13510'-Wnp'
13511     This is a shorter synonym for the
13512     _-no-warn-explicit-parallel-conflicts_ option.
13513
13514'-ignore-parallel-conflicts'
13515     This option tells the assembler's to stop checking parallel
13516     instructions for constraint violations.  This ability is provided
13517     for hardware vendors testing chip designs and should not be used
13518     under normal circumstances.
13519
13520'-no-ignore-parallel-conflicts'
13521     This option restores the assembler's default behaviour of checking
13522     parallel instructions to detect constraint violations.
13523
13524'-Ip'
13525     This is a shorter synonym for the _-ignore-parallel-conflicts_
13526     option.
13527
13528'-nIp'
13529     This is a shorter synonym for the _-no-ignore-parallel-conflicts_
13530     option.
13531
13532'-warn-unmatched-high'
13533     This option tells the assembler to produce a warning message if a
13534     '.high' pseudo op is encountered without a matching '.low' pseudo
13535     op.  The presence of such an unmatched pseudo op usually indicates
13536     a programming error.
13537
13538'-no-warn-unmatched-high'
13539     Disables a previously enabled _-warn-unmatched-high_ option.
13540
13541'-Wuh'
13542     This is a shorter synonym for the _-warn-unmatched-high_ option.
13543
13544'-Wnuh'
13545     This is a shorter synonym for the _-no-warn-unmatched-high_ option.
13546
13547
13548File: as.info,  Node: M32R-Directives,  Next: M32R-Warnings,  Prev: M32R-Opts,  Up: M32R-Dependent
13549
135509.21.2 M32R Directives
13551----------------------
13552
13553The Renesas M32R version of 'as' has a few architecture specific
13554directives:
13555
13556'low EXPRESSION'
13557     The 'low' directive computes the value of its expression and places
13558     the lower 16-bits of the result into the immediate-field of the
13559     instruction.  For example:
13560
13561             or3   r0, r0, #low(0x12345678) ; compute r0 = r0 | 0x5678
13562             add3, r0, r0, #low(fred)   ; compute r0 = r0 + low 16-bits of address of fred
13563
13564'high EXPRESSION'
13565     The 'high' directive computes the value of its expression and
13566     places the upper 16-bits of the result into the immediate-field of
13567     the instruction.  For example:
13568
13569             seth  r0, #high(0x12345678) ; compute r0 = 0x12340000
13570             seth, r0, #high(fred)       ; compute r0 = upper 16-bits of address of fred
13571
13572'shigh EXPRESSION'
13573     The 'shigh' directive is very similar to the 'high' directive.  It
13574     also computes the value of its expression and places the upper
13575     16-bits of the result into the immediate-field of the instruction.
13576     The difference is that 'shigh' also checks to see if the lower
13577     16-bits could be interpreted as a signed number, and if so it
13578     assumes that a borrow will occur from the upper-16 bits.  To
13579     compensate for this the 'shigh' directive pre-biases the upper 16
13580     bit value by adding one to it.  For example:
13581
13582     For example:
13583
13584             seth  r0, #shigh(0x12345678) ; compute r0 = 0x12340000
13585             seth  r0, #shigh(0x00008000) ; compute r0 = 0x00010000
13586
13587     In the second example the lower 16-bits are 0x8000.  If these are
13588     treated as a signed value and sign extended to 32-bits then the
13589     value becomes 0xffff8000.  If this value is then added to
13590     0x00010000 then the result is 0x00008000.
13591
13592     This behaviour is to allow for the different semantics of the 'or3'
13593     and 'add3' instructions.  The 'or3' instruction treats its 16-bit
13594     immediate argument as unsigned whereas the 'add3' treats its 16-bit
13595     immediate as a signed value.  So for example:
13596
13597             seth  r0, #shigh(0x00008000)
13598             add3  r0, r0, #low(0x00008000)
13599
13600     Produces the correct result in r0, whereas:
13601
13602             seth  r0, #shigh(0x00008000)
13603             or3   r0, r0, #low(0x00008000)
13604
13605     Stores 0xffff8000 into r0.
13606
13607     Note - the 'shigh' directive does not know where in the assembly
13608     source code the lower 16-bits of the value are going set, so it
13609     cannot check to make sure that an 'or3' instruction is being used
13610     rather than an 'add3' instruction.  It is up to the programmer to
13611     make sure that correct directives are used.
13612
13613'.m32r'
13614     The directive performs a similar thing as the _-m32r_ command line
13615     option.  It tells the assembler to only accept M32R instructions
13616     from now on.  An instructions from later M32R architectures are
13617     refused.
13618
13619'.m32rx'
13620     The directive performs a similar thing as the _-m32rx_ command line
13621     option.  It tells the assembler to start accepting the extra
13622     instructions in the M32RX ISA as well as the ordinary M32R ISA.
13623
13624'.m32r2'
13625     The directive performs a similar thing as the _-m32r2_ command line
13626     option.  It tells the assembler to start accepting the extra
13627     instructions in the M32R2 ISA as well as the ordinary M32R ISA.
13628
13629'.little'
13630     The directive performs a similar thing as the _-little_ command
13631     line option.  It tells the assembler to start producing
13632     little-endian code and data.  This option should be used with care
13633     as producing mixed-endian binary files is fraught with danger.
13634
13635'.big'
13636     The directive performs a similar thing as the _-big_ command line
13637     option.  It tells the assembler to start producing big-endian code
13638     and data.  This option should be used with care as producing
13639     mixed-endian binary files is fraught with danger.
13640
13641
13642File: as.info,  Node: M32R-Warnings,  Prev: M32R-Directives,  Up: M32R-Dependent
13643
136449.21.3 M32R Warnings
13645--------------------
13646
13647There are several warning and error messages that can be produced by
13648'as' which are specific to the M32R:
13649
13650'output of 1st instruction is the same as an input to 2nd instruction - is this intentional ?'
13651     This message is only produced if warnings for explicit parallel
13652     conflicts have been enabled.  It indicates that the assembler has
13653     encountered a parallel instruction in which the destination
13654     register of the left hand instruction is used as an input register
13655     in the right hand instruction.  For example in this code fragment
13656     'mv r1, r2 || neg r3, r1' register r1 is the destination of the
13657     move instruction and the input to the neg instruction.
13658
13659'output of 2nd instruction is the same as an input to 1st instruction - is this intentional ?'
13660     This message is only produced if warnings for explicit parallel
13661     conflicts have been enabled.  It indicates that the assembler has
13662     encountered a parallel instruction in which the destination
13663     register of the right hand instruction is used as an input register
13664     in the left hand instruction.  For example in this code fragment
13665     'mv r1, r2 || neg r2, r3' register r2 is the destination of the neg
13666     instruction and the input to the move instruction.
13667
13668'instruction '...' is for the M32RX only'
13669     This message is produced when the assembler encounters an
13670     instruction which is only supported by the M32Rx processor, and the
13671     '-m32rx' command-line flag has not been specified to allow assembly
13672     of such instructions.
13673
13674'unknown instruction '...''
13675     This message is produced when the assembler encounters an
13676     instruction which it does not recognize.
13677
13678'only the NOP instruction can be issued in parallel on the m32r'
13679     This message is produced when the assembler encounters a parallel
13680     instruction which does not involve a NOP instruction and the
13681     '-m32rx' command-line flag has not been specified.  Only the M32Rx
13682     processor is able to execute two instructions in parallel.
13683
13684'instruction '...' cannot be executed in parallel.'
13685     This message is produced when the assembler encounters a parallel
13686     instruction which is made up of one or two instructions which
13687     cannot be executed in parallel.
13688
13689'Instructions share the same execution pipeline'
13690     This message is produced when the assembler encounters a parallel
13691     instruction whose components both use the same execution pipeline.
13692
13693'Instructions write to the same destination register.'
13694     This message is produced when the assembler encounters a parallel
13695     instruction where both components attempt to modify the same
13696     register.  For example these code fragments will produce this
13697     message: 'mv r1, r2 || neg r1, r3' 'jl r0 || mv r14, r1' 'st r2,
13698     @-r1 || mv r1, r3' 'mv r1, r2 || ld r0, @r1+' 'cmp r1, r2 || addx
13699     r3, r4' (Both write to the condition bit)
13700
13701
13702File: as.info,  Node: M68K-Dependent,  Next: M68HC11-Dependent,  Prev: M32R-Dependent,  Up: Machine Dependencies
13703
137049.22 M680x0 Dependent Features
13705==============================
13706
13707* Menu:
13708
13709* M68K-Opts::                   M680x0 Options
13710* M68K-Syntax::                 Syntax
13711* M68K-Moto-Syntax::            Motorola Syntax
13712* M68K-Float::                  Floating Point
13713* M68K-Directives::             680x0 Machine Directives
13714* M68K-opcodes::                Opcodes
13715
13716
13717File: as.info,  Node: M68K-Opts,  Next: M68K-Syntax,  Up: M68K-Dependent
13718
137199.22.1 M680x0 Options
13720---------------------
13721
13722The Motorola 680x0 version of 'as' has a few machine dependent options:
13723
13724'-march=ARCHITECTURE'
13725     This option specifies a target architecture.  The following
13726     architectures are recognized: '68000', '68010', '68020', '68030',
13727     '68040', '68060', 'cpu32', 'isaa', 'isaaplus', 'isab', 'isac' and
13728     'cfv4e'.
13729
13730'-mcpu=CPU'
13731     This option specifies a target cpu.  When used in conjunction with
13732     the '-march' option, the cpu must be within the specified
13733     architecture.  Also, the generic features of the architecture are
13734     used for instruction generation, rather than those of the specific
13735     chip.
13736
13737'-m[no-]68851'
13738'-m[no-]68881'
13739'-m[no-]div'
13740'-m[no-]usp'
13741'-m[no-]float'
13742'-m[no-]mac'
13743'-m[no-]emac'
13744
13745     Enable or disable various architecture specific features.  If a
13746     chip or architecture by default supports an option (for instance
13747     '-march=isaaplus' includes the '-mdiv' option), explicitly
13748     disabling the option will override the default.
13749
13750'-l'
13751     You can use the '-l' option to shorten the size of references to
13752     undefined symbols.  If you do not use the '-l' option, references
13753     to undefined symbols are wide enough for a full 'long' (32 bits).
13754     (Since 'as' cannot know where these symbols end up, 'as' can only
13755     allocate space for the linker to fill in later.  Since 'as' does
13756     not know how far away these symbols are, it allocates as much space
13757     as it can.)  If you use this option, the references are only one
13758     word wide (16 bits).  This may be useful if you want the object
13759     file to be as small as possible, and you know that the relevant
13760     symbols are always less than 17 bits away.
13761
13762'--register-prefix-optional'
13763     For some configurations, especially those where the compiler
13764     normally does not prepend an underscore to the names of user
13765     variables, the assembler requires a '%' before any use of a
13766     register name.  This is intended to let the assembler distinguish
13767     between C variables and functions named 'a0' through 'a7', and so
13768     on.  The '%' is always accepted, but is not required for certain
13769     configurations, notably 'sun3'.  The '--register-prefix-optional'
13770     option may be used to permit omitting the '%' even for
13771     configurations for which it is normally required.  If this is done,
13772     it will generally be impossible to refer to C variables and
13773     functions with the same names as register names.
13774
13775'--bitwise-or'
13776     Normally the character '|' is treated as a comment character, which
13777     means that it can not be used in expressions.  The '--bitwise-or'
13778     option turns '|' into a normal character.  In this mode, you must
13779     either use C style comments, or start comments with a '#' character
13780     at the beginning of a line.
13781
13782'--base-size-default-16 --base-size-default-32'
13783     If you use an addressing mode with a base register without
13784     specifying the size, 'as' will normally use the full 32 bit value.
13785     For example, the addressing mode '%a0@(%d0)' is equivalent to
13786     '%a0@(%d0:l)'.  You may use the '--base-size-default-16' option to
13787     tell 'as' to default to using the 16 bit value.  In this case,
13788     '%a0@(%d0)' is equivalent to '%a0@(%d0:w)'.  You may use the
13789     '--base-size-default-32' option to restore the default behaviour.
13790
13791'--disp-size-default-16 --disp-size-default-32'
13792     If you use an addressing mode with a displacement, and the value of
13793     the displacement is not known, 'as' will normally assume that the
13794     value is 32 bits.  For example, if the symbol 'disp' has not been
13795     defined, 'as' will assemble the addressing mode '%a0@(disp,%d0)' as
13796     though 'disp' is a 32 bit value.  You may use the
13797     '--disp-size-default-16' option to tell 'as' to instead assume that
13798     the displacement is 16 bits.  In this case, 'as' will assemble
13799     '%a0@(disp,%d0)' as though 'disp' is a 16 bit value.  You may use
13800     the '--disp-size-default-32' option to restore the default
13801     behaviour.
13802
13803'--pcrel'
13804     Always keep branches PC-relative.  In the M680x0 architecture all
13805     branches are defined as PC-relative.  However, on some processors
13806     they are limited to word displacements maximum.  When 'as' needs a
13807     long branch that is not available, it normally emits an absolute
13808     jump instead.  This option disables this substitution.  When this
13809     option is given and no long branches are available, only word
13810     branches will be emitted.  An error message will be generated if a
13811     word branch cannot reach its target.  This option has no effect on
13812     68020 and other processors that have long branches.  *note Branch
13813     Improvement: M68K-Branch.
13814
13815'-m68000'
13816     'as' can assemble code for several different members of the
13817     Motorola 680x0 family.  The default depends upon how 'as' was
13818     configured when it was built; normally, the default is to assemble
13819     code for the 68020 microprocessor.  The following options may be
13820     used to change the default.  These options control which
13821     instructions and addressing modes are permitted.  The members of
13822     the 680x0 family are very similar.  For detailed information about
13823     the differences, see the Motorola manuals.
13824
13825     '-m68000'
13826     '-m68ec000'
13827     '-m68hc000'
13828     '-m68hc001'
13829     '-m68008'
13830     '-m68302'
13831     '-m68306'
13832     '-m68307'
13833     '-m68322'
13834     '-m68356'
13835          Assemble for the 68000.  '-m68008', '-m68302', and so on are
13836          synonyms for '-m68000', since the chips are the same from the
13837          point of view of the assembler.
13838
13839     '-m68010'
13840          Assemble for the 68010.
13841
13842     '-m68020'
13843     '-m68ec020'
13844          Assemble for the 68020.  This is normally the default.
13845
13846     '-m68030'
13847     '-m68ec030'
13848          Assemble for the 68030.
13849
13850     '-m68040'
13851     '-m68ec040'
13852          Assemble for the 68040.
13853
13854     '-m68060'
13855     '-m68ec060'
13856          Assemble for the 68060.
13857
13858     '-mcpu32'
13859     '-m68330'
13860     '-m68331'
13861     '-m68332'
13862     '-m68333'
13863     '-m68334'
13864     '-m68336'
13865     '-m68340'
13866     '-m68341'
13867     '-m68349'
13868     '-m68360'
13869          Assemble for the CPU32 family of chips.
13870
13871     '-m5200'
13872     '-m5202'
13873     '-m5204'
13874     '-m5206'
13875     '-m5206e'
13876     '-m521x'
13877     '-m5249'
13878     '-m528x'
13879     '-m5307'
13880     '-m5407'
13881     '-m547x'
13882     '-m548x'
13883     '-mcfv4'
13884     '-mcfv4e'
13885          Assemble for the ColdFire family of chips.
13886
13887     '-m68881'
13888     '-m68882'
13889          Assemble 68881 floating point instructions.  This is the
13890          default for the 68020, 68030, and the CPU32.  The 68040 and
13891          68060 always support floating point instructions.
13892
13893     '-mno-68881'
13894          Do not assemble 68881 floating point instructions.  This is
13895          the default for 68000 and the 68010.  The 68040 and 68060
13896          always support floating point instructions, even if this
13897          option is used.
13898
13899     '-m68851'
13900          Assemble 68851 MMU instructions.  This is the default for the
13901          68020, 68030, and 68060.  The 68040 accepts a somewhat
13902          different set of MMU instructions; '-m68851' and '-m68040'
13903          should not be used together.
13904
13905     '-mno-68851'
13906          Do not assemble 68851 MMU instructions.  This is the default
13907          for the 68000, 68010, and the CPU32.  The 68040 accepts a
13908          somewhat different set of MMU instructions.
13909
13910
13911File: as.info,  Node: M68K-Syntax,  Next: M68K-Moto-Syntax,  Prev: M68K-Opts,  Up: M68K-Dependent
13912
139139.22.2 Syntax
13914-------------
13915
13916This syntax for the Motorola 680x0 was developed at MIT.
13917
13918   The 680x0 version of 'as' uses instructions names and syntax
13919compatible with the Sun assembler.  Intervening periods are ignored; for
13920example, 'movl' is equivalent to 'mov.l'.
13921
13922   In the following table APC stands for any of the address registers
13923('%a0' through '%a7'), the program counter ('%pc'), the zero-address
13924relative to the program counter ('%zpc'), a suppressed address register
13925('%za0' through '%za7'), or it may be omitted entirely.  The use of SIZE
13926means one of 'w' or 'l', and it may be omitted, along with the leading
13927colon, unless a scale is also specified.  The use of SCALE means one of
13928'1', '2', '4', or '8', and it may always be omitted along with the
13929leading colon.
13930
13931   The following addressing modes are understood:
13932"Immediate"
13933     '#NUMBER'
13934
13935"Data Register"
13936     '%d0' through '%d7'
13937
13938"Address Register"
13939     '%a0' through '%a7'
13940     '%a7' is also known as '%sp', i.e., the Stack Pointer.  '%a6' is
13941     also known as '%fp', the Frame Pointer.
13942
13943"Address Register Indirect"
13944     '%a0@' through '%a7@'
13945
13946"Address Register Postincrement"
13947     '%a0@+' through '%a7@+'
13948
13949"Address Register Predecrement"
13950     '%a0@-' through '%a7@-'
13951
13952"Indirect Plus Offset"
13953     'APC@(NUMBER)'
13954
13955"Index"
13956     'APC@(NUMBER,REGISTER:SIZE:SCALE)'
13957
13958     The NUMBER may be omitted.
13959
13960"Postindex"
13961     'APC@(NUMBER)@(ONUMBER,REGISTER:SIZE:SCALE)'
13962
13963     The ONUMBER or the REGISTER, but not both, may be omitted.
13964
13965"Preindex"
13966     'APC@(NUMBER,REGISTER:SIZE:SCALE)@(ONUMBER)'
13967
13968     The NUMBER may be omitted.  Omitting the REGISTER produces the
13969     Postindex addressing mode.
13970
13971"Absolute"
13972     'SYMBOL', or 'DIGITS', optionally followed by ':b', ':w', or ':l'.
13973
13974
13975File: as.info,  Node: M68K-Moto-Syntax,  Next: M68K-Float,  Prev: M68K-Syntax,  Up: M68K-Dependent
13976
139779.22.3 Motorola Syntax
13978----------------------
13979
13980The standard Motorola syntax for this chip differs from the syntax
13981already discussed (*note Syntax: M68K-Syntax.).  'as' can accept
13982Motorola syntax for operands, even if MIT syntax is used for other
13983operands in the same instruction.  The two kinds of syntax are fully
13984compatible.
13985
13986   In the following table APC stands for any of the address registers
13987('%a0' through '%a7'), the program counter ('%pc'), the zero-address
13988relative to the program counter ('%zpc'), or a suppressed address
13989register ('%za0' through '%za7').  The use of SIZE means one of 'w' or
13990'l', and it may always be omitted along with the leading dot.  The use
13991of SCALE means one of '1', '2', '4', or '8', and it may always be
13992omitted along with the leading asterisk.
13993
13994   The following additional addressing modes are understood:
13995
13996"Address Register Indirect"
13997     '(%a0)' through '(%a7)'
13998     '%a7' is also known as '%sp', i.e., the Stack Pointer.  '%a6' is
13999     also known as '%fp', the Frame Pointer.
14000
14001"Address Register Postincrement"
14002     '(%a0)+' through '(%a7)+'
14003
14004"Address Register Predecrement"
14005     '-(%a0)' through '-(%a7)'
14006
14007"Indirect Plus Offset"
14008     'NUMBER(%A0)' through 'NUMBER(%A7)', or 'NUMBER(%PC)'.
14009
14010     The NUMBER may also appear within the parentheses, as in
14011     '(NUMBER,%A0)'.  When used with the PC, the NUMBER may be omitted
14012     (with an address register, omitting the NUMBER produces Address
14013     Register Indirect mode).
14014
14015"Index"
14016     'NUMBER(APC,REGISTER.SIZE*SCALE)'
14017
14018     The NUMBER may be omitted, or it may appear within the parentheses.
14019     The APC may be omitted.  The REGISTER and the APC may appear in
14020     either order.  If both APC and REGISTER are address registers, and
14021     the SIZE and SCALE are omitted, then the first register is taken as
14022     the base register, and the second as the index register.
14023
14024"Postindex"
14025     '([NUMBER,APC],REGISTER.SIZE*SCALE,ONUMBER)'
14026
14027     The ONUMBER, or the REGISTER, or both, may be omitted.  Either the
14028     NUMBER or the APC may be omitted, but not both.
14029
14030"Preindex"
14031     '([NUMBER,APC,REGISTER.SIZE*SCALE],ONUMBER)'
14032
14033     The NUMBER, or the APC, or the REGISTER, or any two of them, may be
14034     omitted.  The ONUMBER may be omitted.  The REGISTER and the APC may
14035     appear in either order.  If both APC and REGISTER are address
14036     registers, and the SIZE and SCALE are omitted, then the first
14037     register is taken as the base register, and the second as the index
14038     register.
14039
14040
14041File: as.info,  Node: M68K-Float,  Next: M68K-Directives,  Prev: M68K-Moto-Syntax,  Up: M68K-Dependent
14042
140439.22.4 Floating Point
14044---------------------
14045
14046Packed decimal (P) format floating literals are not supported.  Feel
14047free to add the code!
14048
14049   The floating point formats generated by directives are these.
14050
14051'.float'
14052     'Single' precision floating point constants.
14053
14054'.double'
14055     'Double' precision floating point constants.
14056
14057'.extend'
14058'.ldouble'
14059     'Extended' precision ('long double') floating point constants.
14060
14061
14062File: as.info,  Node: M68K-Directives,  Next: M68K-opcodes,  Prev: M68K-Float,  Up: M68K-Dependent
14063
140649.22.5 680x0 Machine Directives
14065-------------------------------
14066
14067In order to be compatible with the Sun assembler the 680x0 assembler
14068understands the following directives.
14069
14070'.data1'
14071     This directive is identical to a '.data 1' directive.
14072
14073'.data2'
14074     This directive is identical to a '.data 2' directive.
14075
14076'.even'
14077     This directive is a special case of the '.align' directive; it
14078     aligns the output to an even byte boundary.
14079
14080'.skip'
14081     This directive is identical to a '.space' directive.
14082
14083'.arch NAME'
14084     Select the target architecture and extension features.  Valid
14085     values for NAME are the same as for the '-march' command-line
14086     option.  This directive cannot be specified after any instructions
14087     have been assembled.  If it is given multiple times, or in
14088     conjunction with the '-march' option, all uses must be for the same
14089     architecture and extension set.
14090
14091'.cpu NAME'
14092     Select the target cpu.  Valid values for NAME are the same as for
14093     the '-mcpu' command-line option.  This directive cannot be
14094     specified after any instructions have been assembled.  If it is
14095     given multiple times, or in conjunction with the '-mopt' option,
14096     all uses must be for the same cpu.
14097
14098
14099File: as.info,  Node: M68K-opcodes,  Prev: M68K-Directives,  Up: M68K-Dependent
14100
141019.22.6 Opcodes
14102--------------
14103
14104* Menu:
14105
14106* M68K-Branch::                 Branch Improvement
14107* M68K-Chars::                  Special Characters
14108
14109
14110File: as.info,  Node: M68K-Branch,  Next: M68K-Chars,  Up: M68K-opcodes
14111
141129.22.6.1 Branch Improvement
14113...........................
14114
14115Certain pseudo opcodes are permitted for branch instructions.  They
14116expand to the shortest branch instruction that reach the target.
14117Generally these mnemonics are made by substituting 'j' for 'b' at the
14118start of a Motorola mnemonic.
14119
14120   The following table summarizes the pseudo-operations.  A '*' flags
14121cases that are more fully described after the table:
14122
14123               Displacement
14124               +------------------------------------------------------------
14125               |                68020           68000/10, not PC-relative OK
14126     Pseudo-Op |BYTE    WORD    LONG            ABSOLUTE LONG JUMP    **
14127               +------------------------------------------------------------
14128          jbsr |bsrs    bsrw    bsrl            jsr
14129           jra |bras    braw    bral            jmp
14130     *     jXX |bXXs    bXXw    bXXl            bNXs;jmp
14131     *    dbXX | N/A    dbXXw   dbXX;bras;bral  dbXX;bras;jmp
14132          fjXX | N/A    fbXXw   fbXXl            N/A
14133
14134     XX: condition
14135     NX: negative of condition XX
14136
14137                    '*'--see full description below
14138         '**'--this expansion mode is disallowed by '--pcrel'
14139
14140'jbsr'
14141'jra'
14142     These are the simplest jump pseudo-operations; they always map to
14143     one particular machine instruction, depending on the displacement
14144     to the branch target.  This instruction will be a byte or word
14145     branch is that is sufficient.  Otherwise, a long branch will be
14146     emitted if available.  If no long branches are available and the
14147     '--pcrel' option is not given, an absolute long jump will be
14148     emitted instead.  If no long branches are available, the '--pcrel'
14149     option is given, and a word branch cannot reach the target, an
14150     error message is generated.
14151
14152     In addition to standard branch operands, 'as' allows these
14153     pseudo-operations to have all operands that are allowed for jsr and
14154     jmp, substituting these instructions if the operand given is not
14155     valid for a branch instruction.
14156
14157'jXX'
14158     Here, 'jXX' stands for an entire family of pseudo-operations, where
14159     XX is a conditional branch or condition-code test.  The full list
14160     of pseudo-ops in this family is:
14161           jhi   jls   jcc   jcs   jne   jeq   jvc
14162           jvs   jpl   jmi   jge   jlt   jgt   jle
14163
14164     Usually, each of these pseudo-operations expands to a single branch
14165     instruction.  However, if a word branch is not sufficient, no long
14166     branches are available, and the '--pcrel' option is not given, 'as'
14167     issues a longer code fragment in terms of NX, the opposite
14168     condition to XX.  For example, under these conditions:
14169              jXX foo
14170     gives
14171               bNXs oof
14172               jmp foo
14173           oof:
14174
14175'dbXX'
14176     The full family of pseudo-operations covered here is
14177           dbhi   dbls   dbcc   dbcs   dbne   dbeq   dbvc
14178           dbvs   dbpl   dbmi   dbge   dblt   dbgt   dble
14179           dbf    dbra   dbt
14180
14181     Motorola 'dbXX' instructions allow word displacements only.  When a
14182     word displacement is sufficient, each of these pseudo-operations
14183     expands to the corresponding Motorola instruction.  When a word
14184     displacement is not sufficient and long branches are available,
14185     when the source reads 'dbXX foo', 'as' emits
14186               dbXX oo1
14187               bras oo2
14188           oo1:bral foo
14189           oo2:
14190
14191     If, however, long branches are not available and the '--pcrel'
14192     option is not given, 'as' emits
14193               dbXX oo1
14194               bras oo2
14195           oo1:jmp foo
14196           oo2:
14197
14198'fjXX'
14199     This family includes
14200           fjne   fjeq   fjge   fjlt   fjgt   fjle   fjf
14201           fjt    fjgl   fjgle  fjnge  fjngl  fjngle fjngt
14202           fjnle  fjnlt  fjoge  fjogl  fjogt  fjole  fjolt
14203           fjor   fjseq  fjsf   fjsne  fjst   fjueq  fjuge
14204           fjugt  fjule  fjult  fjun
14205
14206     Each of these pseudo-operations always expands to a single Motorola
14207     coprocessor branch instruction, word or long.  All Motorola
14208     coprocessor branch instructions allow both word and long
14209     displacements.
14210
14211
14212File: as.info,  Node: M68K-Chars,  Prev: M68K-Branch,  Up: M68K-opcodes
14213
142149.22.6.2 Special Characters
14215...........................
14216
14217Line comments are introduced by the '|' character appearing anywhere on
14218a line, unless the '--bitwise-or' command-line option has been
14219specified.
14220
14221   An asterisk ('*') as the first character on a line marks the start of
14222a line comment as well.
14223
14224   A hash character ('#') as the first character on a line also marks
14225the start of a line comment, but in this case it could also be a logical
14226line number directive (*note Comments::) or a preprocessor control
14227command (*note Preprocessing::).  If the hash character appears
14228elsewhere on a line it is used to introduce an immediate value.  (This
14229is for compatibility with Sun's assembler).
14230
14231   Multiple statements on the same line can appear if they are separated
14232by the ';' character.
14233
14234
14235File: as.info,  Node: M68HC11-Dependent,  Next: S12Z-Dependent,  Prev: M68K-Dependent,  Up: Machine Dependencies
14236
142379.23 M68HC11 and M68HC12 Dependent Features
14238===========================================
14239
14240* Menu:
14241
14242* M68HC11-Opts::                   M68HC11 and M68HC12 Options
14243* M68HC11-Syntax::                 Syntax
14244* M68HC11-Modifiers::              Symbolic Operand Modifiers
14245* M68HC11-Directives::             Assembler Directives
14246* M68HC11-Float::                  Floating Point
14247* M68HC11-opcodes::                Opcodes
14248
14249
14250File: as.info,  Node: M68HC11-Opts,  Next: M68HC11-Syntax,  Up: M68HC11-Dependent
14251
142529.23.1 M68HC11 and M68HC12 Options
14253----------------------------------
14254
14255The Motorola 68HC11 and 68HC12 version of 'as' have a few machine
14256dependent options.
14257
14258'-m68hc11'
14259     This option switches the assembler into the M68HC11 mode.  In this
14260     mode, the assembler only accepts 68HC11 operands and mnemonics.  It
14261     produces code for the 68HC11.
14262
14263'-m68hc12'
14264     This option switches the assembler into the M68HC12 mode.  In this
14265     mode, the assembler also accepts 68HC12 operands and mnemonics.  It
14266     produces code for the 68HC12.  A few 68HC11 instructions are
14267     replaced by some 68HC12 instructions as recommended by Motorola
14268     specifications.
14269
14270'-m68hcs12'
14271     This option switches the assembler into the M68HCS12 mode.  This
14272     mode is similar to '-m68hc12' but specifies to assemble for the
14273     68HCS12 series.  The only difference is on the assembling of the
14274     'movb' and 'movw' instruction when a PC-relative operand is used.
14275
14276'-mm9s12x'
14277     This option switches the assembler into the M9S12X mode.  This mode
14278     is similar to '-m68hc12' but specifies to assemble for the S12X
14279     series which is a superset of the HCS12.
14280
14281'-mm9s12xg'
14282     This option switches the assembler into the XGATE mode for the RISC
14283     co-processor featured on some S12X-family chips.
14284
14285'--xgate-ramoffset'
14286     This option instructs the linker to offset RAM addresses from S12X
14287     address space into XGATE address space.
14288
14289'-mshort'
14290     This option controls the ABI and indicates to use a 16-bit integer
14291     ABI. It has no effect on the assembled instructions.  This is the
14292     default.
14293
14294'-mlong'
14295     This option controls the ABI and indicates to use a 32-bit integer
14296     ABI.
14297
14298'-mshort-double'
14299     This option controls the ABI and indicates to use a 32-bit float
14300     ABI. This is the default.
14301
14302'-mlong-double'
14303     This option controls the ABI and indicates to use a 64-bit float
14304     ABI.
14305
14306'--strict-direct-mode'
14307     You can use the '--strict-direct-mode' option to disable the
14308     automatic translation of direct page mode addressing into extended
14309     mode when the instruction does not support direct mode.  For
14310     example, the 'clr' instruction does not support direct page mode
14311     addressing.  When it is used with the direct page mode, 'as' will
14312     ignore it and generate an absolute addressing.  This option
14313     prevents 'as' from doing this, and the wrong usage of the direct
14314     page mode will raise an error.
14315
14316'--short-branches'
14317     The '--short-branches' option turns off the translation of relative
14318     branches into absolute branches when the branch offset is out of
14319     range.  By default 'as' transforms the relative branch ('bsr',
14320     'bgt', 'bge', 'beq', 'bne', 'ble', 'blt', 'bhi', 'bcc', 'bls',
14321     'bcs', 'bmi', 'bvs', 'bvs', 'bra') into an absolute branch when the
14322     offset is out of the -128 ..  127 range.  In that case, the 'bsr'
14323     instruction is translated into a 'jsr', the 'bra' instruction is
14324     translated into a 'jmp' and the conditional branches instructions
14325     are inverted and followed by a 'jmp'.  This option disables these
14326     translations and 'as' will generate an error if a relative branch
14327     is out of range.  This option does not affect the optimization
14328     associated to the 'jbra', 'jbsr' and 'jbXX' pseudo opcodes.
14329
14330'--force-long-branches'
14331     The '--force-long-branches' option forces the translation of
14332     relative branches into absolute branches.  This option does not
14333     affect the optimization associated to the 'jbra', 'jbsr' and 'jbXX'
14334     pseudo opcodes.
14335
14336'--print-insn-syntax'
14337     You can use the '--print-insn-syntax' option to obtain the syntax
14338     description of the instruction when an error is detected.
14339
14340'--print-opcodes'
14341     The '--print-opcodes' option prints the list of all the
14342     instructions with their syntax.  The first item of each line
14343     represents the instruction name and the rest of the line indicates
14344     the possible operands for that instruction.  The list is printed in
14345     alphabetical order.  Once the list is printed 'as' exits.
14346
14347'--generate-example'
14348     The '--generate-example' option is similar to '--print-opcodes' but
14349     it generates an example for each instruction instead.
14350
14351
14352File: as.info,  Node: M68HC11-Syntax,  Next: M68HC11-Modifiers,  Prev: M68HC11-Opts,  Up: M68HC11-Dependent
14353
143549.23.2 Syntax
14355-------------
14356
14357In the M68HC11 syntax, the instruction name comes first and it may be
14358followed by one or several operands (up to three).  Operands are
14359separated by comma (',').  In the normal mode, 'as' will complain if too
14360many operands are specified for a given instruction.  In the MRI mode
14361(turned on with '-M' option), it will treat them as comments.  Example:
14362
14363     inx
14364     lda  #23
14365     bset 2,x #4
14366     brclr *bot #8 foo
14367
14368   The presence of a ';' character or a '!' character anywhere on a line
14369indicates the start of a comment that extends to the end of that line.
14370
14371   A '*' or a '#' character at the start of a line also introduces a
14372line comment, but these characters do not work elsewhere on the line.
14373If the first character of the line is a '#' then as well as starting a
14374comment, the line could also be logical line number directive (*note
14375Comments::) or a preprocessor control command (*note Preprocessing::).
14376
14377   The M68HC11 assembler does not currently support a line separator
14378character.
14379
14380   The following addressing modes are understood for 68HC11 and 68HC12:
14381"Immediate"
14382     '#NUMBER'
14383
14384"Address Register"
14385     'NUMBER,X', 'NUMBER,Y'
14386
14387     The NUMBER may be omitted in which case 0 is assumed.
14388
14389"Direct Addressing mode"
14390     '*SYMBOL', or '*DIGITS'
14391
14392"Absolute"
14393     'SYMBOL', or 'DIGITS'
14394
14395   The M68HC12 has other more complex addressing modes.  All of them are
14396supported and they are represented below:
14397
14398"Constant Offset Indexed Addressing Mode"
14399     'NUMBER,REG'
14400
14401     The NUMBER may be omitted in which case 0 is assumed.  The register
14402     can be either 'X', 'Y', 'SP' or 'PC'.  The assembler will use the
14403     smaller post-byte definition according to the constant value (5-bit
14404     constant offset, 9-bit constant offset or 16-bit constant offset).
14405     If the constant is not known by the assembler it will use the
14406     16-bit constant offset post-byte and the value will be resolved at
14407     link time.
14408
14409"Offset Indexed Indirect"
14410     '[NUMBER,REG]'
14411
14412     The register can be either 'X', 'Y', 'SP' or 'PC'.
14413
14414"Auto Pre-Increment/Pre-Decrement/Post-Increment/Post-Decrement"
14415     'NUMBER,-REG' 'NUMBER,+REG' 'NUMBER,REG-' 'NUMBER,REG+'
14416
14417     The number must be in the range '-8'..'+8' and must not be 0.  The
14418     register can be either 'X', 'Y', 'SP' or 'PC'.
14419
14420"Accumulator Offset"
14421     'ACC,REG'
14422
14423     The accumulator register can be either 'A', 'B' or 'D'.  The
14424     register can be either 'X', 'Y', 'SP' or 'PC'.
14425
14426"Accumulator D offset indexed-indirect"
14427     '[D,REG]'
14428
14429     The register can be either 'X', 'Y', 'SP' or 'PC'.
14430
14431   For example:
14432
14433     ldab 1024,sp
14434     ldd [10,x]
14435     orab 3,+x
14436     stab -2,y-
14437     ldx a,pc
14438     sty [d,sp]
14439
14440
14441File: as.info,  Node: M68HC11-Modifiers,  Next: M68HC11-Directives,  Prev: M68HC11-Syntax,  Up: M68HC11-Dependent
14442
144439.23.3 Symbolic Operand Modifiers
14444---------------------------------
14445
14446The assembler supports several modifiers when using symbol addresses in
1444768HC11 and 68HC12 instruction operands.  The general syntax is the
14448following:
14449
14450     %modifier(symbol)
14451
14452'%addr'
14453     This modifier indicates to the assembler and linker to use the
14454     16-bit physical address corresponding to the symbol.  This is
14455     intended to be used on memory window systems to map a symbol in the
14456     memory bank window.  If the symbol is in a memory expansion part,
14457     the physical address corresponds to the symbol address within the
14458     memory bank window.  If the symbol is not in a memory expansion
14459     part, this is the symbol address (using or not using the %addr
14460     modifier has no effect in that case).
14461
14462'%page'
14463     This modifier indicates to use the memory page number corresponding
14464     to the symbol.  If the symbol is in a memory expansion part, its
14465     page number is computed by the linker as a number used to map the
14466     page containing the symbol in the memory bank window.  If the
14467     symbol is not in a memory expansion part, the page number is 0.
14468
14469'%hi'
14470     This modifier indicates to use the 8-bit high part of the physical
14471     address of the symbol.
14472
14473'%lo'
14474     This modifier indicates to use the 8-bit low part of the physical
14475     address of the symbol.
14476
14477   For example a 68HC12 call to a function 'foo_example' stored in
14478memory expansion part could be written as follows:
14479
14480     call %addr(foo_example),%page(foo_example)
14481
14482   and this is equivalent to
14483
14484     call foo_example
14485
14486   And for 68HC11 it could be written as follows:
14487
14488     ldab #%page(foo_example)
14489     stab _page_switch
14490     jsr  %addr(foo_example)
14491
14492
14493File: as.info,  Node: M68HC11-Directives,  Next: M68HC11-Float,  Prev: M68HC11-Modifiers,  Up: M68HC11-Dependent
14494
144959.23.4 Assembler Directives
14496---------------------------
14497
14498The 68HC11 and 68HC12 version of 'as' have the following specific
14499assembler directives:
14500
14501'.relax'
14502     The relax directive is used by the 'GNU Compiler' to emit a
14503     specific relocation to mark a group of instructions for linker
14504     relaxation.  The sequence of instructions within the group must be
14505     known to the linker so that relaxation can be performed.
14506
14507'.mode [mshort|mlong|mshort-double|mlong-double]'
14508     This directive specifies the ABI. It overrides the '-mshort',
14509     '-mlong', '-mshort-double' and '-mlong-double' options.
14510
14511'.far SYMBOL'
14512     This directive marks the symbol as a 'far' symbol meaning that it
14513     uses a 'call/rtc' calling convention as opposed to 'jsr/rts'.
14514     During a final link, the linker will identify references to the
14515     'far' symbol and will verify the proper calling convention.
14516
14517'.interrupt SYMBOL'
14518     This directive marks the symbol as an interrupt entry point.  This
14519     information is then used by the debugger to correctly unwind the
14520     frame across interrupts.
14521
14522'.xrefb SYMBOL'
14523     This directive is defined for compatibility with the 'Specification
14524     for Motorola 8 and 16-Bit Assembly Language Input Standard' and is
14525     ignored.
14526
14527
14528File: as.info,  Node: M68HC11-Float,  Next: M68HC11-opcodes,  Prev: M68HC11-Directives,  Up: M68HC11-Dependent
14529
145309.23.5 Floating Point
14531---------------------
14532
14533Packed decimal (P) format floating literals are not supported.  Feel
14534free to add the code!
14535
14536   The floating point formats generated by directives are these.
14537
14538'.float'
14539     'Single' precision floating point constants.
14540
14541'.double'
14542     'Double' precision floating point constants.
14543
14544'.extend'
14545'.ldouble'
14546     'Extended' precision ('long double') floating point constants.
14547
14548
14549File: as.info,  Node: M68HC11-opcodes,  Prev: M68HC11-Float,  Up: M68HC11-Dependent
14550
145519.23.6 Opcodes
14552--------------
14553
14554* Menu:
14555
14556* M68HC11-Branch::                 Branch Improvement
14557
14558
14559File: as.info,  Node: M68HC11-Branch,  Up: M68HC11-opcodes
14560
145619.23.6.1 Branch Improvement
14562...........................
14563
14564Certain pseudo opcodes are permitted for branch instructions.  They
14565expand to the shortest branch instruction that reach the target.
14566Generally these mnemonics are made by prepending 'j' to the start of
14567Motorola mnemonic.  These pseudo opcodes are not affected by the
14568'--short-branches' or '--force-long-branches' options.
14569
14570   The following table summarizes the pseudo-operations.
14571
14572                             Displacement Width
14573          +-------------------------------------------------------------+
14574          |                     Options                                 |
14575          |    --short-branches           --force-long-branches         |
14576          +--------------------------+----------------------------------+
14577       Op |BYTE             WORD     | BYTE          WORD               |
14578          +--------------------------+----------------------------------+
14579      bsr | bsr <pc-rel>    <error>  |               jsr <abs>          |
14580      bra | bra <pc-rel>    <error>  |               jmp <abs>          |
14581     jbsr | bsr <pc-rel>   jsr <abs> | bsr <pc-rel>  jsr <abs>          |
14582     jbra | bra <pc-rel>   jmp <abs> | bra <pc-rel>  jmp <abs>          |
14583      bXX | bXX <pc-rel>    <error>  |               bNX +3; jmp <abs>  |
14584     jbXX | bXX <pc-rel>   bNX +3;   | bXX <pc-rel>  bNX +3; jmp <abs>  |
14585          |                jmp <abs> |                                  |
14586          +--------------------------+----------------------------------+
14587     XX: condition
14588     NX: negative of condition XX
14589
14590'jbsr'
14591'jbra'
14592     These are the simplest jump pseudo-operations; they always map to
14593     one particular machine instruction, depending on the displacement
14594     to the branch target.
14595
14596'jbXX'
14597     Here, 'jbXX' stands for an entire family of pseudo-operations,
14598     where XX is a conditional branch or condition-code test.  The full
14599     list of pseudo-ops in this family is:
14600           jbcc   jbeq   jbge   jbgt   jbhi   jbvs   jbpl  jblo
14601           jbcs   jbne   jblt   jble   jbls   jbvc   jbmi
14602
14603     For the cases of non-PC relative displacements and long
14604     displacements, 'as' issues a longer code fragment in terms of NX,
14605     the opposite condition to XX.  For example, for the non-PC relative
14606     case:
14607              jbXX foo
14608     gives
14609               bNXs oof
14610               jmp foo
14611           oof:
14612
14613
14614File: as.info,  Node: S12Z-Dependent,  Next: Meta-Dependent,  Prev: M68HC11-Dependent,  Up: Machine Dependencies
14615
146169.24 S12Z Dependent Features
14617============================
14618
14619The Freescale S12Z version of 'as' has a few machine dependent features.
14620
14621* Menu:
14622
14623* S12Z Options::                S12Z Options
14624* S12Z Syntax::                 Syntax
14625
14626
14627File: as.info,  Node: S12Z Options,  Next: S12Z Syntax,  Up: S12Z-Dependent
14628
146299.24.1 S12Z Options
14630-------------------
14631
14632The S12Z version of 'as' recognizes the following options:
14633
14634'-mreg-prefix=PREFIX'
14635     You can use the '-mreg-prefix=PFX' option to indicate that the
14636     assembler should expect all register names to be prefixed with the
14637     string PFX.
14638
14639     For an explanation of what this means and why it might be needed,
14640     see *note S12Z Register Notation::.
14641
14642'-mdollar-hex'
14643     The '-mdollar-hex' option affects the way that literal hexadecimal
14644     constants are represented.  When this option is specified, the
14645     assembler will consider the '$' character as the start of a
14646     hexadecimal integer constant.  Without this option, the standard
14647     value of '0x' is expected.
14648
14649     If you use this option, then you cannot have symbol names starting
14650     with '$'.  '-mdollar-hex' is implied if the '--traditional-format'
14651     (*note traditional-format::) is used.
14652
14653
14654File: as.info,  Node: S12Z Syntax,  Prev: S12Z Options,  Up: S12Z-Dependent
14655
146569.24.2 Syntax
14657-------------
14658
14659* Menu:
14660
14661* S12Z Syntax Overview::                  General description
14662* S12Z Addressing Modes::                 Operands and their semantics
14663* S12Z Register Notation::                How to refer to registers
14664
14665
14666File: as.info,  Node: S12Z Syntax Overview,  Next: S12Z Addressing Modes,  Up: S12Z Syntax
14667
146689.24.2.1 Overview
14669.................
14670
14671In the S12Z syntax, the instruction name comes first and it may be
14672followed by one, or by several operands.  In most cases the maximum
14673number of operands is three.  Operands are separated by a comma (',').
14674A comma however does not act as a separator if it appears within
14675parentheses ('()') or within square brackets ('[]').  'as' will complain
14676if too many, too few or inappropriate operands are specified for a given
14677instruction.
14678
14679   Some instructions accept and (in certain situations require) a suffix
14680indicating the size of the operand.  The suffix is separated from the
14681instruction name by a period ('.') and may be one of 'b', 'w', 'p' or
14682'l' indicating 'byte' (a single byte), 'word' (2 bytes), 'pointer' (3
14683bytes) or 'long' (4 bytes) respectively.
14684
14685   Example:
14686
14687     	bset.b  0xA98, #5
14688     	mov.b   #6, 0x2409
14689     	ld      d0, #4
14690     	mov.l   (d0, x), 0x2409
14691     	inc     d0
14692     	cmp     d0, #12
14693     	blt     *-4
14694     	lea     x, 0x2409
14695     	st      y,  (1, x)
14696
14697   The presence of a ';' character anywhere on a line indicates the
14698start of a comment that extends to the end of that line.
14699
14700   A '*' or a '#' character at the start of a line also introduces a
14701line comment, but these characters do not work elsewhere on the line.
14702If the first character of the line is a '#' then as well as starting a
14703comment, the line could also be logical line number directive (*note
14704Comments::) or a preprocessor control command (*note Preprocessing::).
14705
14706   The S12Z assembler does not currently support a line separator
14707character.
14708
14709
14710File: as.info,  Node: S12Z Addressing Modes,  Next: S12Z Register Notation,  Prev: S12Z Syntax Overview,  Up: S12Z Syntax
14711
147129.24.2.2 Addressing Modes
14713.........................
14714
14715The following addressing modes are understood for the S12Z.
14716"Immediate"
14717     '#NUMBER'
14718
14719"Immediate Bit Field"
14720     '#WIDTH:OFFSET'
14721
14722     Bit field instructions in the immediate mode require the width and
14723     offset to be specified.  The WIDTH parameter specifies the number
14724     of bits in the field.  It should be a number in the range [1,32].
14725     OFFSET determines the position within the field where the operation
14726     should start.  It should be a number in the range [0,31].
14727
14728"Relative"
14729     '*SYMBOL', or '*[+-]DIGITS'
14730
14731     Program counter relative addresses have a width of 15 bits.  Thus,
14732     they must be within the range [-32768, 32767].
14733
14734"Register"
14735     'REG'
14736
14737     Some instructions accept a register as an operand.  In general, REG
14738     may be a data register ('D0', 'D1' ... 'D7'), the 'X' register or
14739     the 'Y' register.
14740
14741     A few instructions accept as an argument the stack pointer register
14742     ('S'), and/or the program counter ('P').
14743
14744     Some very special instructions accept arguments which refer to the
14745     condition code register.  For these arguments the syntax is 'CCR',
14746     'CCH' or 'CCL' which refer to the complete condition code register,
14747     the condition code register high byte and the condition code
14748     register low byte respectively.
14749
14750"Absolute Direct"
14751     'SYMBOL', or 'DIGITS'
14752
14753"Absolute Indirect"
14754     '[SYMBOL', or 'DIGITS]'
14755
14756"Constant Offset Indexed"
14757     '(NUMBER,REG)'
14758
14759     REG may be either 'X', 'Y', 'S' or 'P' or one of the data registers
14760     'D0', 'D1' ... 'D7'.  If any of the registers 'D2' ... 'D5' are
14761     specified, then the register value is treated as a signed value.
14762     Otherwise it is treated as unsigned.  NUMBER may be any integer in
14763     the range [-8388608,8388607].
14764
14765"Offset Indexed Indirect"
14766     '[NUMBER,REG]'
14767
14768     REG may be either 'X', 'Y', 'S' or 'P'.  NUMBER may be any integer
14769     in the range [-8388608,8388607].
14770
14771"Auto Pre-Increment/Pre-Decrement/Post-Increment/Post-Decrement"
14772     '-REG', '+REG', 'REG-' or 'REG+'
14773
14774     This addressing mode is typically used to access a value at an
14775     address, and simultaneously to increment/decrement the register
14776     pointing to that address.  Thus REG may be any of the 24 bit
14777     registers 'X', 'Y', or 'S'.  Pre-increment and post-decrement are
14778     not available for register 'S' (only post-increment and
14779     pre-decrement are available).
14780
14781"Register Offset Direct"
14782     '(DATA-REG,REG)'
14783
14784     REG can be either 'X', 'Y', or 'S'.  DATA-REG must be one of the
14785     data registers 'D0', 'D1' ... 'D7'.  If any of the registers 'D2'
14786     ... 'D5' are specified, then the register value is treated as a
14787     signed value.  Otherwise it is treated as unsigned.
14788
14789"Register Offset Indirect"
14790     '[DATA-REG,REG]'
14791
14792     REG can be either 'X' or 'Y'.  DATA-REG must be one of the data
14793     registers 'D0', 'D1' ... 'D7'.  If any of the registers 'D2' ...
14794     'D5' are specified, then the register value is treated as a signed
14795     value.  Otherwise it is treated as unsigned.
14796
14797   For example:
14798
14799     	trap    #197        ;; Immediate mode
14800     	bra     *+49        ;; Relative mode
14801     	bra     .L0         ;;     ditto
14802     	jmp     0xFE0034    ;; Absolute direct mode
14803     	jmp     [0xFD0012]  ;; Absolute indirect mode
14804     	inc.b   (4,x)       ;; Constant offset indexed mode
14805     	jsr     (45, d0)    ;;     ditto
14806     	dec.w   [4,y]       ;; Constant offset indexed indirect mode
14807     	clr.p   (-s)        ;; Pre-decrement mode
14808     	neg.l   (d0, s)     ;; Register offset direct mode
14809     	com.b   [d1, x]     ;; Register offset indirect mode
14810     	psh     cch         ;; Register mode
14811
14812
14813File: as.info,  Node: S12Z Register Notation,  Prev: S12Z Addressing Modes,  Up: S12Z Syntax
14814
148159.24.2.3 Register Notation
14816..........................
14817
14818Without a register prefix (*note S12Z Options::), S12Z assembler code is
14819expected in the traditional format like this:
14820     lea s, (-2,s)
14821     st d2, (0,s)
14822     ld x,  symbol
14823     tfr d2, d6
14824     cmp d6, #1532
14825
14826However, if 'as' is started with (for example) '-mreg-prefix=%' then all
14827register names must be prefixed with '%' as follows:
14828     lea %s, (-2,%s)
14829     st %d2, (0,%s)
14830     ld %x,  symbol
14831     tfr %d2, %d6
14832     cmp %d6, #1532
14833
14834   The register prefix feature is intended to be used by compilers to
14835avoid ambiguity between symbols and register names.  Consider the
14836following assembler instruction:
14837     st d0, d1
14838The destination operand of this instruction could either refer to the
14839register 'D1', or it could refer to the symbol named "d1".  If the
14840latter is intended then 'as' must be invoked with '-mreg-prefix=PFX' and
14841the code written as
14842     st PFXd0, d1
14843where PFX is the chosen register prefix.  For this reason, compiler
14844back-ends should choose a register prefix which cannot be confused with
14845a symbol name.
14846
14847
14848File: as.info,  Node: Meta-Dependent,  Next: MicroBlaze-Dependent,  Prev: S12Z-Dependent,  Up: Machine Dependencies
14849
148509.25 Meta Dependent Features
14851============================
14852
14853* Menu:
14854
14855* Meta Options::                Options
14856* Meta Syntax::                 Meta Assembler Syntax
14857
14858
14859File: as.info,  Node: Meta Options,  Next: Meta Syntax,  Up: Meta-Dependent
14860
148619.25.1 Options
14862--------------
14863
14864The Imagination Technologies Meta architecture is implemented in a
14865number of versions, with each new version adding new features such as
14866instructions and registers.  For precise details of what instructions
14867each core supports, please see the chip's technical reference manual.
14868
14869   The following table lists all available Meta options.
14870
14871'-mcpu=metac11'
14872     Generate code for Meta 1.1.
14873
14874'-mcpu=metac12'
14875     Generate code for Meta 1.2.
14876
14877'-mcpu=metac21'
14878     Generate code for Meta 2.1.
14879
14880'-mfpu=metac21'
14881     Allow code to use FPU hardware of Meta 2.1.
14882
14883
14884File: as.info,  Node: Meta Syntax,  Prev: Meta Options,  Up: Meta-Dependent
14885
148869.25.2 Syntax
14887-------------
14888
14889* Menu:
14890
14891* Meta-Chars::                Special Characters
14892* Meta-Regs::                 Register Names
14893
14894
14895File: as.info,  Node: Meta-Chars,  Next: Meta-Regs,  Up: Meta Syntax
14896
148979.25.2.1 Special Characters
14898...........................
14899
14900'!' is the line comment character.
14901
14902   You can use ';' instead of a newline to separate statements.
14903
14904   Since '$' has no special meaning, you may use it in symbol names.
14905
14906
14907File: as.info,  Node: Meta-Regs,  Prev: Meta-Chars,  Up: Meta Syntax
14908
149099.25.2.2 Register Names
14910.......................
14911
14912Registers can be specified either using their mnemonic names, such as
14913'D0Re0', or using the unit plus register number separated by a '.', such
14914as 'D0.0'.
14915
14916
14917File: as.info,  Node: MicroBlaze-Dependent,  Next: MIPS-Dependent,  Prev: Meta-Dependent,  Up: Machine Dependencies
14918
149199.26 MicroBlaze Dependent Features
14920==================================
14921
14922The Xilinx MicroBlaze processor family includes several variants, all
14923using the same core instruction set.  This chapter covers features of
14924the GNU assembler that are specific to the MicroBlaze architecture.  For
14925details about the MicroBlaze instruction set, please see the 'MicroBlaze
14926Processor Reference Guide (UG081)' available at www.xilinx.com.
14927
14928* Menu:
14929
14930* MicroBlaze Directives::           Directives for MicroBlaze Processors.
14931* MicroBlaze Syntax::               Syntax for the MicroBlaze
14932
14933
14934File: as.info,  Node: MicroBlaze Directives,  Next: MicroBlaze Syntax,  Up: MicroBlaze-Dependent
14935
149369.26.1 Directives
14937-----------------
14938
14939A number of assembler directives are available for MicroBlaze.
14940
14941'.data8 EXPRESSION,...'
14942     This directive is an alias for '.byte'.  Each expression is
14943     assembled into an eight-bit value.
14944
14945'.data16 EXPRESSION,...'
14946     This directive is an alias for '.hword'.  Each expression is
14947     assembled into an 16-bit value.
14948
14949'.data32 EXPRESSION,...'
14950     This directive is an alias for '.word'.  Each expression is
14951     assembled into an 32-bit value.
14952
14953'.ent NAME[,LABEL]'
14954     This directive is an alias for '.func' denoting the start of
14955     function NAME at (optional) LABEL.
14956
14957'.end NAME[,LABEL]'
14958     This directive is an alias for '.endfunc' denoting the end of
14959     function NAME.
14960
14961'.gpword LABEL,...'
14962     This directive is an alias for '.rva'.  The resolved address of
14963     LABEL is stored in the data section.
14964
14965'.weakext LABEL'
14966     Declare that LABEL is a weak external symbol.
14967
14968'.rodata'
14969     Switch to .rodata section.  Equivalent to '.section .rodata'
14970
14971'.sdata2'
14972     Switch to .sdata2 section.  Equivalent to '.section .sdata2'
14973
14974'.sdata'
14975     Switch to .sdata section.  Equivalent to '.section .sdata'
14976
14977'.bss'
14978     Switch to .bss section.  Equivalent to '.section .bss'
14979
14980'.sbss'
14981     Switch to .sbss section.  Equivalent to '.section .sbss'
14982
14983
14984File: as.info,  Node: MicroBlaze Syntax,  Prev: MicroBlaze Directives,  Up: MicroBlaze-Dependent
14985
149869.26.2 Syntax for the MicroBlaze
14987--------------------------------
14988
14989* Menu:
14990
14991* MicroBlaze-Chars::                Special Characters
14992
14993
14994File: as.info,  Node: MicroBlaze-Chars,  Up: MicroBlaze Syntax
14995
149969.26.2.1 Special Characters
14997...........................
14998
14999The presence of a '#' on a line indicates the start of a comment that
15000extends to the end of the current line.
15001
15002   If a '#' appears as the first character of a line, the whole line is
15003treated as a comment, but in this case the line can also be a logical
15004line number directive (*note Comments::) or a preprocessor control
15005command (*note Preprocessing::).
15006
15007   The ';' character can be used to separate statements on the same
15008line.
15009
15010
15011File: as.info,  Node: MIPS-Dependent,  Next: MMIX-Dependent,  Prev: MicroBlaze-Dependent,  Up: Machine Dependencies
15012
150139.27 MIPS Dependent Features
15014============================
15015
15016GNU 'as' for MIPS architectures supports several different MIPS
15017processors, and MIPS ISA levels I through V, MIPS32, and MIPS64.  For
15018information about the MIPS instruction set, see 'MIPS RISC
15019Architecture', by Kane and Heindrich (Prentice-Hall).  For an overview
15020of MIPS assembly conventions, see "Appendix D: Assembly Language
15021Programming" in the same work.
15022
15023* Menu:
15024
15025* MIPS Options::   	Assembler options
15026* MIPS Macros:: 	High-level assembly macros
15027* MIPS Symbol Sizes::	Directives to override the size of symbols
15028* MIPS Small Data:: 	Controlling the use of small data accesses
15029* MIPS ISA::    	Directives to override the ISA level
15030* MIPS assembly options:: Directives to control code generation
15031* MIPS autoextend::	Directives for extending MIPS 16 bit instructions
15032* MIPS insn::		Directive to mark data as an instruction
15033* MIPS FP ABIs::	Marking which FP ABI is in use
15034* MIPS NaN Encodings::	Directives to record which NaN encoding is being used
15035* MIPS Option Stack::	Directives to save and restore options
15036* MIPS ASE Instruction Generation Overrides:: Directives to control
15037  			generation of MIPS ASE instructions
15038* MIPS Floating-Point:: Directives to override floating-point options
15039* MIPS Syntax::         MIPS specific syntactical considerations
15040
15041
15042File: as.info,  Node: MIPS Options,  Next: MIPS Macros,  Up: MIPS-Dependent
15043
150449.27.1 Assembler options
15045------------------------
15046
15047The MIPS configurations of GNU 'as' support these special options:
15048
15049'-G NUM'
15050     Set the "small data" limit to N bytes.  The default limit is 8
15051     bytes.  *Note Controlling the use of small data accesses: MIPS
15052     Small Data.
15053
15054'-EB'
15055'-EL'
15056     Any MIPS configuration of 'as' can select big-endian or
15057     little-endian output at run time (unlike the other GNU development
15058     tools, which must be configured for one or the other).  Use '-EB'
15059     to select big-endian output, and '-EL' for little-endian.
15060
15061'-KPIC'
15062     Generate SVR4-style PIC. This option tells the assembler to
15063     generate SVR4-style position-independent macro expansions.  It also
15064     tells the assembler to mark the output file as PIC.
15065
15066'-mvxworks-pic'
15067     Generate VxWorks PIC. This option tells the assembler to generate
15068     VxWorks-style position-independent macro expansions.
15069
15070'-mips1'
15071'-mips2'
15072'-mips3'
15073'-mips4'
15074'-mips5'
15075'-mips32'
15076'-mips32r2'
15077'-mips32r3'
15078'-mips32r5'
15079'-mips32r6'
15080'-mips64'
15081'-mips64r2'
15082'-mips64r3'
15083'-mips64r5'
15084'-mips64r6'
15085     Generate code for a particular MIPS Instruction Set Architecture
15086     level.  '-mips1' corresponds to the R2000 and R3000 processors,
15087     '-mips2' to the R6000 processor, '-mips3' to the R4000 processor,
15088     and '-mips4' to the R8000 and R10000 processors.  '-mips5',
15089     '-mips32', '-mips32r2', '-mips32r3', '-mips32r5', '-mips32r6',
15090     '-mips64', '-mips64r2', '-mips64r3', '-mips64r5', and '-mips64r6'
15091     correspond to generic MIPS V, MIPS32, MIPS32 Release 2, MIPS32
15092     Release 3, MIPS32 Release 5, MIPS32 Release 6, MIPS64, and MIPS64
15093     Release 2, MIPS64 Release 3, MIPS64 Release 5, and MIPS64 Release 6
15094     ISA processors, respectively.  You can also switch instruction sets
15095     during the assembly; see *note Directives to override the ISA
15096     level: MIPS ISA.
15097
15098'-mgp32'
15099'-mfp32'
15100     Some macros have different expansions for 32-bit and 64-bit
15101     registers.  The register sizes are normally inferred from the ISA
15102     and ABI, but these flags force a certain group of registers to be
15103     treated as 32 bits wide at all times.  '-mgp32' controls the size
15104     of general-purpose registers and '-mfp32' controls the size of
15105     floating-point registers.
15106
15107     The '.set gp=32' and '.set fp=32' directives allow the size of
15108     registers to be changed for parts of an object.  The default value
15109     is restored by '.set gp=default' and '.set fp=default'.
15110
15111     On some MIPS variants there is a 32-bit mode flag; when this flag
15112     is set, 64-bit instructions generate a trap.  Also, some 32-bit
15113     OSes only save the 32-bit registers on a context switch, so it is
15114     essential never to use the 64-bit registers.
15115
15116'-mgp64'
15117'-mfp64'
15118     Assume that 64-bit registers are available.  This is provided in
15119     the interests of symmetry with '-mgp32' and '-mfp32'.
15120
15121     The '.set gp=64' and '.set fp=64' directives allow the size of
15122     registers to be changed for parts of an object.  The default value
15123     is restored by '.set gp=default' and '.set fp=default'.
15124
15125'-mfpxx'
15126     Make no assumptions about whether 32-bit or 64-bit floating-point
15127     registers are available.  This is provided to support having
15128     modules compatible with either '-mfp32' or '-mfp64'.  This option
15129     can only be used with MIPS II and above.
15130
15131     The '.set fp=xx' directive allows a part of an object to be marked
15132     as not making assumptions about 32-bit or 64-bit FP registers.  The
15133     default value is restored by '.set fp=default'.
15134
15135'-modd-spreg'
15136'-mno-odd-spreg'
15137     Enable use of floating-point operations on odd-numbered
15138     single-precision registers when supported by the ISA. '-mfpxx'
15139     implies '-mno-odd-spreg', otherwise the default is '-modd-spreg'
15140
15141'-mips16'
15142'-no-mips16'
15143     Generate code for the MIPS 16 processor.  This is equivalent to
15144     putting '.module mips16' at the start of the assembly file.
15145     '-no-mips16' turns off this option.
15146
15147'-mmips16e2'
15148'-mno-mips16e2'
15149     Enable the use of MIPS16e2 instructions in MIPS16 mode.  This is
15150     equivalent to putting '.module mips16e2' at the start of the
15151     assembly file.  '-mno-mips16e2' turns off this option.
15152
15153'-mmicromips'
15154'-mno-micromips'
15155     Generate code for the microMIPS processor.  This is equivalent to
15156     putting '.module micromips' at the start of the assembly file.
15157     '-mno-micromips' turns off this option.  This is equivalent to
15158     putting '.module nomicromips' at the start of the assembly file.
15159
15160'-msmartmips'
15161'-mno-smartmips'
15162     Enables the SmartMIPS extensions to the MIPS32 instruction set,
15163     which provides a number of new instructions which target smartcard
15164     and cryptographic applications.  This is equivalent to putting
15165     '.module smartmips' at the start of the assembly file.
15166     '-mno-smartmips' turns off this option.
15167
15168'-mips3d'
15169'-no-mips3d'
15170     Generate code for the MIPS-3D Application Specific Extension.  This
15171     tells the assembler to accept MIPS-3D instructions.  '-no-mips3d'
15172     turns off this option.
15173
15174'-mdmx'
15175'-no-mdmx'
15176     Generate code for the MDMX Application Specific Extension.  This
15177     tells the assembler to accept MDMX instructions.  '-no-mdmx' turns
15178     off this option.
15179
15180'-mdsp'
15181'-mno-dsp'
15182     Generate code for the DSP Release 1 Application Specific Extension.
15183     This tells the assembler to accept DSP Release 1 instructions.
15184     '-mno-dsp' turns off this option.
15185
15186'-mdspr2'
15187'-mno-dspr2'
15188     Generate code for the DSP Release 2 Application Specific Extension.
15189     This option implies '-mdsp'.  This tells the assembler to accept
15190     DSP Release 2 instructions.  '-mno-dspr2' turns off this option.
15191
15192'-mdspr3'
15193'-mno-dspr3'
15194     Generate code for the DSP Release 3 Application Specific Extension.
15195     This option implies '-mdsp' and '-mdspr2'.  This tells the
15196     assembler to accept DSP Release 3 instructions.  '-mno-dspr3' turns
15197     off this option.
15198
15199'-mmt'
15200'-mno-mt'
15201     Generate code for the MT Application Specific Extension.  This
15202     tells the assembler to accept MT instructions.  '-mno-mt' turns off
15203     this option.
15204
15205'-mmcu'
15206'-mno-mcu'
15207     Generate code for the MCU Application Specific Extension.  This
15208     tells the assembler to accept MCU instructions.  '-mno-mcu' turns
15209     off this option.
15210
15211'-mmsa'
15212'-mno-msa'
15213     Generate code for the MIPS SIMD Architecture Extension.  This tells
15214     the assembler to accept MSA instructions.  '-mno-msa' turns off
15215     this option.
15216
15217'-mxpa'
15218'-mno-xpa'
15219     Generate code for the MIPS eXtended Physical Address (XPA)
15220     Extension.  This tells the assembler to accept XPA instructions.
15221     '-mno-xpa' turns off this option.
15222
15223'-mvirt'
15224'-mno-virt'
15225     Generate code for the Virtualization Application Specific
15226     Extension.  This tells the assembler to accept Virtualization
15227     instructions.  '-mno-virt' turns off this option.
15228
15229'-mcrc'
15230'-mno-crc'
15231     Generate code for the cyclic redundancy check (CRC) Application
15232     Specific Extension.  This tells the assembler to accept CRC
15233     instructions.  '-mno-crc' turns off this option.
15234
15235'-mginv'
15236'-mno-ginv'
15237     Generate code for the Global INValidate (GINV) Application Specific
15238     Extension.  This tells the assembler to accept GINV instructions.
15239     '-mno-ginv' turns off this option.
15240
15241'-mloongson-mmi'
15242'-mno-loongson-mmi'
15243     Generate code for the Loongson MultiMedia extensions Instructions
15244     (MMI) Application Specific Extension.  This tells the assembler to
15245     accept MMI instructions.  '-mno-loongson-mmi' turns off this
15246     option.
15247
15248'-mloongson-cam'
15249'-mno-loongson-cam'
15250     Generate code for the Loongson Content Address Memory (CAM)
15251     Application Specific Extension.  This tells the assembler to accept
15252     CAM instructions.  '-mno-loongson-cam' turns off this option.
15253
15254'-mloongson-ext'
15255'-mno-loongson-ext'
15256     Generate code for the Loongson EXTensions (EXT) instructions
15257     Application Specific Extension.  This tells the assembler to accept
15258     EXT instructions.  '-mno-loongson-ext' turns off this option.
15259
15260'-mloongson-ext2'
15261'-mno-loongson-ext2'
15262     Generate code for the Loongson EXTensions R2 (EXT2) instructions
15263     Application Specific Extension.  This tells the assembler to accept
15264     EXT2 instructions.  '-mno-loongson-ext2' turns off this option.
15265
15266'-minsn32'
15267'-mno-insn32'
15268     Only use 32-bit instruction encodings when generating code for the
15269     microMIPS processor.  This option inhibits the use of any 16-bit
15270     instructions.  This is equivalent to putting '.set insn32' at the
15271     start of the assembly file.  '-mno-insn32' turns off this option.
15272     This is equivalent to putting '.set noinsn32' at the start of the
15273     assembly file.  By default '-mno-insn32' is selected, allowing all
15274     instructions to be used.
15275
15276'-mfix7000'
15277'-mno-fix7000'
15278     Cause nops to be inserted if the read of the destination register
15279     of an mfhi or mflo instruction occurs in the following two
15280     instructions.
15281
15282'-mfix-rm7000'
15283'-mno-fix-rm7000'
15284     Cause nops to be inserted if a dmult or dmultu instruction is
15285     followed by a load instruction.
15286
15287'-mfix-loongson2f-jump'
15288'-mno-fix-loongson2f-jump'
15289     Eliminate instruction fetch from outside 256M region to work around
15290     the Loongson2F 'jump' instructions.  Without it, under extreme
15291     cases, the kernel may crash.  The issue has been solved in latest
15292     processor batches, but this fix has no side effect to them.
15293
15294'-mfix-loongson2f-nop'
15295'-mno-fix-loongson2f-nop'
15296     Replace nops by 'or at,at,zero' to work around the Loongson2F 'nop'
15297     errata.  Without it, under extreme cases, the CPU might deadlock.
15298     The issue has been solved in later Loongson2F batches, but this fix
15299     has no side effect to them.
15300
15301'-mfix-loongson3-llsc'
15302'-mno-fix-loongson3-llsc'
15303     Insert 'sync' before 'll' and 'lld' to work around Loongson3 LLSC
15304     errata.  Without it, under extrame cases, the CPU might deadlock.
15305     The default can be controlled by the
15306     '--enable-mips-fix-loongson3-llsc=[yes|no]' configure option.
15307
15308'-mfix-vr4120'
15309'-mno-fix-vr4120'
15310     Insert nops to work around certain VR4120 errata.  This option is
15311     intended to be used on GCC-generated code: it is not designed to
15312     catch all problems in hand-written assembler code.
15313
15314'-mfix-vr4130'
15315'-mno-fix-vr4130'
15316     Insert nops to work around the VR4130 'mflo'/'mfhi' errata.
15317
15318'-mfix-24k'
15319'-mno-fix-24k'
15320     Insert nops to work around the 24K 'eret'/'deret' errata.
15321
15322'-mfix-cn63xxp1'
15323'-mno-fix-cn63xxp1'
15324     Replace 'pref' hints 0 - 4 and 6 - 24 with hint 28 to work around
15325     certain CN63XXP1 errata.
15326
15327'-mfix-r5900'
15328'-mno-fix-r5900'
15329     Do not attempt to schedule the preceding instruction into the delay
15330     slot of a branch instruction placed at the end of a short loop of
15331     six instructions or fewer and always schedule a 'nop' instruction
15332     there instead.  The short loop bug under certain conditions causes
15333     loops to execute only once or twice, due to a hardware bug in the
15334     R5900 chip.
15335
15336'-m4010'
15337'-no-m4010'
15338     Generate code for the LSI R4010 chip.  This tells the assembler to
15339     accept the R4010-specific instructions ('addciu', 'ffc', etc.), and
15340     to not schedule 'nop' instructions around accesses to the 'HI' and
15341     'LO' registers.  '-no-m4010' turns off this option.
15342
15343'-m4650'
15344'-no-m4650'
15345     Generate code for the MIPS R4650 chip.  This tells the assembler to
15346     accept the 'mad' and 'madu' instruction, and to not schedule 'nop'
15347     instructions around accesses to the 'HI' and 'LO' registers.
15348     '-no-m4650' turns off this option.
15349
15350'-m3900'
15351'-no-m3900'
15352'-m4100'
15353'-no-m4100'
15354     For each option '-mNNNN', generate code for the MIPS RNNNN chip.
15355     This tells the assembler to accept instructions specific to that
15356     chip, and to schedule for that chip's hazards.
15357
15358'-march=CPU'
15359     Generate code for a particular MIPS CPU. It is exactly equivalent
15360     to '-mCPU', except that there are more value of CPU understood.
15361     Valid CPU value are:
15362
15363          2000, 3000, 3900, 4000, 4010, 4100, 4111, vr4120, vr4130,
15364          vr4181, 4300, 4400, 4600, 4650, 5000, rm5200, rm5230, rm5231,
15365          rm5261, rm5721, vr5400, vr5500, 6000, rm7000, 8000, rm9000,
15366          10000, 12000, 14000, 16000, 4kc, 4km, 4kp, 4ksc, 4kec, 4kem,
15367          4kep, 4ksd, m4k, m4kp, m14k, m14kc, m14ke, m14kec, 24kc,
15368          24kf2_1, 24kf, 24kf1_1, 24kec, 24kef2_1, 24kef, 24kef1_1,
15369          34kc, 34kf2_1, 34kf, 34kf1_1, 34kn, 74kc, 74kf2_1, 74kf,
15370          74kf1_1, 74kf3_2, 1004kc, 1004kf2_1, 1004kf, 1004kf1_1,
15371          interaptiv, interaptiv-mr2, m5100, m5101, p5600, 5kc, 5kf,
15372          20kc, 25kf, sb1, sb1a, i6400, i6500, p6600, loongson2e,
15373          loongson2f, gs464, gs464e, gs264e, octeon, octeon+, octeon2,
15374          octeon3, xlr, xlp
15375
15376     For compatibility reasons, 'Nx' and 'Bfx' are accepted as synonyms
15377     for 'Nf1_1'.  These values are deprecated.
15378
15379'-mtune=CPU'
15380     Schedule and tune for a particular MIPS CPU. Valid CPU values are
15381     identical to '-march=CPU'.
15382
15383'-mabi=ABI'
15384     Record which ABI the source code uses.  The recognized arguments
15385     are: '32', 'n32', 'o64', '64' and 'eabi'.
15386
15387'-msym32'
15388'-mno-sym32'
15389     Equivalent to adding '.set sym32' or '.set nosym32' to the
15390     beginning of the assembler input.  *Note MIPS Symbol Sizes::.
15391
15392'-nocpp'
15393     This option is ignored.  It is accepted for command-line
15394     compatibility with other assemblers, which use it to turn off C
15395     style preprocessing.  With GNU 'as', there is no need for '-nocpp',
15396     because the GNU assembler itself never runs the C preprocessor.
15397
15398'-msoft-float'
15399'-mhard-float'
15400     Disable or enable floating-point instructions.  Note that by
15401     default floating-point instructions are always allowed even with
15402     CPU targets that don't have support for these instructions.
15403
15404'-msingle-float'
15405'-mdouble-float'
15406     Disable or enable double-precision floating-point operations.  Note
15407     that by default double-precision floating-point operations are
15408     always allowed even with CPU targets that don't have support for
15409     these operations.
15410
15411'--construct-floats'
15412'--no-construct-floats'
15413     The '--no-construct-floats' option disables the construction of
15414     double width floating point constants by loading the two halves of
15415     the value into the two single width floating point registers that
15416     make up the double width register.  This feature is useful if the
15417     processor support the FR bit in its status register, and this bit
15418     is known (by the programmer) to be set.  This bit prevents the
15419     aliasing of the double width register by the single width
15420     registers.
15421
15422     By default '--construct-floats' is selected, allowing construction
15423     of these floating point constants.
15424
15425'--relax-branch'
15426'--no-relax-branch'
15427     The '--relax-branch' option enables the relaxation of out-of-range
15428     branches.  Any branches whose target cannot be reached directly are
15429     converted to a small instruction sequence including an
15430     inverse-condition branch to the physically next instruction, and a
15431     jump to the original target is inserted between the two
15432     instructions.  In PIC code the jump will involve further
15433     instructions for address calculation.
15434
15435     The 'BC1ANY2F', 'BC1ANY2T', 'BC1ANY4F', 'BC1ANY4T', 'BPOSGE32' and
15436     'BPOSGE64' instructions are excluded from relaxation, because they
15437     have no complementing counterparts.  They could be relaxed with the
15438     use of a longer sequence involving another branch, however this has
15439     not been implemented and if their target turns out of reach, they
15440     produce an error even if branch relaxation is enabled.
15441
15442     Also no MIPS16 branches are ever relaxed.
15443
15444     By default '--no-relax-branch' is selected, causing any
15445     out-of-range branches to produce an error.
15446
15447'-mignore-branch-isa'
15448'-mno-ignore-branch-isa'
15449     Ignore branch checks for invalid transitions between ISA modes.
15450
15451     The semantics of branches does not provide for an ISA mode switch,
15452     so in most cases the ISA mode a branch has been encoded for has to
15453     be the same as the ISA mode of the branch's target label.  If the
15454     ISA modes do not match, then such a branch, if taken, will cause
15455     the ISA mode to remain unchanged and instructions that follow will
15456     be executed in the wrong ISA mode causing the program to misbehave
15457     or crash.
15458
15459     In the case of the 'BAL' instruction it may be possible to relax it
15460     to an equivalent 'JALX' instruction so that the ISA mode is
15461     switched at the run time as required.  For other branches no
15462     relaxation is possible and therefore GAS has checks implemented
15463     that verify in branch assembly that the two ISA modes match, and
15464     report an error otherwise so that the problem with code can be
15465     diagnosed at the assembly time rather than at the run time.
15466
15467     However some assembly code, including generated code produced by
15468     some versions of GCC, may incorrectly include branches to data
15469     labels, which appear to require a mode switch but are either dead
15470     or immediately followed by valid instructions encoded for the same
15471     ISA the branch has been encoded for.  While not strictly correct at
15472     the source level such code will execute as intended, so to help
15473     with these cases '-mignore-branch-isa' is supported which disables
15474     ISA mode checks for branches.
15475
15476     By default '-mno-ignore-branch-isa' is selected, causing any
15477     invalid branch requiring a transition between ISA modes to produce
15478     an error.
15479
15480'-mnan=ENCODING'
15481     This option indicates whether the source code uses the IEEE 2008
15482     NaN encoding ('-mnan=2008') or the original MIPS encoding
15483     ('-mnan=legacy').  It is equivalent to adding a '.nan' directive to
15484     the beginning of the source file.  *Note MIPS NaN Encodings::.
15485
15486     '-mnan=legacy' is the default if no '-mnan' option or '.nan'
15487     directive is used.
15488
15489'--trap'
15490'--no-break'
15491     'as' automatically macro expands certain division and
15492     multiplication instructions to check for overflow and division by
15493     zero.  This option causes 'as' to generate code to take a trap
15494     exception rather than a break exception when an error is detected.
15495     The trap instructions are only supported at Instruction Set
15496     Architecture level 2 and higher.
15497
15498'--break'
15499'--no-trap'
15500     Generate code to take a break exception rather than a trap
15501     exception when an error is detected.  This is the default.
15502
15503'-mpdr'
15504'-mno-pdr'
15505     Control generation of '.pdr' sections.  Off by default on IRIX, on
15506     elsewhere.
15507
15508'-mshared'
15509'-mno-shared'
15510     When generating code using the Unix calling conventions (selected
15511     by '-KPIC' or '-mcall_shared'), gas will normally generate code
15512     which can go into a shared library.  The '-mno-shared' option tells
15513     gas to generate code which uses the calling convention, but can not
15514     go into a shared library.  The resulting code is slightly more
15515     efficient.  This option only affects the handling of the '.cpload'
15516     and '.cpsetup' pseudo-ops.
15517
15518
15519File: as.info,  Node: MIPS Macros,  Next: MIPS Symbol Sizes,  Prev: MIPS Options,  Up: MIPS-Dependent
15520
155219.27.2 High-level assembly macros
15522---------------------------------
15523
15524MIPS assemblers have traditionally provided a wider range of
15525instructions than the MIPS architecture itself.  These extra
15526instructions are usually referred to as "macro" instructions (1).
15527
15528   Some MIPS macro instructions extend an underlying architectural
15529instruction while others are entirely new.  An example of the former
15530type is 'and', which allows the third operand to be either a register or
15531an arbitrary immediate value.  Examples of the latter type include
15532'bgt', which branches to the third operand when the first operand is
15533greater than the second operand, and 'ulh', which implements an
15534unaligned 2-byte load.
15535
15536   One of the most common extensions provided by macros is to expand
15537memory offsets to the full address range (32 or 64 bits) and to allow
15538symbolic offsets such as 'my_data + 4' to be used in place of integer
15539constants.  For example, the architectural instruction 'lbu' allows only
15540a signed 16-bit offset, whereas the macro 'lbu' allows code such as 'lbu
15541$4,array+32769($5)'.  The implementation of these symbolic offsets
15542depends on several factors, such as whether the assembler is generating
15543SVR4-style PIC (selected by '-KPIC', *note Assembler options: MIPS
15544Options.), the size of symbols (*note Directives to override the size of
15545symbols: MIPS Symbol Sizes.), and the small data limit (*note
15546Controlling the use of small data accesses: MIPS Small Data.).
15547
15548   Sometimes it is undesirable to have one assembly instruction expand
15549to several machine instructions.  The directive '.set nomacro' tells the
15550assembler to warn when this happens.  '.set macro' restores the default
15551behavior.
15552
15553   Some macro instructions need a temporary register to store
15554intermediate results.  This register is usually '$1', also known as
15555'$at', but it can be changed to any core register REG using '.set
15556at=REG'.  Note that '$at' always refers to '$1' regardless of which
15557register is being used as the temporary register.
15558
15559   Implicit uses of the temporary register in macros could interfere
15560with explicit uses in the assembly code.  The assembler therefore warns
15561whenever it sees an explicit use of the temporary register.  The
15562directive '.set noat' silences this warning while '.set at' restores the
15563default behavior.  It is safe to use '.set noat' while '.set nomacro' is
15564in effect since single-instruction macros never need a temporary
15565register.
15566
15567   Note that while the GNU assembler provides these macros for
15568compatibility, it does not make any attempt to optimize them with the
15569surrounding code.
15570
15571   ---------- Footnotes ----------
15572
15573   (1) The term "macro" is somewhat overloaded here, since these macros
15574have no relation to those defined by '.macro', *note '.macro': Macro.
15575
15576
15577File: as.info,  Node: MIPS Symbol Sizes,  Next: MIPS Small Data,  Prev: MIPS Macros,  Up: MIPS-Dependent
15578
155799.27.3 Directives to override the size of symbols
15580-------------------------------------------------
15581
15582The n64 ABI allows symbols to have any 64-bit value.  Although this
15583provides a great deal of flexibility, it means that some macros have
15584much longer expansions than their 32-bit counterparts.  For example, the
15585non-PIC expansion of 'dla $4,sym' is usually:
15586
15587     lui     $4,%highest(sym)
15588     lui     $1,%hi(sym)
15589     daddiu  $4,$4,%higher(sym)
15590     daddiu  $1,$1,%lo(sym)
15591     dsll32  $4,$4,0
15592     daddu   $4,$4,$1
15593
15594   whereas the 32-bit expansion is simply:
15595
15596     lui     $4,%hi(sym)
15597     daddiu  $4,$4,%lo(sym)
15598
15599   n64 code is sometimes constructed in such a way that all symbolic
15600constants are known to have 32-bit values, and in such cases, it's
15601preferable to use the 32-bit expansion instead of the 64-bit expansion.
15602
15603   You can use the '.set sym32' directive to tell the assembler that,
15604from this point on, all expressions of the form 'SYMBOL' or 'SYMBOL +
15605OFFSET' have 32-bit values.  For example:
15606
15607     .set sym32
15608     dla     $4,sym
15609     lw      $4,sym+16
15610     sw      $4,sym+0x8000($4)
15611
15612   will cause the assembler to treat 'sym', 'sym+16' and 'sym+0x8000' as
1561332-bit values.  The handling of non-symbolic addresses is not affected.
15614
15615   The directive '.set nosym32' ends a '.set sym32' block and reverts to
15616the normal behavior.  It is also possible to change the symbol size
15617using the command-line options '-msym32' and '-mno-sym32'.
15618
15619   These options and directives are always accepted, but at present,
15620they have no effect for anything other than n64.
15621
15622
15623File: as.info,  Node: MIPS Small Data,  Next: MIPS ISA,  Prev: MIPS Symbol Sizes,  Up: MIPS-Dependent
15624
156259.27.4 Controlling the use of small data accesses
15626-------------------------------------------------
15627
15628It often takes several instructions to load the address of a symbol.
15629For example, when 'addr' is a 32-bit symbol, the non-PIC expansion of
15630'dla $4,addr' is usually:
15631
15632     lui     $4,%hi(addr)
15633     daddiu  $4,$4,%lo(addr)
15634
15635   The sequence is much longer when 'addr' is a 64-bit symbol.  *Note
15636Directives to override the size of symbols: MIPS Symbol Sizes.
15637
15638   In order to cut down on this overhead, most embedded MIPS systems set
15639aside a 64-kilobyte "small data" area and guarantee that all data of
15640size N and smaller will be placed in that area.  The limit N is passed
15641to both the assembler and the linker using the command-line option '-G
15642N', *note Assembler options: MIPS Options.  Note that the same value of
15643N must be used when linking and when assembling all input files to the
15644link; any inconsistency could cause a relocation overflow error.
15645
15646   The size of an object in the '.bss' section is set by the '.comm' or
15647'.lcomm' directive that defines it.  The size of an external object may
15648be set with the '.extern' directive.  For example, '.extern sym,4'
15649declares that the object at 'sym' is 4 bytes in length, while leaving
15650'sym' otherwise undefined.
15651
15652   When no '-G' option is given, the default limit is 8 bytes.  The
15653option '-G 0' prevents any data from being automatically classified as
15654small.
15655
15656   It is also possible to mark specific objects as small by putting them
15657in the special sections '.sdata' and '.sbss', which are "small"
15658counterparts of '.data' and '.bss' respectively.  The toolchain will
15659treat such data as small regardless of the '-G' setting.
15660
15661   On startup, systems that support a small data area are expected to
15662initialize register '$28', also known as '$gp', in such a way that small
15663data can be accessed using a 16-bit offset from that register.  For
15664example, when 'addr' is small data, the 'dla $4,addr' instruction above
15665is equivalent to:
15666
15667     daddiu  $4,$28,%gp_rel(addr)
15668
15669   Small data is not supported for SVR4-style PIC.
15670
15671
15672File: as.info,  Node: MIPS ISA,  Next: MIPS assembly options,  Prev: MIPS Small Data,  Up: MIPS-Dependent
15673
156749.27.5 Directives to override the ISA level
15675-------------------------------------------
15676
15677GNU 'as' supports an additional directive to change the MIPS Instruction
15678Set Architecture level on the fly: '.set mipsN'.  N should be a number
15679from 0 to 5, or 32, 32r2, 32r3, 32r5, 32r6, 64, 64r2, 64r3, 64r5 or
1568064r6.  The values other than 0 make the assembler accept instructions
15681for the corresponding ISA level, from that point on in the assembly.
15682'.set mipsN' affects not only which instructions are permitted, but also
15683how certain macros are expanded.  '.set mips0' restores the ISA level to
15684its original level: either the level you selected with command-line
15685options, or the default for your configuration.  You can use this
15686feature to permit specific MIPS III instructions while assembling in 32
15687bit mode.  Use this directive with care!
15688
15689   The '.set arch=CPU' directive provides even finer control.  It
15690changes the effective CPU target and allows the assembler to use
15691instructions specific to a particular CPU. All CPUs supported by the
15692'-march' command-line option are also selectable by this directive.  The
15693original value is restored by '.set arch=default'.
15694
15695   The directive '.set mips16' puts the assembler into MIPS 16 mode, in
15696which it will assemble instructions for the MIPS 16 processor.  Use
15697'.set nomips16' to return to normal 32 bit mode.
15698
15699   Traditional MIPS assemblers do not support this directive.
15700
15701   The directive '.set micromips' puts the assembler into microMIPS
15702mode, in which it will assemble instructions for the microMIPS
15703processor.  Use '.set nomicromips' to return to normal 32 bit mode.
15704
15705   Traditional MIPS assemblers do not support this directive.
15706
15707
15708File: as.info,  Node: MIPS assembly options,  Next: MIPS autoextend,  Prev: MIPS ISA,  Up: MIPS-Dependent
15709
157109.27.6 Directives to control code generation
15711--------------------------------------------
15712
15713The '.module' directive allows command-line options to be set directly
15714from assembly.  The format of the directive matches the '.set' directive
15715but only those options which are relevant to a whole module are
15716supported.  The effect of a '.module' directive is the same as the
15717corresponding command-line option.  Where '.set' directives support
15718returning to a default then the '.module' directives do not as they
15719define the defaults.
15720
15721   These module-level directives must appear first in assembly.
15722
15723   Traditional MIPS assemblers do not support this directive.
15724
15725   The directive '.set insn32' makes the assembler only use 32-bit
15726instruction encodings when generating code for the microMIPS processor.
15727This directive inhibits the use of any 16-bit instructions from that
15728point on in the assembly.  The '.set noinsn32' directive allows 16-bit
15729instructions to be accepted.
15730
15731   Traditional MIPS assemblers do not support this directive.
15732
15733
15734File: as.info,  Node: MIPS autoextend,  Next: MIPS insn,  Prev: MIPS assembly options,  Up: MIPS-Dependent
15735
157369.27.7 Directives for extending MIPS 16 bit instructions
15737--------------------------------------------------------
15738
15739By default, MIPS 16 instructions are automatically extended to 32 bits
15740when necessary.  The directive '.set noautoextend' will turn this off.
15741When '.set noautoextend' is in effect, any 32 bit instruction must be
15742explicitly extended with the '.e' modifier (e.g., 'li.e $4,1000').  The
15743directive '.set autoextend' may be used to once again automatically
15744extend instructions when necessary.
15745
15746   This directive is only meaningful when in MIPS 16 mode.  Traditional
15747MIPS assemblers do not support this directive.
15748
15749
15750File: as.info,  Node: MIPS insn,  Next: MIPS FP ABIs,  Prev: MIPS autoextend,  Up: MIPS-Dependent
15751
157529.27.8 Directive to mark data as an instruction
15753-----------------------------------------------
15754
15755The '.insn' directive tells 'as' that the following data is actually
15756instructions.  This makes a difference in MIPS 16 and microMIPS modes:
15757when loading the address of a label which precedes instructions, 'as'
15758automatically adds 1 to the value, so that jumping to the loaded address
15759will do the right thing.
15760
15761   The '.global' and '.globl' directives supported by 'as' will by
15762default mark the symbol as pointing to a region of data not code.  This
15763means that, for example, any instructions following such a symbol will
15764not be disassembled by 'objdump' as it will regard them as data.  To
15765change this behavior an optional section name can be placed after the
15766symbol name in the '.global' directive.  If this section exists and is
15767known to be a code section, then the symbol will be marked as pointing
15768at code not data.  Ie the syntax for the directive is:
15769
15770   '.global SYMBOL[ SECTION][, SYMBOL[ SECTION]] ...',
15771
15772   Here is a short example:
15773
15774             .global foo .text, bar, baz .data
15775     foo:
15776             nop
15777     bar:
15778             .word 0x0
15779     baz:
15780             .word 0x1
15781
15782
15783File: as.info,  Node: MIPS FP ABIs,  Next: MIPS NaN Encodings,  Prev: MIPS insn,  Up: MIPS-Dependent
15784
157859.27.9 Directives to control the FP ABI
15786---------------------------------------
15787
15788* Menu:
15789
15790* MIPS FP ABI History::                History of FP ABIs
15791* MIPS FP ABI Variants::               Supported FP ABIs
15792* MIPS FP ABI Selection::              Automatic selection of FP ABI
15793* MIPS FP ABI Compatibility::          Linking different FP ABI variants
15794
15795
15796File: as.info,  Node: MIPS FP ABI History,  Next: MIPS FP ABI Variants,  Up: MIPS FP ABIs
15797
157989.27.9.1 History of FP ABIs
15799...........................
15800
15801The MIPS ABIs support a variety of different floating-point extensions
15802where calling-convention and register sizes vary for floating-point
15803data.  The extensions exist to support a wide variety of optional
15804architecture features.  The resulting ABI variants are generally
15805incompatible with each other and must be tracked carefully.
15806
15807   Traditionally the use of an explicit '.gnu_attribute 4, N' directive
15808is used to indicate which ABI is in use by a specific module.  It was
15809then left to the user to ensure that command-line options and the
15810selected ABI were compatible with some potential for inconsistencies.
15811
15812
15813File: as.info,  Node: MIPS FP ABI Variants,  Next: MIPS FP ABI Selection,  Prev: MIPS FP ABI History,  Up: MIPS FP ABIs
15814
158159.27.9.2 Supported FP ABIs
15816..........................
15817
15818The supported floating-point ABI variants are:
15819
15820'0 - No floating-point'
15821     This variant is used to indicate that floating-point is not used
15822     within the module at all and therefore has no impact on the ABI.
15823     This is the default.
15824
15825'1 - Double-precision'
15826     This variant indicates that double-precision support is used.  For
15827     64-bit ABIs this means that 64-bit wide floating-point registers
15828     are required.  For 32-bit ABIs this means that 32-bit wide
15829     floating-point registers are required and double-precision
15830     operations use pairs of registers.
15831
15832'2 - Single-precision'
15833     This variant indicates that single-precision support is used.
15834     Double precision operations will be supported via soft-float
15835     routines.
15836
15837'3 - Soft-float'
15838     This variant indicates that although floating-point support is used
15839     all operations are emulated in software.  This means the ABI is
15840     modified to pass all floating-point data in general-purpose
15841     registers.
15842
15843'4 - Deprecated'
15844     This variant existed as an initial attempt at supporting 64-bit
15845     wide floating-point registers for O32 ABI on a MIPS32r2 CPU. This
15846     has been superseded by 5, 6 and 7.
15847
15848'5 - Double-precision 32-bit CPU, 32-bit or 64-bit FPU'
15849     This variant is used by 32-bit ABIs to indicate that the
15850     floating-point code in the module has been designed to operate
15851     correctly with either 32-bit wide or 64-bit wide floating-point
15852     registers.  Double-precision support is used.  Only O32 currently
15853     supports this variant and requires a minimum architecture of MIPS
15854     II.
15855
15856'6 - Double-precision 32-bit FPU, 64-bit FPU'
15857     This variant is used by 32-bit ABIs to indicate that the
15858     floating-point code in the module requires 64-bit wide
15859     floating-point registers.  Double-precision support is used.  Only
15860     O32 currently supports this variant and requires a minimum
15861     architecture of MIPS32r2.
15862
15863'7 - Double-precision compat 32-bit FPU, 64-bit FPU'
15864     This variant is used by 32-bit ABIs to indicate that the
15865     floating-point code in the module requires 64-bit wide
15866     floating-point registers.  Double-precision support is used.  This
15867     differs from the previous ABI as it restricts use of odd-numbered
15868     single-precision registers.  Only O32 currently supports this
15869     variant and requires a minimum architecture of MIPS32r2.
15870
15871
15872File: as.info,  Node: MIPS FP ABI Selection,  Next: MIPS FP ABI Compatibility,  Prev: MIPS FP ABI Variants,  Up: MIPS FP ABIs
15873
158749.27.9.3 Automatic selection of FP ABI
15875......................................
15876
15877In order to simplify and add safety to the process of selecting the
15878correct floating-point ABI, the assembler will automatically infer the
15879correct '.gnu_attribute 4, N' directive based on command-line options
15880and '.module' overrides.  Where an explicit '.gnu_attribute 4, N'
15881directive has been seen then a warning will be raised if it does not
15882match an inferred setting.
15883
15884   The floating-point ABI is inferred as follows.  If '-msoft-float' has
15885been used the module will be marked as soft-float.  If '-msingle-float'
15886has been used then the module will be marked as single-precision.  The
15887remaining ABIs are then selected based on the FP register width.
15888Double-precision is selected if the width of GP and FP registers match
15889and the special double-precision variants for 32-bit ABIs are then
15890selected depending on '-mfpxx', '-mfp64' and '-mno-odd-spreg'.
15891
15892
15893File: as.info,  Node: MIPS FP ABI Compatibility,  Prev: MIPS FP ABI Selection,  Up: MIPS FP ABIs
15894
158959.27.9.4 Linking different FP ABI variants
15896..........................................
15897
15898Modules using the default FP ABI (no floating-point) can be linked with
15899any other (singular) FP ABI variant.
15900
15901   Special compatibility support exists for O32 with the four
15902double-precision FP ABI variants.  The '-mfpxx' FP ABI is specifically
15903designed to be compatible with the standard double-precision ABI and the
15904'-mfp64' FP ABIs.  This makes it desirable for O32 modules to be built
15905as '-mfpxx' to ensure the maximum compatibility with other modules
15906produced for more specific needs.  The only FP ABIs which cannot be
15907linked together are the standard double-precision ABI and the full
15908'-mfp64' ABI with '-modd-spreg'.
15909
15910
15911File: as.info,  Node: MIPS NaN Encodings,  Next: MIPS Option Stack,  Prev: MIPS FP ABIs,  Up: MIPS-Dependent
15912
159139.27.10 Directives to record which NaN encoding is being used
15914-------------------------------------------------------------
15915
15916The IEEE 754 floating-point standard defines two types of not-a-number
15917(NaN) data: "signalling" NaNs and "quiet" NaNs.  The original version of
15918the standard did not specify how these two types should be
15919distinguished.  Most implementations followed the i387 model, in which
15920the first bit of the significand is set for quiet NaNs and clear for
15921signalling NaNs.  However, the original MIPS implementation assigned the
15922opposite meaning to the bit, so that it was set for signalling NaNs and
15923clear for quiet NaNs.
15924
15925   The 2008 revision of the standard formally suggested the i387 choice
15926and as from Sep 2012 the current release of the MIPS architecture
15927therefore optionally supports that form.  Code that uses one NaN
15928encoding would usually be incompatible with code that uses the other NaN
15929encoding, so MIPS ELF objects have a flag ('EF_MIPS_NAN2008') to record
15930which encoding is being used.
15931
15932   Assembly files can use the '.nan' directive to select between the two
15933encodings.  '.nan 2008' says that the assembly file uses the IEEE
15934754-2008 encoding while '.nan legacy' says that the file uses the
15935original MIPS encoding.  If several '.nan' directives are given, the
15936final setting is the one that is used.
15937
15938   The command-line options '-mnan=legacy' and '-mnan=2008' can be used
15939instead of '.nan legacy' and '.nan 2008' respectively.  However, any
15940'.nan' directive overrides the command-line setting.
15941
15942   '.nan legacy' is the default if no '.nan' directive or '-mnan' option
15943is given.
15944
15945   Note that GNU 'as' does not produce NaNs itself and therefore these
15946directives do not affect code generation.  They simply control the
15947setting of the 'EF_MIPS_NAN2008' flag.
15948
15949   Traditional MIPS assemblers do not support these directives.
15950
15951
15952File: as.info,  Node: MIPS Option Stack,  Next: MIPS ASE Instruction Generation Overrides,  Prev: MIPS NaN Encodings,  Up: MIPS-Dependent
15953
159549.27.11 Directives to save and restore options
15955----------------------------------------------
15956
15957The directives '.set push' and '.set pop' may be used to save and
15958restore the current settings for all the options which are controlled by
15959'.set'.  The '.set push' directive saves the current settings on a
15960stack.  The '.set pop' directive pops the stack and restores the
15961settings.
15962
15963   These directives can be useful inside an macro which must change an
15964option such as the ISA level or instruction reordering but does not want
15965to change the state of the code which invoked the macro.
15966
15967   Traditional MIPS assemblers do not support these directives.
15968
15969
15970File: as.info,  Node: MIPS ASE Instruction Generation Overrides,  Next: MIPS Floating-Point,  Prev: MIPS Option Stack,  Up: MIPS-Dependent
15971
159729.27.12 Directives to control generation of MIPS ASE instructions
15973-----------------------------------------------------------------
15974
15975The directive '.set mips3d' makes the assembler accept instructions from
15976the MIPS-3D Application Specific Extension from that point on in the
15977assembly.  The '.set nomips3d' directive prevents MIPS-3D instructions
15978from being accepted.
15979
15980   The directive '.set smartmips' makes the assembler accept
15981instructions from the SmartMIPS Application Specific Extension to the
15982MIPS32 ISA from that point on in the assembly.  The '.set nosmartmips'
15983directive prevents SmartMIPS instructions from being accepted.
15984
15985   The directive '.set mdmx' makes the assembler accept instructions
15986from the MDMX Application Specific Extension from that point on in the
15987assembly.  The '.set nomdmx' directive prevents MDMX instructions from
15988being accepted.
15989
15990   The directive '.set dsp' makes the assembler accept instructions from
15991the DSP Release 1 Application Specific Extension from that point on in
15992the assembly.  The '.set nodsp' directive prevents DSP Release 1
15993instructions from being accepted.
15994
15995   The directive '.set dspr2' makes the assembler accept instructions
15996from the DSP Release 2 Application Specific Extension from that point on
15997in the assembly.  This directive implies '.set dsp'.  The '.set nodspr2'
15998directive prevents DSP Release 2 instructions from being accepted.
15999
16000   The directive '.set dspr3' makes the assembler accept instructions
16001from the DSP Release 3 Application Specific Extension from that point on
16002in the assembly.  This directive implies '.set dsp' and '.set dspr2'.
16003The '.set nodspr3' directive prevents DSP Release 3 instructions from
16004being accepted.
16005
16006   The directive '.set mt' makes the assembler accept instructions from
16007the MT Application Specific Extension from that point on in the
16008assembly.  The '.set nomt' directive prevents MT instructions from being
16009accepted.
16010
16011   The directive '.set mcu' makes the assembler accept instructions from
16012the MCU Application Specific Extension from that point on in the
16013assembly.  The '.set nomcu' directive prevents MCU instructions from
16014being accepted.
16015
16016   The directive '.set msa' makes the assembler accept instructions from
16017the MIPS SIMD Architecture Extension from that point on in the assembly.
16018The '.set nomsa' directive prevents MSA instructions from being
16019accepted.
16020
16021   The directive '.set virt' makes the assembler accept instructions
16022from the Virtualization Application Specific Extension from that point
16023on in the assembly.  The '.set novirt' directive prevents Virtualization
16024instructions from being accepted.
16025
16026   The directive '.set xpa' makes the assembler accept instructions from
16027the XPA Extension from that point on in the assembly.  The '.set noxpa'
16028directive prevents XPA instructions from being accepted.
16029
16030   The directive '.set mips16e2' makes the assembler accept instructions
16031from the MIPS16e2 Application Specific Extension from that point on in
16032the assembly, whenever in MIPS16 mode.  The '.set nomips16e2' directive
16033prevents MIPS16e2 instructions from being accepted, in MIPS16 mode.
16034Neither directive affects the state of MIPS16 mode being active itself
16035which has separate controls.
16036
16037   The directive '.set crc' makes the assembler accept instructions from
16038the CRC Extension from that point on in the assembly.  The '.set nocrc'
16039directive prevents CRC instructions from being accepted.
16040
16041   The directive '.set ginv' makes the assembler accept instructions
16042from the GINV Extension from that point on in the assembly.  The '.set
16043noginv' directive prevents GINV instructions from being accepted.
16044
16045   The directive '.set loongson-mmi' makes the assembler accept
16046instructions from the MMI Extension from that point on in the assembly.
16047The '.set noloongson-mmi' directive prevents MMI instructions from being
16048accepted.
16049
16050   The directive '.set loongson-cam' makes the assembler accept
16051instructions from the Loongson CAM from that point on in the assembly.
16052The '.set noloongson-cam' directive prevents Loongson CAM instructions
16053from being accepted.
16054
16055   The directive '.set loongson-ext' makes the assembler accept
16056instructions from the Loongson EXT from that point on in the assembly.
16057The '.set noloongson-ext' directive prevents Loongson EXT instructions
16058from being accepted.
16059
16060   The directive '.set loongson-ext2' makes the assembler accept
16061instructions from the Loongson EXT2 from that point on in the assembly.
16062This directive implies '.set loognson-ext'.  The '.set noloongson-ext2'
16063directive prevents Loongson EXT2 instructions from being accepted.
16064
16065   Traditional MIPS assemblers do not support these directives.
16066
16067
16068File: as.info,  Node: MIPS Floating-Point,  Next: MIPS Syntax,  Prev: MIPS ASE Instruction Generation Overrides,  Up: MIPS-Dependent
16069
160709.27.13 Directives to override floating-point options
16071-----------------------------------------------------
16072
16073The directives '.set softfloat' and '.set hardfloat' provide finer
16074control of disabling and enabling float-point instructions.  These
16075directives always override the default (that hard-float instructions are
16076accepted) or the command-line options ('-msoft-float' and
16077'-mhard-float').
16078
16079   The directives '.set singlefloat' and '.set doublefloat' provide
16080finer control of disabling and enabling double-precision float-point
16081operations.  These directives always override the default (that
16082double-precision operations are accepted) or the command-line options
16083('-msingle-float' and '-mdouble-float').
16084
16085   Traditional MIPS assemblers do not support these directives.
16086
16087
16088File: as.info,  Node: MIPS Syntax,  Prev: MIPS Floating-Point,  Up: MIPS-Dependent
16089
160909.27.14 Syntactical considerations for the MIPS assembler
16091---------------------------------------------------------
16092
16093* Menu:
16094
16095* MIPS-Chars::                Special Characters
16096
16097
16098File: as.info,  Node: MIPS-Chars,  Up: MIPS Syntax
16099
161009.27.14.1 Special Characters
16101............................
16102
16103The presence of a '#' on a line indicates the start of a comment that
16104extends to the end of the current line.
16105
16106   If a '#' appears as the first character of a line, the whole line is
16107treated as a comment, but in this case the line can also be a logical
16108line number directive (*note Comments::) or a preprocessor control
16109command (*note Preprocessing::).
16110
16111   The ';' character can be used to separate statements on the same
16112line.
16113
16114
16115File: as.info,  Node: MMIX-Dependent,  Next: MSP430-Dependent,  Prev: MIPS-Dependent,  Up: Machine Dependencies
16116
161179.28 MMIX Dependent Features
16118============================
16119
16120* Menu:
16121
16122* MMIX-Opts::              Command-line Options
16123* MMIX-Expand::            Instruction expansion
16124* MMIX-Syntax::            Syntax
16125* MMIX-mmixal::		   Differences to 'mmixal' syntax and semantics
16126
16127
16128File: as.info,  Node: MMIX-Opts,  Next: MMIX-Expand,  Up: MMIX-Dependent
16129
161309.28.1 Command-line Options
16131---------------------------
16132
16133The MMIX version of 'as' has some machine-dependent options.
16134
16135   When '--fixed-special-register-names' is specified, only the register
16136names specified in *note MMIX-Regs:: are recognized in the instructions
16137'PUT' and 'GET'.
16138
16139   You can use the '--globalize-symbols' to make all symbols global.
16140This option is useful when splitting up a 'mmixal' program into several
16141files.
16142
16143   The '--gnu-syntax' turns off most syntax compatibility with 'mmixal'.
16144Its usability is currently doubtful.
16145
16146   The '--relax' option is not fully supported, but will eventually make
16147the object file prepared for linker relaxation.
16148
16149   If you want to avoid inadvertently calling a predefined symbol and
16150would rather get an error, for example when using 'as' with a compiler
16151or other machine-generated code, specify '--no-predefined-syms'.  This
16152turns off built-in predefined definitions of all such symbols, including
16153rounding-mode symbols, segment symbols, 'BIT' symbols, and 'TRAP'
16154symbols used in 'mmix' "system calls".  It also turns off predefined
16155special-register names, except when used in 'PUT' and 'GET'
16156instructions.
16157
16158   By default, some instructions are expanded to fit the size of the
16159operand or an external symbol (*note MMIX-Expand::).  By passing
16160'--no-expand', no such expansion will be done, instead causing errors at
16161link time if the operand does not fit.
16162
16163   The 'mmixal' documentation (*note mmixsite::) specifies that global
16164registers allocated with the 'GREG' directive (*note MMIX-greg::) and
16165initialized to the same non-zero value, will refer to the same global
16166register.  This isn't strictly enforceable in 'as' since the final
16167addresses aren't known until link-time, but it will do an effort unless
16168the '--no-merge-gregs' option is specified.  (Register merging isn't yet
16169implemented in 'ld'.)
16170
16171   'as' will warn every time it expands an instruction to fit an operand
16172unless the option '-x' is specified.  It is believed that this behaviour
16173is more useful than just mimicking 'mmixal''s behaviour, in which
16174instructions are only expanded if the '-x' option is specified, and
16175assembly fails otherwise, when an instruction needs to be expanded.  It
16176needs to be kept in mind that 'mmixal' is both an assembler and linker,
16177while 'as' will expand instructions that at link stage can be
16178contracted.  (Though linker relaxation isn't yet implemented in 'ld'.)
16179The option '-x' also implies '--linker-allocated-gregs'.
16180
16181   If instruction expansion is enabled, 'as' can expand a 'PUSHJ'
16182instruction into a series of instructions.  The shortest expansion is to
16183not expand it, but just mark the call as redirectable to a stub, which
16184'ld' creates at link-time, but only if the original 'PUSHJ' instruction
16185is found not to reach the target.  The stub consists of the necessary
16186instructions to form a jump to the target.  This happens if 'as' can
16187assert that the 'PUSHJ' instruction can reach such a stub.  The option
16188'--no-pushj-stubs' disables this shorter expansion, and the longer
16189series of instructions is then created at assembly-time.  The option
16190'--no-stubs' is a synonym, intended for compatibility with future
16191releases, where generation of stubs for other instructions may be
16192implemented.
16193
16194   Usually a two-operand-expression (*note GREG-base::) without a
16195matching 'GREG' directive is treated as an error by 'as'.  When the
16196option '--linker-allocated-gregs' is in effect, they are instead passed
16197through to the linker, which will allocate as many global registers as
16198is needed.
16199
16200
16201File: as.info,  Node: MMIX-Expand,  Next: MMIX-Syntax,  Prev: MMIX-Opts,  Up: MMIX-Dependent
16202
162039.28.2 Instruction expansion
16204----------------------------
16205
16206When 'as' encounters an instruction with an operand that is either not
16207known or does not fit the operand size of the instruction, 'as' (and
16208'ld') will expand the instruction into a sequence of instructions
16209semantically equivalent to the operand fitting the instruction.
16210Expansion will take place for the following instructions:
16211
16212'GETA'
16213     Expands to a sequence of four instructions: 'SETL', 'INCML',
16214     'INCMH' and 'INCH'.  The operand must be a multiple of four.
16215Conditional branches
16216     A branch instruction is turned into a branch with the complemented
16217     condition and prediction bit over five instructions; four
16218     instructions setting '$255' to the operand value, which like with
16219     'GETA' must be a multiple of four, and a final 'GO $255,$255,0'.
16220'PUSHJ'
16221     Similar to expansion for conditional branches; four instructions
16222     set '$255' to the operand value, followed by a 'PUSHGO
16223     $255,$255,0'.
16224'JMP'
16225     Similar to conditional branches and 'PUSHJ'.  The final instruction
16226     is 'GO $255,$255,0'.
16227
16228   The linker 'ld' is expected to shrink these expansions for code
16229assembled with '--relax' (though not currently implemented).
16230
16231
16232File: as.info,  Node: MMIX-Syntax,  Next: MMIX-mmixal,  Prev: MMIX-Expand,  Up: MMIX-Dependent
16233
162349.28.3 Syntax
16235-------------
16236
16237The assembly syntax is supposed to be upward compatible with that
16238described in Sections 1.3 and 1.4 of 'The Art of Computer Programming,
16239Volume 1'.  Draft versions of those chapters as well as other MMIX
16240information is located at
16241<http://www-cs-faculty.stanford.edu/~knuth/mmix-news.html>.  Most code
16242examples from the mmixal package located there should work unmodified
16243when assembled and linked as single files, with a few noteworthy
16244exceptions (*note MMIX-mmixal::).
16245
16246   Before an instruction is emitted, the current location is aligned to
16247the next four-byte boundary.  If a label is defined at the beginning of
16248the line, its value will be the aligned value.
16249
16250   In addition to the traditional hex-prefix '0x', a hexadecimal number
16251can also be specified by the prefix character '#'.
16252
16253   After all operands to an MMIX instruction or directive have been
16254specified, the rest of the line is ignored, treated as a comment.
16255
16256* Menu:
16257
16258* MMIX-Chars::		        Special Characters
16259* MMIX-Symbols::		Symbols
16260* MMIX-Regs::			Register Names
16261* MMIX-Pseudos::		Assembler Directives
16262
16263
16264File: as.info,  Node: MMIX-Chars,  Next: MMIX-Symbols,  Up: MMIX-Syntax
16265
162669.28.3.1 Special Characters
16267...........................
16268
16269The characters '*' and '#' are line comment characters; each start a
16270comment at the beginning of a line, but only at the beginning of a line.
16271A '#' prefixes a hexadecimal number if found elsewhere on a line.  If a
16272'#' appears at the start of a line the whole line is treated as a
16273comment, but the line can also act as a logical line number directive
16274(*note Comments::) or a preprocessor control command (*note
16275Preprocessing::).
16276
16277   Two other characters, '%' and '!', each start a comment anywhere on
16278the line.  Thus you can't use the 'modulus' and 'not' operators in
16279expressions normally associated with these two characters.
16280
16281   A ';' is a line separator, treated as a new-line, so separate
16282instructions can be specified on a single line.
16283
16284
16285File: as.info,  Node: MMIX-Symbols,  Next: MMIX-Regs,  Prev: MMIX-Chars,  Up: MMIX-Syntax
16286
162879.28.3.2 Symbols
16288................
16289
16290The character ':' is permitted in identifiers.  There are two exceptions
16291to it being treated as any other symbol character: if a symbol begins
16292with ':', it means that the symbol is in the global namespace and that
16293the current prefix should not be prepended to that symbol (*note
16294MMIX-prefix::).  The ':' is then not considered part of the symbol.  For
16295a symbol in the label position (first on a line), a ':' at the end of a
16296symbol is silently stripped off.  A label is permitted, but not
16297required, to be followed by a ':', as with many other assembly formats.
16298
16299   The character '@' in an expression, is a synonym for '.', the current
16300location.
16301
16302   In addition to the common forward and backward local symbol formats
16303(*note Symbol Names::), they can be specified with upper-case 'B' and
16304'F', as in '8B' and '9F'.  A local label defined for the current
16305position is written with a 'H' appended to the number:
16306     3H LDB $0,$1,2
16307   This and traditional local-label formats cannot be mixed: a label
16308must be defined and referred to using the same format.
16309
16310   There's a minor caveat: just as for the ordinary local symbols, the
16311local symbols are translated into ordinary symbols using control
16312characters are to hide the ordinal number of the symbol.  Unfortunately,
16313these symbols are not translated back in error messages.  Thus you may
16314see confusing error messages when local symbols are used.  Control
16315characters '\003' (control-C) and '\004' (control-D) are used for the
16316MMIX-specific local-symbol syntax.
16317
16318   The symbol 'Main' is handled specially; it is always global.
16319
16320   By defining the symbols '__.MMIX.start..text' and
16321'__.MMIX.start..data', the address of respectively the '.text' and
16322'.data' segments of the final program can be defined, though when
16323linking more than one object file, the code or data in the object file
16324containing the symbol is not guaranteed to be start at that position;
16325just the final executable.  *Note MMIX-loc::.
16326
16327
16328File: as.info,  Node: MMIX-Regs,  Next: MMIX-Pseudos,  Prev: MMIX-Symbols,  Up: MMIX-Syntax
16329
163309.28.3.3 Register names
16331.......................
16332
16333Local and global registers are specified as '$0' to '$255'.  The
16334recognized special register names are 'rJ', 'rA', 'rB', 'rC', 'rD',
16335'rE', 'rF', 'rG', 'rH', 'rI', 'rK', 'rL', 'rM', 'rN', 'rO', 'rP', 'rQ',
16336'rR', 'rS', 'rT', 'rU', 'rV', 'rW', 'rX', 'rY', 'rZ', 'rBB', 'rTT',
16337'rWW', 'rXX', 'rYY' and 'rZZ'.  A leading ':' is optional for special
16338register names.
16339
16340   Local and global symbols can be equated to register names and used in
16341place of ordinary registers.
16342
16343   Similarly for special registers, local and global symbols can be
16344used.  Also, symbols equated from numbers and constant expressions are
16345allowed in place of a special register, except when either of the
16346options '--no-predefined-syms' and '--fixed-special-register-names' are
16347specified.  Then only the special register names above are allowed for
16348the instructions having a special register operand; 'GET' and 'PUT'.
16349
16350
16351File: as.info,  Node: MMIX-Pseudos,  Prev: MMIX-Regs,  Up: MMIX-Syntax
16352
163539.28.3.4 Assembler Directives
16354.............................
16355
16356'LOC'
16357
16358     The 'LOC' directive sets the current location to the value of the
16359     operand field, which may include changing sections.  If the operand
16360     is a constant, the section is set to either '.data' if the value is
16361     '0x2000000000000000' or larger, else it is set to '.text'.  Within
16362     a section, the current location may only be changed to
16363     monotonically higher addresses.  A LOC expression must be a
16364     previously defined symbol or a "pure" constant.
16365
16366     An example, which sets the label PREV to the current location, and
16367     updates the current location to eight bytes forward:
16368          prev LOC @+8
16369
16370     When a LOC has a constant as its operand, a symbol
16371     '__.MMIX.start..text' or '__.MMIX.start..data' is defined depending
16372     on the address as mentioned above.  Each such symbol is interpreted
16373     as special by the linker, locating the section at that address.
16374     Note that if multiple files are linked, the first object file with
16375     that section will be mapped to that address (not necessarily the
16376     file with the LOC definition).
16377
16378'LOCAL'
16379
16380     Example:
16381           LOCAL external_symbol
16382           LOCAL 42
16383           .local asymbol
16384
16385     This directive-operation generates a link-time assertion that the
16386     operand does not correspond to a global register.  The operand is
16387     an expression that at link-time resolves to a register symbol or a
16388     number.  A number is treated as the register having that number.
16389     There is one restriction on the use of this directive: the
16390     pseudo-directive must be placed in a section with contents, code or
16391     data.
16392
16393'IS'
16394
16395     The 'IS' directive:
16396          asymbol IS an_expression
16397     sets the symbol 'asymbol' to 'an_expression'.  A symbol may not be
16398     set more than once using this directive.  Local labels may be set
16399     using this directive, for example:
16400          5H IS @+4
16401
16402'GREG'
16403
16404     This directive reserves a global register, gives it an initial
16405     value and optionally gives it a symbolic name.  Some examples:
16406
16407          areg GREG
16408          breg GREG data_value
16409               GREG data_buffer
16410               .greg creg, another_data_value
16411
16412     The symbolic register name can be used in place of a (non-special)
16413     register.  If a value isn't provided, it defaults to zero.  Unless
16414     the option '--no-merge-gregs' is specified, non-zero registers
16415     allocated with this directive may be eliminated by 'as'; another
16416     register with the same value used in its place.  Any of the
16417     instructions 'CSWAP', 'GO', 'LDA', 'LDBU', 'LDB', 'LDHT', 'LDOU',
16418     'LDO', 'LDSF', 'LDTU', 'LDT', 'LDUNC', 'LDVTS', 'LDWU', 'LDW',
16419     'PREGO', 'PRELD', 'PREST', 'PUSHGO', 'STBU', 'STB', 'STCO', 'STHT',
16420     'STOU', 'STSF', 'STTU', 'STT', 'STUNC', 'SYNCD', 'SYNCID', can have
16421     a value nearby an initial value in place of its second and third
16422     operands.  Here, "nearby" is defined as within the range 0...255
16423     from the initial value of such an allocated register.
16424
16425          buffer1 BYTE 0,0,0,0,0
16426          buffer2 BYTE 0,0,0,0,0
16427           ...
16428           GREG buffer1
16429           LDOU $42,buffer2
16430     In the example above, the 'Y' field of the 'LDOUI' instruction
16431     (LDOU with a constant Z) will be replaced with the global register
16432     allocated for 'buffer1', and the 'Z' field will have the value 5,
16433     the offset from 'buffer1' to 'buffer2'.  The result is equivalent
16434     to this code:
16435          buffer1 BYTE 0,0,0,0,0
16436          buffer2 BYTE 0,0,0,0,0
16437           ...
16438          tmpreg GREG buffer1
16439           LDOU $42,tmpreg,(buffer2-buffer1)
16440
16441     Global registers allocated with this directive are allocated in
16442     order higher-to-lower within a file.  Other than that, the exact
16443     order of register allocation and elimination is undefined.  For
16444     example, the order is undefined when more than one file with such
16445     directives are linked together.  With the options '-x' and
16446     '--linker-allocated-gregs', 'GREG' directives for two-operand cases
16447     like the one mentioned above can be omitted.  Sufficient global
16448     registers will then be allocated by the linker.
16449
16450'BYTE'
16451
16452     The 'BYTE' directive takes a series of operands separated by a
16453     comma.  If an operand is a string (*note Strings::), each character
16454     of that string is emitted as a byte.  Other operands must be
16455     constant expressions without forward references, in the range
16456     0...255.  If you need operands having expressions with forward
16457     references, use '.byte' (*note Byte::).  An operand can be omitted,
16458     defaulting to a zero value.
16459
16460'WYDE'
16461'TETRA'
16462'OCTA'
16463
16464     The directives 'WYDE', 'TETRA' and 'OCTA' emit constants of two,
16465     four and eight bytes size respectively.  Before anything else
16466     happens for the directive, the current location is aligned to the
16467     respective constant-size boundary.  If a label is defined at the
16468     beginning of the line, its value will be that after the alignment.
16469     A single operand can be omitted, defaulting to a zero value emitted
16470     for the directive.  Operands can be expressed as strings (*note
16471     Strings::), in which case each character in the string is emitted
16472     as a separate constant of the size indicated by the directive.
16473
16474'PREFIX'
16475
16476     The 'PREFIX' directive sets a symbol name prefix to be prepended to
16477     all symbols (except local symbols, *note MMIX-Symbols::), that are
16478     not prefixed with ':', until the next 'PREFIX' directive.  Such
16479     prefixes accumulate.  For example,
16480           PREFIX a
16481           PREFIX b
16482          c IS 0
16483     defines a symbol 'abc' with the value 0.
16484
16485'BSPEC'
16486'ESPEC'
16487
16488     A pair of 'BSPEC' and 'ESPEC' directives delimit a section of
16489     special contents (without specified semantics).  Example:
16490           BSPEC 42
16491           TETRA 1,2,3
16492           ESPEC
16493     The single operand to 'BSPEC' must be number in the range 0...255.
16494     The 'BSPEC' number 80 is used by the GNU binutils implementation.
16495
16496
16497File: as.info,  Node: MMIX-mmixal,  Prev: MMIX-Syntax,  Up: MMIX-Dependent
16498
164999.28.4 Differences to 'mmixal'
16500------------------------------
16501
16502The binutils 'as' and 'ld' combination has a few differences in function
16503compared to 'mmixal' (*note mmixsite::).
16504
16505   The replacement of a symbol with a GREG-allocated register (*note
16506GREG-base::) is not handled the exactly same way in 'as' as in 'mmixal'.
16507This is apparent in the 'mmixal' example file 'inout.mms', where
16508different registers with different offsets, eventually yielding the same
16509address, are used in the first instruction.  This type of difference
16510should however not affect the function of any program unless it has
16511specific assumptions about the allocated register number.
16512
16513   Line numbers (in the 'mmo' object format) are currently not
16514supported.
16515
16516   Expression operator precedence is not that of mmixal: operator
16517precedence is that of the C programming language.  It's recommended to
16518use parentheses to explicitly specify wanted operator precedence
16519whenever more than one type of operators are used.
16520
16521   The serialize unary operator '&', the fractional division operator
16522'//', the logical not operator '!' and the modulus operator '%' are not
16523available.
16524
16525   Symbols are not global by default, unless the option
16526'--globalize-symbols' is passed.  Use the '.global' directive to
16527globalize symbols (*note Global::).
16528
16529   Operand syntax is a bit stricter with 'as' than 'mmixal'.  For
16530example, you can't say 'addu 1,2,3', instead you must write 'addu
16531$1,$2,3'.
16532
16533   You can't LOC to a lower address than those already visited (i.e.,
16534"backwards").
16535
16536   A LOC directive must come before any emitted code.
16537
16538   Predefined symbols are visible as file-local symbols after use.  (In
16539the ELF file, that is--the linked mmo file has no notion of a file-local
16540symbol.)
16541
16542   Some mapping of constant expressions to sections in LOC expressions
16543is attempted, but that functionality is easily confused and should be
16544avoided unless compatibility with 'mmixal' is required.  A LOC
16545expression to '0x2000000000000000' or higher, maps to the '.data'
16546section and lower addresses map to the '.text' section (*note
16547MMIX-loc::).
16548
16549   The code and data areas are each contiguous.  Sparse programs with
16550far-away LOC directives will take up the same amount of space as a
16551contiguous program with zeros filled in the gaps between the LOC
16552directives.  If you need sparse programs, you might try and get the
16553wanted effect with a linker script and splitting up the code parts into
16554sections (*note Section::).  Assembly code for this, to be compatible
16555with 'mmixal', would look something like:
16556      .if 0
16557      LOC away_expression
16558      .else
16559      .section away,"ax"
16560      .fi
16561   'as' will not execute the LOC directive and 'mmixal' ignores the
16562lines with '.'.  This construct can be used generally to help
16563compatibility.
16564
16565   Symbols can't be defined twice-not even to the same value.
16566
16567   Instruction mnemonics are recognized case-insensitive, though the
16568'IS' and 'GREG' pseudo-operations must be specified in upper-case
16569characters.
16570
16571   There's no unicode support.
16572
16573   The following is a list of programs in 'mmix.tar.gz', available at
16574<http://www-cs-faculty.stanford.edu/~knuth/mmix-news.html>, last checked
16575with the version dated 2001-08-25 (md5sum
16576c393470cfc86fac040487d22d2bf0172) that assemble with 'mmixal' but do not
16577assemble with 'as':
16578
16579'silly.mms'
16580     LOC to a previous address.
16581'sim.mms'
16582     Redefines symbol 'Done'.
16583'test.mms'
16584     Uses the serial operator '&'.
16585
16586
16587File: as.info,  Node: MSP430-Dependent,  Next: NDS32-Dependent,  Prev: MMIX-Dependent,  Up: Machine Dependencies
16588
165899.29 MSP 430 Dependent Features
16590===============================
16591
16592* Menu:
16593
16594* MSP430 Options::              Options
16595* MSP430 Syntax::               Syntax
16596* MSP430 Floating Point::       Floating Point
16597* MSP430 Directives::           MSP 430 Machine Directives
16598* MSP430 Opcodes::              Opcodes
16599* MSP430 Profiling Capability::	Profiling Capability
16600
16601
16602File: as.info,  Node: MSP430 Options,  Next: MSP430 Syntax,  Up: MSP430-Dependent
16603
166049.29.1 Options
16605--------------
16606
16607'-mmcu'
16608     selects the mcu architecture.  If the architecture is 430Xv2 then
16609     this also enables NOP generation unless the '-mN' is also
16610     specified.
16611
16612'-mcpu'
16613     selects the cpu architecture.  If the architecture is 430Xv2 then
16614     this also enables NOP generation unless the '-mN' is also
16615     specified.
16616
16617'-msilicon-errata=NAME[,NAME...]'
16618     Implements a fixup for named silicon errata.  Multiple silicon
16619     errata can be specified by multiple uses of the '-msilicon-errata'
16620     option and/or by including the errata names, separated by commas,
16621     on an individual '-msilicon-errata' option.  Errata names currently
16622     recognised by the assembler are:
16623
16624     'cpu4'
16625          'PUSH #4' and 'PUSH #8' need longer encodings on the MSP430.
16626          This option is enabled by default, and cannot be disabled.
16627     'cpu8'
16628          Do not set the 'SP' to an odd value.
16629     'cpu11'
16630          Do not update the 'SR' and the 'PC' in the same instruction.
16631     'cpu12'
16632          Do not use the 'PC' in a 'CMP' or 'BIT' instruction.
16633     'cpu13'
16634          Do not use an arithmetic instruction to modify the 'SR'.
16635     'cpu19'
16636          Insert 'NOP' after 'CPUOFF'.
16637
16638'-msilicon-errata-warn=NAME[,NAME...]'
16639     Like the '-msilicon-errata' option except that instead of fixing
16640     the specified errata, a warning message is issued instead.  This
16641     option can be used alongside '-msilicon-errata' to generate
16642     messages whenever a problem is fixed, or on its own in order to
16643     inspect code for potential problems.
16644
16645'-mP'
16646     enables polymorph instructions handler.
16647
16648'-mQ'
16649     enables relaxation at assembly time.  DANGEROUS!
16650
16651'-ml'
16652     indicates that the input uses the large code model.
16653
16654'-mn'
16655     enables the generation of a NOP instruction following any
16656     instruction that might change the interrupts enabled/disabled
16657     state.  The pipelined nature of the MSP430 core means that any
16658     instruction that changes the interrupt state ('EINT', 'DINT', 'BIC
16659     #8, SR', 'BIS #8, SR' or 'MOV.W <>, SR') must be followed by a NOP
16660     instruction in order to ensure the correct processing of
16661     interrupts.  By default it is up to the programmer to supply these
16662     NOP instructions, but this command-line option enables the
16663     automatic insertion by the assembler, if they are missing.
16664
16665'-mN'
16666     disables the generation of a NOP instruction following any
16667     instruction that might change the interrupts enabled/disabled
16668     state.  This is the default behaviour.
16669
16670'-my'
16671     tells the assembler to generate a warning message if a NOP does not
16672     immediately follow an instruction that enables or disables
16673     interrupts.  This is the default.
16674
16675     Note that this option can be stacked with the '-mn' option so that
16676     the assembler will both warn about missing NOP instructions and
16677     then insert them automatically.
16678
16679'-mY'
16680     disables warnings about missing NOP instructions.
16681
16682'-md'
16683     mark the object file as one that requires data to copied from ROM
16684     to RAM at execution startup.  Disabled by default.
16685
16686'-mdata-region=REGION'
16687     Select the region data will be placed in.  Region placement is
16688     performed by the compiler and linker.  The only effect this option
16689     will have on the assembler is that if UPPER or EITHER is selected,
16690     then the symbols to initialise high data and bss will be defined.
16691     Valid REGION values are:
16692     'none'
16693     'lower'
16694     'upper'
16695     'either'
16696
16697
16698File: as.info,  Node: MSP430 Syntax,  Next: MSP430 Floating Point,  Prev: MSP430 Options,  Up: MSP430-Dependent
16699
167009.29.2 Syntax
16701-------------
16702
16703* Menu:
16704
16705* MSP430-Macros::		Macros
16706* MSP430-Chars::                Special Characters
16707* MSP430-Regs::                 Register Names
16708* MSP430-Ext::			Assembler Extensions
16709
16710
16711File: as.info,  Node: MSP430-Macros,  Next: MSP430-Chars,  Up: MSP430 Syntax
16712
167139.29.2.1 Macros
16714...............
16715
16716The macro syntax used on the MSP 430 is like that described in the MSP
16717430 Family Assembler Specification.  Normal 'as' macros should still
16718work.
16719
16720   Additional built-in macros are:
16721
16722'llo(exp)'
16723     Extracts least significant word from 32-bit expression 'exp'.
16724
16725'lhi(exp)'
16726     Extracts most significant word from 32-bit expression 'exp'.
16727
16728'hlo(exp)'
16729     Extracts 3rd word from 64-bit expression 'exp'.
16730
16731'hhi(exp)'
16732     Extracts 4rd word from 64-bit expression 'exp'.
16733
16734   They normally being used as an immediate source operand.
16735         mov	#llo(1), r10	;	== mov	#1, r10
16736         mov	#lhi(1), r10	;	== mov	#0, r10
16737
16738
16739File: as.info,  Node: MSP430-Chars,  Next: MSP430-Regs,  Prev: MSP430-Macros,  Up: MSP430 Syntax
16740
167419.29.2.2 Special Characters
16742...........................
16743
16744A semicolon (';') appearing anywhere on a line starts a comment that
16745extends to the end of that line.
16746
16747   If a '#' appears as the first character of a line then the whole line
16748is treated as a comment, but it can also be a logical line number
16749directive (*note Comments::) or a preprocessor control command (*note
16750Preprocessing::).
16751
16752   Multiple statements can appear on the same line provided that they
16753are separated by the '{' character.
16754
16755   The character '$' in jump instructions indicates current location and
16756implemented only for TI syntax compatibility.
16757
16758
16759File: as.info,  Node: MSP430-Regs,  Next: MSP430-Ext,  Prev: MSP430-Chars,  Up: MSP430 Syntax
16760
167619.29.2.3 Register Names
16762.......................
16763
16764General-purpose registers are represented by predefined symbols of the
16765form 'rN' (for global registers), where N represents a number between
16766'0' and '15'.  The leading letters may be in either upper or lower case;
16767for example, 'r13' and 'R7' are both valid register names.
16768
16769   Register names 'PC', 'SP' and 'SR' cannot be used as register names
16770and will be treated as variables.  Use 'r0', 'r1', and 'r2' instead.
16771
16772
16773File: as.info,  Node: MSP430-Ext,  Prev: MSP430-Regs,  Up: MSP430 Syntax
16774
167759.29.2.4 Assembler Extensions
16776.............................
16777
16778'@rN'
16779     As destination operand being treated as '0(rn)'
16780
16781'0(rN)'
16782     As source operand being treated as '@rn'
16783
16784'jCOND +N'
16785     Skips next N bytes followed by jump instruction and equivalent to
16786     'jCOND $+N+2'
16787
16788   Also, there are some instructions, which cannot be found in other
16789assemblers.  These are branch instructions, which has different opcodes
16790upon jump distance.  They all got PC relative addressing mode.
16791
16792'beq label'
16793     A polymorph instruction which is 'jeq label' in case if jump
16794     distance within allowed range for cpu's jump instruction.  If not,
16795     this unrolls into a sequence of
16796            jne $+6
16797            br  label
16798
16799'bne label'
16800     A polymorph instruction which is 'jne label' or 'jeq +4; br label'
16801
16802'blt label'
16803     A polymorph instruction which is 'jl label' or 'jge +4; br label'
16804
16805'bltn label'
16806     A polymorph instruction which is 'jn label' or 'jn +2; jmp +4; br
16807     label'
16808
16809'bltu label'
16810     A polymorph instruction which is 'jlo label' or 'jhs +2; br label'
16811
16812'bge label'
16813     A polymorph instruction which is 'jge label' or 'jl +4; br label'
16814
16815'bgeu label'
16816     A polymorph instruction which is 'jhs label' or 'jlo +4; br label'
16817
16818'bgt label'
16819     A polymorph instruction which is 'jeq +2; jge label' or 'jeq +6; jl
16820     +4; br label'
16821
16822'bgtu label'
16823     A polymorph instruction which is 'jeq +2; jhs label' or 'jeq +6;
16824     jlo +4; br label'
16825
16826'bleu label'
16827     A polymorph instruction which is 'jeq label; jlo label' or 'jeq +2;
16828     jhs +4; br label'
16829
16830'ble label'
16831     A polymorph instruction which is 'jeq label; jl label' or 'jeq +2;
16832     jge +4; br label'
16833
16834'jump label'
16835     A polymorph instruction which is 'jmp label' or 'br label'
16836
16837
16838File: as.info,  Node: MSP430 Floating Point,  Next: MSP430 Directives,  Prev: MSP430 Syntax,  Up: MSP430-Dependent
16839
168409.29.3 Floating Point
16841---------------------
16842
16843The MSP 430 family uses IEEE 32-bit floating-point numbers.
16844
16845
16846File: as.info,  Node: MSP430 Directives,  Next: MSP430 Opcodes,  Prev: MSP430 Floating Point,  Up: MSP430-Dependent
16847
168489.29.4 MSP 430 Machine Directives
16849---------------------------------
16850
16851'.file'
16852     This directive is ignored; it is accepted for compatibility with
16853     other MSP 430 assemblers.
16854
16855          _Warning:_ in other versions of the GNU assembler, '.file' is
16856          used for the directive called '.app-file' in the MSP 430
16857          support.
16858
16859'.line'
16860     This directive is ignored; it is accepted for compatibility with
16861     other MSP 430 assemblers.
16862
16863'.arch'
16864     Sets the target microcontroller in the same way as the '-mmcu'
16865     command-line option.
16866
16867'.cpu'
16868     Sets the target architecture in the same way as the '-mcpu'
16869     command-line option.
16870
16871'.profiler'
16872     This directive instructs assembler to add new profile entry to the
16873     object file.
16874
16875'.refsym'
16876     This directive instructs assembler to add an undefined reference to
16877     the symbol following the directive.  The maximum symbol name length
16878     is 1023 characters.  No relocation is created for this symbol; it
16879     will exist purely for pulling in object files from archives.  Note
16880     that this reloc is not sufficient to prevent garbage collection;
16881     use a KEEP() directive in the linker file to preserve such objects.
16882
16883'.mspabi_attribute'
16884     This directive tells the assembler what the MSPABI build attributes
16885     for this file are.  This is used for validating the command line
16886     options passed to the assembler against the options the original
16887     source file was compiled with.  The expected format is:
16888     '.mspabi_attribute tag_name, tag_value' For example, to set the tag
16889     'OFBA_MSPABI_Tag_ISA' to 'MSP430X': '.mspabi_attribute 4, 2'
16890
16891     See the 'MSP430 EABI, document slaa534' for the details on tag
16892     names and values.
16893
16894
16895File: as.info,  Node: MSP430 Opcodes,  Next: MSP430 Profiling Capability,  Prev: MSP430 Directives,  Up: MSP430-Dependent
16896
168979.29.5 Opcodes
16898--------------
16899
16900'as' implements all the standard MSP 430 opcodes.  No additional
16901pseudo-instructions are needed on this family.
16902
16903   For information on the 430 machine instruction set, see 'MSP430
16904User's Manual, document slau049d', Texas Instrument, Inc.
16905
16906
16907File: as.info,  Node: MSP430 Profiling Capability,  Prev: MSP430 Opcodes,  Up: MSP430-Dependent
16908
169099.29.6 Profiling Capability
16910---------------------------
16911
16912It is a performance hit to use gcc's profiling approach for this tiny
16913target.  Even more - jtag hardware facility does not perform any
16914profiling functions.  However we've got gdb's built-in simulator where
16915we can do anything.
16916
16917   We define new section '.profiler' which holds all profiling
16918information.  We define new pseudo operation '.profiler' which will
16919instruct assembler to add new profile entry to the object file.  Profile
16920should take place at the present address.
16921
16922   Pseudo operation format:
16923
16924   '.profiler flags,function_to_profile [, cycle_corrector, extra]'
16925
16926   where:
16927
16928          'flags' is a combination of the following characters:
16929
16930     's'
16931          function entry
16932     'x'
16933          function exit
16934     'i'
16935          function is in init section
16936     'f'
16937          function is in fini section
16938     'l'
16939          library call
16940     'c'
16941          libc standard call
16942     'd'
16943          stack value demand
16944     'I'
16945          interrupt service routine
16946     'P'
16947          prologue start
16948     'p'
16949          prologue end
16950     'E'
16951          epilogue start
16952     'e'
16953          epilogue end
16954     'j'
16955          long jump / sjlj unwind
16956     'a'
16957          an arbitrary code fragment
16958     't'
16959          extra parameter saved (a constant value like frame size)
16960
16961'function_to_profile'
16962     a function address
16963'cycle_corrector'
16964     a value which should be added to the cycle counter, zero if
16965     omitted.
16966'extra'
16967     any extra parameter, zero if omitted.
16968
16969   For example:
16970     .global fxx
16971     .type fxx,@function
16972     fxx:
16973     .LFrameOffset_fxx=0x08
16974     .profiler "scdP", fxx     ; function entry.
16975     			  ; we also demand stack value to be saved
16976       push r11
16977       push r10
16978       push r9
16979       push r8
16980     .profiler "cdpt",fxx,0, .LFrameOffset_fxx  ; check stack value at this point
16981     					  ; (this is a prologue end)
16982     					  ; note, that spare var filled with
16983     					  ; the farme size
16984       mov r15,r8
16985     ...
16986     .profiler cdE,fxx         ; check stack
16987       pop r8
16988       pop r9
16989       pop r10
16990       pop r11
16991     .profiler xcde,fxx,3      ; exit adds 3 to the cycle counter
16992       ret                     ; cause 'ret' insn takes 3 cycles
16993
16994
16995File: as.info,  Node: NDS32-Dependent,  Next: NiosII-Dependent,  Prev: MSP430-Dependent,  Up: Machine Dependencies
16996
169979.30 NDS32 Dependent Features
16998=============================
16999
17000The NDS32 processors family includes high-performance and low-power
1700132-bit processors for high-end to low-end.  GNU 'as' for NDS32
17002architectures supports NDS32 ISA version 3.  For detail about NDS32
17003instruction set, please see the AndeStar ISA User Manual which is
17004available at http://www.andestech.com/en/index/index.htm
17005
17006* Menu:
17007
17008* NDS32 Options::         Assembler options
17009* NDS32 Syntax::          High-level assembly macros
17010
17011
17012File: as.info,  Node: NDS32 Options,  Next: NDS32 Syntax,  Up: NDS32-Dependent
17013
170149.30.1 NDS32 Options
17015--------------------
17016
17017The NDS32 configurations of GNU 'as' support these special options:
17018
17019'-O1'
17020     Optimize for performance.
17021
17022'-Os'
17023     Optimize for space.
17024
17025'-EL'
17026     Produce little endian data output.
17027
17028'-EB'
17029     Produce little endian data output.
17030
17031'-mpic'
17032     Generate PIC.
17033
17034'-mno-fp-as-gp-relax'
17035     Suppress fp-as-gp relaxation for this file.
17036
17037'-mb2bb-relax'
17038     Back-to-back branch optimization.
17039
17040'-mno-all-relax'
17041     Suppress all relaxation for this file.
17042
17043'-march=<arch name>'
17044     Assemble for architecture <arch name> which could be v3, v3j, v3m,
17045     v3f, v3s, v2, v2j, v2f, v2s.
17046
17047'-mbaseline=<baseline>'
17048     Assemble for baseline <baseline> which could be v2, v3, v3m.
17049
17050'-mfpu-freg=FREG'
17051     Specify a FPU configuration.
17052     '0 8 SP / 4 DP registers'
17053     '1 16 SP / 8 DP registers'
17054     '2 32 SP / 16 DP registers'
17055     '3 32 SP / 32 DP registers'
17056
17057'-mabi=ABI'
17058     Specify a abi version <abi> could be v1, v2, v2fp, v2fpp.
17059
17060'-m[no-]mac'
17061     Enable/Disable Multiply instructions support.
17062
17063'-m[no-]div'
17064     Enable/Disable Divide instructions support.
17065
17066'-m[no-]16bit-ext'
17067     Enable/Disable 16-bit extension
17068
17069'-m[no-]dx-regs'
17070     Enable/Disable d0/d1 registers
17071
17072'-m[no-]perf-ext'
17073     Enable/Disable Performance extension
17074
17075'-m[no-]perf2-ext'
17076     Enable/Disable Performance extension 2
17077
17078'-m[no-]string-ext'
17079     Enable/Disable String extension
17080
17081'-m[no-]reduced-regs'
17082     Enable/Disable Reduced Register configuration (GPR16) option
17083
17084'-m[no-]audio-isa-ext'
17085     Enable/Disable AUDIO ISA extension
17086
17087'-m[no-]fpu-sp-ext'
17088     Enable/Disable FPU SP extension
17089
17090'-m[no-]fpu-dp-ext'
17091     Enable/Disable FPU DP extension
17092
17093'-m[no-]fpu-fma'
17094     Enable/Disable FPU fused-multiply-add instructions
17095
17096'-mall-ext'
17097     Turn on all extensions and instructions support
17098
17099
17100File: as.info,  Node: NDS32 Syntax,  Prev: NDS32 Options,  Up: NDS32-Dependent
17101
171029.30.2 Syntax
17103-------------
17104
17105* Menu:
17106
17107* NDS32-Chars::                Special Characters
17108* NDS32-Regs::                 Register Names
17109* NDS32-Ops::                  Pseudo Instructions
17110
17111
17112File: as.info,  Node: NDS32-Chars,  Next: NDS32-Regs,  Up: NDS32 Syntax
17113
171149.30.2.1 Special Characters
17115...........................
17116
17117Use '#' at column 1 and '!' anywhere in the line except inside quotes.
17118
17119   Multiple instructions in a line are allowed though not recommended
17120and should be separated by ';'.
17121
17122   Assembler is not case-sensitive in general except user defined label.
17123For example, 'jral F1' is different from 'jral f1' while it is the same
17124as 'JRAL F1'.
17125
17126
17127File: as.info,  Node: NDS32-Regs,  Next: NDS32-Ops,  Prev: NDS32-Chars,  Up: NDS32 Syntax
17128
171299.30.2.2 Register Names
17130.......................
17131
17132'General purpose registers (GPR)'
17133     There are 32 32-bit general purpose registers $r0 to $r31.
17134
17135'Accumulators d0 and d1'
17136     64-bit accumulators: $d0.hi, $d0.lo, $d1.hi, and $d1.lo.
17137
17138'Assembler reserved register $ta'
17139     Register $ta ($r15) is reserved for assembler using.
17140
17141'Operating system reserved registers $p0 and $p1'
17142     Registers $p0 ($r26) and $p1 ($r27) are used by operating system as
17143     scratch registers.
17144
17145'Frame pointer $fp'
17146     Register $r28 is regarded as the frame pointer.
17147
17148'Global pointer'
17149     Register $r29 is regarded as the global pointer.
17150
17151'Link pointer'
17152     Register $r30 is regarded as the link pointer.
17153
17154'Stack pointer'
17155     Register $r31 is regarded as the stack pointer.
17156
17157
17158File: as.info,  Node: NDS32-Ops,  Prev: NDS32-Regs,  Up: NDS32 Syntax
17159
171609.30.2.3 Pseudo Instructions
17161............................
17162
17163'li rt5,imm32'
17164     load 32-bit integer into register rt5.  'sethi rt5,hi20(imm32)' and
17165     then 'ori rt5,reg,lo12(imm32)'.
17166
17167'la rt5,var'
17168     Load 32-bit address of var into register rt5.  'sethi
17169     rt5,hi20(var)' and then 'ori reg,rt5,lo12(var)'
17170
17171'l.[bhw] rt5,var'
17172     Load value of var into register rt5.  'sethi $ta,hi20(var)' and
17173     then 'l[bhw]i rt5,[$ta+lo12(var)]'
17174
17175'l.[bh]s rt5,var'
17176     Load value of var into register rt5.  'sethi $ta,hi20(var)' and
17177     then 'l[bh]si rt5,[$ta+lo12(var)]'
17178
17179'l.[bhw]p rt5,var,inc'
17180     Load value of var into register rt5 and increment $ta by amount
17181     inc.  'la $ta,var' and then 'l[bhw]i.bi rt5,[$ta],inc'
17182
17183'l.[bhw]pc rt5,inc'
17184     Continue loading value of var into register rt5 and increment $ta
17185     by amount inc.  'l[bhw]i.bi rt5,[$ta],inc.'
17186
17187'l.[bh]sp rt5,var,inc'
17188     Load value of var into register rt5 and increment $ta by amount
17189     inc.  'la $ta,var' and then 'l[bh]si.bi rt5,[$ta],inc'
17190
17191'l.[bh]spc rt5,inc'
17192     Continue loading value of var into register rt5 and increment $ta
17193     by amount inc.  'l[bh]si.bi rt5,[$ta],inc.'
17194
17195's.[bhw] rt5,var'
17196     Store register rt5 to var.  'sethi $ta,hi20(var)' and then 's[bhw]i
17197     rt5,[$ta+lo12(var)]'
17198
17199's.[bhw]p rt5,var,inc'
17200     Store register rt5 to var and increment $ta by amount inc.  'la
17201     $ta,var' and then 's[bhw]i.bi rt5,[$ta],inc'
17202
17203's.[bhw]pc rt5,inc'
17204     Continue storing register rt5 to var and increment $ta by amount
17205     inc.  's[bhw]i.bi rt5,[$ta],inc.'
17206
17207'not rt5,ra5'
17208     Alias of 'nor rt5,ra5,ra5'.
17209
17210'neg rt5,ra5'
17211     Alias of 'subri rt5,ra5,0'.
17212
17213'br rb5'
17214     Depending on how it is assembled, it is translated into 'r5 rb5' or
17215     'jr rb5'.
17216
17217'b label'
17218     Branch to label depending on how it is assembled, it is translated
17219     into 'j8 label', 'j label', or "'la $ta,label' 'br $ta'".
17220
17221'bral rb5'
17222     Alias of jral br5 depending on how it is assembled, it is
17223     translated into 'jral5 rb5' or 'jral rb5'.
17224
17225'bal fname'
17226     Alias of jal fname depending on how it is assembled, it is
17227     translated into 'jal fname' or "'la $ta,fname' 'bral $ta'".
17228
17229'call fname'
17230     Call function fname same as 'jal fname'.
17231
17232'move rt5,ra5'
17233     For 16-bit, this is 'mov55 rt5,ra5'.  For no 16-bit, this is 'ori
17234     rt5,ra5,0'.
17235
17236'move rt5,var'
17237     This is the same as 'l.w rt5,var'.
17238
17239'move rt5,imm32'
17240     This is the same as 'li rt5,imm32'.
17241
17242'pushm ra5,rb5'
17243     Push contents of registers from ra5 to rb5 into stack.
17244
17245'push ra5'
17246     Push content of register ra5 into stack.  (same 'pushm ra5,ra5').
17247
17248'push.d var'
17249     Push value of double-word variable var into stack.
17250
17251'push.w var'
17252     Push value of word variable var into stack.
17253
17254'push.h var'
17255     Push value of half-word variable var into stack.
17256
17257'push.b var'
17258     Push value of byte variable var into stack.
17259
17260'pusha var'
17261     Push 32-bit address of variable var into stack.
17262
17263'pushi imm32'
17264     Push 32-bit immediate value into stack.
17265
17266'popm ra5,rb5'
17267     Pop top of stack values into registers ra5 to rb5.
17268
17269'pop rt5'
17270     Pop top of stack value into register.  (same as 'popm rt5,rt5'.)
17271
17272'pop.d var,ra5'
17273     Pop value of double-word variable var from stack using register ra5
17274     as 2nd scratch register.  (1st is $ta)
17275
17276'pop.w var,ra5'
17277     Pop value of word variable var from stack using register ra5.
17278
17279'pop.h var,ra5'
17280     Pop value of half-word variable var from stack using register ra5.
17281
17282'pop.b var,ra5'
17283     Pop value of byte variable var from stack using register ra5.
17284
17285
17286File: as.info,  Node: NiosII-Dependent,  Next: NS32K-Dependent,  Prev: NDS32-Dependent,  Up: Machine Dependencies
17287
172889.31 Nios II Dependent Features
17289===============================
17290
17291* Menu:
17292
17293* Nios II Options::              Options
17294* Nios II Syntax::               Syntax
17295* Nios II Relocations::          Relocations
17296* Nios II Directives::           Nios II Machine Directives
17297* Nios II Opcodes::              Opcodes
17298
17299
17300File: as.info,  Node: Nios II Options,  Next: Nios II Syntax,  Up: NiosII-Dependent
17301
173029.31.1 Options
17303--------------
17304
17305'-relax-section'
17306     Replace identified out-of-range branches with PC-relative 'jmp'
17307     sequences when possible.  The generated code sequences are suitable
17308     for use in position-independent code, but there is a practical
17309     limit on the extended branch range because of the length of the
17310     sequences.  This option is the default.
17311
17312'-relax-all'
17313     Replace branch instructions not determinable to be in range and all
17314     call instructions with 'jmp' and 'callr' sequences (respectively).
17315     This option generates absolute relocations against the target
17316     symbols and is not appropriate for position-independent code.
17317
17318'-no-relax'
17319     Do not replace any branches or calls.
17320
17321'-EB'
17322     Generate big-endian output.
17323
17324'-EL'
17325     Generate little-endian output.  This is the default.
17326
17327'-march=ARCHITECTURE'
17328     This option specifies the target architecture.  The assembler
17329     issues an error message if an attempt is made to assemble an
17330     instruction which will not execute on the target architecture.  The
17331     following architecture names are recognized: 'r1', 'r2'.  The
17332     default is 'r1'.
17333
17334
17335File: as.info,  Node: Nios II Syntax,  Next: Nios II Relocations,  Prev: Nios II Options,  Up: NiosII-Dependent
17336
173379.31.2 Syntax
17338-------------
17339
17340* Menu:
17341
17342* Nios II Chars::                Special Characters
17343
17344
17345File: as.info,  Node: Nios II Chars,  Up: Nios II Syntax
17346
173479.31.2.1 Special Characters
17348...........................
17349
17350'#' is the line comment character.  ';' is the line separator character.
17351
17352
17353File: as.info,  Node: Nios II Relocations,  Next: Nios II Directives,  Prev: Nios II Syntax,  Up: NiosII-Dependent
17354
173559.31.3 Nios II Machine Relocations
17356----------------------------------
17357
17358'%hiadj(EXPRESSION)'
17359     Extract the upper 16 bits of EXPRESSION and add one if the 15th bit
17360     is set.
17361
17362     The value of '%hiadj(EXPRESSION)' is:
17363          ((EXPRESSION >> 16) & 0xffff) + ((EXPRESSION >> 15) & 0x01)
17364
17365     The '%hiadj' relocation is intended to be used with the 'addi',
17366     'ld' or 'st' instructions along with a '%lo', in order to load a
17367     32-bit constant.
17368
17369          movhi r2, %hiadj(symbol)
17370          addi r2, r2, %lo(symbol)
17371
17372'%hi(EXPRESSION)'
17373     Extract the upper 16 bits of EXPRESSION.
17374
17375'%lo(EXPRESSION)'
17376     Extract the lower 16 bits of EXPRESSION.
17377
17378'%gprel(EXPRESSION)'
17379     Subtract the value of the symbol '_gp' from EXPRESSION.
17380
17381     The intention of the '%gprel' relocation is to have a fast small
17382     area of memory which only takes a 16-bit immediate to access.
17383
17384          	.section .sdata
17385          fastint:
17386          	.int 123
17387          	.section .text
17388          	ldw r4, %gprel(fastint)(gp)
17389
17390'%call(EXPRESSION)'
17391'%call_lo(EXPRESSION)'
17392'%call_hiadj(EXPRESSION)'
17393'%got(EXPRESSION)'
17394'%got_lo(EXPRESSION)'
17395'%got_hiadj(EXPRESSION)'
17396'%gotoff(EXPRESSION)'
17397'%gotoff_lo(EXPRESSION)'
17398'%gotoff_hiadj(EXPRESSION)'
17399'%tls_gd(EXPRESSION)'
17400'%tls_ie(EXPRESSION)'
17401'%tls_le(EXPRESSION)'
17402'%tls_ldm(EXPRESSION)'
17403'%tls_ldo(EXPRESSION)'
17404
17405     These relocations support the ABI for Linux Systems documented in
17406     the 'Nios II Processor Reference Handbook'.
17407
17408
17409File: as.info,  Node: Nios II Directives,  Next: Nios II Opcodes,  Prev: Nios II Relocations,  Up: NiosII-Dependent
17410
174119.31.4 Nios II Machine Directives
17412---------------------------------
17413
17414'.align EXPRESSION [, EXPRESSION]'
17415     This is the generic '.align' directive, however this aligns to a
17416     power of two.
17417
17418'.half EXPRESSION'
17419     Create an aligned constant 2 bytes in size.
17420
17421'.word EXPRESSION'
17422     Create an aligned constant 4 bytes in size.
17423
17424'.dword EXPRESSION'
17425     Create an aligned constant 8 bytes in size.
17426
17427'.2byte EXPRESSION'
17428     Create an unaligned constant 2 bytes in size.
17429
17430'.4byte EXPRESSION'
17431     Create an unaligned constant 4 bytes in size.
17432
17433'.8byte EXPRESSION'
17434     Create an unaligned constant 8 bytes in size.
17435
17436'.16byte EXPRESSION'
17437     Create an unaligned constant 16 bytes in size.
17438
17439'.set noat'
17440     Allows assembly code to use 'at' register without warning.  Macro
17441     or relaxation expansions generate warnings.
17442
17443'.set at'
17444     Assembly code using 'at' register generates warnings, and macro
17445     expansion and relaxation are enabled.
17446
17447'.set nobreak'
17448     Allows assembly code to use 'ba' and 'bt' registers without
17449     warning.
17450
17451'.set break'
17452     Turns warnings back on for using 'ba' and 'bt' registers.
17453
17454'.set norelax'
17455     Do not replace any branches or calls.
17456
17457'.set relaxsection'
17458     Replace identified out-of-range branches with 'jmp' sequences
17459     (default).
17460
17461'.set relaxsection'
17462     Replace all branch and call instructions with 'jmp' and 'callr'
17463     sequences.
17464
17465'.set ...'
17466     All other '.set' are the normal use.
17467
17468
17469File: as.info,  Node: Nios II Opcodes,  Prev: Nios II Directives,  Up: NiosII-Dependent
17470
174719.31.5 Opcodes
17472--------------
17473
17474'as' implements all the standard Nios II opcodes documented in the 'Nios
17475II Processor Reference Handbook', including the assembler
17476pseudo-instructions.
17477
17478
17479File: as.info,  Node: NS32K-Dependent,  Next: OpenRISC-Dependent,  Prev: NiosII-Dependent,  Up: Machine Dependencies
17480
174819.32 NS32K Dependent Features
17482=============================
17483
17484* Menu:
17485
17486* NS32K Syntax::               Syntax
17487
17488
17489File: as.info,  Node: NS32K Syntax,  Up: NS32K-Dependent
17490
174919.32.1 Syntax
17492-------------
17493
17494* Menu:
17495
17496* NS32K-Chars::                Special Characters
17497
17498
17499File: as.info,  Node: NS32K-Chars,  Up: NS32K Syntax
17500
175019.32.1.1 Special Characters
17502...........................
17503
17504The presence of a '#' appearing anywhere on a line indicates the start
17505of a comment that extends to the end of that line.
17506
17507   If a '#' appears as the first character of a line then the whole line
17508is treated as a comment, but in this case the line can also be a logical
17509line number directive (*note Comments::) or a preprocessor control
17510command (*note Preprocessing::).
17511
17512   If Sequent compatibility has been configured into the assembler then
17513the '|' character appearing as the first character on a line will also
17514indicate the start of a line comment.
17515
17516   The ';' character can be used to separate statements on the same
17517line.
17518
17519
17520File: as.info,  Node: OpenRISC-Dependent,  Next: PDP-11-Dependent,  Prev: NS32K-Dependent,  Up: Machine Dependencies
17521
175229.33 OPENRISC Dependent Features
17523================================
17524
17525* Menu:
17526
17527* OpenRISC-Syntax::		Syntax
17528* OpenRISC-Float::		Floating Point
17529* OpenRISC-Directives::		OpenRISC Machine Directives
17530* OpenRISC-Opcodes::		Opcodes
17531
17532
17533File: as.info,  Node: OpenRISC-Syntax,  Next: OpenRISC-Float,  Up: OpenRISC-Dependent
17534
175359.33.1 OpenRISC Syntax
17536----------------------
17537
17538The assembler syntax follows the OpenRISC 1000 Architecture Manual.
17539
17540* Menu:
17541
17542* OpenRISC-Chars::		Special Characters
17543* OpenRISC-Regs::		Register Names
17544* OpenRISC-Relocs::		Relocations
17545
17546
17547File: as.info,  Node: OpenRISC-Chars,  Next: OpenRISC-Regs,  Up: OpenRISC-Syntax
17548
175499.33.1.1 Special Characters
17550...........................
17551
17552A '#' character appearing anywhere on a line indicates the start of a
17553comment that extends to the end of that line.
17554
17555   ';' can be used instead of a newline to separate statements.
17556
17557
17558File: as.info,  Node: OpenRISC-Regs,  Next: OpenRISC-Relocs,  Prev: OpenRISC-Chars,  Up: OpenRISC-Syntax
17559
175609.33.1.2 Register Names
17561.......................
17562
17563The OpenRISC register file contains 32 general pupose registers.
17564
17565   * The 32 general purpose registers are referred to as 'rN'.
17566
17567   * The stack pointer register 'r1' can be referenced using the alias
17568     'sp'.
17569
17570   * The frame pointer register 'r2' can be referenced using the alias
17571     'fp'.
17572
17573   * The link register 'r9' can be referenced using the alias 'lr'.
17574
17575   Floating point operations use the same general purpose registers.
17576The instructions 'lf.itof.s' (single precision) and 'lf.itof.d' (double
17577precision) can be used to convert integer values to floating point.
17578Likewise, instructions 'lf.ftoi.s' (single precision) and 'lf.ftoi.d'
17579(double precision) can be used to convert floating point to integer.
17580
17581   OpenRISC also contains privileged special purpose registers (SPRs).
17582The SPRs are accessed using the 'l.mfspr' and 'l.mtspr' instructions.
17583
17584
17585File: as.info,  Node: OpenRISC-Relocs,  Prev: OpenRISC-Regs,  Up: OpenRISC-Syntax
17586
175879.33.1.3 Relocations
17588....................
17589
17590ELF relocations are available as defined in the OpenRISC architecture
17591specification.
17592
17593   'R_OR1K_HI_16_IN_INSN' is obtained using 'hi' and
17594'R_OR1K_LO_16_IN_INSN' and 'R_OR1K_SLO16' are obtained using 'lo'.  For
17595signed offsets 'R_OR1K_AHI16' is obtained from 'ha'.  For example:
17596
17597     l.movhi r5, hi(symbol)
17598     l.ori   r5, r5, lo(symbol)
17599
17600     l.movhi r5, ha(symbol)
17601     l.addi  r5, r5, lo(symbol)
17602
17603   These "high" mnemonics extract bits 31:16 of their operand, and the
17604"low" mnemonics extract bits 15:0 of their operand.
17605
17606   The PC relative relocation 'R_OR1K_GOTPC_HI16' can be obtained by
17607enclosing an operand inside of 'gotpchi'.  Likewise, the
17608'R_OR1K_GOTPC_LO16' relocation can be obtained using 'gotpclo'.  These
17609are mostly used when assembling PIC code.  For example, the standard PIC
17610sequence on OpenRISC to get the base of the global offset table, PC
17611relative, into a register, can be performed as:
17612
17613     l.jal   0x8
17614      l.movhi r17, gotpchi(_GLOBAL_OFFSET_TABLE_-4)
17615     l.ori   r17, r17, gotpclo(_GLOBAL_OFFSET_TABLE_+0)
17616     l.add   r17, r17, r9
17617
17618   Several relocations exist to allow the link editor to perform GOT
17619data references.  The 'R_OR1K_GOT16' relocation can obtained by
17620enclosing an operand inside of 'got'.  For example, assuming the GOT
17621base is in register 'r17'.
17622
17623     l.lwz   r19, got(a)(r17)
17624     l.lwz   r21, 0(r19)
17625
17626   Also, several relocations exist for local GOT references.  The
17627'R_OR1K_GOTOFF_AHI16' relocation can obtained by enclosing an operand
17628inside of 'gotoffha'.  Likewise, 'R_OR1K_GOTOFF_LO16' and
17629'R_OR1K_GOTOFF_SLO16' can be obtained by enclosing an operand inside of
17630'gotofflo'.  For example, assuming the GOT base is in register 'rl7':
17631
17632     l.movhi r19, gotoffha(symbol)
17633     l.add   r19, r19, r17
17634     l.lwz   r19, gotofflo(symbol)(r19)
17635
17636   The above PC relative relocations use a 'l.jal' (jump) instruction
17637and reading of the link register to load the PC. OpenRISC also supports
17638page offset PC relative locations without a jump instruction using the
17639'l.adrp' instruction.  By default the 'l.adrp' instruction will create
17640an 'R_OR1K_PCREL_PG21' relocation.  Likewise, 'BFD_RELOC_OR1K_LO13' and
17641'BFD_RELOC_OR1K_SLO13' can be obtained by enclosing an operand inside of
17642'po'.  For example:
17643
17644     l.adrp  r3, symbol
17645     l.ori   r4, r3, po(symbol)
17646     l.lbz   r5, po(symbol)(r3)
17647     l.sb    po(symbol)(r3), r6
17648
17649   Likewise the page offset relocations can be used with GOT references.
17650The relocation 'R_OR1K_GOT_PG21' can be obtained by enclosing an
17651'l.adrp' immediate operand inside of 'got'.  Likewise, 'R_OR1K_GOT_LO13'
17652can be obtained by enclosing an operand inside of 'gotpo'.  For example
17653to load the value of a GOT symbol into register 'r5' we can do:
17654
17655     l.adrp  r17, got(_GLOBAL_OFFSET_TABLE_)
17656     l.lwz   r5, gotpo(symbol)(r17)
17657
17658   There are many relocations that can be requested for access to thread
17659local storage variables.  All of the OpenRISC TLS mnemonics are
17660supported:
17661
17662   * 'R_OR1K_TLS_GD_HI16' is requested using 'tlsgdhi'.
17663   * 'R_OR1K_TLS_GD_LO16' is requested using 'tlsgdlo'.
17664   * 'R_OR1K_TLS_GD_PG21' is requested using 'tldgd'.
17665   * 'R_OR1K_TLS_GD_LO13' is requested using 'tlsgdpo'.
17666
17667   * 'R_OR1K_TLS_LDM_HI16' is requested using 'tlsldmhi'.
17668   * 'R_OR1K_TLS_LDM_LO16' is requested using 'tlsldmlo'.
17669   * 'R_OR1K_TLS_LDM_PG21' is requested using 'tldldm'.
17670   * 'R_OR1K_TLS_LDM_LO13' is requested using 'tlsldmpo'.
17671
17672   * 'R_OR1K_TLS_LDO_HI16' is requested using 'dtpoffhi'.
17673   * 'R_OR1K_TLS_LDO_LO16' is requested using 'dtpofflo'.
17674
17675   * 'R_OR1K_TLS_IE_HI16' is requested using 'gottpoffhi'.
17676   * 'R_OR1K_TLS_IE_AHI16' is requested using 'gottpoffha'.
17677   * 'R_OR1K_TLS_IE_LO16' is requested using 'gottpofflo'.
17678   * 'R_OR1K_TLS_IE_PG21' is requested using 'gottp'.
17679   * 'R_OR1K_TLS_IE_LO13' is requested using 'gottppo'.
17680
17681   * 'R_OR1K_TLS_LE_HI16' is requested using 'tpoffhi'.
17682   * 'R_OR1K_TLS_LE_AHI16' is requested using 'tpoffha'.
17683   * 'R_OR1K_TLS_LE_LO16' is requested using 'tpofflo'.
17684   * 'R_OR1K_TLS_LE_SLO16' also is requested using 'tpofflo' depending
17685     on the instruction format.
17686
17687   Here are some example TLS model sequences.
17688
17689   First, General Dynamic:
17690
17691     l.movhi r17, tlsgdhi(symbol)
17692     l.ori   r17, r17, tlsgdlo(symbol)
17693     l.add   r17, r17, r16
17694     l.or    r3, r17, r17
17695     l.jal   plt(__tls_get_addr)
17696      l.nop
17697
17698   Initial Exec:
17699
17700     l.movhi r17, gottpoffhi(symbol)
17701     l.add   r17, r17, r16
17702     l.lwz   r17, gottpofflo(symbol)(r17)
17703     l.add   r17, r17, r10
17704     l.lbs   r17, 0(r17)
17705
17706   And finally, Local Exec:
17707
17708     l.movhi r17, tpoffha(symbol)
17709     l.add   r17, r17, r10
17710     l.addi  r17, r17, tpofflo(symbol)
17711     l.lbs   r17, 0(r17)
17712
17713
17714File: as.info,  Node: OpenRISC-Float,  Next: OpenRISC-Directives,  Prev: OpenRISC-Syntax,  Up: OpenRISC-Dependent
17715
177169.33.2 Floating Point
17717---------------------
17718
17719OpenRISC uses IEEE floating-point numbers.
17720
17721
17722File: as.info,  Node: OpenRISC-Directives,  Next: OpenRISC-Opcodes,  Prev: OpenRISC-Float,  Up: OpenRISC-Dependent
17723
177249.33.3 OpenRISC Machine Directives
17725----------------------------------
17726
17727The OpenRISC version of 'as' supports the following additional machine
17728directives:
17729
17730'.align'
17731     This must be followed by the desired alignment in bytes.
17732
17733'.word'
17734     On the OpenRISC, the '.word' directive produces a 32 bit value.
17735
17736'.nodelay'
17737     On the OpenRISC, the '.nodelay' directive sets a flag in elf
17738     binaries indicating that the binary is generated catering for no
17739     delay slots.
17740
17741'.proc'
17742     This directive is ignored.  Any text following it on the same line
17743     is also ignored.
17744
17745'.endproc'
17746     This directive is ignored.  Any text following it on the same line
17747     is also ignored.
17748
17749
17750File: as.info,  Node: OpenRISC-Opcodes,  Prev: OpenRISC-Directives,  Up: OpenRISC-Dependent
17751
177529.33.4 Opcodes
17753--------------
17754
17755For detailed information on the OpenRISC machine instruction set, see
17756<http://www.openrisc.io/architecture/>.
17757
17758   'as' implements all the standard OpenRISC opcodes.
17759
17760
17761File: as.info,  Node: PDP-11-Dependent,  Next: PJ-Dependent,  Prev: OpenRISC-Dependent,  Up: Machine Dependencies
17762
177639.34 PDP-11 Dependent Features
17764==============================
17765
17766* Menu:
17767
17768* PDP-11-Options::		Options
17769* PDP-11-Pseudos::		Assembler Directives
17770* PDP-11-Syntax::		DEC Syntax versus BSD Syntax
17771* PDP-11-Mnemonics::		Instruction Naming
17772* PDP-11-Synthetic::		Synthetic Instructions
17773
17774
17775File: as.info,  Node: PDP-11-Options,  Next: PDP-11-Pseudos,  Up: PDP-11-Dependent
17776
177779.34.1 Options
17778--------------
17779
17780The PDP-11 version of 'as' has a rich set of machine dependent options.
17781
177829.34.1.1 Code Generation Options
17783................................
17784
17785'-mpic | -mno-pic'
17786     Generate position-independent (or position-dependent) code.
17787
17788     The default is to generate position-independent code.
17789
177909.34.1.2 Instruction Set Extension Options
17791..........................................
17792
17793These options enables or disables the use of extensions over the base
17794line instruction set as introduced by the first PDP-11 CPU: the KA11.
17795Most options come in two variants: a '-m'EXTENSION that enables
17796EXTENSION, and a '-mno-'EXTENSION that disables EXTENSION.
17797
17798   The default is to enable all extensions.
17799
17800'-mall | -mall-extensions'
17801     Enable all instruction set extensions.
17802
17803'-mno-extensions'
17804     Disable all instruction set extensions.
17805
17806'-mcis | -mno-cis'
17807     Enable (or disable) the use of the commercial instruction set,
17808     which consists of these instructions: 'ADDNI', 'ADDN', 'ADDPI',
17809     'ADDP', 'ASHNI', 'ASHN', 'ASHPI', 'ASHP', 'CMPCI', 'CMPC', 'CMPNI',
17810     'CMPN', 'CMPPI', 'CMPP', 'CVTLNI', 'CVTLN', 'CVTLPI', 'CVTLP',
17811     'CVTNLI', 'CVTNL', 'CVTNPI', 'CVTNP', 'CVTPLI', 'CVTPL', 'CVTPNI',
17812     'CVTPN', 'DIVPI', 'DIVP', 'L2DR', 'L3DR', 'LOCCI', 'LOCC', 'MATCI',
17813     'MATC', 'MOVCI', 'MOVC', 'MOVRCI', 'MOVRC', 'MOVTCI', 'MOVTC',
17814     'MULPI', 'MULP', 'SCANCI', 'SCANC', 'SKPCI', 'SKPC', 'SPANCI',
17815     'SPANC', 'SUBNI', 'SUBN', 'SUBPI', and 'SUBP'.
17816
17817'-mcsm | -mno-csm'
17818     Enable (or disable) the use of the 'CSM' instruction.
17819
17820'-meis | -mno-eis'
17821     Enable (or disable) the use of the extended instruction set, which
17822     consists of these instructions: 'ASHC', 'ASH', 'DIV', 'MARK',
17823     'MUL', 'RTT', 'SOB' 'SXT', and 'XOR'.
17824
17825'-mfis | -mkev11'
17826'-mno-fis | -mno-kev11'
17827     Enable (or disable) the use of the KEV11 floating-point
17828     instructions: 'FADD', 'FDIV', 'FMUL', and 'FSUB'.
17829
17830'-mfpp | -mfpu | -mfp-11'
17831'-mno-fpp | -mno-fpu | -mno-fp-11'
17832     Enable (or disable) the use of FP-11 floating-point instructions:
17833     'ABSF', 'ADDF', 'CFCC', 'CLRF', 'CMPF', 'DIVF', 'LDCFF', 'LDCIF',
17834     'LDEXP', 'LDF', 'LDFPS', 'MODF', 'MULF', 'NEGF', 'SETD', 'SETF',
17835     'SETI', 'SETL', 'STCFF', 'STCFI', 'STEXP', 'STF', 'STFPS', 'STST',
17836     'SUBF', and 'TSTF'.
17837
17838'-mlimited-eis | -mno-limited-eis'
17839     Enable (or disable) the use of the limited extended instruction
17840     set: 'MARK', 'RTT', 'SOB', 'SXT', and 'XOR'.
17841
17842     The -mno-limited-eis options also implies -mno-eis.
17843
17844'-mmfpt | -mno-mfpt'
17845     Enable (or disable) the use of the 'MFPT' instruction.
17846
17847'-mmultiproc | -mno-multiproc'
17848     Enable (or disable) the use of multiprocessor instructions:
17849     'TSTSET' and 'WRTLCK'.
17850
17851'-mmxps | -mno-mxps'
17852     Enable (or disable) the use of the 'MFPS' and 'MTPS' instructions.
17853
17854'-mspl | -mno-spl'
17855     Enable (or disable) the use of the 'SPL' instruction.
17856
17857     Enable (or disable) the use of the microcode instructions: 'LDUB',
17858     'MED', and 'XFC'.
17859
178609.34.1.3 CPU Model Options
17861..........................
17862
17863These options enable the instruction set extensions supported by a
17864particular CPU, and disables all other extensions.
17865
17866'-mka11'
17867     KA11 CPU. Base line instruction set only.
17868
17869'-mkb11'
17870     KB11 CPU. Enable extended instruction set and 'SPL'.
17871
17872'-mkd11a'
17873     KD11-A CPU. Enable limited extended instruction set.
17874
17875'-mkd11b'
17876     KD11-B CPU. Base line instruction set only.
17877
17878'-mkd11d'
17879     KD11-D CPU. Base line instruction set only.
17880
17881'-mkd11e'
17882     KD11-E CPU. Enable extended instruction set, 'MFPS', and 'MTPS'.
17883
17884'-mkd11f | -mkd11h | -mkd11q'
17885     KD11-F, KD11-H, or KD11-Q CPU. Enable limited extended instruction
17886     set, 'MFPS', and 'MTPS'.
17887
17888'-mkd11k'
17889     KD11-K CPU. Enable extended instruction set, 'LDUB', 'MED', 'MFPS',
17890     'MFPT', 'MTPS', and 'XFC'.
17891
17892'-mkd11z'
17893     KD11-Z CPU. Enable extended instruction set, 'CSM', 'MFPS', 'MFPT',
17894     'MTPS', and 'SPL'.
17895
17896'-mf11'
17897     F11 CPU. Enable extended instruction set, 'MFPS', 'MFPT', and
17898     'MTPS'.
17899
17900'-mj11'
17901     J11 CPU. Enable extended instruction set, 'CSM', 'MFPS', 'MFPT',
17902     'MTPS', 'SPL', 'TSTSET', and 'WRTLCK'.
17903
17904'-mt11'
17905     T11 CPU. Enable limited extended instruction set, 'MFPS', and
17906     'MTPS'.
17907
179089.34.1.4 Machine Model Options
17909..............................
17910
17911These options enable the instruction set extensions supported by a
17912particular machine model, and disables all other extensions.
17913
17914'-m11/03'
17915     Same as '-mkd11f'.
17916
17917'-m11/04'
17918     Same as '-mkd11d'.
17919
17920'-m11/05 | -m11/10'
17921     Same as '-mkd11b'.
17922
17923'-m11/15 | -m11/20'
17924     Same as '-mka11'.
17925
17926'-m11/21'
17927     Same as '-mt11'.
17928
17929'-m11/23 | -m11/24'
17930     Same as '-mf11'.
17931
17932'-m11/34'
17933     Same as '-mkd11e'.
17934
17935'-m11/34a'
17936     Ame as '-mkd11e' '-mfpp'.
17937
17938'-m11/35 | -m11/40'
17939     Same as '-mkd11a'.
17940
17941'-m11/44'
17942     Same as '-mkd11z'.
17943
17944'-m11/45 | -m11/50 | -m11/55 | -m11/70'
17945     Same as '-mkb11'.
17946
17947'-m11/53 | -m11/73 | -m11/83 | -m11/84 | -m11/93 | -m11/94'
17948     Same as '-mj11'.
17949
17950'-m11/60'
17951     Same as '-mkd11k'.
17952
17953
17954File: as.info,  Node: PDP-11-Pseudos,  Next: PDP-11-Syntax,  Prev: PDP-11-Options,  Up: PDP-11-Dependent
17955
179569.34.2 Assembler Directives
17957---------------------------
17958
17959The PDP-11 version of 'as' has a few machine dependent assembler
17960directives.
17961
17962'.bss'
17963     Switch to the 'bss' section.
17964
17965'.even'
17966     Align the location counter to an even number.
17967
17968
17969File: as.info,  Node: PDP-11-Syntax,  Next: PDP-11-Mnemonics,  Prev: PDP-11-Pseudos,  Up: PDP-11-Dependent
17970
179719.34.3 PDP-11 Assembly Language Syntax
17972--------------------------------------
17973
17974'as' supports both DEC syntax and BSD syntax.  The only difference is
17975that in DEC syntax, a '#' character is used to denote an immediate
17976constants, while in BSD syntax the character for this purpose is '$'.
17977
17978   general-purpose registers are named 'r0' through 'r7'.  Mnemonic
17979alternatives for 'r6' and 'r7' are 'sp' and 'pc', respectively.
17980
17981   Floating-point registers are named 'ac0' through 'ac3', or
17982alternatively 'fr0' through 'fr3'.
17983
17984   Comments are started with a '#' or a '/' character, and extend to the
17985end of the line.  (FIXME: clash with immediates?)
17986
17987   Multiple statements on the same line can be separated by the ';'
17988character.
17989
17990
17991File: as.info,  Node: PDP-11-Mnemonics,  Next: PDP-11-Synthetic,  Prev: PDP-11-Syntax,  Up: PDP-11-Dependent
17992
179939.34.4 Instruction Naming
17994-------------------------
17995
17996Some instructions have alternative names.
17997
17998'BCC'
17999     'BHIS'
18000
18001'BCS'
18002     'BLO'
18003
18004'L2DR'
18005     'L2D'
18006
18007'L3DR'
18008     'L3D'
18009
18010'SYS'
18011     'TRAP'
18012
18013
18014File: as.info,  Node: PDP-11-Synthetic,  Prev: PDP-11-Mnemonics,  Up: PDP-11-Dependent
18015
180169.34.5 Synthetic Instructions
18017-----------------------------
18018
18019The 'JBR' and 'J'CC synthetic instructions are not supported yet.
18020
18021
18022File: as.info,  Node: PJ-Dependent,  Next: PPC-Dependent,  Prev: PDP-11-Dependent,  Up: Machine Dependencies
18023
180249.35 picoJava Dependent Features
18025================================
18026
18027* Menu:
18028
18029* PJ Options::              Options
18030* PJ Syntax::               PJ Syntax
18031
18032
18033File: as.info,  Node: PJ Options,  Next: PJ Syntax,  Up: PJ-Dependent
18034
180359.35.1 Options
18036--------------
18037
18038'as' has two additional command-line options for the picoJava
18039architecture.
18040'-ml'
18041     This option selects little endian data output.
18042
18043'-mb'
18044     This option selects big endian data output.
18045
18046
18047File: as.info,  Node: PJ Syntax,  Prev: PJ Options,  Up: PJ-Dependent
18048
180499.35.2 PJ Syntax
18050----------------
18051
18052* Menu:
18053
18054* PJ-Chars::                Special Characters
18055
18056
18057File: as.info,  Node: PJ-Chars,  Up: PJ Syntax
18058
180599.35.2.1 Special Characters
18060...........................
18061
18062The presence of a '!' or '/' on a line indicates the start of a comment
18063that extends to the end of the current line.
18064
18065   If a '#' appears as the first character of a line then the whole line
18066is treated as a comment, but in this case the line could also be a
18067logical line number directive (*note Comments::) or a preprocessor
18068control command (*note Preprocessing::).
18069
18070   The ';' character can be used to separate statements on the same
18071line.
18072
18073
18074File: as.info,  Node: PPC-Dependent,  Next: PRU-Dependent,  Prev: PJ-Dependent,  Up: Machine Dependencies
18075
180769.36 PowerPC Dependent Features
18077===============================
18078
18079* Menu:
18080
18081* PowerPC-Opts::                Options
18082* PowerPC-Pseudo::              PowerPC Assembler Directives
18083* PowerPC-Syntax::              PowerPC Syntax
18084
18085
18086File: as.info,  Node: PowerPC-Opts,  Next: PowerPC-Pseudo,  Up: PPC-Dependent
18087
180889.36.1 Options
18089--------------
18090
18091The PowerPC chip family includes several successive levels, using the
18092same core instruction set, but including a few additional instructions
18093at each level.  There are exceptions to this however.  For details on
18094what instructions each variant supports, please see the chip's
18095architecture reference manual.
18096
18097   The following table lists all available PowerPC options.
18098
18099'-a32'
18100     Generate ELF32 or XCOFF32.
18101
18102'-a64'
18103     Generate ELF64 or XCOFF64.
18104
18105'-K PIC'
18106     Set EF_PPC_RELOCATABLE_LIB in ELF flags.
18107
18108'-mpwrx | -mpwr2'
18109     Generate code for POWER/2 (RIOS2).
18110
18111'-mpwr'
18112     Generate code for POWER (RIOS1)
18113
18114'-m601'
18115     Generate code for PowerPC 601.
18116
18117'-mppc, -mppc32, -m603, -m604'
18118     Generate code for PowerPC 603/604.
18119
18120'-m403, -m405'
18121     Generate code for PowerPC 403/405.
18122
18123'-m440'
18124     Generate code for PowerPC 440.  BookE and some 405 instructions.
18125
18126'-m464'
18127     Generate code for PowerPC 464.
18128
18129'-m476'
18130     Generate code for PowerPC 476.
18131
18132'-m7400, -m7410, -m7450, -m7455'
18133     Generate code for PowerPC 7400/7410/7450/7455.
18134
18135'-m750cl, -mgekko, -mbroadway'
18136     Generate code for PowerPC 750CL/Gekko/Broadway.
18137
18138'-m821, -m850, -m860'
18139     Generate code for PowerPC 821/850/860.
18140
18141'-mppc64, -m620'
18142     Generate code for PowerPC 620/625/630.
18143
18144'-me500, -me500x2'
18145     Generate code for Motorola e500 core complex.
18146
18147'-me500mc'
18148     Generate code for Freescale e500mc core complex.
18149
18150'-me500mc64'
18151     Generate code for Freescale e500mc64 core complex.
18152
18153'-me5500'
18154     Generate code for Freescale e5500 core complex.
18155
18156'-me6500'
18157     Generate code for Freescale e6500 core complex.
18158
18159'-mspe'
18160     Generate code for Motorola SPE instructions.
18161
18162'-mspe2'
18163     Generate code for Freescale SPE2 instructions.
18164
18165'-mtitan'
18166     Generate code for AppliedMicro Titan core complex.
18167
18168'-mppc64bridge'
18169     Generate code for PowerPC 64, including bridge insns.
18170
18171'-mbooke'
18172     Generate code for 32-bit BookE.
18173
18174'-ma2'
18175     Generate code for A2 architecture.
18176
18177'-me300'
18178     Generate code for PowerPC e300 family.
18179
18180'-maltivec'
18181     Generate code for processors with AltiVec instructions.
18182
18183'-mvle'
18184     Generate code for Freescale PowerPC VLE instructions.
18185
18186'-mvsx'
18187     Generate code for processors with Vector-Scalar (VSX) instructions.
18188
18189'-mhtm'
18190     Generate code for processors with Hardware Transactional Memory
18191     instructions.
18192
18193'-mpower4, -mpwr4'
18194     Generate code for Power4 architecture.
18195
18196'-mpower5, -mpwr5, -mpwr5x'
18197     Generate code for Power5 architecture.
18198
18199'-mpower6, -mpwr6'
18200     Generate code for Power6 architecture.
18201
18202'-mpower7, -mpwr7'
18203     Generate code for Power7 architecture.
18204
18205'-mpower8, -mpwr8'
18206     Generate code for Power8 architecture.
18207
18208'-mpower9, -mpwr9'
18209     Generate code for Power9 architecture.
18210
18211'-mpower10, -mpwr10'
18212     Generate code for Power10 architecture.
18213
18214'-mcell'
18215'-mcell'
18216     Generate code for Cell Broadband Engine architecture.
18217
18218'-mcom'
18219     Generate code Power/PowerPC common instructions.
18220
18221'-many'
18222     Generate code for any architecture (PWR/PWRX/PPC).
18223
18224'-mregnames'
18225     Allow symbolic names for registers.
18226
18227'-mno-regnames'
18228     Do not allow symbolic names for registers.
18229
18230'-mrelocatable'
18231     Support for GCC's -mrelocatable option.
18232
18233'-mrelocatable-lib'
18234     Support for GCC's -mrelocatable-lib option.
18235
18236'-memb'
18237     Set PPC_EMB bit in ELF flags.
18238
18239'-mlittle, -mlittle-endian, -le'
18240     Generate code for a little endian machine.
18241
18242'-mbig, -mbig-endian, -be'
18243     Generate code for a big endian machine.
18244
18245'-msolaris'
18246     Generate code for Solaris.
18247
18248'-mno-solaris'
18249     Do not generate code for Solaris.
18250
18251'-nops=COUNT'
18252     If an alignment directive inserts more than COUNT nops, put a
18253     branch at the beginning to skip execution of the nops.
18254
18255
18256File: as.info,  Node: PowerPC-Pseudo,  Next: PowerPC-Syntax,  Prev: PowerPC-Opts,  Up: PPC-Dependent
18257
182589.36.2 PowerPC Assembler Directives
18259-----------------------------------
18260
18261A number of assembler directives are available for PowerPC. The
18262following table is far from complete.
18263
18264'.machine "string"'
18265     This directive allows you to change the machine for which code is
18266     generated.  '"string"' may be any of the -m cpu selection options
18267     (without the -m) enclosed in double quotes, '"push"', or '"pop"'.
18268     '.machine "push"' saves the currently selected cpu, which may be
18269     restored with '.machine "pop"'.
18270
18271
18272File: as.info,  Node: PowerPC-Syntax,  Prev: PowerPC-Pseudo,  Up: PPC-Dependent
18273
182749.36.3 PowerPC Syntax
18275---------------------
18276
18277* Menu:
18278
18279* PowerPC-Chars::                Special Characters
18280
18281
18282File: as.info,  Node: PowerPC-Chars,  Up: PowerPC-Syntax
18283
182849.36.3.1 Special Characters
18285...........................
18286
18287The presence of a '#' on a line indicates the start of a comment that
18288extends to the end of the current line.
18289
18290   If a '#' appears as the first character of a line then the whole line
18291is treated as a comment, but in this case the line could also be a
18292logical line number directive (*note Comments::) or a preprocessor
18293control command (*note Preprocessing::).
18294
18295   If the assembler has been configured for the ppc-*-solaris* target
18296then the '!' character also acts as a line comment character.  This can
18297be disabled via the '-mno-solaris' command-line option.
18298
18299   The ';' character can be used to separate statements on the same
18300line.
18301
18302
18303File: as.info,  Node: PRU-Dependent,  Next: RISC-V-Dependent,  Prev: PPC-Dependent,  Up: Machine Dependencies
18304
183059.37 PRU Dependent Features
18306===========================
18307
18308* Menu:
18309
18310* PRU Options::              Options
18311* PRU Syntax::               Syntax
18312* PRU Relocations::          Relocations
18313* PRU Directives::           PRU Machine Directives
18314* PRU Opcodes::              Opcodes
18315
18316
18317File: as.info,  Node: PRU Options,  Next: PRU Syntax,  Up: PRU-Dependent
18318
183199.37.1 Options
18320--------------
18321
18322'-mlink-relax'
18323     Assume that LD would optimize LDI32 instructions by checking the
18324     upper 16 bits of the EXPRESSION.  If they are all zeros, then LD
18325     would shorten the LDI32 instruction to a single LDI. In such case
18326     'as' will output DIFF relocations for diff expressions.
18327
18328'-mno-link-relax'
18329     Assume that LD would not optimize LDI32 instructions.  As a
18330     consequence, DIFF relocations will not be emitted.
18331
18332'-mno-warn-regname-label'
18333     Do not warn if a label name matches a register name.  Usually
18334     assembler programmers will want this warning to be emitted.  C
18335     compilers may want to turn this off.
18336
18337
18338File: as.info,  Node: PRU Syntax,  Next: PRU Relocations,  Prev: PRU Options,  Up: PRU-Dependent
18339
183409.37.2 Syntax
18341-------------
18342
18343* Menu:
18344
18345* PRU Chars::                Special Characters
18346
18347
18348File: as.info,  Node: PRU Chars,  Up: PRU Syntax
18349
183509.37.2.1 Special Characters
18351...........................
18352
18353'#' and ';' are the line comment characters.
18354
18355
18356File: as.info,  Node: PRU Relocations,  Next: PRU Directives,  Prev: PRU Syntax,  Up: PRU-Dependent
18357
183589.37.3 PRU Machine Relocations
18359------------------------------
18360
18361'%pmem(EXPRESSION)'
18362     Convert EXPRESSION from byte-address to a word-address.  In other
18363     words, shift right by two.
18364
18365'%label(EXPRESSION)'
18366     Mark the given operand as a label.  This is useful if you need to
18367     jump to a label that matches a register name.
18368
18369          r1:
18370              jmp r1		; Will jump to register R1
18371              jmp %label(r1)	; Will jump to label r1
18372
18373
18374File: as.info,  Node: PRU Directives,  Next: PRU Opcodes,  Prev: PRU Relocations,  Up: PRU-Dependent
18375
183769.37.4 PRU Machine Directives
18377-----------------------------
18378
18379'.align EXPRESSION [, EXPRESSION]'
18380     This is the generic '.align' directive, however this aligns to a
18381     power of two.
18382
18383'.word EXPRESSION'
18384     Create an aligned constant 4 bytes in size.
18385
18386'.dword EXPRESSION'
18387     Create an aligned constant 8 bytes in size.
18388
18389'.2byte EXPRESSION'
18390     Create an unaligned constant 2 bytes in size.
18391
18392'.4byte EXPRESSION'
18393     Create an unaligned constant 4 bytes in size.
18394
18395'.8byte EXPRESSION'
18396     Create an unaligned constant 8 bytes in size.
18397
18398'.16byte EXPRESSION'
18399     Create an unaligned constant 16 bytes in size.
18400
18401'.set no_warn_regname_label'
18402     Do not output warnings when a label name matches a register name.
18403     Equivalent to passing the '-mno-warn-regname-label' command-line
18404     option.
18405
18406
18407File: as.info,  Node: PRU Opcodes,  Prev: PRU Directives,  Up: PRU-Dependent
18408
184099.37.5 Opcodes
18410--------------
18411
18412'as' implements all the standard PRU core V3 opcodes in the original
18413pasm assembler.  Older cores are not supported by 'as'.
18414
18415   GAS also implements the LDI32 pseudo instruction for loading a 32-bit
18416immediate value into a register.
18417
18418            ldi32   sp, __stack_top
18419            ldi32   r14, 0x12345678
18420
18421
18422File: as.info,  Node: RISC-V-Dependent,  Next: RL78-Dependent,  Prev: PRU-Dependent,  Up: Machine Dependencies
18423
184249.38 RISC-V Dependent Features
18425==============================
18426
18427* Menu:
18428
18429* RISC-V-Options::        RISC-V Options
18430* RISC-V-Directives::     RISC-V Directives
18431* RISC-V-Modifiers::      RISC-V Assembler Modifiers
18432* RISC-V-Formats::        RISC-V Instruction Formats
18433* RISC-V-ATTRIBUTE::      RISC-V Object Attribute
18434
18435
18436File: as.info,  Node: RISC-V-Options,  Next: RISC-V-Directives,  Up: RISC-V-Dependent
18437
184389.38.1 RISC-V Options
18439---------------------
18440
18441The following table lists all available RISC-V specific options.
18442
18443'-fpic'
18444'-fPIC'
18445     Generate position-independent code
18446
18447'-fno-pic'
18448     Don't generate position-independent code (default)
18449
18450'-march=ISA'
18451     Select the base isa, as specified by ISA. For example
18452     -march=rv32ima.  If this option and the architecture attributes
18453     aren't set, then assembler will check the default configure setting
18454     -with-arch=ISA.
18455
18456'-misa-spec=ISAspec'
18457     Select the default isa spec version.  If the version of ISA isn't
18458     set by -march, then assembler helps to set the version according to
18459     the default chosen spec.  If this option isn't set, then assembler
18460     will check the default configure setting -with-isa-spec=ISAspec.
18461
18462'-mpriv-spec=PRIVspec'
18463     Select the privileged spec version.  We can decide whether the CSR
18464     is valid or not according to the chosen spec.  If this option and
18465     the privilege attributes aren't set, then assembler will check the
18466     default configure setting -with-priv-spec=PRIVspec.
18467
18468'-mabi=ABI'
18469     Selects the ABI, which is either "ilp32" or "lp64", optionally
18470     followed by "f", "d", or "q" to indicate single-precision,
18471     double-precision, or quad-precision floating-point calling
18472     convention, or none to indicate the soft-float calling convention.
18473     Also, "ilp32" can optionally be followed by "e" to indicate the RVE
18474     ABI, which is always soft-float.
18475
18476'-mrelax'
18477     Take advantage of linker relaxations to reduce the number of
18478     instructions required to materialize symbol addresses.  (default)
18479
18480'-mno-relax'
18481     Don't do linker relaxations.
18482
18483'-march-attr'
18484     Generate the default contents for the riscv elf attribute section
18485     if the .attribute directives are not set.  This section is used to
18486     record the information that a linker or runtime loader needs to
18487     check compatibility.  This information includes ISA string, stack
18488     alignment requirement, unaligned memory accesses, and the major,
18489     minor and revision version of privileged specification.
18490
18491'-mno-arch-attr'
18492     Don't generate the default riscv elf attribute section if the
18493     .attribute directives are not set.
18494
18495'-mcsr-check'
18496     Enable the CSR checking for the ISA-dependent CRS and the read-only
18497     CSR. The ISA-dependent CSR are only valid when the specific ISA is
18498     set.  The read-only CSR can not be written by the CSR instructions.
18499
18500'-mno-csr-check'
18501     Don't do CSR checking.
18502
18503'-mlittle-endian'
18504     Generate code for a little endian machine.
18505
18506'-mbig-endian'
18507     Generate code for a big endian machine.
18508
18509
18510File: as.info,  Node: RISC-V-Directives,  Next: RISC-V-Modifiers,  Prev: RISC-V-Options,  Up: RISC-V-Dependent
18511
185129.38.2 RISC-V Directives
18513------------------------
18514
18515The following table lists all available RISC-V specific directives.
18516
18517'.align SIZE-LOG-2'
18518     Align to the given boundary, with the size given as log2 the number
18519     of bytes to align to.
18520
18521'.half VALUE'
18522'.word VALUE'
18523'.dword VALUE'
18524     Emits a half-word, word, or double-word value at the current
18525     position.
18526
18527'.dtprelword VALUE'
18528'.dtpreldword VALUE'
18529     Emits a DTP-relative word (or double-word) at the current position.
18530     This is meant to be used by the compiler in shared libraries for
18531     DWARF debug info for thread local variables.
18532
18533'.bss'
18534     Sets the current section to the BSS section.
18535
18536'.uleb128 VALUE'
18537'.sleb128 VALUE'
18538     Emits a signed or unsigned LEB128 value at the current position.
18539     This only accepts constant expressions, because symbol addresses
18540     can change with relaxation, and we don't support relocations to
18541     modify LEB128 values at link time.
18542
18543'.option ARGUMENT'
18544     Modifies RISC-V specific assembler options inline with the assembly
18545     code.  This is used when particular instruction sequences must be
18546     assembled with a specific set of options.  For example, since we
18547     relax addressing sequences to shorter GP-relative sequences when
18548     possible the initial load of GP must not be relaxed and should be
18549     emitted as something like
18550
18551          	.option push
18552          	.option norelax
18553          	la gp, __global_pointer$
18554          	.option pop
18555
18556     in order to produce after linker relaxation the expected
18557
18558          	auipc gp, %pcrel_hi(__global_pointer$)
18559          	addi gp, gp, %pcrel_lo(__global_pointer$)
18560
18561     instead of just
18562
18563          	addi gp, gp, 0
18564
18565     It's not expected that options are changed in this manner during
18566     regular use, but there are a handful of esoteric cases like the one
18567     above where users need to disable particular features of the
18568     assembler for particular code sequences.  The complete list of
18569     option arguments is shown below:
18570
18571     'push'
18572     'pop'
18573          Pushes or pops the current option stack.  These should be used
18574          whenever changing an option in line with assembly code in
18575          order to ensure the user's command-line options are respected
18576          for the bulk of the file being assembled.
18577
18578     'rvc'
18579     'norvc'
18580          Enables or disables the generation of compressed instructions.
18581          Instructions are opportunistically compressed by the RISC-V
18582          assembler when possible, but sometimes this behavior is not
18583          desirable.
18584
18585     'pic'
18586     'nopic'
18587          Enables or disables position-independent code generation.
18588          Unless you really know what you're doing, this should only be
18589          at the top of a file.
18590
18591     'relax'
18592     'norelax'
18593          Enables or disables relaxation.  The RISC-V assembler and
18594          linker opportunistically relax some code sequences, but
18595          sometimes this behavior is not desirable.
18596
18597'csr-check'
18598'no-csr-check'
18599     Enables or disables the CSR checking.
18600
18601'.insn VALUE'
18602'.insn VALUE'
18603     This directive permits the numeric representation of an
18604     instructions and makes the assembler insert the operands according
18605     to one of the instruction formats for '.insn' (*note
18606     RISC-V-Formats::).  For example, the instruction 'add a0, a1, a2'
18607     could be written as '.insn r 0x33, 0, 0, a0, a1, a2'.
18608
18609'.attribute TAG, VALUE'
18610     Set the object attribute TAG to VALUE.
18611
18612     The TAG is either an attribute number, or one of the following:
18613     'Tag_RISCV_arch', 'Tag_RISCV_stack_align',
18614     'Tag_RISCV_unaligned_access', 'Tag_RISCV_priv_spec',
18615     'Tag_RISCV_priv_spec_minor', 'Tag_RISCV_priv_spec_revision'.
18616
18617
18618File: as.info,  Node: RISC-V-Modifiers,  Next: RISC-V-Formats,  Prev: RISC-V-Directives,  Up: RISC-V-Dependent
18619
186209.38.3 RISC-V Assembler Modifiers
18621---------------------------------
18622
18623The RISC-V assembler supports following modifiers for relocatable
18624addresses used in RISC-V instruction operands.  However, we also support
18625some pseudo instructions that are easier to use than these modifiers.
18626
18627'%lo(SYMBOL)'
18628     The low 12 bits of absolute address for SYMBOL.
18629
18630'%hi(SYMBOL)'
18631     The high 20 bits of absolute address for SYMBOL.  This is usually
18632     used with the %lo modifier to represent a 32-bit absolute address.
18633
18634          	lui        a0, %hi(SYMBOL)     // R_RISCV_HI20
18635          	addi       a0, a0, %lo(SYMBOL) // R_RISCV_LO12_I
18636
18637          	lui        a0, %hi(SYMBOL)     // R_RISCV_HI20
18638          	load/store a0, %lo(SYMBOL)(a0) // R_RISCV_LO12_I/S
18639
18640'%pcrel_lo(LABEL)'
18641     The low 12 bits of relative address between pc and SYMBOL.  The
18642     SYMBOL is related to the high part instruction which is marked by
18643     LABEL.
18644
18645'%pcrel_hi(SYMBOL)'
18646     The high 20 bits of relative address between pc and SYMBOL.  This
18647     is usually used with the %pcrel_lo modifier to represent a +/-2GB
18648     pc-relative range.
18649
18650          LABEL:
18651          	auipc      a0, %pcrel_hi(SYMBOL)    // R_RISCV_PCREL_HI20
18652          	addi       a0, a0, %pcrel_lo(LABEL) // R_RISCV_PCREL_LO12_I
18653
18654          LABEL:
18655          	auipc      a0, %pcrel_hi(SYMBOL)    // R_RISCV_PCREL_HI20
18656          	load/store a0, %pcrel_lo(LABEL)(a0) // R_RISCV_PCREL_LO12_I/S
18657
18658     Or you can use the pseudo lla/lw/sw/...  instruction to do this.
18659
18660          	lla  a0, SYMBOL
18661
18662'%got_pcrel_hi(SYMBOL)'
18663     The high 20 bits of relative address between pc and the GOT entry
18664     of SYMBOL.  This is usually used with the %pcrel_lo modifier to
18665     access the GOT entry.
18666
18667          LABEL:
18668          	auipc      a0, %got_pcrel_hi(SYMBOL) // R_RISCV_GOT_HI20
18669          	addi       a0, a0, %pcrel_lo(LABEL)  // R_RISCV_PCREL_LO12_I
18670
18671          LABEL:
18672          	auipc      a0, %got_pcrel_hi(SYMBOL) // R_RISCV_GOT_HI20
18673          	load/store a0, %pcrel_lo(LABEL)(a0)  // R_RISCV_PCREL_LO12_I/S
18674
18675     Also, the pseudo la instruction with PIC has similar behavior.
18676
18677'%tprel_add(SYMBOL)'
18678     This is used purely to associate the R_RISCV_TPREL_ADD relocation
18679     for TLS relaxation.  This one is only valid as the fourth operand
18680     to the normally 3 operand add instruction.
18681
18682'%tprel_lo(SYMBOL)'
18683     The low 12 bits of relative address between tp and SYMBOL.
18684
18685'%tprel_hi(SYMBOL)'
18686     The high 20 bits of relative address between tp and SYMBOL.  This
18687     is usually used with the %tprel_lo and %tprel_add modifiers to
18688     access the thread local variable SYMBOL in TLS Local Exec.
18689
18690          	lui        a5, %tprel_hi(SYMBOL)          // R_RISCV_TPREL_HI20
18691          	add        a5, a5, tp, %tprel_add(SYMBOL) // R_RISCV_TPREL_ADD
18692          	load/store t0, %tprel_lo(SYMBOL)(a5)      // R_RISCV_TPREL_LO12_I/S
18693
18694'%tls_ie_pcrel_hi(SYMBOL)'
18695     The high 20 bits of relative address between pc and GOT entry.  It
18696     is usually used with the %pcrel_lo modifier to access the thread
18697     local variable SYMBOL in TLS Initial Exec.
18698
18699          	la.tls.ie  a5, SYMBOL
18700          	add        a5, a5, tp
18701          	load/store t0, 0(a5)
18702
18703     The pseudo la.tls.ie instruction can be expended to
18704
18705          LABEL:
18706          	auipc a5, %tls_ie_pcrel_hi(SYMBOL) // R_RISCV_TLS_GOT_HI20
18707          	load  a5, %pcrel_lo(LABEL)(a5)     // R_RISCV_PCREL_LO12_I
18708
18709'%tls_gd_pcrel_hi(SYMBOL)'
18710     The high 20 bits of relative address between pc and GOT entry.  It
18711     is usually used with the %pcrel_lo modifier to access the thread
18712     local variable SYMBOL in TLS Global Dynamic.
18713
18714          	la.tls.gd  a0, SYMBOL
18715          	call       __tls_get_addr@plt
18716          	mv         a5, a0
18717          	load/store t0, 0(a5)
18718
18719     The pseudo la.tls.gd instruction can be expended to
18720
18721          LABEL:
18722          	auipc a0, %tls_gd_pcrel_hi(SYMBOL) // R_RISCV_TLS_GD_HI20
18723          	addi  a0, a0, %pcrel_lo(LABEL)     // R_RISCV_PCREL_LO12_I
18724
18725
18726File: as.info,  Node: RISC-V-Formats,  Next: RISC-V-ATTRIBUTE,  Prev: RISC-V-Modifiers,  Up: RISC-V-Dependent
18727
187289.38.4 RISC-V Instruction Formats
18729---------------------------------
18730
18731The RISC-V Instruction Set Manual Volume I: User-Level ISA lists 12
18732instruction formats where some of the formats have multiple variants.
18733For the '.insn' pseudo directive the assembler recognizes some of the
18734formats.  Typically, the most general variant of the instruction format
18735is used by the '.insn' directive.
18736
18737   The following table lists the abbreviations used in the table of
18738instruction formats:
18739
18740     opcode      Unsigned immediate or opcode name for 7-bits opcode.
18741     opcode2     Unsigned immediate or opcode name for 2-bits opcode.
18742     func7       Unsigned immediate for 7-bits function code.
18743     func6       Unsigned immediate for 6-bits function code.
18744     func4       Unsigned immediate for 4-bits function code.
18745     func3       Unsigned immediate for 3-bits function code.
18746     func2       Unsigned immediate for 2-bits function code.
18747     rd          Destination register number for operand x, can be GPR or FPR.
18748     rd'         Destination register number for operand x,
18749                 only accept s0-s1, a0-a5, fs0-fs1 and fa0-fa5.
18750     rs1         First source register number for operand x, can be GPR or FPR.
18751     rs1'        First source register number for operand x,
18752                 only accept s0-s1, a0-a5, fs0-fs1 and fa0-fa5.
18753     rs2         Second source register number for operand x, can be GPR or FPR.
18754     rs2'        Second source register number for operand x,
18755                 only accept s0-s1, a0-a5, fs0-fs1 and fa0-fa5.
18756     simm12      Sign-extended 12-bit immediate for operand x.
18757     simm20      Sign-extended 20-bit immediate for operand x.
18758     simm6       Sign-extended 6-bit immediate for operand x.
18759     uimm8       Unsigned 8-bit immediate for operand x.
18760     symbol      Symbol or lable reference for operand x.
18761
18762   The following table lists all available opcode name:
18763
18764'C0'
18765'C1'
18766'C2'
18767     Opcode space for compressed instructions.
18768
18769'LOAD'
18770     Opcode space for load instructions.
18771
18772'LOAD_FP'
18773     Opcode space for floating-point load instructions.
18774
18775'STORE'
18776     Opcode space for store instructions.
18777
18778'STORE_FP'
18779     Opcode space for floating-point store instructions.
18780
18781'AUIPC'
18782     Opcode space for auipc instruction.
18783
18784'LUI'
18785     Opcode space for lui instruction.
18786
18787'BRANCH'
18788     Opcode space for branch instructions.
18789
18790'JAL'
18791     Opcode space for jal instruction.
18792
18793'JALR'
18794     Opcode space for jalr instruction.
18795
18796'OP'
18797     Opcode space for ALU instructions.
18798
18799'OP_32'
18800     Opcode space for 32-bits ALU instructions.
18801
18802'OP_IMM'
18803     Opcode space for ALU with immediate instructions.
18804
18805'OP_IMM_32'
18806     Opcode space for 32-bits ALU with immediate instructions.
18807
18808'OP_FP'
18809     Opcode space for floating-point operation instructions.
18810
18811'MADD'
18812     Opcode space for madd instruction.
18813
18814'MSUB'
18815     Opcode space for msub instruction.
18816
18817'NMADD'
18818     Opcode space for nmadd instruction.
18819
18820'NMSUB'
18821     Opcode space for msub instruction.
18822
18823'AMO'
18824     Opcode space for atomic memory operation instructions.
18825
18826'MISC_MEM'
18827     Opcode space for misc instructions.
18828
18829'SYSTEM'
18830     Opcode space for system instructions.
18831
18832'CUSTOM_0'
18833'CUSTOM_1'
18834'CUSTOM_2'
18835'CUSTOM_3'
18836     Opcode space for customize instructions.
18837
18838   An instruction is two or four bytes in length and must be aligned on
18839a 2 byte boundary.  The first two bits of the instruction specify the
18840length of the instruction, 00, 01 and 10 indicates a two byte
18841instruction, 11 indicates a four byte instruction.
18842
18843   The following table lists the RISC-V instruction formats that are
18844available with the '.insn' pseudo directive:
18845
18846'R type: .insn r opcode, func3, func7, rd, rs1, rs2'
18847     +-------+-----+-----+-------+----+-------------+
18848     | func7 | rs2 | rs1 | func3 | rd |      opcode |
18849     +-------+-----+-----+-------+----+-------------+
18850     31      25    20    15      12   7             0
18851
18852'R type with 4 register operands: .insn r opcode, func3, func2, rd, rs1, rs2, rs3'
18853'R4 type: .insn r4 opcode, func3, func2, rd, rs1, rs2, rs3'
18854     +-----+-------+-----+-----+-------+----+-------------+
18855     | rs3 | func2 | rs2 | rs1 | func3 | rd |      opcode |
18856     +-----+-------+-----+-----+-------+----+-------------+
18857     31    27      25    20    15      12   7             0
18858
18859'I type: .insn i opcode, func3, rd, rs1, simm12'
18860'I type: .insn i opcode, func3, rd, simm12(rs1)'
18861     +-------------+-----+-------+----+-------------+
18862     |      simm12 | rs1 | func3 | rd |      opcode |
18863     +-------------+-----+-------+----+-------------+
18864     31            20    15      12   7             0
18865
18866'S type: .insn s opcode, func3, rs2, simm12(rs1)'
18867     +--------------+-----+-----+-------+-------------+-------------+
18868     | simm12[11:5] | rs2 | rs1 | func3 | simm12[4:0] |      opcode |
18869     +--------------+-----+-----+-------+-------------+-------------+
18870     31             25    20    15      12            7             0
18871
18872'B type: .insn s opcode, func3, rs1, rs2, symbol'
18873'SB type: .insn sb opcode, func3, rs1, rs2, symbol'
18874     +------------+--------------+-----+-----+-------+-------------+-------------+--------+
18875     | simm12[12] | simm12[10:5] | rs2 | rs1 | func3 | simm12[4:1] | simm12[11]] | opcode |
18876     +------------+--------------+-----+-----+-------+-------------+-------------+--------+
18877     31          30            25    20    15      12           7            0
18878
18879'U type: .insn u opcode, rd, simm20'
18880     +---------------------------+----+-------------+
18881     |                    simm20 | rd |      opcode |
18882     +---------------------------+----+-------------+
18883     31                          12   7             0
18884
18885'J type: .insn j opcode, rd, symbol'
18886'UJ type: .insn uj opcode, rd, symbol'
18887     +------------+--------------+------------+---------------+----+-------------+
18888     | simm20[20] | simm20[10:1] | simm20[11] | simm20[19:12] | rd |      opcode |
18889     +------------+--------------+------------+---------------+----+-------------+
18890     31           30             21           20              12   7             0
18891
18892'CR type: .insn cr opcode2, func4, rd, rs2'
18893     +---------+--------+-----+---------+
18894     |   func4 | rd/rs1 | rs2 | opcode2 |
18895     +---------+--------+-----+---------+
18896     15        12       7     2        0
18897
18898'CI type: .insn ci opcode2, func3, rd, simm6'
18899     +---------+-----+--------+-----+---------+
18900     |   func3 | imm | rd/rs1 | imm | opcode2 |
18901     +---------+-----+--------+-----+---------+
18902     15        13    12       7     2         0
18903
18904'CIW type: .insn ciw opcode2, func3, rd, uimm8'
18905     +---------+--------------+-----+---------+
18906     |   func3 |          imm | rd' | opcode2 |
18907     +---------+--------------+-----+---------+
18908     15        13             7     2         0
18909
18910'CA type: .insn ca opcode2, func6, func2, rd, rs2'
18911     +---------+----------+-------+------+--------+
18912     |   func6 | rd'/rs1' | func2 | rs2' | opcode |
18913     +---------+----------+-------+------+--------+
18914     15        10         7       5      2        0
18915
18916'CB type: .insn cb opcode2, func3, rs1, symbol'
18917     +---------+--------+------+--------+---------+
18918     |   func3 | offset | rs1' | offset | opcode2 |
18919     +---------+--------+------+--------+---------+
18920     15        13       10     7        2         0
18921
18922'CJ type: .insn cj opcode2, symbol'
18923     +---------+--------------------+---------+
18924     |   func3 |        jump target | opcode2 |
18925     +---------+--------------------+---------+
18926     15        13             7     2         0
18927
18928   For the complete list of all instruction format variants see The
18929RISC-V Instruction Set Manual Volume I: User-Level ISA.
18930
18931
18932File: as.info,  Node: RISC-V-ATTRIBUTE,  Prev: RISC-V-Formats,  Up: RISC-V-Dependent
18933
189349.38.5 RISC-V Object Attribute
18935------------------------------
18936
18937RISC-V attributes have a string value if the tag number is odd and an
18938integer value if the tag number is even.
18939
18940Tag_RISCV_stack_align (4)
18941     Tag_RISCV_strict_align records the N-byte stack alignment for this
18942     object.  The default value is 16 for RV32I or RV64I, and 4 for
18943     RV32E.
18944
18945     The smallest value will be used if object files with different
18946     Tag_RISCV_stack_align values are merged.
18947
18948Tag_RISCV_arch (5)
18949     Tag_RISCV_arch contains a string for the target architecture taken
18950     from the option '-march'.  Different architectures will be
18951     integrated into a superset when object files are merged.
18952
18953     Note that the version information of the target architecture must
18954     be presented explicitly in the attribute and abbreviations must be
18955     expanded.  The version information, if not given by '-march', must
18956     be in accordance with the default specified by the tool.  For
18957     example, the architecture 'RV32I' has to be recorded in the
18958     attribute as 'RV32I2P0' in which '2P0' stands for the default
18959     version of its base ISA. On the other hand, the architecture
18960     'RV32G' has to be presented as 'RV32I2P0_M2P0_A2P0_F2P0_D2P0' in
18961     which the abbreviation 'G' is expanded to the 'IMAFD' combination
18962     with default versions of the standard extensions.
18963
18964Tag_RISCV_unaligned_access (6)
18965     Tag_RISCV_unaligned_access is 0 for files that do not allow any
18966     unaligned memory accesses, and 1 for files that do allow unaligned
18967     memory accesses.
18968
18969Tag_RISCV_priv_spec (8)
18970Tag_RISCV_priv_spec_minor (10)
18971Tag_RISCV_priv_spec_revision (12)
18972     Tag_RISCV_priv_spec contains the major/minor/revision version
18973     information of the privileged specification.  It will report errors
18974     if object files of different privileged specification versions are
18975     merged.
18976
18977
18978File: as.info,  Node: RL78-Dependent,  Next: RX-Dependent,  Prev: RISC-V-Dependent,  Up: Machine Dependencies
18979
189809.39 RL78 Dependent Features
18981============================
18982
18983* Menu:
18984
18985* RL78-Opts::                   RL78 Assembler Command-line Options
18986* RL78-Modifiers::              Symbolic Operand Modifiers
18987* RL78-Directives::             Assembler Directives
18988* RL78-Syntax::                 Syntax
18989
18990
18991File: as.info,  Node: RL78-Opts,  Next: RL78-Modifiers,  Up: RL78-Dependent
18992
189939.39.1 RL78 Options
18994-------------------
18995
18996'relax'
18997     Enable support for link-time relaxation.
18998
18999'norelax'
19000     Disable support for link-time relaxation (default).
19001
19002'mg10'
19003     Mark the generated binary as targeting the G10 variant of the RL78
19004     architecture.
19005
19006'mg13'
19007     Mark the generated binary as targeting the G13 variant of the RL78
19008     architecture.
19009
19010'mg14'
19011'mrl78'
19012     Mark the generated binary as targeting the G14 variant of the RL78
19013     architecture.  This is the default.
19014
19015'm32bit-doubles'
19016     Mark the generated binary as one that uses 32-bits to hold the
19017     'double' floating point type.  This is the default.
19018
19019'm64bit-doubles'
19020     Mark the generated binary as one that uses 64-bits to hold the
19021     'double' floating point type.
19022
19023
19024File: as.info,  Node: RL78-Modifiers,  Next: RL78-Directives,  Prev: RL78-Opts,  Up: RL78-Dependent
19025
190269.39.2 Symbolic Operand Modifiers
19027---------------------------------
19028
19029The RL78 has three modifiers that adjust the relocations used by the
19030linker:
19031
19032'%lo16()'
19033
19034     When loading a 20-bit (or wider) address into registers, this
19035     modifier selects the 16 least significant bits.
19036
19037            movw ax,#%lo16(_sym)
19038
19039'%hi16()'
19040
19041     When loading a 20-bit (or wider) address into registers, this
19042     modifier selects the 16 most significant bits.
19043
19044            movw ax,#%hi16(_sym)
19045
19046'%hi8()'
19047
19048     When loading a 20-bit (or wider) address into registers, this
19049     modifier selects the 8 bits that would go into CS or ES (i.e.  bits
19050     23..16).
19051
19052            mov es, #%hi8(_sym)
19053
19054
19055File: as.info,  Node: RL78-Directives,  Next: RL78-Syntax,  Prev: RL78-Modifiers,  Up: RL78-Dependent
19056
190579.39.3 Assembler Directives
19058---------------------------
19059
19060In addition to the common directives, the RL78 adds these:
19061
19062'.double'
19063     Output a constant in "double" format, which is either a 32-bit or a
19064     64-bit floating point value, depending upon the setting of the
19065     '-m32bit-doubles'|'-m64bit-doubles' command-line option.
19066
19067'.bss'
19068     Select the BSS section.
19069
19070'.3byte'
19071     Output a constant value in a three byte format.
19072
19073'.int'
19074'.word'
19075     Output a constant value in a four byte format.
19076
19077
19078File: as.info,  Node: RL78-Syntax,  Prev: RL78-Directives,  Up: RL78-Dependent
19079
190809.39.4 Syntax for the RL78
19081--------------------------
19082
19083* Menu:
19084
19085* RL78-Chars::                Special Characters
19086
19087
19088File: as.info,  Node: RL78-Chars,  Up: RL78-Syntax
19089
190909.39.4.1 Special Characters
19091...........................
19092
19093The presence of a ';' appearing anywhere on a line indicates the start
19094of a comment that extends to the end of that line.
19095
19096   If a '#' appears as the first character of a line then the whole line
19097is treated as a comment, but in this case the line can also be a logical
19098line number directive (*note Comments::) or a preprocessor control
19099command (*note Preprocessing::).
19100
19101   The '|' character can be used to separate statements on the same
19102line.
19103
19104
19105File: as.info,  Node: RX-Dependent,  Next: S/390-Dependent,  Prev: RL78-Dependent,  Up: Machine Dependencies
19106
191079.40 RX Dependent Features
19108==========================
19109
19110* Menu:
19111
19112* RX-Opts::                   RX Assembler Command-line Options
19113* RX-Modifiers::              Symbolic Operand Modifiers
19114* RX-Directives::             Assembler Directives
19115* RX-Float::                  Floating Point
19116* RX-Syntax::                 Syntax
19117
19118
19119File: as.info,  Node: RX-Opts,  Next: RX-Modifiers,  Up: RX-Dependent
19120
191219.40.1 RX Options
19122-----------------
19123
19124The Renesas RX port of 'as' has a few target specific command-line
19125options:
19126
19127'-m32bit-doubles'
19128     This option controls the ABI and indicates to use a 32-bit float
19129     ABI. It has no effect on the assembled instructions, but it does
19130     influence the behaviour of the '.double' pseudo-op.  This is the
19131     default.
19132
19133'-m64bit-doubles'
19134     This option controls the ABI and indicates to use a 64-bit float
19135     ABI. It has no effect on the assembled instructions, but it does
19136     influence the behaviour of the '.double' pseudo-op.
19137
19138'-mbig-endian'
19139     This option controls the ABI and indicates to use a big-endian data
19140     ABI. It has no effect on the assembled instructions, but it does
19141     influence the behaviour of the '.short', '.hword', '.int', '.word',
19142     '.long', '.quad' and '.octa' pseudo-ops.
19143
19144'-mlittle-endian'
19145     This option controls the ABI and indicates to use a little-endian
19146     data ABI. It has no effect on the assembled instructions, but it
19147     does influence the behaviour of the '.short', '.hword', '.int',
19148     '.word', '.long', '.quad' and '.octa' pseudo-ops.  This is the
19149     default.
19150
19151'-muse-conventional-section-names'
19152     This option controls the default names given to the code (.text),
19153     initialised data (.data) and uninitialised data sections (.bss).
19154
19155'-muse-renesas-section-names'
19156     This option controls the default names given to the code (.P),
19157     initialised data (.D_1) and uninitialised data sections (.B_1).
19158     This is the default.
19159
19160'-msmall-data-limit'
19161     This option tells the assembler that the small data limit feature
19162     of the RX port of GCC is being used.  This results in the assembler
19163     generating an undefined reference to a symbol called '__gp' for use
19164     by the relocations that are needed to support the small data limit
19165     feature.  This option is not enabled by default as it would
19166     otherwise pollute the symbol table.
19167
19168'-mpid'
19169     This option tells the assembler that the position independent data
19170     of the RX port of GCC is being used.  This results in the assembler
19171     generating an undefined reference to a symbol called '__pid_base',
19172     and also setting the RX_PID flag bit in the e_flags field of the
19173     ELF header of the object file.
19174
19175'-mint-register=NUM'
19176     This option tells the assembler how many registers have been
19177     reserved for use by interrupt handlers.  This is needed in order to
19178     compute the correct values for the '%gpreg' and '%pidreg' meta
19179     registers.
19180
19181'-mgcc-abi'
19182     This option tells the assembler that the old GCC ABI is being used
19183     by the assembled code.  With this version of the ABI function
19184     arguments that are passed on the stack are aligned to a 32-bit
19185     boundary.
19186
19187'-mrx-abi'
19188     This option tells the assembler that the official RX ABI is being
19189     used by the assembled code.  With this version of the ABI function
19190     arguments that are passed on the stack are aligned to their natural
19191     alignments.  This option is the default.
19192
19193'-mcpu=NAME'
19194     This option tells the assembler the target CPU type.  Currently the
19195     'rx100', 'rx200', 'rx600', 'rx610', 'rxv2', 'rxv3' and 'rxv3-dfpu'
19196     are recognised as valid cpu names.  Attempting to assemble an
19197     instructionnot supported by the indicated cpu type will result in
19198     an error message being generated.
19199
19200'-mno-allow-string-insns'
19201     This option tells the assembler to mark the object file that it is
19202     building as one that does not use the string instructions 'SMOVF',
19203     'SCMPU', 'SMOVB', 'SMOVU', 'SUNTIL' 'SWHILE' or the 'RMPA'
19204     instruction.  In addition the mark tells the linker to complain if
19205     an attempt is made to link the binary with another one that does
19206     use any of these instructions.
19207
19208     Note - the inverse of this option, '-mallow-string-insns', is not
19209     needed.  The assembler automatically detects the use of the the
19210     instructions in the source code and labels the resulting object
19211     file appropriately.  If no string instructions are detected then
19212     the object file is labelled as being one that can be linked with
19213     either string-using or string-banned object files.
19214
19215
19216File: as.info,  Node: RX-Modifiers,  Next: RX-Directives,  Prev: RX-Opts,  Up: RX-Dependent
19217
192189.40.2 Symbolic Operand Modifiers
19219---------------------------------
19220
19221The assembler supports one modifier when using symbol addresses in RX
19222instruction operands.  The general syntax is the following:
19223
19224     %gp(symbol)
19225
19226   The modifier returns the offset from the __GP symbol to the specified
19227symbol as a 16-bit value.  The intent is that this offset should be used
19228in a register+offset move instruction when generating references to
19229small data.  Ie, like this:
19230
19231       mov.W	 %gp(_foo)[%gpreg], r1
19232
19233   The assembler also supports two meta register names which can be used
19234to refer to registers whose values may not be known to the programmer.
19235These meta register names are:
19236
19237'%gpreg'
19238     The small data address register.
19239
19240'%pidreg'
19241     The PID base address register.
19242
19243   Both registers normally have the value r13, but this can change if
19244some registers have been reserved for use by interrupt handlers or if
19245both the small data limit and position independent data features are
19246being used at the same time.
19247
19248
19249File: as.info,  Node: RX-Directives,  Next: RX-Float,  Prev: RX-Modifiers,  Up: RX-Dependent
19250
192519.40.3 Assembler Directives
19252---------------------------
19253
19254The RX version of 'as' has the following specific assembler directives:
19255
19256'.3byte'
19257     Inserts a 3-byte value into the output file at the current
19258     location.
19259
19260'.fetchalign'
19261     If the next opcode following this directive spans a fetch line
19262     boundary (8 byte boundary), the opcode is aligned to that boundary.
19263     If the next opcode does not span a fetch line, this directive has
19264     no effect.  Note that one or more labels may be between this
19265     directive and the opcode; those labels are aligned as well.  Any
19266     inserted bytes due to alignment will form a NOP opcode.
19267
19268
19269File: as.info,  Node: RX-Float,  Next: RX-Syntax,  Prev: RX-Directives,  Up: RX-Dependent
19270
192719.40.4 Floating Point
19272---------------------
19273
19274The floating point formats generated by directives are these.
19275
19276'.float'
19277     'Single' precision (32-bit) floating point constants.
19278
19279'.double'
19280     If the '-m64bit-doubles' command-line option has been specified
19281     then then 'double' directive generates 'double' precision (64-bit)
19282     floating point constants, otherwise it generates 'single' precision
19283     (32-bit) floating point constants.  To force the generation of
19284     64-bit floating point constants used the 'dc.d' directive instead.
19285
19286
19287File: as.info,  Node: RX-Syntax,  Prev: RX-Float,  Up: RX-Dependent
19288
192899.40.5 Syntax for the RX
19290------------------------
19291
19292* Menu:
19293
19294* RX-Chars::                Special Characters
19295
19296
19297File: as.info,  Node: RX-Chars,  Up: RX-Syntax
19298
192999.40.5.1 Special Characters
19300...........................
19301
19302The presence of a ';' appearing anywhere on a line indicates the start
19303of a comment that extends to the end of that line.
19304
19305   If a '#' appears as the first character of a line then the whole line
19306is treated as a comment, but in this case the line can also be a logical
19307line number directive (*note Comments::) or a preprocessor control
19308command (*note Preprocessing::).
19309
19310   The '!' character can be used to separate statements on the same
19311line.
19312
19313
19314File: as.info,  Node: S/390-Dependent,  Next: SCORE-Dependent,  Prev: RX-Dependent,  Up: Machine Dependencies
19315
193169.41 IBM S/390 Dependent Features
19317=================================
19318
19319The s390 version of 'as' supports two architectures modes and eleven
19320chip levels.  The architecture modes are the Enterprise System
19321Architecture (ESA) and the newer z/Architecture mode.  The chip levels
19322are g5 (or arch3), g6, z900 (or arch5), z990 (or arch6), z9-109, z9-ec
19323(or arch7), z10 (or arch8), z196 (or arch9), zEC12 (or arch10), z13 (or
19324arch11), z14 (or arch12), z15 (or arch13), or arch14.
19325
19326* Menu:
19327
19328* s390 Options::                Command-line Options.
19329* s390 Characters::		Special Characters.
19330* s390 Syntax::                 Assembler Instruction syntax.
19331* s390 Directives::             Assembler Directives.
19332* s390 Floating Point::         Floating Point.
19333
19334
19335File: as.info,  Node: s390 Options,  Next: s390 Characters,  Up: S/390-Dependent
19336
193379.41.1 Options
19338--------------
19339
19340The following table lists all available s390 specific options:
19341
19342'-m31 | -m64'
19343     Select 31- or 64-bit ABI implying a word size of 32- or 64-bit.
19344
19345     These options are only available with the ELF object file format,
19346     and require that the necessary BFD support has been included (on a
19347     31-bit platform you must add -enable-64-bit-bfd on the call to the
19348     configure script to enable 64-bit usage and use s390x as target
19349     platform).
19350
19351'-mesa | -mzarch'
19352     Select the architecture mode, either the Enterprise System
19353     Architecture (esa) mode or the z/Architecture mode (zarch).
19354
19355     The 64-bit instructions are only available with the z/Architecture
19356     mode.  The combination of '-m64' and '-mesa' results in a warning
19357     message.
19358
19359'-march=CPU'
19360     This option specifies the target processor.  The following
19361     processor names are recognized: 'g5' (or 'arch3'), 'g6', 'z900' (or
19362     'arch5'), 'z990' (or 'arch6'), 'z9-109', 'z9-ec' (or 'arch7'),
19363     'z10' (or 'arch8'), 'z196' (or 'arch9'), 'zEC12' (or 'arch10'),
19364     'z13' (or 'arch11'), 'z14' (or 'arch12'), 'z15' (or 'arch13'), and
19365     'arch14'.
19366
19367     Assembling an instruction that is not supported on the target
19368     processor results in an error message.
19369
19370     The processor names starting with 'arch' refer to the edition
19371     number in the Principle of Operations manual.  They can be used as
19372     alternate processor names and have been added for compatibility
19373     with the IBM XL compiler.
19374
19375     'arch3', 'g5' and 'g6' cannot be used with the '-mzarch' option
19376     since the z/Architecture mode is not supported on these processor
19377     levels.
19378
19379     There is no 'arch4' option supported.  'arch4' matches
19380     '-march=arch5 -mesa'.
19381
19382'-mregnames'
19383     Allow symbolic names for registers.
19384
19385'-mno-regnames'
19386     Do not allow symbolic names for registers.
19387
19388'-mwarn-areg-zero'
19389     Warn whenever the operand for a base or index register has been
19390     specified but evaluates to zero.  This can indicate the misuse of
19391     general purpose register 0 as an address register.
19392
19393
19394File: as.info,  Node: s390 Characters,  Next: s390 Syntax,  Prev: s390 Options,  Up: S/390-Dependent
19395
193969.41.2 Special Characters
19397-------------------------
19398
19399'#' is the line comment character.
19400
19401   If a '#' appears as the first character of a line then the whole line
19402is treated as a comment, but in this case the line could also be a
19403logical line number directive (*note Comments::) or a preprocessor
19404control command (*note Preprocessing::).
19405
19406   The ';' character can be used instead of a newline to separate
19407statements.
19408
19409
19410File: as.info,  Node: s390 Syntax,  Next: s390 Directives,  Prev: s390 Characters,  Up: S/390-Dependent
19411
194129.41.3 Instruction syntax
19413-------------------------
19414
19415The assembler syntax closely follows the syntax outlined in Enterprise
19416Systems Architecture/390 Principles of Operation (SA22-7201) and the
19417z/Architecture Principles of Operation (SA22-7832).
19418
19419   Each instruction has two major parts, the instruction mnemonic and
19420the instruction operands.  The instruction format varies.
19421
19422* Menu:
19423
19424* s390 Register::               Register Naming
19425* s390 Mnemonics::              Instruction Mnemonics
19426* s390 Operands::               Instruction Operands
19427* s390 Formats::                Instruction Formats
19428* s390 Aliases::		Instruction Aliases
19429* s390 Operand Modifier::       Instruction Operand Modifier
19430* s390 Instruction Marker::     Instruction Marker
19431* s390 Literal Pool Entries::   Literal Pool Entries
19432
19433
19434File: as.info,  Node: s390 Register,  Next: s390 Mnemonics,  Up: s390 Syntax
19435
194369.41.3.1 Register naming
19437........................
19438
19439The 'as' recognizes a number of predefined symbols for the various
19440processor registers.  A register specification in one of the instruction
19441formats is an unsigned integer between 0 and 15.  The specific
19442instruction and the position of the register in the instruction format
19443denotes the type of the register.  The register symbols are prefixed
19444with '%':
19445
19446     %rN   the 16 general purpose registers, 0 <= N <= 15
19447     %fN   the 16 floating point registers, 0 <= N <= 15
19448     %aN   the 16 access registers, 0 <= N <= 15
19449     %cN   the 16 control registers, 0 <= N <= 15
19450     %lit  an alias for the general purpose register %r13
19451     %sp   an alias for the general purpose register %r15
19452
19453
19454File: as.info,  Node: s390 Mnemonics,  Next: s390 Operands,  Prev: s390 Register,  Up: s390 Syntax
19455
194569.41.3.2 Instruction Mnemonics
19457..............................
19458
19459All instructions documented in the Principles of Operation are supported
19460with the mnemonic and order of operands as described.  The instruction
19461mnemonic identifies the instruction format (*note s390 Formats::) and
19462the specific operation code for the instruction.  For example, the 'lr'
19463mnemonic denotes the instruction format 'RR' with the operation code
19464'0x18'.
19465
19466   The definition of the various mnemonics follows a scheme, where the
19467first character usually hint at the type of the instruction:
19468
19469     a          add instruction, for example 'al' for add logical 32-bit
19470     b          branch instruction, for example 'bc' for branch on condition
19471     c          compare or convert instruction, for example 'cr' for compare
19472                register 32-bit
19473     d          divide instruction, for example 'dlr' devide logical register
19474                64-bit to 32-bit
19475     i          insert instruction, for example 'ic' insert character
19476     l          load instruction, for example 'ltr' load and test register
19477     mv         move instruction, for example 'mvc' move character
19478     m          multiply instruction, for example 'mh' multiply halfword
19479     n          and instruction, for example 'ni' and immediate
19480     o          or instruction, for example 'oc' or character
19481     sla, sll   shift left single instruction
19482     sra, srl   shift right single instruction
19483     st         store instruction, for example 'stm' store multiple
19484     s          subtract instruction, for example 'slr' subtract
19485                logical 32-bit
19486     t          test or translate instruction, of example 'tm' test under mask
19487     x          exclusive or instruction, for example 'xc' exclusive or
19488                character
19489
19490   Certain characters at the end of the mnemonic may describe a property
19491of the instruction:
19492
19493     c   the instruction uses a 8-bit character operand
19494     f   the instruction extends a 32-bit operand to 64 bit
19495     g   the operands are treated as 64-bit values
19496     h   the operand uses a 16-bit halfword operand
19497     i   the instruction uses an immediate operand
19498     l   the instruction uses unsigned, logical operands
19499     m   the instruction uses a mask or operates on multiple values
19500     r   if r is the last character, the instruction operates on registers
19501     y   the instruction uses 20-bit displacements
19502
19503   There are many exceptions to the scheme outlined in the above lists,
19504in particular for the privileged instructions.  For non-privileged
19505instruction it works quite well, for example the instruction 'clgfr' c:
19506compare instruction, l: unsigned operands, g: 64-bit operands, f: 32- to
1950764-bit extension, r: register operands.  The instruction compares an
1950864-bit value in a register with the zero extended 32-bit value from a
19509second register.  For a complete list of all mnemonics see appendix B in
19510the Principles of Operation.
19511
19512
19513File: as.info,  Node: s390 Operands,  Next: s390 Formats,  Prev: s390 Mnemonics,  Up: s390 Syntax
19514
195159.41.3.3 Instruction Operands
19516.............................
19517
19518Instruction operands can be grouped into three classes, operands located
19519in registers, immediate operands, and operands in storage.
19520
19521   A register operand can be located in general, floating-point, access,
19522or control register.  The register is identified by a four-bit field.
19523The field containing the register operand is called the R field.
19524
19525   Immediate operands are contained within the instruction and can have
195268, 16 or 32 bits.  The field containing the immediate operand is called
19527the I field.  Dependent on the instruction the I field is either signed
19528or unsigned.
19529
19530   A storage operand consists of an address and a length.  The address
19531of a storage operands can be specified in any of these ways:
19532
19533   * The content of a single general R
19534   * The sum of the content of a general register called the base
19535     register B plus the content of a displacement field D
19536   * The sum of the contents of two general registers called the index
19537     register X and the base register B plus the content of a
19538     displacement field
19539   * The sum of the current instruction address and a 32-bit signed
19540     immediate field multiplied by two.
19541
19542   The length of a storage operand can be:
19543
19544   * Implied by the instruction
19545   * Specified by a bitmask
19546   * Specified by a four-bit or eight-bit length field L
19547   * Specified by the content of a general register
19548
19549   The notation for storage operand addresses formed from multiple
19550fields is as follows:
19551
19552'Dn(Bn)'
19553     the address for operand number n is formed from the content of
19554     general register Bn called the base register and the displacement
19555     field Dn.
19556'Dn(Xn,Bn)'
19557     the address for operand number n is formed from the content of
19558     general register Xn called the index register, general register Bn
19559     called the base register and the displacement field Dn.
19560'Dn(Ln,Bn)'
19561     the address for operand number n is formed from the content of
19562     general register Bn called the base register and the displacement
19563     field Dn.  The length of the operand n is specified by the field
19564     Ln.
19565
19566   The base registers Bn and the index registers Xn of a storage operand
19567can be skipped.  If Bn and Xn are skipped, a zero will be stored to the
19568operand field.  The notation changes as follows:
19569
19570     full notation          short notation
19571     ----------------------------------------------
19572     Dn(0,Bn)               Dn(Bn)
19573     Dn(0,0)                Dn
19574     Dn(0)                  Dn
19575     Dn(Ln,0)               Dn(Ln)
19576
19577
19578File: as.info,  Node: s390 Formats,  Next: s390 Aliases,  Prev: s390 Operands,  Up: s390 Syntax
19579
195809.41.3.4 Instruction Formats
19581............................
19582
19583The Principles of Operation manuals lists 26 instruction formats where
19584some of the formats have multiple variants.  For the '.insn' pseudo
19585directive the assembler recognizes some of the formats.  Typically, the
19586most general variant of the instruction format is used by the '.insn'
19587directive.
19588
19589   The following table lists the abbreviations used in the table of
19590instruction formats:
19591
19592     OpCode / OpCd   Part of the op code.
19593     Bx              Base register number for operand x.
19594     Dx              Displacement for operand x.
19595     DLx             Displacement lower 12 bits for operand x.
19596     DHx             Displacement higher 8-bits for operand x.
19597     Rx              Register number for operand x.
19598     Xx              Index register number for operand x.
19599     Ix              Signed immediate for operand x.
19600     Ux              Unsigned immediate for operand x.
19601
19602   An instruction is two, four, or six bytes in length and must be
19603aligned on a 2 byte boundary.  The first two bits of the instruction
19604specify the length of the instruction, 00 indicates a two byte
19605instruction, 01 and 10 indicates a four byte instruction, and 11
19606indicates a six byte instruction.
19607
19608   The following table lists the s390 instruction formats that are
19609available with the '.insn' pseudo directive:
19610
19611'E format'
19612     +-------------+
19613     |    OpCode   |
19614     +-------------+
19615     0            15
19616
19617'RI format: <insn> R1,I2'
19618     +--------+----+----+------------------+
19619     | OpCode | R1 |OpCd|        I2        |
19620     +--------+----+----+------------------+
19621     0        8    12   16                31
19622
19623'RIE format: <insn> R1,R3,I2'
19624     +--------+----+----+------------------+--------+--------+
19625     | OpCode | R1 | R3 |        I2        |////////| OpCode |
19626     +--------+----+----+------------------+--------+--------+
19627     0        8    12   16                 32       40      47
19628
19629'RIL format: <insn> R1,I2'
19630     +--------+----+----+------------------------------------+
19631     | OpCode | R1 |OpCd|                  I2                |
19632     +--------+----+----+------------------------------------+
19633     0        8    12   16                                  47
19634
19635'RILU format: <insn> R1,U2'
19636     +--------+----+----+------------------------------------+
19637     | OpCode | R1 |OpCd|                  U2                |
19638     +--------+----+----+------------------------------------+
19639     0        8    12   16                                  47
19640
19641'RIS format: <insn> R1,I2,M3,D4(B4)'
19642     +--------+----+----+----+-------------+--------+--------+
19643     | OpCode | R1 | M3 | B4 |     D4      |   I2   | Opcode |
19644     +--------+----+----+----+-------------+--------+--------+
19645     0        8    12   16   20            32       36      47
19646
19647'RR format: <insn> R1,R2'
19648     +--------+----+----+
19649     | OpCode | R1 | R2 |
19650     +--------+----+----+
19651     0        8    12  15
19652
19653'RRE format: <insn> R1,R2'
19654     +------------------+--------+----+----+
19655     |      OpCode      |////////| R1 | R2 |
19656     +------------------+--------+----+----+
19657     0                  16       24   28  31
19658
19659'RRF format: <insn> R1,R2,R3,M4'
19660     +------------------+----+----+----+----+
19661     |      OpCode      | R3 | M4 | R1 | R2 |
19662     +------------------+----+----+----+----+
19663     0                  16   20   24   28  31
19664
19665'RRS format: <insn> R1,R2,M3,D4(B4)'
19666     +--------+----+----+----+-------------+----+----+--------+
19667     | OpCode | R1 | R3 | B4 |     D4      | M3 |////| OpCode |
19668     +--------+----+----+----+-------------+----+----+--------+
19669     0        8    12   16   20            32   36   40      47
19670
19671'RS format: <insn> R1,R3,D2(B2)'
19672     +--------+----+----+----+-------------+
19673     | OpCode | R1 | R3 | B2 |     D2      |
19674     +--------+----+----+----+-------------+
19675     0        8    12   16   20           31
19676
19677'RSE format: <insn> R1,R3,D2(B2)'
19678     +--------+----+----+----+-------------+--------+--------+
19679     | OpCode | R1 | R3 | B2 |     D2      |////////| OpCode |
19680     +--------+----+----+----+-------------+--------+--------+
19681     0        8    12   16   20            32       40      47
19682
19683'RSI format: <insn> R1,R3,I2'
19684     +--------+----+----+------------------------------------+
19685     | OpCode | R1 | R3 |                  I2                |
19686     +--------+----+----+------------------------------------+
19687     0        8    12   16                                  47
19688
19689'RSY format: <insn> R1,R3,D2(B2)'
19690     +--------+----+----+----+-------------+--------+--------+
19691     | OpCode | R1 | R3 | B2 |    DL2      |  DH2   | OpCode |
19692     +--------+----+----+----+-------------+--------+--------+
19693     0        8    12   16   20            32       40      47
19694
19695'RX format: <insn> R1,D2(X2,B2)'
19696     +--------+----+----+----+-------------+
19697     | OpCode | R1 | X2 | B2 |     D2      |
19698     +--------+----+----+----+-------------+
19699     0        8    12   16   20           31
19700
19701'RXE format: <insn> R1,D2(X2,B2)'
19702     +--------+----+----+----+-------------+--------+--------+
19703     | OpCode | R1 | X2 | B2 |     D2      |////////| OpCode |
19704     +--------+----+----+----+-------------+--------+--------+
19705     0        8    12   16   20            32       40      47
19706
19707'RXF format: <insn> R1,R3,D2(X2,B2)'
19708     +--------+----+----+----+-------------+----+---+--------+
19709     | OpCode | R3 | X2 | B2 |     D2      | R1 |///| OpCode |
19710     +--------+----+----+----+-------------+----+---+--------+
19711     0        8    12   16   20            32   36  40      47
19712
19713'RXY format: <insn> R1,D2(X2,B2)'
19714     +--------+----+----+----+-------------+--------+--------+
19715     | OpCode | R1 | X2 | B2 |     DL2     |   DH2  | OpCode |
19716     +--------+----+----+----+-------------+--------+--------+
19717     0        8    12   16   20            32   36   40      47
19718
19719'S format: <insn> D2(B2)'
19720     +------------------+----+-------------+
19721     |      OpCode      | B2 |     D2      |
19722     +------------------+----+-------------+
19723     0                  16   20           31
19724
19725'SI format: <insn> D1(B1),I2'
19726     +--------+---------+----+-------------+
19727     | OpCode |   I2    | B1 |     D1      |
19728     +--------+---------+----+-------------+
19729     0        8         16   20           31
19730
19731'SIY format: <insn> D1(B1),U2'
19732     +--------+---------+----+-------------+--------+--------+
19733     | OpCode |   I2    | B1 |     DL1     |  DH1   | OpCode |
19734     +--------+---------+----+-------------+--------+--------+
19735     0        8         16   20            32   36   40      47
19736
19737'SIL format: <insn> D1(B1),I2'
19738     +------------------+----+-------------+-----------------+
19739     |      OpCode      | B1 |      D1     |       I2        |
19740     +------------------+----+-------------+-----------------+
19741     0                  16   20            32               47
19742
19743'SS format: <insn> D1(R1,B1),D2(B3),R3'
19744     +--------+----+----+----+-------------+----+------------+
19745     | OpCode | R1 | R3 | B1 |     D1      | B2 |     D2     |
19746     +--------+----+----+----+-------------+----+------------+
19747     0        8    12   16   20            32   36          47
19748
19749'SSE format: <insn> D1(B1),D2(B2)'
19750     +------------------+----+-------------+----+------------+
19751     |      OpCode      | B1 |     D1      | B2 |     D2     |
19752     +------------------+----+-------------+----+------------+
19753     0        8    12   16   20            32   36           47
19754
19755'SSF format: <insn> D1(B1),D2(B2),R3'
19756     +--------+----+----+----+-------------+----+------------+
19757     | OpCode | R3 |OpCd| B1 |     D1      | B2 |     D2     |
19758     +--------+----+----+----+-------------+----+------------+
19759     0        8    12   16   20            32   36           47
19760
19761   For the complete list of all instruction format variants see the
19762Principles of Operation manuals.
19763
19764
19765File: as.info,  Node: s390 Aliases,  Next: s390 Operand Modifier,  Prev: s390 Formats,  Up: s390 Syntax
19766
197679.41.3.5 Instruction Aliases
19768............................
19769
19770A specific bit pattern can have multiple mnemonics, for example the bit
19771pattern '0xa7000000' has the mnemonics 'tmh' and 'tmlh'.  In addition,
19772there are a number of mnemonics recognized by 'as' that are not present
19773in the Principles of Operation.  These are the short forms of the branch
19774instructions, where the condition code mask operand is encoded in the
19775mnemonic.  This is relevant for the branch instructions, the compare and
19776branch instructions, and the compare and trap instructions.
19777
19778   For the branch instructions there are 20 condition code strings that
19779can be used as part of the mnemonic in place of a mask operand in the
19780instruction format:
19781
19782     instruction            short form
19783     ----------------------------------------------
19784     bcr   M1,R2            b<m>r  R2
19785     bc    M1,D2(X2,B2)     b<m>   D2(X2,B2)
19786     brc   M1,I2            j<m>   I2
19787     brcl  M1,I2            jg<m>  I2
19788
19789   In the mnemonic for a branch instruction the condition code string
19790<m> can be any of the following:
19791
19792     o     jump on overflow / if ones
19793     h     jump on A high
19794     p     jump on plus
19795     nle   jump on not low or equal
19796     l     jump on A low
19797     m     jump on minus
19798     nhe   jump on not high or equal
19799     lh    jump on low or high
19800     ne    jump on A not equal B
19801     nz    jump on not zero / if not zeros
19802     e     jump on A equal B
19803     z     jump on zero / if zeroes
19804     nlh   jump on not low or high
19805     he    jump on high or equal
19806     nl    jump on A not low
19807     nm    jump on not minus / if not mixed
19808     le    jump on low or equal
19809     nh    jump on A not high
19810     np    jump on not plus
19811     no    jump on not overflow / if not ones
19812
19813   For the compare and branch, and compare and trap instructions there
19814are 12 condition code strings that can be used as part of the mnemonic
19815in place of a mask operand in the instruction format:
19816
19817     instruction                   short form
19818     ------------------------------------------------------------
19819     crb    R1,R2,M3,D4(B4)        crb<m>    R1,R2,D4(B4)
19820     cgrb   R1,R2,M3,D4(B4)        cgrb<m>   R1,R2,D4(B4)
19821     crj    R1,R2,M3,I4            crj<m>    R1,R2,I4
19822     cgrj   R1,R2,M3,I4            cgrj<m>   R1,R2,I4
19823     cib    R1,I2,M3,D4(B4)        cib<m>    R1,I2,D4(B4)
19824     cgib   R1,I2,M3,D4(B4)        cgib<m>   R1,I2,D4(B4)
19825     cij    R1,I2,M3,I4            cij<m>    R1,I2,I4
19826     cgij   R1,I2,M3,I4            cgij<m>   R1,I2,I4
19827     crt    R1,R2,M3               crt<m>    R1,R2
19828     cgrt   R1,R2,M3               cgrt<m>   R1,R2
19829     cit    R1,I2,M3               cit<m>    R1,I2
19830     cgit   R1,I2,M3               cgit<m>   R1,I2
19831     clrb   R1,R2,M3,D4(B4)        clrb<m>   R1,R2,D4(B4)
19832     clgrb  R1,R2,M3,D4(B4)        clgrb<m>  R1,R2,D4(B4)
19833     clrj   R1,R2,M3,I4            clrj<m>   R1,R2,I4
19834     clgrj  R1,R2,M3,I4            clgrj<m>  R1,R2,I4
19835     clib   R1,I2,M3,D4(B4)        clib<m>   R1,I2,D4(B4)
19836     clgib  R1,I2,M3,D4(B4)        clgib<m>  R1,I2,D4(B4)
19837     clij   R1,I2,M3,I4            clij<m>   R1,I2,I4
19838     clgij  R1,I2,M3,I4            clgij<m>  R1,I2,I4
19839     clrt   R1,R2,M3               clrt<m>   R1,R2
19840     clgrt  R1,R2,M3               clgrt<m>  R1,R2
19841     clfit  R1,I2,M3               clfit<m>  R1,I2
19842     clgit  R1,I2,M3               clgit<m>  R1,I2
19843
19844   In the mnemonic for a compare and branch and compare and trap
19845instruction the condition code string <m> can be any of the following:
19846
19847     h     jump on A high
19848     nle   jump on not low or equal
19849     l     jump on A low
19850     nhe   jump on not high or equal
19851     ne    jump on A not equal B
19852     lh    jump on low or high
19853     e     jump on A equal B
19854     nlh   jump on not low or high
19855     nl    jump on A not low
19856     he    jump on high or equal
19857     nh    jump on A not high
19858     le    jump on low or equal
19859
19860
19861File: as.info,  Node: s390 Operand Modifier,  Next: s390 Instruction Marker,  Prev: s390 Aliases,  Up: s390 Syntax
19862
198639.41.3.6 Instruction Operand Modifier
19864.....................................
19865
19866If a symbol modifier is attached to a symbol in an expression for an
19867instruction operand field, the symbol term is replaced with a reference
19868to an object in the global offset table (GOT) or the procedure linkage
19869table (PLT). The following expressions are allowed: 'symbol@modifier +
19870constant', 'symbol@modifier + label + constant', and 'symbol@modifier -
19871label + constant'.  The term 'symbol' is the symbol that will be entered
19872into the GOT or PLT, 'label' is a local label, and 'constant' is an
19873arbitrary expression that the assembler can evaluate to a constant
19874value.
19875
19876   The term '(symbol + constant1)@modifier +/- label + constant2' is
19877also accepted but a warning message is printed and the term is converted
19878to 'symbol@modifier +/- label + constant1 + constant2'.
19879
19880'@got'
19881'@got12'
19882     The @got modifier can be used for displacement fields, 16-bit
19883     immediate fields and 32-bit pc-relative immediate fields.  The
19884     @got12 modifier is synonym to @got.  The symbol is added to the
19885     GOT. For displacement fields and 16-bit immediate fields the symbol
19886     term is replaced with the offset from the start of the GOT to the
19887     GOT slot for the symbol.  For a 32-bit pc-relative field the
19888     pc-relative offset to the GOT slot from the current instruction
19889     address is used.
19890'@gotent'
19891     The @gotent modifier can be used for 32-bit pc-relative immediate
19892     fields.  The symbol is added to the GOT and the symbol term is
19893     replaced with the pc-relative offset from the current instruction
19894     to the GOT slot for the symbol.
19895'@gotoff'
19896     The @gotoff modifier can be used for 16-bit immediate fields.  The
19897     symbol term is replaced with the offset from the start of the GOT
19898     to the address of the symbol.
19899'@gotplt'
19900     The @gotplt modifier can be used for displacement fields, 16-bit
19901     immediate fields, and 32-bit pc-relative immediate fields.  A
19902     procedure linkage table entry is generated for the symbol and a
19903     jump slot for the symbol is added to the GOT. For displacement
19904     fields and 16-bit immediate fields the symbol term is replaced with
19905     the offset from the start of the GOT to the jump slot for the
19906     symbol.  For a 32-bit pc-relative field the pc-relative offset to
19907     the jump slot from the current instruction address is used.
19908'@plt'
19909     The @plt modifier can be used for 16-bit and 32-bit pc-relative
19910     immediate fields.  A procedure linkage table entry is generated for
19911     the symbol.  The symbol term is replaced with the relative offset
19912     from the current instruction to the PLT entry for the symbol.
19913'@pltoff'
19914     The @pltoff modifier can be used for 16-bit immediate fields.  The
19915     symbol term is replaced with the offset from the start of the PLT
19916     to the address of the symbol.
19917'@gotntpoff'
19918     The @gotntpoff modifier can be used for displacement fields.  The
19919     symbol is added to the static TLS block and the negated offset to
19920     the symbol in the static TLS block is added to the GOT. The symbol
19921     term is replaced with the offset to the GOT slot from the start of
19922     the GOT.
19923'@indntpoff'
19924     The @indntpoff modifier can be used for 32-bit pc-relative
19925     immediate fields.  The symbol is added to the static TLS block and
19926     the negated offset to the symbol in the static TLS block is added
19927     to the GOT. The symbol term is replaced with the pc-relative offset
19928     to the GOT slot from the current instruction address.
19929
19930   For more information about the thread local storage modifiers
19931'gotntpoff' and 'indntpoff' see the ELF extension documentation 'ELF
19932Handling For Thread-Local Storage'.
19933
19934
19935File: as.info,  Node: s390 Instruction Marker,  Next: s390 Literal Pool Entries,  Prev: s390 Operand Modifier,  Up: s390 Syntax
19936
199379.41.3.7 Instruction Marker
19938...........................
19939
19940The thread local storage instruction markers are used by the linker to
19941perform code optimization.
19942
19943':tls_load'
19944     The :tls_load marker is used to flag the load instruction in the
19945     initial exec TLS model that retrieves the offset from the thread
19946     pointer to a thread local storage variable from the GOT.
19947':tls_gdcall'
19948     The :tls_gdcall marker is used to flag the branch-and-save
19949     instruction to the __tls_get_offset function in the global dynamic
19950     TLS model.
19951':tls_ldcall'
19952     The :tls_ldcall marker is used to flag the branch-and-save
19953     instruction to the __tls_get_offset function in the local dynamic
19954     TLS model.
19955
19956   For more information about the thread local storage instruction
19957marker and the linker optimizations see the ELF extension documentation
19958'ELF Handling For Thread-Local Storage'.
19959
19960
19961File: as.info,  Node: s390 Literal Pool Entries,  Prev: s390 Instruction Marker,  Up: s390 Syntax
19962
199639.41.3.8 Literal Pool Entries
19964.............................
19965
19966A literal pool is a collection of values.  To access the values a
19967pointer to the literal pool is loaded to a register, the literal pool
19968register.  Usually, register %r13 is used as the literal pool register
19969(*note s390 Register::).  Literal pool entries are created by adding the
19970suffix :lit1, :lit2, :lit4, or :lit8 to the end of an expression for an
19971instruction operand.  The expression is added to the literal pool and
19972the operand is replaced with the offset to the literal in the literal
19973pool.
19974
19975':lit1'
19976     The literal pool entry is created as an 8-bit value.  An operand
19977     modifier must not be used for the original expression.
19978':lit2'
19979     The literal pool entry is created as a 16 bit value.  The operand
19980     modifier @got may be used in the original expression.  The term
19981     'x@got:lit2' will put the got offset for the global symbol x to the
19982     literal pool as 16 bit value.
19983':lit4'
19984     The literal pool entry is created as a 32-bit value.  The operand
19985     modifier @got and @plt may be used in the original expression.  The
19986     term 'x@got:lit4' will put the got offset for the global symbol x
19987     to the literal pool as a 32-bit value.  The term 'x@plt:lit4' will
19988     put the plt offset for the global symbol x to the literal pool as a
19989     32-bit value.
19990':lit8'
19991     The literal pool entry is created as a 64-bit value.  The operand
19992     modifier @got and @plt may be used in the original expression.  The
19993     term 'x@got:lit8' will put the got offset for the global symbol x
19994     to the literal pool as a 64-bit value.  The term 'x@plt:lit8' will
19995     put the plt offset for the global symbol x to the literal pool as a
19996     64-bit value.
19997
19998   The assembler directive '.ltorg' is used to emit all literal pool
19999entries to the current position.
20000
20001
20002File: as.info,  Node: s390 Directives,  Next: s390 Floating Point,  Prev: s390 Syntax,  Up: S/390-Dependent
20003
200049.41.4 Assembler Directives
20005---------------------------
20006
20007'as' for s390 supports all of the standard ELF assembler directives as
20008outlined in the main part of this document.  Some directives have been
20009extended and there are some additional directives, which are only
20010available for the s390 'as'.
20011
20012'.insn'
20013     This directive permits the numeric representation of an
20014     instructions and makes the assembler insert the operands according
20015     to one of the instructions formats for '.insn' (*note s390
20016     Formats::).  For example, the instruction 'l %r1,24(%r15)' could be
20017     written as '.insn rx,0x58000000,%r1,24(%r15)'.
20018'.short'
20019'.long'
20020'.quad'
20021     This directive places one or more 16-bit (.short), 32-bit (.long),
20022     or 64-bit (.quad) values into the current section.  If an ELF or
20023     TLS modifier is used only the following expressions are allowed:
20024     'symbol@modifier + constant', 'symbol@modifier + label + constant',
20025     and 'symbol@modifier - label + constant'.  The following modifiers
20026     are available:
20027     '@got'
20028     '@got12'
20029          The @got modifier can be used for .short, .long and .quad.
20030          The @got12 modifier is synonym to @got.  The symbol is added
20031          to the GOT. The symbol term is replaced with offset from the
20032          start of the GOT to the GOT slot for the symbol.
20033     '@gotoff'
20034          The @gotoff modifier can be used for .short, .long and .quad.
20035          The symbol term is replaced with the offset from the start of
20036          the GOT to the address of the symbol.
20037     '@gotplt'
20038          The @gotplt modifier can be used for .long and .quad.  A
20039          procedure linkage table entry is generated for the symbol and
20040          a jump slot for the symbol is added to the GOT. The symbol
20041          term is replaced with the offset from the start of the GOT to
20042          the jump slot for the symbol.
20043     '@plt'
20044          The @plt modifier can be used for .long and .quad.  A
20045          procedure linkage table entry us generated for the symbol.
20046          The symbol term is replaced with the address of the PLT entry
20047          for the symbol.
20048     '@pltoff'
20049          The @pltoff modifier can be used for .short, .long and .quad.
20050          The symbol term is replaced with the offset from the start of
20051          the PLT to the address of the symbol.
20052     '@tlsgd'
20053     '@tlsldm'
20054          The @tlsgd and @tlsldm modifier can be used for .long and
20055          .quad.  A tls_index structure for the symbol is added to the
20056          GOT. The symbol term is replaced with the offset from the
20057          start of the GOT to the tls_index structure.
20058     '@gotntpoff'
20059     '@indntpoff'
20060          The @gotntpoff and @indntpoff modifier can be used for .long
20061          and .quad.  The symbol is added to the static TLS block and
20062          the negated offset to the symbol in the static TLS block is
20063          added to the GOT. For @gotntpoff the symbol term is replaced
20064          with the offset from the start of the GOT to the GOT slot, for
20065          @indntpoff the symbol term is replaced with the address of the
20066          GOT slot.
20067     '@dtpoff'
20068          The @dtpoff modifier can be used for .long and .quad.  The
20069          symbol term is replaced with the offset of the symbol relative
20070          to the start of the TLS block it is contained in.
20071     '@ntpoff'
20072          The @ntpoff modifier can be used for .long and .quad.  The
20073          symbol term is replaced with the offset of the symbol relative
20074          to the TCB pointer.
20075
20076     For more information about the thread local storage modifiers see
20077     the ELF extension documentation 'ELF Handling For Thread-Local
20078     Storage'.
20079
20080'.ltorg'
20081     This directive causes the current contents of the literal pool to
20082     be dumped to the current location (*note s390 Literal Pool
20083     Entries::).
20084
20085'.machine STRING[+EXTENSION]...'
20086
20087     This directive allows changing the machine for which code is
20088     generated.  'string' may be any of the '-march=' selection options,
20089     or 'push', or 'pop'.  '.machine push' saves the currently selected
20090     cpu, which may be restored with '.machine pop'.  Be aware that the
20091     cpu string has to be put into double quotes in case it contains
20092     characters not appropriate for identifiers.  So you have to write
20093     '"z9-109"' instead of just 'z9-109'.  Extensions can be specified
20094     after the cpu name, separated by plus characters.  Valid extensions
20095     are: 'htm', 'nohtm', 'vx', 'novx'.  They extend the basic
20096     instruction set with features from a higher cpu level, or remove
20097     support for a feature from the given cpu level.
20098
20099     Example: 'z13+nohtm' allows all instructions of the z13 cpu except
20100     instructions from the HTM facility.
20101
20102'.machinemode string'
20103     This directive allows one to change the architecture mode for which
20104     code is being generated.  'string' may be 'esa', 'zarch',
20105     'zarch_nohighgprs', 'push', or 'pop'.  '.machinemode
20106     zarch_nohighgprs' can be used to prevent the 'highgprs' flag from
20107     being set in the ELF header of the output file.  This is useful in
20108     situations where the code is gated with a runtime check which makes
20109     sure that the code is only executed on kernels providing the
20110     'highgprs' feature.  '.machinemode push' saves the currently
20111     selected mode, which may be restored with '.machinemode pop'.
20112
20113
20114File: as.info,  Node: s390 Floating Point,  Prev: s390 Directives,  Up: S/390-Dependent
20115
201169.41.5 Floating Point
20117---------------------
20118
20119The assembler recognizes both the IEEE floating-point instruction and
20120the hexadecimal floating-point instructions.  The floating-point
20121constructors '.float', '.single', and '.double' always emit the IEEE
20122format.  To assemble hexadecimal floating-point constants the '.long'
20123and '.quad' directives must be used.
20124
20125
20126File: as.info,  Node: SCORE-Dependent,  Next: SH-Dependent,  Prev: S/390-Dependent,  Up: Machine Dependencies
20127
201289.42 SCORE Dependent Features
20129=============================
20130
20131* Menu:
20132
20133* SCORE-Opts::   	Assembler options
20134* SCORE-Pseudo::        SCORE Assembler Directives
20135* SCORE-Syntax::        Syntax
20136
20137
20138File: as.info,  Node: SCORE-Opts,  Next: SCORE-Pseudo,  Up: SCORE-Dependent
20139
201409.42.1 Options
20141--------------
20142
20143The following table lists all available SCORE options.
20144
20145'-G NUM'
20146     This option sets the largest size of an object that can be
20147     referenced implicitly with the 'gp' register.  The default value is
20148     8.
20149
20150'-EB'
20151     Assemble code for a big-endian cpu
20152
20153'-EL'
20154     Assemble code for a little-endian cpu
20155
20156'-FIXDD'
20157     Assemble code for fix data dependency
20158
20159'-NWARN'
20160     Assemble code for no warning message for fix data dependency
20161
20162'-SCORE5'
20163     Assemble code for target is SCORE5
20164
20165'-SCORE5U'
20166     Assemble code for target is SCORE5U
20167
20168'-SCORE7'
20169     Assemble code for target is SCORE7, this is default setting
20170
20171'-SCORE3'
20172     Assemble code for target is SCORE3
20173
20174'-march=score7'
20175     Assemble code for target is SCORE7, this is default setting
20176
20177'-march=score3'
20178     Assemble code for target is SCORE3
20179
20180'-USE_R1'
20181     Assemble code for no warning message when using temp register r1
20182
20183'-KPIC'
20184     Generate code for PIC. This option tells the assembler to generate
20185     score position-independent macro expansions.  It also tells the
20186     assembler to mark the output file as PIC.
20187
20188'-O0'
20189     Assembler will not perform any optimizations
20190
20191'-V'
20192     Sunplus release version
20193
20194
20195File: as.info,  Node: SCORE-Pseudo,  Next: SCORE-Syntax,  Prev: SCORE-Opts,  Up: SCORE-Dependent
20196
201979.42.2 SCORE Assembler Directives
20198---------------------------------
20199
20200A number of assembler directives are available for SCORE. The following
20201table is far from complete.
20202
20203'.set nwarn'
20204     Let the assembler not to generate warnings if the source machine
20205     language instructions happen data dependency.
20206
20207'.set fixdd'
20208     Let the assembler to insert bubbles (32 bit nop instruction / 16
20209     bit nop!  Instruction) if the source machine language instructions
20210     happen data dependency.
20211
20212'.set nofixdd'
20213     Let the assembler to generate warnings if the source machine
20214     language instructions happen data dependency.  (Default)
20215
20216'.set r1'
20217     Let the assembler not to generate warnings if the source program
20218     uses r1.  allow user to use r1
20219
20220'set nor1'
20221     Let the assembler to generate warnings if the source program uses
20222     r1.  (Default)
20223
20224'.sdata'
20225     Tell the assembler to add subsequent data into the sdata section
20226
20227'.rdata'
20228     Tell the assembler to add subsequent data into the rdata section
20229
20230'.frame "frame-register", "offset", "return-pc-register"'
20231     Describe a stack frame.  "frame-register" is the frame register,
20232     "offset" is the distance from the frame register to the virtual
20233     frame pointer, "return-pc-register" is the return program register.
20234     You must use ".ent" before ".frame" and only one ".frame" can be
20235     used per ".ent".
20236
20237'.mask "bitmask", "frameoffset"'
20238     Indicate which of the integer registers are saved in the current
20239     function's stack frame, this is for the debugger to explain the
20240     frame chain.
20241
20242'.ent "proc-name"'
20243     Set the beginning of the procedure "proc_name".  Use this directive
20244     when you want to generate information for the debugger.
20245
20246'.end proc-name'
20247     Set the end of a procedure.  Use this directive to generate
20248     information for the debugger.
20249
20250'.bss'
20251     Switch the destination of following statements into the bss
20252     section, which is used for data that is uninitialized anywhere.
20253
20254
20255File: as.info,  Node: SCORE-Syntax,  Prev: SCORE-Pseudo,  Up: SCORE-Dependent
20256
202579.42.3 SCORE Syntax
20258-------------------
20259
20260* Menu:
20261
20262* SCORE-Chars::                Special Characters
20263
20264
20265File: as.info,  Node: SCORE-Chars,  Up: SCORE-Syntax
20266
202679.42.3.1 Special Characters
20268...........................
20269
20270The presence of a '#' appearing anywhere on a line indicates the start
20271of a comment that extends to the end of that line.
20272
20273   If a '#' appears as the first character of a line then the whole line
20274is treated as a comment, but in this case the line can also be a logical
20275line number directive (*note Comments::) or a preprocessor control
20276command (*note Preprocessing::).
20277
20278   The ';' character can be used to separate statements on the same
20279line.
20280
20281
20282File: as.info,  Node: SH-Dependent,  Next: Sparc-Dependent,  Prev: SCORE-Dependent,  Up: Machine Dependencies
20283
202849.43 Renesas / SuperH SH Dependent Features
20285===========================================
20286
20287* Menu:
20288
20289* SH Options::              Options
20290* SH Syntax::               Syntax
20291* SH Floating Point::       Floating Point
20292* SH Directives::           SH Machine Directives
20293* SH Opcodes::              Opcodes
20294
20295
20296File: as.info,  Node: SH Options,  Next: SH Syntax,  Up: SH-Dependent
20297
202989.43.1 Options
20299--------------
20300
20301'as' has following command-line options for the Renesas (formerly
20302Hitachi) / SuperH SH family.
20303
20304'--little'
20305     Generate little endian code.
20306
20307'--big'
20308     Generate big endian code.
20309
20310'--relax'
20311     Alter jump instructions for long displacements.
20312
20313'--small'
20314     Align sections to 4 byte boundaries, not 16.
20315
20316'--dsp'
20317     Enable sh-dsp insns, and disable sh3e / sh4 insns.
20318
20319'--renesas'
20320     Disable optimization with section symbol for compatibility with
20321     Renesas assembler.
20322
20323'--allow-reg-prefix'
20324     Allow '$' as a register name prefix.
20325
20326'--fdpic'
20327     Generate an FDPIC object file.
20328
20329'--isa=sh4 | sh4a'
20330     Specify the sh4 or sh4a instruction set.
20331'--isa=dsp'
20332     Enable sh-dsp insns, and disable sh3e / sh4 insns.
20333'--isa=fp'
20334     Enable sh2e, sh3e, sh4, and sh4a insn sets.
20335'--isa=all'
20336     Enable sh1, sh2, sh2e, sh3, sh3e, sh4, sh4a, and sh-dsp insn sets.
20337
20338'-h-tick-hex'
20339     Support H'00 style hex constants in addition to 0x00 style.
20340
20341
20342File: as.info,  Node: SH Syntax,  Next: SH Floating Point,  Prev: SH Options,  Up: SH-Dependent
20343
203449.43.2 Syntax
20345-------------
20346
20347* Menu:
20348
20349* SH-Chars::                Special Characters
20350* SH-Regs::                 Register Names
20351* SH-Addressing::           Addressing Modes
20352
20353
20354File: as.info,  Node: SH-Chars,  Next: SH-Regs,  Up: SH Syntax
20355
203569.43.2.1 Special Characters
20357...........................
20358
20359'!' is the line comment character.
20360
20361   You can use ';' instead of a newline to separate statements.
20362
20363   If a '#' appears as the first character of a line then the whole line
20364is treated as a comment, but in this case the line could also be a
20365logical line number directive (*note Comments::) or a preprocessor
20366control command (*note Preprocessing::).
20367
20368   Since '$' has no special meaning, you may use it in symbol names.
20369
20370
20371File: as.info,  Node: SH-Regs,  Next: SH-Addressing,  Prev: SH-Chars,  Up: SH Syntax
20372
203739.43.2.2 Register Names
20374.......................
20375
20376You can use the predefined symbols 'r0', 'r1', 'r2', 'r3', 'r4', 'r5',
20377'r6', 'r7', 'r8', 'r9', 'r10', 'r11', 'r12', 'r13', 'r14', and 'r15' to
20378refer to the SH registers.
20379
20380   The SH also has these control registers:
20381
20382'pr'
20383     procedure register (holds return address)
20384
20385'pc'
20386     program counter
20387
20388'mach'
20389'macl'
20390     high and low multiply accumulator registers
20391
20392'sr'
20393     status register
20394
20395'gbr'
20396     global base register
20397
20398'vbr'
20399     vector base register (for interrupt vectors)
20400
20401
20402File: as.info,  Node: SH-Addressing,  Prev: SH-Regs,  Up: SH Syntax
20403
204049.43.2.3 Addressing Modes
20405.........................
20406
20407'as' understands the following addressing modes for the SH. 'RN' in the
20408following refers to any of the numbered registers, but _not_ the control
20409registers.
20410
20411'RN'
20412     Register direct
20413
20414'@RN'
20415     Register indirect
20416
20417'@-RN'
20418     Register indirect with pre-decrement
20419
20420'@RN+'
20421     Register indirect with post-increment
20422
20423'@(DISP, RN)'
20424     Register indirect with displacement
20425
20426'@(R0, RN)'
20427     Register indexed
20428
20429'@(DISP, GBR)'
20430     'GBR' offset
20431
20432'@(R0, GBR)'
20433     GBR indexed
20434
20435'ADDR'
20436'@(DISP, PC)'
20437     PC relative address (for branch or for addressing memory).  The
20438     'as' implementation allows you to use the simpler form ADDR
20439     anywhere a PC relative address is called for; the alternate form is
20440     supported for compatibility with other assemblers.
20441
20442'#IMM'
20443     Immediate data
20444
20445
20446File: as.info,  Node: SH Floating Point,  Next: SH Directives,  Prev: SH Syntax,  Up: SH-Dependent
20447
204489.43.3 Floating Point
20449---------------------
20450
20451SH2E, SH3E and SH4 groups have on-chip floating-point unit (FPU). Other
20452SH groups can use '.float' directive to generate IEEE floating-point
20453numbers.
20454
20455   SH2E and SH3E support single-precision floating point calculations as
20456well as entirely PCAPI compatible emulation of double-precision floating
20457point calculations.  SH2E and SH3E instructions are a subset of the
20458floating point calculations conforming to the IEEE754 standard.
20459
20460   In addition to single-precision and double-precision floating-point
20461operation capability, the on-chip FPU of SH4 has a 128-bit graphic
20462engine that enables 32-bit floating-point data to be processed 128 bits
20463at a time.  It also supports 4 * 4 array operations and inner product
20464operations.  Also, a superscalar architecture is employed that enables
20465simultaneous execution of two instructions (including FPU instructions),
20466providing performance of up to twice that of conventional architectures
20467at the same frequency.
20468
20469
20470File: as.info,  Node: SH Directives,  Next: SH Opcodes,  Prev: SH Floating Point,  Up: SH-Dependent
20471
204729.43.4 SH Machine Directives
20473----------------------------
20474
20475'uaword'
20476'ualong'
20477'uaquad'
20478     'as' will issue a warning when a misaligned '.word', '.long', or
20479     '.quad' directive is used.  You may use '.uaword', '.ualong', or
20480     '.uaquad' to indicate that the value is intentionally misaligned.
20481
20482
20483File: as.info,  Node: SH Opcodes,  Prev: SH Directives,  Up: SH-Dependent
20484
204859.43.5 Opcodes
20486--------------
20487
20488For detailed information on the SH machine instruction set, see
20489'SH-Microcomputer User's Manual' (Renesas) or 'SH-4 32-bit CPU Core
20490Architecture' (SuperH) and 'SuperH (SH) 64-Bit RISC Series' (SuperH).
20491
20492   'as' implements all the standard SH opcodes.  No additional
20493pseudo-instructions are needed on this family.  Note, however, that
20494because 'as' supports a simpler form of PC-relative addressing, you may
20495simply write (for example)
20496
20497     mov.l  bar,r0
20498
20499where other assemblers might require an explicit displacement to 'bar'
20500from the program counter:
20501
20502     mov.l  @(DISP, PC)
20503
20504   Here is a summary of SH opcodes:
20505
20506     Legend:
20507     Rn        a numbered register
20508     Rm        another numbered register
20509     #imm      immediate data
20510     disp      displacement
20511     disp8     8-bit displacement
20512     disp12    12-bit displacement
20513
20514     add #imm,Rn                    lds.l @Rn+,PR
20515     add Rm,Rn                      mac.w @Rm+,@Rn+
20516     addc Rm,Rn                     mov #imm,Rn
20517     addv Rm,Rn                     mov Rm,Rn
20518     and #imm,R0                    mov.b Rm,@(R0,Rn)
20519     and Rm,Rn                      mov.b Rm,@-Rn
20520     and.b #imm,@(R0,GBR)           mov.b Rm,@Rn
20521     bf disp8                       mov.b @(disp,Rm),R0
20522     bra disp12                     mov.b @(disp,GBR),R0
20523     bsr disp12                     mov.b @(R0,Rm),Rn
20524     bt disp8                       mov.b @Rm+,Rn
20525     clrmac                         mov.b @Rm,Rn
20526     clrt                           mov.b R0,@(disp,Rm)
20527     cmp/eq #imm,R0                 mov.b R0,@(disp,GBR)
20528     cmp/eq Rm,Rn                   mov.l Rm,@(disp,Rn)
20529     cmp/ge Rm,Rn                   mov.l Rm,@(R0,Rn)
20530     cmp/gt Rm,Rn                   mov.l Rm,@-Rn
20531     cmp/hi Rm,Rn                   mov.l Rm,@Rn
20532     cmp/hs Rm,Rn                   mov.l @(disp,Rn),Rm
20533     cmp/pl Rn                      mov.l @(disp,GBR),R0
20534     cmp/pz Rn                      mov.l @(disp,PC),Rn
20535     cmp/str Rm,Rn                  mov.l @(R0,Rm),Rn
20536     div0s Rm,Rn                    mov.l @Rm+,Rn
20537     div0u                          mov.l @Rm,Rn
20538     div1 Rm,Rn                     mov.l R0,@(disp,GBR)
20539     exts.b Rm,Rn                   mov.w Rm,@(R0,Rn)
20540     exts.w Rm,Rn                   mov.w Rm,@-Rn
20541     extu.b Rm,Rn                   mov.w Rm,@Rn
20542     extu.w Rm,Rn                   mov.w @(disp,Rm),R0
20543     jmp @Rn                        mov.w @(disp,GBR),R0
20544     jsr @Rn                        mov.w @(disp,PC),Rn
20545     ldc Rn,GBR                     mov.w @(R0,Rm),Rn
20546     ldc Rn,SR                      mov.w @Rm+,Rn
20547     ldc Rn,VBR                     mov.w @Rm,Rn
20548     ldc.l @Rn+,GBR                 mov.w R0,@(disp,Rm)
20549     ldc.l @Rn+,SR                  mov.w R0,@(disp,GBR)
20550     ldc.l @Rn+,VBR                 mova @(disp,PC),R0
20551     lds Rn,MACH                    movt Rn
20552     lds Rn,MACL                    muls Rm,Rn
20553     lds Rn,PR                      mulu Rm,Rn
20554     lds.l @Rn+,MACH                neg Rm,Rn
20555     lds.l @Rn+,MACL                negc Rm,Rn
20556     nop                            stc VBR,Rn
20557     not Rm,Rn                      stc.l GBR,@-Rn
20558     or #imm,R0                     stc.l SR,@-Rn
20559     or Rm,Rn                       stc.l VBR,@-Rn
20560     or.b #imm,@(R0,GBR)            sts MACH,Rn
20561     rotcl Rn                       sts MACL,Rn
20562     rotcr Rn                       sts PR,Rn
20563     rotl Rn                        sts.l MACH,@-Rn
20564     rotr Rn                        sts.l MACL,@-Rn
20565     rte                            sts.l PR,@-Rn
20566     rts                            sub Rm,Rn
20567     sett                           subc Rm,Rn
20568     shal Rn                        subv Rm,Rn
20569     shar Rn                        swap.b Rm,Rn
20570     shll Rn                        swap.w Rm,Rn
20571     shll16 Rn                      tas.b @Rn
20572     shll2 Rn                       trapa #imm
20573     shll8 Rn                       tst #imm,R0
20574     shlr Rn                        tst Rm,Rn
20575     shlr16 Rn                      tst.b #imm,@(R0,GBR)
20576     shlr2 Rn                       xor #imm,R0
20577     shlr8 Rn                       xor Rm,Rn
20578     sleep                          xor.b #imm,@(R0,GBR)
20579     stc GBR,Rn                     xtrct Rm,Rn
20580     stc SR,Rn
20581
20582
20583File: as.info,  Node: Sparc-Dependent,  Next: TIC54X-Dependent,  Prev: SH-Dependent,  Up: Machine Dependencies
20584
205859.44 SPARC Dependent Features
20586=============================
20587
20588* Menu:
20589
20590* Sparc-Opts::                  Options
20591* Sparc-Aligned-Data::		Option to enforce aligned data
20592* Sparc-Syntax::		Syntax
20593* Sparc-Float::                 Floating Point
20594* Sparc-Directives::            Sparc Machine Directives
20595
20596
20597File: as.info,  Node: Sparc-Opts,  Next: Sparc-Aligned-Data,  Up: Sparc-Dependent
20598
205999.44.1 Options
20600--------------
20601
20602The SPARC chip family includes several successive versions, using the
20603same core instruction set, but including a few additional instructions
20604at each version.  There are exceptions to this however.  For details on
20605what instructions each variant supports, please see the chip's
20606architecture reference manual.
20607
20608   By default, 'as' assumes the core instruction set (SPARC v6), but
20609"bumps" the architecture level as needed: it switches to successively
20610higher architectures as it encounters instructions that only exist in
20611the higher levels.
20612
20613   If not configured for SPARC v9 ('sparc64-*-*') GAS will not bump past
20614sparclite by default, an option must be passed to enable the v9
20615instructions.
20616
20617   GAS treats sparclite as being compatible with v8, unless an
20618architecture is explicitly requested.  SPARC v9 is always incompatible
20619with sparclite.
20620
20621'-Av6 | -Av7 | -Av8 | -Aleon | -Asparclet | -Asparclite'
20622'-Av8plus | -Av8plusa | -Av8plusb | -Av8plusc | -Av8plusd |'
20623'-Av8plusv | -Av8plusm | -Av8plusm8'
20624'-Av9 | -Av9a | -Av9b | -Av9c | -Av9d | -Av9e | -Av9v | -Av9m | -Av9m8'
20625'-Asparc | -Asparcvis | -Asparcvis2 | -Asparcfmaf | -Asparcima'
20626'-Asparcvis3 | -Asparcvis3r | -Asparc5 | -Asparc6'
20627     Use one of the '-A' options to select one of the SPARC
20628     architectures explicitly.  If you select an architecture
20629     explicitly, 'as' reports a fatal error if it encounters an
20630     instruction or feature requiring an incompatible or higher level.
20631
20632     '-Av8plus', '-Av8plusa', '-Av8plusb', '-Av8plusc', '-Av8plusd', and
20633     '-Av8plusv' select a 32 bit environment.
20634
20635     '-Av9', '-Av9a', '-Av9b', '-Av9c', '-Av9d', '-Av9e', '-Av9v' and
20636     '-Av9m' select a 64 bit environment and are not available unless
20637     GAS is explicitly configured with 64 bit environment support.
20638
20639     '-Av8plusa' and '-Av9a' enable the SPARC V9 instruction set with
20640     UltraSPARC VIS 1.0 extensions.
20641
20642     '-Av8plusb' and '-Av9b' enable the UltraSPARC VIS 2.0 instructions,
20643     as well as the instructions enabled by '-Av8plusa' and '-Av9a'.
20644
20645     '-Av8plusc' and '-Av9c' enable the UltraSPARC Niagara instructions,
20646     as well as the instructions enabled by '-Av8plusb' and '-Av9b'.
20647
20648     '-Av8plusd' and '-Av9d' enable the floating point fused
20649     multiply-add, VIS 3.0, and HPC extension instructions, as well as
20650     the instructions enabled by '-Av8plusc' and '-Av9c'.
20651
20652     '-Av8pluse' and '-Av9e' enable the cryptographic instructions, as
20653     well as the instructions enabled by '-Av8plusd' and '-Av9d'.
20654
20655     '-Av8plusv' and '-Av9v' enable floating point unfused multiply-add,
20656     and integer multiply-add, as well as the instructions enabled by
20657     '-Av8pluse' and '-Av9e'.
20658
20659     '-Av8plusm' and '-Av9m' enable the VIS 4.0, subtract extended,
20660     xmpmul, xmontmul and xmontsqr instructions, as well as the
20661     instructions enabled by '-Av8plusv' and '-Av9v'.
20662
20663     '-Av8plusm8' and '-Av9m8' enable the instructions introduced in the
20664     Oracle SPARC Architecture 2017 and the M8 processor, as well as the
20665     instructions enabled by '-Av8plusm' and '-Av9m'.
20666
20667     '-Asparc' specifies a v9 environment.  It is equivalent to '-Av9'
20668     if the word size is 64-bit, and '-Av8plus' otherwise.
20669
20670     '-Asparcvis' specifies a v9a environment.  It is equivalent to
20671     '-Av9a' if the word size is 64-bit, and '-Av8plusa' otherwise.
20672
20673     '-Asparcvis2' specifies a v9b environment.  It is equivalent to
20674     '-Av9b' if the word size is 64-bit, and '-Av8plusb' otherwise.
20675
20676     '-Asparcfmaf' specifies a v9b environment with the floating point
20677     fused multiply-add instructions enabled.
20678
20679     '-Asparcima' specifies a v9b environment with the integer
20680     multiply-add instructions enabled.
20681
20682     '-Asparcvis3' specifies a v9b environment with the VIS 3.0, HPC ,
20683     and floating point fused multiply-add instructions enabled.
20684
20685     '-Asparcvis3r' specifies a v9b environment with the VIS 3.0, HPC,
20686     and floating point unfused multiply-add instructions enabled.
20687
20688     '-Asparc5' is equivalent to '-Av9m'.
20689
20690     '-Asparc6' is equivalent to '-Av9m8'.
20691
20692'-xarch=v8plus | -xarch=v8plusa | -xarch=v8plusb | -xarch=v8plusc'
20693'-xarch=v8plusd | -xarch=v8plusv | -xarch=v8plusm |'
20694'-xarch=v8plusm8 | -xarch=v9 | -xarch=v9a | -xarch=v9b'
20695'-xarch=v9c | -xarch=v9d | -xarch=v9e | -xarch=v9v'
20696'-xarch=v9m | -xarch=v9m8'
20697'-xarch=sparc | -xarch=sparcvis | -xarch=sparcvis2'
20698'-xarch=sparcfmaf | -xarch=sparcima | -xarch=sparcvis3'
20699'-xarch=sparcvis3r | -xarch=sparc5 | -xarch=sparc6'
20700     For compatibility with the SunOS v9 assembler.  These options are
20701     equivalent to -Av8plus, -Av8plusa, -Av8plusb, -Av8plusc, -Av8plusd,
20702     -Av8plusv, -Av8plusm, -Av8plusm8, -Av9, -Av9a, -Av9b, -Av9c, -Av9d,
20703     -Av9e, -Av9v, -Av9m, -Av9m8, -Asparc, -Asparcvis, -Asparcvis2,
20704     -Asparcfmaf, -Asparcima, -Asparcvis3, -Asparcvis3r, -Asparc5 and
20705     -Asparc6 respectively.
20706
20707'-bump'
20708     Warn whenever it is necessary to switch to another level.  If an
20709     architecture level is explicitly requested, GAS will not issue
20710     warnings until that level is reached, and will then bump the level
20711     as required (except between incompatible levels).
20712
20713'-32 | -64'
20714     Select the word size, either 32 bits or 64 bits.  These options are
20715     only available with the ELF object file format, and require that
20716     the necessary BFD support has been included.
20717
20718'--dcti-couples-detect'
20719     Warn if a DCTI (delayed control transfer instruction) couple is
20720     found when generating code for a variant of the SPARC architecture
20721     in which the execution of the couple is unpredictable, or very
20722     slow.  This is disabled by default.
20723
20724
20725File: as.info,  Node: Sparc-Aligned-Data,  Next: Sparc-Syntax,  Prev: Sparc-Opts,  Up: Sparc-Dependent
20726
207279.44.2 Enforcing aligned data
20728-----------------------------
20729
20730SPARC GAS normally permits data to be misaligned.  For example, it
20731permits the '.long' pseudo-op to be used on a byte boundary.  However,
20732the native SunOS assemblers issue an error when they see misaligned
20733data.
20734
20735   You can use the '--enforce-aligned-data' option to make SPARC GAS
20736also issue an error about misaligned data, just as the SunOS assemblers
20737do.
20738
20739   The '--enforce-aligned-data' option is not the default because gcc
20740issues misaligned data pseudo-ops when it initializes certain packed
20741data structures (structures defined using the 'packed' attribute).  You
20742may have to assemble with GAS in order to initialize packed data
20743structures in your own code.
20744
20745
20746File: as.info,  Node: Sparc-Syntax,  Next: Sparc-Float,  Prev: Sparc-Aligned-Data,  Up: Sparc-Dependent
20747
207489.44.3 Sparc Syntax
20749-------------------
20750
20751The assembler syntax closely follows The Sparc Architecture Manual,
20752versions 8 and 9, as well as most extensions defined by Sun for their
20753UltraSPARC and Niagara line of processors.
20754
20755* Menu:
20756
20757* Sparc-Chars::                Special Characters
20758* Sparc-Regs::                 Register Names
20759* Sparc-Constants::            Constant Names
20760* Sparc-Relocs::               Relocations
20761* Sparc-Size-Translations::    Size Translations
20762
20763
20764File: as.info,  Node: Sparc-Chars,  Next: Sparc-Regs,  Up: Sparc-Syntax
20765
207669.44.3.1 Special Characters
20767...........................
20768
20769A '!' character appearing anywhere on a line indicates the start of a
20770comment that extends to the end of that line.
20771
20772   If a '#' appears as the first character of a line then the whole line
20773is treated as a comment, but in this case the line could also be a
20774logical line number directive (*note Comments::) or a preprocessor
20775control command (*note Preprocessing::).
20776
20777   ';' can be used instead of a newline to separate statements.
20778
20779
20780File: as.info,  Node: Sparc-Regs,  Next: Sparc-Constants,  Prev: Sparc-Chars,  Up: Sparc-Syntax
20781
207829.44.3.2 Register Names
20783.......................
20784
20785The Sparc integer register file is broken down into global, outgoing,
20786local, and incoming.
20787
20788   * The 8 global registers are referred to as '%gN'.
20789
20790   * The 8 outgoing registers are referred to as '%oN'.
20791
20792   * The 8 local registers are referred to as '%lN'.
20793
20794   * The 8 incoming registers are referred to as '%iN'.
20795
20796   * The frame pointer register '%i6' can be referenced using the alias
20797     '%fp'.
20798
20799   * The stack pointer register '%o6' can be referenced using the alias
20800     '%sp'.
20801
20802   Floating point registers are simply referred to as '%fN'.  When
20803assembling for pre-V9, only 32 floating point registers are available.
20804For V9 and later there are 64, but there are restrictions when
20805referencing the upper 32 registers.  They can only be accessed as double
20806or quad, and thus only even or quad numbered accesses are allowed.  For
20807example, '%f34' is a legal floating point register, but '%f35' is not.
20808
20809   Floating point registers accessed as double can also be referred
20810using the '%dN' notation, where N is even.  Similarly, floating point
20811registers accessed as quad can be referred using the '%qN' notation,
20812where N is a multiple of 4.  For example, '%f4' can be denoted as both
20813'%d4' and '%q4'.  On the other hand, '%f2' can be denoted as '%d2' but
20814not as '%q2'.
20815
20816   Certain V9 instructions allow access to ancillary state registers.
20817Most simply they can be referred to as '%asrN' where N can be from 16 to
2081831.  However, there are some aliases defined to reference ASR registers
20819defined for various UltraSPARC processors:
20820
20821   * The tick compare register is referred to as '%tick_cmpr'.
20822
20823   * The system tick register is referred to as '%stick'.  An alias,
20824     '%sys_tick', exists but is deprecated and should not be used by new
20825     software.
20826
20827   * The system tick compare register is referred to as '%stick_cmpr'.
20828     An alias, '%sys_tick_cmpr', exists but is deprecated and should not
20829     be used by new software.
20830
20831   * The software interrupt register is referred to as '%softint'.
20832
20833   * The set software interrupt register is referred to as
20834     '%set_softint'.  The mnemonic '%softint_set' is provided as an
20835     alias.
20836
20837   * The clear software interrupt register is referred to as
20838     '%clear_softint'.  The mnemonic '%softint_clear' is provided as an
20839     alias.
20840
20841   * The performance instrumentation counters register is referred to as
20842     '%pic'.
20843
20844   * The performance control register is referred to as '%pcr'.
20845
20846   * The graphics status register is referred to as '%gsr'.
20847
20848   * The V9 dispatch control register is referred to as '%dcr'.
20849
20850   Various V9 branch and conditional move instructions allow
20851specification of which set of integer condition codes to test.  These
20852are referred to as '%xcc' and '%icc'.
20853
20854   Additionally, GAS supports the so-called "natural" condition codes;
20855these are referred to as '%ncc' and reference to '%icc' if the word size
20856is 32, '%xcc' if the word size is 64.
20857
20858   In V9, there are 4 sets of floating point condition codes which are
20859referred to as '%fccN'.
20860
20861   Several special privileged and non-privileged registers exist:
20862
20863   * The V9 address space identifier register is referred to as '%asi'.
20864
20865   * The V9 restorable windows register is referred to as '%canrestore'.
20866
20867   * The V9 savable windows register is referred to as '%cansave'.
20868
20869   * The V9 clean windows register is referred to as '%cleanwin'.
20870
20871   * The V9 current window pointer register is referred to as '%cwp'.
20872
20873   * The floating-point queue register is referred to as '%fq'.
20874
20875   * The V8 co-processor queue register is referred to as '%cq'.
20876
20877   * The floating point status register is referred to as '%fsr'.
20878
20879   * The other windows register is referred to as '%otherwin'.
20880
20881   * The V9 program counter register is referred to as '%pc'.
20882
20883   * The V9 next program counter register is referred to as '%npc'.
20884
20885   * The V9 processor interrupt level register is referred to as '%pil'.
20886
20887   * The V9 processor state register is referred to as '%pstate'.
20888
20889   * The trap base address register is referred to as '%tba'.
20890
20891   * The V9 tick register is referred to as '%tick'.
20892
20893   * The V9 trap level is referred to as '%tl'.
20894
20895   * The V9 trap program counter is referred to as '%tpc'.
20896
20897   * The V9 trap next program counter is referred to as '%tnpc'.
20898
20899   * The V9 trap state is referred to as '%tstate'.
20900
20901   * The V9 trap type is referred to as '%tt'.
20902
20903   * The V9 condition codes is referred to as '%ccr'.
20904
20905   * The V9 floating-point registers state is referred to as '%fprs'.
20906
20907   * The V9 version register is referred to as '%ver'.
20908
20909   * The V9 window state register is referred to as '%wstate'.
20910
20911   * The Y register is referred to as '%y'.
20912
20913   * The V8 window invalid mask register is referred to as '%wim'.
20914
20915   * The V8 processor state register is referred to as '%psr'.
20916
20917   * The V9 global register level register is referred to as '%gl'.
20918
20919   Several special register names exist for hypervisor mode code:
20920
20921   * The hyperprivileged processor state register is referred to as
20922     '%hpstate'.
20923
20924   * The hyperprivileged trap state register is referred to as
20925     '%htstate'.
20926
20927   * The hyperprivileged interrupt pending register is referred to as
20928     '%hintp'.
20929
20930   * The hyperprivileged trap base address register is referred to as
20931     '%htba'.
20932
20933   * The hyperprivileged implementation version register is referred to
20934     as '%hver'.
20935
20936   * The hyperprivileged system tick offset register is referred to as
20937     '%hstick_offset'.  Note that there is no '%hstick' register, the
20938     normal '%stick' is used.
20939
20940   * The hyperprivileged system tick enable register is referred to as
20941     '%hstick_enable'.
20942
20943   * The hyperprivileged system tick compare register is referred to as
20944     '%hstick_cmpr'.
20945
20946
20947File: as.info,  Node: Sparc-Constants,  Next: Sparc-Relocs,  Prev: Sparc-Regs,  Up: Sparc-Syntax
20948
209499.44.3.3 Constants
20950..................
20951
20952Several Sparc instructions take an immediate operand field for which
20953mnemonic names exist.  Two such examples are 'membar' and 'prefetch'.
20954Another example are the set of V9 memory access instruction that allow
20955specification of an address space identifier.
20956
20957   The 'membar' instruction specifies a memory barrier that is the
20958defined by the operand which is a bitmask.  The supported mask mnemonics
20959are:
20960
20961   * '#Sync' requests that all operations (including nonmemory reference
20962     operations) appearing prior to the 'membar' must have been
20963     performed and the effects of any exceptions become visible before
20964     any instructions after the 'membar' may be initiated.  This
20965     corresponds to 'membar' cmask field bit 2.
20966
20967   * '#MemIssue' requests that all memory reference operations appearing
20968     prior to the 'membar' must have been performed before any memory
20969     operation after the 'membar' may be initiated.  This corresponds to
20970     'membar' cmask field bit 1.
20971
20972   * '#Lookaside' requests that a store appearing prior to the 'membar'
20973     must complete before any load following the 'membar' referencing
20974     the same address can be initiated.  This corresponds to 'membar'
20975     cmask field bit 0.
20976
20977   * '#StoreStore' defines that the effects of all stores appearing
20978     prior to the 'membar' instruction must be visible to all processors
20979     before the effect of any stores following the 'membar'.  Equivalent
20980     to the deprecated 'stbar' instruction.  This corresponds to
20981     'membar' mmask field bit 3.
20982
20983   * '#LoadStore' defines all loads appearing prior to the 'membar'
20984     instruction must have been performed before the effect of any
20985     stores following the 'membar' is visible to any other processor.
20986     This corresponds to 'membar' mmask field bit 2.
20987
20988   * '#StoreLoad' defines that the effects of all stores appearing prior
20989     to the 'membar' instruction must be visible to all processors
20990     before loads following the 'membar' may be performed.  This
20991     corresponds to 'membar' mmask field bit 1.
20992
20993   * '#LoadLoad' defines that all loads appearing prior to the 'membar'
20994     instruction must have been performed before any loads following the
20995     'membar' may be performed.  This corresponds to 'membar' mmask
20996     field bit 0.
20997
20998   These values can be ored together, for example:
20999
21000     membar #Sync
21001     membar #StoreLoad | #LoadLoad
21002     membar #StoreLoad | #StoreStore
21003
21004   The 'prefetch' and 'prefetcha' instructions take a prefetch function
21005code.  The following prefetch function code constant mnemonics are
21006available:
21007
21008   * '#n_reads' requests a prefetch for several reads, and corresponds
21009     to a prefetch function code of 0.
21010
21011     '#one_read' requests a prefetch for one read, and corresponds to a
21012     prefetch function code of 1.
21013
21014     '#n_writes' requests a prefetch for several writes (and possibly
21015     reads), and corresponds to a prefetch function code of 2.
21016
21017     '#one_write' requests a prefetch for one write, and corresponds to
21018     a prefetch function code of 3.
21019
21020     '#page' requests a prefetch page, and corresponds to a prefetch
21021     function code of 4.
21022
21023     '#invalidate' requests a prefetch invalidate, and corresponds to a
21024     prefetch function code of 16.
21025
21026     '#unified' requests a prefetch to the nearest unified cache, and
21027     corresponds to a prefetch function code of 17.
21028
21029     '#n_reads_strong' requests a strong prefetch for several reads, and
21030     corresponds to a prefetch function code of 20.
21031
21032     '#one_read_strong' requests a strong prefetch for one read, and
21033     corresponds to a prefetch function code of 21.
21034
21035     '#n_writes_strong' requests a strong prefetch for several writes,
21036     and corresponds to a prefetch function code of 22.
21037
21038     '#one_write_strong' requests a strong prefetch for one write, and
21039     corresponds to a prefetch function code of 23.
21040
21041     Onle one prefetch code may be specified.  Here are some examples:
21042
21043          prefetch  [%l0 + %l2], #one_read
21044          prefetch  [%g2 + 8], #n_writes
21045          prefetcha [%g1] 0x8, #unified
21046          prefetcha [%o0 + 0x10] %asi, #n_reads
21047
21048     The actual behavior of a given prefetch function code is processor
21049     specific.  If a processor does not implement a given prefetch
21050     function code, it will treat the prefetch instruction as a nop.
21051
21052     For instructions that accept an immediate address space identifier,
21053     'as' provides many mnemonics corresponding to V9 defined as well as
21054     UltraSPARC and Niagara extended values.  For example, '#ASI_P' and
21055     '#ASI_BLK_INIT_QUAD_LDD_AIUS'.  See the V9 and processor specific
21056     manuals for details.
21057
21058
21059File: as.info,  Node: Sparc-Relocs,  Next: Sparc-Size-Translations,  Prev: Sparc-Constants,  Up: Sparc-Syntax
21060
210619.44.3.4 Relocations
21062....................
21063
21064ELF relocations are available as defined in the 32-bit and 64-bit Sparc
21065ELF specifications.
21066
21067   'R_SPARC_HI22' is obtained using '%hi' and 'R_SPARC_LO10' is obtained
21068using '%lo'.  Likewise 'R_SPARC_HIX22' is obtained from '%hix' and
21069'R_SPARC_LOX10' is obtained using '%lox'.  For example:
21070
21071     sethi %hi(symbol), %g1
21072     or    %g1, %lo(symbol), %g1
21073
21074     sethi %hix(symbol), %g1
21075     xor   %g1, %lox(symbol), %g1
21076
21077   These "high" mnemonics extract bits 31:10 of their operand, and the
21078"low" mnemonics extract bits 9:0 of their operand.
21079
21080   V9 code model relocations can be requested as follows:
21081
21082   * 'R_SPARC_HH22' is requested using '%hh'.  It can also be generated
21083     using '%uhi'.
21084   * 'R_SPARC_HM10' is requested using '%hm'.  It can also be generated
21085     using '%ulo'.
21086   * 'R_SPARC_LM22' is requested using '%lm'.
21087
21088   * 'R_SPARC_H44' is requested using '%h44'.
21089   * 'R_SPARC_M44' is requested using '%m44'.
21090   * 'R_SPARC_L44' is requested using '%l44' or '%l34'.
21091   * 'R_SPARC_H34' is requested using '%h34'.
21092
21093   The '%l34' generates a 'R_SPARC_L44' relocation because it calculates
21094the necessary value, and therefore no explicit 'R_SPARC_L34' relocation
21095needed to be created for this purpose.
21096
21097   The '%h34' and '%l34' relocations are used for the abs34 code model.
21098Here is an example abs34 address generation sequence:
21099
21100     sethi %h34(symbol), %g1
21101     sllx  %g1, 2, %g1
21102     or    %g1, %l34(symbol), %g1
21103
21104   The PC relative relocation 'R_SPARC_PC22' can be obtained by
21105enclosing an operand inside of '%pc22'.  Likewise, the 'R_SPARC_PC10'
21106relocation can be obtained using '%pc10'.  These are mostly used when
21107assembling PIC code.  For example, the standard PIC sequence on Sparc to
21108get the base of the global offset table, PC relative, into a register,
21109can be performed as:
21110
21111     sethi %pc22(_GLOBAL_OFFSET_TABLE_-4), %l7
21112     add   %l7, %pc10(_GLOBAL_OFFSET_TABLE_+4), %l7
21113
21114   Several relocations exist to allow the link editor to potentially
21115optimize GOT data references.  The 'R_SPARC_GOTDATA_OP_HIX22' relocation
21116can obtained by enclosing an operand inside of '%gdop_hix22'.  The
21117'R_SPARC_GOTDATA_OP_LOX10' relocation can obtained by enclosing an
21118operand inside of '%gdop_lox10'.  Likewise, 'R_SPARC_GOTDATA_OP' can be
21119obtained by enclosing an operand inside of '%gdop'.  For example,
21120assuming the GOT base is in register '%l7':
21121
21122     sethi %gdop_hix22(symbol), %l1
21123     xor   %l1, %gdop_lox10(symbol), %l1
21124     ld    [%l7 + %l1], %l2, %gdop(symbol)
21125
21126   There are many relocations that can be requested for access to thread
21127local storage variables.  All of the Sparc TLS mnemonics are supported:
21128
21129   * 'R_SPARC_TLS_GD_HI22' is requested using '%tgd_hi22'.
21130   * 'R_SPARC_TLS_GD_LO10' is requested using '%tgd_lo10'.
21131   * 'R_SPARC_TLS_GD_ADD' is requested using '%tgd_add'.
21132   * 'R_SPARC_TLS_GD_CALL' is requested using '%tgd_call'.
21133
21134   * 'R_SPARC_TLS_LDM_HI22' is requested using '%tldm_hi22'.
21135   * 'R_SPARC_TLS_LDM_LO10' is requested using '%tldm_lo10'.
21136   * 'R_SPARC_TLS_LDM_ADD' is requested using '%tldm_add'.
21137   * 'R_SPARC_TLS_LDM_CALL' is requested using '%tldm_call'.
21138
21139   * 'R_SPARC_TLS_LDO_HIX22' is requested using '%tldo_hix22'.
21140   * 'R_SPARC_TLS_LDO_LOX10' is requested using '%tldo_lox10'.
21141   * 'R_SPARC_TLS_LDO_ADD' is requested using '%tldo_add'.
21142
21143   * 'R_SPARC_TLS_IE_HI22' is requested using '%tie_hi22'.
21144   * 'R_SPARC_TLS_IE_LO10' is requested using '%tie_lo10'.
21145   * 'R_SPARC_TLS_IE_LD' is requested using '%tie_ld'.
21146   * 'R_SPARC_TLS_IE_LDX' is requested using '%tie_ldx'.
21147   * 'R_SPARC_TLS_IE_ADD' is requested using '%tie_add'.
21148
21149   * 'R_SPARC_TLS_LE_HIX22' is requested using '%tle_hix22'.
21150   * 'R_SPARC_TLS_LE_LOX10' is requested using '%tle_lox10'.
21151
21152   Here are some example TLS model sequences.
21153
21154   First, General Dynamic:
21155
21156     sethi  %tgd_hi22(symbol), %l1
21157     add    %l1, %tgd_lo10(symbol), %l1
21158     add    %l7, %l1, %o0, %tgd_add(symbol)
21159     call   __tls_get_addr, %tgd_call(symbol)
21160     nop
21161
21162   Local Dynamic:
21163
21164     sethi  %tldm_hi22(symbol), %l1
21165     add    %l1, %tldm_lo10(symbol), %l1
21166     add    %l7, %l1, %o0, %tldm_add(symbol)
21167     call   __tls_get_addr, %tldm_call(symbol)
21168     nop
21169
21170     sethi  %tldo_hix22(symbol), %l1
21171     xor    %l1, %tldo_lox10(symbol), %l1
21172     add    %o0, %l1, %l1, %tldo_add(symbol)
21173
21174   Initial Exec:
21175
21176     sethi  %tie_hi22(symbol), %l1
21177     add    %l1, %tie_lo10(symbol), %l1
21178     ld     [%l7 + %l1], %o0, %tie_ld(symbol)
21179     add    %g7, %o0, %o0, %tie_add(symbol)
21180
21181     sethi  %tie_hi22(symbol), %l1
21182     add    %l1, %tie_lo10(symbol), %l1
21183     ldx    [%l7 + %l1], %o0, %tie_ldx(symbol)
21184     add    %g7, %o0, %o0, %tie_add(symbol)
21185
21186   And finally, Local Exec:
21187
21188     sethi  %tle_hix22(symbol), %l1
21189     add    %l1, %tle_lox10(symbol), %l1
21190     add    %g7, %l1, %l1
21191
21192   When assembling for 64-bit, and a secondary constant addend is
21193specified in an address expression that would normally generate an
21194'R_SPARC_LO10' relocation, the assembler will emit an 'R_SPARC_OLO10'
21195instead.
21196
21197
21198File: as.info,  Node: Sparc-Size-Translations,  Prev: Sparc-Relocs,  Up: Sparc-Syntax
21199
212009.44.3.5 Size Translations
21201..........................
21202
21203Often it is desirable to write code in an operand size agnostic manner.
21204'as' provides support for this via operand size opcode translations.
21205Translations are supported for loads, stores, shifts, compare-and-swap
21206atomics, and the 'clr' synthetic instruction.
21207
21208   If generating 32-bit code, 'as' will generate the 32-bit opcode.
21209Whereas if 64-bit code is being generated, the 64-bit opcode will be
21210emitted.  For example 'ldn' will be transformed into 'ld' for 32-bit
21211code and 'ldx' for 64-bit code.
21212
21213   Here is an example meant to demonstrate all the supported opcode
21214translations:
21215
21216     ldn   [%o0], %o1
21217     ldna  [%o0] %asi, %o2
21218     stn   %o1, [%o0]
21219     stna  %o2, [%o0] %asi
21220     slln  %o3, 3, %o3
21221     srln  %o4, 8, %o4
21222     sran  %o5, 12, %o5
21223     casn  [%o0], %o1, %o2
21224     casna [%o0] %asi, %o1, %o2
21225     clrn  %g1
21226
21227   In 32-bit mode 'as' will emit:
21228
21229     ld   [%o0], %o1
21230     lda  [%o0] %asi, %o2
21231     st   %o1, [%o0]
21232     sta  %o2, [%o0] %asi
21233     sll  %o3, 3, %o3
21234     srl  %o4, 8, %o4
21235     sra  %o5, 12, %o5
21236     cas  [%o0], %o1, %o2
21237     casa [%o0] %asi, %o1, %o2
21238     clr  %g1
21239
21240   And in 64-bit mode 'as' will emit:
21241
21242     ldx   [%o0], %o1
21243     ldxa  [%o0] %asi, %o2
21244     stx   %o1, [%o0]
21245     stxa  %o2, [%o0] %asi
21246     sllx  %o3, 3, %o3
21247     srlx  %o4, 8, %o4
21248     srax  %o5, 12, %o5
21249     casx  [%o0], %o1, %o2
21250     casxa [%o0] %asi, %o1, %o2
21251     clrx  %g1
21252
21253   Finally, the '.nword' translating directive is supported as well.  It
21254is documented in the section on Sparc machine directives.
21255
21256
21257File: as.info,  Node: Sparc-Float,  Next: Sparc-Directives,  Prev: Sparc-Syntax,  Up: Sparc-Dependent
21258
212599.44.4 Floating Point
21260---------------------
21261
21262The Sparc uses IEEE floating-point numbers.
21263
21264
21265File: as.info,  Node: Sparc-Directives,  Prev: Sparc-Float,  Up: Sparc-Dependent
21266
212679.44.5 Sparc Machine Directives
21268-------------------------------
21269
21270The Sparc version of 'as' supports the following additional machine
21271directives:
21272
21273'.align'
21274     This must be followed by the desired alignment in bytes.
21275
21276'.common'
21277     This must be followed by a symbol name, a positive number, and
21278     '"bss"'.  This behaves somewhat like '.comm', but the syntax is
21279     different.
21280
21281'.half'
21282     This is functionally identical to '.short'.
21283
21284'.nword'
21285     On the Sparc, the '.nword' directive produces native word sized
21286     value, ie.  if assembling with -32 it is equivalent to '.word', if
21287     assembling with -64 it is equivalent to '.xword'.
21288
21289'.proc'
21290     This directive is ignored.  Any text following it on the same line
21291     is also ignored.
21292
21293'.register'
21294     This directive declares use of a global application or system
21295     register.  It must be followed by a register name %g2, %g3, %g6 or
21296     %g7, comma and the symbol name for that register.  If symbol name
21297     is '#scratch', it is a scratch register, if it is '#ignore', it
21298     just suppresses any errors about using undeclared global register,
21299     but does not emit any information about it into the object file.
21300     This can be useful e.g.  if you save the register before use and
21301     restore it after.
21302
21303'.reserve'
21304     This must be followed by a symbol name, a positive number, and
21305     '"bss"'.  This behaves somewhat like '.lcomm', but the syntax is
21306     different.
21307
21308'.seg'
21309     This must be followed by '"text"', '"data"', or '"data1"'.  It
21310     behaves like '.text', '.data', or '.data 1'.
21311
21312'.skip'
21313     This is functionally identical to the '.space' directive.
21314
21315'.word'
21316     On the Sparc, the '.word' directive produces 32 bit values, instead
21317     of the 16 bit values it produces on many other machines.
21318
21319'.xword'
21320     On the Sparc V9 processor, the '.xword' directive produces 64 bit
21321     values.
21322
21323
21324File: as.info,  Node: TIC54X-Dependent,  Next: TIC6X-Dependent,  Prev: Sparc-Dependent,  Up: Machine Dependencies
21325
213269.45 TIC54X Dependent Features
21327==============================
21328
21329* Menu:
21330
21331* TIC54X-Opts::              Command-line Options
21332* TIC54X-Block::             Blocking
21333* TIC54X-Env::               Environment Settings
21334* TIC54X-Constants::         Constants Syntax
21335* TIC54X-Subsyms::           String Substitution
21336* TIC54X-Locals::            Local Label Syntax
21337* TIC54X-Builtins::          Builtin Assembler Math Functions
21338* TIC54X-Ext::               Extended Addressing Support
21339* TIC54X-Directives::        Directives
21340* TIC54X-Macros::            Macro Features
21341* TIC54X-MMRegs::            Memory-mapped Registers
21342* TIC54X-Syntax::            Syntax
21343
21344
21345File: as.info,  Node: TIC54X-Opts,  Next: TIC54X-Block,  Up: TIC54X-Dependent
21346
213479.45.1 Options
21348--------------
21349
21350The TMS320C54X version of 'as' has a few machine-dependent options.
21351
21352   You can use the '-mfar-mode' option to enable extended addressing
21353mode.  All addresses will be assumed to be > 16 bits, and the
21354appropriate relocation types will be used.  This option is equivalent to
21355using the '.far_mode' directive in the assembly code.  If you do not use
21356the '-mfar-mode' option, all references will be assumed to be 16 bits.
21357This option may be abbreviated to '-mf'.
21358
21359   You can use the '-mcpu' option to specify a particular CPU. This
21360option is equivalent to using the '.version' directive in the assembly
21361code.  For recognized CPU codes, see *Note '.version':
21362TIC54X-Directives.  The default CPU version is '542'.
21363
21364   You can use the '-merrors-to-file' option to redirect error output to
21365a file (this provided for those deficient environments which don't
21366provide adequate output redirection).  This option may be abbreviated to
21367'-me'.
21368
21369
21370File: as.info,  Node: TIC54X-Block,  Next: TIC54X-Env,  Prev: TIC54X-Opts,  Up: TIC54X-Dependent
21371
213729.45.2 Blocking
21373---------------
21374
21375A blocked section or memory block is guaranteed not to cross the
21376blocking boundary (usually a page, or 128 words) if it is smaller than
21377the blocking size, or to start on a page boundary if it is larger than
21378the blocking size.
21379
21380
21381File: as.info,  Node: TIC54X-Env,  Next: TIC54X-Constants,  Prev: TIC54X-Block,  Up: TIC54X-Dependent
21382
213839.45.3 Environment Settings
21384---------------------------
21385
21386'C54XDSP_DIR' and 'A_DIR' are semicolon-separated paths which are added
21387to the list of directories normally searched for source and include
21388files.  'C54XDSP_DIR' will override 'A_DIR'.
21389
21390
21391File: as.info,  Node: TIC54X-Constants,  Next: TIC54X-Subsyms,  Prev: TIC54X-Env,  Up: TIC54X-Dependent
21392
213939.45.4 Constants Syntax
21394-----------------------
21395
21396The TIC54X version of 'as' allows the following additional constant
21397formats, using a suffix to indicate the radix:
21398
21399     Binary                  000000B, 011000b
21400     Octal                   10Q, 224q
21401     Hexadecimal             45h, 0FH
21402
21403
21404File: as.info,  Node: TIC54X-Subsyms,  Next: TIC54X-Locals,  Prev: TIC54X-Constants,  Up: TIC54X-Dependent
21405
214069.45.5 String Substitution
21407--------------------------
21408
21409A subset of allowable symbols (which we'll call subsyms) may be assigned
21410arbitrary string values.  This is roughly equivalent to C preprocessor
21411#define macros.  When 'as' encounters one of these symbols, the symbol
21412is replaced in the input stream by its string value.  Subsym names
21413*must* begin with a letter.
21414
21415   Subsyms may be defined using the '.asg' and '.eval' directives (*Note
21416'.asg': TIC54X-Directives, *Note '.eval': TIC54X-Directives.
21417
21418   Expansion is recursive until a previously encountered symbol is seen,
21419at which point substitution stops.
21420
21421   In this example, x is replaced with SYM2; SYM2 is replaced with SYM1,
21422and SYM1 is replaced with x.  At this point, x has already been
21423encountered and the substitution stops.
21424
21425      .asg   "x",SYM1
21426      .asg   "SYM1",SYM2
21427      .asg   "SYM2",x
21428      add    x,a             ; final code assembled is "add  x, a"
21429
21430   Macro parameters are converted to subsyms; a side effect of this is
21431the normal 'as' '\ARG' dereferencing syntax is unnecessary.  Subsyms
21432defined within a macro will have global scope, unless the '.var'
21433directive is used to identify the subsym as a local macro variable *note
21434'.var': TIC54X-Directives.
21435
21436   Substitution may be forced in situations where replacement might be
21437ambiguous by placing colons on either side of the subsym.  The following
21438code:
21439
21440      .eval  "10",x
21441     LAB:X:  add     #x, a
21442
21443   When assembled becomes:
21444
21445     LAB10  add     #10, a
21446
21447   Smaller parts of the string assigned to a subsym may be accessed with
21448the following syntax:
21449
21450':SYMBOL(CHAR_INDEX):'
21451     Evaluates to a single-character string, the character at
21452     CHAR_INDEX.
21453':SYMBOL(START,LENGTH):'
21454     Evaluates to a substring of SYMBOL beginning at START with length
21455     LENGTH.
21456
21457
21458File: as.info,  Node: TIC54X-Locals,  Next: TIC54X-Builtins,  Prev: TIC54X-Subsyms,  Up: TIC54X-Dependent
21459
214609.45.6 Local Labels
21461-------------------
21462
21463Local labels may be defined in two ways:
21464
21465   * $N, where N is a decimal number between 0 and 9
21466   * LABEL?, where LABEL is any legal symbol name.
21467
21468   Local labels thus defined may be redefined or automatically
21469generated.  The scope of a local label is based on when it may be
21470undefined or reset.  This happens when one of the following situations
21471is encountered:
21472
21473   * .newblock directive *note '.newblock': TIC54X-Directives.
21474   * The current section is changed (.sect, .text, or .data)
21475   * Entering or leaving an included file
21476   * The macro scope where the label was defined is exited
21477
21478
21479File: as.info,  Node: TIC54X-Builtins,  Next: TIC54X-Ext,  Prev: TIC54X-Locals,  Up: TIC54X-Dependent
21480
214819.45.7 Math Builtins
21482--------------------
21483
21484The following built-in functions may be used to generate a
21485floating-point value.  All return a floating-point value except '$cvi',
21486'$int', and '$sgn', which return an integer value.
21487
21488'$acos(EXPR)'
21489     Returns the floating point arccosine of EXPR.
21490
21491'$asin(EXPR)'
21492     Returns the floating point arcsine of EXPR.
21493
21494'$atan(EXPR)'
21495     Returns the floating point arctangent of EXPR.
21496
21497'$atan2(EXPR1,EXPR2)'
21498     Returns the floating point arctangent of EXPR1 / EXPR2.
21499
21500'$ceil(EXPR)'
21501     Returns the smallest integer not less than EXPR as floating point.
21502
21503'$cosh(EXPR)'
21504     Returns the floating point hyperbolic cosine of EXPR.
21505
21506'$cos(EXPR)'
21507     Returns the floating point cosine of EXPR.
21508
21509'$cvf(EXPR)'
21510     Returns the integer value EXPR converted to floating-point.
21511
21512'$cvi(EXPR)'
21513     Returns the floating point value EXPR converted to integer.
21514
21515'$exp(EXPR)'
21516     Returns the floating point value e ^ EXPR.
21517
21518'$fabs(EXPR)'
21519     Returns the floating point absolute value of EXPR.
21520
21521'$floor(EXPR)'
21522     Returns the largest integer that is not greater than EXPR as
21523     floating point.
21524
21525'$fmod(EXPR1,EXPR2)'
21526     Returns the floating point remainder of EXPR1 / EXPR2.
21527
21528'$int(EXPR)'
21529     Returns 1 if EXPR evaluates to an integer, zero otherwise.
21530
21531'$ldexp(EXPR1,EXPR2)'
21532     Returns the floating point value EXPR1 * 2 ^ EXPR2.
21533
21534'$log10(EXPR)'
21535     Returns the base 10 logarithm of EXPR.
21536
21537'$log(EXPR)'
21538     Returns the natural logarithm of EXPR.
21539
21540'$max(EXPR1,EXPR2)'
21541     Returns the floating point maximum of EXPR1 and EXPR2.
21542
21543'$min(EXPR1,EXPR2)'
21544     Returns the floating point minimum of EXPR1 and EXPR2.
21545
21546'$pow(EXPR1,EXPR2)'
21547     Returns the floating point value EXPR1 ^ EXPR2.
21548
21549'$round(EXPR)'
21550     Returns the nearest integer to EXPR as a floating point number.
21551
21552'$sgn(EXPR)'
21553     Returns -1, 0, or 1 based on the sign of EXPR.
21554
21555'$sin(EXPR)'
21556     Returns the floating point sine of EXPR.
21557
21558'$sinh(EXPR)'
21559     Returns the floating point hyperbolic sine of EXPR.
21560
21561'$sqrt(EXPR)'
21562     Returns the floating point square root of EXPR.
21563
21564'$tan(EXPR)'
21565     Returns the floating point tangent of EXPR.
21566
21567'$tanh(EXPR)'
21568     Returns the floating point hyperbolic tangent of EXPR.
21569
21570'$trunc(EXPR)'
21571     Returns the integer value of EXPR truncated towards zero as
21572     floating point.
21573
21574
21575File: as.info,  Node: TIC54X-Ext,  Next: TIC54X-Directives,  Prev: TIC54X-Builtins,  Up: TIC54X-Dependent
21576
215779.45.8 Extended Addressing
21578--------------------------
21579
21580The 'LDX' pseudo-op is provided for loading the extended addressing bits
21581of a label or address.  For example, if an address '_label' resides in
21582extended program memory, the value of '_label' may be loaded as follows:
21583      ldx     #_label,16,a    ; loads extended bits of _label
21584      or      #_label,a       ; loads lower 16 bits of _label
21585      bacc    a               ; full address is in accumulator A
21586
21587
21588File: as.info,  Node: TIC54X-Directives,  Next: TIC54X-Macros,  Prev: TIC54X-Ext,  Up: TIC54X-Dependent
21589
215909.45.9 Directives
21591-----------------
21592
21593'.align [SIZE]'
21594'.even'
21595     Align the section program counter on the next boundary, based on
21596     SIZE.  SIZE may be any power of 2.  '.even' is equivalent to
21597     '.align' with a SIZE of 2.
21598     '1'
21599          Align SPC to word boundary
21600     '2'
21601          Align SPC to longword boundary (same as .even)
21602     '128'
21603          Align SPC to page boundary
21604
21605'.asg STRING, NAME'
21606     Assign NAME the string STRING.  String replacement is performed on
21607     STRING before assignment.
21608
21609'.eval STRING, NAME'
21610     Evaluate the contents of string STRING and assign the result as a
21611     string to the subsym NAME.  String replacement is performed on
21612     STRING before assignment.
21613
21614'.bss SYMBOL, SIZE [, [BLOCKING_FLAG] [,ALIGNMENT_FLAG]]'
21615     Reserve space for SYMBOL in the .bss section.  SIZE is in words.
21616     If present, BLOCKING_FLAG indicates the allocated space should be
21617     aligned on a page boundary if it would otherwise cross a page
21618     boundary.  If present, ALIGNMENT_FLAG causes the assembler to
21619     allocate SIZE on a long word boundary.
21620
21621'.byte VALUE [,...,VALUE_N]'
21622'.ubyte VALUE [,...,VALUE_N]'
21623'.char VALUE [,...,VALUE_N]'
21624'.uchar VALUE [,...,VALUE_N]'
21625     Place one or more bytes into consecutive words of the current
21626     section.  The upper 8 bits of each word is zero-filled.  If a label
21627     is used, it points to the word allocated for the first byte
21628     encountered.
21629
21630'.clink ["SECTION_NAME"]'
21631     Set STYP_CLINK flag for this section, which indicates to the linker
21632     that if no symbols from this section are referenced, the section
21633     should not be included in the link.  If SECTION_NAME is omitted,
21634     the current section is used.
21635
21636'.c_mode'
21637     TBD.
21638
21639'.copy "FILENAME" | FILENAME'
21640'.include "FILENAME" | FILENAME'
21641     Read source statements from FILENAME.  The normal include search
21642     path is used.  Normally .copy will cause statements from the
21643     included file to be printed in the assembly listing and .include
21644     will not, but this distinction is not currently implemented.
21645
21646'.data'
21647     Begin assembling code into the .data section.
21648
21649'.double VALUE [,...,VALUE_N]'
21650'.ldouble VALUE [,...,VALUE_N]'
21651'.float VALUE [,...,VALUE_N]'
21652'.xfloat VALUE [,...,VALUE_N]'
21653     Place an IEEE single-precision floating-point representation of one
21654     or more floating-point values into the current section.  All but
21655     '.xfloat' align the result on a longword boundary.  Values are
21656     stored most-significant word first.
21657
21658'.drlist'
21659'.drnolist'
21660     Control printing of directives to the listing file.  Ignored.
21661
21662'.emsg STRING'
21663'.mmsg STRING'
21664'.wmsg STRING'
21665     Emit a user-defined error, message, or warning, respectively.
21666
21667'.far_mode'
21668     Use extended addressing when assembling statements.  This should
21669     appear only once per file, and is equivalent to the -mfar-mode
21670     option *note '-mfar-mode': TIC54X-Opts.
21671
21672'.fclist'
21673'.fcnolist'
21674     Control printing of false conditional blocks to the listing file.
21675
21676'.field VALUE [,SIZE]'
21677     Initialize a bitfield of SIZE bits in the current section.  If
21678     VALUE is relocatable, then SIZE must be 16.  SIZE defaults to 16
21679     bits.  If VALUE does not fit into SIZE bits, the value will be
21680     truncated.  Successive '.field' directives will pack starting at
21681     the current word, filling the most significant bits first, and
21682     aligning to the start of the next word if the field size does not
21683     fit into the space remaining in the current word.  A '.align'
21684     directive with an operand of 1 will force the next '.field'
21685     directive to begin packing into a new word.  If a label is used, it
21686     points to the word that contains the specified field.
21687
21688'.global SYMBOL [,...,SYMBOL_N]'
21689'.def SYMBOL [,...,SYMBOL_N]'
21690'.ref SYMBOL [,...,SYMBOL_N]'
21691     '.def' nominally identifies a symbol defined in the current file
21692     and available to other files.  '.ref' identifies a symbol used in
21693     the current file but defined elsewhere.  Both map to the standard
21694     '.global' directive.
21695
21696'.half VALUE [,...,VALUE_N]'
21697'.uhalf VALUE [,...,VALUE_N]'
21698'.short VALUE [,...,VALUE_N]'
21699'.ushort VALUE [,...,VALUE_N]'
21700'.int VALUE [,...,VALUE_N]'
21701'.uint VALUE [,...,VALUE_N]'
21702'.word VALUE [,...,VALUE_N]'
21703'.uword VALUE [,...,VALUE_N]'
21704     Place one or more values into consecutive words of the current
21705     section.  If a label is used, it points to the word allocated for
21706     the first value encountered.
21707
21708'.label SYMBOL'
21709     Define a special SYMBOL to refer to the load time address of the
21710     current section program counter.
21711
21712'.length'
21713'.width'
21714     Set the page length and width of the output listing file.  Ignored.
21715
21716'.list'
21717'.nolist'
21718     Control whether the source listing is printed.  Ignored.
21719
21720'.long VALUE [,...,VALUE_N]'
21721'.ulong VALUE [,...,VALUE_N]'
21722'.xlong VALUE [,...,VALUE_N]'
21723     Place one or more 32-bit values into consecutive words in the
21724     current section.  The most significant word is stored first.
21725     '.long' and '.ulong' align the result on a longword boundary;
21726     'xlong' does not.
21727
21728'.loop [COUNT]'
21729'.break [CONDITION]'
21730'.endloop'
21731     Repeatedly assemble a block of code.  '.loop' begins the block, and
21732     '.endloop' marks its termination.  COUNT defaults to 1024, and
21733     indicates the number of times the block should be repeated.
21734     '.break' terminates the loop so that assembly begins after the
21735     '.endloop' directive.  The optional CONDITION will cause the loop
21736     to terminate only if it evaluates to zero.
21737
21738'MACRO_NAME .macro [PARAM1][,...PARAM_N]'
21739'[.mexit]'
21740'.endm'
21741     See the section on macros for more explanation (*Note
21742     TIC54X-Macros::.
21743
21744'.mlib "FILENAME" | FILENAME'
21745     Load the macro library FILENAME.  FILENAME must be an archived
21746     library (BFD ar-compatible) of text files, expected to contain only
21747     macro definitions.  The standard include search path is used.
21748
21749'.mlist'
21750'.mnolist'
21751     Control whether to include macro and loop block expansions in the
21752     listing output.  Ignored.
21753
21754'.mmregs'
21755     Define global symbolic names for the 'c54x registers.  Supposedly
21756     equivalent to executing '.set' directives for each register with
21757     its memory-mapped value, but in reality is provided only for
21758     compatibility and does nothing.
21759
21760'.newblock'
21761     This directive resets any TIC54X local labels currently defined.
21762     Normal 'as' local labels are unaffected.
21763
21764'.option OPTION_LIST'
21765     Set listing options.  Ignored.
21766
21767'.sblock "SECTION_NAME" | SECTION_NAME [,"NAME_N" | NAME_N]'
21768     Designate SECTION_NAME for blocking.  Blocking guarantees that a
21769     section will start on a page boundary (128 words) if it would
21770     otherwise cross a page boundary.  Only initialized sections may be
21771     designated with this directive.  See also *Note TIC54X-Block::.
21772
21773'.sect "SECTION_NAME"'
21774     Define a named initialized section and make it the current section.
21775
21776'SYMBOL .set "VALUE"'
21777'SYMBOL .equ "VALUE"'
21778     Equate a constant VALUE to a SYMBOL, which is placed in the symbol
21779     table.  SYMBOL may not be previously defined.
21780
21781'.space SIZE_IN_BITS'
21782'.bes SIZE_IN_BITS'
21783     Reserve the given number of bits in the current section and
21784     zero-fill them.  If a label is used with '.space', it points to the
21785     *first* word reserved.  With '.bes', the label points to the *last*
21786     word reserved.
21787
21788'.sslist'
21789'.ssnolist'
21790     Controls the inclusion of subsym replacement in the listing output.
21791     Ignored.
21792
21793'.string "STRING" [,...,"STRING_N"]'
21794'.pstring "STRING" [,...,"STRING_N"]'
21795     Place 8-bit characters from STRING into the current section.
21796     '.string' zero-fills the upper 8 bits of each word, while
21797     '.pstring' puts two characters into each word, filling the
21798     most-significant bits first.  Unused space is zero-filled.  If a
21799     label is used, it points to the first word initialized.
21800
21801'[STAG] .struct [OFFSET]'
21802'[NAME_1] element [COUNT_1]'
21803'[NAME_2] element [COUNT_2]'
21804'[TNAME] .tag STAGX [TCOUNT]'
21805'...'
21806'[NAME_N] element [COUNT_N]'
21807'[SSIZE] .endstruct'
21808'LABEL .tag [STAG]'
21809     Assign symbolic offsets to the elements of a structure.  STAG
21810     defines a symbol to use to reference the structure.  OFFSET
21811     indicates a starting value to use for the first element
21812     encountered; otherwise it defaults to zero.  Each element can have
21813     a named offset, NAME, which is a symbol assigned the value of the
21814     element's offset into the structure.  If STAG is missing, these
21815     become global symbols.  COUNT adjusts the offset that many times,
21816     as if 'element' were an array.  'element' may be one of '.byte',
21817     '.word', '.long', '.float', or any equivalent of those, and the
21818     structure offset is adjusted accordingly.  '.field' and '.string'
21819     are also allowed; the size of '.field' is one bit, and '.string' is
21820     considered to be one word in size.  Only element descriptors,
21821     structure/union tags, '.align' and conditional assembly directives
21822     are allowed within '.struct'/'.endstruct'.  '.align' aligns member
21823     offsets to word boundaries only.  SSIZE, if provided, will always
21824     be assigned the size of the structure.
21825
21826     The '.tag' directive, in addition to being used to define a
21827     structure/union element within a structure, may be used to apply a
21828     structure to a symbol.  Once applied to LABEL, the individual
21829     structure elements may be applied to LABEL to produce the desired
21830     offsets using LABEL as the structure base.
21831
21832'.tab'
21833     Set the tab size in the output listing.  Ignored.
21834
21835'[UTAG] .union'
21836'[NAME_1] element [COUNT_1]'
21837'[NAME_2] element [COUNT_2]'
21838'[TNAME] .tag UTAGX[,TCOUNT]'
21839'...'
21840'[NAME_N] element [COUNT_N]'
21841'[USIZE] .endstruct'
21842'LABEL .tag [UTAG]'
21843     Similar to '.struct', but the offset after each element is reset to
21844     zero, and the USIZE is set to the maximum of all defined elements.
21845     Starting offset for the union is always zero.
21846
21847'[SYMBOL] .usect "SECTION_NAME", SIZE, [,[BLOCKING_FLAG] [,ALIGNMENT_FLAG]]'
21848     Reserve space for variables in a named, uninitialized section
21849     (similar to .bss).  '.usect' allows definitions sections
21850     independent of .bss.  SYMBOL points to the first location reserved
21851     by this allocation.  The symbol may be used as a variable name.
21852     SIZE is the allocated size in words.  BLOCKING_FLAG indicates
21853     whether to block this section on a page boundary (128 words) (*note
21854     TIC54X-Block::).  ALIGNMENT FLAG indicates whether the section
21855     should be longword-aligned.
21856
21857'.var SYM[,..., SYM_N]'
21858     Define a subsym to be a local variable within a macro.  See *Note
21859     TIC54X-Macros::.
21860
21861'.version VERSION'
21862     Set which processor to build instructions for.  Though the
21863     following values are accepted, the op is ignored.
21864     '541'
21865     '542'
21866     '543'
21867     '545'
21868     '545LP'
21869     '546LP'
21870     '548'
21871     '549'
21872
21873
21874File: as.info,  Node: TIC54X-Macros,  Next: TIC54X-MMRegs,  Prev: TIC54X-Directives,  Up: TIC54X-Dependent
21875
218769.45.10 Macros
21877--------------
21878
21879Macros do not require explicit dereferencing of arguments (i.e., \ARG).
21880
21881   During macro expansion, the macro parameters are converted to
21882subsyms.  If the number of arguments passed the macro invocation exceeds
21883the number of parameters defined, the last parameter is assigned the
21884string equivalent of all remaining arguments.  If fewer arguments are
21885given than parameters, the missing parameters are assigned empty
21886strings.  To include a comma in an argument, you must enclose the
21887argument in quotes.
21888
21889   The following built-in subsym functions allow examination of the
21890string value of subsyms (or ordinary strings).  The arguments are
21891strings unless otherwise indicated (subsyms passed as args will be
21892replaced by the strings they represent).
21893'$symlen(STR)'
21894     Returns the length of STR.
21895
21896'$symcmp(STR1,STR2)'
21897     Returns 0 if STR1 == STR2, non-zero otherwise.
21898
21899'$firstch(STR,CH)'
21900     Returns index of the first occurrence of character constant CH in
21901     STR.
21902
21903'$lastch(STR,CH)'
21904     Returns index of the last occurrence of character constant CH in
21905     STR.
21906
21907'$isdefed(SYMBOL)'
21908     Returns zero if the symbol SYMBOL is not in the symbol table,
21909     non-zero otherwise.
21910
21911'$ismember(SYMBOL,LIST)'
21912     Assign the first member of comma-separated string LIST to SYMBOL;
21913     LIST is reassigned the remainder of the list.  Returns zero if LIST
21914     is a null string.  Both arguments must be subsyms.
21915
21916'$iscons(EXPR)'
21917     Returns 1 if string EXPR is binary, 2 if octal, 3 if hexadecimal, 4
21918     if a character, 5 if decimal, and zero if not an integer.
21919
21920'$isname(NAME)'
21921     Returns 1 if NAME is a valid symbol name, zero otherwise.
21922
21923'$isreg(REG)'
21924     Returns 1 if REG is a valid predefined register name (AR0-AR7
21925     only).
21926
21927'$structsz(STAG)'
21928     Returns the size of the structure or union represented by STAG.
21929
21930'$structacc(STAG)'
21931     Returns the reference point of the structure or union represented
21932     by STAG.  Always returns zero.
21933
21934
21935File: as.info,  Node: TIC54X-MMRegs,  Next: TIC54X-Syntax,  Prev: TIC54X-Macros,  Up: TIC54X-Dependent
21936
219379.45.11 Memory-mapped Registers
21938-------------------------------
21939
21940The following symbols are recognized as memory-mapped registers:
21941
21942
21943File: as.info,  Node: TIC54X-Syntax,  Prev: TIC54X-MMRegs,  Up: TIC54X-Dependent
21944
219459.45.12 TIC54X Syntax
21946---------------------
21947
21948* Menu:
21949
21950* TIC54X-Chars::                Special Characters
21951
21952
21953File: as.info,  Node: TIC54X-Chars,  Up: TIC54X-Syntax
21954
219559.45.12.1 Special Characters
21956............................
21957
21958The presence of a ';' appearing anywhere on a line indicates the start
21959of a comment that extends to the end of that line.
21960
21961   If a '#' appears as the first character of a line then the whole line
21962is treated as a comment, but in this case the line can also be a logical
21963line number directive (*note Comments::) or a preprocessor control
21964command (*note Preprocessing::).
21965
21966   The presence of an asterisk ('*') at the start of a line also
21967indicates a comment that extends to the end of that line.
21968
21969   The TIC54X assembler does not currently support a line separator
21970character.
21971
21972
21973File: as.info,  Node: TIC6X-Dependent,  Next: TILE-Gx-Dependent,  Prev: TIC54X-Dependent,  Up: Machine Dependencies
21974
219759.46 TIC6X Dependent Features
21976=============================
21977
21978* Menu:
21979
21980* TIC6X Options::            Options
21981* TIC6X Syntax::             Syntax
21982* TIC6X Directives::         Directives
21983
21984
21985File: as.info,  Node: TIC6X Options,  Next: TIC6X Syntax,  Up: TIC6X-Dependent
21986
219879.46.1 TIC6X Options
21988--------------------
21989
21990'-march=ARCH'
21991     Enable (only) instructions from architecture ARCH.  By default, all
21992     instructions are permitted.
21993
21994     The following values of ARCH are accepted: 'c62x', 'c64x', 'c64x+',
21995     'c67x', 'c67x+', 'c674x'.
21996
21997'-mdsbt'
21998'-mno-dsbt'
21999     The '-mdsbt' option causes the assembler to generate the
22000     'Tag_ABI_DSBT' attribute with a value of 1, indicating that the
22001     code is using DSBT addressing.  The '-mno-dsbt' option, the
22002     default, causes the tag to have a value of 0, indicating that the
22003     code does not use DSBT addressing.  The linker will emit a warning
22004     if objects of different type (DSBT and non-DSBT) are linked
22005     together.
22006
22007'-mpid=no'
22008'-mpid=near'
22009'-mpid=far'
22010     The '-mpid=' option causes the assembler to generate the
22011     'Tag_ABI_PID' attribute with a value indicating the form of data
22012     addressing used by the code.  '-mpid=no', the default, indicates
22013     position-dependent data addressing, '-mpid=near' indicates
22014     position-independent addressing with GOT accesses using near DP
22015     addressing, and '-mpid=far' indicates position-independent
22016     addressing with GOT accesses using far DP addressing.  The linker
22017     will emit a warning if objects built with different settings of
22018     this option are linked together.
22019
22020'-mpic'
22021'-mno-pic'
22022     The '-mpic' option causes the assembler to generate the
22023     'Tag_ABI_PIC' attribute with a value of 1, indicating that the code
22024     is using position-independent code addressing, The '-mno-pic'
22025     option, the default, causes the tag to have a value of 0,
22026     indicating position-dependent code addressing.  The linker will
22027     emit a warning if objects of different type (position-dependent and
22028     position-independent) are linked together.
22029
22030'-mbig-endian'
22031'-mlittle-endian'
22032     Generate code for the specified endianness.  The default is
22033     little-endian.
22034
22035
22036File: as.info,  Node: TIC6X Syntax,  Next: TIC6X Directives,  Prev: TIC6X Options,  Up: TIC6X-Dependent
22037
220389.46.2 TIC6X Syntax
22039-------------------
22040
22041The presence of a ';' on a line indicates the start of a comment that
22042extends to the end of the current line.  If a '#' or '*' appears as the
22043first character of a line, the whole line is treated as a comment.  Note
22044that if a line starts with a '#' character then it can also be a logical
22045line number directive (*note Comments::) or a preprocessor control
22046command (*note Preprocessing::).
22047
22048   The '@' character can be used instead of a newline to separate
22049statements.
22050
22051   Instruction, register and functional unit names are case-insensitive.
22052'as' requires fully-specified functional unit names, such as '.S1',
22053'.L1X' or '.D1T2', on all instructions using a functional unit.
22054
22055   For some instructions, there may be syntactic ambiguity between
22056register or functional unit names and the names of labels or other
22057symbols.  To avoid this, enclose the ambiguous symbol name in
22058parentheses; register and functional unit names may not be enclosed in
22059parentheses.
22060
22061
22062File: as.info,  Node: TIC6X Directives,  Prev: TIC6X Syntax,  Up: TIC6X-Dependent
22063
220649.46.3 TIC6X Directives
22065-----------------------
22066
22067Directives controlling the set of instructions accepted by the assembler
22068have effect for instructions between the directive and any subsequent
22069directive overriding it.
22070
22071'.arch ARCH'
22072     This has the same effect as '-march=ARCH'.
22073
22074'.cantunwind'
22075     Prevents unwinding through the current function.  No personality
22076     routine or exception table data is required or permitted.
22077
22078     If this is not specified then frame unwinding information will be
22079     constructed from CFI directives.  *note CFI directives::.
22080
22081'.c6xabi_attribute TAG, VALUE'
22082     Set the C6000 EABI build attribute TAG to VALUE.
22083
22084     The TAG is either an attribute number or one of 'Tag_ISA',
22085     'Tag_ABI_wchar_t', 'Tag_ABI_stack_align_needed',
22086     'Tag_ABI_stack_align_preserved', 'Tag_ABI_DSBT', 'Tag_ABI_PID',
22087     'Tag_ABI_PIC', 'TAG_ABI_array_object_alignment',
22088     'TAG_ABI_array_object_align_expected', 'Tag_ABI_compatibility' and
22089     'Tag_ABI_conformance'.  The VALUE is either a 'number', '"string"',
22090     or 'number, "string"' depending on the tag.
22091
22092'.ehtype SYMBOL'
22093     Output an exception type table reference to SYMBOL.
22094
22095'.endp'
22096     Marks the end of and exception table or function.  If preceded by a
22097     '.handlerdata' directive then this also switched back to the
22098     previous text section.
22099
22100'.handlerdata'
22101     Marks the end of the current function, and the start of the
22102     exception table entry for that function.  Anything between this
22103     directive and the '.endp' directive will be added to the exception
22104     table entry.
22105
22106     Must be preceded by a CFI block containing a '.cfi_lsda' directive.
22107
22108'.nocmp'
22109     Disallow use of C64x+ compact instructions in the current text
22110     section.
22111
22112'.personalityindex INDEX'
22113     Sets the personality routine for the current function to the ABI
22114     specified compact routine number INDEX
22115
22116'.personality NAME'
22117     Sets the personality routine for the current function to NAME.
22118
22119'.scomm SYMBOL, SIZE, ALIGN'
22120     Like '.comm', creating a common symbol SYMBOL with size SIZE and
22121     alignment ALIGN, but unlike when using '.comm', this symbol will be
22122     placed into the small BSS section by the linker.
22123
22124
22125File: as.info,  Node: TILE-Gx-Dependent,  Next: TILEPro-Dependent,  Prev: TIC6X-Dependent,  Up: Machine Dependencies
22126
221279.47 TILE-Gx Dependent Features
22128===============================
22129
22130* Menu:
22131
22132* TILE-Gx Options::		TILE-Gx Options
22133* TILE-Gx Syntax::		TILE-Gx Syntax
22134* TILE-Gx Directives::		TILE-Gx Directives
22135
22136
22137File: as.info,  Node: TILE-Gx Options,  Next: TILE-Gx Syntax,  Up: TILE-Gx-Dependent
22138
221399.47.1 Options
22140--------------
22141
22142The following table lists all available TILE-Gx specific options:
22143
22144'-m32 | -m64'
22145     Select the word size, either 32 bits or 64 bits.
22146
22147'-EB | -EL'
22148     Select the endianness, either big-endian (-EB) or little-endian
22149     (-EL).
22150
22151
22152File: as.info,  Node: TILE-Gx Syntax,  Next: TILE-Gx Directives,  Prev: TILE-Gx Options,  Up: TILE-Gx-Dependent
22153
221549.47.2 Syntax
22155-------------
22156
22157Block comments are delimited by '/*' and '*/'.  End of line comments may
22158be introduced by '#'.
22159
22160   Instructions consist of a leading opcode or macro name followed by
22161whitespace and an optional comma-separated list of operands:
22162
22163     OPCODE [OPERAND, ...]
22164
22165   Instructions must be separated by a newline or semicolon.
22166
22167   There are two ways to write code: either write naked instructions,
22168which the assembler is free to combine into VLIW bundles, or specify the
22169VLIW bundles explicitly.
22170
22171   Bundles are specified using curly braces:
22172
22173     { ADD r3,r4,r5 ; ADD r7,r8,r9 ; LW r10,r11 }
22174
22175   A bundle can span multiple lines.  If you want to put multiple
22176instructions on a line, whether in a bundle or not, you need to separate
22177them with semicolons as in this example.
22178
22179   A bundle may contain one or more instructions, up to the limit
22180specified by the ISA (currently three).  If fewer instructions are
22181specified than the hardware supports in a bundle, the assembler inserts
22182'fnop' instructions automatically.
22183
22184   The assembler will prefer to preserve the ordering of instructions
22185within the bundle, putting the first instruction in a lower-numbered
22186pipeline than the next one, etc.  This fact, combined with the optional
22187use of explicit 'fnop' or 'nop' instructions, allows precise control
22188over which pipeline executes each instruction.
22189
22190   If the instructions cannot be bundled in the listed order, the
22191assembler will automatically try to find a valid pipeline assignment.
22192If there is no way to bundle the instructions together, the assembler
22193reports an error.
22194
22195   The assembler does not yet auto-bundle (automatically combine
22196multiple instructions into one bundle), but it reserves the right to do
22197so in the future.  If you want to force an instruction to run by itself,
22198put it in a bundle explicitly with curly braces and use 'nop'
22199instructions (not 'fnop') to fill the remaining pipeline slots in that
22200bundle.
22201
22202* Menu:
22203
22204* TILE-Gx Opcodes::              Opcode Naming Conventions.
22205* TILE-Gx Registers::            Register Naming.
22206* TILE-Gx Modifiers::            Symbolic Operand Modifiers.
22207
22208
22209File: as.info,  Node: TILE-Gx Opcodes,  Next: TILE-Gx Registers,  Up: TILE-Gx Syntax
22210
222119.47.2.1 Opcode Names
22212.....................
22213
22214For a complete list of opcodes and descriptions of their semantics, see
22215'TILE-Gx Instruction Set Architecture', available upon request at
22216www.tilera.com.
22217
22218
22219File: as.info,  Node: TILE-Gx Registers,  Next: TILE-Gx Modifiers,  Prev: TILE-Gx Opcodes,  Up: TILE-Gx Syntax
22220
222219.47.2.2 Register Names
22222.......................
22223
22224General-purpose registers are represented by predefined symbols of the
22225form 'rN', where N represents a number between '0' and '63'.  However,
22226the following registers have canonical names that must be used instead:
22227
22228'r54'
22229     sp
22230
22231'r55'
22232     lr
22233
22234'r56'
22235     sn
22236
22237'r57'
22238     idn0
22239
22240'r58'
22241     idn1
22242
22243'r59'
22244     udn0
22245
22246'r60'
22247     udn1
22248
22249'r61'
22250     udn2
22251
22252'r62'
22253     udn3
22254
22255'r63'
22256     zero
22257
22258   The assembler will emit a warning if a numeric name is used instead
22259of the non-numeric name.  The '.no_require_canonical_reg_names'
22260assembler pseudo-op turns off this warning.
22261'.require_canonical_reg_names' turns it back on.
22262
22263
22264File: as.info,  Node: TILE-Gx Modifiers,  Prev: TILE-Gx Registers,  Up: TILE-Gx Syntax
22265
222669.47.2.3 Symbolic Operand Modifiers
22267...................................
22268
22269The assembler supports several modifiers when using symbol addresses in
22270TILE-Gx instruction operands.  The general syntax is the following:
22271
22272     modifier(symbol)
22273
22274   The following modifiers are supported:
22275
22276'hw0'
22277
22278     This modifier is used to load bits 0-15 of the symbol's address.
22279
22280'hw1'
22281
22282     This modifier is used to load bits 16-31 of the symbol's address.
22283
22284'hw2'
22285
22286     This modifier is used to load bits 32-47 of the symbol's address.
22287
22288'hw3'
22289
22290     This modifier is used to load bits 48-63 of the symbol's address.
22291
22292'hw0_last'
22293
22294     This modifier yields the same value as 'hw0', but it also checks
22295     that the value does not overflow.
22296
22297'hw1_last'
22298
22299     This modifier yields the same value as 'hw1', but it also checks
22300     that the value does not overflow.
22301
22302'hw2_last'
22303
22304     This modifier yields the same value as 'hw2', but it also checks
22305     that the value does not overflow.
22306
22307     A 48-bit symbolic value is constructed by using the following
22308     idiom:
22309
22310          moveli r0, hw2_last(sym)
22311          shl16insli r0, r0, hw1(sym)
22312          shl16insli r0, r0, hw0(sym)
22313
22314'hw0_got'
22315
22316     This modifier is used to load bits 0-15 of the symbol's offset in
22317     the GOT entry corresponding to the symbol.
22318
22319'hw0_last_got'
22320
22321     This modifier yields the same value as 'hw0_got', but it also
22322     checks that the value does not overflow.
22323
22324'hw1_last_got'
22325
22326     This modifier is used to load bits 16-31 of the symbol's offset in
22327     the GOT entry corresponding to the symbol, and it also checks that
22328     the value does not overflow.
22329
22330'plt'
22331
22332     This modifier is used for function symbols.  It causes a _procedure
22333     linkage table_, an array of code stubs, to be created at the time
22334     the shared object is created or linked against, together with a
22335     global offset table entry.  The value is a pc-relative offset to
22336     the corresponding stub code in the procedure linkage table.  This
22337     arrangement causes the run-time symbol resolver to be called to
22338     look up and set the value of the symbol the first time the function
22339     is called (at latest; depending environment variables).  It is only
22340     safe to leave the symbol unresolved this way if all references are
22341     function calls.
22342
22343'hw0_plt'
22344
22345     This modifier is used to load bits 0-15 of the pc-relative address
22346     of a plt entry.
22347
22348'hw1_plt'
22349
22350     This modifier is used to load bits 16-31 of the pc-relative address
22351     of a plt entry.
22352
22353'hw1_last_plt'
22354
22355     This modifier yields the same value as 'hw1_plt', but it also
22356     checks that the value does not overflow.
22357
22358'hw2_last_plt'
22359
22360     This modifier is used to load bits 32-47 of the pc-relative address
22361     of a plt entry, and it also checks that the value does not
22362     overflow.
22363
22364'hw0_tls_gd'
22365
22366     This modifier is used to load bits 0-15 of the offset of the GOT
22367     entry of the symbol's TLS descriptor, to be used for
22368     general-dynamic TLS accesses.
22369
22370'hw0_last_tls_gd'
22371
22372     This modifier yields the same value as 'hw0_tls_gd', but it also
22373     checks that the value does not overflow.
22374
22375'hw1_last_tls_gd'
22376
22377     This modifier is used to load bits 16-31 of the offset of the GOT
22378     entry of the symbol's TLS descriptor, to be used for
22379     general-dynamic TLS accesses.  It also checks that the value does
22380     not overflow.
22381
22382'hw0_tls_ie'
22383
22384     This modifier is used to load bits 0-15 of the offset of the GOT
22385     entry containing the offset of the symbol's address from the TCB,
22386     to be used for initial-exec TLS accesses.
22387
22388'hw0_last_tls_ie'
22389
22390     This modifier yields the same value as 'hw0_tls_ie', but it also
22391     checks that the value does not overflow.
22392
22393'hw1_last_tls_ie'
22394
22395     This modifier is used to load bits 16-31 of the offset of the GOT
22396     entry containing the offset of the symbol's address from the TCB,
22397     to be used for initial-exec TLS accesses.  It also checks that the
22398     value does not overflow.
22399
22400'hw0_tls_le'
22401
22402     This modifier is used to load bits 0-15 of the offset of the
22403     symbol's address from the TCB, to be used for local-exec TLS
22404     accesses.
22405
22406'hw0_last_tls_le'
22407
22408     This modifier yields the same value as 'hw0_tls_le', but it also
22409     checks that the value does not overflow.
22410
22411'hw1_last_tls_le'
22412
22413     This modifier is used to load bits 16-31 of the offset of the
22414     symbol's address from the TCB, to be used for local-exec TLS
22415     accesses.  It also checks that the value does not overflow.
22416
22417'tls_gd_call'
22418
22419     This modifier is used to tag an instruction as the "call" part of a
22420     calling sequence for a TLS GD reference of its operand.
22421
22422'tls_gd_add'
22423
22424     This modifier is used to tag an instruction as the "add" part of a
22425     calling sequence for a TLS GD reference of its operand.
22426
22427'tls_ie_load'
22428
22429     This modifier is used to tag an instruction as the "load" part of a
22430     calling sequence for a TLS IE reference of its operand.
22431
22432
22433File: as.info,  Node: TILE-Gx Directives,  Prev: TILE-Gx Syntax,  Up: TILE-Gx-Dependent
22434
224359.47.3 TILE-Gx Directives
22436-------------------------
22437
22438'.align EXPRESSION [, EXPRESSION]'
22439     This is the generic .ALIGN directive.  The first argument is the
22440     requested alignment in bytes.
22441
22442'.allow_suspicious_bundles'
22443     Turns on error checking for combinations of instructions in a
22444     bundle that probably indicate a programming error.  This is on by
22445     default.
22446
22447'.no_allow_suspicious_bundles'
22448     Turns off error checking for combinations of instructions in a
22449     bundle that probably indicate a programming error.
22450
22451'.require_canonical_reg_names'
22452     Require that canonical register names be used, and emit a warning
22453     if the numeric names are used.  This is on by default.
22454
22455'.no_require_canonical_reg_names'
22456     Permit the use of numeric names for registers that have canonical
22457     names.
22458
22459
22460File: as.info,  Node: TILEPro-Dependent,  Next: V850-Dependent,  Prev: TILE-Gx-Dependent,  Up: Machine Dependencies
22461
224629.48 TILEPro Dependent Features
22463===============================
22464
22465* Menu:
22466
22467* TILEPro Options::		TILEPro Options
22468* TILEPro Syntax::		TILEPro Syntax
22469* TILEPro Directives::		TILEPro Directives
22470
22471
22472File: as.info,  Node: TILEPro Options,  Next: TILEPro Syntax,  Up: TILEPro-Dependent
22473
224749.48.1 Options
22475--------------
22476
22477'as' has no machine-dependent command-line options for TILEPro.
22478
22479
22480File: as.info,  Node: TILEPro Syntax,  Next: TILEPro Directives,  Prev: TILEPro Options,  Up: TILEPro-Dependent
22481
224829.48.2 Syntax
22483-------------
22484
22485Block comments are delimited by '/*' and '*/'.  End of line comments may
22486be introduced by '#'.
22487
22488   Instructions consist of a leading opcode or macro name followed by
22489whitespace and an optional comma-separated list of operands:
22490
22491     OPCODE [OPERAND, ...]
22492
22493   Instructions must be separated by a newline or semicolon.
22494
22495   There are two ways to write code: either write naked instructions,
22496which the assembler is free to combine into VLIW bundles, or specify the
22497VLIW bundles explicitly.
22498
22499   Bundles are specified using curly braces:
22500
22501     { ADD r3,r4,r5 ; ADD r7,r8,r9 ; LW r10,r11 }
22502
22503   A bundle can span multiple lines.  If you want to put multiple
22504instructions on a line, whether in a bundle or not, you need to separate
22505them with semicolons as in this example.
22506
22507   A bundle may contain one or more instructions, up to the limit
22508specified by the ISA (currently three).  If fewer instructions are
22509specified than the hardware supports in a bundle, the assembler inserts
22510'fnop' instructions automatically.
22511
22512   The assembler will prefer to preserve the ordering of instructions
22513within the bundle, putting the first instruction in a lower-numbered
22514pipeline than the next one, etc.  This fact, combined with the optional
22515use of explicit 'fnop' or 'nop' instructions, allows precise control
22516over which pipeline executes each instruction.
22517
22518   If the instructions cannot be bundled in the listed order, the
22519assembler will automatically try to find a valid pipeline assignment.
22520If there is no way to bundle the instructions together, the assembler
22521reports an error.
22522
22523   The assembler does not yet auto-bundle (automatically combine
22524multiple instructions into one bundle), but it reserves the right to do
22525so in the future.  If you want to force an instruction to run by itself,
22526put it in a bundle explicitly with curly braces and use 'nop'
22527instructions (not 'fnop') to fill the remaining pipeline slots in that
22528bundle.
22529
22530* Menu:
22531
22532* TILEPro Opcodes::              Opcode Naming Conventions.
22533* TILEPro Registers::            Register Naming.
22534* TILEPro Modifiers::            Symbolic Operand Modifiers.
22535
22536
22537File: as.info,  Node: TILEPro Opcodes,  Next: TILEPro Registers,  Up: TILEPro Syntax
22538
225399.48.2.1 Opcode Names
22540.....................
22541
22542For a complete list of opcodes and descriptions of their semantics, see
22543'TILE Processor User Architecture Manual', available upon request at
22544www.tilera.com.
22545
22546
22547File: as.info,  Node: TILEPro Registers,  Next: TILEPro Modifiers,  Prev: TILEPro Opcodes,  Up: TILEPro Syntax
22548
225499.48.2.2 Register Names
22550.......................
22551
22552General-purpose registers are represented by predefined symbols of the
22553form 'rN', where N represents a number between '0' and '63'.  However,
22554the following registers have canonical names that must be used instead:
22555
22556'r54'
22557     sp
22558
22559'r55'
22560     lr
22561
22562'r56'
22563     sn
22564
22565'r57'
22566     idn0
22567
22568'r58'
22569     idn1
22570
22571'r59'
22572     udn0
22573
22574'r60'
22575     udn1
22576
22577'r61'
22578     udn2
22579
22580'r62'
22581     udn3
22582
22583'r63'
22584     zero
22585
22586   The assembler will emit a warning if a numeric name is used instead
22587of the canonical name.  The '.no_require_canonical_reg_names' assembler
22588pseudo-op turns off this warning.  '.require_canonical_reg_names' turns
22589it back on.
22590
22591
22592File: as.info,  Node: TILEPro Modifiers,  Prev: TILEPro Registers,  Up: TILEPro Syntax
22593
225949.48.2.3 Symbolic Operand Modifiers
22595...................................
22596
22597The assembler supports several modifiers when using symbol addresses in
22598TILEPro instruction operands.  The general syntax is the following:
22599
22600     modifier(symbol)
22601
22602   The following modifiers are supported:
22603
22604'lo16'
22605
22606     This modifier is used to load the low 16 bits of the symbol's
22607     address, sign-extended to a 32-bit value (sign-extension allows it
22608     to be range-checked against signed 16 bit immediate operands
22609     without complaint).
22610
22611'hi16'
22612
22613     This modifier is used to load the high 16 bits of the symbol's
22614     address, also sign-extended to a 32-bit value.
22615
22616'ha16'
22617
22618     'ha16(N)' is identical to 'hi16(N)', except if 'lo16(N)' is
22619     negative it adds one to the 'hi16(N)' value.  This way 'lo16' and
22620     'ha16' can be added to create any 32-bit value using 'auli'.  For
22621     example, here is how you move an arbitrary 32-bit address into r3:
22622
22623          moveli r3, lo16(sym)
22624          auli r3, r3, ha16(sym)
22625
22626'got'
22627
22628     This modifier is used to load the offset of the GOT entry
22629     corresponding to the symbol.
22630
22631'got_lo16'
22632
22633     This modifier is used to load the sign-extended low 16 bits of the
22634     offset of the GOT entry corresponding to the symbol.
22635
22636'got_hi16'
22637
22638     This modifier is used to load the sign-extended high 16 bits of the
22639     offset of the GOT entry corresponding to the symbol.
22640
22641'got_ha16'
22642
22643     This modifier is like 'got_hi16', but it adds one if 'got_lo16' of
22644     the input value is negative.
22645
22646'plt'
22647
22648     This modifier is used for function symbols.  It causes a _procedure
22649     linkage table_, an array of code stubs, to be created at the time
22650     the shared object is created or linked against, together with a
22651     global offset table entry.  The value is a pc-relative offset to
22652     the corresponding stub code in the procedure linkage table.  This
22653     arrangement causes the run-time symbol resolver to be called to
22654     look up and set the value of the symbol the first time the function
22655     is called (at latest; depending environment variables).  It is only
22656     safe to leave the symbol unresolved this way if all references are
22657     function calls.
22658
22659'tls_gd'
22660
22661     This modifier is used to load the offset of the GOT entry of the
22662     symbol's TLS descriptor, to be used for general-dynamic TLS
22663     accesses.
22664
22665'tls_gd_lo16'
22666
22667     This modifier is used to load the sign-extended low 16 bits of the
22668     offset of the GOT entry of the symbol's TLS descriptor, to be used
22669     for general dynamic TLS accesses.
22670
22671'tls_gd_hi16'
22672
22673     This modifier is used to load the sign-extended high 16 bits of the
22674     offset of the GOT entry of the symbol's TLS descriptor, to be used
22675     for general dynamic TLS accesses.
22676
22677'tls_gd_ha16'
22678
22679     This modifier is like 'tls_gd_hi16', but it adds one to the value
22680     if 'tls_gd_lo16' of the input value is negative.
22681
22682'tls_ie'
22683
22684     This modifier is used to load the offset of the GOT entry
22685     containing the offset of the symbol's address from the TCB, to be
22686     used for initial-exec TLS accesses.
22687
22688'tls_ie_lo16'
22689
22690     This modifier is used to load the low 16 bits of the offset of the
22691     GOT entry containing the offset of the symbol's address from the
22692     TCB, to be used for initial-exec TLS accesses.
22693
22694'tls_ie_hi16'
22695
22696     This modifier is used to load the high 16 bits of the offset of the
22697     GOT entry containing the offset of the symbol's address from the
22698     TCB, to be used for initial-exec TLS accesses.
22699
22700'tls_ie_ha16'
22701
22702     This modifier is like 'tls_ie_hi16', but it adds one to the value
22703     if 'tls_ie_lo16' of the input value is negative.
22704
22705'tls_le'
22706
22707     This modifier is used to load the offset of the symbol's address
22708     from the TCB, to be used for local-exec TLS accesses.
22709
22710'tls_le_lo16'
22711
22712     This modifier is used to load the low 16 bits of the offset of the
22713     symbol's address from the TCB, to be used for local-exec TLS
22714     accesses.
22715
22716'tls_le_hi16'
22717
22718     This modifier is used to load the high 16 bits of the offset of the
22719     symbol's address from the TCB, to be used for local-exec TLS
22720     accesses.
22721
22722'tls_le_ha16'
22723
22724     This modifier is like 'tls_le_hi16', but it adds one to the value
22725     if 'tls_le_lo16' of the input value is negative.
22726
22727'tls_gd_call'
22728
22729     This modifier is used to tag an instruction as the "call" part of a
22730     calling sequence for a TLS GD reference of its operand.
22731
22732'tls_gd_add'
22733
22734     This modifier is used to tag an instruction as the "add" part of a
22735     calling sequence for a TLS GD reference of its operand.
22736
22737'tls_ie_load'
22738
22739     This modifier is used to tag an instruction as the "load" part of a
22740     calling sequence for a TLS IE reference of its operand.
22741
22742
22743File: as.info,  Node: TILEPro Directives,  Prev: TILEPro Syntax,  Up: TILEPro-Dependent
22744
227459.48.3 TILEPro Directives
22746-------------------------
22747
22748'.align EXPRESSION [, EXPRESSION]'
22749     This is the generic .ALIGN directive.  The first argument is the
22750     requested alignment in bytes.
22751
22752'.allow_suspicious_bundles'
22753     Turns on error checking for combinations of instructions in a
22754     bundle that probably indicate a programming error.  This is on by
22755     default.
22756
22757'.no_allow_suspicious_bundles'
22758     Turns off error checking for combinations of instructions in a
22759     bundle that probably indicate a programming error.
22760
22761'.require_canonical_reg_names'
22762     Require that canonical register names be used, and emit a warning
22763     if the numeric names are used.  This is on by default.
22764
22765'.no_require_canonical_reg_names'
22766     Permit the use of numeric names for registers that have canonical
22767     names.
22768
22769
22770File: as.info,  Node: V850-Dependent,  Next: Vax-Dependent,  Prev: TILEPro-Dependent,  Up: Machine Dependencies
22771
227729.49 v850 Dependent Features
22773============================
22774
22775* Menu:
22776
22777* V850 Options::              Options
22778* V850 Syntax::               Syntax
22779* V850 Floating Point::       Floating Point
22780* V850 Directives::           V850 Machine Directives
22781* V850 Opcodes::              Opcodes
22782
22783
22784File: as.info,  Node: V850 Options,  Next: V850 Syntax,  Up: V850-Dependent
22785
227869.49.1 Options
22787--------------
22788
22789'as' supports the following additional command-line options for the V850
22790processor family:
22791
22792'-wsigned_overflow'
22793     Causes warnings to be produced when signed immediate values
22794     overflow the space available for then within their opcodes.  By
22795     default this option is disabled as it is possible to receive
22796     spurious warnings due to using exact bit patterns as immediate
22797     constants.
22798
22799'-wunsigned_overflow'
22800     Causes warnings to be produced when unsigned immediate values
22801     overflow the space available for then within their opcodes.  By
22802     default this option is disabled as it is possible to receive
22803     spurious warnings due to using exact bit patterns as immediate
22804     constants.
22805
22806'-mv850'
22807     Specifies that the assembled code should be marked as being
22808     targeted at the V850 processor.  This allows the linker to detect
22809     attempts to link such code with code assembled for other
22810     processors.
22811
22812'-mv850e'
22813     Specifies that the assembled code should be marked as being
22814     targeted at the V850E processor.  This allows the linker to detect
22815     attempts to link such code with code assembled for other
22816     processors.
22817
22818'-mv850e1'
22819     Specifies that the assembled code should be marked as being
22820     targeted at the V850E1 processor.  This allows the linker to detect
22821     attempts to link such code with code assembled for other
22822     processors.
22823
22824'-mv850any'
22825     Specifies that the assembled code should be marked as being
22826     targeted at the V850 processor but support instructions that are
22827     specific to the extended variants of the process.  This allows the
22828     production of binaries that contain target specific code, but which
22829     are also intended to be used in a generic fashion.  For example
22830     libgcc.a contains generic routines used by the code produced by GCC
22831     for all versions of the v850 architecture, together with support
22832     routines only used by the V850E architecture.
22833
22834'-mv850e2'
22835     Specifies that the assembled code should be marked as being
22836     targeted at the V850E2 processor.  This allows the linker to detect
22837     attempts to link such code with code assembled for other
22838     processors.
22839
22840'-mv850e2v3'
22841     Specifies that the assembled code should be marked as being
22842     targeted at the V850E2V3 processor.  This allows the linker to
22843     detect attempts to link such code with code assembled for other
22844     processors.
22845
22846'-mv850e2v4'
22847     This is an alias for '-mv850e3v5'.
22848
22849'-mv850e3v5'
22850     Specifies that the assembled code should be marked as being
22851     targeted at the V850E3V5 processor.  This allows the linker to
22852     detect attempts to link such code with code assembled for other
22853     processors.
22854
22855'-mrelax'
22856     Enables relaxation.  This allows the .longcall and .longjump pseudo
22857     ops to be used in the assembler source code.  These ops label
22858     sections of code which are either a long function call or a long
22859     branch.  The assembler will then flag these sections of code and
22860     the linker will attempt to relax them.
22861
22862'-mgcc-abi'
22863     Marks the generated object file as supporting the old GCC ABI.
22864
22865'-mrh850-abi'
22866     Marks the generated object file as supporting the RH850 ABI. This
22867     is the default.
22868
22869'-m8byte-align'
22870     Marks the generated object file as supporting a maximum 64-bits of
22871     alignment for variables defined in the source code.
22872
22873'-m4byte-align'
22874     Marks the generated object file as supporting a maximum 32-bits of
22875     alignment for variables defined in the source code.  This is the
22876     default.
22877
22878'-msoft-float'
22879     Marks the generated object file as not using any floating point
22880     instructions - and hence can be linked with other V850 binaries
22881     that do or do not use floating point.  This is the default for
22882     binaries for architectures earlier than the 'e2v3'.
22883
22884'-mhard-float'
22885     Marks the generated object file as one that uses floating point
22886     instructions - and hence can only be linked with other V850
22887     binaries that use the same kind of floating point instructions, or
22888     with binaries that do not use floating point at all.  This is the
22889     default for binaries the 'e2v3' and later architectures.
22890
22891
22892File: as.info,  Node: V850 Syntax,  Next: V850 Floating Point,  Prev: V850 Options,  Up: V850-Dependent
22893
228949.49.2 Syntax
22895-------------
22896
22897* Menu:
22898
22899* V850-Chars::                Special Characters
22900* V850-Regs::                 Register Names
22901
22902
22903File: as.info,  Node: V850-Chars,  Next: V850-Regs,  Up: V850 Syntax
22904
229059.49.2.1 Special Characters
22906...........................
22907
22908'#' is the line comment character.  If a '#' appears as the first
22909character of a line, the whole line is treated as a comment, but in this
22910case the line can also be a logical line number directive (*note
22911Comments::) or a preprocessor control command (*note Preprocessing::).
22912
22913   Two dashes ('--') can also be used to start a line comment.
22914
22915   The ';' character can be used to separate statements on the same
22916line.
22917
22918
22919File: as.info,  Node: V850-Regs,  Prev: V850-Chars,  Up: V850 Syntax
22920
229219.49.2.2 Register Names
22922.......................
22923
22924'as' supports the following names for registers:
22925'general register 0'
22926     r0, zero
22927'general register 1'
22928     r1
22929'general register 2'
22930     r2, hp
22931'general register 3'
22932     r3, sp
22933'general register 4'
22934     r4, gp
22935'general register 5'
22936     r5, tp
22937'general register 6'
22938     r6
22939'general register 7'
22940     r7
22941'general register 8'
22942     r8
22943'general register 9'
22944     r9
22945'general register 10'
22946     r10
22947'general register 11'
22948     r11
22949'general register 12'
22950     r12
22951'general register 13'
22952     r13
22953'general register 14'
22954     r14
22955'general register 15'
22956     r15
22957'general register 16'
22958     r16
22959'general register 17'
22960     r17
22961'general register 18'
22962     r18
22963'general register 19'
22964     r19
22965'general register 20'
22966     r20
22967'general register 21'
22968     r21
22969'general register 22'
22970     r22
22971'general register 23'
22972     r23
22973'general register 24'
22974     r24
22975'general register 25'
22976     r25
22977'general register 26'
22978     r26
22979'general register 27'
22980     r27
22981'general register 28'
22982     r28
22983'general register 29'
22984     r29
22985'general register 30'
22986     r30, ep
22987'general register 31'
22988     r31, lp
22989'system register 0'
22990     eipc
22991'system register 1'
22992     eipsw
22993'system register 2'
22994     fepc
22995'system register 3'
22996     fepsw
22997'system register 4'
22998     ecr
22999'system register 5'
23000     psw
23001'system register 16'
23002     ctpc
23003'system register 17'
23004     ctpsw
23005'system register 18'
23006     dbpc
23007'system register 19'
23008     dbpsw
23009'system register 20'
23010     ctbp
23011
23012
23013File: as.info,  Node: V850 Floating Point,  Next: V850 Directives,  Prev: V850 Syntax,  Up: V850-Dependent
23014
230159.49.3 Floating Point
23016---------------------
23017
23018The V850 family uses IEEE floating-point numbers.
23019
23020
23021File: as.info,  Node: V850 Directives,  Next: V850 Opcodes,  Prev: V850 Floating Point,  Up: V850-Dependent
23022
230239.49.4 V850 Machine Directives
23024------------------------------
23025
23026'.offset <EXPRESSION>'
23027     Moves the offset into the current section to the specified amount.
23028
23029'.section "name", <type>'
23030     This is an extension to the standard .section directive.  It sets
23031     the current section to be <type> and creates an alias for this
23032     section called "name".
23033
23034'.v850'
23035     Specifies that the assembled code should be marked as being
23036     targeted at the V850 processor.  This allows the linker to detect
23037     attempts to link such code with code assembled for other
23038     processors.
23039
23040'.v850e'
23041     Specifies that the assembled code should be marked as being
23042     targeted at the V850E processor.  This allows the linker to detect
23043     attempts to link such code with code assembled for other
23044     processors.
23045
23046'.v850e1'
23047     Specifies that the assembled code should be marked as being
23048     targeted at the V850E1 processor.  This allows the linker to detect
23049     attempts to link such code with code assembled for other
23050     processors.
23051
23052'.v850e2'
23053     Specifies that the assembled code should be marked as being
23054     targeted at the V850E2 processor.  This allows the linker to detect
23055     attempts to link such code with code assembled for other
23056     processors.
23057
23058'.v850e2v3'
23059     Specifies that the assembled code should be marked as being
23060     targeted at the V850E2V3 processor.  This allows the linker to
23061     detect attempts to link such code with code assembled for other
23062     processors.
23063
23064'.v850e2v4'
23065     Specifies that the assembled code should be marked as being
23066     targeted at the V850E3V5 processor.  This allows the linker to
23067     detect attempts to link such code with code assembled for other
23068     processors.
23069
23070'.v850e3v5'
23071     Specifies that the assembled code should be marked as being
23072     targeted at the V850E3V5 processor.  This allows the linker to
23073     detect attempts to link such code with code assembled for other
23074     processors.
23075
23076
23077File: as.info,  Node: V850 Opcodes,  Prev: V850 Directives,  Up: V850-Dependent
23078
230799.49.5 Opcodes
23080--------------
23081
23082'as' implements all the standard V850 opcodes.
23083
23084   'as' also implements the following pseudo ops:
23085
23086'hi0()'
23087     Computes the higher 16 bits of the given expression and stores it
23088     into the immediate operand field of the given instruction.  For
23089     example:
23090
23091     'mulhi hi0(here - there), r5, r6'
23092
23093     computes the difference between the address of labels 'here' and
23094     'there', takes the upper 16 bits of this difference, shifts it down
23095     16 bits and then multiplies it by the lower 16 bits in register 5,
23096     putting the result into register 6.
23097
23098'lo()'
23099     Computes the lower 16 bits of the given expression and stores it
23100     into the immediate operand field of the given instruction.  For
23101     example:
23102
23103     'addi lo(here - there), r5, r6'
23104
23105     computes the difference between the address of labels 'here' and
23106     'there', takes the lower 16 bits of this difference and adds it to
23107     register 5, putting the result into register 6.
23108
23109'hi()'
23110     Computes the higher 16 bits of the given expression and then adds
23111     the value of the most significant bit of the lower 16 bits of the
23112     expression and stores the result into the immediate operand field
23113     of the given instruction.  For example the following code can be
23114     used to compute the address of the label 'here' and store it into
23115     register 6:
23116
23117     'movhi hi(here), r0, r6' 'movea lo(here), r6, r6'
23118
23119     The reason for this special behaviour is that movea performs a sign
23120     extension on its immediate operand.  So for example if the address
23121     of 'here' was 0xFFFFFFFF then without the special behaviour of the
23122     hi() pseudo-op the movhi instruction would put 0xFFFF0000 into r6,
23123     then the movea instruction would takes its immediate operand,
23124     0xFFFF, sign extend it to 32 bits, 0xFFFFFFFF, and then add it into
23125     r6 giving 0xFFFEFFFF which is wrong (the fifth nibble is E). With
23126     the hi() pseudo op adding in the top bit of the lo() pseudo op, the
23127     movhi instruction actually stores 0 into r6 (0xFFFF + 1 = 0x0000),
23128     so that the movea instruction stores 0xFFFFFFFF into r6 - the right
23129     value.
23130
23131'hilo()'
23132     Computes the 32 bit value of the given expression and stores it
23133     into the immediate operand field of the given instruction (which
23134     must be a mov instruction).  For example:
23135
23136     'mov hilo(here), r6'
23137
23138     computes the absolute address of label 'here' and puts the result
23139     into register 6.
23140
23141'sdaoff()'
23142     Computes the offset of the named variable from the start of the
23143     Small Data Area (whose address is held in register 4, the GP
23144     register) and stores the result as a 16 bit signed value in the
23145     immediate operand field of the given instruction.  For example:
23146
23147     'ld.w sdaoff(_a_variable)[gp],r6'
23148
23149     loads the contents of the location pointed to by the label
23150     '_a_variable' into register 6, provided that the label is located
23151     somewhere within +/- 32K of the address held in the GP register.
23152     [Note the linker assumes that the GP register contains a fixed
23153     address set to the address of the label called '__gp'.  This can
23154     either be set up automatically by the linker, or specifically set
23155     by using the '--defsym __gp=<value>' command-line option].
23156
23157'tdaoff()'
23158     Computes the offset of the named variable from the start of the
23159     Tiny Data Area (whose address is held in register 30, the EP
23160     register) and stores the result as a 4,5, 7 or 8 bit unsigned value
23161     in the immediate operand field of the given instruction.  For
23162     example:
23163
23164     'sld.w tdaoff(_a_variable)[ep],r6'
23165
23166     loads the contents of the location pointed to by the label
23167     '_a_variable' into register 6, provided that the label is located
23168     somewhere within +256 bytes of the address held in the EP register.
23169     [Note the linker assumes that the EP register contains a fixed
23170     address set to the address of the label called '__ep'.  This can
23171     either be set up automatically by the linker, or specifically set
23172     by using the '--defsym __ep=<value>' command-line option].
23173
23174'zdaoff()'
23175     Computes the offset of the named variable from address 0 and stores
23176     the result as a 16 bit signed value in the immediate operand field
23177     of the given instruction.  For example:
23178
23179     'movea zdaoff(_a_variable),zero,r6'
23180
23181     puts the address of the label '_a_variable' into register 6,
23182     assuming that the label is somewhere within the first 32K of
23183     memory.  (Strictly speaking it also possible to access the last 32K
23184     of memory as well, as the offsets are signed).
23185
23186'ctoff()'
23187     Computes the offset of the named variable from the start of the
23188     Call Table Area (whose address is held in system register 20, the
23189     CTBP register) and stores the result a 6 or 16 bit unsigned value
23190     in the immediate field of then given instruction or piece of data.
23191     For example:
23192
23193     'callt ctoff(table_func1)'
23194
23195     will put the call the function whose address is held in the call
23196     table at the location labeled 'table_func1'.
23197
23198'.longcall name'
23199     Indicates that the following sequence of instructions is a long
23200     call to function 'name'.  The linker will attempt to shorten this
23201     call sequence if 'name' is within a 22bit offset of the call.  Only
23202     valid if the '-mrelax' command-line switch has been enabled.
23203
23204'.longjump name'
23205     Indicates that the following sequence of instructions is a long
23206     jump to label 'name'.  The linker will attempt to shorten this code
23207     sequence if 'name' is within a 22bit offset of the jump.  Only
23208     valid if the '-mrelax' command-line switch has been enabled.
23209
23210   For information on the V850 instruction set, see 'V850 Family
2321132-/16-Bit single-Chip Microcontroller Architecture Manual' from NEC.
23212Ltd.
23213
23214
23215File: as.info,  Node: Vax-Dependent,  Next: Visium-Dependent,  Prev: V850-Dependent,  Up: Machine Dependencies
23216
232179.50 VAX Dependent Features
23218===========================
23219
23220* Menu:
23221
23222* VAX-Opts::                    VAX Command-Line Options
23223* VAX-float::                   VAX Floating Point
23224* VAX-directives::              Vax Machine Directives
23225* VAX-opcodes::                 VAX Opcodes
23226* VAX-branch::                  VAX Branch Improvement
23227* VAX-operands::                VAX Operands
23228* VAX-no::                      Not Supported on VAX
23229* VAX-Syntax::                  VAX Syntax
23230
23231
23232File: as.info,  Node: VAX-Opts,  Next: VAX-float,  Up: Vax-Dependent
23233
232349.50.1 VAX Command-Line Options
23235-------------------------------
23236
23237The Vax version of 'as' accepts any of the following options, gives a
23238warning message that the option was ignored and proceeds.  These options
23239are for compatibility with scripts designed for other people's
23240assemblers.
23241
23242'-D (Debug)'
23243'-S (Symbol Table)'
23244'-T (Token Trace)'
23245     These are obsolete options used to debug old assemblers.
23246
23247'-d (Displacement size for JUMPs)'
23248     This option expects a number following the '-d'.  Like options that
23249     expect filenames, the number may immediately follow the '-d' (old
23250     standard) or constitute the whole of the command-line argument that
23251     follows '-d' (GNU standard).
23252
23253'-V (Virtualize Interpass Temporary File)'
23254     Some other assemblers use a temporary file.  This option commanded
23255     them to keep the information in active memory rather than in a disk
23256     file.  'as' always does this, so this option is redundant.
23257
23258'-J (JUMPify Longer Branches)'
23259     Many 32-bit computers permit a variety of branch instructions to do
23260     the same job.  Some of these instructions are short (and fast) but
23261     have a limited range; others are long (and slow) but can branch
23262     anywhere in virtual memory.  Often there are 3 flavors of branch:
23263     short, medium and long.  Some other assemblers would emit short and
23264     medium branches, unless told by this option to emit short and long
23265     branches.
23266
23267'-t (Temporary File Directory)'
23268     Some other assemblers may use a temporary file, and this option
23269     takes a filename being the directory to site the temporary file.
23270     Since 'as' does not use a temporary disk file, this option makes no
23271     difference.  '-t' needs exactly one filename.
23272
23273   The Vax version of the assembler accepts additional options when
23274compiled for VMS:
23275
23276'-h N'
23277     External symbol or section (used for global variables) names are
23278     not case sensitive on VAX/VMS and always mapped to upper case.
23279     This is contrary to the C language definition which explicitly
23280     distinguishes upper and lower case.  To implement a standard
23281     conforming C compiler, names must be changed (mapped) to preserve
23282     the case information.  The default mapping is to convert all lower
23283     case characters to uppercase and adding an underscore followed by a
23284     6 digit hex value, representing a 24 digit binary value.  The one
23285     digits in the binary value represent which characters are uppercase
23286     in the original symbol name.
23287
23288     The '-h N' option determines how we map names.  This takes several
23289     values.  No '-h' switch at all allows case hacking as described
23290     above.  A value of zero ('-h0') implies names should be upper case,
23291     and inhibits the case hack.  A value of 2 ('-h2') implies names
23292     should be all lower case, with no case hack.  A value of 3 ('-h3')
23293     implies that case should be preserved.  The value 1 is unused.  The
23294     '-H' option directs 'as' to display every mapped symbol during
23295     assembly.
23296
23297     Symbols whose names include a dollar sign '$' are exceptions to the
23298     general name mapping.  These symbols are normally only used to
23299     reference VMS library names.  Such symbols are always mapped to
23300     upper case.
23301
23302'-+'
23303     The '-+' option causes 'as' to truncate any symbol name larger than
23304     31 characters.  The '-+' option also prevents some code following
23305     the '_main' symbol normally added to make the object file
23306     compatible with Vax-11 "C".
23307
23308'-1'
23309     This option is ignored for backward compatibility with 'as' version
23310     1.x.
23311
23312'-H'
23313     The '-H' option causes 'as' to print every symbol which was changed
23314     by case mapping.
23315
23316
23317File: as.info,  Node: VAX-float,  Next: VAX-directives,  Prev: VAX-Opts,  Up: Vax-Dependent
23318
233199.50.2 VAX Floating Point
23320-------------------------
23321
23322Conversion of flonums to floating point is correct, and compatible with
23323previous assemblers.  Rounding is towards zero if the remainder is
23324exactly half the least significant bit.
23325
23326   'D', 'F', 'G' and 'H' floating point formats are understood.
23327
23328   Immediate floating literals (_e.g._  'S`$6.9') are rendered
23329correctly.  Again, rounding is towards zero in the boundary case.
23330
23331   The '.float' directive produces 'f' format numbers.  The '.double'
23332directive produces 'd' format numbers.
23333
23334
23335File: as.info,  Node: VAX-directives,  Next: VAX-opcodes,  Prev: VAX-float,  Up: Vax-Dependent
23336
233379.50.3 Vax Machine Directives
23338-----------------------------
23339
23340The Vax version of the assembler supports four directives for generating
23341Vax floating point constants.  They are described in the table below.
23342
23343'.dfloat'
23344     This expects zero or more flonums, separated by commas, and
23345     assembles Vax 'd' format 64-bit floating point constants.
23346
23347'.ffloat'
23348     This expects zero or more flonums, separated by commas, and
23349     assembles Vax 'f' format 32-bit floating point constants.
23350
23351'.gfloat'
23352     This expects zero or more flonums, separated by commas, and
23353     assembles Vax 'g' format 64-bit floating point constants.
23354
23355'.hfloat'
23356     This expects zero or more flonums, separated by commas, and
23357     assembles Vax 'h' format 128-bit floating point constants.
23358
23359
23360File: as.info,  Node: VAX-opcodes,  Next: VAX-branch,  Prev: VAX-directives,  Up: Vax-Dependent
23361
233629.50.4 VAX Opcodes
23363------------------
23364
23365All DEC mnemonics are supported.  Beware that 'case...' instructions
23366have exactly 3 operands.  The dispatch table that follows the 'case...'
23367instruction should be made with '.word' statements.  This is compatible
23368with all unix assemblers we know of.
23369
23370
23371File: as.info,  Node: VAX-branch,  Next: VAX-operands,  Prev: VAX-opcodes,  Up: Vax-Dependent
23372
233739.50.5 VAX Branch Improvement
23374-----------------------------
23375
23376Certain pseudo opcodes are permitted.  They are for branch instructions.
23377They expand to the shortest branch instruction that reaches the target.
23378Generally these mnemonics are made by substituting 'j' for 'b' at the
23379start of a DEC mnemonic.  This feature is included both for
23380compatibility and to help compilers.  If you do not need this feature,
23381avoid these opcodes.  Here are the mnemonics, and the code they can
23382expand into.
23383
23384'jbsb'
23385     'Jsb' is already an instruction mnemonic, so we chose 'jbsb'.
23386     (byte displacement)
23387          'bsbb ...'
23388     (word displacement)
23389          'bsbw ...'
23390     (long displacement)
23391          'jsb ...'
23392'jbr'
23393'jr'
23394     Unconditional branch.
23395     (byte displacement)
23396          'brb ...'
23397     (word displacement)
23398          'brw ...'
23399     (long displacement)
23400          'jmp ...'
23401'jCOND'
23402     COND may be any one of the conditional branches 'neq', 'nequ',
23403     'eql', 'eqlu', 'gtr', 'geq', 'lss', 'gtru', 'lequ', 'vc', 'vs',
23404     'gequ', 'cc', 'lssu', 'cs'.  COND may also be one of the bit tests
23405     'bs', 'bc', 'bss', 'bcs', 'bsc', 'bcc', 'bssi', 'bcci', 'lbs',
23406     'lbc'.  NOTCOND is the opposite condition to COND.
23407     (byte displacement)
23408          'bCOND ...'
23409     (word displacement)
23410          'bNOTCOND foo ; brw ... ; foo:'
23411     (long displacement)
23412          'bNOTCOND foo ; jmp ... ; foo:'
23413'jacbX'
23414     X may be one of 'b d f g h l w'.
23415     (word displacement)
23416          'OPCODE ...'
23417     (long displacement)
23418               OPCODE ..., foo ;
23419               brb bar ;
23420               foo: jmp ... ;
23421               bar:
23422'jaobYYY'
23423     YYY may be one of 'lss leq'.
23424'jsobZZZ'
23425     ZZZ may be one of 'geq gtr'.
23426     (byte displacement)
23427          'OPCODE ...'
23428     (word displacement)
23429               OPCODE ..., foo ;
23430               brb bar ;
23431               foo: brw DESTINATION ;
23432               bar:
23433     (long displacement)
23434               OPCODE ..., foo ;
23435               brb bar ;
23436               foo: jmp DESTINATION ;
23437               bar:
23438'aobleq'
23439'aoblss'
23440'sobgeq'
23441'sobgtr'
23442     (byte displacement)
23443          'OPCODE ...'
23444     (word displacement)
23445               OPCODE ..., foo ;
23446               brb bar ;
23447               foo: brw DESTINATION ;
23448               bar:
23449     (long displacement)
23450               OPCODE ..., foo ;
23451               brb bar ;
23452               foo: jmp DESTINATION ;
23453               bar:
23454
23455
23456File: as.info,  Node: VAX-operands,  Next: VAX-no,  Prev: VAX-branch,  Up: Vax-Dependent
23457
234589.50.6 VAX Operands
23459-------------------
23460
23461The immediate character is '$' for Unix compatibility, not '#' as DEC
23462writes it.
23463
23464   The indirect character is '*' for Unix compatibility, not '@' as DEC
23465writes it.
23466
23467   The displacement sizing character is '`' (an accent grave) for Unix
23468compatibility, not '^' as DEC writes it.  The letter preceding '`' may
23469have either case.  'G' is not understood, but all other letters ('b i l
23470s w') are understood.
23471
23472   Register names understood are 'r0 r1 r2 ... r15 ap fp sp pc'.  Upper
23473and lower case letters are equivalent.
23474
23475   For instance
23476     tstb *w`$4(r5)
23477
23478   Any expression is permitted in an operand.  Operands are comma
23479separated.
23480
23481
23482File: as.info,  Node: VAX-no,  Next: VAX-Syntax,  Prev: VAX-operands,  Up: Vax-Dependent
23483
234849.50.7 Not Supported on VAX
23485---------------------------
23486
23487Vax bit fields can not be assembled with 'as'.  Someone can add the
23488required code if they really need it.
23489
23490
23491File: as.info,  Node: VAX-Syntax,  Prev: VAX-no,  Up: Vax-Dependent
23492
234939.50.8 VAX Syntax
23494-----------------
23495
23496* Menu:
23497
23498* VAX-Chars::                Special Characters
23499
23500
23501File: as.info,  Node: VAX-Chars,  Up: VAX-Syntax
23502
235039.50.8.1 Special Characters
23504...........................
23505
23506The presence of a '#' appearing anywhere on a line indicates the start
23507of a comment that extends to the end of that line.
23508
23509   If a '#' appears as the first character of a line then the whole line
23510is treated as a comment, but in this case the line can also be a logical
23511line number directive (*note Comments::) or a preprocessor control
23512command (*note Preprocessing::).
23513
23514   The ';' character can be used to separate statements on the same
23515line.
23516
23517
23518File: as.info,  Node: Visium-Dependent,  Next: WebAssembly-Dependent,  Prev: Vax-Dependent,  Up: Machine Dependencies
23519
235209.51 Visium Dependent Features
23521==============================
23522
23523* Menu:
23524
23525* Visium Options::              Options
23526* Visium Syntax::               Syntax
23527* Visium Opcodes::              Opcodes
23528
23529
23530File: as.info,  Node: Visium Options,  Next: Visium Syntax,  Up: Visium-Dependent
23531
235329.51.1 Options
23533--------------
23534
23535The Visium assembler implements one machine-specific option:
23536
23537'-mtune=ARCH'
23538     This option specifies the target architecture.  If an attempt is
23539     made to assemble an instruction that will not execute on the target
23540     architecture, the assembler will issue an error message.
23541
23542     The following names are recognized: 'mcm24' 'mcm' 'gr5' 'gr6'
23543
23544
23545File: as.info,  Node: Visium Syntax,  Next: Visium Opcodes,  Prev: Visium Options,  Up: Visium-Dependent
23546
235479.51.2 Syntax
23548-------------
23549
23550* Menu:
23551
23552* Visium Characters::           Special Characters
23553* Visium Registers::            Register Names
23554
23555
23556File: as.info,  Node: Visium Characters,  Next: Visium Registers,  Up: Visium Syntax
23557
235589.51.2.1 Special Characters
23559...........................
23560
23561Line comments are introduced either by the '!' character or by the ';'
23562character appearing anywhere on a line.
23563
23564   A hash character ('#') as the first character on a line also marks
23565the start of a line comment, but in this case it could also be a logical
23566line number directive (*note Comments::) or a preprocessor control
23567command (*note Preprocessing::).
23568
23569   The Visium assembler does not currently support a line separator
23570character.
23571
23572
23573File: as.info,  Node: Visium Registers,  Prev: Visium Characters,  Up: Visium Syntax
23574
235759.51.2.2 Register Names
23576.......................
23577
23578Registers can be specified either by using their canonical mnemonic
23579names or by using their alias if they have one, for example 'sp'.
23580
23581
23582File: as.info,  Node: Visium Opcodes,  Prev: Visium Syntax,  Up: Visium-Dependent
23583
235849.51.3 Opcodes
23585--------------
23586
23587All the standard opcodes of the architecture are implemented, along with
23588the following three pseudo-instructions: 'cmp', 'cmpc', 'move'.
23589
23590   In addition, the following two illegal opcodes are implemented and
23591used by the simulation:
23592
23593     stop    5-bit immediate, SourceA
23594     trace   5-bit immediate, SourceA
23595
23596
23597File: as.info,  Node: WebAssembly-Dependent,  Next: XGATE-Dependent,  Prev: Visium-Dependent,  Up: Machine Dependencies
23598
235999.52 WebAssembly Dependent Features
23600===================================
23601
23602* Menu:
23603
23604* WebAssembly-Notes::                Notes
23605* WebAssembly-Syntax::               Syntax
23606* WebAssembly-Floating-Point::       Floating Point
23607* WebAssembly-Opcodes::              Opcodes
23608* WebAssembly-module-layout::        Module Layout
23609
23610
23611File: as.info,  Node: WebAssembly-Notes,  Next: WebAssembly-Syntax,  Up: WebAssembly-Dependent
23612
236139.52.1 Notes
23614------------
23615
23616While WebAssembly provides its own module format for executables, this
23617documentation describes how to use 'as' to produce intermediate ELF
23618object format files.
23619
23620
23621File: as.info,  Node: WebAssembly-Syntax,  Next: WebAssembly-Floating-Point,  Prev: WebAssembly-Notes,  Up: WebAssembly-Dependent
23622
236239.52.2 Syntax
23624-------------
23625
23626The assembler syntax directly encodes sequences of opcodes as defined in
23627the WebAssembly binary encoding specification at
23628https://github.com/webassembly/spec/BinaryEncoding.md.  Structured
23629sexp-style expressions are not supported as input.
23630
23631* Menu:
23632
23633* WebAssembly-Chars::                Special Characters
23634* WebAssembly-Relocs::               Relocations
23635* WebAssembly-Signatures::           Signatures
23636
23637
23638File: as.info,  Node: WebAssembly-Chars,  Next: WebAssembly-Relocs,  Up: WebAssembly-Syntax
23639
236409.52.2.1 Special Characters
23641...........................
23642
23643'#' and ';' are the line comment characters.  Note that if '#' is the
23644first character on a line then it can also be a logical line number
23645directive (*note Comments::) or a preprocessor control command (*note
23646Preprocessing::).
23647
23648
23649File: as.info,  Node: WebAssembly-Relocs,  Next: WebAssembly-Signatures,  Prev: WebAssembly-Chars,  Up: WebAssembly-Syntax
23650
236519.52.2.2 Relocations
23652....................
23653
23654Special relocations are available by using the '@PLT', '@GOT', or '@GOT'
23655suffixes after a constant expression, which correspond to the
23656R_ASMJS_LEB128_PLT, R_ASMJS_LEB128_GOT, and R_ASMJS_LEB128_GOT_CODE
23657relocations, respectively.
23658
23659   The '@PLT' suffix is followed by a symbol name in braces; the symbol
23660value is used to determine the function signature for which a PLT stub
23661is generated.  Currently, the symbol _name_ is parsed from its last 'F'
23662character to determine the argument count of the function, which is also
23663necessary for generating a PLT stub.
23664
23665
23666File: as.info,  Node: WebAssembly-Signatures,  Prev: WebAssembly-Relocs,  Up: WebAssembly-Syntax
23667
236689.52.2.3 Signatures
23669...................
23670
23671Function signatures are specified with the 'signature' pseudo-opcode,
23672followed by a simple function signature imitating a C++-mangled function
23673type: 'F' followed by an optional 'v', then a sequence of 'i', 'l', 'f',
23674and 'd' characters to mark i32, i64, f32, and f64 parameters,
23675respectively; followed by a final 'E' to mark the end of the function
23676signature.
23677
23678
23679File: as.info,  Node: WebAssembly-Floating-Point,  Next: WebAssembly-Opcodes,  Prev: WebAssembly-Syntax,  Up: WebAssembly-Dependent
23680
236819.52.3 Floating Point
23682---------------------
23683
23684WebAssembly uses little-endian IEEE floating-point numbers.
23685
23686
23687File: as.info,  Node: WebAssembly-Opcodes,  Next: WebAssembly-module-layout,  Prev: WebAssembly-Floating-Point,  Up: WebAssembly-Dependent
23688
236899.52.4 Regular Opcodes
23690----------------------
23691
23692Ordinary instructions are encoded with the WebAssembly mnemonics as
23693listed at:
23694<https://github.com/WebAssembly/design/blob/master/BinaryEncoding.md>.
23695
23696   Opcodes are written directly in the order in which they are encoded,
23697without going through an intermediate sexp-style expression as in the
23698'was' format.
23699
23700   For "typed" opcodes (block, if, etc.), the type of the block is
23701specified in square brackets following the opcode: 'if[i]', 'if[]'.
23702
23703
23704File: as.info,  Node: WebAssembly-module-layout,  Prev: WebAssembly-Opcodes,  Up: WebAssembly-Dependent
23705
237069.52.5 WebAssembly Module Layout
23707--------------------------------
23708
23709'as' will only produce ELF output, not a valid WebAssembly module.  It
23710is possible to make 'as' produce output in a single ELF section which
23711becomes a valid WebAssembly module, but a linker script to do so may be
23712preferable, as it doesn't require running the entire module through the
23713assembler at once.
23714
23715
23716File: as.info,  Node: XGATE-Dependent,  Next: XSTORMY16-Dependent,  Prev: WebAssembly-Dependent,  Up: Machine Dependencies
23717
237189.53 XGATE Dependent Features
23719=============================
23720
23721* Menu:
23722
23723* XGATE-Opts::                   XGATE Options
23724* XGATE-Syntax::                 Syntax
23725* XGATE-Directives::             Assembler Directives
23726* XGATE-Float::                  Floating Point
23727* XGATE-opcodes::                Opcodes
23728
23729
23730File: as.info,  Node: XGATE-Opts,  Next: XGATE-Syntax,  Up: XGATE-Dependent
23731
237329.53.1 XGATE Options
23733--------------------
23734
23735The Freescale XGATE version of 'as' has a few machine dependent options.
23736
23737'-mshort'
23738     This option controls the ABI and indicates to use a 16-bit integer
23739     ABI. It has no effect on the assembled instructions.  This is the
23740     default.
23741
23742'-mlong'
23743     This option controls the ABI and indicates to use a 32-bit integer
23744     ABI.
23745
23746'-mshort-double'
23747     This option controls the ABI and indicates to use a 32-bit float
23748     ABI. This is the default.
23749
23750'-mlong-double'
23751     This option controls the ABI and indicates to use a 64-bit float
23752     ABI.
23753
23754'--print-insn-syntax'
23755     You can use the '--print-insn-syntax' option to obtain the syntax
23756     description of the instruction when an error is detected.
23757
23758'--print-opcodes'
23759     The '--print-opcodes' option prints the list of all the
23760     instructions with their syntax.  Once the list is printed 'as'
23761     exits.
23762
23763
23764File: as.info,  Node: XGATE-Syntax,  Next: XGATE-Directives,  Prev: XGATE-Opts,  Up: XGATE-Dependent
23765
237669.53.2 Syntax
23767-------------
23768
23769In XGATE RISC syntax, the instruction name comes first and it may be
23770followed by up to three operands.  Operands are separated by commas
23771(',').  'as' will complain if too many operands are specified for a
23772given instruction.  The same will happen if you specified too few
23773operands.
23774
23775     nop
23776     ldl  #23
23777     CMP  R1, R2
23778
23779   The presence of a ';' character or a '!' character anywhere on a line
23780indicates the start of a comment that extends to the end of that line.
23781
23782   A '*' or a '#' character at the start of a line also introduces a
23783line comment, but these characters do not work elsewhere on the line.
23784If the first character of the line is a '#' then as well as starting a
23785comment, the line could also be logical line number directive (*note
23786Comments::) or a preprocessor control command (*note Preprocessing::).
23787
23788   The XGATE assembler does not currently support a line separator
23789character.
23790
23791   The following addressing modes are understood for XGATE:
23792"Inherent"
23793     ''
23794
23795"Immediate 3 Bit Wide"
23796     '#NUMBER'
23797
23798"Immediate 4 Bit Wide"
23799     '#NUMBER'
23800
23801"Immediate 8 Bit Wide"
23802     '#NUMBER'
23803
23804"Monadic Addressing"
23805     'REG'
23806
23807"Dyadic Addressing"
23808     'REG, REG'
23809
23810"Triadic Addressing"
23811     'REG, REG, REG'
23812
23813"Relative Addressing 9 Bit Wide"
23814     '*SYMBOL'
23815
23816"Relative Addressing 10 Bit Wide"
23817     '*SYMBOL'
23818
23819"Index Register plus Immediate Offset"
23820     'REG, (REG, #NUMBER)'
23821
23822"Index Register plus Register Offset"
23823     'REG, REG, REG'
23824
23825"Index Register plus Register Offset with Post-increment"
23826     'REG, REG, REG+'
23827
23828"Index Register plus Register Offset with Pre-decrement"
23829     'REG, REG, -REG'
23830
23831     The register can be either 'R0', 'R1', 'R2', 'R3', 'R4', 'R5', 'R6'
23832     or 'R7'.
23833
23834   Convene macro opcodes to deal with 16-bit values have been added.
23835
23836"Immediate 16 Bit Wide"
23837     '#NUMBER', or '*SYMBOL'
23838
23839     For example:
23840
23841          ldw R1, #1024
23842          ldw R3, timer
23843          ldw R1, (R1, #0)
23844          COM R1
23845          stw R2, (R1, #0)
23846
23847
23848File: as.info,  Node: XGATE-Directives,  Next: XGATE-Float,  Prev: XGATE-Syntax,  Up: XGATE-Dependent
23849
238509.53.3 Assembler Directives
23851---------------------------
23852
23853The XGATE version of 'as' have the following specific assembler
23854directives:
23855
23856
23857File: as.info,  Node: XGATE-Float,  Next: XGATE-opcodes,  Prev: XGATE-Directives,  Up: XGATE-Dependent
23858
238599.53.4 Floating Point
23860---------------------
23861
23862Packed decimal (P) format floating literals are not supported(yet).
23863
23864   The floating point formats generated by directives are these.
23865
23866'.float'
23867     'Single' precision floating point constants.
23868
23869'.double'
23870     'Double' precision floating point constants.
23871
23872'.extend'
23873'.ldouble'
23874     'Extended' precision ('long double') floating point constants.
23875
23876
23877File: as.info,  Node: XGATE-opcodes,  Prev: XGATE-Float,  Up: XGATE-Dependent
23878
238799.53.5 Opcodes
23880--------------
23881
23882
23883File: as.info,  Node: XSTORMY16-Dependent,  Next: Xtensa-Dependent,  Prev: XGATE-Dependent,  Up: Machine Dependencies
23884
238859.54 XStormy16 Dependent Features
23886=================================
23887
23888* Menu:
23889
23890* XStormy16 Syntax::               Syntax
23891* XStormy16 Directives::           Machine Directives
23892* XStormy16 Opcodes::              Pseudo-Opcodes
23893
23894
23895File: as.info,  Node: XStormy16 Syntax,  Next: XStormy16 Directives,  Up: XSTORMY16-Dependent
23896
238979.54.1 Syntax
23898-------------
23899
23900* Menu:
23901
23902* XStormy16-Chars::                Special Characters
23903
23904
23905File: as.info,  Node: XStormy16-Chars,  Up: XStormy16 Syntax
23906
239079.54.1.1 Special Characters
23908...........................
23909
23910'#' is the line comment character.  If a '#' appears as the first
23911character of a line, the whole line is treated as a comment, but in this
23912case the line can also be a logical line number directive (*note
23913Comments::) or a preprocessor control command (*note Preprocessing::).
23914
23915   A semicolon (';') can be used to start a comment that extends from
23916wherever the character appears on the line up to the end of the line.
23917
23918   The '|' character can be used to separate statements on the same
23919line.
23920
23921
23922File: as.info,  Node: XStormy16 Directives,  Next: XStormy16 Opcodes,  Prev: XStormy16 Syntax,  Up: XSTORMY16-Dependent
23923
239249.54.2 XStormy16 Machine Directives
23925-----------------------------------
23926
23927'.16bit_pointers'
23928     Like the '--16bit-pointers' command-line option this directive
23929     indicates that the assembly code makes use of 16-bit pointers.
23930
23931'.32bit_pointers'
23932     Like the '--32bit-pointers' command-line option this directive
23933     indicates that the assembly code makes use of 32-bit pointers.
23934
23935'.no_pointers'
23936     Like the '--no-pointers' command-line option this directive
23937     indicates that the assembly code does not makes use pointers.
23938
23939
23940File: as.info,  Node: XStormy16 Opcodes,  Prev: XStormy16 Directives,  Up: XSTORMY16-Dependent
23941
239429.54.3 XStormy16 Pseudo-Opcodes
23943-------------------------------
23944
23945'as' implements all the standard XStormy16 opcodes.
23946
23947   'as' also implements the following pseudo ops:
23948
23949'@lo()'
23950     Computes the lower 16 bits of the given expression and stores it
23951     into the immediate operand field of the given instruction.  For
23952     example:
23953
23954     'add r6, @lo(here - there)'
23955
23956     computes the difference between the address of labels 'here' and
23957     'there', takes the lower 16 bits of this difference and adds it to
23958     register 6.
23959
23960'@hi()'
23961     Computes the higher 16 bits of the given expression and stores it
23962     into the immediate operand field of the given instruction.  For
23963     example:
23964
23965     'addc r7, @hi(here - there)'
23966
23967     computes the difference between the address of labels 'here' and
23968     'there', takes the upper 16 bits of this difference, shifts it down
23969     16 bits and then adds it, along with the carry bit, to the value in
23970     register 7.
23971
23972
23973File: as.info,  Node: Xtensa-Dependent,  Next: Z80-Dependent,  Prev: XSTORMY16-Dependent,  Up: Machine Dependencies
23974
239759.55 Xtensa Dependent Features
23976==============================
23977
23978This chapter covers features of the GNU assembler that are specific to
23979the Xtensa architecture.  For details about the Xtensa instruction set,
23980please consult the 'Xtensa Instruction Set Architecture (ISA) Reference
23981Manual'.
23982
23983* Menu:
23984
23985* Xtensa Options::              Command-line Options.
23986* Xtensa Syntax::               Assembler Syntax for Xtensa Processors.
23987* Xtensa Optimizations::        Assembler Optimizations.
23988* Xtensa Relaxation::           Other Automatic Transformations.
23989* Xtensa Directives::           Directives for Xtensa Processors.
23990
23991
23992File: as.info,  Node: Xtensa Options,  Next: Xtensa Syntax,  Up: Xtensa-Dependent
23993
239949.55.1 Command-line Options
23995---------------------------
23996
23997'--text-section-literals | --no-text-section-literals'
23998     Control the treatment of literal pools.  The default is
23999     '--no-text-section-literals', which places literals in separate
24000     sections in the output file.  This allows the literal pool to be
24001     placed in a data RAM/ROM. With '--text-section-literals', the
24002     literals are interspersed in the text section in order to keep them
24003     as close as possible to their references.  This may be necessary
24004     for large assembly files, where the literals would otherwise be out
24005     of range of the 'L32R' instructions in the text section.  Literals
24006     are grouped into pools following '.literal_position' directives or
24007     preceding 'ENTRY' instructions.  These options only affect literals
24008     referenced via PC-relative 'L32R' instructions; literals for
24009     absolute mode 'L32R' instructions are handled separately.  *Note
24010     literal: Literal Directive.
24011
24012'--auto-litpools | --no-auto-litpools'
24013     Control the treatment of literal pools.  The default is
24014     '--no-auto-litpools', which in the absence of
24015     '--text-section-literals' places literals in separate sections in
24016     the output file.  This allows the literal pool to be placed in a
24017     data RAM/ROM. With '--auto-litpools', the literals are interspersed
24018     in the text section in order to keep them as close as possible to
24019     their references, explicit '.literal_position' directives are not
24020     required.  This may be necessary for very large functions, where
24021     single literal pool at the beginning of the function may not be
24022     reachable by 'L32R' instructions at the end.  These options only
24023     affect literals referenced via PC-relative 'L32R' instructions;
24024     literals for absolute mode 'L32R' instructions are handled
24025     separately.  When used together with '--text-section-literals',
24026     '--auto-litpools' takes precedence.  *Note literal: Literal
24027     Directive.
24028
24029'--absolute-literals | --no-absolute-literals'
24030     Indicate to the assembler whether 'L32R' instructions use absolute
24031     or PC-relative addressing.  If the processor includes the absolute
24032     addressing option, the default is to use absolute 'L32R'
24033     relocations.  Otherwise, only the PC-relative 'L32R' relocations
24034     can be used.
24035
24036'--target-align | --no-target-align'
24037     Enable or disable automatic alignment to reduce branch penalties at
24038     some expense in code size.  *Note Automatic Instruction Alignment:
24039     Xtensa Automatic Alignment.  This optimization is enabled by
24040     default.  Note that the assembler will always align instructions
24041     like 'LOOP' that have fixed alignment requirements.
24042
24043'--longcalls | --no-longcalls'
24044     Enable or disable transformation of call instructions to allow
24045     calls across a greater range of addresses.  *Note Function Call
24046     Relaxation: Xtensa Call Relaxation.  This option should be used
24047     when call targets can potentially be out of range.  It may degrade
24048     both code size and performance, but the linker can generally
24049     optimize away the unnecessary overhead when a call ends up within
24050     range.  The default is '--no-longcalls'.
24051
24052'--transform | --no-transform'
24053     Enable or disable all assembler transformations of Xtensa
24054     instructions, including both relaxation and optimization.  The
24055     default is '--transform'; '--no-transform' should only be used in
24056     the rare cases when the instructions must be exactly as specified
24057     in the assembly source.  Using '--no-transform' causes out of range
24058     instruction operands to be errors.
24059
24060'--rename-section OLDNAME=NEWNAME'
24061     Rename the OLDNAME section to NEWNAME.  This option can be used
24062     multiple times to rename multiple sections.
24063
24064'--trampolines | --no-trampolines'
24065     Enable or disable transformation of jump instructions to allow
24066     jumps across a greater range of addresses.  *Note Jump Trampolines:
24067     Xtensa Jump Relaxation.  This option should be used when jump
24068     targets can potentially be out of range.  In the absence of such
24069     jumps this option does not affect code size or performance.  The
24070     default is '--trampolines'.
24071
24072'--abi-windowed | --abi-call0'
24073     Choose ABI tag written to the '.xtensa.info' section.  ABI tag
24074     indicates ABI of the assembly code.  A warning is issued by the
24075     linker on an attempt to link object files with inconsistent ABI
24076     tags.  Default ABI is chosen by the Xtensa core configuration.
24077
24078
24079File: as.info,  Node: Xtensa Syntax,  Next: Xtensa Optimizations,  Prev: Xtensa Options,  Up: Xtensa-Dependent
24080
240819.55.2 Assembler Syntax
24082-----------------------
24083
24084Block comments are delimited by '/*' and '*/'.  End of line comments may
24085be introduced with either '#' or '//'.
24086
24087   If a '#' appears as the first character of a line then the whole line
24088is treated as a comment, but in this case the line could also be a
24089logical line number directive (*note Comments::) or a preprocessor
24090control command (*note Preprocessing::).
24091
24092   Instructions consist of a leading opcode or macro name followed by
24093whitespace and an optional comma-separated list of operands:
24094
24095     OPCODE [OPERAND, ...]
24096
24097   Instructions must be separated by a newline or semicolon (';').
24098
24099   FLIX instructions, which bundle multiple opcodes together in a single
24100instruction, are specified by enclosing the bundled opcodes inside
24101braces:
24102
24103     {
24104     [FORMAT]
24105     OPCODE0 [OPERANDS]
24106     OPCODE1 [OPERANDS]
24107     OPCODE2 [OPERANDS]
24108     ...
24109     }
24110
24111   The opcodes in a FLIX instruction are listed in the same order as the
24112corresponding instruction slots in the TIE format declaration.
24113Directives and labels are not allowed inside the braces of a FLIX
24114instruction.  A particular TIE format name can optionally be specified
24115immediately after the opening brace, but this is usually unnecessary.
24116The assembler will automatically search for a format that can encode the
24117specified opcodes, so the format name need only be specified in rare
24118cases where there is more than one applicable format and where it
24119matters which of those formats is used.  A FLIX instruction can also be
24120specified on a single line by separating the opcodes with semicolons:
24121
24122     { [FORMAT;] OPCODE0 [OPERANDS]; OPCODE1 [OPERANDS]; OPCODE2 [OPERANDS]; ... }
24123
24124   If an opcode can only be encoded in a FLIX instruction but is not
24125specified as part of a FLIX bundle, the assembler will choose the
24126smallest format where the opcode can be encoded and will fill unused
24127instruction slots with no-ops.
24128
24129* Menu:
24130
24131* Xtensa Opcodes::              Opcode Naming Conventions.
24132* Xtensa Registers::            Register Naming.
24133
24134
24135File: as.info,  Node: Xtensa Opcodes,  Next: Xtensa Registers,  Up: Xtensa Syntax
24136
241379.55.2.1 Opcode Names
24138.....................
24139
24140See the 'Xtensa Instruction Set Architecture (ISA) Reference Manual' for
24141a complete list of opcodes and descriptions of their semantics.
24142
24143   If an opcode name is prefixed with an underscore character ('_'),
24144'as' will not transform that instruction in any way.  The underscore
24145prefix disables both optimization (*note Xtensa Optimizations: Xtensa
24146Optimizations.) and relaxation (*note Xtensa Relaxation: Xtensa
24147Relaxation.) for that particular instruction.  Only use the underscore
24148prefix when it is essential to select the exact opcode produced by the
24149assembler.  Using this feature unnecessarily makes the code less
24150efficient by disabling assembler optimization and less flexible by
24151disabling relaxation.
24152
24153   Note that this special handling of underscore prefixes only applies
24154to Xtensa opcodes, not to either built-in macros or user-defined macros.
24155When an underscore prefix is used with a macro (e.g., '_MOV'), it refers
24156to a different macro.  The assembler generally provides built-in macros
24157both with and without the underscore prefix, where the underscore
24158versions behave as if the underscore carries through to the instructions
24159in the macros.  For example, '_MOV' may expand to '_MOV.N'.
24160
24161   The underscore prefix only applies to individual instructions, not to
24162series of instructions.  For example, if a series of instructions have
24163underscore prefixes, the assembler will not transform the individual
24164instructions, but it may insert other instructions between them (e.g.,
24165to align a 'LOOP' instruction).  To prevent the assembler from modifying
24166a series of instructions as a whole, use the 'no-transform' directive.
24167*Note transform: Transform Directive.
24168
24169
24170File: as.info,  Node: Xtensa Registers,  Prev: Xtensa Opcodes,  Up: Xtensa Syntax
24171
241729.55.2.2 Register Names
24173.......................
24174
24175The assembly syntax for a register file entry is the "short" name for a
24176TIE register file followed by the index into that register file.  For
24177example, the general-purpose 'AR' register file has a short name of 'a',
24178so these registers are named 'a0'...'a15'.  As a special feature, 'sp'
24179is also supported as a synonym for 'a1'.  Additional registers may be
24180added by processor configuration options and by designer-defined TIE
24181extensions.  An initial '$' character is optional in all register names.
24182
24183
24184File: as.info,  Node: Xtensa Optimizations,  Next: Xtensa Relaxation,  Prev: Xtensa Syntax,  Up: Xtensa-Dependent
24185
241869.55.3 Xtensa Optimizations
24187---------------------------
24188
24189The optimizations currently supported by 'as' are generation of density
24190instructions where appropriate and automatic branch target alignment.
24191
24192* Menu:
24193
24194* Density Instructions::        Using Density Instructions.
24195* Xtensa Automatic Alignment::  Automatic Instruction Alignment.
24196
24197
24198File: as.info,  Node: Density Instructions,  Next: Xtensa Automatic Alignment,  Up: Xtensa Optimizations
24199
242009.55.3.1 Using Density Instructions
24201...................................
24202
24203The Xtensa instruction set has a code density option that provides
2420416-bit versions of some of the most commonly used opcodes.  Use of these
24205opcodes can significantly reduce code size.  When possible, the
24206assembler automatically translates instructions from the core Xtensa
24207instruction set into equivalent instructions from the Xtensa code
24208density option.  This translation can be disabled by using underscore
24209prefixes (*note Opcode Names: Xtensa Opcodes.), by using the
24210'--no-transform' command-line option (*note Command Line Options: Xtensa
24211Options.), or by using the 'no-transform' directive (*note transform:
24212Transform Directive.).
24213
24214   It is a good idea _not_ to use the density instructions directly.
24215The assembler will automatically select dense instructions where
24216possible.  If you later need to use an Xtensa processor without the code
24217density option, the same assembly code will then work without
24218modification.
24219
24220
24221File: as.info,  Node: Xtensa Automatic Alignment,  Prev: Density Instructions,  Up: Xtensa Optimizations
24222
242239.55.3.2 Automatic Instruction Alignment
24224........................................
24225
24226The Xtensa assembler will automatically align certain instructions, both
24227to optimize performance and to satisfy architectural requirements.
24228
24229   As an optimization to improve performance, the assembler attempts to
24230align branch targets so they do not cross instruction fetch boundaries.
24231(Xtensa processors can be configured with either 32-bit or 64-bit
24232instruction fetch widths.)  An instruction immediately following a call
24233is treated as a branch target in this context, because it will be the
24234target of a return from the call.  This alignment has the potential to
24235reduce branch penalties at some expense in code size.  This optimization
24236is enabled by default.  You can disable it with the '--no-target-align'
24237command-line option (*note Command-line Options: Xtensa Options.).
24238
24239   The target alignment optimization is done without adding instructions
24240that could increase the execution time of the program.  If there are
24241density instructions in the code preceding a target, the assembler can
24242change the target alignment by widening some of those instructions to
24243the equivalent 24-bit instructions.  Extra bytes of padding can be
24244inserted immediately following unconditional jump and return
24245instructions.  This approach is usually successful in aligning many, but
24246not all, branch targets.
24247
24248   The 'LOOP' family of instructions must be aligned such that the first
24249instruction in the loop body does not cross an instruction fetch
24250boundary (e.g., with a 32-bit fetch width, a 'LOOP' instruction must be
24251on either a 1 or 2 mod 4 byte boundary).  The assembler knows about this
24252restriction and inserts the minimal number of 2 or 3 byte no-op
24253instructions to satisfy it.  When no-op instructions are added, any
24254label immediately preceding the original loop will be moved in order to
24255refer to the loop instruction, not the newly generated no-op
24256instruction.  To preserve binary compatibility across processors with
24257different fetch widths, the assembler conservatively assumes a 32-bit
24258fetch width when aligning 'LOOP' instructions (except if the first
24259instruction in the loop is a 64-bit instruction).
24260
24261   Previous versions of the assembler automatically aligned 'ENTRY'
24262instructions to 4-byte boundaries, but that alignment is now the
24263programmer's responsibility.
24264
24265
24266File: as.info,  Node: Xtensa Relaxation,  Next: Xtensa Directives,  Prev: Xtensa Optimizations,  Up: Xtensa-Dependent
24267
242689.55.4 Xtensa Relaxation
24269------------------------
24270
24271When an instruction operand is outside the range allowed for that
24272particular instruction field, 'as' can transform the code to use a
24273functionally-equivalent instruction or sequence of instructions.  This
24274process is known as "relaxation".  This is typically done for branch
24275instructions because the distance of the branch targets is not known
24276until assembly-time.  The Xtensa assembler offers branch relaxation and
24277also extends this concept to function calls, 'MOVI' instructions and
24278other instructions with immediate fields.
24279
24280* Menu:
24281
24282* Xtensa Branch Relaxation::        Relaxation of Branches.
24283* Xtensa Call Relaxation::          Relaxation of Function Calls.
24284* Xtensa Jump Relaxation::          Relaxation of Jumps.
24285* Xtensa Immediate Relaxation::     Relaxation of other Immediate Fields.
24286
24287
24288File: as.info,  Node: Xtensa Branch Relaxation,  Next: Xtensa Call Relaxation,  Up: Xtensa Relaxation
24289
242909.55.4.1 Conditional Branch Relaxation
24291......................................
24292
24293When the target of a branch is too far away from the branch itself,
24294i.e., when the offset from the branch to the target is too large to fit
24295in the immediate field of the branch instruction, it may be necessary to
24296replace the branch with a branch around a jump.  For example,
24297
24298         beqz    a2, L
24299
24300   may result in:
24301
24302         bnez.n  a2, M
24303         j L
24304     M:
24305
24306   (The 'BNEZ.N' instruction would be used in this example only if the
24307density option is available.  Otherwise, 'BNEZ' would be used.)
24308
24309   This relaxation works well because the unconditional jump instruction
24310has a much larger offset range than the various conditional branches.
24311However, an error will occur if a branch target is beyond the range of a
24312jump instruction.  'as' cannot relax unconditional jumps.  Similarly, an
24313error will occur if the original input contains an unconditional jump to
24314a target that is out of range.
24315
24316   Branch relaxation is enabled by default.  It can be disabled by using
24317underscore prefixes (*note Opcode Names: Xtensa Opcodes.), the
24318'--no-transform' command-line option (*note Command-line Options: Xtensa
24319Options.), or the 'no-transform' directive (*note transform: Transform
24320Directive.).
24321
24322
24323File: as.info,  Node: Xtensa Call Relaxation,  Next: Xtensa Jump Relaxation,  Prev: Xtensa Branch Relaxation,  Up: Xtensa Relaxation
24324
243259.55.4.2 Function Call Relaxation
24326.................................
24327
24328Function calls may require relaxation because the Xtensa immediate call
24329instructions ('CALL0', 'CALL4', 'CALL8' and 'CALL12') provide a
24330PC-relative offset of only 512 Kbytes in either direction.  For larger
24331programs, it may be necessary to use indirect calls ('CALLX0', 'CALLX4',
24332'CALLX8' and 'CALLX12') where the target address is specified in a
24333register.  The Xtensa assembler can automatically relax immediate call
24334instructions into indirect call instructions.  This relaxation is done
24335by loading the address of the called function into the callee's return
24336address register and then using a 'CALLX' instruction.  So, for example:
24337
24338         call8 func
24339
24340   might be relaxed to:
24341
24342         .literal .L1, func
24343         l32r    a8, .L1
24344         callx8  a8
24345
24346   Because the addresses of targets of function calls are not generally
24347known until link-time, the assembler must assume the worst and relax all
24348the calls to functions in other source files, not just those that really
24349will be out of range.  The linker can recognize calls that were
24350unnecessarily relaxed, and it will remove the overhead introduced by the
24351assembler for those cases where direct calls are sufficient.
24352
24353   Call relaxation is disabled by default because it can have a negative
24354effect on both code size and performance, although the linker can
24355usually eliminate the unnecessary overhead.  If a program is too large
24356and some of the calls are out of range, function call relaxation can be
24357enabled using the '--longcalls' command-line option or the 'longcalls'
24358directive (*note longcalls: Longcalls Directive.).
24359
24360
24361File: as.info,  Node: Xtensa Jump Relaxation,  Next: Xtensa Immediate Relaxation,  Prev: Xtensa Call Relaxation,  Up: Xtensa Relaxation
24362
243639.55.4.3 Jump Relaxation
24364........................
24365
24366Jump instruction may require relaxation because the Xtensa jump
24367instruction ('J') provide a PC-relative offset of only 128 Kbytes in
24368either direction.  One option is to use jump long ('J.L') instruction,
24369which depending on jump distance may be assembled as jump ('J') or
24370indirect jump ('JX').  However it needs a free register.  When there's
24371no spare register it is possible to plant intermediate jump sites
24372(trampolines) between the jump instruction and its target.  These sites
24373may be located in areas unreachable by normal code execution flow, in
24374that case they only contain intermediate jumps, or they may be inserted
24375in the middle of code block, in which case there's an additional jump
24376from the beginning of the trampoline to the instruction past its end.
24377So, for example:
24378
24379         j 1f
24380         ...
24381         retw
24382         ...
24383         mov a10, a2
24384         call8 func
24385         ...
24386     1:
24387         ...
24388
24389   might be relaxed to:
24390
24391         j .L0_TR_1
24392         ...
24393         retw
24394     .L0_TR_1:
24395         j 1f
24396         ...
24397         mov a10, a2
24398         call8 func
24399         ...
24400     1:
24401         ...
24402
24403   or to:
24404
24405         j .L0_TR_1
24406         ...
24407         retw
24408         ...
24409         mov a10, a2
24410         j .L0_TR_0
24411     .L0_TR_1:
24412         j 1f
24413     .L0_TR_0:
24414         call8 func
24415         ...
24416     1:
24417         ...
24418
24419   The Xtensa assembler uses trampolines with jump around only when it
24420cannot find suitable unreachable trampoline.  There may be multiple
24421trampolines between the jump instruction and its target.
24422
24423   This relaxation does not apply to jumps to undefined symbols,
24424assuming they will reach their targets once resolved.
24425
24426   Jump relaxation is enabled by default because it does not affect code
24427size or performance while the code itself is small.  This relaxation may
24428be disabled completely with '--no-trampolines' or '--no-transform'
24429command-line options (*note Command-line Options: Xtensa Options.).
24430
24431
24432File: as.info,  Node: Xtensa Immediate Relaxation,  Prev: Xtensa Jump Relaxation,  Up: Xtensa Relaxation
24433
244349.55.4.4 Other Immediate Field Relaxation
24435.........................................
24436
24437The assembler normally performs the following other relaxations.  They
24438can be disabled by using underscore prefixes (*note Opcode Names: Xtensa
24439Opcodes.), the '--no-transform' command-line option (*note Command-line
24440Options: Xtensa Options.), or the 'no-transform' directive (*note
24441transform: Transform Directive.).
24442
24443   The 'MOVI' machine instruction can only materialize values in the
24444range from -2048 to 2047.  Values outside this range are best
24445materialized with 'L32R' instructions.  Thus:
24446
24447         movi a0, 100000
24448
24449   is assembled into the following machine code:
24450
24451         .literal .L1, 100000
24452         l32r a0, .L1
24453
24454   The 'L8UI' machine instruction can only be used with immediate
24455offsets in the range from 0 to 255.  The 'L16SI' and 'L16UI' machine
24456instructions can only be used with offsets from 0 to 510.  The 'L32I'
24457machine instruction can only be used with offsets from 0 to 1020.  A
24458load offset outside these ranges can be materialized with an 'L32R'
24459instruction if the destination register of the load is different than
24460the source address register.  For example:
24461
24462         l32i a1, a0, 2040
24463
24464   is translated to:
24465
24466         .literal .L1, 2040
24467         l32r a1, .L1
24468         add a1, a0, a1
24469         l32i a1, a1, 0
24470
24471If the load destination and source address register are the same, an
24472out-of-range offset causes an error.
24473
24474   The Xtensa 'ADDI' instruction only allows immediate operands in the
24475range from -128 to 127.  There are a number of alternate instruction
24476sequences for the 'ADDI' operation.  First, if the immediate is 0, the
24477'ADDI' will be turned into a 'MOV.N' instruction (or the equivalent 'OR'
24478instruction if the code density option is not available).  If the 'ADDI'
24479immediate is outside of the range -128 to 127, but inside the range
24480-32896 to 32639, an 'ADDMI' instruction or 'ADDMI'/'ADDI' sequence will
24481be used.  Finally, if the immediate is outside of this range and a free
24482register is available, an 'L32R'/'ADD' sequence will be used with a
24483literal allocated from the literal pool.
24484
24485   For example:
24486
24487         addi    a5, a6, 0
24488         addi    a5, a6, 512
24489         addi    a5, a6, 513
24490         addi    a5, a6, 50000
24491
24492   is assembled into the following:
24493
24494         .literal .L1, 50000
24495         mov.n   a5, a6
24496         addmi   a5, a6, 0x200
24497         addmi   a5, a6, 0x200
24498         addi    a5, a5, 1
24499         l32r    a5, .L1
24500         add     a5, a6, a5
24501
24502
24503File: as.info,  Node: Xtensa Directives,  Prev: Xtensa Relaxation,  Up: Xtensa-Dependent
24504
245059.55.5 Directives
24506-----------------
24507
24508The Xtensa assembler supports a region-based directive syntax:
24509
24510         .begin DIRECTIVE [OPTIONS]
24511         ...
24512         .end DIRECTIVE
24513
24514   All the Xtensa-specific directives that apply to a region of code use
24515this syntax.
24516
24517   The directive applies to code between the '.begin' and the '.end'.
24518The state of the option after the '.end' reverts to what it was before
24519the '.begin'.  A nested '.begin'/'.end' region can further change the
24520state of the directive without having to be aware of its outer state.
24521For example, consider:
24522
24523         .begin no-transform
24524     L:  add a0, a1, a2
24525         .begin transform
24526     M:  add a0, a1, a2
24527         .end transform
24528     N:  add a0, a1, a2
24529         .end no-transform
24530
24531   The 'ADD' opcodes at 'L' and 'N' in the outer 'no-transform' region
24532both result in 'ADD' machine instructions, but the assembler selects an
24533'ADD.N' instruction for the 'ADD' at 'M' in the inner 'transform'
24534region.
24535
24536   The advantage of this style is that it works well inside macros which
24537can preserve the context of their callers.
24538
24539   The following directives are available:
24540* Menu:
24541
24542* Schedule Directive::         Enable instruction scheduling.
24543* Longcalls Directive::        Use Indirect Calls for Greater Range.
24544* Transform Directive::        Disable All Assembler Transformations.
24545* Literal Directive::          Intermix Literals with Instructions.
24546* Literal Position Directive:: Specify Inline Literal Pool Locations.
24547* Literal Prefix Directive::   Specify Literal Section Name Prefix.
24548* Absolute Literals Directive:: Control PC-Relative vs. Absolute Literals.
24549
24550
24551File: as.info,  Node: Schedule Directive,  Next: Longcalls Directive,  Up: Xtensa Directives
24552
245539.55.5.1 schedule
24554.................
24555
24556The 'schedule' directive is recognized only for compatibility with
24557Tensilica's assembler.
24558
24559         .begin [no-]schedule
24560         .end [no-]schedule
24561
24562   This directive is ignored and has no effect on 'as'.
24563
24564
24565File: as.info,  Node: Longcalls Directive,  Next: Transform Directive,  Prev: Schedule Directive,  Up: Xtensa Directives
24566
245679.55.5.2 longcalls
24568..................
24569
24570The 'longcalls' directive enables or disables function call relaxation.
24571*Note Function Call Relaxation: Xtensa Call Relaxation.
24572
24573         .begin [no-]longcalls
24574         .end [no-]longcalls
24575
24576   Call relaxation is disabled by default unless the '--longcalls'
24577command-line option is specified.  The 'longcalls' directive overrides
24578the default determined by the command-line options.
24579
24580
24581File: as.info,  Node: Transform Directive,  Next: Literal Directive,  Prev: Longcalls Directive,  Up: Xtensa Directives
24582
245839.55.5.3 transform
24584..................
24585
24586This directive enables or disables all assembler transformation,
24587including relaxation (*note Xtensa Relaxation: Xtensa Relaxation.) and
24588optimization (*note Xtensa Optimizations: Xtensa Optimizations.).
24589
24590         .begin [no-]transform
24591         .end [no-]transform
24592
24593   Transformations are enabled by default unless the '--no-transform'
24594option is used.  The 'transform' directive overrides the default
24595determined by the command-line options.  An underscore opcode prefix,
24596disabling transformation of that opcode, always takes precedence over
24597both directives and command-line flags.
24598
24599
24600File: as.info,  Node: Literal Directive,  Next: Literal Position Directive,  Prev: Transform Directive,  Up: Xtensa Directives
24601
246029.55.5.4 literal
24603................
24604
24605The '.literal' directive is used to define literal pool data, i.e.,
24606read-only 32-bit data accessed via 'L32R' instructions.
24607
24608         .literal LABEL, VALUE[, VALUE...]
24609
24610   This directive is similar to the standard '.word' directive, except
24611that the actual location of the literal data is determined by the
24612assembler and linker, not by the position of the '.literal' directive.
24613Using this directive gives the assembler freedom to locate the literal
24614data in the most appropriate place and possibly to combine identical
24615literals.  For example, the code:
24616
24617         entry sp, 40
24618         .literal .L1, sym
24619         l32r    a4, .L1
24620
24621   can be used to load a pointer to the symbol 'sym' into register 'a4'.
24622The value of 'sym' will not be placed between the 'ENTRY' and 'L32R'
24623instructions; instead, the assembler puts the data in a literal pool.
24624
24625   Literal pools are placed by default in separate literal sections;
24626however, when using the '--text-section-literals' option (*note
24627Command-line Options: Xtensa Options.), the literal pools for
24628PC-relative mode 'L32R' instructions are placed in the current
24629section.(1)  These text section literal pools are created automatically
24630before 'ENTRY' instructions and manually after '.literal_position'
24631directives (*note literal_position: Literal Position Directive.).  If
24632there are no preceding 'ENTRY' instructions, explicit
24633'.literal_position' directives must be used to place the text section
24634literal pools; otherwise, 'as' will report an error.
24635
24636   When literals are placed in separate sections, the literal section
24637names are derived from the names of the sections where the literals are
24638defined.  The base literal section names are '.literal' for PC-relative
24639mode 'L32R' instructions and '.lit4' for absolute mode 'L32R'
24640instructions (*note absolute-literals: Absolute Literals Directive.).
24641These base names are used for literals defined in the default '.text'
24642section.  For literals defined in other sections or within the scope of
24643a 'literal_prefix' directive (*note literal_prefix: Literal Prefix
24644Directive.), the following rules determine the literal section name:
24645
24646  1. If the current section is a member of a section group, the literal
24647     section name includes the group name as a suffix to the base
24648     '.literal' or '.lit4' name, with a period to separate the base name
24649     and group name.  The literal section is also made a member of the
24650     group.
24651
24652  2. If the current section name (or 'literal_prefix' value) begins with
24653     "'.gnu.linkonce.KIND.'", the literal section name is formed by
24654     replacing "'.KIND'" with the base '.literal' or '.lit4' name.  For
24655     example, for literals defined in a section named
24656     '.gnu.linkonce.t.func', the literal section will be
24657     '.gnu.linkonce.literal.func' or '.gnu.linkonce.lit4.func'.
24658
24659  3. If the current section name (or 'literal_prefix' value) ends with
24660     '.text', the literal section name is formed by replacing that
24661     suffix with the base '.literal' or '.lit4' name.  For example, for
24662     literals defined in a section named '.iram0.text', the literal
24663     section will be '.iram0.literal' or '.iram0.lit4'.
24664
24665  4. If none of the preceding conditions apply, the literal section name
24666     is formed by adding the base '.literal' or '.lit4' name as a suffix
24667     to the current section name (or 'literal_prefix' value).
24668
24669   ---------- Footnotes ----------
24670
24671   (1) Literals for the '.init' and '.fini' sections are always placed
24672in separate sections, even when '--text-section-literals' is enabled.
24673
24674
24675File: as.info,  Node: Literal Position Directive,  Next: Literal Prefix Directive,  Prev: Literal Directive,  Up: Xtensa Directives
24676
246779.55.5.5 literal_position
24678.........................
24679
24680When using '--text-section-literals' to place literals inline in the
24681section being assembled, the '.literal_position' directive can be used
24682to mark a potential location for a literal pool.
24683
24684         .literal_position
24685
24686   The '.literal_position' directive is ignored when the
24687'--text-section-literals' option is not used or when 'L32R' instructions
24688use the absolute addressing mode.
24689
24690   The assembler will automatically place text section literal pools
24691before 'ENTRY' instructions, so the '.literal_position' directive is
24692only needed to specify some other location for a literal pool.  You may
24693need to add an explicit jump instruction to skip over an inline literal
24694pool.
24695
24696   For example, an interrupt vector does not begin with an 'ENTRY'
24697instruction so the assembler will be unable to automatically find a good
24698place to put a literal pool.  Moreover, the code for the interrupt
24699vector must be at a specific starting address, so the literal pool
24700cannot come before the start of the code.  The literal pool for the
24701vector must be explicitly positioned in the middle of the vector (before
24702any uses of the literals, due to the negative offsets used by
24703PC-relative 'L32R' instructions).  The '.literal_position' directive can
24704be used to do this.  In the following code, the literal for 'M' will
24705automatically be aligned correctly and is placed after the unconditional
24706jump.
24707
24708         .global M
24709     code_start:
24710         j continue
24711         .literal_position
24712         .align 4
24713     continue:
24714         movi    a4, M
24715
24716
24717File: as.info,  Node: Literal Prefix Directive,  Next: Absolute Literals Directive,  Prev: Literal Position Directive,  Up: Xtensa Directives
24718
247199.55.5.6 literal_prefix
24720.......................
24721
24722The 'literal_prefix' directive allows you to override the default
24723literal section names, which are derived from the names of the sections
24724where the literals are defined.
24725
24726         .begin literal_prefix [NAME]
24727         .end literal_prefix
24728
24729   For literals defined within the delimited region, the literal section
24730names are derived from the NAME argument instead of the name of the
24731current section.  The rules used to derive the literal section names do
24732not change.  *Note literal: Literal Directive.  If the NAME argument is
24733omitted, the literal sections revert to the defaults.  This directive
24734has no effect when using the '--text-section-literals' option (*note
24735Command-line Options: Xtensa Options.).
24736
24737
24738File: as.info,  Node: Absolute Literals Directive,  Prev: Literal Prefix Directive,  Up: Xtensa Directives
24739
247409.55.5.7 absolute-literals
24741..........................
24742
24743The 'absolute-literals' and 'no-absolute-literals' directives control
24744the absolute vs. PC-relative mode for 'L32R' instructions.  These are
24745relevant only for Xtensa configurations that include the absolute
24746addressing option for 'L32R' instructions.
24747
24748         .begin [no-]absolute-literals
24749         .end [no-]absolute-literals
24750
24751   These directives do not change the 'L32R' mode--they only cause the
24752assembler to emit the appropriate kind of relocation for 'L32R'
24753instructions and to place the literal values in the appropriate section.
24754To change the 'L32R' mode, the program must write the 'LITBASE' special
24755register.  It is the programmer's responsibility to keep track of the
24756mode and indicate to the assembler which mode is used in each region of
24757code.
24758
24759   If the Xtensa configuration includes the absolute 'L32R' addressing
24760option, the default is to assume absolute 'L32R' addressing unless the
24761'--no-absolute-literals' command-line option is specified.  Otherwise,
24762the default is to assume PC-relative 'L32R' addressing.  The
24763'absolute-literals' directive can then be used to override the default
24764determined by the command-line options.
24765
24766
24767File: as.info,  Node: Z80-Dependent,  Next: Z8000-Dependent,  Prev: Xtensa-Dependent,  Up: Machine Dependencies
24768
247699.56 Z80 Dependent Features
24770===========================
24771
24772* Menu:
24773
24774* Z80 Options::              Options
24775* Z80 Syntax::               Syntax
24776* Z80 Floating Point::       Floating Point
24777* Z80 Directives::           Z80 Machine Directives
24778* Z80 Opcodes::              Opcodes
24779
24780
24781File: as.info,  Node: Z80 Options,  Next: Z80 Syntax,  Up: Z80-Dependent
24782
247839.56.1 Command-line Options
24784---------------------------
24785
24786'-march=CPU[-EXT...][+EXT...]'
24787     This option specifies the target processor.  The assembler will
24788     issue an error message if an attempt is made to assemble an
24789     instruction which will not execute on the target processor.  The
24790     following processor names are recognized: 'z80', 'z180', 'ez80',
24791     'gbz80', 'z80n', 'r800'.  In addition to the basic instruction set,
24792     the assembler can be told to accept some extention mnemonics.  For
24793     example, '-march=z180+sli+infc' extends Z180 with SLI instructions
24794     and IN F,(C).  The following extentions are currently supported:
24795     'full' (all known instructions), 'adl' (ADL CPU mode by default,
24796     eZ80 only), 'sli' (instruction known as SLI, SLL or SL1), 'xyhl'
24797     (instructions with halves of index registers: IXL, IXH, IYL, IYH),
24798     'xdcb' (instructions like ROTOP (II+D),R and BITOP N,(II+D),R),
24799     'infc' (instruction IN F,(C) or IN (C)), 'outc0' (instruction OUT
24800     (C),0).  Note that rather than extending a basic instruction set,
24801     the extention mnemonics starting with '-' revoke the respective
24802     functionality: '-march=z80-full+xyhl' first removes all default
24803     extentions and adds support for index registers halves only.
24804
24805     If this option is not specified then '-march=z80+xyhl+infc' is
24806     assumed.
24807
24808'-local-prefix=PREFIX'
24809     Mark all labels with specified prefix as local.  But such label can
24810     be marked global explicitly in the code.  This option do not change
24811     default local label prefix '.L', it is just adds new one.
24812
24813'-colonless'
24814     Accept colonless labels.  All symbols at line begin are treated as
24815     labels.
24816
24817'-sdcc'
24818     Accept assembler code produced by SDCC.
24819
24820'-fp-s=FORMAT'
24821     Single precision floating point numbers format.  Default: ieee754
24822     (32 bit).
24823
24824'-fp-d=FORMAT'
24825     Double precision floating point numbers format.  Default: ieee754
24826     (64 bit).
24827
24828   Floating point numbers formats.
24829'ieee754'
24830     Single or double precision IEEE754 compatible format.
24831
24832'half'
24833     Half precision IEEE754 compatible format (16 bits).
24834
24835'single'
24836     Single precision IEEE754 compatible format (32 bits).
24837
24838'double'
24839     Double precision IEEE754 compatible format (64 bits).
24840
24841'zeda32'
24842     32 bit floating point format from z80float library by Zeda.
24843
24844'math48'
24845     48 bit floating point format from Math48 package by Anders
24846     Hejlsberg.
24847
24848
24849File: as.info,  Node: Z80 Syntax,  Next: Z80 Floating Point,  Prev: Z80 Options,  Up: Z80-Dependent
24850
248519.56.2 Syntax
24852-------------
24853
24854The assembler syntax closely follows the 'Z80 family CPU User Manual' by
24855Zilog.  In expressions a single '=' may be used as "is equal to"
24856comparison operator.
24857
24858   Suffices can be used to indicate the radix of integer constants; 'H'
24859or 'h' for hexadecimal, 'D' or 'd' for decimal, 'Q', 'O', 'q' or 'o' for
24860octal, and 'B' for binary.
24861
24862   The suffix 'b' denotes a backreference to local label.
24863
24864* Menu:
24865
24866* Z80-Chars::                Special Characters
24867* Z80-Regs::                 Register Names
24868* Z80-Case::                 Case Sensitivity
24869* Z80-Labels::               Labels
24870
24871
24872File: as.info,  Node: Z80-Chars,  Next: Z80-Regs,  Up: Z80 Syntax
24873
248749.56.2.1 Special Characters
24875...........................
24876
24877The semicolon ';' is the line comment character;
24878
24879   If a '#' appears as the first character of a line then the whole line
24880is treated as a comment, but in this case the line could also be a
24881logical line number directive (*note Comments::) or a preprocessor
24882control command (*note Preprocessing::).
24883
24884   The Z80 assembler does not support a line separator character.
24885
24886   The dollar sign '$' can be used as a prefix for hexadecimal numbers
24887and as a symbol denoting the current location counter.
24888
24889   A backslash '\' is an ordinary character for the Z80 assembler.
24890
24891   The single quote ''' must be followed by a closing quote.  If there
24892is one character in between, it is a character constant, otherwise it is
24893a string constant.
24894
24895
24896File: as.info,  Node: Z80-Regs,  Next: Z80-Case,  Prev: Z80-Chars,  Up: Z80 Syntax
24897
248989.56.2.2 Register Names
24899.......................
24900
24901The registers are referred to with the letters assigned to them by
24902Zilog.  In addition 'as' recognizes 'ixl' and 'ixh' as the least and
24903most significant octet in 'ix', and similarly 'iyl' and 'iyh' as parts
24904of 'iy'.
24905
24906
24907File: as.info,  Node: Z80-Case,  Next: Z80-Labels,  Prev: Z80-Regs,  Up: Z80 Syntax
24908
249099.56.2.3 Case Sensitivity
24910.........................
24911
24912Upper and lower case are equivalent in register names, opcodes,
24913condition codes and assembler directives.  The case of letters is
24914significant in labels and symbol names.  The case is also important to
24915distinguish the suffix 'b' for a backward reference to a local label
24916from the suffix 'B' for a number in binary notation.
24917
24918
24919File: as.info,  Node: Z80-Labels,  Prev: Z80-Case,  Up: Z80 Syntax
24920
249219.56.2.4 Labels
24922...............
24923
24924Labels started by '.L' acts as local labels.  You may specify custom
24925local label prefix by '-local-prefix' command-line option.  Dollar,
24926forward and backward local labels are supported.  By default, all labels
24927are followed by colon.  Legacy code with colonless labels can be built
24928with '-colonless' command-line option specified.  In this case all
24929tokens at line begin are treated as labels.
24930
24931
24932File: as.info,  Node: Z80 Floating Point,  Next: Z80 Directives,  Prev: Z80 Syntax,  Up: Z80-Dependent
24933
249349.56.3 Floating Point
24935---------------------
24936
24937Floating-point numbers of following types are supported:
24938
24939'ieee754'
24940     Supported half, single and double precision IEEE754 compatible
24941     numbers.
24942
24943'zeda32'
24944     32 bit floating point numbers from z80float library by Zeda.
24945
24946'math48'
24947     48 bit floating point numbers from Math48 package by Anders
24948     Hejlsberg.
24949
24950
24951File: as.info,  Node: Z80 Directives,  Next: Z80 Opcodes,  Prev: Z80 Floating Point,  Up: Z80-Dependent
24952
249539.56.4 Z80 Assembler Directives
24954-------------------------------
24955
24956'as' for the Z80 supports some additional directives for compatibility
24957with other assemblers.
24958
24959   These are the additional directives in 'as' for the Z80:
24960
24961'.assume ADL = EXPRESSION'
24962     Set ADL status for eZ80.  Non-zero value enable compilation in ADL
24963     mode else used Z80 mode.  ADL and Z80 mode produces incompatible
24964     object code.  Mixing both of them within one binary may lead
24965     problems with disassembler.
24966
24967'db EXPRESSION|STRING[,EXPRESSION|STRING...]'
24968'defb EXPRESSION|STRING[,EXPRESSION|STRING...]'
24969'defm STRING[,STRING...]'
24970     For each STRING the characters are copied to the object file, for
24971     each other EXPRESSION the value is stored in one byte.  A warning
24972     is issued in case of an overflow.  Backslash symbol in the strings
24973     is generic symbol, it cannot be used as escape character.  *Note
24974     '.ascii': Ascii.
24975
24976'dw EXPRESSION[,EXPRESSION...]'
24977'defw EXPRESSION[,EXPRESSION...]'
24978     For each EXPRESSION the value is stored in two bytes, ignoring
24979     overflow.
24980
24981'd24 EXPRESSION[,EXPRESSION...]'
24982'def24 EXPRESSION[,EXPRESSION...]'
24983     For each EXPRESSION the value is stored in three bytes, ignoring
24984     overflow.
24985
24986'd32 EXPRESSION[,EXPRESSION...]'
24987'def32 EXPRESSION[,EXPRESSION...]'
24988     For each EXPRESSION the value is stored in four bytes, ignoring
24989     overflow.
24990
24991'ds COUNT[, VALUE]'
24992'defs COUNT[, VALUE]'
24993     Fill COUNT bytes in the object file with VALUE, if VALUE is omitted
24994     it defaults to zero.
24995
24996'SYMBOL defl EXPRESSION'
24997     The 'defl' directive is like '.set' but with different syntax.
24998     *Note '.set': Set.  It set the value of SYMBOL to EXPRESSION.
24999     Symbols defined with 'defl' are not protected from redefinition.
25000
25001'SYMBOL equ EXPRESSION'
25002     The 'equ' directive is like '.equiv' but with different syntax.
25003     *Note '.equiv': Equiv.  It set the value of SYMBOL to EXPRESSION.
25004     It is an error if SYMBOL is already defined.  Symbols defined with
25005     'equ' are not protected from redefinition.
25006
25007'psect NAME'
25008     A synonym for '.section', no second argument should be given.
25009     *Note '.section': Section.
25010
25011'xdef SYMBOL'
25012     A synonym for '.global', make SYMBOL is visible to linker.  *Note
25013     '.global': Global.
25014
25015'xref NAME'
25016     A synonym for '.extern' (*note '.extern': Extern.).
25017
25018
25019File: as.info,  Node: Z80 Opcodes,  Prev: Z80 Directives,  Up: Z80-Dependent
25020
250219.56.5 Opcodes
25022--------------
25023
25024In line with common practice, Z80 mnemonics are used for the Z80, Z80N,
25025Z180, eZ80, Ascii R800 and the GameBoy Z80.
25026
25027   In many instructions it is possible to use one of the half index
25028registers ('ixl','ixh','iyl','iyh') in stead of an 8-bit general purpose
25029register.  This yields instructions that are documented on the eZ80 and
25030the R800, undocumented on the Z80 and unsupported on the Z180.
25031Similarly 'in f,(c)' is documented on the R800, undocumented on the Z80
25032and unsupported on the Z180 and the eZ80.
25033
25034   The assembler also supports the following undocumented
25035Z80-instructions, that have not been adopted in any other instruction
25036set:
25037'out (c),0'
25038     Sends zero to the port pointed to by register 'C'.
25039
25040'sli M'
25041     Equivalent to 'M = (M<<1)+1', the operand M can be any operand that
25042     is valid for 'sla'.  One can use 'sll' as a synonym for 'sli'.
25043
25044'OP (ix+D), R'
25045     This is equivalent to
25046
25047          ld R, (ix+D)
25048          OP R
25049          ld (ix+D), R
25050
25051     The operation 'OP' may be any of 'res B,', 'set B,', 'rl', 'rlc',
25052     'rr', 'rrc', 'sla', 'sli', 'sra' and 'srl', and the register 'R'
25053     may be any of 'a', 'b', 'c', 'd', 'e', 'h' and 'l'.
25054
25055'OP (iy+D), R'
25056     As above, but with 'iy' instead of 'ix'.
25057
25058   The web site at <http://www.z80.info> is a good starting place to
25059find more information on programming the Z80.
25060
25061   You may enable or disable any of these instructions for any target
25062CPU even this instruction is not supported by any real CPU of this type.
25063Useful for custom CPU cores.
25064
25065
25066File: as.info,  Node: Z8000-Dependent,  Prev: Z80-Dependent,  Up: Machine Dependencies
25067
250689.57 Z8000 Dependent Features
25069=============================
25070
25071The Z8000 as supports both members of the Z8000 family: the unsegmented
25072Z8002, with 16 bit addresses, and the segmented Z8001 with 24 bit
25073addresses.
25074
25075   When the assembler is in unsegmented mode (specified with the
25076'unsegm' directive), an address takes up one word (16 bit) sized
25077register.  When the assembler is in segmented mode (specified with the
25078'segm' directive), a 24-bit address takes up a long (32 bit) register.
25079*Note Assembler Directives for the Z8000: Z8000 Directives, for a list
25080of other Z8000 specific assembler directives.
25081
25082* Menu:
25083
25084* Z8000 Options::               Command-line options for the Z8000
25085* Z8000 Syntax::                Assembler syntax for the Z8000
25086* Z8000 Directives::            Special directives for the Z8000
25087* Z8000 Opcodes::               Opcodes
25088
25089
25090File: as.info,  Node: Z8000 Options,  Next: Z8000 Syntax,  Up: Z8000-Dependent
25091
250929.57.1 Options
25093--------------
25094
25095'-z8001'
25096     Generate segmented code by default.
25097
25098'-z8002'
25099     Generate unsegmented code by default.
25100
25101
25102File: as.info,  Node: Z8000 Syntax,  Next: Z8000 Directives,  Prev: Z8000 Options,  Up: Z8000-Dependent
25103
251049.57.2 Syntax
25105-------------
25106
25107* Menu:
25108
25109* Z8000-Chars::                Special Characters
25110* Z8000-Regs::                 Register Names
25111* Z8000-Addressing::           Addressing Modes
25112
25113
25114File: as.info,  Node: Z8000-Chars,  Next: Z8000-Regs,  Up: Z8000 Syntax
25115
251169.57.2.1 Special Characters
25117...........................
25118
25119'!' is the line comment character.
25120
25121   If a '#' appears as the first character of a line then the whole line
25122is treated as a comment, but in this case the line could also be a
25123logical line number directive (*note Comments::) or a preprocessor
25124control command (*note Preprocessing::).
25125
25126   You can use ';' instead of a newline to separate statements.
25127
25128
25129File: as.info,  Node: Z8000-Regs,  Next: Z8000-Addressing,  Prev: Z8000-Chars,  Up: Z8000 Syntax
25130
251319.57.2.2 Register Names
25132.......................
25133
25134The Z8000 has sixteen 16 bit registers, numbered 0 to 15.  You can refer
25135to different sized groups of registers by register number, with the
25136prefix 'r' for 16 bit registers, 'rr' for 32 bit registers and 'rq' for
2513764 bit registers.  You can also refer to the contents of the first eight
25138(of the sixteen 16 bit registers) by bytes.  They are named 'rlN' and
25139'rhN'.
25140
25141_byte registers_
25142     rl0 rh0 rl1 rh1 rl2 rh2 rl3 rh3
25143     rl4 rh4 rl5 rh5 rl6 rh6 rl7 rh7
25144
25145_word registers_
25146     r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15
25147
25148_long word registers_
25149     rr0 rr2 rr4 rr6 rr8 rr10 rr12 rr14
25150
25151_quad word registers_
25152     rq0 rq4 rq8 rq12
25153
25154
25155File: as.info,  Node: Z8000-Addressing,  Prev: Z8000-Regs,  Up: Z8000 Syntax
25156
251579.57.2.3 Addressing Modes
25158.........................
25159
25160as understands the following addressing modes for the Z8000:
25161
25162'rlN'
25163'rhN'
25164'rN'
25165'rrN'
25166'rqN'
25167     Register direct: 8bit, 16bit, 32bit, and 64bit registers.
25168
25169'@rN'
25170'@rrN'
25171     Indirect register: @rrN in segmented mode, @rN in unsegmented mode.
25172
25173'ADDR'
25174     Direct: the 16 bit or 24 bit address (depending on whether the
25175     assembler is in segmented or unsegmented mode) of the operand is in
25176     the instruction.
25177
25178'address(rN)'
25179     Indexed: the 16 or 24 bit address is added to the 16 bit register
25180     to produce the final address in memory of the operand.
25181
25182'rN(#IMM)'
25183'rrN(#IMM)'
25184     Base Address: the 16 or 24 bit register is added to the 16 bit sign
25185     extended immediate displacement to produce the final address in
25186     memory of the operand.
25187
25188'rN(rM)'
25189'rrN(rM)'
25190     Base Index: the 16 or 24 bit register rN or rrN is added to the
25191     sign extended 16 bit index register rM to produce the final address
25192     in memory of the operand.
25193
25194'#XX'
25195     Immediate data XX.
25196
25197
25198File: as.info,  Node: Z8000 Directives,  Next: Z8000 Opcodes,  Prev: Z8000 Syntax,  Up: Z8000-Dependent
25199
252009.57.3 Assembler Directives for the Z8000
25201-----------------------------------------
25202
25203The Z8000 port of as includes additional assembler directives, for
25204compatibility with other Z8000 assemblers.  These do not begin with '.'
25205(unlike the ordinary as directives).
25206
25207'segm'
25208'.z8001'
25209     Generate code for the segmented Z8001.
25210
25211'unsegm'
25212'.z8002'
25213     Generate code for the unsegmented Z8002.
25214
25215'name'
25216     Synonym for '.file'
25217
25218'global'
25219     Synonym for '.global'
25220
25221'wval'
25222     Synonym for '.word'
25223
25224'lval'
25225     Synonym for '.long'
25226
25227'bval'
25228     Synonym for '.byte'
25229
25230'sval'
25231     Assemble a string.  'sval' expects one string literal, delimited by
25232     single quotes.  It assembles each byte of the string into
25233     consecutive addresses.  You can use the escape sequence '%XX'
25234     (where XX represents a two-digit hexadecimal number) to represent
25235     the character whose ASCII value is XX.  Use this feature to
25236     describe single quote and other characters that may not appear in
25237     string literals as themselves.  For example, the C statement 'char *a = "he said \"it's 50% off\"";'
25238     is represented in Z8000 assembly language (shown with the assembler
25239     output in hex at the left) as
25240
25241          68652073    sval    'he said %22it%27s 50%25 off%22%00'
25242          61696420
25243          22697427
25244          73203530
25245          25206F66
25246          662200
25247
25248'rsect'
25249     synonym for '.section'
25250
25251'block'
25252     synonym for '.space'
25253
25254'even'
25255     special case of '.align'; aligns output to even byte boundary.
25256
25257
25258File: as.info,  Node: Z8000 Opcodes,  Prev: Z8000 Directives,  Up: Z8000-Dependent
25259
252609.57.4 Opcodes
25261--------------
25262
25263For detailed information on the Z8000 machine instruction set, see
25264'Z8000 Technical Manual'.
25265
25266   The following table summarizes the opcodes and their arguments:
25267
25268                 rs   16 bit source register
25269                 rd   16 bit destination register
25270                 rbs   8 bit source register
25271                 rbd   8 bit destination register
25272                 rrs   32 bit source register
25273                 rrd   32 bit destination register
25274                 rqs   64 bit source register
25275                 rqd   64 bit destination register
25276                 addr 16/24 bit address
25277                 imm  immediate data
25278
25279     adc rd,rs               clrb addr               cpsir @rd,@rs,rr,cc
25280     adcb rbd,rbs            clrb addr(rd)           cpsirb @rd,@rs,rr,cc
25281     add rd,@rs              clrb rbd                dab rbd
25282     add rd,addr             com @rd                 dbjnz rbd,disp7
25283     add rd,addr(rs)         com addr                dec @rd,imm4m1
25284     add rd,imm16            com addr(rd)            dec addr(rd),imm4m1
25285     add rd,rs               com rd                  dec addr,imm4m1
25286     addb rbd,@rs            comb @rd                dec rd,imm4m1
25287     addb rbd,addr           comb addr               decb @rd,imm4m1
25288     addb rbd,addr(rs)       comb addr(rd)           decb addr(rd),imm4m1
25289     addb rbd,imm8           comb rbd                decb addr,imm4m1
25290     addb rbd,rbs            comflg flags            decb rbd,imm4m1
25291     addl rrd,@rs            cp @rd,imm16            di i2
25292     addl rrd,addr           cp addr(rd),imm16       div rrd,@rs
25293     addl rrd,addr(rs)       cp addr,imm16           div rrd,addr
25294     addl rrd,imm32          cp rd,@rs               div rrd,addr(rs)
25295     addl rrd,rrs            cp rd,addr              div rrd,imm16
25296     and rd,@rs              cp rd,addr(rs)          div rrd,rs
25297     and rd,addr             cp rd,imm16             divl rqd,@rs
25298     and rd,addr(rs)         cp rd,rs                divl rqd,addr
25299     and rd,imm16            cpb @rd,imm8            divl rqd,addr(rs)
25300     and rd,rs               cpb addr(rd),imm8       divl rqd,imm32
25301     andb rbd,@rs            cpb addr,imm8           divl rqd,rrs
25302     andb rbd,addr           cpb rbd,@rs             djnz rd,disp7
25303     andb rbd,addr(rs)       cpb rbd,addr            ei i2
25304     andb rbd,imm8           cpb rbd,addr(rs)        ex rd,@rs
25305     andb rbd,rbs            cpb rbd,imm8            ex rd,addr
25306     bit @rd,imm4            cpb rbd,rbs             ex rd,addr(rs)
25307     bit addr(rd),imm4       cpd rd,@rs,rr,cc        ex rd,rs
25308     bit addr,imm4           cpdb rbd,@rs,rr,cc      exb rbd,@rs
25309     bit rd,imm4             cpdr rd,@rs,rr,cc       exb rbd,addr
25310     bit rd,rs               cpdrb rbd,@rs,rr,cc     exb rbd,addr(rs)
25311     bitb @rd,imm4           cpi rd,@rs,rr,cc        exb rbd,rbs
25312     bitb addr(rd),imm4      cpib rbd,@rs,rr,cc      ext0e imm8
25313     bitb addr,imm4          cpir rd,@rs,rr,cc       ext0f imm8
25314     bitb rbd,imm4           cpirb rbd,@rs,rr,cc     ext8e imm8
25315     bitb rbd,rs             cpl rrd,@rs             ext8f imm8
25316     bpt                     cpl rrd,addr            exts rrd
25317     call @rd                cpl rrd,addr(rs)        extsb rd
25318     call addr               cpl rrd,imm32           extsl rqd
25319     call addr(rd)           cpl rrd,rrs             halt
25320     calr disp12             cpsd @rd,@rs,rr,cc      in rd,@rs
25321     clr @rd                 cpsdb @rd,@rs,rr,cc     in rd,imm16
25322     clr addr                cpsdr @rd,@rs,rr,cc     inb rbd,@rs
25323     clr addr(rd)            cpsdrb @rd,@rs,rr,cc    inb rbd,imm16
25324     clr rd                  cpsi @rd,@rs,rr,cc      inc @rd,imm4m1
25325     clrb @rd                cpsib @rd,@rs,rr,cc     inc addr(rd),imm4m1
25326     inc addr,imm4m1         ldb rbd,rs(rx)          mult rrd,addr(rs)
25327     inc rd,imm4m1           ldb rd(imm16),rbs       mult rrd,imm16
25328     incb @rd,imm4m1         ldb rd(rx),rbs          mult rrd,rs
25329     incb addr(rd),imm4m1    ldctl ctrl,rs           multl rqd,@rs
25330     incb addr,imm4m1        ldctl rd,ctrl           multl rqd,addr
25331     incb rbd,imm4m1         ldd @rs,@rd,rr          multl rqd,addr(rs)
25332     ind @rd,@rs,ra          lddb @rs,@rd,rr         multl rqd,imm32
25333     indb @rd,@rs,rba        lddr @rs,@rd,rr         multl rqd,rrs
25334     inib @rd,@rs,ra         lddrb @rs,@rd,rr        neg @rd
25335     inibr @rd,@rs,ra        ldi @rd,@rs,rr          neg addr
25336     iret                    ldib @rd,@rs,rr         neg addr(rd)
25337     jp cc,@rd               ldir @rd,@rs,rr         neg rd
25338     jp cc,addr              ldirb @rd,@rs,rr        negb @rd
25339     jp cc,addr(rd)          ldk rd,imm4             negb addr
25340     jr cc,disp8             ldl @rd,rrs             negb addr(rd)
25341     ld @rd,imm16            ldl addr(rd),rrs        negb rbd
25342     ld @rd,rs               ldl addr,rrs            nop
25343     ld addr(rd),imm16       ldl rd(imm16),rrs       or rd,@rs
25344     ld addr(rd),rs          ldl rd(rx),rrs          or rd,addr
25345     ld addr,imm16           ldl rrd,@rs             or rd,addr(rs)
25346     ld addr,rs              ldl rrd,addr            or rd,imm16
25347     ld rd(imm16),rs         ldl rrd,addr(rs)        or rd,rs
25348     ld rd(rx),rs            ldl rrd,imm32           orb rbd,@rs
25349     ld rd,@rs               ldl rrd,rrs             orb rbd,addr
25350     ld rd,addr              ldl rrd,rs(imm16)       orb rbd,addr(rs)
25351     ld rd,addr(rs)          ldl rrd,rs(rx)          orb rbd,imm8
25352     ld rd,imm16             ldm @rd,rs,n            orb rbd,rbs
25353     ld rd,rs                ldm addr(rd),rs,n       out @rd,rs
25354     ld rd,rs(imm16)         ldm addr,rs,n           out imm16,rs
25355     ld rd,rs(rx)            ldm rd,@rs,n            outb @rd,rbs
25356     lda rd,addr             ldm rd,addr(rs),n       outb imm16,rbs
25357     lda rd,addr(rs)         ldm rd,addr,n           outd @rd,@rs,ra
25358     lda rd,rs(imm16)        ldps @rs                outdb @rd,@rs,rba
25359     lda rd,rs(rx)           ldps addr               outib @rd,@rs,ra
25360     ldar rd,disp16          ldps addr(rs)           outibr @rd,@rs,ra
25361     ldb @rd,imm8            ldr disp16,rs           pop @rd,@rs
25362     ldb @rd,rbs             ldr rd,disp16           pop addr(rd),@rs
25363     ldb addr(rd),imm8       ldrb disp16,rbs         pop addr,@rs
25364     ldb addr(rd),rbs        ldrb rbd,disp16         pop rd,@rs
25365     ldb addr,imm8           ldrl disp16,rrs         popl @rd,@rs
25366     ldb addr,rbs            ldrl rrd,disp16         popl addr(rd),@rs
25367     ldb rbd,@rs             mbit                    popl addr,@rs
25368     ldb rbd,addr            mreq rd                 popl rrd,@rs
25369     ldb rbd,addr(rs)        mres                    push @rd,@rs
25370     ldb rbd,imm8            mset                    push @rd,addr
25371     ldb rbd,rbs             mult rrd,@rs            push @rd,addr(rs)
25372     ldb rbd,rs(imm16)       mult rrd,addr           push @rd,imm16
25373     push @rd,rs             set addr,imm4           subl rrd,imm32
25374     pushl @rd,@rs           set rd,imm4             subl rrd,rrs
25375     pushl @rd,addr          set rd,rs               tcc cc,rd
25376     pushl @rd,addr(rs)      setb @rd,imm4           tccb cc,rbd
25377     pushl @rd,rrs           setb addr(rd),imm4      test @rd
25378     res @rd,imm4            setb addr,imm4          test addr
25379     res addr(rd),imm4       setb rbd,imm4           test addr(rd)
25380     res addr,imm4           setb rbd,rs             test rd
25381     res rd,imm4             setflg imm4             testb @rd
25382     res rd,rs               sinb rbd,imm16          testb addr
25383     resb @rd,imm4           sinb rd,imm16           testb addr(rd)
25384     resb addr(rd),imm4      sind @rd,@rs,ra         testb rbd
25385     resb addr,imm4          sindb @rd,@rs,rba       testl @rd
25386     resb rbd,imm4           sinib @rd,@rs,ra        testl addr
25387     resb rbd,rs             sinibr @rd,@rs,ra       testl addr(rd)
25388     resflg imm4             sla rd,imm8             testl rrd
25389     ret cc                  slab rbd,imm8           trdb @rd,@rs,rba
25390     rl rd,imm1or2           slal rrd,imm8           trdrb @rd,@rs,rba
25391     rlb rbd,imm1or2         sll rd,imm8             trib @rd,@rs,rbr
25392     rlc rd,imm1or2          sllb rbd,imm8           trirb @rd,@rs,rbr
25393     rlcb rbd,imm1or2        slll rrd,imm8           trtdrb @ra,@rb,rbr
25394     rldb rbb,rba            sout imm16,rs           trtib @ra,@rb,rr
25395     rr rd,imm1or2           soutb imm16,rbs         trtirb @ra,@rb,rbr
25396     rrb rbd,imm1or2         soutd @rd,@rs,ra        trtrb @ra,@rb,rbr
25397     rrc rd,imm1or2          soutdb @rd,@rs,rba      tset @rd
25398     rrcb rbd,imm1or2        soutib @rd,@rs,ra       tset addr
25399     rrdb rbb,rba            soutibr @rd,@rs,ra      tset addr(rd)
25400     rsvd36                  sra rd,imm8             tset rd
25401     rsvd38                  srab rbd,imm8           tsetb @rd
25402     rsvd78                  sral rrd,imm8           tsetb addr
25403     rsvd7e                  srl rd,imm8             tsetb addr(rd)
25404     rsvd9d                  srlb rbd,imm8           tsetb rbd
25405     rsvd9f                  srll rrd,imm8           xor rd,@rs
25406     rsvdb9                  sub rd,@rs              xor rd,addr
25407     rsvdbf                  sub rd,addr             xor rd,addr(rs)
25408     sbc rd,rs               sub rd,addr(rs)         xor rd,imm16
25409     sbcb rbd,rbs            sub rd,imm16            xor rd,rs
25410     sc imm8                 sub rd,rs               xorb rbd,@rs
25411     sda rd,rs               subb rbd,@rs            xorb rbd,addr
25412     sdab rbd,rs             subb rbd,addr           xorb rbd,addr(rs)
25413     sdal rrd,rs             subb rbd,addr(rs)       xorb rbd,imm8
25414     sdl rd,rs               subb rbd,imm8           xorb rbd,rbs
25415     sdlb rbd,rs             subb rbd,rbs            xorb rbd,rbs
25416     sdll rrd,rs             subl rrd,@rs
25417     set @rd,imm4            subl rrd,addr
25418     set addr(rd),imm4       subl rrd,addr(rs)
25419
25420
25421File: as.info,  Node: Reporting Bugs,  Next: Acknowledgements,  Prev: Machine Dependencies,  Up: Top
25422
2542310 Reporting Bugs
25424*****************
25425
25426Your bug reports play an essential role in making 'as' reliable.
25427
25428   Reporting a bug may help you by bringing a solution to your problem,
25429or it may not.  But in any case the principal function of a bug report
25430is to help the entire community by making the next version of 'as' work
25431better.  Bug reports are your contribution to the maintenance of 'as'.
25432
25433   In order for a bug report to serve its purpose, you must include the
25434information that enables us to fix the bug.
25435
25436* Menu:
25437
25438* Bug Criteria::                Have you found a bug?
25439* Bug Reporting::               How to report bugs
25440
25441
25442File: as.info,  Node: Bug Criteria,  Next: Bug Reporting,  Up: Reporting Bugs
25443
2544410.1 Have You Found a Bug?
25445==========================
25446
25447If you are not sure whether you have found a bug, here are some
25448guidelines:
25449
25450   * If the assembler gets a fatal signal, for any input whatever, that
25451     is a 'as' bug.  Reliable assemblers never crash.
25452
25453   * If 'as' produces an error message for valid input, that is a bug.
25454
25455   * If 'as' does not produce an error message for invalid input, that
25456     is a bug.  However, you should note that your idea of "invalid
25457     input" might be our idea of "an extension" or "support for
25458     traditional practice".
25459
25460   * If you are an experienced user of assemblers, your suggestions for
25461     improvement of 'as' are welcome in any case.
25462
25463
25464File: as.info,  Node: Bug Reporting,  Prev: Bug Criteria,  Up: Reporting Bugs
25465
2546610.2 How to Report Bugs
25467=======================
25468
25469A number of companies and individuals offer support for GNU products.
25470If you obtained 'as' from a support organization, we recommend you
25471contact that organization first.
25472
25473   You can find contact information for many support companies and
25474individuals in the file 'etc/SERVICE' in the GNU Emacs distribution.
25475
25476   In any event, we also recommend that you send bug reports for 'as' to
25477<https://bugs.linaro.org/>.
25478
25479   The fundamental principle of reporting bugs usefully is this: *report
25480all the facts*.  If you are not sure whether to state a fact or leave it
25481out, state it!
25482
25483   Often people omit facts because they think they know what causes the
25484problem and assume that some details do not matter.  Thus, you might
25485assume that the name of a symbol you use in an example does not matter.
25486Well, probably it does not, but one cannot be sure.  Perhaps the bug is
25487a stray memory reference which happens to fetch from the location where
25488that name is stored in memory; perhaps, if the name were different, the
25489contents of that location would fool the assembler into doing the right
25490thing despite the bug.  Play it safe and give a specific, complete
25491example.  That is the easiest thing for you to do, and the most helpful.
25492
25493   Keep in mind that the purpose of a bug report is to enable us to fix
25494the bug if it is new to us.  Therefore, always write your bug reports on
25495the assumption that the bug has not been reported previously.
25496
25497   Sometimes people give a few sketchy facts and ask, "Does this ring a
25498bell?"  This cannot help us fix a bug, so it is basically useless.  We
25499respond by asking for enough details to enable us to investigate.  You
25500might as well expedite matters by sending them to begin with.
25501
25502   To enable us to fix the bug, you should include all these things:
25503
25504   * The version of 'as'.  'as' announces it if you start it with the
25505     '--version' argument.
25506
25507     Without this, we will not know whether there is any point in
25508     looking for the bug in the current version of 'as'.
25509
25510   * Any patches you may have applied to the 'as' source.
25511
25512   * The type of machine you are using, and the operating system name
25513     and version number.
25514
25515   * What compiler (and its version) was used to compile 'as'--e.g.
25516     "'gcc-2.7'".
25517
25518   * The command arguments you gave the assembler to assemble your
25519     example and observe the bug.  To guarantee you will not omit
25520     something important, list them all.  A copy of the Makefile (or the
25521     output from make) is sufficient.
25522
25523     If we were to try to guess the arguments, we would probably guess
25524     wrong and then we might not encounter the bug.
25525
25526   * A complete input file that will reproduce the bug.  If the bug is
25527     observed when the assembler is invoked via a compiler, send the
25528     assembler source, not the high level language source.  Most
25529     compilers will produce the assembler source when run with the '-S'
25530     option.  If you are using 'gcc', use the options '-v --save-temps';
25531     this will save the assembler source in a file with an extension of
25532     '.s', and also show you exactly how 'as' is being run.
25533
25534   * A description of what behavior you observe that you believe is
25535     incorrect.  For example, "It gets a fatal signal."
25536
25537     Of course, if the bug is that 'as' gets a fatal signal, then we
25538     will certainly notice it.  But if the bug is incorrect output, we
25539     might not notice unless it is glaringly wrong.  You might as well
25540     not give us a chance to make a mistake.
25541
25542     Even if the problem you experience is a fatal signal, you should
25543     still say so explicitly.  Suppose something strange is going on,
25544     such as, your copy of 'as' is out of sync, or you have encountered
25545     a bug in the C library on your system.  (This has happened!)  Your
25546     copy might crash and ours would not.  If you told us to expect a
25547     crash, then when ours fails to crash, we would know that the bug
25548     was not happening for us.  If you had not told us to expect a
25549     crash, then we would not be able to draw any conclusion from our
25550     observations.
25551
25552   * If you wish to suggest changes to the 'as' source, send us context
25553     diffs, as generated by 'diff' with the '-u', '-c', or '-p' option.
25554     Always send diffs from the old file to the new file.  If you even
25555     discuss something in the 'as' source, refer to it by context, not
25556     by line number.
25557
25558     The line numbers in our development sources will not match those in
25559     your sources.  Your line numbers would convey no useful information
25560     to us.
25561
25562   Here are some things that are not necessary:
25563
25564   * A description of the envelope of the bug.
25565
25566     Often people who encounter a bug spend a lot of time investigating
25567     which changes to the input file will make the bug go away and which
25568     changes will not affect it.
25569
25570     This is often time consuming and not very useful, because the way
25571     we will find the bug is by running a single example under the
25572     debugger with breakpoints, not by pure deduction from a series of
25573     examples.  We recommend that you save your time for something else.
25574
25575     Of course, if you can find a simpler example to report _instead_ of
25576     the original one, that is a convenience for us.  Errors in the
25577     output will be easier to spot, running under the debugger will take
25578     less time, and so on.
25579
25580     However, simplification is not vital; if you do not want to do
25581     this, report the bug anyway and send us the entire test case you
25582     used.
25583
25584   * A patch for the bug.
25585
25586     A patch for the bug does help us if it is a good one.  But do not
25587     omit the necessary information, such as the test case, on the
25588     assumption that a patch is all we need.  We might see problems with
25589     your patch and decide to fix the problem another way, or we might
25590     not understand it at all.
25591
25592     Sometimes with a program as complicated as 'as' it is very hard to
25593     construct an example that will make the program follow a certain
25594     path through the code.  If you do not send us the example, we will
25595     not be able to construct one, so we will not be able to verify that
25596     the bug is fixed.
25597
25598     And if we cannot understand what bug you are trying to fix, or why
25599     your patch should be an improvement, we will not install it.  A
25600     test case will help us to understand.
25601
25602   * A guess about what the bug is or what it depends on.
25603
25604     Such guesses are usually wrong.  Even we cannot guess right about
25605     such things without first using the debugger to find the facts.
25606
25607
25608File: as.info,  Node: Acknowledgements,  Next: GNU Free Documentation License,  Prev: Reporting Bugs,  Up: Top
25609
2561011 Acknowledgements
25611*******************
25612
25613If you have contributed to GAS and your name isn't listed here, it is
25614not meant as a slight.  We just don't know about it.  Send mail to the
25615maintainer, and we'll correct the situation.  Currently the maintainer
25616is Nick Clifton (email address 'nickc@redhat.com').
25617
25618   Dean Elsner wrote the original GNU assembler for the VAX.(1)
25619
25620   Jay Fenlason maintained GAS for a while, adding support for
25621GDB-specific debug information and the 68k series machines, most of the
25622preprocessing pass, and extensive changes in 'messages.c',
25623'input-file.c', 'write.c'.
25624
25625   K. Richard Pixley maintained GAS for a while, adding various
25626enhancements and many bug fixes, including merging support for several
25627processors, breaking GAS up to handle multiple object file format back
25628ends (including heavy rewrite, testing, an integration of the coff and
25629b.out back ends), adding configuration including heavy testing and
25630verification of cross assemblers and file splits and renaming, converted
25631GAS to strictly ANSI C including full prototypes, added support for
25632m680[34]0 and cpu32, did considerable work on i960 including a COFF port
25633(including considerable amounts of reverse engineering), a SPARC opcode
25634file rewrite, DECstation, rs6000, and hp300hpux host ports, updated
25635"know" assertions and made them work, much other reorganization,
25636cleanup, and lint.
25637
25638   Ken Raeburn wrote the high-level BFD interface code to replace most
25639of the code in format-specific I/O modules.
25640
25641   The original VMS support was contributed by David L. Kashtan.  Eric
25642Youngdale has done much work with it since.
25643
25644   The Intel 80386 machine description was written by Eliot Dresselhaus.
25645
25646   Minh Tran-Le at IntelliCorp contributed some AIX 386 support.
25647
25648   The Motorola 88k machine description was contributed by Devon Bowen
25649of Buffalo University and Torbjorn Granlund of the Swedish Institute of
25650Computer Science.
25651
25652   Keith Knowles at the Open Software Foundation wrote the original MIPS
25653back end ('tc-mips.c', 'tc-mips.h'), and contributed Rose format support
25654(which hasn't been merged in yet).  Ralph Campbell worked with the MIPS
25655code to support a.out format.
25656
25657   Support for the Zilog Z8k and Renesas H8/300 processors (tc-z8k,
25658tc-h8300), and IEEE 695 object file format (obj-ieee), was written by
25659Steve Chamberlain of Cygnus Support.  Steve also modified the COFF back
25660end to use BFD for some low-level operations, for use with the H8/300
25661and AMD 29k targets.
25662
25663   John Gilmore built the AMD 29000 support, added '.include' support,
25664and simplified the configuration of which versions accept which
25665directives.  He updated the 68k machine description so that Motorola's
25666opcodes always produced fixed-size instructions (e.g., 'jsr'), while
25667synthetic instructions remained shrinkable ('jbsr').  John fixed many
25668bugs, including true tested cross-compilation support, and one bug in
25669relaxation that took a week and required the proverbial one-bit fix.
25670
25671   Ian Lance Taylor of Cygnus Support merged the Motorola and MIT syntax
25672for the 68k, completed support for some COFF targets (68k, i386 SVR3,
25673and SCO Unix), added support for MIPS ECOFF and ELF targets, wrote the
25674initial RS/6000 and PowerPC assembler, and made a few other minor
25675patches.
25676
25677   Steve Chamberlain made GAS able to generate listings.
25678
25679   Hewlett-Packard contributed support for the HP9000/300.
25680
25681   Jeff Law wrote GAS and BFD support for the native HPPA object format
25682(SOM) along with a fairly extensive HPPA testsuite (for both SOM and ELF
25683object formats).  This work was supported by both the Center for
25684Software Science at the University of Utah and Cygnus Support.
25685
25686   Support for ELF format files has been worked on by Mark Eichin of
25687Cygnus Support (original, incomplete implementation for SPARC), Pete
25688Hoogenboom and Jeff Law at the University of Utah (HPPA mainly), Michael
25689Meissner of the Open Software Foundation (i386 mainly), and Ken Raeburn
25690of Cygnus Support (sparc, and some initial 64-bit support).
25691
25692   Linas Vepstas added GAS support for the ESA/390 "IBM 370"
25693architecture.
25694
25695   Richard Henderson rewrote the Alpha assembler.  Klaus Kaempf wrote
25696GAS and BFD support for openVMS/Alpha.
25697
25698   Timothy Wall, Michael Hayes, and Greg Smart contributed to the
25699various tic* flavors.
25700
25701   David Heine, Sterling Augustine, Bob Wilson and John Ruttenberg from
25702Tensilica, Inc. added support for Xtensa processors.
25703
25704   Several engineers at Cygnus Support have also provided many small bug
25705fixes and configuration enhancements.
25706
25707   Jon Beniston added support for the Lattice Mico32 architecture.
25708
25709   Many others have contributed large or small bugfixes and
25710enhancements.  If you have contributed significant work and are not
25711mentioned on this list, and want to be, let us know.  Some of the
25712history has been lost; we are not intentionally leaving anyone out.
25713
25714   ---------- Footnotes ----------
25715
25716   (1) Any more details?
25717
25718
25719File: as.info,  Node: GNU Free Documentation License,  Next: AS Index,  Prev: Acknowledgements,  Up: Top
25720
25721Appendix A GNU Free Documentation License
25722*****************************************
25723
25724                     Version 1.3, 3 November 2008
25725
25726     Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
25727     <http://fsf.org/>
25728
25729     Everyone is permitted to copy and distribute verbatim copies
25730     of this license document, but changing it is not allowed.
25731
25732  0. PREAMBLE
25733
25734     The purpose of this License is to make a manual, textbook, or other
25735     functional and useful document "free" in the sense of freedom: to
25736     assure everyone the effective freedom to copy and redistribute it,
25737     with or without modifying it, either commercially or
25738     noncommercially.  Secondarily, this License preserves for the
25739     author and publisher a way to get credit for their work, while not
25740     being considered responsible for modifications made by others.
25741
25742     This License is a kind of "copyleft", which means that derivative
25743     works of the document must themselves be free in the same sense.
25744     It complements the GNU General Public License, which is a copyleft
25745     license designed for free software.
25746
25747     We have designed this License in order to use it for manuals for
25748     free software, because free software needs free documentation: a
25749     free program should come with manuals providing the same freedoms
25750     that the software does.  But this License is not limited to
25751     software manuals; it can be used for any textual work, regardless
25752     of subject matter or whether it is published as a printed book.  We
25753     recommend this License principally for works whose purpose is
25754     instruction or reference.
25755
25756  1. APPLICABILITY AND DEFINITIONS
25757
25758     This License applies to any manual or other work, in any medium,
25759     that contains a notice placed by the copyright holder saying it can
25760     be distributed under the terms of this License.  Such a notice
25761     grants a world-wide, royalty-free license, unlimited in duration,
25762     to use that work under the conditions stated herein.  The
25763     "Document", below, refers to any such manual or work.  Any member
25764     of the public is a licensee, and is addressed as "you".  You accept
25765     the license if you copy, modify or distribute the work in a way
25766     requiring permission under copyright law.
25767
25768     A "Modified Version" of the Document means any work containing the
25769     Document or a portion of it, either copied verbatim, or with
25770     modifications and/or translated into another language.
25771
25772     A "Secondary Section" is a named appendix or a front-matter section
25773     of the Document that deals exclusively with the relationship of the
25774     publishers or authors of the Document to the Document's overall
25775     subject (or to related matters) and contains nothing that could
25776     fall directly within that overall subject.  (Thus, if the Document
25777     is in part a textbook of mathematics, a Secondary Section may not
25778     explain any mathematics.)  The relationship could be a matter of
25779     historical connection with the subject or with related matters, or
25780     of legal, commercial, philosophical, ethical or political position
25781     regarding them.
25782
25783     The "Invariant Sections" are certain Secondary Sections whose
25784     titles are designated, as being those of Invariant Sections, in the
25785     notice that says that the Document is released under this License.
25786     If a section does not fit the above definition of Secondary then it
25787     is not allowed to be designated as Invariant.  The Document may
25788     contain zero Invariant Sections.  If the Document does not identify
25789     any Invariant Sections then there are none.
25790
25791     The "Cover Texts" are certain short passages of text that are
25792     listed, as Front-Cover Texts or Back-Cover Texts, in the notice
25793     that says that the Document is released under this License.  A
25794     Front-Cover Text may be at most 5 words, and a Back-Cover Text may
25795     be at most 25 words.
25796
25797     A "Transparent" copy of the Document means a machine-readable copy,
25798     represented in a format whose specification is available to the
25799     general public, that is suitable for revising the document
25800     straightforwardly with generic text editors or (for images composed
25801     of pixels) generic paint programs or (for drawings) some widely
25802     available drawing editor, and that is suitable for input to text
25803     formatters or for automatic translation to a variety of formats
25804     suitable for input to text formatters.  A copy made in an otherwise
25805     Transparent file format whose markup, or absence of markup, has
25806     been arranged to thwart or discourage subsequent modification by
25807     readers is not Transparent.  An image format is not Transparent if
25808     used for any substantial amount of text.  A copy that is not
25809     "Transparent" is called "Opaque".
25810
25811     Examples of suitable formats for Transparent copies include plain
25812     ASCII without markup, Texinfo input format, LaTeX input format,
25813     SGML or XML using a publicly available DTD, and standard-conforming
25814     simple HTML, PostScript or PDF designed for human modification.
25815     Examples of transparent image formats include PNG, XCF and JPG.
25816     Opaque formats include proprietary formats that can be read and
25817     edited only by proprietary word processors, SGML or XML for which
25818     the DTD and/or processing tools are not generally available, and
25819     the machine-generated HTML, PostScript or PDF produced by some word
25820     processors for output purposes only.
25821
25822     The "Title Page" means, for a printed book, the title page itself,
25823     plus such following pages as are needed to hold, legibly, the
25824     material this License requires to appear in the title page.  For
25825     works in formats which do not have any title page as such, "Title
25826     Page" means the text near the most prominent appearance of the
25827     work's title, preceding the beginning of the body of the text.
25828
25829     The "publisher" means any person or entity that distributes copies
25830     of the Document to the public.
25831
25832     A section "Entitled XYZ" means a named subunit of the Document
25833     whose title either is precisely XYZ or contains XYZ in parentheses
25834     following text that translates XYZ in another language.  (Here XYZ
25835     stands for a specific section name mentioned below, such as
25836     "Acknowledgements", "Dedications", "Endorsements", or "History".)
25837     To "Preserve the Title" of such a section when you modify the
25838     Document means that it remains a section "Entitled XYZ" according
25839     to this definition.
25840
25841     The Document may include Warranty Disclaimers next to the notice
25842     which states that this License applies to the Document.  These
25843     Warranty Disclaimers are considered to be included by reference in
25844     this License, but only as regards disclaiming warranties: any other
25845     implication that these Warranty Disclaimers may have is void and
25846     has no effect on the meaning of this License.
25847
25848  2. VERBATIM COPYING
25849
25850     You may copy and distribute the Document in any medium, either
25851     commercially or noncommercially, provided that this License, the
25852     copyright notices, and the license notice saying this License
25853     applies to the Document are reproduced in all copies, and that you
25854     add no other conditions whatsoever to those of this License.  You
25855     may not use technical measures to obstruct or control the reading
25856     or further copying of the copies you make or distribute.  However,
25857     you may accept compensation in exchange for copies.  If you
25858     distribute a large enough number of copies you must also follow the
25859     conditions in section 3.
25860
25861     You may also lend copies, under the same conditions stated above,
25862     and you may publicly display copies.
25863
25864  3. COPYING IN QUANTITY
25865
25866     If you publish printed copies (or copies in media that commonly
25867     have printed covers) of the Document, numbering more than 100, and
25868     the Document's license notice requires Cover Texts, you must
25869     enclose the copies in covers that carry, clearly and legibly, all
25870     these Cover Texts: Front-Cover Texts on the front cover, and
25871     Back-Cover Texts on the back cover.  Both covers must also clearly
25872     and legibly identify you as the publisher of these copies.  The
25873     front cover must present the full title with all words of the title
25874     equally prominent and visible.  You may add other material on the
25875     covers in addition.  Copying with changes limited to the covers, as
25876     long as they preserve the title of the Document and satisfy these
25877     conditions, can be treated as verbatim copying in other respects.
25878
25879     If the required texts for either cover are too voluminous to fit
25880     legibly, you should put the first ones listed (as many as fit
25881     reasonably) on the actual cover, and continue the rest onto
25882     adjacent pages.
25883
25884     If you publish or distribute Opaque copies of the Document
25885     numbering more than 100, you must either include a machine-readable
25886     Transparent copy along with each Opaque copy, or state in or with
25887     each Opaque copy a computer-network location from which the general
25888     network-using public has access to download using public-standard
25889     network protocols a complete Transparent copy of the Document, free
25890     of added material.  If you use the latter option, you must take
25891     reasonably prudent steps, when you begin distribution of Opaque
25892     copies in quantity, to ensure that this Transparent copy will
25893     remain thus accessible at the stated location until at least one
25894     year after the last time you distribute an Opaque copy (directly or
25895     through your agents or retailers) of that edition to the public.
25896
25897     It is requested, but not required, that you contact the authors of
25898     the Document well before redistributing any large number of copies,
25899     to give them a chance to provide you with an updated version of the
25900     Document.
25901
25902  4. MODIFICATIONS
25903
25904     You may copy and distribute a Modified Version of the Document
25905     under the conditions of sections 2 and 3 above, provided that you
25906     release the Modified Version under precisely this License, with the
25907     Modified Version filling the role of the Document, thus licensing
25908     distribution and modification of the Modified Version to whoever
25909     possesses a copy of it.  In addition, you must do these things in
25910     the Modified Version:
25911
25912       A. Use in the Title Page (and on the covers, if any) a title
25913          distinct from that of the Document, and from those of previous
25914          versions (which should, if there were any, be listed in the
25915          History section of the Document).  You may use the same title
25916          as a previous version if the original publisher of that
25917          version gives permission.
25918
25919       B. List on the Title Page, as authors, one or more persons or
25920          entities responsible for authorship of the modifications in
25921          the Modified Version, together with at least five of the
25922          principal authors of the Document (all of its principal
25923          authors, if it has fewer than five), unless they release you
25924          from this requirement.
25925
25926       C. State on the Title page the name of the publisher of the
25927          Modified Version, as the publisher.
25928
25929       D. Preserve all the copyright notices of the Document.
25930
25931       E. Add an appropriate copyright notice for your modifications
25932          adjacent to the other copyright notices.
25933
25934       F. Include, immediately after the copyright notices, a license
25935          notice giving the public permission to use the Modified
25936          Version under the terms of this License, in the form shown in
25937          the Addendum below.
25938
25939       G. Preserve in that license notice the full lists of Invariant
25940          Sections and required Cover Texts given in the Document's
25941          license notice.
25942
25943       H. Include an unaltered copy of this License.
25944
25945       I. Preserve the section Entitled "History", Preserve its Title,
25946          and add to it an item stating at least the title, year, new
25947          authors, and publisher of the Modified Version as given on the
25948          Title Page.  If there is no section Entitled "History" in the
25949          Document, create one stating the title, year, authors, and
25950          publisher of the Document as given on its Title Page, then add
25951          an item describing the Modified Version as stated in the
25952          previous sentence.
25953
25954       J. Preserve the network location, if any, given in the Document
25955          for public access to a Transparent copy of the Document, and
25956          likewise the network locations given in the Document for
25957          previous versions it was based on.  These may be placed in the
25958          "History" section.  You may omit a network location for a work
25959          that was published at least four years before the Document
25960          itself, or if the original publisher of the version it refers
25961          to gives permission.
25962
25963       K. For any section Entitled "Acknowledgements" or "Dedications",
25964          Preserve the Title of the section, and preserve in the section
25965          all the substance and tone of each of the contributor
25966          acknowledgements and/or dedications given therein.
25967
25968       L. Preserve all the Invariant Sections of the Document, unaltered
25969          in their text and in their titles.  Section numbers or the
25970          equivalent are not considered part of the section titles.
25971
25972       M. Delete any section Entitled "Endorsements".  Such a section
25973          may not be included in the Modified Version.
25974
25975       N. Do not retitle any existing section to be Entitled
25976          "Endorsements" or to conflict in title with any Invariant
25977          Section.
25978
25979       O. Preserve any Warranty Disclaimers.
25980
25981     If the Modified Version includes new front-matter sections or
25982     appendices that qualify as Secondary Sections and contain no
25983     material copied from the Document, you may at your option designate
25984     some or all of these sections as invariant.  To do this, add their
25985     titles to the list of Invariant Sections in the Modified Version's
25986     license notice.  These titles must be distinct from any other
25987     section titles.
25988
25989     You may add a section Entitled "Endorsements", provided it contains
25990     nothing but endorsements of your Modified Version by various
25991     parties--for example, statements of peer review or that the text
25992     has been approved by an organization as the authoritative
25993     definition of a standard.
25994
25995     You may add a passage of up to five words as a Front-Cover Text,
25996     and a passage of up to 25 words as a Back-Cover Text, to the end of
25997     the list of Cover Texts in the Modified Version.  Only one passage
25998     of Front-Cover Text and one of Back-Cover Text may be added by (or
25999     through arrangements made by) any one entity.  If the Document
26000     already includes a cover text for the same cover, previously added
26001     by you or by arrangement made by the same entity you are acting on
26002     behalf of, you may not add another; but you may replace the old
26003     one, on explicit permission from the previous publisher that added
26004     the old one.
26005
26006     The author(s) and publisher(s) of the Document do not by this
26007     License give permission to use their names for publicity for or to
26008     assert or imply endorsement of any Modified Version.
26009
26010  5. COMBINING DOCUMENTS
26011
26012     You may combine the Document with other documents released under
26013     this License, under the terms defined in section 4 above for
26014     modified versions, provided that you include in the combination all
26015     of the Invariant Sections of all of the original documents,
26016     unmodified, and list them all as Invariant Sections of your
26017     combined work in its license notice, and that you preserve all
26018     their Warranty Disclaimers.
26019
26020     The combined work need only contain one copy of this License, and
26021     multiple identical Invariant Sections may be replaced with a single
26022     copy.  If there are multiple Invariant Sections with the same name
26023     but different contents, make the title of each such section unique
26024     by adding at the end of it, in parentheses, the name of the
26025     original author or publisher of that section if known, or else a
26026     unique number.  Make the same adjustment to the section titles in
26027     the list of Invariant Sections in the license notice of the
26028     combined work.
26029
26030     In the combination, you must combine any sections Entitled
26031     "History" in the various original documents, forming one section
26032     Entitled "History"; likewise combine any sections Entitled
26033     "Acknowledgements", and any sections Entitled "Dedications".  You
26034     must delete all sections Entitled "Endorsements."
26035
26036  6. COLLECTIONS OF DOCUMENTS
26037
26038     You may make a collection consisting of the Document and other
26039     documents released under this License, and replace the individual
26040     copies of this License in the various documents with a single copy
26041     that is included in the collection, provided that you follow the
26042     rules of this License for verbatim copying of each of the documents
26043     in all other respects.
26044
26045     You may extract a single document from such a collection, and
26046     distribute it individually under this License, provided you insert
26047     a copy of this License into the extracted document, and follow this
26048     License in all other respects regarding verbatim copying of that
26049     document.
26050
26051  7. AGGREGATION WITH INDEPENDENT WORKS
26052
26053     A compilation of the Document or its derivatives with other
26054     separate and independent documents or works, in or on a volume of a
26055     storage or distribution medium, is called an "aggregate" if the
26056     copyright resulting from the compilation is not used to limit the
26057     legal rights of the compilation's users beyond what the individual
26058     works permit.  When the Document is included in an aggregate, this
26059     License does not apply to the other works in the aggregate which
26060     are not themselves derivative works of the Document.
26061
26062     If the Cover Text requirement of section 3 is applicable to these
26063     copies of the Document, then if the Document is less than one half
26064     of the entire aggregate, the Document's Cover Texts may be placed
26065     on covers that bracket the Document within the aggregate, or the
26066     electronic equivalent of covers if the Document is in electronic
26067     form.  Otherwise they must appear on printed covers that bracket
26068     the whole aggregate.
26069
26070  8. TRANSLATION
26071
26072     Translation is considered a kind of modification, so you may
26073     distribute translations of the Document under the terms of section
26074     4.  Replacing Invariant Sections with translations requires special
26075     permission from their copyright holders, but you may include
26076     translations of some or all Invariant Sections in addition to the
26077     original versions of these Invariant Sections.  You may include a
26078     translation of this License, and all the license notices in the
26079     Document, and any Warranty Disclaimers, provided that you also
26080     include the original English version of this License and the
26081     original versions of those notices and disclaimers.  In case of a
26082     disagreement between the translation and the original version of
26083     this License or a notice or disclaimer, the original version will
26084     prevail.
26085
26086     If a section in the Document is Entitled "Acknowledgements",
26087     "Dedications", or "History", the requirement (section 4) to
26088     Preserve its Title (section 1) will typically require changing the
26089     actual title.
26090
26091  9. TERMINATION
26092
26093     You may not copy, modify, sublicense, or distribute the Document
26094     except as expressly provided under this License.  Any attempt
26095     otherwise to copy, modify, sublicense, or distribute it is void,
26096     and will automatically terminate your rights under this License.
26097
26098     However, if you cease all violation of this License, then your
26099     license from a particular copyright holder is reinstated (a)
26100     provisionally, unless and until the copyright holder explicitly and
26101     finally terminates your license, and (b) permanently, if the
26102     copyright holder fails to notify you of the violation by some
26103     reasonable means prior to 60 days after the cessation.
26104
26105     Moreover, your license from a particular copyright holder is
26106     reinstated permanently if the copyright holder notifies you of the
26107     violation by some reasonable means, this is the first time you have
26108     received notice of violation of this License (for any work) from
26109     that copyright holder, and you cure the violation prior to 30 days
26110     after your receipt of the notice.
26111
26112     Termination of your rights under this section does not terminate
26113     the licenses of parties who have received copies or rights from you
26114     under this License.  If your rights have been terminated and not
26115     permanently reinstated, receipt of a copy of some or all of the
26116     same material does not give you any rights to use it.
26117
26118  10. FUTURE REVISIONS OF THIS LICENSE
26119
26120     The Free Software Foundation may publish new, revised versions of
26121     the GNU Free Documentation License from time to time.  Such new
26122     versions will be similar in spirit to the present version, but may
26123     differ in detail to address new problems or concerns.  See
26124     <http://www.gnu.org/copyleft/>.
26125
26126     Each version of the License is given a distinguishing version
26127     number.  If the Document specifies that a particular numbered
26128     version of this License "or any later version" applies to it, you
26129     have the option of following the terms and conditions either of
26130     that specified version or of any later version that has been
26131     published (not as a draft) by the Free Software Foundation.  If the
26132     Document does not specify a version number of this License, you may
26133     choose any version ever published (not as a draft) by the Free
26134     Software Foundation.  If the Document specifies that a proxy can
26135     decide which future versions of this License can be used, that
26136     proxy's public statement of acceptance of a version permanently
26137     authorizes you to choose that version for the Document.
26138
26139  11. RELICENSING
26140
26141     "Massive Multiauthor Collaboration Site" (or "MMC Site") means any
26142     World Wide Web server that publishes copyrightable works and also
26143     provides prominent facilities for anybody to edit those works.  A
26144     public wiki that anybody can edit is an example of such a server.
26145     A "Massive Multiauthor Collaboration" (or "MMC") contained in the
26146     site means any set of copyrightable works thus published on the MMC
26147     site.
26148
26149     "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0
26150     license published by Creative Commons Corporation, a not-for-profit
26151     corporation with a principal place of business in San Francisco,
26152     California, as well as future copyleft versions of that license
26153     published by that same organization.
26154
26155     "Incorporate" means to publish or republish a Document, in whole or
26156     in part, as part of another Document.
26157
26158     An MMC is "eligible for relicensing" if it is licensed under this
26159     License, and if all works that were first published under this
26160     License somewhere other than this MMC, and subsequently
26161     incorporated in whole or in part into the MMC, (1) had no cover
26162     texts or invariant sections, and (2) were thus incorporated prior
26163     to November 1, 2008.
26164
26165     The operator of an MMC Site may republish an MMC contained in the
26166     site under CC-BY-SA on the same site at any time before August 1,
26167     2009, provided the MMC is eligible for relicensing.
26168
26169ADDENDUM: How to use this License for your documents
26170====================================================
26171
26172To use this License in a document you have written, include a copy of
26173the License in the document and put the following copyright and license
26174notices just after the title page:
26175
26176       Copyright (C)  YEAR  YOUR NAME.
26177       Permission is granted to copy, distribute and/or modify this document
26178       under the terms of the GNU Free Documentation License, Version 1.3
26179       or any later version published by the Free Software Foundation;
26180       with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
26181       Texts.  A copy of the license is included in the section entitled ``GNU
26182       Free Documentation License''.
26183
26184   If you have Invariant Sections, Front-Cover Texts and Back-Cover
26185Texts, replace the "with...Texts."  line with this:
26186
26187         with the Invariant Sections being LIST THEIR TITLES, with
26188         the Front-Cover Texts being LIST, and with the Back-Cover Texts
26189         being LIST.
26190
26191   If you have Invariant Sections without Cover Texts, or some other
26192combination of the three, merge those two alternatives to suit the
26193situation.
26194
26195   If your document contains nontrivial examples of program code, we
26196recommend releasing these examples in parallel under your choice of free
26197software license, such as the GNU General Public License, to permit
26198their use in free software.
26199
26200
26201File: as.info,  Node: AS Index,  Prev: GNU Free Documentation License,  Up: Top
26202
26203AS Index
26204********
26205
26206�[index�]
26207* Menu:
26208
26209* ' \"' (doublequote character):         Strings.            (line   43)
26210* ' \b' (backspace character):           Strings.            (line   15)
26211* ' \DDD' (octal character code):        Strings.            (line   30)
26212* ' \f' (formfeed character):            Strings.            (line   18)
26213* ' \n' (newline character):             Strings.            (line   21)
26214* ' \r' (carriage return character):     Strings.            (line   24)
26215* ' \t' (tab):                           Strings.            (line   27)
26216* ' \XD...' (hex character code):        Strings.            (line   36)
26217* ' \\' ('\' character):                 Strings.            (line   40)
26218* #:                                     Comments.           (line   33)
26219* #APP:                                  Preprocessing.      (line   28)
26220* #NO_APP:                               Preprocessing.      (line   28)
26221* '$' in symbol names:                   D10V-Chars.         (line   46)
26222* '$' in symbol names <1>:               D30V-Chars.         (line   70)
26223* '$' in symbol names <2>:               Meta-Chars.         (line   10)
26224* '$' in symbol names <3>:               SH-Chars.           (line   15)
26225* '$a':                                  ARM Mapping Symbols.
26226                                                             (line    9)
26227* '$acos' math builtin, TIC54X:          TIC54X-Builtins.    (line   10)
26228* '$asin' math builtin, TIC54X:          TIC54X-Builtins.    (line   13)
26229* '$atan' math builtin, TIC54X:          TIC54X-Builtins.    (line   16)
26230* '$atan2' math builtin, TIC54X:         TIC54X-Builtins.    (line   19)
26231* '$ceil' math builtin, TIC54X:          TIC54X-Builtins.    (line   22)
26232* '$cos' math builtin, TIC54X:           TIC54X-Builtins.    (line   28)
26233* '$cosh' math builtin, TIC54X:          TIC54X-Builtins.    (line   25)
26234* '$cvf' math builtin, TIC54X:           TIC54X-Builtins.    (line   31)
26235* '$cvi' math builtin, TIC54X:           TIC54X-Builtins.    (line   34)
26236* '$d':                                  AArch64 Mapping Symbols.
26237                                                             (line   12)
26238* '$d' <1>:                              ARM Mapping Symbols.
26239                                                             (line   15)
26240* '$exp' math builtin, TIC54X:           TIC54X-Builtins.    (line   37)
26241* '$fabs' math builtin, TIC54X:          TIC54X-Builtins.    (line   40)
26242* '$firstch' subsym builtin, TIC54X:     TIC54X-Macros.      (line   26)
26243* '$floor' math builtin, TIC54X:         TIC54X-Builtins.    (line   43)
26244* '$fmod' math builtin, TIC54X:          TIC54X-Builtins.    (line   47)
26245* '$int' math builtin, TIC54X:           TIC54X-Builtins.    (line   50)
26246* '$iscons' subsym builtin, TIC54X:      TIC54X-Macros.      (line   43)
26247* '$isdefed' subsym builtin, TIC54X:     TIC54X-Macros.      (line   34)
26248* '$ismember' subsym builtin, TIC54X:    TIC54X-Macros.      (line   38)
26249* '$isname' subsym builtin, TIC54X:      TIC54X-Macros.      (line   47)
26250* '$isreg' subsym builtin, TIC54X:       TIC54X-Macros.      (line   50)
26251* '$lastch' subsym builtin, TIC54X:      TIC54X-Macros.      (line   30)
26252* '$ldexp' math builtin, TIC54X:         TIC54X-Builtins.    (line   53)
26253* '$log' math builtin, TIC54X:           TIC54X-Builtins.    (line   59)
26254* '$log10' math builtin, TIC54X:         TIC54X-Builtins.    (line   56)
26255* '$max' math builtin, TIC54X:           TIC54X-Builtins.    (line   62)
26256* '$min' math builtin, TIC54X:           TIC54X-Builtins.    (line   65)
26257* '$pow' math builtin, TIC54X:           TIC54X-Builtins.    (line   68)
26258* '$round' math builtin, TIC54X:         TIC54X-Builtins.    (line   71)
26259* '$sgn' math builtin, TIC54X:           TIC54X-Builtins.    (line   74)
26260* '$sin' math builtin, TIC54X:           TIC54X-Builtins.    (line   77)
26261* '$sinh' math builtin, TIC54X:          TIC54X-Builtins.    (line   80)
26262* '$sqrt' math builtin, TIC54X:          TIC54X-Builtins.    (line   83)
26263* '$structacc' subsym builtin, TIC54X:   TIC54X-Macros.      (line   57)
26264* '$structsz' subsym builtin, TIC54X:    TIC54X-Macros.      (line   54)
26265* '$symcmp' subsym builtin, TIC54X:      TIC54X-Macros.      (line   23)
26266* '$symlen' subsym builtin, TIC54X:      TIC54X-Macros.      (line   20)
26267* '$t':                                  ARM Mapping Symbols.
26268                                                             (line   12)
26269* '$tan' math builtin, TIC54X:           TIC54X-Builtins.    (line   86)
26270* '$tanh' math builtin, TIC54X:          TIC54X-Builtins.    (line   89)
26271* '$trunc' math builtin, TIC54X:         TIC54X-Builtins.    (line   92)
26272* '$x':                                  AArch64 Mapping Symbols.
26273                                                             (line    9)
26274* %gp:                                   RX-Modifiers.       (line    6)
26275* '%gpreg':                              RX-Modifiers.       (line   22)
26276* '%pidreg':                             RX-Modifiers.       (line   25)
26277* '-+' option, VAX/VMS:                  VAX-Opts.           (line   71)
26278* --:                                    Command Line.       (line   10)
26279* '--32' option, i386:                   i386-Options.       (line    8)
26280* '--32' option, x86-64:                 i386-Options.       (line    8)
26281* '--64' option, i386:                   i386-Options.       (line    8)
26282* '--64' option, x86-64:                 i386-Options.       (line    8)
26283* --abi-call0:                           Xtensa Options.     (line   82)
26284* --abi-windowed:                        Xtensa Options.     (line   82)
26285* --absolute-literals:                   Xtensa Options.     (line   39)
26286* --allow-reg-prefix:                    SH Options.         (line    9)
26287* --alternate:                           alternate.          (line    6)
26288* --auto-litpools:                       Xtensa Options.     (line   22)
26289* '--base-size-default-16':              M68K-Opts.          (line   66)
26290* '--base-size-default-32':              M68K-Opts.          (line   66)
26291* --big:                                 SH Options.         (line    9)
26292* '--bitwise-or' option, M680x0:         M68K-Opts.          (line   59)
26293* '--compress-debug-sections=' option:   Overview.           (line  377)
26294* '--disp-size-default-16':              M68K-Opts.          (line   75)
26295* '--disp-size-default-32':              M68K-Opts.          (line   75)
26296* '--divide' option, i386:               i386-Options.       (line   25)
26297* --dsp:                                 SH Options.         (line    9)
26298* '--emulation=crisaout' command-line option, CRIS: CRIS-Opts.
26299                                                             (line    9)
26300* '--emulation=criself' command-line option, CRIS: CRIS-Opts.
26301                                                             (line    9)
26302* --enforce-aligned-data:                Sparc-Aligned-Data. (line   11)
26303* --fatal-warnings:                      W.                  (line   16)
26304* --fdpic:                               SH Options.         (line   31)
26305* '--fix-v4bx' command-line option, ARM: ARM Options.        (line  380)
26306* '--fixed-special-register-names' command-line option, MMIX: MMIX-Opts.
26307                                                             (line    8)
26308* '--force-long-branches':               M68HC11-Opts.       (line   81)
26309* '--generate-example':                  M68HC11-Opts.       (line   98)
26310* '--globalize-symbols' command-line option, MMIX: MMIX-Opts.
26311                                                             (line   12)
26312* '--gnu-syntax' command-line option, MMIX: MMIX-Opts.       (line   16)
26313* '--linker-allocated-gregs' command-line option, MMIX: MMIX-Opts.
26314                                                             (line   67)
26315* --listing-cont-lines:                  listing.            (line   34)
26316* --listing-lhs-width:                   listing.            (line   16)
26317* --listing-lhs-width2:                  listing.            (line   21)
26318* --listing-rhs-width:                   listing.            (line   28)
26319* --little:                              SH Options.         (line    9)
26320* --longcalls:                           Xtensa Options.     (line   53)
26321* '--march=ARCHITECTURE' command-line option, CRIS: CRIS-Opts.
26322                                                             (line   34)
26323* --MD:                                  MD.                 (line    6)
26324* '--mul-bug-abort' command-line option, CRIS: CRIS-Opts.    (line   63)
26325* --no-absolute-literals:                Xtensa Options.     (line   39)
26326* --no-auto-litpools:                    Xtensa Options.     (line   22)
26327* '--no-expand' command-line option, MMIX: MMIX-Opts.        (line   31)
26328* --no-longcalls:                        Xtensa Options.     (line   53)
26329* '--no-merge-gregs' command-line option, MMIX: MMIX-Opts.   (line   36)
26330* '--no-mul-bug-abort' command-line option, CRIS: CRIS-Opts. (line   63)
26331* --no-pad-sections:                     no-pad-sections.    (line    6)
26332* '--no-predefined-syms' command-line option, MMIX: MMIX-Opts.
26333                                                             (line   22)
26334* '--no-pushj-stubs' command-line option, MMIX: MMIX-Opts.   (line   54)
26335* '--no-stubs' command-line option, MMIX: MMIX-Opts.         (line   54)
26336* --no-target-align:                     Xtensa Options.     (line   46)
26337* --no-text-section-literals:            Xtensa Options.     (line    7)
26338* --no-trampolines:                      Xtensa Options.     (line   74)
26339* --no-transform:                        Xtensa Options.     (line   62)
26340* '--no-underscore' command-line option, CRIS: CRIS-Opts.    (line   15)
26341* --no-warn:                             W.                  (line   11)
26342* '--pcrel':                             M68K-Opts.          (line   87)
26343* '--pic' command-line option, CRIS:     CRIS-Opts.          (line   27)
26344* '--print-insn-syntax':                 M68HC11-Opts.       (line   87)
26345* '--print-insn-syntax' <1>:             XGATE-Opts.         (line   25)
26346* '--print-opcodes':                     M68HC11-Opts.       (line   91)
26347* '--print-opcodes' <1>:                 XGATE-Opts.         (line   29)
26348* '--register-prefix-optional' option, M680x0: M68K-Opts.    (line   46)
26349* --relax:                               SH Options.         (line    9)
26350* '--relax' command-line option, MMIX:   MMIX-Opts.          (line   19)
26351* --rename-section:                      Xtensa Options.     (line   70)
26352* --renesas:                             SH Options.         (line    9)
26353* --sectname-subst:                      Section.            (line   71)
26354* '--short-branches':                    M68HC11-Opts.       (line   67)
26355* --small:                               SH Options.         (line    9)
26356* --statistics:                          statistics.         (line    6)
26357* '--strict-direct-mode':                M68HC11-Opts.       (line   57)
26358* --target-align:                        Xtensa Options.     (line   46)
26359* --text-section-literals:               Xtensa Options.     (line    7)
26360* --traditional-format:                  traditional-format. (line    6)
26361* --trampolines:                         Xtensa Options.     (line   74)
26362* --transform:                           Xtensa Options.     (line   62)
26363* '--underscore' command-line option, CRIS: CRIS-Opts.       (line   15)
26364* --warn:                                W.                  (line   19)
26365* '--x32' option, i386:                  i386-Options.       (line    8)
26366* '--x32' option, x86-64:                i386-Options.       (line    8)
26367* '--xgate-ramoffset':                   M68HC11-Opts.       (line   36)
26368* '-1' option, VAX/VMS:                  VAX-Opts.           (line   77)
26369* '-32addr' command-line option, Alpha:  Alpha Options.      (line   57)
26370* -a:                                    a.                  (line    6)
26371* -ac:                                   a.                  (line    6)
26372* -ad:                                   a.                  (line    6)
26373* -ag:                                   a.                  (line    6)
26374* -ah:                                   a.                  (line    6)
26375* -al:                                   a.                  (line    6)
26376* -Aleon:                                Sparc-Opts.         (line   25)
26377* -an:                                   a.                  (line    6)
26378* -as:                                   a.                  (line    6)
26379* -Asparc:                               Sparc-Opts.         (line   25)
26380* -Asparcfmaf:                           Sparc-Opts.         (line   25)
26381* -Asparcima:                            Sparc-Opts.         (line   25)
26382* -Asparclet:                            Sparc-Opts.         (line   25)
26383* -Asparclite:                           Sparc-Opts.         (line   25)
26384* -Asparcvis:                            Sparc-Opts.         (line   25)
26385* -Asparcvis2:                           Sparc-Opts.         (line   25)
26386* -Asparcvis3:                           Sparc-Opts.         (line   25)
26387* -Asparcvis3r:                          Sparc-Opts.         (line   25)
26388* -Av6:                                  Sparc-Opts.         (line   25)
26389* -Av7:                                  Sparc-Opts.         (line   25)
26390* -Av8:                                  Sparc-Opts.         (line   25)
26391* -Av9:                                  Sparc-Opts.         (line   25)
26392* -Av9a:                                 Sparc-Opts.         (line   25)
26393* -Av9b:                                 Sparc-Opts.         (line   25)
26394* -Av9c:                                 Sparc-Opts.         (line   25)
26395* -Av9d:                                 Sparc-Opts.         (line   25)
26396* -Av9e:                                 Sparc-Opts.         (line   25)
26397* -Av9m:                                 Sparc-Opts.         (line   25)
26398* -Av9v:                                 Sparc-Opts.         (line   25)
26399* '-big' option, M32R:                   M32R-Opts.          (line   35)
26400* '-colonless' command-line option, Z80: Z80 Options.        (line   33)
26401* -D:                                    D.                  (line    6)
26402* '-D', ignored on VAX:                  VAX-Opts.           (line   11)
26403* '-d', VAX option:                      VAX-Opts.           (line   16)
26404* '-eabi=' command-line option, ARM:     ARM Options.        (line  356)
26405* '-EB' command-line option, AArch64:    AArch64 Options.    (line    6)
26406* '-EB' command-line option, ARC:        ARC Options.        (line   84)
26407* '-EB' command-line option, ARM:        ARM Options.        (line  361)
26408* '-EB' command-line option, BPF:        BPF Options.        (line    6)
26409* '-EB' option (MIPS):                   MIPS Options.       (line   13)
26410* '-EB' option, M32R:                    M32R-Opts.          (line   39)
26411* '-EB' option, TILE-Gx:                 TILE-Gx Options.    (line   11)
26412* '-EL' command-line option, AArch64:    AArch64 Options.    (line   10)
26413* '-EL' command-line option, ARC:        ARC Options.        (line   88)
26414* '-EL' command-line option, ARM:        ARM Options.        (line  372)
26415* '-EL' command-line option, BPF:        BPF Options.        (line   10)
26416* '-EL' option (MIPS):                   MIPS Options.       (line   13)
26417* '-EL' option, M32R:                    M32R-Opts.          (line   32)
26418* '-EL' option, TILE-Gx:                 TILE-Gx Options.    (line   11)
26419* -f:                                    f.                  (line    6)
26420* '-F' command-line option, Alpha:       Alpha Options.      (line   57)
26421* '-fno-pic' option, RISC-V:             RISC-V-Options.     (line   12)
26422* '-fp-d' command-line option, Z80:      Z80 Options.        (line   44)
26423* '-fp-s' command-line option, Z80:      Z80 Options.        (line   40)
26424* '-fpic' option, RISC-V:                RISC-V-Options.     (line    8)
26425* '-g' command-line option, Alpha:       Alpha Options.      (line   47)
26426* '-G' command-line option, Alpha:       Alpha Options.      (line   53)
26427* '-G' option (MIPS):                    MIPS Options.       (line    8)
26428* '-h' option, VAX/VMS:                  VAX-Opts.           (line   45)
26429* '-H' option, VAX/VMS:                  VAX-Opts.           (line   81)
26430* -I PATH:                               I.                  (line    6)
26431* '-ignore-parallel-conflicts' option, M32RX: M32R-Opts.     (line   87)
26432* '-Ip' option, M32RX:                   M32R-Opts.          (line   97)
26433* '-J', ignored on VAX:                  VAX-Opts.           (line   27)
26434* -K:                                    K.                  (line    6)
26435* '-k' command-line option, ARM:         ARM Options.        (line  376)
26436* '-KPIC' option, M32R:                  M32R-Opts.          (line   42)
26437* '-KPIC' option, MIPS:                  MIPS Options.       (line   21)
26438* -L:                                    L.                  (line    6)
26439* '-l' option, M680x0:                   M68K-Opts.          (line   34)
26440* '-little' option, M32R:                M32R-Opts.          (line   27)
26441* '-local-prefix' command-line option, Z80: Z80 Options.     (line   28)
26442* -M:                                    M.                  (line    6)
26443* -m11/03:                               PDP-11-Options.     (line  140)
26444* -m11/04:                               PDP-11-Options.     (line  143)
26445* -m11/05:                               PDP-11-Options.     (line  146)
26446* -m11/10:                               PDP-11-Options.     (line  146)
26447* -m11/15:                               PDP-11-Options.     (line  149)
26448* -m11/20:                               PDP-11-Options.     (line  149)
26449* -m11/21:                               PDP-11-Options.     (line  152)
26450* -m11/23:                               PDP-11-Options.     (line  155)
26451* -m11/24:                               PDP-11-Options.     (line  155)
26452* -m11/34:                               PDP-11-Options.     (line  158)
26453* -m11/34a:                              PDP-11-Options.     (line  161)
26454* -m11/35:                               PDP-11-Options.     (line  164)
26455* -m11/40:                               PDP-11-Options.     (line  164)
26456* -m11/44:                               PDP-11-Options.     (line  167)
26457* -m11/45:                               PDP-11-Options.     (line  170)
26458* -m11/50:                               PDP-11-Options.     (line  170)
26459* -m11/53:                               PDP-11-Options.     (line  173)
26460* -m11/55:                               PDP-11-Options.     (line  170)
26461* -m11/60:                               PDP-11-Options.     (line  176)
26462* -m11/70:                               PDP-11-Options.     (line  170)
26463* -m11/73:                               PDP-11-Options.     (line  173)
26464* -m11/83:                               PDP-11-Options.     (line  173)
26465* -m11/84:                               PDP-11-Options.     (line  173)
26466* -m11/93:                               PDP-11-Options.     (line  173)
26467* -m11/94:                               PDP-11-Options.     (line  173)
26468* '-m16c' option, M16C:                  M32C-Opts.          (line   12)
26469* '-m31' option, s390:                   s390 Options.       (line    8)
26470* '-m32' option, TILE-Gx:                TILE-Gx Options.    (line    8)
26471* '-m32bit-doubles':                     RX-Opts.            (line    9)
26472* '-m32c' option, M32C:                  M32C-Opts.          (line    9)
26473* '-m32r' option, M32R:                  M32R-Opts.          (line   21)
26474* '-m32rx' option, M32R2:                M32R-Opts.          (line   17)
26475* '-m32rx' option, M32RX:                M32R-Opts.          (line    9)
26476* '-m4byte-align' command-line option, V850: V850 Options.   (line   90)
26477* '-m64' option, s390:                   s390 Options.       (line    8)
26478* '-m64' option, TILE-Gx:                TILE-Gx Options.    (line    8)
26479* '-m64bit-doubles':                     RX-Opts.            (line   15)
26480* '-m68000' and related options:         M68K-Opts.          (line   99)
26481* '-m68hc11':                            M68HC11-Opts.       (line    9)
26482* '-m68hc12':                            M68HC11-Opts.       (line   14)
26483* '-m68hcs12':                           M68HC11-Opts.       (line   21)
26484* '-m8byte-align' command-line option, V850: V850 Options.   (line   86)
26485* '-mabi=' command-line option, AArch64: AArch64 Options.    (line   14)
26486* '-mabi=ABI' option, RISC-V:            RISC-V-Options.     (line   33)
26487* '-madd-bnd-prefix' option, i386:       i386-Options.       (line  159)
26488* '-madd-bnd-prefix' option, x86-64:     i386-Options.       (line  159)
26489* '-malign-branch-boundary=' option, i386: i386-Options.     (line  205)
26490* '-malign-branch-boundary=' option, x86-64: i386-Options.   (line  205)
26491* '-malign-branch-prefix-size=' option, i386: i386-Options.  (line  220)
26492* '-malign-branch-prefix-size=' option, x86-64: i386-Options.
26493                                                             (line  220)
26494* '-malign-branch=' option, i386:        i386-Options.       (line  212)
26495* '-malign-branch=' option, x86-64:      i386-Options.       (line  212)
26496* -mall:                                 PDP-11-Options.     (line   26)
26497* '-mall-enabled' command-line option, LM32: LM32 Options.   (line   30)
26498* -mall-extensions:                      PDP-11-Options.     (line   26)
26499* '-mall-opcodes' command-line option, AVR: AVR Options.     (line  111)
26500* '-mamd64' option, x86-64:              i386-Options.       (line  290)
26501* '-mapcs-26' command-line option, ARM:  ARM Options.        (line  328)
26502* '-mapcs-32' command-line option, ARM:  ARM Options.        (line  328)
26503* '-mapcs-float' command-line option, ARM: ARM Options.      (line  342)
26504* '-mapcs-reentrant' command-line option, ARM: ARM Options.  (line  347)
26505* '-march-attr' option, RISC-V:          RISC-V-Options.     (line   48)
26506* '-march=' command-line option, AArch64: AArch64 Options.   (line   43)
26507* '-march=' command-line option, ARM:    ARM Options.        (line   85)
26508* '-march=' command-line option, M680x0: M68K-Opts.          (line    8)
26509* '-march=' command-line option, TIC6X:  TIC6X Options.      (line    6)
26510* '-march=' command-line option, Z80:    Z80 Options.        (line    6)
26511* '-march=' option, i386:                i386-Options.       (line   32)
26512* '-march=' option, s390:                s390 Options.       (line   25)
26513* '-march=' option, x86-64:              i386-Options.       (line   32)
26514* '-march=ISA' option, RISC-V:           RISC-V-Options.     (line   15)
26515* '-matpcs' command-line option, ARM:    ARM Options.        (line  334)
26516* '-mavxscalar=' option, i386:           i386-Options.       (line  104)
26517* '-mavxscalar=' option, x86-64:         i386-Options.       (line  104)
26518* '-mbarrel-shift-enabled' command-line option, LM32: LM32 Options.
26519                                                             (line   12)
26520* '-mbig-endian':                        RX-Opts.            (line   20)
26521* '-mbig-endian' option, RISC-V:         RISC-V-Options.     (line   71)
26522* '-mbig-obj' option, i386:              i386-Options.       (line  173)
26523* '-mbig-obj' option, x86-64:            i386-Options.       (line  173)
26524* '-mbranches-within-32B-boundaries' option, i386: i386-Options.
26525                                                             (line  225)
26526* '-mbranches-within-32B-boundaries' option, x86-64: i386-Options.
26527                                                             (line  225)
26528* '-mbreak-enabled' command-line option, LM32: LM32 Options. (line   27)
26529* '-mccs' command-line option, ARM:      ARM Options.        (line  389)
26530* -mcis:                                 PDP-11-Options.     (line   32)
26531* '-mcode-density' command-line option, ARC: ARC Options.    (line   93)
26532* '-mconstant-gp' command-line option, IA-64: IA-64 Options. (line    6)
26533* '-mCPU' command-line option, Alpha:    Alpha Options.      (line    6)
26534* '-mcpu' option, cpu:                   TIC54X-Opts.        (line   15)
26535* '-mcpu=':                              RX-Opts.            (line   75)
26536* '-mcpu=' command-line option, AArch64: AArch64 Options.    (line   19)
26537* '-mcpu=' command-line option, ARM:     ARM Options.        (line    6)
26538* '-mcpu=' command-line option, Blackfin: Blackfin Options.  (line    6)
26539* '-mcpu=' command-line option, M680x0:  M68K-Opts.          (line   14)
26540* '-mcpu=CPU' command-line option, ARC:  ARC Options.        (line   10)
26541* -mcsm:                                 PDP-11-Options.     (line   43)
26542* '-mcsr-check' option, RISC-V:          RISC-V-Options.     (line   60)
26543* '-mdcache-enabled' command-line option, LM32: LM32 Options.
26544                                                             (line   24)
26545* '-mdebug' command-line option, Alpha:  Alpha Options.      (line   25)
26546* '-mdivide-enabled' command-line option, LM32: LM32 Options.
26547                                                             (line    9)
26548* '-mdollar-hex' option, dollar-hex:     S12Z Options.       (line   17)
26549* '-mdpfp' command-line option, ARC:     ARC Options.        (line  108)
26550* '-mdsbt' command-line option, TIC6X:   TIC6X Options.      (line   13)
26551* '-me' option, stderr redirect:         TIC54X-Opts.        (line   20)
26552* -meis:                                 PDP-11-Options.     (line   46)
26553* '-mepiphany' command-line option, Epiphany: Epiphany Options.
26554                                                             (line    9)
26555* '-mepiphany16' command-line option, Epiphany: Epiphany Options.
26556                                                             (line   13)
26557* '-merrors-to-file' option, stderr redirect: TIC54X-Opts.   (line   20)
26558* '-mesa' option, s390:                  s390 Options.       (line   17)
26559* '-mevexlig=' option, i386:             i386-Options.       (line  125)
26560* '-mevexlig=' option, x86-64:           i386-Options.       (line  125)
26561* '-mevexrcig=' option, i386:            i386-Options.       (line  280)
26562* '-mevexrcig=' option, x86-64:          i386-Options.       (line  280)
26563* '-mevexwig=' option, i386:             i386-Options.       (line  135)
26564* '-mevexwig=' option, x86-64:           i386-Options.       (line  135)
26565* '-mf' option, far-mode:                TIC54X-Opts.        (line    8)
26566* -mf11:                                 PDP-11-Options.     (line  122)
26567* '-mfar-mode' option, far-mode:         TIC54X-Opts.        (line    8)
26568* '-mfdpic' command-line option, Blackfin: Blackfin Options. (line   19)
26569* '-mfence-as-lock-add=' option, i386:   i386-Options.       (line  186)
26570* '-mfence-as-lock-add=' option, x86-64: i386-Options.       (line  186)
26571* -mfis:                                 PDP-11-Options.     (line   51)
26572* '-mfloat-abi=' command-line option, ARM: ARM Options.      (line  351)
26573* -mfp-11:                               PDP-11-Options.     (line   56)
26574* '-mfp16-format=' command-line option:  ARM Options.        (line  289)
26575* -mfpp:                                 PDP-11-Options.     (line   56)
26576* -mfpu:                                 PDP-11-Options.     (line   56)
26577* '-mfpu=' command-line option, ARM:     ARM Options.        (line  265)
26578* '-mfpuda' command-line option, ARC:    ARC Options.        (line  111)
26579* '-mgcc-abi':                           RX-Opts.            (line   63)
26580* '-mgcc-abi' command-line option, V850: V850 Options.       (line   79)
26581* '-mgcc-isr' command-line option, AVR:  AVR Options.        (line  132)
26582* '-mhard-float' command-line option, V850: V850 Options.    (line  101)
26583* '-micache-enabled' command-line option, LM32: LM32 Options.
26584                                                             (line   21)
26585* '-mimplicit-it' command-line option, ARM: ARM Options.     (line  312)
26586* '-mint-register':                      RX-Opts.            (line   57)
26587* '-mintel64' option, x86-64:            i386-Options.       (line  290)
26588* '-mip2022' option, IP2K:               IP2K-Opts.          (line   14)
26589* '-mip2022ext' option, IP2022:          IP2K-Opts.          (line    9)
26590* '-misa-spec=ISAspec' option, RISC-V:   RISC-V-Options.     (line   21)
26591* -mj11:                                 PDP-11-Options.     (line  126)
26592* -mka11:                                PDP-11-Options.     (line   92)
26593* -mkb11:                                PDP-11-Options.     (line   95)
26594* -mkd11a:                               PDP-11-Options.     (line   98)
26595* -mkd11b:                               PDP-11-Options.     (line  101)
26596* -mkd11d:                               PDP-11-Options.     (line  104)
26597* -mkd11e:                               PDP-11-Options.     (line  107)
26598* -mkd11f:                               PDP-11-Options.     (line  110)
26599* -mkd11h:                               PDP-11-Options.     (line  110)
26600* -mkd11k:                               PDP-11-Options.     (line  114)
26601* -mkd11q:                               PDP-11-Options.     (line  110)
26602* -mkd11z:                               PDP-11-Options.     (line  118)
26603* -mkev11:                               PDP-11-Options.     (line   51)
26604* -mkev11 <1>:                           PDP-11-Options.     (line   51)
26605* '-mlfence-after-load=' option, i386:   i386-Options.       (line  233)
26606* '-mlfence-after-load=' option, x86-64: i386-Options.       (line  233)
26607* '-mlfence-before-indirect-branch=' option, i386: i386-Options.
26608                                                             (line  240)
26609* '-mlfence-before-indirect-branch=' option, x86-64: i386-Options.
26610                                                             (line  240)
26611* '-mlfence-before-ret=' option, i386:   i386-Options.       (line  260)
26612* '-mlfence-before-ret=' option, x86-64: i386-Options.       (line  260)
26613* -mlimited-eis:                         PDP-11-Options.     (line   64)
26614* '-mlink-relax' command-line option, AVR: AVR Options.      (line  123)
26615* '-mlittle-endian':                     RX-Opts.            (line   26)
26616* '-mlittle-endian' option, RISC-V:      RISC-V-Options.     (line   68)
26617* '-mlong':                              M68HC11-Opts.       (line   45)
26618* '-mlong' <1>:                          XGATE-Opts.         (line   13)
26619* '-mlong-double':                       M68HC11-Opts.       (line   53)
26620* '-mlong-double' <1>:                   XGATE-Opts.         (line   21)
26621* '-mm9s12x':                            M68HC11-Opts.       (line   27)
26622* '-mm9s12xg':                           M68HC11-Opts.       (line   32)
26623* '-mmcu=' command-line option, AVR:     AVR Options.        (line    6)
26624* -mmfpt:                                PDP-11-Options.     (line   70)
26625* -mmicrocode:                           PDP-11-Options.     (line   83)
26626* '-mmnemonic=' option, i386:            i386-Options.       (line  142)
26627* '-mmnemonic=' option, x86-64:          i386-Options.       (line  142)
26628* '-mmultiply-enabled' command-line option, LM32: LM32 Options.
26629                                                             (line    6)
26630* -mmutiproc:                            PDP-11-Options.     (line   73)
26631* -mmxps:                                PDP-11-Options.     (line   77)
26632* '-mnaked-reg' option, i386:            i386-Options.       (line  154)
26633* '-mnaked-reg' option, x86-64:          i386-Options.       (line  154)
26634* '-mnan=' command-line option, MIPS:    MIPS Options.       (line  439)
26635* '-mno-allow-string-insns':             RX-Opts.            (line   82)
26636* '-mno-arch-attr' option, RISC-V:       RISC-V-Options.     (line   56)
26637* -mno-cis:                              PDP-11-Options.     (line   32)
26638* -mno-csm:                              PDP-11-Options.     (line   43)
26639* '-mno-csr-check' option, RISC-V:       RISC-V-Options.     (line   65)
26640* '-mno-dsbt' command-line option, TIC6X: TIC6X Options.     (line   13)
26641* -mno-eis:                              PDP-11-Options.     (line   46)
26642* -mno-extensions:                       PDP-11-Options.     (line   29)
26643* '-mno-fdpic' command-line option, Blackfin: Blackfin Options.
26644                                                             (line   22)
26645* -mno-fis:                              PDP-11-Options.     (line   51)
26646* -mno-fp-11:                            PDP-11-Options.     (line   56)
26647* -mno-fpp:                              PDP-11-Options.     (line   56)
26648* -mno-fpu:                              PDP-11-Options.     (line   56)
26649* -mno-kev11:                            PDP-11-Options.     (line   51)
26650* -mno-limited-eis:                      PDP-11-Options.     (line   64)
26651* '-mno-link-relax' command-line option, AVR: AVR Options.   (line  127)
26652* -mno-mfpt:                             PDP-11-Options.     (line   70)
26653* -mno-microcode:                        PDP-11-Options.     (line   83)
26654* -mno-mutiproc:                         PDP-11-Options.     (line   73)
26655* -mno-mxps:                             PDP-11-Options.     (line   77)
26656* -mno-pic:                              PDP-11-Options.     (line   11)
26657* '-mno-pic' command-line option, TIC6X: TIC6X Options.      (line   36)
26658* '-mno-regnames' option, s390:          s390 Options.       (line   51)
26659* '-mno-relax' option, RISC-V:           RISC-V-Options.     (line   45)
26660* '-mno-skip-bug' command-line option, AVR: AVR Options.     (line  114)
26661* -mno-spl:                              PDP-11-Options.     (line   80)
26662* -mno-sym32:                            MIPS Options.       (line  348)
26663* '-mno-verbose-error' command-line option, AArch64: AArch64 Options.
26664                                                             (line   64)
26665* '-mno-wrap' command-line option, AVR:  AVR Options.        (line  117)
26666* '-mnopic' command-line option, Blackfin: Blackfin Options. (line   22)
26667* '-mnps400' command-line option, ARC:   ARC Options.        (line  102)
26668* '-momit-lock-prefix=' option, i386:    i386-Options.       (line  177)
26669* '-momit-lock-prefix=' option, x86-64:  i386-Options.       (line  177)
26670* -mpic:                                 PDP-11-Options.     (line   11)
26671* '-mpic' command-line option, TIC6X:    TIC6X Options.      (line   36)
26672* '-mpid':                               RX-Opts.            (line   50)
26673* '-mpid=' command-line option, TIC6X:   TIC6X Options.      (line   23)
26674* '-mpriv-spec=PRIVspec' option, RISC-V: RISC-V-Options.     (line   27)
26675* '-mreg-prefix=PREFIX' option, reg-prefix: S12Z Options.    (line    9)
26676* '-mregnames' option, s390:             s390 Options.       (line   48)
26677* '-mrelax' command-line option, ARC:    ARC Options.        (line   97)
26678* '-mrelax' command-line option, V850:   V850 Options.       (line   72)
26679* '-mrelax' option, RISC-V:              RISC-V-Options.     (line   41)
26680* '-mrelax-relocations=' option, i386:   i386-Options.       (line  195)
26681* '-mrelax-relocations=' option, x86-64: i386-Options.       (line  195)
26682* '-mrh850-abi' command-line option, V850: V850 Options.     (line   82)
26683* '-mrmw' command-line option, AVR:      AVR Options.        (line  120)
26684* '-mrx-abi':                            RX-Opts.            (line   69)
26685* '-mshared' option, i386:               i386-Options.       (line  164)
26686* '-mshared' option, x86-64:             i386-Options.       (line  164)
26687* '-mshort':                             M68HC11-Opts.       (line   40)
26688* '-mshort' <1>:                         XGATE-Opts.         (line    8)
26689* '-mshort-double':                      M68HC11-Opts.       (line   49)
26690* '-mshort-double' <1>:                  XGATE-Opts.         (line   17)
26691* '-msign-extend-enabled' command-line option, LM32: LM32 Options.
26692                                                             (line   15)
26693* '-msmall-data-limit':                  RX-Opts.            (line   42)
26694* '-msoft-float' command-line option, V850: V850 Options.    (line   95)
26695* '-mspfp' command-line option, ARC:     ARC Options.        (line  105)
26696* -mspl:                                 PDP-11-Options.     (line   80)
26697* '-msse-check=' option, i386:           i386-Options.       (line   94)
26698* '-msse-check=' option, x86-64:         i386-Options.       (line   94)
26699* '-msse2avx' option, i386:              i386-Options.       (line   90)
26700* '-msse2avx' option, x86-64:            i386-Options.       (line   90)
26701* -msym32:                               MIPS Options.       (line  348)
26702* '-msyntax=' option, i386:              i386-Options.       (line  148)
26703* '-msyntax=' option, x86-64:            i386-Options.       (line  148)
26704* -mt11:                                 PDP-11-Options.     (line  130)
26705* '-mthumb' command-line option, ARM:    ARM Options.        (line  302)
26706* '-mthumb-interwork' command-line option, ARM: ARM Options. (line  307)
26707* '-mtune=' option, i386:                i386-Options.       (line   82)
26708* '-mtune=' option, x86-64:              i386-Options.       (line   82)
26709* '-mtune=ARCH' command-line option, Visium: Visium Options. (line    8)
26710* '-muse-conventional-section-names':    RX-Opts.            (line   33)
26711* '-muse-renesas-section-names':         RX-Opts.            (line   37)
26712* '-muser-enabled' command-line option, LM32: LM32 Options.  (line   18)
26713* '-mv850' command-line option, V850:    V850 Options.       (line   23)
26714* '-mv850any' command-line option, V850: V850 Options.       (line   41)
26715* '-mv850e' command-line option, V850:   V850 Options.       (line   29)
26716* '-mv850e1' command-line option, V850:  V850 Options.       (line   35)
26717* '-mv850e2' command-line option, V850:  V850 Options.       (line   51)
26718* '-mv850e2v3' command-line option, V850: V850 Options.      (line   57)
26719* '-mv850e2v4' command-line option, V850: V850 Options.      (line   63)
26720* '-mv850e3v5' command-line option, V850: V850 Options.      (line   66)
26721* '-mverbose-error' command-line option, AArch64: AArch64 Options.
26722                                                             (line   60)
26723* '-mvexwig=' option, i386:              i386-Options.       (line  115)
26724* '-mvexwig=' option, x86-64:            i386-Options.       (line  115)
26725* '-mvxworks-pic' option, MIPS:          MIPS Options.       (line   26)
26726* '-mwarn-areg-zero' option, s390:       s390 Options.       (line   54)
26727* '-mwarn-deprecated' command-line option, ARM: ARM Options. (line  384)
26728* '-mwarn-syms' command-line option, ARM: ARM Options.       (line  392)
26729* '-mx86-used-note=' option, i386:       i386-Options.       (line  273)
26730* '-mx86-used-note=' option, x86-64:     i386-Options.       (line  273)
26731* '-mzarch' option, s390:                s390 Options.       (line   17)
26732* '-m[no-]68851' command-line option, M680x0: M68K-Opts.     (line   21)
26733* '-m[no-]68881' command-line option, M680x0: M68K-Opts.     (line   21)
26734* '-m[no-]div' command-line option, M680x0: M68K-Opts.       (line   21)
26735* '-m[no-]emac' command-line option, M680x0: M68K-Opts.      (line   21)
26736* '-m[no-]float' command-line option, M680x0: M68K-Opts.     (line   21)
26737* '-m[no-]mac' command-line option, M680x0: M68K-Opts.       (line   21)
26738* '-m[no-]usp' command-line option, M680x0: M68K-Opts.       (line   21)
26739* '-N' command-line option, CRIS:        CRIS-Opts.          (line   59)
26740* '-nIp' option, M32RX:                  M32R-Opts.          (line  101)
26741* '-no-bitinst', M32R2:                  M32R-Opts.          (line   54)
26742* '-no-ignore-parallel-conflicts' option, M32RX: M32R-Opts.  (line   93)
26743* '-no-mdebug' command-line option, Alpha: Alpha Options.    (line   25)
26744* '-no-parallel' option, M32RX:          M32R-Opts.          (line   51)
26745* '-no-warn-explicit-parallel-conflicts' option, M32RX: M32R-Opts.
26746                                                             (line   79)
26747* '-no-warn-unmatched-high' option, M32R: M32R-Opts.         (line  111)
26748* '-nocpp' ignored (MIPS):               MIPS Options.       (line  351)
26749* '-noreplace' command-line option, Alpha: Alpha Options.    (line   40)
26750* -o:                                    o.                  (line    6)
26751* '-O' option, i386:                     i386-Options.       (line  296)
26752* '-O' option, M32RX:                    M32R-Opts.          (line   59)
26753* '-O' option, x86-64:                   i386-Options.       (line  296)
26754* '-O0' option, i386:                    i386-Options.       (line  296)
26755* '-O0' option, x86-64:                  i386-Options.       (line  296)
26756* '-O1' option, i386:                    i386-Options.       (line  296)
26757* '-O1' option, x86-64:                  i386-Options.       (line  296)
26758* '-O2' option, i386:                    i386-Options.       (line  296)
26759* '-O2' option, x86-64:                  i386-Options.       (line  296)
26760* '-Os' option, i386:                    i386-Options.       (line  296)
26761* '-Os' option, x86-64:                  i386-Options.       (line  296)
26762* '-parallel' option, M32RX:             M32R-Opts.          (line   46)
26763* -R:                                    R.                  (line    6)
26764* '-relax' command-line option, Alpha:   Alpha Options.      (line   32)
26765* '-replace' command-line option, Alpha: Alpha Options.      (line   40)
26766* '-S', ignored on VAX:                  VAX-Opts.           (line   11)
26767* '-sdcc' command-line option, Z80:      Z80 Options.        (line   37)
26768* '-T', ignored on VAX:                  VAX-Opts.           (line   11)
26769* '-t', ignored on VAX:                  VAX-Opts.           (line   36)
26770* -v:                                    v.                  (line    6)
26771* '-V', redundant on VAX:                VAX-Opts.           (line   22)
26772* -version:                              v.                  (line    6)
26773* -W:                                    W.                  (line   11)
26774* '-warn-explicit-parallel-conflicts' option, M32RX: M32R-Opts.
26775                                                             (line   65)
26776* '-warn-unmatched-high' option, M32R:   M32R-Opts.          (line  105)
26777* '-Wnp' option, M32RX:                  M32R-Opts.          (line   83)
26778* '-Wnuh' option, M32RX:                 M32R-Opts.          (line  117)
26779* '-Wp' option, M32RX:                   M32R-Opts.          (line   75)
26780* '-wsigned_overflow' command-line option, V850: V850 Options.
26781                                                             (line    9)
26782* '-Wuh' option, M32RX:                  M32R-Opts.          (line  114)
26783* '-wunsigned_overflow' command-line option, V850: V850 Options.
26784                                                             (line   16)
26785* '-x' command-line option, MMIX:        MMIX-Opts.          (line   44)
26786* '-z8001' command-line option, Z8000:   Z8000 Options.      (line    6)
26787* '-z8002' command-line option, Z8000:   Z8000 Options.      (line    9)
26788* '.' (symbol):                          Dot.                (line    6)
26789* '.align' directive, ARM:               ARM Directives.     (line    6)
26790* '.align' directive, TILE-Gx:           TILE-Gx Directives. (line    6)
26791* '.align' directive, TILEPro:           TILEPro Directives. (line    6)
26792* '.allow_suspicious_bundles' directive, TILE-Gx: TILE-Gx Directives.
26793                                                             (line   10)
26794* '.allow_suspicious_bundles' directive, TILEPro: TILEPro Directives.
26795                                                             (line   10)
26796* '.arch' directive, AArch64:            AArch64 Directives. (line    6)
26797* '.arch' directive, ARM:                ARM Directives.     (line   13)
26798* '.arch' directive, TIC6X:              TIC6X Directives.   (line   10)
26799* '.arch_extension' directive, AArch64:  AArch64 Directives. (line   13)
26800* '.arch_extension' directive, ARM:      ARM Directives.     (line   21)
26801* '.arc_attribute' directive, ARC:       ARC Directives.     (line  240)
26802* '.arm' directive, ARM:                 ARM Directives.     (line   30)
26803* '.assume' directive, Z80:              Z80 Directives.     (line   12)
26804* '.attribute' directive, RISC-V:        RISC-V-Directives.  (line  100)
26805* '.big' directive, M32RX:               M32R-Directives.    (line   88)
26806* '.bss' directive, AArch64:             AArch64 Directives. (line   21)
26807* '.bss' directive, ARM:                 ARM Directives.     (line   33)
26808* '.c6xabi_attribute' directive, TIC6X:  TIC6X Directives.   (line   20)
26809* '.cantunwind' directive, ARM:          ARM Directives.     (line   36)
26810* '.cantunwind' directive, TIC6X:        TIC6X Directives.   (line   13)
26811* '.cfi_b_key_frame' directive, AArch64: AArch64 Directives. (line   99)
26812* '.code' directive, ARM:                ARM Directives.     (line   40)
26813* '.cpu' directive, AArch64:             AArch64 Directives. (line   24)
26814* '.cpu' directive, ARM:                 ARM Directives.     (line   44)
26815* '.dn' and '.qn' directives, ARM:       ARM Directives.     (line   52)
26816* '.dword' directive, AArch64:           AArch64 Directives. (line   28)
26817* '.eabi_attribute' directive, ARM:      ARM Directives.     (line   76)
26818* '.ehtype' directive, TIC6X:            TIC6X Directives.   (line   31)
26819* '.endp' directive, TIC6X:              TIC6X Directives.   (line   34)
26820* '.even' directive, AArch64:            AArch64 Directives. (line   31)
26821* '.even' directive, ARM:                ARM Directives.     (line  105)
26822* '.extend' directive, ARM:              ARM Directives.     (line  108)
26823* '.float16' directive, AArch64:         AArch64 Directives. (line   35)
26824* '.float16' directive, ARM:             ARM Directives.     (line  114)
26825* '.float16_format' directive, ARM:      ARM Directives.     (line  122)
26826* '.fnend' directive, ARM:               ARM Directives.     (line  129)
26827* '.fnstart' directive, ARM:             ARM Directives.     (line  137)
26828* '.force_thumb' directive, ARM:         ARM Directives.     (line  140)
26829* '.fpu' directive, ARM:                 ARM Directives.     (line  144)
26830* '.global':                             MIPS insn.          (line   12)
26831* '.gnu_attribute 4, N' directive, MIPS: MIPS FP ABI History.
26832                                                             (line    6)
26833* '.gnu_attribute Tag_GNU_MIPS_ABI_FP, N' directive, MIPS: MIPS FP ABI History.
26834                                                             (line    6)
26835* '.handlerdata' directive, ARM:         ARM Directives.     (line  148)
26836* '.handlerdata' directive, TIC6X:       TIC6X Directives.   (line   39)
26837* '.insn':                               MIPS insn.          (line    6)
26838* '.insn' directive, s390:               s390 Directives.    (line   11)
26839* '.inst' directive, AArch64:            AArch64 Directives. (line   41)
26840* '.inst' directive, ARM:                ARM Directives.     (line  157)
26841* '.ldouble' directive, ARM:             ARM Directives.     (line  108)
26842* '.little' directive, M32RX:            M32R-Directives.    (line   82)
26843* '.long' directive, s390:               s390 Directives.    (line   16)
26844* '.ltorg' directive, AArch64:           AArch64 Directives. (line   45)
26845* '.ltorg' directive, ARM:               ARM Directives.     (line  167)
26846* '.ltorg' directive, s390:              s390 Directives.    (line   79)
26847* '.m32r' directive, M32R:               M32R-Directives.    (line   66)
26848* '.m32r2' directive, M32R2:             M32R-Directives.    (line   77)
26849* '.m32rx' directive, M32RX:             M32R-Directives.    (line   72)
26850* '.machine' directive, s390:            s390 Directives.    (line   84)
26851* '.machinemode' directive, s390:        s390 Directives.    (line  101)
26852* '.module':                             MIPS assembly options.
26853                                                             (line    6)
26854* '.module fp=NN' directive, MIPS:       MIPS FP ABI Selection.
26855                                                             (line    6)
26856* '.movsp' directive, ARM:               ARM Directives.     (line  181)
26857* '.nan' directive, MIPS:                MIPS NaN Encodings. (line    6)
26858* '.nocmp' directive, TIC6X:             TIC6X Directives.   (line   47)
26859* '.no_pointers' directive, XStormy16:   XStormy16 Directives.
26860                                                             (line   14)
26861* .o:                                    Object.             (line    6)
26862* '.object_arch' directive, ARM:         ARM Directives.     (line  186)
26863* '.packed' directive, ARM:              ARM Directives.     (line  192)
26864* '.pad' directive, ARM:                 ARM Directives.     (line  197)
26865* '.param' on HPPA:                      HPPA Directives.    (line   19)
26866* '.personality' directive, ARM:         ARM Directives.     (line  202)
26867* '.personality' directive, TIC6X:       TIC6X Directives.   (line   55)
26868* '.personalityindex' directive, ARM:    ARM Directives.     (line  205)
26869* '.personalityindex' directive, TIC6X:  TIC6X Directives.   (line   51)
26870* '.pool' directive, AArch64:            AArch64 Directives. (line   59)
26871* '.pool' directive, ARM:                ARM Directives.     (line  209)
26872* '.quad' directive, s390:               s390 Directives.    (line   16)
26873* '.req' directive, AArch64:             AArch64 Directives. (line   62)
26874* '.req' directive, ARM:                 ARM Directives.     (line  212)
26875* '.require_canonical_reg_names' directive, TILE-Gx: TILE-Gx Directives.
26876                                                             (line   19)
26877* '.require_canonical_reg_names' directive, TILEPro: TILEPro Directives.
26878                                                             (line   19)
26879* '.save' directive, ARM:                ARM Directives.     (line  217)
26880* '.scomm' directive, TIC6X:             TIC6X Directives.   (line   58)
26881* '.secrel32' directive, ARM:            ARM Directives.     (line  255)
26882* '.set arch=CPU':                       MIPS ISA.           (line   18)
26883* '.set at':                             MIPS Macros.        (line   41)
26884* '.set at=REG':                         MIPS Macros.        (line   35)
26885* '.set autoextend':                     MIPS autoextend.    (line    6)
26886* '.set crc':                            MIPS ASE Instruction Generation Overrides.
26887                                                             (line   68)
26888* '.set doublefloat':                    MIPS Floating-Point.
26889                                                             (line   12)
26890* '.set dsp':                            MIPS ASE Instruction Generation Overrides.
26891                                                             (line   21)
26892* '.set dspr2':                          MIPS ASE Instruction Generation Overrides.
26893                                                             (line   26)
26894* '.set dspr3':                          MIPS ASE Instruction Generation Overrides.
26895                                                             (line   31)
26896* '.set ginv':                           MIPS ASE Instruction Generation Overrides.
26897                                                             (line   72)
26898* '.set hardfloat':                      MIPS Floating-Point.
26899                                                             (line    6)
26900* '.set insn32':                         MIPS assembly options.
26901                                                             (line   18)
26902* '.set loongson-cam':                   MIPS ASE Instruction Generation Overrides.
26903                                                             (line   81)
26904* '.set loongson-ext':                   MIPS ASE Instruction Generation Overrides.
26905                                                             (line   86)
26906* '.set loongson-ext2':                  MIPS ASE Instruction Generation Overrides.
26907                                                             (line   91)
26908* '.set loongson-mmi':                   MIPS ASE Instruction Generation Overrides.
26909                                                             (line   76)
26910* '.set macro':                          MIPS Macros.        (line   30)
26911* '.set mcu':                            MIPS ASE Instruction Generation Overrides.
26912                                                             (line   42)
26913* '.set mdmx':                           MIPS ASE Instruction Generation Overrides.
26914                                                             (line   16)
26915* '.set mips16e2':                       MIPS ASE Instruction Generation Overrides.
26916                                                             (line   61)
26917* '.set mips3d':                         MIPS ASE Instruction Generation Overrides.
26918                                                             (line    6)
26919* '.set mipsN':                          MIPS ISA.           (line    6)
26920* '.set msa':                            MIPS ASE Instruction Generation Overrides.
26921                                                             (line   47)
26922* '.set mt':                             MIPS ASE Instruction Generation Overrides.
26923                                                             (line   37)
26924* '.set noat':                           MIPS Macros.        (line   41)
26925* '.set noautoextend':                   MIPS autoextend.    (line    6)
26926* '.set nocrc':                          MIPS ASE Instruction Generation Overrides.
26927                                                             (line   68)
26928* '.set nodsp':                          MIPS ASE Instruction Generation Overrides.
26929                                                             (line   21)
26930* '.set nodspr2':                        MIPS ASE Instruction Generation Overrides.
26931                                                             (line   26)
26932* '.set nodspr3':                        MIPS ASE Instruction Generation Overrides.
26933                                                             (line   31)
26934* '.set noginv':                         MIPS ASE Instruction Generation Overrides.
26935                                                             (line   72)
26936* '.set noinsn32':                       MIPS assembly options.
26937                                                             (line   18)
26938* '.set noloongson-cam':                 MIPS ASE Instruction Generation Overrides.
26939                                                             (line   81)
26940* '.set noloongson-ext':                 MIPS ASE Instruction Generation Overrides.
26941                                                             (line   86)
26942* '.set noloongson-ext2':                MIPS ASE Instruction Generation Overrides.
26943                                                             (line   91)
26944* '.set noloongson-mmi':                 MIPS ASE Instruction Generation Overrides.
26945                                                             (line   76)
26946* '.set nomacro':                        MIPS Macros.        (line   30)
26947* '.set nomcu':                          MIPS ASE Instruction Generation Overrides.
26948                                                             (line   42)
26949* '.set nomdmx':                         MIPS ASE Instruction Generation Overrides.
26950                                                             (line   16)
26951* '.set nomips16e2':                     MIPS ASE Instruction Generation Overrides.
26952                                                             (line   61)
26953* '.set nomips3d':                       MIPS ASE Instruction Generation Overrides.
26954                                                             (line    6)
26955* '.set nomsa':                          MIPS ASE Instruction Generation Overrides.
26956                                                             (line   47)
26957* '.set nomt':                           MIPS ASE Instruction Generation Overrides.
26958                                                             (line   37)
26959* '.set nosmartmips':                    MIPS ASE Instruction Generation Overrides.
26960                                                             (line   11)
26961* '.set nosym32':                        MIPS Symbol Sizes.  (line    6)
26962* '.set novirt':                         MIPS ASE Instruction Generation Overrides.
26963                                                             (line   52)
26964* '.set noxpa':                          MIPS ASE Instruction Generation Overrides.
26965                                                             (line   57)
26966* '.set pop':                            MIPS Option Stack.  (line    6)
26967* '.set push':                           MIPS Option Stack.  (line    6)
26968* '.set singlefloat':                    MIPS Floating-Point.
26969                                                             (line   12)
26970* '.set smartmips':                      MIPS ASE Instruction Generation Overrides.
26971                                                             (line   11)
26972* '.set softfloat':                      MIPS Floating-Point.
26973                                                             (line    6)
26974* '.set sym32':                          MIPS Symbol Sizes.  (line    6)
26975* '.set virt':                           MIPS ASE Instruction Generation Overrides.
26976                                                             (line   52)
26977* '.set xpa':                            MIPS ASE Instruction Generation Overrides.
26978                                                             (line   57)
26979* '.setfp' directive, ARM:               ARM Directives.     (line  241)
26980* '.short' directive, s390:              s390 Directives.    (line   16)
26981* '.syntax' directive, ARM:              ARM Directives.     (line  260)
26982* '.thumb' directive, ARM:               ARM Directives.     (line  264)
26983* '.thumb_func' directive, ARM:          ARM Directives.     (line  267)
26984* '.thumb_set' directive, ARM:           ARM Directives.     (line  278)
26985* '.tlsdescadd' directive, AArch64:      AArch64 Directives. (line   70)
26986* '.tlsdesccall' directive, AArch64:     AArch64 Directives. (line   73)
26987* '.tlsdescldr' directive, AArch64:      AArch64 Directives. (line   76)
26988* '.tlsdescseq' directive, ARM:          ARM Directives.     (line  285)
26989* '.unreq' directive, AArch64:           AArch64 Directives. (line   79)
26990* '.unreq' directive, ARM:               ARM Directives.     (line  290)
26991* '.unwind_raw' directive, ARM:          ARM Directives.     (line  301)
26992* '.v850' directive, V850:               V850 Directives.    (line   14)
26993* '.v850e' directive, V850:              V850 Directives.    (line   20)
26994* '.v850e1' directive, V850:             V850 Directives.    (line   26)
26995* '.v850e2' directive, V850:             V850 Directives.    (line   32)
26996* '.v850e2v3' directive, V850:           V850 Directives.    (line   38)
26997* '.v850e2v4' directive, V850:           V850 Directives.    (line   44)
26998* '.v850e3v5' directive, V850:           V850 Directives.    (line   50)
26999* '.variant_pcs' directive, AArch64:     AArch64 Directives. (line   90)
27000* '.vsave' directive, ARM:               ARM Directives.     (line  308)
27001* '.xword' directive, AArch64:           AArch64 Directives. (line   95)
27002* .z8001:                                Z8000 Directives.   (line   11)
27003* .z8002:                                Z8000 Directives.   (line   15)
27004* 16-bit code, i386:                     i386-16bit.         (line    6)
27005* '16bit_pointers' directive, XStormy16: XStormy16 Directives.
27006                                                             (line    6)
27007* '16byte' directive, Nios II:           Nios II Directives. (line   28)
27008* '16byte' directive, PRU:               PRU Directives.     (line   25)
27009* '2byte' directive:                     2byte.              (line    6)
27010* '2byte' directive, Nios II:            Nios II Directives. (line   19)
27011* '2byte' directive, PRU:                PRU Directives.     (line   16)
27012* '32bit_pointers' directive, XStormy16: XStormy16 Directives.
27013                                                             (line   10)
27014* 3DNow!, i386:                          i386-SIMD.          (line    6)
27015* 3DNow!, x86-64:                        i386-SIMD.          (line    6)
27016* 430 support:                           MSP430-Dependent.   (line    6)
27017* '4byte' directive:                     4byte.              (line    6)
27018* '4byte' directive, Nios II:            Nios II Directives. (line   22)
27019* '4byte' directive, PRU:                PRU Directives.     (line   19)
27020* '8byte' directive:                     8byte.              (line    6)
27021* '8byte' directive, Nios II:            Nios II Directives. (line   25)
27022* '8byte' directive, PRU:                PRU Directives.     (line   22)
27023* ':' (label):                           Statements.         (line   31)
27024* @gotoff(SYMBOL), ARC modifier:         ARC Modifiers.      (line   20)
27025* @gotpc(SYMBOL), ARC modifier:          ARC Modifiers.      (line   16)
27026* '@hi' pseudo-op, XStormy16:            XStormy16 Opcodes.  (line   21)
27027* '@lo' pseudo-op, XStormy16:            XStormy16 Opcodes.  (line   10)
27028* @pcl(SYMBOL), ARC modifier:            ARC Modifiers.      (line   12)
27029* @plt(SYMBOL), ARC modifier:            ARC Modifiers.      (line   23)
27030* @sda(SYMBOL), ARC modifier:            ARC Modifiers.      (line   28)
27031* @word modifier, D10V:                  D10V-Word.          (line    6)
27032* _ opcode prefix:                       Xtensa Opcodes.     (line    9)
27033* __DYNAMIC__, ARC pre-defined symbol:   ARC Symbols.        (line   14)
27034* __GLOBAL_OFFSET_TABLE__, ARC pre-defined symbol: ARC Symbols.
27035                                                             (line   11)
27036* a.out:                                 Object.             (line    6)
27037* 'a.out' symbol attributes:             a.out Symbols.      (line    6)
27038* AArch64 floating point (IEEE):         AArch64 Floating Point.
27039                                                             (line    6)
27040* AArch64 immediate character:           AArch64-Chars.      (line   13)
27041* AArch64 line comment character:        AArch64-Chars.      (line    6)
27042* AArch64 line separator:                AArch64-Chars.      (line   10)
27043* AArch64 machine directives:            AArch64 Directives. (line    6)
27044* AArch64 opcodes:                       AArch64 Opcodes.    (line    6)
27045* AArch64 options (none):                AArch64 Options.    (line    6)
27046* AArch64 register names:                AArch64-Regs.       (line    6)
27047* AArch64 relocations:                   AArch64-Relocations.
27048                                                             (line    6)
27049* AArch64 support:                       AArch64-Dependent.  (line    6)
27050* 'abort' directive:                     Abort.              (line    6)
27051* 'ABORT' directive:                     ABORT (COFF).       (line    6)
27052* absolute section:                      Ld Sections.        (line   29)
27053* 'absolute-literals' directive:         Absolute Literals Directive.
27054                                                             (line    6)
27055* 'ADDI' instructions, relaxation:       Xtensa Immediate Relaxation.
27056                                                             (line   43)
27057* addition, permitted arguments:         Infix Ops.          (line   45)
27058* addresses:                             Expressions.        (line    6)
27059* addresses, format of:                  Secs Background.    (line   65)
27060* addressing modes, D10V:                D10V-Addressing.    (line    6)
27061* addressing modes, D30V:                D30V-Addressing.    (line    6)
27062* addressing modes, H8/300:              H8/300-Addressing.  (line    6)
27063* addressing modes, M680x0:              M68K-Syntax.        (line   21)
27064* addressing modes, M68HC11:             M68HC11-Syntax.     (line   29)
27065* addressing modes, S12Z:                S12Z Addressing Modes.
27066                                                             (line    6)
27067* addressing modes, SH:                  SH-Addressing.      (line    6)
27068* addressing modes, XGATE:               XGATE-Syntax.       (line   28)
27069* addressing modes, Z8000:               Z8000-Addressing.   (line    6)
27070* 'ADR reg,<label>' pseudo op, ARM:      ARM Opcodes.        (line   25)
27071* 'ADRL reg,<label>' pseudo op, ARM:     ARM Opcodes.        (line   43)
27072* ADRP, ADD, LDR/STR group relocations, AArch64: AArch64-Relocations.
27073                                                             (line   14)
27074* advancing location counter:            Org.                (line    6)
27075* 'align' directive:                     Align.              (line    6)
27076* 'align' directive <1>:                 RISC-V-Directives.  (line    8)
27077* 'align' directive, Nios II:            Nios II Directives. (line    6)
27078* 'align' directive, OpenRISC:           OpenRISC-Directives.
27079                                                             (line    9)
27080* 'align' directive, PRU:                PRU Directives.     (line    6)
27081* 'align' directive, SPARC:              Sparc-Directives.   (line    9)
27082* 'align' directive, TIC54X:             TIC54X-Directives.  (line    6)
27083* aligned instruction bundle:            Bundle directives.  (line    9)
27084* alignment for NEON instructions:       ARM-Neon-Alignment. (line    6)
27085* alignment of branch targets:           Xtensa Automatic Alignment.
27086                                                             (line    6)
27087* alignment of 'LOOP' instructions:      Xtensa Automatic Alignment.
27088                                                             (line    6)
27089* Alpha floating point (IEEE):           Alpha Floating Point.
27090                                                             (line    6)
27091* Alpha line comment character:          Alpha-Chars.        (line    6)
27092* Alpha line separator:                  Alpha-Chars.        (line   11)
27093* Alpha notes:                           Alpha Notes.        (line    6)
27094* Alpha options:                         Alpha Options.      (line    6)
27095* Alpha registers:                       Alpha-Regs.         (line    6)
27096* Alpha relocations:                     Alpha-Relocs.       (line    6)
27097* Alpha support:                         Alpha-Dependent.    (line    6)
27098* Alpha Syntax:                          Alpha Options.      (line   60)
27099* Alpha-only directives:                 Alpha Directives.   (line    9)
27100* Altera Nios II support:                NiosII-Dependent.   (line    6)
27101* altered difference tables:             Word.               (line   12)
27102* alternate syntax for the 680x0:        M68K-Moto-Syntax.   (line    6)
27103* ARC Branch Target Address:             ARC-Regs.           (line   60)
27104* ARC BTA saved on exception entry:      ARC-Regs.           (line   79)
27105* ARC Build configuration for: BTA Registers: ARC-Regs.      (line   89)
27106* ARC Build configuration for: Core Registers: ARC-Regs.     (line   97)
27107* ARC Build configuration for: Interrupts: ARC-Regs.         (line   93)
27108* ARC Build Configuration Registers Version: ARC-Regs.       (line   85)
27109* ARC C preprocessor macro separator:    ARC-Chars.          (line   31)
27110* ARC core general registers:            ARC-Regs.           (line   10)
27111* ARC DCCM RAM Configuration Register:   ARC-Regs.           (line  101)
27112* ARC Exception Cause Register:          ARC-Regs.           (line   63)
27113* ARC Exception Return Address:          ARC-Regs.           (line   76)
27114* ARC extension core registers:          ARC-Regs.           (line   38)
27115* ARC frame pointer:                     ARC-Regs.           (line   17)
27116* ARC global pointer:                    ARC-Regs.           (line   14)
27117* ARC interrupt link register:           ARC-Regs.           (line   27)
27118* ARC Interrupt Vector Base address:     ARC-Regs.           (line   66)
27119* ARC level 1 interrupt link register:   ARC-Regs.           (line   23)
27120* ARC level 2 interrupt link register:   ARC-Regs.           (line   31)
27121* ARC line comment character:            ARC-Chars.          (line   11)
27122* ARC line separator:                    ARC-Chars.          (line   27)
27123* ARC link register:                     ARC-Regs.           (line   35)
27124* ARC loop counter:                      ARC-Regs.           (line   41)
27125* ARC machine directives:                ARC Directives.     (line    6)
27126* ARC opcodes:                           ARC Opcodes.        (line    6)
27127* ARC options:                           ARC Options.        (line    6)
27128* ARC Processor Identification register: ARC-Regs.           (line   51)
27129* ARC Program Counter:                   ARC-Regs.           (line   54)
27130* ARC register name prefix character:    ARC-Chars.          (line    7)
27131* ARC register names:                    ARC-Regs.           (line    6)
27132* ARC Saved User Stack Pointer:          ARC-Regs.           (line   73)
27133* ARC stack pointer:                     ARC-Regs.           (line   20)
27134* ARC Status register:                   ARC-Regs.           (line   57)
27135* ARC STATUS32 saved on exception:       ARC-Regs.           (line   82)
27136* ARC Stored STATUS32 register on entry to level P0 interrupts: ARC-Regs.
27137                                                             (line   69)
27138* ARC support:                           ARC-Dependent.      (line    6)
27139* ARC symbol prefix character:           ARC-Chars.          (line   20)
27140* ARC word aligned program counter:      ARC-Regs.           (line   44)
27141* arch directive, i386:                  i386-Arch.          (line    6)
27142* 'arch' directive, M680x0:              M68K-Directives.    (line   22)
27143* 'arch' directive, MSP 430:             MSP430 Directives.  (line   18)
27144* arch directive, x86-64:                i386-Arch.          (line    6)
27145* architecture options, IP2022:          IP2K-Opts.          (line    9)
27146* architecture options, IP2K:            IP2K-Opts.          (line   14)
27147* architecture options, M16C:            M32C-Opts.          (line   12)
27148* architecture options, M32C:            M32C-Opts.          (line    9)
27149* architecture options, M32R:            M32R-Opts.          (line   21)
27150* architecture options, M32R2:           M32R-Opts.          (line   17)
27151* architecture options, M32RX:           M32R-Opts.          (line    9)
27152* architecture options, M680x0:          M68K-Opts.          (line   99)
27153* Architecture variant option, CRIS:     CRIS-Opts.          (line   34)
27154* architectures, Meta:                   Meta Options.       (line    6)
27155* architectures, PowerPC:                PowerPC-Opts.       (line    6)
27156* architectures, SCORE:                  SCORE-Opts.         (line    6)
27157* architectures, SPARC:                  Sparc-Opts.         (line    6)
27158* arguments for addition:                Infix Ops.          (line   45)
27159* arguments for subtraction:             Infix Ops.          (line   50)
27160* arguments in expressions:              Arguments.          (line    6)
27161* arithmetic functions:                  Operators.          (line    6)
27162* arithmetic operands:                   Arguments.          (line    6)
27163* ARM data relocations:                  ARM-Relocations.    (line    6)
27164* ARM floating point (IEEE):             ARM Floating Point. (line    6)
27165* ARM identifiers:                       ARM-Chars.          (line   19)
27166* ARM immediate character:               ARM-Chars.          (line   17)
27167* ARM line comment character:            ARM-Chars.          (line    6)
27168* ARM line separator:                    ARM-Chars.          (line   14)
27169* ARM machine directives:                ARM Directives.     (line    6)
27170* ARM opcodes:                           ARM Opcodes.        (line    6)
27171* ARM options (none):                    ARM Options.        (line    6)
27172* ARM register names:                    ARM-Regs.           (line    6)
27173* ARM support:                           ARM-Dependent.      (line    6)
27174* 'ascii' directive:                     Ascii.              (line    6)
27175* 'asciz' directive:                     Asciz.              (line    6)
27176* 'asg' directive, TIC54X:               TIC54X-Directives.  (line   18)
27177* assembler bugs, reporting:             Bug Reporting.      (line    6)
27178* assembler crash:                       Bug Criteria.       (line    9)
27179* assembler directive .3byte, RX:        RX-Directives.      (line    9)
27180* assembler directive .arch, CRIS:       CRIS-Pseudos.       (line   50)
27181* assembler directive .dword, CRIS:      CRIS-Pseudos.       (line   12)
27182* assembler directive .far, M68HC11:     M68HC11-Directives. (line   20)
27183* assembler directive .fetchalign, RX:   RX-Directives.      (line   13)
27184* assembler directive .interrupt, M68HC11: M68HC11-Directives.
27185                                                             (line   26)
27186* assembler directive .mode, M68HC11:    M68HC11-Directives. (line   16)
27187* assembler directive .relax, M68HC11:   M68HC11-Directives. (line   10)
27188* assembler directive .syntax, CRIS:     CRIS-Pseudos.       (line   18)
27189* assembler directive .xrefb, M68HC11:   M68HC11-Directives. (line   31)
27190* assembler directive BSPEC, MMIX:       MMIX-Pseudos.       (line  137)
27191* assembler directive BYTE, MMIX:        MMIX-Pseudos.       (line  101)
27192* assembler directive ESPEC, MMIX:       MMIX-Pseudos.       (line  137)
27193* assembler directive GREG, MMIX:        MMIX-Pseudos.       (line   53)
27194* assembler directive IS, MMIX:          MMIX-Pseudos.       (line   44)
27195* assembler directive LOC, MMIX:         MMIX-Pseudos.       (line    7)
27196* assembler directive LOCAL, MMIX:       MMIX-Pseudos.       (line   29)
27197* assembler directive OCTA, MMIX:        MMIX-Pseudos.       (line  113)
27198* assembler directive PREFIX, MMIX:      MMIX-Pseudos.       (line  125)
27199* assembler directive TETRA, MMIX:       MMIX-Pseudos.       (line  113)
27200* assembler directive WYDE, MMIX:        MMIX-Pseudos.       (line  113)
27201* assembler directives, CRIS:            CRIS-Pseudos.       (line    6)
27202* assembler directives, M68HC11:         M68HC11-Directives. (line    6)
27203* assembler directives, M68HC12:         M68HC11-Directives. (line    6)
27204* assembler directives, MMIX:            MMIX-Pseudos.       (line    6)
27205* assembler directives, RL78:            RL78-Directives.    (line    6)
27206* assembler directives, RX:              RX-Directives.      (line    6)
27207* assembler directives, XGATE:           XGATE-Directives.   (line    6)
27208* assembler internal logic error:        As Sections.        (line   13)
27209* assembler version:                     v.                  (line    6)
27210* assembler, and linker:                 Secs Background.    (line   10)
27211* assembly listings, enabling:           a.                  (line    6)
27212* assigning values to symbols:           Setting Symbols.    (line    6)
27213* assigning values to symbols <1>:       Equ.                (line    6)
27214* 'at' register, MIPS:                   MIPS Macros.        (line   35)
27215* attributes, symbol:                    Symbol Attributes.  (line    6)
27216* att_syntax pseudo op, i386:            i386-Variations.    (line    6)
27217* att_syntax pseudo op, x86-64:          i386-Variations.    (line    6)
27218* auxiliary attributes, COFF symbols:    COFF Symbols.       (line   19)
27219* auxiliary symbol information, COFF:    Dim.                (line    6)
27220* AVR line comment character:            AVR-Chars.          (line    6)
27221* AVR line separator:                    AVR-Chars.          (line   14)
27222* AVR modifiers:                         AVR-Modifiers.      (line    6)
27223* AVR opcode summary:                    AVR Opcodes.        (line    6)
27224* AVR options (none):                    AVR Options.        (line    6)
27225* AVR register names:                    AVR-Regs.           (line    6)
27226* AVR support:                           AVR-Dependent.      (line    6)
27227* 'A_DIR' environment variable, TIC54X:  TIC54X-Env.         (line    6)
27228* backslash ('\\'):                      Strings.            (line   40)
27229* backspace ('\b'):                      Strings.            (line   15)
27230* 'balign' directive:                    Balign.             (line    6)
27231* 'balignl' directive:                   Balign.             (line   29)
27232* 'balignw' directive:                   Balign.             (line   29)
27233* 'bes' directive, TIC54X:               TIC54X-Directives.  (line  194)
27234* big endian output, MIPS:               Overview.           (line  855)
27235* big endian output, PJ:                 Overview.           (line  759)
27236* big-endian output, MIPS:               MIPS Options.       (line   13)
27237* big-endian output, TIC6X:              TIC6X Options.      (line   46)
27238* bignums:                               Bignums.            (line    6)
27239* binary constants, TIC54X:              TIC54X-Constants.   (line    8)
27240* binary files, including:               Incbin.             (line    6)
27241* binary integers:                       Integers.           (line    6)
27242* bit names, IA-64:                      IA-64-Bits.         (line    6)
27243* bitfields, not supported on VAX:       VAX-no.             (line    6)
27244* Blackfin directives:                   Blackfin Directives.
27245                                                             (line    6)
27246* Blackfin options (none):               Blackfin Options.   (line    6)
27247* Blackfin support:                      Blackfin-Dependent. (line    6)
27248* Blackfin syntax:                       Blackfin Syntax.    (line    6)
27249* block:                                 Z8000 Directives.   (line   54)
27250* BMI, i386:                             i386-BMI.           (line    6)
27251* BMI, x86-64:                           i386-BMI.           (line    6)
27252* BPF line comment character:            BPF-Chars.          (line    6)
27253* BPF opcodes:                           BPF Opcodes.        (line    6)
27254* BPF options (none):                    BPF Options.        (line    6)
27255* BPF register names:                    BPF-Regs.           (line    6)
27256* BPF support:                           BPF-Dependent.      (line    6)
27257* branch improvement, M680x0:            M68K-Branch.        (line    6)
27258* branch improvement, M68HC11:           M68HC11-Branch.     (line    6)
27259* branch improvement, VAX:               VAX-branch.         (line    6)
27260* branch instructions, relaxation:       Xtensa Branch Relaxation.
27261                                                             (line    6)
27262* Branch Target Address, ARC:            ARC-Regs.           (line   60)
27263* branch target alignment:               Xtensa Automatic Alignment.
27264                                                             (line    6)
27265* 'break' directive, TIC54X:             TIC54X-Directives.  (line  141)
27266* BSD syntax:                            PDP-11-Syntax.      (line    6)
27267* BSS directive:                         RISC-V-Directives.  (line   24)
27268* 'bss' directive, TIC54X:               TIC54X-Directives.  (line   27)
27269* bss section:                           Ld Sections.        (line   20)
27270* bss section <1>:                       bss.                (line    6)
27271* BTA saved on exception entry, ARC:     ARC-Regs.           (line   79)
27272* bug criteria:                          Bug Criteria.       (line    6)
27273* bug reports:                           Bug Reporting.      (line    6)
27274* bugs in assembler:                     Reporting Bugs.     (line    6)
27275* Build configuration for: BTA Registers, ARC: ARC-Regs.     (line   89)
27276* Build configuration for: Core Registers, ARC: ARC-Regs.    (line   97)
27277* Build configuration for: Interrupts, ARC: ARC-Regs.        (line   93)
27278* Build Configuration Registers Version, ARC: ARC-Regs.      (line   85)
27279* Built-in symbols, CRIS:                CRIS-Symbols.       (line    6)
27280* builtin math functions, TIC54X:        TIC54X-Builtins.    (line    6)
27281* builtin subsym functions, TIC54X:      TIC54X-Macros.      (line   16)
27282* bundle:                                Bundle directives.  (line    9)
27283* bundle-locked:                         Bundle directives.  (line   39)
27284* 'bundle_align_mode' directive:         Bundle directives.  (line    9)
27285* 'bundle_lock' directive:               Bundle directives.  (line   31)
27286* 'bundle_unlock' directive:             Bundle directives.  (line   31)
27287* bus lock prefixes, i386:               i386-Prefixes.      (line   36)
27288* bval:                                  Z8000 Directives.   (line   30)
27289* 'byte' directive:                      Byte.               (line    6)
27290* 'byte' directive, TIC54X:              TIC54X-Directives.  (line   34)
27291* C preprocessor macro separator, ARC:   ARC-Chars.          (line   31)
27292* C-SKY options:                         C-SKY Options.      (line    6)
27293* C-SKY support:                         C-SKY-Dependent.    (line    6)
27294* 'C54XDSP_DIR' environment variable, TIC54X: TIC54X-Env.    (line    6)
27295* 'call' directive, Nios II:             Nios II Relocations.
27296                                                             (line   38)
27297* call instructions, i386:               i386-Mnemonics.     (line  114)
27298* call instructions, relaxation:         Xtensa Call Relaxation.
27299                                                             (line    6)
27300* call instructions, x86-64:             i386-Mnemonics.     (line  114)
27301* 'call_hiadj' directive, Nios II:       Nios II Relocations.
27302                                                             (line   38)
27303* 'call_lo' directive, Nios II:          Nios II Relocations.
27304                                                             (line   38)
27305* carriage return ('backslash-r'):       Strings.            (line   24)
27306* case sensitivity, Z80:                 Z80-Case.           (line    6)
27307* 'cfi_endproc' directive:               CFI directives.     (line   40)
27308* 'cfi_fde_data' directive:              CFI directives.     (line   66)
27309* 'cfi_personality' directive:           CFI directives.     (line   47)
27310* 'cfi_personality_id' directive:        CFI directives.     (line   59)
27311* 'cfi_sections' directive:              CFI directives.     (line    9)
27312* 'cfi_startproc' directive:             CFI directives.     (line   30)
27313* 'char' directive, TIC54X:              TIC54X-Directives.  (line   34)
27314* character constant, Z80:               Z80-Chars.          (line   20)
27315* character constants:                   Characters.         (line    6)
27316* character escape codes:                Strings.            (line   15)
27317* character escapes, Z80:                Z80-Chars.          (line   18)
27318* character, single:                     Chars.              (line    6)
27319* characters used in symbols:            Symbol Intro.       (line    6)
27320* 'clink' directive, TIC54X:             TIC54X-Directives.  (line   43)
27321* 'code16' directive, i386:              i386-16bit.         (line    6)
27322* 'code16gcc' directive, i386:           i386-16bit.         (line    6)
27323* 'code32' directive, i386:              i386-16bit.         (line    6)
27324* 'code64' directive, i386:              i386-16bit.         (line    6)
27325* 'code64' directive, x86-64:            i386-16bit.         (line    6)
27326* COFF auxiliary symbol information:     Dim.                (line    6)
27327* COFF structure debugging:              Tag.                (line    6)
27328* COFF symbol attributes:                COFF Symbols.       (line    6)
27329* COFF symbol descriptor:                Desc.               (line    6)
27330* COFF symbol storage class:             Scl.                (line    6)
27331* COFF symbol type:                      Type.               (line   11)
27332* COFF symbols, debugging:               Def.                (line    6)
27333* COFF value attribute:                  Val.                (line    6)
27334* COMDAT:                                Linkonce.           (line    6)
27335* 'comm' directive:                      Comm.               (line    6)
27336* command line conventions:              Command Line.       (line    6)
27337* command-line options ignored, VAX:     VAX-Opts.           (line    6)
27338* command-line options, V850:            V850 Options.       (line    9)
27339* comment character, XStormy16:          XStormy16-Chars.    (line   11)
27340* comments:                              Comments.           (line    6)
27341* comments, M680x0:                      M68K-Chars.         (line    6)
27342* comments, removed by preprocessor:     Preprocessing.      (line   11)
27343* 'common' directive, SPARC:             Sparc-Directives.   (line   12)
27344* common sections:                       Linkonce.           (line    6)
27345* common variable storage:               bss.                (line    6)
27346* comparison expressions:                Infix Ops.          (line   56)
27347* conditional assembly:                  If.                 (line    6)
27348* constant, single character:            Chars.              (line    6)
27349* constants:                             Constants.          (line    6)
27350* constants, bignum:                     Bignums.            (line    6)
27351* constants, character:                  Characters.         (line    6)
27352* constants, converted by preprocessor:  Preprocessing.      (line   14)
27353* constants, floating point:             Flonums.            (line    6)
27354* constants, integer:                    Integers.           (line    6)
27355* constants, number:                     Numbers.            (line    6)
27356* constants, Sparc:                      Sparc-Constants.    (line    6)
27357* constants, string:                     Strings.            (line    6)
27358* constants, TIC54X:                     TIC54X-Constants.   (line    6)
27359* conversion instructions, i386:         i386-Mnemonics.     (line   66)
27360* conversion instructions, x86-64:       i386-Mnemonics.     (line   66)
27361* coprocessor wait, i386:                i386-Prefixes.      (line   40)
27362* 'copy' directive, TIC54X:              TIC54X-Directives.  (line   52)
27363* core general registers, ARC:           ARC-Regs.           (line   10)
27364* 'cpu' directive, ARC:                  ARC Directives.     (line   27)
27365* 'cpu' directive, M680x0:               M68K-Directives.    (line   30)
27366* 'cpu' directive, MSP 430:              MSP430 Directives.  (line   22)
27367* CR16 line comment character:           CR16-Chars.         (line    6)
27368* CR16 line separator:                   CR16-Chars.         (line   12)
27369* CR16 Operand Qualifiers:               CR16 Operand Qualifiers.
27370                                                             (line    6)
27371* CR16 support:                          CR16-Dependent.     (line    6)
27372* crash of assembler:                    Bug Criteria.       (line    9)
27373* CRIS '--emulation=crisaout' command-line option: CRIS-Opts.
27374                                                             (line    9)
27375* CRIS '--emulation=criself' command-line option: CRIS-Opts. (line    9)
27376* CRIS '--march=ARCHITECTURE' command-line option: CRIS-Opts.
27377                                                             (line   34)
27378* CRIS '--mul-bug-abort' command-line option: CRIS-Opts.     (line   63)
27379* CRIS '--no-mul-bug-abort' command-line option: CRIS-Opts.  (line   63)
27380* CRIS '--no-underscore' command-line option: CRIS-Opts.     (line   15)
27381* CRIS '--pic' command-line option:      CRIS-Opts.          (line   27)
27382* CRIS '--underscore' command-line option: CRIS-Opts.        (line   15)
27383* CRIS '-N' command-line option:         CRIS-Opts.          (line   59)
27384* CRIS architecture variant option:      CRIS-Opts.          (line   34)
27385* CRIS assembler directive .arch:        CRIS-Pseudos.       (line   50)
27386* CRIS assembler directive .dword:       CRIS-Pseudos.       (line   12)
27387* CRIS assembler directive .syntax:      CRIS-Pseudos.       (line   18)
27388* CRIS assembler directives:             CRIS-Pseudos.       (line    6)
27389* CRIS built-in symbols:                 CRIS-Symbols.       (line    6)
27390* CRIS instruction expansion:            CRIS-Expand.        (line    6)
27391* CRIS line comment characters:          CRIS-Chars.         (line    6)
27392* CRIS options:                          CRIS-Opts.          (line    6)
27393* CRIS position-independent code:        CRIS-Opts.          (line   27)
27394* CRIS pseudo-op .arch:                  CRIS-Pseudos.       (line   50)
27395* CRIS pseudo-op .dword:                 CRIS-Pseudos.       (line   12)
27396* CRIS pseudo-op .syntax:                CRIS-Pseudos.       (line   18)
27397* CRIS pseudo-ops:                       CRIS-Pseudos.       (line    6)
27398* CRIS register names:                   CRIS-Regs.          (line    6)
27399* CRIS support:                          CRIS-Dependent.     (line    6)
27400* CRIS symbols in position-independent code: CRIS-Pic.       (line    6)
27401* 'ctbp' register, V850:                 V850-Regs.          (line   90)
27402* 'ctoff' pseudo-op, V850:               V850 Opcodes.       (line  110)
27403* 'ctpc' register, V850:                 V850-Regs.          (line   82)
27404* 'ctpsw' register, V850:                V850-Regs.          (line   84)
27405* current address:                       Dot.                (line    6)
27406* current address, advancing:            Org.                (line    6)
27407* 'c_mode' directive, TIC54X:            TIC54X-Directives.  (line   49)
27408* D10V @word modifier:                   D10V-Word.          (line    6)
27409* D10V addressing modes:                 D10V-Addressing.    (line    6)
27410* D10V floating point:                   D10V-Float.         (line    6)
27411* D10V line comment character:           D10V-Chars.         (line    6)
27412* D10V opcode summary:                   D10V-Opcodes.       (line    6)
27413* D10V optimization:                     Overview.           (line  638)
27414* D10V options:                          D10V-Opts.          (line    6)
27415* D10V registers:                        D10V-Regs.          (line    6)
27416* D10V size modifiers:                   D10V-Size.          (line    6)
27417* D10V sub-instruction ordering:         D10V-Chars.         (line   14)
27418* D10V sub-instructions:                 D10V-Subs.          (line    6)
27419* D10V support:                          D10V-Dependent.     (line    6)
27420* D10V syntax:                           D10V-Syntax.        (line    6)
27421* 'd24' directive, Z80:                  Z80 Directives.     (line   32)
27422* D30V addressing modes:                 D30V-Addressing.    (line    6)
27423* D30V floating point:                   D30V-Float.         (line    6)
27424* D30V Guarded Execution:                D30V-Guarded.       (line    6)
27425* D30V line comment character:           D30V-Chars.         (line    6)
27426* D30V nops:                             Overview.           (line  646)
27427* D30V nops after 32-bit multiply:       Overview.           (line  649)
27428* D30V opcode summary:                   D30V-Opcodes.       (line    6)
27429* D30V optimization:                     Overview.           (line  643)
27430* D30V options:                          D30V-Opts.          (line    6)
27431* D30V registers:                        D30V-Regs.          (line    6)
27432* D30V size modifiers:                   D30V-Size.          (line    6)
27433* D30V sub-instruction ordering:         D30V-Chars.         (line   14)
27434* D30V sub-instructions:                 D30V-Subs.          (line    6)
27435* D30V support:                          D30V-Dependent.     (line    6)
27436* D30V syntax:                           D30V-Syntax.        (line    6)
27437* 'd32' directive, Z80:                  Z80 Directives.     (line   37)
27438* data alignment on SPARC:               Sparc-Aligned-Data. (line    6)
27439* data and text sections, joining:       R.                  (line    6)
27440* 'data' directive:                      Data.               (line    6)
27441* 'data' directive, TIC54X:              TIC54X-Directives.  (line   59)
27442* Data directives:                       RISC-V-Directives.  (line   12)
27443* data relocations, ARM:                 ARM-Relocations.    (line    6)
27444* data section:                          Ld Sections.        (line    9)
27445* 'data1' directive, M680x0:             M68K-Directives.    (line    9)
27446* 'data2' directive, M680x0:             M68K-Directives.    (line   12)
27447* 'db' directive, Z80:                   Z80 Directives.     (line   18)
27448* 'dbpc' register, V850:                 V850-Regs.          (line   86)
27449* 'dbpsw' register, V850:                V850-Regs.          (line   88)
27450* 'dc' directive:                        Dc.                 (line    6)
27451* 'dcb' directive:                       Dcb.                (line    6)
27452* DCCM RAM Configuration Register, ARC:  ARC-Regs.           (line  101)
27453* debuggers, and symbol order:           Symbols.            (line   10)
27454* debugging COFF symbols:                Def.                (line    6)
27455* DEC syntax:                            PDP-11-Syntax.      (line    6)
27456* decimal integers:                      Integers.           (line   12)
27457* 'def' directive:                       Def.                (line    6)
27458* 'def' directive, TIC54X:               TIC54X-Directives.  (line  101)
27459* 'def24' directive, Z80:                Z80 Directives.     (line   33)
27460* 'def32' directive, Z80:                Z80 Directives.     (line   38)
27461* 'defb' directive, Z80:                 Z80 Directives.     (line   19)
27462* 'defl' directive, Z80:                 Z80 Directives.     (line   47)
27463* 'defm' directive, Z80:                 Z80 Directives.     (line   20)
27464* 'defs' directive, Z80:                 Z80 Directives.     (line   43)
27465* 'defw' directive, Z80:                 Z80 Directives.     (line   28)
27466* density instructions:                  Density Instructions.
27467                                                             (line    6)
27468* dependency tracking:                   MD.                 (line    6)
27469* deprecated directives:                 Deprecated.         (line    6)
27470* 'desc' directive:                      Desc.               (line    6)
27471* descriptor, of 'a.out' symbol:         Symbol Desc.        (line    6)
27472* 'dfloat' directive, VAX:               VAX-directives.     (line    9)
27473* difference tables altered:             Word.               (line   12)
27474* difference tables, warning:            K.                  (line    6)
27475* differences, mmixal:                   MMIX-mmixal.        (line    6)
27476* 'dim' directive:                       Dim.                (line    6)
27477* directives and instructions:           Statements.         (line   20)
27478* directives for PowerPC:                PowerPC-Pseudo.     (line    6)
27479* directives for SCORE:                  SCORE-Pseudo.       (line    6)
27480* directives, Blackfin:                  Blackfin Directives.
27481                                                             (line    6)
27482* directives, M32R:                      M32R-Directives.    (line    6)
27483* directives, M680x0:                    M68K-Directives.    (line    6)
27484* directives, machine independent:       Pseudo Ops.         (line    6)
27485* directives, Xtensa:                    Xtensa Directives.  (line    6)
27486* directives, Z8000:                     Z8000 Directives.   (line    6)
27487* Disable floating-point instructions:   MIPS Floating-Point.
27488                                                             (line    6)
27489* Disable single-precision floating-point operations: MIPS Floating-Point.
27490                                                             (line   12)
27491* displacement sizing character, VAX:    VAX-operands.       (line   12)
27492* dollar local symbols:                  Symbol Names.       (line  113)
27493* dot (symbol):                          Dot.                (line    6)
27494* 'double' directive:                    Double.             (line    6)
27495* 'double' directive, i386:              i386-Float.         (line   14)
27496* 'double' directive, M680x0:            M68K-Float.         (line   14)
27497* 'double' directive, M68HC11:           M68HC11-Float.      (line   14)
27498* 'double' directive, RX:                RX-Float.           (line   11)
27499* 'double' directive, TIC54X:            TIC54X-Directives.  (line   62)
27500* 'double' directive, VAX:               VAX-float.          (line   15)
27501* 'double' directive, x86-64:            i386-Float.         (line   14)
27502* 'double' directive, XGATE:             XGATE-Float.        (line   13)
27503* doublequote ('\"'):                    Strings.            (line   43)
27504* 'drlist' directive, TIC54X:            TIC54X-Directives.  (line   71)
27505* 'drnolist' directive, TIC54X:          TIC54X-Directives.  (line   71)
27506* 'ds' directive:                        Ds.                 (line    6)
27507* 'ds' directive, Z80:                   Z80 Directives.     (line   42)
27508* DTP-relative data directives:          RISC-V-Directives.  (line   18)
27509* 'dw' directive, Z80:                   Z80 Directives.     (line   27)
27510* 'dword' directive, BPF:                BPF Directives.     (line   15)
27511* 'dword' directive, Nios II:            Nios II Directives. (line   16)
27512* 'dword' directive, PRU:                PRU Directives.     (line   13)
27513* 'EB' command-line option, C-SKY:       C-SKY Options.      (line   18)
27514* 'EB' command-line option, Nios II:     Nios II Options.    (line   22)
27515* 'ecr' register, V850:                  V850-Regs.          (line   78)
27516* eight-byte integer:                    Quad.               (line    9)
27517* eight-byte integer <1>:                8byte.              (line    6)
27518* 'eipc' register, V850:                 V850-Regs.          (line   70)
27519* 'eipsw' register, V850:                V850-Regs.          (line   72)
27520* 'eject' directive:                     Eject.              (line    6)
27521* 'EL' command-line option, C-SKY:       C-SKY Options.      (line   14)
27522* 'EL' command-line option, Nios II:     Nios II Options.    (line   25)
27523* ELF symbol type:                       Type.               (line   22)
27524* 'else' directive:                      Else.               (line    6)
27525* 'elseif' directive:                    Elseif.             (line    6)
27526* empty expressions:                     Empty Exprs.        (line    6)
27527* 'emsg' directive, TIC54X:              TIC54X-Directives.  (line   75)
27528* emulation:                             Overview.           (line 1109)
27529* encoding options, i386:                i386-Mnemonics.     (line   38)
27530* encoding options, x86-64:              i386-Mnemonics.     (line   38)
27531* 'end' directive:                       End.                (line    6)
27532* 'endef' directive:                     Endef.              (line    6)
27533* 'endfunc' directive:                   Endfunc.            (line    6)
27534* endianness, MIPS:                      Overview.           (line  855)
27535* endianness, PJ:                        Overview.           (line  759)
27536* 'endif' directive:                     Endif.              (line    6)
27537* 'endloop' directive, TIC54X:           TIC54X-Directives.  (line  141)
27538* 'endm' directive:                      Macro.              (line  137)
27539* 'endm' directive, TIC54X:              TIC54X-Directives.  (line  151)
27540* 'endproc' directive, OpenRISC:         OpenRISC-Directives.
27541                                                             (line   24)
27542* 'endstruct' directive, TIC54X:         TIC54X-Directives.  (line  214)
27543* 'endunion' directive, TIC54X:          TIC54X-Directives.  (line  248)
27544* environment settings, TIC54X:          TIC54X-Env.         (line    6)
27545* EOF, newline must precede:             Statements.         (line   14)
27546* 'ep' register, V850:                   V850-Regs.          (line   66)
27547* Epiphany line comment character:       Epiphany-Chars.     (line    6)
27548* Epiphany line separator:               Epiphany-Chars.     (line   14)
27549* Epiphany options:                      Epiphany Options.   (line    6)
27550* Epiphany support:                      Epiphany-Dependent. (line    6)
27551* 'equ' directive:                       Equ.                (line    6)
27552* 'equ' directive, TIC54X:               TIC54X-Directives.  (line  189)
27553* 'equ' directive, Z80:                  Z80 Directives.     (line   52)
27554* 'equiv' directive:                     Equiv.              (line    6)
27555* 'eqv' directive:                       Eqv.                (line    6)
27556* 'err' directive:                       Err.                (line    6)
27557* error directive:                       Error.              (line    6)
27558* error messages:                        Errors.             (line    6)
27559* error on valid input:                  Bug Criteria.       (line   12)
27560* errors, caused by warnings:            W.                  (line   16)
27561* errors, continuing after:              Z.                  (line    6)
27562* escape codes, character:               Strings.            (line   15)
27563* 'eval' directive, TIC54X:              TIC54X-Directives.  (line   22)
27564* even:                                  Z8000 Directives.   (line   57)
27565* 'even' directive, M680x0:              M68K-Directives.    (line   15)
27566* 'even' directive, TIC54X:              TIC54X-Directives.  (line    6)
27567* Exception Cause Register, ARC:         ARC-Regs.           (line   63)
27568* Exception Return Address, ARC:         ARC-Regs.           (line   76)
27569* 'exitm' directive:                     Macro.              (line  140)
27570* expr (internal section):               As Sections.        (line   17)
27571* expression arguments:                  Arguments.          (line    6)
27572* expressions:                           Expressions.        (line    6)
27573* expressions, comparison:               Infix Ops.          (line   56)
27574* expressions, empty:                    Empty Exprs.        (line    6)
27575* expressions, integer:                  Integer Exprs.      (line    6)
27576* 'extAuxRegister' directive, ARC:       ARC Directives.     (line  105)
27577* 'extCondCode' directive, ARC:          ARC Directives.     (line  126)
27578* 'extCoreRegister' directive, ARC:      ARC Directives.     (line  137)
27579* 'extend' directive M680x0:             M68K-Float.         (line   17)
27580* 'extend' directive M68HC11:            M68HC11-Float.      (line   17)
27581* 'extend' directive XGATE:              XGATE-Float.        (line   16)
27582* extension core registers, ARC:         ARC-Regs.           (line   38)
27583* extension instructions, i386:          i386-Mnemonics.     (line   85)
27584* extension instructions, x86-64:        i386-Mnemonics.     (line   85)
27585* 'extern' directive:                    Extern.             (line    6)
27586* 'extInstruction' directive, ARC:       ARC Directives.     (line  164)
27587* 'fail' directive:                      Fail.               (line    6)
27588* 'far_mode' directive, TIC54X:          TIC54X-Directives.  (line   80)
27589* faster processing ('-f'):              f.                  (line    6)
27590* fatal signal:                          Bug Criteria.       (line    9)
27591* 'fclist' directive, TIC54X:            TIC54X-Directives.  (line   85)
27592* 'fcnolist' directive, TIC54X:          TIC54X-Directives.  (line   85)
27593* 'fepc' register, V850:                 V850-Regs.          (line   74)
27594* 'fepsw' register, V850:                V850-Regs.          (line   76)
27595* 'ffloat' directive, VAX:               VAX-directives.     (line   13)
27596* 'field' directive, TIC54X:             TIC54X-Directives.  (line   89)
27597* 'file' directive:                      File.               (line    6)
27598* 'file' directive, MSP 430:             MSP430 Directives.  (line    6)
27599* file name, logical:                    File.               (line   13)
27600* file names and line numbers, in warnings/errors: Errors.   (line   16)
27601* files, including:                      Include.            (line    6)
27602* files, input:                          Input Files.        (line    6)
27603* 'fill' directive:                      Fill.               (line    6)
27604* filling memory:                        Skip.               (line    6)
27605* filling memory <1>:                    Space.              (line    6)
27606* filling memory with no-op instructions: Nop.               (line    6)
27607* filling memory with no-op instructions <1>: Nops.          (line    6)
27608* filling memory with zero bytes:        Zero.               (line    6)
27609* FLIX syntax:                           Xtensa Syntax.      (line    6)
27610* 'float' directive:                     Float.              (line    6)
27611* 'float' directive, i386:               i386-Float.         (line   14)
27612* 'float' directive, M680x0:             M68K-Float.         (line   11)
27613* 'float' directive, M68HC11:            M68HC11-Float.      (line   11)
27614* 'float' directive, RX:                 RX-Float.           (line    8)
27615* 'float' directive, TIC54X:             TIC54X-Directives.  (line   62)
27616* 'float' directive, VAX:                VAX-float.          (line   15)
27617* 'float' directive, x86-64:             i386-Float.         (line   14)
27618* 'float' directive, XGATE:              XGATE-Float.        (line   10)
27619* floating point numbers:                Flonums.            (line    6)
27620* floating point numbers (double):       Double.             (line    6)
27621* floating point numbers (single):       Float.              (line    6)
27622* floating point numbers (single) <1>:   Single.             (line    6)
27623* floating point, AArch64 (IEEE):        AArch64 Floating Point.
27624                                                             (line    6)
27625* floating point, Alpha (IEEE):          Alpha Floating Point.
27626                                                             (line    6)
27627* floating point, ARM (IEEE):            ARM Floating Point. (line    6)
27628* floating point, D10V:                  D10V-Float.         (line    6)
27629* floating point, D30V:                  D30V-Float.         (line    6)
27630* floating point, H8/300 (IEEE):         H8/300 Floating Point.
27631                                                             (line    6)
27632* floating point, HPPA (IEEE):           HPPA Floating Point.
27633                                                             (line    6)
27634* floating point, i386:                  i386-Float.         (line    6)
27635* floating point, M680x0:                M68K-Float.         (line    6)
27636* floating point, M68HC11:               M68HC11-Float.      (line    6)
27637* floating point, MSP 430 (IEEE):        MSP430 Floating Point.
27638                                                             (line    6)
27639* floating point, OPENRISC (IEEE):       OpenRISC-Float.     (line    6)
27640* floating point, RX:                    RX-Float.           (line    6)
27641* floating point, s390:                  s390 Floating Point.
27642                                                             (line    6)
27643* floating point, SH (IEEE):             SH Floating Point.  (line    6)
27644* floating point, SPARC (IEEE):          Sparc-Float.        (line    6)
27645* floating point, V850 (IEEE):           V850 Floating Point.
27646                                                             (line    6)
27647* floating point, VAX:                   VAX-float.          (line    6)
27648* floating point, WebAssembly (IEEE):    WebAssembly-Floating-Point.
27649                                                             (line    6)
27650* floating point, x86-64:                i386-Float.         (line    6)
27651* floating point, XGATE:                 XGATE-Float.        (line    6)
27652* floating point, Z80:                   Z80 Floating Point. (line    6)
27653* flonums:                               Flonums.            (line    6)
27654* 'force2bsr' command-line option, C-SKY: C-SKY Options.     (line   43)
27655* format of error messages:              Errors.             (line   38)
27656* format of warning messages:            Errors.             (line   12)
27657* formfeed ('\f'):                       Strings.            (line   18)
27658* four-byte integer:                     4byte.              (line    6)
27659* 'fpic' command-line option, C-SKY:     C-SKY Options.      (line   22)
27660* frame pointer, ARC:                    ARC-Regs.           (line   17)
27661* 'func' directive:                      Func.               (line    6)
27662* functions, in expressions:             Operators.          (line    6)
27663* 'gfloat' directive, VAX:               VAX-directives.     (line   17)
27664* global:                                Z8000 Directives.   (line   21)
27665* 'global' directive:                    Global.             (line    6)
27666* 'global' directive, TIC54X:            TIC54X-Directives.  (line  101)
27667* global pointer, ARC:                   ARC-Regs.           (line   14)
27668* 'got' directive, Nios II:              Nios II Relocations.
27669                                                             (line   38)
27670* 'gotoff' directive, Nios II:           Nios II Relocations.
27671                                                             (line   38)
27672* 'gotoff_hiadj' directive, Nios II:     Nios II Relocations.
27673                                                             (line   38)
27674* 'gotoff_lo' directive, Nios II:        Nios II Relocations.
27675                                                             (line   38)
27676* 'got_hiadj' directive, Nios II:        Nios II Relocations.
27677                                                             (line   38)
27678* 'got_lo' directive, Nios II:           Nios II Relocations.
27679                                                             (line   38)
27680* 'gp' register, MIPS:                   MIPS Small Data.    (line    6)
27681* 'gp' register, V850:                   V850-Regs.          (line   14)
27682* 'gprel' directive, Nios II:            Nios II Relocations.
27683                                                             (line   26)
27684* grouping data:                         Sub-Sections.       (line    6)
27685* H8/300 addressing modes:               H8/300-Addressing.  (line    6)
27686* H8/300 floating point (IEEE):          H8/300 Floating Point.
27687                                                             (line    6)
27688* H8/300 line comment character:         H8/300-Chars.       (line    6)
27689* H8/300 line separator:                 H8/300-Chars.       (line    8)
27690* H8/300 machine directives (none):      H8/300 Directives.  (line    6)
27691* H8/300 opcode summary:                 H8/300 Opcodes.     (line    6)
27692* H8/300 options:                        H8/300 Options.     (line    6)
27693* H8/300 registers:                      H8/300-Regs.        (line    6)
27694* H8/300 size suffixes:                  H8/300 Opcodes.     (line  160)
27695* H8/300 support:                        H8/300-Dependent.   (line    6)
27696* H8/300H, assembling for:               H8/300 Directives.  (line    8)
27697* 'half' directive, BPF:                 BPF Directives.     (line    9)
27698* 'half' directive, Nios II:             Nios II Directives. (line   10)
27699* 'half' directive, SPARC:               Sparc-Directives.   (line   17)
27700* 'half' directive, TIC54X:              TIC54X-Directives.  (line  109)
27701* hex character code ('\XD...'):         Strings.            (line   36)
27702* hexadecimal integers:                  Integers.           (line   15)
27703* hexadecimal prefix, S12Z:              S12Z Options.       (line   17)
27704* hexadecimal prefix, Z80:               Z80-Chars.          (line   15)
27705* 'hfloat' directive, VAX:               VAX-directives.     (line   21)
27706* 'hi' directive, Nios II:               Nios II Relocations.
27707                                                             (line   20)
27708* 'hi' pseudo-op, V850:                  V850 Opcodes.       (line   33)
27709* 'hi0' pseudo-op, V850:                 V850 Opcodes.       (line   10)
27710* 'hiadj' directive, Nios II:            Nios II Relocations.
27711                                                             (line    6)
27712* 'hidden' directive:                    Hidden.             (line    6)
27713* 'high' directive, M32R:                M32R-Directives.    (line   18)
27714* 'hilo' pseudo-op, V850:                V850 Opcodes.       (line   55)
27715* HPPA directives not supported:         HPPA Directives.    (line   11)
27716* HPPA floating point (IEEE):            HPPA Floating Point.
27717                                                             (line    6)
27718* HPPA Syntax:                           HPPA Options.       (line    7)
27719* HPPA-only directives:                  HPPA Directives.    (line   24)
27720* 'hword' directive:                     hword.              (line    6)
27721* i386 16-bit code:                      i386-16bit.         (line    6)
27722* i386 arch directive:                   i386-Arch.          (line    6)
27723* i386 att_syntax pseudo op:             i386-Variations.    (line    6)
27724* i386 conversion instructions:          i386-Mnemonics.     (line   66)
27725* i386 extension instructions:           i386-Mnemonics.     (line   85)
27726* i386 floating point:                   i386-Float.         (line    6)
27727* i386 immediate operands:               i386-Variations.    (line   15)
27728* i386 instruction naming:               i386-Mnemonics.     (line    9)
27729* i386 instruction prefixes:             i386-Prefixes.      (line    6)
27730* i386 intel_syntax pseudo op:           i386-Variations.    (line    6)
27731* i386 jump optimization:                i386-Jumps.         (line    6)
27732* i386 jump, call, return:               i386-Variations.    (line   45)
27733* i386 jump/call operands:               i386-Variations.    (line   15)
27734* i386 line comment character:           i386-Chars.         (line    6)
27735* i386 line separator:                   i386-Chars.         (line   18)
27736* i386 memory references:                i386-Memory.        (line    6)
27737* i386 mnemonic compatibility:           i386-Mnemonics.     (line  120)
27738* i386 'mul', 'imul' instructions:       i386-Notes.         (line    6)
27739* i386 options:                          i386-Options.       (line    6)
27740* i386 register operands:                i386-Variations.    (line   15)
27741* i386 registers:                        i386-Regs.          (line    6)
27742* i386 sections:                         i386-Variations.    (line   51)
27743* i386 size suffixes:                    i386-Variations.    (line   28)
27744* i386 source, destination operands:     i386-Variations.    (line   21)
27745* i386 support:                          i386-Dependent.     (line    6)
27746* i386 syntax compatibility:             i386-Variations.    (line    6)
27747* i80386 support:                        i386-Dependent.     (line    6)
27748* IA-64 line comment character:          IA-64-Chars.        (line    6)
27749* IA-64 line separator:                  IA-64-Chars.        (line    8)
27750* IA-64 options:                         IA-64 Options.      (line    6)
27751* IA-64 Processor-status-Register bit names: IA-64-Bits.     (line    6)
27752* IA-64 registers:                       IA-64-Regs.         (line    6)
27753* IA-64 relocations:                     IA-64-Relocs.       (line    6)
27754* IA-64 support:                         IA-64-Dependent.    (line    6)
27755* IA-64 Syntax:                          IA-64 Options.      (line   85)
27756* 'ident' directive:                     Ident.              (line    6)
27757* identifiers, ARM:                      ARM-Chars.          (line   19)
27758* identifiers, MSP 430:                  MSP430-Chars.       (line   17)
27759* 'if' directive:                        If.                 (line    6)
27760* 'ifb' directive:                       If.                 (line   21)
27761* 'ifc' directive:                       If.                 (line   25)
27762* 'ifdef' directive:                     If.                 (line   16)
27763* 'ifeq' directive:                      If.                 (line   33)
27764* 'ifeqs' directive:                     If.                 (line   36)
27765* 'ifge' directive:                      If.                 (line   40)
27766* 'ifgt' directive:                      If.                 (line   44)
27767* 'ifle' directive:                      If.                 (line   48)
27768* 'iflt' directive:                      If.                 (line   52)
27769* 'ifnb' directive:                      If.                 (line   56)
27770* 'ifnc' directive:                      If.                 (line   61)
27771* 'ifndef' directive:                    If.                 (line   65)
27772* 'ifne' directive:                      If.                 (line   72)
27773* 'ifnes' directive:                     If.                 (line   76)
27774* 'ifnotdef' directive:                  If.                 (line   65)
27775* immediate character, AArch64:          AArch64-Chars.      (line   13)
27776* immediate character, ARM:              ARM-Chars.          (line   17)
27777* immediate character, M680x0:           M68K-Chars.         (line   13)
27778* immediate character, VAX:              VAX-operands.       (line    6)
27779* immediate fields, relaxation:          Xtensa Immediate Relaxation.
27780                                                             (line    6)
27781* immediate operands, i386:              i386-Variations.    (line   15)
27782* immediate operands, x86-64:            i386-Variations.    (line   15)
27783* 'imul' instruction, i386:              i386-Notes.         (line    6)
27784* 'imul' instruction, x86-64:            i386-Notes.         (line    6)
27785* 'incbin' directive:                    Incbin.             (line    6)
27786* 'include' directive:                   Include.            (line    6)
27787* 'include' directive search path:       I.                  (line    6)
27788* indirect character, VAX:               VAX-operands.       (line    9)
27789* infix operators:                       Infix Ops.          (line    6)
27790* inhibiting interrupts, i386:           i386-Prefixes.      (line   36)
27791* input:                                 Input Files.        (line    6)
27792* input file linenumbers:                Input Files.        (line   35)
27793* INSN directives:                       RISC-V-Directives.  (line   92)
27794* instruction aliases, s390:             s390 Aliases.       (line    6)
27795* instruction bundle:                    Bundle directives.  (line    9)
27796* instruction expansion, CRIS:           CRIS-Expand.        (line    6)
27797* instruction expansion, MMIX:           MMIX-Expand.        (line    6)
27798* instruction formats, risc-v:           RISC-V-Formats.     (line    6)
27799* instruction formats, s390:             s390 Formats.       (line    6)
27800* instruction marker, s390:              s390 Instruction Marker.
27801                                                             (line    6)
27802* instruction mnemonics, s390:           s390 Mnemonics.     (line    6)
27803* instruction naming, i386:              i386-Mnemonics.     (line    9)
27804* instruction naming, x86-64:            i386-Mnemonics.     (line    9)
27805* instruction operand modifier, s390:    s390 Operand Modifier.
27806                                                             (line    6)
27807* instruction operands, s390:            s390 Operands.      (line    6)
27808* instruction prefixes, i386:            i386-Prefixes.      (line    6)
27809* instruction set, M680x0:               M68K-opcodes.       (line    6)
27810* instruction set, M68HC11:              M68HC11-opcodes.    (line    6)
27811* instruction set, XGATE:                XGATE-opcodes.      (line    5)
27812* instruction summary, AVR:              AVR Opcodes.        (line    6)
27813* instruction summary, D10V:             D10V-Opcodes.       (line    6)
27814* instruction summary, D30V:             D30V-Opcodes.       (line    6)
27815* instruction summary, H8/300:           H8/300 Opcodes.     (line    6)
27816* instruction summary, LM32:             LM32 Opcodes.       (line    6)
27817* instruction summary, LM32 <1>:         OpenRISC-Opcodes.   (line    6)
27818* instruction summary, SH:               SH Opcodes.         (line    6)
27819* instruction summary, Z8000:            Z8000 Opcodes.      (line    6)
27820* instruction syntax, s390:              s390 Syntax.        (line    6)
27821* instructions and directives:           Statements.         (line   20)
27822* 'int' directive:                       Int.                (line    6)
27823* 'int' directive, H8/300:               H8/300 Directives.  (line    6)
27824* 'int' directive, i386:                 i386-Float.         (line   21)
27825* 'int' directive, TIC54X:               TIC54X-Directives.  (line  109)
27826* 'int' directive, x86-64:               i386-Float.         (line   21)
27827* integer expressions:                   Integer Exprs.      (line    6)
27828* integer, 16-byte:                      Octa.               (line    6)
27829* integer, 2-byte:                       2byte.              (line    6)
27830* integer, 4-byte:                       4byte.              (line    6)
27831* integer, 8-byte:                       Quad.               (line    9)
27832* integer, 8-byte <1>:                   8byte.              (line    6)
27833* integers:                              Integers.           (line    6)
27834* integers, 16-bit:                      hword.              (line    6)
27835* integers, 32-bit:                      Int.                (line    6)
27836* integers, binary:                      Integers.           (line    6)
27837* integers, decimal:                     Integers.           (line   12)
27838* integers, hexadecimal:                 Integers.           (line   15)
27839* integers, octal:                       Integers.           (line    9)
27840* integers, one byte:                    Byte.               (line    6)
27841* intel_syntax pseudo op, i386:          i386-Variations.    (line    6)
27842* intel_syntax pseudo op, x86-64:        i386-Variations.    (line    6)
27843* internal assembler sections:           As Sections.        (line    6)
27844* 'internal' directive:                  Internal.           (line    6)
27845* interrupt link register, ARC:          ARC-Regs.           (line   27)
27846* Interrupt Vector Base address, ARC:    ARC-Regs.           (line   66)
27847* invalid input:                         Bug Criteria.       (line   14)
27848* invocation summary:                    Overview.           (line    6)
27849* IP2K architecture options:             IP2K-Opts.          (line    9)
27850* IP2K architecture options <1>:         IP2K-Opts.          (line   14)
27851* IP2K line comment character:           IP2K-Chars.         (line    6)
27852* IP2K line separator:                   IP2K-Chars.         (line   14)
27853* IP2K options:                          IP2K-Opts.          (line    6)
27854* IP2K support:                          IP2K-Dependent.     (line    6)
27855* 'irp' directive:                       Irp.                (line    6)
27856* 'irpc' directive:                      Irpc.               (line    6)
27857* joining text and data sections:        R.                  (line    6)
27858* 'jsri2bsr' command-line option, C-SKY: C-SKY Options.      (line   52)
27859* jump instructions, i386:               i386-Mnemonics.     (line  114)
27860* jump instructions, relaxation:         Xtensa Jump Relaxation.
27861                                                             (line    6)
27862* jump instructions, x86-64:             i386-Mnemonics.     (line  114)
27863* jump optimization, i386:               i386-Jumps.         (line    6)
27864* jump optimization, x86-64:             i386-Jumps.         (line    6)
27865* jump/call operands, i386:              i386-Variations.    (line   15)
27866* jump/call operands, x86-64:            i386-Variations.    (line   15)
27867* 'L16SI' instructions, relaxation:      Xtensa Immediate Relaxation.
27868                                                             (line   23)
27869* 'L16UI' instructions, relaxation:      Xtensa Immediate Relaxation.
27870                                                             (line   23)
27871* 'L32I' instructions, relaxation:       Xtensa Immediate Relaxation.
27872                                                             (line   23)
27873* 'L8UI' instructions, relaxation:       Xtensa Immediate Relaxation.
27874                                                             (line   23)
27875* label (':'):                           Statements.         (line   31)
27876* 'label' directive, TIC54X:             TIC54X-Directives.  (line  121)
27877* labels:                                Labels.             (line    6)
27878* labels, Z80:                           Z80-Labels.         (line    6)
27879* 'largecomm' directive, ELF:            i386-Directives.    (line   17)
27880* 'lcomm' directive:                     Lcomm.              (line    6)
27881* 'lcomm' directive <1>:                 ARC Directives.     (line    9)
27882* 'lcomm' directive, COFF:               i386-Directives.    (line    6)
27883* 'lcommon' directive, ARC:              ARC Directives.     (line   24)
27884* ld:                                    Object.             (line   15)
27885* 'ldouble' directive M680x0:            M68K-Float.         (line   17)
27886* 'ldouble' directive M68HC11:           M68HC11-Float.      (line   17)
27887* 'ldouble' directive XGATE:             XGATE-Float.        (line   16)
27888* 'ldouble' directive, TIC54X:           TIC54X-Directives.  (line   62)
27889* 'LDR reg,=<expr>' pseudo op, AArch64:  AArch64 Opcodes.    (line    9)
27890* 'LDR reg,=<label>' pseudo op, ARM:     ARM Opcodes.        (line   15)
27891* LEB128 directives:                     RISC-V-Directives.  (line   27)
27892* 'length' directive, TIC54X:            TIC54X-Directives.  (line  125)
27893* length of symbols:                     Symbol Intro.       (line   19)
27894* level 1 interrupt link register, ARC:  ARC-Regs.           (line   23)
27895* level 2 interrupt link register, ARC:  ARC-Regs.           (line   31)
27896* 'lflags' directive (ignored):          Lflags.             (line    6)
27897* line:                                  ARC-Chars.          (line   30)
27898* line comment character:                Comments.           (line   19)
27899* line comment character, AArch64:       AArch64-Chars.      (line    6)
27900* line comment character, Alpha:         Alpha-Chars.        (line    6)
27901* line comment character, ARC:           ARC-Chars.          (line   11)
27902* line comment character, ARM:           ARM-Chars.          (line    6)
27903* line comment character, AVR:           AVR-Chars.          (line    6)
27904* line comment character, BPF:           BPF-Chars.          (line    6)
27905* line comment character, CR16:          CR16-Chars.         (line    6)
27906* line comment character, D10V:          D10V-Chars.         (line    6)
27907* line comment character, D30V:          D30V-Chars.         (line    6)
27908* line comment character, Epiphany:      Epiphany-Chars.     (line    6)
27909* line comment character, H8/300:        H8/300-Chars.       (line    6)
27910* line comment character, i386:          i386-Chars.         (line    6)
27911* line comment character, IA-64:         IA-64-Chars.        (line    6)
27912* line comment character, IP2K:          IP2K-Chars.         (line    6)
27913* line comment character, LM32:          LM32-Chars.         (line    6)
27914* line comment character, M32C:          M32C-Chars.         (line    6)
27915* line comment character, M680x0:        M68K-Chars.         (line    6)
27916* line comment character, M68HC11:       M68HC11-Syntax.     (line   17)
27917* line comment character, Meta:          Meta-Chars.         (line    6)
27918* line comment character, MicroBlaze:    MicroBlaze-Chars.   (line    6)
27919* line comment character, MIPS:          MIPS-Chars.         (line    6)
27920* line comment character, MSP 430:       MSP430-Chars.       (line    6)
27921* line comment character, Nios II:       Nios II Chars.      (line    6)
27922* line comment character, NS32K:         NS32K-Chars.        (line    6)
27923* line comment character, OpenRISC:      OpenRISC-Chars.     (line    6)
27924* line comment character, PJ:            PJ-Chars.           (line    6)
27925* line comment character, PowerPC:       PowerPC-Chars.      (line    6)
27926* line comment character, PRU:           PRU Chars.          (line    6)
27927* line comment character, RL78:          RL78-Chars.         (line    6)
27928* line comment character, RX:            RX-Chars.           (line    6)
27929* line comment character, S12Z:          S12Z Syntax Overview.
27930                                                             (line   32)
27931* line comment character, s390:          s390 Characters.    (line    6)
27932* line comment character, SCORE:         SCORE-Chars.        (line    6)
27933* line comment character, SH:            SH-Chars.           (line    6)
27934* line comment character, Sparc:         Sparc-Chars.        (line    6)
27935* line comment character, TIC54X:        TIC54X-Chars.       (line    6)
27936* line comment character, TIC6X:         TIC6X Syntax.       (line    6)
27937* line comment character, V850:          V850-Chars.         (line    6)
27938* line comment character, VAX:           VAX-Chars.          (line    6)
27939* line comment character, Visium:        Visium Characters.  (line    6)
27940* line comment character, WebAssembly:   WebAssembly-Chars.  (line    6)
27941* line comment character, XGATE:         XGATE-Syntax.       (line   16)
27942* line comment character, XStormy16:     XStormy16-Chars.    (line    6)
27943* line comment character, Z80:           Z80-Chars.          (line    6)
27944* line comment character, Z8000:         Z8000-Chars.        (line    6)
27945* line comment characters, CRIS:         CRIS-Chars.         (line    6)
27946* line comment characters, MMIX:         MMIX-Chars.         (line    6)
27947* 'line' directive:                      Line.               (line    6)
27948* 'line' directive, MSP 430:             MSP430 Directives.  (line   14)
27949* line numbers, in input files:          Input Files.        (line   35)
27950* line separator character:              Statements.         (line    6)
27951* line separator character, Nios II:     Nios II Chars.      (line    6)
27952* line separator, AArch64:               AArch64-Chars.      (line   10)
27953* line separator, Alpha:                 Alpha-Chars.        (line   11)
27954* line separator, ARC:                   ARC-Chars.          (line   27)
27955* line separator, ARM:                   ARM-Chars.          (line   14)
27956* line separator, AVR:                   AVR-Chars.          (line   14)
27957* line separator, CR16:                  CR16-Chars.         (line   12)
27958* line separator, Epiphany:              Epiphany-Chars.     (line   14)
27959* line separator, H8/300:                H8/300-Chars.       (line    8)
27960* line separator, i386:                  i386-Chars.         (line   18)
27961* line separator, IA-64:                 IA-64-Chars.        (line    8)
27962* line separator, IP2K:                  IP2K-Chars.         (line   14)
27963* line separator, LM32:                  LM32-Chars.         (line   12)
27964* line separator, M32C:                  M32C-Chars.         (line   14)
27965* line separator, M680x0:                M68K-Chars.         (line   20)
27966* line separator, M68HC11:               M68HC11-Syntax.     (line   26)
27967* line separator, Meta:                  Meta-Chars.         (line    8)
27968* line separator, MicroBlaze:            MicroBlaze-Chars.   (line   14)
27969* line separator, MIPS:                  MIPS-Chars.         (line   14)
27970* line separator, MSP 430:               MSP430-Chars.       (line   14)
27971* line separator, NS32K:                 NS32K-Chars.        (line   18)
27972* line separator, OpenRISC:              OpenRISC-Chars.     (line    9)
27973* line separator, PJ:                    PJ-Chars.           (line   14)
27974* line separator, PowerPC:               PowerPC-Chars.      (line   18)
27975* line separator, RL78:                  RL78-Chars.         (line   14)
27976* line separator, RX:                    RX-Chars.           (line   14)
27977* line separator, S12Z:                  S12Z Syntax Overview.
27978                                                             (line   41)
27979* line separator, s390:                  s390 Characters.    (line   13)
27980* line separator, SCORE:                 SCORE-Chars.        (line   14)
27981* line separator, SH:                    SH-Chars.           (line    8)
27982* line separator, Sparc:                 Sparc-Chars.        (line   14)
27983* line separator, TIC54X:                TIC54X-Chars.       (line   17)
27984* line separator, TIC6X:                 TIC6X Syntax.       (line   13)
27985* line separator, V850:                  V850-Chars.         (line   13)
27986* line separator, VAX:                   VAX-Chars.          (line   14)
27987* line separator, Visium:                Visium Characters.  (line   14)
27988* line separator, XGATE:                 XGATE-Syntax.       (line   25)
27989* line separator, XStormy16:             XStormy16-Chars.    (line   14)
27990* line separator, Z80:                   Z80-Chars.          (line   13)
27991* line separator, Z8000:                 Z8000-Chars.        (line   13)
27992* lines starting with '#':               Comments.           (line   33)
27993* link register, ARC:                    ARC-Regs.           (line   35)
27994* linker:                                Object.             (line   15)
27995* linker, and assembler:                 Secs Background.    (line   10)
27996* 'linkonce' directive:                  Linkonce.           (line    6)
27997* 'list' directive:                      List.               (line    6)
27998* 'list' directive, TIC54X:              TIC54X-Directives.  (line  129)
27999* listing control, turning off:          Nolist.             (line    6)
28000* listing control, turning on:           List.               (line    6)
28001* listing control: new page:             Eject.              (line    6)
28002* listing control: paper size:           Psize.              (line    6)
28003* listing control: subtitle:             Sbttl.              (line    6)
28004* listing control: title line:           Title.              (line    6)
28005* listings, enabling:                    a.                  (line    6)
28006* 'literal' directive:                   Literal Directive.  (line    6)
28007* literal pool entries, s390:            s390 Literal Pool Entries.
28008                                                             (line    6)
28009* 'literal_position' directive:          Literal Position Directive.
28010                                                             (line    6)
28011* 'literal_prefix' directive:            Literal Prefix Directive.
28012                                                             (line    6)
28013* little endian output, MIPS:            Overview.           (line  858)
28014* little endian output, PJ:              Overview.           (line  762)
28015* little-endian output, MIPS:            MIPS Options.       (line   13)
28016* little-endian output, TIC6X:           TIC6X Options.      (line   46)
28017* LM32 line comment character:           LM32-Chars.         (line    6)
28018* LM32 line separator:                   LM32-Chars.         (line   12)
28019* LM32 modifiers:                        LM32-Modifiers.     (line    6)
28020* LM32 opcode summary:                   LM32 Opcodes.       (line    6)
28021* LM32 options (none):                   LM32 Options.       (line    6)
28022* LM32 register names:                   LM32-Regs.          (line    6)
28023* LM32 support:                          LM32-Dependent.     (line    6)
28024* 'ln' directive:                        Ln.                 (line    6)
28025* 'lo' directive, Nios II:               Nios II Relocations.
28026                                                             (line   23)
28027* 'lo' pseudo-op, V850:                  V850 Opcodes.       (line   22)
28028* 'loc' directive:                       Loc.                (line    6)
28029* local common symbols:                  Lcomm.              (line    6)
28030* 'local' directive:                     Local.              (line    6)
28031* local labels:                          Symbol Names.       (line   43)
28032* local symbol names:                    Symbol Names.       (line   30)
28033* local symbols, retaining in output:    L.                  (line    6)
28034* location counter:                      Dot.                (line    6)
28035* location counter, advancing:           Org.                (line    6)
28036* location counter, Z80:                 Z80-Chars.          (line   15)
28037* 'loc_mark_labels' directive:           Loc_mark_labels.    (line    6)
28038* logical file name:                     File.               (line   13)
28039* logical line number:                   Line.               (line    6)
28040* logical line numbers:                  Comments.           (line   33)
28041* 'long' directive:                      Long.               (line    6)
28042* 'long' directive, i386:                i386-Float.         (line   21)
28043* 'long' directive, TIC54X:              TIC54X-Directives.  (line  133)
28044* 'long' directive, x86-64:              i386-Float.         (line   21)
28045* 'longcall' pseudo-op, V850:            V850 Opcodes.       (line  122)
28046* 'longcalls' directive:                 Longcalls Directive.
28047                                                             (line    6)
28048* 'longjump' pseudo-op, V850:            V850 Opcodes.       (line  128)
28049* Loongson Content Address Memory (CAM) generation override: MIPS ASE Instruction Generation Overrides.
28050                                                             (line   81)
28051* Loongson EXTensions (EXT) instructions generation override: MIPS ASE Instruction Generation Overrides.
28052                                                             (line   86)
28053* Loongson EXTensions R2 (EXT2) instructions generation override: MIPS ASE Instruction Generation Overrides.
28054                                                             (line   91)
28055* Loongson MultiMedia extensions Instructions (MMI) generation override: MIPS ASE Instruction Generation Overrides.
28056                                                             (line   76)
28057* loop counter, ARC:                     ARC-Regs.           (line   41)
28058* 'loop' directive, TIC54X:              TIC54X-Directives.  (line  141)
28059* 'LOOP' instructions, alignment:        Xtensa Automatic Alignment.
28060                                                             (line    6)
28061* 'low' directive, M32R:                 M32R-Directives.    (line    9)
28062* 'lp' register, V850:                   V850-Regs.          (line   68)
28063* lval:                                  Z8000 Directives.   (line   27)
28064* LWP, i386:                             i386-LWP.           (line    6)
28065* LWP, x86-64:                           i386-LWP.           (line    6)
28066* M16C architecture option:              M32C-Opts.          (line   12)
28067* M32C architecture option:              M32C-Opts.          (line    9)
28068* M32C line comment character:           M32C-Chars.         (line    6)
28069* M32C line separator:                   M32C-Chars.         (line   14)
28070* M32C modifiers:                        M32C-Modifiers.     (line    6)
28071* M32C options:                          M32C-Opts.          (line    6)
28072* M32C support:                          M32C-Dependent.     (line    6)
28073* M32R architecture options:             M32R-Opts.          (line    9)
28074* M32R architecture options <1>:         M32R-Opts.          (line   17)
28075* M32R architecture options <2>:         M32R-Opts.          (line   21)
28076* M32R directives:                       M32R-Directives.    (line    6)
28077* M32R options:                          M32R-Opts.          (line    6)
28078* M32R support:                          M32R-Dependent.     (line    6)
28079* M32R warnings:                         M32R-Warnings.      (line    6)
28080* M680x0 addressing modes:               M68K-Syntax.        (line   21)
28081* M680x0 architecture options:           M68K-Opts.          (line   99)
28082* M680x0 branch improvement:             M68K-Branch.        (line    6)
28083* M680x0 directives:                     M68K-Directives.    (line    6)
28084* M680x0 floating point:                 M68K-Float.         (line    6)
28085* M680x0 immediate character:            M68K-Chars.         (line   13)
28086* M680x0 line comment character:         M68K-Chars.         (line    6)
28087* M680x0 line separator:                 M68K-Chars.         (line   20)
28088* M680x0 opcodes:                        M68K-opcodes.       (line    6)
28089* M680x0 options:                        M68K-Opts.          (line    6)
28090* M680x0 pseudo-opcodes:                 M68K-Branch.        (line    6)
28091* M680x0 size modifiers:                 M68K-Syntax.        (line    8)
28092* M680x0 support:                        M68K-Dependent.     (line    6)
28093* M680x0 syntax:                         M68K-Syntax.        (line    8)
28094* M68HC11 addressing modes:              M68HC11-Syntax.     (line   29)
28095* M68HC11 and M68HC12 support:           M68HC11-Dependent.  (line    6)
28096* M68HC11 assembler directive .far:      M68HC11-Directives. (line   20)
28097* M68HC11 assembler directive .interrupt: M68HC11-Directives.
28098                                                             (line   26)
28099* M68HC11 assembler directive .mode:     M68HC11-Directives. (line   16)
28100* M68HC11 assembler directive .relax:    M68HC11-Directives. (line   10)
28101* M68HC11 assembler directive .xrefb:    M68HC11-Directives. (line   31)
28102* M68HC11 assembler directives:          M68HC11-Directives. (line    6)
28103* M68HC11 branch improvement:            M68HC11-Branch.     (line    6)
28104* M68HC11 floating point:                M68HC11-Float.      (line    6)
28105* M68HC11 line comment character:        M68HC11-Syntax.     (line   17)
28106* M68HC11 line separator:                M68HC11-Syntax.     (line   26)
28107* M68HC11 modifiers:                     M68HC11-Modifiers.  (line    6)
28108* M68HC11 opcodes:                       M68HC11-opcodes.    (line    6)
28109* M68HC11 options:                       M68HC11-Opts.       (line    6)
28110* M68HC11 pseudo-opcodes:                M68HC11-Branch.     (line    6)
28111* M68HC11 syntax:                        M68HC11-Syntax.     (line    6)
28112* M68HC12 assembler directives:          M68HC11-Directives. (line    6)
28113* 'mA6' command-line option, ARC:        ARC Options.        (line   14)
28114* 'mA7' command-line option, ARC:        ARC Options.        (line   39)
28115* machine dependencies:                  Machine Dependencies.
28116                                                             (line    6)
28117* machine directives, AArch64:           AArch64 Directives. (line    6)
28118* machine directives, ARC:               ARC Directives.     (line    6)
28119* machine directives, ARM:               ARM Directives.     (line    6)
28120* machine directives, BPF:               BPF Directives.     (line    6)
28121* machine directives, H8/300 (none):     H8/300 Directives.  (line    6)
28122* machine directives, MSP 430:           MSP430 Directives.  (line    6)
28123* machine directives, Nios II:           Nios II Directives. (line    6)
28124* machine directives, OPENRISC:          OpenRISC-Directives.
28125                                                             (line    6)
28126* machine directives, PRU:               PRU Directives.     (line    6)
28127* machine directives, RISC-V:            RISC-V-Directives.  (line    6)
28128* machine directives, SH:                SH Directives.      (line    6)
28129* machine directives, SPARC:             Sparc-Directives.   (line    6)
28130* machine directives, TIC54X:            TIC54X-Directives.  (line    6)
28131* machine directives, TIC6X:             TIC6X Directives.   (line    6)
28132* machine directives, TILE-Gx:           TILE-Gx Directives. (line    6)
28133* machine directives, TILEPro:           TILEPro Directives. (line    6)
28134* machine directives, V850:              V850 Directives.    (line    6)
28135* machine directives, VAX:               VAX-directives.     (line    6)
28136* machine directives, x86:               i386-Directives.    (line    6)
28137* machine directives, XStormy16:         XStormy16 Directives.
28138                                                             (line    6)
28139* machine independent directives:        Pseudo Ops.         (line    6)
28140* machine instructions (not covered):    Manual.             (line   14)
28141* machine relocations, Nios II:          Nios II Relocations.
28142                                                             (line    6)
28143* machine relocations, PRU:              PRU Relocations.    (line    6)
28144* machine-independent syntax:            Syntax.             (line    6)
28145* 'macro' directive:                     Macro.              (line   28)
28146* 'macro' directive, TIC54X:             TIC54X-Directives.  (line  151)
28147* macros:                                Macro.              (line    6)
28148* macros, count executed:                Macro.              (line  142)
28149* Macros, MSP 430:                       MSP430-Macros.      (line    6)
28150* macros, TIC54X:                        TIC54X-Macros.      (line    6)
28151* make rules:                            MD.                 (line    6)
28152* manual, structure and purpose:         Manual.             (line    6)
28153* 'marc600' command-line option, ARC:    ARC Options.        (line   14)
28154* 'mARC601' command-line option, ARC:    ARC Options.        (line   27)
28155* 'mARC700' command-line option, ARC:    ARC Options.        (line   39)
28156* 'march' command-line option, C-SKY:    C-SKY Options.      (line    6)
28157* 'march' command-line option, Nios II:  Nios II Options.    (line   28)
28158* math builtins, TIC54X:                 TIC54X-Builtins.    (line    6)
28159* Maximum number of continuation lines:  listing.            (line   34)
28160* 'mbig-endian' command-line option, C-SKY: C-SKY Options.   (line   18)
28161* 'mbranch-stub' command-line option, C-SKY: C-SKY Options.  (line   34)
28162* 'mcache' command-line option, C-SKY:   C-SKY Options.      (line  100)
28163* 'mcp' command-line option, C-SKY:      C-SKY Options.      (line   97)
28164* 'mcpu' command-line option, C-SKY:     C-SKY Options.      (line   10)
28165* 'mdsp' command-line option, C-SKY:     C-SKY Options.      (line  109)
28166* 'medsp' command-line option, C-SKY:    C-SKY Options.      (line  112)
28167* 'melrw' command-line option, C-SKY:    C-SKY Options.      (line   64)
28168* 'mEM' command-line option, ARC:        ARC Options.        (line   42)
28169* memory references, i386:               i386-Memory.        (line    6)
28170* memory references, x86-64:             i386-Memory.        (line    6)
28171* memory-mapped registers, TIC54X:       TIC54X-MMRegs.      (line    6)
28172* merging text and data sections:        R.                  (line    6)
28173* messages from assembler:               Errors.             (line    6)
28174* Meta architectures:                    Meta Options.       (line    6)
28175* Meta line comment character:           Meta-Chars.         (line    6)
28176* Meta line separator:                   Meta-Chars.         (line    8)
28177* Meta options:                          Meta Options.       (line    6)
28178* Meta registers:                        Meta-Regs.          (line    6)
28179* Meta support:                          Meta-Dependent.     (line    6)
28180* 'mforce2bsr' command-line option, C-SKY: C-SKY Options.    (line   43)
28181* 'mhard-float' command-line option, C-SKY: C-SKY Options.   (line   91)
28182* 'mHS' command-line option, ARC:        ARC Options.        (line   64)
28183* MicroBlaze architectures:              MicroBlaze-Dependent.
28184                                                             (line    6)
28185* MicroBlaze directives:                 MicroBlaze Directives.
28186                                                             (line    6)
28187* MicroBlaze line comment character:     MicroBlaze-Chars.   (line    6)
28188* MicroBlaze line separator:             MicroBlaze-Chars.   (line   14)
28189* MicroBlaze support:                    MicroBlaze-Dependent.
28190                                                             (line   12)
28191* minus, permitted arguments:            Infix Ops.          (line   50)
28192* MIPS 32-bit microMIPS instruction generation override: MIPS assembly options.
28193                                                             (line   18)
28194* MIPS architecture options:             MIPS Options.       (line   29)
28195* MIPS big-endian output:                MIPS Options.       (line   13)
28196* MIPS CPU override:                     MIPS ISA.           (line   18)
28197* MIPS cyclic redundancy check (CRC) instruction generation override: MIPS ASE Instruction Generation Overrides.
28198                                                             (line   68)
28199* MIPS directives to override command-line options: MIPS assembly options.
28200                                                             (line    6)
28201* MIPS DSP Release 1 instruction generation override: MIPS ASE Instruction Generation Overrides.
28202                                                             (line   21)
28203* MIPS DSP Release 2 instruction generation override: MIPS ASE Instruction Generation Overrides.
28204                                                             (line   26)
28205* MIPS DSP Release 3 instruction generation override: MIPS ASE Instruction Generation Overrides.
28206                                                             (line   31)
28207* MIPS endianness:                       Overview.           (line  855)
28208* MIPS eXtended Physical Address (XPA) instruction generation override: MIPS ASE Instruction Generation Overrides.
28209                                                             (line   57)
28210* MIPS Global INValidate (GINV) instruction generation override: MIPS ASE Instruction Generation Overrides.
28211                                                             (line   72)
28212* MIPS IEEE 754 NaN data encoding selection: MIPS NaN Encodings.
28213                                                             (line    6)
28214* MIPS ISA:                              Overview.           (line  861)
28215* MIPS ISA override:                     MIPS ISA.           (line    6)
28216* MIPS line comment character:           MIPS-Chars.         (line    6)
28217* MIPS line separator:                   MIPS-Chars.         (line   14)
28218* MIPS little-endian output:             MIPS Options.       (line   13)
28219* MIPS MCU instruction generation override: MIPS ASE Instruction Generation Overrides.
28220                                                             (line   42)
28221* MIPS MDMX instruction generation override: MIPS ASE Instruction Generation Overrides.
28222                                                             (line   16)
28223* MIPS MIPS-3D instruction generation override: MIPS ASE Instruction Generation Overrides.
28224                                                             (line    6)
28225* MIPS MT instruction generation override: MIPS ASE Instruction Generation Overrides.
28226                                                             (line   37)
28227* MIPS option stack:                     MIPS Option Stack.  (line    6)
28228* MIPS processor:                        MIPS-Dependent.     (line    6)
28229* MIPS SIMD Architecture instruction generation override: MIPS ASE Instruction Generation Overrides.
28230                                                             (line   47)
28231* MIPS16e2 instruction generation override: MIPS ASE Instruction Generation Overrides.
28232                                                             (line   61)
28233* 'mistack' command-line option, C-SKY:  C-SKY Options.      (line   82)
28234* MIT:                                   M68K-Syntax.        (line    6)
28235* 'mjsri2bsr' command-line option, C-SKY: C-SKY Options.     (line   52)
28236* 'mlabr' command-line option, C-SKY:    C-SKY Options.      (line   75)
28237* 'mlaf' command-line option, C-SKY:     C-SKY Options.      (line   69)
28238* 'mlib' directive, TIC54X:              TIC54X-Directives.  (line  157)
28239* 'mlink-relax' command-line option, PRU: PRU Options.       (line    6)
28240* 'mlist' directive, TIC54X:             TIC54X-Directives.  (line  162)
28241* 'mliterals-after-br' command-line option, C-SKY: C-SKY Options.
28242                                                             (line   75)
28243* 'mliterals-after-func' command-line option, C-SKY: C-SKY Options.
28244                                                             (line   69)
28245* 'mlittle-endian' command-line option, C-SKY: C-SKY Options.
28246                                                             (line   14)
28247* 'mljump' command-line option, C-SKY:   C-SKY Options.      (line   26)
28248* MMIX assembler directive BSPEC:        MMIX-Pseudos.       (line  137)
28249* MMIX assembler directive BYTE:         MMIX-Pseudos.       (line  101)
28250* MMIX assembler directive ESPEC:        MMIX-Pseudos.       (line  137)
28251* MMIX assembler directive GREG:         MMIX-Pseudos.       (line   53)
28252* MMIX assembler directive IS:           MMIX-Pseudos.       (line   44)
28253* MMIX assembler directive LOC:          MMIX-Pseudos.       (line    7)
28254* MMIX assembler directive LOCAL:        MMIX-Pseudos.       (line   29)
28255* MMIX assembler directive OCTA:         MMIX-Pseudos.       (line  113)
28256* MMIX assembler directive PREFIX:       MMIX-Pseudos.       (line  125)
28257* MMIX assembler directive TETRA:        MMIX-Pseudos.       (line  113)
28258* MMIX assembler directive WYDE:         MMIX-Pseudos.       (line  113)
28259* MMIX assembler directives:             MMIX-Pseudos.       (line    6)
28260* MMIX line comment characters:          MMIX-Chars.         (line    6)
28261* MMIX options:                          MMIX-Opts.          (line    6)
28262* MMIX pseudo-op BSPEC:                  MMIX-Pseudos.       (line  137)
28263* MMIX pseudo-op BYTE:                   MMIX-Pseudos.       (line  101)
28264* MMIX pseudo-op ESPEC:                  MMIX-Pseudos.       (line  137)
28265* MMIX pseudo-op GREG:                   MMIX-Pseudos.       (line   53)
28266* MMIX pseudo-op IS:                     MMIX-Pseudos.       (line   44)
28267* MMIX pseudo-op LOC:                    MMIX-Pseudos.       (line    7)
28268* MMIX pseudo-op LOCAL:                  MMIX-Pseudos.       (line   29)
28269* MMIX pseudo-op OCTA:                   MMIX-Pseudos.       (line  113)
28270* MMIX pseudo-op PREFIX:                 MMIX-Pseudos.       (line  125)
28271* MMIX pseudo-op TETRA:                  MMIX-Pseudos.       (line  113)
28272* MMIX pseudo-op WYDE:                   MMIX-Pseudos.       (line  113)
28273* MMIX pseudo-ops:                       MMIX-Pseudos.       (line    6)
28274* MMIX register names:                   MMIX-Regs.          (line    6)
28275* MMIX support:                          MMIX-Dependent.     (line    6)
28276* mmixal differences:                    MMIX-mmixal.        (line    6)
28277* 'mmp' command-line option, C-SKY:      C-SKY Options.      (line   94)
28278* 'mmregs' directive, TIC54X:            TIC54X-Directives.  (line  167)
28279* 'mmsg' directive, TIC54X:              TIC54X-Directives.  (line   75)
28280* MMX, i386:                             i386-SIMD.          (line    6)
28281* MMX, x86-64:                           i386-SIMD.          (line    6)
28282* mnemonic compatibility, i386:          i386-Mnemonics.     (line  120)
28283* mnemonic suffixes, i386:               i386-Variations.    (line   28)
28284* mnemonic suffixes, x86-64:             i386-Variations.    (line   28)
28285* mnemonics for opcodes, VAX:            VAX-opcodes.        (line    6)
28286* mnemonics, AVR:                        AVR Opcodes.        (line    6)
28287* mnemonics, D10V:                       D10V-Opcodes.       (line    6)
28288* mnemonics, D30V:                       D30V-Opcodes.       (line    6)
28289* mnemonics, H8/300:                     H8/300 Opcodes.     (line    6)
28290* mnemonics, LM32:                       LM32 Opcodes.       (line    6)
28291* mnemonics, OpenRISC:                   OpenRISC-Opcodes.   (line    6)
28292* mnemonics, SH:                         SH Opcodes.         (line    6)
28293* mnemonics, Z8000:                      Z8000 Opcodes.      (line    6)
28294* 'mno-branch-stub' command-line option, C-SKY: C-SKY Options.
28295                                                             (line   34)
28296* 'mno-elrw' command-line option, C-SKY: C-SKY Options.      (line   64)
28297* 'mno-force2bsr' command-line option, C-SKY: C-SKY Options. (line   43)
28298* 'mno-istack' command-line option, C-SKY: C-SKY Options.    (line   82)
28299* 'mno-jsri2bsr' command-line option, C-SKY: C-SKY Options.  (line   52)
28300* 'mno-labr' command-line option, C-SKY: C-SKY Options.      (line   75)
28301* 'mno-laf' command-line option, C-SKY:  C-SKY Options.      (line   69)
28302* 'mno-link-relax' command-line option, PRU: PRU Options.    (line   12)
28303* 'mno-literals-after-func' command-line option, C-SKY: C-SKY Options.
28304                                                             (line   69)
28305* 'mno-ljump' command-line option, C-SKY: C-SKY Options.     (line   26)
28306* 'mno-lrw' command-line option, C-SKY:  C-SKY Options.      (line   59)
28307* 'mno-warn-regname-label' command-line option, PRU: PRU Options.
28308                                                             (line   16)
28309* 'mnolist' directive, TIC54X:           TIC54X-Directives.  (line  162)
28310* 'mnoliterals-after-br' command-line option, C-SKY: C-SKY Options.
28311                                                             (line   75)
28312* 'mnolrw' command-line option, C-SKY:   C-SKY Options.      (line   59)
28313* 'mnps400' command-line option, ARC:    ARC Options.        (line   79)
28314* modifiers, M32C:                       M32C-Modifiers.     (line    6)
28315* module layout, WebAssembly:            WebAssembly-module-layout.
28316                                                             (line    6)
28317* Motorola syntax for the 680x0:         M68K-Moto-Syntax.   (line    6)
28318* 'MOVI' instructions, relaxation:       Xtensa Immediate Relaxation.
28319                                                             (line   12)
28320* MOVN, MOVZ and MOVK group relocations, AArch64: AArch64-Relocations.
28321                                                             (line    6)
28322* MOVW and MOVT relocations, ARM:        ARM-Relocations.    (line   21)
28323* MRI compatibility mode:                M.                  (line    6)
28324* 'mri' directive:                       MRI.                (line    6)
28325* MRI mode, temporarily:                 MRI.                (line    6)
28326* 'msecurity' command-line option, C-SKY: C-SKY Options.     (line  103)
28327* MSP 430 floating point (IEEE):         MSP430 Floating Point.
28328                                                             (line    6)
28329* MSP 430 identifiers:                   MSP430-Chars.       (line   17)
28330* MSP 430 line comment character:        MSP430-Chars.       (line    6)
28331* MSP 430 line separator:                MSP430-Chars.       (line   14)
28332* MSP 430 machine directives:            MSP430 Directives.  (line    6)
28333* MSP 430 macros:                        MSP430-Macros.      (line    6)
28334* MSP 430 opcodes:                       MSP430 Opcodes.     (line    6)
28335* MSP 430 options (none):                MSP430 Options.     (line    6)
28336* MSP 430 profiling capability:          MSP430 Profiling Capability.
28337                                                             (line    6)
28338* MSP 430 register names:                MSP430-Regs.        (line    6)
28339* MSP 430 support:                       MSP430-Dependent.   (line    6)
28340* MSP430 Assembler Extensions:           MSP430-Ext.         (line    6)
28341* 'mspabi_attribute' directive, MSP430:  MSP430 Directives.  (line   38)
28342* 'mtrust' command-line option, C-SKY:   C-SKY Options.      (line  106)
28343* 'mul' instruction, i386:               i386-Notes.         (line    6)
28344* 'mul' instruction, x86-64:             i386-Notes.         (line    6)
28345* 'mvdsp' command-line option, C-SKY:    C-SKY Options.      (line  115)
28346* N32K support:                          NS32K-Dependent.    (line    6)
28347* name:                                  Z8000 Directives.   (line   18)
28348* named section:                         Section.            (line    6)
28349* named sections:                        Ld Sections.        (line    8)
28350* names, symbol:                         Symbol Names.       (line    6)
28351* naming object file:                    o.                  (line    6)
28352* NDS32 options:                         NDS32 Options.      (line    6)
28353* NDS32 processor:                       NDS32-Dependent.    (line    6)
28354* new page, in listings:                 Eject.              (line    6)
28355* 'newblock' directive, TIC54X:          TIC54X-Directives.  (line  173)
28356* newline ('\n'):                        Strings.            (line   21)
28357* newline, required at file end:         Statements.         (line   14)
28358* Nios II line comment character:        Nios II Chars.      (line    6)
28359* Nios II line separator character:      Nios II Chars.      (line    6)
28360* Nios II machine directives:            Nios II Directives. (line    6)
28361* Nios II machine relocations:           Nios II Relocations.
28362                                                             (line    6)
28363* Nios II opcodes:                       Nios II Opcodes.    (line    6)
28364* Nios II options:                       Nios II Options.    (line    6)
28365* Nios II support:                       NiosII-Dependent.   (line    6)
28366* Nios support:                          NiosII-Dependent.   (line    6)
28367* 'no-absolute-literals' directive:      Absolute Literals Directive.
28368                                                             (line    6)
28369* 'no-force2bsr' command-line option, C-SKY: C-SKY Options.  (line   43)
28370* 'no-jsri2bsr' command-line option, C-SKY: C-SKY Options.   (line   52)
28371* 'no-longcalls' directive:              Longcalls Directive.
28372                                                             (line    6)
28373* 'no-relax' command-line option, Nios II: Nios II Options.  (line   19)
28374* 'no-schedule' directive:               Schedule Directive. (line    6)
28375* 'no-transform' directive:              Transform Directive.
28376                                                             (line    6)
28377* 'nodelay' directive, OpenRISC:         OpenRISC-Directives.
28378                                                             (line   15)
28379* 'nolist' directive:                    Nolist.             (line    6)
28380* 'nolist' directive, TIC54X:            TIC54X-Directives.  (line  129)
28381* 'nop' directive:                       Nop.                (line    6)
28382* 'NOP' pseudo op, ARM:                  ARM Opcodes.        (line    9)
28383* 'nops' directive:                      Nops.               (line    6)
28384* notes for Alpha:                       Alpha Notes.        (line    6)
28385* notes for WebAssembly:                 WebAssembly-Notes.  (line    6)
28386* NS32K line comment character:          NS32K-Chars.        (line    6)
28387* NS32K line separator:                  NS32K-Chars.        (line   18)
28388* null-terminated strings:               Asciz.              (line    6)
28389* number constants:                      Numbers.            (line    6)
28390* number of macros executed:             Macro.              (line  142)
28391* numbered subsections:                  Sub-Sections.       (line    6)
28392* numbers, 16-bit:                       hword.              (line    6)
28393* numeric values:                        Expressions.        (line    6)
28394* 'nword' directive, SPARC:              Sparc-Directives.   (line   20)
28395* Object Attribute, RISC-V:              RISC-V-ATTRIBUTE.   (line    6)
28396* object attributes:                     Object Attributes.  (line    6)
28397* object file:                           Object.             (line    6)
28398* object file format:                    Object Formats.     (line    6)
28399* object file name:                      o.                  (line    6)
28400* object file, after errors:             Z.                  (line    6)
28401* obsolescent directives:                Deprecated.         (line    6)
28402* 'octa' directive:                      Octa.               (line    6)
28403* octal character code ('\DDD'):         Strings.            (line   30)
28404* octal integers:                        Integers.           (line    9)
28405* 'offset' directive:                    Offset.             (line    6)
28406* 'offset' directive, V850:              V850 Directives.    (line    6)
28407* opcode mnemonics, VAX:                 VAX-opcodes.        (line    6)
28408* opcode names, TILE-Gx:                 TILE-Gx Opcodes.    (line    6)
28409* opcode names, TILEPro:                 TILEPro Opcodes.    (line    6)
28410* opcode names, Xtensa:                  Xtensa Opcodes.     (line    6)
28411* opcode summary, AVR:                   AVR Opcodes.        (line    6)
28412* opcode summary, D10V:                  D10V-Opcodes.       (line    6)
28413* opcode summary, D30V:                  D30V-Opcodes.       (line    6)
28414* opcode summary, H8/300:                H8/300 Opcodes.     (line    6)
28415* opcode summary, LM32:                  LM32 Opcodes.       (line    6)
28416* opcode summary, OpenRISC:              OpenRISC-Opcodes.   (line    6)
28417* opcode summary, SH:                    SH Opcodes.         (line    6)
28418* opcode summary, Z8000:                 Z8000 Opcodes.      (line    6)
28419* opcodes for AArch64:                   AArch64 Opcodes.    (line    6)
28420* opcodes for ARC:                       ARC Opcodes.        (line    6)
28421* opcodes for ARM:                       ARM Opcodes.        (line    6)
28422* opcodes for BPF:                       BPF Opcodes.        (line    6)
28423* opcodes for MSP 430:                   MSP430 Opcodes.     (line    6)
28424* opcodes for Nios II:                   Nios II Opcodes.    (line    6)
28425* opcodes for PRU:                       PRU Opcodes.        (line    6)
28426* opcodes for V850:                      V850 Opcodes.       (line    6)
28427* opcodes, M680x0:                       M68K-opcodes.       (line    6)
28428* opcodes, M68HC11:                      M68HC11-opcodes.    (line    6)
28429* opcodes, WebAssembly:                  WebAssembly-Opcodes.
28430                                                             (line    6)
28431* OPENRISC floating point (IEEE):        OpenRISC-Float.     (line    6)
28432* OpenRISC line comment character:       OpenRISC-Chars.     (line    6)
28433* OpenRISC line separator:               OpenRISC-Chars.     (line    9)
28434* OPENRISC machine directives:           OpenRISC-Directives.
28435                                                             (line    6)
28436* OpenRISC opcode summary:               OpenRISC-Opcodes.   (line    6)
28437* OpenRISC registers:                    OpenRISC-Regs.      (line    6)
28438* OpenRISC relocations:                  OpenRISC-Relocs.    (line    6)
28439* OPENRISC support:                      OpenRISC-Dependent. (line    6)
28440* OPENRISC syntax:                       OpenRISC-Dependent. (line   13)
28441* operand delimiters, i386:              i386-Variations.    (line   15)
28442* operand delimiters, x86-64:            i386-Variations.    (line   15)
28443* operand notation, VAX:                 VAX-operands.       (line    6)
28444* operands in expressions:               Arguments.          (line    6)
28445* operator precedence:                   Infix Ops.          (line   11)
28446* operators, in expressions:             Operators.          (line    6)
28447* operators, permitted arguments:        Infix Ops.          (line    6)
28448* optimization, D10V:                    Overview.           (line  638)
28449* optimization, D30V:                    Overview.           (line  643)
28450* optimizations:                         Xtensa Optimizations.
28451                                                             (line    6)
28452* Option directive:                      RISC-V-Directives.  (line   34)
28453* 'option' directive:                    RISC-V-Directives.  (line   34)
28454* 'option' directive, TIC54X:            TIC54X-Directives.  (line  177)
28455* option summary:                        Overview.           (line    6)
28456* options for AArch64 (none):            AArch64 Options.    (line    6)
28457* options for Alpha:                     Alpha Options.      (line    6)
28458* options for ARC:                       ARC Options.        (line    6)
28459* options for ARM (none):                ARM Options.        (line    6)
28460* options for AVR (none):                AVR Options.        (line    6)
28461* options for Blackfin (none):           Blackfin Options.   (line    6)
28462* options for BPF (none):                BPF Options.        (line    6)
28463* options for C-SKY:                     C-SKY Options.      (line    6)
28464* options for i386:                      i386-Options.       (line    6)
28465* options for IA-64:                     IA-64 Options.      (line    6)
28466* options for LM32 (none):               LM32 Options.       (line    6)
28467* options for Meta:                      Meta Options.       (line    6)
28468* options for MSP430 (none):             MSP430 Options.     (line    6)
28469* options for NDS32:                     NDS32 Options.      (line    6)
28470* options for Nios II:                   Nios II Options.    (line    6)
28471* options for PDP-11:                    PDP-11-Options.     (line    6)
28472* options for PowerPC:                   PowerPC-Opts.       (line    6)
28473* options for PRU:                       PRU Options.        (line    6)
28474* options for s390:                      s390 Options.       (line    6)
28475* options for SCORE:                     SCORE-Opts.         (line    6)
28476* options for SPARC:                     Sparc-Opts.         (line    6)
28477* options for TIC6X:                     TIC6X Options.      (line    6)
28478* options for V850 (none):               V850 Options.       (line    6)
28479* options for VAX/VMS:                   VAX-Opts.           (line   42)
28480* options for Visium:                    Visium Options.     (line    6)
28481* options for x86-64:                    i386-Options.       (line    6)
28482* options for Z80:                       Z80 Options.        (line    6)
28483* options, all versions of assembler:    Invoking.           (line    6)
28484* options, command line:                 Command Line.       (line   13)
28485* options, CRIS:                         CRIS-Opts.          (line    6)
28486* options, D10V:                         D10V-Opts.          (line    6)
28487* options, D30V:                         D30V-Opts.          (line    6)
28488* options, Epiphany:                     Epiphany Options.   (line    6)
28489* options, H8/300:                       H8/300 Options.     (line    6)
28490* options, IP2K:                         IP2K-Opts.          (line    6)
28491* options, M32C:                         M32C-Opts.          (line    6)
28492* options, M32R:                         M32R-Opts.          (line    6)
28493* options, M680x0:                       M68K-Opts.          (line    6)
28494* options, M68HC11:                      M68HC11-Opts.       (line    6)
28495* options, MMIX:                         MMIX-Opts.          (line    6)
28496* options, PJ:                           PJ Options.         (line    6)
28497* options, RL78:                         RL78-Opts.          (line    6)
28498* options, RX:                           RX-Opts.            (line    6)
28499* options, S12Z:                         S12Z Options.       (line    6)
28500* options, SH:                           SH Options.         (line    6)
28501* options, TIC54X:                       TIC54X-Opts.        (line    6)
28502* options, XGATE:                        XGATE-Opts.         (line    6)
28503* options, Z8000:                        Z8000 Options.      (line    6)
28504* 'org' directive:                       Org.                (line    6)
28505* other attribute, of 'a.out' symbol:    Symbol Other.       (line    6)
28506* output file:                           Object.             (line    6)
28507* output section padding:                no-pad-sections.    (line    6)
28508* 'p2align' directive:                   P2align.            (line    6)
28509* 'p2alignl' directive:                  P2align.            (line   30)
28510* 'p2alignw' directive:                  P2align.            (line   30)
28511* padding the location counter:          Align.              (line    6)
28512* padding the location counter given a power of two: P2align.
28513                                                             (line    6)
28514* padding the location counter given number of bytes: Balign.
28515                                                             (line    6)
28516* page, in listings:                     Eject.              (line    6)
28517* paper size, for listings:              Psize.              (line    6)
28518* paths for '.include':                  I.                  (line    6)
28519* patterns, writing in memory:           Fill.               (line    6)
28520* PDP-11 comments:                       PDP-11-Syntax.      (line   16)
28521* PDP-11 floating-point register syntax: PDP-11-Syntax.      (line   13)
28522* PDP-11 general-purpose register syntax: PDP-11-Syntax.     (line   10)
28523* PDP-11 instruction naming:             PDP-11-Mnemonics.   (line    6)
28524* PDP-11 line separator:                 PDP-11-Syntax.      (line   19)
28525* PDP-11 support:                        PDP-11-Dependent.   (line    6)
28526* PDP-11 syntax:                         PDP-11-Syntax.      (line    6)
28527* PIC code generation for ARM:           ARM Options.        (line  376)
28528* PIC code generation for M32R:          M32R-Opts.          (line   42)
28529* 'pic' command-line option, C-SKY:      C-SKY Options.      (line   22)
28530* PIC selection, MIPS:                   MIPS Options.       (line   21)
28531* PJ endianness:                         Overview.           (line  759)
28532* PJ line comment character:             PJ-Chars.           (line    6)
28533* PJ line separator:                     PJ-Chars.           (line   14)
28534* PJ options:                            PJ Options.         (line    6)
28535* PJ support:                            PJ-Dependent.       (line    6)
28536* plus, permitted arguments:             Infix Ops.          (line   45)
28537* 'pmem' directive, PRU:                 PRU Relocations.    (line    6)
28538* 'popsection' directive:                PopSection.         (line    6)
28539* Position-independent code, CRIS:       CRIS-Opts.          (line   27)
28540* Position-independent code, symbols in, CRIS: CRIS-Pic.     (line    6)
28541* PowerPC architectures:                 PowerPC-Opts.       (line    6)
28542* PowerPC directives:                    PowerPC-Pseudo.     (line    6)
28543* PowerPC line comment character:        PowerPC-Chars.      (line    6)
28544* PowerPC line separator:                PowerPC-Chars.      (line   18)
28545* PowerPC options:                       PowerPC-Opts.       (line    6)
28546* PowerPC support:                       PPC-Dependent.      (line    6)
28547* precedence of operators:               Infix Ops.          (line   11)
28548* precision, floating point:             Flonums.            (line    6)
28549* prefix operators:                      Prefix Ops.         (line    6)
28550* prefixes, i386:                        i386-Prefixes.      (line    6)
28551* preprocessing:                         Preprocessing.      (line    6)
28552* preprocessing, turning on and off:     Preprocessing.      (line   28)
28553* 'previous' directive:                  Previous.           (line    6)
28554* primary attributes, COFF symbols:      COFF Symbols.       (line   13)
28555* 'print' directive:                     Print.              (line    6)
28556* 'proc' directive, OpenRISC:            OpenRISC-Directives.
28557                                                             (line   20)
28558* 'proc' directive, SPARC:               Sparc-Directives.   (line   25)
28559* Processor Identification register, ARC: ARC-Regs.          (line   51)
28560* 'profiler' directive, MSP 430:         MSP430 Directives.  (line   26)
28561* profiling capability for MSP 430:      MSP430 Profiling Capability.
28562                                                             (line    6)
28563* Program Counter, ARC:                  ARC-Regs.           (line   54)
28564* 'protected' directive:                 Protected.          (line    6)
28565* PRU line comment character:            PRU Chars.          (line    6)
28566* PRU machine directives:                PRU Directives.     (line    6)
28567* PRU machine relocations:               PRU Relocations.    (line    6)
28568* PRU opcodes:                           PRU Opcodes.        (line    6)
28569* PRU options:                           PRU Options.        (line    6)
28570* PRU support:                           PRU-Dependent.      (line    6)
28571* 'psect' directive, Z80:                Z80 Directives.     (line   58)
28572* pseudo map fd, BPF:                    BPF-Pseudo-Maps.    (line    6)
28573* pseudo-op .arch, CRIS:                 CRIS-Pseudos.       (line   50)
28574* pseudo-op .dword, CRIS:                CRIS-Pseudos.       (line   12)
28575* pseudo-op .syntax, CRIS:               CRIS-Pseudos.       (line   18)
28576* pseudo-op BSPEC, MMIX:                 MMIX-Pseudos.       (line  137)
28577* pseudo-op BYTE, MMIX:                  MMIX-Pseudos.       (line  101)
28578* pseudo-op ESPEC, MMIX:                 MMIX-Pseudos.       (line  137)
28579* pseudo-op GREG, MMIX:                  MMIX-Pseudos.       (line   53)
28580* pseudo-op IS, MMIX:                    MMIX-Pseudos.       (line   44)
28581* pseudo-op LOC, MMIX:                   MMIX-Pseudos.       (line    7)
28582* pseudo-op LOCAL, MMIX:                 MMIX-Pseudos.       (line   29)
28583* pseudo-op OCTA, MMIX:                  MMIX-Pseudos.       (line  113)
28584* pseudo-op PREFIX, MMIX:                MMIX-Pseudos.       (line  125)
28585* pseudo-op TETRA, MMIX:                 MMIX-Pseudos.       (line  113)
28586* pseudo-op WYDE, MMIX:                  MMIX-Pseudos.       (line  113)
28587* pseudo-opcodes for XStormy16:          XStormy16 Opcodes.  (line    6)
28588* pseudo-opcodes, M680x0:                M68K-Branch.        (line    6)
28589* pseudo-opcodes, M68HC11:               M68HC11-Branch.     (line    6)
28590* pseudo-ops for branch, VAX:            VAX-branch.         (line    6)
28591* pseudo-ops, CRIS:                      CRIS-Pseudos.       (line    6)
28592* pseudo-ops, machine independent:       Pseudo Ops.         (line    6)
28593* pseudo-ops, MMIX:                      MMIX-Pseudos.       (line    6)
28594* 'psize' directive:                     Psize.              (line    6)
28595* PSR bits:                              IA-64-Bits.         (line    6)
28596* 'pstring' directive, TIC54X:           TIC54X-Directives.  (line  206)
28597* 'psw' register, V850:                  V850-Regs.          (line   80)
28598* 'purgem' directive:                    Purgem.             (line    6)
28599* purpose of GNU assembler:              GNU Assembler.      (line   12)
28600* 'pushsection' directive:               PushSection.        (line    6)
28601* 'quad' directive:                      Quad.               (line    6)
28602* 'quad' directive, i386:                i386-Float.         (line   21)
28603* 'quad' directive, x86-64:              i386-Float.         (line   21)
28604* real-mode code, i386:                  i386-16bit.         (line    6)
28605* 'ref' directive, TIC54X:               TIC54X-Directives.  (line  101)
28606* 'refsym' directive, MSP 430:           MSP430 Directives.  (line   30)
28607* 'register' directive, SPARC:           Sparc-Directives.   (line   29)
28608* register name prefix character, ARC:   ARC-Chars.          (line    7)
28609* register names, AArch64:               AArch64-Regs.       (line    6)
28610* register names, Alpha:                 Alpha-Regs.         (line    6)
28611* register names, ARC:                   ARC-Regs.           (line    6)
28612* register names, ARM:                   ARM-Regs.           (line    6)
28613* register names, AVR:                   AVR-Regs.           (line    6)
28614* register names, BPF:                   BPF-Regs.           (line    6)
28615* register names, CRIS:                  CRIS-Regs.          (line    6)
28616* register names, H8/300:                H8/300-Regs.        (line    6)
28617* register names, IA-64:                 IA-64-Regs.         (line    6)
28618* register names, LM32:                  LM32-Regs.          (line    6)
28619* register names, MMIX:                  MMIX-Regs.          (line    6)
28620* register names, MSP 430:               MSP430-Regs.        (line    6)
28621* register names, OpenRISC:              OpenRISC-Regs.      (line    6)
28622* register names, S12Z:                  S12Z Addressing Modes.
28623                                                             (line   28)
28624* register names, Sparc:                 Sparc-Regs.         (line    6)
28625* register names, TILE-Gx:               TILE-Gx Registers.  (line    6)
28626* register names, TILEPro:               TILEPro Registers.  (line    6)
28627* register names, V850:                  V850-Regs.          (line    6)
28628* register names, VAX:                   VAX-operands.       (line   17)
28629* register names, Visium:                Visium Registers.   (line    6)
28630* register names, Xtensa:                Xtensa Registers.   (line    6)
28631* register names, Z80:                   Z80-Regs.           (line    6)
28632* register naming, s390:                 s390 Register.      (line    6)
28633* register notation, S12Z:               S12Z Register Notation.
28634                                                             (line    6)
28635* register operands, i386:               i386-Variations.    (line   15)
28636* register operands, x86-64:             i386-Variations.    (line   15)
28637* registers, D10V:                       D10V-Regs.          (line    6)
28638* registers, D30V:                       D30V-Regs.          (line    6)
28639* registers, i386:                       i386-Regs.          (line    6)
28640* registers, Meta:                       Meta-Regs.          (line    6)
28641* registers, SH:                         SH-Regs.            (line    6)
28642* registers, TIC54X memory-mapped:       TIC54X-MMRegs.      (line    6)
28643* registers, x86-64:                     i386-Regs.          (line    6)
28644* registers, Z8000:                      Z8000-Regs.         (line    6)
28645* 'relax-all' command-line option, Nios II: Nios II Options. (line   13)
28646* 'relax-section' command-line option, Nios II: Nios II Options.
28647                                                             (line    6)
28648* relaxation:                            Xtensa Relaxation.  (line    6)
28649* relaxation of 'ADDI' instructions:     Xtensa Immediate Relaxation.
28650                                                             (line   43)
28651* relaxation of branch instructions:     Xtensa Branch Relaxation.
28652                                                             (line    6)
28653* relaxation of call instructions:       Xtensa Call Relaxation.
28654                                                             (line    6)
28655* relaxation of immediate fields:        Xtensa Immediate Relaxation.
28656                                                             (line    6)
28657* relaxation of jump instructions:       Xtensa Jump Relaxation.
28658                                                             (line    6)
28659* relaxation of 'L16SI' instructions:    Xtensa Immediate Relaxation.
28660                                                             (line   23)
28661* relaxation of 'L16UI' instructions:    Xtensa Immediate Relaxation.
28662                                                             (line   23)
28663* relaxation of 'L32I' instructions:     Xtensa Immediate Relaxation.
28664                                                             (line   23)
28665* relaxation of 'L8UI' instructions:     Xtensa Immediate Relaxation.
28666                                                             (line   23)
28667* relaxation of 'MOVI' instructions:     Xtensa Immediate Relaxation.
28668                                                             (line   12)
28669* 'reloc' directive:                     Reloc.              (line    6)
28670* relocation:                            Sections.           (line    6)
28671* relocation example:                    Ld Sections.        (line   40)
28672* relocations, AArch64:                  AArch64-Relocations.
28673                                                             (line    6)
28674* relocations, Alpha:                    Alpha-Relocs.       (line    6)
28675* relocations, OpenRISC:                 OpenRISC-Relocs.    (line    6)
28676* relocations, Sparc:                    Sparc-Relocs.       (line    6)
28677* relocations, WebAssembly:              WebAssembly-Relocs. (line    6)
28678* repeat prefixes, i386:                 i386-Prefixes.      (line   44)
28679* reporting bugs in assembler:           Reporting Bugs.     (line    6)
28680* 'rept' directive:                      Rept.               (line    6)
28681* 'reserve' directive, SPARC:            Sparc-Directives.   (line   39)
28682* return instructions, i386:             i386-Variations.    (line   45)
28683* return instructions, x86-64:           i386-Variations.    (line   45)
28684* REX prefixes, i386:                    i386-Prefixes.      (line   46)
28685* RISC-V instruction formats:            RISC-V-Formats.     (line    6)
28686* RISC-V machine directives:             RISC-V-Directives.  (line    6)
28687* RISC-V support:                        RISC-V-Dependent.   (line    6)
28688* RL78 assembler directives:             RL78-Directives.    (line    6)
28689* RL78 line comment character:           RL78-Chars.         (line    6)
28690* RL78 line separator:                   RL78-Chars.         (line   14)
28691* RL78 modifiers:                        RL78-Modifiers.     (line    6)
28692* RL78 options:                          RL78-Opts.          (line    6)
28693* RL78 support:                          RL78-Dependent.     (line    6)
28694* rsect:                                 Z8000 Directives.   (line   51)
28695* RX assembler directive .3byte:         RX-Directives.      (line    9)
28696* RX assembler directive .fetchalign:    RX-Directives.      (line   13)
28697* RX assembler directives:               RX-Directives.      (line    6)
28698* RX floating point:                     RX-Float.           (line    6)
28699* RX line comment character:             RX-Chars.           (line    6)
28700* RX line separator:                     RX-Chars.           (line   14)
28701* RX modifiers:                          RX-Modifiers.       (line    6)
28702* RX options:                            RX-Opts.            (line    6)
28703* RX support:                            RX-Dependent.       (line    6)
28704* S12Z addressing modes:                 S12Z Addressing Modes.
28705                                                             (line    6)
28706* S12Z line separator:                   S12Z Syntax Overview.
28707                                                             (line   41)
28708* S12Z options:                          S12Z Options.       (line    6)
28709* S12Z support:                          S12Z-Dependent.     (line    8)
28710* S12Z syntax:                           S12Z Syntax.        (line   12)
28711* s390 floating point:                   s390 Floating Point.
28712                                                             (line    6)
28713* s390 instruction aliases:              s390 Aliases.       (line    6)
28714* s390 instruction formats:              s390 Formats.       (line    6)
28715* s390 instruction marker:               s390 Instruction Marker.
28716                                                             (line    6)
28717* s390 instruction mnemonics:            s390 Mnemonics.     (line    6)
28718* s390 instruction operand modifier:     s390 Operand Modifier.
28719                                                             (line    6)
28720* s390 instruction operands:             s390 Operands.      (line    6)
28721* s390 instruction syntax:               s390 Syntax.        (line    6)
28722* s390 line comment character:           s390 Characters.    (line    6)
28723* s390 line separator:                   s390 Characters.    (line   13)
28724* s390 literal pool entries:             s390 Literal Pool Entries.
28725                                                             (line    6)
28726* s390 options:                          s390 Options.       (line    6)
28727* s390 register naming:                  s390 Register.      (line    6)
28728* s390 support:                          S/390-Dependent.    (line    6)
28729* Saved User Stack Pointer, ARC:         ARC-Regs.           (line   73)
28730* 'sblock' directive, TIC54X:            TIC54X-Directives.  (line  180)
28731* 'sbttl' directive:                     Sbttl.              (line    6)
28732* 'schedule' directive:                  Schedule Directive. (line    6)
28733* 'scl' directive:                       Scl.                (line    6)
28734* SCORE architectures:                   SCORE-Opts.         (line    6)
28735* SCORE directives:                      SCORE-Pseudo.       (line    6)
28736* SCORE line comment character:          SCORE-Chars.        (line    6)
28737* SCORE line separator:                  SCORE-Chars.        (line   14)
28738* SCORE options:                         SCORE-Opts.         (line    6)
28739* SCORE processor:                       SCORE-Dependent.    (line    6)
28740* 'sdaoff' pseudo-op, V850:              V850 Opcodes.       (line   65)
28741* search path for '.include':            I.                  (line    6)
28742* 'sect' directive, TIC54X:              TIC54X-Directives.  (line  186)
28743* 'section' directive (COFF version):    Section.            (line   16)
28744* 'section' directive (ELF version):     Section.            (line   67)
28745* 'section' directive, V850:             V850 Directives.    (line    9)
28746* section name substitution:             Section.            (line   71)
28747* section override prefixes, i386:       i386-Prefixes.      (line   23)
28748* Section Stack:                         PopSection.         (line    6)
28749* Section Stack <1>:                     Previous.           (line    6)
28750* Section Stack <2>:                     PushSection.        (line    6)
28751* Section Stack <3>:                     Section.            (line   62)
28752* Section Stack <4>:                     SubSection.         (line    6)
28753* section-relative addressing:           Secs Background.    (line   65)
28754* sections:                              Sections.           (line    6)
28755* sections in messages, internal:        As Sections.        (line    6)
28756* sections, i386:                        i386-Variations.    (line   51)
28757* sections, named:                       Ld Sections.        (line    8)
28758* sections, x86-64:                      i386-Variations.    (line   51)
28759* 'seg' directive, SPARC:                Sparc-Directives.   (line   44)
28760* segm:                                  Z8000 Directives.   (line   10)
28761* 'set at' directive, Nios II:           Nios II Directives. (line   35)
28762* 'set break' directive, Nios II:        Nios II Directives. (line   43)
28763* 'set' directive:                       Set.                (line    6)
28764* 'set' directive, Nios II:              Nios II Directives. (line   57)
28765* 'set' directive, TIC54X:               TIC54X-Directives.  (line  189)
28766* 'set noat' directive, Nios II:         Nios II Directives. (line   31)
28767* 'set nobreak' directive, Nios II:      Nios II Directives. (line   39)
28768* 'set norelax' directive, Nios II:      Nios II Directives. (line   46)
28769* 'set no_warn_regname_label' directive, PRU: PRU Directives.
28770                                                             (line   28)
28771* 'set relaxall' directive, Nios II:     Nios II Directives. (line   53)
28772* 'set relaxsection' directive, Nios II: Nios II Directives. (line   49)
28773* SH addressing modes:                   SH-Addressing.      (line    6)
28774* SH floating point (IEEE):              SH Floating Point.  (line    6)
28775* SH line comment character:             SH-Chars.           (line    6)
28776* SH line separator:                     SH-Chars.           (line    8)
28777* SH machine directives:                 SH Directives.      (line    6)
28778* SH opcode summary:                     SH Opcodes.         (line    6)
28779* SH options:                            SH Options.         (line    6)
28780* SH registers:                          SH-Regs.            (line    6)
28781* SH support:                            SH-Dependent.       (line    6)
28782* 'shigh' directive, M32R:               M32R-Directives.    (line   26)
28783* 'short' directive:                     Short.              (line    6)
28784* 'short' directive, TIC54X:             TIC54X-Directives.  (line  109)
28785* signatures, WebAssembly:               WebAssembly-Signatures.
28786                                                             (line    6)
28787* SIMD, i386:                            i386-SIMD.          (line    6)
28788* SIMD, x86-64:                          i386-SIMD.          (line    6)
28789* single character constant:             Chars.              (line    6)
28790* 'single' directive:                    Single.             (line    6)
28791* 'single' directive, i386:              i386-Float.         (line   14)
28792* 'single' directive, x86-64:            i386-Float.         (line   14)
28793* single quote, Z80:                     Z80-Chars.          (line   20)
28794* sixteen bit integers:                  hword.              (line    6)
28795* sixteen byte integer:                  Octa.               (line    6)
28796* 'size' directive (COFF version):       Size.               (line   11)
28797* 'size' directive (ELF version):        Size.               (line   19)
28798* size modifiers, D10V:                  D10V-Size.          (line    6)
28799* size modifiers, D30V:                  D30V-Size.          (line    6)
28800* size modifiers, M680x0:                M68K-Syntax.        (line    8)
28801* size prefixes, i386:                   i386-Prefixes.      (line   27)
28802* size suffixes, H8/300:                 H8/300 Opcodes.     (line  160)
28803* size, translations, Sparc:             Sparc-Size-Translations.
28804                                                             (line    6)
28805* sizes operands, i386:                  i386-Variations.    (line   28)
28806* sizes operands, x86-64:                i386-Variations.    (line   28)
28807* 'skip' directive:                      Skip.               (line    6)
28808* 'skip' directive, M680x0:              M68K-Directives.    (line   19)
28809* 'skip' directive, SPARC:               Sparc-Directives.   (line   48)
28810* 'sleb128' directive:                   Sleb128.            (line    6)
28811* small data, MIPS:                      MIPS Small Data.    (line    6)
28812* SmartMIPS instruction generation override: MIPS ASE Instruction Generation Overrides.
28813                                                             (line   11)
28814* SOM symbol attributes:                 SOM Symbols.        (line    6)
28815* source program:                        Input Files.        (line    6)
28816* source, destination operands; i386:    i386-Variations.    (line   21)
28817* source, destination operands; x86-64:  i386-Variations.    (line   21)
28818* sp register:                           Xtensa Registers.   (line    6)
28819* 'sp' register, V850:                   V850-Regs.          (line   12)
28820* 'space' directive:                     Space.              (line    6)
28821* 'space' directive, TIC54X:             TIC54X-Directives.  (line  194)
28822* space used, maximum for assembly:      statistics.         (line    6)
28823* SPARC architectures:                   Sparc-Opts.         (line    6)
28824* Sparc constants:                       Sparc-Constants.    (line    6)
28825* SPARC data alignment:                  Sparc-Aligned-Data. (line    6)
28826* SPARC floating point (IEEE):           Sparc-Float.        (line    6)
28827* Sparc line comment character:          Sparc-Chars.        (line    6)
28828* Sparc line separator:                  Sparc-Chars.        (line   14)
28829* SPARC machine directives:              Sparc-Directives.   (line    6)
28830* SPARC options:                         Sparc-Opts.         (line    6)
28831* Sparc registers:                       Sparc-Regs.         (line    6)
28832* Sparc relocations:                     Sparc-Relocs.       (line    6)
28833* Sparc size translations:               Sparc-Size-Translations.
28834                                                             (line    6)
28835* SPARC support:                         Sparc-Dependent.    (line    6)
28836* SPARC syntax:                          Sparc-Aligned-Data. (line   21)
28837* special characters, M680x0:            M68K-Chars.         (line    6)
28838* special purpose registers, MSP 430:    MSP430-Regs.        (line   11)
28839* 'sslist' directive, TIC54X:            TIC54X-Directives.  (line  201)
28840* 'ssnolist' directive, TIC54X:          TIC54X-Directives.  (line  201)
28841* 'stabd' directive:                     Stab.               (line   38)
28842* 'stabn' directive:                     Stab.               (line   49)
28843* 'stabs' directive:                     Stab.               (line   52)
28844* 'stabX' directives:                    Stab.               (line    6)
28845* stack pointer, ARC:                    ARC-Regs.           (line   20)
28846* standard assembler sections:           Secs Background.    (line   27)
28847* standard input, as input file:         Command Line.       (line   10)
28848* statement separator character:         Statements.         (line    6)
28849* statement separator, AArch64:          AArch64-Chars.      (line   10)
28850* statement separator, Alpha:            Alpha-Chars.        (line   11)
28851* statement separator, ARC:              ARC-Chars.          (line   27)
28852* statement separator, ARM:              ARM-Chars.          (line   14)
28853* statement separator, AVR:              AVR-Chars.          (line   14)
28854* statement separator, BPF:              BPF-Chars.          (line   10)
28855* statement separator, CR16:             CR16-Chars.         (line   12)
28856* statement separator, Epiphany:         Epiphany-Chars.     (line   14)
28857* statement separator, H8/300:           H8/300-Chars.       (line    8)
28858* statement separator, i386:             i386-Chars.         (line   18)
28859* statement separator, IA-64:            IA-64-Chars.        (line    8)
28860* statement separator, IP2K:             IP2K-Chars.         (line   14)
28861* statement separator, LM32:             LM32-Chars.         (line   12)
28862* statement separator, M32C:             M32C-Chars.         (line   14)
28863* statement separator, M68HC11:          M68HC11-Syntax.     (line   26)
28864* statement separator, Meta:             Meta-Chars.         (line    8)
28865* statement separator, MicroBlaze:       MicroBlaze-Chars.   (line   14)
28866* statement separator, MIPS:             MIPS-Chars.         (line   14)
28867* statement separator, MSP 430:          MSP430-Chars.       (line   14)
28868* statement separator, NS32K:            NS32K-Chars.        (line   18)
28869* statement separator, OpenRISC:         OpenRISC-Chars.     (line    9)
28870* statement separator, PJ:               PJ-Chars.           (line   14)
28871* statement separator, PowerPC:          PowerPC-Chars.      (line   18)
28872* statement separator, RL78:             RL78-Chars.         (line   14)
28873* statement separator, RX:               RX-Chars.           (line   14)
28874* statement separator, S12Z:             S12Z Syntax Overview.
28875                                                             (line   41)
28876* statement separator, s390:             s390 Characters.    (line   13)
28877* statement separator, SCORE:            SCORE-Chars.        (line   14)
28878* statement separator, SH:               SH-Chars.           (line    8)
28879* statement separator, Sparc:            Sparc-Chars.        (line   14)
28880* statement separator, TIC54X:           TIC54X-Chars.       (line   17)
28881* statement separator, TIC6X:            TIC6X Syntax.       (line   13)
28882* statement separator, V850:             V850-Chars.         (line   13)
28883* statement separator, VAX:              VAX-Chars.          (line   14)
28884* statement separator, Visium:           Visium Characters.  (line   14)
28885* statement separator, XGATE:            XGATE-Syntax.       (line   25)
28886* statement separator, XStormy16:        XStormy16-Chars.    (line   14)
28887* statement separator, Z80:              Z80-Chars.          (line   13)
28888* statement separator, Z8000:            Z8000-Chars.        (line   13)
28889* statements, structure of:              Statements.         (line    6)
28890* statistics, about assembly:            statistics.         (line    6)
28891* Status register, ARC:                  ARC-Regs.           (line   57)
28892* STATUS32 saved on exception, ARC:      ARC-Regs.           (line   82)
28893* stopping the assembly:                 Abort.              (line    6)
28894* Stored STATUS32 register on entry to level P0 interrupts, ARC: ARC-Regs.
28895                                                             (line   69)
28896* string constants:                      Strings.            (line    6)
28897* 'string' directive:                    String.             (line    8)
28898* 'string' directive on HPPA:            HPPA Directives.    (line  137)
28899* 'string' directive, TIC54X:            TIC54X-Directives.  (line  206)
28900* string literals:                       Ascii.              (line    6)
28901* string, copying to object file:        String.             (line    8)
28902* 'string16' directive:                  String.             (line    8)
28903* string16, copying to object file:      String.             (line    8)
28904* 'string32' directive:                  String.             (line    8)
28905* string32, copying to object file:      String.             (line    8)
28906* 'string64' directive:                  String.             (line    8)
28907* string64, copying to object file:      String.             (line    8)
28908* 'string8' directive:                   String.             (line    8)
28909* string8, copying to object file:       String.             (line    8)
28910* 'struct' directive:                    Struct.             (line    6)
28911* 'struct' directive, TIC54X:            TIC54X-Directives.  (line  214)
28912* structure debugging, COFF:             Tag.                (line    6)
28913* sub-instruction ordering, D10V:        D10V-Chars.         (line   14)
28914* sub-instruction ordering, D30V:        D30V-Chars.         (line   14)
28915* sub-instructions, D10V:                D10V-Subs.          (line    6)
28916* sub-instructions, D30V:                D30V-Subs.          (line    6)
28917* subexpressions:                        Arguments.          (line   24)
28918* 'subsection' directive:                SubSection.         (line    6)
28919* subsym builtins, TIC54X:               TIC54X-Macros.      (line   16)
28920* subtitles for listings:                Sbttl.              (line    6)
28921* subtraction, permitted arguments:      Infix Ops.          (line   50)
28922* summary of options:                    Overview.           (line    6)
28923* support:                               HPPA-Dependent.     (line    6)
28924* supporting files, including:           Include.            (line    6)
28925* suppressing warnings:                  W.                  (line   11)
28926* sval:                                  Z8000 Directives.   (line   33)
28927* symbol attributes:                     Symbol Attributes.  (line    6)
28928* symbol attributes, 'a.out':            a.out Symbols.      (line    6)
28929* symbol attributes, COFF:               COFF Symbols.       (line    6)
28930* symbol attributes, SOM:                SOM Symbols.        (line    6)
28931* symbol descriptor, COFF:               Desc.               (line    6)
28932* symbol modifiers:                      AVR-Modifiers.      (line   12)
28933* symbol modifiers <1>:                  LM32-Modifiers.     (line   12)
28934* symbol modifiers <2>:                  M32C-Modifiers.     (line   11)
28935* symbol modifiers <3>:                  M68HC11-Modifiers.  (line   12)
28936* symbol modifiers, TILE-Gx:             TILE-Gx Modifiers.  (line    6)
28937* symbol modifiers, TILEPro:             TILEPro Modifiers.  (line    6)
28938* symbol names:                          Symbol Names.       (line    6)
28939* symbol names, '$' in:                  D10V-Chars.         (line   46)
28940* symbol names, '$' in <1>:              D30V-Chars.         (line   70)
28941* symbol names, '$' in <2>:              Meta-Chars.         (line   10)
28942* symbol names, '$' in <3>:              SH-Chars.           (line   15)
28943* symbol names, local:                   Symbol Names.       (line   30)
28944* symbol names, temporary:               Symbol Names.       (line   43)
28945* symbol prefix character, ARC:          ARC-Chars.          (line   20)
28946* symbol storage class (COFF):           Scl.                (line    6)
28947* symbol type:                           Symbol Type.        (line    6)
28948* symbol type, COFF:                     Type.               (line   11)
28949* symbol type, ELF:                      Type.               (line   22)
28950* symbol value:                          Symbol Value.       (line    6)
28951* symbol value, setting:                 Set.                (line    6)
28952* symbol values, assigning:              Setting Symbols.    (line    6)
28953* symbol versioning:                     Symver.             (line    6)
28954* symbol, common:                        Comm.               (line    6)
28955* symbol, making visible to linker:      Global.             (line    6)
28956* symbolic debuggers, information for:   Stab.               (line    6)
28957* symbols:                               Symbols.            (line    6)
28958* Symbols in position-independent code, CRIS: CRIS-Pic.      (line    6)
28959* symbols with uppercase, VAX/VMS:       VAX-Opts.           (line   42)
28960* symbols, assigning values to:          Equ.                (line    6)
28961* Symbols, built-in, CRIS:               CRIS-Symbols.       (line    6)
28962* Symbols, CRIS, built-in:               CRIS-Symbols.       (line    6)
28963* symbols, local common:                 Lcomm.              (line    6)
28964* 'symver' directive:                    Symver.             (line    6)
28965* syntax compatibility, i386:            i386-Variations.    (line    6)
28966* syntax compatibility, x86-64:          i386-Variations.    (line    6)
28967* syntax, AVR:                           AVR-Modifiers.      (line    6)
28968* syntax, Blackfin:                      Blackfin Syntax.    (line    6)
28969* syntax, D10V:                          D10V-Syntax.        (line    6)
28970* syntax, D30V:                          D30V-Syntax.        (line    6)
28971* syntax, LM32:                          LM32-Modifiers.     (line    6)
28972* syntax, M680x0:                        M68K-Syntax.        (line    8)
28973* syntax, M68HC11:                       M68HC11-Syntax.     (line    6)
28974* syntax, M68HC11 <1>:                   M68HC11-Modifiers.  (line    6)
28975* syntax, machine-independent:           Syntax.             (line    6)
28976* syntax, OPENRISC:                      OpenRISC-Dependent. (line   12)
28977* syntax, RL78:                          RL78-Modifiers.     (line    6)
28978* syntax, RX:                            RX-Modifiers.       (line    6)
28979* syntax, S12Z:                          S12Z Syntax.        (line   11)
28980* syntax, SPARC:                         Sparc-Aligned-Data. (line   20)
28981* syntax, TILE-Gx:                       TILE-Gx Syntax.     (line    6)
28982* syntax, TILEPro:                       TILEPro Syntax.     (line    6)
28983* syntax, XGATE:                         XGATE-Syntax.       (line    6)
28984* syntax, Xtensa assembler:              Xtensa Syntax.      (line    6)
28985* tab ('\t'):                            Strings.            (line   27)
28986* 'tab' directive, TIC54X:               TIC54X-Directives.  (line  245)
28987* 'tag' directive:                       Tag.                (line    6)
28988* 'tag' directive, TIC54X:               TIC54X-Directives.  (line  214)
28989* 'tag' directive, TIC54X <1>:           TIC54X-Directives.  (line  248)
28990* TBM, i386:                             i386-TBM.           (line    6)
28991* TBM, x86-64:                           i386-TBM.           (line    6)
28992* 'tdaoff' pseudo-op, V850:              V850 Opcodes.       (line   81)
28993* temporary symbol names:                Symbol Names.       (line   43)
28994* text and data sections, joining:       R.                  (line    6)
28995* 'text' directive:                      Text.               (line    6)
28996* text section:                          Ld Sections.        (line    9)
28997* 'tfloat' directive, i386:              i386-Float.         (line   14)
28998* 'tfloat' directive, x86-64:            i386-Float.         (line   14)
28999* Thumb support:                         ARM-Dependent.      (line    6)
29000* TIC54X builtin math functions:         TIC54X-Builtins.    (line    6)
29001* TIC54X line comment character:         TIC54X-Chars.       (line    6)
29002* TIC54X line separator:                 TIC54X-Chars.       (line   17)
29003* TIC54X machine directives:             TIC54X-Directives.  (line    6)
29004* TIC54X memory-mapped registers:        TIC54X-MMRegs.      (line    6)
29005* TIC54X options:                        TIC54X-Opts.        (line    6)
29006* TIC54X subsym builtins:                TIC54X-Macros.      (line   16)
29007* TIC54X support:                        TIC54X-Dependent.   (line    6)
29008* TIC54X-specific macros:                TIC54X-Macros.      (line    6)
29009* TIC6X big-endian output:               TIC6X Options.      (line   46)
29010* TIC6X line comment character:          TIC6X Syntax.       (line    6)
29011* TIC6X line separator:                  TIC6X Syntax.       (line   13)
29012* TIC6X little-endian output:            TIC6X Options.      (line   46)
29013* TIC6X machine directives:              TIC6X Directives.   (line    6)
29014* TIC6X options:                         TIC6X Options.      (line    6)
29015* TIC6X support:                         TIC6X-Dependent.    (line    6)
29016* TILE-Gx machine directives:            TILE-Gx Directives. (line    6)
29017* TILE-Gx modifiers:                     TILE-Gx Modifiers.  (line    6)
29018* TILE-Gx opcode names:                  TILE-Gx Opcodes.    (line    6)
29019* TILE-Gx register names:                TILE-Gx Registers.  (line    6)
29020* TILE-Gx support:                       TILE-Gx-Dependent.  (line    6)
29021* TILE-Gx syntax:                        TILE-Gx Syntax.     (line    6)
29022* TILEPro machine directives:            TILEPro Directives. (line    6)
29023* TILEPro modifiers:                     TILEPro Modifiers.  (line    6)
29024* TILEPro opcode names:                  TILEPro Opcodes.    (line    6)
29025* TILEPro register names:                TILEPro Registers.  (line    6)
29026* TILEPro support:                       TILEPro-Dependent.  (line    6)
29027* TILEPro syntax:                        TILEPro Syntax.     (line    6)
29028* time, total for assembly:              statistics.         (line    6)
29029* 'title' directive:                     Title.              (line    6)
29030* 'tls_common' directive:                Tls_common.         (line    6)
29031* 'tls_gd' directive, Nios II:           Nios II Relocations.
29032                                                             (line   38)
29033* 'tls_ie' directive, Nios II:           Nios II Relocations.
29034                                                             (line   38)
29035* 'tls_ldm' directive, Nios II:          Nios II Relocations.
29036                                                             (line   38)
29037* 'tls_ldo' directive, Nios II:          Nios II Relocations.
29038                                                             (line   38)
29039* 'tls_le' directive, Nios II:           Nios II Relocations.
29040                                                             (line   38)
29041* TMS320C6X support:                     TIC6X-Dependent.    (line    6)
29042* 'tp' register, V850:                   V850-Regs.          (line   16)
29043* 'transform' directive:                 Transform Directive.
29044                                                             (line    6)
29045* trusted compiler:                      f.                  (line    6)
29046* turning preprocessing on and off:      Preprocessing.      (line   28)
29047* two-byte integer:                      2byte.              (line    6)
29048* 'type' directive (COFF version):       Type.               (line   11)
29049* 'type' directive (ELF version):        Type.               (line   22)
29050* type of a symbol:                      Symbol Type.        (line    6)
29051* 'ualong' directive, SH:                SH Directives.      (line    6)
29052* 'uaquad' directive, SH:                SH Directives.      (line    6)
29053* 'uaword' directive, SH:                SH Directives.      (line    6)
29054* 'ubyte' directive, TIC54X:             TIC54X-Directives.  (line   34)
29055* 'uchar' directive, TIC54X:             TIC54X-Directives.  (line   34)
29056* 'uhalf' directive, TIC54X:             TIC54X-Directives.  (line  109)
29057* 'uint' directive, TIC54X:              TIC54X-Directives.  (line  109)
29058* 'uleb128' directive:                   Uleb128.            (line    6)
29059* 'ulong' directive, TIC54X:             TIC54X-Directives.  (line  133)
29060* undefined section:                     Ld Sections.        (line   36)
29061* 'union' directive, TIC54X:             TIC54X-Directives.  (line  248)
29062* unsegm:                                Z8000 Directives.   (line   14)
29063* 'usect' directive, TIC54X:             TIC54X-Directives.  (line  260)
29064* 'ushort' directive, TIC54X:            TIC54X-Directives.  (line  109)
29065* 'uword' directive, TIC54X:             TIC54X-Directives.  (line  109)
29066* V850 command-line options:             V850 Options.       (line    9)
29067* V850 floating point (IEEE):            V850 Floating Point.
29068                                                             (line    6)
29069* V850 line comment character:           V850-Chars.         (line    6)
29070* V850 line separator:                   V850-Chars.         (line   13)
29071* V850 machine directives:               V850 Directives.    (line    6)
29072* V850 opcodes:                          V850 Opcodes.       (line    6)
29073* V850 options (none):                   V850 Options.       (line    6)
29074* V850 register names:                   V850-Regs.          (line    6)
29075* V850 support:                          V850-Dependent.     (line    6)
29076* 'val' directive:                       Val.                (line    6)
29077* value attribute, COFF:                 Val.                (line    6)
29078* 'value' directive:                     i386-Directives.    (line   26)
29079* value of a symbol:                     Symbol Value.       (line    6)
29080* 'var' directive, TIC54X:               TIC54X-Directives.  (line  270)
29081* VAX bitfields not supported:           VAX-no.             (line    6)
29082* VAX branch improvement:                VAX-branch.         (line    6)
29083* VAX command-line options ignored:      VAX-Opts.           (line    6)
29084* VAX displacement sizing character:     VAX-operands.       (line   12)
29085* VAX floating point:                    VAX-float.          (line    6)
29086* VAX immediate character:               VAX-operands.       (line    6)
29087* VAX indirect character:                VAX-operands.       (line    9)
29088* VAX line comment character:            VAX-Chars.          (line    6)
29089* VAX line separator:                    VAX-Chars.          (line   14)
29090* VAX machine directives:                VAX-directives.     (line    6)
29091* VAX opcode mnemonics:                  VAX-opcodes.        (line    6)
29092* VAX operand notation:                  VAX-operands.       (line    6)
29093* VAX register names:                    VAX-operands.       (line   17)
29094* VAX support:                           Vax-Dependent.      (line    6)
29095* Vax-11 C compatibility:                VAX-Opts.           (line   42)
29096* VAX/VMS options:                       VAX-Opts.           (line   42)
29097* 'version' directive:                   Version.            (line    6)
29098* 'version' directive, TIC54X:           TIC54X-Directives.  (line  274)
29099* version of assembler:                  v.                  (line    6)
29100* versions of symbols:                   Symver.             (line    6)
29101* Virtualization instruction generation override: MIPS ASE Instruction Generation Overrides.
29102                                                             (line   52)
29103* visibility:                            Hidden.             (line    6)
29104* visibility <1>:                        Internal.           (line    6)
29105* visibility <2>:                        Protected.          (line    6)
29106* Visium line comment character:         Visium Characters.  (line    6)
29107* Visium line separator:                 Visium Characters.  (line   14)
29108* Visium options:                        Visium Options.     (line    6)
29109* Visium registers:                      Visium Registers.   (line    6)
29110* Visium support:                        Visium-Dependent.   (line    6)
29111* VMS (VAX) options:                     VAX-Opts.           (line   42)
29112* 'vtable_entry' directive:              VTableEntry.        (line    6)
29113* 'vtable_inherit' directive:            VTableInherit.      (line    6)
29114* warning directive:                     Warning.            (line    6)
29115* warning for altered difference tables: K.                  (line    6)
29116* warning messages:                      Errors.             (line    6)
29117* warnings, causing error:               W.                  (line   16)
29118* warnings, M32R:                        M32R-Warnings.      (line    6)
29119* warnings, suppressing:                 W.                  (line   11)
29120* warnings, switching on:                W.                  (line   19)
29121* 'weak' directive:                      Weak.               (line    6)
29122* 'weakref' directive:                   Weakref.            (line    6)
29123* WebAssembly floating point (IEEE):     WebAssembly-Floating-Point.
29124                                                             (line    6)
29125* WebAssembly line comment character:    WebAssembly-Chars.  (line    6)
29126* WebAssembly module layout:             WebAssembly-module-layout.
29127                                                             (line    6)
29128* WebAssembly notes:                     WebAssembly-Notes.  (line    6)
29129* WebAssembly opcodes:                   WebAssembly-Opcodes.
29130                                                             (line    6)
29131* WebAssembly relocations:               WebAssembly-Relocs. (line    6)
29132* WebAssembly signatures:                WebAssembly-Signatures.
29133                                                             (line    6)
29134* WebAssembly support:                   WebAssembly-Dependent.
29135                                                             (line    6)
29136* WebAssembly Syntax:                    WebAssembly-Syntax. (line    6)
29137* whitespace:                            Whitespace.         (line    6)
29138* whitespace, removed by preprocessor:   Preprocessing.      (line    7)
29139* wide floating point directives, VAX:   VAX-directives.     (line    9)
29140* 'width' directive, TIC54X:             TIC54X-Directives.  (line  125)
29141* Width of continuation lines of disassembly output: listing.
29142                                                             (line   21)
29143* Width of first line disassembly output: listing.           (line   16)
29144* Width of source line output:           listing.            (line   28)
29145* 'wmsg' directive, TIC54X:              TIC54X-Directives.  (line   75)
29146* word aligned program counter, ARC:     ARC-Regs.           (line   44)
29147* 'word' directive:                      Word.               (line    6)
29148* 'word' directive, BPF:                 BPF Directives.     (line   12)
29149* 'word' directive, H8/300:              H8/300 Directives.  (line    6)
29150* 'word' directive, i386:                i386-Float.         (line   21)
29151* 'word' directive, Nios II:             Nios II Directives. (line   13)
29152* 'word' directive, OpenRISC:            OpenRISC-Directives.
29153                                                             (line   12)
29154* 'word' directive, PRU:                 PRU Directives.     (line   10)
29155* 'word' directive, SPARC:               Sparc-Directives.   (line   51)
29156* 'word' directive, TIC54X:              TIC54X-Directives.  (line  109)
29157* 'word' directive, x86-64:              i386-Float.         (line   21)
29158* writing patterns in memory:            Fill.               (line    6)
29159* wval:                                  Z8000 Directives.   (line   24)
29160* x86 machine directives:                i386-Directives.    (line    6)
29161* x86-64 arch directive:                 i386-Arch.          (line    6)
29162* x86-64 att_syntax pseudo op:           i386-Variations.    (line    6)
29163* x86-64 conversion instructions:        i386-Mnemonics.     (line   66)
29164* x86-64 extension instructions:         i386-Mnemonics.     (line   85)
29165* x86-64 floating point:                 i386-Float.         (line    6)
29166* x86-64 immediate operands:             i386-Variations.    (line   15)
29167* x86-64 instruction naming:             i386-Mnemonics.     (line    9)
29168* x86-64 intel_syntax pseudo op:         i386-Variations.    (line    6)
29169* x86-64 jump optimization:              i386-Jumps.         (line    6)
29170* x86-64 jump, call, return:             i386-Variations.    (line   45)
29171* x86-64 jump/call operands:             i386-Variations.    (line   15)
29172* x86-64 memory references:              i386-Memory.        (line    6)
29173* x86-64 options:                        i386-Options.       (line    6)
29174* x86-64 register operands:              i386-Variations.    (line   15)
29175* x86-64 registers:                      i386-Regs.          (line    6)
29176* x86-64 sections:                       i386-Variations.    (line   51)
29177* x86-64 size suffixes:                  i386-Variations.    (line   28)
29178* x86-64 source, destination operands:   i386-Variations.    (line   21)
29179* x86-64 support:                        i386-Dependent.     (line    6)
29180* x86-64 syntax compatibility:           i386-Variations.    (line    6)
29181* 'xdef' directive, Z80:                 Z80 Directives.     (line   62)
29182* 'xfloat' directive, TIC54X:            TIC54X-Directives.  (line   62)
29183* XGATE addressing modes:                XGATE-Syntax.       (line   28)
29184* XGATE assembler directives:            XGATE-Directives.   (line    6)
29185* XGATE floating point:                  XGATE-Float.        (line    6)
29186* XGATE line comment character:          XGATE-Syntax.       (line   16)
29187* XGATE line separator:                  XGATE-Syntax.       (line   25)
29188* XGATE opcodes:                         XGATE-opcodes.      (line    6)
29189* XGATE options:                         XGATE-Opts.         (line    6)
29190* XGATE support:                         XGATE-Dependent.    (line    6)
29191* XGATE syntax:                          XGATE-Syntax.       (line    6)
29192* 'xlong' directive, TIC54X:             TIC54X-Directives.  (line  133)
29193* 'xref' directive, Z80:                 Z80 Directives.     (line   66)
29194* XStormy16 comment character:           XStormy16-Chars.    (line   11)
29195* XStormy16 line comment character:      XStormy16-Chars.    (line    6)
29196* XStormy16 line separator:              XStormy16-Chars.    (line   14)
29197* XStormy16 machine directives:          XStormy16 Directives.
29198                                                             (line    6)
29199* XStormy16 pseudo-opcodes:              XStormy16 Opcodes.  (line    6)
29200* XStormy16 support:                     XSTORMY16-Dependent.
29201                                                             (line    6)
29202* Xtensa architecture:                   Xtensa-Dependent.   (line    6)
29203* Xtensa assembler syntax:               Xtensa Syntax.      (line    6)
29204* Xtensa directives:                     Xtensa Directives.  (line    6)
29205* Xtensa opcode names:                   Xtensa Opcodes.     (line    6)
29206* Xtensa register names:                 Xtensa Registers.   (line    6)
29207* 'xword' directive, SPARC:              Sparc-Directives.   (line   55)
29208* Z80 $:                                 Z80-Chars.          (line   15)
29209* Z80 ':                                 Z80-Chars.          (line   20)
29210* Z80 floating point:                    Z80 Floating Point. (line    6)
29211* Z80 labels:                            Z80-Labels.         (line    6)
29212* Z80 line comment character:            Z80-Chars.          (line    6)
29213* Z80 line separator:                    Z80-Chars.          (line   13)
29214* Z80 options:                           Z80 Options.        (line    6)
29215* Z80 registers:                         Z80-Regs.           (line    6)
29216* Z80 support:                           Z80-Dependent.      (line    6)
29217* Z80 Syntax:                            Z80 Options.        (line   67)
29218* Z80, case sensitivity:                 Z80-Case.           (line    6)
29219* Z80, \:                                Z80-Chars.          (line   18)
29220* Z80-only directives:                   Z80 Directives.     (line    6)
29221* Z800 addressing modes:                 Z8000-Addressing.   (line    6)
29222* Z8000 directives:                      Z8000 Directives.   (line    6)
29223* Z8000 line comment character:          Z8000-Chars.        (line    6)
29224* Z8000 line separator:                  Z8000-Chars.        (line   13)
29225* Z8000 opcode summary:                  Z8000 Opcodes.      (line    6)
29226* Z8000 options:                         Z8000 Options.      (line    6)
29227* Z8000 registers:                       Z8000-Regs.         (line    6)
29228* Z8000 support:                         Z8000-Dependent.    (line    6)
29229* 'zdaoff' pseudo-op, V850:              V850 Opcodes.       (line   98)
29230* 'zero' directive:                      Zero.               (line    6)
29231* 'zero' register, V850:                 V850-Regs.          (line    7)
29232* zero-terminated strings:               Asciz.              (line    6)
29233
29234
29235
29236Tag Table:
29237Node: Top733
29238Node: Overview1777
29239Node: Manual43559
29240Node: GNU Assembler44503
29241Node: Object Formats45674
29242Node: Command Line46126
29243Node: Input Files47212
29244Node: Object49193
29245Node: Errors50089
29246Node: Invoking51651
29247Node: a53657
29248Node: alternate55568
29249Node: D55740
29250Node: f55973
29251Node: I56482
29252Node: K57026
29253Node: L57330
29254Node: listing58069
29255Node: M59728
29256Node: MD63565
29257Node: no-pad-sections64005
29258Node: o64380
29259Node: R64807
29260Node: statistics65837
29261Node: traditional-format66244
29262Node: v66717
29263Node: W66992
29264Node: Z67899
29265Node: Syntax68421
29266Node: Preprocessing69013
29267Node: Whitespace70670
29268Node: Comments71066
29269Node: Symbol Intro73077
29270Node: Statements74061
29271Node: Constants76049
29272Node: Characters76680
29273Node: Strings77182
29274Node: Chars79355
29275Node: Numbers80207
29276Node: Integers80747
29277Node: Bignums81403
29278Node: Flonums81759
29279Node: Sections83376
29280Node: Secs Background83754
29281Node: Ld Sections88787
29282Node: As Sections91171
29283Node: Sub-Sections92081
29284Node: bss95229
29285Node: Symbols96179
29286Node: Labels96827
29287Node: Setting Symbols97558
29288Node: Symbol Names98112
29289Node: Dot103579
29290Node: Symbol Attributes104026
29291Node: Symbol Value104759
29292Node: Symbol Type105804
29293Node: a.out Symbols106192
29294Node: Symbol Desc106454
29295Node: Symbol Other106750
29296Node: COFF Symbols106919
29297Node: SOM Symbols107592
29298Node: Expressions108034
29299Node: Empty Exprs108783
29300Node: Integer Exprs109130
29301Node: Arguments109525
29302Node: Operators110631
29303Node: Prefix Ops110966
29304Node: Infix Ops111293
29305Node: Pseudo Ops113687
29306Node: Abort119927
29307Node: ABORT (COFF)120340
29308Node: Align120548
29309Node: Altmacro122944
29310Node: Ascii124275
29311Node: Asciz124584
29312Node: Attach_to_group124974
29313Node: Balign125388
29314Node: Bundle directives127397
29315Node: Byte130378
29316Node: CFI directives130639
29317Node: Comm139951
29318Ref: Comm-Footnote-1141551
29319Node: Data141913
29320Node: Dc142229
29321Node: Dcb143206
29322Node: Ds143999
29323Node: Def144829
29324Node: Desc145059
29325Node: Dim145559
29326Node: Double145816
29327Node: Eject146154
29328Node: Else146329
29329Node: Elseif146629
29330Node: End146923
29331Node: Endef147138
29332Node: Endfunc147315
29333Node: Endif147490
29334Node: Equ147751
29335Node: Equiv148266
29336Node: Eqv148822
29337Node: Err149186
29338Node: Error149497
29339Node: Exitm149942
29340Node: Extern150111
29341Node: Fail150372
29342Node: File150817
29343Node: Fill152923
29344Node: Float153887
29345Node: Func154229
29346Node: Global154819
29347Node: Gnu_attribute155576
29348Node: Hidden155801
29349Node: hword156387
29350Node: Ident156715
29351Node: If157289
29352Node: Incbin160350
29353Node: Include161044
29354Node: Int161595
29355Node: Internal161976
29356Node: Irp162623
29357Node: Irpc163502
29358Node: Lcomm164418
29359Node: Lflags165165
29360Node: Line165359
29361Node: Linkonce166275
29362Node: List167504
29363Node: Ln168111
29364Node: Loc168261
29365Node: Loc_mark_labels170566
29366Node: Local171050
29367Node: Long171662
29368Node: Macro171840
29369Node: MRI177771
29370Node: Noaltmacro178109
29371Node: Nolist178278
29372Node: Nop178706
29373Node: Nops179390
29374Node: Octa180245
29375Node: Offset180580
29376Node: Org180907
29377Node: P2align182192
29378Node: PopSection184246
29379Node: Previous184754
29380Node: Print186166
29381Node: Protected186395
29382Node: Psize187042
29383Node: Purgem187726
29384Node: PushSection187947
29385Node: Quad188691
29386Node: Reloc189145
29387Node: Rept189906
29388Node: Sbttl190468
29389Node: Scl190833
29390Node: Section191174
29391Ref: Section Name Substitutions193232
29392Node: Set201060
29393Node: Short202152
29394Node: Single202473
29395Node: Size202818
29396Node: Skip203484
29397Node: Sleb128203808
29398Node: Space204130
29399Node: Stab204771
29400Node: String206774
29401Node: Struct207766
29402Node: SubSection208489
29403Node: Symver209050
29404Node: Tag211931
29405Node: Text212311
29406Node: Title212631
29407Node: Tls_common213016
29408Node: Type213335
29409Node: Uleb128215803
29410Node: Val216127
29411Node: Version216377
29412Node: VTableEntry216651
29413Node: VTableInherit216941
29414Node: Warning217391
29415Node: Weak217625
29416Node: Weakref218294
29417Node: Word219259
29418Node: Zero221099
29419Node: 2byte221506
29420Node: 4byte222510
29421Node: 8byte222774
29422Node: Deprecated223051
29423Node: Object Attributes223286
29424Node: GNU Object Attributes225006
29425Node: Defining New Object Attributes229352
29426Node: Machine Dependencies230144
29427Node: AArch64-Dependent234179
29428Node: AArch64 Options234661
29429Node: AArch64 Extensions237650
29430Node: AArch64 Syntax243452
29431Node: AArch64-Chars243752
29432Node: AArch64-Regs244238
29433Node: AArch64-Relocations244532
29434Node: AArch64 Floating Point245606
29435Node: AArch64 Directives245831
29436Node: AArch64 Opcodes249758
29437Node: AArch64 Mapping Symbols250435
29438Node: Alpha-Dependent250816
29439Node: Alpha Notes251256
29440Node: Alpha Options251537
29441Node: Alpha Syntax254012
29442Node: Alpha-Chars254481
29443Node: Alpha-Regs254893
29444Node: Alpha-Relocs255280
29445Node: Alpha Floating Point261526
29446Node: Alpha Directives261748
29447Node: Alpha Opcodes267275
29448Node: ARC-Dependent267570
29449Node: ARC Options268015
29450Node: ARC Syntax271141
29451Node: ARC-Chars271369
29452Node: ARC-Regs272491
29453Node: ARC Directives275259
29454Node: ARC Modifiers283914
29455Node: ARC Symbols284924
29456Node: ARC Opcodes285478
29457Node: ARM-Dependent285724
29458Node: ARM Options286189
29459Node: ARM Syntax306370
29460Node: ARM-Instruction-Set306738
29461Node: ARM-Chars307953
29462Node: ARM-Regs308664
29463Node: ARM-Relocations308873
29464Node: ARM-Neon-Alignment310559
29465Node: ARM Floating Point311024
29466Node: ARM Directives311223
29467Ref: arm_fnend316382
29468Ref: arm_fnstart316701
29469Ref: arm_pad319109
29470Ref: arm_save319711
29471Ref: arm_setfp320412
29472Node: ARM Opcodes323698
29473Node: ARM Mapping Symbols326300
29474Node: ARM Unwinding Tutorial327109
29475Node: AVR-Dependent333309
29476Node: AVR Options333648
29477Node: AVR Syntax339966
29478Node: AVR-Chars340253
29479Node: AVR-Regs340812
29480Node: AVR-Modifiers341393
29481Node: AVR Opcodes343761
29482Node: AVR Pseudo Instructions349039
29483Node: Blackfin-Dependent350698
29484Node: Blackfin Options351009
29485Node: Blackfin Syntax351983
29486Node: Blackfin Directives358189
29487Node: BPF-Dependent358930
29488Node: BPF Options359247
29489Node: BPF Syntax359630
29490Node: BPF-Chars359898
29491Node: BPF-Regs360291
29492Node: BPF-Pseudo-Maps360803
29493Node: BPF Directives361223
29494Node: BPF Opcodes361637
29495Node: CR16-Dependent368195
29496Node: CR16 Operand Qualifiers368490
29497Node: CR16 Syntax371199
29498Node: CR16-Chars371385
29499Node: CRIS-Dependent371922
29500Node: CRIS-Opts372269
29501Ref: march-option373954
29502Node: CRIS-Expand375773
29503Node: CRIS-Symbols376956
29504Node: CRIS-Syntax378127
29505Node: CRIS-Chars378463
29506Node: CRIS-Pic379014
29507Ref: crispic379209
29508Node: CRIS-Regs382758
29509Node: CRIS-Pseudos383175
29510Ref: crisnous383952
29511Node: C-SKY-Dependent385240
29512Node: C-SKY Options385502
29513Node: C-SKY Syntax388487
29514Node: D10V-Dependent388732
29515Node: D10V-Opts389086
29516Node: D10V-Syntax390057
29517Node: D10V-Size390588
29518Node: D10V-Subs391561
29519Node: D10V-Chars392598
29520Node: D10V-Regs394411
29521Node: D10V-Addressing395440
29522Node: D10V-Word396120
29523Node: D10V-Float396637
29524Node: D10V-Opcodes396950
29525Node: D30V-Dependent397345
29526Node: D30V-Opts397702
29527Node: D30V-Syntax398380
29528Node: D30V-Size398914
29529Node: D30V-Subs399887
29530Node: D30V-Chars400924
29531Node: D30V-Guarded403534
29532Node: D30V-Regs404211
29533Node: D30V-Addressing405330
29534Node: D30V-Float405992
29535Node: D30V-Opcodes406305
29536Node: Epiphany-Dependent406700
29537Node: Epiphany Options406988
29538Node: Epiphany Syntax407387
29539Node: Epiphany-Chars407588
29540Node: H8/300-Dependent408142
29541Node: H8/300 Options408558
29542Node: H8/300 Syntax408998
29543Node: H8/300-Chars409299
29544Node: H8/300-Regs409598
29545Node: H8/300-Addressing410517
29546Node: H8/300 Floating Point411541
29547Node: H8/300 Directives411868
29548Node: H8/300 Opcodes412996
29549Node: HPPA-Dependent421315
29550Node: HPPA Notes421747
29551Node: HPPA Options422506
29552Node: HPPA Syntax422701
29553Node: HPPA Floating Point423971
29554Node: HPPA Directives424177
29555Node: HPPA Opcodes432859
29556Node: i386-Dependent433118
29557Node: i386-Options434501
29558Node: i386-Directives449512
29559Node: i386-Syntax450854
29560Node: i386-Variations451159
29561Node: i386-Chars454083
29562Node: i386-Mnemonics454812
29563Node: i386-Regs459818
29564Node: i386-Prefixes462476
29565Node: i386-Memory465236
29566Node: i386-Jumps468175
29567Node: i386-Float469298
29568Node: i386-SIMD471127
29569Node: i386-LWP472236
29570Node: i386-BMI473070
29571Node: i386-TBM473448
29572Node: i386-16bit473978
29573Node: i386-Arch476049
29574Node: i386-ISA479740
29575Node: i386-Bugs480611
29576Node: i386-Notes481361
29577Node: IA-64-Dependent482220
29578Node: IA-64 Options482521
29579Node: IA-64 Syntax485672
29580Node: IA-64-Chars486078
29581Node: IA-64-Regs486308
29582Node: IA-64-Bits487234
29583Node: IA-64-Relocs487764
29584Node: IA-64 Opcodes488235
29585Node: IP2K-Dependent488507
29586Node: IP2K-Opts488779
29587Node: IP2K-Syntax489278
29588Node: IP2K-Chars489452
29589Node: LM32-Dependent489995
29590Node: LM32 Options490290
29591Node: LM32 Syntax490923
29592Node: LM32-Regs491219
29593Node: LM32-Modifiers492160
29594Node: LM32-Chars493540
29595Node: LM32 Opcodes494048
29596Node: M32C-Dependent494352
29597Node: M32C-Opts494858
29598Node: M32C-Syntax495277
29599Node: M32C-Modifiers495512
29600Node: M32C-Chars497304
29601Node: M32R-Dependent497870
29602Node: M32R-Opts498191
29603Node: M32R-Directives502353
29604Node: M32R-Warnings506327
29605Node: M68K-Dependent509332
29606Node: M68K-Opts509799
29607Node: M68K-Syntax517221
29608Node: M68K-Moto-Syntax519061
29609Node: M68K-Float521645
29610Node: M68K-Directives522165
29611Node: M68K-opcodes523492
29612Node: M68K-Branch523718
29613Node: M68K-Chars527911
29614Node: M68HC11-Dependent528774
29615Node: M68HC11-Opts529305
29616Node: M68HC11-Syntax533617
29617Node: M68HC11-Modifiers536411
29618Node: M68HC11-Directives538238
29619Node: M68HC11-Float539612
29620Node: M68HC11-opcodes540140
29621Node: M68HC11-Branch540322
29622Node: S12Z-Dependent542771
29623Node: S12Z Options543114
29624Node: S12Z Syntax544098
29625Node: S12Z Syntax Overview544417
29626Node: S12Z Addressing Modes546079
29627Node: S12Z Register Notation549883
29628Node: Meta-Dependent551059
29629Node: Meta Options551341
29630Node: Meta Syntax552003
29631Node: Meta-Chars552215
29632Node: Meta-Regs552515
29633Node: MicroBlaze-Dependent552791
29634Node: MicroBlaze Directives553478
29635Node: MicroBlaze Syntax554869
29636Node: MicroBlaze-Chars555101
29637Node: MIPS-Dependent555653
29638Node: MIPS Options557087
29639Node: MIPS Macros576179
29640Ref: MIPS Macros-Footnote-1578893
29641Node: MIPS Symbol Sizes579036
29642Node: MIPS Small Data580708
29643Node: MIPS ISA582872
29644Node: MIPS assembly options584656
29645Node: MIPS autoextend585789
29646Node: MIPS insn586523
29647Node: MIPS FP ABIs587803
29648Node: MIPS FP ABI History588255
29649Node: MIPS FP ABI Variants589015
29650Node: MIPS FP ABI Selection591568
29651Node: MIPS FP ABI Compatibility592631
29652Node: MIPS NaN Encodings593441
29653Node: MIPS Option Stack595404
29654Node: MIPS ASE Instruction Generation Overrides596189
29655Node: MIPS Floating-Point600950
29656Node: MIPS Syntax601856
29657Node: MIPS-Chars602118
29658Node: MMIX-Dependent602660
29659Node: MMIX-Opts603040
29660Node: MMIX-Expand606646
29661Node: MMIX-Syntax607958
29662Ref: mmixsite608314
29663Node: MMIX-Chars609156
29664Node: MMIX-Symbols610029
29665Node: MMIX-Regs612100
29666Node: MMIX-Pseudos613125
29667Ref: MMIX-loc613267
29668Ref: MMIX-local614348
29669Ref: MMIX-is614881
29670Ref: MMIX-greg615153
29671Ref: GREG-base616071
29672Ref: MMIX-byte617390
29673Ref: MMIX-constants617862
29674Ref: MMIX-prefix618504
29675Ref: MMIX-spec618879
29676Node: MMIX-mmixal619213
29677Node: MSP430-Dependent622708
29678Node: MSP430 Options623177
29679Node: MSP430 Syntax626745
29680Node: MSP430-Macros627061
29681Node: MSP430-Chars627791
29682Node: MSP430-Regs628506
29683Node: MSP430-Ext629067
29684Node: MSP430 Floating Point630886
29685Node: MSP430 Directives631110
29686Node: MSP430 Opcodes632951
29687Node: MSP430 Profiling Capability633346
29688Node: NDS32-Dependent635674
29689Node: NDS32 Options636283
29690Node: NDS32 Syntax638166
29691Node: NDS32-Chars638434
29692Node: NDS32-Regs638901
29693Node: NDS32-Ops639755
29694Node: NiosII-Dependent643352
29695Node: Nios II Options643771
29696Node: Nios II Syntax645003
29697Node: Nios II Chars645209
29698Node: Nios II Relocations645400
29699Node: Nios II Directives646971
29700Node: Nios II Opcodes648533
29701Node: NS32K-Dependent648808
29702Node: NS32K Syntax649037
29703Node: NS32K-Chars649186
29704Node: OpenRISC-Dependent649926
29705Node: OpenRISC-Syntax650269
29706Node: OpenRISC-Chars650590
29707Node: OpenRISC-Regs650913
29708Node: OpenRISC-Relocs651926
29709Node: OpenRISC-Float656706
29710Node: OpenRISC-Directives656912
29711Node: OpenRISC-Opcodes657710
29712Node: PDP-11-Dependent658002
29713Node: PDP-11-Options658395
29714Node: PDP-11-Pseudos663454
29715Node: PDP-11-Syntax663799
29716Node: PDP-11-Mnemonics664631
29717Node: PDP-11-Synthetic664933
29718Node: PJ-Dependent665151
29719Node: PJ Options665414
29720Node: PJ Syntax665709
29721Node: PJ-Chars665874
29722Node: PPC-Dependent666423
29723Node: PowerPC-Opts666755
29724Node: PowerPC-Pseudo670546
29725Node: PowerPC-Syntax671167
29726Node: PowerPC-Chars671357
29727Node: PRU-Dependent672108
29728Node: PRU Options672491
29729Node: PRU Syntax673230
29730Node: PRU Chars673417
29731Node: PRU Relocations673572
29732Node: PRU Directives674123
29733Node: PRU Opcodes675026
29734Node: RISC-V-Dependent675443
29735Node: RISC-V-Options675871
29736Node: RISC-V-Directives678585
29737Node: RISC-V-Modifiers682383
29738Node: RISC-V-Formats686451
29739Node: RISC-V-ATTRIBUTE694134
29740Node: RL78-Dependent696096
29741Node: RL78-Opts696497
29742Node: RL78-Modifiers697331
29743Node: RL78-Directives698110
29744Node: RL78-Syntax698714
29745Node: RL78-Chars698910
29746Node: RX-Dependent699466
29747Node: RX-Opts699897
29748Node: RX-Modifiers704161
29749Node: RX-Directives705264
29750Node: RX-Float706003
29751Node: RX-Syntax706638
29752Node: RX-Chars706817
29753Node: S/390-Dependent707369
29754Node: s390 Options708221
29755Node: s390 Characters710396
29756Node: s390 Syntax710917
29757Node: s390 Register711819
29758Node: s390 Mnemonics712635
29759Node: s390 Operands715655
29760Node: s390 Formats718286
29761Node: s390 Aliases726133
29762Node: s390 Operand Modifier730098
29763Node: s390 Instruction Marker733901
29764Node: s390 Literal Pool Entries734915
29765Node: s390 Directives736848
29766Node: s390 Floating Point742305
29767Node: SCORE-Dependent742753
29768Node: SCORE-Opts743055
29769Node: SCORE-Pseudo744342
29770Node: SCORE-Syntax746424
29771Node: SCORE-Chars746606
29772Node: SH-Dependent747164
29773Node: SH Options747576
29774Node: SH Syntax748627
29775Node: SH-Chars748900
29776Node: SH-Regs749443
29777Node: SH-Addressing750057
29778Node: SH Floating Point750965
29779Node: SH Directives752062
29780Node: SH Opcodes752463
29781Node: Sparc-Dependent756784
29782Node: Sparc-Opts757193
29783Node: Sparc-Aligned-Data762906
29784Node: Sparc-Syntax763738
29785Node: Sparc-Chars764312
29786Node: Sparc-Regs764875
29787Node: Sparc-Constants770723
29788Node: Sparc-Relocs775483
29789Node: Sparc-Size-Translations780601
29790Node: Sparc-Float782251
29791Node: Sparc-Directives782446
29792Node: TIC54X-Dependent784408
29793Node: TIC54X-Opts785171
29794Node: TIC54X-Block786212
29795Node: TIC54X-Env786572
29796Node: TIC54X-Constants786920
29797Node: TIC54X-Subsyms787316
29798Node: TIC54X-Locals789220
29799Node: TIC54X-Builtins789960
29800Node: TIC54X-Ext792374
29801Node: TIC54X-Directives792945
29802Node: TIC54X-Macros803853
29803Node: TIC54X-MMRegs805940
29804Node: TIC54X-Syntax806177
29805Node: TIC54X-Chars806367
29806Node: TIC6X-Dependent807058
29807Node: TIC6X Options807361
29808Node: TIC6X Syntax809360
29809Node: TIC6X Directives810463
29810Node: TILE-Gx-Dependent812747
29811Node: TILE-Gx Options813057
29812Node: TILE-Gx Syntax813406
29813Node: TILE-Gx Opcodes815642
29814Node: TILE-Gx Registers815930
29815Node: TILE-Gx Modifiers816701
29816Node: TILE-Gx Directives821700
29817Node: TILEPro-Dependent822603
29818Node: TILEPro Options822912
29819Node: TILEPro Syntax823096
29820Node: TILEPro Opcodes825332
29821Node: TILEPro Registers825623
29822Node: TILEPro Modifiers826393
29823Node: TILEPro Directives831182
29824Node: V850-Dependent832085
29825Node: V850 Options832481
29826Node: V850 Syntax836759
29827Node: V850-Chars836999
29828Node: V850-Regs837543
29829Node: V850 Floating Point839053
29830Node: V850 Directives839259
29831Node: V850 Opcodes841325
29832Node: Vax-Dependent847204
29833Node: VAX-Opts847788
29834Node: VAX-float851509
29835Node: VAX-directives852142
29836Node: VAX-opcodes853002
29837Node: VAX-branch853391
29838Node: VAX-operands855895
29839Node: VAX-no856658
29840Node: VAX-Syntax856914
29841Node: VAX-Chars857080
29842Node: Visium-Dependent857634
29843Node: Visium Options857947
29844Node: Visium Syntax858413
29845Node: Visium Characters858658
29846Node: Visium Registers859239
29847Node: Visium Opcodes859511
29848Node: WebAssembly-Dependent859937
29849Node: WebAssembly-Notes860378
29850Node: WebAssembly-Syntax860664
29851Node: WebAssembly-Chars861230
29852Node: WebAssembly-Relocs861609
29853Node: WebAssembly-Signatures862335
29854Node: WebAssembly-Floating-Point862836
29855Node: WebAssembly-Opcodes863077
29856Node: WebAssembly-module-layout863710
29857Node: XGATE-Dependent864189
29858Node: XGATE-Opts864616
29859Node: XGATE-Syntax865605
29860Node: XGATE-Directives867684
29861Node: XGATE-Float867923
29862Node: XGATE-opcodes868420
29863Node: XSTORMY16-Dependent868532
29864Node: XStormy16 Syntax868878
29865Node: XStormy16-Chars869068
29866Node: XStormy16 Directives869681
29867Node: XStormy16 Opcodes870335
29868Node: Xtensa-Dependent871390
29869Node: Xtensa Options872121
29870Node: Xtensa Syntax876694
29871Node: Xtensa Opcodes878838
29872Node: Xtensa Registers880631
29873Node: Xtensa Optimizations881264
29874Node: Density Instructions881716
29875Node: Xtensa Automatic Alignment882818
29876Node: Xtensa Relaxation885265
29877Node: Xtensa Branch Relaxation886230
29878Node: Xtensa Call Relaxation887602
29879Node: Xtensa Jump Relaxation889383
29880Node: Xtensa Immediate Relaxation891483
29881Node: Xtensa Directives894058
29882Node: Schedule Directive895766
29883Node: Longcalls Directive896106
29884Node: Transform Directive896650
29885Node: Literal Directive897392
29886Ref: Literal Directive-Footnote-1900931
29887Node: Literal Position Directive901073
29888Node: Literal Prefix Directive902772
29889Node: Absolute Literals Directive903670
29890Node: Z80-Dependent904977
29891Node: Z80 Options905365
29892Node: Z80 Syntax907864
29893Node: Z80-Chars908572
29894Node: Z80-Regs909423
29895Node: Z80-Case909775
29896Node: Z80-Labels910239
29897Node: Z80 Floating Point910735
29898Node: Z80 Directives911204
29899Node: Z80 Opcodes913636
29900Node: Z8000-Dependent915262
29901Node: Z8000 Options916198
29902Node: Z8000 Syntax916415
29903Node: Z8000-Chars916705
29904Node: Z8000-Regs917187
29905Node: Z8000-Addressing917977
29906Node: Z8000 Directives919087
29907Node: Z8000 Opcodes920691
29908Node: Reporting Bugs930633
29909Node: Bug Criteria931359
29910Node: Bug Reporting932126
29911Node: Acknowledgements938759
29912Ref: Acknowledgements-Footnote-1943725
29913Node: GNU Free Documentation License943751
29914Node: AS Index968900
29915
29916End Tag Table
29917