OpenCores
URL https://opencores.org/ocsvn/altor32/altor32/trunk

Subversion Repositories altor32

[/] [altor32/] [trunk/] [gcc-x64/] [or1knd-elf/] [share/] [info/] [as.info] - Blame information for rev 35

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 35 ultra_embe
This is as.info, produced by makeinfo version 4.13 from as.texinfo.
2
 
3
INFO-DIR-SECTION Software development
4
START-INFO-DIR-ENTRY
5
* As: (as).                     The GNU assembler.
6
* Gas: (as).                    The GNU assembler.
7
END-INFO-DIR-ENTRY
8
 
9
   This file documents the GNU Assembler "as".
10
 
11
   Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
12
2000, 2001, 2002, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
13
Foundation, Inc.
14
 
15
   Permission is granted to copy, distribute and/or modify this document
16
under the terms of the GNU Free Documentation License, Version 1.3 or
17
any later version published by the Free Software Foundation; with no
18
Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
19
Texts.  A copy of the license is included in the section entitled "GNU
20
Free Documentation License".
21
 
22

23
File: as.info,  Node: Top,  Next: Overview,  Up: (dir)
24
 
25
Using as
26
********
27
 
28
This file is a user guide to the GNU assembler `as' (GNU Binutils)
29
version 2.23.51.
30
 
31
   This document is distributed under the terms of the GNU Free
32
Documentation License.  A copy of the license is included in the
33
section entitled "GNU Free Documentation License".
34
 
35
* Menu:
36
 
37
* Overview::                    Overview
38
* Invoking::                    Command-Line Options
39
* Syntax::                      Syntax
40
* Sections::                    Sections and Relocation
41
* Symbols::                     Symbols
42
* Expressions::                 Expressions
43
* Pseudo Ops::                  Assembler Directives
44
 
45
* Object Attributes::           Object Attributes
46
* Machine Dependencies::        Machine Dependent Features
47
* Reporting Bugs::              Reporting Bugs
48
* Acknowledgements::            Who Did What
49
* GNU Free Documentation License::  GNU Free Documentation License
50
* AS Index::                    AS Index
51
 
52

53
File: as.info,  Node: Overview,  Next: Invoking,  Prev: Top,  Up: Top
54
 
55
1 Overview
56
**********
57
 
58
Here is a brief summary of how to invoke `as'.  For details, see *note
59
Command-Line Options: Invoking.
60
 
61
     as [-a[cdghlns][=FILE]] [-alternate] [-D]
62
      [-compress-debug-sections]  [-nocompress-debug-sections]
63
      [-debug-prefix-map OLD=NEW]
64
      [-defsym SYM=VAL] [-f] [-g] [-gstabs]
65
      [-gstabs+] [-gdwarf-2] [-help] [-I DIR] [-J]
66
      [-K] [-L] [-listing-lhs-width=NUM]
67
      [-listing-lhs-width2=NUM] [-listing-rhs-width=NUM]
68
      [-listing-cont-lines=NUM] [-keep-locals] [-o
69
      OBJFILE] [-R] [-reduce-memory-overheads] [-statistics]
70
      [-v] [-version] [-version] [-W] [-warn]
71
      [-fatal-warnings] [-w] [-x] [-Z] [@FILE]
72
      [-size-check=[error|warning]]
73
      [-target-help] [TARGET-OPTIONS]
74
      [-|FILES ...]
75
 
76
     _Target AArch64 options:_
77
        [-EB|-EL]
78
 
79
     _Target Alpha options:_
80
        [-mCPU]
81
        [-mdebug | -no-mdebug]
82
        [-replace | -noreplace]
83
        [-relax] [-g] [-GSIZE]
84
        [-F] [-32addr]
85
 
86
     _Target ARC options:_
87
        [-marc[5|6|7|8]]
88
        [-EB|-EL]
89
 
90
     _Target ARM options:_
91
        [-mcpu=PROCESSOR[+EXTENSION...]]
92
        [-march=ARCHITECTURE[+EXTENSION...]]
93
        [-mfpu=FLOATING-POINT-FORMAT]
94
        [-mfloat-abi=ABI]
95
        [-meabi=VER]
96
        [-mthumb]
97
        [-EB|-EL]
98
        [-mapcs-32|-mapcs-26|-mapcs-float|
99
         -mapcs-reentrant]
100
        [-mthumb-interwork] [-k]
101
 
102
     _Target Blackfin options:_
103
        [-mcpu=PROCESSOR[-SIREVISION]]
104
        [-mfdpic]
105
        [-mno-fdpic]
106
        [-mnopic]
107
 
108
     _Target CRIS options:_
109
        [-underscore | -no-underscore]
110
        [-pic] [-N]
111
        [-emulation=criself | -emulation=crisaout]
112
        [-march=v0_v10 | -march=v10 | -march=v32 | -march=common_v10_v32]
113
 
114
     _Target D10V options:_
115
        [-O]
116
 
117
     _Target D30V options:_
118
        [-O|-n|-N]
119
 
120
     _Target EPIPHANY options:_
121
        [-mepiphany|-mepiphany16]
122
 
123
     _Target H8/300 options:_
124
        [-h-tick-hex]
125
 
126
     _Target i386 options:_
127
        [-32|-x32|-64] [-n]
128
        [-march=CPU[+EXTENSION...]] [-mtune=CPU]
129
 
130
     _Target i960 options:_
131
        [-ACA|-ACA_A|-ACB|-ACC|-AKA|-AKB|
132
         -AKC|-AMC]
133
        [-b] [-no-relax]
134
 
135
     _Target IA-64 options:_
136
        [-mconstant-gp|-mauto-pic]
137
        [-milp32|-milp64|-mlp64|-mp64]
138
        [-mle|mbe]
139
        [-mtune=itanium1|-mtune=itanium2]
140
        [-munwind-check=warning|-munwind-check=error]
141
        [-mhint.b=ok|-mhint.b=warning|-mhint.b=error]
142
        [-x|-xexplicit] [-xauto] [-xdebug]
143
 
144
     _Target IP2K options:_
145
        [-mip2022|-mip2022ext]
146
 
147
     _Target M32C options:_
148
        [-m32c|-m16c] [-relax] [-h-tick-hex]
149
 
150
     _Target M32R options:_
151
        [-m32rx|-[no-]warn-explicit-parallel-conflicts|
152
        -W[n]p]
153
 
154
     _Target M680X0 options:_
155
        [-l] [-m68000|-m68010|-m68020|...]
156
 
157
     _Target M68HC11 options:_
158
        [-m68hc11|-m68hc12|-m68hcs12|-mm9s12x|-mm9s12xg]
159
        [-mshort|-mlong]
160
        [-mshort-double|-mlong-double]
161
        [-force-long-branches] [-short-branches]
162
        [-strict-direct-mode] [-print-insn-syntax]
163
        [-print-opcodes] [-generate-example]
164
 
165
     _Target MCORE options:_
166
        [-jsri2bsr] [-sifilter] [-relax]
167
        [-mcpu=[210|340]]
168
     _Target MICROBLAZE options:_
169
 
170
     _Target MIPS options:_
171
        [-nocpp] [-EL] [-EB] [-O[OPTIMIZATION LEVEL]]
172
        [-g[DEBUG LEVEL]] [-G NUM] [-KPIC] [-call_shared]
173
        [-non_shared] [-xgot [-mvxworks-pic]
174
        [-mabi=ABI] [-32] [-n32] [-64] [-mfp32] [-mgp32]
175
        [-march=CPU] [-mtune=CPU] [-mips1] [-mips2]
176
        [-mips3] [-mips4] [-mips5] [-mips32] [-mips32r2]
177
        [-mips64] [-mips64r2]
178
        [-construct-floats] [-no-construct-floats]
179
        [-trap] [-no-break] [-break] [-no-trap]
180
        [-mips16] [-no-mips16]
181
        [-mmicromips] [-mno-micromips]
182
        [-msmartmips] [-mno-smartmips]
183
        [-mips3d] [-no-mips3d]
184
        [-mdmx] [-no-mdmx]
185
        [-mdsp] [-mno-dsp]
186
        [-mdspr2] [-mno-dspr2]
187
        [-mmt] [-mno-mt]
188
        [-mmcu] [-mno-mcu]
189
        [-mfix7000] [-mno-fix7000]
190
        [-mfix-vr4120] [-mno-fix-vr4120]
191
        [-mfix-vr4130] [-mno-fix-vr4130]
192
        [-mdebug] [-no-mdebug]
193
        [-mpdr] [-mno-pdr]
194
 
195
     _Target MMIX options:_
196
        [-fixed-special-register-names] [-globalize-symbols]
197
        [-gnu-syntax] [-relax] [-no-predefined-symbols]
198
        [-no-expand] [-no-merge-gregs] [-x]
199
        [-linker-allocated-gregs]
200
 
201
     _Target PDP11 options:_
202
        [-mpic|-mno-pic] [-mall] [-mno-extensions]
203
        [-mEXTENSION|-mno-EXTENSION]
204
        [-mCPU] [-mMACHINE]
205
 
206
     _Target picoJava options:_
207
        [-mb|-me]
208
 
209
     _Target PowerPC options:_
210
        [-a32|-a64]
211
        [-mpwrx|-mpwr2|-mpwr|-m601|-mppc|-mppc32|-m603|-m604|-m403|-m405|
212
         -m440|-m464|-m476|-m7400|-m7410|-m7450|-m7455|-m750cl|-mppc64|
213
         -m620|-me500|-e500x2|-me500mc|-me500mc64|-me5500|-me6500|-mppc64bridge|
214
         -mbooke|-mpower4|-mpwr4|-mpower5|-mpwr5|-mpwr5x|-mpower6|-mpwr6|
215
         -mpower7|-mpwr7|-ma2|-mcell|-mspe|-mtitan|-me300|-mvle|-mcom]
216
        [-many] [-maltivec|-mvsx]
217
        [-mregnames|-mno-regnames]
218
        [-mrelocatable|-mrelocatable-lib|-K PIC] [-memb]
219
        [-mlittle|-mlittle-endian|-le|-mbig|-mbig-endian|-be]
220
        [-msolaris|-mno-solaris]
221
        [-nops=COUNT]
222
 
223
     _Target RX options:_
224
        [-mlittle-endian|-mbig-endian]
225
        [-m32bit-doubles|-m64bit-doubles]
226
        [-muse-conventional-section-names]
227
        [-msmall-data-limit]
228
        [-mpid]
229
        [-mrelax]
230
        [-mint-register=NUMBER]
231
        [-mgcc-abi|-mrx-abi]
232
 
233
     _Target s390 options:_
234
        [-m31|-m64] [-mesa|-mzarch] [-march=CPU]
235
        [-mregnames|-mno-regnames]
236
        [-mwarn-areg-zero]
237
 
238
     _Target SCORE options:_
239
        [-EB][-EL][-FIXDD][-NWARN]
240
        [-SCORE5][-SCORE5U][-SCORE7][-SCORE3]
241
        [-march=score7][-march=score3]
242
        [-USE_R1][-KPIC][-O0][-G NUM][-V]
243
 
244
     _Target SPARC options:_
245
        [-Av6|-Av7|-Av8|-Asparclet|-Asparclite
246
         -Av8plus|-Av8plusa|-Av9|-Av9a]
247
        [-xarch=v8plus|-xarch=v8plusa] [-bump]
248
        [-32|-64]
249
 
250
     _Target TIC54X options:_
251
      [-mcpu=54[123589]|-mcpu=54[56]lp] [-mfar-mode|-mf]
252
      [-merrors-to-file |-me ]
253
 
254
 
255
     _Target TIC6X options:_
256
        [-march=ARCH] [-mbig-endian|-mlittle-endian]
257
        [-mdsbt|-mno-dsbt] [-mpid=no|-mpid=near|-mpid=far]
258
        [-mpic|-mno-pic]
259
 
260
     _Target TILE-Gx options:_
261
        [-m32|-m64][-EB][-EL]
262
 
263
 
264
     _Target Xtensa options:_
265
      [-[no-]text-section-literals] [-[no-]absolute-literals]
266
      [-[no-]target-align] [-[no-]longcalls]
267
      [-[no-]transform]
268
      [-rename-section OLDNAME=NEWNAME]
269
 
270
 
271
     _Target Z80 options:_
272
       [-z80] [-r800]
273
       [ -ignore-undocumented-instructions] [-Wnud]
274
       [ -ignore-unportable-instructions] [-Wnup]
275
       [ -warn-undocumented-instructions] [-Wud]
276
       [ -warn-unportable-instructions] [-Wup]
277
       [ -forbid-undocumented-instructions] [-Fud]
278
       [ -forbid-unportable-instructions] [-Fup]
279
 
280
`@FILE'
281
     Read command-line options from FILE.  The options read are
282
     inserted in place of the original @FILE option.  If FILE does not
283
     exist, or cannot be read, then the option will be treated
284
     literally, and not removed.
285
 
286
     Options in FILE are separated by whitespace.  A whitespace
287
     character may be included in an option by surrounding the entire
288
     option in either single or double quotes.  Any character
289
     (including a backslash) may be included by prefixing the character
290
     to be included with a backslash.  The FILE may itself contain
291
     additional @FILE options; any such options will be processed
292
     recursively.
293
 
294
`-a[cdghlmns]'
295
     Turn on listings, in any of a variety of ways:
296
 
297
    `-ac'
298
          omit false conditionals
299
 
300
    `-ad'
301
          omit debugging directives
302
 
303
    `-ag'
304
          include general information, like as version and options
305
          passed
306
 
307
    `-ah'
308
          include high-level source
309
 
310
    `-al'
311
          include assembly
312
 
313
    `-am'
314
          include macro expansions
315
 
316
    `-an'
317
          omit forms processing
318
 
319
    `-as'
320
          include symbols
321
 
322
    `=file'
323
          set the name of the listing file
324
 
325
     You may combine these options; for example, use `-aln' for assembly
326
     listing without forms processing.  The `=file' option, if used,
327
     must be the last one.  By itself, `-a' defaults to `-ahls'.
328
 
329
`--alternate'
330
     Begin in alternate macro mode.  *Note `.altmacro': Altmacro.
331
 
332
`--compress-debug-sections'
333
     Compress DWARF debug sections using zlib.  The debug sections are
334
     renamed to begin with `.zdebug', and the resulting object file may
335
     not be compatible with older linkers and object file utilities.
336
 
337
`--nocompress-debug-sections'
338
     Do not compress DWARF debug sections.  This is the default.
339
 
340
`-D'
341
     Ignored.  This option is accepted for script compatibility with
342
     calls to other assemblers.
343
 
344
`--debug-prefix-map OLD=NEW'
345
     When assembling files in directory `OLD', record debugging
346
     information describing them as in `NEW' instead.
347
 
348
`--defsym SYM=VALUE'
349
     Define the symbol SYM to be VALUE before assembling the input file.
350
     VALUE must be an integer constant.  As in C, a leading `0x'
351
     indicates a hexadecimal value, and a leading `0' indicates an octal
352
     value.  The value of the symbol can be overridden inside a source
353
     file via the use of a `.set' pseudo-op.
354
 
355
`-f'
356
     "fast"--skip whitespace and comment preprocessing (assume source is
357
     compiler output).
358
 
359
`-g'
360
`--gen-debug'
361
     Generate debugging information for each assembler source line
362
     using whichever debug format is preferred by the target.  This
363
     currently means either STABS, ECOFF or DWARF2.
364
 
365
`--gstabs'
366
     Generate stabs debugging information for each assembler line.  This
367
     may help debugging assembler code, if the debugger can handle it.
368
 
369
`--gstabs+'
370
     Generate stabs debugging information for each assembler line, with
371
     GNU extensions that probably only gdb can handle, and that could
372
     make other debuggers crash or refuse to read your program.  This
373
     may help debugging assembler code.  Currently the only GNU
374
     extension is the location of the current working directory at
375
     assembling time.
376
 
377
`--gdwarf-2'
378
     Generate DWARF2 debugging information for each assembler line.
379
     This may help debugging assembler code, if the debugger can handle
380
     it.  Note--this option is only supported by some targets, not all
381
     of them.
382
 
383
`--size-check=error'
384
`--size-check=warning'
385
     Issue an error or warning for invalid ELF .size directive.
386
 
387
`--help'
388
     Print a summary of the command line options and exit.
389
 
390
`--target-help'
391
     Print a summary of all target specific options and exit.
392
 
393
`-I DIR'
394
     Add directory DIR to the search list for `.include' directives.
395
 
396
`-J'
397
     Don't warn about signed overflow.
398
 
399
`-K'
400
     Issue warnings when difference tables altered for long
401
     displacements.
402
 
403
`-L'
404
`--keep-locals'
405
     Keep (in the symbol table) local symbols.  These symbols start with
406
     system-specific local label prefixes, typically `.L' for ELF
407
     systems or `L' for traditional a.out systems.  *Note Symbol
408
     Names::.
409
 
410
`--listing-lhs-width=NUMBER'
411
     Set the maximum width, in words, of the output data column for an
412
     assembler listing to NUMBER.
413
 
414
`--listing-lhs-width2=NUMBER'
415
     Set the maximum width, in words, of the output data column for
416
     continuation lines in an assembler listing to NUMBER.
417
 
418
`--listing-rhs-width=NUMBER'
419
     Set the maximum width of an input source line, as displayed in a
420
     listing, to NUMBER bytes.
421
 
422
`--listing-cont-lines=NUMBER'
423
     Set the maximum number of lines printed in a listing for a single
424
     line of input to NUMBER + 1.
425
 
426
`-o OBJFILE'
427
     Name the object-file output from `as' OBJFILE.
428
 
429
`-R'
430
     Fold the data section into the text section.
431
 
432
     Set the default size of GAS's hash tables to a prime number close
433
     to NUMBER.  Increasing this value can reduce the length of time it
434
     takes the assembler to perform its tasks, at the expense of
435
     increasing the assembler's memory requirements.  Similarly
436
     reducing this value can reduce the memory requirements at the
437
     expense of speed.
438
 
439
`--reduce-memory-overheads'
440
     This option reduces GAS's memory requirements, at the expense of
441
     making the assembly processes slower.  Currently this switch is a
442
     synonym for `--hash-size=4051', but in the future it may have
443
     other effects as well.
444
 
445
`--statistics'
446
     Print the maximum space (in bytes) and total time (in seconds)
447
     used by assembly.
448
 
449
`--strip-local-absolute'
450
     Remove local absolute symbols from the outgoing symbol table.
451
 
452
`-v'
453
`-version'
454
     Print the `as' version.
455
 
456
`--version'
457
     Print the `as' version and exit.
458
 
459
`-W'
460
`--no-warn'
461
     Suppress warning messages.
462
 
463
`--fatal-warnings'
464
     Treat warnings as errors.
465
 
466
`--warn'
467
     Don't suppress warning messages or treat them as errors.
468
 
469
`-w'
470
     Ignored.
471
 
472
`-x'
473
     Ignored.
474
 
475
`-Z'
476
     Generate an object file even after errors.
477
 
478
`-- | FILES ...'
479
     Standard input, or source files to assemble.
480
 
481
 
482
   *Note AArch64 Options::, for the options available when as is
483
configured for the 64-bit mode of the ARM Architecture (AArch64).
484
 
485
   *Note Alpha Options::, for the options available when as is
486
configured for an Alpha processor.
487
 
488
   The following options are available when as is configured for an ARC
489
processor.
490
 
491
`-marc[5|6|7|8]'
492
     This option selects the core processor variant.
493
 
494
`-EB | -EL'
495
     Select either big-endian (-EB) or little-endian (-EL) output.
496
 
497
   The following options are available when as is configured for the ARM
498
processor family.
499
 
500
`-mcpu=PROCESSOR[+EXTENSION...]'
501
     Specify which ARM processor variant is the target.
502
 
503
`-march=ARCHITECTURE[+EXTENSION...]'
504
     Specify which ARM architecture variant is used by the target.
505
 
506
`-mfpu=FLOATING-POINT-FORMAT'
507
     Select which Floating Point architecture is the target.
508
 
509
`-mfloat-abi=ABI'
510
     Select which floating point ABI is in use.
511
 
512
`-mthumb'
513
     Enable Thumb only instruction decoding.
514
 
515
`-mapcs-32 | -mapcs-26 | -mapcs-float | -mapcs-reentrant'
516
     Select which procedure calling convention is in use.
517
 
518
`-EB | -EL'
519
     Select either big-endian (-EB) or little-endian (-EL) output.
520
 
521
`-mthumb-interwork'
522
     Specify that the code has been generated with interworking between
523
     Thumb and ARM code in mind.
524
 
525
`-k'
526
     Specify that PIC code has been generated.
527
 
528
   *Note Blackfin Options::, for the options available when as is
529
configured for the Blackfin processor family.
530
 
531
   See the info pages for documentation of the CRIS-specific options.
532
 
533
   The following options are available when as is configured for a D10V
534
processor.
535
`-O'
536
     Optimize output by parallelizing instructions.
537
 
538
   The following options are available when as is configured for a D30V
539
processor.
540
`-O'
541
     Optimize output by parallelizing instructions.
542
 
543
`-n'
544
     Warn when nops are generated.
545
 
546
`-N'
547
     Warn when a nop after a 32-bit multiply instruction is generated.
548
 
549
   The following options are available when as is configured for the
550
Adapteva EPIPHANY series.
551
 
552
   *Note Epiphany Options::, for the options available when as is
553
configured for an Epiphany processor.
554
 
555
   *Note i386-Options::, for the options available when as is
556
configured for an i386 processor.
557
 
558
   The following options are available when as is configured for the
559
Intel 80960 processor.
560
 
561
`-ACA | -ACA_A | -ACB | -ACC | -AKA | -AKB | -AKC | -AMC'
562
     Specify which variant of the 960 architecture is the target.
563
 
564
`-b'
565
     Add code to collect statistics about branches taken.
566
 
567
`-no-relax'
568
     Do not alter compare-and-branch instructions for long
569
     displacements; error if necessary.
570
 
571
 
572
   The following options are available when as is configured for the
573
Ubicom IP2K series.
574
 
575
`-mip2022ext'
576
     Specifies that the extended IP2022 instructions are allowed.
577
 
578
`-mip2022'
579
     Restores the default behaviour, which restricts the permitted
580
     instructions to just the basic IP2022 ones.
581
 
582
 
583
   The following options are available when as is configured for the
584
Renesas M32C and M16C processors.
585
 
586
`-m32c'
587
     Assemble M32C instructions.
588
 
589
`-m16c'
590
     Assemble M16C instructions (the default).
591
 
592
`-relax'
593
     Enable support for link-time relaxations.
594
 
595
`-h-tick-hex'
596
     Support H'00 style hex constants in addition to 0x00 style.
597
 
598
 
599
   The following options are available when as is configured for the
600
Renesas M32R (formerly Mitsubishi M32R) series.
601
 
602
`--m32rx'
603
     Specify which processor in the M32R family is the target.  The
604
     default is normally the M32R, but this option changes it to the
605
     M32RX.
606
 
607
`--warn-explicit-parallel-conflicts or --Wp'
608
     Produce warning messages when questionable parallel constructs are
609
     encountered.
610
 
611
`--no-warn-explicit-parallel-conflicts or --Wnp'
612
     Do not produce warning messages when questionable parallel
613
     constructs are encountered.
614
 
615
 
616
   The following options are available when as is configured for the
617
Motorola 68000 series.
618
 
619
`-l'
620
     Shorten references to undefined symbols, to one word instead of
621
     two.
622
 
623
`-m68000 | -m68008 | -m68010 | -m68020 | -m68030'
624
`| -m68040 | -m68060 | -m68302 | -m68331 | -m68332'
625
`| -m68333 | -m68340 | -mcpu32 | -m5200'
626
     Specify what processor in the 68000 family is the target.  The
627
     default is normally the 68020, but this can be changed at
628
     configuration time.
629
 
630
`-m68881 | -m68882 | -mno-68881 | -mno-68882'
631
     The target machine does (or does not) have a floating-point
632
     coprocessor.  The default is to assume a coprocessor for 68020,
633
     68030, and cpu32.  Although the basic 68000 is not compatible with
634
     the 68881, a combination of the two can be specified, since it's
635
     possible to do emulation of the coprocessor instructions with the
636
     main processor.
637
 
638
`-m68851 | -mno-68851'
639
     The target machine does (or does not) have a memory-management
640
     unit coprocessor.  The default is to assume an MMU for 68020 and
641
     up.
642
 
643
 
644
   For details about the PDP-11 machine dependent features options, see
645
*note PDP-11-Options::.
646
 
647
`-mpic | -mno-pic'
648
     Generate position-independent (or position-dependent) code.  The
649
     default is `-mpic'.
650
 
651
`-mall'
652
`-mall-extensions'
653
     Enable all instruction set extensions.  This is the default.
654
 
655
`-mno-extensions'
656
     Disable all instruction set extensions.
657
 
658
`-mEXTENSION | -mno-EXTENSION'
659
     Enable (or disable) a particular instruction set extension.
660
 
661
`-mCPU'
662
     Enable the instruction set extensions supported by a particular
663
     CPU, and disable all other extensions.
664
 
665
`-mMACHINE'
666
     Enable the instruction set extensions supported by a particular
667
     machine model, and disable all other extensions.
668
 
669
   The following options are available when as is configured for a
670
picoJava processor.
671
 
672
`-mb'
673
     Generate "big endian" format output.
674
 
675
`-ml'
676
     Generate "little endian" format output.
677
 
678
 
679
   The following options are available when as is configured for the
680
Motorola 68HC11 or 68HC12 series.
681
 
682
`-m68hc11 | -m68hc12 | -m68hcs12 | -mm9s12x | -mm9s12xg'
683
     Specify what processor is the target.  The default is defined by
684
     the configuration option when building the assembler.
685
 
686
`--xgate-ramoffset'
687
     Instruct the linker to offset RAM addresses from S12X address
688
     space into XGATE address space.
689
 
690
`-mshort'
691
     Specify to use the 16-bit integer ABI.
692
 
693
`-mlong'
694
     Specify to use the 32-bit integer ABI.
695
 
696
`-mshort-double'
697
     Specify to use the 32-bit double ABI.
698
 
699
`-mlong-double'
700
     Specify to use the 64-bit double ABI.
701
 
702
`--force-long-branches'
703
     Relative branches are turned into absolute ones. This concerns
704
     conditional branches, unconditional branches and branches to a sub
705
     routine.
706
 
707
`-S | --short-branches'
708
     Do not turn relative branches into absolute ones when the offset
709
     is out of range.
710
 
711
`--strict-direct-mode'
712
     Do not turn the direct addressing mode into extended addressing
713
     mode when the instruction does not support direct addressing mode.
714
 
715
`--print-insn-syntax'
716
     Print the syntax of instruction in case of error.
717
 
718
`--print-opcodes'
719
     Print the list of instructions with syntax and then exit.
720
 
721
`--generate-example'
722
     Print an example of instruction for each possible instruction and
723
     then exit.  This option is only useful for testing `as'.
724
 
725
 
726
   The following options are available when `as' is configured for the
727
SPARC architecture:
728
 
729
`-Av6 | -Av7 | -Av8 | -Asparclet | -Asparclite'
730
`-Av8plus | -Av8plusa | -Av9 | -Av9a'
731
     Explicitly select a variant of the SPARC architecture.
732
 
733
     `-Av8plus' and `-Av8plusa' select a 32 bit environment.  `-Av9'
734
     and `-Av9a' select a 64 bit environment.
735
 
736
     `-Av8plusa' and `-Av9a' enable the SPARC V9 instruction set with
737
     UltraSPARC extensions.
738
 
739
`-xarch=v8plus | -xarch=v8plusa'
740
     For compatibility with the Solaris v9 assembler.  These options are
741
     equivalent to -Av8plus and -Av8plusa, respectively.
742
 
743
`-bump'
744
     Warn when the assembler switches to another architecture.
745
 
746
   The following options are available when as is configured for the
747
'c54x architecture.
748
 
749
`-mfar-mode'
750
     Enable extended addressing mode.  All addresses and relocations
751
     will assume extended addressing (usually 23 bits).
752
 
753
`-mcpu=CPU_VERSION'
754
     Sets the CPU version being compiled for.
755
 
756
`-merrors-to-file FILENAME'
757
     Redirect error output to a file, for broken systems which don't
758
     support such behaviour in the shell.
759
 
760
   The following options are available when as is configured for a MIPS
761
processor.
762
 
763
`-G NUM'
764
     This option sets the largest size of an object that can be
765
     referenced implicitly with the `gp' register.  It is only accepted
766
     for targets that use ECOFF format, such as a DECstation running
767
     Ultrix.  The default value is 8.
768
 
769
`-EB'
770
     Generate "big endian" format output.
771
 
772
`-EL'
773
     Generate "little endian" format output.
774
 
775
`-mips1'
776
`-mips2'
777
`-mips3'
778
`-mips4'
779
`-mips5'
780
`-mips32'
781
`-mips32r2'
782
`-mips64'
783
`-mips64r2'
784
     Generate code for a particular MIPS Instruction Set Architecture
785
     level.  `-mips1' is an alias for `-march=r3000', `-mips2' is an
786
     alias for `-march=r6000', `-mips3' is an alias for `-march=r4000'
787
     and `-mips4' is an alias for `-march=r8000'.  `-mips5', `-mips32',
788
     `-mips32r2', `-mips64', and `-mips64r2' correspond to generic
789
     `MIPS V', `MIPS32', `MIPS32 Release 2', `MIPS64', and `MIPS64
790
     Release 2' ISA processors, respectively.
791
 
792
`-march=CPU'
793
     Generate code for a particular MIPS cpu.
794
 
795
`-mtune=CPU'
796
     Schedule and tune for a particular MIPS cpu.
797
 
798
`-mfix7000'
799
`-mno-fix7000'
800
     Cause nops to be inserted if the read of the destination register
801
     of an mfhi or mflo instruction occurs in the following two
802
     instructions.
803
 
804
`-mdebug'
805
`-no-mdebug'
806
     Cause stabs-style debugging output to go into an ECOFF-style
807
     .mdebug section instead of the standard ELF .stabs sections.
808
 
809
`-mpdr'
810
`-mno-pdr'
811
     Control generation of `.pdr' sections.
812
 
813
`-mgp32'
814
`-mfp32'
815
     The register sizes are normally inferred from the ISA and ABI, but
816
     these flags force a certain group of registers to be treated as 32
817
     bits wide at all times.  `-mgp32' controls the size of
818
     general-purpose registers and `-mfp32' controls the size of
819
     floating-point registers.
820
 
821
`-mips16'
822
`-no-mips16'
823
     Generate code for the MIPS 16 processor.  This is equivalent to
824
     putting `.set mips16' at the start of the assembly file.
825
     `-no-mips16' turns off this option.
826
 
827
`-mmicromips'
828
`-mno-micromips'
829
     Generate code for the microMIPS processor.  This is equivalent to
830
     putting `.set micromips' at the start of the assembly file.
831
     `-mno-micromips' turns off this option.  This is equivalent to
832
     putting `.set nomicromips' at the start of the assembly file.
833
 
834
`-msmartmips'
835
`-mno-smartmips'
836
     Enables the SmartMIPS extension to the MIPS32 instruction set.
837
     This is equivalent to putting `.set smartmips' at the start of the
838
     assembly file.  `-mno-smartmips' turns off this option.
839
 
840
`-mips3d'
841
`-no-mips3d'
842
     Generate code for the MIPS-3D Application Specific Extension.
843
     This tells the assembler to accept MIPS-3D instructions.
844
     `-no-mips3d' turns off this option.
845
 
846
`-mdmx'
847
`-no-mdmx'
848
     Generate code for the MDMX Application Specific Extension.  This
849
     tells the assembler to accept MDMX instructions.  `-no-mdmx' turns
850
     off this option.
851
 
852
`-mdsp'
853
`-mno-dsp'
854
     Generate code for the DSP Release 1 Application Specific Extension.
855
     This tells the assembler to accept DSP Release 1 instructions.
856
     `-mno-dsp' turns off this option.
857
 
858
`-mdspr2'
859
`-mno-dspr2'
860
     Generate code for the DSP Release 2 Application Specific Extension.
861
     This option implies -mdsp.  This tells the assembler to accept DSP
862
     Release 2 instructions.  `-mno-dspr2' turns off this option.
863
 
864
`-mmt'
865
`-mno-mt'
866
     Generate code for the MT Application Specific Extension.  This
867
     tells the assembler to accept MT instructions.  `-mno-mt' turns
868
     off this option.
869
 
870
`-mmcu'
871
`-mno-mcu'
872
     Generate code for the MCU Application Specific Extension.  This
873
     tells the assembler to accept MCU instructions.  `-mno-mcu' turns
874
     off this option.
875
 
876
`--construct-floats'
877
`--no-construct-floats'
878
     The `--no-construct-floats' option disables the construction of
879
     double width floating point constants by loading the two halves of
880
     the value into the two single width floating point registers that
881
     make up the double width register.  By default
882
     `--construct-floats' is selected, allowing construction of these
883
     floating point constants.
884
 
885
`--emulation=NAME'
886
     This option causes `as' to emulate `as' configured for some other
887
     target, in all respects, including output format (choosing between
888
     ELF and ECOFF only), handling of pseudo-opcodes which may generate
889
     debugging information or store symbol table information, and
890
     default endianness.  The available configuration names are:
891
     `mipsecoff', `mipself', `mipslecoff', `mipsbecoff', `mipslelf',
892
     `mipsbelf'.  The first two do not alter the default endianness
893
     from that of the primary target for which the assembler was
894
     configured; the others change the default to little- or big-endian
895
     as indicated by the `b' or `l' in the name.  Using `-EB' or `-EL'
896
     will override the endianness selection in any case.
897
 
898
     This option is currently supported only when the primary target
899
     `as' is configured for is a MIPS ELF or ECOFF target.
900
     Furthermore, the primary target or others specified with
901
     `--enable-targets=...' at configuration time must include support
902
     for the other format, if both are to be available.  For example,
903
     the Irix 5 configuration includes support for both.
904
 
905
     Eventually, this option will support more configurations, with more
906
     fine-grained control over the assembler's behavior, and will be
907
     supported for more processors.
908
 
909
`-nocpp'
910
     `as' ignores this option.  It is accepted for compatibility with
911
     the native tools.
912
 
913
`--trap'
914
`--no-trap'
915
`--break'
916
`--no-break'
917
     Control how to deal with multiplication overflow and division by
918
     zero.  `--trap' or `--no-break' (which are synonyms) take a trap
919
     exception (and only work for Instruction Set Architecture level 2
920
     and higher); `--break' or `--no-trap' (also synonyms, and the
921
     default) take a break exception.
922
 
923
`-n'
924
     When this option is used, `as' will issue a warning every time it
925
     generates a nop instruction from a macro.
926
 
927
   The following options are available when as is configured for an
928
MCore processor.
929
 
930
`-jsri2bsr'
931
`-nojsri2bsr'
932
     Enable or disable the JSRI to BSR transformation.  By default this
933
     is enabled.  The command line option `-nojsri2bsr' can be used to
934
     disable it.
935
 
936
`-sifilter'
937
`-nosifilter'
938
     Enable or disable the silicon filter behaviour.  By default this
939
     is disabled.  The default can be overridden by the `-sifilter'
940
     command line option.
941
 
942
`-relax'
943
     Alter jump instructions for long displacements.
944
 
945
`-mcpu=[210|340]'
946
     Select the cpu type on the target hardware.  This controls which
947
     instructions can be assembled.
948
 
949
`-EB'
950
     Assemble for a big endian target.
951
 
952
`-EL'
953
     Assemble for a little endian target.
954
 
955
 
956
   See the info pages for documentation of the MMIX-specific options.
957
 
958
   *Note PowerPC-Opts::, for the options available when as is configured
959
for a PowerPC processor.
960
 
961
   See the info pages for documentation of the RX-specific options.
962
 
963
   The following options are available when as is configured for the
964
s390 processor family.
965
 
966
`-m31'
967
`-m64'
968
     Select the word size, either 31/32 bits or 64 bits.
969
 
970
`-mesa'
971
 
972
`-mzarch'
973
     Select the architecture mode, either the Enterprise System
974
     Architecture (esa) or the z/Architecture mode (zarch).
975
 
976
`-march=PROCESSOR'
977
     Specify which s390 processor variant is the target, `g6', `g6',
978
     `z900', `z990', `z9-109', `z9-ec', `z10', `z196', or `zEC12'.
979
 
980
`-mregnames'
981
`-mno-regnames'
982
     Allow or disallow symbolic names for registers.
983
 
984
`-mwarn-areg-zero'
985
     Warn whenever the operand for a base or index register has been
986
     specified but evaluates to zero.
987
 
988
   *Note TIC6X Options::, for the options available when as is
989
configured for a TMS320C6000 processor.
990
 
991
   *Note TILE-Gx Options::, for the options available when as is
992
configured for a TILE-Gx processor.
993
 
994
   *Note Xtensa Options::, for the options available when as is
995
configured for an Xtensa processor.
996
 
997
   The following options are available when as is configured for a Z80
998
family processor.
999
`-z80'
1000
     Assemble for Z80 processor.
1001
 
1002
`-r800'
1003
     Assemble for R800 processor.
1004
 
1005
`-ignore-undocumented-instructions'
1006
`-Wnud'
1007
     Assemble undocumented Z80 instructions that also work on R800
1008
     without warning.
1009
 
1010
`-ignore-unportable-instructions'
1011
`-Wnup'
1012
     Assemble all undocumented Z80 instructions without warning.
1013
 
1014
`-warn-undocumented-instructions'
1015
`-Wud'
1016
     Issue a warning for undocumented Z80 instructions that also work
1017
     on R800.
1018
 
1019
`-warn-unportable-instructions'
1020
`-Wup'
1021
     Issue a warning for undocumented Z80 instructions that do not work
1022
     on R800.
1023
 
1024
`-forbid-undocumented-instructions'
1025
`-Fud'
1026
     Treat all undocumented instructions as errors.
1027
 
1028
`-forbid-unportable-instructions'
1029
`-Fup'
1030
     Treat undocumented Z80 instructions that do not work on R800 as
1031
     errors.
1032
 
1033
* Menu:
1034
 
1035
* Manual::                      Structure of this Manual
1036
* GNU Assembler::               The GNU Assembler
1037
* Object Formats::              Object File Formats
1038
* Command Line::                Command Line
1039
* Input Files::                 Input Files
1040
* Object::                      Output (Object) File
1041
* Errors::                      Error and Warning Messages
1042
 
1043

1044
File: as.info,  Node: Manual,  Next: GNU Assembler,  Up: Overview
1045
 
1046
1.1 Structure of this Manual
1047
============================
1048
 
1049
This manual is intended to describe what you need to know to use GNU
1050
`as'.  We cover the syntax expected in source files, including notation
1051
for symbols, constants, and expressions; the directives that `as'
1052
understands; and of course how to invoke `as'.
1053
 
1054
   This manual also describes some of the machine-dependent features of
1055
various flavors of the assembler.
1056
 
1057
   On the other hand, this manual is _not_ intended as an introduction
1058
to programming in assembly language--let alone programming in general!
1059
In a similar vein, we make no attempt to introduce the machine
1060
architecture; we do _not_ describe the instruction set, standard
1061
mnemonics, registers or addressing modes that are standard to a
1062
particular architecture.  You may want to consult the manufacturer's
1063
machine architecture manual for this information.
1064
 
1065

1066
File: as.info,  Node: GNU Assembler,  Next: Object Formats,  Prev: Manual,  Up: Overview
1067
 
1068
1.2 The GNU Assembler
1069
=====================
1070
 
1071
GNU `as' is really a family of assemblers.  If you use (or have used)
1072
the GNU assembler on one architecture, you should find a fairly similar
1073
environment when you use it on another architecture.  Each version has
1074
much in common with the others, including object file formats, most
1075
assembler directives (often called "pseudo-ops") and assembler syntax.
1076
 
1077
   `as' is primarily intended to assemble the output of the GNU C
1078
compiler `gcc' for use by the linker `ld'.  Nevertheless, we've tried
1079
to make `as' assemble correctly everything that other assemblers for
1080
the same machine would assemble.  Any exceptions are documented
1081
explicitly (*note Machine Dependencies::).  This doesn't mean `as'
1082
always uses the same syntax as another assembler for the same
1083
architecture; for example, we know of several incompatible versions of
1084
680x0 assembly language syntax.
1085
 
1086
   Unlike older assemblers, `as' is designed to assemble a source
1087
program in one pass of the source file.  This has a subtle impact on the
1088
`.org' directive (*note `.org': Org.).
1089
 
1090

1091
File: as.info,  Node: Object Formats,  Next: Command Line,  Prev: GNU Assembler,  Up: Overview
1092
 
1093
1.3 Object File Formats
1094
=======================
1095
 
1096
The GNU assembler can be configured to produce several alternative
1097
object file formats.  For the most part, this does not affect how you
1098
write assembly language programs; but directives for debugging symbols
1099
are typically different in different file formats.  *Note Symbol
1100
Attributes: Symbol Attributes.
1101
 
1102

1103
File: as.info,  Node: Command Line,  Next: Input Files,  Prev: Object Formats,  Up: Overview
1104
 
1105
1.4 Command Line
1106
================
1107
 
1108
After the program name `as', the command line may contain options and
1109
file names.  Options may appear in any order, and may be before, after,
1110
or between file names.  The order of file names is significant.
1111
 
1112
   `--' (two hyphens) by itself names the standard input file
1113
explicitly, as one of the files for `as' to assemble.
1114
 
1115
   Except for `--' any command line argument that begins with a hyphen
1116
(`-') is an option.  Each option changes the behavior of `as'.  No
1117
option changes the way another option works.  An option is a `-'
1118
followed by one or more letters; the case of the letter is important.
1119
All options are optional.
1120
 
1121
   Some options expect exactly one file name to follow them.  The file
1122
name may either immediately follow the option's letter (compatible with
1123
older assemblers) or it may be the next command argument (GNU
1124
standard).  These two command lines are equivalent:
1125
 
1126
     as -o my-object-file.o mumble.s
1127
     as -omy-object-file.o mumble.s
1128
 
1129

1130
File: as.info,  Node: Input Files,  Next: Object,  Prev: Command Line,  Up: Overview
1131
 
1132
1.5 Input Files
1133
===============
1134
 
1135
We use the phrase "source program", abbreviated "source", to describe
1136
the program input to one run of `as'.  The program may be in one or
1137
more files; how the source is partitioned into files doesn't change the
1138
meaning of the source.
1139
 
1140
   The source program is a concatenation of the text in all the files,
1141
in the order specified.
1142
 
1143
   Each time you run `as' it assembles exactly one source program.  The
1144
source program is made up of one or more files.  (The standard input is
1145
also a file.)
1146
 
1147
   You give `as' a command line that has zero or more input file names.
1148
The input files are read (from left file name to right).  A command
1149
line argument (in any position) that has no special meaning is taken to
1150
be an input file name.
1151
 
1152
   If you give `as' no file names it attempts to read one input file
1153
from the `as' standard input, which is normally your terminal.  You may
1154
have to type  to tell `as' there is no more program to assemble.
1155
 
1156
   Use `--' if you need to explicitly name the standard input file in
1157
your command line.
1158
 
1159
   If the source is empty, `as' produces a small, empty object file.
1160
 
1161
Filenames and Line-numbers
1162
--------------------------
1163
 
1164
There are two ways of locating a line in the input file (or files) and
1165
either may be used in reporting error messages.  One way refers to a
1166
line number in a physical file; the other refers to a line number in a
1167
"logical" file.  *Note Error and Warning Messages: Errors.
1168
 
1169
   "Physical files" are those files named in the command line given to
1170
`as'.
1171
 
1172
   "Logical files" are simply names declared explicitly by assembler
1173
directives; they bear no relation to physical files.  Logical file
1174
names help error messages reflect the original source file, when `as'
1175
source is itself synthesized from other files.  `as' understands the
1176
`#' directives emitted by the `gcc' preprocessor.  See also *note
1177
`.file': File.
1178
 
1179

1180
File: as.info,  Node: Object,  Next: Errors,  Prev: Input Files,  Up: Overview
1181
 
1182
1.6 Output (Object) File
1183
========================
1184
 
1185
Every time you run `as' it produces an output file, which is your
1186
assembly language program translated into numbers.  This file is the
1187
object file.  Its default name is `a.out'.  You can give it another
1188
name by using the `-o' option.  Conventionally, object file names end
1189
with `.o'.  The default name is used for historical reasons: older
1190
assemblers were capable of assembling self-contained programs directly
1191
into a runnable program.  (For some formats, this isn't currently
1192
possible, but it can be done for the `a.out' format.)
1193
 
1194
   The object file is meant for input to the linker `ld'.  It contains
1195
assembled program code, information to help `ld' integrate the
1196
assembled program into a runnable file, and (optionally) symbolic
1197
information for the debugger.
1198
 
1199

1200
File: as.info,  Node: Errors,  Prev: Object,  Up: Overview
1201
 
1202
1.7 Error and Warning Messages
1203
==============================
1204
 
1205
`as' may write warnings and error messages to the standard error file
1206
(usually your terminal).  This should not happen when  a compiler runs
1207
`as' automatically.  Warnings report an assumption made so that `as'
1208
could keep assembling a flawed program; errors report a grave problem
1209
that stops the assembly.
1210
 
1211
   Warning messages have the format
1212
 
1213
     file_name:NNN:Warning Message Text
1214
 
1215
(where NNN is a line number).  If a logical file name has been given
1216
(*note `.file': File.) it is used for the filename, otherwise the name
1217
of the current input file is used.  If a logical line number was given
1218
(*note `.line': Line.)  then it is used to calculate the number printed,
1219
otherwise the actual line in the current source file is printed.  The
1220
message text is intended to be self explanatory (in the grand Unix
1221
tradition).
1222
 
1223
   Error messages have the format
1224
     file_name:NNN:FATAL:Error Message Text
1225
   The file name and line number are derived as for warning messages.
1226
The actual message text may be rather less explanatory because many of
1227
them aren't supposed to happen.
1228
 
1229

1230
File: as.info,  Node: Invoking,  Next: Syntax,  Prev: Overview,  Up: Top
1231
 
1232
2 Command-Line Options
1233
**********************
1234
 
1235
This chapter describes command-line options available in _all_ versions
1236
of the GNU assembler; see *note Machine Dependencies::, for options
1237
specific to particular machine architectures.
1238
 
1239
   If you are invoking `as' via the GNU C compiler, you can use the
1240
`-Wa' option to pass arguments through to the assembler.  The assembler
1241
arguments must be separated from each other (and the `-Wa') by commas.
1242
For example:
1243
 
1244
     gcc -c -g -O -Wa,-alh,-L file.c
1245
 
1246
This passes two options to the assembler: `-alh' (emit a listing to
1247
standard output with high-level and assembly source) and `-L' (retain
1248
local symbols in the symbol table).
1249
 
1250
   Usually you do not need to use this `-Wa' mechanism, since many
1251
compiler command-line options are automatically passed to the assembler
1252
by the compiler.  (You can call the GNU compiler driver with the `-v'
1253
option to see precisely what options it passes to each compilation
1254
pass, including the assembler.)
1255
 
1256
* Menu:
1257
 
1258
* a::             -a[cdghlns] enable listings
1259
* alternate::     --alternate enable alternate macro syntax
1260
* D::             -D for compatibility
1261
* f::             -f to work faster
1262
* I::             -I for .include search path
1263
 
1264
* K::             -K for difference tables
1265
 
1266
* L::             -L to retain local symbols
1267
* listing::       --listing-XXX to configure listing output
1268
* M::             -M or --mri to assemble in MRI compatibility mode
1269
* MD::            --MD for dependency tracking
1270
* o::             -o to name the object file
1271
* R::             -R to join data and text sections
1272
* statistics::    --statistics to see statistics about assembly
1273
* traditional-format:: --traditional-format for compatible output
1274
* v::             -v to announce version
1275
* W::             -W, --no-warn, --warn, --fatal-warnings to control warnings
1276
* Z::             -Z to make object file even after errors
1277
 
1278

1279
File: as.info,  Node: a,  Next: alternate,  Up: Invoking
1280
 
1281
2.1 Enable Listings: `-a[cdghlns]'
1282
==================================
1283
 
1284
These options enable listing output from the assembler.  By itself,
1285
`-a' requests high-level, assembly, and symbols listing.  You can use
1286
other letters to select specific options for the list: `-ah' requests a
1287
high-level language listing, `-al' requests an output-program assembly
1288
listing, and `-as' requests a symbol table listing.  High-level
1289
listings require that a compiler debugging option like `-g' be used,
1290
and that assembly listings (`-al') be requested also.
1291
 
1292
   Use the `-ag' option to print a first section with general assembly
1293
information, like as version, switches passed, or time stamp.
1294
 
1295
   Use the `-ac' option to omit false conditionals from a listing.  Any
1296
lines which are not assembled because of a false `.if' (or `.ifdef', or
1297
any other conditional), or a true `.if' followed by an `.else', will be
1298
omitted from the listing.
1299
 
1300
   Use the `-ad' option to omit debugging directives from the listing.
1301
 
1302
   Once you have specified one of these options, you can further control
1303
listing output and its appearance using the directives `.list',
1304
`.nolist', `.psize', `.eject', `.title', and `.sbttl'.  The `-an'
1305
option turns off all forms processing.  If you do not request listing
1306
output with one of the `-a' options, the listing-control directives
1307
have no effect.
1308
 
1309
   The letters after `-a' may be combined into one option, _e.g._,
1310
`-aln'.
1311
 
1312
   Note if the assembler source is coming from the standard input (e.g.,
1313
because it is being created by `gcc' and the `-pipe' command line switch
1314
is being used) then the listing will not contain any comments or
1315
preprocessor directives.  This is because the listing code buffers
1316
input source lines from stdin only after they have been preprocessed by
1317
the assembler.  This reduces memory usage and makes the code more
1318
efficient.
1319
 
1320

1321
File: as.info,  Node: alternate,  Next: D,  Prev: a,  Up: Invoking
1322
 
1323
2.2 `--alternate'
1324
=================
1325
 
1326
Begin in alternate macro mode, see *note `.altmacro': Altmacro.
1327
 
1328

1329
File: as.info,  Node: D,  Next: f,  Prev: alternate,  Up: Invoking
1330
 
1331
2.3 `-D'
1332
========
1333
 
1334
This option has no effect whatsoever, but it is accepted to make it more
1335
likely that scripts written for other assemblers also work with `as'.
1336
 
1337

1338
File: as.info,  Node: f,  Next: I,  Prev: D,  Up: Invoking
1339
 
1340
2.4 Work Faster: `-f'
1341
=====================
1342
 
1343
`-f' should only be used when assembling programs written by a
1344
(trusted) compiler.  `-f' stops the assembler from doing whitespace and
1345
comment preprocessing on the input file(s) before assembling them.
1346
*Note Preprocessing: Preprocessing.
1347
 
1348
     _Warning:_ if you use `-f' when the files actually need to be
1349
     preprocessed (if they contain comments, for example), `as' does
1350
     not work correctly.
1351
 
1352

1353
File: as.info,  Node: I,  Next: K,  Prev: f,  Up: Invoking
1354
 
1355
2.5 `.include' Search Path: `-I' PATH
1356
=====================================
1357
 
1358
Use this option to add a PATH to the list of directories `as' searches
1359
for files specified in `.include' directives (*note `.include':
1360
Include.).  You may use `-I' as many times as necessary to include a
1361
variety of paths.  The current working directory is always searched
1362
first; after that, `as' searches any `-I' directories in the same order
1363
as they were specified (left to right) on the command line.
1364
 
1365

1366
File: as.info,  Node: K,  Next: L,  Prev: I,  Up: Invoking
1367
 
1368
2.6 Difference Tables: `-K'
1369
===========================
1370
 
1371
`as' sometimes alters the code emitted for directives of the form
1372
`.word SYM1-SYM2'.  *Note `.word': Word.  You can use the `-K' option
1373
if you want a warning issued when this is done.
1374
 
1375

1376
File: as.info,  Node: L,  Next: listing,  Prev: K,  Up: Invoking
1377
 
1378
2.7 Include Local Symbols: `-L'
1379
===============================
1380
 
1381
Symbols beginning with system-specific local label prefixes, typically
1382
`.L' for ELF systems or `L' for traditional a.out systems, are called
1383
"local symbols".  *Note Symbol Names::.  Normally you do not see such
1384
symbols when debugging, because they are intended for the use of
1385
programs (like compilers) that compose assembler programs, not for your
1386
notice.  Normally both `as' and `ld' discard such symbols, so you do
1387
not normally debug with them.
1388
 
1389
   This option tells `as' to retain those local symbols in the object
1390
file.  Usually if you do this you also tell the linker `ld' to preserve
1391
those symbols.
1392
 
1393

1394
File: as.info,  Node: listing,  Next: M,  Prev: L,  Up: Invoking
1395
 
1396
2.8 Configuring listing output: `--listing'
1397
===========================================
1398
 
1399
The listing feature of the assembler can be enabled via the command
1400
line switch `-a' (*note a::).  This feature combines the input source
1401
file(s) with a hex dump of the corresponding locations in the output
1402
object file, and displays them as a listing file.  The format of this
1403
listing can be controlled by directives inside the assembler source
1404
(i.e., `.list' (*note List::), `.title' (*note Title::), `.sbttl'
1405
(*note Sbttl::), `.psize' (*note Psize::), and `.eject' (*note Eject::)
1406
and also by the following switches:
1407
 
1408
`--listing-lhs-width=`number''
1409
     Sets the maximum width, in words, of the first line of the hex
1410
     byte dump.  This dump appears on the left hand side of the listing
1411
     output.
1412
 
1413
`--listing-lhs-width2=`number''
1414
     Sets the maximum width, in words, of any further lines of the hex
1415
     byte dump for a given input source line.  If this value is not
1416
     specified, it defaults to being the same as the value specified
1417
     for `--listing-lhs-width'.  If neither switch is used the default
1418
     is to one.
1419
 
1420
`--listing-rhs-width=`number''
1421
     Sets the maximum width, in characters, of the source line that is
1422
     displayed alongside the hex dump.  The default value for this
1423
     parameter is 100.  The source line is displayed on the right hand
1424
     side of the listing output.
1425
 
1426
`--listing-cont-lines=`number''
1427
     Sets the maximum number of continuation lines of hex dump that
1428
     will be displayed for a given single line of source input.  The
1429
     default value is 4.
1430
 
1431

1432
File: as.info,  Node: M,  Next: MD,  Prev: listing,  Up: Invoking
1433
 
1434
2.9 Assemble in MRI Compatibility Mode: `-M'
1435
============================================
1436
 
1437
The `-M' or `--mri' option selects MRI compatibility mode.  This
1438
changes the syntax and pseudo-op handling of `as' to make it compatible
1439
with the `ASM68K' or the `ASM960' (depending upon the configured
1440
target) assembler from Microtec Research.  The exact nature of the MRI
1441
syntax will not be documented here; see the MRI manuals for more
1442
information.  Note in particular that the handling of macros and macro
1443
arguments is somewhat different.  The purpose of this option is to
1444
permit assembling existing MRI assembler code using `as'.
1445
 
1446
   The MRI compatibility is not complete.  Certain operations of the
1447
MRI assembler depend upon its object file format, and can not be
1448
supported using other object file formats.  Supporting these would
1449
require enhancing each object file format individually.  These are:
1450
 
1451
   * global symbols in common section
1452
 
1453
     The m68k MRI assembler supports common sections which are merged
1454
     by the linker.  Other object file formats do not support this.
1455
     `as' handles common sections by treating them as a single common
1456
     symbol.  It permits local symbols to be defined within a common
1457
     section, but it can not support global symbols, since it has no
1458
     way to describe them.
1459
 
1460
   * complex relocations
1461
 
1462
     The MRI assemblers support relocations against a negated section
1463
     address, and relocations which combine the start addresses of two
1464
     or more sections.  These are not support by other object file
1465
     formats.
1466
 
1467
   * `END' pseudo-op specifying start address
1468
 
1469
     The MRI `END' pseudo-op permits the specification of a start
1470
     address.  This is not supported by other object file formats.  The
1471
     start address may instead be specified using the `-e' option to
1472
     the linker, or in a linker script.
1473
 
1474
   * `IDNT', `.ident' and `NAME' pseudo-ops
1475
 
1476
     The MRI `IDNT', `.ident' and `NAME' pseudo-ops assign a module
1477
     name to the output file.  This is not supported by other object
1478
     file formats.
1479
 
1480
   * `ORG' pseudo-op
1481
 
1482
     The m68k MRI `ORG' pseudo-op begins an absolute section at a given
1483
     address.  This differs from the usual `as' `.org' pseudo-op, which
1484
     changes the location within the current section.  Absolute
1485
     sections are not supported by other object file formats.  The
1486
     address of a section may be assigned within a linker script.
1487
 
1488
   There are some other features of the MRI assembler which are not
1489
supported by `as', typically either because they are difficult or
1490
because they seem of little consequence.  Some of these may be
1491
supported in future releases.
1492
 
1493
   * EBCDIC strings
1494
 
1495
     EBCDIC strings are not supported.
1496
 
1497
   * packed binary coded decimal
1498
 
1499
     Packed binary coded decimal is not supported.  This means that the
1500
     `DC.P' and `DCB.P' pseudo-ops are not supported.
1501
 
1502
   * `FEQU' pseudo-op
1503
 
1504
     The m68k `FEQU' pseudo-op is not supported.
1505
 
1506
   * `NOOBJ' pseudo-op
1507
 
1508
     The m68k `NOOBJ' pseudo-op is not supported.
1509
 
1510
   * `OPT' branch control options
1511
 
1512
     The m68k `OPT' branch control options--`B', `BRS', `BRB', `BRL',
1513
     and `BRW'--are ignored.  `as' automatically relaxes all branches,
1514
     whether forward or backward, to an appropriate size, so these
1515
     options serve no purpose.
1516
 
1517
   * `OPT' list control options
1518
 
1519
     The following m68k `OPT' list control options are ignored: `C',
1520
     `CEX', `CL', `CRE', `E', `G', `I', `M', `MEX', `MC', `MD', `X'.
1521
 
1522
   * other `OPT' options
1523
 
1524
     The following m68k `OPT' options are ignored: `NEST', `O', `OLD',
1525
     `OP', `P', `PCO', `PCR', `PCS', `R'.
1526
 
1527
   * `OPT' `D' option is default
1528
 
1529
     The m68k `OPT' `D' option is the default, unlike the MRI assembler.
1530
     `OPT NOD' may be used to turn it off.
1531
 
1532
   * `XREF' pseudo-op.
1533
 
1534
     The m68k `XREF' pseudo-op is ignored.
1535
 
1536
   * `.debug' pseudo-op
1537
 
1538
     The i960 `.debug' pseudo-op is not supported.
1539
 
1540
   * `.extended' pseudo-op
1541
 
1542
     The i960 `.extended' pseudo-op is not supported.
1543
 
1544
   * `.list' pseudo-op.
1545
 
1546
     The various options of the i960 `.list' pseudo-op are not
1547
     supported.
1548
 
1549
   * `.optimize' pseudo-op
1550
 
1551
     The i960 `.optimize' pseudo-op is not supported.
1552
 
1553
   * `.output' pseudo-op
1554
 
1555
     The i960 `.output' pseudo-op is not supported.
1556
 
1557
   * `.setreal' pseudo-op
1558
 
1559
     The i960 `.setreal' pseudo-op is not supported.
1560
 
1561
 
1562

1563
File: as.info,  Node: MD,  Next: o,  Prev: M,  Up: Invoking
1564
 
1565
2.10 Dependency Tracking: `--MD'
1566
================================
1567
 
1568
`as' can generate a dependency file for the file it creates.  This file
1569
consists of a single rule suitable for `make' describing the
1570
dependencies of the main source file.
1571
 
1572
   The rule is written to the file named in its argument.
1573
 
1574
   This feature is used in the automatic updating of makefiles.
1575
 
1576

1577
File: as.info,  Node: o,  Next: R,  Prev: MD,  Up: Invoking
1578
 
1579
2.11 Name the Object File: `-o'
1580
===============================
1581
 
1582
There is always one object file output when you run `as'.  By default
1583
it has the name `a.out' (or `b.out', for Intel 960 targets only).  You
1584
use this option (which takes exactly one filename) to give the object
1585
file a different name.
1586
 
1587
   Whatever the object file is called, `as' overwrites any existing
1588
file of the same name.
1589
 
1590

1591
File: as.info,  Node: R,  Next: statistics,  Prev: o,  Up: Invoking
1592
 
1593
2.12 Join Data and Text Sections: `-R'
1594
======================================
1595
 
1596
`-R' tells `as' to write the object file as if all data-section data
1597
lives in the text section.  This is only done at the very last moment:
1598
your binary data are the same, but data section parts are relocated
1599
differently.  The data section part of your object file is zero bytes
1600
long because all its bytes are appended to the text section.  (*Note
1601
Sections and Relocation: Sections.)
1602
 
1603
   When you specify `-R' it would be possible to generate shorter
1604
address displacements (because we do not have to cross between text and
1605
data section).  We refrain from doing this simply for compatibility with
1606
older versions of `as'.  In future, `-R' may work this way.
1607
 
1608
   When `as' is configured for COFF or ELF output, this option is only
1609
useful if you use sections named `.text' and `.data'.
1610
 
1611
   `-R' is not supported for any of the HPPA targets.  Using `-R'
1612
generates a warning from `as'.
1613
 
1614

1615
File: as.info,  Node: statistics,  Next: traditional-format,  Prev: R,  Up: Invoking
1616
 
1617
2.13 Display Assembly Statistics: `--statistics'
1618
================================================
1619
 
1620
Use `--statistics' to display two statistics about the resources used by
1621
`as': the maximum amount of space allocated during the assembly (in
1622
bytes), and the total execution time taken for the assembly (in CPU
1623
seconds).
1624
 
1625

1626
File: as.info,  Node: traditional-format,  Next: v,  Prev: statistics,  Up: Invoking
1627
 
1628
2.14 Compatible Output: `--traditional-format'
1629
==============================================
1630
 
1631
For some targets, the output of `as' is different in some ways from the
1632
output of some existing assembler.  This switch requests `as' to use
1633
the traditional format instead.
1634
 
1635
   For example, it disables the exception frame optimizations which
1636
`as' normally does by default on `gcc' output.
1637
 
1638

1639
File: as.info,  Node: v,  Next: W,  Prev: traditional-format,  Up: Invoking
1640
 
1641
2.15 Announce Version: `-v'
1642
===========================
1643
 
1644
You can find out what version of as is running by including the option
1645
`-v' (which you can also spell as `-version') on the command line.
1646
 
1647

1648
File: as.info,  Node: W,  Next: Z,  Prev: v,  Up: Invoking
1649
 
1650
2.16 Control Warnings: `-W', `--warn', `--no-warn', `--fatal-warnings'
1651
======================================================================
1652
 
1653
`as' should never give a warning or error message when assembling
1654
compiler output.  But programs written by people often cause `as' to
1655
give a warning that a particular assumption was made.  All such
1656
warnings are directed to the standard error file.
1657
 
1658
   If you use the `-W' and `--no-warn' options, no warnings are issued.
1659
This only affects the warning messages: it does not change any
1660
particular of how `as' assembles your file.  Errors, which stop the
1661
assembly, are still reported.
1662
 
1663
   If you use the `--fatal-warnings' option, `as' considers files that
1664
generate warnings to be in error.
1665
 
1666
   You can switch these options off again by specifying `--warn', which
1667
causes warnings to be output as usual.
1668
 
1669

1670
File: as.info,  Node: Z,  Prev: W,  Up: Invoking
1671
 
1672
2.17 Generate Object File in Spite of Errors: `-Z'
1673
==================================================
1674
 
1675
After an error message, `as' normally produces no output.  If for some
1676
reason you are interested in object file output even after `as' gives
1677
an error message on your program, use the `-Z' option.  If there are
1678
any errors, `as' continues anyways, and writes an object file after a
1679
final warning message of the form `N errors, M warnings, generating bad
1680
object file.'
1681
 
1682

1683
File: as.info,  Node: Syntax,  Next: Sections,  Prev: Invoking,  Up: Top
1684
 
1685
3 Syntax
1686
********
1687
 
1688
This chapter describes the machine-independent syntax allowed in a
1689
source file.  `as' syntax is similar to what many other assemblers use;
1690
it is inspired by the BSD 4.2 assembler, except that `as' does not
1691
assemble Vax bit-fields.
1692
 
1693
* Menu:
1694
 
1695
* Preprocessing::               Preprocessing
1696
* Whitespace::                  Whitespace
1697
* Comments::                    Comments
1698
* Symbol Intro::                Symbols
1699
* Statements::                  Statements
1700
* Constants::                   Constants
1701
 
1702

1703
File: as.info,  Node: Preprocessing,  Next: Whitespace,  Up: Syntax
1704
 
1705
3.1 Preprocessing
1706
=================
1707
 
1708
The `as' internal preprocessor:
1709
   * adjusts and removes extra whitespace.  It leaves one space or tab
1710
     before the keywords on a line, and turns any other whitespace on
1711
     the line into a single space.
1712
 
1713
   * removes all comments, replacing them with a single space, or an
1714
     appropriate number of newlines.
1715
 
1716
   * converts character constants into the appropriate numeric values.
1717
 
1718
   It does not do macro processing, include file handling, or anything
1719
else you may get from your C compiler's preprocessor.  You can do
1720
include file processing with the `.include' directive (*note
1721
`.include': Include.).  You can use the GNU C compiler driver to get
1722
other "CPP" style preprocessing by giving the input file a `.S' suffix.
1723
*Note Options Controlling the Kind of Output: (gcc.info)Overall Options.
1724
 
1725
   Excess whitespace, comments, and character constants cannot be used
1726
in the portions of the input text that are not preprocessed.
1727
 
1728
   If the first line of an input file is `#NO_APP' or if you use the
1729
`-f' option, whitespace and comments are not removed from the input
1730
file.  Within an input file, you can ask for whitespace and comment
1731
removal in specific portions of the by putting a line that says `#APP'
1732
before the text that may contain whitespace or comments, and putting a
1733
line that says `#NO_APP' after this text.  This feature is mainly
1734
intend to support `asm' statements in compilers whose output is
1735
otherwise free of comments and whitespace.
1736
 
1737

1738
File: as.info,  Node: Whitespace,  Next: Comments,  Prev: Preprocessing,  Up: Syntax
1739
 
1740
3.2 Whitespace
1741
==============
1742
 
1743
"Whitespace" is one or more blanks or tabs, in any order.  Whitespace
1744
is used to separate symbols, and to make programs neater for people to
1745
read.  Unless within character constants (*note Character Constants:
1746
Characters.), any whitespace means the same as exactly one space.
1747
 
1748

1749
File: as.info,  Node: Comments,  Next: Symbol Intro,  Prev: Whitespace,  Up: Syntax
1750
 
1751
3.3 Comments
1752
============
1753
 
1754
There are two ways of rendering comments to `as'.  In both cases the
1755
comment is equivalent to one space.
1756
 
1757
   Anything from `/*' through the next `*/' is a comment.  This means
1758
you may not nest these comments.
1759
 
1760
     /*
1761
       The only way to include a newline ('\n') in a comment
1762
       is to use this sort of comment.
1763
     */
1764
 
1765
     /* This sort of comment does not nest. */
1766
 
1767
   Anything from a "line comment" character up to the next newline is
1768
considered a comment and is ignored.  The line comment character is
1769
target specific, and some targets multiple comment characters.  Some
1770
targets also have line comment characters that only work if they are
1771
the first character on a line.  Some targets use a sequence of two
1772
characters to introduce a line comment.  Some targets can also change
1773
their line comment characters depending upon command line options that
1774
have been used.  For more details see the _Syntax_ section in the
1775
documentation for individual targets.
1776
 
1777
   If the line comment character is the hash sign (`#') then it still
1778
has the special ability to enable and disable preprocessing (*note
1779
Preprocessing::) and to specify logical line numbers:
1780
 
1781
   To be compatible with past assemblers, lines that begin with `#'
1782
have a special interpretation.  Following the `#' should be an absolute
1783
expression (*note Expressions::): the logical line number of the _next_
1784
line.  Then a string (*note Strings: Strings.) is allowed: if present
1785
it is a new logical file name.  The rest of the line, if any, should be
1786
whitespace.
1787
 
1788
   If the first non-whitespace characters on the line are not numeric,
1789
the line is ignored.  (Just like a comment.)
1790
 
1791
                               # This is an ordinary comment.
1792
     # 42-6 "new_file_name"    # New logical file name
1793
                               # This is logical line # 36.
1794
   This feature is deprecated, and may disappear from future versions
1795
of `as'.
1796
 
1797

1798
File: as.info,  Node: Symbol Intro,  Next: Statements,  Prev: Comments,  Up: Syntax
1799
 
1800
3.4 Symbols
1801
===========
1802
 
1803
A "symbol" is one or more characters chosen from the set of all letters
1804
(both upper and lower case), digits and the three characters `_.$'.  On
1805
most machines, you can also use `$' in symbol names; exceptions are
1806
noted in *note Machine Dependencies::.  No symbol may begin with a
1807
digit.  Case is significant.  There is no length limit: all characters
1808
are significant.  Multibyte characters are supported.  Symbols are
1809
delimited by characters not in that set, or by the beginning of a file
1810
(since the source program must end with a newline, the end of a file is
1811
not a possible symbol delimiter).  *Note Symbols::.
1812
 
1813

1814
File: as.info,  Node: Statements,  Next: Constants,  Prev: Symbol Intro,  Up: Syntax
1815
 
1816
3.5 Statements
1817
==============
1818
 
1819
A "statement" ends at a newline character (`\n') or a "line separator
1820
character".  The line separator character is target specific and
1821
described in the _Syntax_ section of each target's documentation.  Not
1822
all targets support a line separator character.  The newline or line
1823
separator character is considered to be part of the preceding
1824
statement.  Newlines and separators within character constants are an
1825
exception: they do not end statements.
1826
 
1827
   It is an error to end any statement with end-of-file:  the last
1828
character of any input file should be a newline.
1829
 
1830
   An empty statement is allowed, and may include whitespace.  It is
1831
ignored.
1832
 
1833
   A statement begins with zero or more labels, optionally followed by a
1834
key symbol which determines what kind of statement it is.  The key
1835
symbol determines the syntax of the rest of the statement.  If the
1836
symbol begins with a dot `.' then the statement is an assembler
1837
directive: typically valid for any computer.  If the symbol begins with
1838
a letter the statement is an assembly language "instruction": it
1839
assembles into a machine language instruction.  Different versions of
1840
`as' for different computers recognize different instructions.  In
1841
fact, the same symbol may represent a different instruction in a
1842
different computer's assembly language.
1843
 
1844
   A label is a symbol immediately followed by a colon (`:').
1845
Whitespace before a label or after a colon is permitted, but you may not
1846
have whitespace between a label's symbol and its colon. *Note Labels::.
1847
 
1848
   For HPPA targets, labels need not be immediately followed by a
1849
colon, but the definition of a label must begin in column zero.  This
1850
also implies that only one label may be defined on each line.
1851
 
1852
     label:     .directive    followed by something
1853
     another_label:           # This is an empty statement.
1854
                instruction   operand_1, operand_2, ...
1855
 
1856

1857
File: as.info,  Node: Constants,  Prev: Statements,  Up: Syntax
1858
 
1859
3.6 Constants
1860
=============
1861
 
1862
A constant is a number, written so that its value is known by
1863
inspection, without knowing any context.  Like this:
1864
     .byte  74, 0112, 092, 0x4A, 0X4a, 'J, '\J # All the same value.
1865
     .ascii "Ring the bell\7"                  # A string constant.
1866
     .octa  0x123456789abcdef0123456789ABCDEF0 # A bignum.
1867
     .float 0f-314159265358979323846264338327\
1868
     95028841971.693993751E-40                 # - pi, a flonum.
1869
 
1870
* Menu:
1871
 
1872
* Characters::                  Character Constants
1873
* Numbers::                     Number Constants
1874
 
1875

1876
File: as.info,  Node: Characters,  Next: Numbers,  Up: Constants
1877
 
1878
3.6.1 Character Constants
1879
-------------------------
1880
 
1881
There are two kinds of character constants.  A "character" stands for
1882
one character in one byte and its value may be used in numeric
1883
expressions.  String constants (properly called string _literals_) are
1884
potentially many bytes and their values may not be used in arithmetic
1885
expressions.
1886
 
1887
* Menu:
1888
 
1889
* Strings::                     Strings
1890
* Chars::                       Characters
1891
 
1892

1893
File: as.info,  Node: Strings,  Next: Chars,  Up: Characters
1894
 
1895
3.6.1.1 Strings
1896
...............
1897
 
1898
A "string" is written between double-quotes.  It may contain
1899
double-quotes or null characters.  The way to get special characters
1900
into a string is to "escape" these characters: precede them with a
1901
backslash `\' character.  For example `\\' represents one backslash:
1902
the first `\' is an escape which tells `as' to interpret the second
1903
character literally as a backslash (which prevents `as' from
1904
recognizing the second `\' as an escape character).  The complete list
1905
of escapes follows.
1906
 
1907
`\b'
1908
     Mnemonic for backspace; for ASCII this is octal code 010.
1909
 
1910
`\f'
1911
     Mnemonic for FormFeed; for ASCII this is octal code 014.
1912
 
1913
`\n'
1914
     Mnemonic for newline; for ASCII this is octal code 012.
1915
 
1916
`\r'
1917
     Mnemonic for carriage-Return; for ASCII this is octal code 015.
1918
 
1919
`\t'
1920
     Mnemonic for horizontal Tab; for ASCII this is octal code 011.
1921
 
1922
`\ DIGIT DIGIT DIGIT'
1923
     An octal character code.  The numeric code is 3 octal digits.  For
1924
     compatibility with other Unix systems, 8 and 9 are accepted as
1925
     digits: for example, `\008' has the value 010, and `\009' the
1926
     value 011.
1927
 
1928
`\`x' HEX-DIGITS...'
1929
     A hex character code.  All trailing hex digits are combined.
1930
     Either upper or lower case `x' works.
1931
 
1932
`\\'
1933
     Represents one `\' character.
1934
 
1935
`\"'
1936
     Represents one `"' character.  Needed in strings to represent this
1937
     character, because an unescaped `"' would end the string.
1938
 
1939
`\ ANYTHING-ELSE'
1940
     Any other character when escaped by `\' gives a warning, but
1941
     assembles as if the `\' was not present.  The idea is that if you
1942
     used an escape sequence you clearly didn't want the literal
1943
     interpretation of the following character.  However `as' has no
1944
     other interpretation, so `as' knows it is giving you the wrong
1945
     code and warns you of the fact.
1946
 
1947
   Which characters are escapable, and what those escapes represent,
1948
varies widely among assemblers.  The current set is what we think the
1949
BSD 4.2 assembler recognizes, and is a subset of what most C compilers
1950
recognize.  If you are in doubt, do not use an escape sequence.
1951
 
1952

1953
File: as.info,  Node: Chars,  Prev: Strings,  Up: Characters
1954
 
1955
3.6.1.2 Characters
1956
..................
1957
 
1958
A single character may be written as a single quote immediately
1959
followed by that character.  The same escapes apply to characters as to
1960
strings.  So if you want to write the character backslash, you must
1961
write `'\\' where the first `\' escapes the second `\'.  As you can
1962
see, the quote is an acute accent, not a grave accent.  A newline
1963
immediately following an acute accent is taken as a literal character
1964
and does not count as the end of a statement.  The value of a character
1965
constant in a numeric expression is the machine's byte-wide code for
1966
that character.  `as' assumes your character code is ASCII: `'A' means
1967
65, `'B' means 66, and so on.
1968
 
1969

1970
File: as.info,  Node: Numbers,  Prev: Characters,  Up: Constants
1971
 
1972
3.6.2 Number Constants
1973
----------------------
1974
 
1975
`as' distinguishes three kinds of numbers according to how they are
1976
stored in the target machine.  _Integers_ are numbers that would fit
1977
into an `int' in the C language.  _Bignums_ are integers, but they are
1978
stored in more than 32 bits.  _Flonums_ are floating point numbers,
1979
described below.
1980
 
1981
* Menu:
1982
 
1983
* Integers::                    Integers
1984
* Bignums::                     Bignums
1985
* Flonums::                     Flonums
1986
 
1987

1988
File: as.info,  Node: Integers,  Next: Bignums,  Up: Numbers
1989
 
1990
3.6.2.1 Integers
1991
................
1992
 
1993
A binary integer is `0b' or `0B' followed by zero or more of the binary
1994
digits `01'.
1995
 
1996
   An octal integer is `0' followed by zero or more of the octal digits
1997
(`01234567').
1998
 
1999
   A decimal integer starts with a non-zero digit followed by zero or
2000
more digits (`0123456789').
2001
 
2002
   A hexadecimal integer is `0x' or `0X' followed by one or more
2003
hexadecimal digits chosen from `0123456789abcdefABCDEF'.
2004
 
2005
   Integers have the usual values.  To denote a negative integer, use
2006
the prefix operator `-' discussed under expressions (*note Prefix
2007
Operators: Prefix Ops.).
2008
 
2009

2010
File: as.info,  Node: Bignums,  Next: Flonums,  Prev: Integers,  Up: Numbers
2011
 
2012
3.6.2.2 Bignums
2013
...............
2014
 
2015
A "bignum" has the same syntax and semantics as an integer except that
2016
the number (or its negative) takes more than 32 bits to represent in
2017
binary.  The distinction is made because in some places integers are
2018
permitted while bignums are not.
2019
 
2020

2021
File: as.info,  Node: Flonums,  Prev: Bignums,  Up: Numbers
2022
 
2023
3.6.2.3 Flonums
2024
...............
2025
 
2026
A "flonum" represents a floating point number.  The translation is
2027
indirect: a decimal floating point number from the text is converted by
2028
`as' to a generic binary floating point number of more than sufficient
2029
precision.  This generic floating point number is converted to a
2030
particular computer's floating point format (or formats) by a portion
2031
of `as' specialized to that computer.
2032
 
2033
   A flonum is written by writing (in order)
2034
   * The digit `0'.  (`0' is optional on the HPPA.)
2035
 
2036
   * A letter, to tell `as' the rest of the number is a flonum.  `e' is
2037
     recommended.  Case is not important.
2038
 
2039
     On the H8/300, Renesas / SuperH SH, and AMD 29K architectures, the
2040
     letter must be one of the letters `DFPRSX' (in upper or lower
2041
     case).
2042
 
2043
     On the ARC, the letter must be one of the letters `DFRS' (in upper
2044
     or lower case).
2045
 
2046
     On the Intel 960 architecture, the letter must be one of the
2047
     letters `DFT' (in upper or lower case).
2048
 
2049
     On the HPPA architecture, the letter must be `E' (upper case only).
2050
 
2051
   * An optional sign: either `+' or `-'.
2052
 
2053
   * An optional "integer part": zero or more decimal digits.
2054
 
2055
   * An optional "fractional part": `.' followed by zero or more
2056
     decimal digits.
2057
 
2058
   * An optional exponent, consisting of:
2059
 
2060
        * An `E' or `e'.
2061
 
2062
        * Optional sign: either `+' or `-'.
2063
 
2064
        * One or more decimal digits.
2065
 
2066
 
2067
   At least one of the integer part or the fractional part must be
2068
present.  The floating point number has the usual base-10 value.
2069
 
2070
   `as' does all processing using integers.  Flonums are computed
2071
independently of any floating point hardware in the computer running
2072
`as'.
2073
 
2074

2075
File: as.info,  Node: Sections,  Next: Symbols,  Prev: Syntax,  Up: Top
2076
 
2077
4 Sections and Relocation
2078
*************************
2079
 
2080
* Menu:
2081
 
2082
* Secs Background::             Background
2083
* Ld Sections::                 Linker Sections
2084
* As Sections::                 Assembler Internal Sections
2085
* Sub-Sections::                Sub-Sections
2086
* bss::                         bss Section
2087
 
2088

2089
File: as.info,  Node: Secs Background,  Next: Ld Sections,  Up: Sections
2090
 
2091
4.1 Background
2092
==============
2093
 
2094
Roughly, a section is a range of addresses, with no gaps; all data "in"
2095
those addresses is treated the same for some particular purpose.  For
2096
example there may be a "read only" section.
2097
 
2098
   The linker `ld' reads many object files (partial programs) and
2099
combines their contents to form a runnable program.  When `as' emits an
2100
object file, the partial program is assumed to start at address 0.
2101
`ld' assigns the final addresses for the partial program, so that
2102
different partial programs do not overlap.  This is actually an
2103
oversimplification, but it suffices to explain how `as' uses sections.
2104
 
2105
   `ld' moves blocks of bytes of your program to their run-time
2106
addresses.  These blocks slide to their run-time addresses as rigid
2107
units; their length does not change and neither does the order of bytes
2108
within them.  Such a rigid unit is called a _section_.  Assigning
2109
run-time addresses to sections is called "relocation".  It includes the
2110
task of adjusting mentions of object-file addresses so they refer to
2111
the proper run-time addresses.  For the H8/300, and for the Renesas /
2112
SuperH SH, `as' pads sections if needed to ensure they end on a word
2113
(sixteen bit) boundary.
2114
 
2115
   An object file written by `as' has at least three sections, any of
2116
which may be empty.  These are named "text", "data" and "bss" sections.
2117
 
2118
   When it generates COFF or ELF output, `as' can also generate
2119
whatever other named sections you specify using the `.section'
2120
directive (*note `.section': Section.).  If you do not use any
2121
directives that place output in the `.text' or `.data' sections, these
2122
sections still exist, but are empty.
2123
 
2124
   When `as' generates SOM or ELF output for the HPPA, `as' can also
2125
generate whatever other named sections you specify using the `.space'
2126
and `.subspace' directives.  See `HP9000 Series 800 Assembly Language
2127
Reference Manual' (HP 92432-90001) for details on the `.space' and
2128
`.subspace' assembler directives.
2129
 
2130
   Additionally, `as' uses different names for the standard text, data,
2131
and bss sections when generating SOM output.  Program text is placed
2132
into the `$CODE$' section, data into `$DATA$', and BSS into `$BSS$'.
2133
 
2134
   Within the object file, the text section starts at address `0', the
2135
data section follows, and the bss section follows the data section.
2136
 
2137
   When generating either SOM or ELF output files on the HPPA, the text
2138
section starts at address `0', the data section at address `0x4000000',
2139
and the bss section follows the data section.
2140
 
2141
   To let `ld' know which data changes when the sections are relocated,
2142
and how to change that data, `as' also writes to the object file
2143
details of the relocation needed.  To perform relocation `ld' must
2144
know, each time an address in the object file is mentioned:
2145
   * Where in the object file is the beginning of this reference to an
2146
     address?
2147
 
2148
   * How long (in bytes) is this reference?
2149
 
2150
   * Which section does the address refer to?  What is the numeric
2151
     value of
2152
          (ADDRESS) - (START-ADDRESS OF SECTION)?
2153
 
2154
   * Is the reference to an address "Program-Counter relative"?
2155
 
2156
   In fact, every address `as' ever uses is expressed as
2157
     (SECTION) + (OFFSET INTO SECTION)
2158
   Further, most expressions `as' computes have this section-relative
2159
nature.  (For some object formats, such as SOM for the HPPA, some
2160
expressions are symbol-relative instead.)
2161
 
2162
   In this manual we use the notation {SECNAME N} to mean "offset N
2163
into section SECNAME."
2164
 
2165
   Apart from text, data and bss sections you need to know about the
2166
"absolute" section.  When `ld' mixes partial programs, addresses in the
2167
absolute section remain unchanged.  For example, address `{absolute 0}'
2168
is "relocated" to run-time address 0 by `ld'.  Although the linker
2169
never arranges two partial programs' data sections with overlapping
2170
addresses after linking, _by definition_ their absolute sections must
2171
overlap.  Address `{absolute 239}' in one part of a program is always
2172
the same address when the program is running as address `{absolute
2173
239}' in any other part of the program.
2174
 
2175
   The idea of sections is extended to the "undefined" section.  Any
2176
address whose section is unknown at assembly time is by definition
2177
rendered {undefined U}--where U is filled in later.  Since numbers are
2178
always defined, the only way to generate an undefined address is to
2179
mention an undefined symbol.  A reference to a named common block would
2180
be such a symbol: its value is unknown at assembly time so it has
2181
section _undefined_.
2182
 
2183
   By analogy the word _section_ is used to describe groups of sections
2184
in the linked program.  `ld' puts all partial programs' text sections
2185
in contiguous addresses in the linked program.  It is customary to
2186
refer to the _text section_ of a program, meaning all the addresses of
2187
all partial programs' text sections.  Likewise for data and bss
2188
sections.
2189
 
2190
   Some sections are manipulated by `ld'; others are invented for use
2191
of `as' and have no meaning except during assembly.
2192
 
2193

2194
File: as.info,  Node: Ld Sections,  Next: As Sections,  Prev: Secs Background,  Up: Sections
2195
 
2196
4.2 Linker Sections
2197
===================
2198
 
2199
`ld' deals with just four kinds of sections, summarized below.
2200
 
2201
*named sections*
2202
*text section*
2203
*data section*
2204
     These sections hold your program.  `as' and `ld' treat them as
2205
     separate but equal sections.  Anything you can say of one section
2206
     is true of another.  When the program is running, however, it is
2207
     customary for the text section to be unalterable.  The text
2208
     section is often shared among processes: it contains instructions,
2209
     constants and the like.  The data section of a running program is
2210
     usually alterable: for example, C variables would be stored in the
2211
     data section.
2212
 
2213
*bss section*
2214
     This section contains zeroed bytes when your program begins
2215
     running.  It is used to hold uninitialized variables or common
2216
     storage.  The length of each partial program's bss section is
2217
     important, but because it starts out containing zeroed bytes there
2218
     is no need to store explicit zero bytes in the object file.  The
2219
     bss section was invented to eliminate those explicit zeros from
2220
     object files.
2221
 
2222
*absolute section*
2223
     Address 0 of this section is always "relocated" to runtime address
2224
     0.  This is useful if you want to refer to an address that `ld'
2225
     must not change when relocating.  In this sense we speak of
2226
     absolute addresses being "unrelocatable": they do not change
2227
     during relocation.
2228
 
2229
*undefined section*
2230
     This "section" is a catch-all for address references to objects
2231
     not in the preceding sections.
2232
 
2233
   An idealized example of three relocatable sections follows.  The
2234
example uses the traditional section names `.text' and `.data'.  Memory
2235
addresses are on the horizontal axis.
2236
 
2237
                           +-----+----+--+
2238
     partial program # 1:  |ttttt|dddd|00|
2239
                           +-----+----+--+
2240
 
2241
                           text   data bss
2242
                           seg.   seg. seg.
2243
 
2244
                           +---+---+---+
2245
     partial program # 2:  |TTT|DDD|000|
2246
                           +---+---+---+
2247
 
2248
                           +--+---+-----+--+----+---+-----+~~
2249
     linked program:       |  |TTT|ttttt|  |dddd|DDD|00000|
2250
                           +--+---+-----+--+----+---+-----+~~
2251
 
2252
         addresses:        0 ...
2253
 
2254

2255
File: as.info,  Node: As Sections,  Next: Sub-Sections,  Prev: Ld Sections,  Up: Sections
2256
 
2257
4.3 Assembler Internal Sections
2258
===============================
2259
 
2260
These sections are meant only for the internal use of `as'.  They have
2261
no meaning at run-time.  You do not really need to know about these
2262
sections for most purposes; but they can be mentioned in `as' warning
2263
messages, so it might be helpful to have an idea of their meanings to
2264
`as'.  These sections are used to permit the value of every expression
2265
in your assembly language program to be a section-relative address.
2266
 
2267
ASSEMBLER-INTERNAL-LOGIC-ERROR!
2268
     An internal assembler logic error has been found.  This means
2269
     there is a bug in the assembler.
2270
 
2271
expr section
2272
     The assembler stores complex expression internally as combinations
2273
     of symbols.  When it needs to represent an expression as a symbol,
2274
     it puts it in the expr section.
2275
 
2276

2277
File: as.info,  Node: Sub-Sections,  Next: bss,  Prev: As Sections,  Up: Sections
2278
 
2279
4.4 Sub-Sections
2280
================
2281
 
2282
Assembled bytes conventionally fall into two sections: text and data.
2283
You may have separate groups of data in named sections that you want to
2284
end up near to each other in the object file, even though they are not
2285
contiguous in the assembler source.  `as' allows you to use
2286
"subsections" for this purpose.  Within each section, there can be
2287
numbered subsections with values from 0 to 8192.  Objects assembled
2288
into the same subsection go into the object file together with other
2289
objects in the same subsection.  For example, a compiler might want to
2290
store constants in the text section, but might not want to have them
2291
interspersed with the program being assembled.  In this case, the
2292
compiler could issue a `.text 0' before each section of code being
2293
output, and a `.text 1' before each group of constants being output.
2294
 
2295
Subsections are optional.  If you do not use subsections, everything
2296
goes in subsection number zero.
2297
 
2298
   Each subsection is zero-padded up to a multiple of four bytes.
2299
(Subsections may be padded a different amount on different flavors of
2300
`as'.)
2301
 
2302
   Subsections appear in your object file in numeric order, lowest
2303
numbered to highest.  (All this to be compatible with other people's
2304
assemblers.)  The object file contains no representation of
2305
subsections; `ld' and other programs that manipulate object files see
2306
no trace of them.  They just see all your text subsections as a text
2307
section, and all your data subsections as a data section.
2308
 
2309
   To specify which subsection you want subsequent statements assembled
2310
into, use a numeric argument to specify it, in a `.text EXPRESSION' or
2311
a `.data EXPRESSION' statement.  When generating COFF output, you can
2312
also use an extra subsection argument with arbitrary named sections:
2313
`.section NAME, EXPRESSION'.  When generating ELF output, you can also
2314
use the `.subsection' directive (*note SubSection::) to specify a
2315
subsection: `.subsection EXPRESSION'.  EXPRESSION should be an absolute
2316
expression (*note Expressions::).  If you just say `.text' then `.text
2317
0' is assumed.  Likewise `.data' means `.data 0'.  Assembly begins in
2318
`text 0'.  For instance:
2319
     .text 0     # The default subsection is text 0 anyway.
2320
     .ascii "This lives in the first text subsection. *"
2321
     .text 1
2322
     .ascii "But this lives in the second text subsection."
2323
     .data 0
2324
     .ascii "This lives in the data section,"
2325
     .ascii "in the first data subsection."
2326
     .text 0
2327
     .ascii "This lives in the first text section,"
2328
     .ascii "immediately following the asterisk (*)."
2329
 
2330
   Each section has a "location counter" incremented by one for every
2331
byte assembled into that section.  Because subsections are merely a
2332
convenience restricted to `as' there is no concept of a subsection
2333
location counter.  There is no way to directly manipulate a location
2334
counter--but the `.align' directive changes it, and any label
2335
definition captures its current value.  The location counter of the
2336
section where statements are being assembled is said to be the "active"
2337
location counter.
2338
 
2339

2340
File: as.info,  Node: bss,  Prev: Sub-Sections,  Up: Sections
2341
 
2342
4.5 bss Section
2343
===============
2344
 
2345
The bss section is used for local common variable storage.  You may
2346
allocate address space in the bss section, but you may not dictate data
2347
to load into it before your program executes.  When your program starts
2348
running, all the contents of the bss section are zeroed bytes.
2349
 
2350
   The `.lcomm' pseudo-op defines a symbol in the bss section; see
2351
*note `.lcomm': Lcomm.
2352
 
2353
   The `.comm' pseudo-op may be used to declare a common symbol, which
2354
is another form of uninitialized symbol; see *note `.comm': Comm.
2355
 
2356
   When assembling for a target which supports multiple sections, such
2357
as ELF or COFF, you may switch into the `.bss' section and define
2358
symbols as usual; see *note `.section': Section.  You may only assemble
2359
zero values into the section.  Typically the section will only contain
2360
symbol definitions and `.skip' directives (*note `.skip': Skip.).
2361
 
2362

2363
File: as.info,  Node: Symbols,  Next: Expressions,  Prev: Sections,  Up: Top
2364
 
2365
5 Symbols
2366
*********
2367
 
2368
Symbols are a central concept: the programmer uses symbols to name
2369
things, the linker uses symbols to link, and the debugger uses symbols
2370
to debug.
2371
 
2372
     _Warning:_ `as' does not place symbols in the object file in the
2373
     same order they were declared.  This may break some debuggers.
2374
 
2375
* Menu:
2376
 
2377
* Labels::                      Labels
2378
* Setting Symbols::             Giving Symbols Other Values
2379
* Symbol Names::                Symbol Names
2380
* Dot::                         The Special Dot Symbol
2381
* Symbol Attributes::           Symbol Attributes
2382
 
2383

2384
File: as.info,  Node: Labels,  Next: Setting Symbols,  Up: Symbols
2385
 
2386
5.1 Labels
2387
==========
2388
 
2389
A "label" is written as a symbol immediately followed by a colon `:'.
2390
The symbol then represents the current value of the active location
2391
counter, and is, for example, a suitable instruction operand.  You are
2392
warned if you use the same symbol to represent two different locations:
2393
the first definition overrides any other definitions.
2394
 
2395
   On the HPPA, the usual form for a label need not be immediately
2396
followed by a colon, but instead must start in column zero.  Only one
2397
label may be defined on a single line.  To work around this, the HPPA
2398
version of `as' also provides a special directive `.label' for defining
2399
labels more flexibly.
2400
 
2401

2402
File: as.info,  Node: Setting Symbols,  Next: Symbol Names,  Prev: Labels,  Up: Symbols
2403
 
2404
5.2 Giving Symbols Other Values
2405
===============================
2406
 
2407
A symbol can be given an arbitrary value by writing a symbol, followed
2408
by an equals sign `=', followed by an expression (*note Expressions::).
2409
This is equivalent to using the `.set' directive.  *Note `.set': Set.
2410
In the same way, using a double equals sign `='`=' here represents an
2411
equivalent of the `.eqv' directive.  *Note `.eqv': Eqv.
2412
 
2413
   Blackfin does not support symbol assignment with `='.
2414
 
2415

2416
File: as.info,  Node: Symbol Names,  Next: Dot,  Prev: Setting Symbols,  Up: Symbols
2417
 
2418
5.3 Symbol Names
2419
================
2420
 
2421
Symbol names begin with a letter or with one of `._'.  On most
2422
machines, you can also use `$' in symbol names; exceptions are noted in
2423
*note Machine Dependencies::.  That character may be followed by any
2424
string of digits, letters, dollar signs (unless otherwise noted for a
2425
particular target machine), and underscores.
2426
 
2427
Case of letters is significant: `foo' is a different symbol name than
2428
`Foo'.
2429
 
2430
   Multibyte characters are supported.  To generate a symbol name
2431
containing multibyte characters enclose it within double quotes and use
2432
escape codes. cf *Note Strings::.  Generating a multibyte symbol name
2433
from a label is not currently supported.
2434
 
2435
   Each symbol has exactly one name.  Each name in an assembly language
2436
program refers to exactly one symbol.  You may use that symbol name any
2437
number of times in a program.
2438
 
2439
Local Symbol Names
2440
------------------
2441
 
2442
A local symbol is any symbol beginning with certain local label
2443
prefixes.  By default, the local label prefix is `.L' for ELF systems or
2444
`L' for traditional a.out systems, but each target may have its own set
2445
of local label prefixes.  On the HPPA local symbols begin with `L$'.
2446
 
2447
   Local symbols are defined and used within the assembler, but they are
2448
normally not saved in object files.  Thus, they are not visible when
2449
debugging.  You may use the `-L' option (*note Include Local Symbols:
2450
`-L': L.) to retain the local symbols in the object files.
2451
 
2452
Local Labels
2453
------------
2454
 
2455
Local labels help compilers and programmers use names temporarily.
2456
They create symbols which are guaranteed to be unique over the entire
2457
scope of the input source code and which can be referred to by a simple
2458
notation.  To define a local label, write a label of the form `N:'
2459
(where N represents any positive integer).  To refer to the most recent
2460
previous definition of that label write `Nb', using the same number as
2461
when you defined the label.  To refer to the next definition of a local
2462
label, write `Nf'--the `b' stands for "backwards" and the `f' stands
2463
for "forwards".
2464
 
2465
   There is no restriction on how you can use these labels, and you can
2466
reuse them too.  So that it is possible to repeatedly define the same
2467
local label (using the same number `N'), although you can only refer to
2468
the most recently defined local label of that number (for a backwards
2469
reference) or the next definition of a specific local label for a
2470
forward reference.  It is also worth noting that the first 10 local
2471
labels (`0:'...`9:') are implemented in a slightly more efficient
2472
manner than the others.
2473
 
2474
   Here is an example:
2475
 
2476
     1:        branch 1f
2477
     2:        branch 1b
2478
     1:        branch 2f
2479
     2:        branch 1b
2480
 
2481
   Which is the equivalent of:
2482
 
2483
     label_1:  branch label_3
2484
     label_2:  branch label_1
2485
     label_3:  branch label_4
2486
     label_4:  branch label_3
2487
 
2488
   Local label names are only a notational device.  They are immediately
2489
transformed into more conventional symbol names before the assembler
2490
uses them.  The symbol names are stored in the symbol table, appear in
2491
error messages, and are optionally emitted to the object file.  The
2492
names are constructed using these parts:
2493
 
2494
`_local label prefix_'
2495
     All local symbols begin with the system-specific local label
2496
     prefix.  Normally both `as' and `ld' forget symbols that start
2497
     with the local label prefix.  These labels are used for symbols
2498
     you are never intended to see.  If you use the `-L' option then
2499
     `as' retains these symbols in the object file. If you also
2500
     instruct `ld' to retain these symbols, you may use them in
2501
     debugging.
2502
 
2503
`NUMBER'
2504
     This is the number that was used in the local label definition.
2505
     So if the label is written `55:' then the number is `55'.
2506
 
2507
`C-B'
2508
     This unusual character is included so you do not accidentally
2509
     invent a symbol of the same name.  The character has ASCII value
2510
     of `\002' (control-B).
2511
 
2512
`_ordinal number_'
2513
     This is a serial number to keep the labels distinct.  The first
2514
     definition of `0:' gets the number `1'.  The 15th definition of
2515
     `0:' gets the number `15', and so on.  Likewise the first
2516
     definition of `1:' gets the number `1' and its 15th definition
2517
     gets `15' as well.
2518
 
2519
   So for example, the first `1:' may be named `.L1C-B1', and the 44th
2520
`3:' may be named `.L3C-B44'.
2521
 
2522
Dollar Local Labels
2523
-------------------
2524
 
2525
`as' also supports an even more local form of local labels called
2526
dollar labels.  These labels go out of scope (i.e., they become
2527
undefined) as soon as a non-local label is defined.  Thus they remain
2528
valid for only a small region of the input source code.  Normal local
2529
labels, by contrast, remain in scope for the entire file, or until they
2530
are redefined by another occurrence of the same local label.
2531
 
2532
   Dollar labels are defined in exactly the same way as ordinary local
2533
labels, except that they have a dollar sign suffix to their numeric
2534
value, e.g., `55$:'.
2535
 
2536
   They can also be distinguished from ordinary local labels by their
2537
transformed names which use ASCII character `\001' (control-A) as the
2538
magic character to distinguish them from ordinary labels.  For example,
2539
the fifth definition of `6$' may be named `.L6C-A5'.
2540
 
2541

2542
File: as.info,  Node: Dot,  Next: Symbol Attributes,  Prev: Symbol Names,  Up: Symbols
2543
 
2544
5.4 The Special Dot Symbol
2545
==========================
2546
 
2547
The special symbol `.' refers to the current address that `as' is
2548
assembling into.  Thus, the expression `melvin: .long .' defines
2549
`melvin' to contain its own address.  Assigning a value to `.' is
2550
treated the same as a `.org' directive.  Thus, the expression `.=.+4'
2551
is the same as saying `.space 4'.
2552
 
2553

2554
File: as.info,  Node: Symbol Attributes,  Prev: Dot,  Up: Symbols
2555
 
2556
5.5 Symbol Attributes
2557
=====================
2558
 
2559
Every symbol has, as well as its name, the attributes "Value" and
2560
"Type".  Depending on output format, symbols can also have auxiliary
2561
attributes.
2562
 
2563
   If you use a symbol without defining it, `as' assumes zero for all
2564
these attributes, and probably won't warn you.  This makes the symbol
2565
an externally defined symbol, which is generally what you would want.
2566
 
2567
* Menu:
2568
 
2569
* Symbol Value::                Value
2570
* Symbol Type::                 Type
2571
 
2572
 
2573
* a.out Symbols::               Symbol Attributes: `a.out'
2574
 
2575
* COFF Symbols::                Symbol Attributes for COFF
2576
 
2577
* SOM Symbols::                Symbol Attributes for SOM
2578
 
2579

2580
File: as.info,  Node: Symbol Value,  Next: Symbol Type,  Up: Symbol Attributes
2581
 
2582
5.5.1 Value
2583
-----------
2584
 
2585
The value of a symbol is (usually) 32 bits.  For a symbol which labels a
2586
location in the text, data, bss or absolute sections the value is the
2587
number of addresses from the start of that section to the label.
2588
Naturally for text, data and bss sections the value of a symbol changes
2589
as `ld' changes section base addresses during linking.  Absolute
2590
symbols' values do not change during linking: that is why they are
2591
called absolute.
2592
 
2593
   The value of an undefined symbol is treated in a special way.  If it
2594
is 0 then the symbol is not defined in this assembler source file, and
2595
`ld' tries to determine its value from other files linked into the same
2596
program.  You make this kind of symbol simply by mentioning a symbol
2597
name without defining it.  A non-zero value represents a `.comm' common
2598
declaration.  The value is how much common storage to reserve, in bytes
2599
(addresses).  The symbol refers to the first address of the allocated
2600
storage.
2601
 
2602

2603
File: as.info,  Node: Symbol Type,  Next: a.out Symbols,  Prev: Symbol Value,  Up: Symbol Attributes
2604
 
2605
5.5.2 Type
2606
----------
2607
 
2608
The type attribute of a symbol contains relocation (section)
2609
information, any flag settings indicating that a symbol is external, and
2610
(optionally), other information for linkers and debuggers.  The exact
2611
format depends on the object-code output format in use.
2612
 
2613

2614
File: as.info,  Node: a.out Symbols,  Next: COFF Symbols,  Prev: Symbol Type,  Up: Symbol Attributes
2615
 
2616
5.5.3 Symbol Attributes: `a.out'
2617
--------------------------------
2618
 
2619
* Menu:
2620
 
2621
* Symbol Desc::                 Descriptor
2622
* Symbol Other::                Other
2623
 
2624

2625
File: as.info,  Node: Symbol Desc,  Next: Symbol Other,  Up: a.out Symbols
2626
 
2627
5.5.3.1 Descriptor
2628
..................
2629
 
2630
This is an arbitrary 16-bit value.  You may establish a symbol's
2631
descriptor value by using a `.desc' statement (*note `.desc': Desc.).
2632
A descriptor value means nothing to `as'.
2633
 
2634

2635
File: as.info,  Node: Symbol Other,  Prev: Symbol Desc,  Up: a.out Symbols
2636
 
2637
5.5.3.2 Other
2638
.............
2639
 
2640
This is an arbitrary 8-bit value.  It means nothing to `as'.
2641
 
2642

2643
File: as.info,  Node: COFF Symbols,  Next: SOM Symbols,  Prev: a.out Symbols,  Up: Symbol Attributes
2644
 
2645
5.5.4 Symbol Attributes for COFF
2646
--------------------------------
2647
 
2648
The COFF format supports a multitude of auxiliary symbol attributes;
2649
like the primary symbol attributes, they are set between `.def' and
2650
`.endef' directives.
2651
 
2652
5.5.4.1 Primary Attributes
2653
..........................
2654
 
2655
The symbol name is set with `.def'; the value and type, respectively,
2656
with `.val' and `.type'.
2657
 
2658
5.5.4.2 Auxiliary Attributes
2659
............................
2660
 
2661
The `as' directives `.dim', `.line', `.scl', `.size', `.tag', and
2662
`.weak' can generate auxiliary symbol table information for COFF.
2663
 
2664

2665
File: as.info,  Node: SOM Symbols,  Prev: COFF Symbols,  Up: Symbol Attributes
2666
 
2667
5.5.5 Symbol Attributes for SOM
2668
-------------------------------
2669
 
2670
The SOM format for the HPPA supports a multitude of symbol attributes
2671
set with the `.EXPORT' and `.IMPORT' directives.
2672
 
2673
   The attributes are described in `HP9000 Series 800 Assembly Language
2674
Reference Manual' (HP 92432-90001) under the `IMPORT' and `EXPORT'
2675
assembler directive documentation.
2676
 
2677

2678
File: as.info,  Node: Expressions,  Next: Pseudo Ops,  Prev: Symbols,  Up: Top
2679
 
2680
6 Expressions
2681
*************
2682
 
2683
An "expression" specifies an address or numeric value.  Whitespace may
2684
precede and/or follow an expression.
2685
 
2686
   The result of an expression must be an absolute number, or else an
2687
offset into a particular section.  If an expression is not absolute,
2688
and there is not enough information when `as' sees the expression to
2689
know its section, a second pass over the source program might be
2690
necessary to interpret the expression--but the second pass is currently
2691
not implemented.  `as' aborts with an error message in this situation.
2692
 
2693
* Menu:
2694
 
2695
* Empty Exprs::                 Empty Expressions
2696
* Integer Exprs::               Integer Expressions
2697
 
2698

2699
File: as.info,  Node: Empty Exprs,  Next: Integer Exprs,  Up: Expressions
2700
 
2701
6.1 Empty Expressions
2702
=====================
2703
 
2704
An empty expression has no value: it is just whitespace or null.
2705
Wherever an absolute expression is required, you may omit the
2706
expression, and `as' assumes a value of (absolute) 0.  This is
2707
compatible with other assemblers.
2708
 
2709

2710
File: as.info,  Node: Integer Exprs,  Prev: Empty Exprs,  Up: Expressions
2711
 
2712
6.2 Integer Expressions
2713
=======================
2714
 
2715
An "integer expression" is one or more _arguments_ delimited by
2716
_operators_.
2717
 
2718
* Menu:
2719
 
2720
* Arguments::                   Arguments
2721
* Operators::                   Operators
2722
* Prefix Ops::                  Prefix Operators
2723
* Infix Ops::                   Infix Operators
2724
 
2725

2726
File: as.info,  Node: Arguments,  Next: Operators,  Up: Integer Exprs
2727
 
2728
6.2.1 Arguments
2729
---------------
2730
 
2731
"Arguments" are symbols, numbers or subexpressions.  In other contexts
2732
arguments are sometimes called "arithmetic operands".  In this manual,
2733
to avoid confusing them with the "instruction operands" of the machine
2734
language, we use the term "argument" to refer to parts of expressions
2735
only, reserving the word "operand" to refer only to machine instruction
2736
operands.
2737
 
2738
   Symbols are evaluated to yield {SECTION NNN} where SECTION is one of
2739
text, data, bss, absolute, or undefined.  NNN is a signed, 2's
2740
complement 32 bit integer.
2741
 
2742
   Numbers are usually integers.
2743
 
2744
   A number can be a flonum or bignum.  In this case, you are warned
2745
that only the low order 32 bits are used, and `as' pretends these 32
2746
bits are an integer.  You may write integer-manipulating instructions
2747
that act on exotic constants, compatible with other assemblers.
2748
 
2749
   Subexpressions are a left parenthesis `(' followed by an integer
2750
expression, followed by a right parenthesis `)'; or a prefix operator
2751
followed by an argument.
2752
 
2753

2754
File: as.info,  Node: Operators,  Next: Prefix Ops,  Prev: Arguments,  Up: Integer Exprs
2755
 
2756
6.2.2 Operators
2757
---------------
2758
 
2759
"Operators" are arithmetic functions, like `+' or `%'.  Prefix
2760
operators are followed by an argument.  Infix operators appear between
2761
their arguments.  Operators may be preceded and/or followed by
2762
whitespace.
2763
 
2764

2765
File: as.info,  Node: Prefix Ops,  Next: Infix Ops,  Prev: Operators,  Up: Integer Exprs
2766
 
2767
6.2.3 Prefix Operator
2768
---------------------
2769
 
2770
`as' has the following "prefix operators".  They each take one
2771
argument, which must be absolute.
2772
 
2773
`-'
2774
     "Negation".  Two's complement negation.
2775
 
2776
`~'
2777
     "Complementation".  Bitwise not.
2778
 
2779

2780
File: as.info,  Node: Infix Ops,  Prev: Prefix Ops,  Up: Integer Exprs
2781
 
2782
6.2.4 Infix Operators
2783
---------------------
2784
 
2785
"Infix operators" take two arguments, one on either side.  Operators
2786
have precedence, but operations with equal precedence are performed left
2787
to right.  Apart from `+' or `-', both arguments must be absolute, and
2788
the result is absolute.
2789
 
2790
  1. Highest Precedence
2791
 
2792
    `*'
2793
          "Multiplication".
2794
 
2795
    `/'
2796
          "Division".  Truncation is the same as the C operator `/'
2797
 
2798
    `%'
2799
          "Remainder".
2800
 
2801
    `<<'
2802
          "Shift Left".  Same as the C operator `<<'.
2803
 
2804
    `>>'
2805
          "Shift Right".  Same as the C operator `>>'.
2806
 
2807
  2. Intermediate precedence
2808
 
2809
    `|'
2810
          "Bitwise Inclusive Or".
2811
 
2812
    `&'
2813
          "Bitwise And".
2814
 
2815
    `^'
2816
          "Bitwise Exclusive Or".
2817
 
2818
    `!'
2819
          "Bitwise Or Not".
2820
 
2821
  3. Low Precedence
2822
 
2823
    `+'
2824
          "Addition".  If either argument is absolute, the result has
2825
          the section of the other argument.  You may not add together
2826
          arguments from different sections.
2827
 
2828
    `-'
2829
          "Subtraction".  If the right argument is absolute, the result
2830
          has the section of the left argument.  If both arguments are
2831
          in the same section, the result is absolute.  You may not
2832
          subtract arguments from different sections.
2833
 
2834
    `=='
2835
          "Is Equal To"
2836
 
2837
    `<>'
2838
    `!='
2839
          "Is Not Equal To"
2840
 
2841
    `<'
2842
          "Is Less Than"
2843
 
2844
    `>'
2845
          "Is Greater Than"
2846
 
2847
    `>='
2848
          "Is Greater Than Or Equal To"
2849
 
2850
    `<='
2851
          "Is Less Than Or Equal To"
2852
 
2853
          The comparison operators can be used as infix operators.  A
2854
          true results has a value of -1 whereas a false result has a
2855
          value of 0.   Note, these operators perform signed
2856
          comparisons.
2857
 
2858
  4. Lowest Precedence
2859
 
2860
    `&&'
2861
          "Logical And".
2862
 
2863
    `||'
2864
          "Logical Or".
2865
 
2866
          These two logical operations can be used to combine the
2867
          results of sub expressions.  Note, unlike the comparison
2868
          operators a true result returns a value of 1 but a false
2869
          results does still return 0.  Also note that the logical or
2870
          operator has a slightly lower precedence than logical and.
2871
 
2872
 
2873
   In short, it's only meaningful to add or subtract the _offsets_ in an
2874
address; you can only have a defined section in one of the two
2875
arguments.
2876
 
2877

2878
File: as.info,  Node: Pseudo Ops,  Next: Object Attributes,  Prev: Expressions,  Up: Top
2879
 
2880
7 Assembler Directives
2881
**********************
2882
 
2883
All assembler directives have names that begin with a period (`.').
2884
The rest of the name is letters, usually in lower case.
2885
 
2886
   This chapter discusses directives that are available regardless of
2887
the target machine configuration for the GNU assembler.  Some machine
2888
configurations provide additional directives.  *Note Machine
2889
Dependencies::.
2890
 
2891
* Menu:
2892
 
2893
* Abort::                       `.abort'
2894
 
2895
* ABORT (COFF)::                `.ABORT'
2896
 
2897
* Align::                       `.align ABS-EXPR , ABS-EXPR'
2898
* Altmacro::                    `.altmacro'
2899
* Ascii::                       `.ascii "STRING"'...
2900
* Asciz::                       `.asciz "STRING"'...
2901
* Balign::                      `.balign ABS-EXPR , ABS-EXPR'
2902
* Bundle directives::           `.bundle_align_mode ABS-EXPR', `.bundle_lock', `.bundle_unlock'
2903
* Byte::                        `.byte EXPRESSIONS'
2904
* CFI directives::              `.cfi_startproc [simple]', `.cfi_endproc', etc.
2905
* Comm::                        `.comm SYMBOL , LENGTH '
2906
* Data::                        `.data SUBSECTION'
2907
 
2908
* Def::                         `.def NAME'
2909
 
2910
* Desc::                        `.desc SYMBOL, ABS-EXPRESSION'
2911
 
2912
* Dim::                         `.dim'
2913
 
2914
* Double::                      `.double FLONUMS'
2915
* Eject::                       `.eject'
2916
* Else::                        `.else'
2917
* Elseif::                      `.elseif'
2918
* End::                         `.end'
2919
 
2920
* Endef::                       `.endef'
2921
 
2922
* Endfunc::                     `.endfunc'
2923
* Endif::                       `.endif'
2924
* Equ::                         `.equ SYMBOL, EXPRESSION'
2925
* Equiv::                       `.equiv SYMBOL, EXPRESSION'
2926
* Eqv::                         `.eqv SYMBOL, EXPRESSION'
2927
* Err::                         `.err'
2928
* Error::                       `.error STRING'
2929
* Exitm::                       `.exitm'
2930
* Extern::                      `.extern'
2931
* Fail::                        `.fail'
2932
* File::                        `.file'
2933
* Fill::                        `.fill REPEAT , SIZE , VALUE'
2934
* Float::                       `.float FLONUMS'
2935
* Func::                        `.func'
2936
* Global::                      `.global SYMBOL', `.globl SYMBOL'
2937
 
2938
* Gnu_attribute::               `.gnu_attribute TAG,VALUE'
2939
* Hidden::                      `.hidden NAMES'
2940
 
2941
* hword::                       `.hword EXPRESSIONS'
2942
* Ident::                       `.ident'
2943
* If::                          `.if ABSOLUTE EXPRESSION'
2944
* Incbin::                      `.incbin "FILE"[,SKIP[,COUNT]]'
2945
* Include::                     `.include "FILE"'
2946
* Int::                         `.int EXPRESSIONS'
2947
 
2948
* Internal::                    `.internal NAMES'
2949
 
2950
* Irp::                         `.irp SYMBOL,VALUES'...
2951
* Irpc::                        `.irpc SYMBOL,VALUES'...
2952
* Lcomm::                       `.lcomm SYMBOL , LENGTH'
2953
* Lflags::                      `.lflags'
2954
 
2955
* Line::                        `.line LINE-NUMBER'
2956
 
2957
* Linkonce::                    `.linkonce [TYPE]'
2958
* List::                        `.list'
2959
* Ln::                          `.ln LINE-NUMBER'
2960
* Loc::                         `.loc FILENO LINENO'
2961
* Loc_mark_labels::             `.loc_mark_labels ENABLE'
2962
 
2963
* Local::                       `.local NAMES'
2964
 
2965
* Long::                        `.long EXPRESSIONS'
2966
 
2967
* Macro::                       `.macro NAME ARGS'...
2968
* MRI::                         `.mri VAL'
2969
* Noaltmacro::                  `.noaltmacro'
2970
* Nolist::                      `.nolist'
2971
* Octa::                        `.octa BIGNUMS'
2972
* Offset::                      `.offset LOC'
2973
* Org::                         `.org NEW-LC, FILL'
2974
* P2align::                     `.p2align ABS-EXPR, ABS-EXPR, ABS-EXPR'
2975
 
2976
* PopSection::                  `.popsection'
2977
* Previous::                    `.previous'
2978
 
2979
* Print::                       `.print STRING'
2980
 
2981
* Protected::                   `.protected NAMES'
2982
 
2983
* Psize::                       `.psize LINES, COLUMNS'
2984
* Purgem::                      `.purgem NAME'
2985
 
2986
* PushSection::                 `.pushsection NAME'
2987
 
2988
* Quad::                        `.quad BIGNUMS'
2989
* Reloc::                       `.reloc OFFSET, RELOC_NAME[, EXPRESSION]'
2990
* Rept::                        `.rept COUNT'
2991
* Sbttl::                       `.sbttl "SUBHEADING"'
2992
 
2993
* Scl::                         `.scl CLASS'
2994
 
2995
* Section::                     `.section NAME[, FLAGS]'
2996
 
2997
* Set::                         `.set SYMBOL, EXPRESSION'
2998
* Short::                       `.short EXPRESSIONS'
2999
* Single::                      `.single FLONUMS'
3000
 
3001
* Size::                        `.size [NAME , EXPRESSION]'
3002
 
3003
* Skip::                        `.skip SIZE , FILL'
3004
 
3005
* Sleb128::                     `.sleb128 EXPRESSIONS'
3006
 
3007
* Space::                       `.space SIZE , FILL'
3008
 
3009
* Stab::                        `.stabd, .stabn, .stabs'
3010
 
3011
* String::                      `.string "STR"', `.string8 "STR"', `.string16 "STR"', `.string32 "STR"', `.string64 "STR"'
3012
* Struct::                      `.struct EXPRESSION'
3013
 
3014
* SubSection::                  `.subsection'
3015
* Symver::                      `.symver NAME,NAME2@NODENAME'
3016
 
3017
 
3018
* Tag::                         `.tag STRUCTNAME'
3019
 
3020
* Text::                        `.text SUBSECTION'
3021
* Title::                       `.title "HEADING"'
3022
 
3023
* Type::                        `.type '
3024
 
3025
* Uleb128::                     `.uleb128 EXPRESSIONS'
3026
 
3027
* Val::                         `.val ADDR'
3028
 
3029
 
3030
* Version::                     `.version "STRING"'
3031
* VTableEntry::                 `.vtable_entry TABLE, OFFSET'
3032
* VTableInherit::               `.vtable_inherit CHILD, PARENT'
3033
 
3034
* Warning::                     `.warning STRING'
3035
* Weak::                        `.weak NAMES'
3036
* Weakref::                     `.weakref ALIAS, SYMBOL'
3037
* Word::                        `.word EXPRESSIONS'
3038
* Deprecated::                  Deprecated Directives
3039
 
3040

3041
File: as.info,  Node: Abort,  Next: ABORT (COFF),  Up: Pseudo Ops
3042
 
3043
7.1 `.abort'
3044
============
3045
 
3046
This directive stops the assembly immediately.  It is for compatibility
3047
with other assemblers.  The original idea was that the assembly
3048
language source would be piped into the assembler.  If the sender of
3049
the source quit, it could use this directive tells `as' to quit also.
3050
One day `.abort' will not be supported.
3051
 
3052

3053
File: as.info,  Node: ABORT (COFF),  Next: Align,  Prev: Abort,  Up: Pseudo Ops
3054
 
3055
7.2 `.ABORT' (COFF)
3056
===================
3057
 
3058
When producing COFF output, `as' accepts this directive as a synonym
3059
for `.abort'.
3060
 
3061

3062
File: as.info,  Node: Align,  Next: Altmacro,  Prev: ABORT (COFF),  Up: Pseudo Ops
3063
 
3064
7.3 `.align ABS-EXPR, ABS-EXPR, ABS-EXPR'
3065
=========================================
3066
 
3067
Pad the location counter (in the current subsection) to a particular
3068
storage boundary.  The first expression (which must be absolute) is the
3069
alignment required, as described below.
3070
 
3071
   The second expression (also absolute) gives the fill value to be
3072
stored in the padding bytes.  It (and the comma) may be omitted.  If it
3073
is omitted, the padding bytes are normally zero.  However, on some
3074
systems, if the section is marked as containing code and the fill value
3075
is omitted, the space is filled with no-op instructions.
3076
 
3077
   The third expression is also absolute, and is also optional.  If it
3078
is present, it is the maximum number of bytes that should be skipped by
3079
this alignment directive.  If doing the alignment would require
3080
skipping more bytes than the specified maximum, then the alignment is
3081
not done at all.  You can omit the fill value (the second argument)
3082
entirely by simply using two commas after the required alignment; this
3083
can be useful if you want the alignment to be filled with no-op
3084
instructions when appropriate.
3085
 
3086
   The way the required alignment is specified varies from system to
3087
system.  For the arc, hppa, i386 using ELF, i860, iq2000, m68k, or1k,
3088
s390, sparc, tic4x, tic80 and xtensa, the first expression is the
3089
alignment request in bytes.  For example `.align 8' advances the
3090
location counter until it is a multiple of 8.  If the location counter
3091
is already a multiple of 8, no change is needed.  For the tic54x, the
3092
first expression is the alignment request in words.
3093
 
3094
   For other systems, including ppc, i386 using a.out format, arm and
3095
strongarm, it is the number of low-order zero bits the location counter
3096
must have after advancement.  For example `.align 3' advances the
3097
location counter until it a multiple of 8.  If the location counter is
3098
already a multiple of 8, no change is needed.
3099
 
3100
   This inconsistency is due to the different behaviors of the various
3101
native assemblers for these systems which GAS must emulate.  GAS also
3102
provides `.balign' and `.p2align' directives, described later, which
3103
have a consistent behavior across all architectures (but are specific
3104
to GAS).
3105
 
3106

3107
File: as.info,  Node: Altmacro,  Next: Ascii,  Prev: Align,  Up: Pseudo Ops
3108
 
3109
7.4 `.altmacro'
3110
===============
3111
 
3112
Enable alternate macro mode, enabling:
3113
 
3114
`LOCAL NAME [ , ... ]'
3115
     One additional directive, `LOCAL', is available.  It is used to
3116
     generate a string replacement for each of the NAME arguments, and
3117
     replace any instances of NAME in each macro expansion.  The
3118
     replacement string is unique in the assembly, and different for
3119
     each separate macro expansion.  `LOCAL' allows you to write macros
3120
     that define symbols, without fear of conflict between separate
3121
     macro expansions.
3122
 
3123
`String delimiters'
3124
     You can write strings delimited in these other ways besides
3125
     `"STRING"':
3126
 
3127
    `'STRING''
3128
          You can delimit strings with single-quote characters.
3129
 
3130
    `'
3131
          You can delimit strings with matching angle brackets.
3132
 
3133
`single-character string escape'
3134
     To include any single character literally in a string (even if the
3135
     character would otherwise have some special meaning), you can
3136
     prefix the character with `!' (an exclamation mark).  For example,
3137
     you can write `<4.3 !> 5.4!!>' to get the literal text `4.3 >
3138
     5.4!'.
3139
 
3140
`Expression results as strings'
3141
     You can write `%EXPR' to evaluate the expression EXPR and use the
3142
     result as a string.
3143
 
3144

3145
File: as.info,  Node: Ascii,  Next: Asciz,  Prev: Altmacro,  Up: Pseudo Ops
3146
 
3147
7.5 `.ascii "STRING"'...
3148
========================
3149
 
3150
`.ascii' expects zero or more string literals (*note Strings::)
3151
separated by commas.  It assembles each string (with no automatic
3152
trailing zero byte) into consecutive addresses.
3153
 
3154

3155
File: as.info,  Node: Asciz,  Next: Balign,  Prev: Ascii,  Up: Pseudo Ops
3156
 
3157
7.6 `.asciz "STRING"'...
3158
========================
3159
 
3160
`.asciz' is just like `.ascii', but each string is followed by a zero
3161
byte.  The "z" in `.asciz' stands for "zero".
3162
 
3163

3164
File: as.info,  Node: Balign,  Next: Bundle directives,  Prev: Asciz,  Up: Pseudo Ops
3165
 
3166
7.7 `.balign[wl] ABS-EXPR, ABS-EXPR, ABS-EXPR'
3167
==============================================
3168
 
3169
Pad the location counter (in the current subsection) to a particular
3170
storage boundary.  The first expression (which must be absolute) is the
3171
alignment request in bytes.  For example `.balign 8' advances the
3172
location counter until it is a multiple of 8.  If the location counter
3173
is already a multiple of 8, no change is needed.
3174
 
3175
   The second expression (also absolute) gives the fill value to be
3176
stored in the padding bytes.  It (and the comma) may be omitted.  If it
3177
is omitted, the padding bytes are normally zero.  However, on some
3178
systems, if the section is marked as containing code and the fill value
3179
is omitted, the space is filled with no-op instructions.
3180
 
3181
   The third expression is also absolute, and is also optional.  If it
3182
is present, it is the maximum number of bytes that should be skipped by
3183
this alignment directive.  If doing the alignment would require
3184
skipping more bytes than the specified maximum, then the alignment is
3185
not done at all.  You can omit the fill value (the second argument)
3186
entirely by simply using two commas after the required alignment; this
3187
can be useful if you want the alignment to be filled with no-op
3188
instructions when appropriate.
3189
 
3190
   The `.balignw' and `.balignl' directives are variants of the
3191
`.balign' directive.  The `.balignw' directive treats the fill pattern
3192
as a two byte word value.  The `.balignl' directives treats the fill
3193
pattern as a four byte longword value.  For example, `.balignw
3194
4,0x368d' will align to a multiple of 4.  If it skips two bytes, they
3195
will be filled in with the value 0x368d (the exact placement of the
3196
bytes depends upon the endianness of the processor).  If it skips 1 or
3197
3 bytes, the fill value is undefined.
3198
 
3199

3200
File: as.info,  Node: Bundle directives,  Next: Byte,  Prev: Balign,  Up: Pseudo Ops
3201
 
3202
7.8 `.bundle_align_mode ABS-EXPR'
3203
=================================
3204
 
3205
`.bundle_align_mode' enables or disables "aligned instruction bundle"
3206
mode.  In this mode, sequences of adjacent instructions are grouped
3207
into fixed-sized "bundles".  If the argument is zero, this mode is
3208
disabled (which is the default state).  If the argument it not zero, it
3209
gives the size of an instruction bundle as a power of two (as for the
3210
`.p2align' directive, *note P2align::).
3211
 
3212
   For some targets, it's an ABI requirement that no instruction may
3213
span a certain aligned boundary.  A "bundle" is simply a sequence of
3214
instructions that starts on an aligned boundary.  For example, if
3215
ABS-EXPR is `5' then the bundle size is 32, so each aligned chunk of 32
3216
bytes is a bundle.  When aligned instruction bundle mode is in effect,
3217
no single instruction may span a boundary between bundles.  If an
3218
instruction would start too close to the end of a bundle for the length
3219
of that particular instruction to fit within the bundle, then the space
3220
at the end of that bundle is filled with no-op instructions so the
3221
instruction starts in the next bundle.  As a corollary, it's an error
3222
if any single instruction's encoding is longer than the bundle size.
3223
 
3224
7.9 `.bundle_lock' and `.bundle_unlock'
3225
=======================================
3226
 
3227
The `.bundle_lock' and directive `.bundle_unlock' directives allow
3228
explicit control over instruction bundle padding.  These directives are
3229
only valid when `.bundle_align_mode' has been used to enable aligned
3230
instruction bundle mode.  It's an error if they appear when
3231
`.bundle_align_mode' has not been used at all, or when the last
3232
directive was `.bundle_align_mode 0'.
3233
 
3234
   For some targets, it's an ABI requirement that certain instructions
3235
may appear only as part of specified permissible sequences of multiple
3236
instructions, all within the same bundle.  A pair of `.bundle_lock' and
3237
`.bundle_unlock' directives define a "bundle-locked" instruction
3238
sequence.  For purposes of aligned instruction bundle mode, a sequence
3239
starting with `.bundle_lock' and ending with `.bundle_unlock' is
3240
treated as a single instruction.  That is, the entire sequence must fit
3241
into a single bundle and may not span a bundle boundary.  If necessary,
3242
no-op instructions will be inserted before the first instruction of the
3243
sequence so that the whole sequence starts on an aligned bundle
3244
boundary.  It's an error if the sequence is longer than the bundle size.
3245
 
3246
   For convenience when using `.bundle_lock' and `.bundle_unlock'
3247
inside assembler macros (*note Macro::), bundle-locked sequences may be
3248
nested.  That is, a second `.bundle_lock' directive before the next
3249
`.bundle_unlock' directive has no effect except that it must be matched
3250
by another closing `.bundle_unlock' so that there is the same number of
3251
`.bundle_lock' and `.bundle_unlock' directives.
3252
 
3253

3254
File: as.info,  Node: Byte,  Next: CFI directives,  Prev: Bundle directives,  Up: Pseudo Ops
3255
 
3256
7.10 `.byte EXPRESSIONS'
3257
========================
3258
 
3259
`.byte' expects zero or more expressions, separated by commas.  Each
3260
expression is assembled into the next byte.
3261
 
3262

3263
File: as.info,  Node: CFI directives,  Next: Comm,  Prev: Byte,  Up: Pseudo Ops
3264
 
3265
7.11 `.cfi_sections SECTION_LIST'
3266
=================================
3267
 
3268
`.cfi_sections' may be used to specify whether CFI directives should
3269
emit `.eh_frame' section and/or `.debug_frame' section.  If
3270
SECTION_LIST is `.eh_frame', `.eh_frame' is emitted, if SECTION_LIST is
3271
`.debug_frame', `.debug_frame' is emitted.  To emit both use
3272
`.eh_frame, .debug_frame'.  The default if this directive is not used
3273
is `.cfi_sections .eh_frame'.
3274
 
3275
7.12 `.cfi_startproc [simple]'
3276
==============================
3277
 
3278
`.cfi_startproc' is used at the beginning of each function that should
3279
have an entry in `.eh_frame'. It initializes some internal data
3280
structures. Don't forget to close the function by `.cfi_endproc'.
3281
 
3282
   Unless `.cfi_startproc' is used along with parameter `simple' it
3283
also emits some architecture dependent initial CFI instructions.
3284
 
3285
7.13 `.cfi_endproc'
3286
===================
3287
 
3288
`.cfi_endproc' is used at the end of a function where it closes its
3289
unwind entry previously opened by `.cfi_startproc', and emits it to
3290
`.eh_frame'.
3291
 
3292
7.14 `.cfi_personality ENCODING [, EXP]'
3293
========================================
3294
 
3295
`.cfi_personality' defines personality routine and its encoding.
3296
ENCODING must be a constant determining how the personality should be
3297
encoded.  If it is 255 (`DW_EH_PE_omit'), second argument is not
3298
present, otherwise second argument should be a constant or a symbol
3299
name.  When using indirect encodings, the symbol provided should be the
3300
location where personality can be loaded from, not the personality
3301
routine itself.  The default after `.cfi_startproc' is
3302
`.cfi_personality 0xff', no personality routine.
3303
 
3304
7.15 `.cfi_lsda ENCODING [, EXP]'
3305
=================================
3306
 
3307
`.cfi_lsda' defines LSDA and its encoding.  ENCODING must be a constant
3308
determining how the LSDA should be encoded.  If it is 255
3309
(`DW_EH_PE_omit'), second argument is not present, otherwise second
3310
argument should be a constant or a symbol name.  The default after
3311
`.cfi_startproc' is `.cfi_lsda 0xff', no LSDA.
3312
 
3313
7.16 `.cfi_def_cfa REGISTER, OFFSET'
3314
====================================
3315
 
3316
`.cfi_def_cfa' defines a rule for computing CFA as: take address from
3317
REGISTER and add OFFSET to it.
3318
 
3319
7.17 `.cfi_def_cfa_register REGISTER'
3320
=====================================
3321
 
3322
`.cfi_def_cfa_register' modifies a rule for computing CFA. From now on
3323
REGISTER will be used instead of the old one. Offset remains the same.
3324
 
3325
7.18 `.cfi_def_cfa_offset OFFSET'
3326
=================================
3327
 
3328
`.cfi_def_cfa_offset' modifies a rule for computing CFA. Register
3329
remains the same, but OFFSET is new. Note that it is the absolute
3330
offset that will be added to a defined register to compute CFA address.
3331
 
3332
7.19 `.cfi_adjust_cfa_offset OFFSET'
3333
====================================
3334
 
3335
Same as `.cfi_def_cfa_offset' but OFFSET is a relative value that is
3336
added/substracted from the previous offset.
3337
 
3338
7.20 `.cfi_offset REGISTER, OFFSET'
3339
===================================
3340
 
3341
Previous value of REGISTER is saved at offset OFFSET from CFA.
3342
 
3343
7.21 `.cfi_rel_offset REGISTER, OFFSET'
3344
=======================================
3345
 
3346
Previous value of REGISTER is saved at offset OFFSET from the current
3347
CFA register.  This is transformed to `.cfi_offset' using the known
3348
displacement of the CFA register from the CFA.  This is often easier to
3349
use, because the number will match the code it's annotating.
3350
 
3351
7.22 `.cfi_register REGISTER1, REGISTER2'
3352
=========================================
3353
 
3354
Previous value of REGISTER1 is saved in register REGISTER2.
3355
 
3356
7.23 `.cfi_restore REGISTER'
3357
============================
3358
 
3359
`.cfi_restore' says that the rule for REGISTER is now the same as it
3360
was at the beginning of the function, after all initial instruction
3361
added by `.cfi_startproc' were executed.
3362
 
3363
7.24 `.cfi_undefined REGISTER'
3364
==============================
3365
 
3366
From now on the previous value of REGISTER can't be restored anymore.
3367
 
3368
7.25 `.cfi_same_value REGISTER'
3369
===============================
3370
 
3371
Current value of REGISTER is the same like in the previous frame, i.e.
3372
no restoration needed.
3373
 
3374
7.26 `.cfi_remember_state',
3375
===========================
3376
 
3377
First save all current rules for all registers by `.cfi_remember_state',
3378
then totally screw them up by subsequent `.cfi_*' directives and when
3379
everything is hopelessly bad, use `.cfi_restore_state' to restore the
3380
previous saved state.
3381
 
3382
7.27 `.cfi_return_column REGISTER'
3383
==================================
3384
 
3385
Change return column REGISTER, i.e. the return address is either
3386
directly in REGISTER or can be accessed by rules for REGISTER.
3387
 
3388
7.28 `.cfi_signal_frame'
3389
========================
3390
 
3391
Mark current function as signal trampoline.
3392
 
3393
7.29 `.cfi_window_save'
3394
=======================
3395
 
3396
SPARC register window has been saved.
3397
 
3398
7.30 `.cfi_escape' EXPRESSION[, ...]
3399
====================================
3400
 
3401
Allows the user to add arbitrary bytes to the unwind info.  One might
3402
use this to add OS-specific CFI opcodes, or generic CFI opcodes that
3403
GAS does not yet support.
3404
 
3405
7.31 `.cfi_val_encoded_addr REGISTER, ENCODING, LABEL'
3406
======================================================
3407
 
3408
The current value of REGISTER is LABEL.  The value of LABEL will be
3409
encoded in the output file according to ENCODING; see the description
3410
of `.cfi_personality' for details on this encoding.
3411
 
3412
   The usefulness of equating a register to a fixed label is probably
3413
limited to the return address register.  Here, it can be useful to mark
3414
a code segment that has only one return address which is reached by a
3415
direct branch and no copy of the return address exists in memory or
3416
another register.
3417
 
3418

3419
File: as.info,  Node: Comm,  Next: Data,  Prev: CFI directives,  Up: Pseudo Ops
3420
 
3421
7.32 `.comm SYMBOL , LENGTH '
3422
=============================
3423
 
3424
`.comm' declares a common symbol named SYMBOL.  When linking, a common
3425
symbol in one object file may be merged with a defined or common symbol
3426
of the same name in another object file.  If `ld' does not see a
3427
definition for the symbol-just one or more common symbols-then it will
3428
allocate LENGTH bytes of uninitialized memory.  LENGTH must be an
3429
absolute expression.  If `ld' sees multiple common symbols with the
3430
same name, and they do not all have the same size, it will allocate
3431
space using the largest size.
3432
 
3433
   When using ELF or (as a GNU extension) PE, the `.comm' directive
3434
takes an optional third argument.  This is the desired alignment of the
3435
symbol, specified for ELF as a byte boundary (for example, an alignment
3436
of 16 means that the least significant 4 bits of the address should be
3437
zero), and for PE as a power of two (for example, an alignment of 5
3438
means aligned to a 32-byte boundary).  The alignment must be an
3439
absolute expression, and it must be a power of two.  If `ld' allocates
3440
uninitialized memory for the common symbol, it will use the alignment
3441
when placing the symbol.  If no alignment is specified, `as' will set
3442
the alignment to the largest power of two less than or equal to the
3443
size of the symbol, up to a maximum of 16 on ELF, or the default
3444
section alignment of 4 on PE(1).
3445
 
3446
   The syntax for `.comm' differs slightly on the HPPA.  The syntax is
3447
`SYMBOL .comm, LENGTH'; SYMBOL is optional.
3448
 
3449
   ---------- Footnotes ----------
3450
 
3451
   (1) This is not the same as the executable image file alignment
3452
controlled by `ld''s `--section-alignment' option; image file sections
3453
in PE are aligned to multiples of 4096, which is far too large an
3454
alignment for ordinary variables.  It is rather the default alignment
3455
for (non-debug) sections within object (`*.o') files, which are less
3456
strictly aligned.
3457
 
3458

3459
File: as.info,  Node: Data,  Next: Def,  Prev: Comm,  Up: Pseudo Ops
3460
 
3461
7.33 `.data SUBSECTION'
3462
=======================
3463
 
3464
`.data' tells `as' to assemble the following statements onto the end of
3465
the data subsection numbered SUBSECTION (which is an absolute
3466
expression).  If SUBSECTION is omitted, it defaults to zero.
3467
 
3468

3469
File: as.info,  Node: Def,  Next: Desc,  Prev: Data,  Up: Pseudo Ops
3470
 
3471
7.34 `.def NAME'
3472
================
3473
 
3474
Begin defining debugging information for a symbol NAME; the definition
3475
extends until the `.endef' directive is encountered.
3476
 
3477

3478
File: as.info,  Node: Desc,  Next: Dim,  Prev: Def,  Up: Pseudo Ops
3479
 
3480
7.35 `.desc SYMBOL, ABS-EXPRESSION'
3481
===================================
3482
 
3483
This directive sets the descriptor of the symbol (*note Symbol
3484
Attributes::) to the low 16 bits of an absolute expression.
3485
 
3486
   The `.desc' directive is not available when `as' is configured for
3487
COFF output; it is only for `a.out' or `b.out' object format.  For the
3488
sake of compatibility, `as' accepts it, but produces no output, when
3489
configured for COFF.
3490
 
3491

3492
File: as.info,  Node: Dim,  Next: Double,  Prev: Desc,  Up: Pseudo Ops
3493
 
3494
7.36 `.dim'
3495
===========
3496
 
3497
This directive is generated by compilers to include auxiliary debugging
3498
information in the symbol table.  It is only permitted inside
3499
`.def'/`.endef' pairs.
3500
 
3501

3502
File: as.info,  Node: Double,  Next: Eject,  Prev: Dim,  Up: Pseudo Ops
3503
 
3504
7.37 `.double FLONUMS'
3505
======================
3506
 
3507
`.double' expects zero or more flonums, separated by commas.  It
3508
assembles floating point numbers.  The exact kind of floating point
3509
numbers emitted depends on how `as' is configured.  *Note Machine
3510
Dependencies::.
3511
 
3512

3513
File: as.info,  Node: Eject,  Next: Else,  Prev: Double,  Up: Pseudo Ops
3514
 
3515
7.38 `.eject'
3516
=============
3517
 
3518
Force a page break at this point, when generating assembly listings.
3519
 
3520

3521
File: as.info,  Node: Else,  Next: Elseif,  Prev: Eject,  Up: Pseudo Ops
3522
 
3523
7.39 `.else'
3524
============
3525
 
3526
`.else' is part of the `as' support for conditional assembly; see *note
3527
`.if': If.  It marks the beginning of a section of code to be assembled
3528
if the condition for the preceding `.if' was false.
3529
 
3530

3531
File: as.info,  Node: Elseif,  Next: End,  Prev: Else,  Up: Pseudo Ops
3532
 
3533
7.40 `.elseif'
3534
==============
3535
 
3536
`.elseif' is part of the `as' support for conditional assembly; see
3537
*note `.if': If.  It is shorthand for beginning a new `.if' block that
3538
would otherwise fill the entire `.else' section.
3539
 
3540

3541
File: as.info,  Node: End,  Next: Endef,  Prev: Elseif,  Up: Pseudo Ops
3542
 
3543
7.41 `.end'
3544
===========
3545
 
3546
`.end' marks the end of the assembly file.  `as' does not process
3547
anything in the file past the `.end' directive.
3548
 
3549

3550
File: as.info,  Node: Endef,  Next: Endfunc,  Prev: End,  Up: Pseudo Ops
3551
 
3552
7.42 `.endef'
3553
=============
3554
 
3555
This directive flags the end of a symbol definition begun with `.def'.
3556
 
3557

3558
File: as.info,  Node: Endfunc,  Next: Endif,  Prev: Endef,  Up: Pseudo Ops
3559
 
3560
7.43 `.endfunc'
3561
===============
3562
 
3563
`.endfunc' marks the end of a function specified with `.func'.
3564
 
3565

3566
File: as.info,  Node: Endif,  Next: Equ,  Prev: Endfunc,  Up: Pseudo Ops
3567
 
3568
7.44 `.endif'
3569
=============
3570
 
3571
`.endif' is part of the `as' support for conditional assembly; it marks
3572
the end of a block of code that is only assembled conditionally.  *Note
3573
`.if': If.
3574
 
3575

3576
File: as.info,  Node: Equ,  Next: Equiv,  Prev: Endif,  Up: Pseudo Ops
3577
 
3578
7.45 `.equ SYMBOL, EXPRESSION'
3579
==============================
3580
 
3581
This directive sets the value of SYMBOL to EXPRESSION.  It is
3582
synonymous with `.set'; see *note `.set': Set.
3583
 
3584
   The syntax for `equ' on the HPPA is `SYMBOL .equ EXPRESSION'.
3585
 
3586
   The syntax for `equ' on the Z80 is `SYMBOL equ EXPRESSION'.  On the
3587
Z80 it is an eror if SYMBOL is already defined, but the symbol is not
3588
protected from later redefinition.  Compare *note Equiv::.
3589
 
3590

3591
File: as.info,  Node: Equiv,  Next: Eqv,  Prev: Equ,  Up: Pseudo Ops
3592
 
3593
7.46 `.equiv SYMBOL, EXPRESSION'
3594
================================
3595
 
3596
The `.equiv' directive is like `.equ' and `.set', except that the
3597
assembler will signal an error if SYMBOL is already defined.  Note a
3598
symbol which has been referenced but not actually defined is considered
3599
to be undefined.
3600
 
3601
   Except for the contents of the error message, this is roughly
3602
equivalent to
3603
     .ifdef SYM
3604
     .err
3605
     .endif
3606
     .equ SYM,VAL
3607
   plus it protects the symbol from later redefinition.
3608
 
3609

3610
File: as.info,  Node: Eqv,  Next: Err,  Prev: Equiv,  Up: Pseudo Ops
3611
 
3612
7.47 `.eqv SYMBOL, EXPRESSION'
3613
==============================
3614
 
3615
The `.eqv' directive is like `.equiv', but no attempt is made to
3616
evaluate the expression or any part of it immediately.  Instead each
3617
time the resulting symbol is used in an expression, a snapshot of its
3618
current value is taken.
3619
 
3620

3621
File: as.info,  Node: Err,  Next: Error,  Prev: Eqv,  Up: Pseudo Ops
3622
 
3623
7.48 `.err'
3624
===========
3625
 
3626
If `as' assembles a `.err' directive, it will print an error message
3627
and, unless the `-Z' option was used, it will not generate an object
3628
file.  This can be used to signal an error in conditionally compiled
3629
code.
3630
 
3631

3632
File: as.info,  Node: Error,  Next: Exitm,  Prev: Err,  Up: Pseudo Ops
3633
 
3634
7.49 `.error "STRING"'
3635
======================
3636
 
3637
Similarly to `.err', this directive emits an error, but you can specify
3638
a string that will be emitted as the error message.  If you don't
3639
specify the message, it defaults to `".error directive invoked in
3640
source file"'.  *Note Error and Warning Messages: Errors.
3641
 
3642
      .error "This code has not been assembled and tested."
3643
 
3644

3645
File: as.info,  Node: Exitm,  Next: Extern,  Prev: Error,  Up: Pseudo Ops
3646
 
3647
7.50 `.exitm'
3648
=============
3649
 
3650
Exit early from the current macro definition.  *Note Macro::.
3651
 
3652

3653
File: as.info,  Node: Extern,  Next: Fail,  Prev: Exitm,  Up: Pseudo Ops
3654
 
3655
7.51 `.extern'
3656
==============
3657
 
3658
`.extern' is accepted in the source program--for compatibility with
3659
other assemblers--but it is ignored.  `as' treats all undefined symbols
3660
as external.
3661
 
3662

3663
File: as.info,  Node: Fail,  Next: File,  Prev: Extern,  Up: Pseudo Ops
3664
 
3665
7.52 `.fail EXPRESSION'
3666
=======================
3667
 
3668
Generates an error or a warning.  If the value of the EXPRESSION is 500
3669
or more, `as' will print a warning message.  If the value is less than
3670
500, `as' will print an error message.  The message will include the
3671
value of EXPRESSION.  This can occasionally be useful inside complex
3672
nested macros or conditional assembly.
3673
 
3674

3675
File: as.info,  Node: File,  Next: Fill,  Prev: Fail,  Up: Pseudo Ops
3676
 
3677
7.53 `.file'
3678
============
3679
 
3680
There are two different versions of the `.file' directive.  Targets
3681
that support DWARF2 line number information use the DWARF2 version of
3682
`.file'.  Other targets use the default version.
3683
 
3684
Default Version
3685
---------------
3686
 
3687
This version of the `.file' directive tells `as' that we are about to
3688
start a new logical file.  The syntax is:
3689
 
3690
     .file STRING
3691
 
3692
   STRING is the new file name.  In general, the filename is recognized
3693
whether or not it is surrounded by quotes `"'; but if you wish to
3694
specify an empty file name, you must give the quotes-`""'.  This
3695
statement may go away in future: it is only recognized to be compatible
3696
with old `as' programs.
3697
 
3698
DWARF2 Version
3699
--------------
3700
 
3701
When emitting DWARF2 line number information, `.file' assigns filenames
3702
to the `.debug_line' file name table.  The syntax is:
3703
 
3704
     .file FILENO FILENAME
3705
 
3706
   The FILENO operand should be a unique positive integer to use as the
3707
index of the entry in the table.  The FILENAME operand is a C string
3708
literal.
3709
 
3710
   The detail of filename indices is exposed to the user because the
3711
filename table is shared with the `.debug_info' section of the DWARF2
3712
debugging information, and thus the user must know the exact indices
3713
that table entries will have.
3714
 
3715

3716
File: as.info,  Node: Fill,  Next: Float,  Prev: File,  Up: Pseudo Ops
3717
 
3718
7.54 `.fill REPEAT , SIZE , VALUE'
3719
==================================
3720
 
3721
REPEAT, SIZE and VALUE are absolute expressions.  This emits REPEAT
3722
copies of SIZE bytes.  REPEAT may be zero or more.  SIZE may be zero or
3723
more, but if it is more than 8, then it is deemed to have the value 8,
3724
compatible with other people's assemblers.  The contents of each REPEAT
3725
bytes is taken from an 8-byte number.  The highest order 4 bytes are
3726
zero.  The lowest order 4 bytes are VALUE rendered in the byte-order of
3727
an integer on the computer `as' is assembling for.  Each SIZE bytes in
3728
a repetition is taken from the lowest order SIZE bytes of this number.
3729
Again, this bizarre behavior is compatible with other people's
3730
assemblers.
3731
 
3732
   SIZE and VALUE are optional.  If the second comma and VALUE are
3733
absent, VALUE is assumed zero.  If the first comma and following tokens
3734
are absent, SIZE is assumed to be 1.
3735
 
3736

3737
File: as.info,  Node: Float,  Next: Func,  Prev: Fill,  Up: Pseudo Ops
3738
 
3739
7.55 `.float FLONUMS'
3740
=====================
3741
 
3742
This directive assembles zero or more flonums, separated by commas.  It
3743
has the same effect as `.single'.  The exact kind of floating point
3744
numbers emitted depends on how `as' is configured.  *Note Machine
3745
Dependencies::.
3746
 
3747

3748
File: as.info,  Node: Func,  Next: Global,  Prev: Float,  Up: Pseudo Ops
3749
 
3750
7.56 `.func NAME[,LABEL]'
3751
=========================
3752
 
3753
`.func' emits debugging information to denote function NAME, and is
3754
ignored unless the file is assembled with debugging enabled.  Only
3755
`--gstabs[+]' is currently supported.  LABEL is the entry point of the
3756
function and if omitted NAME prepended with the `leading char' is used.
3757
`leading char' is usually `_' or nothing, depending on the target.  All
3758
functions are currently defined to have `void' return type.  The
3759
function must be terminated with `.endfunc'.
3760
 
3761

3762
File: as.info,  Node: Global,  Next: Gnu_attribute,  Prev: Func,  Up: Pseudo Ops
3763
 
3764
7.57 `.global SYMBOL', `.globl SYMBOL'
3765
======================================
3766
 
3767
`.global' makes the symbol visible to `ld'.  If you define SYMBOL in
3768
your partial program, its value is made available to other partial
3769
programs that are linked with it.  Otherwise, SYMBOL takes its
3770
attributes from a symbol of the same name from another file linked into
3771
the same program.
3772
 
3773
   Both spellings (`.globl' and `.global') are accepted, for
3774
compatibility with other assemblers.
3775
 
3776
   On the HPPA, `.global' is not always enough to make it accessible to
3777
other partial programs.  You may need the HPPA-only `.EXPORT' directive
3778
as well.  *Note HPPA Assembler Directives: HPPA Directives.
3779
 
3780

3781
File: as.info,  Node: Gnu_attribute,  Next: Hidden,  Prev: Global,  Up: Pseudo Ops
3782
 
3783
7.58 `.gnu_attribute TAG,VALUE'
3784
===============================
3785
 
3786
Record a GNU object attribute for this file.  *Note Object Attributes::.
3787
 
3788

3789
File: as.info,  Node: Hidden,  Next: hword,  Prev: Gnu_attribute,  Up: Pseudo Ops
3790
 
3791
7.59 `.hidden NAMES'
3792
====================
3793
 
3794
This is one of the ELF visibility directives.  The other two are
3795
`.internal' (*note `.internal': Internal.) and `.protected' (*note
3796
`.protected': Protected.).
3797
 
3798
   This directive overrides the named symbols default visibility (which
3799
is set by their binding: local, global or weak).  The directive sets
3800
the visibility to `hidden' which means that the symbols are not visible
3801
to other components.  Such symbols are always considered to be
3802
`protected' as well.
3803
 
3804

3805
File: as.info,  Node: hword,  Next: Ident,  Prev: Hidden,  Up: Pseudo Ops
3806
 
3807
7.60 `.hword EXPRESSIONS'
3808
=========================
3809
 
3810
This expects zero or more EXPRESSIONS, and emits a 16 bit number for
3811
each.
3812
 
3813
   This directive is a synonym for `.short'; depending on the target
3814
architecture, it may also be a synonym for `.word'.
3815
 
3816

3817
File: as.info,  Node: Ident,  Next: If,  Prev: hword,  Up: Pseudo Ops
3818
 
3819
7.61 `.ident'
3820
=============
3821
 
3822
This directive is used by some assemblers to place tags in object
3823
files.  The behavior of this directive varies depending on the target.
3824
When using the a.out object file format, `as' simply accepts the
3825
directive for source-file compatibility with existing assemblers, but
3826
does not emit anything for it.  When using COFF, comments are emitted
3827
to the `.comment' or `.rdata' section, depending on the target.  When
3828
using ELF, comments are emitted to the `.comment' section.
3829
 
3830

3831
File: as.info,  Node: If,  Next: Incbin,  Prev: Ident,  Up: Pseudo Ops
3832
 
3833
7.62 `.if ABSOLUTE EXPRESSION'
3834
==============================
3835
 
3836
`.if' marks the beginning of a section of code which is only considered
3837
part of the source program being assembled if the argument (which must
3838
be an ABSOLUTE EXPRESSION) is non-zero.  The end of the conditional
3839
section of code must be marked by `.endif' (*note `.endif': Endif.);
3840
optionally, you may include code for the alternative condition, flagged
3841
by `.else' (*note `.else': Else.).  If you have several conditions to
3842
check, `.elseif' may be used to avoid nesting blocks if/else within
3843
each subsequent `.else' block.
3844
 
3845
   The following variants of `.if' are also supported:
3846
`.ifdef SYMBOL'
3847
     Assembles the following section of code if the specified SYMBOL
3848
     has been defined.  Note a symbol which has been referenced but not
3849
     yet defined is considered to be undefined.
3850
 
3851
`.ifb TEXT'
3852
     Assembles the following section of code if the operand is blank
3853
     (empty).
3854
 
3855
`.ifc STRING1,STRING2'
3856
     Assembles the following section of code if the two strings are the
3857
     same.  The strings may be optionally quoted with single quotes.
3858
     If they are not quoted, the first string stops at the first comma,
3859
     and the second string stops at the end of the line.  Strings which
3860
     contain whitespace should be quoted.  The string comparison is
3861
     case sensitive.
3862
 
3863
`.ifeq ABSOLUTE EXPRESSION'
3864
     Assembles the following section of code if the argument is zero.
3865
 
3866
`.ifeqs STRING1,STRING2'
3867
     Another form of `.ifc'.  The strings must be quoted using double
3868
     quotes.
3869
 
3870
`.ifge ABSOLUTE EXPRESSION'
3871
     Assembles the following section of code if the argument is greater
3872
     than or equal to zero.
3873
 
3874
`.ifgt ABSOLUTE EXPRESSION'
3875
     Assembles the following section of code if the argument is greater
3876
     than zero.
3877
 
3878
`.ifle ABSOLUTE EXPRESSION'
3879
     Assembles the following section of code if the argument is less
3880
     than or equal to zero.
3881
 
3882
`.iflt ABSOLUTE EXPRESSION'
3883
     Assembles the following section of code if the argument is less
3884
     than zero.
3885
 
3886
`.ifnb TEXT'
3887
     Like `.ifb', but the sense of the test is reversed: this assembles
3888
     the following section of code if the operand is non-blank
3889
     (non-empty).
3890
 
3891
`.ifnc STRING1,STRING2.'
3892
     Like `.ifc', but the sense of the test is reversed: this assembles
3893
     the following section of code if the two strings are not the same.
3894
 
3895
`.ifndef SYMBOL'
3896
`.ifnotdef SYMBOL'
3897
     Assembles the following section of code if the specified SYMBOL
3898
     has not been defined.  Both spelling variants are equivalent.
3899
     Note a symbol which has been referenced but not yet defined is
3900
     considered to be undefined.
3901
 
3902
`.ifne ABSOLUTE EXPRESSION'
3903
     Assembles the following section of code if the argument is not
3904
     equal to zero (in other words, this is equivalent to `.if').
3905
 
3906
`.ifnes STRING1,STRING2'
3907
     Like `.ifeqs', but the sense of the test is reversed: this
3908
     assembles the following section of code if the two strings are not
3909
     the same.
3910
 
3911

3912
File: as.info,  Node: Incbin,  Next: Include,  Prev: If,  Up: Pseudo Ops
3913
 
3914
7.63 `.incbin "FILE"[,SKIP[,COUNT]]'
3915
====================================
3916
 
3917
The `incbin' directive includes FILE verbatim at the current location.
3918
You can control the search paths used with the `-I' command-line option
3919
(*note Command-Line Options: Invoking.).  Quotation marks are required
3920
around FILE.
3921
 
3922
   The SKIP argument skips a number of bytes from the start of the
3923
FILE.  The COUNT argument indicates the maximum number of bytes to
3924
read.  Note that the data is not aligned in any way, so it is the user's
3925
responsibility to make sure that proper alignment is provided both
3926
before and after the `incbin' directive.
3927
 
3928

3929
File: as.info,  Node: Include,  Next: Int,  Prev: Incbin,  Up: Pseudo Ops
3930
 
3931
7.64 `.include "FILE"'
3932
======================
3933
 
3934
This directive provides a way to include supporting files at specified
3935
points in your source program.  The code from FILE is assembled as if
3936
it followed the point of the `.include'; when the end of the included
3937
file is reached, assembly of the original file continues.  You can
3938
control the search paths used with the `-I' command-line option (*note
3939
Command-Line Options: Invoking.).  Quotation marks are required around
3940
FILE.
3941
 
3942

3943
File: as.info,  Node: Int,  Next: Internal,  Prev: Include,  Up: Pseudo Ops
3944
 
3945
7.65 `.int EXPRESSIONS'
3946
=======================
3947
 
3948
Expect zero or more EXPRESSIONS, of any section, separated by commas.
3949
For each expression, emit a number that, at run time, is the value of
3950
that expression.  The byte order and bit size of the number depends on
3951
what kind of target the assembly is for.
3952
 
3953

3954
File: as.info,  Node: Internal,  Next: Irp,  Prev: Int,  Up: Pseudo Ops
3955
 
3956
7.66 `.internal NAMES'
3957
======================
3958
 
3959
This is one of the ELF visibility directives.  The other two are
3960
`.hidden' (*note `.hidden': Hidden.) and `.protected' (*note
3961
`.protected': Protected.).
3962
 
3963
   This directive overrides the named symbols default visibility (which
3964
is set by their binding: local, global or weak).  The directive sets
3965
the visibility to `internal' which means that the symbols are
3966
considered to be `hidden' (i.e., not visible to other components), and
3967
that some extra, processor specific processing must also be performed
3968
upon the  symbols as well.
3969
 
3970

3971
File: as.info,  Node: Irp,  Next: Irpc,  Prev: Internal,  Up: Pseudo Ops
3972
 
3973
7.67 `.irp SYMBOL,VALUES'...
3974
============================
3975
 
3976
Evaluate a sequence of statements assigning different values to SYMBOL.
3977
The sequence of statements starts at the `.irp' directive, and is
3978
terminated by an `.endr' directive.  For each VALUE, SYMBOL is set to
3979
VALUE, and the sequence of statements is assembled.  If no VALUE is
3980
listed, the sequence of statements is assembled once, with SYMBOL set
3981
to the null string.  To refer to SYMBOL within the sequence of
3982
statements, use \SYMBOL.
3983
 
3984
   For example, assembling
3985
 
3986
             .irp    param,1,2,3
3987
             move    d\param,sp@-
3988
             .endr
3989
 
3990
   is equivalent to assembling
3991
 
3992
             move    d1,sp@-
3993
             move    d2,sp@-
3994
             move    d3,sp@-
3995
 
3996
   For some caveats with the spelling of SYMBOL, see also *note Macro::.
3997
 
3998

3999
File: as.info,  Node: Irpc,  Next: Lcomm,  Prev: Irp,  Up: Pseudo Ops
4000
 
4001
7.68 `.irpc SYMBOL,VALUES'...
4002
=============================
4003
 
4004
Evaluate a sequence of statements assigning different values to SYMBOL.
4005
The sequence of statements starts at the `.irpc' directive, and is
4006
terminated by an `.endr' directive.  For each character in VALUE,
4007
SYMBOL is set to the character, and the sequence of statements is
4008
assembled.  If no VALUE is listed, the sequence of statements is
4009
assembled once, with SYMBOL set to the null string.  To refer to SYMBOL
4010
within the sequence of statements, use \SYMBOL.
4011
 
4012
   For example, assembling
4013
 
4014
             .irpc    param,123
4015
             move    d\param,sp@-
4016
             .endr
4017
 
4018
   is equivalent to assembling
4019
 
4020
             move    d1,sp@-
4021
             move    d2,sp@-
4022
             move    d3,sp@-
4023
 
4024
   For some caveats with the spelling of SYMBOL, see also the discussion
4025
at *Note Macro::.
4026
 
4027

4028
File: as.info,  Node: Lcomm,  Next: Lflags,  Prev: Irpc,  Up: Pseudo Ops
4029
 
4030
7.69 `.lcomm SYMBOL , LENGTH'
4031
=============================
4032
 
4033
Reserve LENGTH (an absolute expression) bytes for a local common
4034
denoted by SYMBOL.  The section and value of SYMBOL are those of the
4035
new local common.  The addresses are allocated in the bss section, so
4036
that at run-time the bytes start off zeroed.  SYMBOL is not declared
4037
global (*note `.global': Global.), so is normally not visible to `ld'.
4038
 
4039
   Some targets permit a third argument to be used with `.lcomm'.  This
4040
argument specifies the desired alignment of the symbol in the bss
4041
section.
4042
 
4043
   The syntax for `.lcomm' differs slightly on the HPPA.  The syntax is
4044
`SYMBOL .lcomm, LENGTH'; SYMBOL is optional.
4045
 
4046

4047
File: as.info,  Node: Lflags,  Next: Line,  Prev: Lcomm,  Up: Pseudo Ops
4048
 
4049
7.70 `.lflags'
4050
==============
4051
 
4052
`as' accepts this directive, for compatibility with other assemblers,
4053
but ignores it.
4054
 
4055

4056
File: as.info,  Node: Line,  Next: Linkonce,  Prev: Lflags,  Up: Pseudo Ops
4057
 
4058
7.71 `.line LINE-NUMBER'
4059
========================
4060
 
4061
Change the logical line number.  LINE-NUMBER must be an absolute
4062
expression.  The next line has that logical line number.  Therefore any
4063
other statements on the current line (after a statement separator
4064
character) are reported as on logical line number LINE-NUMBER - 1.  One
4065
day `as' will no longer support this directive: it is recognized only
4066
for compatibility with existing assembler programs.
4067
 
4068
Even though this is a directive associated with the `a.out' or `b.out'
4069
object-code formats, `as' still recognizes it when producing COFF
4070
output, and treats `.line' as though it were the COFF `.ln' _if_ it is
4071
found outside a `.def'/`.endef' pair.
4072
 
4073
   Inside a `.def', `.line' is, instead, one of the directives used by
4074
compilers to generate auxiliary symbol information for debugging.
4075
 
4076

4077
File: as.info,  Node: Linkonce,  Next: List,  Prev: Line,  Up: Pseudo Ops
4078
 
4079
7.72 `.linkonce [TYPE]'
4080
=======================
4081
 
4082
Mark the current section so that the linker only includes a single copy
4083
of it.  This may be used to include the same section in several
4084
different object files, but ensure that the linker will only include it
4085
once in the final output file.  The `.linkonce' pseudo-op must be used
4086
for each instance of the section.  Duplicate sections are detected
4087
based on the section name, so it should be unique.
4088
 
4089
   This directive is only supported by a few object file formats; as of
4090
this writing, the only object file format which supports it is the
4091
Portable Executable format used on Windows NT.
4092
 
4093
   The TYPE argument is optional.  If specified, it must be one of the
4094
following strings.  For example:
4095
     .linkonce same_size
4096
   Not all types may be supported on all object file formats.
4097
 
4098
`discard'
4099
     Silently discard duplicate sections.  This is the default.
4100
 
4101
`one_only'
4102
     Warn if there are duplicate sections, but still keep only one copy.
4103
 
4104
`same_size'
4105
     Warn if any of the duplicates have different sizes.
4106
 
4107
`same_contents'
4108
     Warn if any of the duplicates do not have exactly the same
4109
     contents.
4110
 
4111

4112
File: as.info,  Node: List,  Next: Ln,  Prev: Linkonce,  Up: Pseudo Ops
4113
 
4114
7.73 `.list'
4115
============
4116
 
4117
Control (in conjunction with the `.nolist' directive) whether or not
4118
assembly listings are generated.  These two directives maintain an
4119
internal counter (which is zero initially).   `.list' increments the
4120
counter, and `.nolist' decrements it.  Assembly listings are generated
4121
whenever the counter is greater than zero.
4122
 
4123
   By default, listings are disabled.  When you enable them (with the
4124
`-a' command line option; *note Command-Line Options: Invoking.), the
4125
initial value of the listing counter is one.
4126
 
4127

4128
File: as.info,  Node: Ln,  Next: Loc,  Prev: List,  Up: Pseudo Ops
4129
 
4130
7.74 `.ln LINE-NUMBER'
4131
======================
4132
 
4133
`.ln' is a synonym for `.line'.
4134
 
4135

4136
File: as.info,  Node: Loc,  Next: Loc_mark_labels,  Prev: Ln,  Up: Pseudo Ops
4137
 
4138
7.75 `.loc FILENO LINENO [COLUMN] [OPTIONS]'
4139
============================================
4140
 
4141
When emitting DWARF2 line number information, the `.loc' directive will
4142
add a row to the `.debug_line' line number matrix corresponding to the
4143
immediately following assembly instruction.  The FILENO, LINENO, and
4144
optional COLUMN arguments will be applied to the `.debug_line' state
4145
machine before the row is added.
4146
 
4147
   The OPTIONS are a sequence of the following tokens in any order:
4148
 
4149
`basic_block'
4150
     This option will set the `basic_block' register in the
4151
     `.debug_line' state machine to `true'.
4152
 
4153
`prologue_end'
4154
     This option will set the `prologue_end' register in the
4155
     `.debug_line' state machine to `true'.
4156
 
4157
`epilogue_begin'
4158
     This option will set the `epilogue_begin' register in the
4159
     `.debug_line' state machine to `true'.
4160
 
4161
`is_stmt VALUE'
4162
     This option will set the `is_stmt' register in the `.debug_line'
4163
     state machine to `value', which must be either 0 or 1.
4164
 
4165
`isa VALUE'
4166
     This directive will set the `isa' register in the `.debug_line'
4167
     state machine to VALUE, which must be an unsigned integer.
4168
 
4169
`discriminator VALUE'
4170
     This directive will set the `discriminator' register in the
4171
     `.debug_line' state machine to VALUE, which must be an unsigned
4172
     integer.
4173
 
4174
 
4175

4176
File: as.info,  Node: Loc_mark_labels,  Next: Local,  Prev: Loc,  Up: Pseudo Ops
4177
 
4178
7.76 `.loc_mark_labels ENABLE'
4179
==============================
4180
 
4181
When emitting DWARF2 line number information, the `.loc_mark_labels'
4182
directive makes the assembler emit an entry to the `.debug_line' line
4183
number matrix with the `basic_block' register in the state machine set
4184
whenever a code label is seen.  The ENABLE argument should be either 1
4185
or 0, to enable or disable this function respectively.
4186
 
4187

4188
File: as.info,  Node: Local,  Next: Long,  Prev: Loc_mark_labels,  Up: Pseudo Ops
4189
 
4190
7.77 `.local NAMES'
4191
===================
4192
 
4193
This directive, which is available for ELF targets, marks each symbol in
4194
the comma-separated list of `names' as a local symbol so that it will
4195
not be externally visible.  If the symbols do not already exist, they
4196
will be created.
4197
 
4198
   For targets where the `.lcomm' directive (*note Lcomm::) does not
4199
accept an alignment argument, which is the case for most ELF targets,
4200
the `.local' directive can be used in combination with `.comm' (*note
4201
Comm::) to define aligned local common data.
4202
 
4203

4204
File: as.info,  Node: Long,  Next: Macro,  Prev: Local,  Up: Pseudo Ops
4205
 
4206
7.78 `.long EXPRESSIONS'
4207
========================
4208
 
4209
`.long' is the same as `.int'.  *Note `.int': Int.
4210
 
4211

4212
File: as.info,  Node: Macro,  Next: MRI,  Prev: Long,  Up: Pseudo Ops
4213
 
4214
7.79 `.macro'
4215
=============
4216
 
4217
The commands `.macro' and `.endm' allow you to define macros that
4218
generate assembly output.  For example, this definition specifies a
4219
macro `sum' that puts a sequence of numbers into memory:
4220
 
4221
             .macro  sum from=0, to=5
4222
             .long   \from
4223
             .if     \to-\from
4224
             sum     "(\from+1)",\to
4225
             .endif
4226
             .endm
4227
 
4228
With that definition, `SUM 0,5' is equivalent to this assembly input:
4229
 
4230
             .long   0
4231
             .long   1
4232
             .long   2
4233
             .long   3
4234
             .long   4
4235
             .long   5
4236
 
4237
`.macro MACNAME'
4238
`.macro MACNAME MACARGS ...'
4239
     Begin the definition of a macro called MACNAME.  If your macro
4240
     definition requires arguments, specify their names after the macro
4241
     name, separated by commas or spaces.  You can qualify the macro
4242
     argument to indicate whether all invocations must specify a
4243
     non-blank value (through `:`req''), or whether it takes all of the
4244
     remaining arguments (through `:`vararg'').  You can supply a
4245
     default value for any macro argument by following the name with
4246
     `=DEFLT'.  You cannot define two macros with the same MACNAME
4247
     unless it has been subject to the `.purgem' directive (*note
4248
     Purgem::) between the two definitions.  For example, these are all
4249
     valid `.macro' statements:
4250
 
4251
    `.macro comm'
4252
          Begin the definition of a macro called `comm', which takes no
4253
          arguments.
4254
 
4255
    `.macro plus1 p, p1'
4256
    `.macro plus1 p p1'
4257
          Either statement begins the definition of a macro called
4258
          `plus1', which takes two arguments; within the macro
4259
          definition, write `\p' or `\p1' to evaluate the arguments.
4260
 
4261
    `.macro reserve_str p1=0 p2'
4262
          Begin the definition of a macro called `reserve_str', with two
4263
          arguments.  The first argument has a default value, but not
4264
          the second.  After the definition is complete, you can call
4265
          the macro either as `reserve_str A,B' (with `\p1' evaluating
4266
          to A and `\p2' evaluating to B), or as `reserve_str ,B' (with
4267
          `\p1' evaluating as the default, in this case `0', and `\p2'
4268
          evaluating to B).
4269
 
4270
    `.macro m p1:req, p2=0, p3:vararg'
4271
          Begin the definition of a macro called `m', with at least
4272
          three arguments.  The first argument must always have a value
4273
          specified, but not the second, which instead has a default
4274
          value. The third formal will get assigned all remaining
4275
          arguments specified at invocation time.
4276
 
4277
          When you call a macro, you can specify the argument values
4278
          either by position, or by keyword.  For example, `sum 9,17'
4279
          is equivalent to `sum to=17, from=9'.
4280
 
4281
 
4282
     Note that since each of the MACARGS can be an identifier exactly
4283
     as any other one permitted by the target architecture, there may be
4284
     occasional problems if the target hand-crafts special meanings to
4285
     certain characters when they occur in a special position.  For
4286
     example, if the colon (`:') is generally permitted to be part of a
4287
     symbol name, but the architecture specific code special-cases it
4288
     when occurring as the final character of a symbol (to denote a
4289
     label), then the macro parameter replacement code will have no way
4290
     of knowing that and consider the whole construct (including the
4291
     colon) an identifier, and check only this identifier for being the
4292
     subject to parameter substitution.  So for example this macro
4293
     definition:
4294
 
4295
                .macro label l
4296
          \l:
4297
                .endm
4298
 
4299
     might not work as expected.  Invoking `label foo' might not create
4300
     a label called `foo' but instead just insert the text `\l:' into
4301
     the assembler source, probably generating an error about an
4302
     unrecognised identifier.
4303
 
4304
     Similarly problems might occur with the period character (`.')
4305
     which is often allowed inside opcode names (and hence identifier
4306
     names).  So for example constructing a macro to build an opcode
4307
     from a base name and a length specifier like this:
4308
 
4309
                .macro opcode base length
4310
                  \base.\length
4311
                .endm
4312
 
4313
     and invoking it as `opcode store l' will not create a `store.l'
4314
     instruction but instead generate some kind of error as the
4315
     assembler tries to interpret the text `\base.\length'.
4316
 
4317
     There are several possible ways around this problem:
4318
 
4319
    `Insert white space'
4320
          If it is possible to use white space characters then this is
4321
          the simplest solution.  eg:
4322
 
4323
                .macro label l
4324
               \l :
4325
                .endm
4326
 
4327
    `Use `\()''
4328
          The string `\()' can be used to separate the end of a macro
4329
          argument from the following text.  eg:
4330
 
4331
                .macro opcode base length
4332
                       \base\().\length
4333
                .endm
4334
 
4335
    `Use the alternate macro syntax mode'
4336
          In the alternative macro syntax mode the ampersand character
4337
          (`&') can be used as a separator.  eg:
4338
 
4339
                .altmacro
4340
                .macro label l
4341
               l&:
4342
                .endm
4343
 
4344
     Note: this problem of correctly identifying string parameters to
4345
     pseudo ops also applies to the identifiers used in `.irp' (*note
4346
     Irp::) and `.irpc' (*note Irpc::) as well.
4347
 
4348
`.endm'
4349
     Mark the end of a macro definition.
4350
 
4351
`.exitm'
4352
     Exit early from the current macro definition.
4353
 
4354
`\@'
4355
     `as' maintains a counter of how many macros it has executed in
4356
     this pseudo-variable; you can copy that number to your output with
4357
     `\@', but _only within a macro definition_.
4358
 
4359
`LOCAL NAME [ , ... ]'
4360
     _Warning: `LOCAL' is only available if you select "alternate macro
4361
     syntax" with `--alternate' or `.altmacro'._ *Note `.altmacro':
4362
     Altmacro.
4363
 
4364

4365
File: as.info,  Node: MRI,  Next: Noaltmacro,  Prev: Macro,  Up: Pseudo Ops
4366
 
4367
7.80 `.mri VAL'
4368
===============
4369
 
4370
If VAL is non-zero, this tells `as' to enter MRI mode.  If VAL is zero,
4371
this tells `as' to exit MRI mode.  This change affects code assembled
4372
until the next `.mri' directive, or until the end of the file.  *Note
4373
MRI mode: M.
4374
 
4375

4376
File: as.info,  Node: Noaltmacro,  Next: Nolist,  Prev: MRI,  Up: Pseudo Ops
4377
 
4378
7.81 `.noaltmacro'
4379
==================
4380
 
4381
Disable alternate macro mode.  *Note Altmacro::.
4382
 
4383

4384
File: as.info,  Node: Nolist,  Next: Octa,  Prev: Noaltmacro,  Up: Pseudo Ops
4385
 
4386
7.82 `.nolist'
4387
==============
4388
 
4389
Control (in conjunction with the `.list' directive) whether or not
4390
assembly listings are generated.  These two directives maintain an
4391
internal counter (which is zero initially).   `.list' increments the
4392
counter, and `.nolist' decrements it.  Assembly listings are generated
4393
whenever the counter is greater than zero.
4394
 
4395

4396
File: as.info,  Node: Octa,  Next: Offset,  Prev: Nolist,  Up: Pseudo Ops
4397
 
4398
7.83 `.octa BIGNUMS'
4399
====================
4400
 
4401
This directive expects zero or more bignums, separated by commas.  For
4402
each bignum, it emits a 16-byte integer.
4403
 
4404
   The term "octa" comes from contexts in which a "word" is two bytes;
4405
hence _octa_-word for 16 bytes.
4406
 
4407

4408
File: as.info,  Node: Offset,  Next: Org,  Prev: Octa,  Up: Pseudo Ops
4409
 
4410
7.84 `.offset LOC'
4411
==================
4412
 
4413
Set the location counter to LOC in the absolute section.  LOC must be
4414
an absolute expression.  This directive may be useful for defining
4415
symbols with absolute values.  Do not confuse it with the `.org'
4416
directive.
4417
 
4418

4419
File: as.info,  Node: Org,  Next: P2align,  Prev: Offset,  Up: Pseudo Ops
4420
 
4421
7.85 `.org NEW-LC , FILL'
4422
=========================
4423
 
4424
Advance the location counter of the current section to NEW-LC.  NEW-LC
4425
is either an absolute expression or an expression with the same section
4426
as the current subsection.  That is, you can't use `.org' to cross
4427
sections: if NEW-LC has the wrong section, the `.org' directive is
4428
ignored.  To be compatible with former assemblers, if the section of
4429
NEW-LC is absolute, `as' issues a warning, then pretends the section of
4430
NEW-LC is the same as the current subsection.
4431
 
4432
   `.org' may only increase the location counter, or leave it
4433
unchanged; you cannot use `.org' to move the location counter backwards.
4434
 
4435
   Because `as' tries to assemble programs in one pass, NEW-LC may not
4436
be undefined.  If you really detest this restriction we eagerly await a
4437
chance to share your improved assembler.
4438
 
4439
   Beware that the origin is relative to the start of the section, not
4440
to the start of the subsection.  This is compatible with other people's
4441
assemblers.
4442
 
4443
   When the location counter (of the current subsection) is advanced,
4444
the intervening bytes are filled with FILL which should be an absolute
4445
expression.  If the comma and FILL are omitted, FILL defaults to zero.
4446
 
4447

4448
File: as.info,  Node: P2align,  Next: PopSection,  Prev: Org,  Up: Pseudo Ops
4449
 
4450
7.86 `.p2align[wl] ABS-EXPR, ABS-EXPR, ABS-EXPR'
4451
================================================
4452
 
4453
Pad the location counter (in the current subsection) to a particular
4454
storage boundary.  The first expression (which must be absolute) is the
4455
number of low-order zero bits the location counter must have after
4456
advancement.  For example `.p2align 3' advances the location counter
4457
until it a multiple of 8.  If the location counter is already a
4458
multiple of 8, no change is needed.
4459
 
4460
   The second expression (also absolute) gives the fill value to be
4461
stored in the padding bytes.  It (and the comma) may be omitted.  If it
4462
is omitted, the padding bytes are normally zero.  However, on some
4463
systems, if the section is marked as containing code and the fill value
4464
is omitted, the space is filled with no-op instructions.
4465
 
4466
   The third expression is also absolute, and is also optional.  If it
4467
is present, it is the maximum number of bytes that should be skipped by
4468
this alignment directive.  If doing the alignment would require
4469
skipping more bytes than the specified maximum, then the alignment is
4470
not done at all.  You can omit the fill value (the second argument)
4471
entirely by simply using two commas after the required alignment; this
4472
can be useful if you want the alignment to be filled with no-op
4473
instructions when appropriate.
4474
 
4475
   The `.p2alignw' and `.p2alignl' directives are variants of the
4476
`.p2align' directive.  The `.p2alignw' directive treats the fill
4477
pattern as a two byte word value.  The `.p2alignl' directives treats the
4478
fill pattern as a four byte longword value.  For example, `.p2alignw
4479
2,0x368d' will align to a multiple of 4.  If it skips two bytes, they
4480
will be filled in with the value 0x368d (the exact placement of the
4481
bytes depends upon the endianness of the processor).  If it skips 1 or
4482
3 bytes, the fill value is undefined.
4483
 
4484

4485
File: as.info,  Node: PopSection,  Next: Previous,  Prev: P2align,  Up: Pseudo Ops
4486
 
4487
7.87 `.popsection'
4488
==================
4489
 
4490
This is one of the ELF section stack manipulation directives.  The
4491
others are `.section' (*note Section::), `.subsection' (*note
4492
SubSection::), `.pushsection' (*note PushSection::), and `.previous'
4493
(*note Previous::).
4494
 
4495
   This directive replaces the current section (and subsection) with
4496
the top section (and subsection) on the section stack.  This section is
4497
popped off the stack.
4498
 
4499

4500
File: as.info,  Node: Previous,  Next: Print,  Prev: PopSection,  Up: Pseudo Ops
4501
 
4502
7.88 `.previous'
4503
================
4504
 
4505
This is one of the ELF section stack manipulation directives.  The
4506
others are `.section' (*note Section::), `.subsection' (*note
4507
SubSection::), `.pushsection' (*note PushSection::), and `.popsection'
4508
(*note PopSection::).
4509
 
4510
   This directive swaps the current section (and subsection) with most
4511
recently referenced section/subsection pair prior to this one.  Multiple
4512
`.previous' directives in a row will flip between two sections (and
4513
their subsections).  For example:
4514
 
4515
     .section A
4516
      .subsection 1
4517
       .word 0x1234
4518
      .subsection 2
4519
       .word 0x5678
4520
     .previous
4521
      .word 0x9abc
4522
 
4523
   Will place 0x1234 and 0x9abc into subsection 1 and 0x5678 into
4524
subsection 2 of section A.  Whilst:
4525
 
4526
     .section A
4527
     .subsection 1
4528
       # Now in section A subsection 1
4529
       .word 0x1234
4530
     .section B
4531
     .subsection 0
4532
       # Now in section B subsection 0
4533
       .word 0x5678
4534
     .subsection 1
4535
       # Now in section B subsection 1
4536
       .word 0x9abc
4537
     .previous
4538
       # Now in section B subsection 0
4539
       .word 0xdef0
4540
 
4541
   Will place 0x1234 into section A, 0x5678 and 0xdef0 into subsection
4542
 
4543
 
4544
   In terms of the section stack, this directive swaps the current
4545
section with the top section on the section stack.
4546
 
4547

4548
File: as.info,  Node: Print,  Next: Protected,  Prev: Previous,  Up: Pseudo Ops
4549
 
4550
7.89 `.print STRING'
4551
====================
4552
 
4553
`as' will print STRING on the standard output during assembly.  You
4554
must put STRING in double quotes.
4555
 
4556

4557
File: as.info,  Node: Protected,  Next: Psize,  Prev: Print,  Up: Pseudo Ops
4558
 
4559
7.90 `.protected NAMES'
4560
=======================
4561
 
4562
This is one of the ELF visibility directives.  The other two are
4563
`.hidden' (*note Hidden::) and `.internal' (*note Internal::).
4564
 
4565
   This directive overrides the named symbols default visibility (which
4566
is set by their binding: local, global or weak).  The directive sets
4567
the visibility to `protected' which means that any references to the
4568
symbols from within the components that defines them must be resolved
4569
to the definition in that component, even if a definition in another
4570
component would normally preempt this.
4571
 
4572

4573
File: as.info,  Node: Psize,  Next: Purgem,  Prev: Protected,  Up: Pseudo Ops
4574
 
4575
7.91 `.psize LINES , COLUMNS'
4576
=============================
4577
 
4578
Use this directive to declare the number of lines--and, optionally, the
4579
number of columns--to use for each page, when generating listings.
4580
 
4581
   If you do not use `.psize', listings use a default line-count of 60.
4582
You may omit the comma and COLUMNS specification; the default width is
4583
200 columns.
4584
 
4585
   `as' generates formfeeds whenever the specified number of lines is
4586
exceeded (or whenever you explicitly request one, using `.eject').
4587
 
4588
   If you specify LINES as `0', no formfeeds are generated save those
4589
explicitly specified with `.eject'.
4590
 
4591

4592
File: as.info,  Node: Purgem,  Next: PushSection,  Prev: Psize,  Up: Pseudo Ops
4593
 
4594
7.92 `.purgem NAME'
4595
===================
4596
 
4597
Undefine the macro NAME, so that later uses of the string will not be
4598
expanded.  *Note Macro::.
4599
 
4600

4601
File: as.info,  Node: PushSection,  Next: Quad,  Prev: Purgem,  Up: Pseudo Ops
4602
 
4603
7.93 `.pushsection NAME [, SUBSECTION] [, "FLAGS"[, @TYPE[,ARGUMENTS]]]'
4604
========================================================================
4605
 
4606
This is one of the ELF section stack manipulation directives.  The
4607
others are `.section' (*note Section::), `.subsection' (*note
4608
SubSection::), `.popsection' (*note PopSection::), and `.previous'
4609
(*note Previous::).
4610
 
4611
   This directive pushes the current section (and subsection) onto the
4612
top of the section stack, and then replaces the current section and
4613
subsection with `name' and `subsection'. The optional `flags', `type'
4614
and `arguments' are treated the same as in the `.section' (*note
4615
Section::) directive.
4616
 
4617

4618
File: as.info,  Node: Quad,  Next: Reloc,  Prev: PushSection,  Up: Pseudo Ops
4619
 
4620
7.94 `.quad BIGNUMS'
4621
====================
4622
 
4623
`.quad' expects zero or more bignums, separated by commas.  For each
4624
bignum, it emits an 8-byte integer.  If the bignum won't fit in 8
4625
bytes, it prints a warning message; and just takes the lowest order 8
4626
bytes of the bignum.
4627
 
4628
   The term "quad" comes from contexts in which a "word" is two bytes;
4629
hence _quad_-word for 8 bytes.
4630
 
4631

4632
File: as.info,  Node: Reloc,  Next: Rept,  Prev: Quad,  Up: Pseudo Ops
4633
 
4634
7.95 `.reloc OFFSET, RELOC_NAME[, EXPRESSION]'
4635
==============================================
4636
 
4637
Generate a relocation at OFFSET of type RELOC_NAME with value
4638
EXPRESSION.  If OFFSET is a number, the relocation is generated in the
4639
current section.  If OFFSET is an expression that resolves to a symbol
4640
plus offset, the relocation is generated in the given symbol's section.
4641
EXPRESSION, if present, must resolve to a symbol plus addend or to an
4642
absolute value, but note that not all targets support an addend.  e.g.
4643
ELF REL targets such as i386 store an addend in the section contents
4644
rather than in the relocation.  This low level interface does not
4645
support addends stored in the section.
4646
 
4647

4648
File: as.info,  Node: Rept,  Next: Sbttl,  Prev: Reloc,  Up: Pseudo Ops
4649
 
4650
7.96 `.rept COUNT'
4651
==================
4652
 
4653
Repeat the sequence of lines between the `.rept' directive and the next
4654
`.endr' directive COUNT times.
4655
 
4656
   For example, assembling
4657
 
4658
             .rept   3
4659
             .long   0
4660
             .endr
4661
 
4662
   is equivalent to assembling
4663
 
4664
             .long   0
4665
             .long   0
4666
             .long   0
4667
 
4668

4669
File: as.info,  Node: Sbttl,  Next: Scl,  Prev: Rept,  Up: Pseudo Ops
4670
 
4671
7.97 `.sbttl "SUBHEADING"'
4672
==========================
4673
 
4674
Use SUBHEADING as the title (third line, immediately after the title
4675
line) when generating assembly listings.
4676
 
4677
   This directive affects subsequent pages, as well as the current page
4678
if it appears within ten lines of the top of a page.
4679
 
4680

4681
File: as.info,  Node: Scl,  Next: Section,  Prev: Sbttl,  Up: Pseudo Ops
4682
 
4683
7.98 `.scl CLASS'
4684
=================
4685
 
4686
Set the storage-class value for a symbol.  This directive may only be
4687
used inside a `.def'/`.endef' pair.  Storage class may flag whether a
4688
symbol is static or external, or it may record further symbolic
4689
debugging information.
4690
 
4691

4692
File: as.info,  Node: Section,  Next: Set,  Prev: Scl,  Up: Pseudo Ops
4693
 
4694
7.99 `.section NAME'
4695
====================
4696
 
4697
Use the `.section' directive to assemble the following code into a
4698
section named NAME.
4699
 
4700
   This directive is only supported for targets that actually support
4701
arbitrarily named sections; on `a.out' targets, for example, it is not
4702
accepted, even with a standard `a.out' section name.
4703
 
4704
COFF Version
4705
------------
4706
 
4707
   For COFF targets, the `.section' directive is used in one of the
4708
following ways:
4709
 
4710
     .section NAME[, "FLAGS"]
4711
     .section NAME[, SUBSECTION]
4712
 
4713
   If the optional argument is quoted, it is taken as flags to use for
4714
the section.  Each flag is a single character.  The following flags are
4715
recognized:
4716
`b'
4717
     bss section (uninitialized data)
4718
 
4719
`n'
4720
     section is not loaded
4721
 
4722
`w'
4723
     writable section
4724
 
4725
`d'
4726
     data section
4727
 
4728
`e'
4729
     exclude section from linking
4730
 
4731
`r'
4732
     read-only section
4733
 
4734
`x'
4735
     executable section
4736
 
4737
`s'
4738
     shared section (meaningful for PE targets)
4739
 
4740
`a'
4741
     ignored.  (For compatibility with the ELF version)
4742
 
4743
`y'
4744
     section is not readable (meaningful for PE targets)
4745
 
4746
`0-9'
4747
     single-digit power-of-two section alignment (GNU extension)
4748
 
4749
   If no flags are specified, the default flags depend upon the section
4750
name.  If the section name is not recognized, the default will be for
4751
the section to be loaded and writable.  Note the `n' and `w' flags
4752
remove attributes from the section, rather than adding them, so if they
4753
are used on their own it will be as if no flags had been specified at
4754
all.
4755
 
4756
   If the optional argument to the `.section' directive is not quoted,
4757
it is taken as a subsection number (*note Sub-Sections::).
4758
 
4759
ELF Version
4760
-----------
4761
 
4762
   This is one of the ELF section stack manipulation directives.  The
4763
others are `.subsection' (*note SubSection::), `.pushsection' (*note
4764
PushSection::), `.popsection' (*note PopSection::), and `.previous'
4765
(*note Previous::).
4766
 
4767
   For ELF targets, the `.section' directive is used like this:
4768
 
4769
     .section NAME [, "FLAGS"[, @TYPE[,FLAG_SPECIFIC_ARGUMENTS]]]
4770
 
4771
   The optional FLAGS argument is a quoted string which may contain any
4772
combination of the following characters:
4773
`a'
4774
     section is allocatable
4775
 
4776
`e'
4777
     section is excluded from executable and shared library.
4778
 
4779
`w'
4780
     section is writable
4781
 
4782
`x'
4783
     section is executable
4784
 
4785
`M'
4786
     section is mergeable
4787
 
4788
`S'
4789
     section contains zero terminated strings
4790
 
4791
`G'
4792
     section is a member of a section group
4793
 
4794
`T'
4795
     section is used for thread-local-storage
4796
 
4797
`?'
4798
     section is a member of the previously-current section's group, if
4799
     any
4800
 
4801
   The optional TYPE argument may contain one of the following
4802
constants:
4803
`@progbits'
4804
     section contains data
4805
 
4806
`@nobits'
4807
     section does not contain data (i.e., section only occupies space)
4808
 
4809
`@note'
4810
     section contains data which is used by things other than the
4811
     program
4812
 
4813
`@init_array'
4814
     section contains an array of pointers to init functions
4815
 
4816
`@fini_array'
4817
     section contains an array of pointers to finish functions
4818
 
4819
`@preinit_array'
4820
     section contains an array of pointers to pre-init functions
4821
 
4822
   Many targets only support the first three section types.
4823
 
4824
   Note on targets where the `@' character is the start of a comment (eg
4825
ARM) then another character is used instead.  For example the ARM port
4826
uses the `%' character.
4827
 
4828
   If FLAGS contains the `M' symbol then the TYPE argument must be
4829
specified as well as an extra argument--ENTSIZE--like this:
4830
 
4831
     .section NAME , "FLAGS"M, @TYPE, ENTSIZE
4832
 
4833
   Sections with the `M' flag but not `S' flag must contain fixed size
4834
constants, each ENTSIZE octets long. Sections with both `M' and `S'
4835
must contain zero terminated strings where each character is ENTSIZE
4836
bytes long. The linker may remove duplicates within sections with the
4837
same name, same entity size and same flags.  ENTSIZE must be an
4838
absolute expression.  For sections with both `M' and `S', a string
4839
which is a suffix of a larger string is considered a duplicate.  Thus
4840
`"def"' will be merged with `"abcdef"';  A reference to the first
4841
`"def"' will be changed to a reference to `"abcdef"+3'.
4842
 
4843
   If FLAGS contains the `G' symbol then the TYPE argument must be
4844
present along with an additional field like this:
4845
 
4846
     .section NAME , "FLAGS"G, @TYPE, GROUPNAME[, LINKAGE]
4847
 
4848
   The GROUPNAME field specifies the name of the section group to which
4849
this particular section belongs.  The optional linkage field can
4850
contain:
4851
`comdat'
4852
     indicates that only one copy of this section should be retained
4853
 
4854
`.gnu.linkonce'
4855
     an alias for comdat
4856
 
4857
   Note: if both the M and G flags are present then the fields for the
4858
Merge flag should come first, like this:
4859
 
4860
     .section NAME , "FLAGS"MG, @TYPE, ENTSIZE, GROUPNAME[, LINKAGE]
4861
 
4862
   If FLAGS contains the `?' symbol then it may not also contain the
4863
`G' symbol and the GROUPNAME or LINKAGE fields should not be present.
4864
Instead, `?' says to consider the section that's current before this
4865
directive.  If that section used `G', then the new section will use `G'
4866
with those same GROUPNAME and LINKAGE fields implicitly.  If not, then
4867
the `?' symbol has no effect.
4868
 
4869
   If no flags are specified, the default flags depend upon the section
4870
name.  If the section name is not recognized, the default will be for
4871
the section to have none of the above flags: it will not be allocated
4872
in memory, nor writable, nor executable.  The section will contain data.
4873
 
4874
   For ELF targets, the assembler supports another type of `.section'
4875
directive for compatibility with the Solaris assembler:
4876
 
4877
     .section "NAME"[, FLAGS...]
4878
 
4879
   Note that the section name is quoted.  There may be a sequence of
4880
comma separated flags:
4881
`#alloc'
4882
     section is allocatable
4883
 
4884
`#write'
4885
     section is writable
4886
 
4887
`#execinstr'
4888
     section is executable
4889
 
4890
`#exclude'
4891
     section is excluded from executable and shared library.
4892
 
4893
`#tls'
4894
     section is used for thread local storage
4895
 
4896
   This directive replaces the current section and subsection.  See the
4897
contents of the gas testsuite directory `gas/testsuite/gas/elf' for
4898
some examples of how this directive and the other section stack
4899
directives work.
4900
 
4901

4902
File: as.info,  Node: Set,  Next: Short,  Prev: Section,  Up: Pseudo Ops
4903
 
4904
7.100 `.set SYMBOL, EXPRESSION'
4905
===============================
4906
 
4907
Set the value of SYMBOL to EXPRESSION.  This changes SYMBOL's value and
4908
type to conform to EXPRESSION.  If SYMBOL was flagged as external, it
4909
remains flagged (*note Symbol Attributes::).
4910
 
4911
   You may `.set' a symbol many times in the same assembly.
4912
 
4913
   If you `.set' a global symbol, the value stored in the object file
4914
is the last value stored into it.
4915
 
4916
   On Z80 `set' is a real instruction, use `SYMBOL defl EXPRESSION'
4917
instead.
4918
 
4919

4920
File: as.info,  Node: Short,  Next: Single,  Prev: Set,  Up: Pseudo Ops
4921
 
4922
7.101 `.short EXPRESSIONS'
4923
==========================
4924
 
4925
`.short' is normally the same as `.word'.  *Note `.word': Word.
4926
 
4927
   In some configurations, however, `.short' and `.word' generate
4928
numbers of different lengths.  *Note Machine Dependencies::.
4929
 
4930

4931
File: as.info,  Node: Single,  Next: Size,  Prev: Short,  Up: Pseudo Ops
4932
 
4933
7.102 `.single FLONUMS'
4934
=======================
4935
 
4936
This directive assembles zero or more flonums, separated by commas.  It
4937
has the same effect as `.float'.  The exact kind of floating point
4938
numbers emitted depends on how `as' is configured.  *Note Machine
4939
Dependencies::.
4940
 
4941

4942
File: as.info,  Node: Size,  Next: Skip,  Prev: Single,  Up: Pseudo Ops
4943
 
4944
7.103 `.size'
4945
=============
4946
 
4947
This directive is used to set the size associated with a symbol.
4948
 
4949
COFF Version
4950
------------
4951
 
4952
   For COFF targets, the `.size' directive is only permitted inside
4953
`.def'/`.endef' pairs.  It is used like this:
4954
 
4955
     .size EXPRESSION
4956
 
4957
ELF Version
4958
-----------
4959
 
4960
   For ELF targets, the `.size' directive is used like this:
4961
 
4962
     .size NAME , EXPRESSION
4963
 
4964
   This directive sets the size associated with a symbol NAME.  The
4965
size in bytes is computed from EXPRESSION which can make use of label
4966
arithmetic.  This directive is typically used to set the size of
4967
function symbols.
4968
 
4969

4970
File: as.info,  Node: Skip,  Next: Sleb128,  Prev: Size,  Up: Pseudo Ops
4971
 
4972
7.104 `.skip SIZE , FILL'
4973
=========================
4974
 
4975
This directive emits SIZE bytes, each of value FILL.  Both SIZE and
4976
FILL are absolute expressions.  If the comma and FILL are omitted, FILL
4977
is assumed to be zero.  This is the same as `.space'.
4978
 
4979

4980
File: as.info,  Node: Sleb128,  Next: Space,  Prev: Skip,  Up: Pseudo Ops
4981
 
4982
7.105 `.sleb128 EXPRESSIONS'
4983
============================
4984
 
4985
SLEB128 stands for "signed little endian base 128."  This is a compact,
4986
variable length representation of numbers used by the DWARF symbolic
4987
debugging format.  *Note `.uleb128': Uleb128.
4988
 
4989

4990
File: as.info,  Node: Space,  Next: Stab,  Prev: Sleb128,  Up: Pseudo Ops
4991
 
4992
7.106 `.space SIZE , FILL'
4993
==========================
4994
 
4995
This directive emits SIZE bytes, each of value FILL.  Both SIZE and
4996
FILL are absolute expressions.  If the comma and FILL are omitted, FILL
4997
is assumed to be zero.  This is the same as `.skip'.
4998
 
4999
     _Warning:_ `.space' has a completely different meaning for HPPA
5000
     targets; use `.block' as a substitute.  See `HP9000 Series 800
5001
     Assembly Language Reference Manual' (HP 92432-90001) for the
5002
     meaning of the `.space' directive.  *Note HPPA Assembler
5003
     Directives: HPPA Directives, for a summary.
5004
 
5005

5006
File: as.info,  Node: Stab,  Next: String,  Prev: Space,  Up: Pseudo Ops
5007
 
5008
7.107 `.stabd, .stabn, .stabs'
5009
==============================
5010
 
5011
There are three directives that begin `.stab'.  All emit symbols (*note
5012
Symbols::), for use by symbolic debuggers.  The symbols are not entered
5013
in the `as' hash table: they cannot be referenced elsewhere in the
5014
source file.  Up to five fields are required:
5015
 
5016
STRING
5017
     This is the symbol's name.  It may contain any character except
5018
     `\000', so is more general than ordinary symbol names.  Some
5019
     debuggers used to code arbitrarily complex structures into symbol
5020
     names using this field.
5021
 
5022
TYPE
5023
     An absolute expression.  The symbol's type is set to the low 8
5024
     bits of this expression.  Any bit pattern is permitted, but `ld'
5025
     and debuggers choke on silly bit patterns.
5026
 
5027
OTHER
5028
     An absolute expression.  The symbol's "other" attribute is set to
5029
     the low 8 bits of this expression.
5030
 
5031
DESC
5032
     An absolute expression.  The symbol's descriptor is set to the low
5033
     16 bits of this expression.
5034
 
5035
VALUE
5036
     An absolute expression which becomes the symbol's value.
5037
 
5038
   If a warning is detected while reading a `.stabd', `.stabn', or
5039
`.stabs' statement, the symbol has probably already been created; you
5040
get a half-formed symbol in your object file.  This is compatible with
5041
earlier assemblers!
5042
 
5043
`.stabd TYPE , OTHER , DESC'
5044
     The "name" of the symbol generated is not even an empty string.
5045
     It is a null pointer, for compatibility.  Older assemblers used a
5046
     null pointer so they didn't waste space in object files with empty
5047
     strings.
5048
 
5049
     The symbol's value is set to the location counter, relocatably.
5050
     When your program is linked, the value of this symbol is the
5051
     address of the location counter when the `.stabd' was assembled.
5052
 
5053
`.stabn TYPE , OTHER , DESC , VALUE'
5054
     The name of the symbol is set to the empty string `""'.
5055
 
5056
`.stabs STRING ,  TYPE , OTHER , DESC , VALUE'
5057
     All five fields are specified.
5058
 
5059

5060
File: as.info,  Node: String,  Next: Struct,  Prev: Stab,  Up: Pseudo Ops
5061
 
5062
7.108 `.string' "STR", `.string8' "STR", `.string16'
5063
====================================================
5064
 
5065
"STR", `.string32' "STR", `.string64' "STR"
5066
 
5067
   Copy the characters in STR to the object file.  You may specify more
5068
than one string to copy, separated by commas.  Unless otherwise
5069
specified for a particular machine, the assembler marks the end of each
5070
string with a 0 byte.  You can use any of the escape sequences
5071
described in *note Strings: Strings.
5072
 
5073
   The variants `string16', `string32' and `string64' differ from the
5074
`string' pseudo opcode in that each 8-bit character from STR is copied
5075
and expanded to 16, 32 or 64 bits respectively.  The expanded characters
5076
are stored in target endianness byte order.
5077
 
5078
   Example:
5079
        .string32 "BYE"
5080
     expands to:
5081
        .string   "B\0\0\0Y\0\0\0E\0\0\0"  /* On little endian targets.  */
5082
        .string   "\0\0\0B\0\0\0Y\0\0\0E"  /* On big endian targets.  */
5083
 
5084

5085
File: as.info,  Node: Struct,  Next: SubSection,  Prev: String,  Up: Pseudo Ops
5086
 
5087
7.109 `.struct EXPRESSION'
5088
==========================
5089
 
5090
Switch to the absolute section, and set the section offset to
5091
EXPRESSION, which must be an absolute expression.  You might use this
5092
as follows:
5093
             .struct 0
5094
     field1:
5095
             .struct field1 + 4
5096
     field2:
5097
             .struct field2 + 4
5098
     field3:
5099
   This would define the symbol `field1' to have the value 0, the symbol
5100
`field2' to have the value 4, and the symbol `field3' to have the value
5101
8.  Assembly would be left in the absolute section, and you would need
5102
to use a `.section' directive of some sort to change to some other
5103
section before further assembly.
5104
 
5105

5106
File: as.info,  Node: SubSection,  Next: Symver,  Prev: Struct,  Up: Pseudo Ops
5107
 
5108
7.110 `.subsection NAME'
5109
========================
5110
 
5111
This is one of the ELF section stack manipulation directives.  The
5112
others are `.section' (*note Section::), `.pushsection' (*note
5113
PushSection::), `.popsection' (*note PopSection::), and `.previous'
5114
(*note Previous::).
5115
 
5116
   This directive replaces the current subsection with `name'.  The
5117
current section is not changed.  The replaced subsection is put onto
5118
the section stack in place of the then current top of stack subsection.
5119
 
5120

5121
File: as.info,  Node: Symver,  Next: Tag,  Prev: SubSection,  Up: Pseudo Ops
5122
 
5123
7.111 `.symver'
5124
===============
5125
 
5126
Use the `.symver' directive to bind symbols to specific version nodes
5127
within a source file.  This is only supported on ELF platforms, and is
5128
typically used when assembling files to be linked into a shared library.
5129
There are cases where it may make sense to use this in objects to be
5130
bound into an application itself so as to override a versioned symbol
5131
from a shared library.
5132
 
5133
   For ELF targets, the `.symver' directive can be used like this:
5134
     .symver NAME, NAME2@NODENAME
5135
   If the symbol NAME is defined within the file being assembled, the
5136
`.symver' directive effectively creates a symbol alias with the name
5137
NAME2@NODENAME, and in fact the main reason that we just don't try and
5138
create a regular alias is that the @ character isn't permitted in
5139
symbol names.  The NAME2 part of the name is the actual name of the
5140
symbol by which it will be externally referenced.  The name NAME itself
5141
is merely a name of convenience that is used so that it is possible to
5142
have definitions for multiple versions of a function within a single
5143
source file, and so that the compiler can unambiguously know which
5144
version of a function is being mentioned.  The NODENAME portion of the
5145
alias should be the name of a node specified in the version script
5146
supplied to the linker when building a shared library.  If you are
5147
attempting to override a versioned symbol from a shared library, then
5148
NODENAME should correspond to the nodename of the symbol you are trying
5149
to override.
5150
 
5151
   If the symbol NAME is not defined within the file being assembled,
5152
all references to NAME will be changed to NAME2@NODENAME.  If no
5153
reference to NAME is made, NAME2@NODENAME will be removed from the
5154
symbol table.
5155
 
5156
   Another usage of the `.symver' directive is:
5157
     .symver NAME, NAME2@@NODENAME
5158
   In this case, the symbol NAME must exist and be defined within the
5159
file being assembled. It is similar to NAME2@NODENAME. The difference
5160
is NAME2@@NODENAME will also be used to resolve references to NAME2 by
5161
the linker.
5162
 
5163
   The third usage of the `.symver' directive is:
5164
     .symver NAME, NAME2@@@NODENAME
5165
   When NAME is not defined within the file being assembled, it is
5166
treated as NAME2@NODENAME. When NAME is defined within the file being
5167
assembled, the symbol name, NAME, will be changed to NAME2@@NODENAME.
5168
 
5169

5170
File: as.info,  Node: Tag,  Next: Text,  Prev: Symver,  Up: Pseudo Ops
5171
 
5172
7.112 `.tag STRUCTNAME'
5173
=======================
5174
 
5175
This directive is generated by compilers to include auxiliary debugging
5176
information in the symbol table.  It is only permitted inside
5177
`.def'/`.endef' pairs.  Tags are used to link structure definitions in
5178
the symbol table with instances of those structures.
5179
 
5180

5181
File: as.info,  Node: Text,  Next: Title,  Prev: Tag,  Up: Pseudo Ops
5182
 
5183
7.113 `.text SUBSECTION'
5184
========================
5185
 
5186
Tells `as' to assemble the following statements onto the end of the
5187
text subsection numbered SUBSECTION, which is an absolute expression.
5188
If SUBSECTION is omitted, subsection number zero is used.
5189
 
5190

5191
File: as.info,  Node: Title,  Next: Type,  Prev: Text,  Up: Pseudo Ops
5192
 
5193
7.114 `.title "HEADING"'
5194
========================
5195
 
5196
Use HEADING as the title (second line, immediately after the source
5197
file name and pagenumber) when generating assembly listings.
5198
 
5199
   This directive affects subsequent pages, as well as the current page
5200
if it appears within ten lines of the top of a page.
5201
 
5202

5203
File: as.info,  Node: Type,  Next: Uleb128,  Prev: Title,  Up: Pseudo Ops
5204
 
5205
7.115 `.type'
5206
=============
5207
 
5208
This directive is used to set the type of a symbol.
5209
 
5210
COFF Version
5211
------------
5212
 
5213
   For COFF targets, this directive is permitted only within
5214
`.def'/`.endef' pairs.  It is used like this:
5215
 
5216
     .type INT
5217
 
5218
   This records the integer INT as the type attribute of a symbol table
5219
entry.
5220
 
5221
ELF Version
5222
-----------
5223
 
5224
   For ELF targets, the `.type' directive is used like this:
5225
 
5226
     .type NAME , TYPE DESCRIPTION
5227
 
5228
   This sets the type of symbol NAME to be either a function symbol or
5229
an object symbol.  There are five different syntaxes supported for the
5230
TYPE DESCRIPTION field, in order to provide compatibility with various
5231
other assemblers.
5232
 
5233
   Because some of the characters used in these syntaxes (such as `@'
5234
and `#') are comment characters for some architectures, some of the
5235
syntaxes below do not work on all architectures.  The first variant
5236
will be accepted by the GNU assembler on all architectures so that
5237
variant should be used for maximum portability, if you do not need to
5238
assemble your code with other assemblers.
5239
 
5240
   The syntaxes supported are:
5241
 
5242
       .type  STT_
5243
       .type ,#
5244
       .type ,@
5245
       .type ,%
5246
       .type ,""
5247
 
5248
   The types supported are:
5249
 
5250
`STT_FUNC'
5251
`function'
5252
     Mark the symbol as being a function name.
5253
 
5254
`STT_GNU_IFUNC'
5255
`gnu_indirect_function'
5256
     Mark the symbol as an indirect function when evaluated during reloc
5257
     processing.  (This is only supported on assemblers targeting GNU
5258
     systems).
5259
 
5260
`STT_OBJECT'
5261
`object'
5262
     Mark the symbol as being a data object.
5263
 
5264
`STT_TLS'
5265
`tls_object'
5266
     Mark the symbol as being a thead-local data object.
5267
 
5268
`STT_COMMON'
5269
`common'
5270
     Mark the symbol as being a common data object.
5271
 
5272
`STT_NOTYPE'
5273
`notype'
5274
     Does not mark the symbol in any way.  It is supported just for
5275
     completeness.
5276
 
5277
`gnu_unique_object'
5278
     Marks the symbol as being a globally unique data object.  The
5279
     dynamic linker will make sure that in the entire process there is
5280
     just one symbol with this name and type in use.  (This is only
5281
     supported on assemblers targeting GNU systems).
5282
 
5283
 
5284
   Note: Some targets support extra types in addition to those listed
5285
above.
5286
 
5287

5288
File: as.info,  Node: Uleb128,  Next: Val,  Prev: Type,  Up: Pseudo Ops
5289
 
5290
7.116 `.uleb128 EXPRESSIONS'
5291
============================
5292
 
5293
ULEB128 stands for "unsigned little endian base 128."  This is a
5294
compact, variable length representation of numbers used by the DWARF
5295
symbolic debugging format.  *Note `.sleb128': Sleb128.
5296
 
5297

5298
File: as.info,  Node: Val,  Next: Version,  Prev: Uleb128,  Up: Pseudo Ops
5299
 
5300
7.117 `.val ADDR'
5301
=================
5302
 
5303
This directive, permitted only within `.def'/`.endef' pairs, records
5304
the address ADDR as the value attribute of a symbol table entry.
5305
 
5306

5307
File: as.info,  Node: Version,  Next: VTableEntry,  Prev: Val,  Up: Pseudo Ops
5308
 
5309
7.118 `.version "STRING"'
5310
=========================
5311
 
5312
This directive creates a `.note' section and places into it an ELF
5313
formatted note of type NT_VERSION.  The note's name is set to `string'.
5314
 
5315

5316
File: as.info,  Node: VTableEntry,  Next: VTableInherit,  Prev: Version,  Up: Pseudo Ops
5317
 
5318
7.119 `.vtable_entry TABLE, OFFSET'
5319
===================================
5320
 
5321
This directive finds or creates a symbol `table' and creates a
5322
`VTABLE_ENTRY' relocation for it with an addend of `offset'.
5323
 
5324

5325
File: as.info,  Node: VTableInherit,  Next: Warning,  Prev: VTableEntry,  Up: Pseudo Ops
5326
 
5327
7.120 `.vtable_inherit CHILD, PARENT'
5328
=====================================
5329
 
5330
This directive finds the symbol `child' and finds or creates the symbol
5331
`parent' and then creates a `VTABLE_INHERIT' relocation for the parent
5332
whose addend is the value of the child symbol.  As a special case the
5333
parent name of `0' is treated as referring to the `*ABS*' section.
5334
 
5335

5336
File: as.info,  Node: Warning,  Next: Weak,  Prev: VTableInherit,  Up: Pseudo Ops
5337
 
5338
7.121 `.warning "STRING"'
5339
=========================
5340
 
5341
Similar to the directive `.error' (*note `.error "STRING"': Error.),
5342
but just emits a warning.
5343
 
5344

5345
File: as.info,  Node: Weak,  Next: Weakref,  Prev: Warning,  Up: Pseudo Ops
5346
 
5347
7.122 `.weak NAMES'
5348
===================
5349
 
5350
This directive sets the weak attribute on the comma separated list of
5351
symbol `names'.  If the symbols do not already exist, they will be
5352
created.
5353
 
5354
   On COFF targets other than PE, weak symbols are a GNU extension.
5355
This directive sets the weak attribute on the comma separated list of
5356
symbol `names'.  If the symbols do not already exist, they will be
5357
created.
5358
 
5359
   On the PE target, weak symbols are supported natively as weak
5360
aliases.  When a weak symbol is created that is not an alias, GAS
5361
creates an alternate symbol to hold the default value.
5362
 
5363

5364
File: as.info,  Node: Weakref,  Next: Word,  Prev: Weak,  Up: Pseudo Ops
5365
 
5366
7.123 `.weakref ALIAS, TARGET'
5367
==============================
5368
 
5369
This directive creates an alias to the target symbol that enables the
5370
symbol to be referenced with weak-symbol semantics, but without
5371
actually making it weak.  If direct references or definitions of the
5372
symbol are present, then the symbol will not be weak, but if all
5373
references to it are through weak references, the symbol will be marked
5374
as weak in the symbol table.
5375
 
5376
   The effect is equivalent to moving all references to the alias to a
5377
separate assembly source file, renaming the alias to the symbol in it,
5378
declaring the symbol as weak there, and running a reloadable link to
5379
merge the object files resulting from the assembly of the new source
5380
file and the old source file that had the references to the alias
5381
removed.
5382
 
5383
   The alias itself never makes to the symbol table, and is entirely
5384
handled within the assembler.
5385
 
5386

5387
File: as.info,  Node: Word,  Next: Deprecated,  Prev: Weakref,  Up: Pseudo Ops
5388
 
5389
7.124 `.word EXPRESSIONS'
5390
=========================
5391
 
5392
This directive expects zero or more EXPRESSIONS, of any section,
5393
separated by commas.
5394
 
5395
   The size of the number emitted, and its byte order, depend on what
5396
target computer the assembly is for.
5397
 
5398
     _Warning: Special Treatment to support Compilers_
5399
 
5400
   Machines with a 32-bit address space, but that do less than 32-bit
5401
addressing, require the following special treatment.  If the machine of
5402
interest to you does 32-bit addressing (or doesn't require it; *note
5403
Machine Dependencies::), you can ignore this issue.
5404
 
5405
   In order to assemble compiler output into something that works, `as'
5406
occasionally does strange things to `.word' directives.  Directives of
5407
the form `.word sym1-sym2' are often emitted by compilers as part of
5408
jump tables.  Therefore, when `as' assembles a directive of the form
5409
`.word sym1-sym2', and the difference between `sym1' and `sym2' does
5410
not fit in 16 bits, `as' creates a "secondary jump table", immediately
5411
before the next label.  This secondary jump table is preceded by a
5412
short-jump to the first byte after the secondary table.  This
5413
short-jump prevents the flow of control from accidentally falling into
5414
the new table.  Inside the table is a long-jump to `sym2'.  The
5415
original `.word' contains `sym1' minus the address of the long-jump to
5416
`sym2'.
5417
 
5418
   If there were several occurrences of `.word sym1-sym2' before the
5419
secondary jump table, all of them are adjusted.  If there was a `.word
5420
sym3-sym4', that also did not fit in sixteen bits, a long-jump to
5421
`sym4' is included in the secondary jump table, and the `.word'
5422
directives are adjusted to contain `sym3' minus the address of the
5423
long-jump to `sym4'; and so on, for as many entries in the original
5424
jump table as necessary.
5425
 
5426

5427
File: as.info,  Node: Deprecated,  Prev: Word,  Up: Pseudo Ops
5428
 
5429
7.125 Deprecated Directives
5430
===========================
5431
 
5432
One day these directives won't work.  They are included for
5433
compatibility with older assemblers.
5434
.abort
5435
 
5436
.line
5437
 
5438

5439
File: as.info,  Node: Object Attributes,  Next: Machine Dependencies,  Prev: Pseudo Ops,  Up: Top
5440
 
5441
8 Object Attributes
5442
*******************
5443
 
5444
`as' assembles source files written for a specific architecture into
5445
object files for that architecture.  But not all object files are alike.
5446
Many architectures support incompatible variations.  For instance,
5447
floating point arguments might be passed in floating point registers if
5448
the object file requires hardware floating point support--or floating
5449
point arguments might be passed in integer registers if the object file
5450
supports processors with no hardware floating point unit.  Or, if two
5451
objects are built for different generations of the same architecture,
5452
the combination may require the newer generation at run-time.
5453
 
5454
   This information is useful during and after linking.  At link time,
5455
`ld' can warn about incompatible object files.  After link time, tools
5456
like `gdb' can use it to process the linked file correctly.
5457
 
5458
   Compatibility information is recorded as a series of object
5459
attributes.  Each attribute has a "vendor", "tag", and "value".  The
5460
vendor is a string, and indicates who sets the meaning of the tag.  The
5461
tag is an integer, and indicates what property the attribute describes.
5462
The value may be a string or an integer, and indicates how the property
5463
affects this object.  Missing attributes are the same as attributes
5464
with a zero value or empty string value.
5465
 
5466
   Object attributes were developed as part of the ABI for the ARM
5467
Architecture.  The file format is documented in `ELF for the ARM
5468
Architecture'.
5469
 
5470
* Menu:
5471
 
5472
* GNU Object Attributes::               GNU Object Attributes
5473
* Defining New Object Attributes::      Defining New Object Attributes
5474
 
5475

5476
File: as.info,  Node: GNU Object Attributes,  Next: Defining New Object Attributes,  Up: Object Attributes
5477
 
5478
8.1 GNU Object Attributes
5479
=========================
5480
 
5481
The `.gnu_attribute' directive records an object attribute with vendor
5482
`gnu'.
5483
 
5484
   Except for `Tag_compatibility', which has both an integer and a
5485
string for its value, GNU attributes have a string value if the tag
5486
number is odd and an integer value if the tag number is even.  The
5487
second bit (`TAG & 2' is set for architecture-independent attributes
5488
and clear for architecture-dependent ones.
5489
 
5490
8.1.1 Common GNU attributes
5491
---------------------------
5492
 
5493
These attributes are valid on all architectures.
5494
 
5495
Tag_compatibility (32)
5496
     The compatibility attribute takes an integer flag value and a
5497
     vendor name.  If the flag value is 0, the file is compatible with
5498
     other toolchains.  If it is 1, then the file is only compatible
5499
     with the named toolchain.  If it is greater than 1, the file can
5500
     only be processed by other toolchains under some private
5501
     arrangement indicated by the flag value and the vendor name.
5502
 
5503
8.1.2 MIPS Attributes
5504
---------------------
5505
 
5506
Tag_GNU_MIPS_ABI_FP (4)
5507
     The floating-point ABI used by this object file.  The value will
5508
     be:
5509
 
5510
        * 0 for files not affected by the floating-point ABI.
5511
 
5512
        * 1 for files using the hardware floating-point with a standard
5513
          double-precision FPU.
5514
 
5515
        * 2 for files using the hardware floating-point ABI with a
5516
          single-precision FPU.
5517
 
5518
        * 3 for files using the software floating-point ABI.
5519
 
5520
        * 4 for files using the hardware floating-point ABI with 64-bit
5521
          wide double-precision floating-point registers and 32-bit
5522
          wide general purpose registers.
5523
 
5524
8.1.3 PowerPC Attributes
5525
------------------------
5526
 
5527
Tag_GNU_Power_ABI_FP (4)
5528
     The floating-point ABI used by this object file.  The value will
5529
     be:
5530
 
5531
        * 0 for files not affected by the floating-point ABI.
5532
 
5533
        * 1 for files using double-precision hardware floating-point
5534
          ABI.
5535
 
5536
        * 2 for files using the software floating-point ABI.
5537
 
5538
        * 3 for files using single-precision hardware floating-point
5539
          ABI.
5540
 
5541
Tag_GNU_Power_ABI_Vector (8)
5542
     The vector ABI used by this object file.  The value will be:
5543
 
5544
        * 0 for files not affected by the vector ABI.
5545
 
5546
        * 1 for files using general purpose registers to pass vectors.
5547
 
5548
        * 2 for files using AltiVec registers to pass vectors.
5549
 
5550
        * 3 for files using SPE registers to pass vectors.
5551
 
5552

5553
File: as.info,  Node: Defining New Object Attributes,  Prev: GNU Object Attributes,  Up: Object Attributes
5554
 
5555
8.2 Defining New Object Attributes
5556
==================================
5557
 
5558
If you want to define a new GNU object attribute, here are the places
5559
you will need to modify.  New attributes should be discussed on the
5560
`binutils' mailing list.
5561
 
5562
   * This manual, which is the official register of attributes.
5563
 
5564
   * The header for your architecture `include/elf', to define the tag.
5565
 
5566
   * The `bfd' support file for your architecture, to merge the
5567
     attribute and issue any appropriate link warnings.
5568
 
5569
   * Test cases in `ld/testsuite' for merging and link warnings.
5570
 
5571
   * `binutils/readelf.c' to display your attribute.
5572
 
5573
   * GCC, if you want the compiler to mark the attribute automatically.
5574
 
5575

5576
File: as.info,  Node: Machine Dependencies,  Next: Reporting Bugs,  Prev: Object Attributes,  Up: Top
5577
 
5578
9 Machine Dependent Features
5579
****************************
5580
 
5581
The machine instruction sets are (almost by definition) different on
5582
each machine where `as' runs.  Floating point representations vary as
5583
well, and `as' often supports a few additional directives or
5584
command-line options for compatibility with other assemblers on a
5585
particular platform.  Finally, some versions of `as' support special
5586
pseudo-instructions for branch optimization.
5587
 
5588
   This chapter discusses most of these differences, though it does not
5589
include details on any machine's instruction set.  For details on that
5590
subject, see the hardware manufacturer's manual.
5591
 
5592
* Menu:
5593
 
5594
 
5595
* AArch64-Dependent::           AArch64 Dependent Features
5596
 
5597
* Alpha-Dependent::             Alpha Dependent Features
5598
 
5599
* ARC-Dependent::               ARC Dependent Features
5600
 
5601
* ARM-Dependent::               ARM Dependent Features
5602
 
5603
* AVR-Dependent::               AVR Dependent Features
5604
 
5605
* Blackfin-Dependent::          Blackfin Dependent Features
5606
 
5607
* CR16-Dependent::              CR16 Dependent Features
5608
 
5609
* CRIS-Dependent::              CRIS Dependent Features
5610
 
5611
* D10V-Dependent::              D10V Dependent Features
5612
 
5613
* D30V-Dependent::              D30V Dependent Features
5614
 
5615
* Epiphany-Dependent::          EPIPHANY Dependent Features
5616
 
5617
* H8/300-Dependent::            Renesas H8/300 Dependent Features
5618
 
5619
* HPPA-Dependent::              HPPA Dependent Features
5620
 
5621
* ESA/390-Dependent::           IBM ESA/390 Dependent Features
5622
 
5623
* i386-Dependent::              Intel 80386 and AMD x86-64 Dependent Features
5624
 
5625
* i860-Dependent::              Intel 80860 Dependent Features
5626
 
5627
* i960-Dependent::              Intel 80960 Dependent Features
5628
 
5629
* IA-64-Dependent::             Intel IA-64 Dependent Features
5630
 
5631
* IP2K-Dependent::              IP2K Dependent Features
5632
 
5633
* LM32-Dependent::              LM32 Dependent Features
5634
 
5635
* M32C-Dependent::              M32C Dependent Features
5636
 
5637
* M32R-Dependent::              M32R Dependent Features
5638
 
5639
* M68K-Dependent::              M680x0 Dependent Features
5640
 
5641
* M68HC11-Dependent::           M68HC11 and 68HC12 Dependent Features
5642
 
5643
* MicroBlaze-Dependent::        MICROBLAZE Dependent Features
5644
 
5645
* MIPS-Dependent::              MIPS Dependent Features
5646
 
5647
* MMIX-Dependent::              MMIX Dependent Features
5648
 
5649
* MSP430-Dependent::            MSP430 Dependent Features
5650
 
5651
* NS32K-Dependent::             NS32K Dependent Features
5652
 
5653
* SH-Dependent::                Renesas / SuperH SH Dependent Features
5654
* SH64-Dependent::              SuperH SH64 Dependent Features
5655
 
5656
* PDP-11-Dependent::            PDP-11 Dependent Features
5657
 
5658
* PJ-Dependent::                picoJava Dependent Features
5659
 
5660
* PPC-Dependent::               PowerPC Dependent Features
5661
 
5662
* RL78-Dependent::              RL78 Dependent Features
5663
 
5664
* RX-Dependent::                RX Dependent Features
5665
 
5666
* S/390-Dependent::             IBM S/390 Dependent Features
5667
 
5668
* SCORE-Dependent::             SCORE Dependent Features
5669
 
5670
* Sparc-Dependent::             SPARC Dependent Features
5671
 
5672
* TIC54X-Dependent::            TI TMS320C54x Dependent Features
5673
 
5674
* TIC6X-Dependent ::            TI TMS320C6x Dependent Features
5675
 
5676
* TILE-Gx-Dependent ::          Tilera TILE-Gx Dependent Features
5677
 
5678
* TILEPro-Dependent ::          Tilera TILEPro Dependent Features
5679
 
5680
* V850-Dependent::              V850 Dependent Features
5681
 
5682
* XGATE-Dependent::             XGATE Features
5683
 
5684
* XSTORMY16-Dependent::         XStormy16 Dependent Features
5685
 
5686
* Xtensa-Dependent::            Xtensa Dependent Features
5687
 
5688
* Z80-Dependent::               Z80 Dependent Features
5689
 
5690
* Z8000-Dependent::             Z8000 Dependent Features
5691
 
5692
* Vax-Dependent::               VAX Dependent Features
5693
 
5694

5695
File: as.info,  Node: AArch64-Dependent,  Next: Alpha-Dependent,  Up: Machine Dependencies
5696
 
5697
9.1 AArch64 Dependent Features
5698
==============================
5699
 
5700
* Menu:
5701
 
5702
* AArch64 Options::              Options
5703
* AArch64 Syntax::               Syntax
5704
* AArch64 Floating Point::       Floating Point
5705
* AArch64 Directives::           AArch64 Machine Directives
5706
* AArch64 Opcodes::              Opcodes
5707
* AArch64 Mapping Symbols::      Mapping Symbols
5708
 
5709

5710
File: as.info,  Node: AArch64 Options,  Next: AArch64 Syntax,  Up: AArch64-Dependent
5711
 
5712
9.1.1 Options
5713
-------------
5714
 
5715
`-EB'
5716
     This option specifies that the output generated by the assembler
5717
     should be marked as being encoded for a big-endian processor.
5718
 
5719
`-EL'
5720
     This option specifies that the output generated by the assembler
5721
     should be marked as being encoded for a little-endian processor.
5722
 
5723
 
5724

5725
File: as.info,  Node: AArch64 Syntax,  Next: AArch64 Floating Point,  Prev: AArch64 Options,  Up: AArch64-Dependent
5726
 
5727
9.1.2 Syntax
5728
------------
5729
 
5730
* Menu:
5731
 
5732
* AArch64-Chars::                Special Characters
5733
* AArch64-Regs::                 Register Names
5734
* AArch64-Relocations::      Relocations
5735
 
5736

5737
File: as.info,  Node: AArch64-Chars,  Next: AArch64-Regs,  Up: AArch64 Syntax
5738
 
5739
9.1.2.1 Special Characters
5740
..........................
5741
 
5742
The presence of a `//' on a line indicates the start of a comment that
5743
extends to the end of the current line.  If a `#' appears as the first
5744
character of a line, the whole line is treated as a comment.
5745
 
5746
   The `;' character can be used instead of a newline to separate
5747
statements.
5748
 
5749
   The `#' can be optionally used to indicate immediate operands.
5750
 
5751

5752
File: as.info,  Node: AArch64-Regs,  Next: AArch64-Relocations,  Prev: AArch64-Chars,  Up: AArch64 Syntax
5753
 
5754
9.1.2.2 Register Names
5755
......................
5756
 
5757
Please refer to the section `4.4 Register Names' of `ARMv8 Instruction
5758
Set Overview', which is available at `http://infocenter.arm.com'.
5759
 
5760

5761
File: as.info,  Node: AArch64-Relocations,  Prev: AArch64-Regs,  Up: AArch64 Syntax
5762
 
5763
9.1.2.3 Relocations
5764
...................
5765
 
5766
Relocations for `MOVZ' and `MOVK' instructions can be generated by
5767
prefixing the label with `#:abs_g2:' etc.  For example to load the
5768
48-bit absolute address of FOO into x0:
5769
 
5770
             movz x0, #:abs_g2:foo              // bits 32-47, overflow check
5771
             movk x0, #:abs_g1_nc:foo   // bits 16-31, no overflow check
5772
             movk x0, #:abs_g0_nc:foo   // bits  0-15, no overflow check
5773
 
5774
   Relocations for `ADRP', and `ADD', `LDR' or `STR' instructions can
5775
be generated by prefixing the label with `#:pg_hi21:' and `#:lo12:'
5776
respectively.
5777
 
5778
   For example to use 33-bit (+/-4GB) pc-relative addressing to load
5779
the address of FOO into x0:
5780
 
5781
             adrp x0, #:pg_hi21:foo
5782
             add  x0, x0, #:lo12:foo
5783
 
5784
   Or to load the value of FOO into x0:
5785
 
5786
             adrp x0, #:pg_hi21:foo
5787
             ldr  x0, [x0, #:lo12:foo]
5788
 
5789
   Note that `#:pg_hi21:' is optional.
5790
 
5791
             adrp x0, foo
5792
 
5793
   is equivalent to
5794
 
5795
             adrp x0, #:pg_hi21:foo
5796
 
5797

5798
File: as.info,  Node: AArch64 Floating Point,  Next: AArch64 Directives,  Prev: AArch64 Syntax,  Up: AArch64-Dependent
5799
 
5800
9.1.3 Floating Point
5801
--------------------
5802
 
5803
The AArch64 architecture uses IEEE floating-point numbers.
5804
 
5805

5806
File: as.info,  Node: AArch64 Directives,  Next: AArch64 Opcodes,  Prev: AArch64 Floating Point,  Up: AArch64-Dependent
5807
 
5808
9.1.4 AArch64 Machine Directives
5809
--------------------------------
5810
 
5811
`.bss'
5812
     This directive switches to the `.bss' section.
5813
 
5814
`.ltorg'
5815
     This directive causes the current contents of the literal pool to
5816
     be dumped into the current section (which is assumed to be the
5817
     .text section) at the current location (aligned to a word
5818
     boundary).  `GAS' maintains a separate literal pool for each
5819
     section and each sub-section.  The `.ltorg' directive will only
5820
     affect the literal pool of the current section and sub-section.
5821
     At the end of assembly all remaining, un-empty literal pools will
5822
     automatically be dumped.
5823
 
5824
     Note - older versions of `GAS' would dump the current literal pool
5825
     any time a section change occurred.  This is no longer done, since
5826
     it prevents accurate control of the placement of literal pools.
5827
 
5828
`.pool'
5829
     This is a synonym for .ltorg.
5830
 
5831
`NAME .req REGISTER NAME'
5832
     This creates an alias for REGISTER NAME called NAME.  For example:
5833
 
5834
                  foo .req w0
5835
 
5836
`.unreq ALIAS-NAME'
5837
     This undefines a register alias which was previously defined using
5838
     the `req' directive.  For example:
5839
 
5840
                  foo .req w0
5841
                  .unreq foo
5842
 
5843
     An error occurs if the name is undefined.  Note - this pseudo op
5844
     can be used to delete builtin in register name aliases (eg 'w0').
5845
     This should only be done if it is really necessary.
5846
 
5847
 
5848

5849
File: as.info,  Node: AArch64 Opcodes,  Next: AArch64 Mapping Symbols,  Prev: AArch64 Directives,  Up: AArch64-Dependent
5850
 
5851
9.1.5 Opcodes
5852
-------------
5853
 
5854
`as' implements all the standard AArch64 opcodes.  It also implements
5855
several pseudo opcodes, including several synthetic load instructions.
5856
 
5857
`LDR ='
5858
            ldr  , =
5859
 
5860
     The constant expression will be placed into the nearest literal
5861
     pool (if it not already there) and a PC-relative LDR instruction
5862
     will be generated.
5863
 
5864
 
5865
   For more information on the AArch64 instruction set and assembly
5866
language notation, see `ARMv8 Instruction Set Overview' available at
5867
`http://infocenter.arm.com'.
5868
 
5869

5870
File: as.info,  Node: AArch64 Mapping Symbols,  Prev: AArch64 Opcodes,  Up: AArch64-Dependent
5871
 
5872
9.1.6 Mapping Symbols
5873
---------------------
5874
 
5875
The AArch64 ELF specification requires that special symbols be inserted
5876
into object files to mark certain features:
5877
 
5878
`$x'
5879
     At the start of a region of code containing AArch64 instructions.
5880
 
5881
`$d'
5882
     At the start of a region of data.
5883
 
5884
 
5885

5886
File: as.info,  Node: Alpha-Dependent,  Next: ARC-Dependent,  Prev: AArch64-Dependent,  Up: Machine Dependencies
5887
 
5888
9.2 Alpha Dependent Features
5889
============================
5890
 
5891
* Menu:
5892
 
5893
* Alpha Notes::                Notes
5894
* Alpha Options::              Options
5895
* Alpha Syntax::               Syntax
5896
* Alpha Floating Point::       Floating Point
5897
* Alpha Directives::           Alpha Machine Directives
5898
* Alpha Opcodes::              Opcodes
5899
 
5900

5901
File: as.info,  Node: Alpha Notes,  Next: Alpha Options,  Up: Alpha-Dependent
5902
 
5903
9.2.1 Notes
5904
-----------
5905
 
5906
The documentation here is primarily for the ELF object format.  `as'
5907
also supports the ECOFF and EVAX formats, but features specific to
5908
these formats are not yet documented.
5909
 
5910

5911
File: as.info,  Node: Alpha Options,  Next: Alpha Syntax,  Prev: Alpha Notes,  Up: Alpha-Dependent
5912
 
5913
9.2.2 Options
5914
-------------
5915
 
5916
`-mCPU'
5917
     This option specifies the target processor.  If an attempt is made
5918
     to assemble an instruction which will not execute on the target
5919
     processor, the assembler may either expand the instruction as a
5920
     macro or issue an error message.  This option is equivalent to the
5921
     `.arch' directive.
5922
 
5923
     The following processor names are recognized: `21064', `21064a',
5924
     `21066', `21068', `21164', `21164a', `21164pc', `21264', `21264a',
5925
     `21264b', `ev4', `ev5', `lca45', `ev5', `ev56', `pca56', `ev6',
5926
     `ev67', `ev68'.  The special name `all' may be used to allow the
5927
     assembler to accept instructions valid for any Alpha processor.
5928
 
5929
     In order to support existing practice in OSF/1 with respect to
5930
     `.arch', and existing practice within `MILO' (the Linux ARC
5931
     bootloader), the numbered processor names (e.g. 21064) enable the
5932
     processor-specific PALcode instructions, while the
5933
     "electro-vlasic" names (e.g. `ev4') do not.
5934
 
5935
`-mdebug'
5936
`-no-mdebug'
5937
     Enables or disables the generation of `.mdebug' encapsulation for
5938
     stabs directives and procedure descriptors.  The default is to
5939
     automatically enable `.mdebug' when the first stabs directive is
5940
     seen.
5941
 
5942
`-relax'
5943
     This option forces all relocations to be put into the object file,
5944
     instead of saving space and resolving some relocations at assembly
5945
     time.  Note that this option does not propagate all symbol
5946
     arithmetic into the object file, because not all symbol arithmetic
5947
     can be represented.  However, the option can still be useful in
5948
     specific applications.
5949
 
5950
`-replace'
5951
`-noreplace'
5952
     Enables or disables the optimization of procedure calls, both at
5953
     assemblage and at link time.  These options are only available for
5954
     VMS targets and `-replace' is the default.  See section 1.4.1 of
5955
     the OpenVMS Linker Utility Manual.
5956
 
5957
`-g'
5958
     This option is used when the compiler generates debug information.
5959
     When `gcc' is using `mips-tfile' to generate debug information for
5960
     ECOFF, local labels must be passed through to the object file.
5961
     Otherwise this option has no effect.
5962
 
5963
`-GSIZE'
5964
     A local common symbol larger than SIZE is placed in `.bss', while
5965
     smaller symbols are placed in `.sbss'.
5966
 
5967
`-F'
5968
`-32addr'
5969
     These options are ignored for backward compatibility.
5970
 
5971

5972
File: as.info,  Node: Alpha Syntax,  Next: Alpha Floating Point,  Prev: Alpha Options,  Up: Alpha-Dependent
5973
 
5974
9.2.3 Syntax
5975
------------
5976
 
5977
The assembler syntax closely follow the Alpha Reference Manual;
5978
assembler directives and general syntax closely follow the OSF/1 and
5979
OpenVMS syntax, with a few differences for ELF.
5980
 
5981
* Menu:
5982
 
5983
* Alpha-Chars::                Special Characters
5984
* Alpha-Regs::                 Register Names
5985
* Alpha-Relocs::               Relocations
5986
 
5987

5988
File: as.info,  Node: Alpha-Chars,  Next: Alpha-Regs,  Up: Alpha Syntax
5989
 
5990
9.2.3.1 Special Characters
5991
..........................
5992
 
5993
`#' is the line comment character.  Note that if `#' is the first
5994
character on a line then it can also be a logical line number directive
5995
(*note Comments::) or a preprocessor control command (*note
5996
Preprocessing::).
5997
 
5998
   `;' can be used instead of a newline to separate statements.
5999
 
6000

6001
File: as.info,  Node: Alpha-Regs,  Next: Alpha-Relocs,  Prev: Alpha-Chars,  Up: Alpha Syntax
6002
 
6003
9.2.3.2 Register Names
6004
......................
6005
 
6006
The 32 integer registers are referred to as `$N' or `$rN'.  In
6007
addition, registers 15, 28, 29, and 30 may be referred to by the
6008
symbols `$fp', `$at', `$gp', and `$sp' respectively.
6009
 
6010
   The 32 floating-point registers are referred to as `$fN'.
6011
 
6012

6013
File: as.info,  Node: Alpha-Relocs,  Prev: Alpha-Regs,  Up: Alpha Syntax
6014
 
6015
9.2.3.3 Relocations
6016
...................
6017
 
6018
Some of these relocations are available for ECOFF, but mostly only for
6019
ELF.  They are modeled after the relocation format introduced in
6020
Digital Unix 4.0, but there are additions.
6021
 
6022
   The format is `!TAG' or `!TAG!NUMBER' where TAG is the name of the
6023
relocation.  In some cases NUMBER is used to relate specific
6024
instructions.
6025
 
6026
   The relocation is placed at the end of the instruction like so:
6027
 
6028
     ldah  $0,a($29)    !gprelhigh
6029
     lda   $0,a($0)     !gprellow
6030
     ldq   $1,b($29)    !literal!100
6031
     ldl   $2,0($1)     !lituse_base!100
6032
 
6033
`!literal'
6034
`!literal!N'
6035
     Used with an `ldq' instruction to load the address of a symbol
6036
     from the GOT.
6037
 
6038
     A sequence number N is optional, and if present is used to pair
6039
     `lituse' relocations with this `literal' relocation.  The `lituse'
6040
     relocations are used by the linker to optimize the code based on
6041
     the final location of the symbol.
6042
 
6043
     Note that these optimizations are dependent on the data flow of the
6044
     program.  Therefore, if _any_ `lituse' is paired with a `literal'
6045
     relocation, then _all_ uses of the register set by the `literal'
6046
     instruction must also be marked with `lituse' relocations.  This
6047
     is because the original `literal' instruction may be deleted or
6048
     transformed into another instruction.
6049
 
6050
     Also note that there may be a one-to-many relationship between
6051
     `literal' and `lituse', but not a many-to-one.  That is, if there
6052
     are two code paths that load up the same address and feed the
6053
     value to a single use, then the use may not use a `lituse'
6054
     relocation.
6055
 
6056
`!lituse_base!N'
6057
     Used with any memory format instruction (e.g. `ldl') to indicate
6058
     that the literal is used for an address load.  The offset field of
6059
     the instruction must be zero.  During relaxation, the code may be
6060
     altered to use a gp-relative load.
6061
 
6062
`!lituse_jsr!N'
6063
     Used with a register branch format instruction (e.g. `jsr') to
6064
     indicate that the literal is used for a call.  During relaxation,
6065
     the code may be altered to use a direct branch (e.g. `bsr').
6066
 
6067
`!lituse_jsrdirect!N'
6068
     Similar to `lituse_jsr', but also that this call cannot be vectored
6069
     through a PLT entry.  This is useful for functions with special
6070
     calling conventions which do not allow the normal call-clobbered
6071
     registers to be clobbered.
6072
 
6073
`!lituse_bytoff!N'
6074
     Used with a byte mask instruction (e.g. `extbl') to indicate that
6075
     only the low 3 bits of the address are relevant.  During
6076
     relaxation, the code may be altered to use an immediate instead of
6077
     a register shift.
6078
 
6079
`!lituse_addr!N'
6080
     Used with any other instruction to indicate that the original
6081
     address is in fact used, and the original `ldq' instruction may
6082
     not be altered or deleted.  This is useful in conjunction with
6083
     `lituse_jsr' to test whether a weak symbol is defined.
6084
 
6085
          ldq  $27,foo($29)   !literal!1
6086
          beq  $27,is_undef   !lituse_addr!1
6087
          jsr  $26,($27),foo  !lituse_jsr!1
6088
 
6089
`!lituse_tlsgd!N'
6090
     Used with a register branch format instruction to indicate that the
6091
     literal is the call to `__tls_get_addr' used to compute the
6092
     address of the thread-local storage variable whose descriptor was
6093
     loaded with `!tlsgd!N'.
6094
 
6095
`!lituse_tlsldm!N'
6096
     Used with a register branch format instruction to indicate that the
6097
     literal is the call to `__tls_get_addr' used to compute the
6098
     address of the base of the thread-local storage block for the
6099
     current module.  The descriptor for the module must have been
6100
     loaded with `!tlsldm!N'.
6101
 
6102
`!gpdisp!N'
6103
     Used with `ldah' and `lda' to load the GP from the current
6104
     address, a-la the `ldgp' macro.  The source register for the
6105
     `ldah' instruction must contain the address of the `ldah'
6106
     instruction.  There must be exactly one `lda' instruction paired
6107
     with the `ldah' instruction, though it may appear anywhere in the
6108
     instruction stream.  The immediate operands must be zero.
6109
 
6110
          bsr  $26,foo
6111
          ldah $29,0($26)     !gpdisp!1
6112
          lda  $29,0($29)     !gpdisp!1
6113
 
6114
`!gprelhigh'
6115
     Used with an `ldah' instruction to add the high 16 bits of a
6116
     32-bit displacement from the GP.
6117
 
6118
`!gprellow'
6119
     Used with any memory format instruction to add the low 16 bits of a
6120
     32-bit displacement from the GP.
6121
 
6122
`!gprel'
6123
     Used with any memory format instruction to add a 16-bit
6124
     displacement from the GP.
6125
 
6126
`!samegp'
6127
     Used with any branch format instruction to skip the GP load at the
6128
     target address.  The referenced symbol must have the same GP as the
6129
     source object file, and it must be declared to either not use `$27'
6130
     or perform a standard GP load in the first two instructions via the
6131
     `.prologue' directive.
6132
 
6133
`!tlsgd'
6134
`!tlsgd!N'
6135
     Used with an `lda' instruction to load the address of a TLS
6136
     descriptor for a symbol in the GOT.
6137
 
6138
     The sequence number N is optional, and if present it used to pair
6139
     the descriptor load with both the `literal' loading the address of
6140
     the `__tls_get_addr' function and the `lituse_tlsgd' marking the
6141
     call to that function.
6142
 
6143
     For proper relaxation, both the `tlsgd', `literal' and `lituse'
6144
     relocations must be in the same extended basic block.  That is,
6145
     the relocation with the lowest address must be executed first at
6146
     runtime.
6147
 
6148
`!tlsldm'
6149
`!tlsldm!N'
6150
     Used with an `lda' instruction to load the address of a TLS
6151
     descriptor for the current module in the GOT.
6152
 
6153
     Similar in other respects to `tlsgd'.
6154
 
6155
`!gotdtprel'
6156
     Used with an `ldq' instruction to load the offset of the TLS
6157
     symbol within its module's thread-local storage block.  Also known
6158
     as the dynamic thread pointer offset or dtp-relative offset.
6159
 
6160
`!dtprelhi'
6161
`!dtprello'
6162
`!dtprel'
6163
     Like `gprel' relocations except they compute dtp-relative offsets.
6164
 
6165
`!gottprel'
6166
     Used with an `ldq' instruction to load the offset of the TLS
6167
     symbol from the thread pointer.  Also known as the tp-relative
6168
     offset.
6169
 
6170
`!tprelhi'
6171
`!tprello'
6172
`!tprel'
6173
     Like `gprel' relocations except they compute tp-relative offsets.
6174
 
6175

6176
File: as.info,  Node: Alpha Floating Point,  Next: Alpha Directives,  Prev: Alpha Syntax,  Up: Alpha-Dependent
6177
 
6178
9.2.4 Floating Point
6179
--------------------
6180
 
6181
The Alpha family uses both IEEE and VAX floating-point numbers.
6182
 
6183

6184
File: as.info,  Node: Alpha Directives,  Next: Alpha Opcodes,  Prev: Alpha Floating Point,  Up: Alpha-Dependent
6185
 
6186
9.2.5 Alpha Assembler Directives
6187
--------------------------------
6188
 
6189
`as' for the Alpha supports many additional directives for
6190
compatibility with the native assembler.  This section describes them
6191
only briefly.
6192
 
6193
   These are the additional directives in `as' for the Alpha:
6194
 
6195
`.arch CPU'
6196
     Specifies the target processor.  This is equivalent to the `-mCPU'
6197
     command-line option.  *Note Options: Alpha Options, for a list of
6198
     values for CPU.
6199
 
6200
`.ent FUNCTION[, N]'
6201
     Mark the beginning of FUNCTION.  An optional number may follow for
6202
     compatibility with the OSF/1 assembler, but is ignored.  When
6203
     generating `.mdebug' information, this will create a procedure
6204
     descriptor for the function.  In ELF, it will mark the symbol as a
6205
     function a-la the generic `.type' directive.
6206
 
6207
`.end FUNCTION'
6208
     Mark the end of FUNCTION.  In ELF, it will set the size of the
6209
     symbol a-la the generic `.size' directive.
6210
 
6211
`.mask MASK, OFFSET'
6212
     Indicate which of the integer registers are saved in the current
6213
     function's stack frame.  MASK is interpreted a bit mask in which
6214
     bit N set indicates that register N is saved.  The registers are
6215
     saved in a block located OFFSET bytes from the "canonical frame
6216
     address" (CFA) which is the value of the stack pointer on entry to
6217
     the function.  The registers are saved sequentially, except that
6218
     the return address register (normally `$26') is saved first.
6219
 
6220
     This and the other directives that describe the stack frame are
6221
     currently only used when generating `.mdebug' information.  They
6222
     may in the future be used to generate DWARF2 `.debug_frame' unwind
6223
     information for hand written assembly.
6224
 
6225
`.fmask MASK, OFFSET'
6226
     Indicate which of the floating-point registers are saved in the
6227
     current stack frame.  The MASK and OFFSET parameters are
6228
     interpreted as with `.mask'.
6229
 
6230
`.frame FRAMEREG, FRAMEOFFSET, RETREG[, ARGOFFSET]'
6231
     Describes the shape of the stack frame.  The frame pointer in use
6232
     is FRAMEREG; normally this is either `$fp' or `$sp'.  The frame
6233
     pointer is FRAMEOFFSET bytes below the CFA.  The return address is
6234
     initially located in RETREG until it is saved as indicated in
6235
     `.mask'.  For compatibility with OSF/1 an optional ARGOFFSET
6236
     parameter is accepted and ignored.  It is believed to indicate the
6237
     offset from the CFA to the saved argument registers.
6238
 
6239
`.prologue N'
6240
     Indicate that the stack frame is set up and all registers have been
6241
     spilled.  The argument N indicates whether and how the function
6242
     uses the incoming "procedure vector" (the address of the called
6243
     function) in `$27'.  0 indicates that `$27' is not used; 1
6244
     indicates that the first two instructions of the function use `$27'
6245
     to perform a load of the GP register; 2 indicates that `$27' is
6246
     used in some non-standard way and so the linker cannot elide the
6247
     load of the procedure vector during relaxation.
6248
 
6249
`.usepv FUNCTION, WHICH'
6250
     Used to indicate the use of the `$27' register, similar to
6251
     `.prologue', but without the other semantics of needing to be
6252
     inside an open `.ent'/`.end' block.
6253
 
6254
     The WHICH argument should be either `no', indicating that `$27' is
6255
     not used, or `std', indicating that the first two instructions of
6256
     the function perform a GP load.
6257
 
6258
     One might use this directive instead of `.prologue' if you are
6259
     also using dwarf2 CFI directives.
6260
 
6261
`.gprel32 EXPRESSION'
6262
     Computes the difference between the address in EXPRESSION and the
6263
     GP for the current object file, and stores it in 4 bytes.  In
6264
     addition to being smaller than a full 8 byte address, this also
6265
     does not require a dynamic relocation when used in a shared
6266
     library.
6267
 
6268
`.t_floating EXPRESSION'
6269
     Stores EXPRESSION as an IEEE double precision value.
6270
 
6271
`.s_floating EXPRESSION'
6272
     Stores EXPRESSION as an IEEE single precision value.
6273
 
6274
`.f_floating EXPRESSION'
6275
     Stores EXPRESSION as a VAX F format value.
6276
 
6277
`.g_floating EXPRESSION'
6278
     Stores EXPRESSION as a VAX G format value.
6279
 
6280
`.d_floating EXPRESSION'
6281
     Stores EXPRESSION as a VAX D format value.
6282
 
6283
`.set FEATURE'
6284
     Enables or disables various assembler features.  Using the positive
6285
     name of the feature enables while using `noFEATURE' disables.
6286
 
6287
    `at'
6288
          Indicates that macro expansions may clobber the "assembler
6289
          temporary" (`$at' or `$28') register.  Some macros may not be
6290
          expanded without this and will generate an error message if
6291
          `noat' is in effect.  When `at' is in effect, a warning will
6292
          be generated if `$at' is used by the programmer.
6293
 
6294
    `macro'
6295
          Enables the expansion of macro instructions.  Note that
6296
          variants of real instructions, such as `br label' vs `br
6297
          $31,label' are considered alternate forms and not macros.
6298
 
6299
    `move'
6300
    `reorder'
6301
    `volatile'
6302
          These control whether and how the assembler may re-order
6303
          instructions.  Accepted for compatibility with the OSF/1
6304
          assembler, but `as' does not do instruction scheduling, so
6305
          these features are ignored.
6306
 
6307
   The following directives are recognized for compatibility with the
6308
OSF/1 assembler but are ignored.
6309
 
6310
     .proc           .aproc
6311
     .reguse         .livereg
6312
     .option         .aent
6313
     .ugen           .eflag
6314
     .alias          .noalias
6315
 
6316

6317
File: as.info,  Node: Alpha Opcodes,  Prev: Alpha Directives,  Up: Alpha-Dependent
6318
 
6319
9.2.6 Opcodes
6320
-------------
6321
 
6322
For detailed information on the Alpha machine instruction set, see the
6323
Alpha Architecture Handbook
6324
(ftp://ftp.digital.com/pub/Digital/info/semiconductor/literature/alphaahb.pdf).
6325
 
6326

6327
File: as.info,  Node: ARC-Dependent,  Next: ARM-Dependent,  Prev: Alpha-Dependent,  Up: Machine Dependencies
6328
 
6329
9.3 ARC Dependent Features
6330
==========================
6331
 
6332
* Menu:
6333
 
6334
* ARC Options::              Options
6335
* ARC Syntax::               Syntax
6336
* ARC Floating Point::       Floating Point
6337
* ARC Directives::           ARC Machine Directives
6338
* ARC Opcodes::              Opcodes
6339
 
6340

6341
File: as.info,  Node: ARC Options,  Next: ARC Syntax,  Up: ARC-Dependent
6342
 
6343
9.3.1 Options
6344
-------------
6345
 
6346
`-marc[5|6|7|8]'
6347
     This option selects the core processor variant.  Using `-marc' is
6348
     the same as `-marc6', which is also the default.
6349
 
6350
    `arc5'
6351
          Base instruction set.
6352
 
6353
    `arc6'
6354
          Jump-and-link (jl) instruction.  No requirement of an
6355
          instruction between setting flags and conditional jump.  For
6356
          example:
6357
 
6358
                 mov.f r0,r1
6359
                 beq   foo
6360
 
6361
    `arc7'
6362
          Break (brk) and sleep (sleep) instructions.
6363
 
6364
    `arc8'
6365
          Software interrupt (swi) instruction.
6366
 
6367
 
6368
     Note: the `.option' directive can to be used to select a core
6369
     variant from within assembly code.
6370
 
6371
`-EB'
6372
     This option specifies that the output generated by the assembler
6373
     should be marked as being encoded for a big-endian processor.
6374
 
6375
`-EL'
6376
     This option specifies that the output generated by the assembler
6377
     should be marked as being encoded for a little-endian processor -
6378
     this is the default.
6379
 
6380
 
6381

6382
File: as.info,  Node: ARC Syntax,  Next: ARC Floating Point,  Prev: ARC Options,  Up: ARC-Dependent
6383
 
6384
9.3.2 Syntax
6385
------------
6386
 
6387
* Menu:
6388
 
6389
* ARC-Chars::                Special Characters
6390
* ARC-Regs::                 Register Names
6391
 
6392

6393
File: as.info,  Node: ARC-Chars,  Next: ARC-Regs,  Up: ARC Syntax
6394
 
6395
9.3.2.1 Special Characters
6396
..........................
6397
 
6398
The presence of a `#' on a line indicates the start of a comment that
6399
extends to the end of the current line.  Note that if a line starts
6400
with a `#' character then it can also be a logical line number
6401
directive (*note Comments::) or a preprocessor control command (*note
6402
Preprocessing::).
6403
 
6404
   The ARC assembler does not support a line separator character.
6405
 
6406

6407
File: as.info,  Node: ARC-Regs,  Prev: ARC-Chars,  Up: ARC Syntax
6408
 
6409
9.3.2.2 Register Names
6410
......................
6411
 
6412
*TODO*
6413
 
6414

6415
File: as.info,  Node: ARC Floating Point,  Next: ARC Directives,  Prev: ARC Syntax,  Up: ARC-Dependent
6416
 
6417
9.3.3 Floating Point
6418
--------------------
6419
 
6420
The ARC core does not currently have hardware floating point support.
6421
Software floating point support is provided by `GCC' and uses IEEE
6422
floating-point numbers.
6423
 
6424

6425
File: as.info,  Node: ARC Directives,  Next: ARC Opcodes,  Prev: ARC Floating Point,  Up: ARC-Dependent
6426
 
6427
9.3.4 ARC Machine Directives
6428
----------------------------
6429
 
6430
The ARC version of `as' supports the following additional machine
6431
directives:
6432
 
6433
`.2byte EXPRESSIONS'
6434
     *TODO*
6435
 
6436
`.3byte EXPRESSIONS'
6437
     *TODO*
6438
 
6439
`.4byte EXPRESSIONS'
6440
     *TODO*
6441
 
6442
`.extAuxRegister NAME,ADDRESS,MODE'
6443
     The ARCtangent A4 has extensible auxiliary register space.  The
6444
     auxiliary registers can be defined in the assembler source code by
6445
     using this directive.  The first parameter is the NAME of the new
6446
     auxiallry register.  The second parameter is the ADDRESS of the
6447
     register in the auxiliary register memory map for the variant of
6448
     the ARC.  The third parameter specifies the MODE in which the
6449
     register can be operated is and it can be one of:
6450
 
6451
    `r          (readonly)'
6452
 
6453
    `w          (write only)'
6454
 
6455
    `r|w        (read or write)'
6456
 
6457
     For example:
6458
 
6459
            .extAuxRegister mulhi,0x12,w
6460
 
6461
     This specifies an extension auxiliary register called _mulhi_
6462
     which is at address 0x12 in the memory space and which is only
6463
     writable.
6464
 
6465
`.extCondCode SUFFIX,VALUE'
6466
     The condition codes on the ARCtangent A4 are extensible and can be
6467
     specified by means of this assembler directive.  They are specified
6468
     by the suffix and the value for the condition code.  They can be
6469
     used to specify extra condition codes with any values.  For
6470
     example:
6471
 
6472
            .extCondCode is_busy,0x14
6473
 
6474
             add.is_busy  r1,r2,r3
6475
             bis_busy     _main
6476
 
6477
`.extCoreRegister NAME,REGNUM,MODE,SHORTCUT'
6478
     Specifies an extension core register NAME for the application.
6479
     This allows a register NAME with a valid REGNUM between 0 and 60,
6480
     with the following as valid values for MODE
6481
 
6482
    `_r_   (readonly)'
6483
 
6484
    `_w_   (write only)'
6485
 
6486
    `_r|w_ (read or write)'
6487
 
6488
     The other parameter gives a description of the register having a
6489
     SHORTCUT in the pipeline.  The valid values are:
6490
 
6491
    `can_shortcut'
6492
 
6493
    `cannot_shortcut'
6494
 
6495
     For example:
6496
 
6497
            .extCoreRegister mlo,57,r,can_shortcut
6498
 
6499
     This defines an extension core register mlo with the value 57 which
6500
     can shortcut the pipeline.
6501
 
6502
`.extInstruction NAME,OPCODE,SUBOPCODE,SUFFIXCLASS,SYNTAXCLASS'
6503
     The ARCtangent A4 allows the user to specify extension
6504
     instructions.  The extension instructions are not macros.  The
6505
     assembler creates encodings for use of these instructions
6506
     according to the specification by the user.  The parameters are:
6507
 
6508
    *NAME
6509
          Name of the extension instruction
6510
 
6511
    *OPCODE
6512
          Opcode to be used. (Bits 27:31 in the encoding).  Valid values
6513
          0x10-0x1f or 0x03
6514
 
6515
    *SUBOPCODE
6516
          Subopcode to be used.  Valid values are from 0x09-0x3f.
6517
          However the correct value also depends on SYNTAXCLASS
6518
 
6519
    *SUFFIXCLASS
6520
          Determines the kinds of suffixes to be allowed.  Valid values
6521
          are `SUFFIX_NONE', `SUFFIX_COND', `SUFFIX_FLAG' which
6522
          indicates the absence or presence of conditional suffixes and
6523
          flag setting by the extension instruction.  It is also
6524
          possible to specify that an instruction sets the flags and is
6525
          conditional by using `SUFFIX_CODE' | `SUFFIX_FLAG'.
6526
 
6527
    *SYNTAXCLASS
6528
          Determines the syntax class for the instruction.  It can have
6529
          the following values:
6530
 
6531
         ``SYNTAX_2OP':'
6532
               2 Operand Instruction
6533
 
6534
         ``SYNTAX_3OP':'
6535
               3 Operand Instruction
6536
 
6537
          In addition there could be modifiers for the syntax class as
6538
          described below:
6539
 
6540
               Syntax Class Modifiers are:
6541
 
6542
             - `OP1_MUST_BE_IMM': Modifies syntax class SYNTAX_3OP,
6543
               specifying that the first operand of a three-operand
6544
               instruction must be an immediate (i.e., the result is
6545
               discarded).  OP1_MUST_BE_IMM is used by bitwise ORing it
6546
               with SYNTAX_3OP as given in the example below.  This
6547
               could usually be used to set the flags using specific
6548
               instructions and not retain results.
6549
 
6550
             - `OP1_IMM_IMPLIED': Modifies syntax class SYNTAX_20P, it
6551
               specifies that there is an implied immediate destination
6552
               operand which does not appear in the syntax.  For
6553
               example, if the source code contains an instruction like:
6554
 
6555
                    inst r1,r2
6556
 
6557
               it really means that the first argument is an implied
6558
               immediate (that is, the result is discarded).  This is
6559
               the same as though the source code were: inst 0,r1,r2.
6560
               You use OP1_IMM_IMPLIED by bitwise ORing it with
6561
               SYNTAX_20P.
6562
 
6563
 
6564
     For example, defining 64-bit multiplier with immediate operands:
6565
 
6566
          .extInstruction mp64,0x14,0x0,SUFFIX_COND | SUFFIX_FLAG ,
6567
                          SYNTAX_3OP|OP1_MUST_BE_IMM
6568
 
6569
     The above specifies an extension instruction called mp64 which has
6570
     3 operands, sets the flags, can be used with a condition code, for
6571
     which the first operand is an immediate.  (Equivalent to
6572
     discarding the result of the operation).
6573
 
6574
           .extInstruction mul64,0x14,0x00,SUFFIX_COND, SYNTAX_2OP|OP1_IMM_IMPLIED
6575
 
6576
     This describes a 2 operand instruction with an implicit first
6577
     immediate operand.  The result of this operation would be
6578
     discarded.
6579
 
6580
`.half EXPRESSIONS'
6581
     *TODO*
6582
 
6583
`.long EXPRESSIONS'
6584
     *TODO*
6585
 
6586
`.option ARC|ARC5|ARC6|ARC7|ARC8'
6587
     The `.option' directive must be followed by the desired core
6588
     version. Again `arc' is an alias for `arc6'.
6589
 
6590
     Note: the `.option' directive overrides the command line option
6591
     `-marc'; a warning is emitted when the version is not consistent
6592
     between the two - even for the implicit default core version
6593
     (arc6).
6594
 
6595
`.short EXPRESSIONS'
6596
     *TODO*
6597
 
6598
`.word EXPRESSIONS'
6599
     *TODO*
6600
 
6601
 
6602

6603
File: as.info,  Node: ARC Opcodes,  Prev: ARC Directives,  Up: ARC-Dependent
6604
 
6605
9.3.5 Opcodes
6606
-------------
6607
 
6608
For information on the ARC instruction set, see `ARC Programmers
6609
Reference Manual', ARC International (www.arc.com)
6610
 
6611

6612
File: as.info,  Node: ARM-Dependent,  Next: AVR-Dependent,  Prev: ARC-Dependent,  Up: Machine Dependencies
6613
 
6614
9.4 ARM Dependent Features
6615
==========================
6616
 
6617
* Menu:
6618
 
6619
* ARM Options::              Options
6620
* ARM Syntax::               Syntax
6621
* ARM Floating Point::       Floating Point
6622
* ARM Directives::           ARM Machine Directives
6623
* ARM Opcodes::              Opcodes
6624
* ARM Mapping Symbols::      Mapping Symbols
6625
* ARM Unwinding Tutorial::   Unwinding
6626
 
6627

6628
File: as.info,  Node: ARM Options,  Next: ARM Syntax,  Up: ARM-Dependent
6629
 
6630
9.4.1 Options
6631
-------------
6632
 
6633
`-mcpu=PROCESSOR[+EXTENSION...]'
6634
     This option specifies the target processor.  The assembler will
6635
     issue an error message if an attempt is made to assemble an
6636
     instruction which will not execute on the target processor.  The
6637
     following processor names are recognized: `arm1', `arm2', `arm250',
6638
     `arm3', `arm6', `arm60', `arm600', `arm610', `arm620', `arm7',
6639
     `arm7m', `arm7d', `arm7dm', `arm7di', `arm7dmi', `arm70', `arm700',
6640
     `arm700i', `arm710', `arm710t', `arm720', `arm720t', `arm740t',
6641
     `arm710c', `arm7100', `arm7500', `arm7500fe', `arm7t', `arm7tdmi',
6642
     `arm7tdmi-s', `arm8', `arm810', `strongarm', `strongarm1',
6643
     `strongarm110', `strongarm1100', `strongarm1110', `arm9', `arm920',
6644
     `arm920t', `arm922t', `arm940t', `arm9tdmi', `fa526' (Faraday
6645
     FA526 processor), `fa626' (Faraday FA626 processor), `arm9e',
6646
     `arm926e', `arm926ej-s', `arm946e-r0', `arm946e', `arm946e-s',
6647
     `arm966e-r0', `arm966e', `arm966e-s', `arm968e-s', `arm10t',
6648
     `arm10tdmi', `arm10e', `arm1020', `arm1020t', `arm1020e',
6649
     `arm1022e', `arm1026ej-s', `fa606te' (Faraday FA606TE processor),
6650
     `fa616te' (Faraday FA616TE processor), `fa626te' (Faraday FA626TE
6651
     processor), `fmp626' (Faraday FMP626 processor), `fa726te'
6652
     (Faraday FA726TE processor), `arm1136j-s', `arm1136jf-s',
6653
     `arm1156t2-s', `arm1156t2f-s', `arm1176jz-s', `arm1176jzf-s',
6654
     `mpcore', `mpcorenovfp', `cortex-a5', `cortex-a7', `cortex-a8',
6655
     `cortex-a9', `cortex-a15', `cortex-r4', `cortex-r4f', `cortex-m4',
6656
     `cortex-m3', `cortex-m1', `cortex-m0', `cortex-m0plus', `ep9312'
6657
     (ARM920 with Cirrus Maverick coprocessor), `i80200' (Intel XScale
6658
     processor) `iwmmxt' (Intel(r) XScale processor with Wireless
6659
     MMX(tm) technology coprocessor) and `xscale'.  The special name
6660
     `all' may be used to allow the assembler to accept instructions
6661
     valid for any ARM processor.
6662
 
6663
     In addition to the basic instruction set, the assembler can be
6664
     told to accept various extension mnemonics that extend the
6665
     processor using the co-processor instruction space.  For example,
6666
     `-mcpu=arm920+maverick' is equivalent to specifying `-mcpu=ep9312'.
6667
 
6668
     Multiple extensions may be specified, separated by a `+'.  The
6669
     extensions should be specified in ascending alphabetical order.
6670
 
6671
     Some extensions may be restricted to particular architectures;
6672
     this is documented in the list of extensions below.
6673
 
6674
     Extension mnemonics may also be removed from those the assembler
6675
     accepts.  This is done be prepending `no' to the option that adds
6676
     the extension.  Extensions that are removed should be listed after
6677
     all extensions which have been added, again in ascending
6678
     alphabetical order.  For example, `-mcpu=ep9312+nomaverick' is
6679
     equivalent to specifying `-mcpu=arm920'.
6680
 
6681
     The following extensions are currently supported: `crypto'
6682
     (Cryptography Extensions for v8-A architecture, implies `fp+simd'),
6683
     `fp' (Floating Point Extensions for v8-A architecture), `idiv'
6684
     (Integer Divide Extensions for v7-A and v7-R architectures),
6685
     `iwmmxt', `iwmmxt2', `maverick', `mp' (Multiprocessing Extensions
6686
     for v7-A and v7-R architectures), `os' (Operating System for v6M
6687
     architecture), `sec' (Security Extensions for v6K and v7-A
6688
     architectures), `simd' (Advanced SIMD Extensions for v8-A
6689
     architecture, implies `fp'), `virt' (Virtualization Extensions for
6690
     v7-A architecture, implies `idiv'), and `xscale'.
6691
 
6692
`-march=ARCHITECTURE[+EXTENSION...]'
6693
     This option specifies the target architecture.  The assembler will
6694
     issue an error message if an attempt is made to assemble an
6695
     instruction which will not execute on the target architecture.
6696
     The following architecture names are recognized: `armv1', `armv2',
6697
     `armv2a', `armv2s', `armv3', `armv3m', `armv4', `armv4xm',
6698
     `armv4t', `armv4txm', `armv5', `armv5t', `armv5txm', `armv5te',
6699
     `armv5texp', `armv6', `armv6j', `armv6k', `armv6z', `armv6zk',
6700
     `armv6-m', `armv6s-m', `armv7', `armv7-a', `armv7-r', `armv7-m',
6701
     `armv7e-m', `armv8-a', `iwmmxt' and `xscale'.  If both `-mcpu' and
6702
     `-march' are specified, the assembler will use the setting for
6703
     `-mcpu'.
6704
 
6705
     The architecture option can be extended with the same instruction
6706
     set extension options as the `-mcpu' option.
6707
 
6708
`-mfpu=FLOATING-POINT-FORMAT'
6709
     This option specifies the floating point format to assemble for.
6710
     The assembler will issue an error message if an attempt is made to
6711
     assemble an instruction which will not execute on the target
6712
     floating point unit.  The following format options are recognized:
6713
     `softfpa', `fpe', `fpe2', `fpe3', `fpa', `fpa10', `fpa11',
6714
     `arm7500fe', `softvfp', `softvfp+vfp', `vfp', `vfp10', `vfp10-r0',
6715
     `vfp9', `vfpxd', `vfpv2', `vfpv3', `vfpv3-fp16', `vfpv3-d16',
6716
     `vfpv3-d16-fp16', `vfpv3xd', `vfpv3xd-d16', `vfpv4', `vfpv4-d16',
6717
     `fpv4-sp-d16', `fp-armv8', `arm1020t', `arm1020e', `arm1136jf-s',
6718
     `maverick', `neon', `neon-vfpv4', `neon-fp-armv8', and
6719
     `crypto-neon-fp-armv8'.
6720
 
6721
     In addition to determining which instructions are assembled, this
6722
     option also affects the way in which the `.double' assembler
6723
     directive behaves when assembling little-endian code.
6724
 
6725
     The default is dependent on the processor selected.  For
6726
     Architecture 5 or later, the default is to assembler for VFP
6727
     instructions; for earlier architectures the default is to assemble
6728
     for FPA instructions.
6729
 
6730
`-mthumb'
6731
     This option specifies that the assembler should start assembling
6732
     Thumb instructions; that is, it should behave as though the file
6733
     starts with a `.code 16' directive.
6734
 
6735
`-mthumb-interwork'
6736
     This option specifies that the output generated by the assembler
6737
     should be marked as supporting interworking.
6738
 
6739
`-mimplicit-it=never'
6740
`-mimplicit-it=always'
6741
`-mimplicit-it=arm'
6742
`-mimplicit-it=thumb'
6743
     The `-mimplicit-it' option controls the behavior of the assembler
6744
     when conditional instructions are not enclosed in IT blocks.
6745
     There are four possible behaviors.  If `never' is specified, such
6746
     constructs cause a warning in ARM code and an error in Thumb-2
6747
     code.  If `always' is specified, such constructs are accepted in
6748
     both ARM and Thumb-2 code, where the IT instruction is added
6749
     implicitly.  If `arm' is specified, such constructs are accepted
6750
     in ARM code and cause an error in Thumb-2 code.  If `thumb' is
6751
     specified, such constructs cause a warning in ARM code and are
6752
     accepted in Thumb-2 code.  If you omit this option, the behavior
6753
     is equivalent to `-mimplicit-it=arm'.
6754
 
6755
`-mapcs-26'
6756
`-mapcs-32'
6757
     These options specify that the output generated by the assembler
6758
     should be marked as supporting the indicated version of the Arm
6759
     Procedure.  Calling Standard.
6760
 
6761
`-matpcs'
6762
     This option specifies that the output generated by the assembler
6763
     should be marked as supporting the Arm/Thumb Procedure Calling
6764
     Standard.  If enabled this option will cause the assembler to
6765
     create an empty debugging section in the object file called
6766
     .arm.atpcs.  Debuggers can use this to determine the ABI being
6767
     used by.
6768
 
6769
`-mapcs-float'
6770
     This indicates the floating point variant of the APCS should be
6771
     used.  In this variant floating point arguments are passed in FP
6772
     registers rather than integer registers.
6773
 
6774
`-mapcs-reentrant'
6775
     This indicates that the reentrant variant of the APCS should be
6776
     used.  This variant supports position independent code.
6777
 
6778
`-mfloat-abi=ABI'
6779
     This option specifies that the output generated by the assembler
6780
     should be marked as using specified floating point ABI.  The
6781
     following values are recognized: `soft', `softfp' and `hard'.
6782
 
6783
`-meabi=VER'
6784
     This option specifies which EABI version the produced object files
6785
     should conform to.  The following values are recognized: `gnu', `4'
6786
     and `5'.
6787
 
6788
`-EB'
6789
     This option specifies that the output generated by the assembler
6790
     should be marked as being encoded for a big-endian processor.
6791
 
6792
`-EL'
6793
     This option specifies that the output generated by the assembler
6794
     should be marked as being encoded for a little-endian processor.
6795
 
6796
`-k'
6797
     This option specifies that the output of the assembler should be
6798
     marked as position-independent code (PIC).
6799
 
6800
`--fix-v4bx'
6801
     Allow `BX' instructions in ARMv4 code.  This is intended for use
6802
     with the linker option of the same name.
6803
 
6804
`-mwarn-deprecated'
6805
`-mno-warn-deprecated'
6806
     Enable or disable warnings about using deprecated options or
6807
     features.  The default is to warn.
6808
 
6809
 
6810

6811
File: as.info,  Node: ARM Syntax,  Next: ARM Floating Point,  Prev: ARM Options,  Up: ARM-Dependent
6812
 
6813
9.4.2 Syntax
6814
------------
6815
 
6816
* Menu:
6817
 
6818
* ARM-Instruction-Set::      Instruction Set
6819
* ARM-Chars::                Special Characters
6820
* ARM-Regs::                 Register Names
6821
* ARM-Relocations::          Relocations
6822
* ARM-Neon-Alignment::       NEON Alignment Specifiers
6823
 
6824

6825
File: as.info,  Node: ARM-Instruction-Set,  Next: ARM-Chars,  Up: ARM Syntax
6826
 
6827
9.4.2.1 Instruction Set Syntax
6828
..............................
6829
 
6830
Two slightly different syntaxes are support for ARM and THUMB
6831
instructions.  The default, `divided', uses the old style where ARM and
6832
THUMB instructions had their own, separate syntaxes.  The new,
6833
`unified' syntax, which can be selected via the `.syntax' directive,
6834
and has the following main features:
6835
 
6836
*
6837
     Immediate operands do not require a `#' prefix.
6838
 
6839
*
6840
     The `IT' instruction may appear, and if it does it is validated
6841
     against subsequent conditional affixes.  In ARM mode it does not
6842
     generate machine code, in THUMB mode it does.
6843
 
6844
*
6845
     For ARM instructions the conditional affixes always appear at the
6846
     end of the instruction.  For THUMB instructions conditional
6847
     affixes can be used, but only inside the scope of an `IT'
6848
     instruction.
6849
 
6850
*
6851
     All of the instructions new to the V6T2 architecture (and later)
6852
     are available.  (Only a few such instructions can be written in the
6853
     `divided' syntax).
6854
 
6855
*
6856
     The `.N' and `.W' suffixes are recognized and honored.
6857
 
6858
*
6859
     All instructions set the flags if and only if they have an `s'
6860
     affix.
6861
 
6862

6863
File: as.info,  Node: ARM-Chars,  Next: ARM-Regs,  Prev: ARM-Instruction-Set,  Up: ARM Syntax
6864
 
6865
9.4.2.2 Special Characters
6866
..........................
6867
 
6868
The presence of a `@' anywhere on a line indicates the start of a
6869
comment that extends to the end of that line.
6870
 
6871
   If a `#' appears as the first character of a line then the whole
6872
line is treated as a comment, but in this case the line could also be a
6873
logical line number directive (*note Comments::) or a preprocessor
6874
control command (*note Preprocessing::).
6875
 
6876
   The `;' character can be used instead of a newline to separate
6877
statements.
6878
 
6879
   Either `#' or `$' can be used to indicate immediate operands.
6880
 
6881
   *TODO* Explain about /data modifier on symbols.
6882
 
6883

6884
File: as.info,  Node: ARM-Regs,  Next: ARM-Relocations,  Prev: ARM-Chars,  Up: ARM Syntax
6885
 
6886
9.4.2.3 Register Names
6887
......................
6888
 
6889
*TODO* Explain about ARM register naming, and the predefined names.
6890
 
6891

6892
File: as.info,  Node: ARM-Neon-Alignment,  Prev: ARM-Relocations,  Up: ARM Syntax
6893
 
6894
9.4.2.4 NEON Alignment Specifiers
6895
.................................
6896
 
6897
Some NEON load/store instructions allow an optional address alignment
6898
qualifier.  The ARM documentation specifies that this is indicated by
6899
`@ ALIGN'. However GAS already interprets the `@' character as a "line
6900
comment" start, so `: ALIGN' is used instead.  For example:
6901
 
6902
             vld1.8 {q0}, [r0, :128]
6903
 
6904

6905
File: as.info,  Node: ARM Floating Point,  Next: ARM Directives,  Prev: ARM Syntax,  Up: ARM-Dependent
6906
 
6907
9.4.3 Floating Point
6908
--------------------
6909
 
6910
The ARM family uses IEEE floating-point numbers.
6911
 
6912

6913
File: as.info,  Node: ARM-Relocations,  Next: ARM-Neon-Alignment,  Prev: ARM-Regs,  Up: ARM Syntax
6914
 
6915
9.4.3.1 ARM relocation generation
6916
.................................
6917
 
6918
Specific data relocations can be generated by putting the relocation
6919
name in parentheses after the symbol name.  For example:
6920
 
6921
             .word foo(TARGET1)
6922
 
6923
   This will generate an `R_ARM_TARGET1' relocation against the symbol
6924
FOO.  The following relocations are supported: `GOT', `GOTOFF',
6925
`TARGET1', `TARGET2', `SBREL', `TLSGD', `TLSLDM', `TLSLDO', `TLSDESC',
6926
`TLSCALL', `GOTTPOFF', `GOT_PREL' and `TPOFF'.
6927
 
6928
   For compatibility with older toolchains the assembler also accepts
6929
`(PLT)' after branch targets.  On legacy targets this will generate the
6930
deprecated `R_ARM_PLT32' relocation.  On EABI targets it will encode
6931
either the `R_ARM_CALL' or `R_ARM_JUMP24' relocation, as appropriate.
6932
 
6933
   Relocations for `MOVW' and `MOVT' instructions can be generated by
6934
prefixing the value with `#:lower16:' and `#:upper16' respectively.
6935
For example to load the 32-bit address of foo into r0:
6936
 
6937
             MOVW r0, #:lower16:foo
6938
             MOVT r0, #:upper16:foo
6939
 
6940

6941
File: as.info,  Node: ARM Directives,  Next: ARM Opcodes,  Prev: ARM Floating Point,  Up: ARM-Dependent
6942
 
6943
9.4.4 ARM Machine Directives
6944
----------------------------
6945
 
6946
`.2byte EXPRESSION [, EXPRESSION]*'
6947
`.4byte EXPRESSION [, EXPRESSION]*'
6948
`.8byte EXPRESSION [, EXPRESSION]*'
6949
     These directives write 2, 4 or 8 byte values to the output section.
6950
 
6951
`.align EXPRESSION [, EXPRESSION]'
6952
     This is the generic .ALIGN directive.  For the ARM however if the
6953
     first argument is zero (ie no alignment is needed) the assembler
6954
     will behave as if the argument had been 2 (ie pad to the next four
6955
     byte boundary).  This is for compatibility with ARM's own
6956
     assembler.
6957
 
6958
`.arch NAME'
6959
     Select the target architecture.  Valid values for NAME are the
6960
     same as for the `-march' commandline option.
6961
 
6962
     Specifying `.arch' clears any previously selected architecture
6963
     extensions.
6964
 
6965
`.arch_extension NAME'
6966
     Add or remove an architecture extension to the target
6967
     architecture.  Valid values for NAME are the same as those
6968
     accepted as architectural extensions by the `-mcpu' commandline
6969
     option.
6970
 
6971
     `.arch_extension' may be used multiple times to add or remove
6972
     extensions incrementally to the architecture being compiled for.
6973
 
6974
`.arm'
6975
     This performs the same action as .CODE 32.
6976
 
6977
`.pad #COUNT'
6978
     Generate unwinder annotations for a stack adjustment of COUNT
6979
     bytes.  A positive value indicates the function prologue allocated
6980
     stack space by decrementing the stack pointer.
6981
 
6982
`.bss'
6983
     This directive switches to the `.bss' section.
6984
 
6985
`.cantunwind'
6986
     Prevents unwinding through the current function.  No personality
6987
     routine or exception table data is required or permitted.
6988
 
6989
`.code `[16|32]''
6990
     This directive selects the instruction set being generated. The
6991
     value 16 selects Thumb, with the value 32 selecting ARM.
6992
 
6993
`.cpu NAME'
6994
     Select the target processor.  Valid values for NAME are the same as
6995
     for the `-mcpu' commandline option.
6996
 
6997
     Specifying `.cpu' clears any previously selected architecture
6998
     extensions.
6999
 
7000
`NAME .dn REGISTER NAME [.TYPE] [[INDEX]]'
7001
`NAME .qn REGISTER NAME [.TYPE] [[INDEX]]'
7002
     The `dn' and `qn' directives are used to create typed and/or
7003
     indexed register aliases for use in Advanced SIMD Extension (Neon)
7004
     instructions.  The former should be used to create aliases of
7005
     double-precision registers, and the latter to create aliases of
7006
     quad-precision registers.
7007
 
7008
     If these directives are used to create typed aliases, those
7009
     aliases can be used in Neon instructions instead of writing types
7010
     after the mnemonic or after each operand.  For example:
7011
 
7012
                  x .dn d2.f32
7013
                  y .dn d3.f32
7014
                  z .dn d4.f32[1]
7015
                  vmul x,y,z
7016
 
7017
     This is equivalent to writing the following:
7018
 
7019
                  vmul.f32 d2,d3,d4[1]
7020
 
7021
     Aliases created using `dn' or `qn' can be destroyed using `unreq'.
7022
 
7023
`.eabi_attribute TAG, VALUE'
7024
     Set the EABI object attribute TAG to VALUE.
7025
 
7026
     The TAG is either an attribute number, or one of the following:
7027
     `Tag_CPU_raw_name', `Tag_CPU_name', `Tag_CPU_arch',
7028
     `Tag_CPU_arch_profile', `Tag_ARM_ISA_use', `Tag_THUMB_ISA_use',
7029
     `Tag_FP_arch', `Tag_WMMX_arch', `Tag_Advanced_SIMD_arch',
7030
     `Tag_PCS_config', `Tag_ABI_PCS_R9_use', `Tag_ABI_PCS_RW_data',
7031
     `Tag_ABI_PCS_RO_data', `Tag_ABI_PCS_GOT_use',
7032
     `Tag_ABI_PCS_wchar_t', `Tag_ABI_FP_rounding',
7033
     `Tag_ABI_FP_denormal', `Tag_ABI_FP_exceptions',
7034
     `Tag_ABI_FP_user_exceptions', `Tag_ABI_FP_number_model',
7035
     `Tag_ABI_align_needed', `Tag_ABI_align_preserved',
7036
     `Tag_ABI_enum_size', `Tag_ABI_HardFP_use', `Tag_ABI_VFP_args',
7037
     `Tag_ABI_WMMX_args', `Tag_ABI_optimization_goals',
7038
     `Tag_ABI_FP_optimization_goals', `Tag_compatibility',
7039
     `Tag_CPU_unaligned_access', `Tag_FP_HP_extension',
7040
     `Tag_ABI_FP_16bit_format', `Tag_MPextension_use', `Tag_DIV_use',
7041
     `Tag_nodefaults', `Tag_also_compatible_with', `Tag_conformance',
7042
     `Tag_T2EE_use', `Tag_Virtualization_use'
7043
 
7044
     The VALUE is either a `number', `"string"', or `number, "string"'
7045
     depending on the tag.
7046
 
7047
     Note - the following legacy values are also accepted by TAG:
7048
     `Tag_VFP_arch', `Tag_ABI_align8_needed',
7049
     `Tag_ABI_align8_preserved', `Tag_VFP_HP_extension',
7050
 
7051
`.even'
7052
     This directive aligns to an even-numbered address.
7053
 
7054
`.extend  EXPRESSION [, EXPRESSION]*'
7055
`.ldouble  EXPRESSION [, EXPRESSION]*'
7056
     These directives write 12byte long double floating-point values to
7057
     the output section.  These are not compatible with current ARM
7058
     processors or ABIs.
7059
 
7060
`.fnend'
7061
     Marks the end of a function with an unwind table entry.  The
7062
     unwind index table entry is created when this directive is
7063
     processed.
7064
 
7065
     If no personality routine has been specified then standard
7066
     personality routine 0 or 1 will be used, depending on the number
7067
     of unwind opcodes required.
7068
 
7069
`.fnstart'
7070
     Marks the start of a function with an unwind table entry.
7071
 
7072
`.force_thumb'
7073
     This directive forces the selection of Thumb instructions, even if
7074
     the target processor does not support those instructions
7075
 
7076
`.fpu NAME'
7077
     Select the floating-point unit to assemble for.  Valid values for
7078
     NAME are the same as for the `-mfpu' commandline option.
7079
 
7080
`.handlerdata'
7081
     Marks the end of the current function, and the start of the
7082
     exception table entry for that function.  Anything between this
7083
     directive and the `.fnend' directive will be added to the
7084
     exception table entry.
7085
 
7086
     Must be preceded by a `.personality' or `.personalityindex'
7087
     directive.
7088
 
7089
`.inst OPCODE [ , ... ]'
7090
`.inst.n OPCODE [ , ... ]'
7091
`.inst.w OPCODE [ , ... ]'
7092
     Generates the instruction corresponding to the numerical value
7093
     OPCODE.  `.inst.n' and `.inst.w' allow the Thumb instruction size
7094
     to be specified explicitly, overriding the normal encoding rules.
7095
 
7096
`.ldouble  EXPRESSION [, EXPRESSION]*'
7097
     See `.extend'.
7098
 
7099
`.ltorg'
7100
     This directive causes the current contents of the literal pool to
7101
     be dumped into the current section (which is assumed to be the
7102
     .text section) at the current location (aligned to a word
7103
     boundary).  `GAS' maintains a separate literal pool for each
7104
     section and each sub-section.  The `.ltorg' directive will only
7105
     affect the literal pool of the current section and sub-section.
7106
     At the end of assembly all remaining, un-empty literal pools will
7107
     automatically be dumped.
7108
 
7109
     Note - older versions of `GAS' would dump the current literal pool
7110
     any time a section change occurred.  This is no longer done, since
7111
     it prevents accurate control of the placement of literal pools.
7112
 
7113
`.movsp REG [, #OFFSET]'
7114
     Tell the unwinder that REG contains an offset from the current
7115
     stack pointer.  If OFFSET is not specified then it is assumed to be
7116
     zero.
7117
 
7118
`.object_arch NAME'
7119
     Override the architecture recorded in the EABI object attribute
7120
     section.  Valid values for NAME are the same as for the `.arch'
7121
     directive.  Typically this is useful when code uses runtime
7122
     detection of CPU features.
7123
 
7124
`.packed  EXPRESSION [, EXPRESSION]*'
7125
     This directive writes 12-byte packed floating-point values to the
7126
     output section.  These are not compatible with current ARM
7127
     processors or ABIs.
7128
 
7129
`.pad #COUNT'
7130
     Generate unwinder annotations for a stack adjustment of COUNT
7131
     bytes.  A positive value indicates the function prologue allocated
7132
     stack space by decrementing the stack pointer.
7133
 
7134
`.personality NAME'
7135
     Sets the personality routine for the current function to NAME.
7136
 
7137
`.personalityindex INDEX'
7138
     Sets the personality routine for the current function to the EABI
7139
     standard routine number INDEX
7140
 
7141
`.pool'
7142
     This is a synonym for .ltorg.
7143
 
7144
`NAME .req REGISTER NAME'
7145
     This creates an alias for REGISTER NAME called NAME.  For example:
7146
 
7147
                  foo .req r0
7148
 
7149
`.save REGLIST'
7150
     Generate unwinder annotations to restore the registers in REGLIST.
7151
     The format of REGLIST is the same as the corresponding
7152
     store-multiple instruction.
7153
 
7154
     _core registers_
7155
            .save {r4, r5, r6, lr}
7156
            stmfd sp!, {r4, r5, r6, lr}
7157
     _FPA registers_
7158
            .save f4, 2
7159
            sfmfd f4, 2, [sp]!
7160
     _VFP registers_
7161
            .save {d8, d9, d10}
7162
            fstmdx sp!, {d8, d9, d10}
7163
     _iWMMXt registers_
7164
            .save {wr10, wr11}
7165
            wstrd wr11, [sp, #-8]!
7166
            wstrd wr10, [sp, #-8]!
7167
          or
7168
            .save wr11
7169
            wstrd wr11, [sp, #-8]!
7170
            .save wr10
7171
            wstrd wr10, [sp, #-8]!
7172
 
7173
`.setfp FPREG, SPREG [, #OFFSET]'
7174
     Make all unwinder annotations relative to a frame pointer.
7175
     Without this the unwinder will use offsets from the stack pointer.
7176
 
7177
     The syntax of this directive is the same as the `add' or `mov'
7178
     instruction used to set the frame pointer.  SPREG must be either
7179
     `sp' or mentioned in a previous `.movsp' directive.
7180
 
7181
          .movsp ip
7182
          mov ip, sp
7183
          ...
7184
          .setfp fp, ip, #4
7185
          add fp, ip, #4
7186
 
7187
`.secrel32 EXPRESSION [, EXPRESSION]*'
7188
     This directive emits relocations that evaluate to the
7189
     section-relative offset of each expression's symbol.  This
7190
     directive is only supported for PE targets.
7191
 
7192
`.syntax [`unified' | `divided']'
7193
     This directive sets the Instruction Set Syntax as described in the
7194
     *note ARM-Instruction-Set:: section.
7195
 
7196
`.thumb'
7197
     This performs the same action as .CODE 16.
7198
 
7199
`.thumb_func'
7200
     This directive specifies that the following symbol is the name of a
7201
     Thumb encoded function.  This information is necessary in order to
7202
     allow the assembler and linker to generate correct code for
7203
     interworking between Arm and Thumb instructions and should be used
7204
     even if interworking is not going to be performed.  The presence
7205
     of this directive also implies `.thumb'
7206
 
7207
     This directive is not neccessary when generating EABI objects.  On
7208
     these targets the encoding is implicit when generating Thumb code.
7209
 
7210
`.thumb_set'
7211
     This performs the equivalent of a `.set' directive in that it
7212
     creates a symbol which is an alias for another symbol (possibly
7213
     not yet defined).  This directive also has the added property in
7214
     that it marks the aliased symbol as being a thumb function entry
7215
     point, in the same way that the `.thumb_func' directive does.
7216
 
7217
`.tlsdescseq TLS-VARIABLE'
7218
     This directive is used to annotate parts of an inlined TLS
7219
     descriptor trampoline.  Normally the trampoline is provided by the
7220
     linker, and this directive is not needed.
7221
 
7222
`.unreq ALIAS-NAME'
7223
     This undefines a register alias which was previously defined using
7224
     the `req', `dn' or `qn' directives.  For example:
7225
 
7226
                  foo .req r0
7227
                  .unreq foo
7228
 
7229
     An error occurs if the name is undefined.  Note - this pseudo op
7230
     can be used to delete builtin in register name aliases (eg 'r0').
7231
     This should only be done if it is really necessary.
7232
 
7233
`.unwind_raw OFFSET, BYTE1, ...'
7234
     Insert one of more arbitary unwind opcode bytes, which are known
7235
     to adjust the stack pointer by OFFSET bytes.
7236
 
7237
     For example `.unwind_raw 4, 0xb1, 0x01' is equivalent to `.save
7238
     {r0}'
7239
 
7240
`.vsave VFP-REGLIST'
7241
     Generate unwinder annotations to restore the VFP registers in
7242
     VFP-REGLIST using FLDMD.  Also works for VFPv3 registers that are
7243
     to be restored using VLDM.  The format of VFP-REGLIST is the same
7244
     as the corresponding store-multiple instruction.
7245
 
7246
     _VFP registers_
7247
            .vsave {d8, d9, d10}
7248
            fstmdd sp!, {d8, d9, d10}
7249
     _VFPv3 registers_
7250
            .vsave {d15, d16, d17}
7251
            vstm sp!, {d15, d16, d17}
7252
 
7253
     Since FLDMX and FSTMX are now deprecated, this directive should be
7254
     used in favour of `.save' for saving VFP registers for ARMv6 and
7255
     above.
7256
 
7257
 
7258

7259
File: as.info,  Node: ARM Opcodes,  Next: ARM Mapping Symbols,  Prev: ARM Directives,  Up: ARM-Dependent
7260
 
7261
9.4.5 Opcodes
7262
-------------
7263
 
7264
`as' implements all the standard ARM opcodes.  It also implements
7265
several pseudo opcodes, including several synthetic load instructions.
7266
 
7267
`NOP'
7268
            nop
7269
 
7270
     This pseudo op will always evaluate to a legal ARM instruction
7271
     that does nothing.  Currently it will evaluate to MOV r0, r0.
7272
 
7273
`LDR'
7274
            ldr  , = 
7275
 
7276
     If expression evaluates to a numeric constant then a MOV or MVN
7277
     instruction will be used in place of the LDR instruction, if the
7278
     constant can be generated by either of these instructions.
7279
     Otherwise the constant will be placed into the nearest literal
7280
     pool (if it not already there) and a PC relative LDR instruction
7281
     will be generated.
7282
 
7283
`ADR'
7284
            adr  
7285
 
7286
     This instruction will load the address of LABEL into the indicated
7287
     register.  The instruction will evaluate to a PC relative ADD or
7288
     SUB instruction depending upon where the label is located.  If the
7289
     label is out of range, or if it is not defined in the same file
7290
     (and section) as the ADR instruction, then an error will be
7291
     generated.  This instruction will not make use of the literal pool.
7292
 
7293
`ADRL'
7294
            adrl  
7295
 
7296
     This instruction will load the address of LABEL into the indicated
7297
     register.  The instruction will evaluate to one or two PC relative
7298
     ADD or SUB instructions depending upon where the label is located.
7299
     If a second instruction is not needed a NOP instruction will be
7300
     generated in its place, so that this instruction is always 8 bytes
7301
     long.
7302
 
7303
     If the label is out of range, or if it is not defined in the same
7304
     file (and section) as the ADRL instruction, then an error will be
7305
     generated.  This instruction will not make use of the literal pool.
7306
 
7307
 
7308
   For information on the ARM or Thumb instruction sets, see `ARM
7309
Software Development Toolkit Reference Manual', Advanced RISC Machines
7310
Ltd.
7311
 
7312

7313
File: as.info,  Node: ARM Mapping Symbols,  Next: ARM Unwinding Tutorial,  Prev: ARM Opcodes,  Up: ARM-Dependent
7314
 
7315
9.4.6 Mapping Symbols
7316
---------------------
7317
 
7318
The ARM ELF specification requires that special symbols be inserted
7319
into object files to mark certain features:
7320
 
7321
`$a'
7322
     At the start of a region of code containing ARM instructions.
7323
 
7324
`$t'
7325
     At the start of a region of code containing THUMB instructions.
7326
 
7327
`$d'
7328
     At the start of a region of data.
7329
 
7330
 
7331
   The assembler will automatically insert these symbols for you - there
7332
is no need to code them yourself.  Support for tagging symbols ($b, $f,
7333
$p and $m) which is also mentioned in the current ARM ELF specification
7334
is not implemented.  This is because they have been dropped from the
7335
new EABI and so tools cannot rely upon their presence.
7336
 
7337

7338
File: as.info,  Node: ARM Unwinding Tutorial,  Prev: ARM Mapping Symbols,  Up: ARM-Dependent
7339
 
7340
9.4.7 Unwinding
7341
---------------
7342
 
7343
The ABI for the ARM Architecture specifies a standard format for
7344
exception unwind information.  This information is used when an
7345
exception is thrown to determine where control should be transferred.
7346
In particular, the unwind information is used to determine which
7347
function called the function that threw the exception, and which
7348
function called that one, and so forth.  This information is also used
7349
to restore the values of callee-saved registers in the function
7350
catching the exception.
7351
 
7352
   If you are writing functions in assembly code, and those functions
7353
call other functions that throw exceptions, you must use assembly
7354
pseudo ops to ensure that appropriate exception unwind information is
7355
generated.  Otherwise, if one of the functions called by your assembly
7356
code throws an exception, the run-time library will be unable to unwind
7357
the stack through your assembly code and your program will not behave
7358
correctly.
7359
 
7360
   To illustrate the use of these pseudo ops, we will examine the code
7361
that G++ generates for the following C++ input:
7362
 
7363
void callee (int *);
7364
 
7365
int
7366
caller ()
7367
{
7368
  int i;
7369
  callee (&i);
7370
  return i;
7371
}
7372
 
7373
   This example does not show how to throw or catch an exception from
7374
assembly code.  That is a much more complex operation and should always
7375
be done in a high-level language, such as C++, that directly supports
7376
exceptions.
7377
 
7378
   The code generated by one particular version of G++ when compiling
7379
the example above is:
7380
 
7381
_Z6callerv:
7382
        .fnstart
7383
.LFB2:
7384
        @ Function supports interworking.
7385
        @ args = 0, pretend = 0, frame = 8
7386
        @ frame_needed = 1, uses_anonymous_args = 0
7387
        stmfd   sp!, {fp, lr}
7388
        .save {fp, lr}
7389
.LCFI0:
7390
        .setfp fp, sp, #4
7391
        add     fp, sp, #4
7392
.LCFI1:
7393
        .pad #8
7394
        sub     sp, sp, #8
7395
.LCFI2:
7396
        sub     r3, fp, #8
7397
        mov     r0, r3
7398
        bl      _Z6calleePi
7399
        ldr     r3, [fp, #-8]
7400
        mov     r0, r3
7401
        sub     sp, fp, #4
7402
        ldmfd   sp!, {fp, lr}
7403
        bx      lr
7404
.LFE2:
7405
        .fnend
7406
 
7407
   Of course, the sequence of instructions varies based on the options
7408
you pass to GCC and on the version of GCC in use.  The exact
7409
instructions are not important since we are focusing on the pseudo ops
7410
that are used to generate unwind information.
7411
 
7412
   An important assumption made by the unwinder is that the stack frame
7413
does not change during the body of the function.  In particular, since
7414
we assume that the assembly code does not itself throw an exception,
7415
the only point where an exception can be thrown is from a call, such as
7416
the `bl' instruction above.  At each call site, the same saved
7417
registers (including `lr', which indicates the return address) must be
7418
located in the same locations relative to the frame pointer.
7419
 
7420
   The `.fnstart' (*note .fnstart pseudo op: arm_fnstart.) pseudo op
7421
appears immediately before the first instruction of the function while
7422
the `.fnend' (*note .fnend pseudo op: arm_fnend.) pseudo op appears
7423
immediately after the last instruction of the function.  These pseudo
7424
ops specify the range of the function.
7425
 
7426
   Only the order of the other pseudos ops (e.g., `.setfp' or `.pad')
7427
matters; their exact locations are irrelevant.  In the example above,
7428
the compiler emits the pseudo ops with particular instructions.  That
7429
makes it easier to understand the code, but it is not required for
7430
correctness.  It would work just as well to emit all of the pseudo ops
7431
other than `.fnend' in the same order, but immediately after `.fnstart'.
7432
 
7433
   The `.save' (*note .save pseudo op: arm_save.) pseudo op indicates
7434
registers that have been saved to the stack so that they can be
7435
restored before the function returns.  The argument to the `.save'
7436
pseudo op is a list of registers to save.  If a register is
7437
"callee-saved" (as specified by the ABI) and is modified by the
7438
function you are writing, then your code must save the value before it
7439
is modified and restore the original value before the function returns.
7440
If an exception is thrown, the run-time library restores the values of
7441
these registers from their locations on the stack before returning
7442
control to the exception handler.  (Of course, if an exception is not
7443
thrown, the function that contains the `.save' pseudo op restores these
7444
registers in the function epilogue, as is done with the `ldmfd'
7445
instruction above.)
7446
 
7447
   You do not have to save callee-saved registers at the very beginning
7448
of the function and you do not need to use the `.save' pseudo op
7449
immediately following the point at which the registers are saved.
7450
However, if you modify a callee-saved register, you must save it on the
7451
stack before modifying it and before calling any functions which might
7452
throw an exception.  And, you must use the `.save' pseudo op to
7453
indicate that you have done so.
7454
 
7455
   The `.pad' (*note .pad: arm_pad.) pseudo op indicates a modification
7456
of the stack pointer that does not save any registers.  The argument is
7457
the number of bytes (in decimal) that are subtracted from the stack
7458
pointer.  (On ARM CPUs, the stack grows downwards, so subtracting from
7459
the stack pointer increases the size of the stack.)
7460
 
7461
   The `.setfp' (*note .setfp pseudo op: arm_setfp.) pseudo op
7462
indicates the register that contains the frame pointer.  The first
7463
argument is the register that is set, which is typically `fp'.  The
7464
second argument indicates the register from which the frame pointer
7465
takes its value.  The third argument, if present, is the value (in
7466
decimal) added to the register specified by the second argument to
7467
compute the value of the frame pointer.  You should not modify the
7468
frame pointer in the body of the function.
7469
 
7470
   If you do not use a frame pointer, then you should not use the
7471
`.setfp' pseudo op.  If you do not use a frame pointer, then you should
7472
avoid modifying the stack pointer outside of the function prologue.
7473
Otherwise, the run-time library will be unable to find saved registers
7474
when it is unwinding the stack.
7475
 
7476
   The pseudo ops described above are sufficient for writing assembly
7477
code that calls functions which may throw exceptions.  If you need to
7478
know more about the object-file format used to represent unwind
7479
information, you may consult the `Exception Handling ABI for the ARM
7480
Architecture' available from `http://infocenter.arm.com'.
7481
 
7482

7483
File: as.info,  Node: AVR-Dependent,  Next: Blackfin-Dependent,  Prev: ARM-Dependent,  Up: Machine Dependencies
7484
 
7485
9.5 AVR Dependent Features
7486
==========================
7487
 
7488
* Menu:
7489
 
7490
* AVR Options::              Options
7491
* AVR Syntax::               Syntax
7492
* AVR Opcodes::              Opcodes
7493
 
7494

7495
File: as.info,  Node: AVR Options,  Next: AVR Syntax,  Up: AVR-Dependent
7496
 
7497
9.5.1 Options
7498
-------------
7499
 
7500
`-mmcu=MCU'
7501
     Specify ATMEL AVR instruction set or MCU type.
7502
 
7503
     Instruction set avr1 is for the minimal AVR core, not supported by
7504
     the C compiler, only for assembler programs (MCU types: at90s1200,
7505
     attiny11, attiny12, attiny15, attiny28).
7506
 
7507
     Instruction set avr2 (default) is for the classic AVR core with up
7508
     to 8K program memory space (MCU types: at90s2313, at90s2323,
7509
     at90s2333, at90s2343, attiny22, attiny26, at90s4414, at90s4433,
7510
     at90s4434, at90s8515, at90c8534, at90s8535).
7511
 
7512
     Instruction set avr25 is for the classic AVR core with up to 8K
7513
     program memory space plus the MOVW instruction (MCU types:
7514
     attiny13, attiny13a, attiny2313, attiny2313a, attiny24, attiny24a,
7515
     attiny4313, attiny44, attiny44a, attiny84, attiny84a, attiny25,
7516
     attiny45, attiny85, attiny261, attiny261a, attiny461, attiny461a,
7517
     attiny861, attiny861a, attiny87, attiny43u, attiny48, attiny88,
7518
     at86rf401, ata6289).
7519
 
7520
     Instruction set avr3 is for the classic AVR core with up to 128K
7521
     program memory space (MCU types: at43usb355, at76c711).
7522
 
7523
     Instruction set avr31 is for the classic AVR core with exactly
7524
     128K program memory space (MCU types: atmega103, at43usb320).
7525
 
7526
     Instruction set avr35 is for classic AVR core plus MOVW, CALL, and
7527
     JMP instructions (MCU types: attiny167, at90usb82, at90usb162,
7528
     atmega8u2, atmega16u2, atmega32u2).
7529
 
7530
     Instruction set avr4 is for the enhanced AVR core with up to 8K
7531
     program memory space (MCU types: atmega48, atmega48a, atmega48p,
7532
     atmega8, atmega88, atmega88a, atmega88p, atmega88pa, atmega8515,
7533
     atmega8535, atmega8hva, at90pwm1, at90pwm2, at90pwm2b, at90pwm3,
7534
     at90pwm3b, at90pwm81).
7535
 
7536
     Instruction set avr5 is for the enhanced AVR core with up to 128K
7537
     program memory space (MCU types: atmega16, atmega16a, atmega161,
7538
     atmega162, atmega163, atmega164a, atmega164p, atmega165,
7539
     atmega165a, atmega165p, atmega168, atmega168a, atmega168p,
7540
     atmega169, atmega169a, atmega169p, atmega169pa, atmega32,
7541
     atmega323, atmega324a, atmega324p, atmega325, atmega325a,
7542
     atmega325p, atmega325pa, atmega3250, atmega3250a, atmega3250p,
7543
     atmega3250pa, atmega328, atmega328p, atmega329, atmega329a,
7544
     atmega329p, atmega329pa, atmega3290, atmega3290a, atmega3290p,
7545
     atmega3290pa, atmega406, atmega64, atmega640, atmega644,
7546
     atmega644a, atmega644p, atmega644pa, atmega645, atmega645a,
7547
     atmega645p, atmega6450, atmega6450a, atmega6450p, atmega649,
7548
     atmega649a, atmega649p, atmega6490, atmega6490a, atmega6490p,
7549
     atmega16hva, atmega16hva2, atmega16hvb, atmega16hvbrevb,
7550
     atmega32hvb, atmega32hvbrevb, atmega64hve, at90can32, at90can64,
7551
     at90pwm161, at90pwm216, at90pwm316, atmega32c1, atmega64c1,
7552
     atmega16m1, atmega32m1, atmega64m1, atmega16u4, atmega32u4,
7553
     atmega32u6, at90usb646, at90usb647, at94k, at90scr100).
7554
 
7555
     Instruction set avr51 is for the enhanced AVR core with exactly
7556
     128K program memory space (MCU types: atmega128, atmega1280,
7557
     atmega1281, atmega1284p, atmega128rfa1, at90can128, at90usb1286,
7558
     at90usb1287, m3000).
7559
 
7560
     Instruction set avr6 is for the enhanced AVR core with a 3-byte PC
7561
     (MCU types: atmega2560, atmega2561).
7562
 
7563
     Instruction set avrxmega2 is for the XMEGA AVR core with 8K to 64K
7564
     program memory space and less than 64K data space (MCU types:
7565
     atxmega16a4, atxmega16d4, atxmega16x1, atxmega32a4, atxmega32d4,
7566
     atxmega32x1).
7567
 
7568
     Instruction set avrxmega3 is for the XMEGA AVR core with 8K to 64K
7569
     program memory space and greater than 64K data space (MCU types:
7570
     none).
7571
 
7572
     Instruction set avrxmega4 is for the XMEGA AVR core with up to 64K
7573
     program memory space and less than 64K data space (MCU types:
7574
     atxmega64a3, atxmega64d3).
7575
 
7576
     Instruction set avrxmega5 is for the XMEGA AVR core with up to 64K
7577
     program memory space and greater than 64K data space (MCU types:
7578
     atxmega64a1, atxmega64a1u).
7579
 
7580
     Instruction set avrxmega6 is for the XMEGA AVR core with up to
7581
     256K program memory space and less than 64K data space (MCU types:
7582
     atxmega128a3, atxmega128d3, atxmega192a3, atxmega128b1,
7583
     atxmega192d3, atxmega256a3, atxmega256a3b, atxmega256a3bu,
7584
     atxmega192d3).
7585
 
7586
     Instruction set avrxmega7 is for the XMEGA AVR core with up to
7587
     256K program memory space and greater than 64K data space (MCU
7588
     types: atxmega128a1, atxmega128a1u).
7589
 
7590
`-mall-opcodes'
7591
     Accept all AVR opcodes, even if not supported by `-mmcu'.
7592
 
7593
`-mno-skip-bug'
7594
     This option disable warnings for skipping two-word instructions.
7595
 
7596
`-mno-wrap'
7597
     This option reject `rjmp/rcall' instructions with 8K wrap-around.
7598
 
7599
 
7600

7601
File: as.info,  Node: AVR Syntax,  Next: AVR Opcodes,  Prev: AVR Options,  Up: AVR-Dependent
7602
 
7603
9.5.2 Syntax
7604
------------
7605
 
7606
* Menu:
7607
 
7608
* AVR-Chars::                Special Characters
7609
* AVR-Regs::                 Register Names
7610
* AVR-Modifiers::            Relocatable Expression Modifiers
7611
 
7612

7613
File: as.info,  Node: AVR-Chars,  Next: AVR-Regs,  Up: AVR Syntax
7614
 
7615
9.5.2.1 Special Characters
7616
..........................
7617
 
7618
The presence of a `;' anywhere on a line indicates the start of a
7619
comment that extends to the end of that line.
7620
 
7621
   If a `#' appears as the first character of a line, the whole line is
7622
treated as a comment, but in this case the line can also be a logical
7623
line number directive (*note Comments::) or a preprocessor control
7624
command (*note Preprocessing::).
7625
 
7626
   The `$' character can be used instead of a newline to separate
7627
statements.
7628
 
7629

7630
File: as.info,  Node: AVR-Regs,  Next: AVR-Modifiers,  Prev: AVR-Chars,  Up: AVR Syntax
7631
 
7632
9.5.2.2 Register Names
7633
......................
7634
 
7635
The AVR has 32 x 8-bit general purpose working registers `r0', `r1',
7636
... `r31'.  Six of the 32 registers can be used as three 16-bit
7637
indirect address register pointers for Data Space addressing. One of
7638
the these address pointers can also be used as an address pointer for
7639
look up tables in Flash program memory. These added function registers
7640
are the 16-bit `X', `Y' and `Z' - registers.
7641
 
7642
     X = r26:r27
7643
     Y = r28:r29
7644
     Z = r30:r31
7645
 
7646

7647
File: as.info,  Node: AVR-Modifiers,  Prev: AVR-Regs,  Up: AVR Syntax
7648
 
7649
9.5.2.3 Relocatable Expression Modifiers
7650
........................................
7651
 
7652
The assembler supports several modifiers when using relocatable
7653
addresses in AVR instruction operands.  The general syntax is the
7654
following:
7655
 
7656
     modifier(relocatable-expression)
7657
 
7658
`lo8'
7659
     This modifier allows you to use bits 0 through 7 of an address
7660
     expression as 8 bit relocatable expression.
7661
 
7662
`hi8'
7663
     This modifier allows you to use bits 7 through 15 of an address
7664
     expression as 8 bit relocatable expression.  This is useful with,
7665
     for example, the AVR `ldi' instruction and `lo8' modifier.
7666
 
7667
     For example
7668
 
7669
          ldi r26, lo8(sym+10)
7670
          ldi r27, hi8(sym+10)
7671
 
7672
`hh8'
7673
     This modifier allows you to use bits 16 through 23 of an address
7674
     expression as 8 bit relocatable expression.  Also, can be useful
7675
     for loading 32 bit constants.
7676
 
7677
`hlo8'
7678
     Synonym of `hh8'.
7679
 
7680
`hhi8'
7681
     This modifier allows you to use bits 24 through 31 of an
7682
     expression as 8 bit expression. This is useful with, for example,
7683
     the AVR `ldi' instruction and `lo8', `hi8', `hlo8', `hhi8',
7684
     modifier.
7685
 
7686
     For example
7687
 
7688
          ldi r26, lo8(285774925)
7689
          ldi r27, hi8(285774925)
7690
          ldi r28, hlo8(285774925)
7691
          ldi r29, hhi8(285774925)
7692
          ; r29,r28,r27,r26 = 285774925
7693
 
7694
`pm_lo8'
7695
     This modifier allows you to use bits 0 through 7 of an address
7696
     expression as 8 bit relocatable expression.  This modifier useful
7697
     for addressing data or code from Flash/Program memory. The using
7698
     of `pm_lo8' similar to `lo8'.
7699
 
7700
`pm_hi8'
7701
     This modifier allows you to use bits 8 through 15 of an address
7702
     expression as 8 bit relocatable expression.  This modifier useful
7703
     for addressing data or code from Flash/Program memory.
7704
 
7705
`pm_hh8'
7706
     This modifier allows you to use bits 15 through 23 of an address
7707
     expression as 8 bit relocatable expression.  This modifier useful
7708
     for addressing data or code from Flash/Program memory.
7709
 
7710
 
7711

7712
File: as.info,  Node: AVR Opcodes,  Prev: AVR Syntax,  Up: AVR-Dependent
7713
 
7714
9.5.3 Opcodes
7715
-------------
7716
 
7717
For detailed information on the AVR machine instruction set, see
7718
`www.atmel.com/products/AVR'.
7719
 
7720
   `as' implements all the standard AVR opcodes.  The following table
7721
summarizes the AVR opcodes, and their arguments.
7722
 
7723
     Legend:
7724
        r   any register
7725
        d   `ldi' register (r16-r31)
7726
        v   `movw' even register (r0, r2, ..., r28, r30)
7727
        a   `fmul' register (r16-r23)
7728
        w   `adiw' register (r24,r26,r28,r30)
7729
        e   pointer registers (X,Y,Z)
7730
        b   base pointer register and displacement ([YZ]+disp)
7731
        z   Z pointer register (for [e]lpm Rd,Z[+])
7732
        M   immediate value from 0 to 255
7733
        n   immediate value from 0 to 255 ( n = ~M ). Relocation impossible
7734
        s   immediate value from 0 to 7
7735
        P   Port address value from 0 to 63. (in, out)
7736
        p   Port address value from 0 to 31. (cbi, sbi, sbic, sbis)
7737
        K   immediate value from 0 to 63 (used in `adiw', `sbiw')
7738
        i   immediate value
7739
        l   signed pc relative offset from -64 to 63
7740
        L   signed pc relative offset from -2048 to 2047
7741
        h   absolute code address (call, jmp)
7742
        S   immediate value from 0 to 7 (S = s << 4)
7743
        ?   use this opcode entry if no parameters, else use next opcode entry
7744
 
7745
     1001010010001000   clc
7746
     1001010011011000   clh
7747
     1001010011111000   cli
7748
     1001010010101000   cln
7749
     1001010011001000   cls
7750
     1001010011101000   clt
7751
     1001010010111000   clv
7752
     1001010010011000   clz
7753
     1001010000001000   sec
7754
     1001010001011000   seh
7755
     1001010001111000   sei
7756
     1001010000101000   sen
7757
     1001010001001000   ses
7758
     1001010001101000   set
7759
     1001010000111000   sev
7760
     1001010000011000   sez
7761
     100101001SSS1000   bclr    S
7762
     100101000SSS1000   bset    S
7763
     1001010100001001   icall
7764
     1001010000001001   ijmp
7765
     1001010111001000   lpm     ?
7766
     1001000ddddd010+   lpm     r,z
7767
     1001010111011000   elpm    ?
7768
     1001000ddddd011+   elpm    r,z
7769
     0000000000000000   nop
7770
     1001010100001000   ret
7771
     1001010100011000   reti
7772
     1001010110001000   sleep
7773
     1001010110011000   break
7774
     1001010110101000   wdr
7775
     1001010111101000   spm
7776
     000111rdddddrrrr   adc     r,r
7777
     000011rdddddrrrr   add     r,r
7778
     001000rdddddrrrr   and     r,r
7779
     000101rdddddrrrr   cp      r,r
7780
     000001rdddddrrrr   cpc     r,r
7781
     000100rdddddrrrr   cpse    r,r
7782
     001001rdddddrrrr   eor     r,r
7783
     001011rdddddrrrr   mov     r,r
7784
     100111rdddddrrrr   mul     r,r
7785
     001010rdddddrrrr   or      r,r
7786
     000010rdddddrrrr   sbc     r,r
7787
     000110rdddddrrrr   sub     r,r
7788
     001001rdddddrrrr   clr     r
7789
     000011rdddddrrrr   lsl     r
7790
     000111rdddddrrrr   rol     r
7791
     001000rdddddrrrr   tst     r
7792
     0111KKKKddddKKKK   andi    d,M
7793
     0111KKKKddddKKKK   cbr     d,n
7794
     1110KKKKddddKKKK   ldi     d,M
7795
     11101111dddd1111   ser     d
7796
     0110KKKKddddKKKK   ori     d,M
7797
     0110KKKKddddKKKK   sbr     d,M
7798
     0011KKKKddddKKKK   cpi     d,M
7799
     0100KKKKddddKKKK   sbci    d,M
7800
     0101KKKKddddKKKK   subi    d,M
7801
     1111110rrrrr0sss   sbrc    r,s
7802
     1111111rrrrr0sss   sbrs    r,s
7803
     1111100ddddd0sss   bld     r,s
7804
     1111101ddddd0sss   bst     r,s
7805
     10110PPdddddPPPP   in      r,P
7806
     10111PPrrrrrPPPP   out     P,r
7807
     10010110KKddKKKK   adiw    w,K
7808
     10010111KKddKKKK   sbiw    w,K
7809
     10011000pppppsss   cbi     p,s
7810
     10011010pppppsss   sbi     p,s
7811
     10011001pppppsss   sbic    p,s
7812
     10011011pppppsss   sbis    p,s
7813
     111101lllllll000   brcc    l
7814
     111100lllllll000   brcs    l
7815
     111100lllllll001   breq    l
7816
     111101lllllll100   brge    l
7817
     111101lllllll101   brhc    l
7818
     111100lllllll101   brhs    l
7819
     111101lllllll111   brid    l
7820
     111100lllllll111   brie    l
7821
     111100lllllll000   brlo    l
7822
     111100lllllll100   brlt    l
7823
     111100lllllll010   brmi    l
7824
     111101lllllll001   brne    l
7825
     111101lllllll010   brpl    l
7826
     111101lllllll000   brsh    l
7827
     111101lllllll110   brtc    l
7828
     111100lllllll110   brts    l
7829
     111101lllllll011   brvc    l
7830
     111100lllllll011   brvs    l
7831
     111101lllllllsss   brbc    s,l
7832
     111100lllllllsss   brbs    s,l
7833
     1101LLLLLLLLLLLL   rcall   L
7834
     1100LLLLLLLLLLLL   rjmp    L
7835
     1001010hhhhh111h   call    h
7836
     1001010hhhhh110h   jmp     h
7837
     1001010rrrrr0101   asr     r
7838
     1001010rrrrr0000   com     r
7839
     1001010rrrrr1010   dec     r
7840
     1001010rrrrr0011   inc     r
7841
     1001010rrrrr0110   lsr     r
7842
     1001010rrrrr0001   neg     r
7843
     1001000rrrrr1111   pop     r
7844
     1001001rrrrr1111   push    r
7845
     1001010rrrrr0111   ror     r
7846
     1001010rrrrr0010   swap    r
7847
     00000001ddddrrrr   movw    v,v
7848
     00000010ddddrrrr   muls    d,d
7849
     000000110ddd0rrr   mulsu   a,a
7850
     000000110ddd1rrr   fmul    a,a
7851
     000000111ddd0rrr   fmuls   a,a
7852
     000000111ddd1rrr   fmulsu  a,a
7853
     1001001ddddd0000   sts     i,r
7854
     1001000ddddd0000   lds     r,i
7855
     10o0oo0dddddbooo   ldd     r,b
7856
     100!000dddddee-+   ld      r,e
7857
     10o0oo1rrrrrbooo   std     b,r
7858
     100!001rrrrree-+   st      e,r
7859
     1001010100011001   eicall
7860
     1001010000011001   eijmp
7861
 
7862

7863
File: as.info,  Node: Blackfin-Dependent,  Next: CR16-Dependent,  Prev: AVR-Dependent,  Up: Machine Dependencies
7864
 
7865
9.6 Blackfin Dependent Features
7866
===============================
7867
 
7868
* Menu:
7869
 
7870
* Blackfin Options::            Blackfin Options
7871
* Blackfin Syntax::             Blackfin Syntax
7872
* Blackfin Directives::         Blackfin Directives
7873
 
7874

7875
File: as.info,  Node: Blackfin Options,  Next: Blackfin Syntax,  Up: Blackfin-Dependent
7876
 
7877
9.6.1 Options
7878
-------------
7879
 
7880
`-mcpu=PROCESSOR[-SIREVISION]'
7881
     This option specifies the target processor.  The optional
7882
     SIREVISION is not used in assembler.  It's here such that GCC can
7883
     easily pass down its `-mcpu=' option.  The assembler will issue an
7884
     error message if an attempt is made to assemble an instruction
7885
     which will not execute on the target processor.  The following
7886
     processor names are recognized: `bf504', `bf506', `bf512', `bf514',
7887
     `bf516', `bf518', `bf522', `bf523', `bf524', `bf525', `bf526',
7888
     `bf527', `bf531', `bf532', `bf533', `bf534', `bf535' (not
7889
     implemented yet), `bf536', `bf537', `bf538', `bf539', `bf542',
7890
     `bf542m', `bf544', `bf544m', `bf547', `bf547m', `bf548', `bf548m',
7891
     `bf549', `bf549m', `bf561', and `bf592'.
7892
 
7893
`-mfdpic'
7894
     Assemble for the FDPIC ABI.
7895
 
7896
`-mno-fdpic'
7897
`-mnopic'
7898
     Disable -mfdpic.
7899
 
7900

7901
File: as.info,  Node: Blackfin Syntax,  Next: Blackfin Directives,  Prev: Blackfin Options,  Up: Blackfin-Dependent
7902
 
7903
9.6.2 Syntax
7904
------------
7905
 
7906
`Special Characters'
7907
     Assembler input is free format and may appear anywhere on the line.
7908
     One instruction may extend across multiple lines or more than one
7909
     instruction may appear on the same line.  White space (space, tab,
7910
     comments or newline) may appear anywhere between tokens.  A token
7911
     must not have embedded spaces.  Tokens include numbers, register
7912
     names, keywords, user identifiers, and also some multicharacter
7913
     special symbols like "+=", "/*" or "||".
7914
 
7915
     Comments are introduced by the `#' character and extend to the end
7916
     of the current line.  If the `#' appears as the first character of
7917
     a line, the whole line is treated as a comment, but in this case
7918
     the line can also be a logical line number directive (*note
7919
     Comments::) or a preprocessor control command (*note
7920
     Preprocessing::).
7921
 
7922
`Instruction Delimiting'
7923
     A semicolon must terminate every instruction.  Sometimes a complete
7924
     instruction will consist of more than one operation.  There are two
7925
     cases where this occurs.  The first is when two general operations
7926
     are combined.  Normally a comma separates the different parts, as
7927
     in
7928
 
7929
          a0= r3.h * r2.l, a1 = r3.l * r2.h ;
7930
 
7931
     The second case occurs when a general instruction is combined with
7932
     one or two memory references for joint issue.  The latter portions
7933
     are set off by a "||" token.
7934
 
7935
          a0 = r3.h * r2.l || r1 = [p3++] || r4 = [i2++];
7936
 
7937
     Multiple instructions can occur on the same line.  Each must be
7938
     terminated by a semicolon character.
7939
 
7940
`Register Names'
7941
     The assembler treats register names and instruction keywords in a
7942
     case insensitive manner.  User identifiers are case sensitive.
7943
     Thus, R3.l, R3.L, r3.l and r3.L are all equivalent input to the
7944
     assembler.
7945
 
7946
     Register names are reserved and may not be used as program
7947
     identifiers.
7948
 
7949
     Some operations (such as "Move Register") require a register pair.
7950
     Register pairs are always data registers and are denoted using a
7951
     colon, eg., R3:2.  The larger number must be written firsts.  Note
7952
     that the hardware only supports odd-even pairs, eg., R7:6, R5:4,
7953
     R3:2, and R1:0.
7954
 
7955
     Some instructions (such as -SP (Push Multiple)) require a group of
7956
     adjacent registers.  Adjacent registers are denoted in the syntax
7957
     by the range enclosed in parentheses and separated by a colon,
7958
     eg., (R7:3).  Again, the larger number appears first.
7959
 
7960
     Portions of a particular register may be individually specified.
7961
     This is written with a dot (".") following the register name and
7962
     then a letter denoting the desired portion.  For 32-bit registers,
7963
     ".H" denotes the most significant ("High") portion.  ".L" denotes
7964
     the least-significant portion.  The subdivisions of the 40-bit
7965
     registers are described later.
7966
 
7967
`Accumulators'
7968
     The set of 40-bit registers A1 and A0 that normally contain data
7969
     that is being manipulated.  Each accumulator can be accessed in
7970
     four ways.
7971
 
7972
    `one 40-bit register'
7973
          The register will be referred to as A1 or A0.
7974
 
7975
    `one 32-bit register'
7976
          The registers are designated as A1.W or A0.W.
7977
 
7978
    `two 16-bit registers'
7979
          The registers are designated as A1.H, A1.L, A0.H or A0.L.
7980
 
7981
    `one 8-bit register'
7982
          The registers are designated as A1.X or A0.X for the bits that
7983
          extend beyond bit 31.
7984
 
7985
`Data Registers'
7986
     The set of 32-bit registers (R0, R1, R2, R3, R4, R5, R6 and R7)
7987
     that normally contain data for manipulation.  These are
7988
     abbreviated as D-register or Dreg.  Data registers can be accessed
7989
     as 32-bit registers or as two independent 16-bit registers.  The
7990
     least significant 16 bits of each register is called the "low"
7991
     half and is designated with ".L" following the register name.  The
7992
     most significant 16 bits are called the "high" half and is
7993
     designated with ".H" following the name.
7994
 
7995
             R7.L, r2.h, r4.L, R0.H
7996
 
7997
`Pointer Registers'
7998
     The set of 32-bit registers (P0, P1, P2, P3, P4, P5, SP and FP)
7999
     that normally contain byte addresses of data structures.  These are
8000
     abbreviated as P-register or Preg.
8001
 
8002
          p2, p5, fp, sp
8003
 
8004
`Stack Pointer SP'
8005
     The stack pointer contains the 32-bit address of the last occupied
8006
     byte location in the stack.  The stack grows by decrementing the
8007
     stack pointer.
8008
 
8009
`Frame Pointer FP'
8010
     The frame pointer contains the 32-bit address of the previous frame
8011
     pointer in the stack.  It is located at the top of a frame.
8012
 
8013
`Loop Top'
8014
     LT0 and LT1.  These registers contain the 32-bit address of the
8015
     top of a zero overhead loop.
8016
 
8017
`Loop Count'
8018
     LC0 and LC1.  These registers contain the 32-bit counter of the
8019
     zero overhead loop executions.
8020
 
8021
`Loop Bottom'
8022
     LB0 and LB1.  These registers contain the 32-bit address of the
8023
     bottom of a zero overhead loop.
8024
 
8025
`Index Registers'
8026
     The set of 32-bit registers (I0, I1, I2, I3) that normally contain
8027
     byte addresses of data structures.  Abbreviated I-register or Ireg.
8028
 
8029
`Modify Registers'
8030
     The set of 32-bit registers (M0, M1, M2, M3) that normally contain
8031
     offset values that are added and subtracted to one of the index
8032
     registers.  Abbreviated as Mreg.
8033
 
8034
`Length Registers'
8035
     The set of 32-bit registers (L0, L1, L2, L3) that normally contain
8036
     the length in bytes of the circular buffer.  Abbreviated as Lreg.
8037
     Clear the Lreg to disable circular addressing for the
8038
     corresponding Ireg.
8039
 
8040
`Base Registers'
8041
     The set of 32-bit registers (B0, B1, B2, B3) that normally contain
8042
     the base address in bytes of the circular buffer.  Abbreviated as
8043
     Breg.
8044
 
8045
`Floating Point'
8046
     The Blackfin family has no hardware floating point but the .float
8047
     directive generates ieee floating point numbers for use with
8048
     software floating point libraries.
8049
 
8050
`Blackfin Opcodes'
8051
     For detailed information on the Blackfin machine instruction set,
8052
     see the Blackfin(r) Processor Instruction Set Reference.
8053
 
8054
 
8055

8056
File: as.info,  Node: Blackfin Directives,  Prev: Blackfin Syntax,  Up: Blackfin-Dependent
8057
 
8058
9.6.3 Directives
8059
----------------
8060
 
8061
The following directives are provided for compatibility with the VDSP
8062
assembler.
8063
 
8064
`.byte2'
8065
     Initializes a two byte data object.
8066
 
8067
     This maps to the `.short' directive.
8068
 
8069
`.byte4'
8070
     Initializes a four byte data object.
8071
 
8072
     This maps to the `.int' directive.
8073
 
8074
`.db'
8075
     Initializes a single byte data object.
8076
 
8077
     This directive is a synonym for `.byte'.
8078
 
8079
`.dw'
8080
     Initializes a two byte data object.
8081
 
8082
     This directive is a synonym for `.byte2'.
8083
 
8084
`.dd'
8085
     Initializes a four byte data object.
8086
 
8087
     This directive is a synonym for `.byte4'.
8088
 
8089
`.var'
8090
     Define and initialize a 32 bit data object.
8091
 
8092

8093
File: as.info,  Node: CR16-Dependent,  Next: CRIS-Dependent,  Prev: Blackfin-Dependent,  Up: Machine Dependencies
8094
 
8095
9.7 CR16 Dependent Features
8096
===========================
8097
 
8098
* Menu:
8099
 
8100
* CR16 Operand Qualifiers::     CR16 Machine Operand Qualifiers
8101
* CR16 Syntax::                 Syntax for the CR16
8102
 
8103

8104
File: as.info,  Node: CR16 Operand Qualifiers,  Next: CR16 Syntax,  Up: CR16-Dependent
8105
 
8106
9.7.1 CR16 Operand Qualifiers
8107
-----------------------------
8108
 
8109
The National Semiconductor CR16 target of `as' has a few machine
8110
dependent operand qualifiers.
8111
 
8112
   Operand expression type qualifier is an optional field in the
8113
instruction operand, to determines the type of the expression field of
8114
an operand. The `@' is required. CR16 architecture uses one of the
8115
following expression qualifiers:
8116
 
8117
`s'
8118
     - `Specifies expression operand type as small'
8119
 
8120
`m'
8121
     - `Specifies expression operand type as medium'
8122
 
8123
`l'
8124
     - `Specifies expression operand type as large'
8125
 
8126
`c'
8127
     - `Specifies the CR16 Assembler generates a relocation entry for
8128
     the operand, where pc has implied bit, the expression is adjusted
8129
     accordingly. The linker uses the relocation entry to update the
8130
     operand address at link time.'
8131
 
8132
`got/GOT'
8133
     - `Specifies the CR16 Assembler generates a relocation entry for
8134
     the operand, offset from Global Offset Table. The linker uses this
8135
     relocation entry to update the operand address at link time'
8136
 
8137
`cgot/cGOT'
8138
     - `Specifies the CompactRISC Assembler generates a relocation
8139
     entry for the operand, where pc has implied bit, the expression is
8140
     adjusted accordingly. The linker uses the relocation entry to
8141
     update the operand address at link time.'
8142
 
8143
   CR16 target operand qualifiers and its size (in bits):
8144
 
8145
`Immediate Operand'
8146
     - s --- 4 bits
8147
 
8148
`'
8149
     - m --- 16 bits, for movb and movw instructions.
8150
 
8151
`'
8152
     - m --- 20 bits, movd instructions.
8153
 
8154
`'
8155
     - l --- 32 bits
8156
 
8157
`Absolute Operand'
8158
     - s --- Illegal specifier for this operand.
8159
 
8160
`'
8161
     - m --- 20 bits, movd instructions.
8162
 
8163
`Displacement Operand'
8164
     - s --- 8 bits
8165
 
8166
`'
8167
     - m --- 16 bits
8168
 
8169
`'
8170
     - l --- 24 bits
8171
 
8172
   For example:
8173
     1   `movw $_myfun@c,r1'
8174
 
8175
         This loads the address of _myfun, shifted right by 1, into r1.
8176
 
8177
     2   `movd $_myfun@c,(r2,r1)'
8178
 
8179
         This loads the address of _myfun, shifted right by 1, into register-pair r2-r1.
8180
 
8181
     3   `_myfun_ptr:'
8182
         `.long _myfun@c'
8183
         `loadd _myfun_ptr, (r1,r0)'
8184
         `jal (r1,r0)'
8185
 
8186
         This .long directive, the address of _myfunc, shifted right by 1 at link time.
8187
 
8188
     4   `loadd  _data1@GOT(r12), (r1,r0)'
8189
 
8190
         This loads the address of _data1, into global offset table (ie GOT) and its offset value from GOT loads into register-pair r2-r1.
8191
 
8192
     5   `loadd  _myfunc@cGOT(r12), (r1,r0)'
8193
 
8194
         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.
8195
 
8196

8197
File: as.info,  Node: CR16 Syntax,  Prev: CR16 Operand Qualifiers,  Up: CR16-Dependent
8198
 
8199
9.7.2 CR16 Syntax
8200
-----------------
8201
 
8202
* Menu:
8203
 
8204
* CR16-Chars::                Special Characters
8205
 
8206

8207
File: as.info,  Node: CR16-Chars,  Up: CR16 Syntax
8208
 
8209
9.7.2.1 Special Characters
8210
..........................
8211
 
8212
The presence of a `#' on a line indicates the start of a comment that
8213
extends to the end of the current line.  If the `#' appears as the
8214
first character of a line, the whole line is treated as a comment, but
8215
in this case the line can also be a logical line number directive
8216
(*note Comments::) or a preprocessor control command (*note
8217
Preprocessing::).
8218
 
8219
   The `;' character can be used to separate statements on the same
8220
line.
8221
 
8222

8223
File: as.info,  Node: CRIS-Dependent,  Next: D10V-Dependent,  Prev: CR16-Dependent,  Up: Machine Dependencies
8224
 
8225
9.8 CRIS Dependent Features
8226
===========================
8227
 
8228
* Menu:
8229
 
8230
* CRIS-Opts::              Command-line Options
8231
* CRIS-Expand::            Instruction expansion
8232
* CRIS-Symbols::           Symbols
8233
* CRIS-Syntax::            Syntax
8234
 
8235

8236
File: as.info,  Node: CRIS-Opts,  Next: CRIS-Expand,  Up: CRIS-Dependent
8237
 
8238
9.8.1 Command-line Options
8239
--------------------------
8240
 
8241
The CRIS version of `as' has these machine-dependent command-line
8242
options.
8243
 
8244
   The format of the generated object files can be either ELF or a.out,
8245
specified by the command-line options `--emulation=crisaout' and
8246
`--emulation=criself'.  The default is ELF (criself), unless `as' has
8247
been configured specifically for a.out by using the configuration name
8248
`cris-axis-aout'.
8249
 
8250
   There are two different link-incompatible ELF object file variants
8251
for CRIS, for use in environments where symbols are expected to be
8252
prefixed by a leading `_' character and for environments without such a
8253
symbol prefix.  The variant used for GNU/Linux port has no symbol
8254
prefix.  Which variant to produce is specified by either of the options
8255
`--underscore' and `--no-underscore'.  The default is `--underscore'.
8256
Since symbols in CRIS a.out objects are expected to have a `_' prefix,
8257
specifying `--no-underscore' when generating a.out objects is an error.
8258
Besides the object format difference, the effect of this option is to
8259
parse register names differently (*note crisnous::).  The
8260
`--no-underscore' option makes a `$' register prefix mandatory.
8261
 
8262
   The option `--pic' must be passed to `as' in order to recognize the
8263
symbol syntax used for ELF (SVR4 PIC) position-independent-code (*note
8264
crispic::).  This will also affect expansion of instructions.  The
8265
expansion with `--pic' will use PC-relative rather than (slightly
8266
faster) absolute addresses in those expansions.  This option is only
8267
valid when generating ELF format object files.
8268
 
8269
   The option `--march=ARCHITECTURE' specifies the recognized
8270
instruction set and recognized register names.  It also controls the
8271
architecture type of the object file.  Valid values for ARCHITECTURE
8272
are:
8273
`v0_v10'
8274
     All instructions and register names for any architecture variant
8275
     in the set v0...v10 are recognized.  This is the default if the
8276
     target is configured as cris-*.
8277
 
8278
`v10'
8279
     Only instructions and register names for CRIS v10 (as found in
8280
     ETRAX 100 LX) are recognized.  This is the default if the target
8281
     is configured as crisv10-*.
8282
 
8283
`v32'
8284
     Only instructions and register names for CRIS v32 (code name
8285
     Guinness) are recognized.  This is the default if the target is
8286
     configured as crisv32-*.  This value implies `--no-mul-bug-abort'.
8287
     (A subsequent `--mul-bug-abort' will turn it back on.)
8288
 
8289
`common_v10_v32'
8290
     Only instructions with register names and addressing modes with
8291
     opcodes common to the v10 and v32 are recognized.
8292
 
8293
   When `-N' is specified, `as' will emit a warning when a 16-bit
8294
branch instruction is expanded into a 32-bit multiple-instruction
8295
construct (*note CRIS-Expand::).
8296
 
8297
   Some versions of the CRIS v10, for example in the Etrax 100 LX,
8298
contain a bug that causes destabilizing memory accesses when a multiply
8299
instruction is executed with certain values in the first operand just
8300
before a cache-miss.  When the `--mul-bug-abort' command line option is
8301
active (the default value), `as' will refuse to assemble a file
8302
containing a multiply instruction at a dangerous offset, one that could
8303
be the last on a cache-line, or is in a section with insufficient
8304
alignment.  This placement checking does not catch any case where the
8305
multiply instruction is dangerously placed because it is located in a
8306
delay-slot.  The `--mul-bug-abort' command line option turns off the
8307
checking.
8308
 
8309

8310
File: as.info,  Node: CRIS-Expand,  Next: CRIS-Symbols,  Prev: CRIS-Opts,  Up: CRIS-Dependent
8311
 
8312
9.8.2 Instruction expansion
8313
---------------------------
8314
 
8315
`as' will silently choose an instruction that fits the operand size for
8316
`[register+constant]' operands.  For example, the offset `127' in
8317
`move.d [r3+127],r4' fits in an instruction using a signed-byte offset.
8318
Similarly, `move.d [r2+32767],r1' will generate an instruction using a
8319
16-bit offset.  For symbolic expressions and constants that do not fit
8320
in 16 bits including the sign bit, a 32-bit offset is generated.
8321
 
8322
   For branches, `as' will expand from a 16-bit branch instruction into
8323
a sequence of instructions that can reach a full 32-bit address.  Since
8324
this does not correspond to a single instruction, such expansions can
8325
optionally be warned about.  *Note CRIS-Opts::.
8326
 
8327
   If the operand is found to fit the range, a `lapc' mnemonic will
8328
translate to a `lapcq' instruction.  Use `lapc.d' to force the 32-bit
8329
`lapc' instruction.
8330
 
8331
   Similarly, the `addo' mnemonic will translate to the shortest
8332
fitting instruction of `addoq', `addo.w' and `addo.d', when used with a
8333
operand that is a constant known at assembly time.
8334
 
8335

8336
File: as.info,  Node: CRIS-Symbols,  Next: CRIS-Syntax,  Prev: CRIS-Expand,  Up: CRIS-Dependent
8337
 
8338
9.8.3 Symbols
8339
-------------
8340
 
8341
Some symbols are defined by the assembler.  They're intended to be used
8342
in conditional assembly, for example:
8343
      .if ..asm.arch.cris.v32
8344
      CODE FOR CRIS V32
8345
      .elseif ..asm.arch.cris.common_v10_v32
8346
      CODE COMMON TO CRIS V32 AND CRIS V10
8347
      .elseif ..asm.arch.cris.v10 | ..asm.arch.cris.any_v0_v10
8348
      CODE FOR V10
8349
      .else
8350
      .error "Code needs to be added here."
8351
      .endif
8352
 
8353
   These symbols are defined in the assembler, reflecting command-line
8354
options, either when specified or the default.  They are always
8355
defined, to 0 or 1.
8356
`..asm.arch.cris.any_v0_v10'
8357
     This symbol is non-zero when `--march=v0_v10' is specified or the
8358
     default.
8359
 
8360
`..asm.arch.cris.common_v10_v32'
8361
     Set according to the option `--march=common_v10_v32'.
8362
 
8363
`..asm.arch.cris.v10'
8364
     Reflects the option `--march=v10'.
8365
 
8366
`..asm.arch.cris.v32'
8367
     Corresponds to `--march=v10'.
8368
 
8369
   Speaking of symbols, when a symbol is used in code, it can have a
8370
suffix modifying its value for use in position-independent code. *Note
8371
CRIS-Pic::.
8372
 
8373

8374
File: as.info,  Node: CRIS-Syntax,  Prev: CRIS-Symbols,  Up: CRIS-Dependent
8375
 
8376
9.8.4 Syntax
8377
------------
8378
 
8379
There are different aspects of the CRIS assembly syntax.
8380
 
8381
* Menu:
8382
 
8383
* CRIS-Chars::                  Special Characters
8384
* CRIS-Pic::                    Position-Independent Code Symbols
8385
* CRIS-Regs::                   Register Names
8386
* CRIS-Pseudos::                Assembler Directives
8387
 
8388

8389
File: as.info,  Node: CRIS-Chars,  Next: CRIS-Pic,  Up: CRIS-Syntax
8390
 
8391
9.8.4.1 Special Characters
8392
..........................
8393
 
8394
The character `#' is a line comment character.  It starts a comment if
8395
and only if it is placed at the beginning of a line.
8396
 
8397
   A `;' character starts a comment anywhere on the line, causing all
8398
characters up to the end of the line to be ignored.
8399
 
8400
   A `@' character is handled as a line separator equivalent to a
8401
logical new-line character (except in a comment), so separate
8402
instructions can be specified on a single line.
8403
 
8404

8405
File: as.info,  Node: CRIS-Pic,  Next: CRIS-Regs,  Prev: CRIS-Chars,  Up: CRIS-Syntax
8406
 
8407
9.8.4.2 Symbols in position-independent code
8408
............................................
8409
 
8410
When generating position-independent code (SVR4 PIC) for use in
8411
cris-axis-linux-gnu or crisv32-axis-linux-gnu shared libraries, symbol
8412
suffixes are used to specify what kind of run-time symbol lookup will
8413
be used, expressed in the object as different _relocation types_.
8414
Usually, all absolute symbol values must be located in a table, the
8415
_global offset table_, leaving the code position-independent;
8416
independent of values of global symbols and independent of the address
8417
of the code.  The suffix modifies the value of the symbol, into for
8418
example an index into the global offset table where the real symbol
8419
value is entered, or a PC-relative value, or a value relative to the
8420
start of the global offset table.  All symbol suffixes start with the
8421
character `:' (omitted in the list below).  Every symbol use in code or
8422
a read-only section must therefore have a PIC suffix to enable a useful
8423
shared library to be created.  Usually, these constructs must not be
8424
used with an additive constant offset as is usually allowed, i.e. no 4
8425
as in `symbol + 4' is allowed.  This restriction is checked at
8426
link-time, not at assembly-time.
8427
 
8428
`GOT'
8429
     Attaching this suffix to a symbol in an instruction causes the
8430
     symbol to be entered into the global offset table.  The value is a
8431
     32-bit index for that symbol into the global offset table.  The
8432
     name of the corresponding relocation is `R_CRIS_32_GOT'.  Example:
8433
     `move.d [$r0+extsym:GOT],$r9'
8434
 
8435
`GOT16'
8436
     Same as for `GOT', but the value is a 16-bit index into the global
8437
     offset table.  The corresponding relocation is `R_CRIS_16_GOT'.
8438
     Example: `move.d [$r0+asymbol:GOT16],$r10'
8439
 
8440
`PLT'
8441
     This suffix is used for function symbols.  It causes a _procedure
8442
     linkage table_, an array of code stubs, to be created at the time
8443
     the shared object is created or linked against, together with a
8444
     global offset table entry.  The value is a pc-relative offset to
8445
     the corresponding stub code in the procedure linkage table.  This
8446
     arrangement causes the run-time symbol resolver to be called to
8447
     look up and set the value of the symbol the first time the
8448
     function is called (at latest; depending environment variables).
8449
     It is only safe to leave the symbol unresolved this way if all
8450
     references are function calls.  The name of the relocation is
8451
     `R_CRIS_32_PLT_PCREL'.  Example: `add.d fnname:PLT,$pc'
8452
 
8453
`PLTG'
8454
     Like PLT, but the value is relative to the beginning of the global
8455
     offset table.  The relocation is `R_CRIS_32_PLT_GOTREL'.  Example:
8456
     `move.d fnname:PLTG,$r3'
8457
 
8458
`GOTPLT'
8459
     Similar to `PLT', but the value of the symbol is a 32-bit index
8460
     into the global offset table.  This is somewhat of a mix between
8461
     the effect of the `GOT' and the `PLT' suffix; the difference to
8462
     `GOT' is that there will be a procedure linkage table entry
8463
     created, and that the symbol is assumed to be a function entry and
8464
     will be resolved by the run-time resolver as with `PLT'.  The
8465
     relocation is `R_CRIS_32_GOTPLT'.  Example: `jsr
8466
     [$r0+fnname:GOTPLT]'
8467
 
8468
`GOTPLT16'
8469
     A variant of `GOTPLT' giving a 16-bit value.  Its relocation name
8470
     is `R_CRIS_16_GOTPLT'.  Example: `jsr [$r0+fnname:GOTPLT16]'
8471
 
8472
`GOTOFF'
8473
     This suffix must only be attached to a local symbol, but may be
8474
     used in an expression adding an offset.  The value is the address
8475
     of the symbol relative to the start of the global offset table.
8476
     The relocation name is `R_CRIS_32_GOTREL'.  Example: `move.d
8477
     [$r0+localsym:GOTOFF],r3'
8478
 
8479

8480
File: as.info,  Node: CRIS-Regs,  Next: CRIS-Pseudos,  Prev: CRIS-Pic,  Up: CRIS-Syntax
8481
 
8482
9.8.4.3 Register names
8483
......................
8484
 
8485
A `$' character may always prefix a general or special register name in
8486
an instruction operand but is mandatory when the option
8487
`--no-underscore' is specified or when the `.syntax register_prefix'
8488
directive is in effect (*note crisnous::).  Register names are
8489
case-insensitive.
8490
 
8491

8492
File: as.info,  Node: CRIS-Pseudos,  Prev: CRIS-Regs,  Up: CRIS-Syntax
8493
 
8494
9.8.4.4 Assembler Directives
8495
............................
8496
 
8497
There are a few CRIS-specific pseudo-directives in addition to the
8498
generic ones.  *Note Pseudo Ops::.  Constants emitted by
8499
pseudo-directives are in little-endian order for CRIS.  There is no
8500
support for floating-point-specific directives for CRIS.
8501
 
8502
`.dword EXPRESSIONS'
8503
     The `.dword' directive is a synonym for `.int', expecting zero or
8504
     more EXPRESSIONS, separated by commas.  For each expression, a
8505
     32-bit little-endian constant is emitted.
8506
 
8507
`.syntax ARGUMENT'
8508
     The `.syntax' directive takes as ARGUMENT one of the following
8509
     case-sensitive choices.
8510
 
8511
    `no_register_prefix'
8512
          The `.syntax no_register_prefix' directive makes a `$'
8513
          character prefix on all registers optional.  It overrides a
8514
          previous setting, including the corresponding effect of the
8515
          option `--no-underscore'.  If this directive is used when
8516
          ordinary symbols do not have a `_' character prefix, care
8517
          must be taken to avoid ambiguities whether an operand is a
8518
          register or a symbol; using symbols with names the same as
8519
          general or special registers then invoke undefined behavior.
8520
 
8521
    `register_prefix'
8522
          This directive makes a `$' character prefix on all registers
8523
          mandatory.  It overrides a previous setting, including the
8524
          corresponding effect of the option `--underscore'.
8525
 
8526
    `leading_underscore'
8527
          This is an assertion directive, emitting an error if the
8528
          `--no-underscore' option is in effect.
8529
 
8530
    `no_leading_underscore'
8531
          This is the opposite of the `.syntax leading_underscore'
8532
          directive and emits an error if the option `--underscore' is
8533
          in effect.
8534
 
8535
`.arch ARGUMENT'
8536
     This is an assertion directive, giving an error if the specified
8537
     ARGUMENT is not the same as the specified or default value for the
8538
     `--march=ARCHITECTURE' option (*note march-option::).
8539
 
8540
 
8541

8542
File: as.info,  Node: D10V-Dependent,  Next: D30V-Dependent,  Prev: CRIS-Dependent,  Up: Machine Dependencies
8543
 
8544
9.9 D10V Dependent Features
8545
===========================
8546
 
8547
* Menu:
8548
 
8549
* D10V-Opts::                   D10V Options
8550
* D10V-Syntax::                 Syntax
8551
* D10V-Float::                  Floating Point
8552
* D10V-Opcodes::                Opcodes
8553
 
8554

8555
File: as.info,  Node: D10V-Opts,  Next: D10V-Syntax,  Up: D10V-Dependent
8556
 
8557
9.9.1 D10V Options
8558
------------------
8559
 
8560
The Mitsubishi D10V version of `as' has a few machine dependent options.
8561
 
8562
`-O'
8563
     The D10V can often execute two sub-instructions in parallel. When
8564
     this option is used, `as' will attempt to optimize its output by
8565
     detecting when instructions can be executed in parallel.
8566
 
8567
`--nowarnswap'
8568
     To optimize execution performance, `as' will sometimes swap the
8569
     order of instructions. Normally this generates a warning. When
8570
     this option is used, no warning will be generated when
8571
     instructions are swapped.
8572
 
8573
`--gstabs-packing'
8574
`--no-gstabs-packing'
8575
     `as' packs adjacent short instructions into a single packed
8576
     instruction. `--no-gstabs-packing' turns instruction packing off if
8577
     `--gstabs' is specified as well; `--gstabs-packing' (the default)
8578
     turns instruction packing on even when `--gstabs' is specified.
8579
 
8580

8581
File: as.info,  Node: D10V-Syntax,  Next: D10V-Float,  Prev: D10V-Opts,  Up: D10V-Dependent
8582
 
8583
9.9.2 Syntax
8584
------------
8585
 
8586
The D10V syntax is based on the syntax in Mitsubishi's D10V
8587
architecture manual.  The differences are detailed below.
8588
 
8589
* Menu:
8590
 
8591
* D10V-Size::                 Size Modifiers
8592
* D10V-Subs::                 Sub-Instructions
8593
* D10V-Chars::                Special Characters
8594
* D10V-Regs::                 Register Names
8595
* D10V-Addressing::           Addressing Modes
8596
* D10V-Word::                 @WORD Modifier
8597
 
8598

8599
File: as.info,  Node: D10V-Size,  Next: D10V-Subs,  Up: D10V-Syntax
8600
 
8601
9.9.2.1 Size Modifiers
8602
......................
8603
 
8604
The D10V version of `as' uses the instruction names in the D10V
8605
Architecture Manual.  However, the names in the manual are sometimes
8606
ambiguous.  There are instruction names that can assemble to a short or
8607
long form opcode.  How does the assembler pick the correct form?  `as'
8608
will always pick the smallest form if it can.  When dealing with a
8609
symbol that is not defined yet when a line is being assembled, it will
8610
always use the long form.  If you need to force the assembler to use
8611
either the short or long form of the instruction, you can append either
8612
`.s' (short) or `.l' (long) to it.  For example, if you are writing an
8613
assembly program and you want to do a branch to a symbol that is
8614
defined later in your program, you can write `bra.s   foo'.  Objdump
8615
and GDB will always append `.s' or `.l' to instructions which have both
8616
short and long forms.
8617
 
8618

8619
File: as.info,  Node: D10V-Subs,  Next: D10V-Chars,  Prev: D10V-Size,  Up: D10V-Syntax
8620
 
8621
9.9.2.2 Sub-Instructions
8622
........................
8623
 
8624
The D10V assembler takes as input a series of instructions, either
8625
one-per-line, or in the special two-per-line format described in the
8626
next section.  Some of these instructions will be short-form or
8627
sub-instructions.  These sub-instructions can be packed into a single
8628
instruction.  The assembler will do this automatically.  It will also
8629
detect when it should not pack instructions.  For example, when a label
8630
is defined, the next instruction will never be packaged with the
8631
previous one.  Whenever a branch and link instruction is called, it
8632
will not be packaged with the next instruction so the return address
8633
will be valid.  Nops are automatically inserted when necessary.
8634
 
8635
   If you do not want the assembler automatically making these
8636
decisions, you can control the packaging and execution type (parallel
8637
or sequential) with the special execution symbols described in the next
8638
section.
8639
 
8640

8641
File: as.info,  Node: D10V-Chars,  Next: D10V-Regs,  Prev: D10V-Subs,  Up: D10V-Syntax
8642
 
8643
9.9.2.3 Special Characters
8644
..........................
8645
 
8646
A semicolon (`;') can be used anywhere on a line to start a comment
8647
that extends to the end of the line.
8648
 
8649
   If a `#' appears as the first character of a line, the whole line is
8650
treated as a comment, but in this case the line could also be a logical
8651
line number directive (*note Comments::) or a preprocessor control
8652
command (*note Preprocessing::).
8653
 
8654
   Sub-instructions may be executed in order, in reverse-order, or in
8655
parallel.  Instructions listed in the standard one-per-line format will
8656
be executed sequentially.  To specify the executing order, use the
8657
following symbols:
8658
`->'
8659
     Sequential with instruction on the left first.
8660
 
8661
`<-'
8662
     Sequential with instruction on the right first.
8663
 
8664
`||'
8665
     Parallel
8666
   The D10V syntax allows either one instruction per line, one
8667
instruction per line with the execution symbol, or two instructions per
8668
line.  For example
8669
`abs       a1      ->      abs     r0'
8670
     Execute these sequentially.  The instruction on the right is in
8671
     the right container and is executed second.
8672
 
8673
`abs       r0      <-      abs     a1'
8674
     Execute these reverse-sequentially.  The instruction on the right
8675
     is in the right container, and is executed first.
8676
 
8677
`ld2w    r2,@r8+         ||      mac     a0,r0,r7'
8678
     Execute these in parallel.
8679
 
8680
`ld2w    r2,@r8+         ||'
8681
`mac     a0,r0,r7'
8682
     Two-line format. Execute these in parallel.
8683
 
8684
`ld2w    r2,@r8+'
8685
`mac     a0,r0,r7'
8686
     Two-line format. Execute these sequentially.  Assembler will put
8687
     them in the proper containers.
8688
 
8689
`ld2w    r2,@r8+         ->'
8690
`mac     a0,r0,r7'
8691
     Two-line format. Execute these sequentially.  Same as above but
8692
     second instruction will always go into right container.
8693
   Since `$' has no special meaning, you may use it in symbol names.
8694
 
8695

8696
File: as.info,  Node: D10V-Regs,  Next: D10V-Addressing,  Prev: D10V-Chars,  Up: D10V-Syntax
8697
 
8698
9.9.2.4 Register Names
8699
......................
8700
 
8701
You can use the predefined symbols `r0' through `r15' to refer to the
8702
D10V registers.  You can also use `sp' as an alias for `r15'.  The
8703
accumulators are `a0' and `a1'.  There are special register-pair names
8704
that may optionally be used in opcodes that require even-numbered
8705
registers. Register names are not case sensitive.
8706
 
8707
   Register Pairs
8708
`r0-r1'
8709
 
8710
`r2-r3'
8711
 
8712
`r4-r5'
8713
 
8714
`r6-r7'
8715
 
8716
`r8-r9'
8717
 
8718
`r10-r11'
8719
 
8720
`r12-r13'
8721
 
8722
`r14-r15'
8723
 
8724
   The D10V also has predefined symbols for these control registers and
8725
status bits:
8726
`psw'
8727
     Processor Status Word
8728
 
8729
`bpsw'
8730
     Backup Processor Status Word
8731
 
8732
`pc'
8733
     Program Counter
8734
 
8735
`bpc'
8736
     Backup Program Counter
8737
 
8738
`rpt_c'
8739
     Repeat Count
8740
 
8741
`rpt_s'
8742
     Repeat Start address
8743
 
8744
`rpt_e'
8745
     Repeat End address
8746
 
8747
`mod_s'
8748
     Modulo Start address
8749
 
8750
`mod_e'
8751
     Modulo End address
8752
 
8753
`iba'
8754
     Instruction Break Address
8755
 
8756
`f0'
8757
     Flag 0
8758
 
8759
`f1'
8760
     Flag 1
8761
 
8762
`c'
8763
     Carry flag
8764
 
8765

8766
File: as.info,  Node: D10V-Addressing,  Next: D10V-Word,  Prev: D10V-Regs,  Up: D10V-Syntax
8767
 
8768
9.9.2.5 Addressing Modes
8769
........................
8770
 
8771
`as' understands the following addressing modes for the D10V.  `RN' in
8772
the following refers to any of the numbered registers, but _not_ the
8773
control registers.
8774
`RN'
8775
     Register direct
8776
 
8777
`@RN'
8778
     Register indirect
8779
 
8780
`@RN+'
8781
     Register indirect with post-increment
8782
 
8783
`@RN-'
8784
     Register indirect with post-decrement
8785
 
8786
`@-SP'
8787
     Register indirect with pre-decrement
8788
 
8789
`@(DISP, RN)'
8790
     Register indirect with displacement
8791
 
8792
`ADDR'
8793
     PC relative address (for branch or rep).
8794
 
8795
`#IMM'
8796
     Immediate data (the `#' is optional and ignored)
8797
 
8798

8799
File: as.info,  Node: D10V-Word,  Prev: D10V-Addressing,  Up: D10V-Syntax
8800
 
8801
9.9.2.6 @WORD Modifier
8802
......................
8803
 
8804
Any symbol followed by `@word' will be replaced by the symbol's value
8805
shifted right by 2.  This is used in situations such as loading a
8806
register with the address of a function (or any other code fragment).
8807
For example, if you want to load a register with the location of the
8808
function `main' then jump to that function, you could do it as follows:
8809
     ldi     r2, main@word
8810
     jmp     r2
8811
 
8812

8813
File: as.info,  Node: D10V-Float,  Next: D10V-Opcodes,  Prev: D10V-Syntax,  Up: D10V-Dependent
8814
 
8815
9.9.3 Floating Point
8816
--------------------
8817
 
8818
The D10V has no hardware floating point, but the `.float' and `.double'
8819
directives generates IEEE floating-point numbers for compatibility with
8820
other development tools.
8821
 
8822

8823
File: as.info,  Node: D10V-Opcodes,  Prev: D10V-Float,  Up: D10V-Dependent
8824
 
8825
9.9.4 Opcodes
8826
-------------
8827
 
8828
For detailed information on the D10V machine instruction set, see `D10V
8829
Architecture: A VLIW Microprocessor for Multimedia Applications'
8830
(Mitsubishi Electric Corp.).  `as' implements all the standard D10V
8831
opcodes.  The only changes are those described in the section on size
8832
modifiers
8833
 
8834

8835
File: as.info,  Node: D30V-Dependent,  Next: Epiphany-Dependent,  Prev: D10V-Dependent,  Up: Machine Dependencies
8836
 
8837
9.10 D30V Dependent Features
8838
============================
8839
 
8840
* Menu:
8841
 
8842
* D30V-Opts::                   D30V Options
8843
* D30V-Syntax::                 Syntax
8844
* D30V-Float::                  Floating Point
8845
* D30V-Opcodes::                Opcodes
8846
 
8847

8848
File: as.info,  Node: D30V-Opts,  Next: D30V-Syntax,  Up: D30V-Dependent
8849
 
8850
9.10.1 D30V Options
8851
-------------------
8852
 
8853
The Mitsubishi D30V version of `as' has a few machine dependent options.
8854
 
8855
`-O'
8856
     The D30V can often execute two sub-instructions in parallel. When
8857
     this option is used, `as' will attempt to optimize its output by
8858
     detecting when instructions can be executed in parallel.
8859
 
8860
`-n'
8861
     When this option is used, `as' will issue a warning every time it
8862
     adds a nop instruction.
8863
 
8864
`-N'
8865
     When this option is used, `as' will issue a warning if it needs to
8866
     insert a nop after a 32-bit multiply before a load or 16-bit
8867
     multiply instruction.
8868
 
8869

8870
File: as.info,  Node: D30V-Syntax,  Next: D30V-Float,  Prev: D30V-Opts,  Up: D30V-Dependent
8871
 
8872
9.10.2 Syntax
8873
-------------
8874
 
8875
The D30V syntax is based on the syntax in Mitsubishi's D30V
8876
architecture manual.  The differences are detailed below.
8877
 
8878
* Menu:
8879
 
8880
* D30V-Size::                 Size Modifiers
8881
* D30V-Subs::                 Sub-Instructions
8882
* D30V-Chars::                Special Characters
8883
* D30V-Guarded::              Guarded Execution
8884
* D30V-Regs::                 Register Names
8885
* D30V-Addressing::           Addressing Modes
8886
 
8887

8888
File: as.info,  Node: D30V-Size,  Next: D30V-Subs,  Up: D30V-Syntax
8889
 
8890
9.10.2.1 Size Modifiers
8891
.......................
8892
 
8893
The D30V version of `as' uses the instruction names in the D30V
8894
Architecture Manual.  However, the names in the manual are sometimes
8895
ambiguous.  There are instruction names that can assemble to a short or
8896
long form opcode.  How does the assembler pick the correct form?  `as'
8897
will always pick the smallest form if it can.  When dealing with a
8898
symbol that is not defined yet when a line is being assembled, it will
8899
always use the long form.  If you need to force the assembler to use
8900
either the short or long form of the instruction, you can append either
8901
`.s' (short) or `.l' (long) to it.  For example, if you are writing an
8902
assembly program and you want to do a branch to a symbol that is
8903
defined later in your program, you can write `bra.s foo'.  Objdump and
8904
GDB will always append `.s' or `.l' to instructions which have both
8905
short and long forms.
8906
 
8907

8908
File: as.info,  Node: D30V-Subs,  Next: D30V-Chars,  Prev: D30V-Size,  Up: D30V-Syntax
8909
 
8910
9.10.2.2 Sub-Instructions
8911
.........................
8912
 
8913
The D30V assembler takes as input a series of instructions, either
8914
one-per-line, or in the special two-per-line format described in the
8915
next section.  Some of these instructions will be short-form or
8916
sub-instructions.  These sub-instructions can be packed into a single
8917
instruction.  The assembler will do this automatically.  It will also
8918
detect when it should not pack instructions.  For example, when a label
8919
is defined, the next instruction will never be packaged with the
8920
previous one.  Whenever a branch and link instruction is called, it
8921
will not be packaged with the next instruction so the return address
8922
will be valid.  Nops are automatically inserted when necessary.
8923
 
8924
   If you do not want the assembler automatically making these
8925
decisions, you can control the packaging and execution type (parallel
8926
or sequential) with the special execution symbols described in the next
8927
section.
8928
 
8929

8930
File: as.info,  Node: D30V-Chars,  Next: D30V-Guarded,  Prev: D30V-Subs,  Up: D30V-Syntax
8931
 
8932
9.10.2.3 Special Characters
8933
...........................
8934
 
8935
A semicolon (`;') can be used anywhere on a line to start a comment
8936
that extends to the end of the line.
8937
 
8938
   If a `#' appears as the first character of a line, the whole line is
8939
treated as a comment, but in this case the line could also be a logical
8940
line number directive (*note Comments::) or a preprocessor control
8941
command (*note Preprocessing::).
8942
 
8943
   Sub-instructions may be executed in order, in reverse-order, or in
8944
parallel.  Instructions listed in the standard one-per-line format will
8945
be executed sequentially unless you use the `-O' option.
8946
 
8947
   To specify the executing order, use the following symbols:
8948
`->'
8949
     Sequential with instruction on the left first.
8950
 
8951
`<-'
8952
     Sequential with instruction on the right first.
8953
 
8954
`||'
8955
     Parallel
8956
 
8957
   The D30V syntax allows either one instruction per line, one
8958
instruction per line with the execution symbol, or two instructions per
8959
line.  For example
8960
`abs r2,r3 -> abs r4,r5'
8961
     Execute these sequentially.  The instruction on the right is in
8962
     the right container and is executed second.
8963
 
8964
`abs r2,r3 <- abs r4,r5'
8965
     Execute these reverse-sequentially.  The instruction on the right
8966
     is in the right container, and is executed first.
8967
 
8968
`abs r2,r3 || abs r4,r5'
8969
     Execute these in parallel.
8970
 
8971
`ldw r2,@(r3,r4) ||'
8972
`mulx r6,r8,r9'
8973
     Two-line format. Execute these in parallel.
8974
 
8975
`mulx a0,r8,r9'
8976
`stw r2,@(r3,r4)'
8977
     Two-line format. Execute these sequentially unless `-O' option is
8978
     used.  If the `-O' option is used, the assembler will determine if
8979
     the instructions could be done in parallel (the above two
8980
     instructions can be done in parallel), and if so, emit them as
8981
     parallel instructions.  The assembler will put them in the proper
8982
     containers.  In the above example, the assembler will put the
8983
     `stw' instruction in left container and the `mulx' instruction in
8984
     the right container.
8985
 
8986
`stw r2,@(r3,r4) ->'
8987
`mulx a0,r8,r9'
8988
     Two-line format.  Execute the `stw' instruction followed by the
8989
     `mulx' instruction sequentially.  The first instruction goes in the
8990
     left container and the second instruction goes into right
8991
     container.  The assembler will give an error if the machine
8992
     ordering constraints are violated.
8993
 
8994
`stw r2,@(r3,r4) <-'
8995
`mulx a0,r8,r9'
8996
     Same as previous example, except that the `mulx' instruction is
8997
     executed before the `stw' instruction.
8998
 
8999
   Since `$' has no special meaning, you may use it in symbol names.
9000
 
9001

9002
File: as.info,  Node: D30V-Guarded,  Next: D30V-Regs,  Prev: D30V-Chars,  Up: D30V-Syntax
9003
 
9004
9.10.2.4 Guarded Execution
9005
..........................
9006
 
9007
`as' supports the full range of guarded execution directives for each
9008
instruction.  Just append the directive after the instruction proper.
9009
The directives are:
9010
 
9011
`/tx'
9012
     Execute the instruction if flag f0 is true.
9013
 
9014
`/fx'
9015
     Execute the instruction if flag f0 is false.
9016
 
9017
`/xt'
9018
     Execute the instruction if flag f1 is true.
9019
 
9020
`/xf'
9021
     Execute the instruction if flag f1 is false.
9022
 
9023
`/tt'
9024
     Execute the instruction if both flags f0 and f1 are true.
9025
 
9026
`/tf'
9027
     Execute the instruction if flag f0 is true and flag f1 is false.
9028
 
9029

9030
File: as.info,  Node: D30V-Regs,  Next: D30V-Addressing,  Prev: D30V-Guarded,  Up: D30V-Syntax
9031
 
9032
9.10.2.5 Register Names
9033
.......................
9034
 
9035
You can use the predefined symbols `r0' through `r63' to refer to the
9036
D30V registers.  You can also use `sp' as an alias for `r63' and `link'
9037
as an alias for `r62'.  The accumulators are `a0' and `a1'.
9038
 
9039
   The D30V also has predefined symbols for these control registers and
9040
status bits:
9041
`psw'
9042
     Processor Status Word
9043
 
9044
`bpsw'
9045
     Backup Processor Status Word
9046
 
9047
`pc'
9048
     Program Counter
9049
 
9050
`bpc'
9051
     Backup Program Counter
9052
 
9053
`rpt_c'
9054
     Repeat Count
9055
 
9056
`rpt_s'
9057
     Repeat Start address
9058
 
9059
`rpt_e'
9060
     Repeat End address
9061
 
9062
`mod_s'
9063
     Modulo Start address
9064
 
9065
`mod_e'
9066
     Modulo End address
9067
 
9068
`iba'
9069
     Instruction Break Address
9070
 
9071
`f0'
9072
     Flag 0
9073
 
9074
`f1'
9075
     Flag 1
9076
 
9077
`f2'
9078
     Flag 2
9079
 
9080
`f3'
9081
     Flag 3
9082
 
9083
`f4'
9084
     Flag 4
9085
 
9086
`f5'
9087
     Flag 5
9088
 
9089
`f6'
9090
     Flag 6
9091
 
9092
`f7'
9093
     Flag 7
9094
 
9095
`s'
9096
     Same as flag 4 (saturation flag)
9097
 
9098
`v'
9099
     Same as flag 5 (overflow flag)
9100
 
9101
`va'
9102
     Same as flag 6 (sticky overflow flag)
9103
 
9104
`c'
9105
     Same as flag 7 (carry/borrow flag)
9106
 
9107
`b'
9108
     Same as flag 7 (carry/borrow flag)
9109
 
9110

9111
File: as.info,  Node: D30V-Addressing,  Prev: D30V-Regs,  Up: D30V-Syntax
9112
 
9113
9.10.2.6 Addressing Modes
9114
.........................
9115
 
9116
`as' understands the following addressing modes for the D30V.  `RN' in
9117
the following refers to any of the numbered registers, but _not_ the
9118
control registers.
9119
`RN'
9120
     Register direct
9121
 
9122
`@RN'
9123
     Register indirect
9124
 
9125
`@RN+'
9126
     Register indirect with post-increment
9127
 
9128
`@RN-'
9129
     Register indirect with post-decrement
9130
 
9131
`@-SP'
9132
     Register indirect with pre-decrement
9133
 
9134
`@(DISP, RN)'
9135
     Register indirect with displacement
9136
 
9137
`ADDR'
9138
     PC relative address (for branch or rep).
9139
 
9140
`#IMM'
9141
     Immediate data (the `#' is optional and ignored)
9142
 
9143

9144
File: as.info,  Node: D30V-Float,  Next: D30V-Opcodes,  Prev: D30V-Syntax,  Up: D30V-Dependent
9145
 
9146
9.10.3 Floating Point
9147
---------------------
9148
 
9149
The D30V has no hardware floating point, but the `.float' and `.double'
9150
directives generates IEEE floating-point numbers for compatibility with
9151
other development tools.
9152
 
9153

9154
File: as.info,  Node: D30V-Opcodes,  Prev: D30V-Float,  Up: D30V-Dependent
9155
 
9156
9.10.4 Opcodes
9157
--------------
9158
 
9159
For detailed information on the D30V machine instruction set, see `D30V
9160
Architecture: A VLIW Microprocessor for Multimedia Applications'
9161
(Mitsubishi Electric Corp.).  `as' implements all the standard D30V
9162
opcodes.  The only changes are those described in the section on size
9163
modifiers
9164
 
9165

9166
File: as.info,  Node: Epiphany-Dependent,  Next: H8/300-Dependent,  Prev: D30V-Dependent,  Up: Machine Dependencies
9167
 
9168
9.11 Epiphany Dependent Features
9169
================================
9170
 
9171
* Menu:
9172
 
9173
* Epiphany Options::              Options
9174
* Epiphany Syntax::               Epiphany Syntax
9175
 
9176

9177
File: as.info,  Node: Epiphany Options,  Next: Epiphany Syntax,  Up: Epiphany-Dependent
9178
 
9179
9.11.1 Options
9180
--------------
9181
 
9182
`as' has two additional command-line options for the Epiphany
9183
architecture.
9184
 
9185
`-mepiphany'
9186
     Specifies that the both 32 and 16 bit instructions are allowed.
9187
     This is the default behavior.
9188
 
9189
`-mepiphany16'
9190
     Restricts the permitted instructions to just the 16 bit set.
9191
 
9192

9193
File: as.info,  Node: Epiphany Syntax,  Prev: Epiphany Options,  Up: Epiphany-Dependent
9194
 
9195
9.11.2 Epiphany Syntax
9196
----------------------
9197
 
9198
* Menu:
9199
 
9200
* Epiphany-Chars::                Special Characters
9201
 
9202

9203
File: as.info,  Node: Epiphany-Chars,  Up: Epiphany Syntax
9204
 
9205
9.11.2.1 Special Characters
9206
...........................
9207
 
9208
The presence of a `;' on a line indicates the start of a comment that
9209
extends to the end of the current line.
9210
 
9211
   If a `#' appears as the first character of a line then the whole
9212
line is treated as a comment, but in this case the line could also be a
9213
logical line number directive (*note Comments::) or a preprocessor
9214
control command (*note Preprocessing::).
9215
 
9216
   The ``' character can be used to separate statements on the same
9217
line.
9218
 
9219

9220
File: as.info,  Node: H8/300-Dependent,  Next: HPPA-Dependent,  Prev: Epiphany-Dependent,  Up: Machine Dependencies
9221
 
9222
9.12 H8/300 Dependent Features
9223
==============================
9224
 
9225
* Menu:
9226
 
9227
* H8/300 Options::              Options
9228
* H8/300 Syntax::               Syntax
9229
* H8/300 Floating Point::       Floating Point
9230
* H8/300 Directives::           H8/300 Machine Directives
9231
* H8/300 Opcodes::              Opcodes
9232
 
9233

9234
File: as.info,  Node: H8/300 Options,  Next: H8/300 Syntax,  Up: H8/300-Dependent
9235
 
9236
9.12.1 Options
9237
--------------
9238
 
9239
The Renesas H8/300 version of `as' has one machine-dependent option:
9240
 
9241
`-h-tick-hex'
9242
     Support H'00 style hex constants in addition to 0x00 style.
9243
 
9244
 
9245

9246
File: as.info,  Node: H8/300 Syntax,  Next: H8/300 Floating Point,  Prev: H8/300 Options,  Up: H8/300-Dependent
9247
 
9248
9.12.2 Syntax
9249
-------------
9250
 
9251
* Menu:
9252
 
9253
* H8/300-Chars::                Special Characters
9254
* H8/300-Regs::                 Register Names
9255
* H8/300-Addressing::           Addressing Modes
9256
 
9257

9258
File: as.info,  Node: H8/300-Chars,  Next: H8/300-Regs,  Up: H8/300 Syntax
9259
 
9260
9.12.2.1 Special Characters
9261
...........................
9262
 
9263
`;' is the line comment character.
9264
 
9265
   `$' can be used instead of a newline to separate statements.
9266
Therefore _you may not use `$' in symbol names_ on the H8/300.
9267
 
9268

9269
File: as.info,  Node: H8/300-Regs,  Next: H8/300-Addressing,  Prev: H8/300-Chars,  Up: H8/300 Syntax
9270
 
9271
9.12.2.2 Register Names
9272
.......................
9273
 
9274
You can use predefined symbols of the form `rNh' and `rNl' to refer to
9275
the H8/300 registers as sixteen 8-bit general-purpose registers.  N is
9276
a digit from `0' to `7'); for instance, both `r0h' and `r7l' are valid
9277
register names.
9278
 
9279
   You can also use the eight predefined symbols `rN' to refer to the
9280
H8/300 registers as 16-bit registers (you must use this form for
9281
addressing).
9282
 
9283
   On the H8/300H, you can also use the eight predefined symbols `erN'
9284
(`er0' ... `er7') to refer to the 32-bit general purpose registers.
9285
 
9286
   The two control registers are called `pc' (program counter; a 16-bit
9287
register, except on the H8/300H where it is 24 bits) and `ccr'
9288
(condition code register; an 8-bit register).  `r7' is used as the
9289
stack pointer, and can also be called `sp'.
9290
 
9291

9292
File: as.info,  Node: H8/300-Addressing,  Prev: H8/300-Regs,  Up: H8/300 Syntax
9293
 
9294
9.12.2.3 Addressing Modes
9295
.........................
9296
 
9297
as understands the following addressing modes for the H8/300:
9298
`rN'
9299
     Register direct
9300
 
9301
`@rN'
9302
     Register indirect
9303
 
9304
`@(D, rN)'
9305
`@(D:16, rN)'
9306
`@(D:24, rN)'
9307
     Register indirect: 16-bit or 24-bit displacement D from register
9308
     N.  (24-bit displacements are only meaningful on the H8/300H.)
9309
 
9310
`@rN+'
9311
     Register indirect with post-increment
9312
 
9313
`@-rN'
9314
     Register indirect with pre-decrement
9315
 
9316
``@'AA'
9317
``@'AA:8'
9318
``@'AA:16'
9319
``@'AA:24'
9320
     Absolute address `aa'.  (The address size `:24' only makes sense
9321
     on the H8/300H.)
9322
 
9323
`#XX'
9324
`#XX:8'
9325
`#XX:16'
9326
`#XX:32'
9327
     Immediate data XX.  You may specify the `:8', `:16', or `:32' for
9328
     clarity, if you wish; but `as' neither requires this nor uses
9329
     it--the data size required is taken from context.
9330
 
9331
``@'`@'AA'
9332
``@'`@'AA:8'
9333
     Memory indirect.  You may specify the `:8' for clarity, if you
9334
     wish; but `as' neither requires this nor uses it.
9335
 
9336

9337
File: as.info,  Node: H8/300 Floating Point,  Next: H8/300 Directives,  Prev: H8/300 Syntax,  Up: H8/300-Dependent
9338
 
9339
9.12.3 Floating Point
9340
---------------------
9341
 
9342
The H8/300 family has no hardware floating point, but the `.float'
9343
directive generates IEEE floating-point numbers for compatibility with
9344
other development tools.
9345
 
9346

9347
File: as.info,  Node: H8/300 Directives,  Next: H8/300 Opcodes,  Prev: H8/300 Floating Point,  Up: H8/300-Dependent
9348
 
9349
9.12.4 H8/300 Machine Directives
9350
--------------------------------
9351
 
9352
`as' has the following machine-dependent directives for the H8/300:
9353
 
9354
`.h8300h'
9355
     Recognize and emit additional instructions for the H8/300H
9356
     variant, and also make `.int' emit 32-bit numbers rather than the
9357
     usual (16-bit) for the H8/300 family.
9358
 
9359
`.h8300s'
9360
     Recognize and emit additional instructions for the H8S variant, and
9361
     also make `.int' emit 32-bit numbers rather than the usual (16-bit)
9362
     for the H8/300 family.
9363
 
9364
`.h8300hn'
9365
     Recognize and emit additional instructions for the H8/300H variant
9366
     in normal mode, and also make `.int' emit 32-bit numbers rather
9367
     than the usual (16-bit) for the H8/300 family.
9368
 
9369
`.h8300sn'
9370
     Recognize and emit additional instructions for the H8S variant in
9371
     normal mode, and also make `.int' emit 32-bit numbers rather than
9372
     the usual (16-bit) for the H8/300 family.
9373
 
9374
   On the H8/300 family (including the H8/300H) `.word' directives
9375
generate 16-bit numbers.
9376
 
9377

9378
File: as.info,  Node: H8/300 Opcodes,  Prev: H8/300 Directives,  Up: H8/300-Dependent
9379
 
9380
9.12.5 Opcodes
9381
--------------
9382
 
9383
For detailed information on the H8/300 machine instruction set, see
9384
`H8/300 Series Programming Manual'.  For information specific to the
9385
H8/300H, see `H8/300H Series Programming Manual' (Renesas).
9386
 
9387
   `as' implements all the standard H8/300 opcodes.  No additional
9388
pseudo-instructions are needed on this family.
9389
 
9390
   The following table summarizes the H8/300 opcodes, and their
9391
arguments.  Entries marked `*' are opcodes used only on the H8/300H.
9392
 
9393
              Legend:
9394
                 Rs   source register
9395
                 Rd   destination register
9396
                 abs  absolute address
9397
                 imm  immediate data
9398
              disp:N  N-bit displacement from a register
9399
             pcrel:N  N-bit displacement relative to program counter
9400
 
9401
        add.b #imm,rd              *  andc #imm,ccr
9402
        add.b rs,rd                   band #imm,rd
9403
        add.w rs,rd                   band #imm,@rd
9404
     *  add.w #imm,rd                 band #imm,@abs:8
9405
     *  add.l rs,rd                   bra  pcrel:8
9406
     *  add.l #imm,rd              *  bra  pcrel:16
9407
        adds #imm,rd                  bt   pcrel:8
9408
        addx #imm,rd               *  bt   pcrel:16
9409
        addx rs,rd                    brn  pcrel:8
9410
        and.b #imm,rd              *  brn  pcrel:16
9411
        and.b rs,rd                   bf   pcrel:8
9412
     *  and.w rs,rd                *  bf   pcrel:16
9413
     *  and.w #imm,rd                 bhi  pcrel:8
9414
     *  and.l #imm,rd              *  bhi  pcrel:16
9415
     *  and.l rs,rd                   bls  pcrel:8
9416
 
9417
     *  bls  pcrel:16                 bld  #imm,rd
9418
        bcc  pcrel:8                  bld  #imm,@rd
9419
     *  bcc  pcrel:16                 bld  #imm,@abs:8
9420
        bhs  pcrel:8                  bnot #imm,rd
9421
     *  bhs  pcrel:16                 bnot #imm,@rd
9422
        bcs  pcrel:8                  bnot #imm,@abs:8
9423
     *  bcs  pcrel:16                 bnot rs,rd
9424
        blo  pcrel:8                  bnot rs,@rd
9425
     *  blo  pcrel:16                 bnot rs,@abs:8
9426
        bne  pcrel:8                  bor  #imm,rd
9427
     *  bne  pcrel:16                 bor  #imm,@rd
9428
        beq  pcrel:8                  bor  #imm,@abs:8
9429
     *  beq  pcrel:16                 bset #imm,rd
9430
        bvc  pcrel:8                  bset #imm,@rd
9431
     *  bvc  pcrel:16                 bset #imm,@abs:8
9432
        bvs  pcrel:8                  bset rs,rd
9433
     *  bvs  pcrel:16                 bset rs,@rd
9434
        bpl  pcrel:8                  bset rs,@abs:8
9435
     *  bpl  pcrel:16                 bsr  pcrel:8
9436
        bmi  pcrel:8                  bsr  pcrel:16
9437
     *  bmi  pcrel:16                 bst  #imm,rd
9438
        bge  pcrel:8                  bst  #imm,@rd
9439
     *  bge  pcrel:16                 bst  #imm,@abs:8
9440
        blt  pcrel:8                  btst #imm,rd
9441
     *  blt  pcrel:16                 btst #imm,@rd
9442
        bgt  pcrel:8                  btst #imm,@abs:8
9443
     *  bgt  pcrel:16                 btst rs,rd
9444
        ble  pcrel:8                  btst rs,@rd
9445
     *  ble  pcrel:16                 btst rs,@abs:8
9446
        bclr #imm,rd                  bxor #imm,rd
9447
        bclr #imm,@rd                 bxor #imm,@rd
9448
        bclr #imm,@abs:8              bxor #imm,@abs:8
9449
        bclr rs,rd                    cmp.b #imm,rd
9450
        bclr rs,@rd                   cmp.b rs,rd
9451
        bclr rs,@abs:8                cmp.w rs,rd
9452
        biand #imm,rd                 cmp.w rs,rd
9453
        biand #imm,@rd             *  cmp.w #imm,rd
9454
        biand #imm,@abs:8          *  cmp.l #imm,rd
9455
        bild #imm,rd               *  cmp.l rs,rd
9456
        bild #imm,@rd                 daa  rs
9457
        bild #imm,@abs:8              das  rs
9458
        bior #imm,rd                  dec.b rs
9459
        bior #imm,@rd              *  dec.w #imm,rd
9460
        bior #imm,@abs:8           *  dec.l #imm,rd
9461
        bist #imm,rd                  divxu.b rs,rd
9462
        bist #imm,@rd              *  divxu.w rs,rd
9463
        bist #imm,@abs:8           *  divxs.b rs,rd
9464
        bixor #imm,rd              *  divxs.w rs,rd
9465
        bixor #imm,@rd                eepmov
9466
        bixor #imm,@abs:8          *  eepmovw
9467
 
9468
     *  exts.w rd                     mov.w rs,@abs:16
9469
     *  exts.l rd                  *  mov.l #imm,rd
9470
     *  extu.w rd                  *  mov.l rs,rd
9471
     *  extu.l rd                  *  mov.l @rs,rd
9472
        inc  rs                    *  mov.l @(disp:16,rs),rd
9473
     *  inc.w #imm,rd              *  mov.l @(disp:24,rs),rd
9474
     *  inc.l #imm,rd              *  mov.l @rs+,rd
9475
        jmp  @rs                   *  mov.l @abs:16,rd
9476
        jmp  abs                   *  mov.l @abs:24,rd
9477
        jmp  @@abs:8               *  mov.l rs,@rd
9478
        jsr  @rs                   *  mov.l rs,@(disp:16,rd)
9479
        jsr  abs                   *  mov.l rs,@(disp:24,rd)
9480
        jsr  @@abs:8               *  mov.l rs,@-rd
9481
        ldc  #imm,ccr              *  mov.l rs,@abs:16
9482
        ldc  rs,ccr                *  mov.l rs,@abs:24
9483
     *  ldc  @abs:16,ccr              movfpe @abs:16,rd
9484
     *  ldc  @abs:24,ccr              movtpe rs,@abs:16
9485
     *  ldc  @(disp:16,rs),ccr        mulxu.b rs,rd
9486
     *  ldc  @(disp:24,rs),ccr     *  mulxu.w rs,rd
9487
     *  ldc  @rs+,ccr              *  mulxs.b rs,rd
9488
     *  ldc  @rs,ccr               *  mulxs.w rs,rd
9489
     *  mov.b @(disp:24,rs),rd        neg.b rs
9490
     *  mov.b rs,@(disp:24,rd)     *  neg.w rs
9491
        mov.b @abs:16,rd           *  neg.l rs
9492
        mov.b rs,rd                   nop
9493
        mov.b @abs:8,rd               not.b rs
9494
        mov.b rs,@abs:8            *  not.w rs
9495
        mov.b rs,rd                *  not.l rs
9496
        mov.b #imm,rd                 or.b #imm,rd
9497
        mov.b @rs,rd                  or.b rs,rd
9498
        mov.b @(disp:16,rs),rd     *  or.w #imm,rd
9499
        mov.b @rs+,rd              *  or.w rs,rd
9500
        mov.b @abs:8,rd            *  or.l #imm,rd
9501
        mov.b rs,@rd               *  or.l rs,rd
9502
        mov.b rs,@(disp:16,rd)        orc  #imm,ccr
9503
        mov.b rs,@-rd                 pop.w rs
9504
        mov.b rs,@abs:8            *  pop.l rs
9505
        mov.w rs,@rd                  push.w rs
9506
     *  mov.w @(disp:24,rs),rd     *  push.l rs
9507
     *  mov.w rs,@(disp:24,rd)        rotl.b rs
9508
     *  mov.w @abs:24,rd           *  rotl.w rs
9509
     *  mov.w rs,@abs:24           *  rotl.l rs
9510
        mov.w rs,rd                   rotr.b rs
9511
        mov.w #imm,rd              *  rotr.w rs
9512
        mov.w @rs,rd               *  rotr.l rs
9513
        mov.w @(disp:16,rs),rd        rotxl.b rs
9514
        mov.w @rs+,rd              *  rotxl.w rs
9515
        mov.w @abs:16,rd           *  rotxl.l rs
9516
        mov.w rs,@(disp:16,rd)        rotxr.b rs
9517
        mov.w rs,@-rd              *  rotxr.w rs
9518
 
9519
     *  rotxr.l rs                 *  stc  ccr,@(disp:24,rd)
9520
        bpt                        *  stc  ccr,@-rd
9521
        rte                        *  stc  ccr,@abs:16
9522
        rts                        *  stc  ccr,@abs:24
9523
        shal.b rs                     sub.b rs,rd
9524
     *  shal.w rs                     sub.w rs,rd
9525
     *  shal.l rs                  *  sub.w #imm,rd
9526
        shar.b rs                  *  sub.l rs,rd
9527
     *  shar.w rs                  *  sub.l #imm,rd
9528
     *  shar.l rs                     subs #imm,rd
9529
        shll.b rs                     subx #imm,rd
9530
     *  shll.w rs                     subx rs,rd
9531
     *  shll.l rs                  *  trapa #imm
9532
        shlr.b rs                     xor  #imm,rd
9533
     *  shlr.w rs                     xor  rs,rd
9534
     *  shlr.l rs                  *  xor.w #imm,rd
9535
        sleep                      *  xor.w rs,rd
9536
        stc  ccr,rd                *  xor.l #imm,rd
9537
     *  stc  ccr,@rs               *  xor.l rs,rd
9538
     *  stc  ccr,@(disp:16,rd)        xorc #imm,ccr
9539
 
9540
   Four H8/300 instructions (`add', `cmp', `mov', `sub') are defined
9541
with variants using the suffixes `.b', `.w', and `.l' to specify the
9542
size of a memory operand.  `as' supports these suffixes, but does not
9543
require them; since one of the operands is always a register, `as' can
9544
deduce the correct size.
9545
 
9546
   For example, since `r0' refers to a 16-bit register,
9547
     mov    r0,@foo
9548
is equivalent to
9549
     mov.w  r0,@foo
9550
 
9551
   If you use the size suffixes, `as' issues a warning when the suffix
9552
and the register size do not match.
9553
 
9554

9555
File: as.info,  Node: HPPA-Dependent,  Next: ESA/390-Dependent,  Prev: H8/300-Dependent,  Up: Machine Dependencies
9556
 
9557
9.13 HPPA Dependent Features
9558
============================
9559
 
9560
* Menu:
9561
 
9562
* HPPA Notes::                Notes
9563
* HPPA Options::              Options
9564
* HPPA Syntax::               Syntax
9565
* HPPA Floating Point::       Floating Point
9566
* HPPA Directives::           HPPA Machine Directives
9567
* HPPA Opcodes::              Opcodes
9568
 
9569

9570
File: as.info,  Node: HPPA Notes,  Next: HPPA Options,  Up: HPPA-Dependent
9571
 
9572
9.13.1 Notes
9573
------------
9574
 
9575
As a back end for GNU CC `as' has been throughly tested and should work
9576
extremely well.  We have tested it only minimally on hand written
9577
assembly code and no one has tested it much on the assembly output from
9578
the HP compilers.
9579
 
9580
   The format of the debugging sections has changed since the original
9581
`as' port (version 1.3X) was released; therefore, you must rebuild all
9582
HPPA objects and libraries with the new assembler so that you can debug
9583
the final executable.
9584
 
9585
   The HPPA `as' port generates a small subset of the relocations
9586
available in the SOM and ELF object file formats.  Additional relocation
9587
support will be added as it becomes necessary.
9588
 
9589

9590
File: as.info,  Node: HPPA Options,  Next: HPPA Syntax,  Prev: HPPA Notes,  Up: HPPA-Dependent
9591
 
9592
9.13.2 Options
9593
--------------
9594
 
9595
`as' has no machine-dependent command-line options for the HPPA.
9596
 
9597

9598
File: as.info,  Node: HPPA Syntax,  Next: HPPA Floating Point,  Prev: HPPA Options,  Up: HPPA-Dependent
9599
 
9600
9.13.3 Syntax
9601
-------------
9602
 
9603
The assembler syntax closely follows the HPPA instruction set reference
9604
manual; assembler directives and general syntax closely follow the HPPA
9605
assembly language reference manual, with a few noteworthy differences.
9606
 
9607
   First, a colon may immediately follow a label definition.  This is
9608
simply for compatibility with how most assembly language programmers
9609
write code.
9610
 
9611
   Some obscure expression parsing problems may affect hand written
9612
code which uses the `spop' instructions, or code which makes significant
9613
use of the `!' line separator.
9614
 
9615
   `as' is much less forgiving about missing arguments and other
9616
similar oversights than the HP assembler.  `as' notifies you of missing
9617
arguments as syntax errors; this is regarded as a feature, not a bug.
9618
 
9619
   Finally, `as' allows you to use an external symbol without
9620
explicitly importing the symbol.  _Warning:_ in the future this will be
9621
an error for HPPA targets.
9622
 
9623
   Special characters for HPPA targets include:
9624
 
9625
   `;' is the line comment character.
9626
 
9627
   `!' can be used instead of a newline to separate statements.
9628
 
9629
   Since `$' has no special meaning, you may use it in symbol names.
9630
 
9631

9632
File: as.info,  Node: HPPA Floating Point,  Next: HPPA Directives,  Prev: HPPA Syntax,  Up: HPPA-Dependent
9633
 
9634
9.13.4 Floating Point
9635
---------------------
9636
 
9637
The HPPA family uses IEEE floating-point numbers.
9638
 
9639

9640
File: as.info,  Node: HPPA Directives,  Next: HPPA Opcodes,  Prev: HPPA Floating Point,  Up: HPPA-Dependent
9641
 
9642
9.13.5 HPPA Assembler Directives
9643
--------------------------------
9644
 
9645
`as' for the HPPA supports many additional directives for compatibility
9646
with the native assembler.  This section describes them only briefly.
9647
For detailed information on HPPA-specific assembler directives, see
9648
`HP9000 Series 800 Assembly Language Reference Manual' (HP 92432-90001).
9649
 
9650
   `as' does _not_ support the following assembler directives described
9651
in the HP manual:
9652
 
9653
     .endm           .liston
9654
     .enter          .locct
9655
     .leave          .macro
9656
     .listoff
9657
 
9658
   Beyond those implemented for compatibility, `as' supports one
9659
additional assembler directive for the HPPA: `.param'.  It conveys
9660
register argument locations for static functions.  Its syntax closely
9661
follows the `.export' directive.
9662
 
9663
   These are the additional directives in `as' for the HPPA:
9664
 
9665
`.block N'
9666
`.blockz N'
9667
     Reserve N bytes of storage, and initialize them to zero.
9668
 
9669
`.call'
9670
     Mark the beginning of a procedure call.  Only the special case
9671
     with _no arguments_ is allowed.
9672
 
9673
`.callinfo [ PARAM=VALUE, ... ]  [ FLAG, ... ]'
9674
     Specify a number of parameters and flags that define the
9675
     environment for a procedure.
9676
 
9677
     PARAM may be any of `frame' (frame size), `entry_gr' (end of
9678
     general register range), `entry_fr' (end of float register range),
9679
     `entry_sr' (end of space register range).
9680
 
9681
     The values for FLAG are `calls' or `caller' (proc has
9682
     subroutines), `no_calls' (proc does not call subroutines),
9683
     `save_rp' (preserve return pointer), `save_sp' (proc preserves
9684
     stack pointer), `no_unwind' (do not unwind this proc), `hpux_int'
9685
     (proc is interrupt routine).
9686
 
9687
`.code'
9688
     Assemble into the standard section called `$TEXT$', subsection
9689
     `$CODE$'.
9690
 
9691
`.copyright "STRING"'
9692
     In the SOM object format, insert STRING into the object code,
9693
     marked as a copyright string.
9694
 
9695
`.copyright "STRING"'
9696
     In the ELF object format, insert STRING into the object code,
9697
     marked as a version string.
9698
 
9699
`.enter'
9700
     Not yet supported; the assembler rejects programs containing this
9701
     directive.
9702
 
9703
`.entry'
9704
     Mark the beginning of a procedure.
9705
 
9706
`.exit'
9707
     Mark the end of a procedure.
9708
 
9709
`.export NAME [ ,TYP ]  [ ,PARAM=R ]'
9710
     Make a procedure NAME available to callers.  TYP, if present, must
9711
     be one of `absolute', `code' (ELF only, not SOM), `data', `entry',
9712
     `data', `entry', `millicode', `plabel', `pri_prog', or `sec_prog'.
9713
 
9714
     PARAM, if present, provides either relocation information for the
9715
     procedure arguments and result, or a privilege level.  PARAM may be
9716
     `argwN' (where N ranges from `0' to `3', and indicates one of four
9717
     one-word arguments); `rtnval' (the procedure's result); or
9718
     `priv_lev' (privilege level).  For arguments or the result, R
9719
     specifies how to relocate, and must be one of `no' (not
9720
     relocatable), `gr' (argument is in general register), `fr' (in
9721
     floating point register), or `fu' (upper half of float register).
9722
     For `priv_lev', R is an integer.
9723
 
9724
`.half N'
9725
     Define a two-byte integer constant N; synonym for the portable
9726
     `as' directive `.short'.
9727
 
9728
`.import NAME [ ,TYP ]'
9729
     Converse of `.export'; make a procedure available to call.  The
9730
     arguments use the same conventions as the first two arguments for
9731
     `.export'.
9732
 
9733
`.label NAME'
9734
     Define NAME as a label for the current assembly location.
9735
 
9736
`.leave'
9737
     Not yet supported; the assembler rejects programs containing this
9738
     directive.
9739
 
9740
`.origin LC'
9741
     Advance location counter to LC. Synonym for the `as' portable
9742
     directive `.org'.
9743
 
9744
`.param NAME [ ,TYP ]  [ ,PARAM=R ]'
9745
     Similar to `.export', but used for static procedures.
9746
 
9747
`.proc'
9748
     Use preceding the first statement of a procedure.
9749
 
9750
`.procend'
9751
     Use following the last statement of a procedure.
9752
 
9753
`LABEL .reg EXPR'
9754
     Synonym for `.equ'; define LABEL with the absolute expression EXPR
9755
     as its value.
9756
 
9757
`.space SECNAME [ ,PARAMS ]'
9758
     Switch to section SECNAME, creating a new section by that name if
9759
     necessary.  You may only use PARAMS when creating a new section,
9760
     not when switching to an existing one.  SECNAME may identify a
9761
     section by number rather than by name.
9762
 
9763
     If specified, the list PARAMS declares attributes of the section,
9764
     identified by keywords.  The keywords recognized are `spnum=EXP'
9765
     (identify this section by the number EXP, an absolute expression),
9766
     `sort=EXP' (order sections according to this sort key when linking;
9767
     EXP is an absolute expression), `unloadable' (section contains no
9768
     loadable data), `notdefined' (this section defined elsewhere), and
9769
     `private' (data in this section not available to other programs).
9770
 
9771
`.spnum SECNAM'
9772
     Allocate four bytes of storage, and initialize them with the
9773
     section number of the section named SECNAM.  (You can define the
9774
     section number with the HPPA `.space' directive.)
9775
 
9776
`.string "STR"'
9777
     Copy the characters in the string STR to the object file.  *Note
9778
     Strings: Strings, for information on escape sequences you can use
9779
     in `as' strings.
9780
 
9781
     _Warning!_ The HPPA version of `.string' differs from the usual
9782
     `as' definition: it does _not_ write a zero byte after copying STR.
9783
 
9784
`.stringz "STR"'
9785
     Like `.string', but appends a zero byte after copying STR to object
9786
     file.
9787
 
9788
`.subspa NAME [ ,PARAMS ]'
9789
`.nsubspa NAME [ ,PARAMS ]'
9790
     Similar to `.space', but selects a subsection NAME within the
9791
     current section.  You may only specify PARAMS when you create a
9792
     subsection (in the first instance of `.subspa' for this NAME).
9793
 
9794
     If specified, the list PARAMS declares attributes of the
9795
     subsection, identified by keywords.  The keywords recognized are
9796
     `quad=EXPR' ("quadrant" for this subsection), `align=EXPR'
9797
     (alignment for beginning of this subsection; a power of two),
9798
     `access=EXPR' (value for "access rights" field), `sort=EXPR'
9799
     (sorting order for this subspace in link), `code_only' (subsection
9800
     contains only code), `unloadable' (subsection cannot be loaded
9801
     into memory), `comdat' (subsection is comdat), `common'
9802
     (subsection is common block), `dup_comm' (subsection may have
9803
     duplicate names), or `zero' (subsection is all zeros, do not write
9804
     in object file).
9805
 
9806
     `.nsubspa' always creates a new subspace with the given name, even
9807
     if one with the same name already exists.
9808
 
9809
     `comdat', `common' and `dup_comm' can be used to implement various
9810
     flavors of one-only support when using the SOM linker.  The SOM
9811
     linker only supports specific combinations of these flags.  The
9812
     details are not documented.  A brief description is provided here.
9813
 
9814
     `comdat' provides a form of linkonce support.  It is useful for
9815
     both code and data subspaces.  A `comdat' subspace has a key symbol
9816
     marked by the `is_comdat' flag or `ST_COMDAT'.  Only the first
9817
     subspace for any given key is selected.  The key symbol becomes
9818
     universal in shared links.  This is similar to the behavior of
9819
     `secondary_def' symbols.
9820
 
9821
     `common' provides Fortran named common support.  It is only useful
9822
     for data subspaces.  Symbols with the flag `is_common' retain this
9823
     flag in shared links.  Referencing a `is_common' symbol in a shared
9824
     library from outside the library doesn't work.  Thus, `is_common'
9825
     symbols must be output whenever they are needed.
9826
 
9827
     `common' and `dup_comm' together provide Cobol common support.
9828
     The subspaces in this case must all be the same length.
9829
     Otherwise, this support is similar to the Fortran common support.
9830
 
9831
     `dup_comm' by itself provides a type of one-only support for code.
9832
     Only the first `dup_comm' subspace is selected.  There is a rather
9833
     complex algorithm to compare subspaces.  Code symbols marked with
9834
     the `dup_common' flag are hidden.  This support was intended for
9835
     "C++ duplicate inlines".
9836
 
9837
     A simplified technique is used to mark the flags of symbols based
9838
     on the flags of their subspace.  A symbol with the scope
9839
     SS_UNIVERSAL and type ST_ENTRY, ST_CODE or ST_DATA is marked with
9840
     the corresponding settings of `comdat', `common' and `dup_comm'
9841
     from the subspace, respectively.  This avoids having to introduce
9842
     additional directives to mark these symbols.  The HP assembler
9843
     sets `is_common' from `common'.  However, it doesn't set the
9844
     `dup_common' from `dup_comm'.  It doesn't have `comdat' support.
9845
 
9846
`.version "STR"'
9847
     Write STR as version identifier in object code.
9848
 
9849

9850
File: as.info,  Node: HPPA Opcodes,  Prev: HPPA Directives,  Up: HPPA-Dependent
9851
 
9852
9.13.6 Opcodes
9853
--------------
9854
 
9855
For detailed information on the HPPA machine instruction set, see
9856
`PA-RISC Architecture and Instruction Set Reference Manual' (HP
9857
09740-90039).
9858
 
9859

9860
File: as.info,  Node: ESA/390-Dependent,  Next: i386-Dependent,  Prev: HPPA-Dependent,  Up: Machine Dependencies
9861
 
9862
9.14 ESA/390 Dependent Features
9863
===============================
9864
 
9865
* Menu:
9866
 
9867
* ESA/390 Notes::                Notes
9868
* ESA/390 Options::              Options
9869
* ESA/390 Syntax::               Syntax
9870
* ESA/390 Floating Point::       Floating Point
9871
* ESA/390 Directives::           ESA/390 Machine Directives
9872
* ESA/390 Opcodes::              Opcodes
9873
 
9874

9875
File: as.info,  Node: ESA/390 Notes,  Next: ESA/390 Options,  Up: ESA/390-Dependent
9876
 
9877
9.14.1 Notes
9878
------------
9879
 
9880
The ESA/390 `as' port is currently intended to be a back-end for the
9881
GNU CC compiler.  It is not HLASM compatible, although it does support
9882
a subset of some of the HLASM directives.  The only supported binary
9883
file format is ELF; none of the usual MVS/VM/OE/USS object file
9884
formats, such as ESD or XSD, are supported.
9885
 
9886
   When used with the GNU CC compiler, the ESA/390 `as' will produce
9887
correct, fully relocated, functional binaries, and has been used to
9888
compile and execute large projects.  However, many aspects should still
9889
be considered experimental; these include shared library support,
9890
dynamically loadable objects, and any relocation other than the 31-bit
9891
relocation.
9892
 
9893

9894
File: as.info,  Node: ESA/390 Options,  Next: ESA/390 Syntax,  Prev: ESA/390 Notes,  Up: ESA/390-Dependent
9895
 
9896
9.14.2 Options
9897
--------------
9898
 
9899
`as' has no machine-dependent command-line options for the ESA/390.
9900
 
9901

9902
File: as.info,  Node: ESA/390 Syntax,  Next: ESA/390 Floating Point,  Prev: ESA/390 Options,  Up: ESA/390-Dependent
9903
 
9904
9.14.3 Syntax
9905
-------------
9906
 
9907
The opcode/operand syntax follows the ESA/390 Principles of Operation
9908
manual; assembler directives and general syntax are loosely based on the
9909
prevailing AT&T/SVR4/ELF/Solaris style notation.  HLASM-style directives
9910
are _not_ supported for the most part, with the exception of those
9911
described herein.
9912
 
9913
   A leading dot in front of directives is optional, and the case of
9914
directives is ignored; thus for example, .using and USING have the same
9915
effect.
9916
 
9917
   A colon may immediately follow a label definition.  This is simply
9918
for compatibility with how most assembly language programmers write
9919
code.
9920
 
9921
   `#' is the line comment character.
9922
 
9923
   `;' can be used instead of a newline to separate statements.
9924
 
9925
   Since `$' has no special meaning, you may use it in symbol names.
9926
 
9927
   Registers can be given the symbolic names r0..r15, fp0, fp2, fp4,
9928
fp6.  By using thesse symbolic names, `as' can detect simple syntax
9929
errors. The name rarg or r.arg is a synonym for r11, rtca or r.tca for
9930
r12, sp, r.sp, dsa r.dsa for r13, lr or r.lr for r14, rbase or r.base
9931
for r3 and rpgt or r.pgt for r4.
9932
 
9933
   `*' is the current location counter.  Unlike `.' it is always
9934
relative to the last USING directive.  Note that this means that
9935
expressions cannot use multiplication, as any occurrence of `*' will be
9936
interpreted as a location counter.
9937
 
9938
   All labels are relative to the last USING.  Thus, branches to a label
9939
always imply the use of base+displacement.
9940
 
9941
   Many of the usual forms of address constants / address literals are
9942
supported.  Thus,
9943
        .using  *,r3
9944
        L       r15,=A(some_routine)
9945
        LM      r6,r7,=V(some_longlong_extern)
9946
        A       r1,=F'12'
9947
        AH      r0,=H'42'
9948
        ME      r6,=E'3.1416'
9949
        MD      r6,=D'3.14159265358979'
9950
        O       r6,=XL4'cacad0d0'
9951
        .ltorg
9952
   should all behave as expected: that is, an entry in the literal pool
9953
will be created (or reused if it already exists), and the instruction
9954
operands will be the displacement into the literal pool using the
9955
current base register (as last declared with the `.using' directive).
9956
 
9957

9958
File: as.info,  Node: ESA/390 Floating Point,  Next: ESA/390 Directives,  Prev: ESA/390 Syntax,  Up: ESA/390-Dependent
9959
 
9960
9.14.4 Floating Point
9961
---------------------
9962
 
9963
The assembler generates only IEEE floating-point numbers.  The older
9964
floating point formats are not supported.
9965
 
9966

9967
File: as.info,  Node: ESA/390 Directives,  Next: ESA/390 Opcodes,  Prev: ESA/390 Floating Point,  Up: ESA/390-Dependent
9968
 
9969
9.14.5 ESA/390 Assembler Directives
9970
-----------------------------------
9971
 
9972
`as' for the ESA/390 supports all of the standard ELF/SVR4 assembler
9973
directives that are documented in the main part of this documentation.
9974
Several additional directives are supported in order to implement the
9975
ESA/390 addressing model.  The most important of these are `.using' and
9976
`.ltorg'
9977
 
9978
   These are the additional directives in `as' for the ESA/390:
9979
 
9980
`.dc'
9981
     A small subset of the usual DC directive is supported.
9982
 
9983
`.drop REGNO'
9984
     Stop using REGNO as the base register.  The REGNO must have been
9985
     previously declared with a `.using' directive in the same section
9986
     as the current section.
9987
 
9988
`.ebcdic STRING'
9989
     Emit the EBCDIC equivalent of the indicated string.  The emitted
9990
     string will be null terminated.  Note that the directives
9991
     `.string' etc. emit ascii strings by default.
9992
 
9993
`EQU'
9994
     The standard HLASM-style EQU directive is not supported; however,
9995
     the standard `as' directive .equ can be used to the same effect.
9996
 
9997
`.ltorg'
9998
     Dump the literal pool accumulated so far; begin a new literal pool.
9999
     The literal pool will be written in the current section; in order
10000
     to generate correct assembly, a `.using' must have been previously
10001
     specified in the same section.
10002
 
10003
`.using EXPR,REGNO'
10004
     Use REGNO as the base register for all subsequent RX, RS, and SS
10005
     form instructions. The EXPR will be evaluated to obtain the base
10006
     address; usually, EXPR will merely be `*'.
10007
 
10008
     This assembler allows two `.using' directives to be simultaneously
10009
     outstanding, one in the `.text' section, and one in another section
10010
     (typically, the `.data' section).  This feature allows dynamically
10011
     loaded objects to be implemented in a relatively straightforward
10012
     way.  A `.using' directive must always be specified in the `.text'
10013
     section; this will specify the base register that will be used for
10014
     branches in the `.text' section.  A second `.using' may be
10015
     specified in another section; this will specify the base register
10016
     that is used for non-label address literals.  When a second
10017
     `.using' is specified, then the subsequent `.ltorg' must be put in
10018
     the same section; otherwise an error will result.
10019
 
10020
     Thus, for example, the following code uses `r3' to address branch
10021
     targets and `r4' to address the literal pool, which has been
10022
     written to the `.data' section.  The is, the constants
10023
     `=A(some_routine)', `=H'42'' and `=E'3.1416'' will all appear in
10024
     the `.data' section.
10025
 
10026
          .data
10027
                .using  LITPOOL,r4
10028
          .text
10029
                BASR    r3,0
10030
                .using  *,r3
10031
                  B       START
10032
                .long   LITPOOL
10033
          START:
10034
                L       r4,4(,r3)
10035
                L       r15,=A(some_routine)
10036
                LTR     r15,r15
10037
                BNE     LABEL
10038
                AH      r0,=H'42'
10039
          LABEL:
10040
                ME      r6,=E'3.1416'
10041
          .data
10042
          LITPOOL:
10043
                .ltorg
10044
 
10045
     Note that this dual-`.using' directive semantics extends and is
10046
     not compatible with HLASM semantics.  Note that this assembler
10047
     directive does not support the full range of HLASM semantics.
10048
 
10049
 
10050

10051
File: as.info,  Node: ESA/390 Opcodes,  Prev: ESA/390 Directives,  Up: ESA/390-Dependent
10052
 
10053
9.14.6 Opcodes
10054
--------------
10055
 
10056
For detailed information on the ESA/390 machine instruction set, see
10057
`ESA/390 Principles of Operation' (IBM Publication Number DZ9AR004).
10058
 
10059

10060
File: as.info,  Node: i386-Dependent,  Next: i860-Dependent,  Prev: ESA/390-Dependent,  Up: Machine Dependencies
10061
 
10062
9.15 80386 Dependent Features
10063
=============================
10064
 
10065
   The i386 version `as' supports both the original Intel 386
10066
architecture in both 16 and 32-bit mode as well as AMD x86-64
10067
architecture extending the Intel architecture to 64-bits.
10068
 
10069
* Menu:
10070
 
10071
* i386-Options::                Options
10072
* i386-Directives::             X86 specific directives
10073
* i386-Syntax::                 Syntactical considerations
10074
* i386-Mnemonics::              Instruction Naming
10075
* i386-Regs::                   Register Naming
10076
* i386-Prefixes::               Instruction Prefixes
10077
* i386-Memory::                 Memory References
10078
* i386-Jumps::                  Handling of Jump Instructions
10079
* i386-Float::                  Floating Point
10080
* i386-SIMD::                   Intel's MMX and AMD's 3DNow! SIMD Operations
10081
* i386-LWP::                    AMD's Lightweight Profiling Instructions
10082
* i386-BMI::                    Bit Manipulation Instruction
10083
* i386-TBM::                    AMD's Trailing Bit Manipulation Instructions
10084
* i386-16bit::                  Writing 16-bit Code
10085
* i386-Arch::                   Specifying an x86 CPU architecture
10086
* i386-Bugs::                   AT&T Syntax bugs
10087
* i386-Notes::                  Notes
10088
 
10089

10090
File: as.info,  Node: i386-Options,  Next: i386-Directives,  Up: i386-Dependent
10091
 
10092
9.15.1 Options
10093
--------------
10094
 
10095
The i386 version of `as' has a few machine dependent options:
10096
 
10097
`--32 | --x32 | --64'
10098
     Select the word size, either 32 bits or 64 bits.  `--32' implies
10099
     Intel i386 architecture, while `--x32' and `--64' imply AMD x86-64
10100
     architecture with 32-bit or 64-bit word-size respectively.
10101
 
10102
     These options are only available with the ELF object file format,
10103
     and require that the necessary BFD support has been included (on a
10104
     32-bit platform you have to add -enable-64-bit-bfd to configure
10105
     enable 64-bit usage and use x86-64 as target platform).
10106
 
10107
`-n'
10108
     By default, x86 GAS replaces multiple nop instructions used for
10109
     alignment within code sections with multi-byte nop instructions
10110
     such as leal 0(%esi,1),%esi.  This switch disables the
10111
     optimization.
10112
 
10113
`--divide'
10114
     On SVR4-derived platforms, the character `/' is treated as a
10115
     comment character, which means that it cannot be used in
10116
     expressions.  The `--divide' option turns `/' into a normal
10117
     character.  This does not disable `/' at the beginning of a line
10118
     starting a comment, or affect using `#' for starting a comment.
10119
 
10120
`-march=CPU[+EXTENSION...]'
10121
     This option specifies the target processor.  The assembler will
10122
     issue an error message if an attempt is made to assemble an
10123
     instruction which will not execute on the target processor.  The
10124
     following processor names are recognized: `i8086', `i186', `i286',
10125
     `i386', `i486', `i586', `i686', `pentium', `pentiumpro',
10126
     `pentiumii', `pentiumiii', `pentium4', `prescott', `nocona',
10127
     `core', `core2', `corei7', `l1om', `k1om', `k6', `k6_2', `athlon',
10128
     `opteron', `k8', `amdfam10', `bdver1', `bdver2', `bdver3',
10129
     `btver1', `btver2', `generic32' and `generic64'.
10130
 
10131
     In addition to the basic instruction set, the assembler can be
10132
     told to accept various extension mnemonics.  For example,
10133
     `-march=i686+sse4+vmx' extends I686 with SSE4 and VMX.  The
10134
     following extensions are currently supported: `8087', `287', `387',
10135
     `no87', `mmx', `nommx', `sse', `sse2', `sse3', `ssse3', `sse4.1',
10136
     `sse4.2', `sse4', `nosse', `avx', `avx2', `adx', `rdseed',
10137
     `prfchw', `noavx', `vmx', `vmfunc', `smx', `xsave', `xsaveopt',
10138
     `aes', `pclmul', `fsgsbase', `rdrnd', `f16c', `bmi2', `fma',
10139
     `movbe', `ept', `lzcnt', `hle', `rtm', `invpcid', `clflush', `lwp',
10140
     `fma4', `xop', `cx16', `syscall', `rdtscp', `3dnow', `3dnowa',
10141
     `sse4a', `sse5', `svme', `abm' and `padlock'.  Note that rather
10142
     than extending a basic instruction set, the extension mnemonics
10143
     starting with `no' revoke the respective functionality.
10144
 
10145
     When the `.arch' directive is used with `-march', the `.arch'
10146
     directive will take precedent.
10147
 
10148
`-mtune=CPU'
10149
     This option specifies a processor to optimize for. When used in
10150
     conjunction with the `-march' option, only instructions of the
10151
     processor specified by the `-march' option will be generated.
10152
 
10153
     Valid CPU values are identical to the processor list of
10154
     `-march=CPU'.
10155
 
10156
`-msse2avx'
10157
     This option specifies that the assembler should encode SSE
10158
     instructions with VEX prefix.
10159
 
10160
`-msse-check=NONE'
10161
`-msse-check=WARNING'
10162
`-msse-check=ERROR'
10163
     These options control if the assembler should check SSE
10164
     intructions.  `-msse-check=NONE' will make the assembler not to
10165
     check SSE instructions,  which is the default.
10166
     `-msse-check=WARNING' will make the assembler issue a warning for
10167
     any SSE intruction.  `-msse-check=ERROR' will make the assembler
10168
     issue an error for any SSE intruction.
10169
 
10170
`-mavxscalar=128'
10171
`-mavxscalar=256'
10172
     These options control how the assembler should encode scalar AVX
10173
     instructions.  `-mavxscalar=128' will encode scalar AVX
10174
     instructions with 128bit vector length, which is the default.
10175
     `-mavxscalar=256' will encode scalar AVX instructions with 256bit
10176
     vector length.
10177
 
10178
`-mmnemonic=ATT'
10179
`-mmnemonic=INTEL'
10180
     This option specifies instruction mnemonic for matching
10181
     instructions.  The `.att_mnemonic' and `.intel_mnemonic'
10182
     directives will take precedent.
10183
 
10184
`-msyntax=ATT'
10185
`-msyntax=INTEL'
10186
     This option specifies instruction syntax when processing
10187
     instructions.  The `.att_syntax' and `.intel_syntax' directives
10188
     will take precedent.
10189
 
10190
`-mnaked-reg'
10191
     This opetion specifies that registers don't require a `%' prefix.
10192
     The `.att_syntax' and `.intel_syntax' directives will take
10193
     precedent.
10194
 
10195
 
10196

10197
File: as.info,  Node: i386-Directives,  Next: i386-Syntax,  Prev: i386-Options,  Up: i386-Dependent
10198
 
10199
9.15.2 x86 specific Directives
10200
------------------------------
10201
 
10202
`.lcomm SYMBOL , LENGTH[, ALIGNMENT]'
10203
     Reserve LENGTH (an absolute expression) bytes for a local common
10204
     denoted by SYMBOL.  The section and value of SYMBOL are those of
10205
     the new local common.  The addresses are allocated in the bss
10206
     section, so that at run-time the bytes start off zeroed.  Since
10207
     SYMBOL is not declared global, it is normally not visible to `ld'.
10208
     The optional third parameter, ALIGNMENT, specifies the desired
10209
     alignment of the symbol in the bss section.
10210
 
10211
     This directive is only available for COFF based x86 targets.
10212
 
10213
 
10214

10215
File: as.info,  Node: i386-Syntax,  Next: i386-Mnemonics,  Prev: i386-Directives,  Up: i386-Dependent
10216
 
10217
9.15.3 i386 Syntactical Considerations
10218
--------------------------------------
10219
 
10220
* Menu:
10221
 
10222
* i386-Variations::           AT&T Syntax versus Intel Syntax
10223
* i386-Chars::                Special Characters
10224
 
10225

10226
File: as.info,  Node: i386-Variations,  Next: i386-Chars,  Up: i386-Syntax
10227
 
10228
9.15.3.1 AT&T Syntax versus Intel Syntax
10229
........................................
10230
 
10231
`as' now supports assembly using Intel assembler syntax.
10232
`.intel_syntax' selects Intel mode, and `.att_syntax' switches back to
10233
the usual AT&T mode for compatibility with the output of `gcc'.  Either
10234
of these directives may have an optional argument, `prefix', or
10235
`noprefix' specifying whether registers require a `%' prefix.  AT&T
10236
System V/386 assembler syntax is quite different from Intel syntax.  We
10237
mention these differences because almost all 80386 documents use Intel
10238
syntax.  Notable differences between the two syntaxes are:
10239
 
10240
   * AT&T immediate operands are preceded by `$'; Intel immediate
10241
     operands are undelimited (Intel `push 4' is AT&T `pushl $4').
10242
     AT&T register operands are preceded by `%'; Intel register operands
10243
     are undelimited.  AT&T absolute (as opposed to PC relative)
10244
     jump/call operands are prefixed by `*'; they are undelimited in
10245
     Intel syntax.
10246
 
10247
   * AT&T and Intel syntax use the opposite order for source and
10248
     destination operands.  Intel `add eax, 4' is `addl $4, %eax'.  The
10249
     `source, dest' convention is maintained for compatibility with
10250
     previous Unix assemblers.  Note that `bound', `invlpga', and
10251
     instructions with 2 immediate operands, such as the `enter'
10252
     instruction, do _not_ have reversed order.  *note i386-Bugs::.
10253
 
10254
   * In AT&T syntax the size of memory operands is determined from the
10255
     last character of the instruction mnemonic.  Mnemonic suffixes of
10256
     `b', `w', `l' and `q' specify byte (8-bit), word (16-bit), long
10257
     (32-bit) and quadruple word (64-bit) memory references.  Intel
10258
     syntax accomplishes this by prefixing memory operands (_not_ the
10259
     instruction mnemonics) with `byte ptr', `word ptr', `dword ptr'
10260
     and `qword ptr'.  Thus, Intel `mov al, byte ptr FOO' is `movb FOO,
10261
     %al' in AT&T syntax.
10262
 
10263
     In 64-bit code, `movabs' can be used to encode the `mov'
10264
     instruction with the 64-bit displacement or immediate operand.
10265
 
10266
   * Immediate form long jumps and calls are `lcall/ljmp $SECTION,
10267
     $OFFSET' in AT&T syntax; the Intel syntax is `call/jmp far
10268
     SECTION:OFFSET'.  Also, the far return instruction is `lret
10269
     $STACK-ADJUST' in AT&T syntax; Intel syntax is `ret far
10270
     STACK-ADJUST'.
10271
 
10272
   * The AT&T assembler does not provide support for multiple section
10273
     programs.  Unix style systems expect all programs to be single
10274
     sections.
10275
 
10276

10277
File: as.info,  Node: i386-Chars,  Prev: i386-Variations,  Up: i386-Syntax
10278
 
10279
9.15.3.2 Special Characters
10280
...........................
10281
 
10282
The presence of a `#' appearing anywhere on a line indicates the start
10283
of a comment that extends to the end of that line.
10284
 
10285
   If a `#' appears as the first character of a line then the whole
10286
line is treated as a comment, but in this case the line can also be a
10287
logical line number directive (*note Comments::) or a preprocessor
10288
control command (*note Preprocessing::).
10289
 
10290
   If the `--divide' command line option has not been specified then
10291
the `/' character appearing anywhere on a line also introduces a line
10292
comment.
10293
 
10294
   The `;' character can be used to separate statements on the same
10295
line.
10296
 
10297

10298
File: as.info,  Node: i386-Mnemonics,  Next: i386-Regs,  Prev: i386-Syntax,  Up: i386-Dependent
10299
 
10300
9.15.4 Instruction Naming
10301
-------------------------
10302
 
10303
Instruction mnemonics are suffixed with one character modifiers which
10304
specify the size of operands.  The letters `b', `w', `l' and `q'
10305
specify byte, word, long and quadruple word operands.  If no suffix is
10306
specified by an instruction then `as' tries to fill in the missing
10307
suffix based on the destination register operand (the last one by
10308
convention).  Thus, `mov %ax, %bx' is equivalent to `movw %ax, %bx';
10309
also, `mov $1, %bx' is equivalent to `movw $1, bx'.  Note that this is
10310
incompatible with the AT&T Unix assembler which assumes that a missing
10311
mnemonic suffix implies long operand size.  (This incompatibility does
10312
not affect compiler output since compilers always explicitly specify
10313
the mnemonic suffix.)
10314
 
10315
   Almost all instructions have the same names in AT&T and Intel format.
10316
There are a few exceptions.  The sign extend and zero extend
10317
instructions need two sizes to specify them.  They need a size to
10318
sign/zero extend _from_ and a size to zero extend _to_.  This is
10319
accomplished by using two instruction mnemonic suffixes in AT&T syntax.
10320
Base names for sign extend and zero extend are `movs...' and `movz...'
10321
in AT&T syntax (`movsx' and `movzx' in Intel syntax).  The instruction
10322
mnemonic suffixes are tacked on to this base name, the _from_ suffix
10323
before the _to_ suffix.  Thus, `movsbl %al, %edx' is AT&T syntax for
10324
"move sign extend _from_ %al _to_ %edx."  Possible suffixes, thus, are
10325
`bl' (from byte to long), `bw' (from byte to word), `wl' (from word to
10326
long), `bq' (from byte to quadruple word), `wq' (from word to quadruple
10327
word), and `lq' (from long to quadruple word).
10328
 
10329
   Different encoding options can be specified via optional mnemonic
10330
suffix.  `.s' suffix swaps 2 register operands in encoding when moving
10331
from one register to another.  `.d8' or `.d32' suffix prefers 8bit or
10332
32bit displacement in encoding.
10333
 
10334
   The Intel-syntax conversion instructions
10335
 
10336
   * `cbw' -- sign-extend byte in `%al' to word in `%ax',
10337
 
10338
   * `cwde' -- sign-extend word in `%ax' to long in `%eax',
10339
 
10340
   * `cwd' -- sign-extend word in `%ax' to long in `%dx:%ax',
10341
 
10342
   * `cdq' -- sign-extend dword in `%eax' to quad in `%edx:%eax',
10343
 
10344
   * `cdqe' -- sign-extend dword in `%eax' to quad in `%rax' (x86-64
10345
     only),
10346
 
10347
   * `cqo' -- sign-extend quad in `%rax' to octuple in `%rdx:%rax'
10348
     (x86-64 only),
10349
 
10350
are called `cbtw', `cwtl', `cwtd', `cltd', `cltq', and `cqto' in AT&T
10351
naming.  `as' accepts either naming for these instructions.
10352
 
10353
   Far call/jump instructions are `lcall' and `ljmp' in AT&T syntax,
10354
but are `call far' and `jump far' in Intel convention.
10355
 
10356
9.15.5 AT&T Mnemonic versus Intel Mnemonic
10357
------------------------------------------
10358
 
10359
`as' supports assembly using Intel mnemonic.  `.intel_mnemonic' selects
10360
Intel mnemonic with Intel syntax, and `.att_mnemonic' switches back to
10361
the usual AT&T mnemonic with AT&T syntax for compatibility with the
10362
output of `gcc'.  Several x87 instructions, `fadd', `fdiv', `fdivp',
10363
`fdivr', `fdivrp', `fmul', `fsub', `fsubp', `fsubr' and `fsubrp',  are
10364
implemented in AT&T System V/386 assembler with different mnemonics
10365
from those in Intel IA32 specification.  `gcc' generates those
10366
instructions with AT&T mnemonic.
10367
 
10368

10369
File: as.info,  Node: i386-Regs,  Next: i386-Prefixes,  Prev: i386-Mnemonics,  Up: i386-Dependent
10370
 
10371
9.15.6 Register Naming
10372
----------------------
10373
 
10374
Register operands are always prefixed with `%'.  The 80386 registers
10375
consist of
10376
 
10377
   * the 8 32-bit registers `%eax' (the accumulator), `%ebx', `%ecx',
10378
     `%edx', `%edi', `%esi', `%ebp' (the frame pointer), and `%esp'
10379
     (the stack pointer).
10380
 
10381
   * the 8 16-bit low-ends of these: `%ax', `%bx', `%cx', `%dx', `%di',
10382
     `%si', `%bp', and `%sp'.
10383
 
10384
   * the 8 8-bit registers: `%ah', `%al', `%bh', `%bl', `%ch', `%cl',
10385
     `%dh', and `%dl' (These are the high-bytes and low-bytes of `%ax',
10386
     `%bx', `%cx', and `%dx')
10387
 
10388
   * the 6 section registers `%cs' (code section), `%ds' (data
10389
     section), `%ss' (stack section), `%es', `%fs', and `%gs'.
10390
 
10391
   * the 3 processor control registers `%cr0', `%cr2', and `%cr3'.
10392
 
10393
   * the 6 debug registers `%db0', `%db1', `%db2', `%db3', `%db6', and
10394
     `%db7'.
10395
 
10396
   * the 2 test registers `%tr6' and `%tr7'.
10397
 
10398
   * the 8 floating point register stack `%st' or equivalently
10399
     `%st(0)', `%st(1)', `%st(2)', `%st(3)', `%st(4)', `%st(5)',
10400
     `%st(6)', and `%st(7)'.  These registers are overloaded by 8 MMX
10401
     registers `%mm0', `%mm1', `%mm2', `%mm3', `%mm4', `%mm5', `%mm6'
10402
     and `%mm7'.
10403
 
10404
   * the 8 SSE registers registers `%xmm0', `%xmm1', `%xmm2', `%xmm3',
10405
     `%xmm4', `%xmm5', `%xmm6' and `%xmm7'.
10406
 
10407
   The AMD x86-64 architecture extends the register set by:
10408
 
10409
   * enhancing the 8 32-bit registers to 64-bit: `%rax' (the
10410
     accumulator), `%rbx', `%rcx', `%rdx', `%rdi', `%rsi', `%rbp' (the
10411
     frame pointer), `%rsp' (the stack pointer)
10412
 
10413
   * the 8 extended registers `%r8'-`%r15'.
10414
 
10415
   * the 8 32-bit low ends of the extended registers: `%r8d'-`%r15d'
10416
 
10417
   * the 8 16-bit low ends of the extended registers: `%r8w'-`%r15w'
10418
 
10419
   * the 8 8-bit low ends of the extended registers: `%r8b'-`%r15b'
10420
 
10421
   * the 4 8-bit registers: `%sil', `%dil', `%bpl', `%spl'.
10422
 
10423
   * the 8 debug registers: `%db8'-`%db15'.
10424
 
10425
   * the 8 SSE registers: `%xmm8'-`%xmm15'.
10426
 
10427

10428
File: as.info,  Node: i386-Prefixes,  Next: i386-Memory,  Prev: i386-Regs,  Up: i386-Dependent
10429
 
10430
9.15.7 Instruction Prefixes
10431
---------------------------
10432
 
10433
Instruction prefixes are used to modify the following instruction.  They
10434
are used to repeat string instructions, to provide section overrides, to
10435
perform bus lock operations, and to change operand and address sizes.
10436
(Most instructions that normally operate on 32-bit operands will use
10437
16-bit operands if the instruction has an "operand size" prefix.)
10438
Instruction prefixes are best written on the same line as the
10439
instruction they act upon. For example, the `scas' (scan string)
10440
instruction is repeated with:
10441
 
10442
             repne scas %es:(%edi),%al
10443
 
10444
   You may also place prefixes on the lines immediately preceding the
10445
instruction, but this circumvents checks that `as' does with prefixes,
10446
and will not work with all prefixes.
10447
 
10448
   Here is a list of instruction prefixes:
10449
 
10450
   * Section override prefixes `cs', `ds', `ss', `es', `fs', `gs'.
10451
     These are automatically added by specifying using the
10452
     SECTION:MEMORY-OPERAND form for memory references.
10453
 
10454
   * Operand/Address size prefixes `data16' and `addr16' change 32-bit
10455
     operands/addresses into 16-bit operands/addresses, while `data32'
10456
     and `addr32' change 16-bit ones (in a `.code16' section) into
10457
     32-bit operands/addresses.  These prefixes _must_ appear on the
10458
     same line of code as the instruction they modify. For example, in
10459
     a 16-bit `.code16' section, you might write:
10460
 
10461
                  addr32 jmpl *(%ebx)
10462
 
10463
   * The bus lock prefix `lock' inhibits interrupts during execution of
10464
     the instruction it precedes.  (This is only valid with certain
10465
     instructions; see a 80386 manual for details).
10466
 
10467
   * The wait for coprocessor prefix `wait' waits for the coprocessor to
10468
     complete the current instruction.  This should never be needed for
10469
     the 80386/80387 combination.
10470
 
10471
   * The `rep', `repe', and `repne' prefixes are added to string
10472
     instructions to make them repeat `%ecx' times (`%cx' times if the
10473
     current address size is 16-bits).
10474
 
10475
   * The `rex' family of prefixes is used by x86-64 to encode
10476
     extensions to i386 instruction set.  The `rex' prefix has four
10477
     bits -- an operand size overwrite (`64') used to change operand
10478
     size from 32-bit to 64-bit and X, Y and Z extensions bits used to
10479
     extend the register set.
10480
 
10481
     You may write the `rex' prefixes directly. The `rex64xyz'
10482
     instruction emits `rex' prefix with all the bits set.  By omitting
10483
     the `64', `x', `y' or `z' you may write other prefixes as well.
10484
     Normally, there is no need to write the prefixes explicitly, since
10485
     gas will automatically generate them based on the instruction
10486
     operands.
10487
 
10488

10489
File: as.info,  Node: i386-Memory,  Next: i386-Jumps,  Prev: i386-Prefixes,  Up: i386-Dependent
10490
 
10491
9.15.8 Memory References
10492
------------------------
10493
 
10494
An Intel syntax indirect memory reference of the form
10495
 
10496
     SECTION:[BASE + INDEX*SCALE + DISP]
10497
 
10498
is translated into the AT&T syntax
10499
 
10500
     SECTION:DISP(BASE, INDEX, SCALE)
10501
 
10502
where BASE and INDEX are the optional 32-bit base and index registers,
10503
DISP is the optional displacement, and SCALE, taking the values 1, 2,
10504
4, and 8, multiplies INDEX to calculate the address of the operand.  If
10505
no SCALE is specified, SCALE is taken to be 1.  SECTION specifies the
10506
optional section register for the memory operand, and may override the
10507
default section register (see a 80386 manual for section register
10508
defaults). Note that section overrides in AT&T syntax _must_ be
10509
preceded by a `%'.  If you specify a section override which coincides
10510
with the default section register, `as' does _not_ output any section
10511
register override prefixes to assemble the given instruction.  Thus,
10512
section overrides can be specified to emphasize which section register
10513
is used for a given memory operand.
10514
 
10515
   Here are some examples of Intel and AT&T style memory references:
10516
 
10517
AT&T: `-4(%ebp)', Intel:  `[ebp - 4]'
10518
     BASE is `%ebp'; DISP is `-4'. SECTION is missing, and the default
10519
     section is used (`%ss' for addressing with `%ebp' as the base
10520
     register).  INDEX, SCALE are both missing.
10521
 
10522
AT&T: `foo(,%eax,4)', Intel: `[foo + eax*4]'
10523
     INDEX is `%eax' (scaled by a SCALE 4); DISP is `foo'.  All other
10524
     fields are missing.  The section register here defaults to `%ds'.
10525
 
10526
AT&T: `foo(,1)'; Intel `[foo]'
10527
     This uses the value pointed to by `foo' as a memory operand.  Note
10528
     that BASE and INDEX are both missing, but there is only _one_ `,'.
10529
     This is a syntactic exception.
10530
 
10531
AT&T: `%gs:foo'; Intel `gs:foo'
10532
     This selects the contents of the variable `foo' with section
10533
     register SECTION being `%gs'.
10534
 
10535
   Absolute (as opposed to PC relative) call and jump operands must be
10536
prefixed with `*'.  If no `*' is specified, `as' always chooses PC
10537
relative addressing for jump/call labels.
10538
 
10539
   Any instruction that has a memory operand, but no register operand,
10540
_must_ specify its size (byte, word, long, or quadruple) with an
10541
instruction mnemonic suffix (`b', `w', `l' or `q', respectively).
10542
 
10543
   The x86-64 architecture adds an RIP (instruction pointer relative)
10544
addressing.  This addressing mode is specified by using `rip' as a base
10545
register.  Only constant offsets are valid. For example:
10546
 
10547
AT&T: `1234(%rip)', Intel: `[rip + 1234]'
10548
     Points to the address 1234 bytes past the end of the current
10549
     instruction.
10550
 
10551
AT&T: `symbol(%rip)', Intel: `[rip + symbol]'
10552
     Points to the `symbol' in RIP relative way, this is shorter than
10553
     the default absolute addressing.
10554
 
10555
   Other addressing modes remain unchanged in x86-64 architecture,
10556
except registers used are 64-bit instead of 32-bit.
10557
 
10558

10559
File: as.info,  Node: i386-Jumps,  Next: i386-Float,  Prev: i386-Memory,  Up: i386-Dependent
10560
 
10561
9.15.9 Handling of Jump Instructions
10562
------------------------------------
10563
 
10564
Jump instructions are always optimized to use the smallest possible
10565
displacements.  This is accomplished by using byte (8-bit) displacement
10566
jumps whenever the target is sufficiently close.  If a byte displacement
10567
is insufficient a long displacement is used.  We do not support word
10568
(16-bit) displacement jumps in 32-bit mode (i.e. prefixing the jump
10569
instruction with the `data16' instruction prefix), since the 80386
10570
insists upon masking `%eip' to 16 bits after the word displacement is
10571
added. (See also *note i386-Arch::)
10572
 
10573
   Note that the `jcxz', `jecxz', `loop', `loopz', `loope', `loopnz'
10574
and `loopne' instructions only come in byte displacements, so that if
10575
you use these instructions (`gcc' does not use them) you may get an
10576
error message (and incorrect code).  The AT&T 80386 assembler tries to
10577
get around this problem by expanding `jcxz foo' to
10578
 
10579
              jcxz cx_zero
10580
              jmp cx_nonzero
10581
     cx_zero: jmp foo
10582
     cx_nonzero:
10583
 
10584

10585
File: as.info,  Node: i386-Float,  Next: i386-SIMD,  Prev: i386-Jumps,  Up: i386-Dependent
10586
 
10587
9.15.10 Floating Point
10588
----------------------
10589
 
10590
All 80387 floating point types except packed BCD are supported.  (BCD
10591
support may be added without much difficulty).  These data types are
10592
16-, 32-, and 64- bit integers, and single (32-bit), double (64-bit),
10593
and extended (80-bit) precision floating point.  Each supported type
10594
has an instruction mnemonic suffix and a constructor associated with
10595
it.  Instruction mnemonic suffixes specify the operand's data type.
10596
Constructors build these data types into memory.
10597
 
10598
   * Floating point constructors are `.float' or `.single', `.double',
10599
     and `.tfloat' for 32-, 64-, and 80-bit formats.  These correspond
10600
     to instruction mnemonic suffixes `s', `l', and `t'. `t' stands for
10601
     80-bit (ten byte) real.  The 80387 only supports this format via
10602
     the `fldt' (load 80-bit real to stack top) and `fstpt' (store
10603
     80-bit real and pop stack) instructions.
10604
 
10605
   * Integer constructors are `.word', `.long' or `.int', and `.quad'
10606
     for the 16-, 32-, and 64-bit integer formats.  The corresponding
10607
     instruction mnemonic suffixes are `s' (single), `l' (long), and
10608
     `q' (quad).  As with the 80-bit real format, the 64-bit `q' format
10609
     is only present in the `fildq' (load quad integer to stack top)
10610
     and `fistpq' (store quad integer and pop stack) instructions.
10611
 
10612
   Register to register operations should not use instruction mnemonic
10613
suffixes.  `fstl %st, %st(1)' will give a warning, and be assembled as
10614
if you wrote `fst %st, %st(1)', since all register to register
10615
operations use 80-bit floating point operands. (Contrast this with
10616
`fstl %st, mem', which converts `%st' from 80-bit to 64-bit floating
10617
point format, then stores the result in the 4 byte location `mem')
10618
 
10619

10620
File: as.info,  Node: i386-SIMD,  Next: i386-LWP,  Prev: i386-Float,  Up: i386-Dependent
10621
 
10622
9.15.11 Intel's MMX and AMD's 3DNow! SIMD Operations
10623
----------------------------------------------------
10624
 
10625
`as' supports Intel's MMX instruction set (SIMD instructions for
10626
integer data), available on Intel's Pentium MMX processors and Pentium
10627
II processors, AMD's K6 and K6-2 processors, Cyrix' M2 processor, and
10628
probably others.  It also supports AMD's 3DNow!  instruction set (SIMD
10629
instructions for 32-bit floating point data) available on AMD's K6-2
10630
processor and possibly others in the future.
10631
 
10632
   Currently, `as' does not support Intel's floating point SIMD, Katmai
10633
(KNI).
10634
 
10635
   The eight 64-bit MMX operands, also used by 3DNow!, are called
10636
`%mm0', `%mm1', ... `%mm7'.  They contain eight 8-bit integers, four
10637
16-bit integers, two 32-bit integers, one 64-bit integer, or two 32-bit
10638
floating point values.  The MMX registers cannot be used at the same
10639
time as the floating point stack.
10640
 
10641
   See Intel and AMD documentation, keeping in mind that the operand
10642
order in instructions is reversed from the Intel syntax.
10643
 
10644

10645
File: as.info,  Node: i386-LWP,  Next: i386-BMI,  Prev: i386-SIMD,  Up: i386-Dependent
10646
 
10647
9.15.12 AMD's Lightweight Profiling Instructions
10648
------------------------------------------------
10649
 
10650
`as' supports AMD's Lightweight Profiling (LWP) instruction set,
10651
available on AMD's Family 15h (Orochi) processors.
10652
 
10653
   LWP enables applications to collect and manage performance data, and
10654
react to performance events.  The collection of performance data
10655
requires no context switches.  LWP runs in the context of a thread and
10656
so several counters can be used independently across multiple threads.
10657
LWP can be used in both 64-bit and legacy 32-bit modes.
10658
 
10659
   For detailed information on the LWP instruction set, see the `AMD
10660
Lightweight Profiling Specification' available at Lightweight Profiling
10661
Specification (http://developer.amd.com/cpu/LWP).
10662
 
10663

10664
File: as.info,  Node: i386-BMI,  Next: i386-TBM,  Prev: i386-LWP,  Up: i386-Dependent
10665
 
10666
9.15.13 Bit Manipulation Instructions
10667
-------------------------------------
10668
 
10669
`as' supports the Bit Manipulation (BMI) instruction set.
10670
 
10671
   BMI instructions provide several instructions implementing individual
10672
bit manipulation operations such as isolation, masking, setting, or
10673
resetting.
10674
 
10675

10676
File: as.info,  Node: i386-TBM,  Next: i386-16bit,  Prev: i386-BMI,  Up: i386-Dependent
10677
 
10678
9.15.14 AMD's Trailing Bit Manipulation Instructions
10679
----------------------------------------------------
10680
 
10681
`as' supports AMD's Trailing Bit Manipulation (TBM) instruction set,
10682
available on AMD's BDVER2 processors (Trinity and Viperfish).
10683
 
10684
   TBM instructions provide instructions implementing individual bit
10685
manipulation operations such as isolating, masking, setting, resetting,
10686
complementing, and operations on trailing zeros and ones.
10687
 
10688

10689
File: as.info,  Node: i386-16bit,  Next: i386-Arch,  Prev: i386-TBM,  Up: i386-Dependent
10690
 
10691
9.15.15 Writing 16-bit Code
10692
---------------------------
10693
 
10694
While `as' normally writes only "pure" 32-bit i386 code or 64-bit
10695
x86-64 code depending on the default configuration, it also supports
10696
writing code to run in real mode or in 16-bit protected mode code
10697
segments.  To do this, put a `.code16' or `.code16gcc' directive before
10698
the assembly language instructions to be run in 16-bit mode.  You can
10699
switch `as' to writing 32-bit code with the `.code32' directive or
10700
64-bit code with the `.code64' directive.
10701
 
10702
   `.code16gcc' provides experimental support for generating 16-bit
10703
code from gcc, and differs from `.code16' in that `call', `ret',
10704
`enter', `leave', `push', `pop', `pusha', `popa', `pushf', and `popf'
10705
instructions default to 32-bit size.  This is so that the stack pointer
10706
is manipulated in the same way over function calls, allowing access to
10707
function parameters at the same stack offsets as in 32-bit mode.
10708
`.code16gcc' also automatically adds address size prefixes where
10709
necessary to use the 32-bit addressing modes that gcc generates.
10710
 
10711
   The code which `as' generates in 16-bit mode will not necessarily
10712
run on a 16-bit pre-80386 processor.  To write code that runs on such a
10713
processor, you must refrain from using _any_ 32-bit constructs which
10714
require `as' to output address or operand size prefixes.
10715
 
10716
   Note that writing 16-bit code instructions by explicitly specifying a
10717
prefix or an instruction mnemonic suffix within a 32-bit code section
10718
generates different machine instructions than those generated for a
10719
16-bit code segment.  In a 32-bit code section, the following code
10720
generates the machine opcode bytes `66 6a 04', which pushes the value
10721
`4' onto the stack, decrementing `%esp' by 2.
10722
 
10723
             pushw $4
10724
 
10725
   The same code in a 16-bit code section would generate the machine
10726
opcode bytes `6a 04' (i.e., without the operand size prefix), which is
10727
correct since the processor default operand size is assumed to be 16
10728
bits in a 16-bit code section.
10729
 
10730

10731
File: as.info,  Node: i386-Bugs,  Next: i386-Notes,  Prev: i386-Arch,  Up: i386-Dependent
10732
 
10733
9.15.16 AT&T Syntax bugs
10734
------------------------
10735
 
10736
The UnixWare assembler, and probably other AT&T derived ix86 Unix
10737
assemblers, generate floating point instructions with reversed source
10738
and destination registers in certain cases.  Unfortunately, gcc and
10739
possibly many other programs use this reversed syntax, so we're stuck
10740
with it.
10741
 
10742
   For example
10743
 
10744
             fsub %st,%st(3)
10745
   results in `%st(3)' being updated to `%st - %st(3)' rather than the
10746
expected `%st(3) - %st'.  This happens with all the non-commutative
10747
arithmetic floating point operations with two register operands where
10748
the source register is `%st' and the destination register is `%st(i)'.
10749
 
10750

10751
File: as.info,  Node: i386-Arch,  Next: i386-Bugs,  Prev: i386-16bit,  Up: i386-Dependent
10752
 
10753
9.15.17 Specifying CPU Architecture
10754
-----------------------------------
10755
 
10756
`as' may be told to assemble for a particular CPU (sub-)architecture
10757
with the `.arch CPU_TYPE' directive.  This directive enables a warning
10758
when gas detects an instruction that is not supported on the CPU
10759
specified.  The choices for CPU_TYPE are:
10760
 
10761
`i8086'        `i186'         `i286'         `i386'
10762
`i486'         `i586'         `i686'         `pentium'
10763
`pentiumpro'   `pentiumii'    `pentiumiii'   `pentium4'
10764
`prescott'     `nocona'       `core'         `core2'
10765
`corei7'       `l1om'         `k1om'
10766
`k6'           `k6_2'         `athlon'       `k8'
10767
`amdfam10'     `bdver1'       `bdver2'       `bdver3'
10768
`btver1'       `btver2'
10769
`generic32'    `generic64'
10770
`.mmx'         `.sse'         `.sse2'        `.sse3'
10771
`.ssse3'       `.sse4.1'      `.sse4.2'      `.sse4'
10772
`.avx'         `.vmx'         `.smx'         `.ept'
10773
`.clflush'     `.movbe'       `.xsave'       `.xsaveopt'
10774
`.aes'         `.pclmul'      `.fma'         `.fsgsbase'
10775
`.rdrnd'       `.f16c'        `.avx2'        `.bmi2'
10776
`.lzcnt'       `.invpcid'     `.vmfunc'      `.hle'
10777
`.rtm'         `.adx'         `.rdseed'      `.prfchw'
10778
`.3dnow'       `.3dnowa'      `.sse4a'       `.sse5'
10779
`.syscall'     `.rdtscp'      `.svme'        `.abm'
10780
`.lwp'         `.fma4'        `.xop'         `.cx16'
10781
`.padlock'
10782
 
10783
   Apart from the warning, there are only two other effects on `as'
10784
operation;  Firstly, if you specify a CPU other than `i486', then shift
10785
by one instructions such as `sarl $1, %eax' will automatically use a
10786
two byte opcode sequence.  The larger three byte opcode sequence is
10787
used on the 486 (and when no architecture is specified) because it
10788
executes faster on the 486.  Note that you can explicitly request the
10789
two byte opcode by writing `sarl %eax'.  Secondly, if you specify
10790
`i8086', `i186', or `i286', _and_ `.code16' or `.code16gcc' then byte
10791
offset conditional jumps will be promoted when necessary to a two
10792
instruction sequence consisting of a conditional jump of the opposite
10793
sense around an unconditional jump to the target.
10794
 
10795
   Following the CPU architecture (but not a sub-architecture, which
10796
are those starting with a dot), you may specify `jumps' or `nojumps' to
10797
control automatic promotion of conditional jumps. `jumps' is the
10798
default, and enables jump promotion;  All external jumps will be of the
10799
long variety, and file-local jumps will be promoted as necessary.
10800
(*note i386-Jumps::)  `nojumps' leaves external conditional jumps as
10801
byte offset jumps, and warns about file-local conditional jumps that
10802
`as' promotes.  Unconditional jumps are treated as for `jumps'.
10803
 
10804
   For example
10805
 
10806
      .arch i8086,nojumps
10807
 
10808

10809
File: as.info,  Node: i386-Notes,  Prev: i386-Bugs,  Up: i386-Dependent
10810
 
10811
9.15.18 Notes
10812
-------------
10813
 
10814
There is some trickery concerning the `mul' and `imul' instructions
10815
that deserves mention.  The 16-, 32-, 64- and 128-bit expanding
10816
multiplies (base opcode `0xf6'; extension 4 for `mul' and 5 for `imul')
10817
can be output only in the one operand form.  Thus, `imul %ebx, %eax'
10818
does _not_ select the expanding multiply; the expanding multiply would
10819
clobber the `%edx' register, and this would confuse `gcc' output.  Use
10820
`imul %ebx' to get the 64-bit product in `%edx:%eax'.
10821
 
10822
   We have added a two operand form of `imul' when the first operand is
10823
an immediate mode expression and the second operand is a register.
10824
This is just a shorthand, so that, multiplying `%eax' by 69, for
10825
example, can be done with `imul $69, %eax' rather than `imul $69, %eax,
10826
%eax'.
10827
 
10828

10829
File: as.info,  Node: i860-Dependent,  Next: i960-Dependent,  Prev: i386-Dependent,  Up: Machine Dependencies
10830
 
10831
9.16 Intel i860 Dependent Features
10832
==================================
10833
 
10834
* Menu:
10835
 
10836
* Notes-i860::                  i860 Notes
10837
* Options-i860::                i860 Command-line Options
10838
* Directives-i860::             i860 Machine Directives
10839
* Opcodes for i860::            i860 Opcodes
10840
* Syntax of i860::              i860 Syntax
10841
 
10842

10843
File: as.info,  Node: Notes-i860,  Next: Options-i860,  Up: i860-Dependent
10844
 
10845
9.16.1 i860 Notes
10846
-----------------
10847
 
10848
This is a fairly complete i860 assembler which is compatible with the
10849
UNIX System V/860 Release 4 assembler. However, it does not currently
10850
support SVR4 PIC (i.e., `@GOT, @GOTOFF, @PLT').
10851
 
10852
   Like the SVR4/860 assembler, the output object format is ELF32.
10853
Currently, this is the only supported object format. If there is
10854
sufficient interest, other formats such as COFF may be implemented.
10855
 
10856
   Both the Intel and AT&T/SVR4 syntaxes are supported, with the latter
10857
being the default.  One difference is that AT&T syntax requires the '%'
10858
prefix on register names while Intel syntax does not.  Another
10859
difference is in the specification of relocatable expressions.  The
10860
Intel syntax is `ha%expression' whereas the SVR4 syntax is
10861
`[expression]@ha' (and similarly for the "l" and "h" selectors).
10862
 
10863

10864
File: as.info,  Node: Options-i860,  Next: Directives-i860,  Prev: Notes-i860,  Up: i860-Dependent
10865
 
10866
9.16.2 i860 Command-line Options
10867
--------------------------------
10868
 
10869
9.16.2.1 SVR4 compatibility options
10870
...................................
10871
 
10872
`-V'
10873
     Print assembler version.
10874
 
10875
`-Qy'
10876
     Ignored.
10877
 
10878
`-Qn'
10879
     Ignored.
10880
 
10881
9.16.2.2 Other options
10882
......................
10883
 
10884
`-EL'
10885
     Select little endian output (this is the default).
10886
 
10887
`-EB'
10888
     Select big endian output. Note that the i860 always reads
10889
     instructions as little endian data, so this option only effects
10890
     data and not instructions.
10891
 
10892
`-mwarn-expand'
10893
     Emit a warning message if any pseudo-instruction expansions
10894
     occurred.  For example, a `or' instruction with an immediate
10895
     larger than 16-bits will be expanded into two instructions. This
10896
     is a very undesirable feature to rely on, so this flag can help
10897
     detect any code where it happens. One use of it, for instance, has
10898
     been to find and eliminate any place where `gcc' may emit these
10899
     pseudo-instructions.
10900
 
10901
`-mxp'
10902
     Enable support for the i860XP instructions and control registers.
10903
     By default, this option is disabled so that only the base
10904
     instruction set (i.e., i860XR) is supported.
10905
 
10906
`-mintel-syntax'
10907
     The i860 assembler defaults to AT&T/SVR4 syntax.  This option
10908
     enables the Intel syntax.
10909
 
10910

10911
File: as.info,  Node: Directives-i860,  Next: Opcodes for i860,  Prev: Options-i860,  Up: i860-Dependent
10912
 
10913
9.16.3 i860 Machine Directives
10914
------------------------------
10915
 
10916
`.dual'
10917
     Enter dual instruction mode. While this directive is supported, the
10918
     preferred way to use dual instruction mode is to explicitly code
10919
     the dual bit with the `d.' prefix.
10920
 
10921
`.enddual'
10922
     Exit dual instruction mode. While this directive is supported, the
10923
     preferred way to use dual instruction mode is to explicitly code
10924
     the dual bit with the `d.' prefix.
10925
 
10926
`.atmp'
10927
     Change the temporary register used when expanding pseudo
10928
     operations. The default register is `r31'.
10929
 
10930
   The `.dual', `.enddual', and `.atmp' directives are available only
10931
in the Intel syntax mode.
10932
 
10933
   Both syntaxes allow for the standard `.align' directive.  However,
10934
the Intel syntax additionally allows keywords for the alignment
10935
parameter: "`.align type'", where `type' is one of `.short', `.long',
10936
`.quad', `.single', `.double' representing alignments of 2, 4, 16, 4,
10937
and 8, respectively.
10938
 
10939

10940
File: as.info,  Node: Opcodes for i860,  Next: Syntax of i860,  Prev: Directives-i860,  Up: i860-Dependent
10941
 
10942
9.16.4 i860 Opcodes
10943
-------------------
10944
 
10945
All of the Intel i860XR and i860XP machine instructions are supported.
10946
Please see either _i860 Microprocessor Programmer's Reference Manual_
10947
or _i860 Microprocessor Architecture_ for more information.
10948
 
10949
9.16.4.1 Other instruction support (pseudo-instructions)
10950
........................................................
10951
 
10952
For compatibility with some other i860 assemblers, a number of
10953
pseudo-instructions are supported. While these are supported, they are
10954
a very undesirable feature that should be avoided - in particular, when
10955
they result in an expansion to multiple actual i860 instructions. Below
10956
are the pseudo-instructions that result in expansions.
10957
   * Load large immediate into general register:
10958
 
10959
     The pseudo-instruction `mov imm,%rn' (where the immediate does not
10960
     fit within a signed 16-bit field) will be expanded into:
10961
          orh large_imm@h,%r0,%rn
10962
          or large_imm@l,%rn,%rn
10963
 
10964
   * Load/store with relocatable address expression:
10965
 
10966
     For example, the pseudo-instruction `ld.b addr_exp(%rx),%rn' will
10967
     be expanded into:
10968
          orh addr_exp@ha,%rx,%r31
10969
          ld.l addr_exp@l(%r31),%rn
10970
 
10971
     The analogous expansions apply to `ld.x, st.x, fld.x, pfld.x,
10972
     fst.x', and `pst.x' as well.
10973
 
10974
   * Signed large immediate with add/subtract:
10975
 
10976
     If any of the arithmetic operations `adds, addu, subs, subu' are
10977
     used with an immediate larger than 16-bits (signed), then they
10978
     will be expanded.  For instance, the pseudo-instruction `adds
10979
     large_imm,%rx,%rn' expands to:
10980
          orh large_imm@h,%r0,%r31
10981
          or large_imm@l,%r31,%r31
10982
          adds %r31,%rx,%rn
10983
 
10984
   * Unsigned large immediate with logical operations:
10985
 
10986
     Logical operations (`or, andnot, or, xor') also result in
10987
     expansions.  The pseudo-instruction `or large_imm,%rx,%rn' results
10988
     in:
10989
          orh large_imm@h,%rx,%r31
10990
          or large_imm@l,%r31,%rn
10991
 
10992
     Similarly for the others, except for `and' which expands to:
10993
          andnot (-1 - large_imm)@h,%rx,%r31
10994
          andnot (-1 - large_imm)@l,%r31,%rn
10995
 
10996

10997
File: as.info,  Node: Syntax of i860,  Prev: Opcodes for i860,  Up: i860-Dependent
10998
 
10999
9.16.5 i860 Syntax
11000
------------------
11001
 
11002
* Menu:
11003
 
11004
* i860-Chars::                Special Characters
11005
 
11006

11007
File: as.info,  Node: i860-Chars,  Up: Syntax of i860
11008
 
11009
9.16.5.1 Special Characters
11010
...........................
11011
 
11012
The presence of a `#' appearing anywhere on a line indicates the start
11013
of a comment that extends to the end of that line.
11014
 
11015
   If a `#' appears as the first character of a line then the whole
11016
line is treated as a comment, but in this case the line can also be a
11017
logical line number directive (*note Comments::) or a preprocessor
11018
control command (*note Preprocessing::).
11019
 
11020
   The `;' character can be used to separate statements on the same
11021
line.
11022
 
11023

11024
File: as.info,  Node: i960-Dependent,  Next: IA-64-Dependent,  Prev: i860-Dependent,  Up: Machine Dependencies
11025
 
11026
9.17 Intel 80960 Dependent Features
11027
===================================
11028
 
11029
* Menu:
11030
 
11031
* Options-i960::                i960 Command-line Options
11032
* Floating Point-i960::         Floating Point
11033
* Directives-i960::             i960 Machine Directives
11034
* Opcodes for i960::            i960 Opcodes
11035
* Syntax of i960::              i960 Syntax
11036
 
11037

11038
File: as.info,  Node: Options-i960,  Next: Floating Point-i960,  Up: i960-Dependent
11039
 
11040
9.17.1 i960 Command-line Options
11041
--------------------------------
11042
 
11043
`-ACA | -ACA_A | -ACB | -ACC | -AKA | -AKB | -AKC | -AMC'
11044
     Select the 80960 architecture.  Instructions or features not
11045
     supported by the selected architecture cause fatal errors.
11046
 
11047
     `-ACA' is equivalent to `-ACA_A'; `-AKC' is equivalent to `-AMC'.
11048
     Synonyms are provided for compatibility with other tools.
11049
 
11050
     If you do not specify any of these options, `as' generates code
11051
     for any instruction or feature that is supported by _some_ version
11052
     of the 960 (even if this means mixing architectures!).  In
11053
     principle, `as' attempts to deduce the minimal sufficient
11054
     processor type if none is specified; depending on the object code
11055
     format, the processor type may be recorded in the object file.  If
11056
     it is critical that the `as' output match a specific architecture,
11057
     specify that architecture explicitly.
11058
 
11059
`-b'
11060
     Add code to collect information about conditional branches taken,
11061
     for later optimization using branch prediction bits.  (The
11062
     conditional branch instructions have branch prediction bits in the
11063
     CA, CB, and CC architectures.)  If BR represents a conditional
11064
     branch instruction, the following represents the code generated by
11065
     the assembler when `-b' is specified:
11066
 
11067
                  call    INCREMENT ROUTINE
11068
                  .word   0       # pre-counter
11069
          Label:  BR
11070
                  call    INCREMENT ROUTINE
11071
                  .word   0       # post-counter
11072
 
11073
     The counter following a branch records the number of times that
11074
     branch was _not_ taken; the difference between the two counters is
11075
     the number of times the branch _was_ taken.
11076
 
11077
     A table of every such `Label' is also generated, so that the
11078
     external postprocessor `gbr960' (supplied by Intel) can locate all
11079
     the counters.  This table is always labeled `__BRANCH_TABLE__';
11080
     this is a local symbol to permit collecting statistics for many
11081
     separate object files.  The table is word aligned, and begins with
11082
     a two-word header.  The first word, initialized to 0, is used in
11083
     maintaining linked lists of branch tables.  The second word is a
11084
     count of the number of entries in the table, which follow
11085
     immediately: each is a word, pointing to one of the labels
11086
     illustrated above.
11087
 
11088
           +------------+------------+------------+ ... +------------+
11089
           |            |            |            |     |            |
11090
           |  *NEXT     |  COUNT: N  | *BRLAB 1   |     | *BRLAB N   |
11091
           |            |            |            |     |            |
11092
           +------------+------------+------------+ ... +------------+
11093
 
11094
                         __BRANCH_TABLE__ layout
11095
 
11096
     The first word of the header is used to locate multiple branch
11097
     tables, since each object file may contain one. Normally the links
11098
     are maintained with a call to an initialization routine, placed at
11099
     the beginning of each function in the file.  The GNU C compiler
11100
     generates these calls automatically when you give it a `-b' option.
11101
     For further details, see the documentation of `gbr960'.
11102
 
11103
`-no-relax'
11104
     Normally, Compare-and-Branch instructions with targets that require
11105
     displacements greater than 13 bits (or that have external targets)
11106
     are replaced with the corresponding compare (or `chkbit') and
11107
     branch instructions.  You can use the `-no-relax' option to
11108
     specify that `as' should generate errors instead, if the target
11109
     displacement is larger than 13 bits.
11110
 
11111
     This option does not affect the Compare-and-Jump instructions; the
11112
     code emitted for them is _always_ adjusted when necessary
11113
     (depending on displacement size), regardless of whether you use
11114
     `-no-relax'.
11115
 
11116

11117
File: as.info,  Node: Floating Point-i960,  Next: Directives-i960,  Prev: Options-i960,  Up: i960-Dependent
11118
 
11119
9.17.2 Floating Point
11120
---------------------
11121
 
11122
`as' generates IEEE floating-point numbers for the directives `.float',
11123
`.double', `.extended', and `.single'.
11124
 
11125

11126
File: as.info,  Node: Directives-i960,  Next: Opcodes for i960,  Prev: Floating Point-i960,  Up: i960-Dependent
11127
 
11128
9.17.3 i960 Machine Directives
11129
------------------------------
11130
 
11131
`.bss SYMBOL, LENGTH, ALIGN'
11132
     Reserve LENGTH bytes in the bss section for a local SYMBOL,
11133
     aligned to the power of two specified by ALIGN.  LENGTH and ALIGN
11134
     must be positive absolute expressions.  This directive differs
11135
     from `.lcomm' only in that it permits you to specify an alignment.
11136
     *Note `.lcomm': Lcomm.
11137
 
11138
`.extended FLONUMS'
11139
     `.extended' expects zero or more flonums, separated by commas; for
11140
     each flonum, `.extended' emits an IEEE extended-format (80-bit)
11141
     floating-point number.
11142
 
11143
`.leafproc CALL-LAB, BAL-LAB'
11144
     You can use the `.leafproc' directive in conjunction with the
11145
     optimized `callj' instruction to enable faster calls of leaf
11146
     procedures.  If a procedure is known to call no other procedures,
11147
     you may define an entry point that skips procedure prolog code
11148
     (and that does not depend on system-supplied saved context), and
11149
     declare it as the BAL-LAB using `.leafproc'.  If the procedure
11150
     also has an entry point that goes through the normal prolog, you
11151
     can specify that entry point as CALL-LAB.
11152
 
11153
     A `.leafproc' declaration is meant for use in conjunction with the
11154
     optimized call instruction `callj'; the directive records the data
11155
     needed later to choose between converting the `callj' into a `bal'
11156
     or a `call'.
11157
 
11158
     CALL-LAB is optional; if only one argument is present, or if the
11159
     two arguments are identical, the single argument is assumed to be
11160
     the `bal' entry point.
11161
 
11162
`.sysproc NAME, INDEX'
11163
     The `.sysproc' directive defines a name for a system procedure.
11164
     After you define it using `.sysproc', you can use NAME to refer to
11165
     the system procedure identified by INDEX when calling procedures
11166
     with the optimized call instruction `callj'.
11167
 
11168
     Both arguments are required; INDEX must be between 0 and 31
11169
     (inclusive).
11170
 
11171

11172
File: as.info,  Node: Opcodes for i960,  Next: Syntax of i960,  Prev: Directives-i960,  Up: i960-Dependent
11173
 
11174
9.17.4 i960 Opcodes
11175
-------------------
11176
 
11177
All Intel 960 machine instructions are supported; *note i960
11178
Command-line Options: Options-i960. for a discussion of selecting the
11179
instruction subset for a particular 960 architecture.
11180
 
11181
   Some opcodes are processed beyond simply emitting a single
11182
corresponding instruction: `callj', and Compare-and-Branch or
11183
Compare-and-Jump instructions with target displacements larger than 13
11184
bits.
11185
 
11186
* Menu:
11187
 
11188
* callj-i960::                  `callj'
11189
* Compare-and-branch-i960::     Compare-and-Branch
11190
 
11191

11192
File: as.info,  Node: callj-i960,  Next: Compare-and-branch-i960,  Up: Opcodes for i960
11193
 
11194
9.17.4.1 `callj'
11195
................
11196
 
11197
You can write `callj' to have the assembler or the linker determine the
11198
most appropriate form of subroutine call: `call', `bal', or `calls'.
11199
If the assembly source contains enough information--a `.leafproc' or
11200
`.sysproc' directive defining the operand--then `as' translates the
11201
`callj'; if not, it simply emits the `callj', leaving it for the linker
11202
to resolve.
11203
 
11204

11205
File: as.info,  Node: Compare-and-branch-i960,  Prev: callj-i960,  Up: Opcodes for i960
11206
 
11207
9.17.4.2 Compare-and-Branch
11208
...........................
11209
 
11210
The 960 architectures provide combined Compare-and-Branch instructions
11211
that permit you to store the branch target in the lower 13 bits of the
11212
instruction word itself.  However, if you specify a branch target far
11213
enough away that its address won't fit in 13 bits, the assembler can
11214
either issue an error, or convert your Compare-and-Branch instruction
11215
into separate instructions to do the compare and the branch.
11216
 
11217
   Whether `as' gives an error or expands the instruction depends on
11218
two choices you can make: whether you use the `-no-relax' option, and
11219
whether you use a "Compare and Branch" instruction or a "Compare and
11220
Jump" instruction.  The "Jump" instructions are _always_ expanded if
11221
necessary; the "Branch" instructions are expanded when necessary
11222
_unless_ you specify `-no-relax'--in which case `as' gives an error
11223
instead.
11224
 
11225
   These are the Compare-and-Branch instructions, their "Jump" variants,
11226
and the instruction pairs they may expand into:
11227
 
11228
             Compare and
11229
          Branch      Jump       Expanded to
11230
          ------    ------       ------------
11231
             bbc                 chkbit; bno
11232
             bbs                 chkbit; bo
11233
          cmpibe    cmpije       cmpi; be
11234
          cmpibg    cmpijg       cmpi; bg
11235
         cmpibge   cmpijge       cmpi; bge
11236
          cmpibl    cmpijl       cmpi; bl
11237
         cmpible   cmpijle       cmpi; ble
11238
         cmpibno   cmpijno       cmpi; bno
11239
         cmpibne   cmpijne       cmpi; bne
11240
          cmpibo    cmpijo       cmpi; bo
11241
          cmpobe    cmpoje       cmpo; be
11242
          cmpobg    cmpojg       cmpo; bg
11243
         cmpobge   cmpojge       cmpo; bge
11244
          cmpobl    cmpojl       cmpo; bl
11245
         cmpoble   cmpojle       cmpo; ble
11246
         cmpobne   cmpojne       cmpo; bne
11247
 
11248

11249
File: as.info,  Node: Syntax of i960,  Prev: Opcodes for i960,  Up: i960-Dependent
11250
 
11251
9.17.5 Syntax for the i960
11252
--------------------------
11253
 
11254
* Menu:
11255
 
11256
* i960-Chars::                Special Characters
11257
 
11258

11259
File: as.info,  Node: i960-Chars,  Up: Syntax of i960
11260
 
11261
9.17.5.1 Special Characters
11262
...........................
11263
 
11264
The presence of a `#' on a line indicates the start of a comment that
11265
extends to the end of the current line.
11266
 
11267
   If a `#' appears as the first character of a line, the whole line is
11268
treated as a comment, but in this case the line can also be a logical
11269
line number directive (*note Comments::) or a preprocessor control
11270
command (*note Preprocessing::).
11271
 
11272
   The `;' character can be used to separate statements on the same
11273
line.
11274
 
11275

11276
File: as.info,  Node: IA-64-Dependent,  Next: IP2K-Dependent,  Prev: i960-Dependent,  Up: Machine Dependencies
11277
 
11278
9.18 IA-64 Dependent Features
11279
=============================
11280
 
11281
* Menu:
11282
 
11283
* IA-64 Options::              Options
11284
* IA-64 Syntax::               Syntax
11285
* IA-64 Opcodes::              Opcodes
11286
 
11287

11288
File: as.info,  Node: IA-64 Options,  Next: IA-64 Syntax,  Up: IA-64-Dependent
11289
 
11290
9.18.1 Options
11291
--------------
11292
 
11293
`-mconstant-gp'
11294
     This option instructs the assembler to mark the resulting object
11295
     file as using the "constant GP" model.  With this model, it is
11296
     assumed that the entire program uses a single global pointer (GP)
11297
     value.  Note that this option does not in any fashion affect the
11298
     machine code emitted by the assembler.  All it does is turn on the
11299
     EF_IA_64_CONS_GP flag in the ELF file header.
11300
 
11301
`-mauto-pic'
11302
     This option instructs the assembler to mark the resulting object
11303
     file as using the "constant GP without function descriptor" data
11304
     model.  This model is like the "constant GP" model, except that it
11305
     additionally does away with function descriptors.  What this means
11306
     is that the address of a function refers directly to the
11307
     function's code entry-point.  Normally, such an address would
11308
     refer to a function descriptor, which contains both the code
11309
     entry-point and the GP-value needed by the function.  Note that
11310
     this option does not in any fashion affect the machine code
11311
     emitted by the assembler.  All it does is turn on the
11312
     EF_IA_64_NOFUNCDESC_CONS_GP flag in the ELF file header.
11313
 
11314
`-milp32'
11315
`-milp64'
11316
`-mlp64'
11317
`-mp64'
11318
     These options select the data model.  The assembler defaults to
11319
     `-mlp64' (LP64 data model).
11320
 
11321
`-mle'
11322
`-mbe'
11323
     These options select the byte order.  The `-mle' option selects
11324
     little-endian byte order (default) and `-mbe' selects big-endian
11325
     byte order.  Note that IA-64 machine code always uses
11326
     little-endian byte order.
11327
 
11328
`-mtune=itanium1'
11329
`-mtune=itanium2'
11330
     Tune for a particular IA-64 CPU, ITANIUM1 or ITANIUM2. The default
11331
     is ITANIUM2.
11332
 
11333
`-munwind-check=warning'
11334
`-munwind-check=error'
11335
     These options control what the assembler will do when performing
11336
     consistency checks on unwind directives.  `-munwind-check=warning'
11337
     will make the assembler issue a warning when an unwind directive
11338
     check fails.  This is the default.  `-munwind-check=error' will
11339
     make the assembler issue an error when an unwind directive check
11340
     fails.
11341
 
11342
`-mhint.b=ok'
11343
`-mhint.b=warning'
11344
`-mhint.b=error'
11345
     These options control what the assembler will do when the `hint.b'
11346
     instruction is used.  `-mhint.b=ok' will make the assembler accept
11347
     `hint.b'.  `-mint.b=warning' will make the assembler issue a
11348
     warning when `hint.b' is used.  `-mhint.b=error' will make the
11349
     assembler treat `hint.b' as an error, which is the default.
11350
 
11351
`-x'
11352
`-xexplicit'
11353
     These options turn on dependency violation checking.
11354
 
11355
`-xauto'
11356
     This option instructs the assembler to automatically insert stop
11357
     bits where necessary to remove dependency violations.  This is the
11358
     default mode.
11359
 
11360
`-xnone'
11361
     This option turns off dependency violation checking.
11362
 
11363
`-xdebug'
11364
     This turns on debug output intended to help tracking down bugs in
11365
     the dependency violation checker.
11366
 
11367
`-xdebugn'
11368
     This is a shortcut for -xnone -xdebug.
11369
 
11370
`-xdebugx'
11371
     This is a shortcut for -xexplicit -xdebug.
11372
 
11373
 
11374

11375
File: as.info,  Node: IA-64 Syntax,  Next: IA-64 Opcodes,  Prev: IA-64 Options,  Up: IA-64-Dependent
11376
 
11377
9.18.2 Syntax
11378
-------------
11379
 
11380
The assembler syntax closely follows the IA-64 Assembly Language
11381
Reference Guide.
11382
 
11383
* Menu:
11384
 
11385
* IA-64-Chars::                Special Characters
11386
* IA-64-Regs::                 Register Names
11387
* IA-64-Bits::                 Bit Names
11388
* IA-64-Relocs::               Relocations
11389
 
11390

11391
File: as.info,  Node: IA-64-Chars,  Next: IA-64-Regs,  Up: IA-64 Syntax
11392
 
11393
9.18.2.1 Special Characters
11394
...........................
11395
 
11396
`//' is the line comment token.
11397
 
11398
   `;' can be used instead of a newline to separate statements.
11399
 
11400

11401
File: as.info,  Node: IA-64-Regs,  Next: IA-64-Bits,  Prev: IA-64-Chars,  Up: IA-64 Syntax
11402
 
11403
9.18.2.2 Register Names
11404
.......................
11405
 
11406
The 128 integer registers are referred to as `rN'.  The 128
11407
floating-point registers are referred to as `fN'.  The 128 application
11408
registers are referred to as `arN'.  The 128 control registers are
11409
referred to as `crN'.  The 64 one-bit predicate registers are referred
11410
to as `pN'.  The 8 branch registers are referred to as `bN'.  In
11411
addition, the assembler defines a number of aliases: `gp' (`r1'), `sp'
11412
(`r12'), `rp' (`b0'), `ret0' (`r8'), `ret1' (`r9'), `ret2' (`r10'),
11413
`ret3' (`r9'), `fargN' (`f8+N'), and `fretN' (`f8+N').
11414
 
11415
   For convenience, the assembler also defines aliases for all named
11416
application and control registers.  For example, `ar.bsp' refers to the
11417
register backing store pointer (`ar17').  Similarly, `cr.eoi' refers to
11418
the end-of-interrupt register (`cr67').
11419
 
11420

11421
File: as.info,  Node: IA-64-Bits,  Next: IA-64-Relocs,  Prev: IA-64-Regs,  Up: IA-64 Syntax
11422
 
11423
9.18.2.3 IA-64 Processor-Status-Register (PSR) Bit Names
11424
........................................................
11425
 
11426
The assembler defines bit masks for each of the bits in the IA-64
11427
processor status register.  For example, `psr.ic' corresponds to a
11428
value of 0x2000.  These masks are primarily intended for use with the
11429
`ssm'/`sum' and `rsm'/`rum' instructions, but they can be used anywhere
11430
else where an integer constant is expected.
11431
 
11432

11433
File: as.info,  Node: IA-64-Relocs,  Prev: IA-64-Bits,  Up: IA-64 Syntax
11434
 
11435
9.18.2.4 Relocations
11436
....................
11437
 
11438
In addition to the standard IA-64 relocations, the following
11439
relocations are implemented by `as':
11440
 
11441
`@slotcount(V)'
11442
     Convert the address offset V into a slot count.  This pseudo
11443
     function is available only on VMS.  The expression V must be known
11444
     at assembly time: it can't reference undefined symbols or symbols
11445
     in different sections.
11446
 
11447

11448
File: as.info,  Node: IA-64 Opcodes,  Prev: IA-64 Syntax,  Up: IA-64-Dependent
11449
 
11450
9.18.3 Opcodes
11451
--------------
11452
 
11453
For detailed information on the IA-64 machine instruction set, see the
11454
IA-64 Architecture Handbook
11455
(http://developer.intel.com/design/itanium/arch_spec.htm).
11456
 
11457

11458
File: as.info,  Node: IP2K-Dependent,  Next: LM32-Dependent,  Prev: IA-64-Dependent,  Up: Machine Dependencies
11459
 
11460
9.19 IP2K Dependent Features
11461
============================
11462
 
11463
* Menu:
11464
 
11465
* IP2K-Opts::                   IP2K Options
11466
* IP2K-Syntax::                 IP2K Syntax
11467
 
11468

11469
File: as.info,  Node: IP2K-Opts,  Next: IP2K-Syntax,  Up: IP2K-Dependent
11470
 
11471
9.19.1 IP2K Options
11472
-------------------
11473
 
11474
The Ubicom IP2K version of `as' has a few machine dependent options:
11475
 
11476
`-mip2022ext'
11477
     `as' can assemble the extended IP2022 instructions, but it will
11478
     only do so if this is specifically allowed via this command line
11479
     option.
11480
 
11481
`-mip2022'
11482
     This option restores the assembler's default behaviour of not
11483
     permitting the extended IP2022 instructions to be assembled.
11484
 
11485
 
11486

11487
File: as.info,  Node: IP2K-Syntax,  Prev: IP2K-Opts,  Up: IP2K-Dependent
11488
 
11489
9.19.2 IP2K Syntax
11490
------------------
11491
 
11492
* Menu:
11493
 
11494
* IP2K-Chars::                Special Characters
11495
 
11496

11497
File: as.info,  Node: IP2K-Chars,  Up: IP2K-Syntax
11498
 
11499
9.19.2.1 Special Characters
11500
...........................
11501
 
11502
The presence of a `;' on a line indicates the start of a comment that
11503
extends to the end of the current line.
11504
 
11505
   If a `#' appears as the first character of a line, the whole line is
11506
treated as a comment, but in this case the line can also be a logical
11507
line number directive (*note Comments::) or a preprocessor control
11508
command (*note Preprocessing::).
11509
 
11510
   The IP2K assembler does not currently support a line separator
11511
character.
11512
 
11513

11514
File: as.info,  Node: LM32-Dependent,  Next: M32C-Dependent,  Prev: IP2K-Dependent,  Up: Machine Dependencies
11515
 
11516
9.20 LM32 Dependent Features
11517
============================
11518
 
11519
* Menu:
11520
 
11521
* LM32 Options::              Options
11522
* LM32 Syntax::               Syntax
11523
* LM32 Opcodes::              Opcodes
11524
 
11525

11526
File: as.info,  Node: LM32 Options,  Next: LM32 Syntax,  Up: LM32-Dependent
11527
 
11528
9.20.1 Options
11529
--------------
11530
 
11531
`-mmultiply-enabled'
11532
     Enable multiply instructions.
11533
 
11534
`-mdivide-enabled'
11535
     Enable divide instructions.
11536
 
11537
`-mbarrel-shift-enabled'
11538
     Enable barrel-shift instructions.
11539
 
11540
`-msign-extend-enabled'
11541
     Enable sign extend instructions.
11542
 
11543
`-muser-enabled'
11544
     Enable user defined instructions.
11545
 
11546
`-micache-enabled'
11547
     Enable instruction cache related CSRs.
11548
 
11549
`-mdcache-enabled'
11550
     Enable data cache related CSRs.
11551
 
11552
`-mbreak-enabled'
11553
     Enable break instructions.
11554
 
11555
`-mall-enabled'
11556
     Enable all instructions and CSRs.
11557
 
11558
 
11559

11560
File: as.info,  Node: LM32 Syntax,  Next: LM32 Opcodes,  Prev: LM32 Options,  Up: LM32-Dependent
11561
 
11562
9.20.2 Syntax
11563
-------------
11564
 
11565
* Menu:
11566
 
11567
* LM32-Regs::                 Register Names
11568
* LM32-Modifiers::            Relocatable Expression Modifiers
11569
* LM32-Chars::                Special Characters
11570
 
11571

11572
File: as.info,  Node: LM32-Regs,  Next: LM32-Modifiers,  Up: LM32 Syntax
11573
 
11574
9.20.2.1 Register Names
11575
.......................
11576
 
11577
LM32 has 32 x 32-bit general purpose registers `r0', `r1', ... `r31'.
11578
 
11579
   The following aliases are defined: `gp' - `r26', `fp' - `r27', `sp'
11580
- `r28', `ra' - `r29', `ea' - `r30', `ba' - `r31'.
11581
 
11582
   LM32 has the following Control and Status Registers (CSRs).
11583
 
11584
`IE'
11585
     Interrupt enable.
11586
 
11587
`IM'
11588
     Interrupt mask.
11589
 
11590
`IP'
11591
     Interrupt pending.
11592
 
11593
`ICC'
11594
     Instruction cache control.
11595
 
11596
`DCC'
11597
     Data cache control.
11598
 
11599
`CC'
11600
     Cycle counter.
11601
 
11602
`CFG'
11603
     Configuration.
11604
 
11605
`EBA'
11606
     Exception base address.
11607
 
11608
`DC'
11609
     Debug control.
11610
 
11611
`DEBA'
11612
     Debug exception base address.
11613
 
11614
`JTX'
11615
     JTAG transmit.
11616
 
11617
`JRX'
11618
     JTAG receive.
11619
 
11620
`BP0'
11621
     Breakpoint 0.
11622
 
11623
`BP1'
11624
     Breakpoint 1.
11625
 
11626
`BP2'
11627
     Breakpoint 2.
11628
 
11629
`BP3'
11630
     Breakpoint 3.
11631
 
11632
`WP0'
11633
     Watchpoint 0.
11634
 
11635
`WP1'
11636
     Watchpoint 1.
11637
 
11638
`WP2'
11639
     Watchpoint 2.
11640
 
11641
`WP3'
11642
     Watchpoint 3.
11643
 
11644

11645
File: as.info,  Node: LM32-Modifiers,  Next: LM32-Chars,  Prev: LM32-Regs,  Up: LM32 Syntax
11646
 
11647
9.20.2.2 Relocatable Expression Modifiers
11648
.........................................
11649
 
11650
The assembler supports several modifiers when using relocatable
11651
addresses in LM32 instruction operands.  The general syntax is the
11652
following:
11653
 
11654
     modifier(relocatable-expression)
11655
 
11656
`lo'
11657
     This modifier allows you to use bits 0 through 15 of an address
11658
     expression as 16 bit relocatable expression.
11659
 
11660
`hi'
11661
     This modifier allows you to use bits 16 through 23 of an address
11662
     expression as 16 bit relocatable expression.
11663
 
11664
     For example
11665
 
11666
          ori  r4, r4, lo(sym+10)
11667
          orhi r4, r4, hi(sym+10)
11668
 
11669
`gp'
11670
     This modified creates a 16-bit relocatable expression that is the
11671
     offset of the symbol from the global pointer.
11672
 
11673
          mva r4, gp(sym)
11674
 
11675
`got'
11676
     This modifier places a symbol in the GOT and creates a 16-bit
11677
     relocatable expression that is the offset into the GOT of this
11678
     symbol.
11679
 
11680
          lw r4, (gp+got(sym))
11681
 
11682
`gotofflo16'
11683
     This modifier allows you to use the bits 0 through 15 of an
11684
     address which is an offset from the GOT.
11685
 
11686
`gotoffhi16'
11687
     This modifier allows you to use the bits 16 through 31 of an
11688
     address which is an offset from the GOT.
11689
 
11690
          orhi r4, r4, gotoffhi16(lsym)
11691
          addi r4, r4, gotofflo16(lsym)
11692
 
11693
 
11694

11695
File: as.info,  Node: LM32-Chars,  Prev: LM32-Modifiers,  Up: LM32 Syntax
11696
 
11697
9.20.2.3 Special Characters
11698
...........................
11699
 
11700
The presence of a `#' on a line indicates the start of a comment that
11701
extends to the end of the current line.  Note that if a line starts
11702
with a `#' character then it can also be a logical line number
11703
directive (*note Comments::) or a preprocessor control command (*note
11704
Preprocessing::).
11705
 
11706
   A semicolon (`;') can be used to separate multiple statements on the
11707
same line.
11708
 
11709

11710
File: as.info,  Node: LM32 Opcodes,  Prev: LM32 Syntax,  Up: LM32-Dependent
11711
 
11712
9.20.3 Opcodes
11713
--------------
11714
 
11715
For detailed information on the LM32 machine instruction set, see
11716
`http://www.latticesemi.com/products/intellectualproperty/ipcores/mico32/'.
11717
 
11718
   `as' implements all the standard LM32 opcodes.
11719
 
11720

11721
File: as.info,  Node: M32C-Dependent,  Next: M32R-Dependent,  Prev: LM32-Dependent,  Up: Machine Dependencies
11722
 
11723
9.21 M32C Dependent Features
11724
============================
11725
 
11726
   `as' can assemble code for several different members of the Renesas
11727
M32C family.  Normally the default is to assemble code for the M16C
11728
microprocessor.  The `-m32c' option may be used to change the default
11729
to the M32C microprocessor.
11730
 
11731
* Menu:
11732
 
11733
* M32C-Opts::                   M32C Options
11734
* M32C-Syntax::                 M32C Syntax
11735
 
11736

11737
File: as.info,  Node: M32C-Opts,  Next: M32C-Syntax,  Up: M32C-Dependent
11738
 
11739
9.21.1 M32C Options
11740
-------------------
11741
 
11742
The Renesas M32C version of `as' has these machine-dependent options:
11743
 
11744
`-m32c'
11745
     Assemble M32C instructions.
11746
 
11747
`-m16c'
11748
     Assemble M16C instructions (default).
11749
 
11750
`-relax'
11751
     Enable support for link-time relaxations.
11752
 
11753
`-h-tick-hex'
11754
     Support H'00 style hex constants in addition to 0x00 style.
11755
 
11756
 
11757

11758
File: as.info,  Node: M32C-Syntax,  Prev: M32C-Opts,  Up: M32C-Dependent
11759
 
11760
9.21.2 M32C Syntax
11761
------------------
11762
 
11763
* Menu:
11764
 
11765
* M32C-Modifiers::              Symbolic Operand Modifiers
11766
* M32C-Chars::                  Special Characters
11767
 
11768

11769
File: as.info,  Node: M32C-Modifiers,  Next: M32C-Chars,  Up: M32C-Syntax
11770
 
11771
9.21.2.1 Symbolic Operand Modifiers
11772
...................................
11773
 
11774
The assembler supports several modifiers when using symbol addresses in
11775
M32C instruction operands.  The general syntax is the following:
11776
 
11777
     %modifier(symbol)
11778
 
11779
`%dsp8'
11780
`%dsp16'
11781
     These modifiers override the assembler's assumptions about how big
11782
     a symbol's address is.  Normally, when it sees an operand like
11783
     `sym[a0]' it assumes `sym' may require the widest displacement
11784
     field (16 bits for `-m16c', 24 bits for `-m32c').  These modifiers
11785
     tell it to assume the address will fit in an 8 or 16 bit
11786
     (respectively) unsigned displacement.  Note that, of course, if it
11787
     doesn't actually fit you will get linker errors.  Example:
11788
 
11789
          mov.w %dsp8(sym)[a0],r1
11790
          mov.b #0,%dsp8(sym)[a0]
11791
 
11792
`%hi8'
11793
     This modifier allows you to load bits 16 through 23 of a 24 bit
11794
     address into an 8 bit register.  This is useful with, for example,
11795
     the M16C `smovf' instruction, which expects a 20 bit address in
11796
     `r1h' and `a0'.  Example:
11797
 
11798
          mov.b #%hi8(sym),r1h
11799
          mov.w #%lo16(sym),a0
11800
          smovf.b
11801
 
11802
`%lo16'
11803
     Likewise, this modifier allows you to load bits 0 through 15 of a
11804
     24 bit address into a 16 bit register.
11805
 
11806
`%hi16'
11807
     This modifier allows you to load bits 16 through 31 of a 32 bit
11808
     address into a 16 bit register.  While the M32C family only has 24
11809
     bits of address space, it does support addresses in pairs of 16 bit
11810
     registers (like `a1a0' for the `lde' instruction).  This modifier
11811
     is for loading the upper half in such cases.  Example:
11812
 
11813
          mov.w #%hi16(sym),a1
11814
          mov.w #%lo16(sym),a0
11815
          ...
11816
          lde.w [a1a0],r1
11817
 
11818
 
11819

11820
File: as.info,  Node: M32C-Chars,  Prev: M32C-Modifiers,  Up: M32C-Syntax
11821
 
11822
9.21.2.2 Special Characters
11823
...........................
11824
 
11825
The presence of a `;' character on a line indicates the start of a
11826
comment that extends to the end of that line.
11827
 
11828
   If a `#' appears as the first character of a line, the whole line is
11829
treated as a comment, but in this case the line can also be a logical
11830
line number directive (*note Comments::) or a preprocessor control
11831
command (*note Preprocessing::).
11832
 
11833
   The `|' character can be used to separate statements on the same
11834
line.
11835
 
11836

11837
File: as.info,  Node: M32R-Dependent,  Next: M68K-Dependent,  Prev: M32C-Dependent,  Up: Machine Dependencies
11838
 
11839
9.22 M32R Dependent Features
11840
============================
11841
 
11842
* Menu:
11843
 
11844
* M32R-Opts::                   M32R Options
11845
* M32R-Directives::             M32R Directives
11846
* M32R-Warnings::               M32R Warnings
11847
 
11848

11849
File: as.info,  Node: M32R-Opts,  Next: M32R-Directives,  Up: M32R-Dependent
11850
 
11851
9.22.1 M32R Options
11852
-------------------
11853
 
11854
The Renease M32R version of `as' has a few machine dependent options:
11855
 
11856
`-m32rx'
11857
     `as' can assemble code for several different members of the
11858
     Renesas M32R family.  Normally the default is to assemble code for
11859
     the M32R microprocessor.  This option may be used to change the
11860
     default to the M32RX microprocessor, which adds some more
11861
     instructions to the basic M32R instruction set, and some
11862
     additional parameters to some of the original instructions.
11863
 
11864
`-m32r2'
11865
     This option changes the target processor to the the M32R2
11866
     microprocessor.
11867
 
11868
`-m32r'
11869
     This option can be used to restore the assembler's default
11870
     behaviour of assembling for the M32R microprocessor.  This can be
11871
     useful if the default has been changed by a previous command line
11872
     option.
11873
 
11874
`-little'
11875
     This option tells the assembler to produce little-endian code and
11876
     data.  The default is dependent upon how the toolchain was
11877
     configured.
11878
 
11879
`-EL'
11880
     This is a synonym for _-little_.
11881
 
11882
`-big'
11883
     This option tells the assembler to produce big-endian code and
11884
     data.
11885
 
11886
`-EB'
11887
     This is a synonum for _-big_.
11888
 
11889
`-KPIC'
11890
     This option specifies that the output of the assembler should be
11891
     marked as position-independent code (PIC).
11892
 
11893
`-parallel'
11894
     This option tells the assembler to attempts to combine two
11895
     sequential instructions into a single, parallel instruction, where
11896
     it is legal to do so.
11897
 
11898
`-no-parallel'
11899
     This option disables a previously enabled _-parallel_ option.
11900
 
11901
`-no-bitinst'
11902
     This option disables the support for the extended bit-field
11903
     instructions provided by the M32R2.  If this support needs to be
11904
     re-enabled the _-bitinst_ switch can be used to restore it.
11905
 
11906
`-O'
11907
     This option tells the assembler to attempt to optimize the
11908
     instructions that it produces.  This includes filling delay slots
11909
     and converting sequential instructions into parallel ones.  This
11910
     option implies _-parallel_.
11911
 
11912
`-warn-explicit-parallel-conflicts'
11913
     Instructs `as' to produce warning messages when questionable
11914
     parallel instructions are encountered.  This option is enabled by
11915
     default, but `gcc' disables it when it invokes `as' directly.
11916
     Questionable instructions are those whose behaviour would be
11917
     different if they were executed sequentially.  For example the
11918
     code fragment `mv r1, r2 || mv r3, r1' produces a different result
11919
     from `mv r1, r2 \n mv r3, r1' since the former moves r1 into r3
11920
     and then r2 into r1, whereas the later moves r2 into r1 and r3.
11921
 
11922
`-Wp'
11923
     This is a shorter synonym for the
11924
     _-warn-explicit-parallel-conflicts_ option.
11925
 
11926
`-no-warn-explicit-parallel-conflicts'
11927
     Instructs `as' not to produce warning messages when questionable
11928
     parallel instructions are encountered.
11929
 
11930
`-Wnp'
11931
     This is a shorter synonym for the
11932
     _-no-warn-explicit-parallel-conflicts_ option.
11933
 
11934
`-ignore-parallel-conflicts'
11935
     This option tells the assembler's to stop checking parallel
11936
     instructions for constraint violations.  This ability is provided
11937
     for hardware vendors testing chip designs and should not be used
11938
     under normal circumstances.
11939
 
11940
`-no-ignore-parallel-conflicts'
11941
     This option restores the assembler's default behaviour of checking
11942
     parallel instructions to detect constraint violations.
11943
 
11944
`-Ip'
11945
     This is a shorter synonym for the _-ignore-parallel-conflicts_
11946
     option.
11947
 
11948
`-nIp'
11949
     This is a shorter synonym for the _-no-ignore-parallel-conflicts_
11950
     option.
11951
 
11952
`-warn-unmatched-high'
11953
     This option tells the assembler to produce a warning message if a
11954
     `.high' pseudo op is encountered without a matching `.low' pseudo
11955
     op.  The presence of such an unmatched pseudo op usually indicates
11956
     a programming error.
11957
 
11958
`-no-warn-unmatched-high'
11959
     Disables a previously enabled _-warn-unmatched-high_ option.
11960
 
11961
`-Wuh'
11962
     This is a shorter synonym for the _-warn-unmatched-high_ option.
11963
 
11964
`-Wnuh'
11965
     This is a shorter synonym for the _-no-warn-unmatched-high_ option.
11966
 
11967
 
11968

11969
File: as.info,  Node: M32R-Directives,  Next: M32R-Warnings,  Prev: M32R-Opts,  Up: M32R-Dependent
11970
 
11971
9.22.2 M32R Directives
11972
----------------------
11973
 
11974
The Renease M32R version of `as' has a few architecture specific
11975
directives:
11976
 
11977
`low EXPRESSION'
11978
     The `low' directive computes the value of its expression and
11979
     places the lower 16-bits of the result into the immediate-field of
11980
     the instruction.  For example:
11981
 
11982
             or3   r0, r0, #low(0x12345678) ; compute r0 = r0 | 0x5678
11983
             add3, r0, r0, #low(fred)   ; compute r0 = r0 + low 16-bits of address of fred
11984
 
11985
`high EXPRESSION'
11986
     The `high' directive computes the value of its expression and
11987
     places the upper 16-bits of the result into the immediate-field of
11988
     the instruction.  For example:
11989
 
11990
             seth  r0, #high(0x12345678) ; compute r0 = 0x12340000
11991
             seth, r0, #high(fred)       ; compute r0 = upper 16-bits of address of fred
11992
 
11993
`shigh EXPRESSION'
11994
     The `shigh' directive is very similar to the `high' directive.  It
11995
     also computes the value of its expression and places the upper
11996
     16-bits of the result into the immediate-field of the instruction.
11997
     The difference is that `shigh' also checks to see if the lower
11998
     16-bits could be interpreted as a signed number, and if so it
11999
     assumes that a borrow will occur from the upper-16 bits.  To
12000
     compensate for this the `shigh' directive pre-biases the upper 16
12001
     bit value by adding one to it.  For example:
12002
 
12003
     For example:
12004
 
12005
             seth  r0, #shigh(0x12345678) ; compute r0 = 0x12340000
12006
             seth  r0, #shigh(0x00008000) ; compute r0 = 0x00010000
12007
 
12008
     In the second example the lower 16-bits are 0x8000.  If these are
12009
     treated as a signed value and sign extended to 32-bits then the
12010
     value becomes 0xffff8000.  If this value is then added to
12011
     0x00010000 then the result is 0x00008000.
12012
 
12013
     This behaviour is to allow for the different semantics of the
12014
     `or3' and `add3' instructions.  The `or3' instruction treats its
12015
     16-bit immediate argument as unsigned whereas the `add3' treats
12016
     its 16-bit immediate as a signed value.  So for example:
12017
 
12018
             seth  r0, #shigh(0x00008000)
12019
             add3  r0, r0, #low(0x00008000)
12020
 
12021
     Produces the correct result in r0, whereas:
12022
 
12023
             seth  r0, #shigh(0x00008000)
12024
             or3   r0, r0, #low(0x00008000)
12025
 
12026
     Stores 0xffff8000 into r0.
12027
 
12028
     Note - the `shigh' directive does not know where in the assembly
12029
     source code the lower 16-bits of the value are going set, so it
12030
     cannot check to make sure that an `or3' instruction is being used
12031
     rather than an `add3' instruction.  It is up to the programmer to
12032
     make sure that correct directives are used.
12033
 
12034
`.m32r'
12035
     The directive performs a similar thing as the _-m32r_ command line
12036
     option.  It tells the assembler to only accept M32R instructions
12037
     from now on.  An instructions from later M32R architectures are
12038
     refused.
12039
 
12040
`.m32rx'
12041
     The directive performs a similar thing as the _-m32rx_ command
12042
     line option.  It tells the assembler to start accepting the extra
12043
     instructions in the M32RX ISA as well as the ordinary M32R ISA.
12044
 
12045
`.m32r2'
12046
     The directive performs a similar thing as the _-m32r2_ command
12047
     line option.  It tells the assembler to start accepting the extra
12048
     instructions in the M32R2 ISA as well as the ordinary M32R ISA.
12049
 
12050
`.little'
12051
     The directive performs a similar thing as the _-little_ command
12052
     line option.  It tells the assembler to start producing
12053
     little-endian code and data.  This option should be used with care
12054
     as producing mixed-endian binary files is fraught with danger.
12055
 
12056
`.big'
12057
     The directive performs a similar thing as the _-big_ command line
12058
     option.  It tells the assembler to start producing big-endian code
12059
     and data.  This option should be used with care as producing
12060
     mixed-endian binary files is fraught with danger.
12061
 
12062
 
12063

12064
File: as.info,  Node: M32R-Warnings,  Prev: M32R-Directives,  Up: M32R-Dependent
12065
 
12066
9.22.3 M32R Warnings
12067
--------------------
12068
 
12069
There are several warning and error messages that can be produced by
12070
`as' which are specific to the M32R:
12071
 
12072
`output of 1st instruction is the same as an input to 2nd instruction - is this intentional ?'
12073
     This message is only produced if warnings for explicit parallel
12074
     conflicts have been enabled.  It indicates that the assembler has
12075
     encountered a parallel instruction in which the destination
12076
     register of the left hand instruction is used as an input register
12077
     in the right hand instruction.  For example in this code fragment
12078
     `mv r1, r2 || neg r3, r1' register r1 is the destination of the
12079
     move instruction and the input to the neg instruction.
12080
 
12081
`output of 2nd instruction is the same as an input to 1st instruction - is this intentional ?'
12082
     This message is only produced if warnings for explicit parallel
12083
     conflicts have been enabled.  It indicates that the assembler has
12084
     encountered a parallel instruction in which the destination
12085
     register of the right hand instruction is used as an input
12086
     register in the left hand instruction.  For example in this code
12087
     fragment `mv r1, r2 || neg r2, r3' register r2 is the destination
12088
     of the neg instruction and the input to the move instruction.
12089
 
12090
`instruction `...' is for the M32RX only'
12091
     This message is produced when the assembler encounters an
12092
     instruction which is only supported by the M32Rx processor, and
12093
     the `-m32rx' command line flag has not been specified to allow
12094
     assembly of such instructions.
12095
 
12096
`unknown instruction `...''
12097
     This message is produced when the assembler encounters an
12098
     instruction which it does not recognize.
12099
 
12100
`only the NOP instruction can be issued in parallel on the m32r'
12101
     This message is produced when the assembler encounters a parallel
12102
     instruction which does not involve a NOP instruction and the
12103
     `-m32rx' command line flag has not been specified.  Only the M32Rx
12104
     processor is able to execute two instructions in parallel.
12105
 
12106
`instruction `...' cannot be executed in parallel.'
12107
     This message is produced when the assembler encounters a parallel
12108
     instruction which is made up of one or two instructions which
12109
     cannot be executed in parallel.
12110
 
12111
`Instructions share the same execution pipeline'
12112
     This message is produced when the assembler encounters a parallel
12113
     instruction whoes components both use the same execution pipeline.
12114
 
12115
`Instructions write to the same destination register.'
12116
     This message is produced when the assembler encounters a parallel
12117
     instruction where both components attempt to modify the same
12118
     register.  For example these code fragments will produce this
12119
     message: `mv r1, r2 || neg r1, r3' `jl r0 || mv r14, r1' `st r2,
12120
     @-r1 || mv r1, r3' `mv r1, r2 || ld r0, @r1+' `cmp r1, r2 || addx
12121
     r3, r4' (Both write to the condition bit)
12122
 
12123
 
12124

12125
File: as.info,  Node: M68K-Dependent,  Next: M68HC11-Dependent,  Prev: M32R-Dependent,  Up: Machine Dependencies
12126
 
12127
9.23 M680x0 Dependent Features
12128
==============================
12129
 
12130
* Menu:
12131
 
12132
* M68K-Opts::                   M680x0 Options
12133
* M68K-Syntax::                 Syntax
12134
* M68K-Moto-Syntax::            Motorola Syntax
12135
* M68K-Float::                  Floating Point
12136
* M68K-Directives::             680x0 Machine Directives
12137
* M68K-opcodes::                Opcodes
12138
 
12139

12140
File: as.info,  Node: M68K-Opts,  Next: M68K-Syntax,  Up: M68K-Dependent
12141
 
12142
9.23.1 M680x0 Options
12143
---------------------
12144
 
12145
The Motorola 680x0 version of `as' has a few machine dependent options:
12146
 
12147
`-march=ARCHITECTURE'
12148
     This option specifies a target architecture.  The following
12149
     architectures are recognized: `68000', `68010', `68020', `68030',
12150
     `68040', `68060', `cpu32', `isaa', `isaaplus', `isab', `isac' and
12151
     `cfv4e'.
12152
 
12153
`-mcpu=CPU'
12154
     This option specifies a target cpu.  When used in conjunction with
12155
     the `-march' option, the cpu must be within the specified
12156
     architecture.  Also, the generic features of the architecture are
12157
     used for instruction generation, rather than those of the specific
12158
     chip.
12159
 
12160
`-m[no-]68851'
12161
`-m[no-]68881'
12162
`-m[no-]div'
12163
`-m[no-]usp'
12164
`-m[no-]float'
12165
`-m[no-]mac'
12166
`-m[no-]emac'
12167
     Enable or disable various architecture specific features.  If a
12168
     chip or architecture by default supports an option (for instance
12169
     `-march=isaaplus' includes the `-mdiv' option), explicitly
12170
     disabling the option will override the default.
12171
 
12172
`-l'
12173
     You can use the `-l' option to shorten the size of references to
12174
     undefined symbols.  If you do not use the `-l' option, references
12175
     to undefined symbols are wide enough for a full `long' (32 bits).
12176
     (Since `as' cannot know where these symbols end up, `as' can only
12177
     allocate space for the linker to fill in later.  Since `as' does
12178
     not know how far away these symbols are, it allocates as much
12179
     space as it can.)  If you use this option, the references are only
12180
     one word wide (16 bits).  This may be useful if you want the
12181
     object file to be as small as possible, and you know that the
12182
     relevant symbols are always less than 17 bits away.
12183
 
12184
`--register-prefix-optional'
12185
     For some configurations, especially those where the compiler
12186
     normally does not prepend an underscore to the names of user
12187
     variables, the assembler requires a `%' before any use of a
12188
     register name.  This is intended to let the assembler distinguish
12189
     between C variables and functions named `a0' through `a7', and so
12190
     on.  The `%' is always accepted, but is not required for certain
12191
     configurations, notably `sun3'.  The `--register-prefix-optional'
12192
     option may be used to permit omitting the `%' even for
12193
     configurations for which it is normally required.  If this is
12194
     done, it will generally be impossible to refer to C variables and
12195
     functions with the same names as register names.
12196
 
12197
`--bitwise-or'
12198
     Normally the character `|' is treated as a comment character, which
12199
     means that it can not be used in expressions.  The `--bitwise-or'
12200
     option turns `|' into a normal character.  In this mode, you must
12201
     either use C style comments, or start comments with a `#' character
12202
     at the beginning of a line.
12203
 
12204
`--base-size-default-16  --base-size-default-32'
12205
     If you use an addressing mode with a base register without
12206
     specifying the size, `as' will normally use the full 32 bit value.
12207
     For example, the addressing mode `%a0@(%d0)' is equivalent to
12208
     `%a0@(%d0:l)'.  You may use the `--base-size-default-16' option to
12209
     tell `as' to default to using the 16 bit value.  In this case,
12210
     `%a0@(%d0)' is equivalent to `%a0@(%d0:w)'.  You may use the
12211
     `--base-size-default-32' option to restore the default behaviour.
12212
 
12213
`--disp-size-default-16  --disp-size-default-32'
12214
     If you use an addressing mode with a displacement, and the value
12215
     of the displacement is not known, `as' will normally assume that
12216
     the value is 32 bits.  For example, if the symbol `disp' has not
12217
     been defined, `as' will assemble the addressing mode
12218
     `%a0@(disp,%d0)' as though `disp' is a 32 bit value.  You may use
12219
     the `--disp-size-default-16' option to tell `as' to instead assume
12220
     that the displacement is 16 bits.  In this case, `as' will
12221
     assemble `%a0@(disp,%d0)' as though `disp' is a 16 bit value.  You
12222
     may use the `--disp-size-default-32' option to restore the default
12223
     behaviour.
12224
 
12225
`--pcrel'
12226
     Always keep branches PC-relative.  In the M680x0 architecture all
12227
     branches are defined as PC-relative.  However, on some processors
12228
     they are limited to word displacements maximum.  When `as' needs a
12229
     long branch that is not available, it normally emits an absolute
12230
     jump instead.  This option disables this substitution.  When this
12231
     option is given and no long branches are available, only word
12232
     branches will be emitted.  An error message will be generated if a
12233
     word branch cannot reach its target.  This option has no effect on
12234
     68020 and other processors that have long branches.  *note Branch
12235
     Improvement: M68K-Branch.
12236
 
12237
`-m68000'
12238
     `as' can assemble code for several different members of the
12239
     Motorola 680x0 family.  The default depends upon how `as' was
12240
     configured when it was built; normally, the default is to assemble
12241
     code for the 68020 microprocessor.  The following options may be
12242
     used to change the default.  These options control which
12243
     instructions and addressing modes are permitted.  The members of
12244
     the 680x0 family are very similar.  For detailed information about
12245
     the differences, see the Motorola manuals.
12246
 
12247
    `-m68000'
12248
    `-m68ec000'
12249
    `-m68hc000'
12250
    `-m68hc001'
12251
    `-m68008'
12252
    `-m68302'
12253
    `-m68306'
12254
    `-m68307'
12255
    `-m68322'
12256
    `-m68356'
12257
          Assemble for the 68000. `-m68008', `-m68302', and so on are
12258
          synonyms for `-m68000', since the chips are the same from the
12259
          point of view of the assembler.
12260
 
12261
    `-m68010'
12262
          Assemble for the 68010.
12263
 
12264
    `-m68020'
12265
    `-m68ec020'
12266
          Assemble for the 68020.  This is normally the default.
12267
 
12268
    `-m68030'
12269
    `-m68ec030'
12270
          Assemble for the 68030.
12271
 
12272
    `-m68040'
12273
    `-m68ec040'
12274
          Assemble for the 68040.
12275
 
12276
    `-m68060'
12277
    `-m68ec060'
12278
          Assemble for the 68060.
12279
 
12280
    `-mcpu32'
12281
    `-m68330'
12282
    `-m68331'
12283
    `-m68332'
12284
    `-m68333'
12285
    `-m68334'
12286
    `-m68336'
12287
    `-m68340'
12288
    `-m68341'
12289
    `-m68349'
12290
    `-m68360'
12291
          Assemble for the CPU32 family of chips.
12292
 
12293
    `-m5200'
12294
    `-m5202'
12295
    `-m5204'
12296
    `-m5206'
12297
    `-m5206e'
12298
    `-m521x'
12299
    `-m5249'
12300
    `-m528x'
12301
    `-m5307'
12302
    `-m5407'
12303
    `-m547x'
12304
    `-m548x'
12305
    `-mcfv4'
12306
    `-mcfv4e'
12307
          Assemble for the ColdFire family of chips.
12308
 
12309
    `-m68881'
12310
    `-m68882'
12311
          Assemble 68881 floating point instructions.  This is the
12312
          default for the 68020, 68030, and the CPU32.  The 68040 and
12313
          68060 always support floating point instructions.
12314
 
12315
    `-mno-68881'
12316
          Do not assemble 68881 floating point instructions.  This is
12317
          the default for 68000 and the 68010.  The 68040 and 68060
12318
          always support floating point instructions, even if this
12319
          option is used.
12320
 
12321
    `-m68851'
12322
          Assemble 68851 MMU instructions.  This is the default for the
12323
          68020, 68030, and 68060.  The 68040 accepts a somewhat
12324
          different set of MMU instructions; `-m68851' and `-m68040'
12325
          should not be used together.
12326
 
12327
    `-mno-68851'
12328
          Do not assemble 68851 MMU instructions.  This is the default
12329
          for the 68000, 68010, and the CPU32.  The 68040 accepts a
12330
          somewhat different set of MMU instructions.
12331
 
12332

12333
File: as.info,  Node: M68K-Syntax,  Next: M68K-Moto-Syntax,  Prev: M68K-Opts,  Up: M68K-Dependent
12334
 
12335
9.23.2 Syntax
12336
-------------
12337
 
12338
This syntax for the Motorola 680x0 was developed at MIT.
12339
 
12340
   The 680x0 version of `as' uses instructions names and syntax
12341
compatible with the Sun assembler.  Intervening periods are ignored;
12342
for example, `movl' is equivalent to `mov.l'.
12343
 
12344
   In the following table APC stands for any of the address registers
12345
(`%a0' through `%a7'), the program counter (`%pc'), the zero-address
12346
relative to the program counter (`%zpc'), a suppressed address register
12347
(`%za0' through `%za7'), or it may be omitted entirely.  The use of
12348
SIZE means one of `w' or `l', and it may be omitted, along with the
12349
leading colon, unless a scale is also specified.  The use of SCALE
12350
means one of `1', `2', `4', or `8', and it may always be omitted along
12351
with the leading colon.
12352
 
12353
   The following addressing modes are understood:
12354
"Immediate"
12355
     `#NUMBER'
12356
 
12357
"Data Register"
12358
     `%d0' through `%d7'
12359
 
12360
"Address Register"
12361
     `%a0' through `%a7'
12362
     `%a7' is also known as `%sp', i.e., the Stack Pointer.  `%a6' is
12363
     also known as `%fp', the Frame Pointer.
12364
 
12365
"Address Register Indirect"
12366
     `%a0@' through `%a7@'
12367
 
12368
"Address Register Postincrement"
12369
     `%a0@+' through `%a7@+'
12370
 
12371
"Address Register Predecrement"
12372
     `%a0@-' through `%a7@-'
12373
 
12374
"Indirect Plus Offset"
12375
     `APC@(NUMBER)'
12376
 
12377
"Index"
12378
     `APC@(NUMBER,REGISTER:SIZE:SCALE)'
12379
 
12380
     The NUMBER may be omitted.
12381
 
12382
"Postindex"
12383
     `APC@(NUMBER)@(ONUMBER,REGISTER:SIZE:SCALE)'
12384
 
12385
     The ONUMBER or the REGISTER, but not both, may be omitted.
12386
 
12387
"Preindex"
12388
     `APC@(NUMBER,REGISTER:SIZE:SCALE)@(ONUMBER)'
12389
 
12390
     The NUMBER may be omitted.  Omitting the REGISTER produces the
12391
     Postindex addressing mode.
12392
 
12393
"Absolute"
12394
     `SYMBOL', or `DIGITS', optionally followed by `:b', `:w', or `:l'.
12395
 
12396

12397
File: as.info,  Node: M68K-Moto-Syntax,  Next: M68K-Float,  Prev: M68K-Syntax,  Up: M68K-Dependent
12398
 
12399
9.23.3 Motorola Syntax
12400
----------------------
12401
 
12402
The standard Motorola syntax for this chip differs from the syntax
12403
already discussed (*note Syntax: M68K-Syntax.).  `as' can accept
12404
Motorola syntax for operands, even if MIT syntax is used for other
12405
operands in the same instruction.  The two kinds of syntax are fully
12406
compatible.
12407
 
12408
   In the following table APC stands for any of the address registers
12409
(`%a0' through `%a7'), the program counter (`%pc'), the zero-address
12410
relative to the program counter (`%zpc'), or a suppressed address
12411
register (`%za0' through `%za7').  The use of SIZE means one of `w' or
12412
`l', and it may always be omitted along with the leading dot.  The use
12413
of SCALE means one of `1', `2', `4', or `8', and it may always be
12414
omitted along with the leading asterisk.
12415
 
12416
   The following additional addressing modes are understood:
12417
 
12418
"Address Register Indirect"
12419
     `(%a0)' through `(%a7)'
12420
     `%a7' is also known as `%sp', i.e., the Stack Pointer.  `%a6' is
12421
     also known as `%fp', the Frame Pointer.
12422
 
12423
"Address Register Postincrement"
12424
     `(%a0)+' through `(%a7)+'
12425
 
12426
"Address Register Predecrement"
12427
     `-(%a0)' through `-(%a7)'
12428
 
12429
"Indirect Plus Offset"
12430
     `NUMBER(%A0)' through `NUMBER(%A7)', or `NUMBER(%PC)'.
12431
 
12432
     The NUMBER may also appear within the parentheses, as in
12433
     `(NUMBER,%A0)'.  When used with the PC, the NUMBER may be omitted
12434
     (with an address register, omitting the NUMBER produces Address
12435
     Register Indirect mode).
12436
 
12437
"Index"
12438
     `NUMBER(APC,REGISTER.SIZE*SCALE)'
12439
 
12440
     The NUMBER may be omitted, or it may appear within the
12441
     parentheses.  The APC may be omitted.  The REGISTER and the APC
12442
     may appear in either order.  If both APC and REGISTER are address
12443
     registers, and the SIZE and SCALE are omitted, then the first
12444
     register is taken as the base register, and the second as the
12445
     index register.
12446
 
12447
"Postindex"
12448
     `([NUMBER,APC],REGISTER.SIZE*SCALE,ONUMBER)'
12449
 
12450
     The ONUMBER, or the REGISTER, or both, may be omitted.  Either the
12451
     NUMBER or the APC may be omitted, but not both.
12452
 
12453
"Preindex"
12454
     `([NUMBER,APC,REGISTER.SIZE*SCALE],ONUMBER)'
12455
 
12456
     The NUMBER, or the APC, or the REGISTER, or any two of them, may
12457
     be omitted.  The ONUMBER may be omitted.  The REGISTER and the APC
12458
     may appear in either order.  If both APC and REGISTER are address
12459
     registers, and the SIZE and SCALE are omitted, then the first
12460
     register is taken as the base register, and the second as the
12461
     index register.
12462
 
12463

12464
File: as.info,  Node: M68K-Float,  Next: M68K-Directives,  Prev: M68K-Moto-Syntax,  Up: M68K-Dependent
12465
 
12466
9.23.4 Floating Point
12467
---------------------
12468
 
12469
Packed decimal (P) format floating literals are not supported.  Feel
12470
free to add the code!
12471
 
12472
   The floating point formats generated by directives are these.
12473
 
12474
`.float'
12475
     `Single' precision floating point constants.
12476
 
12477
`.double'
12478
     `Double' precision floating point constants.
12479
 
12480
`.extend'
12481
`.ldouble'
12482
     `Extended' precision (`long double') floating point constants.
12483
 
12484

12485
File: as.info,  Node: M68K-Directives,  Next: M68K-opcodes,  Prev: M68K-Float,  Up: M68K-Dependent
12486
 
12487
9.23.5 680x0 Machine Directives
12488
-------------------------------
12489
 
12490
In order to be compatible with the Sun assembler the 680x0 assembler
12491
understands the following directives.
12492
 
12493
`.data1'
12494
     This directive is identical to a `.data 1' directive.
12495
 
12496
`.data2'
12497
     This directive is identical to a `.data 2' directive.
12498
 
12499
`.even'
12500
     This directive is a special case of the `.align' directive; it
12501
     aligns the output to an even byte boundary.
12502
 
12503
`.skip'
12504
     This directive is identical to a `.space' directive.
12505
 
12506
`.arch NAME'
12507
     Select the target architecture and extension features.  Valid
12508
     values for NAME are the same as for the `-march' command line
12509
     option.  This directive cannot be specified after any instructions
12510
     have been assembled.  If it is given multiple times, or in
12511
     conjunction with the `-march' option, all uses must be for the
12512
     same architecture and extension set.
12513
 
12514
`.cpu NAME'
12515
     Select the target cpu.  Valid valuse for NAME are the same as for
12516
     the `-mcpu' command line option.  This directive cannot be
12517
     specified after any instructions have been assembled.  If it is
12518
     given multiple times, or in conjunction with the `-mopt' option,
12519
     all uses must be for the same cpu.
12520
 
12521
 
12522

12523
File: as.info,  Node: M68K-opcodes,  Prev: M68K-Directives,  Up: M68K-Dependent
12524
 
12525
9.23.6 Opcodes
12526
--------------
12527
 
12528
* Menu:
12529
 
12530
* M68K-Branch::                 Branch Improvement
12531
* M68K-Chars::                  Special Characters
12532
 
12533

12534
File: as.info,  Node: M68K-Branch,  Next: M68K-Chars,  Up: M68K-opcodes
12535
 
12536
9.23.6.1 Branch Improvement
12537
...........................
12538
 
12539
Certain pseudo opcodes are permitted for branch instructions.  They
12540
expand to the shortest branch instruction that reach the target.
12541
Generally these mnemonics are made by substituting `j' for `b' at the
12542
start of a Motorola mnemonic.
12543
 
12544
   The following table summarizes the pseudo-operations.  A `*' flags
12545
cases that are more fully described after the table:
12546
 
12547
               Displacement
12548
               +------------------------------------------------------------
12549
               |                68020           68000/10, not PC-relative OK
12550
     Pseudo-Op |BYTE    WORD    LONG            ABSOLUTE LONG JUMP    **
12551
               +------------------------------------------------------------
12552
          jbsr |bsrs    bsrw    bsrl            jsr
12553
           jra |bras    braw    bral            jmp
12554
     *     jXX |bXXs    bXXw    bXXl            bNXs;jmp
12555
     *    dbXX | N/A    dbXXw   dbXX;bras;bral  dbXX;bras;jmp
12556
          fjXX | N/A    fbXXw   fbXXl            N/A
12557
 
12558
     XX: condition
12559
     NX: negative of condition XX
12560
                       `*'--see full description below
12561
         `**'--this expansion mode is disallowed by `--pcrel'
12562
 
12563
`jbsr'
12564
`jra'
12565
     These are the simplest jump pseudo-operations; they always map to
12566
     one particular machine instruction, depending on the displacement
12567
     to the branch target.  This instruction will be a byte or word
12568
     branch is that is sufficient.  Otherwise, a long branch will be
12569
     emitted if available.  If no long branches are available and the
12570
     `--pcrel' option is not given, an absolute long jump will be
12571
     emitted instead.  If no long branches are available, the `--pcrel'
12572
     option is given, and a word branch cannot reach the target, an
12573
     error message is generated.
12574
 
12575
     In addition to standard branch operands, `as' allows these
12576
     pseudo-operations to have all operands that are allowed for jsr
12577
     and jmp, substituting these instructions if the operand given is
12578
     not valid for a branch instruction.
12579
 
12580
`jXX'
12581
     Here, `jXX' stands for an entire family of pseudo-operations,
12582
     where XX is a conditional branch or condition-code test.  The full
12583
     list of pseudo-ops in this family is:
12584
           jhi   jls   jcc   jcs   jne   jeq   jvc
12585
           jvs   jpl   jmi   jge   jlt   jgt   jle
12586
 
12587
     Usually, each of these pseudo-operations expands to a single branch
12588
     instruction.  However, if a word branch is not sufficient, no long
12589
     branches are available, and the `--pcrel' option is not given, `as'
12590
     issues a longer code fragment in terms of NX, the opposite
12591
     condition to XX.  For example, under these conditions:
12592
              jXX foo
12593
     gives
12594
               bNXs oof
12595
               jmp foo
12596
           oof:
12597
 
12598
`dbXX'
12599
     The full family of pseudo-operations covered here is
12600
           dbhi   dbls   dbcc   dbcs   dbne   dbeq   dbvc
12601
           dbvs   dbpl   dbmi   dbge   dblt   dbgt   dble
12602
           dbf    dbra   dbt
12603
 
12604
     Motorola `dbXX' instructions allow word displacements only.  When
12605
     a word displacement is sufficient, each of these pseudo-operations
12606
     expands to the corresponding Motorola instruction.  When a word
12607
     displacement is not sufficient and long branches are available,
12608
     when the source reads `dbXX foo', `as' emits
12609
               dbXX oo1
12610
               bras oo2
12611
           oo1:bral foo
12612
           oo2:
12613
 
12614
     If, however, long branches are not available and the `--pcrel'
12615
     option is not given, `as' emits
12616
               dbXX oo1
12617
               bras oo2
12618
           oo1:jmp foo
12619
           oo2:
12620
 
12621
`fjXX'
12622
     This family includes
12623
           fjne   fjeq   fjge   fjlt   fjgt   fjle   fjf
12624
           fjt    fjgl   fjgle  fjnge  fjngl  fjngle fjngt
12625
           fjnle  fjnlt  fjoge  fjogl  fjogt  fjole  fjolt
12626
           fjor   fjseq  fjsf   fjsne  fjst   fjueq  fjuge
12627
           fjugt  fjule  fjult  fjun
12628
 
12629
     Each of these pseudo-operations always expands to a single Motorola
12630
     coprocessor branch instruction, word or long.  All Motorola
12631
     coprocessor branch instructions allow both word and long
12632
     displacements.
12633
 
12634
 
12635

12636
File: as.info,  Node: M68K-Chars,  Prev: M68K-Branch,  Up: M68K-opcodes
12637
 
12638
9.23.6.2 Special Characters
12639
...........................
12640
 
12641
Line comments are introduced by the `|' character appearing anywhere on
12642
a line, unless the `--bitwise-or' command line option has been
12643
specified.
12644
 
12645
   An asterisk (`*') as the first character on a line marks the start
12646
of a line comment as well.
12647
 
12648
   A hash character (`#') as the first character on a line also marks
12649
the start of a line comment, but in this case it could also be a
12650
logical line number directive (*note Comments::) or a preprocessor
12651
control command (*note Preprocessing::).  If the hash character appears
12652
elsewhere on a line it is used to introduce an immediate value.  (This
12653
is for compatibility with Sun's assembler).
12654
 
12655
   Multiple statements on the same line can appear if they are separated
12656
by the `;' character.
12657
 
12658

12659
File: as.info,  Node: M68HC11-Dependent,  Next: MicroBlaze-Dependent,  Prev: M68K-Dependent,  Up: Machine Dependencies
12660
 
12661
9.24 M68HC11 and M68HC12 Dependent Features
12662
===========================================
12663
 
12664
* Menu:
12665
 
12666
* M68HC11-Opts::                   M68HC11 and M68HC12 Options
12667
* M68HC11-Syntax::                 Syntax
12668
* M68HC11-Modifiers::              Symbolic Operand Modifiers
12669
* M68HC11-Directives::             Assembler Directives
12670
* M68HC11-Float::                  Floating Point
12671
* M68HC11-opcodes::                Opcodes
12672
 
12673

12674
File: as.info,  Node: M68HC11-Opts,  Next: M68HC11-Syntax,  Up: M68HC11-Dependent
12675
 
12676
9.24.1 M68HC11 and M68HC12 Options
12677
----------------------------------
12678
 
12679
The Motorola 68HC11 and 68HC12 version of `as' have a few machine
12680
dependent options.
12681
 
12682
`-m68hc11'
12683
     This option switches the assembler into the M68HC11 mode. In this
12684
     mode, the assembler only accepts 68HC11 operands and mnemonics. It
12685
     produces code for the 68HC11.
12686
 
12687
`-m68hc12'
12688
     This option switches the assembler into the M68HC12 mode. In this
12689
     mode, the assembler also accepts 68HC12 operands and mnemonics. It
12690
     produces code for the 68HC12. A few 68HC11 instructions are
12691
     replaced by some 68HC12 instructions as recommended by Motorola
12692
     specifications.
12693
 
12694
`-m68hcs12'
12695
     This option switches the assembler into the M68HCS12 mode.  This
12696
     mode is similar to `-m68hc12' but specifies to assemble for the
12697
     68HCS12 series.  The only difference is on the assembling of the
12698
     `movb' and `movw' instruction when a PC-relative operand is used.
12699
 
12700
`-mm9s12x'
12701
     This option switches the assembler into the M9S12X mode.  This
12702
     mode is similar to `-m68hc12' but specifies to assemble for the
12703
     S12X series which is a superset of the HCS12.
12704
 
12705
`-mm9s12xg'
12706
     This option switches the assembler into the XGATE mode for the RISC
12707
     co-processor featured on some S12X-family chips.
12708
 
12709
`--xgate-ramoffset'
12710
     This option instructs the linker to offset RAM addresses from S12X
12711
     address space into XGATE address space.
12712
 
12713
`-mshort'
12714
     This option controls the ABI and indicates to use a 16-bit integer
12715
     ABI.  It has no effect on the assembled instructions.  This is the
12716
     default.
12717
 
12718
`-mlong'
12719
     This option controls the ABI and indicates to use a 32-bit integer
12720
     ABI.
12721
 
12722
`-mshort-double'
12723
     This option controls the ABI and indicates to use a 32-bit float
12724
     ABI.  This is the default.
12725
 
12726
`-mlong-double'
12727
     This option controls the ABI and indicates to use a 64-bit float
12728
     ABI.
12729
 
12730
`--strict-direct-mode'
12731
     You can use the `--strict-direct-mode' option to disable the
12732
     automatic translation of direct page mode addressing into extended
12733
     mode when the instruction does not support direct mode.  For
12734
     example, the `clr' instruction does not support direct page mode
12735
     addressing. When it is used with the direct page mode, `as' will
12736
     ignore it and generate an absolute addressing.  This option
12737
     prevents `as' from doing this, and the wrong usage of the direct
12738
     page mode will raise an error.
12739
 
12740
`--short-branches'
12741
     The `--short-branches' option turns off the translation of
12742
     relative branches into absolute branches when the branch offset is
12743
     out of range. By default `as' transforms the relative branch
12744
     (`bsr', `bgt', `bge', `beq', `bne', `ble', `blt', `bhi', `bcc',
12745
     `bls', `bcs', `bmi', `bvs', `bvs', `bra') into an absolute branch
12746
     when the offset is out of the -128 .. 127 range.  In that case,
12747
     the `bsr' instruction is translated into a `jsr', the `bra'
12748
     instruction is translated into a `jmp' and the conditional
12749
     branches instructions are inverted and followed by a `jmp'. This
12750
     option disables these translations and `as' will generate an error
12751
     if a relative branch is out of range. This option does not affect
12752
     the optimization associated to the `jbra', `jbsr' and `jbXX'
12753
     pseudo opcodes.
12754
 
12755
`--force-long-branches'
12756
     The `--force-long-branches' option forces the translation of
12757
     relative branches into absolute branches. This option does not
12758
     affect the optimization associated to the `jbra', `jbsr' and
12759
     `jbXX' pseudo opcodes.
12760
 
12761
`--print-insn-syntax'
12762
     You can use the `--print-insn-syntax' option to obtain the syntax
12763
     description of the instruction when an error is detected.
12764
 
12765
`--print-opcodes'
12766
     The `--print-opcodes' option prints the list of all the
12767
     instructions with their syntax. The first item of each line
12768
     represents the instruction name and the rest of the line indicates
12769
     the possible operands for that instruction. The list is printed in
12770
     alphabetical order. Once the list is printed `as' exits.
12771
 
12772
`--generate-example'
12773
     The `--generate-example' option is similar to `--print-opcodes'
12774
     but it generates an example for each instruction instead.
12775
 
12776

12777
File: as.info,  Node: M68HC11-Syntax,  Next: M68HC11-Modifiers,  Prev: M68HC11-Opts,  Up: M68HC11-Dependent
12778
 
12779
9.24.2 Syntax
12780
-------------
12781
 
12782
In the M68HC11 syntax, the instruction name comes first and it may be
12783
followed by one or several operands (up to three). Operands are
12784
separated by comma (`,'). In the normal mode, `as' will complain if too
12785
many operands are specified for a given instruction. In the MRI mode
12786
(turned on with `-M' option), it will treat them as comments. Example:
12787
 
12788
     inx
12789
     lda  #23
12790
     bset 2,x #4
12791
     brclr *bot #8 foo
12792
 
12793
   The presence of a `;' character or a `!' character anywhere on a
12794
line indicates the start of a comment that extends to the end of that
12795
line.
12796
 
12797
   A `*' or a `#' character at the start of a line also introduces a
12798
line comment, but these characters do not work elsewhere on the line.
12799
If the first character of the line is a `#' then as well as starting a
12800
comment, the line could also be logical line number directive (*note
12801
Comments::) or a preprocessor control command (*note Preprocessing::).
12802
 
12803
   The M68HC11 assembler does not currently support a line separator
12804
character.
12805
 
12806
   The following addressing modes are understood for 68HC11 and 68HC12:
12807
"Immediate"
12808
     `#NUMBER'
12809
 
12810
"Address Register"
12811
     `NUMBER,X', `NUMBER,Y'
12812
 
12813
     The NUMBER may be omitted in which case 0 is assumed.
12814
 
12815
"Direct Addressing mode"
12816
     `*SYMBOL', or `*DIGITS'
12817
 
12818
"Absolute"
12819
     `SYMBOL', or `DIGITS'
12820
 
12821
   The M68HC12 has other more complex addressing modes. All of them are
12822
supported and they are represented below:
12823
 
12824
"Constant Offset Indexed Addressing Mode"
12825
     `NUMBER,REG'
12826
 
12827
     The NUMBER may be omitted in which case 0 is assumed.  The
12828
     register can be either `X', `Y', `SP' or `PC'.  The assembler will
12829
     use the smaller post-byte definition according to the constant
12830
     value (5-bit constant offset, 9-bit constant offset or 16-bit
12831
     constant offset).  If the constant is not known by the assembler
12832
     it will use the 16-bit constant offset post-byte and the value
12833
     will be resolved at link time.
12834
 
12835
"Offset Indexed Indirect"
12836
     `[NUMBER,REG]'
12837
 
12838
     The register can be either `X', `Y', `SP' or `PC'.
12839
 
12840
"Auto Pre-Increment/Pre-Decrement/Post-Increment/Post-Decrement"
12841
     `NUMBER,-REG' `NUMBER,+REG' `NUMBER,REG-' `NUMBER,REG+'
12842
 
12843
     The number must be in the range `-8'..`+8' and must not be 0.  The
12844
     register can be either `X', `Y', `SP' or `PC'.
12845
 
12846
"Accumulator Offset"
12847
     `ACC,REG'
12848
 
12849
     The accumulator register can be either `A', `B' or `D'.  The
12850
     register can be either `X', `Y', `SP' or `PC'.
12851
 
12852
"Accumulator D offset indexed-indirect"
12853
     `[D,REG]'
12854
 
12855
     The register can be either `X', `Y', `SP' or `PC'.
12856
 
12857
 
12858
   For example:
12859
 
12860
     ldab 1024,sp
12861
     ldd [10,x]
12862
     orab 3,+x
12863
     stab -2,y-
12864
     ldx a,pc
12865
     sty [d,sp]
12866
 
12867

12868
File: as.info,  Node: M68HC11-Modifiers,  Next: M68HC11-Directives,  Prev: M68HC11-Syntax,  Up: M68HC11-Dependent
12869
 
12870
9.24.3 Symbolic Operand Modifiers
12871
---------------------------------
12872
 
12873
The assembler supports several modifiers when using symbol addresses in
12874
68HC11 and 68HC12 instruction operands.  The general syntax is the
12875
following:
12876
 
12877
     %modifier(symbol)
12878
 
12879
`%addr'
12880
     This modifier indicates to the assembler and linker to use the
12881
     16-bit physical address corresponding to the symbol.  This is
12882
     intended to be used on memory window systems to map a symbol in
12883
     the memory bank window.  If the symbol is in a memory expansion
12884
     part, the physical address corresponds to the symbol address
12885
     within the memory bank window.  If the symbol is not in a memory
12886
     expansion part, this is the symbol address (using or not using the
12887
     %addr modifier has no effect in that case).
12888
 
12889
`%page'
12890
     This modifier indicates to use the memory page number corresponding
12891
     to the symbol.  If the symbol is in a memory expansion part, its
12892
     page number is computed by the linker as a number used to map the
12893
     page containing the symbol in the memory bank window.  If the
12894
     symbol is not in a memory expansion part, the page number is 0.
12895
 
12896
`%hi'
12897
     This modifier indicates to use the 8-bit high part of the physical
12898
     address of the symbol.
12899
 
12900
`%lo'
12901
     This modifier indicates to use the 8-bit low part of the physical
12902
     address of the symbol.
12903
 
12904
 
12905
   For example a 68HC12 call to a function `foo_example' stored in
12906
memory expansion part could be written as follows:
12907
 
12908
     call %addr(foo_example),%page(foo_example)
12909
 
12910
   and this is equivalent to
12911
 
12912
     call foo_example
12913
 
12914
   And for 68HC11 it could be written as follows:
12915
 
12916
     ldab #%page(foo_example)
12917
     stab _page_switch
12918
     jsr  %addr(foo_example)
12919
 
12920

12921
File: as.info,  Node: M68HC11-Directives,  Next: M68HC11-Float,  Prev: M68HC11-Modifiers,  Up: M68HC11-Dependent
12922
 
12923
9.24.4 Assembler Directives
12924
---------------------------
12925
 
12926
The 68HC11 and 68HC12 version of `as' have the following specific
12927
assembler directives:
12928
 
12929
`.relax'
12930
     The relax directive is used by the `GNU Compiler' to emit a
12931
     specific relocation to mark a group of instructions for linker
12932
     relaxation.  The sequence of instructions within the group must be
12933
     known to the linker so that relaxation can be performed.
12934
 
12935
`.mode [mshort|mlong|mshort-double|mlong-double]'
12936
     This directive specifies the ABI.  It overrides the `-mshort',
12937
     `-mlong', `-mshort-double' and `-mlong-double' options.
12938
 
12939
`.far SYMBOL'
12940
     This directive marks the symbol as a `far' symbol meaning that it
12941
     uses a `call/rtc' calling convention as opposed to `jsr/rts'.
12942
     During a final link, the linker will identify references to the
12943
     `far' symbol and will verify the proper calling convention.
12944
 
12945
`.interrupt SYMBOL'
12946
     This directive marks the symbol as an interrupt entry point.  This
12947
     information is then used by the debugger to correctly unwind the
12948
     frame across interrupts.
12949
 
12950
`.xrefb SYMBOL'
12951
     This directive is defined for compatibility with the
12952
     `Specification for Motorola 8 and 16-Bit Assembly Language Input
12953
     Standard' and is ignored.
12954
 
12955
 
12956

12957
File: as.info,  Node: M68HC11-Float,  Next: M68HC11-opcodes,  Prev: M68HC11-Directives,  Up: M68HC11-Dependent
12958
 
12959
9.24.5 Floating Point
12960
---------------------
12961
 
12962
Packed decimal (P) format floating literals are not supported.  Feel
12963
free to add the code!
12964
 
12965
   The floating point formats generated by directives are these.
12966
 
12967
`.float'
12968
     `Single' precision floating point constants.
12969
 
12970
`.double'
12971
     `Double' precision floating point constants.
12972
 
12973
`.extend'
12974
`.ldouble'
12975
     `Extended' precision (`long double') floating point constants.
12976
 
12977

12978
File: as.info,  Node: M68HC11-opcodes,  Prev: M68HC11-Float,  Up: M68HC11-Dependent
12979
 
12980
9.24.6 Opcodes
12981
--------------
12982
 
12983
* Menu:
12984
 
12985
* M68HC11-Branch::                 Branch Improvement
12986
 
12987

12988
File: as.info,  Node: M68HC11-Branch,  Up: M68HC11-opcodes
12989
 
12990
9.24.6.1 Branch Improvement
12991
...........................
12992
 
12993
Certain pseudo opcodes are permitted for branch instructions.  They
12994
expand to the shortest branch instruction that reach the target.
12995
Generally these mnemonics are made by prepending `j' to the start of
12996
Motorola mnemonic. These pseudo opcodes are not affected by the
12997
`--short-branches' or `--force-long-branches' options.
12998
 
12999
   The following table summarizes the pseudo-operations.
13000
 
13001
                             Displacement Width
13002
          +-------------------------------------------------------------+
13003
          |                     Options                                 |
13004
          |    --short-branches           --force-long-branches         |
13005
          +--------------------------+----------------------------------+
13006
       Op |BYTE             WORD     | BYTE          WORD               |
13007
          +--------------------------+----------------------------------+
13008
      bsr | bsr       |               jsr           |
13009
      bra | bra       |               jmp           |
13010
     jbsr | bsr    jsr  | bsr   jsr           |
13011
     jbra | bra    jmp  | bra   jmp           |
13012
      bXX | bXX       |               bNX +3; jmp   |
13013
     jbXX | bXX    bNX +3;   | bXX   bNX +3; jmp   |
13014
          |                jmp  |                                  |
13015
          +--------------------------+----------------------------------+
13016
     XX: condition
13017
     NX: negative of condition XX
13018
 
13019
`jbsr'
13020
`jbra'
13021
     These are the simplest jump pseudo-operations; they always map to
13022
     one particular machine instruction, depending on the displacement
13023
     to the branch target.
13024
 
13025
`jbXX'
13026
     Here, `jbXX' stands for an entire family of pseudo-operations,
13027
     where XX is a conditional branch or condition-code test.  The full
13028
     list of pseudo-ops in this family is:
13029
           jbcc   jbeq   jbge   jbgt   jbhi   jbvs   jbpl  jblo
13030
           jbcs   jbne   jblt   jble   jbls   jbvc   jbmi
13031
 
13032
     For the cases of non-PC relative displacements and long
13033
     displacements, `as' issues a longer code fragment in terms of NX,
13034
     the opposite condition to XX.  For example, for the non-PC
13035
     relative case:
13036
              jbXX foo
13037
     gives
13038
               bNXs oof
13039
               jmp foo
13040
           oof:
13041
 
13042
 
13043

13044
File: as.info,  Node: MicroBlaze-Dependent,  Next: MIPS-Dependent,  Prev: M68HC11-Dependent,  Up: Machine Dependencies
13045
 
13046
9.25 MicroBlaze Dependent Features
13047
==================================
13048
 
13049
   The Xilinx MicroBlaze processor family includes several variants,
13050
all using the same core instruction set.  This chapter covers features
13051
of the GNU assembler that are specific to the MicroBlaze architecture.
13052
For details about the MicroBlaze instruction set, please see the
13053
`MicroBlaze Processor Reference Guide (UG081)' available at
13054
www.xilinx.com.
13055
 
13056
* Menu:
13057
 
13058
* MicroBlaze Directives::           Directives for MicroBlaze Processors.
13059
* MicroBlaze Syntax::               Syntax for the MicroBlaze
13060
 
13061

13062
File: as.info,  Node: MicroBlaze Directives,  Next: MicroBlaze Syntax,  Up: MicroBlaze-Dependent
13063
 
13064
9.25.1 Directives
13065
-----------------
13066
 
13067
A number of assembler directives are available for MicroBlaze.
13068
 
13069
`.data8 EXPRESSION,...'
13070
     This directive is an alias for `.byte'. Each expression is
13071
     assembled into an eight-bit value.
13072
 
13073
`.data16 EXPRESSION,...'
13074
     This directive is an alias for `.hword'. Each expression is
13075
     assembled into an 16-bit value.
13076
 
13077
`.data32 EXPRESSION,...'
13078
     This directive is an alias for `.word'. Each expression is
13079
     assembled into an 32-bit value.
13080
 
13081
`.ent NAME[,LABEL]'
13082
     This directive is an alias for `.func' denoting the start of
13083
     function NAME at (optional) LABEL.
13084
 
13085
`.end NAME[,LABEL]'
13086
     This directive is an alias for `.endfunc' denoting the end of
13087
     function NAME.
13088
 
13089
`.gpword LABEL,...'
13090
     This directive is an alias for `.rva'.  The resolved address of
13091
     LABEL is stored in the data section.
13092
 
13093
`.weakext LABEL'
13094
     Declare that LABEL is a weak external symbol.
13095
 
13096
`.rodata'
13097
     Switch to .rodata section. Equivalent to `.section .rodata'
13098
 
13099
`.sdata2'
13100
     Switch to .sdata2 section. Equivalent to `.section .sdata2'
13101
 
13102
`.sdata'
13103
     Switch to .sdata section. Equivalent to `.section .sdata'
13104
 
13105
`.bss'
13106
     Switch to .bss section. Equivalent to `.section .bss'
13107
 
13108
`.sbss'
13109
     Switch to .sbss section. Equivalent to `.section .sbss'
13110
 
13111

13112
File: as.info,  Node: MicroBlaze Syntax,  Prev: MicroBlaze Directives,  Up: MicroBlaze-Dependent
13113
 
13114
9.25.2 Syntax for the MicroBlaze
13115
--------------------------------
13116
 
13117
* Menu:
13118
 
13119
* MicroBlaze-Chars::                Special Characters
13120
 
13121

13122
File: as.info,  Node: MicroBlaze-Chars,  Up: MicroBlaze Syntax
13123
 
13124
9.25.2.1 Special Characters
13125
...........................
13126
 
13127
The presence of a `#' on a line indicates the start of a comment that
13128
extends to the end of the current line.
13129
 
13130
   If a `#' appears as the first character of a line, the whole line is
13131
treated as a comment, but in this case the line can also be a logical
13132
line number directive (*note Comments::) or a preprocessor control
13133
command (*note Preprocessing::).
13134
 
13135
   The `;' character can be used to separate statements on the same
13136
line.
13137
 
13138

13139
File: as.info,  Node: MIPS-Dependent,  Next: MMIX-Dependent,  Prev: MicroBlaze-Dependent,  Up: Machine Dependencies
13140
 
13141
9.26 MIPS Dependent Features
13142
============================
13143
 
13144
   GNU `as' for MIPS architectures supports several different MIPS
13145
processors, and MIPS ISA levels I through V, MIPS32, and MIPS64.  For
13146
information about the MIPS instruction set, see `MIPS RISC
13147
Architecture', by Kane and Heindrich (Prentice-Hall).  For an overview
13148
of MIPS assembly conventions, see "Appendix D: Assembly Language
13149
Programming" in the same work.
13150
 
13151
* Menu:
13152
 
13153
* MIPS Opts::           Assembler options
13154
* MIPS Object::         ECOFF object code
13155
* MIPS Stabs::          Directives for debugging information
13156
* MIPS ISA::            Directives to override the ISA level
13157
* MIPS symbol sizes::   Directives to override the size of symbols
13158
* MIPS autoextend::     Directives for extending MIPS 16 bit instructions
13159
* MIPS insn::           Directive to mark data as an instruction
13160
* MIPS option stack::   Directives to save and restore options
13161
* MIPS ASE instruction generation overrides:: Directives to control
13162
                        generation of MIPS ASE instructions
13163
* MIPS floating-point:: Directives to override floating-point options
13164
* MIPS Syntax::         MIPS specific syntactical considerations
13165
 
13166

13167
File: as.info,  Node: MIPS Opts,  Next: MIPS Object,  Up: MIPS-Dependent
13168
 
13169
9.26.1 Assembler options
13170
------------------------
13171
 
13172
The MIPS configurations of GNU `as' support these special options:
13173
 
13174
`-G NUM'
13175
     This option sets the largest size of an object that can be
13176
     referenced implicitly with the `gp' register.  It is only accepted
13177
     for targets that use ECOFF format.  The default value is 8.
13178
 
13179
`-EB'
13180
`-EL'
13181
     Any MIPS configuration of `as' can select big-endian or
13182
     little-endian output at run time (unlike the other GNU development
13183
     tools, which must be configured for one or the other).  Use `-EB'
13184
     to select big-endian output, and `-EL' for little-endian.
13185
 
13186
`-KPIC'
13187
     Generate SVR4-style PIC.  This option tells the assembler to
13188
     generate SVR4-style position-independent macro expansions.  It
13189
     also tells the assembler to mark the output file as PIC.
13190
 
13191
`-mvxworks-pic'
13192
     Generate VxWorks PIC.  This option tells the assembler to generate
13193
     VxWorks-style position-independent macro expansions.
13194
 
13195
`-mips1'
13196
`-mips2'
13197
`-mips3'
13198
`-mips4'
13199
`-mips5'
13200
`-mips32'
13201
`-mips32r2'
13202
`-mips64'
13203
`-mips64r2'
13204
     Generate code for a particular MIPS Instruction Set Architecture
13205
     level.  `-mips1' corresponds to the R2000 and R3000 processors,
13206
     `-mips2' to the R6000 processor, `-mips3' to the R4000 processor,
13207
     and `-mips4' to the R8000 and R10000 processors.  `-mips5',
13208
     `-mips32', `-mips32r2', `-mips64', and `-mips64r2' correspond to
13209
     generic MIPS V, MIPS32, MIPS32 RELEASE 2, MIPS64, and MIPS64
13210
     RELEASE 2 ISA processors, respectively.  You can also switch
13211
     instruction sets during the assembly; see *note Directives to
13212
     override the ISA level: MIPS ISA.
13213
 
13214
`-mgp32'
13215
`-mfp32'
13216
     Some macros have different expansions for 32-bit and 64-bit
13217
     registers.  The register sizes are normally inferred from the ISA
13218
     and ABI, but these flags force a certain group of registers to be
13219
     treated as 32 bits wide at all times.  `-mgp32' controls the size
13220
     of general-purpose registers and `-mfp32' controls the size of
13221
     floating-point registers.
13222
 
13223
     The `.set gp=32' and `.set fp=32' directives allow the size of
13224
     registers to be changed for parts of an object. The default value
13225
     is restored by `.set gp=default' and `.set fp=default'.
13226
 
13227
     On some MIPS variants there is a 32-bit mode flag; when this flag
13228
     is set, 64-bit instructions generate a trap.  Also, some 32-bit
13229
     OSes only save the 32-bit registers on a context switch, so it is
13230
     essential never to use the 64-bit registers.
13231
 
13232
`-mgp64'
13233
`-mfp64'
13234
     Assume that 64-bit registers are available.  This is provided in
13235
     the interests of symmetry with `-mgp32' and `-mfp32'.
13236
 
13237
     The `.set gp=64' and `.set fp=64' directives allow the size of
13238
     registers to be changed for parts of an object. The default value
13239
     is restored by `.set gp=default' and `.set fp=default'.
13240
 
13241
`-mips16'
13242
`-no-mips16'
13243
     Generate code for the MIPS 16 processor.  This is equivalent to
13244
     putting `.set mips16' at the start of the assembly file.
13245
     `-no-mips16' turns off this option.
13246
 
13247
`-mmicromips'
13248
`-mno-micromips'
13249
     Generate code for the microMIPS processor.  This is equivalent to
13250
     putting `.set micromips' at the start of the assembly file.
13251
     `-mno-micromips' turns off this option.  This is equivalent to
13252
     putting `.set nomicromips' at the start of the assembly file.
13253
 
13254
`-msmartmips'
13255
`-mno-smartmips'
13256
     Enables the SmartMIPS extensions to the MIPS32 instruction set,
13257
     which provides a number of new instructions which target smartcard
13258
     and cryptographic applications.  This is equivalent to putting
13259
     `.set smartmips' at the start of the assembly file.
13260
     `-mno-smartmips' turns off this option.
13261
 
13262
`-mips3d'
13263
`-no-mips3d'
13264
     Generate code for the MIPS-3D Application Specific Extension.
13265
     This tells the assembler to accept MIPS-3D instructions.
13266
     `-no-mips3d' turns off this option.
13267
 
13268
`-mdmx'
13269
`-no-mdmx'
13270
     Generate code for the MDMX Application Specific Extension.  This
13271
     tells the assembler to accept MDMX instructions.  `-no-mdmx' turns
13272
     off this option.
13273
 
13274
`-mdsp'
13275
`-mno-dsp'
13276
     Generate code for the DSP Release 1 Application Specific Extension.
13277
     This tells the assembler to accept DSP Release 1 instructions.
13278
     `-mno-dsp' turns off this option.
13279
 
13280
`-mdspr2'
13281
`-mno-dspr2'
13282
     Generate code for the DSP Release 2 Application Specific Extension.
13283
     This option implies -mdsp.  This tells the assembler to accept DSP
13284
     Release 2 instructions.  `-mno-dspr2' turns off this option.
13285
 
13286
`-mmt'
13287
`-mno-mt'
13288
     Generate code for the MT Application Specific Extension.  This
13289
     tells the assembler to accept MT instructions.  `-mno-mt' turns
13290
     off this option.
13291
 
13292
`-mmcu'
13293
`-mno-mcu'
13294
     Generate code for the MCU Application Specific Extension.  This
13295
     tells the assembler to accept MCU instructions.  `-mno-mcu' turns
13296
     off this option.
13297
 
13298
`-mfix7000'
13299
`-mno-fix7000'
13300
     Cause nops to be inserted if the read of the destination register
13301
     of an mfhi or mflo instruction occurs in the following two
13302
     instructions.
13303
 
13304
`-mfix-loongson2f-jump'
13305
`-mno-fix-loongson2f-jump'
13306
     Eliminate instruction fetch from outside 256M region to work
13307
     around the Loongson2F `jump' instructions.  Without it, under
13308
     extreme cases, the kernel may crash.  The issue has been solved in
13309
     latest processor batches, but this fix has no side effect to them.
13310
 
13311
`-mfix-loongson2f-nop'
13312
`-mno-fix-loongson2f-nop'
13313
     Replace nops by `or at,at,zero' to work around the Loongson2F
13314
     `nop' errata.  Without it, under extreme cases, cpu might
13315
     deadlock.  The issue has been solved in latest loongson2f batches,
13316
     but this fix has no side effect to them.
13317
 
13318
`-mfix-vr4120'
13319
`-mno-fix-vr4120'
13320
     Insert nops to work around certain VR4120 errata.  This option is
13321
     intended to be used on GCC-generated code: it is not designed to
13322
     catch all problems in hand-written assembler code.
13323
 
13324
`-mfix-vr4130'
13325
`-mno-fix-vr4130'
13326
     Insert nops to work around the VR4130 `mflo'/`mfhi' errata.
13327
 
13328
`-mfix-24k'
13329
`-mno-fix-24k'
13330
     Insert nops to work around the 24K `eret'/`deret' errata.
13331
 
13332
`-mfix-cn63xxp1'
13333
`-mno-fix-cn63xxp1'
13334
     Replace `pref' hints 0 - 4 and 6 - 24 with hint 28 to work around
13335
     certain CN63XXP1 errata.
13336
 
13337
`-m4010'
13338
`-no-m4010'
13339
     Generate code for the LSI R4010 chip.  This tells the assembler to
13340
     accept the R4010 specific instructions (`addciu', `ffc', etc.),
13341
     and to not schedule `nop' instructions around accesses to the `HI'
13342
     and `LO' registers.  `-no-m4010' turns off this option.
13343
 
13344
`-m4650'
13345
`-no-m4650'
13346
     Generate code for the MIPS R4650 chip.  This tells the assembler
13347
     to accept the `mad' and `madu' instruction, and to not schedule
13348
     `nop' instructions around accesses to the `HI' and `LO' registers.
13349
     `-no-m4650' turns off this option.
13350
 
13351
`-m3900'
13352
`-no-m3900'
13353
`-m4100'
13354
`-no-m4100'
13355
     For each option `-mNNNN', generate code for the MIPS RNNNN chip.
13356
     This tells the assembler to accept instructions specific to that
13357
     chip, and to schedule for that chip's hazards.
13358
 
13359
`-march=CPU'
13360
     Generate code for a particular MIPS cpu.  It is exactly equivalent
13361
     to `-mCPU', except that there are more value of CPU understood.
13362
     Valid CPU value are:
13363
 
13364
          2000, 3000, 3900, 4000, 4010, 4100, 4111, vr4120, vr4130,
13365
          vr4181, 4300, 4400, 4600, 4650, 5000, rm5200, rm5230, rm5231,
13366
          rm5261, rm5721, vr5400, vr5500, 6000, rm7000, 8000, rm9000,
13367
          10000, 12000, 14000, 16000, 4kc, 4km, 4kp, 4ksc, 4kec, 4kem,
13368
          4kep, 4ksd, m4k, m4kp, m14k, m14kc, m14ke, m14kec, 24kc,
13369
          24kf2_1, 24kf, 24kf1_1, 24kec, 24kef2_1, 24kef, 24kef1_1,
13370
          34kc, 34kf2_1, 34kf, 34kf1_1, 34kn, 74kc, 74kf2_1, 74kf,
13371
          74kf1_1, 74kf3_2, 1004kc, 1004kf2_1, 1004kf, 1004kf1_1, 5kc,
13372
          5kf, 20kc, 25kf, sb1, sb1a, loongson2e, loongson2f,
13373
          loongson3a, octeon, octeon+, octeon2, xlr, xlp
13374
 
13375
     For compatibility reasons, `Nx' and `Bfx' are accepted as synonyms
13376
     for `Nf1_1'.  These values are deprecated.
13377
 
13378
`-mtune=CPU'
13379
     Schedule and tune for a particular MIPS cpu.  Valid CPU values are
13380
     identical to `-march=CPU'.
13381
 
13382
`-mabi=ABI'
13383
     Record which ABI the source code uses.  The recognized arguments
13384
     are: `32', `n32', `o64', `64' and `eabi'.
13385
 
13386
`-msym32'
13387
`-mno-sym32'
13388
     Equivalent to adding `.set sym32' or `.set nosym32' to the
13389
     beginning of the assembler input.  *Note MIPS symbol sizes::.
13390
 
13391
`-nocpp'
13392
     This option is ignored.  It is accepted for command-line
13393
     compatibility with other assemblers, which use it to turn off C
13394
     style preprocessing.  With GNU `as', there is no need for
13395
     `-nocpp', because the GNU assembler itself never runs the C
13396
     preprocessor.
13397
 
13398
`-msoft-float'
13399
`-mhard-float'
13400
     Disable or enable floating-point instructions.  Note that by
13401
     default floating-point instructions are always allowed even with
13402
     CPU targets that don't have support for these instructions.
13403
 
13404
`-msingle-float'
13405
`-mdouble-float'
13406
     Disable or enable double-precision floating-point operations.  Note
13407
     that by default double-precision floating-point operations are
13408
     always allowed even with CPU targets that don't have support for
13409
     these operations.
13410
 
13411
`--construct-floats'
13412
`--no-construct-floats'
13413
     The `--no-construct-floats' option disables the construction of
13414
     double width floating point constants by loading the two halves of
13415
     the value into the two single width floating point registers that
13416
     make up the double width register.  This feature is useful if the
13417
     processor support the FR bit in its status  register, and this bit
13418
     is known (by the programmer) to be set.  This bit prevents the
13419
     aliasing of the double width register by the single width
13420
     registers.
13421
 
13422
     By default `--construct-floats' is selected, allowing construction
13423
     of these floating point constants.
13424
 
13425
`--trap'
13426
`--no-break'
13427
     `as' automatically macro expands certain division and
13428
     multiplication instructions to check for overflow and division by
13429
     zero.  This option causes `as' to generate code to take a trap
13430
     exception rather than a break exception when an error is detected.
13431
     The trap instructions are only supported at Instruction Set
13432
     Architecture level 2 and higher.
13433
 
13434
`--break'
13435
`--no-trap'
13436
     Generate code to take a break exception rather than a trap
13437
     exception when an error is detected.  This is the default.
13438
 
13439
`-mpdr'
13440
`-mno-pdr'
13441
     Control generation of `.pdr' sections.  Off by default on IRIX, on
13442
     elsewhere.
13443
 
13444
`-mshared'
13445
`-mno-shared'
13446
     When generating code using the Unix calling conventions (selected
13447
     by `-KPIC' or `-mcall_shared'), gas will normally generate code
13448
     which can go into a shared library.  The `-mno-shared' option
13449
     tells gas to generate code which uses the calling convention, but
13450
     can not go into a shared library.  The resulting code is slightly
13451
     more efficient.  This option only affects the handling of the
13452
     `.cpload' and `.cpsetup' pseudo-ops.
13453
 
13454

13455
File: as.info,  Node: MIPS Object,  Next: MIPS Stabs,  Prev: MIPS Opts,  Up: MIPS-Dependent
13456
 
13457
9.26.2 MIPS ECOFF object code
13458
-----------------------------
13459
 
13460
Assembling for a MIPS ECOFF target supports some additional sections
13461
besides the usual `.text', `.data' and `.bss'.  The additional sections
13462
are `.rdata', used for read-only data, `.sdata', used for small data,
13463
and `.sbss', used for small common objects.
13464
 
13465
   When assembling for ECOFF, the assembler uses the `$gp' (`$28')
13466
register to form the address of a "small object".  Any object in the
13467
`.sdata' or `.sbss' sections is considered "small" in this sense.  For
13468
external objects, or for objects in the `.bss' section, you can use the
13469
`gcc' `-G' option to control the size of objects addressed via `$gp';
13470
the default value is 8, meaning that a reference to any object eight
13471
bytes or smaller uses `$gp'.  Passing `-G 0' to `as' prevents it from
13472
using the `$gp' register on the basis of object size (but the assembler
13473
uses `$gp' for objects in `.sdata' or `sbss' in any case).  The size of
13474
an object in the `.bss' section is set by the `.comm' or `.lcomm'
13475
directive that defines it.  The size of an external object may be set
13476
with the `.extern' directive.  For example, `.extern sym,4' declares
13477
that the object at `sym' is 4 bytes in length, whie leaving `sym'
13478
otherwise undefined.
13479
 
13480
   Using small ECOFF objects requires linker support, and assumes that
13481
the `$gp' register is correctly initialized (normally done
13482
automatically by the startup code).  MIPS ECOFF assembly code must not
13483
modify the `$gp' register.
13484
 
13485

13486
File: as.info,  Node: MIPS Stabs,  Next: MIPS ISA,  Prev: MIPS Object,  Up: MIPS-Dependent
13487
 
13488
9.26.3 Directives for debugging information
13489
-------------------------------------------
13490
 
13491
MIPS ECOFF `as' supports several directives used for generating
13492
debugging information which are not support by traditional MIPS
13493
assemblers.  These are `.def', `.endef', `.dim', `.file', `.scl',
13494
`.size', `.tag', `.type', `.val', `.stabd', `.stabn', and `.stabs'.
13495
The debugging information generated by the three `.stab' directives can
13496
only be read by GDB, not by traditional MIPS debuggers (this
13497
enhancement is required to fully support C++ debugging).  These
13498
directives are primarily used by compilers, not assembly language
13499
programmers!
13500
 
13501

13502
File: as.info,  Node: MIPS symbol sizes,  Next: MIPS autoextend,  Prev: MIPS ISA,  Up: MIPS-Dependent
13503
 
13504
9.26.4 Directives to override the size of symbols
13505
-------------------------------------------------
13506
 
13507
The n64 ABI allows symbols to have any 64-bit value.  Although this
13508
provides a great deal of flexibility, it means that some macros have
13509
much longer expansions than their 32-bit counterparts.  For example,
13510
the non-PIC expansion of `dla $4,sym' is usually:
13511
 
13512
     lui     $4,%highest(sym)
13513
     lui     $1,%hi(sym)
13514
     daddiu  $4,$4,%higher(sym)
13515
     daddiu  $1,$1,%lo(sym)
13516
     dsll32  $4,$4,0
13517
     daddu   $4,$4,$1
13518
 
13519
   whereas the 32-bit expansion is simply:
13520
 
13521
     lui     $4,%hi(sym)
13522
     daddiu  $4,$4,%lo(sym)
13523
 
13524
   n64 code is sometimes constructed in such a way that all symbolic
13525
constants are known to have 32-bit values, and in such cases, it's
13526
preferable to use the 32-bit expansion instead of the 64-bit expansion.
13527
 
13528
   You can use the `.set sym32' directive to tell the assembler that,
13529
from this point on, all expressions of the form `SYMBOL' or `SYMBOL +
13530
OFFSET' have 32-bit values.  For example:
13531
 
13532
     .set sym32
13533
     dla     $4,sym
13534
     lw      $4,sym+16
13535
     sw      $4,sym+0x8000($4)
13536
 
13537
   will cause the assembler to treat `sym', `sym+16' and `sym+0x8000'
13538
as 32-bit values.  The handling of non-symbolic addresses is not
13539
affected.
13540
 
13541
   The directive `.set nosym32' ends a `.set sym32' block and reverts
13542
to the normal behavior.  It is also possible to change the symbol size
13543
using the command-line options `-msym32' and `-mno-sym32'.
13544
 
13545
   These options and directives are always accepted, but at present,
13546
they have no effect for anything other than n64.
13547
 
13548

13549
File: as.info,  Node: MIPS ISA,  Next: MIPS symbol sizes,  Prev: MIPS Stabs,  Up: MIPS-Dependent
13550
 
13551
9.26.5 Directives to override the ISA level
13552
-------------------------------------------
13553
 
13554
GNU `as' supports an additional directive to change the MIPS
13555
Instruction Set Architecture level on the fly: `.set mipsN'.  N should
13556
be a number from 0 to 5, or 32, 32r2, 64 or 64r2.  The values other
13557
than 0 make the assembler accept instructions for the corresponding ISA
13558
level, from that point on in the assembly.  `.set mipsN' affects not
13559
only which instructions are permitted, but also how certain macros are
13560
expanded.  `.set mips0' restores the ISA level to its original level:
13561
either the level you selected with command line options, or the default
13562
for your configuration.  You can use this feature to permit specific
13563
MIPS3 instructions while assembling in 32 bit mode.  Use this directive
13564
with care!
13565
 
13566
   The `.set arch=CPU' directive provides even finer control.  It
13567
changes the effective CPU target and allows the assembler to use
13568
instructions specific to a particular CPU.  All CPUs supported by the
13569
`-march' command line option are also selectable by this directive.
13570
The original value is restored by `.set arch=default'.
13571
 
13572
   The directive `.set mips16' puts the assembler into MIPS 16 mode, in
13573
which it will assemble instructions for the MIPS 16 processor.  Use
13574
`.set nomips16' to return to normal 32 bit mode.
13575
 
13576
   Traditional MIPS assemblers do not support this directive.
13577
 
13578
   The directive `.set micromips' puts the assembler into microMIPS
13579
mode, in which it will assemble instructions for the microMIPS
13580
processor.  Use `.set nomicromips' to return to normal 32 bit mode.
13581
 
13582
   Traditional MIPS assemblers do not support this directive.
13583
 
13584

13585
File: as.info,  Node: MIPS autoextend,  Next: MIPS insn,  Prev: MIPS symbol sizes,  Up: MIPS-Dependent
13586
 
13587
9.26.6 Directives for extending MIPS 16 bit instructions
13588
--------------------------------------------------------
13589
 
13590
By default, MIPS 16 instructions are automatically extended to 32 bits
13591
when necessary.  The directive `.set noautoextend' will turn this off.
13592
When `.set noautoextend' is in effect, any 32 bit instruction must be
13593
explicitly extended with the `.e' modifier (e.g., `li.e $4,1000').  The
13594
directive `.set autoextend' may be used to once again automatically
13595
extend instructions when necessary.
13596
 
13597
   This directive is only meaningful when in MIPS 16 mode.  Traditional
13598
MIPS assemblers do not support this directive.
13599
 
13600

13601
File: as.info,  Node: MIPS insn,  Next: MIPS option stack,  Prev: MIPS autoextend,  Up: MIPS-Dependent
13602
 
13603
9.26.7 Directive to mark data as an instruction
13604
-----------------------------------------------
13605
 
13606
The `.insn' directive tells `as' that the following data is actually
13607
instructions.  This makes a difference in MIPS 16 and microMIPS modes:
13608
when loading the address of a label which precedes instructions, `as'
13609
automatically adds 1 to the value, so that jumping to the loaded
13610
address will do the right thing.
13611
 
13612
   The `.global' and `.globl' directives supported by `as' will by
13613
default mark the symbol as pointing to a region of data not code.  This
13614
means that, for example, any instructions following such a symbol will
13615
not be disassembled by `objdump' as it will regard them as data.  To
13616
change this behaviour an optional section name can be placed after the
13617
symbol name in the `.global' directive.  If this section exists and is
13618
known to be a code section, then the symbol will be marked as poiting at
13619
code not data.  Ie the syntax for the directive is:
13620
 
13621
   `.global SYMBOL[ SECTION][, SYMBOL[ SECTION]] ...',
13622
 
13623
   Here is a short example:
13624
 
13625
             .global foo .text, bar, baz .data
13626
     foo:
13627
             nop
13628
     bar:
13629
             .word 0x0
13630
     baz:
13631
             .word 0x1
13632
 
13633

13634
File: as.info,  Node: MIPS option stack,  Next: MIPS ASE instruction generation overrides,  Prev: MIPS insn,  Up: MIPS-Dependent
13635
 
13636
9.26.8 Directives to save and restore options
13637
---------------------------------------------
13638
 
13639
The directives `.set push' and `.set pop' may be used to save and
13640
restore the current settings for all the options which are controlled
13641
by `.set'.  The `.set push' directive saves the current settings on a
13642
stack.  The `.set pop' directive pops the stack and restores the
13643
settings.
13644
 
13645
   These directives can be useful inside an macro which must change an
13646
option such as the ISA level or instruction reordering but does not want
13647
to change the state of the code which invoked the macro.
13648
 
13649
   Traditional MIPS assemblers do not support these directives.
13650
 
13651

13652
File: as.info,  Node: MIPS ASE instruction generation overrides,  Next: MIPS floating-point,  Prev: MIPS option stack,  Up: MIPS-Dependent
13653
 
13654
9.26.9 Directives to control generation of MIPS ASE instructions
13655
----------------------------------------------------------------
13656
 
13657
The directive `.set mips3d' makes the assembler accept instructions
13658
from the MIPS-3D Application Specific Extension from that point on in
13659
the assembly.  The `.set nomips3d' directive prevents MIPS-3D
13660
instructions from being accepted.
13661
 
13662
   The directive `.set smartmips' makes the assembler accept
13663
instructions from the SmartMIPS Application Specific Extension to the
13664
MIPS32 ISA from that point on in the assembly.  The `.set nosmartmips'
13665
directive prevents SmartMIPS instructions from being accepted.
13666
 
13667
   The directive `.set mdmx' makes the assembler accept instructions
13668
from the MDMX Application Specific Extension from that point on in the
13669
assembly.  The `.set nomdmx' directive prevents MDMX instructions from
13670
being accepted.
13671
 
13672
   The directive `.set dsp' makes the assembler accept instructions
13673
from the DSP Release 1 Application Specific Extension from that point
13674
on in the assembly.  The `.set nodsp' directive prevents DSP Release 1
13675
instructions from being accepted.
13676
 
13677
   The directive `.set dspr2' makes the assembler accept instructions
13678
from the DSP Release 2 Application Specific Extension from that point
13679
on in the assembly.  This dirctive implies `.set dsp'.  The `.set
13680
nodspr2' directive prevents DSP Release 2 instructions from being
13681
accepted.
13682
 
13683
   The directive `.set mt' makes the assembler accept instructions from
13684
the MT Application Specific Extension from that point on in the
13685
assembly.  The `.set nomt' directive prevents MT instructions from
13686
being accepted.
13687
 
13688
   The directive `.set mcu' makes the assembler accept instructions
13689
from the MCU Application Specific Extension from that point on in the
13690
assembly.  The `.set nomcu' directive prevents MCU instructions from
13691
being accepted.
13692
 
13693
   Traditional MIPS assemblers do not support these directives.
13694
 
13695

13696
File: as.info,  Node: MIPS floating-point,  Next: MIPS Syntax,  Prev: MIPS ASE instruction generation overrides,  Up: MIPS-Dependent
13697
 
13698
9.26.10 Directives to override floating-point options
13699
-----------------------------------------------------
13700
 
13701
The directives `.set softfloat' and `.set hardfloat' provide finer
13702
control of disabling and enabling float-point instructions.  These
13703
directives always override the default (that hard-float instructions
13704
are accepted) or the command-line options (`-msoft-float' and
13705
`-mhard-float').
13706
 
13707
   The directives `.set singlefloat' and `.set doublefloat' provide
13708
finer control of disabling and enabling double-precision float-point
13709
operations.  These directives always override the default (that
13710
double-precision operations are accepted) or the command-line options
13711
(`-msingle-float' and `-mdouble-float').
13712
 
13713
   Traditional MIPS assemblers do not support these directives.
13714
 
13715

13716
File: as.info,  Node: MIPS Syntax,  Prev: MIPS floating-point,  Up: MIPS-Dependent
13717
 
13718
9.26.11 Syntactical considerations for the MIPS assembler
13719
---------------------------------------------------------
13720
 
13721
* Menu:
13722
 
13723
* MIPS-Chars::                Special Characters
13724
 
13725

13726
File: as.info,  Node: MIPS-Chars,  Up: MIPS Syntax
13727
 
13728
9.26.11.1 Special Characters
13729
............................
13730
 
13731
The presence of a `#' on a line indicates the start of a comment that
13732
extends to the end of the current line.
13733
 
13734
   If a `#' appears as the first character of a line, the whole line is
13735
treated as a comment, but in this case the line can also be a logical
13736
line number directive (*note Comments::) or a preprocessor control
13737
command (*note Preprocessing::).
13738
 
13739
   The `;' character can be used to separate statements on the same
13740
line.
13741
 
13742

13743
File: as.info,  Node: MMIX-Dependent,  Next: MSP430-Dependent,  Prev: MIPS-Dependent,  Up: Machine Dependencies
13744
 
13745
9.27 MMIX Dependent Features
13746
============================
13747
 
13748
* Menu:
13749
 
13750
* MMIX-Opts::              Command-line Options
13751
* MMIX-Expand::            Instruction expansion
13752
* MMIX-Syntax::            Syntax
13753
* MMIX-mmixal::            Differences to `mmixal' syntax and semantics
13754
 
13755

13756
File: as.info,  Node: MMIX-Opts,  Next: MMIX-Expand,  Up: MMIX-Dependent
13757
 
13758
9.27.1 Command-line Options
13759
---------------------------
13760
 
13761
The MMIX version of `as' has some machine-dependent options.
13762
 
13763
   When `--fixed-special-register-names' is specified, only the register
13764
names specified in *note MMIX-Regs:: are recognized in the instructions
13765
`PUT' and `GET'.
13766
 
13767
   You can use the `--globalize-symbols' to make all symbols global.
13768
This option is useful when splitting up a `mmixal' program into several
13769
files.
13770
 
13771
   The `--gnu-syntax' turns off most syntax compatibility with
13772
`mmixal'.  Its usability is currently doubtful.
13773
 
13774
   The `--relax' option is not fully supported, but will eventually make
13775
the object file prepared for linker relaxation.
13776
 
13777
   If you want to avoid inadvertently calling a predefined symbol and
13778
would rather get an error, for example when using `as' with a compiler
13779
or other machine-generated code, specify `--no-predefined-syms'.  This
13780
turns off built-in predefined definitions of all such symbols,
13781
including rounding-mode symbols, segment symbols, `BIT' symbols, and
13782
`TRAP' symbols used in `mmix' "system calls".  It also turns off
13783
predefined special-register names, except when used in `PUT' and `GET'
13784
instructions.
13785
 
13786
   By default, some instructions are expanded to fit the size of the
13787
operand or an external symbol (*note MMIX-Expand::).  By passing
13788
`--no-expand', no such expansion will be done, instead causing errors
13789
at link time if the operand does not fit.
13790
 
13791
   The `mmixal' documentation (*note mmixsite::) specifies that global
13792
registers allocated with the `GREG' directive (*note MMIX-greg::) and
13793
initialized to the same non-zero value, will refer to the same global
13794
register.  This isn't strictly enforceable in `as' since the final
13795
addresses aren't known until link-time, but it will do an effort unless
13796
the `--no-merge-gregs' option is specified.  (Register merging isn't
13797
yet implemented in `ld'.)
13798
 
13799
   `as' will warn every time it expands an instruction to fit an
13800
operand unless the option `-x' is specified.  It is believed that this
13801
behaviour is more useful than just mimicking `mmixal''s behaviour, in
13802
which instructions are only expanded if the `-x' option is specified,
13803
and assembly fails otherwise, when an instruction needs to be expanded.
13804
It needs to be kept in mind that `mmixal' is both an assembler and
13805
linker, while `as' will expand instructions that at link stage can be
13806
contracted.  (Though linker relaxation isn't yet implemented in `ld'.)
13807
The option `-x' also imples `--linker-allocated-gregs'.
13808
 
13809
   If instruction expansion is enabled, `as' can expand a `PUSHJ'
13810
instruction into a series of instructions.  The shortest expansion is
13811
to not expand it, but just mark the call as redirectable to a stub,
13812
which `ld' creates at link-time, but only if the original `PUSHJ'
13813
instruction is found not to reach the target.  The stub consists of the
13814
necessary instructions to form a jump to the target.  This happens if
13815
`as' can assert that the `PUSHJ' instruction can reach such a stub.
13816
The option `--no-pushj-stubs' disables this shorter expansion, and the
13817
longer series of instructions is then created at assembly-time.  The
13818
option `--no-stubs' is a synonym, intended for compatibility with
13819
future releases, where generation of stubs for other instructions may
13820
be implemented.
13821
 
13822
   Usually a two-operand-expression (*note GREG-base::) without a
13823
matching `GREG' directive is treated as an error by `as'.  When the
13824
option `--linker-allocated-gregs' is in effect, they are instead passed
13825
through to the linker, which will allocate as many global registers as
13826
is needed.
13827
 
13828

13829
File: as.info,  Node: MMIX-Expand,  Next: MMIX-Syntax,  Prev: MMIX-Opts,  Up: MMIX-Dependent
13830
 
13831
9.27.2 Instruction expansion
13832
----------------------------
13833
 
13834
When `as' encounters an instruction with an operand that is either not
13835
known or does not fit the operand size of the instruction, `as' (and
13836
`ld') will expand the instruction into a sequence of instructions
13837
semantically equivalent to the operand fitting the instruction.
13838
Expansion will take place for the following instructions:
13839
 
13840
`GETA'
13841
     Expands to a sequence of four instructions: `SETL', `INCML',
13842
     `INCMH' and `INCH'.  The operand must be a multiple of four.
13843
 
13844
Conditional branches
13845
     A branch instruction is turned into a branch with the complemented
13846
     condition and prediction bit over five instructions; four
13847
     instructions setting `$255' to the operand value, which like with
13848
     `GETA' must be a multiple of four, and a final `GO $255,$255,0'.
13849
 
13850
`PUSHJ'
13851
     Similar to expansion for conditional branches; four instructions
13852
     set `$255' to the operand value, followed by a `PUSHGO
13853
     $255,$255,0'.
13854
 
13855
`JMP'
13856
     Similar to conditional branches and `PUSHJ'.  The final instruction
13857
     is `GO $255,$255,0'.
13858
 
13859
   The linker `ld' is expected to shrink these expansions for code
13860
assembled with `--relax' (though not currently implemented).
13861
 
13862

13863
File: as.info,  Node: MMIX-Syntax,  Next: MMIX-mmixal,  Prev: MMIX-Expand,  Up: MMIX-Dependent
13864
 
13865
9.27.3 Syntax
13866
-------------
13867
 
13868
The assembly syntax is supposed to be upward compatible with that
13869
described in Sections 1.3 and 1.4 of `The Art of Computer Programming,
13870
Volume 1'.  Draft versions of those chapters as well as other MMIX
13871
information is located at
13872
`http://www-cs-faculty.stanford.edu/~knuth/mmix-news.html'.  Most code
13873
examples from the mmixal package located there should work unmodified
13874
when assembled and linked as single files, with a few noteworthy
13875
exceptions (*note MMIX-mmixal::).
13876
 
13877
   Before an instruction is emitted, the current location is aligned to
13878
the next four-byte boundary.  If a label is defined at the beginning of
13879
the line, its value will be the aligned value.
13880
 
13881
   In addition to the traditional hex-prefix `0x', a hexadecimal number
13882
can also be specified by the prefix character `#'.
13883
 
13884
   After all operands to an MMIX instruction or directive have been
13885
specified, the rest of the line is ignored, treated as a comment.
13886
 
13887
* Menu:
13888
 
13889
* MMIX-Chars::                  Special Characters
13890
* MMIX-Symbols::                Symbols
13891
* MMIX-Regs::                   Register Names
13892
* MMIX-Pseudos::                Assembler Directives
13893
 
13894

13895
File: as.info,  Node: MMIX-Chars,  Next: MMIX-Symbols,  Up: MMIX-Syntax
13896
 
13897
9.27.3.1 Special Characters
13898
...........................
13899
 
13900
The characters `*' and `#' are line comment characters; each start a
13901
comment at the beginning of a line, but only at the beginning of a
13902
line.  A `#' prefixes a hexadecimal number if found elsewhere on a
13903
line.  If a `#' appears at the start of a line the whole line is
13904
treated as a comment, but the line can also act as a logical line
13905
number directive (*note Comments::) or a preprocessor control command
13906
(*note Preprocessing::).
13907
 
13908
   Two other characters, `%' and `!', each start a comment anywhere on
13909
the line.  Thus you can't use the `modulus' and `not' operators in
13910
expressions normally associated with these two characters.
13911
 
13912
   A `;' is a line separator, treated as a new-line, so separate
13913
instructions can be specified on a single line.
13914
 
13915

13916
File: as.info,  Node: MMIX-Symbols,  Next: MMIX-Regs,  Prev: MMIX-Chars,  Up: MMIX-Syntax
13917
 
13918
9.27.3.2 Symbols
13919
................
13920
 
13921
The character `:' is permitted in identifiers.  There are two
13922
exceptions to it being treated as any other symbol character: if a
13923
symbol begins with `:', it means that the symbol is in the global
13924
namespace and that the current prefix should not be prepended to that
13925
symbol (*note MMIX-prefix::).  The `:' is then not considered part of
13926
the symbol.  For a symbol in the label position (first on a line), a `:'
13927
at the end of a symbol is silently stripped off.  A label is permitted,
13928
but not required, to be followed by a `:', as with many other assembly
13929
formats.
13930
 
13931
   The character `@' in an expression, is a synonym for `.', the
13932
current location.
13933
 
13934
   In addition to the common forward and backward local symbol formats
13935
(*note Symbol Names::), they can be specified with upper-case `B' and
13936
`F', as in `8B' and `9F'.  A local label defined for the current
13937
position is written with a `H' appended to the number:
13938
     3H LDB $0,$1,2
13939
   This and traditional local-label formats cannot be mixed: a label
13940
must be defined and referred to using the same format.
13941
 
13942
   There's a minor caveat: just as for the ordinary local symbols, the
13943
local symbols are translated into ordinary symbols using control
13944
characters are to hide the ordinal number of the symbol.
13945
Unfortunately, these symbols are not translated back in error messages.
13946
Thus you may see confusing error messages when local symbols are used.
13947
Control characters `\003' (control-C) and `\004' (control-D) are used
13948
for the MMIX-specific local-symbol syntax.
13949
 
13950
   The symbol `Main' is handled specially; it is always global.
13951
 
13952
   By defining the symbols `__.MMIX.start..text' and
13953
`__.MMIX.start..data', the address of respectively the `.text' and
13954
`.data' segments of the final program can be defined, though when
13955
linking more than one object file, the code or data in the object file
13956
containing the symbol is not guaranteed to be start at that position;
13957
just the final executable.  *Note MMIX-loc::.
13958
 
13959

13960
File: as.info,  Node: MMIX-Regs,  Next: MMIX-Pseudos,  Prev: MMIX-Symbols,  Up: MMIX-Syntax
13961
 
13962
9.27.3.3 Register names
13963
.......................
13964
 
13965
Local and global registers are specified as `$0' to `$255'.  The
13966
recognized special register names are `rJ', `rA', `rB', `rC', `rD',
13967
`rE', `rF', `rG', `rH', `rI', `rK', `rL', `rM', `rN', `rO', `rP', `rQ',
13968
`rR', `rS', `rT', `rU', `rV', `rW', `rX', `rY', `rZ', `rBB', `rTT',
13969
`rWW', `rXX', `rYY' and `rZZ'.  A leading `:' is optional for special
13970
register names.
13971
 
13972
   Local and global symbols can be equated to register names and used in
13973
place of ordinary registers.
13974
 
13975
   Similarly for special registers, local and global symbols can be
13976
used.  Also, symbols equated from numbers and constant expressions are
13977
allowed in place of a special register, except when either of the
13978
options `--no-predefined-syms' and `--fixed-special-register-names' are
13979
specified.  Then only the special register names above are allowed for
13980
the instructions having a special register operand; `GET' and `PUT'.
13981
 
13982

13983
File: as.info,  Node: MMIX-Pseudos,  Prev: MMIX-Regs,  Up: MMIX-Syntax
13984
 
13985
9.27.3.4 Assembler Directives
13986
.............................
13987
 
13988
`LOC'
13989
     The `LOC' directive sets the current location to the value of the
13990
     operand field, which may include changing sections.  If the
13991
     operand is a constant, the section is set to either `.data' if the
13992
     value is `0x2000000000000000' or larger, else it is set to `.text'.
13993
     Within a section, the current location may only be changed to
13994
     monotonically higher addresses.  A LOC expression must be a
13995
     previously defined symbol or a "pure" constant.
13996
 
13997
     An example, which sets the label PREV to the current location, and
13998
     updates the current location to eight bytes forward:
13999
          prev LOC @+8
14000
 
14001
     When a LOC has a constant as its operand, a symbol
14002
     `__.MMIX.start..text' or `__.MMIX.start..data' is defined
14003
     depending on the address as mentioned above.  Each such symbol is
14004
     interpreted as special by the linker, locating the section at that
14005
     address.  Note that if multiple files are linked, the first object
14006
     file with that section will be mapped to that address (not
14007
     necessarily the file with the LOC definition).
14008
 
14009
`LOCAL'
14010
     Example:
14011
           LOCAL external_symbol
14012
           LOCAL 42
14013
           .local asymbol
14014
 
14015
     This directive-operation generates a link-time assertion that the
14016
     operand does not correspond to a global register.  The operand is
14017
     an expression that at link-time resolves to a register symbol or a
14018
     number.  A number is treated as the register having that number.
14019
     There is one restriction on the use of this directive: the
14020
     pseudo-directive must be placed in a section with contents, code
14021
     or data.
14022
 
14023
`IS'
14024
     The `IS' directive:
14025
          asymbol IS an_expression
14026
     sets the symbol `asymbol' to `an_expression'.  A symbol may not be
14027
     set more than once using this directive.  Local labels may be set
14028
     using this directive, for example:
14029
          5H IS @+4
14030
 
14031
`GREG'
14032
     This directive reserves a global register, gives it an initial
14033
     value and optionally gives it a symbolic name.  Some examples:
14034
 
14035
          areg GREG
14036
          breg GREG data_value
14037
               GREG data_buffer
14038
               .greg creg, another_data_value
14039
 
14040
     The symbolic register name can be used in place of a (non-special)
14041
     register.  If a value isn't provided, it defaults to zero.  Unless
14042
     the option `--no-merge-gregs' is specified, non-zero registers
14043
     allocated with this directive may be eliminated by `as'; another
14044
     register with the same value used in its place.  Any of the
14045
     instructions `CSWAP', `GO', `LDA', `LDBU', `LDB', `LDHT', `LDOU',
14046
     `LDO', `LDSF', `LDTU', `LDT', `LDUNC', `LDVTS', `LDWU', `LDW',
14047
     `PREGO', `PRELD', `PREST', `PUSHGO', `STBU', `STB', `STCO', `STHT',
14048
     `STOU', `STSF', `STTU', `STT', `STUNC', `SYNCD', `SYNCID', can
14049
     have a value nearby an initial value in place of its second and
14050
     third operands.  Here, "nearby" is defined as within the range
14051
     0...255 from the initial value of such an allocated register.
14052
 
14053
          buffer1 BYTE 0,0,0,0,0
14054
          buffer2 BYTE 0,0,0,0,0
14055
           ...
14056
           GREG buffer1
14057
           LDOU $42,buffer2
14058
     In the example above, the `Y' field of the `LDOUI' instruction
14059
     (LDOU with a constant Z) will be replaced with the global register
14060
     allocated for `buffer1', and the `Z' field will have the value 5,
14061
     the offset from `buffer1' to `buffer2'.  The result is equivalent
14062
     to this code:
14063
          buffer1 BYTE 0,0,0,0,0
14064
          buffer2 BYTE 0,0,0,0,0
14065
           ...
14066
          tmpreg GREG buffer1
14067
           LDOU $42,tmpreg,(buffer2-buffer1)
14068
 
14069
     Global registers allocated with this directive are allocated in
14070
     order higher-to-lower within a file.  Other than that, the exact
14071
     order of register allocation and elimination is undefined.  For
14072
     example, the order is undefined when more than one file with such
14073
     directives are linked together.  With the options `-x' and
14074
     `--linker-allocated-gregs', `GREG' directives for two-operand
14075
     cases like the one mentioned above can be omitted.  Sufficient
14076
     global registers will then be allocated by the linker.
14077
 
14078
`BYTE'
14079
     The `BYTE' directive takes a series of operands separated by a
14080
     comma.  If an operand is a string (*note Strings::), each
14081
     character of that string is emitted as a byte.  Other operands
14082
     must be constant expressions without forward references, in the
14083
     range 0...255.  If you need operands having expressions with
14084
     forward references, use `.byte' (*note Byte::).  An operand can be
14085
     omitted, defaulting to a zero value.
14086
 
14087
`WYDE'
14088
`TETRA'
14089
`OCTA'
14090
     The directives `WYDE', `TETRA' and `OCTA' emit constants of two,
14091
     four and eight bytes size respectively.  Before anything else
14092
     happens for the directive, the current location is aligned to the
14093
     respective constant-size boundary.  If a label is defined at the
14094
     beginning of the line, its value will be that after the alignment.
14095
     A single operand can be omitted, defaulting to a zero value
14096
     emitted for the directive.  Operands can be expressed as strings
14097
     (*note Strings::), in which case each character in the string is
14098
     emitted as a separate constant of the size indicated by the
14099
     directive.
14100
 
14101
`PREFIX'
14102
     The `PREFIX' directive sets a symbol name prefix to be prepended to
14103
     all symbols (except local symbols, *note MMIX-Symbols::), that are
14104
     not prefixed with `:', until the next `PREFIX' directive.  Such
14105
     prefixes accumulate.  For example,
14106
           PREFIX a
14107
           PREFIX b
14108
          c IS 0
14109
     defines a symbol `abc' with the value 0.
14110
 
14111
`BSPEC'
14112
`ESPEC'
14113
     A pair of `BSPEC' and `ESPEC' directives delimit a section of
14114
     special contents (without specified semantics).  Example:
14115
           BSPEC 42
14116
           TETRA 1,2,3
14117
           ESPEC
14118
     The single operand to `BSPEC' must be number in the range 0...255.
14119
     The `BSPEC' number 80 is used by the GNU binutils implementation.
14120
 
14121

14122
File: as.info,  Node: MMIX-mmixal,  Prev: MMIX-Syntax,  Up: MMIX-Dependent
14123
 
14124
9.27.4 Differences to `mmixal'
14125
------------------------------
14126
 
14127
The binutils `as' and `ld' combination has a few differences in
14128
function compared to `mmixal' (*note mmixsite::).
14129
 
14130
   The replacement of a symbol with a GREG-allocated register (*note
14131
GREG-base::) is not handled the exactly same way in `as' as in
14132
`mmixal'.  This is apparent in the `mmixal' example file `inout.mms',
14133
where different registers with different offsets, eventually yielding
14134
the same address, are used in the first instruction.  This type of
14135
difference should however not affect the function of any program unless
14136
it has specific assumptions about the allocated register number.
14137
 
14138
   Line numbers (in the `mmo' object format) are currently not
14139
supported.
14140
 
14141
   Expression operator precedence is not that of mmixal: operator
14142
precedence is that of the C programming language.  It's recommended to
14143
use parentheses to explicitly specify wanted operator precedence
14144
whenever more than one type of operators are used.
14145
 
14146
   The serialize unary operator `&', the fractional division operator
14147
`//', the logical not operator `!' and the modulus operator `%' are not
14148
available.
14149
 
14150
   Symbols are not global by default, unless the option
14151
`--globalize-symbols' is passed.  Use the `.global' directive to
14152
globalize symbols (*note Global::).
14153
 
14154
   Operand syntax is a bit stricter with `as' than `mmixal'.  For
14155
example, you can't say `addu 1,2,3', instead you must write `addu
14156
$1,$2,3'.
14157
 
14158
   You can't LOC to a lower address than those already visited (i.e.,
14159
"backwards").
14160
 
14161
   A LOC directive must come before any emitted code.
14162
 
14163
   Predefined symbols are visible as file-local symbols after use.  (In
14164
the ELF file, that is--the linked mmo file has no notion of a file-local
14165
symbol.)
14166
 
14167
   Some mapping of constant expressions to sections in LOC expressions
14168
is attempted, but that functionality is easily confused and should be
14169
avoided unless compatibility with `mmixal' is required.  A LOC
14170
expression to `0x2000000000000000' or higher, maps to the `.data'
14171
section and lower addresses map to the `.text' section (*note
14172
MMIX-loc::).
14173
 
14174
   The code and data areas are each contiguous.  Sparse programs with
14175
far-away LOC directives will take up the same amount of space as a
14176
contiguous program with zeros filled in the gaps between the LOC
14177
directives.  If you need sparse programs, you might try and get the
14178
wanted effect with a linker script and splitting up the code parts into
14179
sections (*note Section::).  Assembly code for this, to be compatible
14180
with `mmixal', would look something like:
14181
      .if 0
14182
      LOC away_expression
14183
      .else
14184
      .section away,"ax"
14185
      .fi
14186
   `as' will not execute the LOC directive and `mmixal' ignores the
14187
lines with `.'.  This construct can be used generally to help
14188
compatibility.
14189
 
14190
   Symbols can't be defined twice-not even to the same value.
14191
 
14192
   Instruction mnemonics are recognized case-insensitive, though the
14193
`IS' and `GREG' pseudo-operations must be specified in upper-case
14194
characters.
14195
 
14196
   There's no unicode support.
14197
 
14198
   The following is a list of programs in `mmix.tar.gz', available at
14199
`http://www-cs-faculty.stanford.edu/~knuth/mmix-news.html', last
14200
checked with the version dated 2001-08-25 (md5sum
14201
c393470cfc86fac040487d22d2bf0172) that assemble with `mmixal' but do
14202
not assemble with `as':
14203
 
14204
`silly.mms'
14205
     LOC to a previous address.
14206
 
14207
`sim.mms'
14208
     Redefines symbol `Done'.
14209
 
14210
`test.mms'
14211
     Uses the serial operator `&'.
14212
 
14213

14214
File: as.info,  Node: MSP430-Dependent,  Next: NS32K-Dependent,  Prev: MMIX-Dependent,  Up: Machine Dependencies
14215
 
14216
9.28 MSP 430 Dependent Features
14217
===============================
14218
 
14219
* Menu:
14220
 
14221
* MSP430 Options::              Options
14222
* MSP430 Syntax::               Syntax
14223
* MSP430 Floating Point::       Floating Point
14224
* MSP430 Directives::           MSP 430 Machine Directives
14225
* MSP430 Opcodes::              Opcodes
14226
* MSP430 Profiling Capability:: Profiling Capability
14227
 
14228

14229
File: as.info,  Node: MSP430 Options,  Next: MSP430 Syntax,  Up: MSP430-Dependent
14230
 
14231
9.28.1 Options
14232
--------------
14233
 
14234
`-m'
14235
     select the mpu arch. Currently has no effect.
14236
 
14237
`-mP'
14238
     enables polymorph instructions handler.
14239
 
14240
`-mQ'
14241
     enables relaxation at assembly time. DANGEROUS!
14242
 
14243
 
14244

14245
File: as.info,  Node: MSP430 Syntax,  Next: MSP430 Floating Point,  Prev: MSP430 Options,  Up: MSP430-Dependent
14246
 
14247
9.28.2 Syntax
14248
-------------
14249
 
14250
* Menu:
14251
 
14252
* MSP430-Macros::               Macros
14253
* MSP430-Chars::                Special Characters
14254
* MSP430-Regs::                 Register Names
14255
* MSP430-Ext::                  Assembler Extensions
14256
 
14257

14258
File: as.info,  Node: MSP430-Macros,  Next: MSP430-Chars,  Up: MSP430 Syntax
14259
 
14260
9.28.2.1 Macros
14261
...............
14262
 
14263
The macro syntax used on the MSP 430 is like that described in the MSP
14264
430 Family Assembler Specification.  Normal `as' macros should still
14265
work.
14266
 
14267
   Additional built-in macros are:
14268
 
14269
`llo(exp)'
14270
     Extracts least significant word from 32-bit expression 'exp'.
14271
 
14272
`lhi(exp)'
14273
     Extracts most significant word from 32-bit expression 'exp'.
14274
 
14275
`hlo(exp)'
14276
     Extracts 3rd word from 64-bit expression 'exp'.
14277
 
14278
`hhi(exp)'
14279
     Extracts 4rd word from 64-bit expression 'exp'.
14280
 
14281
 
14282
   They normally being used as an immediate source operand.
14283
         mov    #llo(1), r10    ;       == mov  #1, r10
14284
         mov    #lhi(1), r10    ;       == mov  #0, r10
14285
 
14286

14287
File: as.info,  Node: MSP430-Chars,  Next: MSP430-Regs,  Prev: MSP430-Macros,  Up: MSP430 Syntax
14288
 
14289
9.28.2.2 Special Characters
14290
...........................
14291
 
14292
A semicolon (`;') appearing anywhere on a line starts a comment that
14293
extends to the end of that line.
14294
 
14295
   If a `#' appears as the first character of a line then the whole
14296
line is treated as a comment, but it can also be a logical line number
14297
directive (*note Comments::) or a preprocessor control command (*note
14298
Preprocessing::).
14299
 
14300
   Multiple statements can appear on the same line provided that they
14301
are separated by the `{' character.
14302
 
14303
   The character `$' in jump instructions indicates current location and
14304
implemented only for TI syntax compatibility.
14305
 
14306

14307
File: as.info,  Node: MSP430-Regs,  Next: MSP430-Ext,  Prev: MSP430-Chars,  Up: MSP430 Syntax
14308
 
14309
9.28.2.3 Register Names
14310
.......................
14311
 
14312
General-purpose registers are represented by predefined symbols of the
14313
form `rN' (for global registers), where N represents a number between
14314
`0' and `15'.  The leading letters may be in either upper or lower
14315
case; for example, `r13' and `R7' are both valid register names.
14316
 
14317
   Register names `PC', `SP' and `SR' cannot be used as register names
14318
and will be treated as variables. Use `r0', `r1', and `r2' instead.
14319
 
14320

14321
File: as.info,  Node: MSP430-Ext,  Prev: MSP430-Regs,  Up: MSP430 Syntax
14322
 
14323
9.28.2.4 Assembler Extensions
14324
.............................
14325
 
14326
`@rN'
14327
     As destination operand being treated as `0(rn)'
14328
 
14329
`0(rN)'
14330
     As source operand being treated as `@rn'
14331
 
14332
`jCOND +N'
14333
     Skips next N bytes followed by jump instruction and equivalent to
14334
     `jCOND $+N+2'
14335
 
14336
 
14337
   Also, there are some instructions, which cannot be found in other
14338
assemblers.  These are branch instructions, which has different opcodes
14339
upon jump distance.  They all got PC relative addressing mode.
14340
 
14341
`beq label'
14342
     A polymorph instruction which is `jeq label' in case if jump
14343
     distance within allowed range for cpu's jump instruction. If not,
14344
     this unrolls into a sequence of
14345
            jne $+6
14346
            br  label
14347
 
14348
`bne label'
14349
     A polymorph instruction which is `jne label' or `jeq +4; br label'
14350
 
14351
`blt label'
14352
     A polymorph instruction which is `jl label' or `jge +4; br label'
14353
 
14354
`bltn label'
14355
     A polymorph instruction which is `jn label' or `jn +2; jmp +4; br
14356
     label'
14357
 
14358
`bltu label'
14359
     A polymorph instruction which is `jlo label' or `jhs +2; br label'
14360
 
14361
`bge label'
14362
     A polymorph instruction which is `jge label' or `jl +4; br label'
14363
 
14364
`bgeu label'
14365
     A polymorph instruction which is `jhs label' or `jlo +4; br label'
14366
 
14367
`bgt label'
14368
     A polymorph instruction which is `jeq +2; jge label' or `jeq +6;
14369
     jl  +4; br label'
14370
 
14371
`bgtu label'
14372
     A polymorph instruction which is `jeq +2; jhs label' or `jeq +6;
14373
     jlo +4; br label'
14374
 
14375
`bleu label'
14376
     A polymorph instruction which is `jeq label; jlo label' or `jeq
14377
     +2; jhs +4; br label'
14378
 
14379
`ble label'
14380
     A polymorph instruction which is `jeq label; jl  label' or `jeq
14381
     +2; jge +4; br label'
14382
 
14383
`jump label'
14384
     A polymorph instruction which is `jmp label' or `br label'
14385
 
14386

14387
File: as.info,  Node: MSP430 Floating Point,  Next: MSP430 Directives,  Prev: MSP430 Syntax,  Up: MSP430-Dependent
14388
 
14389
9.28.3 Floating Point
14390
---------------------
14391
 
14392
The MSP 430 family uses IEEE 32-bit floating-point numbers.
14393
 
14394

14395
File: as.info,  Node: MSP430 Directives,  Next: MSP430 Opcodes,  Prev: MSP430 Floating Point,  Up: MSP430-Dependent
14396
 
14397
9.28.4 MSP 430 Machine Directives
14398
---------------------------------
14399
 
14400
`.file'
14401
     This directive is ignored; it is accepted for compatibility with
14402
     other MSP 430 assemblers.
14403
 
14404
          _Warning:_ in other versions of the GNU assembler, `.file' is
14405
          used for the directive called `.app-file' in the MSP 430
14406
          support.
14407
 
14408
`.line'
14409
     This directive is ignored; it is accepted for compatibility with
14410
     other MSP 430 assemblers.
14411
 
14412
`.arch'
14413
     Currently this directive is ignored; it is accepted for
14414
     compatibility with other MSP 430 assemblers.
14415
 
14416
`.profiler'
14417
     This directive instructs assembler to add new profile entry to the
14418
     object file.
14419
 
14420
 
14421

14422
File: as.info,  Node: MSP430 Opcodes,  Next: MSP430 Profiling Capability,  Prev: MSP430 Directives,  Up: MSP430-Dependent
14423
 
14424
9.28.5 Opcodes
14425
--------------
14426
 
14427
`as' implements all the standard MSP 430 opcodes.  No additional
14428
pseudo-instructions are needed on this family.
14429
 
14430
   For information on the 430 machine instruction set, see `MSP430
14431
User's Manual, document slau049d', Texas Instrument, Inc.
14432
 
14433

14434
File: as.info,  Node: MSP430 Profiling Capability,  Prev: MSP430 Opcodes,  Up: MSP430-Dependent
14435
 
14436
9.28.6 Profiling Capability
14437
---------------------------
14438
 
14439
It is a performance hit to use gcc's profiling approach for this tiny
14440
target.  Even more - jtag hardware facility does not perform any
14441
profiling functions.  However we've got gdb's built-in simulator where
14442
we can do anything.
14443
 
14444
   We define new section `.profiler' which holds all profiling
14445
information.  We define new pseudo operation `.profiler' which will
14446
instruct assembler to add new profile entry to the object file. Profile
14447
should take place at the present address.
14448
 
14449
   Pseudo operation format:
14450
 
14451
   `.profiler flags,function_to_profile [, cycle_corrector, extra]'
14452
 
14453
   where:
14454
 
14455
          `flags' is a combination of the following characters:
14456
 
14457
    `s'
14458
          function entry
14459
 
14460
    `x'
14461
          function exit
14462
 
14463
    `i'
14464
          function is in init section
14465
 
14466
    `f'
14467
          function is in fini section
14468
 
14469
    `l'
14470
          library call
14471
 
14472
    `c'
14473
          libc standard call
14474
 
14475
    `d'
14476
          stack value demand
14477
 
14478
    `I'
14479
          interrupt service routine
14480
 
14481
    `P'
14482
          prologue start
14483
 
14484
    `p'
14485
          prologue end
14486
 
14487
    `E'
14488
          epilogue start
14489
 
14490
    `e'
14491
          epilogue end
14492
 
14493
    `j'
14494
          long jump / sjlj unwind
14495
 
14496
    `a'
14497
          an arbitrary code fragment
14498
 
14499
    `t'
14500
          extra parameter saved (a constant value like frame size)
14501
 
14502
`function_to_profile'
14503
     a function address
14504
 
14505
`cycle_corrector'
14506
     a value which should be added to the cycle counter, zero if
14507
     omitted.
14508
 
14509
`extra'
14510
     any extra parameter, zero if omitted.
14511
 
14512
 
14513
   For example:
14514
     .global fxx
14515
     .type fxx,@function
14516
     fxx:
14517
     .LFrameOffset_fxx=0x08
14518
     .profiler "scdP", fxx     ; function entry.
14519
                          ; we also demand stack value to be saved
14520
       push r11
14521
       push r10
14522
       push r9
14523
       push r8
14524
     .profiler "cdpt",fxx,0, .LFrameOffset_fxx  ; check stack value at this point
14525
                                          ; (this is a prologue end)
14526
                                          ; note, that spare var filled with
14527
                                          ; the farme size
14528
       mov r15,r8
14529
     ...
14530
     .profiler cdE,fxx         ; check stack
14531
       pop r8
14532
       pop r9
14533
       pop r10
14534
       pop r11
14535
     .profiler xcde,fxx,3      ; exit adds 3 to the cycle counter
14536
       ret                     ; cause 'ret' insn takes 3 cycles
14537
 
14538

14539
File: as.info,  Node: NS32K-Dependent,  Next: SH-Dependent,  Prev: MSP430-Dependent,  Up: Machine Dependencies
14540
 
14541
9.29 NS32K Dependent Features
14542
=============================
14543
 
14544
* Menu:
14545
 
14546
* NS32K Syntax::               Syntax
14547
 
14548

14549
File: as.info,  Node: NS32K Syntax,  Up: NS32K-Dependent
14550
 
14551
9.29.1 Syntax
14552
-------------
14553
 
14554
* Menu:
14555
 
14556
* NS32K-Chars::                Special Characters
14557
 
14558

14559
File: as.info,  Node: NS32K-Chars,  Up: NS32K Syntax
14560
 
14561
9.29.1.1 Special Characters
14562
...........................
14563
 
14564
The presence of a `#' appearing anywhere on a line indicates the start
14565
of a comment that extends to the end of that line.
14566
 
14567
   If a `#' appears as the first character of a line then the whole
14568
line is treated as a comment, but in this case the line can also be a
14569
logical line number directive (*note Comments::) or a preprocessor
14570
control command (*note Preprocessing::).
14571
 
14572
   If Sequent compatibility has been configured into the assembler then
14573
the `|' character appearing as the first character on a line will also
14574
indicate the start of a line comment.
14575
 
14576
   The `;' character can be used to separate statements on the same
14577
line.
14578
 
14579

14580
File: as.info,  Node: PDP-11-Dependent,  Next: PJ-Dependent,  Prev: SH64-Dependent,  Up: Machine Dependencies
14581
 
14582
9.30 PDP-11 Dependent Features
14583
==============================
14584
 
14585
* Menu:
14586
 
14587
* PDP-11-Options::              Options
14588
* PDP-11-Pseudos::              Assembler Directives
14589
* PDP-11-Syntax::               DEC Syntax versus BSD Syntax
14590
* PDP-11-Mnemonics::            Instruction Naming
14591
* PDP-11-Synthetic::            Synthetic Instructions
14592
 
14593

14594
File: as.info,  Node: PDP-11-Options,  Next: PDP-11-Pseudos,  Up: PDP-11-Dependent
14595
 
14596
9.30.1 Options
14597
--------------
14598
 
14599
The PDP-11 version of `as' has a rich set of machine dependent options.
14600
 
14601
9.30.1.1 Code Generation Options
14602
................................
14603
 
14604
`-mpic | -mno-pic'
14605
     Generate position-independent (or position-dependent) code.
14606
 
14607
     The default is to generate position-independent code.
14608
 
14609
9.30.1.2 Instruction Set Extension Options
14610
..........................................
14611
 
14612
These options enables or disables the use of extensions over the base
14613
line instruction set as introduced by the first PDP-11 CPU: the KA11.
14614
Most options come in two variants: a `-m'EXTENSION that enables
14615
EXTENSION, and a `-mno-'EXTENSION that disables EXTENSION.
14616
 
14617
   The default is to enable all extensions.
14618
 
14619
`-mall | -mall-extensions'
14620
     Enable all instruction set extensions.
14621
 
14622
`-mno-extensions'
14623
     Disable all instruction set extensions.
14624
 
14625
`-mcis | -mno-cis'
14626
     Enable (or disable) the use of the commercial instruction set,
14627
     which consists of these instructions: `ADDNI', `ADDN', `ADDPI',
14628
     `ADDP', `ASHNI', `ASHN', `ASHPI', `ASHP', `CMPCI', `CMPC',
14629
     `CMPNI', `CMPN', `CMPPI', `CMPP', `CVTLNI', `CVTLN', `CVTLPI',
14630
     `CVTLP', `CVTNLI', `CVTNL', `CVTNPI', `CVTNP', `CVTPLI', `CVTPL',
14631
     `CVTPNI', `CVTPN', `DIVPI', `DIVP', `L2DR', `L3DR', `LOCCI',
14632
     `LOCC', `MATCI', `MATC', `MOVCI', `MOVC', `MOVRCI', `MOVRC',
14633
     `MOVTCI', `MOVTC', `MULPI', `MULP', `SCANCI', `SCANC', `SKPCI',
14634
     `SKPC', `SPANCI', `SPANC', `SUBNI', `SUBN', `SUBPI', and `SUBP'.
14635
 
14636
`-mcsm | -mno-csm'
14637
     Enable (or disable) the use of the `CSM' instruction.
14638
 
14639
`-meis | -mno-eis'
14640
     Enable (or disable) the use of the extended instruction set, which
14641
     consists of these instructions: `ASHC', `ASH', `DIV', `MARK',
14642
     `MUL', `RTT', `SOB' `SXT', and `XOR'.
14643
 
14644
`-mfis | -mkev11'
14645
`-mno-fis | -mno-kev11'
14646
     Enable (or disable) the use of the KEV11 floating-point
14647
     instructions: `FADD', `FDIV', `FMUL', and `FSUB'.
14648
 
14649
`-mfpp | -mfpu | -mfp-11'
14650
`-mno-fpp | -mno-fpu | -mno-fp-11'
14651
     Enable (or disable) the use of FP-11 floating-point instructions:
14652
     `ABSF', `ADDF', `CFCC', `CLRF', `CMPF', `DIVF', `LDCFF', `LDCIF',
14653
     `LDEXP', `LDF', `LDFPS', `MODF', `MULF', `NEGF', `SETD', `SETF',
14654
     `SETI', `SETL', `STCFF', `STCFI', `STEXP', `STF', `STFPS', `STST',
14655
     `SUBF', and `TSTF'.
14656
 
14657
`-mlimited-eis | -mno-limited-eis'
14658
     Enable (or disable) the use of the limited extended instruction
14659
     set: `MARK', `RTT', `SOB', `SXT', and `XOR'.
14660
 
14661
     The -mno-limited-eis options also implies -mno-eis.
14662
 
14663
`-mmfpt | -mno-mfpt'
14664
     Enable (or disable) the use of the `MFPT' instruction.
14665
 
14666
`-mmultiproc | -mno-multiproc'
14667
     Enable (or disable) the use of multiprocessor instructions:
14668
     `TSTSET' and `WRTLCK'.
14669
 
14670
`-mmxps | -mno-mxps'
14671
     Enable (or disable) the use of the `MFPS' and `MTPS' instructions.
14672
 
14673
`-mspl | -mno-spl'
14674
     Enable (or disable) the use of the `SPL' instruction.
14675
 
14676
     Enable (or disable) the use of the microcode instructions: `LDUB',
14677
     `MED', and `XFC'.
14678
 
14679
9.30.1.3 CPU Model Options
14680
..........................
14681
 
14682
These options enable the instruction set extensions supported by a
14683
particular CPU, and disables all other extensions.
14684
 
14685
`-mka11'
14686
     KA11 CPU.  Base line instruction set only.
14687
 
14688
`-mkb11'
14689
     KB11 CPU.  Enable extended instruction set and `SPL'.
14690
 
14691
`-mkd11a'
14692
     KD11-A CPU.  Enable limited extended instruction set.
14693
 
14694
`-mkd11b'
14695
     KD11-B CPU.  Base line instruction set only.
14696
 
14697
`-mkd11d'
14698
     KD11-D CPU.  Base line instruction set only.
14699
 
14700
`-mkd11e'
14701
     KD11-E CPU.  Enable extended instruction set, `MFPS', and `MTPS'.
14702
 
14703
`-mkd11f | -mkd11h | -mkd11q'
14704
     KD11-F, KD11-H, or KD11-Q CPU.  Enable limited extended
14705
     instruction set, `MFPS', and `MTPS'.
14706
 
14707
`-mkd11k'
14708
     KD11-K CPU.  Enable extended instruction set, `LDUB', `MED',
14709
     `MFPS', `MFPT', `MTPS', and `XFC'.
14710
 
14711
`-mkd11z'
14712
     KD11-Z CPU.  Enable extended instruction set, `CSM', `MFPS',
14713
     `MFPT', `MTPS', and `SPL'.
14714
 
14715
`-mf11'
14716
     F11 CPU.  Enable extended instruction set, `MFPS', `MFPT', and
14717
     `MTPS'.
14718
 
14719
`-mj11'
14720
     J11 CPU.  Enable extended instruction set, `CSM', `MFPS', `MFPT',
14721
     `MTPS', `SPL', `TSTSET', and `WRTLCK'.
14722
 
14723
`-mt11'
14724
     T11 CPU.  Enable limited extended instruction set, `MFPS', and
14725
     `MTPS'.
14726
 
14727
9.30.1.4 Machine Model Options
14728
..............................
14729
 
14730
These options enable the instruction set extensions supported by a
14731
particular machine model, and disables all other extensions.
14732
 
14733
`-m11/03'
14734
     Same as `-mkd11f'.
14735
 
14736
`-m11/04'
14737
     Same as `-mkd11d'.
14738
 
14739
`-m11/05 | -m11/10'
14740
     Same as `-mkd11b'.
14741
 
14742
`-m11/15 | -m11/20'
14743
     Same as `-mka11'.
14744
 
14745
`-m11/21'
14746
     Same as `-mt11'.
14747
 
14748
`-m11/23 | -m11/24'
14749
     Same as `-mf11'.
14750
 
14751
`-m11/34'
14752
     Same as `-mkd11e'.
14753
 
14754
`-m11/34a'
14755
     Ame as `-mkd11e' `-mfpp'.
14756
 
14757
`-m11/35 | -m11/40'
14758
     Same as `-mkd11a'.
14759
 
14760
`-m11/44'
14761
     Same as `-mkd11z'.
14762
 
14763
`-m11/45 | -m11/50 | -m11/55 | -m11/70'
14764
     Same as `-mkb11'.
14765
 
14766
`-m11/53 | -m11/73 | -m11/83 | -m11/84 | -m11/93 | -m11/94'
14767
     Same as `-mj11'.
14768
 
14769
`-m11/60'
14770
     Same as `-mkd11k'.
14771
 
14772

14773
File: as.info,  Node: PDP-11-Pseudos,  Next: PDP-11-Syntax,  Prev: PDP-11-Options,  Up: PDP-11-Dependent
14774
 
14775
9.30.2 Assembler Directives
14776
---------------------------
14777
 
14778
The PDP-11 version of `as' has a few machine dependent assembler
14779
directives.
14780
 
14781
`.bss'
14782
     Switch to the `bss' section.
14783
 
14784
`.even'
14785
     Align the location counter to an even number.
14786
 
14787

14788
File: as.info,  Node: PDP-11-Syntax,  Next: PDP-11-Mnemonics,  Prev: PDP-11-Pseudos,  Up: PDP-11-Dependent
14789
 
14790
9.30.3 PDP-11 Assembly Language Syntax
14791
--------------------------------------
14792
 
14793
`as' supports both DEC syntax and BSD syntax.  The only difference is
14794
that in DEC syntax, a `#' character is used to denote an immediate
14795
constants, while in BSD syntax the character for this purpose is `$'.
14796
 
14797
   general-purpose registers are named `r0' through `r7'.  Mnemonic
14798
alternatives for `r6' and `r7' are `sp' and `pc', respectively.
14799
 
14800
   Floating-point registers are named `ac0' through `ac3', or
14801
alternatively `fr0' through `fr3'.
14802
 
14803
   Comments are started with a `#' or a `/' character, and extend to
14804
the end of the line.  (FIXME: clash with immediates?)
14805
 
14806
   Multiple statements on the same line can be separated by the `;'
14807
character.
14808
 
14809

14810
File: as.info,  Node: PDP-11-Mnemonics,  Next: PDP-11-Synthetic,  Prev: PDP-11-Syntax,  Up: PDP-11-Dependent
14811
 
14812
9.30.4 Instruction Naming
14813
-------------------------
14814
 
14815
Some instructions have alternative names.
14816
 
14817
`BCC'
14818
     `BHIS'
14819
 
14820
`BCS'
14821
     `BLO'
14822
 
14823
`L2DR'
14824
     `L2D'
14825
 
14826
`L3DR'
14827
     `L3D'
14828
 
14829
`SYS'
14830
     `TRAP'
14831
 
14832

14833
File: as.info,  Node: PDP-11-Synthetic,  Prev: PDP-11-Mnemonics,  Up: PDP-11-Dependent
14834
 
14835
9.30.5 Synthetic Instructions
14836
-----------------------------
14837
 
14838
The `JBR' and `J'CC synthetic instructions are not supported yet.
14839
 
14840

14841
File: as.info,  Node: PJ-Dependent,  Next: PPC-Dependent,  Prev: PDP-11-Dependent,  Up: Machine Dependencies
14842
 
14843
9.31 picoJava Dependent Features
14844
================================
14845
 
14846
* Menu:
14847
 
14848
* PJ Options::              Options
14849
* PJ Syntax::               PJ Syntax
14850
 
14851

14852
File: as.info,  Node: PJ Options,  Next: PJ Syntax,  Up: PJ-Dependent
14853
 
14854
9.31.1 Options
14855
--------------
14856
 
14857
`as' has two additional command-line options for the picoJava
14858
architecture.
14859
`-ml'
14860
     This option selects little endian data output.
14861
 
14862
`-mb'
14863
     This option selects big endian data output.
14864
 
14865

14866
File: as.info,  Node: PJ Syntax,  Prev: PJ Options,  Up: PJ-Dependent
14867
 
14868
9.31.2 PJ Syntax
14869
----------------
14870
 
14871
* Menu:
14872
 
14873
* PJ-Chars::                Special Characters
14874
 
14875

14876
File: as.info,  Node: PJ-Chars,  Up: PJ Syntax
14877
 
14878
9.31.2.1 Special Characters
14879
...........................
14880
 
14881
The presence of a `!' or `/' on a line indicates the start of a comment
14882
that extends to the end of the current line.
14883
 
14884
   If a `#' appears as the first character of a line then the whole
14885
line is treated as a comment, but in this case the line could also be a
14886
logical line number directive (*note Comments::) or a preprocessor
14887
control command (*note Preprocessing::).
14888
 
14889
   The `;' character can be used to separate statements on the same
14890
line.
14891
 
14892

14893
File: as.info,  Node: PPC-Dependent,  Next: RL78-Dependent,  Prev: PJ-Dependent,  Up: Machine Dependencies
14894
 
14895
9.32 PowerPC Dependent Features
14896
===============================
14897
 
14898
* Menu:
14899
 
14900
* PowerPC-Opts::                Options
14901
* PowerPC-Pseudo::              PowerPC Assembler Directives
14902
* PowerPC-Syntax::              PowerPC Syntax
14903
 
14904

14905
File: as.info,  Node: PowerPC-Opts,  Next: PowerPC-Pseudo,  Up: PPC-Dependent
14906
 
14907
9.32.1 Options
14908
--------------
14909
 
14910
The PowerPC chip family includes several successive levels, using the
14911
same core instruction set, but including a few additional instructions
14912
at each level.  There are exceptions to this however.  For details on
14913
what instructions each variant supports, please see the chip's
14914
architecture reference manual.
14915
 
14916
   The following table lists all available PowerPC options.
14917
 
14918
`-a32'
14919
     Generate ELF32 or XCOFF32.
14920
 
14921
`-a64'
14922
     Generate ELF64 or XCOFF64.
14923
 
14924
`-K PIC'
14925
     Set EF_PPC_RELOCATABLE_LIB in ELF flags.
14926
 
14927
`-mpwrx | -mpwr2'
14928
     Generate code for POWER/2 (RIOS2).
14929
 
14930
`-mpwr'
14931
     Generate code for POWER (RIOS1)
14932
 
14933
`-m601'
14934
     Generate code for PowerPC 601.
14935
 
14936
`-mppc, -mppc32, -m603, -m604'
14937
     Generate code for PowerPC 603/604.
14938
 
14939
`-m403, -m405'
14940
     Generate code for PowerPC 403/405.
14941
 
14942
`-m440'
14943
     Generate code for PowerPC 440.  BookE and some 405 instructions.
14944
 
14945
`-m464'
14946
     Generate code for PowerPC 464.
14947
 
14948
`-m476'
14949
     Generate code for PowerPC 476.
14950
 
14951
`-m7400, -m7410, -m7450, -m7455'
14952
     Generate code for PowerPC 7400/7410/7450/7455.
14953
 
14954
`-m750cl'
14955
     Generate code for PowerPC 750CL.
14956
 
14957
`-mppc64, -m620'
14958
     Generate code for PowerPC 620/625/630.
14959
 
14960
`-me500, -me500x2'
14961
     Generate code for Motorola e500 core complex.
14962
 
14963
`-me500mc'
14964
     Generate code for Freescale e500mc core complex.
14965
 
14966
`-me500mc64'
14967
     Generate code for Freescale e500mc64 core complex.
14968
 
14969
`-me5500'
14970
     Generate code for Freescale e5500 core complex.
14971
 
14972
`-me6500'
14973
     Generate code for Freescale e6500 core complex.
14974
 
14975
`-mspe'
14976
     Generate code for Motorola SPE instructions.
14977
 
14978
`-mtitan'
14979
     Generate code for AppliedMicro Titan core complex.
14980
 
14981
`-mppc64bridge'
14982
     Generate code for PowerPC 64, including bridge insns.
14983
 
14984
`-mbooke'
14985
     Generate code for 32-bit BookE.
14986
 
14987
`-ma2'
14988
     Generate code for A2 architecture.
14989
 
14990
`-me300'
14991
     Generate code for PowerPC e300 family.
14992
 
14993
`-maltivec'
14994
     Generate code for processors with AltiVec instructions.
14995
 
14996
`-mvle'
14997
     Generate code for Freescale PowerPC VLE instructions.
14998
 
14999
`-mvsx'
15000
     Generate code for processors with Vector-Scalar (VSX) instructions.
15001
 
15002
`-mpower4, -mpwr4'
15003
     Generate code for Power4 architecture.
15004
 
15005
`-mpower5, -mpwr5, -mpwr5x'
15006
     Generate code for Power5 architecture.
15007
 
15008
`-mpower6, -mpwr6'
15009
     Generate code for Power6 architecture.
15010
 
15011
`-mpower7, -mpwr7'
15012
     Generate code for Power7 architecture.
15013
 
15014
`-mcell'
15015
     Generate code for Cell Broadband Engine architecture.
15016
 
15017
`-mcom'
15018
     Generate code Power/PowerPC common instructions.
15019
 
15020
`-many'
15021
     Generate code for any architecture (PWR/PWRX/PPC).
15022
 
15023
`-mregnames'
15024
     Allow symbolic names for registers.
15025
 
15026
`-mno-regnames'
15027
     Do not allow symbolic names for registers.
15028
 
15029
`-mrelocatable'
15030
     Support for GCC's -mrelocatable option.
15031
 
15032
`-mrelocatable-lib'
15033
     Support for GCC's -mrelocatable-lib option.
15034
 
15035
`-memb'
15036
     Set PPC_EMB bit in ELF flags.
15037
 
15038
`-mlittle, -mlittle-endian, -le'
15039
     Generate code for a little endian machine.
15040
 
15041
`-mbig, -mbig-endian, -be'
15042
     Generate code for a big endian machine.
15043
 
15044
`-msolaris'
15045
     Generate code for Solaris.
15046
 
15047
`-mno-solaris'
15048
     Do not generate code for Solaris.
15049
 
15050
`-nops=COUNT'
15051
     If an alignment directive inserts more than COUNT nops, put a
15052
     branch at the beginning to skip execution of the nops.
15053
 
15054

15055
File: as.info,  Node: PowerPC-Pseudo,  Next: PowerPC-Syntax,  Prev: PowerPC-Opts,  Up: PPC-Dependent
15056
 
15057
9.32.2 PowerPC Assembler Directives
15058
-----------------------------------
15059
 
15060
A number of assembler directives are available for PowerPC.  The
15061
following table is far from complete.
15062
 
15063
`.machine "string"'
15064
     This directive allows you to change the machine for which code is
15065
     generated.  `"string"' may be any of the -m cpu selection options
15066
     (without the -m) enclosed in double quotes, `"push"', or `"pop"'.
15067
     `.machine "push"' saves the currently selected cpu, which may be
15068
     restored with `.machine "pop"'.
15069
 
15070

15071
File: as.info,  Node: PowerPC-Syntax,  Prev: PowerPC-Pseudo,  Up: PPC-Dependent
15072
 
15073
9.32.3 PowerPC Syntax
15074
---------------------
15075
 
15076
* Menu:
15077
 
15078
* PowerPC-Chars::                Special Characters
15079
 
15080

15081
File: as.info,  Node: PowerPC-Chars,  Up: PowerPC-Syntax
15082
 
15083
9.32.3.1 Special Characters
15084
...........................
15085
 
15086
The presence of a `#' on a line indicates the start of a comment that
15087
extends to the end of the current line.
15088
 
15089
   If a `#' appears as the first character of a line then the whole
15090
line is treated as a comment, but in this case the line could also be a
15091
logical line number directive (*note Comments::) or a preprocessor
15092
control command (*note Preprocessing::).
15093
 
15094
   If the assembler has been configured for the ppc-*-solaris* target
15095
then the `!' character also acts as a line comment character.  This can
15096
be disabled via the `-mno-solaris' command line option.
15097
 
15098
   The `;' character can be used to separate statements on the same
15099
line.
15100
 
15101

15102
File: as.info,  Node: RL78-Dependent,  Next: RX-Dependent,  Prev: PPC-Dependent,  Up: Machine Dependencies
15103
 
15104
9.33 RL78 Dependent Features
15105
============================
15106
 
15107
* Menu:
15108
 
15109
* RL78-Opts::                   RL78 Assembler Command Line Options
15110
* RL78-Modifiers::              Symbolic Operand Modifiers
15111
* RL78-Directives::             Assembler Directives
15112
* RL78-Syntax::                 Syntax
15113
 
15114

15115
File: as.info,  Node: RL78-Opts,  Next: RL78-Modifiers,  Up: RL78-Dependent
15116
 
15117
9.33.1 RL78 Options
15118
-------------------
15119
 
15120
The Renesas RL78 port of `as' has no target-specific options.
15121
 
15122

15123
File: as.info,  Node: RL78-Modifiers,  Next: RL78-Directives,  Prev: RL78-Opts,  Up: RL78-Dependent
15124
 
15125
9.33.2 Symbolic Operand Modifiers
15126
---------------------------------
15127
 
15128
The RL78 has three modifiers that adjust the relocations used by the
15129
linker:
15130
 
15131
`%lo16()'
15132
     When loading a 20-bit (or wider) address into registers, this
15133
     modifier selects the 16 least significant bits.
15134
 
15135
            movw ax,#%lo16(_sym)
15136
 
15137
`%hi16()'
15138
     When loading a 20-bit (or wider) address into registers, this
15139
     modifier selects the 16 most significant bits.
15140
 
15141
            movw ax,#%hi16(_sym)
15142
 
15143
`%hi8()'
15144
     When loading a 20-bit (or wider) address into registers, this
15145
     modifier selects the 8 bits that would go into CS or ES (i.e. bits
15146
     23..16).
15147
 
15148
            mov es, #%hi8(_sym)
15149
 
15150
 
15151

15152
File: as.info,  Node: RL78-Directives,  Next: RL78-Syntax,  Prev: RL78-Modifiers,  Up: RL78-Dependent
15153
 
15154
9.33.3 Assembler Directives
15155
---------------------------
15156
 
15157
In addition to the common directives, the RL78 adds these:
15158
 
15159
`.double'
15160
     Output a constant in "double" format, which is a 32-bit floating
15161
     point value on RL78.
15162
 
15163
`.bss'
15164
     Select the BSS section.
15165
 
15166
`.3byte'
15167
     Output a constant value in a three byte format.
15168
 
15169
`.int'
15170
`.word'
15171
     Output a constant value in a four byte format.
15172
 
15173
 
15174

15175
File: as.info,  Node: RL78-Syntax,  Prev: RL78-Directives,  Up: RL78-Dependent
15176
 
15177
9.33.4 Syntax for the RL78
15178
--------------------------
15179
 
15180
* Menu:
15181
 
15182
* RL78-Chars::                Special Characters
15183
 
15184

15185
File: as.info,  Node: RL78-Chars,  Up: RL78-Syntax
15186
 
15187
9.33.4.1 Special Characters
15188
...........................
15189
 
15190
The presence of a `;' appearing anywhere on a line indicates the start
15191
of a comment that extends to the end of that line.
15192
 
15193
   If a `#' appears as the first character of a line then the whole
15194
line is treated as a comment, but in this case the line can also be a
15195
logical line number directive (*note Comments::) or a preprocessor
15196
control command (*note Preprocessing::).
15197
 
15198
   The `|' character can be used to separate statements on the same
15199
line.
15200
 
15201

15202
File: as.info,  Node: RX-Dependent,  Next: S/390-Dependent,  Prev: RL78-Dependent,  Up: Machine Dependencies
15203
 
15204
9.34 RX Dependent Features
15205
==========================
15206
 
15207
* Menu:
15208
 
15209
* RX-Opts::                   RX Assembler Command Line Options
15210
* RX-Modifiers::              Symbolic Operand Modifiers
15211
* RX-Directives::             Assembler Directives
15212
* RX-Float::                  Floating Point
15213
* RX-Syntax::                 Syntax
15214
 
15215

15216
File: as.info,  Node: RX-Opts,  Next: RX-Modifiers,  Up: RX-Dependent
15217
 
15218
9.34.1 RX Options
15219
-----------------
15220
 
15221
The Renesas RX port of `as' has a few target specfic command line
15222
options:
15223
 
15224
`-m32bit-doubles'
15225
     This option controls the ABI and indicates to use a 32-bit float
15226
     ABI.  It has no effect on the assembled instructions, but it does
15227
     influence the behaviour of the `.double' pseudo-op.  This is the
15228
     default.
15229
 
15230
`-m64bit-doubles'
15231
     This option controls the ABI and indicates to use a 64-bit float
15232
     ABI.  It has no effect on the assembled instructions, but it does
15233
     influence the behaviour of the `.double' pseudo-op.
15234
 
15235
`-mbig-endian'
15236
     This option controls the ABI and indicates to use a big-endian data
15237
     ABI.  It has no effect on the assembled instructions, but it does
15238
     influence the behaviour of the `.short', `.hword', `.int',
15239
     `.word', `.long', `.quad' and `.octa' pseudo-ops.
15240
 
15241
`-mlittle-endian'
15242
     This option controls the ABI and indicates to use a little-endian
15243
     data ABI.  It has no effect on the assembled instructions, but it
15244
     does influence the behaviour of the `.short', `.hword', `.int',
15245
     `.word', `.long', `.quad' and `.octa' pseudo-ops.  This is the
15246
     default.
15247
 
15248
`-muse-conventional-section-names'
15249
     This option controls the default names given to the code (.text),
15250
     initialised data (.data) and uninitialised data sections (.bss).
15251
 
15252
`-muse-renesas-section-names'
15253
     This option controls the default names given to the code (.P),
15254
     initialised data (.D_1) and uninitialised data sections (.B_1).
15255
     This is the default.
15256
 
15257
`-msmall-data-limit'
15258
     This option tells the assembler that the small data limit feature
15259
     of the RX port of GCC is being used.  This results in the assembler
15260
     generating an undefined reference to a symbol called `__gp' for
15261
     use by the relocations that are needed to support the small data
15262
     limit feature.   This option is not enabled by default as it would
15263
     otherwise pollute the symbol table.
15264
 
15265
`-mpid'
15266
     This option tells the assembler that the position independent data
15267
     of the RX port of GCC is being used.  This results in the assembler
15268
     generating an undefined reference to a symbol called `__pid_base',
15269
     and also setting the RX_PID flag bit in the e_flags field of the
15270
     ELF header of the object file.
15271
 
15272
`-mint-register=NUM'
15273
     This option tells the assembler how many registers have been
15274
     reserved for use by interrupt handlers.  This is needed in order
15275
     to compute the correct values for the `%gpreg' and `%pidreg' meta
15276
     registers.
15277
 
15278
`-mgcc-abi'
15279
     This option tells the assembler that the old GCC ABI is being used
15280
     by the assembled code.  With this version of the ABI function
15281
     arguments that are passed on the stack are aligned to a 32-bit
15282
     boundary.
15283
 
15284
`-mrx-abi'
15285
     This option tells the assembler that the official RX ABI is being
15286
     used by the assembled code.  With this version of the ABI function
15287
     arguments that are passed on the stack are aligned to their natural
15288
     alignments.  This option is the default.
15289
 
15290
 
15291

15292
File: as.info,  Node: RX-Modifiers,  Next: RX-Directives,  Prev: RX-Opts,  Up: RX-Dependent
15293
 
15294
9.34.2 Symbolic Operand Modifiers
15295
---------------------------------
15296
 
15297
The assembler supports one modifier when using symbol addresses in RX
15298
instruction operands.  The general syntax is the following:
15299
 
15300
     %gp(symbol)
15301
 
15302
   The modifier returns the offset from the __GP symbol to the
15303
specified symbol as a 16-bit value.  The intent is that this offset
15304
should be used in a register+offset move instruction when generating
15305
references to small data.  Ie, like this:
15306
 
15307
       mov.W     %gp(_foo)[%gpreg], r1
15308
 
15309
   The assembler also supports two meta register names which can be used
15310
to refer to registers whose values may not be known to the programmer.
15311
These meta register names are:
15312
 
15313
`%gpreg'
15314
     The small data address register.
15315
 
15316
`%pidreg'
15317
     The PID base address register.
15318
 
15319
 
15320
   Both registers normally have the value r13, but this can change if
15321
some registers have been reserved for use by interrupt handlers or if
15322
both the small data limit and position independent data features are
15323
being used at the same time.
15324
 
15325

15326
File: as.info,  Node: RX-Directives,  Next: RX-Float,  Prev: RX-Modifiers,  Up: RX-Dependent
15327
 
15328
9.34.3 Assembler Directives
15329
---------------------------
15330
 
15331
The RX version of `as' has the following specific assembler directives:
15332
 
15333
`.3byte'
15334
     Inserts a 3-byte value into the output file at the current
15335
     location.
15336
 
15337
`.fetchalign'
15338
     If the next opcode following this directive spans a fetch line
15339
     boundary (8 byte boundary), the opcode is aligned to that boundary.
15340
     If the next opcode does not span a fetch line, this directive has
15341
     no effect.  Note that one or more labels may be between this
15342
     directive and the opcode; those labels are aligned as well.  Any
15343
     inserted bytes due to alignment will form a NOP opcode.
15344
 
15345
 
15346

15347
File: as.info,  Node: RX-Float,  Next: RX-Syntax,  Prev: RX-Directives,  Up: RX-Dependent
15348
 
15349
9.34.4 Floating Point
15350
---------------------
15351
 
15352
The floating point formats generated by directives are these.
15353
 
15354
`.float'
15355
     `Single' precision (32-bit) floating point constants.
15356
 
15357
`.double'
15358
     If the `-m64bit-doubles' command line option has been specified
15359
     then then `double' directive generates `double' precision (64-bit)
15360
     floating point constants, otherwise it generates `single'
15361
     precision (32-bit) floating point constants.  To force the
15362
     generation of 64-bit floating point constants used the `dc.d'
15363
     directive instead.
15364
 
15365
 
15366

15367
File: as.info,  Node: RX-Syntax,  Prev: RX-Float,  Up: RX-Dependent
15368
 
15369
9.34.5 Syntax for the RX
15370
------------------------
15371
 
15372
* Menu:
15373
 
15374
* RX-Chars::                Special Characters
15375
 
15376

15377
File: as.info,  Node: RX-Chars,  Up: RX-Syntax
15378
 
15379
9.34.5.1 Special Characters
15380
...........................
15381
 
15382
The presence of a `;' appearing anywhere on a line indicates the start
15383
of a comment that extends to the end of that line.
15384
 
15385
   If a `#' appears as the first character of a line then the whole
15386
line is treated as a comment, but in this case the line can also be a
15387
logical line number directive (*note Comments::) or a preprocessor
15388
control command (*note Preprocessing::).
15389
 
15390
   The `!' character can be used to separate statements on the same
15391
line.
15392
 
15393

15394
File: as.info,  Node: S/390-Dependent,  Next: SCORE-Dependent,  Prev: RX-Dependent,  Up: Machine Dependencies
15395
 
15396
9.35 IBM S/390 Dependent Features
15397
=================================
15398
 
15399
   The s390 version of `as' supports two architectures modes and seven
15400
chip levels. The architecture modes are the Enterprise System
15401
Architecture (ESA) and the newer z/Architecture mode. The chip levels
15402
are g5, g6, z900, z990, z9-109, z9-ec, z10, z196, and zEC12.
15403
 
15404
* Menu:
15405
 
15406
* s390 Options::                Command-line Options.
15407
* s390 Characters::             Special Characters.
15408
* s390 Syntax::                 Assembler Instruction syntax.
15409
* s390 Directives::             Assembler Directives.
15410
* s390 Floating Point::         Floating Point.
15411
 
15412

15413
File: as.info,  Node: s390 Options,  Next: s390 Characters,  Up: S/390-Dependent
15414
 
15415
9.35.1 Options
15416
--------------
15417
 
15418
The following table lists all available s390 specific options:
15419
 
15420
`-m31 | -m64'
15421
     Select 31- or 64-bit ABI implying a word size of 32- or 64-bit.
15422
 
15423
     These options are only available with the ELF object file format,
15424
     and require that the necessary BFD support has been included (on a
15425
     31-bit platform you must add -enable-64-bit-bfd on the call to the
15426
     configure script to enable 64-bit usage and use s390x as target
15427
     platform).
15428
 
15429
`-mesa | -mzarch'
15430
     Select the architecture mode, either the Enterprise System
15431
     Architecture (esa) mode or the z/Architecture mode (zarch).
15432
 
15433
     The 64-bit instructions are only available with the z/Architecture
15434
     mode.  The combination of `-m64' and `-mesa' results in a warning
15435
     message.
15436
 
15437
`-march=CPU'
15438
     This option specifies the target processor. The following
15439
     processor names are recognized: `g5', `g6', `z900', `z990',
15440
     `z9-109', `z9-ec', `z10' and `z196'.  Assembling an instruction
15441
     that is not supported on the target processor results in an error
15442
     message. Do not specify `g5' or `g6' with `-mzarch'.
15443
 
15444
`-mregnames'
15445
     Allow symbolic names for registers.
15446
 
15447
`-mno-regnames'
15448
     Do not allow symbolic names for registers.
15449
 
15450
`-mwarn-areg-zero'
15451
     Warn whenever the operand for a base or index register has been
15452
     specified but evaluates to zero. This can indicate the misuse of
15453
     general purpose register 0 as an address register.
15454
 
15455
 
15456

15457
File: as.info,  Node: s390 Characters,  Next: s390 Syntax,  Prev: s390 Options,  Up: S/390-Dependent
15458
 
15459
9.35.2 Special Characters
15460
-------------------------
15461
 
15462
`#' is the line comment character.
15463
 
15464
   If a `#' appears as the first character of a line then the whole
15465
line is treated as a comment, but in this case the line could also be a
15466
logical line number directive (*note Comments::) or a preprocessor
15467
control command (*note Preprocessing::).
15468
 
15469
   The `;' character can be used instead of a newline to separate
15470
statements.
15471
 
15472

15473
File: as.info,  Node: s390 Syntax,  Next: s390 Directives,  Prev: s390 Characters,  Up: S/390-Dependent
15474
 
15475
9.35.3 Instruction syntax
15476
-------------------------
15477
 
15478
The assembler syntax closely follows the syntax outlined in Enterprise
15479
Systems Architecture/390 Principles of Operation (SA22-7201) and the
15480
z/Architecture Principles of Operation (SA22-7832).
15481
 
15482
   Each instruction has two major parts, the instruction mnemonic and
15483
the instruction operands. The instruction format varies.
15484
 
15485
* Menu:
15486
 
15487
* s390 Register::               Register Naming
15488
* s390 Mnemonics::              Instruction Mnemonics
15489
* s390 Operands::               Instruction Operands
15490
* s390 Formats::                Instruction Formats
15491
* s390 Aliases::                Instruction Aliases
15492
* s390 Operand Modifier::       Instruction Operand Modifier
15493
* s390 Instruction Marker::     Instruction Marker
15494
* s390 Literal Pool Entries::   Literal Pool Entries
15495
 
15496

15497
File: as.info,  Node: s390 Register,  Next: s390 Mnemonics,  Up: s390 Syntax
15498
 
15499
9.35.3.1 Register naming
15500
........................
15501
 
15502
The `as' recognizes a number of predefined symbols for the various
15503
processor registers. A register specification in one of the instruction
15504
formats is an unsigned integer between 0 and 15. The specific
15505
instruction and the position of the register in the instruction format
15506
denotes the type of the register. The register symbols are prefixed with
15507
`%':
15508
 
15509
     %rN   the 16 general purpose registers, 0 <= N <= 15
15510
     %fN   the 16 floating point registers, 0 <= N <= 15
15511
     %aN   the 16 access registers, 0 <= N <= 15
15512
     %cN   the 16 control registers, 0 <= N <= 15
15513
     %lit  an alias for the general purpose register %r13
15514
     %sp   an alias for the general purpose register %r15
15515
 
15516

15517
File: as.info,  Node: s390 Mnemonics,  Next: s390 Operands,  Prev: s390 Register,  Up: s390 Syntax
15518
 
15519
9.35.3.2 Instruction Mnemonics
15520
..............................
15521
 
15522
All instructions documented in the Principles of Operation are supported
15523
with the mnemonic and order of operands as described.  The instruction
15524
mnemonic identifies the instruction format (*note s390 Formats::) and
15525
the specific operation code for the instruction.  For example, the `lr'
15526
mnemonic denotes the instruction format `RR' with the operation code
15527
`0x18'.
15528
 
15529
   The definition of the various mnemonics follows a scheme, where the
15530
first character usually hint at the type of the instruction:
15531
 
15532
     a          add instruction, for example `al' for add logical 32-bit
15533
     b          branch instruction, for example `bc' for branch on condition
15534
     c          compare or convert instruction, for example `cr' for compare
15535
                register 32-bit
15536
     d          divide instruction, for example `dlr' devide logical register
15537
                64-bit to 32-bit
15538
     i          insert instruction, for example `ic' insert character
15539
     l          load instruction, for example `ltr' load and test register
15540
     mv         move instruction, for example `mvc' move character
15541
     m          multiply instruction, for example `mh' multiply halfword
15542
     n          and instruction, for example `ni' and immediate
15543
     o          or instruction, for example `oc' or character
15544
     sla, sll   shift left single instruction
15545
     sra, srl   shift right single instruction
15546
     st         store instruction, for example `stm' store multiple
15547
     s          subtract instruction, for example `slr' subtract
15548
                logical 32-bit
15549
     t          test or translate instruction, of example `tm' test under mask
15550
     x          exclusive or instruction, for example `xc' exclusive or
15551
                character
15552
 
15553
   Certain characters at the end of the mnemonic may describe a property
15554
of the instruction:
15555
 
15556
     c   the instruction uses a 8-bit character operand
15557
     f   the instruction extends a 32-bit operand to 64 bit
15558
     g   the operands are treated as 64-bit values
15559
     h   the operand uses a 16-bit halfword operand
15560
     i   the instruction uses an immediate operand
15561
     l   the instruction uses unsigned, logical operands
15562
     m   the instruction uses a mask or operates on multiple values
15563
     r   if r is the last character, the instruction operates on registers
15564
     y   the instruction uses 20-bit displacements
15565
 
15566
   There are many exceptions to the scheme outlined in the above lists,
15567
in particular for the priviledged instructions. For non-priviledged
15568
instruction it works quite well, for example the instruction `clgfr' c:
15569
compare instruction, l: unsigned operands, g: 64-bit operands, f: 32-
15570
to 64-bit extension, r: register operands. The instruction compares an
15571
64-bit value in a register with the zero extended 32-bit value from a
15572
second register.  For a complete list of all mnemonics see appendix B
15573
in the Principles of Operation.
15574
 
15575

15576
File: as.info,  Node: s390 Operands,  Next: s390 Formats,  Prev: s390 Mnemonics,  Up: s390 Syntax
15577
 
15578
9.35.3.3 Instruction Operands
15579
.............................
15580
 
15581
Instruction operands can be grouped into three classes, operands located
15582
in registers, immediate operands, and operands in storage.
15583
 
15584
   A register operand can be located in general, floating-point, access,
15585
or control register. The register is identified by a four-bit field.
15586
The field containing the register operand is called the R field.
15587
 
15588
   Immediate operands are contained within the instruction and can have
15589
8, 16 or 32 bits. The field containing the immediate operand is called
15590
the I field. Dependent on the instruction the I field is either signed
15591
or unsigned.
15592
 
15593
   A storage operand consists of an address and a length. The address
15594
of a storage operands can be specified in any of these ways:
15595
 
15596
   * The content of a single general R
15597
 
15598
   * The sum of the content of a general register called the base
15599
     register B plus the content of a displacement field D
15600
 
15601
   * The sum of the contents of two general registers called the index
15602
     register X and the base register B plus the content of a
15603
     displacement field
15604
 
15605
   * The sum of the current instruction address and a 32-bit signed
15606
     immediate field multiplied by two.
15607
 
15608
   The length of a storage operand can be:
15609
 
15610
   * Implied by the instruction
15611
 
15612
   * Specified by a bitmask
15613
 
15614
   * Specified by a four-bit or eight-bit length field L
15615
 
15616
   * Specified by the content of a general register
15617
 
15618
   The notation for storage operand addresses formed from multiple
15619
fields is as follows:
15620
 
15621
`Dn(Bn)'
15622
     the address for operand number n is formed from the content of
15623
     general register Bn called the base register and the displacement
15624
     field Dn.
15625
 
15626
`Dn(Xn,Bn)'
15627
     the address for operand number n is formed from the content of
15628
     general register Xn called the index register, general register Bn
15629
     called the base register and the displacement field Dn.
15630
 
15631
`Dn(Ln,Bn)'
15632
     the address for operand number n is formed from the content of
15633
     general regiser Bn called the base register and the displacement
15634
     field Dn.  The length of the operand n is specified by the field
15635
     Ln.
15636
 
15637
   The base registers Bn and the index registers Xn of a storage
15638
operand can be skipped. If Bn and Xn are skipped, a zero will be stored
15639
to the operand field. The notation changes as follows:
15640
 
15641
     full notation        short notation
15642
     ------------------------------------------
15643
     Dn(0,Bn)             Dn(Bn)
15644
     Dn(0,0)              Dn
15645
     Dn(0)                Dn
15646
     Dn(Ln,0)             Dn(Ln)
15647
 
15648

15649
File: as.info,  Node: s390 Formats,  Next: s390 Aliases,  Prev: s390 Operands,  Up: s390 Syntax
15650
 
15651
9.35.3.4 Instruction Formats
15652
............................
15653
 
15654
The Principles of Operation manuals lists 26 instruction formats where
15655
some of the formats have multiple variants. For the `.insn' pseudo
15656
directive the assembler recognizes some of the formats.  Typically, the
15657
most general variant of the instruction format is used by the `.insn'
15658
directive.
15659
 
15660
   The following table lists the abbreviations used in the table of
15661
instruction formats:
15662
 
15663
     OpCode / OpCd   Part of the op code.
15664
     Bx              Base register number for operand x.
15665
     Dx              Displacement for operand x.
15666
     DLx             Displacement lower 12 bits for operand x.
15667
     DHx             Displacement higher 8-bits for operand x.
15668
     Rx              Register number for operand x.
15669
     Xx              Index register number for operand x.
15670
     Ix              Signed immediate for operand x.
15671
     Ux              Unsigned immediate for operand x.
15672
 
15673
   An instruction is two, four, or six bytes in length and must be
15674
aligned on a 2 byte boundary. The first two bits of the instruction
15675
specify the length of the instruction, 00 indicates a two byte
15676
instruction, 01 and 10 indicates a four byte instruction, and 11
15677
indicates a six byte instruction.
15678
 
15679
   The following table lists the s390 instruction formats that are
15680
available with the `.insn' pseudo directive:
15681
 
15682
`E format'
15683
     +-------------+
15684
     |    OpCode   |
15685
     +-------------+
15686
 
15687
 
15688
`RI format:  R1,I2'
15689
     +--------+----+----+------------------+
15690
     | OpCode | R1 |OpCd|        I2        |
15691
     +--------+----+----+------------------+
15692
 
15693
 
15694
`RIE format:  R1,R3,I2'
15695
     +--------+----+----+------------------+--------+--------+
15696
     | OpCode | R1 | R3 |        I2        |////////| OpCode |
15697
     +--------+----+----+------------------+--------+--------+
15698
 
15699
 
15700
`RIL format:  R1,I2'
15701
     +--------+----+----+------------------------------------+
15702
     | OpCode | R1 |OpCd|                  I2                |
15703
     +--------+----+----+------------------------------------+
15704
 
15705
 
15706
`RILU format:  R1,U2'
15707
     +--------+----+----+------------------------------------+
15708
     | OpCode | R1 |OpCd|                  U2                |
15709
     +--------+----+----+------------------------------------+
15710
 
15711
 
15712
`RIS format:  R1,I2,M3,D4(B4)'
15713
     +--------+----+----+----+-------------+--------+--------+
15714
     | OpCode | R1 | M3 | B4 |     D4      |   I2   | Opcode |
15715
     +--------+----+----+----+-------------+--------+--------+
15716
 
15717
 
15718
`RR format:  R1,R2'
15719
     +--------+----+----+
15720
     | OpCode | R1 | R2 |
15721
     +--------+----+----+
15722
 
15723
 
15724
`RRE format:  R1,R2'
15725
     +------------------+--------+----+----+
15726
     |      OpCode      |////////| R1 | R2 |
15727
     +------------------+--------+----+----+
15728
 
15729
 
15730
`RRF format:  R1,R2,R3,M4'
15731
     +------------------+----+----+----+----+
15732
     |      OpCode      | R3 | M4 | R1 | R2 |
15733
     +------------------+----+----+----+----+
15734
 
15735
 
15736
`RRS format:  R1,R2,M3,D4(B4)'
15737
     +--------+----+----+----+-------------+----+----+--------+
15738
     | OpCode | R1 | R3 | B4 |     D4      | M3 |////| OpCode |
15739
     +--------+----+----+----+-------------+----+----+--------+
15740
 
15741
 
15742
`RS format:  R1,R3,D2(B2)'
15743
     +--------+----+----+----+-------------+
15744
     | OpCode | R1 | R3 | B2 |     D2      |
15745
     +--------+----+----+----+-------------+
15746
 
15747
 
15748
`RSE format:  R1,R3,D2(B2)'
15749
     +--------+----+----+----+-------------+--------+--------+
15750
     | OpCode | R1 | R3 | B2 |     D2      |////////| OpCode |
15751
     +--------+----+----+----+-------------+--------+--------+
15752
 
15753
 
15754
`RSI format:  R1,R3,I2'
15755
     +--------+----+----+------------------------------------+
15756
     | OpCode | R1 | R3 |                  I2                |
15757
     +--------+----+----+------------------------------------+
15758
 
15759
 
15760
`RSY format:  R1,R3,D2(B2)'
15761
     +--------+----+----+----+-------------+--------+--------+
15762
     | OpCode | R1 | R3 | B2 |    DL2      |  DH2   | OpCode |
15763
     +--------+----+----+----+-------------+--------+--------+
15764
 
15765
 
15766
`RX format:  R1,D2(X2,B2)'
15767
     +--------+----+----+----+-------------+
15768
     | OpCode | R1 | X2 | B2 |     D2      |
15769
     +--------+----+----+----+-------------+
15770
 
15771
 
15772
`RXE format:  R1,D2(X2,B2)'
15773
     +--------+----+----+----+-------------+--------+--------+
15774
     | OpCode | R1 | X2 | B2 |     D2      |////////| OpCode |
15775
     +--------+----+----+----+-------------+--------+--------+
15776
 
15777
 
15778
`RXF format:  R1,R3,D2(X2,B2)'
15779
     +--------+----+----+----+-------------+----+---+--------+
15780
     | OpCode | R3 | X2 | B2 |     D2      | R1 |///| OpCode |
15781
     +--------+----+----+----+-------------+----+---+--------+
15782
 
15783
 
15784
`RXY format:  R1,D2(X2,B2)'
15785
     +--------+----+----+----+-------------+--------+--------+
15786
     | OpCode | R1 | X2 | B2 |     DL2     |   DH2  | OpCode |
15787
     +--------+----+----+----+-------------+--------+--------+
15788
 
15789
 
15790
`S format:  D2(B2)'
15791
     +------------------+----+-------------+
15792
     |      OpCode      | B2 |     D2      |
15793
     +------------------+----+-------------+
15794
 
15795
 
15796
`SI format:  D1(B1),I2'
15797
     +--------+---------+----+-------------+
15798
     | OpCode |   I2    | B1 |     D1      |
15799
     +--------+---------+----+-------------+
15800
 
15801
 
15802
`SIY format:  D1(B1),U2'
15803
     +--------+---------+----+-------------+--------+--------+
15804
     | OpCode |   I2    | B1 |     DL1     |  DH1   | OpCode |
15805
     +--------+---------+----+-------------+--------+--------+
15806
 
15807
 
15808
`SIL format:  D1(B1),I2'
15809
     +------------------+----+-------------+-----------------+
15810
     |      OpCode      | B1 |      D1     |       I2        |
15811
     +------------------+----+-------------+-----------------+
15812
 
15813
 
15814
`SS format:  D1(R1,B1),D2(B3),R3'
15815
     +--------+----+----+----+-------------+----+------------+
15816
     | OpCode | R1 | R3 | B1 |     D1      | B2 |     D2     |
15817
     +--------+----+----+----+-------------+----+------------+
15818
 
15819
 
15820
`SSE format:  D1(B1),D2(B2)'
15821
     +------------------+----+-------------+----+------------+
15822
     |      OpCode      | B1 |     D1      | B2 |     D2     |
15823
     +------------------+----+-------------+----+------------+
15824
 
15825
 
15826
`SSF format:  D1(B1),D2(B2),R3'
15827
     +--------+----+----+----+-------------+----+------------+
15828
     | OpCode | R3 |OpCd| B1 |     D1      | B2 |     D2     |
15829
     +--------+----+----+----+-------------+----+------------+
15830
 
15831
 
15832
 
15833
   For the complete list of all instruction format variants see the
15834
Principles of Operation manuals.
15835
 
15836

15837
File: as.info,  Node: s390 Aliases,  Next: s390 Operand Modifier,  Prev: s390 Formats,  Up: s390 Syntax
15838
 
15839
9.35.3.5 Instruction Aliases
15840
............................
15841
 
15842
A specific bit pattern can have multiple mnemonics, for example the bit
15843
pattern `0xa7000000' has the mnemonics `tmh' and `tmlh'. In addition,
15844
there are a number of mnemonics recognized by `as' that are not present
15845
in the Principles of Operation.  These are the short forms of the
15846
branch instructions, where the condition code mask operand is encoded
15847
in the mnemonic. This is relevant for the branch instructions, the
15848
compare and branch instructions, and the compare and trap instructions.
15849
 
15850
   For the branch instructions there are 20 condition code strings that
15851
can be used as part of the mnemonic in place of a mask operand in the
15852
instruction format:
15853
 
15854
     instruction          short form
15855
     ------------------------------------------
15856
     bcr   M1,R2          br  R2
15857
     bc    M1,D2(X2,B2)   b   D2(X2,B2)
15858
     brc   M1,I2          j   I2
15859
     brcl  M1,I2          jg  I2
15860
 
15861
   In the mnemonic for a branch instruction the condition code string
15862
 can be any of the following:
15863
 
15864
     o     jump on overflow / if ones
15865
     h     jump on A high
15866
     p     jump on plus
15867
     nle   jump on not low or equal
15868
     l     jump on A low
15869
     m     jump on minus
15870
     nhe   jump on not high or equal
15871
     lh    jump on low or high
15872
     ne    jump on A not equal B
15873
     nz    jump on not zero / if not zeros
15874
     e     jump on A equal B
15875
     z     jump on zero / if zeroes
15876
     nlh   jump on not low or high
15877
     he    jump on high or equal
15878
     nl    jump on A not low
15879
     nm    jump on not minus / if not mixed
15880
     le    jump on low or equal
15881
     nh    jump on A not high
15882
     np    jump on not plus
15883
     no    jump on not overflow / if not ones
15884
 
15885
   For the compare and branch, and compare and trap instructions there
15886
are 12 condition code strings that can be used as part of the mnemonic
15887
in place of a mask operand in the instruction format:
15888
 
15889
     instruction                 short form
15890
     --------------------------------------------------------
15891
     crb    R1,R2,M3,D4(B4)      crb    R1,R2,D4(B4)
15892
     cgrb   R1,R2,M3,D4(B4)      cgrb   R1,R2,D4(B4)
15893
     crj    R1,R2,M3,I4          crj    R1,R2,I4
15894
     cgrj   R1,R2,M3,I4          cgrj   R1,R2,I4
15895
     cib    R1,I2,M3,D4(B4)      cib    R1,I2,D4(B4)
15896
     cgib   R1,I2,M3,D4(B4)      cgib   R1,I2,D4(B4)
15897
     cij    R1,I2,M3,I4          cij    R1,I2,I4
15898
     cgij   R1,I2,M3,I4          cgij   R1,I2,I4
15899
     crt    R1,R2,M3             crt    R1,R2
15900
     cgrt   R1,R2,M3             cgrt   R1,R2
15901
     cit    R1,I2,M3             cit    R1,I2
15902
     cgit   R1,I2,M3             cgit   R1,I2
15903
     clrb   R1,R2,M3,D4(B4)      clrb   R1,R2,D4(B4)
15904
     clgrb  R1,R2,M3,D4(B4)      clgrb  R1,R2,D4(B4)
15905
     clrj   R1,R2,M3,I4          clrj   R1,R2,I4
15906
     clgrj  R1,R2,M3,I4          clgrj  R1,R2,I4
15907
     clib   R1,I2,M3,D4(B4)      clib   R1,I2,D4(B4)
15908
     clgib  R1,I2,M3,D4(B4)      clgib  R1,I2,D4(B4)
15909
     clij   R1,I2,M3,I4          clij   R1,I2,I4
15910
     clgij  R1,I2,M3,I4          clgij  R1,I2,I4
15911
     clrt   R1,R2,M3             clrt   R1,R2
15912
     clgrt  R1,R2,M3             clgrt  R1,R2
15913
     clfit  R1,I2,M3             clfit  R1,I2
15914
     clgit  R1,I2,M3             clgit  R1,I2
15915
 
15916
   In the mnemonic for a compare and branch and compare and trap
15917
instruction the condition code string  can be any of the following:
15918
 
15919
     h     jump on A high
15920
     nle   jump on not low or equal
15921
     l     jump on A low
15922
     nhe   jump on not high or equal
15923
     ne    jump on A not equal B
15924
     lh    jump on low or high
15925
     e     jump on A equal B
15926
     nlh   jump on not low or high
15927
     nl    jump on A not low
15928
     he    jump on high or equal
15929
     nh    jump on A not high
15930
     le    jump on low or equal
15931
 
15932

15933
File: as.info,  Node: s390 Operand Modifier,  Next: s390 Instruction Marker,  Prev: s390 Aliases,  Up: s390 Syntax
15934
 
15935
9.35.3.6 Instruction Operand Modifier
15936
.....................................
15937
 
15938
If a symbol modifier is attached to a symbol in an expression for an
15939
instruction operand field, the symbol term is replaced with a reference
15940
to an object in the global offset table (GOT) or the procedure linkage
15941
table (PLT). The following expressions are allowed: `symbol@modifier +
15942
constant', `symbol@modifier + label + constant', and `symbol@modifier -
15943
label + constant'.  The term `symbol' is the symbol that will be
15944
entered into the GOT or PLT, `label' is a local label, and `constant'
15945
is an arbitrary expression that the assembler can evaluate to a
15946
constant value.
15947
 
15948
   The term `(symbol + constant1)@modifier +/- label + constant2' is
15949
also accepted but a warning message is printed and the term is
15950
converted to `symbol@modifier +/- label + constant1 + constant2'.
15951
 
15952
`@got'
15953
`@got12'
15954
     The @got modifier can be used for displacement fields, 16-bit
15955
     immediate fields and 32-bit pc-relative immediate fields. The
15956
     @got12 modifier is synonym to @got. The symbol is added to the
15957
     GOT. For displacement fields and 16-bit immediate fields the
15958
     symbol term is replaced with the offset from the start of the GOT
15959
     to the GOT slot for the symbol.  For a 32-bit pc-relative field
15960
     the pc-relative offset to the GOT slot from the current
15961
     instruction address is used.
15962
 
15963
`@gotent'
15964
     The @gotent modifier can be used for 32-bit pc-relative immediate
15965
     fields.  The symbol is added to the GOT and the symbol term is
15966
     replaced with the pc-relative offset from the current instruction
15967
     to the GOT slot for the symbol.
15968
 
15969
`@gotoff'
15970
     The @gotoff modifier can be used for 16-bit immediate fields. The
15971
     symbol term is replaced with the offset from the start of the GOT
15972
     to the address of the symbol.
15973
 
15974
`@gotplt'
15975
     The @gotplt modifier can be used for displacement fields, 16-bit
15976
     immediate fields, and 32-bit pc-relative immediate fields. A
15977
     procedure linkage table entry is generated for the symbol and a
15978
     jump slot for the symbol is added to the GOT. For displacement
15979
     fields and 16-bit immediate fields the symbol term is replaced
15980
     with the offset from the start of the GOT to the jump slot for the
15981
     symbol. For a 32-bit pc-relative field the pc-relative offset to
15982
     the jump slot from the current instruction address is used.
15983
 
15984
`@plt'
15985
     The @plt modifier can be used for 16-bit and 32-bit pc-relative
15986
     immediate fields. A procedure linkage table entry is generated for
15987
     the symbol.  The symbol term is replaced with the relative offset
15988
     from the current instruction to the PLT entry for the symbol.
15989
 
15990
`@pltoff'
15991
     The @pltoff modifier can be used for 16-bit immediate fields. The
15992
     symbol term is replaced with the offset from the start of the PLT
15993
     to the address of the symbol.
15994
 
15995
`@gotntpoff'
15996
     The @gotntpoff modifier can be used for displacement fields. The
15997
     symbol is added to the static TLS block and the negated offset to
15998
     the symbol in the static TLS block is added to the GOT. The symbol
15999
     term is replaced with the offset to the GOT slot from the start of
16000
     the GOT.
16001
 
16002
`@indntpoff'
16003
     The @indntpoff modifier can be used for 32-bit pc-relative
16004
     immediate fields. The symbol is added to the static TLS block and
16005
     the negated offset to the symbol in the static TLS block is added
16006
     to the GOT. The symbol term is replaced with the pc-relative
16007
     offset to the GOT slot from the current instruction address.
16008
 
16009
   For more information about the thread local storage modifiers
16010
`gotntpoff' and `indntpoff' see the ELF extension documentation `ELF
16011
Handling For Thread-Local Storage'.
16012
 
16013

16014
File: as.info,  Node: s390 Instruction Marker,  Next: s390 Literal Pool Entries,  Prev: s390 Operand Modifier,  Up: s390 Syntax
16015
 
16016
9.35.3.7 Instruction Marker
16017
...........................
16018
 
16019
The thread local storage instruction markers are used by the linker to
16020
perform code optimization.
16021
 
16022
`:tls_load'
16023
     The :tls_load marker is used to flag the load instruction in the
16024
     initial exec TLS model that retrieves the offset from the thread
16025
     pointer to a thread local storage variable from the GOT.
16026
 
16027
`:tls_gdcall'
16028
     The :tls_gdcall marker is used to flag the branch-and-save
16029
     instruction to the __tls_get_offset function in the global dynamic
16030
     TLS model.
16031
 
16032
`:tls_ldcall'
16033
     The :tls_ldcall marker is used to flag the branch-and-save
16034
     instruction to the __tls_get_offset function in the local dynamic
16035
     TLS model.
16036
 
16037
   For more information about the thread local storage instruction
16038
marker and the linker optimizations see the ELF extension documentation
16039
`ELF Handling For Thread-Local Storage'.
16040
 
16041

16042
File: as.info,  Node: s390 Literal Pool Entries,  Prev: s390 Instruction Marker,  Up: s390 Syntax
16043
 
16044
9.35.3.8 Literal Pool Entries
16045
.............................
16046
 
16047
A literal pool is a collection of values. To access the values a pointer
16048
to the literal pool is loaded to a register, the literal pool register.
16049
Usually, register %r13 is used as the literal pool register (*note s390
16050
Register::). Literal pool entries are created by adding the suffix
16051
:lit1, :lit2, :lit4, or :lit8 to the end of an expression for an
16052
instruction operand. The expression is added to the literal pool and the
16053
operand is replaced with the offset to the literal in the literal pool.
16054
 
16055
`:lit1'
16056
     The literal pool entry is created as an 8-bit value. An operand
16057
     modifier must not be used for the original expression.
16058
 
16059
`:lit2'
16060
     The literal pool entry is created as a 16 bit value. The operand
16061
     modifier @got may be used in the original expression. The term
16062
     `x@got:lit2' will put the got offset for the global symbol x to
16063
     the literal pool as 16 bit value.
16064
 
16065
`:lit4'
16066
     The literal pool entry is created as a 32-bit value. The operand
16067
     modifier @got and @plt may be used in the original expression. The
16068
     term `x@got:lit4' will put the got offset for the global symbol x
16069
     to the literal pool as a 32-bit value. The term `x@plt:lit4' will
16070
     put the plt offset for the global symbol x to the literal pool as
16071
     a 32-bit value.
16072
 
16073
`:lit8'
16074
     The literal pool entry is created as a 64-bit value. The operand
16075
     modifier @got and @plt may be used in the original expression. The
16076
     term `x@got:lit8' will put the got offset for the global symbol x
16077
     to the literal pool as a 64-bit value. The term `x@plt:lit8' will
16078
     put the plt offset for the global symbol x to the literal pool as
16079
     a 64-bit value.
16080
 
16081
   The assembler directive `.ltorg' is used to emit all literal pool
16082
entries to the current position.
16083
 
16084

16085
File: as.info,  Node: s390 Directives,  Next: s390 Floating Point,  Prev: s390 Syntax,  Up: S/390-Dependent
16086
 
16087
9.35.4 Assembler Directives
16088
---------------------------
16089
 
16090
`as' for s390 supports all of the standard ELF assembler directives as
16091
outlined in the main part of this document.  Some directives have been
16092
extended and there are some additional directives, which are only
16093
available for the s390 `as'.
16094
 
16095
`.insn'
16096
     This directive permits the numeric representation of an
16097
     instructions and makes the assembler insert the operands according
16098
     to one of the instructions formats for `.insn' (*note s390
16099
     Formats::).  For example, the instruction `l %r1,24(%r15)' could
16100
     be written as `.insn rx,0x58000000,%r1,24(%r15)'.
16101
 
16102
`.short'
16103
`.long'
16104
`.quad'
16105
     This directive places one or more 16-bit (.short), 32-bit (.long),
16106
     or 64-bit (.quad) values into the current section. If an ELF or
16107
     TLS modifier is used only the following expressions are allowed:
16108
     `symbol@modifier + constant', `symbol@modifier + label +
16109
     constant', and `symbol@modifier - label + constant'.  The
16110
     following modifiers are available:
16111
    `@got'
16112
    `@got12'
16113
          The @got modifier can be used for .short, .long and .quad.
16114
          The @got12 modifier is synonym to @got. The symbol is added
16115
          to the GOT. The symbol term is replaced with offset from the
16116
          start of the GOT to the GOT slot for the symbol.
16117
 
16118
    `@gotoff'
16119
          The @gotoff modifier can be used for .short, .long and .quad.
16120
          The symbol term is replaced with the offset from the start of
16121
          the GOT to the address of the symbol.
16122
 
16123
    `@gotplt'
16124
          The @gotplt modifier can be used for .long and .quad. A
16125
          procedure linkage table entry is generated for the symbol and
16126
          a jump slot for the symbol is added to the GOT. The symbol
16127
          term is replaced with the offset from the start of the GOT to
16128
          the jump slot for the symbol.
16129
 
16130
    `@plt'
16131
          The @plt modifier can be used for .long and .quad. A
16132
          procedure linkage table entry us generated for the symbol.
16133
          The symbol term is replaced with the address of the PLT entry
16134
          for the symbol.
16135
 
16136
    `@pltoff'
16137
          The @pltoff modifier can be used for .short, .long and .quad.
16138
          The symbol term is replaced with the offset from the start of
16139
          the PLT to the address of the symbol.
16140
 
16141
    `@tlsgd'
16142
    `@tlsldm'
16143
          The @tlsgd and @tlsldm modifier can be used for .long and
16144
          .quad. A tls_index structure for the symbol is added to the
16145
          GOT. The symbol term is replaced with the offset from the
16146
          start of the GOT to the tls_index structure.
16147
 
16148
    `@gotntpoff'
16149
    `@indntpoff'
16150
          The @gotntpoff and @indntpoff modifier can be used for .long
16151
          and .quad.  The symbol is added to the static TLS block and
16152
          the negated offset to the symbol in the static TLS block is
16153
          added to the GOT. For @gotntpoff the symbol term is replaced
16154
          with the offset from the start of the GOT to the GOT slot,
16155
          for @indntpoff the symbol term is replaced with the address
16156
          of the GOT slot.
16157
 
16158
    `@dtpoff'
16159
          The @dtpoff modifier can be used for .long and .quad. The
16160
          symbol term is replaced with the offset of the symbol
16161
          relative to the start of the TLS block it is contained in.
16162
 
16163
    `@ntpoff'
16164
          The @ntpoff modifier can be used for .long and .quad. The
16165
          symbol term is replaced with the offset of the symbol
16166
          relative to the TCB pointer.
16167
 
16168
     For more information about the thread local storage modifiers see
16169
     the ELF extension documentation `ELF Handling For Thread-Local
16170
     Storage'.
16171
 
16172
`.ltorg'
16173
     This directive causes the current contents of the literal pool to
16174
     be dumped to the current location (*note s390 Literal Pool
16175
     Entries::).
16176
 
16177
`.machine string'
16178
     This directive allows you to change the machine for which code is
16179
     generated.  `string' may be any of the `-march=' selection options
16180
     (without the -march=), `push', or `pop'.  `.machine push' saves
16181
     the currently selected cpu, which may be restored with `.machine
16182
     pop'.  Be aware that the cpu string has to be put into double
16183
     quotes in case it contains characters not appropriate for
16184
     identifiers.  So you have to write `"z9-109"' instead of just
16185
     `z9-109'.
16186
 
16187
`.machinemode string'
16188
     This directive allows to change the architecture mode for which
16189
     code is being generated.  `string' may be `esa', `zarch',
16190
     `zarch_nohighgprs', `push', or `pop'.  `.machinemode
16191
     zarch_nohighgprs' can be used to prevent the `highgprs' flag from
16192
     being set in the ELF header of the output file.  This is useful in
16193
     situations where the code is gated with a runtime check which
16194
     makes sure that the code is only executed on kernels providing the
16195
     `highgprs' feature.  `.machinemode push' saves the currently
16196
     selected mode, which may be restored with `.machinemode pop'.
16197
 
16198

16199
File: as.info,  Node: s390 Floating Point,  Prev: s390 Directives,  Up: S/390-Dependent
16200
 
16201
9.35.5 Floating Point
16202
---------------------
16203
 
16204
The assembler recognizes both the IEEE floating-point instruction and
16205
the hexadecimal floating-point instructions. The floating-point
16206
constructors `.float', `.single', and `.double' always emit the IEEE
16207
format. To assemble hexadecimal floating-point constants the `.long'
16208
and `.quad' directives must be used.
16209
 
16210

16211
File: as.info,  Node: SCORE-Dependent,  Next: Sparc-Dependent,  Prev: S/390-Dependent,  Up: Machine Dependencies
16212
 
16213
9.36 SCORE Dependent Features
16214
=============================
16215
 
16216
* Menu:
16217
 
16218
* SCORE-Opts::          Assembler options
16219
* SCORE-Pseudo::        SCORE Assembler Directives
16220
* SCORE-Syntax::        Syntax
16221
 
16222

16223
File: as.info,  Node: SCORE-Opts,  Next: SCORE-Pseudo,  Up: SCORE-Dependent
16224
 
16225
9.36.1 Options
16226
--------------
16227
 
16228
The following table lists all available SCORE options.
16229
 
16230
`-G NUM'
16231
     This option sets the largest size of an object that can be
16232
     referenced implicitly with the `gp' register. The default value is
16233
     8.
16234
 
16235
`-EB'
16236
     Assemble code for a big-endian cpu
16237
 
16238
`-EL'
16239
     Assemble code for a little-endian cpu
16240
 
16241
`-FIXDD'
16242
     Assemble code for fix data dependency
16243
 
16244
`-NWARN'
16245
     Assemble code for no warning message for fix data dependency
16246
 
16247
`-SCORE5'
16248
     Assemble code for target is SCORE5
16249
 
16250
`-SCORE5U'
16251
     Assemble code for target is SCORE5U
16252
 
16253
`-SCORE7'
16254
     Assemble code for target is SCORE7, this is default setting
16255
 
16256
`-SCORE3'
16257
     Assemble code for target is SCORE3
16258
 
16259
`-march=score7'
16260
     Assemble code for target is SCORE7, this is default setting
16261
 
16262
`-march=score3'
16263
     Assemble code for target is SCORE3
16264
 
16265
`-USE_R1'
16266
     Assemble code for no warning message when using temp register r1
16267
 
16268
`-KPIC'
16269
     Generate code for PIC.  This option tells the assembler to generate
16270
     score position-independent macro expansions.  It also tells the
16271
     assembler to mark the output file as PIC.
16272
 
16273
`-O0'
16274
     Assembler will not perform any optimizations
16275
 
16276
`-V'
16277
     Sunplus release version
16278
 
16279
 
16280

16281
File: as.info,  Node: SCORE-Pseudo,  Next: SCORE-Syntax,  Prev: SCORE-Opts,  Up: SCORE-Dependent
16282
 
16283
9.36.2 SCORE Assembler Directives
16284
---------------------------------
16285
 
16286
A number of assembler directives are available for SCORE.  The
16287
following table is far from complete.
16288
 
16289
`.set nwarn'
16290
     Let the assembler not to generate warnings if the source machine
16291
     language instructions happen data dependency.
16292
 
16293
`.set fixdd'
16294
     Let the assembler to insert bubbles (32 bit nop instruction / 16
16295
     bit nop! Instruction) if the source machine language instructions
16296
     happen data dependency.
16297
 
16298
`.set nofixdd'
16299
     Let the assembler to generate warnings if the source machine
16300
     language instructions happen data dependency. (Default)
16301
 
16302
`.set r1'
16303
     Let the assembler not to generate warnings if the source program
16304
     uses r1. allow user to use r1
16305
 
16306
`set nor1'
16307
     Let the assembler to generate warnings if the source program uses
16308
     r1. (Default)
16309
 
16310
`.sdata'
16311
     Tell the assembler to add subsequent data into the sdata section
16312
 
16313
`.rdata'
16314
     Tell the assembler to add subsequent data into the rdata section
16315
 
16316
`.frame "frame-register", "offset", "return-pc-register"'
16317
     Describe a stack frame. "frame-register" is the frame register,
16318
     "offset" is the distance from the frame register to the virtual
16319
     frame pointer, "return-pc-register" is the return program register.
16320
     You must use ".ent" before ".frame" and only one ".frame" can be
16321
     used per ".ent".
16322
 
16323
`.mask "bitmask", "frameoffset"'
16324
     Indicate which of the integer registers are saved in the current
16325
     function's stack frame, this is for the debugger to explain the
16326
     frame chain.
16327
 
16328
`.ent "proc-name"'
16329
     Set the beginning of the procedure "proc_name". Use this directive
16330
     when you want to generate information for the debugger.
16331
 
16332
`.end proc-name'
16333
     Set the end of a procedure. Use this directive to generate
16334
     information for the debugger.
16335
 
16336
`.bss'
16337
     Switch the destination of following statements into the bss
16338
     section, which is used for data that is uninitialized anywhere.
16339
 
16340
 
16341

16342
File: as.info,  Node: SCORE-Syntax,  Prev: SCORE-Pseudo,  Up: SCORE-Dependent
16343
 
16344
9.36.3 SCORE Syntax
16345
-------------------
16346
 
16347
* Menu:
16348
 
16349
* SCORE-Chars::                Special Characters
16350
 
16351

16352
File: as.info,  Node: SCORE-Chars,  Up: SCORE-Syntax
16353
 
16354
9.36.3.1 Special Characters
16355
...........................
16356
 
16357
The presence of a `#' appearing anywhere on a line indicates the start
16358
of a comment that extends to the end of that line.
16359
 
16360
   If a `#' appears as the first character of a line then the whole
16361
line is treated as a comment, but in this case the line can also be a
16362
logical line number directive (*note Comments::) or a preprocessor
16363
control command (*note Preprocessing::).
16364
 
16365
   The `;' character can be used to separate statements on the same
16366
line.
16367
 
16368

16369
File: as.info,  Node: SH-Dependent,  Next: SH64-Dependent,  Prev: NS32K-Dependent,  Up: Machine Dependencies
16370
 
16371
9.37 Renesas / SuperH SH Dependent Features
16372
===========================================
16373
 
16374
* Menu:
16375
 
16376
* SH Options::              Options
16377
* SH Syntax::               Syntax
16378
* SH Floating Point::       Floating Point
16379
* SH Directives::           SH Machine Directives
16380
* SH Opcodes::              Opcodes
16381
 
16382

16383
File: as.info,  Node: SH Options,  Next: SH Syntax,  Up: SH-Dependent
16384
 
16385
9.37.1 Options
16386
--------------
16387
 
16388
`as' has following command-line options for the Renesas (formerly
16389
Hitachi) / SuperH SH family.
16390
 
16391
`--little'
16392
     Generate little endian code.
16393
 
16394
`--big'
16395
     Generate big endian code.
16396
 
16397
`--relax'
16398
     Alter jump instructions for long displacements.
16399
 
16400
`--small'
16401
     Align sections to 4 byte boundaries, not 16.
16402
 
16403
`--dsp'
16404
     Enable sh-dsp insns, and disable sh3e / sh4 insns.
16405
 
16406
`--renesas'
16407
     Disable optimization with section symbol for compatibility with
16408
     Renesas assembler.
16409
 
16410
`--allow-reg-prefix'
16411
     Allow '$' as a register name prefix.
16412
 
16413
`--fdpic'
16414
     Generate an FDPIC object file.
16415
 
16416
`--isa=sh4 | sh4a'
16417
     Specify the sh4 or sh4a instruction set.
16418
 
16419
`--isa=dsp'
16420
     Enable sh-dsp insns, and disable sh3e / sh4 insns.
16421
 
16422
`--isa=fp'
16423
     Enable sh2e, sh3e, sh4, and sh4a insn sets.
16424
 
16425
`--isa=all'
16426
     Enable sh1, sh2, sh2e, sh3, sh3e, sh4, sh4a, and sh-dsp insn sets.
16427
 
16428
`-h-tick-hex'
16429
     Support H'00 style hex constants in addition to 0x00 style.
16430
 
16431
 
16432

16433
File: as.info,  Node: SH Syntax,  Next: SH Floating Point,  Prev: SH Options,  Up: SH-Dependent
16434
 
16435
9.37.2 Syntax
16436
-------------
16437
 
16438
* Menu:
16439
 
16440
* SH-Chars::                Special Characters
16441
* SH-Regs::                 Register Names
16442
* SH-Addressing::           Addressing Modes
16443
 
16444

16445
File: as.info,  Node: SH-Chars,  Next: SH-Regs,  Up: SH Syntax
16446
 
16447
9.37.2.1 Special Characters
16448
...........................
16449
 
16450
`!' is the line comment character.
16451
 
16452
   You can use `;' instead of a newline to separate statements.
16453
 
16454
   If a `#' appears as the first character of a line then the whole
16455
line is treated as a comment, but in this case the line could also be a
16456
logical line number directive (*note Comments::) or a preprocessor
16457
control command (*note Preprocessing::).
16458
 
16459
   Since `$' has no special meaning, you may use it in symbol names.
16460
 
16461

16462
File: as.info,  Node: SH-Regs,  Next: SH-Addressing,  Prev: SH-Chars,  Up: SH Syntax
16463
 
16464
9.37.2.2 Register Names
16465
.......................
16466
 
16467
You can use the predefined symbols `r0', `r1', `r2', `r3', `r4', `r5',
16468
`r6', `r7', `r8', `r9', `r10', `r11', `r12', `r13', `r14', and `r15' to
16469
refer to the SH registers.
16470
 
16471
   The SH also has these control registers:
16472
 
16473
`pr'
16474
     procedure register (holds return address)
16475
 
16476
`pc'
16477
     program counter
16478
 
16479
`mach'
16480
`macl'
16481
     high and low multiply accumulator registers
16482
 
16483
`sr'
16484
     status register
16485
 
16486
`gbr'
16487
     global base register
16488
 
16489
`vbr'
16490
     vector base register (for interrupt vectors)
16491
 
16492

16493
File: as.info,  Node: SH-Addressing,  Prev: SH-Regs,  Up: SH Syntax
16494
 
16495
9.37.2.3 Addressing Modes
16496
.........................
16497
 
16498
`as' understands the following addressing modes for the SH.  `RN' in
16499
the following refers to any of the numbered registers, but _not_ the
16500
control registers.
16501
 
16502
`RN'
16503
     Register direct
16504
 
16505
`@RN'
16506
     Register indirect
16507
 
16508
`@-RN'
16509
     Register indirect with pre-decrement
16510
 
16511
`@RN+'
16512
     Register indirect with post-increment
16513
 
16514
`@(DISP, RN)'
16515
     Register indirect with displacement
16516
 
16517
`@(R0, RN)'
16518
     Register indexed
16519
 
16520
`@(DISP, GBR)'
16521
     `GBR' offset
16522
 
16523
`@(R0, GBR)'
16524
     GBR indexed
16525
 
16526
`ADDR'
16527
`@(DISP, PC)'
16528
     PC relative address (for branch or for addressing memory).  The
16529
     `as' implementation allows you to use the simpler form ADDR
16530
     anywhere a PC relative address is called for; the alternate form
16531
     is supported for compatibility with other assemblers.
16532
 
16533
`#IMM'
16534
     Immediate data
16535
 
16536

16537
File: as.info,  Node: SH Floating Point,  Next: SH Directives,  Prev: SH Syntax,  Up: SH-Dependent
16538
 
16539
9.37.3 Floating Point
16540
---------------------
16541
 
16542
SH2E, SH3E and SH4 groups have on-chip floating-point unit (FPU). Other
16543
SH groups can use `.float' directive to generate IEEE floating-point
16544
numbers.
16545
 
16546
   SH2E and SH3E support single-precision floating point calculations as
16547
well as entirely PCAPI compatible emulation of double-precision
16548
floating point calculations. SH2E and SH3E instructions are a subset of
16549
the floating point calculations conforming to the IEEE754 standard.
16550
 
16551
   In addition to single-precision and double-precision floating-point
16552
operation capability, the on-chip FPU of SH4 has a 128-bit graphic
16553
engine that enables 32-bit floating-point data to be processed 128 bits
16554
at a time. It also supports 4 * 4 array operations and inner product
16555
operations. Also, a superscalar architecture is employed that enables
16556
simultaneous execution of two instructions (including FPU
16557
instructions), providing performance of up to twice that of
16558
conventional architectures at the same frequency.
16559
 
16560

16561
File: as.info,  Node: SH Directives,  Next: SH Opcodes,  Prev: SH Floating Point,  Up: SH-Dependent
16562
 
16563
9.37.4 SH Machine Directives
16564
----------------------------
16565
 
16566
`uaword'
16567
`ualong'
16568
`uaquad'
16569
     `as' will issue a warning when a misaligned `.word', `.long', or
16570
     `.quad' directive is used.  You may use `.uaword', `.ualong', or
16571
     `.uaquad' to indicate that the value is intentionally misaligned.
16572
 
16573

16574
File: as.info,  Node: SH Opcodes,  Prev: SH Directives,  Up: SH-Dependent
16575
 
16576
9.37.5 Opcodes
16577
--------------
16578
 
16579
For detailed information on the SH machine instruction set, see
16580
`SH-Microcomputer User's Manual' (Renesas) or `SH-4 32-bit CPU Core
16581
Architecture' (SuperH) and `SuperH (SH) 64-Bit RISC Series' (SuperH).
16582
 
16583
   `as' implements all the standard SH opcodes.  No additional
16584
pseudo-instructions are needed on this family.  Note, however, that
16585
because `as' supports a simpler form of PC-relative addressing, you may
16586
simply write (for example)
16587
 
16588
     mov.l  bar,r0
16589
 
16590
where other assemblers might require an explicit displacement to `bar'
16591
from the program counter:
16592
 
16593
     mov.l  @(DISP, PC)
16594
 
16595
   Here is a summary of SH opcodes:
16596
 
16597
     Legend:
16598
     Rn        a numbered register
16599
     Rm        another numbered register
16600
     #imm      immediate data
16601
     disp      displacement
16602
     disp8     8-bit displacement
16603
     disp12    12-bit displacement
16604
 
16605
     add #imm,Rn                    lds.l @Rn+,PR
16606
     add Rm,Rn                      mac.w @Rm+,@Rn+
16607
     addc Rm,Rn                     mov #imm,Rn
16608
     addv Rm,Rn                     mov Rm,Rn
16609
     and #imm,R0                    mov.b Rm,@(R0,Rn)
16610
     and Rm,Rn                      mov.b Rm,@-Rn
16611
     and.b #imm,@(R0,GBR)           mov.b Rm,@Rn
16612
     bf disp8                       mov.b @(disp,Rm),R0
16613
     bra disp12                     mov.b @(disp,GBR),R0
16614
     bsr disp12                     mov.b @(R0,Rm),Rn
16615
     bt disp8                       mov.b @Rm+,Rn
16616
     clrmac                         mov.b @Rm,Rn
16617
     clrt                           mov.b R0,@(disp,Rm)
16618
     cmp/eq #imm,R0                 mov.b R0,@(disp,GBR)
16619
     cmp/eq Rm,Rn                   mov.l Rm,@(disp,Rn)
16620
     cmp/ge Rm,Rn                   mov.l Rm,@(R0,Rn)
16621
     cmp/gt Rm,Rn                   mov.l Rm,@-Rn
16622
     cmp/hi Rm,Rn                   mov.l Rm,@Rn
16623
     cmp/hs Rm,Rn                   mov.l @(disp,Rn),Rm
16624
     cmp/pl Rn                      mov.l @(disp,GBR),R0
16625
     cmp/pz Rn                      mov.l @(disp,PC),Rn
16626
     cmp/str Rm,Rn                  mov.l @(R0,Rm),Rn
16627
     div0s Rm,Rn                    mov.l @Rm+,Rn
16628
     div0u                          mov.l @Rm,Rn
16629
     div1 Rm,Rn                     mov.l R0,@(disp,GBR)
16630
     exts.b Rm,Rn                   mov.w Rm,@(R0,Rn)
16631
     exts.w Rm,Rn                   mov.w Rm,@-Rn
16632
     extu.b Rm,Rn                   mov.w Rm,@Rn
16633
     extu.w Rm,Rn                   mov.w @(disp,Rm),R0
16634
     jmp @Rn                        mov.w @(disp,GBR),R0
16635
     jsr @Rn                        mov.w @(disp,PC),Rn
16636
     ldc Rn,GBR                     mov.w @(R0,Rm),Rn
16637
     ldc Rn,SR                      mov.w @Rm+,Rn
16638
     ldc Rn,VBR                     mov.w @Rm,Rn
16639
     ldc.l @Rn+,GBR                 mov.w R0,@(disp,Rm)
16640
     ldc.l @Rn+,SR                  mov.w R0,@(disp,GBR)
16641
     ldc.l @Rn+,VBR                 mova @(disp,PC),R0
16642
     lds Rn,MACH                    movt Rn
16643
     lds Rn,MACL                    muls Rm,Rn
16644
     lds Rn,PR                      mulu Rm,Rn
16645
     lds.l @Rn+,MACH                neg Rm,Rn
16646
     lds.l @Rn+,MACL                negc Rm,Rn
16647
 
16648
     nop                            stc VBR,Rn
16649
     not Rm,Rn                      stc.l GBR,@-Rn
16650
     or #imm,R0                     stc.l SR,@-Rn
16651
     or Rm,Rn                       stc.l VBR,@-Rn
16652
     or.b #imm,@(R0,GBR)            sts MACH,Rn
16653
     rotcl Rn                       sts MACL,Rn
16654
     rotcr Rn                       sts PR,Rn
16655
     rotl Rn                        sts.l MACH,@-Rn
16656
     rotr Rn                        sts.l MACL,@-Rn
16657
     rte                            sts.l PR,@-Rn
16658
     rts                            sub Rm,Rn
16659
     sett                           subc Rm,Rn
16660
     shal Rn                        subv Rm,Rn
16661
     shar Rn                        swap.b Rm,Rn
16662
     shll Rn                        swap.w Rm,Rn
16663
     shll16 Rn                      tas.b @Rn
16664
     shll2 Rn                       trapa #imm
16665
     shll8 Rn                       tst #imm,R0
16666
     shlr Rn                        tst Rm,Rn
16667
     shlr16 Rn                      tst.b #imm,@(R0,GBR)
16668
     shlr2 Rn                       xor #imm,R0
16669
     shlr8 Rn                       xor Rm,Rn
16670
     sleep                          xor.b #imm,@(R0,GBR)
16671
     stc GBR,Rn                     xtrct Rm,Rn
16672
     stc SR,Rn
16673
 
16674

16675
File: as.info,  Node: SH64-Dependent,  Next: PDP-11-Dependent,  Prev: SH-Dependent,  Up: Machine Dependencies
16676
 
16677
9.38 SuperH SH64 Dependent Features
16678
===================================
16679
 
16680
* Menu:
16681
 
16682
* SH64 Options::              Options
16683
* SH64 Syntax::               Syntax
16684
* SH64 Directives::           SH64 Machine Directives
16685
* SH64 Opcodes::              Opcodes
16686
 
16687

16688
File: as.info,  Node: SH64 Options,  Next: SH64 Syntax,  Up: SH64-Dependent
16689
 
16690
9.38.1 Options
16691
--------------
16692
 
16693
`-isa=sh4 | sh4a'
16694
     Specify the sh4 or sh4a instruction set.
16695
 
16696
`-isa=dsp'
16697
     Enable sh-dsp insns, and disable sh3e / sh4 insns.
16698
 
16699
`-isa=fp'
16700
     Enable sh2e, sh3e, sh4, and sh4a insn sets.
16701
 
16702
`-isa=all'
16703
     Enable sh1, sh2, sh2e, sh3, sh3e, sh4, sh4a, and sh-dsp insn sets.
16704
 
16705
`-isa=shmedia | -isa=shcompact'
16706
     Specify the default instruction set.  `SHmedia' specifies the
16707
     32-bit opcodes, and `SHcompact' specifies the 16-bit opcodes
16708
     compatible with previous SH families.  The default depends on the
16709
     ABI selected; the default for the 64-bit ABI is SHmedia, and the
16710
     default for the 32-bit ABI is SHcompact.  If neither the ABI nor
16711
     the ISA is specified, the default is 32-bit SHcompact.
16712
 
16713
     Note that the `.mode' pseudo-op is not permitted if the ISA is not
16714
     specified on the command line.
16715
 
16716
`-abi=32 | -abi=64'
16717
     Specify the default ABI.  If the ISA is specified and the ABI is
16718
     not, the default ABI depends on the ISA, with SHmedia defaulting
16719
     to 64-bit and SHcompact defaulting to 32-bit.
16720
 
16721
     Note that the `.abi' pseudo-op is not permitted if the ABI is not
16722
     specified on the command line.  When the ABI is specified on the
16723
     command line, any `.abi' pseudo-ops in the source must match it.
16724
 
16725
`-shcompact-const-crange'
16726
     Emit code-range descriptors for constants in SHcompact code
16727
     sections.
16728
 
16729
`-no-mix'
16730
     Disallow SHmedia code in the same section as constants and
16731
     SHcompact code.
16732
 
16733
`-no-expand'
16734
     Do not expand MOVI, PT, PTA or PTB instructions.
16735
 
16736
`-expand-pt32'
16737
     With -abi=64, expand PT, PTA and PTB instructions to 32 bits only.
16738
 
16739
`-h-tick-hex'
16740
     Support H'00 style hex constants in addition to 0x00 style.
16741
 
16742
 
16743

16744
File: as.info,  Node: SH64 Syntax,  Next: SH64 Directives,  Prev: SH64 Options,  Up: SH64-Dependent
16745
 
16746
9.38.2 Syntax
16747
-------------
16748
 
16749
* Menu:
16750
 
16751
* SH64-Chars::                Special Characters
16752
* SH64-Regs::                 Register Names
16753
* SH64-Addressing::           Addressing Modes
16754
 
16755

16756
File: as.info,  Node: SH64-Chars,  Next: SH64-Regs,  Up: SH64 Syntax
16757
 
16758
9.38.2.1 Special Characters
16759
...........................
16760
 
16761
`!' is the line comment character.
16762
 
16763
   If a `#' appears as the first character of a line then the whole
16764
line is treated as a comment, but in this case the line could also be a
16765
logical line number directive (*note Comments::) or a preprocessor
16766
control command (*note Preprocessing::).
16767
 
16768
   You can use `;' instead of a newline to separate statements.
16769
 
16770
   Since `$' has no special meaning, you may use it in symbol names.
16771
 
16772

16773
File: as.info,  Node: SH64-Regs,  Next: SH64-Addressing,  Prev: SH64-Chars,  Up: SH64 Syntax
16774
 
16775
9.38.2.2 Register Names
16776
.......................
16777
 
16778
You can use the predefined symbols `r0' through `r63' to refer to the
16779
SH64 general registers, `cr0' through `cr63' for control registers,
16780
`tr0' through `tr7' for target address registers, `fr0' through `fr63'
16781
for single-precision floating point registers, `dr0' through `dr62'
16782
(even numbered registers only) for double-precision floating point
16783
registers, `fv0' through `fv60' (multiples of four only) for
16784
single-precision floating point vectors, `fp0' through `fp62' (even
16785
numbered registers only) for single-precision floating point pairs,
16786
`mtrx0' through `mtrx48' (multiples of 16 only) for 4x4 matrices of
16787
single-precision floating point registers, `pc' for the program
16788
counter, and `fpscr' for the floating point status and control register.
16789
 
16790
   You can also refer to the control registers by the mnemonics `sr',
16791
`ssr', `pssr', `intevt', `expevt', `pexpevt', `tra', `spc', `pspc',
16792
`resvec', `vbr', `tea', `dcr', `kcr0', `kcr1', `ctc', and `usr'.
16793
 
16794

16795
File: as.info,  Node: SH64-Addressing,  Prev: SH64-Regs,  Up: SH64 Syntax
16796
 
16797
9.38.2.3 Addressing Modes
16798
.........................
16799
 
16800
SH64 operands consist of either a register or immediate value.  The
16801
immediate value can be a constant or label reference (or portion of a
16802
label reference), as in this example:
16803
 
16804
        movi    4,r2
16805
        pt      function, tr4
16806
        movi    (function >> 16) & 65535,r0
16807
        shori   function & 65535, r0
16808
        ld.l    r0,4,r0
16809
 
16810
   Instruction label references can reference labels in either SHmedia
16811
or SHcompact.  To differentiate between the two, labels in SHmedia
16812
sections will always have the least significant bit set (i.e. they will
16813
be odd), which SHcompact labels will have the least significant bit
16814
reset (i.e. they will be even).  If you need to reference the actual
16815
address of a label, you can use the `datalabel' modifier, as in this
16816
example:
16817
 
16818
        .long   function
16819
        .long   datalabel function
16820
 
16821
   In that example, the first longword may or may not have the least
16822
significant bit set depending on whether the label is an SHmedia label
16823
or an SHcompact label.  The second longword will be the actual address
16824
of the label, regardless of what type of label it is.
16825
 
16826

16827
File: as.info,  Node: SH64 Directives,  Next: SH64 Opcodes,  Prev: SH64 Syntax,  Up: SH64-Dependent
16828
 
16829
9.38.3 SH64 Machine Directives
16830
------------------------------
16831
 
16832
In addition to the SH directives, the SH64 provides the following
16833
directives:
16834
 
16835
`.mode [shmedia|shcompact]'
16836
`.isa [shmedia|shcompact]'
16837
     Specify the ISA for the following instructions (the two directives
16838
     are equivalent).  Note that programs such as `objdump' rely on
16839
     symbolic labels to determine when such mode switches occur (by
16840
     checking the least significant bit of the label's address), so
16841
     such mode/isa changes should always be followed by a label (in
16842
     practice, this is true anyway).  Note that you cannot use these
16843
     directives if you didn't specify an ISA on the command line.
16844
 
16845
`.abi [32|64]'
16846
     Specify the ABI for the following instructions.  Note that you
16847
     cannot use this directive unless you specified an ABI on the
16848
     command line, and the ABIs specified must match.
16849
 
16850
 
16851

16852
File: as.info,  Node: SH64 Opcodes,  Prev: SH64 Directives,  Up: SH64-Dependent
16853
 
16854
9.38.4 Opcodes
16855
--------------
16856
 
16857
For detailed information on the SH64 machine instruction set, see
16858
`SuperH 64 bit RISC Series Architecture Manual' (SuperH, Inc.).
16859
 
16860
   `as' implements all the standard SH64 opcodes.  In addition, the
16861
following pseudo-opcodes may be expanded into one or more alternate
16862
opcodes:
16863
 
16864
`movi'
16865
     If the value doesn't fit into a standard `movi' opcode, `as' will
16866
     replace the `movi' with a sequence of `movi' and `shori' opcodes.
16867
 
16868
`pt'
16869
     This expands to a sequence of `movi' and `shori' opcode, followed
16870
     by a `ptrel' opcode, or to a `pta' or `ptb' opcode, depending on
16871
     the label referenced.
16872
 
16873
 
16874

16875
File: as.info,  Node: Sparc-Dependent,  Next: TIC54X-Dependent,  Prev: SCORE-Dependent,  Up: Machine Dependencies
16876
 
16877
9.39 SPARC Dependent Features
16878
=============================
16879
 
16880
* Menu:
16881
 
16882
* Sparc-Opts::                  Options
16883
* Sparc-Aligned-Data::          Option to enforce aligned data
16884
* Sparc-Syntax::                Syntax
16885
* Sparc-Float::                 Floating Point
16886
* Sparc-Directives::            Sparc Machine Directives
16887
 
16888

16889
File: as.info,  Node: Sparc-Opts,  Next: Sparc-Aligned-Data,  Up: Sparc-Dependent
16890
 
16891
9.39.1 Options
16892
--------------
16893
 
16894
The SPARC chip family includes several successive versions, using the
16895
same core instruction set, but including a few additional instructions
16896
at each version.  There are exceptions to this however.  For details on
16897
what instructions each variant supports, please see the chip's
16898
architecture reference manual.
16899
 
16900
   By default, `as' assumes the core instruction set (SPARC v6), but
16901
"bumps" the architecture level as needed: it switches to successively
16902
higher architectures as it encounters instructions that only exist in
16903
the higher levels.
16904
 
16905
   If not configured for SPARC v9 (`sparc64-*-*') GAS will not bump
16906
past sparclite by default, an option must be passed to enable the v9
16907
instructions.
16908
 
16909
   GAS treats sparclite as being compatible with v8, unless an
16910
architecture is explicitly requested.  SPARC v9 is always incompatible
16911
with sparclite.
16912
 
16913
`-Av6 | -Av7 | -Av8 | -Asparclet | -Asparclite'
16914
`-Av8plus | -Av8plusa | -Av8plusb | -Av8plusc | -Av8plusd | -Av8plusv'
16915
`-Av9 | -Av9a | -Av9b | -Av9c | -Av9d | -Av9v'
16916
`-Asparc | -Asparcvis | -Asparcvis2 | -Asparcfmaf | -Asparcima'
16917
`-Asparcvis3 | -Asparcvis3r'
16918
     Use one of the `-A' options to select one of the SPARC
16919
     architectures explicitly.  If you select an architecture
16920
     explicitly, `as' reports a fatal error if it encounters an
16921
     instruction or feature requiring an incompatible or higher level.
16922
 
16923
     `-Av8plus', `-Av8plusa', `-Av8plusb', `-Av8plusc', `-Av8plusd',
16924
     and `-Av8plusv' select a 32 bit environment.
16925
 
16926
     `-Av9', `-Av9a', `-Av9b', `-Av9c', `-Av9d', and `-Av9v' select a
16927
     64 bit environment and are not available unless GAS is explicitly
16928
     configured with 64 bit environment support.
16929
 
16930
     `-Av8plusa' and `-Av9a' enable the SPARC V9 instruction set with
16931
     UltraSPARC VIS 1.0 extensions.
16932
 
16933
     `-Av8plusb' and `-Av9b' enable the UltraSPARC VIS 2.0 instructions,
16934
     as well as the instructions enabled by `-Av8plusa' and `-Av9a'.
16935
 
16936
     `-Av8plusc' and `-Av9c' enable the UltraSPARC Niagara instructions,
16937
     as well as the instructions enabled by `-Av8plusb' and `-Av9b'.
16938
 
16939
     `-Av8plusd' and `-Av9d' enable the floating point fused
16940
     multiply-add, VIS 3.0, and HPC extension instructions, as well as
16941
     the instructions enabled by `-Av8plusc' and `-Av9c'.
16942
 
16943
     `-Av8plusv' and `-Av9v' enable the 'random', transactional memory,
16944
     floating point unfused multiply-add, integer multiply-add, and
16945
     cache sparing store instructions, as well as the instructions
16946
     enabled by `-Av8plusd' and `-Av9d'.
16947
 
16948
     `-Asparc' specifies a v9 environment.  It is equivalent to `-Av9'
16949
     if the word size is 64-bit, and `-Av8plus' otherwise.
16950
 
16951
     `-Asparcvis' specifies a v9a environment.  It is equivalent to
16952
     `-Av9a' if the word size is 64-bit, and `-Av8plusa' otherwise.
16953
 
16954
     `-Asparcvis2' specifies a v9b environment.  It is equivalent to
16955
     `-Av9b' if the word size is 64-bit, and `-Av8plusb' otherwise.
16956
 
16957
     `-Asparcfmaf' specifies a v9b environment with the floating point
16958
     fused multiply-add instructions enabled.
16959
 
16960
     `-Asparcima' specifies a v9b environment with the integer
16961
     multiply-add instructions enabled.
16962
 
16963
     `-Asparcvis3' specifies a v9b environment with the VIS 3.0, HPC ,
16964
     and floating point fused multiply-add instructions enabled.
16965
 
16966
     `-Asparcvis3r' specifies a v9b environment with the VIS 3.0, HPC,
16967
     transactional memory, random, and floating point unfused
16968
     multiply-add instructions enabled.
16969
 
16970
`-xarch=v8plus | -xarch=v8plusa | -xarch=v8plusb | -xarch=v8plusc'
16971
`-xarch=v8plusd | -xarch=v8plusv | -xarch=v9 | -xarch=v9a'
16972
`-xarch=v9b | -xarch=v9c | -xarch=v9d | -xarch=v9v'
16973
`-xarch=sparc | -xarch=sparcvis | -xarch=sparcvis2'
16974
`-xarch=sparcfmaf | -xarch=sparcima | -xarch=sparcvis3'
16975
`-xarch=sparcvis3r'
16976
     For compatibility with the SunOS v9 assembler.  These options are
16977
     equivalent to -Av8plus, -Av8plusa, -Av8plusb, -Av8plusc, -Av8plusd,
16978
     -Av8plusv, -Av9, -Av9a, -Av9b, -Av9c, -Av9d, -Av9v, -Asparc,
16979
     -Asparcvis, -Asparcvis2, -Asparcfmaf, -Asparcima, -Asparcvis3, and
16980
     -Asparcvis3r, respectively.
16981
 
16982
`-bump'
16983
     Warn whenever it is necessary to switch to another level.  If an
16984
     architecture level is explicitly requested, GAS will not issue
16985
     warnings until that level is reached, and will then bump the level
16986
     as required (except between incompatible levels).
16987
 
16988
`-32 | -64'
16989
     Select the word size, either 32 bits or 64 bits.  These options
16990
     are only available with the ELF object file format, and require
16991
     that the necessary BFD support has been included.
16992
 
16993

16994
File: as.info,  Node: Sparc-Aligned-Data,  Next: Sparc-Syntax,  Prev: Sparc-Opts,  Up: Sparc-Dependent
16995
 
16996
9.39.2 Enforcing aligned data
16997
-----------------------------
16998
 
16999
SPARC GAS normally permits data to be misaligned.  For example, it
17000
permits the `.long' pseudo-op to be used on a byte boundary.  However,
17001
the native SunOS assemblers issue an error when they see misaligned
17002
data.
17003
 
17004
   You can use the `--enforce-aligned-data' option to make SPARC GAS
17005
also issue an error about misaligned data, just as the SunOS assemblers
17006
do.
17007
 
17008
   The `--enforce-aligned-data' option is not the default because gcc
17009
issues misaligned data pseudo-ops when it initializes certain packed
17010
data structures (structures defined using the `packed' attribute).  You
17011
may have to assemble with GAS in order to initialize packed data
17012
structures in your own code.
17013
 
17014

17015
File: as.info,  Node: Sparc-Syntax,  Next: Sparc-Float,  Prev: Sparc-Aligned-Data,  Up: Sparc-Dependent
17016
 
17017
9.39.3 Sparc Syntax
17018
-------------------
17019
 
17020
The assembler syntax closely follows The Sparc Architecture Manual,
17021
versions 8 and 9, as well as most extensions defined by Sun for their
17022
UltraSPARC and Niagara line of processors.
17023
 
17024
* Menu:
17025
 
17026
* Sparc-Chars::                Special Characters
17027
* Sparc-Regs::                 Register Names
17028
* Sparc-Constants::            Constant Names
17029
* Sparc-Relocs::               Relocations
17030
* Sparc-Size-Translations::    Size Translations
17031
 
17032

17033
File: as.info,  Node: Sparc-Chars,  Next: Sparc-Regs,  Up: Sparc-Syntax
17034
 
17035
9.39.3.1 Special Characters
17036
...........................
17037
 
17038
A `!' character appearing anywhere on a line indicates the start of a
17039
comment that extends to the end of that line.
17040
 
17041
   If a `#' appears as the first character of a line then the whole
17042
line is treated as a comment, but in this case the line could also be a
17043
logical line number directive (*note Comments::) or a preprocessor
17044
control command (*note Preprocessing::).
17045
 
17046
   `;' can be used instead of a newline to separate statements.
17047
 
17048

17049
File: as.info,  Node: Sparc-Regs,  Next: Sparc-Constants,  Prev: Sparc-Chars,  Up: Sparc-Syntax
17050
 
17051
9.39.3.2 Register Names
17052
.......................
17053
 
17054
The Sparc integer register file is broken down into global, outgoing,
17055
local, and incoming.
17056
 
17057
   * The 8 global registers are referred to as `%gN'.
17058
 
17059
   * The 8 outgoing registers are referred to as `%oN'.
17060
 
17061
   * The 8 local registers are referred to as `%lN'.
17062
 
17063
   * The 8 incoming registers are referred to as `%iN'.
17064
 
17065
   * The frame pointer register `%i6' can be referenced using the alias
17066
     `%fp'.
17067
 
17068
   * The stack pointer register `%o6' can be referenced using the alias
17069
     `%sp'.
17070
 
17071
   Floating point registers are simply referred to as `%fN'.  When
17072
assembling for pre-V9, only 32 floating point registers are available.
17073
For V9 and later there are 64, but there are restrictions when
17074
referencing the upper 32 registers.  They can only be accessed as
17075
double or quad, and thus only even or quad numbered accesses are
17076
allowed.  For example, `%f34' is a legal floating point register, but
17077
`%f35' is not.
17078
 
17079
   Certain V9 instructions allow access to ancillary state registers.
17080
Most simply they can be referred to as `%asrN' where N can be from 16
17081
to 31.  However, there are some aliases defined to reference ASR
17082
registers defined for various UltraSPARC processors:
17083
 
17084
   * The tick compare register is referred to as `%tick_cmpr'.
17085
 
17086
   * The system tick register is referred to as `%stick'.  An alias,
17087
     `%sys_tick', exists but is deprecated and should not be used by
17088
     new software.
17089
 
17090
   * The system tick compare register is referred to as `%stick_cmpr'.
17091
     An alias, `%sys_tick_cmpr', exists but is deprecated and should
17092
     not be used by new software.
17093
 
17094
   * The software interrupt register is referred to as `%softint'.
17095
 
17096
   * The set software interrupt register is referred to as
17097
     `%set_softint'.  The mnemonic `%softint_set' is provided as an
17098
     alias.
17099
 
17100
   * The clear software interrupt register is referred to as
17101
     `%clear_softint'.  The mnemonic `%softint_clear' is provided as an
17102
     alias.
17103
 
17104
   * The performance instrumentation counters register is referred to as
17105
     `%pic'.
17106
 
17107
   * The performance control register is referred to as `%pcr'.
17108
 
17109
   * The graphics status register is referred to as `%gsr'.
17110
 
17111
   * The V9 dispatch control register is referred to as `%dcr'.
17112
 
17113
   Various V9 branch and conditional move instructions allow
17114
specification of which set of integer condition codes to test.  These
17115
are referred to as `%xcc' and `%icc'.
17116
 
17117
   In V9, there are 4 sets of floating point condition codes which are
17118
referred to as `%fccN'.
17119
 
17120
   Several special privileged and non-privileged registers exist:
17121
 
17122
   * The V9 address space identifier register is referred to as `%asi'.
17123
 
17124
   * The V9 restorable windows register is referred to as `%canrestore'.
17125
 
17126
   * The V9 savable windows register is referred to as `%cansave'.
17127
 
17128
   * The V9 clean windows register is referred to as `%cleanwin'.
17129
 
17130
   * The V9 current window pointer register is referred to as `%cwp'.
17131
 
17132
   * The floating-point queue register is referred to as `%fq'.
17133
 
17134
   * The V8 co-processor queue register is referred to as `%cq'.
17135
 
17136
   * The floating point status register is referred to as `%fsr'.
17137
 
17138
   * The other windows register is referred to as `%otherwin'.
17139
 
17140
   * The V9 program counter register is referred to as `%pc'.
17141
 
17142
   * The V9 next program counter register is referred to as `%npc'.
17143
 
17144
   * The V9 processor interrupt level register is referred to as `%pil'.
17145
 
17146
   * The V9 processor state register is referred to as `%pstate'.
17147
 
17148
   * The trap base address register is referred to as `%tba'.
17149
 
17150
   * The V9 tick register is referred to as `%tick'.
17151
 
17152
   * The V9 trap level is referred to as `%tl'.
17153
 
17154
   * The V9 trap program counter is referred to as `%tpc'.
17155
 
17156
   * The V9 trap next program counter is referred to as `%tnpc'.
17157
 
17158
   * The V9 trap state is referred to as `%tstate'.
17159
 
17160
   * The V9 trap type is referred to as `%tt'.
17161
 
17162
   * The V9 condition codes is referred to as `%ccr'.
17163
 
17164
   * The V9 floating-point registers state is referred to as `%fprs'.
17165
 
17166
   * The V9 version register is referred to as `%ver'.
17167
 
17168
   * The V9 window state register is referred to as `%wstate'.
17169
 
17170
   * The Y register is referred to as `%y'.
17171
 
17172
   * The V8 window invalid mask register is referred to as `%wim'.
17173
 
17174
   * The V8 processor state register is referred to as `%psr'.
17175
 
17176
   * The V9 global register level register is referred to as `%gl'.
17177
 
17178
   Several special register names exist for hypervisor mode code:
17179
 
17180
   * The hyperprivileged processor state register is referred to as
17181
     `%hpstate'.
17182
 
17183
   * The hyperprivileged trap state register is referred to as
17184
     `%htstate'.
17185
 
17186
   * The hyperprivileged interrupt pending register is referred to as
17187
     `%hintp'.
17188
 
17189
   * The hyperprivileged trap base address register is referred to as
17190
     `%htba'.
17191
 
17192
   * The hyperprivileged implementation version register is referred to
17193
     as `%hver'.
17194
 
17195
   * The hyperprivileged system tick compare register is referred to as
17196
     `%hstick_cmpr'.  Note that there is no `%hstick' register, the
17197
     normal `%stick' is used.
17198
 
17199

17200
File: as.info,  Node: Sparc-Constants,  Next: Sparc-Relocs,  Prev: Sparc-Regs,  Up: Sparc-Syntax
17201
 
17202
9.39.3.3 Constants
17203
..................
17204
 
17205
Several Sparc instructions take an immediate operand field for which
17206
mnemonic names exist.  Two such examples are `membar' and `prefetch'.
17207
Another example are the set of V9 memory access instruction that allow
17208
specification of an address space identifier.
17209
 
17210
   The `membar' instruction specifies a memory barrier that is the
17211
defined by the operand which is a bitmask.  The supported mask
17212
mnemonics are:
17213
 
17214
   * `#Sync' requests that all operations (including nonmemory
17215
     reference operations) appearing prior to the `membar' must have
17216
     been performed and the effects of any exceptions become visible
17217
     before any instructions after the `membar' may be initiated.  This
17218
     corresponds to `membar' cmask field bit 2.
17219
 
17220
   * `#MemIssue' requests that all memory reference operations
17221
     appearing prior to the `membar' must have been performed before
17222
     any memory operation after the `membar' may be initiated.  This
17223
     corresponds to `membar' cmask field bit 1.
17224
 
17225
   * `#Lookaside' requests that a store appearing prior to the `membar'
17226
     must complete before any load following the `membar' referencing
17227
     the same address can be initiated.  This corresponds to `membar'
17228
     cmask field bit 0.
17229
 
17230
   * `#StoreStore' defines that the effects of all stores appearing
17231
     prior to the `membar' instruction must be visible to all
17232
     processors before the effect of any stores following the `membar'.
17233
     Equivalent to the deprecated `stbar' instruction.  This
17234
     corresponds to `membar' mmask field bit 3.
17235
 
17236
   * `#LoadStore' defines all loads appearing prior to the `membar'
17237
     instruction must have been performed before the effect of any
17238
     stores following the `membar' is visible to any other processor.
17239
     This corresponds to `membar' mmask field bit 2.
17240
 
17241
   * `#StoreLoad' defines that the effects of all stores appearing
17242
     prior to the `membar' instruction must be visible to all
17243
     processors before loads following the `membar' may be performed.
17244
     This corresponds to `membar' mmask field bit 1.
17245
 
17246
   * `#LoadLoad' defines that all loads appearing prior to the `membar'
17247
     instruction must have been performed before any loads following
17248
     the `membar' may be performed.  This corresponds to `membar' mmask
17249
     field bit 0.
17250
 
17251
 
17252
   These values can be ored together, for example:
17253
 
17254
     membar #Sync
17255
     membar #StoreLoad | #LoadLoad
17256
     membar #StoreLoad | #StoreStore
17257
 
17258
   The `prefetch' and `prefetcha' instructions take a prefetch function
17259
code.  The following prefetch function code constant mnemonics are
17260
available:
17261
 
17262
   * `#n_reads' requests a prefetch for several reads, and corresponds
17263
     to a prefetch function code of 0.
17264
 
17265
     `#one_read' requests a prefetch for one read, and corresponds to a
17266
     prefetch function code of 1.
17267
 
17268
     `#n_writes' requests a prefetch for several writes (and possibly
17269
     reads), and corresponds to a prefetch function code of 2.
17270
 
17271
     `#one_write' requests a prefetch for one write, and corresponds to
17272
     a prefetch function code of 3.
17273
 
17274
     `#page' requests a prefetch page, and corresponds to a prefetch
17275
     function code of 4.
17276
 
17277
     `#invalidate' requests a prefetch invalidate, and corresponds to a
17278
     prefetch function code of 16.
17279
 
17280
     `#unified' requests a prefetch to the nearest unified cache, and
17281
     corresponds to a prefetch function code of 17.
17282
 
17283
     `#n_reads_strong' requests a strong prefetch for several reads,
17284
     and corresponds to a prefetch function code of 20.
17285
 
17286
     `#one_read_strong' requests a strong prefetch for one read, and
17287
     corresponds to a prefetch function code of 21.
17288
 
17289
     `#n_writes_strong' requests a strong prefetch for several writes,
17290
     and corresponds to a prefetch function code of 22.
17291
 
17292
     `#one_write_strong' requests a strong prefetch for one write, and
17293
     corresponds to a prefetch function code of 23.
17294
 
17295
     Onle one prefetch code may be specified.  Here are some examples:
17296
 
17297
          prefetch  [%l0 + %l2], #one_read
17298
          prefetch  [%g2 + 8], #n_writes
17299
          prefetcha [%g1] 0x8, #unified
17300
          prefetcha [%o0 + 0x10] %asi, #n_reads
17301
 
17302
     The actual behavior of a given prefetch function code is processor
17303
     specific.  If a processor does not implement a given prefetch
17304
     function code, it will treat the prefetch instruction as a nop.
17305
 
17306
     For instructions that accept an immediate address space identifier,
17307
     `as' provides many mnemonics corresponding to V9 defined as well
17308
     as UltraSPARC and Niagara extended values.  For example, `#ASI_P'
17309
     and `#ASI_BLK_INIT_QUAD_LDD_AIUS'.  See the V9 and processor
17310
     specific manuals for details.
17311
 
17312
 
17313

17314
File: as.info,  Node: Sparc-Relocs,  Next: Sparc-Size-Translations,  Prev: Sparc-Constants,  Up: Sparc-Syntax
17315
 
17316
9.39.3.4 Relocations
17317
....................
17318
 
17319
ELF relocations are available as defined in the 32-bit and 64-bit Sparc
17320
ELF specifications.
17321
 
17322
   `R_SPARC_HI22' is obtained using `%hi' and `R_SPARC_LO10' is
17323
obtained using `%lo'.  Likewise `R_SPARC_HIX22' is obtained from `%hix'
17324
and `R_SPARC_LOX10' is obtained using `%lox'.  For example:
17325
 
17326
     sethi %hi(symbol), %g1
17327
     or    %g1, %lo(symbol), %g1
17328
 
17329
     sethi %hix(symbol), %g1
17330
     xor   %g1, %lox(symbol), %g1
17331
 
17332
   These "high" mnemonics extract bits 31:10 of their operand, and the
17333
"low" mnemonics extract bits 9:0 of their operand.
17334
 
17335
   V9 code model relocations can be requested as follows:
17336
 
17337
   * `R_SPARC_HH22' is requested using `%hh'.  It can also be generated
17338
     using `%uhi'.
17339
 
17340
   * `R_SPARC_HM10' is requested using `%hm'.  It can also be generated
17341
     using `%ulo'.
17342
 
17343
   * `R_SPARC_LM22' is requested using `%lm'.
17344
 
17345
   * `R_SPARC_H44' is requested using `%h44'.
17346
 
17347
   * `R_SPARC_M44' is requested using `%m44'.
17348
 
17349
   * `R_SPARC_L44' is requested using `%l44' or `%l34'.
17350
 
17351
   * `R_SPARC_H34' is requested using `%h34'.
17352
 
17353
   The `%l34' generates a `R_SPARC_L44' relocation because it
17354
calculates the necessary value, and therefore no explicit `R_SPARC_L34'
17355
relocation needed to be created for this purpose.
17356
 
17357
   The `%h34' and `%l34' relocations are used for the abs34 code model.
17358
Here is an example abs34 address generation sequence:
17359
 
17360
     sethi %h34(symbol), %g1
17361
     sllx  %g1, 2, %g1
17362
     or    %g1, %l34(symbol), %g1
17363
 
17364
   The PC relative relocation `R_SPARC_PC22' can be obtained by
17365
enclosing an operand inside of `%pc22'.  Likewise, the `R_SPARC_PC10'
17366
relocation can be obtained using `%pc10'.  These are mostly used when
17367
assembling PIC code.  For example, the standard PIC sequence on Sparc
17368
to get the base of the global offset table, PC relative, into a
17369
register, can be performed as:
17370
 
17371
     sethi %pc22(_GLOBAL_OFFSET_TABLE_-4), %l7
17372
     add   %l7, %pc10(_GLOBAL_OFFSET_TABLE_+4), %l7
17373
 
17374
   Several relocations exist to allow the link editor to potentially
17375
optimize GOT data references.  The `R_SPARC_GOTDATA_OP_HIX22'
17376
relocation can obtained by enclosing an operand inside of
17377
`%gdop_hix22'.  The `R_SPARC_GOTDATA_OP_LOX10' relocation can obtained
17378
by enclosing an operand inside of `%gdop_lox10'.  Likewise,
17379
`R_SPARC_GOTDATA_OP' can be obtained by enclosing an operand inside of
17380
`%gdop'.  For example, assuming the GOT base is in register `%l7':
17381
 
17382
     sethi %gdop_hix22(symbol), %l1
17383
     xor   %l1, %gdop_lox10(symbol), %l1
17384
     ld    [%l7 + %l1], %l2, %gdop(symbol)
17385
 
17386
   There are many relocations that can be requested for access to
17387
thread local storage variables.  All of the Sparc TLS mnemonics are
17388
supported:
17389
 
17390
   * `R_SPARC_TLS_GD_HI22' is requested using `%tgd_hi22'.
17391
 
17392
   * `R_SPARC_TLS_GD_LO10' is requested using `%tgd_lo10'.
17393
 
17394
   * `R_SPARC_TLS_GD_ADD' is requested using `%tgd_add'.
17395
 
17396
   * `R_SPARC_TLS_GD_CALL' is requested using `%tgd_call'.
17397
 
17398
   * `R_SPARC_TLS_LDM_HI22' is requested using `%tldm_hi22'.
17399
 
17400
   * `R_SPARC_TLS_LDM_LO10' is requested using `%tldm_lo10'.
17401
 
17402
   * `R_SPARC_TLS_LDM_ADD' is requested using `%tldm_add'.
17403
 
17404
   * `R_SPARC_TLS_LDM_CALL' is requested using `%tldm_call'.
17405
 
17406
   * `R_SPARC_TLS_LDO_HIX22' is requested using `%tldo_hix22'.
17407
 
17408
   * `R_SPARC_TLS_LDO_LOX10' is requested using `%tldo_lox10'.
17409
 
17410
   * `R_SPARC_TLS_LDO_ADD' is requested using `%tldo_add'.
17411
 
17412
   * `R_SPARC_TLS_IE_HI22' is requested using `%tie_hi22'.
17413
 
17414
   * `R_SPARC_TLS_IE_LO10' is requested using `%tie_lo10'.
17415
 
17416
   * `R_SPARC_TLS_IE_LD' is requested using `%tie_ld'.
17417
 
17418
   * `R_SPARC_TLS_IE_LDX' is requested using `%tie_ldx'.
17419
 
17420
   * `R_SPARC_TLS_IE_ADD' is requested using `%tie_add'.
17421
 
17422
   * `R_SPARC_TLS_LE_HIX22' is requested using `%tle_hix22'.
17423
 
17424
   * `R_SPARC_TLS_LE_LOX10' is requested using `%tle_lox10'.
17425
 
17426
   Here are some example TLS model sequences.
17427
 
17428
   First, General Dynamic:
17429
 
17430
     sethi  %tgd_hi22(symbol), %l1
17431
     add    %l1, %tgd_lo10(symbol), %l1
17432
     add    %l7, %l1, %o0, %tgd_add(symbol)
17433
     call   __tls_get_addr, %tgd_call(symbol)
17434
     nop
17435
 
17436
   Local Dynamic:
17437
 
17438
     sethi  %tldm_hi22(symbol), %l1
17439
     add    %l1, %tldm_lo10(symbol), %l1
17440
     add    %l7, %l1, %o0, %tldm_add(symbol)
17441
     call   __tls_get_addr, %tldm_call(symbol)
17442
     nop
17443
 
17444
     sethi  %tldo_hix22(symbol), %l1
17445
     xor    %l1, %tldo_lox10(symbol), %l1
17446
     add    %o0, %l1, %l1, %tldo_add(symbol)
17447
 
17448
   Initial Exec:
17449
 
17450
     sethi  %tie_hi22(symbol), %l1
17451
     add    %l1, %tie_lo10(symbol), %l1
17452
     ld     [%l7 + %l1], %o0, %tie_ld(symbol)
17453
     add    %g7, %o0, %o0, %tie_add(symbol)
17454
 
17455
     sethi  %tie_hi22(symbol), %l1
17456
     add    %l1, %tie_lo10(symbol), %l1
17457
     ldx    [%l7 + %l1], %o0, %tie_ldx(symbol)
17458
     add    %g7, %o0, %o0, %tie_add(symbol)
17459
 
17460
   And finally, Local Exec:
17461
 
17462
     sethi  %tle_hix22(symbol), %l1
17463
     add    %l1, %tle_lox10(symbol), %l1
17464
     add    %g7, %l1, %l1
17465
 
17466
   When assembling for 64-bit, and a secondary constant addend is
17467
specified in an address expression that would normally generate an
17468
`R_SPARC_LO10' relocation, the assembler will emit an `R_SPARC_OLO10'
17469
instead.
17470
 
17471

17472
File: as.info,  Node: Sparc-Size-Translations,  Prev: Sparc-Relocs,  Up: Sparc-Syntax
17473
 
17474
9.39.3.5 Size Translations
17475
..........................
17476
 
17477
Often it is desirable to write code in an operand size agnostic manner.
17478
`as' provides support for this via operand size opcode translations.
17479
Translations are supported for loads, stores, shifts, compare-and-swap
17480
atomics, and the `clr' synthetic instruction.
17481
 
17482
   If generating 32-bit code, `as' will generate the 32-bit opcode.
17483
Whereas if 64-bit code is being generated, the 64-bit opcode will be
17484
emitted.  For example `ldn' will be transformed into `ld' for 32-bit
17485
code and `ldx' for 64-bit code.
17486
 
17487
   Here is an example meant to demonstrate all the supported opcode
17488
translations:
17489
 
17490
     ldn   [%o0], %o1
17491
     ldna  [%o0] %asi, %o2
17492
     stn   %o1, [%o0]
17493
     stna  %o2, [%o0] %asi
17494
     slln  %o3, 3, %o3
17495
     srln  %o4, 8, %o4
17496
     sran  %o5, 12, %o5
17497
     casn  [%o0], %o1, %o2
17498
     casna [%o0] %asi, %o1, %o2
17499
     clrn  %g1
17500
 
17501
   In 32-bit mode `as' will emit:
17502
 
17503
     ld   [%o0], %o1
17504
     lda  [%o0] %asi, %o2
17505
     st   %o1, [%o0]
17506
     sta  %o2, [%o0] %asi
17507
     sll  %o3, 3, %o3
17508
     srl  %o4, 8, %o4
17509
     sra  %o5, 12, %o5
17510
     cas  [%o0], %o1, %o2
17511
     casa [%o0] %asi, %o1, %o2
17512
     clr  %g1
17513
 
17514
   And in 64-bit mode `as' will emit:
17515
 
17516
     ldx   [%o0], %o1
17517
     ldxa  [%o0] %asi, %o2
17518
     stx   %o1, [%o0]
17519
     stxa  %o2, [%o0] %asi
17520
     sllx  %o3, 3, %o3
17521
     srlx  %o4, 8, %o4
17522
     srax  %o5, 12, %o5
17523
     casx  [%o0], %o1, %o2
17524
     casxa [%o0] %asi, %o1, %o2
17525
     clrx  %g1
17526
 
17527
   Finally, the `.nword' translating directive is supported as well.
17528
It is documented in the section on Sparc machine directives.
17529
 
17530

17531
File: as.info,  Node: Sparc-Float,  Next: Sparc-Directives,  Prev: Sparc-Syntax,  Up: Sparc-Dependent
17532
 
17533
9.39.4 Floating Point
17534
---------------------
17535
 
17536
The Sparc uses IEEE floating-point numbers.
17537
 
17538

17539
File: as.info,  Node: Sparc-Directives,  Prev: Sparc-Float,  Up: Sparc-Dependent
17540
 
17541
9.39.5 Sparc Machine Directives
17542
-------------------------------
17543
 
17544
The Sparc version of `as' supports the following additional machine
17545
directives:
17546
 
17547
`.align'
17548
     This must be followed by the desired alignment in bytes.
17549
 
17550
`.common'
17551
     This must be followed by a symbol name, a positive number, and
17552
     `"bss"'.  This behaves somewhat like `.comm', but the syntax is
17553
     different.
17554
 
17555
`.half'
17556
     This is functionally identical to `.short'.
17557
 
17558
`.nword'
17559
     On the Sparc, the `.nword' directive produces native word sized
17560
     value, ie. if assembling with -32 it is equivalent to `.word', if
17561
     assembling with -64 it is equivalent to `.xword'.
17562
 
17563
`.proc'
17564
     This directive is ignored.  Any text following it on the same line
17565
     is also ignored.
17566
 
17567
`.register'
17568
     This directive declares use of a global application or system
17569
     register.  It must be followed by a register name %g2, %g3, %g6 or
17570
     %g7, comma and the symbol name for that register.  If symbol name
17571
     is `#scratch', it is a scratch register, if it is `#ignore', it
17572
     just suppresses any errors about using undeclared global register,
17573
     but does not emit any information about it into the object file.
17574
     This can be useful e.g. if you save the register before use and
17575
     restore it after.
17576
 
17577
`.reserve'
17578
     This must be followed by a symbol name, a positive number, and
17579
     `"bss"'.  This behaves somewhat like `.lcomm', but the syntax is
17580
     different.
17581
 
17582
`.seg'
17583
     This must be followed by `"text"', `"data"', or `"data1"'.  It
17584
     behaves like `.text', `.data', or `.data 1'.
17585
 
17586
`.skip'
17587
     This is functionally identical to the `.space' directive.
17588
 
17589
`.word'
17590
     On the Sparc, the `.word' directive produces 32 bit values,
17591
     instead of the 16 bit values it produces on many other machines.
17592
 
17593
`.xword'
17594
     On the Sparc V9 processor, the `.xword' directive produces 64 bit
17595
     values.
17596
 
17597

17598
File: as.info,  Node: TIC54X-Dependent,  Next: TIC6X-Dependent,  Prev: Sparc-Dependent,  Up: Machine Dependencies
17599
 
17600
9.40 TIC54X Dependent Features
17601
==============================
17602
 
17603
* Menu:
17604
 
17605
* TIC54X-Opts::              Command-line Options
17606
* TIC54X-Block::             Blocking
17607
* TIC54X-Env::               Environment Settings
17608
* TIC54X-Constants::         Constants Syntax
17609
* TIC54X-Subsyms::           String Substitution
17610
* TIC54X-Locals::            Local Label Syntax
17611
* TIC54X-Builtins::          Builtin Assembler Math Functions
17612
* TIC54X-Ext::               Extended Addressing Support
17613
* TIC54X-Directives::        Directives
17614
* TIC54X-Macros::            Macro Features
17615
* TIC54X-MMRegs::            Memory-mapped Registers
17616
* TIC54X-Syntax::            Syntax
17617
 
17618

17619
File: as.info,  Node: TIC54X-Opts,  Next: TIC54X-Block,  Up: TIC54X-Dependent
17620
 
17621
9.40.1 Options
17622
--------------
17623
 
17624
The TMS320C54X version of `as' has a few machine-dependent options.
17625
 
17626
   You can use the `-mfar-mode' option to enable extended addressing
17627
mode.  All addresses will be assumed to be > 16 bits, and the
17628
appropriate relocation types will be used.  This option is equivalent
17629
to using the `.far_mode' directive in the assembly code.  If you do not
17630
use the `-mfar-mode' option, all references will be assumed to be 16
17631
bits.  This option may be abbreviated to `-mf'.
17632
 
17633
   You can use the `-mcpu' option to specify a particular CPU.  This
17634
option is equivalent to using the `.version' directive in the assembly
17635
code.  For recognized CPU codes, see *Note `.version':
17636
TIC54X-Directives.  The default CPU version is `542'.
17637
 
17638
   You can use the `-merrors-to-file' option to redirect error output
17639
to a file (this provided for those deficient environments which don't
17640
provide adequate output redirection).  This option may be abbreviated to
17641
`-me'.
17642
 
17643

17644
File: as.info,  Node: TIC54X-Block,  Next: TIC54X-Env,  Prev: TIC54X-Opts,  Up: TIC54X-Dependent
17645
 
17646
9.40.2 Blocking
17647
---------------
17648
 
17649
A blocked section or memory block is guaranteed not to cross the
17650
blocking boundary (usually a page, or 128 words) if it is smaller than
17651
the blocking size, or to start on a page boundary if it is larger than
17652
the blocking size.
17653
 
17654

17655
File: as.info,  Node: TIC54X-Env,  Next: TIC54X-Constants,  Prev: TIC54X-Block,  Up: TIC54X-Dependent
17656
 
17657
9.40.3 Environment Settings
17658
---------------------------
17659
 
17660
`C54XDSP_DIR' and `A_DIR' are semicolon-separated paths which are added
17661
to the list of directories normally searched for source and include
17662
files.  `C54XDSP_DIR' will override `A_DIR'.
17663
 
17664

17665
File: as.info,  Node: TIC54X-Constants,  Next: TIC54X-Subsyms,  Prev: TIC54X-Env,  Up: TIC54X-Dependent
17666
 
17667
9.40.4 Constants Syntax
17668
-----------------------
17669
 
17670
The TIC54X version of `as' allows the following additional constant
17671
formats, using a suffix to indicate the radix:
17672
 
17673
     Binary                  `000000B, 011000b'
17674
     Octal                   `10Q, 224q'
17675
     Hexadecimal             `45h, 0FH'
17676
 
17677

17678
File: as.info,  Node: TIC54X-Subsyms,  Next: TIC54X-Locals,  Prev: TIC54X-Constants,  Up: TIC54X-Dependent
17679
 
17680
9.40.5 String Substitution
17681
--------------------------
17682
 
17683
A subset of allowable symbols (which we'll call subsyms) may be assigned
17684
arbitrary string values.  This is roughly equivalent to C preprocessor
17685
#define macros.  When `as' encounters one of these symbols, the symbol
17686
is replaced in the input stream by its string value.  Subsym names
17687
*must* begin with a letter.
17688
 
17689
   Subsyms may be defined using the `.asg' and `.eval' directives
17690
(*Note `.asg': TIC54X-Directives, *Note `.eval': TIC54X-Directives.
17691
 
17692
   Expansion is recursive until a previously encountered symbol is
17693
seen, at which point substitution stops.
17694
 
17695
   In this example, x is replaced with SYM2; SYM2 is replaced with
17696
SYM1, and SYM1 is replaced with x.  At this point, x has already been
17697
encountered and the substitution stops.
17698
 
17699
      .asg   "x",SYM1
17700
      .asg   "SYM1",SYM2
17701
      .asg   "SYM2",x
17702
      add    x,a             ; final code assembled is "add  x, a"
17703
 
17704
   Macro parameters are converted to subsyms; a side effect of this is
17705
the normal `as' '\ARG' dereferencing syntax is unnecessary.  Subsyms
17706
defined within a macro will have global scope, unless the `.var'
17707
directive is used to identify the subsym as a local macro variable
17708
*note `.var': TIC54X-Directives.
17709
 
17710
   Substitution may be forced in situations where replacement might be
17711
ambiguous by placing colons on either side of the subsym.  The following
17712
code:
17713
 
17714
      .eval  "10",x
17715
     LAB:X:  add     #x, a
17716
 
17717
   When assembled becomes:
17718
 
17719
     LAB10  add     #10, a
17720
 
17721
   Smaller parts of the string assigned to a subsym may be accessed with
17722
the following syntax:
17723
 
17724
``:SYMBOL(CHAR_INDEX):''
17725
     Evaluates to a single-character string, the character at
17726
     CHAR_INDEX.
17727
 
17728
``:SYMBOL(START,LENGTH):''
17729
     Evaluates to a substring of SYMBOL beginning at START with length
17730
     LENGTH.
17731
 
17732

17733
File: as.info,  Node: TIC54X-Locals,  Next: TIC54X-Builtins,  Prev: TIC54X-Subsyms,  Up: TIC54X-Dependent
17734
 
17735
9.40.6 Local Labels
17736
-------------------
17737
 
17738
Local labels may be defined in two ways:
17739
 
17740
   * $N, where N is a decimal number between 0 and 9
17741
 
17742
   * LABEL?, where LABEL is any legal symbol name.
17743
 
17744
   Local labels thus defined may be redefined or automatically
17745
generated.  The scope of a local label is based on when it may be
17746
undefined or reset.  This happens when one of the following situations
17747
is encountered:
17748
 
17749
   * .newblock directive *note `.newblock': TIC54X-Directives.
17750
 
17751
   * The current section is changed (.sect, .text, or .data)
17752
 
17753
   * Entering or leaving an included file
17754
 
17755
   * The macro scope where the label was defined is exited
17756
 
17757

17758
File: as.info,  Node: TIC54X-Builtins,  Next: TIC54X-Ext,  Prev: TIC54X-Locals,  Up: TIC54X-Dependent
17759
 
17760
9.40.7 Math Builtins
17761
--------------------
17762
 
17763
The following built-in functions may be used to generate a
17764
floating-point value.  All return a floating-point value except `$cvi',
17765
`$int', and `$sgn', which return an integer value.
17766
 
17767
``$acos(EXPR)''
17768
     Returns the floating point arccosine of EXPR.
17769
 
17770
``$asin(EXPR)''
17771
     Returns the floating point arcsine of EXPR.
17772
 
17773
``$atan(EXPR)''
17774
     Returns the floating point arctangent of EXPR.
17775
 
17776
``$atan2(EXPR1,EXPR2)''
17777
     Returns the floating point arctangent of EXPR1 / EXPR2.
17778
 
17779
``$ceil(EXPR)''
17780
     Returns the smallest integer not less than EXPR as floating point.
17781
 
17782
``$cosh(EXPR)''
17783
     Returns the floating point hyperbolic cosine of EXPR.
17784
 
17785
``$cos(EXPR)''
17786
     Returns the floating point cosine of EXPR.
17787
 
17788
``$cvf(EXPR)''
17789
     Returns the integer value EXPR converted to floating-point.
17790
 
17791
``$cvi(EXPR)''
17792
     Returns the floating point value EXPR converted to integer.
17793
 
17794
``$exp(EXPR)''
17795
     Returns the floating point value e ^ EXPR.
17796
 
17797
``$fabs(EXPR)''
17798
     Returns the floating point absolute value of EXPR.
17799
 
17800
``$floor(EXPR)''
17801
     Returns the largest integer that is not greater than EXPR as
17802
     floating point.
17803
 
17804
``$fmod(EXPR1,EXPR2)''
17805
     Returns the floating point remainder of EXPR1 / EXPR2.
17806
 
17807
``$int(EXPR)''
17808
     Returns 1 if EXPR evaluates to an integer, zero otherwise.
17809
 
17810
``$ldexp(EXPR1,EXPR2)''
17811
     Returns the floating point value EXPR1 * 2 ^ EXPR2.
17812
 
17813
``$log10(EXPR)''
17814
     Returns the base 10 logarithm of EXPR.
17815
 
17816
``$log(EXPR)''
17817
     Returns the natural logarithm of EXPR.
17818
 
17819
``$max(EXPR1,EXPR2)''
17820
     Returns the floating point maximum of EXPR1 and EXPR2.
17821
 
17822
``$min(EXPR1,EXPR2)''
17823
     Returns the floating point minimum of EXPR1 and EXPR2.
17824
 
17825
``$pow(EXPR1,EXPR2)''
17826
     Returns the floating point value EXPR1 ^ EXPR2.
17827
 
17828
``$round(EXPR)''
17829
     Returns the nearest integer to EXPR as a floating point number.
17830
 
17831
``$sgn(EXPR)''
17832
     Returns -1, 0, or 1 based on the sign of EXPR.
17833
 
17834
``$sin(EXPR)''
17835
     Returns the floating point sine of EXPR.
17836
 
17837
``$sinh(EXPR)''
17838
     Returns the floating point hyperbolic sine of EXPR.
17839
 
17840
``$sqrt(EXPR)''
17841
     Returns the floating point square root of EXPR.
17842
 
17843
``$tan(EXPR)''
17844
     Returns the floating point tangent of EXPR.
17845
 
17846
``$tanh(EXPR)''
17847
     Returns the floating point hyperbolic tangent of EXPR.
17848
 
17849
``$trunc(EXPR)''
17850
     Returns the integer value of EXPR truncated towards zero as
17851
     floating point.
17852
 
17853
 
17854

17855
File: as.info,  Node: TIC54X-Ext,  Next: TIC54X-Directives,  Prev: TIC54X-Builtins,  Up: TIC54X-Dependent
17856
 
17857
9.40.8 Extended Addressing
17858
--------------------------
17859
 
17860
The `LDX' pseudo-op is provided for loading the extended addressing bits
17861
of a label or address.  For example, if an address `_label' resides in
17862
extended program memory, the value of `_label' may be loaded as follows:
17863
      ldx     #_label,16,a    ; loads extended bits of _label
17864
      or      #_label,a       ; loads lower 16 bits of _label
17865
      bacc    a               ; full address is in accumulator A
17866
 
17867

17868
File: as.info,  Node: TIC54X-Directives,  Next: TIC54X-Macros,  Prev: TIC54X-Ext,  Up: TIC54X-Dependent
17869
 
17870
9.40.9 Directives
17871
-----------------
17872
 
17873
`.align [SIZE]'
17874
`.even'
17875
     Align the section program counter on the next boundary, based on
17876
     SIZE.  SIZE may be any power of 2.  `.even' is equivalent to
17877
     `.align' with a SIZE of 2.
17878
    `1'
17879
          Align SPC to word boundary
17880
 
17881
    `2'
17882
          Align SPC to longword boundary (same as .even)
17883
 
17884
    `128'
17885
          Align SPC to page boundary
17886
 
17887
`.asg STRING, NAME'
17888
     Assign NAME the string STRING.  String replacement is performed on
17889
     STRING before assignment.
17890
 
17891
`.eval STRING, NAME'
17892
     Evaluate the contents of string STRING and assign the result as a
17893
     string to the subsym NAME.  String replacement is performed on
17894
     STRING before assignment.
17895
 
17896
`.bss SYMBOL, SIZE [, [BLOCKING_FLAG] [,ALIGNMENT_FLAG]]'
17897
     Reserve space for SYMBOL in the .bss section.  SIZE is in words.
17898
     If present, BLOCKING_FLAG indicates the allocated space should be
17899
     aligned on a page boundary if it would otherwise cross a page
17900
     boundary.  If present, ALIGNMENT_FLAG causes the assembler to
17901
     allocate SIZE on a long word boundary.
17902
 
17903
`.byte VALUE [,...,VALUE_N]'
17904
`.ubyte VALUE [,...,VALUE_N]'
17905
`.char VALUE [,...,VALUE_N]'
17906
`.uchar VALUE [,...,VALUE_N]'
17907
     Place one or more bytes into consecutive words of the current
17908
     section.  The upper 8 bits of each word is zero-filled.  If a
17909
     label is used, it points to the word allocated for the first byte
17910
     encountered.
17911
 
17912
`.clink ["SECTION_NAME"]'
17913
     Set STYP_CLINK flag for this section, which indicates to the
17914
     linker that if no symbols from this section are referenced, the
17915
     section should not be included in the link.  If SECTION_NAME is
17916
     omitted, the current section is used.
17917
 
17918
`.c_mode'
17919
     TBD.
17920
 
17921
`.copy "FILENAME" | FILENAME'
17922
`.include "FILENAME" | FILENAME'
17923
     Read source statements from FILENAME.  The normal include search
17924
     path is used.  Normally .copy will cause statements from the
17925
     included file to be printed in the assembly listing and .include
17926
     will not, but this distinction is not currently implemented.
17927
 
17928
`.data'
17929
     Begin assembling code into the .data section.
17930
 
17931
`.double VALUE [,...,VALUE_N]'
17932
`.ldouble VALUE [,...,VALUE_N]'
17933
`.float VALUE [,...,VALUE_N]'
17934
`.xfloat VALUE [,...,VALUE_N]'
17935
     Place an IEEE single-precision floating-point representation of
17936
     one or more floating-point values into the current section.  All
17937
     but `.xfloat' align the result on a longword boundary.  Values are
17938
     stored most-significant word first.
17939
 
17940
`.drlist'
17941
`.drnolist'
17942
     Control printing of directives to the listing file.  Ignored.
17943
 
17944
`.emsg STRING'
17945
`.mmsg STRING'
17946
`.wmsg STRING'
17947
     Emit a user-defined error, message, or warning, respectively.
17948
 
17949
`.far_mode'
17950
     Use extended addressing when assembling statements.  This should
17951
     appear only once per file, and is equivalent to the -mfar-mode
17952
     option *note `-mfar-mode': TIC54X-Opts.
17953
 
17954
`.fclist'
17955
`.fcnolist'
17956
     Control printing of false conditional blocks to the listing file.
17957
 
17958
`.field VALUE [,SIZE]'
17959
     Initialize a bitfield of SIZE bits in the current section.  If
17960
     VALUE is relocatable, then SIZE must be 16.  SIZE defaults to 16
17961
     bits.  If VALUE does not fit into SIZE bits, the value will be
17962
     truncated.  Successive `.field' directives will pack starting at
17963
     the current word, filling the most significant bits first, and
17964
     aligning to the start of the next word if the field size does not
17965
     fit into the space remaining in the current word.  A `.align'
17966
     directive with an operand of 1 will force the next `.field'
17967
     directive to begin packing into a new word.  If a label is used, it
17968
     points to the word that contains the specified field.
17969
 
17970
`.global SYMBOL [,...,SYMBOL_N]'
17971
`.def SYMBOL [,...,SYMBOL_N]'
17972
`.ref SYMBOL [,...,SYMBOL_N]'
17973
     `.def' nominally identifies a symbol defined in the current file
17974
     and available to other files.  `.ref' identifies a symbol used in
17975
     the current file but defined elsewhere.  Both map to the standard
17976
     `.global' directive.
17977
 
17978
`.half VALUE [,...,VALUE_N]'
17979
`.uhalf VALUE [,...,VALUE_N]'
17980
`.short VALUE [,...,VALUE_N]'
17981
`.ushort VALUE [,...,VALUE_N]'
17982
`.int VALUE [,...,VALUE_N]'
17983
`.uint VALUE [,...,VALUE_N]'
17984
`.word VALUE [,...,VALUE_N]'
17985
`.uword VALUE [,...,VALUE_N]'
17986
     Place one or more values into consecutive words of the current
17987
     section.  If a label is used, it points to the word allocated for
17988
     the first value encountered.
17989
 
17990
`.label SYMBOL'
17991
     Define a special SYMBOL to refer to the load time address of the
17992
     current section program counter.
17993
 
17994
`.length'
17995
`.width'
17996
     Set the page length and width of the output listing file.  Ignored.
17997
 
17998
`.list'
17999
`.nolist'
18000
     Control whether the source listing is printed.  Ignored.
18001
 
18002
`.long VALUE [,...,VALUE_N]'
18003
`.ulong VALUE [,...,VALUE_N]'
18004
`.xlong VALUE [,...,VALUE_N]'
18005
     Place one or more 32-bit values into consecutive words in the
18006
     current section.  The most significant word is stored first.
18007
     `.long' and `.ulong' align the result on a longword boundary;
18008
     `xlong' does not.
18009
 
18010
`.loop [COUNT]'
18011
`.break [CONDITION]'
18012
`.endloop'
18013
     Repeatedly assemble a block of code.  `.loop' begins the block, and
18014
     `.endloop' marks its termination.  COUNT defaults to 1024, and
18015
     indicates the number of times the block should be repeated.
18016
     `.break' terminates the loop so that assembly begins after the
18017
     `.endloop' directive.  The optional CONDITION will cause the loop
18018
     to terminate only if it evaluates to zero.
18019
 
18020
`MACRO_NAME .macro [PARAM1][,...PARAM_N]'
18021
`[.mexit]'
18022
`.endm'
18023
     See the section on macros for more explanation (*Note
18024
     TIC54X-Macros::.
18025
 
18026
`.mlib "FILENAME" | FILENAME'
18027
     Load the macro library FILENAME.  FILENAME must be an archived
18028
     library (BFD ar-compatible) of text files, expected to contain
18029
     only macro definitions.   The standard include search path is used.
18030
 
18031
`.mlist'
18032
`.mnolist'
18033
     Control whether to include macro and loop block expansions in the
18034
     listing output.  Ignored.
18035
 
18036
`.mmregs'
18037
     Define global symbolic names for the 'c54x registers.  Supposedly
18038
     equivalent to executing `.set' directives for each register with
18039
     its memory-mapped value, but in reality is provided only for
18040
     compatibility and does nothing.
18041
 
18042
`.newblock'
18043
     This directive resets any TIC54X local labels currently defined.
18044
     Normal `as' local labels are unaffected.
18045
 
18046
`.option OPTION_LIST'
18047
     Set listing options.  Ignored.
18048
 
18049
`.sblock "SECTION_NAME" | SECTION_NAME [,"NAME_N" | NAME_N]'
18050
     Designate SECTION_NAME for blocking.  Blocking guarantees that a
18051
     section will start on a page boundary (128 words) if it would
18052
     otherwise cross a page boundary.  Only initialized sections may be
18053
     designated with this directive.  See also *Note TIC54X-Block::.
18054
 
18055
`.sect "SECTION_NAME"'
18056
     Define a named initialized section and make it the current section.
18057
 
18058
`SYMBOL .set "VALUE"'
18059
`SYMBOL .equ "VALUE"'
18060
     Equate a constant VALUE to a SYMBOL, which is placed in the symbol
18061
     table.  SYMBOL may not be previously defined.
18062
 
18063
`.space SIZE_IN_BITS'
18064
`.bes SIZE_IN_BITS'
18065
     Reserve the given number of bits in the current section and
18066
     zero-fill them.  If a label is used with `.space', it points to the
18067
     *first* word reserved.  With `.bes', the label points to the
18068
     *last* word reserved.
18069
 
18070
`.sslist'
18071
`.ssnolist'
18072
     Controls the inclusion of subsym replacement in the listing
18073
     output.  Ignored.
18074
 
18075
`.string "STRING" [,...,"STRING_N"]'
18076
`.pstring "STRING" [,...,"STRING_N"]'
18077
     Place 8-bit characters from STRING into the current section.
18078
     `.string' zero-fills the upper 8 bits of each word, while
18079
     `.pstring' puts two characters into each word, filling the
18080
     most-significant bits first.  Unused space is zero-filled.  If a
18081
     label is used, it points to the first word initialized.
18082
 
18083
`[STAG] .struct [OFFSET]'
18084
`[NAME_1] element [COUNT_1]'
18085
`[NAME_2] element [COUNT_2]'
18086
`[TNAME] .tag STAGX [TCOUNT]'
18087
`...'
18088
`[NAME_N] element [COUNT_N]'
18089
`[SSIZE] .endstruct'
18090
`LABEL .tag [STAG]'
18091
     Assign symbolic offsets to the elements of a structure.  STAG
18092
     defines a symbol to use to reference the structure.  OFFSET
18093
     indicates a starting value to use for the first element
18094
     encountered; otherwise it defaults to zero.  Each element can have
18095
     a named offset, NAME, which is a symbol assigned the value of the
18096
     element's offset into the structure.  If STAG is missing, these
18097
     become global symbols.  COUNT adjusts the offset that many times,
18098
     as if `element' were an array.  `element' may be one of `.byte',
18099
     `.word', `.long', `.float', or any equivalent of those, and the
18100
     structure offset is adjusted accordingly.  `.field' and `.string'
18101
     are also allowed; the size of `.field' is one bit, and `.string'
18102
     is considered to be one word in size.  Only element descriptors,
18103
     structure/union tags, `.align' and conditional assembly directives
18104
     are allowed within `.struct'/`.endstruct'.  `.align' aligns member
18105
     offsets to word boundaries only.  SSIZE, if provided, will always
18106
     be assigned the size of the structure.
18107
 
18108
     The `.tag' directive, in addition to being used to define a
18109
     structure/union element within a structure, may be used to apply a
18110
     structure to a symbol.  Once applied to LABEL, the individual
18111
     structure elements may be applied to LABEL to produce the desired
18112
     offsets using LABEL as the structure base.
18113
 
18114
`.tab'
18115
     Set the tab size in the output listing.  Ignored.
18116
 
18117
`[UTAG] .union'
18118
`[NAME_1] element [COUNT_1]'
18119
`[NAME_2] element [COUNT_2]'
18120
`[TNAME] .tag UTAGX[,TCOUNT]'
18121
`...'
18122
`[NAME_N] element [COUNT_N]'
18123
`[USIZE] .endstruct'
18124
`LABEL .tag [UTAG]'
18125
     Similar to `.struct', but the offset after each element is reset to
18126
     zero, and the USIZE is set to the maximum of all defined elements.
18127
     Starting offset for the union is always zero.
18128
 
18129
`[SYMBOL] .usect "SECTION_NAME", SIZE, [,[BLOCKING_FLAG] [,ALIGNMENT_FLAG]]'
18130
     Reserve space for variables in a named, uninitialized section
18131
     (similar to .bss).  `.usect' allows definitions sections
18132
     independent of .bss.  SYMBOL points to the first location reserved
18133
     by this allocation.  The symbol may be used as a variable name.
18134
     SIZE is the allocated size in words.  BLOCKING_FLAG indicates
18135
     whether to block this section on a page boundary (128 words)
18136
     (*note TIC54X-Block::).  ALIGNMENT FLAG indicates whether the
18137
     section should be longword-aligned.
18138
 
18139
`.var SYM[,..., SYM_N]'
18140
     Define a subsym to be a local variable within a macro.  See *Note
18141
     TIC54X-Macros::.
18142
 
18143
`.version VERSION'
18144
     Set which processor to build instructions for.  Though the
18145
     following values are accepted, the op is ignored.
18146
    `541'
18147
    `542'
18148
    `543'
18149
    `545'
18150
    `545LP'
18151
    `546LP'
18152
    `548'
18153
    `549'
18154
 
18155

18156
File: as.info,  Node: TIC54X-Macros,  Next: TIC54X-MMRegs,  Prev: TIC54X-Directives,  Up: TIC54X-Dependent
18157
 
18158
9.40.10 Macros
18159
--------------
18160
 
18161
Macros do not require explicit dereferencing of arguments (i.e., \ARG).
18162
 
18163
   During macro expansion, the macro parameters are converted to
18164
subsyms.  If the number of arguments passed the macro invocation
18165
exceeds the number of parameters defined, the last parameter is
18166
assigned the string equivalent of all remaining arguments.  If fewer
18167
arguments are given than parameters, the missing parameters are
18168
assigned empty strings.  To include a comma in an argument, you must
18169
enclose the argument in quotes.
18170
 
18171
   The following built-in subsym functions allow examination of the
18172
string value of subsyms (or ordinary strings).  The arguments are
18173
strings unless otherwise indicated (subsyms passed as args will be
18174
replaced by the strings they represent).
18175
``$symlen(STR)''
18176
     Returns the length of STR.
18177
 
18178
``$symcmp(STR1,STR2)''
18179
     Returns 0 if STR1 == STR2, non-zero otherwise.
18180
 
18181
``$firstch(STR,CH)''
18182
     Returns index of the first occurrence of character constant CH in
18183
     STR.
18184
 
18185
``$lastch(STR,CH)''
18186
     Returns index of the last occurrence of character constant CH in
18187
     STR.
18188
 
18189
``$isdefed(SYMBOL)''
18190
     Returns zero if the symbol SYMBOL is not in the symbol table,
18191
     non-zero otherwise.
18192
 
18193
``$ismember(SYMBOL,LIST)''
18194
     Assign the first member of comma-separated string LIST to SYMBOL;
18195
     LIST is reassigned the remainder of the list.  Returns zero if
18196
     LIST is a null string.  Both arguments must be subsyms.
18197
 
18198
``$iscons(EXPR)''
18199
     Returns 1 if string EXPR is binary, 2 if octal, 3 if hexadecimal,
18200
     4 if a character, 5 if decimal, and zero if not an integer.
18201
 
18202
``$isname(NAME)''
18203
     Returns 1 if NAME is a valid symbol name, zero otherwise.
18204
 
18205
``$isreg(REG)''
18206
     Returns 1 if REG is a valid predefined register name (AR0-AR7
18207
     only).
18208
 
18209
``$structsz(STAG)''
18210
     Returns the size of the structure or union represented by STAG.
18211
 
18212
``$structacc(STAG)''
18213
     Returns the reference point of the structure or union represented
18214
     by STAG.   Always returns zero.
18215
 
18216
 
18217

18218
File: as.info,  Node: TIC54X-MMRegs,  Next: TIC54X-Syntax,  Prev: TIC54X-Macros,  Up: TIC54X-Dependent
18219
 
18220
9.40.11 Memory-mapped Registers
18221
-------------------------------
18222
 
18223
The following symbols are recognized as memory-mapped registers:
18224
 
18225
 
18226

18227
File: as.info,  Node: TIC54X-Syntax,  Prev: TIC54X-MMRegs,  Up: TIC54X-Dependent
18228
 
18229
9.40.12 TIC54X Syntax
18230
---------------------
18231
 
18232
* Menu:
18233
 
18234
* TIC54X-Chars::                Special Characters
18235
 
18236

18237
File: as.info,  Node: TIC54X-Chars,  Up: TIC54X-Syntax
18238
 
18239
9.40.12.1 Special Characters
18240
............................
18241
 
18242
The presence of a `;' appearing anywhere on a line indicates the start
18243
of a comment that extends to the end of that line.
18244
 
18245
   If a `#' appears as the first character of a line then the whole
18246
line is treated as a comment, but in this case the line can also be a
18247
logical line number directive (*note Comments::) or a preprocessor
18248
control command (*note Preprocessing::).
18249
 
18250
   The presence of an asterisk (`*') at the start of a line also
18251
indicates a comment that extends to the end of that line.
18252
 
18253
   The TIC54X assembler does not currently support a line separator
18254
character.
18255
 
18256

18257
File: as.info,  Node: TIC6X-Dependent,  Next: TILE-Gx-Dependent,  Prev: TIC54X-Dependent,  Up: Machine Dependencies
18258
 
18259
9.41 TIC6X Dependent Features
18260
=============================
18261
 
18262
* Menu:
18263
 
18264
* TIC6X Options::            Options
18265
* TIC6X Syntax::             Syntax
18266
* TIC6X Directives::         Directives
18267
 
18268

18269
File: as.info,  Node: TIC6X Options,  Next: TIC6X Syntax,  Up: TIC6X-Dependent
18270
 
18271
9.41.1 TIC6X Options
18272
--------------------
18273
 
18274
`-march=ARCH'
18275
     Enable (only) instructions from architecture ARCH.  By default,
18276
     all instructions are permitted.
18277
 
18278
     The following values of ARCH are accepted: `c62x', `c64x',
18279
     `c64x+', `c67x', `c67x+', `c674x'.
18280
 
18281
`-mdsbt'
18282
`-mno-dsbt'
18283
     The `-mdsbt' option causes the assembler to generate the
18284
     `Tag_ABI_DSBT' attribute with a value of 1, indicating that the
18285
     code is using DSBT addressing.  The `-mno-dsbt' option, the
18286
     default, causes the tag to have a value of 0, indicating that the
18287
     code does not use DSBT addressing.  The linker will emit a warning
18288
     if objects of different type (DSBT and non-DSBT) are linked
18289
     together.
18290
 
18291
`-mpid=no'
18292
`-mpid=near'
18293
`-mpid=far'
18294
     The `-mpid=' option causes the assembler to generate the
18295
     `Tag_ABI_PID' attribute with a value indicating the form of data
18296
     addressing used by the code.  `-mpid=no', the default, indicates
18297
     position-dependent data addressing, `-mpid=near' indicates
18298
     position-independent addressing with GOT accesses using near DP
18299
     addressing, and `-mpid=far' indicates position-independent
18300
     addressing with GOT accesses using far DP addressing.  The linker
18301
     will emit a warning if objects built with different settings of
18302
     this option are linked together.
18303
 
18304
`-mpic'
18305
`-mno-pic'
18306
     The `-mpic' option causes the assembler to generate the
18307
     `Tag_ABI_PIC' attribute with a value of 1, indicating that the
18308
     code is using position-independent code addressing,  The
18309
     `-mno-pic' option, the default, causes the tag to have a value of
18310
     0, indicating position-dependent code addressing.  The linker will
18311
     emit a warning if objects of different type (position-dependent and
18312
     position-independent) are linked together.
18313
 
18314
`-mbig-endian'
18315
`-mlittle-endian'
18316
     Generate code for the specified endianness.  The default is
18317
     little-endian.
18318
 
18319
 
18320

18321
File: as.info,  Node: TIC6X Syntax,  Next: TIC6X Directives,  Prev: TIC6X Options,  Up: TIC6X-Dependent
18322
 
18323
9.41.2 TIC6X Syntax
18324
-------------------
18325
 
18326
The presence of a `;' on a line indicates the start of a comment that
18327
extends to the end of the current line.  If a `#' or `*' appears as the
18328
first character of a line, the whole line is treated as a comment.
18329
Note that if a line starts with a `#' character then it can also be a
18330
logical line number directive (*note Comments::) or a preprocessor
18331
control command (*note Preprocessing::).
18332
 
18333
   The `@' character can be used instead of a newline to separate
18334
statements.
18335
 
18336
   Instruction, register and functional unit names are case-insensitive.
18337
`as' requires fully-specified functional unit names, such as `.S1',
18338
`.L1X' or `.D1T2', on all instructions using a functional unit.
18339
 
18340
   For some instructions, there may be syntactic ambiguity between
18341
register or functional unit names and the names of labels or other
18342
symbols.  To avoid this, enclose the ambiguous symbol name in
18343
parentheses; register and functional unit names may not be enclosed in
18344
parentheses.
18345
 
18346

18347
File: as.info,  Node: TIC6X Directives,  Prev: TIC6X Syntax,  Up: TIC6X-Dependent
18348
 
18349
9.41.3 TIC6X Directives
18350
-----------------------
18351
 
18352
Directives controlling the set of instructions accepted by the
18353
assembler have effect for instructions between the directive and any
18354
subsequent directive overriding it.
18355
 
18356
`.arch ARCH'
18357
     This has the same effect as `-march=ARCH'.
18358
 
18359
`.cantunwind'
18360
     Prevents unwinding through the current function.  No personality
18361
     routine or exception table data is required or permitted.
18362
 
18363
     If this is not specified then frame unwinding information will be
18364
     constructed from CFI directives. *note CFI directives::.
18365
 
18366
`.c6xabi_attribute TAG, VALUE'
18367
     Set the C6000 EABI build attribute TAG to VALUE.
18368
 
18369
     The TAG is either an attribute number or one of `Tag_ISA',
18370
     `Tag_ABI_wchar_t', `Tag_ABI_stack_align_needed',
18371
     `Tag_ABI_stack_align_preserved', `Tag_ABI_DSBT', `Tag_ABI_PID',
18372
     `Tag_ABI_PIC', `TAG_ABI_array_object_alignment',
18373
     `TAG_ABI_array_object_align_expected', `Tag_ABI_compatibility' and
18374
     `Tag_ABI_conformance'.  The VALUE is either a `number',
18375
     `"string"', or `number, "string"' depending on the tag.
18376
 
18377
`.ehtype SYMBOL'
18378
     Output an exception type table reference to SYMBOL.
18379
 
18380
`.endp'
18381
     Marks the end of and exception table or function.  If preceeded by
18382
     a `.handlerdata' directive then this also switched back to the
18383
     previous text section.
18384
 
18385
`.handlerdata'
18386
     Marks the end of the current function, and the start of the
18387
     exception table entry for that function.  Anything between this
18388
     directive and the `.endp' directive will be added to the exception
18389
     table entry.
18390
 
18391
     Must be preceded by a CFI block containing a `.cfi_lsda' directive.
18392
 
18393
`.nocmp'
18394
     Disallow use of C64x+ compact instructions in the current text
18395
     section.
18396
 
18397
`.personalityindex INDEX'
18398
     Sets the personality routine for the current function to the ABI
18399
     specified compact routine number INDEX
18400
 
18401
`.personality NAME'
18402
     Sets the personality routine for the current function to NAME.
18403
 
18404
`.scomm SYMBOL, SIZE, ALIGN'
18405
     Like `.comm', creating a common symbol SYMBOL with size SIZE and
18406
     alignment ALIGN, but unlike when using `.comm', this symbol will
18407
     be placed into the small BSS section by the linker.
18408
 
18409
 
18410

18411
File: as.info,  Node: TILE-Gx-Dependent,  Next: TILEPro-Dependent,  Prev: TIC6X-Dependent,  Up: Machine Dependencies
18412
 
18413
9.42 TILE-Gx Dependent Features
18414
===============================
18415
 
18416
* Menu:
18417
 
18418
* TILE-Gx Options::             TILE-Gx Options
18419
* TILE-Gx Syntax::              TILE-Gx Syntax
18420
* TILE-Gx Directives::          TILE-Gx Directives
18421
 
18422

18423
File: as.info,  Node: TILE-Gx Options,  Next: TILE-Gx Syntax,  Up: TILE-Gx-Dependent
18424
 
18425
9.42.1 Options
18426
--------------
18427
 
18428
The following table lists all available TILE-Gx specific options:
18429
 
18430
`-m32 | -m64'
18431
     Select the word size, either 32 bits or 64 bits.
18432
 
18433
`-EB | -EL'
18434
     Select the endianness, either big-endian (-EB) or little-endian
18435
     (-EL).
18436
 
18437
 
18438

18439
File: as.info,  Node: TILE-Gx Syntax,  Next: TILE-Gx Directives,  Prev: TILE-Gx Options,  Up: TILE-Gx-Dependent
18440
 
18441
9.42.2 Syntax
18442
-------------
18443
 
18444
Block comments are delimited by `/*' and `*/'.  End of line comments
18445
may be introduced by `#'.
18446
 
18447
   Instructions consist of a leading opcode or macro name followed by
18448
whitespace and an optional comma-separated list of operands:
18449
 
18450
     OPCODE [OPERAND, ...]
18451
 
18452
   Instructions must be separated by a newline or semicolon.
18453
 
18454
   There are two ways to write code: either write naked instructions,
18455
which the assembler is free to combine into VLIW bundles, or specify
18456
the VLIW bundles explicitly.
18457
 
18458
   Bundles are specified using curly braces:
18459
 
18460
     { ADD r3,r4,r5 ; ADD r7,r8,r9 ; LW r10,r11 }
18461
 
18462
   A bundle can span multiple lines. If you want to put multiple
18463
instructions on a line, whether in a bundle or not, you need to
18464
separate them with semicolons as in this example.
18465
 
18466
   A bundle may contain one or more instructions, up to the limit
18467
specified by the ISA (currently three). If fewer instructions are
18468
specified than the hardware supports in a bundle, the assembler inserts
18469
`fnop' instructions automatically.
18470
 
18471
   The assembler will prefer to preserve the ordering of instructions
18472
within the bundle, putting the first instruction in a lower-numbered
18473
pipeline than the next one, etc.  This fact, combined with the optional
18474
use of explicit `fnop' or `nop' instructions, allows precise control
18475
over which pipeline executes each instruction.
18476
 
18477
   If the instructions cannot be bundled in the listed order, the
18478
assembler will automatically try to find a valid pipeline assignment.
18479
If there is no way to bundle the instructions together, the assembler
18480
reports an error.
18481
 
18482
   The assembler does not yet auto-bundle (automatically combine
18483
multiple instructions into one bundle), but it reserves the right to do
18484
so in the future.  If you want to force an instruction to run by
18485
itself, put it in a bundle explicitly with curly braces and use `nop'
18486
instructions (not `fnop') to fill the remaining pipeline slots in that
18487
bundle.
18488
 
18489
* Menu:
18490
 
18491
* TILE-Gx Opcodes::              Opcode Naming Conventions.
18492
* TILE-Gx Registers::            Register Naming.
18493
* TILE-Gx Modifiers::            Symbolic Operand Modifiers.
18494
 
18495

18496
File: as.info,  Node: TILE-Gx Opcodes,  Next: TILE-Gx Registers,  Up: TILE-Gx Syntax
18497
 
18498
9.42.2.1 Opcode Names
18499
.....................
18500
 
18501
For a complete list of opcodes and descriptions of their semantics, see
18502
`TILE-Gx Instruction Set Architecture', available upon request at
18503
www.tilera.com.
18504
 
18505

18506
File: as.info,  Node: TILE-Gx Registers,  Next: TILE-Gx Modifiers,  Prev: TILE-Gx Opcodes,  Up: TILE-Gx Syntax
18507
 
18508
9.42.2.2 Register Names
18509
.......................
18510
 
18511
General-purpose registers are represented by predefined symbols of the
18512
form `rN', where N represents a number between `0' and `63'.  However,
18513
the following registers have canonical names that must be used instead:
18514
 
18515
`r54'
18516
     sp
18517
 
18518
`r55'
18519
     lr
18520
 
18521
`r56'
18522
     sn
18523
 
18524
`r57'
18525
     idn0
18526
 
18527
`r58'
18528
     idn1
18529
 
18530
`r59'
18531
     udn0
18532
 
18533
`r60'
18534
     udn1
18535
 
18536
`r61'
18537
     udn2
18538
 
18539
`r62'
18540
     udn3
18541
 
18542
`r63'
18543
     zero
18544
 
18545
 
18546
   The assembler will emit a warning if a numeric name is used instead
18547
of the non-numeric name.  The `.no_require_canonical_reg_names'
18548
assembler pseudo-op turns off this warning.
18549
`.require_canonical_reg_names' turns it back on.
18550
 
18551

18552
File: as.info,  Node: TILE-Gx Modifiers,  Prev: TILE-Gx Registers,  Up: TILE-Gx Syntax
18553
 
18554
9.42.2.3 Symbolic Operand Modifiers
18555
...................................
18556
 
18557
The assembler supports several modifiers when using symbol addresses in
18558
TILE-Gx instruction operands.  The general syntax is the following:
18559
 
18560
     modifier(symbol)
18561
 
18562
   The following modifiers are supported:
18563
 
18564
`hw0'
18565
     This modifier is used to load bits 0-15 of the symbol's address.
18566
 
18567
`hw1'
18568
     This modifier is used to load bits 16-31 of the symbol's address.
18569
 
18570
`hw2'
18571
     This modifier is used to load bits 32-47 of the symbol's address.
18572
 
18573
`hw3'
18574
     This modifier is used to load bits 48-63 of the symbol's address.
18575
 
18576
`hw0_last'
18577
     This modifier yields the same value as `hw0', but it also checks
18578
     that the value does not overflow.
18579
 
18580
`hw1_last'
18581
     This modifier yields the same value as `hw1', but it also checks
18582
     that the value does not overflow.
18583
 
18584
`hw2_last'
18585
     This modifier yields the same value as `hw2', but it also checks
18586
     that the value does not overflow.
18587
 
18588
     A 48-bit symbolic value is constructed by using the following
18589
     idiom:
18590
 
18591
          moveli r0, hw2_last(sym)
18592
          shl16insli r0, r0, hw1(sym)
18593
          shl16insli r0, r0, hw0(sym)
18594
 
18595
`hw0_got'
18596
     This modifier is used to load bits 0-15 of the symbol's offset in
18597
     the GOT entry corresponding to the symbol.
18598
 
18599
`hw0_last_got'
18600
     This modifier yields the same value as `hw0_got', but it also
18601
     checks that the value does not overflow.
18602
 
18603
`hw1_last_got'
18604
     This modifier is used to load bits 16-31 of the symbol's offset in
18605
     the GOT entry corresponding to the symbol, and it also checks that
18606
     the value does not overflow.
18607
 
18608
`plt'
18609
     This modifier is used for function symbols.  It causes a
18610
     _procedure linkage table_, an array of code stubs, to be created
18611
     at the time the shared object is created or linked against,
18612
     together with a global offset table entry.  The value is a
18613
     pc-relative offset to the corresponding stub code in the procedure
18614
     linkage table.  This arrangement causes the run-time symbol
18615
     resolver to be called to look up and set the value of the symbol
18616
     the first time the function is called (at latest; depending
18617
     environment variables).  It is only safe to leave the symbol
18618
     unresolved this way if all references are function calls.
18619
 
18620
`hw0_plt'
18621
     This modifier is used to load bits 0-15 of the pc-relative address
18622
     of a plt entry.
18623
 
18624
`hw1_plt'
18625
     This modifier is used to load bits 16-31 of the pc-relative
18626
     address of a plt entry.
18627
 
18628
`hw1_last_plt'
18629
     This modifier yields the same value as `hw1_plt', but it also
18630
     checks that the value does not overflow.
18631
 
18632
`hw2_last_plt'
18633
     This modifier is used to load bits 32-47 of the pc-relative
18634
     address of a plt entry, and it also checks that the value does not
18635
     overflow.
18636
 
18637
`hw0_tls_gd'
18638
     This modifier is used to load bits 0-15 of the offset of the GOT
18639
     entry of the symbol's TLS descriptor, to be used for
18640
     general-dynamic TLS accesses.
18641
 
18642
`hw0_last_tls_gd'
18643
     This modifier yields the same value as `hw0_tls_gd', but it also
18644
     checks that the value does not overflow.
18645
 
18646
`hw1_last_tls_gd'
18647
     This modifier is used to load bits 16-31 of the offset of the GOT
18648
     entry of the symbol's TLS descriptor, to be used for
18649
     general-dynamic TLS accesses.  It also checks that the value does
18650
     not overflow.
18651
 
18652
`hw0_tls_ie'
18653
     This modifier is used to load bits 0-15 of the offset of the GOT
18654
     entry containing the offset of the symbol's address from the TCB,
18655
     to be used for initial-exec TLS accesses.
18656
 
18657
`hw0_last_tls_ie'
18658
     This modifier yields the same value as `hw0_tls_ie', but it also
18659
     checks that the value does not overflow.
18660
 
18661
`hw1_last_tls_ie'
18662
     This modifier is used to load bits 16-31 of the offset of the GOT
18663
     entry containing the offset of the symbol's address from the TCB,
18664
     to be used for initial-exec TLS accesses.  It also checks that the
18665
     value does not overflow.
18666
 
18667
`hw0_tls_le'
18668
     This modifier is used to load bits 0-15 of the offset of the
18669
     symbol's address from the TCB, to be used for local-exec TLS
18670
     accesses.
18671
 
18672
`hw0_last_tls_le'
18673
     This modifier yields the same value as `hw0_tls_le', but it also
18674
     checks that the value does not overflow.
18675
 
18676
`hw1_last_tls_le'
18677
     This modifier is used to load bits 16-31 of the offset of the
18678
     symbol's address from the TCB, to be used for local-exec TLS
18679
     accesses.  It also checks that the value does not overflow.
18680
 
18681
`tls_gd_call'
18682
     This modifier is used to tag an instrution as the "call" part of a
18683
     calling sequence for a TLS GD reference of its operand.
18684
 
18685
`tls_gd_add'
18686
     This modifier is used to tag an instruction as the "add" part of a
18687
     calling sequence for a TLS GD reference of its operand.
18688
 
18689
`tls_ie_load'
18690
     This modifier is used to tag an instruction as the "load" part of a
18691
     calling sequence for a TLS IE reference of its operand.
18692
 
18693
 
18694

18695
File: as.info,  Node: TILE-Gx Directives,  Prev: TILE-Gx Syntax,  Up: TILE-Gx-Dependent
18696
 
18697
9.42.3 TILE-Gx Directives
18698
-------------------------
18699
 
18700
`.align EXPRESSION [, EXPRESSION]'
18701
     This is the generic .ALIGN directive.  The first argument is the
18702
     requested alignment in bytes.
18703
 
18704
`.allow_suspicious_bundles'
18705
     Turns on error checking for combinations of instructions in a
18706
     bundle that probably indicate a programming error.  This is on by
18707
     default.
18708
 
18709
`.no_allow_suspicious_bundles'
18710
     Turns off error checking for combinations of instructions in a
18711
     bundle that probably indicate a programming error.
18712
 
18713
`.require_canonical_reg_names'
18714
     Require that canonical register names be used, and emit a warning
18715
     if the numeric names are used.  This is on by default.
18716
 
18717
`.no_require_canonical_reg_names'
18718
     Permit the use of numeric names for registers that have canonical
18719
     names.
18720
 
18721
 
18722

18723
File: as.info,  Node: TILEPro-Dependent,  Next: V850-Dependent,  Prev: TILE-Gx-Dependent,  Up: Machine Dependencies
18724
 
18725
9.43 TILEPro Dependent Features
18726
===============================
18727
 
18728
* Menu:
18729
 
18730
* TILEPro Options::             TILEPro Options
18731
* TILEPro Syntax::              TILEPro Syntax
18732
* TILEPro Directives::          TILEPro Directives
18733
 
18734

18735
File: as.info,  Node: TILEPro Options,  Next: TILEPro Syntax,  Up: TILEPro-Dependent
18736
 
18737
9.43.1 Options
18738
--------------
18739
 
18740
`as' has no machine-dependent command-line options for TILEPro.
18741
 
18742

18743
File: as.info,  Node: TILEPro Syntax,  Next: TILEPro Directives,  Prev: TILEPro Options,  Up: TILEPro-Dependent
18744
 
18745
9.43.2 Syntax
18746
-------------
18747
 
18748
Block comments are delimited by `/*' and `*/'.  End of line comments
18749
may be introduced by `#'.
18750
 
18751
   Instructions consist of a leading opcode or macro name followed by
18752
whitespace and an optional comma-separated list of operands:
18753
 
18754
     OPCODE [OPERAND, ...]
18755
 
18756
   Instructions must be separated by a newline or semicolon.
18757
 
18758
   There are two ways to write code: either write naked instructions,
18759
which the assembler is free to combine into VLIW bundles, or specify
18760
the VLIW bundles explicitly.
18761
 
18762
   Bundles are specified using curly braces:
18763
 
18764
     { ADD r3,r4,r5 ; ADD r7,r8,r9 ; LW r10,r11 }
18765
 
18766
   A bundle can span multiple lines. If you want to put multiple
18767
instructions on a line, whether in a bundle or not, you need to
18768
separate them with semicolons as in this example.
18769
 
18770
   A bundle may contain one or more instructions, up to the limit
18771
specified by the ISA (currently three). If fewer instructions are
18772
specified than the hardware supports in a bundle, the assembler inserts
18773
`fnop' instructions automatically.
18774
 
18775
   The assembler will prefer to preserve the ordering of instructions
18776
within the bundle, putting the first instruction in a lower-numbered
18777
pipeline than the next one, etc.  This fact, combined with the optional
18778
use of explicit `fnop' or `nop' instructions, allows precise control
18779
over which pipeline executes each instruction.
18780
 
18781
   If the instructions cannot be bundled in the listed order, the
18782
assembler will automatically try to find a valid pipeline assignment.
18783
If there is no way to bundle the instructions together, the assembler
18784
reports an error.
18785
 
18786
   The assembler does not yet auto-bundle (automatically combine
18787
multiple instructions into one bundle), but it reserves the right to do
18788
so in the future.  If you want to force an instruction to run by
18789
itself, put it in a bundle explicitly with curly braces and use `nop'
18790
instructions (not `fnop') to fill the remaining pipeline slots in that
18791
bundle.
18792
 
18793
* Menu:
18794
 
18795
* TILEPro Opcodes::              Opcode Naming Conventions.
18796
* TILEPro Registers::            Register Naming.
18797
* TILEPro Modifiers::            Symbolic Operand Modifiers.
18798
 
18799

18800
File: as.info,  Node: TILEPro Opcodes,  Next: TILEPro Registers,  Up: TILEPro Syntax
18801
 
18802
9.43.2.1 Opcode Names
18803
.....................
18804
 
18805
For a complete list of opcodes and descriptions of their semantics, see
18806
`TILE Processor User Architecture Manual', available upon request at
18807
www.tilera.com.
18808
 
18809

18810
File: as.info,  Node: TILEPro Registers,  Next: TILEPro Modifiers,  Prev: TILEPro Opcodes,  Up: TILEPro Syntax
18811
 
18812
9.43.2.2 Register Names
18813
.......................
18814
 
18815
General-purpose registers are represented by predefined symbols of the
18816
form `rN', where N represents a number between `0' and `63'.  However,
18817
the following registers have canonical names that must be used instead:
18818
 
18819
`r54'
18820
     sp
18821
 
18822
`r55'
18823
     lr
18824
 
18825
`r56'
18826
     sn
18827
 
18828
`r57'
18829
     idn0
18830
 
18831
`r58'
18832
     idn1
18833
 
18834
`r59'
18835
     udn0
18836
 
18837
`r60'
18838
     udn1
18839
 
18840
`r61'
18841
     udn2
18842
 
18843
`r62'
18844
     udn3
18845
 
18846
`r63'
18847
     zero
18848
 
18849
 
18850
   The assembler will emit a warning if a numeric name is used instead
18851
of the canonical name.  The `.no_require_canonical_reg_names' assembler
18852
pseudo-op turns off this warning. `.require_canonical_reg_names' turns
18853
it back on.
18854
 
18855

18856
File: as.info,  Node: TILEPro Modifiers,  Prev: TILEPro Registers,  Up: TILEPro Syntax
18857
 
18858
9.43.2.3 Symbolic Operand Modifiers
18859
...................................
18860
 
18861
The assembler supports several modifiers when using symbol addresses in
18862
TILEPro instruction operands.  The general syntax is the following:
18863
 
18864
     modifier(symbol)
18865
 
18866
   The following modifiers are supported:
18867
 
18868
`lo16'
18869
     This modifier is used to load the low 16 bits of the symbol's
18870
     address, sign-extended to a 32-bit value (sign-extension allows it
18871
     to be range-checked against signed 16 bit immediate operands
18872
     without complaint).
18873
 
18874
`hi16'
18875
     This modifier is used to load the high 16 bits of the symbol's
18876
     address, also sign-extended to a 32-bit value.
18877
 
18878
`ha16'
18879
     `ha16(N)' is identical to `hi16(N)', except if `lo16(N)' is
18880
     negative it adds one to the `hi16(N)' value. This way `lo16' and
18881
     `ha16' can be added to create any 32-bit value using `auli'.  For
18882
     example, here is how you move an arbitrary 32-bit address into r3:
18883
 
18884
          moveli r3, lo16(sym)
18885
          auli r3, r3, ha16(sym)
18886
 
18887
`got'
18888
     This modifier is used to load the offset of the GOT entry
18889
     corresponding to the symbol.
18890
 
18891
`got_lo16'
18892
     This modifier is used to load the sign-extended low 16 bits of the
18893
     offset of the GOT entry corresponding to the symbol.
18894
 
18895
`got_hi16'
18896
     This modifier is used to load the sign-extended high 16 bits of the
18897
     offset of the GOT entry corresponding to the symbol.
18898
 
18899
`got_ha16'
18900
     This modifier is like `got_hi16', but it adds one if `got_lo16' of
18901
     the input value is negative.
18902
 
18903
`plt'
18904
     This modifier is used for function symbols.  It causes a
18905
     _procedure linkage table_, an array of code stubs, to be created
18906
     at the time the shared object is created or linked against,
18907
     together with a global offset table entry.  The value is a
18908
     pc-relative offset to the corresponding stub code in the procedure
18909
     linkage table.  This arrangement causes the run-time symbol
18910
     resolver to be called to look up and set the value of the symbol
18911
     the first time the function is called (at latest; depending
18912
     environment variables).  It is only safe to leave the symbol
18913
     unresolved this way if all references are function calls.
18914
 
18915
`tls_gd'
18916
     This modifier is used to load the offset of the GOT entry of the
18917
     symbol's TLS descriptor, to be used for general-dynamic TLS
18918
     accesses.
18919
 
18920
`tls_gd_lo16'
18921
     This modifier is used to load the sign-extended low 16 bits of the
18922
     offset of the GOT entry of the symbol's TLS descriptor, to be used
18923
     for general dynamic TLS accesses.
18924
 
18925
`tls_gd_hi16'
18926
     This modifier is used to load the sign-extended high 16 bits of the
18927
     offset of the GOT entry of the symbol's TLS descriptor, to be used
18928
     for general dynamic TLS accesses.
18929
 
18930
`tls_gd_ha16'
18931
     This modifier is like `tls_gd_hi16', but it adds one to the value
18932
     if `tls_gd_lo16' of the input value is negative.
18933
 
18934
`tls_ie'
18935
     This modifier is used to load the offset of the GOT entry
18936
     containing the offset of the symbol's address from the TCB, to be
18937
     used for initial-exec TLS accesses.
18938
 
18939
`tls_ie_lo16'
18940
     This modifier is used to load the low 16 bits of the offset of the
18941
     GOT entry containing the offset of the symbol's address from the
18942
     TCB, to be used for initial-exec TLS accesses.
18943
 
18944
`tls_ie_hi16'
18945
     This modifier is used to load the high 16 bits of the offset of the
18946
     GOT entry containing the offset of the symbol's address from the
18947
     TCB, to be used for initial-exec TLS accesses.
18948
 
18949
`tls_ie_ha16'
18950
     This modifier is like `tls_ie_hi16', but it adds one to the value
18951
     if `tls_ie_lo16' of the input value is negative.
18952
 
18953
`tls_le'
18954
     This modifier is used to load the offset of the symbol's address
18955
     from the TCB, to be used for local-exec TLS accesses.
18956
 
18957
`tls_le_lo16'
18958
     This modifier is used to load the low 16 bits of the offset of the
18959
     symbol's address from the TCB, to be used for local-exec TLS
18960
     accesses.
18961
 
18962
`tls_le_hi16'
18963
     This modifier is used to load the high 16 bits of the offset of the
18964
     symbol's address from the TCB, to be used for local-exec TLS
18965
     accesses.
18966
 
18967
`tls_le_ha16'
18968
     This modifier is like `tls_le_hi16', but it adds one to the value
18969
     if `tls_le_lo16' of the input value is negative.
18970
 
18971
`tls_gd_call'
18972
     This modifier is used to tag an instrution as the "call" part of a
18973
     calling sequence for a TLS GD reference of its operand.
18974
 
18975
`tls_gd_add'
18976
     This modifier is used to tag an instruction as the "add" part of a
18977
     calling sequence for a TLS GD reference of its operand.
18978
 
18979
`tls_ie_load'
18980
     This modifier is used to tag an instruction as the "load" part of a
18981
     calling sequence for a TLS IE reference of its operand.
18982
 
18983
 
18984

18985
File: as.info,  Node: TILEPro Directives,  Prev: TILEPro Syntax,  Up: TILEPro-Dependent
18986
 
18987
9.43.3 TILEPro Directives
18988
-------------------------
18989
 
18990
`.align EXPRESSION [, EXPRESSION]'
18991
     This is the generic .ALIGN directive.  The first argument is the
18992
     requested alignment in bytes.
18993
 
18994
`.allow_suspicious_bundles'
18995
     Turns on error checking for combinations of instructions in a
18996
     bundle that probably indicate a programming error.  This is on by
18997
     default.
18998
 
18999
`.no_allow_suspicious_bundles'
19000
     Turns off error checking for combinations of instructions in a
19001
     bundle that probably indicate a programming error.
19002
 
19003
`.require_canonical_reg_names'
19004
     Require that canonical register names be used, and emit a warning
19005
     if the numeric names are used.  This is on by default.
19006
 
19007
`.no_require_canonical_reg_names'
19008
     Permit the use of numeric names for registers that have canonical
19009
     names.
19010
 
19011
 
19012

19013
File: as.info,  Node: Z80-Dependent,  Next: Z8000-Dependent,  Prev: Xtensa-Dependent,  Up: Machine Dependencies
19014
 
19015
9.44 Z80 Dependent Features
19016
===========================
19017
 
19018
* Menu:
19019
 
19020
* Z80 Options::              Options
19021
* Z80 Syntax::               Syntax
19022
* Z80 Floating Point::       Floating Point
19023
* Z80 Directives::           Z80 Machine Directives
19024
* Z80 Opcodes::              Opcodes
19025
 
19026

19027
File: as.info,  Node: Z80 Options,  Next: Z80 Syntax,  Up: Z80-Dependent
19028
 
19029
9.44.1 Options
19030
--------------
19031
 
19032
The Zilog Z80 and Ascii R800 version of `as' have a few machine
19033
dependent options.
19034
`-z80'
19035
     Produce code for the Z80 processor. There are additional options to
19036
     request warnings and error messages for undocumented instructions.
19037
 
19038
`-ignore-undocumented-instructions'
19039
`-Wnud'
19040
     Silently assemble undocumented Z80-instructions that have been
19041
     adopted as documented R800-instructions.
19042
 
19043
`-ignore-unportable-instructions'
19044
`-Wnup'
19045
     Silently assemble all undocumented Z80-instructions.
19046
 
19047
`-warn-undocumented-instructions'
19048
`-Wud'
19049
     Issue warnings for undocumented Z80-instructions that work on
19050
     R800, do not assemble other undocumented instructions without
19051
     warning.
19052
 
19053
`-warn-unportable-instructions'
19054
`-Wup'
19055
     Issue warnings for other undocumented Z80-instructions, do not
19056
     treat any undocumented instructions as errors.
19057
 
19058
`-forbid-undocumented-instructions'
19059
`-Fud'
19060
     Treat all undocumented z80-instructions as errors.
19061
 
19062
`-forbid-unportable-instructions'
19063
`-Fup'
19064
     Treat undocumented z80-instructions that do not work on R800 as
19065
     errors.
19066
 
19067
`-r800'
19068
     Produce code for the R800 processor. The assembler does not support
19069
     undocumented instructions for the R800.  In line with common
19070
     practice, `as' uses Z80 instruction names for the R800 processor,
19071
     as far as they exist.
19072
 
19073

19074
File: as.info,  Node: Z80 Syntax,  Next: Z80 Floating Point,  Prev: Z80 Options,  Up: Z80-Dependent
19075
 
19076
9.44.2 Syntax
19077
-------------
19078
 
19079
The assembler syntax closely follows the 'Z80 family CPU User Manual' by
19080
Zilog.  In expressions a single `=' may be used as "is equal to"
19081
comparison operator.
19082
 
19083
   Suffices can be used to indicate the radix of integer constants; `H'
19084
or `h' for hexadecimal, `D' or `d' for decimal, `Q', `O', `q' or `o'
19085
for octal, and `B' for binary.
19086
 
19087
   The suffix `b' denotes a backreference to local label.
19088
 
19089
* Menu:
19090
 
19091
* Z80-Chars::                Special Characters
19092
* Z80-Regs::                 Register Names
19093
* Z80-Case::                 Case Sensitivity
19094
 
19095

19096
File: as.info,  Node: Z80-Chars,  Next: Z80-Regs,  Up: Z80 Syntax
19097
 
19098
9.44.2.1 Special Characters
19099
...........................
19100
 
19101
The semicolon `;' is the line comment character;
19102
 
19103
   If a `#' appears as the first character of a line then the whole
19104
line is treated as a comment, but in this case the line could also be a
19105
logical line number directive (*note Comments::) or a preprocessor
19106
control command (*note Preprocessing::).
19107
 
19108
   The Z80 assembler does not support a line separator character.
19109
 
19110
   The dollar sign `$' can be used as a prefix for hexadecimal numbers
19111
and as a symbol denoting the current location counter.
19112
 
19113
   A backslash `\' is an ordinary character for the Z80 assembler.
19114
 
19115
   The single quote `'' must be followed by a closing quote. If there
19116
is one character in between, it is a character constant, otherwise it is
19117
a string constant.
19118
 
19119

19120
File: as.info,  Node: Z80-Regs,  Next: Z80-Case,  Prev: Z80-Chars,  Up: Z80 Syntax
19121
 
19122
9.44.2.2 Register Names
19123
.......................
19124
 
19125
The registers are referred to with the letters assigned to them by
19126
Zilog. In addition `as' recognizes `ixl' and `ixh' as the least and
19127
most significant octet in `ix', and similarly `iyl' and  `iyh' as parts
19128
of `iy'.
19129
 
19130

19131
File: as.info,  Node: Z80-Case,  Prev: Z80-Regs,  Up: Z80 Syntax
19132
 
19133
9.44.2.3 Case Sensitivity
19134
.........................
19135
 
19136
Upper and lower case are equivalent in register names, opcodes,
19137
condition codes  and assembler directives.  The case of letters is
19138
significant in labels and symbol names. The case is also important to
19139
distinguish the suffix `b' for a backward reference to a local label
19140
from the suffix `B' for a number in binary notation.
19141
 
19142

19143
File: as.info,  Node: Z80 Floating Point,  Next: Z80 Directives,  Prev: Z80 Syntax,  Up: Z80-Dependent
19144
 
19145
9.44.3 Floating Point
19146
---------------------
19147
 
19148
Floating-point numbers are not supported.
19149
 
19150

19151
File: as.info,  Node: Z80 Directives,  Next: Z80 Opcodes,  Prev: Z80 Floating Point,  Up: Z80-Dependent
19152
 
19153
9.44.4 Z80 Assembler Directives
19154
-------------------------------
19155
 
19156
`as' for the Z80 supports some additional directives for compatibility
19157
with other assemblers.
19158
 
19159
   These are the additional directives in `as' for the Z80:
19160
 
19161
`db EXPRESSION|STRING[,EXPRESSION|STRING...]'
19162
`defb EXPRESSION|STRING[,EXPRESSION|STRING...]'
19163
     For each STRING the characters are copied to the object file, for
19164
     each other EXPRESSION the value is stored in one byte.  A warning
19165
     is issued in case of an overflow.
19166
 
19167
`dw EXPRESSION[,EXPRESSION...]'
19168
`defw EXPRESSION[,EXPRESSION...]'
19169
     For each EXPRESSION the value is stored in two bytes, ignoring
19170
     overflow.
19171
 
19172
`d24 EXPRESSION[,EXPRESSION...]'
19173
`def24 EXPRESSION[,EXPRESSION...]'
19174
     For each EXPRESSION the value is stored in three bytes, ignoring
19175
     overflow.
19176
 
19177
`d32 EXPRESSION[,EXPRESSION...]'
19178
`def32 EXPRESSION[,EXPRESSION...]'
19179
     For each EXPRESSION the value is stored in four bytes, ignoring
19180
     overflow.
19181
 
19182
`ds COUNT[, VALUE]'
19183
`defs COUNT[, VALUE]'
19184
     Fill COUNT bytes in the object file with VALUE, if VALUE is
19185
     omitted it defaults to zero.
19186
 
19187
`SYMBOL equ EXPRESSION'
19188
`SYMBOL defl EXPRESSION'
19189
     These directives set the value of SYMBOL to EXPRESSION. If `equ'
19190
     is used, it is an error if SYMBOL is already defined.  Symbols
19191
     defined with `equ' are not protected from redefinition.
19192
 
19193
`set'
19194
     This is a normal instruction on Z80, and not an assembler
19195
     directive.
19196
 
19197
`psect NAME'
19198
     A synonym for *Note Section::, no second argument should be given.
19199
 
19200
 
19201

19202
File: as.info,  Node: Z80 Opcodes,  Prev: Z80 Directives,  Up: Z80-Dependent
19203
 
19204
9.44.5 Opcodes
19205
--------------
19206
 
19207
In line with common practice, Z80 mnemonics are used for both the Z80
19208
and the R800.
19209
 
19210
   In many instructions it is possible to use one of the half index
19211
registers (`ixl',`ixh',`iyl',`iyh') in stead of an 8-bit general
19212
purpose register. This yields instructions that are documented on the
19213
R800 and undocumented on the Z80.  Similarly `in f,(c)' is documented
19214
on the R800 and undocumented on the Z80.
19215
 
19216
   The assembler also supports the following undocumented
19217
Z80-instructions, that have not been adopted in the R800 instruction
19218
set:
19219
`out (c),0'
19220
     Sends zero to the port pointed to by register c.
19221
 
19222
`sli M'
19223
     Equivalent to `M = (M<<1)+1', the operand M can be any operand
19224
     that is valid for `sla'. One can use `sll' as a synonym for `sli'.
19225
 
19226
`OP (ix+D), R'
19227
     This is equivalent to
19228
 
19229
          ld R, (ix+D)
19230
          OPC R
19231
          ld (ix+D), R
19232
 
19233
     The operation `OPC' may be any of `res B,', `set B,', `rl', `rlc',
19234
     `rr', `rrc', `sla', `sli', `sra' and `srl', and the register `R'
19235
     may be any of `a', `b', `c', `d', `e', `h' and `l'.
19236
 
19237
`OPC (iy+D), R'
19238
     As above, but with `iy' instead of `ix'.
19239
 
19240
   The web site at `http://www.z80.info' is a good starting place to
19241
find more information on programming the Z80.
19242
 
19243

19244
File: as.info,  Node: Z8000-Dependent,  Next: Vax-Dependent,  Prev: Z80-Dependent,  Up: Machine Dependencies
19245
 
19246
9.45 Z8000 Dependent Features
19247
=============================
19248
 
19249
   The Z8000 as supports both members of the Z8000 family: the
19250
unsegmented Z8002, with 16 bit addresses, and the segmented Z8001 with
19251
24 bit addresses.
19252
 
19253
   When the assembler is in unsegmented mode (specified with the
19254
`unsegm' directive), an address takes up one word (16 bit) sized
19255
register.  When the assembler is in segmented mode (specified with the
19256
`segm' directive), a 24-bit address takes up a long (32 bit) register.
19257
*Note Assembler Directives for the Z8000: Z8000 Directives, for a list
19258
of other Z8000 specific assembler directives.
19259
 
19260
* Menu:
19261
 
19262
* Z8000 Options::               Command-line options for the Z8000
19263
* Z8000 Syntax::                Assembler syntax for the Z8000
19264
* Z8000 Directives::            Special directives for the Z8000
19265
* Z8000 Opcodes::               Opcodes
19266
 
19267

19268
File: as.info,  Node: Z8000 Options,  Next: Z8000 Syntax,  Up: Z8000-Dependent
19269
 
19270
9.45.1 Options
19271
--------------
19272
 
19273
`-z8001'
19274
     Generate segmented code by default.
19275
 
19276
`-z8002'
19277
     Generate unsegmented code by default.
19278
 
19279

19280
File: as.info,  Node: Z8000 Syntax,  Next: Z8000 Directives,  Prev: Z8000 Options,  Up: Z8000-Dependent
19281
 
19282
9.45.2 Syntax
19283
-------------
19284
 
19285
* Menu:
19286
 
19287
* Z8000-Chars::                Special Characters
19288
* Z8000-Regs::                 Register Names
19289
* Z8000-Addressing::           Addressing Modes
19290
 
19291

19292
File: as.info,  Node: Z8000-Chars,  Next: Z8000-Regs,  Up: Z8000 Syntax
19293
 
19294
9.45.2.1 Special Characters
19295
...........................
19296
 
19297
`!' is the line comment character.
19298
 
19299
   If a `#' appears as the first character of a line then the whole
19300
line is treated as a comment, but in this case the line could also be a
19301
logical line number directive (*note Comments::) or a preprocessor
19302
control command (*note Preprocessing::).
19303
 
19304
   You can use `;' instead of a newline to separate statements.
19305
 
19306

19307
File: as.info,  Node: Z8000-Regs,  Next: Z8000-Addressing,  Prev: Z8000-Chars,  Up: Z8000 Syntax
19308
 
19309
9.45.2.2 Register Names
19310
.......................
19311
 
19312
The Z8000 has sixteen 16 bit registers, numbered 0 to 15.  You can refer
19313
to different sized groups of registers by register number, with the
19314
prefix `r' for 16 bit registers, `rr' for 32 bit registers and `rq' for
19315
64 bit registers.  You can also refer to the contents of the first
19316
eight (of the sixteen 16 bit registers) by bytes.  They are named `rlN'
19317
and `rhN'.
19318
 
19319
_byte registers_
19320
     rl0 rh0 rl1 rh1 rl2 rh2 rl3 rh3
19321
     rl4 rh4 rl5 rh5 rl6 rh6 rl7 rh7
19322
 
19323
_word registers_
19324
     r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15
19325
 
19326
_long word registers_
19327
     rr0 rr2 rr4 rr6 rr8 rr10 rr12 rr14
19328
 
19329
_quad word registers_
19330
     rq0 rq4 rq8 rq12
19331
 
19332

19333
File: as.info,  Node: Z8000-Addressing,  Prev: Z8000-Regs,  Up: Z8000 Syntax
19334
 
19335
9.45.2.3 Addressing Modes
19336
.........................
19337
 
19338
as understands the following addressing modes for the Z8000:
19339
 
19340
`rlN'
19341
`rhN'
19342
`rN'
19343
`rrN'
19344
`rqN'
19345
     Register direct:  8bit, 16bit, 32bit, and 64bit registers.
19346
 
19347
`@rN'
19348
`@rrN'
19349
     Indirect register:  @rrN in segmented mode, @rN in unsegmented
19350
     mode.
19351
 
19352
`ADDR'
19353
     Direct: the 16 bit or 24 bit address (depending on whether the
19354
     assembler is in segmented or unsegmented mode) of the operand is
19355
     in the instruction.
19356
 
19357
`address(rN)'
19358
     Indexed: the 16 or 24 bit address is added to the 16 bit register
19359
     to produce the final address in memory of the operand.
19360
 
19361
`rN(#IMM)'
19362
`rrN(#IMM)'
19363
     Base Address: the 16 or 24 bit register is added to the 16 bit sign
19364
     extended immediate displacement to produce the final address in
19365
     memory of the operand.
19366
 
19367
`rN(rM)'
19368
`rrN(rM)'
19369
     Base Index: the 16 or 24 bit register rN or rrN is added to the
19370
     sign extended 16 bit index register rM to produce the final
19371
     address in memory of the operand.
19372
 
19373
`#XX'
19374
     Immediate data XX.
19375
 
19376

19377
File: as.info,  Node: Z8000 Directives,  Next: Z8000 Opcodes,  Prev: Z8000 Syntax,  Up: Z8000-Dependent
19378
 
19379
9.45.3 Assembler Directives for the Z8000
19380
-----------------------------------------
19381
 
19382
The Z8000 port of as includes additional assembler directives, for
19383
compatibility with other Z8000 assemblers.  These do not begin with `.'
19384
(unlike the ordinary as directives).
19385
 
19386
`segm'
19387
`.z8001'
19388
     Generate code for the segmented Z8001.
19389
 
19390
`unsegm'
19391
`.z8002'
19392
     Generate code for the unsegmented Z8002.
19393
 
19394
`name'
19395
     Synonym for `.file'
19396
 
19397
`global'
19398
     Synonym for `.global'
19399
 
19400
`wval'
19401
     Synonym for `.word'
19402
 
19403
`lval'
19404
     Synonym for `.long'
19405
 
19406
`bval'
19407
     Synonym for `.byte'
19408
 
19409
`sval'
19410
     Assemble a string.  `sval' expects one string literal, delimited by
19411
     single quotes.  It assembles each byte of the string into
19412
     consecutive addresses.  You can use the escape sequence `%XX'
19413
     (where XX represents a two-digit hexadecimal number) to represent
19414
     the character whose ASCII value is XX.  Use this feature to
19415
     describe single quote and other characters that may not appear in
19416
     string literals as themselves.  For example, the C statement
19417
     `char *a = "he said \"it's 50% off\"";' is represented in Z8000
19418
     assembly language (shown with the assembler output in hex at the
19419
     left) as
19420
 
19421
          68652073    sval    'he said %22it%27s 50%25 off%22%00'
19422
          61696420
19423
          22697427
19424
          73203530
19425
          25206F66
19426
          662200
19427
 
19428
`rsect'
19429
     synonym for `.section'
19430
 
19431
`block'
19432
     synonym for `.space'
19433
 
19434
`even'
19435
     special case of `.align'; aligns output to even byte boundary.
19436
 
19437

19438
File: as.info,  Node: Z8000 Opcodes,  Prev: Z8000 Directives,  Up: Z8000-Dependent
19439
 
19440
9.45.4 Opcodes
19441
--------------
19442
 
19443
For detailed information on the Z8000 machine instruction set, see
19444
`Z8000 Technical Manual'.
19445
 
19446
   The following table summarizes the opcodes and their arguments:
19447
 
19448
                 rs   16 bit source register
19449
                 rd   16 bit destination register
19450
                 rbs   8 bit source register
19451
                 rbd   8 bit destination register
19452
                 rrs   32 bit source register
19453
                 rrd   32 bit destination register
19454
                 rqs   64 bit source register
19455
                 rqd   64 bit destination register
19456
                 addr 16/24 bit address
19457
                 imm  immediate data
19458
 
19459
     adc rd,rs               clrb addr               cpsir @rd,@rs,rr,cc
19460
     adcb rbd,rbs            clrb addr(rd)           cpsirb @rd,@rs,rr,cc
19461
     add rd,@rs              clrb rbd                dab rbd
19462
     add rd,addr             com @rd                 dbjnz rbd,disp7
19463
     add rd,addr(rs)         com addr                dec @rd,imm4m1
19464
     add rd,imm16            com addr(rd)            dec addr(rd),imm4m1
19465
     add rd,rs               com rd                  dec addr,imm4m1
19466
     addb rbd,@rs            comb @rd                dec rd,imm4m1
19467
     addb rbd,addr           comb addr               decb @rd,imm4m1
19468
     addb rbd,addr(rs)       comb addr(rd)           decb addr(rd),imm4m1
19469
     addb rbd,imm8           comb rbd                decb addr,imm4m1
19470
     addb rbd,rbs            comflg flags            decb rbd,imm4m1
19471
     addl rrd,@rs            cp @rd,imm16            di i2
19472
     addl rrd,addr           cp addr(rd),imm16       div rrd,@rs
19473
     addl rrd,addr(rs)       cp addr,imm16           div rrd,addr
19474
     addl rrd,imm32          cp rd,@rs               div rrd,addr(rs)
19475
     addl rrd,rrs            cp rd,addr              div rrd,imm16
19476
     and rd,@rs              cp rd,addr(rs)          div rrd,rs
19477
     and rd,addr             cp rd,imm16             divl rqd,@rs
19478
     and rd,addr(rs)         cp rd,rs                divl rqd,addr
19479
     and rd,imm16            cpb @rd,imm8            divl rqd,addr(rs)
19480
     and rd,rs               cpb addr(rd),imm8       divl rqd,imm32
19481
     andb rbd,@rs            cpb addr,imm8           divl rqd,rrs
19482
     andb rbd,addr           cpb rbd,@rs             djnz rd,disp7
19483
     andb rbd,addr(rs)       cpb rbd,addr            ei i2
19484
     andb rbd,imm8           cpb rbd,addr(rs)        ex rd,@rs
19485
     andb rbd,rbs            cpb rbd,imm8            ex rd,addr
19486
     bit @rd,imm4            cpb rbd,rbs             ex rd,addr(rs)
19487
     bit addr(rd),imm4       cpd rd,@rs,rr,cc        ex rd,rs
19488
     bit addr,imm4           cpdb rbd,@rs,rr,cc      exb rbd,@rs
19489
     bit rd,imm4             cpdr rd,@rs,rr,cc       exb rbd,addr
19490
     bit rd,rs               cpdrb rbd,@rs,rr,cc     exb rbd,addr(rs)
19491
     bitb @rd,imm4           cpi rd,@rs,rr,cc        exb rbd,rbs
19492
     bitb addr(rd),imm4      cpib rbd,@rs,rr,cc      ext0e imm8
19493
     bitb addr,imm4          cpir rd,@rs,rr,cc       ext0f imm8
19494
     bitb rbd,imm4           cpirb rbd,@rs,rr,cc     ext8e imm8
19495
     bitb rbd,rs             cpl rrd,@rs             ext8f imm8
19496
     bpt                     cpl rrd,addr            exts rrd
19497
     call @rd                cpl rrd,addr(rs)        extsb rd
19498
     call addr               cpl rrd,imm32           extsl rqd
19499
     call addr(rd)           cpl rrd,rrs             halt
19500
     calr disp12             cpsd @rd,@rs,rr,cc      in rd,@rs
19501
     clr @rd                 cpsdb @rd,@rs,rr,cc     in rd,imm16
19502
     clr addr                cpsdr @rd,@rs,rr,cc     inb rbd,@rs
19503
     clr addr(rd)            cpsdrb @rd,@rs,rr,cc    inb rbd,imm16
19504
     clr rd                  cpsi @rd,@rs,rr,cc      inc @rd,imm4m1
19505
     clrb @rd                cpsib @rd,@rs,rr,cc     inc addr(rd),imm4m1
19506
     inc addr,imm4m1         ldb rbd,rs(rx)          mult rrd,addr(rs)
19507
     inc rd,imm4m1           ldb rd(imm16),rbs       mult rrd,imm16
19508
     incb @rd,imm4m1         ldb rd(rx),rbs          mult rrd,rs
19509
     incb addr(rd),imm4m1    ldctl ctrl,rs           multl rqd,@rs
19510
     incb addr,imm4m1        ldctl rd,ctrl           multl rqd,addr
19511
     incb rbd,imm4m1         ldd @rs,@rd,rr          multl rqd,addr(rs)
19512
     ind @rd,@rs,ra          lddb @rs,@rd,rr         multl rqd,imm32
19513
     indb @rd,@rs,rba        lddr @rs,@rd,rr         multl rqd,rrs
19514
     inib @rd,@rs,ra         lddrb @rs,@rd,rr        neg @rd
19515
     inibr @rd,@rs,ra        ldi @rd,@rs,rr          neg addr
19516
     iret                    ldib @rd,@rs,rr         neg addr(rd)
19517
     jp cc,@rd               ldir @rd,@rs,rr         neg rd
19518
     jp cc,addr              ldirb @rd,@rs,rr        negb @rd
19519
     jp cc,addr(rd)          ldk rd,imm4             negb addr
19520
     jr cc,disp8             ldl @rd,rrs             negb addr(rd)
19521
     ld @rd,imm16            ldl addr(rd),rrs        negb rbd
19522
     ld @rd,rs               ldl addr,rrs            nop
19523
     ld addr(rd),imm16       ldl rd(imm16),rrs       or rd,@rs
19524
     ld addr(rd),rs          ldl rd(rx),rrs          or rd,addr
19525
     ld addr,imm16           ldl rrd,@rs             or rd,addr(rs)
19526
     ld addr,rs              ldl rrd,addr            or rd,imm16
19527
     ld rd(imm16),rs         ldl rrd,addr(rs)        or rd,rs
19528
     ld rd(rx),rs            ldl rrd,imm32           orb rbd,@rs
19529
     ld rd,@rs               ldl rrd,rrs             orb rbd,addr
19530
     ld rd,addr              ldl rrd,rs(imm16)       orb rbd,addr(rs)
19531
     ld rd,addr(rs)          ldl rrd,rs(rx)          orb rbd,imm8
19532
     ld rd,imm16             ldm @rd,rs,n            orb rbd,rbs
19533
     ld rd,rs                ldm addr(rd),rs,n       out @rd,rs
19534
     ld rd,rs(imm16)         ldm addr,rs,n           out imm16,rs
19535
     ld rd,rs(rx)            ldm rd,@rs,n            outb @rd,rbs
19536
     lda rd,addr             ldm rd,addr(rs),n       outb imm16,rbs
19537
     lda rd,addr(rs)         ldm rd,addr,n           outd @rd,@rs,ra
19538
     lda rd,rs(imm16)        ldps @rs                outdb @rd,@rs,rba
19539
     lda rd,rs(rx)           ldps addr               outib @rd,@rs,ra
19540
     ldar rd,disp16          ldps addr(rs)           outibr @rd,@rs,ra
19541
     ldb @rd,imm8            ldr disp16,rs           pop @rd,@rs
19542
     ldb @rd,rbs             ldr rd,disp16           pop addr(rd),@rs
19543
     ldb addr(rd),imm8       ldrb disp16,rbs         pop addr,@rs
19544
     ldb addr(rd),rbs        ldrb rbd,disp16         pop rd,@rs
19545
     ldb addr,imm8           ldrl disp16,rrs         popl @rd,@rs
19546
     ldb addr,rbs            ldrl rrd,disp16         popl addr(rd),@rs
19547
     ldb rbd,@rs             mbit                    popl addr,@rs
19548
     ldb rbd,addr            mreq rd                 popl rrd,@rs
19549
     ldb rbd,addr(rs)        mres                    push @rd,@rs
19550
     ldb rbd,imm8            mset                    push @rd,addr
19551
     ldb rbd,rbs             mult rrd,@rs            push @rd,addr(rs)
19552
     ldb rbd,rs(imm16)       mult rrd,addr           push @rd,imm16
19553
     push @rd,rs             set addr,imm4           subl rrd,imm32
19554
     pushl @rd,@rs           set rd,imm4             subl rrd,rrs
19555
     pushl @rd,addr          set rd,rs               tcc cc,rd
19556
     pushl @rd,addr(rs)      setb @rd,imm4           tccb cc,rbd
19557
     pushl @rd,rrs           setb addr(rd),imm4      test @rd
19558
     res @rd,imm4            setb addr,imm4          test addr
19559
     res addr(rd),imm4       setb rbd,imm4           test addr(rd)
19560
     res addr,imm4           setb rbd,rs             test rd
19561
     res rd,imm4             setflg imm4             testb @rd
19562
     res rd,rs               sinb rbd,imm16          testb addr
19563
     resb @rd,imm4           sinb rd,imm16           testb addr(rd)
19564
     resb addr(rd),imm4      sind @rd,@rs,ra         testb rbd
19565
     resb addr,imm4          sindb @rd,@rs,rba       testl @rd
19566
     resb rbd,imm4           sinib @rd,@rs,ra        testl addr
19567
     resb rbd,rs             sinibr @rd,@rs,ra       testl addr(rd)
19568
     resflg imm4             sla rd,imm8             testl rrd
19569
     ret cc                  slab rbd,imm8           trdb @rd,@rs,rba
19570
     rl rd,imm1or2           slal rrd,imm8           trdrb @rd,@rs,rba
19571
     rlb rbd,imm1or2         sll rd,imm8             trib @rd,@rs,rbr
19572
     rlc rd,imm1or2          sllb rbd,imm8           trirb @rd,@rs,rbr
19573
     rlcb rbd,imm1or2        slll rrd,imm8           trtdrb @ra,@rb,rbr
19574
     rldb rbb,rba            sout imm16,rs           trtib @ra,@rb,rr
19575
     rr rd,imm1or2           soutb imm16,rbs         trtirb @ra,@rb,rbr
19576
     rrb rbd,imm1or2         soutd @rd,@rs,ra        trtrb @ra,@rb,rbr
19577
     rrc rd,imm1or2          soutdb @rd,@rs,rba      tset @rd
19578
     rrcb rbd,imm1or2        soutib @rd,@rs,ra       tset addr
19579
     rrdb rbb,rba            soutibr @rd,@rs,ra      tset addr(rd)
19580
     rsvd36                  sra rd,imm8             tset rd
19581
     rsvd38                  srab rbd,imm8           tsetb @rd
19582
     rsvd78                  sral rrd,imm8           tsetb addr
19583
     rsvd7e                  srl rd,imm8             tsetb addr(rd)
19584
     rsvd9d                  srlb rbd,imm8           tsetb rbd
19585
     rsvd9f                  srll rrd,imm8           xor rd,@rs
19586
     rsvdb9                  sub rd,@rs              xor rd,addr
19587
     rsvdbf                  sub rd,addr             xor rd,addr(rs)
19588
     sbc rd,rs               sub rd,addr(rs)         xor rd,imm16
19589
     sbcb rbd,rbs            sub rd,imm16            xor rd,rs
19590
     sc imm8                 sub rd,rs               xorb rbd,@rs
19591
     sda rd,rs               subb rbd,@rs            xorb rbd,addr
19592
     sdab rbd,rs             subb rbd,addr           xorb rbd,addr(rs)
19593
     sdal rrd,rs             subb rbd,addr(rs)       xorb rbd,imm8
19594
     sdl rd,rs               subb rbd,imm8           xorb rbd,rbs
19595
     sdlb rbd,rs             subb rbd,rbs            xorb rbd,rbs
19596
     sdll rrd,rs             subl rrd,@rs
19597
     set @rd,imm4            subl rrd,addr
19598
     set addr(rd),imm4       subl rrd,addr(rs)
19599
 
19600

19601
File: as.info,  Node: Vax-Dependent,  Prev: Z8000-Dependent,  Up: Machine Dependencies
19602
 
19603
9.46 VAX Dependent Features
19604
===========================
19605
 
19606
* Menu:
19607
 
19608
* VAX-Opts::                    VAX Command-Line Options
19609
* VAX-float::                   VAX Floating Point
19610
* VAX-directives::              Vax Machine Directives
19611
* VAX-opcodes::                 VAX Opcodes
19612
* VAX-branch::                  VAX Branch Improvement
19613
* VAX-operands::                VAX Operands
19614
* VAX-no::                      Not Supported on VAX
19615
* VAX-Syntax::                  VAX Syntax
19616
 
19617

19618
File: as.info,  Node: VAX-Opts,  Next: VAX-float,  Up: Vax-Dependent
19619
 
19620
9.46.1 VAX Command-Line Options
19621
-------------------------------
19622
 
19623
The Vax version of `as' accepts any of the following options, gives a
19624
warning message that the option was ignored and proceeds.  These
19625
options are for compatibility with scripts designed for other people's
19626
assemblers.
19627
 
19628
``-D' (Debug)'
19629
``-S' (Symbol Table)'
19630
``-T' (Token Trace)'
19631
     These are obsolete options used to debug old assemblers.
19632
 
19633
``-d' (Displacement size for JUMPs)'
19634
     This option expects a number following the `-d'.  Like options
19635
     that expect filenames, the number may immediately follow the `-d'
19636
     (old standard) or constitute the whole of the command line
19637
     argument that follows `-d' (GNU standard).
19638
 
19639
``-V' (Virtualize Interpass Temporary File)'
19640
     Some other assemblers use a temporary file.  This option commanded
19641
     them to keep the information in active memory rather than in a
19642
     disk file.  `as' always does this, so this option is redundant.
19643
 
19644
``-J' (JUMPify Longer Branches)'
19645
     Many 32-bit computers permit a variety of branch instructions to
19646
     do the same job.  Some of these instructions are short (and fast)
19647
     but have a limited range; others are long (and slow) but can
19648
     branch anywhere in virtual memory.  Often there are 3 flavors of
19649
     branch: short, medium and long.  Some other assemblers would emit
19650
     short and medium branches, unless told by this option to emit
19651
     short and long branches.
19652
 
19653
``-t' (Temporary File Directory)'
19654
     Some other assemblers may use a temporary file, and this option
19655
     takes a filename being the directory to site the temporary file.
19656
     Since `as' does not use a temporary disk file, this option makes
19657
     no difference.  `-t' needs exactly one filename.
19658
 
19659
   The Vax version of the assembler accepts additional options when
19660
compiled for VMS:
19661
 
19662
`-h N'
19663
     External symbol or section (used for global variables) names are
19664
     not case sensitive on VAX/VMS and always mapped to upper case.
19665
     This is contrary to the C language definition which explicitly
19666
     distinguishes upper and lower case.  To implement a standard
19667
     conforming C compiler, names must be changed (mapped) to preserve
19668
     the case information.  The default mapping is to convert all lower
19669
     case characters to uppercase and adding an underscore followed by
19670
     a 6 digit hex value, representing a 24 digit binary value.  The
19671
     one digits in the binary value represent which characters are
19672
     uppercase in the original symbol name.
19673
 
19674
     The `-h N' option determines how we map names.  This takes several
19675
     values.  No `-h' switch at all allows case hacking as described
19676
     above.  A value of zero (`-h0') implies names should be upper
19677
     case, and inhibits the case hack.  A value of 2 (`-h2') implies
19678
     names should be all lower case, with no case hack.  A value of 3
19679
     (`-h3') implies that case should be preserved.  The value 1 is
19680
     unused.  The `-H' option directs `as' to display every mapped
19681
     symbol during assembly.
19682
 
19683
     Symbols whose names include a dollar sign `$' are exceptions to the
19684
     general name mapping.  These symbols are normally only used to
19685
     reference VMS library names.  Such symbols are always mapped to
19686
     upper case.
19687
 
19688
`-+'
19689
     The `-+' option causes `as' to truncate any symbol name larger
19690
     than 31 characters.  The `-+' option also prevents some code
19691
     following the `_main' symbol normally added to make the object
19692
     file compatible with Vax-11 "C".
19693
 
19694
`-1'
19695
     This option is ignored for backward compatibility with `as'
19696
     version 1.x.
19697
 
19698
`-H'
19699
     The `-H' option causes `as' to print every symbol which was
19700
     changed by case mapping.
19701
 
19702

19703
File: as.info,  Node: VAX-float,  Next: VAX-directives,  Prev: VAX-Opts,  Up: Vax-Dependent
19704
 
19705
9.46.2 VAX Floating Point
19706
-------------------------
19707
 
19708
Conversion of flonums to floating point is correct, and compatible with
19709
previous assemblers.  Rounding is towards zero if the remainder is
19710
exactly half the least significant bit.
19711
 
19712
   `D', `F', `G' and `H' floating point formats are understood.
19713
 
19714
   Immediate floating literals (_e.g._ `S`$6.9') are rendered
19715
correctly.  Again, rounding is towards zero in the boundary case.
19716
 
19717
   The `.float' directive produces `f' format numbers.  The `.double'
19718
directive produces `d' format numbers.
19719
 
19720

19721
File: as.info,  Node: VAX-directives,  Next: VAX-opcodes,  Prev: VAX-float,  Up: Vax-Dependent
19722
 
19723
9.46.3 Vax Machine Directives
19724
-----------------------------
19725
 
19726
The Vax version of the assembler supports four directives for
19727
generating Vax floating point constants.  They are described in the
19728
table below.
19729
 
19730
`.dfloat'
19731
     This expects zero or more flonums, separated by commas, and
19732
     assembles Vax `d' format 64-bit floating point constants.
19733
 
19734
`.ffloat'
19735
     This expects zero or more flonums, separated by commas, and
19736
     assembles Vax `f' format 32-bit floating point constants.
19737
 
19738
`.gfloat'
19739
     This expects zero or more flonums, separated by commas, and
19740
     assembles Vax `g' format 64-bit floating point constants.
19741
 
19742
`.hfloat'
19743
     This expects zero or more flonums, separated by commas, and
19744
     assembles Vax `h' format 128-bit floating point constants.
19745
 
19746
 
19747

19748
File: as.info,  Node: VAX-opcodes,  Next: VAX-branch,  Prev: VAX-directives,  Up: Vax-Dependent
19749
 
19750
9.46.4 VAX Opcodes
19751
------------------
19752
 
19753
All DEC mnemonics are supported.  Beware that `case...' instructions
19754
have exactly 3 operands.  The dispatch table that follows the `case...'
19755
instruction should be made with `.word' statements.  This is compatible
19756
with all unix assemblers we know of.
19757
 
19758

19759
File: as.info,  Node: VAX-branch,  Next: VAX-operands,  Prev: VAX-opcodes,  Up: Vax-Dependent
19760
 
19761
9.46.5 VAX Branch Improvement
19762
-----------------------------
19763
 
19764
Certain pseudo opcodes are permitted.  They are for branch
19765
instructions.  They expand to the shortest branch instruction that
19766
reaches the target.  Generally these mnemonics are made by substituting
19767
`j' for `b' at the start of a DEC mnemonic.  This feature is included
19768
both for compatibility and to help compilers.  If you do not need this
19769
feature, avoid these opcodes.  Here are the mnemonics, and the code
19770
they can expand into.
19771
 
19772
`jbsb'
19773
     `Jsb' is already an instruction mnemonic, so we chose `jbsb'.
19774
    (byte displacement)
19775
          `bsbb ...'
19776
 
19777
    (word displacement)
19778
          `bsbw ...'
19779
 
19780
    (long displacement)
19781
          `jsb ...'
19782
 
19783
`jbr'
19784
`jr'
19785
     Unconditional branch.
19786
    (byte displacement)
19787
          `brb ...'
19788
 
19789
    (word displacement)
19790
          `brw ...'
19791
 
19792
    (long displacement)
19793
          `jmp ...'
19794
 
19795
`jCOND'
19796
     COND may be any one of the conditional branches `neq', `nequ',
19797
     `eql', `eqlu', `gtr', `geq', `lss', `gtru', `lequ', `vc', `vs',
19798
     `gequ', `cc', `lssu', `cs'.  COND may also be one of the bit tests
19799
     `bs', `bc', `bss', `bcs', `bsc', `bcc', `bssi', `bcci', `lbs',
19800
     `lbc'.  NOTCOND is the opposite condition to COND.
19801
    (byte displacement)
19802
          `bCOND ...'
19803
 
19804
    (word displacement)
19805
          `bNOTCOND foo ; brw ... ; foo:'
19806
 
19807
    (long displacement)
19808
          `bNOTCOND foo ; jmp ... ; foo:'
19809
 
19810
`jacbX'
19811
     X may be one of `b d f g h l w'.
19812
    (word displacement)
19813
          `OPCODE ...'
19814
 
19815
    (long displacement)
19816
               OPCODE ..., foo ;
19817
               brb bar ;
19818
               foo: jmp ... ;
19819
               bar:
19820
 
19821
`jaobYYY'
19822
     YYY may be one of `lss leq'.
19823
 
19824
`jsobZZZ'
19825
     ZZZ may be one of `geq gtr'.
19826
    (byte displacement)
19827
          `OPCODE ...'
19828
 
19829
    (word displacement)
19830
               OPCODE ..., foo ;
19831
               brb bar ;
19832
               foo: brw DESTINATION ;
19833
               bar:
19834
 
19835
    (long displacement)
19836
               OPCODE ..., foo ;
19837
               brb bar ;
19838
               foo: jmp DESTINATION ;
19839
               bar:
19840
 
19841
`aobleq'
19842
`aoblss'
19843
`sobgeq'
19844
`sobgtr'
19845
 
19846
    (byte displacement)
19847
          `OPCODE ...'
19848
 
19849
    (word displacement)
19850
               OPCODE ..., foo ;
19851
               brb bar ;
19852
               foo: brw DESTINATION ;
19853
               bar:
19854
 
19855
    (long displacement)
19856
               OPCODE ..., foo ;
19857
               brb bar ;
19858
               foo: jmp DESTINATION ;
19859
               bar:
19860
 
19861

19862
File: as.info,  Node: VAX-operands,  Next: VAX-no,  Prev: VAX-branch,  Up: Vax-Dependent
19863
 
19864
9.46.6 VAX Operands
19865
-------------------
19866
 
19867
The immediate character is `$' for Unix compatibility, not `#' as DEC
19868
writes it.
19869
 
19870
   The indirect character is `*' for Unix compatibility, not `@' as DEC
19871
writes it.
19872
 
19873
   The displacement sizing character is ``' (an accent grave) for Unix
19874
compatibility, not `^' as DEC writes it.  The letter preceding ``' may
19875
have either case.  `G' is not understood, but all other letters (`b i l
19876
s w') are understood.
19877
 
19878
   Register names understood are `r0 r1 r2 ... r15 ap fp sp pc'.  Upper
19879
and lower case letters are equivalent.
19880
 
19881
   For instance
19882
     tstb *w`$4(r5)
19883
 
19884
   Any expression is permitted in an operand.  Operands are comma
19885
separated.
19886
 
19887

19888
File: as.info,  Node: VAX-no,  Next: VAX-Syntax,  Prev: VAX-operands,  Up: Vax-Dependent
19889
 
19890
9.46.7 Not Supported on VAX
19891
---------------------------
19892
 
19893
Vax bit fields can not be assembled with `as'.  Someone can add the
19894
required code if they really need it.
19895
 
19896

19897
File: as.info,  Node: VAX-Syntax,  Prev: VAX-no,  Up: Vax-Dependent
19898
 
19899
9.46.8 VAX Syntax
19900
-----------------
19901
 
19902
* Menu:
19903
 
19904
* VAX-Chars::                Special Characters
19905
 
19906

19907
File: as.info,  Node: VAX-Chars,  Up: VAX-Syntax
19908
 
19909
9.46.8.1 Special Characters
19910
...........................
19911
 
19912
The presence of a `#' appearing anywhere on a line indicates the start
19913
of a comment that extends to the end of that line.
19914
 
19915
   If a `#' appears as the first character of a line then the whole
19916
line is treated as a comment, but in this case the line can also be a
19917
logical line number directive (*note Comments::) or a preprocessor
19918
control command (*note Preprocessing::).
19919
 
19920
   The `;' character can be used to separate statements on the same
19921
line.
19922
 
19923

19924
File: as.info,  Node: V850-Dependent,  Next: XGATE-Dependent,  Prev: TILEPro-Dependent,  Up: Machine Dependencies
19925
 
19926
9.47 v850 Dependent Features
19927
============================
19928
 
19929
* Menu:
19930
 
19931
* V850 Options::              Options
19932
* V850 Syntax::               Syntax
19933
* V850 Floating Point::       Floating Point
19934
* V850 Directives::           V850 Machine Directives
19935
* V850 Opcodes::              Opcodes
19936
 
19937

19938
File: as.info,  Node: V850 Options,  Next: V850 Syntax,  Up: V850-Dependent
19939
 
19940
9.47.1 Options
19941
--------------
19942
 
19943
`as' supports the following additional command-line options for the
19944
V850 processor family:
19945
 
19946
`-wsigned_overflow'
19947
     Causes warnings to be produced when signed immediate values
19948
     overflow the space available for then within their opcodes.  By
19949
     default this option is disabled as it is possible to receive
19950
     spurious warnings due to using exact bit patterns as immediate
19951
     constants.
19952
 
19953
`-wunsigned_overflow'
19954
     Causes warnings to be produced when unsigned immediate values
19955
     overflow the space available for then within their opcodes.  By
19956
     default this option is disabled as it is possible to receive
19957
     spurious warnings due to using exact bit patterns as immediate
19958
     constants.
19959
 
19960
`-mv850'
19961
     Specifies that the assembled code should be marked as being
19962
     targeted at the V850 processor.  This allows the linker to detect
19963
     attempts to link such code with code assembled for other
19964
     processors.
19965
 
19966
`-mv850e'
19967
     Specifies that the assembled code should be marked as being
19968
     targeted at the V850E processor.  This allows the linker to detect
19969
     attempts to link such code with code assembled for other
19970
     processors.
19971
 
19972
`-mv850e1'
19973
     Specifies that the assembled code should be marked as being
19974
     targeted at the V850E1 processor.  This allows the linker to
19975
     detect attempts to link such code with code assembled for other
19976
     processors.
19977
 
19978
`-mv850any'
19979
     Specifies that the assembled code should be marked as being
19980
     targeted at the V850 processor but support instructions that are
19981
     specific to the extended variants of the process.  This allows the
19982
     production of binaries that contain target specific code, but
19983
     which are also intended to be used in a generic fashion.  For
19984
     example libgcc.a contains generic routines used by the code
19985
     produced by GCC for all versions of the v850 architecture,
19986
     together with support routines only used by the V850E architecture.
19987
 
19988
`-mv850e2'
19989
     Specifies that the assembled code should be marked as being
19990
     targeted at the V850E2 processor.  This allows the linker to
19991
     detect attempts to link such code with code assembled for other
19992
     processors.
19993
 
19994
`-mv850e2v3'
19995
     Specifies that the assembled code should be marked as being
19996
     targeted at the V850E2V3 processor.  This allows the linker to
19997
     detect attempts to link such code with code assembled for other
19998
     processors.
19999
 
20000
`-mrelax'
20001
     Enables relaxation.  This allows the .longcall and .longjump pseudo
20002
     ops to be used in the assembler source code.  These ops label
20003
     sections of code which are either a long function call or a long
20004
     branch.  The assembler will then flag these sections of code and
20005
     the linker will attempt to relax them.
20006
 
20007
`-mgcc-abi'
20008
     Marks the generated objecy file as supporting the old GCC ABI.
20009
 
20010
`-mrh850-abi'
20011
     Marks the generated objecy file as supporting the RH850 ABI.  This
20012
     is the default.
20013
 
20014
`-m8byte-align'
20015
     Marks the generated objecy file as supporting a maximum 64-bits of
20016
     alignment for variables defined in the source code.
20017
 
20018
`-m4byte-align'
20019
     Marks the generated objecy file as supporting a maximum 32-bits of
20020
     alignment for variables defined in the source code.  This is the
20021
     default.
20022
 
20023
 
20024

20025
File: as.info,  Node: V850 Syntax,  Next: V850 Floating Point,  Prev: V850 Options,  Up: V850-Dependent
20026
 
20027
9.47.2 Syntax
20028
-------------
20029
 
20030
* Menu:
20031
 
20032
* V850-Chars::                Special Characters
20033
* V850-Regs::                 Register Names
20034
 
20035

20036
File: as.info,  Node: V850-Chars,  Next: V850-Regs,  Up: V850 Syntax
20037
 
20038
9.47.2.1 Special Characters
20039
...........................
20040
 
20041
`#' is the line comment character.  If a `#' appears as the first
20042
character of a line, the whole line is treated as a comment, but in
20043
this case the line can also be a logical line number directive (*note
20044
Comments::) or a preprocessor control command (*note Preprocessing::).
20045
 
20046
   Two dashes (`--') can also be used to start a line comment.
20047
 
20048
   The `;' character can be used to separate statements on the same
20049
line.
20050
 
20051

20052
File: as.info,  Node: V850-Regs,  Prev: V850-Chars,  Up: V850 Syntax
20053
 
20054
9.47.2.2 Register Names
20055
.......................
20056
 
20057
`as' supports the following names for registers:
20058
`general register 0'
20059
     r0, zero
20060
 
20061
`general register 1'
20062
     r1
20063
 
20064
`general register 2'
20065
     r2, hp
20066
 
20067
`general register 3'
20068
     r3, sp
20069
 
20070
`general register 4'
20071
     r4, gp
20072
 
20073
`general register 5'
20074
     r5, tp
20075
 
20076
`general register 6'
20077
     r6
20078
 
20079
`general register 7'
20080
     r7
20081
 
20082
`general register 8'
20083
     r8
20084
 
20085
`general register 9'
20086
     r9
20087
 
20088
`general register 10'
20089
     r10
20090
 
20091
`general register 11'
20092
     r11
20093
 
20094
`general register 12'
20095
     r12
20096
 
20097
`general register 13'
20098
     r13
20099
 
20100
`general register 14'
20101
     r14
20102
 
20103
`general register 15'
20104
     r15
20105
 
20106
`general register 16'
20107
     r16
20108
 
20109
`general register 17'
20110
     r17
20111
 
20112
`general register 18'
20113
     r18
20114
 
20115
`general register 19'
20116
     r19
20117
 
20118
`general register 20'
20119
     r20
20120
 
20121
`general register 21'
20122
     r21
20123
 
20124
`general register 22'
20125
     r22
20126
 
20127
`general register 23'
20128
     r23
20129
 
20130
`general register 24'
20131
     r24
20132
 
20133
`general register 25'
20134
     r25
20135
 
20136
`general register 26'
20137
     r26
20138
 
20139
`general register 27'
20140
     r27
20141
 
20142
`general register 28'
20143
     r28
20144
 
20145
`general register 29'
20146
     r29
20147
 
20148
`general register 30'
20149
     r30, ep
20150
 
20151
`general register 31'
20152
     r31, lp
20153
 
20154
`system register 0'
20155
     eipc
20156
 
20157
`system register 1'
20158
     eipsw
20159
 
20160
`system register 2'
20161
     fepc
20162
 
20163
`system register 3'
20164
     fepsw
20165
 
20166
`system register 4'
20167
     ecr
20168
 
20169
`system register 5'
20170
     psw
20171
 
20172
`system register 16'
20173
     ctpc
20174
 
20175
`system register 17'
20176
     ctpsw
20177
 
20178
`system register 18'
20179
     dbpc
20180
 
20181
`system register 19'
20182
     dbpsw
20183
 
20184
`system register 20'
20185
     ctbp
20186
 
20187

20188
File: as.info,  Node: V850 Floating Point,  Next: V850 Directives,  Prev: V850 Syntax,  Up: V850-Dependent
20189
 
20190
9.47.3 Floating Point
20191
---------------------
20192
 
20193
The V850 family uses IEEE floating-point numbers.
20194
 
20195

20196
File: as.info,  Node: V850 Directives,  Next: V850 Opcodes,  Prev: V850 Floating Point,  Up: V850-Dependent
20197
 
20198
9.47.4 V850 Machine Directives
20199
------------------------------
20200
 
20201
`.offset '
20202
     Moves the offset into the current section to the specified amount.
20203
 
20204
`.section "name", '
20205
     This is an extension to the standard .section directive.  It sets
20206
     the current section to be  and creates an alias for this
20207
     section called "name".
20208
 
20209
`.v850'
20210
     Specifies that the assembled code should be marked as being
20211
     targeted at the V850 processor.  This allows the linker to detect
20212
     attempts to link such code with code assembled for other
20213
     processors.
20214
 
20215
`.v850e'
20216
     Specifies that the assembled code should be marked as being
20217
     targeted at the V850E processor.  This allows the linker to detect
20218
     attempts to link such code with code assembled for other
20219
     processors.
20220
 
20221
`.v850e1'
20222
     Specifies that the assembled code should be marked as being
20223
     targeted at the V850E1 processor.  This allows the linker to
20224
     detect attempts to link such code with code assembled for other
20225
     processors.
20226
 
20227
`.v850e2'
20228
     Specifies that the assembled code should be marked as being
20229
     targeted at the V850E2 processor.  This allows the linker to
20230
     detect attempts to link such code with code assembled for other
20231
     processors.
20232
 
20233
`.v850e2v3'
20234
     Specifies that the assembled code should be marked as being
20235
     targeted at the V850E2V3 processor.  This allows the linker to
20236
     detect attempts to link such code with code assembled for other
20237
     processors.
20238
 
20239
 
20240

20241
File: as.info,  Node: V850 Opcodes,  Prev: V850 Directives,  Up: V850-Dependent
20242
 
20243
9.47.5 Opcodes
20244
--------------
20245
 
20246
`as' implements all the standard V850 opcodes.
20247
 
20248
   `as' also implements the following pseudo ops:
20249
 
20250
`hi0()'
20251
     Computes the higher 16 bits of the given expression and stores it
20252
     into the immediate operand field of the given instruction.  For
20253
     example:
20254
 
20255
     `mulhi hi0(here - there), r5, r6'
20256
 
20257
     computes the difference between the address of labels 'here' and
20258
     'there', takes the upper 16 bits of this difference, shifts it
20259
     down 16 bits and then multiplies it by the lower 16 bits in
20260
     register 5, putting the result into register 6.
20261
 
20262
`lo()'
20263
     Computes the lower 16 bits of the given expression and stores it
20264
     into the immediate operand field of the given instruction.  For
20265
     example:
20266
 
20267
     `addi lo(here - there), r5, r6'
20268
 
20269
     computes the difference between the address of labels 'here' and
20270
     'there', takes the lower 16 bits of this difference and adds it to
20271
     register 5, putting the result into register 6.
20272
 
20273
`hi()'
20274
     Computes the higher 16 bits of the given expression and then adds
20275
     the value of the most significant bit of the lower 16 bits of the
20276
     expression and stores the result into the immediate operand field
20277
     of the given instruction.  For example the following code can be
20278
     used to compute the address of the label 'here' and store it into
20279
     register 6:
20280
 
20281
     `movhi hi(here), r0, r6'     `movea lo(here), r6, r6'
20282
 
20283
     The reason for this special behaviour is that movea performs a sign
20284
     extension on its immediate operand.  So for example if the address
20285
     of 'here' was 0xFFFFFFFF then without the special behaviour of the
20286
     hi() pseudo-op the movhi instruction would put 0xFFFF0000 into r6,
20287
     then the movea instruction would takes its immediate operand,
20288
     0xFFFF, sign extend it to 32 bits, 0xFFFFFFFF, and then add it
20289
     into r6 giving 0xFFFEFFFF which is wrong (the fifth nibble is E).
20290
     With the hi() pseudo op adding in the top bit of the lo() pseudo
20291
     op, the movhi instruction actually stores 0 into r6 (0xFFFF + 1 =
20292
     0x0000), so that the movea instruction stores 0xFFFFFFFF into r6 -
20293
     the right value.
20294
 
20295
`hilo()'
20296
     Computes the 32 bit value of the given expression and stores it
20297
     into the immediate operand field of the given instruction (which
20298
     must be a mov instruction).  For example:
20299
 
20300
     `mov hilo(here), r6'
20301
 
20302
     computes the absolute address of label 'here' and puts the result
20303
     into register 6.
20304
 
20305
`sdaoff()'
20306
     Computes the offset of the named variable from the start of the
20307
     Small Data Area (whoes address is held in register 4, the GP
20308
     register) and stores the result as a 16 bit signed value in the
20309
     immediate operand field of the given instruction.  For example:
20310
 
20311
     `ld.w sdaoff(_a_variable)[gp],r6'
20312
 
20313
     loads the contents of the location pointed to by the label
20314
     '_a_variable' into register 6, provided that the label is located
20315
     somewhere within +/- 32K of the address held in the GP register.
20316
     [Note the linker assumes that the GP register contains a fixed
20317
     address set to the address of the label called '__gp'.  This can
20318
     either be set up automatically by the linker, or specifically set
20319
     by using the `--defsym __gp=' command line option].
20320
 
20321
`tdaoff()'
20322
     Computes the offset of the named variable from the start of the
20323
     Tiny Data Area (whoes address is held in register 30, the EP
20324
     register) and stores the result as a 4,5, 7 or 8 bit unsigned
20325
     value in the immediate operand field of the given instruction.
20326
     For example:
20327
 
20328
     `sld.w tdaoff(_a_variable)[ep],r6'
20329
 
20330
     loads the contents of the location pointed to by the label
20331
     '_a_variable' into register 6, provided that the label is located
20332
     somewhere within +256 bytes of the address held in the EP
20333
     register.  [Note the linker assumes that the EP register contains
20334
     a fixed address set to the address of the label called '__ep'.
20335
     This can either be set up automatically by the linker, or
20336
     specifically set by using the `--defsym __ep=' command line
20337
     option].
20338
 
20339
`zdaoff()'
20340
     Computes the offset of the named variable from address 0 and
20341
     stores the result as a 16 bit signed value in the immediate
20342
     operand field of the given instruction.  For example:
20343
 
20344
     `movea zdaoff(_a_variable),zero,r6'
20345
 
20346
     puts the address of the label '_a_variable' into register 6,
20347
     assuming that the label is somewhere within the first 32K of
20348
     memory.  (Strictly speaking it also possible to access the last
20349
     32K of memory as well, as the offsets are signed).
20350
 
20351
`ctoff()'
20352
     Computes the offset of the named variable from the start of the
20353
     Call Table Area (whoes address is helg in system register 20, the
20354
     CTBP register) and stores the result a 6 or 16 bit unsigned value
20355
     in the immediate field of then given instruction or piece of data.
20356
     For example:
20357
 
20358
     `callt ctoff(table_func1)'
20359
 
20360
     will put the call the function whoes address is held in the call
20361
     table at the location labeled 'table_func1'.
20362
 
20363
`.longcall `name''
20364
     Indicates that the following sequence of instructions is a long
20365
     call to function `name'.  The linker will attempt to shorten this
20366
     call sequence if `name' is within a 22bit offset of the call.  Only
20367
     valid if the `-mrelax' command line switch has been enabled.
20368
 
20369
`.longjump `name''
20370
     Indicates that the following sequence of instructions is a long
20371
     jump to label `name'.  The linker will attempt to shorten this code
20372
     sequence if `name' is within a 22bit offset of the jump.  Only
20373
     valid if the `-mrelax' command line switch has been enabled.
20374
 
20375
 
20376
   For information on the V850 instruction set, see `V850 Family
20377
32-/16-Bit single-Chip Microcontroller Architecture Manual' from NEC.
20378
Ltd.
20379
 
20380

20381
File: as.info,  Node: XGATE-Dependent,  Next: XSTORMY16-Dependent,  Prev: V850-Dependent,  Up: Machine Dependencies
20382
 
20383
9.48 XGATE Dependent Features
20384
=============================
20385
 
20386
* Menu:
20387
 
20388
* XGATE-Opts::                   XGATE Options
20389
* XGATE-Syntax::                 Syntax
20390
* XGATE-Directives::             Assembler Directives
20391
* XGATE-Float::                  Floating Point
20392
* XGATE-opcodes::                Opcodes
20393
 
20394

20395
File: as.info,  Node: XGATE-Opts,  Next: XGATE-Syntax,  Up: XGATE-Dependent
20396
 
20397
9.48.1 XGATE Options
20398
--------------------
20399
 
20400
The Freescale XGATE version of `as' has a few machine dependent options.
20401
 
20402
`-mshort'
20403
     This option controls the ABI and indicates to use a 16-bit integer
20404
     ABI.  It has no effect on the assembled instructions.  This is the
20405
     default.
20406
 
20407
`-mlong'
20408
     This option controls the ABI and indicates to use a 32-bit integer
20409
     ABI.
20410
 
20411
`-mshort-double'
20412
     This option controls the ABI and indicates to use a 32-bit float
20413
     ABI.  This is the default.
20414
 
20415
`-mlong-double'
20416
     This option controls the ABI and indicates to use a 64-bit float
20417
     ABI.
20418
 
20419
`--print-insn-syntax'
20420
     You can use the `--print-insn-syntax' option to obtain the syntax
20421
     description of the instruction when an error is detected.
20422
 
20423
`--print-opcodes'
20424
     The `--print-opcodes' option prints the list of all the
20425
     instructions with their syntax. Once the list is printed `as'
20426
     exits.
20427
 
20428
 
20429

20430
File: as.info,  Node: XGATE-Syntax,  Next: XGATE-Directives,  Prev: XGATE-Opts,  Up: XGATE-Dependent
20431
 
20432
9.48.2 Syntax
20433
-------------
20434
 
20435
In XGATE RISC syntax, the instruction name comes first and it may be
20436
followed by up to three operands. Operands are separated by commas
20437
(`,'). `as' will complain if too many operands are specified for a
20438
given instruction. The same will happen if you specified too few
20439
operands.
20440
 
20441
     nop
20442
     ldl  #23
20443
     CMP  R1, R2
20444
 
20445
   The presence of a `;' character or a `!' character anywhere on a
20446
line indicates the start of a comment that extends to the end of that
20447
line.
20448
 
20449
   A `*' or a `#' character at the start of a line also introduces a
20450
line comment, but these characters do not work elsewhere on the line.
20451
If the first character of the line is a `#' then as well as starting a
20452
comment, the line could also be logical line number directive (*note
20453
Comments::) or a preprocessor control command (*note Preprocessing::).
20454
 
20455
   The XGATE assembler does not currently support a line separator
20456
character.
20457
 
20458
   The following addressing modes are understood for XGATE:
20459
"Inherent"
20460
     `'
20461
 
20462
"Immediate 3 Bit Wide"
20463
     `#NUMBER'
20464
 
20465
"Immediate 4 Bit Wide"
20466
     `#NUMBER'
20467
 
20468
"Immediate 8 Bit Wide"
20469
     `#NUMBER'
20470
 
20471
"Monadic Addressing"
20472
     `REG'
20473
 
20474
"Dyadic Addressing"
20475
     `REG, REG'
20476
 
20477
"Triadic Addressing"
20478
     `REG, REG, REG'
20479
 
20480
"Relative Addressing 9 Bit Wide"
20481
     `*SYMBOL'
20482
 
20483
"Relative Addressing 10 Bit Wide"
20484
     `*SYMBOL'
20485
 
20486
"Index Register plus Immediate Offset"
20487
     `REG, (REG, #NUMBER)'
20488
 
20489
"Index Register plus Register Offset"
20490
     `REG, REG, REG'
20491
 
20492
"Index Register plus Register Offset with Post-increment"
20493
     `REG, REG, REG+'
20494
 
20495
"Index Register plus Register Offset with Pre-decrement"
20496
     `REG, REG, -REG'
20497
 
20498
     The register can be either `R0', `R1', `R2', `R3', `R4', `R5',
20499
     `R6' or `R7'.
20500
 
20501
 
20502
   Convience macro opcodes to deal with 16-bit values have been added.
20503
 
20504
"Immediate 16 Bit Wide"
20505
     `#NUMBER', or `*SYMBOL'
20506
 
20507
     For example:
20508
 
20509
          ldw R1, #1024
20510
          ldw R3, timer
20511
          ldw R1, (R1, #0)
20512
          COM R1
20513
          stw R2, (R1, #0)
20514
 
20515

20516
File: as.info,  Node: XGATE-Directives,  Next: XGATE-Float,  Prev: XGATE-Syntax,  Up: XGATE-Dependent
20517
 
20518
9.48.3 Assembler Directives
20519
---------------------------
20520
 
20521
The XGATE version of `as' have the following specific assembler
20522
directives:
20523
 
20524

20525
File: as.info,  Node: XGATE-Float,  Next: XGATE-opcodes,  Prev: XGATE-Directives,  Up: XGATE-Dependent
20526
 
20527
9.48.4 Floating Point
20528
---------------------
20529
 
20530
Packed decimal (P) format floating literals are not supported(yet).
20531
 
20532
   The floating point formats generated by directives are these.
20533
 
20534
`.float'
20535
     `Single' precision floating point constants.
20536
 
20537
`.double'
20538
     `Double' precision floating point constants.
20539
 
20540
`.extend'
20541
`.ldouble'
20542
     `Extended' precision (`long double') floating point constants.
20543
 
20544

20545
File: as.info,  Node: XGATE-opcodes,  Prev: XGATE-Float,  Up: XGATE-Dependent
20546
 
20547
9.48.5 Opcodes
20548
--------------
20549
 
20550

20551
File: as.info,  Node: XSTORMY16-Dependent,  Next: Xtensa-Dependent,  Prev: XGATE-Dependent,  Up: Machine Dependencies
20552
 
20553
9.49 XStormy16 Dependent Features
20554
=================================
20555
 
20556
* Menu:
20557
 
20558
* XStormy16 Syntax::               Syntax
20559
* XStormy16 Directives::           Machine Directives
20560
* XStormy16 Opcodes::              Pseudo-Opcodes
20561
 
20562

20563
File: as.info,  Node: XStormy16 Syntax,  Next: XStormy16 Directives,  Up: XSTORMY16-Dependent
20564
 
20565
9.49.1 Syntax
20566
-------------
20567
 
20568
* Menu:
20569
 
20570
* XStormy16-Chars::                Special Characters
20571
 
20572

20573
File: as.info,  Node: XStormy16-Chars,  Up: XStormy16 Syntax
20574
 
20575
9.49.1.1 Special Characters
20576
...........................
20577
 
20578
`#' is the line comment character.  If a `#' appears as the first
20579
character of a line, the whole line is treated as a comment, but in
20580
this case the line can also be a logical line number directive (*note
20581
Comments::) or a preprocessor control command (*note Preprocessing::).
20582
 
20583
   A semicolon (`;') can be used to start a comment that extends from
20584
wherever the character appears on the line up to the end of the line.
20585
 
20586
   The `|' character can be used to separate statements on the same
20587
line.
20588
 
20589

20590
File: as.info,  Node: XStormy16 Directives,  Next: XStormy16 Opcodes,  Prev: XStormy16 Syntax,  Up: XSTORMY16-Dependent
20591
 
20592
9.49.2 XStormy16 Machine Directives
20593
-----------------------------------
20594
 
20595
`.16bit_pointers'
20596
     Like the `--16bit-pointers' command line option this directive
20597
     indicates that the assembly code makes use of 16-bit pointers.
20598
 
20599
`.32bit_pointers'
20600
     Like the `--32bit-pointers' command line option this directive
20601
     indicates that the assembly code makes use of 32-bit pointers.
20602
 
20603
`.no_pointers'
20604
     Like the `--no-pointers' command line option this directive
20605
     indicates that the assembly code does not makes use pointers.
20606
 
20607
 
20608

20609
File: as.info,  Node: XStormy16 Opcodes,  Prev: XStormy16 Directives,  Up: XSTORMY16-Dependent
20610
 
20611
9.49.3 XStormy16 Pseudo-Opcodes
20612
-------------------------------
20613
 
20614
`as' implements all the standard XStormy16 opcodes.
20615
 
20616
   `as' also implements the following pseudo ops:
20617
 
20618
`@lo()'
20619
     Computes the lower 16 bits of the given expression and stores it
20620
     into the immediate operand field of the given instruction.  For
20621
     example:
20622
 
20623
     `add r6, @lo(here - there)'
20624
 
20625
     computes the difference between the address of labels 'here' and
20626
     'there', takes the lower 16 bits of this difference and adds it to
20627
     register 6.
20628
 
20629
`@hi()'
20630
     Computes the higher 16 bits of the given expression and stores it
20631
     into the immediate operand field of the given instruction.  For
20632
     example:
20633
 
20634
     `addc r7, @hi(here - there)'
20635
 
20636
     computes the difference between the address of labels 'here' and
20637
     'there', takes the upper 16 bits of this difference, shifts it
20638
     down 16 bits and then adds it, along with the carry bit, to the
20639
     value in register 7.
20640
 
20641
 
20642

20643
File: as.info,  Node: Xtensa-Dependent,  Next: Z80-Dependent,  Prev: XSTORMY16-Dependent,  Up: Machine Dependencies
20644
 
20645
9.50 Xtensa Dependent Features
20646
==============================
20647
 
20648
   This chapter covers features of the GNU assembler that are specific
20649
to the Xtensa architecture.  For details about the Xtensa instruction
20650
set, please consult the `Xtensa Instruction Set Architecture (ISA)
20651
Reference Manual'.
20652
 
20653
* Menu:
20654
 
20655
* Xtensa Options::              Command-line Options.
20656
* Xtensa Syntax::               Assembler Syntax for Xtensa Processors.
20657
* Xtensa Optimizations::        Assembler Optimizations.
20658
* Xtensa Relaxation::           Other Automatic Transformations.
20659
* Xtensa Directives::           Directives for Xtensa Processors.
20660
 
20661

20662
File: as.info,  Node: Xtensa Options,  Next: Xtensa Syntax,  Up: Xtensa-Dependent
20663
 
20664
9.50.1 Command Line Options
20665
---------------------------
20666
 
20667
`--text-section-literals | --no-text-section-literals'
20668
     Control the treatment of literal pools.  The default is
20669
     `--no-text-section-literals', which places literals in separate
20670
     sections in the output file.  This allows the literal pool to be
20671
     placed in a data RAM/ROM.  With `--text-section-literals', the
20672
     literals are interspersed in the text section in order to keep
20673
     them as close as possible to their references.  This may be
20674
     necessary for large assembly files, where the literals would
20675
     otherwise be out of range of the `L32R' instructions in the text
20676
     section.  These options only affect literals referenced via
20677
     PC-relative `L32R' instructions; literals for absolute mode `L32R'
20678
     instructions are handled separately.  *Note literal: Literal
20679
     Directive.
20680
 
20681
`--absolute-literals | --no-absolute-literals'
20682
     Indicate to the assembler whether `L32R' instructions use absolute
20683
     or PC-relative addressing.  If the processor includes the absolute
20684
     addressing option, the default is to use absolute `L32R'
20685
     relocations.  Otherwise, only the PC-relative `L32R' relocations
20686
     can be used.
20687
 
20688
`--target-align | --no-target-align'
20689
     Enable or disable automatic alignment to reduce branch penalties
20690
     at some expense in code size.  *Note Automatic Instruction
20691
     Alignment: Xtensa Automatic Alignment.  This optimization is
20692
     enabled by default.  Note that the assembler will always align
20693
     instructions like `LOOP' that have fixed alignment requirements.
20694
 
20695
`--longcalls | --no-longcalls'
20696
     Enable or disable transformation of call instructions to allow
20697
     calls across a greater range of addresses.  *Note Function Call
20698
     Relaxation: Xtensa Call Relaxation.  This option should be used
20699
     when call targets can potentially be out of range.  It may degrade
20700
     both code size and performance, but the linker can generally
20701
     optimize away the unnecessary overhead when a call ends up within
20702
     range.  The default is `--no-longcalls'.
20703
 
20704
`--transform | --no-transform'
20705
     Enable or disable all assembler transformations of Xtensa
20706
     instructions, including both relaxation and optimization.  The
20707
     default is `--transform'; `--no-transform' should only be used in
20708
     the rare cases when the instructions must be exactly as specified
20709
     in the assembly source.  Using `--no-transform' causes out of range
20710
     instruction operands to be errors.
20711
 
20712
`--rename-section OLDNAME=NEWNAME'
20713
     Rename the OLDNAME section to NEWNAME.  This option can be used
20714
     multiple times to rename multiple sections.
20715
 
20716

20717
File: as.info,  Node: Xtensa Syntax,  Next: Xtensa Optimizations,  Prev: Xtensa Options,  Up: Xtensa-Dependent
20718
 
20719
9.50.2 Assembler Syntax
20720
-----------------------
20721
 
20722
Block comments are delimited by `/*' and `*/'.  End of line comments
20723
may be introduced with either `#' or `//'.
20724
 
20725
   If a `#' appears as the first character of a line then the whole
20726
line is treated as a comment, but in this case the line could also be a
20727
logical line number directive (*note Comments::) or a preprocessor
20728
control command (*note Preprocessing::).
20729
 
20730
   Instructions consist of a leading opcode or macro name followed by
20731
whitespace and an optional comma-separated list of operands:
20732
 
20733
     OPCODE [OPERAND, ...]
20734
 
20735
   Instructions must be separated by a newline or semicolon (`;').
20736
 
20737
   FLIX instructions, which bundle multiple opcodes together in a single
20738
instruction, are specified by enclosing the bundled opcodes inside
20739
braces:
20740
 
20741
     {
20742
     [FORMAT]
20743
     OPCODE0 [OPERANDS]
20744
     OPCODE1 [OPERANDS]
20745
     OPCODE2 [OPERANDS]
20746
     ...
20747
     }
20748
 
20749
   The opcodes in a FLIX instruction are listed in the same order as the
20750
corresponding instruction slots in the TIE format declaration.
20751
Directives and labels are not allowed inside the braces of a FLIX
20752
instruction.  A particular TIE format name can optionally be specified
20753
immediately after the opening brace, but this is usually unnecessary.
20754
The assembler will automatically search for a format that can encode the
20755
specified opcodes, so the format name need only be specified in rare
20756
cases where there is more than one applicable format and where it
20757
matters which of those formats is used.  A FLIX instruction can also be
20758
specified on a single line by separating the opcodes with semicolons:
20759
 
20760
     { [FORMAT;] OPCODE0 [OPERANDS]; OPCODE1 [OPERANDS]; OPCODE2 [OPERANDS]; ... }
20761
 
20762
   If an opcode can only be encoded in a FLIX instruction but is not
20763
specified as part of a FLIX bundle, the assembler will choose the
20764
smallest format where the opcode can be encoded and will fill unused
20765
instruction slots with no-ops.
20766
 
20767
* Menu:
20768
 
20769
* Xtensa Opcodes::              Opcode Naming Conventions.
20770
* Xtensa Registers::            Register Naming.
20771
 
20772

20773
File: as.info,  Node: Xtensa Opcodes,  Next: Xtensa Registers,  Up: Xtensa Syntax
20774
 
20775
9.50.2.1 Opcode Names
20776
.....................
20777
 
20778
See the `Xtensa Instruction Set Architecture (ISA) Reference Manual'
20779
for a complete list of opcodes and descriptions of their semantics.
20780
 
20781
   If an opcode name is prefixed with an underscore character (`_'),
20782
`as' will not transform that instruction in any way.  The underscore
20783
prefix disables both optimization (*note Xtensa Optimizations: Xtensa
20784
Optimizations.) and relaxation (*note Xtensa Relaxation: Xtensa
20785
Relaxation.) for that particular instruction.  Only use the underscore
20786
prefix when it is essential to select the exact opcode produced by the
20787
assembler.  Using this feature unnecessarily makes the code less
20788
efficient by disabling assembler optimization and less flexible by
20789
disabling relaxation.
20790
 
20791
   Note that this special handling of underscore prefixes only applies
20792
to Xtensa opcodes, not to either built-in macros or user-defined macros.
20793
When an underscore prefix is used with a macro (e.g., `_MOV'), it
20794
refers to a different macro.  The assembler generally provides built-in
20795
macros both with and without the underscore prefix, where the underscore
20796
versions behave as if the underscore carries through to the instructions
20797
in the macros.  For example, `_MOV' may expand to `_MOV.N'.
20798
 
20799
   The underscore prefix only applies to individual instructions, not to
20800
series of instructions.  For example, if a series of instructions have
20801
underscore prefixes, the assembler will not transform the individual
20802
instructions, but it may insert other instructions between them (e.g.,
20803
to align a `LOOP' instruction).  To prevent the assembler from
20804
modifying a series of instructions as a whole, use the `no-transform'
20805
directive.  *Note transform: Transform Directive.
20806
 
20807

20808
File: as.info,  Node: Xtensa Registers,  Prev: Xtensa Opcodes,  Up: Xtensa Syntax
20809
 
20810
9.50.2.2 Register Names
20811
.......................
20812
 
20813
The assembly syntax for a register file entry is the "short" name for a
20814
TIE register file followed by the index into that register file.  For
20815
example, the general-purpose `AR' register file has a short name of
20816
`a', so these registers are named `a0'...`a15'.  As a special feature,
20817
`sp' is also supported as a synonym for `a1'.  Additional registers may
20818
be added by processor configuration options and by designer-defined TIE
20819
extensions.  An initial `$' character is optional in all register names.
20820
 
20821

20822
File: as.info,  Node: Xtensa Optimizations,  Next: Xtensa Relaxation,  Prev: Xtensa Syntax,  Up: Xtensa-Dependent
20823
 
20824
9.50.3 Xtensa Optimizations
20825
---------------------------
20826
 
20827
The optimizations currently supported by `as' are generation of density
20828
instructions where appropriate and automatic branch target alignment.
20829
 
20830
* Menu:
20831
 
20832
* Density Instructions::        Using Density Instructions.
20833
* Xtensa Automatic Alignment::  Automatic Instruction Alignment.
20834
 
20835

20836
File: as.info,  Node: Density Instructions,  Next: Xtensa Automatic Alignment,  Up: Xtensa Optimizations
20837
 
20838
9.50.3.1 Using Density Instructions
20839
...................................
20840
 
20841
The Xtensa instruction set has a code density option that provides
20842
16-bit versions of some of the most commonly used opcodes.  Use of these
20843
opcodes can significantly reduce code size.  When possible, the
20844
assembler automatically translates instructions from the core Xtensa
20845
instruction set into equivalent instructions from the Xtensa code
20846
density option.  This translation can be disabled by using underscore
20847
prefixes (*note Opcode Names: Xtensa Opcodes.), by using the
20848
`--no-transform' command-line option (*note Command Line Options:
20849
Xtensa Options.), or by using the `no-transform' directive (*note
20850
transform: Transform Directive.).
20851
 
20852
   It is a good idea _not_ to use the density instructions directly.
20853
The assembler will automatically select dense instructions where
20854
possible.  If you later need to use an Xtensa processor without the code
20855
density option, the same assembly code will then work without
20856
modification.
20857
 
20858

20859
File: as.info,  Node: Xtensa Automatic Alignment,  Prev: Density Instructions,  Up: Xtensa Optimizations
20860
 
20861
9.50.3.2 Automatic Instruction Alignment
20862
........................................
20863
 
20864
The Xtensa assembler will automatically align certain instructions, both
20865
to optimize performance and to satisfy architectural requirements.
20866
 
20867
   As an optimization to improve performance, the assembler attempts to
20868
align branch targets so they do not cross instruction fetch boundaries.
20869
(Xtensa processors can be configured with either 32-bit or 64-bit
20870
instruction fetch widths.)  An instruction immediately following a call
20871
is treated as a branch target in this context, because it will be the
20872
target of a return from the call.  This alignment has the potential to
20873
reduce branch penalties at some expense in code size.  This
20874
optimization is enabled by default.  You can disable it with the
20875
`--no-target-align' command-line option (*note Command Line Options:
20876
Xtensa Options.).
20877
 
20878
   The target alignment optimization is done without adding instructions
20879
that could increase the execution time of the program.  If there are
20880
density instructions in the code preceding a target, the assembler can
20881
change the target alignment by widening some of those instructions to
20882
the equivalent 24-bit instructions.  Extra bytes of padding can be
20883
inserted immediately following unconditional jump and return
20884
instructions.  This approach is usually successful in aligning many,
20885
but not all, branch targets.
20886
 
20887
   The `LOOP' family of instructions must be aligned such that the
20888
first instruction in the loop body does not cross an instruction fetch
20889
boundary (e.g., with a 32-bit fetch width, a `LOOP' instruction must be
20890
on either a 1 or 2 mod 4 byte boundary).  The assembler knows about
20891
this restriction and inserts the minimal number of 2 or 3 byte no-op
20892
instructions to satisfy it.  When no-op instructions are added, any
20893
label immediately preceding the original loop will be moved in order to
20894
refer to the loop instruction, not the newly generated no-op
20895
instruction.  To preserve binary compatibility across processors with
20896
different fetch widths, the assembler conservatively assumes a 32-bit
20897
fetch width when aligning `LOOP' instructions (except if the first
20898
instruction in the loop is a 64-bit instruction).
20899
 
20900
   Previous versions of the assembler automatically aligned `ENTRY'
20901
instructions to 4-byte boundaries, but that alignment is now the
20902
programmer's responsibility.
20903
 
20904

20905
File: as.info,  Node: Xtensa Relaxation,  Next: Xtensa Directives,  Prev: Xtensa Optimizations,  Up: Xtensa-Dependent
20906
 
20907
9.50.4 Xtensa Relaxation
20908
------------------------
20909
 
20910
When an instruction operand is outside the range allowed for that
20911
particular instruction field, `as' can transform the code to use a
20912
functionally-equivalent instruction or sequence of instructions.  This
20913
process is known as "relaxation".  This is typically done for branch
20914
instructions because the distance of the branch targets is not known
20915
until assembly-time.  The Xtensa assembler offers branch relaxation and
20916
also extends this concept to function calls, `MOVI' instructions and
20917
other instructions with immediate fields.
20918
 
20919
* Menu:
20920
 
20921
* Xtensa Branch Relaxation::        Relaxation of Branches.
20922
* Xtensa Call Relaxation::          Relaxation of Function Calls.
20923
* Xtensa Immediate Relaxation::     Relaxation of other Immediate Fields.
20924
 
20925

20926
File: as.info,  Node: Xtensa Branch Relaxation,  Next: Xtensa Call Relaxation,  Up: Xtensa Relaxation
20927
 
20928
9.50.4.1 Conditional Branch Relaxation
20929
......................................
20930
 
20931
When the target of a branch is too far away from the branch itself,
20932
i.e., when the offset from the branch to the target is too large to fit
20933
in the immediate field of the branch instruction, it may be necessary to
20934
replace the branch with a branch around a jump.  For example,
20935
 
20936
         beqz    a2, L
20937
 
20938
   may result in:
20939
 
20940
         bnez.n  a2, M
20941
         j L
20942
     M:
20943
 
20944
   (The `BNEZ.N' instruction would be used in this example only if the
20945
density option is available.  Otherwise, `BNEZ' would be used.)
20946
 
20947
   This relaxation works well because the unconditional jump instruction
20948
has a much larger offset range than the various conditional branches.
20949
However, an error will occur if a branch target is beyond the range of a
20950
jump instruction.  `as' cannot relax unconditional jumps.  Similarly,
20951
an error will occur if the original input contains an unconditional
20952
jump to a target that is out of range.
20953
 
20954
   Branch relaxation is enabled by default.  It can be disabled by using
20955
underscore prefixes (*note Opcode Names: Xtensa Opcodes.), the
20956
`--no-transform' command-line option (*note Command Line Options:
20957
Xtensa Options.), or the `no-transform' directive (*note transform:
20958
Transform Directive.).
20959
 
20960

20961
File: as.info,  Node: Xtensa Call Relaxation,  Next: Xtensa Immediate Relaxation,  Prev: Xtensa Branch Relaxation,  Up: Xtensa Relaxation
20962
 
20963
9.50.4.2 Function Call Relaxation
20964
.................................
20965
 
20966
Function calls may require relaxation because the Xtensa immediate call
20967
instructions (`CALL0', `CALL4', `CALL8' and `CALL12') provide a
20968
PC-relative offset of only 512 Kbytes in either direction.  For larger
20969
programs, it may be necessary to use indirect calls (`CALLX0',
20970
`CALLX4', `CALLX8' and `CALLX12') where the target address is specified
20971
in a register.  The Xtensa assembler can automatically relax immediate
20972
call instructions into indirect call instructions.  This relaxation is
20973
done by loading the address of the called function into the callee's
20974
return address register and then using a `CALLX' instruction.  So, for
20975
example:
20976
 
20977
         call8 func
20978
 
20979
   might be relaxed to:
20980
 
20981
         .literal .L1, func
20982
         l32r    a8, .L1
20983
         callx8  a8
20984
 
20985
   Because the addresses of targets of function calls are not generally
20986
known until link-time, the assembler must assume the worst and relax all
20987
the calls to functions in other source files, not just those that really
20988
will be out of range.  The linker can recognize calls that were
20989
unnecessarily relaxed, and it will remove the overhead introduced by the
20990
assembler for those cases where direct calls are sufficient.
20991
 
20992
   Call relaxation is disabled by default because it can have a negative
20993
effect on both code size and performance, although the linker can
20994
usually eliminate the unnecessary overhead.  If a program is too large
20995
and some of the calls are out of range, function call relaxation can be
20996
enabled using the `--longcalls' command-line option or the `longcalls'
20997
directive (*note longcalls: Longcalls Directive.).
20998
 
20999

21000
File: as.info,  Node: Xtensa Immediate Relaxation,  Prev: Xtensa Call Relaxation,  Up: Xtensa Relaxation
21001
 
21002
9.50.4.3 Other Immediate Field Relaxation
21003
.........................................
21004
 
21005
The assembler normally performs the following other relaxations.  They
21006
can be disabled by using underscore prefixes (*note Opcode Names:
21007
Xtensa Opcodes.), the `--no-transform' command-line option (*note
21008
Command Line Options: Xtensa Options.), or the `no-transform' directive
21009
(*note transform: Transform Directive.).
21010
 
21011
   The `MOVI' machine instruction can only materialize values in the
21012
range from -2048 to 2047.  Values outside this range are best
21013
materialized with `L32R' instructions.  Thus:
21014
 
21015
         movi a0, 100000
21016
 
21017
   is assembled into the following machine code:
21018
 
21019
         .literal .L1, 100000
21020
         l32r a0, .L1
21021
 
21022
   The `L8UI' machine instruction can only be used with immediate
21023
offsets in the range from 0 to 255. The `L16SI' and `L16UI' machine
21024
instructions can only be used with offsets from 0 to 510.  The `L32I'
21025
machine instruction can only be used with offsets from 0 to 1020.  A
21026
load offset outside these ranges can be materialized with an `L32R'
21027
instruction if the destination register of the load is different than
21028
the source address register.  For example:
21029
 
21030
         l32i a1, a0, 2040
21031
 
21032
   is translated to:
21033
 
21034
         .literal .L1, 2040
21035
         l32r a1, .L1
21036
         add a1, a0, a1
21037
         l32i a1, a1, 0
21038
 
21039
If the load destination and source address register are the same, an
21040
out-of-range offset causes an error.
21041
 
21042
   The Xtensa `ADDI' instruction only allows immediate operands in the
21043
range from -128 to 127.  There are a number of alternate instruction
21044
sequences for the `ADDI' operation.  First, if the immediate is 0, the
21045
`ADDI' will be turned into a `MOV.N' instruction (or the equivalent
21046
`OR' instruction if the code density option is not available).  If the
21047
`ADDI' immediate is outside of the range -128 to 127, but inside the
21048
range -32896 to 32639, an `ADDMI' instruction or `ADDMI'/`ADDI'
21049
sequence will be used.  Finally, if the immediate is outside of this
21050
range and a free register is available, an `L32R'/`ADD' sequence will
21051
be used with a literal allocated from the literal pool.
21052
 
21053
   For example:
21054
 
21055
         addi    a5, a6, 0
21056
         addi    a5, a6, 512
21057
         addi    a5, a6, 513
21058
         addi    a5, a6, 50000
21059
 
21060
   is assembled into the following:
21061
 
21062
         .literal .L1, 50000
21063
         mov.n   a5, a6
21064
         addmi   a5, a6, 0x200
21065
         addmi   a5, a6, 0x200
21066
         addi    a5, a5, 1
21067
         l32r    a5, .L1
21068
         add     a5, a6, a5
21069
 
21070

21071
File: as.info,  Node: Xtensa Directives,  Prev: Xtensa Relaxation,  Up: Xtensa-Dependent
21072
 
21073
9.50.5 Directives
21074
-----------------
21075
 
21076
The Xtensa assembler supports a region-based directive syntax:
21077
 
21078
         .begin DIRECTIVE [OPTIONS]
21079
         ...
21080
         .end DIRECTIVE
21081
 
21082
   All the Xtensa-specific directives that apply to a region of code use
21083
this syntax.
21084
 
21085
   The directive applies to code between the `.begin' and the `.end'.
21086
The state of the option after the `.end' reverts to what it was before
21087
the `.begin'.  A nested `.begin'/`.end' region can further change the
21088
state of the directive without having to be aware of its outer state.
21089
For example, consider:
21090
 
21091
         .begin no-transform
21092
     L:  add a0, a1, a2
21093
         .begin transform
21094
     M:  add a0, a1, a2
21095
         .end transform
21096
     N:  add a0, a1, a2
21097
         .end no-transform
21098
 
21099
   The `ADD' opcodes at `L' and `N' in the outer `no-transform' region
21100
both result in `ADD' machine instructions, but the assembler selects an
21101
`ADD.N' instruction for the `ADD' at `M' in the inner `transform'
21102
region.
21103
 
21104
   The advantage of this style is that it works well inside macros
21105
which can preserve the context of their callers.
21106
 
21107
   The following directives are available:
21108
 
21109
* Menu:
21110
 
21111
* Schedule Directive::         Enable instruction scheduling.
21112
* Longcalls Directive::        Use Indirect Calls for Greater Range.
21113
* Transform Directive::        Disable All Assembler Transformations.
21114
* Literal Directive::          Intermix Literals with Instructions.
21115
* Literal Position Directive:: Specify Inline Literal Pool Locations.
21116
* Literal Prefix Directive::   Specify Literal Section Name Prefix.
21117
* Absolute Literals Directive:: Control PC-Relative vs. Absolute Literals.
21118
 
21119

21120
File: as.info,  Node: Schedule Directive,  Next: Longcalls Directive,  Up: Xtensa Directives
21121
 
21122
9.50.5.1 schedule
21123
.................
21124
 
21125
The `schedule' directive is recognized only for compatibility with
21126
Tensilica's assembler.
21127
 
21128
         .begin [no-]schedule
21129
         .end [no-]schedule
21130
 
21131
   This directive is ignored and has no effect on `as'.
21132
 
21133

21134
File: as.info,  Node: Longcalls Directive,  Next: Transform Directive,  Prev: Schedule Directive,  Up: Xtensa Directives
21135
 
21136
9.50.5.2 longcalls
21137
..................
21138
 
21139
The `longcalls' directive enables or disables function call relaxation.
21140
*Note Function Call Relaxation: Xtensa Call Relaxation.
21141
 
21142
         .begin [no-]longcalls
21143
         .end [no-]longcalls
21144
 
21145
   Call relaxation is disabled by default unless the `--longcalls'
21146
command-line option is specified.  The `longcalls' directive overrides
21147
the default determined by the command-line options.
21148
 
21149

21150
File: as.info,  Node: Transform Directive,  Next: Literal Directive,  Prev: Longcalls Directive,  Up: Xtensa Directives
21151
 
21152
9.50.5.3 transform
21153
..................
21154
 
21155
This directive enables or disables all assembler transformation,
21156
including relaxation (*note Xtensa Relaxation: Xtensa Relaxation.) and
21157
optimization (*note Xtensa Optimizations: Xtensa Optimizations.).
21158
 
21159
         .begin [no-]transform
21160
         .end [no-]transform
21161
 
21162
   Transformations are enabled by default unless the `--no-transform'
21163
option is used.  The `transform' directive overrides the default
21164
determined by the command-line options.  An underscore opcode prefix,
21165
disabling transformation of that opcode, always takes precedence over
21166
both directives and command-line flags.
21167
 
21168

21169
File: as.info,  Node: Literal Directive,  Next: Literal Position Directive,  Prev: Transform Directive,  Up: Xtensa Directives
21170
 
21171
9.50.5.4 literal
21172
................
21173
 
21174
The `.literal' directive is used to define literal pool data, i.e.,
21175
read-only 32-bit data accessed via `L32R' instructions.
21176
 
21177
         .literal LABEL, VALUE[, VALUE...]
21178
 
21179
   This directive is similar to the standard `.word' directive, except
21180
that the actual location of the literal data is determined by the
21181
assembler and linker, not by the position of the `.literal' directive.
21182
Using this directive gives the assembler freedom to locate the literal
21183
data in the most appropriate place and possibly to combine identical
21184
literals.  For example, the code:
21185
 
21186
         entry sp, 40
21187
         .literal .L1, sym
21188
         l32r    a4, .L1
21189
 
21190
   can be used to load a pointer to the symbol `sym' into register
21191
`a4'.  The value of `sym' will not be placed between the `ENTRY' and
21192
`L32R' instructions; instead, the assembler puts the data in a literal
21193
pool.
21194
 
21195
   Literal pools are placed by default in separate literal sections;
21196
however, when using the `--text-section-literals' option (*note Command
21197
Line Options: Xtensa Options.), the literal pools for PC-relative mode
21198
`L32R' instructions are placed in the current section.(1) These text
21199
section literal pools are created automatically before `ENTRY'
21200
instructions and manually after `.literal_position' directives (*note
21201
literal_position: Literal Position Directive.).  If there are no
21202
preceding `ENTRY' instructions, explicit `.literal_position' directives
21203
must be used to place the text section literal pools; otherwise, `as'
21204
will report an error.
21205
 
21206
   When literals are placed in separate sections, the literal section
21207
names are derived from the names of the sections where the literals are
21208
defined.  The base literal section names are `.literal' for PC-relative
21209
mode `L32R' instructions and `.lit4' for absolute mode `L32R'
21210
instructions (*note absolute-literals: Absolute Literals Directive.).
21211
These base names are used for literals defined in the default `.text'
21212
section.  For literals defined in other sections or within the scope of
21213
a `literal_prefix' directive (*note literal_prefix: Literal Prefix
21214
Directive.), the following rules determine the literal section name:
21215
 
21216
  1. If the current section is a member of a section group, the literal
21217
     section name includes the group name as a suffix to the base
21218
     `.literal' or `.lit4' name, with a period to separate the base
21219
     name and group name.  The literal section is also made a member of
21220
     the group.
21221
 
21222
  2. If the current section name (or `literal_prefix' value) begins with
21223
     "`.gnu.linkonce.KIND.'", the literal section name is formed by
21224
     replacing "`.KIND'" with the base `.literal' or `.lit4' name.  For
21225
     example, for literals defined in a section named
21226
     `.gnu.linkonce.t.func', the literal section will be
21227
     `.gnu.linkonce.literal.func' or `.gnu.linkonce.lit4.func'.
21228
 
21229
  3. If the current section name (or `literal_prefix' value) ends with
21230
     `.text', the literal section name is formed by replacing that
21231
     suffix with the base `.literal' or `.lit4' name.  For example, for
21232
     literals defined in a section named `.iram0.text', the literal
21233
     section will be `.iram0.literal' or `.iram0.lit4'.
21234
 
21235
  4. If none of the preceding conditions apply, the literal section
21236
     name is formed by adding the base `.literal' or `.lit4' name as a
21237
     suffix to the current section name (or `literal_prefix' value).
21238
 
21239
   ---------- Footnotes ----------
21240
 
21241
   (1) Literals for the `.init' and `.fini' sections are always placed
21242
in separate sections, even when `--text-section-literals' is enabled.
21243
 
21244

21245
File: as.info,  Node: Literal Position Directive,  Next: Literal Prefix Directive,  Prev: Literal Directive,  Up: Xtensa Directives
21246
 
21247
9.50.5.5 literal_position
21248
.........................
21249
 
21250
When using `--text-section-literals' to place literals inline in the
21251
section being assembled, the `.literal_position' directive can be used
21252
to mark a potential location for a literal pool.
21253
 
21254
         .literal_position
21255
 
21256
   The `.literal_position' directive is ignored when the
21257
`--text-section-literals' option is not used or when `L32R'
21258
instructions use the absolute addressing mode.
21259
 
21260
   The assembler will automatically place text section literal pools
21261
before `ENTRY' instructions, so the `.literal_position' directive is
21262
only needed to specify some other location for a literal pool.  You may
21263
need to add an explicit jump instruction to skip over an inline literal
21264
pool.
21265
 
21266
   For example, an interrupt vector does not begin with an `ENTRY'
21267
instruction so the assembler will be unable to automatically find a good
21268
place to put a literal pool.  Moreover, the code for the interrupt
21269
vector must be at a specific starting address, so the literal pool
21270
cannot come before the start of the code.  The literal pool for the
21271
vector must be explicitly positioned in the middle of the vector (before
21272
any uses of the literals, due to the negative offsets used by
21273
PC-relative `L32R' instructions).  The `.literal_position' directive
21274
can be used to do this.  In the following code, the literal for `M'
21275
will automatically be aligned correctly and is placed after the
21276
unconditional jump.
21277
 
21278
         .global M
21279
     code_start:
21280
         j continue
21281
         .literal_position
21282
         .align 4
21283
     continue:
21284
         movi    a4, M
21285
 
21286

21287
File: as.info,  Node: Literal Prefix Directive,  Next: Absolute Literals Directive,  Prev: Literal Position Directive,  Up: Xtensa Directives
21288
 
21289
9.50.5.6 literal_prefix
21290
.......................
21291
 
21292
The `literal_prefix' directive allows you to override the default
21293
literal section names, which are derived from the names of the sections
21294
where the literals are defined.
21295
 
21296
         .begin literal_prefix [NAME]
21297
         .end literal_prefix
21298
 
21299
   For literals defined within the delimited region, the literal section
21300
names are derived from the NAME argument instead of the name of the
21301
current section.  The rules used to derive the literal section names do
21302
not change.  *Note literal: Literal Directive.  If the NAME argument is
21303
omitted, the literal sections revert to the defaults.  This directive
21304
has no effect when using the `--text-section-literals' option (*note
21305
Command Line Options: Xtensa Options.).
21306
 
21307

21308
File: as.info,  Node: Absolute Literals Directive,  Prev: Literal Prefix Directive,  Up: Xtensa Directives
21309
 
21310
9.50.5.7 absolute-literals
21311
..........................
21312
 
21313
The `absolute-literals' and `no-absolute-literals' directives control
21314
the absolute vs. PC-relative mode for `L32R' instructions.  These are
21315
relevant only for Xtensa configurations that include the absolute
21316
addressing option for `L32R' instructions.
21317
 
21318
         .begin [no-]absolute-literals
21319
         .end [no-]absolute-literals
21320
 
21321
   These directives do not change the `L32R' mode--they only cause the
21322
assembler to emit the appropriate kind of relocation for `L32R'
21323
instructions and to place the literal values in the appropriate section.
21324
To change the `L32R' mode, the program must write the `LITBASE' special
21325
register.  It is the programmer's responsibility to keep track of the
21326
mode and indicate to the assembler which mode is used in each region of
21327
code.
21328
 
21329
   If the Xtensa configuration includes the absolute `L32R' addressing
21330
option, the default is to assume absolute `L32R' addressing unless the
21331
`--no-absolute-literals' command-line option is specified.  Otherwise,
21332
the default is to assume PC-relative `L32R' addressing.  The
21333
`absolute-literals' directive can then be used to override the default
21334
determined by the command-line options.
21335
 
21336

21337
File: as.info,  Node: Reporting Bugs,  Next: Acknowledgements,  Prev: Machine Dependencies,  Up: Top
21338
 
21339
10 Reporting Bugs
21340
*****************
21341
 
21342
Your bug reports play an essential role in making `as' reliable.
21343
 
21344
   Reporting a bug may help you by bringing a solution to your problem,
21345
or it may not.  But in any case the principal function of a bug report
21346
is to help the entire community by making the next version of `as' work
21347
better.  Bug reports are your contribution to the maintenance of `as'.
21348
 
21349
   In order for a bug report to serve its purpose, you must include the
21350
information that enables us to fix the bug.
21351
 
21352
* Menu:
21353
 
21354
* Bug Criteria::                Have you found a bug?
21355
* Bug Reporting::               How to report bugs
21356
 
21357

21358
File: as.info,  Node: Bug Criteria,  Next: Bug Reporting,  Up: Reporting Bugs
21359
 
21360
10.1 Have You Found a Bug?
21361
==========================
21362
 
21363
If you are not sure whether you have found a bug, here are some
21364
guidelines:
21365
 
21366
   * If the assembler gets a fatal signal, for any input whatever, that
21367
     is a `as' bug.  Reliable assemblers never crash.
21368
 
21369
   * If `as' produces an error message for valid input, that is a bug.
21370
 
21371
   * If `as' does not produce an error message for invalid input, that
21372
     is a bug.  However, you should note that your idea of "invalid
21373
     input" might be our idea of "an extension" or "support for
21374
     traditional practice".
21375
 
21376
   * If you are an experienced user of assemblers, your suggestions for
21377
     improvement of `as' are welcome in any case.
21378
 
21379

21380
File: as.info,  Node: Bug Reporting,  Prev: Bug Criteria,  Up: Reporting Bugs
21381
 
21382
10.2 How to Report Bugs
21383
=======================
21384
 
21385
A number of companies and individuals offer support for GNU products.
21386
If you obtained `as' from a support organization, we recommend you
21387
contact that organization first.
21388
 
21389
   You can find contact information for many support companies and
21390
individuals in the file `etc/SERVICE' in the GNU Emacs distribution.
21391
 
21392
   In any event, we also recommend that you send bug reports for `as'
21393
to `http://www.sourceware.org/bugzilla/'.
21394
 
21395
   The fundamental principle of reporting bugs usefully is this:
21396
*report all the facts*.  If you are not sure whether to state a fact or
21397
leave it out, state it!
21398
 
21399
   Often people omit facts because they think they know what causes the
21400
problem and assume that some details do not matter.  Thus, you might
21401
assume that the name of a symbol you use in an example does not matter.
21402
Well, probably it does not, but one cannot be sure.  Perhaps the bug is
21403
a stray memory reference which happens to fetch from the location where
21404
that name is stored in memory; perhaps, if the name were different, the
21405
contents of that location would fool the assembler into doing the right
21406
thing despite the bug.  Play it safe and give a specific, complete
21407
example.  That is the easiest thing for you to do, and the most helpful.
21408
 
21409
   Keep in mind that the purpose of a bug report is to enable us to fix
21410
the bug if it is new to us.  Therefore, always write your bug reports
21411
on the assumption that the bug has not been reported previously.
21412
 
21413
   Sometimes people give a few sketchy facts and ask, "Does this ring a
21414
bell?"  This cannot help us fix a bug, so it is basically useless.  We
21415
respond by asking for enough details to enable us to investigate.  You
21416
might as well expedite matters by sending them to begin with.
21417
 
21418
   To enable us to fix the bug, you should include all these things:
21419
 
21420
   * The version of `as'.  `as' announces it if you start it with the
21421
     `--version' argument.
21422
 
21423
     Without this, we will not know whether there is any point in
21424
     looking for the bug in the current version of `as'.
21425
 
21426
   * Any patches you may have applied to the `as' source.
21427
 
21428
   * The type of machine you are using, and the operating system name
21429
     and version number.
21430
 
21431
   * What compiler (and its version) was used to compile `as'--e.g.
21432
     "`gcc-2.7'".
21433
 
21434
   * The command arguments you gave the assembler to assemble your
21435
     example and observe the bug.  To guarantee you will not omit
21436
     something important, list them all.  A copy of the Makefile (or
21437
     the output from make) is sufficient.
21438
 
21439
     If we were to try to guess the arguments, we would probably guess
21440
     wrong and then we might not encounter the bug.
21441
 
21442
   * A complete input file that will reproduce the bug.  If the bug is
21443
     observed when the assembler is invoked via a compiler, send the
21444
     assembler source, not the high level language source.  Most
21445
     compilers will produce the assembler source when run with the `-S'
21446
     option.  If you are using `gcc', use the options `-v
21447
     --save-temps'; this will save the assembler source in a file with
21448
     an extension of `.s', and also show you exactly how `as' is being
21449
     run.
21450
 
21451
   * A description of what behavior you observe that you believe is
21452
     incorrect.  For example, "It gets a fatal signal."
21453
 
21454
     Of course, if the bug is that `as' gets a fatal signal, then we
21455
     will certainly notice it.  But if the bug is incorrect output, we
21456
     might not notice unless it is glaringly wrong.  You might as well
21457
     not give us a chance to make a mistake.
21458
 
21459
     Even if the problem you experience is a fatal signal, you should
21460
     still say so explicitly.  Suppose something strange is going on,
21461
     such as, your copy of `as' is out of sync, or you have encountered
21462
     a bug in the C library on your system.  (This has happened!)  Your
21463
     copy might crash and ours would not.  If you told us to expect a
21464
     crash, then when ours fails to crash, we would know that the bug
21465
     was not happening for us.  If you had not told us to expect a
21466
     crash, then we would not be able to draw any conclusion from our
21467
     observations.
21468
 
21469
   * If you wish to suggest changes to the `as' source, send us context
21470
     diffs, as generated by `diff' with the `-u', `-c', or `-p' option.
21471
     Always send diffs from the old file to the new file.  If you even
21472
     discuss something in the `as' source, refer to it by context, not
21473
     by line number.
21474
 
21475
     The line numbers in our development sources will not match those
21476
     in your sources.  Your line numbers would convey no useful
21477
     information to us.
21478
 
21479
   Here are some things that are not necessary:
21480
 
21481
   * A description of the envelope of the bug.
21482
 
21483
     Often people who encounter a bug spend a lot of time investigating
21484
     which changes to the input file will make the bug go away and which
21485
     changes will not affect it.
21486
 
21487
     This is often time consuming and not very useful, because the way
21488
     we will find the bug is by running a single example under the
21489
     debugger with breakpoints, not by pure deduction from a series of
21490
     examples.  We recommend that you save your time for something else.
21491
 
21492
     Of course, if you can find a simpler example to report _instead_
21493
     of the original one, that is a convenience for us.  Errors in the
21494
     output will be easier to spot, running under the debugger will take
21495
     less time, and so on.
21496
 
21497
     However, simplification is not vital; if you do not want to do
21498
     this, report the bug anyway and send us the entire test case you
21499
     used.
21500
 
21501
   * A patch for the bug.
21502
 
21503
     A patch for the bug does help us if it is a good one.  But do not
21504
     omit the necessary information, such as the test case, on the
21505
     assumption that a patch is all we need.  We might see problems
21506
     with your patch and decide to fix the problem another way, or we
21507
     might not understand it at all.
21508
 
21509
     Sometimes with a program as complicated as `as' it is very hard to
21510
     construct an example that will make the program follow a certain
21511
     path through the code.  If you do not send us the example, we will
21512
     not be able to construct one, so we will not be able to verify
21513
     that the bug is fixed.
21514
 
21515
     And if we cannot understand what bug you are trying to fix, or why
21516
     your patch should be an improvement, we will not install it.  A
21517
     test case will help us to understand.
21518
 
21519
   * A guess about what the bug is or what it depends on.
21520
 
21521
     Such guesses are usually wrong.  Even we cannot guess right about
21522
     such things without first using the debugger to find the facts.
21523
 
21524

21525
File: as.info,  Node: Acknowledgements,  Next: GNU Free Documentation License,  Prev: Reporting Bugs,  Up: Top
21526
 
21527
11 Acknowledgements
21528
*******************
21529
 
21530
If you have contributed to GAS and your name isn't listed here, it is
21531
not meant as a slight.  We just don't know about it.  Send mail to the
21532
maintainer, and we'll correct the situation.  Currently the maintainer
21533
is Nick Clifton (email address `nickc@redhat.com').
21534
 
21535
   Dean Elsner wrote the original GNU assembler for the VAX.(1)
21536
 
21537
   Jay Fenlason maintained GAS for a while, adding support for
21538
GDB-specific debug information and the 68k series machines, most of the
21539
preprocessing pass, and extensive changes in `messages.c',
21540
`input-file.c', `write.c'.
21541
 
21542
   K. Richard Pixley maintained GAS for a while, adding various
21543
enhancements and many bug fixes, including merging support for several
21544
processors, breaking GAS up to handle multiple object file format back
21545
ends (including heavy rewrite, testing, an integration of the coff and
21546
b.out back ends), adding configuration including heavy testing and
21547
verification of cross assemblers and file splits and renaming,
21548
converted GAS to strictly ANSI C including full prototypes, added
21549
support for m680[34]0 and cpu32, did considerable work on i960
21550
including a COFF port (including considerable amounts of reverse
21551
engineering), a SPARC opcode file rewrite, DECstation, rs6000, and
21552
hp300hpux host ports, updated "know" assertions and made them work,
21553
much other reorganization, cleanup, and lint.
21554
 
21555
   Ken Raeburn wrote the high-level BFD interface code to replace most
21556
of the code in format-specific I/O modules.
21557
 
21558
   The original VMS support was contributed by David L. Kashtan.  Eric
21559
Youngdale has done much work with it since.
21560
 
21561
   The Intel 80386 machine description was written by Eliot Dresselhaus.
21562
 
21563
   Minh Tran-Le at IntelliCorp contributed some AIX 386 support.
21564
 
21565
   The Motorola 88k machine description was contributed by Devon Bowen
21566
of Buffalo University and Torbjorn Granlund of the Swedish Institute of
21567
Computer Science.
21568
 
21569
   Keith Knowles at the Open Software Foundation wrote the original
21570
MIPS back end (`tc-mips.c', `tc-mips.h'), and contributed Rose format
21571
support (which hasn't been merged in yet).  Ralph Campbell worked with
21572
the MIPS code to support a.out format.
21573
 
21574
   Support for the Zilog Z8k and Renesas H8/300 processors (tc-z8k,
21575
tc-h8300), and IEEE 695 object file format (obj-ieee), was written by
21576
Steve Chamberlain of Cygnus Support.  Steve also modified the COFF back
21577
end to use BFD for some low-level operations, for use with the H8/300
21578
and AMD 29k targets.
21579
 
21580
   John Gilmore built the AMD 29000 support, added `.include' support,
21581
and simplified the configuration of which versions accept which
21582
directives.  He updated the 68k machine description so that Motorola's
21583
opcodes always produced fixed-size instructions (e.g., `jsr'), while
21584
synthetic instructions remained shrinkable (`jbsr').  John fixed many
21585
bugs, including true tested cross-compilation support, and one bug in
21586
relaxation that took a week and required the proverbial one-bit fix.
21587
 
21588
   Ian Lance Taylor of Cygnus Support merged the Motorola and MIT
21589
syntax for the 68k, completed support for some COFF targets (68k, i386
21590
SVR3, and SCO Unix), added support for MIPS ECOFF and ELF targets,
21591
wrote the initial RS/6000 and PowerPC assembler, and made a few other
21592
minor patches.
21593
 
21594
   Steve Chamberlain made GAS able to generate listings.
21595
 
21596
   Hewlett-Packard contributed support for the HP9000/300.
21597
 
21598
   Jeff Law wrote GAS and BFD support for the native HPPA object format
21599
(SOM) along with a fairly extensive HPPA testsuite (for both SOM and
21600
ELF object formats).  This work was supported by both the Center for
21601
Software Science at the University of Utah and Cygnus Support.
21602
 
21603
   Support for ELF format files has been worked on by Mark Eichin of
21604
Cygnus Support (original, incomplete implementation for SPARC), Pete
21605
Hoogenboom and Jeff Law at the University of Utah (HPPA mainly),
21606
Michael Meissner of the Open Software Foundation (i386 mainly), and Ken
21607
Raeburn of Cygnus Support (sparc, and some initial 64-bit support).
21608
 
21609
   Linas Vepstas added GAS support for the ESA/390 "IBM 370"
21610
architecture.
21611
 
21612
   Richard Henderson rewrote the Alpha assembler. Klaus Kaempf wrote
21613
GAS and BFD support for openVMS/Alpha.
21614
 
21615
   Timothy Wall, Michael Hayes, and Greg Smart contributed to the
21616
various tic* flavors.
21617
 
21618
   David Heine, Sterling Augustine, Bob Wilson and John Ruttenberg from
21619
Tensilica, Inc. added support for Xtensa processors.
21620
 
21621
   Several engineers at Cygnus Support have also provided many small
21622
bug fixes and configuration enhancements.
21623
 
21624
   Jon Beniston added support for the Lattice Mico32 architecture.
21625
 
21626
   Many others have contributed large or small bugfixes and
21627
enhancements.  If you have contributed significant work and are not
21628
mentioned on this list, and want to be, let us know.  Some of the
21629
history has been lost; we are not intentionally leaving anyone out.
21630
 
21631
   ---------- Footnotes ----------
21632
 
21633
   (1) Any more details?
21634
 
21635

21636
File: as.info,  Node: GNU Free Documentation License,  Next: AS Index,  Prev: Acknowledgements,  Up: Top
21637
 
21638
Appendix A GNU Free Documentation License
21639
*****************************************
21640
 
21641
                     Version 1.3, 3 November 2008
21642
 
21643
     Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
21644
     `http://fsf.org/'
21645
 
21646
     Everyone is permitted to copy and distribute verbatim copies
21647
     of this license document, but changing it is not allowed.
21648
 
21649
  0. PREAMBLE
21650
 
21651
     The purpose of this License is to make a manual, textbook, or other
21652
     functional and useful document "free" in the sense of freedom: to
21653
     assure everyone the effective freedom to copy and redistribute it,
21654
     with or without modifying it, either commercially or
21655
     noncommercially.  Secondarily, this License preserves for the
21656
     author and publisher a way to get credit for their work, while not
21657
     being considered responsible for modifications made by others.
21658
 
21659
     This License is a kind of "copyleft", which means that derivative
21660
     works of the document must themselves be free in the same sense.
21661
     It complements the GNU General Public License, which is a copyleft
21662
     license designed for free software.
21663
 
21664
     We have designed this License in order to use it for manuals for
21665
     free software, because free software needs free documentation: a
21666
     free program should come with manuals providing the same freedoms
21667
     that the software does.  But this License is not limited to
21668
     software manuals; it can be used for any textual work, regardless
21669
     of subject matter or whether it is published as a printed book.
21670
     We recommend this License principally for works whose purpose is
21671
     instruction or reference.
21672
 
21673
  1. APPLICABILITY AND DEFINITIONS
21674
 
21675
     This License applies to any manual or other work, in any medium,
21676
     that contains a notice placed by the copyright holder saying it
21677
     can be distributed under the terms of this License.  Such a notice
21678
     grants a world-wide, royalty-free license, unlimited in duration,
21679
     to use that work under the conditions stated herein.  The
21680
     "Document", below, refers to any such manual or work.  Any member
21681
     of the public is a licensee, and is addressed as "you".  You
21682
     accept the license if you copy, modify or distribute the work in a
21683
     way requiring permission under copyright law.
21684
 
21685
     A "Modified Version" of the Document means any work containing the
21686
     Document or a portion of it, either copied verbatim, or with
21687
     modifications and/or translated into another language.
21688
 
21689
     A "Secondary Section" is a named appendix or a front-matter section
21690
     of the Document that deals exclusively with the relationship of the
21691
     publishers or authors of the Document to the Document's overall
21692
     subject (or to related matters) and contains nothing that could
21693
     fall directly within that overall subject.  (Thus, if the Document
21694
     is in part a textbook of mathematics, a Secondary Section may not
21695
     explain any mathematics.)  The relationship could be a matter of
21696
     historical connection with the subject or with related matters, or
21697
     of legal, commercial, philosophical, ethical or political position
21698
     regarding them.
21699
 
21700
     The "Invariant Sections" are certain Secondary Sections whose
21701
     titles are designated, as being those of Invariant Sections, in
21702
     the notice that says that the Document is released under this
21703
     License.  If a section does not fit the above definition of
21704
     Secondary then it is not allowed to be designated as Invariant.
21705
     The Document may contain zero Invariant Sections.  If the Document
21706
     does not identify any Invariant Sections then there are none.
21707
 
21708
     The "Cover Texts" are certain short passages of text that are
21709
     listed, as Front-Cover Texts or Back-Cover Texts, in the notice
21710
     that says that the Document is released under this License.  A
21711
     Front-Cover Text may be at most 5 words, and a Back-Cover Text may
21712
     be at most 25 words.
21713
 
21714
     A "Transparent" copy of the Document means a machine-readable copy,
21715
     represented in a format whose specification is available to the
21716
     general public, that is suitable for revising the document
21717
     straightforwardly with generic text editors or (for images
21718
     composed of pixels) generic paint programs or (for drawings) some
21719
     widely available drawing editor, and that is suitable for input to
21720
     text formatters or for automatic translation to a variety of
21721
     formats suitable for input to text formatters.  A copy made in an
21722
     otherwise Transparent file format whose markup, or absence of
21723
     markup, has been arranged to thwart or discourage subsequent
21724
     modification by readers is not Transparent.  An image format is
21725
     not Transparent if used for any substantial amount of text.  A
21726
     copy that is not "Transparent" is called "Opaque".
21727
 
21728
     Examples of suitable formats for Transparent copies include plain
21729
     ASCII without markup, Texinfo input format, LaTeX input format,
21730
     SGML or XML using a publicly available DTD, and
21731
     standard-conforming simple HTML, PostScript or PDF designed for
21732
     human modification.  Examples of transparent image formats include
21733
     PNG, XCF and JPG.  Opaque formats include proprietary formats that
21734
     can be read and edited only by proprietary word processors, SGML or
21735
     XML for which the DTD and/or processing tools are not generally
21736
     available, and the machine-generated HTML, PostScript or PDF
21737
     produced by some word processors for output purposes only.
21738
 
21739
     The "Title Page" means, for a printed book, the title page itself,
21740
     plus such following pages as are needed to hold, legibly, the
21741
     material this License requires to appear in the title page.  For
21742
     works in formats which do not have any title page as such, "Title
21743
     Page" means the text near the most prominent appearance of the
21744
     work's title, preceding the beginning of the body of the text.
21745
 
21746
     The "publisher" means any person or entity that distributes copies
21747
     of the Document to the public.
21748
 
21749
     A section "Entitled XYZ" means a named subunit of the Document
21750
     whose title either is precisely XYZ or contains XYZ in parentheses
21751
     following text that translates XYZ in another language.  (Here XYZ
21752
     stands for a specific section name mentioned below, such as
21753
     "Acknowledgements", "Dedications", "Endorsements", or "History".)
21754
     To "Preserve the Title" of such a section when you modify the
21755
     Document means that it remains a section "Entitled XYZ" according
21756
     to this definition.
21757
 
21758
     The Document may include Warranty Disclaimers next to the notice
21759
     which states that this License applies to the Document.  These
21760
     Warranty Disclaimers are considered to be included by reference in
21761
     this License, but only as regards disclaiming warranties: any other
21762
     implication that these Warranty Disclaimers may have is void and
21763
     has no effect on the meaning of this License.
21764
 
21765
  2. VERBATIM COPYING
21766
 
21767
     You may copy and distribute the Document in any medium, either
21768
     commercially or noncommercially, provided that this License, the
21769
     copyright notices, and the license notice saying this License
21770
     applies to the Document are reproduced in all copies, and that you
21771
     add no other conditions whatsoever to those of this License.  You
21772
     may not use technical measures to obstruct or control the reading
21773
     or further copying of the copies you make or distribute.  However,
21774
     you may accept compensation in exchange for copies.  If you
21775
     distribute a large enough number of copies you must also follow
21776
     the conditions in section 3.
21777
 
21778
     You may also lend copies, under the same conditions stated above,
21779
     and you may publicly display copies.
21780
 
21781
  3. COPYING IN QUANTITY
21782
 
21783
     If you publish printed copies (or copies in media that commonly
21784
     have printed covers) of the Document, numbering more than 100, and
21785
     the Document's license notice requires Cover Texts, you must
21786
     enclose the copies in covers that carry, clearly and legibly, all
21787
     these Cover Texts: Front-Cover Texts on the front cover, and
21788
     Back-Cover Texts on the back cover.  Both covers must also clearly
21789
     and legibly identify you as the publisher of these copies.  The
21790
     front cover must present the full title with all words of the
21791
     title equally prominent and visible.  You may add other material
21792
     on the covers in addition.  Copying with changes limited to the
21793
     covers, as long as they preserve the title of the Document and
21794
     satisfy these conditions, can be treated as verbatim copying in
21795
     other respects.
21796
 
21797
     If the required texts for either cover are too voluminous to fit
21798
     legibly, you should put the first ones listed (as many as fit
21799
     reasonably) on the actual cover, and continue the rest onto
21800
     adjacent pages.
21801
 
21802
     If you publish or distribute Opaque copies of the Document
21803
     numbering more than 100, you must either include a
21804
     machine-readable Transparent copy along with each Opaque copy, or
21805
     state in or with each Opaque copy a computer-network location from
21806
     which the general network-using public has access to download
21807
     using public-standard network protocols a complete Transparent
21808
     copy of the Document, free of added material.  If you use the
21809
     latter option, you must take reasonably prudent steps, when you
21810
     begin distribution of Opaque copies in quantity, to ensure that
21811
     this Transparent copy will remain thus accessible at the stated
21812
     location until at least one year after the last time you
21813
     distribute an Opaque copy (directly or through your agents or
21814
     retailers) of that edition to the public.
21815
 
21816
     It is requested, but not required, that you contact the authors of
21817
     the Document well before redistributing any large number of
21818
     copies, to give them a chance to provide you with an updated
21819
     version of the Document.
21820
 
21821
  4. MODIFICATIONS
21822
 
21823
     You may copy and distribute a Modified Version of the Document
21824
     under the conditions of sections 2 and 3 above, provided that you
21825
     release the Modified Version under precisely this License, with
21826
     the Modified Version filling the role of the Document, thus
21827
     licensing distribution and modification of the Modified Version to
21828
     whoever possesses a copy of it.  In addition, you must do these
21829
     things in the Modified Version:
21830
 
21831
       A. Use in the Title Page (and on the covers, if any) a title
21832
          distinct from that of the Document, and from those of
21833
          previous versions (which should, if there were any, be listed
21834
          in the History section of the Document).  You may use the
21835
          same title as a previous version if the original publisher of
21836
          that version gives permission.
21837
 
21838
       B. List on the Title Page, as authors, one or more persons or
21839
          entities responsible for authorship of the modifications in
21840
          the Modified Version, together with at least five of the
21841
          principal authors of the Document (all of its principal
21842
          authors, if it has fewer than five), unless they release you
21843
          from this requirement.
21844
 
21845
       C. State on the Title page the name of the publisher of the
21846
          Modified Version, as the publisher.
21847
 
21848
       D. Preserve all the copyright notices of the Document.
21849
 
21850
       E. Add an appropriate copyright notice for your modifications
21851
          adjacent to the other copyright notices.
21852
 
21853
       F. Include, immediately after the copyright notices, a license
21854
          notice giving the public permission to use the Modified
21855
          Version under the terms of this License, in the form shown in
21856
          the Addendum below.
21857
 
21858
       G. Preserve in that license notice the full lists of Invariant
21859
          Sections and required Cover Texts given in the Document's
21860
          license notice.
21861
 
21862
       H. Include an unaltered copy of this License.
21863
 
21864
       I. Preserve the section Entitled "History", Preserve its Title,
21865
          and add to it an item stating at least the title, year, new
21866
          authors, and publisher of the Modified Version as given on
21867
          the Title Page.  If there is no section Entitled "History" in
21868
          the Document, create one stating the title, year, authors,
21869
          and publisher of the Document as given on its Title Page,
21870
          then add an item describing the Modified Version as stated in
21871
          the previous sentence.
21872
 
21873
       J. Preserve the network location, if any, given in the Document
21874
          for public access to a Transparent copy of the Document, and
21875
          likewise the network locations given in the Document for
21876
          previous versions it was based on.  These may be placed in
21877
          the "History" section.  You may omit a network location for a
21878
          work that was published at least four years before the
21879
          Document itself, or if the original publisher of the version
21880
          it refers to gives permission.
21881
 
21882
       K. For any section Entitled "Acknowledgements" or "Dedications",
21883
          Preserve the Title of the section, and preserve in the
21884
          section all the substance and tone of each of the contributor
21885
          acknowledgements and/or dedications given therein.
21886
 
21887
       L. Preserve all the Invariant Sections of the Document,
21888
          unaltered in their text and in their titles.  Section numbers
21889
          or the equivalent are not considered part of the section
21890
          titles.
21891
 
21892
       M. Delete any section Entitled "Endorsements".  Such a section
21893
          may not be included in the Modified Version.
21894
 
21895
       N. Do not retitle any existing section to be Entitled
21896
          "Endorsements" or to conflict in title with any Invariant
21897
          Section.
21898
 
21899
       O. Preserve any Warranty Disclaimers.
21900
 
21901
     If the Modified Version includes new front-matter sections or
21902
     appendices that qualify as Secondary Sections and contain no
21903
     material copied from the Document, you may at your option
21904
     designate some or all of these sections as invariant.  To do this,
21905
     add their titles to the list of Invariant Sections in the Modified
21906
     Version's license notice.  These titles must be distinct from any
21907
     other section titles.
21908
 
21909
     You may add a section Entitled "Endorsements", provided it contains
21910
     nothing but endorsements of your Modified Version by various
21911
     parties--for example, statements of peer review or that the text
21912
     has been approved by an organization as the authoritative
21913
     definition of a standard.
21914
 
21915
     You may add a passage of up to five words as a Front-Cover Text,
21916
     and a passage of up to 25 words as a Back-Cover Text, to the end
21917
     of the list of Cover Texts in the Modified Version.  Only one
21918
     passage of Front-Cover Text and one of Back-Cover Text may be
21919
     added by (or through arrangements made by) any one entity.  If the
21920
     Document already includes a cover text for the same cover,
21921
     previously added by you or by arrangement made by the same entity
21922
     you are acting on behalf of, you may not add another; but you may
21923
     replace the old one, on explicit permission from the previous
21924
     publisher that added the old one.
21925
 
21926
     The author(s) and publisher(s) of the Document do not by this
21927
     License give permission to use their names for publicity for or to
21928
     assert or imply endorsement of any Modified Version.
21929
 
21930
  5. COMBINING DOCUMENTS
21931
 
21932
     You may combine the Document with other documents released under
21933
     this License, under the terms defined in section 4 above for
21934
     modified versions, provided that you include in the combination
21935
     all of the Invariant Sections of all of the original documents,
21936
     unmodified, and list them all as Invariant Sections of your
21937
     combined work in its license notice, and that you preserve all
21938
     their Warranty Disclaimers.
21939
 
21940
     The combined work need only contain one copy of this License, and
21941
     multiple identical Invariant Sections may be replaced with a single
21942
     copy.  If there are multiple Invariant Sections with the same name
21943
     but different contents, make the title of each such section unique
21944
     by adding at the end of it, in parentheses, the name of the
21945
     original author or publisher of that section if known, or else a
21946
     unique number.  Make the same adjustment to the section titles in
21947
     the list of Invariant Sections in the license notice of the
21948
     combined work.
21949
 
21950
     In the combination, you must combine any sections Entitled
21951
     "History" in the various original documents, forming one section
21952
     Entitled "History"; likewise combine any sections Entitled
21953
     "Acknowledgements", and any sections Entitled "Dedications".  You
21954
     must delete all sections Entitled "Endorsements."
21955
 
21956
  6. COLLECTIONS OF DOCUMENTS
21957
 
21958
     You may make a collection consisting of the Document and other
21959
     documents released under this License, and replace the individual
21960
     copies of this License in the various documents with a single copy
21961
     that is included in the collection, provided that you follow the
21962
     rules of this License for verbatim copying of each of the
21963
     documents in all other respects.
21964
 
21965
     You may extract a single document from such a collection, and
21966
     distribute it individually under this License, provided you insert
21967
     a copy of this License into the extracted document, and follow
21968
     this License in all other respects regarding verbatim copying of
21969
     that document.
21970
 
21971
  7. AGGREGATION WITH INDEPENDENT WORKS
21972
 
21973
     A compilation of the Document or its derivatives with other
21974
     separate and independent documents or works, in or on a volume of
21975
     a storage or distribution medium, is called an "aggregate" if the
21976
     copyright resulting from the compilation is not used to limit the
21977
     legal rights of the compilation's users beyond what the individual
21978
     works permit.  When the Document is included in an aggregate, this
21979
     License does not apply to the other works in the aggregate which
21980
     are not themselves derivative works of the Document.
21981
 
21982
     If the Cover Text requirement of section 3 is applicable to these
21983
     copies of the Document, then if the Document is less than one half
21984
     of the entire aggregate, the Document's Cover Texts may be placed
21985
     on covers that bracket the Document within the aggregate, or the
21986
     electronic equivalent of covers if the Document is in electronic
21987
     form.  Otherwise they must appear on printed covers that bracket
21988
     the whole aggregate.
21989
 
21990
  8. TRANSLATION
21991
 
21992
     Translation is considered a kind of modification, so you may
21993
     distribute translations of the Document under the terms of section
21994
     4.  Replacing Invariant Sections with translations requires special
21995
     permission from their copyright holders, but you may include
21996
     translations of some or all Invariant Sections in addition to the
21997
     original versions of these Invariant Sections.  You may include a
21998
     translation of this License, and all the license notices in the
21999
     Document, and any Warranty Disclaimers, provided that you also
22000
     include the original English version of this License and the
22001
     original versions of those notices and disclaimers.  In case of a
22002
     disagreement between the translation and the original version of
22003
     this License or a notice or disclaimer, the original version will
22004
     prevail.
22005
 
22006
     If a section in the Document is Entitled "Acknowledgements",
22007
     "Dedications", or "History", the requirement (section 4) to
22008
     Preserve its Title (section 1) will typically require changing the
22009
     actual title.
22010
 
22011
  9. TERMINATION
22012
 
22013
     You may not copy, modify, sublicense, or distribute the Document
22014
     except as expressly provided under this License.  Any attempt
22015
     otherwise to copy, modify, sublicense, or distribute it is void,
22016
     and will automatically terminate your rights under this License.
22017
 
22018
     However, if you cease all violation of this License, then your
22019
     license from a particular copyright holder is reinstated (a)
22020
     provisionally, unless and until the copyright holder explicitly
22021
     and finally terminates your license, and (b) permanently, if the
22022
     copyright holder fails to notify you of the violation by some
22023
     reasonable means prior to 60 days after the cessation.
22024
 
22025
     Moreover, your license from a particular copyright holder is
22026
     reinstated permanently if the copyright holder notifies you of the
22027
     violation by some reasonable means, this is the first time you have
22028
     received notice of violation of this License (for any work) from
22029
     that copyright holder, and you cure the violation prior to 30 days
22030
     after your receipt of the notice.
22031
 
22032
     Termination of your rights under this section does not terminate
22033
     the licenses of parties who have received copies or rights from
22034
     you under this License.  If your rights have been terminated and
22035
     not permanently reinstated, receipt of a copy of some or all of
22036
     the same material does not give you any rights to use it.
22037
 
22038
 10. FUTURE REVISIONS OF THIS LICENSE
22039
 
22040
     The Free Software Foundation may publish new, revised versions of
22041
     the GNU Free Documentation License from time to time.  Such new
22042
     versions will be similar in spirit to the present version, but may
22043
     differ in detail to address new problems or concerns.  See
22044
     `http://www.gnu.org/copyleft/'.
22045
 
22046
     Each version of the License is given a distinguishing version
22047
     number.  If the Document specifies that a particular numbered
22048
     version of this License "or any later version" applies to it, you
22049
     have the option of following the terms and conditions either of
22050
     that specified version or of any later version that has been
22051
     published (not as a draft) by the Free Software Foundation.  If
22052
     the Document does not specify a version number of this License,
22053
     you may choose any version ever published (not as a draft) by the
22054
     Free Software Foundation.  If the Document specifies that a proxy
22055
     can decide which future versions of this License can be used, that
22056
     proxy's public statement of acceptance of a version permanently
22057
     authorizes you to choose that version for the Document.
22058
 
22059
 11. RELICENSING
22060
 
22061
     "Massive Multiauthor Collaboration Site" (or "MMC Site") means any
22062
     World Wide Web server that publishes copyrightable works and also
22063
     provides prominent facilities for anybody to edit those works.  A
22064
     public wiki that anybody can edit is an example of such a server.
22065
     A "Massive Multiauthor Collaboration" (or "MMC") contained in the
22066
     site means any set of copyrightable works thus published on the MMC
22067
     site.
22068
 
22069
     "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0
22070
     license published by Creative Commons Corporation, a not-for-profit
22071
     corporation with a principal place of business in San Francisco,
22072
     California, as well as future copyleft versions of that license
22073
     published by that same organization.
22074
 
22075
     "Incorporate" means to publish or republish a Document, in whole or
22076
     in part, as part of another Document.
22077
 
22078
     An MMC is "eligible for relicensing" if it is licensed under this
22079
     License, and if all works that were first published under this
22080
     License somewhere other than this MMC, and subsequently
22081
     incorporated in whole or in part into the MMC, (1) had no cover
22082
     texts or invariant sections, and (2) were thus incorporated prior
22083
     to November 1, 2008.
22084
 
22085
     The operator of an MMC Site may republish an MMC contained in the
22086
     site under CC-BY-SA on the same site at any time before August 1,
22087
     2009, provided the MMC is eligible for relicensing.
22088
 
22089
 
22090
ADDENDUM: How to use this License for your documents
22091
====================================================
22092
 
22093
To use this License in a document you have written, include a copy of
22094
the License in the document and put the following copyright and license
22095
notices just after the title page:
22096
 
22097
       Copyright (C)  YEAR  YOUR NAME.
22098
       Permission is granted to copy, distribute and/or modify this document
22099
       under the terms of the GNU Free Documentation License, Version 1.3
22100
       or any later version published by the Free Software Foundation;
22101
       with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
22102
       Texts.  A copy of the license is included in the section entitled ``GNU
22103
       Free Documentation License''.
22104
 
22105
   If you have Invariant Sections, Front-Cover Texts and Back-Cover
22106
Texts, replace the "with...Texts." line with this:
22107
 
22108
         with the Invariant Sections being LIST THEIR TITLES, with
22109
         the Front-Cover Texts being LIST, and with the Back-Cover Texts
22110
         being LIST.
22111
 
22112
   If you have Invariant Sections without Cover Texts, or some other
22113
combination of the three, merge those two alternatives to suit the
22114
situation.
22115
 
22116
   If your document contains nontrivial examples of program code, we
22117
recommend releasing these examples in parallel under your choice of
22118
free software license, such as the GNU General Public License, to
22119
permit their use in free software.
22120
 
22121

22122
File: as.info,  Node: AS Index,  Prev: GNU Free Documentation License,  Up: Top
22123
 
22124
AS Index
22125
********
22126
 
22127
 
22128
* Menu:
22129
22130
* #:                                     Comments.            (line  33)
22131
* #APP:                                  Preprocessing.       (line  26)
22132
* #NO_APP:                               Preprocessing.       (line  26)
22133
* $ in symbol names <1>:                 SH64-Chars.          (line  15)
22134
* $ in symbol names <2>:                 SH-Chars.            (line  15)
22135
* $ in symbol names <3>:                 D30V-Chars.          (line  70)
22136
* $ in symbol names:                     D10V-Chars.          (line  53)
22137
* $a:                                    ARM Mapping Symbols. (line   9)
22138
* $acos math builtin, TIC54X:            TIC54X-Builtins.     (line  10)
22139
* $asin math builtin, TIC54X:            TIC54X-Builtins.     (line  13)
22140
* $atan math builtin, TIC54X:            TIC54X-Builtins.     (line  16)
22141
* $atan2 math builtin, TIC54X:           TIC54X-Builtins.     (line  19)
22142
* $ceil math builtin, TIC54X:            TIC54X-Builtins.     (line  22)
22143
* $cos math builtin, TIC54X:             TIC54X-Builtins.     (line  28)
22144
* $cosh math builtin, TIC54X:            TIC54X-Builtins.     (line  25)
22145
* $cvf math builtin, TIC54X:             TIC54X-Builtins.     (line  31)
22146
* $cvi math builtin, TIC54X:             TIC54X-Builtins.     (line  34)
22147
* $d <1>:                                ARM Mapping Symbols. (line  15)
22148
* $d:                                    AArch64 Mapping Symbols.
22149
                                                              (line  12)
22150
* $exp math builtin, TIC54X:             TIC54X-Builtins.     (line  37)
22151
* $fabs math builtin, TIC54X:            TIC54X-Builtins.     (line  40)
22152
* $firstch subsym builtin, TIC54X:       TIC54X-Macros.       (line  26)
22153
* $floor math builtin, TIC54X:           TIC54X-Builtins.     (line  43)
22154
* $fmod math builtin, TIC54X:            TIC54X-Builtins.     (line  47)
22155
* $int math builtin, TIC54X:             TIC54X-Builtins.     (line  50)
22156
* $iscons subsym builtin, TIC54X:        TIC54X-Macros.       (line  43)
22157
* $isdefed subsym builtin, TIC54X:       TIC54X-Macros.       (line  34)
22158
* $ismember subsym builtin, TIC54X:      TIC54X-Macros.       (line  38)
22159
* $isname subsym builtin, TIC54X:        TIC54X-Macros.       (line  47)
22160
* $isreg subsym builtin, TIC54X:         TIC54X-Macros.       (line  50)
22161
* $lastch subsym builtin, TIC54X:        TIC54X-Macros.       (line  30)
22162
* $ldexp math builtin, TIC54X:           TIC54X-Builtins.     (line  53)
22163
* $log math builtin, TIC54X:             TIC54X-Builtins.     (line  59)
22164
* $log10 math builtin, TIC54X:           TIC54X-Builtins.     (line  56)
22165
* $max math builtin, TIC54X:             TIC54X-Builtins.     (line  62)
22166
* $min math builtin, TIC54X:             TIC54X-Builtins.     (line  65)
22167
* $pow math builtin, TIC54X:             TIC54X-Builtins.     (line  68)
22168
* $round math builtin, TIC54X:           TIC54X-Builtins.     (line  71)
22169
* $sgn math builtin, TIC54X:             TIC54X-Builtins.     (line  74)
22170
* $sin math builtin, TIC54X:             TIC54X-Builtins.     (line  77)
22171
* $sinh math builtin, TIC54X:            TIC54X-Builtins.     (line  80)
22172
* $sqrt math builtin, TIC54X:            TIC54X-Builtins.     (line  83)
22173
* $structacc subsym builtin, TIC54X:     TIC54X-Macros.       (line  57)
22174
* $structsz subsym builtin, TIC54X:      TIC54X-Macros.       (line  54)
22175
* $symcmp subsym builtin, TIC54X:        TIC54X-Macros.       (line  23)
22176
* $symlen subsym builtin, TIC54X:        TIC54X-Macros.       (line  20)
22177
* $t:                                    ARM Mapping Symbols. (line  12)
22178
* $tan math builtin, TIC54X:             TIC54X-Builtins.     (line  86)
22179
* $tanh math builtin, TIC54X:            TIC54X-Builtins.     (line  89)
22180
* $trunc math builtin, TIC54X:           TIC54X-Builtins.     (line  92)
22181
* $x:                                    AArch64 Mapping Symbols.
22182
                                                              (line   9)
22183
* %gp:                                   RX-Modifiers.        (line   6)
22184
* %gpreg:                                RX-Modifiers.        (line  22)
22185
* %pidreg:                               RX-Modifiers.        (line  25)
22186
* -+ option, VAX/VMS:                    VAX-Opts.            (line  71)
22187
* --:                                    Command Line.        (line  10)
22188
* --32 option, i386:                     i386-Options.        (line   8)
22189
* --32 option, x86-64:                   i386-Options.        (line   8)
22190
* --64 option, i386:                     i386-Options.        (line   8)
22191
* --64 option, x86-64:                   i386-Options.        (line   8)
22192
* --absolute-literals:                   Xtensa Options.      (line  21)
22193
* --allow-reg-prefix:                    SH Options.          (line   9)
22194
* --alternate:                           alternate.           (line   6)
22195
* --base-size-default-16:                M68K-Opts.           (line  65)
22196
* --base-size-default-32:                M68K-Opts.           (line  65)
22197
* --big:                                 SH Options.          (line   9)
22198
* --bitwise-or option, M680x0:           M68K-Opts.           (line  58)
22199
* --disp-size-default-16:                M68K-Opts.           (line  74)
22200
* --disp-size-default-32:                M68K-Opts.           (line  74)
22201
* --divide option, i386:                 i386-Options.        (line  24)
22202
* --dsp:                                 SH Options.          (line   9)
22203
* --emulation=crisaout command line option, CRIS: CRIS-Opts.  (line   9)
22204
* --emulation=criself command line option, CRIS: CRIS-Opts.   (line   9)
22205
* --enforce-aligned-data:                Sparc-Aligned-Data.  (line  11)
22206
* --fatal-warnings:                      W.                   (line  16)
22207
* --fdpic:                               SH Options.          (line  31)
22208
* --fix-v4bx command line option, ARM:   ARM Options.         (line 173)
22209
* --fixed-special-register-names command line option, MMIX: MMIX-Opts.
22210
                                                              (line   8)
22211
* --force-long-branches:                 M68HC11-Opts.        (line  82)
22212
* --generate-example:                    M68HC11-Opts.        (line  99)
22213
* --globalize-symbols command line option, MMIX: MMIX-Opts.   (line  12)
22214
* --gnu-syntax command line option, MMIX: MMIX-Opts.          (line  16)
22215
* --hash-size=NUMBER:                    Overview.            (line 380)
22216
* --linker-allocated-gregs command line option, MMIX: MMIX-Opts.
22217
                                                              (line  67)
22218
* --listing-cont-lines:                  listing.             (line  34)
22219
* --listing-lhs-width:                   listing.             (line  16)
22220
* --listing-lhs-width2:                  listing.             (line  21)
22221
* --listing-rhs-width:                   listing.             (line  28)
22222
* --little:                              SH Options.          (line   9)
22223
* --longcalls:                           Xtensa Options.      (line  35)
22224
* --march=ARCHITECTURE command line option, CRIS: CRIS-Opts.  (line  34)
22225
* --MD:                                  MD.                  (line   6)
22226
* --mul-bug-abort command line option, CRIS: CRIS-Opts.       (line  62)
22227
* --no-absolute-literals:                Xtensa Options.      (line  21)
22228
* --no-expand command line option, MMIX: MMIX-Opts.           (line  31)
22229
* --no-longcalls:                        Xtensa Options.      (line  35)
22230
* --no-merge-gregs command line option, MMIX: MMIX-Opts.      (line  36)
22231
* --no-mul-bug-abort command line option, CRIS: CRIS-Opts.    (line  62)
22232
* --no-predefined-syms command line option, MMIX: MMIX-Opts.  (line  22)
22233
* --no-pushj-stubs command line option, MMIX: MMIX-Opts.      (line  54)
22234
* --no-stubs command line option, MMIX:  MMIX-Opts.           (line  54)
22235
* --no-target-align:                     Xtensa Options.      (line  28)
22236
* --no-text-section-literals:            Xtensa Options.      (line   7)
22237
* --no-transform:                        Xtensa Options.      (line  44)
22238
* --no-underscore command line option, CRIS: CRIS-Opts.       (line  15)
22239
* --no-warn:                             W.                   (line  11)
22240
* --pcrel:                               M68K-Opts.           (line  86)
22241
* --pic command line option, CRIS:       CRIS-Opts.           (line  27)
22242
* --print-insn-syntax <1>:               XGATE-Opts.          (line  25)
22243
* --print-insn-syntax:                   M68HC11-Opts.        (line  88)
22244
* --print-opcodes <1>:                   XGATE-Opts.          (line  29)
22245
* --print-opcodes:                       M68HC11-Opts.        (line  92)
22246
* --register-prefix-optional option, M680x0: M68K-Opts.       (line  45)
22247
* --relax:                               SH Options.          (line   9)
22248
* --relax command line option, MMIX:     MMIX-Opts.           (line  19)
22249
* --rename-section:                      Xtensa Options.      (line  52)
22250
* --renesas:                             SH Options.          (line   9)
22251
* --short-branches:                      M68HC11-Opts.        (line  67)
22252
* --small:                               SH Options.          (line   9)
22253
* --statistics:                          statistics.          (line   6)
22254
* --strict-direct-mode:                  M68HC11-Opts.        (line  57)
22255
* --target-align:                        Xtensa Options.      (line  28)
22256
* --text-section-literals:               Xtensa Options.      (line   7)
22257
* --traditional-format:                  traditional-format.  (line   6)
22258
* --transform:                           Xtensa Options.      (line  44)
22259
* --underscore command line option, CRIS: CRIS-Opts.          (line  15)
22260
* --warn:                                W.                   (line  19)
22261
* --x32 option, i386:                    i386-Options.        (line   8)
22262
* --x32 option, x86-64:                  i386-Options.        (line   8)
22263
* --xgate-ramoffset:                     M68HC11-Opts.        (line  36)
22264
* -1 option, VAX/VMS:                    VAX-Opts.            (line  77)
22265
* -32addr command line option, Alpha:    Alpha Options.       (line  57)
22266
* -a:                                    a.                   (line   6)
22267
* -A options, i960:                      Options-i960.        (line   6)
22268
* -ac:                                   a.                   (line   6)
22269
* -ad:                                   a.                   (line   6)
22270
* -ag:                                   a.                   (line   6)
22271
* -ah:                                   a.                   (line   6)
22272
* -al:                                   a.                   (line   6)
22273
* -an:                                   a.                   (line   6)
22274
* -as:                                   a.                   (line   6)
22275
* -Asparc:                               Sparc-Opts.          (line  25)
22276
* -Asparcfmaf:                           Sparc-Opts.          (line  25)
22277
* -Asparcima:                            Sparc-Opts.          (line  25)
22278
* -Asparclet:                            Sparc-Opts.          (line  25)
22279
* -Asparclite:                           Sparc-Opts.          (line  25)
22280
* -Asparcvis:                            Sparc-Opts.          (line  25)
22281
* -Asparcvis2:                           Sparc-Opts.          (line  25)
22282
* -Asparcvis3:                           Sparc-Opts.          (line  25)
22283
* -Asparcvis3r:                          Sparc-Opts.          (line  25)
22284
* -Av6:                                  Sparc-Opts.          (line  25)
22285
* -Av7:                                  Sparc-Opts.          (line  25)
22286
* -Av8:                                  Sparc-Opts.          (line  25)
22287
* -Av9:                                  Sparc-Opts.          (line  25)
22288
* -Av9a:                                 Sparc-Opts.          (line  25)
22289
* -Av9b:                                 Sparc-Opts.          (line  25)
22290
* -Av9c:                                 Sparc-Opts.          (line  25)
22291
* -Av9d:                                 Sparc-Opts.          (line  25)
22292
* -Av9v:                                 Sparc-Opts.          (line  25)
22293
* -b option, i960:                       Options-i960.        (line  22)
22294
* -big option, M32R:                     M32R-Opts.           (line  35)
22295
* -D:                                    D.                   (line   6)
22296
* -D, ignored on VAX:                    VAX-Opts.            (line  11)
22297
* -d, VAX option:                        VAX-Opts.            (line  16)
22298
* -eabi= command line option, ARM:       ARM Options.         (line 156)
22299
* -EB command line option, AArch64:      AArch64 Options.     (line   6)
22300
* -EB command line option, ARC:          ARC Options.         (line  31)
22301
* -EB command line option, ARM:          ARM Options.         (line 161)
22302
* -EB option (MIPS):                     MIPS Opts.           (line  13)
22303
* -EB option, M32R:                      M32R-Opts.           (line  39)
22304
* -EB option, TILE-Gx:                   TILE-Gx Options.     (line  11)
22305
* -EL command line option, AArch64:      AArch64 Options.     (line  10)
22306
* -EL command line option, ARC:          ARC Options.         (line  35)
22307
* -EL command line option, ARM:          ARM Options.         (line 165)
22308
* -EL option (MIPS):                     MIPS Opts.           (line  13)
22309
* -EL option, M32R:                      M32R-Opts.           (line  32)
22310
* -EL option, TILE-Gx:                   TILE-Gx Options.     (line  11)
22311
* -f:                                    f.                   (line   6)
22312
* -F command line option, Alpha:         Alpha Options.       (line  57)
22313
* -G command line option, Alpha:         Alpha Options.       (line  53)
22314
* -g command line option, Alpha:         Alpha Options.       (line  47)
22315
* -G option (MIPS):                      MIPS Opts.           (line   8)
22316
* -H option, VAX/VMS:                    VAX-Opts.            (line  81)
22317
* -h option, VAX/VMS:                    VAX-Opts.            (line  45)
22318
* -I PATH:                               I.                   (line   6)
22319
* -ignore-parallel-conflicts option, M32RX: M32R-Opts.        (line  87)
22320
* -Ip option, M32RX:                     M32R-Opts.           (line  97)
22321
* -J, ignored on VAX:                    VAX-Opts.            (line  27)
22322
* -K:                                    K.                   (line   6)
22323
* -k command line option, ARM:           ARM Options.         (line 169)
22324
* -KPIC option, M32R:                    M32R-Opts.           (line  42)
22325
* -KPIC option, MIPS:                    MIPS Opts.           (line  21)
22326
* -L:                                    L.                   (line   6)
22327
* -l option, M680x0:                     M68K-Opts.           (line  33)
22328
* -little option, M32R:                  M32R-Opts.           (line  27)
22329
* -M:                                    M.                   (line   6)
22330
* -m11/03:                               PDP-11-Options.      (line 140)
22331
* -m11/04:                               PDP-11-Options.      (line 143)
22332
* -m11/05:                               PDP-11-Options.      (line 146)
22333
* -m11/10:                               PDP-11-Options.      (line 146)
22334
* -m11/15:                               PDP-11-Options.      (line 149)
22335
* -m11/20:                               PDP-11-Options.      (line 149)
22336
* -m11/21:                               PDP-11-Options.      (line 152)
22337
* -m11/23:                               PDP-11-Options.      (line 155)
22338
* -m11/24:                               PDP-11-Options.      (line 155)
22339
* -m11/34:                               PDP-11-Options.      (line 158)
22340
* -m11/34a:                              PDP-11-Options.      (line 161)
22341
* -m11/35:                               PDP-11-Options.      (line 164)
22342
* -m11/40:                               PDP-11-Options.      (line 164)
22343
* -m11/44:                               PDP-11-Options.      (line 167)
22344
* -m11/45:                               PDP-11-Options.      (line 170)
22345
* -m11/50:                               PDP-11-Options.      (line 170)
22346
* -m11/53:                               PDP-11-Options.      (line 173)
22347
* -m11/55:                               PDP-11-Options.      (line 170)
22348
* -m11/60:                               PDP-11-Options.      (line 176)
22349
* -m11/70:                               PDP-11-Options.      (line 170)
22350
* -m11/73:                               PDP-11-Options.      (line 173)
22351
* -m11/83:                               PDP-11-Options.      (line 173)
22352
* -m11/84:                               PDP-11-Options.      (line 173)
22353
* -m11/93:                               PDP-11-Options.      (line 173)
22354
* -m11/94:                               PDP-11-Options.      (line 173)
22355
* -m16c option, M16C:                    M32C-Opts.           (line  12)
22356
* -m31 option, s390:                     s390 Options.        (line   8)
22357
* -m32 option, TILE-Gx:                  TILE-Gx Options.     (line   8)
22358
* -m32bit-doubles:                       RX-Opts.             (line   9)
22359
* -m32c option, M32C:                    M32C-Opts.           (line   9)
22360
* -m32r option, M32R:                    M32R-Opts.           (line  21)
22361
* -m32rx option, M32R2:                  M32R-Opts.           (line  17)
22362
* -m32rx option, M32RX:                  M32R-Opts.           (line   9)
22363
* -m4byte-align command line option, V850: V850 Options.      (line  81)
22364
* -m64 option, s390:                     s390 Options.        (line   8)
22365
* -m64 option, TILE-Gx:                  TILE-Gx Options.     (line   8)
22366
* -m64bit-doubles:                       RX-Opts.             (line  15)
22367
* -m68000 and related options:           M68K-Opts.           (line  98)
22368
* -m68hc11:                              M68HC11-Opts.        (line   9)
22369
* -m68hc12:                              M68HC11-Opts.        (line  14)
22370
* -m68hcs12:                             M68HC11-Opts.        (line  21)
22371
* -m8byte-align command line option, V850: V850 Options.      (line  77)
22372
* -m[no-]68851 command line option, M680x0: M68K-Opts.        (line  21)
22373
* -m[no-]68881 command line option, M680x0: M68K-Opts.        (line  21)
22374
* -m[no-]div command line option, M680x0: M68K-Opts.          (line  21)
22375
* -m[no-]emac command line option, M680x0: M68K-Opts.         (line  21)
22376
* -m[no-]float command line option, M680x0: M68K-Opts.        (line  21)
22377
* -m[no-]mac command line option, M680x0: M68K-Opts.          (line  21)
22378
* -m[no-]usp command line option, M680x0: M68K-Opts.          (line  21)
22379
* -mall:                                 PDP-11-Options.      (line  26)
22380
* -mall-enabled command line option, LM32: LM32 Options.      (line  30)
22381
* -mall-extensions:                      PDP-11-Options.      (line  26)
22382
* -mall-opcodes command line option, AVR: AVR Options.        (line  96)
22383
* -mapcs-26 command line option, ARM:    ARM Options.         (line 128)
22384
* -mapcs-32 command line option, ARM:    ARM Options.         (line 128)
22385
* -mapcs-float command line option, ARM: ARM Options.         (line 142)
22386
* -mapcs-reentrant command line option, ARM: ARM Options.     (line 147)
22387
* -marc[5|6|7|8] command line option, ARC: ARC Options.       (line   6)
22388
* -march= command line option, ARM:      ARM Options.         (line  65)
22389
* -march= command line option, M680x0:   M68K-Opts.           (line   8)
22390
* -march= command line option, TIC6X:    TIC6X Options.       (line   6)
22391
* -march= option, i386:                  i386-Options.        (line  31)
22392
* -march= option, s390:                  s390 Options.        (line  25)
22393
* -march= option, x86-64:                i386-Options.        (line  31)
22394
* -matpcs command line option, ARM:      ARM Options.         (line 134)
22395
* -mavxscalar= option, i386:             i386-Options.        (line  81)
22396
* -mavxscalar= option, x86-64:           i386-Options.        (line  81)
22397
* -mbarrel-shift-enabled command line option, LM32: LM32 Options.
22398
                                                              (line  12)
22399
* -mbig-endian:                          RX-Opts.             (line  20)
22400
* -mbreak-enabled command line option, LM32: LM32 Options.    (line  27)
22401
* -mcis:                                 PDP-11-Options.      (line  32)
22402
* -mconstant-gp command line option, IA-64: IA-64 Options.    (line   6)
22403
* -mCPU command line option, Alpha:      Alpha Options.       (line   6)
22404
* -mcpu option, cpu:                     TIC54X-Opts.         (line  15)
22405
* -mcpu= command line option, ARM:       ARM Options.         (line   6)
22406
* -mcpu= command line option, Blackfin:  Blackfin Options.    (line   6)
22407
* -mcpu= command line option, M680x0:    M68K-Opts.           (line  14)
22408
* -mcsm:                                 PDP-11-Options.      (line  43)
22409
* -mdcache-enabled command line option, LM32: LM32 Options.   (line  24)
22410
* -mdebug command line option, Alpha:    Alpha Options.       (line  25)
22411
* -mdivide-enabled command line option, LM32: LM32 Options.   (line   9)
22412
* -mdsbt command line option, TIC6X:     TIC6X Options.       (line  13)
22413
* -me option, stderr redirect:           TIC54X-Opts.         (line  20)
22414
* -meis:                                 PDP-11-Options.      (line  46)
22415
* -mepiphany command line option, Epiphany: Epiphany Options. (line   9)
22416
* -mepiphany16 command line option, Epiphany: Epiphany Options.
22417
                                                              (line  13)
22418
* -merrors-to-file option, stderr redirect: TIC54X-Opts.      (line  20)
22419
* -mesa option, s390:                    s390 Options.        (line  17)
22420
* -mf option, far-mode:                  TIC54X-Opts.         (line   8)
22421
* -mf11:                                 PDP-11-Options.      (line 122)
22422
* -mfar-mode option, far-mode:           TIC54X-Opts.         (line   8)
22423
* -mfdpic command line option, Blackfin: Blackfin Options.    (line  19)
22424
* -mfis:                                 PDP-11-Options.      (line  51)
22425
* -mfloat-abi= command line option, ARM: ARM Options.         (line 151)
22426
* -mfp-11:                               PDP-11-Options.      (line  56)
22427
* -mfpp:                                 PDP-11-Options.      (line  56)
22428
* -mfpu:                                 PDP-11-Options.      (line  56)
22429
* -mfpu= command line option, ARM:       ARM Options.         (line  81)
22430
* -mgcc-abi:                             RX-Opts.             (line  63)
22431
* -mgcc-abi command line option, V850:   V850 Options.        (line  70)
22432
* -micache-enabled command line option, LM32: LM32 Options.   (line  21)
22433
* -mimplicit-it command line option, ARM: ARM Options.        (line 112)
22434
* -mint-register:                        RX-Opts.             (line  57)
22435
* -mip2022 option, IP2K:                 IP2K-Opts.           (line  14)
22436
* -mip2022ext option, IP2022:            IP2K-Opts.           (line   9)
22437
* -mj11:                                 PDP-11-Options.      (line 126)
22438
* -mka11:                                PDP-11-Options.      (line  92)
22439
* -mkb11:                                PDP-11-Options.      (line  95)
22440
* -mkd11a:                               PDP-11-Options.      (line  98)
22441
* -mkd11b:                               PDP-11-Options.      (line 101)
22442
* -mkd11d:                               PDP-11-Options.      (line 104)
22443
* -mkd11e:                               PDP-11-Options.      (line 107)
22444
* -mkd11f:                               PDP-11-Options.      (line 110)
22445
* -mkd11h:                               PDP-11-Options.      (line 110)
22446
* -mkd11k:                               PDP-11-Options.      (line 114)
22447
* -mkd11q:                               PDP-11-Options.      (line 110)
22448
* -mkd11z:                               PDP-11-Options.      (line 118)
22449
* -mkev11:                               PDP-11-Options.      (line  51)
22450
* -mlimited-eis:                         PDP-11-Options.      (line  64)
22451
* -mlittle-endian:                       RX-Opts.             (line  26)
22452
* -mlong <1>:                            XGATE-Opts.          (line  13)
22453
* -mlong:                                M68HC11-Opts.        (line  45)
22454
* -mlong-double <1>:                     XGATE-Opts.          (line  21)
22455
* -mlong-double:                         M68HC11-Opts.        (line  53)
22456
* -mm9s12x:                              M68HC11-Opts.        (line  27)
22457
* -mm9s12xg:                             M68HC11-Opts.        (line  32)
22458
* -mmcu= command line option, AVR:       AVR Options.         (line   6)
22459
* -mmfpt:                                PDP-11-Options.      (line  70)
22460
* -mmicrocode:                           PDP-11-Options.      (line  83)
22461
* -mmnemonic= option, i386:              i386-Options.        (line  89)
22462
* -mmnemonic= option, x86-64:            i386-Options.        (line  89)
22463
* -mmultiply-enabled command line option, LM32: LM32 Options. (line   6)
22464
* -mmutiproc:                            PDP-11-Options.      (line  73)
22465
* -mmxps:                                PDP-11-Options.      (line  77)
22466
* -mnaked-reg option, i386:              i386-Options.        (line 101)
22467
* -mnaked-reg option, x86-64:            i386-Options.        (line 101)
22468
* -mno-cis:                              PDP-11-Options.      (line  32)
22469
* -mno-csm:                              PDP-11-Options.      (line  43)
22470
* -mno-dsbt command line option, TIC6X:  TIC6X Options.       (line  13)
22471
* -mno-eis:                              PDP-11-Options.      (line  46)
22472
* -mno-extensions:                       PDP-11-Options.      (line  29)
22473
* -mno-fdpic command line option, Blackfin: Blackfin Options. (line  22)
22474
* -mno-fis:                              PDP-11-Options.      (line  51)
22475
* -mno-fp-11:                            PDP-11-Options.      (line  56)
22476
* -mno-fpp:                              PDP-11-Options.      (line  56)
22477
* -mno-fpu:                              PDP-11-Options.      (line  56)
22478
* -mno-kev11:                            PDP-11-Options.      (line  51)
22479
* -mno-limited-eis:                      PDP-11-Options.      (line  64)
22480
* -mno-mfpt:                             PDP-11-Options.      (line  70)
22481
* -mno-microcode:                        PDP-11-Options.      (line  83)
22482
* -mno-mutiproc:                         PDP-11-Options.      (line  73)
22483
* -mno-mxps:                             PDP-11-Options.      (line  77)
22484
* -mno-pic:                              PDP-11-Options.      (line  11)
22485
* -mno-pic command line option, TIC6X:   TIC6X Options.       (line  36)
22486
* -mno-regnames option, s390:            s390 Options.        (line  35)
22487
* -mno-skip-bug command line option, AVR: AVR Options.        (line  99)
22488
* -mno-spl:                              PDP-11-Options.      (line  80)
22489
* -mno-sym32:                            MIPS Opts.           (line 222)
22490
* -mno-wrap command line option, AVR:    AVR Options.         (line 102)
22491
* -mnopic command line option, Blackfin: Blackfin Options.    (line  22)
22492
* -mpic:                                 PDP-11-Options.      (line  11)
22493
* -mpic command line option, TIC6X:      TIC6X Options.       (line  36)
22494
* -mpid:                                 RX-Opts.             (line  50)
22495
* -mpid= command line option, TIC6X:     TIC6X Options.       (line  23)
22496
* -mregnames option, s390:               s390 Options.        (line  32)
22497
* -mrelax command line option, V850:     V850 Options.        (line  63)
22498
* -mrh850-abi command line option, V850: V850 Options.        (line  73)
22499
* -mrx-abi:                              RX-Opts.             (line  69)
22500
* -mshort <1>:                           XGATE-Opts.          (line   8)
22501
* -mshort:                               M68HC11-Opts.        (line  40)
22502
* -mshort-double <1>:                    XGATE-Opts.          (line  17)
22503
* -mshort-double:                        M68HC11-Opts.        (line  49)
22504
* -msign-extend-enabled command line option, LM32: LM32 Options.
22505
                                                              (line  15)
22506
* -msmall-data-limit:                    RX-Opts.             (line  42)
22507
* -mspl:                                 PDP-11-Options.      (line  80)
22508
* -msse-check= option, i386:             i386-Options.        (line  71)
22509
* -msse-check= option, x86-64:           i386-Options.        (line  71)
22510
* -msse2avx option, i386:                i386-Options.        (line  67)
22511
* -msse2avx option, x86-64:              i386-Options.        (line  67)
22512
* -msym32:                               MIPS Opts.           (line 222)
22513
* -msyntax= option, i386:                i386-Options.        (line  95)
22514
* -msyntax= option, x86-64:              i386-Options.        (line  95)
22515
* -mt11:                                 PDP-11-Options.      (line 130)
22516
* -mthumb command line option, ARM:      ARM Options.         (line 103)
22517
* -mthumb-interwork command line option, ARM: ARM Options.    (line 108)
22518
* -mtune= option, i386:                  i386-Options.        (line  59)
22519
* -mtune= option, x86-64:                i386-Options.        (line  59)
22520
* -muse-conventional-section-names:      RX-Opts.             (line  33)
22521
* -muse-renesas-section-names:           RX-Opts.             (line  37)
22522
* -muser-enabled command line option, LM32: LM32 Options.     (line  18)
22523
* -mv850 command line option, V850:      V850 Options.        (line  23)
22524
* -mv850any command line option, V850:   V850 Options.        (line  41)
22525
* -mv850e command line option, V850:     V850 Options.        (line  29)
22526
* -mv850e1 command line option, V850:    V850 Options.        (line  35)
22527
* -mv850e2 command line option, V850:    V850 Options.        (line  51)
22528
* -mv850e2v3 command line option, V850:  V850 Options.        (line  57)
22529
* -mvxworks-pic option, MIPS:            MIPS Opts.           (line  26)
22530
* -mwarn-areg-zero option, s390:         s390 Options.        (line  38)
22531
* -mwarn-deprecated command line option, ARM: ARM Options.    (line 177)
22532
* -mzarch option, s390:                  s390 Options.        (line  17)
22533
* -N command line option, CRIS:          CRIS-Opts.           (line  58)
22534
* -nIp option, M32RX:                    M32R-Opts.           (line 101)
22535
* -no-bitinst, M32R2:                    M32R-Opts.           (line  54)
22536
* -no-ignore-parallel-conflicts option, M32RX: M32R-Opts.     (line  93)
22537
* -no-mdebug command line option, Alpha: Alpha Options.       (line  25)
22538
* -no-parallel option, M32RX:            M32R-Opts.           (line  51)
22539
* -no-relax option, i960:                Options-i960.        (line  66)
22540
* -no-warn-explicit-parallel-conflicts option, M32RX: M32R-Opts.
22541
                                                              (line  79)
22542
* -no-warn-unmatched-high option, M32R:  M32R-Opts.           (line 111)
22543
* -nocpp ignored (MIPS):                 MIPS Opts.           (line 225)
22544
* -noreplace command line option, Alpha: Alpha Options.       (line  40)
22545
* -o:                                    o.                   (line   6)
22546
* -O option, M32RX:                      M32R-Opts.           (line  59)
22547
* -parallel option, M32RX:               M32R-Opts.           (line  46)
22548
* -R:                                    R.                   (line   6)
22549
* -r800 command line option, Z80:        Z80 Options.         (line  41)
22550
* -relax command line option, Alpha:     Alpha Options.       (line  32)
22551
* -replace command line option, Alpha:   Alpha Options.       (line  40)
22552
* -S, ignored on VAX:                    VAX-Opts.            (line  11)
22553
* -t, ignored on VAX:                    VAX-Opts.            (line  36)
22554
* -T, ignored on VAX:                    VAX-Opts.            (line  11)
22555
* -v:                                    v.                   (line   6)
22556
* -V, redundant on VAX:                  VAX-Opts.            (line  22)
22557
* -version:                              v.                   (line   6)
22558
* -W:                                    W.                   (line  11)
22559
* -warn-explicit-parallel-conflicts option, M32RX: M32R-Opts. (line  65)
22560
* -warn-unmatched-high option, M32R:     M32R-Opts.           (line 105)
22561
* -Wnp option, M32RX:                    M32R-Opts.           (line  83)
22562
* -Wnuh option, M32RX:                   M32R-Opts.           (line 117)
22563
* -Wp option, M32RX:                     M32R-Opts.           (line  75)
22564
* -wsigned_overflow command line option, V850: V850 Options.  (line   9)
22565
* -Wuh option, M32RX:                    M32R-Opts.           (line 114)
22566
* -wunsigned_overflow command line option, V850: V850 Options.
22567
                                                              (line  16)
22568
* -x command line option, MMIX:          MMIX-Opts.           (line  44)
22569
* -z80 command line option, Z80:         Z80 Options.         (line   8)
22570
* -z8001 command line option, Z8000:     Z8000 Options.       (line   6)
22571
* -z8002 command line option, Z8000:     Z8000 Options.       (line   9)
22572
* . (symbol):                            Dot.                 (line   6)
22573
* .2byte directive, ARM:                 ARM Directives.      (line   6)
22574
* .4byte directive, ARM:                 ARM Directives.      (line   6)
22575
* .8byte directive, ARM:                 ARM Directives.      (line   6)
22576
* .align directive, ARM:                 ARM Directives.      (line  11)
22577
* .align directive, TILE-Gx:             TILE-Gx Directives.  (line   6)
22578
* .align directive, TILEPro:             TILEPro Directives.  (line   6)
22579
* .allow_suspicious_bundles directive, TILE-Gx: TILE-Gx Directives.
22580
                                                              (line  10)
22581
* .allow_suspicious_bundles directive, TILEPro: TILEPro Directives.
22582
                                                              (line  10)
22583
* .arch directive, ARM:                  ARM Directives.      (line  18)
22584
* .arch directive, TIC6X:                TIC6X Directives.    (line  10)
22585
* .arch_extension directive, ARM:        ARM Directives.      (line  25)
22586
* .arm directive, ARM:                   ARM Directives.      (line  34)
22587
* .big directive, M32RX:                 M32R-Directives.     (line  88)
22588
* .bss directive, AArch64:               AArch64 Directives.  (line   6)
22589
* .bss directive, ARM:                   ARM Directives.      (line  42)
22590
* .c6xabi_attribute directive, TIC6X:    TIC6X Directives.    (line  20)
22591
* .cantunwind directive, ARM:            ARM Directives.      (line  45)
22592
* .cantunwind directive, TIC6X:          TIC6X Directives.    (line  13)
22593
* .code directive, ARM:                  ARM Directives.      (line  49)
22594
* .cpu directive, ARM:                   ARM Directives.      (line  53)
22595
* .dn and .qn directives, ARM:           ARM Directives.      (line  60)
22596
* .eabi_attribute directive, ARM:        ARM Directives.      (line  83)
22597
* .ehtype directive, TIC6X:              TIC6X Directives.    (line  31)
22598
* .endp directive, TIC6X:                TIC6X Directives.    (line  34)
22599
* .even directive, ARM:                  ARM Directives.      (line 111)
22600
* .extend directive, ARM:                ARM Directives.      (line 114)
22601
* .fnend directive, ARM:                 ARM Directives.      (line 120)
22602
* .fnstart directive, ARM:               ARM Directives.      (line 129)
22603
* .force_thumb directive, ARM:           ARM Directives.      (line 132)
22604
* .fpu directive, ARM:                   ARM Directives.      (line 136)
22605
* .global:                               MIPS insn.           (line  12)
22606
* .handlerdata directive, ARM:           ARM Directives.      (line 140)
22607
* .handlerdata directive, TIC6X:         TIC6X Directives.    (line  39)
22608
* .insn:                                 MIPS insn.           (line   6)
22609
* .insn directive, s390:                 s390 Directives.     (line  11)
22610
* .inst directive, ARM:                  ARM Directives.      (line 149)
22611
* .ldouble directive, ARM:               ARM Directives.      (line 114)
22612
* .little directive, M32RX:              M32R-Directives.     (line  82)
22613
* .long directive, s390:                 s390 Directives.     (line  16)
22614
* .ltorg directive, AArch64:             AArch64 Directives.  (line   9)
22615
* .ltorg directive, ARM:                 ARM Directives.      (line 159)
22616
* .ltorg directive, s390:                s390 Directives.     (line  88)
22617
* .m32r directive, M32R:                 M32R-Directives.     (line  66)
22618
* .m32r2 directive, M32R2:               M32R-Directives.     (line  77)
22619
* .m32rx directive, M32RX:               M32R-Directives.     (line  72)
22620
* .machine directive, s390:              s390 Directives.     (line  93)
22621
* .machinemode directive, s390:          s390 Directives.     (line 103)
22622
* .movsp directive, ARM:                 ARM Directives.      (line 173)
22623
* .no_pointers directive, XStormy16:     XStormy16 Directives.
22624
                                                              (line  14)
22625
* .nocmp directive, TIC6X:               TIC6X Directives.    (line  47)
22626
* .o:                                    Object.              (line   6)
22627
* .object_arch directive, ARM:           ARM Directives.      (line 178)
22628
* .packed directive, ARM:                ARM Directives.      (line 184)
22629
* .pad directive, ARM:                   ARM Directives.      (line  37)
22630
* .param on HPPA:                        HPPA Directives.     (line  19)
22631
* .personality directive, ARM:           ARM Directives.      (line 194)
22632
* .personality directive, TIC6X:         TIC6X Directives.    (line  55)
22633
* .personalityindex directive, ARM:      ARM Directives.      (line 197)
22634
* .personalityindex directive, TIC6X:    TIC6X Directives.    (line  51)
22635
* .pool directive, AArch64:              AArch64 Directives.  (line  23)
22636
* .pool directive, ARM:                  ARM Directives.      (line 201)
22637
* .quad directive, s390:                 s390 Directives.     (line  16)
22638
* .req directive, AArch64:               AArch64 Directives.  (line  26)
22639
* .req directive, ARM:                   ARM Directives.      (line 204)
22640
* .require_canonical_reg_names directive, TILE-Gx: TILE-Gx Directives.
22641
                                                              (line  19)
22642
* .require_canonical_reg_names directive, TILEPro: TILEPro Directives.
22643
                                                              (line  19)
22644
* .save directive, ARM:                  ARM Directives.      (line 209)
22645
* .scomm directive, TIC6X:               TIC6X Directives.    (line  58)
22646
* .secrel32 directive, ARM:              ARM Directives.      (line 247)
22647
* .set arch=CPU:                         MIPS ISA.            (line  18)
22648
* .set autoextend:                       MIPS autoextend.     (line   6)
22649
* .set doublefloat:                      MIPS floating-point. (line  12)
22650
* .set dsp:                              MIPS ASE instruction generation overrides.
22651
                                                              (line  21)
22652
* .set dspr2:                            MIPS ASE instruction generation overrides.
22653
                                                              (line  26)
22654
* .set hardfloat:                        MIPS floating-point. (line   6)
22655
* .set mcu:                              MIPS ASE instruction generation overrides.
22656
                                                              (line  37)
22657
* .set mdmx:                             MIPS ASE instruction generation overrides.
22658
                                                              (line  16)
22659
* .set mips3d:                           MIPS ASE instruction generation overrides.
22660
                                                              (line   6)
22661
* .set mipsN:                            MIPS ISA.            (line   6)
22662
* .set mt:                               MIPS ASE instruction generation overrides.
22663
                                                              (line  32)
22664
* .set noautoextend:                     MIPS autoextend.     (line   6)
22665
* .set nodsp:                            MIPS ASE instruction generation overrides.
22666
                                                              (line  21)
22667
* .set nodspr2:                          MIPS ASE instruction generation overrides.
22668
                                                              (line  26)
22669
* .set nomcu:                            MIPS ASE instruction generation overrides.
22670
                                                              (line  37)
22671
* .set nomdmx:                           MIPS ASE instruction generation overrides.
22672
                                                              (line  16)
22673
* .set nomips3d:                         MIPS ASE instruction generation overrides.
22674
                                                              (line   6)
22675
* .set nomt:                             MIPS ASE instruction generation overrides.
22676
                                                              (line  32)
22677
* .set nosmartmips:                      MIPS ASE instruction generation overrides.
22678
                                                              (line  11)
22679
* .set nosym32:                          MIPS symbol sizes.   (line   6)
22680
* .set pop:                              MIPS option stack.   (line   6)
22681
* .set push:                             MIPS option stack.   (line   6)
22682
* .set singlefloat:                      MIPS floating-point. (line  12)
22683
* .set smartmips:                        MIPS ASE instruction generation overrides.
22684
                                                              (line  11)
22685
* .set softfloat:                        MIPS floating-point. (line   6)
22686
* .set sym32:                            MIPS symbol sizes.   (line   6)
22687
* .setfp directive, ARM:                 ARM Directives.      (line 233)
22688
* .short directive, s390:                s390 Directives.     (line  16)
22689
* .syntax directive, ARM:                ARM Directives.      (line 252)
22690
* .thumb directive, ARM:                 ARM Directives.      (line 256)
22691
* .thumb_func directive, ARM:            ARM Directives.      (line 259)
22692
* .thumb_set directive, ARM:             ARM Directives.      (line 270)
22693
* .tlsdescseq directive, ARM:            ARM Directives.      (line 277)
22694
* .unreq directive, AArch64:             AArch64 Directives.  (line  31)
22695
* .unreq directive, ARM:                 ARM Directives.      (line 282)
22696
* .unwind_raw directive, ARM:            ARM Directives.      (line 293)
22697
* .v850 directive, V850:                 V850 Directives.     (line  14)
22698
* .v850e directive, V850:                V850 Directives.     (line  20)
22699
* .v850e1 directive, V850:               V850 Directives.     (line  26)
22700
* .v850e2 directive, V850:               V850 Directives.     (line  32)
22701
* .v850e2v3 directive, V850:             V850 Directives.     (line  38)
22702
* .vsave directive, ARM:                 ARM Directives.      (line 300)
22703
* .z8001:                                Z8000 Directives.    (line  11)
22704
* .z8002:                                Z8000 Directives.    (line  15)
22705
* 16-bit code, i386:                     i386-16bit.          (line   6)
22706
* 16bit_pointers directive, XStormy16:   XStormy16 Directives.
22707
                                                              (line   6)
22708
* 2byte directive, ARC:                  ARC Directives.      (line   9)
22709
* 32bit_pointers directive, XStormy16:   XStormy16 Directives.
22710
                                                              (line  10)
22711
* 3byte directive, ARC:                  ARC Directives.      (line  12)
22712
* 3DNow!, i386:                          i386-SIMD.           (line   6)
22713
* 3DNow!, x86-64:                        i386-SIMD.           (line   6)
22714
* 430 support:                           MSP430-Dependent.    (line   6)
22715
* 4byte directive, ARC:                  ARC Directives.      (line  15)
22716
* : (label):                             Statements.          (line  31)
22717
* @hi pseudo-op, XStormy16:              XStormy16 Opcodes.   (line  21)
22718
* @lo pseudo-op, XStormy16:              XStormy16 Opcodes.   (line  10)
22719
* @word modifier, D10V:                  D10V-Word.           (line   6)
22720
* \" (doublequote character):            Strings.             (line  43)
22721
* \\ (\ character):                      Strings.             (line  40)
22722
* \b (backspace character):              Strings.             (line  15)
22723
* \DDD (octal character code):           Strings.             (line  30)
22724
* \f (formfeed character):               Strings.             (line  18)
22725
* \n (newline character):                Strings.             (line  21)
22726
* \r (carriage return character):        Strings.             (line  24)
22727
* \t (tab):                              Strings.             (line  27)
22728
* \XD... (hex character code):           Strings.             (line  36)
22729
* _ opcode prefix:                       Xtensa Opcodes.      (line   9)
22730
* a.out:                                 Object.              (line   6)
22731
* a.out symbol attributes:               a.out Symbols.       (line   6)
22732
* A_DIR environment variable, TIC54X:    TIC54X-Env.          (line   6)
22733
* AArch64 floating point (IEEE):         AArch64 Floating Point.
22734
                                                              (line   6)
22735
* AArch64 immediate character:           AArch64-Chars.       (line  13)
22736
* AArch64 line comment character:        AArch64-Chars.       (line   6)
22737
* AArch64 line separator:                AArch64-Chars.       (line  10)
22738
* AArch64 machine directives:            AArch64 Directives.  (line   6)
22739
* AArch64 opcodes:                       AArch64 Opcodes.     (line   6)
22740
* AArch64 options (none):                AArch64 Options.     (line   6)
22741
* AArch64 register names:                AArch64-Regs.        (line   6)
22742
* AArch64 relocations:                   AArch64-Relocations. (line   6)
22743
* AArch64 support:                       AArch64-Dependent.   (line   6)
22744
* ABI options, SH64:                     SH64 Options.        (line  29)
22745
* ABORT directive:                       ABORT (COFF).        (line   6)
22746
* abort directive:                       Abort.               (line   6)
22747
* absolute section:                      Ld Sections.         (line  29)
22748
* absolute-literals directive:           Absolute Literals Directive.
22749
                                                              (line   6)
22750
* ADDI instructions, relaxation:         Xtensa Immediate Relaxation.
22751
                                                              (line  43)
22752
* addition, permitted arguments:         Infix Ops.           (line  44)
22753
* addresses:                             Expressions.         (line   6)
22754
* addresses, format of:                  Secs Background.     (line  68)
22755
* addressing modes, D10V:                D10V-Addressing.     (line   6)
22756
* addressing modes, D30V:                D30V-Addressing.     (line   6)
22757
* addressing modes, H8/300:              H8/300-Addressing.   (line   6)
22758
* addressing modes, M680x0:              M68K-Syntax.         (line  21)
22759
* addressing modes, M68HC11:             M68HC11-Syntax.      (line  30)
22760
* addressing modes, SH:                  SH-Addressing.       (line   6)
22761
* addressing modes, SH64:                SH64-Addressing.     (line   6)
22762
* addressing modes, XGATE:               XGATE-Syntax.        (line  29)
22763
* addressing modes, Z8000:               Z8000-Addressing.    (line   6)
22764
* ADR reg,
22765
* ADRL reg,
22766
* ADRP, ADD, LDR/STR group relocations, AArch64: AArch64-Relocations.
22767
                                                              (line  14)
22768
* advancing location counter:            Org.                 (line   6)
22769
* align directive:                       Align.               (line   6)
22770
* align directive, SPARC:                Sparc-Directives.    (line   9)
22771
* align directive, TIC54X:               TIC54X-Directives.   (line   6)
22772
* aligned instruction bundle:            Bundle directives.   (line   6)
22773
* alignment for NEON instructions:       ARM-Neon-Alignment.  (line   6)
22774
* alignment of branch targets:           Xtensa Automatic Alignment.
22775
                                                              (line   6)
22776
* alignment of LOOP instructions:        Xtensa Automatic Alignment.
22777
                                                              (line   6)
22778
* Alpha floating point (IEEE):           Alpha Floating Point.
22779
                                                              (line   6)
22780
* Alpha line comment character:          Alpha-Chars.         (line   6)
22781
* Alpha line separator:                  Alpha-Chars.         (line  11)
22782
* Alpha notes:                           Alpha Notes.         (line   6)
22783
* Alpha options:                         Alpha Options.       (line   6)
22784
* Alpha registers:                       Alpha-Regs.          (line   6)
22785
* Alpha relocations:                     Alpha-Relocs.        (line   6)
22786
* Alpha support:                         Alpha-Dependent.     (line   6)
22787
* Alpha Syntax:                          Alpha Options.       (line  61)
22788
* Alpha-only directives:                 Alpha Directives.    (line  10)
22789
* altered difference tables:             Word.                (line  12)
22790
* alternate syntax for the 680x0:        M68K-Moto-Syntax.    (line   6)
22791
* ARC floating point (IEEE):             ARC Floating Point.  (line   6)
22792
* ARC line comment character:            ARC-Chars.           (line   6)
22793
* ARC line separator:                    ARC-Chars.           (line  12)
22794
* ARC machine directives:                ARC Directives.      (line   6)
22795
* ARC opcodes:                           ARC Opcodes.         (line   6)
22796
* ARC options (none):                    ARC Options.         (line   6)
22797
* ARC register names:                    ARC-Regs.            (line   6)
22798
* ARC support:                           ARC-Dependent.       (line   6)
22799
* arc5 arc5, ARC:                        ARC Options.         (line  10)
22800
* arc6 arc6, ARC:                        ARC Options.         (line  13)
22801
* arc7 arc7, ARC:                        ARC Options.         (line  21)
22802
* arc8 arc8, ARC:                        ARC Options.         (line  24)
22803
* arch directive, i386:                  i386-Arch.           (line   6)
22804
* arch directive, M680x0:                M68K-Directives.     (line  22)
22805
* arch directive, x86-64:                i386-Arch.           (line   6)
22806
* architecture options, i960:            Options-i960.        (line   6)
22807
* architecture options, IP2022:          IP2K-Opts.           (line   9)
22808
* architecture options, IP2K:            IP2K-Opts.           (line  14)
22809
* architecture options, M16C:            M32C-Opts.           (line  12)
22810
* architecture options, M32C:            M32C-Opts.           (line   9)
22811
* architecture options, M32R:            M32R-Opts.           (line  21)
22812
* architecture options, M32R2:           M32R-Opts.           (line  17)
22813
* architecture options, M32RX:           M32R-Opts.           (line   9)
22814
* architecture options, M680x0:          M68K-Opts.           (line  98)
22815
* Architecture variant option, CRIS:     CRIS-Opts.           (line  34)
22816
* architectures, PowerPC:                PowerPC-Opts.        (line   6)
22817
* architectures, SCORE:                  SCORE-Opts.          (line   6)
22818
* architectures, SPARC:                  Sparc-Opts.          (line   6)
22819
* arguments for addition:                Infix Ops.           (line  44)
22820
* arguments for subtraction:             Infix Ops.           (line  49)
22821
* arguments in expressions:              Arguments.           (line   6)
22822
* arithmetic functions:                  Operators.           (line   6)
22823
* arithmetic operands:                   Arguments.           (line   6)
22824
* ARM data relocations:                  ARM-Relocations.     (line   6)
22825
* ARM floating point (IEEE):             ARM Floating Point.  (line   6)
22826
* ARM identifiers:                       ARM-Chars.           (line  19)
22827
* ARM immediate character:               ARM-Chars.           (line  17)
22828
* ARM line comment character:            ARM-Chars.           (line   6)
22829
* ARM line separator:                    ARM-Chars.           (line  14)
22830
* ARM machine directives:                ARM Directives.      (line   6)
22831
* ARM opcodes:                           ARM Opcodes.         (line   6)
22832
* ARM options (none):                    ARM Options.         (line   6)
22833
* ARM register names:                    ARM-Regs.            (line   6)
22834
* ARM support:                           ARM-Dependent.       (line   6)
22835
* ascii directive:                       Ascii.               (line   6)
22836
* asciz directive:                       Asciz.               (line   6)
22837
* asg directive, TIC54X:                 TIC54X-Directives.   (line  20)
22838
* assembler bugs, reporting:             Bug Reporting.       (line   6)
22839
* assembler crash:                       Bug Criteria.        (line   9)
22840
* assembler directive .3byte, RX:        RX-Directives.       (line   9)
22841
* assembler directive .arch, CRIS:       CRIS-Pseudos.        (line  45)
22842
* assembler directive .dword, CRIS:      CRIS-Pseudos.        (line  12)
22843
* assembler directive .far, M68HC11:     M68HC11-Directives.  (line  20)
22844
* assembler directive .fetchalign, RX:   RX-Directives.       (line  13)
22845
* assembler directive .interrupt, M68HC11: M68HC11-Directives.
22846
                                                              (line  26)
22847
* assembler directive .mode, M68HC11:    M68HC11-Directives.  (line  16)
22848
* assembler directive .relax, M68HC11:   M68HC11-Directives.  (line  10)
22849
* assembler directive .syntax, CRIS:     CRIS-Pseudos.        (line  17)
22850
* assembler directive .xrefb, M68HC11:   M68HC11-Directives.  (line  31)
22851
* assembler directive BSPEC, MMIX:       MMIX-Pseudos.        (line 131)
22852
* assembler directive BYTE, MMIX:        MMIX-Pseudos.        (line  97)
22853
* assembler directive ESPEC, MMIX:       MMIX-Pseudos.        (line 131)
22854
* assembler directive GREG, MMIX:        MMIX-Pseudos.        (line  50)
22855
* assembler directive IS, MMIX:          MMIX-Pseudos.        (line  42)
22856
* assembler directive LOC, MMIX:         MMIX-Pseudos.        (line   7)
22857
* assembler directive LOCAL, MMIX:       MMIX-Pseudos.        (line  28)
22858
* assembler directive OCTA, MMIX:        MMIX-Pseudos.        (line 108)
22859
* assembler directive PREFIX, MMIX:      MMIX-Pseudos.        (line 120)
22860
* assembler directive TETRA, MMIX:       MMIX-Pseudos.        (line 108)
22861
* assembler directive WYDE, MMIX:        MMIX-Pseudos.        (line 108)
22862
* assembler directives, CRIS:            CRIS-Pseudos.        (line   6)
22863
* assembler directives, M68HC11:         M68HC11-Directives.  (line   6)
22864
* assembler directives, M68HC12:         M68HC11-Directives.  (line   6)
22865
* assembler directives, MMIX:            MMIX-Pseudos.        (line   6)
22866
* assembler directives, RL78:            RL78-Directives.     (line   6)
22867
* assembler directives, RX:              RX-Directives.       (line   6)
22868
* assembler directives, XGATE:           XGATE-Directives.    (line   6)
22869
* assembler internal logic error:        As Sections.         (line  13)
22870
* assembler version:                     v.                   (line   6)
22871
* assembler, and linker:                 Secs Background.     (line  10)
22872
* assembly listings, enabling:           a.                   (line   6)
22873
* assigning values to symbols <1>:       Equ.                 (line   6)
22874
* assigning values to symbols:           Setting Symbols.     (line   6)
22875
* atmp directive, i860:                  Directives-i860.     (line  16)
22876
* att_syntax pseudo op, i386:            i386-Variations.     (line   6)
22877
* att_syntax pseudo op, x86-64:          i386-Variations.     (line   6)
22878
* attributes, symbol:                    Symbol Attributes.   (line   6)
22879
* auxiliary attributes, COFF symbols:    COFF Symbols.        (line  19)
22880
* auxiliary symbol information, COFF:    Dim.                 (line   6)
22881
* AVR line comment character:            AVR-Chars.           (line   6)
22882
* AVR line separator:                    AVR-Chars.           (line  14)
22883
* AVR modifiers:                         AVR-Modifiers.       (line   6)
22884
* AVR opcode summary:                    AVR Opcodes.         (line   6)
22885
* AVR options (none):                    AVR Options.         (line   6)
22886
* AVR register names:                    AVR-Regs.            (line   6)
22887
* AVR support:                           AVR-Dependent.       (line   6)
22888
* backslash (\\):                        Strings.             (line  40)
22889
* backspace (\b):                        Strings.             (line  15)
22890
* balign directive:                      Balign.              (line   6)
22891
* balignl directive:                     Balign.              (line  27)
22892
* balignw directive:                     Balign.              (line  27)
22893
* bes directive, TIC54X:                 TIC54X-Directives.   (line 196)
22894
* big endian output, MIPS:               Overview.            (line 717)
22895
* big endian output, PJ:                 Overview.            (line 620)
22896
* big-endian output, MIPS:               MIPS Opts.           (line  13)
22897
* big-endian output, TIC6X:              TIC6X Options.       (line  46)
22898
* bignums:                               Bignums.             (line   6)
22899
* binary constants, TIC54X:              TIC54X-Constants.    (line   8)
22900
* binary files, including:               Incbin.              (line   6)
22901
* binary integers:                       Integers.            (line   6)
22902
* bit names, IA-64:                      IA-64-Bits.          (line   6)
22903
* bitfields, not supported on VAX:       VAX-no.              (line   6)
22904
* Blackfin directives:                   Blackfin Directives. (line   6)
22905
* Blackfin options (none):               Blackfin Options.    (line   6)
22906
* Blackfin support:                      Blackfin-Dependent.  (line   6)
22907
* Blackfin syntax:                       Blackfin Syntax.     (line   6)
22908
* block:                                 Z8000 Directives.    (line  55)
22909
* BMI, i386:                             i386-BMI.            (line   6)
22910
* BMI, x86-64:                           i386-BMI.            (line   6)
22911
* branch improvement, M680x0:            M68K-Branch.         (line   6)
22912
* branch improvement, M68HC11:           M68HC11-Branch.      (line   6)
22913
* branch improvement, VAX:               VAX-branch.          (line   6)
22914
* branch instructions, relaxation:       Xtensa Branch Relaxation.
22915
                                                              (line   6)
22916
* branch recording, i960:                Options-i960.        (line  22)
22917
* branch statistics table, i960:         Options-i960.        (line  40)
22918
* branch target alignment:               Xtensa Automatic Alignment.
22919
                                                              (line   6)
22920
* break directive, TIC54X:               TIC54X-Directives.   (line 143)
22921
* BSD syntax:                            PDP-11-Syntax.       (line   6)
22922
* bss directive, i960:                   Directives-i960.     (line   6)
22923
* bss directive, TIC54X:                 TIC54X-Directives.   (line  29)
22924
* bss section <1>:                       bss.                 (line   6)
22925
* bss section:                           Ld Sections.         (line  20)
22926
* bug criteria:                          Bug Criteria.        (line   6)
22927
* bug reports:                           Bug Reporting.       (line   6)
22928
* bugs in assembler:                     Reporting Bugs.      (line   6)
22929
* Built-in symbols, CRIS:                CRIS-Symbols.        (line   6)
22930
* builtin math functions, TIC54X:        TIC54X-Builtins.     (line   6)
22931
* builtin subsym functions, TIC54X:      TIC54X-Macros.       (line  16)
22932
* bundle:                                Bundle directives.   (line   6)
22933
* bundle-locked:                         Bundle directives.   (line  35)
22934
* bundle_align_mode directive:           Bundle directives.   (line   6)
22935
* bundle_lock directive:                 Bundle directives.   (line  28)
22936
* bundle_unlock directive:               Bundle directives.   (line  28)
22937
* bus lock prefixes, i386:               i386-Prefixes.       (line  36)
22938
* bval:                                  Z8000 Directives.    (line  30)
22939
* byte directive:                        Byte.                (line   6)
22940
* byte directive, TIC54X:                TIC54X-Directives.   (line  36)
22941
* C54XDSP_DIR environment variable, TIC54X: TIC54X-Env.       (line   6)
22942
* c_mode directive, TIC54X:              TIC54X-Directives.   (line  51)
22943
* call instructions, i386:               i386-Mnemonics.      (line  56)
22944
* call instructions, relaxation:         Xtensa Call Relaxation.
22945
                                                              (line   6)
22946
* call instructions, x86-64:             i386-Mnemonics.      (line  56)
22947
* callj, i960 pseudo-opcode:             callj-i960.          (line   6)
22948
* carriage return (\r):                  Strings.             (line  24)
22949
* case sensitivity, Z80:                 Z80-Case.            (line   6)
22950
* cfi_endproc directive:                 CFI directives.      (line  26)
22951
* cfi_sections directive:                CFI directives.      (line   6)
22952
* cfi_startproc directive:               CFI directives.      (line  16)
22953
* char directive, TIC54X:                TIC54X-Directives.   (line  36)
22954
* character constant, Z80:               Z80-Chars.           (line  20)
22955
* character constants:                   Characters.          (line   6)
22956
* character escape codes:                Strings.             (line  15)
22957
* character escapes, Z80:                Z80-Chars.           (line  18)
22958
* character, single:                     Chars.               (line   6)
22959
* characters used in symbols:            Symbol Intro.        (line   6)
22960
* clink directive, TIC54X:               TIC54X-Directives.   (line  45)
22961
* code16 directive, i386:                i386-16bit.          (line   6)
22962
* code16gcc directive, i386:             i386-16bit.          (line   6)
22963
* code32 directive, i386:                i386-16bit.          (line   6)
22964
* code64 directive, i386:                i386-16bit.          (line   6)
22965
* code64 directive, x86-64:              i386-16bit.          (line   6)
22966
* COFF auxiliary symbol information:     Dim.                 (line   6)
22967
* COFF structure debugging:              Tag.                 (line   6)
22968
* COFF symbol attributes:                COFF Symbols.        (line   6)
22969
* COFF symbol descriptor:                Desc.                (line   6)
22970
* COFF symbol storage class:             Scl.                 (line   6)
22971
* COFF symbol type:                      Type.                (line  11)
22972
* COFF symbols, debugging:               Def.                 (line   6)
22973
* COFF value attribute:                  Val.                 (line   6)
22974
* COMDAT:                                Linkonce.            (line   6)
22975
* comm directive:                        Comm.                (line   6)
22976
* command line conventions:              Command Line.        (line   6)
22977
* command line options, V850:            V850 Options.        (line   9)
22978
* command-line options ignored, VAX:     VAX-Opts.            (line   6)
22979
* comment character, XStormy16:          XStormy16-Chars.     (line  11)
22980
* comments:                              Comments.            (line   6)
22981
* comments, M680x0:                      M68K-Chars.          (line   6)
22982
* comments, removed by preprocessor:     Preprocessing.       (line  11)
22983
* common directive, SPARC:               Sparc-Directives.    (line  12)
22984
* common sections:                       Linkonce.            (line   6)
22985
* common variable storage:               bss.                 (line   6)
22986
* compare and jump expansions, i960:     Compare-and-branch-i960.
22987
                                                              (line  13)
22988
* compare/branch instructions, i960:     Compare-and-branch-i960.
22989
                                                              (line   6)
22990
* comparison expressions:                Infix Ops.           (line  55)
22991
* conditional assembly:                  If.                  (line   6)
22992
* constant, single character:            Chars.               (line   6)
22993
* constants:                             Constants.           (line   6)
22994
* constants, bignum:                     Bignums.             (line   6)
22995
* constants, character:                  Characters.          (line   6)
22996
* constants, converted by preprocessor:  Preprocessing.       (line  14)
22997
* constants, floating point:             Flonums.             (line   6)
22998
* constants, integer:                    Integers.            (line   6)
22999
* constants, number:                     Numbers.             (line   6)
23000
* constants, Sparc:                      Sparc-Constants.     (line   6)
23001
* constants, string:                     Strings.             (line   6)
23002
* constants, TIC54X:                     TIC54X-Constants.    (line   6)
23003
* conversion instructions, i386:         i386-Mnemonics.      (line  37)
23004
* conversion instructions, x86-64:       i386-Mnemonics.      (line  37)
23005
* coprocessor wait, i386:                i386-Prefixes.       (line  40)
23006
* copy directive, TIC54X:                TIC54X-Directives.   (line  54)
23007
* cpu directive, M680x0:                 M68K-Directives.     (line  30)
23008
* CR16 line comment character:           CR16-Chars.          (line   6)
23009
* CR16 line separator:                   CR16-Chars.          (line  13)
23010
* CR16 Operand Qualifiers:               CR16 Operand Qualifiers.
23011
                                                              (line   6)
23012
* CR16 support:                          CR16-Dependent.      (line   6)
23013
* crash of assembler:                    Bug Criteria.        (line   9)
23014
* CRIS --emulation=crisaout command line option: CRIS-Opts.   (line   9)
23015
* CRIS --emulation=criself command line option: CRIS-Opts.    (line   9)
23016
* CRIS --march=ARCHITECTURE command line option: CRIS-Opts.   (line  34)
23017
* CRIS --mul-bug-abort command line option: CRIS-Opts.        (line  62)
23018
* CRIS --no-mul-bug-abort command line option: CRIS-Opts.     (line  62)
23019
* CRIS --no-underscore command line option: CRIS-Opts.        (line  15)
23020
* CRIS --pic command line option:        CRIS-Opts.           (line  27)
23021
* CRIS --underscore command line option: CRIS-Opts.           (line  15)
23022
* CRIS -N command line option:           CRIS-Opts.           (line  58)
23023
* CRIS architecture variant option:      CRIS-Opts.           (line  34)
23024
* CRIS assembler directive .arch:        CRIS-Pseudos.        (line  45)
23025
* CRIS assembler directive .dword:       CRIS-Pseudos.        (line  12)
23026
* CRIS assembler directive .syntax:      CRIS-Pseudos.        (line  17)
23027
* CRIS assembler directives:             CRIS-Pseudos.        (line   6)
23028
* CRIS built-in symbols:                 CRIS-Symbols.        (line   6)
23029
* CRIS instruction expansion:            CRIS-Expand.         (line   6)
23030
* CRIS line comment characters:          CRIS-Chars.          (line   6)
23031
* CRIS options:                          CRIS-Opts.           (line   6)
23032
* CRIS position-independent code:        CRIS-Opts.           (line  27)
23033
* CRIS pseudo-op .arch:                  CRIS-Pseudos.        (line  45)
23034
* CRIS pseudo-op .dword:                 CRIS-Pseudos.        (line  12)
23035
* CRIS pseudo-op .syntax:                CRIS-Pseudos.        (line  17)
23036
* CRIS pseudo-ops:                       CRIS-Pseudos.        (line   6)
23037
* CRIS register names:                   CRIS-Regs.           (line   6)
23038
* CRIS support:                          CRIS-Dependent.      (line   6)
23039
* CRIS symbols in position-independent code: CRIS-Pic.        (line   6)
23040
* ctbp register, V850:                   V850-Regs.           (line 131)
23041
* ctoff pseudo-op, V850:                 V850 Opcodes.        (line 111)
23042
* ctpc register, V850:                   V850-Regs.           (line 119)
23043
* ctpsw register, V850:                  V850-Regs.           (line 122)
23044
* current address:                       Dot.                 (line   6)
23045
* current address, advancing:            Org.                 (line   6)
23046
* D10V @word modifier:                   D10V-Word.           (line   6)
23047
* D10V addressing modes:                 D10V-Addressing.     (line   6)
23048
* D10V floating point:                   D10V-Float.          (line   6)
23049
* D10V line comment character:           D10V-Chars.          (line   6)
23050
* D10V opcode summary:                   D10V-Opcodes.        (line   6)
23051
* D10V optimization:                     Overview.            (line 483)
23052
* D10V options:                          D10V-Opts.           (line   6)
23053
* D10V registers:                        D10V-Regs.           (line   6)
23054
* D10V size modifiers:                   D10V-Size.           (line   6)
23055
* D10V sub-instruction ordering:         D10V-Chars.          (line  14)
23056
* D10V sub-instructions:                 D10V-Subs.           (line   6)
23057
* D10V support:                          D10V-Dependent.      (line   6)
23058
* D10V syntax:                           D10V-Syntax.         (line   6)
23059
* D30V addressing modes:                 D30V-Addressing.     (line   6)
23060
* D30V floating point:                   D30V-Float.          (line   6)
23061
* D30V Guarded Execution:                D30V-Guarded.        (line   6)
23062
* D30V line comment character:           D30V-Chars.          (line   6)
23063
* D30V nops:                             Overview.            (line 491)
23064
* D30V nops after 32-bit multiply:       Overview.            (line 494)
23065
* D30V opcode summary:                   D30V-Opcodes.        (line   6)
23066
* D30V optimization:                     Overview.            (line 488)
23067
* D30V options:                          D30V-Opts.           (line   6)
23068
* D30V registers:                        D30V-Regs.           (line   6)
23069
* D30V size modifiers:                   D30V-Size.           (line   6)
23070
* D30V sub-instruction ordering:         D30V-Chars.          (line  14)
23071
* D30V sub-instructions:                 D30V-Subs.           (line   6)
23072
* D30V support:                          D30V-Dependent.      (line   6)
23073
* D30V syntax:                           D30V-Syntax.         (line   6)
23074
* data alignment on SPARC:               Sparc-Aligned-Data.  (line   6)
23075
* data and text sections, joining:       R.                   (line   6)
23076
* data directive:                        Data.                (line   6)
23077
* data directive, TIC54X:                TIC54X-Directives.   (line  61)
23078
* data relocations, ARM:                 ARM-Relocations.     (line   6)
23079
* data section:                          Ld Sections.         (line   9)
23080
* data1 directive, M680x0:               M68K-Directives.     (line   9)
23081
* data2 directive, M680x0:               M68K-Directives.     (line  12)
23082
* datalabel, SH64:                       SH64-Addressing.     (line  16)
23083
* dbpc register, V850:                   V850-Regs.           (line 125)
23084
* dbpsw register, V850:                  V850-Regs.           (line 128)
23085
* debuggers, and symbol order:           Symbols.             (line  10)
23086
* debugging COFF symbols:                Def.                 (line   6)
23087
* DEC syntax:                            PDP-11-Syntax.       (line   6)
23088
* decimal integers:                      Integers.            (line  12)
23089
* def directive:                         Def.                 (line   6)
23090
* def directive, TIC54X:                 TIC54X-Directives.   (line 103)
23091
* density instructions:                  Density Instructions.
23092
                                                              (line   6)
23093
* dependency tracking:                   MD.                  (line   6)
23094
* deprecated directives:                 Deprecated.          (line   6)
23095
* desc directive:                        Desc.                (line   6)
23096
* descriptor, of a.out symbol:           Symbol Desc.         (line   6)
23097
* dfloat directive, VAX:                 VAX-directives.      (line  10)
23098
* difference tables altered:             Word.                (line  12)
23099
* difference tables, warning:            K.                   (line   6)
23100
* differences, mmixal:                   MMIX-mmixal.         (line   6)
23101
* dim directive:                         Dim.                 (line   6)
23102
* directives and instructions:           Statements.          (line  20)
23103
* directives for PowerPC:                PowerPC-Pseudo.      (line   6)
23104
* directives for SCORE:                  SCORE-Pseudo.        (line   6)
23105
* directives, Blackfin:                  Blackfin Directives. (line   6)
23106
* directives, M32R:                      M32R-Directives.     (line   6)
23107
* directives, M680x0:                    M68K-Directives.     (line   6)
23108
* directives, machine independent:       Pseudo Ops.          (line   6)
23109
* directives, Xtensa:                    Xtensa Directives.   (line   6)
23110
* directives, Z8000:                     Z8000 Directives.    (line   6)
23111
* Disable floating-point instructions:   MIPS floating-point. (line   6)
23112
* Disable single-precision floating-point operations: MIPS floating-point.
23113
                                                              (line  12)
23114
* displacement sizing character, VAX:    VAX-operands.        (line  12)
23115
* dollar local symbols:                  Symbol Names.        (line 110)
23116
* dot (symbol):                          Dot.                 (line   6)
23117
* double directive:                      Double.              (line   6)
23118
* double directive, i386:                i386-Float.          (line  14)
23119
* double directive, M680x0:              M68K-Float.          (line  14)
23120
* double directive, M68HC11:             M68HC11-Float.       (line  14)
23121
* double directive, RX:                  RX-Float.            (line  11)
23122
* double directive, TIC54X:              TIC54X-Directives.   (line  64)
23123
* double directive, VAX:                 VAX-float.           (line  15)
23124
* double directive, x86-64:              i386-Float.          (line  14)
23125
* double directive, XGATE:               XGATE-Float.         (line  13)
23126
* doublequote (\"):                      Strings.             (line  43)
23127
* drlist directive, TIC54X:              TIC54X-Directives.   (line  73)
23128
* drnolist directive, TIC54X:            TIC54X-Directives.   (line  73)
23129
* dual directive, i860:                  Directives-i860.     (line   6)
23130
* ECOFF sections:                        MIPS Object.         (line   6)
23131
* ecr register, V850:                    V850-Regs.           (line 113)
23132
* eight-byte integer:                    Quad.                (line   9)
23133
* eipc register, V850:                   V850-Regs.           (line 101)
23134
* eipsw register, V850:                  V850-Regs.           (line 104)
23135
* eject directive:                       Eject.               (line   6)
23136
* ELF symbol type:                       Type.                (line  22)
23137
* else directive:                        Else.                (line   6)
23138
* elseif directive:                      Elseif.              (line   6)
23139
* empty expressions:                     Empty Exprs.         (line   6)
23140
* emsg directive, TIC54X:                TIC54X-Directives.   (line  77)
23141
* emulation:                             Overview.            (line 833)
23142
* encoding options, i386:                i386-Mnemonics.      (line  32)
23143
* encoding options, x86-64:              i386-Mnemonics.      (line  32)
23144
* end directive:                         End.                 (line   6)
23145
* enddual directive, i860:               Directives-i860.     (line  11)
23146
* endef directive:                       Endef.               (line   6)
23147
* endfunc directive:                     Endfunc.             (line   6)
23148
* endianness, MIPS:                      Overview.            (line 717)
23149
* endianness, PJ:                        Overview.            (line 620)
23150
* endif directive:                       Endif.               (line   6)
23151
* endloop directive, TIC54X:             TIC54X-Directives.   (line 143)
23152
* endm directive:                        Macro.               (line 138)
23153
* endm directive, TIC54X:                TIC54X-Directives.   (line 153)
23154
* endstruct directive, TIC54X:           TIC54X-Directives.   (line 216)
23155
* endunion directive, TIC54X:            TIC54X-Directives.   (line 250)
23156
* environment settings, TIC54X:          TIC54X-Env.          (line   6)
23157
* EOF, newline must precede:             Statements.          (line  14)
23158
* ep register, V850:                     V850-Regs.           (line  95)
23159
* Epiphany line comment character:       Epiphany-Chars.      (line   6)
23160
* Epiphany line separator:               Epiphany-Chars.      (line  14)
23161
* Epiphany options:                      Epiphany Options.    (line   6)
23162
* Epiphany support:                      Epiphany-Dependent.  (line   6)
23163
* equ directive:                         Equ.                 (line   6)
23164
* equ directive, TIC54X:                 TIC54X-Directives.   (line 191)
23165
* equiv directive:                       Equiv.               (line   6)
23166
* eqv directive:                         Eqv.                 (line   6)
23167
* err directive:                         Err.                 (line   6)
23168
* error directive:                       Error.               (line   6)
23169
* error messages:                        Errors.              (line   6)
23170
* error on valid input:                  Bug Criteria.        (line  12)
23171
* errors, caused by warnings:            W.                   (line  16)
23172
* errors, continuing after:              Z.                   (line   6)
23173
* ESA/390 floating point (IEEE):         ESA/390 Floating Point.
23174
                                                              (line   6)
23175
* ESA/390 support:                       ESA/390-Dependent.   (line   6)
23176
* ESA/390 Syntax:                        ESA/390 Options.     (line   8)
23177
* ESA/390-only directives:               ESA/390 Directives.  (line  12)
23178
* escape codes, character:               Strings.             (line  15)
23179
* eval directive, TIC54X:                TIC54X-Directives.   (line  24)
23180
* even:                                  Z8000 Directives.    (line  58)
23181
* even directive, M680x0:                M68K-Directives.     (line  15)
23182
* even directive, TIC54X:                TIC54X-Directives.   (line   6)
23183
* exitm directive:                       Macro.               (line 141)
23184
* expr (internal section):               As Sections.         (line  17)
23185
* expression arguments:                  Arguments.           (line   6)
23186
* expressions:                           Expressions.         (line   6)
23187
* expressions, comparison:               Infix Ops.           (line  55)
23188
* expressions, empty:                    Empty Exprs.         (line   6)
23189
* expressions, integer:                  Integer Exprs.       (line   6)
23190
* extAuxRegister directive, ARC:         ARC Directives.      (line  18)
23191
* extCondCode directive, ARC:            ARC Directives.      (line  41)
23192
* extCoreRegister directive, ARC:        ARC Directives.      (line  53)
23193
* extend directive M680x0:               M68K-Float.          (line  17)
23194
* extend directive M68HC11:              M68HC11-Float.       (line  17)
23195
* extend directive XGATE:                XGATE-Float.         (line  16)
23196
* extended directive, i960:              Directives-i960.     (line  13)
23197
* extern directive:                      Extern.              (line   6)
23198
* extInstruction directive, ARC:         ARC Directives.      (line  78)
23199
* fail directive:                        Fail.                (line   6)
23200
* far_mode directive, TIC54X:            TIC54X-Directives.   (line  82)
23201
* faster processing (-f):                f.                   (line   6)
23202
* fatal signal:                          Bug Criteria.        (line   9)
23203
* fclist directive, TIC54X:              TIC54X-Directives.   (line  87)
23204
* fcnolist directive, TIC54X:            TIC54X-Directives.   (line  87)
23205
* fepc register, V850:                   V850-Regs.           (line 107)
23206
* fepsw register, V850:                  V850-Regs.           (line 110)
23207
* ffloat directive, VAX:                 VAX-directives.      (line  14)
23208
* field directive, TIC54X:               TIC54X-Directives.   (line  91)
23209
* file directive:                        File.                (line   6)
23210
* file directive, MSP 430:               MSP430 Directives.   (line   6)
23211
* file name, logical:                    File.                (line  13)
23212
* files, including:                      Include.             (line   6)
23213
* files, input:                          Input Files.         (line   6)
23214
* fill directive:                        Fill.                (line   6)
23215
* filling memory <1>:                    Space.               (line   6)
23216
* filling memory:                        Skip.                (line   6)
23217
* FLIX syntax:                           Xtensa Syntax.       (line   6)
23218
* float directive:                       Float.               (line   6)
23219
* float directive, i386:                 i386-Float.          (line  14)
23220
* float directive, M680x0:               M68K-Float.          (line  11)
23221
* float directive, M68HC11:              M68HC11-Float.       (line  11)
23222
* float directive, RX:                   RX-Float.            (line   8)
23223
* float directive, TIC54X:               TIC54X-Directives.   (line  64)
23224
* float directive, VAX:                  VAX-float.           (line  15)
23225
* float directive, x86-64:               i386-Float.          (line  14)
23226
* float directive, XGATE:                XGATE-Float.         (line  10)
23227
* floating point numbers:                Flonums.             (line   6)
23228
* floating point numbers (double):       Double.              (line   6)
23229
* floating point numbers (single) <1>:   Single.              (line   6)
23230
* floating point numbers (single):       Float.               (line   6)
23231
* floating point, AArch64 (IEEE):        AArch64 Floating Point.
23232
                                                              (line   6)
23233
* floating point, Alpha (IEEE):          Alpha Floating Point.
23234
                                                              (line   6)
23235
* floating point, ARC (IEEE):            ARC Floating Point.  (line   6)
23236
* floating point, ARM (IEEE):            ARM Floating Point.  (line   6)
23237
* floating point, D10V:                  D10V-Float.          (line   6)
23238
* floating point, D30V:                  D30V-Float.          (line   6)
23239
* floating point, ESA/390 (IEEE):        ESA/390 Floating Point.
23240
                                                              (line   6)
23241
* floating point, H8/300 (IEEE):         H8/300 Floating Point.
23242
                                                              (line   6)
23243
* floating point, HPPA (IEEE):           HPPA Floating Point. (line   6)
23244
* floating point, i386:                  i386-Float.          (line   6)
23245
* floating point, i960 (IEEE):           Floating Point-i960. (line   6)
23246
* floating point, M680x0:                M68K-Float.          (line   6)
23247
* floating point, M68HC11:               M68HC11-Float.       (line   6)
23248
* floating point, MSP 430 (IEEE):        MSP430 Floating Point.
23249
                                                              (line   6)
23250
* floating point, RX:                    RX-Float.            (line   6)
23251
* floating point, s390:                  s390 Floating Point. (line   6)
23252
* floating point, SH (IEEE):             SH Floating Point.   (line   6)
23253
* floating point, SPARC (IEEE):          Sparc-Float.         (line   6)
23254
* floating point, V850 (IEEE):           V850 Floating Point. (line   6)
23255
* floating point, VAX:                   VAX-float.           (line   6)
23256
* floating point, x86-64:                i386-Float.          (line   6)
23257
* floating point, XGATE:                 XGATE-Float.         (line   6)
23258
* floating point, Z80:                   Z80 Floating Point.  (line   6)
23259
* flonums:                               Flonums.             (line   6)
23260
* format of error messages:              Errors.              (line  24)
23261
* format of warning messages:            Errors.              (line  12)
23262
* formfeed (\f):                         Strings.             (line  18)
23263
* func directive:                        Func.                (line   6)
23264
* functions, in expressions:             Operators.           (line   6)
23265
* gbr960, i960 postprocessor:            Options-i960.        (line  40)
23266
* gfloat directive, VAX:                 VAX-directives.      (line  18)
23267
* global:                                Z8000 Directives.    (line  21)
23268
* global directive:                      Global.              (line   6)
23269
* global directive, TIC54X:              TIC54X-Directives.   (line 103)
23270
* gp register, MIPS:                     MIPS Object.         (line  11)
23271
* gp register, V850:                     V850-Regs.           (line  17)
23272
* grouping data:                         Sub-Sections.        (line   6)
23273
* H8/300 addressing modes:               H8/300-Addressing.   (line   6)
23274
* H8/300 floating point (IEEE):          H8/300 Floating Point.
23275
                                                              (line   6)
23276
* H8/300 line comment character:         H8/300-Chars.        (line   6)
23277
* H8/300 line separator:                 H8/300-Chars.        (line   8)
23278
* H8/300 machine directives (none):      H8/300 Directives.   (line   6)
23279
* H8/300 opcode summary:                 H8/300 Opcodes.      (line   6)
23280
* H8/300 options:                        H8/300 Options.      (line   6)
23281
* H8/300 registers:                      H8/300-Regs.         (line   6)
23282
* H8/300 size suffixes:                  H8/300 Opcodes.      (line 163)
23283
* H8/300 support:                        H8/300-Dependent.    (line   6)
23284
* H8/300H, assembling for:               H8/300 Directives.   (line   8)
23285
* half directive, ARC:                   ARC Directives.      (line 156)
23286
* half directive, SPARC:                 Sparc-Directives.    (line  17)
23287
* half directive, TIC54X:                TIC54X-Directives.   (line 111)
23288
* hex character code (\XD...):           Strings.             (line  36)
23289
* hexadecimal integers:                  Integers.            (line  15)
23290
* hexadecimal prefix, Z80:               Z80-Chars.           (line  15)
23291
* hfloat directive, VAX:                 VAX-directives.      (line  22)
23292
* hi pseudo-op, V850:                    V850 Opcodes.        (line  33)
23293
* hi0 pseudo-op, V850:                   V850 Opcodes.        (line  10)
23294
* hidden directive:                      Hidden.              (line   6)
23295
* high directive, M32R:                  M32R-Directives.     (line  18)
23296
* hilo pseudo-op, V850:                  V850 Opcodes.        (line  55)
23297
* HPPA directives not supported:         HPPA Directives.     (line  11)
23298
* HPPA floating point (IEEE):            HPPA Floating Point. (line   6)
23299
* HPPA Syntax:                           HPPA Options.        (line   8)
23300
* HPPA-only directives:                  HPPA Directives.     (line  24)
23301
* hword directive:                       hword.               (line   6)
23302
* i370 support:                          ESA/390-Dependent.   (line   6)
23303
* i386 16-bit code:                      i386-16bit.          (line   6)
23304
* i386 arch directive:                   i386-Arch.           (line   6)
23305
* i386 att_syntax pseudo op:             i386-Variations.     (line   6)
23306
* i386 conversion instructions:          i386-Mnemonics.      (line  37)
23307
* i386 floating point:                   i386-Float.          (line   6)
23308
* i386 immediate operands:               i386-Variations.     (line  15)
23309
* i386 instruction naming:               i386-Mnemonics.      (line   6)
23310
* i386 instruction prefixes:             i386-Prefixes.       (line   6)
23311
* i386 intel_syntax pseudo op:           i386-Variations.     (line   6)
23312
* i386 jump optimization:                i386-Jumps.          (line   6)
23313
* i386 jump, call, return:               i386-Variations.     (line  41)
23314
* i386 jump/call operands:               i386-Variations.     (line  15)
23315
* i386 line comment character:           i386-Chars.          (line   6)
23316
* i386 line separator:                   i386-Chars.          (line  18)
23317
* i386 memory references:                i386-Memory.         (line   6)
23318
* i386 mnemonic compatibility:           i386-Mnemonics.      (line  62)
23319
* i386 mul, imul instructions:           i386-Notes.          (line   6)
23320
* i386 options:                          i386-Options.        (line   6)
23321
* i386 register operands:                i386-Variations.     (line  15)
23322
* i386 registers:                        i386-Regs.           (line   6)
23323
* i386 sections:                         i386-Variations.     (line  47)
23324
* i386 size suffixes:                    i386-Variations.     (line  29)
23325
* i386 source, destination operands:     i386-Variations.     (line  22)
23326
* i386 support:                          i386-Dependent.      (line   6)
23327
* i386 syntax compatibility:             i386-Variations.     (line   6)
23328
* i80386 support:                        i386-Dependent.      (line   6)
23329
* i860 line comment character:           i860-Chars.          (line   6)
23330
* i860 line separator:                   i860-Chars.          (line  14)
23331
* i860 machine directives:               Directives-i860.     (line   6)
23332
* i860 opcodes:                          Opcodes for i860.    (line   6)
23333
* i860 support:                          i860-Dependent.      (line   6)
23334
* i960 architecture options:             Options-i960.        (line   6)
23335
* i960 branch recording:                 Options-i960.        (line  22)
23336
* i960 callj pseudo-opcode:              callj-i960.          (line   6)
23337
* i960 compare and jump expansions:      Compare-and-branch-i960.
23338
                                                              (line  13)
23339
* i960 compare/branch instructions:      Compare-and-branch-i960.
23340
                                                              (line   6)
23341
* i960 floating point (IEEE):            Floating Point-i960. (line   6)
23342
* i960 line comment character:           i960-Chars.          (line   6)
23343
* i960 line separator:                   i960-Chars.          (line  14)
23344
* i960 machine directives:               Directives-i960.     (line   6)
23345
* i960 opcodes:                          Opcodes for i960.    (line   6)
23346
* i960 options:                          Options-i960.        (line   6)
23347
* i960 support:                          i960-Dependent.      (line   6)
23348
* IA-64 line comment character:          IA-64-Chars.         (line   6)
23349
* IA-64 line separator:                  IA-64-Chars.         (line   8)
23350
* IA-64 options:                         IA-64 Options.       (line   6)
23351
* IA-64 Processor-status-Register bit names: IA-64-Bits.      (line   6)
23352
* IA-64 registers:                       IA-64-Regs.          (line   6)
23353
* IA-64 relocations:                     IA-64-Relocs.        (line   6)
23354
* IA-64 support:                         IA-64-Dependent.     (line   6)
23355
* IA-64 Syntax:                          IA-64 Options.       (line  87)
23356
* ident directive:                       Ident.               (line   6)
23357
* identifiers, ARM:                      ARM-Chars.           (line  19)
23358
* identifiers, MSP 430:                  MSP430-Chars.        (line  17)
23359
* if directive:                          If.                  (line   6)
23360
* ifb directive:                         If.                  (line  21)
23361
* ifc directive:                         If.                  (line  25)
23362
* ifdef directive:                       If.                  (line  16)
23363
* ifeq directive:                        If.                  (line  33)
23364
* ifeqs directive:                       If.                  (line  36)
23365
* ifge directive:                        If.                  (line  40)
23366
* ifgt directive:                        If.                  (line  44)
23367
* ifle directive:                        If.                  (line  48)
23368
* iflt directive:                        If.                  (line  52)
23369
* ifnb directive:                        If.                  (line  56)
23370
* ifnc directive:                        If.                  (line  61)
23371
* ifndef directive:                      If.                  (line  65)
23372
* ifne directive:                        If.                  (line  72)
23373
* ifnes directive:                       If.                  (line  76)
23374
* ifnotdef directive:                    If.                  (line  65)
23375
* immediate character, AArch64:          AArch64-Chars.       (line  13)
23376
* immediate character, ARM:              ARM-Chars.           (line  17)
23377
* immediate character, M680x0:           M68K-Chars.          (line  13)
23378
* immediate character, VAX:              VAX-operands.        (line   6)
23379
* immediate fields, relaxation:          Xtensa Immediate Relaxation.
23380
                                                              (line   6)
23381
* immediate operands, i386:              i386-Variations.     (line  15)
23382
* immediate operands, x86-64:            i386-Variations.     (line  15)
23383
* imul instruction, i386:                i386-Notes.          (line   6)
23384
* imul instruction, x86-64:              i386-Notes.          (line   6)
23385
* incbin directive:                      Incbin.              (line   6)
23386
* include directive:                     Include.             (line   6)
23387
* include directive search path:         I.                   (line   6)
23388
* indirect character, VAX:               VAX-operands.        (line   9)
23389
* infix operators:                       Infix Ops.           (line   6)
23390
* inhibiting interrupts, i386:           i386-Prefixes.       (line  36)
23391
* input:                                 Input Files.         (line   6)
23392
* input file linenumbers:                Input Files.         (line  35)
23393
* instruction aliases, s390:             s390 Aliases.        (line   6)
23394
* instruction bundle:                    Bundle directives.   (line   6)
23395
* instruction expansion, CRIS:           CRIS-Expand.         (line   6)
23396
* instruction expansion, MMIX:           MMIX-Expand.         (line   6)
23397
* instruction formats, s390:             s390 Formats.        (line   6)
23398
* instruction marker, s390:              s390 Instruction Marker.
23399
                                                              (line   6)
23400
* instruction mnemonics, s390:           s390 Mnemonics.      (line   6)
23401
* instruction naming, i386:              i386-Mnemonics.      (line   6)
23402
* instruction naming, x86-64:            i386-Mnemonics.      (line   6)
23403
* instruction operand modifier, s390:    s390 Operand Modifier.
23404
                                                              (line   6)
23405
* instruction operands, s390:            s390 Operands.       (line   6)
23406
* instruction prefixes, i386:            i386-Prefixes.       (line   6)
23407
* instruction set, M680x0:               M68K-opcodes.        (line   6)
23408
* instruction set, M68HC11:              M68HC11-opcodes.     (line   6)
23409
* instruction set, XGATE:                XGATE-opcodes.       (line   6)
23410
* instruction summary, AVR:              AVR Opcodes.         (line   6)
23411
* instruction summary, D10V:             D10V-Opcodes.        (line   6)
23412
* instruction summary, D30V:             D30V-Opcodes.        (line   6)
23413
* instruction summary, H8/300:           H8/300 Opcodes.      (line   6)
23414
* instruction summary, LM32:             LM32 Opcodes.        (line   6)
23415
* instruction summary, SH:               SH Opcodes.          (line   6)
23416
* instruction summary, SH64:             SH64 Opcodes.        (line   6)
23417
* instruction summary, Z8000:            Z8000 Opcodes.       (line   6)
23418
* instruction syntax, s390:              s390 Syntax.         (line   6)
23419
* instructions and directives:           Statements.          (line  20)
23420
* int directive:                         Int.                 (line   6)
23421
* int directive, H8/300:                 H8/300 Directives.   (line   6)
23422
* int directive, i386:                   i386-Float.          (line  21)
23423
* int directive, TIC54X:                 TIC54X-Directives.   (line 111)
23424
* int directive, x86-64:                 i386-Float.          (line  21)
23425
* integer expressions:                   Integer Exprs.       (line   6)
23426
* integer, 16-byte:                      Octa.                (line   6)
23427
* integer, 8-byte:                       Quad.                (line   9)
23428
* integers:                              Integers.            (line   6)
23429
* integers, 16-bit:                      hword.               (line   6)
23430
* integers, 32-bit:                      Int.                 (line   6)
23431
* integers, binary:                      Integers.            (line   6)
23432
* integers, decimal:                     Integers.            (line  12)
23433
* integers, hexadecimal:                 Integers.            (line  15)
23434
* integers, octal:                       Integers.            (line   9)
23435
* integers, one byte:                    Byte.                (line   6)
23436
* intel_syntax pseudo op, i386:          i386-Variations.     (line   6)
23437
* intel_syntax pseudo op, x86-64:        i386-Variations.     (line   6)
23438
* internal assembler sections:           As Sections.         (line   6)
23439
* internal directive:                    Internal.            (line   6)
23440
* invalid input:                         Bug Criteria.        (line  14)
23441
* invocation summary:                    Overview.            (line   6)
23442
* IP2K architecture options:             IP2K-Opts.           (line   9)
23443
* IP2K line comment character:           IP2K-Chars.          (line   6)
23444
* IP2K line separator:                   IP2K-Chars.          (line  14)
23445
* IP2K options:                          IP2K-Opts.           (line   6)
23446
* IP2K support:                          IP2K-Dependent.      (line   6)
23447
* irp directive:                         Irp.                 (line   6)
23448
* irpc directive:                        Irpc.                (line   6)
23449
* ISA options, SH64:                     SH64 Options.        (line   6)
23450
* joining text and data sections:        R.                   (line   6)
23451
* jump instructions, i386:               i386-Mnemonics.      (line  56)
23452
* jump instructions, x86-64:             i386-Mnemonics.      (line  56)
23453
* jump optimization, i386:               i386-Jumps.          (line   6)
23454
* jump optimization, x86-64:             i386-Jumps.          (line   6)
23455
* jump/call operands, i386:              i386-Variations.     (line  15)
23456
* jump/call operands, x86-64:            i386-Variations.     (line  15)
23457
* L16SI instructions, relaxation:        Xtensa Immediate Relaxation.
23458
                                                              (line  23)
23459
* L16UI instructions, relaxation:        Xtensa Immediate Relaxation.
23460
                                                              (line  23)
23461
* L32I instructions, relaxation:         Xtensa Immediate Relaxation.
23462
                                                              (line  23)
23463
* L8UI instructions, relaxation:         Xtensa Immediate Relaxation.
23464
                                                              (line  23)
23465
* label (:):                             Statements.          (line  31)
23466
* label directive, TIC54X:               TIC54X-Directives.   (line 123)
23467
* labels:                                Labels.              (line   6)
23468
* lcomm directive:                       Lcomm.               (line   6)
23469
* lcomm directive, COFF:                 i386-Directives.     (line   6)
23470
* ld:                                    Object.              (line  15)
23471
* ldouble directive M680x0:              M68K-Float.          (line  17)
23472
* ldouble directive M68HC11:             M68HC11-Float.       (line  17)
23473
* ldouble directive XGATE:               XGATE-Float.         (line  16)
23474
* ldouble directive, TIC54X:             TIC54X-Directives.   (line  64)
23475
* LDR reg,= pseudo op, AArch64:    AArch64 Opcodes.     (line   9)
23476
* LDR reg,=
23477
* leafproc directive, i960:              Directives-i960.     (line  18)
23478
* length directive, TIC54X:              TIC54X-Directives.   (line 127)
23479
* length of symbols:                     Symbol Intro.        (line  14)
23480
* lflags directive (ignored):            Lflags.              (line   6)
23481
* line comment character:                Comments.            (line  19)
23482
* line comment character, AArch64:       AArch64-Chars.       (line   6)
23483
* line comment character, Alpha:         Alpha-Chars.         (line   6)
23484
* line comment character, ARC:           ARC-Chars.           (line   6)
23485
* line comment character, ARM:           ARM-Chars.           (line   6)
23486
* line comment character, AVR:           AVR-Chars.           (line   6)
23487
* line comment character, CR16:          CR16-Chars.          (line   6)
23488
* line comment character, D10V:          D10V-Chars.          (line   6)
23489
* line comment character, D30V:          D30V-Chars.          (line   6)
23490
* line comment character, Epiphany:      Epiphany-Chars.      (line   6)
23491
* line comment character, H8/300:        H8/300-Chars.        (line   6)
23492
* line comment character, i386:          i386-Chars.          (line   6)
23493
* line comment character, i860:          i860-Chars.          (line   6)
23494
* line comment character, i960:          i960-Chars.          (line   6)
23495
* line comment character, IA-64:         IA-64-Chars.         (line   6)
23496
* line comment character, IP2K:          IP2K-Chars.          (line   6)
23497
* line comment character, LM32:          LM32-Chars.          (line   6)
23498
* line comment character, M32C:          M32C-Chars.          (line   6)
23499
* line comment character, M680x0:        M68K-Chars.          (line   6)
23500
* line comment character, M68HC11:       M68HC11-Syntax.      (line  17)
23501
* line comment character, MicroBlaze:    MicroBlaze-Chars.    (line   6)
23502
* line comment character, MIPS:          MIPS-Chars.          (line   6)
23503
* line comment character, MSP 430:       MSP430-Chars.        (line   6)
23504
* line comment character, NS32K:         NS32K-Chars.         (line   6)
23505
* line comment character, PJ:            PJ-Chars.            (line   6)
23506
* line comment character, PowerPC:       PowerPC-Chars.       (line   6)
23507
* line comment character, RL78:          RL78-Chars.          (line   6)
23508
* line comment character, RX:            RX-Chars.            (line   6)
23509
* line comment character, s390:          s390 Characters.     (line   6)
23510
* line comment character, SCORE:         SCORE-Chars.         (line   6)
23511
* line comment character, SH:            SH-Chars.            (line   6)
23512
* line comment character, SH64:          SH64-Chars.          (line   6)
23513
* line comment character, Sparc:         Sparc-Chars.         (line   6)
23514
* line comment character, TIC54X:        TIC54X-Chars.        (line   6)
23515
* line comment character, TIC6X:         TIC6X Syntax.        (line   6)
23516
* line comment character, V850:          V850-Chars.          (line   6)
23517
* line comment character, VAX:           VAX-Chars.           (line   6)
23518
* line comment character, XGATE:         XGATE-Syntax.        (line  16)
23519
* line comment character, XStormy16:     XStormy16-Chars.     (line   6)
23520
* line comment character, Z80:           Z80-Chars.           (line   6)
23521
* line comment character, Z8000:         Z8000-Chars.         (line   6)
23522
* line comment characters, CRIS:         CRIS-Chars.          (line   6)
23523
* line comment characters, MMIX:         MMIX-Chars.          (line   6)
23524
* line directive:                        Line.                (line   6)
23525
* line directive, MSP 430:               MSP430 Directives.   (line  14)
23526
* line numbers, in input files:          Input Files.         (line  35)
23527
* line numbers, in warnings/errors:      Errors.              (line  16)
23528
* line separator character:              Statements.          (line   6)
23529
* line separator, AArch64:               AArch64-Chars.       (line  10)
23530
* line separator, Alpha:                 Alpha-Chars.         (line  11)
23531
* line separator, ARC:                   ARC-Chars.           (line  12)
23532
* line separator, ARM:                   ARM-Chars.           (line  14)
23533
* line separator, AVR:                   AVR-Chars.           (line  14)
23534
* line separator, CR16:                  CR16-Chars.          (line  13)
23535
* line separator, Epiphany:              Epiphany-Chars.      (line  14)
23536
* line separator, H8/300:                H8/300-Chars.        (line   8)
23537
* line separator, i386:                  i386-Chars.          (line  18)
23538
* line separator, i860:                  i860-Chars.          (line  14)
23539
* line separator, i960:                  i960-Chars.          (line  14)
23540
* line separator, IA-64:                 IA-64-Chars.         (line   8)
23541
* line separator, IP2K:                  IP2K-Chars.          (line  14)
23542
* line separator, LM32:                  LM32-Chars.          (line  12)
23543
* line separator, M32C:                  M32C-Chars.          (line  14)
23544
* line separator, M680x0:                M68K-Chars.          (line  20)
23545
* line separator, M68HC11:               M68HC11-Syntax.      (line  27)
23546
* line separator, MicroBlaze:            MicroBlaze-Chars.    (line  14)
23547
* line separator, MIPS:                  MIPS-Chars.          (line  14)
23548
* line separator, MSP 430:               MSP430-Chars.        (line  14)
23549
* line separator, NS32K:                 NS32K-Chars.         (line  18)
23550
* line separator, PJ:                    PJ-Chars.            (line  14)
23551
* line separator, PowerPC:               PowerPC-Chars.       (line  18)
23552
* line separator, RL78:                  RL78-Chars.          (line  14)
23553
* line separator, RX:                    RX-Chars.            (line  14)
23554
* line separator, s390:                  s390 Characters.     (line  13)
23555
* line separator, SCORE:                 SCORE-Chars.         (line  14)
23556
* line separator, SH:                    SH-Chars.            (line   8)
23557
* line separator, SH64:                  SH64-Chars.          (line  13)
23558
* line separator, Sparc:                 Sparc-Chars.         (line  14)
23559
* line separator, TIC54X:                TIC54X-Chars.        (line  17)
23560
* line separator, TIC6X:                 TIC6X Syntax.        (line  13)
23561
* line separator, V850:                  V850-Chars.          (line  13)
23562
* line separator, VAX:                   VAX-Chars.           (line  14)
23563
* line separator, XGATE:                 XGATE-Syntax.        (line  26)
23564
* line separator, XStormy16:             XStormy16-Chars.     (line  14)
23565
* line separator, Z80:                   Z80-Chars.           (line  13)
23566
* line separator, Z8000:                 Z8000-Chars.         (line  13)
23567
* lines starting with #:                 Comments.            (line  33)
23568
* linker:                                Object.              (line  15)
23569
* linker, and assembler:                 Secs Background.     (line  10)
23570
* linkonce directive:                    Linkonce.            (line   6)
23571
* list directive:                        List.                (line   6)
23572
* list directive, TIC54X:                TIC54X-Directives.   (line 131)
23573
* listing control, turning off:          Nolist.              (line   6)
23574
* listing control, turning on:           List.                (line   6)
23575
* listing control: new page:             Eject.               (line   6)
23576
* listing control: paper size:           Psize.               (line   6)
23577
* listing control: subtitle:             Sbttl.               (line   6)
23578
* listing control: title line:           Title.               (line   6)
23579
* listings, enabling:                    a.                   (line   6)
23580
* literal directive:                     Literal Directive.   (line   6)
23581
* literal pool entries, s390:            s390 Literal Pool Entries.
23582
                                                              (line   6)
23583
* literal_position directive:            Literal Position Directive.
23584
                                                              (line   6)
23585
* literal_prefix directive:              Literal Prefix Directive.
23586
                                                              (line   6)
23587
* little endian output, MIPS:            Overview.            (line 720)
23588
* little endian output, PJ:              Overview.            (line 623)
23589
* little-endian output, MIPS:            MIPS Opts.           (line  13)
23590
* little-endian output, TIC6X:           TIC6X Options.       (line  46)
23591
* LM32 line comment character:           LM32-Chars.          (line   6)
23592
* LM32 line separator:                   LM32-Chars.          (line  12)
23593
* LM32 modifiers:                        LM32-Modifiers.      (line   6)
23594
* LM32 opcode summary:                   LM32 Opcodes.        (line   6)
23595
* LM32 options (none):                   LM32 Options.        (line   6)
23596
* LM32 register names:                   LM32-Regs.           (line   6)
23597
* LM32 support:                          LM32-Dependent.      (line   6)
23598
* ln directive:                          Ln.                  (line   6)
23599
* lo pseudo-op, V850:                    V850 Opcodes.        (line  22)
23600
* loc directive:                         Loc.                 (line   6)
23601
* loc_mark_labels directive:             Loc_mark_labels.     (line   6)
23602
* local common symbols:                  Lcomm.               (line   6)
23603
* local directive:                       Local.               (line   6)
23604
* local labels:                          Symbol Names.        (line  40)
23605
* local symbol names:                    Symbol Names.        (line  27)
23606
* local symbols, retaining in output:    L.                   (line   6)
23607
* location counter:                      Dot.                 (line   6)
23608
* location counter, advancing:           Org.                 (line   6)
23609
* location counter, Z80:                 Z80-Chars.           (line  15)
23610
* logical file name:                     File.                (line  13)
23611
* logical line number:                   Line.                (line   6)
23612
* logical line numbers:                  Comments.            (line  33)
23613
* long directive:                        Long.                (line   6)
23614
* long directive, ARC:                   ARC Directives.      (line 159)
23615
* long directive, i386:                  i386-Float.          (line  21)
23616
* long directive, TIC54X:                TIC54X-Directives.   (line 135)
23617
* long directive, x86-64:                i386-Float.          (line  21)
23618
* longcall pseudo-op, V850:              V850 Opcodes.        (line 123)
23619
* longcalls directive:                   Longcalls Directive. (line   6)
23620
* longjump pseudo-op, V850:              V850 Opcodes.        (line 129)
23621
* loop directive, TIC54X:                TIC54X-Directives.   (line 143)
23622
* LOOP instructions, alignment:          Xtensa Automatic Alignment.
23623
                                                              (line   6)
23624
* low directive, M32R:                   M32R-Directives.     (line   9)
23625
* lp register, V850:                     V850-Regs.           (line  98)
23626
* lval:                                  Z8000 Directives.    (line  27)
23627
* LWP, i386:                             i386-LWP.            (line   6)
23628
* LWP, x86-64:                           i386-LWP.            (line   6)
23629
* M16C architecture option:              M32C-Opts.           (line  12)
23630
* M32C architecture option:              M32C-Opts.           (line   9)
23631
* M32C line comment character:           M32C-Chars.          (line   6)
23632
* M32C line separator:                   M32C-Chars.          (line  14)
23633
* M32C modifiers:                        M32C-Modifiers.      (line   6)
23634
* M32C options:                          M32C-Opts.           (line   6)
23635
* M32C support:                          M32C-Dependent.      (line   6)
23636
* M32R architecture options:             M32R-Opts.           (line   9)
23637
* M32R directives:                       M32R-Directives.     (line   6)
23638
* M32R options:                          M32R-Opts.           (line   6)
23639
* M32R support:                          M32R-Dependent.      (line   6)
23640
* M32R warnings:                         M32R-Warnings.       (line   6)
23641
* M680x0 addressing modes:               M68K-Syntax.         (line  21)
23642
* M680x0 architecture options:           M68K-Opts.           (line  98)
23643
* M680x0 branch improvement:             M68K-Branch.         (line   6)
23644
* M680x0 directives:                     M68K-Directives.     (line   6)
23645
* M680x0 floating point:                 M68K-Float.          (line   6)
23646
* M680x0 immediate character:            M68K-Chars.          (line  13)
23647
* M680x0 line comment character:         M68K-Chars.          (line   6)
23648
* M680x0 line separator:                 M68K-Chars.          (line  20)
23649
* M680x0 opcodes:                        M68K-opcodes.        (line   6)
23650
* M680x0 options:                        M68K-Opts.           (line   6)
23651
* M680x0 pseudo-opcodes:                 M68K-Branch.         (line   6)
23652
* M680x0 size modifiers:                 M68K-Syntax.         (line   8)
23653
* M680x0 support:                        M68K-Dependent.      (line   6)
23654
* M680x0 syntax:                         M68K-Syntax.         (line   8)
23655
* M68HC11 addressing modes:              M68HC11-Syntax.      (line  30)
23656
* M68HC11 and M68HC12 support:           M68HC11-Dependent.   (line   6)
23657
* M68HC11 assembler directive .far:      M68HC11-Directives.  (line  20)
23658
* M68HC11 assembler directive .interrupt: M68HC11-Directives. (line  26)
23659
* M68HC11 assembler directive .mode:     M68HC11-Directives.  (line  16)
23660
* M68HC11 assembler directive .relax:    M68HC11-Directives.  (line  10)
23661
* M68HC11 assembler directive .xrefb:    M68HC11-Directives.  (line  31)
23662
* M68HC11 assembler directives:          M68HC11-Directives.  (line   6)
23663
* M68HC11 branch improvement:            M68HC11-Branch.      (line   6)
23664
* M68HC11 floating point:                M68HC11-Float.       (line   6)
23665
* M68HC11 line comment character:        M68HC11-Syntax.      (line  17)
23666
* M68HC11 line separator:                M68HC11-Syntax.      (line  27)
23667
* M68HC11 modifiers:                     M68HC11-Modifiers.   (line   6)
23668
* M68HC11 opcodes:                       M68HC11-opcodes.     (line   6)
23669
* M68HC11 options:                       M68HC11-Opts.        (line   6)
23670
* M68HC11 pseudo-opcodes:                M68HC11-Branch.      (line   6)
23671
* M68HC11 syntax:                        M68HC11-Syntax.      (line   6)
23672
* M68HC12 assembler directives:          M68HC11-Directives.  (line   6)
23673
* machine dependencies:                  Machine Dependencies.
23674
                                                              (line   6)
23675
* machine directives, AArch64:           AArch64 Directives.  (line   6)
23676
* machine directives, ARC:               ARC Directives.      (line   6)
23677
* machine directives, ARM:               ARM Directives.      (line   6)
23678
* machine directives, H8/300 (none):     H8/300 Directives.   (line   6)
23679
* machine directives, i860:              Directives-i860.     (line   6)
23680
* machine directives, i960:              Directives-i960.     (line   6)
23681
* machine directives, MSP 430:           MSP430 Directives.   (line   6)
23682
* machine directives, SH:                SH Directives.       (line   6)
23683
* machine directives, SH64:              SH64 Directives.     (line   9)
23684
* machine directives, SPARC:             Sparc-Directives.    (line   6)
23685
* machine directives, TIC54X:            TIC54X-Directives.   (line   6)
23686
* machine directives, TIC6X:             TIC6X Directives.    (line   6)
23687
* machine directives, TILE-Gx:           TILE-Gx Directives.  (line   6)
23688
* machine directives, TILEPro:           TILEPro Directives.  (line   6)
23689
* machine directives, V850:              V850 Directives.     (line   6)
23690
* machine directives, VAX:               VAX-directives.      (line   6)
23691
* machine directives, x86:               i386-Directives.     (line   6)
23692
* machine directives, XStormy16:         XStormy16 Directives.
23693
                                                              (line   6)
23694
* machine independent directives:        Pseudo Ops.          (line   6)
23695
* machine instructions (not covered):    Manual.              (line  14)
23696
* machine-independent syntax:            Syntax.              (line   6)
23697
* macro directive:                       Macro.               (line  28)
23698
* macro directive, TIC54X:               TIC54X-Directives.   (line 153)
23699
* macros:                                Macro.               (line   6)
23700
* macros, count executed:                Macro.               (line 143)
23701
* Macros, MSP 430:                       MSP430-Macros.       (line   6)
23702
* macros, TIC54X:                        TIC54X-Macros.       (line   6)
23703
* make rules:                            MD.                  (line   6)
23704
* manual, structure and purpose:         Manual.              (line   6)
23705
* math builtins, TIC54X:                 TIC54X-Builtins.     (line   6)
23706
* Maximum number of continuation lines:  listing.             (line  34)
23707
* memory references, i386:               i386-Memory.         (line   6)
23708
* memory references, x86-64:             i386-Memory.         (line   6)
23709
* memory-mapped registers, TIC54X:       TIC54X-MMRegs.       (line   6)
23710
* merging text and data sections:        R.                   (line   6)
23711
* messages from assembler:               Errors.              (line   6)
23712
* MicroBlaze architectures:              MicroBlaze-Dependent.
23713
                                                              (line   6)
23714
* MicroBlaze directives:                 MicroBlaze Directives.
23715
                                                              (line   6)
23716
* MicroBlaze line comment character:     MicroBlaze-Chars.    (line   6)
23717
* MicroBlaze line separator:             MicroBlaze-Chars.    (line  14)
23718
* MicroBlaze support:                    MicroBlaze-Dependent.
23719
                                                              (line  13)
23720
* minus, permitted arguments:            Infix Ops.           (line  49)
23721
* MIPS architecture options:             MIPS Opts.           (line  29)
23722
* MIPS big-endian output:                MIPS Opts.           (line  13)
23723
* MIPS CPU override:                     MIPS ISA.            (line  18)
23724
* MIPS debugging directives:             MIPS Stabs.          (line   6)
23725
* MIPS DSP Release 1 instruction generation override: MIPS ASE instruction generation overrides.
23726
                                                              (line  21)
23727
* MIPS DSP Release 2 instruction generation override: MIPS ASE instruction generation overrides.
23728
                                                              (line  26)
23729
* MIPS ECOFF sections:                   MIPS Object.         (line   6)
23730
* MIPS endianness:                       Overview.            (line 717)
23731
* MIPS ISA:                              Overview.            (line 723)
23732
* MIPS ISA override:                     MIPS ISA.            (line   6)
23733
* MIPS line comment character:           MIPS-Chars.          (line   6)
23734
* MIPS line separator:                   MIPS-Chars.          (line  14)
23735
* MIPS little-endian output:             MIPS Opts.           (line  13)
23736
* MIPS MCU instruction generation override: MIPS ASE instruction generation overrides.
23737
                                                              (line  37)
23738
* MIPS MDMX instruction generation override: MIPS ASE instruction generation overrides.
23739
                                                              (line  16)
23740
* MIPS MIPS-3D instruction generation override: MIPS ASE instruction generation overrides.
23741
                                                              (line   6)
23742
* MIPS MT instruction generation override: MIPS ASE instruction generation overrides.
23743
                                                              (line  32)
23744
* MIPS option stack:                     MIPS option stack.   (line   6)
23745
* MIPS processor:                        MIPS-Dependent.      (line   6)
23746
* MIT:                                   M68K-Syntax.         (line   6)
23747
* mlib directive, TIC54X:                TIC54X-Directives.   (line 159)
23748
* mlist directive, TIC54X:               TIC54X-Directives.   (line 164)
23749
* MMIX assembler directive BSPEC:        MMIX-Pseudos.        (line 131)
23750
* MMIX assembler directive BYTE:         MMIX-Pseudos.        (line  97)
23751
* MMIX assembler directive ESPEC:        MMIX-Pseudos.        (line 131)
23752
* MMIX assembler directive GREG:         MMIX-Pseudos.        (line  50)
23753
* MMIX assembler directive IS:           MMIX-Pseudos.        (line  42)
23754
* MMIX assembler directive LOC:          MMIX-Pseudos.        (line   7)
23755
* MMIX assembler directive LOCAL:        MMIX-Pseudos.        (line  28)
23756
* MMIX assembler directive OCTA:         MMIX-Pseudos.        (line 108)
23757
* MMIX assembler directive PREFIX:       MMIX-Pseudos.        (line 120)
23758
* MMIX assembler directive TETRA:        MMIX-Pseudos.        (line 108)
23759
* MMIX assembler directive WYDE:         MMIX-Pseudos.        (line 108)
23760
* MMIX assembler directives:             MMIX-Pseudos.        (line   6)
23761
* MMIX line comment characters:          MMIX-Chars.          (line   6)
23762
* MMIX options:                          MMIX-Opts.           (line   6)
23763
* MMIX pseudo-op BSPEC:                  MMIX-Pseudos.        (line 131)
23764
* MMIX pseudo-op BYTE:                   MMIX-Pseudos.        (line  97)
23765
* MMIX pseudo-op ESPEC:                  MMIX-Pseudos.        (line 131)
23766
* MMIX pseudo-op GREG:                   MMIX-Pseudos.        (line  50)
23767
* MMIX pseudo-op IS:                     MMIX-Pseudos.        (line  42)
23768
* MMIX pseudo-op LOC:                    MMIX-Pseudos.        (line   7)
23769
* MMIX pseudo-op LOCAL:                  MMIX-Pseudos.        (line  28)
23770
* MMIX pseudo-op OCTA:                   MMIX-Pseudos.        (line 108)
23771
* MMIX pseudo-op PREFIX:                 MMIX-Pseudos.        (line 120)
23772
* MMIX pseudo-op TETRA:                  MMIX-Pseudos.        (line 108)
23773
* MMIX pseudo-op WYDE:                   MMIX-Pseudos.        (line 108)
23774
* MMIX pseudo-ops:                       MMIX-Pseudos.        (line   6)
23775
* MMIX register names:                   MMIX-Regs.           (line   6)
23776
* MMIX support:                          MMIX-Dependent.      (line   6)
23777
* mmixal differences:                    MMIX-mmixal.         (line   6)
23778
* mmregs directive, TIC54X:              TIC54X-Directives.   (line 169)
23779
* mmsg directive, TIC54X:                TIC54X-Directives.   (line  77)
23780
* MMX, i386:                             i386-SIMD.           (line   6)
23781
* MMX, x86-64:                           i386-SIMD.           (line   6)
23782
* mnemonic compatibility, i386:          i386-Mnemonics.      (line  62)
23783
* mnemonic suffixes, i386:               i386-Variations.     (line  29)
23784
* mnemonic suffixes, x86-64:             i386-Variations.     (line  29)
23785
* mnemonics for opcodes, VAX:            VAX-opcodes.         (line   6)
23786
* mnemonics, AVR:                        AVR Opcodes.         (line   6)
23787
* mnemonics, D10V:                       D10V-Opcodes.        (line   6)
23788
* mnemonics, D30V:                       D30V-Opcodes.        (line   6)
23789
* mnemonics, H8/300:                     H8/300 Opcodes.      (line   6)
23790
* mnemonics, LM32:                       LM32 Opcodes.        (line   6)
23791
* mnemonics, SH:                         SH Opcodes.          (line   6)
23792
* mnemonics, SH64:                       SH64 Opcodes.        (line   6)
23793
* mnemonics, Z8000:                      Z8000 Opcodes.       (line   6)
23794
* mnolist directive, TIC54X:             TIC54X-Directives.   (line 164)
23795
* modifiers, M32C:                       M32C-Modifiers.      (line   6)
23796
* Motorola syntax for the 680x0:         M68K-Moto-Syntax.    (line   6)
23797
* MOVI instructions, relaxation:         Xtensa Immediate Relaxation.
23798
                                                              (line  12)
23799
* MOVN, MOVZ and MOVK group relocations, AArch64: AArch64-Relocations.
23800
                                                              (line   6)
23801
* MOVW and MOVT relocations, ARM:        ARM-Relocations.     (line  21)
23802
* MRI compatibility mode:                M.                   (line   6)
23803
* mri directive:                         MRI.                 (line   6)
23804
* MRI mode, temporarily:                 MRI.                 (line   6)
23805
* MSP 430 floating point (IEEE):         MSP430 Floating Point.
23806
                                                              (line   6)
23807
* MSP 430 identifiers:                   MSP430-Chars.        (line  17)
23808
* MSP 430 line comment character:        MSP430-Chars.        (line   6)
23809
* MSP 430 line separator:                MSP430-Chars.        (line  14)
23810
* MSP 430 machine directives:            MSP430 Directives.   (line   6)
23811
* MSP 430 macros:                        MSP430-Macros.       (line   6)
23812
* MSP 430 opcodes:                       MSP430 Opcodes.      (line   6)
23813
* MSP 430 options (none):                MSP430 Options.      (line   6)
23814
* MSP 430 profiling capability:          MSP430 Profiling Capability.
23815
                                                              (line   6)
23816
* MSP 430 register names:                MSP430-Regs.         (line   6)
23817
* MSP 430 support:                       MSP430-Dependent.    (line   6)
23818
* MSP430 Assembler Extensions:           MSP430-Ext.          (line   6)
23819
* mul instruction, i386:                 i386-Notes.          (line   6)
23820
* mul instruction, x86-64:               i386-Notes.          (line   6)
23821
* N32K support:                          NS32K-Dependent.     (line   6)
23822
* name:                                  Z8000 Directives.    (line  18)
23823
* named section:                         Section.             (line   6)
23824
* named sections:                        Ld Sections.         (line   8)
23825
* names, symbol:                         Symbol Names.        (line   6)
23826
* naming object file:                    o.                   (line   6)
23827
* new page, in listings:                 Eject.               (line   6)
23828
* newblock directive, TIC54X:            TIC54X-Directives.   (line 175)
23829
* newline (\n):                          Strings.             (line  21)
23830
* newline, required at file end:         Statements.          (line  14)
23831
* no-absolute-literals directive:        Absolute Literals Directive.
23832
                                                              (line   6)
23833
* no-longcalls directive:                Longcalls Directive. (line   6)
23834
* no-schedule directive:                 Schedule Directive.  (line   6)
23835
* no-transform directive:                Transform Directive. (line   6)
23836
* nolist directive:                      Nolist.              (line   6)
23837
* nolist directive, TIC54X:              TIC54X-Directives.   (line 131)
23838
* NOP pseudo op, ARM:                    ARM Opcodes.         (line   9)
23839
* notes for Alpha:                       Alpha Notes.         (line   6)
23840
* NS32K line comment character:          NS32K-Chars.         (line   6)
23841
* NS32K line separator:                  NS32K-Chars.         (line  18)
23842
* null-terminated strings:               Asciz.               (line   6)
23843
* number constants:                      Numbers.             (line   6)
23844
* number of macros executed:             Macro.               (line 143)
23845
* numbered subsections:                  Sub-Sections.        (line   6)
23846
* numbers, 16-bit:                       hword.               (line   6)
23847
* numeric values:                        Expressions.         (line   6)
23848
* nword directive, SPARC:                Sparc-Directives.    (line  20)
23849
* object attributes:                     Object Attributes.   (line   6)
23850
* object file:                           Object.              (line   6)
23851
* object file format:                    Object Formats.      (line   6)
23852
* object file name:                      o.                   (line   6)
23853
* object file, after errors:             Z.                   (line   6)
23854
* obsolescent directives:                Deprecated.          (line   6)
23855
* octa directive:                        Octa.                (line   6)
23856
* octal character code (\DDD):           Strings.             (line  30)
23857
* octal integers:                        Integers.            (line   9)
23858
* offset directive:                      Offset.              (line   6)
23859
* offset directive, V850:                V850 Directives.     (line   6)
23860
* opcode mnemonics, VAX:                 VAX-opcodes.         (line   6)
23861
* opcode names, TILE-Gx:                 TILE-Gx Opcodes.     (line   6)
23862
* opcode names, TILEPro:                 TILEPro Opcodes.     (line   6)
23863
* opcode names, Xtensa:                  Xtensa Opcodes.      (line   6)
23864
* opcode summary, AVR:                   AVR Opcodes.         (line   6)
23865
* opcode summary, D10V:                  D10V-Opcodes.        (line   6)
23866
* opcode summary, D30V:                  D30V-Opcodes.        (line   6)
23867
* opcode summary, H8/300:                H8/300 Opcodes.      (line   6)
23868
* opcode summary, LM32:                  LM32 Opcodes.        (line   6)
23869
* opcode summary, SH:                    SH Opcodes.          (line   6)
23870
* opcode summary, SH64:                  SH64 Opcodes.        (line   6)
23871
* opcode summary, Z8000:                 Z8000 Opcodes.       (line   6)
23872
* opcodes for AArch64:                   AArch64 Opcodes.     (line   6)
23873
* opcodes for ARC:                       ARC Opcodes.         (line   6)
23874
* opcodes for ARM:                       ARM Opcodes.         (line   6)
23875
* opcodes for MSP 430:                   MSP430 Opcodes.      (line   6)
23876
* opcodes for V850:                      V850 Opcodes.        (line   6)
23877
* opcodes, i860:                         Opcodes for i860.    (line   6)
23878
* opcodes, i960:                         Opcodes for i960.    (line   6)
23879
* opcodes, M680x0:                       M68K-opcodes.        (line   6)
23880
* opcodes, M68HC11:                      M68HC11-opcodes.     (line   6)
23881
* operand delimiters, i386:              i386-Variations.     (line  15)
23882
* operand delimiters, x86-64:            i386-Variations.     (line  15)
23883
* operand notation, VAX:                 VAX-operands.        (line   6)
23884
* operands in expressions:               Arguments.           (line   6)
23885
* operator precedence:                   Infix Ops.           (line  11)
23886
* operators, in expressions:             Operators.           (line   6)
23887
* operators, permitted arguments:        Infix Ops.           (line   6)
23888
* optimization, D10V:                    Overview.            (line 483)
23889
* optimization, D30V:                    Overview.            (line 488)
23890
* optimizations:                         Xtensa Optimizations.
23891
                                                              (line   6)
23892
* option directive, ARC:                 ARC Directives.      (line 162)
23893
* option directive, TIC54X:              TIC54X-Directives.   (line 179)
23894
* option summary:                        Overview.            (line   6)
23895
* options for AArch64 (none):            AArch64 Options.     (line   6)
23896
* options for Alpha:                     Alpha Options.       (line   6)
23897
* options for ARC (none):                ARC Options.         (line   6)
23898
* options for ARM (none):                ARM Options.         (line   6)
23899
* options for AVR (none):                AVR Options.         (line   6)
23900
* options for Blackfin (none):           Blackfin Options.    (line   6)
23901
* options for i386:                      i386-Options.        (line   6)
23902
* options for IA-64:                     IA-64 Options.       (line   6)
23903
* options for LM32 (none):               LM32 Options.        (line   6)
23904
* options for MSP430 (none):             MSP430 Options.      (line   6)
23905
* options for PDP-11:                    PDP-11-Options.      (line   6)
23906
* options for PowerPC:                   PowerPC-Opts.        (line   6)
23907
* options for s390:                      s390 Options.        (line   6)
23908
* options for SCORE:                     SCORE-Opts.          (line   6)
23909
* options for SPARC:                     Sparc-Opts.          (line   6)
23910
* options for TIC6X:                     TIC6X Options.       (line   6)
23911
* options for V850 (none):               V850 Options.        (line   6)
23912
* options for VAX/VMS:                   VAX-Opts.            (line  42)
23913
* options for x86-64:                    i386-Options.        (line   6)
23914
* options for Z80:                       Z80 Options.         (line   6)
23915
* options, all versions of assembler:    Invoking.            (line   6)
23916
* options, command line:                 Command Line.        (line  13)
23917
* options, CRIS:                         CRIS-Opts.           (line   6)
23918
* options, D10V:                         D10V-Opts.           (line   6)
23919
* options, D30V:                         D30V-Opts.           (line   6)
23920
* options, Epiphany:                     Epiphany Options.    (line   6)
23921
* options, H8/300:                       H8/300 Options.      (line   6)
23922
* options, i960:                         Options-i960.        (line   6)
23923
* options, IP2K:                         IP2K-Opts.           (line   6)
23924
* options, M32C:                         M32C-Opts.           (line   6)
23925
* options, M32R:                         M32R-Opts.           (line   6)
23926
* options, M680x0:                       M68K-Opts.           (line   6)
23927
* options, M68HC11:                      M68HC11-Opts.        (line   6)
23928
* options, MMIX:                         MMIX-Opts.           (line   6)
23929
* options, PJ:                           PJ Options.          (line   6)
23930
* options, RL78:                         RL78-Opts.           (line   6)
23931
* options, RX:                           RX-Opts.             (line   6)
23932
* options, SH:                           SH Options.          (line   6)
23933
* options, SH64:                         SH64 Options.        (line   6)
23934
* options, TIC54X:                       TIC54X-Opts.         (line   6)
23935
* options, XGATE:                        XGATE-Opts.          (line   6)
23936
* options, Z8000:                        Z8000 Options.       (line   6)
23937
* org directive:                         Org.                 (line   6)
23938
* other attribute, of a.out symbol:      Symbol Other.        (line   6)
23939
* output file:                           Object.              (line   6)
23940
* p2align directive:                     P2align.             (line   6)
23941
* p2alignl directive:                    P2align.             (line  28)
23942
* p2alignw directive:                    P2align.             (line  28)
23943
* padding the location counter:          Align.               (line   6)
23944
* padding the location counter given a power of two: P2align. (line   6)
23945
* padding the location counter given number of bytes: Balign. (line   6)
23946
* page, in listings:                     Eject.               (line   6)
23947
* paper size, for listings:              Psize.               (line   6)
23948
* paths for .include:                    I.                   (line   6)
23949
* patterns, writing in memory:           Fill.                (line   6)
23950
* PDP-11 comments:                       PDP-11-Syntax.       (line  16)
23951
* PDP-11 floating-point register syntax: PDP-11-Syntax.       (line  13)
23952
* PDP-11 general-purpose register syntax: PDP-11-Syntax.      (line  10)
23953
* PDP-11 instruction naming:             PDP-11-Mnemonics.    (line   6)
23954
* PDP-11 line separator:                 PDP-11-Syntax.       (line  19)
23955
* PDP-11 support:                        PDP-11-Dependent.    (line   6)
23956
* PDP-11 syntax:                         PDP-11-Syntax.       (line   6)
23957
* PIC code generation for ARM:           ARM Options.         (line 169)
23958
* PIC code generation for M32R:          M32R-Opts.           (line  42)
23959
* PIC selection, MIPS:                   MIPS Opts.           (line  21)
23960
* PJ endianness:                         Overview.            (line 620)
23961
* PJ line comment character:             PJ-Chars.            (line   6)
23962
* PJ line separator:                     PJ-Chars.            (line  14)
23963
* PJ options:                            PJ Options.          (line   6)
23964
* PJ support:                            PJ-Dependent.        (line   6)
23965
* plus, permitted arguments:             Infix Ops.           (line  44)
23966
* popsection directive:                  PopSection.          (line   6)
23967
* Position-independent code, CRIS:       CRIS-Opts.           (line  27)
23968
* Position-independent code, symbols in, CRIS: CRIS-Pic.      (line   6)
23969
* PowerPC architectures:                 PowerPC-Opts.        (line   6)
23970
* PowerPC directives:                    PowerPC-Pseudo.      (line   6)
23971
* PowerPC line comment character:        PowerPC-Chars.       (line   6)
23972
* PowerPC line separator:                PowerPC-Chars.       (line  18)
23973
* PowerPC options:                       PowerPC-Opts.        (line   6)
23974
* PowerPC support:                       PPC-Dependent.       (line   6)
23975
* precedence of operators:               Infix Ops.           (line  11)
23976
* precision, floating point:             Flonums.             (line   6)
23977
* prefix operators:                      Prefix Ops.          (line   6)
23978
* prefixes, i386:                        i386-Prefixes.       (line   6)
23979
* preprocessing:                         Preprocessing.       (line   6)
23980
* preprocessing, turning on and off:     Preprocessing.       (line  26)
23981
* previous directive:                    Previous.            (line   6)
23982
* primary attributes, COFF symbols:      COFF Symbols.        (line  13)
23983
* print directive:                       Print.               (line   6)
23984
* proc directive, SPARC:                 Sparc-Directives.    (line  25)
23985
* profiler directive, MSP 430:           MSP430 Directives.   (line  22)
23986
* profiling capability for MSP 430:      MSP430 Profiling Capability.
23987
                                                              (line   6)
23988
* protected directive:                   Protected.           (line   6)
23989
* pseudo-op .arch, CRIS:                 CRIS-Pseudos.        (line  45)
23990
* pseudo-op .dword, CRIS:                CRIS-Pseudos.        (line  12)
23991
* pseudo-op .syntax, CRIS:               CRIS-Pseudos.        (line  17)
23992
* pseudo-op BSPEC, MMIX:                 MMIX-Pseudos.        (line 131)
23993
* pseudo-op BYTE, MMIX:                  MMIX-Pseudos.        (line  97)
23994
* pseudo-op ESPEC, MMIX:                 MMIX-Pseudos.        (line 131)
23995
* pseudo-op GREG, MMIX:                  MMIX-Pseudos.        (line  50)
23996
* pseudo-op IS, MMIX:                    MMIX-Pseudos.        (line  42)
23997
* pseudo-op LOC, MMIX:                   MMIX-Pseudos.        (line   7)
23998
* pseudo-op LOCAL, MMIX:                 MMIX-Pseudos.        (line  28)
23999
* pseudo-op OCTA, MMIX:                  MMIX-Pseudos.        (line 108)
24000
* pseudo-op PREFIX, MMIX:                MMIX-Pseudos.        (line 120)
24001
* pseudo-op TETRA, MMIX:                 MMIX-Pseudos.        (line 108)
24002
* pseudo-op WYDE, MMIX:                  MMIX-Pseudos.        (line 108)
24003
* pseudo-opcodes for XStormy16:          XStormy16 Opcodes.   (line   6)
24004
* pseudo-opcodes, M680x0:                M68K-Branch.         (line   6)
24005
* pseudo-opcodes, M68HC11:               M68HC11-Branch.      (line   6)
24006
* pseudo-ops for branch, VAX:            VAX-branch.          (line   6)
24007
* pseudo-ops, CRIS:                      CRIS-Pseudos.        (line   6)
24008
* pseudo-ops, machine independent:       Pseudo Ops.          (line   6)
24009
* pseudo-ops, MMIX:                      MMIX-Pseudos.        (line   6)
24010
* psize directive:                       Psize.               (line   6)
24011
* PSR bits:                              IA-64-Bits.          (line   6)
24012
* pstring directive, TIC54X:             TIC54X-Directives.   (line 208)
24013
* psw register, V850:                    V850-Regs.           (line 116)
24014
* purgem directive:                      Purgem.              (line   6)
24015
* purpose of GNU assembler:              GNU Assembler.       (line  12)
24016
* pushsection directive:                 PushSection.         (line   6)
24017
* quad directive:                        Quad.                (line   6)
24018
* quad directive, i386:                  i386-Float.          (line  21)
24019
* quad directive, x86-64:                i386-Float.          (line  21)
24020
* real-mode code, i386:                  i386-16bit.          (line   6)
24021
* ref directive, TIC54X:                 TIC54X-Directives.   (line 103)
24022
* register directive, SPARC:             Sparc-Directives.    (line  29)
24023
* register names, AArch64:               AArch64-Regs.        (line   6)
24024
* register names, Alpha:                 Alpha-Regs.          (line   6)
24025
* register names, ARC:                   ARC-Regs.            (line   6)
24026
* register names, ARM:                   ARM-Regs.            (line   6)
24027
* register names, AVR:                   AVR-Regs.            (line   6)
24028
* register names, CRIS:                  CRIS-Regs.           (line   6)
24029
* register names, H8/300:                H8/300-Regs.         (line   6)
24030
* register names, IA-64:                 IA-64-Regs.          (line   6)
24031
* register names, LM32:                  LM32-Regs.           (line   6)
24032
* register names, MMIX:                  MMIX-Regs.           (line   6)
24033
* register names, MSP 430:               MSP430-Regs.         (line   6)
24034
* register names, Sparc:                 Sparc-Regs.          (line   6)
24035
* register names, TILE-Gx:               TILE-Gx Registers.   (line   6)
24036
* register names, TILEPro:               TILEPro Registers.   (line   6)
24037
* register names, V850:                  V850-Regs.           (line   6)
24038
* register names, VAX:                   VAX-operands.        (line  17)
24039
* register names, Xtensa:                Xtensa Registers.    (line   6)
24040
* register names, Z80:                   Z80-Regs.            (line   6)
24041
* register naming, s390:                 s390 Register.       (line   6)
24042
* register operands, i386:               i386-Variations.     (line  15)
24043
* register operands, x86-64:             i386-Variations.     (line  15)
24044
* registers, D10V:                       D10V-Regs.           (line   6)
24045
* registers, D30V:                       D30V-Regs.           (line   6)
24046
* registers, i386:                       i386-Regs.           (line   6)
24047
* registers, SH:                         SH-Regs.             (line   6)
24048
* registers, SH64:                       SH64-Regs.           (line   6)
24049
* registers, TIC54X memory-mapped:       TIC54X-MMRegs.       (line   6)
24050
* registers, x86-64:                     i386-Regs.           (line   6)
24051
* registers, Z8000:                      Z8000-Regs.          (line   6)
24052
* relaxation:                            Xtensa Relaxation.   (line   6)
24053
* relaxation of ADDI instructions:       Xtensa Immediate Relaxation.
24054
                                                              (line  43)
24055
* relaxation of branch instructions:     Xtensa Branch Relaxation.
24056
                                                              (line   6)
24057
* relaxation of call instructions:       Xtensa Call Relaxation.
24058
                                                              (line   6)
24059
* relaxation of immediate fields:        Xtensa Immediate Relaxation.
24060
                                                              (line   6)
24061
* relaxation of L16SI instructions:      Xtensa Immediate Relaxation.
24062
                                                              (line  23)
24063
* relaxation of L16UI instructions:      Xtensa Immediate Relaxation.
24064
                                                              (line  23)
24065
* relaxation of L32I instructions:       Xtensa Immediate Relaxation.
24066
                                                              (line  23)
24067
* relaxation of L8UI instructions:       Xtensa Immediate Relaxation.
24068
                                                              (line  23)
24069
* relaxation of MOVI instructions:       Xtensa Immediate Relaxation.
24070
                                                              (line  12)
24071
* reloc directive:                       Reloc.               (line   6)
24072
* relocation:                            Sections.            (line   6)
24073
* relocation example:                    Ld Sections.         (line  40)
24074
* relocations, AArch64:                  AArch64-Relocations. (line   6)
24075
* relocations, Alpha:                    Alpha-Relocs.        (line   6)
24076
* relocations, Sparc:                    Sparc-Relocs.        (line   6)
24077
* repeat prefixes, i386:                 i386-Prefixes.       (line  44)
24078
* reporting bugs in assembler:           Reporting Bugs.      (line   6)
24079
* rept directive:                        Rept.                (line   6)
24080
* reserve directive, SPARC:              Sparc-Directives.    (line  39)
24081
* return instructions, i386:             i386-Variations.     (line  41)
24082
* return instructions, x86-64:           i386-Variations.     (line  41)
24083
* REX prefixes, i386:                    i386-Prefixes.       (line  46)
24084
* RL78 assembler directives:             RL78-Directives.     (line   6)
24085
* RL78 line comment character:           RL78-Chars.          (line   6)
24086
* RL78 line separator:                   RL78-Chars.          (line  14)
24087
* RL78 modifiers:                        RL78-Modifiers.      (line   6)
24088
* RL78 options:                          RL78-Opts.           (line   6)
24089
* RL78 support:                          RL78-Dependent.      (line   6)
24090
* rsect:                                 Z8000 Directives.    (line  52)
24091
* RX assembler directive .3byte:         RX-Directives.       (line   9)
24092
* RX assembler directive .fetchalign:    RX-Directives.       (line  13)
24093
* RX assembler directives:               RX-Directives.       (line   6)
24094
* RX floating point:                     RX-Float.            (line   6)
24095
* RX line comment character:             RX-Chars.            (line   6)
24096
* RX line separator:                     RX-Chars.            (line  14)
24097
* RX modifiers:                          RX-Modifiers.        (line   6)
24098
* RX options:                            RX-Opts.             (line   6)
24099
* RX support:                            RX-Dependent.        (line   6)
24100
* s390 floating point:                   s390 Floating Point. (line   6)
24101
* s390 instruction aliases:              s390 Aliases.        (line   6)
24102
* s390 instruction formats:              s390 Formats.        (line   6)
24103
* s390 instruction marker:               s390 Instruction Marker.
24104
                                                              (line   6)
24105
* s390 instruction mnemonics:            s390 Mnemonics.      (line   6)
24106
* s390 instruction operand modifier:     s390 Operand Modifier.
24107
                                                              (line   6)
24108
* s390 instruction operands:             s390 Operands.       (line   6)
24109
* s390 instruction syntax:               s390 Syntax.         (line   6)
24110
* s390 line comment character:           s390 Characters.     (line   6)
24111
* s390 line separator:                   s390 Characters.     (line  13)
24112
* s390 literal pool entries:             s390 Literal Pool Entries.
24113
                                                              (line   6)
24114
* s390 options:                          s390 Options.        (line   6)
24115
* s390 register naming:                  s390 Register.       (line   6)
24116
* s390 support:                          S/390-Dependent.     (line   6)
24117
* sblock directive, TIC54X:              TIC54X-Directives.   (line 182)
24118
* sbttl directive:                       Sbttl.               (line   6)
24119
* schedule directive:                    Schedule Directive.  (line   6)
24120
* scl directive:                         Scl.                 (line   6)
24121
* SCORE architectures:                   SCORE-Opts.          (line   6)
24122
* SCORE directives:                      SCORE-Pseudo.        (line   6)
24123
* SCORE line comment character:          SCORE-Chars.         (line   6)
24124
* SCORE line separator:                  SCORE-Chars.         (line  14)
24125
* SCORE options:                         SCORE-Opts.          (line   6)
24126
* SCORE processor:                       SCORE-Dependent.     (line   6)
24127
* sdaoff pseudo-op, V850:                V850 Opcodes.        (line  65)
24128
* search path for .include:              I.                   (line   6)
24129
* sect directive, MSP 430:               MSP430 Directives.   (line  18)
24130
* sect directive, TIC54X:                TIC54X-Directives.   (line 188)
24131
* section directive (COFF version):      Section.             (line  16)
24132
* section directive (ELF version):       Section.             (line  76)
24133
* section directive, V850:               V850 Directives.     (line   9)
24134
* section override prefixes, i386:       i386-Prefixes.       (line  23)
24135
* Section Stack <1>:                     SubSection.          (line   6)
24136
* Section Stack <2>:                     Section.             (line  71)
24137
* Section Stack <3>:                     PushSection.         (line   6)
24138
* Section Stack <4>:                     Previous.            (line   6)
24139
* Section Stack:                         PopSection.          (line   6)
24140
* section-relative addressing:           Secs Background.     (line  68)
24141
* sections:                              Sections.            (line   6)
24142
* sections in messages, internal:        As Sections.         (line   6)
24143
* sections, i386:                        i386-Variations.     (line  47)
24144
* sections, named:                       Ld Sections.         (line   8)
24145
* sections, x86-64:                      i386-Variations.     (line  47)
24146
* seg directive, SPARC:                  Sparc-Directives.    (line  44)
24147
* segm:                                  Z8000 Directives.    (line  10)
24148
* set directive:                         Set.                 (line   6)
24149
* set directive, TIC54X:                 TIC54X-Directives.   (line 191)
24150
* SH addressing modes:                   SH-Addressing.       (line   6)
24151
* SH floating point (IEEE):              SH Floating Point.   (line   6)
24152
* SH line comment character:             SH-Chars.            (line   6)
24153
* SH line separator:                     SH-Chars.            (line   8)
24154
* SH machine directives:                 SH Directives.       (line   6)
24155
* SH opcode summary:                     SH Opcodes.          (line   6)
24156
* SH options:                            SH Options.          (line   6)
24157
* SH registers:                          SH-Regs.             (line   6)
24158
* SH support:                            SH-Dependent.        (line   6)
24159
* SH64 ABI options:                      SH64 Options.        (line  29)
24160
* SH64 addressing modes:                 SH64-Addressing.     (line   6)
24161
* SH64 ISA options:                      SH64 Options.        (line   6)
24162
* SH64 line comment character:           SH64-Chars.          (line   6)
24163
* SH64 line separator:                   SH64-Chars.          (line  13)
24164
* SH64 machine directives:               SH64 Directives.     (line   9)
24165
* SH64 opcode summary:                   SH64 Opcodes.        (line   6)
24166
* SH64 options:                          SH64 Options.        (line   6)
24167
* SH64 registers:                        SH64-Regs.           (line   6)
24168
* SH64 support:                          SH64-Dependent.      (line   6)
24169
* shigh directive, M32R:                 M32R-Directives.     (line  26)
24170
* short directive:                       Short.               (line   6)
24171
* short directive, ARC:                  ARC Directives.      (line 171)
24172
* short directive, TIC54X:               TIC54X-Directives.   (line 111)
24173
* SIMD, i386:                            i386-SIMD.           (line   6)
24174
* SIMD, x86-64:                          i386-SIMD.           (line   6)
24175
* single character constant:             Chars.               (line   6)
24176
* single directive:                      Single.              (line   6)
24177
* single directive, i386:                i386-Float.          (line  14)
24178
* single directive, x86-64:              i386-Float.          (line  14)
24179
* single quote, Z80:                     Z80-Chars.           (line  20)
24180
* sixteen bit integers:                  hword.               (line   6)
24181
* sixteen byte integer:                  Octa.                (line   6)
24182
* size directive (COFF version):         Size.                (line  11)
24183
* size directive (ELF version):          Size.                (line  19)
24184
* size modifiers, D10V:                  D10V-Size.           (line   6)
24185
* size modifiers, D30V:                  D30V-Size.           (line   6)
24186
* size modifiers, M680x0:                M68K-Syntax.         (line   8)
24187
* size prefixes, i386:                   i386-Prefixes.       (line  27)
24188
* size suffixes, H8/300:                 H8/300 Opcodes.      (line 163)
24189
* size, translations, Sparc:             Sparc-Size-Translations.
24190
                                                              (line   6)
24191
* sizes operands, i386:                  i386-Variations.     (line  29)
24192
* sizes operands, x86-64:                i386-Variations.     (line  29)
24193
* skip directive:                        Skip.                (line   6)
24194
* skip directive, M680x0:                M68K-Directives.     (line  19)
24195
* skip directive, SPARC:                 Sparc-Directives.    (line  48)
24196
* sleb128 directive:                     Sleb128.             (line   6)
24197
* small objects, MIPS ECOFF:             MIPS Object.         (line  11)
24198
* SmartMIPS instruction generation override: MIPS ASE instruction generation overrides.
24199
                                                              (line  11)
24200
* SOM symbol attributes:                 SOM Symbols.         (line   6)
24201
* source program:                        Input Files.         (line   6)
24202
* source, destination operands; i386:    i386-Variations.     (line  22)
24203
* source, destination operands; x86-64:  i386-Variations.     (line  22)
24204
* sp register:                           Xtensa Registers.    (line   6)
24205
* sp register, V850:                     V850-Regs.           (line  14)
24206
* space directive:                       Space.               (line   6)
24207
* space directive, TIC54X:               TIC54X-Directives.   (line 196)
24208
* space used, maximum for assembly:      statistics.          (line   6)
24209
* SPARC architectures:                   Sparc-Opts.          (line   6)
24210
* Sparc constants:                       Sparc-Constants.     (line   6)
24211
* SPARC data alignment:                  Sparc-Aligned-Data.  (line   6)
24212
* SPARC floating point (IEEE):           Sparc-Float.         (line   6)
24213
* Sparc line comment character:          Sparc-Chars.         (line   6)
24214
* Sparc line separator:                  Sparc-Chars.         (line  14)
24215
* SPARC machine directives:              Sparc-Directives.    (line   6)
24216
* SPARC options:                         Sparc-Opts.          (line   6)
24217
* Sparc registers:                       Sparc-Regs.          (line   6)
24218
* Sparc relocations:                     Sparc-Relocs.        (line   6)
24219
* Sparc size translations:               Sparc-Size-Translations.
24220
                                                              (line   6)
24221
* SPARC support:                         Sparc-Dependent.     (line   6)
24222
* SPARC syntax:                          Sparc-Aligned-Data.  (line  21)
24223
* special characters, M680x0:            M68K-Chars.          (line   6)
24224
* special purpose registers, MSP 430:    MSP430-Regs.         (line  11)
24225
* sslist directive, TIC54X:              TIC54X-Directives.   (line 203)
24226
* ssnolist directive, TIC54X:            TIC54X-Directives.   (line 203)
24227
* stabd directive:                       Stab.                (line  38)
24228
* stabn directive:                       Stab.                (line  48)
24229
* stabs directive:                       Stab.                (line  51)
24230
* stabX directives:                      Stab.                (line   6)
24231
* standard assembler sections:           Secs Background.     (line  27)
24232
* standard input, as input file:         Command Line.        (line  10)
24233
* statement separator character:         Statements.          (line   6)
24234
* statement separator, AArch64:          AArch64-Chars.       (line  10)
24235
* statement separator, Alpha:            Alpha-Chars.         (line  11)
24236
* statement separator, ARC:              ARC-Chars.           (line  12)
24237
* statement separator, ARM:              ARM-Chars.           (line  14)
24238
* statement separator, AVR:              AVR-Chars.           (line  14)
24239
* statement separator, CR16:             CR16-Chars.          (line  13)
24240
* statement separator, Epiphany:         Epiphany-Chars.      (line  14)
24241
* statement separator, H8/300:           H8/300-Chars.        (line   8)
24242
* statement separator, i386:             i386-Chars.          (line  18)
24243
* statement separator, i860:             i860-Chars.          (line  14)
24244
* statement separator, i960:             i960-Chars.          (line  14)
24245
* statement separator, IA-64:            IA-64-Chars.         (line   8)
24246
* statement separator, IP2K:             IP2K-Chars.          (line  14)
24247
* statement separator, LM32:             LM32-Chars.          (line  12)
24248
* statement separator, M32C:             M32C-Chars.          (line  14)
24249
* statement separator, M68HC11:          M68HC11-Syntax.      (line  27)
24250
* statement separator, MicroBlaze:       MicroBlaze-Chars.    (line  14)
24251
* statement separator, MIPS:             MIPS-Chars.          (line  14)
24252
* statement separator, MSP 430:          MSP430-Chars.        (line  14)
24253
* statement separator, NS32K:            NS32K-Chars.         (line  18)
24254
* statement separator, PJ:               PJ-Chars.            (line  14)
24255
* statement separator, PowerPC:          PowerPC-Chars.       (line  18)
24256
* statement separator, RL78:             RL78-Chars.          (line  14)
24257
* statement separator, RX:               RX-Chars.            (line  14)
24258
* statement separator, s390:             s390 Characters.     (line  13)
24259
* statement separator, SCORE:            SCORE-Chars.         (line  14)
24260
* statement separator, SH:               SH-Chars.            (line   8)
24261
* statement separator, SH64:             SH64-Chars.          (line  13)
24262
* statement separator, Sparc:            Sparc-Chars.         (line  14)
24263
* statement separator, TIC54X:           TIC54X-Chars.        (line  17)
24264
* statement separator, TIC6X:            TIC6X Syntax.        (line  13)
24265
* statement separator, V850:             V850-Chars.          (line  13)
24266
* statement separator, VAX:              VAX-Chars.           (line  14)
24267
* statement separator, XGATE:            XGATE-Syntax.        (line  26)
24268
* statement separator, XStormy16:        XStormy16-Chars.     (line  14)
24269
* statement separator, Z80:              Z80-Chars.           (line  13)
24270
* statement separator, Z8000:            Z8000-Chars.         (line  13)
24271
* statements, structure of:              Statements.          (line   6)
24272
* statistics, about assembly:            statistics.          (line   6)
24273
* stopping the assembly:                 Abort.               (line   6)
24274
* string constants:                      Strings.             (line   6)
24275
* string directive:                      String.              (line   8)
24276
* string directive on HPPA:              HPPA Directives.     (line 137)
24277
* string directive, TIC54X:              TIC54X-Directives.   (line 208)
24278
* string literals:                       Ascii.               (line   6)
24279
* string, copying to object file:        String.              (line   8)
24280
* string16 directive:                    String.              (line   8)
24281
* string16, copying to object file:      String.              (line   8)
24282
* string32 directive:                    String.              (line   8)
24283
* string32, copying to object file:      String.              (line   8)
24284
* string64 directive:                    String.              (line   8)
24285
* string64, copying to object file:      String.              (line   8)
24286
* string8 directive:                     String.              (line   8)
24287
* string8, copying to object file:       String.              (line   8)
24288
* struct directive:                      Struct.              (line   6)
24289
* struct directive, TIC54X:              TIC54X-Directives.   (line 216)
24290
* structure debugging, COFF:             Tag.                 (line   6)
24291
* sub-instruction ordering, D10V:        D10V-Chars.          (line  14)
24292
* sub-instruction ordering, D30V:        D30V-Chars.          (line  14)
24293
* sub-instructions, D10V:                D10V-Subs.           (line   6)
24294
* sub-instructions, D30V:                D30V-Subs.           (line   6)
24295
* subexpressions:                        Arguments.           (line  24)
24296
* subsection directive:                  SubSection.          (line   6)
24297
* subsym builtins, TIC54X:               TIC54X-Macros.       (line  16)
24298
* subtitles for listings:                Sbttl.               (line   6)
24299
* subtraction, permitted arguments:      Infix Ops.           (line  49)
24300
* summary of options:                    Overview.            (line   6)
24301
* support:                               HPPA-Dependent.      (line   6)
24302
* supporting files, including:           Include.             (line   6)
24303
* suppressing warnings:                  W.                   (line  11)
24304
* sval:                                  Z8000 Directives.    (line  33)
24305
* symbol attributes:                     Symbol Attributes.   (line   6)
24306
* symbol attributes, a.out:              a.out Symbols.       (line   6)
24307
* symbol attributes, COFF:               COFF Symbols.        (line   6)
24308
* symbol attributes, SOM:                SOM Symbols.         (line   6)
24309
* symbol descriptor, COFF:               Desc.                (line   6)
24310
* symbol modifiers <1>:                  M68HC11-Modifiers.   (line  12)
24311
* symbol modifiers <2>:                  M32C-Modifiers.      (line  11)
24312
* symbol modifiers <3>:                  LM32-Modifiers.      (line  12)
24313
* symbol modifiers:                      AVR-Modifiers.       (line  12)
24314
* symbol modifiers, TILE-Gx:             TILE-Gx Modifiers.   (line   6)
24315
* symbol modifiers, TILEPro:             TILEPro Modifiers.   (line   6)
24316
* symbol names:                          Symbol Names.        (line   6)
24317
* symbol names, $ in <1>:                SH64-Chars.          (line  15)
24318
* symbol names, $ in <2>:                SH-Chars.            (line  15)
24319
* symbol names, $ in <3>:                D30V-Chars.          (line  70)
24320
* symbol names, $ in:                    D10V-Chars.          (line  53)
24321
* symbol names, local:                   Symbol Names.        (line  27)
24322
* symbol names, temporary:               Symbol Names.        (line  40)
24323
* symbol storage class (COFF):           Scl.                 (line   6)
24324
* symbol type:                           Symbol Type.         (line   6)
24325
* symbol type, COFF:                     Type.                (line  11)
24326
* symbol type, ELF:                      Type.                (line  22)
24327
* symbol value:                          Symbol Value.        (line   6)
24328
* symbol value, setting:                 Set.                 (line   6)
24329
* symbol values, assigning:              Setting Symbols.     (line   6)
24330
* symbol versioning:                     Symver.              (line   6)
24331
* symbol, common:                        Comm.                (line   6)
24332
* symbol, making visible to linker:      Global.              (line   6)
24333
* symbolic debuggers, information for:   Stab.                (line   6)
24334
* symbols:                               Symbols.             (line   6)
24335
* Symbols in position-independent code, CRIS: CRIS-Pic.       (line   6)
24336
* symbols with uppercase, VAX/VMS:       VAX-Opts.            (line  42)
24337
* symbols, assigning values to:          Equ.                 (line   6)
24338
* Symbols, built-in, CRIS:               CRIS-Symbols.        (line   6)
24339
* Symbols, CRIS, built-in:               CRIS-Symbols.        (line   6)
24340
* symbols, local common:                 Lcomm.               (line   6)
24341
* symver directive:                      Symver.              (line   6)
24342
* syntax compatibility, i386:            i386-Variations.     (line   6)
24343
* syntax compatibility, x86-64:          i386-Variations.     (line   6)
24344
* syntax, AVR:                           AVR-Modifiers.       (line   6)
24345
* syntax, Blackfin:                      Blackfin Syntax.     (line   6)
24346
* syntax, D10V:                          D10V-Syntax.         (line   6)
24347
* syntax, D30V:                          D30V-Syntax.         (line   6)
24348
* syntax, LM32:                          LM32-Modifiers.      (line   6)
24349
* syntax, M680x0:                        M68K-Syntax.         (line   8)
24350
* syntax, M68HC11 <1>:                   M68HC11-Modifiers.   (line   6)
24351
* syntax, M68HC11:                       M68HC11-Syntax.      (line   6)
24352
* syntax, machine-independent:           Syntax.              (line   6)
24353
* syntax, RL78:                          RL78-Modifiers.      (line   6)
24354
* syntax, RX:                            RX-Modifiers.        (line   6)
24355
* syntax, SPARC:                         Sparc-Aligned-Data.  (line  21)
24356
* syntax, TILE-Gx:                       TILE-Gx Syntax.      (line   6)
24357
* syntax, TILEPro:                       TILEPro Syntax.      (line   6)
24358
* syntax, XGATE:                         XGATE-Syntax.        (line   6)
24359
* syntax, Xtensa assembler:              Xtensa Syntax.       (line   6)
24360
* sysproc directive, i960:               Directives-i960.     (line  37)
24361
* tab (\t):                              Strings.             (line  27)
24362
* tab directive, TIC54X:                 TIC54X-Directives.   (line 247)
24363
* tag directive:                         Tag.                 (line   6)
24364
* tag directive, TIC54X:                 TIC54X-Directives.   (line 216)
24365
* TBM, i386:                             i386-TBM.            (line   6)
24366
* TBM, x86-64:                           i386-TBM.            (line   6)
24367
* tdaoff pseudo-op, V850:                V850 Opcodes.        (line  81)
24368
* temporary symbol names:                Symbol Names.        (line  40)
24369
* text and data sections, joining:       R.                   (line   6)
24370
* text directive:                        Text.                (line   6)
24371
* text section:                          Ld Sections.         (line   9)
24372
* tfloat directive, i386:                i386-Float.          (line  14)
24373
* tfloat directive, x86-64:              i386-Float.          (line  14)
24374
* Thumb support <1>:                     ARM-Dependent.       (line   6)
24375
* Thumb support:                         AArch64-Dependent.   (line   6)
24376
* TIC54X builtin math functions:         TIC54X-Builtins.     (line   6)
24377
* TIC54X line comment character:         TIC54X-Chars.        (line   6)
24378
* TIC54X line separator:                 TIC54X-Chars.        (line  17)
24379
* TIC54X machine directives:             TIC54X-Directives.   (line   6)
24380
* TIC54X memory-mapped registers:        TIC54X-MMRegs.       (line   6)
24381
* TIC54X options:                        TIC54X-Opts.         (line   6)
24382
* TIC54X subsym builtins:                TIC54X-Macros.       (line  16)
24383
* TIC54X support:                        TIC54X-Dependent.    (line   6)
24384
* TIC54X-specific macros:                TIC54X-Macros.       (line   6)
24385
* TIC6X big-endian output:               TIC6X Options.       (line  46)
24386
* TIC6X line comment character:          TIC6X Syntax.        (line   6)
24387
* TIC6X line separator:                  TIC6X Syntax.        (line  13)
24388
* TIC6X little-endian output:            TIC6X Options.       (line  46)
24389
* TIC6X machine directives:              TIC6X Directives.    (line   6)
24390
* TIC6X options:                         TIC6X Options.       (line   6)
24391
* TIC6X support:                         TIC6X-Dependent.     (line   6)
24392
* TILE-Gx machine directives:            TILE-Gx Directives.  (line   6)
24393
* TILE-Gx modifiers:                     TILE-Gx Modifiers.   (line   6)
24394
* TILE-Gx opcode names:                  TILE-Gx Opcodes.     (line   6)
24395
* TILE-Gx register names:                TILE-Gx Registers.   (line   6)
24396
* TILE-Gx support:                       TILE-Gx-Dependent.   (line   6)
24397
* TILE-Gx syntax:                        TILE-Gx Syntax.      (line   6)
24398
* TILEPro machine directives:            TILEPro Directives.  (line   6)
24399
* TILEPro modifiers:                     TILEPro Modifiers.   (line   6)
24400
* TILEPro opcode names:                  TILEPro Opcodes.     (line   6)
24401
* TILEPro register names:                TILEPro Registers.   (line   6)
24402
* TILEPro support:                       TILEPro-Dependent.   (line   6)
24403
* TILEPro syntax:                        TILEPro Syntax.      (line   6)
24404
* time, total for assembly:              statistics.          (line   6)
24405
* title directive:                       Title.               (line   6)
24406
* TMS320C6X support:                     TIC6X-Dependent.     (line   6)
24407
* tp register, V850:                     V850-Regs.           (line  20)
24408
* transform directive:                   Transform Directive. (line   6)
24409
* trusted compiler:                      f.                   (line   6)
24410
* turning preprocessing on and off:      Preprocessing.       (line  26)
24411
* type directive (COFF version):         Type.                (line  11)
24412
* type directive (ELF version):          Type.                (line  22)
24413
* type of a symbol:                      Symbol Type.         (line   6)
24414
* ualong directive, SH:                  SH Directives.       (line   6)
24415
* uaquad directive, SH:                  SH Directives.       (line   6)
24416
* uaword directive, SH:                  SH Directives.       (line   6)
24417
* ubyte directive, TIC54X:               TIC54X-Directives.   (line  36)
24418
* uchar directive, TIC54X:               TIC54X-Directives.   (line  36)
24419
* uhalf directive, TIC54X:               TIC54X-Directives.   (line 111)
24420
* uint directive, TIC54X:                TIC54X-Directives.   (line 111)
24421
* uleb128 directive:                     Uleb128.             (line   6)
24422
* ulong directive, TIC54X:               TIC54X-Directives.   (line 135)
24423
* undefined section:                     Ld Sections.         (line  36)
24424
* union directive, TIC54X:               TIC54X-Directives.   (line 250)
24425
* unsegm:                                Z8000 Directives.    (line  14)
24426
* usect directive, TIC54X:               TIC54X-Directives.   (line 262)
24427
* ushort directive, TIC54X:              TIC54X-Directives.   (line 111)
24428
* uword directive, TIC54X:               TIC54X-Directives.   (line 111)
24429
* V850 command line options:             V850 Options.        (line   9)
24430
* V850 floating point (IEEE):            V850 Floating Point. (line   6)
24431
* V850 line comment character:           V850-Chars.          (line   6)
24432
* V850 line separator:                   V850-Chars.          (line  13)
24433
* V850 machine directives:               V850 Directives.     (line   6)
24434
* V850 opcodes:                          V850 Opcodes.        (line   6)
24435
* V850 options (none):                   V850 Options.        (line   6)
24436
* V850 register names:                   V850-Regs.           (line   6)
24437
* V850 support:                          V850-Dependent.      (line   6)
24438
* val directive:                         Val.                 (line   6)
24439
* value attribute, COFF:                 Val.                 (line   6)
24440
* value of a symbol:                     Symbol Value.        (line   6)
24441
* var directive, TIC54X:                 TIC54X-Directives.   (line 272)
24442
* VAX bitfields not supported:           VAX-no.              (line   6)
24443
* VAX branch improvement:                VAX-branch.          (line   6)
24444
* VAX command-line options ignored:      VAX-Opts.            (line   6)
24445
* VAX displacement sizing character:     VAX-operands.        (line  12)
24446
* VAX floating point:                    VAX-float.           (line   6)
24447
* VAX immediate character:               VAX-operands.        (line   6)
24448
* VAX indirect character:                VAX-operands.        (line   9)
24449
* VAX line comment character:            VAX-Chars.           (line   6)
24450
* VAX line separator:                    VAX-Chars.           (line  14)
24451
* VAX machine directives:                VAX-directives.      (line   6)
24452
* VAX opcode mnemonics:                  VAX-opcodes.         (line   6)
24453
* VAX operand notation:                  VAX-operands.        (line   6)
24454
* VAX register names:                    VAX-operands.        (line  17)
24455
* VAX support:                           Vax-Dependent.       (line   6)
24456
* Vax-11 C compatibility:                VAX-Opts.            (line  42)
24457
* VAX/VMS options:                       VAX-Opts.            (line  42)
24458
* version directive:                     Version.             (line   6)
24459
* version directive, TIC54X:             TIC54X-Directives.   (line 276)
24460
* version of assembler:                  v.                   (line   6)
24461
* versions of symbols:                   Symver.              (line   6)
24462
* visibility <1>:                        Protected.           (line   6)
24463
* visibility <2>:                        Internal.            (line   6)
24464
* visibility:                            Hidden.              (line   6)
24465
* VMS (VAX) options:                     VAX-Opts.            (line  42)
24466
* vtable_entry directive:                VTableEntry.         (line   6)
24467
* vtable_inherit directive:              VTableInherit.       (line   6)
24468
* warning directive:                     Warning.             (line   6)
24469
* warning for altered difference tables: K.                   (line   6)
24470
* warning messages:                      Errors.              (line   6)
24471
* warnings, causing error:               W.                   (line  16)
24472
* warnings, M32R:                        M32R-Warnings.       (line   6)
24473
* warnings, suppressing:                 W.                   (line  11)
24474
* warnings, switching on:                W.                   (line  19)
24475
* weak directive:                        Weak.                (line   6)
24476
* weakref directive:                     Weakref.             (line   6)
24477
* whitespace:                            Whitespace.          (line   6)
24478
* whitespace, removed by preprocessor:   Preprocessing.       (line   7)
24479
* wide floating point directives, VAX:   VAX-directives.      (line  10)
24480
* width directive, TIC54X:               TIC54X-Directives.   (line 127)
24481
* Width of continuation lines of disassembly output: listing. (line  21)
24482
* Width of first line disassembly output: listing.            (line  16)
24483
* Width of source line output:           listing.             (line  28)
24484
* wmsg directive, TIC54X:                TIC54X-Directives.   (line  77)
24485
* word directive:                        Word.                (line   6)
24486
* word directive, ARC:                   ARC Directives.      (line 174)
24487
* word directive, H8/300:                H8/300 Directives.   (line   6)
24488
* word directive, i386:                  i386-Float.          (line  21)
24489
* word directive, SPARC:                 Sparc-Directives.    (line  51)
24490
* word directive, TIC54X:                TIC54X-Directives.   (line 111)
24491
* word directive, x86-64:                i386-Float.          (line  21)
24492
* writing patterns in memory:            Fill.                (line   6)
24493
* wval:                                  Z8000 Directives.    (line  24)
24494
* x86 machine directives:                i386-Directives.     (line   6)
24495
* x86-64 arch directive:                 i386-Arch.           (line   6)
24496
* x86-64 att_syntax pseudo op:           i386-Variations.     (line   6)
24497
* x86-64 conversion instructions:        i386-Mnemonics.      (line  37)
24498
* x86-64 floating point:                 i386-Float.          (line   6)
24499
* x86-64 immediate operands:             i386-Variations.     (line  15)
24500
* x86-64 instruction naming:             i386-Mnemonics.      (line   6)
24501
* x86-64 intel_syntax pseudo op:         i386-Variations.     (line   6)
24502
* x86-64 jump optimization:              i386-Jumps.          (line   6)
24503
* x86-64 jump, call, return:             i386-Variations.     (line  41)
24504
* x86-64 jump/call operands:             i386-Variations.     (line  15)
24505
* x86-64 memory references:              i386-Memory.         (line   6)
24506
* x86-64 options:                        i386-Options.        (line   6)
24507
* x86-64 register operands:              i386-Variations.     (line  15)
24508
* x86-64 registers:                      i386-Regs.           (line   6)
24509
* x86-64 sections:                       i386-Variations.     (line  47)
24510
* x86-64 size suffixes:                  i386-Variations.     (line  29)
24511
* x86-64 source, destination operands:   i386-Variations.     (line  22)
24512
* x86-64 support:                        i386-Dependent.      (line   6)
24513
* x86-64 syntax compatibility:           i386-Variations.     (line   6)
24514
* xfloat directive, TIC54X:              TIC54X-Directives.   (line  64)
24515
* XGATE addressing modes:                XGATE-Syntax.        (line  29)
24516
* XGATE assembler directives:            XGATE-Directives.    (line   6)
24517
* XGATE floating point:                  XGATE-Float.         (line   6)
24518
* XGATE line comment character:          XGATE-Syntax.        (line  16)
24519
* XGATE line separator:                  XGATE-Syntax.        (line  26)
24520
* XGATE opcodes:                         XGATE-opcodes.       (line   6)
24521
* XGATE options:                         XGATE-Opts.          (line   6)
24522
* XGATE support:                         XGATE-Dependent.     (line   6)
24523
* XGATE syntax:                          XGATE-Syntax.        (line   6)
24524
* xlong directive, TIC54X:               TIC54X-Directives.   (line 135)
24525
* XStormy16 comment character:           XStormy16-Chars.     (line  11)
24526
* XStormy16 line comment character:      XStormy16-Chars.     (line   6)
24527
* XStormy16 line separator:              XStormy16-Chars.     (line  14)
24528
* XStormy16 machine directives:          XStormy16 Directives.
24529
                                                              (line   6)
24530
* XStormy16 pseudo-opcodes:              XStormy16 Opcodes.   (line   6)
24531
* XStormy16 support:                     XSTORMY16-Dependent. (line   6)
24532
* Xtensa architecture:                   Xtensa-Dependent.    (line   6)
24533
* Xtensa assembler syntax:               Xtensa Syntax.       (line   6)
24534
* Xtensa directives:                     Xtensa Directives.   (line   6)
24535
* Xtensa opcode names:                   Xtensa Opcodes.      (line   6)
24536
* Xtensa register names:                 Xtensa Registers.    (line   6)
24537
* xword directive, SPARC:                Sparc-Directives.    (line  55)
24538
* Z80 $:                                 Z80-Chars.           (line  15)
24539
* Z80 ':                                 Z80-Chars.           (line  20)
24540
* Z80 floating point:                    Z80 Floating Point.  (line   6)
24541
* Z80 line comment character:            Z80-Chars.           (line   6)
24542
* Z80 line separator:                    Z80-Chars.           (line  13)
24543
* Z80 options:                           Z80 Options.         (line   6)
24544
* Z80 registers:                         Z80-Regs.            (line   6)
24545
* Z80 support:                           Z80-Dependent.       (line   6)
24546
* Z80 Syntax:                            Z80 Options.         (line  47)
24547
* Z80, \:                                Z80-Chars.           (line  18)
24548
* Z80, case sensitivity:                 Z80-Case.            (line   6)
24549
* Z80-only directives:                   Z80 Directives.      (line   9)
24550
* Z800 addressing modes:                 Z8000-Addressing.    (line   6)
24551
* Z8000 directives:                      Z8000 Directives.    (line   6)
24552
* Z8000 line comment character:          Z8000-Chars.         (line   6)
24553
* Z8000 line separator:                  Z8000-Chars.         (line  13)
24554
* Z8000 opcode summary:                  Z8000 Opcodes.       (line   6)
24555
* Z8000 options:                         Z8000 Options.       (line   6)
24556
* Z8000 registers:                       Z8000-Regs.          (line   6)
24557
* Z8000 support:                         Z8000-Dependent.     (line   6)
24558
 
24559
 
24560
* zero-terminated strings:               Asciz.               (line   6)
24561
24562
24563

24564
Tag Table:
24565
Node: Top837
24566
Node: Overview1826
24567
Node: Manual32640
24568
Node: GNU Assembler33584
24569
Node: Object Formats34755
24570
Node: Command Line35207
24571
Node: Input Files36294
24572
Node: Object38275
24573
Node: Errors39171
24574
Node: Invoking40366
24575
Node: a42321
24576
Node: alternate44232
24577
Node: D44404
24578
Node: f44637
24579
Node: I45145
24580
Node: K45689
24581
Node: L45993
24582
Node: listing46732
24583
Node: M48391
24584
Node: MD52792
24585
Node: o53218
24586
Node: R53673
24587
Node: statistics54703
24588
Node: traditional-format55110
24589
Node: v55583
24590
Node: W55858
24591
Node: Z56765
24592
Node: Syntax57287
24593
Node: Preprocessing57879
24594
Node: Whitespace59442
24595
Node: Comments59838
24596
Node: Symbol Intro61849
24597
Node: Statements62576
24598
Node: Constants64565
24599
Node: Characters65196
24600
Node: Strings65698
24601
Node: Chars67864
24602
Node: Numbers68618
24603
Node: Integers69158
24604
Node: Bignums69814
24605
Node: Flonums70170
24606
Node: Sections71917
24607
Node: Secs Background72295
24608
Node: Ld Sections77334
24609
Node: As Sections79718
24610
Node: Sub-Sections80628
24611
Node: bss83773
24612
Node: Symbols84723
24613
Node: Labels85371
24614
Node: Setting Symbols86102
24615
Node: Symbol Names86656
24616
Node: Dot91947
24617
Node: Symbol Attributes92394
24618
Node: Symbol Value93131
24619
Node: Symbol Type94176
24620
Node: a.out Symbols94564
24621
Node: Symbol Desc94826
24622
Node: Symbol Other95121
24623
Node: COFF Symbols95290
24624
Node: SOM Symbols95963
24625
Node: Expressions96405
24626
Node: Empty Exprs97154
24627
Node: Integer Exprs97501
24628
Node: Arguments97896
24629
Node: Operators99002
24630
Node: Prefix Ops99337
24631
Node: Infix Ops99665
24632
Node: Pseudo Ops102055
24633
Node: Abort107679
24634
Node: ABORT (COFF)108091
24635
Node: Align108299
24636
Node: Altmacro110581
24637
Node: Ascii111910
24638
Node: Asciz112219
24639
Node: Balign112464
24640
Node: Bundle directives114340
24641
Node: Byte117269
24642
Node: CFI directives117530
24643
Node: Comm123159
24644
Ref: Comm-Footnote-1124760
24645
Node: Data125122
24646
Node: Def125439
24647
Node: Desc125671
24648
Node: Dim126171
24649
Node: Double126428
24650
Node: Eject126766
24651
Node: Else126941
24652
Node: Elseif127241
24653
Node: End127535
24654
Node: Endef127750
24655
Node: Endfunc127927
24656
Node: Endif128102
24657
Node: Equ128363
24658
Node: Equiv128877
24659
Node: Eqv129433
24660
Node: Err129797
24661
Node: Error130108
24662
Node: Exitm130553
24663
Node: Extern130722
24664
Node: Fail130983
24665
Node: File131428
24666
Node: Fill132757
24667
Node: Float133721
24668
Node: Func134063
24669
Node: Global134653
24670
Node: Gnu_attribute135410
24671
Node: Hidden135635
24672
Node: hword136221
24673
Node: Ident136549
24674
Node: If137123
24675
Node: Incbin140182
24676
Node: Include140877
24677
Node: Int141428
24678
Node: Internal141809
24679
Node: Irp142457
24680
Node: Irpc143336
24681
Node: Lcomm144253
24682
Node: Lflags145001
24683
Node: Line145195
24684
Node: Linkonce146108
24685
Node: List147337
24686
Node: Ln147945
24687
Node: Loc148095
24688
Node: Loc_mark_labels149481
24689
Node: Local149965
24690
Node: Long150577
24691
Node: Macro150755
24692
Node: MRI156677
24693
Node: Noaltmacro157015
24694
Node: Nolist157184
24695
Node: Octa157614
24696
Node: Offset157951
24697
Node: Org158278
24698
Node: P2align159563
24699
Node: PopSection161491
24700
Node: Previous161999
24701
Node: Print163412
24702
Node: Protected163641
24703
Node: Psize164288
24704
Node: Purgem164972
24705
Node: PushSection165193
24706
Node: Quad165936
24707
Node: Reloc166392
24708
Node: Rept167153
24709
Node: Sbttl167567
24710
Node: Scl167932
24711
Node: Section168273
24712
Node: Set174427
24713
Node: Short175000
24714
Node: Single175323
24715
Node: Size175670
24716
Node: Skip176344
24717
Node: Sleb128176668
24718
Node: Space176992
24719
Node: Stab177633
24720
Node: String179637
24721
Node: Struct180631
24722
Node: SubSection181356
24723
Node: Symver181919
24724
Node: Tag184312
24725
Node: Text184694
24726
Node: Title185015
24727
Node: Type185396
24728
Node: Uleb128187709
24729
Node: Val188033
24730
Node: Version188283
24731
Node: VTableEntry188558
24732
Node: VTableInherit188848
24733
Node: Warning189298
24734
Node: Weak189532
24735
Node: Weakref190201
24736
Node: Word191166
24737
Node: Deprecated193012
24738
Node: Object Attributes193247
24739
Node: GNU Object Attributes194967
24740
Node: Defining New Object Attributes197520
24741
Node: Machine Dependencies198317
24742
Node: AArch64-Dependent202022
24743
Node: AArch64 Options202468
24744
Node: AArch64 Syntax202877
24745
Node: AArch64-Chars203174
24746
Node: AArch64-Regs203660
24747
Node: AArch64-Relocations203954
24748
Node: AArch64 Floating Point205033
24749
Node: AArch64 Directives205258
24750
Node: AArch64 Opcodes206806
24751
Node: AArch64 Mapping Symbols207485
24752
Node: Alpha-Dependent207867
24753
Node: Alpha Notes208307
24754
Node: Alpha Options208588
24755
Node: Alpha Syntax211063
24756
Node: Alpha-Chars211532
24757
Node: Alpha-Regs211944
24758
Node: Alpha-Relocs212331
24759
Node: Alpha Floating Point218589
24760
Node: Alpha Directives218811
24761
Node: Alpha Opcodes224334
24762
Node: ARC-Dependent224629
24763
Node: ARC Options225012
24764
Node: ARC Syntax226081
24765
Node: ARC-Chars226313
24766
Node: ARC-Regs226794
24767
Node: ARC Floating Point226918
24768
Node: ARC Directives227229
24769
Node: ARC Opcodes233201
24770
Node: ARM-Dependent233427
24771
Node: ARM Options233892
24772
Node: ARM Syntax242700
24773
Node: ARM-Instruction-Set243068
24774
Node: ARM-Chars244300
24775
Node: ARM-Regs245011
24776
Node: ARM-Neon-Alignment245220
24777
Node: ARM Floating Point245684
24778
Node: ARM-Relocations245883
24779
Node: ARM Directives247017
24780
Ref: arm_pad248334
24781
Ref: arm_fnend251671
24782
Ref: arm_fnstart251995
24783
Ref: arm_save255005
24784
Ref: arm_setfp255706
24785
Node: ARM Opcodes258998
24786
Node: ARM Mapping Symbols261086
24787
Node: ARM Unwinding Tutorial261896
24788
Node: AVR-Dependent268096
24789
Node: AVR Options268386
24790
Node: AVR Syntax273178
24791
Node: AVR-Chars273465
24792
Node: AVR-Regs274024
24793
Node: AVR-Modifiers274603
24794
Node: AVR Opcodes276663
24795
Node: Blackfin-Dependent281909
24796
Node: Blackfin Options282221
24797
Node: Blackfin Syntax283195
24798
Node: Blackfin Directives289402
24799
Node: CR16-Dependent290148
24800
Node: CR16 Operand Qualifiers290448
24801
Node: CR16 Syntax293109
24802
Node: CR16-Chars293295
24803
Node: CRIS-Dependent293832
24804
Node: CRIS-Opts294178
24805
Ref: march-option295864
24806
Node: CRIS-Expand297681
24807
Node: CRIS-Symbols298864
24808
Node: CRIS-Syntax300033
24809
Node: CRIS-Chars300369
24810
Node: CRIS-Pic300920
24811
Ref: crispic301116
24812
Node: CRIS-Regs304656
24813
Node: CRIS-Pseudos305073
24814
Ref: crisnous305849
24815
Node: D10V-Dependent307131
24816
Node: D10V-Opts307482
24817
Node: D10V-Syntax308444
24818
Node: D10V-Size308973
24819
Node: D10V-Subs309946
24820
Node: D10V-Chars310981
24821
Node: D10V-Regs312893
24822
Node: D10V-Addressing313938
24823
Node: D10V-Word314624
24824
Node: D10V-Float315139
24825
Node: D10V-Opcodes315450
24826
Node: D30V-Dependent315843
24827
Node: D30V-Opts316200
24828
Node: D30V-Syntax316877
24829
Node: D30V-Size317411
24830
Node: D30V-Subs318384
24831
Node: D30V-Chars319421
24832
Node: D30V-Guarded322029
24833
Node: D30V-Regs322711
24834
Node: D30V-Addressing323852
24835
Node: D30V-Float324522
24836
Node: D30V-Opcodes324835
24837
Node: Epiphany-Dependent325230
24838
Node: Epiphany Options325518
24839
Node: Epiphany Syntax325917
24840
Node: Epiphany-Chars326118
24841
Node: H8/300-Dependent326672
24842
Node: H8/300 Options327088
24843
Node: H8/300 Syntax327355
24844
Node: H8/300-Chars327656
24845
Node: H8/300-Regs327955
24846
Node: H8/300-Addressing328874
24847
Node: H8/300 Floating Point329915
24848
Node: H8/300 Directives330242
24849
Node: H8/300 Opcodes331370
24850
Node: HPPA-Dependent339692
24851
Node: HPPA Notes340127
24852
Node: HPPA Options340885
24853
Node: HPPA Syntax341080
24854
Node: HPPA Floating Point342350
24855
Node: HPPA Directives342556
24856
Node: HPPA Opcodes351242
24857
Node: ESA/390-Dependent351501
24858
Node: ESA/390 Notes351961
24859
Node: ESA/390 Options352752
24860
Node: ESA/390 Syntax352962
24861
Node: ESA/390 Floating Point355135
24862
Node: ESA/390 Directives355414
24863
Node: ESA/390 Opcodes358703
24864
Node: i386-Dependent358965
24865
Node: i386-Options360295
24866
Node: i386-Directives364869
24867
Node: i386-Syntax365607
24868
Node: i386-Variations365912
24869
Node: i386-Chars368453
24870
Node: i386-Mnemonics369182
24871
Node: i386-Regs372493
24872
Node: i386-Prefixes374538
24873
Node: i386-Memory377298
24874
Node: i386-Jumps380235
24875
Node: i386-Float381356
24876
Node: i386-SIMD383187
24877
Node: i386-LWP384296
24878
Node: i386-BMI385130
24879
Node: i386-TBM385508
24880
Node: i386-16bit386038
24881
Node: i386-Bugs388109
24882
Node: i386-Arch388863
24883
Node: i386-Notes391699
24884
Node: i860-Dependent392557
24885
Node: Notes-i860392997
24886
Node: Options-i860393902
24887
Node: Directives-i860395265
24888
Node: Opcodes for i860396334
24889
Node: Syntax of i860398524
24890
Node: i860-Chars398708
24891
Node: i960-Dependent399267
24892
Node: Options-i960399714
24893
Node: Floating Point-i960403599
24894
Node: Directives-i960403867
24895
Node: Opcodes for i960405901
24896
Node: callj-i960406541
24897
Node: Compare-and-branch-i960407030
24898
Node: Syntax of i960408934
24899
Node: i960-Chars409134
24900
Node: IA-64-Dependent409677
24901
Node: IA-64 Options409978
24902
Node: IA-64 Syntax413129
24903
Node: IA-64-Chars413535
24904
Node: IA-64-Regs413765
24905
Node: IA-64-Bits414691
24906
Node: IA-64-Relocs415221
24907
Node: IA-64 Opcodes415693
24908
Node: IP2K-Dependent415965
24909
Node: IP2K-Opts416237
24910
Node: IP2K-Syntax416737
24911
Node: IP2K-Chars416911
24912
Node: LM32-Dependent417454
24913
Node: LM32 Options417749
24914
Node: LM32 Syntax418383
24915
Node: LM32-Regs418679
24916
Node: LM32-Modifiers419638
24917
Node: LM32-Chars421013
24918
Node: LM32 Opcodes421521
24919
Node: M32C-Dependent421825
24920
Node: M32C-Opts422334
24921
Node: M32C-Syntax422754
24922
Node: M32C-Modifiers422989
24923
Node: M32C-Chars424778
24924
Node: M32R-Dependent425344
24925
Node: M32R-Opts425665
24926
Node: M32R-Directives429832
24927
Node: M32R-Warnings433807
24928
Node: M68K-Dependent436813
24929
Node: M68K-Opts437280
24930
Node: M68K-Syntax444653
24931
Node: M68K-Moto-Syntax446493
24932
Node: M68K-Float449083
24933
Node: M68K-Directives449603
24934
Node: M68K-opcodes450931
24935
Node: M68K-Branch451157
24936
Node: M68K-Chars455355
24937
Node: M68HC11-Dependent456218
24938
Node: M68HC11-Opts456755
24939
Node: M68HC11-Syntax461060
24940
Node: M68HC11-Modifiers463851
24941
Node: M68HC11-Directives465679
24942
Node: M68HC11-Float467055
24943
Node: M68HC11-opcodes467583
24944
Node: M68HC11-Branch467765
24945
Node: MicroBlaze-Dependent470214
24946
Node: MicroBlaze Directives470906
24947
Node: MicroBlaze Syntax472289
24948
Node: MicroBlaze-Chars472521
24949
Node: MIPS-Dependent473073
24950
Node: MIPS Opts474301
24951
Node: MIPS Object485375
24952
Node: MIPS Stabs486941
24953
Node: MIPS symbol sizes487663
24954
Node: MIPS ISA489332
24955
Node: MIPS autoextend491069
24956
Node: MIPS insn491799
24957
Node: MIPS option stack493084
24958
Node: MIPS ASE instruction generation overrides493858
24959
Node: MIPS floating-point495896
24960
Node: MIPS Syntax496802
24961
Node: MIPS-Chars497064
24962
Node: MMIX-Dependent497606
24963
Node: MMIX-Opts497986
24964
Node: MMIX-Expand501590
24965
Node: MMIX-Syntax502905
24966
Ref: mmixsite503262
24967
Node: MMIX-Chars504103
24968
Node: MMIX-Symbols504977
24969
Node: MMIX-Regs507045
24970
Node: MMIX-Pseudos508070
24971
Ref: MMIX-loc508211
24972
Ref: MMIX-local509291
24973
Ref: MMIX-is509823
24974
Ref: MMIX-greg510094
24975
Ref: GREG-base511013
24976
Ref: MMIX-byte512330
24977
Ref: MMIX-constants512801
24978
Ref: MMIX-prefix513447
24979
Ref: MMIX-spec513821
24980
Node: MMIX-mmixal514155
24981
Node: MSP430-Dependent517653
24982
Node: MSP430 Options518122
24983
Node: MSP430 Syntax518408
24984
Node: MSP430-Macros518724
24985
Node: MSP430-Chars519455
24986
Node: MSP430-Regs520170
24987
Node: MSP430-Ext520730
24988
Node: MSP430 Floating Point522551
24989
Node: MSP430 Directives522775
24990
Node: MSP430 Opcodes523566
24991
Node: MSP430 Profiling Capability523961
24992
Node: NS32K-Dependent526290
24993
Node: NS32K Syntax526513
24994
Node: NS32K-Chars526662
24995
Node: PDP-11-Dependent527402
24996
Node: PDP-11-Options527791
24997
Node: PDP-11-Pseudos532862
24998
Node: PDP-11-Syntax533207
24999
Node: PDP-11-Mnemonics534039
25000
Node: PDP-11-Synthetic534341
25001
Node: PJ-Dependent534559
25002
Node: PJ Options534822
25003
Node: PJ Syntax535117
25004
Node: PJ-Chars535282
25005
Node: PPC-Dependent535831
25006
Node: PowerPC-Opts536164
25007
Node: PowerPC-Pseudo539489
25008
Node: PowerPC-Syntax540111
25009
Node: PowerPC-Chars540301
25010
Node: RL78-Dependent541052
25011
Node: RL78-Opts541450
25012
Node: RL78-Modifiers541633
25013
Node: RL78-Directives542409
25014
Node: RL78-Syntax542907
25015
Node: RL78-Chars543103
25016
Node: RX-Dependent543659
25017
Node: RX-Opts544090
25018
Node: RX-Modifiers547204
25019
Node: RX-Directives548308
25020
Node: RX-Float549048
25021
Node: RX-Syntax549689
25022
Node: RX-Chars549868
25023
Node: S/390-Dependent550420
25024
Node: s390 Options551136
25025
Node: s390 Characters552682
25026
Node: s390 Syntax553203
25027
Node: s390 Register554104
25028
Node: s390 Mnemonics554917
25029
Node: s390 Operands557937
25030
Node: s390 Formats560556
25031
Node: s390 Aliases568402
25032
Node: s390 Operand Modifier572299
25033
Node: s390 Instruction Marker576100
25034
Node: s390 Literal Pool Entries577116
25035
Node: s390 Directives579039
25036
Node: s390 Floating Point584095
25037
Node: SCORE-Dependent584541
25038
Node: SCORE-Opts584846
25039
Node: SCORE-Pseudo586134
25040
Node: SCORE-Syntax588211
25041
Node: SCORE-Chars588393
25042
Node: SH-Dependent588951
25043
Node: SH Options589362
25044
Node: SH Syntax590417
25045
Node: SH-Chars590690
25046
Node: SH-Regs591233
25047
Node: SH-Addressing591847
25048
Node: SH Floating Point592756
25049
Node: SH Directives593850
25050
Node: SH Opcodes594251
25051
Node: SH64-Dependent598573
25052
Node: SH64 Options598936
25053
Node: SH64 Syntax600733
25054
Node: SH64-Chars601016
25055
Node: SH64-Regs601565
25056
Node: SH64-Addressing602661
25057
Node: SH64 Directives603844
25058
Node: SH64 Opcodes604829
25059
Node: Sparc-Dependent605545
25060
Node: Sparc-Opts605957
25061
Node: Sparc-Aligned-Data610615
25062
Node: Sparc-Syntax611447
25063
Node: Sparc-Chars612021
25064
Node: Sparc-Regs612584
25065
Node: Sparc-Constants617695
25066
Node: Sparc-Relocs622455
25067
Node: Sparc-Size-Translations627591
25068
Node: Sparc-Float629240
25069
Node: Sparc-Directives629435
25070
Node: TIC54X-Dependent631395
25071
Node: TIC54X-Opts632158
25072
Node: TIC54X-Block633201
25073
Node: TIC54X-Env633561
25074
Node: TIC54X-Constants633909
25075
Node: TIC54X-Subsyms634311
25076
Node: TIC54X-Locals636220
25077
Node: TIC54X-Builtins636964
25078
Node: TIC54X-Ext639435
25079
Node: TIC54X-Directives640006
25080
Node: TIC54X-Macros650907
25081
Node: TIC54X-MMRegs653018
25082
Node: TIC54X-Syntax653256
25083
Node: TIC54X-Chars653446
25084
Node: TIC6X-Dependent654137
25085
Node: TIC6X Options654440
25086
Node: TIC6X Syntax656441
25087
Node: TIC6X Directives657543
25088
Node: TILE-Gx-Dependent659828
25089
Node: TILE-Gx Options660138
25090
Node: TILE-Gx Syntax660488
25091
Node: TILE-Gx Opcodes662722
25092
Node: TILE-Gx Registers663010
25093
Node: TILE-Gx Modifiers663782
25094
Node: TILE-Gx Directives668754
25095
Node: TILEPro-Dependent669658
25096
Node: TILEPro Options669967
25097
Node: TILEPro Syntax670151
25098
Node: TILEPro Opcodes672385
25099
Node: TILEPro Registers672676
25100
Node: TILEPro Modifiers673446
25101
Node: TILEPro Directives678211
25102
Node: Z80-Dependent679115
25103
Node: Z80 Options679503
25104
Node: Z80 Syntax680926
25105
Node: Z80-Chars681598
25106
Node: Z80-Regs682448
25107
Node: Z80-Case682800
25108
Node: Z80 Floating Point683245
25109
Node: Z80 Directives683439
25110
Node: Z80 Opcodes685064
25111
Node: Z8000-Dependent686408
25112
Node: Z8000 Options687369
25113
Node: Z8000 Syntax687586
25114
Node: Z8000-Chars687876
25115
Node: Z8000-Regs688358
25116
Node: Z8000-Addressing689148
25117
Node: Z8000 Directives690265
25118
Node: Z8000 Opcodes691874
25119
Node: Vax-Dependent701816
25120
Node: VAX-Opts702376
25121
Node: VAX-float706111
25122
Node: VAX-directives706743
25123
Node: VAX-opcodes707604
25124
Node: VAX-branch707993
25125
Node: VAX-operands710500
25126
Node: VAX-no711263
25127
Node: VAX-Syntax711519
25128
Node: VAX-Chars711685
25129
Node: V850-Dependent712239
25130
Node: V850 Options712637
25131
Node: V850 Syntax715996
25132
Node: V850-Chars716236
25133
Node: V850-Regs716780
25134
Node: V850 Floating Point718348
25135
Node: V850 Directives718554
25136
Node: V850 Opcodes720157
25137
Node: XGATE-Dependent726049
25138
Node: XGATE-Opts726469
25139
Node: XGATE-Syntax727460
25140
Node: XGATE-Directives729539
25141
Node: XGATE-Float729778
25142
Node: XGATE-opcodes730275
25143
Node: XSTORMY16-Dependent730387
25144
Node: XStormy16 Syntax730733
25145
Node: XStormy16-Chars730923
25146
Node: XStormy16 Directives731536
25147
Node: XStormy16 Opcodes732191
25148
Node: Xtensa-Dependent733247
25149
Node: Xtensa Options733981
25150
Node: Xtensa Syntax736718
25151
Node: Xtensa Opcodes738862
25152
Node: Xtensa Registers740656
25153
Node: Xtensa Optimizations741289
25154
Node: Density Instructions741741
25155
Node: Xtensa Automatic Alignment742843
25156
Node: Xtensa Relaxation745290
25157
Node: Xtensa Branch Relaxation746198
25158
Node: Xtensa Call Relaxation747570
25159
Node: Xtensa Immediate Relaxation749356
25160
Node: Xtensa Directives751930
25161
Node: Schedule Directive753639
25162
Node: Longcalls Directive753979
25163
Node: Transform Directive754523
25164
Node: Literal Directive755265
25165
Ref: Literal Directive-Footnote-1758804
25166
Node: Literal Position Directive758946
25167
Node: Literal Prefix Directive760645
25168
Node: Absolute Literals Directive761543
25169
Node: Reporting Bugs762850
25170
Node: Bug Criteria763576
25171
Node: Bug Reporting764343
25172
Node: Acknowledgements770992
25173
Ref: Acknowledgements-Footnote-1775957
25174
Node: GNU Free Documentation License775983

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.