xref: /netbsd-src/external/gpl3/binutils.old/dist/gas/doc/as.info (revision d16b7486a53dcb8072b60ec6fcb4373a2d0c27b7)
1This is as.info, produced by makeinfo version 6.5 from as.texi.
2
3This file documents the GNU Assembler "as".
4
5   Copyright (C) 1991-2020 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 Binutils)
27version 2.34.
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-2] [-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      [-hash-size=NUM] [-reduce-memory-overheads]
71      [-statistics]
72      [-v] [-version] [-version]
73      [-W] [-warn] [-fatal-warnings] [-w] [-x]
74      [-Z] [@FILE]
75      [-sectname-subst] [-size-check=[error|warning]]
76      [-elf-stt-common=[no|yes]]
77      [-generate-missing-build-notes=[no|yes]]
78      [-target-help] [TARGET-OPTIONS]
79      [-|FILES ...]
80
81     _Target AArch64 options:_
82        [-EB|-EL]
83        [-mabi=ABI]
84
85     _Target Alpha options:_
86        [-mCPU]
87        [-mdebug | -no-mdebug]
88        [-replace | -noreplace]
89        [-relax] [-g] [-GSIZE]
90        [-F] [-32addr]
91
92     _Target ARC options:_
93        [-mcpu=CPU]
94        [-mA6|-mARC600|-mARC601|-mA7|-mARC700|-mEM|-mHS]
95        [-mcode-density]
96        [-mrelax]
97        [-EB|-EL]
98
99     _Target ARM options:_
100        [-mcpu=PROCESSOR[+EXTENSION...]]
101        [-march=ARCHITECTURE[+EXTENSION...]]
102        [-mfpu=FLOATING-POINT-FORMAT]
103        [-mfloat-abi=ABI]
104        [-meabi=VER]
105        [-mthumb]
106        [-EB|-EL]
107        [-mapcs-32|-mapcs-26|-mapcs-float|
108         -mapcs-reentrant]
109        [-mthumb-interwork] [-k]
110
111     _Target Blackfin options:_
112        [-mcpu=PROCESSOR[-SIREVISION]]
113        [-mfdpic]
114        [-mno-fdpic]
115        [-mnopic]
116
117     _Target BPF options:_
118        [-EL] [-EB]
119
120     _Target CRIS options:_
121        [-underscore | -no-underscore]
122        [-pic] [-N]
123        [-emulation=criself | -emulation=crisaout]
124        [-march=v0_v10 | -march=v10 | -march=v32 | -march=common_v10_v32]
125
126     _Target C-SKY options:_
127        [-march=ARCH] [-mcpu=CPU]
128        [-EL] [-mlittle-endian] [-EB] [-mbig-endian]
129        [-fpic] [-pic]
130        [-mljump] [-mno-ljump]
131        [-force2bsr] [-mforce2bsr] [-no-force2bsr] [-mno-force2bsr]
132        [-jsri2bsr] [-mjsri2bsr] [-no-jsri2bsr ] [-mno-jsri2bsr]
133        [-mnolrw ] [-mno-lrw]
134        [-melrw] [-mno-elrw]
135        [-mlaf ] [-mliterals-after-func]
136        [-mno-laf] [-mno-literals-after-func]
137        [-mlabr] [-mliterals-after-br]
138        [-mno-labr] [-mnoliterals-after-br]
139        [-mistack] [-mno-istack]
140        [-mhard-float] [-mmp] [-mcp] [-mcache]
141        [-msecurity] [-mtrust]
142        [-mdsp] [-medsp] [-mvdsp]
143
144     _Target D10V options:_
145        [-O]
146
147     _Target D30V options:_
148        [-O|-n|-N]
149
150     _Target EPIPHANY options:_
151        [-mepiphany|-mepiphany16]
152
153     _Target H8/300 options:_
154        [-h-tick-hex]
155
156     _Target i386 options:_
157        [-32|-x32|-64] [-n]
158        [-march=CPU[+EXTENSION...]] [-mtune=CPU]
159
160     _Target IA-64 options:_
161        [-mconstant-gp|-mauto-pic]
162        [-milp32|-milp64|-mlp64|-mp64]
163        [-mle|mbe]
164        [-mtune=itanium1|-mtune=itanium2]
165        [-munwind-check=warning|-munwind-check=error]
166        [-mhint.b=ok|-mhint.b=warning|-mhint.b=error]
167        [-x|-xexplicit] [-xauto] [-xdebug]
168
169     _Target IP2K options:_
170        [-mip2022|-mip2022ext]
171
172     _Target M32C options:_
173        [-m32c|-m16c] [-relax] [-h-tick-hex]
174
175     _Target M32R options:_
176        [-m32rx|-[no-]warn-explicit-parallel-conflicts|
177        -W[n]p]
178
179     _Target M680X0 options:_
180        [-l] [-m68000|-m68010|-m68020|...]
181
182     _Target M68HC11 options:_
183        [-m68hc11|-m68hc12|-m68hcs12|-mm9s12x|-mm9s12xg]
184        [-mshort|-mlong]
185        [-mshort-double|-mlong-double]
186        [-force-long-branches] [-short-branches]
187        [-strict-direct-mode] [-print-insn-syntax]
188        [-print-opcodes] [-generate-example]
189
190     _Target MCORE options:_
191        [-jsri2bsr] [-sifilter] [-relax]
192        [-mcpu=[210|340]]
193
194     _Target Meta options:_
195        [-mcpu=CPU] [-mfpu=CPU] [-mdsp=CPU]
196     _Target MICROBLAZE options:_
197
198     _Target MIPS options:_
199        [-nocpp] [-EL] [-EB] [-O[OPTIMIZATION LEVEL]]
200        [-g[DEBUG LEVEL]] [-G NUM] [-KPIC] [-call_shared]
201        [-non_shared] [-xgot [-mvxworks-pic]
202        [-mabi=ABI] [-32] [-n32] [-64] [-mfp32] [-mgp32]
203        [-mfp64] [-mgp64] [-mfpxx]
204        [-modd-spreg] [-mno-odd-spreg]
205        [-march=CPU] [-mtune=CPU] [-mips1] [-mips2]
206        [-mips3] [-mips4] [-mips5] [-mips32] [-mips32r2]
207        [-mips32r3] [-mips32r5] [-mips32r6] [-mips64] [-mips64r2]
208        [-mips64r3] [-mips64r5] [-mips64r6]
209        [-construct-floats] [-no-construct-floats]
210        [-mignore-branch-isa] [-mno-ignore-branch-isa]
211        [-mnan=ENCODING]
212        [-trap] [-no-break] [-break] [-no-trap]
213        [-mips16] [-no-mips16]
214        [-mmips16e2] [-mno-mips16e2]
215        [-mmicromips] [-mno-micromips]
216        [-msmartmips] [-mno-smartmips]
217        [-mips3d] [-no-mips3d]
218        [-mdmx] [-no-mdmx]
219        [-mdsp] [-mno-dsp]
220        [-mdspr2] [-mno-dspr2]
221        [-mdspr3] [-mno-dspr3]
222        [-mmsa] [-mno-msa]
223        [-mxpa] [-mno-xpa]
224        [-mmt] [-mno-mt]
225        [-mmcu] [-mno-mcu]
226        [-mcrc] [-mno-crc]
227        [-mginv] [-mno-ginv]
228        [-mloongson-mmi] [-mno-loongson-mmi]
229        [-mloongson-cam] [-mno-loongson-cam]
230        [-mloongson-ext] [-mno-loongson-ext]
231        [-mloongson-ext2] [-mno-loongson-ext2]
232        [-minsn32] [-mno-insn32]
233        [-mfix7000] [-mno-fix7000]
234        [-mfix-rm7000] [-mno-fix-rm7000]
235        [-mfix-vr4120] [-mno-fix-vr4120]
236        [-mfix-vr4130] [-mno-fix-vr4130]
237        [-mfix-r5900] [-mno-fix-r5900]
238        [-mdebug] [-no-mdebug]
239        [-mpdr] [-mno-pdr]
240
241     _Target MMIX options:_
242        [-fixed-special-register-names] [-globalize-symbols]
243        [-gnu-syntax] [-relax] [-no-predefined-symbols]
244        [-no-expand] [-no-merge-gregs] [-x]
245        [-linker-allocated-gregs]
246
247     _Target Nios II options:_
248        [-relax-all] [-relax-section] [-no-relax]
249        [-EB] [-EL]
250
251     _Target NDS32 options:_
252         [-EL] [-EB] [-O] [-Os] [-mcpu=CPU]
253         [-misa=ISA] [-mabi=ABI] [-mall-ext]
254         [-m[no-]16-bit]  [-m[no-]perf-ext] [-m[no-]perf2-ext]
255         [-m[no-]string-ext] [-m[no-]dsp-ext] [-m[no-]mac] [-m[no-]div]
256         [-m[no-]audio-isa-ext] [-m[no-]fpu-sp-ext] [-m[no-]fpu-dp-ext]
257         [-m[no-]fpu-fma] [-mfpu-freg=FREG] [-mreduced-regs]
258         [-mfull-regs] [-m[no-]dx-regs] [-mpic] [-mno-relax]
259         [-mb2bb]
260
261     _Target PDP11 options:_
262        [-mpic|-mno-pic] [-mall] [-mno-extensions]
263        [-mEXTENSION|-mno-EXTENSION]
264        [-mCPU] [-mMACHINE]
265
266     _Target picoJava options:_
267        [-mb|-me]
268
269     _Target PowerPC options:_
270        [-a32|-a64]
271        [-mpwrx|-mpwr2|-mpwr|-m601|-mppc|-mppc32|-m603|-m604|-m403|-m405|
272         -m440|-m464|-m476|-m7400|-m7410|-m7450|-m7455|-m750cl|-mgekko|
273         -mbroadway|-mppc64|-m620|-me500|-e500x2|-me500mc|-me500mc64|-me5500|
274         -me6500|-mppc64bridge|-mbooke|-mpower4|-mpwr4|-mpower5|-mpwr5|-mpwr5x|
275         -mpower6|-mpwr6|-mpower7|-mpwr7|-mpower8|-mpwr8|-mpower9|-mpwr9-ma2|
276         -mcell|-mspe|-mspe2|-mtitan|-me300|-mcom]
277        [-many] [-maltivec|-mvsx|-mhtm|-mvle]
278        [-mregnames|-mno-regnames]
279        [-mrelocatable|-mrelocatable-lib|-K PIC] [-memb]
280        [-mlittle|-mlittle-endian|-le|-mbig|-mbig-endian|-be]
281        [-msolaris|-mno-solaris]
282        [-nops=COUNT]
283
284     _Target PRU options:_
285        [-link-relax]
286        [-mnolink-relax]
287        [-mno-warn-regname-label]
288
289     _Target RISC-V options:_
290        [-fpic|-fPIC|-fno-pic]
291        [-march=ISA]
292        [-mabi=ABI]
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
359     _Target Z80 options:_
360       [-z80]|[-z180]|[-r800]|[-ez80]|[-ez80-adl]
361       [-local-prefix=PREFIX]
362       [-colonless]
363       [-sdcc]
364       [-fp-s=FORMAT]
365       [-fp-d=FORMAT]
366       [-strict]|[-full]
367       [-with-inst=INST[,...]] [-Wnins INST[,...]]
368       [-without-inst=INST[,...]] [-Fins INST[,...]]
369       [ -ignore-undocumented-instructions] [-Wnud]
370       [ -ignore-unportable-instructions] [-Wnup]
371       [ -warn-undocumented-instructions] [-Wud]
372       [ -warn-unportable-instructions] [-Wup]
373       [ -forbid-undocumented-instructions] [-Fud]
374       [ -forbid-unportable-instructions] [-Fup]
375
376
377
378'@FILE'
379     Read command-line options from FILE.  The options read are inserted
380     in place of the original @FILE option.  If FILE does not exist, or
381     cannot be read, then the option will be treated literally, and not
382     removed.
383
384     Options in FILE are separated by whitespace.  A whitespace
385     character may be included in an option by surrounding the entire
386     option in either single or double quotes.  Any character (including
387     a backslash) may be included by prefixing the character to be
388     included with a backslash.  The FILE may itself contain additional
389     @FILE options; any such options will be processed recursively.
390
391'-a[cdghlmns]'
392     Turn on listings, in any of a variety of ways:
393
394     '-ac'
395          omit false conditionals
396
397     '-ad'
398          omit debugging directives
399
400     '-ag'
401          include general information, like as version and options
402          passed
403
404     '-ah'
405          include high-level source
406
407     '-al'
408          include assembly
409
410     '-am'
411          include macro expansions
412
413     '-an'
414          omit forms processing
415
416     '-as'
417          include symbols
418
419     '=file'
420          set the name of the listing file
421
422     You may combine these options; for example, use '-aln' for assembly
423     listing without forms processing.  The '=file' option, if used,
424     must be the last one.  By itself, '-a' defaults to '-ahls'.
425
426'--alternate'
427     Begin in alternate macro mode.  *Note '.altmacro': Altmacro.
428
429'--compress-debug-sections'
430     Compress DWARF debug sections using zlib with SHF_COMPRESSED from
431     the ELF ABI. The resulting object file may not be compatible with
432     older linkers and object file utilities.  Note if compression would
433     make a given section _larger_ then it is not compressed.
434
435'--compress-debug-sections=none'
436'--compress-debug-sections=zlib'
437'--compress-debug-sections=zlib-gnu'
438'--compress-debug-sections=zlib-gabi'
439     These options control how DWARF debug sections are compressed.
440     '--compress-debug-sections=none' is equivalent to
441     '--nocompress-debug-sections'.  '--compress-debug-sections=zlib'
442     and '--compress-debug-sections=zlib-gabi' are equivalent to
443     '--compress-debug-sections'.  '--compress-debug-sections=zlib-gnu'
444     compresses DWARF debug sections using zlib.  The debug sections are
445     renamed to begin with '.zdebug'.  Note if compression would make a
446     given section _larger_ then it is not compressed nor renamed.
447
448'--nocompress-debug-sections'
449     Do not compress DWARF debug sections.  This is usually the default
450     for all targets except the x86/x86_64, but a configure time option
451     can be used to override this.
452
453'-D'
454     Ignored.  This option is accepted for script compatibility with
455     calls to other assemblers.
456
457'--debug-prefix-map OLD=NEW'
458     When assembling files in directory 'OLD', record debugging
459     information describing them as in 'NEW' instead.
460
461'--defsym SYM=VALUE'
462     Define the symbol SYM to be VALUE before assembling the input file.
463     VALUE must be an integer constant.  As in C, a leading '0x'
464     indicates a hexadecimal value, and a leading '0' indicates an octal
465     value.  The value of the symbol can be overridden inside a source
466     file via the use of a '.set' pseudo-op.
467
468'-f'
469     "fast"--skip whitespace and comment preprocessing (assume source is
470     compiler output).
471
472'-g'
473'--gen-debug'
474     Generate debugging information for each assembler source line using
475     whichever debug format is preferred by the target.  This currently
476     means either STABS, ECOFF or DWARF2.
477
478'--gstabs'
479     Generate stabs debugging information for each assembler line.  This
480     may help debugging assembler code, if the debugger can handle it.
481
482'--gstabs+'
483     Generate stabs debugging information for each assembler line, with
484     GNU extensions that probably only gdb can handle, and that could
485     make other debuggers crash or refuse to read your program.  This
486     may help debugging assembler code.  Currently the only GNU
487     extension is the location of the current working directory at
488     assembling time.
489
490'--gdwarf-2'
491     Generate DWARF2 debugging information for each assembler line.
492     This may help debugging assembler code, if the debugger can handle
493     it.  Note--this option is only supported by some targets, not all
494     of them.
495
496'--gdwarf-sections'
497     Instead of creating a .debug_line section, create a series of
498     .debug_line.FOO sections where FOO is the name of the corresponding
499     code section.  For example a code section called .TEXT.FUNC will
500     have its dwarf line number information placed into a section called
501     .DEBUG_LINE.TEXT.FUNC.  If the code section is just called .TEXT
502     then debug line section will still be called just .DEBUG_LINE
503     without any suffix.
504
505'--gdwarf-cie-version=VERSION'
506     Control which version of DWARF Common Information Entries (CIEs)
507     are produced.  When this flag is not specificed the default is
508     version 1, though some targets can modify this default.  Other
509     possible values for VERSION are 3 or 4.
510
511'--size-check=error'
512'--size-check=warning'
513     Issue an error or warning for invalid ELF .size directive.
514
515'--elf-stt-common=no'
516'--elf-stt-common=yes'
517     These options control whether the ELF assembler should generate
518     common symbols with the 'STT_COMMON' type.  The default can be
519     controlled by a configure option '--enable-elf-stt-common'.
520
521'--generate-missing-build-notes=yes'
522'--generate-missing-build-notes=no'
523     These options control whether the ELF assembler should generate GNU
524     Build attribute notes if none are present in the input sources.
525     The default can be controlled by the
526     '--enable-generate-build-notes' configure option.
527
528'--help'
529     Print a summary of the command-line options and exit.
530
531'--target-help'
532     Print a summary of all target specific options and exit.
533
534'-I DIR'
535     Add directory DIR to the search list for '.include' directives.
536
537'-J'
538     Don't warn about signed overflow.
539
540'-K'
541     Issue warnings when difference tables altered for long
542     displacements.
543
544'-L'
545'--keep-locals'
546     Keep (in the symbol table) local symbols.  These symbols start with
547     system-specific local label prefixes, typically '.L' for ELF
548     systems or 'L' for traditional a.out systems.  *Note Symbol
549     Names::.
550
551'--listing-lhs-width=NUMBER'
552     Set the maximum width, in words, of the output data column for an
553     assembler listing to NUMBER.
554
555'--listing-lhs-width2=NUMBER'
556     Set the maximum width, in words, of the output data column for
557     continuation lines in an assembler listing to NUMBER.
558
559'--listing-rhs-width=NUMBER'
560     Set the maximum width of an input source line, as displayed in a
561     listing, to NUMBER bytes.
562
563'--listing-cont-lines=NUMBER'
564     Set the maximum number of lines printed in a listing for a single
565     line of input to NUMBER + 1.
566
567'--no-pad-sections'
568     Stop the assembler for padding the ends of output sections to the
569     alignment of that section.  The default is to pad the sections, but
570     this can waste space which might be needed on targets which have
571     tight memory constraints.
572
573'-o OBJFILE'
574     Name the object-file output from 'as' OBJFILE.
575
576'-R'
577     Fold the data section into the text section.
578
579'--hash-size=NUMBER'
580     Set the default size of GAS's hash tables to a prime number close
581     to NUMBER.  Increasing this value can reduce the length of time it
582     takes the assembler to perform its tasks, at the expense of
583     increasing the assembler's memory requirements.  Similarly reducing
584     this value can reduce the memory requirements at the expense of
585     speed.
586
587'--reduce-memory-overheads'
588     This option reduces GAS's memory requirements, at the expense of
589     making the assembly processes slower.  Currently this switch is a
590     synonym for '--hash-size=4051', but in the future it may have other
591     effects as well.
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 extenssion 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.  *Note
1958Options Controlling the Kind of Output: (gcc info)Overall Options.
1959
1960   Excess whitespace, comments, and character constants cannot be used
1961in the portions of the input text that are not preprocessed.
1962
1963   If the first line of an input file is '#NO_APP' or if you use the
1964'-f' option, whitespace and comments are not removed from the input
1965file.  Within an input file, you can ask for whitespace and comment
1966removal in specific portions of the by putting a line that says '#APP'
1967before the text that may contain whitespace or comments, and putting a
1968line that says '#NO_APP' after this text.  This feature is mainly intend
1969to support 'asm' statements in compilers whose output is otherwise free
1970of comments and whitespace.
1971
1972
1973File: as.info,  Node: Whitespace,  Next: Comments,  Prev: Preprocessing,  Up: Syntax
1974
19753.2 Whitespace
1976==============
1977
1978"Whitespace" is one or more blanks or tabs, in any order.  Whitespace is
1979used to separate symbols, and to make programs neater for people to
1980read.  Unless within character constants (*note Character Constants:
1981Characters.), any whitespace means the same as exactly one space.
1982
1983
1984File: as.info,  Node: Comments,  Next: Symbol Intro,  Prev: Whitespace,  Up: Syntax
1985
19863.3 Comments
1987============
1988
1989There are two ways of rendering comments to 'as'.  In both cases the
1990comment is equivalent to one space.
1991
1992   Anything from '/*' through the next '*/' is a comment.  This means
1993you may not nest these comments.
1994
1995     /*
1996       The only way to include a newline ('\n') in a comment
1997       is to use this sort of comment.
1998     */
1999
2000     /* This sort of comment does not nest. */
2001
2002   Anything from a "line comment" character up to the next newline is
2003considered a comment and is ignored.  The line comment character is
2004target specific, and some targets multiple comment characters.  Some
2005targets also have line comment characters that only work if they are the
2006first character on a line.  Some targets use a sequence of two
2007characters to introduce a line comment.  Some targets can also change
2008their line comment characters depending upon command-line options that
2009have been used.  For more details see the _Syntax_ section in the
2010documentation for individual targets.
2011
2012   If the line comment character is the hash sign ('#') then it still
2013has the special ability to enable and disable preprocessing (*note
2014Preprocessing::) and to specify logical line numbers:
2015
2016   To be compatible with past assemblers, lines that begin with '#' have
2017a special interpretation.  Following the '#' should be an absolute
2018expression (*note Expressions::): the logical line number of the _next_
2019line.  Then a string (*note Strings: Strings.) is allowed: if present it
2020is a new logical file name.  The rest of the line, if any, should be
2021whitespace.
2022
2023   If the first non-whitespace characters on the line are not numeric,
2024the line is ignored.  (Just like a comment.)
2025
2026                               # This is an ordinary comment.
2027     # 42-6 "new_file_name"    # New logical file name
2028                               # This is logical line # 36.
2029   This feature is deprecated, and may disappear from future versions of
2030'as'.
2031
2032
2033File: as.info,  Node: Symbol Intro,  Next: Statements,  Prev: Comments,  Up: Syntax
2034
20353.4 Symbols
2036===========
2037
2038A "symbol" is one or more characters chosen from the set of all letters
2039(both upper and lower case), digits and the three characters '_.$'.  On
2040most machines, you can also use '$' in symbol names; exceptions are
2041noted in *note Machine Dependencies::.  No symbol may begin with a
2042digit.  Case is significant.  There is no length limit; all characters
2043are significant.  Multibyte characters are supported.  Symbols are
2044delimited by characters not in that set, or by the beginning of a file
2045(since the source program must end with a newline, the end of a file is
2046not a possible symbol delimiter).  *Note Symbols::.
2047
2048   Symbol names may also be enclosed in double quote '"' characters.  In
2049such cases any characters are allowed, except for the NUL character.  If
2050a double quote character is to be included in the symbol name it must be
2051preceeded by a backslash '\' character.
2052
2053
2054File: as.info,  Node: Statements,  Next: Constants,  Prev: Symbol Intro,  Up: Syntax
2055
20563.5 Statements
2057==============
2058
2059A "statement" ends at a newline character ('\n') or a "line separator
2060character".  The line separator character is target specific and
2061described in the _Syntax_ section of each target's documentation.  Not
2062all targets support a line separator character.  The newline or line
2063separator character is considered to be part of the preceding statement.
2064Newlines and separators within character constants are an exception:
2065they do not end statements.
2066
2067   It is an error to end any statement with end-of-file: the last
2068character of any input file should be a newline.
2069
2070   An empty statement is allowed, and may include whitespace.  It is
2071ignored.
2072
2073   A statement begins with zero or more labels, optionally followed by a
2074key symbol which determines what kind of statement it is.  The key
2075symbol determines the syntax of the rest of the statement.  If the
2076symbol begins with a dot '.' then the statement is an assembler
2077directive: typically valid for any computer.  If the symbol begins with
2078a letter the statement is an assembly language "instruction": it
2079assembles into a machine language instruction.  Different versions of
2080'as' for different computers recognize different instructions.  In fact,
2081the same symbol may represent a different instruction in a different
2082computer's assembly language.
2083
2084   A label is a symbol immediately followed by a colon (':').
2085Whitespace before a label or after a colon is permitted, but you may not
2086have whitespace between a label's symbol and its colon.  *Note Labels::.
2087
2088   For HPPA targets, labels need not be immediately followed by a colon,
2089but the definition of a label must begin in column zero.  This also
2090implies that only one label may be defined on each line.
2091
2092     label:     .directive    followed by something
2093     another_label:           # This is an empty statement.
2094                instruction   operand_1, operand_2, ...
2095
2096
2097File: as.info,  Node: Constants,  Prev: Statements,  Up: Syntax
2098
20993.6 Constants
2100=============
2101
2102A constant is a number, written so that its value is known by
2103inspection, without knowing any context.  Like this:
2104     .byte  74, 0112, 092, 0x4A, 0X4a, 'J, '\J # All the same value.
2105     .ascii "Ring the bell\7"                  # A string constant.
2106     .octa  0x123456789abcdef0123456789ABCDEF0 # A bignum.
2107     .float 0f-314159265358979323846264338327\
2108     95028841971.693993751E-40                 # - pi, a flonum.
2109
2110* Menu:
2111
2112* Characters::                  Character Constants
2113* Numbers::                     Number Constants
2114
2115
2116File: as.info,  Node: Characters,  Next: Numbers,  Up: Constants
2117
21183.6.1 Character Constants
2119-------------------------
2120
2121There are two kinds of character constants.  A "character" stands for
2122one character in one byte and its value may be used in numeric
2123expressions.  String constants (properly called string _literals_) are
2124potentially many bytes and their values may not be used in arithmetic
2125expressions.
2126
2127* Menu:
2128
2129* Strings::                     Strings
2130* Chars::                       Characters
2131
2132
2133File: as.info,  Node: Strings,  Next: Chars,  Up: Characters
2134
21353.6.1.1 Strings
2136...............
2137
2138A "string" is written between double-quotes.  It may contain
2139double-quotes or null characters.  The way to get special characters
2140into a string is to "escape" these characters: precede them with a
2141backslash '\' character.  For example '\\' represents one backslash: the
2142first '\' is an escape which tells 'as' to interpret the second
2143character literally as a backslash (which prevents 'as' from recognizing
2144the second '\' as an escape character).  The complete list of escapes
2145follows.
2146
2147'\b'
2148     Mnemonic for backspace; for ASCII this is octal code 010.
2149
2150'backslash-f'
2151     Mnemonic for FormFeed; for ASCII this is octal code 014.
2152
2153'\n'
2154     Mnemonic for newline; for ASCII this is octal code 012.
2155
2156'\r'
2157     Mnemonic for carriage-Return; for ASCII this is octal code 015.
2158
2159'\t'
2160     Mnemonic for horizontal Tab; for ASCII this is octal code 011.
2161
2162'\ DIGIT DIGIT DIGIT'
2163     An octal character code.  The numeric code is 3 octal digits.  For
2164     compatibility with other Unix systems, 8 and 9 are accepted as
2165     digits: for example, '\008' has the value 010, and '\009' the value
2166     011.
2167
2168'\x HEX-DIGITS...'
2169     A hex character code.  All trailing hex digits are combined.
2170     Either upper or lower case 'x' works.
2171
2172'\\'
2173     Represents one '\' character.
2174
2175'\"'
2176     Represents one '"' character.  Needed in strings to represent this
2177     character, because an unescaped '"' would end the string.
2178
2179'\ ANYTHING-ELSE'
2180     Any other character when escaped by '\' gives a warning, but
2181     assembles as if the '\' was not present.  The idea is that if you
2182     used an escape sequence you clearly didn't want the literal
2183     interpretation of the following character.  However 'as' has no
2184     other interpretation, so 'as' knows it is giving you the wrong code
2185     and warns you of the fact.
2186
2187   Which characters are escapable, and what those escapes represent,
2188varies widely among assemblers.  The current set is what we think the
2189BSD 4.2 assembler recognizes, and is a subset of what most C compilers
2190recognize.  If you are in doubt, do not use an escape sequence.
2191
2192
2193File: as.info,  Node: Chars,  Prev: Strings,  Up: Characters
2194
21953.6.1.2 Characters
2196..................
2197
2198A single character may be written as a single quote immediately followed
2199by that character.  Some backslash escapes apply to characters, '\b',
2200'\f', '\n', '\r', '\t', and '\"' with the same meaning as for strings,
2201plus '\'' for a single quote.  So if you want to write the character
2202backslash, you must write ''\\' where the first '\' escapes the second
2203'\'.  As you can see, the quote is an acute accent, not a grave accent.
2204A newline immediately following an acute accent is taken as a literal
2205character and does not count as the end of a statement.  The value of a
2206character constant in a numeric expression is the machine's byte-wide
2207code for that character.  'as' assumes your character code is ASCII:
2208''A' means 65, ''B' means 66, and so on.
2209
2210
2211File: as.info,  Node: Numbers,  Prev: Characters,  Up: Constants
2212
22133.6.2 Number Constants
2214----------------------
2215
2216'as' distinguishes three kinds of numbers according to how they are
2217stored in the target machine.  _Integers_ are numbers that would fit
2218into an 'int' in the C language.  _Bignums_ are integers, but they are
2219stored in more than 32 bits.  _Flonums_ are floating point numbers,
2220described below.
2221
2222* Menu:
2223
2224* Integers::                    Integers
2225* Bignums::                     Bignums
2226* Flonums::                     Flonums
2227
2228
2229File: as.info,  Node: Integers,  Next: Bignums,  Up: Numbers
2230
22313.6.2.1 Integers
2232................
2233
2234A binary integer is '0b' or '0B' followed by zero or more of the binary
2235digits '01'.
2236
2237   An octal integer is '0' followed by zero or more of the octal digits
2238('01234567').
2239
2240   A decimal integer starts with a non-zero digit followed by zero or
2241more digits ('0123456789').
2242
2243   A hexadecimal integer is '0x' or '0X' followed by one or more
2244hexadecimal digits chosen from '0123456789abcdefABCDEF'.
2245
2246   Integers have the usual values.  To denote a negative integer, use
2247the prefix operator '-' discussed under expressions (*note Prefix
2248Operators: Prefix Ops.).
2249
2250
2251File: as.info,  Node: Bignums,  Next: Flonums,  Prev: Integers,  Up: Numbers
2252
22533.6.2.2 Bignums
2254...............
2255
2256A "bignum" has the same syntax and semantics as an integer except that
2257the number (or its negative) takes more than 32 bits to represent in
2258binary.  The distinction is made because in some places integers are
2259permitted while bignums are not.
2260
2261
2262File: as.info,  Node: Flonums,  Prev: Bignums,  Up: Numbers
2263
22643.6.2.3 Flonums
2265...............
2266
2267A "flonum" represents a floating point number.  The translation is
2268indirect: a decimal floating point number from the text is converted by
2269'as' to a generic binary floating point number of more than sufficient
2270precision.  This generic floating point number is converted to a
2271particular computer's floating point format (or formats) by a portion of
2272'as' specialized to that computer.
2273
2274   A flonum is written by writing (in order)
2275   * The digit '0'.  ('0' is optional on the HPPA.)
2276
2277   * A letter, to tell 'as' the rest of the number is a flonum.  'e' is
2278     recommended.  Case is not important.
2279
2280     On the H8/300 and Renesas / SuperH SH architectures, the letter
2281     must be one of the letters 'DFPRSX' (in upper or lower case).
2282
2283     On the ARC, the letter must be one of the letters 'DFRS' (in upper
2284     or lower case).
2285
2286     On the HPPA architecture, the letter must be 'E' (upper case only).
2287
2288   * An optional sign: either '+' or '-'.
2289
2290   * An optional "integer part": zero or more decimal digits.
2291
2292   * An optional "fractional part": '.' followed by zero or more decimal
2293     digits.
2294
2295   * An optional exponent, consisting of:
2296
2297        * An 'E' or 'e'.
2298        * Optional sign: either '+' or '-'.
2299        * One or more decimal digits.
2300
2301   At least one of the integer part or the fractional part must be
2302present.  The floating point number has the usual base-10 value.
2303
2304   'as' does all processing using integers.  Flonums are computed
2305independently of any floating point hardware in the computer running
2306'as'.
2307
2308
2309File: as.info,  Node: Sections,  Next: Symbols,  Prev: Syntax,  Up: Top
2310
23114 Sections and Relocation
2312*************************
2313
2314* Menu:
2315
2316* Secs Background::             Background
2317* Ld Sections::                 Linker Sections
2318* As Sections::                 Assembler Internal Sections
2319* Sub-Sections::                Sub-Sections
2320* bss::                         bss Section
2321
2322
2323File: as.info,  Node: Secs Background,  Next: Ld Sections,  Up: Sections
2324
23254.1 Background
2326==============
2327
2328Roughly, a section is a range of addresses, with no gaps; all data "in"
2329those addresses is treated the same for some particular purpose.  For
2330example there may be a "read only" section.
2331
2332   The linker 'ld' reads many object files (partial programs) and
2333combines their contents to form a runnable program.  When 'as' emits an
2334object file, the partial program is assumed to start at address 0.  'ld'
2335assigns the final addresses for the partial program, so that different
2336partial programs do not overlap.  This is actually an
2337oversimplification, but it suffices to explain how 'as' uses sections.
2338
2339   'ld' moves blocks of bytes of your program to their run-time
2340addresses.  These blocks slide to their run-time addresses as rigid
2341units; their length does not change and neither does the order of bytes
2342within them.  Such a rigid unit is called a _section_.  Assigning
2343run-time addresses to sections is called "relocation".  It includes the
2344task of adjusting mentions of object-file addresses so they refer to the
2345proper run-time addresses.  For the H8/300, and for the Renesas / SuperH
2346SH, 'as' pads sections if needed to ensure they end on a word (sixteen
2347bit) boundary.
2348
2349   An object file written by 'as' has at least three sections, any of
2350which may be empty.  These are named "text", "data" and "bss" sections.
2351
2352   When it generates COFF or ELF output, 'as' can also generate whatever
2353other named sections you specify using the '.section' directive (*note
2354'.section': Section.).  If you do not use any directives that place
2355output in the '.text' or '.data' sections, these sections still exist,
2356but are empty.
2357
2358   When 'as' generates SOM or ELF output for the HPPA, 'as' can also
2359generate whatever other named sections you specify using the '.space'
2360and '.subspace' directives.  See 'HP9000 Series 800 Assembly Language
2361Reference Manual' (HP 92432-90001) for details on the '.space' and
2362'.subspace' assembler directives.
2363
2364   Additionally, 'as' uses different names for the standard text, data,
2365and bss sections when generating SOM output.  Program text is placed
2366into the '$CODE$' section, data into '$DATA$', and BSS into '$BSS$'.
2367
2368   Within the object file, the text section starts at address '0', the
2369data section follows, and the bss section follows the data section.
2370
2371   When generating either SOM or ELF output files on the HPPA, the text
2372section starts at address '0', the data section at address '0x4000000',
2373and the bss section follows the data section.
2374
2375   To let 'ld' know which data changes when the sections are relocated,
2376and how to change that data, 'as' also writes to the object file details
2377of the relocation needed.  To perform relocation 'ld' must know, each
2378time an address in the object file is mentioned:
2379   * Where in the object file is the beginning of this reference to an
2380     address?
2381   * How long (in bytes) is this reference?
2382   * Which section does the address refer to?  What is the numeric value
2383     of
2384          (ADDRESS) - (START-ADDRESS OF SECTION)?
2385   * Is the reference to an address "Program-Counter relative"?
2386
2387   In fact, every address 'as' ever uses is expressed as
2388     (SECTION) + (OFFSET INTO SECTION)
2389Further, most expressions 'as' computes have this section-relative
2390nature.  (For some object formats, such as SOM for the HPPA, some
2391expressions are symbol-relative instead.)
2392
2393   In this manual we use the notation {SECNAME N} to mean "offset N into
2394section SECNAME."
2395
2396   Apart from text, data and bss sections you need to know about the
2397"absolute" section.  When 'ld' mixes partial programs, addresses in the
2398absolute section remain unchanged.  For example, address '{absolute 0}'
2399is "relocated" to run-time address 0 by 'ld'.  Although the linker never
2400arranges two partial programs' data sections with overlapping addresses
2401after linking, _by definition_ their absolute sections must overlap.
2402Address '{absolute 239}' in one part of a program is always the same
2403address when the program is running as address '{absolute 239}' in any
2404other part of the program.
2405
2406   The idea of sections is extended to the "undefined" section.  Any
2407address whose section is unknown at assembly time is by definition
2408rendered {undefined U}--where U is filled in later.  Since numbers are
2409always defined, the only way to generate an undefined address is to
2410mention an undefined symbol.  A reference to a named common block would
2411be such a symbol: its value is unknown at assembly time so it has
2412section _undefined_.
2413
2414   By analogy the word _section_ is used to describe groups of sections
2415in the linked program.  'ld' puts all partial programs' text sections in
2416contiguous addresses in the linked program.  It is customary to refer to
2417the _text section_ of a program, meaning all the addresses of all
2418partial programs' text sections.  Likewise for data and bss sections.
2419
2420   Some sections are manipulated by 'ld'; others are invented for use of
2421'as' and have no meaning except during assembly.
2422
2423
2424File: as.info,  Node: Ld Sections,  Next: As Sections,  Prev: Secs Background,  Up: Sections
2425
24264.2 Linker Sections
2427===================
2428
2429'ld' deals with just four kinds of sections, summarized below.
2430
2431*named sections*
2432*text section*
2433*data section*
2434     These sections hold your program.  'as' and 'ld' treat them as
2435     separate but equal sections.  Anything you can say of one section
2436     is true of another.  When the program is running, however, it is
2437     customary for the text section to be unalterable.  The text section
2438     is often shared among processes: it contains instructions,
2439     constants and the like.  The data section of a running program is
2440     usually alterable: for example, C variables would be stored in the
2441     data section.
2442
2443*bss section*
2444     This section contains zeroed bytes when your program begins
2445     running.  It is used to hold uninitialized variables or common
2446     storage.  The length of each partial program's bss section is
2447     important, but because it starts out containing zeroed bytes there
2448     is no need to store explicit zero bytes in the object file.  The
2449     bss section was invented to eliminate those explicit zeros from
2450     object files.
2451
2452*absolute section*
2453     Address 0 of this section is always "relocated" to runtime address
2454     0.  This is useful if you want to refer to an address that 'ld'
2455     must not change when relocating.  In this sense we speak of
2456     absolute addresses being "unrelocatable": they do not change during
2457     relocation.
2458
2459*undefined section*
2460     This "section" is a catch-all for address references to objects not
2461     in the preceding sections.
2462
2463   An idealized example of three relocatable sections follows.  The
2464example uses the traditional section names '.text' and '.data'.  Memory
2465addresses are on the horizontal axis.
2466
2467                           +-----+----+--+
2468     partial program # 1:  |ttttt|dddd|00|
2469                           +-----+----+--+
2470
2471                           text   data bss
2472                           seg.   seg. seg.
2473
2474                           +---+---+---+
2475     partial program # 2:  |TTT|DDD|000|
2476                           +---+---+---+
2477
2478                           +--+---+-----+--+----+---+-----+~~
2479     linked program:       |  |TTT|ttttt|  |dddd|DDD|00000|
2480                           +--+---+-----+--+----+---+-----+~~
2481
2482         addresses:        0 ...
2483
2484
2485File: as.info,  Node: As Sections,  Next: Sub-Sections,  Prev: Ld Sections,  Up: Sections
2486
24874.3 Assembler Internal Sections
2488===============================
2489
2490These sections are meant only for the internal use of 'as'.  They have
2491no meaning at run-time.  You do not really need to know about these
2492sections for most purposes; but they can be mentioned in 'as' warning
2493messages, so it might be helpful to have an idea of their meanings to
2494'as'.  These sections are used to permit the value of every expression
2495in your assembly language program to be a section-relative address.
2496
2497ASSEMBLER-INTERNAL-LOGIC-ERROR!
2498     An internal assembler logic error has been found.  This means there
2499     is a bug in the assembler.
2500
2501expr section
2502     The assembler stores complex expression internally as combinations
2503     of symbols.  When it needs to represent an expression as a symbol,
2504     it puts it in the expr section.
2505
2506
2507File: as.info,  Node: Sub-Sections,  Next: bss,  Prev: As Sections,  Up: Sections
2508
25094.4 Sub-Sections
2510================
2511
2512Assembled bytes conventionally fall into two sections: text and data.
2513You may have separate groups of data in named sections that you want to
2514end up near to each other in the object file, even though they are not
2515contiguous in the assembler source.  'as' allows you to use
2516"subsections" for this purpose.  Within each section, there can be
2517numbered subsections with values from 0 to 8192.  Objects assembled into
2518the same subsection go into the object file together with other objects
2519in the same subsection.  For example, a compiler might want to store
2520constants in the text section, but might not want to have them
2521interspersed with the program being assembled.  In this case, the
2522compiler could issue a '.text 0' before each section of code being
2523output, and a '.text 1' before each group of constants being output.
2524
2525   Subsections are optional.  If you do not use subsections, everything
2526goes in subsection number zero.
2527
2528   Each subsection is zero-padded up to a multiple of four bytes.
2529(Subsections may be padded a different amount on different flavors of
2530'as'.)
2531
2532   Subsections appear in your object file in numeric order, lowest
2533numbered to highest.  (All this to be compatible with other people's
2534assemblers.)  The object file contains no representation of subsections;
2535'ld' and other programs that manipulate object files see no trace of
2536them.  They just see all your text subsections as a text section, and
2537all your data subsections as a data section.
2538
2539   To specify which subsection you want subsequent statements assembled
2540into, use a numeric argument to specify it, in a '.text EXPRESSION' or a
2541'.data EXPRESSION' statement.  When generating COFF output, you can also
2542use an extra subsection argument with arbitrary named sections:
2543'.section NAME, EXPRESSION'.  When generating ELF output, you can also
2544use the '.subsection' directive (*note SubSection::) to specify a
2545subsection: '.subsection EXPRESSION'.  EXPRESSION should be an absolute
2546expression (*note Expressions::).  If you just say '.text' then '.text
25470' is assumed.  Likewise '.data' means '.data 0'.  Assembly begins in
2548'text 0'.  For instance:
2549     .text 0     # The default subsection is text 0 anyway.
2550     .ascii "This lives in the first text subsection. *"
2551     .text 1
2552     .ascii "But this lives in the second text subsection."
2553     .data 0
2554     .ascii "This lives in the data section,"
2555     .ascii "in the first data subsection."
2556     .text 0
2557     .ascii "This lives in the first text section,"
2558     .ascii "immediately following the asterisk (*)."
2559
2560   Each section has a "location counter" incremented by one for every
2561byte assembled into that section.  Because subsections are merely a
2562convenience restricted to 'as' there is no concept of a subsection
2563location counter.  There is no way to directly manipulate a location
2564counter--but the '.align' directive changes it, and any label definition
2565captures its current value.  The location counter of the section where
2566statements are being assembled is said to be the "active" location
2567counter.
2568
2569
2570File: as.info,  Node: bss,  Prev: Sub-Sections,  Up: Sections
2571
25724.5 bss Section
2573===============
2574
2575The bss section is used for local common variable storage.  You may
2576allocate address space in the bss section, but you may not dictate data
2577to load into it before your program executes.  When your program starts
2578running, all the contents of the bss section are zeroed bytes.
2579
2580   The '.lcomm' pseudo-op defines a symbol in the bss section; see *note
2581'.lcomm': Lcomm.
2582
2583   The '.comm' pseudo-op may be used to declare a common symbol, which
2584is another form of uninitialized symbol; see *note '.comm': Comm.
2585
2586   When assembling for a target which supports multiple sections, such
2587as ELF or COFF, you may switch into the '.bss' section and define
2588symbols as usual; see *note '.section': Section.  You may only assemble
2589zero values into the section.  Typically the section will only contain
2590symbol definitions and '.skip' directives (*note '.skip': Skip.).
2591
2592
2593File: as.info,  Node: Symbols,  Next: Expressions,  Prev: Sections,  Up: Top
2594
25955 Symbols
2596*********
2597
2598Symbols are a central concept: the programmer uses symbols to name
2599things, the linker uses symbols to link, and the debugger uses symbols
2600to debug.
2601
2602     _Warning:_ 'as' does not place symbols in the object file in the
2603     same order they were declared.  This may break some debuggers.
2604
2605* Menu:
2606
2607* Labels::                      Labels
2608* Setting Symbols::             Giving Symbols Other Values
2609* Symbol Names::                Symbol Names
2610* Dot::                         The Special Dot Symbol
2611* Symbol Attributes::           Symbol Attributes
2612
2613
2614File: as.info,  Node: Labels,  Next: Setting Symbols,  Up: Symbols
2615
26165.1 Labels
2617==========
2618
2619A "label" is written as a symbol immediately followed by a colon ':'.
2620The symbol then represents the current value of the active location
2621counter, and is, for example, a suitable instruction operand.  You are
2622warned if you use the same symbol to represent two different locations:
2623the first definition overrides any other definitions.
2624
2625   On the HPPA, the usual form for a label need not be immediately
2626followed by a colon, but instead must start in column zero.  Only one
2627label may be defined on a single line.  To work around this, the HPPA
2628version of 'as' also provides a special directive '.label' for defining
2629labels more flexibly.
2630
2631
2632File: as.info,  Node: Setting Symbols,  Next: Symbol Names,  Prev: Labels,  Up: Symbols
2633
26345.2 Giving Symbols Other Values
2635===============================
2636
2637A symbol can be given an arbitrary value by writing a symbol, followed
2638by an equals sign '=', followed by an expression (*note Expressions::).
2639This is equivalent to using the '.set' directive.  *Note '.set': Set.
2640In the same way, using a double equals sign '=''=' here represents an
2641equivalent of the '.eqv' directive.  *Note '.eqv': Eqv.
2642
2643   Blackfin does not support symbol assignment with '='.
2644
2645
2646File: as.info,  Node: Symbol Names,  Next: Dot,  Prev: Setting Symbols,  Up: Symbols
2647
26485.3 Symbol Names
2649================
2650
2651Symbol names begin with a letter or with one of '._'.  On most machines,
2652you can also use '$' in symbol names; exceptions are noted in *note
2653Machine Dependencies::.  That character may be followed by any string of
2654digits, letters, dollar signs (unless otherwise noted for a particular
2655target machine), and underscores.
2656
2657   Case of letters is significant: 'foo' is a different symbol name than
2658'Foo'.
2659
2660   Symbol names do not start with a digit.  An exception to this rule is
2661made for Local Labels.  See below.
2662
2663   Multibyte characters are supported.  To generate a symbol name
2664containing multibyte characters enclose it within double quotes and use
2665escape codes.  cf *Note Strings::.  Generating a multibyte symbol name
2666from a label is not currently supported.
2667
2668   Each symbol has exactly one name.  Each name in an assembly language
2669program refers to exactly one symbol.  You may use that symbol name any
2670number of times in a program.
2671
2672Local Symbol Names
2673------------------
2674
2675A local symbol is any symbol beginning with certain local label
2676prefixes.  By default, the local label prefix is '.L' for ELF systems or
2677'L' for traditional a.out systems, but each target may have its own set
2678of local label prefixes.  On the HPPA local symbols begin with 'L$'.
2679
2680   Local symbols are defined and used within the assembler, but they are
2681normally not saved in object files.  Thus, they are not visible when
2682debugging.  You may use the '-L' option (*note Include Local Symbols:
2683L.) to retain the local symbols in the object files.
2684
2685Local Labels
2686------------
2687
2688Local labels are different from local symbols.  Local labels help
2689compilers and programmers use names temporarily.  They create symbols
2690which are guaranteed to be unique over the entire scope of the input
2691source code and which can be referred to by a simple notation.  To
2692define a local label, write a label of the form 'N:' (where N represents
2693any non-negative integer).  To refer to the most recent previous
2694definition of that label write 'Nb', using the same number as when you
2695defined the label.  To refer to the next definition of a local label,
2696write 'Nf'.  The 'b' stands for "backwards" and the 'f' stands for
2697"forwards".
2698
2699   There is no restriction on how you can use these labels, and you can
2700reuse them too.  So that it is possible to repeatedly define the same
2701local label (using the same number 'N'), although you can only refer to
2702the most recently defined local label of that number (for a backwards
2703reference) or the next definition of a specific local label for a
2704forward reference.  It is also worth noting that the first 10 local
2705labels ('0:'...'9:') are implemented in a slightly more efficient manner
2706than the others.
2707
2708   Here is an example:
2709
2710     1:        branch 1f
2711     2:        branch 1b
2712     1:        branch 2f
2713     2:        branch 1b
2714
2715   Which is the equivalent of:
2716
2717     label_1:  branch label_3
2718     label_2:  branch label_1
2719     label_3:  branch label_4
2720     label_4:  branch label_3
2721
2722   Local label names are only a notational device.  They are immediately
2723transformed into more conventional symbol names before the assembler
2724uses them.  The symbol names are stored in the symbol table, appear in
2725error messages, and are optionally emitted to the object file.  The
2726names are constructed using these parts:
2727
2728'_local label prefix_'
2729     All local symbols begin with the system-specific local label
2730     prefix.  Normally both 'as' and 'ld' forget symbols that start with
2731     the local label prefix.  These labels are used for symbols you are
2732     never intended to see.  If you use the '-L' option then 'as'
2733     retains these symbols in the object file.  If you also instruct
2734     'ld' to retain these symbols, you may use them in debugging.
2735
2736'NUMBER'
2737     This is the number that was used in the local label definition.  So
2738     if the label is written '55:' then the number is '55'.
2739
2740'C-B'
2741     This unusual character is included so you do not accidentally
2742     invent a symbol of the same name.  The character has ASCII value of
2743     '\002' (control-B).
2744
2745'_ordinal number_'
2746     This is a serial number to keep the labels distinct.  The first
2747     definition of '0:' gets the number '1'.  The 15th definition of
2748     '0:' gets the number '15', and so on.  Likewise the first
2749     definition of '1:' gets the number '1' and its 15th definition gets
2750     '15' as well.
2751
2752   So for example, the first '1:' may be named '.L1C-B1', and the 44th
2753'3:' may be named '.L3C-B44'.
2754
2755Dollar Local Labels
2756-------------------
2757
2758On some targets 'as' also supports an even more local form of local
2759labels called dollar labels.  These labels go out of scope (i.e., they
2760become undefined) as soon as a non-local label is defined.  Thus they
2761remain valid for only a small region of the input source code.  Normal
2762local labels, by contrast, remain in scope for the entire file, or until
2763they are redefined by another occurrence of the same local label.
2764
2765   Dollar labels are defined in exactly the same way as ordinary local
2766labels, except that they have a dollar sign suffix to their numeric
2767value, e.g., '55$:'.
2768
2769   They can also be distinguished from ordinary local labels by their
2770transformed names which use ASCII character '\001' (control-A) as the
2771magic character to distinguish them from ordinary labels.  For example,
2772the fifth definition of '6$' may be named '.L6'C-A'5'.
2773
2774
2775File: as.info,  Node: Dot,  Next: Symbol Attributes,  Prev: Symbol Names,  Up: Symbols
2776
27775.4 The Special Dot Symbol
2778==========================
2779
2780The special symbol '.' refers to the current address that 'as' is
2781assembling into.  Thus, the expression 'melvin: .long .' defines
2782'melvin' to contain its own address.  Assigning a value to '.' is
2783treated the same as a '.org' directive.  Thus, the expression '.=.+4' is
2784the same as saying '.space 4'.
2785
2786
2787File: as.info,  Node: Symbol Attributes,  Prev: Dot,  Up: Symbols
2788
27895.5 Symbol Attributes
2790=====================
2791
2792Every symbol has, as well as its name, the attributes "Value" and
2793"Type".  Depending on output format, symbols can also have auxiliary
2794attributes.
2795
2796   If you use a symbol without defining it, 'as' assumes zero for all
2797these attributes, and probably won't warn you.  This makes the symbol an
2798externally defined symbol, which is generally what you would want.
2799
2800* Menu:
2801
2802* Symbol Value::                Value
2803* Symbol Type::                 Type
2804* a.out Symbols::               Symbol Attributes: 'a.out'
2805* COFF Symbols::                Symbol Attributes for COFF
2806* SOM Symbols::                Symbol Attributes for SOM
2807
2808
2809File: as.info,  Node: Symbol Value,  Next: Symbol Type,  Up: Symbol Attributes
2810
28115.5.1 Value
2812-----------
2813
2814The value of a symbol is (usually) 32 bits.  For a symbol which labels a
2815location in the text, data, bss or absolute sections the value is the
2816number of addresses from the start of that section to the label.
2817Naturally for text, data and bss sections the value of a symbol changes
2818as 'ld' changes section base addresses during linking.  Absolute
2819symbols' values do not change during linking: that is why they are
2820called absolute.
2821
2822   The value of an undefined symbol is treated in a special way.  If it
2823is 0 then the symbol is not defined in this assembler source file, and
2824'ld' tries to determine its value from other files linked into the same
2825program.  You make this kind of symbol simply by mentioning a symbol
2826name without defining it.  A non-zero value represents a '.comm' common
2827declaration.  The value is how much common storage to reserve, in bytes
2828(addresses).  The symbol refers to the first address of the allocated
2829storage.
2830
2831
2832File: as.info,  Node: Symbol Type,  Next: a.out Symbols,  Prev: Symbol Value,  Up: Symbol Attributes
2833
28345.5.2 Type
2835----------
2836
2837The type attribute of a symbol contains relocation (section)
2838information, any flag settings indicating that a symbol is external, and
2839(optionally), other information for linkers and debuggers.  The exact
2840format depends on the object-code output format in use.
2841
2842
2843File: as.info,  Node: a.out Symbols,  Next: COFF Symbols,  Prev: Symbol Type,  Up: Symbol Attributes
2844
28455.5.3 Symbol Attributes: 'a.out'
2846--------------------------------
2847
2848* Menu:
2849
2850* Symbol Desc::                 Descriptor
2851* Symbol Other::                Other
2852
2853
2854File: as.info,  Node: Symbol Desc,  Next: Symbol Other,  Up: a.out Symbols
2855
28565.5.3.1 Descriptor
2857..................
2858
2859This is an arbitrary 16-bit value.  You may establish a symbol's
2860descriptor value by using a '.desc' statement (*note '.desc': Desc.).  A
2861descriptor value means nothing to 'as'.
2862
2863
2864File: as.info,  Node: Symbol Other,  Prev: Symbol Desc,  Up: a.out Symbols
2865
28665.5.3.2 Other
2867.............
2868
2869This is an arbitrary 8-bit value.  It means nothing to 'as'.
2870
2871
2872File: as.info,  Node: COFF Symbols,  Next: SOM Symbols,  Prev: a.out Symbols,  Up: Symbol Attributes
2873
28745.5.4 Symbol Attributes for COFF
2875--------------------------------
2876
2877The COFF format supports a multitude of auxiliary symbol attributes;
2878like the primary symbol attributes, they are set between '.def' and
2879'.endef' directives.
2880
28815.5.4.1 Primary Attributes
2882..........................
2883
2884The symbol name is set with '.def'; the value and type, respectively,
2885with '.val' and '.type'.
2886
28875.5.4.2 Auxiliary Attributes
2888............................
2889
2890The 'as' directives '.dim', '.line', '.scl', '.size', '.tag', and
2891'.weak' can generate auxiliary symbol table information for COFF.
2892
2893
2894File: as.info,  Node: SOM Symbols,  Prev: COFF Symbols,  Up: Symbol Attributes
2895
28965.5.5 Symbol Attributes for SOM
2897-------------------------------
2898
2899The SOM format for the HPPA supports a multitude of symbol attributes
2900set with the '.EXPORT' and '.IMPORT' directives.
2901
2902   The attributes are described in 'HP9000 Series 800 Assembly Language
2903Reference Manual' (HP 92432-90001) under the 'IMPORT' and 'EXPORT'
2904assembler directive documentation.
2905
2906
2907File: as.info,  Node: Expressions,  Next: Pseudo Ops,  Prev: Symbols,  Up: Top
2908
29096 Expressions
2910*************
2911
2912An "expression" specifies an address or numeric value.  Whitespace may
2913precede and/or follow an expression.
2914
2915   The result of an expression must be an absolute number, or else an
2916offset into a particular section.  If an expression is not absolute, and
2917there is not enough information when 'as' sees the expression to know
2918its section, a second pass over the source program might be necessary to
2919interpret the expression--but the second pass is currently not
2920implemented.  'as' aborts with an error message in this situation.
2921
2922* Menu:
2923
2924* Empty Exprs::                 Empty Expressions
2925* Integer Exprs::               Integer Expressions
2926
2927
2928File: as.info,  Node: Empty Exprs,  Next: Integer Exprs,  Up: Expressions
2929
29306.1 Empty Expressions
2931=====================
2932
2933An empty expression has no value: it is just whitespace or null.
2934Wherever an absolute expression is required, you may omit the
2935expression, and 'as' assumes a value of (absolute) 0.  This is
2936compatible with other assemblers.
2937
2938
2939File: as.info,  Node: Integer Exprs,  Prev: Empty Exprs,  Up: Expressions
2940
29416.2 Integer Expressions
2942=======================
2943
2944An "integer expression" is one or more _arguments_ delimited by
2945_operators_.
2946
2947* Menu:
2948
2949* Arguments::                   Arguments
2950* Operators::                   Operators
2951* Prefix Ops::                  Prefix Operators
2952* Infix Ops::                   Infix Operators
2953
2954
2955File: as.info,  Node: Arguments,  Next: Operators,  Up: Integer Exprs
2956
29576.2.1 Arguments
2958---------------
2959
2960"Arguments" are symbols, numbers or subexpressions.  In other contexts
2961arguments are sometimes called "arithmetic operands".  In this manual,
2962to avoid confusing them with the "instruction operands" of the machine
2963language, we use the term "argument" to refer to parts of expressions
2964only, reserving the word "operand" to refer only to machine instruction
2965operands.
2966
2967   Symbols are evaluated to yield {SECTION NNN} where SECTION is one of
2968text, data, bss, absolute, or undefined.  NNN is a signed, 2's
2969complement 32 bit integer.
2970
2971   Numbers are usually integers.
2972
2973   A number can be a flonum or bignum.  In this case, you are warned
2974that only the low order 32 bits are used, and 'as' pretends these 32
2975bits are an integer.  You may write integer-manipulating instructions
2976that act on exotic constants, compatible with other assemblers.
2977
2978   Subexpressions are a left parenthesis '(' followed by an integer
2979expression, followed by a right parenthesis ')'; or a prefix operator
2980followed by an argument.
2981
2982
2983File: as.info,  Node: Operators,  Next: Prefix Ops,  Prev: Arguments,  Up: Integer Exprs
2984
29856.2.2 Operators
2986---------------
2987
2988"Operators" are arithmetic functions, like '+' or '%'.  Prefix operators
2989are followed by an argument.  Infix operators appear between their
2990arguments.  Operators may be preceded and/or followed by whitespace.
2991
2992
2993File: as.info,  Node: Prefix Ops,  Next: Infix Ops,  Prev: Operators,  Up: Integer Exprs
2994
29956.2.3 Prefix Operator
2996---------------------
2997
2998'as' has the following "prefix operators".  They each take one argument,
2999which must be absolute.
3000
3001'-'
3002     "Negation".  Two's complement negation.
3003'~'
3004     "Complementation".  Bitwise not.
3005
3006
3007File: as.info,  Node: Infix Ops,  Prev: Prefix Ops,  Up: Integer Exprs
3008
30096.2.4 Infix Operators
3010---------------------
3011
3012"Infix operators" take two arguments, one on either side.  Operators
3013have precedence, but operations with equal precedence are performed left
3014to right.  Apart from '+' or '-', both arguments must be absolute, and
3015the result is absolute.
3016
3017  1. Highest Precedence
3018
3019     '*'
3020          "Multiplication".
3021
3022     '/'
3023          "Division".  Truncation is the same as the C operator '/'
3024
3025     '%'
3026          "Remainder".
3027
3028     '<<'
3029          "Shift Left".  Same as the C operator '<<'.
3030
3031     '>>'
3032          "Shift Right".  Same as the C operator '>>'.
3033
3034  2. Intermediate precedence
3035
3036     '|'
3037
3038          "Bitwise Inclusive Or".
3039
3040     '&'
3041          "Bitwise And".
3042
3043     '^'
3044          "Bitwise Exclusive Or".
3045
3046     '!'
3047          "Bitwise Or Not".
3048
3049  3. Low Precedence
3050
3051     '+'
3052          "Addition".  If either argument is absolute, the result has
3053          the section of the other argument.  You may not add together
3054          arguments from different sections.
3055
3056     '-'
3057          "Subtraction".  If the right argument is absolute, the result
3058          has the section of the left argument.  If both arguments are
3059          in the same section, the result is absolute.  You may not
3060          subtract arguments from different sections.
3061
3062     '=='
3063          "Is Equal To"
3064     '<>'
3065     '!='
3066          "Is Not Equal To"
3067     '<'
3068          "Is Less Than"
3069     '>'
3070          "Is Greater Than"
3071     '>='
3072          "Is Greater Than Or Equal To"
3073     '<='
3074          "Is Less Than Or Equal To"
3075
3076          The comparison operators can be used as infix operators.  A
3077          true results has a value of -1 whereas a false result has a
3078          value of 0.  Note, these operators perform signed comparisons.
3079
3080  4. Lowest Precedence
3081
3082     '&&'
3083          "Logical And".
3084
3085     '||'
3086          "Logical Or".
3087
3088          These two logical operations can be used to combine the
3089          results of sub expressions.  Note, unlike the comparison
3090          operators a true result returns a value of 1 but a false
3091          results does still return 0.  Also note that the logical or
3092          operator has a slightly lower precedence than logical and.
3093
3094   In short, it's only meaningful to add or subtract the _offsets_ in an
3095address; you can only have a defined section in one of the two
3096arguments.
3097
3098
3099File: as.info,  Node: Pseudo Ops,  Next: Object Attributes,  Prev: Expressions,  Up: Top
3100
31017 Assembler Directives
3102**********************
3103
3104All assembler directives have names that begin with a period ('.').  The
3105names are case insensitive for most targets, and usually written in
3106lower case.
3107
3108   This chapter discusses directives that are available regardless of
3109the target machine configuration for the GNU assembler.  Some machine
3110configurations provide additional directives.  *Note Machine
3111Dependencies::.
3112
3113* Menu:
3114
3115* Abort::                       '.abort'
3116* ABORT (COFF)::                '.ABORT'
3117
3118* Align::                       '.align [ABS-EXPR[, ABS-EXPR[, ABS-EXPR]]]'
3119* Altmacro::                    '.altmacro'
3120* Ascii::                       '.ascii "STRING"'...
3121* Asciz::                       '.asciz "STRING"'...
3122* Balign::                      '.balign [ABS-EXPR[, ABS-EXPR]]'
3123* Bundle directives::           '.bundle_align_mode ABS-EXPR', etc
3124* Byte::                        '.byte EXPRESSIONS'
3125* CFI directives::		'.cfi_startproc [simple]', '.cfi_endproc', etc.
3126* Comm::                        '.comm SYMBOL , LENGTH '
3127* Data::                        '.data SUBSECTION'
3128* Dc::                          '.dc[SIZE] EXPRESSIONS'
3129* Dcb::                         '.dcb[SIZE] NUMBER [,FILL]'
3130* Ds::                          '.ds[SIZE] NUMBER [,FILL]'
3131* Def::                         '.def NAME'
3132* Desc::                        '.desc SYMBOL, ABS-EXPRESSION'
3133* Dim::                         '.dim'
3134
3135* Double::                      '.double FLONUMS'
3136* Eject::                       '.eject'
3137* Else::                        '.else'
3138* Elseif::                      '.elseif'
3139* End::				'.end'
3140* Endef::                       '.endef'
3141
3142* Endfunc::                     '.endfunc'
3143* Endif::                       '.endif'
3144* Equ::                         '.equ SYMBOL, EXPRESSION'
3145* Equiv::                       '.equiv SYMBOL, EXPRESSION'
3146* Eqv::                         '.eqv SYMBOL, EXPRESSION'
3147* Err::				'.err'
3148* Error::			'.error STRING'
3149* Exitm::			'.exitm'
3150* Extern::                      '.extern'
3151* Fail::			'.fail'
3152* File::                        '.file'
3153* Fill::                        '.fill REPEAT , SIZE , VALUE'
3154* Float::                       '.float FLONUMS'
3155* Func::                        '.func'
3156* Global::                      '.global SYMBOL', '.globl SYMBOL'
3157* Gnu_attribute::               '.gnu_attribute TAG,VALUE'
3158* Hidden::                      '.hidden NAMES'
3159
3160* hword::                       '.hword EXPRESSIONS'
3161* Ident::                       '.ident'
3162* If::                          '.if ABSOLUTE EXPRESSION'
3163* Incbin::                      '.incbin "FILE"[,SKIP[,COUNT]]'
3164* Include::                     '.include "FILE"'
3165* Int::                         '.int EXPRESSIONS'
3166* Internal::                    '.internal NAMES'
3167
3168* Irp::				'.irp SYMBOL,VALUES'...
3169* Irpc::			'.irpc SYMBOL,VALUES'...
3170* Lcomm::                       '.lcomm SYMBOL , LENGTH'
3171* Lflags::                      '.lflags'
3172* Line::                        '.line LINE-NUMBER'
3173
3174* Linkonce::			'.linkonce [TYPE]'
3175* List::                        '.list'
3176* Ln::                          '.ln LINE-NUMBER'
3177* Loc::                         '.loc FILENO LINENO'
3178* Loc_mark_labels::             '.loc_mark_labels ENABLE'
3179* Local::                       '.local NAMES'
3180
3181* Long::                        '.long EXPRESSIONS'
3182
3183* Macro::			'.macro NAME ARGS'...
3184* MRI::				'.mri VAL'
3185* Noaltmacro::                  '.noaltmacro'
3186* Nolist::                      '.nolist'
3187* Nops::                        '.nops SIZE[, CONTROL]'
3188* Octa::                        '.octa BIGNUMS'
3189* Offset::			'.offset LOC'
3190* Org::                         '.org NEW-LC, FILL'
3191* P2align::                     '.p2align [ABS-EXPR[, ABS-EXPR[, ABS-EXPR]]]'
3192* PopSection::                  '.popsection'
3193* Previous::                    '.previous'
3194
3195* Print::			'.print STRING'
3196* Protected::                   '.protected NAMES'
3197
3198* Psize::                       '.psize LINES, COLUMNS'
3199* Purgem::			'.purgem NAME'
3200* PushSection::                 '.pushsection NAME'
3201
3202* Quad::                        '.quad BIGNUMS'
3203* Reloc::			'.reloc OFFSET, RELOC_NAME[, EXPRESSION]'
3204* Rept::			'.rept COUNT'
3205* Sbttl::                       '.sbttl "SUBHEADING"'
3206* Scl::                         '.scl CLASS'
3207* Section::                     '.section NAME[, FLAGS]'
3208
3209* Set::                         '.set SYMBOL, EXPRESSION'
3210* Short::                       '.short EXPRESSIONS'
3211* Single::                      '.single FLONUMS'
3212* Size::                        '.size [NAME , EXPRESSION]'
3213* Skip::                        '.skip SIZE [,FILL]'
3214
3215* Sleb128::			'.sleb128 EXPRESSIONS'
3216* Space::                       '.space SIZE [,FILL]'
3217* Stab::                        '.stabd, .stabn, .stabs'
3218
3219* String::                      '.string "STR"', '.string8 "STR"', '.string16 "STR"', '.string32 "STR"', '.string64 "STR"'
3220* Struct::			'.struct EXPRESSION'
3221* SubSection::                  '.subsection'
3222* Symver::                      '.symver NAME,NAME2@NODENAME'
3223
3224* Tag::                         '.tag STRUCTNAME'
3225
3226* Text::                        '.text SUBSECTION'
3227* Title::                       '.title "HEADING"'
3228* Type::                        '.type <INT | NAME , TYPE DESCRIPTION>'
3229
3230* Uleb128::                     '.uleb128 EXPRESSIONS'
3231* Val::                         '.val ADDR'
3232
3233* Version::                     '.version "STRING"'
3234* VTableEntry::                 '.vtable_entry TABLE, OFFSET'
3235* VTableInherit::               '.vtable_inherit CHILD, PARENT'
3236
3237* Warning::			'.warning STRING'
3238* Weak::                        '.weak NAMES'
3239* Weakref::                     '.weakref ALIAS, SYMBOL'
3240* Word::                        '.word EXPRESSIONS'
3241* Zero::                        '.zero SIZE'
3242* 2byte::                       '.2byte EXPRESSIONS'
3243* 4byte::                       '.4byte EXPRESSIONS'
3244* 8byte::                       '.8byte BIGNUMS'
3245* Deprecated::                  Deprecated Directives
3246
3247
3248File: as.info,  Node: Abort,  Next: ABORT (COFF),  Up: Pseudo Ops
3249
32507.1 '.abort'
3251============
3252
3253This directive stops the assembly immediately.  It is for compatibility
3254with other assemblers.  The original idea was that the assembly language
3255source would be piped into the assembler.  If the sender of the source
3256quit, it could use this directive tells 'as' to quit also.  One day
3257'.abort' will not be supported.
3258
3259
3260File: as.info,  Node: ABORT (COFF),  Next: Align,  Prev: Abort,  Up: Pseudo Ops
3261
32627.2 '.ABORT' (COFF)
3263===================
3264
3265When producing COFF output, 'as' accepts this directive as a synonym for
3266'.abort'.
3267
3268
3269File: as.info,  Node: Align,  Next: Altmacro,  Prev: ABORT (COFF),  Up: Pseudo Ops
3270
32717.3 '.align [ABS-EXPR[, ABS-EXPR[, ABS-EXPR]]]'
3272===============================================
3273
3274Pad the location counter (in the current subsection) to a particular
3275storage boundary.  The first expression (which must be absolute) is the
3276alignment required, as described below.  If this expression is omitted
3277then a default value of 0 is used, effectively disabling alignment
3278requirements.
3279
3280   The second expression (also absolute) gives the fill value to be
3281stored in the padding bytes.  It (and the comma) may be omitted.  If it
3282is omitted, the padding bytes are normally zero.  However, on most
3283systems, if the section is marked as containing code and the fill value
3284is omitted, the space is filled with no-op instructions.
3285
3286   The third expression is also absolute, and is also optional.  If it
3287is present, it is the maximum number of bytes that should be skipped by
3288this alignment directive.  If doing the alignment would require skipping
3289more bytes than the specified maximum, then the alignment is not done at
3290all.  You can omit the fill value (the second argument) entirely by
3291simply using two commas after the required alignment; this can be useful
3292if you want the alignment to be filled with no-op instructions when
3293appropriate.
3294
3295   The way the required alignment is specified varies from system to
3296system.  For the arc, hppa, i386 using ELF, iq2000, m68k, or1k, s390,
3297sparc, tic4x and xtensa, the first expression is the alignment request
3298in bytes.  For example '.align 8' advances the location counter until it
3299is a multiple of 8.  If the location counter is already a multiple of 8,
3300no change is needed.  For the tic54x, the first expression is the
3301alignment request in words.
3302
3303   For other systems, including ppc, i386 using a.out format, arm and
3304strongarm, it is the number of low-order zero bits the location counter
3305must have after advancement.  For example '.align 3' advances the
3306location counter until it is a multiple of 8.  If the location counter
3307is already a multiple of 8, no change is needed.
3308
3309   This inconsistency is due to the different behaviors of the various
3310native assemblers for these systems which GAS must emulate.  GAS also
3311provides '.balign' and '.p2align' directives, described later, which
3312have a consistent behavior across all architectures (but are specific to
3313GAS).
3314
3315
3316File: as.info,  Node: Altmacro,  Next: Ascii,  Prev: Align,  Up: Pseudo Ops
3317
33187.4 '.altmacro'
3319===============
3320
3321Enable alternate macro mode, enabling:
3322
3323'LOCAL NAME [ , ... ]'
3324     One additional directive, 'LOCAL', is available.  It is used to
3325     generate a string replacement for each of the NAME arguments, and
3326     replace any instances of NAME in each macro expansion.  The
3327     replacement string is unique in the assembly, and different for
3328     each separate macro expansion.  'LOCAL' allows you to write macros
3329     that define symbols, without fear of conflict between separate
3330     macro expansions.
3331
3332'String delimiters'
3333     You can write strings delimited in these other ways besides
3334     '"STRING"':
3335
3336     ''STRING''
3337          You can delimit strings with single-quote characters.
3338
3339     '<STRING>'
3340          You can delimit strings with matching angle brackets.
3341
3342'single-character string escape'
3343     To include any single character literally in a string (even if the
3344     character would otherwise have some special meaning), you can
3345     prefix the character with '!' (an exclamation mark).  For example,
3346     you can write '<4.3 !> 5.4!!>' to get the literal text '4.3 >
3347     5.4!'.
3348
3349'Expression results as strings'
3350     You can write '%EXPR' to evaluate the expression EXPR and use the
3351     result as a string.
3352
3353
3354File: as.info,  Node: Ascii,  Next: Asciz,  Prev: Altmacro,  Up: Pseudo Ops
3355
33567.5 '.ascii "STRING"'...
3357========================
3358
3359'.ascii' expects zero or more string literals (*note Strings::)
3360separated by commas.  It assembles each string (with no automatic
3361trailing zero byte) into consecutive addresses.
3362
3363
3364File: as.info,  Node: Asciz,  Next: Balign,  Prev: Ascii,  Up: Pseudo Ops
3365
33667.6 '.asciz "STRING"'...
3367========================
3368
3369'.asciz' is just like '.ascii', but each string is followed by a zero
3370byte.  The "z" in '.asciz' stands for "zero".
3371
3372
3373File: as.info,  Node: Balign,  Next: Bundle directives,  Prev: Asciz,  Up: Pseudo Ops
3374
33757.7 '.balign[wl] [ABS-EXPR[, ABS-EXPR[, ABS-EXPR]]]'
3376====================================================
3377
3378Pad the location counter (in the current subsection) to a particular
3379storage boundary.  The first expression (which must be absolute) is the
3380alignment request in bytes.  For example '.balign 8' advances the
3381location counter until it is a multiple of 8.  If the location counter
3382is already a multiple of 8, no change is needed.  If the expression is
3383omitted then a default value of 0 is used, effectively disabling
3384alignment requirements.
3385
3386   The second expression (also absolute) gives the fill value to be
3387stored in the padding bytes.  It (and the comma) may be omitted.  If it
3388is omitted, the padding bytes are normally zero.  However, on most
3389systems, if the section is marked as containing code and the fill value
3390is omitted, the space is filled with no-op instructions.
3391
3392   The third expression is also absolute, and is also optional.  If it
3393is present, it is the maximum number of bytes that should be skipped by
3394this alignment directive.  If doing the alignment would require skipping
3395more bytes than the specified maximum, then the alignment is not done at
3396all.  You can omit the fill value (the second argument) entirely by
3397simply using two commas after the required alignment; this can be useful
3398if you want the alignment to be filled with no-op instructions when
3399appropriate.
3400
3401   The '.balignw' and '.balignl' directives are variants of the
3402'.balign' directive.  The '.balignw' directive treats the fill pattern
3403as a two byte word value.  The '.balignl' directives treats the fill
3404pattern as a four byte longword value.  For example, '.balignw 4,0x368d'
3405will align to a multiple of 4.  If it skips two bytes, they will be
3406filled in with the value 0x368d (the exact placement of the bytes
3407depends upon the endianness of the processor).  If it skips 1 or 3
3408bytes, the fill value is undefined.
3409
3410
3411File: as.info,  Node: Bundle directives,  Next: Byte,  Prev: Balign,  Up: Pseudo Ops
3412
34137.8 Bundle directives
3414=====================
3415
34167.8.1 '.bundle_align_mode ABS-EXPR'
3417-----------------------------------
3418
3419'.bundle_align_mode' enables or disables "aligned instruction bundle"
3420mode.  In this mode, sequences of adjacent instructions are grouped into
3421fixed-sized "bundles".  If the argument is zero, this mode is disabled
3422(which is the default state).  If the argument it not zero, it gives the
3423size of an instruction bundle as a power of two (as for the '.p2align'
3424directive, *note P2align::).
3425
3426   For some targets, it's an ABI requirement that no instruction may
3427span a certain aligned boundary.  A "bundle" is simply a sequence of
3428instructions that starts on an aligned boundary.  For example, if
3429ABS-EXPR is '5' then the bundle size is 32, so each aligned chunk of 32
3430bytes is a bundle.  When aligned instruction bundle mode is in effect,
3431no single instruction may span a boundary between bundles.  If an
3432instruction would start too close to the end of a bundle for the length
3433of that particular instruction to fit within the bundle, then the space
3434at the end of that bundle is filled with no-op instructions so the
3435instruction starts in the next bundle.  As a corollary, it's an error if
3436any single instruction's encoding is longer than the bundle size.
3437
34387.8.2 '.bundle_lock' and '.bundle_unlock'
3439-----------------------------------------
3440
3441The '.bundle_lock' and directive '.bundle_unlock' directives allow
3442explicit control over instruction bundle padding.  These directives are
3443only valid when '.bundle_align_mode' has been used to enable aligned
3444instruction bundle mode.  It's an error if they appear when
3445'.bundle_align_mode' has not been used at all, or when the last
3446directive was '.bundle_align_mode 0'.
3447
3448   For some targets, it's an ABI requirement that certain instructions
3449may appear only as part of specified permissible sequences of multiple
3450instructions, all within the same bundle.  A pair of '.bundle_lock' and
3451'.bundle_unlock' directives define a "bundle-locked" instruction
3452sequence.  For purposes of aligned instruction bundle mode, a sequence
3453starting with '.bundle_lock' and ending with '.bundle_unlock' is treated
3454as a single instruction.  That is, the entire sequence must fit into a
3455single bundle and may not span a bundle boundary.  If necessary, no-op
3456instructions will be inserted before the first instruction of the
3457sequence so that the whole sequence starts on an aligned bundle
3458boundary.  It's an error if the sequence is longer than the bundle size.
3459
3460   For convenience when using '.bundle_lock' and '.bundle_unlock' inside
3461assembler macros (*note Macro::), bundle-locked sequences may be nested.
3462That is, a second '.bundle_lock' directive before the next
3463'.bundle_unlock' directive has no effect except that it must be matched
3464by another closing '.bundle_unlock' so that there is the same number of
3465'.bundle_lock' and '.bundle_unlock' directives.
3466
3467
3468File: as.info,  Node: Byte,  Next: CFI directives,  Prev: Bundle directives,  Up: Pseudo Ops
3469
34707.9 '.byte EXPRESSIONS'
3471=======================
3472
3473'.byte' expects zero or more expressions, separated by commas.  Each
3474expression is assembled into the next byte.
3475
3476
3477File: as.info,  Node: CFI directives,  Next: Comm,  Prev: Byte,  Up: Pseudo Ops
3478
34797.10 CFI directives
3480===================
3481
34827.10.1 '.cfi_sections SECTION_LIST'
3483-----------------------------------
3484
3485'.cfi_sections' may be used to specify whether CFI directives should
3486emit '.eh_frame' section and/or '.debug_frame' section.  If SECTION_LIST
3487is '.eh_frame', '.eh_frame' is emitted, if SECTION_LIST is
3488'.debug_frame', '.debug_frame' is emitted.  To emit both use '.eh_frame,
3489.debug_frame'.  The default if this directive is not used is
3490'.cfi_sections .eh_frame'.
3491
3492   On targets that support compact unwinding tables these can be
3493generated by specifying '.eh_frame_entry' instead of '.eh_frame'.
3494
3495   Some targets may support an additional name, such as '.c6xabi.exidx'
3496which is used by the target.
3497
3498   The '.cfi_sections' directive can be repeated, with the same or
3499different arguments, provided that CFI generation has not yet started.
3500Once CFI generation has started however the section list is fixed and
3501any attempts to redefine it will result in an error.
3502
35037.10.2 '.cfi_startproc [simple]'
3504--------------------------------
3505
3506'.cfi_startproc' is used at the beginning of each function that should
3507have an entry in '.eh_frame'.  It initializes some internal data
3508structures.  Don't forget to close the function by '.cfi_endproc'.
3509
3510   Unless '.cfi_startproc' is used along with parameter 'simple' it also
3511emits some architecture dependent initial CFI instructions.
3512
35137.10.3 '.cfi_endproc'
3514---------------------
3515
3516'.cfi_endproc' is used at the end of a function where it closes its
3517unwind entry previously opened by '.cfi_startproc', and emits it to
3518'.eh_frame'.
3519
35207.10.4 '.cfi_personality ENCODING [, EXP]'
3521------------------------------------------
3522
3523'.cfi_personality' defines personality routine and its encoding.
3524ENCODING must be a constant determining how the personality should be
3525encoded.  If it is 255 ('DW_EH_PE_omit'), second argument is not
3526present, otherwise second argument should be a constant or a symbol
3527name.  When using indirect encodings, the symbol provided should be the
3528location where personality can be loaded from, not the personality
3529routine itself.  The default after '.cfi_startproc' is '.cfi_personality
35300xff', no personality routine.
3531
35327.10.5 '.cfi_personality_id ID'
3533-------------------------------
3534
3535'cfi_personality_id' defines a personality routine by its index as
3536defined in a compact unwinding format.  Only valid when generating
3537compact EH frames (i.e.  with '.cfi_sections eh_frame_entry'.
3538
35397.10.6 '.cfi_fde_data [OPCODE1 [, ...]]'
3540----------------------------------------
3541
3542'cfi_fde_data' is used to describe the compact unwind opcodes to be used
3543for the current function.  These are emitted inline in the
3544'.eh_frame_entry' section if small enough and there is no LSDA, or in
3545the '.gnu.extab' section otherwise.  Only valid when generating compact
3546EH frames (i.e.  with '.cfi_sections eh_frame_entry'.
3547
35487.10.7 '.cfi_lsda ENCODING [, EXP]'
3549-----------------------------------
3550
3551'.cfi_lsda' defines LSDA and its encoding.  ENCODING must be a constant
3552determining how the LSDA should be encoded.  If it is 255
3553('DW_EH_PE_omit'), the second argument is not present, otherwise the
3554second argument should be a constant or a symbol name.  The default
3555after '.cfi_startproc' is '.cfi_lsda 0xff', meaning that no LSDA is
3556present.
3557
35587.10.8 '.cfi_inline_lsda' [ALIGN]
3559---------------------------------
3560
3561'.cfi_inline_lsda' marks the start of a LSDA data section and switches
3562to the corresponding '.gnu.extab' section.  Must be preceded by a CFI
3563block containing a '.cfi_lsda' directive.  Only valid when generating
3564compact EH frames (i.e.  with '.cfi_sections eh_frame_entry'.
3565
3566   The table header and unwinding opcodes will be generated at this
3567point, so that they are immediately followed by the LSDA data.  The
3568symbol referenced by the '.cfi_lsda' directive should still be defined
3569in case a fallback FDE based encoding is used.  The LSDA data is
3570terminated by a section directive.
3571
3572   The optional ALIGN argument specifies the alignment required.  The
3573alignment is specified as a power of two, as with the '.p2align'
3574directive.
3575
35767.10.9 '.cfi_def_cfa REGISTER, OFFSET'
3577--------------------------------------
3578
3579'.cfi_def_cfa' defines a rule for computing CFA as: take address from
3580REGISTER and add OFFSET to it.
3581
35827.10.10 '.cfi_def_cfa_register REGISTER'
3583----------------------------------------
3584
3585'.cfi_def_cfa_register' modifies a rule for computing CFA. From now on
3586REGISTER will be used instead of the old one.  Offset remains the same.
3587
35887.10.11 '.cfi_def_cfa_offset OFFSET'
3589------------------------------------
3590
3591'.cfi_def_cfa_offset' modifies a rule for computing CFA. Register
3592remains the same, but OFFSET is new.  Note that it is the absolute
3593offset that will be added to a defined register to compute CFA address.
3594
35957.10.12 '.cfi_adjust_cfa_offset OFFSET'
3596---------------------------------------
3597
3598Same as '.cfi_def_cfa_offset' but OFFSET is a relative value that is
3599added/subtracted from the previous offset.
3600
36017.10.13 '.cfi_offset REGISTER, OFFSET'
3602--------------------------------------
3603
3604Previous value of REGISTER is saved at offset OFFSET from CFA.
3605
36067.10.14 '.cfi_val_offset REGISTER, OFFSET'
3607------------------------------------------
3608
3609Previous value of REGISTER is CFA + OFFSET.
3610
36117.10.15 '.cfi_rel_offset REGISTER, OFFSET'
3612------------------------------------------
3613
3614Previous value of REGISTER is saved at offset OFFSET from the current
3615CFA register.  This is transformed to '.cfi_offset' using the known
3616displacement of the CFA register from the CFA. This is often easier to
3617use, because the number will match the code it's annotating.
3618
36197.10.16 '.cfi_register REGISTER1, REGISTER2'
3620--------------------------------------------
3621
3622Previous value of REGISTER1 is saved in register REGISTER2.
3623
36247.10.17 '.cfi_restore REGISTER'
3625-------------------------------
3626
3627'.cfi_restore' says that the rule for REGISTER is now the same as it was
3628at the beginning of the function, after all initial instruction added by
3629'.cfi_startproc' were executed.
3630
36317.10.18 '.cfi_undefined REGISTER'
3632---------------------------------
3633
3634From now on the previous value of REGISTER can't be restored anymore.
3635
36367.10.19 '.cfi_same_value REGISTER'
3637----------------------------------
3638
3639Current value of REGISTER is the same like in the previous frame, i.e.
3640no restoration needed.
3641
36427.10.20 '.cfi_remember_state' and '.cfi_restore_state'
3643------------------------------------------------------
3644
3645'.cfi_remember_state' pushes the set of rules for every register onto an
3646implicit stack, while '.cfi_restore_state' pops them off the stack and
3647places them in the current row.  This is useful for situations where you
3648have multiple '.cfi_*' directives that need to be undone due to the
3649control flow of the program.  For example, we could have something like
3650this (assuming the CFA is the value of 'rbp'):
3651
3652             je label
3653             popq %rbx
3654             .cfi_restore %rbx
3655             popq %r12
3656             .cfi_restore %r12
3657             popq %rbp
3658             .cfi_restore %rbp
3659             .cfi_def_cfa %rsp, 8
3660             ret
3661     label:
3662             /* Do something else */
3663
3664   Here, we want the '.cfi' directives to affect only the rows
3665corresponding to the instructions before 'label'.  This means we'd have
3666to add multiple '.cfi' directives after 'label' to recreate the original
3667save locations of the registers, as well as setting the CFA back to the
3668value of 'rbp'.  This would be clumsy, and result in a larger binary
3669size.  Instead, we can write:
3670
3671             je label
3672             popq %rbx
3673             .cfi_remember_state
3674             .cfi_restore %rbx
3675             popq %r12
3676             .cfi_restore %r12
3677             popq %rbp
3678             .cfi_restore %rbp
3679             .cfi_def_cfa %rsp, 8
3680             ret
3681     label:
3682             .cfi_restore_state
3683             /* Do something else */
3684
3685   That way, the rules for the instructions after 'label' will be the
3686same as before the first '.cfi_restore' without having to use multiple
3687'.cfi' directives.
3688
36897.10.21 '.cfi_return_column REGISTER'
3690-------------------------------------
3691
3692Change return column REGISTER, i.e.  the return address is either
3693directly in REGISTER or can be accessed by rules for REGISTER.
3694
36957.10.22 '.cfi_signal_frame'
3696---------------------------
3697
3698Mark current function as signal trampoline.
3699
37007.10.23 '.cfi_window_save'
3701--------------------------
3702
3703SPARC register window has been saved.
3704
37057.10.24 '.cfi_escape' EXPRESSION[, ...]
3706---------------------------------------
3707
3708Allows the user to add arbitrary bytes to the unwind info.  One might
3709use this to add OS-specific CFI opcodes, or generic CFI opcodes that GAS
3710does not yet support.
3711
37127.10.25 '.cfi_val_encoded_addr REGISTER, ENCODING, LABEL'
3713---------------------------------------------------------
3714
3715The current value of REGISTER is LABEL.  The value of LABEL will be
3716encoded in the output file according to ENCODING; see the description of
3717'.cfi_personality' for details on this encoding.
3718
3719   The usefulness of equating a register to a fixed label is probably
3720limited to the return address register.  Here, it can be useful to mark
3721a code segment that has only one return address which is reached by a
3722direct branch and no copy of the return address exists in memory or
3723another register.
3724
3725
3726File: as.info,  Node: Comm,  Next: Data,  Prev: CFI directives,  Up: Pseudo Ops
3727
37287.11 '.comm SYMBOL , LENGTH '
3729=============================
3730
3731'.comm' declares a common symbol named SYMBOL.  When linking, a common
3732symbol in one object file may be merged with a defined or common symbol
3733of the same name in another object file.  If 'ld' does not see a
3734definition for the symbol-just one or more common symbols-then it will
3735allocate LENGTH bytes of uninitialized memory.  LENGTH must be an
3736absolute expression.  If 'ld' sees multiple common symbols with the same
3737name, and they do not all have the same size, it will allocate space
3738using the largest size.
3739
3740   When using ELF or (as a GNU extension) PE, the '.comm' directive
3741takes an optional third argument.  This is the desired alignment of the
3742symbol, specified for ELF as a byte boundary (for example, an alignment
3743of 16 means that the least significant 4 bits of the address should be
3744zero), and for PE as a power of two (for example, an alignment of 5
3745means aligned to a 32-byte boundary).  The alignment must be an absolute
3746expression, and it must be a power of two.  If 'ld' allocates
3747uninitialized memory for the common symbol, it will use the alignment
3748when placing the symbol.  If no alignment is specified, 'as' will set
3749the alignment to the largest power of two less than or equal to the size
3750of the symbol, up to a maximum of 16 on ELF, or the default section
3751alignment of 4 on PE(1).
3752
3753   The syntax for '.comm' differs slightly on the HPPA. The syntax is
3754'SYMBOL .comm, LENGTH'; SYMBOL is optional.
3755
3756   ---------- Footnotes ----------
3757
3758   (1) This is not the same as the executable image file alignment
3759controlled by 'ld''s '--section-alignment' option; image file sections
3760in PE are aligned to multiples of 4096, which is far too large an
3761alignment for ordinary variables.  It is rather the default alignment
3762for (non-debug) sections within object ('*.o') files, which are less
3763strictly aligned.
3764
3765
3766File: as.info,  Node: Data,  Next: Dc,  Prev: Comm,  Up: Pseudo Ops
3767
37687.12 '.data SUBSECTION'
3769=======================
3770
3771'.data' tells 'as' to assemble the following statements onto the end of
3772the data subsection numbered SUBSECTION (which is an absolute
3773expression).  If SUBSECTION is omitted, it defaults to zero.
3774
3775
3776File: as.info,  Node: Dc,  Next: Dcb,  Prev: Data,  Up: Pseudo Ops
3777
37787.13 '.dc[SIZE] EXPRESSIONS'
3779============================
3780
3781The '.dc' directive expects zero or more EXPRESSIONS separated by
3782commas.  These expressions are evaluated and their values inserted into
3783the current section.  The size of the emitted value depends upon the
3784suffix to the '.dc' directive:
3785
3786''.a''
3787     Emits N-bit values, where N is the size of an address on the target
3788     system.
3789''.b''
3790     Emits 8-bit values.
3791''.d''
3792     Emits double precision floating-point values.
3793''.l''
3794     Emits 32-bit values.
3795''.s''
3796     Emits single precision floating-point values.
3797''.w''
3798     Emits 16-bit values.  Note - this is true even on targets where the
3799     '.word' directive would emit 32-bit values.
3800''.x''
3801     Emits long double precision floating-point values.
3802
3803   If no suffix is used then '.w' is assumed.
3804
3805   The byte ordering is target dependent, as is the size and format of
3806floating point values.
3807
3808
3809File: as.info,  Node: Dcb,  Next: Ds,  Prev: Dc,  Up: Pseudo Ops
3810
38117.14 '.dcb[SIZE] NUMBER [,FILL]'
3812================================
3813
3814This directive emits NUMBER copies of FILL, each of SIZE bytes.  Both
3815NUMBER and FILL are absolute expressions.  If the comma and FILL are
3816omitted, FILL is assumed to be zero.  The SIZE suffix, if present, must
3817be one of:
3818
3819''.b''
3820     Emits single byte values.
3821''.d''
3822     Emits double-precision floating point values.
3823''.l''
3824     Emits 4-byte values.
3825''.s''
3826     Emits single-precision floating point values.
3827''.w''
3828     Emits 2-byte values.
3829''.x''
3830     Emits long double-precision floating point values.
3831
3832   If the SIZE suffix is omitted then '.w' is assumed.
3833
3834   The byte ordering is target dependent, as is the size and format of
3835floating point values.
3836
3837
3838File: as.info,  Node: Ds,  Next: Def,  Prev: Dcb,  Up: Pseudo Ops
3839
38407.15 '.ds[SIZE] NUMBER [,FILL]'
3841===============================
3842
3843This directive emits NUMBER copies of FILL, each of SIZE bytes.  Both
3844NUMBER and FILL are absolute expressions.  If the comma and FILL are
3845omitted, FILL is assumed to be zero.  The SIZE suffix, if present, must
3846be one of:
3847
3848''.b''
3849     Emits single byte values.
3850''.d''
3851     Emits 8-byte values.
3852''.l''
3853     Emits 4-byte values.
3854''.p''
3855     Emits 12-byte values.
3856''.s''
3857     Emits 4-byte values.
3858''.w''
3859     Emits 2-byte values.
3860''.x''
3861     Emits 12-byte values.
3862
3863   Note - unlike the '.dcb' directive the '.d', '.s' and '.x' suffixes
3864do not indicate that floating-point values are to be inserted.
3865
3866   If the SIZE suffix is omitted then '.w' is assumed.
3867
3868   The byte ordering is target dependent.
3869
3870
3871File: as.info,  Node: Def,  Next: Desc,  Prev: Ds,  Up: Pseudo Ops
3872
38737.16 '.def NAME'
3874================
3875
3876Begin defining debugging information for a symbol NAME; the definition
3877extends until the '.endef' directive is encountered.
3878
3879
3880File: as.info,  Node: Desc,  Next: Dim,  Prev: Def,  Up: Pseudo Ops
3881
38827.17 '.desc SYMBOL, ABS-EXPRESSION'
3883===================================
3884
3885This directive sets the descriptor of the symbol (*note Symbol
3886Attributes::) to the low 16 bits of an absolute expression.
3887
3888   The '.desc' directive is not available when 'as' is configured for
3889COFF output; it is only for 'a.out' or 'b.out' object format.  For the
3890sake of compatibility, 'as' accepts it, but produces no output, when
3891configured for COFF.
3892
3893
3894File: as.info,  Node: Dim,  Next: Double,  Prev: Desc,  Up: Pseudo Ops
3895
38967.18 '.dim'
3897===========
3898
3899This directive is generated by compilers to include auxiliary debugging
3900information in the symbol table.  It is only permitted inside
3901'.def'/'.endef' pairs.
3902
3903
3904File: as.info,  Node: Double,  Next: Eject,  Prev: Dim,  Up: Pseudo Ops
3905
39067.19 '.double FLONUMS'
3907======================
3908
3909'.double' expects zero or more flonums, separated by commas.  It
3910assembles floating point numbers.  The exact kind of floating point
3911numbers emitted depends on how 'as' is configured.  *Note Machine
3912Dependencies::.
3913
3914
3915File: as.info,  Node: Eject,  Next: Else,  Prev: Double,  Up: Pseudo Ops
3916
39177.20 '.eject'
3918=============
3919
3920Force a page break at this point, when generating assembly listings.
3921
3922
3923File: as.info,  Node: Else,  Next: Elseif,  Prev: Eject,  Up: Pseudo Ops
3924
39257.21 '.else'
3926============
3927
3928'.else' is part of the 'as' support for conditional assembly; see *note
3929'.if': If.  It marks the beginning of a section of code to be assembled
3930if the condition for the preceding '.if' was false.
3931
3932
3933File: as.info,  Node: Elseif,  Next: End,  Prev: Else,  Up: Pseudo Ops
3934
39357.22 '.elseif'
3936==============
3937
3938'.elseif' is part of the 'as' support for conditional assembly; see
3939*note '.if': If.  It is shorthand for beginning a new '.if' block that
3940would otherwise fill the entire '.else' section.
3941
3942
3943File: as.info,  Node: End,  Next: Endef,  Prev: Elseif,  Up: Pseudo Ops
3944
39457.23 '.end'
3946===========
3947
3948'.end' marks the end of the assembly file.  'as' does not process
3949anything in the file past the '.end' directive.
3950
3951
3952File: as.info,  Node: Endef,  Next: Endfunc,  Prev: End,  Up: Pseudo Ops
3953
39547.24 '.endef'
3955=============
3956
3957This directive flags the end of a symbol definition begun with '.def'.
3958
3959
3960File: as.info,  Node: Endfunc,  Next: Endif,  Prev: Endef,  Up: Pseudo Ops
3961
39627.25 '.endfunc'
3963===============
3964
3965'.endfunc' marks the end of a function specified with '.func'.
3966
3967
3968File: as.info,  Node: Endif,  Next: Equ,  Prev: Endfunc,  Up: Pseudo Ops
3969
39707.26 '.endif'
3971=============
3972
3973'.endif' is part of the 'as' support for conditional assembly; it marks
3974the end of a block of code that is only assembled conditionally.  *Note
3975'.if': If.
3976
3977
3978File: as.info,  Node: Equ,  Next: Equiv,  Prev: Endif,  Up: Pseudo Ops
3979
39807.27 '.equ SYMBOL, EXPRESSION'
3981==============================
3982
3983This directive sets the value of SYMBOL to EXPRESSION.  It is synonymous
3984with '.set'; see *note '.set': Set.
3985
3986   The syntax for 'equ' on the HPPA is 'SYMBOL .equ EXPRESSION'.
3987
3988   The syntax for 'equ' on the Z80 is 'SYMBOL equ EXPRESSION'.  On the
3989Z80 it is an error if SYMBOL is already defined, but the symbol is not
3990protected from later redefinition.  Compare *note Equiv::.
3991
3992
3993File: as.info,  Node: Equiv,  Next: Eqv,  Prev: Equ,  Up: Pseudo Ops
3994
39957.28 '.equiv SYMBOL, EXPRESSION'
3996================================
3997
3998The '.equiv' directive is like '.equ' and '.set', except that the
3999assembler will signal an error if SYMBOL is already defined.  Note a
4000symbol which has been referenced but not actually defined is considered
4001to be undefined.
4002
4003   Except for the contents of the error message, this is roughly
4004equivalent to
4005     .ifdef SYM
4006     .err
4007     .endif
4008     .equ SYM,VAL
4009   plus it protects the symbol from later redefinition.
4010
4011
4012File: as.info,  Node: Eqv,  Next: Err,  Prev: Equiv,  Up: Pseudo Ops
4013
40147.29 '.eqv SYMBOL, EXPRESSION'
4015==============================
4016
4017The '.eqv' directive is like '.equiv', but no attempt is made to
4018evaluate the expression or any part of it immediately.  Instead each
4019time the resulting symbol is used in an expression, a snapshot of its
4020current value is taken.
4021
4022
4023File: as.info,  Node: Err,  Next: Error,  Prev: Eqv,  Up: Pseudo Ops
4024
40257.30 '.err'
4026===========
4027
4028If 'as' assembles a '.err' directive, it will print an error message
4029and, unless the '-Z' option was used, it will not generate an object
4030file.  This can be used to signal an error in conditionally compiled
4031code.
4032
4033
4034File: as.info,  Node: Error,  Next: Exitm,  Prev: Err,  Up: Pseudo Ops
4035
40367.31 '.error "STRING"'
4037======================
4038
4039Similarly to '.err', this directive emits an error, but you can specify
4040a string that will be emitted as the error message.  If you don't
4041specify the message, it defaults to '".error directive invoked in source
4042file"'.  *Note Error and Warning Messages: Errors.
4043
4044      .error "This code has not been assembled and tested."
4045
4046
4047File: as.info,  Node: Exitm,  Next: Extern,  Prev: Error,  Up: Pseudo Ops
4048
40497.32 '.exitm'
4050=============
4051
4052Exit early from the current macro definition.  *Note Macro::.
4053
4054
4055File: as.info,  Node: Extern,  Next: Fail,  Prev: Exitm,  Up: Pseudo Ops
4056
40577.33 '.extern'
4058==============
4059
4060'.extern' is accepted in the source program--for compatibility with
4061other assemblers--but it is ignored.  'as' treats all undefined symbols
4062as external.
4063
4064
4065File: as.info,  Node: Fail,  Next: File,  Prev: Extern,  Up: Pseudo Ops
4066
40677.34 '.fail EXPRESSION'
4068=======================
4069
4070Generates an error or a warning.  If the value of the EXPRESSION is 500
4071or more, 'as' will print a warning message.  If the value is less than
4072500, 'as' will print an error message.  The message will include the
4073value of EXPRESSION.  This can occasionally be useful inside complex
4074nested macros or conditional assembly.
4075
4076
4077File: as.info,  Node: File,  Next: Fill,  Prev: Fail,  Up: Pseudo Ops
4078
40797.35 '.file'
4080============
4081
4082There are two different versions of the '.file' directive.  Targets that
4083support DWARF2 line number information use the DWARF2 version of
4084'.file'.  Other targets use the default version.
4085
4086Default Version
4087---------------
4088
4089This version of the '.file' directive tells 'as' that we are about to
4090start a new logical file.  The syntax is:
4091
4092     .file STRING
4093
4094   STRING is the new file name.  In general, the filename is recognized
4095whether or not it is surrounded by quotes '"'; but if you wish to
4096specify an empty file name, you must give the quotes-'""'.  This
4097statement may go away in future: it is only recognized to be compatible
4098with old 'as' programs.
4099
4100DWARF2 Version
4101--------------
4102
4103When emitting DWARF2 line number information, '.file' assigns filenames
4104to the '.debug_line' file name table.  The syntax is:
4105
4106     .file FILENO FILENAME
4107
4108   The FILENO operand should be a unique positive integer to use as the
4109index of the entry in the table.  The FILENAME operand is a C string
4110literal.
4111
4112   The detail of filename indices is exposed to the user because the
4113filename table is shared with the '.debug_info' section of the DWARF2
4114debugging information, and thus the user must know the exact indices
4115that table entries will have.
4116
4117
4118File: as.info,  Node: Fill,  Next: Float,  Prev: File,  Up: Pseudo Ops
4119
41207.36 '.fill REPEAT , SIZE , VALUE'
4121==================================
4122
4123REPEAT, SIZE and VALUE are absolute expressions.  This emits REPEAT
4124copies of SIZE bytes.  REPEAT may be zero or more.  SIZE may be zero or
4125more, but if it is more than 8, then it is deemed to have the value 8,
4126compatible with other people's assemblers.  The contents of each REPEAT
4127bytes is taken from an 8-byte number.  The highest order 4 bytes are
4128zero.  The lowest order 4 bytes are VALUE rendered in the byte-order of
4129an integer on the computer 'as' is assembling for.  Each SIZE bytes in a
4130repetition is taken from the lowest order SIZE bytes of this number.
4131Again, this bizarre behavior is compatible with other people's
4132assemblers.
4133
4134   SIZE and VALUE are optional.  If the second comma and VALUE are
4135absent, VALUE is assumed zero.  If the first comma and following tokens
4136are absent, SIZE is assumed to be 1.
4137
4138
4139File: as.info,  Node: Float,  Next: Func,  Prev: Fill,  Up: Pseudo Ops
4140
41417.37 '.float FLONUMS'
4142=====================
4143
4144This directive assembles zero or more flonums, separated by commas.  It
4145has the same effect as '.single'.  The exact kind of floating point
4146numbers emitted depends on how 'as' is configured.  *Note Machine
4147Dependencies::.
4148
4149
4150File: as.info,  Node: Func,  Next: Global,  Prev: Float,  Up: Pseudo Ops
4151
41527.38 '.func NAME[,LABEL]'
4153=========================
4154
4155'.func' emits debugging information to denote function NAME, and is
4156ignored unless the file is assembled with debugging enabled.  Only
4157'--gstabs[+]' is currently supported.  LABEL is the entry point of the
4158function and if omitted NAME prepended with the 'leading char' is used.
4159'leading char' is usually '_' or nothing, depending on the target.  All
4160functions are currently defined to have 'void' return type.  The
4161function must be terminated with '.endfunc'.
4162
4163
4164File: as.info,  Node: Global,  Next: Gnu_attribute,  Prev: Func,  Up: Pseudo Ops
4165
41667.39 '.global SYMBOL', '.globl SYMBOL'
4167======================================
4168
4169'.global' makes the symbol visible to 'ld'.  If you define SYMBOL in
4170your partial program, its value is made available to other partial
4171programs that are linked with it.  Otherwise, SYMBOL takes its
4172attributes from a symbol of the same name from another file linked into
4173the same program.
4174
4175   Both spellings ('.globl' and '.global') are accepted, for
4176compatibility with other assemblers.
4177
4178   On the HPPA, '.global' is not always enough to make it accessible to
4179other partial programs.  You may need the HPPA-only '.EXPORT' directive
4180as well.  *Note HPPA Assembler Directives: HPPA Directives.
4181
4182
4183File: as.info,  Node: Gnu_attribute,  Next: Hidden,  Prev: Global,  Up: Pseudo Ops
4184
41857.40 '.gnu_attribute TAG,VALUE'
4186===============================
4187
4188Record a GNU object attribute for this file.  *Note Object Attributes::.
4189
4190
4191File: as.info,  Node: Hidden,  Next: hword,  Prev: Gnu_attribute,  Up: Pseudo Ops
4192
41937.41 '.hidden NAMES'
4194====================
4195
4196This is one of the ELF visibility directives.  The other two are
4197'.internal' (*note '.internal': Internal.) and '.protected' (*note
4198'.protected': Protected.).
4199
4200   This directive overrides the named symbols default visibility (which
4201is set by their binding: local, global or weak).  The directive sets the
4202visibility to 'hidden' which means that the symbols are not visible to
4203other components.  Such symbols are always considered to be 'protected'
4204as well.
4205
4206
4207File: as.info,  Node: hword,  Next: Ident,  Prev: Hidden,  Up: Pseudo Ops
4208
42097.42 '.hword EXPRESSIONS'
4210=========================
4211
4212This expects zero or more EXPRESSIONS, and emits a 16 bit number for
4213each.
4214
4215   This directive is a synonym for '.short'; depending on the target
4216architecture, it may also be a synonym for '.word'.
4217
4218
4219File: as.info,  Node: Ident,  Next: If,  Prev: hword,  Up: Pseudo Ops
4220
42217.43 '.ident'
4222=============
4223
4224This directive is used by some assemblers to place tags in object files.
4225The behavior of this directive varies depending on the target.  When
4226using the a.out object file format, 'as' simply accepts the directive
4227for source-file compatibility with existing assemblers, but does not
4228emit anything for it.  When using COFF, comments are emitted to the
4229'.comment' or '.rdata' section, depending on the target.  When using
4230ELF, comments are emitted to the '.comment' section.
4231
4232
4233File: as.info,  Node: If,  Next: Incbin,  Prev: Ident,  Up: Pseudo Ops
4234
42357.44 '.if ABSOLUTE EXPRESSION'
4236==============================
4237
4238'.if' marks the beginning of a section of code which is only considered
4239part of the source program being assembled if the argument (which must
4240be an ABSOLUTE EXPRESSION) is non-zero.  The end of the conditional
4241section of code must be marked by '.endif' (*note '.endif': Endif.);
4242optionally, you may include code for the alternative condition, flagged
4243by '.else' (*note '.else': Else.).  If you have several conditions to
4244check, '.elseif' may be used to avoid nesting blocks if/else within each
4245subsequent '.else' block.
4246
4247   The following variants of '.if' are also supported:
4248'.ifdef SYMBOL'
4249     Assembles the following section of code if the specified SYMBOL has
4250     been defined.  Note a symbol which has been referenced but not yet
4251     defined is considered to be undefined.
4252
4253'.ifb TEXT'
4254     Assembles the following section of code if the operand is blank
4255     (empty).
4256
4257'.ifc STRING1,STRING2'
4258     Assembles the following section of code if the two strings are the
4259     same.  The strings may be optionally quoted with single quotes.  If
4260     they are not quoted, the first string stops at the first comma, and
4261     the second string stops at the end of the line.  Strings which
4262     contain whitespace should be quoted.  The string comparison is case
4263     sensitive.
4264
4265'.ifeq ABSOLUTE EXPRESSION'
4266     Assembles the following section of code if the argument is zero.
4267
4268'.ifeqs STRING1,STRING2'
4269     Another form of '.ifc'.  The strings must be quoted using double
4270     quotes.
4271
4272'.ifge ABSOLUTE EXPRESSION'
4273     Assembles the following section of code if the argument is greater
4274     than or equal to zero.
4275
4276'.ifgt ABSOLUTE EXPRESSION'
4277     Assembles the following section of code if the argument is greater
4278     than zero.
4279
4280'.ifle ABSOLUTE EXPRESSION'
4281     Assembles the following section of code if the argument is less
4282     than or equal to zero.
4283
4284'.iflt ABSOLUTE EXPRESSION'
4285     Assembles the following section of code if the argument is less
4286     than zero.
4287
4288'.ifnb TEXT'
4289     Like '.ifb', but the sense of the test is reversed: this assembles
4290     the following section of code if the operand is non-blank
4291     (non-empty).
4292
4293'.ifnc STRING1,STRING2.'
4294     Like '.ifc', but the sense of the test is reversed: this assembles
4295     the following section of code if the two strings are not the same.
4296
4297'.ifndef SYMBOL'
4298'.ifnotdef SYMBOL'
4299     Assembles the following section of code if the specified SYMBOL has
4300     not been defined.  Both spelling variants are equivalent.  Note a
4301     symbol which has been referenced but not yet defined is considered
4302     to be undefined.
4303
4304'.ifne ABSOLUTE EXPRESSION'
4305     Assembles the following section of code if the argument is not
4306     equal to zero (in other words, this is equivalent to '.if').
4307
4308'.ifnes STRING1,STRING2'
4309     Like '.ifeqs', but the sense of the test is reversed: this
4310     assembles the following section of code if the two strings are not
4311     the same.
4312
4313
4314File: as.info,  Node: Incbin,  Next: Include,  Prev: If,  Up: Pseudo Ops
4315
43167.45 '.incbin "FILE"[,SKIP[,COUNT]]'
4317====================================
4318
4319The 'incbin' directive includes FILE verbatim at the current location.
4320You can control the search paths used with the '-I' command-line option
4321(*note Command-Line Options: Invoking.).  Quotation marks are required
4322around FILE.
4323
4324   The SKIP argument skips a number of bytes from the start of the FILE.
4325The COUNT argument indicates the maximum number of bytes to read.  Note
4326that the data is not aligned in any way, so it is the user's
4327responsibility to make sure that proper alignment is provided both
4328before and after the 'incbin' directive.
4329
4330
4331File: as.info,  Node: Include,  Next: Int,  Prev: Incbin,  Up: Pseudo Ops
4332
43337.46 '.include "FILE"'
4334======================
4335
4336This directive provides a way to include supporting files at specified
4337points in your source program.  The code from FILE is assembled as if it
4338followed the point of the '.include'; when the end of the included file
4339is reached, assembly of the original file continues.  You can control
4340the search paths used with the '-I' command-line option (*note
4341Command-Line Options: Invoking.).  Quotation marks are required around
4342FILE.
4343
4344
4345File: as.info,  Node: Int,  Next: Internal,  Prev: Include,  Up: Pseudo Ops
4346
43477.47 '.int EXPRESSIONS'
4348=======================
4349
4350Expect zero or more EXPRESSIONS, of any section, separated by commas.
4351For each expression, emit a number that, at run time, is the value of
4352that expression.  The byte order and bit size of the number depends on
4353what kind of target the assembly is for.
4354
4355
4356File: as.info,  Node: Internal,  Next: Irp,  Prev: Int,  Up: Pseudo Ops
4357
43587.48 '.internal NAMES'
4359======================
4360
4361This is one of the ELF visibility directives.  The other two are
4362'.hidden' (*note '.hidden': Hidden.) and '.protected' (*note
4363'.protected': Protected.).
4364
4365   This directive overrides the named symbols default visibility (which
4366is set by their binding: local, global or weak).  The directive sets the
4367visibility to 'internal' which means that the symbols are considered to
4368be 'hidden' (i.e., not visible to other components), and that some
4369extra, processor specific processing must also be performed upon the
4370symbols as well.
4371
4372
4373File: as.info,  Node: Irp,  Next: Irpc,  Prev: Internal,  Up: Pseudo Ops
4374
43757.49 '.irp SYMBOL,VALUES'...
4376============================
4377
4378Evaluate a sequence of statements assigning different values to SYMBOL.
4379The sequence of statements starts at the '.irp' directive, and is
4380terminated by an '.endr' directive.  For each VALUE, SYMBOL is set to
4381VALUE, and the sequence of statements is assembled.  If no VALUE is
4382listed, the sequence of statements is assembled once, with SYMBOL set to
4383the null string.  To refer to SYMBOL within the sequence of statements,
4384use \SYMBOL.
4385
4386   For example, assembling
4387
4388             .irp    param,1,2,3
4389             move    d\param,sp@-
4390             .endr
4391
4392   is equivalent to assembling
4393
4394             move    d1,sp@-
4395             move    d2,sp@-
4396             move    d3,sp@-
4397
4398   For some caveats with the spelling of SYMBOL, see also *note Macro::.
4399
4400
4401File: as.info,  Node: Irpc,  Next: Lcomm,  Prev: Irp,  Up: Pseudo Ops
4402
44037.50 '.irpc SYMBOL,VALUES'...
4404=============================
4405
4406Evaluate a sequence of statements assigning different values to SYMBOL.
4407The sequence of statements starts at the '.irpc' directive, and is
4408terminated by an '.endr' directive.  For each character in VALUE, SYMBOL
4409is set to the character, and the sequence of statements is assembled.
4410If no VALUE is listed, the sequence of statements is assembled once,
4411with SYMBOL set to the null string.  To refer to SYMBOL within the
4412sequence of statements, use \SYMBOL.
4413
4414   For example, assembling
4415
4416             .irpc    param,123
4417             move    d\param,sp@-
4418             .endr
4419
4420   is equivalent to assembling
4421
4422             move    d1,sp@-
4423             move    d2,sp@-
4424             move    d3,sp@-
4425
4426   For some caveats with the spelling of SYMBOL, see also the discussion
4427at *Note Macro::.
4428
4429
4430File: as.info,  Node: Lcomm,  Next: Lflags,  Prev: Irpc,  Up: Pseudo Ops
4431
44327.51 '.lcomm SYMBOL , LENGTH'
4433=============================
4434
4435Reserve LENGTH (an absolute expression) bytes for a local common denoted
4436by SYMBOL.  The section and value of SYMBOL are those of the new local
4437common.  The addresses are allocated in the bss section, so that at
4438run-time the bytes start off zeroed.  SYMBOL is not declared global
4439(*note '.global': Global.), so is normally not visible to 'ld'.
4440
4441   Some targets permit a third argument to be used with '.lcomm'.  This
4442argument specifies the desired alignment of the symbol in the bss
4443section.
4444
4445   The syntax for '.lcomm' differs slightly on the HPPA. The syntax is
4446'SYMBOL .lcomm, LENGTH'; SYMBOL is optional.
4447
4448
4449File: as.info,  Node: Lflags,  Next: Line,  Prev: Lcomm,  Up: Pseudo Ops
4450
44517.52 '.lflags'
4452==============
4453
4454'as' accepts this directive, for compatibility with other assemblers,
4455but ignores it.
4456
4457
4458File: as.info,  Node: Line,  Next: Linkonce,  Prev: Lflags,  Up: Pseudo Ops
4459
44607.53 '.line LINE-NUMBER'
4461========================
4462
4463Change the logical line number.  LINE-NUMBER must be an absolute
4464expression.  The next line has that logical line number.  Therefore any
4465other statements on the current line (after a statement separator
4466character) are reported as on logical line number LINE-NUMBER - 1.  One
4467day 'as' will no longer support this directive: it is recognized only
4468for compatibility with existing assembler programs.
4469
4470   Even though this is a directive associated with the 'a.out' or
4471'b.out' object-code formats, 'as' still recognizes it when producing
4472COFF output, and treats '.line' as though it were the COFF '.ln' _if_ it
4473is found outside a '.def'/'.endef' pair.
4474
4475   Inside a '.def', '.line' is, instead, one of the directives used by
4476compilers to generate auxiliary symbol information for debugging.
4477
4478
4479File: as.info,  Node: Linkonce,  Next: List,  Prev: Line,  Up: Pseudo Ops
4480
44817.54 '.linkonce [TYPE]'
4482=======================
4483
4484Mark the current section so that the linker only includes a single copy
4485of it.  This may be used to include the same section in several
4486different object files, but ensure that the linker will only include it
4487once in the final output file.  The '.linkonce' pseudo-op must be used
4488for each instance of the section.  Duplicate sections are detected based
4489on the section name, so it should be unique.
4490
4491   This directive is only supported by a few object file formats; as of
4492this writing, the only object file format which supports it is the
4493Portable Executable format used on Windows NT.
4494
4495   The TYPE argument is optional.  If specified, it must be one of the
4496following strings.  For example:
4497     .linkonce same_size
4498   Not all types may be supported on all object file formats.
4499
4500'discard'
4501     Silently discard duplicate sections.  This is the default.
4502
4503'one_only'
4504     Warn if there are duplicate sections, but still keep only one copy.
4505
4506'same_size'
4507     Warn if any of the duplicates have different sizes.
4508
4509'same_contents'
4510     Warn if any of the duplicates do not have exactly the same
4511     contents.
4512
4513
4514File: as.info,  Node: List,  Next: Ln,  Prev: Linkonce,  Up: Pseudo Ops
4515
45167.55 '.list'
4517============
4518
4519Control (in conjunction with the '.nolist' directive) whether or not
4520assembly listings are generated.  These two directives maintain an
4521internal counter (which is zero initially).  '.list' increments the
4522counter, and '.nolist' decrements it.  Assembly listings are generated
4523whenever the counter is greater than zero.
4524
4525   By default, listings are disabled.  When you enable them (with the
4526'-a' command-line option; *note Command-Line Options: Invoking.), the
4527initial value of the listing counter is one.
4528
4529
4530File: as.info,  Node: Ln,  Next: Loc,  Prev: List,  Up: Pseudo Ops
4531
45327.56 '.ln LINE-NUMBER'
4533======================
4534
4535'.ln' is a synonym for '.line'.
4536
4537
4538File: as.info,  Node: Loc,  Next: Loc_mark_labels,  Prev: Ln,  Up: Pseudo Ops
4539
45407.57 '.loc FILENO LINENO [COLUMN] [OPTIONS]'
4541============================================
4542
4543When emitting DWARF2 line number information, the '.loc' directive will
4544add a row to the '.debug_line' line number matrix corresponding to the
4545immediately following assembly instruction.  The FILENO, LINENO, and
4546optional COLUMN arguments will be applied to the '.debug_line' state
4547machine before the row is added.
4548
4549   The OPTIONS are a sequence of the following tokens in any order:
4550
4551'basic_block'
4552     This option will set the 'basic_block' register in the
4553     '.debug_line' state machine to 'true'.
4554
4555'prologue_end'
4556     This option will set the 'prologue_end' register in the
4557     '.debug_line' state machine to 'true'.
4558
4559'epilogue_begin'
4560     This option will set the 'epilogue_begin' register in the
4561     '.debug_line' state machine to 'true'.
4562
4563'is_stmt VALUE'
4564     This option will set the 'is_stmt' register in the '.debug_line'
4565     state machine to 'value', which must be either 0 or 1.
4566
4567'isa VALUE'
4568     This directive will set the 'isa' register in the '.debug_line'
4569     state machine to VALUE, which must be an unsigned integer.
4570
4571'discriminator VALUE'
4572     This directive will set the 'discriminator' register in the
4573     '.debug_line' state machine to VALUE, which must be an unsigned
4574     integer.
4575
4576'view VALUE'
4577     This option causes a row to be added to '.debug_line' in reference
4578     to the current address (which might not be the same as that of the
4579     following assembly instruction), and to associate VALUE with the
4580     'view' register in the '.debug_line' state machine.  If VALUE is a
4581     label, both the 'view' register and the label are set to the number
4582     of prior '.loc' directives at the same program location.  If VALUE
4583     is the literal '0', the 'view' register is set to zero, and the
4584     assembler asserts that there aren't any prior '.loc' directives at
4585     the same program location.  If VALUE is the literal '-0', the
4586     assembler arrange for the 'view' register to be reset in this row,
4587     even if there are prior '.loc' directives at the same program
4588     location.
4589
4590
4591File: as.info,  Node: Loc_mark_labels,  Next: Local,  Prev: Loc,  Up: Pseudo Ops
4592
45937.58 '.loc_mark_labels ENABLE'
4594==============================
4595
4596When emitting DWARF2 line number information, the '.loc_mark_labels'
4597directive makes the assembler emit an entry to the '.debug_line' line
4598number matrix with the 'basic_block' register in the state machine set
4599whenever a code label is seen.  The ENABLE argument should be either 1
4600or 0, to enable or disable this function respectively.
4601
4602
4603File: as.info,  Node: Local,  Next: Long,  Prev: Loc_mark_labels,  Up: Pseudo Ops
4604
46057.59 '.local NAMES'
4606===================
4607
4608This directive, which is available for ELF targets, marks each symbol in
4609the comma-separated list of 'names' as a local symbol so that it will
4610not be externally visible.  If the symbols do not already exist, they
4611will be created.
4612
4613   For targets where the '.lcomm' directive (*note Lcomm::) does not
4614accept an alignment argument, which is the case for most ELF targets,
4615the '.local' directive can be used in combination with '.comm' (*note
4616Comm::) to define aligned local common data.
4617
4618
4619File: as.info,  Node: Long,  Next: Macro,  Prev: Local,  Up: Pseudo Ops
4620
46217.60 '.long EXPRESSIONS'
4622========================
4623
4624'.long' is the same as '.int'.  *Note '.int': Int.
4625
4626
4627File: as.info,  Node: Macro,  Next: MRI,  Prev: Long,  Up: Pseudo Ops
4628
46297.61 '.macro'
4630=============
4631
4632The commands '.macro' and '.endm' allow you to define macros that
4633generate assembly output.  For example, this definition specifies a
4634macro 'sum' that puts a sequence of numbers into memory:
4635
4636             .macro  sum from=0, to=5
4637             .long   \from
4638             .if     \to-\from
4639             sum     "(\from+1)",\to
4640             .endif
4641             .endm
4642
4643With that definition, 'SUM 0,5' is equivalent to this assembly input:
4644
4645             .long   0
4646             .long   1
4647             .long   2
4648             .long   3
4649             .long   4
4650             .long   5
4651
4652'.macro MACNAME'
4653'.macro MACNAME MACARGS ...'
4654     Begin the definition of a macro called MACNAME.  If your macro
4655     definition requires arguments, specify their names after the macro
4656     name, separated by commas or spaces.  You can qualify the macro
4657     argument to indicate whether all invocations must specify a
4658     non-blank value (through ':'req''), or whether it takes all of the
4659     remaining arguments (through ':'vararg'').  You can supply a
4660     default value for any macro argument by following the name with
4661     '=DEFLT'.  You cannot define two macros with the same MACNAME
4662     unless it has been subject to the '.purgem' directive (*note
4663     Purgem::) between the two definitions.  For example, these are all
4664     valid '.macro' statements:
4665
4666     '.macro comm'
4667          Begin the definition of a macro called 'comm', which takes no
4668          arguments.
4669
4670     '.macro plus1 p, p1'
4671     '.macro plus1 p p1'
4672          Either statement begins the definition of a macro called
4673          'plus1', which takes two arguments; within the macro
4674          definition, write '\p' or '\p1' to evaluate the arguments.
4675
4676     '.macro reserve_str p1=0 p2'
4677          Begin the definition of a macro called 'reserve_str', with two
4678          arguments.  The first argument has a default value, but not
4679          the second.  After the definition is complete, you can call
4680          the macro either as 'reserve_str A,B' (with '\p1' evaluating
4681          to A and '\p2' evaluating to B), or as 'reserve_str ,B' (with
4682          '\p1' evaluating as the default, in this case '0', and '\p2'
4683          evaluating to B).
4684
4685     '.macro m p1:req, p2=0, p3:vararg'
4686          Begin the definition of a macro called 'm', with at least
4687          three arguments.  The first argument must always have a value
4688          specified, but not the second, which instead has a default
4689          value.  The third formal will get assigned all remaining
4690          arguments specified at invocation time.
4691
4692          When you call a macro, you can specify the argument values
4693          either by position, or by keyword.  For example, 'sum 9,17' is
4694          equivalent to 'sum to=17, from=9'.
4695
4696     Note that since each of the MACARGS can be an identifier exactly as
4697     any other one permitted by the target architecture, there may be
4698     occasional problems if the target hand-crafts special meanings to
4699     certain characters when they occur in a special position.  For
4700     example, if the colon (':') is generally permitted to be part of a
4701     symbol name, but the architecture specific code special-cases it
4702     when occurring as the final character of a symbol (to denote a
4703     label), then the macro parameter replacement code will have no way
4704     of knowing that and consider the whole construct (including the
4705     colon) an identifier, and check only this identifier for being the
4706     subject to parameter substitution.  So for example this macro
4707     definition:
4708
4709          	.macro label l
4710          \l:
4711          	.endm
4712
4713     might not work as expected.  Invoking 'label foo' might not create
4714     a label called 'foo' but instead just insert the text '\l:' into
4715     the assembler source, probably generating an error about an
4716     unrecognised identifier.
4717
4718     Similarly problems might occur with the period character ('.')
4719     which is often allowed inside opcode names (and hence identifier
4720     names).  So for example constructing a macro to build an opcode
4721     from a base name and a length specifier like this:
4722
4723          	.macro opcode base length
4724                  \base.\length
4725          	.endm
4726
4727     and invoking it as 'opcode store l' will not create a 'store.l'
4728     instruction but instead generate some kind of error as the
4729     assembler tries to interpret the text '\base.\length'.
4730
4731     There are several possible ways around this problem:
4732
4733     'Insert white space'
4734          If it is possible to use white space characters then this is
4735          the simplest solution.  eg:
4736
4737               	.macro label l
4738               \l :
4739               	.endm
4740
4741     'Use '\()''
4742          The string '\()' can be used to separate the end of a macro
4743          argument from the following text.  eg:
4744
4745               	.macro opcode base length
4746                       \base\().\length
4747               	.endm
4748
4749     'Use the alternate macro syntax mode'
4750          In the alternative macro syntax mode the ampersand character
4751          ('&') can be used as a separator.  eg:
4752
4753               	.altmacro
4754               	.macro label l
4755               l&:
4756               	.endm
4757
4758     Note: this problem of correctly identifying string parameters to
4759     pseudo ops also applies to the identifiers used in '.irp' (*note
4760     Irp::) and '.irpc' (*note Irpc::) as well.
4761
4762'.endm'
4763     Mark the end of a macro definition.
4764
4765'.exitm'
4766     Exit early from the current macro definition.
4767
4768'\@'
4769     'as' maintains a counter of how many macros it has executed in this
4770     pseudo-variable; you can copy that number to your output with '\@',
4771     but _only within a macro definition_.
4772
4773'LOCAL NAME [ , ... ]'
4774     _Warning: 'LOCAL' is only available if you select "alternate macro
4775     syntax" with '--alternate' or '.altmacro'._  *Note '.altmacro':
4776     Altmacro.
4777
4778
4779File: as.info,  Node: MRI,  Next: Noaltmacro,  Prev: Macro,  Up: Pseudo Ops
4780
47817.62 '.mri VAL'
4782===============
4783
4784If VAL is non-zero, this tells 'as' to enter MRI mode.  If VAL is zero,
4785this tells 'as' to exit MRI mode.  This change affects code assembled
4786until the next '.mri' directive, or until the end of the file.  *Note
4787MRI mode: M.
4788
4789
4790File: as.info,  Node: Noaltmacro,  Next: Nolist,  Prev: MRI,  Up: Pseudo Ops
4791
47927.63 '.noaltmacro'
4793==================
4794
4795Disable alternate macro mode.  *Note Altmacro::.
4796
4797
4798File: as.info,  Node: Nolist,  Next: Nops,  Prev: Noaltmacro,  Up: Pseudo Ops
4799
48007.64 '.nolist'
4801==============
4802
4803Control (in conjunction with the '.list' directive) whether or not
4804assembly listings are generated.  These two directives maintain an
4805internal counter (which is zero initially).  '.list' increments the
4806counter, and '.nolist' decrements it.  Assembly listings are generated
4807whenever the counter is greater than zero.
4808
4809
4810File: as.info,  Node: Nops,  Next: Octa,  Prev: Nolist,  Up: Pseudo Ops
4811
48127.65 '.nops SIZE[, CONTROL]'
4813============================
4814
4815This directive emits SIZE bytes filled with no-op instructions.  SIZE is
4816absolute expression, which must be a positve value.  CONTROL controls
4817how no-op instructions should be generated.  If the comma and CONTROL
4818are omitted, CONTROL is assumed to be zero.
4819
4820   Note: For Intel 80386 and AMD x86-64 targets, CONTROL specifies the
4821size limit of a no-op instruction.  The valid values of CONTROL are
4822between 0 and 4 in 16-bit mode, between 0 and 7 when tuning for older
4823processors in 32-bit mode, between 0 and 11 in 64-bit mode or when
4824tuning for newer processors in 32-bit mode.  When 0 is used, the no-op
4825instruction size limit is set to the maximum supported size.
4826
4827
4828File: as.info,  Node: Octa,  Next: Offset,  Prev: Nops,  Up: Pseudo Ops
4829
48307.66 '.octa BIGNUMS'
4831====================
4832
4833This directive expects zero or more bignums, separated by commas.  For
4834each bignum, it emits a 16-byte integer.
4835
4836   The term "octa" comes from contexts in which a "word" is two bytes;
4837hence _octa_-word for 16 bytes.
4838
4839
4840File: as.info,  Node: Offset,  Next: Org,  Prev: Octa,  Up: Pseudo Ops
4841
48427.67 '.offset LOC'
4843==================
4844
4845Set the location counter to LOC in the absolute section.  LOC must be an
4846absolute expression.  This directive may be useful for defining symbols
4847with absolute values.  Do not confuse it with the '.org' directive.
4848
4849
4850File: as.info,  Node: Org,  Next: P2align,  Prev: Offset,  Up: Pseudo Ops
4851
48527.68 '.org NEW-LC , FILL'
4853=========================
4854
4855Advance the location counter of the current section to NEW-LC.  NEW-LC
4856is either an absolute expression or an expression with the same section
4857as the current subsection.  That is, you can't use '.org' to cross
4858sections: if NEW-LC has the wrong section, the '.org' directive is
4859ignored.  To be compatible with former assemblers, if the section of
4860NEW-LC is absolute, 'as' issues a warning, then pretends the section of
4861NEW-LC is the same as the current subsection.
4862
4863   '.org' may only increase the location counter, or leave it unchanged;
4864you cannot use '.org' to move the location counter backwards.
4865
4866   Because 'as' tries to assemble programs in one pass, NEW-LC may not
4867be undefined.  If you really detest this restriction we eagerly await a
4868chance to share your improved assembler.
4869
4870   Beware that the origin is relative to the start of the section, not
4871to the start of the subsection.  This is compatible with other people's
4872assemblers.
4873
4874   When the location counter (of the current subsection) is advanced,
4875the intervening bytes are filled with FILL which should be an absolute
4876expression.  If the comma and FILL are omitted, FILL defaults to zero.
4877
4878
4879File: as.info,  Node: P2align,  Next: PopSection,  Prev: Org,  Up: Pseudo Ops
4880
48817.69 '.p2align[wl] [ABS-EXPR[, ABS-EXPR[, ABS-EXPR]]]'
4882======================================================
4883
4884Pad the location counter (in the current subsection) to a particular
4885storage boundary.  The first expression (which must be absolute) is the
4886number of low-order zero bits the location counter must have after
4887advancement.  For example '.p2align 3' advances the location counter
4888until it is a multiple of 8.  If the location counter is already a
4889multiple of 8, no change is needed.  If the expression is omitted then a
4890default value of 0 is used, effectively disabling alignment
4891requirements.
4892
4893   The second expression (also absolute) gives the fill value to be
4894stored in the padding bytes.  It (and the comma) may be omitted.  If it
4895is omitted, the padding bytes are normally zero.  However, on most
4896systems, if the section is marked as containing code and the fill value
4897is omitted, the space is filled with no-op instructions.
4898
4899   The third expression is also absolute, and is also optional.  If it
4900is present, it is the maximum number of bytes that should be skipped by
4901this alignment directive.  If doing the alignment would require skipping
4902more bytes than the specified maximum, then the alignment is not done at
4903all.  You can omit the fill value (the second argument) entirely by
4904simply using two commas after the required alignment; this can be useful
4905if you want the alignment to be filled with no-op instructions when
4906appropriate.
4907
4908   The '.p2alignw' and '.p2alignl' directives are variants of the
4909'.p2align' directive.  The '.p2alignw' directive treats the fill pattern
4910as a two byte word value.  The '.p2alignl' directives treats the fill
4911pattern as a four byte longword value.  For example, '.p2alignw
49122,0x368d' will align to a multiple of 4.  If it skips two bytes, they
4913will be filled in with the value 0x368d (the exact placement of the
4914bytes depends upon the endianness of the processor).  If it skips 1 or 3
4915bytes, the fill value is undefined.
4916
4917
4918File: as.info,  Node: PopSection,  Next: Previous,  Prev: P2align,  Up: Pseudo Ops
4919
49207.70 '.popsection'
4921==================
4922
4923This is one of the ELF section stack manipulation directives.  The
4924others are '.section' (*note Section::), '.subsection' (*note
4925SubSection::), '.pushsection' (*note PushSection::), and '.previous'
4926(*note Previous::).
4927
4928   This directive replaces the current section (and subsection) with the
4929top section (and subsection) on the section stack.  This section is
4930popped off the stack.
4931
4932
4933File: as.info,  Node: Previous,  Next: Print,  Prev: PopSection,  Up: Pseudo Ops
4934
49357.71 '.previous'
4936================
4937
4938This is one of the ELF section stack manipulation directives.  The
4939others are '.section' (*note Section::), '.subsection' (*note
4940SubSection::), '.pushsection' (*note PushSection::), and '.popsection'
4941(*note PopSection::).
4942
4943   This directive swaps the current section (and subsection) with most
4944recently referenced section/subsection pair prior to this one.  Multiple
4945'.previous' directives in a row will flip between two sections (and
4946their subsections).  For example:
4947
4948     .section A
4949      .subsection 1
4950       .word 0x1234
4951      .subsection 2
4952       .word 0x5678
4953     .previous
4954      .word 0x9abc
4955
4956   Will place 0x1234 and 0x9abc into subsection 1 and 0x5678 into
4957subsection 2 of section A. Whilst:
4958
4959     .section A
4960     .subsection 1
4961       # Now in section A subsection 1
4962       .word 0x1234
4963     .section B
4964     .subsection 0
4965       # Now in section B subsection 0
4966       .word 0x5678
4967     .subsection 1
4968       # Now in section B subsection 1
4969       .word 0x9abc
4970     .previous
4971       # Now in section B subsection 0
4972       .word 0xdef0
4973
4974   Will place 0x1234 into section A, 0x5678 and 0xdef0 into subsection 0
4975of section B and 0x9abc into subsection 1 of section B.
4976
4977   In terms of the section stack, this directive swaps the current
4978section with the top section on the section stack.
4979
4980
4981File: as.info,  Node: Print,  Next: Protected,  Prev: Previous,  Up: Pseudo Ops
4982
49837.72 '.print STRING'
4984====================
4985
4986'as' will print STRING on the standard output during assembly.  You must
4987put STRING in double quotes.
4988
4989
4990File: as.info,  Node: Protected,  Next: Psize,  Prev: Print,  Up: Pseudo Ops
4991
49927.73 '.protected NAMES'
4993=======================
4994
4995This is one of the ELF visibility directives.  The other two are
4996'.hidden' (*note Hidden::) and '.internal' (*note Internal::).
4997
4998   This directive overrides the named symbols default visibility (which
4999is set by their binding: local, global or weak).  The directive sets the
5000visibility to 'protected' which means that any references to the symbols
5001from within the components that defines them must be resolved to the
5002definition in that component, even if a definition in another component
5003would normally preempt this.
5004
5005
5006File: as.info,  Node: Psize,  Next: Purgem,  Prev: Protected,  Up: Pseudo Ops
5007
50087.74 '.psize LINES , COLUMNS'
5009=============================
5010
5011Use this directive to declare the number of lines--and, optionally, the
5012number of columns--to use for each page, when generating listings.
5013
5014   If you do not use '.psize', listings use a default line-count of 60.
5015You may omit the comma and COLUMNS specification; the default width is
5016200 columns.
5017
5018   'as' generates formfeeds whenever the specified number of lines is
5019exceeded (or whenever you explicitly request one, using '.eject').
5020
5021   If you specify LINES as '0', no formfeeds are generated save those
5022explicitly specified with '.eject'.
5023
5024
5025File: as.info,  Node: Purgem,  Next: PushSection,  Prev: Psize,  Up: Pseudo Ops
5026
50277.75 '.purgem NAME'
5028===================
5029
5030Undefine the macro NAME, so that later uses of the string will not be
5031expanded.  *Note Macro::.
5032
5033
5034File: as.info,  Node: PushSection,  Next: Quad,  Prev: Purgem,  Up: Pseudo Ops
5035
50367.76 '.pushsection NAME [, SUBSECTION] [, "FLAGS"[, @TYPE[,ARGUMENTS]]]'
5037========================================================================
5038
5039This is one of the ELF section stack manipulation directives.  The
5040others are '.section' (*note Section::), '.subsection' (*note
5041SubSection::), '.popsection' (*note PopSection::), and '.previous'
5042(*note Previous::).
5043
5044   This directive pushes the current section (and subsection) onto the
5045top of the section stack, and then replaces the current section and
5046subsection with 'name' and 'subsection'.  The optional 'flags', 'type'
5047and 'arguments' are treated the same as in the '.section' (*note
5048Section::) directive.
5049
5050
5051File: as.info,  Node: Quad,  Next: Reloc,  Prev: PushSection,  Up: Pseudo Ops
5052
50537.77 '.quad BIGNUMS'
5054====================
5055
5056'.quad' expects zero or more bignums, separated by commas.  For each
5057bignum, it emits an 8-byte integer.  If the bignum won't fit in 8 bytes,
5058it prints a warning message; and just takes the lowest order 8 bytes of
5059the bignum.
5060
5061   The term "quad" comes from contexts in which a "word" is two bytes;
5062hence _quad_-word for 8 bytes.
5063
5064
5065File: as.info,  Node: Reloc,  Next: Rept,  Prev: Quad,  Up: Pseudo Ops
5066
50677.78 '.reloc OFFSET, RELOC_NAME[, EXPRESSION]'
5068==============================================
5069
5070Generate a relocation at OFFSET of type RELOC_NAME with value
5071EXPRESSION.  If OFFSET is a number, the relocation is generated in the
5072current section.  If OFFSET is an expression that resolves to a symbol
5073plus offset, the relocation is generated in the given symbol's section.
5074EXPRESSION, if present, must resolve to a symbol plus addend or to an
5075absolute value, but note that not all targets support an addend.  e.g.
5076ELF REL targets such as i386 store an addend in the section contents
5077rather than in the relocation.  This low level interface does not
5078support addends stored in the section.
5079
5080
5081File: as.info,  Node: Rept,  Next: Sbttl,  Prev: Reloc,  Up: Pseudo Ops
5082
50837.79 '.rept COUNT'
5084==================
5085
5086Repeat the sequence of lines between the '.rept' directive and the next
5087'.endr' directive COUNT times.
5088
5089   For example, assembling
5090
5091             .rept   3
5092             .long   0
5093             .endr
5094
5095   is equivalent to assembling
5096
5097             .long   0
5098             .long   0
5099             .long   0
5100
5101   A count of zero is allowed, but nothing is generated.  Negative
5102counts are not allowed and if encountered will be treated as if they
5103were zero.
5104
5105
5106File: as.info,  Node: Sbttl,  Next: Scl,  Prev: Rept,  Up: Pseudo Ops
5107
51087.80 '.sbttl "SUBHEADING"'
5109==========================
5110
5111Use SUBHEADING as the title (third line, immediately after the title
5112line) when generating assembly listings.
5113
5114   This directive affects subsequent pages, as well as the current page
5115if it appears within ten lines of the top of a page.
5116
5117
5118File: as.info,  Node: Scl,  Next: Section,  Prev: Sbttl,  Up: Pseudo Ops
5119
51207.81 '.scl CLASS'
5121=================
5122
5123Set the storage-class value for a symbol.  This directive may only be
5124used inside a '.def'/'.endef' pair.  Storage class may flag whether a
5125symbol is static or external, or it may record further symbolic
5126debugging information.
5127
5128
5129File: as.info,  Node: Section,  Next: Set,  Prev: Scl,  Up: Pseudo Ops
5130
51317.82 '.section NAME'
5132====================
5133
5134Use the '.section' directive to assemble the following code into a
5135section named NAME.
5136
5137   This directive is only supported for targets that actually support
5138arbitrarily named sections; on 'a.out' targets, for example, it is not
5139accepted, even with a standard 'a.out' section name.
5140
5141COFF Version
5142------------
5143
5144For COFF targets, the '.section' directive is used in one of the
5145following ways:
5146
5147     .section NAME[, "FLAGS"]
5148     .section NAME[, SUBSECTION]
5149
5150   If the optional argument is quoted, it is taken as flags to use for
5151the section.  Each flag is a single character.  The following flags are
5152recognized:
5153
5154'b'
5155     bss section (uninitialized data)
5156'n'
5157     section is not loaded
5158'w'
5159     writable section
5160'd'
5161     data section
5162'e'
5163     exclude section from linking
5164'r'
5165     read-only section
5166'x'
5167     executable section
5168's'
5169     shared section (meaningful for PE targets)
5170'a'
5171     ignored.  (For compatibility with the ELF version)
5172'y'
5173     section is not readable (meaningful for PE targets)
5174'0-9'
5175     single-digit power-of-two section alignment (GNU extension)
5176
5177   If no flags are specified, the default flags depend upon the section
5178name.  If the section name is not recognized, the default will be for
5179the section to be loaded and writable.  Note the 'n' and 'w' flags
5180remove attributes from the section, rather than adding them, so if they
5181are used on their own it will be as if no flags had been specified at
5182all.
5183
5184   If the optional argument to the '.section' directive is not quoted,
5185it is taken as a subsection number (*note Sub-Sections::).
5186
5187ELF Version
5188-----------
5189
5190This is one of the ELF section stack manipulation directives.  The
5191others are '.subsection' (*note SubSection::), '.pushsection' (*note
5192PushSection::), '.popsection' (*note PopSection::), and '.previous'
5193(*note Previous::).
5194
5195   For ELF targets, the '.section' directive is used like this:
5196
5197     .section NAME [, "FLAGS"[, @TYPE[,FLAG_SPECIFIC_ARGUMENTS]]]
5198
5199   If the '--sectname-subst' command-line option is provided, the NAME
5200argument may contain a substitution sequence.  Only '%S' is supported at
5201the moment, and substitutes the current section name.  For example:
5202
5203     .macro exception_code
5204     .section %S.exception
5205     [exception code here]
5206     .previous
5207     .endm
5208
5209     .text
5210     [code]
5211     exception_code
5212     [...]
5213
5214     .section .init
5215     [init code]
5216     exception_code
5217     [...]
5218
5219   The two 'exception_code' invocations above would create the
5220'.text.exception' and '.init.exception' sections respectively.  This is
5221useful e.g.  to discriminate between ancillary sections that are tied to
5222setup code to be discarded after use from ancillary sections that need
5223to stay resident without having to define multiple 'exception_code'
5224macros just for that purpose.
5225
5226   The optional FLAGS argument is a quoted string which may contain any
5227combination of the following characters:
5228
5229'a'
5230     section is allocatable
5231'd'
5232     section is a GNU_MBIND section
5233'e'
5234     section is excluded from executable and shared library.
5235'w'
5236     section is writable
5237'x'
5238     section is executable
5239'M'
5240     section is mergeable
5241'S'
5242     section contains zero terminated strings
5243'G'
5244     section is a member of a section group
5245'T'
5246     section is used for thread-local-storage
5247'?'
5248     section is a member of the previously-current section's group, if
5249     any
5250'<number>'
5251     a numeric value indicating the bits to be set in the ELF section
5252     header's flags field.  Note - if one or more of the alphabetic
5253     characters described above is also included in the flags field,
5254     their bit values will be ORed into the resulting value.
5255'<target specific>'
5256     some targets extend this list with their own flag characters
5257
5258   Note - once a section's flags have been set they cannot be changed.
5259There are a few exceptions to this rule however.  Processor and
5260application specific flags can be added to an already defined section.
5261The '.interp', '.strtab' and '.symtab' sections can have the allocate
5262flag ('a') set after they are initially defined, and the
5263'.note-GNU-stack' section may have the executable ('x') flag added.
5264
5265   The optional TYPE argument may contain one of the following
5266constants:
5267
5268'@progbits'
5269     section contains data
5270'@nobits'
5271     section does not contain data (i.e., section only occupies space)
5272'@note'
5273     section contains data which is used by things other than the
5274     program
5275'@init_array'
5276     section contains an array of pointers to init functions
5277'@fini_array'
5278     section contains an array of pointers to finish functions
5279'@preinit_array'
5280     section contains an array of pointers to pre-init functions
5281'@<number>'
5282     a numeric value to be set as the ELF section header's type field.
5283'@<target specific>'
5284     some targets extend this list with their own types
5285
5286   Many targets only support the first three section types.  The type
5287may be enclosed in double quotes if necessary.
5288
5289   Note on targets where the '@' character is the start of a comment (eg
5290ARM) then another character is used instead.  For example the ARM port
5291uses the '%' character.
5292
5293   Note - some sections, eg '.text' and '.data' are considered to be
5294special and have fixed types.  Any attempt to declare them with a
5295different type will generate an error from the assembler.
5296
5297   If FLAGS contains the 'M' symbol then the TYPE argument must be
5298specified as well as an extra argument--ENTSIZE--like this:
5299
5300     .section NAME , "FLAGS"M, @TYPE, ENTSIZE
5301
5302   Sections with the 'M' flag but not 'S' flag must contain fixed size
5303constants, each ENTSIZE octets long.  Sections with both 'M' and 'S'
5304must contain zero terminated strings where each character is ENTSIZE
5305bytes long.  The linker may remove duplicates within sections with the
5306same name, same entity size and same flags.  ENTSIZE must be an absolute
5307expression.  For sections with both 'M' and 'S', a string which is a
5308suffix of a larger string is considered a duplicate.  Thus '"def"' will
5309be merged with '"abcdef"'; A reference to the first '"def"' will be
5310changed to a reference to '"abcdef"+3'.
5311
5312   If FLAGS contains the 'G' symbol then the TYPE argument must be
5313present along with an additional field like this:
5314
5315     .section NAME , "FLAGS"G, @TYPE, GROUPNAME[, LINKAGE]
5316
5317   The GROUPNAME field specifies the name of the section group to which
5318this particular section belongs.  The optional linkage field can
5319contain:
5320
5321'comdat'
5322     indicates that only one copy of this section should be retained
5323'.gnu.linkonce'
5324     an alias for comdat
5325
5326   Note: if both the M and G flags are present then the fields for the
5327Merge flag should come first, like this:
5328
5329     .section NAME , "FLAGS"MG, @TYPE, ENTSIZE, GROUPNAME[, LINKAGE]
5330
5331   If FLAGS contains the '?' symbol then it may not also contain the 'G'
5332symbol and the GROUPNAME or LINKAGE fields should not be present.
5333Instead, '?' says to consider the section that's current before this
5334directive.  If that section used 'G', then the new section will use 'G'
5335with those same GROUPNAME and LINKAGE fields implicitly.  If not, then
5336the '?' symbol has no effect.
5337
5338   If no flags are specified, the default flags depend upon the section
5339name.  If the section name is not recognized, the default will be for
5340the section to have none of the above flags: it will not be allocated in
5341memory, nor writable, nor executable.  The section will contain data.
5342
5343   For ELF targets, the assembler supports another type of '.section'
5344directive for compatibility with the Solaris assembler:
5345
5346     .section "NAME"[, FLAGS...]
5347
5348   Note that the section name is quoted.  There may be a sequence of
5349comma separated flags:
5350
5351'#alloc'
5352     section is allocatable
5353'#write'
5354     section is writable
5355'#execinstr'
5356     section is executable
5357'#exclude'
5358     section is excluded from executable and shared library.
5359'#tls'
5360     section is used for thread local storage
5361
5362   This directive replaces the current section and subsection.  See the
5363contents of the gas testsuite directory 'gas/testsuite/gas/elf' for some
5364examples of how this directive and the other section stack directives
5365work.
5366
5367
5368File: as.info,  Node: Set,  Next: Short,  Prev: Section,  Up: Pseudo Ops
5369
53707.83 '.set SYMBOL, EXPRESSION'
5371==============================
5372
5373Set the value of SYMBOL to EXPRESSION.  This changes SYMBOL's value and
5374type to conform to EXPRESSION.  If SYMBOL was flagged as external, it
5375remains flagged (*note Symbol Attributes::).
5376
5377   You may '.set' a symbol many times in the same assembly provided that
5378the values given to the symbol are constants.  Values that are based on
5379expressions involving other symbols are allowed, but some targets may
5380restrict this to only being done once per assembly.  This is because
5381those targets do not set the addresses of symbols at assembly time, but
5382rather delay the assignment until a final link is performed.  This
5383allows the linker a chance to change the code in the files, changing the
5384location of, and the relative distance between, various different
5385symbols.
5386
5387   If you '.set' a global symbol, the value stored in the object file is
5388the last value stored into it.
5389
5390   On Z80 'set' is a real instruction, use '.set' or 'SYMBOL defl
5391EXPRESSION' instead.
5392
5393
5394File: as.info,  Node: Short,  Next: Single,  Prev: Set,  Up: Pseudo Ops
5395
53967.84 '.short EXPRESSIONS'
5397=========================
5398
5399'.short' is normally the same as '.word'.  *Note '.word': Word.
5400
5401   In some configurations, however, '.short' and '.word' generate
5402numbers of different lengths.  *Note Machine Dependencies::.
5403
5404
5405File: as.info,  Node: Single,  Next: Size,  Prev: Short,  Up: Pseudo Ops
5406
54077.85 '.single FLONUMS'
5408======================
5409
5410This directive assembles zero or more flonums, separated by commas.  It
5411has the same effect as '.float'.  The exact kind of floating point
5412numbers emitted depends on how 'as' is configured.  *Note Machine
5413Dependencies::.
5414
5415
5416File: as.info,  Node: Size,  Next: Skip,  Prev: Single,  Up: Pseudo Ops
5417
54187.86 '.size'
5419============
5420
5421This directive is used to set the size associated with a symbol.
5422
5423COFF Version
5424------------
5425
5426For COFF targets, the '.size' directive is only permitted inside
5427'.def'/'.endef' pairs.  It is used like this:
5428
5429     .size EXPRESSION
5430
5431ELF Version
5432-----------
5433
5434For ELF targets, the '.size' directive is used like this:
5435
5436     .size NAME , EXPRESSION
5437
5438   This directive sets the size associated with a symbol NAME.  The size
5439in bytes is computed from EXPRESSION which can make use of label
5440arithmetic.  This directive is typically used to set the size of
5441function symbols.
5442
5443
5444File: as.info,  Node: Skip,  Next: Sleb128,  Prev: Size,  Up: Pseudo Ops
5445
54467.87 '.skip SIZE [,FILL]'
5447=========================
5448
5449This directive emits SIZE bytes, each of value FILL.  Both SIZE and FILL
5450are absolute expressions.  If the comma and FILL are omitted, FILL is
5451assumed to be zero.  This is the same as '.space'.
5452
5453
5454File: as.info,  Node: Sleb128,  Next: Space,  Prev: Skip,  Up: Pseudo Ops
5455
54567.88 '.sleb128 EXPRESSIONS'
5457===========================
5458
5459SLEB128 stands for "signed little endian base 128."  This is a compact,
5460variable length representation of numbers used by the DWARF symbolic
5461debugging format.  *Note '.uleb128': Uleb128.
5462
5463
5464File: as.info,  Node: Space,  Next: Stab,  Prev: Sleb128,  Up: Pseudo Ops
5465
54667.89 '.space SIZE [,FILL]'
5467==========================
5468
5469This directive emits SIZE bytes, each of value FILL.  Both SIZE and FILL
5470are absolute expressions.  If the comma and FILL are omitted, FILL is
5471assumed to be zero.  This is the same as '.skip'.
5472
5473     _Warning:_ '.space' has a completely different meaning for HPPA
5474     targets; use '.block' as a substitute.  See 'HP9000 Series 800
5475     Assembly Language Reference Manual' (HP 92432-90001) for the
5476     meaning of the '.space' directive.  *Note HPPA Assembler
5477     Directives: HPPA Directives, for a summary.
5478
5479
5480File: as.info,  Node: Stab,  Next: String,  Prev: Space,  Up: Pseudo Ops
5481
54827.90 '.stabd, .stabn, .stabs'
5483=============================
5484
5485There are three directives that begin '.stab'.  All emit symbols (*note
5486Symbols::), for use by symbolic debuggers.  The symbols are not entered
5487in the 'as' hash table: they cannot be referenced elsewhere in the
5488source file.  Up to five fields are required:
5489
5490STRING
5491     This is the symbol's name.  It may contain any character except
5492     '\000', so is more general than ordinary symbol names.  Some
5493     debuggers used to code arbitrarily complex structures into symbol
5494     names using this field.
5495
5496TYPE
5497     An absolute expression.  The symbol's type is set to the low 8 bits
5498     of this expression.  Any bit pattern is permitted, but 'ld' and
5499     debuggers choke on silly bit patterns.
5500
5501OTHER
5502     An absolute expression.  The symbol's "other" attribute is set to
5503     the low 8 bits of this expression.
5504
5505DESC
5506     An absolute expression.  The symbol's descriptor is set to the low
5507     16 bits of this expression.
5508
5509VALUE
5510     An absolute expression which becomes the symbol's value.
5511
5512   If a warning is detected while reading a '.stabd', '.stabn', or
5513'.stabs' statement, the symbol has probably already been created; you
5514get a half-formed symbol in your object file.  This is compatible with
5515earlier assemblers!
5516
5517'.stabd TYPE , OTHER , DESC'
5518
5519     The "name" of the symbol generated is not even an empty string.  It
5520     is a null pointer, for compatibility.  Older assemblers used a null
5521     pointer so they didn't waste space in object files with empty
5522     strings.
5523
5524     The symbol's value is set to the location counter, relocatably.
5525     When your program is linked, the value of this symbol is the
5526     address of the location counter when the '.stabd' was assembled.
5527
5528'.stabn TYPE , OTHER , DESC , VALUE'
5529     The name of the symbol is set to the empty string '""'.
5530
5531'.stabs STRING , TYPE , OTHER , DESC , VALUE'
5532     All five fields are specified.
5533
5534
5535File: as.info,  Node: String,  Next: Struct,  Prev: Stab,  Up: Pseudo Ops
5536
55377.91 '.string' "STR", '.string8' "STR", '.string16'
5538===================================================
5539
5540"STR", '.string32' "STR", '.string64' "STR"
5541
5542   Copy the characters in STR to the object file.  You may specify more
5543than one string to copy, separated by commas.  Unless otherwise
5544specified for a particular machine, the assembler marks the end of each
5545string with a 0 byte.  You can use any of the escape sequences described
5546in *note Strings: Strings.
5547
5548   The variants 'string16', 'string32' and 'string64' differ from the
5549'string' pseudo opcode in that each 8-bit character from STR is copied
5550and expanded to 16, 32 or 64 bits respectively.  The expanded characters
5551are stored in target endianness byte order.
5552
5553   Example:
5554     	.string32 "BYE"
5555     expands to:
5556     	.string   "B\0\0\0Y\0\0\0E\0\0\0"  /* On little endian targets.  */
5557     	.string   "\0\0\0B\0\0\0Y\0\0\0E"  /* On big endian targets.  */
5558
5559
5560File: as.info,  Node: Struct,  Next: SubSection,  Prev: String,  Up: Pseudo Ops
5561
55627.92 '.struct EXPRESSION'
5563=========================
5564
5565Switch to the absolute section, and set the section offset to
5566EXPRESSION, which must be an absolute expression.  You might use this as
5567follows:
5568             .struct 0
5569     field1:
5570             .struct field1 + 4
5571     field2:
5572             .struct field2 + 4
5573     field3:
5574   This would define the symbol 'field1' to have the value 0, the symbol
5575'field2' to have the value 4, and the symbol 'field3' to have the value
55768.  Assembly would be left in the absolute section, and you would need
5577to use a '.section' directive of some sort to change to some other
5578section before further assembly.
5579
5580
5581File: as.info,  Node: SubSection,  Next: Symver,  Prev: Struct,  Up: Pseudo Ops
5582
55837.93 '.subsection NAME'
5584=======================
5585
5586This is one of the ELF section stack manipulation directives.  The
5587others are '.section' (*note Section::), '.pushsection' (*note
5588PushSection::), '.popsection' (*note PopSection::), and '.previous'
5589(*note Previous::).
5590
5591   This directive replaces the current subsection with 'name'.  The
5592current section is not changed.  The replaced subsection is put onto the
5593section stack in place of the then current top of stack subsection.
5594
5595
5596File: as.info,  Node: Symver,  Next: Tag,  Prev: SubSection,  Up: Pseudo Ops
5597
55987.94 '.symver'
5599==============
5600
5601Use the '.symver' directive to bind symbols to specific version nodes
5602within a source file.  This is only supported on ELF platforms, and is
5603typically used when assembling files to be linked into a shared library.
5604There are cases where it may make sense to use this in objects to be
5605bound into an application itself so as to override a versioned symbol
5606from a shared library.
5607
5608   For ELF targets, the '.symver' directive can be used like this:
5609     .symver NAME, NAME2@NODENAME
5610   If the symbol NAME is defined within the file being assembled, the
5611'.symver' directive effectively creates a symbol alias with the name
5612NAME2@NODENAME, and in fact the main reason that we just don't try and
5613create a regular alias is that the @ character isn't permitted in symbol
5614names.  The NAME2 part of the name is the actual name of the symbol by
5615which it will be externally referenced.  The name NAME itself is merely
5616a name of convenience that is used so that it is possible to have
5617definitions for multiple versions of a function within a single source
5618file, and so that the compiler can unambiguously know which version of a
5619function is being mentioned.  The NODENAME portion of the alias should
5620be the name of a node specified in the version script supplied to the
5621linker when building a shared library.  If you are attempting to
5622override a versioned symbol from a shared library, then NODENAME should
5623correspond to the nodename of the symbol you are trying to override.
5624
5625   If the symbol NAME is not defined within the file being assembled,
5626all references to NAME will be changed to NAME2@NODENAME.  If no
5627reference to NAME is made, NAME2@NODENAME will be removed from the
5628symbol table.
5629
5630   Another usage of the '.symver' directive is:
5631     .symver NAME, NAME2@@NODENAME
5632   In this case, the symbol NAME must exist and be defined within the
5633file being assembled.  It is similar to NAME2@NODENAME.  The difference
5634is NAME2@@NODENAME will also be used to resolve references to NAME2 by
5635the linker.
5636
5637   The third usage of the '.symver' directive is:
5638     .symver NAME, NAME2@@@NODENAME
5639   When NAME is not defined within the file being assembled, it is
5640treated as NAME2@NODENAME.  When NAME is defined within the file being
5641assembled, the symbol name, NAME, will be changed to NAME2@@NODENAME.
5642
5643
5644File: as.info,  Node: Tag,  Next: Text,  Prev: Symver,  Up: Pseudo Ops
5645
56467.95 '.tag STRUCTNAME'
5647======================
5648
5649This directive is generated by compilers to include auxiliary debugging
5650information in the symbol table.  It is only permitted inside
5651'.def'/'.endef' pairs.  Tags are used to link structure definitions in
5652the symbol table with instances of those structures.
5653
5654
5655File: as.info,  Node: Text,  Next: Title,  Prev: Tag,  Up: Pseudo Ops
5656
56577.96 '.text SUBSECTION'
5658=======================
5659
5660Tells 'as' to assemble the following statements onto the end of the text
5661subsection numbered SUBSECTION, which is an absolute expression.  If
5662SUBSECTION is omitted, subsection number zero is used.
5663
5664
5665File: as.info,  Node: Title,  Next: Type,  Prev: Text,  Up: Pseudo Ops
5666
56677.97 '.title "HEADING"'
5668=======================
5669
5670Use HEADING as the title (second line, immediately after the source file
5671name and pagenumber) when generating assembly listings.
5672
5673   This directive affects subsequent pages, as well as the current page
5674if it appears within ten lines of the top of a page.
5675
5676
5677File: as.info,  Node: Type,  Next: Uleb128,  Prev: Title,  Up: Pseudo Ops
5678
56797.98 '.type'
5680============
5681
5682This directive is used to set the type of a symbol.
5683
5684COFF Version
5685------------
5686
5687For COFF targets, this directive is permitted only within
5688'.def'/'.endef' pairs.  It is used like this:
5689
5690     .type INT
5691
5692   This records the integer INT as the type attribute of a symbol table
5693entry.
5694
5695ELF Version
5696-----------
5697
5698For ELF targets, the '.type' directive is used like this:
5699
5700     .type NAME , TYPE DESCRIPTION
5701
5702   This sets the type of symbol NAME to be either a function symbol or
5703an object symbol.  There are five different syntaxes supported for the
5704TYPE DESCRIPTION field, in order to provide compatibility with various
5705other assemblers.
5706
5707   Because some of the characters used in these syntaxes (such as '@'
5708and '#') are comment characters for some architectures, some of the
5709syntaxes below do not work on all architectures.  The first variant will
5710be accepted by the GNU assembler on all architectures so that variant
5711should be used for maximum portability, if you do not need to assemble
5712your code with other assemblers.
5713
5714   The syntaxes supported are:
5715
5716       .type <name> STT_<TYPE_IN_UPPER_CASE>
5717       .type <name>,#<type>
5718       .type <name>,@<type>
5719       .type <name>,%<type>
5720       .type <name>,"<type>"
5721
5722   The types supported are:
5723
5724'STT_FUNC'
5725'function'
5726     Mark the symbol as being a function name.
5727
5728'STT_GNU_IFUNC'
5729'gnu_indirect_function'
5730     Mark the symbol as an indirect function when evaluated during reloc
5731     processing.  (This is only supported on assemblers targeting GNU
5732     systems).
5733
5734'STT_OBJECT'
5735'object'
5736     Mark the symbol as being a data object.
5737
5738'STT_TLS'
5739'tls_object'
5740     Mark the symbol as being a thread-local data object.
5741
5742'STT_COMMON'
5743'common'
5744     Mark the symbol as being a common data object.
5745
5746'STT_NOTYPE'
5747'notype'
5748     Does not mark the symbol in any way.  It is supported just for
5749     completeness.
5750
5751'gnu_unique_object'
5752     Marks the symbol as being a globally unique data object.  The
5753     dynamic linker will make sure that in the entire process there is
5754     just one symbol with this name and type in use.  (This is only
5755     supported on assemblers targeting GNU systems).
5756
5757   Changing between incompatible types other than from/to STT_NOTYPE
5758will result in a diagnostic.  An intermediate change to STT_NOTYPE will
5759silence this.
5760
5761   Note: Some targets support extra types in addition to those listed
5762above.
5763
5764
5765File: as.info,  Node: Uleb128,  Next: Val,  Prev: Type,  Up: Pseudo Ops
5766
57677.99 '.uleb128 EXPRESSIONS'
5768===========================
5769
5770ULEB128 stands for "unsigned little endian base 128."  This is a
5771compact, variable length representation of numbers used by the DWARF
5772symbolic debugging format.  *Note '.sleb128': Sleb128.
5773
5774
5775File: as.info,  Node: Val,  Next: Version,  Prev: Uleb128,  Up: Pseudo Ops
5776
57777.100 '.val ADDR'
5778=================
5779
5780This directive, permitted only within '.def'/'.endef' pairs, records the
5781address ADDR as the value attribute of a symbol table entry.
5782
5783
5784File: as.info,  Node: Version,  Next: VTableEntry,  Prev: Val,  Up: Pseudo Ops
5785
57867.101 '.version "STRING"'
5787=========================
5788
5789This directive creates a '.note' section and places into it an ELF
5790formatted note of type NT_VERSION. The note's name is set to 'string'.
5791
5792
5793File: as.info,  Node: VTableEntry,  Next: VTableInherit,  Prev: Version,  Up: Pseudo Ops
5794
57957.102 '.vtable_entry TABLE, OFFSET'
5796===================================
5797
5798This directive finds or creates a symbol 'table' and creates a
5799'VTABLE_ENTRY' relocation for it with an addend of 'offset'.
5800
5801
5802File: as.info,  Node: VTableInherit,  Next: Warning,  Prev: VTableEntry,  Up: Pseudo Ops
5803
58047.103 '.vtable_inherit CHILD, PARENT'
5805=====================================
5806
5807This directive finds the symbol 'child' and finds or creates the symbol
5808'parent' and then creates a 'VTABLE_INHERIT' relocation for the parent
5809whose addend is the value of the child symbol.  As a special case the
5810parent name of '0' is treated as referring to the '*ABS*' section.
5811
5812
5813File: as.info,  Node: Warning,  Next: Weak,  Prev: VTableInherit,  Up: Pseudo Ops
5814
58157.104 '.warning "STRING"'
5816=========================
5817
5818Similar to the directive '.error' (*note '.error "STRING"': Error.), but
5819just emits a warning.
5820
5821
5822File: as.info,  Node: Weak,  Next: Weakref,  Prev: Warning,  Up: Pseudo Ops
5823
58247.105 '.weak NAMES'
5825===================
5826
5827This directive sets the weak attribute on the comma separated list of
5828symbol 'names'.  If the symbols do not already exist, they will be
5829created.
5830
5831   On COFF targets other than PE, weak symbols are a GNU extension.
5832This directive sets the weak attribute on the comma separated list of
5833symbol 'names'.  If the symbols do not already exist, they will be
5834created.
5835
5836   On the PE target, weak symbols are supported natively as weak
5837aliases.  When a weak symbol is created that is not an alias, GAS
5838creates an alternate symbol to hold the default value.
5839
5840
5841File: as.info,  Node: Weakref,  Next: Word,  Prev: Weak,  Up: Pseudo Ops
5842
58437.106 '.weakref ALIAS, TARGET'
5844==============================
5845
5846This directive creates an alias to the target symbol that enables the
5847symbol to be referenced with weak-symbol semantics, but without actually
5848making it weak.  If direct references or definitions of the symbol are
5849present, then the symbol will not be weak, but if all references to it
5850are through weak references, the symbol will be marked as weak in the
5851symbol table.
5852
5853   The effect is equivalent to moving all references to the alias to a
5854separate assembly source file, renaming the alias to the symbol in it,
5855declaring the symbol as weak there, and running a reloadable link to
5856merge the object files resulting from the assembly of the new source
5857file and the old source file that had the references to the alias
5858removed.
5859
5860   The alias itself never makes to the symbol table, and is entirely
5861handled within the assembler.
5862
5863
5864File: as.info,  Node: Word,  Next: Zero,  Prev: Weakref,  Up: Pseudo Ops
5865
58667.107 '.word EXPRESSIONS'
5867=========================
5868
5869This directive expects zero or more EXPRESSIONS, of any section,
5870separated by commas.
5871
5872   The size of the number emitted, and its byte order, depend on what
5873target computer the assembly is for.
5874
5875     _Warning: Special Treatment to support Compilers_
5876
5877   Machines with a 32-bit address space, but that do less than 32-bit
5878addressing, require the following special treatment.  If the machine of
5879interest to you does 32-bit addressing (or doesn't require it; *note
5880Machine Dependencies::), you can ignore this issue.
5881
5882   In order to assemble compiler output into something that works, 'as'
5883occasionally does strange things to '.word' directives.  Directives of
5884the form '.word sym1-sym2' are often emitted by compilers as part of
5885jump tables.  Therefore, when 'as' assembles a directive of the form
5886'.word sym1-sym2', and the difference between 'sym1' and 'sym2' does not
5887fit in 16 bits, 'as' creates a "secondary jump table", immediately
5888before the next label.  This secondary jump table is preceded by a
5889short-jump to the first byte after the secondary table.  This short-jump
5890prevents the flow of control from accidentally falling into the new
5891table.  Inside the table is a long-jump to 'sym2'.  The original '.word'
5892contains 'sym1' minus the address of the long-jump to 'sym2'.
5893
5894   If there were several occurrences of '.word sym1-sym2' before the
5895secondary jump table, all of them are adjusted.  If there was a '.word
5896sym3-sym4', that also did not fit in sixteen bits, a long-jump to 'sym4'
5897is included in the secondary jump table, and the '.word' directives are
5898adjusted to contain 'sym3' minus the address of the long-jump to 'sym4';
5899and so on, for as many entries in the original jump table as necessary.
5900
5901
5902File: as.info,  Node: Zero,  Next: 2byte,  Prev: Word,  Up: Pseudo Ops
5903
59047.108 '.zero SIZE'
5905==================
5906
5907This directive emits SIZE 0-valued bytes.  SIZE must be an absolute
5908expression.  This directive is actually an alias for the '.skip'
5909directive so it can take an optional second argument of the value to
5910store in the bytes instead of zero.  Using '.zero' in this way would be
5911confusing however.
5912
5913
5914File: as.info,  Node: 2byte,  Next: 4byte,  Prev: Zero,  Up: Pseudo Ops
5915
59167.109 '.2byte EXPRESSION [, EXPRESSION]*'
5917=========================================
5918
5919This directive expects zero or more expressions, separated by commas.
5920If there are no expressions then the directive does nothing.  Otherwise
5921each expression is evaluated in turn and placed in the next two bytes of
5922the current output section, using the endian model of the target.  If an
5923expression will not fit in two bytes, a warning message is displayed and
5924the least significant two bytes of the expression's value are used.  If
5925an expression cannot be evaluated at assembly time then relocations will
5926be generated in order to compute the value at link time.
5927
5928   This directive does not apply any alignment before or after inserting
5929the values.  As a result of this, if relocations are generated, they may
5930be different from those used for inserting values with a guaranteed
5931alignment.
5932
5933   This directive is only available for ELF targets,
5934
5935
5936File: as.info,  Node: 4byte,  Next: 8byte,  Prev: 2byte,  Up: Pseudo Ops
5937
59387.110 '.4byte EXPRESSION [, EXPRESSION]*'
5939=========================================
5940
5941Like the '.2byte' directive, except that it inserts unaligned, four byte
5942long values into the output.
5943
5944
5945File: as.info,  Node: 8byte,  Next: Deprecated,  Prev: 4byte,  Up: Pseudo Ops
5946
59477.111 '.8byte EXPRESSION [, EXPRESSION]*'
5948=========================================
5949
5950Like the '.2byte' directive, except that it inserts unaligned, eight
5951byte long bignum values into the output.
5952
5953
5954File: as.info,  Node: Deprecated,  Prev: 8byte,  Up: Pseudo Ops
5955
59567.112 Deprecated Directives
5957===========================
5958
5959One day these directives won't work.  They are included for
5960compatibility with older assemblers.
5961.abort
5962.line
5963
5964
5965File: as.info,  Node: Object Attributes,  Next: Machine Dependencies,  Prev: Pseudo Ops,  Up: Top
5966
59678 Object Attributes
5968*******************
5969
5970'as' assembles source files written for a specific architecture into
5971object files for that architecture.  But not all object files are alike.
5972Many architectures support incompatible variations.  For instance,
5973floating point arguments might be passed in floating point registers if
5974the object file requires hardware floating point support--or floating
5975point arguments might be passed in integer registers if the object file
5976supports processors with no hardware floating point unit.  Or, if two
5977objects are built for different generations of the same architecture,
5978the combination may require the newer generation at run-time.
5979
5980   This information is useful during and after linking.  At link time,
5981'ld' can warn about incompatible object files.  After link time, tools
5982like 'gdb' can use it to process the linked file correctly.
5983
5984   Compatibility information is recorded as a series of object
5985attributes.  Each attribute has a "vendor", "tag", and "value".  The
5986vendor is a string, and indicates who sets the meaning of the tag.  The
5987tag is an integer, and indicates what property the attribute describes.
5988The value may be a string or an integer, and indicates how the property
5989affects this object.  Missing attributes are the same as attributes with
5990a zero value or empty string value.
5991
5992   Object attributes were developed as part of the ABI for the ARM
5993Architecture.  The file format is documented in 'ELF for the ARM
5994Architecture'.
5995
5996* Menu:
5997
5998* GNU Object Attributes::               GNU Object Attributes
5999* Defining New Object Attributes::      Defining New Object Attributes
6000
6001
6002File: as.info,  Node: GNU Object Attributes,  Next: Defining New Object Attributes,  Up: Object Attributes
6003
60048.1 GNU Object Attributes
6005=========================
6006
6007The '.gnu_attribute' directive records an object attribute with vendor
6008'gnu'.
6009
6010   Except for 'Tag_compatibility', which has both an integer and a
6011string for its value, GNU attributes have a string value if the tag
6012number is odd and an integer value if the tag number is even.  The
6013second bit ('TAG & 2' is set for architecture-independent attributes and
6014clear for architecture-dependent ones.
6015
60168.1.1 Common GNU attributes
6017---------------------------
6018
6019These attributes are valid on all architectures.
6020
6021Tag_compatibility (32)
6022     The compatibility attribute takes an integer flag value and a
6023     vendor name.  If the flag value is 0, the file is compatible with
6024     other toolchains.  If it is 1, then the file is only compatible
6025     with the named toolchain.  If it is greater than 1, the file can
6026     only be processed by other toolchains under some private
6027     arrangement indicated by the flag value and the vendor name.
6028
60298.1.2 MIPS Attributes
6030---------------------
6031
6032Tag_GNU_MIPS_ABI_FP (4)
6033     The floating-point ABI used by this object file.  The value will
6034     be:
6035
6036        * 0 for files not affected by the floating-point ABI.
6037        * 1 for files using the hardware floating-point ABI with a
6038          standard double-precision FPU.
6039        * 2 for files using the hardware floating-point ABI with a
6040          single-precision FPU.
6041        * 3 for files using the software floating-point ABI.
6042        * 4 for files using the deprecated hardware floating-point ABI
6043          which used 64-bit floating-point registers, 32-bit
6044          general-purpose registers and increased the number of
6045          callee-saved floating-point registers.
6046        * 5 for files using the hardware floating-point ABI with a
6047          double-precision FPU with either 32-bit or 64-bit
6048          floating-point registers and 32-bit general-purpose registers.
6049        * 6 for files using the hardware floating-point ABI with 64-bit
6050          floating-point registers and 32-bit general-purpose registers.
6051        * 7 for files using the hardware floating-point ABI with 64-bit
6052          floating-point registers, 32-bit general-purpose registers and
6053          a rule that forbids the direct use of odd-numbered
6054          single-precision floating-point registers.
6055
60568.1.3 PowerPC Attributes
6057------------------------
6058
6059Tag_GNU_Power_ABI_FP (4)
6060     The floating-point ABI used by this object file.  The value will
6061     be:
6062
6063        * 0 for files not affected by the floating-point ABI.
6064        * 1 for files using double-precision hardware floating-point
6065          ABI.
6066        * 2 for files using the software floating-point ABI.
6067        * 3 for files using single-precision hardware floating-point
6068          ABI.
6069
6070Tag_GNU_Power_ABI_Vector (8)
6071     The vector ABI used by this object file.  The value will be:
6072
6073        * 0 for files not affected by the vector ABI.
6074        * 1 for files using general purpose registers to pass vectors.
6075        * 2 for files using AltiVec registers to pass vectors.
6076        * 3 for files using SPE registers to pass vectors.
6077
60788.1.4 IBM z Systems Attributes
6079------------------------------
6080
6081Tag_GNU_S390_ABI_Vector (8)
6082     The vector ABI used by this object file.  The value will be:
6083
6084        * 0 for files not affected by the vector ABI.
6085        * 1 for files using software vector ABI.
6086        * 2 for files using hardware vector ABI.
6087
60888.1.5 MSP430 Attributes
6089-----------------------
6090
6091Tag_GNU_MSP430_Data_Region (4)
6092     The data region used by this object file.  The value will be:
6093
6094        * 0 for files not using the large memory model.
6095        * 1 for files which have been compiled with the condition that
6096          all data is in the lower memory region, i.e.  below address
6097          0x10000.
6098        * 2 for files which allow data to be placed in the full 20-bit
6099          memory range.
6100
6101
6102File: as.info,  Node: Defining New Object Attributes,  Prev: GNU Object Attributes,  Up: Object Attributes
6103
61048.2 Defining New Object Attributes
6105==================================
6106
6107If you want to define a new GNU object attribute, here are the places
6108you will need to modify.  New attributes should be discussed on the
6109'binutils' mailing list.
6110
6111   * This manual, which is the official register of attributes.
6112   * The header for your architecture 'include/elf', to define the tag.
6113   * The 'bfd' support file for your architecture, to merge the
6114     attribute and issue any appropriate link warnings.
6115   * Test cases in 'ld/testsuite' for merging and link warnings.
6116   * 'binutils/readelf.c' to display your attribute.
6117   * GCC, if you want the compiler to mark the attribute automatically.
6118
6119
6120File: as.info,  Node: Machine Dependencies,  Next: Reporting Bugs,  Prev: Object Attributes,  Up: Top
6121
61229 Machine Dependent Features
6123****************************
6124
6125The machine instruction sets are (almost by definition) different on
6126each machine where 'as' runs.  Floating point representations vary as
6127well, and 'as' often supports a few additional directives or
6128command-line options for compatibility with other assemblers on a
6129particular platform.  Finally, some versions of 'as' support special
6130pseudo-instructions for branch optimization.
6131
6132   This chapter discusses most of these differences, though it does not
6133include details on any machine's instruction set.  For details on that
6134subject, see the hardware manufacturer's manual.
6135
6136* Menu:
6137
6138* AArch64-Dependent::		AArch64 Dependent Features
6139* Alpha-Dependent::		Alpha Dependent Features
6140* ARC-Dependent::               ARC Dependent Features
6141* ARM-Dependent::               ARM Dependent Features
6142* AVR-Dependent::               AVR Dependent Features
6143* Blackfin-Dependent::		Blackfin Dependent Features
6144* BPF-Dependent::		BPF Dependent Features
6145* CR16-Dependent::              CR16 Dependent Features
6146* CRIS-Dependent::              CRIS Dependent Features
6147* C-SKY-Dependent::             C-SKY Dependent Features
6148* D10V-Dependent::              D10V Dependent Features
6149* D30V-Dependent::              D30V Dependent Features
6150* Epiphany-Dependent::          EPIPHANY Dependent Features
6151* H8/300-Dependent::            Renesas H8/300 Dependent Features
6152* HPPA-Dependent::              HPPA Dependent Features
6153* i386-Dependent::              Intel 80386 and AMD x86-64 Dependent Features
6154* IA-64-Dependent::             Intel IA-64 Dependent Features
6155* IP2K-Dependent::              IP2K Dependent Features
6156* LM32-Dependent::              LM32 Dependent Features
6157* M32C-Dependent::              M32C Dependent Features
6158* M32R-Dependent::              M32R Dependent Features
6159* M68K-Dependent::              M680x0 Dependent Features
6160* M68HC11-Dependent::           M68HC11 and 68HC12 Dependent Features
6161* S12Z-Dependent::              S12Z Dependent Features
6162* Meta-Dependent ::             Meta Dependent Features
6163* MicroBlaze-Dependent::	MICROBLAZE Dependent Features
6164* MIPS-Dependent::              MIPS Dependent Features
6165* MMIX-Dependent::              MMIX Dependent Features
6166* MSP430-Dependent::		MSP430 Dependent Features
6167* NDS32-Dependent::             Andes NDS32 Dependent Features
6168* NiosII-Dependent::            Altera Nios II Dependent Features
6169* NS32K-Dependent::		NS32K Dependent Features
6170* OpenRISC-Dependent::		OpenRISC 1000 Features
6171* PDP-11-Dependent::            PDP-11 Dependent Features
6172* PJ-Dependent::                picoJava Dependent Features
6173* PPC-Dependent::               PowerPC Dependent Features
6174* PRU-Dependent::               PRU Dependent Features
6175* RISC-V-Dependent::            RISC-V Dependent Features
6176* RL78-Dependent::              RL78 Dependent Features
6177* RX-Dependent::                RX Dependent Features
6178* S/390-Dependent::             IBM S/390 Dependent Features
6179* SCORE-Dependent::             SCORE Dependent Features
6180* SH-Dependent::                Renesas / SuperH SH Dependent Features
6181* Sparc-Dependent::             SPARC Dependent Features
6182* TIC54X-Dependent::            TI TMS320C54x Dependent Features
6183* TIC6X-Dependent ::            TI TMS320C6x Dependent Features
6184* TILE-Gx-Dependent ::          Tilera TILE-Gx Dependent Features
6185* TILEPro-Dependent ::          Tilera TILEPro Dependent Features
6186* V850-Dependent::              V850 Dependent Features
6187* Vax-Dependent::               VAX Dependent Features
6188* Visium-Dependent::            Visium Dependent Features
6189* WebAssembly-Dependent::       WebAssembly Dependent Features
6190* XGATE-Dependent::             XGATE Dependent Features
6191* XSTORMY16-Dependent::         XStormy16 Dependent Features
6192* Xtensa-Dependent::            Xtensa Dependent Features
6193* Z80-Dependent::               Z80 Dependent Features
6194* Z8000-Dependent::             Z8000 Dependent Features
6195
6196
6197File: as.info,  Node: AArch64-Dependent,  Next: Alpha-Dependent,  Up: Machine Dependencies
6198
61999.1 AArch64 Dependent Features
6200==============================
6201
6202* Menu:
6203
6204* AArch64 Options::              Options
6205* AArch64 Extensions::		 Extensions
6206* AArch64 Syntax::               Syntax
6207* AArch64 Floating Point::       Floating Point
6208* AArch64 Directives::           AArch64 Machine Directives
6209* AArch64 Opcodes::              Opcodes
6210* AArch64 Mapping Symbols::      Mapping Symbols
6211
6212
6213File: as.info,  Node: AArch64 Options,  Next: AArch64 Extensions,  Up: AArch64-Dependent
6214
62159.1.1 Options
6216-------------
6217
6218'-EB'
6219     This option specifies that the output generated by the assembler
6220     should be marked as being encoded for a big-endian processor.
6221
6222'-EL'
6223     This option specifies that the output generated by the assembler
6224     should be marked as being encoded for a little-endian processor.
6225
6226'-mabi=ABI'
6227     Specify which ABI the source code uses.  The recognized arguments
6228     are: 'ilp32' and 'lp64', which decides the generated object file in
6229     ELF32 and ELF64 format respectively.  The default is 'lp64'.
6230
6231'-mcpu=PROCESSOR[+EXTENSION...]'
6232     This option specifies the target processor.  The assembler will
6233     issue an error message if an attempt is made to assemble an
6234     instruction which will not execute on the target processor.  The
6235     following processor names are recognized: 'cortex-a34',
6236     'cortex-a35', 'cortex-a53', 'cortex-a55', 'cortex-a57',
6237     'cortex-a65', 'cortex-a65ae', 'cortex-a72', 'cortex-a73',
6238     'cortex-a75', 'cortex-a76', 'cortex-a76ae', 'cortex-a77', 'ares',
6239     'exynos-m1', 'falkor', 'neoverse-n1', 'neoverse-e1', 'qdf24xx',
6240     'saphira', 'thunderx', 'vulcan', 'xgene1' and 'xgene2'.  The
6241     special name 'all' may be used to allow the assembler to accept
6242     instructions valid for any supported processor, including all
6243     optional extensions.
6244
6245     In addition to the basic instruction set, the assembler can be told
6246     to accept, or restrict, various extension mnemonics that extend the
6247     processor.  *Note AArch64 Extensions::.
6248
6249     If some implementations of a particular processor can have an
6250     extension, then then those extensions are automatically enabled.
6251     Consequently, you will not normally have to specify any additional
6252     extensions.
6253
6254'-march=ARCHITECTURE[+EXTENSION...]'
6255     This option specifies the target architecture.  The assembler will
6256     issue an error message if an attempt is made to assemble an
6257     instruction which will not execute on the target architecture.  The
6258     following architecture names are recognized: 'armv8-a',
6259     'armv8.1-a', 'armv8.2-a', 'armv8.3-a', 'armv8.4-a' 'armv8.5-a', and
6260     'armv8.6-a'.
6261
6262     If both '-mcpu' and '-march' are specified, the assembler will use
6263     the setting for '-mcpu'.  If neither are specified, the assembler
6264     will default to '-mcpu=all'.
6265
6266     The architecture option can be extended with the same instruction
6267     set extension options as the '-mcpu' option.  Unlike '-mcpu',
6268     extensions are not always enabled by default, *Note AArch64
6269     Extensions::.
6270
6271'-mverbose-error'
6272     This option enables verbose error messages for AArch64 gas.  This
6273     option is enabled by default.
6274
6275'-mno-verbose-error'
6276     This option disables verbose error messages in AArch64 gas.
6277
6278
6279File: as.info,  Node: AArch64 Extensions,  Next: AArch64 Syntax,  Prev: AArch64 Options,  Up: AArch64-Dependent
6280
62819.1.2 Architecture Extensions
6282-----------------------------
6283
6284The table below lists the permitted architecture extensions that are
6285supported by the assembler and the conditions under which they are
6286automatically enabled.
6287
6288   Multiple extensions may be specified, separated by a '+'.  Extension
6289mnemonics may also be removed from those the assembler accepts.  This is
6290done by prepending 'no' to the option that adds the extension.
6291Extensions that are removed must be listed after all extensions that
6292have been added.
6293
6294   Enabling an extension that requires other extensions will
6295automatically cause those extensions to be enabled.  Similarly,
6296disabling an extension that is required by other extensions will
6297automatically cause those extensions to be disabled.
6298
6299Extension Minimum      Enabled by   Description
6300          Architecture default
6301----------------------------------------------------------------------------
6302'i8mm'    ARMv8.2-A    ARMv8.6-A    Enable Int8 Matrix Multiply
6303                       or later     extension.
6304'f32mm'   ARMv8.2-A    No           Enable F32 Matrix Multiply extension.
6305'f64mm'   ARMv8.2-A    No           Enable F64 Matrix Multiply extension.
6306'bf16'    ARMv8.2-A    ARMv8.6-A    Enable BFloat16 extension.
6307                       or later
6308'compnum' ARMv8.2-A    ARMv8.3-A    Enable the complex number SIMD
6309                       or later     extensions.  This implies 'fp16' and
6310                                    'simd'.
6311'crc'     ARMv8-A      ARMv8.1-A    Enable CRC instructions.
6312                       or later
6313'crypto'  ARMv8-A      No           Enable cryptographic extensions.
6314                                    This implies 'fp', 'simd', 'aes' and
6315                                    'sha2'.
6316'aes'     ARMv8-A      No           Enable the AES cryptographic
6317                                    extensions.  This implies 'fp' and
6318                                    'simd'.
6319'sha2'    ARMv8-A      No           Enable the SHA2 cryptographic
6320                                    extensions.  This implies 'fp' and
6321                                    'simd'.
6322'sha3'    ARMv8.2-A    No           Enable the ARMv8.2-A SHA2 and SHA3
6323                                    cryptographic extensions.  This
6324                                    implies 'fp', 'simd' and 'sha2'.
6325'sm4'     ARMv8.2-A    No           Enable the ARMv8.2-A SM3 and SM4
6326                                    cryptographic extensions.  This
6327                                    implies 'fp' and 'simd'.
6328'fp'      ARMv8-A      ARMv8-A or   Enable floating-point extensions.
6329                       later
6330'fp16'    ARMv8.2-A    ARMv8.2-A    Enable ARMv8.2 16-bit floating-point
6331                       or later     support.  This implies 'fp'.
6332'lor'     ARMv8-A      ARMv8.1-A    Enable Limited Ordering Regions
6333                       or later     extensions.
6334'lse'     ARMv8-A      ARMv8.1-A    Enable Large System extensions.
6335                       or later
6336'pan'     ARMv8-A      ARMv8.1-A    Enable Privileged Access Never
6337                       or later     support.
6338'profile' ARMv8.2-A    No           Enable statistical profiling
6339                                    extensions.
6340'ras'     ARMv8-A      ARMv8.2-A    Enable the Reliability, Availability
6341                       or later     and Serviceability extension.
6342'rcpc'    ARMv8.2-A    ARMv8.3-A    Enable the weak release consistency
6343                       or later     extension.
6344'rdma'    ARMv8-A      ARMv8.1-A    Enable ARMv8.1 Advanced SIMD
6345                       or later     extensions.  This implies 'simd'.
6346'simd'    ARMv8-A      ARMv8-A or   Enable Advanced SIMD extensions.
6347                       later        This implies 'fp'.
6348'sve'     ARMv8.2-A    No           Enable the Scalable Vector
6349                                    Extensions.  This implies 'fp16',
6350                                    'simd' and 'compnum'.
6351'dotprod' ARMv8.2-A    ARMv8.4-A    Enable the Dot Product extension.
6352                       or later     This implies 'simd'.
6353'fp16fml' ARMv8.2-A    ARMv8.4-A    Enable ARMv8.2 16-bit floating-point
6354                       or later     multiplication variant support.  This
6355                                    implies 'fp16'.
6356'sb'      ARMv8-A      ARMv8.5-A    Enable the speculation barrier
6357                       or later     instruction sb.
6358'predres' ARMv8-A      ARMv8.5-A    Enable the Execution and Data and
6359                       or later     Prediction instructions.
6360'rng'     ARMv8.5-A    No           Enable ARMv8.5-A random number
6361                                    instructions.
6362'ssbs'    ARMv8-A      ARMv8.5-A    Enable Speculative Store Bypassing
6363                       or later     Safe state read and write.
6364'memtag'  ARMv8.5-A    No           Enable ARMv8.5-A Memory Tagging
6365                                    Extensions.
6366'tme'     ARMv8-A      No           Enable Transactional Memory
6367                                    Extensions.
6368'sve2'    ARMv8-A      No           Enable the SVE2 Extension.
6369'sve2-bitperm'ARMv8-A  No           Enable SVE2 BITPERM Extension.
6370'sve2-sm4'ARMv8-A      No           Enable SVE2 SM4 Extension.
6371'sve2-aes'ARMv8-A      No           Enable SVE2 AES Extension.  This also
6372                                    enables the .Q->.B form of the
6373                                    'pmullt' and 'pmullb' instructions.
6374'sve2-sha3'ARMv8-A     No           Enable SVE2 SHA3 Extension.
6375
6376
6377File: as.info,  Node: AArch64 Syntax,  Next: AArch64 Floating Point,  Prev: AArch64 Extensions,  Up: AArch64-Dependent
6378
63799.1.3 Syntax
6380------------
6381
6382* Menu:
6383
6384* AArch64-Chars::                Special Characters
6385* AArch64-Regs::                 Register Names
6386* AArch64-Relocations::	     Relocations
6387
6388
6389File: as.info,  Node: AArch64-Chars,  Next: AArch64-Regs,  Up: AArch64 Syntax
6390
63919.1.3.1 Special Characters
6392..........................
6393
6394The presence of a '//' on a line indicates the start of a comment that
6395extends to the end of the current line.  If a '#' appears as the first
6396character of a line, the whole line is treated as a comment.
6397
6398   The ';' character can be used instead of a newline to separate
6399statements.
6400
6401   The '#' can be optionally used to indicate immediate operands.
6402
6403
6404File: as.info,  Node: AArch64-Regs,  Next: AArch64-Relocations,  Prev: AArch64-Chars,  Up: AArch64 Syntax
6405
64069.1.3.2 Register Names
6407......................
6408
6409Please refer to the section '4.4 Register Names' of 'ARMv8 Instruction
6410Set Overview', which is available at <http://infocenter.arm.com>.
6411
6412
6413File: as.info,  Node: AArch64-Relocations,  Prev: AArch64-Regs,  Up: AArch64 Syntax
6414
64159.1.3.3 Relocations
6416...................
6417
6418Relocations for 'MOVZ' and 'MOVK' instructions can be generated by
6419prefixing the label with '#:abs_g2:' etc.  For example to load the
642048-bit absolute address of FOO into x0:
6421
6422             movz x0, #:abs_g2:foo		// bits 32-47, overflow check
6423             movk x0, #:abs_g1_nc:foo	// bits 16-31, no overflow check
6424             movk x0, #:abs_g0_nc:foo	// bits  0-15, no overflow check
6425
6426   Relocations for 'ADRP', and 'ADD', 'LDR' or 'STR' instructions can be
6427generated by prefixing the label with ':pg_hi21:' and '#:lo12:'
6428respectively.
6429
6430   For example to use 33-bit (+/-4GB) pc-relative addressing to load the
6431address of FOO into x0:
6432
6433             adrp x0, :pg_hi21:foo
6434             add  x0, x0, #:lo12:foo
6435
6436   Or to load the value of FOO into x0:
6437
6438             adrp x0, :pg_hi21:foo
6439             ldr  x0, [x0, #:lo12:foo]
6440
6441   Note that ':pg_hi21:' is optional.
6442
6443             adrp x0, foo
6444
6445   is equivalent to
6446
6447             adrp x0, :pg_hi21:foo
6448
6449
6450File: as.info,  Node: AArch64 Floating Point,  Next: AArch64 Directives,  Prev: AArch64 Syntax,  Up: AArch64-Dependent
6451
64529.1.4 Floating Point
6453--------------------
6454
6455The AArch64 architecture uses IEEE floating-point numbers.
6456
6457
6458File: as.info,  Node: AArch64 Directives,  Next: AArch64 Opcodes,  Prev: AArch64 Floating Point,  Up: AArch64-Dependent
6459
64609.1.5 AArch64 Machine Directives
6461--------------------------------
6462
6463'.arch NAME'
6464     Select the target architecture.  Valid values for NAME are the same
6465     as for the '-march' command-line option.
6466
6467     Specifying '.arch' clears any previously selected architecture
6468     extensions.
6469
6470'.arch_extension NAME'
6471     Add or remove an architecture extension to the target architecture.
6472     Valid values for NAME are the same as those accepted as
6473     architectural extensions by the '-mcpu' command-line option.
6474
6475     '.arch_extension' may be used multiple times to add or remove
6476     extensions incrementally to the architecture being compiled for.
6477
6478'.bss'
6479     This directive switches to the '.bss' section.
6480
6481'.cpu NAME'
6482     Set the target processor.  Valid values for NAME are the same as
6483     those accepted by the '-mcpu=' command-line option.
6484
6485'.dword EXPRESSIONS'
6486     The '.dword' directive produces 64 bit values.
6487
6488'.even'
6489     The '.even' directive aligns the output on the next even byte
6490     boundary.
6491
6492'.float16 VALUE [,...,VALUE_N]'
6493     Place the half precision floating point representation of one or
6494     more floating-point values into the current section.  The format
6495     used to encode the floating point values is always the IEEE
6496     754-2008 half precision floating point format.
6497
6498'.inst EXPRESSIONS'
6499     Inserts the expressions into the output as if they were
6500     instructions, rather than data.
6501
6502'.ltorg'
6503     This directive causes the current contents of the literal pool to
6504     be dumped into the current section (which is assumed to be the
6505     .text section) at the current location (aligned to a word
6506     boundary).  GAS maintains a separate literal pool for each section
6507     and each sub-section.  The '.ltorg' directive will only affect the
6508     literal pool of the current section and sub-section.  At the end of
6509     assembly all remaining, un-empty literal pools will automatically
6510     be dumped.
6511
6512     Note - older versions of GAS would dump the current literal pool
6513     any time a section change occurred.  This is no longer done, since
6514     it prevents accurate control of the placement of literal pools.
6515
6516'.pool'
6517     This is a synonym for .ltorg.
6518
6519'NAME .req REGISTER NAME'
6520     This creates an alias for REGISTER NAME called NAME.  For example:
6521
6522                  foo .req w0
6523
6524     ip0, ip1, lr and fp are automatically defined to alias to X16, X17,
6525     X30 and X29 respectively.
6526
6527'.tlsdescadd'
6528     Emits a TLSDESC_ADD reloc on the next instruction.
6529
6530'.tlsdesccall'
6531     Emits a TLSDESC_CALL reloc on the next instruction.
6532
6533'.tlsdescldr'
6534     Emits a TLSDESC_LDR reloc on the next instruction.
6535
6536'.unreq ALIAS-NAME'
6537     This undefines a register alias which was previously defined using
6538     the 'req' directive.  For example:
6539
6540                  foo .req w0
6541                  .unreq foo
6542
6543     An error occurs if the name is undefined.  Note - this pseudo op
6544     can be used to delete builtin in register name aliases (eg 'w0').
6545     This should only be done if it is really necessary.
6546
6547'.variant_pcs SYMBOL'
6548     This directive marks SYMBOL referencing a function that may follow
6549     a variant procedure call standard with different register usage
6550     convention from the base procedure call standard.
6551
6552'.xword EXPRESSIONS'
6553     The '.xword' directive produces 64 bit values.  This is the same as
6554     the '.dword' directive.
6555
6556'.cfi_b_key_frame'
6557     The '.cfi_b_key_frame' directive inserts a 'B' character into the
6558     CIE corresponding to the current frame's FDE, meaning that its
6559     return address has been signed with the B-key.  If two frames are
6560     signed with differing keys then they will not share the same CIE.
6561     This information is intended to be used by the stack unwinder in
6562     order to properly authenticate return addresses.
6563
6564
6565File: as.info,  Node: AArch64 Opcodes,  Next: AArch64 Mapping Symbols,  Prev: AArch64 Directives,  Up: AArch64-Dependent
6566
65679.1.6 Opcodes
6568-------------
6569
6570GAS implements all the standard AArch64 opcodes.  It also implements
6571several pseudo opcodes, including several synthetic load instructions.
6572
6573'LDR ='
6574            ldr <register> , =<expression>
6575
6576     The constant expression will be placed into the nearest literal
6577     pool (if it not already there) and a PC-relative LDR instruction
6578     will be generated.
6579
6580   For more information on the AArch64 instruction set and assembly
6581language notation, see 'ARMv8 Instruction Set Overview' available at
6582<http://infocenter.arm.com>.
6583
6584
6585File: as.info,  Node: AArch64 Mapping Symbols,  Prev: AArch64 Opcodes,  Up: AArch64-Dependent
6586
65879.1.7 Mapping Symbols
6588---------------------
6589
6590The AArch64 ELF specification requires that special symbols be inserted
6591into object files to mark certain features:
6592
6593'$x'
6594     At the start of a region of code containing AArch64 instructions.
6595
6596'$d'
6597     At the start of a region of data.
6598
6599
6600File: as.info,  Node: Alpha-Dependent,  Next: ARC-Dependent,  Prev: AArch64-Dependent,  Up: Machine Dependencies
6601
66029.2 Alpha Dependent Features
6603============================
6604
6605* Menu:
6606
6607* Alpha Notes::                Notes
6608* Alpha Options::              Options
6609* Alpha Syntax::               Syntax
6610* Alpha Floating Point::       Floating Point
6611* Alpha Directives::           Alpha Machine Directives
6612* Alpha Opcodes::              Opcodes
6613
6614
6615File: as.info,  Node: Alpha Notes,  Next: Alpha Options,  Up: Alpha-Dependent
6616
66179.2.1 Notes
6618-----------
6619
6620The documentation here is primarily for the ELF object format.  'as'
6621also supports the ECOFF and EVAX formats, but features specific to these
6622formats are not yet documented.
6623
6624
6625File: as.info,  Node: Alpha Options,  Next: Alpha Syntax,  Prev: Alpha Notes,  Up: Alpha-Dependent
6626
66279.2.2 Options
6628-------------
6629
6630'-mCPU'
6631     This option specifies the target processor.  If an attempt is made
6632     to assemble an instruction which will not execute on the target
6633     processor, the assembler may either expand the instruction as a
6634     macro or issue an error message.  This option is equivalent to the
6635     '.arch' directive.
6636
6637     The following processor names are recognized: '21064', '21064a',
6638     '21066', '21068', '21164', '21164a', '21164pc', '21264', '21264a',
6639     '21264b', 'ev4', 'ev5', 'lca45', 'ev5', 'ev56', 'pca56', 'ev6',
6640     'ev67', 'ev68'.  The special name 'all' may be used to allow the
6641     assembler to accept instructions valid for any Alpha processor.
6642
6643     In order to support existing practice in OSF/1 with respect to
6644     '.arch', and existing practice within 'MILO' (the Linux ARC
6645     bootloader), the numbered processor names (e.g. 21064) enable the
6646     processor-specific PALcode instructions, while the "electro-vlasic"
6647     names (e.g. 'ev4') do not.
6648
6649'-mdebug'
6650'-no-mdebug'
6651     Enables or disables the generation of '.mdebug' encapsulation for
6652     stabs directives and procedure descriptors.  The default is to
6653     automatically enable '.mdebug' when the first stabs directive is
6654     seen.
6655
6656'-relax'
6657     This option forces all relocations to be put into the object file,
6658     instead of saving space and resolving some relocations at assembly
6659     time.  Note that this option does not propagate all symbol
6660     arithmetic into the object file, because not all symbol arithmetic
6661     can be represented.  However, the option can still be useful in
6662     specific applications.
6663
6664'-replace'
6665'-noreplace'
6666     Enables or disables the optimization of procedure calls, both at
6667     assemblage and at link time.  These options are only available for
6668     VMS targets and '-replace' is the default.  See section 1.4.1 of
6669     the OpenVMS Linker Utility Manual.
6670
6671'-g'
6672     This option is used when the compiler generates debug information.
6673     When 'gcc' is using 'mips-tfile' to generate debug information for
6674     ECOFF, local labels must be passed through to the object file.
6675     Otherwise this option has no effect.
6676
6677'-GSIZE'
6678     A local common symbol larger than SIZE is placed in '.bss', while
6679     smaller symbols are placed in '.sbss'.
6680
6681'-F'
6682'-32addr'
6683     These options are ignored for backward compatibility.
6684
6685
6686File: as.info,  Node: Alpha Syntax,  Next: Alpha Floating Point,  Prev: Alpha Options,  Up: Alpha-Dependent
6687
66889.2.3 Syntax
6689------------
6690
6691The assembler syntax closely follow the Alpha Reference Manual;
6692assembler directives and general syntax closely follow the OSF/1 and
6693OpenVMS syntax, with a few differences for ELF.
6694
6695* Menu:
6696
6697* Alpha-Chars::                Special Characters
6698* Alpha-Regs::                 Register Names
6699* Alpha-Relocs::               Relocations
6700
6701
6702File: as.info,  Node: Alpha-Chars,  Next: Alpha-Regs,  Up: Alpha Syntax
6703
67049.2.3.1 Special Characters
6705..........................
6706
6707'#' is the line comment character.  Note that if '#' is the first
6708character on a line then it can also be a logical line number directive
6709(*note Comments::) or a preprocessor control command (*note
6710Preprocessing::).
6711
6712   ';' can be used instead of a newline to separate statements.
6713
6714
6715File: as.info,  Node: Alpha-Regs,  Next: Alpha-Relocs,  Prev: Alpha-Chars,  Up: Alpha Syntax
6716
67179.2.3.2 Register Names
6718......................
6719
6720The 32 integer registers are referred to as '$N' or '$rN'.  In addition,
6721registers 15, 28, 29, and 30 may be referred to by the symbols '$fp',
6722'$at', '$gp', and '$sp' respectively.
6723
6724   The 32 floating-point registers are referred to as '$fN'.
6725
6726
6727File: as.info,  Node: Alpha-Relocs,  Prev: Alpha-Regs,  Up: Alpha Syntax
6728
67299.2.3.3 Relocations
6730...................
6731
6732Some of these relocations are available for ECOFF, but mostly only for
6733ELF. They are modeled after the relocation format introduced in Digital
6734Unix 4.0, but there are additions.
6735
6736   The format is '!TAG' or '!TAG!NUMBER' where TAG is the name of the
6737relocation.  In some cases NUMBER is used to relate specific
6738instructions.
6739
6740   The relocation is placed at the end of the instruction like so:
6741
6742     ldah  $0,a($29)    !gprelhigh
6743     lda   $0,a($0)     !gprellow
6744     ldq   $1,b($29)    !literal!100
6745     ldl   $2,0($1)     !lituse_base!100
6746
6747'!literal'
6748'!literal!N'
6749     Used with an 'ldq' instruction to load the address of a symbol from
6750     the GOT.
6751
6752     A sequence number N is optional, and if present is used to pair
6753     'lituse' relocations with this 'literal' relocation.  The 'lituse'
6754     relocations are used by the linker to optimize the code based on
6755     the final location of the symbol.
6756
6757     Note that these optimizations are dependent on the data flow of the
6758     program.  Therefore, if _any_ 'lituse' is paired with a 'literal'
6759     relocation, then _all_ uses of the register set by the 'literal'
6760     instruction must also be marked with 'lituse' relocations.  This is
6761     because the original 'literal' instruction may be deleted or
6762     transformed into another instruction.
6763
6764     Also note that there may be a one-to-many relationship between
6765     'literal' and 'lituse', but not a many-to-one.  That is, if there
6766     are two code paths that load up the same address and feed the value
6767     to a single use, then the use may not use a 'lituse' relocation.
6768
6769'!lituse_base!N'
6770     Used with any memory format instruction (e.g. 'ldl') to indicate
6771     that the literal is used for an address load.  The offset field of
6772     the instruction must be zero.  During relaxation, the code may be
6773     altered to use a gp-relative load.
6774
6775'!lituse_jsr!N'
6776     Used with a register branch format instruction (e.g. 'jsr') to
6777     indicate that the literal is used for a call.  During relaxation,
6778     the code may be altered to use a direct branch (e.g. 'bsr').
6779
6780'!lituse_jsrdirect!N'
6781     Similar to 'lituse_jsr', but also that this call cannot be vectored
6782     through a PLT entry.  This is useful for functions with special
6783     calling conventions which do not allow the normal call-clobbered
6784     registers to be clobbered.
6785
6786'!lituse_bytoff!N'
6787     Used with a byte mask instruction (e.g. 'extbl') to indicate that
6788     only the low 3 bits of the address are relevant.  During
6789     relaxation, the code may be altered to use an immediate instead of
6790     a register shift.
6791
6792'!lituse_addr!N'
6793     Used with any other instruction to indicate that the original
6794     address is in fact used, and the original 'ldq' instruction may not
6795     be altered or deleted.  This is useful in conjunction with
6796     'lituse_jsr' to test whether a weak symbol is defined.
6797
6798          ldq  $27,foo($29)   !literal!1
6799          beq  $27,is_undef   !lituse_addr!1
6800          jsr  $26,($27),foo  !lituse_jsr!1
6801
6802'!lituse_tlsgd!N'
6803     Used with a register branch format instruction to indicate that the
6804     literal is the call to '__tls_get_addr' used to compute the address
6805     of the thread-local storage variable whose descriptor was loaded
6806     with '!tlsgd!N'.
6807
6808'!lituse_tlsldm!N'
6809     Used with a register branch format instruction to indicate that the
6810     literal is the call to '__tls_get_addr' used to compute the address
6811     of the base of the thread-local storage block for the current
6812     module.  The descriptor for the module must have been loaded with
6813     '!tlsldm!N'.
6814
6815'!gpdisp!N'
6816     Used with 'ldah' and 'lda' to load the GP from the current address,
6817     a-la the 'ldgp' macro.  The source register for the 'ldah'
6818     instruction must contain the address of the 'ldah' instruction.
6819     There must be exactly one 'lda' instruction paired with the 'ldah'
6820     instruction, though it may appear anywhere in the instruction
6821     stream.  The immediate operands must be zero.
6822
6823          bsr  $26,foo
6824          ldah $29,0($26)     !gpdisp!1
6825          lda  $29,0($29)     !gpdisp!1
6826
6827'!gprelhigh'
6828     Used with an 'ldah' instruction to add the high 16 bits of a 32-bit
6829     displacement from the GP.
6830
6831'!gprellow'
6832     Used with any memory format instruction to add the low 16 bits of a
6833     32-bit displacement from the GP.
6834
6835'!gprel'
6836     Used with any memory format instruction to add a 16-bit
6837     displacement from the GP.
6838
6839'!samegp'
6840     Used with any branch format instruction to skip the GP load at the
6841     target address.  The referenced symbol must have the same GP as the
6842     source object file, and it must be declared to either not use '$27'
6843     or perform a standard GP load in the first two instructions via the
6844     '.prologue' directive.
6845
6846'!tlsgd'
6847'!tlsgd!N'
6848     Used with an 'lda' instruction to load the address of a TLS
6849     descriptor for a symbol in the GOT.
6850
6851     The sequence number N is optional, and if present it used to pair
6852     the descriptor load with both the 'literal' loading the address of
6853     the '__tls_get_addr' function and the 'lituse_tlsgd' marking the
6854     call to that function.
6855
6856     For proper relaxation, both the 'tlsgd', 'literal' and 'lituse'
6857     relocations must be in the same extended basic block.  That is, the
6858     relocation with the lowest address must be executed first at
6859     runtime.
6860
6861'!tlsldm'
6862'!tlsldm!N'
6863     Used with an 'lda' instruction to load the address of a TLS
6864     descriptor for the current module in the GOT.
6865
6866     Similar in other respects to 'tlsgd'.
6867
6868'!gotdtprel'
6869     Used with an 'ldq' instruction to load the offset of the TLS symbol
6870     within its module's thread-local storage block.  Also known as the
6871     dynamic thread pointer offset or dtp-relative offset.
6872
6873'!dtprelhi'
6874'!dtprello'
6875'!dtprel'
6876     Like 'gprel' relocations except they compute dtp-relative offsets.
6877
6878'!gottprel'
6879     Used with an 'ldq' instruction to load the offset of the TLS symbol
6880     from the thread pointer.  Also known as the tp-relative offset.
6881
6882'!tprelhi'
6883'!tprello'
6884'!tprel'
6885     Like 'gprel' relocations except they compute tp-relative offsets.
6886
6887
6888File: as.info,  Node: Alpha Floating Point,  Next: Alpha Directives,  Prev: Alpha Syntax,  Up: Alpha-Dependent
6889
68909.2.4 Floating Point
6891--------------------
6892
6893The Alpha family uses both IEEE and VAX floating-point numbers.
6894
6895
6896File: as.info,  Node: Alpha Directives,  Next: Alpha Opcodes,  Prev: Alpha Floating Point,  Up: Alpha-Dependent
6897
68989.2.5 Alpha Assembler Directives
6899--------------------------------
6900
6901'as' for the Alpha supports many additional directives for compatibility
6902with the native assembler.  This section describes them only briefly.
6903
6904   These are the additional directives in 'as' for the Alpha:
6905
6906'.arch CPU'
6907     Specifies the target processor.  This is equivalent to the '-mCPU'
6908     command-line option.  *Note Options: Alpha Options, for a list of
6909     values for CPU.
6910
6911'.ent FUNCTION[, N]'
6912     Mark the beginning of FUNCTION.  An optional number may follow for
6913     compatibility with the OSF/1 assembler, but is ignored.  When
6914     generating '.mdebug' information, this will create a procedure
6915     descriptor for the function.  In ELF, it will mark the symbol as a
6916     function a-la the generic '.type' directive.
6917
6918'.end FUNCTION'
6919     Mark the end of FUNCTION.  In ELF, it will set the size of the
6920     symbol a-la the generic '.size' directive.
6921
6922'.mask MASK, OFFSET'
6923     Indicate which of the integer registers are saved in the current
6924     function's stack frame.  MASK is interpreted a bit mask in which
6925     bit N set indicates that register N is saved.  The registers are
6926     saved in a block located OFFSET bytes from the "canonical frame
6927     address" (CFA) which is the value of the stack pointer on entry to
6928     the function.  The registers are saved sequentially, except that
6929     the return address register (normally '$26') is saved first.
6930
6931     This and the other directives that describe the stack frame are
6932     currently only used when generating '.mdebug' information.  They
6933     may in the future be used to generate DWARF2 '.debug_frame' unwind
6934     information for hand written assembly.
6935
6936'.fmask MASK, OFFSET'
6937     Indicate which of the floating-point registers are saved in the
6938     current stack frame.  The MASK and OFFSET parameters are
6939     interpreted as with '.mask'.
6940
6941'.frame FRAMEREG, FRAMEOFFSET, RETREG[, ARGOFFSET]'
6942     Describes the shape of the stack frame.  The frame pointer in use
6943     is FRAMEREG; normally this is either '$fp' or '$sp'.  The frame
6944     pointer is FRAMEOFFSET bytes below the CFA. The return address is
6945     initially located in RETREG until it is saved as indicated in
6946     '.mask'.  For compatibility with OSF/1 an optional ARGOFFSET
6947     parameter is accepted and ignored.  It is believed to indicate the
6948     offset from the CFA to the saved argument registers.
6949
6950'.prologue N'
6951     Indicate that the stack frame is set up and all registers have been
6952     spilled.  The argument N indicates whether and how the function
6953     uses the incoming "procedure vector" (the address of the called
6954     function) in '$27'.  0 indicates that '$27' is not used; 1
6955     indicates that the first two instructions of the function use '$27'
6956     to perform a load of the GP register; 2 indicates that '$27' is
6957     used in some non-standard way and so the linker cannot elide the
6958     load of the procedure vector during relaxation.
6959
6960'.usepv FUNCTION, WHICH'
6961     Used to indicate the use of the '$27' register, similar to
6962     '.prologue', but without the other semantics of needing to be
6963     inside an open '.ent'/'.end' block.
6964
6965     The WHICH argument should be either 'no', indicating that '$27' is
6966     not used, or 'std', indicating that the first two instructions of
6967     the function perform a GP load.
6968
6969     One might use this directive instead of '.prologue' if you are also
6970     using dwarf2 CFI directives.
6971
6972'.gprel32 EXPRESSION'
6973     Computes the difference between the address in EXPRESSION and the
6974     GP for the current object file, and stores it in 4 bytes.  In
6975     addition to being smaller than a full 8 byte address, this also
6976     does not require a dynamic relocation when used in a shared
6977     library.
6978
6979'.t_floating EXPRESSION'
6980     Stores EXPRESSION as an IEEE double precision value.
6981
6982'.s_floating EXPRESSION'
6983     Stores EXPRESSION as an IEEE single precision value.
6984
6985'.f_floating EXPRESSION'
6986     Stores EXPRESSION as a VAX F format value.
6987
6988'.g_floating EXPRESSION'
6989     Stores EXPRESSION as a VAX G format value.
6990
6991'.d_floating EXPRESSION'
6992     Stores EXPRESSION as a VAX D format value.
6993
6994'.set FEATURE'
6995     Enables or disables various assembler features.  Using the positive
6996     name of the feature enables while using 'noFEATURE' disables.
6997
6998     'at'
6999          Indicates that macro expansions may clobber the "assembler
7000          temporary" ('$at' or '$28') register.  Some macros may not be
7001          expanded without this and will generate an error message if
7002          'noat' is in effect.  When 'at' is in effect, a warning will
7003          be generated if '$at' is used by the programmer.
7004
7005     'macro'
7006          Enables the expansion of macro instructions.  Note that
7007          variants of real instructions, such as 'br label' vs 'br
7008          $31,label' are considered alternate forms and not macros.
7009
7010     'move'
7011     'reorder'
7012     'volatile'
7013          These control whether and how the assembler may re-order
7014          instructions.  Accepted for compatibility with the OSF/1
7015          assembler, but 'as' does not do instruction scheduling, so
7016          these features are ignored.
7017
7018   The following directives are recognized for compatibility with the
7019OSF/1 assembler but are ignored.
7020
7021     .proc           .aproc
7022     .reguse         .livereg
7023     .option         .aent
7024     .ugen           .eflag
7025     .alias          .noalias
7026
7027
7028File: as.info,  Node: Alpha Opcodes,  Prev: Alpha Directives,  Up: Alpha-Dependent
7029
70309.2.6 Opcodes
7031-------------
7032
7033For detailed information on the Alpha machine instruction set, see the
7034Alpha Architecture Handbook
7035(ftp://ftp.digital.com/pub/Digital/info/semiconductor/literature/alphaahb.pdf).
7036
7037
7038File: as.info,  Node: ARC-Dependent,  Next: ARM-Dependent,  Prev: Alpha-Dependent,  Up: Machine Dependencies
7039
70409.3 ARC Dependent Features
7041==========================
7042
7043* Menu:
7044
7045* ARC Options::              Options
7046* ARC Syntax::               Syntax
7047* ARC Directives::           ARC Machine Directives
7048* ARC Modifiers::            ARC Assembler Modifiers
7049* ARC Symbols::              ARC Pre-defined Symbols
7050* ARC Opcodes::              Opcodes
7051
7052
7053File: as.info,  Node: ARC Options,  Next: ARC Syntax,  Up: ARC-Dependent
7054
70559.3.1 Options
7056-------------
7057
7058The following options control the type of CPU for which code is
7059assembled, and generic constraints on the code generated:
7060
7061'-mcpu=CPU'
7062     Set architecture type and register usage for CPU.  There are also
7063     shortcut alias options available for backward compatibility and
7064     convenience.  Supported values for CPU are
7065
7066     'arc600'
7067          Assemble for ARC 600.  Aliases: '-mA6', '-mARC600'.
7068
7069     'arc600_norm'
7070          Assemble for ARC 600 with norm instructions.
7071
7072     'arc600_mul64'
7073          Assemble for ARC 600 with mul64 instructions.
7074
7075     'arc600_mul32x16'
7076          Assemble for ARC 600 with mul32x16 instructions.
7077
7078     'arc601'
7079          Assemble for ARC 601.  Alias: '-mARC601'.
7080
7081     'arc601_norm'
7082          Assemble for ARC 601 with norm instructions.
7083
7084     'arc601_mul64'
7085          Assemble for ARC 601 with mul64 instructions.
7086
7087     'arc601_mul32x16'
7088          Assemble for ARC 601 with mul32x16 instructions.
7089
7090     'arc700'
7091          Assemble for ARC 700.  Aliases: '-mA7', '-mARC700'.
7092
7093     'arcem'
7094          Assemble for ARC EM. Aliases: '-mEM'
7095
7096     'em'
7097          Assemble for ARC EM, identical as arcem variant.
7098
7099     'em4'
7100          Assemble for ARC EM with code-density instructions.
7101
7102     'em4_dmips'
7103          Assemble for ARC EM with code-density instructions.
7104
7105     'em4_fpus'
7106          Assemble for ARC EM with code-density instructions.
7107
7108     'em4_fpuda'
7109          Assemble for ARC EM with code-density, and double-precision
7110          assist instructions.
7111
7112     'quarkse_em'
7113          Assemble for QuarkSE-EM cpu.
7114
7115     'archs'
7116          Assemble for ARC HS. Aliases: '-mHS', '-mav2hs'.
7117
7118     'hs'
7119          Assemble for ARC HS.
7120
7121     'hs34'
7122          Assemble for ARC HS34.
7123
7124     'hs38'
7125          Assemble for ARC HS38.
7126
7127     'hs38_linux'
7128          Assemble for ARC HS38 with floating point support on.
7129
7130     'nps400'
7131          Assemble for ARC 700 with NPS-400 extended instructions.
7132
7133     Note: the '.cpu' directive (*note ARC Directives::) can to be used
7134     to select a core variant from within assembly code.
7135
7136'-EB'
7137     This option specifies that the output generated by the assembler
7138     should be marked as being encoded for a big-endian processor.
7139
7140'-EL'
7141     This option specifies that the output generated by the assembler
7142     should be marked as being encoded for a little-endian processor -
7143     this is the default.
7144
7145'-mcode-density'
7146     This option turns on Code Density instructions.  Only valid for ARC
7147     EM processors.
7148
7149'-mrelax'
7150     Enable support for assembly-time relaxation.  The assembler will
7151     replace a longer version of an instruction with a shorter one,
7152     whenever it is possible.
7153
7154'-mnps400'
7155     Enable support for NPS-400 extended instructions.
7156
7157'-mspfp'
7158     Enable support for single-precision floating point instructions.
7159
7160'-mdpfp'
7161     Enable support for double-precision floating point instructions.
7162
7163'-mfpuda'
7164     Enable support for double-precision assist floating point
7165     instructions.  Only valid for ARC EM processors.
7166
7167
7168File: as.info,  Node: ARC Syntax,  Next: ARC Directives,  Prev: ARC Options,  Up: ARC-Dependent
7169
71709.3.2 Syntax
7171------------
7172
7173* Menu:
7174
7175* ARC-Chars::                Special Characters
7176* ARC-Regs::                 Register Names
7177
7178
7179File: as.info,  Node: ARC-Chars,  Next: ARC-Regs,  Up: ARC Syntax
7180
71819.3.2.1 Special Characters
7182..........................
7183
7184'%'
7185     A register name can optionally be prefixed by a '%' character.  So
7186     register '%r0' is equivalent to 'r0' in the assembly code.
7187
7188'#'
7189     The presence of a '#' character within a line (but not at the start
7190     of a line) indicates the start of a comment that extends to the end
7191     of the current line.
7192
7193     _Note:_ if a line starts with a '#' character then it can also be a
7194     logical line number directive (*note Comments::) or a preprocessor
7195     control command (*note Preprocessing::).
7196
7197'@'
7198     Prefixing an operand with an '@' specifies that the operand is a
7199     symbol and not a register.  This is how the assembler disambiguates
7200     the use of an ARC register name as a symbol.  So the instruction
7201          mov r0, @r0
7202     moves the address of symbol 'r0' into register 'r0'.
7203
7204'`'
7205     The '`' (backtick) character is used to separate statements on a
7206     single line.
7207
7208'-'
7209     Used as a separator to obtain a sequence of commands from a C
7210     preprocessor macro.
7211
7212
7213File: as.info,  Node: ARC-Regs,  Prev: ARC-Chars,  Up: ARC Syntax
7214
72159.3.2.2 Register Names
7216......................
7217
7218The ARC assembler uses the following register names for its core
7219registers:
7220
7221'r0-r31'
7222     The core general registers.  Registers 'r26' through 'r31' have
7223     special functions, and are usually referred to by those synonyms.
7224
7225'gp'
7226     The global pointer and a synonym for 'r26'.
7227
7228'fp'
7229     The frame pointer and a synonym for 'r27'.
7230
7231'sp'
7232     The stack pointer and a synonym for 'r28'.
7233
7234'ilink1'
7235     For ARC 600 and ARC 700, the level 1 interrupt link register and a
7236     synonym for 'r29'.  Not supported for ARCv2.
7237
7238'ilink'
7239     For ARCv2, the interrupt link register and a synonym for 'r29'.
7240     Not supported for ARC 600 and ARC 700.
7241
7242'ilink2'
7243     For ARC 600 and ARC 700, the level 2 interrupt link register and a
7244     synonym for 'r30'.  Not supported for ARC v2.
7245
7246'blink'
7247     The link register and a synonym for 'r31'.
7248
7249'r32-r59'
7250     The extension core registers.
7251
7252'lp_count'
7253     The loop count register.
7254
7255'pcl'
7256     The word aligned program counter.
7257
7258   In addition the ARC processor has a large number of _auxiliary
7259registers_.  The precise set depends on the extensions being supported,
7260but the following baseline set are always defined:
7261
7262'identity'
7263     Processor Identification register.  Auxiliary register address 0x4.
7264
7265'pc'
7266     Program Counter.  Auxiliary register address 0x6.
7267
7268'status32'
7269     Status register.  Auxiliary register address 0x0a.
7270
7271'bta'
7272     Branch Target Address.  Auxiliary register address 0x412.
7273
7274'ecr'
7275     Exception Cause Register.  Auxiliary register address 0x403.
7276
7277'int_vector_base'
7278     Interrupt Vector Base address.  Auxiliary register address 0x25.
7279
7280'status32_p0'
7281     Stored STATUS32 register on entry to level P0 interrupts.
7282     Auxiliary register address 0xb.
7283
7284'aux_user_sp'
7285     Saved User Stack Pointer.  Auxiliary register address 0xd.
7286
7287'eret'
7288     Exception Return Address.  Auxiliary register address 0x400.
7289
7290'erbta'
7291     BTA saved on exception entry.  Auxiliary register address 0x401.
7292
7293'erstatus'
7294     STATUS32 saved on exception.  Auxiliary register address 0x402.
7295
7296'bcr_ver'
7297     Build Configuration Registers Version.  Auxiliary register address
7298     0x60.
7299
7300'bta_link_build'
7301     Build configuration for: BTA Registers.  Auxiliary register address
7302     0x63.
7303
7304'vecbase_ac_build'
7305     Build configuration for: Interrupts.  Auxiliary register address
7306     0x68.
7307
7308'rf_build'
7309     Build configuration for: Core Registers.  Auxiliary register
7310     address 0x6e.
7311
7312'dccm_build'
7313     DCCM RAM Configuration Register.  Auxiliary register address 0xc1.
7314
7315   Additional auxiliary register names are defined according to the
7316processor architecture version and extensions selected by the options.
7317
7318
7319File: as.info,  Node: ARC Directives,  Next: ARC Modifiers,  Prev: ARC Syntax,  Up: ARC-Dependent
7320
73219.3.3 ARC Machine Directives
7322----------------------------
7323
7324The ARC version of 'as' supports the following additional machine
7325directives:
7326
7327'.lcomm SYMBOL, LENGTH[, ALIGNMENT]'
7328     Reserve LENGTH (an absolute expression) bytes for a local common
7329     denoted by SYMBOL.  The section and value of SYMBOL are those of
7330     the new local common.  The addresses are allocated in the bss
7331     section, so that at run-time the bytes start off zeroed.  Since
7332     SYMBOL is not declared global, it is normally not visible to 'ld'.
7333     The optional third parameter, ALIGNMENT, specifies the desired
7334     alignment of the symbol in the bss section, specified as a byte
7335     boundary (for example, an alignment of 16 means that the least
7336     significant 4 bits of the address should be zero).  The alignment
7337     must be an absolute expression, and it must be a power of two.  If
7338     no alignment is specified, as will set the alignment to the largest
7339     power of two less than or equal to the size of the symbol, up to a
7340     maximum of 16.
7341
7342'.lcommon SYMBOL, LENGTH[, ALIGNMENT]'
7343     The same as 'lcomm' directive.
7344
7345'.cpu CPU'
7346     The '.cpu' directive must be followed by the desired core version.
7347     Permitted values for CPU are:
7348     'ARC600'
7349          Assemble for the ARC600 instruction set.
7350
7351     'arc600_norm'
7352          Assemble for ARC 600 with norm instructions.
7353
7354     'arc600_mul64'
7355          Assemble for ARC 600 with mul64 instructions.
7356
7357     'arc600_mul32x16'
7358          Assemble for ARC 600 with mul32x16 instructions.
7359
7360     'arc601'
7361          Assemble for ARC 601 instruction set.
7362
7363     'arc601_norm'
7364          Assemble for ARC 601 with norm instructions.
7365
7366     'arc601_mul64'
7367          Assemble for ARC 601 with mul64 instructions.
7368
7369     'arc601_mul32x16'
7370          Assemble for ARC 601 with mul32x16 instructions.
7371
7372     'ARC700'
7373          Assemble for the ARC700 instruction set.
7374
7375     'NPS400'
7376          Assemble for the NPS400 instruction set.
7377
7378     'EM'
7379          Assemble for the ARC EM instruction set.
7380
7381     'arcem'
7382          Assemble for ARC EM instruction set
7383
7384     'em4'
7385          Assemble for ARC EM with code-density instructions.
7386
7387     'em4_dmips'
7388          Assemble for ARC EM with code-density instructions.
7389
7390     'em4_fpus'
7391          Assemble for ARC EM with code-density instructions.
7392
7393     'em4_fpuda'
7394          Assemble for ARC EM with code-density, and double-precision
7395          assist instructions.
7396
7397     'quarkse_em'
7398          Assemble for QuarkSE-EM instruction set.
7399
7400     'HS'
7401          Assemble for the ARC HS instruction set.
7402
7403     'archs'
7404          Assemble for ARC HS instruction set.
7405
7406     'hs'
7407          Assemble for ARC HS instruction set.
7408
7409     'hs34'
7410          Assemble for ARC HS34 instruction set.
7411
7412     'hs38'
7413          Assemble for ARC HS38 instruction set.
7414
7415     'hs38_linux'
7416          Assemble for ARC HS38 with floating point support on.
7417
7418     Note: the '.cpu' directive overrides the command-line option
7419     '-mcpu=CPU'; a warning is emitted when the version is not
7420     consistent between the two.
7421
7422'.extAuxRegister NAME, ADDR, MODE'
7423     Auxiliary registers can be defined in the assembler source code by
7424     using this directive.  The first parameter, NAME, is the name of
7425     the new auxiliary register.  The second parameter, ADDR, is address
7426     the of the auxiliary register.  The third parameter, MODE,
7427     specifies whether the register is readable and/or writable and is
7428     one of:
7429     'r'
7430          Read only;
7431
7432     'w'
7433          Write only;
7434
7435     'r|w'
7436          Read and write.
7437
7438     For example:
7439          	.extAuxRegister mulhi, 0x12, w
7440     specifies a write only extension auxiliary register, MULHI at
7441     address 0x12.
7442
7443'.extCondCode SUFFIX, VAL'
7444     ARC supports extensible condition codes.  This directive defines a
7445     new condition code, to be known by the suffix, SUFFIX and will
7446     depend on the value, VAL in the condition code.
7447
7448     For example:
7449          	.extCondCode is_busy,0x14
7450          	add.is_busy  r1,r2,r3
7451     will only execute the 'add' instruction if the condition code value
7452     is 0x14.
7453
7454'.extCoreRegister NAME, REGNUM, MODE, SHORTCUT'
7455     Specifies an extension core register named NAME as a synonym for
7456     the register numbered REGNUM.  The register number must be between
7457     32 and 59.  The third argument, MODE, indicates whether the
7458     register is readable and/or writable and is one of:
7459     'r'
7460          Read only;
7461
7462     'w'
7463          Write only;
7464
7465     'r|w'
7466          Read and write.
7467
7468     The final parameter, SHORTCUT indicates whether the register has a
7469     short cut in the pipeline.  The valid values are:
7470     'can_shortcut'
7471          The register has a short cut in the pipeline;
7472
7473     'cannot_shortcut'
7474          The register does not have a short cut in the pipeline.
7475
7476     For example:
7477          	.extCoreRegister mlo, 57, r , can_shortcut
7478     defines a read only extension core register, 'mlo', which is
7479     register 57, and can short cut the pipeline.
7480
7481'.extInstruction NAME, OPCODE, SUBOPCODE, SUFFIXCLASS, SYNTAXCLASS'
7482     ARC allows the user to specify extension instructions.  These
7483     extension instructions are not macros; the assembler creates
7484     encodings for use of these instructions according to the
7485     specification by the user.
7486
7487     The first argument, NAME, gives the name of the instruction.
7488
7489     The second argument, OPCODE, is the opcode to be used (bits 31:27
7490     in the encoding).
7491
7492     The third argument, SUBOPCODE, is the sub-opcode to be used, but
7493     the correct value also depends on the fifth argument, SYNTAXCLASS
7494
7495     The fourth argument, SUFFIXCLASS, determines the kinds of suffixes
7496     to be allowed.  Valid values are:
7497     'SUFFIX_NONE'
7498          No suffixes are permitted;
7499
7500     'SUFFIX_COND'
7501          Conditional suffixes are permitted;
7502
7503     'SUFFIX_FLAG'
7504          Flag setting suffixes are permitted.
7505
7506     'SUFFIX_COND|SUFFIX_FLAG'
7507          Both conditional and flag setting suffices are permitted.
7508
7509     The fifth and final argument, SYNTAXCLASS, determines the syntax
7510     class for the instruction.  It can have the following values:
7511     'SYNTAX_2OP'
7512          Two Operand Instruction;
7513
7514     'SYNTAX_3OP'
7515          Three Operand Instruction.
7516
7517     'SYNTAX_1OP'
7518          One Operand Instruction.
7519
7520     'SYNTAX_NOP'
7521          No Operand Instruction.
7522
7523     The syntax class may be followed by '|' and one of the following
7524     modifiers.
7525
7526     'OP1_MUST_BE_IMM'
7527          Modifies syntax class 'SYNTAX_3OP', specifying that the first
7528          operand of a three-operand instruction must be an immediate
7529          (i.e., the result is discarded).  This is usually used to set
7530          the flags using specific instructions and not retain results.
7531
7532     'OP1_IMM_IMPLIED'
7533          Modifies syntax class 'SYNTAX_20P', specifying that there is
7534          an implied immediate destination operand which does not appear
7535          in the syntax.
7536
7537          For example, if the source code contains an instruction like:
7538               inst r1,r2
7539          the first argument is an implied immediate (that is, the
7540          result is discarded).  This is the same as though the source
7541          code were: inst 0,r1,r2.
7542
7543     For example, defining a 64-bit multiplier with immediate operands:
7544          	.extInstruction  mp64, 0x07, 0x2d, SUFFIX_COND|SUFFIX_FLAG,
7545          			 SYNTAX_3OP|OP1_MUST_BE_IMM
7546     which specifies an extension instruction named 'mp64' with 3
7547     operands.  It sets the flags and can be used with a condition code,
7548     for which the first operand is an immediate, i.e.  equivalent to
7549     discarding the result of the operation.
7550
7551     A two operands instruction variant would be:
7552          	.extInstruction mul64, 0x07, 0x2d, SUFFIX_COND,
7553          	SYNTAX_2OP|OP1_IMM_IMPLIED
7554     which describes a two operand instruction with an implicit first
7555     immediate operand.  The result of this operation would be
7556     discarded.
7557
7558'.arc_attribute TAG, VALUE'
7559     Set the ARC object attribute TAG to VALUE.
7560
7561     The TAG is either an attribute number, or one of the following:
7562     'Tag_ARC_PCS_config', 'Tag_ARC_CPU_base', 'Tag_ARC_CPU_variation',
7563     'Tag_ARC_CPU_name', 'Tag_ARC_ABI_rf16', 'Tag_ARC_ABI_osver',
7564     'Tag_ARC_ABI_sda', 'Tag_ARC_ABI_pic', 'Tag_ARC_ABI_tls',
7565     'Tag_ARC_ABI_enumsize', 'Tag_ARC_ABI_exceptions',
7566     'Tag_ARC_ABI_double_size', 'Tag_ARC_ISA_config',
7567     'Tag_ARC_ISA_apex', 'Tag_ARC_ISA_mpy_option'
7568
7569     The VALUE is either a 'number', '"string"', or 'number, "string"'
7570     depending on the tag.
7571
7572
7573File: as.info,  Node: ARC Modifiers,  Next: ARC Symbols,  Prev: ARC Directives,  Up: ARC-Dependent
7574
75759.3.4 ARC Assembler Modifiers
7576-----------------------------
7577
7578The following additional assembler modifiers have been added for
7579position-independent code.  These modifiers are available only with the
7580ARC 700 and above processors and generate relocation entries, which are
7581interpreted by the linker as follows:
7582
7583'@pcl(SYMBOL)'
7584     Relative distance of SYMBOL's from the current program counter
7585     location.
7586
7587'@gotpc(SYMBOL)'
7588     Relative distance of SYMBOL's Global Offset Table entry from the
7589     current program counter location.
7590
7591'@gotoff(SYMBOL)'
7592     Distance of SYMBOL from the base of the Global Offset Table.
7593
7594'@plt(SYMBOL)'
7595     Distance of SYMBOL's Procedure Linkage Table entry from the current
7596     program counter.  This is valid only with branch and link
7597     instructions and PC-relative calls.
7598
7599'@sda(SYMBOL)'
7600     Relative distance of SYMBOL from the base of the Small Data
7601     Pointer.
7602
7603
7604File: as.info,  Node: ARC Symbols,  Next: ARC Opcodes,  Prev: ARC Modifiers,  Up: ARC-Dependent
7605
76069.3.5 ARC Pre-defined Symbols
7607-----------------------------
7608
7609The following assembler symbols will prove useful when developing
7610position-independent code.  These symbols are available only with the
7611ARC 700 and above processors.
7612
7613'__GLOBAL_OFFSET_TABLE__'
7614     Symbol referring to the base of the Global Offset Table.
7615
7616'__DYNAMIC__'
7617     An alias for the Global Offset Table 'Base__GLOBAL_OFFSET_TABLE__'.
7618     It can be used only with '@gotpc' modifiers.
7619
7620
7621File: as.info,  Node: ARC Opcodes,  Prev: ARC Symbols,  Up: ARC-Dependent
7622
76239.3.6 Opcodes
7624-------------
7625
7626For information on the ARC instruction set, see 'ARC Programmers
7627Reference Manual', available where you download the processor IP
7628library.
7629
7630
7631File: as.info,  Node: ARM-Dependent,  Next: AVR-Dependent,  Prev: ARC-Dependent,  Up: Machine Dependencies
7632
76339.4 ARM Dependent Features
7634==========================
7635
7636* Menu:
7637
7638* ARM Options::              Options
7639* ARM Syntax::               Syntax
7640* ARM Floating Point::       Floating Point
7641* ARM Directives::           ARM Machine Directives
7642* ARM Opcodes::              Opcodes
7643* ARM Mapping Symbols::      Mapping Symbols
7644* ARM Unwinding Tutorial::   Unwinding
7645
7646
7647File: as.info,  Node: ARM Options,  Next: ARM Syntax,  Up: ARM-Dependent
7648
76499.4.1 Options
7650-------------
7651
7652'-mcpu=PROCESSOR[+EXTENSION...]'
7653     This option specifies the target processor.  The assembler will
7654     issue an error message if an attempt is made to assemble an
7655     instruction which will not execute on the target processor.  The
7656     following processor names are recognized: 'arm1', 'arm2', 'arm250',
7657     'arm3', 'arm6', 'arm60', 'arm600', 'arm610', 'arm620', 'arm7',
7658     'arm7m', 'arm7d', 'arm7dm', 'arm7di', 'arm7dmi', 'arm70', 'arm700',
7659     'arm700i', 'arm710', 'arm710t', 'arm720', 'arm720t', 'arm740t',
7660     'arm710c', 'arm7100', 'arm7500', 'arm7500fe', 'arm7t', 'arm7tdmi',
7661     'arm7tdmi-s', 'arm8', 'arm810', 'strongarm', 'strongarm1',
7662     'strongarm110', 'strongarm1100', 'strongarm1110', 'arm9', 'arm920',
7663     'arm920t', 'arm922t', 'arm940t', 'arm9tdmi', 'fa526' (Faraday FA526
7664     processor), 'fa626' (Faraday FA626 processor), 'arm9e', 'arm926e',
7665     'arm926ej-s', 'arm946e-r0', 'arm946e', 'arm946e-s', 'arm966e-r0',
7666     'arm966e', 'arm966e-s', 'arm968e-s', 'arm10t', 'arm10tdmi',
7667     'arm10e', 'arm1020', 'arm1020t', 'arm1020e', 'arm1022e',
7668     'arm1026ej-s', 'fa606te' (Faraday FA606TE processor), 'fa616te'
7669     (Faraday FA616TE processor), 'fa626te' (Faraday FA626TE processor),
7670     'fmp626' (Faraday FMP626 processor), 'fa726te' (Faraday FA726TE
7671     processor), 'arm1136j-s', 'arm1136jf-s', 'arm1156t2-s',
7672     'arm1156t2f-s', 'arm1176jz-s', 'arm1176jzf-s', 'mpcore',
7673     'mpcorenovfp', 'cortex-a5', 'cortex-a7', 'cortex-a8', 'cortex-a9',
7674     'cortex-a15', 'cortex-a17', 'cortex-a32', 'cortex-a35',
7675     'cortex-a53', 'cortex-a55', 'cortex-a57', 'cortex-a72',
7676     'cortex-a73', 'cortex-a75', 'cortex-a76', 'cortex-a76ae',
7677     'cortex-a77', 'ares', 'cortex-r4', 'cortex-r4f', 'cortex-r5',
7678     'cortex-r7', 'cortex-r8', 'cortex-r52', 'cortex-m35p',
7679     'cortex-m33', 'cortex-m23', 'cortex-m7', 'cortex-m4', 'cortex-m3',
7680     'cortex-m1', 'cortex-m0', 'cortex-m0plus', 'exynos-m1',
7681     'marvell-pj4', 'marvell-whitney', 'neoverse-n1', 'xgene1',
7682     'xgene2', 'ep9312' (ARM920 with Cirrus Maverick coprocessor),
7683     'i80200' (Intel XScale processor) 'iwmmxt' (Intel XScale processor
7684     with Wireless MMX technology coprocessor) and 'xscale'.  The
7685     special name 'all' may be used to allow the assembler to accept
7686     instructions valid for any ARM processor.
7687
7688     In addition to the basic instruction set, the assembler can be told
7689     to accept various extension mnemonics that extend the processor
7690     using the co-processor instruction space.  For example,
7691     '-mcpu=arm920+maverick' is equivalent to specifying '-mcpu=ep9312'.
7692
7693     Multiple extensions may be specified, separated by a '+'.  The
7694     extensions should be specified in ascending alphabetical order.
7695
7696     Some extensions may be restricted to particular architectures; this
7697     is documented in the list of extensions below.
7698
7699     Extension mnemonics may also be removed from those the assembler
7700     accepts.  This is done be prepending 'no' to the option that adds
7701     the extension.  Extensions that are removed should be listed after
7702     all extensions which have been added, again in ascending
7703     alphabetical order.  For example, '-mcpu=ep9312+nomaverick' is
7704     equivalent to specifying '-mcpu=arm920'.
7705
7706     The following extensions are currently supported: 'bf16' (BFloat16
7707     extensions for v8.6-A architecture), 'i8mm' (Int8 Matrix Multiply
7708     extensions for v8.6-A architecture), 'crc' 'crypto' (Cryptography
7709     Extensions for v8-A architecture, implies 'fp+simd'), 'dotprod'
7710     (Dot Product Extensions for v8.2-A architecture, implies
7711     'fp+simd'), 'fp' (Floating Point Extensions for v8-A architecture),
7712     'fp16' (FP16 Extensions for v8.2-A architecture, implies 'fp'),
7713     'fp16fml' (FP16 Floating Point Multiplication Variant Extensions
7714     for v8.2-A architecture, implies 'fp16'), 'idiv' (Integer Divide
7715     Extensions for v7-A and v7-R architectures), 'iwmmxt', 'iwmmxt2',
7716     'xscale', 'maverick', 'mp' (Multiprocessing Extensions for v7-A and
7717     v7-R architectures), 'os' (Operating System for v6M architecture),
7718     'predres' (Execution and Data Prediction Restriction Instruction
7719     for v8-A architectures, added by default from v8.5-A), 'sb'
7720     (Speculation Barrier Instruction for v8-A architectures, added by
7721     default from v8.5-A), 'sec' (Security Extensions for v6K and v7-A
7722     architectures), 'simd' (Advanced SIMD Extensions for v8-A
7723     architecture, implies 'fp'), 'virt' (Virtualization Extensions for
7724     v7-A architecture, implies 'idiv'), 'pan' (Privileged Access Never
7725     Extensions for v8-A architecture), 'ras' (Reliability, Availability
7726     and Serviceability extensions for v8-A architecture), 'rdma'
7727     (ARMv8.1 Advanced SIMD extensions for v8-A architecture, implies
7728     'simd') and 'xscale'.
7729
7730'-march=ARCHITECTURE[+EXTENSION...]'
7731     This option specifies the target architecture.  The assembler will
7732     issue an error message if an attempt is made to assemble an
7733     instruction which will not execute on the target architecture.  The
7734     following architecture names are recognized: 'armv1', 'armv2',
7735     'armv2a', 'armv2s', 'armv3', 'armv3m', 'armv4', 'armv4xm',
7736     'armv4t', 'armv4txm', 'armv5', 'armv5t', 'armv5txm', 'armv5te',
7737     'armv5texp', 'armv6', 'armv6j', 'armv6k', 'armv6z', 'armv6kz',
7738     'armv6-m', 'armv6s-m', 'armv7', 'armv7-a', 'armv7ve', 'armv7-r',
7739     'armv7-m', 'armv7e-m', 'armv8-a', 'armv8.1-a', 'armv8.2-a',
7740     'armv8.3-a', 'armv8-r', 'armv8.4-a', 'armv8.5-a', 'armv8-m.base',
7741     'armv8-m.main', 'armv8.1-m.main', 'armv8.6-a', 'iwmmxt', 'iwmmxt2'
7742     and 'xscale'.  If both '-mcpu' and '-march' are specified, the
7743     assembler will use the setting for '-mcpu'.
7744
7745     The architecture option can be extended with a set extension
7746     options.  These extensions are context sensitive, i.e.  the same
7747     extension may mean different things when used with different
7748     architectures.  When used together with a '-mfpu' option, the union
7749     of both feature enablement is taken.  See their availability and
7750     meaning below:
7751
7752     For 'armv5te', 'armv5texp', 'armv5tej', 'armv6', 'armv6j',
7753     'armv6k', 'armv6z', 'armv6kz', 'armv6zk', 'armv6t2', 'armv6kt2' and
7754     'armv6zt2':
7755
7756     '+fp': Enables VFPv2 instructions.  '+nofp': Disables all FPU
7757     instrunctions.
7758
7759     For 'armv7':
7760
7761     '+fp': Enables VFPv3 instructions with 16 double-word registers.
7762     '+nofp': Disables all FPU instructions.
7763
7764     For 'armv7-a':
7765
7766     '+fp': Enables VFPv3 instructions with 16 double-word registers.
7767     '+vfpv3-d16': Alias for '+fp'.  '+vfpv3': Enables VFPv3
7768     instructions with 32 double-word registers.  '+vfpv3-d16-fp16':
7769     Enables VFPv3 with half precision floating-point conversion
7770     instructions and 16 double-word registers.  '+vfpv3-fp16': Enables
7771     VFPv3 with half precision floating-point conversion instructions
7772     and 32 double-word registers.  '+vfpv4-d16': Enables VFPv4
7773     instructions with 16 double-word registers.  '+vfpv4': Enables
7774     VFPv4 instructions with 32 double-word registers.  '+simd': Enables
7775     VFPv3 and NEONv1 instructions with 32 double-word registers.
7776     '+neon': Alias for '+simd'.  '+neon-vfpv3': Alias for '+simd'.
7777     '+neon-fp16': Enables VFPv3, half precision floating-point
7778     conversion and NEONv1 instructions with 32 double-word registers.
7779     '+neon-vfpv4': Enables VFPv4 and NEONv1 with Fused-MAC instructions
7780     and 32 double-word registers.  '+mp': Enables Multiprocessing
7781     Extensions.  '+sec': Enables Security Extensions.  '+nofp':
7782     Disables all FPU and NEON instructions.  '+nosimd': Disables all
7783     NEON instructions.
7784
7785     For 'armv7ve':
7786
7787     '+fp': Enables VFPv4 instructions with 16 double-word registers.
7788     '+vfpv4-d16': Alias for '+fp'.  '+vfpv3-d16': Enables VFPv3
7789     instructions with 16 double-word registers.  '+vfpv3': Enables
7790     VFPv3 instructions with 32 double-word registers.
7791     '+vfpv3-d16-fp16': Enables VFPv3 with half precision floating-point
7792     conversion instructions and 16 double-word registers.
7793     '+vfpv3-fp16': Enables VFPv3 with half precision floating-point
7794     conversion instructions and 32 double-word registers.  '+vfpv4':
7795     Enables VFPv4 instructions with 32 double-word registers.  '+simd':
7796     Enables VFPv4 and NEONv1 with Fused-MAC instructions and 32
7797     double-word registers.  '+neon-vfpv4': Alias for '+simd'.  '+neon':
7798     Enables VFPv3 and NEONv1 instructions with 32 double-word
7799     registers.  '+neon-vfpv3': Alias for '+neon'.  '+neon-fp16':
7800     Enables VFPv3, half precision floating-point conversion and NEONv1
7801     instructions with 32 double-word registers.  double-word registers.
7802     '+nofp': Disables all FPU and NEON instructions.  '+nosimd':
7803     Disables all NEON instructions.
7804
7805     For 'armv7-r':
7806
7807     '+fp.sp': Enables single-precision only VFPv3 instructions with 16
7808     double-word registers.  '+vfpv3xd': Alias for '+fp.sp'.  '+fp':
7809     Enables VFPv3 instructions with 16 double-word registers.
7810     '+vfpv3-d16': Alias for '+fp'.  '+vfpv3xd-fp16': Enables
7811     single-precision only VFPv3 and half floating-point conversion
7812     instructions with 16 double-word registers.  '+vfpv3-d16-fp16':
7813     Enables VFPv3 and half precision floating-point conversion
7814     instructions with 16 double-word registers.  '+idiv': Enables
7815     integer division instructions in ARM mode.  '+nofp': Disables all
7816     FPU instructions.
7817
7818     For 'armv7e-m':
7819
7820     '+fp': Enables single-precision only VFPv4 instructions with 16
7821     double-word registers.  '+vfpvf4-sp-d16': Alias for '+fp'.
7822     '+fpv5': Enables single-precision only VFPv5 instructions with 16
7823     double-word registers.  '+fp.dp': Enables VFPv5 instructions with
7824     16 double-word registers.  '+fpv5-d16"': Alias for '+fp.dp'.
7825     '+nofp': Disables all FPU instructions.
7826
7827     For 'armv8-m.main':
7828
7829     '+dsp': Enables DSP Extension.  '+fp': Enables single-precision
7830     only VFPv5 instructions with 16 double-word registers.  '+fp.dp':
7831     Enables VFPv5 instructions with 16 double-word registers.  '+nofp':
7832     Disables all FPU instructions.  '+nodsp': Disables DSP Extension.
7833
7834     For 'armv8.1-m.main':
7835
7836     '+dsp': Enables DSP Extension.  '+fp': Enables single and half
7837     precision scalar Floating Point Extensions for Armv8.1-M Mainline
7838     with 16 double-word registers.  '+fp.dp': Enables double precision
7839     scalar Floating Point Extensions for Armv8.1-M Mainline, implies
7840     '+fp'.  '+mve': Enables integer only M-profile Vector Extension for
7841     Armv8.1-M Mainline, implies '+dsp'.  '+mve.fp': Enables Floating
7842     Point M-profile Vector Extension for Armv8.1-M Mainline, implies
7843     '+mve' and '+fp'.  '+nofp': Disables all FPU instructions.
7844     '+nodsp': Disables DSP Extension.  '+nomve': Disables all M-profile
7845     Vector Extensions.
7846
7847     For 'armv8-a':
7848
7849     '+crc': Enables CRC32 Extension.  '+simd': Enables VFP and NEON for
7850     Armv8-A. '+crypto': Enables Cryptography Extensions for Armv8-A,
7851     implies '+simd'.  '+sb': Enables Speculation Barrier Instruction
7852     for Armv8-A. '+predres': Enables Execution and Data Prediction
7853     Restriction Instruction for Armv8-A. '+nofp': Disables all FPU,
7854     NEON and Cryptography Extensions.  '+nocrypto': Disables
7855     Cryptography Extensions.
7856
7857     For 'armv8.1-a':
7858
7859     '+simd': Enables VFP and NEON for Armv8.1-A. '+crypto': Enables
7860     Cryptography Extensions for Armv8-A, implies '+simd'.  '+sb':
7861     Enables Speculation Barrier Instruction for Armv8-A. '+predres':
7862     Enables Execution and Data Prediction Restriction Instruction for
7863     Armv8-A. '+nofp': Disables all FPU, NEON and Cryptography
7864     Extensions.  '+nocrypto': Disables Cryptography Extensions.
7865
7866     For 'armv8.2-a' and 'armv8.3-a':
7867
7868     '+simd': Enables VFP and NEON for Armv8.1-A. '+fp16': Enables FP16
7869     Extension for Armv8.2-A, implies '+simd'.  '+fp16fml': Enables FP16
7870     Floating Point Multiplication Variant Extensions for Armv8.2-A,
7871     implies '+fp16'.  '+crypto': Enables Cryptography Extensions for
7872     Armv8-A, implies '+simd'.  '+dotprod': Enables Dot Product
7873     Extensions for Armv8.2-A, implies '+simd'.  '+sb': Enables
7874     Speculation Barrier Instruction for Armv8-A. '+predres': Enables
7875     Execution and Data Prediction Restriction Instruction for Armv8-A.
7876     '+nofp': Disables all FPU, NEON, Cryptography and Dot Product
7877     Extensions.  '+nocrypto': Disables Cryptography Extensions.
7878
7879     For 'armv8.4-a':
7880
7881     '+simd': Enables VFP and NEON for Armv8.1-A and Dot Product
7882     Extensions for Armv8.2-A. '+fp16': Enables FP16 Floating Point and
7883     Floating Point Multiplication Variant Extensions for Armv8.2-A,
7884     implies '+simd'.  '+crypto': Enables Cryptography Extensions for
7885     Armv8-A, implies '+simd'.  '+sb': Enables Speculation Barrier
7886     Instruction for Armv8-A. '+predres': Enables Execution and Data
7887     Prediction Restriction Instruction for Armv8-A. '+nofp': Disables
7888     all FPU, NEON, Cryptography and Dot Product Extensions.
7889     '+nocryptp': Disables Cryptography Extensions.
7890
7891     For 'armv8.5-a':
7892
7893     '+simd': Enables VFP and NEON for Armv8.1-A and Dot Product
7894     Extensions for Armv8.2-A. '+fp16': Enables FP16 Floating Point and
7895     Floating Point Multiplication Variant Extensions for Armv8.2-A,
7896     implies '+simd'.  '+crypto': Enables Cryptography Extensions for
7897     Armv8-A, implies '+simd'.  '+nofp': Disables all FPU, NEON,
7898     Cryptography and Dot Product Extensions.  '+nocryptp': Disables
7899     Cryptography Extensions.
7900
7901'-mfpu=FLOATING-POINT-FORMAT'
7902
7903     This option specifies the floating point format to assemble for.
7904     The assembler will issue an error message if an attempt is made to
7905     assemble an instruction which will not execute on the target
7906     floating point unit.  The following format options are recognized:
7907     'softfpa', 'fpe', 'fpe2', 'fpe3', 'fpa', 'fpa10', 'fpa11',
7908     'arm7500fe', 'softvfp', 'softvfp+vfp', 'vfp', 'vfp10', 'vfp10-r0',
7909     'vfp9', 'vfpxd', 'vfpv2', 'vfpv3', 'vfpv3-fp16', 'vfpv3-d16',
7910     'vfpv3-d16-fp16', 'vfpv3xd', 'vfpv3xd-d16', 'vfpv4', 'vfpv4-d16',
7911     'fpv4-sp-d16', 'fpv5-sp-d16', 'fpv5-d16', 'fp-armv8', 'arm1020t',
7912     'arm1020e', 'arm1136jf-s', 'maverick', 'neon', 'neon-vfpv3',
7913     'neon-fp16', 'neon-vfpv4', 'neon-fp-armv8', 'crypto-neon-fp-armv8',
7914     'neon-fp-armv8.1' and 'crypto-neon-fp-armv8.1'.
7915
7916     In addition to determining which instructions are assembled, this
7917     option also affects the way in which the '.double' assembler
7918     directive behaves when assembling little-endian code.
7919
7920     The default is dependent on the processor selected.  For
7921     Architecture 5 or later, the default is to assemble for VFP
7922     instructions; for earlier architectures the default is to assemble
7923     for FPA instructions.
7924
7925'-mfp16-format=FORMAT'
7926     This option specifies the half-precision floating point format to
7927     use when assembling floating point numbers emitted by the
7928     '.float16' directive.  The following format options are recognized:
7929     'ieee', 'alternative'.  If 'ieee' is specified then the IEEE
7930     754-2008 half-precision floating point format is used, if
7931     'alternative' is specified then the Arm alternative half-precision
7932     format is used.  If this option is set on the command line then the
7933     format is fixed and cannot be changed with the 'float16_format'
7934     directive.  If this value is not set then the IEEE 754-2008 format
7935     is used until the format is explicitly set with the
7936     'float16_format' directive.
7937
7938'-mthumb'
7939     This option specifies that the assembler should start assembling
7940     Thumb instructions; that is, it should behave as though the file
7941     starts with a '.code 16' directive.
7942
7943'-mthumb-interwork'
7944     This option specifies that the output generated by the assembler
7945     should be marked as supporting interworking.  It also affects the
7946     behaviour of the 'ADR' and 'ADRL' pseudo opcodes.
7947
7948'-mimplicit-it=never'
7949'-mimplicit-it=always'
7950'-mimplicit-it=arm'
7951'-mimplicit-it=thumb'
7952     The '-mimplicit-it' option controls the behavior of the assembler
7953     when conditional instructions are not enclosed in IT blocks.  There
7954     are four possible behaviors.  If 'never' is specified, such
7955     constructs cause a warning in ARM code and an error in Thumb-2
7956     code.  If 'always' is specified, such constructs are accepted in
7957     both ARM and Thumb-2 code, where the IT instruction is added
7958     implicitly.  If 'arm' is specified, such constructs are accepted in
7959     ARM code and cause an error in Thumb-2 code.  If 'thumb' is
7960     specified, such constructs cause a warning in ARM code and are
7961     accepted in Thumb-2 code.  If you omit this option, the behavior is
7962     equivalent to '-mimplicit-it=arm'.
7963
7964'-mapcs-26'
7965'-mapcs-32'
7966     These options specify that the output generated by the assembler
7967     should be marked as supporting the indicated version of the Arm
7968     Procedure.  Calling Standard.
7969
7970'-matpcs'
7971     This option specifies that the output generated by the assembler
7972     should be marked as supporting the Arm/Thumb Procedure Calling
7973     Standard.  If enabled this option will cause the assembler to
7974     create an empty debugging section in the object file called
7975     .arm.atpcs.  Debuggers can use this to determine the ABI being used
7976     by.
7977
7978'-mapcs-float'
7979     This indicates the floating point variant of the APCS should be
7980     used.  In this variant floating point arguments are passed in FP
7981     registers rather than integer registers.
7982
7983'-mapcs-reentrant'
7984     This indicates that the reentrant variant of the APCS should be
7985     used.  This variant supports position independent code.
7986
7987'-mfloat-abi=ABI'
7988     This option specifies that the output generated by the assembler
7989     should be marked as using specified floating point ABI. The
7990     following values are recognized: 'soft', 'softfp' and 'hard'.
7991
7992'-meabi=VER'
7993     This option specifies which EABI version the produced object files
7994     should conform to.  The following values are recognized: 'gnu', '4'
7995     and '5'.
7996
7997'-EB'
7998     This option specifies that the output generated by the assembler
7999     should be marked as being encoded for a big-endian processor.
8000
8001     Note: If a program is being built for a system with big-endian data
8002     and little-endian instructions then it should be assembled with the
8003     '-EB' option, (all of it, code and data) and then linked with the
8004     '--be8' option.  This will reverse the endianness of the
8005     instructions back to little-endian, but leave the data as
8006     big-endian.
8007
8008'-EL'
8009     This option specifies that the output generated by the assembler
8010     should be marked as being encoded for a little-endian processor.
8011
8012'-k'
8013     This option specifies that the output of the assembler should be
8014     marked as position-independent code (PIC).
8015
8016'--fix-v4bx'
8017     Allow 'BX' instructions in ARMv4 code.  This is intended for use
8018     with the linker option of the same name.
8019
8020'-mwarn-deprecated'
8021'-mno-warn-deprecated'
8022     Enable or disable warnings about using deprecated options or
8023     features.  The default is to warn.
8024
8025'-mccs'
8026     Turns on CodeComposer Studio assembly syntax compatibility mode.
8027
8028'-mwarn-syms'
8029'-mno-warn-syms'
8030     Enable or disable warnings about symbols that match the names of
8031     ARM instructions.  The default is to warn.
8032
8033
8034File: as.info,  Node: ARM Syntax,  Next: ARM Floating Point,  Prev: ARM Options,  Up: ARM-Dependent
8035
80369.4.2 Syntax
8037------------
8038
8039* Menu:
8040
8041* ARM-Instruction-Set::      Instruction Set
8042* ARM-Chars::                Special Characters
8043* ARM-Regs::                 Register Names
8044* ARM-Relocations::	     Relocations
8045* ARM-Neon-Alignment::	     NEON Alignment Specifiers
8046
8047
8048File: as.info,  Node: ARM-Instruction-Set,  Next: ARM-Chars,  Up: ARM Syntax
8049
80509.4.2.1 Instruction Set Syntax
8051..............................
8052
8053Two slightly different syntaxes are support for ARM and THUMB
8054instructions.  The default, 'divided', uses the old style where ARM and
8055THUMB instructions had their own, separate syntaxes.  The new, 'unified'
8056syntax, which can be selected via the '.syntax' directive, and has the
8057following main features:
8058
8059   * Immediate operands do not require a '#' prefix.
8060
8061   * The 'IT' instruction may appear, and if it does it is validated
8062     against subsequent conditional affixes.  In ARM mode it does not
8063     generate machine code, in THUMB mode it does.
8064
8065   * For ARM instructions the conditional affixes always appear at the
8066     end of the instruction.  For THUMB instructions conditional affixes
8067     can be used, but only inside the scope of an 'IT' instruction.
8068
8069   * All of the instructions new to the V6T2 architecture (and later)
8070     are available.  (Only a few such instructions can be written in the
8071     'divided' syntax).
8072
8073   * The '.N' and '.W' suffixes are recognized and honored.
8074
8075   * All instructions set the flags if and only if they have an 's'
8076     affix.
8077
8078
8079File: as.info,  Node: ARM-Chars,  Next: ARM-Regs,  Prev: ARM-Instruction-Set,  Up: ARM Syntax
8080
80819.4.2.2 Special Characters
8082..........................
8083
8084The presence of a '@' anywhere on a line indicates the start of a
8085comment that extends to the end of that line.
8086
8087   If a '#' appears as the first character of a line then the whole line
8088is treated as a comment, but in this case the line could also be a
8089logical line number directive (*note Comments::) or a preprocessor
8090control command (*note Preprocessing::).
8091
8092   The ';' character can be used instead of a newline to separate
8093statements.
8094
8095   Either '#' or '$' can be used to indicate immediate operands.
8096
8097   *TODO* Explain about /data modifier on symbols.
8098
8099
8100File: as.info,  Node: ARM-Regs,  Next: ARM-Relocations,  Prev: ARM-Chars,  Up: ARM Syntax
8101
81029.4.2.3 Register Names
8103......................
8104
8105*TODO* Explain about ARM register naming, and the predefined names.
8106
8107
8108File: as.info,  Node: ARM-Relocations,  Next: ARM-Neon-Alignment,  Prev: ARM-Regs,  Up: ARM Syntax
8109
81109.4.2.4 ARM relocation generation
8111.................................
8112
8113Specific data relocations can be generated by putting the relocation
8114name in parentheses after the symbol name.  For example:
8115
8116             .word foo(TARGET1)
8117
8118   This will generate an 'R_ARM_TARGET1' relocation against the symbol
8119FOO.  The following relocations are supported: 'GOT', 'GOTOFF',
8120'TARGET1', 'TARGET2', 'SBREL', 'TLSGD', 'TLSLDM', 'TLSLDO', 'TLSDESC',
8121'TLSCALL', 'GOTTPOFF', 'GOT_PREL' and 'TPOFF'.
8122
8123   For compatibility with older toolchains the assembler also accepts
8124'(PLT)' after branch targets.  On legacy targets this will generate the
8125deprecated 'R_ARM_PLT32' relocation.  On EABI targets it will encode
8126either the 'R_ARM_CALL' or 'R_ARM_JUMP24' relocation, as appropriate.
8127
8128   Relocations for 'MOVW' and 'MOVT' instructions can be generated by
8129prefixing the value with '#:lower16:' and '#:upper16' respectively.  For
8130example to load the 32-bit address of foo into r0:
8131
8132             MOVW r0, #:lower16:foo
8133             MOVT r0, #:upper16:foo
8134
8135   Relocations 'R_ARM_THM_ALU_ABS_G0_NC', 'R_ARM_THM_ALU_ABS_G1_NC',
8136'R_ARM_THM_ALU_ABS_G2_NC' and 'R_ARM_THM_ALU_ABS_G3_NC' can be generated
8137by prefixing the value with '#:lower0_7:#', '#:lower8_15:#',
8138'#:upper0_7:#' and '#:upper8_15:#' respectively.  For example to load
8139the 32-bit address of foo into r0:
8140
8141             MOVS r0, #:upper8_15:#foo
8142             LSLS r0, r0, #8
8143             ADDS r0, #:upper0_7:#foo
8144             LSLS r0, r0, #8
8145             ADDS r0, #:lower8_15:#foo
8146             LSLS r0, r0, #8
8147             ADDS r0, #:lower0_7:#foo
8148
8149
8150File: as.info,  Node: ARM-Neon-Alignment,  Prev: ARM-Relocations,  Up: ARM Syntax
8151
81529.4.2.5 NEON Alignment Specifiers
8153.................................
8154
8155Some NEON load/store instructions allow an optional address alignment
8156qualifier.  The ARM documentation specifies that this is indicated by '@
8157ALIGN'.  However GAS already interprets the '@' character as a "line
8158comment" start, so ': ALIGN' is used instead.  For example:
8159
8160             vld1.8 {q0}, [r0, :128]
8161
8162
8163File: as.info,  Node: ARM Floating Point,  Next: ARM Directives,  Prev: ARM Syntax,  Up: ARM-Dependent
8164
81659.4.3 Floating Point
8166--------------------
8167
8168The ARM family uses IEEE floating-point numbers.
8169
8170
8171File: as.info,  Node: ARM Directives,  Next: ARM Opcodes,  Prev: ARM Floating Point,  Up: ARM-Dependent
8172
81739.4.4 ARM Machine Directives
8174----------------------------
8175
8176'.align EXPRESSION [, EXPRESSION]'
8177     This is the generic .ALIGN directive.  For the ARM however if the
8178     first argument is zero (ie no alignment is needed) the assembler
8179     will behave as if the argument had been 2 (ie pad to the next four
8180     byte boundary).  This is for compatibility with ARM's own
8181     assembler.
8182
8183'.arch NAME'
8184     Select the target architecture.  Valid values for NAME are the same
8185     as for the '-march' command-line option without the instruction set
8186     extension.
8187
8188     Specifying '.arch' clears any previously selected architecture
8189     extensions.
8190
8191'.arch_extension NAME'
8192     Add or remove an architecture extension to the target architecture.
8193     Valid values for NAME are the same as those accepted as
8194     architectural extensions by the '-mcpu' and '-march' command-line
8195     options.
8196
8197     '.arch_extension' may be used multiple times to add or remove
8198     extensions incrementally to the architecture being compiled for.
8199
8200'.arm'
8201     This performs the same action as .CODE 32.
8202
8203'.bss'
8204     This directive switches to the '.bss' section.
8205
8206'.cantunwind'
8207     Prevents unwinding through the current function.  No personality
8208     routine or exception table data is required or permitted.
8209
8210'.code [16|32]'
8211     This directive selects the instruction set being generated.  The
8212     value 16 selects Thumb, with the value 32 selecting ARM.
8213
8214'.cpu NAME'
8215     Select the target processor.  Valid values for NAME are the same as
8216     for the '-mcpu' command-line option without the instruction set
8217     extension.
8218
8219     Specifying '.cpu' clears any previously selected architecture
8220     extensions.
8221
8222'NAME .dn REGISTER NAME [.TYPE] [[INDEX]]'
8223'NAME .qn REGISTER NAME [.TYPE] [[INDEX]]'
8224
8225     The 'dn' and 'qn' directives are used to create typed and/or
8226     indexed register aliases for use in Advanced SIMD Extension (Neon)
8227     instructions.  The former should be used to create aliases of
8228     double-precision registers, and the latter to create aliases of
8229     quad-precision registers.
8230
8231     If these directives are used to create typed aliases, those aliases
8232     can be used in Neon instructions instead of writing types after the
8233     mnemonic or after each operand.  For example:
8234
8235                  x .dn d2.f32
8236                  y .dn d3.f32
8237                  z .dn d4.f32[1]
8238                  vmul x,y,z
8239
8240     This is equivalent to writing the following:
8241
8242                  vmul.f32 d2,d3,d4[1]
8243
8244     Aliases created using 'dn' or 'qn' can be destroyed using 'unreq'.
8245
8246'.eabi_attribute TAG, VALUE'
8247     Set the EABI object attribute TAG to VALUE.
8248
8249     The TAG is either an attribute number, or one of the following:
8250     'Tag_CPU_raw_name', 'Tag_CPU_name', 'Tag_CPU_arch',
8251     'Tag_CPU_arch_profile', 'Tag_ARM_ISA_use', 'Tag_THUMB_ISA_use',
8252     'Tag_FP_arch', 'Tag_WMMX_arch', 'Tag_Advanced_SIMD_arch',
8253     'Tag_MVE_arch', 'Tag_PCS_config', 'Tag_ABI_PCS_R9_use',
8254     'Tag_ABI_PCS_RW_data', 'Tag_ABI_PCS_RO_data',
8255     'Tag_ABI_PCS_GOT_use', 'Tag_ABI_PCS_wchar_t',
8256     'Tag_ABI_FP_rounding', 'Tag_ABI_FP_denormal',
8257     'Tag_ABI_FP_exceptions', 'Tag_ABI_FP_user_exceptions',
8258     'Tag_ABI_FP_number_model', 'Tag_ABI_align_needed',
8259     'Tag_ABI_align_preserved', 'Tag_ABI_enum_size',
8260     'Tag_ABI_HardFP_use', 'Tag_ABI_VFP_args', 'Tag_ABI_WMMX_args',
8261     'Tag_ABI_optimization_goals', 'Tag_ABI_FP_optimization_goals',
8262     'Tag_compatibility', 'Tag_CPU_unaligned_access',
8263     'Tag_FP_HP_extension', 'Tag_ABI_FP_16bit_format',
8264     'Tag_MPextension_use', 'Tag_DIV_use', 'Tag_nodefaults',
8265     'Tag_also_compatible_with', 'Tag_conformance', 'Tag_T2EE_use',
8266     'Tag_Virtualization_use'
8267
8268     The VALUE is either a 'number', '"string"', or 'number, "string"'
8269     depending on the tag.
8270
8271     Note - the following legacy values are also accepted by TAG:
8272     'Tag_VFP_arch', 'Tag_ABI_align8_needed',
8273     'Tag_ABI_align8_preserved', 'Tag_VFP_HP_extension',
8274
8275'.even'
8276     This directive aligns to an even-numbered address.
8277
8278'.extend EXPRESSION [, EXPRESSION]*'
8279'.ldouble EXPRESSION [, EXPRESSION]*'
8280     These directives write 12byte long double floating-point values to
8281     the output section.  These are not compatible with current ARM
8282     processors or ABIs.
8283
8284'.float16 VALUE [,...,VALUE_N]'
8285     Place the half precision floating point representation of one or
8286     more floating-point values into the current section.  The exact
8287     format of the encoding is specified by '.float16_format'.  If the
8288     format has not been explicitly set yet (either via the
8289     '.float16_format' directive or the command line option) then the
8290     IEEE 754-2008 format is used.
8291
8292'.float16_format FORMAT'
8293     Set the format to use when encoding float16 values emitted by the
8294     '.float16' directive.  Once the format has been set it cannot be
8295     changed.  'format' should be one of the following: 'ieee' (encode
8296     in the IEEE 754-2008 half precision format) or 'alternative'
8297     (encode in the Arm alternative half precision format).
8298
8299'.fnend'
8300     Marks the end of a function with an unwind table entry.  The unwind
8301     index table entry is created when this directive is processed.
8302
8303     If no personality routine has been specified then standard
8304     personality routine 0 or 1 will be used, depending on the number of
8305     unwind opcodes required.
8306
8307'.fnstart'
8308     Marks the start of a function with an unwind table entry.
8309
8310'.force_thumb'
8311     This directive forces the selection of Thumb instructions, even if
8312     the target processor does not support those instructions
8313
8314'.fpu NAME'
8315     Select the floating-point unit to assemble for.  Valid values for
8316     NAME are the same as for the '-mfpu' command-line option.
8317
8318'.handlerdata'
8319     Marks the end of the current function, and the start of the
8320     exception table entry for that function.  Anything between this
8321     directive and the '.fnend' directive will be added to the exception
8322     table entry.
8323
8324     Must be preceded by a '.personality' or '.personalityindex'
8325     directive.
8326
8327'.inst OPCODE [ , ... ]'
8328'.inst.n OPCODE [ , ... ]'
8329'.inst.w OPCODE [ , ... ]'
8330     Generates the instruction corresponding to the numerical value
8331     OPCODE.  '.inst.n' and '.inst.w' allow the Thumb instruction size
8332     to be specified explicitly, overriding the normal encoding rules.
8333
8334'.ldouble EXPRESSION [, EXPRESSION]*'
8335     See '.extend'.
8336
8337'.ltorg'
8338     This directive causes the current contents of the literal pool to
8339     be dumped into the current section (which is assumed to be the
8340     .text section) at the current location (aligned to a word
8341     boundary).  'GAS' maintains a separate literal pool for each
8342     section and each sub-section.  The '.ltorg' directive will only
8343     affect the literal pool of the current section and sub-section.  At
8344     the end of assembly all remaining, un-empty literal pools will
8345     automatically be dumped.
8346
8347     Note - older versions of 'GAS' would dump the current literal pool
8348     any time a section change occurred.  This is no longer done, since
8349     it prevents accurate control of the placement of literal pools.
8350
8351'.movsp REG [, #OFFSET]'
8352     Tell the unwinder that REG contains an offset from the current
8353     stack pointer.  If OFFSET is not specified then it is assumed to be
8354     zero.
8355
8356'.object_arch NAME'
8357     Override the architecture recorded in the EABI object attribute
8358     section.  Valid values for NAME are the same as for the '.arch'
8359     directive.  Typically this is useful when code uses runtime
8360     detection of CPU features.
8361
8362'.packed EXPRESSION [, EXPRESSION]*'
8363     This directive writes 12-byte packed floating-point values to the
8364     output section.  These are not compatible with current ARM
8365     processors or ABIs.
8366
8367'.pad #COUNT'
8368     Generate unwinder annotations for a stack adjustment of COUNT
8369     bytes.  A positive value indicates the function prologue allocated
8370     stack space by decrementing the stack pointer.
8371
8372'.personality NAME'
8373     Sets the personality routine for the current function to NAME.
8374
8375'.personalityindex INDEX'
8376     Sets the personality routine for the current function to the EABI
8377     standard routine number INDEX
8378
8379'.pool'
8380     This is a synonym for .ltorg.
8381
8382'NAME .req REGISTER NAME'
8383     This creates an alias for REGISTER NAME called NAME.  For example:
8384
8385                  foo .req r0
8386
8387'.save REGLIST'
8388     Generate unwinder annotations to restore the registers in REGLIST.
8389     The format of REGLIST is the same as the corresponding
8390     store-multiple instruction.
8391
8392     _core registers_
8393            .save {r4, r5, r6, lr}
8394            stmfd sp!, {r4, r5, r6, lr}
8395     _FPA registers_
8396            .save f4, 2
8397            sfmfd f4, 2, [sp]!
8398     _VFP registers_
8399            .save {d8, d9, d10}
8400            fstmdx sp!, {d8, d9, d10}
8401     _iWMMXt registers_
8402            .save {wr10, wr11}
8403            wstrd wr11, [sp, #-8]!
8404            wstrd wr10, [sp, #-8]!
8405          or
8406            .save wr11
8407            wstrd wr11, [sp, #-8]!
8408            .save wr10
8409            wstrd wr10, [sp, #-8]!
8410
8411'.setfp FPREG, SPREG [, #OFFSET]'
8412     Make all unwinder annotations relative to a frame pointer.  Without
8413     this the unwinder will use offsets from the stack pointer.
8414
8415     The syntax of this directive is the same as the 'add' or 'mov'
8416     instruction used to set the frame pointer.  SPREG must be either
8417     'sp' or mentioned in a previous '.movsp' directive.
8418
8419          .movsp ip
8420          mov ip, sp
8421          ...
8422          .setfp fp, ip, #4
8423          add fp, ip, #4
8424
8425'.secrel32 EXPRESSION [, EXPRESSION]*'
8426     This directive emits relocations that evaluate to the
8427     section-relative offset of each expression's symbol.  This
8428     directive is only supported for PE targets.
8429
8430'.syntax [unified | divided]'
8431     This directive sets the Instruction Set Syntax as described in the
8432     *note ARM-Instruction-Set:: section.
8433
8434'.thumb'
8435     This performs the same action as .CODE 16.
8436
8437'.thumb_func'
8438     This directive specifies that the following symbol is the name of a
8439     Thumb encoded function.  This information is necessary in order to
8440     allow the assembler and linker to generate correct code for
8441     interworking between Arm and Thumb instructions and should be used
8442     even if interworking is not going to be performed.  The presence of
8443     this directive also implies '.thumb'
8444
8445     This directive is not necessary when generating EABI objects.  On
8446     these targets the encoding is implicit when generating Thumb code.
8447
8448'.thumb_set'
8449     This performs the equivalent of a '.set' directive in that it
8450     creates a symbol which is an alias for another symbol (possibly not
8451     yet defined).  This directive also has the added property in that
8452     it marks the aliased symbol as being a thumb function entry point,
8453     in the same way that the '.thumb_func' directive does.
8454
8455'.tlsdescseq TLS-VARIABLE'
8456     This directive is used to annotate parts of an inlined TLS
8457     descriptor trampoline.  Normally the trampoline is provided by the
8458     linker, and this directive is not needed.
8459
8460'.unreq ALIAS-NAME'
8461     This undefines a register alias which was previously defined using
8462     the 'req', 'dn' or 'qn' directives.  For example:
8463
8464                  foo .req r0
8465                  .unreq foo
8466
8467     An error occurs if the name is undefined.  Note - this pseudo op
8468     can be used to delete builtin in register name aliases (eg 'r0').
8469     This should only be done if it is really necessary.
8470
8471'.unwind_raw OFFSET, BYTE1, ...'
8472     Insert one of more arbitrary unwind opcode bytes, which are known
8473     to adjust the stack pointer by OFFSET bytes.
8474
8475     For example '.unwind_raw 4, 0xb1, 0x01' is equivalent to '.save
8476     {r0}'
8477
8478'.vsave VFP-REGLIST'
8479     Generate unwinder annotations to restore the VFP registers in
8480     VFP-REGLIST using FLDMD. Also works for VFPv3 registers that are to
8481     be restored using VLDM. The format of VFP-REGLIST is the same as
8482     the corresponding store-multiple instruction.
8483
8484     _VFP registers_
8485            .vsave {d8, d9, d10}
8486            fstmdd sp!, {d8, d9, d10}
8487     _VFPv3 registers_
8488            .vsave {d15, d16, d17}
8489            vstm sp!, {d15, d16, d17}
8490
8491     Since FLDMX and FSTMX are now deprecated, this directive should be
8492     used in favour of '.save' for saving VFP registers for ARMv6 and
8493     above.
8494
8495
8496File: as.info,  Node: ARM Opcodes,  Next: ARM Mapping Symbols,  Prev: ARM Directives,  Up: ARM-Dependent
8497
84989.4.5 Opcodes
8499-------------
8500
8501'as' implements all the standard ARM opcodes.  It also implements
8502several pseudo opcodes, including several synthetic load instructions.
8503
8504'NOP'
8505            nop
8506
8507     This pseudo op will always evaluate to a legal ARM instruction that
8508     does nothing.  Currently it will evaluate to MOV r0, r0.
8509
8510'LDR'
8511            ldr <register> , = <expression>
8512
8513     If expression evaluates to a numeric constant then a MOV or MVN
8514     instruction will be used in place of the LDR instruction, if the
8515     constant can be generated by either of these instructions.
8516     Otherwise the constant will be placed into the nearest literal pool
8517     (if it not already there) and a PC relative LDR instruction will be
8518     generated.
8519
8520'ADR'
8521            adr <register> <label>
8522
8523     This instruction will load the address of LABEL into the indicated
8524     register.  The instruction will evaluate to a PC relative ADD or
8525     SUB instruction depending upon where the label is located.  If the
8526     label is out of range, or if it is not defined in the same file
8527     (and section) as the ADR instruction, then an error will be
8528     generated.  This instruction will not make use of the literal pool.
8529
8530     If LABEL is a thumb function symbol, and thumb interworking has
8531     been enabled via the '-mthumb-interwork' option then the bottom bit
8532     of the value stored into REGISTER will be set.  This allows the
8533     following sequence to work as expected:
8534
8535            adr     r0, thumb_function
8536            blx     r0
8537
8538'ADRL'
8539            adrl <register> <label>
8540
8541     This instruction will load the address of LABEL into the indicated
8542     register.  The instruction will evaluate to one or two PC relative
8543     ADD or SUB instructions depending upon where the label is located.
8544     If a second instruction is not needed a NOP instruction will be
8545     generated in its place, so that this instruction is always 8 bytes
8546     long.
8547
8548     If the label is out of range, or if it is not defined in the same
8549     file (and section) as the ADRL instruction, then an error will be
8550     generated.  This instruction will not make use of the literal pool.
8551
8552     If LABEL is a thumb function symbol, and thumb interworking has
8553     been enabled via the '-mthumb-interwork' option then the bottom bit
8554     of the value stored into REGISTER will be set.
8555
8556   For information on the ARM or Thumb instruction sets, see 'ARM
8557Software Development Toolkit Reference Manual', Advanced RISC Machines
8558Ltd.
8559
8560
8561File: as.info,  Node: ARM Mapping Symbols,  Next: ARM Unwinding Tutorial,  Prev: ARM Opcodes,  Up: ARM-Dependent
8562
85639.4.6 Mapping Symbols
8564---------------------
8565
8566The ARM ELF specification requires that special symbols be inserted into
8567object files to mark certain features:
8568
8569'$a'
8570     At the start of a region of code containing ARM instructions.
8571
8572'$t'
8573     At the start of a region of code containing THUMB instructions.
8574
8575'$d'
8576     At the start of a region of data.
8577
8578   The assembler will automatically insert these symbols for you - there
8579is no need to code them yourself.  Support for tagging symbols ($b, $f,
8580$p and $m) which is also mentioned in the current ARM ELF specification
8581is not implemented.  This is because they have been dropped from the new
8582EABI and so tools cannot rely upon their presence.
8583
8584
8585File: as.info,  Node: ARM Unwinding Tutorial,  Prev: ARM Mapping Symbols,  Up: ARM-Dependent
8586
85879.4.7 Unwinding
8588---------------
8589
8590The ABI for the ARM Architecture specifies a standard format for
8591exception unwind information.  This information is used when an
8592exception is thrown to determine where control should be transferred.
8593In particular, the unwind information is used to determine which
8594function called the function that threw the exception, and which
8595function called that one, and so forth.  This information is also used
8596to restore the values of callee-saved registers in the function catching
8597the exception.
8598
8599   If you are writing functions in assembly code, and those functions
8600call other functions that throw exceptions, you must use assembly pseudo
8601ops to ensure that appropriate exception unwind information is
8602generated.  Otherwise, if one of the functions called by your assembly
8603code throws an exception, the run-time library will be unable to unwind
8604the stack through your assembly code and your program will not behave
8605correctly.
8606
8607   To illustrate the use of these pseudo ops, we will examine the code
8608that G++ generates for the following C++ input:
8609
8610void callee (int *);
8611
8612int
8613caller ()
8614{
8615  int i;
8616  callee (&i);
8617  return i;
8618}
8619
8620   This example does not show how to throw or catch an exception from
8621assembly code.  That is a much more complex operation and should always
8622be done in a high-level language, such as C++, that directly supports
8623exceptions.
8624
8625   The code generated by one particular version of G++ when compiling
8626the example above is:
8627
8628_Z6callerv:
8629	.fnstart
8630.LFB2:
8631	@ Function supports interworking.
8632	@ args = 0, pretend = 0, frame = 8
8633	@ frame_needed = 1, uses_anonymous_args = 0
8634	stmfd	sp!, {fp, lr}
8635	.save {fp, lr}
8636.LCFI0:
8637	.setfp fp, sp, #4
8638	add	fp, sp, #4
8639.LCFI1:
8640	.pad #8
8641	sub	sp, sp, #8
8642.LCFI2:
8643	sub	r3, fp, #8
8644	mov	r0, r3
8645	bl	_Z6calleePi
8646	ldr	r3, [fp, #-8]
8647	mov	r0, r3
8648	sub	sp, fp, #4
8649	ldmfd	sp!, {fp, lr}
8650	bx	lr
8651.LFE2:
8652	.fnend
8653
8654   Of course, the sequence of instructions varies based on the options
8655you pass to GCC and on the version of GCC in use.  The exact
8656instructions are not important since we are focusing on the pseudo ops
8657that are used to generate unwind information.
8658
8659   An important assumption made by the unwinder is that the stack frame
8660does not change during the body of the function.  In particular, since
8661we assume that the assembly code does not itself throw an exception, the
8662only point where an exception can be thrown is from a call, such as the
8663'bl' instruction above.  At each call site, the same saved registers
8664(including 'lr', which indicates the return address) must be located in
8665the same locations relative to the frame pointer.
8666
8667   The '.fnstart' (*note .fnstart pseudo op: arm_fnstart.) pseudo op
8668appears immediately before the first instruction of the function while
8669the '.fnend' (*note .fnend pseudo op: arm_fnend.) pseudo op appears
8670immediately after the last instruction of the function.  These pseudo
8671ops specify the range of the function.
8672
8673   Only the order of the other pseudos ops (e.g., '.setfp' or '.pad')
8674matters; their exact locations are irrelevant.  In the example above,
8675the compiler emits the pseudo ops with particular instructions.  That
8676makes it easier to understand the code, but it is not required for
8677correctness.  It would work just as well to emit all of the pseudo ops
8678other than '.fnend' in the same order, but immediately after '.fnstart'.
8679
8680   The '.save' (*note .save pseudo op: arm_save.) pseudo op indicates
8681registers that have been saved to the stack so that they can be restored
8682before the function returns.  The argument to the '.save' pseudo op is a
8683list of registers to save.  If a register is "callee-saved" (as
8684specified by the ABI) and is modified by the function you are writing,
8685then your code must save the value before it is modified and restore the
8686original value before the function returns.  If an exception is thrown,
8687the run-time library restores the values of these registers from their
8688locations on the stack before returning control to the exception
8689handler.  (Of course, if an exception is not thrown, the function that
8690contains the '.save' pseudo op restores these registers in the function
8691epilogue, as is done with the 'ldmfd' instruction above.)
8692
8693   You do not have to save callee-saved registers at the very beginning
8694of the function and you do not need to use the '.save' pseudo op
8695immediately following the point at which the registers are saved.
8696However, if you modify a callee-saved register, you must save it on the
8697stack before modifying it and before calling any functions which might
8698throw an exception.  And, you must use the '.save' pseudo op to indicate
8699that you have done so.
8700
8701   The '.pad' (*note .pad: arm_pad.) pseudo op indicates a modification
8702of the stack pointer that does not save any registers.  The argument is
8703the number of bytes (in decimal) that are subtracted from the stack
8704pointer.  (On ARM CPUs, the stack grows downwards, so subtracting from
8705the stack pointer increases the size of the stack.)
8706
8707   The '.setfp' (*note .setfp pseudo op: arm_setfp.) pseudo op indicates
8708the register that contains the frame pointer.  The first argument is the
8709register that is set, which is typically 'fp'.  The second argument
8710indicates the register from which the frame pointer takes its value.
8711The third argument, if present, is the value (in decimal) added to the
8712register specified by the second argument to compute the value of the
8713frame pointer.  You should not modify the frame pointer in the body of
8714the function.
8715
8716   If you do not use a frame pointer, then you should not use the
8717'.setfp' pseudo op.  If you do not use a frame pointer, then you should
8718avoid modifying the stack pointer outside of the function prologue.
8719Otherwise, the run-time library will be unable to find saved registers
8720when it is unwinding the stack.
8721
8722   The pseudo ops described above are sufficient for writing assembly
8723code that calls functions which may throw exceptions.  If you need to
8724know more about the object-file format used to represent unwind
8725information, you may consult the 'Exception Handling ABI for the ARM
8726Architecture' available from <http://infocenter.arm.com>.
8727
8728
8729File: as.info,  Node: AVR-Dependent,  Next: Blackfin-Dependent,  Prev: ARM-Dependent,  Up: Machine Dependencies
8730
87319.5 AVR Dependent Features
8732==========================
8733
8734* Menu:
8735
8736* AVR Options::              Options
8737* AVR Syntax::               Syntax
8738* AVR Opcodes::              Opcodes
8739* AVR Pseudo Instructions::  Pseudo Instructions
8740
8741
8742File: as.info,  Node: AVR Options,  Next: AVR Syntax,  Up: AVR-Dependent
8743
87449.5.1 Options
8745-------------
8746
8747'-mmcu=MCU'
8748     Specify ATMEL AVR instruction set or MCU type.
8749
8750     Instruction set avr1 is for the minimal AVR core, not supported by
8751     the C compiler, only for assembler programs (MCU types: at90s1200,
8752     attiny11, attiny12, attiny15, attiny28).
8753
8754     Instruction set avr2 (default) is for the classic AVR core with up
8755     to 8K program memory space (MCU types: at90s2313, at90s2323,
8756     at90s2333, at90s2343, attiny22, attiny26, at90s4414, at90s4433,
8757     at90s4434, at90s8515, at90c8534, at90s8535).
8758
8759     Instruction set avr25 is for the classic AVR core with up to 8K
8760     program memory space plus the MOVW instruction (MCU types:
8761     attiny13, attiny13a, attiny2313, attiny2313a, attiny24, attiny24a,
8762     attiny4313, attiny44, attiny44a, attiny84, attiny84a, attiny25,
8763     attiny45, attiny85, attiny261, attiny261a, attiny461, attiny461a,
8764     attiny861, attiny861a, attiny87, attiny43u, attiny48, attiny88,
8765     attiny828, at86rf401, ata6289, ata5272).
8766
8767     Instruction set avr3 is for the classic AVR core with up to 128K
8768     program memory space (MCU types: at43usb355, at76c711).
8769
8770     Instruction set avr31 is for the classic AVR core with exactly 128K
8771     program memory space (MCU types: atmega103, at43usb320).
8772
8773     Instruction set avr35 is for classic AVR core plus MOVW, CALL, and
8774     JMP instructions (MCU types: attiny167, attiny1634, at90usb82,
8775     at90usb162, atmega8u2, atmega16u2, atmega32u2, ata5505).
8776
8777     Instruction set avr4 is for the enhanced AVR core with up to 8K
8778     program memory space (MCU types: atmega48, atmega48a, atmega48pa,
8779     atmega48p, atmega8, atmega8a, atmega88, atmega88a, atmega88p,
8780     atmega88pa, atmega8515, atmega8535, atmega8hva, at90pwm1, at90pwm2,
8781     at90pwm2b, at90pwm3, at90pwm3b, at90pwm81, ata6285, ata6286).
8782
8783     Instruction set avr5 is for the enhanced AVR core with up to 128K
8784     program memory space (MCU types: at90pwm161, atmega16, atmega16a,
8785     atmega161, atmega162, atmega163, atmega164a, atmega164p,
8786     atmega164pa, atmega165, atmega165a, atmega165p, atmega165pa,
8787     atmega168, atmega168a, atmega168p, atmega168pa, atmega169,
8788     atmega169a, atmega169p, atmega169pa, atmega32, atmega323,
8789     atmega324a, atmega324p, atmega324pa, atmega325, atmega325a,
8790     atmega32, atmega32a, atmega323, atmega324a, atmega324p,
8791     atmega324pa, atmega325, atmega325a, atmega325p, atmega325p,
8792     atmega325pa, atmega3250, atmega3250a, atmega3250p, atmega3250pa,
8793     atmega328, atmega328p, atmega329, atmega329a, atmega329p,
8794     atmega329pa, atmega3290a, atmega3290p, atmega3290pa, atmega406,
8795     atmega64, atmega64a, atmega64rfr2, atmega644rfr2, atmega640,
8796     atmega644, atmega644a, atmega644p, atmega644pa, atmega645,
8797     atmega645a, atmega645p, atmega6450, atmega6450a, atmega6450p,
8798     atmega649, atmega649a, atmega649p, atmega6490, atmega6490a,
8799     atmega6490p, atmega16hva, atmega16hva2, atmega16hvb,
8800     atmega16hvbrevb, atmega32hvb, atmega32hvbrevb, atmega64hve,
8801     at90can32, at90can64, at90pwm161, at90pwm216, at90pwm316,
8802     atmega32c1, atmega64c1, atmega16m1, atmega32m1, atmega64m1,
8803     atmega16u4, atmega32u4, atmega32u6, at90usb646, at90usb647, at94k,
8804     at90scr100, ata5790, ata5795).
8805
8806     Instruction set avr51 is for the enhanced AVR core with exactly
8807     128K program memory space (MCU types: atmega128, atmega128a,
8808     atmega1280, atmega1281, atmega1284, atmega1284p, atmega128rfa1,
8809     atmega128rfr2, atmega1284rfr2, at90can128, at90usb1286,
8810     at90usb1287, m3000).
8811
8812     Instruction set avr6 is for the enhanced AVR core with a 3-byte PC
8813     (MCU types: atmega2560, atmega2561, atmega256rfr2, atmega2564rfr2).
8814
8815     Instruction set avrxmega2 is for the XMEGA AVR core with 8K to 64K
8816     program memory space and less than 64K data space (MCU types:
8817     atxmega16a4, atxmega16a4u, atxmega16c4, atxmega16d4, atxmega16x1,
8818     atxmega32a4, atxmega32a4u, atxmega32c4, atxmega32d4, atxmega16e5,
8819     atxmega8e5, atxmega32e5, atxmega32x1).
8820
8821     Instruction set avrxmega3 is for the XMEGA AVR core with up to 64K
8822     of combined program memory and RAM, and with program memory visible
8823     in the RAM address space (MCU types: attiny212, attiny214,
8824     attiny412, attiny414, attiny416, attiny417, attiny814, attiny816,
8825     attiny817, attiny1614, attiny1616, attiny1617, attiny3214,
8826     attiny3216, attiny3217).
8827
8828     Instruction set avrxmega4 is for the XMEGA AVR core with up to 64K
8829     program memory space and less than 64K data space (MCU types:
8830     atxmega64a3, atxmega64a3u, atxmega64a4u, atxmega64b1, atxmega64b3,
8831     atxmega64c3, atxmega64d3, atxmega64d4).
8832
8833     Instruction set avrxmega5 is for the XMEGA AVR core with up to 64K
8834     program memory space and greater than 64K data space (MCU types:
8835     atxmega64a1, atxmega64a1u).
8836
8837     Instruction set avrxmega6 is for the XMEGA AVR core with larger
8838     than 64K program memory space and less than 64K data space (MCU
8839     types: atxmega128a3, atxmega128a3u, atxmega128c3, atxmega128d3,
8840     atxmega128d4, atxmega192a3, atxmega192a3u, atxmega128b1,
8841     atxmega128b3, atxmega192c3, atxmega192d3, atxmega256a3,
8842     atxmega256a3u, atxmega256a3b, atxmega256a3bu, atxmega256c3,
8843     atxmega256d3, atxmega384c3, atxmega256d3).
8844
8845     Instruction set avrxmega7 is for the XMEGA AVR core with larger
8846     than 64K program memory space and greater than 64K data space (MCU
8847     types: atxmega128a1, atxmega128a1u, atxmega128a4u).
8848
8849     Instruction set avrtiny is for the ATtiny4/5/9/10/20/40
8850     microcontrollers.
8851
8852'-mall-opcodes'
8853     Accept all AVR opcodes, even if not supported by '-mmcu'.
8854
8855'-mno-skip-bug'
8856     This option disable warnings for skipping two-word instructions.
8857
8858'-mno-wrap'
8859     This option reject 'rjmp/rcall' instructions with 8K wrap-around.
8860
8861'-mrmw'
8862     Accept Read-Modify-Write ('XCH,LAC,LAS,LAT') instructions.
8863
8864'-mlink-relax'
8865     Enable support for link-time relaxation.  This is now on by default
8866     and this flag no longer has any effect.
8867
8868'-mno-link-relax'
8869     Disable support for link-time relaxation.  The assembler will
8870     resolve relocations when it can, and may be able to better compress
8871     some debug information.
8872
8873'-mgcc-isr'
8874     Enable the '__gcc_isr' pseudo instruction.
8875
8876
8877File: as.info,  Node: AVR Syntax,  Next: AVR Opcodes,  Prev: AVR Options,  Up: AVR-Dependent
8878
88799.5.2 Syntax
8880------------
8881
8882* Menu:
8883
8884* AVR-Chars::                Special Characters
8885* AVR-Regs::                 Register Names
8886* AVR-Modifiers::            Relocatable Expression Modifiers
8887
8888
8889File: as.info,  Node: AVR-Chars,  Next: AVR-Regs,  Up: AVR Syntax
8890
88919.5.2.1 Special Characters
8892..........................
8893
8894The presence of a ';' anywhere on a line indicates the start of a
8895comment that extends to the end of that line.
8896
8897   If a '#' appears as the first character of a line, the whole line is
8898treated as a comment, but in this case the line can also be a logical
8899line number directive (*note Comments::) or a preprocessor control
8900command (*note Preprocessing::).
8901
8902   The '$' character can be used instead of a newline to separate
8903statements.
8904
8905
8906File: as.info,  Node: AVR-Regs,  Next: AVR-Modifiers,  Prev: AVR-Chars,  Up: AVR Syntax
8907
89089.5.2.2 Register Names
8909......................
8910
8911The AVR has 32 x 8-bit general purpose working registers 'r0', 'r1', ...
8912'r31'.  Six of the 32 registers can be used as three 16-bit indirect
8913address register pointers for Data Space addressing.  One of the these
8914address pointers can also be used as an address pointer for look up
8915tables in Flash program memory.  These added function registers are the
891616-bit 'X', 'Y' and 'Z' - registers.
8917
8918     X = r26:r27
8919     Y = r28:r29
8920     Z = r30:r31
8921
8922
8923File: as.info,  Node: AVR-Modifiers,  Prev: AVR-Regs,  Up: AVR Syntax
8924
89259.5.2.3 Relocatable Expression Modifiers
8926........................................
8927
8928The assembler supports several modifiers when using relocatable
8929addresses in AVR instruction operands.  The general syntax is the
8930following:
8931
8932     modifier(relocatable-expression)
8933
8934'lo8'
8935
8936     This modifier allows you to use bits 0 through 7 of an address
8937     expression as 8 bit relocatable expression.
8938
8939'hi8'
8940
8941     This modifier allows you to use bits 7 through 15 of an address
8942     expression as 8 bit relocatable expression.  This is useful with,
8943     for example, the AVR 'ldi' instruction and 'lo8' modifier.
8944
8945     For example
8946
8947          ldi r26, lo8(sym+10)
8948          ldi r27, hi8(sym+10)
8949
8950'hh8'
8951
8952     This modifier allows you to use bits 16 through 23 of an address
8953     expression as 8 bit relocatable expression.  Also, can be useful
8954     for loading 32 bit constants.
8955
8956'hlo8'
8957
8958     Synonym of 'hh8'.
8959
8960'hhi8'
8961
8962     This modifier allows you to use bits 24 through 31 of an expression
8963     as 8 bit expression.  This is useful with, for example, the AVR
8964     'ldi' instruction and 'lo8', 'hi8', 'hlo8', 'hhi8', modifier.
8965
8966     For example
8967
8968          ldi r26, lo8(285774925)
8969          ldi r27, hi8(285774925)
8970          ldi r28, hlo8(285774925)
8971          ldi r29, hhi8(285774925)
8972          ; r29,r28,r27,r26 = 285774925
8973
8974'pm_lo8'
8975
8976     This modifier allows you to use bits 0 through 7 of an address
8977     expression as 8 bit relocatable expression.  This modifier useful
8978     for addressing data or code from Flash/Program memory.  The using
8979     of 'pm_lo8' similar to 'lo8'.
8980
8981'pm_hi8'
8982
8983     This modifier allows you to use bits 8 through 15 of an address
8984     expression as 8 bit relocatable expression.  This modifier useful
8985     for addressing data or code from Flash/Program memory.
8986
8987'pm_hh8'
8988
8989     This modifier allows you to use bits 15 through 23 of an address
8990     expression as 8 bit relocatable expression.  This modifier useful
8991     for addressing data or code from Flash/Program memory.
8992
8993
8994File: as.info,  Node: AVR Opcodes,  Next: AVR Pseudo Instructions,  Prev: AVR Syntax,  Up: AVR-Dependent
8995
89969.5.3 Opcodes
8997-------------
8998
8999For detailed information on the AVR machine instruction set, see
9000<www.atmel.com/products/AVR>.
9001
9002   'as' implements all the standard AVR opcodes.  The following table
9003summarizes the AVR opcodes, and their arguments.
9004
9005     Legend:
9006        r   any register
9007        d   'ldi' register (r16-r31)
9008        v   'movw' even register (r0, r2, ..., r28, r30)
9009        a   'fmul' register (r16-r23)
9010        w   'adiw' register (r24,r26,r28,r30)
9011        e   pointer registers (X,Y,Z)
9012        b   base pointer register and displacement ([YZ]+disp)
9013        z   Z pointer register (for [e]lpm Rd,Z[+])
9014        M   immediate value from 0 to 255
9015        n   immediate value from 0 to 255 ( n = ~M ). Relocation impossible
9016        s   immediate value from 0 to 7
9017        P   Port address value from 0 to 63. (in, out)
9018        p   Port address value from 0 to 31. (cbi, sbi, sbic, sbis)
9019        K   immediate value from 0 to 63 (used in 'adiw', 'sbiw')
9020        i   immediate value
9021        l   signed pc relative offset from -64 to 63
9022        L   signed pc relative offset from -2048 to 2047
9023        h   absolute code address (call, jmp)
9024        S   immediate value from 0 to 7 (S = s << 4)
9025        ?   use this opcode entry if no parameters, else use next opcode entry
9026
9027     1001010010001000   clc
9028     1001010011011000   clh
9029     1001010011111000   cli
9030     1001010010101000   cln
9031     1001010011001000   cls
9032     1001010011101000   clt
9033     1001010010111000   clv
9034     1001010010011000   clz
9035     1001010000001000   sec
9036     1001010001011000   seh
9037     1001010001111000   sei
9038     1001010000101000   sen
9039     1001010001001000   ses
9040     1001010001101000   set
9041     1001010000111000   sev
9042     1001010000011000   sez
9043     100101001SSS1000   bclr    S
9044     100101000SSS1000   bset    S
9045     1001010100001001   icall
9046     1001010000001001   ijmp
9047     1001010111001000   lpm     ?
9048     1001000ddddd010+   lpm     r,z
9049     1001010111011000   elpm    ?
9050     1001000ddddd011+   elpm    r,z
9051     0000000000000000   nop
9052     1001010100001000   ret
9053     1001010100011000   reti
9054     1001010110001000   sleep
9055     1001010110011000   break
9056     1001010110101000   wdr
9057     1001010111101000   spm
9058     000111rdddddrrrr   adc     r,r
9059     000011rdddddrrrr   add     r,r
9060     001000rdddddrrrr   and     r,r
9061     000101rdddddrrrr   cp      r,r
9062     000001rdddddrrrr   cpc     r,r
9063     000100rdddddrrrr   cpse    r,r
9064     001001rdddddrrrr   eor     r,r
9065     001011rdddddrrrr   mov     r,r
9066     100111rdddddrrrr   mul     r,r
9067     001010rdddddrrrr   or      r,r
9068     000010rdddddrrrr   sbc     r,r
9069     000110rdddddrrrr   sub     r,r
9070     001001rdddddrrrr   clr     r
9071     000011rdddddrrrr   lsl     r
9072     000111rdddddrrrr   rol     r
9073     001000rdddddrrrr   tst     r
9074     0111KKKKddddKKKK   andi    d,M
9075     0111KKKKddddKKKK   cbr     d,n
9076     1110KKKKddddKKKK   ldi     d,M
9077     11101111dddd1111   ser     d
9078     0110KKKKddddKKKK   ori     d,M
9079     0110KKKKddddKKKK   sbr     d,M
9080     0011KKKKddddKKKK   cpi     d,M
9081     0100KKKKddddKKKK   sbci    d,M
9082     0101KKKKddddKKKK   subi    d,M
9083     1111110rrrrr0sss   sbrc    r,s
9084     1111111rrrrr0sss   sbrs    r,s
9085     1111100ddddd0sss   bld     r,s
9086     1111101ddddd0sss   bst     r,s
9087     10110PPdddddPPPP   in      r,P
9088     10111PPrrrrrPPPP   out     P,r
9089     10010110KKddKKKK   adiw    w,K
9090     10010111KKddKKKK   sbiw    w,K
9091     10011000pppppsss   cbi     p,s
9092     10011010pppppsss   sbi     p,s
9093     10011001pppppsss   sbic    p,s
9094     10011011pppppsss   sbis    p,s
9095     111101lllllll000   brcc    l
9096     111100lllllll000   brcs    l
9097     111100lllllll001   breq    l
9098     111101lllllll100   brge    l
9099     111101lllllll101   brhc    l
9100     111100lllllll101   brhs    l
9101     111101lllllll111   brid    l
9102     111100lllllll111   brie    l
9103     111100lllllll000   brlo    l
9104     111100lllllll100   brlt    l
9105     111100lllllll010   brmi    l
9106     111101lllllll001   brne    l
9107     111101lllllll010   brpl    l
9108     111101lllllll000   brsh    l
9109     111101lllllll110   brtc    l
9110     111100lllllll110   brts    l
9111     111101lllllll011   brvc    l
9112     111100lllllll011   brvs    l
9113     111101lllllllsss   brbc    s,l
9114     111100lllllllsss   brbs    s,l
9115     1101LLLLLLLLLLLL   rcall   L
9116     1100LLLLLLLLLLLL   rjmp    L
9117     1001010hhhhh111h   call    h
9118     1001010hhhhh110h   jmp     h
9119     1001010rrrrr0101   asr     r
9120     1001010rrrrr0000   com     r
9121     1001010rrrrr1010   dec     r
9122     1001010rrrrr0011   inc     r
9123     1001010rrrrr0110   lsr     r
9124     1001010rrrrr0001   neg     r
9125     1001000rrrrr1111   pop     r
9126     1001001rrrrr1111   push    r
9127     1001010rrrrr0111   ror     r
9128     1001010rrrrr0010   swap    r
9129     00000001ddddrrrr   movw    v,v
9130     00000010ddddrrrr   muls    d,d
9131     000000110ddd0rrr   mulsu   a,a
9132     000000110ddd1rrr   fmul    a,a
9133     000000111ddd0rrr   fmuls   a,a
9134     000000111ddd1rrr   fmulsu  a,a
9135     1001001ddddd0000   sts     i,r
9136     1001000ddddd0000   lds     r,i
9137     10o0oo0dddddbooo   ldd     r,b
9138     100!000dddddee-+   ld      r,e
9139     10o0oo1rrrrrbooo   std     b,r
9140     100!001rrrrree-+   st      e,r
9141     1001010100011001   eicall
9142     1001010000011001   eijmp
9143
9144
9145File: as.info,  Node: AVR Pseudo Instructions,  Prev: AVR Opcodes,  Up: AVR-Dependent
9146
91479.5.4 Pseudo Instructions
9148-------------------------
9149
9150The only available pseudo-instruction '__gcc_isr' can be activated by
9151option '-mgcc-isr'.
9152
9153'__gcc_isr 1'
9154     Emit code chunk to be used in avr-gcc ISR prologue.  It will expand
9155     to at most six 1-word instructions, all optional: push of
9156     'tmp_reg', push of 'SREG', push and clear of 'zero_reg', push of
9157     REG.
9158
9159'__gcc_isr 2'
9160     Emit code chunk to be used in an avr-gcc ISR epilogue.  It will
9161     expand to at most five 1-word instructions, all optional: pop of
9162     REG, pop of 'zero_reg', pop of 'SREG', pop of 'tmp_reg'.
9163
9164'__gcc_isr 0, REG'
9165     Finish avr-gcc ISR function.  Scan code since the last prologue for
9166     usage of: 'SREG', 'tmp_reg', 'zero_reg'.  Prologue chunk and
9167     epilogue chunks will be replaced by appropriate code to save /
9168     restore 'SREG', 'tmp_reg', 'zero_reg' and REG.
9169
9170   Example input:
9171
9172     __vector1:
9173         __gcc_isr 1
9174         lds r24, var
9175         inc r24
9176         sts var, r24
9177         __gcc_isr 2
9178         reti
9179         __gcc_isr 0, r24
9180
9181   Example output:
9182
9183     00000000 <__vector1>:
9184        0:   8f 93           push    r24
9185        2:   8f b7           in      r24, 0x3f
9186        4:   8f 93           push    r24
9187        6:   80 91 60 00     lds     r24, 0x0060     ; 0x800060 <var>
9188        a:   83 95           inc     r24
9189        c:   80 93 60 00     sts     0x0060, r24     ; 0x800060 <var>
9190       10:   8f 91           pop     r24
9191       12:   8f bf           out     0x3f, r24
9192       14:   8f 91           pop     r24
9193       16:   18 95           reti
9194
9195
9196File: as.info,  Node: Blackfin-Dependent,  Next: BPF-Dependent,  Prev: AVR-Dependent,  Up: Machine Dependencies
9197
91989.6 Blackfin Dependent Features
9199===============================
9200
9201* Menu:
9202
9203* Blackfin Options::		Blackfin Options
9204* Blackfin Syntax::		Blackfin Syntax
9205* Blackfin Directives::		Blackfin Directives
9206
9207
9208File: as.info,  Node: Blackfin Options,  Next: Blackfin Syntax,  Up: Blackfin-Dependent
9209
92109.6.1 Options
9211-------------
9212
9213'-mcpu=PROCESSOR[-SIREVISION]'
9214     This option specifies the target processor.  The optional
9215     SIREVISION is not used in assembler.  It's here such that GCC can
9216     easily pass down its '-mcpu=' option.  The assembler will issue an
9217     error message if an attempt is made to assemble an instruction
9218     which will not execute on the target processor.  The following
9219     processor names are recognized: 'bf504', 'bf506', 'bf512', 'bf514',
9220     'bf516', 'bf518', 'bf522', 'bf523', 'bf524', 'bf525', 'bf526',
9221     'bf527', 'bf531', 'bf532', 'bf533', 'bf534', 'bf535' (not
9222     implemented yet), 'bf536', 'bf537', 'bf538', 'bf539', 'bf542',
9223     'bf542m', 'bf544', 'bf544m', 'bf547', 'bf547m', 'bf548', 'bf548m',
9224     'bf549', 'bf549m', 'bf561', and 'bf592'.
9225
9226'-mfdpic'
9227     Assemble for the FDPIC ABI.
9228
9229'-mno-fdpic'
9230'-mnopic'
9231     Disable -mfdpic.
9232
9233
9234File: as.info,  Node: Blackfin Syntax,  Next: Blackfin Directives,  Prev: Blackfin Options,  Up: Blackfin-Dependent
9235
92369.6.2 Syntax
9237------------
9238
9239'Special Characters'
9240     Assembler input is free format and may appear anywhere on the line.
9241     One instruction may extend across multiple lines or more than one
9242     instruction may appear on the same line.  White space (space, tab,
9243     comments or newline) may appear anywhere between tokens.  A token
9244     must not have embedded spaces.  Tokens include numbers, register
9245     names, keywords, user identifiers, and also some multicharacter
9246     special symbols like "+=", "/*" or "||".
9247
9248     Comments are introduced by the '#' character and extend to the end
9249     of the current line.  If the '#' appears as the first character of
9250     a line, the whole line is treated as a comment, but in this case
9251     the line can also be a logical line number directive (*note
9252     Comments::) or a preprocessor control command (*note
9253     Preprocessing::).
9254
9255'Instruction Delimiting'
9256     A semicolon must terminate every instruction.  Sometimes a complete
9257     instruction will consist of more than one operation.  There are two
9258     cases where this occurs.  The first is when two general operations
9259     are combined.  Normally a comma separates the different parts, as
9260     in
9261
9262          a0= r3.h * r2.l, a1 = r3.l * r2.h ;
9263
9264     The second case occurs when a general instruction is combined with
9265     one or two memory references for joint issue.  The latter portions
9266     are set off by a "||" token.
9267
9268          a0 = r3.h * r2.l || r1 = [p3++] || r4 = [i2++];
9269
9270     Multiple instructions can occur on the same line.  Each must be
9271     terminated by a semicolon character.
9272
9273'Register Names'
9274
9275     The assembler treats register names and instruction keywords in a
9276     case insensitive manner.  User identifiers are case sensitive.
9277     Thus, R3.l, R3.L, r3.l and r3.L are all equivalent input to the
9278     assembler.
9279
9280     Register names are reserved and may not be used as program
9281     identifiers.
9282
9283     Some operations (such as "Move Register") require a register pair.
9284     Register pairs are always data registers and are denoted using a
9285     colon, eg., R3:2.  The larger number must be written firsts.  Note
9286     that the hardware only supports odd-even pairs, eg., R7:6, R5:4,
9287     R3:2, and R1:0.
9288
9289     Some instructions (such as -SP (Push Multiple)) require a group of
9290     adjacent registers.  Adjacent registers are denoted in the syntax
9291     by the range enclosed in parentheses and separated by a colon, eg.,
9292     (R7:3).  Again, the larger number appears first.
9293
9294     Portions of a particular register may be individually specified.
9295     This is written with a dot (".")  following the register name and
9296     then a letter denoting the desired portion.  For 32-bit registers,
9297     ".H" denotes the most significant ("High") portion.  ".L" denotes
9298     the least-significant portion.  The subdivisions of the 40-bit
9299     registers are described later.
9300
9301'Accumulators'
9302     The set of 40-bit registers A1 and A0 that normally contain data
9303     that is being manipulated.  Each accumulator can be accessed in
9304     four ways.
9305
9306     'one 40-bit register'
9307          The register will be referred to as A1 or A0.
9308     'one 32-bit register'
9309          The registers are designated as A1.W or A0.W.
9310     'two 16-bit registers'
9311          The registers are designated as A1.H, A1.L, A0.H or A0.L.
9312     'one 8-bit register'
9313          The registers are designated as A1.X or A0.X for the bits that
9314          extend beyond bit 31.
9315
9316'Data Registers'
9317     The set of 32-bit registers (R0, R1, R2, R3, R4, R5, R6 and R7)
9318     that normally contain data for manipulation.  These are abbreviated
9319     as D-register or Dreg.  Data registers can be accessed as 32-bit
9320     registers or as two independent 16-bit registers.  The least
9321     significant 16 bits of each register is called the "low" half and
9322     is designated with ".L" following the register name.  The most
9323     significant 16 bits are called the "high" half and is designated
9324     with ".H" following the name.
9325
9326             R7.L, r2.h, r4.L, R0.H
9327
9328'Pointer Registers'
9329     The set of 32-bit registers (P0, P1, P2, P3, P4, P5, SP and FP)
9330     that normally contain byte addresses of data structures.  These are
9331     abbreviated as P-register or Preg.
9332
9333          p2, p5, fp, sp
9334
9335'Stack Pointer SP'
9336     The stack pointer contains the 32-bit address of the last occupied
9337     byte location in the stack.  The stack grows by decrementing the
9338     stack pointer.
9339
9340'Frame Pointer FP'
9341     The frame pointer contains the 32-bit address of the previous frame
9342     pointer in the stack.  It is located at the top of a frame.
9343
9344'Loop Top'
9345     LT0 and LT1.  These registers contain the 32-bit address of the top
9346     of a zero overhead loop.
9347
9348'Loop Count'
9349     LC0 and LC1.  These registers contain the 32-bit counter of the
9350     zero overhead loop executions.
9351
9352'Loop Bottom'
9353     LB0 and LB1.  These registers contain the 32-bit address of the
9354     bottom of a zero overhead loop.
9355
9356'Index Registers'
9357     The set of 32-bit registers (I0, I1, I2, I3) that normally contain
9358     byte addresses of data structures.  Abbreviated I-register or Ireg.
9359
9360'Modify Registers'
9361     The set of 32-bit registers (M0, M1, M2, M3) that normally contain
9362     offset values that are added and subtracted to one of the index
9363     registers.  Abbreviated as Mreg.
9364
9365'Length Registers'
9366     The set of 32-bit registers (L0, L1, L2, L3) that normally contain
9367     the length in bytes of the circular buffer.  Abbreviated as Lreg.
9368     Clear the Lreg to disable circular addressing for the corresponding
9369     Ireg.
9370
9371'Base Registers'
9372     The set of 32-bit registers (B0, B1, B2, B3) that normally contain
9373     the base address in bytes of the circular buffer.  Abbreviated as
9374     Breg.
9375
9376'Floating Point'
9377     The Blackfin family has no hardware floating point but the .float
9378     directive generates ieee floating point numbers for use with
9379     software floating point libraries.
9380
9381'Blackfin Opcodes'
9382     For detailed information on the Blackfin machine instruction set,
9383     see the Blackfin Processor Instruction Set Reference.
9384
9385
9386File: as.info,  Node: Blackfin Directives,  Prev: Blackfin Syntax,  Up: Blackfin-Dependent
9387
93889.6.3 Directives
9389----------------
9390
9391The following directives are provided for compatibility with the VDSP
9392assembler.
9393
9394'.byte2'
9395     Initializes a two byte data object.
9396
9397     This maps to the '.short' directive.
9398'.byte4'
9399     Initializes a four byte data object.
9400
9401     This maps to the '.int' directive.
9402'.db'
9403     Initializes a single byte data object.
9404
9405     This directive is a synonym for '.byte'.
9406'.dw'
9407     Initializes a two byte data object.
9408
9409     This directive is a synonym for '.byte2'.
9410'.dd'
9411     Initializes a four byte data object.
9412
9413     This directive is a synonym for '.byte4'.
9414'.var'
9415     Define and initialize a 32 bit data object.
9416
9417
9418File: as.info,  Node: BPF-Dependent,  Next: CR16-Dependent,  Prev: Blackfin-Dependent,  Up: Machine Dependencies
9419
94209.7 BPF Dependent Features
9421==========================
9422
9423* Menu:
9424
9425* BPF Options::                 Options
9426* BPF Syntax::		        Syntax
9427* BPF Directives::		Machine Directives
9428* BPF Opcodes::			Opcodes
9429
9430
9431File: as.info,  Node: BPF Options,  Next: BPF Syntax,  Up: BPF-Dependent
9432
94339.7.1 Options
9434-------------
9435
9436'-EB'
9437     This option specifies that the assembler should emit big-endian
9438     eBPF.
9439
9440'-EL'
9441     This option specifies that the assembler should emit little-endian
9442     eBPF.
9443
9444   Note that if no endianness option is specified in the command line,
9445the host endianness is used.
9446
9447
9448File: as.info,  Node: BPF Syntax,  Next: BPF Directives,  Prev: BPF Options,  Up: BPF-Dependent
9449
94509.7.2 Syntax
9451------------
9452
9453* Menu:
9454
9455* BPF-Chars::                Special Characters
9456* BPF-Regs::                 Register Names
9457* BPF-Pseudo-Maps::	     Pseudo map fds
9458
9459
9460File: as.info,  Node: BPF-Chars,  Next: BPF-Regs,  Up: BPF Syntax
9461
94629.7.2.1 Special Characters
9463..........................
9464
9465The presence of a ';' on a line indicates the start of a comment that
9466extends to the end of the current line.  If a '#' appears as the first
9467character of a line, the whole line is treated as a comment.
9468
9469   Statements and assembly directives are separated by newlines.
9470
9471
9472File: as.info,  Node: BPF-Regs,  Next: BPF-Pseudo-Maps,  Prev: BPF-Chars,  Up: BPF Syntax
9473
94749.7.2.2 Register Names
9475......................
9476
9477The eBPF processor provides ten general-purpose 64-bit registers, which
9478are read-write, and a read-only frame pointer register:
9479
9480'%r0 .. %r9'
9481     General-purpose registers.
9482'%r10'
9483     Frame pointer register.
9484
9485   Some registers have additional names, to reflect their role in the
9486eBPF ABI:
9487
9488'%a'
9489     This is '%r0'.
9490'%ctx'
9491     This is '%r6'.
9492'%fp'
9493     This is '%r10'.
9494
9495
9496File: as.info,  Node: BPF-Pseudo-Maps,  Prev: BPF-Regs,  Up: BPF Syntax
9497
94989.7.2.3 Pseudo Maps
9499...................
9500
9501The 'LDDW' instruction can take a literal pseudo map file descriptor as
9502its second argument.  This uses the syntax '%map_fd(N)' where 'N' is a
9503signed number.
9504
9505   For example, to load the address of the pseudo map with file
9506descriptor '2' in register 'r1' we would do:
9507
9508             lddw %r1, %map_fd(2)
9509
9510
9511File: as.info,  Node: BPF Directives,  Next: BPF Opcodes,  Prev: BPF Syntax,  Up: BPF-Dependent
9512
95139.7.3 Machine Directives
9514------------------------
9515
9516The BPF version of 'as' supports the following additional machine
9517directives:
9518
9519'.word'
9520     The '.half' directive produces a 16 bit value.
9521
9522'.word'
9523     The '.word' directive produces a 32 bit value.
9524
9525'.dword'
9526     The '.dword' directive produces a 64 bit value.
9527
9528
9529File: as.info,  Node: BPF Opcodes,  Prev: BPF Directives,  Up: BPF-Dependent
9530
95319.7.4 Opcodes
9532-------------
9533
9534In the instruction descriptions below the following field descriptors
9535are used:
9536
9537'%d'
9538     Destination general-purpose register whose role is to be
9539     destination of an operation.
9540'%s'
9541     Source general-purpose register whose role is to be the source of
9542     an operation.
9543'disp16'
9544     16-bit signed PC-relative offset, measured in number of 64-bit
9545     words, minus one.
9546'disp32'
9547     32-bit signed PC-relative offset, measured in number of 64-bit
9548     words, minus one.
9549'offset16'
9550     Signed 16-bit immediate.
9551'imm32'
9552     Signed 32-bit immediate.
9553'imm64'
9554     Signed 64-bit immediate.
9555
95569.7.4.1 Arithmetic instructions
9557...............................
9558
9559The destination register in these instructions act like an accumulator.
9560
9561'add %d, (%s|imm32)'
9562     64-bit arithmetic addition.
9563'sub %d, (%s|imm32)'
9564     64-bit arithmetic subtraction.
9565'mul %d, (%s|imm32)'
9566     64-bit arithmetic multiplication.
9567'div %d, (%s|imm32)'
9568     64-bit arithmetic integer division.
9569'mod %d, (%s|imm32)'
9570     64-bit integer remainder.
9571'and %d, (%s|imm32)'
9572     64-bit bit-wise "and" operation.
9573'or %d, (%s|imm32)'
9574     64-bit bit-wise "or" operation.
9575'xor %d, (%s|imm32)'
9576     64-bit bit-wise exclusive-or operation.
9577'lsh %d, (%s|imm32)'
9578     64-bit left shift, by '%s' or 'imm32' bits.
9579'rsh %d, (%s|imm32)'
9580     64-bit right logical shift, by '%s' or 'imm32' bits.
9581'arsh %d, (%s|imm32)'
9582     64-bit right arithmetic shift, by '%s' or 'imm32' bits.
9583'neg %d'
9584     64-bit arithmetic negation.
9585'mov %d, (%s|imm32)'
9586     Move the 64-bit value of '%s' in '%d', or load 'imm32' in '%d'.
9587
95889.7.4.2 32-bit arithmetic instructions
9589......................................
9590
9591The destination register in these instructions act as an accumulator.
9592
9593'add32 %d, (%s|imm32)'
9594     32-bit arithmetic addition.
9595'sub32 %d, (%s|imm32)'
9596     32-bit arithmetic subtraction.
9597'mul32 %d, (%s|imm32)'
9598     32-bit arithmetic multiplication.
9599'div32 %d, (%s|imm32)'
9600     32-bit arithmetic integer division.
9601'mod32 %d, (%s|imm32)'
9602     32-bit integer remainder.
9603'and32 %d, (%s|imm32)'
9604     32-bit bit-wise "and" operation.
9605'or32 %d, (%s|imm32)'
9606     32-bit bit-wise "or" operation.
9607'xor32 %d, (%s|imm32)'
9608     32-bit bit-wise exclusive-or operation.
9609'lsh32 %d, (%s|imm32)'
9610     32-bit left shift, by '%s' or 'imm32' bits.
9611'rsh32 %d, (%s|imm32)'
9612     32-bit right logical shift, by '%s' or 'imm32' bits.
9613'arsh32 %d, (%s|imm32)'
9614     32-bit right arithmetic shift, by '%s' or 'imm32' bits.
9615'neg32 %d'
9616     32-bit arithmetic negation.
9617'mov32 %d, (%s|imm32)'
9618     Move the 32-bit value of '%s' in '%d', or load 'imm32' in '%d'.
9619
96209.7.4.3 Endianness conversion instructions
9621..........................................
9622
9623'endle %d, (8|16|32)'
9624     Convert the 8-bit, 16-bit or 32-bit value in '%d' to little-endian.
9625'endbe %d, (8|16|32)'
9626     Convert the 8-bit, 16-bit or 32-bit value in '%d' to big-endian.
9627
96289.7.4.4 64-bit load and pseudo maps
9629...................................
9630
9631'lddw %d, imm64'
9632     Load the given signed 64-bit immediate, or pseudo map descriptor,
9633     to the destination register '%d'.
9634'lddw %d, %map_fd(N)'
9635     Load the address of the given pseudo map fd _N_ to the destination
9636     register '%d'.
9637
96389.7.4.5 Load instructions for socket filters
9639............................................
9640
9641The following instructions are intended to be used in socket filters,
9642and are therefore not general-purpose: they make assumptions on the
9643contents of several registers.  See the file
9644'Documentation/networking/filter.txt' in the Linux kernel source tree
9645for more information.
9646
9647   Absolute loads:
9648
9649'ldabsdw imm32'
9650     Absolute 64-bit load.
9651'ldabsw imm32'
9652     Absolute 32-bit load.
9653'ldabsh imm32'
9654     Absolute 16-bit load.
9655'ldabsb imm32'
9656     Absolute 8-bit load.
9657
9658   Indirect loads:
9659
9660'ldinddw %s, imm32'
9661     Indirect 64-bit load.
9662'ldindw %s, imm32'
9663     Indirect 32-bit load.
9664'ldindh %s, imm32'
9665     Indirect 16-bit load.
9666'ldindb %s, imm32'
9667     Indirect 8-bit load.
9668
96699.7.4.6 Generic load/store instructions
9670.......................................
9671
9672General-purpose load and store instructions are provided for several
9673word sizes.
9674
9675   Load to register instructions:
9676
9677'ldxdw %d, [%s+offset16]'
9678     Generic 64-bit load.
9679'ldxw %d, [%s+offset16]'
9680     Generic 32-bit load.
9681'ldxh %d, [%s+offset16]'
9682     Generic 16-bit load.
9683'ldxb %d, [%s+offset16]'
9684     Generic 8-bit load.
9685
9686   Store from register instructions:
9687
9688'stxdw [%d+offset16], %s'
9689     Generic 64-bit store.
9690'stxw [%d+offset16], %s'
9691     Generic 32-bit store.
9692'stxh [%d+offset16], %s'
9693     Generic 16-bit store.
9694'stxb [%d+offset16], %s'
9695     Generic 8-bit store.
9696
9697   Store from immediates instructions:
9698
9699'stddw [%d+offset16], imm32'
9700     Store immediate as 64-bit.
9701'stdw [%d+offset16], imm32'
9702     Store immediate as 32-bit.
9703'stdh [%d+offset16], imm32'
9704     Store immediate as 16-bit.
9705'stdb [%d+offset16], imm32'
9706     Store immediate as 8-bit.
9707
97089.7.4.7 Jump instructions
9709.........................
9710
9711eBPF provides the following compare-and-jump instructions, which compare
9712the values of the two given registers, or the values of a register and
9713an immediate, and perform a branch in case the comparison holds true.
9714
9715'ja %d,(%s|imm32),disp16'
9716     Jump-always.
9717'jeq %d,(%s|imm32),disp16'
9718     Jump if equal.
9719'jgt %d,(%s|imm32),disp16'
9720     Jump if greater.
9721'jge %d,(%s|imm32),disp16'
9722     Jump if greater or equal.
9723'jlt %d,(%s|imm32),disp16'
9724     Jump if lesser.
9725'jle %d,(%s|imm32),disp16'
9726     Jump if lesser or equal.
9727'jset %d,(%s|imm32),disp16'
9728     Jump if signed equal.
9729'jne %d,(%s|imm32),disp16'
9730     Jump if not equal.
9731'jsgt %d,(%s|imm32),disp16'
9732     Jump if signed greater.
9733'jsge %d,(%s|imm32),disp16'
9734     Jump if signed greater or equal.
9735'jslt %d,(%s|imm32),disp16'
9736     Jump if signed lesser.
9737'jsle %d,(%s|imm32),disp16'
9738     Jump if signed lesser or equal.
9739
9740   A call instruction is provided in order to perform calls to other
9741eBPF functions, or to external kernel helpers:
9742
9743'call (disp32|imm32)'
9744     Jump and link to the offset _disp32_, or to the kernel helper
9745     function identified by _imm32_.
9746
9747   Finally:
9748
9749'exit'
9750     Terminate the eBPF program.
9751
97529.7.4.8 Atomic instructions
9753...........................
9754
9755Atomic exchange-and-add instructions are provided in two flavors: one
9756for swapping 64-bit quantities and another for 32-bit quantities.
9757
9758'xadddw [%d+offset16],%s'
9759     Exchange-and-add a 64-bit value at the specified location.
9760'xaddw [%d+offset16],%s'
9761     Exchange-and-add a 32-bit value at the specified location.
9762
9763
9764File: as.info,  Node: CR16-Dependent,  Next: CRIS-Dependent,  Prev: BPF-Dependent,  Up: Machine Dependencies
9765
97669.8 CR16 Dependent Features
9767===========================
9768
9769* Menu:
9770
9771* CR16 Operand Qualifiers::     CR16 Machine Operand Qualifiers
9772* CR16 Syntax::                 Syntax for the CR16
9773
9774
9775File: as.info,  Node: CR16 Operand Qualifiers,  Next: CR16 Syntax,  Up: CR16-Dependent
9776
97779.8.1 CR16 Operand Qualifiers
9778-----------------------------
9779
9780The National Semiconductor CR16 target of 'as' has a few machine
9781dependent operand qualifiers.
9782
9783   Operand expression type qualifier is an optional field in the
9784instruction operand, to determines the type of the expression field of
9785an operand.  The '@' is required.  CR16 architecture uses one of the
9786following expression qualifiers:
9787
9788's'
9789     - 'Specifies expression operand type as small'
9790'm'
9791     - 'Specifies expression operand type as medium'
9792'l'
9793     - 'Specifies expression operand type as large'
9794'c'
9795     - 'Specifies the CR16 Assembler generates a relocation entry for
9796     the operand, where pc has implied bit, the expression is adjusted
9797     accordingly. The linker uses the relocation entry to update the
9798     operand address at link time.'
9799'got/GOT'
9800     - 'Specifies the CR16 Assembler generates a relocation entry for
9801     the operand, offset from Global Offset Table. The linker uses this
9802     relocation entry to update the operand address at link time'
9803'cgot/cGOT'
9804     - 'Specifies the CompactRISC Assembler generates a relocation entry
9805     for the operand, where pc has implied bit, the expression is
9806     adjusted accordingly. The linker uses the relocation entry to
9807     update the operand address at link time.'
9808
9809   CR16 target operand qualifiers and its size (in bits):
9810
9811'Immediate Operand: s'
9812     4 bits.
9813
9814'Immediate Operand: m'
9815     16 bits, for movb and movw instructions.
9816
9817'Immediate Operand: m'
9818     20 bits, movd instructions.
9819
9820'Immediate Operand: l'
9821     32 bits.
9822
9823'Absolute Operand: s'
9824     Illegal specifier for this operand.
9825
9826'Absolute Operand: m'
9827     20 bits, movd instructions.
9828
9829'Displacement Operand: s'
9830     8 bits.
9831
9832'Displacement Operand: m'
9833     16 bits.
9834
9835'Displacement Operand: l'
9836     24 bits.
9837
9838   For example:
9839     1   movw $_myfun@c,r1
9840
9841         This loads the address of _myfun, shifted right by 1, into r1.
9842
9843     2   movd $_myfun@c,(r2,r1)
9844
9845         This loads the address of _myfun, shifted right by 1, into register-pair r2-r1.
9846
9847     3   _myfun_ptr:
9848         .long _myfun@c
9849         loadd _myfun_ptr, (r1,r0)
9850         jal (r1,r0)
9851
9852         This .long directive, the address of _myfunc, shifted right by 1 at link time.
9853
9854     4   loadd  _data1@GOT(r12), (r1,r0)
9855
9856         This loads the address of _data1, into global offset table (ie GOT) and its offset value from GOT loads into register-pair r2-r1.
9857
9858     5   loadd  _myfunc@cGOT(r12), (r1,r0)
9859
9860         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.
9861
9862
9863File: as.info,  Node: CR16 Syntax,  Prev: CR16 Operand Qualifiers,  Up: CR16-Dependent
9864
98659.8.2 CR16 Syntax
9866-----------------
9867
9868* Menu:
9869
9870* CR16-Chars::                Special Characters
9871
9872
9873File: as.info,  Node: CR16-Chars,  Up: CR16 Syntax
9874
98759.8.2.1 Special Characters
9876..........................
9877
9878The presence of a '#' on a line indicates the start of a comment that
9879extends to the end of the current line.  If the '#' appears as the first
9880character of a line, the whole line is treated as a comment, but in this
9881case the line can also be a logical line number directive (*note
9882Comments::) or a preprocessor control command (*note Preprocessing::).
9883
9884   The ';' character can be used to separate statements on the same
9885line.
9886
9887
9888File: as.info,  Node: CRIS-Dependent,  Next: C-SKY-Dependent,  Prev: CR16-Dependent,  Up: Machine Dependencies
9889
98909.9 CRIS Dependent Features
9891===========================
9892
9893* Menu:
9894
9895* CRIS-Opts::              Command-line Options
9896* CRIS-Expand::            Instruction expansion
9897* CRIS-Symbols::           Symbols
9898* CRIS-Syntax::            Syntax
9899
9900
9901File: as.info,  Node: CRIS-Opts,  Next: CRIS-Expand,  Up: CRIS-Dependent
9902
99039.9.1 Command-line Options
9904--------------------------
9905
9906The CRIS version of 'as' has these machine-dependent command-line
9907options.
9908
9909   The format of the generated object files can be either ELF or a.out,
9910specified by the command-line options '--emulation=crisaout' and
9911'--emulation=criself'.  The default is ELF (criself), unless 'as' has
9912been configured specifically for a.out by using the configuration name
9913'cris-axis-aout'.
9914
9915   There are two different link-incompatible ELF object file variants
9916for CRIS, for use in environments where symbols are expected to be
9917prefixed by a leading '_' character and for environments without such a
9918symbol prefix.  The variant used for GNU/Linux port has no symbol
9919prefix.  Which variant to produce is specified by either of the options
9920'--underscore' and '--no-underscore'.  The default is '--underscore'.
9921Since symbols in CRIS a.out objects are expected to have a '_' prefix,
9922specifying '--no-underscore' when generating a.out objects is an error.
9923Besides the object format difference, the effect of this option is to
9924parse register names differently (*note crisnous::).  The
9925'--no-underscore' option makes a '$' register prefix mandatory.
9926
9927   The option '--pic' must be passed to 'as' in order to recognize the
9928symbol syntax used for ELF (SVR4 PIC) position-independent-code (*note
9929crispic::).  This will also affect expansion of instructions.  The
9930expansion with '--pic' will use PC-relative rather than (slightly
9931faster) absolute addresses in those expansions.  This option is only
9932valid when generating ELF format object files.
9933
9934   The option '--march=ARCHITECTURE' specifies the recognized
9935instruction set and recognized register names.  It also controls the
9936architecture type of the object file.  Valid values for ARCHITECTURE
9937are:
9938
9939'v0_v10'
9940     All instructions and register names for any architecture variant in
9941     the set v0...v10 are recognized.  This is the default if the target
9942     is configured as cris-*.
9943
9944'v10'
9945     Only instructions and register names for CRIS v10 (as found in
9946     ETRAX 100 LX) are recognized.  This is the default if the target is
9947     configured as crisv10-*.
9948
9949'v32'
9950     Only instructions and register names for CRIS v32 (code name
9951     Guinness) are recognized.  This is the default if the target is
9952     configured as crisv32-*.  This value implies '--no-mul-bug-abort'.
9953     (A subsequent '--mul-bug-abort' will turn it back on.)
9954
9955'common_v10_v32'
9956     Only instructions with register names and addressing modes with
9957     opcodes common to the v10 and v32 are recognized.
9958
9959   When '-N' is specified, 'as' will emit a warning when a 16-bit branch
9960instruction is expanded into a 32-bit multiple-instruction construct
9961(*note CRIS-Expand::).
9962
9963   Some versions of the CRIS v10, for example in the Etrax 100 LX,
9964contain a bug that causes destabilizing memory accesses when a multiply
9965instruction is executed with certain values in the first operand just
9966before a cache-miss.  When the '--mul-bug-abort' command-line option is
9967active (the default value), 'as' will refuse to assemble a file
9968containing a multiply instruction at a dangerous offset, one that could
9969be the last on a cache-line, or is in a section with insufficient
9970alignment.  This placement checking does not catch any case where the
9971multiply instruction is dangerously placed because it is located in a
9972delay-slot.  The '--mul-bug-abort' command-line option turns off the
9973checking.
9974
9975
9976File: as.info,  Node: CRIS-Expand,  Next: CRIS-Symbols,  Prev: CRIS-Opts,  Up: CRIS-Dependent
9977
99789.9.2 Instruction expansion
9979---------------------------
9980
9981'as' will silently choose an instruction that fits the operand size for
9982'[register+constant]' operands.  For example, the offset '127' in
9983'move.d [r3+127],r4' fits in an instruction using a signed-byte offset.
9984Similarly, 'move.d [r2+32767],r1' will generate an instruction using a
998516-bit offset.  For symbolic expressions and constants that do not fit
9986in 16 bits including the sign bit, a 32-bit offset is generated.
9987
9988   For branches, 'as' will expand from a 16-bit branch instruction into
9989a sequence of instructions that can reach a full 32-bit address.  Since
9990this does not correspond to a single instruction, such expansions can
9991optionally be warned about.  *Note CRIS-Opts::.
9992
9993   If the operand is found to fit the range, a 'lapc' mnemonic will
9994translate to a 'lapcq' instruction.  Use 'lapc.d' to force the 32-bit
9995'lapc' instruction.
9996
9997   Similarly, the 'addo' mnemonic will translate to the shortest fitting
9998instruction of 'addoq', 'addo.w' and 'addo.d', when used with a operand
9999that is a constant known at assembly time.
10000
10001
10002File: as.info,  Node: CRIS-Symbols,  Next: CRIS-Syntax,  Prev: CRIS-Expand,  Up: CRIS-Dependent
10003
100049.9.3 Symbols
10005-------------
10006
10007Some symbols are defined by the assembler.  They're intended to be used
10008in conditional assembly, for example:
10009      .if ..asm.arch.cris.v32
10010      CODE FOR CRIS V32
10011      .elseif ..asm.arch.cris.common_v10_v32
10012      CODE COMMON TO CRIS V32 AND CRIS V10
10013      .elseif ..asm.arch.cris.v10 | ..asm.arch.cris.any_v0_v10
10014      CODE FOR V10
10015      .else
10016      .error "Code needs to be added here."
10017      .endif
10018
10019   These symbols are defined in the assembler, reflecting command-line
10020options, either when specified or the default.  They are always defined,
10021to 0 or 1.
10022
10023'..asm.arch.cris.any_v0_v10'
10024     This symbol is non-zero when '--march=v0_v10' is specified or the
10025     default.
10026
10027'..asm.arch.cris.common_v10_v32'
10028     Set according to the option '--march=common_v10_v32'.
10029
10030'..asm.arch.cris.v10'
10031     Reflects the option '--march=v10'.
10032
10033'..asm.arch.cris.v32'
10034     Corresponds to '--march=v10'.
10035
10036   Speaking of symbols, when a symbol is used in code, it can have a
10037suffix modifying its value for use in position-independent code.  *Note
10038CRIS-Pic::.
10039
10040
10041File: as.info,  Node: CRIS-Syntax,  Prev: CRIS-Symbols,  Up: CRIS-Dependent
10042
100439.9.4 Syntax
10044------------
10045
10046There are different aspects of the CRIS assembly syntax.
10047
10048* Menu:
10049
10050* CRIS-Chars::		        Special Characters
10051* CRIS-Pic::			Position-Independent Code Symbols
10052* CRIS-Regs::			Register Names
10053* CRIS-Pseudos::		Assembler Directives
10054
10055
10056File: as.info,  Node: CRIS-Chars,  Next: CRIS-Pic,  Up: CRIS-Syntax
10057
100589.9.4.1 Special Characters
10059..........................
10060
10061The character '#' is a line comment character.  It starts a comment if
10062and only if it is placed at the beginning of a line.
10063
10064   A ';' character starts a comment anywhere on the line, causing all
10065characters up to the end of the line to be ignored.
10066
10067   A '@' character is handled as a line separator equivalent to a
10068logical new-line character (except in a comment), so separate
10069instructions can be specified on a single line.
10070
10071
10072File: as.info,  Node: CRIS-Pic,  Next: CRIS-Regs,  Prev: CRIS-Chars,  Up: CRIS-Syntax
10073
100749.9.4.2 Symbols in position-independent code
10075............................................
10076
10077When generating position-independent code (SVR4 PIC) for use in
10078cris-axis-linux-gnu or crisv32-axis-linux-gnu shared libraries, symbol
10079suffixes are used to specify what kind of run-time symbol lookup will be
10080used, expressed in the object as different _relocation types_.  Usually,
10081all absolute symbol values must be located in a table, the _global
10082offset table_, leaving the code position-independent; independent of
10083values of global symbols and independent of the address of the code.
10084The suffix modifies the value of the symbol, into for example an index
10085into the global offset table where the real symbol value is entered, or
10086a PC-relative value, or a value relative to the start of the global
10087offset table.  All symbol suffixes start with the character ':' (omitted
10088in the list below).  Every symbol use in code or a read-only section
10089must therefore have a PIC suffix to enable a useful shared library to be
10090created.  Usually, these constructs must not be used with an additive
10091constant offset as is usually allowed, i.e. no 4 as in 'symbol + 4' is
10092allowed.  This restriction is checked at link-time, not at
10093assembly-time.
10094
10095'GOT'
10096
10097     Attaching this suffix to a symbol in an instruction causes the
10098     symbol to be entered into the global offset table.  The value is a
10099     32-bit index for that symbol into the global offset table.  The
10100     name of the corresponding relocation is 'R_CRIS_32_GOT'.  Example:
10101     'move.d [$r0+extsym:GOT],$r9'
10102
10103'GOT16'
10104
10105     Same as for 'GOT', but the value is a 16-bit index into the global
10106     offset table.  The corresponding relocation is 'R_CRIS_16_GOT'.
10107     Example: 'move.d [$r0+asymbol:GOT16],$r10'
10108
10109'PLT'
10110
10111     This suffix is used for function symbols.  It causes a _procedure
10112     linkage table_, an array of code stubs, to be created at the time
10113     the shared object is created or linked against, together with a
10114     global offset table entry.  The value is a pc-relative offset to
10115     the corresponding stub code in the procedure linkage table.  This
10116     arrangement causes the run-time symbol resolver to be called to
10117     look up and set the value of the symbol the first time the function
10118     is called (at latest; depending environment variables).  It is only
10119     safe to leave the symbol unresolved this way if all references are
10120     function calls.  The name of the relocation is
10121     'R_CRIS_32_PLT_PCREL'.  Example: 'add.d fnname:PLT,$pc'
10122
10123'PLTG'
10124
10125     Like PLT, but the value is relative to the beginning of the global
10126     offset table.  The relocation is 'R_CRIS_32_PLT_GOTREL'.  Example:
10127     'move.d fnname:PLTG,$r3'
10128
10129'GOTPLT'
10130
10131     Similar to 'PLT', but the value of the symbol is a 32-bit index
10132     into the global offset table.  This is somewhat of a mix between
10133     the effect of the 'GOT' and the 'PLT' suffix; the difference to
10134     'GOT' is that there will be a procedure linkage table entry
10135     created, and that the symbol is assumed to be a function entry and
10136     will be resolved by the run-time resolver as with 'PLT'.  The
10137     relocation is 'R_CRIS_32_GOTPLT'.  Example: 'jsr
10138     [$r0+fnname:GOTPLT]'
10139
10140'GOTPLT16'
10141
10142     A variant of 'GOTPLT' giving a 16-bit value.  Its relocation name
10143     is 'R_CRIS_16_GOTPLT'.  Example: 'jsr [$r0+fnname:GOTPLT16]'
10144
10145'GOTOFF'
10146
10147     This suffix must only be attached to a local symbol, but may be
10148     used in an expression adding an offset.  The value is the address
10149     of the symbol relative to the start of the global offset table.
10150     The relocation name is 'R_CRIS_32_GOTREL'.  Example: 'move.d
10151     [$r0+localsym:GOTOFF],r3'
10152
10153
10154File: as.info,  Node: CRIS-Regs,  Next: CRIS-Pseudos,  Prev: CRIS-Pic,  Up: CRIS-Syntax
10155
101569.9.4.3 Register names
10157......................
10158
10159A '$' character may always prefix a general or special register name in
10160an instruction operand but is mandatory when the option
10161'--no-underscore' is specified or when the '.syntax register_prefix'
10162directive is in effect (*note crisnous::).  Register names are
10163case-insensitive.
10164
10165
10166File: as.info,  Node: CRIS-Pseudos,  Prev: CRIS-Regs,  Up: CRIS-Syntax
10167
101689.9.4.4 Assembler Directives
10169............................
10170
10171There are a few CRIS-specific pseudo-directives in addition to the
10172generic ones.  *Note Pseudo Ops::.  Constants emitted by
10173pseudo-directives are in little-endian order for CRIS. There is no
10174support for floating-point-specific directives for CRIS.
10175
10176'.dword EXPRESSIONS'
10177
10178     The '.dword' directive is a synonym for '.int', expecting zero or
10179     more EXPRESSIONS, separated by commas.  For each expression, a
10180     32-bit little-endian constant is emitted.
10181
10182'.syntax ARGUMENT'
10183     The '.syntax' directive takes as ARGUMENT one of the following
10184     case-sensitive choices.
10185
10186     'no_register_prefix'
10187
10188          The '.syntax no_register_prefix' directive makes a '$'
10189          character prefix on all registers optional.  It overrides a
10190          previous setting, including the corresponding effect of the
10191          option '--no-underscore'.  If this directive is used when
10192          ordinary symbols do not have a '_' character prefix, care must
10193          be taken to avoid ambiguities whether an operand is a register
10194          or a symbol; using symbols with names the same as general or
10195          special registers then invoke undefined behavior.
10196
10197     'register_prefix'
10198
10199          This directive makes a '$' character prefix on all registers
10200          mandatory.  It overrides a previous setting, including the
10201          corresponding effect of the option '--underscore'.
10202
10203     'leading_underscore'
10204
10205          This is an assertion directive, emitting an error if the
10206          '--no-underscore' option is in effect.
10207
10208     'no_leading_underscore'
10209
10210          This is the opposite of the '.syntax leading_underscore'
10211          directive and emits an error if the option '--underscore' is
10212          in effect.
10213
10214'.arch ARGUMENT'
10215     This is an assertion directive, giving an error if the specified
10216     ARGUMENT is not the same as the specified or default value for the
10217     '--march=ARCHITECTURE' option (*note march-option::).
10218
10219
10220File: as.info,  Node: C-SKY-Dependent,  Next: D10V-Dependent,  Prev: CRIS-Dependent,  Up: Machine Dependencies
10221
102229.10 C-SKY Dependent Features
10223=============================
10224
10225* Menu:
10226
10227* C-SKY Options::              Options
10228* C-SKY Syntax::               Syntax
10229
10230
10231File: as.info,  Node: C-SKY Options,  Next: C-SKY Syntax,  Up: C-SKY-Dependent
10232
102339.10.1 Options
10234--------------
10235
10236'-march=ARCHNAME'
10237     Assemble for architecture ARCHNAME.  The '--help' option lists
10238     valid values for ARCHNAME.
10239
10240'-mcpu=CPUNAME'
10241     Assemble for architecture CPUNAME.  The '--help' option lists valid
10242     values for CPUNAME.
10243
10244'-EL'
10245'-mlittle-endian'
10246     Generate little-endian output.
10247
10248'-EB'
10249'-mbig-endian'
10250     Generate big-endian output.
10251
10252'-fpic'
10253'-pic'
10254     Generate position-independent code.
10255
10256'-mljump'
10257'-mno-ljump'
10258     Enable/disable transformation of the short branch instructions
10259     'jbf', 'jbt', and 'jbr' to 'jmpi'.  This option is for V2
10260     processors only.  It is ignored on CK801 and CK802 targets, which
10261     do not support the 'jmpi' instruction, and is enabled by default
10262     for other processors.
10263
10264'-mbranch-stub'
10265'-mno-branch-stub'
10266     Pass through 'R_CKCORE_PCREL_IMM26BY2' relocations for 'bsr'
10267     instructions to the linker.
10268
10269     This option is only available for bare-metal C-SKY V2 ELF targets,
10270     where it is enabled by default.  It cannot be used in code that
10271     will be dynamically linked against shared libraries.
10272
10273'-force2bsr'
10274'-mforce2bsr'
10275'-no-force2bsr'
10276'-mno-force2bsr'
10277     Enable/disable transformation of 'jbsr' instructions to 'bsr'.
10278     This option is always enabled (and '-mno-force2bsr' is ignored) for
10279     CK801/CK802 targets.  It is also always enabled when
10280     '-mbranch-stub' is in effect.
10281
10282'-jsri2bsr'
10283'-mjsri2bsr'
10284'-no-jsri2bsr'
10285'-mno-jsri2bsr'
10286     Enable/disable transformation of 'jsri' instructions to 'bsr'.
10287     This option is enabled by default.
10288
10289'-mnolrw'
10290'-mno-lrw'
10291     Enable/disable transformation of 'lrw' instructions into a
10292     'movih'/'ori' pair.
10293
10294'-melrw'
10295'-mno-elrw'
10296     Enable/disable extended 'lrw' instructions.  This option is enabled
10297     by default for CK800-series processors.
10298
10299'-mlaf'
10300'-mliterals-after-func'
10301'-mno-laf'
10302'-mno-literals-after-func'
10303     Enable/disable placement of literal pools after each function.
10304
10305'-mlabr'
10306'-mliterals-after-br'
10307'-mno-labr'
10308'-mnoliterals-after-br'
10309     Enable/disable placement of literal pools after unconditional
10310     branches.  This option is enabled by default.
10311
10312'-mistack'
10313'-mno-istack'
10314     Enable/disable interrupt stack instructions.  This option is
10315     enabled by default on CK801, CK802, and CK802 processors.
10316
10317   The following options explicitly enable certain optional
10318instructions.  These features are also enabled implicitly by using
10319'-mcpu=' to specify a processor that supports it.
10320
10321'-mhard-float'
10322     Enable hard float instructions.
10323
10324'-mmp'
10325     Enable multiprocessor instructions.
10326
10327'-mcp'
10328     Enable coprocessor instructions.
10329
10330'-mcache'
10331     Enable cache prefetch instruction.
10332
10333'-msecurity'
10334     Enable C-SKY security instructions.
10335
10336'-mtrust'
10337     Enable C-SKY trust instructions.
10338
10339'-mdsp'
10340     Enable DSP instructions.
10341
10342'-medsp'
10343     Enable enhanced DSP instructions.
10344
10345'-mvdsp'
10346     Enable vector DSP instructions.
10347
10348
10349File: as.info,  Node: C-SKY Syntax,  Prev: C-SKY Options,  Up: C-SKY-Dependent
10350
103519.10.2 Syntax
10352-------------
10353
10354'as' implements the standard C-SKY assembler syntax documented in the
10355'C-SKY V2 CPU Applications Binary Interface Standards Manual'.
10356
10357
10358File: as.info,  Node: D10V-Dependent,  Next: D30V-Dependent,  Prev: C-SKY-Dependent,  Up: Machine Dependencies
10359
103609.11 D10V Dependent Features
10361============================
10362
10363* Menu:
10364
10365* D10V-Opts::                   D10V Options
10366* D10V-Syntax::                 Syntax
10367* D10V-Float::                  Floating Point
10368* D10V-Opcodes::                Opcodes
10369
10370
10371File: as.info,  Node: D10V-Opts,  Next: D10V-Syntax,  Up: D10V-Dependent
10372
103739.11.1 D10V Options
10374-------------------
10375
10376The Mitsubishi D10V version of 'as' has a few machine dependent options.
10377
10378'-O'
10379     The D10V can often execute two sub-instructions in parallel.  When
10380     this option is used, 'as' will attempt to optimize its output by
10381     detecting when instructions can be executed in parallel.
10382'--nowarnswap'
10383     To optimize execution performance, 'as' will sometimes swap the
10384     order of instructions.  Normally this generates a warning.  When
10385     this option is used, no warning will be generated when instructions
10386     are swapped.
10387'--gstabs-packing'
10388'--no-gstabs-packing'
10389     'as' packs adjacent short instructions into a single packed
10390     instruction.  '--no-gstabs-packing' turns instruction packing off
10391     if '--gstabs' is specified as well; '--gstabs-packing' (the
10392     default) turns instruction packing on even when '--gstabs' is
10393     specified.
10394
10395
10396File: as.info,  Node: D10V-Syntax,  Next: D10V-Float,  Prev: D10V-Opts,  Up: D10V-Dependent
10397
103989.11.2 Syntax
10399-------------
10400
10401The D10V syntax is based on the syntax in Mitsubishi's D10V architecture
10402manual.  The differences are detailed below.
10403
10404* Menu:
10405
10406* D10V-Size::                 Size Modifiers
10407* D10V-Subs::                 Sub-Instructions
10408* D10V-Chars::                Special Characters
10409* D10V-Regs::                 Register Names
10410* D10V-Addressing::           Addressing Modes
10411* D10V-Word::                 @WORD Modifier
10412
10413
10414File: as.info,  Node: D10V-Size,  Next: D10V-Subs,  Up: D10V-Syntax
10415
104169.11.2.1 Size Modifiers
10417.......................
10418
10419The D10V version of 'as' uses the instruction names in the D10V
10420Architecture Manual.  However, the names in the manual are sometimes
10421ambiguous.  There are instruction names that can assemble to a short or
10422long form opcode.  How does the assembler pick the correct form?  'as'
10423will always pick the smallest form if it can.  When dealing with a
10424symbol that is not defined yet when a line is being assembled, it will
10425always use the long form.  If you need to force the assembler to use
10426either the short or long form of the instruction, you can append either
10427'.s' (short) or '.l' (long) to it.  For example, if you are writing an
10428assembly program and you want to do a branch to a symbol that is defined
10429later in your program, you can write 'bra.s foo'.  Objdump and GDB will
10430always append '.s' or '.l' to instructions which have both short and
10431long forms.
10432
10433
10434File: as.info,  Node: D10V-Subs,  Next: D10V-Chars,  Prev: D10V-Size,  Up: D10V-Syntax
10435
104369.11.2.2 Sub-Instructions
10437.........................
10438
10439The D10V assembler takes as input a series of instructions, either
10440one-per-line, or in the special two-per-line format described in the
10441next section.  Some of these instructions will be short-form or
10442sub-instructions.  These sub-instructions can be packed into a single
10443instruction.  The assembler will do this automatically.  It will also
10444detect when it should not pack instructions.  For example, when a label
10445is defined, the next instruction will never be packaged with the
10446previous one.  Whenever a branch and link instruction is called, it will
10447not be packaged with the next instruction so the return address will be
10448valid.  Nops are automatically inserted when necessary.
10449
10450   If you do not want the assembler automatically making these
10451decisions, you can control the packaging and execution type (parallel or
10452sequential) with the special execution symbols described in the next
10453section.
10454
10455
10456File: as.info,  Node: D10V-Chars,  Next: D10V-Regs,  Prev: D10V-Subs,  Up: D10V-Syntax
10457
104589.11.2.3 Special Characters
10459...........................
10460
10461A semicolon (';') can be used anywhere on a line to start a comment that
10462extends to the end of the line.
10463
10464   If a '#' appears as the first character of a line, the whole line is
10465treated as a comment, but in this case the line could also be a logical
10466line number directive (*note Comments::) or a preprocessor control
10467command (*note Preprocessing::).
10468
10469   Sub-instructions may be executed in order, in reverse-order, or in
10470parallel.  Instructions listed in the standard one-per-line format will
10471be executed sequentially.  To specify the executing order, use the
10472following symbols:
10473'->'
10474     Sequential with instruction on the left first.
10475'<-'
10476     Sequential with instruction on the right first.
10477'||'
10478     Parallel
10479   The D10V syntax allows either one instruction per line, one
10480instruction per line with the execution symbol, or two instructions per
10481line.  For example
10482'abs a1 -> abs r0'
10483     Execute these sequentially.  The instruction on the right is in the
10484     right container and is executed second.
10485'abs r0 <- abs a1'
10486     Execute these reverse-sequentially.  The instruction on the right
10487     is in the right container, and is executed first.
10488'ld2w r2,@r8+ || mac a0,r0,r7'
10489     Execute these in parallel.
10490'ld2w r2,@r8+ ||'
10491'mac a0,r0,r7'
10492     Two-line format.  Execute these in parallel.
10493'ld2w r2,@r8+'
10494'mac a0,r0,r7'
10495     Two-line format.  Execute these sequentially.  Assembler will put
10496     them in the proper containers.
10497'ld2w r2,@r8+ ->'
10498'mac a0,r0,r7'
10499     Two-line format.  Execute these sequentially.  Same as above but
10500     second instruction will always go into right container.
10501   Since '$' has no special meaning, you may use it in symbol names.
10502
10503
10504File: as.info,  Node: D10V-Regs,  Next: D10V-Addressing,  Prev: D10V-Chars,  Up: D10V-Syntax
10505
105069.11.2.4 Register Names
10507.......................
10508
10509You can use the predefined symbols 'r0' through 'r15' to refer to the
10510D10V registers.  You can also use 'sp' as an alias for 'r15'.  The
10511accumulators are 'a0' and 'a1'.  There are special register-pair names
10512that may optionally be used in opcodes that require even-numbered
10513registers.  Register names are not case sensitive.
10514
10515   Register Pairs
10516'r0-r1'
10517'r2-r3'
10518'r4-r5'
10519'r6-r7'
10520'r8-r9'
10521'r10-r11'
10522'r12-r13'
10523'r14-r15'
10524
10525   The D10V also has predefined symbols for these control registers and
10526status bits:
10527'psw'
10528     Processor Status Word
10529'bpsw'
10530     Backup Processor Status Word
10531'pc'
10532     Program Counter
10533'bpc'
10534     Backup Program Counter
10535'rpt_c'
10536     Repeat Count
10537'rpt_s'
10538     Repeat Start address
10539'rpt_e'
10540     Repeat End address
10541'mod_s'
10542     Modulo Start address
10543'mod_e'
10544     Modulo End address
10545'iba'
10546     Instruction Break Address
10547'f0'
10548     Flag 0
10549'f1'
10550     Flag 1
10551'c'
10552     Carry flag
10553
10554
10555File: as.info,  Node: D10V-Addressing,  Next: D10V-Word,  Prev: D10V-Regs,  Up: D10V-Syntax
10556
105579.11.2.5 Addressing Modes
10558.........................
10559
10560'as' understands the following addressing modes for the D10V. 'RN' in
10561the following refers to any of the numbered registers, but _not_ the
10562control registers.
10563'RN'
10564     Register direct
10565'@RN'
10566     Register indirect
10567'@RN+'
10568     Register indirect with post-increment
10569'@RN-'
10570     Register indirect with post-decrement
10571'@-SP'
10572     Register indirect with pre-decrement
10573'@(DISP, RN)'
10574     Register indirect with displacement
10575'ADDR'
10576     PC relative address (for branch or rep).
10577'#IMM'
10578     Immediate data (the '#' is optional and ignored)
10579
10580
10581File: as.info,  Node: D10V-Word,  Prev: D10V-Addressing,  Up: D10V-Syntax
10582
105839.11.2.6 @WORD Modifier
10584.......................
10585
10586Any symbol followed by '@word' will be replaced by the symbol's value
10587shifted right by 2.  This is used in situations such as loading a
10588register with the address of a function (or any other code fragment).
10589For example, if you want to load a register with the location of the
10590function 'main' then jump to that function, you could do it as follows:
10591     ldi     r2, main@word
10592     jmp     r2
10593
10594
10595File: as.info,  Node: D10V-Float,  Next: D10V-Opcodes,  Prev: D10V-Syntax,  Up: D10V-Dependent
10596
105979.11.3 Floating Point
10598---------------------
10599
10600The D10V has no hardware floating point, but the '.float' and '.double'
10601directives generates IEEE floating-point numbers for compatibility with
10602other development tools.
10603
10604
10605File: as.info,  Node: D10V-Opcodes,  Prev: D10V-Float,  Up: D10V-Dependent
10606
106079.11.4 Opcodes
10608--------------
10609
10610For detailed information on the D10V machine instruction set, see 'D10V
10611Architecture: A VLIW Microprocessor for Multimedia Applications'
10612(Mitsubishi Electric Corp.).  'as' implements all the standard D10V
10613opcodes.  The only changes are those described in the section on size
10614modifiers
10615
10616
10617File: as.info,  Node: D30V-Dependent,  Next: Epiphany-Dependent,  Prev: D10V-Dependent,  Up: Machine Dependencies
10618
106199.12 D30V Dependent Features
10620============================
10621
10622* Menu:
10623
10624* D30V-Opts::                   D30V Options
10625* D30V-Syntax::                 Syntax
10626* D30V-Float::                  Floating Point
10627* D30V-Opcodes::                Opcodes
10628
10629
10630File: as.info,  Node: D30V-Opts,  Next: D30V-Syntax,  Up: D30V-Dependent
10631
106329.12.1 D30V Options
10633-------------------
10634
10635The Mitsubishi D30V version of 'as' has a few machine dependent options.
10636
10637'-O'
10638     The D30V can often execute two sub-instructions in parallel.  When
10639     this option is used, 'as' will attempt to optimize its output by
10640     detecting when instructions can be executed in parallel.
10641
10642'-n'
10643     When this option is used, 'as' will issue a warning every time it
10644     adds a nop instruction.
10645
10646'-N'
10647     When this option is used, 'as' will issue a warning if it needs to
10648     insert a nop after a 32-bit multiply before a load or 16-bit
10649     multiply instruction.
10650
10651
10652File: as.info,  Node: D30V-Syntax,  Next: D30V-Float,  Prev: D30V-Opts,  Up: D30V-Dependent
10653
106549.12.2 Syntax
10655-------------
10656
10657The D30V syntax is based on the syntax in Mitsubishi's D30V architecture
10658manual.  The differences are detailed below.
10659
10660* Menu:
10661
10662* D30V-Size::                 Size Modifiers
10663* D30V-Subs::                 Sub-Instructions
10664* D30V-Chars::                Special Characters
10665* D30V-Guarded::              Guarded Execution
10666* D30V-Regs::                 Register Names
10667* D30V-Addressing::           Addressing Modes
10668
10669
10670File: as.info,  Node: D30V-Size,  Next: D30V-Subs,  Up: D30V-Syntax
10671
106729.12.2.1 Size Modifiers
10673.......................
10674
10675The D30V version of 'as' uses the instruction names in the D30V
10676Architecture Manual.  However, the names in the manual are sometimes
10677ambiguous.  There are instruction names that can assemble to a short or
10678long form opcode.  How does the assembler pick the correct form?  'as'
10679will always pick the smallest form if it can.  When dealing with a
10680symbol that is not defined yet when a line is being assembled, it will
10681always use the long form.  If you need to force the assembler to use
10682either the short or long form of the instruction, you can append either
10683'.s' (short) or '.l' (long) to it.  For example, if you are writing an
10684assembly program and you want to do a branch to a symbol that is defined
10685later in your program, you can write 'bra.s foo'.  Objdump and GDB will
10686always append '.s' or '.l' to instructions which have both short and
10687long forms.
10688
10689
10690File: as.info,  Node: D30V-Subs,  Next: D30V-Chars,  Prev: D30V-Size,  Up: D30V-Syntax
10691
106929.12.2.2 Sub-Instructions
10693.........................
10694
10695The D30V assembler takes as input a series of instructions, either
10696one-per-line, or in the special two-per-line format described in the
10697next section.  Some of these instructions will be short-form or
10698sub-instructions.  These sub-instructions can be packed into a single
10699instruction.  The assembler will do this automatically.  It will also
10700detect when it should not pack instructions.  For example, when a label
10701is defined, the next instruction will never be packaged with the
10702previous one.  Whenever a branch and link instruction is called, it will
10703not be packaged with the next instruction so the return address will be
10704valid.  Nops are automatically inserted when necessary.
10705
10706   If you do not want the assembler automatically making these
10707decisions, you can control the packaging and execution type (parallel or
10708sequential) with the special execution symbols described in the next
10709section.
10710
10711
10712File: as.info,  Node: D30V-Chars,  Next: D30V-Guarded,  Prev: D30V-Subs,  Up: D30V-Syntax
10713
107149.12.2.3 Special Characters
10715...........................
10716
10717A semicolon (';') can be used anywhere on a line to start a comment that
10718extends to the end of the line.
10719
10720   If a '#' appears as the first character of a line, the whole line is
10721treated as a comment, but in this case the line could also be a logical
10722line number directive (*note Comments::) or a preprocessor control
10723command (*note Preprocessing::).
10724
10725   Sub-instructions may be executed in order, in reverse-order, or in
10726parallel.  Instructions listed in the standard one-per-line format will
10727be executed sequentially unless you use the '-O' option.
10728
10729   To specify the executing order, use the following symbols:
10730'->'
10731     Sequential with instruction on the left first.
10732
10733'<-'
10734     Sequential with instruction on the right first.
10735
10736'||'
10737     Parallel
10738
10739   The D30V syntax allows either one instruction per line, one
10740instruction per line with the execution symbol, or two instructions per
10741line.  For example
10742'abs r2,r3 -> abs r4,r5'
10743     Execute these sequentially.  The instruction on the right is in the
10744     right container and is executed second.
10745
10746'abs r2,r3 <- abs r4,r5'
10747     Execute these reverse-sequentially.  The instruction on the right
10748     is in the right container, and is executed first.
10749
10750'abs r2,r3 || abs r4,r5'
10751     Execute these in parallel.
10752
10753'ldw r2,@(r3,r4) ||'
10754'mulx r6,r8,r9'
10755     Two-line format.  Execute these in parallel.
10756
10757'mulx a0,r8,r9'
10758'stw r2,@(r3,r4)'
10759     Two-line format.  Execute these sequentially unless '-O' option is
10760     used.  If the '-O' option is used, the assembler will determine if
10761     the instructions could be done in parallel (the above two
10762     instructions can be done in parallel), and if so, emit them as
10763     parallel instructions.  The assembler will put them in the proper
10764     containers.  In the above example, the assembler will put the 'stw'
10765     instruction in left container and the 'mulx' instruction in the
10766     right container.
10767
10768'stw r2,@(r3,r4) ->'
10769'mulx a0,r8,r9'
10770     Two-line format.  Execute the 'stw' instruction followed by the
10771     'mulx' instruction sequentially.  The first instruction goes in the
10772     left container and the second instruction goes into right
10773     container.  The assembler will give an error if the machine
10774     ordering constraints are violated.
10775
10776'stw r2,@(r3,r4) <-'
10777'mulx a0,r8,r9'
10778     Same as previous example, except that the 'mulx' instruction is
10779     executed before the 'stw' instruction.
10780
10781   Since '$' has no special meaning, you may use it in symbol names.
10782
10783
10784File: as.info,  Node: D30V-Guarded,  Next: D30V-Regs,  Prev: D30V-Chars,  Up: D30V-Syntax
10785
107869.12.2.4 Guarded Execution
10787..........................
10788
10789'as' supports the full range of guarded execution directives for each
10790instruction.  Just append the directive after the instruction proper.
10791The directives are:
10792
10793'/tx'
10794     Execute the instruction if flag f0 is true.
10795'/fx'
10796     Execute the instruction if flag f0 is false.
10797'/xt'
10798     Execute the instruction if flag f1 is true.
10799'/xf'
10800     Execute the instruction if flag f1 is false.
10801'/tt'
10802     Execute the instruction if both flags f0 and f1 are true.
10803'/tf'
10804     Execute the instruction if flag f0 is true and flag f1 is false.
10805
10806
10807File: as.info,  Node: D30V-Regs,  Next: D30V-Addressing,  Prev: D30V-Guarded,  Up: D30V-Syntax
10808
108099.12.2.5 Register Names
10810.......................
10811
10812You can use the predefined symbols 'r0' through 'r63' to refer to the
10813D30V registers.  You can also use 'sp' as an alias for 'r63' and 'link'
10814as an alias for 'r62'.  The accumulators are 'a0' and 'a1'.
10815
10816   The D30V also has predefined symbols for these control registers and
10817status bits:
10818'psw'
10819     Processor Status Word
10820'bpsw'
10821     Backup Processor Status Word
10822'pc'
10823     Program Counter
10824'bpc'
10825     Backup Program Counter
10826'rpt_c'
10827     Repeat Count
10828'rpt_s'
10829     Repeat Start address
10830'rpt_e'
10831     Repeat End address
10832'mod_s'
10833     Modulo Start address
10834'mod_e'
10835     Modulo End address
10836'iba'
10837     Instruction Break Address
10838'f0'
10839     Flag 0
10840'f1'
10841     Flag 1
10842'f2'
10843     Flag 2
10844'f3'
10845     Flag 3
10846'f4'
10847     Flag 4
10848'f5'
10849     Flag 5
10850'f6'
10851     Flag 6
10852'f7'
10853     Flag 7
10854's'
10855     Same as flag 4 (saturation flag)
10856'v'
10857     Same as flag 5 (overflow flag)
10858'va'
10859     Same as flag 6 (sticky overflow flag)
10860'c'
10861     Same as flag 7 (carry/borrow flag)
10862'b'
10863     Same as flag 7 (carry/borrow flag)
10864
10865
10866File: as.info,  Node: D30V-Addressing,  Prev: D30V-Regs,  Up: D30V-Syntax
10867
108689.12.2.6 Addressing Modes
10869.........................
10870
10871'as' understands the following addressing modes for the D30V. 'RN' in
10872the following refers to any of the numbered registers, but _not_ the
10873control registers.
10874'RN'
10875     Register direct
10876'@RN'
10877     Register indirect
10878'@RN+'
10879     Register indirect with post-increment
10880'@RN-'
10881     Register indirect with post-decrement
10882'@-SP'
10883     Register indirect with pre-decrement
10884'@(DISP, RN)'
10885     Register indirect with displacement
10886'ADDR'
10887     PC relative address (for branch or rep).
10888'#IMM'
10889     Immediate data (the '#' is optional and ignored)
10890
10891
10892File: as.info,  Node: D30V-Float,  Next: D30V-Opcodes,  Prev: D30V-Syntax,  Up: D30V-Dependent
10893
108949.12.3 Floating Point
10895---------------------
10896
10897The D30V has no hardware floating point, but the '.float' and '.double'
10898directives generates IEEE floating-point numbers for compatibility with
10899other development tools.
10900
10901
10902File: as.info,  Node: D30V-Opcodes,  Prev: D30V-Float,  Up: D30V-Dependent
10903
109049.12.4 Opcodes
10905--------------
10906
10907For detailed information on the D30V machine instruction set, see 'D30V
10908Architecture: A VLIW Microprocessor for Multimedia Applications'
10909(Mitsubishi Electric Corp.).  'as' implements all the standard D30V
10910opcodes.  The only changes are those described in the section on size
10911modifiers
10912
10913
10914File: as.info,  Node: Epiphany-Dependent,  Next: H8/300-Dependent,  Prev: D30V-Dependent,  Up: Machine Dependencies
10915
109169.13 Epiphany Dependent Features
10917================================
10918
10919* Menu:
10920
10921* Epiphany Options::              Options
10922* Epiphany Syntax::               Epiphany Syntax
10923
10924
10925File: as.info,  Node: Epiphany Options,  Next: Epiphany Syntax,  Up: Epiphany-Dependent
10926
109279.13.1 Options
10928--------------
10929
10930'as' has two additional command-line options for the Epiphany
10931architecture.
10932
10933'-mepiphany'
10934     Specifies that the both 32 and 16 bit instructions are allowed.
10935     This is the default behavior.
10936
10937'-mepiphany16'
10938     Restricts the permitted instructions to just the 16 bit set.
10939
10940
10941File: as.info,  Node: Epiphany Syntax,  Prev: Epiphany Options,  Up: Epiphany-Dependent
10942
109439.13.2 Epiphany Syntax
10944----------------------
10945
10946* Menu:
10947
10948* Epiphany-Chars::                Special Characters
10949
10950
10951File: as.info,  Node: Epiphany-Chars,  Up: Epiphany Syntax
10952
109539.13.2.1 Special Characters
10954...........................
10955
10956The presence of a ';' on a line indicates the start of a comment that
10957extends to the end of the current line.
10958
10959   If a '#' appears as the first character of a line then the whole line
10960is treated as a comment, but in this case the line could also be a
10961logical line number directive (*note Comments::) or a preprocessor
10962control command (*note Preprocessing::).
10963
10964   The '`' character can be used to separate statements on the same
10965line.
10966
10967
10968File: as.info,  Node: H8/300-Dependent,  Next: HPPA-Dependent,  Prev: Epiphany-Dependent,  Up: Machine Dependencies
10969
109709.14 H8/300 Dependent Features
10971==============================
10972
10973* Menu:
10974
10975* H8/300 Options::              Options
10976* H8/300 Syntax::               Syntax
10977* H8/300 Floating Point::       Floating Point
10978* H8/300 Directives::           H8/300 Machine Directives
10979* H8/300 Opcodes::              Opcodes
10980
10981
10982File: as.info,  Node: H8/300 Options,  Next: H8/300 Syntax,  Up: H8/300-Dependent
10983
109849.14.1 Options
10985--------------
10986
10987The Renesas H8/300 version of 'as' has one machine-dependent option:
10988
10989'-h-tick-hex'
10990     Support H'00 style hex constants in addition to 0x00 style.
10991
10992'-mach=NAME'
10993     Sets the H8300 machine variant.  The following machine names are
10994     recognised: 'h8300h', 'h8300hn', 'h8300s', 'h8300sn', 'h8300sx' and
10995     'h8300sxn'.
10996
10997
10998File: as.info,  Node: H8/300 Syntax,  Next: H8/300 Floating Point,  Prev: H8/300 Options,  Up: H8/300-Dependent
10999
110009.14.2 Syntax
11001-------------
11002
11003* Menu:
11004
11005* H8/300-Chars::                Special Characters
11006* H8/300-Regs::                 Register Names
11007* H8/300-Addressing::           Addressing Modes
11008
11009
11010File: as.info,  Node: H8/300-Chars,  Next: H8/300-Regs,  Up: H8/300 Syntax
11011
110129.14.2.1 Special Characters
11013...........................
11014
11015';' is the line comment character.
11016
11017   '$' can be used instead of a newline to separate statements.
11018Therefore _you may not use '$' in symbol names_ on the H8/300.
11019
11020
11021File: as.info,  Node: H8/300-Regs,  Next: H8/300-Addressing,  Prev: H8/300-Chars,  Up: H8/300 Syntax
11022
110239.14.2.2 Register Names
11024.......................
11025
11026You can use predefined symbols of the form 'rNh' and 'rNl' to refer to
11027the H8/300 registers as sixteen 8-bit general-purpose registers.  N is a
11028digit from '0' to '7'); for instance, both 'r0h' and 'r7l' are valid
11029register names.
11030
11031   You can also use the eight predefined symbols 'rN' to refer to the
11032H8/300 registers as 16-bit registers (you must use this form for
11033addressing).
11034
11035   On the H8/300H, you can also use the eight predefined symbols 'erN'
11036('er0' ... 'er7') to refer to the 32-bit general purpose registers.
11037
11038   The two control registers are called 'pc' (program counter; a 16-bit
11039register, except on the H8/300H where it is 24 bits) and 'ccr'
11040(condition code register; an 8-bit register).  'r7' is used as the stack
11041pointer, and can also be called 'sp'.
11042
11043
11044File: as.info,  Node: H8/300-Addressing,  Prev: H8/300-Regs,  Up: H8/300 Syntax
11045
110469.14.2.3 Addressing Modes
11047.........................
11048
11049as understands the following addressing modes for the H8/300:
11050'rN'
11051     Register direct
11052
11053'@rN'
11054     Register indirect
11055
11056'@(D, rN)'
11057'@(D:16, rN)'
11058'@(D:24, rN)'
11059     Register indirect: 16-bit or 24-bit displacement D from register N.
11060     (24-bit displacements are only meaningful on the H8/300H.)
11061
11062'@rN+'
11063     Register indirect with post-increment
11064
11065'@-rN'
11066     Register indirect with pre-decrement
11067
11068'@AA'
11069'@AA:8'
11070'@AA:16'
11071'@AA:24'
11072     Absolute address 'aa'.  (The address size ':24' only makes sense on
11073     the H8/300H.)
11074
11075'#XX'
11076'#XX:8'
11077'#XX:16'
11078'#XX:32'
11079     Immediate data XX.  You may specify the ':8', ':16', or ':32' for
11080     clarity, if you wish; but 'as' neither requires this nor uses
11081     it--the data size required is taken from context.
11082
11083'@@AA'
11084'@@AA:8'
11085     Memory indirect.  You may specify the ':8' for clarity, if you
11086     wish; but 'as' neither requires this nor uses it.
11087
11088
11089File: as.info,  Node: H8/300 Floating Point,  Next: H8/300 Directives,  Prev: H8/300 Syntax,  Up: H8/300-Dependent
11090
110919.14.3 Floating Point
11092---------------------
11093
11094The H8/300 family has no hardware floating point, but the '.float'
11095directive generates IEEE floating-point numbers for compatibility with
11096other development tools.
11097
11098
11099File: as.info,  Node: H8/300 Directives,  Next: H8/300 Opcodes,  Prev: H8/300 Floating Point,  Up: H8/300-Dependent
11100
111019.14.4 H8/300 Machine Directives
11102--------------------------------
11103
11104'as' has the following machine-dependent directives for the H8/300:
11105
11106'.h8300h'
11107     Recognize and emit additional instructions for the H8/300H variant,
11108     and also make '.int' emit 32-bit numbers rather than the usual
11109     (16-bit) for the H8/300 family.
11110
11111'.h8300s'
11112     Recognize and emit additional instructions for the H8S variant, and
11113     also make '.int' emit 32-bit numbers rather than the usual (16-bit)
11114     for the H8/300 family.
11115
11116'.h8300hn'
11117     Recognize and emit additional instructions for the H8/300H variant
11118     in normal mode, and also make '.int' emit 32-bit numbers rather
11119     than the usual (16-bit) for the H8/300 family.
11120
11121'.h8300sn'
11122     Recognize and emit additional instructions for the H8S variant in
11123     normal mode, and also make '.int' emit 32-bit numbers rather than
11124     the usual (16-bit) for the H8/300 family.
11125
11126   On the H8/300 family (including the H8/300H) '.word' directives
11127generate 16-bit numbers.
11128
11129
11130File: as.info,  Node: H8/300 Opcodes,  Prev: H8/300 Directives,  Up: H8/300-Dependent
11131
111329.14.5 Opcodes
11133--------------
11134
11135For detailed information on the H8/300 machine instruction set, see
11136'H8/300 Series Programming Manual'.  For information specific to the
11137H8/300H, see 'H8/300H Series Programming Manual' (Renesas).
11138
11139   'as' implements all the standard H8/300 opcodes.  No additional
11140pseudo-instructions are needed on this family.
11141
11142   The following table summarizes the H8/300 opcodes, and their
11143arguments.  Entries marked '*' are opcodes used only on the H8/300H.
11144
11145              Legend:
11146                 Rs   source register
11147                 Rd   destination register
11148                 abs  absolute address
11149                 imm  immediate data
11150              disp:N  N-bit displacement from a register
11151             pcrel:N  N-bit displacement relative to program counter
11152
11153        add.b #imm,rd              *  andc #imm,ccr
11154        add.b rs,rd                   band #imm,rd
11155        add.w rs,rd                   band #imm,@rd
11156     *  add.w #imm,rd                 band #imm,@abs:8
11157     *  add.l rs,rd                   bra  pcrel:8
11158     *  add.l #imm,rd              *  bra  pcrel:16
11159        adds #imm,rd                  bt   pcrel:8
11160        addx #imm,rd               *  bt   pcrel:16
11161        addx rs,rd                    brn  pcrel:8
11162        and.b #imm,rd              *  brn  pcrel:16
11163        and.b rs,rd                   bf   pcrel:8
11164     *  and.w rs,rd                *  bf   pcrel:16
11165     *  and.w #imm,rd                 bhi  pcrel:8
11166     *  and.l #imm,rd              *  bhi  pcrel:16
11167     *  and.l rs,rd                   bls  pcrel:8
11168     *  bls  pcrel:16                 bld  #imm,rd
11169        bcc  pcrel:8                  bld  #imm,@rd
11170     *  bcc  pcrel:16                 bld  #imm,@abs:8
11171        bhs  pcrel:8                  bnot #imm,rd
11172     *  bhs  pcrel:16                 bnot #imm,@rd
11173        bcs  pcrel:8                  bnot #imm,@abs:8
11174     *  bcs  pcrel:16                 bnot rs,rd
11175        blo  pcrel:8                  bnot rs,@rd
11176     *  blo  pcrel:16                 bnot rs,@abs:8
11177        bne  pcrel:8                  bor  #imm,rd
11178     *  bne  pcrel:16                 bor  #imm,@rd
11179        beq  pcrel:8                  bor  #imm,@abs:8
11180     *  beq  pcrel:16                 bset #imm,rd
11181        bvc  pcrel:8                  bset #imm,@rd
11182     *  bvc  pcrel:16                 bset #imm,@abs:8
11183        bvs  pcrel:8                  bset rs,rd
11184     *  bvs  pcrel:16                 bset rs,@rd
11185        bpl  pcrel:8                  bset rs,@abs:8
11186     *  bpl  pcrel:16                 bsr  pcrel:8
11187        bmi  pcrel:8                  bsr  pcrel:16
11188     *  bmi  pcrel:16                 bst  #imm,rd
11189        bge  pcrel:8                  bst  #imm,@rd
11190     *  bge  pcrel:16                 bst  #imm,@abs:8
11191        blt  pcrel:8                  btst #imm,rd
11192     *  blt  pcrel:16                 btst #imm,@rd
11193        bgt  pcrel:8                  btst #imm,@abs:8
11194     *  bgt  pcrel:16                 btst rs,rd
11195        ble  pcrel:8                  btst rs,@rd
11196     *  ble  pcrel:16                 btst rs,@abs:8
11197        bclr #imm,rd                  bxor #imm,rd
11198        bclr #imm,@rd                 bxor #imm,@rd
11199        bclr #imm,@abs:8              bxor #imm,@abs:8
11200        bclr rs,rd                    cmp.b #imm,rd
11201        bclr rs,@rd                   cmp.b rs,rd
11202        bclr rs,@abs:8                cmp.w rs,rd
11203        biand #imm,rd                 cmp.w rs,rd
11204        biand #imm,@rd             *  cmp.w #imm,rd
11205        biand #imm,@abs:8          *  cmp.l #imm,rd
11206        bild #imm,rd               *  cmp.l rs,rd
11207        bild #imm,@rd                 daa  rs
11208        bild #imm,@abs:8              das  rs
11209        bior #imm,rd                  dec.b rs
11210        bior #imm,@rd              *  dec.w #imm,rd
11211        bior #imm,@abs:8           *  dec.l #imm,rd
11212        bist #imm,rd                  divxu.b rs,rd
11213        bist #imm,@rd              *  divxu.w rs,rd
11214        bist #imm,@abs:8           *  divxs.b rs,rd
11215        bixor #imm,rd              *  divxs.w rs,rd
11216        bixor #imm,@rd                eepmov
11217        bixor #imm,@abs:8          *  eepmovw
11218     *  exts.w rd                     mov.w rs,@abs:16
11219     *  exts.l rd                  *  mov.l #imm,rd
11220     *  extu.w rd                  *  mov.l rs,rd
11221     *  extu.l rd                  *  mov.l @rs,rd
11222        inc  rs                    *  mov.l @(disp:16,rs),rd
11223     *  inc.w #imm,rd              *  mov.l @(disp:24,rs),rd
11224     *  inc.l #imm,rd              *  mov.l @rs+,rd
11225        jmp  @rs                   *  mov.l @abs:16,rd
11226        jmp  abs                   *  mov.l @abs:24,rd
11227        jmp  @@abs:8               *  mov.l rs,@rd
11228        jsr  @rs                   *  mov.l rs,@(disp:16,rd)
11229        jsr  abs                   *  mov.l rs,@(disp:24,rd)
11230        jsr  @@abs:8               *  mov.l rs,@-rd
11231        ldc  #imm,ccr              *  mov.l rs,@abs:16
11232        ldc  rs,ccr                *  mov.l rs,@abs:24
11233     *  ldc  @abs:16,ccr              movfpe @abs:16,rd
11234     *  ldc  @abs:24,ccr              movtpe rs,@abs:16
11235     *  ldc  @(disp:16,rs),ccr        mulxu.b rs,rd
11236     *  ldc  @(disp:24,rs),ccr     *  mulxu.w rs,rd
11237     *  ldc  @rs+,ccr              *  mulxs.b rs,rd
11238     *  ldc  @rs,ccr               *  mulxs.w rs,rd
11239     *  mov.b @(disp:24,rs),rd        neg.b rs
11240     *  mov.b rs,@(disp:24,rd)     *  neg.w rs
11241        mov.b @abs:16,rd           *  neg.l rs
11242        mov.b rs,rd                   nop
11243        mov.b @abs:8,rd               not.b rs
11244        mov.b rs,@abs:8            *  not.w rs
11245        mov.b rs,rd                *  not.l rs
11246        mov.b #imm,rd                 or.b #imm,rd
11247        mov.b @rs,rd                  or.b rs,rd
11248        mov.b @(disp:16,rs),rd     *  or.w #imm,rd
11249        mov.b @rs+,rd              *  or.w rs,rd
11250        mov.b @abs:8,rd            *  or.l #imm,rd
11251        mov.b rs,@rd               *  or.l rs,rd
11252        mov.b rs,@(disp:16,rd)        orc  #imm,ccr
11253        mov.b rs,@-rd                 pop.w rs
11254        mov.b rs,@abs:8            *  pop.l rs
11255        mov.w rs,@rd                  push.w rs
11256     *  mov.w @(disp:24,rs),rd     *  push.l rs
11257     *  mov.w rs,@(disp:24,rd)        rotl.b rs
11258     *  mov.w @abs:24,rd           *  rotl.w rs
11259     *  mov.w rs,@abs:24           *  rotl.l rs
11260        mov.w rs,rd                   rotr.b rs
11261        mov.w #imm,rd              *  rotr.w rs
11262        mov.w @rs,rd               *  rotr.l rs
11263        mov.w @(disp:16,rs),rd        rotxl.b rs
11264        mov.w @rs+,rd              *  rotxl.w rs
11265        mov.w @abs:16,rd           *  rotxl.l rs
11266        mov.w rs,@(disp:16,rd)        rotxr.b rs
11267        mov.w rs,@-rd              *  rotxr.w rs
11268     *  rotxr.l rs                 *  stc  ccr,@(disp:24,rd)
11269        bpt                        *  stc  ccr,@-rd
11270        rte                        *  stc  ccr,@abs:16
11271        rts                        *  stc  ccr,@abs:24
11272        shal.b rs                     sub.b rs,rd
11273     *  shal.w rs                     sub.w rs,rd
11274     *  shal.l rs                  *  sub.w #imm,rd
11275        shar.b rs                  *  sub.l rs,rd
11276     *  shar.w rs                  *  sub.l #imm,rd
11277     *  shar.l rs                     subs #imm,rd
11278        shll.b rs                     subx #imm,rd
11279     *  shll.w rs                     subx rs,rd
11280     *  shll.l rs                  *  trapa #imm
11281        shlr.b rs                     xor  #imm,rd
11282     *  shlr.w rs                     xor  rs,rd
11283     *  shlr.l rs                  *  xor.w #imm,rd
11284        sleep                      *  xor.w rs,rd
11285        stc  ccr,rd                *  xor.l #imm,rd
11286     *  stc  ccr,@rs               *  xor.l rs,rd
11287     *  stc  ccr,@(disp:16,rd)        xorc #imm,ccr
11288
11289   Four H8/300 instructions ('add', 'cmp', 'mov', 'sub') are defined
11290with variants using the suffixes '.b', '.w', and '.l' to specify the
11291size of a memory operand.  'as' supports these suffixes, but does not
11292require them; since one of the operands is always a register, 'as' can
11293deduce the correct size.
11294
11295   For example, since 'r0' refers to a 16-bit register,
11296     mov    r0,@foo
11297is equivalent to
11298     mov.w  r0,@foo
11299
11300   If you use the size suffixes, 'as' issues a warning when the suffix
11301and the register size do not match.
11302
11303
11304File: as.info,  Node: HPPA-Dependent,  Next: i386-Dependent,  Prev: H8/300-Dependent,  Up: Machine Dependencies
11305
113069.15 HPPA Dependent Features
11307============================
11308
11309* Menu:
11310
11311* HPPA Notes::                Notes
11312* HPPA Options::              Options
11313* HPPA Syntax::               Syntax
11314* HPPA Floating Point::       Floating Point
11315* HPPA Directives::           HPPA Machine Directives
11316* HPPA Opcodes::              Opcodes
11317
11318
11319File: as.info,  Node: HPPA Notes,  Next: HPPA Options,  Up: HPPA-Dependent
11320
113219.15.1 Notes
11322------------
11323
11324As a back end for GNU CC 'as' has been thoroughly tested and should work
11325extremely well.  We have tested it only minimally on hand written
11326assembly code and no one has tested it much on the assembly output from
11327the HP compilers.
11328
11329   The format of the debugging sections has changed since the original
11330'as' port (version 1.3X) was released; therefore, you must rebuild all
11331HPPA objects and libraries with the new assembler so that you can debug
11332the final executable.
11333
11334   The HPPA 'as' port generates a small subset of the relocations
11335available in the SOM and ELF object file formats.  Additional relocation
11336support will be added as it becomes necessary.
11337
11338
11339File: as.info,  Node: HPPA Options,  Next: HPPA Syntax,  Prev: HPPA Notes,  Up: HPPA-Dependent
11340
113419.15.2 Options
11342--------------
11343
11344'as' has no machine-dependent command-line options for the HPPA.
11345
11346
11347File: as.info,  Node: HPPA Syntax,  Next: HPPA Floating Point,  Prev: HPPA Options,  Up: HPPA-Dependent
11348
113499.15.3 Syntax
11350-------------
11351
11352The assembler syntax closely follows the HPPA instruction set reference
11353manual; assembler directives and general syntax closely follow the HPPA
11354assembly language reference manual, with a few noteworthy differences.
11355
11356   First, a colon may immediately follow a label definition.  This is
11357simply for compatibility with how most assembly language programmers
11358write code.
11359
11360   Some obscure expression parsing problems may affect hand written code
11361which uses the 'spop' instructions, or code which makes significant use
11362of the '!' line separator.
11363
11364   'as' is much less forgiving about missing arguments and other similar
11365oversights than the HP assembler.  'as' notifies you of missing
11366arguments as syntax errors; this is regarded as a feature, not a bug.
11367
11368   Finally, 'as' allows you to use an external symbol without explicitly
11369importing the symbol.  _Warning:_ in the future this will be an error
11370for HPPA targets.
11371
11372   Special characters for HPPA targets include:
11373
11374   ';' is the line comment character.
11375
11376   '!' can be used instead of a newline to separate statements.
11377
11378   Since '$' has no special meaning, you may use it in symbol names.
11379
11380
11381File: as.info,  Node: HPPA Floating Point,  Next: HPPA Directives,  Prev: HPPA Syntax,  Up: HPPA-Dependent
11382
113839.15.4 Floating Point
11384---------------------
11385
11386The HPPA family uses IEEE floating-point numbers.
11387
11388
11389File: as.info,  Node: HPPA Directives,  Next: HPPA Opcodes,  Prev: HPPA Floating Point,  Up: HPPA-Dependent
11390
113919.15.5 HPPA Assembler Directives
11392--------------------------------
11393
11394'as' for the HPPA supports many additional directives for compatibility
11395with the native assembler.  This section describes them only briefly.
11396For detailed information on HPPA-specific assembler directives, see
11397'HP9000 Series 800 Assembly Language Reference Manual' (HP 92432-90001).
11398
11399   'as' does _not_ support the following assembler directives described
11400in the HP manual:
11401
11402     .endm           .liston
11403     .enter          .locct
11404     .leave          .macro
11405     .listoff
11406
11407   Beyond those implemented for compatibility, 'as' supports one
11408additional assembler directive for the HPPA: '.param'.  It conveys
11409register argument locations for static functions.  Its syntax closely
11410follows the '.export' directive.
11411
11412   These are the additional directives in 'as' for the HPPA:
11413
11414'.block N'
11415'.blockz N'
11416     Reserve N bytes of storage, and initialize them to zero.
11417
11418'.call'
11419     Mark the beginning of a procedure call.  Only the special case with
11420     _no arguments_ is allowed.
11421
11422'.callinfo [ PARAM=VALUE, ... ] [ FLAG, ... ]'
11423     Specify a number of parameters and flags that define the
11424     environment for a procedure.
11425
11426     PARAM may be any of 'frame' (frame size), 'entry_gr' (end of
11427     general register range), 'entry_fr' (end of float register range),
11428     'entry_sr' (end of space register range).
11429
11430     The values for FLAG are 'calls' or 'caller' (proc has subroutines),
11431     'no_calls' (proc does not call subroutines), 'save_rp' (preserve
11432     return pointer), 'save_sp' (proc preserves stack pointer),
11433     'no_unwind' (do not unwind this proc), 'hpux_int' (proc is
11434     interrupt routine).
11435
11436'.code'
11437     Assemble into the standard section called '$TEXT$', subsection
11438     '$CODE$'.
11439
11440'.copyright "STRING"'
11441     In the SOM object format, insert STRING into the object code,
11442     marked as a copyright string.
11443
11444'.copyright "STRING"'
11445     In the ELF object format, insert STRING into the object code,
11446     marked as a version string.
11447
11448'.enter'
11449     Not yet supported; the assembler rejects programs containing this
11450     directive.
11451
11452'.entry'
11453     Mark the beginning of a procedure.
11454
11455'.exit'
11456     Mark the end of a procedure.
11457
11458'.export NAME [ ,TYP ] [ ,PARAM=R ]'
11459     Make a procedure NAME available to callers.  TYP, if present, must
11460     be one of 'absolute', 'code' (ELF only, not SOM), 'data', 'entry',
11461     'data', 'entry', 'millicode', 'plabel', 'pri_prog', or 'sec_prog'.
11462
11463     PARAM, if present, provides either relocation information for the
11464     procedure arguments and result, or a privilege level.  PARAM may be
11465     'argwN' (where N ranges from '0' to '3', and indicates one of four
11466     one-word arguments); 'rtnval' (the procedure's result); or
11467     'priv_lev' (privilege level).  For arguments or the result, R
11468     specifies how to relocate, and must be one of 'no' (not
11469     relocatable), 'gr' (argument is in general register), 'fr' (in
11470     floating point register), or 'fu' (upper half of float register).
11471     For 'priv_lev', R is an integer.
11472
11473'.half N'
11474     Define a two-byte integer constant N; synonym for the portable 'as'
11475     directive '.short'.
11476
11477'.import NAME [ ,TYP ]'
11478     Converse of '.export'; make a procedure available to call.  The
11479     arguments use the same conventions as the first two arguments for
11480     '.export'.
11481
11482'.label NAME'
11483     Define NAME as a label for the current assembly location.
11484
11485'.leave'
11486     Not yet supported; the assembler rejects programs containing this
11487     directive.
11488
11489'.origin LC'
11490     Advance location counter to LC.  Synonym for the 'as' portable
11491     directive '.org'.
11492
11493'.param NAME [ ,TYP ] [ ,PARAM=R ]'
11494     Similar to '.export', but used for static procedures.
11495
11496'.proc'
11497     Use preceding the first statement of a procedure.
11498
11499'.procend'
11500     Use following the last statement of a procedure.
11501
11502'LABEL .reg EXPR'
11503     Synonym for '.equ'; define LABEL with the absolute expression EXPR
11504     as its value.
11505
11506'.space SECNAME [ ,PARAMS ]'
11507     Switch to section SECNAME, creating a new section by that name if
11508     necessary.  You may only use PARAMS when creating a new section,
11509     not when switching to an existing one.  SECNAME may identify a
11510     section by number rather than by name.
11511
11512     If specified, the list PARAMS declares attributes of the section,
11513     identified by keywords.  The keywords recognized are 'spnum=EXP'
11514     (identify this section by the number EXP, an absolute expression),
11515     'sort=EXP' (order sections according to this sort key when linking;
11516     EXP is an absolute expression), 'unloadable' (section contains no
11517     loadable data), 'notdefined' (this section defined elsewhere), and
11518     'private' (data in this section not available to other programs).
11519
11520'.spnum SECNAM'
11521     Allocate four bytes of storage, and initialize them with the
11522     section number of the section named SECNAM.  (You can define the
11523     section number with the HPPA '.space' directive.)
11524
11525'.string "STR"'
11526     Copy the characters in the string STR to the object file.  *Note
11527     Strings: Strings, for information on escape sequences you can use
11528     in 'as' strings.
11529
11530     _Warning!_  The HPPA version of '.string' differs from the usual
11531     'as' definition: it does _not_ write a zero byte after copying STR.
11532
11533'.stringz "STR"'
11534     Like '.string', but appends a zero byte after copying STR to object
11535     file.
11536
11537'.subspa NAME [ ,PARAMS ]'
11538'.nsubspa NAME [ ,PARAMS ]'
11539     Similar to '.space', but selects a subsection NAME within the
11540     current section.  You may only specify PARAMS when you create a
11541     subsection (in the first instance of '.subspa' for this NAME).
11542
11543     If specified, the list PARAMS declares attributes of the
11544     subsection, identified by keywords.  The keywords recognized are
11545     'quad=EXPR' ("quadrant" for this subsection), 'align=EXPR'
11546     (alignment for beginning of this subsection; a power of two),
11547     'access=EXPR' (value for "access rights" field), 'sort=EXPR'
11548     (sorting order for this subspace in link), 'code_only' (subsection
11549     contains only code), 'unloadable' (subsection cannot be loaded into
11550     memory), 'comdat' (subsection is comdat), 'common' (subsection is
11551     common block), 'dup_comm' (subsection may have duplicate names), or
11552     'zero' (subsection is all zeros, do not write in object file).
11553
11554     '.nsubspa' always creates a new subspace with the given name, even
11555     if one with the same name already exists.
11556
11557     'comdat', 'common' and 'dup_comm' can be used to implement various
11558     flavors of one-only support when using the SOM linker.  The SOM
11559     linker only supports specific combinations of these flags.  The
11560     details are not documented.  A brief description is provided here.
11561
11562     'comdat' provides a form of linkonce support.  It is useful for
11563     both code and data subspaces.  A 'comdat' subspace has a key symbol
11564     marked by the 'is_comdat' flag or 'ST_COMDAT'.  Only the first
11565     subspace for any given key is selected.  The key symbol becomes
11566     universal in shared links.  This is similar to the behavior of
11567     'secondary_def' symbols.
11568
11569     'common' provides Fortran named common support.  It is only useful
11570     for data subspaces.  Symbols with the flag 'is_common' retain this
11571     flag in shared links.  Referencing a 'is_common' symbol in a shared
11572     library from outside the library doesn't work.  Thus, 'is_common'
11573     symbols must be output whenever they are needed.
11574
11575     'common' and 'dup_comm' together provide Cobol common support.  The
11576     subspaces in this case must all be the same length.  Otherwise,
11577     this support is similar to the Fortran common support.
11578
11579     'dup_comm' by itself provides a type of one-only support for code.
11580     Only the first 'dup_comm' subspace is selected.  There is a rather
11581     complex algorithm to compare subspaces.  Code symbols marked with
11582     the 'dup_common' flag are hidden.  This support was intended for
11583     "C++ duplicate inlines".
11584
11585     A simplified technique is used to mark the flags of symbols based
11586     on the flags of their subspace.  A symbol with the scope
11587     SS_UNIVERSAL and type ST_ENTRY, ST_CODE or ST_DATA is marked with
11588     the corresponding settings of 'comdat', 'common' and 'dup_comm'
11589     from the subspace, respectively.  This avoids having to introduce
11590     additional directives to mark these symbols.  The HP assembler sets
11591     'is_common' from 'common'.  However, it doesn't set the
11592     'dup_common' from 'dup_comm'.  It doesn't have 'comdat' support.
11593
11594'.version "STR"'
11595     Write STR as version identifier in object code.
11596
11597
11598File: as.info,  Node: HPPA Opcodes,  Prev: HPPA Directives,  Up: HPPA-Dependent
11599
116009.15.6 Opcodes
11601--------------
11602
11603For detailed information on the HPPA machine instruction set, see
11604'PA-RISC Architecture and Instruction Set Reference Manual' (HP
1160509740-90039).
11606
11607
11608File: as.info,  Node: i386-Dependent,  Next: IA-64-Dependent,  Prev: HPPA-Dependent,  Up: Machine Dependencies
11609
116109.16 80386 Dependent Features
11611=============================
11612
11613The i386 version 'as' supports both the original Intel 386 architecture
11614in both 16 and 32-bit mode as well as AMD x86-64 architecture extending
11615the Intel architecture to 64-bits.
11616
11617* Menu:
11618
11619* i386-Options::                Options
11620* i386-Directives::             X86 specific directives
11621* i386-Syntax::                 Syntactical considerations
11622* i386-Mnemonics::              Instruction Naming
11623* i386-Regs::                   Register Naming
11624* i386-Prefixes::               Instruction Prefixes
11625* i386-Memory::                 Memory References
11626* i386-Jumps::                  Handling of Jump Instructions
11627* i386-Float::                  Floating Point
11628* i386-SIMD::                   Intel's MMX and AMD's 3DNow! SIMD Operations
11629* i386-LWP::                    AMD's Lightweight Profiling Instructions
11630* i386-BMI::                    Bit Manipulation Instruction
11631* i386-TBM::                    AMD's Trailing Bit Manipulation Instructions
11632* i386-16bit::                  Writing 16-bit Code
11633* i386-Arch::                   Specifying an x86 CPU architecture
11634* i386-Bugs::                   AT&T Syntax bugs
11635* i386-Notes::                  Notes
11636
11637
11638File: as.info,  Node: i386-Options,  Next: i386-Directives,  Up: i386-Dependent
11639
116409.16.1 Options
11641--------------
11642
11643The i386 version of 'as' has a few machine dependent options:
11644
11645'--32 | --x32 | --64'
11646     Select the word size, either 32 bits or 64 bits.  '--32' implies
11647     Intel i386 architecture, while '--x32' and '--64' imply AMD x86-64
11648     architecture with 32-bit or 64-bit word-size respectively.
11649
11650     These options are only available with the ELF object file format,
11651     and require that the necessary BFD support has been included (on a
11652     32-bit platform you have to add -enable-64-bit-bfd to configure
11653     enable 64-bit usage and use x86-64 as target platform).
11654
11655'-n'
11656     By default, x86 GAS replaces multiple nop instructions used for
11657     alignment within code sections with multi-byte nop instructions
11658     such as leal 0(%esi,1),%esi.  This switch disables the optimization
11659     if a single byte nop (0x90) is explicitly specified as the fill
11660     byte for alignment.
11661
11662'--divide'
11663     On SVR4-derived platforms, the character '/' is treated as a
11664     comment character, which means that it cannot be used in
11665     expressions.  The '--divide' option turns '/' into a normal
11666     character.  This does not disable '/' at the beginning of a line
11667     starting a comment, or affect using '#' for starting a comment.
11668
11669'-march=CPU[+EXTENSION...]'
11670     This option specifies the target processor.  The assembler will
11671     issue an error message if an attempt is made to assemble an
11672     instruction which will not execute on the target processor.  The
11673     following processor names are recognized: 'i8086', 'i186', 'i286',
11674     'i386', 'i486', 'i586', 'i686', 'pentium', 'pentiumpro',
11675     'pentiumii', 'pentiumiii', 'pentium4', 'prescott', 'nocona',
11676     'core', 'core2', 'corei7', 'l1om', 'k1om', 'iamcu', 'k6', 'k6_2',
11677     'athlon', 'opteron', 'k8', 'amdfam10', 'bdver1', 'bdver2',
11678     'bdver3', 'bdver4', 'znver1', 'znver2', 'btver1', 'btver2',
11679     'generic32' and 'generic64'.
11680
11681     In addition to the basic instruction set, the assembler can be told
11682     to accept various extension mnemonics.  For example,
11683     '-march=i686+sse4+vmx' extends I686 with SSE4 and VMX.  The
11684     following extensions are currently supported: '8087', '287', '387',
11685     '687', 'no87', 'no287', 'no387', 'no687', 'cmov', 'nocmov', 'fxsr',
11686     'nofxsr', 'mmx', 'nommx', 'sse', 'sse2', 'sse3', 'ssse3', 'sse4.1',
11687     'sse4.2', 'sse4', 'nosse', 'nosse2', 'nosse3', 'nossse3',
11688     'nosse4.1', 'nosse4.2', 'nosse4', 'avx', 'avx2', 'noavx', 'noavx2',
11689     'adx', 'rdseed', 'prfchw', 'smap', 'mpx', 'sha', 'rdpid',
11690     'ptwrite', 'cet', 'gfni', 'vaes', 'vpclmulqdq', 'prefetchwt1',
11691     'clflushopt', 'se1', 'clwb', 'movdiri', 'movdir64b', 'enqcmd',
11692     'avx512f', 'avx512cd', 'avx512er', 'avx512pf', 'avx512vl',
11693     'avx512bw', 'avx512dq', 'avx512ifma', 'avx512vbmi',
11694     'avx512_4fmaps', 'avx512_4vnniw', 'avx512_vpopcntdq',
11695     'avx512_vbmi2', 'avx512_vnni', 'avx512_bitalg', 'avx512_bf16',
11696     'noavx512f', 'noavx512cd', 'noavx512er', 'noavx512pf',
11697     'noavx512vl', 'noavx512bw', 'noavx512dq', 'noavx512ifma',
11698     'noavx512vbmi', 'noavx512_4fmaps', 'noavx512_4vnniw',
11699     'noavx512_vpopcntdq', 'noavx512_vbmi2', 'noavx512_vnni',
11700     'noavx512_bitalg', 'noavx512_vp2intersect', 'noavx512_bf16',
11701     'noenqcmd', 'vmx', 'vmfunc', 'smx', 'xsave', 'xsaveopt', 'xsavec',
11702     'xsaves', 'aes', 'pclmul', 'fsgsbase', 'rdrnd', 'f16c', 'bmi2',
11703     'fma', 'movbe', 'ept', 'lzcnt', 'hle', 'rtm', 'invpcid', 'clflush',
11704     'mwaitx', 'clzero', 'wbnoinvd', 'pconfig', 'waitpkg', 'cldemote',
11705     'rdpru', 'mcommit', 'lwp', 'fma4', 'xop', 'cx16', 'syscall',
11706     'rdtscp', '3dnow', '3dnowa', 'sse4a', 'sse5', 'svme', 'abm' and
11707     'padlock'.  Note that rather than extending a basic instruction
11708     set, the extension mnemonics starting with 'no' revoke the
11709     respective functionality.
11710
11711     When the '.arch' directive is used with '-march', the '.arch'
11712     directive will take precedent.
11713
11714'-mtune=CPU'
11715     This option specifies a processor to optimize for.  When used in
11716     conjunction with the '-march' option, only instructions of the
11717     processor specified by the '-march' option will be generated.
11718
11719     Valid CPU values are identical to the processor list of
11720     '-march=CPU'.
11721
11722'-msse2avx'
11723     This option specifies that the assembler should encode SSE
11724     instructions with VEX prefix.
11725
11726'-msse-check=NONE'
11727'-msse-check=WARNING'
11728'-msse-check=ERROR'
11729     These options control if the assembler should check SSE
11730     instructions.  '-msse-check=NONE' will make the assembler not to
11731     check SSE instructions, which is the default.
11732     '-msse-check=WARNING' will make the assembler issue a warning for
11733     any SSE instruction.  '-msse-check=ERROR' will make the assembler
11734     issue an error for any SSE instruction.
11735
11736'-mavxscalar=128'
11737'-mavxscalar=256'
11738     These options control how the assembler should encode scalar AVX
11739     instructions.  '-mavxscalar=128' will encode scalar AVX
11740     instructions with 128bit vector length, which is the default.
11741     '-mavxscalar=256' will encode scalar AVX instructions with 256bit
11742     vector length.
11743
11744     WARNING: Don't use this for production code - due to CPU errata the
11745     resulting code may not work on certain models.
11746
11747'-mvexwig=0'
11748'-mvexwig=1'
11749     These options control how the assembler should encode VEX.W-ignored
11750     (WIG) VEX instructions.  '-mvexwig=0' will encode WIG VEX
11751     instructions with vex.w = 0, which is the default.  '-mvexwig=1'
11752     will encode WIG EVEX instructions with vex.w = 1.
11753
11754     WARNING: Don't use this for production code - due to CPU errata the
11755     resulting code may not work on certain models.
11756
11757'-mevexlig=128'
11758'-mevexlig=256'
11759'-mevexlig=512'
11760     These options control how the assembler should encode
11761     length-ignored (LIG) EVEX instructions.  '-mevexlig=128' will
11762     encode LIG EVEX instructions with 128bit vector length, which is
11763     the default.  '-mevexlig=256' and '-mevexlig=512' will encode LIG
11764     EVEX instructions with 256bit and 512bit vector length,
11765     respectively.
11766
11767'-mevexwig=0'
11768'-mevexwig=1'
11769     These options control how the assembler should encode w-ignored
11770     (WIG) EVEX instructions.  '-mevexwig=0' will encode WIG EVEX
11771     instructions with evex.w = 0, which is the default.  '-mevexwig=1'
11772     will encode WIG EVEX instructions with evex.w = 1.
11773
11774'-mmnemonic=ATT'
11775'-mmnemonic=INTEL'
11776     This option specifies instruction mnemonic for matching
11777     instructions.  The '.att_mnemonic' and '.intel_mnemonic' directives
11778     will take precedent.
11779
11780'-msyntax=ATT'
11781'-msyntax=INTEL'
11782     This option specifies instruction syntax when processing
11783     instructions.  The '.att_syntax' and '.intel_syntax' directives
11784     will take precedent.
11785
11786'-mnaked-reg'
11787     This option specifies that registers don't require a '%' prefix.
11788     The '.att_syntax' and '.intel_syntax' directives will take
11789     precedent.
11790
11791'-madd-bnd-prefix'
11792     This option forces the assembler to add BND prefix to all branches,
11793     even if such prefix was not explicitly specified in the source
11794     code.
11795
11796'-mno-shared'
11797     On ELF target, the assembler normally optimizes out non-PLT
11798     relocations against defined non-weak global branch targets with
11799     default visibility.  The '-mshared' option tells the assembler to
11800     generate code which may go into a shared library where all non-weak
11801     global branch targets with default visibility can be preempted.
11802     The resulting code is slightly bigger.  This option only affects
11803     the handling of branch instructions.
11804
11805'-mbig-obj'
11806     On x86-64 PE/COFF target this option forces the use of big object
11807     file format, which allows more than 32768 sections.
11808
11809'-momit-lock-prefix=NO'
11810'-momit-lock-prefix=YES'
11811     These options control how the assembler should encode lock prefix.
11812     This option is intended as a workaround for processors, that fail
11813     on lock prefix.  This option can only be safely used with
11814     single-core, single-thread computers '-momit-lock-prefix=YES' will
11815     omit all lock prefixes.  '-momit-lock-prefix=NO' will encode lock
11816     prefix as usual, which is the default.
11817
11818'-mfence-as-lock-add=NO'
11819'-mfence-as-lock-add=YES'
11820     These options control how the assembler should encode lfence,
11821     mfence and sfence.  '-mfence-as-lock-add=YES' will encode lfence,
11822     mfence and sfence as 'lock addl $0x0, (%rsp)' in 64-bit mode and
11823     'lock addl $0x0, (%esp)' in 32-bit mode.  '-mfence-as-lock-add=NO'
11824     will encode lfence, mfence and sfence as usual, which is the
11825     default.
11826
11827'-mrelax-relocations=NO'
11828'-mrelax-relocations=YES'
11829     These options control whether the assembler should generate relax
11830     relocations, R_386_GOT32X, in 32-bit mode, or R_X86_64_GOTPCRELX
11831     and R_X86_64_REX_GOTPCRELX, in 64-bit mode.
11832     '-mrelax-relocations=YES' will generate relax relocations.
11833     '-mrelax-relocations=NO' will not generate relax relocations.  The
11834     default can be controlled by a configure option
11835     '--enable-x86-relax-relocations'.
11836
11837'-malign-branch-boundary=NUM'
11838     This option controls how the assembler should align branches with
11839     segment prefixes or NOP. NUM must be a power of 2.  It should be 0
11840     or no less than 16.  Branches will be aligned within NUM byte
11841     boundary.  '-malign-branch-boundary=0', which is the default,
11842     doesn't align branches.
11843
11844'-malign-branch=TYPE[+TYPE...]'
11845     This option specifies types of branches to align.  TYPE is
11846     combination of 'jcc', which aligns conditional jumps, 'fused',
11847     which aligns fused conditional jumps, 'jmp', which aligns
11848     unconditional jumps, 'call' which aligns calls, 'ret', which aligns
11849     rets, 'indirect', which aligns indirect jumps and calls.  The
11850     default is '-malign-branch=jcc+fused+jmp'.
11851
11852'-malign-branch-prefix-size=NUM'
11853     This option specifies the maximum number of prefixes on an
11854     instruction to align branches.  NUM should be between 0 and 5.  The
11855     default NUM is 5.
11856
11857'-mbranches-within-32B-boundaries'
11858     This option aligns conditional jumps, fused conditional jumps and
11859     unconditional jumps within 32 byte boundary with up to 5 segment
11860     prefixes on an instruction.  It is equivalent to
11861     '-malign-branch-boundary=32' '-malign-branch=jcc+fused+jmp'
11862     '-malign-branch-prefix-size=5'.  The default doesn't align
11863     branches.
11864
11865'-mx86-used-note=NO'
11866'-mx86-used-note=YES'
11867     These options control whether the assembler should generate
11868     GNU_PROPERTY_X86_ISA_1_USED and GNU_PROPERTY_X86_FEATURE_2_USED GNU
11869     property notes.  The default can be controlled by the
11870     '--enable-x86-used-note' configure option.
11871
11872'-mevexrcig=RNE'
11873'-mevexrcig=RD'
11874'-mevexrcig=RU'
11875'-mevexrcig=RZ'
11876     These options control how the assembler should encode SAE-only EVEX
11877     instructions.  '-mevexrcig=RNE' will encode RC bits of EVEX
11878     instruction with 00, which is the default.  '-mevexrcig=RD',
11879     '-mevexrcig=RU' and '-mevexrcig=RZ' will encode SAE-only EVEX
11880     instructions with 01, 10 and 11 RC bits, respectively.
11881
11882'-mamd64'
11883'-mintel64'
11884     This option specifies that the assembler should accept only AMD64
11885     or Intel64 ISA in 64-bit mode.  The default is to accept both.
11886
11887'-O0 | -O | -O1 | -O2 | -Os'
11888     Optimize instruction encoding with smaller instruction size.  '-O'
11889     and '-O1' encode 64-bit register load instructions with 64-bit
11890     immediate as 32-bit register load instructions with 31-bit or
11891     32-bits immediates, encode 64-bit register clearing instructions
11892     with 32-bit register clearing instructions, encode 256-bit/512-bit
11893     VEX/EVEX vector register clearing instructions with 128-bit VEX
11894     vector register clearing instructions, encode 128-bit/256-bit EVEX
11895     vector register load/store instructions with VEX vector register
11896     load/store instructions, and encode 128-bit/256-bit EVEX packed
11897     integer logical instructions with 128-bit/256-bit VEX packed
11898     integer logical.
11899
11900     '-O2' includes '-O1' optimization plus encodes 256-bit/512-bit EVEX
11901     vector register clearing instructions with 128-bit EVEX vector
11902     register clearing instructions.  In 64-bit mode VEX encoded
11903     instructions with commutative source operands will also have their
11904     source operands swapped if this allows using the 2-byte VEX prefix
11905     form instead of the 3-byte one.  Certain forms of AND as well as OR
11906     with the same (register) operand specified twice will also be
11907     changed to TEST.
11908
11909     '-Os' includes '-O2' optimization plus encodes 16-bit, 32-bit and
11910     64-bit register tests with immediate as 8-bit register test with
11911     immediate.  '-O0' turns off this optimization.
11912
11913
11914File: as.info,  Node: i386-Directives,  Next: i386-Syntax,  Prev: i386-Options,  Up: i386-Dependent
11915
119169.16.2 x86 specific Directives
11917------------------------------
11918
11919'.lcomm SYMBOL , LENGTH[, ALIGNMENT]'
11920     Reserve LENGTH (an absolute expression) bytes for a local common
11921     denoted by SYMBOL.  The section and value of SYMBOL are those of
11922     the new local common.  The addresses are allocated in the bss
11923     section, so that at run-time the bytes start off zeroed.  Since
11924     SYMBOL is not declared global, it is normally not visible to 'ld'.
11925     The optional third parameter, ALIGNMENT, specifies the desired
11926     alignment of the symbol in the bss section.
11927
11928     This directive is only available for COFF based x86 targets.
11929
11930'.largecomm SYMBOL , LENGTH[, ALIGNMENT]'
11931     This directive behaves in the same way as the 'comm' directive
11932     except that the data is placed into the .LBSS section instead of
11933     the .BSS section *note Comm::.
11934
11935     The directive is intended to be used for data which requires a
11936     large amount of space, and it is only available for ELF based
11937     x86_64 targets.
11938
11939'.value EXPRESSION [, EXPRESSION]'
11940     This directive behaves in the same way as the '.short' directive,
11941     taking a series of comma separated expressions and storing them as
11942     two-byte wide values into the current section.
11943
11944
11945File: as.info,  Node: i386-Syntax,  Next: i386-Mnemonics,  Prev: i386-Directives,  Up: i386-Dependent
11946
119479.16.3 i386 Syntactical Considerations
11948--------------------------------------
11949
11950* Menu:
11951
11952* i386-Variations::           AT&T Syntax versus Intel Syntax
11953* i386-Chars::                Special Characters
11954
11955
11956File: as.info,  Node: i386-Variations,  Next: i386-Chars,  Up: i386-Syntax
11957
119589.16.3.1 AT&T Syntax versus Intel Syntax
11959........................................
11960
11961'as' now supports assembly using Intel assembler syntax.
11962'.intel_syntax' selects Intel mode, and '.att_syntax' switches back to
11963the usual AT&T mode for compatibility with the output of 'gcc'.  Either
11964of these directives may have an optional argument, 'prefix', or
11965'noprefix' specifying whether registers require a '%' prefix.  AT&T
11966System V/386 assembler syntax is quite different from Intel syntax.  We
11967mention these differences because almost all 80386 documents use Intel
11968syntax.  Notable differences between the two syntaxes are:
11969
11970   * AT&T immediate operands are preceded by '$'; Intel immediate
11971     operands are undelimited (Intel 'push 4' is AT&T 'pushl $4').  AT&T
11972     register operands are preceded by '%'; Intel register operands are
11973     undelimited.  AT&T absolute (as opposed to PC relative) jump/call
11974     operands are prefixed by '*'; they are undelimited in Intel syntax.
11975
11976   * AT&T and Intel syntax use the opposite order for source and
11977     destination operands.  Intel 'add eax, 4' is 'addl $4, %eax'.  The
11978     'source, dest' convention is maintained for compatibility with
11979     previous Unix assemblers.  Note that 'bound', 'invlpga', and
11980     instructions with 2 immediate operands, such as the 'enter'
11981     instruction, do _not_ have reversed order.  *note i386-Bugs::.
11982
11983   * In AT&T syntax the size of memory operands is determined from the
11984     last character of the instruction mnemonic.  Mnemonic suffixes of
11985     'b', 'w', 'l' and 'q' specify byte (8-bit), word (16-bit), long
11986     (32-bit) and quadruple word (64-bit) memory references.  Mnemonic
11987     suffixes of 'x', 'y' and 'z' specify xmm (128-bit vector), ymm
11988     (256-bit vector) and zmm (512-bit vector) memory references, only
11989     when there's no other way to disambiguate an instruction.  Intel
11990     syntax accomplishes this by prefixing memory operands (_not_ the
11991     instruction mnemonics) with 'byte ptr', 'word ptr', 'dword ptr',
11992     'qword ptr', 'xmmword ptr', 'ymmword ptr' and 'zmmword ptr'.  Thus,
11993     Intel syntax 'mov al, byte ptr FOO' is 'movb FOO, %al' in AT&T
11994     syntax.  In Intel syntax, 'fword ptr', 'tbyte ptr' and 'oword ptr'
11995     specify 48-bit, 80-bit and 128-bit memory references.
11996
11997     In 64-bit code, 'movabs' can be used to encode the 'mov'
11998     instruction with the 64-bit displacement or immediate operand.
11999
12000   * Immediate form long jumps and calls are 'lcall/ljmp $SECTION,
12001     $OFFSET' in AT&T syntax; the Intel syntax is 'call/jmp far
12002     SECTION:OFFSET'.  Also, the far return instruction is 'lret
12003     $STACK-ADJUST' in AT&T syntax; Intel syntax is 'ret far
12004     STACK-ADJUST'.
12005
12006   * The AT&T assembler does not provide support for multiple section
12007     programs.  Unix style systems expect all programs to be single
12008     sections.
12009
12010
12011File: as.info,  Node: i386-Chars,  Prev: i386-Variations,  Up: i386-Syntax
12012
120139.16.3.2 Special Characters
12014...........................
12015
12016The presence of a '#' appearing anywhere on a line indicates the start
12017of a comment that extends to the end of that line.
12018
12019   If a '#' appears as the first character of a line then the whole line
12020is treated as a comment, but in this case the line can also be a logical
12021line number directive (*note Comments::) or a preprocessor control
12022command (*note Preprocessing::).
12023
12024   If the '--divide' command-line option has not been specified then the
12025'/' character appearing anywhere on a line also introduces a line
12026comment.
12027
12028   The ';' character can be used to separate statements on the same
12029line.
12030
12031
12032File: as.info,  Node: i386-Mnemonics,  Next: i386-Regs,  Prev: i386-Syntax,  Up: i386-Dependent
12033
120349.16.4 i386-Mnemonics
12035---------------------
12036
120379.16.4.1 Instruction Naming
12038...........................
12039
12040Instruction mnemonics are suffixed with one character modifiers which
12041specify the size of operands.  The letters 'b', 'w', 'l' and 'q' specify
12042byte, word, long and quadruple word operands.  If no suffix is specified
12043by an instruction then 'as' tries to fill in the missing suffix based on
12044the destination register operand (the last one by convention).  Thus,
12045'mov %ax, %bx' is equivalent to 'movw %ax, %bx'; also, 'mov $1, %bx' is
12046equivalent to 'movw $1, bx'.  Note that this is incompatible with the
12047AT&T Unix assembler which assumes that a missing mnemonic suffix implies
12048long operand size.  (This incompatibility does not affect compiler
12049output since compilers always explicitly specify the mnemonic suffix.)
12050
12051   Almost all instructions have the same names in AT&T and Intel format.
12052There are a few exceptions.  The sign extend and zero extend
12053instructions need two sizes to specify them.  They need a size to
12054sign/zero extend _from_ and a size to zero extend _to_.  This is
12055accomplished by using two instruction mnemonic suffixes in AT&T syntax.
12056Base names for sign extend and zero extend are 'movs...' and 'movz...'
12057in AT&T syntax ('movsx' and 'movzx' in Intel syntax).  The instruction
12058mnemonic suffixes are tacked on to this base name, the _from_ suffix
12059before the _to_ suffix.  Thus, 'movsbl %al, %edx' is AT&T syntax for
12060"move sign extend _from_ %al _to_ %edx."  Possible suffixes, thus, are
12061'bl' (from byte to long), 'bw' (from byte to word), 'wl' (from word to
12062long), 'bq' (from byte to quadruple word), 'wq' (from word to quadruple
12063word), and 'lq' (from long to quadruple word).
12064
12065   Different encoding options can be specified via pseudo prefixes:
12066
12067   * '{disp8}' - prefer 8-bit displacement.
12068
12069   * '{disp32}' - prefer 32-bit displacement.
12070
12071   * '{load}' - prefer load-form instruction.
12072
12073   * '{store}' - prefer store-form instruction.
12074
12075   * '{vex}' - encode with VEX prefix.
12076
12077   * '{vex3}' - encode with 3-byte VEX prefix.
12078
12079   * '{evex}' - encode with EVEX prefix.
12080
12081   * '{rex}' - prefer REX prefix for integer and legacy vector
12082     instructions (x86-64 only).  Note that this differs from the 'rex'
12083     prefix which generates REX prefix unconditionally.
12084
12085   * '{nooptimize}' - disable instruction size optimization.
12086
12087   The Intel-syntax conversion instructions
12088
12089   * 'cbw' -- sign-extend byte in '%al' to word in '%ax',
12090
12091   * 'cwde' -- sign-extend word in '%ax' to long in '%eax',
12092
12093   * 'cwd' -- sign-extend word in '%ax' to long in '%dx:%ax',
12094
12095   * 'cdq' -- sign-extend dword in '%eax' to quad in '%edx:%eax',
12096
12097   * 'cdqe' -- sign-extend dword in '%eax' to quad in '%rax' (x86-64
12098     only),
12099
12100   * 'cqo' -- sign-extend quad in '%rax' to octuple in '%rdx:%rax'
12101     (x86-64 only),
12102
12103are called 'cbtw', 'cwtl', 'cwtd', 'cltd', 'cltq', and 'cqto' in AT&T
12104naming.  'as' accepts either naming for these instructions.
12105
12106   Far call/jump instructions are 'lcall' and 'ljmp' in AT&T syntax, but
12107are 'call far' and 'jump far' in Intel convention.
12108
121099.16.4.2 AT&T Mnemonic versus Intel Mnemonic
12110............................................
12111
12112'as' supports assembly using Intel mnemonic.  '.intel_mnemonic' selects
12113Intel mnemonic with Intel syntax, and '.att_mnemonic' switches back to
12114the usual AT&T mnemonic with AT&T syntax for compatibility with the
12115output of 'gcc'.  Several x87 instructions, 'fadd', 'fdiv', 'fdivp',
12116'fdivr', 'fdivrp', 'fmul', 'fsub', 'fsubp', 'fsubr' and 'fsubrp', are
12117implemented in AT&T System V/386 assembler with different mnemonics from
12118those in Intel IA32 specification.  'gcc' generates those instructions
12119with AT&T mnemonic.
12120
12121
12122File: as.info,  Node: i386-Regs,  Next: i386-Prefixes,  Prev: i386-Mnemonics,  Up: i386-Dependent
12123
121249.16.5 Register Naming
12125----------------------
12126
12127Register operands are always prefixed with '%'.  The 80386 registers
12128consist of
12129
12130   * the 8 32-bit registers '%eax' (the accumulator), '%ebx', '%ecx',
12131     '%edx', '%edi', '%esi', '%ebp' (the frame pointer), and '%esp' (the
12132     stack pointer).
12133
12134   * the 8 16-bit low-ends of these: '%ax', '%bx', '%cx', '%dx', '%di',
12135     '%si', '%bp', and '%sp'.
12136
12137   * the 8 8-bit registers: '%ah', '%al', '%bh', '%bl', '%ch', '%cl',
12138     '%dh', and '%dl' (These are the high-bytes and low-bytes of '%ax',
12139     '%bx', '%cx', and '%dx')
12140
12141   * the 6 section registers '%cs' (code section), '%ds' (data section),
12142     '%ss' (stack section), '%es', '%fs', and '%gs'.
12143
12144   * the 5 processor control registers '%cr0', '%cr2', '%cr3', '%cr4',
12145     and '%cr8'.
12146
12147   * the 6 debug registers '%db0', '%db1', '%db2', '%db3', '%db6', and
12148     '%db7'.
12149
12150   * the 2 test registers '%tr6' and '%tr7'.
12151
12152   * the 8 floating point register stack '%st' or equivalently '%st(0)',
12153     '%st(1)', '%st(2)', '%st(3)', '%st(4)', '%st(5)', '%st(6)', and
12154     '%st(7)'.  These registers are overloaded by 8 MMX registers
12155     '%mm0', '%mm1', '%mm2', '%mm3', '%mm4', '%mm5', '%mm6' and '%mm7'.
12156
12157   * the 8 128-bit SSE registers registers '%xmm0', '%xmm1', '%xmm2',
12158     '%xmm3', '%xmm4', '%xmm5', '%xmm6' and '%xmm7'.
12159
12160   The AMD x86-64 architecture extends the register set by:
12161
12162   * enhancing the 8 32-bit registers to 64-bit: '%rax' (the
12163     accumulator), '%rbx', '%rcx', '%rdx', '%rdi', '%rsi', '%rbp' (the
12164     frame pointer), '%rsp' (the stack pointer)
12165
12166   * the 8 extended registers '%r8'-'%r15'.
12167
12168   * the 8 32-bit low ends of the extended registers: '%r8d'-'%r15d'.
12169
12170   * the 8 16-bit low ends of the extended registers: '%r8w'-'%r15w'.
12171
12172   * the 8 8-bit low ends of the extended registers: '%r8b'-'%r15b'.
12173
12174   * the 4 8-bit registers: '%sil', '%dil', '%bpl', '%spl'.
12175
12176   * the 8 debug registers: '%db8'-'%db15'.
12177
12178   * the 8 128-bit SSE registers: '%xmm8'-'%xmm15'.
12179
12180   With the AVX extensions more registers were made available:
12181
12182   * the 16 256-bit SSE '%ymm0'-'%ymm15' (only the first 8 available in
12183     32-bit mode).  The bottom 128 bits are overlaid with the
12184     'xmm0'-'xmm15' registers.
12185
12186   The AVX2 extensions made in 64-bit mode more registers available:
12187
12188   * the 16 128-bit registers '%xmm16'-'%xmm31' and the 16 256-bit
12189     registers '%ymm16'-'%ymm31'.
12190
12191   The AVX512 extensions added the following registers:
12192
12193   * the 32 512-bit registers '%zmm0'-'%zmm31' (only the first 8
12194     available in 32-bit mode).  The bottom 128 bits are overlaid with
12195     the '%xmm0'-'%xmm31' registers and the first 256 bits are overlaid
12196     with the '%ymm0'-'%ymm31' registers.
12197
12198   * the 8 mask registers '%k0'-'%k7'.
12199
12200
12201File: as.info,  Node: i386-Prefixes,  Next: i386-Memory,  Prev: i386-Regs,  Up: i386-Dependent
12202
122039.16.6 Instruction Prefixes
12204---------------------------
12205
12206Instruction prefixes are used to modify the following instruction.  They
12207are used to repeat string instructions, to provide section overrides, to
12208perform bus lock operations, and to change operand and address sizes.
12209(Most instructions that normally operate on 32-bit operands will use
1221016-bit operands if the instruction has an "operand size" prefix.)
12211Instruction prefixes are best written on the same line as the
12212instruction they act upon.  For example, the 'scas' (scan string)
12213instruction is repeated with:
12214
12215             repne scas %es:(%edi),%al
12216
12217   You may also place prefixes on the lines immediately preceding the
12218instruction, but this circumvents checks that 'as' does with prefixes,
12219and will not work with all prefixes.
12220
12221   Here is a list of instruction prefixes:
12222
12223   * Section override prefixes 'cs', 'ds', 'ss', 'es', 'fs', 'gs'.
12224     These are automatically added by specifying using the
12225     SECTION:MEMORY-OPERAND form for memory references.
12226
12227   * Operand/Address size prefixes 'data16' and 'addr16' change 32-bit
12228     operands/addresses into 16-bit operands/addresses, while 'data32'
12229     and 'addr32' change 16-bit ones (in a '.code16' section) into
12230     32-bit operands/addresses.  These prefixes _must_ appear on the
12231     same line of code as the instruction they modify.  For example, in
12232     a 16-bit '.code16' section, you might write:
12233
12234                  addr32 jmpl *(%ebx)
12235
12236   * The bus lock prefix 'lock' inhibits interrupts during execution of
12237     the instruction it precedes.  (This is only valid with certain
12238     instructions; see a 80386 manual for details).
12239
12240   * The wait for coprocessor prefix 'wait' waits for the coprocessor to
12241     complete the current instruction.  This should never be needed for
12242     the 80386/80387 combination.
12243
12244   * The 'rep', 'repe', and 'repne' prefixes are added to string
12245     instructions to make them repeat '%ecx' times ('%cx' times if the
12246     current address size is 16-bits).
12247   * The 'rex' family of prefixes is used by x86-64 to encode extensions
12248     to i386 instruction set.  The 'rex' prefix has four bits -- an
12249     operand size overwrite ('64') used to change operand size from
12250     32-bit to 64-bit and X, Y and Z extensions bits used to extend the
12251     register set.
12252
12253     You may write the 'rex' prefixes directly.  The 'rex64xyz'
12254     instruction emits 'rex' prefix with all the bits set.  By omitting
12255     the '64', 'x', 'y' or 'z' you may write other prefixes as well.
12256     Normally, there is no need to write the prefixes explicitly, since
12257     gas will automatically generate them based on the instruction
12258     operands.
12259
12260
12261File: as.info,  Node: i386-Memory,  Next: i386-Jumps,  Prev: i386-Prefixes,  Up: i386-Dependent
12262
122639.16.7 Memory References
12264------------------------
12265
12266An Intel syntax indirect memory reference of the form
12267
12268     SECTION:[BASE + INDEX*SCALE + DISP]
12269
12270is translated into the AT&T syntax
12271
12272     SECTION:DISP(BASE, INDEX, SCALE)
12273
12274where BASE and INDEX are the optional 32-bit base and index registers,
12275DISP is the optional displacement, and SCALE, taking the values 1, 2, 4,
12276and 8, multiplies INDEX to calculate the address of the operand.  If no
12277SCALE is specified, SCALE is taken to be 1.  SECTION specifies the
12278optional section register for the memory operand, and may override the
12279default section register (see a 80386 manual for section register
12280defaults).  Note that section overrides in AT&T syntax _must_ be
12281preceded by a '%'.  If you specify a section override which coincides
12282with the default section register, 'as' does _not_ output any section
12283register override prefixes to assemble the given instruction.  Thus,
12284section overrides can be specified to emphasize which section register
12285is used for a given memory operand.
12286
12287   Here are some examples of Intel and AT&T style memory references:
12288
12289AT&T: '-4(%ebp)', Intel: '[ebp - 4]'
12290     BASE is '%ebp'; DISP is '-4'.  SECTION is missing, and the default
12291     section is used ('%ss' for addressing with '%ebp' as the base
12292     register).  INDEX, SCALE are both missing.
12293
12294AT&T: 'foo(,%eax,4)', Intel: '[foo + eax*4]'
12295     INDEX is '%eax' (scaled by a SCALE 4); DISP is 'foo'.  All other
12296     fields are missing.  The section register here defaults to '%ds'.
12297
12298AT&T: 'foo(,1)'; Intel '[foo]'
12299     This uses the value pointed to by 'foo' as a memory operand.  Note
12300     that BASE and INDEX are both missing, but there is only _one_ ','.
12301     This is a syntactic exception.
12302
12303AT&T: '%gs:foo'; Intel 'gs:foo'
12304     This selects the contents of the variable 'foo' with section
12305     register SECTION being '%gs'.
12306
12307   Absolute (as opposed to PC relative) call and jump operands must be
12308prefixed with '*'.  If no '*' is specified, 'as' always chooses PC
12309relative addressing for jump/call labels.
12310
12311   Any instruction that has a memory operand, but no register operand,
12312_must_ specify its size (byte, word, long, or quadruple) with an
12313instruction mnemonic suffix ('b', 'w', 'l' or 'q', respectively).
12314
12315   The x86-64 architecture adds an RIP (instruction pointer relative)
12316addressing.  This addressing mode is specified by using 'rip' as a base
12317register.  Only constant offsets are valid.  For example:
12318
12319AT&T: '1234(%rip)', Intel: '[rip + 1234]'
12320     Points to the address 1234 bytes past the end of the current
12321     instruction.
12322
12323AT&T: 'symbol(%rip)', Intel: '[rip + symbol]'
12324     Points to the 'symbol' in RIP relative way, this is shorter than
12325     the default absolute addressing.
12326
12327   Other addressing modes remain unchanged in x86-64 architecture,
12328except registers used are 64-bit instead of 32-bit.
12329
12330
12331File: as.info,  Node: i386-Jumps,  Next: i386-Float,  Prev: i386-Memory,  Up: i386-Dependent
12332
123339.16.8 Handling of Jump Instructions
12334------------------------------------
12335
12336Jump instructions are always optimized to use the smallest possible
12337displacements.  This is accomplished by using byte (8-bit) displacement
12338jumps whenever the target is sufficiently close.  If a byte displacement
12339is insufficient a long displacement is used.  We do not support word
12340(16-bit) displacement jumps in 32-bit mode (i.e.  prefixing the jump
12341instruction with the 'data16' instruction prefix), since the 80386
12342insists upon masking '%eip' to 16 bits after the word displacement is
12343added.  (See also *note i386-Arch::)
12344
12345   Note that the 'jcxz', 'jecxz', 'loop', 'loopz', 'loope', 'loopnz' and
12346'loopne' instructions only come in byte displacements, so that if you
12347use these instructions ('gcc' does not use them) you may get an error
12348message (and incorrect code).  The AT&T 80386 assembler tries to get
12349around this problem by expanding 'jcxz foo' to
12350
12351              jcxz cx_zero
12352              jmp cx_nonzero
12353     cx_zero: jmp foo
12354     cx_nonzero:
12355
12356
12357File: as.info,  Node: i386-Float,  Next: i386-SIMD,  Prev: i386-Jumps,  Up: i386-Dependent
12358
123599.16.9 Floating Point
12360---------------------
12361
12362All 80387 floating point types except packed BCD are supported.  (BCD
12363support may be added without much difficulty).  These data types are
1236416-, 32-, and 64- bit integers, and single (32-bit), double (64-bit),
12365and extended (80-bit) precision floating point.  Each supported type has
12366an instruction mnemonic suffix and a constructor associated with it.
12367Instruction mnemonic suffixes specify the operand's data type.
12368Constructors build these data types into memory.
12369
12370   * Floating point constructors are '.float' or '.single', '.double',
12371     and '.tfloat' for 32-, 64-, and 80-bit formats.  These correspond
12372     to instruction mnemonic suffixes 's', 'l', and 't'.  't' stands for
12373     80-bit (ten byte) real.  The 80387 only supports this format via
12374     the 'fldt' (load 80-bit real to stack top) and 'fstpt' (store
12375     80-bit real and pop stack) instructions.
12376
12377   * Integer constructors are '.word', '.long' or '.int', and '.quad'
12378     for the 16-, 32-, and 64-bit integer formats.  The corresponding
12379     instruction mnemonic suffixes are 's' (single), 'l' (long), and 'q'
12380     (quad).  As with the 80-bit real format, the 64-bit 'q' format is
12381     only present in the 'fildq' (load quad integer to stack top) and
12382     'fistpq' (store quad integer and pop stack) instructions.
12383
12384   Register to register operations should not use instruction mnemonic
12385suffixes.  'fstl %st, %st(1)' will give a warning, and be assembled as
12386if you wrote 'fst %st, %st(1)', since all register to register
12387operations use 80-bit floating point operands.  (Contrast this with
12388'fstl %st, mem', which converts '%st' from 80-bit to 64-bit floating
12389point format, then stores the result in the 4 byte location 'mem')
12390
12391
12392File: as.info,  Node: i386-SIMD,  Next: i386-LWP,  Prev: i386-Float,  Up: i386-Dependent
12393
123949.16.10 Intel's MMX and AMD's 3DNow! SIMD Operations
12395----------------------------------------------------
12396
12397'as' supports Intel's MMX instruction set (SIMD instructions for integer
12398data), available on Intel's Pentium MMX processors and Pentium II
12399processors, AMD's K6 and K6-2 processors, Cyrix' M2 processor, and
12400probably others.  It also supports AMD's 3DNow! instruction set (SIMD
12401instructions for 32-bit floating point data) available on AMD's K6-2
12402processor and possibly others in the future.
12403
12404   Currently, 'as' does not support Intel's floating point SIMD, Katmai
12405(KNI).
12406
12407   The eight 64-bit MMX operands, also used by 3DNow!, are called
12408'%mm0', '%mm1', ...  '%mm7'.  They contain eight 8-bit integers, four
1240916-bit integers, two 32-bit integers, one 64-bit integer, or two 32-bit
12410floating point values.  The MMX registers cannot be used at the same
12411time as the floating point stack.
12412
12413   See Intel and AMD documentation, keeping in mind that the operand
12414order in instructions is reversed from the Intel syntax.
12415
12416
12417File: as.info,  Node: i386-LWP,  Next: i386-BMI,  Prev: i386-SIMD,  Up: i386-Dependent
12418
124199.16.11 AMD's Lightweight Profiling Instructions
12420------------------------------------------------
12421
12422'as' supports AMD's Lightweight Profiling (LWP) instruction set,
12423available on AMD's Family 15h (Orochi) processors.
12424
12425   LWP enables applications to collect and manage performance data, and
12426react to performance events.  The collection of performance data
12427requires no context switches.  LWP runs in the context of a thread and
12428so several counters can be used independently across multiple threads.
12429LWP can be used in both 64-bit and legacy 32-bit modes.
12430
12431   For detailed information on the LWP instruction set, see the 'AMD
12432Lightweight Profiling Specification' available at Lightweight Profiling
12433Specification (http://developer.amd.com/cpu/LWP).
12434
12435
12436File: as.info,  Node: i386-BMI,  Next: i386-TBM,  Prev: i386-LWP,  Up: i386-Dependent
12437
124389.16.12 Bit Manipulation Instructions
12439-------------------------------------
12440
12441'as' supports the Bit Manipulation (BMI) instruction set.
12442
12443   BMI instructions provide several instructions implementing individual
12444bit manipulation operations such as isolation, masking, setting, or
12445resetting.
12446
12447
12448File: as.info,  Node: i386-TBM,  Next: i386-16bit,  Prev: i386-BMI,  Up: i386-Dependent
12449
124509.16.13 AMD's Trailing Bit Manipulation Instructions
12451----------------------------------------------------
12452
12453'as' supports AMD's Trailing Bit Manipulation (TBM) instruction set,
12454available on AMD's BDVER2 processors (Trinity and Viperfish).
12455
12456   TBM instructions provide instructions implementing individual bit
12457manipulation operations such as isolating, masking, setting, resetting,
12458complementing, and operations on trailing zeros and ones.
12459
12460
12461File: as.info,  Node: i386-16bit,  Next: i386-Arch,  Prev: i386-TBM,  Up: i386-Dependent
12462
124639.16.14 Writing 16-bit Code
12464---------------------------
12465
12466While 'as' normally writes only "pure" 32-bit i386 code or 64-bit x86-64
12467code depending on the default configuration, it also supports writing
12468code to run in real mode or in 16-bit protected mode code segments.  To
12469do this, put a '.code16' or '.code16gcc' directive before the assembly
12470language instructions to be run in 16-bit mode.  You can switch 'as' to
12471writing 32-bit code with the '.code32' directive or 64-bit code with the
12472'.code64' directive.
12473
12474   '.code16gcc' provides experimental support for generating 16-bit code
12475from gcc, and differs from '.code16' in that 'call', 'ret', 'enter',
12476'leave', 'push', 'pop', 'pusha', 'popa', 'pushf', and 'popf'
12477instructions default to 32-bit size.  This is so that the stack pointer
12478is manipulated in the same way over function calls, allowing access to
12479function parameters at the same stack offsets as in 32-bit mode.
12480'.code16gcc' also automatically adds address size prefixes where
12481necessary to use the 32-bit addressing modes that gcc generates.
12482
12483   The code which 'as' generates in 16-bit mode will not necessarily run
12484on a 16-bit pre-80386 processor.  To write code that runs on such a
12485processor, you must refrain from using _any_ 32-bit constructs which
12486require 'as' to output address or operand size prefixes.
12487
12488   Note that writing 16-bit code instructions by explicitly specifying a
12489prefix or an instruction mnemonic suffix within a 32-bit code section
12490generates different machine instructions than those generated for a
1249116-bit code segment.  In a 32-bit code section, the following code
12492generates the machine opcode bytes '66 6a 04', which pushes the value
12493'4' onto the stack, decrementing '%esp' by 2.
12494
12495             pushw $4
12496
12497   The same code in a 16-bit code section would generate the machine
12498opcode bytes '6a 04' (i.e., without the operand size prefix), which is
12499correct since the processor default operand size is assumed to be 16
12500bits in a 16-bit code section.
12501
12502
12503File: as.info,  Node: i386-Arch,  Next: i386-Bugs,  Prev: i386-16bit,  Up: i386-Dependent
12504
125059.16.15 Specifying CPU Architecture
12506-----------------------------------
12507
12508'as' may be told to assemble for a particular CPU (sub-)architecture
12509with the '.arch CPU_TYPE' directive.  This directive enables a warning
12510when gas detects an instruction that is not supported on the CPU
12511specified.  The choices for CPU_TYPE are:
12512
12513'i8086'        'i186'         'i286'         'i386'
12514'i486'         'i586'         'i686'         'pentium'
12515'pentiumpro'   'pentiumii'    'pentiumiii'   'pentium4'
12516'prescott'     'nocona'       'core'         'core2'
12517'corei7'       'l1om'         'k1om'         'iamcu'
12518'k6'           'k6_2'         'athlon'       'k8'
12519'amdfam10'     'bdver1'       'bdver2'       'bdver3'
12520'bdver4'       'znver1'       'znver2'       'btver1'
12521'btver2'       'generic32'    'generic64'
12522'.cmov'        '.fxsr'        '.mmx'
12523'.sse'         '.sse2'        '.sse3'
12524'.ssse3'       '.sse4.1'      '.sse4.2'      '.sse4'
12525'.avx'         '.vmx'         '.smx'         '.ept'
12526'.clflush'     '.movbe'       '.xsave'       '.xsaveopt'
12527'.aes'         '.pclmul'      '.fma'         '.fsgsbase'
12528'.rdrnd'       '.f16c'        '.avx2'        '.bmi2'
12529'.lzcnt'       '.invpcid'     '.vmfunc'      '.hle'
12530'.rtm'         '.adx'         '.rdseed'      '.prfchw'
12531'.smap'        '.mpx'         '.sha'         '.prefetchwt1'
12532'.clflushopt'  '.xsavec'      '.xsaves'      '.se1'
12533'.avx512f'     '.avx512cd'    '.avx512er'    '.avx512pf'
12534'.avx512vl'    '.avx512bw'    '.avx512dq'    '.avx512ifma'
12535'.avx512vbmi'  '.avx512_4fmaps''.avx512_4vnniw'
12536'.avx512_vpopcntdq''.avx512_vbmi2''.avx512_vnni'
12537'.avx512_bitalg''.avx512_bf16''.avx512_vp2intersect'
12538'.clwb'        '.rdpid'       '.ptwrite'
12539'.ibt'
12540'.wbnoinvd'    '.pconfig'     '.waitpkg'     '.cldemote'
12541'.shstk'       '.gfni'        '.vaes'        '.vpclmulqdq'
12542'.movdiri'     '.movdir64b'   '.enqcmd'
12543'.3dnow'       '.3dnowa'      '.sse4a'       '.sse5'
12544'.syscall'     '.rdtscp'      '.svme'        '.abm'
12545'.lwp'         '.fma4'        '.xop'         '.cx16'
12546'.padlock'     '.clzero'      '.mwaitx'      '.rdpru'
12547'.mcommit'
12548
12549   Apart from the warning, there are only two other effects on 'as'
12550operation; Firstly, if you specify a CPU other than 'i486', then shift
12551by one instructions such as 'sarl $1, %eax' will automatically use a two
12552byte opcode sequence.  The larger three byte opcode sequence is used on
12553the 486 (and when no architecture is specified) because it executes
12554faster on the 486.  Note that you can explicitly request the two byte
12555opcode by writing 'sarl %eax'.  Secondly, if you specify 'i8086',
12556'i186', or 'i286', _and_ '.code16' or '.code16gcc' then byte offset
12557conditional jumps will be promoted when necessary to a two instruction
12558sequence consisting of a conditional jump of the opposite sense around
12559an unconditional jump to the target.
12560
12561   Following the CPU architecture (but not a sub-architecture, which are
12562those starting with a dot), you may specify 'jumps' or 'nojumps' to
12563control automatic promotion of conditional jumps.  'jumps' is the
12564default, and enables jump promotion; All external jumps will be of the
12565long variety, and file-local jumps will be promoted as necessary.
12566(*note i386-Jumps::) 'nojumps' leaves external conditional jumps as byte
12567offset jumps, and warns about file-local conditional jumps that 'as'
12568promotes.  Unconditional jumps are treated as for 'jumps'.
12569
12570   For example
12571
12572      .arch i8086,nojumps
12573
12574
12575File: as.info,  Node: i386-Bugs,  Next: i386-Notes,  Prev: i386-Arch,  Up: i386-Dependent
12576
125779.16.16 AT&T Syntax bugs
12578------------------------
12579
12580The UnixWare assembler, and probably other AT&T derived ix86 Unix
12581assemblers, generate floating point instructions with reversed source
12582and destination registers in certain cases.  Unfortunately, gcc and
12583possibly many other programs use this reversed syntax, so we're stuck
12584with it.
12585
12586   For example
12587
12588             fsub %st,%st(3)
12589results in '%st(3)' being updated to '%st - %st(3)' rather than the
12590expected '%st(3) - %st'.  This happens with all the non-commutative
12591arithmetic floating point operations with two register operands where
12592the source register is '%st' and the destination register is '%st(i)'.
12593
12594
12595File: as.info,  Node: i386-Notes,  Prev: i386-Bugs,  Up: i386-Dependent
12596
125979.16.17 Notes
12598-------------
12599
12600There is some trickery concerning the 'mul' and 'imul' instructions that
12601deserves mention.  The 16-, 32-, 64- and 128-bit expanding multiplies
12602(base opcode '0xf6'; extension 4 for 'mul' and 5 for 'imul') can be
12603output only in the one operand form.  Thus, 'imul %ebx, %eax' does _not_
12604select the expanding multiply; the expanding multiply would clobber the
12605'%edx' register, and this would confuse 'gcc' output.  Use 'imul %ebx'
12606to get the 64-bit product in '%edx:%eax'.
12607
12608   We have added a two operand form of 'imul' when the first operand is
12609an immediate mode expression and the second operand is a register.  This
12610is just a shorthand, so that, multiplying '%eax' by 69, for example, can
12611be done with 'imul $69, %eax' rather than 'imul $69, %eax, %eax'.
12612
12613
12614File: as.info,  Node: IA-64-Dependent,  Next: IP2K-Dependent,  Prev: i386-Dependent,  Up: Machine Dependencies
12615
126169.17 IA-64 Dependent Features
12617=============================
12618
12619* Menu:
12620
12621* IA-64 Options::              Options
12622* IA-64 Syntax::               Syntax
12623* IA-64 Opcodes::              Opcodes
12624
12625
12626File: as.info,  Node: IA-64 Options,  Next: IA-64 Syntax,  Up: IA-64-Dependent
12627
126289.17.1 Options
12629--------------
12630
12631'-mconstant-gp'
12632     This option instructs the assembler to mark the resulting object
12633     file as using the "constant GP" model.  With this model, it is
12634     assumed that the entire program uses a single global pointer (GP)
12635     value.  Note that this option does not in any fashion affect the
12636     machine code emitted by the assembler.  All it does is turn on the
12637     EF_IA_64_CONS_GP flag in the ELF file header.
12638
12639'-mauto-pic'
12640     This option instructs the assembler to mark the resulting object
12641     file as using the "constant GP without function descriptor" data
12642     model.  This model is like the "constant GP" model, except that it
12643     additionally does away with function descriptors.  What this means
12644     is that the address of a function refers directly to the function's
12645     code entry-point.  Normally, such an address would refer to a
12646     function descriptor, which contains both the code entry-point and
12647     the GP-value needed by the function.  Note that this option does
12648     not in any fashion affect the machine code emitted by the
12649     assembler.  All it does is turn on the EF_IA_64_NOFUNCDESC_CONS_GP
12650     flag in the ELF file header.
12651
12652'-milp32'
12653'-milp64'
12654'-mlp64'
12655'-mp64'
12656     These options select the data model.  The assembler defaults to
12657     '-mlp64' (LP64 data model).
12658
12659'-mle'
12660'-mbe'
12661     These options select the byte order.  The '-mle' option selects
12662     little-endian byte order (default) and '-mbe' selects big-endian
12663     byte order.  Note that IA-64 machine code always uses little-endian
12664     byte order.
12665
12666'-mtune=itanium1'
12667'-mtune=itanium2'
12668     Tune for a particular IA-64 CPU, ITANIUM1 or ITANIUM2.  The default
12669     is ITANIUM2.
12670
12671'-munwind-check=warning'
12672'-munwind-check=error'
12673     These options control what the assembler will do when performing
12674     consistency checks on unwind directives.  '-munwind-check=warning'
12675     will make the assembler issue a warning when an unwind directive
12676     check fails.  This is the default.  '-munwind-check=error' will
12677     make the assembler issue an error when an unwind directive check
12678     fails.
12679
12680'-mhint.b=ok'
12681'-mhint.b=warning'
12682'-mhint.b=error'
12683     These options control what the assembler will do when the 'hint.b'
12684     instruction is used.  '-mhint.b=ok' will make the assembler accept
12685     'hint.b'.  '-mint.b=warning' will make the assembler issue a
12686     warning when 'hint.b' is used.  '-mhint.b=error' will make the
12687     assembler treat 'hint.b' as an error, which is the default.
12688
12689'-x'
12690'-xexplicit'
12691     These options turn on dependency violation checking.
12692
12693'-xauto'
12694     This option instructs the assembler to automatically insert stop
12695     bits where necessary to remove dependency violations.  This is the
12696     default mode.
12697
12698'-xnone'
12699     This option turns off dependency violation checking.
12700
12701'-xdebug'
12702     This turns on debug output intended to help tracking down bugs in
12703     the dependency violation checker.
12704
12705'-xdebugn'
12706     This is a shortcut for -xnone -xdebug.
12707
12708'-xdebugx'
12709     This is a shortcut for -xexplicit -xdebug.
12710
12711
12712File: as.info,  Node: IA-64 Syntax,  Next: IA-64 Opcodes,  Prev: IA-64 Options,  Up: IA-64-Dependent
12713
127149.17.2 Syntax
12715-------------
12716
12717The assembler syntax closely follows the IA-64 Assembly Language
12718Reference Guide.
12719
12720* Menu:
12721
12722* IA-64-Chars::                Special Characters
12723* IA-64-Regs::                 Register Names
12724* IA-64-Bits::                 Bit Names
12725* IA-64-Relocs::               Relocations
12726
12727
12728File: as.info,  Node: IA-64-Chars,  Next: IA-64-Regs,  Up: IA-64 Syntax
12729
127309.17.2.1 Special Characters
12731...........................
12732
12733'//' is the line comment token.
12734
12735   ';' can be used instead of a newline to separate statements.
12736
12737
12738File: as.info,  Node: IA-64-Regs,  Next: IA-64-Bits,  Prev: IA-64-Chars,  Up: IA-64 Syntax
12739
127409.17.2.2 Register Names
12741.......................
12742
12743The 128 integer registers are referred to as 'rN'.  The 128
12744floating-point registers are referred to as 'fN'.  The 128 application
12745registers are referred to as 'arN'.  The 128 control registers are
12746referred to as 'crN'.  The 64 one-bit predicate registers are referred
12747to as 'pN'.  The 8 branch registers are referred to as 'bN'.  In
12748addition, the assembler defines a number of aliases: 'gp' ('r1'), 'sp'
12749('r12'), 'rp' ('b0'), 'ret0' ('r8'), 'ret1' ('r9'), 'ret2' ('r10'),
12750'ret3' ('r9'), 'fargN' ('f8+N'), and 'fretN' ('f8+N').
12751
12752   For convenience, the assembler also defines aliases for all named
12753application and control registers.  For example, 'ar.bsp' refers to the
12754register backing store pointer ('ar17').  Similarly, 'cr.eoi' refers to
12755the end-of-interrupt register ('cr67').
12756
12757
12758File: as.info,  Node: IA-64-Bits,  Next: IA-64-Relocs,  Prev: IA-64-Regs,  Up: IA-64 Syntax
12759
127609.17.2.3 IA-64 Processor-Status-Register (PSR) Bit Names
12761........................................................
12762
12763The assembler defines bit masks for each of the bits in the IA-64
12764processor status register.  For example, 'psr.ic' corresponds to a value
12765of 0x2000.  These masks are primarily intended for use with the
12766'ssm'/'sum' and 'rsm'/'rum' instructions, but they can be used anywhere
12767else where an integer constant is expected.
12768
12769
12770File: as.info,  Node: IA-64-Relocs,  Prev: IA-64-Bits,  Up: IA-64 Syntax
12771
127729.17.2.4 Relocations
12773....................
12774
12775In addition to the standard IA-64 relocations, the following relocations
12776are implemented by 'as':
12777
12778'@slotcount(V)'
12779     Convert the address offset V into a slot count.  This pseudo
12780     function is available only on VMS. The expression V must be known
12781     at assembly time: it can't reference undefined symbols or symbols
12782     in different sections.
12783
12784
12785File: as.info,  Node: IA-64 Opcodes,  Prev: IA-64 Syntax,  Up: IA-64-Dependent
12786
127879.17.3 Opcodes
12788--------------
12789
12790For detailed information on the IA-64 machine instruction set, see the
12791IA-64 Architecture Handbook
12792(http://developer.intel.com/design/itanium/arch_spec.htm).
12793
12794
12795File: as.info,  Node: IP2K-Dependent,  Next: LM32-Dependent,  Prev: IA-64-Dependent,  Up: Machine Dependencies
12796
127979.18 IP2K Dependent Features
12798============================
12799
12800* Menu:
12801
12802* IP2K-Opts::                   IP2K Options
12803* IP2K-Syntax::                 IP2K Syntax
12804
12805
12806File: as.info,  Node: IP2K-Opts,  Next: IP2K-Syntax,  Up: IP2K-Dependent
12807
128089.18.1 IP2K Options
12809-------------------
12810
12811The Ubicom IP2K version of 'as' has a few machine dependent options:
12812
12813'-mip2022ext'
12814     'as' can assemble the extended IP2022 instructions, but it will
12815     only do so if this is specifically allowed via this command line
12816     option.
12817
12818'-mip2022'
12819     This option restores the assembler's default behaviour of not
12820     permitting the extended IP2022 instructions to be assembled.
12821
12822
12823File: as.info,  Node: IP2K-Syntax,  Prev: IP2K-Opts,  Up: IP2K-Dependent
12824
128259.18.2 IP2K Syntax
12826------------------
12827
12828* Menu:
12829
12830* IP2K-Chars::                Special Characters
12831
12832
12833File: as.info,  Node: IP2K-Chars,  Up: IP2K-Syntax
12834
128359.18.2.1 Special Characters
12836...........................
12837
12838The presence of a ';' on a line indicates the start of a comment that
12839extends to the end of the current line.
12840
12841   If a '#' appears as the first character of a line, the whole line is
12842treated as a comment, but in this case the line can also be a logical
12843line number directive (*note Comments::) or a preprocessor control
12844command (*note Preprocessing::).
12845
12846   The IP2K assembler does not currently support a line separator
12847character.
12848
12849
12850File: as.info,  Node: LM32-Dependent,  Next: M32C-Dependent,  Prev: IP2K-Dependent,  Up: Machine Dependencies
12851
128529.19 LM32 Dependent Features
12853============================
12854
12855* Menu:
12856
12857* LM32 Options::              Options
12858* LM32 Syntax::               Syntax
12859* LM32 Opcodes::              Opcodes
12860
12861
12862File: as.info,  Node: LM32 Options,  Next: LM32 Syntax,  Up: LM32-Dependent
12863
128649.19.1 Options
12865--------------
12866
12867'-mmultiply-enabled'
12868     Enable multiply instructions.
12869
12870'-mdivide-enabled'
12871     Enable divide instructions.
12872
12873'-mbarrel-shift-enabled'
12874     Enable barrel-shift instructions.
12875
12876'-msign-extend-enabled'
12877     Enable sign extend instructions.
12878
12879'-muser-enabled'
12880     Enable user defined instructions.
12881
12882'-micache-enabled'
12883     Enable instruction cache related CSRs.
12884
12885'-mdcache-enabled'
12886     Enable data cache related CSRs.
12887
12888'-mbreak-enabled'
12889     Enable break instructions.
12890
12891'-mall-enabled'
12892     Enable all instructions and CSRs.
12893
12894
12895File: as.info,  Node: LM32 Syntax,  Next: LM32 Opcodes,  Prev: LM32 Options,  Up: LM32-Dependent
12896
128979.19.2 Syntax
12898-------------
12899
12900* Menu:
12901
12902* LM32-Regs::                 Register Names
12903* LM32-Modifiers::            Relocatable Expression Modifiers
12904* LM32-Chars::                Special Characters
12905
12906
12907File: as.info,  Node: LM32-Regs,  Next: LM32-Modifiers,  Up: LM32 Syntax
12908
129099.19.2.1 Register Names
12910.......................
12911
12912LM32 has 32 x 32-bit general purpose registers 'r0', 'r1', ...  'r31'.
12913
12914   The following aliases are defined: 'gp' - 'r26', 'fp' - 'r27', 'sp' -
12915'r28', 'ra' - 'r29', 'ea' - 'r30', 'ba' - 'r31'.
12916
12917   LM32 has the following Control and Status Registers (CSRs).
12918
12919'IE'
12920     Interrupt enable.
12921'IM'
12922     Interrupt mask.
12923'IP'
12924     Interrupt pending.
12925'ICC'
12926     Instruction cache control.
12927'DCC'
12928     Data cache control.
12929'CC'
12930     Cycle counter.
12931'CFG'
12932     Configuration.
12933'EBA'
12934     Exception base address.
12935'DC'
12936     Debug control.
12937'DEBA'
12938     Debug exception base address.
12939'JTX'
12940     JTAG transmit.
12941'JRX'
12942     JTAG receive.
12943'BP0'
12944     Breakpoint 0.
12945'BP1'
12946     Breakpoint 1.
12947'BP2'
12948     Breakpoint 2.
12949'BP3'
12950     Breakpoint 3.
12951'WP0'
12952     Watchpoint 0.
12953'WP1'
12954     Watchpoint 1.
12955'WP2'
12956     Watchpoint 2.
12957'WP3'
12958     Watchpoint 3.
12959
12960
12961File: as.info,  Node: LM32-Modifiers,  Next: LM32-Chars,  Prev: LM32-Regs,  Up: LM32 Syntax
12962
129639.19.2.2 Relocatable Expression Modifiers
12964.........................................
12965
12966The assembler supports several modifiers when using relocatable
12967addresses in LM32 instruction operands.  The general syntax is the
12968following:
12969
12970     modifier(relocatable-expression)
12971
12972'lo'
12973
12974     This modifier allows you to use bits 0 through 15 of an address
12975     expression as 16 bit relocatable expression.
12976
12977'hi'
12978
12979     This modifier allows you to use bits 16 through 23 of an address
12980     expression as 16 bit relocatable expression.
12981
12982     For example
12983
12984          ori  r4, r4, lo(sym+10)
12985          orhi r4, r4, hi(sym+10)
12986
12987'gp'
12988
12989     This modified creates a 16-bit relocatable expression that is the
12990     offset of the symbol from the global pointer.
12991
12992          mva r4, gp(sym)
12993
12994'got'
12995
12996     This modifier places a symbol in the GOT and creates a 16-bit
12997     relocatable expression that is the offset into the GOT of this
12998     symbol.
12999
13000          lw r4, (gp+got(sym))
13001
13002'gotofflo16'
13003
13004     This modifier allows you to use the bits 0 through 15 of an address
13005     which is an offset from the GOT.
13006
13007'gotoffhi16'
13008
13009     This modifier allows you to use the bits 16 through 31 of an
13010     address which is an offset from the GOT.
13011
13012          orhi r4, r4, gotoffhi16(lsym)
13013          addi r4, r4, gotofflo16(lsym)
13014
13015
13016File: as.info,  Node: LM32-Chars,  Prev: LM32-Modifiers,  Up: LM32 Syntax
13017
130189.19.2.3 Special Characters
13019...........................
13020
13021The presence of a '#' on a line indicates the start of a comment that
13022extends to the end of the current line.  Note that if a line starts with
13023a '#' character then it can also be a logical line number directive
13024(*note Comments::) or a preprocessor control command (*note
13025Preprocessing::).
13026
13027   A semicolon (';') can be used to separate multiple statements on the
13028same line.
13029
13030
13031File: as.info,  Node: LM32 Opcodes,  Prev: LM32 Syntax,  Up: LM32-Dependent
13032
130339.19.3 Opcodes
13034--------------
13035
13036For detailed information on the LM32 machine instruction set, see
13037<http://www.latticesemi.com/products/intellectualproperty/ipcores/mico32/>.
13038
13039   'as' implements all the standard LM32 opcodes.
13040
13041
13042File: as.info,  Node: M32C-Dependent,  Next: M32R-Dependent,  Prev: LM32-Dependent,  Up: Machine Dependencies
13043
130449.20 M32C Dependent Features
13045============================
13046
13047'as' can assemble code for several different members of the Renesas M32C
13048family.  Normally the default is to assemble code for the M16C
13049microprocessor.  The '-m32c' option may be used to change the default to
13050the M32C microprocessor.
13051
13052* Menu:
13053
13054* M32C-Opts::                   M32C Options
13055* M32C-Syntax::                 M32C Syntax
13056
13057
13058File: as.info,  Node: M32C-Opts,  Next: M32C-Syntax,  Up: M32C-Dependent
13059
130609.20.1 M32C Options
13061-------------------
13062
13063The Renesas M32C version of 'as' has these machine-dependent options:
13064
13065'-m32c'
13066     Assemble M32C instructions.
13067
13068'-m16c'
13069     Assemble M16C instructions (default).
13070
13071'-relax'
13072     Enable support for link-time relaxations.
13073
13074'-h-tick-hex'
13075     Support H'00 style hex constants in addition to 0x00 style.
13076
13077
13078File: as.info,  Node: M32C-Syntax,  Prev: M32C-Opts,  Up: M32C-Dependent
13079
130809.20.2 M32C Syntax
13081------------------
13082
13083* Menu:
13084
13085* M32C-Modifiers::              Symbolic Operand Modifiers
13086* M32C-Chars::                  Special Characters
13087
13088
13089File: as.info,  Node: M32C-Modifiers,  Next: M32C-Chars,  Up: M32C-Syntax
13090
130919.20.2.1 Symbolic Operand Modifiers
13092...................................
13093
13094The assembler supports several modifiers when using symbol addresses in
13095M32C instruction operands.  The general syntax is the following:
13096
13097     %modifier(symbol)
13098
13099'%dsp8'
13100'%dsp16'
13101
13102     These modifiers override the assembler's assumptions about how big
13103     a symbol's address is.  Normally, when it sees an operand like
13104     'sym[a0]' it assumes 'sym' may require the widest displacement
13105     field (16 bits for '-m16c', 24 bits for '-m32c').  These modifiers
13106     tell it to assume the address will fit in an 8 or 16 bit
13107     (respectively) unsigned displacement.  Note that, of course, if it
13108     doesn't actually fit you will get linker errors.  Example:
13109
13110          mov.w %dsp8(sym)[a0],r1
13111          mov.b #0,%dsp8(sym)[a0]
13112
13113'%hi8'
13114
13115     This modifier allows you to load bits 16 through 23 of a 24 bit
13116     address into an 8 bit register.  This is useful with, for example,
13117     the M16C 'smovf' instruction, which expects a 20 bit address in
13118     'r1h' and 'a0'.  Example:
13119
13120          mov.b #%hi8(sym),r1h
13121          mov.w #%lo16(sym),a0
13122          smovf.b
13123
13124'%lo16'
13125
13126     Likewise, this modifier allows you to load bits 0 through 15 of a
13127     24 bit address into a 16 bit register.
13128
13129'%hi16'
13130
13131     This modifier allows you to load bits 16 through 31 of a 32 bit
13132     address into a 16 bit register.  While the M32C family only has 24
13133     bits of address space, it does support addresses in pairs of 16 bit
13134     registers (like 'a1a0' for the 'lde' instruction).  This modifier
13135     is for loading the upper half in such cases.  Example:
13136
13137          mov.w #%hi16(sym),a1
13138          mov.w #%lo16(sym),a0
13139          ...
13140          lde.w [a1a0],r1
13141
13142
13143File: as.info,  Node: M32C-Chars,  Prev: M32C-Modifiers,  Up: M32C-Syntax
13144
131459.20.2.2 Special Characters
13146...........................
13147
13148The presence of a ';' character on a line indicates the start of a
13149comment that extends to the end of that line.
13150
13151   If a '#' appears as the first character of a line, the whole line is
13152treated as a comment, but in this case the line can also be a logical
13153line number directive (*note Comments::) or a preprocessor control
13154command (*note Preprocessing::).
13155
13156   The '|' character can be used to separate statements on the same
13157line.
13158
13159
13160File: as.info,  Node: M32R-Dependent,  Next: M68K-Dependent,  Prev: M32C-Dependent,  Up: Machine Dependencies
13161
131629.21 M32R Dependent Features
13163============================
13164
13165* Menu:
13166
13167* M32R-Opts::                   M32R Options
13168* M32R-Directives::             M32R Directives
13169* M32R-Warnings::               M32R Warnings
13170
13171
13172File: as.info,  Node: M32R-Opts,  Next: M32R-Directives,  Up: M32R-Dependent
13173
131749.21.1 M32R Options
13175-------------------
13176
13177The Renesas M32R version of 'as' has a few machine dependent options:
13178
13179'-m32rx'
13180     'as' can assemble code for several different members of the Renesas
13181     M32R family.  Normally the default is to assemble code for the M32R
13182     microprocessor.  This option may be used to change the default to
13183     the M32RX microprocessor, which adds some more instructions to the
13184     basic M32R instruction set, and some additional parameters to some
13185     of the original instructions.
13186
13187'-m32r2'
13188     This option changes the target processor to the M32R2
13189     microprocessor.
13190
13191'-m32r'
13192     This option can be used to restore the assembler's default
13193     behaviour of assembling for the M32R microprocessor.  This can be
13194     useful if the default has been changed by a previous command-line
13195     option.
13196
13197'-little'
13198     This option tells the assembler to produce little-endian code and
13199     data.  The default is dependent upon how the toolchain was
13200     configured.
13201
13202'-EL'
13203     This is a synonym for _-little_.
13204
13205'-big'
13206     This option tells the assembler to produce big-endian code and
13207     data.
13208
13209'-EB'
13210     This is a synonym for _-big_.
13211
13212'-KPIC'
13213     This option specifies that the output of the assembler should be
13214     marked as position-independent code (PIC).
13215
13216'-parallel'
13217     This option tells the assembler to attempts to combine two
13218     sequential instructions into a single, parallel instruction, where
13219     it is legal to do so.
13220
13221'-no-parallel'
13222     This option disables a previously enabled _-parallel_ option.
13223
13224'-no-bitinst'
13225     This option disables the support for the extended bit-field
13226     instructions provided by the M32R2.  If this support needs to be
13227     re-enabled the _-bitinst_ switch can be used to restore it.
13228
13229'-O'
13230     This option tells the assembler to attempt to optimize the
13231     instructions that it produces.  This includes filling delay slots
13232     and converting sequential instructions into parallel ones.  This
13233     option implies _-parallel_.
13234
13235'-warn-explicit-parallel-conflicts'
13236     Instructs 'as' to produce warning messages when questionable
13237     parallel instructions are encountered.  This option is enabled by
13238     default, but 'gcc' disables it when it invokes 'as' directly.
13239     Questionable instructions are those whose behaviour would be
13240     different if they were executed sequentially.  For example the code
13241     fragment 'mv r1, r2 || mv r3, r1' produces a different result from
13242     'mv r1, r2 \n mv r3, r1' since the former moves r1 into r3 and then
13243     r2 into r1, whereas the later moves r2 into r1 and r3.
13244
13245'-Wp'
13246     This is a shorter synonym for the
13247     _-warn-explicit-parallel-conflicts_ option.
13248
13249'-no-warn-explicit-parallel-conflicts'
13250     Instructs 'as' not to produce warning messages when questionable
13251     parallel instructions are encountered.
13252
13253'-Wnp'
13254     This is a shorter synonym for the
13255     _-no-warn-explicit-parallel-conflicts_ option.
13256
13257'-ignore-parallel-conflicts'
13258     This option tells the assembler's to stop checking parallel
13259     instructions for constraint violations.  This ability is provided
13260     for hardware vendors testing chip designs and should not be used
13261     under normal circumstances.
13262
13263'-no-ignore-parallel-conflicts'
13264     This option restores the assembler's default behaviour of checking
13265     parallel instructions to detect constraint violations.
13266
13267'-Ip'
13268     This is a shorter synonym for the _-ignore-parallel-conflicts_
13269     option.
13270
13271'-nIp'
13272     This is a shorter synonym for the _-no-ignore-parallel-conflicts_
13273     option.
13274
13275'-warn-unmatched-high'
13276     This option tells the assembler to produce a warning message if a
13277     '.high' pseudo op is encountered without a matching '.low' pseudo
13278     op.  The presence of such an unmatched pseudo op usually indicates
13279     a programming error.
13280
13281'-no-warn-unmatched-high'
13282     Disables a previously enabled _-warn-unmatched-high_ option.
13283
13284'-Wuh'
13285     This is a shorter synonym for the _-warn-unmatched-high_ option.
13286
13287'-Wnuh'
13288     This is a shorter synonym for the _-no-warn-unmatched-high_ option.
13289
13290
13291File: as.info,  Node: M32R-Directives,  Next: M32R-Warnings,  Prev: M32R-Opts,  Up: M32R-Dependent
13292
132939.21.2 M32R Directives
13294----------------------
13295
13296The Renesas M32R version of 'as' has a few architecture specific
13297directives:
13298
13299'low EXPRESSION'
13300     The 'low' directive computes the value of its expression and places
13301     the lower 16-bits of the result into the immediate-field of the
13302     instruction.  For example:
13303
13304             or3   r0, r0, #low(0x12345678) ; compute r0 = r0 | 0x5678
13305             add3, r0, r0, #low(fred)   ; compute r0 = r0 + low 16-bits of address of fred
13306
13307'high EXPRESSION'
13308     The 'high' directive computes the value of its expression and
13309     places the upper 16-bits of the result into the immediate-field of
13310     the instruction.  For example:
13311
13312             seth  r0, #high(0x12345678) ; compute r0 = 0x12340000
13313             seth, r0, #high(fred)       ; compute r0 = upper 16-bits of address of fred
13314
13315'shigh EXPRESSION'
13316     The 'shigh' directive is very similar to the 'high' directive.  It
13317     also computes the value of its expression and places the upper
13318     16-bits of the result into the immediate-field of the instruction.
13319     The difference is that 'shigh' also checks to see if the lower
13320     16-bits could be interpreted as a signed number, and if so it
13321     assumes that a borrow will occur from the upper-16 bits.  To
13322     compensate for this the 'shigh' directive pre-biases the upper 16
13323     bit value by adding one to it.  For example:
13324
13325     For example:
13326
13327             seth  r0, #shigh(0x12345678) ; compute r0 = 0x12340000
13328             seth  r0, #shigh(0x00008000) ; compute r0 = 0x00010000
13329
13330     In the second example the lower 16-bits are 0x8000.  If these are
13331     treated as a signed value and sign extended to 32-bits then the
13332     value becomes 0xffff8000.  If this value is then added to
13333     0x00010000 then the result is 0x00008000.
13334
13335     This behaviour is to allow for the different semantics of the 'or3'
13336     and 'add3' instructions.  The 'or3' instruction treats its 16-bit
13337     immediate argument as unsigned whereas the 'add3' treats its 16-bit
13338     immediate as a signed value.  So for example:
13339
13340             seth  r0, #shigh(0x00008000)
13341             add3  r0, r0, #low(0x00008000)
13342
13343     Produces the correct result in r0, whereas:
13344
13345             seth  r0, #shigh(0x00008000)
13346             or3   r0, r0, #low(0x00008000)
13347
13348     Stores 0xffff8000 into r0.
13349
13350     Note - the 'shigh' directive does not know where in the assembly
13351     source code the lower 16-bits of the value are going set, so it
13352     cannot check to make sure that an 'or3' instruction is being used
13353     rather than an 'add3' instruction.  It is up to the programmer to
13354     make sure that correct directives are used.
13355
13356'.m32r'
13357     The directive performs a similar thing as the _-m32r_ command line
13358     option.  It tells the assembler to only accept M32R instructions
13359     from now on.  An instructions from later M32R architectures are
13360     refused.
13361
13362'.m32rx'
13363     The directive performs a similar thing as the _-m32rx_ command line
13364     option.  It tells the assembler to start accepting the extra
13365     instructions in the M32RX ISA as well as the ordinary M32R ISA.
13366
13367'.m32r2'
13368     The directive performs a similar thing as the _-m32r2_ command line
13369     option.  It tells the assembler to start accepting the extra
13370     instructions in the M32R2 ISA as well as the ordinary M32R ISA.
13371
13372'.little'
13373     The directive performs a similar thing as the _-little_ command
13374     line option.  It tells the assembler to start producing
13375     little-endian code and data.  This option should be used with care
13376     as producing mixed-endian binary files is fraught with danger.
13377
13378'.big'
13379     The directive performs a similar thing as the _-big_ command line
13380     option.  It tells the assembler to start producing big-endian code
13381     and data.  This option should be used with care as producing
13382     mixed-endian binary files is fraught with danger.
13383
13384
13385File: as.info,  Node: M32R-Warnings,  Prev: M32R-Directives,  Up: M32R-Dependent
13386
133879.21.3 M32R Warnings
13388--------------------
13389
13390There are several warning and error messages that can be produced by
13391'as' which are specific to the M32R:
13392
13393'output of 1st instruction is the same as an input to 2nd instruction - is this intentional ?'
13394     This message is only produced if warnings for explicit parallel
13395     conflicts have been enabled.  It indicates that the assembler has
13396     encountered a parallel instruction in which the destination
13397     register of the left hand instruction is used as an input register
13398     in the right hand instruction.  For example in this code fragment
13399     'mv r1, r2 || neg r3, r1' register r1 is the destination of the
13400     move instruction and the input to the neg instruction.
13401
13402'output of 2nd instruction is the same as an input to 1st instruction - is this intentional ?'
13403     This message is only produced if warnings for explicit parallel
13404     conflicts have been enabled.  It indicates that the assembler has
13405     encountered a parallel instruction in which the destination
13406     register of the right hand instruction is used as an input register
13407     in the left hand instruction.  For example in this code fragment
13408     'mv r1, r2 || neg r2, r3' register r2 is the destination of the neg
13409     instruction and the input to the move instruction.
13410
13411'instruction '...' is for the M32RX only'
13412     This message is produced when the assembler encounters an
13413     instruction which is only supported by the M32Rx processor, and the
13414     '-m32rx' command-line flag has not been specified to allow assembly
13415     of such instructions.
13416
13417'unknown instruction '...''
13418     This message is produced when the assembler encounters an
13419     instruction which it does not recognize.
13420
13421'only the NOP instruction can be issued in parallel on the m32r'
13422     This message is produced when the assembler encounters a parallel
13423     instruction which does not involve a NOP instruction and the
13424     '-m32rx' command-line flag has not been specified.  Only the M32Rx
13425     processor is able to execute two instructions in parallel.
13426
13427'instruction '...' cannot be executed in parallel.'
13428     This message is produced when the assembler encounters a parallel
13429     instruction which is made up of one or two instructions which
13430     cannot be executed in parallel.
13431
13432'Instructions share the same execution pipeline'
13433     This message is produced when the assembler encounters a parallel
13434     instruction whose components both use the same execution pipeline.
13435
13436'Instructions write to the same destination register.'
13437     This message is produced when the assembler encounters a parallel
13438     instruction where both components attempt to modify the same
13439     register.  For example these code fragments will produce this
13440     message: 'mv r1, r2 || neg r1, r3' 'jl r0 || mv r14, r1' 'st r2,
13441     @-r1 || mv r1, r3' 'mv r1, r2 || ld r0, @r1+' 'cmp r1, r2 || addx
13442     r3, r4' (Both write to the condition bit)
13443
13444
13445File: as.info,  Node: M68K-Dependent,  Next: M68HC11-Dependent,  Prev: M32R-Dependent,  Up: Machine Dependencies
13446
134479.22 M680x0 Dependent Features
13448==============================
13449
13450* Menu:
13451
13452* M68K-Opts::                   M680x0 Options
13453* M68K-Syntax::                 Syntax
13454* M68K-Moto-Syntax::            Motorola Syntax
13455* M68K-Float::                  Floating Point
13456* M68K-Directives::             680x0 Machine Directives
13457* M68K-opcodes::                Opcodes
13458
13459
13460File: as.info,  Node: M68K-Opts,  Next: M68K-Syntax,  Up: M68K-Dependent
13461
134629.22.1 M680x0 Options
13463---------------------
13464
13465The Motorola 680x0 version of 'as' has a few machine dependent options:
13466
13467'-march=ARCHITECTURE'
13468     This option specifies a target architecture.  The following
13469     architectures are recognized: '68000', '68010', '68020', '68030',
13470     '68040', '68060', 'cpu32', 'isaa', 'isaaplus', 'isab', 'isac' and
13471     'cfv4e'.
13472
13473'-mcpu=CPU'
13474     This option specifies a target cpu.  When used in conjunction with
13475     the '-march' option, the cpu must be within the specified
13476     architecture.  Also, the generic features of the architecture are
13477     used for instruction generation, rather than those of the specific
13478     chip.
13479
13480'-m[no-]68851'
13481'-m[no-]68881'
13482'-m[no-]div'
13483'-m[no-]usp'
13484'-m[no-]float'
13485'-m[no-]mac'
13486'-m[no-]emac'
13487
13488     Enable or disable various architecture specific features.  If a
13489     chip or architecture by default supports an option (for instance
13490     '-march=isaaplus' includes the '-mdiv' option), explicitly
13491     disabling the option will override the default.
13492
13493'-l'
13494     You can use the '-l' option to shorten the size of references to
13495     undefined symbols.  If you do not use the '-l' option, references
13496     to undefined symbols are wide enough for a full 'long' (32 bits).
13497     (Since 'as' cannot know where these symbols end up, 'as' can only
13498     allocate space for the linker to fill in later.  Since 'as' does
13499     not know how far away these symbols are, it allocates as much space
13500     as it can.)  If you use this option, the references are only one
13501     word wide (16 bits).  This may be useful if you want the object
13502     file to be as small as possible, and you know that the relevant
13503     symbols are always less than 17 bits away.
13504
13505'--register-prefix-optional'
13506     For some configurations, especially those where the compiler
13507     normally does not prepend an underscore to the names of user
13508     variables, the assembler requires a '%' before any use of a
13509     register name.  This is intended to let the assembler distinguish
13510     between C variables and functions named 'a0' through 'a7', and so
13511     on.  The '%' is always accepted, but is not required for certain
13512     configurations, notably 'sun3'.  The '--register-prefix-optional'
13513     option may be used to permit omitting the '%' even for
13514     configurations for which it is normally required.  If this is done,
13515     it will generally be impossible to refer to C variables and
13516     functions with the same names as register names.
13517
13518'--bitwise-or'
13519     Normally the character '|' is treated as a comment character, which
13520     means that it can not be used in expressions.  The '--bitwise-or'
13521     option turns '|' into a normal character.  In this mode, you must
13522     either use C style comments, or start comments with a '#' character
13523     at the beginning of a line.
13524
13525'--base-size-default-16 --base-size-default-32'
13526     If you use an addressing mode with a base register without
13527     specifying the size, 'as' will normally use the full 32 bit value.
13528     For example, the addressing mode '%a0@(%d0)' is equivalent to
13529     '%a0@(%d0:l)'.  You may use the '--base-size-default-16' option to
13530     tell 'as' to default to using the 16 bit value.  In this case,
13531     '%a0@(%d0)' is equivalent to '%a0@(%d0:w)'.  You may use the
13532     '--base-size-default-32' option to restore the default behaviour.
13533
13534'--disp-size-default-16 --disp-size-default-32'
13535     If you use an addressing mode with a displacement, and the value of
13536     the displacement is not known, 'as' will normally assume that the
13537     value is 32 bits.  For example, if the symbol 'disp' has not been
13538     defined, 'as' will assemble the addressing mode '%a0@(disp,%d0)' as
13539     though 'disp' is a 32 bit value.  You may use the
13540     '--disp-size-default-16' option to tell 'as' to instead assume that
13541     the displacement is 16 bits.  In this case, 'as' will assemble
13542     '%a0@(disp,%d0)' as though 'disp' is a 16 bit value.  You may use
13543     the '--disp-size-default-32' option to restore the default
13544     behaviour.
13545
13546'--pcrel'
13547     Always keep branches PC-relative.  In the M680x0 architecture all
13548     branches are defined as PC-relative.  However, on some processors
13549     they are limited to word displacements maximum.  When 'as' needs a
13550     long branch that is not available, it normally emits an absolute
13551     jump instead.  This option disables this substitution.  When this
13552     option is given and no long branches are available, only word
13553     branches will be emitted.  An error message will be generated if a
13554     word branch cannot reach its target.  This option has no effect on
13555     68020 and other processors that have long branches.  *note Branch
13556     Improvement: M68K-Branch.
13557
13558'-m68000'
13559     'as' can assemble code for several different members of the
13560     Motorola 680x0 family.  The default depends upon how 'as' was
13561     configured when it was built; normally, the default is to assemble
13562     code for the 68020 microprocessor.  The following options may be
13563     used to change the default.  These options control which
13564     instructions and addressing modes are permitted.  The members of
13565     the 680x0 family are very similar.  For detailed information about
13566     the differences, see the Motorola manuals.
13567
13568     '-m68000'
13569     '-m68ec000'
13570     '-m68hc000'
13571     '-m68hc001'
13572     '-m68008'
13573     '-m68302'
13574     '-m68306'
13575     '-m68307'
13576     '-m68322'
13577     '-m68356'
13578          Assemble for the 68000.  '-m68008', '-m68302', and so on are
13579          synonyms for '-m68000', since the chips are the same from the
13580          point of view of the assembler.
13581
13582     '-m68010'
13583          Assemble for the 68010.
13584
13585     '-m68020'
13586     '-m68ec020'
13587          Assemble for the 68020.  This is normally the default.
13588
13589     '-m68030'
13590     '-m68ec030'
13591          Assemble for the 68030.
13592
13593     '-m68040'
13594     '-m68ec040'
13595          Assemble for the 68040.
13596
13597     '-m68060'
13598     '-m68ec060'
13599          Assemble for the 68060.
13600
13601     '-mcpu32'
13602     '-m68330'
13603     '-m68331'
13604     '-m68332'
13605     '-m68333'
13606     '-m68334'
13607     '-m68336'
13608     '-m68340'
13609     '-m68341'
13610     '-m68349'
13611     '-m68360'
13612          Assemble for the CPU32 family of chips.
13613
13614     '-m5200'
13615     '-m5202'
13616     '-m5204'
13617     '-m5206'
13618     '-m5206e'
13619     '-m521x'
13620     '-m5249'
13621     '-m528x'
13622     '-m5307'
13623     '-m5407'
13624     '-m547x'
13625     '-m548x'
13626     '-mcfv4'
13627     '-mcfv4e'
13628          Assemble for the ColdFire family of chips.
13629
13630     '-m68881'
13631     '-m68882'
13632          Assemble 68881 floating point instructions.  This is the
13633          default for the 68020, 68030, and the CPU32.  The 68040 and
13634          68060 always support floating point instructions.
13635
13636     '-mno-68881'
13637          Do not assemble 68881 floating point instructions.  This is
13638          the default for 68000 and the 68010.  The 68040 and 68060
13639          always support floating point instructions, even if this
13640          option is used.
13641
13642     '-m68851'
13643          Assemble 68851 MMU instructions.  This is the default for the
13644          68020, 68030, and 68060.  The 68040 accepts a somewhat
13645          different set of MMU instructions; '-m68851' and '-m68040'
13646          should not be used together.
13647
13648     '-mno-68851'
13649          Do not assemble 68851 MMU instructions.  This is the default
13650          for the 68000, 68010, and the CPU32.  The 68040 accepts a
13651          somewhat different set of MMU instructions.
13652
13653
13654File: as.info,  Node: M68K-Syntax,  Next: M68K-Moto-Syntax,  Prev: M68K-Opts,  Up: M68K-Dependent
13655
136569.22.2 Syntax
13657-------------
13658
13659This syntax for the Motorola 680x0 was developed at MIT.
13660
13661   The 680x0 version of 'as' uses instructions names and syntax
13662compatible with the Sun assembler.  Intervening periods are ignored; for
13663example, 'movl' is equivalent to 'mov.l'.
13664
13665   In the following table APC stands for any of the address registers
13666('%a0' through '%a7'), the program counter ('%pc'), the zero-address
13667relative to the program counter ('%zpc'), a suppressed address register
13668('%za0' through '%za7'), or it may be omitted entirely.  The use of SIZE
13669means one of 'w' or 'l', and it may be omitted, along with the leading
13670colon, unless a scale is also specified.  The use of SCALE means one of
13671'1', '2', '4', or '8', and it may always be omitted along with the
13672leading colon.
13673
13674   The following addressing modes are understood:
13675"Immediate"
13676     '#NUMBER'
13677
13678"Data Register"
13679     '%d0' through '%d7'
13680
13681"Address Register"
13682     '%a0' through '%a7'
13683     '%a7' is also known as '%sp', i.e., the Stack Pointer.  '%a6' is
13684     also known as '%fp', the Frame Pointer.
13685
13686"Address Register Indirect"
13687     '%a0@' through '%a7@'
13688
13689"Address Register Postincrement"
13690     '%a0@+' through '%a7@+'
13691
13692"Address Register Predecrement"
13693     '%a0@-' through '%a7@-'
13694
13695"Indirect Plus Offset"
13696     'APC@(NUMBER)'
13697
13698"Index"
13699     'APC@(NUMBER,REGISTER:SIZE:SCALE)'
13700
13701     The NUMBER may be omitted.
13702
13703"Postindex"
13704     'APC@(NUMBER)@(ONUMBER,REGISTER:SIZE:SCALE)'
13705
13706     The ONUMBER or the REGISTER, but not both, may be omitted.
13707
13708"Preindex"
13709     'APC@(NUMBER,REGISTER:SIZE:SCALE)@(ONUMBER)'
13710
13711     The NUMBER may be omitted.  Omitting the REGISTER produces the
13712     Postindex addressing mode.
13713
13714"Absolute"
13715     'SYMBOL', or 'DIGITS', optionally followed by ':b', ':w', or ':l'.
13716
13717
13718File: as.info,  Node: M68K-Moto-Syntax,  Next: M68K-Float,  Prev: M68K-Syntax,  Up: M68K-Dependent
13719
137209.22.3 Motorola Syntax
13721----------------------
13722
13723The standard Motorola syntax for this chip differs from the syntax
13724already discussed (*note Syntax: M68K-Syntax.).  'as' can accept
13725Motorola syntax for operands, even if MIT syntax is used for other
13726operands in the same instruction.  The two kinds of syntax are fully
13727compatible.
13728
13729   In the following table APC stands for any of the address registers
13730('%a0' through '%a7'), the program counter ('%pc'), the zero-address
13731relative to the program counter ('%zpc'), or a suppressed address
13732register ('%za0' through '%za7').  The use of SIZE means one of 'w' or
13733'l', and it may always be omitted along with the leading dot.  The use
13734of SCALE means one of '1', '2', '4', or '8', and it may always be
13735omitted along with the leading asterisk.
13736
13737   The following additional addressing modes are understood:
13738
13739"Address Register Indirect"
13740     '(%a0)' through '(%a7)'
13741     '%a7' is also known as '%sp', i.e., the Stack Pointer.  '%a6' is
13742     also known as '%fp', the Frame Pointer.
13743
13744"Address Register Postincrement"
13745     '(%a0)+' through '(%a7)+'
13746
13747"Address Register Predecrement"
13748     '-(%a0)' through '-(%a7)'
13749
13750"Indirect Plus Offset"
13751     'NUMBER(%A0)' through 'NUMBER(%A7)', or 'NUMBER(%PC)'.
13752
13753     The NUMBER may also appear within the parentheses, as in
13754     '(NUMBER,%A0)'.  When used with the PC, the NUMBER may be omitted
13755     (with an address register, omitting the NUMBER produces Address
13756     Register Indirect mode).
13757
13758"Index"
13759     'NUMBER(APC,REGISTER.SIZE*SCALE)'
13760
13761     The NUMBER may be omitted, or it may appear within the parentheses.
13762     The APC may be omitted.  The REGISTER and the APC may appear in
13763     either order.  If both APC and REGISTER are address registers, and
13764     the SIZE and SCALE are omitted, then the first register is taken as
13765     the base register, and the second as the index register.
13766
13767"Postindex"
13768     '([NUMBER,APC],REGISTER.SIZE*SCALE,ONUMBER)'
13769
13770     The ONUMBER, or the REGISTER, or both, may be omitted.  Either the
13771     NUMBER or the APC may be omitted, but not both.
13772
13773"Preindex"
13774     '([NUMBER,APC,REGISTER.SIZE*SCALE],ONUMBER)'
13775
13776     The NUMBER, or the APC, or the REGISTER, or any two of them, may be
13777     omitted.  The ONUMBER may be omitted.  The REGISTER and the APC may
13778     appear in either order.  If both APC and REGISTER are address
13779     registers, and the SIZE and SCALE are omitted, then the first
13780     register is taken as the base register, and the second as the index
13781     register.
13782
13783
13784File: as.info,  Node: M68K-Float,  Next: M68K-Directives,  Prev: M68K-Moto-Syntax,  Up: M68K-Dependent
13785
137869.22.4 Floating Point
13787---------------------
13788
13789Packed decimal (P) format floating literals are not supported.  Feel
13790free to add the code!
13791
13792   The floating point formats generated by directives are these.
13793
13794'.float'
13795     'Single' precision floating point constants.
13796
13797'.double'
13798     'Double' precision floating point constants.
13799
13800'.extend'
13801'.ldouble'
13802     'Extended' precision ('long double') floating point constants.
13803
13804
13805File: as.info,  Node: M68K-Directives,  Next: M68K-opcodes,  Prev: M68K-Float,  Up: M68K-Dependent
13806
138079.22.5 680x0 Machine Directives
13808-------------------------------
13809
13810In order to be compatible with the Sun assembler the 680x0 assembler
13811understands the following directives.
13812
13813'.data1'
13814     This directive is identical to a '.data 1' directive.
13815
13816'.data2'
13817     This directive is identical to a '.data 2' directive.
13818
13819'.even'
13820     This directive is a special case of the '.align' directive; it
13821     aligns the output to an even byte boundary.
13822
13823'.skip'
13824     This directive is identical to a '.space' directive.
13825
13826'.arch NAME'
13827     Select the target architecture and extension features.  Valid
13828     values for NAME are the same as for the '-march' command-line
13829     option.  This directive cannot be specified after any instructions
13830     have been assembled.  If it is given multiple times, or in
13831     conjunction with the '-march' option, all uses must be for the same
13832     architecture and extension set.
13833
13834'.cpu NAME'
13835     Select the target cpu.  Valid values for NAME are the same as for
13836     the '-mcpu' command-line option.  This directive cannot be
13837     specified after any instructions have been assembled.  If it is
13838     given multiple times, or in conjunction with the '-mopt' option,
13839     all uses must be for the same cpu.
13840
13841
13842File: as.info,  Node: M68K-opcodes,  Prev: M68K-Directives,  Up: M68K-Dependent
13843
138449.22.6 Opcodes
13845--------------
13846
13847* Menu:
13848
13849* M68K-Branch::                 Branch Improvement
13850* M68K-Chars::                  Special Characters
13851
13852
13853File: as.info,  Node: M68K-Branch,  Next: M68K-Chars,  Up: M68K-opcodes
13854
138559.22.6.1 Branch Improvement
13856...........................
13857
13858Certain pseudo opcodes are permitted for branch instructions.  They
13859expand to the shortest branch instruction that reach the target.
13860Generally these mnemonics are made by substituting 'j' for 'b' at the
13861start of a Motorola mnemonic.
13862
13863   The following table summarizes the pseudo-operations.  A '*' flags
13864cases that are more fully described after the table:
13865
13866               Displacement
13867               +------------------------------------------------------------
13868               |                68020           68000/10, not PC-relative OK
13869     Pseudo-Op |BYTE    WORD    LONG            ABSOLUTE LONG JUMP    **
13870               +------------------------------------------------------------
13871          jbsr |bsrs    bsrw    bsrl            jsr
13872           jra |bras    braw    bral            jmp
13873     *     jXX |bXXs    bXXw    bXXl            bNXs;jmp
13874     *    dbXX | N/A    dbXXw   dbXX;bras;bral  dbXX;bras;jmp
13875          fjXX | N/A    fbXXw   fbXXl            N/A
13876
13877     XX: condition
13878     NX: negative of condition XX
13879
13880                    '*'--see full description below
13881         '**'--this expansion mode is disallowed by '--pcrel'
13882
13883'jbsr'
13884'jra'
13885     These are the simplest jump pseudo-operations; they always map to
13886     one particular machine instruction, depending on the displacement
13887     to the branch target.  This instruction will be a byte or word
13888     branch is that is sufficient.  Otherwise, a long branch will be
13889     emitted if available.  If no long branches are available and the
13890     '--pcrel' option is not given, an absolute long jump will be
13891     emitted instead.  If no long branches are available, the '--pcrel'
13892     option is given, and a word branch cannot reach the target, an
13893     error message is generated.
13894
13895     In addition to standard branch operands, 'as' allows these
13896     pseudo-operations to have all operands that are allowed for jsr and
13897     jmp, substituting these instructions if the operand given is not
13898     valid for a branch instruction.
13899
13900'jXX'
13901     Here, 'jXX' stands for an entire family of pseudo-operations, where
13902     XX is a conditional branch or condition-code test.  The full list
13903     of pseudo-ops in this family is:
13904           jhi   jls   jcc   jcs   jne   jeq   jvc
13905           jvs   jpl   jmi   jge   jlt   jgt   jle
13906
13907     Usually, each of these pseudo-operations expands to a single branch
13908     instruction.  However, if a word branch is not sufficient, no long
13909     branches are available, and the '--pcrel' option is not given, 'as'
13910     issues a longer code fragment in terms of NX, the opposite
13911     condition to XX.  For example, under these conditions:
13912              jXX foo
13913     gives
13914               bNXs oof
13915               jmp foo
13916           oof:
13917
13918'dbXX'
13919     The full family of pseudo-operations covered here is
13920           dbhi   dbls   dbcc   dbcs   dbne   dbeq   dbvc
13921           dbvs   dbpl   dbmi   dbge   dblt   dbgt   dble
13922           dbf    dbra   dbt
13923
13924     Motorola 'dbXX' instructions allow word displacements only.  When a
13925     word displacement is sufficient, each of these pseudo-operations
13926     expands to the corresponding Motorola instruction.  When a word
13927     displacement is not sufficient and long branches are available,
13928     when the source reads 'dbXX foo', 'as' emits
13929               dbXX oo1
13930               bras oo2
13931           oo1:bral foo
13932           oo2:
13933
13934     If, however, long branches are not available and the '--pcrel'
13935     option is not given, 'as' emits
13936               dbXX oo1
13937               bras oo2
13938           oo1:jmp foo
13939           oo2:
13940
13941'fjXX'
13942     This family includes
13943           fjne   fjeq   fjge   fjlt   fjgt   fjle   fjf
13944           fjt    fjgl   fjgle  fjnge  fjngl  fjngle fjngt
13945           fjnle  fjnlt  fjoge  fjogl  fjogt  fjole  fjolt
13946           fjor   fjseq  fjsf   fjsne  fjst   fjueq  fjuge
13947           fjugt  fjule  fjult  fjun
13948
13949     Each of these pseudo-operations always expands to a single Motorola
13950     coprocessor branch instruction, word or long.  All Motorola
13951     coprocessor branch instructions allow both word and long
13952     displacements.
13953
13954
13955File: as.info,  Node: M68K-Chars,  Prev: M68K-Branch,  Up: M68K-opcodes
13956
139579.22.6.2 Special Characters
13958...........................
13959
13960Line comments are introduced by the '|' character appearing anywhere on
13961a line, unless the '--bitwise-or' command-line option has been
13962specified.
13963
13964   An asterisk ('*') as the first character on a line marks the start of
13965a line comment as well.
13966
13967   A hash character ('#') as the first character on a line also marks
13968the start of a line comment, but in this case it could also be a logical
13969line number directive (*note Comments::) or a preprocessor control
13970command (*note Preprocessing::).  If the hash character appears
13971elsewhere on a line it is used to introduce an immediate value.  (This
13972is for compatibility with Sun's assembler).
13973
13974   Multiple statements on the same line can appear if they are separated
13975by the ';' character.
13976
13977
13978File: as.info,  Node: M68HC11-Dependent,  Next: S12Z-Dependent,  Prev: M68K-Dependent,  Up: Machine Dependencies
13979
139809.23 M68HC11 and M68HC12 Dependent Features
13981===========================================
13982
13983* Menu:
13984
13985* M68HC11-Opts::                   M68HC11 and M68HC12 Options
13986* M68HC11-Syntax::                 Syntax
13987* M68HC11-Modifiers::              Symbolic Operand Modifiers
13988* M68HC11-Directives::             Assembler Directives
13989* M68HC11-Float::                  Floating Point
13990* M68HC11-opcodes::                Opcodes
13991
13992
13993File: as.info,  Node: M68HC11-Opts,  Next: M68HC11-Syntax,  Up: M68HC11-Dependent
13994
139959.23.1 M68HC11 and M68HC12 Options
13996----------------------------------
13997
13998The Motorola 68HC11 and 68HC12 version of 'as' have a few machine
13999dependent options.
14000
14001'-m68hc11'
14002     This option switches the assembler into the M68HC11 mode.  In this
14003     mode, the assembler only accepts 68HC11 operands and mnemonics.  It
14004     produces code for the 68HC11.
14005
14006'-m68hc12'
14007     This option switches the assembler into the M68HC12 mode.  In this
14008     mode, the assembler also accepts 68HC12 operands and mnemonics.  It
14009     produces code for the 68HC12.  A few 68HC11 instructions are
14010     replaced by some 68HC12 instructions as recommended by Motorola
14011     specifications.
14012
14013'-m68hcs12'
14014     This option switches the assembler into the M68HCS12 mode.  This
14015     mode is similar to '-m68hc12' but specifies to assemble for the
14016     68HCS12 series.  The only difference is on the assembling of the
14017     'movb' and 'movw' instruction when a PC-relative operand is used.
14018
14019'-mm9s12x'
14020     This option switches the assembler into the M9S12X mode.  This mode
14021     is similar to '-m68hc12' but specifies to assemble for the S12X
14022     series which is a superset of the HCS12.
14023
14024'-mm9s12xg'
14025     This option switches the assembler into the XGATE mode for the RISC
14026     co-processor featured on some S12X-family chips.
14027
14028'--xgate-ramoffset'
14029     This option instructs the linker to offset RAM addresses from S12X
14030     address space into XGATE address space.
14031
14032'-mshort'
14033     This option controls the ABI and indicates to use a 16-bit integer
14034     ABI. It has no effect on the assembled instructions.  This is the
14035     default.
14036
14037'-mlong'
14038     This option controls the ABI and indicates to use a 32-bit integer
14039     ABI.
14040
14041'-mshort-double'
14042     This option controls the ABI and indicates to use a 32-bit float
14043     ABI. This is the default.
14044
14045'-mlong-double'
14046     This option controls the ABI and indicates to use a 64-bit float
14047     ABI.
14048
14049'--strict-direct-mode'
14050     You can use the '--strict-direct-mode' option to disable the
14051     automatic translation of direct page mode addressing into extended
14052     mode when the instruction does not support direct mode.  For
14053     example, the 'clr' instruction does not support direct page mode
14054     addressing.  When it is used with the direct page mode, 'as' will
14055     ignore it and generate an absolute addressing.  This option
14056     prevents 'as' from doing this, and the wrong usage of the direct
14057     page mode will raise an error.
14058
14059'--short-branches'
14060     The '--short-branches' option turns off the translation of relative
14061     branches into absolute branches when the branch offset is out of
14062     range.  By default 'as' transforms the relative branch ('bsr',
14063     'bgt', 'bge', 'beq', 'bne', 'ble', 'blt', 'bhi', 'bcc', 'bls',
14064     'bcs', 'bmi', 'bvs', 'bvs', 'bra') into an absolute branch when the
14065     offset is out of the -128 ..  127 range.  In that case, the 'bsr'
14066     instruction is translated into a 'jsr', the 'bra' instruction is
14067     translated into a 'jmp' and the conditional branches instructions
14068     are inverted and followed by a 'jmp'.  This option disables these
14069     translations and 'as' will generate an error if a relative branch
14070     is out of range.  This option does not affect the optimization
14071     associated to the 'jbra', 'jbsr' and 'jbXX' pseudo opcodes.
14072
14073'--force-long-branches'
14074     The '--force-long-branches' option forces the translation of
14075     relative branches into absolute branches.  This option does not
14076     affect the optimization associated to the 'jbra', 'jbsr' and 'jbXX'
14077     pseudo opcodes.
14078
14079'--print-insn-syntax'
14080     You can use the '--print-insn-syntax' option to obtain the syntax
14081     description of the instruction when an error is detected.
14082
14083'--print-opcodes'
14084     The '--print-opcodes' option prints the list of all the
14085     instructions with their syntax.  The first item of each line
14086     represents the instruction name and the rest of the line indicates
14087     the possible operands for that instruction.  The list is printed in
14088     alphabetical order.  Once the list is printed 'as' exits.
14089
14090'--generate-example'
14091     The '--generate-example' option is similar to '--print-opcodes' but
14092     it generates an example for each instruction instead.
14093
14094
14095File: as.info,  Node: M68HC11-Syntax,  Next: M68HC11-Modifiers,  Prev: M68HC11-Opts,  Up: M68HC11-Dependent
14096
140979.23.2 Syntax
14098-------------
14099
14100In the M68HC11 syntax, the instruction name comes first and it may be
14101followed by one or several operands (up to three).  Operands are
14102separated by comma (',').  In the normal mode, 'as' will complain if too
14103many operands are specified for a given instruction.  In the MRI mode
14104(turned on with '-M' option), it will treat them as comments.  Example:
14105
14106     inx
14107     lda  #23
14108     bset 2,x #4
14109     brclr *bot #8 foo
14110
14111   The presence of a ';' character or a '!' character anywhere on a line
14112indicates the start of a comment that extends to the end of that line.
14113
14114   A '*' or a '#' character at the start of a line also introduces a
14115line comment, but these characters do not work elsewhere on the line.
14116If the first character of the line is a '#' then as well as starting a
14117comment, the line could also be logical line number directive (*note
14118Comments::) or a preprocessor control command (*note Preprocessing::).
14119
14120   The M68HC11 assembler does not currently support a line separator
14121character.
14122
14123   The following addressing modes are understood for 68HC11 and 68HC12:
14124"Immediate"
14125     '#NUMBER'
14126
14127"Address Register"
14128     'NUMBER,X', 'NUMBER,Y'
14129
14130     The NUMBER may be omitted in which case 0 is assumed.
14131
14132"Direct Addressing mode"
14133     '*SYMBOL', or '*DIGITS'
14134
14135"Absolute"
14136     'SYMBOL', or 'DIGITS'
14137
14138   The M68HC12 has other more complex addressing modes.  All of them are
14139supported and they are represented below:
14140
14141"Constant Offset Indexed Addressing Mode"
14142     'NUMBER,REG'
14143
14144     The NUMBER may be omitted in which case 0 is assumed.  The register
14145     can be either 'X', 'Y', 'SP' or 'PC'.  The assembler will use the
14146     smaller post-byte definition according to the constant value (5-bit
14147     constant offset, 9-bit constant offset or 16-bit constant offset).
14148     If the constant is not known by the assembler it will use the
14149     16-bit constant offset post-byte and the value will be resolved at
14150     link time.
14151
14152"Offset Indexed Indirect"
14153     '[NUMBER,REG]'
14154
14155     The register can be either 'X', 'Y', 'SP' or 'PC'.
14156
14157"Auto Pre-Increment/Pre-Decrement/Post-Increment/Post-Decrement"
14158     'NUMBER,-REG' 'NUMBER,+REG' 'NUMBER,REG-' 'NUMBER,REG+'
14159
14160     The number must be in the range '-8'..'+8' and must not be 0.  The
14161     register can be either 'X', 'Y', 'SP' or 'PC'.
14162
14163"Accumulator Offset"
14164     'ACC,REG'
14165
14166     The accumulator register can be either 'A', 'B' or 'D'.  The
14167     register can be either 'X', 'Y', 'SP' or 'PC'.
14168
14169"Accumulator D offset indexed-indirect"
14170     '[D,REG]'
14171
14172     The register can be either 'X', 'Y', 'SP' or 'PC'.
14173
14174   For example:
14175
14176     ldab 1024,sp
14177     ldd [10,x]
14178     orab 3,+x
14179     stab -2,y-
14180     ldx a,pc
14181     sty [d,sp]
14182
14183
14184File: as.info,  Node: M68HC11-Modifiers,  Next: M68HC11-Directives,  Prev: M68HC11-Syntax,  Up: M68HC11-Dependent
14185
141869.23.3 Symbolic Operand Modifiers
14187---------------------------------
14188
14189The assembler supports several modifiers when using symbol addresses in
1419068HC11 and 68HC12 instruction operands.  The general syntax is the
14191following:
14192
14193     %modifier(symbol)
14194
14195'%addr'
14196     This modifier indicates to the assembler and linker to use the
14197     16-bit physical address corresponding to the symbol.  This is
14198     intended to be used on memory window systems to map a symbol in the
14199     memory bank window.  If the symbol is in a memory expansion part,
14200     the physical address corresponds to the symbol address within the
14201     memory bank window.  If the symbol is not in a memory expansion
14202     part, this is the symbol address (using or not using the %addr
14203     modifier has no effect in that case).
14204
14205'%page'
14206     This modifier indicates to use the memory page number corresponding
14207     to the symbol.  If the symbol is in a memory expansion part, its
14208     page number is computed by the linker as a number used to map the
14209     page containing the symbol in the memory bank window.  If the
14210     symbol is not in a memory expansion part, the page number is 0.
14211
14212'%hi'
14213     This modifier indicates to use the 8-bit high part of the physical
14214     address of the symbol.
14215
14216'%lo'
14217     This modifier indicates to use the 8-bit low part of the physical
14218     address of the symbol.
14219
14220   For example a 68HC12 call to a function 'foo_example' stored in
14221memory expansion part could be written as follows:
14222
14223     call %addr(foo_example),%page(foo_example)
14224
14225   and this is equivalent to
14226
14227     call foo_example
14228
14229   And for 68HC11 it could be written as follows:
14230
14231     ldab #%page(foo_example)
14232     stab _page_switch
14233     jsr  %addr(foo_example)
14234
14235
14236File: as.info,  Node: M68HC11-Directives,  Next: M68HC11-Float,  Prev: M68HC11-Modifiers,  Up: M68HC11-Dependent
14237
142389.23.4 Assembler Directives
14239---------------------------
14240
14241The 68HC11 and 68HC12 version of 'as' have the following specific
14242assembler directives:
14243
14244'.relax'
14245     The relax directive is used by the 'GNU Compiler' to emit a
14246     specific relocation to mark a group of instructions for linker
14247     relaxation.  The sequence of instructions within the group must be
14248     known to the linker so that relaxation can be performed.
14249
14250'.mode [mshort|mlong|mshort-double|mlong-double]'
14251     This directive specifies the ABI. It overrides the '-mshort',
14252     '-mlong', '-mshort-double' and '-mlong-double' options.
14253
14254'.far SYMBOL'
14255     This directive marks the symbol as a 'far' symbol meaning that it
14256     uses a 'call/rtc' calling convention as opposed to 'jsr/rts'.
14257     During a final link, the linker will identify references to the
14258     'far' symbol and will verify the proper calling convention.
14259
14260'.interrupt SYMBOL'
14261     This directive marks the symbol as an interrupt entry point.  This
14262     information is then used by the debugger to correctly unwind the
14263     frame across interrupts.
14264
14265'.xrefb SYMBOL'
14266     This directive is defined for compatibility with the 'Specification
14267     for Motorola 8 and 16-Bit Assembly Language Input Standard' and is
14268     ignored.
14269
14270
14271File: as.info,  Node: M68HC11-Float,  Next: M68HC11-opcodes,  Prev: M68HC11-Directives,  Up: M68HC11-Dependent
14272
142739.23.5 Floating Point
14274---------------------
14275
14276Packed decimal (P) format floating literals are not supported.  Feel
14277free to add the code!
14278
14279   The floating point formats generated by directives are these.
14280
14281'.float'
14282     'Single' precision floating point constants.
14283
14284'.double'
14285     'Double' precision floating point constants.
14286
14287'.extend'
14288'.ldouble'
14289     'Extended' precision ('long double') floating point constants.
14290
14291
14292File: as.info,  Node: M68HC11-opcodes,  Prev: M68HC11-Float,  Up: M68HC11-Dependent
14293
142949.23.6 Opcodes
14295--------------
14296
14297* Menu:
14298
14299* M68HC11-Branch::                 Branch Improvement
14300
14301
14302File: as.info,  Node: M68HC11-Branch,  Up: M68HC11-opcodes
14303
143049.23.6.1 Branch Improvement
14305...........................
14306
14307Certain pseudo opcodes are permitted for branch instructions.  They
14308expand to the shortest branch instruction that reach the target.
14309Generally these mnemonics are made by prepending 'j' to the start of
14310Motorola mnemonic.  These pseudo opcodes are not affected by the
14311'--short-branches' or '--force-long-branches' options.
14312
14313   The following table summarizes the pseudo-operations.
14314
14315                             Displacement Width
14316          +-------------------------------------------------------------+
14317          |                     Options                                 |
14318          |    --short-branches           --force-long-branches         |
14319          +--------------------------+----------------------------------+
14320       Op |BYTE             WORD     | BYTE          WORD               |
14321          +--------------------------+----------------------------------+
14322      bsr | bsr <pc-rel>    <error>  |               jsr <abs>          |
14323      bra | bra <pc-rel>    <error>  |               jmp <abs>          |
14324     jbsr | bsr <pc-rel>   jsr <abs> | bsr <pc-rel>  jsr <abs>          |
14325     jbra | bra <pc-rel>   jmp <abs> | bra <pc-rel>  jmp <abs>          |
14326      bXX | bXX <pc-rel>    <error>  |               bNX +3; jmp <abs>  |
14327     jbXX | bXX <pc-rel>   bNX +3;   | bXX <pc-rel>  bNX +3; jmp <abs>  |
14328          |                jmp <abs> |                                  |
14329          +--------------------------+----------------------------------+
14330     XX: condition
14331     NX: negative of condition XX
14332
14333
14334'jbsr'
14335'jbra'
14336     These are the simplest jump pseudo-operations; they always map to
14337     one particular machine instruction, depending on the displacement
14338     to the branch target.
14339
14340'jbXX'
14341     Here, 'jbXX' stands for an entire family of pseudo-operations,
14342     where XX is a conditional branch or condition-code test.  The full
14343     list of pseudo-ops in this family is:
14344           jbcc   jbeq   jbge   jbgt   jbhi   jbvs   jbpl  jblo
14345           jbcs   jbne   jblt   jble   jbls   jbvc   jbmi
14346
14347     For the cases of non-PC relative displacements and long
14348     displacements, 'as' issues a longer code fragment in terms of NX,
14349     the opposite condition to XX.  For example, for the non-PC relative
14350     case:
14351              jbXX foo
14352     gives
14353               bNXs oof
14354               jmp foo
14355           oof:
14356
14357
14358File: as.info,  Node: S12Z-Dependent,  Next: Meta-Dependent,  Prev: M68HC11-Dependent,  Up: Machine Dependencies
14359
143609.24 S12Z Dependent Features
14361============================
14362
14363The Freescale S12Z version of 'as' has a few machine dependent features.
14364
14365* Menu:
14366
14367* S12Z Options::                S12Z Options
14368* S12Z Syntax::                 Syntax
14369
14370
14371File: as.info,  Node: S12Z Options,  Next: S12Z Syntax,  Up: S12Z-Dependent
14372
143739.24.1 S12Z Options
14374-------------------
14375
14376The S12Z version of 'as' recognizes the following options:
14377
14378'-mreg-prefix=PREFIX'
14379     You can use the '-mreg-prefix=PFX' option to indicate that the
14380     assembler should expect all register names to be prefixed with the
14381     string PFX.
14382
14383     For an explanation of what this means and why it might be needed,
14384     see *note S12Z Register Notation::.
14385
14386'-mdollar-hex'
14387     The '-mdollar-hex' option affects the way that literal hexadecimal
14388     constants are represented.  When this option is specified, the
14389     assembler will consider the '$' character as the start of a
14390     hexadecimal integer constant.  Without this option, the standard
14391     value of '0x' is expected.
14392
14393     If you use this option, then you cannot have symbol names starting
14394     with '$'.  '-mdollar-hex' is implied if the '--traditional-format'
14395     (*note traditional-format::) is used.
14396
14397
14398File: as.info,  Node: S12Z Syntax,  Prev: S12Z Options,  Up: S12Z-Dependent
14399
144009.24.2 Syntax
14401-------------
14402
14403* Menu:
14404
14405* S12Z Syntax Overview::                  General description
14406* S12Z Addressing Modes::                 Operands and their semantics
14407* S12Z Register Notation::                How to refer to registers
14408
14409
14410File: as.info,  Node: S12Z Syntax Overview,  Next: S12Z Addressing Modes,  Up: S12Z Syntax
14411
144129.24.2.1 Overview
14413.................
14414
14415In the S12Z syntax, the instruction name comes first and it may be
14416followed by one, or by several operands.  In most cases the maximum
14417number of operands is three.  Operands are separated by a comma (',').
14418A comma however does not act as a separator if it appears within
14419parentheses ('()') or within square brackets ('[]').  'as' will complain
14420if too many, too few or inappropriate operands are specified for a given
14421instruction.
14422
14423   Some instructions accept and (in certain situations require) a suffix
14424indicating the size of the operand.  The suffix is separated from the
14425instruction name by a period ('.') and may be one of 'b', 'w', 'p' or
14426'l' indicating 'byte' (a single byte), 'word' (2 bytes), 'pointer' (3
14427bytes) or 'long' (4 bytes) respectively.
14428
14429   Example:
14430
14431     	bset.b  0xA98, #5
14432     	mov.b   #6, 0x2409
14433     	ld      d0, #4
14434     	mov.l   (d0, x), 0x2409
14435     	inc     d0
14436     	cmp     d0, #12
14437     	blt     *-4
14438     	lea     x, 0x2409
14439     	st      y,  (1, x)
14440
14441   The presence of a ';' character anywhere on a line indicates the
14442start of a comment that extends to the end of that line.
14443
14444   A '*' or a '#' character at the start of a line also introduces a
14445line comment, but these characters do not work elsewhere on the line.
14446If the first character of the line is a '#' then as well as starting a
14447comment, the line could also be logical line number directive (*note
14448Comments::) or a preprocessor control command (*note Preprocessing::).
14449
14450   The S12Z assembler does not currently support a line separator
14451character.
14452
14453
14454File: as.info,  Node: S12Z Addressing Modes,  Next: S12Z Register Notation,  Prev: S12Z Syntax Overview,  Up: S12Z Syntax
14455
144569.24.2.2 Addressing Modes
14457.........................
14458
14459The following addressing modes are understood for the S12Z.
14460"Immediate"
14461     '#NUMBER'
14462
14463"Immediate Bit Field"
14464     '#WIDTH:OFFSET'
14465
14466     Bit field instructions in the immediate mode require the width and
14467     offset to be specified.  The WIDTH parameter specifies the number
14468     of bits in the field.  It should be a number in the range [1,32].
14469     OFFSET determines the position within the field where the operation
14470     should start.  It should be a number in the range [0,31].
14471
14472"Relative"
14473     '*SYMBOL', or '*[+-]DIGITS'
14474
14475     Program counter relative addresses have a width of 15 bits.  Thus,
14476     they must be within the range [-32768, 32767].
14477
14478"Register"
14479     'REG'
14480
14481     Some instructions accept a register as an operand.  In general, REG
14482     may be a data register ('D0', 'D1' ... 'D7'), the 'X' register or
14483     the 'Y' register.
14484
14485     A few instructions accept as an argument the stack pointer register
14486     ('S'), and/or the program counter ('P').
14487
14488     Some very special instructions accept arguments which refer to the
14489     condition code register.  For these arguments the syntax is 'CCR',
14490     'CCH' or 'CCL' which refer to the complete condition code register,
14491     the condition code register high byte and the condition code
14492     register low byte respectively.
14493
14494"Absolute Direct"
14495     'SYMBOL', or 'DIGITS'
14496
14497"Absolute Indirect"
14498     '[SYMBOL', or 'DIGITS]'
14499
14500"Constant Offset Indexed"
14501     '(NUMBER,REG)'
14502
14503     REG may be either 'X', 'Y', 'S' or 'P' or one of the data registers
14504     'D0', 'D1' ... 'D7'.  If any of the registers 'D2' ... 'D5' are
14505     specified, then the register value is treated as a signed value.
14506     Otherwise it is treated as unsigned.  NUMBER may be any integer in
14507     the range [-8388608,8388607].
14508
14509"Offset Indexed Indirect"
14510     '[NUMBER,REG]'
14511
14512     REG may be either 'X', 'Y', 'S' or 'P'.  NUMBER may be any integer
14513     in the range [-8388608,8388607].
14514
14515"Auto Pre-Increment/Pre-Decrement/Post-Increment/Post-Decrement"
14516     '-REG', '+REG', 'REG-' or 'REG+'
14517
14518     This addressing mode is typically used to access a value at an
14519     address, and simultaneously to increment/decrement the register
14520     pointing to that address.  Thus REG may be any of the 24 bit
14521     registers 'X', 'Y', or 'S'.  Pre-increment and post-decrement are
14522     not available for register 'S' (only post-increment and
14523     pre-decrement are available).
14524
14525"Register Offset Direct"
14526     '(DATA-REG,REG)'
14527
14528     REG can be either 'X', 'Y', or 'S'.  DATA-REG must be one of the
14529     data registers 'D0', 'D1' ... 'D7'.  If any of the registers 'D2'
14530     ... 'D5' are specified, then the register value is treated as a
14531     signed value.  Otherwise it is treated as unsigned.
14532
14533"Register Offset Indirect"
14534     '[DATA-REG,REG]'
14535
14536     REG can be either 'X' or 'Y'.  DATA-REG must be one of the data
14537     registers 'D0', 'D1' ... 'D7'.  If any of the registers 'D2' ...
14538     'D5' are specified, then the register value is treated as a signed
14539     value.  Otherwise it is treated as unsigned.
14540
14541   For example:
14542
14543     	trap    #197        ;; Immediate mode
14544     	bra     *+49        ;; Relative mode
14545     	bra     .L0         ;;     ditto
14546     	jmp     0xFE0034    ;; Absolute direct mode
14547     	jmp     [0xFD0012]  ;; Absolute indirect mode
14548     	inc.b   (4,x)       ;; Constant offset indexed mode
14549     	jsr     (45, d0)    ;;     ditto
14550     	dec.w   [4,y]       ;; Constant offset indexed indirect mode
14551     	clr.p   (-s)        ;; Pre-decrement mode
14552     	neg.l   (d0, s)     ;; Register offset direct mode
14553     	com.b   [d1, x]     ;; Register offset indirect mode
14554     	psh     cch         ;; Register mode
14555
14556
14557File: as.info,  Node: S12Z Register Notation,  Prev: S12Z Addressing Modes,  Up: S12Z Syntax
14558
145599.24.2.3 Register Notation
14560..........................
14561
14562Without a register prefix (*note S12Z Options::), S12Z assembler code is
14563expected in the traditional format like this:
14564     lea s, (-2,s)
14565     st d2, (0,s)
14566     ld x,  symbol
14567     tfr d2, d6
14568     cmp d6, #1532
14569
14570However, if 'as' is started with (for example) '-mreg-prefix=%' then all
14571register names must be prefixed with '%' as follows:
14572     lea %s, (-2,%s)
14573     st %d2, (0,%s)
14574     ld %x,  symbol
14575     tfr %d2, %d6
14576     cmp %d6, #1532
14577
14578   The register prefix feature is intended to be used by compilers to
14579avoid ambiguity between symbols and register names.  Consider the
14580following assembler instruction:
14581     st d0, d1
14582The destination operand of this instruction could either refer to the
14583register 'D1', or it could refer to the symbol named "d1".  If the
14584latter is intended then 'as' must be invoked with '-mreg-prefix=PFX' and
14585the code written as
14586     st PFXd0, d1
14587where PFX is the chosen register prefix.  For this reason, compiler
14588back-ends should choose a register prefix which cannot be confused with
14589a symbol name.
14590
14591
14592File: as.info,  Node: Meta-Dependent,  Next: MicroBlaze-Dependent,  Prev: S12Z-Dependent,  Up: Machine Dependencies
14593
145949.25 Meta Dependent Features
14595============================
14596
14597* Menu:
14598
14599* Meta Options::                Options
14600* Meta Syntax::                 Meta Assembler Syntax
14601
14602
14603File: as.info,  Node: Meta Options,  Next: Meta Syntax,  Up: Meta-Dependent
14604
146059.25.1 Options
14606--------------
14607
14608The Imagination Technologies Meta architecture is implemented in a
14609number of versions, with each new version adding new features such as
14610instructions and registers.  For precise details of what instructions
14611each core supports, please see the chip's technical reference manual.
14612
14613   The following table lists all available Meta options.
14614
14615'-mcpu=metac11'
14616     Generate code for Meta 1.1.
14617
14618'-mcpu=metac12'
14619     Generate code for Meta 1.2.
14620
14621'-mcpu=metac21'
14622     Generate code for Meta 2.1.
14623
14624'-mfpu=metac21'
14625     Allow code to use FPU hardware of Meta 2.1.
14626
14627
14628File: as.info,  Node: Meta Syntax,  Prev: Meta Options,  Up: Meta-Dependent
14629
146309.25.2 Syntax
14631-------------
14632
14633* Menu:
14634
14635* Meta-Chars::                Special Characters
14636* Meta-Regs::                 Register Names
14637
14638
14639File: as.info,  Node: Meta-Chars,  Next: Meta-Regs,  Up: Meta Syntax
14640
146419.25.2.1 Special Characters
14642...........................
14643
14644'!' is the line comment character.
14645
14646   You can use ';' instead of a newline to separate statements.
14647
14648   Since '$' has no special meaning, you may use it in symbol names.
14649
14650
14651File: as.info,  Node: Meta-Regs,  Prev: Meta-Chars,  Up: Meta Syntax
14652
146539.25.2.2 Register Names
14654.......................
14655
14656Registers can be specified either using their mnemonic names, such as
14657'D0Re0', or using the unit plus register number separated by a '.', such
14658as 'D0.0'.
14659
14660
14661File: as.info,  Node: MicroBlaze-Dependent,  Next: MIPS-Dependent,  Prev: Meta-Dependent,  Up: Machine Dependencies
14662
146639.26 MicroBlaze Dependent Features
14664==================================
14665
14666The Xilinx MicroBlaze processor family includes several variants, all
14667using the same core instruction set.  This chapter covers features of
14668the GNU assembler that are specific to the MicroBlaze architecture.  For
14669details about the MicroBlaze instruction set, please see the 'MicroBlaze
14670Processor Reference Guide (UG081)' available at www.xilinx.com.
14671
14672* Menu:
14673
14674* MicroBlaze Directives::           Directives for MicroBlaze Processors.
14675* MicroBlaze Syntax::               Syntax for the MicroBlaze
14676
14677
14678File: as.info,  Node: MicroBlaze Directives,  Next: MicroBlaze Syntax,  Up: MicroBlaze-Dependent
14679
146809.26.1 Directives
14681-----------------
14682
14683A number of assembler directives are available for MicroBlaze.
14684
14685'.data8 EXPRESSION,...'
14686     This directive is an alias for '.byte'.  Each expression is
14687     assembled into an eight-bit value.
14688
14689'.data16 EXPRESSION,...'
14690     This directive is an alias for '.hword'.  Each expression is
14691     assembled into an 16-bit value.
14692
14693'.data32 EXPRESSION,...'
14694     This directive is an alias for '.word'.  Each expression is
14695     assembled into an 32-bit value.
14696
14697'.ent NAME[,LABEL]'
14698     This directive is an alias for '.func' denoting the start of
14699     function NAME at (optional) LABEL.
14700
14701'.end NAME[,LABEL]'
14702     This directive is an alias for '.endfunc' denoting the end of
14703     function NAME.
14704
14705'.gpword LABEL,...'
14706     This directive is an alias for '.rva'.  The resolved address of
14707     LABEL is stored in the data section.
14708
14709'.weakext LABEL'
14710     Declare that LABEL is a weak external symbol.
14711
14712'.rodata'
14713     Switch to .rodata section.  Equivalent to '.section .rodata'
14714
14715'.sdata2'
14716     Switch to .sdata2 section.  Equivalent to '.section .sdata2'
14717
14718'.sdata'
14719     Switch to .sdata section.  Equivalent to '.section .sdata'
14720
14721'.bss'
14722     Switch to .bss section.  Equivalent to '.section .bss'
14723
14724'.sbss'
14725     Switch to .sbss section.  Equivalent to '.section .sbss'
14726
14727
14728File: as.info,  Node: MicroBlaze Syntax,  Prev: MicroBlaze Directives,  Up: MicroBlaze-Dependent
14729
147309.26.2 Syntax for the MicroBlaze
14731--------------------------------
14732
14733* Menu:
14734
14735* MicroBlaze-Chars::                Special Characters
14736
14737
14738File: as.info,  Node: MicroBlaze-Chars,  Up: MicroBlaze Syntax
14739
147409.26.2.1 Special Characters
14741...........................
14742
14743The presence of a '#' on a line indicates the start of a comment that
14744extends to the end of the current line.
14745
14746   If a '#' appears as the first character of a line, the whole line is
14747treated as a comment, but in this case the line can also be a logical
14748line number directive (*note Comments::) or a preprocessor control
14749command (*note Preprocessing::).
14750
14751   The ';' character can be used to separate statements on the same
14752line.
14753
14754
14755File: as.info,  Node: MIPS-Dependent,  Next: MMIX-Dependent,  Prev: MicroBlaze-Dependent,  Up: Machine Dependencies
14756
147579.27 MIPS Dependent Features
14758============================
14759
14760GNU 'as' for MIPS architectures supports several different MIPS
14761processors, and MIPS ISA levels I through V, MIPS32, and MIPS64.  For
14762information about the MIPS instruction set, see 'MIPS RISC
14763Architecture', by Kane and Heindrich (Prentice-Hall).  For an overview
14764of MIPS assembly conventions, see "Appendix D: Assembly Language
14765Programming" in the same work.
14766
14767* Menu:
14768
14769* MIPS Options::   	Assembler options
14770* MIPS Macros:: 	High-level assembly macros
14771* MIPS Symbol Sizes::	Directives to override the size of symbols
14772* MIPS Small Data:: 	Controlling the use of small data accesses
14773* MIPS ISA::    	Directives to override the ISA level
14774* MIPS assembly options:: Directives to control code generation
14775* MIPS autoextend::	Directives for extending MIPS 16 bit instructions
14776* MIPS insn::		Directive to mark data as an instruction
14777* MIPS FP ABIs::	Marking which FP ABI is in use
14778* MIPS NaN Encodings::	Directives to record which NaN encoding is being used
14779* MIPS Option Stack::	Directives to save and restore options
14780* MIPS ASE Instruction Generation Overrides:: Directives to control
14781  			generation of MIPS ASE instructions
14782* MIPS Floating-Point:: Directives to override floating-point options
14783* MIPS Syntax::         MIPS specific syntactical considerations
14784
14785
14786File: as.info,  Node: MIPS Options,  Next: MIPS Macros,  Up: MIPS-Dependent
14787
147889.27.1 Assembler options
14789------------------------
14790
14791The MIPS configurations of GNU 'as' support these special options:
14792
14793'-G NUM'
14794     Set the "small data" limit to N bytes.  The default limit is 8
14795     bytes.  *Note Controlling the use of small data accesses: MIPS
14796     Small Data.
14797
14798'-EB'
14799'-EL'
14800     Any MIPS configuration of 'as' can select big-endian or
14801     little-endian output at run time (unlike the other GNU development
14802     tools, which must be configured for one or the other).  Use '-EB'
14803     to select big-endian output, and '-EL' for little-endian.
14804
14805'-KPIC'
14806     Generate SVR4-style PIC. This option tells the assembler to
14807     generate SVR4-style position-independent macro expansions.  It also
14808     tells the assembler to mark the output file as PIC.
14809
14810'-mvxworks-pic'
14811     Generate VxWorks PIC. This option tells the assembler to generate
14812     VxWorks-style position-independent macro expansions.
14813
14814'-mips1'
14815'-mips2'
14816'-mips3'
14817'-mips4'
14818'-mips5'
14819'-mips32'
14820'-mips32r2'
14821'-mips32r3'
14822'-mips32r5'
14823'-mips32r6'
14824'-mips64'
14825'-mips64r2'
14826'-mips64r3'
14827'-mips64r5'
14828'-mips64r6'
14829     Generate code for a particular MIPS Instruction Set Architecture
14830     level.  '-mips1' corresponds to the R2000 and R3000 processors,
14831     '-mips2' to the R6000 processor, '-mips3' to the R4000 processor,
14832     and '-mips4' to the R8000 and R10000 processors.  '-mips5',
14833     '-mips32', '-mips32r2', '-mips32r3', '-mips32r5', '-mips32r6',
14834     '-mips64', '-mips64r2', '-mips64r3', '-mips64r5', and '-mips64r6'
14835     correspond to generic MIPS V, MIPS32, MIPS32 Release 2, MIPS32
14836     Release 3, MIPS32 Release 5, MIPS32 Release 6, MIPS64, and MIPS64
14837     Release 2, MIPS64 Release 3, MIPS64 Release 5, and MIPS64 Release 6
14838     ISA processors, respectively.  You can also switch instruction sets
14839     during the assembly; see *note Directives to override the ISA
14840     level: MIPS ISA.
14841
14842'-mgp32'
14843'-mfp32'
14844     Some macros have different expansions for 32-bit and 64-bit
14845     registers.  The register sizes are normally inferred from the ISA
14846     and ABI, but these flags force a certain group of registers to be
14847     treated as 32 bits wide at all times.  '-mgp32' controls the size
14848     of general-purpose registers and '-mfp32' controls the size of
14849     floating-point registers.
14850
14851     The '.set gp=32' and '.set fp=32' directives allow the size of
14852     registers to be changed for parts of an object.  The default value
14853     is restored by '.set gp=default' and '.set fp=default'.
14854
14855     On some MIPS variants there is a 32-bit mode flag; when this flag
14856     is set, 64-bit instructions generate a trap.  Also, some 32-bit
14857     OSes only save the 32-bit registers on a context switch, so it is
14858     essential never to use the 64-bit registers.
14859
14860'-mgp64'
14861'-mfp64'
14862     Assume that 64-bit registers are available.  This is provided in
14863     the interests of symmetry with '-mgp32' and '-mfp32'.
14864
14865     The '.set gp=64' and '.set fp=64' directives allow the size of
14866     registers to be changed for parts of an object.  The default value
14867     is restored by '.set gp=default' and '.set fp=default'.
14868
14869'-mfpxx'
14870     Make no assumptions about whether 32-bit or 64-bit floating-point
14871     registers are available.  This is provided to support having
14872     modules compatible with either '-mfp32' or '-mfp64'.  This option
14873     can only be used with MIPS II and above.
14874
14875     The '.set fp=xx' directive allows a part of an object to be marked
14876     as not making assumptions about 32-bit or 64-bit FP registers.  The
14877     default value is restored by '.set fp=default'.
14878
14879'-modd-spreg'
14880'-mno-odd-spreg'
14881     Enable use of floating-point operations on odd-numbered
14882     single-precision registers when supported by the ISA. '-mfpxx'
14883     implies '-mno-odd-spreg', otherwise the default is '-modd-spreg'
14884
14885'-mips16'
14886'-no-mips16'
14887     Generate code for the MIPS 16 processor.  This is equivalent to
14888     putting '.module mips16' at the start of the assembly file.
14889     '-no-mips16' turns off this option.
14890
14891'-mmips16e2'
14892'-mno-mips16e2'
14893     Enable the use of MIPS16e2 instructions in MIPS16 mode.  This is
14894     equivalent to putting '.module mips16e2' at the start of the
14895     assembly file.  '-mno-mips16e2' turns off this option.
14896
14897'-mmicromips'
14898'-mno-micromips'
14899     Generate code for the microMIPS processor.  This is equivalent to
14900     putting '.module micromips' at the start of the assembly file.
14901     '-mno-micromips' turns off this option.  This is equivalent to
14902     putting '.module nomicromips' at the start of the assembly file.
14903
14904'-msmartmips'
14905'-mno-smartmips'
14906     Enables the SmartMIPS extensions to the MIPS32 instruction set,
14907     which provides a number of new instructions which target smartcard
14908     and cryptographic applications.  This is equivalent to putting
14909     '.module smartmips' at the start of the assembly file.
14910     '-mno-smartmips' turns off this option.
14911
14912'-mips3d'
14913'-no-mips3d'
14914     Generate code for the MIPS-3D Application Specific Extension.  This
14915     tells the assembler to accept MIPS-3D instructions.  '-no-mips3d'
14916     turns off this option.
14917
14918'-mdmx'
14919'-no-mdmx'
14920     Generate code for the MDMX Application Specific Extension.  This
14921     tells the assembler to accept MDMX instructions.  '-no-mdmx' turns
14922     off this option.
14923
14924'-mdsp'
14925'-mno-dsp'
14926     Generate code for the DSP Release 1 Application Specific Extension.
14927     This tells the assembler to accept DSP Release 1 instructions.
14928     '-mno-dsp' turns off this option.
14929
14930'-mdspr2'
14931'-mno-dspr2'
14932     Generate code for the DSP Release 2 Application Specific Extension.
14933     This option implies '-mdsp'.  This tells the assembler to accept
14934     DSP Release 2 instructions.  '-mno-dspr2' turns off this option.
14935
14936'-mdspr3'
14937'-mno-dspr3'
14938     Generate code for the DSP Release 3 Application Specific Extension.
14939     This option implies '-mdsp' and '-mdspr2'.  This tells the
14940     assembler to accept DSP Release 3 instructions.  '-mno-dspr3' turns
14941     off this option.
14942
14943'-mmt'
14944'-mno-mt'
14945     Generate code for the MT Application Specific Extension.  This
14946     tells the assembler to accept MT instructions.  '-mno-mt' turns off
14947     this option.
14948
14949'-mmcu'
14950'-mno-mcu'
14951     Generate code for the MCU Application Specific Extension.  This
14952     tells the assembler to accept MCU instructions.  '-mno-mcu' turns
14953     off this option.
14954
14955'-mmsa'
14956'-mno-msa'
14957     Generate code for the MIPS SIMD Architecture Extension.  This tells
14958     the assembler to accept MSA instructions.  '-mno-msa' turns off
14959     this option.
14960
14961'-mxpa'
14962'-mno-xpa'
14963     Generate code for the MIPS eXtended Physical Address (XPA)
14964     Extension.  This tells the assembler to accept XPA instructions.
14965     '-mno-xpa' turns off this option.
14966
14967'-mvirt'
14968'-mno-virt'
14969     Generate code for the Virtualization Application Specific
14970     Extension.  This tells the assembler to accept Virtualization
14971     instructions.  '-mno-virt' turns off this option.
14972
14973'-mcrc'
14974'-mno-crc'
14975     Generate code for the cyclic redundancy check (CRC) Application
14976     Specific Extension.  This tells the assembler to accept CRC
14977     instructions.  '-mno-crc' turns off this option.
14978
14979'-mginv'
14980'-mno-ginv'
14981     Generate code for the Global INValidate (GINV) Application Specific
14982     Extension.  This tells the assembler to accept GINV instructions.
14983     '-mno-ginv' turns off this option.
14984
14985'-mloongson-mmi'
14986'-mno-loongson-mmi'
14987     Generate code for the Loongson MultiMedia extensions Instructions
14988     (MMI) Application Specific Extension.  This tells the assembler to
14989     accept MMI instructions.  '-mno-loongson-mmi' turns off this
14990     option.
14991
14992'-mloongson-cam'
14993'-mno-loongson-cam'
14994     Generate code for the Loongson Content Address Memory (CAM)
14995     Application Specific Extension.  This tells the assembler to accept
14996     CAM instructions.  '-mno-loongson-cam' turns off this option.
14997
14998'-mloongson-ext'
14999'-mno-loongson-ext'
15000     Generate code for the Loongson EXTensions (EXT) instructions
15001     Application Specific Extension.  This tells the assembler to accept
15002     EXT instructions.  '-mno-loongson-ext' turns off this option.
15003
15004'-mloongson-ext2'
15005'-mno-loongson-ext2'
15006     Generate code for the Loongson EXTensions R2 (EXT2) instructions
15007     Application Specific Extension.  This tells the assembler to accept
15008     EXT2 instructions.  '-mno-loongson-ext2' turns off this option.
15009
15010'-minsn32'
15011'-mno-insn32'
15012     Only use 32-bit instruction encodings when generating code for the
15013     microMIPS processor.  This option inhibits the use of any 16-bit
15014     instructions.  This is equivalent to putting '.set insn32' at the
15015     start of the assembly file.  '-mno-insn32' turns off this option.
15016     This is equivalent to putting '.set noinsn32' at the start of the
15017     assembly file.  By default '-mno-insn32' is selected, allowing all
15018     instructions to be used.
15019
15020'-mfix7000'
15021'-mno-fix7000'
15022     Cause nops to be inserted if the read of the destination register
15023     of an mfhi or mflo instruction occurs in the following two
15024     instructions.
15025
15026'-mfix-rm7000'
15027'-mno-fix-rm7000'
15028     Cause nops to be inserted if a dmult or dmultu instruction is
15029     followed by a load instruction.
15030
15031'-mfix-loongson2f-jump'
15032'-mno-fix-loongson2f-jump'
15033     Eliminate instruction fetch from outside 256M region to work around
15034     the Loongson2F 'jump' instructions.  Without it, under extreme
15035     cases, the kernel may crash.  The issue has been solved in latest
15036     processor batches, but this fix has no side effect to them.
15037
15038'-mfix-loongson2f-nop'
15039'-mno-fix-loongson2f-nop'
15040     Replace nops by 'or at,at,zero' to work around the Loongson2F 'nop'
15041     errata.  Without it, under extreme cases, the CPU might deadlock.
15042     The issue has been solved in later Loongson2F batches, but this fix
15043     has no side effect to them.
15044
15045'-mfix-loongson3-llsc'
15046'-mno-fix-loongson3-llsc'
15047     Insert 'sync' before 'll' and 'lld' to work around Loongson3 LLSC
15048     errata.  Without it, under extrame cases, the CPU might deadlock.
15049     The default can be controlled by the
15050     '--enable-mips-fix-loongson3-llsc=[yes|no]' configure option.
15051
15052'-mfix-vr4120'
15053'-mno-fix-vr4120'
15054     Insert nops to work around certain VR4120 errata.  This option is
15055     intended to be used on GCC-generated code: it is not designed to
15056     catch all problems in hand-written assembler code.
15057
15058'-mfix-vr4130'
15059'-mno-fix-vr4130'
15060     Insert nops to work around the VR4130 'mflo'/'mfhi' errata.
15061
15062'-mfix-24k'
15063'-mno-fix-24k'
15064     Insert nops to work around the 24K 'eret'/'deret' errata.
15065
15066'-mfix-cn63xxp1'
15067'-mno-fix-cn63xxp1'
15068     Replace 'pref' hints 0 - 4 and 6 - 24 with hint 28 to work around
15069     certain CN63XXP1 errata.
15070
15071'-mfix-r5900'
15072'-mno-fix-r5900'
15073     Do not attempt to schedule the preceding instruction into the delay
15074     slot of a branch instruction placed at the end of a short loop of
15075     six instructions or fewer and always schedule a 'nop' instruction
15076     there instead.  The short loop bug under certain conditions causes
15077     loops to execute only once or twice, due to a hardware bug in the
15078     R5900 chip.
15079
15080'-m4010'
15081'-no-m4010'
15082     Generate code for the LSI R4010 chip.  This tells the assembler to
15083     accept the R4010-specific instructions ('addciu', 'ffc', etc.), and
15084     to not schedule 'nop' instructions around accesses to the 'HI' and
15085     'LO' registers.  '-no-m4010' turns off this option.
15086
15087'-m4650'
15088'-no-m4650'
15089     Generate code for the MIPS R4650 chip.  This tells the assembler to
15090     accept the 'mad' and 'madu' instruction, and to not schedule 'nop'
15091     instructions around accesses to the 'HI' and 'LO' registers.
15092     '-no-m4650' turns off this option.
15093
15094'-m3900'
15095'-no-m3900'
15096'-m4100'
15097'-no-m4100'
15098     For each option '-mNNNN', generate code for the MIPS RNNNN chip.
15099     This tells the assembler to accept instructions specific to that
15100     chip, and to schedule for that chip's hazards.
15101
15102'-march=CPU'
15103     Generate code for a particular MIPS CPU. It is exactly equivalent
15104     to '-mCPU', except that there are more value of CPU understood.
15105     Valid CPU value are:
15106
15107          2000, 3000, 3900, 4000, 4010, 4100, 4111, vr4120, vr4130,
15108          vr4181, 4300, 4400, 4600, 4650, 5000, rm5200, rm5230, rm5231,
15109          rm5261, rm5721, vr5400, vr5500, 6000, rm7000, 8000, rm9000,
15110          10000, 12000, 14000, 16000, 4kc, 4km, 4kp, 4ksc, 4kec, 4kem,
15111          4kep, 4ksd, m4k, m4kp, m14k, m14kc, m14ke, m14kec, 24kc,
15112          24kf2_1, 24kf, 24kf1_1, 24kec, 24kef2_1, 24kef, 24kef1_1,
15113          34kc, 34kf2_1, 34kf, 34kf1_1, 34kn, 74kc, 74kf2_1, 74kf,
15114          74kf1_1, 74kf3_2, 1004kc, 1004kf2_1, 1004kf, 1004kf1_1,
15115          interaptiv, interaptiv-mr2, m5100, m5101, p5600, 5kc, 5kf,
15116          20kc, 25kf, sb1, sb1a, i6400, i6500, p6600, loongson2e,
15117          loongson2f, gs464, gs464e, gs264e, octeon, octeon+, octeon2,
15118          octeon3, xlr, xlp
15119
15120     For compatibility reasons, 'Nx' and 'Bfx' are accepted as synonyms
15121     for 'Nf1_1'.  These values are deprecated.
15122
15123'-mtune=CPU'
15124     Schedule and tune for a particular MIPS CPU. Valid CPU values are
15125     identical to '-march=CPU'.
15126
15127'-mabi=ABI'
15128     Record which ABI the source code uses.  The recognized arguments
15129     are: '32', 'n32', 'o64', '64' and 'eabi'.
15130
15131'-msym32'
15132'-mno-sym32'
15133     Equivalent to adding '.set sym32' or '.set nosym32' to the
15134     beginning of the assembler input.  *Note MIPS Symbol Sizes::.
15135
15136'-nocpp'
15137     This option is ignored.  It is accepted for command-line
15138     compatibility with other assemblers, which use it to turn off C
15139     style preprocessing.  With GNU 'as', there is no need for '-nocpp',
15140     because the GNU assembler itself never runs the C preprocessor.
15141
15142'-msoft-float'
15143'-mhard-float'
15144     Disable or enable floating-point instructions.  Note that by
15145     default floating-point instructions are always allowed even with
15146     CPU targets that don't have support for these instructions.
15147
15148'-msingle-float'
15149'-mdouble-float'
15150     Disable or enable double-precision floating-point operations.  Note
15151     that by default double-precision floating-point operations are
15152     always allowed even with CPU targets that don't have support for
15153     these operations.
15154
15155'--construct-floats'
15156'--no-construct-floats'
15157     The '--no-construct-floats' option disables the construction of
15158     double width floating point constants by loading the two halves of
15159     the value into the two single width floating point registers that
15160     make up the double width register.  This feature is useful if the
15161     processor support the FR bit in its status register, and this bit
15162     is known (by the programmer) to be set.  This bit prevents the
15163     aliasing of the double width register by the single width
15164     registers.
15165
15166     By default '--construct-floats' is selected, allowing construction
15167     of these floating point constants.
15168
15169'--relax-branch'
15170'--no-relax-branch'
15171     The '--relax-branch' option enables the relaxation of out-of-range
15172     branches.  Any branches whose target cannot be reached directly are
15173     converted to a small instruction sequence including an
15174     inverse-condition branch to the physically next instruction, and a
15175     jump to the original target is inserted between the two
15176     instructions.  In PIC code the jump will involve further
15177     instructions for address calculation.
15178
15179     The 'BC1ANY2F', 'BC1ANY2T', 'BC1ANY4F', 'BC1ANY4T', 'BPOSGE32' and
15180     'BPOSGE64' instructions are excluded from relaxation, because they
15181     have no complementing counterparts.  They could be relaxed with the
15182     use of a longer sequence involving another branch, however this has
15183     not been implemented and if their target turns out of reach, they
15184     produce an error even if branch relaxation is enabled.
15185
15186     Also no MIPS16 branches are ever relaxed.
15187
15188     By default '--no-relax-branch' is selected, causing any
15189     out-of-range branches to produce an error.
15190
15191'-mignore-branch-isa'
15192'-mno-ignore-branch-isa'
15193     Ignore branch checks for invalid transitions between ISA modes.
15194
15195     The semantics of branches does not provide for an ISA mode switch,
15196     so in most cases the ISA mode a branch has been encoded for has to
15197     be the same as the ISA mode of the branch's target label.  If the
15198     ISA modes do not match, then such a branch, if taken, will cause
15199     the ISA mode to remain unchanged and instructions that follow will
15200     be executed in the wrong ISA mode causing the program to misbehave
15201     or crash.
15202
15203     In the case of the 'BAL' instruction it may be possible to relax it
15204     to an equivalent 'JALX' instruction so that the ISA mode is
15205     switched at the run time as required.  For other branches no
15206     relaxation is possible and therefore GAS has checks implemented
15207     that verify in branch assembly that the two ISA modes match, and
15208     report an error otherwise so that the problem with code can be
15209     diagnosed at the assembly time rather than at the run time.
15210
15211     However some assembly code, including generated code produced by
15212     some versions of GCC, may incorrectly include branches to data
15213     labels, which appear to require a mode switch but are either dead
15214     or immediately followed by valid instructions encoded for the same
15215     ISA the branch has been encoded for.  While not strictly correct at
15216     the source level such code will execute as intended, so to help
15217     with these cases '-mignore-branch-isa' is supported which disables
15218     ISA mode checks for branches.
15219
15220     By default '-mno-ignore-branch-isa' is selected, causing any
15221     invalid branch requiring a transition between ISA modes to produce
15222     an error.
15223
15224'-mnan=ENCODING'
15225     This option indicates whether the source code uses the IEEE 2008
15226     NaN encoding ('-mnan=2008') or the original MIPS encoding
15227     ('-mnan=legacy').  It is equivalent to adding a '.nan' directive to
15228     the beginning of the source file.  *Note MIPS NaN Encodings::.
15229
15230     '-mnan=legacy' is the default if no '-mnan' option or '.nan'
15231     directive is used.
15232
15233'--trap'
15234'--no-break'
15235     'as' automatically macro expands certain division and
15236     multiplication instructions to check for overflow and division by
15237     zero.  This option causes 'as' to generate code to take a trap
15238     exception rather than a break exception when an error is detected.
15239     The trap instructions are only supported at Instruction Set
15240     Architecture level 2 and higher.
15241
15242'--break'
15243'--no-trap'
15244     Generate code to take a break exception rather than a trap
15245     exception when an error is detected.  This is the default.
15246
15247'-mpdr'
15248'-mno-pdr'
15249     Control generation of '.pdr' sections.  Off by default on IRIX, on
15250     elsewhere.
15251
15252'-mshared'
15253'-mno-shared'
15254     When generating code using the Unix calling conventions (selected
15255     by '-KPIC' or '-mcall_shared'), gas will normally generate code
15256     which can go into a shared library.  The '-mno-shared' option tells
15257     gas to generate code which uses the calling convention, but can not
15258     go into a shared library.  The resulting code is slightly more
15259     efficient.  This option only affects the handling of the '.cpload'
15260     and '.cpsetup' pseudo-ops.
15261
15262
15263File: as.info,  Node: MIPS Macros,  Next: MIPS Symbol Sizes,  Prev: MIPS Options,  Up: MIPS-Dependent
15264
152659.27.2 High-level assembly macros
15266---------------------------------
15267
15268MIPS assemblers have traditionally provided a wider range of
15269instructions than the MIPS architecture itself.  These extra
15270instructions are usually referred to as "macro" instructions (1).
15271
15272   Some MIPS macro instructions extend an underlying architectural
15273instruction while others are entirely new.  An example of the former
15274type is 'and', which allows the third operand to be either a register or
15275an arbitrary immediate value.  Examples of the latter type include
15276'bgt', which branches to the third operand when the first operand is
15277greater than the second operand, and 'ulh', which implements an
15278unaligned 2-byte load.
15279
15280   One of the most common extensions provided by macros is to expand
15281memory offsets to the full address range (32 or 64 bits) and to allow
15282symbolic offsets such as 'my_data + 4' to be used in place of integer
15283constants.  For example, the architectural instruction 'lbu' allows only
15284a signed 16-bit offset, whereas the macro 'lbu' allows code such as 'lbu
15285$4,array+32769($5)'.  The implementation of these symbolic offsets
15286depends on several factors, such as whether the assembler is generating
15287SVR4-style PIC (selected by '-KPIC', *note Assembler options: MIPS
15288Options.), the size of symbols (*note Directives to override the size of
15289symbols: MIPS Symbol Sizes.), and the small data limit (*note
15290Controlling the use of small data accesses: MIPS Small Data.).
15291
15292   Sometimes it is undesirable to have one assembly instruction expand
15293to several machine instructions.  The directive '.set nomacro' tells the
15294assembler to warn when this happens.  '.set macro' restores the default
15295behavior.
15296
15297   Some macro instructions need a temporary register to store
15298intermediate results.  This register is usually '$1', also known as
15299'$at', but it can be changed to any core register REG using '.set
15300at=REG'.  Note that '$at' always refers to '$1' regardless of which
15301register is being used as the temporary register.
15302
15303   Implicit uses of the temporary register in macros could interfere
15304with explicit uses in the assembly code.  The assembler therefore warns
15305whenever it sees an explicit use of the temporary register.  The
15306directive '.set noat' silences this warning while '.set at' restores the
15307default behavior.  It is safe to use '.set noat' while '.set nomacro' is
15308in effect since single-instruction macros never need a temporary
15309register.
15310
15311   Note that while the GNU assembler provides these macros for
15312compatibility, it does not make any attempt to optimize them with the
15313surrounding code.
15314
15315   ---------- Footnotes ----------
15316
15317   (1) The term "macro" is somewhat overloaded here, since these macros
15318have no relation to those defined by '.macro', *note '.macro': Macro.
15319
15320
15321File: as.info,  Node: MIPS Symbol Sizes,  Next: MIPS Small Data,  Prev: MIPS Macros,  Up: MIPS-Dependent
15322
153239.27.3 Directives to override the size of symbols
15324-------------------------------------------------
15325
15326The n64 ABI allows symbols to have any 64-bit value.  Although this
15327provides a great deal of flexibility, it means that some macros have
15328much longer expansions than their 32-bit counterparts.  For example, the
15329non-PIC expansion of 'dla $4,sym' is usually:
15330
15331     lui     $4,%highest(sym)
15332     lui     $1,%hi(sym)
15333     daddiu  $4,$4,%higher(sym)
15334     daddiu  $1,$1,%lo(sym)
15335     dsll32  $4,$4,0
15336     daddu   $4,$4,$1
15337
15338   whereas the 32-bit expansion is simply:
15339
15340     lui     $4,%hi(sym)
15341     daddiu  $4,$4,%lo(sym)
15342
15343   n64 code is sometimes constructed in such a way that all symbolic
15344constants are known to have 32-bit values, and in such cases, it's
15345preferable to use the 32-bit expansion instead of the 64-bit expansion.
15346
15347   You can use the '.set sym32' directive to tell the assembler that,
15348from this point on, all expressions of the form 'SYMBOL' or 'SYMBOL +
15349OFFSET' have 32-bit values.  For example:
15350
15351     .set sym32
15352     dla     $4,sym
15353     lw      $4,sym+16
15354     sw      $4,sym+0x8000($4)
15355
15356   will cause the assembler to treat 'sym', 'sym+16' and 'sym+0x8000' as
1535732-bit values.  The handling of non-symbolic addresses is not affected.
15358
15359   The directive '.set nosym32' ends a '.set sym32' block and reverts to
15360the normal behavior.  It is also possible to change the symbol size
15361using the command-line options '-msym32' and '-mno-sym32'.
15362
15363   These options and directives are always accepted, but at present,
15364they have no effect for anything other than n64.
15365
15366
15367File: as.info,  Node: MIPS Small Data,  Next: MIPS ISA,  Prev: MIPS Symbol Sizes,  Up: MIPS-Dependent
15368
153699.27.4 Controlling the use of small data accesses
15370-------------------------------------------------
15371
15372It often takes several instructions to load the address of a symbol.
15373For example, when 'addr' is a 32-bit symbol, the non-PIC expansion of
15374'dla $4,addr' is usually:
15375
15376     lui     $4,%hi(addr)
15377     daddiu  $4,$4,%lo(addr)
15378
15379   The sequence is much longer when 'addr' is a 64-bit symbol.  *Note
15380Directives to override the size of symbols: MIPS Symbol Sizes.
15381
15382   In order to cut down on this overhead, most embedded MIPS systems set
15383aside a 64-kilobyte "small data" area and guarantee that all data of
15384size N and smaller will be placed in that area.  The limit N is passed
15385to both the assembler and the linker using the command-line option '-G
15386N', *note Assembler options: MIPS Options.  Note that the same value of
15387N must be used when linking and when assembling all input files to the
15388link; any inconsistency could cause a relocation overflow error.
15389
15390   The size of an object in the '.bss' section is set by the '.comm' or
15391'.lcomm' directive that defines it.  The size of an external object may
15392be set with the '.extern' directive.  For example, '.extern sym,4'
15393declares that the object at 'sym' is 4 bytes in length, while leaving
15394'sym' otherwise undefined.
15395
15396   When no '-G' option is given, the default limit is 8 bytes.  The
15397option '-G 0' prevents any data from being automatically classified as
15398small.
15399
15400   It is also possible to mark specific objects as small by putting them
15401in the special sections '.sdata' and '.sbss', which are "small"
15402counterparts of '.data' and '.bss' respectively.  The toolchain will
15403treat such data as small regardless of the '-G' setting.
15404
15405   On startup, systems that support a small data area are expected to
15406initialize register '$28', also known as '$gp', in such a way that small
15407data can be accessed using a 16-bit offset from that register.  For
15408example, when 'addr' is small data, the 'dla $4,addr' instruction above
15409is equivalent to:
15410
15411     daddiu  $4,$28,%gp_rel(addr)
15412
15413   Small data is not supported for SVR4-style PIC.
15414
15415
15416File: as.info,  Node: MIPS ISA,  Next: MIPS assembly options,  Prev: MIPS Small Data,  Up: MIPS-Dependent
15417
154189.27.5 Directives to override the ISA level
15419-------------------------------------------
15420
15421GNU 'as' supports an additional directive to change the MIPS Instruction
15422Set Architecture level on the fly: '.set mipsN'.  N should be a number
15423from 0 to 5, or 32, 32r2, 32r3, 32r5, 32r6, 64, 64r2, 64r3, 64r5 or
1542464r6.  The values other than 0 make the assembler accept instructions
15425for the corresponding ISA level, from that point on in the assembly.
15426'.set mipsN' affects not only which instructions are permitted, but also
15427how certain macros are expanded.  '.set mips0' restores the ISA level to
15428its original level: either the level you selected with command-line
15429options, or the default for your configuration.  You can use this
15430feature to permit specific MIPS III instructions while assembling in 32
15431bit mode.  Use this directive with care!
15432
15433   The '.set arch=CPU' directive provides even finer control.  It
15434changes the effective CPU target and allows the assembler to use
15435instructions specific to a particular CPU. All CPUs supported by the
15436'-march' command-line option are also selectable by this directive.  The
15437original value is restored by '.set arch=default'.
15438
15439   The directive '.set mips16' puts the assembler into MIPS 16 mode, in
15440which it will assemble instructions for the MIPS 16 processor.  Use
15441'.set nomips16' to return to normal 32 bit mode.
15442
15443   Traditional MIPS assemblers do not support this directive.
15444
15445   The directive '.set micromips' puts the assembler into microMIPS
15446mode, in which it will assemble instructions for the microMIPS
15447processor.  Use '.set nomicromips' to return to normal 32 bit mode.
15448
15449   Traditional MIPS assemblers do not support this directive.
15450
15451
15452File: as.info,  Node: MIPS assembly options,  Next: MIPS autoextend,  Prev: MIPS ISA,  Up: MIPS-Dependent
15453
154549.27.6 Directives to control code generation
15455--------------------------------------------
15456
15457The '.module' directive allows command-line options to be set directly
15458from assembly.  The format of the directive matches the '.set' directive
15459but only those options which are relevant to a whole module are
15460supported.  The effect of a '.module' directive is the same as the
15461corresponding command-line option.  Where '.set' directives support
15462returning to a default then the '.module' directives do not as they
15463define the defaults.
15464
15465   These module-level directives must appear first in assembly.
15466
15467   Traditional MIPS assemblers do not support this directive.
15468
15469   The directive '.set insn32' makes the assembler only use 32-bit
15470instruction encodings when generating code for the microMIPS processor.
15471This directive inhibits the use of any 16-bit instructions from that
15472point on in the assembly.  The '.set noinsn32' directive allows 16-bit
15473instructions to be accepted.
15474
15475   Traditional MIPS assemblers do not support this directive.
15476
15477
15478File: as.info,  Node: MIPS autoextend,  Next: MIPS insn,  Prev: MIPS assembly options,  Up: MIPS-Dependent
15479
154809.27.7 Directives for extending MIPS 16 bit instructions
15481--------------------------------------------------------
15482
15483By default, MIPS 16 instructions are automatically extended to 32 bits
15484when necessary.  The directive '.set noautoextend' will turn this off.
15485When '.set noautoextend' is in effect, any 32 bit instruction must be
15486explicitly extended with the '.e' modifier (e.g., 'li.e $4,1000').  The
15487directive '.set autoextend' may be used to once again automatically
15488extend instructions when necessary.
15489
15490   This directive is only meaningful when in MIPS 16 mode.  Traditional
15491MIPS assemblers do not support this directive.
15492
15493
15494File: as.info,  Node: MIPS insn,  Next: MIPS FP ABIs,  Prev: MIPS autoextend,  Up: MIPS-Dependent
15495
154969.27.8 Directive to mark data as an instruction
15497-----------------------------------------------
15498
15499The '.insn' directive tells 'as' that the following data is actually
15500instructions.  This makes a difference in MIPS 16 and microMIPS modes:
15501when loading the address of a label which precedes instructions, 'as'
15502automatically adds 1 to the value, so that jumping to the loaded address
15503will do the right thing.
15504
15505   The '.global' and '.globl' directives supported by 'as' will by
15506default mark the symbol as pointing to a region of data not code.  This
15507means that, for example, any instructions following such a symbol will
15508not be disassembled by 'objdump' as it will regard them as data.  To
15509change this behavior an optional section name can be placed after the
15510symbol name in the '.global' directive.  If this section exists and is
15511known to be a code section, then the symbol will be marked as pointing
15512at code not data.  Ie the syntax for the directive is:
15513
15514   '.global SYMBOL[ SECTION][, SYMBOL[ SECTION]] ...',
15515
15516   Here is a short example:
15517
15518             .global foo .text, bar, baz .data
15519     foo:
15520             nop
15521     bar:
15522             .word 0x0
15523     baz:
15524             .word 0x1
15525
15526
15527
15528File: as.info,  Node: MIPS FP ABIs,  Next: MIPS NaN Encodings,  Prev: MIPS insn,  Up: MIPS-Dependent
15529
155309.27.9 Directives to control the FP ABI
15531---------------------------------------
15532
15533* Menu:
15534
15535* MIPS FP ABI History::                History of FP ABIs
15536* MIPS FP ABI Variants::               Supported FP ABIs
15537* MIPS FP ABI Selection::              Automatic selection of FP ABI
15538* MIPS FP ABI Compatibility::          Linking different FP ABI variants
15539
15540
15541File: as.info,  Node: MIPS FP ABI History,  Next: MIPS FP ABI Variants,  Up: MIPS FP ABIs
15542
155439.27.9.1 History of FP ABIs
15544...........................
15545
15546The MIPS ABIs support a variety of different floating-point extensions
15547where calling-convention and register sizes vary for floating-point
15548data.  The extensions exist to support a wide variety of optional
15549architecture features.  The resulting ABI variants are generally
15550incompatible with each other and must be tracked carefully.
15551
15552   Traditionally the use of an explicit '.gnu_attribute 4, N' directive
15553is used to indicate which ABI is in use by a specific module.  It was
15554then left to the user to ensure that command-line options and the
15555selected ABI were compatible with some potential for inconsistencies.
15556
15557
15558File: as.info,  Node: MIPS FP ABI Variants,  Next: MIPS FP ABI Selection,  Prev: MIPS FP ABI History,  Up: MIPS FP ABIs
15559
155609.27.9.2 Supported FP ABIs
15561..........................
15562
15563The supported floating-point ABI variants are:
15564
15565'0 - No floating-point'
15566     This variant is used to indicate that floating-point is not used
15567     within the module at all and therefore has no impact on the ABI.
15568     This is the default.
15569
15570'1 - Double-precision'
15571     This variant indicates that double-precision support is used.  For
15572     64-bit ABIs this means that 64-bit wide floating-point registers
15573     are required.  For 32-bit ABIs this means that 32-bit wide
15574     floating-point registers are required and double-precision
15575     operations use pairs of registers.
15576
15577'2 - Single-precision'
15578     This variant indicates that single-precision support is used.
15579     Double precision operations will be supported via soft-float
15580     routines.
15581
15582'3 - Soft-float'
15583     This variant indicates that although floating-point support is used
15584     all operations are emulated in software.  This means the ABI is
15585     modified to pass all floating-point data in general-purpose
15586     registers.
15587
15588'4 - Deprecated'
15589     This variant existed as an initial attempt at supporting 64-bit
15590     wide floating-point registers for O32 ABI on a MIPS32r2 CPU. This
15591     has been superseded by 5, 6 and 7.
15592
15593'5 - Double-precision 32-bit CPU, 32-bit or 64-bit FPU'
15594     This variant is used by 32-bit ABIs to indicate that the
15595     floating-point code in the module has been designed to operate
15596     correctly with either 32-bit wide or 64-bit wide floating-point
15597     registers.  Double-precision support is used.  Only O32 currently
15598     supports this variant and requires a minimum architecture of MIPS
15599     II.
15600
15601'6 - Double-precision 32-bit FPU, 64-bit FPU'
15602     This variant is used by 32-bit ABIs to indicate that the
15603     floating-point code in the module requires 64-bit wide
15604     floating-point registers.  Double-precision support is used.  Only
15605     O32 currently supports this variant and requires a minimum
15606     architecture of MIPS32r2.
15607
15608'7 - Double-precision compat 32-bit FPU, 64-bit FPU'
15609     This variant is used by 32-bit ABIs to indicate that the
15610     floating-point code in the module requires 64-bit wide
15611     floating-point registers.  Double-precision support is used.  This
15612     differs from the previous ABI as it restricts use of odd-numbered
15613     single-precision registers.  Only O32 currently supports this
15614     variant and requires a minimum architecture of MIPS32r2.
15615
15616
15617File: as.info,  Node: MIPS FP ABI Selection,  Next: MIPS FP ABI Compatibility,  Prev: MIPS FP ABI Variants,  Up: MIPS FP ABIs
15618
156199.27.9.3 Automatic selection of FP ABI
15620......................................
15621
15622In order to simplify and add safety to the process of selecting the
15623correct floating-point ABI, the assembler will automatically infer the
15624correct '.gnu_attribute 4, N' directive based on command-line options
15625and '.module' overrides.  Where an explicit '.gnu_attribute 4, N'
15626directive has been seen then a warning will be raised if it does not
15627match an inferred setting.
15628
15629   The floating-point ABI is inferred as follows.  If '-msoft-float' has
15630been used the module will be marked as soft-float.  If '-msingle-float'
15631has been used then the module will be marked as single-precision.  The
15632remaining ABIs are then selected based on the FP register width.
15633Double-precision is selected if the width of GP and FP registers match
15634and the special double-precision variants for 32-bit ABIs are then
15635selected depending on '-mfpxx', '-mfp64' and '-mno-odd-spreg'.
15636
15637
15638File: as.info,  Node: MIPS FP ABI Compatibility,  Prev: MIPS FP ABI Selection,  Up: MIPS FP ABIs
15639
156409.27.9.4 Linking different FP ABI variants
15641..........................................
15642
15643Modules using the default FP ABI (no floating-point) can be linked with
15644any other (singular) FP ABI variant.
15645
15646   Special compatibility support exists for O32 with the four
15647double-precision FP ABI variants.  The '-mfpxx' FP ABI is specifically
15648designed to be compatible with the standard double-precision ABI and the
15649'-mfp64' FP ABIs.  This makes it desirable for O32 modules to be built
15650as '-mfpxx' to ensure the maximum compatibility with other modules
15651produced for more specific needs.  The only FP ABIs which cannot be
15652linked together are the standard double-precision ABI and the full
15653'-mfp64' ABI with '-modd-spreg'.
15654
15655
15656File: as.info,  Node: MIPS NaN Encodings,  Next: MIPS Option Stack,  Prev: MIPS FP ABIs,  Up: MIPS-Dependent
15657
156589.27.10 Directives to record which NaN encoding is being used
15659-------------------------------------------------------------
15660
15661The IEEE 754 floating-point standard defines two types of not-a-number
15662(NaN) data: "signalling" NaNs and "quiet" NaNs.  The original version of
15663the standard did not specify how these two types should be
15664distinguished.  Most implementations followed the i387 model, in which
15665the first bit of the significand is set for quiet NaNs and clear for
15666signalling NaNs.  However, the original MIPS implementation assigned the
15667opposite meaning to the bit, so that it was set for signalling NaNs and
15668clear for quiet NaNs.
15669
15670   The 2008 revision of the standard formally suggested the i387 choice
15671and as from Sep 2012 the current release of the MIPS architecture
15672therefore optionally supports that form.  Code that uses one NaN
15673encoding would usually be incompatible with code that uses the other NaN
15674encoding, so MIPS ELF objects have a flag ('EF_MIPS_NAN2008') to record
15675which encoding is being used.
15676
15677   Assembly files can use the '.nan' directive to select between the two
15678encodings.  '.nan 2008' says that the assembly file uses the IEEE
15679754-2008 encoding while '.nan legacy' says that the file uses the
15680original MIPS encoding.  If several '.nan' directives are given, the
15681final setting is the one that is used.
15682
15683   The command-line options '-mnan=legacy' and '-mnan=2008' can be used
15684instead of '.nan legacy' and '.nan 2008' respectively.  However, any
15685'.nan' directive overrides the command-line setting.
15686
15687   '.nan legacy' is the default if no '.nan' directive or '-mnan' option
15688is given.
15689
15690   Note that GNU 'as' does not produce NaNs itself and therefore these
15691directives do not affect code generation.  They simply control the
15692setting of the 'EF_MIPS_NAN2008' flag.
15693
15694   Traditional MIPS assemblers do not support these directives.
15695
15696
15697File: as.info,  Node: MIPS Option Stack,  Next: MIPS ASE Instruction Generation Overrides,  Prev: MIPS NaN Encodings,  Up: MIPS-Dependent
15698
156999.27.11 Directives to save and restore options
15700----------------------------------------------
15701
15702The directives '.set push' and '.set pop' may be used to save and
15703restore the current settings for all the options which are controlled by
15704'.set'.  The '.set push' directive saves the current settings on a
15705stack.  The '.set pop' directive pops the stack and restores the
15706settings.
15707
15708   These directives can be useful inside an macro which must change an
15709option such as the ISA level or instruction reordering but does not want
15710to change the state of the code which invoked the macro.
15711
15712   Traditional MIPS assemblers do not support these directives.
15713
15714
15715File: as.info,  Node: MIPS ASE Instruction Generation Overrides,  Next: MIPS Floating-Point,  Prev: MIPS Option Stack,  Up: MIPS-Dependent
15716
157179.27.12 Directives to control generation of MIPS ASE instructions
15718-----------------------------------------------------------------
15719
15720The directive '.set mips3d' makes the assembler accept instructions from
15721the MIPS-3D Application Specific Extension from that point on in the
15722assembly.  The '.set nomips3d' directive prevents MIPS-3D instructions
15723from being accepted.
15724
15725   The directive '.set smartmips' makes the assembler accept
15726instructions from the SmartMIPS Application Specific Extension to the
15727MIPS32 ISA from that point on in the assembly.  The '.set nosmartmips'
15728directive prevents SmartMIPS instructions from being accepted.
15729
15730   The directive '.set mdmx' makes the assembler accept instructions
15731from the MDMX Application Specific Extension from that point on in the
15732assembly.  The '.set nomdmx' directive prevents MDMX instructions from
15733being accepted.
15734
15735   The directive '.set dsp' makes the assembler accept instructions from
15736the DSP Release 1 Application Specific Extension from that point on in
15737the assembly.  The '.set nodsp' directive prevents DSP Release 1
15738instructions from being accepted.
15739
15740   The directive '.set dspr2' makes the assembler accept instructions
15741from the DSP Release 2 Application Specific Extension from that point on
15742in the assembly.  This directive implies '.set dsp'.  The '.set nodspr2'
15743directive prevents DSP Release 2 instructions from being accepted.
15744
15745   The directive '.set dspr3' makes the assembler accept instructions
15746from the DSP Release 3 Application Specific Extension from that point on
15747in the assembly.  This directive implies '.set dsp' and '.set dspr2'.
15748The '.set nodspr3' directive prevents DSP Release 3 instructions from
15749being accepted.
15750
15751   The directive '.set mt' makes the assembler accept instructions from
15752the MT Application Specific Extension from that point on in the
15753assembly.  The '.set nomt' directive prevents MT instructions from being
15754accepted.
15755
15756   The directive '.set mcu' makes the assembler accept instructions from
15757the MCU Application Specific Extension from that point on in the
15758assembly.  The '.set nomcu' directive prevents MCU instructions from
15759being accepted.
15760
15761   The directive '.set msa' makes the assembler accept instructions from
15762the MIPS SIMD Architecture Extension from that point on in the assembly.
15763The '.set nomsa' directive prevents MSA instructions from being
15764accepted.
15765
15766   The directive '.set virt' makes the assembler accept instructions
15767from the Virtualization Application Specific Extension from that point
15768on in the assembly.  The '.set novirt' directive prevents Virtualization
15769instructions from being accepted.
15770
15771   The directive '.set xpa' makes the assembler accept instructions from
15772the XPA Extension from that point on in the assembly.  The '.set noxpa'
15773directive prevents XPA instructions from being accepted.
15774
15775   The directive '.set mips16e2' makes the assembler accept instructions
15776from the MIPS16e2 Application Specific Extension from that point on in
15777the assembly, whenever in MIPS16 mode.  The '.set nomips16e2' directive
15778prevents MIPS16e2 instructions from being accepted, in MIPS16 mode.
15779Neither directive affects the state of MIPS16 mode being active itself
15780which has separate controls.
15781
15782   The directive '.set crc' makes the assembler accept instructions from
15783the CRC Extension from that point on in the assembly.  The '.set nocrc'
15784directive prevents CRC instructions from being accepted.
15785
15786   The directive '.set ginv' makes the assembler accept instructions
15787from the GINV Extension from that point on in the assembly.  The '.set
15788noginv' directive prevents GINV instructions from being accepted.
15789
15790   The directive '.set loongson-mmi' makes the assembler accept
15791instructions from the MMI Extension from that point on in the assembly.
15792The '.set noloongson-mmi' directive prevents MMI instructions from being
15793accepted.
15794
15795   The directive '.set loongson-cam' makes the assembler accept
15796instructions from the Loongson CAM from that point on in the assembly.
15797The '.set noloongson-cam' directive prevents Loongson CAM instructions
15798from being accepted.
15799
15800   The directive '.set loongson-ext' makes the assembler accept
15801instructions from the Loongson EXT from that point on in the assembly.
15802The '.set noloongson-ext' directive prevents Loongson EXT instructions
15803from being accepted.
15804
15805   The directive '.set loongson-ext2' makes the assembler accept
15806instructions from the Loongson EXT2 from that point on in the assembly.
15807This directive implies '.set loognson-ext'.  The '.set noloongson-ext2'
15808directive prevents Loongson EXT2 instructions from being accepted.
15809
15810   Traditional MIPS assemblers do not support these directives.
15811
15812
15813File: as.info,  Node: MIPS Floating-Point,  Next: MIPS Syntax,  Prev: MIPS ASE Instruction Generation Overrides,  Up: MIPS-Dependent
15814
158159.27.13 Directives to override floating-point options
15816-----------------------------------------------------
15817
15818The directives '.set softfloat' and '.set hardfloat' provide finer
15819control of disabling and enabling float-point instructions.  These
15820directives always override the default (that hard-float instructions are
15821accepted) or the command-line options ('-msoft-float' and
15822'-mhard-float').
15823
15824   The directives '.set singlefloat' and '.set doublefloat' provide
15825finer control of disabling and enabling double-precision float-point
15826operations.  These directives always override the default (that
15827double-precision operations are accepted) or the command-line options
15828('-msingle-float' and '-mdouble-float').
15829
15830   Traditional MIPS assemblers do not support these directives.
15831
15832
15833File: as.info,  Node: MIPS Syntax,  Prev: MIPS Floating-Point,  Up: MIPS-Dependent
15834
158359.27.14 Syntactical considerations for the MIPS assembler
15836---------------------------------------------------------
15837
15838* Menu:
15839
15840* MIPS-Chars::                Special Characters
15841
15842
15843File: as.info,  Node: MIPS-Chars,  Up: MIPS Syntax
15844
158459.27.14.1 Special Characters
15846............................
15847
15848The presence of a '#' on a line indicates the start of a comment that
15849extends to the end of the current line.
15850
15851   If a '#' appears as the first character of a line, the whole line is
15852treated as a comment, but in this case the line can also be a logical
15853line number directive (*note Comments::) or a preprocessor control
15854command (*note Preprocessing::).
15855
15856   The ';' character can be used to separate statements on the same
15857line.
15858
15859
15860File: as.info,  Node: MMIX-Dependent,  Next: MSP430-Dependent,  Prev: MIPS-Dependent,  Up: Machine Dependencies
15861
158629.28 MMIX Dependent Features
15863============================
15864
15865* Menu:
15866
15867* MMIX-Opts::              Command-line Options
15868* MMIX-Expand::            Instruction expansion
15869* MMIX-Syntax::            Syntax
15870* MMIX-mmixal::		   Differences to 'mmixal' syntax and semantics
15871
15872
15873File: as.info,  Node: MMIX-Opts,  Next: MMIX-Expand,  Up: MMIX-Dependent
15874
158759.28.1 Command-line Options
15876---------------------------
15877
15878The MMIX version of 'as' has some machine-dependent options.
15879
15880   When '--fixed-special-register-names' is specified, only the register
15881names specified in *note MMIX-Regs:: are recognized in the instructions
15882'PUT' and 'GET'.
15883
15884   You can use the '--globalize-symbols' to make all symbols global.
15885This option is useful when splitting up a 'mmixal' program into several
15886files.
15887
15888   The '--gnu-syntax' turns off most syntax compatibility with 'mmixal'.
15889Its usability is currently doubtful.
15890
15891   The '--relax' option is not fully supported, but will eventually make
15892the object file prepared for linker relaxation.
15893
15894   If you want to avoid inadvertently calling a predefined symbol and
15895would rather get an error, for example when using 'as' with a compiler
15896or other machine-generated code, specify '--no-predefined-syms'.  This
15897turns off built-in predefined definitions of all such symbols, including
15898rounding-mode symbols, segment symbols, 'BIT' symbols, and 'TRAP'
15899symbols used in 'mmix' "system calls".  It also turns off predefined
15900special-register names, except when used in 'PUT' and 'GET'
15901instructions.
15902
15903   By default, some instructions are expanded to fit the size of the
15904operand or an external symbol (*note MMIX-Expand::).  By passing
15905'--no-expand', no such expansion will be done, instead causing errors at
15906link time if the operand does not fit.
15907
15908   The 'mmixal' documentation (*note mmixsite::) specifies that global
15909registers allocated with the 'GREG' directive (*note MMIX-greg::) and
15910initialized to the same non-zero value, will refer to the same global
15911register.  This isn't strictly enforceable in 'as' since the final
15912addresses aren't known until link-time, but it will do an effort unless
15913the '--no-merge-gregs' option is specified.  (Register merging isn't yet
15914implemented in 'ld'.)
15915
15916   'as' will warn every time it expands an instruction to fit an operand
15917unless the option '-x' is specified.  It is believed that this behaviour
15918is more useful than just mimicking 'mmixal''s behaviour, in which
15919instructions are only expanded if the '-x' option is specified, and
15920assembly fails otherwise, when an instruction needs to be expanded.  It
15921needs to be kept in mind that 'mmixal' is both an assembler and linker,
15922while 'as' will expand instructions that at link stage can be
15923contracted.  (Though linker relaxation isn't yet implemented in 'ld'.)
15924The option '-x' also implies '--linker-allocated-gregs'.
15925
15926   If instruction expansion is enabled, 'as' can expand a 'PUSHJ'
15927instruction into a series of instructions.  The shortest expansion is to
15928not expand it, but just mark the call as redirectable to a stub, which
15929'ld' creates at link-time, but only if the original 'PUSHJ' instruction
15930is found not to reach the target.  The stub consists of the necessary
15931instructions to form a jump to the target.  This happens if 'as' can
15932assert that the 'PUSHJ' instruction can reach such a stub.  The option
15933'--no-pushj-stubs' disables this shorter expansion, and the longer
15934series of instructions is then created at assembly-time.  The option
15935'--no-stubs' is a synonym, intended for compatibility with future
15936releases, where generation of stubs for other instructions may be
15937implemented.
15938
15939   Usually a two-operand-expression (*note GREG-base::) without a
15940matching 'GREG' directive is treated as an error by 'as'.  When the
15941option '--linker-allocated-gregs' is in effect, they are instead passed
15942through to the linker, which will allocate as many global registers as
15943is needed.
15944
15945
15946File: as.info,  Node: MMIX-Expand,  Next: MMIX-Syntax,  Prev: MMIX-Opts,  Up: MMIX-Dependent
15947
159489.28.2 Instruction expansion
15949----------------------------
15950
15951When 'as' encounters an instruction with an operand that is either not
15952known or does not fit the operand size of the instruction, 'as' (and
15953'ld') will expand the instruction into a sequence of instructions
15954semantically equivalent to the operand fitting the instruction.
15955Expansion will take place for the following instructions:
15956
15957'GETA'
15958     Expands to a sequence of four instructions: 'SETL', 'INCML',
15959     'INCMH' and 'INCH'.  The operand must be a multiple of four.
15960Conditional branches
15961     A branch instruction is turned into a branch with the complemented
15962     condition and prediction bit over five instructions; four
15963     instructions setting '$255' to the operand value, which like with
15964     'GETA' must be a multiple of four, and a final 'GO $255,$255,0'.
15965'PUSHJ'
15966     Similar to expansion for conditional branches; four instructions
15967     set '$255' to the operand value, followed by a 'PUSHGO
15968     $255,$255,0'.
15969'JMP'
15970     Similar to conditional branches and 'PUSHJ'.  The final instruction
15971     is 'GO $255,$255,0'.
15972
15973   The linker 'ld' is expected to shrink these expansions for code
15974assembled with '--relax' (though not currently implemented).
15975
15976
15977File: as.info,  Node: MMIX-Syntax,  Next: MMIX-mmixal,  Prev: MMIX-Expand,  Up: MMIX-Dependent
15978
159799.28.3 Syntax
15980-------------
15981
15982The assembly syntax is supposed to be upward compatible with that
15983described in Sections 1.3 and 1.4 of 'The Art of Computer Programming,
15984Volume 1'.  Draft versions of those chapters as well as other MMIX
15985information is located at
15986<http://www-cs-faculty.stanford.edu/~knuth/mmix-news.html>.  Most code
15987examples from the mmixal package located there should work unmodified
15988when assembled and linked as single files, with a few noteworthy
15989exceptions (*note MMIX-mmixal::).
15990
15991   Before an instruction is emitted, the current location is aligned to
15992the next four-byte boundary.  If a label is defined at the beginning of
15993the line, its value will be the aligned value.
15994
15995   In addition to the traditional hex-prefix '0x', a hexadecimal number
15996can also be specified by the prefix character '#'.
15997
15998   After all operands to an MMIX instruction or directive have been
15999specified, the rest of the line is ignored, treated as a comment.
16000
16001* Menu:
16002
16003* MMIX-Chars::		        Special Characters
16004* MMIX-Symbols::		Symbols
16005* MMIX-Regs::			Register Names
16006* MMIX-Pseudos::		Assembler Directives
16007
16008
16009File: as.info,  Node: MMIX-Chars,  Next: MMIX-Symbols,  Up: MMIX-Syntax
16010
160119.28.3.1 Special Characters
16012...........................
16013
16014The characters '*' and '#' are line comment characters; each start a
16015comment at the beginning of a line, but only at the beginning of a line.
16016A '#' prefixes a hexadecimal number if found elsewhere on a line.  If a
16017'#' appears at the start of a line the whole line is treated as a
16018comment, but the line can also act as a logical line number directive
16019(*note Comments::) or a preprocessor control command (*note
16020Preprocessing::).
16021
16022   Two other characters, '%' and '!', each start a comment anywhere on
16023the line.  Thus you can't use the 'modulus' and 'not' operators in
16024expressions normally associated with these two characters.
16025
16026   A ';' is a line separator, treated as a new-line, so separate
16027instructions can be specified on a single line.
16028
16029
16030File: as.info,  Node: MMIX-Symbols,  Next: MMIX-Regs,  Prev: MMIX-Chars,  Up: MMIX-Syntax
16031
160329.28.3.2 Symbols
16033................
16034
16035The character ':' is permitted in identifiers.  There are two exceptions
16036to it being treated as any other symbol character: if a symbol begins
16037with ':', it means that the symbol is in the global namespace and that
16038the current prefix should not be prepended to that symbol (*note
16039MMIX-prefix::).  The ':' is then not considered part of the symbol.  For
16040a symbol in the label position (first on a line), a ':' at the end of a
16041symbol is silently stripped off.  A label is permitted, but not
16042required, to be followed by a ':', as with many other assembly formats.
16043
16044   The character '@' in an expression, is a synonym for '.', the current
16045location.
16046
16047   In addition to the common forward and backward local symbol formats
16048(*note Symbol Names::), they can be specified with upper-case 'B' and
16049'F', as in '8B' and '9F'.  A local label defined for the current
16050position is written with a 'H' appended to the number:
16051     3H LDB $0,$1,2
16052   This and traditional local-label formats cannot be mixed: a label
16053must be defined and referred to using the same format.
16054
16055   There's a minor caveat: just as for the ordinary local symbols, the
16056local symbols are translated into ordinary symbols using control
16057characters are to hide the ordinal number of the symbol.  Unfortunately,
16058these symbols are not translated back in error messages.  Thus you may
16059see confusing error messages when local symbols are used.  Control
16060characters '\003' (control-C) and '\004' (control-D) are used for the
16061MMIX-specific local-symbol syntax.
16062
16063   The symbol 'Main' is handled specially; it is always global.
16064
16065   By defining the symbols '__.MMIX.start..text' and
16066'__.MMIX.start..data', the address of respectively the '.text' and
16067'.data' segments of the final program can be defined, though when
16068linking more than one object file, the code or data in the object file
16069containing the symbol is not guaranteed to be start at that position;
16070just the final executable.  *Note MMIX-loc::.
16071
16072
16073File: as.info,  Node: MMIX-Regs,  Next: MMIX-Pseudos,  Prev: MMIX-Symbols,  Up: MMIX-Syntax
16074
160759.28.3.3 Register names
16076.......................
16077
16078Local and global registers are specified as '$0' to '$255'.  The
16079recognized special register names are 'rJ', 'rA', 'rB', 'rC', 'rD',
16080'rE', 'rF', 'rG', 'rH', 'rI', 'rK', 'rL', 'rM', 'rN', 'rO', 'rP', 'rQ',
16081'rR', 'rS', 'rT', 'rU', 'rV', 'rW', 'rX', 'rY', 'rZ', 'rBB', 'rTT',
16082'rWW', 'rXX', 'rYY' and 'rZZ'.  A leading ':' is optional for special
16083register names.
16084
16085   Local and global symbols can be equated to register names and used in
16086place of ordinary registers.
16087
16088   Similarly for special registers, local and global symbols can be
16089used.  Also, symbols equated from numbers and constant expressions are
16090allowed in place of a special register, except when either of the
16091options '--no-predefined-syms' and '--fixed-special-register-names' are
16092specified.  Then only the special register names above are allowed for
16093the instructions having a special register operand; 'GET' and 'PUT'.
16094
16095
16096File: as.info,  Node: MMIX-Pseudos,  Prev: MMIX-Regs,  Up: MMIX-Syntax
16097
160989.28.3.4 Assembler Directives
16099.............................
16100
16101'LOC'
16102
16103     The 'LOC' directive sets the current location to the value of the
16104     operand field, which may include changing sections.  If the operand
16105     is a constant, the section is set to either '.data' if the value is
16106     '0x2000000000000000' or larger, else it is set to '.text'.  Within
16107     a section, the current location may only be changed to
16108     monotonically higher addresses.  A LOC expression must be a
16109     previously defined symbol or a "pure" constant.
16110
16111     An example, which sets the label PREV to the current location, and
16112     updates the current location to eight bytes forward:
16113          prev LOC @+8
16114
16115     When a LOC has a constant as its operand, a symbol
16116     '__.MMIX.start..text' or '__.MMIX.start..data' is defined depending
16117     on the address as mentioned above.  Each such symbol is interpreted
16118     as special by the linker, locating the section at that address.
16119     Note that if multiple files are linked, the first object file with
16120     that section will be mapped to that address (not necessarily the
16121     file with the LOC definition).
16122
16123'LOCAL'
16124
16125     Example:
16126           LOCAL external_symbol
16127           LOCAL 42
16128           .local asymbol
16129
16130     This directive-operation generates a link-time assertion that the
16131     operand does not correspond to a global register.  The operand is
16132     an expression that at link-time resolves to a register symbol or a
16133     number.  A number is treated as the register having that number.
16134     There is one restriction on the use of this directive: the
16135     pseudo-directive must be placed in a section with contents, code or
16136     data.
16137
16138'IS'
16139
16140     The 'IS' directive:
16141          asymbol IS an_expression
16142     sets the symbol 'asymbol' to 'an_expression'.  A symbol may not be
16143     set more than once using this directive.  Local labels may be set
16144     using this directive, for example:
16145          5H IS @+4
16146
16147'GREG'
16148
16149     This directive reserves a global register, gives it an initial
16150     value and optionally gives it a symbolic name.  Some examples:
16151
16152          areg GREG
16153          breg GREG data_value
16154               GREG data_buffer
16155               .greg creg, another_data_value
16156
16157     The symbolic register name can be used in place of a (non-special)
16158     register.  If a value isn't provided, it defaults to zero.  Unless
16159     the option '--no-merge-gregs' is specified, non-zero registers
16160     allocated with this directive may be eliminated by 'as'; another
16161     register with the same value used in its place.  Any of the
16162     instructions 'CSWAP', 'GO', 'LDA', 'LDBU', 'LDB', 'LDHT', 'LDOU',
16163     'LDO', 'LDSF', 'LDTU', 'LDT', 'LDUNC', 'LDVTS', 'LDWU', 'LDW',
16164     'PREGO', 'PRELD', 'PREST', 'PUSHGO', 'STBU', 'STB', 'STCO', 'STHT',
16165     'STOU', 'STSF', 'STTU', 'STT', 'STUNC', 'SYNCD', 'SYNCID', can have
16166     a value nearby an initial value in place of its second and third
16167     operands.  Here, "nearby" is defined as within the range 0...255
16168     from the initial value of such an allocated register.
16169
16170          buffer1 BYTE 0,0,0,0,0
16171          buffer2 BYTE 0,0,0,0,0
16172           ...
16173           GREG buffer1
16174           LDOU $42,buffer2
16175     In the example above, the 'Y' field of the 'LDOUI' instruction
16176     (LDOU with a constant Z) will be replaced with the global register
16177     allocated for 'buffer1', and the 'Z' field will have the value 5,
16178     the offset from 'buffer1' to 'buffer2'.  The result is equivalent
16179     to this code:
16180          buffer1 BYTE 0,0,0,0,0
16181          buffer2 BYTE 0,0,0,0,0
16182           ...
16183          tmpreg GREG buffer1
16184           LDOU $42,tmpreg,(buffer2-buffer1)
16185
16186     Global registers allocated with this directive are allocated in
16187     order higher-to-lower within a file.  Other than that, the exact
16188     order of register allocation and elimination is undefined.  For
16189     example, the order is undefined when more than one file with such
16190     directives are linked together.  With the options '-x' and
16191     '--linker-allocated-gregs', 'GREG' directives for two-operand cases
16192     like the one mentioned above can be omitted.  Sufficient global
16193     registers will then be allocated by the linker.
16194
16195'BYTE'
16196
16197     The 'BYTE' directive takes a series of operands separated by a
16198     comma.  If an operand is a string (*note Strings::), each character
16199     of that string is emitted as a byte.  Other operands must be
16200     constant expressions without forward references, in the range
16201     0...255.  If you need operands having expressions with forward
16202     references, use '.byte' (*note Byte::).  An operand can be omitted,
16203     defaulting to a zero value.
16204
16205'WYDE'
16206'TETRA'
16207'OCTA'
16208
16209     The directives 'WYDE', 'TETRA' and 'OCTA' emit constants of two,
16210     four and eight bytes size respectively.  Before anything else
16211     happens for the directive, the current location is aligned to the
16212     respective constant-size boundary.  If a label is defined at the
16213     beginning of the line, its value will be that after the alignment.
16214     A single operand can be omitted, defaulting to a zero value emitted
16215     for the directive.  Operands can be expressed as strings (*note
16216     Strings::), in which case each character in the string is emitted
16217     as a separate constant of the size indicated by the directive.
16218
16219'PREFIX'
16220
16221     The 'PREFIX' directive sets a symbol name prefix to be prepended to
16222     all symbols (except local symbols, *note MMIX-Symbols::), that are
16223     not prefixed with ':', until the next 'PREFIX' directive.  Such
16224     prefixes accumulate.  For example,
16225           PREFIX a
16226           PREFIX b
16227          c IS 0
16228     defines a symbol 'abc' with the value 0.
16229
16230'BSPEC'
16231'ESPEC'
16232
16233     A pair of 'BSPEC' and 'ESPEC' directives delimit a section of
16234     special contents (without specified semantics).  Example:
16235           BSPEC 42
16236           TETRA 1,2,3
16237           ESPEC
16238     The single operand to 'BSPEC' must be number in the range 0...255.
16239     The 'BSPEC' number 80 is used by the GNU binutils implementation.
16240
16241
16242File: as.info,  Node: MMIX-mmixal,  Prev: MMIX-Syntax,  Up: MMIX-Dependent
16243
162449.28.4 Differences to 'mmixal'
16245------------------------------
16246
16247The binutils 'as' and 'ld' combination has a few differences in function
16248compared to 'mmixal' (*note mmixsite::).
16249
16250   The replacement of a symbol with a GREG-allocated register (*note
16251GREG-base::) is not handled the exactly same way in 'as' as in 'mmixal'.
16252This is apparent in the 'mmixal' example file 'inout.mms', where
16253different registers with different offsets, eventually yielding the same
16254address, are used in the first instruction.  This type of difference
16255should however not affect the function of any program unless it has
16256specific assumptions about the allocated register number.
16257
16258   Line numbers (in the 'mmo' object format) are currently not
16259supported.
16260
16261   Expression operator precedence is not that of mmixal: operator
16262precedence is that of the C programming language.  It's recommended to
16263use parentheses to explicitly specify wanted operator precedence
16264whenever more than one type of operators are used.
16265
16266   The serialize unary operator '&', the fractional division operator
16267'//', the logical not operator '!' and the modulus operator '%' are not
16268available.
16269
16270   Symbols are not global by default, unless the option
16271'--globalize-symbols' is passed.  Use the '.global' directive to
16272globalize symbols (*note Global::).
16273
16274   Operand syntax is a bit stricter with 'as' than 'mmixal'.  For
16275example, you can't say 'addu 1,2,3', instead you must write 'addu
16276$1,$2,3'.
16277
16278   You can't LOC to a lower address than those already visited (i.e.,
16279"backwards").
16280
16281   A LOC directive must come before any emitted code.
16282
16283   Predefined symbols are visible as file-local symbols after use.  (In
16284the ELF file, that is--the linked mmo file has no notion of a file-local
16285symbol.)
16286
16287   Some mapping of constant expressions to sections in LOC expressions
16288is attempted, but that functionality is easily confused and should be
16289avoided unless compatibility with 'mmixal' is required.  A LOC
16290expression to '0x2000000000000000' or higher, maps to the '.data'
16291section and lower addresses map to the '.text' section (*note
16292MMIX-loc::).
16293
16294   The code and data areas are each contiguous.  Sparse programs with
16295far-away LOC directives will take up the same amount of space as a
16296contiguous program with zeros filled in the gaps between the LOC
16297directives.  If you need sparse programs, you might try and get the
16298wanted effect with a linker script and splitting up the code parts into
16299sections (*note Section::).  Assembly code for this, to be compatible
16300with 'mmixal', would look something like:
16301      .if 0
16302      LOC away_expression
16303      .else
16304      .section away,"ax"
16305      .fi
16306   'as' will not execute the LOC directive and 'mmixal' ignores the
16307lines with '.'.  This construct can be used generally to help
16308compatibility.
16309
16310   Symbols can't be defined twice-not even to the same value.
16311
16312   Instruction mnemonics are recognized case-insensitive, though the
16313'IS' and 'GREG' pseudo-operations must be specified in upper-case
16314characters.
16315
16316   There's no unicode support.
16317
16318   The following is a list of programs in 'mmix.tar.gz', available at
16319<http://www-cs-faculty.stanford.edu/~knuth/mmix-news.html>, last checked
16320with the version dated 2001-08-25 (md5sum
16321c393470cfc86fac040487d22d2bf0172) that assemble with 'mmixal' but do not
16322assemble with 'as':
16323
16324'silly.mms'
16325     LOC to a previous address.
16326'sim.mms'
16327     Redefines symbol 'Done'.
16328'test.mms'
16329     Uses the serial operator '&'.
16330
16331
16332File: as.info,  Node: MSP430-Dependent,  Next: NDS32-Dependent,  Prev: MMIX-Dependent,  Up: Machine Dependencies
16333
163349.29 MSP 430 Dependent Features
16335===============================
16336
16337* Menu:
16338
16339* MSP430 Options::              Options
16340* MSP430 Syntax::               Syntax
16341* MSP430 Floating Point::       Floating Point
16342* MSP430 Directives::           MSP 430 Machine Directives
16343* MSP430 Opcodes::              Opcodes
16344* MSP430 Profiling Capability::	Profiling Capability
16345
16346
16347File: as.info,  Node: MSP430 Options,  Next: MSP430 Syntax,  Up: MSP430-Dependent
16348
163499.29.1 Options
16350--------------
16351
16352'-mmcu'
16353     selects the mcu architecture.  If the architecture is 430Xv2 then
16354     this also enables NOP generation unless the '-mN' is also
16355     specified.
16356
16357'-mcpu'
16358     selects the cpu architecture.  If the architecture is 430Xv2 then
16359     this also enables NOP generation unless the '-mN' is also
16360     specified.
16361
16362'-msilicon-errata=NAME[,NAME...]'
16363     Implements a fixup for named silicon errata.  Multiple silicon
16364     errata can be specified by multiple uses of the '-msilicon-errata'
16365     option and/or by including the errata names, separated by commas,
16366     on an individual '-msilicon-errata' option.  Errata names currently
16367     recognised by the assembler are:
16368
16369     'cpu4'
16370          'PUSH #4' and 'PUSH #8' need longer encodings on the MSP430.
16371          This option is enabled by default, and cannot be disabled.
16372     'cpu8'
16373          Do not set the 'SP' to an odd value.
16374     'cpu11'
16375          Do not update the 'SR' and the 'PC' in the same instruction.
16376     'cpu12'
16377          Do not use the 'PC' in a 'CMP' or 'BIT' instruction.
16378     'cpu13'
16379          Do not use an arithmetic instruction to modify the 'SR'.
16380     'cpu19'
16381          Insert 'NOP' after 'CPUOFF'.
16382
16383'-msilicon-errata-warn=NAME[,NAME...]'
16384     Like the '-msilicon-errata' option except that instead of fixing
16385     the specified errata, a warning message is issued instead.  This
16386     option can be used alongside '-msilicon-errata' to generate
16387     messages whenever a problem is fixed, or on its own in order to
16388     inspect code for potential problems.
16389
16390'-mP'
16391     enables polymorph instructions handler.
16392
16393'-mQ'
16394     enables relaxation at assembly time.  DANGEROUS!
16395
16396'-ml'
16397     indicates that the input uses the large code model.
16398
16399'-mn'
16400     enables the generation of a NOP instruction following any
16401     instruction that might change the interrupts enabled/disabled
16402     state.  The pipelined nature of the MSP430 core means that any
16403     instruction that changes the interrupt state ('EINT', 'DINT', 'BIC
16404     #8, SR', 'BIS #8, SR' or 'MOV.W <>, SR') must be followed by a NOP
16405     instruction in order to ensure the correct processing of
16406     interrupts.  By default it is up to the programmer to supply these
16407     NOP instructions, but this command-line option enables the
16408     automatic insertion by the assembler, if they are missing.
16409
16410'-mN'
16411     disables the generation of a NOP instruction following any
16412     instruction that might change the interrupts enabled/disabled
16413     state.  This is the default behaviour.
16414
16415'-my'
16416     tells the assembler to generate a warning message if a NOP does not
16417     immediately follow an instruction that enables or disables
16418     interrupts.  This is the default.
16419
16420     Note that this option can be stacked with the '-mn' option so that
16421     the assembler will both warn about missing NOP instructions and
16422     then insert them automatically.
16423
16424'-mY'
16425     disables warnings about missing NOP instructions.
16426
16427'-md'
16428     mark the object file as one that requires data to copied from ROM
16429     to RAM at execution startup.  Disabled by default.
16430
16431'-mdata-region=REGION'
16432     Select the region data will be placed in.  Region placement is
16433     performed by the compiler and linker.  The only effect this option
16434     will have on the assembler is that if UPPER or EITHER is selected,
16435     then the symbols to initialise high data and bss will be defined.
16436     Valid REGION values are:
16437     'none'
16438     'lower'
16439     'upper'
16440     'either'
16441
16442
16443File: as.info,  Node: MSP430 Syntax,  Next: MSP430 Floating Point,  Prev: MSP430 Options,  Up: MSP430-Dependent
16444
164459.29.2 Syntax
16446-------------
16447
16448* Menu:
16449
16450* MSP430-Macros::		Macros
16451* MSP430-Chars::                Special Characters
16452* MSP430-Regs::                 Register Names
16453* MSP430-Ext::			Assembler Extensions
16454
16455
16456File: as.info,  Node: MSP430-Macros,  Next: MSP430-Chars,  Up: MSP430 Syntax
16457
164589.29.2.1 Macros
16459...............
16460
16461The macro syntax used on the MSP 430 is like that described in the MSP
16462430 Family Assembler Specification.  Normal 'as' macros should still
16463work.
16464
16465   Additional built-in macros are:
16466
16467'llo(exp)'
16468     Extracts least significant word from 32-bit expression 'exp'.
16469
16470'lhi(exp)'
16471     Extracts most significant word from 32-bit expression 'exp'.
16472
16473'hlo(exp)'
16474     Extracts 3rd word from 64-bit expression 'exp'.
16475
16476'hhi(exp)'
16477     Extracts 4rd word from 64-bit expression 'exp'.
16478
16479   They normally being used as an immediate source operand.
16480         mov	#llo(1), r10	;	== mov	#1, r10
16481         mov	#lhi(1), r10	;	== mov	#0, r10
16482
16483
16484File: as.info,  Node: MSP430-Chars,  Next: MSP430-Regs,  Prev: MSP430-Macros,  Up: MSP430 Syntax
16485
164869.29.2.2 Special Characters
16487...........................
16488
16489A semicolon (';') appearing anywhere on a line starts a comment that
16490extends to the end of that line.
16491
16492   If a '#' appears as the first character of a line then the whole line
16493is treated as a comment, but it can also be a logical line number
16494directive (*note Comments::) or a preprocessor control command (*note
16495Preprocessing::).
16496
16497   Multiple statements can appear on the same line provided that they
16498are separated by the '{' character.
16499
16500   The character '$' in jump instructions indicates current location and
16501implemented only for TI syntax compatibility.
16502
16503
16504File: as.info,  Node: MSP430-Regs,  Next: MSP430-Ext,  Prev: MSP430-Chars,  Up: MSP430 Syntax
16505
165069.29.2.3 Register Names
16507.......................
16508
16509General-purpose registers are represented by predefined symbols of the
16510form 'rN' (for global registers), where N represents a number between
16511'0' and '15'.  The leading letters may be in either upper or lower case;
16512for example, 'r13' and 'R7' are both valid register names.
16513
16514   Register names 'PC', 'SP' and 'SR' cannot be used as register names
16515and will be treated as variables.  Use 'r0', 'r1', and 'r2' instead.
16516
16517
16518File: as.info,  Node: MSP430-Ext,  Prev: MSP430-Regs,  Up: MSP430 Syntax
16519
165209.29.2.4 Assembler Extensions
16521.............................
16522
16523'@rN'
16524     As destination operand being treated as '0(rn)'
16525
16526'0(rN)'
16527     As source operand being treated as '@rn'
16528
16529'jCOND +N'
16530     Skips next N bytes followed by jump instruction and equivalent to
16531     'jCOND $+N+2'
16532
16533   Also, there are some instructions, which cannot be found in other
16534assemblers.  These are branch instructions, which has different opcodes
16535upon jump distance.  They all got PC relative addressing mode.
16536
16537'beq label'
16538     A polymorph instruction which is 'jeq label' in case if jump
16539     distance within allowed range for cpu's jump instruction.  If not,
16540     this unrolls into a sequence of
16541            jne $+6
16542            br  label
16543
16544'bne label'
16545     A polymorph instruction which is 'jne label' or 'jeq +4; br label'
16546
16547'blt label'
16548     A polymorph instruction which is 'jl label' or 'jge +4; br label'
16549
16550'bltn label'
16551     A polymorph instruction which is 'jn label' or 'jn +2; jmp +4; br
16552     label'
16553
16554'bltu label'
16555     A polymorph instruction which is 'jlo label' or 'jhs +2; br label'
16556
16557'bge label'
16558     A polymorph instruction which is 'jge label' or 'jl +4; br label'
16559
16560'bgeu label'
16561     A polymorph instruction which is 'jhs label' or 'jlo +4; br label'
16562
16563'bgt label'
16564     A polymorph instruction which is 'jeq +2; jge label' or 'jeq +6; jl
16565     +4; br label'
16566
16567'bgtu label'
16568     A polymorph instruction which is 'jeq +2; jhs label' or 'jeq +6;
16569     jlo +4; br label'
16570
16571'bleu label'
16572     A polymorph instruction which is 'jeq label; jlo label' or 'jeq +2;
16573     jhs +4; br label'
16574
16575'ble label'
16576     A polymorph instruction which is 'jeq label; jl label' or 'jeq +2;
16577     jge +4; br label'
16578
16579'jump label'
16580     A polymorph instruction which is 'jmp label' or 'br label'
16581
16582
16583File: as.info,  Node: MSP430 Floating Point,  Next: MSP430 Directives,  Prev: MSP430 Syntax,  Up: MSP430-Dependent
16584
165859.29.3 Floating Point
16586---------------------
16587
16588The MSP 430 family uses IEEE 32-bit floating-point numbers.
16589
16590
16591File: as.info,  Node: MSP430 Directives,  Next: MSP430 Opcodes,  Prev: MSP430 Floating Point,  Up: MSP430-Dependent
16592
165939.29.4 MSP 430 Machine Directives
16594---------------------------------
16595
16596'.file'
16597     This directive is ignored; it is accepted for compatibility with
16598     other MSP 430 assemblers.
16599
16600          _Warning:_ in other versions of the GNU assembler, '.file' is
16601          used for the directive called '.app-file' in the MSP 430
16602          support.
16603
16604'.line'
16605     This directive is ignored; it is accepted for compatibility with
16606     other MSP 430 assemblers.
16607
16608'.arch'
16609     Sets the target microcontroller in the same way as the '-mmcu'
16610     command-line option.
16611
16612'.cpu'
16613     Sets the target architecture in the same way as the '-mcpu'
16614     command-line option.
16615
16616'.profiler'
16617     This directive instructs assembler to add new profile entry to the
16618     object file.
16619
16620'.refsym'
16621     This directive instructs assembler to add an undefined reference to
16622     the symbol following the directive.  The maximum symbol name length
16623     is 1023 characters.  No relocation is created for this symbol; it
16624     will exist purely for pulling in object files from archives.  Note
16625     that this reloc is not sufficient to prevent garbage collection;
16626     use a KEEP() directive in the linker file to preserve such objects.
16627
16628'.mspabi_attribute'
16629     This directive tells the assembler what the MSPABI build attributes
16630     for this file are.  This is used for validating the command line
16631     options passed to the assembler against the options the original
16632     source file was compiled with.  The expected format is:
16633     '.mspabi_attribute tag_name, tag_value' For example, to set the tag
16634     'OFBA_MSPABI_Tag_ISA' to 'MSP430X': '.mspabi_attribute 4, 2'
16635
16636     See the 'MSP430 EABI, document slaa534' for the details on tag
16637     names and values.
16638
16639
16640File: as.info,  Node: MSP430 Opcodes,  Next: MSP430 Profiling Capability,  Prev: MSP430 Directives,  Up: MSP430-Dependent
16641
166429.29.5 Opcodes
16643--------------
16644
16645'as' implements all the standard MSP 430 opcodes.  No additional
16646pseudo-instructions are needed on this family.
16647
16648   For information on the 430 machine instruction set, see 'MSP430
16649User's Manual, document slau049d', Texas Instrument, Inc.
16650
16651
16652File: as.info,  Node: MSP430 Profiling Capability,  Prev: MSP430 Opcodes,  Up: MSP430-Dependent
16653
166549.29.6 Profiling Capability
16655---------------------------
16656
16657It is a performance hit to use gcc's profiling approach for this tiny
16658target.  Even more - jtag hardware facility does not perform any
16659profiling functions.  However we've got gdb's built-in simulator where
16660we can do anything.
16661
16662   We define new section '.profiler' which holds all profiling
16663information.  We define new pseudo operation '.profiler' which will
16664instruct assembler to add new profile entry to the object file.  Profile
16665should take place at the present address.
16666
16667   Pseudo operation format:
16668
16669   '.profiler flags,function_to_profile [, cycle_corrector, extra]'
16670
16671   where:
16672
16673          'flags' is a combination of the following characters:
16674
16675     's'
16676          function entry
16677     'x'
16678          function exit
16679     'i'
16680          function is in init section
16681     'f'
16682          function is in fini section
16683     'l'
16684          library call
16685     'c'
16686          libc standard call
16687     'd'
16688          stack value demand
16689     'I'
16690          interrupt service routine
16691     'P'
16692          prologue start
16693     'p'
16694          prologue end
16695     'E'
16696          epilogue start
16697     'e'
16698          epilogue end
16699     'j'
16700          long jump / sjlj unwind
16701     'a'
16702          an arbitrary code fragment
16703     't'
16704          extra parameter saved (a constant value like frame size)
16705
16706'function_to_profile'
16707     a function address
16708'cycle_corrector'
16709     a value which should be added to the cycle counter, zero if
16710     omitted.
16711'extra'
16712     any extra parameter, zero if omitted.
16713
16714   For example:
16715     .global fxx
16716     .type fxx,@function
16717     fxx:
16718     .LFrameOffset_fxx=0x08
16719     .profiler "scdP", fxx     ; function entry.
16720     			  ; we also demand stack value to be saved
16721       push r11
16722       push r10
16723       push r9
16724       push r8
16725     .profiler "cdpt",fxx,0, .LFrameOffset_fxx  ; check stack value at this point
16726     					  ; (this is a prologue end)
16727     					  ; note, that spare var filled with
16728     					  ; the farme size
16729       mov r15,r8
16730     ...
16731     .profiler cdE,fxx         ; check stack
16732       pop r8
16733       pop r9
16734       pop r10
16735       pop r11
16736     .profiler xcde,fxx,3      ; exit adds 3 to the cycle counter
16737       ret                     ; cause 'ret' insn takes 3 cycles
16738
16739
16740File: as.info,  Node: NDS32-Dependent,  Next: NiosII-Dependent,  Prev: MSP430-Dependent,  Up: Machine Dependencies
16741
167429.30 NDS32 Dependent Features
16743=============================
16744
16745The NDS32 processors family includes high-performance and low-power
1674632-bit processors for high-end to low-end.  GNU 'as' for NDS32
16747architectures supports NDS32 ISA version 3.  For detail about NDS32
16748instruction set, please see the AndeStar ISA User Manual which is
16749available at http://www.andestech.com/en/index/index.htm
16750
16751* Menu:
16752
16753* NDS32 Options::         Assembler options
16754* NDS32 Syntax::          High-level assembly macros
16755
16756
16757File: as.info,  Node: NDS32 Options,  Next: NDS32 Syntax,  Up: NDS32-Dependent
16758
167599.30.1 NDS32 Options
16760--------------------
16761
16762The NDS32 configurations of GNU 'as' support these special options:
16763
16764'-O1'
16765     Optimize for performance.
16766
16767'-Os'
16768     Optimize for space.
16769
16770'-EL'
16771     Produce little endian data output.
16772
16773'-EB'
16774     Produce little endian data output.
16775
16776'-mpic'
16777     Generate PIC.
16778
16779'-mno-fp-as-gp-relax'
16780     Suppress fp-as-gp relaxation for this file.
16781
16782'-mb2bb-relax'
16783     Back-to-back branch optimization.
16784
16785'-mno-all-relax'
16786     Suppress all relaxation for this file.
16787
16788'-march=<arch name>'
16789     Assemble for architecture <arch name> which could be v3, v3j, v3m,
16790     v3f, v3s, v2, v2j, v2f, v2s.
16791
16792'-mbaseline=<baseline>'
16793     Assemble for baseline <baseline> which could be v2, v3, v3m.
16794
16795'-mfpu-freg=FREG'
16796     Specify a FPU configuration.
16797     '0 8 SP / 4 DP registers'
16798     '1 16 SP / 8 DP registers'
16799     '2 32 SP / 16 DP registers'
16800     '3 32 SP / 32 DP registers'
16801
16802'-mabi=ABI'
16803     Specify a abi version <abi> could be v1, v2, v2fp, v2fpp.
16804
16805'-m[no-]mac'
16806     Enable/Disable Multiply instructions support.
16807
16808'-m[no-]div'
16809     Enable/Disable Divide instructions support.
16810
16811'-m[no-]16bit-ext'
16812     Enable/Disable 16-bit extension
16813
16814'-m[no-]dx-regs'
16815     Enable/Disable d0/d1 registers
16816
16817'-m[no-]perf-ext'
16818     Enable/Disable Performance extension
16819
16820'-m[no-]perf2-ext'
16821     Enable/Disable Performance extension 2
16822
16823'-m[no-]string-ext'
16824     Enable/Disable String extension
16825
16826'-m[no-]reduced-regs'
16827     Enable/Disable Reduced Register configuration (GPR16) option
16828
16829'-m[no-]audio-isa-ext'
16830     Enable/Disable AUDIO ISA extension
16831
16832'-m[no-]fpu-sp-ext'
16833     Enable/Disable FPU SP extension
16834
16835'-m[no-]fpu-dp-ext'
16836     Enable/Disable FPU DP extension
16837
16838'-m[no-]fpu-fma'
16839     Enable/Disable FPU fused-multiply-add instructions
16840
16841'-mall-ext'
16842     Turn on all extensions and instructions support
16843
16844
16845File: as.info,  Node: NDS32 Syntax,  Prev: NDS32 Options,  Up: NDS32-Dependent
16846
168479.30.2 Syntax
16848-------------
16849
16850* Menu:
16851
16852* NDS32-Chars::                Special Characters
16853* NDS32-Regs::                 Register Names
16854* NDS32-Ops::                  Pseudo Instructions
16855
16856
16857File: as.info,  Node: NDS32-Chars,  Next: NDS32-Regs,  Up: NDS32 Syntax
16858
168599.30.2.1 Special Characters
16860...........................
16861
16862Use '#' at column 1 and '!' anywhere in the line except inside quotes.
16863
16864   Multiple instructions in a line are allowed though not recommended
16865and should be separated by ';'.
16866
16867   Assembler is not case-sensitive in general except user defined label.
16868For example, 'jral F1' is different from 'jral f1' while it is the same
16869as 'JRAL F1'.
16870
16871
16872File: as.info,  Node: NDS32-Regs,  Next: NDS32-Ops,  Prev: NDS32-Chars,  Up: NDS32 Syntax
16873
168749.30.2.2 Register Names
16875.......................
16876
16877'General purpose registers (GPR)'
16878     There are 32 32-bit general purpose registers $r0 to $r31.
16879
16880'Accumulators d0 and d1'
16881     64-bit accumulators: $d0.hi, $d0.lo, $d1.hi, and $d1.lo.
16882
16883'Assembler reserved register $ta'
16884     Register $ta ($r15) is reserved for assembler using.
16885
16886'Operating system reserved registers $p0 and $p1'
16887     Registers $p0 ($r26) and $p1 ($r27) are used by operating system as
16888     scratch registers.
16889
16890'Frame pointer $fp'
16891     Register $r28 is regarded as the frame pointer.
16892
16893'Global pointer'
16894     Register $r29 is regarded as the global pointer.
16895
16896'Link pointer'
16897     Register $r30 is regarded as the link pointer.
16898
16899'Stack pointer'
16900     Register $r31 is regarded as the stack pointer.
16901
16902
16903File: as.info,  Node: NDS32-Ops,  Prev: NDS32-Regs,  Up: NDS32 Syntax
16904
169059.30.2.3 Pseudo Instructions
16906............................
16907
16908'li rt5,imm32'
16909     load 32-bit integer into register rt5.  'sethi rt5,hi20(imm32)' and
16910     then 'ori rt5,reg,lo12(imm32)'.
16911
16912'la rt5,var'
16913     Load 32-bit address of var into register rt5.  'sethi
16914     rt5,hi20(var)' and then 'ori reg,rt5,lo12(var)'
16915
16916'l.[bhw] rt5,var'
16917     Load value of var into register rt5.  'sethi $ta,hi20(var)' and
16918     then 'l[bhw]i rt5,[$ta+lo12(var)]'
16919
16920'l.[bh]s rt5,var'
16921     Load value of var into register rt5.  'sethi $ta,hi20(var)' and
16922     then 'l[bh]si rt5,[$ta+lo12(var)]'
16923
16924'l.[bhw]p rt5,var,inc'
16925     Load value of var into register rt5 and increment $ta by amount
16926     inc.  'la $ta,var' and then 'l[bhw]i.bi rt5,[$ta],inc'
16927
16928'l.[bhw]pc rt5,inc'
16929     Continue loading value of var into register rt5 and increment $ta
16930     by amount inc.  'l[bhw]i.bi rt5,[$ta],inc.'
16931
16932'l.[bh]sp rt5,var,inc'
16933     Load value of var into register rt5 and increment $ta by amount
16934     inc.  'la $ta,var' and then 'l[bh]si.bi rt5,[$ta],inc'
16935
16936'l.[bh]spc rt5,inc'
16937     Continue loading value of var into register rt5 and increment $ta
16938     by amount inc.  'l[bh]si.bi rt5,[$ta],inc.'
16939
16940's.[bhw] rt5,var'
16941     Store register rt5 to var.  'sethi $ta,hi20(var)' and then 's[bhw]i
16942     rt5,[$ta+lo12(var)]'
16943
16944's.[bhw]p rt5,var,inc'
16945     Store register rt5 to var and increment $ta by amount inc.  'la
16946     $ta,var' and then 's[bhw]i.bi rt5,[$ta],inc'
16947
16948's.[bhw]pc rt5,inc'
16949     Continue storing register rt5 to var and increment $ta by amount
16950     inc.  's[bhw]i.bi rt5,[$ta],inc.'
16951
16952'not rt5,ra5'
16953     Alias of 'nor rt5,ra5,ra5'.
16954
16955'neg rt5,ra5'
16956     Alias of 'subri rt5,ra5,0'.
16957
16958'br rb5'
16959     Depending on how it is assembled, it is translated into 'r5 rb5' or
16960     'jr rb5'.
16961
16962'b label'
16963     Branch to label depending on how it is assembled, it is translated
16964     into 'j8 label', 'j label', or "'la $ta,label' 'br $ta'".
16965
16966'bral rb5'
16967     Alias of jral br5 depending on how it is assembled, it is
16968     translated into 'jral5 rb5' or 'jral rb5'.
16969
16970'bal fname'
16971     Alias of jal fname depending on how it is assembled, it is
16972     translated into 'jal fname' or "'la $ta,fname' 'bral $ta'".
16973
16974'call fname'
16975     Call function fname same as 'jal fname'.
16976
16977'move rt5,ra5'
16978     For 16-bit, this is 'mov55 rt5,ra5'.  For no 16-bit, this is 'ori
16979     rt5,ra5,0'.
16980
16981'move rt5,var'
16982     This is the same as 'l.w rt5,var'.
16983
16984'move rt5,imm32'
16985     This is the same as 'li rt5,imm32'.
16986
16987'pushm ra5,rb5'
16988     Push contents of registers from ra5 to rb5 into stack.
16989
16990'push ra5'
16991     Push content of register ra5 into stack.  (same 'pushm ra5,ra5').
16992
16993'push.d var'
16994     Push value of double-word variable var into stack.
16995
16996'push.w var'
16997     Push value of word variable var into stack.
16998
16999'push.h var'
17000     Push value of half-word variable var into stack.
17001
17002'push.b var'
17003     Push value of byte variable var into stack.
17004
17005'pusha var'
17006     Push 32-bit address of variable var into stack.
17007
17008'pushi imm32'
17009     Push 32-bit immediate value into stack.
17010
17011'popm ra5,rb5'
17012     Pop top of stack values into registers ra5 to rb5.
17013
17014'pop rt5'
17015     Pop top of stack value into register.  (same as 'popm rt5,rt5'.)
17016
17017'pop.d var,ra5'
17018     Pop value of double-word variable var from stack using register ra5
17019     as 2nd scratch register.  (1st is $ta)
17020
17021'pop.w var,ra5'
17022     Pop value of word variable var from stack using register ra5.
17023
17024'pop.h var,ra5'
17025     Pop value of half-word variable var from stack using register ra5.
17026
17027'pop.b var,ra5'
17028     Pop value of byte variable var from stack using register ra5.
17029
17030
17031File: as.info,  Node: NiosII-Dependent,  Next: NS32K-Dependent,  Prev: NDS32-Dependent,  Up: Machine Dependencies
17032
170339.31 Nios II Dependent Features
17034===============================
17035
17036* Menu:
17037
17038* Nios II Options::              Options
17039* Nios II Syntax::               Syntax
17040* Nios II Relocations::          Relocations
17041* Nios II Directives::           Nios II Machine Directives
17042* Nios II Opcodes::              Opcodes
17043
17044
17045File: as.info,  Node: Nios II Options,  Next: Nios II Syntax,  Up: NiosII-Dependent
17046
170479.31.1 Options
17048--------------
17049
17050'-relax-section'
17051     Replace identified out-of-range branches with PC-relative 'jmp'
17052     sequences when possible.  The generated code sequences are suitable
17053     for use in position-independent code, but there is a practical
17054     limit on the extended branch range because of the length of the
17055     sequences.  This option is the default.
17056
17057'-relax-all'
17058     Replace branch instructions not determinable to be in range and all
17059     call instructions with 'jmp' and 'callr' sequences (respectively).
17060     This option generates absolute relocations against the target
17061     symbols and is not appropriate for position-independent code.
17062
17063'-no-relax'
17064     Do not replace any branches or calls.
17065
17066'-EB'
17067     Generate big-endian output.
17068
17069'-EL'
17070     Generate little-endian output.  This is the default.
17071
17072'-march=ARCHITECTURE'
17073     This option specifies the target architecture.  The assembler
17074     issues an error message if an attempt is made to assemble an
17075     instruction which will not execute on the target architecture.  The
17076     following architecture names are recognized: 'r1', 'r2'.  The
17077     default is 'r1'.
17078
17079
17080File: as.info,  Node: Nios II Syntax,  Next: Nios II Relocations,  Prev: Nios II Options,  Up: NiosII-Dependent
17081
170829.31.2 Syntax
17083-------------
17084
17085* Menu:
17086
17087* Nios II Chars::                Special Characters
17088
17089
17090File: as.info,  Node: Nios II Chars,  Up: Nios II Syntax
17091
170929.31.2.1 Special Characters
17093...........................
17094
17095'#' is the line comment character.  ';' is the line separator character.
17096
17097
17098File: as.info,  Node: Nios II Relocations,  Next: Nios II Directives,  Prev: Nios II Syntax,  Up: NiosII-Dependent
17099
171009.31.3 Nios II Machine Relocations
17101----------------------------------
17102
17103'%hiadj(EXPRESSION)'
17104     Extract the upper 16 bits of EXPRESSION and add one if the 15th bit
17105     is set.
17106
17107     The value of '%hiadj(EXPRESSION)' is:
17108          ((EXPRESSION >> 16) & 0xffff) + ((EXPRESSION >> 15) & 0x01)
17109
17110     The '%hiadj' relocation is intended to be used with the 'addi',
17111     'ld' or 'st' instructions along with a '%lo', in order to load a
17112     32-bit constant.
17113
17114          movhi r2, %hiadj(symbol)
17115          addi r2, r2, %lo(symbol)
17116
17117'%hi(EXPRESSION)'
17118     Extract the upper 16 bits of EXPRESSION.
17119
17120'%lo(EXPRESSION)'
17121     Extract the lower 16 bits of EXPRESSION.
17122
17123'%gprel(EXPRESSION)'
17124     Subtract the value of the symbol '_gp' from EXPRESSION.
17125
17126     The intention of the '%gprel' relocation is to have a fast small
17127     area of memory which only takes a 16-bit immediate to access.
17128
17129          	.section .sdata
17130          fastint:
17131          	.int 123
17132          	.section .text
17133          	ldw r4, %gprel(fastint)(gp)
17134
17135'%call(EXPRESSION)'
17136'%call_lo(EXPRESSION)'
17137'%call_hiadj(EXPRESSION)'
17138'%got(EXPRESSION)'
17139'%got_lo(EXPRESSION)'
17140'%got_hiadj(EXPRESSION)'
17141'%gotoff(EXPRESSION)'
17142'%gotoff_lo(EXPRESSION)'
17143'%gotoff_hiadj(EXPRESSION)'
17144'%tls_gd(EXPRESSION)'
17145'%tls_ie(EXPRESSION)'
17146'%tls_le(EXPRESSION)'
17147'%tls_ldm(EXPRESSION)'
17148'%tls_ldo(EXPRESSION)'
17149
17150     These relocations support the ABI for Linux Systems documented in
17151     the 'Nios II Processor Reference Handbook'.
17152
17153
17154File: as.info,  Node: Nios II Directives,  Next: Nios II Opcodes,  Prev: Nios II Relocations,  Up: NiosII-Dependent
17155
171569.31.4 Nios II Machine Directives
17157---------------------------------
17158
17159'.align EXPRESSION [, EXPRESSION]'
17160     This is the generic '.align' directive, however this aligns to a
17161     power of two.
17162
17163'.half EXPRESSION'
17164     Create an aligned constant 2 bytes in size.
17165
17166'.word EXPRESSION'
17167     Create an aligned constant 4 bytes in size.
17168
17169'.dword EXPRESSION'
17170     Create an aligned constant 8 bytes in size.
17171
17172'.2byte EXPRESSION'
17173     Create an unaligned constant 2 bytes in size.
17174
17175'.4byte EXPRESSION'
17176     Create an unaligned constant 4 bytes in size.
17177
17178'.8byte EXPRESSION'
17179     Create an unaligned constant 8 bytes in size.
17180
17181'.16byte EXPRESSION'
17182     Create an unaligned constant 16 bytes in size.
17183
17184'.set noat'
17185     Allows assembly code to use 'at' register without warning.  Macro
17186     or relaxation expansions generate warnings.
17187
17188'.set at'
17189     Assembly code using 'at' register generates warnings, and macro
17190     expansion and relaxation are enabled.
17191
17192'.set nobreak'
17193     Allows assembly code to use 'ba' and 'bt' registers without
17194     warning.
17195
17196'.set break'
17197     Turns warnings back on for using 'ba' and 'bt' registers.
17198
17199'.set norelax'
17200     Do not replace any branches or calls.
17201
17202'.set relaxsection'
17203     Replace identified out-of-range branches with 'jmp' sequences
17204     (default).
17205
17206'.set relaxsection'
17207     Replace all branch and call instructions with 'jmp' and 'callr'
17208     sequences.
17209
17210'.set ...'
17211     All other '.set' are the normal use.
17212
17213
17214File: as.info,  Node: Nios II Opcodes,  Prev: Nios II Directives,  Up: NiosII-Dependent
17215
172169.31.5 Opcodes
17217--------------
17218
17219'as' implements all the standard Nios II opcodes documented in the 'Nios
17220II Processor Reference Handbook', including the assembler
17221pseudo-instructions.
17222
17223
17224File: as.info,  Node: NS32K-Dependent,  Next: OpenRISC-Dependent,  Prev: NiosII-Dependent,  Up: Machine Dependencies
17225
172269.32 NS32K Dependent Features
17227=============================
17228
17229* Menu:
17230
17231* NS32K Syntax::               Syntax
17232
17233
17234File: as.info,  Node: NS32K Syntax,  Up: NS32K-Dependent
17235
172369.32.1 Syntax
17237-------------
17238
17239* Menu:
17240
17241* NS32K-Chars::                Special Characters
17242
17243
17244File: as.info,  Node: NS32K-Chars,  Up: NS32K Syntax
17245
172469.32.1.1 Special Characters
17247...........................
17248
17249The presence of a '#' appearing anywhere on a line indicates the start
17250of a comment that extends to the end of that line.
17251
17252   If a '#' appears as the first character of a line then the whole line
17253is treated as a comment, but in this case the line can also be a logical
17254line number directive (*note Comments::) or a preprocessor control
17255command (*note Preprocessing::).
17256
17257   If Sequent compatibility has been configured into the assembler then
17258the '|' character appearing as the first character on a line will also
17259indicate the start of a line comment.
17260
17261   The ';' character can be used to separate statements on the same
17262line.
17263
17264
17265File: as.info,  Node: OpenRISC-Dependent,  Next: PDP-11-Dependent,  Prev: NS32K-Dependent,  Up: Machine Dependencies
17266
172679.33 OPENRISC Dependent Features
17268================================
17269
17270* Menu:
17271
17272* OpenRISC-Syntax::		Syntax
17273* OpenRISC-Float::		Floating Point
17274* OpenRISC-Directives::		OpenRISC Machine Directives
17275* OpenRISC-Opcodes::		Opcodes
17276
17277
17278File: as.info,  Node: OpenRISC-Syntax,  Next: OpenRISC-Float,  Up: OpenRISC-Dependent
17279
172809.33.1 OpenRISC Syntax
17281----------------------
17282
17283The assembler syntax follows the OpenRISC 1000 Architecture Manual.
17284
17285* Menu:
17286
17287* OpenRISC-Chars::		Special Characters
17288* OpenRISC-Regs::		Register Names
17289* OpenRISC-Relocs::		Relocations
17290
17291
17292File: as.info,  Node: OpenRISC-Chars,  Next: OpenRISC-Regs,  Up: OpenRISC-Syntax
17293
172949.33.1.1 Special Characters
17295...........................
17296
17297A '#' character appearing anywhere on a line indicates the start of a
17298comment that extends to the end of that line.
17299
17300   ';' can be used instead of a newline to separate statements.
17301
17302
17303File: as.info,  Node: OpenRISC-Regs,  Next: OpenRISC-Relocs,  Prev: OpenRISC-Chars,  Up: OpenRISC-Syntax
17304
173059.33.1.2 Register Names
17306.......................
17307
17308The OpenRISC register file contains 32 general pupose registers.
17309
17310   * The 32 general purpose registers are referred to as 'rN'.
17311
17312   * The stack pointer register 'r1' can be referenced using the alias
17313     'sp'.
17314
17315   * The frame pointer register 'r2' can be referenced using the alias
17316     'fp'.
17317
17318   * The link register 'r9' can be referenced using the alias 'lr'.
17319
17320   Floating point operations use the same general purpose registers.
17321The instructions 'lf.itof.s' (single precision) and 'lf.itof.d' (double
17322precision) can be used to convert integer values to floating point.
17323Likewise, instructions 'lf.ftoi.s' (single precision) and 'lf.ftoi.d'
17324(double precision) can be used to convert floating point to integer.
17325
17326   OpenRISC also contains privileged special purpose registers (SPRs).
17327The SPRs are accessed using the 'l.mfspr' and 'l.mtspr' instructions.
17328
17329
17330File: as.info,  Node: OpenRISC-Relocs,  Prev: OpenRISC-Regs,  Up: OpenRISC-Syntax
17331
173329.33.1.3 Relocations
17333....................
17334
17335ELF relocations are available as defined in the OpenRISC architecture
17336specification.
17337
17338   'R_OR1K_HI_16_IN_INSN' is obtained using 'hi' and
17339'R_OR1K_LO_16_IN_INSN' and 'R_OR1K_SLO16' are obtained using 'lo'.  For
17340signed offsets 'R_OR1K_AHI16' is obtained from 'ha'.  For example:
17341
17342     l.movhi r5, hi(symbol)
17343     l.ori   r5, r5, lo(symbol)
17344
17345     l.movhi r5, ha(symbol)
17346     l.addi  r5, r5, lo(symbol)
17347
17348   These "high" mnemonics extract bits 31:16 of their operand, and the
17349"low" mnemonics extract bits 15:0 of their operand.
17350
17351   The PC relative relocation 'R_OR1K_GOTPC_HI16' can be obtained by
17352enclosing an operand inside of 'gotpchi'.  Likewise, the
17353'R_OR1K_GOTPC_LO16' relocation can be obtained using 'gotpclo'.  These
17354are mostly used when assembling PIC code.  For example, the standard PIC
17355sequence on OpenRISC to get the base of the global offset table, PC
17356relative, into a register, can be performed as:
17357
17358     l.jal   0x8
17359      l.movhi r17, gotpchi(_GLOBAL_OFFSET_TABLE_-4)
17360     l.ori   r17, r17, gotpclo(_GLOBAL_OFFSET_TABLE_+0)
17361     l.add   r17, r17, r9
17362
17363   Several relocations exist to allow the link editor to perform GOT
17364data references.  The 'R_OR1K_GOT16' relocation can obtained by
17365enclosing an operand inside of 'got'.  For example, assuming the GOT
17366base is in register 'r17'.
17367
17368     l.lwz   r19, got(a)(r17)
17369     l.lwz   r21, 0(r19)
17370
17371   Also, several relocations exist for local GOT references.  The
17372'R_OR1K_GOTOFF_AHI16' relocation can obtained by enclosing an operand
17373inside of 'gotoffha'.  Likewise, 'R_OR1K_GOTOFF_LO16' and
17374'R_OR1K_GOTOFF_SLO16' can be obtained by enclosing an operand inside of
17375'gotofflo'.  For example, assuming the GOT base is in register 'rl7':
17376
17377     l.movhi r19, gotoffha(symbol)
17378     l.add   r19, r19, r17
17379     l.lwz   r19, gotofflo(symbol)(r19)
17380
17381   The above PC relative relocations use a 'l.jal' (jump) instruction
17382and reading of the link register to load the PC. OpenRISC also supports
17383page offset PC relative locations without a jump instruction using the
17384'l.adrp' instruction.  By default the 'l.adrp' instruction will create
17385an 'R_OR1K_PCREL_PG21' relocation.  Likewise, 'BFD_RELOC_OR1K_LO13' and
17386'BFD_RELOC_OR1K_SLO13' can be obtained by enclosing an operand inside of
17387'po'.  For example:
17388
17389     l.adrp  r3, symbol
17390     l.ori   r4, r3, po(symbol)
17391     l.lbz   r5, po(symbol)(r3)
17392     l.sb    po(symbol)(r3), r6
17393
17394   Likewise the page offset relocations can be used with GOT references.
17395The relocation 'R_OR1K_GOT_PG21' can be obtained by enclosing an
17396'l.adrp' immediate operand inside of 'got'.  Likewise, 'R_OR1K_GOT_LO13'
17397can be obtained by enclosing an operand inside of 'gotpo'.  For example
17398to load the value of a GOT symbol into register 'r5' we can do:
17399
17400     l.adrp  r17, got(_GLOBAL_OFFSET_TABLE_)
17401     l.lwz   r5, gotpo(symbol)(r17)
17402
17403   There are many relocations that can be requested for access to thread
17404local storage variables.  All of the OpenRISC TLS mnemonics are
17405supported:
17406
17407   * 'R_OR1K_TLS_GD_HI16' is requested using 'tlsgdhi'.
17408   * 'R_OR1K_TLS_GD_LO16' is requested using 'tlsgdlo'.
17409   * 'R_OR1K_TLS_GD_PG21' is requested using 'tldgd'.
17410   * 'R_OR1K_TLS_GD_LO13' is requested using 'tlsgdpo'.
17411
17412   * 'R_OR1K_TLS_LDM_HI16' is requested using 'tlsldmhi'.
17413   * 'R_OR1K_TLS_LDM_LO16' is requested using 'tlsldmlo'.
17414   * 'R_OR1K_TLS_LDM_PG21' is requested using 'tldldm'.
17415   * 'R_OR1K_TLS_LDM_LO13' is requested using 'tlsldmpo'.
17416
17417   * 'R_OR1K_TLS_LDO_HI16' is requested using 'dtpoffhi'.
17418   * 'R_OR1K_TLS_LDO_LO16' is requested using 'dtpofflo'.
17419
17420   * 'R_OR1K_TLS_IE_HI16' is requested using 'gottpoffhi'.
17421   * 'R_OR1K_TLS_IE_AHI16' is requested using 'gottpoffha'.
17422   * 'R_OR1K_TLS_IE_LO16' is requested using 'gottpofflo'.
17423   * 'R_OR1K_TLS_IE_PG21' is requested using 'gottp'.
17424   * 'R_OR1K_TLS_IE_LO13' is requested using 'gottppo'.
17425
17426   * 'R_OR1K_TLS_LE_HI16' is requested using 'tpoffhi'.
17427   * 'R_OR1K_TLS_LE_AHI16' is requested using 'tpoffha'.
17428   * 'R_OR1K_TLS_LE_LO16' is requested using 'tpofflo'.
17429   * 'R_OR1K_TLS_LE_SLO16' also is requested using 'tpofflo' depending
17430     on the instruction format.
17431
17432   Here are some example TLS model sequences.
17433
17434   First, General Dynamic:
17435
17436     l.movhi r17, tlsgdhi(symbol)
17437     l.ori   r17, r17, tlsgdlo(symbol)
17438     l.add   r17, r17, r16
17439     l.or    r3, r17, r17
17440     l.jal   plt(__tls_get_addr)
17441      l.nop
17442
17443   Initial Exec:
17444
17445     l.movhi r17, gottpoffhi(symbol)
17446     l.add   r17, r17, r16
17447     l.lwz   r17, gottpofflo(symbol)(r17)
17448     l.add   r17, r17, r10
17449     l.lbs   r17, 0(r17)
17450
17451   And finally, Local Exec:
17452
17453     l.movhi r17, tpoffha(symbol)
17454     l.add   r17, r17, r10
17455     l.addi  r17, r17, tpofflo(symbol)
17456     l.lbs   r17, 0(r17)
17457
17458
17459File: as.info,  Node: OpenRISC-Float,  Next: OpenRISC-Directives,  Prev: OpenRISC-Syntax,  Up: OpenRISC-Dependent
17460
174619.33.2 Floating Point
17462---------------------
17463
17464OpenRISC uses IEEE floating-point numbers.
17465
17466
17467File: as.info,  Node: OpenRISC-Directives,  Next: OpenRISC-Opcodes,  Prev: OpenRISC-Float,  Up: OpenRISC-Dependent
17468
174699.33.3 OpenRISC Machine Directives
17470----------------------------------
17471
17472The OpenRISC version of 'as' supports the following additional machine
17473directives:
17474
17475'.align'
17476     This must be followed by the desired alignment in bytes.
17477
17478'.word'
17479     On the OpenRISC, the '.word' directive produces a 32 bit value.
17480
17481'.nodelay'
17482     On the OpenRISC, the '.nodelay' directive sets a flag in elf
17483     binaries indicating that the binary is generated catering for no
17484     delay slots.
17485
17486'.proc'
17487     This directive is ignored.  Any text following it on the same line
17488     is also ignored.
17489
17490'.endproc'
17491     This directive is ignored.  Any text following it on the same line
17492     is also ignored.
17493
17494
17495File: as.info,  Node: OpenRISC-Opcodes,  Prev: OpenRISC-Directives,  Up: OpenRISC-Dependent
17496
174979.33.4 Opcodes
17498--------------
17499
17500For detailed information on the OpenRISC machine instruction set, see
17501<http://www.openrisc.io/architecture/>.
17502
17503   'as' implements all the standard OpenRISC opcodes.
17504
17505
17506File: as.info,  Node: PDP-11-Dependent,  Next: PJ-Dependent,  Prev: OpenRISC-Dependent,  Up: Machine Dependencies
17507
175089.34 PDP-11 Dependent Features
17509==============================
17510
17511* Menu:
17512
17513* PDP-11-Options::		Options
17514* PDP-11-Pseudos::		Assembler Directives
17515* PDP-11-Syntax::		DEC Syntax versus BSD Syntax
17516* PDP-11-Mnemonics::		Instruction Naming
17517* PDP-11-Synthetic::		Synthetic Instructions
17518
17519
17520File: as.info,  Node: PDP-11-Options,  Next: PDP-11-Pseudos,  Up: PDP-11-Dependent
17521
175229.34.1 Options
17523--------------
17524
17525The PDP-11 version of 'as' has a rich set of machine dependent options.
17526
175279.34.1.1 Code Generation Options
17528................................
17529
17530'-mpic | -mno-pic'
17531     Generate position-independent (or position-dependent) code.
17532
17533     The default is to generate position-independent code.
17534
175359.34.1.2 Instruction Set Extension Options
17536..........................................
17537
17538These options enables or disables the use of extensions over the base
17539line instruction set as introduced by the first PDP-11 CPU: the KA11.
17540Most options come in two variants: a '-m'EXTENSION that enables
17541EXTENSION, and a '-mno-'EXTENSION that disables EXTENSION.
17542
17543   The default is to enable all extensions.
17544
17545'-mall | -mall-extensions'
17546     Enable all instruction set extensions.
17547
17548'-mno-extensions'
17549     Disable all instruction set extensions.
17550
17551'-mcis | -mno-cis'
17552     Enable (or disable) the use of the commercial instruction set,
17553     which consists of these instructions: 'ADDNI', 'ADDN', 'ADDPI',
17554     'ADDP', 'ASHNI', 'ASHN', 'ASHPI', 'ASHP', 'CMPCI', 'CMPC', 'CMPNI',
17555     'CMPN', 'CMPPI', 'CMPP', 'CVTLNI', 'CVTLN', 'CVTLPI', 'CVTLP',
17556     'CVTNLI', 'CVTNL', 'CVTNPI', 'CVTNP', 'CVTPLI', 'CVTPL', 'CVTPNI',
17557     'CVTPN', 'DIVPI', 'DIVP', 'L2DR', 'L3DR', 'LOCCI', 'LOCC', 'MATCI',
17558     'MATC', 'MOVCI', 'MOVC', 'MOVRCI', 'MOVRC', 'MOVTCI', 'MOVTC',
17559     'MULPI', 'MULP', 'SCANCI', 'SCANC', 'SKPCI', 'SKPC', 'SPANCI',
17560     'SPANC', 'SUBNI', 'SUBN', 'SUBPI', and 'SUBP'.
17561
17562'-mcsm | -mno-csm'
17563     Enable (or disable) the use of the 'CSM' instruction.
17564
17565'-meis | -mno-eis'
17566     Enable (or disable) the use of the extended instruction set, which
17567     consists of these instructions: 'ASHC', 'ASH', 'DIV', 'MARK',
17568     'MUL', 'RTT', 'SOB' 'SXT', and 'XOR'.
17569
17570'-mfis | -mkev11'
17571'-mno-fis | -mno-kev11'
17572     Enable (or disable) the use of the KEV11 floating-point
17573     instructions: 'FADD', 'FDIV', 'FMUL', and 'FSUB'.
17574
17575'-mfpp | -mfpu | -mfp-11'
17576'-mno-fpp | -mno-fpu | -mno-fp-11'
17577     Enable (or disable) the use of FP-11 floating-point instructions:
17578     'ABSF', 'ADDF', 'CFCC', 'CLRF', 'CMPF', 'DIVF', 'LDCFF', 'LDCIF',
17579     'LDEXP', 'LDF', 'LDFPS', 'MODF', 'MULF', 'NEGF', 'SETD', 'SETF',
17580     'SETI', 'SETL', 'STCFF', 'STCFI', 'STEXP', 'STF', 'STFPS', 'STST',
17581     'SUBF', and 'TSTF'.
17582
17583'-mlimited-eis | -mno-limited-eis'
17584     Enable (or disable) the use of the limited extended instruction
17585     set: 'MARK', 'RTT', 'SOB', 'SXT', and 'XOR'.
17586
17587     The -mno-limited-eis options also implies -mno-eis.
17588
17589'-mmfpt | -mno-mfpt'
17590     Enable (or disable) the use of the 'MFPT' instruction.
17591
17592'-mmultiproc | -mno-multiproc'
17593     Enable (or disable) the use of multiprocessor instructions:
17594     'TSTSET' and 'WRTLCK'.
17595
17596'-mmxps | -mno-mxps'
17597     Enable (or disable) the use of the 'MFPS' and 'MTPS' instructions.
17598
17599'-mspl | -mno-spl'
17600     Enable (or disable) the use of the 'SPL' instruction.
17601
17602     Enable (or disable) the use of the microcode instructions: 'LDUB',
17603     'MED', and 'XFC'.
17604
176059.34.1.3 CPU Model Options
17606..........................
17607
17608These options enable the instruction set extensions supported by a
17609particular CPU, and disables all other extensions.
17610
17611'-mka11'
17612     KA11 CPU. Base line instruction set only.
17613
17614'-mkb11'
17615     KB11 CPU. Enable extended instruction set and 'SPL'.
17616
17617'-mkd11a'
17618     KD11-A CPU. Enable limited extended instruction set.
17619
17620'-mkd11b'
17621     KD11-B CPU. Base line instruction set only.
17622
17623'-mkd11d'
17624     KD11-D CPU. Base line instruction set only.
17625
17626'-mkd11e'
17627     KD11-E CPU. Enable extended instruction set, 'MFPS', and 'MTPS'.
17628
17629'-mkd11f | -mkd11h | -mkd11q'
17630     KD11-F, KD11-H, or KD11-Q CPU. Enable limited extended instruction
17631     set, 'MFPS', and 'MTPS'.
17632
17633'-mkd11k'
17634     KD11-K CPU. Enable extended instruction set, 'LDUB', 'MED', 'MFPS',
17635     'MFPT', 'MTPS', and 'XFC'.
17636
17637'-mkd11z'
17638     KD11-Z CPU. Enable extended instruction set, 'CSM', 'MFPS', 'MFPT',
17639     'MTPS', and 'SPL'.
17640
17641'-mf11'
17642     F11 CPU. Enable extended instruction set, 'MFPS', 'MFPT', and
17643     'MTPS'.
17644
17645'-mj11'
17646     J11 CPU. Enable extended instruction set, 'CSM', 'MFPS', 'MFPT',
17647     'MTPS', 'SPL', 'TSTSET', and 'WRTLCK'.
17648
17649'-mt11'
17650     T11 CPU. Enable limited extended instruction set, 'MFPS', and
17651     'MTPS'.
17652
176539.34.1.4 Machine Model Options
17654..............................
17655
17656These options enable the instruction set extensions supported by a
17657particular machine model, and disables all other extensions.
17658
17659'-m11/03'
17660     Same as '-mkd11f'.
17661
17662'-m11/04'
17663     Same as '-mkd11d'.
17664
17665'-m11/05 | -m11/10'
17666     Same as '-mkd11b'.
17667
17668'-m11/15 | -m11/20'
17669     Same as '-mka11'.
17670
17671'-m11/21'
17672     Same as '-mt11'.
17673
17674'-m11/23 | -m11/24'
17675     Same as '-mf11'.
17676
17677'-m11/34'
17678     Same as '-mkd11e'.
17679
17680'-m11/34a'
17681     Ame as '-mkd11e' '-mfpp'.
17682
17683'-m11/35 | -m11/40'
17684     Same as '-mkd11a'.
17685
17686'-m11/44'
17687     Same as '-mkd11z'.
17688
17689'-m11/45 | -m11/50 | -m11/55 | -m11/70'
17690     Same as '-mkb11'.
17691
17692'-m11/53 | -m11/73 | -m11/83 | -m11/84 | -m11/93 | -m11/94'
17693     Same as '-mj11'.
17694
17695'-m11/60'
17696     Same as '-mkd11k'.
17697
17698
17699File: as.info,  Node: PDP-11-Pseudos,  Next: PDP-11-Syntax,  Prev: PDP-11-Options,  Up: PDP-11-Dependent
17700
177019.34.2 Assembler Directives
17702---------------------------
17703
17704The PDP-11 version of 'as' has a few machine dependent assembler
17705directives.
17706
17707'.bss'
17708     Switch to the 'bss' section.
17709
17710'.even'
17711     Align the location counter to an even number.
17712
17713
17714File: as.info,  Node: PDP-11-Syntax,  Next: PDP-11-Mnemonics,  Prev: PDP-11-Pseudos,  Up: PDP-11-Dependent
17715
177169.34.3 PDP-11 Assembly Language Syntax
17717--------------------------------------
17718
17719'as' supports both DEC syntax and BSD syntax.  The only difference is
17720that in DEC syntax, a '#' character is used to denote an immediate
17721constants, while in BSD syntax the character for this purpose is '$'.
17722
17723   general-purpose registers are named 'r0' through 'r7'.  Mnemonic
17724alternatives for 'r6' and 'r7' are 'sp' and 'pc', respectively.
17725
17726   Floating-point registers are named 'ac0' through 'ac3', or
17727alternatively 'fr0' through 'fr3'.
17728
17729   Comments are started with a '#' or a '/' character, and extend to the
17730end of the line.  (FIXME: clash with immediates?)
17731
17732   Multiple statements on the same line can be separated by the ';'
17733character.
17734
17735
17736File: as.info,  Node: PDP-11-Mnemonics,  Next: PDP-11-Synthetic,  Prev: PDP-11-Syntax,  Up: PDP-11-Dependent
17737
177389.34.4 Instruction Naming
17739-------------------------
17740
17741Some instructions have alternative names.
17742
17743'BCC'
17744     'BHIS'
17745
17746'BCS'
17747     'BLO'
17748
17749'L2DR'
17750     'L2D'
17751
17752'L3DR'
17753     'L3D'
17754
17755'SYS'
17756     'TRAP'
17757
17758
17759File: as.info,  Node: PDP-11-Synthetic,  Prev: PDP-11-Mnemonics,  Up: PDP-11-Dependent
17760
177619.34.5 Synthetic Instructions
17762-----------------------------
17763
17764The 'JBR' and 'J'CC synthetic instructions are not supported yet.
17765
17766
17767File: as.info,  Node: PJ-Dependent,  Next: PPC-Dependent,  Prev: PDP-11-Dependent,  Up: Machine Dependencies
17768
177699.35 picoJava Dependent Features
17770================================
17771
17772* Menu:
17773
17774* PJ Options::              Options
17775* PJ Syntax::               PJ Syntax
17776
17777
17778File: as.info,  Node: PJ Options,  Next: PJ Syntax,  Up: PJ-Dependent
17779
177809.35.1 Options
17781--------------
17782
17783'as' has two additional command-line options for the picoJava
17784architecture.
17785'-ml'
17786     This option selects little endian data output.
17787
17788'-mb'
17789     This option selects big endian data output.
17790
17791
17792File: as.info,  Node: PJ Syntax,  Prev: PJ Options,  Up: PJ-Dependent
17793
177949.35.2 PJ Syntax
17795----------------
17796
17797* Menu:
17798
17799* PJ-Chars::                Special Characters
17800
17801
17802File: as.info,  Node: PJ-Chars,  Up: PJ Syntax
17803
178049.35.2.1 Special Characters
17805...........................
17806
17807The presence of a '!' or '/' on a line indicates the start of a comment
17808that extends to the end of the current line.
17809
17810   If a '#' appears as the first character of a line then the whole line
17811is treated as a comment, but in this case the line could also be a
17812logical line number directive (*note Comments::) or a preprocessor
17813control command (*note Preprocessing::).
17814
17815   The ';' character can be used to separate statements on the same
17816line.
17817
17818
17819File: as.info,  Node: PPC-Dependent,  Next: PRU-Dependent,  Prev: PJ-Dependent,  Up: Machine Dependencies
17820
178219.36 PowerPC Dependent Features
17822===============================
17823
17824* Menu:
17825
17826* PowerPC-Opts::                Options
17827* PowerPC-Pseudo::              PowerPC Assembler Directives
17828* PowerPC-Syntax::              PowerPC Syntax
17829
17830
17831File: as.info,  Node: PowerPC-Opts,  Next: PowerPC-Pseudo,  Up: PPC-Dependent
17832
178339.36.1 Options
17834--------------
17835
17836The PowerPC chip family includes several successive levels, using the
17837same core instruction set, but including a few additional instructions
17838at each level.  There are exceptions to this however.  For details on
17839what instructions each variant supports, please see the chip's
17840architecture reference manual.
17841
17842   The following table lists all available PowerPC options.
17843
17844'-a32'
17845     Generate ELF32 or XCOFF32.
17846
17847'-a64'
17848     Generate ELF64 or XCOFF64.
17849
17850'-K PIC'
17851     Set EF_PPC_RELOCATABLE_LIB in ELF flags.
17852
17853'-mpwrx | -mpwr2'
17854     Generate code for POWER/2 (RIOS2).
17855
17856'-mpwr'
17857     Generate code for POWER (RIOS1)
17858
17859'-m601'
17860     Generate code for PowerPC 601.
17861
17862'-mppc, -mppc32, -m603, -m604'
17863     Generate code for PowerPC 603/604.
17864
17865'-m403, -m405'
17866     Generate code for PowerPC 403/405.
17867
17868'-m440'
17869     Generate code for PowerPC 440.  BookE and some 405 instructions.
17870
17871'-m464'
17872     Generate code for PowerPC 464.
17873
17874'-m476'
17875     Generate code for PowerPC 476.
17876
17877'-m7400, -m7410, -m7450, -m7455'
17878     Generate code for PowerPC 7400/7410/7450/7455.
17879
17880'-m750cl, -mgekko, -mbroadway'
17881     Generate code for PowerPC 750CL/Gekko/Broadway.
17882
17883'-m821, -m850, -m860'
17884     Generate code for PowerPC 821/850/860.
17885
17886'-mppc64, -m620'
17887     Generate code for PowerPC 620/625/630.
17888
17889'-me500, -me500x2'
17890     Generate code for Motorola e500 core complex.
17891
17892'-me500mc'
17893     Generate code for Freescale e500mc core complex.
17894
17895'-me500mc64'
17896     Generate code for Freescale e500mc64 core complex.
17897
17898'-me5500'
17899     Generate code for Freescale e5500 core complex.
17900
17901'-me6500'
17902     Generate code for Freescale e6500 core complex.
17903
17904'-mspe'
17905     Generate code for Motorola SPE instructions.
17906
17907'-mspe2'
17908     Generate code for Freescale SPE2 instructions.
17909
17910'-mtitan'
17911     Generate code for AppliedMicro Titan core complex.
17912
17913'-mppc64bridge'
17914     Generate code for PowerPC 64, including bridge insns.
17915
17916'-mbooke'
17917     Generate code for 32-bit BookE.
17918
17919'-ma2'
17920     Generate code for A2 architecture.
17921
17922'-me300'
17923     Generate code for PowerPC e300 family.
17924
17925'-maltivec'
17926     Generate code for processors with AltiVec instructions.
17927
17928'-mvle'
17929     Generate code for Freescale PowerPC VLE instructions.
17930
17931'-mvsx'
17932     Generate code for processors with Vector-Scalar (VSX) instructions.
17933
17934'-mhtm'
17935     Generate code for processors with Hardware Transactional Memory
17936     instructions.
17937
17938'-mpower4, -mpwr4'
17939     Generate code for Power4 architecture.
17940
17941'-mpower5, -mpwr5, -mpwr5x'
17942     Generate code for Power5 architecture.
17943
17944'-mpower6, -mpwr6'
17945     Generate code for Power6 architecture.
17946
17947'-mpower7, -mpwr7'
17948     Generate code for Power7 architecture.
17949
17950'-mpower8, -mpwr8'
17951     Generate code for Power8 architecture.
17952
17953'-mpower9, -mpwr9'
17954     Generate code for Power9 architecture.
17955
17956'-mcell'
17957'-mcell'
17958     Generate code for Cell Broadband Engine architecture.
17959
17960'-mcom'
17961     Generate code Power/PowerPC common instructions.
17962
17963'-many'
17964     Generate code for any architecture (PWR/PWRX/PPC).
17965
17966'-mregnames'
17967     Allow symbolic names for registers.
17968
17969'-mno-regnames'
17970     Do not allow symbolic names for registers.
17971
17972'-mrelocatable'
17973     Support for GCC's -mrelocatable option.
17974
17975'-mrelocatable-lib'
17976     Support for GCC's -mrelocatable-lib option.
17977
17978'-memb'
17979     Set PPC_EMB bit in ELF flags.
17980
17981'-mlittle, -mlittle-endian, -le'
17982     Generate code for a little endian machine.
17983
17984'-mbig, -mbig-endian, -be'
17985     Generate code for a big endian machine.
17986
17987'-msolaris'
17988     Generate code for Solaris.
17989
17990'-mno-solaris'
17991     Do not generate code for Solaris.
17992
17993'-nops=COUNT'
17994     If an alignment directive inserts more than COUNT nops, put a
17995     branch at the beginning to skip execution of the nops.
17996
17997
17998File: as.info,  Node: PowerPC-Pseudo,  Next: PowerPC-Syntax,  Prev: PowerPC-Opts,  Up: PPC-Dependent
17999
180009.36.2 PowerPC Assembler Directives
18001-----------------------------------
18002
18003A number of assembler directives are available for PowerPC. The
18004following table is far from complete.
18005
18006'.machine "string"'
18007     This directive allows you to change the machine for which code is
18008     generated.  '"string"' may be any of the -m cpu selection options
18009     (without the -m) enclosed in double quotes, '"push"', or '"pop"'.
18010     '.machine "push"' saves the currently selected cpu, which may be
18011     restored with '.machine "pop"'.
18012
18013
18014File: as.info,  Node: PowerPC-Syntax,  Prev: PowerPC-Pseudo,  Up: PPC-Dependent
18015
180169.36.3 PowerPC Syntax
18017---------------------
18018
18019* Menu:
18020
18021* PowerPC-Chars::                Special Characters
18022
18023
18024File: as.info,  Node: PowerPC-Chars,  Up: PowerPC-Syntax
18025
180269.36.3.1 Special Characters
18027...........................
18028
18029The presence of a '#' on a line indicates the start of a comment that
18030extends to the end of the current line.
18031
18032   If a '#' appears as the first character of a line then the whole line
18033is treated as a comment, but in this case the line could also be a
18034logical line number directive (*note Comments::) or a preprocessor
18035control command (*note Preprocessing::).
18036
18037   If the assembler has been configured for the ppc-*-solaris* target
18038then the '!' character also acts as a line comment character.  This can
18039be disabled via the '-mno-solaris' command-line option.
18040
18041   The ';' character can be used to separate statements on the same
18042line.
18043
18044
18045File: as.info,  Node: PRU-Dependent,  Next: RISC-V-Dependent,  Prev: PPC-Dependent,  Up: Machine Dependencies
18046
180479.37 PRU Dependent Features
18048===========================
18049
18050* Menu:
18051
18052* PRU Options::              Options
18053* PRU Syntax::               Syntax
18054* PRU Relocations::          Relocations
18055* PRU Directives::           PRU Machine Directives
18056* PRU Opcodes::              Opcodes
18057
18058
18059File: as.info,  Node: PRU Options,  Next: PRU Syntax,  Up: PRU-Dependent
18060
180619.37.1 Options
18062--------------
18063
18064'-mlink-relax'
18065     Assume that LD would optimize LDI32 instructions by checking the
18066     upper 16 bits of the EXPRESSION.  If they are all zeros, then LD
18067     would shorten the LDI32 instruction to a single LDI. In such case
18068     'as' will output DIFF relocations for diff expressions.
18069
18070'-mno-link-relax'
18071     Assume that LD would not optimize LDI32 instructions.  As a
18072     consequence, DIFF relocations will not be emitted.
18073
18074'-mno-warn-regname-label'
18075     Do not warn if a label name matches a register name.  Usually
18076     assembler programmers will want this warning to be emitted.  C
18077     compilers may want to turn this off.
18078
18079
18080File: as.info,  Node: PRU Syntax,  Next: PRU Relocations,  Prev: PRU Options,  Up: PRU-Dependent
18081
180829.37.2 Syntax
18083-------------
18084
18085* Menu:
18086
18087* PRU Chars::                Special Characters
18088
18089
18090File: as.info,  Node: PRU Chars,  Up: PRU Syntax
18091
180929.37.2.1 Special Characters
18093...........................
18094
18095'#' and ';' are the line comment characters.
18096
18097
18098File: as.info,  Node: PRU Relocations,  Next: PRU Directives,  Prev: PRU Syntax,  Up: PRU-Dependent
18099
181009.37.3 PRU Machine Relocations
18101------------------------------
18102
18103'%pmem(EXPRESSION)'
18104     Convert EXPRESSION from byte-address to a word-address.  In other
18105     words, shift right by two.
18106
18107'%label(EXPRESSION)'
18108     Mark the given operand as a label.  This is useful if you need to
18109     jump to a label that matches a register name.
18110
18111          r1:
18112              jmp r1		; Will jump to register R1
18113              jmp %label(r1)	; Will jump to label r1
18114
18115
18116File: as.info,  Node: PRU Directives,  Next: PRU Opcodes,  Prev: PRU Relocations,  Up: PRU-Dependent
18117
181189.37.4 PRU Machine Directives
18119-----------------------------
18120
18121'.align EXPRESSION [, EXPRESSION]'
18122     This is the generic '.align' directive, however this aligns to a
18123     power of two.
18124
18125'.word EXPRESSION'
18126     Create an aligned constant 4 bytes in size.
18127
18128'.dword EXPRESSION'
18129     Create an aligned constant 8 bytes in size.
18130
18131'.2byte EXPRESSION'
18132     Create an unaligned constant 2 bytes in size.
18133
18134'.4byte EXPRESSION'
18135     Create an unaligned constant 4 bytes in size.
18136
18137'.8byte EXPRESSION'
18138     Create an unaligned constant 8 bytes in size.
18139
18140'.16byte EXPRESSION'
18141     Create an unaligned constant 16 bytes in size.
18142
18143'.set no_warn_regname_label'
18144     Do not output warnings when a label name matches a register name.
18145     Equivalent to passing the '-mno-warn-regname-label' command-line
18146     option.
18147
18148
18149File: as.info,  Node: PRU Opcodes,  Prev: PRU Directives,  Up: PRU-Dependent
18150
181519.37.5 Opcodes
18152--------------
18153
18154'as' implements all the standard PRU core V3 opcodes in the original
18155pasm assembler.  Older cores are not supported by 'as'.
18156
18157   GAS also implements the LDI32 pseudo instruction for loading a 32-bit
18158immediate value into a register.
18159
18160            ldi32   sp, __stack_top
18161            ldi32   r14, 0x12345678
18162
18163
18164File: as.info,  Node: RISC-V-Dependent,  Next: RL78-Dependent,  Prev: PRU-Dependent,  Up: Machine Dependencies
18165
181669.38 RISC-V Dependent Features
18167==============================
18168
18169* Menu:
18170
18171* RISC-V-Options::        RISC-V Options
18172* RISC-V-Directives::     RISC-V Directives
18173* RISC-V-Formats::        RISC-V Instruction Formats
18174* RISC-V-ATTRIBUTE::      RISC-V Object Attribute
18175
18176
18177File: as.info,  Node: RISC-V-Options,  Next: RISC-V-Directives,  Up: RISC-V-Dependent
18178
181799.38.1 RISC-V Options
18180---------------------
18181
18182The following table lists all available RISC-V specific options.
18183
18184'-fpic'
18185'-fPIC'
18186     Generate position-independent code
18187
18188'-fno-pic'
18189     Don't generate position-independent code (default)
18190
18191'-march=ISA'
18192     Select the base isa, as specified by ISA. For example
18193     -march=rv32ima.
18194
18195'-mabi=ABI'
18196     Selects the ABI, which is either "ilp32" or "lp64", optionally
18197     followed by "f", "d", or "q" to indicate single-precision,
18198     double-precision, or quad-precision floating-point calling
18199     convention, or none to indicate the soft-float calling convention.
18200     Also, "ilp32" can optionally be followed by "e" to indicate the RVE
18201     ABI, which is always soft-float.
18202
18203'-mrelax'
18204     Take advantage of linker relaxations to reduce the number of
18205     instructions required to materialize symbol addresses.  (default)
18206
18207'-mno-relax'
18208     Don't do linker relaxations.
18209
18210
18211File: as.info,  Node: RISC-V-Directives,  Next: RISC-V-Formats,  Prev: RISC-V-Options,  Up: RISC-V-Dependent
18212
182139.38.2 RISC-V Directives
18214------------------------
18215
18216The following table lists all available RISC-V specific directives.
18217
18218'.align SIZE-LOG-2'
18219     Align to the given boundary, with the size given as log2 the number
18220     of bytes to align to.
18221
18222'.half VALUE'
18223'.word VALUE'
18224'.dword VALUE'
18225     Emits a half-word, word, or double-word value at the current
18226     position.
18227
18228'.dtprelword VALUE'
18229'.dtpreldword VALUE'
18230     Emits a DTP-relative word (or double-word) at the current position.
18231     This is meant to be used by the compiler in shared libraries for
18232     DWARF debug info for thread local variables.
18233
18234'.bss'
18235     Sets the current section to the BSS section.
18236
18237'.uleb128 VALUE'
18238'.sleb128 VALUE'
18239     Emits a signed or unsigned LEB128 value at the current position.
18240     This only accepts constant expressions, because symbol addresses
18241     can change with relaxation, and we don't support relocations to
18242     modify LEB128 values at link time.
18243
18244'.option ARGUMENT'
18245     Modifies RISC-V specific assembler options inline with the assembly
18246     code.  This is used when particular instruction sequences must be
18247     assembled with a specific set of options.  For example, since we
18248     relax addressing sequences to shorter GP-relative sequences when
18249     possible the initial load of GP must not be relaxed and should be
18250     emitted as something like
18251
18252          	.option push
18253          	.option norelax
18254          	la gp, __global_pointer$
18255          	.option pop
18256
18257     in order to produce after linker relaxation the expected
18258
18259          	auipc gp, %pcrel_hi(__global_pointer$)
18260          	addi gp, gp, %pcrel_lo(__global_pointer$)
18261
18262     instead of just
18263
18264          	addi gp, gp, 0
18265
18266     It's not expected that options are changed in this manner during
18267     regular use, but there are a handful of esoteric cases like the one
18268     above where users need to disable particular features of the
18269     assembler for particular code sequences.  The complete list of
18270     option arguments is shown below:
18271
18272     'push'
18273     'pop'
18274          Pushes or pops the current option stack.  These should be used
18275          whenever changing an option in line with assembly code in
18276          order to ensure the user's command-line options are respected
18277          for the bulk of the file being assembled.
18278
18279     'rvc'
18280     'norvc'
18281          Enables or disables the generation of compressed instructions.
18282          Instructions are opportunistically compressed by the RISC-V
18283          assembler when possible, but sometimes this behavior is not
18284          desirable.
18285
18286     'pic'
18287     'nopic'
18288          Enables or disables position-independent code generation.
18289          Unless you really know what you're doing, this should only be
18290          at the top of a file.
18291
18292     'relax'
18293     'norelax'
18294          Enables or disables relaxation.  The RISC-V assembler and
18295          linker opportunistically relax some code sequences, but
18296          sometimes this behavior is not desirable.
18297
18298'.insn VALUE'
18299'.insn VALUE'
18300     This directive permits the numeric representation of an
18301     instructions and makes the assembler insert the operands according
18302     to one of the instruction formats for '.insn' (*note
18303     RISC-V-Formats::).  For example, the instruction 'add a0, a1, a2'
18304     could be written as '.insn r 0x33, 0, 0, a0, a1, a2'.
18305
18306'.attribute TAG, VALUE'
18307     Set the object attribute TAG to VALUE.
18308
18309     The TAG is either an attribute number, or one of the following:
18310     'Tag_RISCV_arch', 'Tag_RISCV_stack_align',
18311     'Tag_RISCV_unaligned_access', 'Tag_RISCV_priv_spec',
18312     'Tag_RISCV_priv_spec_minor', 'Tag_RISCV_priv_spec_revision'.
18313
18314
18315File: as.info,  Node: RISC-V-Formats,  Next: RISC-V-ATTRIBUTE,  Prev: RISC-V-Directives,  Up: RISC-V-Dependent
18316
183179.38.3 Instruction Formats
18318--------------------------
18319
18320The RISC-V Instruction Set Manual Volume I: User-Level ISA lists 12
18321instruction formats where some of the formats have multiple variants.
18322For the '.insn' pseudo directive the assembler recognizes some of the
18323formats.  Typically, the most general variant of the instruction format
18324is used by the '.insn' directive.
18325
18326   The following table lists the abbreviations used in the table of
18327instruction formats:
18328
18329     opcode      Unsigned immediate or opcode name for 7-bits opcode.
18330     opcode2     Unsigned immediate or opcode name for 2-bits opcode.
18331     func7       Unsigned immediate for 7-bits function code.
18332     func6       Unsigned immediate for 6-bits function code.
18333     func4       Unsigned immediate for 4-bits function code.
18334     func3       Unsigned immediate for 3-bits function code.
18335     func2       Unsigned immediate for 2-bits function code.
18336     rd          Destination register number for operand x, can be GPR or FPR.
18337     rd'         Destination register number for operand x,
18338                 only accept s0-s1, a0-a5, fs0-fs1 and fa0-fa5.
18339     rs1         First source register number for operand x, can be GPR or FPR.
18340     rs1'        First source register number for operand x,
18341                 only accept s0-s1, a0-a5, fs0-fs1 and fa0-fa5.
18342     rs2         Second source register number for operand x, can be GPR or FPR.
18343     rs2'        Second source register number for operand x,
18344                 only accept s0-s1, a0-a5, fs0-fs1 and fa0-fa5.
18345     simm12      Sign-extended 12-bit immediate for operand x.
18346     simm20      Sign-extended 20-bit immediate for operand x.
18347     simm6       Sign-extended 6-bit immediate for operand x.
18348     uimm8       Unsigned 8-bit immediate for operand x.
18349     symbol      Symbol or lable reference for operand x.
18350
18351   The following table lists all available opcode name:
18352
18353'C0'
18354'C1'
18355'C2'
18356     Opcode space for compressed instructions.
18357
18358'LOAD'
18359     Opcode space for load instructions.
18360
18361'LOAD_FP'
18362     Opcode space for floating-point load instructions.
18363
18364'STORE'
18365     Opcode space for store instructions.
18366
18367'STORE_FP'
18368     Opcode space for floating-point store instructions.
18369
18370'AUIPC'
18371     Opcode space for auipc instruction.
18372
18373'LUI'
18374     Opcode space for lui instruction.
18375
18376'BRANCH'
18377     Opcode space for branch instructions.
18378
18379'JAL'
18380     Opcode space for jal instruction.
18381
18382'JALR'
18383     Opcode space for jalr instruction.
18384
18385'OP'
18386     Opcode space for ALU instructions.
18387
18388'OP_32'
18389     Opcode space for 32-bits ALU instructions.
18390
18391'OP_IMM'
18392     Opcode space for ALU with immediate instructions.
18393
18394'OP_IMM_32'
18395     Opcode space for 32-bits ALU with immediate instructions.
18396
18397'OP_FP'
18398     Opcode space for floating-point operation instructions.
18399
18400'MADD'
18401     Opcode space for madd instruction.
18402
18403'MSUB'
18404     Opcode space for msub instruction.
18405
18406'NMADD'
18407     Opcode space for nmadd instruction.
18408
18409'NMSUB'
18410     Opcode space for msub instruction.
18411
18412'AMO'
18413     Opcode space for atomic memory operation instructions.
18414
18415'MISC_MEM'
18416     Opcode space for misc instructions.
18417
18418'SYSTEM'
18419     Opcode space for system instructions.
18420
18421'CUSTOM_0'
18422'CUSTOM_1'
18423'CUSTOM_2'
18424'CUSTOM_3'
18425     Opcode space for customize instructions.
18426
18427   An instruction is two or four bytes in length and must be aligned on
18428a 2 byte boundary.  The first two bits of the instruction specify the
18429length of the instruction, 00, 01 and 10 indicates a two byte
18430instruction, 11 indicates a four byte instruction.
18431
18432   The following table lists the RISC-V instruction formats that are
18433available with the '.insn' pseudo directive:
18434
18435'R type: .insn r opcode, func3, func7, rd, rs1, rs2'
18436     +-------+-----+-----+-------+----+-------------+
18437     | func7 | rs2 | rs1 | func3 | rd |      opcode |
18438     +-------+-----+-----+-------+----+-------------+
18439     31      25    20    15      12   7             0
18440
18441'R type with 4 register operands: .insn r opcode, func3, func2, rd, rs1, rs2, rs3'
18442'R4 type: .insn r4 opcode, func3, func2, rd, rs1, rs2, rs3'
18443     +-----+-------+-----+-----+-------+----+-------------+
18444     | rs3 | func2 | rs2 | rs1 | func3 | rd |      opcode |
18445     +-----+-------+-----+-----+-------+----+-------------+
18446     31    27      25    20    15      12   7             0
18447
18448'I type: .insn i opcode, func3, rd, rs1, simm12'
18449     +-------------+-----+-------+----+-------------+
18450     |      simm12 | rs1 | func3 | rd |      opcode |
18451     +-------------+-----+-------+----+-------------+
18452     31            20    15      12   7             0
18453
18454'S type: .insn s opcode, func3, rd, rs1, simm12'
18455     +--------------+-----+-----+-------+-------------+-------------+
18456     | simm12[11:5] | rs2 | rs1 | func3 | simm12[4:0] |      opcode |
18457     +--------------+-----+-----+-------+-------------+-------------+
18458     31             25    20    15      12            7             0
18459
18460'SB type: .insn sb opcode, func3, rd, rs1, symbol'
18461'SB type: .insn sb opcode, func3, rd, simm12(rs1)'
18462'B type: .insn s opcode, func3, rd, rs1, symbol'
18463'B type: .insn s opcode, func3, rd, simm12(rs1)'
18464     +------------+--------------+-----+-----+-------+-------------+-------------+--------+
18465     | simm12[12] | simm12[10:5] | rs2 | rs1 | func3 | simm12[4:1] | simm12[11]] | opcode |
18466     +------------+--------------+-----+-----+-------+-------------+-------------+--------+
18467     31          30            25    20    15      12           7            0
18468
18469'U type: .insn u opcode, rd, simm20'
18470     +---------------------------+----+-------------+
18471     |                    simm20 | rd |      opcode |
18472     +---------------------------+----+-------------+
18473     31                          12   7             0
18474
18475'UJ type: .insn uj opcode, rd, symbol'
18476'J type: .insn j opcode, rd, symbol'
18477     +------------+--------------+------------+---------------+----+-------------+
18478     | simm20[20] | simm20[10:1] | simm20[11] | simm20[19:12] | rd |      opcode |
18479     +------------+--------------+------------+---------------+----+-------------+
18480     31           30             21           20              12   7             0
18481
18482'CR type: .insn cr opcode2, func4, rd, rs2'
18483     +---------+--------+-----+---------+
18484     |   func4 | rd/rs1 | rs2 | opcode2 |
18485     +---------+--------+-----+---------+
18486     15        12       7     2        0
18487
18488'CI type: .insn ci opcode2, func3, rd, simm6'
18489     +---------+-----+--------+-----+---------+
18490     |   func3 | imm | rd/rs1 | imm | opcode2 |
18491     +---------+-----+--------+-----+---------+
18492     15        13    12       7     2         0
18493
18494'CIW type: .insn ciw opcode2, func3, rd, uimm8'
18495     +---------+--------------+-----+---------+
18496     |   func3 |          imm | rd' | opcode2 |
18497     +---------+--------------+-----+---------+
18498     15        13             7     2         0
18499
18500'CA type: .insn ca opcode2, func6, func2, rd, rs2'
18501     +---------+----------+-------+------+--------+
18502     |   func6 | rd'/rs1' | func2 | rs2' | opcode |
18503     +---------+----------+-------+------+--------+
18504     15        10         7       5      2        0
18505
18506'CB type: .insn cb opcode2, func3, rs1, symbol'
18507     +---------+--------+------+--------+---------+
18508     |   func3 | offset | rs1' | offset | opcode2 |
18509     +---------+--------+------+--------+---------+
18510     15        13       10     7        2         0
18511
18512'CJ type: .insn cj opcode2, symbol'
18513     +---------+--------------------+---------+
18514     |   func3 |        jump target | opcode2 |
18515     +---------+--------------------+---------+
18516     15        13             7     2         0
18517
18518   For the complete list of all instruction format variants see The
18519RISC-V Instruction Set Manual Volume I: User-Level ISA.
18520
18521
18522File: as.info,  Node: RISC-V-ATTRIBUTE,  Prev: RISC-V-Formats,  Up: RISC-V-Dependent
18523
185249.38.4 RISC-V Object Attribute
18525------------------------------
18526
18527RISC-V attributes have a string value if the tag number is odd and an
18528integer value if the tag number is even.
18529
18530Tag_RISCV_stack_align (4)
18531     Tag_RISCV_strict_align records the N-byte stack alignment for this
18532     object.  The default value is 16 for RV32I or RV64I, and 4 for
18533     RV32E.
18534
18535     The smallest value will be used if object files with different
18536     Tag_RISCV_stack_align values are merged.
18537
18538Tag_RISCV_arch (5)
18539     Tag_RISCV_arch contains a string for the target architecture taken
18540     from the option '-march'.  Different architectures will be
18541     integrated into a superset when object files are merged.
18542
18543     Note that the version information of the target architecture must
18544     be presented explicitly in the attribute and abbreviations must be
18545     expanded.  The version information, if not given by '-march', must
18546     be in accordance with the default specified by the tool.  For
18547     example, the architecture 'RV32I' has to be recorded in the
18548     attribute as 'RV32I2P0' in which '2P0' stands for the default
18549     version of its base ISA. On the other hand, the architecture
18550     'RV32G' has to be presented as 'RV32I2P0_M2P0_A2P0_F2P0_D2P0' in
18551     which the abbreviation 'G' is expanded to the 'IMAFD' combination
18552     with default versions of the standard extensions.
18553
18554Tag_RISCV_unaligned_access (6)
18555     Tag_RISCV_unaligned_access is 0 for files that do not allow any
18556     unaligned memory accesses, and 1 for files that do allow unaligned
18557     memory accesses.
18558
18559Tag_RISCV_priv_spec (8)
18560Tag_RISCV_priv_spec_minor (10)
18561Tag_RISCV_priv_spec_revision (12)
18562     Tag_RISCV_priv_spec contains the major/minor/revision version
18563     information of the privileged specification.  It will report errors
18564     if object files of different privileged specification versions are
18565     merged.
18566
18567
18568File: as.info,  Node: RL78-Dependent,  Next: RX-Dependent,  Prev: RISC-V-Dependent,  Up: Machine Dependencies
18569
185709.39 RL78 Dependent Features
18571============================
18572
18573* Menu:
18574
18575* RL78-Opts::                   RL78 Assembler Command-line Options
18576* RL78-Modifiers::              Symbolic Operand Modifiers
18577* RL78-Directives::             Assembler Directives
18578* RL78-Syntax::                 Syntax
18579
18580
18581File: as.info,  Node: RL78-Opts,  Next: RL78-Modifiers,  Up: RL78-Dependent
18582
185839.39.1 RL78 Options
18584-------------------
18585
18586'relax'
18587     Enable support for link-time relaxation.
18588
18589'norelax'
18590     Disable support for link-time relaxation (default).
18591
18592'mg10'
18593     Mark the generated binary as targeting the G10 variant of the RL78
18594     architecture.
18595
18596'mg13'
18597     Mark the generated binary as targeting the G13 variant of the RL78
18598     architecture.
18599
18600'mg14'
18601'mrl78'
18602     Mark the generated binary as targeting the G14 variant of the RL78
18603     architecture.  This is the default.
18604
18605'm32bit-doubles'
18606     Mark the generated binary as one that uses 32-bits to hold the
18607     'double' floating point type.  This is the default.
18608
18609'm64bit-doubles'
18610     Mark the generated binary as one that uses 64-bits to hold the
18611     'double' floating point type.
18612
18613
18614File: as.info,  Node: RL78-Modifiers,  Next: RL78-Directives,  Prev: RL78-Opts,  Up: RL78-Dependent
18615
186169.39.2 Symbolic Operand Modifiers
18617---------------------------------
18618
18619The RL78 has three modifiers that adjust the relocations used by the
18620linker:
18621
18622'%lo16()'
18623
18624     When loading a 20-bit (or wider) address into registers, this
18625     modifier selects the 16 least significant bits.
18626
18627            movw ax,#%lo16(_sym)
18628
18629'%hi16()'
18630
18631     When loading a 20-bit (or wider) address into registers, this
18632     modifier selects the 16 most significant bits.
18633
18634            movw ax,#%hi16(_sym)
18635
18636'%hi8()'
18637
18638     When loading a 20-bit (or wider) address into registers, this
18639     modifier selects the 8 bits that would go into CS or ES (i.e.  bits
18640     23..16).
18641
18642            mov es, #%hi8(_sym)
18643
18644
18645File: as.info,  Node: RL78-Directives,  Next: RL78-Syntax,  Prev: RL78-Modifiers,  Up: RL78-Dependent
18646
186479.39.3 Assembler Directives
18648---------------------------
18649
18650In addition to the common directives, the RL78 adds these:
18651
18652'.double'
18653     Output a constant in "double" format, which is either a 32-bit or a
18654     64-bit floating point value, depending upon the setting of the
18655     '-m32bit-doubles'|'-m64bit-doubles' command-line option.
18656
18657'.bss'
18658     Select the BSS section.
18659
18660'.3byte'
18661     Output a constant value in a three byte format.
18662
18663'.int'
18664'.word'
18665     Output a constant value in a four byte format.
18666
18667
18668File: as.info,  Node: RL78-Syntax,  Prev: RL78-Directives,  Up: RL78-Dependent
18669
186709.39.4 Syntax for the RL78
18671--------------------------
18672
18673* Menu:
18674
18675* RL78-Chars::                Special Characters
18676
18677
18678File: as.info,  Node: RL78-Chars,  Up: RL78-Syntax
18679
186809.39.4.1 Special Characters
18681...........................
18682
18683The presence of a ';' appearing anywhere on a line indicates the start
18684of a comment that extends to the end of that line.
18685
18686   If a '#' appears as the first character of a line then the whole line
18687is treated as a comment, but in this case the line can also be a logical
18688line number directive (*note Comments::) or a preprocessor control
18689command (*note Preprocessing::).
18690
18691   The '|' character can be used to separate statements on the same
18692line.
18693
18694
18695File: as.info,  Node: RX-Dependent,  Next: S/390-Dependent,  Prev: RL78-Dependent,  Up: Machine Dependencies
18696
186979.40 RX Dependent Features
18698==========================
18699
18700* Menu:
18701
18702* RX-Opts::                   RX Assembler Command-line Options
18703* RX-Modifiers::              Symbolic Operand Modifiers
18704* RX-Directives::             Assembler Directives
18705* RX-Float::                  Floating Point
18706* RX-Syntax::                 Syntax
18707
18708
18709File: as.info,  Node: RX-Opts,  Next: RX-Modifiers,  Up: RX-Dependent
18710
187119.40.1 RX Options
18712-----------------
18713
18714The Renesas RX port of 'as' has a few target specific command-line
18715options:
18716
18717'-m32bit-doubles'
18718     This option controls the ABI and indicates to use a 32-bit float
18719     ABI. It has no effect on the assembled instructions, but it does
18720     influence the behaviour of the '.double' pseudo-op.  This is the
18721     default.
18722
18723'-m64bit-doubles'
18724     This option controls the ABI and indicates to use a 64-bit float
18725     ABI. It has no effect on the assembled instructions, but it does
18726     influence the behaviour of the '.double' pseudo-op.
18727
18728'-mbig-endian'
18729     This option controls the ABI and indicates to use a big-endian data
18730     ABI. It has no effect on the assembled instructions, but it does
18731     influence the behaviour of the '.short', '.hword', '.int', '.word',
18732     '.long', '.quad' and '.octa' pseudo-ops.
18733
18734'-mlittle-endian'
18735     This option controls the ABI and indicates to use a little-endian
18736     data ABI. It has no effect on the assembled instructions, but it
18737     does influence the behaviour of the '.short', '.hword', '.int',
18738     '.word', '.long', '.quad' and '.octa' pseudo-ops.  This is the
18739     default.
18740
18741'-muse-conventional-section-names'
18742     This option controls the default names given to the code (.text),
18743     initialised data (.data) and uninitialised data sections (.bss).
18744
18745'-muse-renesas-section-names'
18746     This option controls the default names given to the code (.P),
18747     initialised data (.D_1) and uninitialised data sections (.B_1).
18748     This is the default.
18749
18750'-msmall-data-limit'
18751     This option tells the assembler that the small data limit feature
18752     of the RX port of GCC is being used.  This results in the assembler
18753     generating an undefined reference to a symbol called '__gp' for use
18754     by the relocations that are needed to support the small data limit
18755     feature.  This option is not enabled by default as it would
18756     otherwise pollute the symbol table.
18757
18758'-mpid'
18759     This option tells the assembler that the position independent data
18760     of the RX port of GCC is being used.  This results in the assembler
18761     generating an undefined reference to a symbol called '__pid_base',
18762     and also setting the RX_PID flag bit in the e_flags field of the
18763     ELF header of the object file.
18764
18765'-mint-register=NUM'
18766     This option tells the assembler how many registers have been
18767     reserved for use by interrupt handlers.  This is needed in order to
18768     compute the correct values for the '%gpreg' and '%pidreg' meta
18769     registers.
18770
18771'-mgcc-abi'
18772     This option tells the assembler that the old GCC ABI is being used
18773     by the assembled code.  With this version of the ABI function
18774     arguments that are passed on the stack are aligned to a 32-bit
18775     boundary.
18776
18777'-mrx-abi'
18778     This option tells the assembler that the official RX ABI is being
18779     used by the assembled code.  With this version of the ABI function
18780     arguments that are passed on the stack are aligned to their natural
18781     alignments.  This option is the default.
18782
18783'-mcpu=NAME'
18784     This option tells the assembler the target CPU type.  Currently the
18785     'rx100', 'rx200', 'rx600', 'rx610', 'rxv2', 'rxv3' and 'rxv3-dfpu'
18786     are recognised as valid cpu names.  Attempting to assemble an
18787     instructionnot supported by the indicated cpu type will result in
18788     an error message being generated.
18789
18790'-mno-allow-string-insns'
18791     This option tells the assembler to mark the object file that it is
18792     building as one that does not use the string instructions 'SMOVF',
18793     'SCMPU', 'SMOVB', 'SMOVU', 'SUNTIL' 'SWHILE' or the 'RMPA'
18794     instruction.  In addition the mark tells the linker to complain if
18795     an attempt is made to link the binary with another one that does
18796     use any of these instructions.
18797
18798     Note - the inverse of this option, '-mallow-string-insns', is not
18799     needed.  The assembler automatically detects the use of the the
18800     instructions in the source code and labels the resulting object
18801     file appropriately.  If no string instructions are detected then
18802     the object file is labelled as being one that can be linked with
18803     either string-using or string-banned object files.
18804
18805
18806File: as.info,  Node: RX-Modifiers,  Next: RX-Directives,  Prev: RX-Opts,  Up: RX-Dependent
18807
188089.40.2 Symbolic Operand Modifiers
18809---------------------------------
18810
18811The assembler supports one modifier when using symbol addresses in RX
18812instruction operands.  The general syntax is the following:
18813
18814     %gp(symbol)
18815
18816   The modifier returns the offset from the __GP symbol to the specified
18817symbol as a 16-bit value.  The intent is that this offset should be used
18818in a register+offset move instruction when generating references to
18819small data.  Ie, like this:
18820
18821       mov.W	 %gp(_foo)[%gpreg], r1
18822
18823   The assembler also supports two meta register names which can be used
18824to refer to registers whose values may not be known to the programmer.
18825These meta register names are:
18826
18827'%gpreg'
18828     The small data address register.
18829
18830'%pidreg'
18831     The PID base address register.
18832
18833   Both registers normally have the value r13, but this can change if
18834some registers have been reserved for use by interrupt handlers or if
18835both the small data limit and position independent data features are
18836being used at the same time.
18837
18838
18839File: as.info,  Node: RX-Directives,  Next: RX-Float,  Prev: RX-Modifiers,  Up: RX-Dependent
18840
188419.40.3 Assembler Directives
18842---------------------------
18843
18844The RX version of 'as' has the following specific assembler directives:
18845
18846'.3byte'
18847     Inserts a 3-byte value into the output file at the current
18848     location.
18849
18850'.fetchalign'
18851     If the next opcode following this directive spans a fetch line
18852     boundary (8 byte boundary), the opcode is aligned to that boundary.
18853     If the next opcode does not span a fetch line, this directive has
18854     no effect.  Note that one or more labels may be between this
18855     directive and the opcode; those labels are aligned as well.  Any
18856     inserted bytes due to alignment will form a NOP opcode.
18857
18858
18859File: as.info,  Node: RX-Float,  Next: RX-Syntax,  Prev: RX-Directives,  Up: RX-Dependent
18860
188619.40.4 Floating Point
18862---------------------
18863
18864The floating point formats generated by directives are these.
18865
18866'.float'
18867     'Single' precision (32-bit) floating point constants.
18868
18869'.double'
18870     If the '-m64bit-doubles' command-line option has been specified
18871     then then 'double' directive generates 'double' precision (64-bit)
18872     floating point constants, otherwise it generates 'single' precision
18873     (32-bit) floating point constants.  To force the generation of
18874     64-bit floating point constants used the 'dc.d' directive instead.
18875
18876
18877File: as.info,  Node: RX-Syntax,  Prev: RX-Float,  Up: RX-Dependent
18878
188799.40.5 Syntax for the RX
18880------------------------
18881
18882* Menu:
18883
18884* RX-Chars::                Special Characters
18885
18886
18887File: as.info,  Node: RX-Chars,  Up: RX-Syntax
18888
188899.40.5.1 Special Characters
18890...........................
18891
18892The presence of a ';' appearing anywhere on a line indicates the start
18893of a comment that extends to the end of that line.
18894
18895   If a '#' appears as the first character of a line then the whole line
18896is treated as a comment, but in this case the line can also be a logical
18897line number directive (*note Comments::) or a preprocessor control
18898command (*note Preprocessing::).
18899
18900   The '!' character can be used to separate statements on the same
18901line.
18902
18903
18904File: as.info,  Node: S/390-Dependent,  Next: SCORE-Dependent,  Prev: RX-Dependent,  Up: Machine Dependencies
18905
189069.41 IBM S/390 Dependent Features
18907=================================
18908
18909The s390 version of 'as' supports two architectures modes and eleven
18910chip levels.  The architecture modes are the Enterprise System
18911Architecture (ESA) and the newer z/Architecture mode.  The chip levels
18912are g5 (or arch3), g6, z900 (or arch5), z990 (or arch6), z9-109, z9-ec
18913(or arch7), z10 (or arch8), z196 (or arch9), zEC12 (or arch10), z13 (or
18914arch11), z14 (or arch12), and z15 (or arch13).
18915
18916* Menu:
18917
18918* s390 Options::                Command-line Options.
18919* s390 Characters::		Special Characters.
18920* s390 Syntax::                 Assembler Instruction syntax.
18921* s390 Directives::             Assembler Directives.
18922* s390 Floating Point::         Floating Point.
18923
18924
18925File: as.info,  Node: s390 Options,  Next: s390 Characters,  Up: S/390-Dependent
18926
189279.41.1 Options
18928--------------
18929
18930The following table lists all available s390 specific options:
18931
18932'-m31 | -m64'
18933     Select 31- or 64-bit ABI implying a word size of 32- or 64-bit.
18934
18935     These options are only available with the ELF object file format,
18936     and require that the necessary BFD support has been included (on a
18937     31-bit platform you must add -enable-64-bit-bfd on the call to the
18938     configure script to enable 64-bit usage and use s390x as target
18939     platform).
18940
18941'-mesa | -mzarch'
18942     Select the architecture mode, either the Enterprise System
18943     Architecture (esa) mode or the z/Architecture mode (zarch).
18944
18945     The 64-bit instructions are only available with the z/Architecture
18946     mode.  The combination of '-m64' and '-mesa' results in a warning
18947     message.
18948
18949'-march=CPU'
18950     This option specifies the target processor.  The following
18951     processor names are recognized: 'g5' (or 'arch3'), 'g6', 'z900' (or
18952     'arch5'), 'z990' (or 'arch6'), 'z9-109', 'z9-ec' (or 'arch7'),
18953     'z10' (or 'arch8'), 'z196' (or 'arch9'), 'zEC12' (or 'arch10'),
18954     'z13' (or 'arch11'), 'z14' (or 'arch12'), and 'z15' (or 'arch13').
18955
18956     Assembling an instruction that is not supported on the target
18957     processor results in an error message.
18958
18959     The processor names starting with 'arch' refer to the edition
18960     number in the Principle of Operations manual.  They can be used as
18961     alternate processor names and have been added for compatibility
18962     with the IBM XL compiler.
18963
18964     'arch3', 'g5' and 'g6' cannot be used with the '-mzarch' option
18965     since the z/Architecture mode is not supported on these processor
18966     levels.
18967
18968     There is no 'arch4' option supported.  'arch4' matches
18969     '-march=arch5 -mesa'.
18970
18971'-mregnames'
18972     Allow symbolic names for registers.
18973
18974'-mno-regnames'
18975     Do not allow symbolic names for registers.
18976
18977'-mwarn-areg-zero'
18978     Warn whenever the operand for a base or index register has been
18979     specified but evaluates to zero.  This can indicate the misuse of
18980     general purpose register 0 as an address register.
18981
18982
18983File: as.info,  Node: s390 Characters,  Next: s390 Syntax,  Prev: s390 Options,  Up: S/390-Dependent
18984
189859.41.2 Special Characters
18986-------------------------
18987
18988'#' is the line comment character.
18989
18990   If a '#' appears as the first character of a line then the whole line
18991is treated as a comment, but in this case the line could also be a
18992logical line number directive (*note Comments::) or a preprocessor
18993control command (*note Preprocessing::).
18994
18995   The ';' character can be used instead of a newline to separate
18996statements.
18997
18998
18999File: as.info,  Node: s390 Syntax,  Next: s390 Directives,  Prev: s390 Characters,  Up: S/390-Dependent
19000
190019.41.3 Instruction syntax
19002-------------------------
19003
19004The assembler syntax closely follows the syntax outlined in Enterprise
19005Systems Architecture/390 Principles of Operation (SA22-7201) and the
19006z/Architecture Principles of Operation (SA22-7832).
19007
19008   Each instruction has two major parts, the instruction mnemonic and
19009the instruction operands.  The instruction format varies.
19010
19011* Menu:
19012
19013* s390 Register::               Register Naming
19014* s390 Mnemonics::              Instruction Mnemonics
19015* s390 Operands::               Instruction Operands
19016* s390 Formats::                Instruction Formats
19017* s390 Aliases::		Instruction Aliases
19018* s390 Operand Modifier::       Instruction Operand Modifier
19019* s390 Instruction Marker::     Instruction Marker
19020* s390 Literal Pool Entries::   Literal Pool Entries
19021
19022
19023File: as.info,  Node: s390 Register,  Next: s390 Mnemonics,  Up: s390 Syntax
19024
190259.41.3.1 Register naming
19026........................
19027
19028The 'as' recognizes a number of predefined symbols for the various
19029processor registers.  A register specification in one of the instruction
19030formats is an unsigned integer between 0 and 15.  The specific
19031instruction and the position of the register in the instruction format
19032denotes the type of the register.  The register symbols are prefixed
19033with '%':
19034
19035     %rN   the 16 general purpose registers, 0 <= N <= 15
19036     %fN   the 16 floating point registers, 0 <= N <= 15
19037     %aN   the 16 access registers, 0 <= N <= 15
19038     %cN   the 16 control registers, 0 <= N <= 15
19039     %lit  an alias for the general purpose register %r13
19040     %sp   an alias for the general purpose register %r15
19041
19042
19043File: as.info,  Node: s390 Mnemonics,  Next: s390 Operands,  Prev: s390 Register,  Up: s390 Syntax
19044
190459.41.3.2 Instruction Mnemonics
19046..............................
19047
19048All instructions documented in the Principles of Operation are supported
19049with the mnemonic and order of operands as described.  The instruction
19050mnemonic identifies the instruction format (*note s390 Formats::) and
19051the specific operation code for the instruction.  For example, the 'lr'
19052mnemonic denotes the instruction format 'RR' with the operation code
19053'0x18'.
19054
19055   The definition of the various mnemonics follows a scheme, where the
19056first character usually hint at the type of the instruction:
19057
19058     a          add instruction, for example 'al' for add logical 32-bit
19059     b          branch instruction, for example 'bc' for branch on condition
19060     c          compare or convert instruction, for example 'cr' for compare
19061                register 32-bit
19062     d          divide instruction, for example 'dlr' devide logical register
19063                64-bit to 32-bit
19064     i          insert instruction, for example 'ic' insert character
19065     l          load instruction, for example 'ltr' load and test register
19066     mv         move instruction, for example 'mvc' move character
19067     m          multiply instruction, for example 'mh' multiply halfword
19068     n          and instruction, for example 'ni' and immediate
19069     o          or instruction, for example 'oc' or character
19070     sla, sll   shift left single instruction
19071     sra, srl   shift right single instruction
19072     st         store instruction, for example 'stm' store multiple
19073     s          subtract instruction, for example 'slr' subtract
19074                logical 32-bit
19075     t          test or translate instruction, of example 'tm' test under mask
19076     x          exclusive or instruction, for example 'xc' exclusive or
19077                character
19078
19079   Certain characters at the end of the mnemonic may describe a property
19080of the instruction:
19081
19082     c   the instruction uses a 8-bit character operand
19083     f   the instruction extends a 32-bit operand to 64 bit
19084     g   the operands are treated as 64-bit values
19085     h   the operand uses a 16-bit halfword operand
19086     i   the instruction uses an immediate operand
19087     l   the instruction uses unsigned, logical operands
19088     m   the instruction uses a mask or operates on multiple values
19089     r   if r is the last character, the instruction operates on registers
19090     y   the instruction uses 20-bit displacements
19091
19092   There are many exceptions to the scheme outlined in the above lists,
19093in particular for the privileged instructions.  For non-privileged
19094instruction it works quite well, for example the instruction 'clgfr' c:
19095compare instruction, l: unsigned operands, g: 64-bit operands, f: 32- to
1909664-bit extension, r: register operands.  The instruction compares an
1909764-bit value in a register with the zero extended 32-bit value from a
19098second register.  For a complete list of all mnemonics see appendix B in
19099the Principles of Operation.
19100
19101
19102File: as.info,  Node: s390 Operands,  Next: s390 Formats,  Prev: s390 Mnemonics,  Up: s390 Syntax
19103
191049.41.3.3 Instruction Operands
19105.............................
19106
19107Instruction operands can be grouped into three classes, operands located
19108in registers, immediate operands, and operands in storage.
19109
19110   A register operand can be located in general, floating-point, access,
19111or control register.  The register is identified by a four-bit field.
19112The field containing the register operand is called the R field.
19113
19114   Immediate operands are contained within the instruction and can have
191158, 16 or 32 bits.  The field containing the immediate operand is called
19116the I field.  Dependent on the instruction the I field is either signed
19117or unsigned.
19118
19119   A storage operand consists of an address and a length.  The address
19120of a storage operands can be specified in any of these ways:
19121
19122   * The content of a single general R
19123   * The sum of the content of a general register called the base
19124     register B plus the content of a displacement field D
19125   * The sum of the contents of two general registers called the index
19126     register X and the base register B plus the content of a
19127     displacement field
19128   * The sum of the current instruction address and a 32-bit signed
19129     immediate field multiplied by two.
19130
19131   The length of a storage operand can be:
19132
19133   * Implied by the instruction
19134   * Specified by a bitmask
19135   * Specified by a four-bit or eight-bit length field L
19136   * Specified by the content of a general register
19137
19138   The notation for storage operand addresses formed from multiple
19139fields is as follows:
19140
19141'Dn(Bn)'
19142     the address for operand number n is formed from the content of
19143     general register Bn called the base register and the displacement
19144     field Dn.
19145'Dn(Xn,Bn)'
19146     the address for operand number n is formed from the content of
19147     general register Xn called the index register, general register Bn
19148     called the base register and the displacement field Dn.
19149'Dn(Ln,Bn)'
19150     the address for operand number n is formed from the content of
19151     general register Bn called the base register and the displacement
19152     field Dn.  The length of the operand n is specified by the field
19153     Ln.
19154
19155   The base registers Bn and the index registers Xn of a storage operand
19156can be skipped.  If Bn and Xn are skipped, a zero will be stored to the
19157operand field.  The notation changes as follows:
19158
19159     full notation          short notation
19160     ----------------------------------------------
19161     Dn(0,Bn)               Dn(Bn)
19162     Dn(0,0)                Dn
19163     Dn(0)                  Dn
19164     Dn(Ln,0)               Dn(Ln)
19165
19166
19167File: as.info,  Node: s390 Formats,  Next: s390 Aliases,  Prev: s390 Operands,  Up: s390 Syntax
19168
191699.41.3.4 Instruction Formats
19170............................
19171
19172The Principles of Operation manuals lists 26 instruction formats where
19173some of the formats have multiple variants.  For the '.insn' pseudo
19174directive the assembler recognizes some of the formats.  Typically, the
19175most general variant of the instruction format is used by the '.insn'
19176directive.
19177
19178   The following table lists the abbreviations used in the table of
19179instruction formats:
19180
19181     OpCode / OpCd   Part of the op code.
19182     Bx              Base register number for operand x.
19183     Dx              Displacement for operand x.
19184     DLx             Displacement lower 12 bits for operand x.
19185     DHx             Displacement higher 8-bits for operand x.
19186     Rx              Register number for operand x.
19187     Xx              Index register number for operand x.
19188     Ix              Signed immediate for operand x.
19189     Ux              Unsigned immediate for operand x.
19190
19191   An instruction is two, four, or six bytes in length and must be
19192aligned on a 2 byte boundary.  The first two bits of the instruction
19193specify the length of the instruction, 00 indicates a two byte
19194instruction, 01 and 10 indicates a four byte instruction, and 11
19195indicates a six byte instruction.
19196
19197   The following table lists the s390 instruction formats that are
19198available with the '.insn' pseudo directive:
19199
19200'E format'
19201     +-------------+
19202     |    OpCode   |
19203     +-------------+
19204     0            15
19205
19206'RI format: <insn> R1,I2'
19207     +--------+----+----+------------------+
19208     | OpCode | R1 |OpCd|        I2        |
19209     +--------+----+----+------------------+
19210     0        8    12   16                31
19211
19212'RIE format: <insn> R1,R3,I2'
19213     +--------+----+----+------------------+--------+--------+
19214     | OpCode | R1 | R3 |        I2        |////////| OpCode |
19215     +--------+----+----+------------------+--------+--------+
19216     0        8    12   16                 32       40      47
19217
19218'RIL format: <insn> R1,I2'
19219     +--------+----+----+------------------------------------+
19220     | OpCode | R1 |OpCd|                  I2                |
19221     +--------+----+----+------------------------------------+
19222     0        8    12   16                                  47
19223
19224'RILU format: <insn> R1,U2'
19225     +--------+----+----+------------------------------------+
19226     | OpCode | R1 |OpCd|                  U2                |
19227     +--------+----+----+------------------------------------+
19228     0        8    12   16                                  47
19229
19230'RIS format: <insn> R1,I2,M3,D4(B4)'
19231     +--------+----+----+----+-------------+--------+--------+
19232     | OpCode | R1 | M3 | B4 |     D4      |   I2   | Opcode |
19233     +--------+----+----+----+-------------+--------+--------+
19234     0        8    12   16   20            32       36      47
19235
19236'RR format: <insn> R1,R2'
19237     +--------+----+----+
19238     | OpCode | R1 | R2 |
19239     +--------+----+----+
19240     0        8    12  15
19241
19242'RRE format: <insn> R1,R2'
19243     +------------------+--------+----+----+
19244     |      OpCode      |////////| R1 | R2 |
19245     +------------------+--------+----+----+
19246     0                  16       24   28  31
19247
19248'RRF format: <insn> R1,R2,R3,M4'
19249     +------------------+----+----+----+----+
19250     |      OpCode      | R3 | M4 | R1 | R2 |
19251     +------------------+----+----+----+----+
19252     0                  16   20   24   28  31
19253
19254'RRS format: <insn> R1,R2,M3,D4(B4)'
19255     +--------+----+----+----+-------------+----+----+--------+
19256     | OpCode | R1 | R3 | B4 |     D4      | M3 |////| OpCode |
19257     +--------+----+----+----+-------------+----+----+--------+
19258     0        8    12   16   20            32   36   40      47
19259
19260'RS format: <insn> R1,R3,D2(B2)'
19261     +--------+----+----+----+-------------+
19262     | OpCode | R1 | R3 | B2 |     D2      |
19263     +--------+----+----+----+-------------+
19264     0        8    12   16   20           31
19265
19266'RSE format: <insn> R1,R3,D2(B2)'
19267     +--------+----+----+----+-------------+--------+--------+
19268     | OpCode | R1 | R3 | B2 |     D2      |////////| OpCode |
19269     +--------+----+----+----+-------------+--------+--------+
19270     0        8    12   16   20            32       40      47
19271
19272'RSI format: <insn> R1,R3,I2'
19273     +--------+----+----+------------------------------------+
19274     | OpCode | R1 | R3 |                  I2                |
19275     +--------+----+----+------------------------------------+
19276     0        8    12   16                                  47
19277
19278'RSY format: <insn> R1,R3,D2(B2)'
19279     +--------+----+----+----+-------------+--------+--------+
19280     | OpCode | R1 | R3 | B2 |    DL2      |  DH2   | OpCode |
19281     +--------+----+----+----+-------------+--------+--------+
19282     0        8    12   16   20            32       40      47
19283
19284'RX format: <insn> R1,D2(X2,B2)'
19285     +--------+----+----+----+-------------+
19286     | OpCode | R1 | X2 | B2 |     D2      |
19287     +--------+----+----+----+-------------+
19288     0        8    12   16   20           31
19289
19290'RXE format: <insn> R1,D2(X2,B2)'
19291     +--------+----+----+----+-------------+--------+--------+
19292     | OpCode | R1 | X2 | B2 |     D2      |////////| OpCode |
19293     +--------+----+----+----+-------------+--------+--------+
19294     0        8    12   16   20            32       40      47
19295
19296'RXF format: <insn> R1,R3,D2(X2,B2)'
19297     +--------+----+----+----+-------------+----+---+--------+
19298     | OpCode | R3 | X2 | B2 |     D2      | R1 |///| OpCode |
19299     +--------+----+----+----+-------------+----+---+--------+
19300     0        8    12   16   20            32   36  40      47
19301
19302'RXY format: <insn> R1,D2(X2,B2)'
19303     +--------+----+----+----+-------------+--------+--------+
19304     | OpCode | R1 | X2 | B2 |     DL2     |   DH2  | OpCode |
19305     +--------+----+----+----+-------------+--------+--------+
19306     0        8    12   16   20            32   36   40      47
19307
19308'S format: <insn> D2(B2)'
19309     +------------------+----+-------------+
19310     |      OpCode      | B2 |     D2      |
19311     +------------------+----+-------------+
19312     0                  16   20           31
19313
19314'SI format: <insn> D1(B1),I2'
19315     +--------+---------+----+-------------+
19316     | OpCode |   I2    | B1 |     D1      |
19317     +--------+---------+----+-------------+
19318     0        8         16   20           31
19319
19320'SIY format: <insn> D1(B1),U2'
19321     +--------+---------+----+-------------+--------+--------+
19322     | OpCode |   I2    | B1 |     DL1     |  DH1   | OpCode |
19323     +--------+---------+----+-------------+--------+--------+
19324     0        8         16   20            32   36   40      47
19325
19326'SIL format: <insn> D1(B1),I2'
19327     +------------------+----+-------------+-----------------+
19328     |      OpCode      | B1 |      D1     |       I2        |
19329     +------------------+----+-------------+-----------------+
19330     0                  16   20            32               47
19331
19332'SS format: <insn> D1(R1,B1),D2(B3),R3'
19333     +--------+----+----+----+-------------+----+------------+
19334     | OpCode | R1 | R3 | B1 |     D1      | B2 |     D2     |
19335     +--------+----+----+----+-------------+----+------------+
19336     0        8    12   16   20            32   36          47
19337
19338'SSE format: <insn> D1(B1),D2(B2)'
19339     +------------------+----+-------------+----+------------+
19340     |      OpCode      | B1 |     D1      | B2 |     D2     |
19341     +------------------+----+-------------+----+------------+
19342     0        8    12   16   20            32   36           47
19343
19344'SSF format: <insn> D1(B1),D2(B2),R3'
19345     +--------+----+----+----+-------------+----+------------+
19346     | OpCode | R3 |OpCd| B1 |     D1      | B2 |     D2     |
19347     +--------+----+----+----+-------------+----+------------+
19348     0        8    12   16   20            32   36           47
19349
19350   For the complete list of all instruction format variants see the
19351Principles of Operation manuals.
19352
19353
19354File: as.info,  Node: s390 Aliases,  Next: s390 Operand Modifier,  Prev: s390 Formats,  Up: s390 Syntax
19355
193569.41.3.5 Instruction Aliases
19357............................
19358
19359A specific bit pattern can have multiple mnemonics, for example the bit
19360pattern '0xa7000000' has the mnemonics 'tmh' and 'tmlh'.  In addition,
19361there are a number of mnemonics recognized by 'as' that are not present
19362in the Principles of Operation.  These are the short forms of the branch
19363instructions, where the condition code mask operand is encoded in the
19364mnemonic.  This is relevant for the branch instructions, the compare and
19365branch instructions, and the compare and trap instructions.
19366
19367   For the branch instructions there are 20 condition code strings that
19368can be used as part of the mnemonic in place of a mask operand in the
19369instruction format:
19370
19371     instruction            short form
19372     ----------------------------------------------
19373     bcr   M1,R2            b<m>r  R2
19374     bc    M1,D2(X2,B2)     b<m>   D2(X2,B2)
19375     brc   M1,I2            j<m>   I2
19376     brcl  M1,I2            jg<m>  I2
19377
19378   In the mnemonic for a branch instruction the condition code string
19379<m> can be any of the following:
19380
19381     o     jump on overflow / if ones
19382     h     jump on A high
19383     p     jump on plus
19384     nle   jump on not low or equal
19385     l     jump on A low
19386     m     jump on minus
19387     nhe   jump on not high or equal
19388     lh    jump on low or high
19389     ne    jump on A not equal B
19390     nz    jump on not zero / if not zeros
19391     e     jump on A equal B
19392     z     jump on zero / if zeroes
19393     nlh   jump on not low or high
19394     he    jump on high or equal
19395     nl    jump on A not low
19396     nm    jump on not minus / if not mixed
19397     le    jump on low or equal
19398     nh    jump on A not high
19399     np    jump on not plus
19400     no    jump on not overflow / if not ones
19401
19402   For the compare and branch, and compare and trap instructions there
19403are 12 condition code strings that can be used as part of the mnemonic
19404in place of a mask operand in the instruction format:
19405
19406     instruction                   short form
19407     ------------------------------------------------------------
19408     crb    R1,R2,M3,D4(B4)        crb<m>    R1,R2,D4(B4)
19409     cgrb   R1,R2,M3,D4(B4)        cgrb<m>   R1,R2,D4(B4)
19410     crj    R1,R2,M3,I4            crj<m>    R1,R2,I4
19411     cgrj   R1,R2,M3,I4            cgrj<m>   R1,R2,I4
19412     cib    R1,I2,M3,D4(B4)        cib<m>    R1,I2,D4(B4)
19413     cgib   R1,I2,M3,D4(B4)        cgib<m>   R1,I2,D4(B4)
19414     cij    R1,I2,M3,I4            cij<m>    R1,I2,I4
19415     cgij   R1,I2,M3,I4            cgij<m>   R1,I2,I4
19416     crt    R1,R2,M3               crt<m>    R1,R2
19417     cgrt   R1,R2,M3               cgrt<m>   R1,R2
19418     cit    R1,I2,M3               cit<m>    R1,I2
19419     cgit   R1,I2,M3               cgit<m>   R1,I2
19420     clrb   R1,R2,M3,D4(B4)        clrb<m>   R1,R2,D4(B4)
19421     clgrb  R1,R2,M3,D4(B4)        clgrb<m>  R1,R2,D4(B4)
19422     clrj   R1,R2,M3,I4            clrj<m>   R1,R2,I4
19423     clgrj  R1,R2,M3,I4            clgrj<m>  R1,R2,I4
19424     clib   R1,I2,M3,D4(B4)        clib<m>   R1,I2,D4(B4)
19425     clgib  R1,I2,M3,D4(B4)        clgib<m>  R1,I2,D4(B4)
19426     clij   R1,I2,M3,I4            clij<m>   R1,I2,I4
19427     clgij  R1,I2,M3,I4            clgij<m>  R1,I2,I4
19428     clrt   R1,R2,M3               clrt<m>   R1,R2
19429     clgrt  R1,R2,M3               clgrt<m>  R1,R2
19430     clfit  R1,I2,M3               clfit<m>  R1,I2
19431     clgit  R1,I2,M3               clgit<m>  R1,I2
19432
19433   In the mnemonic for a compare and branch and compare and trap
19434instruction the condition code string <m> can be any of the following:
19435
19436     h     jump on A high
19437     nle   jump on not low or equal
19438     l     jump on A low
19439     nhe   jump on not high or equal
19440     ne    jump on A not equal B
19441     lh    jump on low or high
19442     e     jump on A equal B
19443     nlh   jump on not low or high
19444     nl    jump on A not low
19445     he    jump on high or equal
19446     nh    jump on A not high
19447     le    jump on low or equal
19448
19449
19450File: as.info,  Node: s390 Operand Modifier,  Next: s390 Instruction Marker,  Prev: s390 Aliases,  Up: s390 Syntax
19451
194529.41.3.6 Instruction Operand Modifier
19453.....................................
19454
19455If a symbol modifier is attached to a symbol in an expression for an
19456instruction operand field, the symbol term is replaced with a reference
19457to an object in the global offset table (GOT) or the procedure linkage
19458table (PLT). The following expressions are allowed: 'symbol@modifier +
19459constant', 'symbol@modifier + label + constant', and 'symbol@modifier -
19460label + constant'.  The term 'symbol' is the symbol that will be entered
19461into the GOT or PLT, 'label' is a local label, and 'constant' is an
19462arbitrary expression that the assembler can evaluate to a constant
19463value.
19464
19465   The term '(symbol + constant1)@modifier +/- label + constant2' is
19466also accepted but a warning message is printed and the term is converted
19467to 'symbol@modifier +/- label + constant1 + constant2'.
19468
19469'@got'
19470'@got12'
19471     The @got modifier can be used for displacement fields, 16-bit
19472     immediate fields and 32-bit pc-relative immediate fields.  The
19473     @got12 modifier is synonym to @got.  The symbol is added to the
19474     GOT. For displacement fields and 16-bit immediate fields the symbol
19475     term is replaced with the offset from the start of the GOT to the
19476     GOT slot for the symbol.  For a 32-bit pc-relative field the
19477     pc-relative offset to the GOT slot from the current instruction
19478     address is used.
19479'@gotent'
19480     The @gotent modifier can be used for 32-bit pc-relative immediate
19481     fields.  The symbol is added to the GOT and the symbol term is
19482     replaced with the pc-relative offset from the current instruction
19483     to the GOT slot for the symbol.
19484'@gotoff'
19485     The @gotoff modifier can be used for 16-bit immediate fields.  The
19486     symbol term is replaced with the offset from the start of the GOT
19487     to the address of the symbol.
19488'@gotplt'
19489     The @gotplt modifier can be used for displacement fields, 16-bit
19490     immediate fields, and 32-bit pc-relative immediate fields.  A
19491     procedure linkage table entry is generated for the symbol and a
19492     jump slot for the symbol is added to the GOT. For displacement
19493     fields and 16-bit immediate fields the symbol term is replaced with
19494     the offset from the start of the GOT to the jump slot for the
19495     symbol.  For a 32-bit pc-relative field the pc-relative offset to
19496     the jump slot from the current instruction address is used.
19497'@plt'
19498     The @plt modifier can be used for 16-bit and 32-bit pc-relative
19499     immediate fields.  A procedure linkage table entry is generated for
19500     the symbol.  The symbol term is replaced with the relative offset
19501     from the current instruction to the PLT entry for the symbol.
19502'@pltoff'
19503     The @pltoff modifier can be used for 16-bit immediate fields.  The
19504     symbol term is replaced with the offset from the start of the PLT
19505     to the address of the symbol.
19506'@gotntpoff'
19507     The @gotntpoff modifier can be used for displacement fields.  The
19508     symbol is added to the static TLS block and the negated offset to
19509     the symbol in the static TLS block is added to the GOT. The symbol
19510     term is replaced with the offset to the GOT slot from the start of
19511     the GOT.
19512'@indntpoff'
19513     The @indntpoff modifier can be used for 32-bit pc-relative
19514     immediate fields.  The symbol is added to the static TLS block and
19515     the negated offset to the symbol in the static TLS block is added
19516     to the GOT. The symbol term is replaced with the pc-relative offset
19517     to the GOT slot from the current instruction address.
19518
19519   For more information about the thread local storage modifiers
19520'gotntpoff' and 'indntpoff' see the ELF extension documentation 'ELF
19521Handling For Thread-Local Storage'.
19522
19523
19524File: as.info,  Node: s390 Instruction Marker,  Next: s390 Literal Pool Entries,  Prev: s390 Operand Modifier,  Up: s390 Syntax
19525
195269.41.3.7 Instruction Marker
19527...........................
19528
19529The thread local storage instruction markers are used by the linker to
19530perform code optimization.
19531
19532':tls_load'
19533     The :tls_load marker is used to flag the load instruction in the
19534     initial exec TLS model that retrieves the offset from the thread
19535     pointer to a thread local storage variable from the GOT.
19536':tls_gdcall'
19537     The :tls_gdcall marker is used to flag the branch-and-save
19538     instruction to the __tls_get_offset function in the global dynamic
19539     TLS model.
19540':tls_ldcall'
19541     The :tls_ldcall marker is used to flag the branch-and-save
19542     instruction to the __tls_get_offset function in the local dynamic
19543     TLS model.
19544
19545   For more information about the thread local storage instruction
19546marker and the linker optimizations see the ELF extension documentation
19547'ELF Handling For Thread-Local Storage'.
19548
19549
19550File: as.info,  Node: s390 Literal Pool Entries,  Prev: s390 Instruction Marker,  Up: s390 Syntax
19551
195529.41.3.8 Literal Pool Entries
19553.............................
19554
19555A literal pool is a collection of values.  To access the values a
19556pointer to the literal pool is loaded to a register, the literal pool
19557register.  Usually, register %r13 is used as the literal pool register
19558(*note s390 Register::).  Literal pool entries are created by adding the
19559suffix :lit1, :lit2, :lit4, or :lit8 to the end of an expression for an
19560instruction operand.  The expression is added to the literal pool and
19561the operand is replaced with the offset to the literal in the literal
19562pool.
19563
19564':lit1'
19565     The literal pool entry is created as an 8-bit value.  An operand
19566     modifier must not be used for the original expression.
19567':lit2'
19568     The literal pool entry is created as a 16 bit value.  The operand
19569     modifier @got may be used in the original expression.  The term
19570     'x@got:lit2' will put the got offset for the global symbol x to the
19571     literal pool as 16 bit value.
19572':lit4'
19573     The literal pool entry is created as a 32-bit value.  The operand
19574     modifier @got and @plt may be used in the original expression.  The
19575     term 'x@got:lit4' will put the got offset for the global symbol x
19576     to the literal pool as a 32-bit value.  The term 'x@plt:lit4' will
19577     put the plt offset for the global symbol x to the literal pool as a
19578     32-bit value.
19579':lit8'
19580     The literal pool entry is created as a 64-bit value.  The operand
19581     modifier @got and @plt may be used in the original expression.  The
19582     term 'x@got:lit8' will put the got offset for the global symbol x
19583     to the literal pool as a 64-bit value.  The term 'x@plt:lit8' will
19584     put the plt offset for the global symbol x to the literal pool as a
19585     64-bit value.
19586
19587   The assembler directive '.ltorg' is used to emit all literal pool
19588entries to the current position.
19589
19590
19591File: as.info,  Node: s390 Directives,  Next: s390 Floating Point,  Prev: s390 Syntax,  Up: S/390-Dependent
19592
195939.41.4 Assembler Directives
19594---------------------------
19595
19596'as' for s390 supports all of the standard ELF assembler directives as
19597outlined in the main part of this document.  Some directives have been
19598extended and there are some additional directives, which are only
19599available for the s390 'as'.
19600
19601'.insn'
19602     This directive permits the numeric representation of an
19603     instructions and makes the assembler insert the operands according
19604     to one of the instructions formats for '.insn' (*note s390
19605     Formats::).  For example, the instruction 'l %r1,24(%r15)' could be
19606     written as '.insn rx,0x58000000,%r1,24(%r15)'.
19607'.short'
19608'.long'
19609'.quad'
19610     This directive places one or more 16-bit (.short), 32-bit (.long),
19611     or 64-bit (.quad) values into the current section.  If an ELF or
19612     TLS modifier is used only the following expressions are allowed:
19613     'symbol@modifier + constant', 'symbol@modifier + label + constant',
19614     and 'symbol@modifier - label + constant'.  The following modifiers
19615     are available:
19616     '@got'
19617     '@got12'
19618          The @got modifier can be used for .short, .long and .quad.
19619          The @got12 modifier is synonym to @got.  The symbol is added
19620          to the GOT. The symbol term is replaced with offset from the
19621          start of the GOT to the GOT slot for the symbol.
19622     '@gotoff'
19623          The @gotoff modifier can be used for .short, .long and .quad.
19624          The symbol term is replaced with the offset from the start of
19625          the GOT to the address of the symbol.
19626     '@gotplt'
19627          The @gotplt modifier can be used for .long and .quad.  A
19628          procedure linkage table entry is generated for the symbol and
19629          a jump slot for the symbol is added to the GOT. The symbol
19630          term is replaced with the offset from the start of the GOT to
19631          the jump slot for the symbol.
19632     '@plt'
19633          The @plt modifier can be used for .long and .quad.  A
19634          procedure linkage table entry us generated for the symbol.
19635          The symbol term is replaced with the address of the PLT entry
19636          for the symbol.
19637     '@pltoff'
19638          The @pltoff modifier can be used for .short, .long and .quad.
19639          The symbol term is replaced with the offset from the start of
19640          the PLT to the address of the symbol.
19641     '@tlsgd'
19642     '@tlsldm'
19643          The @tlsgd and @tlsldm modifier can be used for .long and
19644          .quad.  A tls_index structure for the symbol is added to the
19645          GOT. The symbol term is replaced with the offset from the
19646          start of the GOT to the tls_index structure.
19647     '@gotntpoff'
19648     '@indntpoff'
19649          The @gotntpoff and @indntpoff modifier can be used for .long
19650          and .quad.  The symbol is added to the static TLS block and
19651          the negated offset to the symbol in the static TLS block is
19652          added to the GOT. For @gotntpoff the symbol term is replaced
19653          with the offset from the start of the GOT to the GOT slot, for
19654          @indntpoff the symbol term is replaced with the address of the
19655          GOT slot.
19656     '@dtpoff'
19657          The @dtpoff modifier can be used for .long and .quad.  The
19658          symbol term is replaced with the offset of the symbol relative
19659          to the start of the TLS block it is contained in.
19660     '@ntpoff'
19661          The @ntpoff modifier can be used for .long and .quad.  The
19662          symbol term is replaced with the offset of the symbol relative
19663          to the TCB pointer.
19664
19665     For more information about the thread local storage modifiers see
19666     the ELF extension documentation 'ELF Handling For Thread-Local
19667     Storage'.
19668
19669'.ltorg'
19670     This directive causes the current contents of the literal pool to
19671     be dumped to the current location (*note s390 Literal Pool
19672     Entries::).
19673
19674'.machine STRING[+EXTENSION]...'
19675
19676     This directive allows changing the machine for which code is
19677     generated.  'string' may be any of the '-march=' selection options,
19678     or 'push', or 'pop'.  '.machine push' saves the currently selected
19679     cpu, which may be restored with '.machine pop'.  Be aware that the
19680     cpu string has to be put into double quotes in case it contains
19681     characters not appropriate for identifiers.  So you have to write
19682     '"z9-109"' instead of just 'z9-109'.  Extensions can be specified
19683     after the cpu name, separated by plus characters.  Valid extensions
19684     are: 'htm', 'nohtm', 'vx', 'novx'.  They extend the basic
19685     instruction set with features from a higher cpu level, or remove
19686     support for a feature from the given cpu level.
19687
19688     Example: 'z13+nohtm' allows all instructions of the z13 cpu except
19689     instructions from the HTM facility.
19690
19691'.machinemode string'
19692     This directive allows to change the architecture mode for which
19693     code is being generated.  'string' may be 'esa', 'zarch',
19694     'zarch_nohighgprs', 'push', or 'pop'.  '.machinemode
19695     zarch_nohighgprs' can be used to prevent the 'highgprs' flag from
19696     being set in the ELF header of the output file.  This is useful in
19697     situations where the code is gated with a runtime check which makes
19698     sure that the code is only executed on kernels providing the
19699     'highgprs' feature.  '.machinemode push' saves the currently
19700     selected mode, which may be restored with '.machinemode pop'.
19701
19702
19703File: as.info,  Node: s390 Floating Point,  Prev: s390 Directives,  Up: S/390-Dependent
19704
197059.41.5 Floating Point
19706---------------------
19707
19708The assembler recognizes both the IEEE floating-point instruction and
19709the hexadecimal floating-point instructions.  The floating-point
19710constructors '.float', '.single', and '.double' always emit the IEEE
19711format.  To assemble hexadecimal floating-point constants the '.long'
19712and '.quad' directives must be used.
19713
19714
19715File: as.info,  Node: SCORE-Dependent,  Next: SH-Dependent,  Prev: S/390-Dependent,  Up: Machine Dependencies
19716
197179.42 SCORE Dependent Features
19718=============================
19719
19720* Menu:
19721
19722* SCORE-Opts::   	Assembler options
19723* SCORE-Pseudo::        SCORE Assembler Directives
19724* SCORE-Syntax::        Syntax
19725
19726
19727File: as.info,  Node: SCORE-Opts,  Next: SCORE-Pseudo,  Up: SCORE-Dependent
19728
197299.42.1 Options
19730--------------
19731
19732The following table lists all available SCORE options.
19733
19734'-G NUM'
19735     This option sets the largest size of an object that can be
19736     referenced implicitly with the 'gp' register.  The default value is
19737     8.
19738
19739'-EB'
19740     Assemble code for a big-endian cpu
19741
19742'-EL'
19743     Assemble code for a little-endian cpu
19744
19745'-FIXDD'
19746     Assemble code for fix data dependency
19747
19748'-NWARN'
19749     Assemble code for no warning message for fix data dependency
19750
19751'-SCORE5'
19752     Assemble code for target is SCORE5
19753
19754'-SCORE5U'
19755     Assemble code for target is SCORE5U
19756
19757'-SCORE7'
19758     Assemble code for target is SCORE7, this is default setting
19759
19760'-SCORE3'
19761     Assemble code for target is SCORE3
19762
19763'-march=score7'
19764     Assemble code for target is SCORE7, this is default setting
19765
19766'-march=score3'
19767     Assemble code for target is SCORE3
19768
19769'-USE_R1'
19770     Assemble code for no warning message when using temp register r1
19771
19772'-KPIC'
19773     Generate code for PIC. This option tells the assembler to generate
19774     score position-independent macro expansions.  It also tells the
19775     assembler to mark the output file as PIC.
19776
19777'-O0'
19778     Assembler will not perform any optimizations
19779
19780'-V'
19781     Sunplus release version
19782
19783
19784File: as.info,  Node: SCORE-Pseudo,  Next: SCORE-Syntax,  Prev: SCORE-Opts,  Up: SCORE-Dependent
19785
197869.42.2 SCORE Assembler Directives
19787---------------------------------
19788
19789A number of assembler directives are available for SCORE. The following
19790table is far from complete.
19791
19792'.set nwarn'
19793     Let the assembler not to generate warnings if the source machine
19794     language instructions happen data dependency.
19795
19796'.set fixdd'
19797     Let the assembler to insert bubbles (32 bit nop instruction / 16
19798     bit nop!  Instruction) if the source machine language instructions
19799     happen data dependency.
19800
19801'.set nofixdd'
19802     Let the assembler to generate warnings if the source machine
19803     language instructions happen data dependency.  (Default)
19804
19805'.set r1'
19806     Let the assembler not to generate warnings if the source program
19807     uses r1.  allow user to use r1
19808
19809'set nor1'
19810     Let the assembler to generate warnings if the source program uses
19811     r1.  (Default)
19812
19813'.sdata'
19814     Tell the assembler to add subsequent data into the sdata section
19815
19816'.rdata'
19817     Tell the assembler to add subsequent data into the rdata section
19818
19819'.frame "frame-register", "offset", "return-pc-register"'
19820     Describe a stack frame.  "frame-register" is the frame register,
19821     "offset" is the distance from the frame register to the virtual
19822     frame pointer, "return-pc-register" is the return program register.
19823     You must use ".ent" before ".frame" and only one ".frame" can be
19824     used per ".ent".
19825
19826'.mask "bitmask", "frameoffset"'
19827     Indicate which of the integer registers are saved in the current
19828     function's stack frame, this is for the debugger to explain the
19829     frame chain.
19830
19831'.ent "proc-name"'
19832     Set the beginning of the procedure "proc_name".  Use this directive
19833     when you want to generate information for the debugger.
19834
19835'.end proc-name'
19836     Set the end of a procedure.  Use this directive to generate
19837     information for the debugger.
19838
19839'.bss'
19840     Switch the destination of following statements into the bss
19841     section, which is used for data that is uninitialized anywhere.
19842
19843
19844File: as.info,  Node: SCORE-Syntax,  Prev: SCORE-Pseudo,  Up: SCORE-Dependent
19845
198469.42.3 SCORE Syntax
19847-------------------
19848
19849* Menu:
19850
19851* SCORE-Chars::                Special Characters
19852
19853
19854File: as.info,  Node: SCORE-Chars,  Up: SCORE-Syntax
19855
198569.42.3.1 Special Characters
19857...........................
19858
19859The presence of a '#' appearing anywhere on a line indicates the start
19860of a comment that extends to the end of that line.
19861
19862   If a '#' appears as the first character of a line then the whole line
19863is treated as a comment, but in this case the line can also be a logical
19864line number directive (*note Comments::) or a preprocessor control
19865command (*note Preprocessing::).
19866
19867   The ';' character can be used to separate statements on the same
19868line.
19869
19870
19871File: as.info,  Node: SH-Dependent,  Next: Sparc-Dependent,  Prev: SCORE-Dependent,  Up: Machine Dependencies
19872
198739.43 Renesas / SuperH SH Dependent Features
19874===========================================
19875
19876* Menu:
19877
19878* SH Options::              Options
19879* SH Syntax::               Syntax
19880* SH Floating Point::       Floating Point
19881* SH Directives::           SH Machine Directives
19882* SH Opcodes::              Opcodes
19883
19884
19885File: as.info,  Node: SH Options,  Next: SH Syntax,  Up: SH-Dependent
19886
198879.43.1 Options
19888--------------
19889
19890'as' has following command-line options for the Renesas (formerly
19891Hitachi) / SuperH SH family.
19892
19893'--little'
19894     Generate little endian code.
19895
19896'--big'
19897     Generate big endian code.
19898
19899'--relax'
19900     Alter jump instructions for long displacements.
19901
19902'--small'
19903     Align sections to 4 byte boundaries, not 16.
19904
19905'--dsp'
19906     Enable sh-dsp insns, and disable sh3e / sh4 insns.
19907
19908'--renesas'
19909     Disable optimization with section symbol for compatibility with
19910     Renesas assembler.
19911
19912'--allow-reg-prefix'
19913     Allow '$' as a register name prefix.
19914
19915'--fdpic'
19916     Generate an FDPIC object file.
19917
19918'--isa=sh4 | sh4a'
19919     Specify the sh4 or sh4a instruction set.
19920'--isa=dsp'
19921     Enable sh-dsp insns, and disable sh3e / sh4 insns.
19922'--isa=fp'
19923     Enable sh2e, sh3e, sh4, and sh4a insn sets.
19924'--isa=all'
19925     Enable sh1, sh2, sh2e, sh3, sh3e, sh4, sh4a, and sh-dsp insn sets.
19926
19927'-h-tick-hex'
19928     Support H'00 style hex constants in addition to 0x00 style.
19929
19930
19931File: as.info,  Node: SH Syntax,  Next: SH Floating Point,  Prev: SH Options,  Up: SH-Dependent
19932
199339.43.2 Syntax
19934-------------
19935
19936* Menu:
19937
19938* SH-Chars::                Special Characters
19939* SH-Regs::                 Register Names
19940* SH-Addressing::           Addressing Modes
19941
19942
19943File: as.info,  Node: SH-Chars,  Next: SH-Regs,  Up: SH Syntax
19944
199459.43.2.1 Special Characters
19946...........................
19947
19948'!' is the line comment character.
19949
19950   You can use ';' instead of a newline to separate statements.
19951
19952   If a '#' appears as the first character of a line then the whole line
19953is treated as a comment, but in this case the line could also be a
19954logical line number directive (*note Comments::) or a preprocessor
19955control command (*note Preprocessing::).
19956
19957   Since '$' has no special meaning, you may use it in symbol names.
19958
19959
19960File: as.info,  Node: SH-Regs,  Next: SH-Addressing,  Prev: SH-Chars,  Up: SH Syntax
19961
199629.43.2.2 Register Names
19963.......................
19964
19965You can use the predefined symbols 'r0', 'r1', 'r2', 'r3', 'r4', 'r5',
19966'r6', 'r7', 'r8', 'r9', 'r10', 'r11', 'r12', 'r13', 'r14', and 'r15' to
19967refer to the SH registers.
19968
19969   The SH also has these control registers:
19970
19971'pr'
19972     procedure register (holds return address)
19973
19974'pc'
19975     program counter
19976
19977'mach'
19978'macl'
19979     high and low multiply accumulator registers
19980
19981'sr'
19982     status register
19983
19984'gbr'
19985     global base register
19986
19987'vbr'
19988     vector base register (for interrupt vectors)
19989
19990
19991File: as.info,  Node: SH-Addressing,  Prev: SH-Regs,  Up: SH Syntax
19992
199939.43.2.3 Addressing Modes
19994.........................
19995
19996'as' understands the following addressing modes for the SH. 'RN' in the
19997following refers to any of the numbered registers, but _not_ the control
19998registers.
19999
20000'RN'
20001     Register direct
20002
20003'@RN'
20004     Register indirect
20005
20006'@-RN'
20007     Register indirect with pre-decrement
20008
20009'@RN+'
20010     Register indirect with post-increment
20011
20012'@(DISP, RN)'
20013     Register indirect with displacement
20014
20015'@(R0, RN)'
20016     Register indexed
20017
20018'@(DISP, GBR)'
20019     'GBR' offset
20020
20021'@(R0, GBR)'
20022     GBR indexed
20023
20024'ADDR'
20025'@(DISP, PC)'
20026     PC relative address (for branch or for addressing memory).  The
20027     'as' implementation allows you to use the simpler form ADDR
20028     anywhere a PC relative address is called for; the alternate form is
20029     supported for compatibility with other assemblers.
20030
20031'#IMM'
20032     Immediate data
20033
20034
20035File: as.info,  Node: SH Floating Point,  Next: SH Directives,  Prev: SH Syntax,  Up: SH-Dependent
20036
200379.43.3 Floating Point
20038---------------------
20039
20040SH2E, SH3E and SH4 groups have on-chip floating-point unit (FPU). Other
20041SH groups can use '.float' directive to generate IEEE floating-point
20042numbers.
20043
20044   SH2E and SH3E support single-precision floating point calculations as
20045well as entirely PCAPI compatible emulation of double-precision floating
20046point calculations.  SH2E and SH3E instructions are a subset of the
20047floating point calculations conforming to the IEEE754 standard.
20048
20049   In addition to single-precision and double-precision floating-point
20050operation capability, the on-chip FPU of SH4 has a 128-bit graphic
20051engine that enables 32-bit floating-point data to be processed 128 bits
20052at a time.  It also supports 4 * 4 array operations and inner product
20053operations.  Also, a superscalar architecture is employed that enables
20054simultaneous execution of two instructions (including FPU instructions),
20055providing performance of up to twice that of conventional architectures
20056at the same frequency.
20057
20058
20059File: as.info,  Node: SH Directives,  Next: SH Opcodes,  Prev: SH Floating Point,  Up: SH-Dependent
20060
200619.43.4 SH Machine Directives
20062----------------------------
20063
20064'uaword'
20065'ualong'
20066'uaquad'
20067     'as' will issue a warning when a misaligned '.word', '.long', or
20068     '.quad' directive is used.  You may use '.uaword', '.ualong', or
20069     '.uaquad' to indicate that the value is intentionally misaligned.
20070
20071
20072File: as.info,  Node: SH Opcodes,  Prev: SH Directives,  Up: SH-Dependent
20073
200749.43.5 Opcodes
20075--------------
20076
20077For detailed information on the SH machine instruction set, see
20078'SH-Microcomputer User's Manual' (Renesas) or 'SH-4 32-bit CPU Core
20079Architecture' (SuperH) and 'SuperH (SH) 64-Bit RISC Series' (SuperH).
20080
20081   'as' implements all the standard SH opcodes.  No additional
20082pseudo-instructions are needed on this family.  Note, however, that
20083because 'as' supports a simpler form of PC-relative addressing, you may
20084simply write (for example)
20085
20086     mov.l  bar,r0
20087
20088where other assemblers might require an explicit displacement to 'bar'
20089from the program counter:
20090
20091     mov.l  @(DISP, PC)
20092
20093   Here is a summary of SH opcodes:
20094
20095     Legend:
20096     Rn        a numbered register
20097     Rm        another numbered register
20098     #imm      immediate data
20099     disp      displacement
20100     disp8     8-bit displacement
20101     disp12    12-bit displacement
20102
20103     add #imm,Rn                    lds.l @Rn+,PR
20104     add Rm,Rn                      mac.w @Rm+,@Rn+
20105     addc Rm,Rn                     mov #imm,Rn
20106     addv Rm,Rn                     mov Rm,Rn
20107     and #imm,R0                    mov.b Rm,@(R0,Rn)
20108     and Rm,Rn                      mov.b Rm,@-Rn
20109     and.b #imm,@(R0,GBR)           mov.b Rm,@Rn
20110     bf disp8                       mov.b @(disp,Rm),R0
20111     bra disp12                     mov.b @(disp,GBR),R0
20112     bsr disp12                     mov.b @(R0,Rm),Rn
20113     bt disp8                       mov.b @Rm+,Rn
20114     clrmac                         mov.b @Rm,Rn
20115     clrt                           mov.b R0,@(disp,Rm)
20116     cmp/eq #imm,R0                 mov.b R0,@(disp,GBR)
20117     cmp/eq Rm,Rn                   mov.l Rm,@(disp,Rn)
20118     cmp/ge Rm,Rn                   mov.l Rm,@(R0,Rn)
20119     cmp/gt Rm,Rn                   mov.l Rm,@-Rn
20120     cmp/hi Rm,Rn                   mov.l Rm,@Rn
20121     cmp/hs Rm,Rn                   mov.l @(disp,Rn),Rm
20122     cmp/pl Rn                      mov.l @(disp,GBR),R0
20123     cmp/pz Rn                      mov.l @(disp,PC),Rn
20124     cmp/str Rm,Rn                  mov.l @(R0,Rm),Rn
20125     div0s Rm,Rn                    mov.l @Rm+,Rn
20126     div0u                          mov.l @Rm,Rn
20127     div1 Rm,Rn                     mov.l R0,@(disp,GBR)
20128     exts.b Rm,Rn                   mov.w Rm,@(R0,Rn)
20129     exts.w Rm,Rn                   mov.w Rm,@-Rn
20130     extu.b Rm,Rn                   mov.w Rm,@Rn
20131     extu.w Rm,Rn                   mov.w @(disp,Rm),R0
20132     jmp @Rn                        mov.w @(disp,GBR),R0
20133     jsr @Rn                        mov.w @(disp,PC),Rn
20134     ldc Rn,GBR                     mov.w @(R0,Rm),Rn
20135     ldc Rn,SR                      mov.w @Rm+,Rn
20136     ldc Rn,VBR                     mov.w @Rm,Rn
20137     ldc.l @Rn+,GBR                 mov.w R0,@(disp,Rm)
20138     ldc.l @Rn+,SR                  mov.w R0,@(disp,GBR)
20139     ldc.l @Rn+,VBR                 mova @(disp,PC),R0
20140     lds Rn,MACH                    movt Rn
20141     lds Rn,MACL                    muls Rm,Rn
20142     lds Rn,PR                      mulu Rm,Rn
20143     lds.l @Rn+,MACH                neg Rm,Rn
20144     lds.l @Rn+,MACL                negc Rm,Rn
20145     nop                            stc VBR,Rn
20146     not Rm,Rn                      stc.l GBR,@-Rn
20147     or #imm,R0                     stc.l SR,@-Rn
20148     or Rm,Rn                       stc.l VBR,@-Rn
20149     or.b #imm,@(R0,GBR)            sts MACH,Rn
20150     rotcl Rn                       sts MACL,Rn
20151     rotcr Rn                       sts PR,Rn
20152     rotl Rn                        sts.l MACH,@-Rn
20153     rotr Rn                        sts.l MACL,@-Rn
20154     rte                            sts.l PR,@-Rn
20155     rts                            sub Rm,Rn
20156     sett                           subc Rm,Rn
20157     shal Rn                        subv Rm,Rn
20158     shar Rn                        swap.b Rm,Rn
20159     shll Rn                        swap.w Rm,Rn
20160     shll16 Rn                      tas.b @Rn
20161     shll2 Rn                       trapa #imm
20162     shll8 Rn                       tst #imm,R0
20163     shlr Rn                        tst Rm,Rn
20164     shlr16 Rn                      tst.b #imm,@(R0,GBR)
20165     shlr2 Rn                       xor #imm,R0
20166     shlr8 Rn                       xor Rm,Rn
20167     sleep                          xor.b #imm,@(R0,GBR)
20168     stc GBR,Rn                     xtrct Rm,Rn
20169     stc SR,Rn
20170
20171
20172File: as.info,  Node: Sparc-Dependent,  Next: TIC54X-Dependent,  Prev: SH-Dependent,  Up: Machine Dependencies
20173
201749.44 SPARC Dependent Features
20175=============================
20176
20177* Menu:
20178
20179* Sparc-Opts::                  Options
20180* Sparc-Aligned-Data::		Option to enforce aligned data
20181* Sparc-Syntax::		Syntax
20182* Sparc-Float::                 Floating Point
20183* Sparc-Directives::            Sparc Machine Directives
20184
20185
20186File: as.info,  Node: Sparc-Opts,  Next: Sparc-Aligned-Data,  Up: Sparc-Dependent
20187
201889.44.1 Options
20189--------------
20190
20191The SPARC chip family includes several successive versions, using the
20192same core instruction set, but including a few additional instructions
20193at each version.  There are exceptions to this however.  For details on
20194what instructions each variant supports, please see the chip's
20195architecture reference manual.
20196
20197   By default, 'as' assumes the core instruction set (SPARC v6), but
20198"bumps" the architecture level as needed: it switches to successively
20199higher architectures as it encounters instructions that only exist in
20200the higher levels.
20201
20202   If not configured for SPARC v9 ('sparc64-*-*') GAS will not bump past
20203sparclite by default, an option must be passed to enable the v9
20204instructions.
20205
20206   GAS treats sparclite as being compatible with v8, unless an
20207architecture is explicitly requested.  SPARC v9 is always incompatible
20208with sparclite.
20209
20210'-Av6 | -Av7 | -Av8 | -Aleon | -Asparclet | -Asparclite'
20211'-Av8plus | -Av8plusa | -Av8plusb | -Av8plusc | -Av8plusd |'
20212'-Av8plusv | -Av8plusm | -Av8plusm8'
20213'-Av9 | -Av9a | -Av9b | -Av9c | -Av9d | -Av9e | -Av9v | -Av9m | -Av9m8'
20214'-Asparc | -Asparcvis | -Asparcvis2 | -Asparcfmaf | -Asparcima'
20215'-Asparcvis3 | -Asparcvis3r | -Asparc5 | -Asparc6'
20216     Use one of the '-A' options to select one of the SPARC
20217     architectures explicitly.  If you select an architecture
20218     explicitly, 'as' reports a fatal error if it encounters an
20219     instruction or feature requiring an incompatible or higher level.
20220
20221     '-Av8plus', '-Av8plusa', '-Av8plusb', '-Av8plusc', '-Av8plusd', and
20222     '-Av8plusv' select a 32 bit environment.
20223
20224     '-Av9', '-Av9a', '-Av9b', '-Av9c', '-Av9d', '-Av9e', '-Av9v' and
20225     '-Av9m' select a 64 bit environment and are not available unless
20226     GAS is explicitly configured with 64 bit environment support.
20227
20228     '-Av8plusa' and '-Av9a' enable the SPARC V9 instruction set with
20229     UltraSPARC VIS 1.0 extensions.
20230
20231     '-Av8plusb' and '-Av9b' enable the UltraSPARC VIS 2.0 instructions,
20232     as well as the instructions enabled by '-Av8plusa' and '-Av9a'.
20233
20234     '-Av8plusc' and '-Av9c' enable the UltraSPARC Niagara instructions,
20235     as well as the instructions enabled by '-Av8plusb' and '-Av9b'.
20236
20237     '-Av8plusd' and '-Av9d' enable the floating point fused
20238     multiply-add, VIS 3.0, and HPC extension instructions, as well as
20239     the instructions enabled by '-Av8plusc' and '-Av9c'.
20240
20241     '-Av8pluse' and '-Av9e' enable the cryptographic instructions, as
20242     well as the instructions enabled by '-Av8plusd' and '-Av9d'.
20243
20244     '-Av8plusv' and '-Av9v' enable floating point unfused multiply-add,
20245     and integer multiply-add, as well as the instructions enabled by
20246     '-Av8pluse' and '-Av9e'.
20247
20248     '-Av8plusm' and '-Av9m' enable the VIS 4.0, subtract extended,
20249     xmpmul, xmontmul and xmontsqr instructions, as well as the
20250     instructions enabled by '-Av8plusv' and '-Av9v'.
20251
20252     '-Av8plusm8' and '-Av9m8' enable the instructions introduced in the
20253     Oracle SPARC Architecture 2017 and the M8 processor, as well as the
20254     instructions enabled by '-Av8plusm' and '-Av9m'.
20255
20256     '-Asparc' specifies a v9 environment.  It is equivalent to '-Av9'
20257     if the word size is 64-bit, and '-Av8plus' otherwise.
20258
20259     '-Asparcvis' specifies a v9a environment.  It is equivalent to
20260     '-Av9a' if the word size is 64-bit, and '-Av8plusa' otherwise.
20261
20262     '-Asparcvis2' specifies a v9b environment.  It is equivalent to
20263     '-Av9b' if the word size is 64-bit, and '-Av8plusb' otherwise.
20264
20265     '-Asparcfmaf' specifies a v9b environment with the floating point
20266     fused multiply-add instructions enabled.
20267
20268     '-Asparcima' specifies a v9b environment with the integer
20269     multiply-add instructions enabled.
20270
20271     '-Asparcvis3' specifies a v9b environment with the VIS 3.0, HPC ,
20272     and floating point fused multiply-add instructions enabled.
20273
20274     '-Asparcvis3r' specifies a v9b environment with the VIS 3.0, HPC,
20275     and floating point unfused multiply-add instructions enabled.
20276
20277     '-Asparc5' is equivalent to '-Av9m'.
20278
20279     '-Asparc6' is equivalent to '-Av9m8'.
20280
20281'-xarch=v8plus | -xarch=v8plusa | -xarch=v8plusb | -xarch=v8plusc'
20282'-xarch=v8plusd | -xarch=v8plusv | -xarch=v8plusm |'
20283'-xarch=v8plusm8 | -xarch=v9 | -xarch=v9a | -xarch=v9b'
20284'-xarch=v9c | -xarch=v9d | -xarch=v9e | -xarch=v9v'
20285'-xarch=v9m | -xarch=v9m8'
20286'-xarch=sparc | -xarch=sparcvis | -xarch=sparcvis2'
20287'-xarch=sparcfmaf | -xarch=sparcima | -xarch=sparcvis3'
20288'-xarch=sparcvis3r | -xarch=sparc5 | -xarch=sparc6'
20289     For compatibility with the SunOS v9 assembler.  These options are
20290     equivalent to -Av8plus, -Av8plusa, -Av8plusb, -Av8plusc, -Av8plusd,
20291     -Av8plusv, -Av8plusm, -Av8plusm8, -Av9, -Av9a, -Av9b, -Av9c, -Av9d,
20292     -Av9e, -Av9v, -Av9m, -Av9m8, -Asparc, -Asparcvis, -Asparcvis2,
20293     -Asparcfmaf, -Asparcima, -Asparcvis3, -Asparcvis3r, -Asparc5 and
20294     -Asparc6 respectively.
20295
20296'-bump'
20297     Warn whenever it is necessary to switch to another level.  If an
20298     architecture level is explicitly requested, GAS will not issue
20299     warnings until that level is reached, and will then bump the level
20300     as required (except between incompatible levels).
20301
20302'-32 | -64'
20303     Select the word size, either 32 bits or 64 bits.  These options are
20304     only available with the ELF object file format, and require that
20305     the necessary BFD support has been included.
20306
20307'--dcti-couples-detect'
20308     Warn if a DCTI (delayed control transfer instruction) couple is
20309     found when generating code for a variant of the SPARC architecture
20310     in which the execution of the couple is unpredictable, or very
20311     slow.  This is disabled by default.
20312
20313
20314File: as.info,  Node: Sparc-Aligned-Data,  Next: Sparc-Syntax,  Prev: Sparc-Opts,  Up: Sparc-Dependent
20315
203169.44.2 Enforcing aligned data
20317-----------------------------
20318
20319SPARC GAS normally permits data to be misaligned.  For example, it
20320permits the '.long' pseudo-op to be used on a byte boundary.  However,
20321the native SunOS assemblers issue an error when they see misaligned
20322data.
20323
20324   You can use the '--enforce-aligned-data' option to make SPARC GAS
20325also issue an error about misaligned data, just as the SunOS assemblers
20326do.
20327
20328   The '--enforce-aligned-data' option is not the default because gcc
20329issues misaligned data pseudo-ops when it initializes certain packed
20330data structures (structures defined using the 'packed' attribute).  You
20331may have to assemble with GAS in order to initialize packed data
20332structures in your own code.
20333
20334
20335File: as.info,  Node: Sparc-Syntax,  Next: Sparc-Float,  Prev: Sparc-Aligned-Data,  Up: Sparc-Dependent
20336
203379.44.3 Sparc Syntax
20338-------------------
20339
20340The assembler syntax closely follows The Sparc Architecture Manual,
20341versions 8 and 9, as well as most extensions defined by Sun for their
20342UltraSPARC and Niagara line of processors.
20343
20344* Menu:
20345
20346* Sparc-Chars::                Special Characters
20347* Sparc-Regs::                 Register Names
20348* Sparc-Constants::            Constant Names
20349* Sparc-Relocs::               Relocations
20350* Sparc-Size-Translations::    Size Translations
20351
20352
20353File: as.info,  Node: Sparc-Chars,  Next: Sparc-Regs,  Up: Sparc-Syntax
20354
203559.44.3.1 Special Characters
20356...........................
20357
20358A '!' character appearing anywhere on a line indicates the start of a
20359comment that extends to the end of that line.
20360
20361   If a '#' appears as the first character of a line then the whole line
20362is treated as a comment, but in this case the line could also be a
20363logical line number directive (*note Comments::) or a preprocessor
20364control command (*note Preprocessing::).
20365
20366   ';' can be used instead of a newline to separate statements.
20367
20368
20369File: as.info,  Node: Sparc-Regs,  Next: Sparc-Constants,  Prev: Sparc-Chars,  Up: Sparc-Syntax
20370
203719.44.3.2 Register Names
20372.......................
20373
20374The Sparc integer register file is broken down into global, outgoing,
20375local, and incoming.
20376
20377   * The 8 global registers are referred to as '%gN'.
20378
20379   * The 8 outgoing registers are referred to as '%oN'.
20380
20381   * The 8 local registers are referred to as '%lN'.
20382
20383   * The 8 incoming registers are referred to as '%iN'.
20384
20385   * The frame pointer register '%i6' can be referenced using the alias
20386     '%fp'.
20387
20388   * The stack pointer register '%o6' can be referenced using the alias
20389     '%sp'.
20390
20391   Floating point registers are simply referred to as '%fN'.  When
20392assembling for pre-V9, only 32 floating point registers are available.
20393For V9 and later there are 64, but there are restrictions when
20394referencing the upper 32 registers.  They can only be accessed as double
20395or quad, and thus only even or quad numbered accesses are allowed.  For
20396example, '%f34' is a legal floating point register, but '%f35' is not.
20397
20398   Floating point registers accessed as double can also be referred
20399using the '%dN' notation, where N is even.  Similarly, floating point
20400registers accessed as quad can be referred using the '%qN' notation,
20401where N is a multiple of 4.  For example, '%f4' can be denoted as both
20402'%d4' and '%q4'.  On the other hand, '%f2' can be denoted as '%d2' but
20403not as '%q2'.
20404
20405   Certain V9 instructions allow access to ancillary state registers.
20406Most simply they can be referred to as '%asrN' where N can be from 16 to
2040731.  However, there are some aliases defined to reference ASR registers
20408defined for various UltraSPARC processors:
20409
20410   * The tick compare register is referred to as '%tick_cmpr'.
20411
20412   * The system tick register is referred to as '%stick'.  An alias,
20413     '%sys_tick', exists but is deprecated and should not be used by new
20414     software.
20415
20416   * The system tick compare register is referred to as '%stick_cmpr'.
20417     An alias, '%sys_tick_cmpr', exists but is deprecated and should not
20418     be used by new software.
20419
20420   * The software interrupt register is referred to as '%softint'.
20421
20422   * The set software interrupt register is referred to as
20423     '%set_softint'.  The mnemonic '%softint_set' is provided as an
20424     alias.
20425
20426   * The clear software interrupt register is referred to as
20427     '%clear_softint'.  The mnemonic '%softint_clear' is provided as an
20428     alias.
20429
20430   * The performance instrumentation counters register is referred to as
20431     '%pic'.
20432
20433   * The performance control register is referred to as '%pcr'.
20434
20435   * The graphics status register is referred to as '%gsr'.
20436
20437   * The V9 dispatch control register is referred to as '%dcr'.
20438
20439   Various V9 branch and conditional move instructions allow
20440specification of which set of integer condition codes to test.  These
20441are referred to as '%xcc' and '%icc'.
20442
20443   Additionally, GAS supports the so-called "natural" condition codes;
20444these are referred to as '%ncc' and reference to '%icc' if the word size
20445is 32, '%xcc' if the word size is 64.
20446
20447   In V9, there are 4 sets of floating point condition codes which are
20448referred to as '%fccN'.
20449
20450   Several special privileged and non-privileged registers exist:
20451
20452   * The V9 address space identifier register is referred to as '%asi'.
20453
20454   * The V9 restorable windows register is referred to as '%canrestore'.
20455
20456   * The V9 savable windows register is referred to as '%cansave'.
20457
20458   * The V9 clean windows register is referred to as '%cleanwin'.
20459
20460   * The V9 current window pointer register is referred to as '%cwp'.
20461
20462   * The floating-point queue register is referred to as '%fq'.
20463
20464   * The V8 co-processor queue register is referred to as '%cq'.
20465
20466   * The floating point status register is referred to as '%fsr'.
20467
20468   * The other windows register is referred to as '%otherwin'.
20469
20470   * The V9 program counter register is referred to as '%pc'.
20471
20472   * The V9 next program counter register is referred to as '%npc'.
20473
20474   * The V9 processor interrupt level register is referred to as '%pil'.
20475
20476   * The V9 processor state register is referred to as '%pstate'.
20477
20478   * The trap base address register is referred to as '%tba'.
20479
20480   * The V9 tick register is referred to as '%tick'.
20481
20482   * The V9 trap level is referred to as '%tl'.
20483
20484   * The V9 trap program counter is referred to as '%tpc'.
20485
20486   * The V9 trap next program counter is referred to as '%tnpc'.
20487
20488   * The V9 trap state is referred to as '%tstate'.
20489
20490   * The V9 trap type is referred to as '%tt'.
20491
20492   * The V9 condition codes is referred to as '%ccr'.
20493
20494   * The V9 floating-point registers state is referred to as '%fprs'.
20495
20496   * The V9 version register is referred to as '%ver'.
20497
20498   * The V9 window state register is referred to as '%wstate'.
20499
20500   * The Y register is referred to as '%y'.
20501
20502   * The V8 window invalid mask register is referred to as '%wim'.
20503
20504   * The V8 processor state register is referred to as '%psr'.
20505
20506   * The V9 global register level register is referred to as '%gl'.
20507
20508   Several special register names exist for hypervisor mode code:
20509
20510   * The hyperprivileged processor state register is referred to as
20511     '%hpstate'.
20512
20513   * The hyperprivileged trap state register is referred to as
20514     '%htstate'.
20515
20516   * The hyperprivileged interrupt pending register is referred to as
20517     '%hintp'.
20518
20519   * The hyperprivileged trap base address register is referred to as
20520     '%htba'.
20521
20522   * The hyperprivileged implementation version register is referred to
20523     as '%hver'.
20524
20525   * The hyperprivileged system tick offset register is referred to as
20526     '%hstick_offset'.  Note that there is no '%hstick' register, the
20527     normal '%stick' is used.
20528
20529   * The hyperprivileged system tick enable register is referred to as
20530     '%hstick_enable'.
20531
20532   * The hyperprivileged system tick compare register is referred to as
20533     '%hstick_cmpr'.
20534
20535
20536File: as.info,  Node: Sparc-Constants,  Next: Sparc-Relocs,  Prev: Sparc-Regs,  Up: Sparc-Syntax
20537
205389.44.3.3 Constants
20539..................
20540
20541Several Sparc instructions take an immediate operand field for which
20542mnemonic names exist.  Two such examples are 'membar' and 'prefetch'.
20543Another example are the set of V9 memory access instruction that allow
20544specification of an address space identifier.
20545
20546   The 'membar' instruction specifies a memory barrier that is the
20547defined by the operand which is a bitmask.  The supported mask mnemonics
20548are:
20549
20550   * '#Sync' requests that all operations (including nonmemory reference
20551     operations) appearing prior to the 'membar' must have been
20552     performed and the effects of any exceptions become visible before
20553     any instructions after the 'membar' may be initiated.  This
20554     corresponds to 'membar' cmask field bit 2.
20555
20556   * '#MemIssue' requests that all memory reference operations appearing
20557     prior to the 'membar' must have been performed before any memory
20558     operation after the 'membar' may be initiated.  This corresponds to
20559     'membar' cmask field bit 1.
20560
20561   * '#Lookaside' requests that a store appearing prior to the 'membar'
20562     must complete before any load following the 'membar' referencing
20563     the same address can be initiated.  This corresponds to 'membar'
20564     cmask field bit 0.
20565
20566   * '#StoreStore' defines that the effects of all stores appearing
20567     prior to the 'membar' instruction must be visible to all processors
20568     before the effect of any stores following the 'membar'.  Equivalent
20569     to the deprecated 'stbar' instruction.  This corresponds to
20570     'membar' mmask field bit 3.
20571
20572   * '#LoadStore' defines all loads appearing prior to the 'membar'
20573     instruction must have been performed before the effect of any
20574     stores following the 'membar' is visible to any other processor.
20575     This corresponds to 'membar' mmask field bit 2.
20576
20577   * '#StoreLoad' defines that the effects of all stores appearing prior
20578     to the 'membar' instruction must be visible to all processors
20579     before loads following the 'membar' may be performed.  This
20580     corresponds to 'membar' mmask field bit 1.
20581
20582   * '#LoadLoad' defines that all loads appearing prior to the 'membar'
20583     instruction must have been performed before any loads following the
20584     'membar' may be performed.  This corresponds to 'membar' mmask
20585     field bit 0.
20586
20587   These values can be ored together, for example:
20588
20589     membar #Sync
20590     membar #StoreLoad | #LoadLoad
20591     membar #StoreLoad | #StoreStore
20592
20593   The 'prefetch' and 'prefetcha' instructions take a prefetch function
20594code.  The following prefetch function code constant mnemonics are
20595available:
20596
20597   * '#n_reads' requests a prefetch for several reads, and corresponds
20598     to a prefetch function code of 0.
20599
20600     '#one_read' requests a prefetch for one read, and corresponds to a
20601     prefetch function code of 1.
20602
20603     '#n_writes' requests a prefetch for several writes (and possibly
20604     reads), and corresponds to a prefetch function code of 2.
20605
20606     '#one_write' requests a prefetch for one write, and corresponds to
20607     a prefetch function code of 3.
20608
20609     '#page' requests a prefetch page, and corresponds to a prefetch
20610     function code of 4.
20611
20612     '#invalidate' requests a prefetch invalidate, and corresponds to a
20613     prefetch function code of 16.
20614
20615     '#unified' requests a prefetch to the nearest unified cache, and
20616     corresponds to a prefetch function code of 17.
20617
20618     '#n_reads_strong' requests a strong prefetch for several reads, and
20619     corresponds to a prefetch function code of 20.
20620
20621     '#one_read_strong' requests a strong prefetch for one read, and
20622     corresponds to a prefetch function code of 21.
20623
20624     '#n_writes_strong' requests a strong prefetch for several writes,
20625     and corresponds to a prefetch function code of 22.
20626
20627     '#one_write_strong' requests a strong prefetch for one write, and
20628     corresponds to a prefetch function code of 23.
20629
20630     Onle one prefetch code may be specified.  Here are some examples:
20631
20632          prefetch  [%l0 + %l2], #one_read
20633          prefetch  [%g2 + 8], #n_writes
20634          prefetcha [%g1] 0x8, #unified
20635          prefetcha [%o0 + 0x10] %asi, #n_reads
20636
20637     The actual behavior of a given prefetch function code is processor
20638     specific.  If a processor does not implement a given prefetch
20639     function code, it will treat the prefetch instruction as a nop.
20640
20641     For instructions that accept an immediate address space identifier,
20642     'as' provides many mnemonics corresponding to V9 defined as well as
20643     UltraSPARC and Niagara extended values.  For example, '#ASI_P' and
20644     '#ASI_BLK_INIT_QUAD_LDD_AIUS'.  See the V9 and processor specific
20645     manuals for details.
20646
20647
20648File: as.info,  Node: Sparc-Relocs,  Next: Sparc-Size-Translations,  Prev: Sparc-Constants,  Up: Sparc-Syntax
20649
206509.44.3.4 Relocations
20651....................
20652
20653ELF relocations are available as defined in the 32-bit and 64-bit Sparc
20654ELF specifications.
20655
20656   'R_SPARC_HI22' is obtained using '%hi' and 'R_SPARC_LO10' is obtained
20657using '%lo'.  Likewise 'R_SPARC_HIX22' is obtained from '%hix' and
20658'R_SPARC_LOX10' is obtained using '%lox'.  For example:
20659
20660     sethi %hi(symbol), %g1
20661     or    %g1, %lo(symbol), %g1
20662
20663     sethi %hix(symbol), %g1
20664     xor   %g1, %lox(symbol), %g1
20665
20666   These "high" mnemonics extract bits 31:10 of their operand, and the
20667"low" mnemonics extract bits 9:0 of their operand.
20668
20669   V9 code model relocations can be requested as follows:
20670
20671   * 'R_SPARC_HH22' is requested using '%hh'.  It can also be generated
20672     using '%uhi'.
20673   * 'R_SPARC_HM10' is requested using '%hm'.  It can also be generated
20674     using '%ulo'.
20675   * 'R_SPARC_LM22' is requested using '%lm'.
20676
20677   * 'R_SPARC_H44' is requested using '%h44'.
20678   * 'R_SPARC_M44' is requested using '%m44'.
20679   * 'R_SPARC_L44' is requested using '%l44' or '%l34'.
20680   * 'R_SPARC_H34' is requested using '%h34'.
20681
20682   The '%l34' generates a 'R_SPARC_L44' relocation because it calculates
20683the necessary value, and therefore no explicit 'R_SPARC_L34' relocation
20684needed to be created for this purpose.
20685
20686   The '%h34' and '%l34' relocations are used for the abs34 code model.
20687Here is an example abs34 address generation sequence:
20688
20689     sethi %h34(symbol), %g1
20690     sllx  %g1, 2, %g1
20691     or    %g1, %l34(symbol), %g1
20692
20693   The PC relative relocation 'R_SPARC_PC22' can be obtained by
20694enclosing an operand inside of '%pc22'.  Likewise, the 'R_SPARC_PC10'
20695relocation can be obtained using '%pc10'.  These are mostly used when
20696assembling PIC code.  For example, the standard PIC sequence on Sparc to
20697get the base of the global offset table, PC relative, into a register,
20698can be performed as:
20699
20700     sethi %pc22(_GLOBAL_OFFSET_TABLE_-4), %l7
20701     add   %l7, %pc10(_GLOBAL_OFFSET_TABLE_+4), %l7
20702
20703   Several relocations exist to allow the link editor to potentially
20704optimize GOT data references.  The 'R_SPARC_GOTDATA_OP_HIX22' relocation
20705can obtained by enclosing an operand inside of '%gdop_hix22'.  The
20706'R_SPARC_GOTDATA_OP_LOX10' relocation can obtained by enclosing an
20707operand inside of '%gdop_lox10'.  Likewise, 'R_SPARC_GOTDATA_OP' can be
20708obtained by enclosing an operand inside of '%gdop'.  For example,
20709assuming the GOT base is in register '%l7':
20710
20711     sethi %gdop_hix22(symbol), %l1
20712     xor   %l1, %gdop_lox10(symbol), %l1
20713     ld    [%l7 + %l1], %l2, %gdop(symbol)
20714
20715   There are many relocations that can be requested for access to thread
20716local storage variables.  All of the Sparc TLS mnemonics are supported:
20717
20718   * 'R_SPARC_TLS_GD_HI22' is requested using '%tgd_hi22'.
20719   * 'R_SPARC_TLS_GD_LO10' is requested using '%tgd_lo10'.
20720   * 'R_SPARC_TLS_GD_ADD' is requested using '%tgd_add'.
20721   * 'R_SPARC_TLS_GD_CALL' is requested using '%tgd_call'.
20722
20723   * 'R_SPARC_TLS_LDM_HI22' is requested using '%tldm_hi22'.
20724   * 'R_SPARC_TLS_LDM_LO10' is requested using '%tldm_lo10'.
20725   * 'R_SPARC_TLS_LDM_ADD' is requested using '%tldm_add'.
20726   * 'R_SPARC_TLS_LDM_CALL' is requested using '%tldm_call'.
20727
20728   * 'R_SPARC_TLS_LDO_HIX22' is requested using '%tldo_hix22'.
20729   * 'R_SPARC_TLS_LDO_LOX10' is requested using '%tldo_lox10'.
20730   * 'R_SPARC_TLS_LDO_ADD' is requested using '%tldo_add'.
20731
20732   * 'R_SPARC_TLS_IE_HI22' is requested using '%tie_hi22'.
20733   * 'R_SPARC_TLS_IE_LO10' is requested using '%tie_lo10'.
20734   * 'R_SPARC_TLS_IE_LD' is requested using '%tie_ld'.
20735   * 'R_SPARC_TLS_IE_LDX' is requested using '%tie_ldx'.
20736   * 'R_SPARC_TLS_IE_ADD' is requested using '%tie_add'.
20737
20738   * 'R_SPARC_TLS_LE_HIX22' is requested using '%tle_hix22'.
20739   * 'R_SPARC_TLS_LE_LOX10' is requested using '%tle_lox10'.
20740
20741   Here are some example TLS model sequences.
20742
20743   First, General Dynamic:
20744
20745     sethi  %tgd_hi22(symbol), %l1
20746     add    %l1, %tgd_lo10(symbol), %l1
20747     add    %l7, %l1, %o0, %tgd_add(symbol)
20748     call   __tls_get_addr, %tgd_call(symbol)
20749     nop
20750
20751   Local Dynamic:
20752
20753     sethi  %tldm_hi22(symbol), %l1
20754     add    %l1, %tldm_lo10(symbol), %l1
20755     add    %l7, %l1, %o0, %tldm_add(symbol)
20756     call   __tls_get_addr, %tldm_call(symbol)
20757     nop
20758
20759     sethi  %tldo_hix22(symbol), %l1
20760     xor    %l1, %tldo_lox10(symbol), %l1
20761     add    %o0, %l1, %l1, %tldo_add(symbol)
20762
20763   Initial Exec:
20764
20765     sethi  %tie_hi22(symbol), %l1
20766     add    %l1, %tie_lo10(symbol), %l1
20767     ld     [%l7 + %l1], %o0, %tie_ld(symbol)
20768     add    %g7, %o0, %o0, %tie_add(symbol)
20769
20770     sethi  %tie_hi22(symbol), %l1
20771     add    %l1, %tie_lo10(symbol), %l1
20772     ldx    [%l7 + %l1], %o0, %tie_ldx(symbol)
20773     add    %g7, %o0, %o0, %tie_add(symbol)
20774
20775   And finally, Local Exec:
20776
20777     sethi  %tle_hix22(symbol), %l1
20778     add    %l1, %tle_lox10(symbol), %l1
20779     add    %g7, %l1, %l1
20780
20781   When assembling for 64-bit, and a secondary constant addend is
20782specified in an address expression that would normally generate an
20783'R_SPARC_LO10' relocation, the assembler will emit an 'R_SPARC_OLO10'
20784instead.
20785
20786
20787File: as.info,  Node: Sparc-Size-Translations,  Prev: Sparc-Relocs,  Up: Sparc-Syntax
20788
207899.44.3.5 Size Translations
20790..........................
20791
20792Often it is desirable to write code in an operand size agnostic manner.
20793'as' provides support for this via operand size opcode translations.
20794Translations are supported for loads, stores, shifts, compare-and-swap
20795atomics, and the 'clr' synthetic instruction.
20796
20797   If generating 32-bit code, 'as' will generate the 32-bit opcode.
20798Whereas if 64-bit code is being generated, the 64-bit opcode will be
20799emitted.  For example 'ldn' will be transformed into 'ld' for 32-bit
20800code and 'ldx' for 64-bit code.
20801
20802   Here is an example meant to demonstrate all the supported opcode
20803translations:
20804
20805     ldn   [%o0], %o1
20806     ldna  [%o0] %asi, %o2
20807     stn   %o1, [%o0]
20808     stna  %o2, [%o0] %asi
20809     slln  %o3, 3, %o3
20810     srln  %o4, 8, %o4
20811     sran  %o5, 12, %o5
20812     casn  [%o0], %o1, %o2
20813     casna [%o0] %asi, %o1, %o2
20814     clrn  %g1
20815
20816   In 32-bit mode 'as' will emit:
20817
20818     ld   [%o0], %o1
20819     lda  [%o0] %asi, %o2
20820     st   %o1, [%o0]
20821     sta  %o2, [%o0] %asi
20822     sll  %o3, 3, %o3
20823     srl  %o4, 8, %o4
20824     sra  %o5, 12, %o5
20825     cas  [%o0], %o1, %o2
20826     casa [%o0] %asi, %o1, %o2
20827     clr  %g1
20828
20829   And in 64-bit mode 'as' will emit:
20830
20831     ldx   [%o0], %o1
20832     ldxa  [%o0] %asi, %o2
20833     stx   %o1, [%o0]
20834     stxa  %o2, [%o0] %asi
20835     sllx  %o3, 3, %o3
20836     srlx  %o4, 8, %o4
20837     srax  %o5, 12, %o5
20838     casx  [%o0], %o1, %o2
20839     casxa [%o0] %asi, %o1, %o2
20840     clrx  %g1
20841
20842   Finally, the '.nword' translating directive is supported as well.  It
20843is documented in the section on Sparc machine directives.
20844
20845
20846File: as.info,  Node: Sparc-Float,  Next: Sparc-Directives,  Prev: Sparc-Syntax,  Up: Sparc-Dependent
20847
208489.44.4 Floating Point
20849---------------------
20850
20851The Sparc uses IEEE floating-point numbers.
20852
20853
20854File: as.info,  Node: Sparc-Directives,  Prev: Sparc-Float,  Up: Sparc-Dependent
20855
208569.44.5 Sparc Machine Directives
20857-------------------------------
20858
20859The Sparc version of 'as' supports the following additional machine
20860directives:
20861
20862'.align'
20863     This must be followed by the desired alignment in bytes.
20864
20865'.common'
20866     This must be followed by a symbol name, a positive number, and
20867     '"bss"'.  This behaves somewhat like '.comm', but the syntax is
20868     different.
20869
20870'.half'
20871     This is functionally identical to '.short'.
20872
20873'.nword'
20874     On the Sparc, the '.nword' directive produces native word sized
20875     value, ie.  if assembling with -32 it is equivalent to '.word', if
20876     assembling with -64 it is equivalent to '.xword'.
20877
20878'.proc'
20879     This directive is ignored.  Any text following it on the same line
20880     is also ignored.
20881
20882'.register'
20883     This directive declares use of a global application or system
20884     register.  It must be followed by a register name %g2, %g3, %g6 or
20885     %g7, comma and the symbol name for that register.  If symbol name
20886     is '#scratch', it is a scratch register, if it is '#ignore', it
20887     just suppresses any errors about using undeclared global register,
20888     but does not emit any information about it into the object file.
20889     This can be useful e.g.  if you save the register before use and
20890     restore it after.
20891
20892'.reserve'
20893     This must be followed by a symbol name, a positive number, and
20894     '"bss"'.  This behaves somewhat like '.lcomm', but the syntax is
20895     different.
20896
20897'.seg'
20898     This must be followed by '"text"', '"data"', or '"data1"'.  It
20899     behaves like '.text', '.data', or '.data 1'.
20900
20901'.skip'
20902     This is functionally identical to the '.space' directive.
20903
20904'.word'
20905     On the Sparc, the '.word' directive produces 32 bit values, instead
20906     of the 16 bit values it produces on many other machines.
20907
20908'.xword'
20909     On the Sparc V9 processor, the '.xword' directive produces 64 bit
20910     values.
20911
20912
20913File: as.info,  Node: TIC54X-Dependent,  Next: TIC6X-Dependent,  Prev: Sparc-Dependent,  Up: Machine Dependencies
20914
209159.45 TIC54X Dependent Features
20916==============================
20917
20918* Menu:
20919
20920* TIC54X-Opts::              Command-line Options
20921* TIC54X-Block::             Blocking
20922* TIC54X-Env::               Environment Settings
20923* TIC54X-Constants::         Constants Syntax
20924* TIC54X-Subsyms::           String Substitution
20925* TIC54X-Locals::            Local Label Syntax
20926* TIC54X-Builtins::          Builtin Assembler Math Functions
20927* TIC54X-Ext::               Extended Addressing Support
20928* TIC54X-Directives::        Directives
20929* TIC54X-Macros::            Macro Features
20930* TIC54X-MMRegs::            Memory-mapped Registers
20931* TIC54X-Syntax::            Syntax
20932
20933
20934File: as.info,  Node: TIC54X-Opts,  Next: TIC54X-Block,  Up: TIC54X-Dependent
20935
209369.45.1 Options
20937--------------
20938
20939The TMS320C54X version of 'as' has a few machine-dependent options.
20940
20941   You can use the '-mfar-mode' option to enable extended addressing
20942mode.  All addresses will be assumed to be > 16 bits, and the
20943appropriate relocation types will be used.  This option is equivalent to
20944using the '.far_mode' directive in the assembly code.  If you do not use
20945the '-mfar-mode' option, all references will be assumed to be 16 bits.
20946This option may be abbreviated to '-mf'.
20947
20948   You can use the '-mcpu' option to specify a particular CPU. This
20949option is equivalent to using the '.version' directive in the assembly
20950code.  For recognized CPU codes, see *Note '.version':
20951TIC54X-Directives.  The default CPU version is '542'.
20952
20953   You can use the '-merrors-to-file' option to redirect error output to
20954a file (this provided for those deficient environments which don't
20955provide adequate output redirection).  This option may be abbreviated to
20956'-me'.
20957
20958
20959File: as.info,  Node: TIC54X-Block,  Next: TIC54X-Env,  Prev: TIC54X-Opts,  Up: TIC54X-Dependent
20960
209619.45.2 Blocking
20962---------------
20963
20964A blocked section or memory block is guaranteed not to cross the
20965blocking boundary (usually a page, or 128 words) if it is smaller than
20966the blocking size, or to start on a page boundary if it is larger than
20967the blocking size.
20968
20969
20970File: as.info,  Node: TIC54X-Env,  Next: TIC54X-Constants,  Prev: TIC54X-Block,  Up: TIC54X-Dependent
20971
209729.45.3 Environment Settings
20973---------------------------
20974
20975'C54XDSP_DIR' and 'A_DIR' are semicolon-separated paths which are added
20976to the list of directories normally searched for source and include
20977files.  'C54XDSP_DIR' will override 'A_DIR'.
20978
20979
20980File: as.info,  Node: TIC54X-Constants,  Next: TIC54X-Subsyms,  Prev: TIC54X-Env,  Up: TIC54X-Dependent
20981
209829.45.4 Constants Syntax
20983-----------------------
20984
20985The TIC54X version of 'as' allows the following additional constant
20986formats, using a suffix to indicate the radix:
20987
20988     Binary                  000000B, 011000b
20989     Octal                   10Q, 224q
20990     Hexadecimal             45h, 0FH
20991
20992
20993
20994File: as.info,  Node: TIC54X-Subsyms,  Next: TIC54X-Locals,  Prev: TIC54X-Constants,  Up: TIC54X-Dependent
20995
209969.45.5 String Substitution
20997--------------------------
20998
20999A subset of allowable symbols (which we'll call subsyms) may be assigned
21000arbitrary string values.  This is roughly equivalent to C preprocessor
21001#define macros.  When 'as' encounters one of these symbols, the symbol
21002is replaced in the input stream by its string value.  Subsym names
21003*must* begin with a letter.
21004
21005   Subsyms may be defined using the '.asg' and '.eval' directives (*Note
21006'.asg': TIC54X-Directives, *Note '.eval': TIC54X-Directives.
21007
21008   Expansion is recursive until a previously encountered symbol is seen,
21009at which point substitution stops.
21010
21011   In this example, x is replaced with SYM2; SYM2 is replaced with SYM1,
21012and SYM1 is replaced with x.  At this point, x has already been
21013encountered and the substitution stops.
21014
21015      .asg   "x",SYM1
21016      .asg   "SYM1",SYM2
21017      .asg   "SYM2",x
21018      add    x,a             ; final code assembled is "add  x, a"
21019
21020   Macro parameters are converted to subsyms; a side effect of this is
21021the normal 'as' '\ARG' dereferencing syntax is unnecessary.  Subsyms
21022defined within a macro will have global scope, unless the '.var'
21023directive is used to identify the subsym as a local macro variable *note
21024'.var': TIC54X-Directives.
21025
21026   Substitution may be forced in situations where replacement might be
21027ambiguous by placing colons on either side of the subsym.  The following
21028code:
21029
21030      .eval  "10",x
21031     LAB:X:  add     #x, a
21032
21033   When assembled becomes:
21034
21035     LAB10  add     #10, a
21036
21037   Smaller parts of the string assigned to a subsym may be accessed with
21038the following syntax:
21039
21040':SYMBOL(CHAR_INDEX):'
21041     Evaluates to a single-character string, the character at
21042     CHAR_INDEX.
21043':SYMBOL(START,LENGTH):'
21044     Evaluates to a substring of SYMBOL beginning at START with length
21045     LENGTH.
21046
21047
21048File: as.info,  Node: TIC54X-Locals,  Next: TIC54X-Builtins,  Prev: TIC54X-Subsyms,  Up: TIC54X-Dependent
21049
210509.45.6 Local Labels
21051-------------------
21052
21053Local labels may be defined in two ways:
21054
21055   * $N, where N is a decimal number between 0 and 9
21056   * LABEL?, where LABEL is any legal symbol name.
21057
21058   Local labels thus defined may be redefined or automatically
21059generated.  The scope of a local label is based on when it may be
21060undefined or reset.  This happens when one of the following situations
21061is encountered:
21062
21063   * .newblock directive *note '.newblock': TIC54X-Directives.
21064   * The current section is changed (.sect, .text, or .data)
21065   * Entering or leaving an included file
21066   * The macro scope where the label was defined is exited
21067
21068
21069File: as.info,  Node: TIC54X-Builtins,  Next: TIC54X-Ext,  Prev: TIC54X-Locals,  Up: TIC54X-Dependent
21070
210719.45.7 Math Builtins
21072--------------------
21073
21074The following built-in functions may be used to generate a
21075floating-point value.  All return a floating-point value except '$cvi',
21076'$int', and '$sgn', which return an integer value.
21077
21078'$acos(EXPR)'
21079     Returns the floating point arccosine of EXPR.
21080
21081'$asin(EXPR)'
21082     Returns the floating point arcsine of EXPR.
21083
21084'$atan(EXPR)'
21085     Returns the floating point arctangent of EXPR.
21086
21087'$atan2(EXPR1,EXPR2)'
21088     Returns the floating point arctangent of EXPR1 / EXPR2.
21089
21090'$ceil(EXPR)'
21091     Returns the smallest integer not less than EXPR as floating point.
21092
21093'$cosh(EXPR)'
21094     Returns the floating point hyperbolic cosine of EXPR.
21095
21096'$cos(EXPR)'
21097     Returns the floating point cosine of EXPR.
21098
21099'$cvf(EXPR)'
21100     Returns the integer value EXPR converted to floating-point.
21101
21102'$cvi(EXPR)'
21103     Returns the floating point value EXPR converted to integer.
21104
21105'$exp(EXPR)'
21106     Returns the floating point value e ^ EXPR.
21107
21108'$fabs(EXPR)'
21109     Returns the floating point absolute value of EXPR.
21110
21111'$floor(EXPR)'
21112     Returns the largest integer that is not greater than EXPR as
21113     floating point.
21114
21115'$fmod(EXPR1,EXPR2)'
21116     Returns the floating point remainder of EXPR1 / EXPR2.
21117
21118'$int(EXPR)'
21119     Returns 1 if EXPR evaluates to an integer, zero otherwise.
21120
21121'$ldexp(EXPR1,EXPR2)'
21122     Returns the floating point value EXPR1 * 2 ^ EXPR2.
21123
21124'$log10(EXPR)'
21125     Returns the base 10 logarithm of EXPR.
21126
21127'$log(EXPR)'
21128     Returns the natural logarithm of EXPR.
21129
21130'$max(EXPR1,EXPR2)'
21131     Returns the floating point maximum of EXPR1 and EXPR2.
21132
21133'$min(EXPR1,EXPR2)'
21134     Returns the floating point minimum of EXPR1 and EXPR2.
21135
21136'$pow(EXPR1,EXPR2)'
21137     Returns the floating point value EXPR1 ^ EXPR2.
21138
21139'$round(EXPR)'
21140     Returns the nearest integer to EXPR as a floating point number.
21141
21142'$sgn(EXPR)'
21143     Returns -1, 0, or 1 based on the sign of EXPR.
21144
21145'$sin(EXPR)'
21146     Returns the floating point sine of EXPR.
21147
21148'$sinh(EXPR)'
21149     Returns the floating point hyperbolic sine of EXPR.
21150
21151'$sqrt(EXPR)'
21152     Returns the floating point square root of EXPR.
21153
21154'$tan(EXPR)'
21155     Returns the floating point tangent of EXPR.
21156
21157'$tanh(EXPR)'
21158     Returns the floating point hyperbolic tangent of EXPR.
21159
21160'$trunc(EXPR)'
21161     Returns the integer value of EXPR truncated towards zero as
21162     floating point.
21163
21164
21165File: as.info,  Node: TIC54X-Ext,  Next: TIC54X-Directives,  Prev: TIC54X-Builtins,  Up: TIC54X-Dependent
21166
211679.45.8 Extended Addressing
21168--------------------------
21169
21170The 'LDX' pseudo-op is provided for loading the extended addressing bits
21171of a label or address.  For example, if an address '_label' resides in
21172extended program memory, the value of '_label' may be loaded as follows:
21173      ldx     #_label,16,a    ; loads extended bits of _label
21174      or      #_label,a       ; loads lower 16 bits of _label
21175      bacc    a               ; full address is in accumulator A
21176
21177
21178File: as.info,  Node: TIC54X-Directives,  Next: TIC54X-Macros,  Prev: TIC54X-Ext,  Up: TIC54X-Dependent
21179
211809.45.9 Directives
21181-----------------
21182
21183'.align [SIZE]'
21184'.even'
21185     Align the section program counter on the next boundary, based on
21186     SIZE.  SIZE may be any power of 2.  '.even' is equivalent to
21187     '.align' with a SIZE of 2.
21188     '1'
21189          Align SPC to word boundary
21190     '2'
21191          Align SPC to longword boundary (same as .even)
21192     '128'
21193          Align SPC to page boundary
21194
21195'.asg STRING, NAME'
21196     Assign NAME the string STRING.  String replacement is performed on
21197     STRING before assignment.
21198
21199'.eval STRING, NAME'
21200     Evaluate the contents of string STRING and assign the result as a
21201     string to the subsym NAME.  String replacement is performed on
21202     STRING before assignment.
21203
21204'.bss SYMBOL, SIZE [, [BLOCKING_FLAG] [,ALIGNMENT_FLAG]]'
21205     Reserve space for SYMBOL in the .bss section.  SIZE is in words.
21206     If present, BLOCKING_FLAG indicates the allocated space should be
21207     aligned on a page boundary if it would otherwise cross a page
21208     boundary.  If present, ALIGNMENT_FLAG causes the assembler to
21209     allocate SIZE on a long word boundary.
21210
21211'.byte VALUE [,...,VALUE_N]'
21212'.ubyte VALUE [,...,VALUE_N]'
21213'.char VALUE [,...,VALUE_N]'
21214'.uchar VALUE [,...,VALUE_N]'
21215     Place one or more bytes into consecutive words of the current
21216     section.  The upper 8 bits of each word is zero-filled.  If a label
21217     is used, it points to the word allocated for the first byte
21218     encountered.
21219
21220'.clink ["SECTION_NAME"]'
21221     Set STYP_CLINK flag for this section, which indicates to the linker
21222     that if no symbols from this section are referenced, the section
21223     should not be included in the link.  If SECTION_NAME is omitted,
21224     the current section is used.
21225
21226'.c_mode'
21227     TBD.
21228
21229'.copy "FILENAME" | FILENAME'
21230'.include "FILENAME" | FILENAME'
21231     Read source statements from FILENAME.  The normal include search
21232     path is used.  Normally .copy will cause statements from the
21233     included file to be printed in the assembly listing and .include
21234     will not, but this distinction is not currently implemented.
21235
21236'.data'
21237     Begin assembling code into the .data section.
21238
21239'.double VALUE [,...,VALUE_N]'
21240'.ldouble VALUE [,...,VALUE_N]'
21241'.float VALUE [,...,VALUE_N]'
21242'.xfloat VALUE [,...,VALUE_N]'
21243     Place an IEEE single-precision floating-point representation of one
21244     or more floating-point values into the current section.  All but
21245     '.xfloat' align the result on a longword boundary.  Values are
21246     stored most-significant word first.
21247
21248'.drlist'
21249'.drnolist'
21250     Control printing of directives to the listing file.  Ignored.
21251
21252'.emsg STRING'
21253'.mmsg STRING'
21254'.wmsg STRING'
21255     Emit a user-defined error, message, or warning, respectively.
21256
21257'.far_mode'
21258     Use extended addressing when assembling statements.  This should
21259     appear only once per file, and is equivalent to the -mfar-mode
21260     option *note '-mfar-mode': TIC54X-Opts.
21261
21262'.fclist'
21263'.fcnolist'
21264     Control printing of false conditional blocks to the listing file.
21265
21266'.field VALUE [,SIZE]'
21267     Initialize a bitfield of SIZE bits in the current section.  If
21268     VALUE is relocatable, then SIZE must be 16.  SIZE defaults to 16
21269     bits.  If VALUE does not fit into SIZE bits, the value will be
21270     truncated.  Successive '.field' directives will pack starting at
21271     the current word, filling the most significant bits first, and
21272     aligning to the start of the next word if the field size does not
21273     fit into the space remaining in the current word.  A '.align'
21274     directive with an operand of 1 will force the next '.field'
21275     directive to begin packing into a new word.  If a label is used, it
21276     points to the word that contains the specified field.
21277
21278'.global SYMBOL [,...,SYMBOL_N]'
21279'.def SYMBOL [,...,SYMBOL_N]'
21280'.ref SYMBOL [,...,SYMBOL_N]'
21281     '.def' nominally identifies a symbol defined in the current file
21282     and available to other files.  '.ref' identifies a symbol used in
21283     the current file but defined elsewhere.  Both map to the standard
21284     '.global' directive.
21285
21286'.half VALUE [,...,VALUE_N]'
21287'.uhalf VALUE [,...,VALUE_N]'
21288'.short VALUE [,...,VALUE_N]'
21289'.ushort VALUE [,...,VALUE_N]'
21290'.int VALUE [,...,VALUE_N]'
21291'.uint VALUE [,...,VALUE_N]'
21292'.word VALUE [,...,VALUE_N]'
21293'.uword VALUE [,...,VALUE_N]'
21294     Place one or more values into consecutive words of the current
21295     section.  If a label is used, it points to the word allocated for
21296     the first value encountered.
21297
21298'.label SYMBOL'
21299     Define a special SYMBOL to refer to the load time address of the
21300     current section program counter.
21301
21302'.length'
21303'.width'
21304     Set the page length and width of the output listing file.  Ignored.
21305
21306'.list'
21307'.nolist'
21308     Control whether the source listing is printed.  Ignored.
21309
21310'.long VALUE [,...,VALUE_N]'
21311'.ulong VALUE [,...,VALUE_N]'
21312'.xlong VALUE [,...,VALUE_N]'
21313     Place one or more 32-bit values into consecutive words in the
21314     current section.  The most significant word is stored first.
21315     '.long' and '.ulong' align the result on a longword boundary;
21316     'xlong' does not.
21317
21318'.loop [COUNT]'
21319'.break [CONDITION]'
21320'.endloop'
21321     Repeatedly assemble a block of code.  '.loop' begins the block, and
21322     '.endloop' marks its termination.  COUNT defaults to 1024, and
21323     indicates the number of times the block should be repeated.
21324     '.break' terminates the loop so that assembly begins after the
21325     '.endloop' directive.  The optional CONDITION will cause the loop
21326     to terminate only if it evaluates to zero.
21327
21328'MACRO_NAME .macro [PARAM1][,...PARAM_N]'
21329'[.mexit]'
21330'.endm'
21331     See the section on macros for more explanation (*Note
21332     TIC54X-Macros::.
21333
21334'.mlib "FILENAME" | FILENAME'
21335     Load the macro library FILENAME.  FILENAME must be an archived
21336     library (BFD ar-compatible) of text files, expected to contain only
21337     macro definitions.  The standard include search path is used.
21338
21339'.mlist'
21340'.mnolist'
21341     Control whether to include macro and loop block expansions in the
21342     listing output.  Ignored.
21343
21344'.mmregs'
21345     Define global symbolic names for the 'c54x registers.  Supposedly
21346     equivalent to executing '.set' directives for each register with
21347     its memory-mapped value, but in reality is provided only for
21348     compatibility and does nothing.
21349
21350'.newblock'
21351     This directive resets any TIC54X local labels currently defined.
21352     Normal 'as' local labels are unaffected.
21353
21354'.option OPTION_LIST'
21355     Set listing options.  Ignored.
21356
21357'.sblock "SECTION_NAME" | SECTION_NAME [,"NAME_N" | NAME_N]'
21358     Designate SECTION_NAME for blocking.  Blocking guarantees that a
21359     section will start on a page boundary (128 words) if it would
21360     otherwise cross a page boundary.  Only initialized sections may be
21361     designated with this directive.  See also *Note TIC54X-Block::.
21362
21363'.sect "SECTION_NAME"'
21364     Define a named initialized section and make it the current section.
21365
21366'SYMBOL .set "VALUE"'
21367'SYMBOL .equ "VALUE"'
21368     Equate a constant VALUE to a SYMBOL, which is placed in the symbol
21369     table.  SYMBOL may not be previously defined.
21370
21371'.space SIZE_IN_BITS'
21372'.bes SIZE_IN_BITS'
21373     Reserve the given number of bits in the current section and
21374     zero-fill them.  If a label is used with '.space', it points to the
21375     *first* word reserved.  With '.bes', the label points to the *last*
21376     word reserved.
21377
21378'.sslist'
21379'.ssnolist'
21380     Controls the inclusion of subsym replacement in the listing output.
21381     Ignored.
21382
21383'.string "STRING" [,...,"STRING_N"]'
21384'.pstring "STRING" [,...,"STRING_N"]'
21385     Place 8-bit characters from STRING into the current section.
21386     '.string' zero-fills the upper 8 bits of each word, while
21387     '.pstring' puts two characters into each word, filling the
21388     most-significant bits first.  Unused space is zero-filled.  If a
21389     label is used, it points to the first word initialized.
21390
21391'[STAG] .struct [OFFSET]'
21392'[NAME_1] element [COUNT_1]'
21393'[NAME_2] element [COUNT_2]'
21394'[TNAME] .tag STAGX [TCOUNT]'
21395'...'
21396'[NAME_N] element [COUNT_N]'
21397'[SSIZE] .endstruct'
21398'LABEL .tag [STAG]'
21399     Assign symbolic offsets to the elements of a structure.  STAG
21400     defines a symbol to use to reference the structure.  OFFSET
21401     indicates a starting value to use for the first element
21402     encountered; otherwise it defaults to zero.  Each element can have
21403     a named offset, NAME, which is a symbol assigned the value of the
21404     element's offset into the structure.  If STAG is missing, these
21405     become global symbols.  COUNT adjusts the offset that many times,
21406     as if 'element' were an array.  'element' may be one of '.byte',
21407     '.word', '.long', '.float', or any equivalent of those, and the
21408     structure offset is adjusted accordingly.  '.field' and '.string'
21409     are also allowed; the size of '.field' is one bit, and '.string' is
21410     considered to be one word in size.  Only element descriptors,
21411     structure/union tags, '.align' and conditional assembly directives
21412     are allowed within '.struct'/'.endstruct'.  '.align' aligns member
21413     offsets to word boundaries only.  SSIZE, if provided, will always
21414     be assigned the size of the structure.
21415
21416     The '.tag' directive, in addition to being used to define a
21417     structure/union element within a structure, may be used to apply a
21418     structure to a symbol.  Once applied to LABEL, the individual
21419     structure elements may be applied to LABEL to produce the desired
21420     offsets using LABEL as the structure base.
21421
21422'.tab'
21423     Set the tab size in the output listing.  Ignored.
21424
21425'[UTAG] .union'
21426'[NAME_1] element [COUNT_1]'
21427'[NAME_2] element [COUNT_2]'
21428'[TNAME] .tag UTAGX[,TCOUNT]'
21429'...'
21430'[NAME_N] element [COUNT_N]'
21431'[USIZE] .endstruct'
21432'LABEL .tag [UTAG]'
21433     Similar to '.struct', but the offset after each element is reset to
21434     zero, and the USIZE is set to the maximum of all defined elements.
21435     Starting offset for the union is always zero.
21436
21437'[SYMBOL] .usect "SECTION_NAME", SIZE, [,[BLOCKING_FLAG] [,ALIGNMENT_FLAG]]'
21438     Reserve space for variables in a named, uninitialized section
21439     (similar to .bss).  '.usect' allows definitions sections
21440     independent of .bss.  SYMBOL points to the first location reserved
21441     by this allocation.  The symbol may be used as a variable name.
21442     SIZE is the allocated size in words.  BLOCKING_FLAG indicates
21443     whether to block this section on a page boundary (128 words) (*note
21444     TIC54X-Block::).  ALIGNMENT FLAG indicates whether the section
21445     should be longword-aligned.
21446
21447'.var SYM[,..., SYM_N]'
21448     Define a subsym to be a local variable within a macro.  See *Note
21449     TIC54X-Macros::.
21450
21451'.version VERSION'
21452     Set which processor to build instructions for.  Though the
21453     following values are accepted, the op is ignored.
21454     '541'
21455     '542'
21456     '543'
21457     '545'
21458     '545LP'
21459     '546LP'
21460     '548'
21461     '549'
21462
21463
21464File: as.info,  Node: TIC54X-Macros,  Next: TIC54X-MMRegs,  Prev: TIC54X-Directives,  Up: TIC54X-Dependent
21465
214669.45.10 Macros
21467--------------
21468
21469Macros do not require explicit dereferencing of arguments (i.e., \ARG).
21470
21471   During macro expansion, the macro parameters are converted to
21472subsyms.  If the number of arguments passed the macro invocation exceeds
21473the number of parameters defined, the last parameter is assigned the
21474string equivalent of all remaining arguments.  If fewer arguments are
21475given than parameters, the missing parameters are assigned empty
21476strings.  To include a comma in an argument, you must enclose the
21477argument in quotes.
21478
21479   The following built-in subsym functions allow examination of the
21480string value of subsyms (or ordinary strings).  The arguments are
21481strings unless otherwise indicated (subsyms passed as args will be
21482replaced by the strings they represent).
21483'$symlen(STR)'
21484     Returns the length of STR.
21485
21486'$symcmp(STR1,STR2)'
21487     Returns 0 if STR1 == STR2, non-zero otherwise.
21488
21489'$firstch(STR,CH)'
21490     Returns index of the first occurrence of character constant CH in
21491     STR.
21492
21493'$lastch(STR,CH)'
21494     Returns index of the last occurrence of character constant CH in
21495     STR.
21496
21497'$isdefed(SYMBOL)'
21498     Returns zero if the symbol SYMBOL is not in the symbol table,
21499     non-zero otherwise.
21500
21501'$ismember(SYMBOL,LIST)'
21502     Assign the first member of comma-separated string LIST to SYMBOL;
21503     LIST is reassigned the remainder of the list.  Returns zero if LIST
21504     is a null string.  Both arguments must be subsyms.
21505
21506'$iscons(EXPR)'
21507     Returns 1 if string EXPR is binary, 2 if octal, 3 if hexadecimal, 4
21508     if a character, 5 if decimal, and zero if not an integer.
21509
21510'$isname(NAME)'
21511     Returns 1 if NAME is a valid symbol name, zero otherwise.
21512
21513'$isreg(REG)'
21514     Returns 1 if REG is a valid predefined register name (AR0-AR7
21515     only).
21516
21517'$structsz(STAG)'
21518     Returns the size of the structure or union represented by STAG.
21519
21520'$structacc(STAG)'
21521     Returns the reference point of the structure or union represented
21522     by STAG.  Always returns zero.
21523
21524
21525File: as.info,  Node: TIC54X-MMRegs,  Next: TIC54X-Syntax,  Prev: TIC54X-Macros,  Up: TIC54X-Dependent
21526
215279.45.11 Memory-mapped Registers
21528-------------------------------
21529
21530The following symbols are recognized as memory-mapped registers:
21531
21532
21533File: as.info,  Node: TIC54X-Syntax,  Prev: TIC54X-MMRegs,  Up: TIC54X-Dependent
21534
215359.45.12 TIC54X Syntax
21536---------------------
21537
21538* Menu:
21539
21540* TIC54X-Chars::                Special Characters
21541
21542
21543File: as.info,  Node: TIC54X-Chars,  Up: TIC54X-Syntax
21544
215459.45.12.1 Special Characters
21546............................
21547
21548The presence of a ';' appearing anywhere on a line indicates the start
21549of a comment that extends to the end of that line.
21550
21551   If a '#' appears as the first character of a line then the whole line
21552is treated as a comment, but in this case the line can also be a logical
21553line number directive (*note Comments::) or a preprocessor control
21554command (*note Preprocessing::).
21555
21556   The presence of an asterisk ('*') at the start of a line also
21557indicates a comment that extends to the end of that line.
21558
21559   The TIC54X assembler does not currently support a line separator
21560character.
21561
21562
21563File: as.info,  Node: TIC6X-Dependent,  Next: TILE-Gx-Dependent,  Prev: TIC54X-Dependent,  Up: Machine Dependencies
21564
215659.46 TIC6X Dependent Features
21566=============================
21567
21568* Menu:
21569
21570* TIC6X Options::            Options
21571* TIC6X Syntax::             Syntax
21572* TIC6X Directives::         Directives
21573
21574
21575File: as.info,  Node: TIC6X Options,  Next: TIC6X Syntax,  Up: TIC6X-Dependent
21576
215779.46.1 TIC6X Options
21578--------------------
21579
21580'-march=ARCH'
21581     Enable (only) instructions from architecture ARCH.  By default, all
21582     instructions are permitted.
21583
21584     The following values of ARCH are accepted: 'c62x', 'c64x', 'c64x+',
21585     'c67x', 'c67x+', 'c674x'.
21586
21587'-mdsbt'
21588'-mno-dsbt'
21589     The '-mdsbt' option causes the assembler to generate the
21590     'Tag_ABI_DSBT' attribute with a value of 1, indicating that the
21591     code is using DSBT addressing.  The '-mno-dsbt' option, the
21592     default, causes the tag to have a value of 0, indicating that the
21593     code does not use DSBT addressing.  The linker will emit a warning
21594     if objects of different type (DSBT and non-DSBT) are linked
21595     together.
21596
21597'-mpid=no'
21598'-mpid=near'
21599'-mpid=far'
21600     The '-mpid=' option causes the assembler to generate the
21601     'Tag_ABI_PID' attribute with a value indicating the form of data
21602     addressing used by the code.  '-mpid=no', the default, indicates
21603     position-dependent data addressing, '-mpid=near' indicates
21604     position-independent addressing with GOT accesses using near DP
21605     addressing, and '-mpid=far' indicates position-independent
21606     addressing with GOT accesses using far DP addressing.  The linker
21607     will emit a warning if objects built with different settings of
21608     this option are linked together.
21609
21610'-mpic'
21611'-mno-pic'
21612     The '-mpic' option causes the assembler to generate the
21613     'Tag_ABI_PIC' attribute with a value of 1, indicating that the code
21614     is using position-independent code addressing, The '-mno-pic'
21615     option, the default, causes the tag to have a value of 0,
21616     indicating position-dependent code addressing.  The linker will
21617     emit a warning if objects of different type (position-dependent and
21618     position-independent) are linked together.
21619
21620'-mbig-endian'
21621'-mlittle-endian'
21622     Generate code for the specified endianness.  The default is
21623     little-endian.
21624
21625
21626File: as.info,  Node: TIC6X Syntax,  Next: TIC6X Directives,  Prev: TIC6X Options,  Up: TIC6X-Dependent
21627
216289.46.2 TIC6X Syntax
21629-------------------
21630
21631The presence of a ';' on a line indicates the start of a comment that
21632extends to the end of the current line.  If a '#' or '*' appears as the
21633first character of a line, the whole line is treated as a comment.  Note
21634that if a line starts with a '#' character then it can also be a logical
21635line number directive (*note Comments::) or a preprocessor control
21636command (*note Preprocessing::).
21637
21638   The '@' character can be used instead of a newline to separate
21639statements.
21640
21641   Instruction, register and functional unit names are case-insensitive.
21642'as' requires fully-specified functional unit names, such as '.S1',
21643'.L1X' or '.D1T2', on all instructions using a functional unit.
21644
21645   For some instructions, there may be syntactic ambiguity between
21646register or functional unit names and the names of labels or other
21647symbols.  To avoid this, enclose the ambiguous symbol name in
21648parentheses; register and functional unit names may not be enclosed in
21649parentheses.
21650
21651
21652File: as.info,  Node: TIC6X Directives,  Prev: TIC6X Syntax,  Up: TIC6X-Dependent
21653
216549.46.3 TIC6X Directives
21655-----------------------
21656
21657Directives controlling the set of instructions accepted by the assembler
21658have effect for instructions between the directive and any subsequent
21659directive overriding it.
21660
21661'.arch ARCH'
21662     This has the same effect as '-march=ARCH'.
21663
21664'.cantunwind'
21665     Prevents unwinding through the current function.  No personality
21666     routine or exception table data is required or permitted.
21667
21668     If this is not specified then frame unwinding information will be
21669     constructed from CFI directives.  *note CFI directives::.
21670
21671'.c6xabi_attribute TAG, VALUE'
21672     Set the C6000 EABI build attribute TAG to VALUE.
21673
21674     The TAG is either an attribute number or one of 'Tag_ISA',
21675     'Tag_ABI_wchar_t', 'Tag_ABI_stack_align_needed',
21676     'Tag_ABI_stack_align_preserved', 'Tag_ABI_DSBT', 'Tag_ABI_PID',
21677     'Tag_ABI_PIC', 'TAG_ABI_array_object_alignment',
21678     'TAG_ABI_array_object_align_expected', 'Tag_ABI_compatibility' and
21679     'Tag_ABI_conformance'.  The VALUE is either a 'number', '"string"',
21680     or 'number, "string"' depending on the tag.
21681
21682'.ehtype SYMBOL'
21683     Output an exception type table reference to SYMBOL.
21684
21685'.endp'
21686     Marks the end of and exception table or function.  If preceded by a
21687     '.handlerdata' directive then this also switched back to the
21688     previous text section.
21689
21690'.handlerdata'
21691     Marks the end of the current function, and the start of the
21692     exception table entry for that function.  Anything between this
21693     directive and the '.endp' directive will be added to the exception
21694     table entry.
21695
21696     Must be preceded by a CFI block containing a '.cfi_lsda' directive.
21697
21698'.nocmp'
21699     Disallow use of C64x+ compact instructions in the current text
21700     section.
21701
21702'.personalityindex INDEX'
21703     Sets the personality routine for the current function to the ABI
21704     specified compact routine number INDEX
21705
21706'.personality NAME'
21707     Sets the personality routine for the current function to NAME.
21708
21709'.scomm SYMBOL, SIZE, ALIGN'
21710     Like '.comm', creating a common symbol SYMBOL with size SIZE and
21711     alignment ALIGN, but unlike when using '.comm', this symbol will be
21712     placed into the small BSS section by the linker.
21713
21714
21715File: as.info,  Node: TILE-Gx-Dependent,  Next: TILEPro-Dependent,  Prev: TIC6X-Dependent,  Up: Machine Dependencies
21716
217179.47 TILE-Gx Dependent Features
21718===============================
21719
21720* Menu:
21721
21722* TILE-Gx Options::		TILE-Gx Options
21723* TILE-Gx Syntax::		TILE-Gx Syntax
21724* TILE-Gx Directives::		TILE-Gx Directives
21725
21726
21727File: as.info,  Node: TILE-Gx Options,  Next: TILE-Gx Syntax,  Up: TILE-Gx-Dependent
21728
217299.47.1 Options
21730--------------
21731
21732The following table lists all available TILE-Gx specific options:
21733
21734'-m32 | -m64'
21735     Select the word size, either 32 bits or 64 bits.
21736
21737'-EB | -EL'
21738     Select the endianness, either big-endian (-EB) or little-endian
21739     (-EL).
21740
21741
21742File: as.info,  Node: TILE-Gx Syntax,  Next: TILE-Gx Directives,  Prev: TILE-Gx Options,  Up: TILE-Gx-Dependent
21743
217449.47.2 Syntax
21745-------------
21746
21747Block comments are delimited by '/*' and '*/'.  End of line comments may
21748be introduced by '#'.
21749
21750   Instructions consist of a leading opcode or macro name followed by
21751whitespace and an optional comma-separated list of operands:
21752
21753     OPCODE [OPERAND, ...]
21754
21755   Instructions must be separated by a newline or semicolon.
21756
21757   There are two ways to write code: either write naked instructions,
21758which the assembler is free to combine into VLIW bundles, or specify the
21759VLIW bundles explicitly.
21760
21761   Bundles are specified using curly braces:
21762
21763     { ADD r3,r4,r5 ; ADD r7,r8,r9 ; LW r10,r11 }
21764
21765   A bundle can span multiple lines.  If you want to put multiple
21766instructions on a line, whether in a bundle or not, you need to separate
21767them with semicolons as in this example.
21768
21769   A bundle may contain one or more instructions, up to the limit
21770specified by the ISA (currently three).  If fewer instructions are
21771specified than the hardware supports in a bundle, the assembler inserts
21772'fnop' instructions automatically.
21773
21774   The assembler will prefer to preserve the ordering of instructions
21775within the bundle, putting the first instruction in a lower-numbered
21776pipeline than the next one, etc.  This fact, combined with the optional
21777use of explicit 'fnop' or 'nop' instructions, allows precise control
21778over which pipeline executes each instruction.
21779
21780   If the instructions cannot be bundled in the listed order, the
21781assembler will automatically try to find a valid pipeline assignment.
21782If there is no way to bundle the instructions together, the assembler
21783reports an error.
21784
21785   The assembler does not yet auto-bundle (automatically combine
21786multiple instructions into one bundle), but it reserves the right to do
21787so in the future.  If you want to force an instruction to run by itself,
21788put it in a bundle explicitly with curly braces and use 'nop'
21789instructions (not 'fnop') to fill the remaining pipeline slots in that
21790bundle.
21791
21792* Menu:
21793
21794* TILE-Gx Opcodes::              Opcode Naming Conventions.
21795* TILE-Gx Registers::            Register Naming.
21796* TILE-Gx Modifiers::            Symbolic Operand Modifiers.
21797
21798
21799File: as.info,  Node: TILE-Gx Opcodes,  Next: TILE-Gx Registers,  Up: TILE-Gx Syntax
21800
218019.47.2.1 Opcode Names
21802.....................
21803
21804For a complete list of opcodes and descriptions of their semantics, see
21805'TILE-Gx Instruction Set Architecture', available upon request at
21806www.tilera.com.
21807
21808
21809File: as.info,  Node: TILE-Gx Registers,  Next: TILE-Gx Modifiers,  Prev: TILE-Gx Opcodes,  Up: TILE-Gx Syntax
21810
218119.47.2.2 Register Names
21812.......................
21813
21814General-purpose registers are represented by predefined symbols of the
21815form 'rN', where N represents a number between '0' and '63'.  However,
21816the following registers have canonical names that must be used instead:
21817
21818'r54'
21819     sp
21820
21821'r55'
21822     lr
21823
21824'r56'
21825     sn
21826
21827'r57'
21828     idn0
21829
21830'r58'
21831     idn1
21832
21833'r59'
21834     udn0
21835
21836'r60'
21837     udn1
21838
21839'r61'
21840     udn2
21841
21842'r62'
21843     udn3
21844
21845'r63'
21846     zero
21847
21848   The assembler will emit a warning if a numeric name is used instead
21849of the non-numeric name.  The '.no_require_canonical_reg_names'
21850assembler pseudo-op turns off this warning.
21851'.require_canonical_reg_names' turns it back on.
21852
21853
21854File: as.info,  Node: TILE-Gx Modifiers,  Prev: TILE-Gx Registers,  Up: TILE-Gx Syntax
21855
218569.47.2.3 Symbolic Operand Modifiers
21857...................................
21858
21859The assembler supports several modifiers when using symbol addresses in
21860TILE-Gx instruction operands.  The general syntax is the following:
21861
21862     modifier(symbol)
21863
21864   The following modifiers are supported:
21865
21866'hw0'
21867
21868     This modifier is used to load bits 0-15 of the symbol's address.
21869
21870'hw1'
21871
21872     This modifier is used to load bits 16-31 of the symbol's address.
21873
21874'hw2'
21875
21876     This modifier is used to load bits 32-47 of the symbol's address.
21877
21878'hw3'
21879
21880     This modifier is used to load bits 48-63 of the symbol's address.
21881
21882'hw0_last'
21883
21884     This modifier yields the same value as 'hw0', but it also checks
21885     that the value does not overflow.
21886
21887'hw1_last'
21888
21889     This modifier yields the same value as 'hw1', but it also checks
21890     that the value does not overflow.
21891
21892'hw2_last'
21893
21894     This modifier yields the same value as 'hw2', but it also checks
21895     that the value does not overflow.
21896
21897     A 48-bit symbolic value is constructed by using the following
21898     idiom:
21899
21900          moveli r0, hw2_last(sym)
21901          shl16insli r0, r0, hw1(sym)
21902          shl16insli r0, r0, hw0(sym)
21903
21904'hw0_got'
21905
21906     This modifier is used to load bits 0-15 of the symbol's offset in
21907     the GOT entry corresponding to the symbol.
21908
21909'hw0_last_got'
21910
21911     This modifier yields the same value as 'hw0_got', but it also
21912     checks that the value does not overflow.
21913
21914'hw1_last_got'
21915
21916     This modifier is used to load bits 16-31 of the symbol's offset in
21917     the GOT entry corresponding to the symbol, and it also checks that
21918     the value does not overflow.
21919
21920'plt'
21921
21922     This modifier is used for function symbols.  It causes a _procedure
21923     linkage table_, an array of code stubs, to be created at the time
21924     the shared object is created or linked against, together with a
21925     global offset table entry.  The value is a pc-relative offset to
21926     the corresponding stub code in the procedure linkage table.  This
21927     arrangement causes the run-time symbol resolver to be called to
21928     look up and set the value of the symbol the first time the function
21929     is called (at latest; depending environment variables).  It is only
21930     safe to leave the symbol unresolved this way if all references are
21931     function calls.
21932
21933'hw0_plt'
21934
21935     This modifier is used to load bits 0-15 of the pc-relative address
21936     of a plt entry.
21937
21938'hw1_plt'
21939
21940     This modifier is used to load bits 16-31 of the pc-relative address
21941     of a plt entry.
21942
21943'hw1_last_plt'
21944
21945     This modifier yields the same value as 'hw1_plt', but it also
21946     checks that the value does not overflow.
21947
21948'hw2_last_plt'
21949
21950     This modifier is used to load bits 32-47 of the pc-relative address
21951     of a plt entry, and it also checks that the value does not
21952     overflow.
21953
21954'hw0_tls_gd'
21955
21956     This modifier is used to load bits 0-15 of the offset of the GOT
21957     entry of the symbol's TLS descriptor, to be used for
21958     general-dynamic TLS accesses.
21959
21960'hw0_last_tls_gd'
21961
21962     This modifier yields the same value as 'hw0_tls_gd', but it also
21963     checks that the value does not overflow.
21964
21965'hw1_last_tls_gd'
21966
21967     This modifier is used to load bits 16-31 of the offset of the GOT
21968     entry of the symbol's TLS descriptor, to be used for
21969     general-dynamic TLS accesses.  It also checks that the value does
21970     not overflow.
21971
21972'hw0_tls_ie'
21973
21974     This modifier is used to load bits 0-15 of the offset of the GOT
21975     entry containing the offset of the symbol's address from the TCB,
21976     to be used for initial-exec TLS accesses.
21977
21978'hw0_last_tls_ie'
21979
21980     This modifier yields the same value as 'hw0_tls_ie', but it also
21981     checks that the value does not overflow.
21982
21983'hw1_last_tls_ie'
21984
21985     This modifier is used to load bits 16-31 of the offset of the GOT
21986     entry containing the offset of the symbol's address from the TCB,
21987     to be used for initial-exec TLS accesses.  It also checks that the
21988     value does not overflow.
21989
21990'hw0_tls_le'
21991
21992     This modifier is used to load bits 0-15 of the offset of the
21993     symbol's address from the TCB, to be used for local-exec TLS
21994     accesses.
21995
21996'hw0_last_tls_le'
21997
21998     This modifier yields the same value as 'hw0_tls_le', but it also
21999     checks that the value does not overflow.
22000
22001'hw1_last_tls_le'
22002
22003     This modifier is used to load bits 16-31 of the offset of the
22004     symbol's address from the TCB, to be used for local-exec TLS
22005     accesses.  It also checks that the value does not overflow.
22006
22007'tls_gd_call'
22008
22009     This modifier is used to tag an instruction as the "call" part of a
22010     calling sequence for a TLS GD reference of its operand.
22011
22012'tls_gd_add'
22013
22014     This modifier is used to tag an instruction as the "add" part of a
22015     calling sequence for a TLS GD reference of its operand.
22016
22017'tls_ie_load'
22018
22019     This modifier is used to tag an instruction as the "load" part of a
22020     calling sequence for a TLS IE reference of its operand.
22021
22022
22023File: as.info,  Node: TILE-Gx Directives,  Prev: TILE-Gx Syntax,  Up: TILE-Gx-Dependent
22024
220259.47.3 TILE-Gx Directives
22026-------------------------
22027
22028'.align EXPRESSION [, EXPRESSION]'
22029     This is the generic .ALIGN directive.  The first argument is the
22030     requested alignment in bytes.
22031
22032'.allow_suspicious_bundles'
22033     Turns on error checking for combinations of instructions in a
22034     bundle that probably indicate a programming error.  This is on by
22035     default.
22036
22037'.no_allow_suspicious_bundles'
22038     Turns off error checking for combinations of instructions in a
22039     bundle that probably indicate a programming error.
22040
22041'.require_canonical_reg_names'
22042     Require that canonical register names be used, and emit a warning
22043     if the numeric names are used.  This is on by default.
22044
22045'.no_require_canonical_reg_names'
22046     Permit the use of numeric names for registers that have canonical
22047     names.
22048
22049
22050File: as.info,  Node: TILEPro-Dependent,  Next: V850-Dependent,  Prev: TILE-Gx-Dependent,  Up: Machine Dependencies
22051
220529.48 TILEPro Dependent Features
22053===============================
22054
22055* Menu:
22056
22057* TILEPro Options::		TILEPro Options
22058* TILEPro Syntax::		TILEPro Syntax
22059* TILEPro Directives::		TILEPro Directives
22060
22061
22062File: as.info,  Node: TILEPro Options,  Next: TILEPro Syntax,  Up: TILEPro-Dependent
22063
220649.48.1 Options
22065--------------
22066
22067'as' has no machine-dependent command-line options for TILEPro.
22068
22069
22070File: as.info,  Node: TILEPro Syntax,  Next: TILEPro Directives,  Prev: TILEPro Options,  Up: TILEPro-Dependent
22071
220729.48.2 Syntax
22073-------------
22074
22075Block comments are delimited by '/*' and '*/'.  End of line comments may
22076be introduced by '#'.
22077
22078   Instructions consist of a leading opcode or macro name followed by
22079whitespace and an optional comma-separated list of operands:
22080
22081     OPCODE [OPERAND, ...]
22082
22083   Instructions must be separated by a newline or semicolon.
22084
22085   There are two ways to write code: either write naked instructions,
22086which the assembler is free to combine into VLIW bundles, or specify the
22087VLIW bundles explicitly.
22088
22089   Bundles are specified using curly braces:
22090
22091     { ADD r3,r4,r5 ; ADD r7,r8,r9 ; LW r10,r11 }
22092
22093   A bundle can span multiple lines.  If you want to put multiple
22094instructions on a line, whether in a bundle or not, you need to separate
22095them with semicolons as in this example.
22096
22097   A bundle may contain one or more instructions, up to the limit
22098specified by the ISA (currently three).  If fewer instructions are
22099specified than the hardware supports in a bundle, the assembler inserts
22100'fnop' instructions automatically.
22101
22102   The assembler will prefer to preserve the ordering of instructions
22103within the bundle, putting the first instruction in a lower-numbered
22104pipeline than the next one, etc.  This fact, combined with the optional
22105use of explicit 'fnop' or 'nop' instructions, allows precise control
22106over which pipeline executes each instruction.
22107
22108   If the instructions cannot be bundled in the listed order, the
22109assembler will automatically try to find a valid pipeline assignment.
22110If there is no way to bundle the instructions together, the assembler
22111reports an error.
22112
22113   The assembler does not yet auto-bundle (automatically combine
22114multiple instructions into one bundle), but it reserves the right to do
22115so in the future.  If you want to force an instruction to run by itself,
22116put it in a bundle explicitly with curly braces and use 'nop'
22117instructions (not 'fnop') to fill the remaining pipeline slots in that
22118bundle.
22119
22120* Menu:
22121
22122* TILEPro Opcodes::              Opcode Naming Conventions.
22123* TILEPro Registers::            Register Naming.
22124* TILEPro Modifiers::            Symbolic Operand Modifiers.
22125
22126
22127File: as.info,  Node: TILEPro Opcodes,  Next: TILEPro Registers,  Up: TILEPro Syntax
22128
221299.48.2.1 Opcode Names
22130.....................
22131
22132For a complete list of opcodes and descriptions of their semantics, see
22133'TILE Processor User Architecture Manual', available upon request at
22134www.tilera.com.
22135
22136
22137File: as.info,  Node: TILEPro Registers,  Next: TILEPro Modifiers,  Prev: TILEPro Opcodes,  Up: TILEPro Syntax
22138
221399.48.2.2 Register Names
22140.......................
22141
22142General-purpose registers are represented by predefined symbols of the
22143form 'rN', where N represents a number between '0' and '63'.  However,
22144the following registers have canonical names that must be used instead:
22145
22146'r54'
22147     sp
22148
22149'r55'
22150     lr
22151
22152'r56'
22153     sn
22154
22155'r57'
22156     idn0
22157
22158'r58'
22159     idn1
22160
22161'r59'
22162     udn0
22163
22164'r60'
22165     udn1
22166
22167'r61'
22168     udn2
22169
22170'r62'
22171     udn3
22172
22173'r63'
22174     zero
22175
22176   The assembler will emit a warning if a numeric name is used instead
22177of the canonical name.  The '.no_require_canonical_reg_names' assembler
22178pseudo-op turns off this warning.  '.require_canonical_reg_names' turns
22179it back on.
22180
22181
22182File: as.info,  Node: TILEPro Modifiers,  Prev: TILEPro Registers,  Up: TILEPro Syntax
22183
221849.48.2.3 Symbolic Operand Modifiers
22185...................................
22186
22187The assembler supports several modifiers when using symbol addresses in
22188TILEPro instruction operands.  The general syntax is the following:
22189
22190     modifier(symbol)
22191
22192   The following modifiers are supported:
22193
22194'lo16'
22195
22196     This modifier is used to load the low 16 bits of the symbol's
22197     address, sign-extended to a 32-bit value (sign-extension allows it
22198     to be range-checked against signed 16 bit immediate operands
22199     without complaint).
22200
22201'hi16'
22202
22203     This modifier is used to load the high 16 bits of the symbol's
22204     address, also sign-extended to a 32-bit value.
22205
22206'ha16'
22207
22208     'ha16(N)' is identical to 'hi16(N)', except if 'lo16(N)' is
22209     negative it adds one to the 'hi16(N)' value.  This way 'lo16' and
22210     'ha16' can be added to create any 32-bit value using 'auli'.  For
22211     example, here is how you move an arbitrary 32-bit address into r3:
22212
22213          moveli r3, lo16(sym)
22214          auli r3, r3, ha16(sym)
22215
22216'got'
22217
22218     This modifier is used to load the offset of the GOT entry
22219     corresponding to the symbol.
22220
22221'got_lo16'
22222
22223     This modifier is used to load the sign-extended low 16 bits of the
22224     offset of the GOT entry corresponding to the symbol.
22225
22226'got_hi16'
22227
22228     This modifier is used to load the sign-extended high 16 bits of the
22229     offset of the GOT entry corresponding to the symbol.
22230
22231'got_ha16'
22232
22233     This modifier is like 'got_hi16', but it adds one if 'got_lo16' of
22234     the input value is negative.
22235
22236'plt'
22237
22238     This modifier is used for function symbols.  It causes a _procedure
22239     linkage table_, an array of code stubs, to be created at the time
22240     the shared object is created or linked against, together with a
22241     global offset table entry.  The value is a pc-relative offset to
22242     the corresponding stub code in the procedure linkage table.  This
22243     arrangement causes the run-time symbol resolver to be called to
22244     look up and set the value of the symbol the first time the function
22245     is called (at latest; depending environment variables).  It is only
22246     safe to leave the symbol unresolved this way if all references are
22247     function calls.
22248
22249'tls_gd'
22250
22251     This modifier is used to load the offset of the GOT entry of the
22252     symbol's TLS descriptor, to be used for general-dynamic TLS
22253     accesses.
22254
22255'tls_gd_lo16'
22256
22257     This modifier is used to load the sign-extended low 16 bits of the
22258     offset of the GOT entry of the symbol's TLS descriptor, to be used
22259     for general dynamic TLS accesses.
22260
22261'tls_gd_hi16'
22262
22263     This modifier is used to load the sign-extended high 16 bits of the
22264     offset of the GOT entry of the symbol's TLS descriptor, to be used
22265     for general dynamic TLS accesses.
22266
22267'tls_gd_ha16'
22268
22269     This modifier is like 'tls_gd_hi16', but it adds one to the value
22270     if 'tls_gd_lo16' of the input value is negative.
22271
22272'tls_ie'
22273
22274     This modifier is used to load the offset of the GOT entry
22275     containing the offset of the symbol's address from the TCB, to be
22276     used for initial-exec TLS accesses.
22277
22278'tls_ie_lo16'
22279
22280     This modifier is used to load the low 16 bits of the offset of the
22281     GOT entry containing the offset of the symbol's address from the
22282     TCB, to be used for initial-exec TLS accesses.
22283
22284'tls_ie_hi16'
22285
22286     This modifier is used to load the high 16 bits of the offset of the
22287     GOT entry containing the offset of the symbol's address from the
22288     TCB, to be used for initial-exec TLS accesses.
22289
22290'tls_ie_ha16'
22291
22292     This modifier is like 'tls_ie_hi16', but it adds one to the value
22293     if 'tls_ie_lo16' of the input value is negative.
22294
22295'tls_le'
22296
22297     This modifier is used to load the offset of the symbol's address
22298     from the TCB, to be used for local-exec TLS accesses.
22299
22300'tls_le_lo16'
22301
22302     This modifier is used to load the low 16 bits of the offset of the
22303     symbol's address from the TCB, to be used for local-exec TLS
22304     accesses.
22305
22306'tls_le_hi16'
22307
22308     This modifier is used to load the high 16 bits of the offset of the
22309     symbol's address from the TCB, to be used for local-exec TLS
22310     accesses.
22311
22312'tls_le_ha16'
22313
22314     This modifier is like 'tls_le_hi16', but it adds one to the value
22315     if 'tls_le_lo16' of the input value is negative.
22316
22317'tls_gd_call'
22318
22319     This modifier is used to tag an instruction as the "call" part of a
22320     calling sequence for a TLS GD reference of its operand.
22321
22322'tls_gd_add'
22323
22324     This modifier is used to tag an instruction as the "add" part of a
22325     calling sequence for a TLS GD reference of its operand.
22326
22327'tls_ie_load'
22328
22329     This modifier is used to tag an instruction as the "load" part of a
22330     calling sequence for a TLS IE reference of its operand.
22331
22332
22333File: as.info,  Node: TILEPro Directives,  Prev: TILEPro Syntax,  Up: TILEPro-Dependent
22334
223359.48.3 TILEPro Directives
22336-------------------------
22337
22338'.align EXPRESSION [, EXPRESSION]'
22339     This is the generic .ALIGN directive.  The first argument is the
22340     requested alignment in bytes.
22341
22342'.allow_suspicious_bundles'
22343     Turns on error checking for combinations of instructions in a
22344     bundle that probably indicate a programming error.  This is on by
22345     default.
22346
22347'.no_allow_suspicious_bundles'
22348     Turns off error checking for combinations of instructions in a
22349     bundle that probably indicate a programming error.
22350
22351'.require_canonical_reg_names'
22352     Require that canonical register names be used, and emit a warning
22353     if the numeric names are used.  This is on by default.
22354
22355'.no_require_canonical_reg_names'
22356     Permit the use of numeric names for registers that have canonical
22357     names.
22358
22359
22360File: as.info,  Node: V850-Dependent,  Next: Vax-Dependent,  Prev: TILEPro-Dependent,  Up: Machine Dependencies
22361
223629.49 v850 Dependent Features
22363============================
22364
22365* Menu:
22366
22367* V850 Options::              Options
22368* V850 Syntax::               Syntax
22369* V850 Floating Point::       Floating Point
22370* V850 Directives::           V850 Machine Directives
22371* V850 Opcodes::              Opcodes
22372
22373
22374File: as.info,  Node: V850 Options,  Next: V850 Syntax,  Up: V850-Dependent
22375
223769.49.1 Options
22377--------------
22378
22379'as' supports the following additional command-line options for the V850
22380processor family:
22381
22382'-wsigned_overflow'
22383     Causes warnings to be produced when signed immediate values
22384     overflow the space available for then within their opcodes.  By
22385     default this option is disabled as it is possible to receive
22386     spurious warnings due to using exact bit patterns as immediate
22387     constants.
22388
22389'-wunsigned_overflow'
22390     Causes warnings to be produced when unsigned immediate values
22391     overflow the space available for then within their opcodes.  By
22392     default this option is disabled as it is possible to receive
22393     spurious warnings due to using exact bit patterns as immediate
22394     constants.
22395
22396'-mv850'
22397     Specifies that the assembled code should be marked as being
22398     targeted at the V850 processor.  This allows the linker to detect
22399     attempts to link such code with code assembled for other
22400     processors.
22401
22402'-mv850e'
22403     Specifies that the assembled code should be marked as being
22404     targeted at the V850E processor.  This allows the linker to detect
22405     attempts to link such code with code assembled for other
22406     processors.
22407
22408'-mv850e1'
22409     Specifies that the assembled code should be marked as being
22410     targeted at the V850E1 processor.  This allows the linker to detect
22411     attempts to link such code with code assembled for other
22412     processors.
22413
22414'-mv850any'
22415     Specifies that the assembled code should be marked as being
22416     targeted at the V850 processor but support instructions that are
22417     specific to the extended variants of the process.  This allows the
22418     production of binaries that contain target specific code, but which
22419     are also intended to be used in a generic fashion.  For example
22420     libgcc.a contains generic routines used by the code produced by GCC
22421     for all versions of the v850 architecture, together with support
22422     routines only used by the V850E architecture.
22423
22424'-mv850e2'
22425     Specifies that the assembled code should be marked as being
22426     targeted at the V850E2 processor.  This allows the linker to detect
22427     attempts to link such code with code assembled for other
22428     processors.
22429
22430'-mv850e2v3'
22431     Specifies that the assembled code should be marked as being
22432     targeted at the V850E2V3 processor.  This allows the linker to
22433     detect attempts to link such code with code assembled for other
22434     processors.
22435
22436'-mv850e2v4'
22437     This is an alias for '-mv850e3v5'.
22438
22439'-mv850e3v5'
22440     Specifies that the assembled code should be marked as being
22441     targeted at the V850E3V5 processor.  This allows the linker to
22442     detect attempts to link such code with code assembled for other
22443     processors.
22444
22445'-mrelax'
22446     Enables relaxation.  This allows the .longcall and .longjump pseudo
22447     ops to be used in the assembler source code.  These ops label
22448     sections of code which are either a long function call or a long
22449     branch.  The assembler will then flag these sections of code and
22450     the linker will attempt to relax them.
22451
22452'-mgcc-abi'
22453     Marks the generated object file as supporting the old GCC ABI.
22454
22455'-mrh850-abi'
22456     Marks the generated object file as supporting the RH850 ABI. This
22457     is the default.
22458
22459'-m8byte-align'
22460     Marks the generated object file as supporting a maximum 64-bits of
22461     alignment for variables defined in the source code.
22462
22463'-m4byte-align'
22464     Marks the generated object file as supporting a maximum 32-bits of
22465     alignment for variables defined in the source code.  This is the
22466     default.
22467
22468'-msoft-float'
22469     Marks the generated object file as not using any floating point
22470     instructions - and hence can be linked with other V850 binaries
22471     that do or do not use floating point.  This is the default for
22472     binaries for architectures earlier than the 'e2v3'.
22473
22474'-mhard-float'
22475     Marks the generated object file as one that uses floating point
22476     instructions - and hence can only be linked with other V850
22477     binaries that use the same kind of floating point instructions, or
22478     with binaries that do not use floating point at all.  This is the
22479     default for binaries the 'e2v3' and later architectures.
22480
22481
22482File: as.info,  Node: V850 Syntax,  Next: V850 Floating Point,  Prev: V850 Options,  Up: V850-Dependent
22483
224849.49.2 Syntax
22485-------------
22486
22487* Menu:
22488
22489* V850-Chars::                Special Characters
22490* V850-Regs::                 Register Names
22491
22492
22493File: as.info,  Node: V850-Chars,  Next: V850-Regs,  Up: V850 Syntax
22494
224959.49.2.1 Special Characters
22496...........................
22497
22498'#' is the line comment character.  If a '#' appears as the first
22499character of a line, the whole line is treated as a comment, but in this
22500case the line can also be a logical line number directive (*note
22501Comments::) or a preprocessor control command (*note Preprocessing::).
22502
22503   Two dashes ('--') can also be used to start a line comment.
22504
22505   The ';' character can be used to separate statements on the same
22506line.
22507
22508
22509File: as.info,  Node: V850-Regs,  Prev: V850-Chars,  Up: V850 Syntax
22510
225119.49.2.2 Register Names
22512.......................
22513
22514'as' supports the following names for registers:
22515'general register 0'
22516     r0, zero
22517'general register 1'
22518     r1
22519'general register 2'
22520     r2, hp
22521'general register 3'
22522     r3, sp
22523'general register 4'
22524     r4, gp
22525'general register 5'
22526     r5, tp
22527'general register 6'
22528     r6
22529'general register 7'
22530     r7
22531'general register 8'
22532     r8
22533'general register 9'
22534     r9
22535'general register 10'
22536     r10
22537'general register 11'
22538     r11
22539'general register 12'
22540     r12
22541'general register 13'
22542     r13
22543'general register 14'
22544     r14
22545'general register 15'
22546     r15
22547'general register 16'
22548     r16
22549'general register 17'
22550     r17
22551'general register 18'
22552     r18
22553'general register 19'
22554     r19
22555'general register 20'
22556     r20
22557'general register 21'
22558     r21
22559'general register 22'
22560     r22
22561'general register 23'
22562     r23
22563'general register 24'
22564     r24
22565'general register 25'
22566     r25
22567'general register 26'
22568     r26
22569'general register 27'
22570     r27
22571'general register 28'
22572     r28
22573'general register 29'
22574     r29
22575'general register 30'
22576     r30, ep
22577'general register 31'
22578     r31, lp
22579'system register 0'
22580     eipc
22581'system register 1'
22582     eipsw
22583'system register 2'
22584     fepc
22585'system register 3'
22586     fepsw
22587'system register 4'
22588     ecr
22589'system register 5'
22590     psw
22591'system register 16'
22592     ctpc
22593'system register 17'
22594     ctpsw
22595'system register 18'
22596     dbpc
22597'system register 19'
22598     dbpsw
22599'system register 20'
22600     ctbp
22601
22602
22603File: as.info,  Node: V850 Floating Point,  Next: V850 Directives,  Prev: V850 Syntax,  Up: V850-Dependent
22604
226059.49.3 Floating Point
22606---------------------
22607
22608The V850 family uses IEEE floating-point numbers.
22609
22610
22611File: as.info,  Node: V850 Directives,  Next: V850 Opcodes,  Prev: V850 Floating Point,  Up: V850-Dependent
22612
226139.49.4 V850 Machine Directives
22614------------------------------
22615
22616'.offset <EXPRESSION>'
22617     Moves the offset into the current section to the specified amount.
22618
22619'.section "name", <type>'
22620     This is an extension to the standard .section directive.  It sets
22621     the current section to be <type> and creates an alias for this
22622     section called "name".
22623
22624'.v850'
22625     Specifies that the assembled code should be marked as being
22626     targeted at the V850 processor.  This allows the linker to detect
22627     attempts to link such code with code assembled for other
22628     processors.
22629
22630'.v850e'
22631     Specifies that the assembled code should be marked as being
22632     targeted at the V850E processor.  This allows the linker to detect
22633     attempts to link such code with code assembled for other
22634     processors.
22635
22636'.v850e1'
22637     Specifies that the assembled code should be marked as being
22638     targeted at the V850E1 processor.  This allows the linker to detect
22639     attempts to link such code with code assembled for other
22640     processors.
22641
22642'.v850e2'
22643     Specifies that the assembled code should be marked as being
22644     targeted at the V850E2 processor.  This allows the linker to detect
22645     attempts to link such code with code assembled for other
22646     processors.
22647
22648'.v850e2v3'
22649     Specifies that the assembled code should be marked as being
22650     targeted at the V850E2V3 processor.  This allows the linker to
22651     detect attempts to link such code with code assembled for other
22652     processors.
22653
22654'.v850e2v4'
22655     Specifies that the assembled code should be marked as being
22656     targeted at the V850E3V5 processor.  This allows the linker to
22657     detect attempts to link such code with code assembled for other
22658     processors.
22659
22660'.v850e3v5'
22661     Specifies that the assembled code should be marked as being
22662     targeted at the V850E3V5 processor.  This allows the linker to
22663     detect attempts to link such code with code assembled for other
22664     processors.
22665
22666
22667File: as.info,  Node: V850 Opcodes,  Prev: V850 Directives,  Up: V850-Dependent
22668
226699.49.5 Opcodes
22670--------------
22671
22672'as' implements all the standard V850 opcodes.
22673
22674   'as' also implements the following pseudo ops:
22675
22676'hi0()'
22677     Computes the higher 16 bits of the given expression and stores it
22678     into the immediate operand field of the given instruction.  For
22679     example:
22680
22681     'mulhi hi0(here - there), r5, r6'
22682
22683     computes the difference between the address of labels 'here' and
22684     'there', takes the upper 16 bits of this difference, shifts it down
22685     16 bits and then multiplies it by the lower 16 bits in register 5,
22686     putting the result into register 6.
22687
22688'lo()'
22689     Computes the lower 16 bits of the given expression and stores it
22690     into the immediate operand field of the given instruction.  For
22691     example:
22692
22693     'addi lo(here - there), r5, r6'
22694
22695     computes the difference between the address of labels 'here' and
22696     'there', takes the lower 16 bits of this difference and adds it to
22697     register 5, putting the result into register 6.
22698
22699'hi()'
22700     Computes the higher 16 bits of the given expression and then adds
22701     the value of the most significant bit of the lower 16 bits of the
22702     expression and stores the result into the immediate operand field
22703     of the given instruction.  For example the following code can be
22704     used to compute the address of the label 'here' and store it into
22705     register 6:
22706
22707     'movhi hi(here), r0, r6' 'movea lo(here), r6, r6'
22708
22709     The reason for this special behaviour is that movea performs a sign
22710     extension on its immediate operand.  So for example if the address
22711     of 'here' was 0xFFFFFFFF then without the special behaviour of the
22712     hi() pseudo-op the movhi instruction would put 0xFFFF0000 into r6,
22713     then the movea instruction would takes its immediate operand,
22714     0xFFFF, sign extend it to 32 bits, 0xFFFFFFFF, and then add it into
22715     r6 giving 0xFFFEFFFF which is wrong (the fifth nibble is E). With
22716     the hi() pseudo op adding in the top bit of the lo() pseudo op, the
22717     movhi instruction actually stores 0 into r6 (0xFFFF + 1 = 0x0000),
22718     so that the movea instruction stores 0xFFFFFFFF into r6 - the right
22719     value.
22720
22721'hilo()'
22722     Computes the 32 bit value of the given expression and stores it
22723     into the immediate operand field of the given instruction (which
22724     must be a mov instruction).  For example:
22725
22726     'mov hilo(here), r6'
22727
22728     computes the absolute address of label 'here' and puts the result
22729     into register 6.
22730
22731'sdaoff()'
22732     Computes the offset of the named variable from the start of the
22733     Small Data Area (whose address is held in register 4, the GP
22734     register) and stores the result as a 16 bit signed value in the
22735     immediate operand field of the given instruction.  For example:
22736
22737     'ld.w sdaoff(_a_variable)[gp],r6'
22738
22739     loads the contents of the location pointed to by the label
22740     '_a_variable' into register 6, provided that the label is located
22741     somewhere within +/- 32K of the address held in the GP register.
22742     [Note the linker assumes that the GP register contains a fixed
22743     address set to the address of the label called '__gp'.  This can
22744     either be set up automatically by the linker, or specifically set
22745     by using the '--defsym __gp=<value>' command-line option].
22746
22747'tdaoff()'
22748     Computes the offset of the named variable from the start of the
22749     Tiny Data Area (whose address is held in register 30, the EP
22750     register) and stores the result as a 4,5, 7 or 8 bit unsigned value
22751     in the immediate operand field of the given instruction.  For
22752     example:
22753
22754     'sld.w tdaoff(_a_variable)[ep],r6'
22755
22756     loads the contents of the location pointed to by the label
22757     '_a_variable' into register 6, provided that the label is located
22758     somewhere within +256 bytes of the address held in the EP register.
22759     [Note the linker assumes that the EP register contains a fixed
22760     address set to the address of the label called '__ep'.  This can
22761     either be set up automatically by the linker, or specifically set
22762     by using the '--defsym __ep=<value>' command-line option].
22763
22764'zdaoff()'
22765     Computes the offset of the named variable from address 0 and stores
22766     the result as a 16 bit signed value in the immediate operand field
22767     of the given instruction.  For example:
22768
22769     'movea zdaoff(_a_variable),zero,r6'
22770
22771     puts the address of the label '_a_variable' into register 6,
22772     assuming that the label is somewhere within the first 32K of
22773     memory.  (Strictly speaking it also possible to access the last 32K
22774     of memory as well, as the offsets are signed).
22775
22776'ctoff()'
22777     Computes the offset of the named variable from the start of the
22778     Call Table Area (whose address is held in system register 20, the
22779     CTBP register) and stores the result a 6 or 16 bit unsigned value
22780     in the immediate field of then given instruction or piece of data.
22781     For example:
22782
22783     'callt ctoff(table_func1)'
22784
22785     will put the call the function whose address is held in the call
22786     table at the location labeled 'table_func1'.
22787
22788'.longcall name'
22789     Indicates that the following sequence of instructions is a long
22790     call to function 'name'.  The linker will attempt to shorten this
22791     call sequence if 'name' is within a 22bit offset of the call.  Only
22792     valid if the '-mrelax' command-line switch has been enabled.
22793
22794'.longjump name'
22795     Indicates that the following sequence of instructions is a long
22796     jump to label 'name'.  The linker will attempt to shorten this code
22797     sequence if 'name' is within a 22bit offset of the jump.  Only
22798     valid if the '-mrelax' command-line switch has been enabled.
22799
22800   For information on the V850 instruction set, see 'V850 Family
2280132-/16-Bit single-Chip Microcontroller Architecture Manual' from NEC.
22802Ltd.
22803
22804
22805File: as.info,  Node: Vax-Dependent,  Next: Visium-Dependent,  Prev: V850-Dependent,  Up: Machine Dependencies
22806
228079.50 VAX Dependent Features
22808===========================
22809
22810* Menu:
22811
22812* VAX-Opts::                    VAX Command-Line Options
22813* VAX-float::                   VAX Floating Point
22814* VAX-directives::              Vax Machine Directives
22815* VAX-opcodes::                 VAX Opcodes
22816* VAX-branch::                  VAX Branch Improvement
22817* VAX-operands::                VAX Operands
22818* VAX-no::                      Not Supported on VAX
22819* VAX-Syntax::                  VAX Syntax
22820
22821
22822File: as.info,  Node: VAX-Opts,  Next: VAX-float,  Up: Vax-Dependent
22823
228249.50.1 VAX Command-Line Options
22825-------------------------------
22826
22827The Vax version of 'as' accepts any of the following options, gives a
22828warning message that the option was ignored and proceeds.  These options
22829are for compatibility with scripts designed for other people's
22830assemblers.
22831
22832'-D (Debug)'
22833'-S (Symbol Table)'
22834'-T (Token Trace)'
22835     These are obsolete options used to debug old assemblers.
22836
22837'-d (Displacement size for JUMPs)'
22838     This option expects a number following the '-d'.  Like options that
22839     expect filenames, the number may immediately follow the '-d' (old
22840     standard) or constitute the whole of the command-line argument that
22841     follows '-d' (GNU standard).
22842
22843'-V (Virtualize Interpass Temporary File)'
22844     Some other assemblers use a temporary file.  This option commanded
22845     them to keep the information in active memory rather than in a disk
22846     file.  'as' always does this, so this option is redundant.
22847
22848'-J (JUMPify Longer Branches)'
22849     Many 32-bit computers permit a variety of branch instructions to do
22850     the same job.  Some of these instructions are short (and fast) but
22851     have a limited range; others are long (and slow) but can branch
22852     anywhere in virtual memory.  Often there are 3 flavors of branch:
22853     short, medium and long.  Some other assemblers would emit short and
22854     medium branches, unless told by this option to emit short and long
22855     branches.
22856
22857'-t (Temporary File Directory)'
22858     Some other assemblers may use a temporary file, and this option
22859     takes a filename being the directory to site the temporary file.
22860     Since 'as' does not use a temporary disk file, this option makes no
22861     difference.  '-t' needs exactly one filename.
22862
22863   The Vax version of the assembler accepts additional options when
22864compiled for VMS:
22865
22866'-h N'
22867     External symbol or section (used for global variables) names are
22868     not case sensitive on VAX/VMS and always mapped to upper case.
22869     This is contrary to the C language definition which explicitly
22870     distinguishes upper and lower case.  To implement a standard
22871     conforming C compiler, names must be changed (mapped) to preserve
22872     the case information.  The default mapping is to convert all lower
22873     case characters to uppercase and adding an underscore followed by a
22874     6 digit hex value, representing a 24 digit binary value.  The one
22875     digits in the binary value represent which characters are uppercase
22876     in the original symbol name.
22877
22878     The '-h N' option determines how we map names.  This takes several
22879     values.  No '-h' switch at all allows case hacking as described
22880     above.  A value of zero ('-h0') implies names should be upper case,
22881     and inhibits the case hack.  A value of 2 ('-h2') implies names
22882     should be all lower case, with no case hack.  A value of 3 ('-h3')
22883     implies that case should be preserved.  The value 1 is unused.  The
22884     '-H' option directs 'as' to display every mapped symbol during
22885     assembly.
22886
22887     Symbols whose names include a dollar sign '$' are exceptions to the
22888     general name mapping.  These symbols are normally only used to
22889     reference VMS library names.  Such symbols are always mapped to
22890     upper case.
22891
22892'-+'
22893     The '-+' option causes 'as' to truncate any symbol name larger than
22894     31 characters.  The '-+' option also prevents some code following
22895     the '_main' symbol normally added to make the object file
22896     compatible with Vax-11 "C".
22897
22898'-1'
22899     This option is ignored for backward compatibility with 'as' version
22900     1.x.
22901
22902'-H'
22903     The '-H' option causes 'as' to print every symbol which was changed
22904     by case mapping.
22905
22906
22907File: as.info,  Node: VAX-float,  Next: VAX-directives,  Prev: VAX-Opts,  Up: Vax-Dependent
22908
229099.50.2 VAX Floating Point
22910-------------------------
22911
22912Conversion of flonums to floating point is correct, and compatible with
22913previous assemblers.  Rounding is towards zero if the remainder is
22914exactly half the least significant bit.
22915
22916   'D', 'F', 'G' and 'H' floating point formats are understood.
22917
22918   Immediate floating literals (_e.g._  'S`$6.9') are rendered
22919correctly.  Again, rounding is towards zero in the boundary case.
22920
22921   The '.float' directive produces 'f' format numbers.  The '.double'
22922directive produces 'd' format numbers.
22923
22924
22925File: as.info,  Node: VAX-directives,  Next: VAX-opcodes,  Prev: VAX-float,  Up: Vax-Dependent
22926
229279.50.3 Vax Machine Directives
22928-----------------------------
22929
22930The Vax version of the assembler supports four directives for generating
22931Vax floating point constants.  They are described in the table below.
22932
22933'.dfloat'
22934     This expects zero or more flonums, separated by commas, and
22935     assembles Vax 'd' format 64-bit floating point constants.
22936
22937'.ffloat'
22938     This expects zero or more flonums, separated by commas, and
22939     assembles Vax 'f' format 32-bit floating point constants.
22940
22941'.gfloat'
22942     This expects zero or more flonums, separated by commas, and
22943     assembles Vax 'g' format 64-bit floating point constants.
22944
22945'.hfloat'
22946     This expects zero or more flonums, separated by commas, and
22947     assembles Vax 'h' format 128-bit floating point constants.
22948
22949
22950File: as.info,  Node: VAX-opcodes,  Next: VAX-branch,  Prev: VAX-directives,  Up: Vax-Dependent
22951
229529.50.4 VAX Opcodes
22953------------------
22954
22955All DEC mnemonics are supported.  Beware that 'case...' instructions
22956have exactly 3 operands.  The dispatch table that follows the 'case...'
22957instruction should be made with '.word' statements.  This is compatible
22958with all unix assemblers we know of.
22959
22960
22961File: as.info,  Node: VAX-branch,  Next: VAX-operands,  Prev: VAX-opcodes,  Up: Vax-Dependent
22962
229639.50.5 VAX Branch Improvement
22964-----------------------------
22965
22966Certain pseudo opcodes are permitted.  They are for branch instructions.
22967They expand to the shortest branch instruction that reaches the target.
22968Generally these mnemonics are made by substituting 'j' for 'b' at the
22969start of a DEC mnemonic.  This feature is included both for
22970compatibility and to help compilers.  If you do not need this feature,
22971avoid these opcodes.  Here are the mnemonics, and the code they can
22972expand into.
22973
22974'jbsb'
22975     'Jsb' is already an instruction mnemonic, so we chose 'jbsb'.
22976     (byte displacement)
22977          'bsbb ...'
22978     (word displacement)
22979          'bsbw ...'
22980     (long displacement)
22981          'jsb ...'
22982'jbr'
22983'jr'
22984     Unconditional branch.
22985     (byte displacement)
22986          'brb ...'
22987     (word displacement)
22988          'brw ...'
22989     (long displacement)
22990          'jmp ...'
22991'jCOND'
22992     COND may be any one of the conditional branches 'neq', 'nequ',
22993     'eql', 'eqlu', 'gtr', 'geq', 'lss', 'gtru', 'lequ', 'vc', 'vs',
22994     'gequ', 'cc', 'lssu', 'cs'.  COND may also be one of the bit tests
22995     'bs', 'bc', 'bss', 'bcs', 'bsc', 'bcc', 'bssi', 'bcci', 'lbs',
22996     'lbc'.  NOTCOND is the opposite condition to COND.
22997     (byte displacement)
22998          'bCOND ...'
22999     (word displacement)
23000          'bNOTCOND foo ; brw ... ; foo:'
23001     (long displacement)
23002          'bNOTCOND foo ; jmp ... ; foo:'
23003'jacbX'
23004     X may be one of 'b d f g h l w'.
23005     (word displacement)
23006          'OPCODE ...'
23007     (long displacement)
23008               OPCODE ..., foo ;
23009               brb bar ;
23010               foo: jmp ... ;
23011               bar:
23012'jaobYYY'
23013     YYY may be one of 'lss leq'.
23014'jsobZZZ'
23015     ZZZ may be one of 'geq gtr'.
23016     (byte displacement)
23017          'OPCODE ...'
23018     (word displacement)
23019               OPCODE ..., foo ;
23020               brb bar ;
23021               foo: brw DESTINATION ;
23022               bar:
23023     (long displacement)
23024               OPCODE ..., foo ;
23025               brb bar ;
23026               foo: jmp DESTINATION ;
23027               bar:
23028'aobleq'
23029'aoblss'
23030'sobgeq'
23031'sobgtr'
23032     (byte displacement)
23033          'OPCODE ...'
23034     (word displacement)
23035               OPCODE ..., foo ;
23036               brb bar ;
23037               foo: brw DESTINATION ;
23038               bar:
23039     (long displacement)
23040               OPCODE ..., foo ;
23041               brb bar ;
23042               foo: jmp DESTINATION ;
23043               bar:
23044
23045
23046File: as.info,  Node: VAX-operands,  Next: VAX-no,  Prev: VAX-branch,  Up: Vax-Dependent
23047
230489.50.6 VAX Operands
23049-------------------
23050
23051The immediate character is '$' for Unix compatibility, not '#' as DEC
23052writes it.
23053
23054   The indirect character is '*' for Unix compatibility, not '@' as DEC
23055writes it.
23056
23057   The displacement sizing character is '`' (an accent grave) for Unix
23058compatibility, not '^' as DEC writes it.  The letter preceding '`' may
23059have either case.  'G' is not understood, but all other letters ('b i l
23060s w') are understood.
23061
23062   Register names understood are 'r0 r1 r2 ... r15 ap fp sp pc'.  Upper
23063and lower case letters are equivalent.
23064
23065   For instance
23066     tstb *w`$4(r5)
23067
23068   Any expression is permitted in an operand.  Operands are comma
23069separated.
23070
23071
23072File: as.info,  Node: VAX-no,  Next: VAX-Syntax,  Prev: VAX-operands,  Up: Vax-Dependent
23073
230749.50.7 Not Supported on VAX
23075---------------------------
23076
23077Vax bit fields can not be assembled with 'as'.  Someone can add the
23078required code if they really need it.
23079
23080
23081File: as.info,  Node: VAX-Syntax,  Prev: VAX-no,  Up: Vax-Dependent
23082
230839.50.8 VAX Syntax
23084-----------------
23085
23086* Menu:
23087
23088* VAX-Chars::                Special Characters
23089
23090
23091File: as.info,  Node: VAX-Chars,  Up: VAX-Syntax
23092
230939.50.8.1 Special Characters
23094...........................
23095
23096The presence of a '#' appearing anywhere on a line indicates the start
23097of a comment that extends to the end of that line.
23098
23099   If a '#' appears as the first character of a line then the whole line
23100is treated as a comment, but in this case the line can also be a logical
23101line number directive (*note Comments::) or a preprocessor control
23102command (*note Preprocessing::).
23103
23104   The ';' character can be used to separate statements on the same
23105line.
23106
23107
23108File: as.info,  Node: Visium-Dependent,  Next: WebAssembly-Dependent,  Prev: Vax-Dependent,  Up: Machine Dependencies
23109
231109.51 Visium Dependent Features
23111==============================
23112
23113* Menu:
23114
23115* Visium Options::              Options
23116* Visium Syntax::               Syntax
23117* Visium Opcodes::              Opcodes
23118
23119
23120File: as.info,  Node: Visium Options,  Next: Visium Syntax,  Up: Visium-Dependent
23121
231229.51.1 Options
23123--------------
23124
23125The Visium assembler implements one machine-specific option:
23126
23127'-mtune=ARCH'
23128     This option specifies the target architecture.  If an attempt is
23129     made to assemble an instruction that will not execute on the target
23130     architecture, the assembler will issue an error message.
23131
23132     The following names are recognized: 'mcm24' 'mcm' 'gr5' 'gr6'
23133
23134
23135File: as.info,  Node: Visium Syntax,  Next: Visium Opcodes,  Prev: Visium Options,  Up: Visium-Dependent
23136
231379.51.2 Syntax
23138-------------
23139
23140* Menu:
23141
23142* Visium Characters::           Special Characters
23143* Visium Registers::            Register Names
23144
23145
23146File: as.info,  Node: Visium Characters,  Next: Visium Registers,  Up: Visium Syntax
23147
231489.51.2.1 Special Characters
23149...........................
23150
23151Line comments are introduced either by the '!' character or by the ';'
23152character appearing anywhere on a line.
23153
23154   A hash character ('#') as the first character on a line also marks
23155the start of a line comment, but in this case it could also be a logical
23156line number directive (*note Comments::) or a preprocessor control
23157command (*note Preprocessing::).
23158
23159   The Visium assembler does not currently support a line separator
23160character.
23161
23162
23163File: as.info,  Node: Visium Registers,  Prev: Visium Characters,  Up: Visium Syntax
23164
231659.51.2.2 Register Names
23166.......................
23167
23168Registers can be specified either by using their canonical mnemonic
23169names or by using their alias if they have one, for example 'sp'.
23170
23171
23172File: as.info,  Node: Visium Opcodes,  Prev: Visium Syntax,  Up: Visium-Dependent
23173
231749.51.3 Opcodes
23175--------------
23176
23177All the standard opcodes of the architecture are implemented, along with
23178the following three pseudo-instructions: 'cmp', 'cmpc', 'move'.
23179
23180   In addition, the following two illegal opcodes are implemented and
23181used by the simulation:
23182
23183     stop    5-bit immediate, SourceA
23184     trace   5-bit immediate, SourceA
23185
23186
23187File: as.info,  Node: WebAssembly-Dependent,  Next: XGATE-Dependent,  Prev: Visium-Dependent,  Up: Machine Dependencies
23188
231899.52 WebAssembly Dependent Features
23190===================================
23191
23192* Menu:
23193
23194* WebAssembly-Notes::                Notes
23195* WebAssembly-Syntax::               Syntax
23196* WebAssembly-Floating-Point::       Floating Point
23197* WebAssembly-Opcodes::              Opcodes
23198* WebAssembly-module-layout::        Module Layout
23199
23200
23201File: as.info,  Node: WebAssembly-Notes,  Next: WebAssembly-Syntax,  Up: WebAssembly-Dependent
23202
232039.52.1 Notes
23204------------
23205
23206While WebAssembly provides its own module format for executables, this
23207documentation describes how to use 'as' to produce intermediate ELF
23208object format files.
23209
23210
23211File: as.info,  Node: WebAssembly-Syntax,  Next: WebAssembly-Floating-Point,  Prev: WebAssembly-Notes,  Up: WebAssembly-Dependent
23212
232139.52.2 Syntax
23214-------------
23215
23216The assembler syntax directly encodes sequences of opcodes as defined in
23217the WebAssembly binary encoding specification at
23218https://github.com/webassembly/spec/BinaryEncoding.md.  Structured
23219sexp-style expressions are not supported as input.
23220
23221* Menu:
23222
23223* WebAssembly-Chars::                Special Characters
23224* WebAssembly-Relocs::               Relocations
23225* WebAssembly-Signatures::           Signatures
23226
23227
23228File: as.info,  Node: WebAssembly-Chars,  Next: WebAssembly-Relocs,  Up: WebAssembly-Syntax
23229
232309.52.2.1 Special Characters
23231...........................
23232
23233'#' and ';' are the line comment characters.  Note that if '#' is the
23234first character on a line then it can also be a logical line number
23235directive (*note Comments::) or a preprocessor control command (*note
23236Preprocessing::).
23237
23238
23239File: as.info,  Node: WebAssembly-Relocs,  Next: WebAssembly-Signatures,  Prev: WebAssembly-Chars,  Up: WebAssembly-Syntax
23240
232419.52.2.2 Relocations
23242....................
23243
23244Special relocations are available by using the '@PLT', '@GOT', or '@GOT'
23245suffixes after a constant expression, which correspond to the
23246R_ASMJS_LEB128_PLT, R_ASMJS_LEB128_GOT, and R_ASMJS_LEB128_GOT_CODE
23247relocations, respectively.
23248
23249   The '@PLT' suffix is followed by a symbol name in braces; the symbol
23250value is used to determine the function signature for which a PLT stub
23251is generated.  Currently, the symbol _name_ is parsed from its last 'F'
23252character to determine the argument count of the function, which is also
23253necessary for generating a PLT stub.
23254
23255
23256File: as.info,  Node: WebAssembly-Signatures,  Prev: WebAssembly-Relocs,  Up: WebAssembly-Syntax
23257
232589.52.2.3 Signatures
23259...................
23260
23261Function signatures are specified with the 'signature' pseudo-opcode,
23262followed by a simple function signature imitating a C++-mangled function
23263type: 'F' followed by an optional 'v', then a sequence of 'i', 'l', 'f',
23264and 'd' characters to mark i32, i64, f32, and f64 parameters,
23265respectively; followed by a final 'E' to mark the end of the function
23266signature.
23267
23268
23269File: as.info,  Node: WebAssembly-Floating-Point,  Next: WebAssembly-Opcodes,  Prev: WebAssembly-Syntax,  Up: WebAssembly-Dependent
23270
232719.52.3 Floating Point
23272---------------------
23273
23274WebAssembly uses little-endian IEEE floating-point numbers.
23275
23276
23277File: as.info,  Node: WebAssembly-Opcodes,  Next: WebAssembly-module-layout,  Prev: WebAssembly-Floating-Point,  Up: WebAssembly-Dependent
23278
232799.52.4 Regular Opcodes
23280----------------------
23281
23282Ordinary instructions are encoded with the WebAssembly mnemonics as
23283listed at:
23284<https://github.com/WebAssembly/design/blob/master/BinaryEncoding.md>.
23285
23286   Opcodes are written directly in the order in which they are encoded,
23287without going through an intermediate sexp-style expression as in the
23288'was' format.
23289
23290   For "typed" opcodes (block, if, etc.), the type of the block is
23291specified in square brackets following the opcode: 'if[i]', 'if[]'.
23292
23293
23294File: as.info,  Node: WebAssembly-module-layout,  Prev: WebAssembly-Opcodes,  Up: WebAssembly-Dependent
23295
232969.52.5 WebAssembly Module Layout
23297--------------------------------
23298
23299'as' will only produce ELF output, not a valid WebAssembly module.  It
23300is possible to make 'as' produce output in a single ELF section which
23301becomes a valid WebAssembly module, but a linker script to do so may be
23302preferrable, as it doesn't require running the entire module through the
23303assembler at once.
23304
23305
23306File: as.info,  Node: XGATE-Dependent,  Next: XSTORMY16-Dependent,  Prev: WebAssembly-Dependent,  Up: Machine Dependencies
23307
233089.53 XGATE Dependent Features
23309=============================
23310
23311* Menu:
23312
23313* XGATE-Opts::                   XGATE Options
23314* XGATE-Syntax::                 Syntax
23315* XGATE-Directives::             Assembler Directives
23316* XGATE-Float::                  Floating Point
23317* XGATE-opcodes::                Opcodes
23318
23319
23320File: as.info,  Node: XGATE-Opts,  Next: XGATE-Syntax,  Up: XGATE-Dependent
23321
233229.53.1 XGATE Options
23323--------------------
23324
23325The Freescale XGATE version of 'as' has a few machine dependent options.
23326
23327'-mshort'
23328     This option controls the ABI and indicates to use a 16-bit integer
23329     ABI. It has no effect on the assembled instructions.  This is the
23330     default.
23331
23332'-mlong'
23333     This option controls the ABI and indicates to use a 32-bit integer
23334     ABI.
23335
23336'-mshort-double'
23337     This option controls the ABI and indicates to use a 32-bit float
23338     ABI. This is the default.
23339
23340'-mlong-double'
23341     This option controls the ABI and indicates to use a 64-bit float
23342     ABI.
23343
23344'--print-insn-syntax'
23345     You can use the '--print-insn-syntax' option to obtain the syntax
23346     description of the instruction when an error is detected.
23347
23348'--print-opcodes'
23349     The '--print-opcodes' option prints the list of all the
23350     instructions with their syntax.  Once the list is printed 'as'
23351     exits.
23352
23353
23354File: as.info,  Node: XGATE-Syntax,  Next: XGATE-Directives,  Prev: XGATE-Opts,  Up: XGATE-Dependent
23355
233569.53.2 Syntax
23357-------------
23358
23359In XGATE RISC syntax, the instruction name comes first and it may be
23360followed by up to three operands.  Operands are separated by commas
23361(',').  'as' will complain if too many operands are specified for a
23362given instruction.  The same will happen if you specified too few
23363operands.
23364
23365     nop
23366     ldl  #23
23367     CMP  R1, R2
23368
23369   The presence of a ';' character or a '!' character anywhere on a line
23370indicates the start of a comment that extends to the end of that line.
23371
23372   A '*' or a '#' character at the start of a line also introduces a
23373line comment, but these characters do not work elsewhere on the line.
23374If the first character of the line is a '#' then as well as starting a
23375comment, the line could also be logical line number directive (*note
23376Comments::) or a preprocessor control command (*note Preprocessing::).
23377
23378   The XGATE assembler does not currently support a line separator
23379character.
23380
23381   The following addressing modes are understood for XGATE:
23382"Inherent"
23383     ''
23384
23385"Immediate 3 Bit Wide"
23386     '#NUMBER'
23387
23388"Immediate 4 Bit Wide"
23389     '#NUMBER'
23390
23391"Immediate 8 Bit Wide"
23392     '#NUMBER'
23393
23394"Monadic Addressing"
23395     'REG'
23396
23397"Dyadic Addressing"
23398     'REG, REG'
23399
23400"Triadic Addressing"
23401     'REG, REG, REG'
23402
23403"Relative Addressing 9 Bit Wide"
23404     '*SYMBOL'
23405
23406"Relative Addressing 10 Bit Wide"
23407     '*SYMBOL'
23408
23409"Index Register plus Immediate Offset"
23410     'REG, (REG, #NUMBER)'
23411
23412"Index Register plus Register Offset"
23413     'REG, REG, REG'
23414
23415"Index Register plus Register Offset with Post-increment"
23416     'REG, REG, REG+'
23417
23418"Index Register plus Register Offset with Pre-decrement"
23419     'REG, REG, -REG'
23420
23421     The register can be either 'R0', 'R1', 'R2', 'R3', 'R4', 'R5', 'R6'
23422     or 'R7'.
23423
23424   Convene macro opcodes to deal with 16-bit values have been added.
23425
23426"Immediate 16 Bit Wide"
23427     '#NUMBER', or '*SYMBOL'
23428
23429     For example:
23430
23431          ldw R1, #1024
23432          ldw R3, timer
23433          ldw R1, (R1, #0)
23434          COM R1
23435          stw R2, (R1, #0)
23436
23437
23438File: as.info,  Node: XGATE-Directives,  Next: XGATE-Float,  Prev: XGATE-Syntax,  Up: XGATE-Dependent
23439
234409.53.3 Assembler Directives
23441---------------------------
23442
23443The XGATE version of 'as' have the following specific assembler
23444directives:
23445
23446
23447File: as.info,  Node: XGATE-Float,  Next: XGATE-opcodes,  Prev: XGATE-Directives,  Up: XGATE-Dependent
23448
234499.53.4 Floating Point
23450---------------------
23451
23452Packed decimal (P) format floating literals are not supported(yet).
23453
23454   The floating point formats generated by directives are these.
23455
23456'.float'
23457     'Single' precision floating point constants.
23458
23459'.double'
23460     'Double' precision floating point constants.
23461
23462'.extend'
23463'.ldouble'
23464     'Extended' precision ('long double') floating point constants.
23465
23466
23467File: as.info,  Node: XGATE-opcodes,  Prev: XGATE-Float,  Up: XGATE-Dependent
23468
234699.53.5 Opcodes
23470--------------
23471
23472
23473File: as.info,  Node: XSTORMY16-Dependent,  Next: Xtensa-Dependent,  Prev: XGATE-Dependent,  Up: Machine Dependencies
23474
234759.54 XStormy16 Dependent Features
23476=================================
23477
23478* Menu:
23479
23480* XStormy16 Syntax::               Syntax
23481* XStormy16 Directives::           Machine Directives
23482* XStormy16 Opcodes::              Pseudo-Opcodes
23483
23484
23485File: as.info,  Node: XStormy16 Syntax,  Next: XStormy16 Directives,  Up: XSTORMY16-Dependent
23486
234879.54.1 Syntax
23488-------------
23489
23490* Menu:
23491
23492* XStormy16-Chars::                Special Characters
23493
23494
23495File: as.info,  Node: XStormy16-Chars,  Up: XStormy16 Syntax
23496
234979.54.1.1 Special Characters
23498...........................
23499
23500'#' is the line comment character.  If a '#' appears as the first
23501character of a line, the whole line is treated as a comment, but in this
23502case the line can also be a logical line number directive (*note
23503Comments::) or a preprocessor control command (*note Preprocessing::).
23504
23505   A semicolon (';') can be used to start a comment that extends from
23506wherever the character appears on the line up to the end of the line.
23507
23508   The '|' character can be used to separate statements on the same
23509line.
23510
23511
23512File: as.info,  Node: XStormy16 Directives,  Next: XStormy16 Opcodes,  Prev: XStormy16 Syntax,  Up: XSTORMY16-Dependent
23513
235149.54.2 XStormy16 Machine Directives
23515-----------------------------------
23516
23517'.16bit_pointers'
23518     Like the '--16bit-pointers' command-line option this directive
23519     indicates that the assembly code makes use of 16-bit pointers.
23520
23521'.32bit_pointers'
23522     Like the '--32bit-pointers' command-line option this directive
23523     indicates that the assembly code makes use of 32-bit pointers.
23524
23525'.no_pointers'
23526     Like the '--no-pointers' command-line option this directive
23527     indicates that the assembly code does not makes use pointers.
23528
23529
23530File: as.info,  Node: XStormy16 Opcodes,  Prev: XStormy16 Directives,  Up: XSTORMY16-Dependent
23531
235329.54.3 XStormy16 Pseudo-Opcodes
23533-------------------------------
23534
23535'as' implements all the standard XStormy16 opcodes.
23536
23537   'as' also implements the following pseudo ops:
23538
23539'@lo()'
23540     Computes the lower 16 bits of the given expression and stores it
23541     into the immediate operand field of the given instruction.  For
23542     example:
23543
23544     'add r6, @lo(here - there)'
23545
23546     computes the difference between the address of labels 'here' and
23547     'there', takes the lower 16 bits of this difference and adds it to
23548     register 6.
23549
23550'@hi()'
23551     Computes the higher 16 bits of the given expression and stores it
23552     into the immediate operand field of the given instruction.  For
23553     example:
23554
23555     'addc r7, @hi(here - there)'
23556
23557     computes the difference between the address of labels 'here' and
23558     'there', takes the upper 16 bits of this difference, shifts it down
23559     16 bits and then adds it, along with the carry bit, to the value in
23560     register 7.
23561
23562
23563File: as.info,  Node: Xtensa-Dependent,  Next: Z80-Dependent,  Prev: XSTORMY16-Dependent,  Up: Machine Dependencies
23564
235659.55 Xtensa Dependent Features
23566==============================
23567
23568This chapter covers features of the GNU assembler that are specific to
23569the Xtensa architecture.  For details about the Xtensa instruction set,
23570please consult the 'Xtensa Instruction Set Architecture (ISA) Reference
23571Manual'.
23572
23573* Menu:
23574
23575* Xtensa Options::              Command-line Options.
23576* Xtensa Syntax::               Assembler Syntax for Xtensa Processors.
23577* Xtensa Optimizations::        Assembler Optimizations.
23578* Xtensa Relaxation::           Other Automatic Transformations.
23579* Xtensa Directives::           Directives for Xtensa Processors.
23580
23581
23582File: as.info,  Node: Xtensa Options,  Next: Xtensa Syntax,  Up: Xtensa-Dependent
23583
235849.55.1 Command-line Options
23585---------------------------
23586
23587'--text-section-literals | --no-text-section-literals'
23588     Control the treatment of literal pools.  The default is
23589     '--no-text-section-literals', which places literals in separate
23590     sections in the output file.  This allows the literal pool to be
23591     placed in a data RAM/ROM. With '--text-section-literals', the
23592     literals are interspersed in the text section in order to keep them
23593     as close as possible to their references.  This may be necessary
23594     for large assembly files, where the literals would otherwise be out
23595     of range of the 'L32R' instructions in the text section.  Literals
23596     are grouped into pools following '.literal_position' directives or
23597     preceding 'ENTRY' instructions.  These options only affect literals
23598     referenced via PC-relative 'L32R' instructions; literals for
23599     absolute mode 'L32R' instructions are handled separately.  *Note
23600     literal: Literal Directive.
23601
23602'--auto-litpools | --no-auto-litpools'
23603     Control the treatment of literal pools.  The default is
23604     '--no-auto-litpools', which in the absence of
23605     '--text-section-literals' places literals in separate sections in
23606     the output file.  This allows the literal pool to be placed in a
23607     data RAM/ROM. With '--auto-litpools', the literals are interspersed
23608     in the text section in order to keep them as close as possible to
23609     their references, explicit '.literal_position' directives are not
23610     required.  This may be necessary for very large functions, where
23611     single literal pool at the beginning of the function may not be
23612     reachable by 'L32R' instructions at the end.  These options only
23613     affect literals referenced via PC-relative 'L32R' instructions;
23614     literals for absolute mode 'L32R' instructions are handled
23615     separately.  When used together with '--text-section-literals',
23616     '--auto-litpools' takes precedence.  *Note literal: Literal
23617     Directive.
23618
23619'--absolute-literals | --no-absolute-literals'
23620     Indicate to the assembler whether 'L32R' instructions use absolute
23621     or PC-relative addressing.  If the processor includes the absolute
23622     addressing option, the default is to use absolute 'L32R'
23623     relocations.  Otherwise, only the PC-relative 'L32R' relocations
23624     can be used.
23625
23626'--target-align | --no-target-align'
23627     Enable or disable automatic alignment to reduce branch penalties at
23628     some expense in code size.  *Note Automatic Instruction Alignment:
23629     Xtensa Automatic Alignment.  This optimization is enabled by
23630     default.  Note that the assembler will always align instructions
23631     like 'LOOP' that have fixed alignment requirements.
23632
23633'--longcalls | --no-longcalls'
23634     Enable or disable transformation of call instructions to allow
23635     calls across a greater range of addresses.  *Note Function Call
23636     Relaxation: Xtensa Call Relaxation.  This option should be used
23637     when call targets can potentially be out of range.  It may degrade
23638     both code size and performance, but the linker can generally
23639     optimize away the unnecessary overhead when a call ends up within
23640     range.  The default is '--no-longcalls'.
23641
23642'--transform | --no-transform'
23643     Enable or disable all assembler transformations of Xtensa
23644     instructions, including both relaxation and optimization.  The
23645     default is '--transform'; '--no-transform' should only be used in
23646     the rare cases when the instructions must be exactly as specified
23647     in the assembly source.  Using '--no-transform' causes out of range
23648     instruction operands to be errors.
23649
23650'--rename-section OLDNAME=NEWNAME'
23651     Rename the OLDNAME section to NEWNAME.  This option can be used
23652     multiple times to rename multiple sections.
23653
23654'--trampolines | --no-trampolines'
23655     Enable or disable transformation of jump instructions to allow
23656     jumps across a greater range of addresses.  *Note Jump Trampolines:
23657     Xtensa Jump Relaxation.  This option should be used when jump
23658     targets can potentially be out of range.  In the absence of such
23659     jumps this option does not affect code size or performance.  The
23660     default is '--trampolines'.
23661
23662
23663File: as.info,  Node: Xtensa Syntax,  Next: Xtensa Optimizations,  Prev: Xtensa Options,  Up: Xtensa-Dependent
23664
236659.55.2 Assembler Syntax
23666-----------------------
23667
23668Block comments are delimited by '/*' and '*/'.  End of line comments may
23669be introduced with either '#' or '//'.
23670
23671   If a '#' appears as the first character of a line then the whole line
23672is treated as a comment, but in this case the line could also be a
23673logical line number directive (*note Comments::) or a preprocessor
23674control command (*note Preprocessing::).
23675
23676   Instructions consist of a leading opcode or macro name followed by
23677whitespace and an optional comma-separated list of operands:
23678
23679     OPCODE [OPERAND, ...]
23680
23681   Instructions must be separated by a newline or semicolon (';').
23682
23683   FLIX instructions, which bundle multiple opcodes together in a single
23684instruction, are specified by enclosing the bundled opcodes inside
23685braces:
23686
23687     {
23688     [FORMAT]
23689     OPCODE0 [OPERANDS]
23690     OPCODE1 [OPERANDS]
23691     OPCODE2 [OPERANDS]
23692     ...
23693     }
23694
23695   The opcodes in a FLIX instruction are listed in the same order as the
23696corresponding instruction slots in the TIE format declaration.
23697Directives and labels are not allowed inside the braces of a FLIX
23698instruction.  A particular TIE format name can optionally be specified
23699immediately after the opening brace, but this is usually unnecessary.
23700The assembler will automatically search for a format that can encode the
23701specified opcodes, so the format name need only be specified in rare
23702cases where there is more than one applicable format and where it
23703matters which of those formats is used.  A FLIX instruction can also be
23704specified on a single line by separating the opcodes with semicolons:
23705
23706     { [FORMAT;] OPCODE0 [OPERANDS]; OPCODE1 [OPERANDS]; OPCODE2 [OPERANDS]; ... }
23707
23708   If an opcode can only be encoded in a FLIX instruction but is not
23709specified as part of a FLIX bundle, the assembler will choose the
23710smallest format where the opcode can be encoded and will fill unused
23711instruction slots with no-ops.
23712
23713* Menu:
23714
23715* Xtensa Opcodes::              Opcode Naming Conventions.
23716* Xtensa Registers::            Register Naming.
23717
23718
23719File: as.info,  Node: Xtensa Opcodes,  Next: Xtensa Registers,  Up: Xtensa Syntax
23720
237219.55.2.1 Opcode Names
23722.....................
23723
23724See the 'Xtensa Instruction Set Architecture (ISA) Reference Manual' for
23725a complete list of opcodes and descriptions of their semantics.
23726
23727   If an opcode name is prefixed with an underscore character ('_'),
23728'as' will not transform that instruction in any way.  The underscore
23729prefix disables both optimization (*note Xtensa Optimizations: Xtensa
23730Optimizations.) and relaxation (*note Xtensa Relaxation: Xtensa
23731Relaxation.) for that particular instruction.  Only use the underscore
23732prefix when it is essential to select the exact opcode produced by the
23733assembler.  Using this feature unnecessarily makes the code less
23734efficient by disabling assembler optimization and less flexible by
23735disabling relaxation.
23736
23737   Note that this special handling of underscore prefixes only applies
23738to Xtensa opcodes, not to either built-in macros or user-defined macros.
23739When an underscore prefix is used with a macro (e.g., '_MOV'), it refers
23740to a different macro.  The assembler generally provides built-in macros
23741both with and without the underscore prefix, where the underscore
23742versions behave as if the underscore carries through to the instructions
23743in the macros.  For example, '_MOV' may expand to '_MOV.N'.
23744
23745   The underscore prefix only applies to individual instructions, not to
23746series of instructions.  For example, if a series of instructions have
23747underscore prefixes, the assembler will not transform the individual
23748instructions, but it may insert other instructions between them (e.g.,
23749to align a 'LOOP' instruction).  To prevent the assembler from modifying
23750a series of instructions as a whole, use the 'no-transform' directive.
23751*Note transform: Transform Directive.
23752
23753
23754File: as.info,  Node: Xtensa Registers,  Prev: Xtensa Opcodes,  Up: Xtensa Syntax
23755
237569.55.2.2 Register Names
23757.......................
23758
23759The assembly syntax for a register file entry is the "short" name for a
23760TIE register file followed by the index into that register file.  For
23761example, the general-purpose 'AR' register file has a short name of 'a',
23762so these registers are named 'a0'...'a15'.  As a special feature, 'sp'
23763is also supported as a synonym for 'a1'.  Additional registers may be
23764added by processor configuration options and by designer-defined TIE
23765extensions.  An initial '$' character is optional in all register names.
23766
23767
23768File: as.info,  Node: Xtensa Optimizations,  Next: Xtensa Relaxation,  Prev: Xtensa Syntax,  Up: Xtensa-Dependent
23769
237709.55.3 Xtensa Optimizations
23771---------------------------
23772
23773The optimizations currently supported by 'as' are generation of density
23774instructions where appropriate and automatic branch target alignment.
23775
23776* Menu:
23777
23778* Density Instructions::        Using Density Instructions.
23779* Xtensa Automatic Alignment::  Automatic Instruction Alignment.
23780
23781
23782File: as.info,  Node: Density Instructions,  Next: Xtensa Automatic Alignment,  Up: Xtensa Optimizations
23783
237849.55.3.1 Using Density Instructions
23785...................................
23786
23787The Xtensa instruction set has a code density option that provides
2378816-bit versions of some of the most commonly used opcodes.  Use of these
23789opcodes can significantly reduce code size.  When possible, the
23790assembler automatically translates instructions from the core Xtensa
23791instruction set into equivalent instructions from the Xtensa code
23792density option.  This translation can be disabled by using underscore
23793prefixes (*note Opcode Names: Xtensa Opcodes.), by using the
23794'--no-transform' command-line option (*note Command Line Options: Xtensa
23795Options.), or by using the 'no-transform' directive (*note transform:
23796Transform Directive.).
23797
23798   It is a good idea _not_ to use the density instructions directly.
23799The assembler will automatically select dense instructions where
23800possible.  If you later need to use an Xtensa processor without the code
23801density option, the same assembly code will then work without
23802modification.
23803
23804
23805File: as.info,  Node: Xtensa Automatic Alignment,  Prev: Density Instructions,  Up: Xtensa Optimizations
23806
238079.55.3.2 Automatic Instruction Alignment
23808........................................
23809
23810The Xtensa assembler will automatically align certain instructions, both
23811to optimize performance and to satisfy architectural requirements.
23812
23813   As an optimization to improve performance, the assembler attempts to
23814align branch targets so they do not cross instruction fetch boundaries.
23815(Xtensa processors can be configured with either 32-bit or 64-bit
23816instruction fetch widths.)  An instruction immediately following a call
23817is treated as a branch target in this context, because it will be the
23818target of a return from the call.  This alignment has the potential to
23819reduce branch penalties at some expense in code size.  This optimization
23820is enabled by default.  You can disable it with the '--no-target-align'
23821command-line option (*note Command-line Options: Xtensa Options.).
23822
23823   The target alignment optimization is done without adding instructions
23824that could increase the execution time of the program.  If there are
23825density instructions in the code preceding a target, the assembler can
23826change the target alignment by widening some of those instructions to
23827the equivalent 24-bit instructions.  Extra bytes of padding can be
23828inserted immediately following unconditional jump and return
23829instructions.  This approach is usually successful in aligning many, but
23830not all, branch targets.
23831
23832   The 'LOOP' family of instructions must be aligned such that the first
23833instruction in the loop body does not cross an instruction fetch
23834boundary (e.g., with a 32-bit fetch width, a 'LOOP' instruction must be
23835on either a 1 or 2 mod 4 byte boundary).  The assembler knows about this
23836restriction and inserts the minimal number of 2 or 3 byte no-op
23837instructions to satisfy it.  When no-op instructions are added, any
23838label immediately preceding the original loop will be moved in order to
23839refer to the loop instruction, not the newly generated no-op
23840instruction.  To preserve binary compatibility across processors with
23841different fetch widths, the assembler conservatively assumes a 32-bit
23842fetch width when aligning 'LOOP' instructions (except if the first
23843instruction in the loop is a 64-bit instruction).
23844
23845   Previous versions of the assembler automatically aligned 'ENTRY'
23846instructions to 4-byte boundaries, but that alignment is now the
23847programmer's responsibility.
23848
23849
23850File: as.info,  Node: Xtensa Relaxation,  Next: Xtensa Directives,  Prev: Xtensa Optimizations,  Up: Xtensa-Dependent
23851
238529.55.4 Xtensa Relaxation
23853------------------------
23854
23855When an instruction operand is outside the range allowed for that
23856particular instruction field, 'as' can transform the code to use a
23857functionally-equivalent instruction or sequence of instructions.  This
23858process is known as "relaxation".  This is typically done for branch
23859instructions because the distance of the branch targets is not known
23860until assembly-time.  The Xtensa assembler offers branch relaxation and
23861also extends this concept to function calls, 'MOVI' instructions and
23862other instructions with immediate fields.
23863
23864* Menu:
23865
23866* Xtensa Branch Relaxation::        Relaxation of Branches.
23867* Xtensa Call Relaxation::          Relaxation of Function Calls.
23868* Xtensa Jump Relaxation::          Relaxation of Jumps.
23869* Xtensa Immediate Relaxation::     Relaxation of other Immediate Fields.
23870
23871
23872File: as.info,  Node: Xtensa Branch Relaxation,  Next: Xtensa Call Relaxation,  Up: Xtensa Relaxation
23873
238749.55.4.1 Conditional Branch Relaxation
23875......................................
23876
23877When the target of a branch is too far away from the branch itself,
23878i.e., when the offset from the branch to the target is too large to fit
23879in the immediate field of the branch instruction, it may be necessary to
23880replace the branch with a branch around a jump.  For example,
23881
23882         beqz    a2, L
23883
23884   may result in:
23885
23886         bnez.n  a2, M
23887         j L
23888     M:
23889
23890   (The 'BNEZ.N' instruction would be used in this example only if the
23891density option is available.  Otherwise, 'BNEZ' would be used.)
23892
23893   This relaxation works well because the unconditional jump instruction
23894has a much larger offset range than the various conditional branches.
23895However, an error will occur if a branch target is beyond the range of a
23896jump instruction.  'as' cannot relax unconditional jumps.  Similarly, an
23897error will occur if the original input contains an unconditional jump to
23898a target that is out of range.
23899
23900   Branch relaxation is enabled by default.  It can be disabled by using
23901underscore prefixes (*note Opcode Names: Xtensa Opcodes.), the
23902'--no-transform' command-line option (*note Command-line Options: Xtensa
23903Options.), or the 'no-transform' directive (*note transform: Transform
23904Directive.).
23905
23906
23907File: as.info,  Node: Xtensa Call Relaxation,  Next: Xtensa Jump Relaxation,  Prev: Xtensa Branch Relaxation,  Up: Xtensa Relaxation
23908
239099.55.4.2 Function Call Relaxation
23910.................................
23911
23912Function calls may require relaxation because the Xtensa immediate call
23913instructions ('CALL0', 'CALL4', 'CALL8' and 'CALL12') provide a
23914PC-relative offset of only 512 Kbytes in either direction.  For larger
23915programs, it may be necessary to use indirect calls ('CALLX0', 'CALLX4',
23916'CALLX8' and 'CALLX12') where the target address is specified in a
23917register.  The Xtensa assembler can automatically relax immediate call
23918instructions into indirect call instructions.  This relaxation is done
23919by loading the address of the called function into the callee's return
23920address register and then using a 'CALLX' instruction.  So, for example:
23921
23922         call8 func
23923
23924   might be relaxed to:
23925
23926         .literal .L1, func
23927         l32r    a8, .L1
23928         callx8  a8
23929
23930   Because the addresses of targets of function calls are not generally
23931known until link-time, the assembler must assume the worst and relax all
23932the calls to functions in other source files, not just those that really
23933will be out of range.  The linker can recognize calls that were
23934unnecessarily relaxed, and it will remove the overhead introduced by the
23935assembler for those cases where direct calls are sufficient.
23936
23937   Call relaxation is disabled by default because it can have a negative
23938effect on both code size and performance, although the linker can
23939usually eliminate the unnecessary overhead.  If a program is too large
23940and some of the calls are out of range, function call relaxation can be
23941enabled using the '--longcalls' command-line option or the 'longcalls'
23942directive (*note longcalls: Longcalls Directive.).
23943
23944
23945File: as.info,  Node: Xtensa Jump Relaxation,  Next: Xtensa Immediate Relaxation,  Prev: Xtensa Call Relaxation,  Up: Xtensa Relaxation
23946
239479.55.4.3 Jump Relaxation
23948........................
23949
23950Jump instruction may require relaxation because the Xtensa jump
23951instruction ('J') provide a PC-relative offset of only 128 Kbytes in
23952either direction.  One option is to use jump long ('J.L') instruction,
23953which depending on jump distance may be assembled as jump ('J') or
23954indirect jump ('JX').  However it needs a free register.  When there's
23955no spare register it is possible to plant intermediate jump sites
23956(trampolines) between the jump instruction and its target.  These sites
23957may be located in areas unreachable by normal code execution flow, in
23958that case they only contain intermediate jumps, or they may be inserted
23959in the middle of code block, in which case there's an additional jump
23960from the beginning of the trampoline to the instruction past its end.
23961So, for example:
23962
23963         j 1f
23964         ...
23965         retw
23966         ...
23967         mov a10, a2
23968         call8 func
23969         ...
23970     1:
23971         ...
23972
23973   might be relaxed to:
23974
23975         j .L0_TR_1
23976         ...
23977         retw
23978     .L0_TR_1:
23979         j 1f
23980         ...
23981         mov a10, a2
23982         call8 func
23983         ...
23984     1:
23985         ...
23986
23987   or to:
23988
23989         j .L0_TR_1
23990         ...
23991         retw
23992         ...
23993         mov a10, a2
23994         j .L0_TR_0
23995     .L0_TR_1:
23996         j 1f
23997     .L0_TR_0:
23998         call8 func
23999         ...
24000     1:
24001         ...
24002
24003   The Xtensa assembler uses trampolines with jump around only when it
24004cannot find suitable unreachable trampoline.  There may be multiple
24005trampolines between the jump instruction and its target.
24006
24007   This relaxation does not apply to jumps to undefined symbols,
24008assuming they will reach their targets once resolved.
24009
24010   Jump relaxation is enabled by default because it does not affect code
24011size or performance while the code itself is small.  This relaxation may
24012be disabled completely with '--no-trampolines' or '--no-transform'
24013command-line options (*note Command-line Options: Xtensa Options.).
24014
24015
24016File: as.info,  Node: Xtensa Immediate Relaxation,  Prev: Xtensa Jump Relaxation,  Up: Xtensa Relaxation
24017
240189.55.4.4 Other Immediate Field Relaxation
24019.........................................
24020
24021The assembler normally performs the following other relaxations.  They
24022can be disabled by using underscore prefixes (*note Opcode Names: Xtensa
24023Opcodes.), the '--no-transform' command-line option (*note Command-line
24024Options: Xtensa Options.), or the 'no-transform' directive (*note
24025transform: Transform Directive.).
24026
24027   The 'MOVI' machine instruction can only materialize values in the
24028range from -2048 to 2047.  Values outside this range are best
24029materialized with 'L32R' instructions.  Thus:
24030
24031         movi a0, 100000
24032
24033   is assembled into the following machine code:
24034
24035         .literal .L1, 100000
24036         l32r a0, .L1
24037
24038   The 'L8UI' machine instruction can only be used with immediate
24039offsets in the range from 0 to 255.  The 'L16SI' and 'L16UI' machine
24040instructions can only be used with offsets from 0 to 510.  The 'L32I'
24041machine instruction can only be used with offsets from 0 to 1020.  A
24042load offset outside these ranges can be materialized with an 'L32R'
24043instruction if the destination register of the load is different than
24044the source address register.  For example:
24045
24046         l32i a1, a0, 2040
24047
24048   is translated to:
24049
24050         .literal .L1, 2040
24051         l32r a1, .L1
24052         add a1, a0, a1
24053         l32i a1, a1, 0
24054
24055If the load destination and source address register are the same, an
24056out-of-range offset causes an error.
24057
24058   The Xtensa 'ADDI' instruction only allows immediate operands in the
24059range from -128 to 127.  There are a number of alternate instruction
24060sequences for the 'ADDI' operation.  First, if the immediate is 0, the
24061'ADDI' will be turned into a 'MOV.N' instruction (or the equivalent 'OR'
24062instruction if the code density option is not available).  If the 'ADDI'
24063immediate is outside of the range -128 to 127, but inside the range
24064-32896 to 32639, an 'ADDMI' instruction or 'ADDMI'/'ADDI' sequence will
24065be used.  Finally, if the immediate is outside of this range and a free
24066register is available, an 'L32R'/'ADD' sequence will be used with a
24067literal allocated from the literal pool.
24068
24069   For example:
24070
24071         addi    a5, a6, 0
24072         addi    a5, a6, 512
24073         addi    a5, a6, 513
24074         addi    a5, a6, 50000
24075
24076   is assembled into the following:
24077
24078         .literal .L1, 50000
24079         mov.n   a5, a6
24080         addmi   a5, a6, 0x200
24081         addmi   a5, a6, 0x200
24082         addi    a5, a5, 1
24083         l32r    a5, .L1
24084         add     a5, a6, a5
24085
24086
24087File: as.info,  Node: Xtensa Directives,  Prev: Xtensa Relaxation,  Up: Xtensa-Dependent
24088
240899.55.5 Directives
24090-----------------
24091
24092The Xtensa assembler supports a region-based directive syntax:
24093
24094         .begin DIRECTIVE [OPTIONS]
24095         ...
24096         .end DIRECTIVE
24097
24098   All the Xtensa-specific directives that apply to a region of code use
24099this syntax.
24100
24101   The directive applies to code between the '.begin' and the '.end'.
24102The state of the option after the '.end' reverts to what it was before
24103the '.begin'.  A nested '.begin'/'.end' region can further change the
24104state of the directive without having to be aware of its outer state.
24105For example, consider:
24106
24107         .begin no-transform
24108     L:  add a0, a1, a2
24109         .begin transform
24110     M:  add a0, a1, a2
24111         .end transform
24112     N:  add a0, a1, a2
24113         .end no-transform
24114
24115   The 'ADD' opcodes at 'L' and 'N' in the outer 'no-transform' region
24116both result in 'ADD' machine instructions, but the assembler selects an
24117'ADD.N' instruction for the 'ADD' at 'M' in the inner 'transform'
24118region.
24119
24120   The advantage of this style is that it works well inside macros which
24121can preserve the context of their callers.
24122
24123   The following directives are available:
24124* Menu:
24125
24126* Schedule Directive::         Enable instruction scheduling.
24127* Longcalls Directive::        Use Indirect Calls for Greater Range.
24128* Transform Directive::        Disable All Assembler Transformations.
24129* Literal Directive::          Intermix Literals with Instructions.
24130* Literal Position Directive:: Specify Inline Literal Pool Locations.
24131* Literal Prefix Directive::   Specify Literal Section Name Prefix.
24132* Absolute Literals Directive:: Control PC-Relative vs. Absolute Literals.
24133
24134
24135File: as.info,  Node: Schedule Directive,  Next: Longcalls Directive,  Up: Xtensa Directives
24136
241379.55.5.1 schedule
24138.................
24139
24140The 'schedule' directive is recognized only for compatibility with
24141Tensilica's assembler.
24142
24143         .begin [no-]schedule
24144         .end [no-]schedule
24145
24146   This directive is ignored and has no effect on 'as'.
24147
24148
24149File: as.info,  Node: Longcalls Directive,  Next: Transform Directive,  Prev: Schedule Directive,  Up: Xtensa Directives
24150
241519.55.5.2 longcalls
24152..................
24153
24154The 'longcalls' directive enables or disables function call relaxation.
24155*Note Function Call Relaxation: Xtensa Call Relaxation.
24156
24157         .begin [no-]longcalls
24158         .end [no-]longcalls
24159
24160   Call relaxation is disabled by default unless the '--longcalls'
24161command-line option is specified.  The 'longcalls' directive overrides
24162the default determined by the command-line options.
24163
24164
24165File: as.info,  Node: Transform Directive,  Next: Literal Directive,  Prev: Longcalls Directive,  Up: Xtensa Directives
24166
241679.55.5.3 transform
24168..................
24169
24170This directive enables or disables all assembler transformation,
24171including relaxation (*note Xtensa Relaxation: Xtensa Relaxation.) and
24172optimization (*note Xtensa Optimizations: Xtensa Optimizations.).
24173
24174         .begin [no-]transform
24175         .end [no-]transform
24176
24177   Transformations are enabled by default unless the '--no-transform'
24178option is used.  The 'transform' directive overrides the default
24179determined by the command-line options.  An underscore opcode prefix,
24180disabling transformation of that opcode, always takes precedence over
24181both directives and command-line flags.
24182
24183
24184File: as.info,  Node: Literal Directive,  Next: Literal Position Directive,  Prev: Transform Directive,  Up: Xtensa Directives
24185
241869.55.5.4 literal
24187................
24188
24189The '.literal' directive is used to define literal pool data, i.e.,
24190read-only 32-bit data accessed via 'L32R' instructions.
24191
24192         .literal LABEL, VALUE[, VALUE...]
24193
24194   This directive is similar to the standard '.word' directive, except
24195that the actual location of the literal data is determined by the
24196assembler and linker, not by the position of the '.literal' directive.
24197Using this directive gives the assembler freedom to locate the literal
24198data in the most appropriate place and possibly to combine identical
24199literals.  For example, the code:
24200
24201         entry sp, 40
24202         .literal .L1, sym
24203         l32r    a4, .L1
24204
24205   can be used to load a pointer to the symbol 'sym' into register 'a4'.
24206The value of 'sym' will not be placed between the 'ENTRY' and 'L32R'
24207instructions; instead, the assembler puts the data in a literal pool.
24208
24209   Literal pools are placed by default in separate literal sections;
24210however, when using the '--text-section-literals' option (*note
24211Command-line Options: Xtensa Options.), the literal pools for
24212PC-relative mode 'L32R' instructions are placed in the current
24213section.(1)  These text section literal pools are created automatically
24214before 'ENTRY' instructions and manually after '.literal_position'
24215directives (*note literal_position: Literal Position Directive.).  If
24216there are no preceding 'ENTRY' instructions, explicit
24217'.literal_position' directives must be used to place the text section
24218literal pools; otherwise, 'as' will report an error.
24219
24220   When literals are placed in separate sections, the literal section
24221names are derived from the names of the sections where the literals are
24222defined.  The base literal section names are '.literal' for PC-relative
24223mode 'L32R' instructions and '.lit4' for absolute mode 'L32R'
24224instructions (*note absolute-literals: Absolute Literals Directive.).
24225These base names are used for literals defined in the default '.text'
24226section.  For literals defined in other sections or within the scope of
24227a 'literal_prefix' directive (*note literal_prefix: Literal Prefix
24228Directive.), the following rules determine the literal section name:
24229
24230  1. If the current section is a member of a section group, the literal
24231     section name includes the group name as a suffix to the base
24232     '.literal' or '.lit4' name, with a period to separate the base name
24233     and group name.  The literal section is also made a member of the
24234     group.
24235
24236  2. If the current section name (or 'literal_prefix' value) begins with
24237     "'.gnu.linkonce.KIND.'", the literal section name is formed by
24238     replacing "'.KIND'" with the base '.literal' or '.lit4' name.  For
24239     example, for literals defined in a section named
24240     '.gnu.linkonce.t.func', the literal section will be
24241     '.gnu.linkonce.literal.func' or '.gnu.linkonce.lit4.func'.
24242
24243  3. If the current section name (or 'literal_prefix' value) ends with
24244     '.text', the literal section name is formed by replacing that
24245     suffix with the base '.literal' or '.lit4' name.  For example, for
24246     literals defined in a section named '.iram0.text', the literal
24247     section will be '.iram0.literal' or '.iram0.lit4'.
24248
24249  4. If none of the preceding conditions apply, the literal section name
24250     is formed by adding the base '.literal' or '.lit4' name as a suffix
24251     to the current section name (or 'literal_prefix' value).
24252
24253   ---------- Footnotes ----------
24254
24255   (1) Literals for the '.init' and '.fini' sections are always placed
24256in separate sections, even when '--text-section-literals' is enabled.
24257
24258
24259File: as.info,  Node: Literal Position Directive,  Next: Literal Prefix Directive,  Prev: Literal Directive,  Up: Xtensa Directives
24260
242619.55.5.5 literal_position
24262.........................
24263
24264When using '--text-section-literals' to place literals inline in the
24265section being assembled, the '.literal_position' directive can be used
24266to mark a potential location for a literal pool.
24267
24268         .literal_position
24269
24270   The '.literal_position' directive is ignored when the
24271'--text-section-literals' option is not used or when 'L32R' instructions
24272use the absolute addressing mode.
24273
24274   The assembler will automatically place text section literal pools
24275before 'ENTRY' instructions, so the '.literal_position' directive is
24276only needed to specify some other location for a literal pool.  You may
24277need to add an explicit jump instruction to skip over an inline literal
24278pool.
24279
24280   For example, an interrupt vector does not begin with an 'ENTRY'
24281instruction so the assembler will be unable to automatically find a good
24282place to put a literal pool.  Moreover, the code for the interrupt
24283vector must be at a specific starting address, so the literal pool
24284cannot come before the start of the code.  The literal pool for the
24285vector must be explicitly positioned in the middle of the vector (before
24286any uses of the literals, due to the negative offsets used by
24287PC-relative 'L32R' instructions).  The '.literal_position' directive can
24288be used to do this.  In the following code, the literal for 'M' will
24289automatically be aligned correctly and is placed after the unconditional
24290jump.
24291
24292         .global M
24293     code_start:
24294         j continue
24295         .literal_position
24296         .align 4
24297     continue:
24298         movi    a4, M
24299
24300
24301File: as.info,  Node: Literal Prefix Directive,  Next: Absolute Literals Directive,  Prev: Literal Position Directive,  Up: Xtensa Directives
24302
243039.55.5.6 literal_prefix
24304.......................
24305
24306The 'literal_prefix' directive allows you to override the default
24307literal section names, which are derived from the names of the sections
24308where the literals are defined.
24309
24310         .begin literal_prefix [NAME]
24311         .end literal_prefix
24312
24313   For literals defined within the delimited region, the literal section
24314names are derived from the NAME argument instead of the name of the
24315current section.  The rules used to derive the literal section names do
24316not change.  *Note literal: Literal Directive.  If the NAME argument is
24317omitted, the literal sections revert to the defaults.  This directive
24318has no effect when using the '--text-section-literals' option (*note
24319Command-line Options: Xtensa Options.).
24320
24321
24322File: as.info,  Node: Absolute Literals Directive,  Prev: Literal Prefix Directive,  Up: Xtensa Directives
24323
243249.55.5.7 absolute-literals
24325..........................
24326
24327The 'absolute-literals' and 'no-absolute-literals' directives control
24328the absolute vs. PC-relative mode for 'L32R' instructions.  These are
24329relevant only for Xtensa configurations that include the absolute
24330addressing option for 'L32R' instructions.
24331
24332         .begin [no-]absolute-literals
24333         .end [no-]absolute-literals
24334
24335   These directives do not change the 'L32R' mode--they only cause the
24336assembler to emit the appropriate kind of relocation for 'L32R'
24337instructions and to place the literal values in the appropriate section.
24338To change the 'L32R' mode, the program must write the 'LITBASE' special
24339register.  It is the programmer's responsibility to keep track of the
24340mode and indicate to the assembler which mode is used in each region of
24341code.
24342
24343   If the Xtensa configuration includes the absolute 'L32R' addressing
24344option, the default is to assume absolute 'L32R' addressing unless the
24345'--no-absolute-literals' command-line option is specified.  Otherwise,
24346the default is to assume PC-relative 'L32R' addressing.  The
24347'absolute-literals' directive can then be used to override the default
24348determined by the command-line options.
24349
24350
24351File: as.info,  Node: Z80-Dependent,  Next: Z8000-Dependent,  Prev: Xtensa-Dependent,  Up: Machine Dependencies
24352
243539.56 Z80 Dependent Features
24354===========================
24355
24356* Menu:
24357
24358* Z80 Options::              Options
24359* Z80 Syntax::               Syntax
24360* Z80 Floating Point::       Floating Point
24361* Z80 Directives::           Z80 Machine Directives
24362* Z80 Opcodes::              Opcodes
24363
24364
24365File: as.info,  Node: Z80 Options,  Next: Z80 Syntax,  Up: Z80-Dependent
24366
243679.56.1 Command-line Options
24368---------------------------
24369
24370'-z80'
24371     Produce code for the Z80 processor.  By default accepted
24372     undocumented operations with halves of index registers ('IXL',
24373     'IXH', 'IYL', 'IYH') and instuction 'IN F,(C)'.  Other useful
24374     undocumented instructions produces warnings.  Undocumented
24375     instructions may not work on some CPUs, use them on your own risk.
24376
24377'-r800'
24378     Produce code for the R800 processor.
24379
24380'-z180'
24381     Produce code for the Z180 processor.
24382
24383'-ez80'
24384     Produce code for the eZ80 processor in Z80 memory mode by default.
24385
24386'-ez80-adl'
24387     Produce code for the eZ80 processor in ADL memory mode by default.
24388
24389'-local-prefix=PREFIX'
24390     Mark all labels with specified prefix as local.  But such label can
24391     be marked global explicitly in the code.  This option do not change
24392     default local label prefix '.L', it is just adds new one.
24393
24394'-colonless'
24395     Accept colonless labels.  All names at line begin are treated as
24396     labels.
24397
24398'-sdcc'
24399     Accept assembler code produced by SDCC.
24400
24401'-fp-s=FORMAT'
24402     Single precision floating point numbers format.  Default: ieee754
24403     (32 bit).
24404
24405'-fp-d=FORMAT'
24406     Double precision floating point numbers format.  Default: ieee754
24407     (64 bit).
24408
24409'-strict'
24410     Accept documented instructions only.
24411
24412'-full'
24413     Accept all known Z80 instructions.
24414
24415'-with-inst=INST[,...]'
24416'-Wnins INST[,...]'
24417     Enable specified undocumented instruction(s).
24418
24419'-without-inst=INST[,...]'
24420'-Fins INST[,...]'
24421     Disable specified undocumented instruction(s).
24422
24423'-ignore-undocumented-instructions'
24424'-Wnud'
24425     Silently assemble undocumented Z80-instructions that have been
24426     adopted as documented R800-instructions .
24427'-ignore-unportable-instructions'
24428'-Wnup'
24429     Silently assemble all undocumented Z80-instructions.
24430'-warn-undocumented-instructions'
24431'-Wud'
24432     Issue warnings for undocumented Z80-instructions that work on R800,
24433     do not assemble other undocumented instructions without warning.
24434'-warn-unportable-instructions'
24435'-Wup'
24436     Issue warnings for other undocumented Z80-instructions, do not
24437     treat any undocumented instructions as errors.
24438'-forbid-undocumented-instructions'
24439'-Fud'
24440     Treat all undocumented z80-instructions as errors.
24441'-forbid-unportable-instructions'
24442'-Fup'
24443     Treat undocumented z80-instructions that do not work on R800 as
24444     errors.
24445
24446   Floating point numbers formats.
24447'ieee754'
24448     Single or double precision IEEE754 compatible format.
24449
24450'half'
24451     Half precision IEEE754 compatible format (16 bits).
24452
24453'single'
24454     Single precision IEEE754 compatible format (32 bits).
24455
24456'double'
24457     Double precision IEEE754 compatible format (64 bits).
24458
24459'zeda32'
24460     32 bit floating point format from z80float library by Zeda.
24461
24462'math48'
24463     48 bit floating point format from Math48 package by Anders
24464     Hejlsberg.
24465
24466   Known undocumented instructions.
24467'idx-reg-halves'
24468     All operations with halves of index registers ('IXL', 'IXH', 'IYL',
24469     'IYH').
24470'sli'
24471     'SLI' or 'SLL' instruction.  Same as 'SLA r; INC r'.
24472'op-ii-ld'
24473     Istructions like '<op> (<ii>+<d>),<r>'.  For example: 'RL (IX+5),C'
24474'in-f-c'
24475     Instruction 'IN F,(C)'.
24476'out-c-0'
24477     Instruction 'OUT (C),0'
24478
24479
24480File: as.info,  Node: Z80 Syntax,  Next: Z80 Floating Point,  Prev: Z80 Options,  Up: Z80-Dependent
24481
244829.56.2 Syntax
24483-------------
24484
24485The assembler syntax closely follows the 'Z80 family CPU User Manual' by
24486Zilog.  In expressions a single '=' may be used as "is equal to"
24487comparison operator.
24488
24489   Suffices can be used to indicate the radix of integer constants; 'H'
24490or 'h' for hexadecimal, 'D' or 'd' for decimal, 'Q', 'O', 'q' or 'o' for
24491octal, and 'B' for binary.
24492
24493   The suffix 'b' denotes a backreference to local label.
24494
24495* Menu:
24496
24497* Z80-Chars::                Special Characters
24498* Z80-Regs::                 Register Names
24499* Z80-Case::                 Case Sensitivity
24500* Z80-Labels::               Labels
24501
24502
24503File: as.info,  Node: Z80-Chars,  Next: Z80-Regs,  Up: Z80 Syntax
24504
245059.56.2.1 Special Characters
24506...........................
24507
24508The semicolon ';' is the line comment character;
24509
24510   If a '#' appears as the first character of a line then the whole line
24511is treated as a comment, but in this case the line could also be a
24512logical line number directive (*note Comments::) or a preprocessor
24513control command (*note Preprocessing::).
24514
24515   The Z80 assembler does not support a line separator character.
24516
24517   The dollar sign '$' can be used as a prefix for hexadecimal numbers
24518and as a symbol denoting the current location counter.
24519
24520   A backslash '\' is an ordinary character for the Z80 assembler.
24521
24522   The single quote ''' must be followed by a closing quote.  If there
24523is one character in between, it is a character constant, otherwise it is
24524a string constant.
24525
24526
24527File: as.info,  Node: Z80-Regs,  Next: Z80-Case,  Prev: Z80-Chars,  Up: Z80 Syntax
24528
245299.56.2.2 Register Names
24530.......................
24531
24532The registers are referred to with the letters assigned to them by
24533Zilog.  In addition 'as' recognizes 'ixl' and 'ixh' as the least and
24534most significant octet in 'ix', and similarly 'iyl' and 'iyh' as parts
24535of 'iy'.
24536
24537
24538File: as.info,  Node: Z80-Case,  Next: Z80-Labels,  Prev: Z80-Regs,  Up: Z80 Syntax
24539
245409.56.2.3 Case Sensitivity
24541.........................
24542
24543Upper and lower case are equivalent in register names, opcodes,
24544condition codes and assembler directives.  The case of letters is
24545significant in labels and symbol names.  The case is also important to
24546distinguish the suffix 'b' for a backward reference to a local label
24547from the suffix 'B' for a number in binary notation.
24548
24549
24550File: as.info,  Node: Z80-Labels,  Prev: Z80-Case,  Up: Z80 Syntax
24551
245529.56.2.4 Labels
24553...............
24554
24555Labels started by '.L' acts as local labels.  You may specify custom
24556local label prefix by '-local-prefix' command-line option.  Dollar,
24557forward and backward local labels are supported.  By default, all labels
24558are followed by colon.  Legacy code with colonless labels can be built
24559with '-colonless' command-line option specified.  In this case all
24560tokens at line begin are treated as labels.
24561
24562
24563File: as.info,  Node: Z80 Floating Point,  Next: Z80 Directives,  Prev: Z80 Syntax,  Up: Z80-Dependent
24564
245659.56.3 Floating Point
24566---------------------
24567
24568Floating-point numbers of following types are supported:
24569
24570'ieee754'
24571     Supported half, single and double precision IEEE754 compatible
24572     numbers.
24573
24574'zeda32'
24575     32 bit floating point numbers from z80float library by Zeda.
24576
24577'math48'
24578     48 bit floating point numbers from Math48 package by Anders
24579     Hejlsberg.
24580
24581
24582File: as.info,  Node: Z80 Directives,  Next: Z80 Opcodes,  Prev: Z80 Floating Point,  Up: Z80-Dependent
24583
245849.56.4 Z80 Assembler Directives
24585-------------------------------
24586
24587'as' for the Z80 supports some additional directives for compatibility
24588with other assemblers.
24589
24590   These are the additional directives in 'as' for the Z80:
24591
24592'assume ADL'='EXPRESSION'
24593     Set ADL status for eZ80.  Non-zero value enable compilation in ADL
24594     mode else used Z80 mode.  ADL and Z80 mode produces incompatible
24595     object code.  Mixing both of them within one binary may lead
24596     problems with disassembler.
24597
24598'db EXPRESSION|STRING[,EXPRESSION|STRING...]'
24599'defb EXPRESSION|STRING[,EXPRESSION|STRING...]'
24600'defm STRING...]'
24601     For each STRING the characters are copied to the object file, for
24602     each other EXPRESSION the value is stored in one byte.  A warning
24603     is issued in case of an overflow.  Backslash symbol in the strings
24604     is generic symbol, it cannot be used as escape character (for this
24605     purpose use '.ascii' or '.asciiz' directives).
24606
24607'dw EXPRESSION[,EXPRESSION...]'
24608'defw EXPRESSION[,EXPRESSION...]'
24609     For each EXPRESSION the value is stored in two bytes, ignoring
24610     overflow.
24611
24612'd24 EXPRESSION[,EXPRESSION...]'
24613'def24 EXPRESSION[,EXPRESSION...]'
24614     For each EXPRESSION the value is stored in three bytes, ignoring
24615     overflow.
24616
24617'd32 EXPRESSION[,EXPRESSION...]'
24618'def32 EXPRESSION[,EXPRESSION...]'
24619     For each EXPRESSION the value is stored in four bytes, ignoring
24620     overflow.
24621
24622'ds COUNT[, VALUE]'
24623'defs COUNT[, VALUE]'
24624     Fill COUNT bytes in the object file with VALUE, if VALUE is omitted
24625     it defaults to zero.
24626
24627'SYMBOL equ EXPRESSION'
24628'SYMBOL defl EXPRESSION'
24629     These directives set the value of SYMBOL to EXPRESSION.  If 'equ'
24630     is used, it is an error if SYMBOL is already defined.  Symbols
24631     defined with 'equ' are not protected from redefinition.
24632
24633'psect NAME'
24634     A synonym for *Note Section::, no second argument should be given.
24635
24636
24637File: as.info,  Node: Z80 Opcodes,  Prev: Z80 Directives,  Up: Z80-Dependent
24638
246399.56.5 Opcodes
24640--------------
24641
24642In line with common practice, Z80 mnemonics are used for the Z80, the
24643Z180, eZ80 and the R800.
24644
24645   In many instructions it is possible to use one of the half index
24646registers ('ixl','ixh','iyl','iyh') in stead of an 8-bit general purpose
24647register.  This yields instructions that are documented on the eZ80 and
24648the R800, undocumented on the Z80 and unsupported on the Z180.
24649Similarly 'in f,(c)' is documented on the R800, undocumented on the Z80
24650and unsupported on the Z180 and the eZ80.
24651
24652   The assembler also supports the following undocumented
24653Z80-instructions, that have not been adopted in any other instruction
24654set:
24655'out (c),0'
24656     Sends zero to the port pointed to by register 'C'.
24657
24658'sli M'
24659     Equivalent to 'M = (M<<1)+1', the operand M can be any operand that
24660     is valid for 'sla'.  One can use 'sll' as a synonym for 'sli'.
24661
24662'OP (ix+D), R'
24663     This is equivalent to
24664
24665          ld R, (ix+D)
24666          OPC R
24667          ld (ix+D), R
24668
24669     The operation 'OPC' may be any of 'res B,', 'set B,', 'rl', 'rlc',
24670     'rr', 'rrc', 'sla', 'sli', 'sra' and 'srl', and the register 'R'
24671     may be any of 'a', 'b', 'c', 'd', 'e', 'h' and 'l'.
24672
24673'OPC (iy+D), R'
24674     As above, but with 'iy' instead of 'ix'.
24675
24676   The web site at <http://www.z80.info> is a good starting place to
24677find more information on programming the Z80.
24678
24679   You may enable or disable any of these instructions for any target
24680CPU even this instruction is not supported by any real CPU of this type.
24681Useful for custom CPU cores.
24682
24683
24684File: as.info,  Node: Z8000-Dependent,  Prev: Z80-Dependent,  Up: Machine Dependencies
24685
246869.57 Z8000 Dependent Features
24687=============================
24688
24689The Z8000 as supports both members of the Z8000 family: the unsegmented
24690Z8002, with 16 bit addresses, and the segmented Z8001 with 24 bit
24691addresses.
24692
24693   When the assembler is in unsegmented mode (specified with the
24694'unsegm' directive), an address takes up one word (16 bit) sized
24695register.  When the assembler is in segmented mode (specified with the
24696'segm' directive), a 24-bit address takes up a long (32 bit) register.
24697*Note Assembler Directives for the Z8000: Z8000 Directives, for a list
24698of other Z8000 specific assembler directives.
24699
24700* Menu:
24701
24702* Z8000 Options::               Command-line options for the Z8000
24703* Z8000 Syntax::                Assembler syntax for the Z8000
24704* Z8000 Directives::            Special directives for the Z8000
24705* Z8000 Opcodes::               Opcodes
24706
24707
24708File: as.info,  Node: Z8000 Options,  Next: Z8000 Syntax,  Up: Z8000-Dependent
24709
247109.57.1 Options
24711--------------
24712
24713'-z8001'
24714     Generate segmented code by default.
24715
24716'-z8002'
24717     Generate unsegmented code by default.
24718
24719
24720File: as.info,  Node: Z8000 Syntax,  Next: Z8000 Directives,  Prev: Z8000 Options,  Up: Z8000-Dependent
24721
247229.57.2 Syntax
24723-------------
24724
24725* Menu:
24726
24727* Z8000-Chars::                Special Characters
24728* Z8000-Regs::                 Register Names
24729* Z8000-Addressing::           Addressing Modes
24730
24731
24732File: as.info,  Node: Z8000-Chars,  Next: Z8000-Regs,  Up: Z8000 Syntax
24733
247349.57.2.1 Special Characters
24735...........................
24736
24737'!' is the line comment character.
24738
24739   If a '#' appears as the first character of a line then the whole line
24740is treated as a comment, but in this case the line could also be a
24741logical line number directive (*note Comments::) or a preprocessor
24742control command (*note Preprocessing::).
24743
24744   You can use ';' instead of a newline to separate statements.
24745
24746
24747File: as.info,  Node: Z8000-Regs,  Next: Z8000-Addressing,  Prev: Z8000-Chars,  Up: Z8000 Syntax
24748
247499.57.2.2 Register Names
24750.......................
24751
24752The Z8000 has sixteen 16 bit registers, numbered 0 to 15.  You can refer
24753to different sized groups of registers by register number, with the
24754prefix 'r' for 16 bit registers, 'rr' for 32 bit registers and 'rq' for
2475564 bit registers.  You can also refer to the contents of the first eight
24756(of the sixteen 16 bit registers) by bytes.  They are named 'rlN' and
24757'rhN'.
24758
24759_byte registers_
24760     rl0 rh0 rl1 rh1 rl2 rh2 rl3 rh3
24761     rl4 rh4 rl5 rh5 rl6 rh6 rl7 rh7
24762
24763_word registers_
24764     r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15
24765
24766_long word registers_
24767     rr0 rr2 rr4 rr6 rr8 rr10 rr12 rr14
24768
24769_quad word registers_
24770     rq0 rq4 rq8 rq12
24771
24772
24773File: as.info,  Node: Z8000-Addressing,  Prev: Z8000-Regs,  Up: Z8000 Syntax
24774
247759.57.2.3 Addressing Modes
24776.........................
24777
24778as understands the following addressing modes for the Z8000:
24779
24780'rlN'
24781'rhN'
24782'rN'
24783'rrN'
24784'rqN'
24785     Register direct: 8bit, 16bit, 32bit, and 64bit registers.
24786
24787'@rN'
24788'@rrN'
24789     Indirect register: @rrN in segmented mode, @rN in unsegmented mode.
24790
24791'ADDR'
24792     Direct: the 16 bit or 24 bit address (depending on whether the
24793     assembler is in segmented or unsegmented mode) of the operand is in
24794     the instruction.
24795
24796'address(rN)'
24797     Indexed: the 16 or 24 bit address is added to the 16 bit register
24798     to produce the final address in memory of the operand.
24799
24800'rN(#IMM)'
24801'rrN(#IMM)'
24802     Base Address: the 16 or 24 bit register is added to the 16 bit sign
24803     extended immediate displacement to produce the final address in
24804     memory of the operand.
24805
24806'rN(rM)'
24807'rrN(rM)'
24808     Base Index: the 16 or 24 bit register rN or rrN is added to the
24809     sign extended 16 bit index register rM to produce the final address
24810     in memory of the operand.
24811
24812'#XX'
24813     Immediate data XX.
24814
24815
24816File: as.info,  Node: Z8000 Directives,  Next: Z8000 Opcodes,  Prev: Z8000 Syntax,  Up: Z8000-Dependent
24817
248189.57.3 Assembler Directives for the Z8000
24819-----------------------------------------
24820
24821The Z8000 port of as includes additional assembler directives, for
24822compatibility with other Z8000 assemblers.  These do not begin with '.'
24823(unlike the ordinary as directives).
24824
24825'segm'
24826'.z8001'
24827     Generate code for the segmented Z8001.
24828
24829'unsegm'
24830'.z8002'
24831     Generate code for the unsegmented Z8002.
24832
24833'name'
24834     Synonym for '.file'
24835
24836'global'
24837     Synonym for '.global'
24838
24839'wval'
24840     Synonym for '.word'
24841
24842'lval'
24843     Synonym for '.long'
24844
24845'bval'
24846     Synonym for '.byte'
24847
24848'sval'
24849     Assemble a string.  'sval' expects one string literal, delimited by
24850     single quotes.  It assembles each byte of the string into
24851     consecutive addresses.  You can use the escape sequence '%XX'
24852     (where XX represents a two-digit hexadecimal number) to represent
24853     the character whose ASCII value is XX.  Use this feature to
24854     describe single quote and other characters that may not appear in
24855     string literals as themselves.  For example, the C statement
24856     'char *a = "he said \"it's 50% off\"";' is represented in Z8000
24857     assembly language (shown with the assembler output in hex at the
24858     left) as
24859
24860          68652073    sval    'he said %22it%27s 50%25 off%22%00'
24861          61696420
24862          22697427
24863          73203530
24864          25206F66
24865          662200
24866
24867'rsect'
24868     synonym for '.section'
24869
24870'block'
24871     synonym for '.space'
24872
24873'even'
24874     special case of '.align'; aligns output to even byte boundary.
24875
24876
24877File: as.info,  Node: Z8000 Opcodes,  Prev: Z8000 Directives,  Up: Z8000-Dependent
24878
248799.57.4 Opcodes
24880--------------
24881
24882For detailed information on the Z8000 machine instruction set, see
24883'Z8000 Technical Manual'.
24884
24885   The following table summarizes the opcodes and their arguments:
24886
24887                 rs   16 bit source register
24888                 rd   16 bit destination register
24889                 rbs   8 bit source register
24890                 rbd   8 bit destination register
24891                 rrs   32 bit source register
24892                 rrd   32 bit destination register
24893                 rqs   64 bit source register
24894                 rqd   64 bit destination register
24895                 addr 16/24 bit address
24896                 imm  immediate data
24897
24898     adc rd,rs               clrb addr               cpsir @rd,@rs,rr,cc
24899     adcb rbd,rbs            clrb addr(rd)           cpsirb @rd,@rs,rr,cc
24900     add rd,@rs              clrb rbd                dab rbd
24901     add rd,addr             com @rd                 dbjnz rbd,disp7
24902     add rd,addr(rs)         com addr                dec @rd,imm4m1
24903     add rd,imm16            com addr(rd)            dec addr(rd),imm4m1
24904     add rd,rs               com rd                  dec addr,imm4m1
24905     addb rbd,@rs            comb @rd                dec rd,imm4m1
24906     addb rbd,addr           comb addr               decb @rd,imm4m1
24907     addb rbd,addr(rs)       comb addr(rd)           decb addr(rd),imm4m1
24908     addb rbd,imm8           comb rbd                decb addr,imm4m1
24909     addb rbd,rbs            comflg flags            decb rbd,imm4m1
24910     addl rrd,@rs            cp @rd,imm16            di i2
24911     addl rrd,addr           cp addr(rd),imm16       div rrd,@rs
24912     addl rrd,addr(rs)       cp addr,imm16           div rrd,addr
24913     addl rrd,imm32          cp rd,@rs               div rrd,addr(rs)
24914     addl rrd,rrs            cp rd,addr              div rrd,imm16
24915     and rd,@rs              cp rd,addr(rs)          div rrd,rs
24916     and rd,addr             cp rd,imm16             divl rqd,@rs
24917     and rd,addr(rs)         cp rd,rs                divl rqd,addr
24918     and rd,imm16            cpb @rd,imm8            divl rqd,addr(rs)
24919     and rd,rs               cpb addr(rd),imm8       divl rqd,imm32
24920     andb rbd,@rs            cpb addr,imm8           divl rqd,rrs
24921     andb rbd,addr           cpb rbd,@rs             djnz rd,disp7
24922     andb rbd,addr(rs)       cpb rbd,addr            ei i2
24923     andb rbd,imm8           cpb rbd,addr(rs)        ex rd,@rs
24924     andb rbd,rbs            cpb rbd,imm8            ex rd,addr
24925     bit @rd,imm4            cpb rbd,rbs             ex rd,addr(rs)
24926     bit addr(rd),imm4       cpd rd,@rs,rr,cc        ex rd,rs
24927     bit addr,imm4           cpdb rbd,@rs,rr,cc      exb rbd,@rs
24928     bit rd,imm4             cpdr rd,@rs,rr,cc       exb rbd,addr
24929     bit rd,rs               cpdrb rbd,@rs,rr,cc     exb rbd,addr(rs)
24930     bitb @rd,imm4           cpi rd,@rs,rr,cc        exb rbd,rbs
24931     bitb addr(rd),imm4      cpib rbd,@rs,rr,cc      ext0e imm8
24932     bitb addr,imm4          cpir rd,@rs,rr,cc       ext0f imm8
24933     bitb rbd,imm4           cpirb rbd,@rs,rr,cc     ext8e imm8
24934     bitb rbd,rs             cpl rrd,@rs             ext8f imm8
24935     bpt                     cpl rrd,addr            exts rrd
24936     call @rd                cpl rrd,addr(rs)        extsb rd
24937     call addr               cpl rrd,imm32           extsl rqd
24938     call addr(rd)           cpl rrd,rrs             halt
24939     calr disp12             cpsd @rd,@rs,rr,cc      in rd,@rs
24940     clr @rd                 cpsdb @rd,@rs,rr,cc     in rd,imm16
24941     clr addr                cpsdr @rd,@rs,rr,cc     inb rbd,@rs
24942     clr addr(rd)            cpsdrb @rd,@rs,rr,cc    inb rbd,imm16
24943     clr rd                  cpsi @rd,@rs,rr,cc      inc @rd,imm4m1
24944     clrb @rd                cpsib @rd,@rs,rr,cc     inc addr(rd),imm4m1
24945     inc addr,imm4m1         ldb rbd,rs(rx)          mult rrd,addr(rs)
24946     inc rd,imm4m1           ldb rd(imm16),rbs       mult rrd,imm16
24947     incb @rd,imm4m1         ldb rd(rx),rbs          mult rrd,rs
24948     incb addr(rd),imm4m1    ldctl ctrl,rs           multl rqd,@rs
24949     incb addr,imm4m1        ldctl rd,ctrl           multl rqd,addr
24950     incb rbd,imm4m1         ldd @rs,@rd,rr          multl rqd,addr(rs)
24951     ind @rd,@rs,ra          lddb @rs,@rd,rr         multl rqd,imm32
24952     indb @rd,@rs,rba        lddr @rs,@rd,rr         multl rqd,rrs
24953     inib @rd,@rs,ra         lddrb @rs,@rd,rr        neg @rd
24954     inibr @rd,@rs,ra        ldi @rd,@rs,rr          neg addr
24955     iret                    ldib @rd,@rs,rr         neg addr(rd)
24956     jp cc,@rd               ldir @rd,@rs,rr         neg rd
24957     jp cc,addr              ldirb @rd,@rs,rr        negb @rd
24958     jp cc,addr(rd)          ldk rd,imm4             negb addr
24959     jr cc,disp8             ldl @rd,rrs             negb addr(rd)
24960     ld @rd,imm16            ldl addr(rd),rrs        negb rbd
24961     ld @rd,rs               ldl addr,rrs            nop
24962     ld addr(rd),imm16       ldl rd(imm16),rrs       or rd,@rs
24963     ld addr(rd),rs          ldl rd(rx),rrs          or rd,addr
24964     ld addr,imm16           ldl rrd,@rs             or rd,addr(rs)
24965     ld addr,rs              ldl rrd,addr            or rd,imm16
24966     ld rd(imm16),rs         ldl rrd,addr(rs)        or rd,rs
24967     ld rd(rx),rs            ldl rrd,imm32           orb rbd,@rs
24968     ld rd,@rs               ldl rrd,rrs             orb rbd,addr
24969     ld rd,addr              ldl rrd,rs(imm16)       orb rbd,addr(rs)
24970     ld rd,addr(rs)          ldl rrd,rs(rx)          orb rbd,imm8
24971     ld rd,imm16             ldm @rd,rs,n            orb rbd,rbs
24972     ld rd,rs                ldm addr(rd),rs,n       out @rd,rs
24973     ld rd,rs(imm16)         ldm addr,rs,n           out imm16,rs
24974     ld rd,rs(rx)            ldm rd,@rs,n            outb @rd,rbs
24975     lda rd,addr             ldm rd,addr(rs),n       outb imm16,rbs
24976     lda rd,addr(rs)         ldm rd,addr,n           outd @rd,@rs,ra
24977     lda rd,rs(imm16)        ldps @rs                outdb @rd,@rs,rba
24978     lda rd,rs(rx)           ldps addr               outib @rd,@rs,ra
24979     ldar rd,disp16          ldps addr(rs)           outibr @rd,@rs,ra
24980     ldb @rd,imm8            ldr disp16,rs           pop @rd,@rs
24981     ldb @rd,rbs             ldr rd,disp16           pop addr(rd),@rs
24982     ldb addr(rd),imm8       ldrb disp16,rbs         pop addr,@rs
24983     ldb addr(rd),rbs        ldrb rbd,disp16         pop rd,@rs
24984     ldb addr,imm8           ldrl disp16,rrs         popl @rd,@rs
24985     ldb addr,rbs            ldrl rrd,disp16         popl addr(rd),@rs
24986     ldb rbd,@rs             mbit                    popl addr,@rs
24987     ldb rbd,addr            mreq rd                 popl rrd,@rs
24988     ldb rbd,addr(rs)        mres                    push @rd,@rs
24989     ldb rbd,imm8            mset                    push @rd,addr
24990     ldb rbd,rbs             mult rrd,@rs            push @rd,addr(rs)
24991     ldb rbd,rs(imm16)       mult rrd,addr           push @rd,imm16
24992     push @rd,rs             set addr,imm4           subl rrd,imm32
24993     pushl @rd,@rs           set rd,imm4             subl rrd,rrs
24994     pushl @rd,addr          set rd,rs               tcc cc,rd
24995     pushl @rd,addr(rs)      setb @rd,imm4           tccb cc,rbd
24996     pushl @rd,rrs           setb addr(rd),imm4      test @rd
24997     res @rd,imm4            setb addr,imm4          test addr
24998     res addr(rd),imm4       setb rbd,imm4           test addr(rd)
24999     res addr,imm4           setb rbd,rs             test rd
25000     res rd,imm4             setflg imm4             testb @rd
25001     res rd,rs               sinb rbd,imm16          testb addr
25002     resb @rd,imm4           sinb rd,imm16           testb addr(rd)
25003     resb addr(rd),imm4      sind @rd,@rs,ra         testb rbd
25004     resb addr,imm4          sindb @rd,@rs,rba       testl @rd
25005     resb rbd,imm4           sinib @rd,@rs,ra        testl addr
25006     resb rbd,rs             sinibr @rd,@rs,ra       testl addr(rd)
25007     resflg imm4             sla rd,imm8             testl rrd
25008     ret cc                  slab rbd,imm8           trdb @rd,@rs,rba
25009     rl rd,imm1or2           slal rrd,imm8           trdrb @rd,@rs,rba
25010     rlb rbd,imm1or2         sll rd,imm8             trib @rd,@rs,rbr
25011     rlc rd,imm1or2          sllb rbd,imm8           trirb @rd,@rs,rbr
25012     rlcb rbd,imm1or2        slll rrd,imm8           trtdrb @ra,@rb,rbr
25013     rldb rbb,rba            sout imm16,rs           trtib @ra,@rb,rr
25014     rr rd,imm1or2           soutb imm16,rbs         trtirb @ra,@rb,rbr
25015     rrb rbd,imm1or2         soutd @rd,@rs,ra        trtrb @ra,@rb,rbr
25016     rrc rd,imm1or2          soutdb @rd,@rs,rba      tset @rd
25017     rrcb rbd,imm1or2        soutib @rd,@rs,ra       tset addr
25018     rrdb rbb,rba            soutibr @rd,@rs,ra      tset addr(rd)
25019     rsvd36                  sra rd,imm8             tset rd
25020     rsvd38                  srab rbd,imm8           tsetb @rd
25021     rsvd78                  sral rrd,imm8           tsetb addr
25022     rsvd7e                  srl rd,imm8             tsetb addr(rd)
25023     rsvd9d                  srlb rbd,imm8           tsetb rbd
25024     rsvd9f                  srll rrd,imm8           xor rd,@rs
25025     rsvdb9                  sub rd,@rs              xor rd,addr
25026     rsvdbf                  sub rd,addr             xor rd,addr(rs)
25027     sbc rd,rs               sub rd,addr(rs)         xor rd,imm16
25028     sbcb rbd,rbs            sub rd,imm16            xor rd,rs
25029     sc imm8                 sub rd,rs               xorb rbd,@rs
25030     sda rd,rs               subb rbd,@rs            xorb rbd,addr
25031     sdab rbd,rs             subb rbd,addr           xorb rbd,addr(rs)
25032     sdal rrd,rs             subb rbd,addr(rs)       xorb rbd,imm8
25033     sdl rd,rs               subb rbd,imm8           xorb rbd,rbs
25034     sdlb rbd,rs             subb rbd,rbs            xorb rbd,rbs
25035     sdll rrd,rs             subl rrd,@rs
25036     set @rd,imm4            subl rrd,addr
25037     set addr(rd),imm4       subl rrd,addr(rs)
25038
25039
25040File: as.info,  Node: Reporting Bugs,  Next: Acknowledgements,  Prev: Machine Dependencies,  Up: Top
25041
2504210 Reporting Bugs
25043*****************
25044
25045Your bug reports play an essential role in making 'as' reliable.
25046
25047   Reporting a bug may help you by bringing a solution to your problem,
25048or it may not.  But in any case the principal function of a bug report
25049is to help the entire community by making the next version of 'as' work
25050better.  Bug reports are your contribution to the maintenance of 'as'.
25051
25052   In order for a bug report to serve its purpose, you must include the
25053information that enables us to fix the bug.
25054
25055* Menu:
25056
25057* Bug Criteria::                Have you found a bug?
25058* Bug Reporting::               How to report bugs
25059
25060
25061File: as.info,  Node: Bug Criteria,  Next: Bug Reporting,  Up: Reporting Bugs
25062
2506310.1 Have You Found a Bug?
25064==========================
25065
25066If you are not sure whether you have found a bug, here are some
25067guidelines:
25068
25069   * If the assembler gets a fatal signal, for any input whatever, that
25070     is a 'as' bug.  Reliable assemblers never crash.
25071
25072   * If 'as' produces an error message for valid input, that is a bug.
25073
25074   * If 'as' does not produce an error message for invalid input, that
25075     is a bug.  However, you should note that your idea of "invalid
25076     input" might be our idea of "an extension" or "support for
25077     traditional practice".
25078
25079   * If you are an experienced user of assemblers, your suggestions for
25080     improvement of 'as' are welcome in any case.
25081
25082
25083File: as.info,  Node: Bug Reporting,  Prev: Bug Criteria,  Up: Reporting Bugs
25084
2508510.2 How to Report Bugs
25086=======================
25087
25088A number of companies and individuals offer support for GNU products.
25089If you obtained 'as' from a support organization, we recommend you
25090contact that organization first.
25091
25092   You can find contact information for many support companies and
25093individuals in the file 'etc/SERVICE' in the GNU Emacs distribution.
25094
25095   In any event, we also recommend that you send bug reports for 'as' to
25096<http://www.sourceware.org/bugzilla/>.
25097
25098   The fundamental principle of reporting bugs usefully is this: *report
25099all the facts*.  If you are not sure whether to state a fact or leave it
25100out, state it!
25101
25102   Often people omit facts because they think they know what causes the
25103problem and assume that some details do not matter.  Thus, you might
25104assume that the name of a symbol you use in an example does not matter.
25105Well, probably it does not, but one cannot be sure.  Perhaps the bug is
25106a stray memory reference which happens to fetch from the location where
25107that name is stored in memory; perhaps, if the name were different, the
25108contents of that location would fool the assembler into doing the right
25109thing despite the bug.  Play it safe and give a specific, complete
25110example.  That is the easiest thing for you to do, and the most helpful.
25111
25112   Keep in mind that the purpose of a bug report is to enable us to fix
25113the bug if it is new to us.  Therefore, always write your bug reports on
25114the assumption that the bug has not been reported previously.
25115
25116   Sometimes people give a few sketchy facts and ask, "Does this ring a
25117bell?"  This cannot help us fix a bug, so it is basically useless.  We
25118respond by asking for enough details to enable us to investigate.  You
25119might as well expedite matters by sending them to begin with.
25120
25121   To enable us to fix the bug, you should include all these things:
25122
25123   * The version of 'as'.  'as' announces it if you start it with the
25124     '--version' argument.
25125
25126     Without this, we will not know whether there is any point in
25127     looking for the bug in the current version of 'as'.
25128
25129   * Any patches you may have applied to the 'as' source.
25130
25131   * The type of machine you are using, and the operating system name
25132     and version number.
25133
25134   * What compiler (and its version) was used to compile 'as'--e.g.
25135     "'gcc-2.7'".
25136
25137   * The command arguments you gave the assembler to assemble your
25138     example and observe the bug.  To guarantee you will not omit
25139     something important, list them all.  A copy of the Makefile (or the
25140     output from make) is sufficient.
25141
25142     If we were to try to guess the arguments, we would probably guess
25143     wrong and then we might not encounter the bug.
25144
25145   * A complete input file that will reproduce the bug.  If the bug is
25146     observed when the assembler is invoked via a compiler, send the
25147     assembler source, not the high level language source.  Most
25148     compilers will produce the assembler source when run with the '-S'
25149     option.  If you are using 'gcc', use the options '-v --save-temps';
25150     this will save the assembler source in a file with an extension of
25151     '.s', and also show you exactly how 'as' is being run.
25152
25153   * A description of what behavior you observe that you believe is
25154     incorrect.  For example, "It gets a fatal signal."
25155
25156     Of course, if the bug is that 'as' gets a fatal signal, then we
25157     will certainly notice it.  But if the bug is incorrect output, we
25158     might not notice unless it is glaringly wrong.  You might as well
25159     not give us a chance to make a mistake.
25160
25161     Even if the problem you experience is a fatal signal, you should
25162     still say so explicitly.  Suppose something strange is going on,
25163     such as, your copy of 'as' is out of sync, or you have encountered
25164     a bug in the C library on your system.  (This has happened!)  Your
25165     copy might crash and ours would not.  If you told us to expect a
25166     crash, then when ours fails to crash, we would know that the bug
25167     was not happening for us.  If you had not told us to expect a
25168     crash, then we would not be able to draw any conclusion from our
25169     observations.
25170
25171   * If you wish to suggest changes to the 'as' source, send us context
25172     diffs, as generated by 'diff' with the '-u', '-c', or '-p' option.
25173     Always send diffs from the old file to the new file.  If you even
25174     discuss something in the 'as' source, refer to it by context, not
25175     by line number.
25176
25177     The line numbers in our development sources will not match those in
25178     your sources.  Your line numbers would convey no useful information
25179     to us.
25180
25181   Here are some things that are not necessary:
25182
25183   * A description of the envelope of the bug.
25184
25185     Often people who encounter a bug spend a lot of time investigating
25186     which changes to the input file will make the bug go away and which
25187     changes will not affect it.
25188
25189     This is often time consuming and not very useful, because the way
25190     we will find the bug is by running a single example under the
25191     debugger with breakpoints, not by pure deduction from a series of
25192     examples.  We recommend that you save your time for something else.
25193
25194     Of course, if you can find a simpler example to report _instead_ of
25195     the original one, that is a convenience for us.  Errors in the
25196     output will be easier to spot, running under the debugger will take
25197     less time, and so on.
25198
25199     However, simplification is not vital; if you do not want to do
25200     this, report the bug anyway and send us the entire test case you
25201     used.
25202
25203   * A patch for the bug.
25204
25205     A patch for the bug does help us if it is a good one.  But do not
25206     omit the necessary information, such as the test case, on the
25207     assumption that a patch is all we need.  We might see problems with
25208     your patch and decide to fix the problem another way, or we might
25209     not understand it at all.
25210
25211     Sometimes with a program as complicated as 'as' it is very hard to
25212     construct an example that will make the program follow a certain
25213     path through the code.  If you do not send us the example, we will
25214     not be able to construct one, so we will not be able to verify that
25215     the bug is fixed.
25216
25217     And if we cannot understand what bug you are trying to fix, or why
25218     your patch should be an improvement, we will not install it.  A
25219     test case will help us to understand.
25220
25221   * A guess about what the bug is or what it depends on.
25222
25223     Such guesses are usually wrong.  Even we cannot guess right about
25224     such things without first using the debugger to find the facts.
25225
25226
25227File: as.info,  Node: Acknowledgements,  Next: GNU Free Documentation License,  Prev: Reporting Bugs,  Up: Top
25228
2522911 Acknowledgements
25230*******************
25231
25232If you have contributed to GAS and your name isn't listed here, it is
25233not meant as a slight.  We just don't know about it.  Send mail to the
25234maintainer, and we'll correct the situation.  Currently the maintainer
25235is Nick Clifton (email address 'nickc@redhat.com').
25236
25237   Dean Elsner wrote the original GNU assembler for the VAX.(1)
25238
25239   Jay Fenlason maintained GAS for a while, adding support for
25240GDB-specific debug information and the 68k series machines, most of the
25241preprocessing pass, and extensive changes in 'messages.c',
25242'input-file.c', 'write.c'.
25243
25244   K. Richard Pixley maintained GAS for a while, adding various
25245enhancements and many bug fixes, including merging support for several
25246processors, breaking GAS up to handle multiple object file format back
25247ends (including heavy rewrite, testing, an integration of the coff and
25248b.out back ends), adding configuration including heavy testing and
25249verification of cross assemblers and file splits and renaming, converted
25250GAS to strictly ANSI C including full prototypes, added support for
25251m680[34]0 and cpu32, did considerable work on i960 including a COFF port
25252(including considerable amounts of reverse engineering), a SPARC opcode
25253file rewrite, DECstation, rs6000, and hp300hpux host ports, updated
25254"know" assertions and made them work, much other reorganization,
25255cleanup, and lint.
25256
25257   Ken Raeburn wrote the high-level BFD interface code to replace most
25258of the code in format-specific I/O modules.
25259
25260   The original VMS support was contributed by David L. Kashtan.  Eric
25261Youngdale has done much work with it since.
25262
25263   The Intel 80386 machine description was written by Eliot Dresselhaus.
25264
25265   Minh Tran-Le at IntelliCorp contributed some AIX 386 support.
25266
25267   The Motorola 88k machine description was contributed by Devon Bowen
25268of Buffalo University and Torbjorn Granlund of the Swedish Institute of
25269Computer Science.
25270
25271   Keith Knowles at the Open Software Foundation wrote the original MIPS
25272back end ('tc-mips.c', 'tc-mips.h'), and contributed Rose format support
25273(which hasn't been merged in yet).  Ralph Campbell worked with the MIPS
25274code to support a.out format.
25275
25276   Support for the Zilog Z8k and Renesas H8/300 processors (tc-z8k,
25277tc-h8300), and IEEE 695 object file format (obj-ieee), was written by
25278Steve Chamberlain of Cygnus Support.  Steve also modified the COFF back
25279end to use BFD for some low-level operations, for use with the H8/300
25280and AMD 29k targets.
25281
25282   John Gilmore built the AMD 29000 support, added '.include' support,
25283and simplified the configuration of which versions accept which
25284directives.  He updated the 68k machine description so that Motorola's
25285opcodes always produced fixed-size instructions (e.g., 'jsr'), while
25286synthetic instructions remained shrinkable ('jbsr').  John fixed many
25287bugs, including true tested cross-compilation support, and one bug in
25288relaxation that took a week and required the proverbial one-bit fix.
25289
25290   Ian Lance Taylor of Cygnus Support merged the Motorola and MIT syntax
25291for the 68k, completed support for some COFF targets (68k, i386 SVR3,
25292and SCO Unix), added support for MIPS ECOFF and ELF targets, wrote the
25293initial RS/6000 and PowerPC assembler, and made a few other minor
25294patches.
25295
25296   Steve Chamberlain made GAS able to generate listings.
25297
25298   Hewlett-Packard contributed support for the HP9000/300.
25299
25300   Jeff Law wrote GAS and BFD support for the native HPPA object format
25301(SOM) along with a fairly extensive HPPA testsuite (for both SOM and ELF
25302object formats).  This work was supported by both the Center for
25303Software Science at the University of Utah and Cygnus Support.
25304
25305   Support for ELF format files has been worked on by Mark Eichin of
25306Cygnus Support (original, incomplete implementation for SPARC), Pete
25307Hoogenboom and Jeff Law at the University of Utah (HPPA mainly), Michael
25308Meissner of the Open Software Foundation (i386 mainly), and Ken Raeburn
25309of Cygnus Support (sparc, and some initial 64-bit support).
25310
25311   Linas Vepstas added GAS support for the ESA/390 "IBM 370"
25312architecture.
25313
25314   Richard Henderson rewrote the Alpha assembler.  Klaus Kaempf wrote
25315GAS and BFD support for openVMS/Alpha.
25316
25317   Timothy Wall, Michael Hayes, and Greg Smart contributed to the
25318various tic* flavors.
25319
25320   David Heine, Sterling Augustine, Bob Wilson and John Ruttenberg from
25321Tensilica, Inc. added support for Xtensa processors.
25322
25323   Several engineers at Cygnus Support have also provided many small bug
25324fixes and configuration enhancements.
25325
25326   Jon Beniston added support for the Lattice Mico32 architecture.
25327
25328   Many others have contributed large or small bugfixes and
25329enhancements.  If you have contributed significant work and are not
25330mentioned on this list, and want to be, let us know.  Some of the
25331history has been lost; we are not intentionally leaving anyone out.
25332
25333   ---------- Footnotes ----------
25334
25335   (1) Any more details?
25336
25337
25338File: as.info,  Node: GNU Free Documentation License,  Next: AS Index,  Prev: Acknowledgements,  Up: Top
25339
25340Appendix A GNU Free Documentation License
25341*****************************************
25342
25343                     Version 1.3, 3 November 2008
25344
25345     Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
25346     <http://fsf.org/>
25347
25348     Everyone is permitted to copy and distribute verbatim copies
25349     of this license document, but changing it is not allowed.
25350
25351  0. PREAMBLE
25352
25353     The purpose of this License is to make a manual, textbook, or other
25354     functional and useful document "free" in the sense of freedom: to
25355     assure everyone the effective freedom to copy and redistribute it,
25356     with or without modifying it, either commercially or
25357     noncommercially.  Secondarily, this License preserves for the
25358     author and publisher a way to get credit for their work, while not
25359     being considered responsible for modifications made by others.
25360
25361     This License is a kind of "copyleft", which means that derivative
25362     works of the document must themselves be free in the same sense.
25363     It complements the GNU General Public License, which is a copyleft
25364     license designed for free software.
25365
25366     We have designed this License in order to use it for manuals for
25367     free software, because free software needs free documentation: a
25368     free program should come with manuals providing the same freedoms
25369     that the software does.  But this License is not limited to
25370     software manuals; it can be used for any textual work, regardless
25371     of subject matter or whether it is published as a printed book.  We
25372     recommend this License principally for works whose purpose is
25373     instruction or reference.
25374
25375  1. APPLICABILITY AND DEFINITIONS
25376
25377     This License applies to any manual or other work, in any medium,
25378     that contains a notice placed by the copyright holder saying it can
25379     be distributed under the terms of this License.  Such a notice
25380     grants a world-wide, royalty-free license, unlimited in duration,
25381     to use that work under the conditions stated herein.  The
25382     "Document", below, refers to any such manual or work.  Any member
25383     of the public is a licensee, and is addressed as "you".  You accept
25384     the license if you copy, modify or distribute the work in a way
25385     requiring permission under copyright law.
25386
25387     A "Modified Version" of the Document means any work containing the
25388     Document or a portion of it, either copied verbatim, or with
25389     modifications and/or translated into another language.
25390
25391     A "Secondary Section" is a named appendix or a front-matter section
25392     of the Document that deals exclusively with the relationship of the
25393     publishers or authors of the Document to the Document's overall
25394     subject (or to related matters) and contains nothing that could
25395     fall directly within that overall subject.  (Thus, if the Document
25396     is in part a textbook of mathematics, a Secondary Section may not
25397     explain any mathematics.)  The relationship could be a matter of
25398     historical connection with the subject or with related matters, or
25399     of legal, commercial, philosophical, ethical or political position
25400     regarding them.
25401
25402     The "Invariant Sections" are certain Secondary Sections whose
25403     titles are designated, as being those of Invariant Sections, in the
25404     notice that says that the Document is released under this License.
25405     If a section does not fit the above definition of Secondary then it
25406     is not allowed to be designated as Invariant.  The Document may
25407     contain zero Invariant Sections.  If the Document does not identify
25408     any Invariant Sections then there are none.
25409
25410     The "Cover Texts" are certain short passages of text that are
25411     listed, as Front-Cover Texts or Back-Cover Texts, in the notice
25412     that says that the Document is released under this License.  A
25413     Front-Cover Text may be at most 5 words, and a Back-Cover Text may
25414     be at most 25 words.
25415
25416     A "Transparent" copy of the Document means a machine-readable copy,
25417     represented in a format whose specification is available to the
25418     general public, that is suitable for revising the document
25419     straightforwardly with generic text editors or (for images composed
25420     of pixels) generic paint programs or (for drawings) some widely
25421     available drawing editor, and that is suitable for input to text
25422     formatters or for automatic translation to a variety of formats
25423     suitable for input to text formatters.  A copy made in an otherwise
25424     Transparent file format whose markup, or absence of markup, has
25425     been arranged to thwart or discourage subsequent modification by
25426     readers is not Transparent.  An image format is not Transparent if
25427     used for any substantial amount of text.  A copy that is not
25428     "Transparent" is called "Opaque".
25429
25430     Examples of suitable formats for Transparent copies include plain
25431     ASCII without markup, Texinfo input format, LaTeX input format,
25432     SGML or XML using a publicly available DTD, and standard-conforming
25433     simple HTML, PostScript or PDF designed for human modification.
25434     Examples of transparent image formats include PNG, XCF and JPG.
25435     Opaque formats include proprietary formats that can be read and
25436     edited only by proprietary word processors, SGML or XML for which
25437     the DTD and/or processing tools are not generally available, and
25438     the machine-generated HTML, PostScript or PDF produced by some word
25439     processors for output purposes only.
25440
25441     The "Title Page" means, for a printed book, the title page itself,
25442     plus such following pages as are needed to hold, legibly, the
25443     material this License requires to appear in the title page.  For
25444     works in formats which do not have any title page as such, "Title
25445     Page" means the text near the most prominent appearance of the
25446     work's title, preceding the beginning of the body of the text.
25447
25448     The "publisher" means any person or entity that distributes copies
25449     of the Document to the public.
25450
25451     A section "Entitled XYZ" means a named subunit of the Document
25452     whose title either is precisely XYZ or contains XYZ in parentheses
25453     following text that translates XYZ in another language.  (Here XYZ
25454     stands for a specific section name mentioned below, such as
25455     "Acknowledgements", "Dedications", "Endorsements", or "History".)
25456     To "Preserve the Title" of such a section when you modify the
25457     Document means that it remains a section "Entitled XYZ" according
25458     to this definition.
25459
25460     The Document may include Warranty Disclaimers next to the notice
25461     which states that this License applies to the Document.  These
25462     Warranty Disclaimers are considered to be included by reference in
25463     this License, but only as regards disclaiming warranties: any other
25464     implication that these Warranty Disclaimers may have is void and
25465     has no effect on the meaning of this License.
25466
25467  2. VERBATIM COPYING
25468
25469     You may copy and distribute the Document in any medium, either
25470     commercially or noncommercially, provided that this License, the
25471     copyright notices, and the license notice saying this License
25472     applies to the Document are reproduced in all copies, and that you
25473     add no other conditions whatsoever to those of this License.  You
25474     may not use technical measures to obstruct or control the reading
25475     or further copying of the copies you make or distribute.  However,
25476     you may accept compensation in exchange for copies.  If you
25477     distribute a large enough number of copies you must also follow the
25478     conditions in section 3.
25479
25480     You may also lend copies, under the same conditions stated above,
25481     and you may publicly display copies.
25482
25483  3. COPYING IN QUANTITY
25484
25485     If you publish printed copies (or copies in media that commonly
25486     have printed covers) of the Document, numbering more than 100, and
25487     the Document's license notice requires Cover Texts, you must
25488     enclose the copies in covers that carry, clearly and legibly, all
25489     these Cover Texts: Front-Cover Texts on the front cover, and
25490     Back-Cover Texts on the back cover.  Both covers must also clearly
25491     and legibly identify you as the publisher of these copies.  The
25492     front cover must present the full title with all words of the title
25493     equally prominent and visible.  You may add other material on the
25494     covers in addition.  Copying with changes limited to the covers, as
25495     long as they preserve the title of the Document and satisfy these
25496     conditions, can be treated as verbatim copying in other respects.
25497
25498     If the required texts for either cover are too voluminous to fit
25499     legibly, you should put the first ones listed (as many as fit
25500     reasonably) on the actual cover, and continue the rest onto
25501     adjacent pages.
25502
25503     If you publish or distribute Opaque copies of the Document
25504     numbering more than 100, you must either include a machine-readable
25505     Transparent copy along with each Opaque copy, or state in or with
25506     each Opaque copy a computer-network location from which the general
25507     network-using public has access to download using public-standard
25508     network protocols a complete Transparent copy of the Document, free
25509     of added material.  If you use the latter option, you must take
25510     reasonably prudent steps, when you begin distribution of Opaque
25511     copies in quantity, to ensure that this Transparent copy will
25512     remain thus accessible at the stated location until at least one
25513     year after the last time you distribute an Opaque copy (directly or
25514     through your agents or retailers) of that edition to the public.
25515
25516     It is requested, but not required, that you contact the authors of
25517     the Document well before redistributing any large number of copies,
25518     to give them a chance to provide you with an updated version of the
25519     Document.
25520
25521  4. MODIFICATIONS
25522
25523     You may copy and distribute a Modified Version of the Document
25524     under the conditions of sections 2 and 3 above, provided that you
25525     release the Modified Version under precisely this License, with the
25526     Modified Version filling the role of the Document, thus licensing
25527     distribution and modification of the Modified Version to whoever
25528     possesses a copy of it.  In addition, you must do these things in
25529     the Modified Version:
25530
25531       A. Use in the Title Page (and on the covers, if any) a title
25532          distinct from that of the Document, and from those of previous
25533          versions (which should, if there were any, be listed in the
25534          History section of the Document).  You may use the same title
25535          as a previous version if the original publisher of that
25536          version gives permission.
25537
25538       B. List on the Title Page, as authors, one or more persons or
25539          entities responsible for authorship of the modifications in
25540          the Modified Version, together with at least five of the
25541          principal authors of the Document (all of its principal
25542          authors, if it has fewer than five), unless they release you
25543          from this requirement.
25544
25545       C. State on the Title page the name of the publisher of the
25546          Modified Version, as the publisher.
25547
25548       D. Preserve all the copyright notices of the Document.
25549
25550       E. Add an appropriate copyright notice for your modifications
25551          adjacent to the other copyright notices.
25552
25553       F. Include, immediately after the copyright notices, a license
25554          notice giving the public permission to use the Modified
25555          Version under the terms of this License, in the form shown in
25556          the Addendum below.
25557
25558       G. Preserve in that license notice the full lists of Invariant
25559          Sections and required Cover Texts given in the Document's
25560          license notice.
25561
25562       H. Include an unaltered copy of this License.
25563
25564       I. Preserve the section Entitled "History", Preserve its Title,
25565          and add to it an item stating at least the title, year, new
25566          authors, and publisher of the Modified Version as given on the
25567          Title Page.  If there is no section Entitled "History" in the
25568          Document, create one stating the title, year, authors, and
25569          publisher of the Document as given on its Title Page, then add
25570          an item describing the Modified Version as stated in the
25571          previous sentence.
25572
25573       J. Preserve the network location, if any, given in the Document
25574          for public access to a Transparent copy of the Document, and
25575          likewise the network locations given in the Document for
25576          previous versions it was based on.  These may be placed in the
25577          "History" section.  You may omit a network location for a work
25578          that was published at least four years before the Document
25579          itself, or if the original publisher of the version it refers
25580          to gives permission.
25581
25582       K. For any section Entitled "Acknowledgements" or "Dedications",
25583          Preserve the Title of the section, and preserve in the section
25584          all the substance and tone of each of the contributor
25585          acknowledgements and/or dedications given therein.
25586
25587       L. Preserve all the Invariant Sections of the Document, unaltered
25588          in their text and in their titles.  Section numbers or the
25589          equivalent are not considered part of the section titles.
25590
25591       M. Delete any section Entitled "Endorsements".  Such a section
25592          may not be included in the Modified Version.
25593
25594       N. Do not retitle any existing section to be Entitled
25595          "Endorsements" or to conflict in title with any Invariant
25596          Section.
25597
25598       O. Preserve any Warranty Disclaimers.
25599
25600     If the Modified Version includes new front-matter sections or
25601     appendices that qualify as Secondary Sections and contain no
25602     material copied from the Document, you may at your option designate
25603     some or all of these sections as invariant.  To do this, add their
25604     titles to the list of Invariant Sections in the Modified Version's
25605     license notice.  These titles must be distinct from any other
25606     section titles.
25607
25608     You may add a section Entitled "Endorsements", provided it contains
25609     nothing but endorsements of your Modified Version by various
25610     parties--for example, statements of peer review or that the text
25611     has been approved by an organization as the authoritative
25612     definition of a standard.
25613
25614     You may add a passage of up to five words as a Front-Cover Text,
25615     and a passage of up to 25 words as a Back-Cover Text, to the end of
25616     the list of Cover Texts in the Modified Version.  Only one passage
25617     of Front-Cover Text and one of Back-Cover Text may be added by (or
25618     through arrangements made by) any one entity.  If the Document
25619     already includes a cover text for the same cover, previously added
25620     by you or by arrangement made by the same entity you are acting on
25621     behalf of, you may not add another; but you may replace the old
25622     one, on explicit permission from the previous publisher that added
25623     the old one.
25624
25625     The author(s) and publisher(s) of the Document do not by this
25626     License give permission to use their names for publicity for or to
25627     assert or imply endorsement of any Modified Version.
25628
25629  5. COMBINING DOCUMENTS
25630
25631     You may combine the Document with other documents released under
25632     this License, under the terms defined in section 4 above for
25633     modified versions, provided that you include in the combination all
25634     of the Invariant Sections of all of the original documents,
25635     unmodified, and list them all as Invariant Sections of your
25636     combined work in its license notice, and that you preserve all
25637     their Warranty Disclaimers.
25638
25639     The combined work need only contain one copy of this License, and
25640     multiple identical Invariant Sections may be replaced with a single
25641     copy.  If there are multiple Invariant Sections with the same name
25642     but different contents, make the title of each such section unique
25643     by adding at the end of it, in parentheses, the name of the
25644     original author or publisher of that section if known, or else a
25645     unique number.  Make the same adjustment to the section titles in
25646     the list of Invariant Sections in the license notice of the
25647     combined work.
25648
25649     In the combination, you must combine any sections Entitled
25650     "History" in the various original documents, forming one section
25651     Entitled "History"; likewise combine any sections Entitled
25652     "Acknowledgements", and any sections Entitled "Dedications".  You
25653     must delete all sections Entitled "Endorsements."
25654
25655  6. COLLECTIONS OF DOCUMENTS
25656
25657     You may make a collection consisting of the Document and other
25658     documents released under this License, and replace the individual
25659     copies of this License in the various documents with a single copy
25660     that is included in the collection, provided that you follow the
25661     rules of this License for verbatim copying of each of the documents
25662     in all other respects.
25663
25664     You may extract a single document from such a collection, and
25665     distribute it individually under this License, provided you insert
25666     a copy of this License into the extracted document, and follow this
25667     License in all other respects regarding verbatim copying of that
25668     document.
25669
25670  7. AGGREGATION WITH INDEPENDENT WORKS
25671
25672     A compilation of the Document or its derivatives with other
25673     separate and independent documents or works, in or on a volume of a
25674     storage or distribution medium, is called an "aggregate" if the
25675     copyright resulting from the compilation is not used to limit the
25676     legal rights of the compilation's users beyond what the individual
25677     works permit.  When the Document is included in an aggregate, this
25678     License does not apply to the other works in the aggregate which
25679     are not themselves derivative works of the Document.
25680
25681     If the Cover Text requirement of section 3 is applicable to these
25682     copies of the Document, then if the Document is less than one half
25683     of the entire aggregate, the Document's Cover Texts may be placed
25684     on covers that bracket the Document within the aggregate, or the
25685     electronic equivalent of covers if the Document is in electronic
25686     form.  Otherwise they must appear on printed covers that bracket
25687     the whole aggregate.
25688
25689  8. TRANSLATION
25690
25691     Translation is considered a kind of modification, so you may
25692     distribute translations of the Document under the terms of section
25693     4.  Replacing Invariant Sections with translations requires special
25694     permission from their copyright holders, but you may include
25695     translations of some or all Invariant Sections in addition to the
25696     original versions of these Invariant Sections.  You may include a
25697     translation of this License, and all the license notices in the
25698     Document, and any Warranty Disclaimers, provided that you also
25699     include the original English version of this License and the
25700     original versions of those notices and disclaimers.  In case of a
25701     disagreement between the translation and the original version of
25702     this License or a notice or disclaimer, the original version will
25703     prevail.
25704
25705     If a section in the Document is Entitled "Acknowledgements",
25706     "Dedications", or "History", the requirement (section 4) to
25707     Preserve its Title (section 1) will typically require changing the
25708     actual title.
25709
25710  9. TERMINATION
25711
25712     You may not copy, modify, sublicense, or distribute the Document
25713     except as expressly provided under this License.  Any attempt
25714     otherwise to copy, modify, sublicense, or distribute it is void,
25715     and will automatically terminate your rights under this License.
25716
25717     However, if you cease all violation of this License, then your
25718     license from a particular copyright holder is reinstated (a)
25719     provisionally, unless and until the copyright holder explicitly and
25720     finally terminates your license, and (b) permanently, if the
25721     copyright holder fails to notify you of the violation by some
25722     reasonable means prior to 60 days after the cessation.
25723
25724     Moreover, your license from a particular copyright holder is
25725     reinstated permanently if the copyright holder notifies you of the
25726     violation by some reasonable means, this is the first time you have
25727     received notice of violation of this License (for any work) from
25728     that copyright holder, and you cure the violation prior to 30 days
25729     after your receipt of the notice.
25730
25731     Termination of your rights under this section does not terminate
25732     the licenses of parties who have received copies or rights from you
25733     under this License.  If your rights have been terminated and not
25734     permanently reinstated, receipt of a copy of some or all of the
25735     same material does not give you any rights to use it.
25736
25737  10. FUTURE REVISIONS OF THIS LICENSE
25738
25739     The Free Software Foundation may publish new, revised versions of
25740     the GNU Free Documentation License from time to time.  Such new
25741     versions will be similar in spirit to the present version, but may
25742     differ in detail to address new problems or concerns.  See
25743     <http://www.gnu.org/copyleft/>.
25744
25745     Each version of the License is given a distinguishing version
25746     number.  If the Document specifies that a particular numbered
25747     version of this License "or any later version" applies to it, you
25748     have the option of following the terms and conditions either of
25749     that specified version or of any later version that has been
25750     published (not as a draft) by the Free Software Foundation.  If the
25751     Document does not specify a version number of this License, you may
25752     choose any version ever published (not as a draft) by the Free
25753     Software Foundation.  If the Document specifies that a proxy can
25754     decide which future versions of this License can be used, that
25755     proxy's public statement of acceptance of a version permanently
25756     authorizes you to choose that version for the Document.
25757
25758  11. RELICENSING
25759
25760     "Massive Multiauthor Collaboration Site" (or "MMC Site") means any
25761     World Wide Web server that publishes copyrightable works and also
25762     provides prominent facilities for anybody to edit those works.  A
25763     public wiki that anybody can edit is an example of such a server.
25764     A "Massive Multiauthor Collaboration" (or "MMC") contained in the
25765     site means any set of copyrightable works thus published on the MMC
25766     site.
25767
25768     "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0
25769     license published by Creative Commons Corporation, a not-for-profit
25770     corporation with a principal place of business in San Francisco,
25771     California, as well as future copyleft versions of that license
25772     published by that same organization.
25773
25774     "Incorporate" means to publish or republish a Document, in whole or
25775     in part, as part of another Document.
25776
25777     An MMC is "eligible for relicensing" if it is licensed under this
25778     License, and if all works that were first published under this
25779     License somewhere other than this MMC, and subsequently
25780     incorporated in whole or in part into the MMC, (1) had no cover
25781     texts or invariant sections, and (2) were thus incorporated prior
25782     to November 1, 2008.
25783
25784     The operator of an MMC Site may republish an MMC contained in the
25785     site under CC-BY-SA on the same site at any time before August 1,
25786     2009, provided the MMC is eligible for relicensing.
25787
25788ADDENDUM: How to use this License for your documents
25789====================================================
25790
25791To use this License in a document you have written, include a copy of
25792the License in the document and put the following copyright and license
25793notices just after the title page:
25794
25795       Copyright (C)  YEAR  YOUR NAME.
25796       Permission is granted to copy, distribute and/or modify this document
25797       under the terms of the GNU Free Documentation License, Version 1.3
25798       or any later version published by the Free Software Foundation;
25799       with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
25800       Texts.  A copy of the license is included in the section entitled ``GNU
25801       Free Documentation License''.
25802
25803   If you have Invariant Sections, Front-Cover Texts and Back-Cover
25804Texts, replace the "with...Texts."  line with this:
25805
25806         with the Invariant Sections being LIST THEIR TITLES, with
25807         the Front-Cover Texts being LIST, and with the Back-Cover Texts
25808         being LIST.
25809
25810   If you have Invariant Sections without Cover Texts, or some other
25811combination of the three, merge those two alternatives to suit the
25812situation.
25813
25814   If your document contains nontrivial examples of program code, we
25815recommend releasing these examples in parallel under your choice of free
25816software license, such as the GNU General Public License, to permit
25817their use in free software.
25818
25819
25820File: as.info,  Node: AS Index,  Prev: GNU Free Documentation License,  Up: Top
25821
25822AS Index
25823********
25824
25825�[index�]
25826* Menu:
25827
25828* \" (doublequote character):            Strings.            (line   43)
25829* \b (backspace character):              Strings.            (line   15)
25830* \DDD (octal character code):           Strings.            (line   30)
25831* \f (formfeed character):               Strings.            (line   18)
25832* \n (newline character):                Strings.            (line   21)
25833* \r (carriage return character):        Strings.            (line   24)
25834* \t (tab):                              Strings.            (line   27)
25835* \XD... (hex character code):           Strings.            (line   36)
25836* \\ (\ character):                      Strings.            (line   40)
25837* #:                                     Comments.           (line   33)
25838* #APP:                                  Preprocessing.      (line   26)
25839* #NO_APP:                               Preprocessing.      (line   26)
25840* $ in symbol names:                     D10V-Chars.         (line   46)
25841* $ in symbol names <1>:                 D30V-Chars.         (line   70)
25842* $ in symbol names <2>:                 Meta-Chars.         (line   10)
25843* $ in symbol names <3>:                 SH-Chars.           (line   15)
25844* $a:                                    ARM Mapping Symbols.
25845                                                             (line    9)
25846* $acos math builtin, TIC54X:            TIC54X-Builtins.    (line   10)
25847* $asin math builtin, TIC54X:            TIC54X-Builtins.    (line   13)
25848* $atan math builtin, TIC54X:            TIC54X-Builtins.    (line   16)
25849* $atan2 math builtin, TIC54X:           TIC54X-Builtins.    (line   19)
25850* $ceil math builtin, TIC54X:            TIC54X-Builtins.    (line   22)
25851* $cos math builtin, TIC54X:             TIC54X-Builtins.    (line   28)
25852* $cosh math builtin, TIC54X:            TIC54X-Builtins.    (line   25)
25853* $cvf math builtin, TIC54X:             TIC54X-Builtins.    (line   31)
25854* $cvi math builtin, TIC54X:             TIC54X-Builtins.    (line   34)
25855* $d:                                    AArch64 Mapping Symbols.
25856                                                             (line   12)
25857* $d <1>:                                ARM Mapping Symbols.
25858                                                             (line   15)
25859* $exp math builtin, TIC54X:             TIC54X-Builtins.    (line   37)
25860* $fabs math builtin, TIC54X:            TIC54X-Builtins.    (line   40)
25861* $firstch subsym builtin, TIC54X:       TIC54X-Macros.      (line   26)
25862* $floor math builtin, TIC54X:           TIC54X-Builtins.    (line   43)
25863* $fmod math builtin, TIC54X:            TIC54X-Builtins.    (line   47)
25864* $int math builtin, TIC54X:             TIC54X-Builtins.    (line   50)
25865* $iscons subsym builtin, TIC54X:        TIC54X-Macros.      (line   43)
25866* $isdefed subsym builtin, TIC54X:       TIC54X-Macros.      (line   34)
25867* $ismember subsym builtin, TIC54X:      TIC54X-Macros.      (line   38)
25868* $isname subsym builtin, TIC54X:        TIC54X-Macros.      (line   47)
25869* $isreg subsym builtin, TIC54X:         TIC54X-Macros.      (line   50)
25870* $lastch subsym builtin, TIC54X:        TIC54X-Macros.      (line   30)
25871* $ldexp math builtin, TIC54X:           TIC54X-Builtins.    (line   53)
25872* $log math builtin, TIC54X:             TIC54X-Builtins.    (line   59)
25873* $log10 math builtin, TIC54X:           TIC54X-Builtins.    (line   56)
25874* $max math builtin, TIC54X:             TIC54X-Builtins.    (line   62)
25875* $min math builtin, TIC54X:             TIC54X-Builtins.    (line   65)
25876* $pow math builtin, TIC54X:             TIC54X-Builtins.    (line   68)
25877* $round math builtin, TIC54X:           TIC54X-Builtins.    (line   71)
25878* $sgn math builtin, TIC54X:             TIC54X-Builtins.    (line   74)
25879* $sin math builtin, TIC54X:             TIC54X-Builtins.    (line   77)
25880* $sinh math builtin, TIC54X:            TIC54X-Builtins.    (line   80)
25881* $sqrt math builtin, TIC54X:            TIC54X-Builtins.    (line   83)
25882* $structacc subsym builtin, TIC54X:     TIC54X-Macros.      (line   57)
25883* $structsz subsym builtin, TIC54X:      TIC54X-Macros.      (line   54)
25884* $symcmp subsym builtin, TIC54X:        TIC54X-Macros.      (line   23)
25885* $symlen subsym builtin, TIC54X:        TIC54X-Macros.      (line   20)
25886* $t:                                    ARM Mapping Symbols.
25887                                                             (line   12)
25888* $tan math builtin, TIC54X:             TIC54X-Builtins.    (line   86)
25889* $tanh math builtin, TIC54X:            TIC54X-Builtins.    (line   89)
25890* $trunc math builtin, TIC54X:           TIC54X-Builtins.    (line   92)
25891* $x:                                    AArch64 Mapping Symbols.
25892                                                             (line    9)
25893* %gp:                                   RX-Modifiers.       (line    6)
25894* %gpreg:                                RX-Modifiers.       (line   22)
25895* %pidreg:                               RX-Modifiers.       (line   25)
25896* -+ option, VAX/VMS:                    VAX-Opts.           (line   71)
25897* --:                                    Command Line.       (line   10)
25898* --32 option, i386:                     i386-Options.       (line    8)
25899* --32 option, x86-64:                   i386-Options.       (line    8)
25900* --64 option, i386:                     i386-Options.       (line    8)
25901* --64 option, x86-64:                   i386-Options.       (line    8)
25902* --absolute-literals:                   Xtensa Options.     (line   39)
25903* --allow-reg-prefix:                    SH Options.         (line    9)
25904* --alternate:                           alternate.          (line    6)
25905* --auto-litpools:                       Xtensa Options.     (line   22)
25906* --base-size-default-16:                M68K-Opts.          (line   66)
25907* --base-size-default-32:                M68K-Opts.          (line   66)
25908* --big:                                 SH Options.         (line    9)
25909* --bitwise-or option, M680x0:           M68K-Opts.          (line   59)
25910* --compress-debug-sections= option:     Overview.           (line  386)
25911* --disp-size-default-16:                M68K-Opts.          (line   75)
25912* --disp-size-default-32:                M68K-Opts.          (line   75)
25913* --divide option, i386:                 i386-Options.       (line   25)
25914* --dsp:                                 SH Options.         (line    9)
25915* --emulation=crisaout command-line option, CRIS: CRIS-Opts. (line    9)
25916* --emulation=criself command-line option, CRIS: CRIS-Opts.  (line    9)
25917* --enforce-aligned-data:                Sparc-Aligned-Data. (line   11)
25918* --fatal-warnings:                      W.                  (line   16)
25919* --fdpic:                               SH Options.         (line   31)
25920* --fix-v4bx command-line option, ARM:   ARM Options.        (line  370)
25921* --fixed-special-register-names command-line option, MMIX: MMIX-Opts.
25922                                                             (line    8)
25923* --force-long-branches:                 M68HC11-Opts.       (line   81)
25924* --generate-example:                    M68HC11-Opts.       (line   98)
25925* --globalize-symbols command-line option, MMIX: MMIX-Opts.  (line   12)
25926* --gnu-syntax command-line option, MMIX: MMIX-Opts.         (line   16)
25927* --linker-allocated-gregs command-line option, MMIX: MMIX-Opts.
25928                                                             (line   67)
25929* --listing-cont-lines:                  listing.            (line   34)
25930* --listing-lhs-width:                   listing.            (line   16)
25931* --listing-lhs-width2:                  listing.            (line   21)
25932* --listing-rhs-width:                   listing.            (line   28)
25933* --little:                              SH Options.         (line    9)
25934* --longcalls:                           Xtensa Options.     (line   53)
25935* --march=ARCHITECTURE command-line option, CRIS: CRIS-Opts. (line   34)
25936* --MD:                                  MD.                 (line    6)
25937* --mul-bug-abort command-line option, CRIS: CRIS-Opts.      (line   63)
25938* --no-absolute-literals:                Xtensa Options.     (line   39)
25939* --no-auto-litpools:                    Xtensa Options.     (line   22)
25940* --no-expand command-line option, MMIX: MMIX-Opts.          (line   31)
25941* --no-longcalls:                        Xtensa Options.     (line   53)
25942* --no-merge-gregs command-line option, MMIX: MMIX-Opts.     (line   36)
25943* --no-mul-bug-abort command-line option, CRIS: CRIS-Opts.   (line   63)
25944* --no-pad-sections:                     no-pad-sections.    (line    6)
25945* --no-predefined-syms command-line option, MMIX: MMIX-Opts. (line   22)
25946* --no-pushj-stubs command-line option, MMIX: MMIX-Opts.     (line   54)
25947* --no-stubs command-line option, MMIX:  MMIX-Opts.          (line   54)
25948* --no-target-align:                     Xtensa Options.     (line   46)
25949* --no-text-section-literals:            Xtensa Options.     (line    7)
25950* --no-trampolines:                      Xtensa Options.     (line   74)
25951* --no-transform:                        Xtensa Options.     (line   62)
25952* --no-underscore command-line option, CRIS: CRIS-Opts.      (line   15)
25953* --no-warn:                             W.                  (line   11)
25954* --pcrel:                               M68K-Opts.          (line   87)
25955* --pic command-line option, CRIS:       CRIS-Opts.          (line   27)
25956* --print-insn-syntax:                   M68HC11-Opts.       (line   87)
25957* --print-insn-syntax <1>:               XGATE-Opts.         (line   25)
25958* --print-opcodes:                       M68HC11-Opts.       (line   91)
25959* --print-opcodes <1>:                   XGATE-Opts.         (line   29)
25960* --register-prefix-optional option, M680x0: M68K-Opts.      (line   46)
25961* --relax:                               SH Options.         (line    9)
25962* --relax command-line option, MMIX:     MMIX-Opts.          (line   19)
25963* --rename-section:                      Xtensa Options.     (line   70)
25964* --renesas:                             SH Options.         (line    9)
25965* --sectname-subst:                      Section.            (line   71)
25966* --short-branches:                      M68HC11-Opts.       (line   67)
25967* --small:                               SH Options.         (line    9)
25968* --statistics:                          statistics.         (line    6)
25969* --strict-direct-mode:                  M68HC11-Opts.       (line   57)
25970* --target-align:                        Xtensa Options.     (line   46)
25971* --text-section-literals:               Xtensa Options.     (line    7)
25972* --traditional-format:                  traditional-format. (line    6)
25973* --trampolines:                         Xtensa Options.     (line   74)
25974* --transform:                           Xtensa Options.     (line   62)
25975* --underscore command-line option, CRIS: CRIS-Opts.         (line   15)
25976* --warn:                                W.                  (line   19)
25977* --x32 option, i386:                    i386-Options.       (line    8)
25978* --x32 option, x86-64:                  i386-Options.       (line    8)
25979* --xgate-ramoffset:                     M68HC11-Opts.       (line   36)
25980* -1 option, VAX/VMS:                    VAX-Opts.           (line   77)
25981* -32addr command-line option, Alpha:    Alpha Options.      (line   57)
25982* -a:                                    a.                  (line    6)
25983* -ac:                                   a.                  (line    6)
25984* -ad:                                   a.                  (line    6)
25985* -ag:                                   a.                  (line    6)
25986* -ah:                                   a.                  (line    6)
25987* -al:                                   a.                  (line    6)
25988* -Aleon:                                Sparc-Opts.         (line   25)
25989* -an:                                   a.                  (line    6)
25990* -as:                                   a.                  (line    6)
25991* -Asparc:                               Sparc-Opts.         (line   25)
25992* -Asparcfmaf:                           Sparc-Opts.         (line   25)
25993* -Asparcima:                            Sparc-Opts.         (line   25)
25994* -Asparclet:                            Sparc-Opts.         (line   25)
25995* -Asparclite:                           Sparc-Opts.         (line   25)
25996* -Asparcvis:                            Sparc-Opts.         (line   25)
25997* -Asparcvis2:                           Sparc-Opts.         (line   25)
25998* -Asparcvis3:                           Sparc-Opts.         (line   25)
25999* -Asparcvis3r:                          Sparc-Opts.         (line   25)
26000* -Av6:                                  Sparc-Opts.         (line   25)
26001* -Av7:                                  Sparc-Opts.         (line   25)
26002* -Av8:                                  Sparc-Opts.         (line   25)
26003* -Av9:                                  Sparc-Opts.         (line   25)
26004* -Av9a:                                 Sparc-Opts.         (line   25)
26005* -Av9b:                                 Sparc-Opts.         (line   25)
26006* -Av9c:                                 Sparc-Opts.         (line   25)
26007* -Av9d:                                 Sparc-Opts.         (line   25)
26008* -Av9e:                                 Sparc-Opts.         (line   25)
26009* -Av9m:                                 Sparc-Opts.         (line   25)
26010* -Av9v:                                 Sparc-Opts.         (line   25)
26011* -big option, M32R:                     M32R-Opts.          (line   35)
26012* -colonless command-line option, Z80:   Z80 Options.        (line   30)
26013* -D:                                    D.                  (line    6)
26014* -D, ignored on VAX:                    VAX-Opts.           (line   11)
26015* -d, VAX option:                        VAX-Opts.           (line   16)
26016* -eabi= command-line option, ARM:       ARM Options.        (line  346)
26017* -EB command-line option, AArch64:      AArch64 Options.    (line    6)
26018* -EB command-line option, ARC:          ARC Options.        (line   84)
26019* -EB command-line option, ARM:          ARM Options.        (line  351)
26020* -EB command-line option, BPF:          BPF Options.        (line    6)
26021* -EB option (MIPS):                     MIPS Options.       (line   13)
26022* -EB option, M32R:                      M32R-Opts.          (line   39)
26023* -EB option, TILE-Gx:                   TILE-Gx Options.    (line   11)
26024* -EL command-line option, AArch64:      AArch64 Options.    (line   10)
26025* -EL command-line option, ARC:          ARC Options.        (line   88)
26026* -EL command-line option, ARM:          ARM Options.        (line  362)
26027* -EL command-line option, BPF:          BPF Options.        (line   10)
26028* -EL option (MIPS):                     MIPS Options.       (line   13)
26029* -EL option, M32R:                      M32R-Opts.          (line   32)
26030* -EL option, TILE-Gx:                   TILE-Gx Options.    (line   11)
26031* -ez80 command-line option, Z80:        Z80 Options.        (line   19)
26032* -ez80-adl command-line option, Z80:    Z80 Options.        (line   22)
26033* -f:                                    f.                  (line    6)
26034* -F command-line option, Alpha:         Alpha Options.      (line   57)
26035* -fno-pic option, RISC-V:               RISC-V-Options.     (line   12)
26036* -fp-d command-line option, Z80:        Z80 Options.        (line   41)
26037* -fp-s command-line option, Z80:        Z80 Options.        (line   37)
26038* -fpic option, RISC-V:                  RISC-V-Options.     (line    8)
26039* -full command-line option, Z80:        Z80 Options.        (line   48)
26040* -g command-line option, Alpha:         Alpha Options.      (line   47)
26041* -G command-line option, Alpha:         Alpha Options.      (line   53)
26042* -G option (MIPS):                      MIPS Options.       (line    8)
26043* -h option, VAX/VMS:                    VAX-Opts.           (line   45)
26044* -H option, VAX/VMS:                    VAX-Opts.           (line   81)
26045* -I PATH:                               I.                  (line    6)
26046* -ignore-parallel-conflicts option, M32RX: M32R-Opts.       (line   87)
26047* -Ip option, M32RX:                     M32R-Opts.          (line   97)
26048* -J, ignored on VAX:                    VAX-Opts.           (line   27)
26049* -K:                                    K.                  (line    6)
26050* -k command-line option, ARM:           ARM Options.        (line  366)
26051* -KPIC option, M32R:                    M32R-Opts.          (line   42)
26052* -KPIC option, MIPS:                    MIPS Options.       (line   21)
26053* -L:                                    L.                  (line    6)
26054* -l option, M680x0:                     M68K-Opts.          (line   34)
26055* -little option, M32R:                  M32R-Opts.          (line   27)
26056* -local-prefix command-line option, Z80: Z80 Options.       (line   25)
26057* -M:                                    M.                  (line    6)
26058* -m11/03:                               PDP-11-Options.     (line  140)
26059* -m11/04:                               PDP-11-Options.     (line  143)
26060* -m11/05:                               PDP-11-Options.     (line  146)
26061* -m11/10:                               PDP-11-Options.     (line  146)
26062* -m11/15:                               PDP-11-Options.     (line  149)
26063* -m11/20:                               PDP-11-Options.     (line  149)
26064* -m11/21:                               PDP-11-Options.     (line  152)
26065* -m11/23:                               PDP-11-Options.     (line  155)
26066* -m11/24:                               PDP-11-Options.     (line  155)
26067* -m11/34:                               PDP-11-Options.     (line  158)
26068* -m11/34a:                              PDP-11-Options.     (line  161)
26069* -m11/35:                               PDP-11-Options.     (line  164)
26070* -m11/40:                               PDP-11-Options.     (line  164)
26071* -m11/44:                               PDP-11-Options.     (line  167)
26072* -m11/45:                               PDP-11-Options.     (line  170)
26073* -m11/50:                               PDP-11-Options.     (line  170)
26074* -m11/53:                               PDP-11-Options.     (line  173)
26075* -m11/55:                               PDP-11-Options.     (line  170)
26076* -m11/60:                               PDP-11-Options.     (line  176)
26077* -m11/70:                               PDP-11-Options.     (line  170)
26078* -m11/73:                               PDP-11-Options.     (line  173)
26079* -m11/83:                               PDP-11-Options.     (line  173)
26080* -m11/84:                               PDP-11-Options.     (line  173)
26081* -m11/93:                               PDP-11-Options.     (line  173)
26082* -m11/94:                               PDP-11-Options.     (line  173)
26083* -m16c option, M16C:                    M32C-Opts.          (line   12)
26084* -m31 option, s390:                     s390 Options.       (line    8)
26085* -m32 option, TILE-Gx:                  TILE-Gx Options.    (line    8)
26086* -m32bit-doubles:                       RX-Opts.            (line    9)
26087* -m32c option, M32C:                    M32C-Opts.          (line    9)
26088* -m32r option, M32R:                    M32R-Opts.          (line   21)
26089* -m32rx option, M32R2:                  M32R-Opts.          (line   17)
26090* -m32rx option, M32RX:                  M32R-Opts.          (line    9)
26091* -m4byte-align command-line option, V850: V850 Options.     (line   90)
26092* -m64 option, s390:                     s390 Options.       (line    8)
26093* -m64 option, TILE-Gx:                  TILE-Gx Options.    (line    8)
26094* -m64bit-doubles:                       RX-Opts.            (line   15)
26095* -m68000 and related options:           M68K-Opts.          (line   99)
26096* -m68hc11:                              M68HC11-Opts.       (line    9)
26097* -m68hc12:                              M68HC11-Opts.       (line   14)
26098* -m68hcs12:                             M68HC11-Opts.       (line   21)
26099* -m8byte-align command-line option, V850: V850 Options.     (line   86)
26100* -mabi= command-line option, AArch64:   AArch64 Options.    (line   14)
26101* -mabi=ABI option, RISC-V:              RISC-V-Options.     (line   19)
26102* -madd-bnd-prefix option, i386:         i386-Options.       (line  154)
26103* -madd-bnd-prefix option, x86-64:       i386-Options.       (line  154)
26104* -malign-branch-boundary= option, i386: i386-Options.       (line  200)
26105* -malign-branch-boundary= option, x86-64: i386-Options.     (line  200)
26106* -malign-branch-prefix-size= option, i386: i386-Options.    (line  215)
26107* -malign-branch-prefix-size= option, x86-64: i386-Options.  (line  215)
26108* -malign-branch= option, i386:          i386-Options.       (line  207)
26109* -malign-branch= option, x86-64:        i386-Options.       (line  207)
26110* -mall:                                 PDP-11-Options.     (line   26)
26111* -mall-enabled command-line option, LM32: LM32 Options.     (line   30)
26112* -mall-extensions:                      PDP-11-Options.     (line   26)
26113* -mall-opcodes command-line option, AVR: AVR Options.       (line  111)
26114* -mamd64 option, x86-64:                i386-Options.       (line  245)
26115* -mapcs-26 command-line option, ARM:    ARM Options.        (line  318)
26116* -mapcs-32 command-line option, ARM:    ARM Options.        (line  318)
26117* -mapcs-float command-line option, ARM: ARM Options.        (line  332)
26118* -mapcs-reentrant command-line option, ARM: ARM Options.    (line  337)
26119* -march= command-line option, AArch64:  AArch64 Options.    (line   42)
26120* -march= command-line option, ARM:      ARM Options.        (line   84)
26121* -march= command-line option, M680x0:   M68K-Opts.          (line    8)
26122* -march= command-line option, TIC6X:    TIC6X Options.      (line    6)
26123* -march= option, i386:                  i386-Options.       (line   32)
26124* -march= option, s390:                  s390 Options.       (line   25)
26125* -march= option, x86-64:                i386-Options.       (line   32)
26126* -march=ISA option, RISC-V:             RISC-V-Options.     (line   15)
26127* -matpcs command-line option, ARM:      ARM Options.        (line  324)
26128* -mavxscalar= option, i386:             i386-Options.       (line   99)
26129* -mavxscalar= option, x86-64:           i386-Options.       (line   99)
26130* -mbarrel-shift-enabled command-line option, LM32: LM32 Options.
26131                                                             (line   12)
26132* -mbig-endian:                          RX-Opts.            (line   20)
26133* -mbig-obj option, x86-64:              i386-Options.       (line  168)
26134* -mbranches-within-32B-boundaries option, i386: i386-Options.
26135                                                             (line  220)
26136* -mbranches-within-32B-boundaries option, x86-64: i386-Options.
26137                                                             (line  220)
26138* -mbreak-enabled command-line option, LM32: LM32 Options.   (line   27)
26139* -mccs command-line option, ARM:        ARM Options.        (line  379)
26140* -mcis:                                 PDP-11-Options.     (line   32)
26141* -mcode-density command-line option, ARC: ARC Options.      (line   93)
26142* -mconstant-gp command-line option, IA-64: IA-64 Options.   (line    6)
26143* -mCPU command-line option, Alpha:      Alpha Options.      (line    6)
26144* -mcpu option, cpu:                     TIC54X-Opts.        (line   15)
26145* -mcpu=:                                RX-Opts.            (line   75)
26146* -mcpu= command-line option, AArch64:   AArch64 Options.    (line   19)
26147* -mcpu= command-line option, ARM:       ARM Options.        (line    6)
26148* -mcpu= command-line option, Blackfin:  Blackfin Options.   (line    6)
26149* -mcpu= command-line option, M680x0:    M68K-Opts.          (line   14)
26150* -mcpu=CPU command-line option, ARC:    ARC Options.        (line   10)
26151* -mcsm:                                 PDP-11-Options.     (line   43)
26152* -mdcache-enabled command-line option, LM32: LM32 Options.  (line   24)
26153* -mdebug command-line option, Alpha:    Alpha Options.      (line   25)
26154* -mdivide-enabled command-line option, LM32: LM32 Options.  (line    9)
26155* -mdollar-hex option, dollar-hex:       S12Z Options.       (line   17)
26156* -mdpfp command-line option, ARC:       ARC Options.        (line  108)
26157* -mdsbt command-line option, TIC6X:     TIC6X Options.      (line   13)
26158* -me option, stderr redirect:           TIC54X-Opts.        (line   20)
26159* -meis:                                 PDP-11-Options.     (line   46)
26160* -mepiphany command-line option, Epiphany: Epiphany Options.
26161                                                             (line    9)
26162* -mepiphany16 command-line option, Epiphany: Epiphany Options.
26163                                                             (line   13)
26164* -merrors-to-file option, stderr redirect: TIC54X-Opts.     (line   20)
26165* -mesa option, s390:                    s390 Options.       (line   17)
26166* -mevexlig= option, i386:               i386-Options.       (line  120)
26167* -mevexlig= option, x86-64:             i386-Options.       (line  120)
26168* -mevexrcig= option, i386:              i386-Options.       (line  235)
26169* -mevexrcig= option, x86-64:            i386-Options.       (line  235)
26170* -mevexwig= option, i386:               i386-Options.       (line  130)
26171* -mevexwig= option, x86-64:             i386-Options.       (line  130)
26172* -mf option, far-mode:                  TIC54X-Opts.        (line    8)
26173* -mf11:                                 PDP-11-Options.     (line  122)
26174* -mfar-mode option, far-mode:           TIC54X-Opts.        (line    8)
26175* -mfdpic command-line option, Blackfin: Blackfin Options.   (line   19)
26176* -mfence-as-lock-add= option, i386:     i386-Options.       (line  181)
26177* -mfence-as-lock-add= option, x86-64:   i386-Options.       (line  181)
26178* -mfis:                                 PDP-11-Options.     (line   51)
26179* -mfloat-abi= command-line option, ARM: ARM Options.        (line  341)
26180* -mfp-11:                               PDP-11-Options.     (line   56)
26181* -mfp16-format= command-line option:    ARM Options.        (line  279)
26182* -mfpp:                                 PDP-11-Options.     (line   56)
26183* -mfpu:                                 PDP-11-Options.     (line   56)
26184* -mfpu= command-line option, ARM:       ARM Options.        (line  255)
26185* -mfpuda command-line option, ARC:      ARC Options.        (line  111)
26186* -mgcc-abi:                             RX-Opts.            (line   63)
26187* -mgcc-abi command-line option, V850:   V850 Options.       (line   79)
26188* -mgcc-isr command-line option, AVR:    AVR Options.        (line  132)
26189* -mhard-float command-line option, V850: V850 Options.      (line  101)
26190* -micache-enabled command-line option, LM32: LM32 Options.  (line   21)
26191* -mimplicit-it command-line option, ARM: ARM Options.       (line  302)
26192* -mint-register:                        RX-Opts.            (line   57)
26193* -mintel64 option, x86-64:              i386-Options.       (line  245)
26194* -mip2022 option, IP2K:                 IP2K-Opts.          (line   14)
26195* -mip2022ext option, IP2022:            IP2K-Opts.          (line    9)
26196* -mj11:                                 PDP-11-Options.     (line  126)
26197* -mka11:                                PDP-11-Options.     (line   92)
26198* -mkb11:                                PDP-11-Options.     (line   95)
26199* -mkd11a:                               PDP-11-Options.     (line   98)
26200* -mkd11b:                               PDP-11-Options.     (line  101)
26201* -mkd11d:                               PDP-11-Options.     (line  104)
26202* -mkd11e:                               PDP-11-Options.     (line  107)
26203* -mkd11f:                               PDP-11-Options.     (line  110)
26204* -mkd11h:                               PDP-11-Options.     (line  110)
26205* -mkd11k:                               PDP-11-Options.     (line  114)
26206* -mkd11q:                               PDP-11-Options.     (line  110)
26207* -mkd11z:                               PDP-11-Options.     (line  118)
26208* -mkev11:                               PDP-11-Options.     (line   51)
26209* -mkev11 <1>:                           PDP-11-Options.     (line   51)
26210* -mlimited-eis:                         PDP-11-Options.     (line   64)
26211* -mlink-relax command-line option, AVR: AVR Options.        (line  123)
26212* -mlittle-endian:                       RX-Opts.            (line   26)
26213* -mlong:                                M68HC11-Opts.       (line   45)
26214* -mlong <1>:                            XGATE-Opts.         (line   13)
26215* -mlong-double:                         M68HC11-Opts.       (line   53)
26216* -mlong-double <1>:                     XGATE-Opts.         (line   21)
26217* -mm9s12x:                              M68HC11-Opts.       (line   27)
26218* -mm9s12xg:                             M68HC11-Opts.       (line   32)
26219* -mmcu= command-line option, AVR:       AVR Options.        (line    6)
26220* -mmfpt:                                PDP-11-Options.     (line   70)
26221* -mmicrocode:                           PDP-11-Options.     (line   83)
26222* -mmnemonic= option, i386:              i386-Options.       (line  137)
26223* -mmnemonic= option, x86-64:            i386-Options.       (line  137)
26224* -mmultiply-enabled command-line option, LM32: LM32 Options.
26225                                                             (line    6)
26226* -mmutiproc:                            PDP-11-Options.     (line   73)
26227* -mmxps:                                PDP-11-Options.     (line   77)
26228* -mnaked-reg option, i386:              i386-Options.       (line  149)
26229* -mnaked-reg option, x86-64:            i386-Options.       (line  149)
26230* -mnan= command-line option, MIPS:      MIPS Options.       (line  439)
26231* -mno-allow-string-insns:               RX-Opts.            (line   82)
26232* -mno-cis:                              PDP-11-Options.     (line   32)
26233* -mno-csm:                              PDP-11-Options.     (line   43)
26234* -mno-dsbt command-line option, TIC6X:  TIC6X Options.      (line   13)
26235* -mno-eis:                              PDP-11-Options.     (line   46)
26236* -mno-extensions:                       PDP-11-Options.     (line   29)
26237* -mno-fdpic command-line option, Blackfin: Blackfin Options.
26238                                                             (line   22)
26239* -mno-fis:                              PDP-11-Options.     (line   51)
26240* -mno-fp-11:                            PDP-11-Options.     (line   56)
26241* -mno-fpp:                              PDP-11-Options.     (line   56)
26242* -mno-fpu:                              PDP-11-Options.     (line   56)
26243* -mno-kev11:                            PDP-11-Options.     (line   51)
26244* -mno-limited-eis:                      PDP-11-Options.     (line   64)
26245* -mno-link-relax command-line option, AVR: AVR Options.     (line  127)
26246* -mno-mfpt:                             PDP-11-Options.     (line   70)
26247* -mno-microcode:                        PDP-11-Options.     (line   83)
26248* -mno-mutiproc:                         PDP-11-Options.     (line   73)
26249* -mno-mxps:                             PDP-11-Options.     (line   77)
26250* -mno-pic:                              PDP-11-Options.     (line   11)
26251* -mno-pic command-line option, TIC6X:   TIC6X Options.      (line   36)
26252* -mno-regnames option, s390:            s390 Options.       (line   50)
26253* -mno-relax option, RISC-V:             RISC-V-Options.     (line   31)
26254* -mno-skip-bug command-line option, AVR: AVR Options.       (line  114)
26255* -mno-spl:                              PDP-11-Options.     (line   80)
26256* -mno-sym32:                            MIPS Options.       (line  348)
26257* -mno-verbose-error command-line option, AArch64: AArch64 Options.
26258                                                             (line   63)
26259* -mno-wrap command-line option, AVR:    AVR Options.        (line  117)
26260* -mnopic command-line option, Blackfin: Blackfin Options.   (line   22)
26261* -mnps400 command-line option, ARC:     ARC Options.        (line  102)
26262* -momit-lock-prefix= option, i386:      i386-Options.       (line  172)
26263* -momit-lock-prefix= option, x86-64:    i386-Options.       (line  172)
26264* -mpic:                                 PDP-11-Options.     (line   11)
26265* -mpic command-line option, TIC6X:      TIC6X Options.      (line   36)
26266* -mpid:                                 RX-Opts.            (line   50)
26267* -mpid= command-line option, TIC6X:     TIC6X Options.      (line   23)
26268* -mreg-prefix=PREFIX option, reg-prefix: S12Z Options.      (line    9)
26269* -mregnames option, s390:               s390 Options.       (line   47)
26270* -mrelax command-line option, ARC:      ARC Options.        (line   97)
26271* -mrelax command-line option, V850:     V850 Options.       (line   72)
26272* -mrelax option, RISC-V:                RISC-V-Options.     (line   27)
26273* -mrelax-relocations= option, i386:     i386-Options.       (line  190)
26274* -mrelax-relocations= option, x86-64:   i386-Options.       (line  190)
26275* -mrh850-abi command-line option, V850: V850 Options.       (line   82)
26276* -mrmw command-line option, AVR:        AVR Options.        (line  120)
26277* -mrx-abi:                              RX-Opts.            (line   69)
26278* -mshared option, i386:                 i386-Options.       (line  159)
26279* -mshared option, x86-64:               i386-Options.       (line  159)
26280* -mshort:                               M68HC11-Opts.       (line   40)
26281* -mshort <1>:                           XGATE-Opts.         (line    8)
26282* -mshort-double:                        M68HC11-Opts.       (line   49)
26283* -mshort-double <1>:                    XGATE-Opts.         (line   17)
26284* -msign-extend-enabled command-line option, LM32: LM32 Options.
26285                                                             (line   15)
26286* -msmall-data-limit:                    RX-Opts.            (line   42)
26287* -msoft-float command-line option, V850: V850 Options.      (line   95)
26288* -mspfp command-line option, ARC:       ARC Options.        (line  105)
26289* -mspl:                                 PDP-11-Options.     (line   80)
26290* -msse-check= option, i386:             i386-Options.       (line   89)
26291* -msse-check= option, x86-64:           i386-Options.       (line   89)
26292* -msse2avx option, i386:                i386-Options.       (line   85)
26293* -msse2avx option, x86-64:              i386-Options.       (line   85)
26294* -msym32:                               MIPS Options.       (line  348)
26295* -msyntax= option, i386:                i386-Options.       (line  143)
26296* -msyntax= option, x86-64:              i386-Options.       (line  143)
26297* -mt11:                                 PDP-11-Options.     (line  130)
26298* -mthumb command-line option, ARM:      ARM Options.        (line  292)
26299* -mthumb-interwork command-line option, ARM: ARM Options.   (line  297)
26300* -mtune= option, i386:                  i386-Options.       (line   77)
26301* -mtune= option, x86-64:                i386-Options.       (line   77)
26302* -mtune=ARCH command-line option, Visium: Visium Options.   (line    8)
26303* -muse-conventional-section-names:      RX-Opts.            (line   33)
26304* -muse-renesas-section-names:           RX-Opts.            (line   37)
26305* -muser-enabled command-line option, LM32: LM32 Options.    (line   18)
26306* -mv850 command-line option, V850:      V850 Options.       (line   23)
26307* -mv850any command-line option, V850:   V850 Options.       (line   41)
26308* -mv850e command-line option, V850:     V850 Options.       (line   29)
26309* -mv850e1 command-line option, V850:    V850 Options.       (line   35)
26310* -mv850e2 command-line option, V850:    V850 Options.       (line   51)
26311* -mv850e2v3 command-line option, V850:  V850 Options.       (line   57)
26312* -mv850e2v4 command-line option, V850:  V850 Options.       (line   63)
26313* -mv850e3v5 command-line option, V850:  V850 Options.       (line   66)
26314* -mverbose-error command-line option, AArch64: AArch64 Options.
26315                                                             (line   59)
26316* -mvexwig= option, i386:                i386-Options.       (line  110)
26317* -mvexwig= option, x86-64:              i386-Options.       (line  110)
26318* -mvxworks-pic option, MIPS:            MIPS Options.       (line   26)
26319* -mwarn-areg-zero option, s390:         s390 Options.       (line   53)
26320* -mwarn-deprecated command-line option, ARM: ARM Options.   (line  374)
26321* -mwarn-syms command-line option, ARM:  ARM Options.        (line  382)
26322* -mx86-used-note= option, i386:         i386-Options.       (line  228)
26323* -mx86-used-note= option, x86-64:       i386-Options.       (line  228)
26324* -mzarch option, s390:                  s390 Options.       (line   17)
26325* -m[no-]68851 command-line option, M680x0: M68K-Opts.       (line   21)
26326* -m[no-]68881 command-line option, M680x0: M68K-Opts.       (line   21)
26327* -m[no-]div command-line option, M680x0: M68K-Opts.         (line   21)
26328* -m[no-]emac command-line option, M680x0: M68K-Opts.        (line   21)
26329* -m[no-]float command-line option, M680x0: M68K-Opts.       (line   21)
26330* -m[no-]mac command-line option, M680x0: M68K-Opts.         (line   21)
26331* -m[no-]usp command-line option, M680x0: M68K-Opts.         (line   21)
26332* -N command-line option, CRIS:          CRIS-Opts.          (line   59)
26333* -nIp option, M32RX:                    M32R-Opts.          (line  101)
26334* -no-bitinst, M32R2:                    M32R-Opts.          (line   54)
26335* -no-ignore-parallel-conflicts option, M32RX: M32R-Opts.    (line   93)
26336* -no-mdebug command-line option, Alpha: Alpha Options.      (line   25)
26337* -no-parallel option, M32RX:            M32R-Opts.          (line   51)
26338* -no-warn-explicit-parallel-conflicts option, M32RX: M32R-Opts.
26339                                                             (line   79)
26340* -no-warn-unmatched-high option, M32R:  M32R-Opts.          (line  111)
26341* -nocpp ignored (MIPS):                 MIPS Options.       (line  351)
26342* -noreplace command-line option, Alpha: Alpha Options.      (line   40)
26343* -o:                                    o.                  (line    6)
26344* -O option, i386:                       i386-Options.       (line  250)
26345* -O option, M32RX:                      M32R-Opts.          (line   59)
26346* -O option, x86-64:                     i386-Options.       (line  250)
26347* -O0 option, i386:                      i386-Options.       (line  250)
26348* -O0 option, x86-64:                    i386-Options.       (line  250)
26349* -O1 option, i386:                      i386-Options.       (line  250)
26350* -O1 option, x86-64:                    i386-Options.       (line  250)
26351* -O2 option, i386:                      i386-Options.       (line  250)
26352* -O2 option, x86-64:                    i386-Options.       (line  250)
26353* -Os option, i386:                      i386-Options.       (line  250)
26354* -Os option, x86-64:                    i386-Options.       (line  250)
26355* -parallel option, M32RX:               M32R-Opts.          (line   46)
26356* -R:                                    R.                  (line    6)
26357* -r800 command-line option, Z80:        Z80 Options.        (line   13)
26358* -relax command-line option, Alpha:     Alpha Options.      (line   32)
26359* -replace command-line option, Alpha:   Alpha Options.      (line   40)
26360* -S, ignored on VAX:                    VAX-Opts.           (line   11)
26361* -sdcc command-line option, Z80:        Z80 Options.        (line   34)
26362* -strict command-line option, Z80:      Z80 Options.        (line   45)
26363* -T, ignored on VAX:                    VAX-Opts.           (line   11)
26364* -t, ignored on VAX:                    VAX-Opts.           (line   36)
26365* -v:                                    v.                  (line    6)
26366* -V, redundant on VAX:                  VAX-Opts.           (line   22)
26367* -version:                              v.                  (line    6)
26368* -W:                                    W.                  (line   11)
26369* -warn-explicit-parallel-conflicts option, M32RX: M32R-Opts.
26370                                                             (line   65)
26371* -warn-unmatched-high option, M32R:     M32R-Opts.          (line  105)
26372* -Wnp option, M32RX:                    M32R-Opts.          (line   83)
26373* -Wnuh option, M32RX:                   M32R-Opts.          (line  117)
26374* -Wp option, M32RX:                     M32R-Opts.          (line   75)
26375* -wsigned_overflow command-line option, V850: V850 Options. (line    9)
26376* -Wuh option, M32RX:                    M32R-Opts.          (line  114)
26377* -wunsigned_overflow command-line option, V850: V850 Options.
26378                                                             (line   16)
26379* -x command-line option, MMIX:          MMIX-Opts.          (line   44)
26380* -z180 command-line option, Z80:        Z80 Options.        (line   16)
26381* -z80 command-line option, Z80:         Z80 Options.        (line    6)
26382* -z8001 command-line option, Z8000:     Z8000 Options.      (line    6)
26383* -z8002 command-line option, Z8000:     Z8000 Options.      (line    9)
26384* . (symbol):                            Dot.                (line    6)
26385* .align directive, ARM:                 ARM Directives.     (line    6)
26386* .align directive, TILE-Gx:             TILE-Gx Directives. (line    6)
26387* .align directive, TILEPro:             TILEPro Directives. (line    6)
26388* .allow_suspicious_bundles directive, TILE-Gx: TILE-Gx Directives.
26389                                                             (line   10)
26390* .allow_suspicious_bundles directive, TILEPro: TILEPro Directives.
26391                                                             (line   10)
26392* .arch directive, AArch64:              AArch64 Directives. (line    6)
26393* .arch directive, ARM:                  ARM Directives.     (line   13)
26394* .arch directive, TIC6X:                TIC6X Directives.   (line   10)
26395* .arch_extension directive, AArch64:    AArch64 Directives. (line   13)
26396* .arch_extension directive, ARM:        ARM Directives.     (line   21)
26397* .arc_attribute directive, ARC:         ARC Directives.     (line  240)
26398* .arm directive, ARM:                   ARM Directives.     (line   30)
26399* .attribute directive, RISC-V:          RISC-V-Directives.  (line   96)
26400* .big directive, M32RX:                 M32R-Directives.    (line   88)
26401* .bss directive, AArch64:               AArch64 Directives. (line   21)
26402* .bss directive, ARM:                   ARM Directives.     (line   33)
26403* .c6xabi_attribute directive, TIC6X:    TIC6X Directives.   (line   20)
26404* .cantunwind directive, ARM:            ARM Directives.     (line   36)
26405* .cantunwind directive, TIC6X:          TIC6X Directives.   (line   13)
26406* .cfi_b_key_frame directive, AArch64:   AArch64 Directives. (line   99)
26407* .code directive, ARM:                  ARM Directives.     (line   40)
26408* .cpu directive, AArch64:               AArch64 Directives. (line   24)
26409* .cpu directive, ARM:                   ARM Directives.     (line   44)
26410* .dn and .qn directives, ARM:           ARM Directives.     (line   52)
26411* .dword directive, AArch64:             AArch64 Directives. (line   28)
26412* .eabi_attribute directive, ARM:        ARM Directives.     (line   76)
26413* .ehtype directive, TIC6X:              TIC6X Directives.   (line   31)
26414* .endp directive, TIC6X:                TIC6X Directives.   (line   34)
26415* .even directive, AArch64:              AArch64 Directives. (line   31)
26416* .even directive, ARM:                  ARM Directives.     (line  105)
26417* .extend directive, ARM:                ARM Directives.     (line  108)
26418* .float16 directive, AArch64:           AArch64 Directives. (line   35)
26419* .float16 directive, ARM:               ARM Directives.     (line  114)
26420* .float16_format directive, ARM:        ARM Directives.     (line  122)
26421* .fnend directive, ARM:                 ARM Directives.     (line  129)
26422* .fnstart directive, ARM:               ARM Directives.     (line  137)
26423* .force_thumb directive, ARM:           ARM Directives.     (line  140)
26424* .fpu directive, ARM:                   ARM Directives.     (line  144)
26425* .global:                               MIPS insn.          (line   12)
26426* .gnu_attribute 4, N directive, MIPS:   MIPS FP ABI History.
26427                                                             (line    6)
26428* .gnu_attribute Tag_GNU_MIPS_ABI_FP, N directive, MIPS: MIPS FP ABI History.
26429                                                             (line    6)
26430* .handlerdata directive, ARM:           ARM Directives.     (line  148)
26431* .handlerdata directive, TIC6X:         TIC6X Directives.   (line   39)
26432* .insn:                                 MIPS insn.          (line    6)
26433* .insn directive, s390:                 s390 Directives.    (line   11)
26434* .inst directive, AArch64:              AArch64 Directives. (line   41)
26435* .inst directive, ARM:                  ARM Directives.     (line  157)
26436* .ldouble directive, ARM:               ARM Directives.     (line  108)
26437* .little directive, M32RX:              M32R-Directives.    (line   82)
26438* .long directive, s390:                 s390 Directives.    (line   16)
26439* .ltorg directive, AArch64:             AArch64 Directives. (line   45)
26440* .ltorg directive, ARM:                 ARM Directives.     (line  167)
26441* .ltorg directive, s390:                s390 Directives.    (line   79)
26442* .m32r directive, M32R:                 M32R-Directives.    (line   66)
26443* .m32r2 directive, M32R2:               M32R-Directives.    (line   77)
26444* .m32rx directive, M32RX:               M32R-Directives.    (line   72)
26445* .machine directive, s390:              s390 Directives.    (line   84)
26446* .machinemode directive, s390:          s390 Directives.    (line  101)
26447* .module:                               MIPS assembly options.
26448                                                             (line    6)
26449* .module fp=NN directive, MIPS:         MIPS FP ABI Selection.
26450                                                             (line    6)
26451* .movsp directive, ARM:                 ARM Directives.     (line  181)
26452* .nan directive, MIPS:                  MIPS NaN Encodings. (line    6)
26453* .nocmp directive, TIC6X:               TIC6X Directives.   (line   47)
26454* .no_pointers directive, XStormy16:     XStormy16 Directives.
26455                                                             (line   14)
26456* .o:                                    Object.             (line    6)
26457* .object_arch directive, ARM:           ARM Directives.     (line  186)
26458* .packed directive, ARM:                ARM Directives.     (line  192)
26459* .pad directive, ARM:                   ARM Directives.     (line  197)
26460* .param on HPPA:                        HPPA Directives.    (line   19)
26461* .personality directive, ARM:           ARM Directives.     (line  202)
26462* .personality directive, TIC6X:         TIC6X Directives.   (line   55)
26463* .personalityindex directive, ARM:      ARM Directives.     (line  205)
26464* .personalityindex directive, TIC6X:    TIC6X Directives.   (line   51)
26465* .pool directive, AArch64:              AArch64 Directives. (line   59)
26466* .pool directive, ARM:                  ARM Directives.     (line  209)
26467* .quad directive, s390:                 s390 Directives.    (line   16)
26468* .req directive, AArch64:               AArch64 Directives. (line   62)
26469* .req directive, ARM:                   ARM Directives.     (line  212)
26470* .require_canonical_reg_names directive, TILE-Gx: TILE-Gx Directives.
26471                                                             (line   19)
26472* .require_canonical_reg_names directive, TILEPro: TILEPro Directives.
26473                                                             (line   19)
26474* .save directive, ARM:                  ARM Directives.     (line  217)
26475* .scomm directive, TIC6X:               TIC6X Directives.   (line   58)
26476* .secrel32 directive, ARM:              ARM Directives.     (line  255)
26477* .set arch=CPU:                         MIPS ISA.           (line   18)
26478* .set at:                               MIPS Macros.        (line   41)
26479* .set at=REG:                           MIPS Macros.        (line   35)
26480* .set autoextend:                       MIPS autoextend.    (line    6)
26481* .set crc:                              MIPS ASE Instruction Generation Overrides.
26482                                                             (line   68)
26483* .set doublefloat:                      MIPS Floating-Point.
26484                                                             (line   12)
26485* .set dsp:                              MIPS ASE Instruction Generation Overrides.
26486                                                             (line   21)
26487* .set dspr2:                            MIPS ASE Instruction Generation Overrides.
26488                                                             (line   26)
26489* .set dspr3:                            MIPS ASE Instruction Generation Overrides.
26490                                                             (line   31)
26491* .set ginv:                             MIPS ASE Instruction Generation Overrides.
26492                                                             (line   72)
26493* .set hardfloat:                        MIPS Floating-Point.
26494                                                             (line    6)
26495* .set insn32:                           MIPS assembly options.
26496                                                             (line   18)
26497* .set loongson-cam:                     MIPS ASE Instruction Generation Overrides.
26498                                                             (line   81)
26499* .set loongson-ext:                     MIPS ASE Instruction Generation Overrides.
26500                                                             (line   86)
26501* .set loongson-ext2:                    MIPS ASE Instruction Generation Overrides.
26502                                                             (line   91)
26503* .set loongson-mmi:                     MIPS ASE Instruction Generation Overrides.
26504                                                             (line   76)
26505* .set macro:                            MIPS Macros.        (line   30)
26506* .set mcu:                              MIPS ASE Instruction Generation Overrides.
26507                                                             (line   42)
26508* .set mdmx:                             MIPS ASE Instruction Generation Overrides.
26509                                                             (line   16)
26510* .set mips16e2:                         MIPS ASE Instruction Generation Overrides.
26511                                                             (line   61)
26512* .set mips3d:                           MIPS ASE Instruction Generation Overrides.
26513                                                             (line    6)
26514* .set mipsN:                            MIPS ISA.           (line    6)
26515* .set msa:                              MIPS ASE Instruction Generation Overrides.
26516                                                             (line   47)
26517* .set mt:                               MIPS ASE Instruction Generation Overrides.
26518                                                             (line   37)
26519* .set noat:                             MIPS Macros.        (line   41)
26520* .set noautoextend:                     MIPS autoextend.    (line    6)
26521* .set nocrc:                            MIPS ASE Instruction Generation Overrides.
26522                                                             (line   68)
26523* .set nodsp:                            MIPS ASE Instruction Generation Overrides.
26524                                                             (line   21)
26525* .set nodspr2:                          MIPS ASE Instruction Generation Overrides.
26526                                                             (line   26)
26527* .set nodspr3:                          MIPS ASE Instruction Generation Overrides.
26528                                                             (line   31)
26529* .set noginv:                           MIPS ASE Instruction Generation Overrides.
26530                                                             (line   72)
26531* .set noinsn32:                         MIPS assembly options.
26532                                                             (line   18)
26533* .set noloongson-cam:                   MIPS ASE Instruction Generation Overrides.
26534                                                             (line   81)
26535* .set noloongson-ext:                   MIPS ASE Instruction Generation Overrides.
26536                                                             (line   86)
26537* .set noloongson-ext2:                  MIPS ASE Instruction Generation Overrides.
26538                                                             (line   91)
26539* .set noloongson-mmi:                   MIPS ASE Instruction Generation Overrides.
26540                                                             (line   76)
26541* .set nomacro:                          MIPS Macros.        (line   30)
26542* .set nomcu:                            MIPS ASE Instruction Generation Overrides.
26543                                                             (line   42)
26544* .set nomdmx:                           MIPS ASE Instruction Generation Overrides.
26545                                                             (line   16)
26546* .set nomips16e2:                       MIPS ASE Instruction Generation Overrides.
26547                                                             (line   61)
26548* .set nomips3d:                         MIPS ASE Instruction Generation Overrides.
26549                                                             (line    6)
26550* .set nomsa:                            MIPS ASE Instruction Generation Overrides.
26551                                                             (line   47)
26552* .set nomt:                             MIPS ASE Instruction Generation Overrides.
26553                                                             (line   37)
26554* .set nosmartmips:                      MIPS ASE Instruction Generation Overrides.
26555                                                             (line   11)
26556* .set nosym32:                          MIPS Symbol Sizes.  (line    6)
26557* .set novirt:                           MIPS ASE Instruction Generation Overrides.
26558                                                             (line   52)
26559* .set noxpa:                            MIPS ASE Instruction Generation Overrides.
26560                                                             (line   57)
26561* .set pop:                              MIPS Option Stack.  (line    6)
26562* .set push:                             MIPS Option Stack.  (line    6)
26563* .set singlefloat:                      MIPS Floating-Point.
26564                                                             (line   12)
26565* .set smartmips:                        MIPS ASE Instruction Generation Overrides.
26566                                                             (line   11)
26567* .set softfloat:                        MIPS Floating-Point.
26568                                                             (line    6)
26569* .set sym32:                            MIPS Symbol Sizes.  (line    6)
26570* .set virt:                             MIPS ASE Instruction Generation Overrides.
26571                                                             (line   52)
26572* .set xpa:                              MIPS ASE Instruction Generation Overrides.
26573                                                             (line   57)
26574* .setfp directive, ARM:                 ARM Directives.     (line  241)
26575* .short directive, s390:                s390 Directives.    (line   16)
26576* .syntax directive, ARM:                ARM Directives.     (line  260)
26577* .thumb directive, ARM:                 ARM Directives.     (line  264)
26578* .thumb_func directive, ARM:            ARM Directives.     (line  267)
26579* .thumb_set directive, ARM:             ARM Directives.     (line  278)
26580* .tlsdescadd directive, AArch64:        AArch64 Directives. (line   70)
26581* .tlsdesccall directive, AArch64:       AArch64 Directives. (line   73)
26582* .tlsdescldr directive, AArch64:        AArch64 Directives. (line   76)
26583* .tlsdescseq directive, ARM:            ARM Directives.     (line  285)
26584* .unreq directive, AArch64:             AArch64 Directives. (line   79)
26585* .unreq directive, ARM:                 ARM Directives.     (line  290)
26586* .unwind_raw directive, ARM:            ARM Directives.     (line  301)
26587* .v850 directive, V850:                 V850 Directives.    (line   14)
26588* .v850e directive, V850:                V850 Directives.    (line   20)
26589* .v850e1 directive, V850:               V850 Directives.    (line   26)
26590* .v850e2 directive, V850:               V850 Directives.    (line   32)
26591* .v850e2v3 directive, V850:             V850 Directives.    (line   38)
26592* .v850e2v4 directive, V850:             V850 Directives.    (line   44)
26593* .v850e3v5 directive, V850:             V850 Directives.    (line   50)
26594* .variant_pcs directive, AArch64:       AArch64 Directives. (line   90)
26595* .vsave directive, ARM:                 ARM Directives.     (line  308)
26596* .xword directive, AArch64:             AArch64 Directives. (line   95)
26597* .z8001:                                Z8000 Directives.   (line   11)
26598* .z8002:                                Z8000 Directives.   (line   15)
26599* 16-bit code, i386:                     i386-16bit.         (line    6)
26600* 16bit_pointers directive, XStormy16:   XStormy16 Directives.
26601                                                             (line    6)
26602* 16byte directive, Nios II:             Nios II Directives. (line   28)
26603* 16byte directive, PRU:                 PRU Directives.     (line   25)
26604* 2byte directive:                       2byte.              (line    6)
26605* 2byte directive, Nios II:              Nios II Directives. (line   19)
26606* 2byte directive, PRU:                  PRU Directives.     (line   16)
26607* 32bit_pointers directive, XStormy16:   XStormy16 Directives.
26608                                                             (line   10)
26609* 3DNow!, i386:                          i386-SIMD.          (line    6)
26610* 3DNow!, x86-64:                        i386-SIMD.          (line    6)
26611* 430 support:                           MSP430-Dependent.   (line    6)
26612* 4byte directive:                       4byte.              (line    6)
26613* 4byte directive, Nios II:              Nios II Directives. (line   22)
26614* 4byte directive, PRU:                  PRU Directives.     (line   19)
26615* 8byte directive:                       8byte.              (line    6)
26616* 8byte directive, Nios II:              Nios II Directives. (line   25)
26617* 8byte directive, PRU:                  PRU Directives.     (line   22)
26618* : (label):                             Statements.         (line   31)
26619* @gotoff(SYMBOL), ARC modifier:         ARC Modifiers.      (line   20)
26620* @gotpc(SYMBOL), ARC modifier:          ARC Modifiers.      (line   16)
26621* @hi pseudo-op, XStormy16:              XStormy16 Opcodes.  (line   21)
26622* @lo pseudo-op, XStormy16:              XStormy16 Opcodes.  (line   10)
26623* @pcl(SYMBOL), ARC modifier:            ARC Modifiers.      (line   12)
26624* @plt(SYMBOL), ARC modifier:            ARC Modifiers.      (line   23)
26625* @sda(SYMBOL), ARC modifier:            ARC Modifiers.      (line   28)
26626* @word modifier, D10V:                  D10V-Word.          (line    6)
26627* _ opcode prefix:                       Xtensa Opcodes.     (line    9)
26628* __DYNAMIC__, ARC pre-defined symbol:   ARC Symbols.        (line   14)
26629* __GLOBAL_OFFSET_TABLE__, ARC pre-defined symbol: ARC Symbols.
26630                                                             (line   11)
26631* a.out:                                 Object.             (line    6)
26632* a.out symbol attributes:               a.out Symbols.      (line    6)
26633* AArch64 floating point (IEEE):         AArch64 Floating Point.
26634                                                             (line    6)
26635* AArch64 immediate character:           AArch64-Chars.      (line   13)
26636* AArch64 line comment character:        AArch64-Chars.      (line    6)
26637* AArch64 line separator:                AArch64-Chars.      (line   10)
26638* AArch64 machine directives:            AArch64 Directives. (line    6)
26639* AArch64 opcodes:                       AArch64 Opcodes.    (line    6)
26640* AArch64 options (none):                AArch64 Options.    (line    6)
26641* AArch64 register names:                AArch64-Regs.       (line    6)
26642* AArch64 relocations:                   AArch64-Relocations.
26643                                                             (line    6)
26644* AArch64 support:                       AArch64-Dependent.  (line    6)
26645* abort directive:                       Abort.              (line    6)
26646* ABORT directive:                       ABORT (COFF).       (line    6)
26647* absolute section:                      Ld Sections.        (line   29)
26648* absolute-literals directive:           Absolute Literals Directive.
26649                                                             (line    6)
26650* ADDI instructions, relaxation:         Xtensa Immediate Relaxation.
26651                                                             (line   43)
26652* addition, permitted arguments:         Infix Ops.          (line   45)
26653* addresses:                             Expressions.        (line    6)
26654* addresses, format of:                  Secs Background.    (line   65)
26655* addressing modes, D10V:                D10V-Addressing.    (line    6)
26656* addressing modes, D30V:                D30V-Addressing.    (line    6)
26657* addressing modes, H8/300:              H8/300-Addressing.  (line    6)
26658* addressing modes, M680x0:              M68K-Syntax.        (line   21)
26659* addressing modes, M68HC11:             M68HC11-Syntax.     (line   29)
26660* addressing modes, S12Z:                S12Z Addressing Modes.
26661                                                             (line    6)
26662* addressing modes, SH:                  SH-Addressing.      (line    6)
26663* addressing modes, XGATE:               XGATE-Syntax.       (line   28)
26664* addressing modes, Z8000:               Z8000-Addressing.   (line    6)
26665* ADR reg,<label> pseudo op, ARM:        ARM Opcodes.        (line   25)
26666* ADRL reg,<label> pseudo op, ARM:       ARM Opcodes.        (line   43)
26667* ADRP, ADD, LDR/STR group relocations, AArch64: AArch64-Relocations.
26668                                                             (line   14)
26669* advancing location counter:            Org.                (line    6)
26670* align directive:                       Align.              (line    6)
26671* align directive <1>:                   RISC-V-Directives.  (line    8)
26672* align directive, Nios II:              Nios II Directives. (line    6)
26673* align directive, OpenRISC:             OpenRISC-Directives.
26674                                                             (line    9)
26675* align directive, PRU:                  PRU Directives.     (line    6)
26676* align directive, SPARC:                Sparc-Directives.   (line    9)
26677* align directive, TIC54X:               TIC54X-Directives.  (line    6)
26678* aligned instruction bundle:            Bundle directives.  (line    9)
26679* alignment for NEON instructions:       ARM-Neon-Alignment. (line    6)
26680* alignment of branch targets:           Xtensa Automatic Alignment.
26681                                                             (line    6)
26682* alignment of LOOP instructions:        Xtensa Automatic Alignment.
26683                                                             (line    6)
26684* Alpha floating point (IEEE):           Alpha Floating Point.
26685                                                             (line    6)
26686* Alpha line comment character:          Alpha-Chars.        (line    6)
26687* Alpha line separator:                  Alpha-Chars.        (line   11)
26688* Alpha notes:                           Alpha Notes.        (line    6)
26689* Alpha options:                         Alpha Options.      (line    6)
26690* Alpha registers:                       Alpha-Regs.         (line    6)
26691* Alpha relocations:                     Alpha-Relocs.       (line    6)
26692* Alpha support:                         Alpha-Dependent.    (line    6)
26693* Alpha Syntax:                          Alpha Options.      (line   60)
26694* Alpha-only directives:                 Alpha Directives.   (line    9)
26695* Altera Nios II support:                NiosII-Dependent.   (line    6)
26696* altered difference tables:             Word.               (line   12)
26697* alternate syntax for the 680x0:        M68K-Moto-Syntax.   (line    6)
26698* ARC Branch Target Address:             ARC-Regs.           (line   60)
26699* ARC BTA saved on exception entry:      ARC-Regs.           (line   79)
26700* ARC Build configuration for: BTA Registers: ARC-Regs.      (line   89)
26701* ARC Build configuration for: Core Registers: ARC-Regs.     (line   97)
26702* ARC Build configuration for: Interrupts: ARC-Regs.         (line   93)
26703* ARC Build Configuration Registers Version: ARC-Regs.       (line   85)
26704* ARC C preprocessor macro separator:    ARC-Chars.          (line   31)
26705* ARC core general registers:            ARC-Regs.           (line   10)
26706* ARC DCCM RAM Configuration Register:   ARC-Regs.           (line  101)
26707* ARC Exception Cause Register:          ARC-Regs.           (line   63)
26708* ARC Exception Return Address:          ARC-Regs.           (line   76)
26709* ARC extension core registers:          ARC-Regs.           (line   38)
26710* ARC frame pointer:                     ARC-Regs.           (line   17)
26711* ARC global pointer:                    ARC-Regs.           (line   14)
26712* ARC interrupt link register:           ARC-Regs.           (line   27)
26713* ARC Interrupt Vector Base address:     ARC-Regs.           (line   66)
26714* ARC level 1 interrupt link register:   ARC-Regs.           (line   23)
26715* ARC level 2 interrupt link register:   ARC-Regs.           (line   31)
26716* ARC line comment character:            ARC-Chars.          (line   11)
26717* ARC line separator:                    ARC-Chars.          (line   27)
26718* ARC link register:                     ARC-Regs.           (line   35)
26719* ARC loop counter:                      ARC-Regs.           (line   41)
26720* ARC machine directives:                ARC Directives.     (line    6)
26721* ARC opcodes:                           ARC Opcodes.        (line    6)
26722* ARC options:                           ARC Options.        (line    6)
26723* ARC Processor Identification register: ARC-Regs.           (line   51)
26724* ARC Program Counter:                   ARC-Regs.           (line   54)
26725* ARC register name prefix character:    ARC-Chars.          (line    7)
26726* ARC register names:                    ARC-Regs.           (line    6)
26727* ARC Saved User Stack Pointer:          ARC-Regs.           (line   73)
26728* ARC stack pointer:                     ARC-Regs.           (line   20)
26729* ARC Status register:                   ARC-Regs.           (line   57)
26730* ARC STATUS32 saved on exception:       ARC-Regs.           (line   82)
26731* ARC Stored STATUS32 register on entry to level P0 interrupts: ARC-Regs.
26732                                                             (line   69)
26733* ARC support:                           ARC-Dependent.      (line    6)
26734* ARC symbol prefix character:           ARC-Chars.          (line   20)
26735* ARC word aligned program counter:      ARC-Regs.           (line   44)
26736* arch directive, i386:                  i386-Arch.          (line    6)
26737* arch directive, M680x0:                M68K-Directives.    (line   22)
26738* arch directive, MSP 430:               MSP430 Directives.  (line   18)
26739* arch directive, x86-64:                i386-Arch.          (line    6)
26740* architecture options, IP2022:          IP2K-Opts.          (line    9)
26741* architecture options, IP2K:            IP2K-Opts.          (line   14)
26742* architecture options, M16C:            M32C-Opts.          (line   12)
26743* architecture options, M32C:            M32C-Opts.          (line    9)
26744* architecture options, M32R:            M32R-Opts.          (line   21)
26745* architecture options, M32R2:           M32R-Opts.          (line   17)
26746* architecture options, M32RX:           M32R-Opts.          (line    9)
26747* architecture options, M680x0:          M68K-Opts.          (line   99)
26748* Architecture variant option, CRIS:     CRIS-Opts.          (line   34)
26749* architectures, Meta:                   Meta Options.       (line    6)
26750* architectures, PowerPC:                PowerPC-Opts.       (line    6)
26751* architectures, SCORE:                  SCORE-Opts.         (line    6)
26752* architectures, SPARC:                  Sparc-Opts.         (line    6)
26753* arguments for addition:                Infix Ops.          (line   45)
26754* arguments for subtraction:             Infix Ops.          (line   50)
26755* arguments in expressions:              Arguments.          (line    6)
26756* arithmetic functions:                  Operators.          (line    6)
26757* arithmetic operands:                   Arguments.          (line    6)
26758* ARM data relocations:                  ARM-Relocations.    (line    6)
26759* ARM floating point (IEEE):             ARM Floating Point. (line    6)
26760* ARM identifiers:                       ARM-Chars.          (line   19)
26761* ARM immediate character:               ARM-Chars.          (line   17)
26762* ARM line comment character:            ARM-Chars.          (line    6)
26763* ARM line separator:                    ARM-Chars.          (line   14)
26764* ARM machine directives:                ARM Directives.     (line    6)
26765* ARM opcodes:                           ARM Opcodes.        (line    6)
26766* ARM options (none):                    ARM Options.        (line    6)
26767* ARM register names:                    ARM-Regs.           (line    6)
26768* ARM support:                           ARM-Dependent.      (line    6)
26769* ascii directive:                       Ascii.              (line    6)
26770* asciz directive:                       Asciz.              (line    6)
26771* asg directive, TIC54X:                 TIC54X-Directives.  (line   18)
26772* assembler bugs, reporting:             Bug Reporting.      (line    6)
26773* assembler crash:                       Bug Criteria.       (line    9)
26774* assembler directive .3byte, RX:        RX-Directives.      (line    9)
26775* assembler directive .arch, CRIS:       CRIS-Pseudos.       (line   50)
26776* assembler directive .dword, CRIS:      CRIS-Pseudos.       (line   12)
26777* assembler directive .far, M68HC11:     M68HC11-Directives. (line   20)
26778* assembler directive .fetchalign, RX:   RX-Directives.      (line   13)
26779* assembler directive .interrupt, M68HC11: M68HC11-Directives.
26780                                                             (line   26)
26781* assembler directive .mode, M68HC11:    M68HC11-Directives. (line   16)
26782* assembler directive .relax, M68HC11:   M68HC11-Directives. (line   10)
26783* assembler directive .syntax, CRIS:     CRIS-Pseudos.       (line   18)
26784* assembler directive .xrefb, M68HC11:   M68HC11-Directives. (line   31)
26785* assembler directive BSPEC, MMIX:       MMIX-Pseudos.       (line  137)
26786* assembler directive BYTE, MMIX:        MMIX-Pseudos.       (line  101)
26787* assembler directive ESPEC, MMIX:       MMIX-Pseudos.       (line  137)
26788* assembler directive GREG, MMIX:        MMIX-Pseudos.       (line   53)
26789* assembler directive IS, MMIX:          MMIX-Pseudos.       (line   44)
26790* assembler directive LOC, MMIX:         MMIX-Pseudos.       (line    7)
26791* assembler directive LOCAL, MMIX:       MMIX-Pseudos.       (line   29)
26792* assembler directive OCTA, MMIX:        MMIX-Pseudos.       (line  113)
26793* assembler directive PREFIX, MMIX:      MMIX-Pseudos.       (line  125)
26794* assembler directive TETRA, MMIX:       MMIX-Pseudos.       (line  113)
26795* assembler directive WYDE, MMIX:        MMIX-Pseudos.       (line  113)
26796* assembler directives, CRIS:            CRIS-Pseudos.       (line    6)
26797* assembler directives, M68HC11:         M68HC11-Directives. (line    6)
26798* assembler directives, M68HC12:         M68HC11-Directives. (line    6)
26799* assembler directives, MMIX:            MMIX-Pseudos.       (line    6)
26800* assembler directives, RL78:            RL78-Directives.    (line    6)
26801* assembler directives, RX:              RX-Directives.      (line    6)
26802* assembler directives, XGATE:           XGATE-Directives.   (line    6)
26803* assembler internal logic error:        As Sections.        (line   13)
26804* assembler version:                     v.                  (line    6)
26805* assembler, and linker:                 Secs Background.    (line   10)
26806* assembly listings, enabling:           a.                  (line    6)
26807* assigning values to symbols:           Setting Symbols.    (line    6)
26808* assigning values to symbols <1>:       Equ.                (line    6)
26809* at register, MIPS:                     MIPS Macros.        (line   35)
26810* attributes, symbol:                    Symbol Attributes.  (line    6)
26811* att_syntax pseudo op, i386:            i386-Variations.    (line    6)
26812* att_syntax pseudo op, x86-64:          i386-Variations.    (line    6)
26813* auxiliary attributes, COFF symbols:    COFF Symbols.       (line   19)
26814* auxiliary symbol information, COFF:    Dim.                (line    6)
26815* AVR line comment character:            AVR-Chars.          (line    6)
26816* AVR line separator:                    AVR-Chars.          (line   14)
26817* AVR modifiers:                         AVR-Modifiers.      (line    6)
26818* AVR opcode summary:                    AVR Opcodes.        (line    6)
26819* AVR options (none):                    AVR Options.        (line    6)
26820* AVR register names:                    AVR-Regs.           (line    6)
26821* AVR support:                           AVR-Dependent.      (line    6)
26822* A_DIR environment variable, TIC54X:    TIC54X-Env.         (line    6)
26823* backslash (\\):                        Strings.            (line   40)
26824* backspace (\b):                        Strings.            (line   15)
26825* balign directive:                      Balign.             (line    6)
26826* balignl directive:                     Balign.             (line   29)
26827* balignw directive:                     Balign.             (line   29)
26828* bes directive, TIC54X:                 TIC54X-Directives.  (line  194)
26829* big endian output, MIPS:               Overview.           (line  855)
26830* big endian output, PJ:                 Overview.           (line  759)
26831* big-endian output, MIPS:               MIPS Options.       (line   13)
26832* big-endian output, TIC6X:              TIC6X Options.      (line   46)
26833* bignums:                               Bignums.            (line    6)
26834* binary constants, TIC54X:              TIC54X-Constants.   (line    8)
26835* binary files, including:               Incbin.             (line    6)
26836* binary integers:                       Integers.           (line    6)
26837* bit names, IA-64:                      IA-64-Bits.         (line    6)
26838* bitfields, not supported on VAX:       VAX-no.             (line    6)
26839* Blackfin directives:                   Blackfin Directives.
26840                                                             (line    6)
26841* Blackfin options (none):               Blackfin Options.   (line    6)
26842* Blackfin support:                      Blackfin-Dependent. (line    6)
26843* Blackfin syntax:                       Blackfin Syntax.    (line    6)
26844* block:                                 Z8000 Directives.   (line   55)
26845* BMI, i386:                             i386-BMI.           (line    6)
26846* BMI, x86-64:                           i386-BMI.           (line    6)
26847* BPF line comment character:            BPF-Chars.          (line    6)
26848* BPF opcodes:                           BPF Opcodes.        (line    6)
26849* BPF options (none):                    BPF Options.        (line    6)
26850* BPF register names:                    BPF-Regs.           (line    6)
26851* BPF support:                           BPF-Dependent.      (line    6)
26852* branch improvement, M680x0:            M68K-Branch.        (line    6)
26853* branch improvement, M68HC11:           M68HC11-Branch.     (line    6)
26854* branch improvement, VAX:               VAX-branch.         (line    6)
26855* branch instructions, relaxation:       Xtensa Branch Relaxation.
26856                                                             (line    6)
26857* Branch Target Address, ARC:            ARC-Regs.           (line   60)
26858* branch target alignment:               Xtensa Automatic Alignment.
26859                                                             (line    6)
26860* break directive, TIC54X:               TIC54X-Directives.  (line  141)
26861* BSD syntax:                            PDP-11-Syntax.      (line    6)
26862* BSS directive:                         RISC-V-Directives.  (line   24)
26863* bss directive, TIC54X:                 TIC54X-Directives.  (line   27)
26864* bss section:                           Ld Sections.        (line   20)
26865* bss section <1>:                       bss.                (line    6)
26866* BTA saved on exception entry, ARC:     ARC-Regs.           (line   79)
26867* bug criteria:                          Bug Criteria.       (line    6)
26868* bug reports:                           Bug Reporting.      (line    6)
26869* bugs in assembler:                     Reporting Bugs.     (line    6)
26870* Build configuration for: BTA Registers, ARC: ARC-Regs.     (line   89)
26871* Build configuration for: Core Registers, ARC: ARC-Regs.    (line   97)
26872* Build configuration for: Interrupts, ARC: ARC-Regs.        (line   93)
26873* Build Configuration Registers Version, ARC: ARC-Regs.      (line   85)
26874* Built-in symbols, CRIS:                CRIS-Symbols.       (line    6)
26875* builtin math functions, TIC54X:        TIC54X-Builtins.    (line    6)
26876* builtin subsym functions, TIC54X:      TIC54X-Macros.      (line   16)
26877* bundle:                                Bundle directives.  (line    9)
26878* bundle-locked:                         Bundle directives.  (line   39)
26879* bundle_align_mode directive:           Bundle directives.  (line    9)
26880* bundle_lock directive:                 Bundle directives.  (line   31)
26881* bundle_unlock directive:               Bundle directives.  (line   31)
26882* bus lock prefixes, i386:               i386-Prefixes.      (line   36)
26883* bval:                                  Z8000 Directives.   (line   30)
26884* byte directive:                        Byte.               (line    6)
26885* byte directive, TIC54X:                TIC54X-Directives.  (line   34)
26886* C preprocessor macro separator, ARC:   ARC-Chars.          (line   31)
26887* C-SKY options:                         C-SKY Options.      (line    6)
26888* C-SKY support:                         C-SKY-Dependent.    (line    6)
26889* C54XDSP_DIR environment variable, TIC54X: TIC54X-Env.      (line    6)
26890* call directive, Nios II:               Nios II Relocations.
26891                                                             (line   38)
26892* call instructions, i386:               i386-Mnemonics.     (line   75)
26893* call instructions, relaxation:         Xtensa Call Relaxation.
26894                                                             (line    6)
26895* call instructions, x86-64:             i386-Mnemonics.     (line   75)
26896* call_hiadj directive, Nios II:         Nios II Relocations.
26897                                                             (line   38)
26898* call_lo directive, Nios II:            Nios II Relocations.
26899                                                             (line   38)
26900* carriage return (backslash-r):         Strings.            (line   24)
26901* case sensitivity, Z80:                 Z80-Case.           (line    6)
26902* cfi_endproc directive:                 CFI directives.     (line   40)
26903* cfi_fde_data directive:                CFI directives.     (line   66)
26904* cfi_personality directive:             CFI directives.     (line   47)
26905* cfi_personality_id directive:          CFI directives.     (line   59)
26906* cfi_sections directive:                CFI directives.     (line    9)
26907* cfi_startproc directive:               CFI directives.     (line   30)
26908* char directive, TIC54X:                TIC54X-Directives.  (line   34)
26909* character constant, Z80:               Z80-Chars.          (line   20)
26910* character constants:                   Characters.         (line    6)
26911* character escape codes:                Strings.            (line   15)
26912* character escapes, Z80:                Z80-Chars.          (line   18)
26913* character, single:                     Chars.              (line    6)
26914* characters used in symbols:            Symbol Intro.       (line    6)
26915* clink directive, TIC54X:               TIC54X-Directives.  (line   43)
26916* code16 directive, i386:                i386-16bit.         (line    6)
26917* code16gcc directive, i386:             i386-16bit.         (line    6)
26918* code32 directive, i386:                i386-16bit.         (line    6)
26919* code64 directive, i386:                i386-16bit.         (line    6)
26920* code64 directive, x86-64:              i386-16bit.         (line    6)
26921* COFF auxiliary symbol information:     Dim.                (line    6)
26922* COFF structure debugging:              Tag.                (line    6)
26923* COFF symbol attributes:                COFF Symbols.       (line    6)
26924* COFF symbol descriptor:                Desc.               (line    6)
26925* COFF symbol storage class:             Scl.                (line    6)
26926* COFF symbol type:                      Type.               (line   11)
26927* COFF symbols, debugging:               Def.                (line    6)
26928* COFF value attribute:                  Val.                (line    6)
26929* COMDAT:                                Linkonce.           (line    6)
26930* comm directive:                        Comm.               (line    6)
26931* command line conventions:              Command Line.       (line    6)
26932* command-line options ignored, VAX:     VAX-Opts.           (line    6)
26933* command-line options, V850:            V850 Options.       (line    9)
26934* comment character, XStormy16:          XStormy16-Chars.    (line   11)
26935* comments:                              Comments.           (line    6)
26936* comments, M680x0:                      M68K-Chars.         (line    6)
26937* comments, removed by preprocessor:     Preprocessing.      (line   11)
26938* common directive, SPARC:               Sparc-Directives.   (line   12)
26939* common sections:                       Linkonce.           (line    6)
26940* common variable storage:               bss.                (line    6)
26941* comparison expressions:                Infix Ops.          (line   56)
26942* conditional assembly:                  If.                 (line    6)
26943* constant, single character:            Chars.              (line    6)
26944* constants:                             Constants.          (line    6)
26945* constants, bignum:                     Bignums.            (line    6)
26946* constants, character:                  Characters.         (line    6)
26947* constants, converted by preprocessor:  Preprocessing.      (line   14)
26948* constants, floating point:             Flonums.            (line    6)
26949* constants, integer:                    Integers.           (line    6)
26950* constants, number:                     Numbers.            (line    6)
26951* constants, Sparc:                      Sparc-Constants.    (line    6)
26952* constants, string:                     Strings.            (line    6)
26953* constants, TIC54X:                     TIC54X-Constants.   (line    6)
26954* conversion instructions, i386:         i386-Mnemonics.     (line   56)
26955* conversion instructions, x86-64:       i386-Mnemonics.     (line   56)
26956* coprocessor wait, i386:                i386-Prefixes.      (line   40)
26957* copy directive, TIC54X:                TIC54X-Directives.  (line   52)
26958* core general registers, ARC:           ARC-Regs.           (line   10)
26959* cpu directive, ARC:                    ARC Directives.     (line   27)
26960* cpu directive, M680x0:                 M68K-Directives.    (line   30)
26961* cpu directive, MSP 430:                MSP430 Directives.  (line   22)
26962* CR16 line comment character:           CR16-Chars.         (line    6)
26963* CR16 line separator:                   CR16-Chars.         (line   12)
26964* CR16 Operand Qualifiers:               CR16 Operand Qualifiers.
26965                                                             (line    6)
26966* CR16 support:                          CR16-Dependent.     (line    6)
26967* crash of assembler:                    Bug Criteria.       (line    9)
26968* CRIS --emulation=crisaout command-line option: CRIS-Opts.  (line    9)
26969* CRIS --emulation=criself command-line option: CRIS-Opts.   (line    9)
26970* CRIS --march=ARCHITECTURE command-line option: CRIS-Opts.  (line   34)
26971* CRIS --mul-bug-abort command-line option: CRIS-Opts.       (line   63)
26972* CRIS --no-mul-bug-abort command-line option: CRIS-Opts.    (line   63)
26973* CRIS --no-underscore command-line option: CRIS-Opts.       (line   15)
26974* CRIS --pic command-line option:        CRIS-Opts.          (line   27)
26975* CRIS --underscore command-line option: CRIS-Opts.          (line   15)
26976* CRIS -N command-line option:           CRIS-Opts.          (line   59)
26977* CRIS architecture variant option:      CRIS-Opts.          (line   34)
26978* CRIS assembler directive .arch:        CRIS-Pseudos.       (line   50)
26979* CRIS assembler directive .dword:       CRIS-Pseudos.       (line   12)
26980* CRIS assembler directive .syntax:      CRIS-Pseudos.       (line   18)
26981* CRIS assembler directives:             CRIS-Pseudos.       (line    6)
26982* CRIS built-in symbols:                 CRIS-Symbols.       (line    6)
26983* CRIS instruction expansion:            CRIS-Expand.        (line    6)
26984* CRIS line comment characters:          CRIS-Chars.         (line    6)
26985* CRIS options:                          CRIS-Opts.          (line    6)
26986* CRIS position-independent code:        CRIS-Opts.          (line   27)
26987* CRIS pseudo-op .arch:                  CRIS-Pseudos.       (line   50)
26988* CRIS pseudo-op .dword:                 CRIS-Pseudos.       (line   12)
26989* CRIS pseudo-op .syntax:                CRIS-Pseudos.       (line   18)
26990* CRIS pseudo-ops:                       CRIS-Pseudos.       (line    6)
26991* CRIS register names:                   CRIS-Regs.          (line    6)
26992* CRIS support:                          CRIS-Dependent.     (line    6)
26993* CRIS symbols in position-independent code: CRIS-Pic.       (line    6)
26994* ctbp register, V850:                   V850-Regs.          (line   90)
26995* ctoff pseudo-op, V850:                 V850 Opcodes.       (line  110)
26996* ctpc register, V850:                   V850-Regs.          (line   82)
26997* ctpsw register, V850:                  V850-Regs.          (line   84)
26998* current address:                       Dot.                (line    6)
26999* current address, advancing:            Org.                (line    6)
27000* c_mode directive, TIC54X:              TIC54X-Directives.  (line   49)
27001* D10V @word modifier:                   D10V-Word.          (line    6)
27002* D10V addressing modes:                 D10V-Addressing.    (line    6)
27003* D10V floating point:                   D10V-Float.         (line    6)
27004* D10V line comment character:           D10V-Chars.         (line    6)
27005* D10V opcode summary:                   D10V-Opcodes.       (line    6)
27006* D10V optimization:                     Overview.           (line  638)
27007* D10V options:                          D10V-Opts.          (line    6)
27008* D10V registers:                        D10V-Regs.          (line    6)
27009* D10V size modifiers:                   D10V-Size.          (line    6)
27010* D10V sub-instruction ordering:         D10V-Chars.         (line   14)
27011* D10V sub-instructions:                 D10V-Subs.          (line    6)
27012* D10V support:                          D10V-Dependent.     (line    6)
27013* D10V syntax:                           D10V-Syntax.        (line    6)
27014* D30V addressing modes:                 D30V-Addressing.    (line    6)
27015* D30V floating point:                   D30V-Float.         (line    6)
27016* D30V Guarded Execution:                D30V-Guarded.       (line    6)
27017* D30V line comment character:           D30V-Chars.         (line    6)
27018* D30V nops:                             Overview.           (line  646)
27019* D30V nops after 32-bit multiply:       Overview.           (line  649)
27020* D30V opcode summary:                   D30V-Opcodes.       (line    6)
27021* D30V optimization:                     Overview.           (line  643)
27022* D30V options:                          D30V-Opts.          (line    6)
27023* D30V registers:                        D30V-Regs.          (line    6)
27024* D30V size modifiers:                   D30V-Size.          (line    6)
27025* D30V sub-instruction ordering:         D30V-Chars.         (line   14)
27026* D30V sub-instructions:                 D30V-Subs.          (line    6)
27027* D30V support:                          D30V-Dependent.     (line    6)
27028* D30V syntax:                           D30V-Syntax.        (line    6)
27029* data alignment on SPARC:               Sparc-Aligned-Data. (line    6)
27030* data and text sections, joining:       R.                  (line    6)
27031* data directive:                        Data.               (line    6)
27032* data directive, TIC54X:                TIC54X-Directives.  (line   59)
27033* Data directives:                       RISC-V-Directives.  (line   12)
27034* data relocations, ARM:                 ARM-Relocations.    (line    6)
27035* data section:                          Ld Sections.        (line    9)
27036* data1 directive, M680x0:               M68K-Directives.    (line    9)
27037* data2 directive, M680x0:               M68K-Directives.    (line   12)
27038* dbpc register, V850:                   V850-Regs.          (line   86)
27039* dbpsw register, V850:                  V850-Regs.          (line   88)
27040* dc directive:                          Dc.                 (line    6)
27041* dcb directive:                         Dcb.                (line    6)
27042* DCCM RAM Configuration Register, ARC:  ARC-Regs.           (line  101)
27043* debuggers, and symbol order:           Symbols.            (line   10)
27044* debugging COFF symbols:                Def.                (line    6)
27045* DEC syntax:                            PDP-11-Syntax.      (line    6)
27046* decimal integers:                      Integers.           (line   12)
27047* def directive:                         Def.                (line    6)
27048* def directive, TIC54X:                 TIC54X-Directives.  (line  101)
27049* density instructions:                  Density Instructions.
27050                                                             (line    6)
27051* dependency tracking:                   MD.                 (line    6)
27052* deprecated directives:                 Deprecated.         (line    6)
27053* desc directive:                        Desc.               (line    6)
27054* descriptor, of a.out symbol:           Symbol Desc.        (line    6)
27055* dfloat directive, VAX:                 VAX-directives.     (line    9)
27056* difference tables altered:             Word.               (line   12)
27057* difference tables, warning:            K.                  (line    6)
27058* differences, mmixal:                   MMIX-mmixal.        (line    6)
27059* dim directive:                         Dim.                (line    6)
27060* directives and instructions:           Statements.         (line   20)
27061* directives for PowerPC:                PowerPC-Pseudo.     (line    6)
27062* directives for SCORE:                  SCORE-Pseudo.       (line    6)
27063* directives, Blackfin:                  Blackfin Directives.
27064                                                             (line    6)
27065* directives, M32R:                      M32R-Directives.    (line    6)
27066* directives, M680x0:                    M68K-Directives.    (line    6)
27067* directives, machine independent:       Pseudo Ops.         (line    6)
27068* directives, Xtensa:                    Xtensa Directives.  (line    6)
27069* directives, Z8000:                     Z8000 Directives.   (line    6)
27070* Disable floating-point instructions:   MIPS Floating-Point.
27071                                                             (line    6)
27072* Disable single-precision floating-point operations: MIPS Floating-Point.
27073                                                             (line   12)
27074* displacement sizing character, VAX:    VAX-operands.       (line   12)
27075* dollar local symbols:                  Symbol Names.       (line  113)
27076* dot (symbol):                          Dot.                (line    6)
27077* double directive:                      Double.             (line    6)
27078* double directive, i386:                i386-Float.         (line   14)
27079* double directive, M680x0:              M68K-Float.         (line   14)
27080* double directive, M68HC11:             M68HC11-Float.      (line   14)
27081* double directive, RX:                  RX-Float.           (line   11)
27082* double directive, TIC54X:              TIC54X-Directives.  (line   62)
27083* double directive, VAX:                 VAX-float.          (line   15)
27084* double directive, x86-64:              i386-Float.         (line   14)
27085* double directive, XGATE:               XGATE-Float.        (line   13)
27086* doublequote (\"):                      Strings.            (line   43)
27087* drlist directive, TIC54X:              TIC54X-Directives.  (line   71)
27088* drnolist directive, TIC54X:            TIC54X-Directives.  (line   71)
27089* ds directive:                          Ds.                 (line    6)
27090* DTP-relative data directives:          RISC-V-Directives.  (line   18)
27091* dword directive, BPF:                  BPF Directives.     (line   15)
27092* dword directive, Nios II:              Nios II Directives. (line   16)
27093* dword directive, PRU:                  PRU Directives.     (line   13)
27094* EB command-line option, C-SKY:         C-SKY Options.      (line   18)
27095* EB command-line option, Nios II:       Nios II Options.    (line   22)
27096* ecr register, V850:                    V850-Regs.          (line   78)
27097* eight-byte integer:                    Quad.               (line    9)
27098* eight-byte integer <1>:                8byte.              (line    6)
27099* eipc register, V850:                   V850-Regs.          (line   70)
27100* eipsw register, V850:                  V850-Regs.          (line   72)
27101* eject directive:                       Eject.              (line    6)
27102* EL command-line option, C-SKY:         C-SKY Options.      (line   14)
27103* EL command-line option, Nios II:       Nios II Options.    (line   25)
27104* ELF symbol type:                       Type.               (line   22)
27105* else directive:                        Else.               (line    6)
27106* elseif directive:                      Elseif.             (line    6)
27107* empty expressions:                     Empty Exprs.        (line    6)
27108* emsg directive, TIC54X:                TIC54X-Directives.  (line   75)
27109* emulation:                             Overview.           (line 1109)
27110* encoding options, i386:                i386-Mnemonics.     (line   34)
27111* encoding options, x86-64:              i386-Mnemonics.     (line   34)
27112* end directive:                         End.                (line    6)
27113* endef directive:                       Endef.              (line    6)
27114* endfunc directive:                     Endfunc.            (line    6)
27115* endianness, MIPS:                      Overview.           (line  855)
27116* endianness, PJ:                        Overview.           (line  759)
27117* endif directive:                       Endif.              (line    6)
27118* endloop directive, TIC54X:             TIC54X-Directives.  (line  141)
27119* endm directive:                        Macro.              (line  137)
27120* endm directive, TIC54X:                TIC54X-Directives.  (line  151)
27121* endproc directive, OpenRISC:           OpenRISC-Directives.
27122                                                             (line   24)
27123* endstruct directive, TIC54X:           TIC54X-Directives.  (line  214)
27124* endunion directive, TIC54X:            TIC54X-Directives.  (line  248)
27125* environment settings, TIC54X:          TIC54X-Env.         (line    6)
27126* EOF, newline must precede:             Statements.         (line   14)
27127* ep register, V850:                     V850-Regs.          (line   66)
27128* Epiphany line comment character:       Epiphany-Chars.     (line    6)
27129* Epiphany line separator:               Epiphany-Chars.     (line   14)
27130* Epiphany options:                      Epiphany Options.   (line    6)
27131* Epiphany support:                      Epiphany-Dependent. (line    6)
27132* equ directive:                         Equ.                (line    6)
27133* equ directive, TIC54X:                 TIC54X-Directives.  (line  189)
27134* equiv directive:                       Equiv.              (line    6)
27135* eqv directive:                         Eqv.                (line    6)
27136* err directive:                         Err.                (line    6)
27137* error directive:                       Error.              (line    6)
27138* error messages:                        Errors.             (line    6)
27139* error on valid input:                  Bug Criteria.       (line   12)
27140* errors, caused by warnings:            W.                  (line   16)
27141* errors, continuing after:              Z.                  (line    6)
27142* escape codes, character:               Strings.            (line   15)
27143* eval directive, TIC54X:                TIC54X-Directives.  (line   22)
27144* even:                                  Z8000 Directives.   (line   58)
27145* even directive, M680x0:                M68K-Directives.    (line   15)
27146* even directive, TIC54X:                TIC54X-Directives.  (line    6)
27147* Exception Cause Register, ARC:         ARC-Regs.           (line   63)
27148* Exception Return Address, ARC:         ARC-Regs.           (line   76)
27149* exitm directive:                       Macro.              (line  140)
27150* expr (internal section):               As Sections.        (line   17)
27151* expression arguments:                  Arguments.          (line    6)
27152* expressions:                           Expressions.        (line    6)
27153* expressions, comparison:               Infix Ops.          (line   56)
27154* expressions, empty:                    Empty Exprs.        (line    6)
27155* expressions, integer:                  Integer Exprs.      (line    6)
27156* extAuxRegister directive, ARC:         ARC Directives.     (line  105)
27157* extCondCode directive, ARC:            ARC Directives.     (line  126)
27158* extCoreRegister directive, ARC:        ARC Directives.     (line  137)
27159* extend directive M680x0:               M68K-Float.         (line   17)
27160* extend directive M68HC11:              M68HC11-Float.      (line   17)
27161* extend directive XGATE:                XGATE-Float.        (line   16)
27162* extension core registers, ARC:         ARC-Regs.           (line   38)
27163* extern directive:                      Extern.             (line    6)
27164* extInstruction directive, ARC:         ARC Directives.     (line  164)
27165* fail directive:                        Fail.               (line    6)
27166* far_mode directive, TIC54X:            TIC54X-Directives.  (line   80)
27167* faster processing (-f):                f.                  (line    6)
27168* fatal signal:                          Bug Criteria.       (line    9)
27169* fclist directive, TIC54X:              TIC54X-Directives.  (line   85)
27170* fcnolist directive, TIC54X:            TIC54X-Directives.  (line   85)
27171* fepc register, V850:                   V850-Regs.          (line   74)
27172* fepsw register, V850:                  V850-Regs.          (line   76)
27173* ffloat directive, VAX:                 VAX-directives.     (line   13)
27174* field directive, TIC54X:               TIC54X-Directives.  (line   89)
27175* file directive:                        File.               (line    6)
27176* file directive, MSP 430:               MSP430 Directives.  (line    6)
27177* file name, logical:                    File.               (line   13)
27178* file names and line numbers, in warnings/errors: Errors.   (line   16)
27179* files, including:                      Include.            (line    6)
27180* files, input:                          Input Files.        (line    6)
27181* fill directive:                        Fill.               (line    6)
27182* filling memory:                        Skip.               (line    6)
27183* filling memory <1>:                    Space.              (line    6)
27184* filling memory with no-op instructions: Nops.              (line    6)
27185* filling memory with zero bytes:        Zero.               (line    6)
27186* FLIX syntax:                           Xtensa Syntax.      (line    6)
27187* float directive:                       Float.              (line    6)
27188* float directive, i386:                 i386-Float.         (line   14)
27189* float directive, M680x0:               M68K-Float.         (line   11)
27190* float directive, M68HC11:              M68HC11-Float.      (line   11)
27191* float directive, RX:                   RX-Float.           (line    8)
27192* float directive, TIC54X:               TIC54X-Directives.  (line   62)
27193* float directive, VAX:                  VAX-float.          (line   15)
27194* float directive, x86-64:               i386-Float.         (line   14)
27195* float directive, XGATE:                XGATE-Float.        (line   10)
27196* floating point numbers:                Flonums.            (line    6)
27197* floating point numbers (double):       Double.             (line    6)
27198* floating point numbers (single):       Float.              (line    6)
27199* floating point numbers (single) <1>:   Single.             (line    6)
27200* floating point, AArch64 (IEEE):        AArch64 Floating Point.
27201                                                             (line    6)
27202* floating point, Alpha (IEEE):          Alpha Floating Point.
27203                                                             (line    6)
27204* floating point, ARM (IEEE):            ARM Floating Point. (line    6)
27205* floating point, D10V:                  D10V-Float.         (line    6)
27206* floating point, D30V:                  D30V-Float.         (line    6)
27207* floating point, H8/300 (IEEE):         H8/300 Floating Point.
27208                                                             (line    6)
27209* floating point, HPPA (IEEE):           HPPA Floating Point.
27210                                                             (line    6)
27211* floating point, i386:                  i386-Float.         (line    6)
27212* floating point, M680x0:                M68K-Float.         (line    6)
27213* floating point, M68HC11:               M68HC11-Float.      (line    6)
27214* floating point, MSP 430 (IEEE):        MSP430 Floating Point.
27215                                                             (line    6)
27216* floating point, OPENRISC (IEEE):       OpenRISC-Float.     (line    6)
27217* floating point, RX:                    RX-Float.           (line    6)
27218* floating point, s390:                  s390 Floating Point.
27219                                                             (line    6)
27220* floating point, SH (IEEE):             SH Floating Point.  (line    6)
27221* floating point, SPARC (IEEE):          Sparc-Float.        (line    6)
27222* floating point, V850 (IEEE):           V850 Floating Point.
27223                                                             (line    6)
27224* floating point, VAX:                   VAX-float.          (line    6)
27225* floating point, WebAssembly (IEEE):    WebAssembly-Floating-Point.
27226                                                             (line    6)
27227* floating point, x86-64:                i386-Float.         (line    6)
27228* floating point, XGATE:                 XGATE-Float.        (line    6)
27229* floating point, Z80:                   Z80 Floating Point. (line    6)
27230* flonums:                               Flonums.            (line    6)
27231* force2bsr command-line option, C-SKY:  C-SKY Options.      (line   43)
27232* format of error messages:              Errors.             (line   38)
27233* format of warning messages:            Errors.             (line   12)
27234* formfeed (\f):                         Strings.            (line   18)
27235* four-byte integer:                     4byte.              (line    6)
27236* fpic command-line option, C-SKY:       C-SKY Options.      (line   22)
27237* frame pointer, ARC:                    ARC-Regs.           (line   17)
27238* func directive:                        Func.               (line    6)
27239* functions, in expressions:             Operators.          (line    6)
27240* gfloat directive, VAX:                 VAX-directives.     (line   17)
27241* global:                                Z8000 Directives.   (line   21)
27242* global directive:                      Global.             (line    6)
27243* global directive, TIC54X:              TIC54X-Directives.  (line  101)
27244* global pointer, ARC:                   ARC-Regs.           (line   14)
27245* got directive, Nios II:                Nios II Relocations.
27246                                                             (line   38)
27247* gotoff directive, Nios II:             Nios II Relocations.
27248                                                             (line   38)
27249* gotoff_hiadj directive, Nios II:       Nios II Relocations.
27250                                                             (line   38)
27251* gotoff_lo directive, Nios II:          Nios II Relocations.
27252                                                             (line   38)
27253* got_hiadj directive, Nios II:          Nios II Relocations.
27254                                                             (line   38)
27255* got_lo directive, Nios II:             Nios II Relocations.
27256                                                             (line   38)
27257* gp register, MIPS:                     MIPS Small Data.    (line    6)
27258* gp register, V850:                     V850-Regs.          (line   14)
27259* gprel directive, Nios II:              Nios II Relocations.
27260                                                             (line   26)
27261* grouping data:                         Sub-Sections.       (line    6)
27262* H8/300 addressing modes:               H8/300-Addressing.  (line    6)
27263* H8/300 floating point (IEEE):          H8/300 Floating Point.
27264                                                             (line    6)
27265* H8/300 line comment character:         H8/300-Chars.       (line    6)
27266* H8/300 line separator:                 H8/300-Chars.       (line    8)
27267* H8/300 machine directives (none):      H8/300 Directives.  (line    6)
27268* H8/300 opcode summary:                 H8/300 Opcodes.     (line    6)
27269* H8/300 options:                        H8/300 Options.     (line    6)
27270* H8/300 registers:                      H8/300-Regs.        (line    6)
27271* H8/300 size suffixes:                  H8/300 Opcodes.     (line  160)
27272* H8/300 support:                        H8/300-Dependent.   (line    6)
27273* H8/300H, assembling for:               H8/300 Directives.  (line    8)
27274* half directive, BPF:                   BPF Directives.     (line    9)
27275* half directive, Nios II:               Nios II Directives. (line   10)
27276* half directive, SPARC:                 Sparc-Directives.   (line   17)
27277* half directive, TIC54X:                TIC54X-Directives.  (line  109)
27278* hex character code (\XD...):           Strings.            (line   36)
27279* hexadecimal integers:                  Integers.           (line   15)
27280* hexadecimal prefix, S12Z:              S12Z Options.       (line   17)
27281* hexadecimal prefix, Z80:               Z80-Chars.          (line   15)
27282* hfloat directive, VAX:                 VAX-directives.     (line   21)
27283* hi directive, Nios II:                 Nios II Relocations.
27284                                                             (line   20)
27285* hi pseudo-op, V850:                    V850 Opcodes.       (line   33)
27286* hi0 pseudo-op, V850:                   V850 Opcodes.       (line   10)
27287* hiadj directive, Nios II:              Nios II Relocations.
27288                                                             (line    6)
27289* hidden directive:                      Hidden.             (line    6)
27290* high directive, M32R:                  M32R-Directives.    (line   18)
27291* hilo pseudo-op, V850:                  V850 Opcodes.       (line   55)
27292* HPPA directives not supported:         HPPA Directives.    (line   11)
27293* HPPA floating point (IEEE):            HPPA Floating Point.
27294                                                             (line    6)
27295* HPPA Syntax:                           HPPA Options.       (line    7)
27296* HPPA-only directives:                  HPPA Directives.    (line   24)
27297* hword directive:                       hword.              (line    6)
27298* i386 16-bit code:                      i386-16bit.         (line    6)
27299* i386 arch directive:                   i386-Arch.          (line    6)
27300* i386 att_syntax pseudo op:             i386-Variations.    (line    6)
27301* i386 conversion instructions:          i386-Mnemonics.     (line   56)
27302* i386 floating point:                   i386-Float.         (line    6)
27303* i386 immediate operands:               i386-Variations.    (line   15)
27304* i386 instruction naming:               i386-Mnemonics.     (line    9)
27305* i386 instruction prefixes:             i386-Prefixes.      (line    6)
27306* i386 intel_syntax pseudo op:           i386-Variations.    (line    6)
27307* i386 jump optimization:                i386-Jumps.         (line    6)
27308* i386 jump, call, return:               i386-Variations.    (line   45)
27309* i386 jump/call operands:               i386-Variations.    (line   15)
27310* i386 line comment character:           i386-Chars.         (line    6)
27311* i386 line separator:                   i386-Chars.         (line   18)
27312* i386 memory references:                i386-Memory.        (line    6)
27313* i386 mnemonic compatibility:           i386-Mnemonics.     (line   81)
27314* i386 mul, imul instructions:           i386-Notes.         (line    6)
27315* i386 options:                          i386-Options.       (line    6)
27316* i386 register operands:                i386-Variations.    (line   15)
27317* i386 registers:                        i386-Regs.          (line    6)
27318* i386 sections:                         i386-Variations.    (line   51)
27319* i386 size suffixes:                    i386-Variations.    (line   28)
27320* i386 source, destination operands:     i386-Variations.    (line   21)
27321* i386 support:                          i386-Dependent.     (line    6)
27322* i386 syntax compatibility:             i386-Variations.    (line    6)
27323* i80386 support:                        i386-Dependent.     (line    6)
27324* IA-64 line comment character:          IA-64-Chars.        (line    6)
27325* IA-64 line separator:                  IA-64-Chars.        (line    8)
27326* IA-64 options:                         IA-64 Options.      (line    6)
27327* IA-64 Processor-status-Register bit names: IA-64-Bits.     (line    6)
27328* IA-64 registers:                       IA-64-Regs.         (line    6)
27329* IA-64 relocations:                     IA-64-Relocs.       (line    6)
27330* IA-64 support:                         IA-64-Dependent.    (line    6)
27331* IA-64 Syntax:                          IA-64 Options.      (line   85)
27332* ident directive:                       Ident.              (line    6)
27333* identifiers, ARM:                      ARM-Chars.          (line   19)
27334* identifiers, MSP 430:                  MSP430-Chars.       (line   17)
27335* if directive:                          If.                 (line    6)
27336* ifb directive:                         If.                 (line   21)
27337* ifc directive:                         If.                 (line   25)
27338* ifdef directive:                       If.                 (line   16)
27339* ifeq directive:                        If.                 (line   33)
27340* ifeqs directive:                       If.                 (line   36)
27341* ifge directive:                        If.                 (line   40)
27342* ifgt directive:                        If.                 (line   44)
27343* ifle directive:                        If.                 (line   48)
27344* iflt directive:                        If.                 (line   52)
27345* ifnb directive:                        If.                 (line   56)
27346* ifnc directive:                        If.                 (line   61)
27347* ifndef directive:                      If.                 (line   65)
27348* ifne directive:                        If.                 (line   72)
27349* ifnes directive:                       If.                 (line   76)
27350* ifnotdef directive:                    If.                 (line   65)
27351* immediate character, AArch64:          AArch64-Chars.      (line   13)
27352* immediate character, ARM:              ARM-Chars.          (line   17)
27353* immediate character, M680x0:           M68K-Chars.         (line   13)
27354* immediate character, VAX:              VAX-operands.       (line    6)
27355* immediate fields, relaxation:          Xtensa Immediate Relaxation.
27356                                                             (line    6)
27357* immediate operands, i386:              i386-Variations.    (line   15)
27358* immediate operands, x86-64:            i386-Variations.    (line   15)
27359* imul instruction, i386:                i386-Notes.         (line    6)
27360* imul instruction, x86-64:              i386-Notes.         (line    6)
27361* incbin directive:                      Incbin.             (line    6)
27362* include directive:                     Include.            (line    6)
27363* include directive search path:         I.                  (line    6)
27364* indirect character, VAX:               VAX-operands.       (line    9)
27365* infix operators:                       Infix Ops.          (line    6)
27366* inhibiting interrupts, i386:           i386-Prefixes.      (line   36)
27367* input:                                 Input Files.        (line    6)
27368* input file linenumbers:                Input Files.        (line   35)
27369* INSN directives:                       RISC-V-Directives.  (line   88)
27370* instruction aliases, s390:             s390 Aliases.       (line    6)
27371* instruction bundle:                    Bundle directives.  (line    9)
27372* instruction expansion, CRIS:           CRIS-Expand.        (line    6)
27373* instruction expansion, MMIX:           MMIX-Expand.        (line    6)
27374* instruction formats, risc-v:           RISC-V-Formats.     (line    6)
27375* instruction formats, s390:             s390 Formats.       (line    6)
27376* instruction marker, s390:              s390 Instruction Marker.
27377                                                             (line    6)
27378* instruction mnemonics, s390:           s390 Mnemonics.     (line    6)
27379* instruction naming, i386:              i386-Mnemonics.     (line    9)
27380* instruction naming, x86-64:            i386-Mnemonics.     (line    9)
27381* instruction operand modifier, s390:    s390 Operand Modifier.
27382                                                             (line    6)
27383* instruction operands, s390:            s390 Operands.      (line    6)
27384* instruction prefixes, i386:            i386-Prefixes.      (line    6)
27385* instruction set, M680x0:               M68K-opcodes.       (line    6)
27386* instruction set, M68HC11:              M68HC11-opcodes.    (line    6)
27387* instruction set, XGATE:                XGATE-opcodes.      (line    5)
27388* instruction summary, AVR:              AVR Opcodes.        (line    6)
27389* instruction summary, D10V:             D10V-Opcodes.       (line    6)
27390* instruction summary, D30V:             D30V-Opcodes.       (line    6)
27391* instruction summary, H8/300:           H8/300 Opcodes.     (line    6)
27392* instruction summary, LM32:             LM32 Opcodes.       (line    6)
27393* instruction summary, LM32 <1>:         OpenRISC-Opcodes.   (line    6)
27394* instruction summary, SH:               SH Opcodes.         (line    6)
27395* instruction summary, Z8000:            Z8000 Opcodes.      (line    6)
27396* instruction syntax, s390:              s390 Syntax.        (line    6)
27397* instructions and directives:           Statements.         (line   20)
27398* int directive:                         Int.                (line    6)
27399* int directive, H8/300:                 H8/300 Directives.  (line    6)
27400* int directive, i386:                   i386-Float.         (line   21)
27401* int directive, TIC54X:                 TIC54X-Directives.  (line  109)
27402* int directive, x86-64:                 i386-Float.         (line   21)
27403* integer expressions:                   Integer Exprs.      (line    6)
27404* integer, 16-byte:                      Octa.               (line    6)
27405* integer, 2-byte:                       2byte.              (line    6)
27406* integer, 4-byte:                       4byte.              (line    6)
27407* integer, 8-byte:                       Quad.               (line    9)
27408* integer, 8-byte <1>:                   8byte.              (line    6)
27409* integers:                              Integers.           (line    6)
27410* integers, 16-bit:                      hword.              (line    6)
27411* integers, 32-bit:                      Int.                (line    6)
27412* integers, binary:                      Integers.           (line    6)
27413* integers, decimal:                     Integers.           (line   12)
27414* integers, hexadecimal:                 Integers.           (line   15)
27415* integers, octal:                       Integers.           (line    9)
27416* integers, one byte:                    Byte.               (line    6)
27417* intel_syntax pseudo op, i386:          i386-Variations.    (line    6)
27418* intel_syntax pseudo op, x86-64:        i386-Variations.    (line    6)
27419* internal assembler sections:           As Sections.        (line    6)
27420* internal directive:                    Internal.           (line    6)
27421* interrupt link register, ARC:          ARC-Regs.           (line   27)
27422* Interrupt Vector Base address, ARC:    ARC-Regs.           (line   66)
27423* invalid input:                         Bug Criteria.       (line   14)
27424* invocation summary:                    Overview.           (line    6)
27425* IP2K architecture options:             IP2K-Opts.          (line    9)
27426* IP2K architecture options <1>:         IP2K-Opts.          (line   14)
27427* IP2K line comment character:           IP2K-Chars.         (line    6)
27428* IP2K line separator:                   IP2K-Chars.         (line   14)
27429* IP2K options:                          IP2K-Opts.          (line    6)
27430* IP2K support:                          IP2K-Dependent.     (line    6)
27431* irp directive:                         Irp.                (line    6)
27432* irpc directive:                        Irpc.               (line    6)
27433* joining text and data sections:        R.                  (line    6)
27434* jsri2bsr command-line option, C-SKY:   C-SKY Options.      (line   52)
27435* jump instructions, i386:               i386-Mnemonics.     (line   75)
27436* jump instructions, relaxation:         Xtensa Jump Relaxation.
27437                                                             (line    6)
27438* jump instructions, x86-64:             i386-Mnemonics.     (line   75)
27439* jump optimization, i386:               i386-Jumps.         (line    6)
27440* jump optimization, x86-64:             i386-Jumps.         (line    6)
27441* jump/call operands, i386:              i386-Variations.    (line   15)
27442* jump/call operands, x86-64:            i386-Variations.    (line   15)
27443* Known undocumented instructions:       Z80 Options.        (line  103)
27444* L16SI instructions, relaxation:        Xtensa Immediate Relaxation.
27445                                                             (line   23)
27446* L16UI instructions, relaxation:        Xtensa Immediate Relaxation.
27447                                                             (line   23)
27448* L32I instructions, relaxation:         Xtensa Immediate Relaxation.
27449                                                             (line   23)
27450* L8UI instructions, relaxation:         Xtensa Immediate Relaxation.
27451                                                             (line   23)
27452* label (:):                             Statements.         (line   31)
27453* label directive, TIC54X:               TIC54X-Directives.  (line  121)
27454* labels:                                Labels.             (line    6)
27455* labels, Z80:                           Z80-Labels.         (line    6)
27456* largecomm directive, ELF:              i386-Directives.    (line   17)
27457* lcomm directive:                       Lcomm.              (line    6)
27458* lcomm directive <1>:                   ARC Directives.     (line    9)
27459* lcomm directive, COFF:                 i386-Directives.    (line    6)
27460* lcommon directive, ARC:                ARC Directives.     (line   24)
27461* ld:                                    Object.             (line   15)
27462* ldouble directive M680x0:              M68K-Float.         (line   17)
27463* ldouble directive M68HC11:             M68HC11-Float.      (line   17)
27464* ldouble directive XGATE:               XGATE-Float.        (line   16)
27465* ldouble directive, TIC54X:             TIC54X-Directives.  (line   62)
27466* LDR reg,=<expr> pseudo op, AArch64:    AArch64 Opcodes.    (line    9)
27467* LDR reg,=<label> pseudo op, ARM:       ARM Opcodes.        (line   15)
27468* LEB128 directives:                     RISC-V-Directives.  (line   27)
27469* length directive, TIC54X:              TIC54X-Directives.  (line  125)
27470* length of symbols:                     Symbol Intro.       (line   19)
27471* level 1 interrupt link register, ARC:  ARC-Regs.           (line   23)
27472* level 2 interrupt link register, ARC:  ARC-Regs.           (line   31)
27473* lflags directive (ignored):            Lflags.             (line    6)
27474* line:                                  ARC-Chars.          (line   30)
27475* line comment character:                Comments.           (line   19)
27476* line comment character, AArch64:       AArch64-Chars.      (line    6)
27477* line comment character, Alpha:         Alpha-Chars.        (line    6)
27478* line comment character, ARC:           ARC-Chars.          (line   11)
27479* line comment character, ARM:           ARM-Chars.          (line    6)
27480* line comment character, AVR:           AVR-Chars.          (line    6)
27481* line comment character, BPF:           BPF-Chars.          (line    6)
27482* line comment character, CR16:          CR16-Chars.         (line    6)
27483* line comment character, D10V:          D10V-Chars.         (line    6)
27484* line comment character, D30V:          D30V-Chars.         (line    6)
27485* line comment character, Epiphany:      Epiphany-Chars.     (line    6)
27486* line comment character, H8/300:        H8/300-Chars.       (line    6)
27487* line comment character, i386:          i386-Chars.         (line    6)
27488* line comment character, IA-64:         IA-64-Chars.        (line    6)
27489* line comment character, IP2K:          IP2K-Chars.         (line    6)
27490* line comment character, LM32:          LM32-Chars.         (line    6)
27491* line comment character, M32C:          M32C-Chars.         (line    6)
27492* line comment character, M680x0:        M68K-Chars.         (line    6)
27493* line comment character, M68HC11:       M68HC11-Syntax.     (line   17)
27494* line comment character, Meta:          Meta-Chars.         (line    6)
27495* line comment character, MicroBlaze:    MicroBlaze-Chars.   (line    6)
27496* line comment character, MIPS:          MIPS-Chars.         (line    6)
27497* line comment character, MSP 430:       MSP430-Chars.       (line    6)
27498* line comment character, Nios II:       Nios II Chars.      (line    6)
27499* line comment character, NS32K:         NS32K-Chars.        (line    6)
27500* line comment character, OpenRISC:      OpenRISC-Chars.     (line    6)
27501* line comment character, PJ:            PJ-Chars.           (line    6)
27502* line comment character, PowerPC:       PowerPC-Chars.      (line    6)
27503* line comment character, PRU:           PRU Chars.          (line    6)
27504* line comment character, RL78:          RL78-Chars.         (line    6)
27505* line comment character, RX:            RX-Chars.           (line    6)
27506* line comment character, S12Z:          S12Z Syntax Overview.
27507                                                             (line   32)
27508* line comment character, s390:          s390 Characters.    (line    6)
27509* line comment character, SCORE:         SCORE-Chars.        (line    6)
27510* line comment character, SH:            SH-Chars.           (line    6)
27511* line comment character, Sparc:         Sparc-Chars.        (line    6)
27512* line comment character, TIC54X:        TIC54X-Chars.       (line    6)
27513* line comment character, TIC6X:         TIC6X Syntax.       (line    6)
27514* line comment character, V850:          V850-Chars.         (line    6)
27515* line comment character, VAX:           VAX-Chars.          (line    6)
27516* line comment character, Visium:        Visium Characters.  (line    6)
27517* line comment character, WebAssembly:   WebAssembly-Chars.  (line    6)
27518* line comment character, XGATE:         XGATE-Syntax.       (line   16)
27519* line comment character, XStormy16:     XStormy16-Chars.    (line    6)
27520* line comment character, Z80:           Z80-Chars.          (line    6)
27521* line comment character, Z8000:         Z8000-Chars.        (line    6)
27522* line comment characters, CRIS:         CRIS-Chars.         (line    6)
27523* line comment characters, MMIX:         MMIX-Chars.         (line    6)
27524* line directive:                        Line.               (line    6)
27525* line directive, MSP 430:               MSP430 Directives.  (line   14)
27526* line numbers, in input files:          Input Files.        (line   35)
27527* line separator character:              Statements.         (line    6)
27528* line separator character, Nios II:     Nios II Chars.      (line    6)
27529* line separator, AArch64:               AArch64-Chars.      (line   10)
27530* line separator, Alpha:                 Alpha-Chars.        (line   11)
27531* line separator, ARC:                   ARC-Chars.          (line   27)
27532* line separator, ARM:                   ARM-Chars.          (line   14)
27533* line separator, AVR:                   AVR-Chars.          (line   14)
27534* line separator, CR16:                  CR16-Chars.         (line   12)
27535* line separator, Epiphany:              Epiphany-Chars.     (line   14)
27536* line separator, H8/300:                H8/300-Chars.       (line    8)
27537* line separator, i386:                  i386-Chars.         (line   18)
27538* line separator, IA-64:                 IA-64-Chars.        (line    8)
27539* line separator, IP2K:                  IP2K-Chars.         (line   14)
27540* line separator, LM32:                  LM32-Chars.         (line   12)
27541* line separator, M32C:                  M32C-Chars.         (line   14)
27542* line separator, M680x0:                M68K-Chars.         (line   20)
27543* line separator, M68HC11:               M68HC11-Syntax.     (line   26)
27544* line separator, Meta:                  Meta-Chars.         (line    8)
27545* line separator, MicroBlaze:            MicroBlaze-Chars.   (line   14)
27546* line separator, MIPS:                  MIPS-Chars.         (line   14)
27547* line separator, MSP 430:               MSP430-Chars.       (line   14)
27548* line separator, NS32K:                 NS32K-Chars.        (line   18)
27549* line separator, OpenRISC:              OpenRISC-Chars.     (line    9)
27550* line separator, PJ:                    PJ-Chars.           (line   14)
27551* line separator, PowerPC:               PowerPC-Chars.      (line   18)
27552* line separator, RL78:                  RL78-Chars.         (line   14)
27553* line separator, RX:                    RX-Chars.           (line   14)
27554* line separator, S12Z:                  S12Z Syntax Overview.
27555                                                             (line   41)
27556* line separator, s390:                  s390 Characters.    (line   13)
27557* line separator, SCORE:                 SCORE-Chars.        (line   14)
27558* line separator, SH:                    SH-Chars.           (line    8)
27559* line separator, Sparc:                 Sparc-Chars.        (line   14)
27560* line separator, TIC54X:                TIC54X-Chars.       (line   17)
27561* line separator, TIC6X:                 TIC6X Syntax.       (line   13)
27562* line separator, V850:                  V850-Chars.         (line   13)
27563* line separator, VAX:                   VAX-Chars.          (line   14)
27564* line separator, Visium:                Visium Characters.  (line   14)
27565* line separator, XGATE:                 XGATE-Syntax.       (line   25)
27566* line separator, XStormy16:             XStormy16-Chars.    (line   14)
27567* line separator, Z80:                   Z80-Chars.          (line   13)
27568* line separator, Z8000:                 Z8000-Chars.        (line   13)
27569* lines starting with #:                 Comments.           (line   33)
27570* link register, ARC:                    ARC-Regs.           (line   35)
27571* linker:                                Object.             (line   15)
27572* linker, and assembler:                 Secs Background.    (line   10)
27573* linkonce directive:                    Linkonce.           (line    6)
27574* list directive:                        List.               (line    6)
27575* list directive, TIC54X:                TIC54X-Directives.  (line  129)
27576* listing control, turning off:          Nolist.             (line    6)
27577* listing control, turning on:           List.               (line    6)
27578* listing control: new page:             Eject.              (line    6)
27579* listing control: paper size:           Psize.              (line    6)
27580* listing control: subtitle:             Sbttl.              (line    6)
27581* listing control: title line:           Title.              (line    6)
27582* listings, enabling:                    a.                  (line    6)
27583* literal directive:                     Literal Directive.  (line    6)
27584* literal pool entries, s390:            s390 Literal Pool Entries.
27585                                                             (line    6)
27586* literal_position directive:            Literal Position Directive.
27587                                                             (line    6)
27588* literal_prefix directive:              Literal Prefix Directive.
27589                                                             (line    6)
27590* little endian output, MIPS:            Overview.           (line  858)
27591* little endian output, PJ:              Overview.           (line  762)
27592* little-endian output, MIPS:            MIPS Options.       (line   13)
27593* little-endian output, TIC6X:           TIC6X Options.      (line   46)
27594* LM32 line comment character:           LM32-Chars.         (line    6)
27595* LM32 line separator:                   LM32-Chars.         (line   12)
27596* LM32 modifiers:                        LM32-Modifiers.     (line    6)
27597* LM32 opcode summary:                   LM32 Opcodes.       (line    6)
27598* LM32 options (none):                   LM32 Options.       (line    6)
27599* LM32 register names:                   LM32-Regs.          (line    6)
27600* LM32 support:                          LM32-Dependent.     (line    6)
27601* ln directive:                          Ln.                 (line    6)
27602* lo directive, Nios II:                 Nios II Relocations.
27603                                                             (line   23)
27604* lo pseudo-op, V850:                    V850 Opcodes.       (line   22)
27605* loc directive:                         Loc.                (line    6)
27606* local common symbols:                  Lcomm.              (line    6)
27607* local directive:                       Local.              (line    6)
27608* local labels:                          Symbol Names.       (line   43)
27609* local symbol names:                    Symbol Names.       (line   30)
27610* local symbols, retaining in output:    L.                  (line    6)
27611* location counter:                      Dot.                (line    6)
27612* location counter, advancing:           Org.                (line    6)
27613* location counter, Z80:                 Z80-Chars.          (line   15)
27614* loc_mark_labels directive:             Loc_mark_labels.    (line    6)
27615* logical file name:                     File.               (line   13)
27616* logical line number:                   Line.               (line    6)
27617* logical line numbers:                  Comments.           (line   33)
27618* long directive:                        Long.               (line    6)
27619* long directive, i386:                  i386-Float.         (line   21)
27620* long directive, TIC54X:                TIC54X-Directives.  (line  133)
27621* long directive, x86-64:                i386-Float.         (line   21)
27622* longcall pseudo-op, V850:              V850 Opcodes.       (line  122)
27623* longcalls directive:                   Longcalls Directive.
27624                                                             (line    6)
27625* longjump pseudo-op, V850:              V850 Opcodes.       (line  128)
27626* Loongson Content Address Memory (CAM) generation override: MIPS ASE Instruction Generation Overrides.
27627                                                             (line   81)
27628* Loongson EXTensions (EXT) instructions generation override: MIPS ASE Instruction Generation Overrides.
27629                                                             (line   86)
27630* Loongson EXTensions R2 (EXT2) instructions generation override: MIPS ASE Instruction Generation Overrides.
27631                                                             (line   91)
27632* Loongson MultiMedia extensions Instructions (MMI) generation override: MIPS ASE Instruction Generation Overrides.
27633                                                             (line   76)
27634* loop counter, ARC:                     ARC-Regs.           (line   41)
27635* loop directive, TIC54X:                TIC54X-Directives.  (line  141)
27636* LOOP instructions, alignment:          Xtensa Automatic Alignment.
27637                                                             (line    6)
27638* low directive, M32R:                   M32R-Directives.    (line    9)
27639* lp register, V850:                     V850-Regs.          (line   68)
27640* lval:                                  Z8000 Directives.   (line   27)
27641* LWP, i386:                             i386-LWP.           (line    6)
27642* LWP, x86-64:                           i386-LWP.           (line    6)
27643* M16C architecture option:              M32C-Opts.          (line   12)
27644* M32C architecture option:              M32C-Opts.          (line    9)
27645* M32C line comment character:           M32C-Chars.         (line    6)
27646* M32C line separator:                   M32C-Chars.         (line   14)
27647* M32C modifiers:                        M32C-Modifiers.     (line    6)
27648* M32C options:                          M32C-Opts.          (line    6)
27649* M32C support:                          M32C-Dependent.     (line    6)
27650* M32R architecture options:             M32R-Opts.          (line    9)
27651* M32R architecture options <1>:         M32R-Opts.          (line   17)
27652* M32R architecture options <2>:         M32R-Opts.          (line   21)
27653* M32R directives:                       M32R-Directives.    (line    6)
27654* M32R options:                          M32R-Opts.          (line    6)
27655* M32R support:                          M32R-Dependent.     (line    6)
27656* M32R warnings:                         M32R-Warnings.      (line    6)
27657* M680x0 addressing modes:               M68K-Syntax.        (line   21)
27658* M680x0 architecture options:           M68K-Opts.          (line   99)
27659* M680x0 branch improvement:             M68K-Branch.        (line    6)
27660* M680x0 directives:                     M68K-Directives.    (line    6)
27661* M680x0 floating point:                 M68K-Float.         (line    6)
27662* M680x0 immediate character:            M68K-Chars.         (line   13)
27663* M680x0 line comment character:         M68K-Chars.         (line    6)
27664* M680x0 line separator:                 M68K-Chars.         (line   20)
27665* M680x0 opcodes:                        M68K-opcodes.       (line    6)
27666* M680x0 options:                        M68K-Opts.          (line    6)
27667* M680x0 pseudo-opcodes:                 M68K-Branch.        (line    6)
27668* M680x0 size modifiers:                 M68K-Syntax.        (line    8)
27669* M680x0 support:                        M68K-Dependent.     (line    6)
27670* M680x0 syntax:                         M68K-Syntax.        (line    8)
27671* M68HC11 addressing modes:              M68HC11-Syntax.     (line   29)
27672* M68HC11 and M68HC12 support:           M68HC11-Dependent.  (line    6)
27673* M68HC11 assembler directive .far:      M68HC11-Directives. (line   20)
27674* M68HC11 assembler directive .interrupt: M68HC11-Directives.
27675                                                             (line   26)
27676* M68HC11 assembler directive .mode:     M68HC11-Directives. (line   16)
27677* M68HC11 assembler directive .relax:    M68HC11-Directives. (line   10)
27678* M68HC11 assembler directive .xrefb:    M68HC11-Directives. (line   31)
27679* M68HC11 assembler directives:          M68HC11-Directives. (line    6)
27680* M68HC11 branch improvement:            M68HC11-Branch.     (line    6)
27681* M68HC11 floating point:                M68HC11-Float.      (line    6)
27682* M68HC11 line comment character:        M68HC11-Syntax.     (line   17)
27683* M68HC11 line separator:                M68HC11-Syntax.     (line   26)
27684* M68HC11 modifiers:                     M68HC11-Modifiers.  (line    6)
27685* M68HC11 opcodes:                       M68HC11-opcodes.    (line    6)
27686* M68HC11 options:                       M68HC11-Opts.       (line    6)
27687* M68HC11 pseudo-opcodes:                M68HC11-Branch.     (line    6)
27688* M68HC11 syntax:                        M68HC11-Syntax.     (line    6)
27689* M68HC12 assembler directives:          M68HC11-Directives. (line    6)
27690* mA6 command-line option, ARC:          ARC Options.        (line   14)
27691* mA7 command-line option, ARC:          ARC Options.        (line   39)
27692* machine dependencies:                  Machine Dependencies.
27693                                                             (line    6)
27694* machine directives, AArch64:           AArch64 Directives. (line    6)
27695* machine directives, ARC:               ARC Directives.     (line    6)
27696* machine directives, ARM:               ARM Directives.     (line    6)
27697* machine directives, BPF:               BPF Directives.     (line    6)
27698* machine directives, H8/300 (none):     H8/300 Directives.  (line    6)
27699* machine directives, MSP 430:           MSP430 Directives.  (line    6)
27700* machine directives, Nios II:           Nios II Directives. (line    6)
27701* machine directives, OPENRISC:          OpenRISC-Directives.
27702                                                             (line    6)
27703* machine directives, PRU:               PRU Directives.     (line    6)
27704* machine directives, RISC-V:            RISC-V-Directives.  (line    6)
27705* machine directives, SH:                SH Directives.      (line    6)
27706* machine directives, SPARC:             Sparc-Directives.   (line    6)
27707* machine directives, TIC54X:            TIC54X-Directives.  (line    6)
27708* machine directives, TIC6X:             TIC6X Directives.   (line    6)
27709* machine directives, TILE-Gx:           TILE-Gx Directives. (line    6)
27710* machine directives, TILEPro:           TILEPro Directives. (line    6)
27711* machine directives, V850:              V850 Directives.    (line    6)
27712* machine directives, VAX:               VAX-directives.     (line    6)
27713* machine directives, x86:               i386-Directives.    (line    6)
27714* machine directives, XStormy16:         XStormy16 Directives.
27715                                                             (line    6)
27716* machine independent directives:        Pseudo Ops.         (line    6)
27717* machine instructions (not covered):    Manual.             (line   14)
27718* machine relocations, Nios II:          Nios II Relocations.
27719                                                             (line    6)
27720* machine relocations, PRU:              PRU Relocations.    (line    6)
27721* machine-independent syntax:            Syntax.             (line    6)
27722* macro directive:                       Macro.              (line   28)
27723* macro directive, TIC54X:               TIC54X-Directives.  (line  151)
27724* macros:                                Macro.              (line    6)
27725* macros, count executed:                Macro.              (line  142)
27726* Macros, MSP 430:                       MSP430-Macros.      (line    6)
27727* macros, TIC54X:                        TIC54X-Macros.      (line    6)
27728* make rules:                            MD.                 (line    6)
27729* manual, structure and purpose:         Manual.             (line    6)
27730* marc600 command-line option, ARC:      ARC Options.        (line   14)
27731* mARC601 command-line option, ARC:      ARC Options.        (line   27)
27732* mARC700 command-line option, ARC:      ARC Options.        (line   39)
27733* march command-line option, C-SKY:      C-SKY Options.      (line    6)
27734* march command-line option, Nios II:    Nios II Options.    (line   28)
27735* math builtins, TIC54X:                 TIC54X-Builtins.    (line    6)
27736* Maximum number of continuation lines:  listing.            (line   34)
27737* mbig-endian command-line option, C-SKY: C-SKY Options.     (line   18)
27738* mbranch-stub command-line option, C-SKY: C-SKY Options.    (line   34)
27739* mcache command-line option, C-SKY:     C-SKY Options.      (line  100)
27740* mcp command-line option, C-SKY:        C-SKY Options.      (line   97)
27741* mcpu command-line option, C-SKY:       C-SKY Options.      (line   10)
27742* mdsp command-line option, C-SKY:       C-SKY Options.      (line  109)
27743* medsp command-line option, C-SKY:      C-SKY Options.      (line  112)
27744* melrw command-line option, C-SKY:      C-SKY Options.      (line   64)
27745* mEM command-line option, ARC:          ARC Options.        (line   42)
27746* memory references, i386:               i386-Memory.        (line    6)
27747* memory references, x86-64:             i386-Memory.        (line    6)
27748* memory-mapped registers, TIC54X:       TIC54X-MMRegs.      (line    6)
27749* merging text and data sections:        R.                  (line    6)
27750* messages from assembler:               Errors.             (line    6)
27751* Meta architectures:                    Meta Options.       (line    6)
27752* Meta line comment character:           Meta-Chars.         (line    6)
27753* Meta line separator:                   Meta-Chars.         (line    8)
27754* Meta options:                          Meta Options.       (line    6)
27755* Meta registers:                        Meta-Regs.          (line    6)
27756* Meta support:                          Meta-Dependent.     (line    6)
27757* mforce2bsr command-line option, C-SKY: C-SKY Options.      (line   43)
27758* mhard-float command-line option, C-SKY: C-SKY Options.     (line   91)
27759* mHS command-line option, ARC:          ARC Options.        (line   64)
27760* MicroBlaze architectures:              MicroBlaze-Dependent.
27761                                                             (line    6)
27762* MicroBlaze directives:                 MicroBlaze Directives.
27763                                                             (line    6)
27764* MicroBlaze line comment character:     MicroBlaze-Chars.   (line    6)
27765* MicroBlaze line separator:             MicroBlaze-Chars.   (line   14)
27766* MicroBlaze support:                    MicroBlaze-Dependent.
27767                                                             (line   12)
27768* minus, permitted arguments:            Infix Ops.          (line   50)
27769* MIPS 32-bit microMIPS instruction generation override: MIPS assembly options.
27770                                                             (line   18)
27771* MIPS architecture options:             MIPS Options.       (line   29)
27772* MIPS big-endian output:                MIPS Options.       (line   13)
27773* MIPS CPU override:                     MIPS ISA.           (line   18)
27774* MIPS cyclic redundancy check (CRC) instruction generation override: MIPS ASE Instruction Generation Overrides.
27775                                                             (line   68)
27776* MIPS directives to override command-line options: MIPS assembly options.
27777                                                             (line    6)
27778* MIPS DSP Release 1 instruction generation override: MIPS ASE Instruction Generation Overrides.
27779                                                             (line   21)
27780* MIPS DSP Release 2 instruction generation override: MIPS ASE Instruction Generation Overrides.
27781                                                             (line   26)
27782* MIPS DSP Release 3 instruction generation override: MIPS ASE Instruction Generation Overrides.
27783                                                             (line   31)
27784* MIPS endianness:                       Overview.           (line  855)
27785* MIPS eXtended Physical Address (XPA) instruction generation override: MIPS ASE Instruction Generation Overrides.
27786                                                             (line   57)
27787* MIPS Global INValidate (GINV) instruction generation override: MIPS ASE Instruction Generation Overrides.
27788                                                             (line   72)
27789* MIPS IEEE 754 NaN data encoding selection: MIPS NaN Encodings.
27790                                                             (line    6)
27791* MIPS ISA:                              Overview.           (line  861)
27792* MIPS ISA override:                     MIPS ISA.           (line    6)
27793* MIPS line comment character:           MIPS-Chars.         (line    6)
27794* MIPS line separator:                   MIPS-Chars.         (line   14)
27795* MIPS little-endian output:             MIPS Options.       (line   13)
27796* MIPS MCU instruction generation override: MIPS ASE Instruction Generation Overrides.
27797                                                             (line   42)
27798* MIPS MDMX instruction generation override: MIPS ASE Instruction Generation Overrides.
27799                                                             (line   16)
27800* MIPS MIPS-3D instruction generation override: MIPS ASE Instruction Generation Overrides.
27801                                                             (line    6)
27802* MIPS MT instruction generation override: MIPS ASE Instruction Generation Overrides.
27803                                                             (line   37)
27804* MIPS option stack:                     MIPS Option Stack.  (line    6)
27805* MIPS processor:                        MIPS-Dependent.     (line    6)
27806* MIPS SIMD Architecture instruction generation override: MIPS ASE Instruction Generation Overrides.
27807                                                             (line   47)
27808* MIPS16e2 instruction generation override: MIPS ASE Instruction Generation Overrides.
27809                                                             (line   61)
27810* mistack command-line option, C-SKY:    C-SKY Options.      (line   82)
27811* MIT:                                   M68K-Syntax.        (line    6)
27812* mjsri2bsr command-line option, C-SKY:  C-SKY Options.      (line   52)
27813* mlabr command-line option, C-SKY:      C-SKY Options.      (line   75)
27814* mlaf command-line option, C-SKY:       C-SKY Options.      (line   69)
27815* mlib directive, TIC54X:                TIC54X-Directives.  (line  157)
27816* mlink-relax command-line option, PRU:  PRU Options.        (line    6)
27817* mlist directive, TIC54X:               TIC54X-Directives.  (line  162)
27818* mliterals-after-br command-line option, C-SKY: C-SKY Options.
27819                                                             (line   75)
27820* mliterals-after-func command-line option, C-SKY: C-SKY Options.
27821                                                             (line   69)
27822* mlittle-endian command-line option, C-SKY: C-SKY Options.  (line   14)
27823* mljump command-line option, C-SKY:     C-SKY Options.      (line   26)
27824* MMIX assembler directive BSPEC:        MMIX-Pseudos.       (line  137)
27825* MMIX assembler directive BYTE:         MMIX-Pseudos.       (line  101)
27826* MMIX assembler directive ESPEC:        MMIX-Pseudos.       (line  137)
27827* MMIX assembler directive GREG:         MMIX-Pseudos.       (line   53)
27828* MMIX assembler directive IS:           MMIX-Pseudos.       (line   44)
27829* MMIX assembler directive LOC:          MMIX-Pseudos.       (line    7)
27830* MMIX assembler directive LOCAL:        MMIX-Pseudos.       (line   29)
27831* MMIX assembler directive OCTA:         MMIX-Pseudos.       (line  113)
27832* MMIX assembler directive PREFIX:       MMIX-Pseudos.       (line  125)
27833* MMIX assembler directive TETRA:        MMIX-Pseudos.       (line  113)
27834* MMIX assembler directive WYDE:         MMIX-Pseudos.       (line  113)
27835* MMIX assembler directives:             MMIX-Pseudos.       (line    6)
27836* MMIX line comment characters:          MMIX-Chars.         (line    6)
27837* MMIX options:                          MMIX-Opts.          (line    6)
27838* MMIX pseudo-op BSPEC:                  MMIX-Pseudos.       (line  137)
27839* MMIX pseudo-op BYTE:                   MMIX-Pseudos.       (line  101)
27840* MMIX pseudo-op ESPEC:                  MMIX-Pseudos.       (line  137)
27841* MMIX pseudo-op GREG:                   MMIX-Pseudos.       (line   53)
27842* MMIX pseudo-op IS:                     MMIX-Pseudos.       (line   44)
27843* MMIX pseudo-op LOC:                    MMIX-Pseudos.       (line    7)
27844* MMIX pseudo-op LOCAL:                  MMIX-Pseudos.       (line   29)
27845* MMIX pseudo-op OCTA:                   MMIX-Pseudos.       (line  113)
27846* MMIX pseudo-op PREFIX:                 MMIX-Pseudos.       (line  125)
27847* MMIX pseudo-op TETRA:                  MMIX-Pseudos.       (line  113)
27848* MMIX pseudo-op WYDE:                   MMIX-Pseudos.       (line  113)
27849* MMIX pseudo-ops:                       MMIX-Pseudos.       (line    6)
27850* MMIX register names:                   MMIX-Regs.          (line    6)
27851* MMIX support:                          MMIX-Dependent.     (line    6)
27852* mmixal differences:                    MMIX-mmixal.        (line    6)
27853* mmp command-line option, C-SKY:        C-SKY Options.      (line   94)
27854* mmregs directive, TIC54X:              TIC54X-Directives.  (line  167)
27855* mmsg directive, TIC54X:                TIC54X-Directives.  (line   75)
27856* MMX, i386:                             i386-SIMD.          (line    6)
27857* MMX, x86-64:                           i386-SIMD.          (line    6)
27858* mnemonic compatibility, i386:          i386-Mnemonics.     (line   81)
27859* mnemonic suffixes, i386:               i386-Variations.    (line   28)
27860* mnemonic suffixes, x86-64:             i386-Variations.    (line   28)
27861* mnemonics for opcodes, VAX:            VAX-opcodes.        (line    6)
27862* mnemonics, AVR:                        AVR Opcodes.        (line    6)
27863* mnemonics, D10V:                       D10V-Opcodes.       (line    6)
27864* mnemonics, D30V:                       D30V-Opcodes.       (line    6)
27865* mnemonics, H8/300:                     H8/300 Opcodes.     (line    6)
27866* mnemonics, LM32:                       LM32 Opcodes.       (line    6)
27867* mnemonics, OpenRISC:                   OpenRISC-Opcodes.   (line    6)
27868* mnemonics, SH:                         SH Opcodes.         (line    6)
27869* mnemonics, Z8000:                      Z8000 Opcodes.      (line    6)
27870* mno-branch-stub command-line option, C-SKY: C-SKY Options. (line   34)
27871* mno-elrw command-line option, C-SKY:   C-SKY Options.      (line   64)
27872* mno-force2bsr command-line option, C-SKY: C-SKY Options.   (line   43)
27873* mno-istack command-line option, C-SKY: C-SKY Options.      (line   82)
27874* mno-jsri2bsr command-line option, C-SKY: C-SKY Options.    (line   52)
27875* mno-labr command-line option, C-SKY:   C-SKY Options.      (line   75)
27876* mno-laf command-line option, C-SKY:    C-SKY Options.      (line   69)
27877* mno-link-relax command-line option, PRU: PRU Options.      (line   12)
27878* mno-literals-after-func command-line option, C-SKY: C-SKY Options.
27879                                                             (line   69)
27880* mno-ljump command-line option, C-SKY:  C-SKY Options.      (line   26)
27881* mno-lrw command-line option, C-SKY:    C-SKY Options.      (line   59)
27882* mno-warn-regname-label command-line option, PRU: PRU Options.
27883                                                             (line   16)
27884* mnolist directive, TIC54X:             TIC54X-Directives.  (line  162)
27885* mnoliterals-after-br command-line option, C-SKY: C-SKY Options.
27886                                                             (line   75)
27887* mnolrw command-line option, C-SKY:     C-SKY Options.      (line   59)
27888* mnps400 command-line option, ARC:      ARC Options.        (line   79)
27889* modifiers, M32C:                       M32C-Modifiers.     (line    6)
27890* module layout, WebAssembly:            WebAssembly-module-layout.
27891                                                             (line    6)
27892* Motorola syntax for the 680x0:         M68K-Moto-Syntax.   (line    6)
27893* MOVI instructions, relaxation:         Xtensa Immediate Relaxation.
27894                                                             (line   12)
27895* MOVN, MOVZ and MOVK group relocations, AArch64: AArch64-Relocations.
27896                                                             (line    6)
27897* MOVW and MOVT relocations, ARM:        ARM-Relocations.    (line   21)
27898* MRI compatibility mode:                M.                  (line    6)
27899* mri directive:                         MRI.                (line    6)
27900* MRI mode, temporarily:                 MRI.                (line    6)
27901* msecurity command-line option, C-SKY:  C-SKY Options.      (line  103)
27902* MSP 430 floating point (IEEE):         MSP430 Floating Point.
27903                                                             (line    6)
27904* MSP 430 identifiers:                   MSP430-Chars.       (line   17)
27905* MSP 430 line comment character:        MSP430-Chars.       (line    6)
27906* MSP 430 line separator:                MSP430-Chars.       (line   14)
27907* MSP 430 machine directives:            MSP430 Directives.  (line    6)
27908* MSP 430 macros:                        MSP430-Macros.      (line    6)
27909* MSP 430 opcodes:                       MSP430 Opcodes.     (line    6)
27910* MSP 430 options (none):                MSP430 Options.     (line    6)
27911* MSP 430 profiling capability:          MSP430 Profiling Capability.
27912                                                             (line    6)
27913* MSP 430 register names:                MSP430-Regs.        (line    6)
27914* MSP 430 support:                       MSP430-Dependent.   (line    6)
27915* MSP430 Assembler Extensions:           MSP430-Ext.         (line    6)
27916* mspabi_attribute directive, MSP430:    MSP430 Directives.  (line   38)
27917* mtrust command-line option, C-SKY:     C-SKY Options.      (line  106)
27918* mul instruction, i386:                 i386-Notes.         (line    6)
27919* mul instruction, x86-64:               i386-Notes.         (line    6)
27920* mvdsp command-line option, C-SKY:      C-SKY Options.      (line  115)
27921* N32K support:                          NS32K-Dependent.    (line    6)
27922* name:                                  Z8000 Directives.   (line   18)
27923* named section:                         Section.            (line    6)
27924* named sections:                        Ld Sections.        (line    8)
27925* names, symbol:                         Symbol Names.       (line    6)
27926* naming object file:                    o.                  (line    6)
27927* NDS32 options:                         NDS32 Options.      (line    6)
27928* NDS32 processor:                       NDS32-Dependent.    (line    6)
27929* new page, in listings:                 Eject.              (line    6)
27930* newblock directive, TIC54X:            TIC54X-Directives.  (line  173)
27931* newline (\n):                          Strings.            (line   21)
27932* newline, required at file end:         Statements.         (line   14)
27933* Nios II line comment character:        Nios II Chars.      (line    6)
27934* Nios II line separator character:      Nios II Chars.      (line    6)
27935* Nios II machine directives:            Nios II Directives. (line    6)
27936* Nios II machine relocations:           Nios II Relocations.
27937                                                             (line    6)
27938* Nios II opcodes:                       Nios II Opcodes.    (line    6)
27939* Nios II options:                       Nios II Options.    (line    6)
27940* Nios II support:                       NiosII-Dependent.   (line    6)
27941* Nios support:                          NiosII-Dependent.   (line    6)
27942* no-absolute-literals directive:        Absolute Literals Directive.
27943                                                             (line    6)
27944* no-force2bsr command-line option, C-SKY: C-SKY Options.    (line   43)
27945* no-jsri2bsr command-line option, C-SKY: C-SKY Options.     (line   52)
27946* no-longcalls directive:                Longcalls Directive.
27947                                                             (line    6)
27948* no-relax command-line option, Nios II: Nios II Options.    (line   19)
27949* no-schedule directive:                 Schedule Directive. (line    6)
27950* no-transform directive:                Transform Directive.
27951                                                             (line    6)
27952* nodelay directive, OpenRISC:           OpenRISC-Directives.
27953                                                             (line   15)
27954* nolist directive:                      Nolist.             (line    6)
27955* nolist directive, TIC54X:              TIC54X-Directives.  (line  129)
27956* NOP pseudo op, ARM:                    ARM Opcodes.        (line    9)
27957* nops directive:                        Nops.               (line    6)
27958* notes for Alpha:                       Alpha Notes.        (line    6)
27959* notes for WebAssembly:                 WebAssembly-Notes.  (line    6)
27960* NS32K line comment character:          NS32K-Chars.        (line    6)
27961* NS32K line separator:                  NS32K-Chars.        (line   18)
27962* null-terminated strings:               Asciz.              (line    6)
27963* number constants:                      Numbers.            (line    6)
27964* number of macros executed:             Macro.              (line  142)
27965* numbered subsections:                  Sub-Sections.       (line    6)
27966* numbers, 16-bit:                       hword.              (line    6)
27967* numeric values:                        Expressions.        (line    6)
27968* nword directive, SPARC:                Sparc-Directives.   (line   20)
27969* Object Attribute, RISC-V:              RISC-V-ATTRIBUTE.   (line    6)
27970* object attributes:                     Object Attributes.  (line    6)
27971* object file:                           Object.             (line    6)
27972* object file format:                    Object Formats.     (line    6)
27973* object file name:                      o.                  (line    6)
27974* object file, after errors:             Z.                  (line    6)
27975* obsolescent directives:                Deprecated.         (line    6)
27976* octa directive:                        Octa.               (line    6)
27977* octal character code (\DDD):           Strings.            (line   30)
27978* octal integers:                        Integers.           (line    9)
27979* offset directive:                      Offset.             (line    6)
27980* offset directive, V850:                V850 Directives.    (line    6)
27981* opcode mnemonics, VAX:                 VAX-opcodes.        (line    6)
27982* opcode names, TILE-Gx:                 TILE-Gx Opcodes.    (line    6)
27983* opcode names, TILEPro:                 TILEPro Opcodes.    (line    6)
27984* opcode names, Xtensa:                  Xtensa Opcodes.     (line    6)
27985* opcode summary, AVR:                   AVR Opcodes.        (line    6)
27986* opcode summary, D10V:                  D10V-Opcodes.       (line    6)
27987* opcode summary, D30V:                  D30V-Opcodes.       (line    6)
27988* opcode summary, H8/300:                H8/300 Opcodes.     (line    6)
27989* opcode summary, LM32:                  LM32 Opcodes.       (line    6)
27990* opcode summary, OpenRISC:              OpenRISC-Opcodes.   (line    6)
27991* opcode summary, SH:                    SH Opcodes.         (line    6)
27992* opcode summary, Z8000:                 Z8000 Opcodes.      (line    6)
27993* opcodes for AArch64:                   AArch64 Opcodes.    (line    6)
27994* opcodes for ARC:                       ARC Opcodes.        (line    6)
27995* opcodes for ARM:                       ARM Opcodes.        (line    6)
27996* opcodes for BPF:                       BPF Opcodes.        (line    6)
27997* opcodes for MSP 430:                   MSP430 Opcodes.     (line    6)
27998* opcodes for Nios II:                   Nios II Opcodes.    (line    6)
27999* opcodes for PRU:                       PRU Opcodes.        (line    6)
28000* opcodes for V850:                      V850 Opcodes.       (line    6)
28001* opcodes, M680x0:                       M68K-opcodes.       (line    6)
28002* opcodes, M68HC11:                      M68HC11-opcodes.    (line    6)
28003* opcodes, WebAssembly:                  WebAssembly-Opcodes.
28004                                                             (line    6)
28005* OPENRISC floating point (IEEE):        OpenRISC-Float.     (line    6)
28006* OpenRISC line comment character:       OpenRISC-Chars.     (line    6)
28007* OpenRISC line separator:               OpenRISC-Chars.     (line    9)
28008* OPENRISC machine directives:           OpenRISC-Directives.
28009                                                             (line    6)
28010* OpenRISC opcode summary:               OpenRISC-Opcodes.   (line    6)
28011* OpenRISC registers:                    OpenRISC-Regs.      (line    6)
28012* OpenRISC relocations:                  OpenRISC-Relocs.    (line    6)
28013* OPENRISC support:                      OpenRISC-Dependent. (line    6)
28014* OPENRISC syntax:                       OpenRISC-Dependent. (line   13)
28015* operand delimiters, i386:              i386-Variations.    (line   15)
28016* operand delimiters, x86-64:            i386-Variations.    (line   15)
28017* operand notation, VAX:                 VAX-operands.       (line    6)
28018* operands in expressions:               Arguments.          (line    6)
28019* operator precedence:                   Infix Ops.          (line   11)
28020* operators, in expressions:             Operators.          (line    6)
28021* operators, permitted arguments:        Infix Ops.          (line    6)
28022* optimization, D10V:                    Overview.           (line  638)
28023* optimization, D30V:                    Overview.           (line  643)
28024* optimizations:                         Xtensa Optimizations.
28025                                                             (line    6)
28026* Option directive:                      RISC-V-Directives.  (line   34)
28027* option directive:                      RISC-V-Directives.  (line   34)
28028* option directive, TIC54X:              TIC54X-Directives.  (line  177)
28029* option summary:                        Overview.           (line    6)
28030* options for AArch64 (none):            AArch64 Options.    (line    6)
28031* options for Alpha:                     Alpha Options.      (line    6)
28032* options for ARC:                       ARC Options.        (line    6)
28033* options for ARM (none):                ARM Options.        (line    6)
28034* options for AVR (none):                AVR Options.        (line    6)
28035* options for Blackfin (none):           Blackfin Options.   (line    6)
28036* options for BPF (none):                BPF Options.        (line    6)
28037* options for C-SKY:                     C-SKY Options.      (line    6)
28038* options for i386:                      i386-Options.       (line    6)
28039* options for IA-64:                     IA-64 Options.      (line    6)
28040* options for LM32 (none):               LM32 Options.       (line    6)
28041* options for Meta:                      Meta Options.       (line    6)
28042* options for MSP430 (none):             MSP430 Options.     (line    6)
28043* options for NDS32:                     NDS32 Options.      (line    6)
28044* options for Nios II:                   Nios II Options.    (line    6)
28045* options for PDP-11:                    PDP-11-Options.     (line    6)
28046* options for PowerPC:                   PowerPC-Opts.       (line    6)
28047* options for PRU:                       PRU Options.        (line    6)
28048* options for s390:                      s390 Options.       (line    6)
28049* options for SCORE:                     SCORE-Opts.         (line    6)
28050* options for SPARC:                     Sparc-Opts.         (line    6)
28051* options for TIC6X:                     TIC6X Options.      (line    6)
28052* options for V850 (none):               V850 Options.       (line    6)
28053* options for VAX/VMS:                   VAX-Opts.           (line   42)
28054* options for Visium:                    Visium Options.     (line    6)
28055* options for x86-64:                    i386-Options.       (line    6)
28056* options for Z80:                       Z80 Options.        (line    6)
28057* options, all versions of assembler:    Invoking.           (line    6)
28058* options, command line:                 Command Line.       (line   13)
28059* options, CRIS:                         CRIS-Opts.          (line    6)
28060* options, D10V:                         D10V-Opts.          (line    6)
28061* options, D30V:                         D30V-Opts.          (line    6)
28062* options, Epiphany:                     Epiphany Options.   (line    6)
28063* options, H8/300:                       H8/300 Options.     (line    6)
28064* options, IP2K:                         IP2K-Opts.          (line    6)
28065* options, M32C:                         M32C-Opts.          (line    6)
28066* options, M32R:                         M32R-Opts.          (line    6)
28067* options, M680x0:                       M68K-Opts.          (line    6)
28068* options, M68HC11:                      M68HC11-Opts.       (line    6)
28069* options, MMIX:                         MMIX-Opts.          (line    6)
28070* options, PJ:                           PJ Options.         (line    6)
28071* options, RL78:                         RL78-Opts.          (line    6)
28072* options, RX:                           RX-Opts.            (line    6)
28073* options, S12Z:                         S12Z Options.       (line    6)
28074* options, SH:                           SH Options.         (line    6)
28075* options, TIC54X:                       TIC54X-Opts.        (line    6)
28076* options, XGATE:                        XGATE-Opts.         (line    6)
28077* options, Z8000:                        Z8000 Options.      (line    6)
28078* org directive:                         Org.                (line    6)
28079* other attribute, of a.out symbol:      Symbol Other.       (line    6)
28080* output file:                           Object.             (line    6)
28081* output section padding:                no-pad-sections.    (line    6)
28082* p2align directive:                     P2align.            (line    6)
28083* p2alignl directive:                    P2align.            (line   30)
28084* p2alignw directive:                    P2align.            (line   30)
28085* padding the location counter:          Align.              (line    6)
28086* padding the location counter given a power of two: P2align.
28087                                                             (line    6)
28088* padding the location counter given number of bytes: Balign.
28089                                                             (line    6)
28090* page, in listings:                     Eject.              (line    6)
28091* paper size, for listings:              Psize.              (line    6)
28092* paths for .include:                    I.                  (line    6)
28093* patterns, writing in memory:           Fill.               (line    6)
28094* PDP-11 comments:                       PDP-11-Syntax.      (line   16)
28095* PDP-11 floating-point register syntax: PDP-11-Syntax.      (line   13)
28096* PDP-11 general-purpose register syntax: PDP-11-Syntax.     (line   10)
28097* PDP-11 instruction naming:             PDP-11-Mnemonics.   (line    6)
28098* PDP-11 line separator:                 PDP-11-Syntax.      (line   19)
28099* PDP-11 support:                        PDP-11-Dependent.   (line    6)
28100* PDP-11 syntax:                         PDP-11-Syntax.      (line    6)
28101* PIC code generation for ARM:           ARM Options.        (line  366)
28102* PIC code generation for M32R:          M32R-Opts.          (line   42)
28103* pic command-line option, C-SKY:        C-SKY Options.      (line   22)
28104* PIC selection, MIPS:                   MIPS Options.       (line   21)
28105* PJ endianness:                         Overview.           (line  759)
28106* PJ line comment character:             PJ-Chars.           (line    6)
28107* PJ line separator:                     PJ-Chars.           (line   14)
28108* PJ options:                            PJ Options.         (line    6)
28109* PJ support:                            PJ-Dependent.       (line    6)
28110* plus, permitted arguments:             Infix Ops.          (line   45)
28111* pmem directive, PRU:                   PRU Relocations.    (line    6)
28112* popsection directive:                  PopSection.         (line    6)
28113* Position-independent code, CRIS:       CRIS-Opts.          (line   27)
28114* Position-independent code, symbols in, CRIS: CRIS-Pic.     (line    6)
28115* PowerPC architectures:                 PowerPC-Opts.       (line    6)
28116* PowerPC directives:                    PowerPC-Pseudo.     (line    6)
28117* PowerPC line comment character:        PowerPC-Chars.      (line    6)
28118* PowerPC line separator:                PowerPC-Chars.      (line   18)
28119* PowerPC options:                       PowerPC-Opts.       (line    6)
28120* PowerPC support:                       PPC-Dependent.      (line    6)
28121* precedence of operators:               Infix Ops.          (line   11)
28122* precision, floating point:             Flonums.            (line    6)
28123* prefix operators:                      Prefix Ops.         (line    6)
28124* prefixes, i386:                        i386-Prefixes.      (line    6)
28125* preprocessing:                         Preprocessing.      (line    6)
28126* preprocessing, turning on and off:     Preprocessing.      (line   26)
28127* previous directive:                    Previous.           (line    6)
28128* primary attributes, COFF symbols:      COFF Symbols.       (line   13)
28129* print directive:                       Print.              (line    6)
28130* proc directive, OpenRISC:              OpenRISC-Directives.
28131                                                             (line   20)
28132* proc directive, SPARC:                 Sparc-Directives.   (line   25)
28133* Processor Identification register, ARC: ARC-Regs.          (line   51)
28134* profiler directive, MSP 430:           MSP430 Directives.  (line   26)
28135* profiling capability for MSP 430:      MSP430 Profiling Capability.
28136                                                             (line    6)
28137* Program Counter, ARC:                  ARC-Regs.           (line   54)
28138* protected directive:                   Protected.          (line    6)
28139* PRU line comment character:            PRU Chars.          (line    6)
28140* PRU machine directives:                PRU Directives.     (line    6)
28141* PRU machine relocations:               PRU Relocations.    (line    6)
28142* PRU opcodes:                           PRU Opcodes.        (line    6)
28143* PRU options:                           PRU Options.        (line    6)
28144* PRU support:                           PRU-Dependent.      (line    6)
28145* pseudo map fd, BPF:                    BPF-Pseudo-Maps.    (line    6)
28146* pseudo-op .arch, CRIS:                 CRIS-Pseudos.       (line   50)
28147* pseudo-op .dword, CRIS:                CRIS-Pseudos.       (line   12)
28148* pseudo-op .syntax, CRIS:               CRIS-Pseudos.       (line   18)
28149* pseudo-op BSPEC, MMIX:                 MMIX-Pseudos.       (line  137)
28150* pseudo-op BYTE, MMIX:                  MMIX-Pseudos.       (line  101)
28151* pseudo-op ESPEC, MMIX:                 MMIX-Pseudos.       (line  137)
28152* pseudo-op GREG, MMIX:                  MMIX-Pseudos.       (line   53)
28153* pseudo-op IS, MMIX:                    MMIX-Pseudos.       (line   44)
28154* pseudo-op LOC, MMIX:                   MMIX-Pseudos.       (line    7)
28155* pseudo-op LOCAL, MMIX:                 MMIX-Pseudos.       (line   29)
28156* pseudo-op OCTA, MMIX:                  MMIX-Pseudos.       (line  113)
28157* pseudo-op PREFIX, MMIX:                MMIX-Pseudos.       (line  125)
28158* pseudo-op TETRA, MMIX:                 MMIX-Pseudos.       (line  113)
28159* pseudo-op WYDE, MMIX:                  MMIX-Pseudos.       (line  113)
28160* pseudo-opcodes for XStormy16:          XStormy16 Opcodes.  (line    6)
28161* pseudo-opcodes, M680x0:                M68K-Branch.        (line    6)
28162* pseudo-opcodes, M68HC11:               M68HC11-Branch.     (line    6)
28163* pseudo-ops for branch, VAX:            VAX-branch.         (line    6)
28164* pseudo-ops, CRIS:                      CRIS-Pseudos.       (line    6)
28165* pseudo-ops, machine independent:       Pseudo Ops.         (line    6)
28166* pseudo-ops, MMIX:                      MMIX-Pseudos.       (line    6)
28167* psize directive:                       Psize.              (line    6)
28168* PSR bits:                              IA-64-Bits.         (line    6)
28169* pstring directive, TIC54X:             TIC54X-Directives.  (line  206)
28170* psw register, V850:                    V850-Regs.          (line   80)
28171* purgem directive:                      Purgem.             (line    6)
28172* purpose of GNU assembler:              GNU Assembler.      (line   12)
28173* pushsection directive:                 PushSection.        (line    6)
28174* quad directive:                        Quad.               (line    6)
28175* quad directive, i386:                  i386-Float.         (line   21)
28176* quad directive, x86-64:                i386-Float.         (line   21)
28177* real-mode code, i386:                  i386-16bit.         (line    6)
28178* ref directive, TIC54X:                 TIC54X-Directives.  (line  101)
28179* refsym directive, MSP 430:             MSP430 Directives.  (line   30)
28180* register directive, SPARC:             Sparc-Directives.   (line   29)
28181* register name prefix character, ARC:   ARC-Chars.          (line    7)
28182* register names, AArch64:               AArch64-Regs.       (line    6)
28183* register names, Alpha:                 Alpha-Regs.         (line    6)
28184* register names, ARC:                   ARC-Regs.           (line    6)
28185* register names, ARM:                   ARM-Regs.           (line    6)
28186* register names, AVR:                   AVR-Regs.           (line    6)
28187* register names, BPF:                   BPF-Regs.           (line    6)
28188* register names, CRIS:                  CRIS-Regs.          (line    6)
28189* register names, H8/300:                H8/300-Regs.        (line    6)
28190* register names, IA-64:                 IA-64-Regs.         (line    6)
28191* register names, LM32:                  LM32-Regs.          (line    6)
28192* register names, MMIX:                  MMIX-Regs.          (line    6)
28193* register names, MSP 430:               MSP430-Regs.        (line    6)
28194* register names, OpenRISC:              OpenRISC-Regs.      (line    6)
28195* register names, S12Z:                  S12Z Addressing Modes.
28196                                                             (line   28)
28197* register names, Sparc:                 Sparc-Regs.         (line    6)
28198* register names, TILE-Gx:               TILE-Gx Registers.  (line    6)
28199* register names, TILEPro:               TILEPro Registers.  (line    6)
28200* register names, V850:                  V850-Regs.          (line    6)
28201* register names, VAX:                   VAX-operands.       (line   17)
28202* register names, Visium:                Visium Registers.   (line    6)
28203* register names, Xtensa:                Xtensa Registers.   (line    6)
28204* register names, Z80:                   Z80-Regs.           (line    6)
28205* register naming, s390:                 s390 Register.      (line    6)
28206* register notation, S12Z:               S12Z Register Notation.
28207                                                             (line    6)
28208* register operands, i386:               i386-Variations.    (line   15)
28209* register operands, x86-64:             i386-Variations.    (line   15)
28210* registers, D10V:                       D10V-Regs.          (line    6)
28211* registers, D30V:                       D30V-Regs.          (line    6)
28212* registers, i386:                       i386-Regs.          (line    6)
28213* registers, Meta:                       Meta-Regs.          (line    6)
28214* registers, SH:                         SH-Regs.            (line    6)
28215* registers, TIC54X memory-mapped:       TIC54X-MMRegs.      (line    6)
28216* registers, x86-64:                     i386-Regs.          (line    6)
28217* registers, Z8000:                      Z8000-Regs.         (line    6)
28218* relax-all command-line option, Nios II: Nios II Options.   (line   13)
28219* relax-section command-line option, Nios II: Nios II Options.
28220                                                             (line    6)
28221* relaxation:                            Xtensa Relaxation.  (line    6)
28222* relaxation of ADDI instructions:       Xtensa Immediate Relaxation.
28223                                                             (line   43)
28224* relaxation of branch instructions:     Xtensa Branch Relaxation.
28225                                                             (line    6)
28226* relaxation of call instructions:       Xtensa Call Relaxation.
28227                                                             (line    6)
28228* relaxation of immediate fields:        Xtensa Immediate Relaxation.
28229                                                             (line    6)
28230* relaxation of jump instructions:       Xtensa Jump Relaxation.
28231                                                             (line    6)
28232* relaxation of L16SI instructions:      Xtensa Immediate Relaxation.
28233                                                             (line   23)
28234* relaxation of L16UI instructions:      Xtensa Immediate Relaxation.
28235                                                             (line   23)
28236* relaxation of L32I instructions:       Xtensa Immediate Relaxation.
28237                                                             (line   23)
28238* relaxation of L8UI instructions:       Xtensa Immediate Relaxation.
28239                                                             (line   23)
28240* relaxation of MOVI instructions:       Xtensa Immediate Relaxation.
28241                                                             (line   12)
28242* reloc directive:                       Reloc.              (line    6)
28243* relocation:                            Sections.           (line    6)
28244* relocation example:                    Ld Sections.        (line   40)
28245* relocations, AArch64:                  AArch64-Relocations.
28246                                                             (line    6)
28247* relocations, Alpha:                    Alpha-Relocs.       (line    6)
28248* relocations, OpenRISC:                 OpenRISC-Relocs.    (line    6)
28249* relocations, Sparc:                    Sparc-Relocs.       (line    6)
28250* relocations, WebAssembly:              WebAssembly-Relocs. (line    6)
28251* repeat prefixes, i386:                 i386-Prefixes.      (line   44)
28252* reporting bugs in assembler:           Reporting Bugs.     (line    6)
28253* rept directive:                        Rept.               (line    6)
28254* reserve directive, SPARC:              Sparc-Directives.   (line   39)
28255* return instructions, i386:             i386-Variations.    (line   45)
28256* return instructions, x86-64:           i386-Variations.    (line   45)
28257* REX prefixes, i386:                    i386-Prefixes.      (line   46)
28258* RISC-V instruction formats:            RISC-V-Formats.     (line    6)
28259* RISC-V machine directives:             RISC-V-Directives.  (line    6)
28260* RISC-V support:                        RISC-V-Dependent.   (line    6)
28261* RL78 assembler directives:             RL78-Directives.    (line    6)
28262* RL78 line comment character:           RL78-Chars.         (line    6)
28263* RL78 line separator:                   RL78-Chars.         (line   14)
28264* RL78 modifiers:                        RL78-Modifiers.     (line    6)
28265* RL78 options:                          RL78-Opts.          (line    6)
28266* RL78 support:                          RL78-Dependent.     (line    6)
28267* rsect:                                 Z8000 Directives.   (line   52)
28268* RX assembler directive .3byte:         RX-Directives.      (line    9)
28269* RX assembler directive .fetchalign:    RX-Directives.      (line   13)
28270* RX assembler directives:               RX-Directives.      (line    6)
28271* RX floating point:                     RX-Float.           (line    6)
28272* RX line comment character:             RX-Chars.           (line    6)
28273* RX line separator:                     RX-Chars.           (line   14)
28274* RX modifiers:                          RX-Modifiers.       (line    6)
28275* RX options:                            RX-Opts.            (line    6)
28276* RX support:                            RX-Dependent.       (line    6)
28277* S12Z addressing modes:                 S12Z Addressing Modes.
28278                                                             (line    6)
28279* S12Z line separator:                   S12Z Syntax Overview.
28280                                                             (line   41)
28281* S12Z options:                          S12Z Options.       (line    6)
28282* S12Z support:                          S12Z-Dependent.     (line    8)
28283* S12Z syntax:                           S12Z Syntax.        (line   12)
28284* s390 floating point:                   s390 Floating Point.
28285                                                             (line    6)
28286* s390 instruction aliases:              s390 Aliases.       (line    6)
28287* s390 instruction formats:              s390 Formats.       (line    6)
28288* s390 instruction marker:               s390 Instruction Marker.
28289                                                             (line    6)
28290* s390 instruction mnemonics:            s390 Mnemonics.     (line    6)
28291* s390 instruction operand modifier:     s390 Operand Modifier.
28292                                                             (line    6)
28293* s390 instruction operands:             s390 Operands.      (line    6)
28294* s390 instruction syntax:               s390 Syntax.        (line    6)
28295* s390 line comment character:           s390 Characters.    (line    6)
28296* s390 line separator:                   s390 Characters.    (line   13)
28297* s390 literal pool entries:             s390 Literal Pool Entries.
28298                                                             (line    6)
28299* s390 options:                          s390 Options.       (line    6)
28300* s390 register naming:                  s390 Register.      (line    6)
28301* s390 support:                          S/390-Dependent.    (line    6)
28302* Saved User Stack Pointer, ARC:         ARC-Regs.           (line   73)
28303* sblock directive, TIC54X:              TIC54X-Directives.  (line  180)
28304* sbttl directive:                       Sbttl.              (line    6)
28305* schedule directive:                    Schedule Directive. (line    6)
28306* scl directive:                         Scl.                (line    6)
28307* SCORE architectures:                   SCORE-Opts.         (line    6)
28308* SCORE directives:                      SCORE-Pseudo.       (line    6)
28309* SCORE line comment character:          SCORE-Chars.        (line    6)
28310* SCORE line separator:                  SCORE-Chars.        (line   14)
28311* SCORE options:                         SCORE-Opts.         (line    6)
28312* SCORE processor:                       SCORE-Dependent.    (line    6)
28313* sdaoff pseudo-op, V850:                V850 Opcodes.       (line   65)
28314* search path for .include:              I.                  (line    6)
28315* sect directive, TIC54X:                TIC54X-Directives.  (line  186)
28316* section directive (COFF version):      Section.            (line   16)
28317* section directive (ELF version):       Section.            (line   67)
28318* section directive, V850:               V850 Directives.    (line    9)
28319* section name substitution:             Section.            (line   71)
28320* section override prefixes, i386:       i386-Prefixes.      (line   23)
28321* Section Stack:                         PopSection.         (line    6)
28322* Section Stack <1>:                     Previous.           (line    6)
28323* Section Stack <2>:                     PushSection.        (line    6)
28324* Section Stack <3>:                     Section.            (line   62)
28325* Section Stack <4>:                     SubSection.         (line    6)
28326* section-relative addressing:           Secs Background.    (line   65)
28327* sections:                              Sections.           (line    6)
28328* sections in messages, internal:        As Sections.        (line    6)
28329* sections, i386:                        i386-Variations.    (line   51)
28330* sections, named:                       Ld Sections.        (line    8)
28331* sections, x86-64:                      i386-Variations.    (line   51)
28332* seg directive, SPARC:                  Sparc-Directives.   (line   44)
28333* segm:                                  Z8000 Directives.   (line   10)
28334* set at directive, Nios II:             Nios II Directives. (line   35)
28335* set break directive, Nios II:          Nios II Directives. (line   43)
28336* set directive:                         Set.                (line    6)
28337* set directive, Nios II:                Nios II Directives. (line   57)
28338* set directive, TIC54X:                 TIC54X-Directives.  (line  189)
28339* set noat directive, Nios II:           Nios II Directives. (line   31)
28340* set nobreak directive, Nios II:        Nios II Directives. (line   39)
28341* set norelax directive, Nios II:        Nios II Directives. (line   46)
28342* set no_warn_regname_label directive, PRU: PRU Directives.  (line   28)
28343* set relaxall directive, Nios II:       Nios II Directives. (line   53)
28344* set relaxsection directive, Nios II:   Nios II Directives. (line   49)
28345* SH addressing modes:                   SH-Addressing.      (line    6)
28346* SH floating point (IEEE):              SH Floating Point.  (line    6)
28347* SH line comment character:             SH-Chars.           (line    6)
28348* SH line separator:                     SH-Chars.           (line    8)
28349* SH machine directives:                 SH Directives.      (line    6)
28350* SH opcode summary:                     SH Opcodes.         (line    6)
28351* SH options:                            SH Options.         (line    6)
28352* SH registers:                          SH-Regs.            (line    6)
28353* SH support:                            SH-Dependent.       (line    6)
28354* shigh directive, M32R:                 M32R-Directives.    (line   26)
28355* short directive:                       Short.              (line    6)
28356* short directive, TIC54X:               TIC54X-Directives.  (line  109)
28357* signatures, WebAssembly:               WebAssembly-Signatures.
28358                                                             (line    6)
28359* SIMD, i386:                            i386-SIMD.          (line    6)
28360* SIMD, x86-64:                          i386-SIMD.          (line    6)
28361* single character constant:             Chars.              (line    6)
28362* single directive:                      Single.             (line    6)
28363* single directive, i386:                i386-Float.         (line   14)
28364* single directive, x86-64:              i386-Float.         (line   14)
28365* single quote, Z80:                     Z80-Chars.          (line   20)
28366* sixteen bit integers:                  hword.              (line    6)
28367* sixteen byte integer:                  Octa.               (line    6)
28368* size directive (COFF version):         Size.               (line   11)
28369* size directive (ELF version):          Size.               (line   19)
28370* size modifiers, D10V:                  D10V-Size.          (line    6)
28371* size modifiers, D30V:                  D30V-Size.          (line    6)
28372* size modifiers, M680x0:                M68K-Syntax.        (line    8)
28373* size prefixes, i386:                   i386-Prefixes.      (line   27)
28374* size suffixes, H8/300:                 H8/300 Opcodes.     (line  160)
28375* size, translations, Sparc:             Sparc-Size-Translations.
28376                                                             (line    6)
28377* sizes operands, i386:                  i386-Variations.    (line   28)
28378* sizes operands, x86-64:                i386-Variations.    (line   28)
28379* skip directive:                        Skip.               (line    6)
28380* skip directive, M680x0:                M68K-Directives.    (line   19)
28381* skip directive, SPARC:                 Sparc-Directives.   (line   48)
28382* sleb128 directive:                     Sleb128.            (line    6)
28383* small data, MIPS:                      MIPS Small Data.    (line    6)
28384* SmartMIPS instruction generation override: MIPS ASE Instruction Generation Overrides.
28385                                                             (line   11)
28386* SOM symbol attributes:                 SOM Symbols.        (line    6)
28387* source program:                        Input Files.        (line    6)
28388* source, destination operands; i386:    i386-Variations.    (line   21)
28389* source, destination operands; x86-64:  i386-Variations.    (line   21)
28390* sp register:                           Xtensa Registers.   (line    6)
28391* sp register, V850:                     V850-Regs.          (line   12)
28392* space directive:                       Space.              (line    6)
28393* space directive, TIC54X:               TIC54X-Directives.  (line  194)
28394* space used, maximum for assembly:      statistics.         (line    6)
28395* SPARC architectures:                   Sparc-Opts.         (line    6)
28396* Sparc constants:                       Sparc-Constants.    (line    6)
28397* SPARC data alignment:                  Sparc-Aligned-Data. (line    6)
28398* SPARC floating point (IEEE):           Sparc-Float.        (line    6)
28399* Sparc line comment character:          Sparc-Chars.        (line    6)
28400* Sparc line separator:                  Sparc-Chars.        (line   14)
28401* SPARC machine directives:              Sparc-Directives.   (line    6)
28402* SPARC options:                         Sparc-Opts.         (line    6)
28403* Sparc registers:                       Sparc-Regs.         (line    6)
28404* Sparc relocations:                     Sparc-Relocs.       (line    6)
28405* Sparc size translations:               Sparc-Size-Translations.
28406                                                             (line    6)
28407* SPARC support:                         Sparc-Dependent.    (line    6)
28408* SPARC syntax:                          Sparc-Aligned-Data. (line   21)
28409* special characters, M680x0:            M68K-Chars.         (line    6)
28410* special purpose registers, MSP 430:    MSP430-Regs.        (line   11)
28411* sslist directive, TIC54X:              TIC54X-Directives.  (line  201)
28412* ssnolist directive, TIC54X:            TIC54X-Directives.  (line  201)
28413* stabd directive:                       Stab.               (line   38)
28414* stabn directive:                       Stab.               (line   49)
28415* stabs directive:                       Stab.               (line   52)
28416* stabX directives:                      Stab.               (line    6)
28417* stack pointer, ARC:                    ARC-Regs.           (line   20)
28418* standard assembler sections:           Secs Background.    (line   27)
28419* standard input, as input file:         Command Line.       (line   10)
28420* statement separator character:         Statements.         (line    6)
28421* statement separator, AArch64:          AArch64-Chars.      (line   10)
28422* statement separator, Alpha:            Alpha-Chars.        (line   11)
28423* statement separator, ARC:              ARC-Chars.          (line   27)
28424* statement separator, ARM:              ARM-Chars.          (line   14)
28425* statement separator, AVR:              AVR-Chars.          (line   14)
28426* statement separator, BPF:              BPF-Chars.          (line   10)
28427* statement separator, CR16:             CR16-Chars.         (line   12)
28428* statement separator, Epiphany:         Epiphany-Chars.     (line   14)
28429* statement separator, H8/300:           H8/300-Chars.       (line    8)
28430* statement separator, i386:             i386-Chars.         (line   18)
28431* statement separator, IA-64:            IA-64-Chars.        (line    8)
28432* statement separator, IP2K:             IP2K-Chars.         (line   14)
28433* statement separator, LM32:             LM32-Chars.         (line   12)
28434* statement separator, M32C:             M32C-Chars.         (line   14)
28435* statement separator, M68HC11:          M68HC11-Syntax.     (line   26)
28436* statement separator, Meta:             Meta-Chars.         (line    8)
28437* statement separator, MicroBlaze:       MicroBlaze-Chars.   (line   14)
28438* statement separator, MIPS:             MIPS-Chars.         (line   14)
28439* statement separator, MSP 430:          MSP430-Chars.       (line   14)
28440* statement separator, NS32K:            NS32K-Chars.        (line   18)
28441* statement separator, OpenRISC:         OpenRISC-Chars.     (line    9)
28442* statement separator, PJ:               PJ-Chars.           (line   14)
28443* statement separator, PowerPC:          PowerPC-Chars.      (line   18)
28444* statement separator, RL78:             RL78-Chars.         (line   14)
28445* statement separator, RX:               RX-Chars.           (line   14)
28446* statement separator, S12Z:             S12Z Syntax Overview.
28447                                                             (line   41)
28448* statement separator, s390:             s390 Characters.    (line   13)
28449* statement separator, SCORE:            SCORE-Chars.        (line   14)
28450* statement separator, SH:               SH-Chars.           (line    8)
28451* statement separator, Sparc:            Sparc-Chars.        (line   14)
28452* statement separator, TIC54X:           TIC54X-Chars.       (line   17)
28453* statement separator, TIC6X:            TIC6X Syntax.       (line   13)
28454* statement separator, V850:             V850-Chars.         (line   13)
28455* statement separator, VAX:              VAX-Chars.          (line   14)
28456* statement separator, Visium:           Visium Characters.  (line   14)
28457* statement separator, XGATE:            XGATE-Syntax.       (line   25)
28458* statement separator, XStormy16:        XStormy16-Chars.    (line   14)
28459* statement separator, Z80:              Z80-Chars.          (line   13)
28460* statement separator, Z8000:            Z8000-Chars.        (line   13)
28461* statements, structure of:              Statements.         (line    6)
28462* statistics, about assembly:            statistics.         (line    6)
28463* Status register, ARC:                  ARC-Regs.           (line   57)
28464* STATUS32 saved on exception, ARC:      ARC-Regs.           (line   82)
28465* stopping the assembly:                 Abort.              (line    6)
28466* Stored STATUS32 register on entry to level P0 interrupts, ARC: ARC-Regs.
28467                                                             (line   69)
28468* string constants:                      Strings.            (line    6)
28469* string directive:                      String.             (line    8)
28470* string directive on HPPA:              HPPA Directives.    (line  137)
28471* string directive, TIC54X:              TIC54X-Directives.  (line  206)
28472* string literals:                       Ascii.              (line    6)
28473* string, copying to object file:        String.             (line    8)
28474* string16 directive:                    String.             (line    8)
28475* string16, copying to object file:      String.             (line    8)
28476* string32 directive:                    String.             (line    8)
28477* string32, copying to object file:      String.             (line    8)
28478* string64 directive:                    String.             (line    8)
28479* string64, copying to object file:      String.             (line    8)
28480* string8 directive:                     String.             (line    8)
28481* string8, copying to object file:       String.             (line    8)
28482* struct directive:                      Struct.             (line    6)
28483* struct directive, TIC54X:              TIC54X-Directives.  (line  214)
28484* structure debugging, COFF:             Tag.                (line    6)
28485* sub-instruction ordering, D10V:        D10V-Chars.         (line   14)
28486* sub-instruction ordering, D30V:        D30V-Chars.         (line   14)
28487* sub-instructions, D10V:                D10V-Subs.          (line    6)
28488* sub-instructions, D30V:                D30V-Subs.          (line    6)
28489* subexpressions:                        Arguments.          (line   24)
28490* subsection directive:                  SubSection.         (line    6)
28491* subsym builtins, TIC54X:               TIC54X-Macros.      (line   16)
28492* subtitles for listings:                Sbttl.              (line    6)
28493* subtraction, permitted arguments:      Infix Ops.          (line   50)
28494* summary of options:                    Overview.           (line    6)
28495* support:                               HPPA-Dependent.     (line    6)
28496* supporting files, including:           Include.            (line    6)
28497* suppressing warnings:                  W.                  (line   11)
28498* sval:                                  Z8000 Directives.   (line   33)
28499* symbol attributes:                     Symbol Attributes.  (line    6)
28500* symbol attributes, a.out:              a.out Symbols.      (line    6)
28501* symbol attributes, COFF:               COFF Symbols.       (line    6)
28502* symbol attributes, SOM:                SOM Symbols.        (line    6)
28503* symbol descriptor, COFF:               Desc.               (line    6)
28504* symbol modifiers:                      AVR-Modifiers.      (line   12)
28505* symbol modifiers <1>:                  LM32-Modifiers.     (line   12)
28506* symbol modifiers <2>:                  M32C-Modifiers.     (line   11)
28507* symbol modifiers <3>:                  M68HC11-Modifiers.  (line   12)
28508* symbol modifiers, TILE-Gx:             TILE-Gx Modifiers.  (line    6)
28509* symbol modifiers, TILEPro:             TILEPro Modifiers.  (line    6)
28510* symbol names:                          Symbol Names.       (line    6)
28511* symbol names, $ in:                    D10V-Chars.         (line   46)
28512* symbol names, $ in <1>:                D30V-Chars.         (line   70)
28513* symbol names, $ in <2>:                Meta-Chars.         (line   10)
28514* symbol names, $ in <3>:                SH-Chars.           (line   15)
28515* symbol names, local:                   Symbol Names.       (line   30)
28516* symbol names, temporary:               Symbol Names.       (line   43)
28517* symbol prefix character, ARC:          ARC-Chars.          (line   20)
28518* symbol storage class (COFF):           Scl.                (line    6)
28519* symbol type:                           Symbol Type.        (line    6)
28520* symbol type, COFF:                     Type.               (line   11)
28521* symbol type, ELF:                      Type.               (line   22)
28522* symbol value:                          Symbol Value.       (line    6)
28523* symbol value, setting:                 Set.                (line    6)
28524* symbol values, assigning:              Setting Symbols.    (line    6)
28525* symbol versioning:                     Symver.             (line    6)
28526* symbol, common:                        Comm.               (line    6)
28527* symbol, making visible to linker:      Global.             (line    6)
28528* symbolic debuggers, information for:   Stab.               (line    6)
28529* symbols:                               Symbols.            (line    6)
28530* Symbols in position-independent code, CRIS: CRIS-Pic.      (line    6)
28531* symbols with uppercase, VAX/VMS:       VAX-Opts.           (line   42)
28532* symbols, assigning values to:          Equ.                (line    6)
28533* Symbols, built-in, CRIS:               CRIS-Symbols.       (line    6)
28534* Symbols, CRIS, built-in:               CRIS-Symbols.       (line    6)
28535* symbols, local common:                 Lcomm.              (line    6)
28536* symver directive:                      Symver.             (line    6)
28537* syntax compatibility, i386:            i386-Variations.    (line    6)
28538* syntax compatibility, x86-64:          i386-Variations.    (line    6)
28539* syntax, AVR:                           AVR-Modifiers.      (line    6)
28540* syntax, Blackfin:                      Blackfin Syntax.    (line    6)
28541* syntax, D10V:                          D10V-Syntax.        (line    6)
28542* syntax, D30V:                          D30V-Syntax.        (line    6)
28543* syntax, LM32:                          LM32-Modifiers.     (line    6)
28544* syntax, M680x0:                        M68K-Syntax.        (line    8)
28545* syntax, M68HC11:                       M68HC11-Syntax.     (line    6)
28546* syntax, M68HC11 <1>:                   M68HC11-Modifiers.  (line    6)
28547* syntax, machine-independent:           Syntax.             (line    6)
28548* syntax, OPENRISC:                      OpenRISC-Dependent. (line   12)
28549* syntax, RL78:                          RL78-Modifiers.     (line    6)
28550* syntax, RX:                            RX-Modifiers.       (line    6)
28551* syntax, S12Z:                          S12Z Syntax.        (line   11)
28552* syntax, SPARC:                         Sparc-Aligned-Data. (line   20)
28553* syntax, TILE-Gx:                       TILE-Gx Syntax.     (line    6)
28554* syntax, TILEPro:                       TILEPro Syntax.     (line    6)
28555* syntax, XGATE:                         XGATE-Syntax.       (line    6)
28556* syntax, Xtensa assembler:              Xtensa Syntax.      (line    6)
28557* tab (\t):                              Strings.            (line   27)
28558* tab directive, TIC54X:                 TIC54X-Directives.  (line  245)
28559* tag directive:                         Tag.                (line    6)
28560* tag directive, TIC54X:                 TIC54X-Directives.  (line  214)
28561* tag directive, TIC54X <1>:             TIC54X-Directives.  (line  248)
28562* TBM, i386:                             i386-TBM.           (line    6)
28563* TBM, x86-64:                           i386-TBM.           (line    6)
28564* tdaoff pseudo-op, V850:                V850 Opcodes.       (line   81)
28565* temporary symbol names:                Symbol Names.       (line   43)
28566* text and data sections, joining:       R.                  (line    6)
28567* text directive:                        Text.               (line    6)
28568* text section:                          Ld Sections.        (line    9)
28569* tfloat directive, i386:                i386-Float.         (line   14)
28570* tfloat directive, x86-64:              i386-Float.         (line   14)
28571* Thumb support:                         ARM-Dependent.      (line    6)
28572* TIC54X builtin math functions:         TIC54X-Builtins.    (line    6)
28573* TIC54X line comment character:         TIC54X-Chars.       (line    6)
28574* TIC54X line separator:                 TIC54X-Chars.       (line   17)
28575* TIC54X machine directives:             TIC54X-Directives.  (line    6)
28576* TIC54X memory-mapped registers:        TIC54X-MMRegs.      (line    6)
28577* TIC54X options:                        TIC54X-Opts.        (line    6)
28578* TIC54X subsym builtins:                TIC54X-Macros.      (line   16)
28579* TIC54X support:                        TIC54X-Dependent.   (line    6)
28580* TIC54X-specific macros:                TIC54X-Macros.      (line    6)
28581* TIC6X big-endian output:               TIC6X Options.      (line   46)
28582* TIC6X line comment character:          TIC6X Syntax.       (line    6)
28583* TIC6X line separator:                  TIC6X Syntax.       (line   13)
28584* TIC6X little-endian output:            TIC6X Options.      (line   46)
28585* TIC6X machine directives:              TIC6X Directives.   (line    6)
28586* TIC6X options:                         TIC6X Options.      (line    6)
28587* TIC6X support:                         TIC6X-Dependent.    (line    6)
28588* TILE-Gx machine directives:            TILE-Gx Directives. (line    6)
28589* TILE-Gx modifiers:                     TILE-Gx Modifiers.  (line    6)
28590* TILE-Gx opcode names:                  TILE-Gx Opcodes.    (line    6)
28591* TILE-Gx register names:                TILE-Gx Registers.  (line    6)
28592* TILE-Gx support:                       TILE-Gx-Dependent.  (line    6)
28593* TILE-Gx syntax:                        TILE-Gx Syntax.     (line    6)
28594* TILEPro machine directives:            TILEPro Directives. (line    6)
28595* TILEPro modifiers:                     TILEPro Modifiers.  (line    6)
28596* TILEPro opcode names:                  TILEPro Opcodes.    (line    6)
28597* TILEPro register names:                TILEPro Registers.  (line    6)
28598* TILEPro support:                       TILEPro-Dependent.  (line    6)
28599* TILEPro syntax:                        TILEPro Syntax.     (line    6)
28600* time, total for assembly:              statistics.         (line    6)
28601* title directive:                       Title.              (line    6)
28602* tls_gd directive, Nios II:             Nios II Relocations.
28603                                                             (line   38)
28604* tls_ie directive, Nios II:             Nios II Relocations.
28605                                                             (line   38)
28606* tls_ldm directive, Nios II:            Nios II Relocations.
28607                                                             (line   38)
28608* tls_ldo directive, Nios II:            Nios II Relocations.
28609                                                             (line   38)
28610* tls_le directive, Nios II:             Nios II Relocations.
28611                                                             (line   38)
28612* TMS320C6X support:                     TIC6X-Dependent.    (line    6)
28613* tp register, V850:                     V850-Regs.          (line   16)
28614* transform directive:                   Transform Directive.
28615                                                             (line    6)
28616* trusted compiler:                      f.                  (line    6)
28617* turning preprocessing on and off:      Preprocessing.      (line   26)
28618* two-byte integer:                      2byte.              (line    6)
28619* type directive (COFF version):         Type.               (line   11)
28620* type directive (ELF version):          Type.               (line   22)
28621* type of a symbol:                      Symbol Type.        (line    6)
28622* ualong directive, SH:                  SH Directives.      (line    6)
28623* uaquad directive, SH:                  SH Directives.      (line    6)
28624* uaword directive, SH:                  SH Directives.      (line    6)
28625* ubyte directive, TIC54X:               TIC54X-Directives.  (line   34)
28626* uchar directive, TIC54X:               TIC54X-Directives.  (line   34)
28627* uhalf directive, TIC54X:               TIC54X-Directives.  (line  109)
28628* uint directive, TIC54X:                TIC54X-Directives.  (line  109)
28629* uleb128 directive:                     Uleb128.            (line    6)
28630* ulong directive, TIC54X:               TIC54X-Directives.  (line  133)
28631* undefined section:                     Ld Sections.        (line   36)
28632* union directive, TIC54X:               TIC54X-Directives.  (line  248)
28633* unsegm:                                Z8000 Directives.   (line   14)
28634* usect directive, TIC54X:               TIC54X-Directives.  (line  260)
28635* ushort directive, TIC54X:              TIC54X-Directives.  (line  109)
28636* uword directive, TIC54X:               TIC54X-Directives.  (line  109)
28637* V850 command-line options:             V850 Options.       (line    9)
28638* V850 floating point (IEEE):            V850 Floating Point.
28639                                                             (line    6)
28640* V850 line comment character:           V850-Chars.         (line    6)
28641* V850 line separator:                   V850-Chars.         (line   13)
28642* V850 machine directives:               V850 Directives.    (line    6)
28643* V850 opcodes:                          V850 Opcodes.       (line    6)
28644* V850 options (none):                   V850 Options.       (line    6)
28645* V850 register names:                   V850-Regs.          (line    6)
28646* V850 support:                          V850-Dependent.     (line    6)
28647* val directive:                         Val.                (line    6)
28648* value attribute, COFF:                 Val.                (line    6)
28649* value directive:                       i386-Directives.    (line   26)
28650* value of a symbol:                     Symbol Value.       (line    6)
28651* var directive, TIC54X:                 TIC54X-Directives.  (line  270)
28652* VAX bitfields not supported:           VAX-no.             (line    6)
28653* VAX branch improvement:                VAX-branch.         (line    6)
28654* VAX command-line options ignored:      VAX-Opts.           (line    6)
28655* VAX displacement sizing character:     VAX-operands.       (line   12)
28656* VAX floating point:                    VAX-float.          (line    6)
28657* VAX immediate character:               VAX-operands.       (line    6)
28658* VAX indirect character:                VAX-operands.       (line    9)
28659* VAX line comment character:            VAX-Chars.          (line    6)
28660* VAX line separator:                    VAX-Chars.          (line   14)
28661* VAX machine directives:                VAX-directives.     (line    6)
28662* VAX opcode mnemonics:                  VAX-opcodes.        (line    6)
28663* VAX operand notation:                  VAX-operands.       (line    6)
28664* VAX register names:                    VAX-operands.       (line   17)
28665* VAX support:                           Vax-Dependent.      (line    6)
28666* Vax-11 C compatibility:                VAX-Opts.           (line   42)
28667* VAX/VMS options:                       VAX-Opts.           (line   42)
28668* version directive:                     Version.            (line    6)
28669* version directive, TIC54X:             TIC54X-Directives.  (line  274)
28670* version of assembler:                  v.                  (line    6)
28671* versions of symbols:                   Symver.             (line    6)
28672* Virtualization instruction generation override: MIPS ASE Instruction Generation Overrides.
28673                                                             (line   52)
28674* visibility:                            Hidden.             (line    6)
28675* visibility <1>:                        Internal.           (line    6)
28676* visibility <2>:                        Protected.          (line    6)
28677* Visium line comment character:         Visium Characters.  (line    6)
28678* Visium line separator:                 Visium Characters.  (line   14)
28679* Visium options:                        Visium Options.     (line    6)
28680* Visium registers:                      Visium Registers.   (line    6)
28681* Visium support:                        Visium-Dependent.   (line    6)
28682* VMS (VAX) options:                     VAX-Opts.           (line   42)
28683* vtable_entry directive:                VTableEntry.        (line    6)
28684* vtable_inherit directive:              VTableInherit.      (line    6)
28685* warning directive:                     Warning.            (line    6)
28686* warning for altered difference tables: K.                  (line    6)
28687* warning messages:                      Errors.             (line    6)
28688* warnings, causing error:               W.                  (line   16)
28689* warnings, M32R:                        M32R-Warnings.      (line    6)
28690* warnings, suppressing:                 W.                  (line   11)
28691* warnings, switching on:                W.                  (line   19)
28692* weak directive:                        Weak.               (line    6)
28693* weakref directive:                     Weakref.            (line    6)
28694* WebAssembly floating point (IEEE):     WebAssembly-Floating-Point.
28695                                                             (line    6)
28696* WebAssembly line comment character:    WebAssembly-Chars.  (line    6)
28697* WebAssembly module layout:             WebAssembly-module-layout.
28698                                                             (line    6)
28699* WebAssembly notes:                     WebAssembly-Notes.  (line    6)
28700* WebAssembly opcodes:                   WebAssembly-Opcodes.
28701                                                             (line    6)
28702* WebAssembly relocations:               WebAssembly-Relocs. (line    6)
28703* WebAssembly signatures:                WebAssembly-Signatures.
28704                                                             (line    6)
28705* WebAssembly support:                   WebAssembly-Dependent.
28706                                                             (line    6)
28707* WebAssembly Syntax:                    WebAssembly-Syntax. (line    6)
28708* whitespace:                            Whitespace.         (line    6)
28709* whitespace, removed by preprocessor:   Preprocessing.      (line    7)
28710* wide floating point directives, VAX:   VAX-directives.     (line    9)
28711* width directive, TIC54X:               TIC54X-Directives.  (line  125)
28712* Width of continuation lines of disassembly output: listing.
28713                                                             (line   21)
28714* Width of first line disassembly output: listing.           (line   16)
28715* Width of source line output:           listing.            (line   28)
28716* wmsg directive, TIC54X:                TIC54X-Directives.  (line   75)
28717* word aligned program counter, ARC:     ARC-Regs.           (line   44)
28718* word directive:                        Word.               (line    6)
28719* word directive, BPF:                   BPF Directives.     (line   12)
28720* word directive, H8/300:                H8/300 Directives.  (line    6)
28721* word directive, i386:                  i386-Float.         (line   21)
28722* word directive, Nios II:               Nios II Directives. (line   13)
28723* word directive, OpenRISC:              OpenRISC-Directives.
28724                                                             (line   12)
28725* word directive, PRU:                   PRU Directives.     (line   10)
28726* word directive, SPARC:                 Sparc-Directives.   (line   51)
28727* word directive, TIC54X:                TIC54X-Directives.  (line  109)
28728* word directive, x86-64:                i386-Float.         (line   21)
28729* writing patterns in memory:            Fill.               (line    6)
28730* wval:                                  Z8000 Directives.   (line   24)
28731* x86 machine directives:                i386-Directives.    (line    6)
28732* x86-64 arch directive:                 i386-Arch.          (line    6)
28733* x86-64 att_syntax pseudo op:           i386-Variations.    (line    6)
28734* x86-64 conversion instructions:        i386-Mnemonics.     (line   56)
28735* x86-64 floating point:                 i386-Float.         (line    6)
28736* x86-64 immediate operands:             i386-Variations.    (line   15)
28737* x86-64 instruction naming:             i386-Mnemonics.     (line    9)
28738* x86-64 intel_syntax pseudo op:         i386-Variations.    (line    6)
28739* x86-64 jump optimization:              i386-Jumps.         (line    6)
28740* x86-64 jump, call, return:             i386-Variations.    (line   45)
28741* x86-64 jump/call operands:             i386-Variations.    (line   15)
28742* x86-64 memory references:              i386-Memory.        (line    6)
28743* x86-64 options:                        i386-Options.       (line    6)
28744* x86-64 register operands:              i386-Variations.    (line   15)
28745* x86-64 registers:                      i386-Regs.          (line    6)
28746* x86-64 sections:                       i386-Variations.    (line   51)
28747* x86-64 size suffixes:                  i386-Variations.    (line   28)
28748* x86-64 source, destination operands:   i386-Variations.    (line   21)
28749* x86-64 support:                        i386-Dependent.     (line    6)
28750* x86-64 syntax compatibility:           i386-Variations.    (line    6)
28751* xfloat directive, TIC54X:              TIC54X-Directives.  (line   62)
28752* XGATE addressing modes:                XGATE-Syntax.       (line   28)
28753* XGATE assembler directives:            XGATE-Directives.   (line    6)
28754* XGATE floating point:                  XGATE-Float.        (line    6)
28755* XGATE line comment character:          XGATE-Syntax.       (line   16)
28756* XGATE line separator:                  XGATE-Syntax.       (line   25)
28757* XGATE opcodes:                         XGATE-opcodes.      (line    6)
28758* XGATE options:                         XGATE-Opts.         (line    6)
28759* XGATE support:                         XGATE-Dependent.    (line    6)
28760* XGATE syntax:                          XGATE-Syntax.       (line    6)
28761* xlong directive, TIC54X:               TIC54X-Directives.  (line  133)
28762* XStormy16 comment character:           XStormy16-Chars.    (line   11)
28763* XStormy16 line comment character:      XStormy16-Chars.    (line    6)
28764* XStormy16 line separator:              XStormy16-Chars.    (line   14)
28765* XStormy16 machine directives:          XStormy16 Directives.
28766                                                             (line    6)
28767* XStormy16 pseudo-opcodes:              XStormy16 Opcodes.  (line    6)
28768* XStormy16 support:                     XSTORMY16-Dependent.
28769                                                             (line    6)
28770* Xtensa architecture:                   Xtensa-Dependent.   (line    6)
28771* Xtensa assembler syntax:               Xtensa Syntax.      (line    6)
28772* Xtensa directives:                     Xtensa Directives.  (line    6)
28773* Xtensa opcode names:                   Xtensa Opcodes.     (line    6)
28774* Xtensa register names:                 Xtensa Registers.   (line    6)
28775* xword directive, SPARC:                Sparc-Directives.   (line   55)
28776* Z80 $:                                 Z80-Chars.          (line   15)
28777* Z80 ':                                 Z80-Chars.          (line   20)
28778* Z80 floating point:                    Z80 Floating Point. (line    6)
28779* Z80 labels:                            Z80-Labels.         (line    6)
28780* Z80 line comment character:            Z80-Chars.          (line    6)
28781* Z80 line separator:                    Z80-Chars.          (line   13)
28782* Z80 options:                           Z80 Options.        (line    6)
28783* Z80 registers:                         Z80-Regs.           (line    6)
28784* Z80 support:                           Z80-Dependent.      (line    6)
28785* Z80 Syntax:                            Z80 Options.        (line  114)
28786* Z80, case sensitivity:                 Z80-Case.           (line    6)
28787* Z80, \:                                Z80-Chars.          (line   18)
28788* Z80-only directives:                   Z80 Directives.     (line    9)
28789* Z800 addressing modes:                 Z8000-Addressing.   (line    6)
28790* Z8000 directives:                      Z8000 Directives.   (line    6)
28791* Z8000 line comment character:          Z8000-Chars.        (line    6)
28792* Z8000 line separator:                  Z8000-Chars.        (line   13)
28793* Z8000 opcode summary:                  Z8000 Opcodes.      (line    6)
28794* Z8000 options:                         Z8000 Options.      (line    6)
28795* Z8000 registers:                       Z8000-Regs.         (line    6)
28796* Z8000 support:                         Z8000-Dependent.    (line    6)
28797* zdaoff pseudo-op, V850:                V850 Opcodes.       (line   98)
28798* zero directive:                        Zero.               (line    6)
28799* zero register, V850:                   V850-Regs.          (line    7)
28800* zero-terminated strings:               Asciz.              (line    6)
28801
28802
28803
28804Tag Table:
28805Node: Top733
28806Node: Overview1718
28807Node: Manual43341
28808Node: GNU Assembler44285
28809Node: Object Formats45456
28810Node: Command Line45908
28811Node: Input Files46994
28812Node: Object48975
28813Node: Errors49871
28814Node: Invoking51433
28815Node: a53439
28816Node: alternate55350
28817Node: D55522
28818Node: f55755
28819Node: I56264
28820Node: K56808
28821Node: L57112
28822Node: listing57851
28823Node: M59510
28824Node: MD63347
28825Node: no-pad-sections63787
28826Node: o64162
28827Node: R64589
28828Node: statistics65619
28829Node: traditional-format66026
28830Node: v66499
28831Node: W66774
28832Node: Z67681
28833Node: Syntax68203
28834Node: Preprocessing68795
28835Node: Whitespace70359
28836Node: Comments70755
28837Node: Symbol Intro72766
28838Node: Statements73751
28839Node: Constants75739
28840Node: Characters76370
28841Node: Strings76872
28842Node: Chars79045
28843Node: Numbers79897
28844Node: Integers80437
28845Node: Bignums81093
28846Node: Flonums81449
28847Node: Sections83066
28848Node: Secs Background83444
28849Node: Ld Sections88477
28850Node: As Sections90861
28851Node: Sub-Sections91771
28852Node: bss94919
28853Node: Symbols95869
28854Node: Labels96517
28855Node: Setting Symbols97248
28856Node: Symbol Names97802
28857Node: Dot103269
28858Node: Symbol Attributes103716
28859Node: Symbol Value104449
28860Node: Symbol Type105494
28861Node: a.out Symbols105882
28862Node: Symbol Desc106144
28863Node: Symbol Other106440
28864Node: COFF Symbols106609
28865Node: SOM Symbols107282
28866Node: Expressions107724
28867Node: Empty Exprs108473
28868Node: Integer Exprs108820
28869Node: Arguments109215
28870Node: Operators110321
28871Node: Prefix Ops110656
28872Node: Infix Ops110983
28873Node: Pseudo Ops113377
28874Node: Abort119435
28875Node: ABORT (COFF)119848
28876Node: Align120056
28877Node: Altmacro122452
28878Node: Ascii123783
28879Node: Asciz124092
28880Node: Balign124337
28881Node: Bundle directives126336
28882Node: Byte129317
28883Node: CFI directives129576
28884Node: Comm138888
28885Ref: Comm-Footnote-1140488
28886Node: Data140850
28887Node: Dc141166
28888Node: Dcb142143
28889Node: Ds142936
28890Node: Def143766
28891Node: Desc143996
28892Node: Dim144496
28893Node: Double144753
28894Node: Eject145091
28895Node: Else145266
28896Node: Elseif145566
28897Node: End145860
28898Node: Endef146075
28899Node: Endfunc146252
28900Node: Endif146427
28901Node: Equ146688
28902Node: Equiv147203
28903Node: Eqv147759
28904Node: Err148123
28905Node: Error148434
28906Node: Exitm148879
28907Node: Extern149048
28908Node: Fail149309
28909Node: File149754
28910Node: Fill151083
28911Node: Float152047
28912Node: Func152389
28913Node: Global152979
28914Node: Gnu_attribute153736
28915Node: Hidden153961
28916Node: hword154547
28917Node: Ident154875
28918Node: If155449
28919Node: Incbin158510
28920Node: Include159204
28921Node: Int159755
28922Node: Internal160136
28923Node: Irp160783
28924Node: Irpc161662
28925Node: Lcomm162578
28926Node: Lflags163325
28927Node: Line163519
28928Node: Linkonce164435
28929Node: List165664
28930Node: Ln166271
28931Node: Loc166421
28932Node: Loc_mark_labels168613
28933Node: Local169097
28934Node: Long169709
28935Node: Macro169887
28936Node: MRI175818
28937Node: Noaltmacro176156
28938Node: Nolist176325
28939Node: Nops176754
28940Node: Octa177555
28941Node: Offset177890
28942Node: Org178217
28943Node: P2align179502
28944Node: PopSection181556
28945Node: Previous182064
28946Node: Print183476
28947Node: Protected183705
28948Node: Psize184352
28949Node: Purgem185036
28950Node: PushSection185257
28951Node: Quad186001
28952Node: Reloc186455
28953Node: Rept187216
28954Node: Sbttl187778
28955Node: Scl188143
28956Node: Section188484
28957Ref: Section Name Substitutions190542
28958Node: Set196651
28959Node: Short197743
28960Node: Single198064
28961Node: Size198409
28962Node: Skip199075
28963Node: Sleb128199399
28964Node: Space199721
28965Node: Stab200362
28966Node: String202365
28967Node: Struct203357
28968Node: SubSection204080
28969Node: Symver204641
28970Node: Tag207035
28971Node: Text207415
28972Node: Title207735
28973Node: Type208114
28974Node: Uleb128210575
28975Node: Val210897
28976Node: Version211147
28977Node: VTableEntry211421
28978Node: VTableInherit211711
28979Node: Warning212161
28980Node: Weak212395
28981Node: Weakref213064
28982Node: Word214029
28983Node: Zero215869
28984Node: 2byte216276
28985Node: 4byte217280
28986Node: 8byte217544
28987Node: Deprecated217821
28988Node: Object Attributes218056
28989Node: GNU Object Attributes219776
28990Node: Defining New Object Attributes223761
28991Node: Machine Dependencies224553
28992Node: AArch64-Dependent228588
28993Node: AArch64 Options229070
28994Node: AArch64 Extensions231928
28995Node: AArch64 Syntax237455
28996Node: AArch64-Chars237755
28997Node: AArch64-Regs238241
28998Node: AArch64-Relocations238535
28999Node: AArch64 Floating Point239609
29000Node: AArch64 Directives239834
29001Node: AArch64 Opcodes243761
29002Node: AArch64 Mapping Symbols244438
29003Node: Alpha-Dependent244819
29004Node: Alpha Notes245259
29005Node: Alpha Options245540
29006Node: Alpha Syntax248015
29007Node: Alpha-Chars248484
29008Node: Alpha-Regs248896
29009Node: Alpha-Relocs249283
29010Node: Alpha Floating Point255529
29011Node: Alpha Directives255751
29012Node: Alpha Opcodes261278
29013Node: ARC-Dependent261573
29014Node: ARC Options262018
29015Node: ARC Syntax265144
29016Node: ARC-Chars265372
29017Node: ARC-Regs266494
29018Node: ARC Directives269262
29019Node: ARC Modifiers277917
29020Node: ARC Symbols278927
29021Node: ARC Opcodes279481
29022Node: ARM-Dependent279727
29023Node: ARM Options280192
29024Node: ARM Syntax299684
29025Node: ARM-Instruction-Set300052
29026Node: ARM-Chars301267
29027Node: ARM-Regs301978
29028Node: ARM-Relocations302187
29029Node: ARM-Neon-Alignment303873
29030Node: ARM Floating Point304338
29031Node: ARM Directives304537
29032Ref: arm_fnend309696
29033Ref: arm_fnstart310015
29034Ref: arm_pad312423
29035Ref: arm_save313025
29036Ref: arm_setfp313726
29037Node: ARM Opcodes317012
29038Node: ARM Mapping Symbols319614
29039Node: ARM Unwinding Tutorial320423
29040Node: AVR-Dependent326623
29041Node: AVR Options326962
29042Node: AVR Syntax333280
29043Node: AVR-Chars333567
29044Node: AVR-Regs334126
29045Node: AVR-Modifiers334707
29046Node: AVR Opcodes336771
29047Node: AVR Pseudo Instructions342049
29048Node: Blackfin-Dependent343708
29049Node: Blackfin Options344019
29050Node: Blackfin Syntax344993
29051Node: Blackfin Directives351199
29052Node: BPF-Dependent351940
29053Node: BPF Options352257
29054Node: BPF Syntax352640
29055Node: BPF-Chars352908
29056Node: BPF-Regs353301
29057Node: BPF-Pseudo-Maps353813
29058Node: BPF Directives354233
29059Node: BPF Opcodes354647
29060Node: CR16-Dependent361205
29061Node: CR16 Operand Qualifiers361500
29062Node: CR16 Syntax364209
29063Node: CR16-Chars364395
29064Node: CRIS-Dependent364932
29065Node: CRIS-Opts365279
29066Ref: march-option366964
29067Node: CRIS-Expand368783
29068Node: CRIS-Symbols369966
29069Node: CRIS-Syntax371137
29070Node: CRIS-Chars371473
29071Node: CRIS-Pic372024
29072Ref: crispic372219
29073Node: CRIS-Regs375768
29074Node: CRIS-Pseudos376185
29075Ref: crisnous376962
29076Node: C-SKY-Dependent378250
29077Node: C-SKY Options378512
29078Node: C-SKY Syntax381497
29079Node: D10V-Dependent381742
29080Node: D10V-Opts382096
29081Node: D10V-Syntax383067
29082Node: D10V-Size383598
29083Node: D10V-Subs384571
29084Node: D10V-Chars385608
29085Node: D10V-Regs387421
29086Node: D10V-Addressing388450
29087Node: D10V-Word389130
29088Node: D10V-Float389647
29089Node: D10V-Opcodes389960
29090Node: D30V-Dependent390355
29091Node: D30V-Opts390712
29092Node: D30V-Syntax391390
29093Node: D30V-Size391924
29094Node: D30V-Subs392897
29095Node: D30V-Chars393934
29096Node: D30V-Guarded396544
29097Node: D30V-Regs397221
29098Node: D30V-Addressing398340
29099Node: D30V-Float399002
29100Node: D30V-Opcodes399315
29101Node: Epiphany-Dependent399710
29102Node: Epiphany Options399998
29103Node: Epiphany Syntax400397
29104Node: Epiphany-Chars400598
29105Node: H8/300-Dependent401152
29106Node: H8/300 Options401568
29107Node: H8/300 Syntax402008
29108Node: H8/300-Chars402309
29109Node: H8/300-Regs402608
29110Node: H8/300-Addressing403527
29111Node: H8/300 Floating Point404551
29112Node: H8/300 Directives404878
29113Node: H8/300 Opcodes406006
29114Node: HPPA-Dependent414325
29115Node: HPPA Notes414757
29116Node: HPPA Options415516
29117Node: HPPA Syntax415711
29118Node: HPPA Floating Point416981
29119Node: HPPA Directives417187
29120Node: HPPA Opcodes425869
29121Node: i386-Dependent426128
29122Node: i386-Options427453
29123Node: i386-Directives440137
29124Node: i386-Syntax441479
29125Node: i386-Variations441784
29126Node: i386-Chars444708
29127Node: i386-Mnemonics445437
29128Node: i386-Regs449198
29129Node: i386-Prefixes452028
29130Node: i386-Memory454788
29131Node: i386-Jumps457727
29132Node: i386-Float458850
29133Node: i386-SIMD460680
29134Node: i386-LWP461789
29135Node: i386-BMI462623
29136Node: i386-TBM463001
29137Node: i386-16bit463531
29138Node: i386-Arch465602
29139Node: i386-Bugs469070
29140Node: i386-Notes469821
29141Node: IA-64-Dependent470680
29142Node: IA-64 Options470981
29143Node: IA-64 Syntax474132
29144Node: IA-64-Chars474538
29145Node: IA-64-Regs474768
29146Node: IA-64-Bits475694
29147Node: IA-64-Relocs476224
29148Node: IA-64 Opcodes476695
29149Node: IP2K-Dependent476967
29150Node: IP2K-Opts477239
29151Node: IP2K-Syntax477738
29152Node: IP2K-Chars477912
29153Node: LM32-Dependent478455
29154Node: LM32 Options478750
29155Node: LM32 Syntax479383
29156Node: LM32-Regs479679
29157Node: LM32-Modifiers480620
29158Node: LM32-Chars482000
29159Node: LM32 Opcodes482508
29160Node: M32C-Dependent482812
29161Node: M32C-Opts483318
29162Node: M32C-Syntax483737
29163Node: M32C-Modifiers483972
29164Node: M32C-Chars485764
29165Node: M32R-Dependent486330
29166Node: M32R-Opts486651
29167Node: M32R-Directives490813
29168Node: M32R-Warnings494787
29169Node: M68K-Dependent497792
29170Node: M68K-Opts498259
29171Node: M68K-Syntax505681
29172Node: M68K-Moto-Syntax507521
29173Node: M68K-Float510105
29174Node: M68K-Directives510625
29175Node: M68K-opcodes511952
29176Node: M68K-Branch512178
29177Node: M68K-Chars516373
29178Node: M68HC11-Dependent517236
29179Node: M68HC11-Opts517767
29180Node: M68HC11-Syntax522079
29181Node: M68HC11-Modifiers524873
29182Node: M68HC11-Directives526700
29183Node: M68HC11-Float528074
29184Node: M68HC11-opcodes528602
29185Node: M68HC11-Branch528784
29186Node: S12Z-Dependent531234
29187Node: S12Z Options531577
29188Node: S12Z Syntax532561
29189Node: S12Z Syntax Overview532880
29190Node: S12Z Addressing Modes534542
29191Node: S12Z Register Notation538346
29192Node: Meta-Dependent539522
29193Node: Meta Options539804
29194Node: Meta Syntax540466
29195Node: Meta-Chars540678
29196Node: Meta-Regs540978
29197Node: MicroBlaze-Dependent541254
29198Node: MicroBlaze Directives541941
29199Node: MicroBlaze Syntax543332
29200Node: MicroBlaze-Chars543564
29201Node: MIPS-Dependent544116
29202Node: MIPS Options545550
29203Node: MIPS Macros564642
29204Ref: MIPS Macros-Footnote-1567356
29205Node: MIPS Symbol Sizes567499
29206Node: MIPS Small Data569171
29207Node: MIPS ISA571335
29208Node: MIPS assembly options573119
29209Node: MIPS autoextend574252
29210Node: MIPS insn574986
29211Node: MIPS FP ABIs576267
29212Node: MIPS FP ABI History576719
29213Node: MIPS FP ABI Variants577479
29214Node: MIPS FP ABI Selection580032
29215Node: MIPS FP ABI Compatibility581095
29216Node: MIPS NaN Encodings581905
29217Node: MIPS Option Stack583868
29218Node: MIPS ASE Instruction Generation Overrides584653
29219Node: MIPS Floating-Point589414
29220Node: MIPS Syntax590320
29221Node: MIPS-Chars590582
29222Node: MMIX-Dependent591124
29223Node: MMIX-Opts591504
29224Node: MMIX-Expand595110
29225Node: MMIX-Syntax596422
29226Ref: mmixsite596778
29227Node: MMIX-Chars597620
29228Node: MMIX-Symbols598493
29229Node: MMIX-Regs600564
29230Node: MMIX-Pseudos601589
29231Ref: MMIX-loc601731
29232Ref: MMIX-local602812
29233Ref: MMIX-is603345
29234Ref: MMIX-greg603617
29235Ref: GREG-base604535
29236Ref: MMIX-byte605854
29237Ref: MMIX-constants606326
29238Ref: MMIX-prefix606968
29239Ref: MMIX-spec607343
29240Node: MMIX-mmixal607677
29241Node: MSP430-Dependent611172
29242Node: MSP430 Options611641
29243Node: MSP430 Syntax615209
29244Node: MSP430-Macros615525
29245Node: MSP430-Chars616255
29246Node: MSP430-Regs616970
29247Node: MSP430-Ext617531
29248Node: MSP430 Floating Point619350
29249Node: MSP430 Directives619574
29250Node: MSP430 Opcodes621415
29251Node: MSP430 Profiling Capability621810
29252Node: NDS32-Dependent624138
29253Node: NDS32 Options624747
29254Node: NDS32 Syntax626630
29255Node: NDS32-Chars626898
29256Node: NDS32-Regs627365
29257Node: NDS32-Ops628219
29258Node: NiosII-Dependent631816
29259Node: Nios II Options632235
29260Node: Nios II Syntax633467
29261Node: Nios II Chars633673
29262Node: Nios II Relocations633864
29263Node: Nios II Directives635435
29264Node: Nios II Opcodes636997
29265Node: NS32K-Dependent637272
29266Node: NS32K Syntax637501
29267Node: NS32K-Chars637650
29268Node: OpenRISC-Dependent638390
29269Node: OpenRISC-Syntax638733
29270Node: OpenRISC-Chars639054
29271Node: OpenRISC-Regs639377
29272Node: OpenRISC-Relocs640390
29273Node: OpenRISC-Float645170
29274Node: OpenRISC-Directives645376
29275Node: OpenRISC-Opcodes646174
29276Node: PDP-11-Dependent646466
29277Node: PDP-11-Options646859
29278Node: PDP-11-Pseudos651918
29279Node: PDP-11-Syntax652263
29280Node: PDP-11-Mnemonics653095
29281Node: PDP-11-Synthetic653397
29282Node: PJ-Dependent653615
29283Node: PJ Options653878
29284Node: PJ Syntax654173
29285Node: PJ-Chars654338
29286Node: PPC-Dependent654887
29287Node: PowerPC-Opts655219
29288Node: PowerPC-Pseudo658943
29289Node: PowerPC-Syntax659564
29290Node: PowerPC-Chars659754
29291Node: PRU-Dependent660505
29292Node: PRU Options660888
29293Node: PRU Syntax661627
29294Node: PRU Chars661814
29295Node: PRU Relocations661969
29296Node: PRU Directives662520
29297Node: PRU Opcodes663423
29298Node: RISC-V-Dependent663840
29299Node: RISC-V-Options664215
29300Node: RISC-V-Directives665222
29301Node: RISC-V-Formats668947
29302Node: RISC-V-ATTRIBUTE676665
29303Node: RL78-Dependent678627
29304Node: RL78-Opts679028
29305Node: RL78-Modifiers679862
29306Node: RL78-Directives680641
29307Node: RL78-Syntax681245
29308Node: RL78-Chars681441
29309Node: RX-Dependent681997
29310Node: RX-Opts682428
29311Node: RX-Modifiers686692
29312Node: RX-Directives687795
29313Node: RX-Float688534
29314Node: RX-Syntax689169
29315Node: RX-Chars689348
29316Node: S/390-Dependent689900
29317Node: s390 Options690745
29318Node: s390 Characters692905
29319Node: s390 Syntax693426
29320Node: s390 Register694328
29321Node: s390 Mnemonics695144
29322Node: s390 Operands698164
29323Node: s390 Formats700795
29324Node: s390 Aliases708642
29325Node: s390 Operand Modifier712607
29326Node: s390 Instruction Marker716410
29327Node: s390 Literal Pool Entries717424
29328Node: s390 Directives719357
29329Node: s390 Floating Point724810
29330Node: SCORE-Dependent725258
29331Node: SCORE-Opts725560
29332Node: SCORE-Pseudo726847
29333Node: SCORE-Syntax728929
29334Node: SCORE-Chars729111
29335Node: SH-Dependent729669
29336Node: SH Options730081
29337Node: SH Syntax731132
29338Node: SH-Chars731405
29339Node: SH-Regs731948
29340Node: SH-Addressing732562
29341Node: SH Floating Point733470
29342Node: SH Directives734567
29343Node: SH Opcodes734968
29344Node: Sparc-Dependent739289
29345Node: Sparc-Opts739698
29346Node: Sparc-Aligned-Data745411
29347Node: Sparc-Syntax746243
29348Node: Sparc-Chars746817
29349Node: Sparc-Regs747380
29350Node: Sparc-Constants753228
29351Node: Sparc-Relocs757988
29352Node: Sparc-Size-Translations763106
29353Node: Sparc-Float764756
29354Node: Sparc-Directives764951
29355Node: TIC54X-Dependent766913
29356Node: TIC54X-Opts767676
29357Node: TIC54X-Block768717
29358Node: TIC54X-Env769077
29359Node: TIC54X-Constants769425
29360Node: TIC54X-Subsyms769822
29361Node: TIC54X-Locals771726
29362Node: TIC54X-Builtins772466
29363Node: TIC54X-Ext774880
29364Node: TIC54X-Directives775451
29365Node: TIC54X-Macros786359
29366Node: TIC54X-MMRegs788446
29367Node: TIC54X-Syntax788683
29368Node: TIC54X-Chars788873
29369Node: TIC6X-Dependent789564
29370Node: TIC6X Options789867
29371Node: TIC6X Syntax791866
29372Node: TIC6X Directives792969
29373Node: TILE-Gx-Dependent795253
29374Node: TILE-Gx Options795563
29375Node: TILE-Gx Syntax795912
29376Node: TILE-Gx Opcodes798148
29377Node: TILE-Gx Registers798436
29378Node: TILE-Gx Modifiers799207
29379Node: TILE-Gx Directives804206
29380Node: TILEPro-Dependent805109
29381Node: TILEPro Options805418
29382Node: TILEPro Syntax805602
29383Node: TILEPro Opcodes807838
29384Node: TILEPro Registers808129
29385Node: TILEPro Modifiers808899
29386Node: TILEPro Directives813688
29387Node: V850-Dependent814591
29388Node: V850 Options814987
29389Node: V850 Syntax819265
29390Node: V850-Chars819505
29391Node: V850-Regs820049
29392Node: V850 Floating Point821559
29393Node: V850 Directives821765
29394Node: V850 Opcodes823831
29395Node: Vax-Dependent829710
29396Node: VAX-Opts830294
29397Node: VAX-float834015
29398Node: VAX-directives834648
29399Node: VAX-opcodes835508
29400Node: VAX-branch835897
29401Node: VAX-operands838401
29402Node: VAX-no839164
29403Node: VAX-Syntax839420
29404Node: VAX-Chars839586
29405Node: Visium-Dependent840140
29406Node: Visium Options840453
29407Node: Visium Syntax840919
29408Node: Visium Characters841164
29409Node: Visium Registers841745
29410Node: Visium Opcodes842017
29411Node: WebAssembly-Dependent842443
29412Node: WebAssembly-Notes842884
29413Node: WebAssembly-Syntax843170
29414Node: WebAssembly-Chars843736
29415Node: WebAssembly-Relocs844115
29416Node: WebAssembly-Signatures844841
29417Node: WebAssembly-Floating-Point845342
29418Node: WebAssembly-Opcodes845583
29419Node: WebAssembly-module-layout846216
29420Node: XGATE-Dependent846696
29421Node: XGATE-Opts847123
29422Node: XGATE-Syntax848112
29423Node: XGATE-Directives850191
29424Node: XGATE-Float850430
29425Node: XGATE-opcodes850927
29426Node: XSTORMY16-Dependent851039
29427Node: XStormy16 Syntax851385
29428Node: XStormy16-Chars851575
29429Node: XStormy16 Directives852188
29430Node: XStormy16 Opcodes852842
29431Node: Xtensa-Dependent853897
29432Node: Xtensa Options854628
29433Node: Xtensa Syntax858895
29434Node: Xtensa Opcodes861039
29435Node: Xtensa Registers862832
29436Node: Xtensa Optimizations863465
29437Node: Density Instructions863917
29438Node: Xtensa Automatic Alignment865019
29439Node: Xtensa Relaxation867466
29440Node: Xtensa Branch Relaxation868431
29441Node: Xtensa Call Relaxation869803
29442Node: Xtensa Jump Relaxation871584
29443Node: Xtensa Immediate Relaxation873684
29444Node: Xtensa Directives876259
29445Node: Schedule Directive877967
29446Node: Longcalls Directive878307
29447Node: Transform Directive878851
29448Node: Literal Directive879593
29449Ref: Literal Directive-Footnote-1883132
29450Node: Literal Position Directive883274
29451Node: Literal Prefix Directive884973
29452Node: Absolute Literals Directive885871
29453Node: Z80-Dependent887178
29454Node: Z80 Options887566
29455Node: Z80 Syntax890856
29456Node: Z80-Chars891564
29457Node: Z80-Regs892415
29458Node: Z80-Case892767
29459Node: Z80-Labels893231
29460Node: Z80 Floating Point893727
29461Node: Z80 Directives894196
29462Node: Z80 Opcodes896178
29463Node: Z8000-Dependent897786
29464Node: Z8000 Options898722
29465Node: Z8000 Syntax898939
29466Node: Z8000-Chars899229
29467Node: Z8000-Regs899711
29468Node: Z8000-Addressing900501
29469Node: Z8000 Directives901611
29470Node: Z8000 Opcodes903220
29471Node: Reporting Bugs913162
29472Node: Bug Criteria913888
29473Node: Bug Reporting914655
29474Node: Acknowledgements921299
29475Ref: Acknowledgements-Footnote-1926265
29476Node: GNU Free Documentation License926291
29477Node: AS Index951441
29478
29479End Tag Table
29480