diff options
Diffstat (limited to 'binutils-2.24/gas/doc/as.info')
-rw-r--r-- | binutils-2.24/gas/doc/as.info | 25878 |
1 files changed, 0 insertions, 25878 deletions
diff --git a/binutils-2.24/gas/doc/as.info b/binutils-2.24/gas/doc/as.info deleted file mode 100644 index 67e22abe..00000000 --- a/binutils-2.24/gas/doc/as.info +++ /dev/null @@ -1,25878 +0,0 @@ -This is as.info, produced by makeinfo version 4.8 from as.texinfo. - -INFO-DIR-SECTION Software development -START-INFO-DIR-ENTRY -* As: (as). The GNU assembler. -* Gas: (as). The GNU assembler. -END-INFO-DIR-ENTRY - - This file documents the GNU Assembler "as". - - Copyright (C) 1991-2013 Free Software Foundation, Inc. - - Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.3 or -any later version published by the Free Software Foundation; with no -Invariant Sections, with no Front-Cover Texts, and with no Back-Cover -Texts. A copy of the license is included in the section entitled "GNU -Free Documentation License". - - -File: as.info, Node: Top, Next: Overview, Up: (dir) - -Using as -******** - -This file is a user guide to the GNU assembler `as' (GNU Binutils) -version 2.23.91. - - This document is distributed under the terms of the GNU Free -Documentation License. A copy of the license is included in the -section entitled "GNU Free Documentation License". - -* Menu: - -* Overview:: Overview -* Invoking:: Command-Line Options -* Syntax:: Syntax -* Sections:: Sections and Relocation -* Symbols:: Symbols -* Expressions:: Expressions -* Pseudo Ops:: Assembler Directives - -* Object Attributes:: Object Attributes -* Machine Dependencies:: Machine Dependent Features -* Reporting Bugs:: Reporting Bugs -* Acknowledgements:: Who Did What -* GNU Free Documentation License:: GNU Free Documentation License -* AS Index:: AS Index - - -File: as.info, Node: Overview, Next: Invoking, Prev: Top, Up: Top - -1 Overview -********** - -Here is a brief summary of how to invoke `as'. For details, see *Note -Command-Line Options: Invoking. - - as [-a[cdghlns][=FILE]] [-alternate] [-D] - [-compress-debug-sections] [-nocompress-debug-sections] - [-debug-prefix-map OLD=NEW] - [-defsym SYM=VAL] [-f] [-g] [-gstabs] - [-gstabs+] [-gdwarf-2] [-gdwarf-sections] - [-help] [-I DIR] [-J] - [-K] [-L] [-listing-lhs-width=NUM] - [-listing-lhs-width2=NUM] [-listing-rhs-width=NUM] - [-listing-cont-lines=NUM] [-keep-locals] [-o - OBJFILE] [-R] [-reduce-memory-overheads] [-statistics] - [-v] [-version] [-version] [-W] [-warn] - [-fatal-warnings] [-w] [-x] [-Z] [@FILE] - [-size-check=[error|warning]] - [-target-help] [TARGET-OPTIONS] - [-|FILES ...] - - _Target AArch64 options:_ - [-EB|-EL] - [-mabi=ABI] - - _Target Alpha options:_ - [-mCPU] - [-mdebug | -no-mdebug] - [-replace | -noreplace] - [-relax] [-g] [-GSIZE] - [-F] [-32addr] - - _Target ARC options:_ - [-marc[5|6|7|8]] - [-EB|-EL] - - _Target ARM options:_ - [-mcpu=PROCESSOR[+EXTENSION...]] - [-march=ARCHITECTURE[+EXTENSION...]] - [-mfpu=FLOATING-POINT-FORMAT] - [-mfloat-abi=ABI] - [-meabi=VER] - [-mthumb] - [-EB|-EL] - [-mapcs-32|-mapcs-26|-mapcs-float| - -mapcs-reentrant] - [-mthumb-interwork] [-k] - - _Target Blackfin options:_ - [-mcpu=PROCESSOR[-SIREVISION]] - [-mfdpic] - [-mno-fdpic] - [-mnopic] - - _Target CRIS options:_ - [-underscore | -no-underscore] - [-pic] [-N] - [-emulation=criself | -emulation=crisaout] - [-march=v0_v10 | -march=v10 | -march=v32 | -march=common_v10_v32] - - _Target D10V options:_ - [-O] - - _Target D30V options:_ - [-O|-n|-N] - - _Target EPIPHANY options:_ - [-mepiphany|-mepiphany16] - - _Target H8/300 options:_ - [-h-tick-hex] - - _Target i386 options:_ - [-32|-x32|-64] [-n] - [-march=CPU[+EXTENSION...]] [-mtune=CPU] - - _Target i960 options:_ - [-ACA|-ACA_A|-ACB|-ACC|-AKA|-AKB| - -AKC|-AMC] - [-b] [-no-relax] - - _Target IA-64 options:_ - [-mconstant-gp|-mauto-pic] - [-milp32|-milp64|-mlp64|-mp64] - [-mle|mbe] - [-mtune=itanium1|-mtune=itanium2] - [-munwind-check=warning|-munwind-check=error] - [-mhint.b=ok|-mhint.b=warning|-mhint.b=error] - [-x|-xexplicit] [-xauto] [-xdebug] - - _Target IP2K options:_ - [-mip2022|-mip2022ext] - - _Target M32C options:_ - [-m32c|-m16c] [-relax] [-h-tick-hex] - - _Target M32R options:_ - [-m32rx|-[no-]warn-explicit-parallel-conflicts| - -W[n]p] - - _Target M680X0 options:_ - [-l] [-m68000|-m68010|-m68020|...] - - _Target M68HC11 options:_ - [-m68hc11|-m68hc12|-m68hcs12|-mm9s12x|-mm9s12xg] - [-mshort|-mlong] - [-mshort-double|-mlong-double] - [-force-long-branches] [-short-branches] - [-strict-direct-mode] [-print-insn-syntax] - [-print-opcodes] [-generate-example] - - _Target MCORE options:_ - [-jsri2bsr] [-sifilter] [-relax] - [-mcpu=[210|340]] - - _Target Meta options:_ - [-mcpu=CPU] [-mfpu=CPU] [-mdsp=CPU] - _Target MICROBLAZE options:_ - - _Target MIPS options:_ - [-nocpp] [-EL] [-EB] [-O[OPTIMIZATION LEVEL]] - [-g[DEBUG LEVEL]] [-G NUM] [-KPIC] [-call_shared] - [-non_shared] [-xgot [-mvxworks-pic] - [-mabi=ABI] [-32] [-n32] [-64] [-mfp32] [-mgp32] - [-march=CPU] [-mtune=CPU] [-mips1] [-mips2] - [-mips3] [-mips4] [-mips5] [-mips32] [-mips32r2] - [-mips64] [-mips64r2] - [-construct-floats] [-no-construct-floats] - [-mnan=ENCODING] - [-trap] [-no-break] [-break] [-no-trap] - [-mips16] [-no-mips16] - [-mmicromips] [-mno-micromips] - [-msmartmips] [-mno-smartmips] - [-mips3d] [-no-mips3d] - [-mdmx] [-no-mdmx] - [-mdsp] [-mno-dsp] - [-mdspr2] [-mno-dspr2] - [-mmt] [-mno-mt] - [-mmcu] [-mno-mcu] - [-minsn32] [-mno-insn32] - [-mfix7000] [-mno-fix7000] - [-mfix-vr4120] [-mno-fix-vr4120] - [-mfix-vr4130] [-mno-fix-vr4130] - [-mdebug] [-no-mdebug] - [-mpdr] [-mno-pdr] - - _Target MMIX options:_ - [-fixed-special-register-names] [-globalize-symbols] - [-gnu-syntax] [-relax] [-no-predefined-symbols] - [-no-expand] [-no-merge-gregs] [-x] - [-linker-allocated-gregs] - - _Target Nios II options:_ - [-relax-all] [-relax-section] [-no-relax] - [-EB] [-EL] - - _Target PDP11 options:_ - [-mpic|-mno-pic] [-mall] [-mno-extensions] - [-mEXTENSION|-mno-EXTENSION] - [-mCPU] [-mMACHINE] - - _Target picoJava options:_ - [-mb|-me] - - _Target PowerPC options:_ - [-a32|-a64] - [-mpwrx|-mpwr2|-mpwr|-m601|-mppc|-mppc32|-m603|-m604|-m403|-m405| - -m440|-m464|-m476|-m7400|-m7410|-m7450|-m7455|-m750cl|-mppc64| - -m620|-me500|-e500x2|-me500mc|-me500mc64|-me5500|-me6500|-mppc64bridge| - -mbooke|-mpower4|-mpwr4|-mpower5|-mpwr5|-mpwr5x|-mpower6|-mpwr6| - -mpower7|-mpwr7|-mpower8|-mpwr8|-ma2|-mcell|-mspe|-mtitan|-me300|-mcom] - [-many] [-maltivec|-mvsx|-mhtm|-mvle] - [-mregnames|-mno-regnames] - [-mrelocatable|-mrelocatable-lib|-K PIC] [-memb] - [-mlittle|-mlittle-endian|-le|-mbig|-mbig-endian|-be] - [-msolaris|-mno-solaris] - [-nops=COUNT] - - _Target RX options:_ - [-mlittle-endian|-mbig-endian] - [-m32bit-doubles|-m64bit-doubles] - [-muse-conventional-section-names] - [-msmall-data-limit] - [-mpid] - [-mrelax] - [-mint-register=NUMBER] - [-mgcc-abi|-mrx-abi] - - _Target s390 options:_ - [-m31|-m64] [-mesa|-mzarch] [-march=CPU] - [-mregnames|-mno-regnames] - [-mwarn-areg-zero] - - _Target SCORE options:_ - [-EB][-EL][-FIXDD][-NWARN] - [-SCORE5][-SCORE5U][-SCORE7][-SCORE3] - [-march=score7][-march=score3] - [-USE_R1][-KPIC][-O0][-G NUM][-V] - - _Target SPARC options:_ - [-Av6|-Av7|-Av8|-Asparclet|-Asparclite - -Av8plus|-Av8plusa|-Av9|-Av9a] - [-xarch=v8plus|-xarch=v8plusa] [-bump] - [-32|-64] - - _Target TIC54X options:_ - [-mcpu=54[123589]|-mcpu=54[56]lp] [-mfar-mode|-mf] - [-merrors-to-file <FILENAME>|-me <FILENAME>] - - - _Target TIC6X options:_ - [-march=ARCH] [-mbig-endian|-mlittle-endian] - [-mdsbt|-mno-dsbt] [-mpid=no|-mpid=near|-mpid=far] - [-mpic|-mno-pic] - - _Target TILE-Gx options:_ - [-m32|-m64][-EB][-EL] - - - _Target Xtensa options:_ - [-[no-]text-section-literals] [-[no-]absolute-literals] - [-[no-]target-align] [-[no-]longcalls] - [-[no-]transform] - [-rename-section OLDNAME=NEWNAME] - - - _Target Z80 options:_ - [-z80] [-r800] - [ -ignore-undocumented-instructions] [-Wnud] - [ -ignore-unportable-instructions] [-Wnup] - [ -warn-undocumented-instructions] [-Wud] - [ -warn-unportable-instructions] [-Wup] - [ -forbid-undocumented-instructions] [-Fud] - [ -forbid-unportable-instructions] [-Fup] - -`@FILE' - Read command-line options from FILE. The options read are - inserted in place of the original @FILE option. If FILE does not - exist, or cannot be read, then the option will be treated - literally, and not removed. - - Options in FILE are separated by whitespace. A whitespace - character may be included in an option by surrounding the entire - option in either single or double quotes. Any character - (including a backslash) may be included by prefixing the character - to be included with a backslash. The FILE may itself contain - additional @FILE options; any such options will be processed - recursively. - -`-a[cdghlmns]' - Turn on listings, in any of a variety of ways: - - `-ac' - omit false conditionals - - `-ad' - omit debugging directives - - `-ag' - include general information, like as version and options - passed - - `-ah' - include high-level source - - `-al' - include assembly - - `-am' - include macro expansions - - `-an' - omit forms processing - - `-as' - include symbols - - `=file' - set the name of the listing file - - You may combine these options; for example, use `-aln' for assembly - listing without forms processing. The `=file' option, if used, - must be the last one. By itself, `-a' defaults to `-ahls'. - -`--alternate' - Begin in alternate macro mode. *Note `.altmacro': Altmacro. - -`--compress-debug-sections' - Compress DWARF debug sections using zlib. The debug sections are - renamed to begin with `.zdebug', and the resulting object file may - not be compatible with older linkers and object file utilities. - -`--nocompress-debug-sections' - Do not compress DWARF debug sections. This is the default. - -`-D' - Ignored. This option is accepted for script compatibility with - calls to other assemblers. - -`--debug-prefix-map OLD=NEW' - When assembling files in directory `OLD', record debugging - information describing them as in `NEW' instead. - -`--defsym SYM=VALUE' - Define the symbol SYM to be VALUE before assembling the input file. - VALUE must be an integer constant. As in C, a leading `0x' - indicates a hexadecimal value, and a leading `0' indicates an octal - value. The value of the symbol can be overridden inside a source - file via the use of a `.set' pseudo-op. - -`-f' - "fast"--skip whitespace and comment preprocessing (assume source is - compiler output). - -`-g' -`--gen-debug' - Generate debugging information for each assembler source line - using whichever debug format is preferred by the target. This - currently means either STABS, ECOFF or DWARF2. - -`--gstabs' - Generate stabs debugging information for each assembler line. This - may help debugging assembler code, if the debugger can handle it. - -`--gstabs+' - Generate stabs debugging information for each assembler line, with - GNU extensions that probably only gdb can handle, and that could - make other debuggers crash or refuse to read your program. This - may help debugging assembler code. Currently the only GNU - extension is the location of the current working directory at - assembling time. - -`--gdwarf-2' - Generate DWARF2 debugging information for each assembler line. - This may help debugging assembler code, if the debugger can handle - it. Note--this option is only supported by some targets, not all - of them. - -`--gdwarf-sections' - Instead of creating a .debug_line section, create a series of - .debug_line.FOO sections where FOO is the name of the - corresponding code section. For example a code section called - .TEXT.FUNC will have its dwarf line number information placed into - a section called .DEBUG_LINE.TEXT.FUNC. If the code section is - just called .TEXT then debug line section will still be called - just .DEBUG_LINE without any suffix. - -`--size-check=error' -`--size-check=warning' - Issue an error or warning for invalid ELF .size directive. - -`--help' - Print a summary of the command line options and exit. - -`--target-help' - Print a summary of all target specific options and exit. - -`-I DIR' - Add directory DIR to the search list for `.include' directives. - -`-J' - Don't warn about signed overflow. - -`-K' - Issue warnings when difference tables altered for long - displacements. - -`-L' -`--keep-locals' - Keep (in the symbol table) local symbols. These symbols start with - system-specific local label prefixes, typically `.L' for ELF - systems or `L' for traditional a.out systems. *Note Symbol - Names::. - -`--listing-lhs-width=NUMBER' - Set the maximum width, in words, of the output data column for an - assembler listing to NUMBER. - -`--listing-lhs-width2=NUMBER' - Set the maximum width, in words, of the output data column for - continuation lines in an assembler listing to NUMBER. - -`--listing-rhs-width=NUMBER' - Set the maximum width of an input source line, as displayed in a - listing, to NUMBER bytes. - -`--listing-cont-lines=NUMBER' - Set the maximum number of lines printed in a listing for a single - line of input to NUMBER + 1. - -`-o OBJFILE' - Name the object-file output from `as' OBJFILE. - -`-R' - Fold the data section into the text section. - - Set the default size of GAS's hash tables to a prime number close - to NUMBER. Increasing this value can reduce the length of time it - takes the assembler to perform its tasks, at the expense of - increasing the assembler's memory requirements. Similarly - reducing this value can reduce the memory requirements at the - expense of speed. - -`--reduce-memory-overheads' - This option reduces GAS's memory requirements, at the expense of - making the assembly processes slower. Currently this switch is a - synonym for `--hash-size=4051', but in the future it may have - other effects as well. - -`--statistics' - Print the maximum space (in bytes) and total time (in seconds) - used by assembly. - -`--strip-local-absolute' - Remove local absolute symbols from the outgoing symbol table. - -`-v' -`-version' - Print the `as' version. - -`--version' - Print the `as' version and exit. - -`-W' -`--no-warn' - Suppress warning messages. - -`--fatal-warnings' - Treat warnings as errors. - -`--warn' - Don't suppress warning messages or treat them as errors. - -`-w' - Ignored. - -`-x' - Ignored. - -`-Z' - Generate an object file even after errors. - -`-- | FILES ...' - Standard input, or source files to assemble. - - - *Note AArch64 Options::, for the options available when as is -configured for the 64-bit mode of the ARM Architecture (AArch64). - - *Note Alpha Options::, for the options available when as is -configured for an Alpha processor. - - The following options are available when as is configured for an ARC -processor. - -`-marc[5|6|7|8]' - This option selects the core processor variant. - -`-EB | -EL' - Select either big-endian (-EB) or little-endian (-EL) output. - - The following options are available when as is configured for the ARM -processor family. - -`-mcpu=PROCESSOR[+EXTENSION...]' - Specify which ARM processor variant is the target. - -`-march=ARCHITECTURE[+EXTENSION...]' - Specify which ARM architecture variant is used by the target. - -`-mfpu=FLOATING-POINT-FORMAT' - Select which Floating Point architecture is the target. - -`-mfloat-abi=ABI' - Select which floating point ABI is in use. - -`-mthumb' - Enable Thumb only instruction decoding. - -`-mapcs-32 | -mapcs-26 | -mapcs-float | -mapcs-reentrant' - Select which procedure calling convention is in use. - -`-EB | -EL' - Select either big-endian (-EB) or little-endian (-EL) output. - -`-mthumb-interwork' - Specify that the code has been generated with interworking between - Thumb and ARM code in mind. - -`-k' - Specify that PIC code has been generated. - - *Note Blackfin Options::, for the options available when as is -configured for the Blackfin processor family. - - See the info pages for documentation of the CRIS-specific options. - - The following options are available when as is configured for a D10V -processor. -`-O' - Optimize output by parallelizing instructions. - - The following options are available when as is configured for a D30V -processor. -`-O' - Optimize output by parallelizing instructions. - -`-n' - Warn when nops are generated. - -`-N' - Warn when a nop after a 32-bit multiply instruction is generated. - - The following options are available when as is configured for the -Adapteva EPIPHANY series. - - *Note Epiphany Options::, for the options available when as is -configured for an Epiphany processor. - - *Note i386-Options::, for the options available when as is -configured for an i386 processor. - - The following options are available when as is configured for the -Intel 80960 processor. - -`-ACA | -ACA_A | -ACB | -ACC | -AKA | -AKB | -AKC | -AMC' - Specify which variant of the 960 architecture is the target. - -`-b' - Add code to collect statistics about branches taken. - -`-no-relax' - Do not alter compare-and-branch instructions for long - displacements; error if necessary. - - - The following options are available when as is configured for the -Ubicom IP2K series. - -`-mip2022ext' - Specifies that the extended IP2022 instructions are allowed. - -`-mip2022' - Restores the default behaviour, which restricts the permitted - instructions to just the basic IP2022 ones. - - - The following options are available when as is configured for the -Renesas M32C and M16C processors. - -`-m32c' - Assemble M32C instructions. - -`-m16c' - Assemble M16C instructions (the default). - -`-relax' - Enable support for link-time relaxations. - -`-h-tick-hex' - Support H'00 style hex constants in addition to 0x00 style. - - - The following options are available when as is configured for the -Renesas M32R (formerly Mitsubishi M32R) series. - -`--m32rx' - Specify which processor in the M32R family is the target. The - default is normally the M32R, but this option changes it to the - M32RX. - -`--warn-explicit-parallel-conflicts or --Wp' - Produce warning messages when questionable parallel constructs are - encountered. - -`--no-warn-explicit-parallel-conflicts or --Wnp' - Do not produce warning messages when questionable parallel - constructs are encountered. - - - The following options are available when as is configured for the -Motorola 68000 series. - -`-l' - Shorten references to undefined symbols, to one word instead of - two. - -`-m68000 | -m68008 | -m68010 | -m68020 | -m68030' -`| -m68040 | -m68060 | -m68302 | -m68331 | -m68332' -`| -m68333 | -m68340 | -mcpu32 | -m5200' - Specify what processor in the 68000 family is the target. The - default is normally the 68020, but this can be changed at - configuration time. - -`-m68881 | -m68882 | -mno-68881 | -mno-68882' - The target machine does (or does not) have a floating-point - coprocessor. The default is to assume a coprocessor for 68020, - 68030, and cpu32. Although the basic 68000 is not compatible with - the 68881, a combination of the two can be specified, since it's - possible to do emulation of the coprocessor instructions with the - main processor. - -`-m68851 | -mno-68851' - The target machine does (or does not) have a memory-management - unit coprocessor. The default is to assume an MMU for 68020 and - up. - - - *Note Nios II Options::, for the options available when as is -configured for an Altera Nios II processor. - - For details about the PDP-11 machine dependent features options, see -*Note PDP-11-Options::. - -`-mpic | -mno-pic' - Generate position-independent (or position-dependent) code. The - default is `-mpic'. - -`-mall' -`-mall-extensions' - Enable all instruction set extensions. This is the default. - -`-mno-extensions' - Disable all instruction set extensions. - -`-mEXTENSION | -mno-EXTENSION' - Enable (or disable) a particular instruction set extension. - -`-mCPU' - Enable the instruction set extensions supported by a particular - CPU, and disable all other extensions. - -`-mMACHINE' - Enable the instruction set extensions supported by a particular - machine model, and disable all other extensions. - - The following options are available when as is configured for a -picoJava processor. - -`-mb' - Generate "big endian" format output. - -`-ml' - Generate "little endian" format output. - - - The following options are available when as is configured for the -Motorola 68HC11 or 68HC12 series. - -`-m68hc11 | -m68hc12 | -m68hcs12 | -mm9s12x | -mm9s12xg' - Specify what processor is the target. The default is defined by - the configuration option when building the assembler. - -`--xgate-ramoffset' - Instruct the linker to offset RAM addresses from S12X address - space into XGATE address space. - -`-mshort' - Specify to use the 16-bit integer ABI. - -`-mlong' - Specify to use the 32-bit integer ABI. - -`-mshort-double' - Specify to use the 32-bit double ABI. - -`-mlong-double' - Specify to use the 64-bit double ABI. - -`--force-long-branches' - Relative branches are turned into absolute ones. This concerns - conditional branches, unconditional branches and branches to a sub - routine. - -`-S | --short-branches' - Do not turn relative branches into absolute ones when the offset - is out of range. - -`--strict-direct-mode' - Do not turn the direct addressing mode into extended addressing - mode when the instruction does not support direct addressing mode. - -`--print-insn-syntax' - Print the syntax of instruction in case of error. - -`--print-opcodes' - Print the list of instructions with syntax and then exit. - -`--generate-example' - Print an example of instruction for each possible instruction and - then exit. This option is only useful for testing `as'. - - - The following options are available when `as' is configured for the -SPARC architecture: - -`-Av6 | -Av7 | -Av8 | -Asparclet | -Asparclite' -`-Av8plus | -Av8plusa | -Av9 | -Av9a' - Explicitly select a variant of the SPARC architecture. - - `-Av8plus' and `-Av8plusa' select a 32 bit environment. `-Av9' - and `-Av9a' select a 64 bit environment. - - `-Av8plusa' and `-Av9a' enable the SPARC V9 instruction set with - UltraSPARC extensions. - -`-xarch=v8plus | -xarch=v8plusa' - For compatibility with the Solaris v9 assembler. These options are - equivalent to -Av8plus and -Av8plusa, respectively. - -`-bump' - Warn when the assembler switches to another architecture. - - The following options are available when as is configured for the -'c54x architecture. - -`-mfar-mode' - Enable extended addressing mode. All addresses and relocations - will assume extended addressing (usually 23 bits). - -`-mcpu=CPU_VERSION' - Sets the CPU version being compiled for. - -`-merrors-to-file FILENAME' - Redirect error output to a file, for broken systems which don't - support such behaviour in the shell. - - The following options are available when as is configured for a MIPS -processor. - -`-G NUM' - This option sets the largest size of an object that can be - referenced implicitly with the `gp' register. It is only accepted - for targets that use ECOFF format, such as a DECstation running - Ultrix. The default value is 8. - -`-EB' - Generate "big endian" format output. - -`-EL' - Generate "little endian" format output. - -`-mips1' -`-mips2' -`-mips3' -`-mips4' -`-mips5' -`-mips32' -`-mips32r2' -`-mips64' -`-mips64r2' - Generate code for a particular MIPS Instruction Set Architecture - level. `-mips1' is an alias for `-march=r3000', `-mips2' is an - alias for `-march=r6000', `-mips3' is an alias for `-march=r4000' - and `-mips4' is an alias for `-march=r8000'. `-mips5', `-mips32', - `-mips32r2', `-mips64', and `-mips64r2' correspond to generic MIPS - V, MIPS32, MIPS32 Release 2, MIPS64, and MIPS64 Release 2 ISA - processors, respectively. - -`-march=CPU' - Generate code for a particular MIPS CPU. - -`-mtune=CPU' - Schedule and tune for a particular MIPS CPU. - -`-mfix7000' -`-mno-fix7000' - Cause nops to be inserted if the read of the destination register - of an mfhi or mflo instruction occurs in the following two - instructions. - -`-mdebug' -`-no-mdebug' - Cause stabs-style debugging output to go into an ECOFF-style - .mdebug section instead of the standard ELF .stabs sections. - -`-mpdr' -`-mno-pdr' - Control generation of `.pdr' sections. - -`-mgp32' -`-mfp32' - The register sizes are normally inferred from the ISA and ABI, but - these flags force a certain group of registers to be treated as 32 - bits wide at all times. `-mgp32' controls the size of - general-purpose registers and `-mfp32' controls the size of - floating-point registers. - -`-mips16' -`-no-mips16' - Generate code for the MIPS 16 processor. This is equivalent to - putting `.set mips16' at the start of the assembly file. - `-no-mips16' turns off this option. - -`-mmicromips' -`-mno-micromips' - Generate code for the microMIPS processor. This is equivalent to - putting `.set micromips' at the start of the assembly file. - `-mno-micromips' turns off this option. This is equivalent to - putting `.set nomicromips' at the start of the assembly file. - -`-msmartmips' -`-mno-smartmips' - Enables the SmartMIPS extension to the MIPS32 instruction set. - This is equivalent to putting `.set smartmips' at the start of the - assembly file. `-mno-smartmips' turns off this option. - -`-mips3d' -`-no-mips3d' - Generate code for the MIPS-3D Application Specific Extension. - This tells the assembler to accept MIPS-3D instructions. - `-no-mips3d' turns off this option. - -`-mdmx' -`-no-mdmx' - Generate code for the MDMX Application Specific Extension. This - tells the assembler to accept MDMX instructions. `-no-mdmx' turns - off this option. - -`-mdsp' -`-mno-dsp' - Generate code for the DSP Release 1 Application Specific Extension. - This tells the assembler to accept DSP Release 1 instructions. - `-mno-dsp' turns off this option. - -`-mdspr2' -`-mno-dspr2' - Generate code for the DSP Release 2 Application Specific Extension. - This option implies -mdsp. This tells the assembler to accept DSP - Release 2 instructions. `-mno-dspr2' turns off this option. - -`-mmt' -`-mno-mt' - Generate code for the MT Application Specific Extension. This - tells the assembler to accept MT instructions. `-mno-mt' turns - off this option. - -`-mmcu' -`-mno-mcu' - Generate code for the MCU Application Specific Extension. This - tells the assembler to accept MCU instructions. `-mno-mcu' turns - off this option. - -`-minsn32' -`-mno-insn32' - Only use 32-bit instruction encodings when generating code for the - microMIPS processor. This option inhibits the use of any 16-bit - instructions. This is equivalent to putting `.set insn32' at the - start of the assembly file. `-mno-insn32' turns off this option. - This is equivalent to putting `.set noinsn32' at the start of the - assembly file. By default `-mno-insn32' is selected, allowing all - instructions to be used. - -`--construct-floats' -`--no-construct-floats' - The `--no-construct-floats' option disables the construction of - double width floating point constants by loading the two halves of - the value into the two single width floating point registers that - make up the double width register. By default - `--construct-floats' is selected, allowing construction of these - floating point constants. - -`--relax-branch' -`--no-relax-branch' - The `--relax-branch' option enables the relaxation of out-of-range - branches. By default `--no-relax-branch' is selected, causing any - out-of-range branches to produce an error. - -`-mnan=ENCODING' - Select between the IEEE 754-2008 (`-mnan=2008') or the legacy - (`-mnan=legacy') NaN encoding format. The latter is the default. - -`--emulation=NAME' - This option was formerly used to switch between ELF and ECOFF - output on targets like IRIX 5 that supported both. MIPS ECOFF - support was removed in GAS 2.24, so the option now serves little - purpose. It is retained for backwards compatibility. - - The available configuration names are: `mipself', `mipslelf' and - `mipsbelf'. Choosing `mipself' now has no effect, since the output - is always ELF. `mipslelf' and `mipsbelf' select little- and - big-endian output respectively, but `-EL' and `-EB' are now the - preferred options instead. - -`-nocpp' - `as' ignores this option. It is accepted for compatibility with - the native tools. - -`--trap' -`--no-trap' -`--break' -`--no-break' - Control how to deal with multiplication overflow and division by - zero. `--trap' or `--no-break' (which are synonyms) take a trap - exception (and only work for Instruction Set Architecture level 2 - and higher); `--break' or `--no-trap' (also synonyms, and the - default) take a break exception. - -`-n' - When this option is used, `as' will issue a warning every time it - generates a nop instruction from a macro. - - The following options are available when as is configured for an -MCore processor. - -`-jsri2bsr' -`-nojsri2bsr' - Enable or disable the JSRI to BSR transformation. By default this - is enabled. The command line option `-nojsri2bsr' can be used to - disable it. - -`-sifilter' -`-nosifilter' - Enable or disable the silicon filter behaviour. By default this - is disabled. The default can be overridden by the `-sifilter' - command line option. - -`-relax' - Alter jump instructions for long displacements. - -`-mcpu=[210|340]' - Select the cpu type on the target hardware. This controls which - instructions can be assembled. - -`-EB' - Assemble for a big endian target. - -`-EL' - Assemble for a little endian target. - - - *Note Meta Options::, for the options available when as is configured -for a Meta processor. - - See the info pages for documentation of the MMIX-specific options. - - *Note PowerPC-Opts::, for the options available when as is configured -for a PowerPC processor. - - See the info pages for documentation of the RX-specific options. - - The following options are available when as is configured for the -s390 processor family. - -`-m31' -`-m64' - Select the word size, either 31/32 bits or 64 bits. - -`-mesa' - -`-mzarch' - Select the architecture mode, either the Enterprise System - Architecture (esa) or the z/Architecture mode (zarch). - -`-march=PROCESSOR' - Specify which s390 processor variant is the target, `g6', `g6', - `z900', `z990', `z9-109', `z9-ec', `z10', `z196', or `zEC12'. - -`-mregnames' -`-mno-regnames' - Allow or disallow symbolic names for registers. - -`-mwarn-areg-zero' - Warn whenever the operand for a base or index register has been - specified but evaluates to zero. - - *Note TIC6X Options::, for the options available when as is -configured for a TMS320C6000 processor. - - *Note TILE-Gx Options::, for the options available when as is -configured for a TILE-Gx processor. - - *Note Xtensa Options::, for the options available when as is -configured for an Xtensa processor. - - The following options are available when as is configured for a Z80 -family processor. -`-z80' - Assemble for Z80 processor. - -`-r800' - Assemble for R800 processor. - -`-ignore-undocumented-instructions' -`-Wnud' - Assemble undocumented Z80 instructions that also work on R800 - without warning. - -`-ignore-unportable-instructions' -`-Wnup' - Assemble all undocumented Z80 instructions without warning. - -`-warn-undocumented-instructions' -`-Wud' - Issue a warning for undocumented Z80 instructions that also work - on R800. - -`-warn-unportable-instructions' -`-Wup' - Issue a warning for undocumented Z80 instructions that do not work - on R800. - -`-forbid-undocumented-instructions' -`-Fud' - Treat all undocumented instructions as errors. - -`-forbid-unportable-instructions' -`-Fup' - Treat undocumented Z80 instructions that do not work on R800 as - errors. - -* Menu: - -* Manual:: Structure of this Manual -* GNU Assembler:: The GNU Assembler -* Object Formats:: Object File Formats -* Command Line:: Command Line -* Input Files:: Input Files -* Object:: Output (Object) File -* Errors:: Error and Warning Messages - - -File: as.info, Node: Manual, Next: GNU Assembler, Up: Overview - -1.1 Structure of this Manual -============================ - -This manual is intended to describe what you need to know to use GNU -`as'. We cover the syntax expected in source files, including notation -for symbols, constants, and expressions; the directives that `as' -understands; and of course how to invoke `as'. - - This manual also describes some of the machine-dependent features of -various flavors of the assembler. - - On the other hand, this manual is _not_ intended as an introduction -to programming in assembly language--let alone programming in general! -In a similar vein, we make no attempt to introduce the machine -architecture; we do _not_ describe the instruction set, standard -mnemonics, registers or addressing modes that are standard to a -particular architecture. You may want to consult the manufacturer's -machine architecture manual for this information. - - -File: as.info, Node: GNU Assembler, Next: Object Formats, Prev: Manual, Up: Overview - -1.2 The GNU Assembler -===================== - -GNU `as' is really a family of assemblers. If you use (or have used) -the GNU assembler on one architecture, you should find a fairly similar -environment when you use it on another architecture. Each version has -much in common with the others, including object file formats, most -assembler directives (often called "pseudo-ops") and assembler syntax. - - `as' is primarily intended to assemble the output of the GNU C -compiler `gcc' for use by the linker `ld'. Nevertheless, we've tried -to make `as' assemble correctly everything that other assemblers for -the same machine would assemble. Any exceptions are documented -explicitly (*note Machine Dependencies::). This doesn't mean `as' -always uses the same syntax as another assembler for the same -architecture; for example, we know of several incompatible versions of -680x0 assembly language syntax. - - Unlike older assemblers, `as' is designed to assemble a source -program in one pass of the source file. This has a subtle impact on the -`.org' directive (*note `.org': Org.). - - -File: as.info, Node: Object Formats, Next: Command Line, Prev: GNU Assembler, Up: Overview - -1.3 Object File Formats -======================= - -The GNU assembler can be configured to produce several alternative -object file formats. For the most part, this does not affect how you -write assembly language programs; but directives for debugging symbols -are typically different in different file formats. *Note Symbol -Attributes: Symbol Attributes. - - -File: as.info, Node: Command Line, Next: Input Files, Prev: Object Formats, Up: Overview - -1.4 Command Line -================ - -After the program name `as', the command line may contain options and -file names. Options may appear in any order, and may be before, after, -or between file names. The order of file names is significant. - - `--' (two hyphens) by itself names the standard input file -explicitly, as one of the files for `as' to assemble. - - Except for `--' any command line argument that begins with a hyphen -(`-') is an option. Each option changes the behavior of `as'. No -option changes the way another option works. An option is a `-' -followed by one or more letters; the case of the letter is important. -All options are optional. - - Some options expect exactly one file name to follow them. The file -name may either immediately follow the option's letter (compatible with -older assemblers) or it may be the next command argument (GNU -standard). These two command lines are equivalent: - - as -o my-object-file.o mumble.s - as -omy-object-file.o mumble.s - - -File: as.info, Node: Input Files, Next: Object, Prev: Command Line, Up: Overview - -1.5 Input Files -=============== - -We use the phrase "source program", abbreviated "source", to describe -the program input to one run of `as'. The program may be in one or -more files; how the source is partitioned into files doesn't change the -meaning of the source. - - The source program is a concatenation of the text in all the files, -in the order specified. - - Each time you run `as' it assembles exactly one source program. The -source program is made up of one or more files. (The standard input is -also a file.) - - You give `as' a command line that has zero or more input file names. -The input files are read (from left file name to right). A command -line argument (in any position) that has no special meaning is taken to -be an input file name. - - If you give `as' no file names it attempts to read one input file -from the `as' standard input, which is normally your terminal. You may -have to type <ctl-D> to tell `as' there is no more program to assemble. - - Use `--' if you need to explicitly name the standard input file in -your command line. - - If the source is empty, `as' produces a small, empty object file. - -Filenames and Line-numbers --------------------------- - -There are two ways of locating a line in the input file (or files) and -either may be used in reporting error messages. One way refers to a -line number in a physical file; the other refers to a line number in a -"logical" file. *Note Error and Warning Messages: Errors. - - "Physical files" are those files named in the command line given to -`as'. - - "Logical files" are simply names declared explicitly by assembler -directives; they bear no relation to physical files. Logical file -names help error messages reflect the original source file, when `as' -source is itself synthesized from other files. `as' understands the -`#' directives emitted by the `gcc' preprocessor. See also *Note -`.file': File. - - -File: as.info, Node: Object, Next: Errors, Prev: Input Files, Up: Overview - -1.6 Output (Object) File -======================== - -Every time you run `as' it produces an output file, which is your -assembly language program translated into numbers. This file is the -object file. Its default name is `a.out'. You can give it another -name by using the `-o' option. Conventionally, object file names end -with `.o'. The default name is used for historical reasons: older -assemblers were capable of assembling self-contained programs directly -into a runnable program. (For some formats, this isn't currently -possible, but it can be done for the `a.out' format.) - - The object file is meant for input to the linker `ld'. It contains -assembled program code, information to help `ld' integrate the -assembled program into a runnable file, and (optionally) symbolic -information for the debugger. - - -File: as.info, Node: Errors, Prev: Object, Up: Overview - -1.7 Error and Warning Messages -============================== - -`as' may write warnings and error messages to the standard error file -(usually your terminal). This should not happen when a compiler runs -`as' automatically. Warnings report an assumption made so that `as' -could keep assembling a flawed program; errors report a grave problem -that stops the assembly. - - Warning messages have the format - - file_name:NNN:Warning Message Text - -(where NNN is a line number). If a logical file name has been given -(*note `.file': File.) it is used for the filename, otherwise the name -of the current input file is used. If a logical line number was given -(*note `.line': Line.) then it is used to calculate the number printed, -otherwise the actual line in the current source file is printed. The -message text is intended to be self explanatory (in the grand Unix -tradition). - - Error messages have the format - file_name:NNN:FATAL:Error Message Text - The file name and line number are derived as for warning messages. -The actual message text may be rather less explanatory because many of -them aren't supposed to happen. - - -File: as.info, Node: Invoking, Next: Syntax, Prev: Overview, Up: Top - -2 Command-Line Options -********************** - -This chapter describes command-line options available in _all_ versions -of the GNU assembler; see *Note Machine Dependencies::, for options -specific to particular machine architectures. - - If you are invoking `as' via the GNU C compiler, you can use the -`-Wa' option to pass arguments through to the assembler. The assembler -arguments must be separated from each other (and the `-Wa') by commas. -For example: - - gcc -c -g -O -Wa,-alh,-L file.c - -This passes two options to the assembler: `-alh' (emit a listing to -standard output with high-level and assembly source) and `-L' (retain -local symbols in the symbol table). - - Usually you do not need to use this `-Wa' mechanism, since many -compiler command-line options are automatically passed to the assembler -by the compiler. (You can call the GNU compiler driver with the `-v' -option to see precisely what options it passes to each compilation -pass, including the assembler.) - -* Menu: - -* a:: -a[cdghlns] enable listings -* alternate:: --alternate enable alternate macro syntax -* D:: -D for compatibility -* f:: -f to work faster -* I:: -I for .include search path - -* K:: -K for difference tables - -* L:: -L to retain local symbols -* listing:: --listing-XXX to configure listing output -* M:: -M or --mri to assemble in MRI compatibility mode -* MD:: --MD for dependency tracking -* o:: -o to name the object file -* R:: -R to join data and text sections -* statistics:: --statistics to see statistics about assembly -* traditional-format:: --traditional-format for compatible output -* v:: -v to announce version -* W:: -W, --no-warn, --warn, --fatal-warnings to control warnings -* Z:: -Z to make object file even after errors - - -File: as.info, Node: a, Next: alternate, Up: Invoking - -2.1 Enable Listings: `-a[cdghlns]' -================================== - -These options enable listing output from the assembler. By itself, -`-a' requests high-level, assembly, and symbols listing. You can use -other letters to select specific options for the list: `-ah' requests a -high-level language listing, `-al' requests an output-program assembly -listing, and `-as' requests a symbol table listing. High-level -listings require that a compiler debugging option like `-g' be used, -and that assembly listings (`-al') be requested also. - - Use the `-ag' option to print a first section with general assembly -information, like as version, switches passed, or time stamp. - - Use the `-ac' option to omit false conditionals from a listing. Any -lines which are not assembled because of a false `.if' (or `.ifdef', or -any other conditional), or a true `.if' followed by an `.else', will be -omitted from the listing. - - Use the `-ad' option to omit debugging directives from the listing. - - Once you have specified one of these options, you can further control -listing output and its appearance using the directives `.list', -`.nolist', `.psize', `.eject', `.title', and `.sbttl'. The `-an' -option turns off all forms processing. If you do not request listing -output with one of the `-a' options, the listing-control directives -have no effect. - - The letters after `-a' may be combined into one option, _e.g._, -`-aln'. - - Note if the assembler source is coming from the standard input (e.g., -because it is being created by `gcc' and the `-pipe' command line switch -is being used) then the listing will not contain any comments or -preprocessor directives. This is because the listing code buffers -input source lines from stdin only after they have been preprocessed by -the assembler. This reduces memory usage and makes the code more -efficient. - - -File: as.info, Node: alternate, Next: D, Prev: a, Up: Invoking - -2.2 `--alternate' -================= - -Begin in alternate macro mode, see *Note `.altmacro': Altmacro. - - -File: as.info, Node: D, Next: f, Prev: alternate, Up: Invoking - -2.3 `-D' -======== - -This option has no effect whatsoever, but it is accepted to make it more -likely that scripts written for other assemblers also work with `as'. - - -File: as.info, Node: f, Next: I, Prev: D, Up: Invoking - -2.4 Work Faster: `-f' -===================== - -`-f' should only be used when assembling programs written by a -(trusted) compiler. `-f' stops the assembler from doing whitespace and -comment preprocessing on the input file(s) before assembling them. -*Note Preprocessing: Preprocessing. - - _Warning:_ if you use `-f' when the files actually need to be - preprocessed (if they contain comments, for example), `as' does - not work correctly. - - -File: as.info, Node: I, Next: K, Prev: f, Up: Invoking - -2.5 `.include' Search Path: `-I' PATH -===================================== - -Use this option to add a PATH to the list of directories `as' searches -for files specified in `.include' directives (*note `.include': -Include.). You may use `-I' as many times as necessary to include a -variety of paths. The current working directory is always searched -first; after that, `as' searches any `-I' directories in the same order -as they were specified (left to right) on the command line. - - -File: as.info, Node: K, Next: L, Prev: I, Up: Invoking - -2.6 Difference Tables: `-K' -=========================== - -`as' sometimes alters the code emitted for directives of the form -`.word SYM1-SYM2'. *Note `.word': Word. You can use the `-K' option -if you want a warning issued when this is done. - - -File: as.info, Node: L, Next: listing, Prev: K, Up: Invoking - -2.7 Include Local Symbols: `-L' -=============================== - -Symbols beginning with system-specific local label prefixes, typically -`.L' for ELF systems or `L' for traditional a.out systems, are called -"local symbols". *Note Symbol Names::. Normally you do not see such -symbols when debugging, because they are intended for the use of -programs (like compilers) that compose assembler programs, not for your -notice. Normally both `as' and `ld' discard such symbols, so you do -not normally debug with them. - - This option tells `as' to retain those local symbols in the object -file. Usually if you do this you also tell the linker `ld' to preserve -those symbols. - - -File: as.info, Node: listing, Next: M, Prev: L, Up: Invoking - -2.8 Configuring listing output: `--listing' -=========================================== - -The listing feature of the assembler can be enabled via the command -line switch `-a' (*note a::). This feature combines the input source -file(s) with a hex dump of the corresponding locations in the output -object file, and displays them as a listing file. The format of this -listing can be controlled by directives inside the assembler source -(i.e., `.list' (*note List::), `.title' (*note Title::), `.sbttl' -(*note Sbttl::), `.psize' (*note Psize::), and `.eject' (*note Eject::) -and also by the following switches: - -`--listing-lhs-width=`number'' - Sets the maximum width, in words, of the first line of the hex - byte dump. This dump appears on the left hand side of the listing - output. - -`--listing-lhs-width2=`number'' - Sets the maximum width, in words, of any further lines of the hex - byte dump for a given input source line. If this value is not - specified, it defaults to being the same as the value specified - for `--listing-lhs-width'. If neither switch is used the default - is to one. - -`--listing-rhs-width=`number'' - Sets the maximum width, in characters, of the source line that is - displayed alongside the hex dump. The default value for this - parameter is 100. The source line is displayed on the right hand - side of the listing output. - -`--listing-cont-lines=`number'' - Sets the maximum number of continuation lines of hex dump that - will be displayed for a given single line of source input. The - default value is 4. - - -File: as.info, Node: M, Next: MD, Prev: listing, Up: Invoking - -2.9 Assemble in MRI Compatibility Mode: `-M' -============================================ - -The `-M' or `--mri' option selects MRI compatibility mode. This -changes the syntax and pseudo-op handling of `as' to make it compatible -with the `ASM68K' or the `ASM960' (depending upon the configured -target) assembler from Microtec Research. The exact nature of the MRI -syntax will not be documented here; see the MRI manuals for more -information. Note in particular that the handling of macros and macro -arguments is somewhat different. The purpose of this option is to -permit assembling existing MRI assembler code using `as'. - - The MRI compatibility is not complete. Certain operations of the -MRI assembler depend upon its object file format, and can not be -supported using other object file formats. Supporting these would -require enhancing each object file format individually. These are: - - * global symbols in common section - - The m68k MRI assembler supports common sections which are merged - by the linker. Other object file formats do not support this. - `as' handles common sections by treating them as a single common - symbol. It permits local symbols to be defined within a common - section, but it can not support global symbols, since it has no - way to describe them. - - * complex relocations - - The MRI assemblers support relocations against a negated section - address, and relocations which combine the start addresses of two - or more sections. These are not support by other object file - formats. - - * `END' pseudo-op specifying start address - - The MRI `END' pseudo-op permits the specification of a start - address. This is not supported by other object file formats. The - start address may instead be specified using the `-e' option to - the linker, or in a linker script. - - * `IDNT', `.ident' and `NAME' pseudo-ops - - The MRI `IDNT', `.ident' and `NAME' pseudo-ops assign a module - name to the output file. This is not supported by other object - file formats. - - * `ORG' pseudo-op - - The m68k MRI `ORG' pseudo-op begins an absolute section at a given - address. This differs from the usual `as' `.org' pseudo-op, which - changes the location within the current section. Absolute - sections are not supported by other object file formats. The - address of a section may be assigned within a linker script. - - There are some other features of the MRI assembler which are not -supported by `as', typically either because they are difficult or -because they seem of little consequence. Some of these may be -supported in future releases. - - * EBCDIC strings - - EBCDIC strings are not supported. - - * packed binary coded decimal - - Packed binary coded decimal is not supported. This means that the - `DC.P' and `DCB.P' pseudo-ops are not supported. - - * `FEQU' pseudo-op - - The m68k `FEQU' pseudo-op is not supported. - - * `NOOBJ' pseudo-op - - The m68k `NOOBJ' pseudo-op is not supported. - - * `OPT' branch control options - - The m68k `OPT' branch control options--`B', `BRS', `BRB', `BRL', - and `BRW'--are ignored. `as' automatically relaxes all branches, - whether forward or backward, to an appropriate size, so these - options serve no purpose. - - * `OPT' list control options - - The following m68k `OPT' list control options are ignored: `C', - `CEX', `CL', `CRE', `E', `G', `I', `M', `MEX', `MC', `MD', `X'. - - * other `OPT' options - - The following m68k `OPT' options are ignored: `NEST', `O', `OLD', - `OP', `P', `PCO', `PCR', `PCS', `R'. - - * `OPT' `D' option is default - - The m68k `OPT' `D' option is the default, unlike the MRI assembler. - `OPT NOD' may be used to turn it off. - - * `XREF' pseudo-op. - - The m68k `XREF' pseudo-op is ignored. - - * `.debug' pseudo-op - - The i960 `.debug' pseudo-op is not supported. - - * `.extended' pseudo-op - - The i960 `.extended' pseudo-op is not supported. - - * `.list' pseudo-op. - - The various options of the i960 `.list' pseudo-op are not - supported. - - * `.optimize' pseudo-op - - The i960 `.optimize' pseudo-op is not supported. - - * `.output' pseudo-op - - The i960 `.output' pseudo-op is not supported. - - * `.setreal' pseudo-op - - The i960 `.setreal' pseudo-op is not supported. - - - -File: as.info, Node: MD, Next: o, Prev: M, Up: Invoking - -2.10 Dependency Tracking: `--MD' -================================ - -`as' can generate a dependency file for the file it creates. This file -consists of a single rule suitable for `make' describing the -dependencies of the main source file. - - The rule is written to the file named in its argument. - - This feature is used in the automatic updating of makefiles. - - -File: as.info, Node: o, Next: R, Prev: MD, Up: Invoking - -2.11 Name the Object File: `-o' -=============================== - -There is always one object file output when you run `as'. By default -it has the name `a.out' (or `b.out', for Intel 960 targets only). You -use this option (which takes exactly one filename) to give the object -file a different name. - - Whatever the object file is called, `as' overwrites any existing -file of the same name. - - -File: as.info, Node: R, Next: statistics, Prev: o, Up: Invoking - -2.12 Join Data and Text Sections: `-R' -====================================== - -`-R' tells `as' to write the object file as if all data-section data -lives in the text section. This is only done at the very last moment: -your binary data are the same, but data section parts are relocated -differently. The data section part of your object file is zero bytes -long because all its bytes are appended to the text section. (*Note -Sections and Relocation: Sections.) - - When you specify `-R' it would be possible to generate shorter -address displacements (because we do not have to cross between text and -data section). We refrain from doing this simply for compatibility with -older versions of `as'. In future, `-R' may work this way. - - When `as' is configured for COFF or ELF output, this option is only -useful if you use sections named `.text' and `.data'. - - `-R' is not supported for any of the HPPA targets. Using `-R' -generates a warning from `as'. - - -File: as.info, Node: statistics, Next: traditional-format, Prev: R, Up: Invoking - -2.13 Display Assembly Statistics: `--statistics' -================================================ - -Use `--statistics' to display two statistics about the resources used by -`as': the maximum amount of space allocated during the assembly (in -bytes), and the total execution time taken for the assembly (in CPU -seconds). - - -File: as.info, Node: traditional-format, Next: v, Prev: statistics, Up: Invoking - -2.14 Compatible Output: `--traditional-format' -============================================== - -For some targets, the output of `as' is different in some ways from the -output of some existing assembler. This switch requests `as' to use -the traditional format instead. - - For example, it disables the exception frame optimizations which -`as' normally does by default on `gcc' output. - - -File: as.info, Node: v, Next: W, Prev: traditional-format, Up: Invoking - -2.15 Announce Version: `-v' -=========================== - -You can find out what version of as is running by including the option -`-v' (which you can also spell as `-version') on the command line. - - -File: as.info, Node: W, Next: Z, Prev: v, Up: Invoking - -2.16 Control Warnings: `-W', `--warn', `--no-warn', `--fatal-warnings' -====================================================================== - -`as' should never give a warning or error message when assembling -compiler output. But programs written by people often cause `as' to -give a warning that a particular assumption was made. All such -warnings are directed to the standard error file. - - If you use the `-W' and `--no-warn' options, no warnings are issued. -This only affects the warning messages: it does not change any -particular of how `as' assembles your file. Errors, which stop the -assembly, are still reported. - - If you use the `--fatal-warnings' option, `as' considers files that -generate warnings to be in error. - - You can switch these options off again by specifying `--warn', which -causes warnings to be output as usual. - - -File: as.info, Node: Z, Prev: W, Up: Invoking - -2.17 Generate Object File in Spite of Errors: `-Z' -================================================== - -After an error message, `as' normally produces no output. If for some -reason you are interested in object file output even after `as' gives -an error message on your program, use the `-Z' option. If there are -any errors, `as' continues anyways, and writes an object file after a -final warning message of the form `N errors, M warnings, generating bad -object file.' - - -File: as.info, Node: Syntax, Next: Sections, Prev: Invoking, Up: Top - -3 Syntax -******** - -This chapter describes the machine-independent syntax allowed in a -source file. `as' syntax is similar to what many other assemblers use; -it is inspired by the BSD 4.2 assembler, except that `as' does not -assemble Vax bit-fields. - -* Menu: - -* Preprocessing:: Preprocessing -* Whitespace:: Whitespace -* Comments:: Comments -* Symbol Intro:: Symbols -* Statements:: Statements -* Constants:: Constants - - -File: as.info, Node: Preprocessing, Next: Whitespace, Up: Syntax - -3.1 Preprocessing -================= - -The `as' internal preprocessor: - * adjusts and removes extra whitespace. It leaves one space or tab - before the keywords on a line, and turns any other whitespace on - the line into a single space. - - * removes all comments, replacing them with a single space, or an - appropriate number of newlines. - - * converts character constants into the appropriate numeric values. - - It does not do macro processing, include file handling, or anything -else you may get from your C compiler's preprocessor. You can do -include file processing with the `.include' directive (*note -`.include': Include.). You can use the GNU C compiler driver to get -other "CPP" style preprocessing by giving the input file a `.S' suffix. -*Note Options Controlling the Kind of Output: (gcc.info)Overall -Options. - - Excess whitespace, comments, and character constants cannot be used -in the portions of the input text that are not preprocessed. - - If the first line of an input file is `#NO_APP' or if you use the -`-f' option, whitespace and comments are not removed from the input -file. Within an input file, you can ask for whitespace and comment -removal in specific portions of the by putting a line that says `#APP' -before the text that may contain whitespace or comments, and putting a -line that says `#NO_APP' after this text. This feature is mainly -intend to support `asm' statements in compilers whose output is -otherwise free of comments and whitespace. - - -File: as.info, Node: Whitespace, Next: Comments, Prev: Preprocessing, Up: Syntax - -3.2 Whitespace -============== - -"Whitespace" is one or more blanks or tabs, in any order. Whitespace -is used to separate symbols, and to make programs neater for people to -read. Unless within character constants (*note Character Constants: -Characters.), any whitespace means the same as exactly one space. - - -File: as.info, Node: Comments, Next: Symbol Intro, Prev: Whitespace, Up: Syntax - -3.3 Comments -============ - -There are two ways of rendering comments to `as'. In both cases the -comment is equivalent to one space. - - Anything from `/*' through the next `*/' is a comment. This means -you may not nest these comments. - - /* - The only way to include a newline ('\n') in a comment - is to use this sort of comment. - */ - - /* This sort of comment does not nest. */ - - Anything from a "line comment" character up to the next newline is -considered a comment and is ignored. The line comment character is -target specific, and some targets multiple comment characters. Some -targets also have line comment characters that only work if they are -the first character on a line. Some targets use a sequence of two -characters to introduce a line comment. Some targets can also change -their line comment characters depending upon command line options that -have been used. For more details see the _Syntax_ section in the -documentation for individual targets. - - If the line comment character is the hash sign (`#') then it still -has the special ability to enable and disable preprocessing (*note -Preprocessing::) and to specify logical line numbers: - - To be compatible with past assemblers, lines that begin with `#' -have a special interpretation. Following the `#' should be an absolute -expression (*note Expressions::): the logical line number of the _next_ -line. Then a string (*note Strings: Strings.) is allowed: if present -it is a new logical file name. The rest of the line, if any, should be -whitespace. - - If the first non-whitespace characters on the line are not numeric, -the line is ignored. (Just like a comment.) - - # This is an ordinary comment. - # 42-6 "new_file_name" # New logical file name - # This is logical line # 36. - This feature is deprecated, and may disappear from future versions -of `as'. - - -File: as.info, Node: Symbol Intro, Next: Statements, Prev: Comments, Up: Syntax - -3.4 Symbols -=========== - -A "symbol" is one or more characters chosen from the set of all letters -(both upper and lower case), digits and the three characters `_.$'. On -most machines, you can also use `$' in symbol names; exceptions are -noted in *Note Machine Dependencies::. No symbol may begin with a -digit. Case is significant. There is no length limit: all characters -are significant. Multibyte characters are supported. Symbols are -delimited by characters not in that set, or by the beginning of a file -(since the source program must end with a newline, the end of a file is -not a possible symbol delimiter). *Note Symbols::. - - -File: as.info, Node: Statements, Next: Constants, Prev: Symbol Intro, Up: Syntax - -3.5 Statements -============== - -A "statement" ends at a newline character (`\n') or a "line separator -character". The line separator character is target specific and -described in the _Syntax_ section of each target's documentation. Not -all targets support a line separator character. The newline or line -separator character is considered to be part of the preceding -statement. Newlines and separators within character constants are an -exception: they do not end statements. - - It is an error to end any statement with end-of-file: the last -character of any input file should be a newline. - - An empty statement is allowed, and may include whitespace. It is -ignored. - - A statement begins with zero or more labels, optionally followed by a -key symbol which determines what kind of statement it is. The key -symbol determines the syntax of the rest of the statement. If the -symbol begins with a dot `.' then the statement is an assembler -directive: typically valid for any computer. If the symbol begins with -a letter the statement is an assembly language "instruction": it -assembles into a machine language instruction. Different versions of -`as' for different computers recognize different instructions. In -fact, the same symbol may represent a different instruction in a -different computer's assembly language. - - A label is a symbol immediately followed by a colon (`:'). -Whitespace before a label or after a colon is permitted, but you may not -have whitespace between a label's symbol and its colon. *Note Labels::. - - For HPPA targets, labels need not be immediately followed by a -colon, but the definition of a label must begin in column zero. This -also implies that only one label may be defined on each line. - - label: .directive followed by something - another_label: # This is an empty statement. - instruction operand_1, operand_2, ... - - -File: as.info, Node: Constants, Prev: Statements, Up: Syntax - -3.6 Constants -============= - -A constant is a number, written so that its value is known by -inspection, without knowing any context. Like this: - .byte 74, 0112, 092, 0x4A, 0X4a, 'J, '\J # All the same value. - .ascii "Ring the bell\7" # A string constant. - .octa 0x123456789abcdef0123456789ABCDEF0 # A bignum. - .float 0f-314159265358979323846264338327\ - 95028841971.693993751E-40 # - pi, a flonum. - -* Menu: - -* Characters:: Character Constants -* Numbers:: Number Constants - - -File: as.info, Node: Characters, Next: Numbers, Up: Constants - -3.6.1 Character Constants -------------------------- - -There are two kinds of character constants. A "character" stands for -one character in one byte and its value may be used in numeric -expressions. String constants (properly called string _literals_) are -potentially many bytes and their values may not be used in arithmetic -expressions. - -* Menu: - -* Strings:: Strings -* Chars:: Characters - - -File: as.info, Node: Strings, Next: Chars, Up: Characters - -3.6.1.1 Strings -............... - -A "string" is written between double-quotes. It may contain -double-quotes or null characters. The way to get special characters -into a string is to "escape" these characters: precede them with a -backslash `\' character. For example `\\' represents one backslash: -the first `\' is an escape which tells `as' to interpret the second -character literally as a backslash (which prevents `as' from -recognizing the second `\' as an escape character). The complete list -of escapes follows. - -`\b' - Mnemonic for backspace; for ASCII this is octal code 010. - -`\f' - Mnemonic for FormFeed; for ASCII this is octal code 014. - -`\n' - Mnemonic for newline; for ASCII this is octal code 012. - -`\r' - Mnemonic for carriage-Return; for ASCII this is octal code 015. - -`\t' - Mnemonic for horizontal Tab; for ASCII this is octal code 011. - -`\ DIGIT DIGIT DIGIT' - An octal character code. The numeric code is 3 octal digits. For - compatibility with other Unix systems, 8 and 9 are accepted as - digits: for example, `\008' has the value 010, and `\009' the - value 011. - -`\`x' HEX-DIGITS...' - A hex character code. All trailing hex digits are combined. - Either upper or lower case `x' works. - -`\\' - Represents one `\' character. - -`\"' - Represents one `"' character. Needed in strings to represent this - character, because an unescaped `"' would end the string. - -`\ ANYTHING-ELSE' - Any other character when escaped by `\' gives a warning, but - assembles as if the `\' was not present. The idea is that if you - used an escape sequence you clearly didn't want the literal - interpretation of the following character. However `as' has no - other interpretation, so `as' knows it is giving you the wrong - code and warns you of the fact. - - Which characters are escapable, and what those escapes represent, -varies widely among assemblers. The current set is what we think the -BSD 4.2 assembler recognizes, and is a subset of what most C compilers -recognize. If you are in doubt, do not use an escape sequence. - - -File: as.info, Node: Chars, Prev: Strings, Up: Characters - -3.6.1.2 Characters -.................. - -A single character may be written as a single quote immediately -followed by that character. The same escapes apply to characters as to -strings. So if you want to write the character backslash, you must -write `'\\' where the first `\' escapes the second `\'. As you can -see, the quote is an acute accent, not a grave accent. A newline -immediately following an acute accent is taken as a literal character -and does not count as the end of a statement. The value of a character -constant in a numeric expression is the machine's byte-wide code for -that character. `as' assumes your character code is ASCII: `'A' means -65, `'B' means 66, and so on. - - -File: as.info, Node: Numbers, Prev: Characters, Up: Constants - -3.6.2 Number Constants ----------------------- - -`as' distinguishes three kinds of numbers according to how they are -stored in the target machine. _Integers_ are numbers that would fit -into an `int' in the C language. _Bignums_ are integers, but they are -stored in more than 32 bits. _Flonums_ are floating point numbers, -described below. - -* Menu: - -* Integers:: Integers -* Bignums:: Bignums -* Flonums:: Flonums - - -File: as.info, Node: Integers, Next: Bignums, Up: Numbers - -3.6.2.1 Integers -................ - -A binary integer is `0b' or `0B' followed by zero or more of the binary -digits `01'. - - An octal integer is `0' followed by zero or more of the octal digits -(`01234567'). - - A decimal integer starts with a non-zero digit followed by zero or -more digits (`0123456789'). - - A hexadecimal integer is `0x' or `0X' followed by one or more -hexadecimal digits chosen from `0123456789abcdefABCDEF'. - - Integers have the usual values. To denote a negative integer, use -the prefix operator `-' discussed under expressions (*note Prefix -Operators: Prefix Ops.). - - -File: as.info, Node: Bignums, Next: Flonums, Prev: Integers, Up: Numbers - -3.6.2.2 Bignums -............... - -A "bignum" has the same syntax and semantics as an integer except that -the number (or its negative) takes more than 32 bits to represent in -binary. The distinction is made because in some places integers are -permitted while bignums are not. - - -File: as.info, Node: Flonums, Prev: Bignums, Up: Numbers - -3.6.2.3 Flonums -............... - -A "flonum" represents a floating point number. The translation is -indirect: a decimal floating point number from the text is converted by -`as' to a generic binary floating point number of more than sufficient -precision. This generic floating point number is converted to a -particular computer's floating point format (or formats) by a portion -of `as' specialized to that computer. - - A flonum is written by writing (in order) - * The digit `0'. (`0' is optional on the HPPA.) - - * A letter, to tell `as' the rest of the number is a flonum. `e' is - recommended. Case is not important. - - On the H8/300, Renesas / SuperH SH, and AMD 29K architectures, the - letter must be one of the letters `DFPRSX' (in upper or lower - case). - - On the ARC, the letter must be one of the letters `DFRS' (in upper - or lower case). - - On the Intel 960 architecture, the letter must be one of the - letters `DFT' (in upper or lower case). - - On the HPPA architecture, the letter must be `E' (upper case only). - - * An optional sign: either `+' or `-'. - - * An optional "integer part": zero or more decimal digits. - - * An optional "fractional part": `.' followed by zero or more - decimal digits. - - * An optional exponent, consisting of: - - * An `E' or `e'. - - * Optional sign: either `+' or `-'. - - * One or more decimal digits. - - - At least one of the integer part or the fractional part must be -present. The floating point number has the usual base-10 value. - - `as' does all processing using integers. Flonums are computed -independently of any floating point hardware in the computer running -`as'. - - -File: as.info, Node: Sections, Next: Symbols, Prev: Syntax, Up: Top - -4 Sections and Relocation -************************* - -* Menu: - -* Secs Background:: Background -* Ld Sections:: Linker Sections -* As Sections:: Assembler Internal Sections -* Sub-Sections:: Sub-Sections -* bss:: bss Section - - -File: as.info, Node: Secs Background, Next: Ld Sections, Up: Sections - -4.1 Background -============== - -Roughly, a section is a range of addresses, with no gaps; all data "in" -those addresses is treated the same for some particular purpose. For -example there may be a "read only" section. - - The linker `ld' reads many object files (partial programs) and -combines their contents to form a runnable program. When `as' emits an -object file, the partial program is assumed to start at address 0. -`ld' assigns the final addresses for the partial program, so that -different partial programs do not overlap. This is actually an -oversimplification, but it suffices to explain how `as' uses sections. - - `ld' moves blocks of bytes of your program to their run-time -addresses. These blocks slide to their run-time addresses as rigid -units; their length does not change and neither does the order of bytes -within them. Such a rigid unit is called a _section_. Assigning -run-time addresses to sections is called "relocation". It includes the -task of adjusting mentions of object-file addresses so they refer to -the proper run-time addresses. For the H8/300, and for the Renesas / -SuperH SH, `as' pads sections if needed to ensure they end on a word -(sixteen bit) boundary. - - An object file written by `as' has at least three sections, any of -which may be empty. These are named "text", "data" and "bss" sections. - - When it generates COFF or ELF output, `as' can also generate -whatever other named sections you specify using the `.section' -directive (*note `.section': Section.). If you do not use any -directives that place output in the `.text' or `.data' sections, these -sections still exist, but are empty. - - When `as' generates SOM or ELF output for the HPPA, `as' can also -generate whatever other named sections you specify using the `.space' -and `.subspace' directives. See `HP9000 Series 800 Assembly Language -Reference Manual' (HP 92432-90001) for details on the `.space' and -`.subspace' assembler directives. - - Additionally, `as' uses different names for the standard text, data, -and bss sections when generating SOM output. Program text is placed -into the `$CODE$' section, data into `$DATA$', and BSS into `$BSS$'. - - Within the object file, the text section starts at address `0', the -data section follows, and the bss section follows the data section. - - When generating either SOM or ELF output files on the HPPA, the text -section starts at address `0', the data section at address `0x4000000', -and the bss section follows the data section. - - To let `ld' know which data changes when the sections are relocated, -and how to change that data, `as' also writes to the object file -details of the relocation needed. To perform relocation `ld' must -know, each time an address in the object file is mentioned: - * Where in the object file is the beginning of this reference to an - address? - - * How long (in bytes) is this reference? - - * Which section does the address refer to? What is the numeric - value of - (ADDRESS) - (START-ADDRESS OF SECTION)? - - * Is the reference to an address "Program-Counter relative"? - - In fact, every address `as' ever uses is expressed as - (SECTION) + (OFFSET INTO SECTION) - Further, most expressions `as' computes have this section-relative -nature. (For some object formats, such as SOM for the HPPA, some -expressions are symbol-relative instead.) - - In this manual we use the notation {SECNAME N} to mean "offset N -into section SECNAME." - - Apart from text, data and bss sections you need to know about the -"absolute" section. When `ld' mixes partial programs, addresses in the -absolute section remain unchanged. For example, address `{absolute 0}' -is "relocated" to run-time address 0 by `ld'. Although the linker -never arranges two partial programs' data sections with overlapping -addresses after linking, _by definition_ their absolute sections must -overlap. Address `{absolute 239}' in one part of a program is always -the same address when the program is running as address `{absolute -239}' in any other part of the program. - - The idea of sections is extended to the "undefined" section. Any -address whose section is unknown at assembly time is by definition -rendered {undefined U}--where U is filled in later. Since numbers are -always defined, the only way to generate an undefined address is to -mention an undefined symbol. A reference to a named common block would -be such a symbol: its value is unknown at assembly time so it has -section _undefined_. - - By analogy the word _section_ is used to describe groups of sections -in the linked program. `ld' puts all partial programs' text sections -in contiguous addresses in the linked program. It is customary to -refer to the _text section_ of a program, meaning all the addresses of -all partial programs' text sections. Likewise for data and bss -sections. - - Some sections are manipulated by `ld'; others are invented for use -of `as' and have no meaning except during assembly. - - -File: as.info, Node: Ld Sections, Next: As Sections, Prev: Secs Background, Up: Sections - -4.2 Linker Sections -=================== - -`ld' deals with just four kinds of sections, summarized below. - -*named sections* -*text section* -*data section* - These sections hold your program. `as' and `ld' treat them as - separate but equal sections. Anything you can say of one section - is true of another. When the program is running, however, it is - customary for the text section to be unalterable. The text - section is often shared among processes: it contains instructions, - constants and the like. The data section of a running program is - usually alterable: for example, C variables would be stored in the - data section. - -*bss section* - This section contains zeroed bytes when your program begins - running. It is used to hold uninitialized variables or common - storage. The length of each partial program's bss section is - important, but because it starts out containing zeroed bytes there - is no need to store explicit zero bytes in the object file. The - bss section was invented to eliminate those explicit zeros from - object files. - -*absolute section* - Address 0 of this section is always "relocated" to runtime address - 0. This is useful if you want to refer to an address that `ld' - must not change when relocating. In this sense we speak of - absolute addresses being "unrelocatable": they do not change - during relocation. - -*undefined section* - This "section" is a catch-all for address references to objects - not in the preceding sections. - - An idealized example of three relocatable sections follows. The -example uses the traditional section names `.text' and `.data'. Memory -addresses are on the horizontal axis. - - +-----+----+--+ - partial program # 1: |ttttt|dddd|00| - +-----+----+--+ - - text data bss - seg. seg. seg. - - +---+---+---+ - partial program # 2: |TTT|DDD|000| - +---+---+---+ - - +--+---+-----+--+----+---+-----+~~ - linked program: | |TTT|ttttt| |dddd|DDD|00000| - +--+---+-----+--+----+---+-----+~~ - - addresses: 0 ... - - -File: as.info, Node: As Sections, Next: Sub-Sections, Prev: Ld Sections, Up: Sections - -4.3 Assembler Internal Sections -=============================== - -These sections are meant only for the internal use of `as'. They have -no meaning at run-time. You do not really need to know about these -sections for most purposes; but they can be mentioned in `as' warning -messages, so it might be helpful to have an idea of their meanings to -`as'. These sections are used to permit the value of every expression -in your assembly language program to be a section-relative address. - -ASSEMBLER-INTERNAL-LOGIC-ERROR! - An internal assembler logic error has been found. This means - there is a bug in the assembler. - -expr section - The assembler stores complex expression internally as combinations - of symbols. When it needs to represent an expression as a symbol, - it puts it in the expr section. - - -File: as.info, Node: Sub-Sections, Next: bss, Prev: As Sections, Up: Sections - -4.4 Sub-Sections -================ - -Assembled bytes conventionally fall into two sections: text and data. -You may have separate groups of data in named sections that you want to -end up near to each other in the object file, even though they are not -contiguous in the assembler source. `as' allows you to use -"subsections" for this purpose. Within each section, there can be -numbered subsections with values from 0 to 8192. Objects assembled -into the same subsection go into the object file together with other -objects in the same subsection. For example, a compiler might want to -store constants in the text section, but might not want to have them -interspersed with the program being assembled. In this case, the -compiler could issue a `.text 0' before each section of code being -output, and a `.text 1' before each group of constants being output. - -Subsections are optional. If you do not use subsections, everything -goes in subsection number zero. - - Each subsection is zero-padded up to a multiple of four bytes. -(Subsections may be padded a different amount on different flavors of -`as'.) - - Subsections appear in your object file in numeric order, lowest -numbered to highest. (All this to be compatible with other people's -assemblers.) The object file contains no representation of -subsections; `ld' and other programs that manipulate object files see -no trace of them. They just see all your text subsections as a text -section, and all your data subsections as a data section. - - To specify which subsection you want subsequent statements assembled -into, use a numeric argument to specify it, in a `.text EXPRESSION' or -a `.data EXPRESSION' statement. When generating COFF output, you can -also use an extra subsection argument with arbitrary named sections: -`.section NAME, EXPRESSION'. When generating ELF output, you can also -use the `.subsection' directive (*note SubSection::) to specify a -subsection: `.subsection EXPRESSION'. EXPRESSION should be an absolute -expression (*note Expressions::). If you just say `.text' then `.text -0' is assumed. Likewise `.data' means `.data 0'. Assembly begins in -`text 0'. For instance: - .text 0 # The default subsection is text 0 anyway. - .ascii "This lives in the first text subsection. *" - .text 1 - .ascii "But this lives in the second text subsection." - .data 0 - .ascii "This lives in the data section," - .ascii "in the first data subsection." - .text 0 - .ascii "This lives in the first text section," - .ascii "immediately following the asterisk (*)." - - Each section has a "location counter" incremented by one for every -byte assembled into that section. Because subsections are merely a -convenience restricted to `as' there is no concept of a subsection -location counter. There is no way to directly manipulate a location -counter--but the `.align' directive changes it, and any label -definition captures its current value. The location counter of the -section where statements are being assembled is said to be the "active" -location counter. - - -File: as.info, Node: bss, Prev: Sub-Sections, Up: Sections - -4.5 bss Section -=============== - -The bss section is used for local common variable storage. You may -allocate address space in the bss section, but you may not dictate data -to load into it before your program executes. When your program starts -running, all the contents of the bss section are zeroed bytes. - - The `.lcomm' pseudo-op defines a symbol in the bss section; see -*Note `.lcomm': Lcomm. - - The `.comm' pseudo-op may be used to declare a common symbol, which -is another form of uninitialized symbol; see *Note `.comm': Comm. - - When assembling for a target which supports multiple sections, such -as ELF or COFF, you may switch into the `.bss' section and define -symbols as usual; see *Note `.section': Section. You may only assemble -zero values into the section. Typically the section will only contain -symbol definitions and `.skip' directives (*note `.skip': Skip.). - - -File: as.info, Node: Symbols, Next: Expressions, Prev: Sections, Up: Top - -5 Symbols -********* - -Symbols are a central concept: the programmer uses symbols to name -things, the linker uses symbols to link, and the debugger uses symbols -to debug. - - _Warning:_ `as' does not place symbols in the object file in the - same order they were declared. This may break some debuggers. - -* Menu: - -* Labels:: Labels -* Setting Symbols:: Giving Symbols Other Values -* Symbol Names:: Symbol Names -* Dot:: The Special Dot Symbol -* Symbol Attributes:: Symbol Attributes - - -File: as.info, Node: Labels, Next: Setting Symbols, Up: Symbols - -5.1 Labels -========== - -A "label" is written as a symbol immediately followed by a colon `:'. -The symbol then represents the current value of the active location -counter, and is, for example, a suitable instruction operand. You are -warned if you use the same symbol to represent two different locations: -the first definition overrides any other definitions. - - On the HPPA, the usual form for a label need not be immediately -followed by a colon, but instead must start in column zero. Only one -label may be defined on a single line. To work around this, the HPPA -version of `as' also provides a special directive `.label' for defining -labels more flexibly. - - -File: as.info, Node: Setting Symbols, Next: Symbol Names, Prev: Labels, Up: Symbols - -5.2 Giving Symbols Other Values -=============================== - -A symbol can be given an arbitrary value by writing a symbol, followed -by an equals sign `=', followed by an expression (*note Expressions::). -This is equivalent to using the `.set' directive. *Note `.set': Set. -In the same way, using a double equals sign `='`=' here represents an -equivalent of the `.eqv' directive. *Note `.eqv': Eqv. - - Blackfin does not support symbol assignment with `='. - - -File: as.info, Node: Symbol Names, Next: Dot, Prev: Setting Symbols, Up: Symbols - -5.3 Symbol Names -================ - -Symbol names begin with a letter or with one of `._'. On most -machines, you can also use `$' in symbol names; exceptions are noted in -*Note Machine Dependencies::. That character may be followed by any -string of digits, letters, dollar signs (unless otherwise noted for a -particular target machine), and underscores. - -Case of letters is significant: `foo' is a different symbol name than -`Foo'. - - Multibyte characters are supported. To generate a symbol name -containing multibyte characters enclose it within double quotes and use -escape codes. cf *Note Strings::. Generating a multibyte symbol name -from a label is not currently supported. - - Each symbol has exactly one name. Each name in an assembly language -program refers to exactly one symbol. You may use that symbol name any -number of times in a program. - -Local Symbol Names ------------------- - -A local symbol is any symbol beginning with certain local label -prefixes. By default, the local label prefix is `.L' for ELF systems or -`L' for traditional a.out systems, but each target may have its own set -of local label prefixes. On the HPPA local symbols begin with `L$'. - - Local symbols are defined and used within the assembler, but they are -normally not saved in object files. Thus, they are not visible when -debugging. You may use the `-L' option (*note Include Local Symbols: -`-L': L.) to retain the local symbols in the object files. - -Local Labels ------------- - -Local labels help compilers and programmers use names temporarily. -They create symbols which are guaranteed to be unique over the entire -scope of the input source code and which can be referred to by a simple -notation. To define a local label, write a label of the form `N:' -(where N represents any positive integer). To refer to the most recent -previous definition of that label write `Nb', using the same number as -when you defined the label. To refer to the next definition of a local -label, write `Nf'--the `b' stands for "backwards" and the `f' stands -for "forwards". - - There is no restriction on how you can use these labels, and you can -reuse them too. So that it is possible to repeatedly define the same -local label (using the same number `N'), although you can only refer to -the most recently defined local label of that number (for a backwards -reference) or the next definition of a specific local label for a -forward reference. It is also worth noting that the first 10 local -labels (`0:'...`9:') are implemented in a slightly more efficient -manner than the others. - - Here is an example: - - 1: branch 1f - 2: branch 1b - 1: branch 2f - 2: branch 1b - - Which is the equivalent of: - - label_1: branch label_3 - label_2: branch label_1 - label_3: branch label_4 - label_4: branch label_3 - - Local label names are only a notational device. They are immediately -transformed into more conventional symbol names before the assembler -uses them. The symbol names are stored in the symbol table, appear in -error messages, and are optionally emitted to the object file. The -names are constructed using these parts: - -`_local label prefix_' - All local symbols begin with the system-specific local label - prefix. Normally both `as' and `ld' forget symbols that start - with the local label prefix. These labels are used for symbols - you are never intended to see. If you use the `-L' option then - `as' retains these symbols in the object file. If you also - instruct `ld' to retain these symbols, you may use them in - debugging. - -`NUMBER' - This is the number that was used in the local label definition. - So if the label is written `55:' then the number is `55'. - -`C-B' - This unusual character is included so you do not accidentally - invent a symbol of the same name. The character has ASCII value - of `\002' (control-B). - -`_ordinal number_' - This is a serial number to keep the labels distinct. The first - definition of `0:' gets the number `1'. The 15th definition of - `0:' gets the number `15', and so on. Likewise the first - definition of `1:' gets the number `1' and its 15th definition - gets `15' as well. - - So for example, the first `1:' may be named `.L1C-B1', and the 44th -`3:' may be named `.L3C-B44'. - -Dollar Local Labels -------------------- - -`as' also supports an even more local form of local labels called -dollar labels. These labels go out of scope (i.e., they become -undefined) as soon as a non-local label is defined. Thus they remain -valid for only a small region of the input source code. Normal local -labels, by contrast, remain in scope for the entire file, or until they -are redefined by another occurrence of the same local label. - - Dollar labels are defined in exactly the same way as ordinary local -labels, except that they have a dollar sign suffix to their numeric -value, e.g., `55$:'. - - They can also be distinguished from ordinary local labels by their -transformed names which use ASCII character `\001' (control-A) as the -magic character to distinguish them from ordinary labels. For example, -the fifth definition of `6$' may be named `.L6C-A5'. - - -File: as.info, Node: Dot, Next: Symbol Attributes, Prev: Symbol Names, Up: Symbols - -5.4 The Special Dot Symbol -========================== - -The special symbol `.' refers to the current address that `as' is -assembling into. Thus, the expression `melvin: .long .' defines -`melvin' to contain its own address. Assigning a value to `.' is -treated the same as a `.org' directive. Thus, the expression `.=.+4' -is the same as saying `.space 4'. - - -File: as.info, Node: Symbol Attributes, Prev: Dot, Up: Symbols - -5.5 Symbol Attributes -===================== - -Every symbol has, as well as its name, the attributes "Value" and -"Type". Depending on output format, symbols can also have auxiliary -attributes. - - If you use a symbol without defining it, `as' assumes zero for all -these attributes, and probably won't warn you. This makes the symbol -an externally defined symbol, which is generally what you would want. - -* Menu: - -* Symbol Value:: Value -* Symbol Type:: Type - - -* a.out Symbols:: Symbol Attributes: `a.out' - -* COFF Symbols:: Symbol Attributes for COFF - -* SOM Symbols:: Symbol Attributes for SOM - - -File: as.info, Node: Symbol Value, Next: Symbol Type, Up: Symbol Attributes - -5.5.1 Value ------------ - -The value of a symbol is (usually) 32 bits. For a symbol which labels a -location in the text, data, bss or absolute sections the value is the -number of addresses from the start of that section to the label. -Naturally for text, data and bss sections the value of a symbol changes -as `ld' changes section base addresses during linking. Absolute -symbols' values do not change during linking: that is why they are -called absolute. - - The value of an undefined symbol is treated in a special way. If it -is 0 then the symbol is not defined in this assembler source file, and -`ld' tries to determine its value from other files linked into the same -program. You make this kind of symbol simply by mentioning a symbol -name without defining it. A non-zero value represents a `.comm' common -declaration. The value is how much common storage to reserve, in bytes -(addresses). The symbol refers to the first address of the allocated -storage. - - -File: as.info, Node: Symbol Type, Next: a.out Symbols, Prev: Symbol Value, Up: Symbol Attributes - -5.5.2 Type ----------- - -The type attribute of a symbol contains relocation (section) -information, any flag settings indicating that a symbol is external, and -(optionally), other information for linkers and debuggers. The exact -format depends on the object-code output format in use. - - -File: as.info, Node: a.out Symbols, Next: COFF Symbols, Prev: Symbol Type, Up: Symbol Attributes - -5.5.3 Symbol Attributes: `a.out' --------------------------------- - -* Menu: - -* Symbol Desc:: Descriptor -* Symbol Other:: Other - - -File: as.info, Node: Symbol Desc, Next: Symbol Other, Up: a.out Symbols - -5.5.3.1 Descriptor -.................. - -This is an arbitrary 16-bit value. You may establish a symbol's -descriptor value by using a `.desc' statement (*note `.desc': Desc.). -A descriptor value means nothing to `as'. - - -File: as.info, Node: Symbol Other, Prev: Symbol Desc, Up: a.out Symbols - -5.5.3.2 Other -............. - -This is an arbitrary 8-bit value. It means nothing to `as'. - - -File: as.info, Node: COFF Symbols, Next: SOM Symbols, Prev: a.out Symbols, Up: Symbol Attributes - -5.5.4 Symbol Attributes for COFF --------------------------------- - -The COFF format supports a multitude of auxiliary symbol attributes; -like the primary symbol attributes, they are set between `.def' and -`.endef' directives. - -5.5.4.1 Primary Attributes -.......................... - -The symbol name is set with `.def'; the value and type, respectively, -with `.val' and `.type'. - -5.5.4.2 Auxiliary Attributes -............................ - -The `as' directives `.dim', `.line', `.scl', `.size', `.tag', and -`.weak' can generate auxiliary symbol table information for COFF. - - -File: as.info, Node: SOM Symbols, Prev: COFF Symbols, Up: Symbol Attributes - -5.5.5 Symbol Attributes for SOM -------------------------------- - -The SOM format for the HPPA supports a multitude of symbol attributes -set with the `.EXPORT' and `.IMPORT' directives. - - The attributes are described in `HP9000 Series 800 Assembly Language -Reference Manual' (HP 92432-90001) under the `IMPORT' and `EXPORT' -assembler directive documentation. - - -File: as.info, Node: Expressions, Next: Pseudo Ops, Prev: Symbols, Up: Top - -6 Expressions -************* - -An "expression" specifies an address or numeric value. Whitespace may -precede and/or follow an expression. - - The result of an expression must be an absolute number, or else an -offset into a particular section. If an expression is not absolute, -and there is not enough information when `as' sees the expression to -know its section, a second pass over the source program might be -necessary to interpret the expression--but the second pass is currently -not implemented. `as' aborts with an error message in this situation. - -* Menu: - -* Empty Exprs:: Empty Expressions -* Integer Exprs:: Integer Expressions - - -File: as.info, Node: Empty Exprs, Next: Integer Exprs, Up: Expressions - -6.1 Empty Expressions -===================== - -An empty expression has no value: it is just whitespace or null. -Wherever an absolute expression is required, you may omit the -expression, and `as' assumes a value of (absolute) 0. This is -compatible with other assemblers. - - -File: as.info, Node: Integer Exprs, Prev: Empty Exprs, Up: Expressions - -6.2 Integer Expressions -======================= - -An "integer expression" is one or more _arguments_ delimited by -_operators_. - -* Menu: - -* Arguments:: Arguments -* Operators:: Operators -* Prefix Ops:: Prefix Operators -* Infix Ops:: Infix Operators - - -File: as.info, Node: Arguments, Next: Operators, Up: Integer Exprs - -6.2.1 Arguments ---------------- - -"Arguments" are symbols, numbers or subexpressions. In other contexts -arguments are sometimes called "arithmetic operands". In this manual, -to avoid confusing them with the "instruction operands" of the machine -language, we use the term "argument" to refer to parts of expressions -only, reserving the word "operand" to refer only to machine instruction -operands. - - Symbols are evaluated to yield {SECTION NNN} where SECTION is one of -text, data, bss, absolute, or undefined. NNN is a signed, 2's -complement 32 bit integer. - - Numbers are usually integers. - - A number can be a flonum or bignum. In this case, you are warned -that only the low order 32 bits are used, and `as' pretends these 32 -bits are an integer. You may write integer-manipulating instructions -that act on exotic constants, compatible with other assemblers. - - Subexpressions are a left parenthesis `(' followed by an integer -expression, followed by a right parenthesis `)'; or a prefix operator -followed by an argument. - - -File: as.info, Node: Operators, Next: Prefix Ops, Prev: Arguments, Up: Integer Exprs - -6.2.2 Operators ---------------- - -"Operators" are arithmetic functions, like `+' or `%'. Prefix -operators are followed by an argument. Infix operators appear between -their arguments. Operators may be preceded and/or followed by -whitespace. - - -File: as.info, Node: Prefix Ops, Next: Infix Ops, Prev: Operators, Up: Integer Exprs - -6.2.3 Prefix Operator ---------------------- - -`as' has the following "prefix operators". They each take one -argument, which must be absolute. - -`-' - "Negation". Two's complement negation. - -`~' - "Complementation". Bitwise not. - - -File: as.info, Node: Infix Ops, Prev: Prefix Ops, Up: Integer Exprs - -6.2.4 Infix Operators ---------------------- - -"Infix operators" take two arguments, one on either side. Operators -have precedence, but operations with equal precedence are performed left -to right. Apart from `+' or `-', both arguments must be absolute, and -the result is absolute. - - 1. Highest Precedence - - `*' - "Multiplication". - - `/' - "Division". Truncation is the same as the C operator `/' - - `%' - "Remainder". - - `<<' - "Shift Left". Same as the C operator `<<'. - - `>>' - "Shift Right". Same as the C operator `>>'. - - 2. Intermediate precedence - - `|' - "Bitwise Inclusive Or". - - `&' - "Bitwise And". - - `^' - "Bitwise Exclusive Or". - - `!' - "Bitwise Or Not". - - 3. Low Precedence - - `+' - "Addition". If either argument is absolute, the result has - the section of the other argument. You may not add together - arguments from different sections. - - `-' - "Subtraction". If the right argument is absolute, the result - has the section of the left argument. If both arguments are - in the same section, the result is absolute. You may not - subtract arguments from different sections. - - `==' - "Is Equal To" - - `<>' - `!=' - "Is Not Equal To" - - `<' - "Is Less Than" - - `>' - "Is Greater Than" - - `>=' - "Is Greater Than Or Equal To" - - `<=' - "Is Less Than Or Equal To" - - The comparison operators can be used as infix operators. A - true results has a value of -1 whereas a false result has a - value of 0. Note, these operators perform signed - comparisons. - - 4. Lowest Precedence - - `&&' - "Logical And". - - `||' - "Logical Or". - - These two logical operations can be used to combine the - results of sub expressions. Note, unlike the comparison - operators a true result returns a value of 1 but a false - results does still return 0. Also note that the logical or - operator has a slightly lower precedence than logical and. - - - In short, it's only meaningful to add or subtract the _offsets_ in an -address; you can only have a defined section in one of the two -arguments. - - -File: as.info, Node: Pseudo Ops, Next: Object Attributes, Prev: Expressions, Up: Top - -7 Assembler Directives -********************** - -All assembler directives have names that begin with a period (`.'). -The rest of the name is letters, usually in lower case. - - This chapter discusses directives that are available regardless of -the target machine configuration for the GNU assembler. Some machine -configurations provide additional directives. *Note Machine -Dependencies::. - -* Menu: - -* Abort:: `.abort' - -* ABORT (COFF):: `.ABORT' - -* Align:: `.align ABS-EXPR , ABS-EXPR' -* Altmacro:: `.altmacro' -* Ascii:: `.ascii "STRING"'... -* Asciz:: `.asciz "STRING"'... -* Balign:: `.balign ABS-EXPR , ABS-EXPR' -* Bundle directives:: `.bundle_align_mode ABS-EXPR', `.bundle_lock', `.bundle_unlock' -* Byte:: `.byte EXPRESSIONS' -* CFI directives:: `.cfi_startproc [simple]', `.cfi_endproc', etc. -* Comm:: `.comm SYMBOL , LENGTH ' -* Data:: `.data SUBSECTION' - -* Def:: `.def NAME' - -* Desc:: `.desc SYMBOL, ABS-EXPRESSION' - -* Dim:: `.dim' - -* Double:: `.double FLONUMS' -* Eject:: `.eject' -* Else:: `.else' -* Elseif:: `.elseif' -* End:: `.end' - -* Endef:: `.endef' - -* Endfunc:: `.endfunc' -* Endif:: `.endif' -* Equ:: `.equ SYMBOL, EXPRESSION' -* Equiv:: `.equiv SYMBOL, EXPRESSION' -* Eqv:: `.eqv SYMBOL, EXPRESSION' -* Err:: `.err' -* Error:: `.error STRING' -* Exitm:: `.exitm' -* Extern:: `.extern' -* Fail:: `.fail' -* File:: `.file' -* Fill:: `.fill REPEAT , SIZE , VALUE' -* Float:: `.float FLONUMS' -* Func:: `.func' -* Global:: `.global SYMBOL', `.globl SYMBOL' - -* Gnu_attribute:: `.gnu_attribute TAG,VALUE' -* Hidden:: `.hidden NAMES' - -* hword:: `.hword EXPRESSIONS' -* Ident:: `.ident' -* If:: `.if ABSOLUTE EXPRESSION' -* Incbin:: `.incbin "FILE"[,SKIP[,COUNT]]' -* Include:: `.include "FILE"' -* Int:: `.int EXPRESSIONS' - -* Internal:: `.internal NAMES' - -* Irp:: `.irp SYMBOL,VALUES'... -* Irpc:: `.irpc SYMBOL,VALUES'... -* Lcomm:: `.lcomm SYMBOL , LENGTH' -* Lflags:: `.lflags' - -* Line:: `.line LINE-NUMBER' - -* Linkonce:: `.linkonce [TYPE]' -* List:: `.list' -* Ln:: `.ln LINE-NUMBER' -* Loc:: `.loc FILENO LINENO' -* Loc_mark_labels:: `.loc_mark_labels ENABLE' - -* Local:: `.local NAMES' - -* Long:: `.long EXPRESSIONS' - -* Macro:: `.macro NAME ARGS'... -* MRI:: `.mri VAL' -* Noaltmacro:: `.noaltmacro' -* Nolist:: `.nolist' -* Octa:: `.octa BIGNUMS' -* Offset:: `.offset LOC' -* Org:: `.org NEW-LC, FILL' -* P2align:: `.p2align ABS-EXPR, ABS-EXPR, ABS-EXPR' - -* PopSection:: `.popsection' -* Previous:: `.previous' - -* Print:: `.print STRING' - -* Protected:: `.protected NAMES' - -* Psize:: `.psize LINES, COLUMNS' -* Purgem:: `.purgem NAME' - -* PushSection:: `.pushsection NAME' - -* Quad:: `.quad BIGNUMS' -* Reloc:: `.reloc OFFSET, RELOC_NAME[, EXPRESSION]' -* Rept:: `.rept COUNT' -* Sbttl:: `.sbttl "SUBHEADING"' - -* Scl:: `.scl CLASS' - -* Section:: `.section NAME[, FLAGS]' - -* Set:: `.set SYMBOL, EXPRESSION' -* Short:: `.short EXPRESSIONS' -* Single:: `.single FLONUMS' - -* Size:: `.size [NAME , EXPRESSION]' - -* Skip:: `.skip SIZE , FILL' - -* Sleb128:: `.sleb128 EXPRESSIONS' - -* Space:: `.space SIZE , FILL' - -* Stab:: `.stabd, .stabn, .stabs' - -* String:: `.string "STR"', `.string8 "STR"', `.string16 "STR"', `.string32 "STR"', `.string64 "STR"' -* Struct:: `.struct EXPRESSION' - -* SubSection:: `.subsection' -* Symver:: `.symver NAME,NAME2@NODENAME' - - -* Tag:: `.tag STRUCTNAME' - -* Text:: `.text SUBSECTION' -* Title:: `.title "HEADING"' - -* Type:: `.type <INT | NAME , TYPE DESCRIPTION>' - -* Uleb128:: `.uleb128 EXPRESSIONS' - -* Val:: `.val ADDR' - - -* Version:: `.version "STRING"' -* VTableEntry:: `.vtable_entry TABLE, OFFSET' -* VTableInherit:: `.vtable_inherit CHILD, PARENT' - -* Warning:: `.warning STRING' -* Weak:: `.weak NAMES' -* Weakref:: `.weakref ALIAS, SYMBOL' -* Word:: `.word EXPRESSIONS' -* Deprecated:: Deprecated Directives - - -File: as.info, Node: Abort, Next: ABORT (COFF), Up: Pseudo Ops - -7.1 `.abort' -============ - -This directive stops the assembly immediately. It is for compatibility -with other assemblers. The original idea was that the assembly -language source would be piped into the assembler. If the sender of -the source quit, it could use this directive tells `as' to quit also. -One day `.abort' will not be supported. - - -File: as.info, Node: ABORT (COFF), Next: Align, Prev: Abort, Up: Pseudo Ops - -7.2 `.ABORT' (COFF) -=================== - -When producing COFF output, `as' accepts this directive as a synonym -for `.abort'. - - -File: as.info, Node: Align, Next: Altmacro, Prev: ABORT (COFF), Up: Pseudo Ops - -7.3 `.align ABS-EXPR, ABS-EXPR, ABS-EXPR' -========================================= - -Pad the location counter (in the current subsection) to a particular -storage boundary. The first expression (which must be absolute) is the -alignment required, as described below. - - The second expression (also absolute) gives the fill value to be -stored in the padding bytes. It (and the comma) may be omitted. If it -is omitted, the padding bytes are normally zero. However, on some -systems, if the section is marked as containing code and the fill value -is omitted, the space is filled with no-op instructions. - - The third expression is also absolute, and is also optional. If it -is present, it is the maximum number of bytes that should be skipped by -this alignment directive. If doing the alignment would require -skipping more bytes than the specified maximum, then the alignment is -not done at all. You can omit the fill value (the second argument) -entirely by simply using two commas after the required alignment; this -can be useful if you want the alignment to be filled with no-op -instructions when appropriate. - - The way the required alignment is specified varies from system to -system. For the arc, hppa, i386 using ELF, i860, iq2000, m68k, or32, -s390, sparc, tic4x, tic80 and xtensa, the first expression is the -alignment request in bytes. For example `.align 8' advances the -location counter until it is a multiple of 8. If the location counter -is already a multiple of 8, no change is needed. For the tic54x, the -first expression is the alignment request in words. - - For other systems, including ppc, i386 using a.out format, arm and -strongarm, it is the number of low-order zero bits the location counter -must have after advancement. For example `.align 3' advances the -location counter until it a multiple of 8. If the location counter is -already a multiple of 8, no change is needed. - - This inconsistency is due to the different behaviors of the various -native assemblers for these systems which GAS must emulate. GAS also -provides `.balign' and `.p2align' directives, described later, which -have a consistent behavior across all architectures (but are specific -to GAS). - - -File: as.info, Node: Altmacro, Next: Ascii, Prev: Align, Up: Pseudo Ops - -7.4 `.altmacro' -=============== - -Enable alternate macro mode, enabling: - -`LOCAL NAME [ , ... ]' - One additional directive, `LOCAL', is available. It is used to - generate a string replacement for each of the NAME arguments, and - replace any instances of NAME in each macro expansion. The - replacement string is unique in the assembly, and different for - each separate macro expansion. `LOCAL' allows you to write macros - that define symbols, without fear of conflict between separate - macro expansions. - -`String delimiters' - You can write strings delimited in these other ways besides - `"STRING"': - - `'STRING'' - You can delimit strings with single-quote characters. - - `<STRING>' - You can delimit strings with matching angle brackets. - -`single-character string escape' - To include any single character literally in a string (even if the - character would otherwise have some special meaning), you can - prefix the character with `!' (an exclamation mark). For example, - you can write `<4.3 !> 5.4!!>' to get the literal text `4.3 > - 5.4!'. - -`Expression results as strings' - You can write `%EXPR' to evaluate the expression EXPR and use the - result as a string. - - -File: as.info, Node: Ascii, Next: Asciz, Prev: Altmacro, Up: Pseudo Ops - -7.5 `.ascii "STRING"'... -======================== - -`.ascii' expects zero or more string literals (*note Strings::) -separated by commas. It assembles each string (with no automatic -trailing zero byte) into consecutive addresses. - - -File: as.info, Node: Asciz, Next: Balign, Prev: Ascii, Up: Pseudo Ops - -7.6 `.asciz "STRING"'... -======================== - -`.asciz' is just like `.ascii', but each string is followed by a zero -byte. The "z" in `.asciz' stands for "zero". - - -File: as.info, Node: Balign, Next: Bundle directives, Prev: Asciz, Up: Pseudo Ops - -7.7 `.balign[wl] ABS-EXPR, ABS-EXPR, ABS-EXPR' -============================================== - -Pad the location counter (in the current subsection) to a particular -storage boundary. The first expression (which must be absolute) is the -alignment request in bytes. For example `.balign 8' advances the -location counter until it is a multiple of 8. If the location counter -is already a multiple of 8, no change is needed. - - The second expression (also absolute) gives the fill value to be -stored in the padding bytes. It (and the comma) may be omitted. If it -is omitted, the padding bytes are normally zero. However, on some -systems, if the section is marked as containing code and the fill value -is omitted, the space is filled with no-op instructions. - - The third expression is also absolute, and is also optional. If it -is present, it is the maximum number of bytes that should be skipped by -this alignment directive. If doing the alignment would require -skipping more bytes than the specified maximum, then the alignment is -not done at all. You can omit the fill value (the second argument) -entirely by simply using two commas after the required alignment; this -can be useful if you want the alignment to be filled with no-op -instructions when appropriate. - - The `.balignw' and `.balignl' directives are variants of the -`.balign' directive. The `.balignw' directive treats the fill pattern -as a two byte word value. The `.balignl' directives treats the fill -pattern as a four byte longword value. For example, `.balignw -4,0x368d' will align to a multiple of 4. If it skips two bytes, they -will be filled in with the value 0x368d (the exact placement of the -bytes depends upon the endianness of the processor). If it skips 1 or -3 bytes, the fill value is undefined. - - -File: as.info, Node: Bundle directives, Next: Byte, Prev: Balign, Up: Pseudo Ops - -7.8 `.bundle_align_mode ABS-EXPR' -================================= - -`.bundle_align_mode' enables or disables "aligned instruction bundle" -mode. In this mode, sequences of adjacent instructions are grouped -into fixed-sized "bundles". If the argument is zero, this mode is -disabled (which is the default state). If the argument it not zero, it -gives the size of an instruction bundle as a power of two (as for the -`.p2align' directive, *note P2align::). - - For some targets, it's an ABI requirement that no instruction may -span a certain aligned boundary. A "bundle" is simply a sequence of -instructions that starts on an aligned boundary. For example, if -ABS-EXPR is `5' then the bundle size is 32, so each aligned chunk of 32 -bytes is a bundle. When aligned instruction bundle mode is in effect, -no single instruction may span a boundary between bundles. If an -instruction would start too close to the end of a bundle for the length -of that particular instruction to fit within the bundle, then the space -at the end of that bundle is filled with no-op instructions so the -instruction starts in the next bundle. As a corollary, it's an error -if any single instruction's encoding is longer than the bundle size. - -7.9 `.bundle_lock' and `.bundle_unlock' -======================================= - -The `.bundle_lock' and directive `.bundle_unlock' directives allow -explicit control over instruction bundle padding. These directives are -only valid when `.bundle_align_mode' has been used to enable aligned -instruction bundle mode. It's an error if they appear when -`.bundle_align_mode' has not been used at all, or when the last -directive was `.bundle_align_mode 0'. - - For some targets, it's an ABI requirement that certain instructions -may appear only as part of specified permissible sequences of multiple -instructions, all within the same bundle. A pair of `.bundle_lock' and -`.bundle_unlock' directives define a "bundle-locked" instruction -sequence. For purposes of aligned instruction bundle mode, a sequence -starting with `.bundle_lock' and ending with `.bundle_unlock' is -treated as a single instruction. That is, the entire sequence must fit -into a single bundle and may not span a bundle boundary. If necessary, -no-op instructions will be inserted before the first instruction of the -sequence so that the whole sequence starts on an aligned bundle -boundary. It's an error if the sequence is longer than the bundle size. - - For convenience when using `.bundle_lock' and `.bundle_unlock' -inside assembler macros (*note Macro::), bundle-locked sequences may be -nested. That is, a second `.bundle_lock' directive before the next -`.bundle_unlock' directive has no effect except that it must be matched -by another closing `.bundle_unlock' so that there is the same number of -`.bundle_lock' and `.bundle_unlock' directives. - - -File: as.info, Node: Byte, Next: CFI directives, Prev: Bundle directives, Up: Pseudo Ops - -7.10 `.byte EXPRESSIONS' -======================== - -`.byte' expects zero or more expressions, separated by commas. Each -expression is assembled into the next byte. - - -File: as.info, Node: CFI directives, Next: Comm, Prev: Byte, Up: Pseudo Ops - -7.11 `.cfi_sections SECTION_LIST' -================================= - -`.cfi_sections' may be used to specify whether CFI directives should -emit `.eh_frame' section and/or `.debug_frame' section. If -SECTION_LIST is `.eh_frame', `.eh_frame' is emitted, if SECTION_LIST is -`.debug_frame', `.debug_frame' is emitted. To emit both use -`.eh_frame, .debug_frame'. The default if this directive is not used -is `.cfi_sections .eh_frame'. - -7.12 `.cfi_startproc [simple]' -============================== - -`.cfi_startproc' is used at the beginning of each function that should -have an entry in `.eh_frame'. It initializes some internal data -structures. Don't forget to close the function by `.cfi_endproc'. - - Unless `.cfi_startproc' is used along with parameter `simple' it -also emits some architecture dependent initial CFI instructions. - -7.13 `.cfi_endproc' -=================== - -`.cfi_endproc' is used at the end of a function where it closes its -unwind entry previously opened by `.cfi_startproc', and emits it to -`.eh_frame'. - -7.14 `.cfi_personality ENCODING [, EXP]' -======================================== - -`.cfi_personality' defines personality routine and its encoding. -ENCODING must be a constant determining how the personality should be -encoded. If it is 255 (`DW_EH_PE_omit'), second argument is not -present, otherwise second argument should be a constant or a symbol -name. When using indirect encodings, the symbol provided should be the -location where personality can be loaded from, not the personality -routine itself. The default after `.cfi_startproc' is -`.cfi_personality 0xff', no personality routine. - -7.15 `.cfi_lsda ENCODING [, EXP]' -================================= - -`.cfi_lsda' defines LSDA and its encoding. ENCODING must be a constant -determining how the LSDA should be encoded. If it is 255 -(`DW_EH_PE_omit'), second argument is not present, otherwise second -argument should be a constant or a symbol name. The default after -`.cfi_startproc' is `.cfi_lsda 0xff', no LSDA. - -7.16 `.cfi_def_cfa REGISTER, OFFSET' -==================================== - -`.cfi_def_cfa' defines a rule for computing CFA as: take address from -REGISTER and add OFFSET to it. - -7.17 `.cfi_def_cfa_register REGISTER' -===================================== - -`.cfi_def_cfa_register' modifies a rule for computing CFA. From now on -REGISTER will be used instead of the old one. Offset remains the same. - -7.18 `.cfi_def_cfa_offset OFFSET' -================================= - -`.cfi_def_cfa_offset' modifies a rule for computing CFA. Register -remains the same, but OFFSET is new. Note that it is the absolute -offset that will be added to a defined register to compute CFA address. - -7.19 `.cfi_adjust_cfa_offset OFFSET' -==================================== - -Same as `.cfi_def_cfa_offset' but OFFSET is a relative value that is -added/substracted from the previous offset. - -7.20 `.cfi_offset REGISTER, OFFSET' -=================================== - -Previous value of REGISTER is saved at offset OFFSET from CFA. - -7.21 `.cfi_rel_offset REGISTER, OFFSET' -======================================= - -Previous value of REGISTER is saved at offset OFFSET from the current -CFA register. This is transformed to `.cfi_offset' using the known -displacement of the CFA register from the CFA. This is often easier to -use, because the number will match the code it's annotating. - -7.22 `.cfi_register REGISTER1, REGISTER2' -========================================= - -Previous value of REGISTER1 is saved in register REGISTER2. - -7.23 `.cfi_restore REGISTER' -============================ - -`.cfi_restore' says that the rule for REGISTER is now the same as it -was at the beginning of the function, after all initial instruction -added by `.cfi_startproc' were executed. - -7.24 `.cfi_undefined REGISTER' -============================== - -From now on the previous value of REGISTER can't be restored anymore. - -7.25 `.cfi_same_value REGISTER' -=============================== - -Current value of REGISTER is the same like in the previous frame, i.e. -no restoration needed. - -7.26 `.cfi_remember_state', -=========================== - -First save all current rules for all registers by `.cfi_remember_state', -then totally screw them up by subsequent `.cfi_*' directives and when -everything is hopelessly bad, use `.cfi_restore_state' to restore the -previous saved state. - -7.27 `.cfi_return_column REGISTER' -================================== - -Change return column REGISTER, i.e. the return address is either -directly in REGISTER or can be accessed by rules for REGISTER. - -7.28 `.cfi_signal_frame' -======================== - -Mark current function as signal trampoline. - -7.29 `.cfi_window_save' -======================= - -SPARC register window has been saved. - -7.30 `.cfi_escape' EXPRESSION[, ...] -==================================== - -Allows the user to add arbitrary bytes to the unwind info. One might -use this to add OS-specific CFI opcodes, or generic CFI opcodes that -GAS does not yet support. - -7.31 `.cfi_val_encoded_addr REGISTER, ENCODING, LABEL' -====================================================== - -The current value of REGISTER is LABEL. The value of LABEL will be -encoded in the output file according to ENCODING; see the description -of `.cfi_personality' for details on this encoding. - - The usefulness of equating a register to a fixed label is probably -limited to the return address register. Here, it can be useful to mark -a code segment that has only one return address which is reached by a -direct branch and no copy of the return address exists in memory or -another register. - - -File: as.info, Node: Comm, Next: Data, Prev: CFI directives, Up: Pseudo Ops - -7.32 `.comm SYMBOL , LENGTH ' -============================= - -`.comm' declares a common symbol named SYMBOL. When linking, a common -symbol in one object file may be merged with a defined or common symbol -of the same name in another object file. If `ld' does not see a -definition for the symbol-just one or more common symbols-then it will -allocate LENGTH bytes of uninitialized memory. LENGTH must be an -absolute expression. If `ld' sees multiple common symbols with the -same name, and they do not all have the same size, it will allocate -space using the largest size. - - When using ELF or (as a GNU extension) PE, the `.comm' directive -takes an optional third argument. This is the desired alignment of the -symbol, specified for ELF as a byte boundary (for example, an alignment -of 16 means that the least significant 4 bits of the address should be -zero), and for PE as a power of two (for example, an alignment of 5 -means aligned to a 32-byte boundary). The alignment must be an -absolute expression, and it must be a power of two. If `ld' allocates -uninitialized memory for the common symbol, it will use the alignment -when placing the symbol. If no alignment is specified, `as' will set -the alignment to the largest power of two less than or equal to the -size of the symbol, up to a maximum of 16 on ELF, or the default -section alignment of 4 on PE(1). - - The syntax for `.comm' differs slightly on the HPPA. The syntax is -`SYMBOL .comm, LENGTH'; SYMBOL is optional. - - ---------- Footnotes ---------- - - (1) This is not the same as the executable image file alignment -controlled by `ld''s `--section-alignment' option; image file sections -in PE are aligned to multiples of 4096, which is far too large an -alignment for ordinary variables. It is rather the default alignment -for (non-debug) sections within object (`*.o') files, which are less -strictly aligned. - - -File: as.info, Node: Data, Next: Def, Prev: Comm, Up: Pseudo Ops - -7.33 `.data SUBSECTION' -======================= - -`.data' tells `as' to assemble the following statements onto the end of -the data subsection numbered SUBSECTION (which is an absolute -expression). If SUBSECTION is omitted, it defaults to zero. - - -File: as.info, Node: Def, Next: Desc, Prev: Data, Up: Pseudo Ops - -7.34 `.def NAME' -================ - -Begin defining debugging information for a symbol NAME; the definition -extends until the `.endef' directive is encountered. - - -File: as.info, Node: Desc, Next: Dim, Prev: Def, Up: Pseudo Ops - -7.35 `.desc SYMBOL, ABS-EXPRESSION' -=================================== - -This directive sets the descriptor of the symbol (*note Symbol -Attributes::) to the low 16 bits of an absolute expression. - - The `.desc' directive is not available when `as' is configured for -COFF output; it is only for `a.out' or `b.out' object format. For the -sake of compatibility, `as' accepts it, but produces no output, when -configured for COFF. - - -File: as.info, Node: Dim, Next: Double, Prev: Desc, Up: Pseudo Ops - -7.36 `.dim' -=========== - -This directive is generated by compilers to include auxiliary debugging -information in the symbol table. It is only permitted inside -`.def'/`.endef' pairs. - - -File: as.info, Node: Double, Next: Eject, Prev: Dim, Up: Pseudo Ops - -7.37 `.double FLONUMS' -====================== - -`.double' expects zero or more flonums, separated by commas. It -assembles floating point numbers. The exact kind of floating point -numbers emitted depends on how `as' is configured. *Note Machine -Dependencies::. - - -File: as.info, Node: Eject, Next: Else, Prev: Double, Up: Pseudo Ops - -7.38 `.eject' -============= - -Force a page break at this point, when generating assembly listings. - - -File: as.info, Node: Else, Next: Elseif, Prev: Eject, Up: Pseudo Ops - -7.39 `.else' -============ - -`.else' is part of the `as' support for conditional assembly; see *Note -`.if': If. It marks the beginning of a section of code to be assembled -if the condition for the preceding `.if' was false. - - -File: as.info, Node: Elseif, Next: End, Prev: Else, Up: Pseudo Ops - -7.40 `.elseif' -============== - -`.elseif' is part of the `as' support for conditional assembly; see -*Note `.if': If. It is shorthand for beginning a new `.if' block that -would otherwise fill the entire `.else' section. - - -File: as.info, Node: End, Next: Endef, Prev: Elseif, Up: Pseudo Ops - -7.41 `.end' -=========== - -`.end' marks the end of the assembly file. `as' does not process -anything in the file past the `.end' directive. - - -File: as.info, Node: Endef, Next: Endfunc, Prev: End, Up: Pseudo Ops - -7.42 `.endef' -============= - -This directive flags the end of a symbol definition begun with `.def'. - - -File: as.info, Node: Endfunc, Next: Endif, Prev: Endef, Up: Pseudo Ops - -7.43 `.endfunc' -=============== - -`.endfunc' marks the end of a function specified with `.func'. - - -File: as.info, Node: Endif, Next: Equ, Prev: Endfunc, Up: Pseudo Ops - -7.44 `.endif' -============= - -`.endif' is part of the `as' support for conditional assembly; it marks -the end of a block of code that is only assembled conditionally. *Note -`.if': If. - - -File: as.info, Node: Equ, Next: Equiv, Prev: Endif, Up: Pseudo Ops - -7.45 `.equ SYMBOL, EXPRESSION' -============================== - -This directive sets the value of SYMBOL to EXPRESSION. It is -synonymous with `.set'; see *Note `.set': Set. - - The syntax for `equ' on the HPPA is `SYMBOL .equ EXPRESSION'. - - The syntax for `equ' on the Z80 is `SYMBOL equ EXPRESSION'. On the -Z80 it is an eror if SYMBOL is already defined, but the symbol is not -protected from later redefinition. Compare *Note Equiv::. - - -File: as.info, Node: Equiv, Next: Eqv, Prev: Equ, Up: Pseudo Ops - -7.46 `.equiv SYMBOL, EXPRESSION' -================================ - -The `.equiv' directive is like `.equ' and `.set', except that the -assembler will signal an error if SYMBOL is already defined. Note a -symbol which has been referenced but not actually defined is considered -to be undefined. - - Except for the contents of the error message, this is roughly -equivalent to - .ifdef SYM - .err - .endif - .equ SYM,VAL - plus it protects the symbol from later redefinition. - - -File: as.info, Node: Eqv, Next: Err, Prev: Equiv, Up: Pseudo Ops - -7.47 `.eqv SYMBOL, EXPRESSION' -============================== - -The `.eqv' directive is like `.equiv', but no attempt is made to -evaluate the expression or any part of it immediately. Instead each -time the resulting symbol is used in an expression, a snapshot of its -current value is taken. - - -File: as.info, Node: Err, Next: Error, Prev: Eqv, Up: Pseudo Ops - -7.48 `.err' -=========== - -If `as' assembles a `.err' directive, it will print an error message -and, unless the `-Z' option was used, it will not generate an object -file. This can be used to signal an error in conditionally compiled -code. - - -File: as.info, Node: Error, Next: Exitm, Prev: Err, Up: Pseudo Ops - -7.49 `.error "STRING"' -====================== - -Similarly to `.err', this directive emits an error, but you can specify -a string that will be emitted as the error message. If you don't -specify the message, it defaults to `".error directive invoked in -source file"'. *Note Error and Warning Messages: Errors. - - .error "This code has not been assembled and tested." - - -File: as.info, Node: Exitm, Next: Extern, Prev: Error, Up: Pseudo Ops - -7.50 `.exitm' -============= - -Exit early from the current macro definition. *Note Macro::. - - -File: as.info, Node: Extern, Next: Fail, Prev: Exitm, Up: Pseudo Ops - -7.51 `.extern' -============== - -`.extern' is accepted in the source program--for compatibility with -other assemblers--but it is ignored. `as' treats all undefined symbols -as external. - - -File: as.info, Node: Fail, Next: File, Prev: Extern, Up: Pseudo Ops - -7.52 `.fail EXPRESSION' -======================= - -Generates an error or a warning. If the value of the EXPRESSION is 500 -or more, `as' will print a warning message. If the value is less than -500, `as' will print an error message. The message will include the -value of EXPRESSION. This can occasionally be useful inside complex -nested macros or conditional assembly. - - -File: as.info, Node: File, Next: Fill, Prev: Fail, Up: Pseudo Ops - -7.53 `.file' -============ - -There are two different versions of the `.file' directive. Targets -that support DWARF2 line number information use the DWARF2 version of -`.file'. Other targets use the default version. - -Default Version ---------------- - -This version of the `.file' directive tells `as' that we are about to -start a new logical file. The syntax is: - - .file STRING - - STRING is the new file name. In general, the filename is recognized -whether or not it is surrounded by quotes `"'; but if you wish to -specify an empty file name, you must give the quotes-`""'. This -statement may go away in future: it is only recognized to be compatible -with old `as' programs. - -DWARF2 Version --------------- - -When emitting DWARF2 line number information, `.file' assigns filenames -to the `.debug_line' file name table. The syntax is: - - .file FILENO FILENAME - - The FILENO operand should be a unique positive integer to use as the -index of the entry in the table. The FILENAME operand is a C string -literal. - - The detail of filename indices is exposed to the user because the -filename table is shared with the `.debug_info' section of the DWARF2 -debugging information, and thus the user must know the exact indices -that table entries will have. - - -File: as.info, Node: Fill, Next: Float, Prev: File, Up: Pseudo Ops - -7.54 `.fill REPEAT , SIZE , VALUE' -================================== - -REPEAT, SIZE and VALUE are absolute expressions. This emits REPEAT -copies of SIZE bytes. REPEAT may be zero or more. SIZE may be zero or -more, but if it is more than 8, then it is deemed to have the value 8, -compatible with other people's assemblers. The contents of each REPEAT -bytes is taken from an 8-byte number. The highest order 4 bytes are -zero. The lowest order 4 bytes are VALUE rendered in the byte-order of -an integer on the computer `as' is assembling for. Each SIZE bytes in -a repetition is taken from the lowest order SIZE bytes of this number. -Again, this bizarre behavior is compatible with other people's -assemblers. - - SIZE and VALUE are optional. If the second comma and VALUE are -absent, VALUE is assumed zero. If the first comma and following tokens -are absent, SIZE is assumed to be 1. - - -File: as.info, Node: Float, Next: Func, Prev: Fill, Up: Pseudo Ops - -7.55 `.float FLONUMS' -===================== - -This directive assembles zero or more flonums, separated by commas. It -has the same effect as `.single'. The exact kind of floating point -numbers emitted depends on how `as' is configured. *Note Machine -Dependencies::. - - -File: as.info, Node: Func, Next: Global, Prev: Float, Up: Pseudo Ops - -7.56 `.func NAME[,LABEL]' -========================= - -`.func' emits debugging information to denote function NAME, and is -ignored unless the file is assembled with debugging enabled. Only -`--gstabs[+]' is currently supported. LABEL is the entry point of the -function and if omitted NAME prepended with the `leading char' is used. -`leading char' is usually `_' or nothing, depending on the target. All -functions are currently defined to have `void' return type. The -function must be terminated with `.endfunc'. - - -File: as.info, Node: Global, Next: Gnu_attribute, Prev: Func, Up: Pseudo Ops - -7.57 `.global SYMBOL', `.globl SYMBOL' -====================================== - -`.global' makes the symbol visible to `ld'. If you define SYMBOL in -your partial program, its value is made available to other partial -programs that are linked with it. Otherwise, SYMBOL takes its -attributes from a symbol of the same name from another file linked into -the same program. - - Both spellings (`.globl' and `.global') are accepted, for -compatibility with other assemblers. - - On the HPPA, `.global' is not always enough to make it accessible to -other partial programs. You may need the HPPA-only `.EXPORT' directive -as well. *Note HPPA Assembler Directives: HPPA Directives. - - -File: as.info, Node: Gnu_attribute, Next: Hidden, Prev: Global, Up: Pseudo Ops - -7.58 `.gnu_attribute TAG,VALUE' -=============================== - -Record a GNU object attribute for this file. *Note Object Attributes::. - - -File: as.info, Node: Hidden, Next: hword, Prev: Gnu_attribute, Up: Pseudo Ops - -7.59 `.hidden NAMES' -==================== - -This is one of the ELF visibility directives. The other two are -`.internal' (*note `.internal': Internal.) and `.protected' (*note -`.protected': Protected.). - - This directive overrides the named symbols default visibility (which -is set by their binding: local, global or weak). The directive sets -the visibility to `hidden' which means that the symbols are not visible -to other components. Such symbols are always considered to be -`protected' as well. - - -File: as.info, Node: hword, Next: Ident, Prev: Hidden, Up: Pseudo Ops - -7.60 `.hword EXPRESSIONS' -========================= - -This expects zero or more EXPRESSIONS, and emits a 16 bit number for -each. - - This directive is a synonym for `.short'; depending on the target -architecture, it may also be a synonym for `.word'. - - -File: as.info, Node: Ident, Next: If, Prev: hword, Up: Pseudo Ops - -7.61 `.ident' -============= - -This directive is used by some assemblers to place tags in object -files. The behavior of this directive varies depending on the target. -When using the a.out object file format, `as' simply accepts the -directive for source-file compatibility with existing assemblers, but -does not emit anything for it. When using COFF, comments are emitted -to the `.comment' or `.rdata' section, depending on the target. When -using ELF, comments are emitted to the `.comment' section. - - -File: as.info, Node: If, Next: Incbin, Prev: Ident, Up: Pseudo Ops - -7.62 `.if ABSOLUTE EXPRESSION' -============================== - -`.if' marks the beginning of a section of code which is only considered -part of the source program being assembled if the argument (which must -be an ABSOLUTE EXPRESSION) is non-zero. The end of the conditional -section of code must be marked by `.endif' (*note `.endif': Endif.); -optionally, you may include code for the alternative condition, flagged -by `.else' (*note `.else': Else.). If you have several conditions to -check, `.elseif' may be used to avoid nesting blocks if/else within -each subsequent `.else' block. - - The following variants of `.if' are also supported: -`.ifdef SYMBOL' - Assembles the following section of code if the specified SYMBOL - has been defined. Note a symbol which has been referenced but not - yet defined is considered to be undefined. - -`.ifb TEXT' - Assembles the following section of code if the operand is blank - (empty). - -`.ifc STRING1,STRING2' - Assembles the following section of code if the two strings are the - same. The strings may be optionally quoted with single quotes. - If they are not quoted, the first string stops at the first comma, - and the second string stops at the end of the line. Strings which - contain whitespace should be quoted. The string comparison is - case sensitive. - -`.ifeq ABSOLUTE EXPRESSION' - Assembles the following section of code if the argument is zero. - -`.ifeqs STRING1,STRING2' - Another form of `.ifc'. The strings must be quoted using double - quotes. - -`.ifge ABSOLUTE EXPRESSION' - Assembles the following section of code if the argument is greater - than or equal to zero. - -`.ifgt ABSOLUTE EXPRESSION' - Assembles the following section of code if the argument is greater - than zero. - -`.ifle ABSOLUTE EXPRESSION' - Assembles the following section of code if the argument is less - than or equal to zero. - -`.iflt ABSOLUTE EXPRESSION' - Assembles the following section of code if the argument is less - than zero. - -`.ifnb TEXT' - Like `.ifb', but the sense of the test is reversed: this assembles - the following section of code if the operand is non-blank - (non-empty). - -`.ifnc STRING1,STRING2.' - Like `.ifc', but the sense of the test is reversed: this assembles - the following section of code if the two strings are not the same. - -`.ifndef SYMBOL' -`.ifnotdef SYMBOL' - Assembles the following section of code if the specified SYMBOL - has not been defined. Both spelling variants are equivalent. - Note a symbol which has been referenced but not yet defined is - considered to be undefined. - -`.ifne ABSOLUTE EXPRESSION' - Assembles the following section of code if the argument is not - equal to zero (in other words, this is equivalent to `.if'). - -`.ifnes STRING1,STRING2' - Like `.ifeqs', but the sense of the test is reversed: this - assembles the following section of code if the two strings are not - the same. - - -File: as.info, Node: Incbin, Next: Include, Prev: If, Up: Pseudo Ops - -7.63 `.incbin "FILE"[,SKIP[,COUNT]]' -==================================== - -The `incbin' directive includes FILE verbatim at the current location. -You can control the search paths used with the `-I' command-line option -(*note Command-Line Options: Invoking.). Quotation marks are required -around FILE. - - The SKIP argument skips a number of bytes from the start of the -FILE. The COUNT argument indicates the maximum number of bytes to -read. Note that the data is not aligned in any way, so it is the user's -responsibility to make sure that proper alignment is provided both -before and after the `incbin' directive. - - -File: as.info, Node: Include, Next: Int, Prev: Incbin, Up: Pseudo Ops - -7.64 `.include "FILE"' -====================== - -This directive provides a way to include supporting files at specified -points in your source program. The code from FILE is assembled as if -it followed the point of the `.include'; when the end of the included -file is reached, assembly of the original file continues. You can -control the search paths used with the `-I' command-line option (*note -Command-Line Options: Invoking.). Quotation marks are required around -FILE. - - -File: as.info, Node: Int, Next: Internal, Prev: Include, Up: Pseudo Ops - -7.65 `.int EXPRESSIONS' -======================= - -Expect zero or more EXPRESSIONS, of any section, separated by commas. -For each expression, emit a number that, at run time, is the value of -that expression. The byte order and bit size of the number depends on -what kind of target the assembly is for. - - -File: as.info, Node: Internal, Next: Irp, Prev: Int, Up: Pseudo Ops - -7.66 `.internal NAMES' -====================== - -This is one of the ELF visibility directives. The other two are -`.hidden' (*note `.hidden': Hidden.) and `.protected' (*note -`.protected': Protected.). - - This directive overrides the named symbols default visibility (which -is set by their binding: local, global or weak). The directive sets -the visibility to `internal' which means that the symbols are -considered to be `hidden' (i.e., not visible to other components), and -that some extra, processor specific processing must also be performed -upon the symbols as well. - - -File: as.info, Node: Irp, Next: Irpc, Prev: Internal, Up: Pseudo Ops - -7.67 `.irp SYMBOL,VALUES'... -============================ - -Evaluate a sequence of statements assigning different values to SYMBOL. -The sequence of statements starts at the `.irp' directive, and is -terminated by an `.endr' directive. For each VALUE, SYMBOL is set to -VALUE, and the sequence of statements is assembled. If no VALUE is -listed, the sequence of statements is assembled once, with SYMBOL set -to the null string. To refer to SYMBOL within the sequence of -statements, use \SYMBOL. - - For example, assembling - - .irp param,1,2,3 - move d\param,sp@- - .endr - - is equivalent to assembling - - move d1,sp@- - move d2,sp@- - move d3,sp@- - - For some caveats with the spelling of SYMBOL, see also *Note Macro::. - - -File: as.info, Node: Irpc, Next: Lcomm, Prev: Irp, Up: Pseudo Ops - -7.68 `.irpc SYMBOL,VALUES'... -============================= - -Evaluate a sequence of statements assigning different values to SYMBOL. -The sequence of statements starts at the `.irpc' directive, and is -terminated by an `.endr' directive. For each character in VALUE, -SYMBOL is set to the character, and the sequence of statements is -assembled. If no VALUE is listed, the sequence of statements is -assembled once, with SYMBOL set to the null string. To refer to SYMBOL -within the sequence of statements, use \SYMBOL. - - For example, assembling - - .irpc param,123 - move d\param,sp@- - .endr - - is equivalent to assembling - - move d1,sp@- - move d2,sp@- - move d3,sp@- - - For some caveats with the spelling of SYMBOL, see also the discussion -at *Note Macro::. - - -File: as.info, Node: Lcomm, Next: Lflags, Prev: Irpc, Up: Pseudo Ops - -7.69 `.lcomm SYMBOL , LENGTH' -============================= - -Reserve LENGTH (an absolute expression) bytes for a local common -denoted by SYMBOL. The section and value of SYMBOL are those of the -new local common. The addresses are allocated in the bss section, so -that at run-time the bytes start off zeroed. SYMBOL is not declared -global (*note `.global': Global.), so is normally not visible to `ld'. - - Some targets permit a third argument to be used with `.lcomm'. This -argument specifies the desired alignment of the symbol in the bss -section. - - The syntax for `.lcomm' differs slightly on the HPPA. The syntax is -`SYMBOL .lcomm, LENGTH'; SYMBOL is optional. - - -File: as.info, Node: Lflags, Next: Line, Prev: Lcomm, Up: Pseudo Ops - -7.70 `.lflags' -============== - -`as' accepts this directive, for compatibility with other assemblers, -but ignores it. - - -File: as.info, Node: Line, Next: Linkonce, Prev: Lflags, Up: Pseudo Ops - -7.71 `.line LINE-NUMBER' -======================== - -Change the logical line number. LINE-NUMBER must be an absolute -expression. The next line has that logical line number. Therefore any -other statements on the current line (after a statement separator -character) are reported as on logical line number LINE-NUMBER - 1. One -day `as' will no longer support this directive: it is recognized only -for compatibility with existing assembler programs. - -Even though this is a directive associated with the `a.out' or `b.out' -object-code formats, `as' still recognizes it when producing COFF -output, and treats `.line' as though it were the COFF `.ln' _if_ it is -found outside a `.def'/`.endef' pair. - - Inside a `.def', `.line' is, instead, one of the directives used by -compilers to generate auxiliary symbol information for debugging. - - -File: as.info, Node: Linkonce, Next: List, Prev: Line, Up: Pseudo Ops - -7.72 `.linkonce [TYPE]' -======================= - -Mark the current section so that the linker only includes a single copy -of it. This may be used to include the same section in several -different object files, but ensure that the linker will only include it -once in the final output file. The `.linkonce' pseudo-op must be used -for each instance of the section. Duplicate sections are detected -based on the section name, so it should be unique. - - This directive is only supported by a few object file formats; as of -this writing, the only object file format which supports it is the -Portable Executable format used on Windows NT. - - The TYPE argument is optional. If specified, it must be one of the -following strings. For example: - .linkonce same_size - Not all types may be supported on all object file formats. - -`discard' - Silently discard duplicate sections. This is the default. - -`one_only' - Warn if there are duplicate sections, but still keep only one copy. - -`same_size' - Warn if any of the duplicates have different sizes. - -`same_contents' - Warn if any of the duplicates do not have exactly the same - contents. - - -File: as.info, Node: List, Next: Ln, Prev: Linkonce, Up: Pseudo Ops - -7.73 `.list' -============ - -Control (in conjunction with the `.nolist' directive) whether or not -assembly listings are generated. These two directives maintain an -internal counter (which is zero initially). `.list' increments the -counter, and `.nolist' decrements it. Assembly listings are generated -whenever the counter is greater than zero. - - By default, listings are disabled. When you enable them (with the -`-a' command line option; *note Command-Line Options: Invoking.), the -initial value of the listing counter is one. - - -File: as.info, Node: Ln, Next: Loc, Prev: List, Up: Pseudo Ops - -7.74 `.ln LINE-NUMBER' -====================== - -`.ln' is a synonym for `.line'. - - -File: as.info, Node: Loc, Next: Loc_mark_labels, Prev: Ln, Up: Pseudo Ops - -7.75 `.loc FILENO LINENO [COLUMN] [OPTIONS]' -============================================ - -When emitting DWARF2 line number information, the `.loc' directive will -add a row to the `.debug_line' line number matrix corresponding to the -immediately following assembly instruction. The FILENO, LINENO, and -optional COLUMN arguments will be applied to the `.debug_line' state -machine before the row is added. - - The OPTIONS are a sequence of the following tokens in any order: - -`basic_block' - This option will set the `basic_block' register in the - `.debug_line' state machine to `true'. - -`prologue_end' - This option will set the `prologue_end' register in the - `.debug_line' state machine to `true'. - -`epilogue_begin' - This option will set the `epilogue_begin' register in the - `.debug_line' state machine to `true'. - -`is_stmt VALUE' - This option will set the `is_stmt' register in the `.debug_line' - state machine to `value', which must be either 0 or 1. - -`isa VALUE' - This directive will set the `isa' register in the `.debug_line' - state machine to VALUE, which must be an unsigned integer. - -`discriminator VALUE' - This directive will set the `discriminator' register in the - `.debug_line' state machine to VALUE, which must be an unsigned - integer. - - - -File: as.info, Node: Loc_mark_labels, Next: Local, Prev: Loc, Up: Pseudo Ops - -7.76 `.loc_mark_labels ENABLE' -============================== - -When emitting DWARF2 line number information, the `.loc_mark_labels' -directive makes the assembler emit an entry to the `.debug_line' line -number matrix with the `basic_block' register in the state machine set -whenever a code label is seen. The ENABLE argument should be either 1 -or 0, to enable or disable this function respectively. - - -File: as.info, Node: Local, Next: Long, Prev: Loc_mark_labels, Up: Pseudo Ops - -7.77 `.local NAMES' -=================== - -This directive, which is available for ELF targets, marks each symbol in -the comma-separated list of `names' as a local symbol so that it will -not be externally visible. If the symbols do not already exist, they -will be created. - - For targets where the `.lcomm' directive (*note Lcomm::) does not -accept an alignment argument, which is the case for most ELF targets, -the `.local' directive can be used in combination with `.comm' (*note -Comm::) to define aligned local common data. - - -File: as.info, Node: Long, Next: Macro, Prev: Local, Up: Pseudo Ops - -7.78 `.long EXPRESSIONS' -======================== - -`.long' is the same as `.int'. *Note `.int': Int. - - -File: as.info, Node: Macro, Next: MRI, Prev: Long, Up: Pseudo Ops - -7.79 `.macro' -============= - -The commands `.macro' and `.endm' allow you to define macros that -generate assembly output. For example, this definition specifies a -macro `sum' that puts a sequence of numbers into memory: - - .macro sum from=0, to=5 - .long \from - .if \to-\from - sum "(\from+1)",\to - .endif - .endm - -With that definition, `SUM 0,5' is equivalent to this assembly input: - - .long 0 - .long 1 - .long 2 - .long 3 - .long 4 - .long 5 - -`.macro MACNAME' -`.macro MACNAME MACARGS ...' - Begin the definition of a macro called MACNAME. If your macro - definition requires arguments, specify their names after the macro - name, separated by commas or spaces. You can qualify the macro - argument to indicate whether all invocations must specify a - non-blank value (through `:`req''), or whether it takes all of the - remaining arguments (through `:`vararg''). You can supply a - default value for any macro argument by following the name with - `=DEFLT'. You cannot define two macros with the same MACNAME - unless it has been subject to the `.purgem' directive (*note - Purgem::) between the two definitions. For example, these are all - valid `.macro' statements: - - `.macro comm' - Begin the definition of a macro called `comm', which takes no - arguments. - - `.macro plus1 p, p1' - `.macro plus1 p p1' - Either statement begins the definition of a macro called - `plus1', which takes two arguments; within the macro - definition, write `\p' or `\p1' to evaluate the arguments. - - `.macro reserve_str p1=0 p2' - Begin the definition of a macro called `reserve_str', with two - arguments. The first argument has a default value, but not - the second. After the definition is complete, you can call - the macro either as `reserve_str A,B' (with `\p1' evaluating - to A and `\p2' evaluating to B), or as `reserve_str ,B' (with - `\p1' evaluating as the default, in this case `0', and `\p2' - evaluating to B). - - `.macro m p1:req, p2=0, p3:vararg' - Begin the definition of a macro called `m', with at least - three arguments. The first argument must always have a value - specified, but not the second, which instead has a default - value. The third formal will get assigned all remaining - arguments specified at invocation time. - - When you call a macro, you can specify the argument values - either by position, or by keyword. For example, `sum 9,17' - is equivalent to `sum to=17, from=9'. - - - Note that since each of the MACARGS can be an identifier exactly - as any other one permitted by the target architecture, there may be - occasional problems if the target hand-crafts special meanings to - certain characters when they occur in a special position. For - example, if the colon (`:') is generally permitted to be part of a - symbol name, but the architecture specific code special-cases it - when occurring as the final character of a symbol (to denote a - label), then the macro parameter replacement code will have no way - of knowing that and consider the whole construct (including the - colon) an identifier, and check only this identifier for being the - subject to parameter substitution. So for example this macro - definition: - - .macro label l - \l: - .endm - - might not work as expected. Invoking `label foo' might not create - a label called `foo' but instead just insert the text `\l:' into - the assembler source, probably generating an error about an - unrecognised identifier. - - Similarly problems might occur with the period character (`.') - which is often allowed inside opcode names (and hence identifier - names). So for example constructing a macro to build an opcode - from a base name and a length specifier like this: - - .macro opcode base length - \base.\length - .endm - - and invoking it as `opcode store l' will not create a `store.l' - instruction but instead generate some kind of error as the - assembler tries to interpret the text `\base.\length'. - - There are several possible ways around this problem: - - `Insert white space' - If it is possible to use white space characters then this is - the simplest solution. eg: - - .macro label l - \l : - .endm - - `Use `\()'' - The string `\()' can be used to separate the end of a macro - argument from the following text. eg: - - .macro opcode base length - \base\().\length - .endm - - `Use the alternate macro syntax mode' - In the alternative macro syntax mode the ampersand character - (`&') can be used as a separator. eg: - - .altmacro - .macro label l - l&: - .endm - - Note: this problem of correctly identifying string parameters to - pseudo ops also applies to the identifiers used in `.irp' (*note - Irp::) and `.irpc' (*note Irpc::) as well. - -`.endm' - Mark the end of a macro definition. - -`.exitm' - Exit early from the current macro definition. - -`\@' - `as' maintains a counter of how many macros it has executed in - this pseudo-variable; you can copy that number to your output with - `\@', but _only within a macro definition_. - -`LOCAL NAME [ , ... ]' - _Warning: `LOCAL' is only available if you select "alternate macro - syntax" with `--alternate' or `.altmacro'._ *Note `.altmacro': - Altmacro. - - -File: as.info, Node: MRI, Next: Noaltmacro, Prev: Macro, Up: Pseudo Ops - -7.80 `.mri VAL' -=============== - -If VAL is non-zero, this tells `as' to enter MRI mode. If VAL is zero, -this tells `as' to exit MRI mode. This change affects code assembled -until the next `.mri' directive, or until the end of the file. *Note -MRI mode: M. - - -File: as.info, Node: Noaltmacro, Next: Nolist, Prev: MRI, Up: Pseudo Ops - -7.81 `.noaltmacro' -================== - -Disable alternate macro mode. *Note Altmacro::. - - -File: as.info, Node: Nolist, Next: Octa, Prev: Noaltmacro, Up: Pseudo Ops - -7.82 `.nolist' -============== - -Control (in conjunction with the `.list' directive) whether or not -assembly listings are generated. These two directives maintain an -internal counter (which is zero initially). `.list' increments the -counter, and `.nolist' decrements it. Assembly listings are generated -whenever the counter is greater than zero. - - -File: as.info, Node: Octa, Next: Offset, Prev: Nolist, Up: Pseudo Ops - -7.83 `.octa BIGNUMS' -==================== - -This directive expects zero or more bignums, separated by commas. For -each bignum, it emits a 16-byte integer. - - The term "octa" comes from contexts in which a "word" is two bytes; -hence _octa_-word for 16 bytes. - - -File: as.info, Node: Offset, Next: Org, Prev: Octa, Up: Pseudo Ops - -7.84 `.offset LOC' -================== - -Set the location counter to LOC in the absolute section. LOC must be -an absolute expression. This directive may be useful for defining -symbols with absolute values. Do not confuse it with the `.org' -directive. - - -File: as.info, Node: Org, Next: P2align, Prev: Offset, Up: Pseudo Ops - -7.85 `.org NEW-LC , FILL' -========================= - -Advance the location counter of the current section to NEW-LC. NEW-LC -is either an absolute expression or an expression with the same section -as the current subsection. That is, you can't use `.org' to cross -sections: if NEW-LC has the wrong section, the `.org' directive is -ignored. To be compatible with former assemblers, if the section of -NEW-LC is absolute, `as' issues a warning, then pretends the section of -NEW-LC is the same as the current subsection. - - `.org' may only increase the location counter, or leave it -unchanged; you cannot use `.org' to move the location counter backwards. - - Because `as' tries to assemble programs in one pass, NEW-LC may not -be undefined. If you really detest this restriction we eagerly await a -chance to share your improved assembler. - - Beware that the origin is relative to the start of the section, not -to the start of the subsection. This is compatible with other people's -assemblers. - - When the location counter (of the current subsection) is advanced, -the intervening bytes are filled with FILL which should be an absolute -expression. If the comma and FILL are omitted, FILL defaults to zero. - - -File: as.info, Node: P2align, Next: PopSection, Prev: Org, Up: Pseudo Ops - -7.86 `.p2align[wl] ABS-EXPR, ABS-EXPR, ABS-EXPR' -================================================ - -Pad the location counter (in the current subsection) to a particular -storage boundary. The first expression (which must be absolute) is the -number of low-order zero bits the location counter must have after -advancement. For example `.p2align 3' advances the location counter -until it a multiple of 8. If the location counter is already a -multiple of 8, no change is needed. - - The second expression (also absolute) gives the fill value to be -stored in the padding bytes. It (and the comma) may be omitted. If it -is omitted, the padding bytes are normally zero. However, on some -systems, if the section is marked as containing code and the fill value -is omitted, the space is filled with no-op instructions. - - The third expression is also absolute, and is also optional. If it -is present, it is the maximum number of bytes that should be skipped by -this alignment directive. If doing the alignment would require -skipping more bytes than the specified maximum, then the alignment is -not done at all. You can omit the fill value (the second argument) -entirely by simply using two commas after the required alignment; this -can be useful if you want the alignment to be filled with no-op -instructions when appropriate. - - The `.p2alignw' and `.p2alignl' directives are variants of the -`.p2align' directive. The `.p2alignw' directive treats the fill -pattern as a two byte word value. The `.p2alignl' directives treats the -fill pattern as a four byte longword value. For example, `.p2alignw -2,0x368d' will align to a multiple of 4. If it skips two bytes, they -will be filled in with the value 0x368d (the exact placement of the -bytes depends upon the endianness of the processor). If it skips 1 or -3 bytes, the fill value is undefined. - - -File: as.info, Node: PopSection, Next: Previous, Prev: P2align, Up: Pseudo Ops - -7.87 `.popsection' -================== - -This is one of the ELF section stack manipulation directives. The -others are `.section' (*note Section::), `.subsection' (*note -SubSection::), `.pushsection' (*note PushSection::), and `.previous' -(*note Previous::). - - This directive replaces the current section (and subsection) with -the top section (and subsection) on the section stack. This section is -popped off the stack. - - -File: as.info, Node: Previous, Next: Print, Prev: PopSection, Up: Pseudo Ops - -7.88 `.previous' -================ - -This is one of the ELF section stack manipulation directives. The -others are `.section' (*note Section::), `.subsection' (*note -SubSection::), `.pushsection' (*note PushSection::), and `.popsection' -(*note PopSection::). - - This directive swaps the current section (and subsection) with most -recently referenced section/subsection pair prior to this one. Multiple -`.previous' directives in a row will flip between two sections (and -their subsections). For example: - - .section A - .subsection 1 - .word 0x1234 - .subsection 2 - .word 0x5678 - .previous - .word 0x9abc - - Will place 0x1234 and 0x9abc into subsection 1 and 0x5678 into -subsection 2 of section A. Whilst: - - .section A - .subsection 1 - # Now in section A subsection 1 - .word 0x1234 - .section B - .subsection 0 - # Now in section B subsection 0 - .word 0x5678 - .subsection 1 - # Now in section B subsection 1 - .word 0x9abc - .previous - # Now in section B subsection 0 - .word 0xdef0 - - Will place 0x1234 into section A, 0x5678 and 0xdef0 into subsection -0 of section B and 0x9abc into subsection 1 of section B. - - In terms of the section stack, this directive swaps the current -section with the top section on the section stack. - - -File: as.info, Node: Print, Next: Protected, Prev: Previous, Up: Pseudo Ops - -7.89 `.print STRING' -==================== - -`as' will print STRING on the standard output during assembly. You -must put STRING in double quotes. - - -File: as.info, Node: Protected, Next: Psize, Prev: Print, Up: Pseudo Ops - -7.90 `.protected NAMES' -======================= - -This is one of the ELF visibility directives. The other two are -`.hidden' (*note Hidden::) and `.internal' (*note Internal::). - - This directive overrides the named symbols default visibility (which -is set by their binding: local, global or weak). The directive sets -the visibility to `protected' which means that any references to the -symbols from within the components that defines them must be resolved -to the definition in that component, even if a definition in another -component would normally preempt this. - - -File: as.info, Node: Psize, Next: Purgem, Prev: Protected, Up: Pseudo Ops - -7.91 `.psize LINES , COLUMNS' -============================= - -Use this directive to declare the number of lines--and, optionally, the -number of columns--to use for each page, when generating listings. - - If you do not use `.psize', listings use a default line-count of 60. -You may omit the comma and COLUMNS specification; the default width is -200 columns. - - `as' generates formfeeds whenever the specified number of lines is -exceeded (or whenever you explicitly request one, using `.eject'). - - If you specify LINES as `0', no formfeeds are generated save those -explicitly specified with `.eject'. - - -File: as.info, Node: Purgem, Next: PushSection, Prev: Psize, Up: Pseudo Ops - -7.92 `.purgem NAME' -=================== - -Undefine the macro NAME, so that later uses of the string will not be -expanded. *Note Macro::. - - -File: as.info, Node: PushSection, Next: Quad, Prev: Purgem, Up: Pseudo Ops - -7.93 `.pushsection NAME [, SUBSECTION] [, "FLAGS"[, @TYPE[,ARGUMENTS]]]' -======================================================================== - -This is one of the ELF section stack manipulation directives. The -others are `.section' (*note Section::), `.subsection' (*note -SubSection::), `.popsection' (*note PopSection::), and `.previous' -(*note Previous::). - - This directive pushes the current section (and subsection) onto the -top of the section stack, and then replaces the current section and -subsection with `name' and `subsection'. The optional `flags', `type' -and `arguments' are treated the same as in the `.section' (*note -Section::) directive. - - -File: as.info, Node: Quad, Next: Reloc, Prev: PushSection, Up: Pseudo Ops - -7.94 `.quad BIGNUMS' -==================== - -`.quad' expects zero or more bignums, separated by commas. For each -bignum, it emits an 8-byte integer. If the bignum won't fit in 8 -bytes, it prints a warning message; and just takes the lowest order 8 -bytes of the bignum. - - The term "quad" comes from contexts in which a "word" is two bytes; -hence _quad_-word for 8 bytes. - - -File: as.info, Node: Reloc, Next: Rept, Prev: Quad, Up: Pseudo Ops - -7.95 `.reloc OFFSET, RELOC_NAME[, EXPRESSION]' -============================================== - -Generate a relocation at OFFSET of type RELOC_NAME with value -EXPRESSION. If OFFSET is a number, the relocation is generated in the -current section. If OFFSET is an expression that resolves to a symbol -plus offset, the relocation is generated in the given symbol's section. -EXPRESSION, if present, must resolve to a symbol plus addend or to an -absolute value, but note that not all targets support an addend. e.g. -ELF REL targets such as i386 store an addend in the section contents -rather than in the relocation. This low level interface does not -support addends stored in the section. - - -File: as.info, Node: Rept, Next: Sbttl, Prev: Reloc, Up: Pseudo Ops - -7.96 `.rept COUNT' -================== - -Repeat the sequence of lines between the `.rept' directive and the next -`.endr' directive COUNT times. - - For example, assembling - - .rept 3 - .long 0 - .endr - - is equivalent to assembling - - .long 0 - .long 0 - .long 0 - - -File: as.info, Node: Sbttl, Next: Scl, Prev: Rept, Up: Pseudo Ops - -7.97 `.sbttl "SUBHEADING"' -========================== - -Use SUBHEADING as the title (third line, immediately after the title -line) when generating assembly listings. - - This directive affects subsequent pages, as well as the current page -if it appears within ten lines of the top of a page. - - -File: as.info, Node: Scl, Next: Section, Prev: Sbttl, Up: Pseudo Ops - -7.98 `.scl CLASS' -================= - -Set the storage-class value for a symbol. This directive may only be -used inside a `.def'/`.endef' pair. Storage class may flag whether a -symbol is static or external, or it may record further symbolic -debugging information. - - -File: as.info, Node: Section, Next: Set, Prev: Scl, Up: Pseudo Ops - -7.99 `.section NAME' -==================== - -Use the `.section' directive to assemble the following code into a -section named NAME. - - This directive is only supported for targets that actually support -arbitrarily named sections; on `a.out' targets, for example, it is not -accepted, even with a standard `a.out' section name. - -COFF Version ------------- - - For COFF targets, the `.section' directive is used in one of the -following ways: - - .section NAME[, "FLAGS"] - .section NAME[, SUBSECTION] - - If the optional argument is quoted, it is taken as flags to use for -the section. Each flag is a single character. The following flags are -recognized: -`b' - bss section (uninitialized data) - -`n' - section is not loaded - -`w' - writable section - -`d' - data section - -`e' - exclude section from linking - -`r' - read-only section - -`x' - executable section - -`s' - shared section (meaningful for PE targets) - -`a' - ignored. (For compatibility with the ELF version) - -`y' - section is not readable (meaningful for PE targets) - -`0-9' - single-digit power-of-two section alignment (GNU extension) - - If no flags are specified, the default flags depend upon the section -name. If the section name is not recognized, the default will be for -the section to be loaded and writable. Note the `n' and `w' flags -remove attributes from the section, rather than adding them, so if they -are used on their own it will be as if no flags had been specified at -all. - - If the optional argument to the `.section' directive is not quoted, -it is taken as a subsection number (*note Sub-Sections::). - -ELF Version ------------ - - This is one of the ELF section stack manipulation directives. The -others are `.subsection' (*note SubSection::), `.pushsection' (*note -PushSection::), `.popsection' (*note PopSection::), and `.previous' -(*note Previous::). - - For ELF targets, the `.section' directive is used like this: - - .section NAME [, "FLAGS"[, @TYPE[,FLAG_SPECIFIC_ARGUMENTS]]] - - The optional FLAGS argument is a quoted string which may contain any -combination of the following characters: -`a' - section is allocatable - -`e' - section is excluded from executable and shared library. - -`w' - section is writable - -`x' - section is executable - -`M' - section is mergeable - -`S' - section contains zero terminated strings - -`G' - section is a member of a section group - -`T' - section is used for thread-local-storage - -`?' - section is a member of the previously-current section's group, if - any - - The optional TYPE argument may contain one of the following -constants: -`@progbits' - section contains data - -`@nobits' - section does not contain data (i.e., section only occupies space) - -`@note' - section contains data which is used by things other than the - program - -`@init_array' - section contains an array of pointers to init functions - -`@fini_array' - section contains an array of pointers to finish functions - -`@preinit_array' - section contains an array of pointers to pre-init functions - - Many targets only support the first three section types. - - Note on targets where the `@' character is the start of a comment (eg -ARM) then another character is used instead. For example the ARM port -uses the `%' character. - - If FLAGS contains the `M' symbol then the TYPE argument must be -specified as well as an extra argument--ENTSIZE--like this: - - .section NAME , "FLAGS"M, @TYPE, ENTSIZE - - Sections with the `M' flag but not `S' flag must contain fixed size -constants, each ENTSIZE octets long. Sections with both `M' and `S' -must contain zero terminated strings where each character is ENTSIZE -bytes long. The linker may remove duplicates within sections with the -same name, same entity size and same flags. ENTSIZE must be an -absolute expression. For sections with both `M' and `S', a string -which is a suffix of a larger string is considered a duplicate. Thus -`"def"' will be merged with `"abcdef"'; A reference to the first -`"def"' will be changed to a reference to `"abcdef"+3'. - - If FLAGS contains the `G' symbol then the TYPE argument must be -present along with an additional field like this: - - .section NAME , "FLAGS"G, @TYPE, GROUPNAME[, LINKAGE] - - The GROUPNAME field specifies the name of the section group to which -this particular section belongs. The optional linkage field can -contain: -`comdat' - indicates that only one copy of this section should be retained - -`.gnu.linkonce' - an alias for comdat - - Note: if both the M and G flags are present then the fields for the -Merge flag should come first, like this: - - .section NAME , "FLAGS"MG, @TYPE, ENTSIZE, GROUPNAME[, LINKAGE] - - If FLAGS contains the `?' symbol then it may not also contain the -`G' symbol and the GROUPNAME or LINKAGE fields should not be present. -Instead, `?' says to consider the section that's current before this -directive. If that section used `G', then the new section will use `G' -with those same GROUPNAME and LINKAGE fields implicitly. If not, then -the `?' symbol has no effect. - - If no flags are specified, the default flags depend upon the section -name. If the section name is not recognized, the default will be for -the section to have none of the above flags: it will not be allocated -in memory, nor writable, nor executable. The section will contain data. - - For ELF targets, the assembler supports another type of `.section' -directive for compatibility with the Solaris assembler: - - .section "NAME"[, FLAGS...] - - Note that the section name is quoted. There may be a sequence of -comma separated flags: -`#alloc' - section is allocatable - -`#write' - section is writable - -`#execinstr' - section is executable - -`#exclude' - section is excluded from executable and shared library. - -`#tls' - section is used for thread local storage - - This directive replaces the current section and subsection. See the -contents of the gas testsuite directory `gas/testsuite/gas/elf' for -some examples of how this directive and the other section stack -directives work. - - -File: as.info, Node: Set, Next: Short, Prev: Section, Up: Pseudo Ops - -7.100 `.set SYMBOL, EXPRESSION' -=============================== - -Set the value of SYMBOL to EXPRESSION. This changes SYMBOL's value and -type to conform to EXPRESSION. If SYMBOL was flagged as external, it -remains flagged (*note Symbol Attributes::). - - You may `.set' a symbol many times in the same assembly. - - If you `.set' a global symbol, the value stored in the object file -is the last value stored into it. - - On Z80 `set' is a real instruction, use `SYMBOL defl EXPRESSION' -instead. - - -File: as.info, Node: Short, Next: Single, Prev: Set, Up: Pseudo Ops - -7.101 `.short EXPRESSIONS' -========================== - -`.short' is normally the same as `.word'. *Note `.word': Word. - - In some configurations, however, `.short' and `.word' generate -numbers of different lengths. *Note Machine Dependencies::. - - -File: as.info, Node: Single, Next: Size, Prev: Short, Up: Pseudo Ops - -7.102 `.single FLONUMS' -======================= - -This directive assembles zero or more flonums, separated by commas. It -has the same effect as `.float'. The exact kind of floating point -numbers emitted depends on how `as' is configured. *Note Machine -Dependencies::. - - -File: as.info, Node: Size, Next: Skip, Prev: Single, Up: Pseudo Ops - -7.103 `.size' -============= - -This directive is used to set the size associated with a symbol. - -COFF Version ------------- - - For COFF targets, the `.size' directive is only permitted inside -`.def'/`.endef' pairs. It is used like this: - - .size EXPRESSION - -ELF Version ------------ - - For ELF targets, the `.size' directive is used like this: - - .size NAME , EXPRESSION - - This directive sets the size associated with a symbol NAME. The -size in bytes is computed from EXPRESSION which can make use of label -arithmetic. This directive is typically used to set the size of -function symbols. - - -File: as.info, Node: Skip, Next: Sleb128, Prev: Size, Up: Pseudo Ops - -7.104 `.skip SIZE , FILL' -========================= - -This directive emits SIZE bytes, each of value FILL. Both SIZE and -FILL are absolute expressions. If the comma and FILL are omitted, FILL -is assumed to be zero. This is the same as `.space'. - - -File: as.info, Node: Sleb128, Next: Space, Prev: Skip, Up: Pseudo Ops - -7.105 `.sleb128 EXPRESSIONS' -============================ - -SLEB128 stands for "signed little endian base 128." This is a compact, -variable length representation of numbers used by the DWARF symbolic -debugging format. *Note `.uleb128': Uleb128. - - -File: as.info, Node: Space, Next: Stab, Prev: Sleb128, Up: Pseudo Ops - -7.106 `.space SIZE , FILL' -========================== - -This directive emits SIZE bytes, each of value FILL. Both SIZE and -FILL are absolute expressions. If the comma and FILL are omitted, FILL -is assumed to be zero. This is the same as `.skip'. - - _Warning:_ `.space' has a completely different meaning for HPPA - targets; use `.block' as a substitute. See `HP9000 Series 800 - Assembly Language Reference Manual' (HP 92432-90001) for the - meaning of the `.space' directive. *Note HPPA Assembler - Directives: HPPA Directives, for a summary. - - -File: as.info, Node: Stab, Next: String, Prev: Space, Up: Pseudo Ops - -7.107 `.stabd, .stabn, .stabs' -============================== - -There are three directives that begin `.stab'. All emit symbols (*note -Symbols::), for use by symbolic debuggers. The symbols are not entered -in the `as' hash table: they cannot be referenced elsewhere in the -source file. Up to five fields are required: - -STRING - This is the symbol's name. It may contain any character except - `\000', so is more general than ordinary symbol names. Some - debuggers used to code arbitrarily complex structures into symbol - names using this field. - -TYPE - An absolute expression. The symbol's type is set to the low 8 - bits of this expression. Any bit pattern is permitted, but `ld' - and debuggers choke on silly bit patterns. - -OTHER - An absolute expression. The symbol's "other" attribute is set to - the low 8 bits of this expression. - -DESC - An absolute expression. The symbol's descriptor is set to the low - 16 bits of this expression. - -VALUE - An absolute expression which becomes the symbol's value. - - If a warning is detected while reading a `.stabd', `.stabn', or -`.stabs' statement, the symbol has probably already been created; you -get a half-formed symbol in your object file. This is compatible with -earlier assemblers! - -`.stabd TYPE , OTHER , DESC' - The "name" of the symbol generated is not even an empty string. - It is a null pointer, for compatibility. Older assemblers used a - null pointer so they didn't waste space in object files with empty - strings. - - The symbol's value is set to the location counter, relocatably. - When your program is linked, the value of this symbol is the - address of the location counter when the `.stabd' was assembled. - -`.stabn TYPE , OTHER , DESC , VALUE' - The name of the symbol is set to the empty string `""'. - -`.stabs STRING , TYPE , OTHER , DESC , VALUE' - All five fields are specified. - - -File: as.info, Node: String, Next: Struct, Prev: Stab, Up: Pseudo Ops - -7.108 `.string' "STR", `.string8' "STR", `.string16' -==================================================== - -"STR", `.string32' "STR", `.string64' "STR" - - Copy the characters in STR to the object file. You may specify more -than one string to copy, separated by commas. Unless otherwise -specified for a particular machine, the assembler marks the end of each -string with a 0 byte. You can use any of the escape sequences -described in *Note Strings: Strings. - - The variants `string16', `string32' and `string64' differ from the -`string' pseudo opcode in that each 8-bit character from STR is copied -and expanded to 16, 32 or 64 bits respectively. The expanded characters -are stored in target endianness byte order. - - Example: - .string32 "BYE" - expands to: - .string "B\0\0\0Y\0\0\0E\0\0\0" /* On little endian targets. */ - .string "\0\0\0B\0\0\0Y\0\0\0E" /* On big endian targets. */ - - -File: as.info, Node: Struct, Next: SubSection, Prev: String, Up: Pseudo Ops - -7.109 `.struct EXPRESSION' -========================== - -Switch to the absolute section, and set the section offset to -EXPRESSION, which must be an absolute expression. You might use this -as follows: - .struct 0 - field1: - .struct field1 + 4 - field2: - .struct field2 + 4 - field3: - This would define the symbol `field1' to have the value 0, the symbol -`field2' to have the value 4, and the symbol `field3' to have the value -8. Assembly would be left in the absolute section, and you would need -to use a `.section' directive of some sort to change to some other -section before further assembly. - - -File: as.info, Node: SubSection, Next: Symver, Prev: Struct, Up: Pseudo Ops - -7.110 `.subsection NAME' -======================== - -This is one of the ELF section stack manipulation directives. The -others are `.section' (*note Section::), `.pushsection' (*note -PushSection::), `.popsection' (*note PopSection::), and `.previous' -(*note Previous::). - - This directive replaces the current subsection with `name'. The -current section is not changed. The replaced subsection is put onto -the section stack in place of the then current top of stack subsection. - - -File: as.info, Node: Symver, Next: Tag, Prev: SubSection, Up: Pseudo Ops - -7.111 `.symver' -=============== - -Use the `.symver' directive to bind symbols to specific version nodes -within a source file. This is only supported on ELF platforms, and is -typically used when assembling files to be linked into a shared library. -There are cases where it may make sense to use this in objects to be -bound into an application itself so as to override a versioned symbol -from a shared library. - - For ELF targets, the `.symver' directive can be used like this: - .symver NAME, NAME2@NODENAME - If the symbol NAME is defined within the file being assembled, the -`.symver' directive effectively creates a symbol alias with the name -NAME2@NODENAME, and in fact the main reason that we just don't try and -create a regular alias is that the @ character isn't permitted in -symbol names. The NAME2 part of the name is the actual name of the -symbol by which it will be externally referenced. The name NAME itself -is merely a name of convenience that is used so that it is possible to -have definitions for multiple versions of a function within a single -source file, and so that the compiler can unambiguously know which -version of a function is being mentioned. The NODENAME portion of the -alias should be the name of a node specified in the version script -supplied to the linker when building a shared library. If you are -attempting to override a versioned symbol from a shared library, then -NODENAME should correspond to the nodename of the symbol you are trying -to override. - - If the symbol NAME is not defined within the file being assembled, -all references to NAME will be changed to NAME2@NODENAME. If no -reference to NAME is made, NAME2@NODENAME will be removed from the -symbol table. - - Another usage of the `.symver' directive is: - .symver NAME, NAME2@@NODENAME - In this case, the symbol NAME must exist and be defined within the -file being assembled. It is similar to NAME2@NODENAME. The difference -is NAME2@@NODENAME will also be used to resolve references to NAME2 by -the linker. - - The third usage of the `.symver' directive is: - .symver NAME, NAME2@@@NODENAME - When NAME is not defined within the file being assembled, it is -treated as NAME2@NODENAME. When NAME is defined within the file being -assembled, the symbol name, NAME, will be changed to NAME2@@NODENAME. - - -File: as.info, Node: Tag, Next: Text, Prev: Symver, Up: Pseudo Ops - -7.112 `.tag STRUCTNAME' -======================= - -This directive is generated by compilers to include auxiliary debugging -information in the symbol table. It is only permitted inside -`.def'/`.endef' pairs. Tags are used to link structure definitions in -the symbol table with instances of those structures. - - -File: as.info, Node: Text, Next: Title, Prev: Tag, Up: Pseudo Ops - -7.113 `.text SUBSECTION' -======================== - -Tells `as' to assemble the following statements onto the end of the -text subsection numbered SUBSECTION, which is an absolute expression. -If SUBSECTION is omitted, subsection number zero is used. - - -File: as.info, Node: Title, Next: Type, Prev: Text, Up: Pseudo Ops - -7.114 `.title "HEADING"' -======================== - -Use HEADING as the title (second line, immediately after the source -file name and pagenumber) when generating assembly listings. - - This directive affects subsequent pages, as well as the current page -if it appears within ten lines of the top of a page. - - -File: as.info, Node: Type, Next: Uleb128, Prev: Title, Up: Pseudo Ops - -7.115 `.type' -============= - -This directive is used to set the type of a symbol. - -COFF Version ------------- - - For COFF targets, this directive is permitted only within -`.def'/`.endef' pairs. It is used like this: - - .type INT - - This records the integer INT as the type attribute of a symbol table -entry. - -ELF Version ------------ - - For ELF targets, the `.type' directive is used like this: - - .type NAME , TYPE DESCRIPTION - - This sets the type of symbol NAME to be either a function symbol or -an object symbol. There are five different syntaxes supported for the -TYPE DESCRIPTION field, in order to provide compatibility with various -other assemblers. - - Because some of the characters used in these syntaxes (such as `@' -and `#') are comment characters for some architectures, some of the -syntaxes below do not work on all architectures. The first variant -will be accepted by the GNU assembler on all architectures so that -variant should be used for maximum portability, if you do not need to -assemble your code with other assemblers. - - The syntaxes supported are: - - .type <name> STT_<TYPE_IN_UPPER_CASE> - .type <name>,#<type> - .type <name>,@<type> - .type <name>,%<type> - .type <name>,"<type>" - - The types supported are: - -`STT_FUNC' -`function' - Mark the symbol as being a function name. - -`STT_GNU_IFUNC' -`gnu_indirect_function' - Mark the symbol as an indirect function when evaluated during reloc - processing. (This is only supported on assemblers targeting GNU - systems). - -`STT_OBJECT' -`object' - Mark the symbol as being a data object. - -`STT_TLS' -`tls_object' - Mark the symbol as being a thead-local data object. - -`STT_COMMON' -`common' - Mark the symbol as being a common data object. - -`STT_NOTYPE' -`notype' - Does not mark the symbol in any way. It is supported just for - completeness. - -`gnu_unique_object' - Marks the symbol as being a globally unique data object. The - dynamic linker will make sure that in the entire process there is - just one symbol with this name and type in use. (This is only - supported on assemblers targeting GNU systems). - - - Note: Some targets support extra types in addition to those listed -above. - - -File: as.info, Node: Uleb128, Next: Val, Prev: Type, Up: Pseudo Ops - -7.116 `.uleb128 EXPRESSIONS' -============================ - -ULEB128 stands for "unsigned little endian base 128." This is a -compact, variable length representation of numbers used by the DWARF -symbolic debugging format. *Note `.sleb128': Sleb128. - - -File: as.info, Node: Val, Next: Version, Prev: Uleb128, Up: Pseudo Ops - -7.117 `.val ADDR' -================= - -This directive, permitted only within `.def'/`.endef' pairs, records -the address ADDR as the value attribute of a symbol table entry. - - -File: as.info, Node: Version, Next: VTableEntry, Prev: Val, Up: Pseudo Ops - -7.118 `.version "STRING"' -========================= - -This directive creates a `.note' section and places into it an ELF -formatted note of type NT_VERSION. The note's name is set to `string'. - - -File: as.info, Node: VTableEntry, Next: VTableInherit, Prev: Version, Up: Pseudo Ops - -7.119 `.vtable_entry TABLE, OFFSET' -=================================== - -This directive finds or creates a symbol `table' and creates a -`VTABLE_ENTRY' relocation for it with an addend of `offset'. - - -File: as.info, Node: VTableInherit, Next: Warning, Prev: VTableEntry, Up: Pseudo Ops - -7.120 `.vtable_inherit CHILD, PARENT' -===================================== - -This directive finds the symbol `child' and finds or creates the symbol -`parent' and then creates a `VTABLE_INHERIT' relocation for the parent -whose addend is the value of the child symbol. As a special case the -parent name of `0' is treated as referring to the `*ABS*' section. - - -File: as.info, Node: Warning, Next: Weak, Prev: VTableInherit, Up: Pseudo Ops - -7.121 `.warning "STRING"' -========================= - -Similar to the directive `.error' (*note `.error "STRING"': Error.), -but just emits a warning. - - -File: as.info, Node: Weak, Next: Weakref, Prev: Warning, Up: Pseudo Ops - -7.122 `.weak NAMES' -=================== - -This directive sets the weak attribute on the comma separated list of -symbol `names'. If the symbols do not already exist, they will be -created. - - On COFF targets other than PE, weak symbols are a GNU extension. -This directive sets the weak attribute on the comma separated list of -symbol `names'. If the symbols do not already exist, they will be -created. - - On the PE target, weak symbols are supported natively as weak -aliases. When a weak symbol is created that is not an alias, GAS -creates an alternate symbol to hold the default value. - - -File: as.info, Node: Weakref, Next: Word, Prev: Weak, Up: Pseudo Ops - -7.123 `.weakref ALIAS, TARGET' -============================== - -This directive creates an alias to the target symbol that enables the -symbol to be referenced with weak-symbol semantics, but without -actually making it weak. If direct references or definitions of the -symbol are present, then the symbol will not be weak, but if all -references to it are through weak references, the symbol will be marked -as weak in the symbol table. - - The effect is equivalent to moving all references to the alias to a -separate assembly source file, renaming the alias to the symbol in it, -declaring the symbol as weak there, and running a reloadable link to -merge the object files resulting from the assembly of the new source -file and the old source file that had the references to the alias -removed. - - The alias itself never makes to the symbol table, and is entirely -handled within the assembler. - - -File: as.info, Node: Word, Next: Deprecated, Prev: Weakref, Up: Pseudo Ops - -7.124 `.word EXPRESSIONS' -========================= - -This directive expects zero or more EXPRESSIONS, of any section, -separated by commas. - - The size of the number emitted, and its byte order, depend on what -target computer the assembly is for. - - _Warning: Special Treatment to support Compilers_ - - Machines with a 32-bit address space, but that do less than 32-bit -addressing, require the following special treatment. If the machine of -interest to you does 32-bit addressing (or doesn't require it; *note -Machine Dependencies::), you can ignore this issue. - - In order to assemble compiler output into something that works, `as' -occasionally does strange things to `.word' directives. Directives of -the form `.word sym1-sym2' are often emitted by compilers as part of -jump tables. Therefore, when `as' assembles a directive of the form -`.word sym1-sym2', and the difference between `sym1' and `sym2' does -not fit in 16 bits, `as' creates a "secondary jump table", immediately -before the next label. This secondary jump table is preceded by a -short-jump to the first byte after the secondary table. This -short-jump prevents the flow of control from accidentally falling into -the new table. Inside the table is a long-jump to `sym2'. The -original `.word' contains `sym1' minus the address of the long-jump to -`sym2'. - - If there were several occurrences of `.word sym1-sym2' before the -secondary jump table, all of them are adjusted. If there was a `.word -sym3-sym4', that also did not fit in sixteen bits, a long-jump to -`sym4' is included in the secondary jump table, and the `.word' -directives are adjusted to contain `sym3' minus the address of the -long-jump to `sym4'; and so on, for as many entries in the original -jump table as necessary. - - -File: as.info, Node: Deprecated, Prev: Word, Up: Pseudo Ops - -7.125 Deprecated Directives -=========================== - -One day these directives won't work. They are included for -compatibility with older assemblers. -.abort - -.line - - -File: as.info, Node: Object Attributes, Next: Machine Dependencies, Prev: Pseudo Ops, Up: Top - -8 Object Attributes -******************* - -`as' assembles source files written for a specific architecture into -object files for that architecture. But not all object files are alike. -Many architectures support incompatible variations. For instance, -floating point arguments might be passed in floating point registers if -the object file requires hardware floating point support--or floating -point arguments might be passed in integer registers if the object file -supports processors with no hardware floating point unit. Or, if two -objects are built for different generations of the same architecture, -the combination may require the newer generation at run-time. - - This information is useful during and after linking. At link time, -`ld' can warn about incompatible object files. After link time, tools -like `gdb' can use it to process the linked file correctly. - - Compatibility information is recorded as a series of object -attributes. Each attribute has a "vendor", "tag", and "value". The -vendor is a string, and indicates who sets the meaning of the tag. The -tag is an integer, and indicates what property the attribute describes. -The value may be a string or an integer, and indicates how the -property affects this object. Missing attributes are the same as -attributes with a zero value or empty string value. - - Object attributes were developed as part of the ABI for the ARM -Architecture. The file format is documented in `ELF for the ARM -Architecture'. - -* Menu: - -* GNU Object Attributes:: GNU Object Attributes -* Defining New Object Attributes:: Defining New Object Attributes - - -File: as.info, Node: GNU Object Attributes, Next: Defining New Object Attributes, Up: Object Attributes - -8.1 GNU Object Attributes -========================= - -The `.gnu_attribute' directive records an object attribute with vendor -`gnu'. - - Except for `Tag_compatibility', which has both an integer and a -string for its value, GNU attributes have a string value if the tag -number is odd and an integer value if the tag number is even. The -second bit (`TAG & 2' is set for architecture-independent attributes -and clear for architecture-dependent ones. - -8.1.1 Common GNU attributes ---------------------------- - -These attributes are valid on all architectures. - -Tag_compatibility (32) - The compatibility attribute takes an integer flag value and a - vendor name. If the flag value is 0, the file is compatible with - other toolchains. If it is 1, then the file is only compatible - with the named toolchain. If it is greater than 1, the file can - only be processed by other toolchains under some private - arrangement indicated by the flag value and the vendor name. - -8.1.2 MIPS Attributes ---------------------- - -Tag_GNU_MIPS_ABI_FP (4) - The floating-point ABI used by this object file. The value will - be: - - * 0 for files not affected by the floating-point ABI. - - * 1 for files using the hardware floating-point with a standard - double-precision FPU. - - * 2 for files using the hardware floating-point ABI with a - single-precision FPU. - - * 3 for files using the software floating-point ABI. - - * 4 for files using the hardware floating-point ABI with 64-bit - wide double-precision floating-point registers and 32-bit - wide general purpose registers. - -8.1.3 PowerPC Attributes ------------------------- - -Tag_GNU_Power_ABI_FP (4) - The floating-point ABI used by this object file. The value will - be: - - * 0 for files not affected by the floating-point ABI. - - * 1 for files using double-precision hardware floating-point - ABI. - - * 2 for files using the software floating-point ABI. - - * 3 for files using single-precision hardware floating-point - ABI. - -Tag_GNU_Power_ABI_Vector (8) - The vector ABI used by this object file. The value will be: - - * 0 for files not affected by the vector ABI. - - * 1 for files using general purpose registers to pass vectors. - - * 2 for files using AltiVec registers to pass vectors. - - * 3 for files using SPE registers to pass vectors. - - -File: as.info, Node: Defining New Object Attributes, Prev: GNU Object Attributes, Up: Object Attributes - -8.2 Defining New Object Attributes -================================== - -If you want to define a new GNU object attribute, here are the places -you will need to modify. New attributes should be discussed on the -`binutils' mailing list. - - * This manual, which is the official register of attributes. - - * The header for your architecture `include/elf', to define the tag. - - * The `bfd' support file for your architecture, to merge the - attribute and issue any appropriate link warnings. - - * Test cases in `ld/testsuite' for merging and link warnings. - - * `binutils/readelf.c' to display your attribute. - - * GCC, if you want the compiler to mark the attribute automatically. - - -File: as.info, Node: Machine Dependencies, Next: Reporting Bugs, Prev: Object Attributes, Up: Top - -9 Machine Dependent Features -**************************** - -The machine instruction sets are (almost by definition) different on -each machine where `as' runs. Floating point representations vary as -well, and `as' often supports a few additional directives or -command-line options for compatibility with other assemblers on a -particular platform. Finally, some versions of `as' support special -pseudo-instructions for branch optimization. - - This chapter discusses most of these differences, though it does not -include details on any machine's instruction set. For details on that -subject, see the hardware manufacturer's manual. - -* Menu: - - -* AArch64-Dependent:: AArch64 Dependent Features - -* Alpha-Dependent:: Alpha Dependent Features - -* ARC-Dependent:: ARC Dependent Features - -* ARM-Dependent:: ARM Dependent Features - -* AVR-Dependent:: AVR Dependent Features - -* Blackfin-Dependent:: Blackfin Dependent Features - -* CR16-Dependent:: CR16 Dependent Features - -* CRIS-Dependent:: CRIS Dependent Features - -* D10V-Dependent:: D10V Dependent Features - -* D30V-Dependent:: D30V Dependent Features - -* Epiphany-Dependent:: EPIPHANY Dependent Features - -* H8/300-Dependent:: Renesas H8/300 Dependent Features - -* HPPA-Dependent:: HPPA Dependent Features - -* ESA/390-Dependent:: IBM ESA/390 Dependent Features - -* i386-Dependent:: Intel 80386 and AMD x86-64 Dependent Features - -* i860-Dependent:: Intel 80860 Dependent Features - -* i960-Dependent:: Intel 80960 Dependent Features - -* IA-64-Dependent:: Intel IA-64 Dependent Features - -* IP2K-Dependent:: IP2K Dependent Features - -* LM32-Dependent:: LM32 Dependent Features - -* M32C-Dependent:: M32C Dependent Features - -* M32R-Dependent:: M32R Dependent Features - -* M68K-Dependent:: M680x0 Dependent Features - -* M68HC11-Dependent:: M68HC11 and 68HC12 Dependent Features - -* Meta-Dependent :: Meta Dependent Features - -* MicroBlaze-Dependent:: MICROBLAZE Dependent Features - -* MIPS-Dependent:: MIPS Dependent Features - -* MMIX-Dependent:: MMIX Dependent Features - -* MSP430-Dependent:: MSP430 Dependent Features - -* NiosII-Dependent:: Altera Nios II Dependent Features - -* NS32K-Dependent:: NS32K Dependent Features - -* SH-Dependent:: Renesas / SuperH SH Dependent Features -* SH64-Dependent:: SuperH SH64 Dependent Features - -* PDP-11-Dependent:: PDP-11 Dependent Features - -* PJ-Dependent:: picoJava Dependent Features - -* PPC-Dependent:: PowerPC Dependent Features - -* RL78-Dependent:: RL78 Dependent Features - -* RX-Dependent:: RX Dependent Features - -* S/390-Dependent:: IBM S/390 Dependent Features - -* SCORE-Dependent:: SCORE Dependent Features - -* Sparc-Dependent:: SPARC Dependent Features - -* TIC54X-Dependent:: TI TMS320C54x Dependent Features - -* TIC6X-Dependent :: TI TMS320C6x Dependent Features - -* TILE-Gx-Dependent :: Tilera TILE-Gx Dependent Features - -* TILEPro-Dependent :: Tilera TILEPro Dependent Features - -* V850-Dependent:: V850 Dependent Features - -* XGATE-Dependent:: XGATE Features - -* XSTORMY16-Dependent:: XStormy16 Dependent Features - -* Xtensa-Dependent:: Xtensa Dependent Features - -* Z80-Dependent:: Z80 Dependent Features - -* Z8000-Dependent:: Z8000 Dependent Features - -* Vax-Dependent:: VAX Dependent Features - - -File: as.info, Node: AArch64-Dependent, Next: Alpha-Dependent, Up: Machine Dependencies - -9.1 AArch64 Dependent Features -============================== - -* Menu: - -* AArch64 Options:: Options -* AArch64 Syntax:: Syntax -* AArch64 Floating Point:: Floating Point -* AArch64 Directives:: AArch64 Machine Directives -* AArch64 Opcodes:: Opcodes -* AArch64 Mapping Symbols:: Mapping Symbols - - -File: as.info, Node: AArch64 Options, Next: AArch64 Syntax, Up: AArch64-Dependent - -9.1.1 Options -------------- - -`-EB' - This option specifies that the output generated by the assembler - should be marked as being encoded for a big-endian processor. - -`-EL' - This option specifies that the output generated by the assembler - should be marked as being encoded for a little-endian processor. - -`-mabi=ABI' - Specify which ABI the source code uses. The recognized arguments - are: `ilp32' and `lp64', which decides the generated object file - in ELF32 and ELF64 format respectively. The default is `lp64'. - - - -File: as.info, Node: AArch64 Syntax, Next: AArch64 Floating Point, Prev: AArch64 Options, Up: AArch64-Dependent - -9.1.2 Syntax ------------- - -* Menu: - -* AArch64-Chars:: Special Characters -* AArch64-Regs:: Register Names -* AArch64-Relocations:: Relocations - - -File: as.info, Node: AArch64-Chars, Next: AArch64-Regs, Up: AArch64 Syntax - -9.1.2.1 Special Characters -.......................... - -The presence of a `//' on a line indicates the start of a comment that -extends to the end of the current line. If a `#' appears as the first -character of a line, the whole line is treated as a comment. - - The `;' character can be used instead of a newline to separate -statements. - - The `#' can be optionally used to indicate immediate operands. - - -File: as.info, Node: AArch64-Regs, Next: AArch64-Relocations, Prev: AArch64-Chars, Up: AArch64 Syntax - -9.1.2.2 Register Names -...................... - -Please refer to the section `4.4 Register Names' of `ARMv8 Instruction -Set Overview', which is available at `http://infocenter.arm.com'. - - -File: as.info, Node: AArch64-Relocations, Prev: AArch64-Regs, Up: AArch64 Syntax - -9.1.2.3 Relocations -................... - -Relocations for `MOVZ' and `MOVK' instructions can be generated by -prefixing the label with `#:abs_g2:' etc. For example to load the -48-bit absolute address of FOO into x0: - - movz x0, #:abs_g2:foo // bits 32-47, overflow check - movk x0, #:abs_g1_nc:foo // bits 16-31, no overflow check - movk x0, #:abs_g0_nc:foo // bits 0-15, no overflow check - - Relocations for `ADRP', and `ADD', `LDR' or `STR' instructions can -be generated by prefixing the label with `#:pg_hi21:' and `#:lo12:' -respectively. - - For example to use 33-bit (+/-4GB) pc-relative addressing to load -the address of FOO into x0: - - adrp x0, #:pg_hi21:foo - add x0, x0, #:lo12:foo - - Or to load the value of FOO into x0: - - adrp x0, #:pg_hi21:foo - ldr x0, [x0, #:lo12:foo] - - Note that `#:pg_hi21:' is optional. - - adrp x0, foo - - is equivalent to - - adrp x0, #:pg_hi21:foo - - -File: as.info, Node: AArch64 Floating Point, Next: AArch64 Directives, Prev: AArch64 Syntax, Up: AArch64-Dependent - -9.1.3 Floating Point --------------------- - -The AArch64 architecture uses IEEE floating-point numbers. - - -File: as.info, Node: AArch64 Directives, Next: AArch64 Opcodes, Prev: AArch64 Floating Point, Up: AArch64-Dependent - -9.1.4 AArch64 Machine Directives --------------------------------- - -`.bss' - This directive switches to the `.bss' section. - -`.ltorg' - This directive causes the current contents of the literal pool to - be dumped into the current section (which is assumed to be the - .text section) at the current location (aligned to a word - boundary). `GAS' maintains a separate literal pool for each - section and each sub-section. The `.ltorg' directive will only - affect the literal pool of the current section and sub-section. - At the end of assembly all remaining, un-empty literal pools will - automatically be dumped. - - Note - older versions of `GAS' would dump the current literal pool - any time a section change occurred. This is no longer done, since - it prevents accurate control of the placement of literal pools. - -`.pool' - This is a synonym for .ltorg. - -`NAME .req REGISTER NAME' - This creates an alias for REGISTER NAME called NAME. For example: - - foo .req w0 - -`.unreq ALIAS-NAME' - This undefines a register alias which was previously defined using - the `req' directive. For example: - - foo .req w0 - .unreq foo - - An error occurs if the name is undefined. Note - this pseudo op - can be used to delete builtin in register name aliases (eg 'w0'). - This should only be done if it is really necessary. - - - -File: as.info, Node: AArch64 Opcodes, Next: AArch64 Mapping Symbols, Prev: AArch64 Directives, Up: AArch64-Dependent - -9.1.5 Opcodes -------------- - -`as' implements all the standard AArch64 opcodes. It also implements -several pseudo opcodes, including several synthetic load instructions. - -`LDR =' - ldr <register> , =<expression> - - The constant expression will be placed into the nearest literal - pool (if it not already there) and a PC-relative LDR instruction - will be generated. - - - For more information on the AArch64 instruction set and assembly -language notation, see `ARMv8 Instruction Set Overview' available at -`http://infocenter.arm.com'. - - -File: as.info, Node: AArch64 Mapping Symbols, Prev: AArch64 Opcodes, Up: AArch64-Dependent - -9.1.6 Mapping Symbols ---------------------- - -The AArch64 ELF specification requires that special symbols be inserted -into object files to mark certain features: - -`$x' - At the start of a region of code containing AArch64 instructions. - -`$d' - At the start of a region of data. - - - -File: as.info, Node: Alpha-Dependent, Next: ARC-Dependent, Prev: AArch64-Dependent, Up: Machine Dependencies - -9.2 Alpha Dependent Features -============================ - -* Menu: - -* Alpha Notes:: Notes -* Alpha Options:: Options -* Alpha Syntax:: Syntax -* Alpha Floating Point:: Floating Point -* Alpha Directives:: Alpha Machine Directives -* Alpha Opcodes:: Opcodes - - -File: as.info, Node: Alpha Notes, Next: Alpha Options, Up: Alpha-Dependent - -9.2.1 Notes ------------ - -The documentation here is primarily for the ELF object format. `as' -also supports the ECOFF and EVAX formats, but features specific to -these formats are not yet documented. - - -File: as.info, Node: Alpha Options, Next: Alpha Syntax, Prev: Alpha Notes, Up: Alpha-Dependent - -9.2.2 Options -------------- - -`-mCPU' - This option specifies the target processor. If an attempt is made - to assemble an instruction which will not execute on the target - processor, the assembler may either expand the instruction as a - macro or issue an error message. This option is equivalent to the - `.arch' directive. - - The following processor names are recognized: `21064', `21064a', - `21066', `21068', `21164', `21164a', `21164pc', `21264', `21264a', - `21264b', `ev4', `ev5', `lca45', `ev5', `ev56', `pca56', `ev6', - `ev67', `ev68'. The special name `all' may be used to allow the - assembler to accept instructions valid for any Alpha processor. - - In order to support existing practice in OSF/1 with respect to - `.arch', and existing practice within `MILO' (the Linux ARC - bootloader), the numbered processor names (e.g. 21064) enable the - processor-specific PALcode instructions, while the - "electro-vlasic" names (e.g. `ev4') do not. - -`-mdebug' -`-no-mdebug' - Enables or disables the generation of `.mdebug' encapsulation for - stabs directives and procedure descriptors. The default is to - automatically enable `.mdebug' when the first stabs directive is - seen. - -`-relax' - This option forces all relocations to be put into the object file, - instead of saving space and resolving some relocations at assembly - time. Note that this option does not propagate all symbol - arithmetic into the object file, because not all symbol arithmetic - can be represented. However, the option can still be useful in - specific applications. - -`-replace' -`-noreplace' - Enables or disables the optimization of procedure calls, both at - assemblage and at link time. These options are only available for - VMS targets and `-replace' is the default. See section 1.4.1 of - the OpenVMS Linker Utility Manual. - -`-g' - This option is used when the compiler generates debug information. - When `gcc' is using `mips-tfile' to generate debug information - for ECOFF, local labels must be passed through to the object file. - Otherwise this option has no effect. - -`-GSIZE' - A local common symbol larger than SIZE is placed in `.bss', while - smaller symbols are placed in `.sbss'. - -`-F' -`-32addr' - These options are ignored for backward compatibility. - - -File: as.info, Node: Alpha Syntax, Next: Alpha Floating Point, Prev: Alpha Options, Up: Alpha-Dependent - -9.2.3 Syntax ------------- - -The assembler syntax closely follow the Alpha Reference Manual; -assembler directives and general syntax closely follow the OSF/1 and -OpenVMS syntax, with a few differences for ELF. - -* Menu: - -* Alpha-Chars:: Special Characters -* Alpha-Regs:: Register Names -* Alpha-Relocs:: Relocations - - -File: as.info, Node: Alpha-Chars, Next: Alpha-Regs, Up: Alpha Syntax - -9.2.3.1 Special Characters -.......................... - -`#' is the line comment character. Note that if `#' is the first -character on a line then it can also be a logical line number directive -(*note Comments::) or a preprocessor control command (*note -Preprocessing::). - - `;' can be used instead of a newline to separate statements. - - -File: as.info, Node: Alpha-Regs, Next: Alpha-Relocs, Prev: Alpha-Chars, Up: Alpha Syntax - -9.2.3.2 Register Names -...................... - -The 32 integer registers are referred to as `$N' or `$rN'. In -addition, registers 15, 28, 29, and 30 may be referred to by the -symbols `$fp', `$at', `$gp', and `$sp' respectively. - - The 32 floating-point registers are referred to as `$fN'. - - -File: as.info, Node: Alpha-Relocs, Prev: Alpha-Regs, Up: Alpha Syntax - -9.2.3.3 Relocations -................... - -Some of these relocations are available for ECOFF, but mostly only for -ELF. They are modeled after the relocation format introduced in -Digital Unix 4.0, but there are additions. - - The format is `!TAG' or `!TAG!NUMBER' where TAG is the name of the -relocation. In some cases NUMBER is used to relate specific -instructions. - - The relocation is placed at the end of the instruction like so: - - ldah $0,a($29) !gprelhigh - lda $0,a($0) !gprellow - ldq $1,b($29) !literal!100 - ldl $2,0($1) !lituse_base!100 - -`!literal' -`!literal!N' - Used with an `ldq' instruction to load the address of a symbol - from the GOT. - - A sequence number N is optional, and if present is used to pair - `lituse' relocations with this `literal' relocation. The `lituse' - relocations are used by the linker to optimize the code based on - the final location of the symbol. - - Note that these optimizations are dependent on the data flow of the - program. Therefore, if _any_ `lituse' is paired with a `literal' - relocation, then _all_ uses of the register set by the `literal' - instruction must also be marked with `lituse' relocations. This - is because the original `literal' instruction may be deleted or - transformed into another instruction. - - Also note that there may be a one-to-many relationship between - `literal' and `lituse', but not a many-to-one. That is, if there - are two code paths that load up the same address and feed the - value to a single use, then the use may not use a `lituse' - relocation. - -`!lituse_base!N' - Used with any memory format instruction (e.g. `ldl') to indicate - that the literal is used for an address load. The offset field of - the instruction must be zero. During relaxation, the code may be - altered to use a gp-relative load. - -`!lituse_jsr!N' - Used with a register branch format instruction (e.g. `jsr') to - indicate that the literal is used for a call. During relaxation, - the code may be altered to use a direct branch (e.g. `bsr'). - -`!lituse_jsrdirect!N' - Similar to `lituse_jsr', but also that this call cannot be vectored - through a PLT entry. This is useful for functions with special - calling conventions which do not allow the normal call-clobbered - registers to be clobbered. - -`!lituse_bytoff!N' - Used with a byte mask instruction (e.g. `extbl') to indicate that - only the low 3 bits of the address are relevant. During - relaxation, the code may be altered to use an immediate instead of - a register shift. - -`!lituse_addr!N' - Used with any other instruction to indicate that the original - address is in fact used, and the original `ldq' instruction may - not be altered or deleted. This is useful in conjunction with - `lituse_jsr' to test whether a weak symbol is defined. - - ldq $27,foo($29) !literal!1 - beq $27,is_undef !lituse_addr!1 - jsr $26,($27),foo !lituse_jsr!1 - -`!lituse_tlsgd!N' - Used with a register branch format instruction to indicate that the - literal is the call to `__tls_get_addr' used to compute the - address of the thread-local storage variable whose descriptor was - loaded with `!tlsgd!N'. - -`!lituse_tlsldm!N' - Used with a register branch format instruction to indicate that the - literal is the call to `__tls_get_addr' used to compute the - address of the base of the thread-local storage block for the - current module. The descriptor for the module must have been - loaded with `!tlsldm!N'. - -`!gpdisp!N' - Used with `ldah' and `lda' to load the GP from the current - address, a-la the `ldgp' macro. The source register for the - `ldah' instruction must contain the address of the `ldah' - instruction. There must be exactly one `lda' instruction paired - with the `ldah' instruction, though it may appear anywhere in the - instruction stream. The immediate operands must be zero. - - bsr $26,foo - ldah $29,0($26) !gpdisp!1 - lda $29,0($29) !gpdisp!1 - -`!gprelhigh' - Used with an `ldah' instruction to add the high 16 bits of a - 32-bit displacement from the GP. - -`!gprellow' - Used with any memory format instruction to add the low 16 bits of a - 32-bit displacement from the GP. - -`!gprel' - Used with any memory format instruction to add a 16-bit - displacement from the GP. - -`!samegp' - Used with any branch format instruction to skip the GP load at the - target address. The referenced symbol must have the same GP as the - source object file, and it must be declared to either not use `$27' - or perform a standard GP load in the first two instructions via the - `.prologue' directive. - -`!tlsgd' -`!tlsgd!N' - Used with an `lda' instruction to load the address of a TLS - descriptor for a symbol in the GOT. - - The sequence number N is optional, and if present it used to pair - the descriptor load with both the `literal' loading the address of - the `__tls_get_addr' function and the `lituse_tlsgd' marking the - call to that function. - - For proper relaxation, both the `tlsgd', `literal' and `lituse' - relocations must be in the same extended basic block. That is, - the relocation with the lowest address must be executed first at - runtime. - -`!tlsldm' -`!tlsldm!N' - Used with an `lda' instruction to load the address of a TLS - descriptor for the current module in the GOT. - - Similar in other respects to `tlsgd'. - -`!gotdtprel' - Used with an `ldq' instruction to load the offset of the TLS - symbol within its module's thread-local storage block. Also known - as the dynamic thread pointer offset or dtp-relative offset. - -`!dtprelhi' -`!dtprello' -`!dtprel' - Like `gprel' relocations except they compute dtp-relative offsets. - -`!gottprel' - Used with an `ldq' instruction to load the offset of the TLS - symbol from the thread pointer. Also known as the tp-relative - offset. - -`!tprelhi' -`!tprello' -`!tprel' - Like `gprel' relocations except they compute tp-relative offsets. - - -File: as.info, Node: Alpha Floating Point, Next: Alpha Directives, Prev: Alpha Syntax, Up: Alpha-Dependent - -9.2.4 Floating Point --------------------- - -The Alpha family uses both IEEE and VAX floating-point numbers. - - -File: as.info, Node: Alpha Directives, Next: Alpha Opcodes, Prev: Alpha Floating Point, Up: Alpha-Dependent - -9.2.5 Alpha Assembler Directives --------------------------------- - -`as' for the Alpha supports many additional directives for -compatibility with the native assembler. This section describes them -only briefly. - - These are the additional directives in `as' for the Alpha: - -`.arch CPU' - Specifies the target processor. This is equivalent to the `-mCPU' - command-line option. *Note Options: Alpha Options, for a list of - values for CPU. - -`.ent FUNCTION[, N]' - Mark the beginning of FUNCTION. An optional number may follow for - compatibility with the OSF/1 assembler, but is ignored. When - generating `.mdebug' information, this will create a procedure - descriptor for the function. In ELF, it will mark the symbol as a - function a-la the generic `.type' directive. - -`.end FUNCTION' - Mark the end of FUNCTION. In ELF, it will set the size of the - symbol a-la the generic `.size' directive. - -`.mask MASK, OFFSET' - Indicate which of the integer registers are saved in the current - function's stack frame. MASK is interpreted a bit mask in which - bit N set indicates that register N is saved. The registers are - saved in a block located OFFSET bytes from the "canonical frame - address" (CFA) which is the value of the stack pointer on entry to - the function. The registers are saved sequentially, except that - the return address register (normally `$26') is saved first. - - This and the other directives that describe the stack frame are - currently only used when generating `.mdebug' information. They - may in the future be used to generate DWARF2 `.debug_frame' unwind - information for hand written assembly. - -`.fmask MASK, OFFSET' - Indicate which of the floating-point registers are saved in the - current stack frame. The MASK and OFFSET parameters are - interpreted as with `.mask'. - -`.frame FRAMEREG, FRAMEOFFSET, RETREG[, ARGOFFSET]' - Describes the shape of the stack frame. The frame pointer in use - is FRAMEREG; normally this is either `$fp' or `$sp'. The frame - pointer is FRAMEOFFSET bytes below the CFA. The return address is - initially located in RETREG until it is saved as indicated in - `.mask'. For compatibility with OSF/1 an optional ARGOFFSET - parameter is accepted and ignored. It is believed to indicate the - offset from the CFA to the saved argument registers. - -`.prologue N' - Indicate that the stack frame is set up and all registers have been - spilled. The argument N indicates whether and how the function - uses the incoming "procedure vector" (the address of the called - function) in `$27'. 0 indicates that `$27' is not used; 1 - indicates that the first two instructions of the function use `$27' - to perform a load of the GP register; 2 indicates that `$27' is - used in some non-standard way and so the linker cannot elide the - load of the procedure vector during relaxation. - -`.usepv FUNCTION, WHICH' - Used to indicate the use of the `$27' register, similar to - `.prologue', but without the other semantics of needing to be - inside an open `.ent'/`.end' block. - - The WHICH argument should be either `no', indicating that `$27' is - not used, or `std', indicating that the first two instructions of - the function perform a GP load. - - One might use this directive instead of `.prologue' if you are - also using dwarf2 CFI directives. - -`.gprel32 EXPRESSION' - Computes the difference between the address in EXPRESSION and the - GP for the current object file, and stores it in 4 bytes. In - addition to being smaller than a full 8 byte address, this also - does not require a dynamic relocation when used in a shared - library. - -`.t_floating EXPRESSION' - Stores EXPRESSION as an IEEE double precision value. - -`.s_floating EXPRESSION' - Stores EXPRESSION as an IEEE single precision value. - -`.f_floating EXPRESSION' - Stores EXPRESSION as a VAX F format value. - -`.g_floating EXPRESSION' - Stores EXPRESSION as a VAX G format value. - -`.d_floating EXPRESSION' - Stores EXPRESSION as a VAX D format value. - -`.set FEATURE' - Enables or disables various assembler features. Using the positive - name of the feature enables while using `noFEATURE' disables. - - `at' - Indicates that macro expansions may clobber the "assembler - temporary" (`$at' or `$28') register. Some macros may not be - expanded without this and will generate an error message if - `noat' is in effect. When `at' is in effect, a warning will - be generated if `$at' is used by the programmer. - - `macro' - Enables the expansion of macro instructions. Note that - variants of real instructions, such as `br label' vs `br - $31,label' are considered alternate forms and not macros. - - `move' - `reorder' - `volatile' - These control whether and how the assembler may re-order - instructions. Accepted for compatibility with the OSF/1 - assembler, but `as' does not do instruction scheduling, so - these features are ignored. - - The following directives are recognized for compatibility with the -OSF/1 assembler but are ignored. - - .proc .aproc - .reguse .livereg - .option .aent - .ugen .eflag - .alias .noalias - - -File: as.info, Node: Alpha Opcodes, Prev: Alpha Directives, Up: Alpha-Dependent - -9.2.6 Opcodes -------------- - -For detailed information on the Alpha machine instruction set, see the -Alpha Architecture Handbook -(ftp://ftp.digital.com/pub/Digital/info/semiconductor/literature/alphaahb.pdf). - - -File: as.info, Node: ARC-Dependent, Next: ARM-Dependent, Prev: Alpha-Dependent, Up: Machine Dependencies - -9.3 ARC Dependent Features -========================== - -* Menu: - -* ARC Options:: Options -* ARC Syntax:: Syntax -* ARC Floating Point:: Floating Point -* ARC Directives:: ARC Machine Directives -* ARC Opcodes:: Opcodes - - -File: as.info, Node: ARC Options, Next: ARC Syntax, Up: ARC-Dependent - -9.3.1 Options -------------- - -`-marc[5|6|7|8]' - This option selects the core processor variant. Using `-marc' is - the same as `-marc6', which is also the default. - - `arc5' - Base instruction set. - - `arc6' - Jump-and-link (jl) instruction. No requirement of an - instruction between setting flags and conditional jump. For - example: - - mov.f r0,r1 - beq foo - - `arc7' - Break (brk) and sleep (sleep) instructions. - - `arc8' - Software interrupt (swi) instruction. - - - Note: the `.option' directive can to be used to select a core - variant from within assembly code. - -`-EB' - This option specifies that the output generated by the assembler - should be marked as being encoded for a big-endian processor. - -`-EL' - This option specifies that the output generated by the assembler - should be marked as being encoded for a little-endian processor - - this is the default. - - - -File: as.info, Node: ARC Syntax, Next: ARC Floating Point, Prev: ARC Options, Up: ARC-Dependent - -9.3.2 Syntax ------------- - -* Menu: - -* ARC-Chars:: Special Characters -* ARC-Regs:: Register Names - - -File: as.info, Node: ARC-Chars, Next: ARC-Regs, Up: ARC Syntax - -9.3.2.1 Special Characters -.......................... - -The presence of a `#' on a line indicates the start of a comment that -extends to the end of the current line. Note that if a line starts -with a `#' character then it can also be a logical line number -directive (*note Comments::) or a preprocessor control command (*note -Preprocessing::). - - The ARC assembler does not support a line separator character. - - -File: as.info, Node: ARC-Regs, Prev: ARC-Chars, Up: ARC Syntax - -9.3.2.2 Register Names -...................... - -*TODO* - - -File: as.info, Node: ARC Floating Point, Next: ARC Directives, Prev: ARC Syntax, Up: ARC-Dependent - -9.3.3 Floating Point --------------------- - -The ARC core does not currently have hardware floating point support. -Software floating point support is provided by `GCC' and uses IEEE -floating-point numbers. - - -File: as.info, Node: ARC Directives, Next: ARC Opcodes, Prev: ARC Floating Point, Up: ARC-Dependent - -9.3.4 ARC Machine Directives ----------------------------- - -The ARC version of `as' supports the following additional machine -directives: - -`.2byte EXPRESSIONS' - *TODO* - -`.3byte EXPRESSIONS' - *TODO* - -`.4byte EXPRESSIONS' - *TODO* - -`.extAuxRegister NAME,ADDRESS,MODE' - The ARCtangent A4 has extensible auxiliary register space. The - auxiliary registers can be defined in the assembler source code by - using this directive. The first parameter is the NAME of the new - auxiallry register. The second parameter is the ADDRESS of the - register in the auxiliary register memory map for the variant of - the ARC. The third parameter specifies the MODE in which the - register can be operated is and it can be one of: - - `r (readonly)' - - `w (write only)' - - `r|w (read or write)' - - For example: - - .extAuxRegister mulhi,0x12,w - - This specifies an extension auxiliary register called _mulhi_ - which is at address 0x12 in the memory space and which is only - writable. - -`.extCondCode SUFFIX,VALUE' - The condition codes on the ARCtangent A4 are extensible and can be - specified by means of this assembler directive. They are specified - by the suffix and the value for the condition code. They can be - used to specify extra condition codes with any values. For - example: - - .extCondCode is_busy,0x14 - - add.is_busy r1,r2,r3 - bis_busy _main - -`.extCoreRegister NAME,REGNUM,MODE,SHORTCUT' - Specifies an extension core register NAME for the application. - This allows a register NAME with a valid REGNUM between 0 and 60, - with the following as valid values for MODE - - `_r_ (readonly)' - - `_w_ (write only)' - - `_r|w_ (read or write)' - - The other parameter gives a description of the register having a - SHORTCUT in the pipeline. The valid values are: - - `can_shortcut' - - `cannot_shortcut' - - For example: - - .extCoreRegister mlo,57,r,can_shortcut - - This defines an extension core register mlo with the value 57 which - can shortcut the pipeline. - -`.extInstruction NAME,OPCODE,SUBOPCODE,SUFFIXCLASS,SYNTAXCLASS' - The ARCtangent A4 allows the user to specify extension - instructions. The extension instructions are not macros. The - assembler creates encodings for use of these instructions - according to the specification by the user. The parameters are: - - * NAME Name of the extension instruction - - * OPCODE Opcode to be used. (Bits 27:31 in the encoding). - Valid values 0x10-0x1f or 0x03 - - * SUBOPCODE Subopcode to be used. Valid values are from - 0x09-0x3f. However the correct value also depends on - SYNTAXCLASS - - * SUFFIXCLASS Determines the kinds of suffixes to be allowed. - Valid values are `SUFFIX_NONE', `SUFFIX_COND', `SUFFIX_FLAG' - which indicates the absence or presence of conditional - suffixes and flag setting by the extension instruction. It - is also possible to specify that an instruction sets the - flags and is conditional by using `SUFFIX_CODE' | - `SUFFIX_FLAG'. - - * SYNTAXCLASS Determines the syntax class for the instruction. - It can have the following values: - - ``SYNTAX_2OP':' - 2 Operand Instruction - - ``SYNTAX_3OP':' - 3 Operand Instruction - - In addition there could be modifiers for the syntax class as - described below: - - Syntax Class Modifiers are: - - - `OP1_MUST_BE_IMM': Modifies syntax class SYNTAX_3OP, - specifying that the first operand of a three-operand - instruction must be an immediate (i.e., the result is - discarded). OP1_MUST_BE_IMM is used by bitwise ORing it - with SYNTAX_3OP as given in the example below. This - could usually be used to set the flags using specific - instructions and not retain results. - - - `OP1_IMM_IMPLIED': Modifies syntax class SYNTAX_20P, it - specifies that there is an implied immediate destination - operand which does not appear in the syntax. For - example, if the source code contains an instruction like: - - inst r1,r2 - - it really means that the first argument is an implied - immediate (that is, the result is discarded). This is - the same as though the source code were: inst 0,r1,r2. - You use OP1_IMM_IMPLIED by bitwise ORing it with - SYNTAX_20P. - - - For example, defining 64-bit multiplier with immediate operands: - - .extInstruction mp64,0x14,0x0,SUFFIX_COND | SUFFIX_FLAG , - SYNTAX_3OP|OP1_MUST_BE_IMM - - The above specifies an extension instruction called mp64 which has - 3 operands, sets the flags, can be used with a condition code, for - which the first operand is an immediate. (Equivalent to - discarding the result of the operation). - - .extInstruction mul64,0x14,0x00,SUFFIX_COND, SYNTAX_2OP|OP1_IMM_IMPLIED - - This describes a 2 operand instruction with an implicit first - immediate operand. The result of this operation would be - discarded. - -`.half EXPRESSIONS' - *TODO* - -`.long EXPRESSIONS' - *TODO* - -`.option ARC|ARC5|ARC6|ARC7|ARC8' - The `.option' directive must be followed by the desired core - version. Again `arc' is an alias for `arc6'. - - Note: the `.option' directive overrides the command line option - `-marc'; a warning is emitted when the version is not consistent - between the two - even for the implicit default core version - (arc6). - -`.short EXPRESSIONS' - *TODO* - -`.word EXPRESSIONS' - *TODO* - - - -File: as.info, Node: ARC Opcodes, Prev: ARC Directives, Up: ARC-Dependent - -9.3.5 Opcodes -------------- - -For information on the ARC instruction set, see `ARC Programmers -Reference Manual', ARC International (www.arc.com) - - -File: as.info, Node: ARM-Dependent, Next: AVR-Dependent, Prev: ARC-Dependent, Up: Machine Dependencies - -9.4 ARM Dependent Features -========================== - -* Menu: - -* ARM Options:: Options -* ARM Syntax:: Syntax -* ARM Floating Point:: Floating Point -* ARM Directives:: ARM Machine Directives -* ARM Opcodes:: Opcodes -* ARM Mapping Symbols:: Mapping Symbols -* ARM Unwinding Tutorial:: Unwinding - - -File: as.info, Node: ARM Options, Next: ARM Syntax, Up: ARM-Dependent - -9.4.1 Options -------------- - -`-mcpu=PROCESSOR[+EXTENSION...]' - This option specifies the target processor. The assembler will - issue an error message if an attempt is made to assemble an - instruction which will not execute on the target processor. The - following processor names are recognized: `arm1', `arm2', `arm250', - `arm3', `arm6', `arm60', `arm600', `arm610', `arm620', `arm7', - `arm7m', `arm7d', `arm7dm', `arm7di', `arm7dmi', `arm70', `arm700', - `arm700i', `arm710', `arm710t', `arm720', `arm720t', `arm740t', - `arm710c', `arm7100', `arm7500', `arm7500fe', `arm7t', `arm7tdmi', - `arm7tdmi-s', `arm8', `arm810', `strongarm', `strongarm1', - `strongarm110', `strongarm1100', `strongarm1110', `arm9', `arm920', - `arm920t', `arm922t', `arm940t', `arm9tdmi', `fa526' (Faraday - FA526 processor), `fa626' (Faraday FA626 processor), `arm9e', - `arm926e', `arm926ej-s', `arm946e-r0', `arm946e', `arm946e-s', - `arm966e-r0', `arm966e', `arm966e-s', `arm968e-s', `arm10t', - `arm10tdmi', `arm10e', `arm1020', `arm1020t', `arm1020e', - `arm1022e', `arm1026ej-s', `fa606te' (Faraday FA606TE processor), - `fa616te' (Faraday FA616TE processor), `fa626te' (Faraday FA626TE - processor), `fmp626' (Faraday FMP626 processor), `fa726te' - (Faraday FA726TE processor), `arm1136j-s', `arm1136jf-s', - `arm1156t2-s', `arm1156t2f-s', `arm1176jz-s', `arm1176jzf-s', - `mpcore', `mpcorenovfp', `cortex-a5', `cortex-a7', `cortex-a8', - `cortex-a9', `cortex-a15', `cortex-r4', `cortex-r4f', `cortex-r5', - `cortex-r7', `cortex-m4', `cortex-m3', `cortex-m1', `cortex-m0', - `cortex-m0plus', `ep9312' (ARM920 with Cirrus Maverick - coprocessor), `i80200' (Intel XScale processor) `iwmmxt' (Intel(r) - XScale processor with Wireless MMX(tm) technology coprocessor) and - `xscale'. The special name `all' may be used to allow the - assembler to accept instructions valid for any ARM processor. - - In addition to the basic instruction set, the assembler can be - told to accept various extension mnemonics that extend the - processor using the co-processor instruction space. For example, - `-mcpu=arm920+maverick' is equivalent to specifying `-mcpu=ep9312'. - - Multiple extensions may be specified, separated by a `+'. The - extensions should be specified in ascending alphabetical order. - - Some extensions may be restricted to particular architectures; - this is documented in the list of extensions below. - - Extension mnemonics may also be removed from those the assembler - accepts. This is done be prepending `no' to the option that adds - the extension. Extensions that are removed should be listed after - all extensions which have been added, again in ascending - alphabetical order. For example, `-mcpu=ep9312+nomaverick' is - equivalent to specifying `-mcpu=arm920'. - - The following extensions are currently supported: `crypto' - (Cryptography Extensions for v8-A architecture, implies `fp+simd'), - `fp' (Floating Point Extensions for v8-A architecture), `idiv' - (Integer Divide Extensions for v7-A and v7-R architectures), - `iwmmxt', `iwmmxt2', `maverick', `mp' (Multiprocessing Extensions - for v7-A and v7-R architectures), `os' (Operating System for v6M - architecture), `sec' (Security Extensions for v6K and v7-A - architectures), `simd' (Advanced SIMD Extensions for v8-A - architecture, implies `fp'), `virt' (Virtualization Extensions for - v7-A architecture, implies `idiv'), and `xscale'. - -`-march=ARCHITECTURE[+EXTENSION...]' - This option specifies the target architecture. The assembler will - issue an error message if an attempt is made to assemble an - instruction which will not execute on the target architecture. - The following architecture names are recognized: `armv1', `armv2', - `armv2a', `armv2s', `armv3', `armv3m', `armv4', `armv4xm', - `armv4t', `armv4txm', `armv5', `armv5t', `armv5txm', `armv5te', - `armv5texp', `armv6', `armv6j', `armv6k', `armv6z', `armv6zk', - `armv6-m', `armv6s-m', `armv7', `armv7-a', `armv7ve', `armv7-r', - `armv7-m', `armv7e-m', `armv8-a', `iwmmxt' and `xscale'. If both - `-mcpu' and `-march' are specified, the assembler will use the - setting for `-mcpu'. - - The architecture option can be extended with the same instruction - set extension options as the `-mcpu' option. - -`-mfpu=FLOATING-POINT-FORMAT' - This option specifies the floating point format to assemble for. - The assembler will issue an error message if an attempt is made to - assemble an instruction which will not execute on the target - floating point unit. The following format options are recognized: - `softfpa', `fpe', `fpe2', `fpe3', `fpa', `fpa10', `fpa11', - `arm7500fe', `softvfp', `softvfp+vfp', `vfp', `vfp10', `vfp10-r0', - `vfp9', `vfpxd', `vfpv2', `vfpv3', `vfpv3-fp16', `vfpv3-d16', - `vfpv3-d16-fp16', `vfpv3xd', `vfpv3xd-d16', `vfpv4', `vfpv4-d16', - `fpv4-sp-d16', `fp-armv8', `arm1020t', `arm1020e', `arm1136jf-s', - `maverick', `neon', `neon-vfpv4', `neon-fp-armv8', and - `crypto-neon-fp-armv8'. - - In addition to determining which instructions are assembled, this - option also affects the way in which the `.double' assembler - directive behaves when assembling little-endian code. - - The default is dependent on the processor selected. For - Architecture 5 or later, the default is to assembler for VFP - instructions; for earlier architectures the default is to assemble - for FPA instructions. - -`-mthumb' - This option specifies that the assembler should start assembling - Thumb instructions; that is, it should behave as though the file - starts with a `.code 16' directive. - -`-mthumb-interwork' - This option specifies that the output generated by the assembler - should be marked as supporting interworking. - -`-mimplicit-it=never' -`-mimplicit-it=always' -`-mimplicit-it=arm' -`-mimplicit-it=thumb' - The `-mimplicit-it' option controls the behavior of the assembler - when conditional instructions are not enclosed in IT blocks. - There are four possible behaviors. If `never' is specified, such - constructs cause a warning in ARM code and an error in Thumb-2 - code. If `always' is specified, such constructs are accepted in - both ARM and Thumb-2 code, where the IT instruction is added - implicitly. If `arm' is specified, such constructs are accepted - in ARM code and cause an error in Thumb-2 code. If `thumb' is - specified, such constructs cause a warning in ARM code and are - accepted in Thumb-2 code. If you omit this option, the behavior - is equivalent to `-mimplicit-it=arm'. - -`-mapcs-26' -`-mapcs-32' - These options specify that the output generated by the assembler - should be marked as supporting the indicated version of the Arm - Procedure. Calling Standard. - -`-matpcs' - This option specifies that the output generated by the assembler - should be marked as supporting the Arm/Thumb Procedure Calling - Standard. If enabled this option will cause the assembler to - create an empty debugging section in the object file called - .arm.atpcs. Debuggers can use this to determine the ABI being - used by. - -`-mapcs-float' - This indicates the floating point variant of the APCS should be - used. In this variant floating point arguments are passed in FP - registers rather than integer registers. - -`-mapcs-reentrant' - This indicates that the reentrant variant of the APCS should be - used. This variant supports position independent code. - -`-mfloat-abi=ABI' - This option specifies that the output generated by the assembler - should be marked as using specified floating point ABI. The - following values are recognized: `soft', `softfp' and `hard'. - -`-meabi=VER' - This option specifies which EABI version the produced object files - should conform to. The following values are recognized: `gnu', `4' - and `5'. - -`-EB' - This option specifies that the output generated by the assembler - should be marked as being encoded for a big-endian processor. - -`-EL' - This option specifies that the output generated by the assembler - should be marked as being encoded for a little-endian processor. - -`-k' - This option specifies that the output of the assembler should be - marked as position-independent code (PIC). - -`--fix-v4bx' - Allow `BX' instructions in ARMv4 code. This is intended for use - with the linker option of the same name. - -`-mwarn-deprecated' -`-mno-warn-deprecated' - Enable or disable warnings about using deprecated options or - features. The default is to warn. - - - -File: as.info, Node: ARM Syntax, Next: ARM Floating Point, Prev: ARM Options, Up: ARM-Dependent - -9.4.2 Syntax ------------- - -* Menu: - -* ARM-Instruction-Set:: Instruction Set -* ARM-Chars:: Special Characters -* ARM-Regs:: Register Names -* ARM-Relocations:: Relocations -* ARM-Neon-Alignment:: NEON Alignment Specifiers - - -File: as.info, Node: ARM-Instruction-Set, Next: ARM-Chars, Up: ARM Syntax - -9.4.2.1 Instruction Set Syntax -.............................. - -Two slightly different syntaxes are support for ARM and THUMB -instructions. The default, `divided', uses the old style where ARM and -THUMB instructions had their own, separate syntaxes. The new, -`unified' syntax, which can be selected via the `.syntax' directive, -and has the following main features: - - * Immediate operands do not require a `#' prefix. - - * The `IT' instruction may appear, and if it does it is validated - against subsequent conditional affixes. In ARM mode it does not - generate machine code, in THUMB mode it does. - - * For ARM instructions the conditional affixes always appear at the - end of the instruction. For THUMB instructions conditional - affixes can be used, but only inside the scope of an `IT' - instruction. - - * All of the instructions new to the V6T2 architecture (and later) - are available. (Only a few such instructions can be written in the - `divided' syntax). - - * The `.N' and `.W' suffixes are recognized and honored. - - * All instructions set the flags if and only if they have an `s' - affix. - - -File: as.info, Node: ARM-Chars, Next: ARM-Regs, Prev: ARM-Instruction-Set, Up: ARM Syntax - -9.4.2.2 Special Characters -.......................... - -The presence of a `@' anywhere on a line indicates the start of a -comment that extends to the end of that line. - - If a `#' appears as the first character of a line then the whole -line is treated as a comment, but in this case the line could also be a -logical line number directive (*note Comments::) or a preprocessor -control command (*note Preprocessing::). - - The `;' character can be used instead of a newline to separate -statements. - - Either `#' or `$' can be used to indicate immediate operands. - - *TODO* Explain about /data modifier on symbols. - - -File: as.info, Node: ARM-Regs, Next: ARM-Relocations, Prev: ARM-Chars, Up: ARM Syntax - -9.4.2.3 Register Names -...................... - -*TODO* Explain about ARM register naming, and the predefined names. - - -File: as.info, Node: ARM-Relocations, Next: ARM-Neon-Alignment, Prev: ARM-Regs, Up: ARM Syntax - -9.4.2.4 ARM relocation generation -................................. - -Specific data relocations can be generated by putting the relocation -name in parentheses after the symbol name. For example: - - .word foo(TARGET1) - - This will generate an `R_ARM_TARGET1' relocation against the symbol -FOO. The following relocations are supported: `GOT', `GOTOFF', -`TARGET1', `TARGET2', `SBREL', `TLSGD', `TLSLDM', `TLSLDO', `TLSDESC', -`TLSCALL', `GOTTPOFF', `GOT_PREL' and `TPOFF'. - - For compatibility with older toolchains the assembler also accepts -`(PLT)' after branch targets. On legacy targets this will generate the -deprecated `R_ARM_PLT32' relocation. On EABI targets it will encode -either the `R_ARM_CALL' or `R_ARM_JUMP24' relocation, as appropriate. - - Relocations for `MOVW' and `MOVT' instructions can be generated by -prefixing the value with `#:lower16:' and `#:upper16' respectively. -For example to load the 32-bit address of foo into r0: - - MOVW r0, #:lower16:foo - MOVT r0, #:upper16:foo - - -File: as.info, Node: ARM-Neon-Alignment, Prev: ARM-Relocations, Up: ARM Syntax - -9.4.2.5 NEON Alignment Specifiers -................................. - -Some NEON load/store instructions allow an optional address alignment -qualifier. The ARM documentation specifies that this is indicated by -`@ ALIGN'. However GAS already interprets the `@' character as a "line -comment" start, so `: ALIGN' is used instead. For example: - - vld1.8 {q0}, [r0, :128] - - -File: as.info, Node: ARM Floating Point, Next: ARM Directives, Prev: ARM Syntax, Up: ARM-Dependent - -9.4.3 Floating Point --------------------- - -The ARM family uses IEEE floating-point numbers. - - -File: as.info, Node: ARM Directives, Next: ARM Opcodes, Prev: ARM Floating Point, Up: ARM-Dependent - -9.4.4 ARM Machine Directives ----------------------------- - -`.2byte EXPRESSION [, EXPRESSION]*' -`.4byte EXPRESSION [, EXPRESSION]*' -`.8byte EXPRESSION [, EXPRESSION]*' - These directives write 2, 4 or 8 byte values to the output section. - -`.align EXPRESSION [, EXPRESSION]' - This is the generic .ALIGN directive. For the ARM however if the - first argument is zero (ie no alignment is needed) the assembler - will behave as if the argument had been 2 (ie pad to the next four - byte boundary). This is for compatibility with ARM's own - assembler. - -`.arch NAME' - Select the target architecture. Valid values for NAME are the - same as for the `-march' commandline option. - - Specifying `.arch' clears any previously selected architecture - extensions. - -`.arch_extension NAME' - Add or remove an architecture extension to the target - architecture. Valid values for NAME are the same as those - accepted as architectural extensions by the `-mcpu' commandline - option. - - `.arch_extension' may be used multiple times to add or remove - extensions incrementally to the architecture being compiled for. - -`.arm' - This performs the same action as .CODE 32. - -`.pad #COUNT' - Generate unwinder annotations for a stack adjustment of COUNT - bytes. A positive value indicates the function prologue allocated - stack space by decrementing the stack pointer. - -`.bss' - This directive switches to the `.bss' section. - -`.cantunwind' - Prevents unwinding through the current function. No personality - routine or exception table data is required or permitted. - -`.code `[16|32]'' - This directive selects the instruction set being generated. The - value 16 selects Thumb, with the value 32 selecting ARM. - -`.cpu NAME' - Select the target processor. Valid values for NAME are the same as - for the `-mcpu' commandline option. - - Specifying `.cpu' clears any previously selected architecture - extensions. - -`NAME .dn REGISTER NAME [.TYPE] [[INDEX]]' -`NAME .qn REGISTER NAME [.TYPE] [[INDEX]]' - The `dn' and `qn' directives are used to create typed and/or - indexed register aliases for use in Advanced SIMD Extension (Neon) - instructions. The former should be used to create aliases of - double-precision registers, and the latter to create aliases of - quad-precision registers. - - If these directives are used to create typed aliases, those - aliases can be used in Neon instructions instead of writing types - after the mnemonic or after each operand. For example: - - x .dn d2.f32 - y .dn d3.f32 - z .dn d4.f32[1] - vmul x,y,z - - This is equivalent to writing the following: - - vmul.f32 d2,d3,d4[1] - - Aliases created using `dn' or `qn' can be destroyed using `unreq'. - -`.eabi_attribute TAG, VALUE' - Set the EABI object attribute TAG to VALUE. - - The TAG is either an attribute number, or one of the following: - `Tag_CPU_raw_name', `Tag_CPU_name', `Tag_CPU_arch', - `Tag_CPU_arch_profile', `Tag_ARM_ISA_use', `Tag_THUMB_ISA_use', - `Tag_FP_arch', `Tag_WMMX_arch', `Tag_Advanced_SIMD_arch', - `Tag_PCS_config', `Tag_ABI_PCS_R9_use', `Tag_ABI_PCS_RW_data', - `Tag_ABI_PCS_RO_data', `Tag_ABI_PCS_GOT_use', - `Tag_ABI_PCS_wchar_t', `Tag_ABI_FP_rounding', - `Tag_ABI_FP_denormal', `Tag_ABI_FP_exceptions', - `Tag_ABI_FP_user_exceptions', `Tag_ABI_FP_number_model', - `Tag_ABI_align_needed', `Tag_ABI_align_preserved', - `Tag_ABI_enum_size', `Tag_ABI_HardFP_use', `Tag_ABI_VFP_args', - `Tag_ABI_WMMX_args', `Tag_ABI_optimization_goals', - `Tag_ABI_FP_optimization_goals', `Tag_compatibility', - `Tag_CPU_unaligned_access', `Tag_FP_HP_extension', - `Tag_ABI_FP_16bit_format', `Tag_MPextension_use', `Tag_DIV_use', - `Tag_nodefaults', `Tag_also_compatible_with', `Tag_conformance', - `Tag_T2EE_use', `Tag_Virtualization_use' - - The VALUE is either a `number', `"string"', or `number, "string"' - depending on the tag. - - Note - the following legacy values are also accepted by TAG: - `Tag_VFP_arch', `Tag_ABI_align8_needed', - `Tag_ABI_align8_preserved', `Tag_VFP_HP_extension', - -`.even' - This directive aligns to an even-numbered address. - -`.extend EXPRESSION [, EXPRESSION]*' -`.ldouble EXPRESSION [, EXPRESSION]*' - These directives write 12byte long double floating-point values to - the output section. These are not compatible with current ARM - processors or ABIs. - -`.fnend' - Marks the end of a function with an unwind table entry. The - unwind index table entry is created when this directive is - processed. - - If no personality routine has been specified then standard - personality routine 0 or 1 will be used, depending on the number - of unwind opcodes required. - -`.fnstart' - Marks the start of a function with an unwind table entry. - -`.force_thumb' - This directive forces the selection of Thumb instructions, even if - the target processor does not support those instructions - -`.fpu NAME' - Select the floating-point unit to assemble for. Valid values for - NAME are the same as for the `-mfpu' commandline option. - -`.handlerdata' - Marks the end of the current function, and the start of the - exception table entry for that function. Anything between this - directive and the `.fnend' directive will be added to the - exception table entry. - - Must be preceded by a `.personality' or `.personalityindex' - directive. - -`.inst OPCODE [ , ... ]' -`.inst.n OPCODE [ , ... ]' -`.inst.w OPCODE [ , ... ]' - Generates the instruction corresponding to the numerical value - OPCODE. `.inst.n' and `.inst.w' allow the Thumb instruction size - to be specified explicitly, overriding the normal encoding rules. - -`.ldouble EXPRESSION [, EXPRESSION]*' - See `.extend'. - -`.ltorg' - This directive causes the current contents of the literal pool to - be dumped into the current section (which is assumed to be the - .text section) at the current location (aligned to a word - boundary). `GAS' maintains a separate literal pool for each - section and each sub-section. The `.ltorg' directive will only - affect the literal pool of the current section and sub-section. - At the end of assembly all remaining, un-empty literal pools will - automatically be dumped. - - Note - older versions of `GAS' would dump the current literal pool - any time a section change occurred. This is no longer done, since - it prevents accurate control of the placement of literal pools. - -`.movsp REG [, #OFFSET]' - Tell the unwinder that REG contains an offset from the current - stack pointer. If OFFSET is not specified then it is assumed to be - zero. - -`.object_arch NAME' - Override the architecture recorded in the EABI object attribute - section. Valid values for NAME are the same as for the `.arch' - directive. Typically this is useful when code uses runtime - detection of CPU features. - -`.packed EXPRESSION [, EXPRESSION]*' - This directive writes 12-byte packed floating-point values to the - output section. These are not compatible with current ARM - processors or ABIs. - -`.pad #COUNT' - Generate unwinder annotations for a stack adjustment of COUNT - bytes. A positive value indicates the function prologue allocated - stack space by decrementing the stack pointer. - -`.personality NAME' - Sets the personality routine for the current function to NAME. - -`.personalityindex INDEX' - Sets the personality routine for the current function to the EABI - standard routine number INDEX - -`.pool' - This is a synonym for .ltorg. - -`NAME .req REGISTER NAME' - This creates an alias for REGISTER NAME called NAME. For example: - - foo .req r0 - -`.save REGLIST' - Generate unwinder annotations to restore the registers in REGLIST. - The format of REGLIST is the same as the corresponding - store-multiple instruction. - - _core registers_ - .save {r4, r5, r6, lr} - stmfd sp!, {r4, r5, r6, lr} - _FPA registers_ - .save f4, 2 - sfmfd f4, 2, [sp]! - _VFP registers_ - .save {d8, d9, d10} - fstmdx sp!, {d8, d9, d10} - _iWMMXt registers_ - .save {wr10, wr11} - wstrd wr11, [sp, #-8]! - wstrd wr10, [sp, #-8]! - or - .save wr11 - wstrd wr11, [sp, #-8]! - .save wr10 - wstrd wr10, [sp, #-8]! - -`.setfp FPREG, SPREG [, #OFFSET]' - Make all unwinder annotations relative to a frame pointer. - Without this the unwinder will use offsets from the stack pointer. - - The syntax of this directive is the same as the `add' or `mov' - instruction used to set the frame pointer. SPREG must be either - `sp' or mentioned in a previous `.movsp' directive. - - .movsp ip - mov ip, sp - ... - .setfp fp, ip, #4 - add fp, ip, #4 - -`.secrel32 EXPRESSION [, EXPRESSION]*' - This directive emits relocations that evaluate to the - section-relative offset of each expression's symbol. This - directive is only supported for PE targets. - -`.syntax [`unified' | `divided']' - This directive sets the Instruction Set Syntax as described in the - *Note ARM-Instruction-Set:: section. - -`.thumb' - This performs the same action as .CODE 16. - -`.thumb_func' - This directive specifies that the following symbol is the name of a - Thumb encoded function. This information is necessary in order to - allow the assembler and linker to generate correct code for - interworking between Arm and Thumb instructions and should be used - even if interworking is not going to be performed. The presence - of this directive also implies `.thumb' - - This directive is not neccessary when generating EABI objects. On - these targets the encoding is implicit when generating Thumb code. - -`.thumb_set' - This performs the equivalent of a `.set' directive in that it - creates a symbol which is an alias for another symbol (possibly - not yet defined). This directive also has the added property in - that it marks the aliased symbol as being a thumb function entry - point, in the same way that the `.thumb_func' directive does. - -`.tlsdescseq TLS-VARIABLE' - This directive is used to annotate parts of an inlined TLS - descriptor trampoline. Normally the trampoline is provided by the - linker, and this directive is not needed. - -`.unreq ALIAS-NAME' - This undefines a register alias which was previously defined using - the `req', `dn' or `qn' directives. For example: - - foo .req r0 - .unreq foo - - An error occurs if the name is undefined. Note - this pseudo op - can be used to delete builtin in register name aliases (eg 'r0'). - This should only be done if it is really necessary. - -`.unwind_raw OFFSET, BYTE1, ...' - Insert one of more arbitary unwind opcode bytes, which are known - to adjust the stack pointer by OFFSET bytes. - - For example `.unwind_raw 4, 0xb1, 0x01' is equivalent to `.save - {r0}' - -`.vsave VFP-REGLIST' - Generate unwinder annotations to restore the VFP registers in - VFP-REGLIST using FLDMD. Also works for VFPv3 registers that are - to be restored using VLDM. The format of VFP-REGLIST is the same - as the corresponding store-multiple instruction. - - _VFP registers_ - .vsave {d8, d9, d10} - fstmdd sp!, {d8, d9, d10} - _VFPv3 registers_ - .vsave {d15, d16, d17} - vstm sp!, {d15, d16, d17} - - Since FLDMX and FSTMX are now deprecated, this directive should be - used in favour of `.save' for saving VFP registers for ARMv6 and - above. - - - -File: as.info, Node: ARM Opcodes, Next: ARM Mapping Symbols, Prev: ARM Directives, Up: ARM-Dependent - -9.4.5 Opcodes -------------- - -`as' implements all the standard ARM opcodes. It also implements -several pseudo opcodes, including several synthetic load instructions. - -`NOP' - nop - - This pseudo op will always evaluate to a legal ARM instruction - that does nothing. Currently it will evaluate to MOV r0, r0. - -`LDR' - ldr <register> , = <expression> - - If expression evaluates to a numeric constant then a MOV or MVN - instruction will be used in place of the LDR instruction, if the - constant can be generated by either of these instructions. - Otherwise the constant will be placed into the nearest literal - pool (if it not already there) and a PC relative LDR instruction - will be generated. - -`ADR' - adr <register> <label> - - This instruction will load the address of LABEL into the indicated - register. The instruction will evaluate to a PC relative ADD or - SUB instruction depending upon where the label is located. If the - label is out of range, or if it is not defined in the same file - (and section) as the ADR instruction, then an error will be - generated. This instruction will not make use of the literal pool. - -`ADRL' - adrl <register> <label> - - This instruction will load the address of LABEL into the indicated - register. The instruction will evaluate to one or two PC relative - ADD or SUB instructions depending upon where the label is located. - If a second instruction is not needed a NOP instruction will be - generated in its place, so that this instruction is always 8 bytes - long. - - If the label is out of range, or if it is not defined in the same - file (and section) as the ADRL instruction, then an error will be - generated. This instruction will not make use of the literal pool. - - - For information on the ARM or Thumb instruction sets, see `ARM -Software Development Toolkit Reference Manual', Advanced RISC Machines -Ltd. - - -File: as.info, Node: ARM Mapping Symbols, Next: ARM Unwinding Tutorial, Prev: ARM Opcodes, Up: ARM-Dependent - -9.4.6 Mapping Symbols ---------------------- - -The ARM ELF specification requires that special symbols be inserted -into object files to mark certain features: - -`$a' - At the start of a region of code containing ARM instructions. - -`$t' - At the start of a region of code containing THUMB instructions. - -`$d' - At the start of a region of data. - - - The assembler will automatically insert these symbols for you - there -is no need to code them yourself. Support for tagging symbols ($b, $f, -$p and $m) which is also mentioned in the current ARM ELF specification -is not implemented. This is because they have been dropped from the -new EABI and so tools cannot rely upon their presence. - - -File: as.info, Node: ARM Unwinding Tutorial, Prev: ARM Mapping Symbols, Up: ARM-Dependent - -9.4.7 Unwinding ---------------- - -The ABI for the ARM Architecture specifies a standard format for -exception unwind information. This information is used when an -exception is thrown to determine where control should be transferred. -In particular, the unwind information is used to determine which -function called the function that threw the exception, and which -function called that one, and so forth. This information is also used -to restore the values of callee-saved registers in the function -catching the exception. - - If you are writing functions in assembly code, and those functions -call other functions that throw exceptions, you must use assembly -pseudo ops to ensure that appropriate exception unwind information is -generated. Otherwise, if one of the functions called by your assembly -code throws an exception, the run-time library will be unable to unwind -the stack through your assembly code and your program will not behave -correctly. - - To illustrate the use of these pseudo ops, we will examine the code -that G++ generates for the following C++ input: - - -void callee (int *); - -int -caller () -{ - int i; - callee (&i); - return i; -} - - This example does not show how to throw or catch an exception from -assembly code. That is a much more complex operation and should always -be done in a high-level language, such as C++, that directly supports -exceptions. - - The code generated by one particular version of G++ when compiling -the example above is: - - -_Z6callerv: - .fnstart -.LFB2: - @ Function supports interworking. - @ args = 0, pretend = 0, frame = 8 - @ frame_needed = 1, uses_anonymous_args = 0 - stmfd sp!, {fp, lr} - .save {fp, lr} -.LCFI0: - .setfp fp, sp, #4 - add fp, sp, #4 -.LCFI1: - .pad #8 - sub sp, sp, #8 -.LCFI2: - sub r3, fp, #8 - mov r0, r3 - bl _Z6calleePi - ldr r3, [fp, #-8] - mov r0, r3 - sub sp, fp, #4 - ldmfd sp!, {fp, lr} - bx lr -.LFE2: - .fnend - - Of course, the sequence of instructions varies based on the options -you pass to GCC and on the version of GCC in use. The exact -instructions are not important since we are focusing on the pseudo ops -that are used to generate unwind information. - - An important assumption made by the unwinder is that the stack frame -does not change during the body of the function. In particular, since -we assume that the assembly code does not itself throw an exception, -the only point where an exception can be thrown is from a call, such as -the `bl' instruction above. At each call site, the same saved -registers (including `lr', which indicates the return address) must be -located in the same locations relative to the frame pointer. - - The `.fnstart' (*note .fnstart pseudo op: arm_fnstart.) pseudo op -appears immediately before the first instruction of the function while -the `.fnend' (*note .fnend pseudo op: arm_fnend.) pseudo op appears -immediately after the last instruction of the function. These pseudo -ops specify the range of the function. - - Only the order of the other pseudos ops (e.g., `.setfp' or `.pad') -matters; their exact locations are irrelevant. In the example above, -the compiler emits the pseudo ops with particular instructions. That -makes it easier to understand the code, but it is not required for -correctness. It would work just as well to emit all of the pseudo ops -other than `.fnend' in the same order, but immediately after `.fnstart'. - - The `.save' (*note .save pseudo op: arm_save.) pseudo op indicates -registers that have been saved to the stack so that they can be -restored before the function returns. The argument to the `.save' -pseudo op is a list of registers to save. If a register is -"callee-saved" (as specified by the ABI) and is modified by the -function you are writing, then your code must save the value before it -is modified and restore the original value before the function returns. -If an exception is thrown, the run-time library restores the values of -these registers from their locations on the stack before returning -control to the exception handler. (Of course, if an exception is not -thrown, the function that contains the `.save' pseudo op restores these -registers in the function epilogue, as is done with the `ldmfd' -instruction above.) - - You do not have to save callee-saved registers at the very beginning -of the function and you do not need to use the `.save' pseudo op -immediately following the point at which the registers are saved. -However, if you modify a callee-saved register, you must save it on the -stack before modifying it and before calling any functions which might -throw an exception. And, you must use the `.save' pseudo op to -indicate that you have done so. - - The `.pad' (*note .pad: arm_pad.) pseudo op indicates a modification -of the stack pointer that does not save any registers. The argument is -the number of bytes (in decimal) that are subtracted from the stack -pointer. (On ARM CPUs, the stack grows downwards, so subtracting from -the stack pointer increases the size of the stack.) - - The `.setfp' (*note .setfp pseudo op: arm_setfp.) pseudo op -indicates the register that contains the frame pointer. The first -argument is the register that is set, which is typically `fp'. The -second argument indicates the register from which the frame pointer -takes its value. The third argument, if present, is the value (in -decimal) added to the register specified by the second argument to -compute the value of the frame pointer. You should not modify the -frame pointer in the body of the function. - - If you do not use a frame pointer, then you should not use the -`.setfp' pseudo op. If you do not use a frame pointer, then you should -avoid modifying the stack pointer outside of the function prologue. -Otherwise, the run-time library will be unable to find saved registers -when it is unwinding the stack. - - The pseudo ops described above are sufficient for writing assembly -code that calls functions which may throw exceptions. If you need to -know more about the object-file format used to represent unwind -information, you may consult the `Exception Handling ABI for the ARM -Architecture' available from `http://infocenter.arm.com'. - - -File: as.info, Node: AVR-Dependent, Next: Blackfin-Dependent, Prev: ARM-Dependent, Up: Machine Dependencies - -9.5 AVR Dependent Features -========================== - -* Menu: - -* AVR Options:: Options -* AVR Syntax:: Syntax -* AVR Opcodes:: Opcodes - - -File: as.info, Node: AVR Options, Next: AVR Syntax, Up: AVR-Dependent - -9.5.1 Options -------------- - -`-mmcu=MCU' - Specify ATMEL AVR instruction set or MCU type. - - Instruction set avr1 is for the minimal AVR core, not supported by - the C compiler, only for assembler programs (MCU types: at90s1200, - attiny11, attiny12, attiny15, attiny28). - - Instruction set avr2 (default) is for the classic AVR core with up - to 8K program memory space (MCU types: at90s2313, at90s2323, - at90s2333, at90s2343, attiny22, attiny26, at90s4414, at90s4433, - at90s4434, at90s8515, at90c8534, at90s8535). - - Instruction set avr25 is for the classic AVR core with up to 8K - program memory space plus the MOVW instruction (MCU types: - attiny13, attiny13a, attiny2313, attiny2313a, attiny24, attiny24a, - attiny4313, attiny44, attiny44a, attiny84, attiny84a, attiny25, - attiny45, attiny85, attiny261, attiny261a, attiny461, attiny461a, - attiny861, attiny861a, attiny87, attiny43u, attiny48, attiny88, - at86rf401). - - Instruction set avr3 is for the classic AVR core with up to 128K - program memory space (MCU types: at43usb355, at76c711). - - Instruction set avr31 is for the classic AVR core with exactly - 128K program memory space (MCU types: atmega103, at43usb320). - - Instruction set avr35 is for classic AVR core plus MOVW, CALL, and - JMP instructions (MCU types: attiny167, at90usb82, at90usb162, - atmega8u2, atmega16u2, atmega32u2). - - Instruction set avr4 is for the enhanced AVR core with up to 8K - program memory space (MCU types: atmega48, atmega48a, atmega48p, - atmega8, atmega88, atmega88a, atmega88p, atmega88pa, atmega8515, - atmega8535, atmega8hva, at90pwm1, at90pwm2, at90pwm2b, at90pwm3, - at90pwm3b, at90pwm81, ata6289). - - Instruction set avr5 is for the enhanced AVR core with up to 128K - program memory space (MCU types: atmega16, atmega16a, atmega161, - atmega162, atmega163, atmega164a, atmega164p, atmega165, - atmega165a, atmega165p, atmega168, atmega168a, atmega168p, - atmega169, atmega169a, atmega169p, atmega169pa, atmega32, - atmega323, atmega324a, atmega324p, atmega325, atmega325a, - atmega325p, atmega325pa, atmega3250, atmega3250a, atmega3250p, - atmega3250pa, atmega328, atmega328p, atmega329, atmega329a, - atmega329p, atmega329pa, atmega3290, atmega3290a, atmega3290p, - atmega3290pa, atmega406, atmega64, atmega640, atmega644, - atmega644a, atmega644p, atmega644pa, atmega645, atmega645a, - atmega645p, atmega6450, atmega6450a, atmega6450p, atmega649, - atmega649a, atmega649p, atmega6490, atmega6490a, atmega6490p, - atmega64rfr2, atmega644rfr2, atmega16hva, atmega16hva2, - atmega16hvb, atmega16hvbrevb, atmega32hvb, atmega32hvbrevb, - atmega64hve, at90can32, at90can64, at90pwm161, at90pwm216, - at90pwm316, atmega32c1, atmega64c1, atmega16m1, atmega32m1, - atmega64m1, atmega16u4, atmega32u4, atmega32u6, at90usb646, - at90usb647, at94k, at90scr100). - - Instruction set avr51 is for the enhanced AVR core with exactly - 128K program memory space (MCU types: atmega128, atmega1280, - atmega1281, atmega1284p, atmega128rfa1, atmega128rfr2, - atmega1284rfr2, at90can128, at90usb1286, at90usb1287, m3000). - - Instruction set avr6 is for the enhanced AVR core with a 3-byte PC - (MCU types: atmega2560, atmega2561, atmega256rfr2, atmega2564rfr2). - - Instruction set avrxmega2 is for the XMEGA AVR core with 8K to 64K - program memory space and less than 64K data space (MCU types: - atxmega16a4, atxmega16d4, atxmega16x1, atxmega32a4, atxmega32d4, - atxmega32x1). - - Instruction set avrxmega3 is for the XMEGA AVR core with 8K to 64K - program memory space and greater than 64K data space (MCU types: - none). - - Instruction set avrxmega4 is for the XMEGA AVR core with up to 64K - program memory space and less than 64K data space (MCU types: - atxmega64a3, atxmega64d3). - - Instruction set avrxmega5 is for the XMEGA AVR core with up to 64K - program memory space and greater than 64K data space (MCU types: - atxmega64a1, atxmega64a1u). - - Instruction set avrxmega6 is for the XMEGA AVR core with up to - 256K program memory space and less than 64K data space (MCU types: - atxmega128a3, atxmega128d3, atxmega192a3, atxmega128b1, - atxmega192d3, atxmega256a3, atxmega256a3b, atxmega256a3bu, - atxmega192d3). - - Instruction set avrxmega7 is for the XMEGA AVR core with up to - 256K program memory space and greater than 64K data space (MCU - types: atxmega128a1, atxmega128a1u). - -`-mall-opcodes' - Accept all AVR opcodes, even if not supported by `-mmcu'. - -`-mno-skip-bug' - This option disable warnings for skipping two-word instructions. - -`-mno-wrap' - This option reject `rjmp/rcall' instructions with 8K wrap-around. - - - -File: as.info, Node: AVR Syntax, Next: AVR Opcodes, Prev: AVR Options, Up: AVR-Dependent - -9.5.2 Syntax ------------- - -* Menu: - -* AVR-Chars:: Special Characters -* AVR-Regs:: Register Names -* AVR-Modifiers:: Relocatable Expression Modifiers - - -File: as.info, Node: AVR-Chars, Next: AVR-Regs, Up: AVR Syntax - -9.5.2.1 Special Characters -.......................... - -The presence of a `;' anywhere on a line indicates the start of a -comment that extends to the end of that line. - - If a `#' appears as the first character of a line, the whole line is -treated as a comment, but in this case the line can also be a logical -line number directive (*note Comments::) or a preprocessor control -command (*note Preprocessing::). - - The `$' character can be used instead of a newline to separate -statements. - - -File: as.info, Node: AVR-Regs, Next: AVR-Modifiers, Prev: AVR-Chars, Up: AVR Syntax - -9.5.2.2 Register Names -...................... - -The AVR has 32 x 8-bit general purpose working registers `r0', `r1', -... `r31'. Six of the 32 registers can be used as three 16-bit -indirect address register pointers for Data Space addressing. One of -the these address pointers can also be used as an address pointer for -look up tables in Flash program memory. These added function registers -are the 16-bit `X', `Y' and `Z' - registers. - - X = r26:r27 - Y = r28:r29 - Z = r30:r31 - - -File: as.info, Node: AVR-Modifiers, Prev: AVR-Regs, Up: AVR Syntax - -9.5.2.3 Relocatable Expression Modifiers -........................................ - -The assembler supports several modifiers when using relocatable -addresses in AVR instruction operands. The general syntax is the -following: - - modifier(relocatable-expression) - -`lo8' - This modifier allows you to use bits 0 through 7 of an address - expression as 8 bit relocatable expression. - -`hi8' - This modifier allows you to use bits 7 through 15 of an address - expression as 8 bit relocatable expression. This is useful with, - for example, the AVR `ldi' instruction and `lo8' modifier. - - For example - - ldi r26, lo8(sym+10) - ldi r27, hi8(sym+10) - -`hh8' - This modifier allows you to use bits 16 through 23 of an address - expression as 8 bit relocatable expression. Also, can be useful - for loading 32 bit constants. - -`hlo8' - Synonym of `hh8'. - -`hhi8' - This modifier allows you to use bits 24 through 31 of an - expression as 8 bit expression. This is useful with, for example, - the AVR `ldi' instruction and `lo8', `hi8', `hlo8', `hhi8', - modifier. - - For example - - ldi r26, lo8(285774925) - ldi r27, hi8(285774925) - ldi r28, hlo8(285774925) - ldi r29, hhi8(285774925) - ; r29,r28,r27,r26 = 285774925 - -`pm_lo8' - This modifier allows you to use bits 0 through 7 of an address - expression as 8 bit relocatable expression. This modifier useful - for addressing data or code from Flash/Program memory. The using - of `pm_lo8' similar to `lo8'. - -`pm_hi8' - This modifier allows you to use bits 8 through 15 of an address - expression as 8 bit relocatable expression. This modifier useful - for addressing data or code from Flash/Program memory. - -`pm_hh8' - This modifier allows you to use bits 15 through 23 of an address - expression as 8 bit relocatable expression. This modifier useful - for addressing data or code from Flash/Program memory. - - - -File: as.info, Node: AVR Opcodes, Prev: AVR Syntax, Up: AVR-Dependent - -9.5.3 Opcodes -------------- - -For detailed information on the AVR machine instruction set, see -`www.atmel.com/products/AVR'. - - `as' implements all the standard AVR opcodes. The following table -summarizes the AVR opcodes, and their arguments. - - Legend: - r any register - d `ldi' register (r16-r31) - v `movw' even register (r0, r2, ..., r28, r30) - a `fmul' register (r16-r23) - w `adiw' register (r24,r26,r28,r30) - e pointer registers (X,Y,Z) - b base pointer register and displacement ([YZ]+disp) - z Z pointer register (for [e]lpm Rd,Z[+]) - M immediate value from 0 to 255 - n immediate value from 0 to 255 ( n = ~M ). Relocation impossible - s immediate value from 0 to 7 - P Port address value from 0 to 63. (in, out) - p Port address value from 0 to 31. (cbi, sbi, sbic, sbis) - K immediate value from 0 to 63 (used in `adiw', `sbiw') - i immediate value - l signed pc relative offset from -64 to 63 - L signed pc relative offset from -2048 to 2047 - h absolute code address (call, jmp) - S immediate value from 0 to 7 (S = s << 4) - ? use this opcode entry if no parameters, else use next opcode entry - - 1001010010001000 clc - 1001010011011000 clh - 1001010011111000 cli - 1001010010101000 cln - 1001010011001000 cls - 1001010011101000 clt - 1001010010111000 clv - 1001010010011000 clz - 1001010000001000 sec - 1001010001011000 seh - 1001010001111000 sei - 1001010000101000 sen - 1001010001001000 ses - 1001010001101000 set - 1001010000111000 sev - 1001010000011000 sez - 100101001SSS1000 bclr S - 100101000SSS1000 bset S - 1001010100001001 icall - 1001010000001001 ijmp - 1001010111001000 lpm ? - 1001000ddddd010+ lpm r,z - 1001010111011000 elpm ? - 1001000ddddd011+ elpm r,z - 0000000000000000 nop - 1001010100001000 ret - 1001010100011000 reti - 1001010110001000 sleep - 1001010110011000 break - 1001010110101000 wdr - 1001010111101000 spm - 000111rdddddrrrr adc r,r - 000011rdddddrrrr add r,r - 001000rdddddrrrr and r,r - 000101rdddddrrrr cp r,r - 000001rdddddrrrr cpc r,r - 000100rdddddrrrr cpse r,r - 001001rdddddrrrr eor r,r - 001011rdddddrrrr mov r,r - 100111rdddddrrrr mul r,r - 001010rdddddrrrr or r,r - 000010rdddddrrrr sbc r,r - 000110rdddddrrrr sub r,r - 001001rdddddrrrr clr r - 000011rdddddrrrr lsl r - 000111rdddddrrrr rol r - 001000rdddddrrrr tst r - 0111KKKKddddKKKK andi d,M - 0111KKKKddddKKKK cbr d,n - 1110KKKKddddKKKK ldi d,M - 11101111dddd1111 ser d - 0110KKKKddddKKKK ori d,M - 0110KKKKddddKKKK sbr d,M - 0011KKKKddddKKKK cpi d,M - 0100KKKKddddKKKK sbci d,M - 0101KKKKddddKKKK subi d,M - 1111110rrrrr0sss sbrc r,s - 1111111rrrrr0sss sbrs r,s - 1111100ddddd0sss bld r,s - 1111101ddddd0sss bst r,s - 10110PPdddddPPPP in r,P - 10111PPrrrrrPPPP out P,r - 10010110KKddKKKK adiw w,K - 10010111KKddKKKK sbiw w,K - 10011000pppppsss cbi p,s - 10011010pppppsss sbi p,s - 10011001pppppsss sbic p,s - 10011011pppppsss sbis p,s - 111101lllllll000 brcc l - 111100lllllll000 brcs l - 111100lllllll001 breq l - 111101lllllll100 brge l - 111101lllllll101 brhc l - 111100lllllll101 brhs l - 111101lllllll111 brid l - 111100lllllll111 brie l - 111100lllllll000 brlo l - 111100lllllll100 brlt l - 111100lllllll010 brmi l - 111101lllllll001 brne l - 111101lllllll010 brpl l - 111101lllllll000 brsh l - 111101lllllll110 brtc l - 111100lllllll110 brts l - 111101lllllll011 brvc l - 111100lllllll011 brvs l - 111101lllllllsss brbc s,l - 111100lllllllsss brbs s,l - 1101LLLLLLLLLLLL rcall L - 1100LLLLLLLLLLLL rjmp L - 1001010hhhhh111h call h - 1001010hhhhh110h jmp h - 1001010rrrrr0101 asr r - 1001010rrrrr0000 com r - 1001010rrrrr1010 dec r - 1001010rrrrr0011 inc r - 1001010rrrrr0110 lsr r - 1001010rrrrr0001 neg r - 1001000rrrrr1111 pop r - 1001001rrrrr1111 push r - 1001010rrrrr0111 ror r - 1001010rrrrr0010 swap r - 00000001ddddrrrr movw v,v - 00000010ddddrrrr muls d,d - 000000110ddd0rrr mulsu a,a - 000000110ddd1rrr fmul a,a - 000000111ddd0rrr fmuls a,a - 000000111ddd1rrr fmulsu a,a - 1001001ddddd0000 sts i,r - 1001000ddddd0000 lds r,i - 10o0oo0dddddbooo ldd r,b - 100!000dddddee-+ ld r,e - 10o0oo1rrrrrbooo std b,r - 100!001rrrrree-+ st e,r - 1001010100011001 eicall - 1001010000011001 eijmp - - -File: as.info, Node: Blackfin-Dependent, Next: CR16-Dependent, Prev: AVR-Dependent, Up: Machine Dependencies - -9.6 Blackfin Dependent Features -=============================== - -* Menu: - -* Blackfin Options:: Blackfin Options -* Blackfin Syntax:: Blackfin Syntax -* Blackfin Directives:: Blackfin Directives - - -File: as.info, Node: Blackfin Options, Next: Blackfin Syntax, Up: Blackfin-Dependent - -9.6.1 Options -------------- - -`-mcpu=PROCESSOR[-SIREVISION]' - This option specifies the target processor. The optional - SIREVISION is not used in assembler. It's here such that GCC can - easily pass down its `-mcpu=' option. The assembler will issue an - error message if an attempt is made to assemble an instruction - which will not execute on the target processor. The following - processor names are recognized: `bf504', `bf506', `bf512', `bf514', - `bf516', `bf518', `bf522', `bf523', `bf524', `bf525', `bf526', - `bf527', `bf531', `bf532', `bf533', `bf534', `bf535' (not - implemented yet), `bf536', `bf537', `bf538', `bf539', `bf542', - `bf542m', `bf544', `bf544m', `bf547', `bf547m', `bf548', `bf548m', - `bf549', `bf549m', `bf561', and `bf592'. - -`-mfdpic' - Assemble for the FDPIC ABI. - -`-mno-fdpic' -`-mnopic' - Disable -mfdpic. - - -File: as.info, Node: Blackfin Syntax, Next: Blackfin Directives, Prev: Blackfin Options, Up: Blackfin-Dependent - -9.6.2 Syntax ------------- - -`Special Characters' - Assembler input is free format and may appear anywhere on the line. - One instruction may extend across multiple lines or more than one - instruction may appear on the same line. White space (space, tab, - comments or newline) may appear anywhere between tokens. A token - must not have embedded spaces. Tokens include numbers, register - names, keywords, user identifiers, and also some multicharacter - special symbols like "+=", "/*" or "||". - - Comments are introduced by the `#' character and extend to the end - of the current line. If the `#' appears as the first character of - a line, the whole line is treated as a comment, but in this case - the line can also be a logical line number directive (*note - Comments::) or a preprocessor control command (*note - Preprocessing::). - -`Instruction Delimiting' - A semicolon must terminate every instruction. Sometimes a complete - instruction will consist of more than one operation. There are two - cases where this occurs. The first is when two general operations - are combined. Normally a comma separates the different parts, as - in - - a0= r3.h * r2.l, a1 = r3.l * r2.h ; - - The second case occurs when a general instruction is combined with - one or two memory references for joint issue. The latter portions - are set off by a "||" token. - - a0 = r3.h * r2.l || r1 = [p3++] || r4 = [i2++]; - - Multiple instructions can occur on the same line. Each must be - terminated by a semicolon character. - -`Register Names' - The assembler treats register names and instruction keywords in a - case insensitive manner. User identifiers are case sensitive. - Thus, R3.l, R3.L, r3.l and r3.L are all equivalent input to the - assembler. - - Register names are reserved and may not be used as program - identifiers. - - Some operations (such as "Move Register") require a register pair. - Register pairs are always data registers and are denoted using a - colon, eg., R3:2. The larger number must be written firsts. Note - that the hardware only supports odd-even pairs, eg., R7:6, R5:4, - R3:2, and R1:0. - - Some instructions (such as -SP (Push Multiple)) require a group of - adjacent registers. Adjacent registers are denoted in the syntax - by the range enclosed in parentheses and separated by a colon, - eg., (R7:3). Again, the larger number appears first. - - Portions of a particular register may be individually specified. - This is written with a dot (".") following the register name and - then a letter denoting the desired portion. For 32-bit registers, - ".H" denotes the most significant ("High") portion. ".L" denotes - the least-significant portion. The subdivisions of the 40-bit - registers are described later. - -`Accumulators' - The set of 40-bit registers A1 and A0 that normally contain data - that is being manipulated. Each accumulator can be accessed in - four ways. - - `one 40-bit register' - The register will be referred to as A1 or A0. - - `one 32-bit register' - The registers are designated as A1.W or A0.W. - - `two 16-bit registers' - The registers are designated as A1.H, A1.L, A0.H or A0.L. - - `one 8-bit register' - The registers are designated as A1.X or A0.X for the bits that - extend beyond bit 31. - -`Data Registers' - The set of 32-bit registers (R0, R1, R2, R3, R4, R5, R6 and R7) - that normally contain data for manipulation. These are - abbreviated as D-register or Dreg. Data registers can be accessed - as 32-bit registers or as two independent 16-bit registers. The - least significant 16 bits of each register is called the "low" - half and is designated with ".L" following the register name. The - most significant 16 bits are called the "high" half and is - designated with ".H" following the name. - - R7.L, r2.h, r4.L, R0.H - -`Pointer Registers' - The set of 32-bit registers (P0, P1, P2, P3, P4, P5, SP and FP) - that normally contain byte addresses of data structures. These are - abbreviated as P-register or Preg. - - p2, p5, fp, sp - -`Stack Pointer SP' - The stack pointer contains the 32-bit address of the last occupied - byte location in the stack. The stack grows by decrementing the - stack pointer. - -`Frame Pointer FP' - The frame pointer contains the 32-bit address of the previous frame - pointer in the stack. It is located at the top of a frame. - -`Loop Top' - LT0 and LT1. These registers contain the 32-bit address of the - top of a zero overhead loop. - -`Loop Count' - LC0 and LC1. These registers contain the 32-bit counter of the - zero overhead loop executions. - -`Loop Bottom' - LB0 and LB1. These registers contain the 32-bit address of the - bottom of a zero overhead loop. - -`Index Registers' - The set of 32-bit registers (I0, I1, I2, I3) that normally contain - byte addresses of data structures. Abbreviated I-register or Ireg. - -`Modify Registers' - The set of 32-bit registers (M0, M1, M2, M3) that normally contain - offset values that are added and subtracted to one of the index - registers. Abbreviated as Mreg. - -`Length Registers' - The set of 32-bit registers (L0, L1, L2, L3) that normally contain - the length in bytes of the circular buffer. Abbreviated as Lreg. - Clear the Lreg to disable circular addressing for the - corresponding Ireg. - -`Base Registers' - The set of 32-bit registers (B0, B1, B2, B3) that normally contain - the base address in bytes of the circular buffer. Abbreviated as - Breg. - -`Floating Point' - The Blackfin family has no hardware floating point but the .float - directive generates ieee floating point numbers for use with - software floating point libraries. - -`Blackfin Opcodes' - For detailed information on the Blackfin machine instruction set, - see the Blackfin(r) Processor Instruction Set Reference. - - - -File: as.info, Node: Blackfin Directives, Prev: Blackfin Syntax, Up: Blackfin-Dependent - -9.6.3 Directives ----------------- - -The following directives are provided for compatibility with the VDSP -assembler. - -`.byte2' - Initializes a two byte data object. - - This maps to the `.short' directive. - -`.byte4' - Initializes a four byte data object. - - This maps to the `.int' directive. - -`.db' - Initializes a single byte data object. - - This directive is a synonym for `.byte'. - -`.dw' - Initializes a two byte data object. - - This directive is a synonym for `.byte2'. - -`.dd' - Initializes a four byte data object. - - This directive is a synonym for `.byte4'. - -`.var' - Define and initialize a 32 bit data object. - - -File: as.info, Node: CR16-Dependent, Next: CRIS-Dependent, Prev: Blackfin-Dependent, Up: Machine Dependencies - -9.7 CR16 Dependent Features -=========================== - -* Menu: - -* CR16 Operand Qualifiers:: CR16 Machine Operand Qualifiers -* CR16 Syntax:: Syntax for the CR16 - - -File: as.info, Node: CR16 Operand Qualifiers, Next: CR16 Syntax, Up: CR16-Dependent - -9.7.1 CR16 Operand Qualifiers ------------------------------ - -The National Semiconductor CR16 target of `as' has a few machine -dependent operand qualifiers. - - Operand expression type qualifier is an optional field in the -instruction operand, to determines the type of the expression field of -an operand. The `@' is required. CR16 architecture uses one of the -following expression qualifiers: - -`s' - - `Specifies expression operand type as small' - -`m' - - `Specifies expression operand type as medium' - -`l' - - `Specifies expression operand type as large' - -`c' - - `Specifies the CR16 Assembler generates a relocation entry for - the operand, where pc has implied bit, the expression is adjusted - accordingly. The linker uses the relocation entry to update the - operand address at link time.' - -`got/GOT' - - `Specifies the CR16 Assembler generates a relocation entry for - the operand, offset from Global Offset Table. The linker uses this - relocation entry to update the operand address at link time' - -`cgot/cGOT' - - `Specifies the CompactRISC Assembler generates a relocation - entry for the operand, where pc has implied bit, the expression is - adjusted accordingly. The linker uses the relocation entry to - update the operand address at link time.' - - CR16 target operand qualifiers and its size (in bits): - -`Immediate Operand: s' - 4 bits. - -`Immediate Operand: m' - 16 bits, for movb and movw instructions. - -`Immediate Operand: m' - 20 bits, movd instructions. - -`Immediate Operand: l' - 32 bits. - -`Absolute Operand: s' - Illegal specifier for this operand. - -`Absolute Operand: m' - 20 bits, movd instructions. - -`Displacement Operand: s' - 8 bits. - -`Displacement Operand: m' - 16 bits. - -`Displacement Operand: l' - 24 bits. - - - For example: - 1 `movw $_myfun@c,r1' - - This loads the address of _myfun, shifted right by 1, into r1. - - 2 `movd $_myfun@c,(r2,r1)' - - This loads the address of _myfun, shifted right by 1, into register-pair r2-r1. - - 3 `_myfun_ptr:' - `.long _myfun@c' - `loadd _myfun_ptr, (r1,r0)' - `jal (r1,r0)' - - This .long directive, the address of _myfunc, shifted right by 1 at link time. - - 4 `loadd _data1@GOT(r12), (r1,r0)' - - This loads the address of _data1, into global offset table (ie GOT) and its offset value from GOT loads into register-pair r2-r1. - - 5 `loadd _myfunc@cGOT(r12), (r1,r0)' - - 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. - - -File: as.info, Node: CR16 Syntax, Prev: CR16 Operand Qualifiers, Up: CR16-Dependent - -9.7.2 CR16 Syntax ------------------ - -* Menu: - -* CR16-Chars:: Special Characters - - -File: as.info, Node: CR16-Chars, Up: CR16 Syntax - -9.7.2.1 Special Characters -.......................... - -The presence of a `#' on a line indicates the start of a comment that -extends to the end of the current line. If the `#' appears as the -first character of a line, the whole line is treated as a comment, but -in this case the line can also be a logical line number directive -(*note Comments::) or a preprocessor control command (*note -Preprocessing::). - - The `;' character can be used to separate statements on the same -line. - - -File: as.info, Node: CRIS-Dependent, Next: D10V-Dependent, Prev: CR16-Dependent, Up: Machine Dependencies - -9.8 CRIS Dependent Features -=========================== - -* Menu: - -* CRIS-Opts:: Command-line Options -* CRIS-Expand:: Instruction expansion -* CRIS-Symbols:: Symbols -* CRIS-Syntax:: Syntax - - -File: as.info, Node: CRIS-Opts, Next: CRIS-Expand, Up: CRIS-Dependent - -9.8.1 Command-line Options --------------------------- - -The CRIS version of `as' has these machine-dependent command-line -options. - - The format of the generated object files can be either ELF or a.out, -specified by the command-line options `--emulation=crisaout' and -`--emulation=criself'. The default is ELF (criself), unless `as' has -been configured specifically for a.out by using the configuration name -`cris-axis-aout'. - - There are two different link-incompatible ELF object file variants -for CRIS, for use in environments where symbols are expected to be -prefixed by a leading `_' character and for environments without such a -symbol prefix. The variant used for GNU/Linux port has no symbol -prefix. Which variant to produce is specified by either of the options -`--underscore' and `--no-underscore'. The default is `--underscore'. -Since symbols in CRIS a.out objects are expected to have a `_' prefix, -specifying `--no-underscore' when generating a.out objects is an error. -Besides the object format difference, the effect of this option is to -parse register names differently (*note crisnous::). The -`--no-underscore' option makes a `$' register prefix mandatory. - - The option `--pic' must be passed to `as' in order to recognize the -symbol syntax used for ELF (SVR4 PIC) position-independent-code (*note -crispic::). This will also affect expansion of instructions. The -expansion with `--pic' will use PC-relative rather than (slightly -faster) absolute addresses in those expansions. This option is only -valid when generating ELF format object files. - - The option `--march=ARCHITECTURE' specifies the recognized -instruction set and recognized register names. It also controls the -architecture type of the object file. Valid values for ARCHITECTURE -are: -`v0_v10' - All instructions and register names for any architecture variant - in the set v0...v10 are recognized. This is the default if the - target is configured as cris-*. - -`v10' - Only instructions and register names for CRIS v10 (as found in - ETRAX 100 LX) are recognized. This is the default if the target - is configured as crisv10-*. - -`v32' - Only instructions and register names for CRIS v32 (code name - Guinness) are recognized. This is the default if the target is - configured as crisv32-*. This value implies `--no-mul-bug-abort'. - (A subsequent `--mul-bug-abort' will turn it back on.) - -`common_v10_v32' - Only instructions with register names and addressing modes with - opcodes common to the v10 and v32 are recognized. - - When `-N' is specified, `as' will emit a warning when a 16-bit -branch instruction is expanded into a 32-bit multiple-instruction -construct (*note CRIS-Expand::). - - Some versions of the CRIS v10, for example in the Etrax 100 LX, -contain a bug that causes destabilizing memory accesses when a multiply -instruction is executed with certain values in the first operand just -before a cache-miss. When the `--mul-bug-abort' command line option is -active (the default value), `as' will refuse to assemble a file -containing a multiply instruction at a dangerous offset, one that could -be the last on a cache-line, or is in a section with insufficient -alignment. This placement checking does not catch any case where the -multiply instruction is dangerously placed because it is located in a -delay-slot. The `--mul-bug-abort' command line option turns off the -checking. - - -File: as.info, Node: CRIS-Expand, Next: CRIS-Symbols, Prev: CRIS-Opts, Up: CRIS-Dependent - -9.8.2 Instruction expansion ---------------------------- - -`as' will silently choose an instruction that fits the operand size for -`[register+constant]' operands. For example, the offset `127' in -`move.d [r3+127],r4' fits in an instruction using a signed-byte offset. -Similarly, `move.d [r2+32767],r1' will generate an instruction using a -16-bit offset. For symbolic expressions and constants that do not fit -in 16 bits including the sign bit, a 32-bit offset is generated. - - For branches, `as' will expand from a 16-bit branch instruction into -a sequence of instructions that can reach a full 32-bit address. Since -this does not correspond to a single instruction, such expansions can -optionally be warned about. *Note CRIS-Opts::. - - If the operand is found to fit the range, a `lapc' mnemonic will -translate to a `lapcq' instruction. Use `lapc.d' to force the 32-bit -`lapc' instruction. - - Similarly, the `addo' mnemonic will translate to the shortest -fitting instruction of `addoq', `addo.w' and `addo.d', when used with a -operand that is a constant known at assembly time. - - -File: as.info, Node: CRIS-Symbols, Next: CRIS-Syntax, Prev: CRIS-Expand, Up: CRIS-Dependent - -9.8.3 Symbols -------------- - -Some symbols are defined by the assembler. They're intended to be used -in conditional assembly, for example: - .if ..asm.arch.cris.v32 - CODE FOR CRIS V32 - .elseif ..asm.arch.cris.common_v10_v32 - CODE COMMON TO CRIS V32 AND CRIS V10 - .elseif ..asm.arch.cris.v10 | ..asm.arch.cris.any_v0_v10 - CODE FOR V10 - .else - .error "Code needs to be added here." - .endif - - These symbols are defined in the assembler, reflecting command-line -options, either when specified or the default. They are always -defined, to 0 or 1. -`..asm.arch.cris.any_v0_v10' - This symbol is non-zero when `--march=v0_v10' is specified or the - default. - -`..asm.arch.cris.common_v10_v32' - Set according to the option `--march=common_v10_v32'. - -`..asm.arch.cris.v10' - Reflects the option `--march=v10'. - -`..asm.arch.cris.v32' - Corresponds to `--march=v10'. - - Speaking of symbols, when a symbol is used in code, it can have a -suffix modifying its value for use in position-independent code. *Note -CRIS-Pic::. - - -File: as.info, Node: CRIS-Syntax, Prev: CRIS-Symbols, Up: CRIS-Dependent - -9.8.4 Syntax ------------- - -There are different aspects of the CRIS assembly syntax. - -* Menu: - -* CRIS-Chars:: Special Characters -* CRIS-Pic:: Position-Independent Code Symbols -* CRIS-Regs:: Register Names -* CRIS-Pseudos:: Assembler Directives - - -File: as.info, Node: CRIS-Chars, Next: CRIS-Pic, Up: CRIS-Syntax - -9.8.4.1 Special Characters -.......................... - -The character `#' is a line comment character. It starts a comment if -and only if it is placed at the beginning of a line. - - A `;' character starts a comment anywhere on the line, causing all -characters up to the end of the line to be ignored. - - A `@' character is handled as a line separator equivalent to a -logical new-line character (except in a comment), so separate -instructions can be specified on a single line. - - -File: as.info, Node: CRIS-Pic, Next: CRIS-Regs, Prev: CRIS-Chars, Up: CRIS-Syntax - -9.8.4.2 Symbols in position-independent code -............................................ - -When generating position-independent code (SVR4 PIC) for use in -cris-axis-linux-gnu or crisv32-axis-linux-gnu shared libraries, symbol -suffixes are used to specify what kind of run-time symbol lookup will -be used, expressed in the object as different _relocation types_. -Usually, all absolute symbol values must be located in a table, the -_global offset table_, leaving the code position-independent; -independent of values of global symbols and independent of the address -of the code. The suffix modifies the value of the symbol, into for -example an index into the global offset table where the real symbol -value is entered, or a PC-relative value, or a value relative to the -start of the global offset table. All symbol suffixes start with the -character `:' (omitted in the list below). Every symbol use in code or -a read-only section must therefore have a PIC suffix to enable a useful -shared library to be created. Usually, these constructs must not be -used with an additive constant offset as is usually allowed, i.e. no 4 -as in `symbol + 4' is allowed. This restriction is checked at -link-time, not at assembly-time. - -`GOT' - Attaching this suffix to a symbol in an instruction causes the - symbol to be entered into the global offset table. The value is a - 32-bit index for that symbol into the global offset table. The - name of the corresponding relocation is `R_CRIS_32_GOT'. Example: - `move.d [$r0+extsym:GOT],$r9' - -`GOT16' - Same as for `GOT', but the value is a 16-bit index into the global - offset table. The corresponding relocation is `R_CRIS_16_GOT'. - Example: `move.d [$r0+asymbol:GOT16],$r10' - -`PLT' - This suffix is used for function symbols. It causes a _procedure - linkage table_, an array of code stubs, to be created at the time - the shared object is created or linked against, together with a - global offset table entry. The value is a pc-relative offset to - the corresponding stub code in the procedure linkage table. This - arrangement causes the run-time symbol resolver to be called to - look up and set the value of the symbol the first time the - function is called (at latest; depending environment variables). - It is only safe to leave the symbol unresolved this way if all - references are function calls. The name of the relocation is - `R_CRIS_32_PLT_PCREL'. Example: `add.d fnname:PLT,$pc' - -`PLTG' - Like PLT, but the value is relative to the beginning of the global - offset table. The relocation is `R_CRIS_32_PLT_GOTREL'. Example: - `move.d fnname:PLTG,$r3' - -`GOTPLT' - Similar to `PLT', but the value of the symbol is a 32-bit index - into the global offset table. This is somewhat of a mix between - the effect of the `GOT' and the `PLT' suffix; the difference to - `GOT' is that there will be a procedure linkage table entry - created, and that the symbol is assumed to be a function entry and - will be resolved by the run-time resolver as with `PLT'. The - relocation is `R_CRIS_32_GOTPLT'. Example: `jsr - [$r0+fnname:GOTPLT]' - -`GOTPLT16' - A variant of `GOTPLT' giving a 16-bit value. Its relocation name - is `R_CRIS_16_GOTPLT'. Example: `jsr [$r0+fnname:GOTPLT16]' - -`GOTOFF' - This suffix must only be attached to a local symbol, but may be - used in an expression adding an offset. The value is the address - of the symbol relative to the start of the global offset table. - The relocation name is `R_CRIS_32_GOTREL'. Example: `move.d - [$r0+localsym:GOTOFF],r3' - - -File: as.info, Node: CRIS-Regs, Next: CRIS-Pseudos, Prev: CRIS-Pic, Up: CRIS-Syntax - -9.8.4.3 Register names -...................... - -A `$' character may always prefix a general or special register name in -an instruction operand but is mandatory when the option -`--no-underscore' is specified or when the `.syntax register_prefix' -directive is in effect (*note crisnous::). Register names are -case-insensitive. - - -File: as.info, Node: CRIS-Pseudos, Prev: CRIS-Regs, Up: CRIS-Syntax - -9.8.4.4 Assembler Directives -............................ - -There are a few CRIS-specific pseudo-directives in addition to the -generic ones. *Note Pseudo Ops::. Constants emitted by -pseudo-directives are in little-endian order for CRIS. There is no -support for floating-point-specific directives for CRIS. - -`.dword EXPRESSIONS' - The `.dword' directive is a synonym for `.int', expecting zero or - more EXPRESSIONS, separated by commas. For each expression, a - 32-bit little-endian constant is emitted. - -`.syntax ARGUMENT' - The `.syntax' directive takes as ARGUMENT one of the following - case-sensitive choices. - - `no_register_prefix' - The `.syntax no_register_prefix' directive makes a `$' - character prefix on all registers optional. It overrides a - previous setting, including the corresponding effect of the - option `--no-underscore'. If this directive is used when - ordinary symbols do not have a `_' character prefix, care - must be taken to avoid ambiguities whether an operand is a - register or a symbol; using symbols with names the same as - general or special registers then invoke undefined behavior. - - `register_prefix' - This directive makes a `$' character prefix on all registers - mandatory. It overrides a previous setting, including the - corresponding effect of the option `--underscore'. - - `leading_underscore' - This is an assertion directive, emitting an error if the - `--no-underscore' option is in effect. - - `no_leading_underscore' - This is the opposite of the `.syntax leading_underscore' - directive and emits an error if the option `--underscore' is - in effect. - -`.arch ARGUMENT' - This is an assertion directive, giving an error if the specified - ARGUMENT is not the same as the specified or default value for the - `--march=ARCHITECTURE' option (*note march-option::). - - - -File: as.info, Node: D10V-Dependent, Next: D30V-Dependent, Prev: CRIS-Dependent, Up: Machine Dependencies - -9.9 D10V Dependent Features -=========================== - -* Menu: - -* D10V-Opts:: D10V Options -* D10V-Syntax:: Syntax -* D10V-Float:: Floating Point -* D10V-Opcodes:: Opcodes - - -File: as.info, Node: D10V-Opts, Next: D10V-Syntax, Up: D10V-Dependent - -9.9.1 D10V Options ------------------- - -The Mitsubishi D10V version of `as' has a few machine dependent options. - -`-O' - The D10V can often execute two sub-instructions in parallel. When - this option is used, `as' will attempt to optimize its output by - detecting when instructions can be executed in parallel. - -`--nowarnswap' - To optimize execution performance, `as' will sometimes swap the - order of instructions. Normally this generates a warning. When - this option is used, no warning will be generated when - instructions are swapped. - -`--gstabs-packing' -`--no-gstabs-packing' - `as' packs adjacent short instructions into a single packed - instruction. `--no-gstabs-packing' turns instruction packing off if - `--gstabs' is specified as well; `--gstabs-packing' (the default) - turns instruction packing on even when `--gstabs' is specified. - - -File: as.info, Node: D10V-Syntax, Next: D10V-Float, Prev: D10V-Opts, Up: D10V-Dependent - -9.9.2 Syntax ------------- - -The D10V syntax is based on the syntax in Mitsubishi's D10V -architecture manual. The differences are detailed below. - -* Menu: - -* D10V-Size:: Size Modifiers -* D10V-Subs:: Sub-Instructions -* D10V-Chars:: Special Characters -* D10V-Regs:: Register Names -* D10V-Addressing:: Addressing Modes -* D10V-Word:: @WORD Modifier - - -File: as.info, Node: D10V-Size, Next: D10V-Subs, Up: D10V-Syntax - -9.9.2.1 Size Modifiers -...................... - -The D10V version of `as' uses the instruction names in the D10V -Architecture Manual. However, the names in the manual are sometimes -ambiguous. There are instruction names that can assemble to a short or -long form opcode. How does the assembler pick the correct form? `as' -will always pick the smallest form if it can. When dealing with a -symbol that is not defined yet when a line is being assembled, it will -always use the long form. If you need to force the assembler to use -either the short or long form of the instruction, you can append either -`.s' (short) or `.l' (long) to it. For example, if you are writing an -assembly program and you want to do a branch to a symbol that is -defined later in your program, you can write `bra.s foo'. Objdump -and GDB will always append `.s' or `.l' to instructions which have both -short and long forms. - - -File: as.info, Node: D10V-Subs, Next: D10V-Chars, Prev: D10V-Size, Up: D10V-Syntax - -9.9.2.2 Sub-Instructions -........................ - -The D10V assembler takes as input a series of instructions, either -one-per-line, or in the special two-per-line format described in the -next section. Some of these instructions will be short-form or -sub-instructions. These sub-instructions can be packed into a single -instruction. The assembler will do this automatically. It will also -detect when it should not pack instructions. For example, when a label -is defined, the next instruction will never be packaged with the -previous one. Whenever a branch and link instruction is called, it -will not be packaged with the next instruction so the return address -will be valid. Nops are automatically inserted when necessary. - - If you do not want the assembler automatically making these -decisions, you can control the packaging and execution type (parallel -or sequential) with the special execution symbols described in the next -section. - - -File: as.info, Node: D10V-Chars, Next: D10V-Regs, Prev: D10V-Subs, Up: D10V-Syntax - -9.9.2.3 Special Characters -.......................... - -A semicolon (`;') can be used anywhere on a line to start a comment -that extends to the end of the line. - - If a `#' appears as the first character of a line, the whole line is -treated as a comment, but in this case the line could also be a logical -line number directive (*note Comments::) or a preprocessor control -command (*note Preprocessing::). - - Sub-instructions may be executed in order, in reverse-order, or in -parallel. Instructions listed in the standard one-per-line format will -be executed sequentially. To specify the executing order, use the -following symbols: -`->' - Sequential with instruction on the left first. - -`<-' - Sequential with instruction on the right first. - -`||' - Parallel - The D10V syntax allows either one instruction per line, one -instruction per line with the execution symbol, or two instructions per -line. For example -`abs a1 -> abs r0' - Execute these sequentially. The instruction on the right is in - the right container and is executed second. - -`abs r0 <- abs a1' - Execute these reverse-sequentially. The instruction on the right - is in the right container, and is executed first. - -`ld2w r2,@r8+ || mac a0,r0,r7' - Execute these in parallel. - -`ld2w r2,@r8+ ||' -`mac a0,r0,r7' - Two-line format. Execute these in parallel. - -`ld2w r2,@r8+' -`mac a0,r0,r7' - Two-line format. Execute these sequentially. Assembler will put - them in the proper containers. - -`ld2w r2,@r8+ ->' -`mac a0,r0,r7' - Two-line format. Execute these sequentially. Same as above but - second instruction will always go into right container. - Since `$' has no special meaning, you may use it in symbol names. - - -File: as.info, Node: D10V-Regs, Next: D10V-Addressing, Prev: D10V-Chars, Up: D10V-Syntax - -9.9.2.4 Register Names -...................... - -You can use the predefined symbols `r0' through `r15' to refer to the -D10V registers. You can also use `sp' as an alias for `r15'. The -accumulators are `a0' and `a1'. There are special register-pair names -that may optionally be used in opcodes that require even-numbered -registers. Register names are not case sensitive. - - Register Pairs -`r0-r1' - -`r2-r3' - -`r4-r5' - -`r6-r7' - -`r8-r9' - -`r10-r11' - -`r12-r13' - -`r14-r15' - - The D10V also has predefined symbols for these control registers and -status bits: -`psw' - Processor Status Word - -`bpsw' - Backup Processor Status Word - -`pc' - Program Counter - -`bpc' - Backup Program Counter - -`rpt_c' - Repeat Count - -`rpt_s' - Repeat Start address - -`rpt_e' - Repeat End address - -`mod_s' - Modulo Start address - -`mod_e' - Modulo End address - -`iba' - Instruction Break Address - -`f0' - Flag 0 - -`f1' - Flag 1 - -`c' - Carry flag - - -File: as.info, Node: D10V-Addressing, Next: D10V-Word, Prev: D10V-Regs, Up: D10V-Syntax - -9.9.2.5 Addressing Modes -........................ - -`as' understands the following addressing modes for the D10V. `RN' in -the following refers to any of the numbered registers, but _not_ the -control registers. -`RN' - Register direct - -`@RN' - Register indirect - -`@RN+' - Register indirect with post-increment - -`@RN-' - Register indirect with post-decrement - -`@-SP' - Register indirect with pre-decrement - -`@(DISP, RN)' - Register indirect with displacement - -`ADDR' - PC relative address (for branch or rep). - -`#IMM' - Immediate data (the `#' is optional and ignored) - - -File: as.info, Node: D10V-Word, Prev: D10V-Addressing, Up: D10V-Syntax - -9.9.2.6 @WORD Modifier -...................... - -Any symbol followed by `@word' will be replaced by the symbol's value -shifted right by 2. This is used in situations such as loading a -register with the address of a function (or any other code fragment). -For example, if you want to load a register with the location of the -function `main' then jump to that function, you could do it as follows: - ldi r2, main@word - jmp r2 - - -File: as.info, Node: D10V-Float, Next: D10V-Opcodes, Prev: D10V-Syntax, Up: D10V-Dependent - -9.9.3 Floating Point --------------------- - -The D10V has no hardware floating point, but the `.float' and `.double' -directives generates IEEE floating-point numbers for compatibility with -other development tools. - - -File: as.info, Node: D10V-Opcodes, Prev: D10V-Float, Up: D10V-Dependent - -9.9.4 Opcodes -------------- - -For detailed information on the D10V machine instruction set, see `D10V -Architecture: A VLIW Microprocessor for Multimedia Applications' -(Mitsubishi Electric Corp.). `as' implements all the standard D10V -opcodes. The only changes are those described in the section on size -modifiers - - -File: as.info, Node: D30V-Dependent, Next: Epiphany-Dependent, Prev: D10V-Dependent, Up: Machine Dependencies - -9.10 D30V Dependent Features -============================ - -* Menu: - -* D30V-Opts:: D30V Options -* D30V-Syntax:: Syntax -* D30V-Float:: Floating Point -* D30V-Opcodes:: Opcodes - - -File: as.info, Node: D30V-Opts, Next: D30V-Syntax, Up: D30V-Dependent - -9.10.1 D30V Options -------------------- - -The Mitsubishi D30V version of `as' has a few machine dependent options. - -`-O' - The D30V can often execute two sub-instructions in parallel. When - this option is used, `as' will attempt to optimize its output by - detecting when instructions can be executed in parallel. - -`-n' - When this option is used, `as' will issue a warning every time it - adds a nop instruction. - -`-N' - When this option is used, `as' will issue a warning if it needs to - insert a nop after a 32-bit multiply before a load or 16-bit - multiply instruction. - - -File: as.info, Node: D30V-Syntax, Next: D30V-Float, Prev: D30V-Opts, Up: D30V-Dependent - -9.10.2 Syntax -------------- - -The D30V syntax is based on the syntax in Mitsubishi's D30V -architecture manual. The differences are detailed below. - -* Menu: - -* D30V-Size:: Size Modifiers -* D30V-Subs:: Sub-Instructions -* D30V-Chars:: Special Characters -* D30V-Guarded:: Guarded Execution -* D30V-Regs:: Register Names -* D30V-Addressing:: Addressing Modes - - -File: as.info, Node: D30V-Size, Next: D30V-Subs, Up: D30V-Syntax - -9.10.2.1 Size Modifiers -....................... - -The D30V version of `as' uses the instruction names in the D30V -Architecture Manual. However, the names in the manual are sometimes -ambiguous. There are instruction names that can assemble to a short or -long form opcode. How does the assembler pick the correct form? `as' -will always pick the smallest form if it can. When dealing with a -symbol that is not defined yet when a line is being assembled, it will -always use the long form. If you need to force the assembler to use -either the short or long form of the instruction, you can append either -`.s' (short) or `.l' (long) to it. For example, if you are writing an -assembly program and you want to do a branch to a symbol that is -defined later in your program, you can write `bra.s foo'. Objdump and -GDB will always append `.s' or `.l' to instructions which have both -short and long forms. - - -File: as.info, Node: D30V-Subs, Next: D30V-Chars, Prev: D30V-Size, Up: D30V-Syntax - -9.10.2.2 Sub-Instructions -......................... - -The D30V assembler takes as input a series of instructions, either -one-per-line, or in the special two-per-line format described in the -next section. Some of these instructions will be short-form or -sub-instructions. These sub-instructions can be packed into a single -instruction. The assembler will do this automatically. It will also -detect when it should not pack instructions. For example, when a label -is defined, the next instruction will never be packaged with the -previous one. Whenever a branch and link instruction is called, it -will not be packaged with the next instruction so the return address -will be valid. Nops are automatically inserted when necessary. - - If you do not want the assembler automatically making these -decisions, you can control the packaging and execution type (parallel -or sequential) with the special execution symbols described in the next -section. - - -File: as.info, Node: D30V-Chars, Next: D30V-Guarded, Prev: D30V-Subs, Up: D30V-Syntax - -9.10.2.3 Special Characters -........................... - -A semicolon (`;') can be used anywhere on a line to start a comment -that extends to the end of the line. - - If a `#' appears as the first character of a line, the whole line is -treated as a comment, but in this case the line could also be a logical -line number directive (*note Comments::) or a preprocessor control -command (*note Preprocessing::). - - Sub-instructions may be executed in order, in reverse-order, or in -parallel. Instructions listed in the standard one-per-line format will -be executed sequentially unless you use the `-O' option. - - To specify the executing order, use the following symbols: -`->' - Sequential with instruction on the left first. - -`<-' - Sequential with instruction on the right first. - -`||' - Parallel - - The D30V syntax allows either one instruction per line, one -instruction per line with the execution symbol, or two instructions per -line. For example -`abs r2,r3 -> abs r4,r5' - Execute these sequentially. The instruction on the right is in - the right container and is executed second. - -`abs r2,r3 <- abs r4,r5' - Execute these reverse-sequentially. The instruction on the right - is in the right container, and is executed first. - -`abs r2,r3 || abs r4,r5' - Execute these in parallel. - -`ldw r2,@(r3,r4) ||' -`mulx r6,r8,r9' - Two-line format. Execute these in parallel. - -`mulx a0,r8,r9' -`stw r2,@(r3,r4)' - Two-line format. Execute these sequentially unless `-O' option is - used. If the `-O' option is used, the assembler will determine if - the instructions could be done in parallel (the above two - instructions can be done in parallel), and if so, emit them as - parallel instructions. The assembler will put them in the proper - containers. In the above example, the assembler will put the - `stw' instruction in left container and the `mulx' instruction in - the right container. - -`stw r2,@(r3,r4) ->' -`mulx a0,r8,r9' - Two-line format. Execute the `stw' instruction followed by the - `mulx' instruction sequentially. The first instruction goes in the - left container and the second instruction goes into right - container. The assembler will give an error if the machine - ordering constraints are violated. - -`stw r2,@(r3,r4) <-' -`mulx a0,r8,r9' - Same as previous example, except that the `mulx' instruction is - executed before the `stw' instruction. - - Since `$' has no special meaning, you may use it in symbol names. - - -File: as.info, Node: D30V-Guarded, Next: D30V-Regs, Prev: D30V-Chars, Up: D30V-Syntax - -9.10.2.4 Guarded Execution -.......................... - -`as' supports the full range of guarded execution directives for each -instruction. Just append the directive after the instruction proper. -The directives are: - -`/tx' - Execute the instruction if flag f0 is true. - -`/fx' - Execute the instruction if flag f0 is false. - -`/xt' - Execute the instruction if flag f1 is true. - -`/xf' - Execute the instruction if flag f1 is false. - -`/tt' - Execute the instruction if both flags f0 and f1 are true. - -`/tf' - Execute the instruction if flag f0 is true and flag f1 is false. - - -File: as.info, Node: D30V-Regs, Next: D30V-Addressing, Prev: D30V-Guarded, Up: D30V-Syntax - -9.10.2.5 Register Names -....................... - -You can use the predefined symbols `r0' through `r63' to refer to the -D30V registers. You can also use `sp' as an alias for `r63' and `link' -as an alias for `r62'. The accumulators are `a0' and `a1'. - - The D30V also has predefined symbols for these control registers and -status bits: -`psw' - Processor Status Word - -`bpsw' - Backup Processor Status Word - -`pc' - Program Counter - -`bpc' - Backup Program Counter - -`rpt_c' - Repeat Count - -`rpt_s' - Repeat Start address - -`rpt_e' - Repeat End address - -`mod_s' - Modulo Start address - -`mod_e' - Modulo End address - -`iba' - Instruction Break Address - -`f0' - Flag 0 - -`f1' - Flag 1 - -`f2' - Flag 2 - -`f3' - Flag 3 - -`f4' - Flag 4 - -`f5' - Flag 5 - -`f6' - Flag 6 - -`f7' - Flag 7 - -`s' - Same as flag 4 (saturation flag) - -`v' - Same as flag 5 (overflow flag) - -`va' - Same as flag 6 (sticky overflow flag) - -`c' - Same as flag 7 (carry/borrow flag) - -`b' - Same as flag 7 (carry/borrow flag) - - -File: as.info, Node: D30V-Addressing, Prev: D30V-Regs, Up: D30V-Syntax - -9.10.2.6 Addressing Modes -......................... - -`as' understands the following addressing modes for the D30V. `RN' in -the following refers to any of the numbered registers, but _not_ the -control registers. -`RN' - Register direct - -`@RN' - Register indirect - -`@RN+' - Register indirect with post-increment - -`@RN-' - Register indirect with post-decrement - -`@-SP' - Register indirect with pre-decrement - -`@(DISP, RN)' - Register indirect with displacement - -`ADDR' - PC relative address (for branch or rep). - -`#IMM' - Immediate data (the `#' is optional and ignored) - - -File: as.info, Node: D30V-Float, Next: D30V-Opcodes, Prev: D30V-Syntax, Up: D30V-Dependent - -9.10.3 Floating Point ---------------------- - -The D30V has no hardware floating point, but the `.float' and `.double' -directives generates IEEE floating-point numbers for compatibility with -other development tools. - - -File: as.info, Node: D30V-Opcodes, Prev: D30V-Float, Up: D30V-Dependent - -9.10.4 Opcodes --------------- - -For detailed information on the D30V machine instruction set, see `D30V -Architecture: A VLIW Microprocessor for Multimedia Applications' -(Mitsubishi Electric Corp.). `as' implements all the standard D30V -opcodes. The only changes are those described in the section on size -modifiers - - -File: as.info, Node: Epiphany-Dependent, Next: H8/300-Dependent, Prev: D30V-Dependent, Up: Machine Dependencies - -9.11 Epiphany Dependent Features -================================ - -* Menu: - -* Epiphany Options:: Options -* Epiphany Syntax:: Epiphany Syntax - - -File: as.info, Node: Epiphany Options, Next: Epiphany Syntax, Up: Epiphany-Dependent - -9.11.1 Options --------------- - -`as' has two additional command-line options for the Epiphany -architecture. - -`-mepiphany' - Specifies that the both 32 and 16 bit instructions are allowed. - This is the default behavior. - -`-mepiphany16' - Restricts the permitted instructions to just the 16 bit set. - - -File: as.info, Node: Epiphany Syntax, Prev: Epiphany Options, Up: Epiphany-Dependent - -9.11.2 Epiphany Syntax ----------------------- - -* Menu: - -* Epiphany-Chars:: Special Characters - - -File: as.info, Node: Epiphany-Chars, Up: Epiphany Syntax - -9.11.2.1 Special Characters -........................... - -The presence of a `;' on a line indicates the start of a comment that -extends to the end of the current line. - - If a `#' appears as the first character of a line then the whole -line is treated as a comment, but in this case the line could also be a -logical line number directive (*note Comments::) or a preprocessor -control command (*note Preprocessing::). - - The ``' character can be used to separate statements on the same -line. - - -File: as.info, Node: H8/300-Dependent, Next: HPPA-Dependent, Prev: Epiphany-Dependent, Up: Machine Dependencies - -9.12 H8/300 Dependent Features -============================== - -* Menu: - -* H8/300 Options:: Options -* H8/300 Syntax:: Syntax -* H8/300 Floating Point:: Floating Point -* H8/300 Directives:: H8/300 Machine Directives -* H8/300 Opcodes:: Opcodes - - -File: as.info, Node: H8/300 Options, Next: H8/300 Syntax, Up: H8/300-Dependent - -9.12.1 Options --------------- - -The Renesas H8/300 version of `as' has one machine-dependent option: - -`-h-tick-hex' - Support H'00 style hex constants in addition to 0x00 style. - - - -File: as.info, Node: H8/300 Syntax, Next: H8/300 Floating Point, Prev: H8/300 Options, Up: H8/300-Dependent - -9.12.2 Syntax -------------- - -* Menu: - -* H8/300-Chars:: Special Characters -* H8/300-Regs:: Register Names -* H8/300-Addressing:: Addressing Modes - - -File: as.info, Node: H8/300-Chars, Next: H8/300-Regs, Up: H8/300 Syntax - -9.12.2.1 Special Characters -........................... - -`;' is the line comment character. - - `$' can be used instead of a newline to separate statements. -Therefore _you may not use `$' in symbol names_ on the H8/300. - - -File: as.info, Node: H8/300-Regs, Next: H8/300-Addressing, Prev: H8/300-Chars, Up: H8/300 Syntax - -9.12.2.2 Register Names -....................... - -You can use predefined symbols of the form `rNh' and `rNl' to refer to -the H8/300 registers as sixteen 8-bit general-purpose registers. N is -a digit from `0' to `7'); for instance, both `r0h' and `r7l' are valid -register names. - - You can also use the eight predefined symbols `rN' to refer to the -H8/300 registers as 16-bit registers (you must use this form for -addressing). - - On the H8/300H, you can also use the eight predefined symbols `erN' -(`er0' ... `er7') to refer to the 32-bit general purpose registers. - - The two control registers are called `pc' (program counter; a 16-bit -register, except on the H8/300H where it is 24 bits) and `ccr' -(condition code register; an 8-bit register). `r7' is used as the -stack pointer, and can also be called `sp'. - - -File: as.info, Node: H8/300-Addressing, Prev: H8/300-Regs, Up: H8/300 Syntax - -9.12.2.3 Addressing Modes -......................... - -as understands the following addressing modes for the H8/300: -`rN' - Register direct - -`@rN' - Register indirect - -`@(D, rN)' -`@(D:16, rN)' -`@(D:24, rN)' - Register indirect: 16-bit or 24-bit displacement D from register - N. (24-bit displacements are only meaningful on the H8/300H.) - -`@rN+' - Register indirect with post-increment - -`@-rN' - Register indirect with pre-decrement - -``@'AA' -``@'AA:8' -``@'AA:16' -``@'AA:24' - Absolute address `aa'. (The address size `:24' only makes sense - on the H8/300H.) - -`#XX' -`#XX:8' -`#XX:16' -`#XX:32' - Immediate data XX. You may specify the `:8', `:16', or `:32' for - clarity, if you wish; but `as' neither requires this nor uses - it--the data size required is taken from context. - -``@'`@'AA' -``@'`@'AA:8' - Memory indirect. You may specify the `:8' for clarity, if you - wish; but `as' neither requires this nor uses it. - - -File: as.info, Node: H8/300 Floating Point, Next: H8/300 Directives, Prev: H8/300 Syntax, Up: H8/300-Dependent - -9.12.3 Floating Point ---------------------- - -The H8/300 family has no hardware floating point, but the `.float' -directive generates IEEE floating-point numbers for compatibility with -other development tools. - - -File: as.info, Node: H8/300 Directives, Next: H8/300 Opcodes, Prev: H8/300 Floating Point, Up: H8/300-Dependent - -9.12.4 H8/300 Machine Directives --------------------------------- - -`as' has the following machine-dependent directives for the H8/300: - -`.h8300h' - Recognize and emit additional instructions for the H8/300H - variant, and also make `.int' emit 32-bit numbers rather than the - usual (16-bit) for the H8/300 family. - -`.h8300s' - Recognize and emit additional instructions for the H8S variant, and - also make `.int' emit 32-bit numbers rather than the usual (16-bit) - for the H8/300 family. - -`.h8300hn' - Recognize and emit additional instructions for the H8/300H variant - in normal mode, and also make `.int' emit 32-bit numbers rather - than the usual (16-bit) for the H8/300 family. - -`.h8300sn' - Recognize and emit additional instructions for the H8S variant in - normal mode, and also make `.int' emit 32-bit numbers rather than - the usual (16-bit) for the H8/300 family. - - On the H8/300 family (including the H8/300H) `.word' directives -generate 16-bit numbers. - - -File: as.info, Node: H8/300 Opcodes, Prev: H8/300 Directives, Up: H8/300-Dependent - -9.12.5 Opcodes --------------- - -For detailed information on the H8/300 machine instruction set, see -`H8/300 Series Programming Manual'. For information specific to the -H8/300H, see `H8/300H Series Programming Manual' (Renesas). - - `as' implements all the standard H8/300 opcodes. No additional -pseudo-instructions are needed on this family. - - The following table summarizes the H8/300 opcodes, and their -arguments. Entries marked `*' are opcodes used only on the H8/300H. - - Legend: - Rs source register - Rd destination register - abs absolute address - imm immediate data - disp:N N-bit displacement from a register - pcrel:N N-bit displacement relative to program counter - - add.b #imm,rd * andc #imm,ccr - add.b rs,rd band #imm,rd - add.w rs,rd band #imm,@rd - * add.w #imm,rd band #imm,@abs:8 - * add.l rs,rd bra pcrel:8 - * add.l #imm,rd * bra pcrel:16 - adds #imm,rd bt pcrel:8 - addx #imm,rd * bt pcrel:16 - addx rs,rd brn pcrel:8 - and.b #imm,rd * brn pcrel:16 - and.b rs,rd bf pcrel:8 - * and.w rs,rd * bf pcrel:16 - * and.w #imm,rd bhi pcrel:8 - * and.l #imm,rd * bhi pcrel:16 - * and.l rs,rd bls pcrel:8 - - * bls pcrel:16 bld #imm,rd - bcc pcrel:8 bld #imm,@rd - * bcc pcrel:16 bld #imm,@abs:8 - bhs pcrel:8 bnot #imm,rd - * bhs pcrel:16 bnot #imm,@rd - bcs pcrel:8 bnot #imm,@abs:8 - * bcs pcrel:16 bnot rs,rd - blo pcrel:8 bnot rs,@rd - * blo pcrel:16 bnot rs,@abs:8 - bne pcrel:8 bor #imm,rd - * bne pcrel:16 bor #imm,@rd - beq pcrel:8 bor #imm,@abs:8 - * beq pcrel:16 bset #imm,rd - bvc pcrel:8 bset #imm,@rd - * bvc pcrel:16 bset #imm,@abs:8 - bvs pcrel:8 bset rs,rd - * bvs pcrel:16 bset rs,@rd - bpl pcrel:8 bset rs,@abs:8 - * bpl pcrel:16 bsr pcrel:8 - bmi pcrel:8 bsr pcrel:16 - * bmi pcrel:16 bst #imm,rd - bge pcrel:8 bst #imm,@rd - * bge pcrel:16 bst #imm,@abs:8 - blt pcrel:8 btst #imm,rd - * blt pcrel:16 btst #imm,@rd - bgt pcrel:8 btst #imm,@abs:8 - * bgt pcrel:16 btst rs,rd - ble pcrel:8 btst rs,@rd - * ble pcrel:16 btst rs,@abs:8 - bclr #imm,rd bxor #imm,rd - bclr #imm,@rd bxor #imm,@rd - bclr #imm,@abs:8 bxor #imm,@abs:8 - bclr rs,rd cmp.b #imm,rd - bclr rs,@rd cmp.b rs,rd - bclr rs,@abs:8 cmp.w rs,rd - biand #imm,rd cmp.w rs,rd - biand #imm,@rd * cmp.w #imm,rd - biand #imm,@abs:8 * cmp.l #imm,rd - bild #imm,rd * cmp.l rs,rd - bild #imm,@rd daa rs - bild #imm,@abs:8 das rs - bior #imm,rd dec.b rs - bior #imm,@rd * dec.w #imm,rd - bior #imm,@abs:8 * dec.l #imm,rd - bist #imm,rd divxu.b rs,rd - bist #imm,@rd * divxu.w rs,rd - bist #imm,@abs:8 * divxs.b rs,rd - bixor #imm,rd * divxs.w rs,rd - bixor #imm,@rd eepmov - bixor #imm,@abs:8 * eepmovw - - * exts.w rd mov.w rs,@abs:16 - * exts.l rd * mov.l #imm,rd - * extu.w rd * mov.l rs,rd - * extu.l rd * mov.l @rs,rd - inc rs * mov.l @(disp:16,rs),rd - * inc.w #imm,rd * mov.l @(disp:24,rs),rd - * inc.l #imm,rd * mov.l @rs+,rd - jmp @rs * mov.l @abs:16,rd - jmp abs * mov.l @abs:24,rd - jmp @@abs:8 * mov.l rs,@rd - jsr @rs * mov.l rs,@(disp:16,rd) - jsr abs * mov.l rs,@(disp:24,rd) - jsr @@abs:8 * mov.l rs,@-rd - ldc #imm,ccr * mov.l rs,@abs:16 - ldc rs,ccr * mov.l rs,@abs:24 - * ldc @abs:16,ccr movfpe @abs:16,rd - * ldc @abs:24,ccr movtpe rs,@abs:16 - * ldc @(disp:16,rs),ccr mulxu.b rs,rd - * ldc @(disp:24,rs),ccr * mulxu.w rs,rd - * ldc @rs+,ccr * mulxs.b rs,rd - * ldc @rs,ccr * mulxs.w rs,rd - * mov.b @(disp:24,rs),rd neg.b rs - * mov.b rs,@(disp:24,rd) * neg.w rs - mov.b @abs:16,rd * neg.l rs - mov.b rs,rd nop - mov.b @abs:8,rd not.b rs - mov.b rs,@abs:8 * not.w rs - mov.b rs,rd * not.l rs - mov.b #imm,rd or.b #imm,rd - mov.b @rs,rd or.b rs,rd - mov.b @(disp:16,rs),rd * or.w #imm,rd - mov.b @rs+,rd * or.w rs,rd - mov.b @abs:8,rd * or.l #imm,rd - mov.b rs,@rd * or.l rs,rd - mov.b rs,@(disp:16,rd) orc #imm,ccr - mov.b rs,@-rd pop.w rs - mov.b rs,@abs:8 * pop.l rs - mov.w rs,@rd push.w rs - * mov.w @(disp:24,rs),rd * push.l rs - * mov.w rs,@(disp:24,rd) rotl.b rs - * mov.w @abs:24,rd * rotl.w rs - * mov.w rs,@abs:24 * rotl.l rs - mov.w rs,rd rotr.b rs - mov.w #imm,rd * rotr.w rs - mov.w @rs,rd * rotr.l rs - mov.w @(disp:16,rs),rd rotxl.b rs - mov.w @rs+,rd * rotxl.w rs - mov.w @abs:16,rd * rotxl.l rs - mov.w rs,@(disp:16,rd) rotxr.b rs - mov.w rs,@-rd * rotxr.w rs - - * rotxr.l rs * stc ccr,@(disp:24,rd) - bpt * stc ccr,@-rd - rte * stc ccr,@abs:16 - rts * stc ccr,@abs:24 - shal.b rs sub.b rs,rd - * shal.w rs sub.w rs,rd - * shal.l rs * sub.w #imm,rd - shar.b rs * sub.l rs,rd - * shar.w rs * sub.l #imm,rd - * shar.l rs subs #imm,rd - shll.b rs subx #imm,rd - * shll.w rs subx rs,rd - * shll.l rs * trapa #imm - shlr.b rs xor #imm,rd - * shlr.w rs xor rs,rd - * shlr.l rs * xor.w #imm,rd - sleep * xor.w rs,rd - stc ccr,rd * xor.l #imm,rd - * stc ccr,@rs * xor.l rs,rd - * stc ccr,@(disp:16,rd) xorc #imm,ccr - - Four H8/300 instructions (`add', `cmp', `mov', `sub') are defined -with variants using the suffixes `.b', `.w', and `.l' to specify the -size of a memory operand. `as' supports these suffixes, but does not -require them; since one of the operands is always a register, `as' can -deduce the correct size. - - For example, since `r0' refers to a 16-bit register, - mov r0,@foo -is equivalent to - mov.w r0,@foo - - If you use the size suffixes, `as' issues a warning when the suffix -and the register size do not match. - - -File: as.info, Node: HPPA-Dependent, Next: ESA/390-Dependent, Prev: H8/300-Dependent, Up: Machine Dependencies - -9.13 HPPA Dependent Features -============================ - -* Menu: - -* HPPA Notes:: Notes -* HPPA Options:: Options -* HPPA Syntax:: Syntax -* HPPA Floating Point:: Floating Point -* HPPA Directives:: HPPA Machine Directives -* HPPA Opcodes:: Opcodes - - -File: as.info, Node: HPPA Notes, Next: HPPA Options, Up: HPPA-Dependent - -9.13.1 Notes ------------- - -As a back end for GNU CC `as' has been throughly tested and should work -extremely well. We have tested it only minimally on hand written -assembly code and no one has tested it much on the assembly output from -the HP compilers. - - The format of the debugging sections has changed since the original -`as' port (version 1.3X) was released; therefore, you must rebuild all -HPPA objects and libraries with the new assembler so that you can debug -the final executable. - - The HPPA `as' port generates a small subset of the relocations -available in the SOM and ELF object file formats. Additional relocation -support will be added as it becomes necessary. - - -File: as.info, Node: HPPA Options, Next: HPPA Syntax, Prev: HPPA Notes, Up: HPPA-Dependent - -9.13.2 Options --------------- - -`as' has no machine-dependent command-line options for the HPPA. - - -File: as.info, Node: HPPA Syntax, Next: HPPA Floating Point, Prev: HPPA Options, Up: HPPA-Dependent - -9.13.3 Syntax -------------- - -The assembler syntax closely follows the HPPA instruction set reference -manual; assembler directives and general syntax closely follow the HPPA -assembly language reference manual, with a few noteworthy differences. - - First, a colon may immediately follow a label definition. This is -simply for compatibility with how most assembly language programmers -write code. - - Some obscure expression parsing problems may affect hand written -code which uses the `spop' instructions, or code which makes significant -use of the `!' line separator. - - `as' is much less forgiving about missing arguments and other -similar oversights than the HP assembler. `as' notifies you of missing -arguments as syntax errors; this is regarded as a feature, not a bug. - - Finally, `as' allows you to use an external symbol without -explicitly importing the symbol. _Warning:_ in the future this will be -an error for HPPA targets. - - Special characters for HPPA targets include: - - `;' is the line comment character. - - `!' can be used instead of a newline to separate statements. - - Since `$' has no special meaning, you may use it in symbol names. - - -File: as.info, Node: HPPA Floating Point, Next: HPPA Directives, Prev: HPPA Syntax, Up: HPPA-Dependent - -9.13.4 Floating Point ---------------------- - -The HPPA family uses IEEE floating-point numbers. - - -File: as.info, Node: HPPA Directives, Next: HPPA Opcodes, Prev: HPPA Floating Point, Up: HPPA-Dependent - -9.13.5 HPPA Assembler Directives --------------------------------- - -`as' for the HPPA supports many additional directives for compatibility -with the native assembler. This section describes them only briefly. -For detailed information on HPPA-specific assembler directives, see -`HP9000 Series 800 Assembly Language Reference Manual' (HP 92432-90001). - - `as' does _not_ support the following assembler directives described -in the HP manual: - - .endm .liston - .enter .locct - .leave .macro - .listoff - - Beyond those implemented for compatibility, `as' supports one -additional assembler directive for the HPPA: `.param'. It conveys -register argument locations for static functions. Its syntax closely -follows the `.export' directive. - - These are the additional directives in `as' for the HPPA: - -`.block N' -`.blockz N' - Reserve N bytes of storage, and initialize them to zero. - -`.call' - Mark the beginning of a procedure call. Only the special case - with _no arguments_ is allowed. - -`.callinfo [ PARAM=VALUE, ... ] [ FLAG, ... ]' - Specify a number of parameters and flags that define the - environment for a procedure. - - PARAM may be any of `frame' (frame size), `entry_gr' (end of - general register range), `entry_fr' (end of float register range), - `entry_sr' (end of space register range). - - The values for FLAG are `calls' or `caller' (proc has - subroutines), `no_calls' (proc does not call subroutines), - `save_rp' (preserve return pointer), `save_sp' (proc preserves - stack pointer), `no_unwind' (do not unwind this proc), `hpux_int' - (proc is interrupt routine). - -`.code' - Assemble into the standard section called `$TEXT$', subsection - `$CODE$'. - -`.copyright "STRING"' - In the SOM object format, insert STRING into the object code, - marked as a copyright string. - -`.copyright "STRING"' - In the ELF object format, insert STRING into the object code, - marked as a version string. - -`.enter' - Not yet supported; the assembler rejects programs containing this - directive. - -`.entry' - Mark the beginning of a procedure. - -`.exit' - Mark the end of a procedure. - -`.export NAME [ ,TYP ] [ ,PARAM=R ]' - Make a procedure NAME available to callers. TYP, if present, must - be one of `absolute', `code' (ELF only, not SOM), `data', `entry', - `data', `entry', `millicode', `plabel', `pri_prog', or `sec_prog'. - - PARAM, if present, provides either relocation information for the - procedure arguments and result, or a privilege level. PARAM may be - `argwN' (where N ranges from `0' to `3', and indicates one of four - one-word arguments); `rtnval' (the procedure's result); or - `priv_lev' (privilege level). For arguments or the result, R - specifies how to relocate, and must be one of `no' (not - relocatable), `gr' (argument is in general register), `fr' (in - floating point register), or `fu' (upper half of float register). - For `priv_lev', R is an integer. - -`.half N' - Define a two-byte integer constant N; synonym for the portable - `as' directive `.short'. - -`.import NAME [ ,TYP ]' - Converse of `.export'; make a procedure available to call. The - arguments use the same conventions as the first two arguments for - `.export'. - -`.label NAME' - Define NAME as a label for the current assembly location. - -`.leave' - Not yet supported; the assembler rejects programs containing this - directive. - -`.origin LC' - Advance location counter to LC. Synonym for the `as' portable - directive `.org'. - -`.param NAME [ ,TYP ] [ ,PARAM=R ]' - Similar to `.export', but used for static procedures. - -`.proc' - Use preceding the first statement of a procedure. - -`.procend' - Use following the last statement of a procedure. - -`LABEL .reg EXPR' - Synonym for `.equ'; define LABEL with the absolute expression EXPR - as its value. - -`.space SECNAME [ ,PARAMS ]' - Switch to section SECNAME, creating a new section by that name if - necessary. You may only use PARAMS when creating a new section, - not when switching to an existing one. SECNAME may identify a - section by number rather than by name. - - If specified, the list PARAMS declares attributes of the section, - identified by keywords. The keywords recognized are `spnum=EXP' - (identify this section by the number EXP, an absolute expression), - `sort=EXP' (order sections according to this sort key when linking; - EXP is an absolute expression), `unloadable' (section contains no - loadable data), `notdefined' (this section defined elsewhere), and - `private' (data in this section not available to other programs). - -`.spnum SECNAM' - Allocate four bytes of storage, and initialize them with the - section number of the section named SECNAM. (You can define the - section number with the HPPA `.space' directive.) - -`.string "STR"' - Copy the characters in the string STR to the object file. *Note - Strings: Strings, for information on escape sequences you can use - in `as' strings. - - _Warning!_ The HPPA version of `.string' differs from the usual - `as' definition: it does _not_ write a zero byte after copying STR. - -`.stringz "STR"' - Like `.string', but appends a zero byte after copying STR to object - file. - -`.subspa NAME [ ,PARAMS ]' -`.nsubspa NAME [ ,PARAMS ]' - Similar to `.space', but selects a subsection NAME within the - current section. You may only specify PARAMS when you create a - subsection (in the first instance of `.subspa' for this NAME). - - If specified, the list PARAMS declares attributes of the - subsection, identified by keywords. The keywords recognized are - `quad=EXPR' ("quadrant" for this subsection), `align=EXPR' - (alignment for beginning of this subsection; a power of two), - `access=EXPR' (value for "access rights" field), `sort=EXPR' - (sorting order for this subspace in link), `code_only' (subsection - contains only code), `unloadable' (subsection cannot be loaded - into memory), `comdat' (subsection is comdat), `common' - (subsection is common block), `dup_comm' (subsection may have - duplicate names), or `zero' (subsection is all zeros, do not write - in object file). - - `.nsubspa' always creates a new subspace with the given name, even - if one with the same name already exists. - - `comdat', `common' and `dup_comm' can be used to implement various - flavors of one-only support when using the SOM linker. The SOM - linker only supports specific combinations of these flags. The - details are not documented. A brief description is provided here. - - `comdat' provides a form of linkonce support. It is useful for - both code and data subspaces. A `comdat' subspace has a key symbol - marked by the `is_comdat' flag or `ST_COMDAT'. Only the first - subspace for any given key is selected. The key symbol becomes - universal in shared links. This is similar to the behavior of - `secondary_def' symbols. - - `common' provides Fortran named common support. It is only useful - for data subspaces. Symbols with the flag `is_common' retain this - flag in shared links. Referencing a `is_common' symbol in a shared - library from outside the library doesn't work. Thus, `is_common' - symbols must be output whenever they are needed. - - `common' and `dup_comm' together provide Cobol common support. - The subspaces in this case must all be the same length. - Otherwise, this support is similar to the Fortran common support. - - `dup_comm' by itself provides a type of one-only support for code. - Only the first `dup_comm' subspace is selected. There is a rather - complex algorithm to compare subspaces. Code symbols marked with - the `dup_common' flag are hidden. This support was intended for - "C++ duplicate inlines". - - A simplified technique is used to mark the flags of symbols based - on the flags of their subspace. A symbol with the scope - SS_UNIVERSAL and type ST_ENTRY, ST_CODE or ST_DATA is marked with - the corresponding settings of `comdat', `common' and `dup_comm' - from the subspace, respectively. This avoids having to introduce - additional directives to mark these symbols. The HP assembler - sets `is_common' from `common'. However, it doesn't set the - `dup_common' from `dup_comm'. It doesn't have `comdat' support. - -`.version "STR"' - Write STR as version identifier in object code. - - -File: as.info, Node: HPPA Opcodes, Prev: HPPA Directives, Up: HPPA-Dependent - -9.13.6 Opcodes --------------- - -For detailed information on the HPPA machine instruction set, see -`PA-RISC Architecture and Instruction Set Reference Manual' (HP -09740-90039). - - -File: as.info, Node: ESA/390-Dependent, Next: i386-Dependent, Prev: HPPA-Dependent, Up: Machine Dependencies - -9.14 ESA/390 Dependent Features -=============================== - -* Menu: - -* ESA/390 Notes:: Notes -* ESA/390 Options:: Options -* ESA/390 Syntax:: Syntax -* ESA/390 Floating Point:: Floating Point -* ESA/390 Directives:: ESA/390 Machine Directives -* ESA/390 Opcodes:: Opcodes - - -File: as.info, Node: ESA/390 Notes, Next: ESA/390 Options, Up: ESA/390-Dependent - -9.14.1 Notes ------------- - -The ESA/390 `as' port is currently intended to be a back-end for the -GNU CC compiler. It is not HLASM compatible, although it does support -a subset of some of the HLASM directives. The only supported binary -file format is ELF; none of the usual MVS/VM/OE/USS object file -formats, such as ESD or XSD, are supported. - - When used with the GNU CC compiler, the ESA/390 `as' will produce -correct, fully relocated, functional binaries, and has been used to -compile and execute large projects. However, many aspects should still -be considered experimental; these include shared library support, -dynamically loadable objects, and any relocation other than the 31-bit -relocation. - - -File: as.info, Node: ESA/390 Options, Next: ESA/390 Syntax, Prev: ESA/390 Notes, Up: ESA/390-Dependent - -9.14.2 Options --------------- - -`as' has no machine-dependent command-line options for the ESA/390. - - -File: as.info, Node: ESA/390 Syntax, Next: ESA/390 Floating Point, Prev: ESA/390 Options, Up: ESA/390-Dependent - -9.14.3 Syntax -------------- - -The opcode/operand syntax follows the ESA/390 Principles of Operation -manual; assembler directives and general syntax are loosely based on the -prevailing AT&T/SVR4/ELF/Solaris style notation. HLASM-style directives -are _not_ supported for the most part, with the exception of those -described herein. - - A leading dot in front of directives is optional, and the case of -directives is ignored; thus for example, .using and USING have the same -effect. - - A colon may immediately follow a label definition. This is simply -for compatibility with how most assembly language programmers write -code. - - `#' is the line comment character. - - `;' can be used instead of a newline to separate statements. - - Since `$' has no special meaning, you may use it in symbol names. - - Registers can be given the symbolic names r0..r15, fp0, fp2, fp4, -fp6. By using thesse symbolic names, `as' can detect simple syntax -errors. The name rarg or r.arg is a synonym for r11, rtca or r.tca for -r12, sp, r.sp, dsa r.dsa for r13, lr or r.lr for r14, rbase or r.base -for r3 and rpgt or r.pgt for r4. - - `*' is the current location counter. Unlike `.' it is always -relative to the last USING directive. Note that this means that -expressions cannot use multiplication, as any occurrence of `*' will be -interpreted as a location counter. - - All labels are relative to the last USING. Thus, branches to a label -always imply the use of base+displacement. - - Many of the usual forms of address constants / address literals are -supported. Thus, - .using *,r3 - L r15,=A(some_routine) - LM r6,r7,=V(some_longlong_extern) - A r1,=F'12' - AH r0,=H'42' - ME r6,=E'3.1416' - MD r6,=D'3.14159265358979' - O r6,=XL4'cacad0d0' - .ltorg - should all behave as expected: that is, an entry in the literal pool -will be created (or reused if it already exists), and the instruction -operands will be the displacement into the literal pool using the -current base register (as last declared with the `.using' directive). - - -File: as.info, Node: ESA/390 Floating Point, Next: ESA/390 Directives, Prev: ESA/390 Syntax, Up: ESA/390-Dependent - -9.14.4 Floating Point ---------------------- - -The assembler generates only IEEE floating-point numbers. The older -floating point formats are not supported. - - -File: as.info, Node: ESA/390 Directives, Next: ESA/390 Opcodes, Prev: ESA/390 Floating Point, Up: ESA/390-Dependent - -9.14.5 ESA/390 Assembler Directives ------------------------------------ - -`as' for the ESA/390 supports all of the standard ELF/SVR4 assembler -directives that are documented in the main part of this documentation. -Several additional directives are supported in order to implement the -ESA/390 addressing model. The most important of these are `.using' and -`.ltorg' - - These are the additional directives in `as' for the ESA/390: - -`.dc' - A small subset of the usual DC directive is supported. - -`.drop REGNO' - Stop using REGNO as the base register. The REGNO must have been - previously declared with a `.using' directive in the same section - as the current section. - -`.ebcdic STRING' - Emit the EBCDIC equivalent of the indicated string. The emitted - string will be null terminated. Note that the directives - `.string' etc. emit ascii strings by default. - -`EQU' - The standard HLASM-style EQU directive is not supported; however, - the standard `as' directive .equ can be used to the same effect. - -`.ltorg' - Dump the literal pool accumulated so far; begin a new literal pool. - The literal pool will be written in the current section; in order - to generate correct assembly, a `.using' must have been previously - specified in the same section. - -`.using EXPR,REGNO' - Use REGNO as the base register for all subsequent RX, RS, and SS - form instructions. The EXPR will be evaluated to obtain the base - address; usually, EXPR will merely be `*'. - - This assembler allows two `.using' directives to be simultaneously - outstanding, one in the `.text' section, and one in another section - (typically, the `.data' section). This feature allows dynamically - loaded objects to be implemented in a relatively straightforward - way. A `.using' directive must always be specified in the `.text' - section; this will specify the base register that will be used for - branches in the `.text' section. A second `.using' may be - specified in another section; this will specify the base register - that is used for non-label address literals. When a second - `.using' is specified, then the subsequent `.ltorg' must be put in - the same section; otherwise an error will result. - - Thus, for example, the following code uses `r3' to address branch - targets and `r4' to address the literal pool, which has been - written to the `.data' section. The is, the constants - `=A(some_routine)', `=H'42'' and `=E'3.1416'' will all appear in - the `.data' section. - - .data - .using LITPOOL,r4 - .text - BASR r3,0 - .using *,r3 - B START - .long LITPOOL - START: - L r4,4(,r3) - L r15,=A(some_routine) - LTR r15,r15 - BNE LABEL - AH r0,=H'42' - LABEL: - ME r6,=E'3.1416' - .data - LITPOOL: - .ltorg - - Note that this dual-`.using' directive semantics extends and is - not compatible with HLASM semantics. Note that this assembler - directive does not support the full range of HLASM semantics. - - - -File: as.info, Node: ESA/390 Opcodes, Prev: ESA/390 Directives, Up: ESA/390-Dependent - -9.14.6 Opcodes --------------- - -For detailed information on the ESA/390 machine instruction set, see -`ESA/390 Principles of Operation' (IBM Publication Number DZ9AR004). - - -File: as.info, Node: i386-Dependent, Next: i860-Dependent, Prev: ESA/390-Dependent, Up: Machine Dependencies - -9.15 80386 Dependent Features -============================= - - The i386 version `as' supports both the original Intel 386 -architecture in both 16 and 32-bit mode as well as AMD x86-64 -architecture extending the Intel architecture to 64-bits. - -* Menu: - -* i386-Options:: Options -* i386-Directives:: X86 specific directives -* i386-Syntax:: Syntactical considerations -* i386-Mnemonics:: Instruction Naming -* i386-Regs:: Register Naming -* i386-Prefixes:: Instruction Prefixes -* i386-Memory:: Memory References -* i386-Jumps:: Handling of Jump Instructions -* i386-Float:: Floating Point -* i386-SIMD:: Intel's MMX and AMD's 3DNow! SIMD Operations -* i386-LWP:: AMD's Lightweight Profiling Instructions -* i386-BMI:: Bit Manipulation Instruction -* i386-TBM:: AMD's Trailing Bit Manipulation Instructions -* i386-16bit:: Writing 16-bit Code -* i386-Arch:: Specifying an x86 CPU architecture -* i386-Bugs:: AT&T Syntax bugs -* i386-Notes:: Notes - - -File: as.info, Node: i386-Options, Next: i386-Directives, Up: i386-Dependent - -9.15.1 Options --------------- - -The i386 version of `as' has a few machine dependent options: - -`--32 | --x32 | --64' - Select the word size, either 32 bits or 64 bits. `--32' implies - Intel i386 architecture, while `--x32' and `--64' imply AMD x86-64 - architecture with 32-bit or 64-bit word-size respectively. - - These options are only available with the ELF object file format, - and require that the necessary BFD support has been included (on a - 32-bit platform you have to add -enable-64-bit-bfd to configure - enable 64-bit usage and use x86-64 as target platform). - -`-n' - By default, x86 GAS replaces multiple nop instructions used for - alignment within code sections with multi-byte nop instructions - such as leal 0(%esi,1),%esi. This switch disables the - optimization. - -`--divide' - On SVR4-derived platforms, the character `/' is treated as a - comment character, which means that it cannot be used in - expressions. The `--divide' option turns `/' into a normal - character. This does not disable `/' at the beginning of a line - starting a comment, or affect using `#' for starting a comment. - -`-march=CPU[+EXTENSION...]' - This option specifies the target processor. The assembler will - issue an error message if an attempt is made to assemble an - instruction which will not execute on the target processor. The - following processor names are recognized: `i8086', `i186', `i286', - `i386', `i486', `i586', `i686', `pentium', `pentiumpro', - `pentiumii', `pentiumiii', `pentium4', `prescott', `nocona', - `core', `core2', `corei7', `l1om', `k1om', `k6', `k6_2', `athlon', - `opteron', `k8', `amdfam10', `bdver1', `bdver2', `bdver3', - `btver1', `btver2', `generic32' and `generic64'. - - In addition to the basic instruction set, the assembler can be - told to accept various extension mnemonics. For example, - `-march=i686+sse4+vmx' extends I686 with SSE4 and VMX. The - following extensions are currently supported: `8087', `287', `387', - `no87', `mmx', `nommx', `sse', `sse2', `sse3', `ssse3', `sse4.1', - `sse4.2', `sse4', `nosse', `avx', `avx2', `adx', `rdseed', - `prfchw', `smap', `mpx', `sha', `avx512f', `avx512cd', `avx512er', - `avx512pf', `noavx', `vmx', `vmfunc', `smx', `xsave', `xsaveopt', - `aes', `pclmul', `fsgsbase', `rdrnd', `f16c', `bmi2', `fma', - `movbe', `ept', `lzcnt', `hle', `rtm', `invpcid', `clflush', `lwp', - `fma4', `xop', `cx16', `syscall', `rdtscp', `3dnow', `3dnowa', - `sse4a', `sse5', `svme', `abm' and `padlock'. Note that rather - than extending a basic instruction set, the extension mnemonics - starting with `no' revoke the respective functionality. - - When the `.arch' directive is used with `-march', the `.arch' - directive will take precedent. - -`-mtune=CPU' - This option specifies a processor to optimize for. When used in - conjunction with the `-march' option, only instructions of the - processor specified by the `-march' option will be generated. - - Valid CPU values are identical to the processor list of - `-march=CPU'. - -`-msse2avx' - This option specifies that the assembler should encode SSE - instructions with VEX prefix. - -`-msse-check=NONE' -`-msse-check=WARNING' -`-msse-check=ERROR' - These options control if the assembler should check SSE - instructions. `-msse-check=NONE' will make the assembler not to - check SSE instructions, which is the default. - `-msse-check=WARNING' will make the assembler issue a warning for - any SSE instruction. `-msse-check=ERROR' will make the assembler - issue an error for any SSE instruction. - -`-mavxscalar=128' -`-mavxscalar=256' - These options control how the assembler should encode scalar AVX - instructions. `-mavxscalar=128' will encode scalar AVX - instructions with 128bit vector length, which is the default. - `-mavxscalar=256' will encode scalar AVX instructions with 256bit - vector length. - -`-mevexlig=128' -`-mevexlig=256' -`-mevexlig=512' - These options control how the assembler should encode - length-ignored (LIG) EVEX instructions. `-mevexlig=128' will - encode LIG EVEX instructions with 128bit vector length, which is - the default. `-mevexlig=256' and `-mevexlig=512' will encode LIG - EVEX instructions with 256bit and 512bit vector length, - respectively. - -`-mevexwig=0' -`-mevexwig=1' - These options control how the assembler should encode w-ignored - (WIG) EVEX instructions. `-mevexwig=0' will encode WIG EVEX - instructions with evex.w = 0, which is the default. `-mevexwig=1' - will encode WIG EVEX instructions with evex.w = 1. - -`-mmnemonic=ATT' -`-mmnemonic=INTEL' - This option specifies instruction mnemonic for matching - instructions. The `.att_mnemonic' and `.intel_mnemonic' - directives will take precedent. - -`-msyntax=ATT' -`-msyntax=INTEL' - This option specifies instruction syntax when processing - instructions. The `.att_syntax' and `.intel_syntax' directives - will take precedent. - -`-mnaked-reg' - This opetion specifies that registers don't require a `%' prefix. - The `.att_syntax' and `.intel_syntax' directives will take - precedent. - -`-madd-bnd-prefix' - This option forces the assembler to add BND prefix to all - branches, even if such prefix was not explicitly specified in the - source code. - - - -File: as.info, Node: i386-Directives, Next: i386-Syntax, Prev: i386-Options, Up: i386-Dependent - -9.15.2 x86 specific Directives ------------------------------- - -`.lcomm SYMBOL , LENGTH[, ALIGNMENT]' - Reserve LENGTH (an absolute expression) bytes for a local common - denoted by SYMBOL. The section and value of SYMBOL are those of - the new local common. The addresses are allocated in the bss - section, so that at run-time the bytes start off zeroed. Since - SYMBOL is not declared global, it is normally not visible to `ld'. - The optional third parameter, ALIGNMENT, specifies the desired - alignment of the symbol in the bss section. - - This directive is only available for COFF based x86 targets. - - - -File: as.info, Node: i386-Syntax, Next: i386-Mnemonics, Prev: i386-Directives, Up: i386-Dependent - -9.15.3 i386 Syntactical Considerations --------------------------------------- - -* Menu: - -* i386-Variations:: AT&T Syntax versus Intel Syntax -* i386-Chars:: Special Characters - - -File: as.info, Node: i386-Variations, Next: i386-Chars, Up: i386-Syntax - -9.15.3.1 AT&T Syntax versus Intel Syntax -........................................ - -`as' now supports assembly using Intel assembler syntax. -`.intel_syntax' selects Intel mode, and `.att_syntax' switches back to -the usual AT&T mode for compatibility with the output of `gcc'. Either -of these directives may have an optional argument, `prefix', or -`noprefix' specifying whether registers require a `%' prefix. AT&T -System V/386 assembler syntax is quite different from Intel syntax. We -mention these differences because almost all 80386 documents use Intel -syntax. Notable differences between the two syntaxes are: - - * AT&T immediate operands are preceded by `$'; Intel immediate - operands are undelimited (Intel `push 4' is AT&T `pushl $4'). - AT&T register operands are preceded by `%'; Intel register operands - are undelimited. AT&T absolute (as opposed to PC relative) - jump/call operands are prefixed by `*'; they are undelimited in - Intel syntax. - - * AT&T and Intel syntax use the opposite order for source and - destination operands. Intel `add eax, 4' is `addl $4, %eax'. The - `source, dest' convention is maintained for compatibility with - previous Unix assemblers. Note that `bound', `invlpga', and - instructions with 2 immediate operands, such as the `enter' - instruction, do _not_ have reversed order. *Note i386-Bugs::. - - * In AT&T syntax the size of memory operands is determined from the - last character of the instruction mnemonic. Mnemonic suffixes of - `b', `w', `l' and `q' specify byte (8-bit), word (16-bit), long - (32-bit) and quadruple word (64-bit) memory references. Intel - syntax accomplishes this by prefixing memory operands (_not_ the - instruction mnemonics) with `byte ptr', `word ptr', `dword ptr' - and `qword ptr'. Thus, Intel `mov al, byte ptr FOO' is `movb FOO, - %al' in AT&T syntax. - - In 64-bit code, `movabs' can be used to encode the `mov' - instruction with the 64-bit displacement or immediate operand. - - * Immediate form long jumps and calls are `lcall/ljmp $SECTION, - $OFFSET' in AT&T syntax; the Intel syntax is `call/jmp far - SECTION:OFFSET'. Also, the far return instruction is `lret - $STACK-ADJUST' in AT&T syntax; Intel syntax is `ret far - STACK-ADJUST'. - - * The AT&T assembler does not provide support for multiple section - programs. Unix style systems expect all programs to be single - sections. - - -File: as.info, Node: i386-Chars, Prev: i386-Variations, Up: i386-Syntax - -9.15.3.2 Special Characters -........................... - -The presence of a `#' appearing anywhere on a line indicates the start -of a comment that extends to the end of that line. - - If a `#' appears as the first character of a line then the whole -line is treated as a comment, but in this case the line can also be a -logical line number directive (*note Comments::) or a preprocessor -control command (*note Preprocessing::). - - If the `--divide' command line option has not been specified then -the `/' character appearing anywhere on a line also introduces a line -comment. - - The `;' character can be used to separate statements on the same -line. - - -File: as.info, Node: i386-Mnemonics, Next: i386-Regs, Prev: i386-Syntax, Up: i386-Dependent - -9.15.4 Instruction Naming -------------------------- - -Instruction mnemonics are suffixed with one character modifiers which -specify the size of operands. The letters `b', `w', `l' and `q' -specify byte, word, long and quadruple word operands. If no suffix is -specified by an instruction then `as' tries to fill in the missing -suffix based on the destination register operand (the last one by -convention). Thus, `mov %ax, %bx' is equivalent to `movw %ax, %bx'; -also, `mov $1, %bx' is equivalent to `movw $1, bx'. Note that this is -incompatible with the AT&T Unix assembler which assumes that a missing -mnemonic suffix implies long operand size. (This incompatibility does -not affect compiler output since compilers always explicitly specify -the mnemonic suffix.) - - Almost all instructions have the same names in AT&T and Intel format. -There are a few exceptions. The sign extend and zero extend -instructions need two sizes to specify them. They need a size to -sign/zero extend _from_ and a size to zero extend _to_. This is -accomplished by using two instruction mnemonic suffixes in AT&T syntax. -Base names for sign extend and zero extend are `movs...' and `movz...' -in AT&T syntax (`movsx' and `movzx' in Intel syntax). The instruction -mnemonic suffixes are tacked on to this base name, the _from_ suffix -before the _to_ suffix. Thus, `movsbl %al, %edx' is AT&T syntax for -"move sign extend _from_ %al _to_ %edx." Possible suffixes, thus, are -`bl' (from byte to long), `bw' (from byte to word), `wl' (from word to -long), `bq' (from byte to quadruple word), `wq' (from word to quadruple -word), and `lq' (from long to quadruple word). - - Different encoding options can be specified via optional mnemonic -suffix. `.s' suffix swaps 2 register operands in encoding when moving -from one register to another. `.d8' or `.d32' suffix prefers 8bit or -32bit displacement in encoding. - - The Intel-syntax conversion instructions - - * `cbw' -- sign-extend byte in `%al' to word in `%ax', - - * `cwde' -- sign-extend word in `%ax' to long in `%eax', - - * `cwd' -- sign-extend word in `%ax' to long in `%dx:%ax', - - * `cdq' -- sign-extend dword in `%eax' to quad in `%edx:%eax', - - * `cdqe' -- sign-extend dword in `%eax' to quad in `%rax' (x86-64 - only), - - * `cqo' -- sign-extend quad in `%rax' to octuple in `%rdx:%rax' - (x86-64 only), - -are called `cbtw', `cwtl', `cwtd', `cltd', `cltq', and `cqto' in AT&T -naming. `as' accepts either naming for these instructions. - - Far call/jump instructions are `lcall' and `ljmp' in AT&T syntax, -but are `call far' and `jump far' in Intel convention. - -9.15.5 AT&T Mnemonic versus Intel Mnemonic ------------------------------------------- - -`as' supports assembly using Intel mnemonic. `.intel_mnemonic' selects -Intel mnemonic with Intel syntax, and `.att_mnemonic' switches back to -the usual AT&T mnemonic with AT&T syntax for compatibility with the -output of `gcc'. Several x87 instructions, `fadd', `fdiv', `fdivp', -`fdivr', `fdivrp', `fmul', `fsub', `fsubp', `fsubr' and `fsubrp', are -implemented in AT&T System V/386 assembler with different mnemonics -from those in Intel IA32 specification. `gcc' generates those -instructions with AT&T mnemonic. - - -File: as.info, Node: i386-Regs, Next: i386-Prefixes, Prev: i386-Mnemonics, Up: i386-Dependent - -9.15.6 Register Naming ----------------------- - -Register operands are always prefixed with `%'. The 80386 registers -consist of - - * the 8 32-bit registers `%eax' (the accumulator), `%ebx', `%ecx', - `%edx', `%edi', `%esi', `%ebp' (the frame pointer), and `%esp' - (the stack pointer). - - * the 8 16-bit low-ends of these: `%ax', `%bx', `%cx', `%dx', `%di', - `%si', `%bp', and `%sp'. - - * the 8 8-bit registers: `%ah', `%al', `%bh', `%bl', `%ch', `%cl', - `%dh', and `%dl' (These are the high-bytes and low-bytes of `%ax', - `%bx', `%cx', and `%dx') - - * the 6 section registers `%cs' (code section), `%ds' (data - section), `%ss' (stack section), `%es', `%fs', and `%gs'. - - * the 3 processor control registers `%cr0', `%cr2', and `%cr3'. - - * the 6 debug registers `%db0', `%db1', `%db2', `%db3', `%db6', and - `%db7'. - - * the 2 test registers `%tr6' and `%tr7'. - - * the 8 floating point register stack `%st' or equivalently - `%st(0)', `%st(1)', `%st(2)', `%st(3)', `%st(4)', `%st(5)', - `%st(6)', and `%st(7)'. These registers are overloaded by 8 MMX - registers `%mm0', `%mm1', `%mm2', `%mm3', `%mm4', `%mm5', `%mm6' - and `%mm7'. - - * the 8 SSE registers registers `%xmm0', `%xmm1', `%xmm2', `%xmm3', - `%xmm4', `%xmm5', `%xmm6' and `%xmm7'. - - The AMD x86-64 architecture extends the register set by: - - * enhancing the 8 32-bit registers to 64-bit: `%rax' (the - accumulator), `%rbx', `%rcx', `%rdx', `%rdi', `%rsi', `%rbp' (the - frame pointer), `%rsp' (the stack pointer) - - * the 8 extended registers `%r8'-`%r15'. - - * the 8 32-bit low ends of the extended registers: `%r8d'-`%r15d' - - * the 8 16-bit low ends of the extended registers: `%r8w'-`%r15w' - - * the 8 8-bit low ends of the extended registers: `%r8b'-`%r15b' - - * the 4 8-bit registers: `%sil', `%dil', `%bpl', `%spl'. - - * the 8 debug registers: `%db8'-`%db15'. - - * the 8 SSE registers: `%xmm8'-`%xmm15'. - - -File: as.info, Node: i386-Prefixes, Next: i386-Memory, Prev: i386-Regs, Up: i386-Dependent - -9.15.7 Instruction Prefixes ---------------------------- - -Instruction prefixes are used to modify the following instruction. They -are used to repeat string instructions, to provide section overrides, to -perform bus lock operations, and to change operand and address sizes. -(Most instructions that normally operate on 32-bit operands will use -16-bit operands if the instruction has an "operand size" prefix.) -Instruction prefixes are best written on the same line as the -instruction they act upon. For example, the `scas' (scan string) -instruction is repeated with: - - repne scas %es:(%edi),%al - - You may also place prefixes on the lines immediately preceding the -instruction, but this circumvents checks that `as' does with prefixes, -and will not work with all prefixes. - - Here is a list of instruction prefixes: - - * Section override prefixes `cs', `ds', `ss', `es', `fs', `gs'. - These are automatically added by specifying using the - SECTION:MEMORY-OPERAND form for memory references. - - * Operand/Address size prefixes `data16' and `addr16' change 32-bit - operands/addresses into 16-bit operands/addresses, while `data32' - and `addr32' change 16-bit ones (in a `.code16' section) into - 32-bit operands/addresses. These prefixes _must_ appear on the - same line of code as the instruction they modify. For example, in - a 16-bit `.code16' section, you might write: - - addr32 jmpl *(%ebx) - - * The bus lock prefix `lock' inhibits interrupts during execution of - the instruction it precedes. (This is only valid with certain - instructions; see a 80386 manual for details). - - * The wait for coprocessor prefix `wait' waits for the coprocessor to - complete the current instruction. This should never be needed for - the 80386/80387 combination. - - * The `rep', `repe', and `repne' prefixes are added to string - instructions to make them repeat `%ecx' times (`%cx' times if the - current address size is 16-bits). - - * The `rex' family of prefixes is used by x86-64 to encode - extensions to i386 instruction set. The `rex' prefix has four - bits -- an operand size overwrite (`64') used to change operand - size from 32-bit to 64-bit and X, Y and Z extensions bits used to - extend the register set. - - You may write the `rex' prefixes directly. The `rex64xyz' - instruction emits `rex' prefix with all the bits set. By omitting - the `64', `x', `y' or `z' you may write other prefixes as well. - Normally, there is no need to write the prefixes explicitly, since - gas will automatically generate them based on the instruction - operands. - - -File: as.info, Node: i386-Memory, Next: i386-Jumps, Prev: i386-Prefixes, Up: i386-Dependent - -9.15.8 Memory References ------------------------- - -An Intel syntax indirect memory reference of the form - - SECTION:[BASE + INDEX*SCALE + DISP] - -is translated into the AT&T syntax - - SECTION:DISP(BASE, INDEX, SCALE) - -where BASE and INDEX are the optional 32-bit base and index registers, -DISP is the optional displacement, and SCALE, taking the values 1, 2, -4, and 8, multiplies INDEX to calculate the address of the operand. If -no SCALE is specified, SCALE is taken to be 1. SECTION specifies the -optional section register for the memory operand, and may override the -default section register (see a 80386 manual for section register -defaults). Note that section overrides in AT&T syntax _must_ be -preceded by a `%'. If you specify a section override which coincides -with the default section register, `as' does _not_ output any section -register override prefixes to assemble the given instruction. Thus, -section overrides can be specified to emphasize which section register -is used for a given memory operand. - - Here are some examples of Intel and AT&T style memory references: - -AT&T: `-4(%ebp)', Intel: `[ebp - 4]' - BASE is `%ebp'; DISP is `-4'. SECTION is missing, and the default - section is used (`%ss' for addressing with `%ebp' as the base - register). INDEX, SCALE are both missing. - -AT&T: `foo(,%eax,4)', Intel: `[foo + eax*4]' - INDEX is `%eax' (scaled by a SCALE 4); DISP is `foo'. All other - fields are missing. The section register here defaults to `%ds'. - -AT&T: `foo(,1)'; Intel `[foo]' - This uses the value pointed to by `foo' as a memory operand. Note - that BASE and INDEX are both missing, but there is only _one_ `,'. - This is a syntactic exception. - -AT&T: `%gs:foo'; Intel `gs:foo' - This selects the contents of the variable `foo' with section - register SECTION being `%gs'. - - Absolute (as opposed to PC relative) call and jump operands must be -prefixed with `*'. If no `*' is specified, `as' always chooses PC -relative addressing for jump/call labels. - - Any instruction that has a memory operand, but no register operand, -_must_ specify its size (byte, word, long, or quadruple) with an -instruction mnemonic suffix (`b', `w', `l' or `q', respectively). - - The x86-64 architecture adds an RIP (instruction pointer relative) -addressing. This addressing mode is specified by using `rip' as a base -register. Only constant offsets are valid. For example: - -AT&T: `1234(%rip)', Intel: `[rip + 1234]' - Points to the address 1234 bytes past the end of the current - instruction. - -AT&T: `symbol(%rip)', Intel: `[rip + symbol]' - Points to the `symbol' in RIP relative way, this is shorter than - the default absolute addressing. - - Other addressing modes remain unchanged in x86-64 architecture, -except registers used are 64-bit instead of 32-bit. - - -File: as.info, Node: i386-Jumps, Next: i386-Float, Prev: i386-Memory, Up: i386-Dependent - -9.15.9 Handling of Jump Instructions ------------------------------------- - -Jump instructions are always optimized to use the smallest possible -displacements. This is accomplished by using byte (8-bit) displacement -jumps whenever the target is sufficiently close. If a byte displacement -is insufficient a long displacement is used. We do not support word -(16-bit) displacement jumps in 32-bit mode (i.e. prefixing the jump -instruction with the `data16' instruction prefix), since the 80386 -insists upon masking `%eip' to 16 bits after the word displacement is -added. (See also *note i386-Arch::) - - Note that the `jcxz', `jecxz', `loop', `loopz', `loope', `loopnz' -and `loopne' instructions only come in byte displacements, so that if -you use these instructions (`gcc' does not use them) you may get an -error message (and incorrect code). The AT&T 80386 assembler tries to -get around this problem by expanding `jcxz foo' to - - jcxz cx_zero - jmp cx_nonzero - cx_zero: jmp foo - cx_nonzero: - - -File: as.info, Node: i386-Float, Next: i386-SIMD, Prev: i386-Jumps, Up: i386-Dependent - -9.15.10 Floating Point ----------------------- - -All 80387 floating point types except packed BCD are supported. (BCD -support may be added without much difficulty). These data types are -16-, 32-, and 64- bit integers, and single (32-bit), double (64-bit), -and extended (80-bit) precision floating point. Each supported type -has an instruction mnemonic suffix and a constructor associated with -it. Instruction mnemonic suffixes specify the operand's data type. -Constructors build these data types into memory. - - * Floating point constructors are `.float' or `.single', `.double', - and `.tfloat' for 32-, 64-, and 80-bit formats. These correspond - to instruction mnemonic suffixes `s', `l', and `t'. `t' stands for - 80-bit (ten byte) real. The 80387 only supports this format via - the `fldt' (load 80-bit real to stack top) and `fstpt' (store - 80-bit real and pop stack) instructions. - - * Integer constructors are `.word', `.long' or `.int', and `.quad' - for the 16-, 32-, and 64-bit integer formats. The corresponding - instruction mnemonic suffixes are `s' (single), `l' (long), and - `q' (quad). As with the 80-bit real format, the 64-bit `q' format - is only present in the `fildq' (load quad integer to stack top) - and `fistpq' (store quad integer and pop stack) instructions. - - Register to register operations should not use instruction mnemonic -suffixes. `fstl %st, %st(1)' will give a warning, and be assembled as -if you wrote `fst %st, %st(1)', since all register to register -operations use 80-bit floating point operands. (Contrast this with -`fstl %st, mem', which converts `%st' from 80-bit to 64-bit floating -point format, then stores the result in the 4 byte location `mem') - - -File: as.info, Node: i386-SIMD, Next: i386-LWP, Prev: i386-Float, Up: i386-Dependent - -9.15.11 Intel's MMX and AMD's 3DNow! SIMD Operations ----------------------------------------------------- - -`as' supports Intel's MMX instruction set (SIMD instructions for -integer data), available on Intel's Pentium MMX processors and Pentium -II processors, AMD's K6 and K6-2 processors, Cyrix' M2 processor, and -probably others. It also supports AMD's 3DNow! instruction set (SIMD -instructions for 32-bit floating point data) available on AMD's K6-2 -processor and possibly others in the future. - - Currently, `as' does not support Intel's floating point SIMD, Katmai -(KNI). - - The eight 64-bit MMX operands, also used by 3DNow!, are called -`%mm0', `%mm1', ... `%mm7'. They contain eight 8-bit integers, four -16-bit integers, two 32-bit integers, one 64-bit integer, or two 32-bit -floating point values. The MMX registers cannot be used at the same -time as the floating point stack. - - See Intel and AMD documentation, keeping in mind that the operand -order in instructions is reversed from the Intel syntax. - - -File: as.info, Node: i386-LWP, Next: i386-BMI, Prev: i386-SIMD, Up: i386-Dependent - -9.15.12 AMD's Lightweight Profiling Instructions ------------------------------------------------- - -`as' supports AMD's Lightweight Profiling (LWP) instruction set, -available on AMD's Family 15h (Orochi) processors. - - LWP enables applications to collect and manage performance data, and -react to performance events. The collection of performance data -requires no context switches. LWP runs in the context of a thread and -so several counters can be used independently across multiple threads. -LWP can be used in both 64-bit and legacy 32-bit modes. - - For detailed information on the LWP instruction set, see the `AMD -Lightweight Profiling Specification' available at Lightweight Profiling -Specification (http://developer.amd.com/cpu/LWP). - - -File: as.info, Node: i386-BMI, Next: i386-TBM, Prev: i386-LWP, Up: i386-Dependent - -9.15.13 Bit Manipulation Instructions -------------------------------------- - -`as' supports the Bit Manipulation (BMI) instruction set. - - BMI instructions provide several instructions implementing individual -bit manipulation operations such as isolation, masking, setting, or -resetting. - - -File: as.info, Node: i386-TBM, Next: i386-16bit, Prev: i386-BMI, Up: i386-Dependent - -9.15.14 AMD's Trailing Bit Manipulation Instructions ----------------------------------------------------- - -`as' supports AMD's Trailing Bit Manipulation (TBM) instruction set, -available on AMD's BDVER2 processors (Trinity and Viperfish). - - TBM instructions provide instructions implementing individual bit -manipulation operations such as isolating, masking, setting, resetting, -complementing, and operations on trailing zeros and ones. - - -File: as.info, Node: i386-16bit, Next: i386-Arch, Prev: i386-TBM, Up: i386-Dependent - -9.15.15 Writing 16-bit Code ---------------------------- - -While `as' normally writes only "pure" 32-bit i386 code or 64-bit -x86-64 code depending on the default configuration, it also supports -writing code to run in real mode or in 16-bit protected mode code -segments. To do this, put a `.code16' or `.code16gcc' directive before -the assembly language instructions to be run in 16-bit mode. You can -switch `as' to writing 32-bit code with the `.code32' directive or -64-bit code with the `.code64' directive. - - `.code16gcc' provides experimental support for generating 16-bit -code from gcc, and differs from `.code16' in that `call', `ret', -`enter', `leave', `push', `pop', `pusha', `popa', `pushf', and `popf' -instructions default to 32-bit size. This is so that the stack pointer -is manipulated in the same way over function calls, allowing access to -function parameters at the same stack offsets as in 32-bit mode. -`.code16gcc' also automatically adds address size prefixes where -necessary to use the 32-bit addressing modes that gcc generates. - - The code which `as' generates in 16-bit mode will not necessarily -run on a 16-bit pre-80386 processor. To write code that runs on such a -processor, you must refrain from using _any_ 32-bit constructs which -require `as' to output address or operand size prefixes. - - Note that writing 16-bit code instructions by explicitly specifying a -prefix or an instruction mnemonic suffix within a 32-bit code section -generates different machine instructions than those generated for a -16-bit code segment. In a 32-bit code section, the following code -generates the machine opcode bytes `66 6a 04', which pushes the value -`4' onto the stack, decrementing `%esp' by 2. - - pushw $4 - - The same code in a 16-bit code section would generate the machine -opcode bytes `6a 04' (i.e., without the operand size prefix), which is -correct since the processor default operand size is assumed to be 16 -bits in a 16-bit code section. - - -File: as.info, Node: i386-Bugs, Next: i386-Notes, Prev: i386-Arch, Up: i386-Dependent - -9.15.16 AT&T Syntax bugs ------------------------- - -The UnixWare assembler, and probably other AT&T derived ix86 Unix -assemblers, generate floating point instructions with reversed source -and destination registers in certain cases. Unfortunately, gcc and -possibly many other programs use this reversed syntax, so we're stuck -with it. - - For example - - fsub %st,%st(3) - results in `%st(3)' being updated to `%st - %st(3)' rather than the -expected `%st(3) - %st'. This happens with all the non-commutative -arithmetic floating point operations with two register operands where -the source register is `%st' and the destination register is `%st(i)'. - - -File: as.info, Node: i386-Arch, Next: i386-Bugs, Prev: i386-16bit, Up: i386-Dependent - -9.15.17 Specifying CPU Architecture ------------------------------------ - -`as' may be told to assemble for a particular CPU (sub-)architecture -with the `.arch CPU_TYPE' directive. This directive enables a warning -when gas detects an instruction that is not supported on the CPU -specified. The choices for CPU_TYPE are: - -`i8086' `i186' `i286' `i386' -`i486' `i586' `i686' `pentium' -`pentiumpro' `pentiumii' `pentiumiii' `pentium4' -`prescott' `nocona' `core' `core2' -`corei7' `l1om' `k1om' -`k6' `k6_2' `athlon' `k8' -`amdfam10' `bdver1' `bdver2' `bdver3' -`btver1' `btver2' -`generic32' `generic64' -`.mmx' `.sse' `.sse2' `.sse3' -`.ssse3' `.sse4.1' `.sse4.2' `.sse4' -`.avx' `.vmx' `.smx' `.ept' -`.clflush' `.movbe' `.xsave' `.xsaveopt' -`.aes' `.pclmul' `.fma' `.fsgsbase' -`.rdrnd' `.f16c' `.avx2' `.bmi2' -`.lzcnt' `.invpcid' `.vmfunc' `.hle' -`.rtm' `.adx' `.rdseed' `.prfchw' -`.smap' `.mpx' -`.smap' `.sha' -`.3dnow' `.3dnowa' `.sse4a' `.sse5' -`.syscall' `.rdtscp' `.svme' `.abm' -`.lwp' `.fma4' `.xop' `.cx16' -`.padlock' -`.smap' `.avx512f' `.avx512cd' `.avx512er' -`.avx512pf' `.3dnow' `.3dnowa' `.sse4a' -`.sse5' `.syscall' `.rdtscp' `.svme' -`.abm' `.lwp' `.fma4' `.xop' -`.cx16' `.padlock' - - Apart from the warning, there are only two other effects on `as' -operation; Firstly, if you specify a CPU other than `i486', then shift -by one instructions such as `sarl $1, %eax' will automatically use a -two byte opcode sequence. The larger three byte opcode sequence is -used on the 486 (and when no architecture is specified) because it -executes faster on the 486. Note that you can explicitly request the -two byte opcode by writing `sarl %eax'. Secondly, if you specify -`i8086', `i186', or `i286', _and_ `.code16' or `.code16gcc' then byte -offset conditional jumps will be promoted when necessary to a two -instruction sequence consisting of a conditional jump of the opposite -sense around an unconditional jump to the target. - - Following the CPU architecture (but not a sub-architecture, which -are those starting with a dot), you may specify `jumps' or `nojumps' to -control automatic promotion of conditional jumps. `jumps' is the -default, and enables jump promotion; All external jumps will be of the -long variety, and file-local jumps will be promoted as necessary. -(*note i386-Jumps::) `nojumps' leaves external conditional jumps as -byte offset jumps, and warns about file-local conditional jumps that -`as' promotes. Unconditional jumps are treated as for `jumps'. - - For example - - .arch i8086,nojumps - - -File: as.info, Node: i386-Notes, Prev: i386-Bugs, Up: i386-Dependent - -9.15.18 Notes -------------- - -There is some trickery concerning the `mul' and `imul' instructions -that deserves mention. The 16-, 32-, 64- and 128-bit expanding -multiplies (base opcode `0xf6'; extension 4 for `mul' and 5 for `imul') -can be output only in the one operand form. Thus, `imul %ebx, %eax' -does _not_ select the expanding multiply; the expanding multiply would -clobber the `%edx' register, and this would confuse `gcc' output. Use -`imul %ebx' to get the 64-bit product in `%edx:%eax'. - - We have added a two operand form of `imul' when the first operand is -an immediate mode expression and the second operand is a register. -This is just a shorthand, so that, multiplying `%eax' by 69, for -example, can be done with `imul $69, %eax' rather than `imul $69, %eax, -%eax'. - - -File: as.info, Node: i860-Dependent, Next: i960-Dependent, Prev: i386-Dependent, Up: Machine Dependencies - -9.16 Intel i860 Dependent Features -================================== - -* Menu: - -* Notes-i860:: i860 Notes -* Options-i860:: i860 Command-line Options -* Directives-i860:: i860 Machine Directives -* Opcodes for i860:: i860 Opcodes -* Syntax of i860:: i860 Syntax - - -File: as.info, Node: Notes-i860, Next: Options-i860, Up: i860-Dependent - -9.16.1 i860 Notes ------------------ - -This is a fairly complete i860 assembler which is compatible with the -UNIX System V/860 Release 4 assembler. However, it does not currently -support SVR4 PIC (i.e., `@GOT, @GOTOFF, @PLT'). - - Like the SVR4/860 assembler, the output object format is ELF32. -Currently, this is the only supported object format. If there is -sufficient interest, other formats such as COFF may be implemented. - - Both the Intel and AT&T/SVR4 syntaxes are supported, with the latter -being the default. One difference is that AT&T syntax requires the '%' -prefix on register names while Intel syntax does not. Another -difference is in the specification of relocatable expressions. The -Intel syntax is `ha%expression' whereas the SVR4 syntax is -`[expression]@ha' (and similarly for the "l" and "h" selectors). - - -File: as.info, Node: Options-i860, Next: Directives-i860, Prev: Notes-i860, Up: i860-Dependent - -9.16.2 i860 Command-line Options --------------------------------- - -9.16.2.1 SVR4 compatibility options -................................... - -`-V' - Print assembler version. - -`-Qy' - Ignored. - -`-Qn' - Ignored. - -9.16.2.2 Other options -...................... - -`-EL' - Select little endian output (this is the default). - -`-EB' - Select big endian output. Note that the i860 always reads - instructions as little endian data, so this option only effects - data and not instructions. - -`-mwarn-expand' - Emit a warning message if any pseudo-instruction expansions - occurred. For example, a `or' instruction with an immediate - larger than 16-bits will be expanded into two instructions. This - is a very undesirable feature to rely on, so this flag can help - detect any code where it happens. One use of it, for instance, has - been to find and eliminate any place where `gcc' may emit these - pseudo-instructions. - -`-mxp' - Enable support for the i860XP instructions and control registers. - By default, this option is disabled so that only the base - instruction set (i.e., i860XR) is supported. - -`-mintel-syntax' - The i860 assembler defaults to AT&T/SVR4 syntax. This option - enables the Intel syntax. - - -File: as.info, Node: Directives-i860, Next: Opcodes for i860, Prev: Options-i860, Up: i860-Dependent - -9.16.3 i860 Machine Directives ------------------------------- - -`.dual' - Enter dual instruction mode. While this directive is supported, the - preferred way to use dual instruction mode is to explicitly code - the dual bit with the `d.' prefix. - -`.enddual' - Exit dual instruction mode. While this directive is supported, the - preferred way to use dual instruction mode is to explicitly code - the dual bit with the `d.' prefix. - -`.atmp' - Change the temporary register used when expanding pseudo - operations. The default register is `r31'. - - The `.dual', `.enddual', and `.atmp' directives are available only -in the Intel syntax mode. - - Both syntaxes allow for the standard `.align' directive. However, -the Intel syntax additionally allows keywords for the alignment -parameter: "`.align type'", where `type' is one of `.short', `.long', -`.quad', `.single', `.double' representing alignments of 2, 4, 16, 4, -and 8, respectively. - - -File: as.info, Node: Opcodes for i860, Next: Syntax of i860, Prev: Directives-i860, Up: i860-Dependent - -9.16.4 i860 Opcodes -------------------- - -All of the Intel i860XR and i860XP machine instructions are supported. -Please see either _i860 Microprocessor Programmer's Reference Manual_ -or _i860 Microprocessor Architecture_ for more information. - -9.16.4.1 Other instruction support (pseudo-instructions) -........................................................ - -For compatibility with some other i860 assemblers, a number of -pseudo-instructions are supported. While these are supported, they are -a very undesirable feature that should be avoided - in particular, when -they result in an expansion to multiple actual i860 instructions. Below -are the pseudo-instructions that result in expansions. - * Load large immediate into general register: - - The pseudo-instruction `mov imm,%rn' (where the immediate does not - fit within a signed 16-bit field) will be expanded into: - orh large_imm@h,%r0,%rn - or large_imm@l,%rn,%rn - - * Load/store with relocatable address expression: - - For example, the pseudo-instruction `ld.b addr_exp(%rx),%rn' will - be expanded into: - orh addr_exp@ha,%rx,%r31 - ld.l addr_exp@l(%r31),%rn - - The analogous expansions apply to `ld.x, st.x, fld.x, pfld.x, - fst.x', and `pst.x' as well. - - * Signed large immediate with add/subtract: - - If any of the arithmetic operations `adds, addu, subs, subu' are - used with an immediate larger than 16-bits (signed), then they - will be expanded. For instance, the pseudo-instruction `adds - large_imm,%rx,%rn' expands to: - orh large_imm@h,%r0,%r31 - or large_imm@l,%r31,%r31 - adds %r31,%rx,%rn - - * Unsigned large immediate with logical operations: - - Logical operations (`or, andnot, or, xor') also result in - expansions. The pseudo-instruction `or large_imm,%rx,%rn' results - in: - orh large_imm@h,%rx,%r31 - or large_imm@l,%r31,%rn - - Similarly for the others, except for `and' which expands to: - andnot (-1 - large_imm)@h,%rx,%r31 - andnot (-1 - large_imm)@l,%r31,%rn - - -File: as.info, Node: Syntax of i860, Prev: Opcodes for i860, Up: i860-Dependent - -9.16.5 i860 Syntax ------------------- - -* Menu: - -* i860-Chars:: Special Characters - - -File: as.info, Node: i860-Chars, Up: Syntax of i860 - -9.16.5.1 Special Characters -........................... - -The presence of a `#' appearing anywhere on a line indicates the start -of a comment that extends to the end of that line. - - If a `#' appears as the first character of a line then the whole -line is treated as a comment, but in this case the line can also be a -logical line number directive (*note Comments::) or a preprocessor -control command (*note Preprocessing::). - - The `;' character can be used to separate statements on the same -line. - - -File: as.info, Node: i960-Dependent, Next: IA-64-Dependent, Prev: i860-Dependent, Up: Machine Dependencies - -9.17 Intel 80960 Dependent Features -=================================== - -* Menu: - -* Options-i960:: i960 Command-line Options -* Floating Point-i960:: Floating Point -* Directives-i960:: i960 Machine Directives -* Opcodes for i960:: i960 Opcodes -* Syntax of i960:: i960 Syntax - - -File: as.info, Node: Options-i960, Next: Floating Point-i960, Up: i960-Dependent - -9.17.1 i960 Command-line Options --------------------------------- - -`-ACA | -ACA_A | -ACB | -ACC | -AKA | -AKB | -AKC | -AMC' - Select the 80960 architecture. Instructions or features not - supported by the selected architecture cause fatal errors. - - `-ACA' is equivalent to `-ACA_A'; `-AKC' is equivalent to `-AMC'. - Synonyms are provided for compatibility with other tools. - - If you do not specify any of these options, `as' generates code - for any instruction or feature that is supported by _some_ version - of the 960 (even if this means mixing architectures!). In - principle, `as' attempts to deduce the minimal sufficient - processor type if none is specified; depending on the object code - format, the processor type may be recorded in the object file. If - it is critical that the `as' output match a specific architecture, - specify that architecture explicitly. - -`-b' - Add code to collect information about conditional branches taken, - for later optimization using branch prediction bits. (The - conditional branch instructions have branch prediction bits in the - CA, CB, and CC architectures.) If BR represents a conditional - branch instruction, the following represents the code generated by - the assembler when `-b' is specified: - - call INCREMENT ROUTINE - .word 0 # pre-counter - Label: BR - call INCREMENT ROUTINE - .word 0 # post-counter - - The counter following a branch records the number of times that - branch was _not_ taken; the difference between the two counters is - the number of times the branch _was_ taken. - - A table of every such `Label' is also generated, so that the - external postprocessor `gbr960' (supplied by Intel) can locate all - the counters. This table is always labeled `__BRANCH_TABLE__'; - this is a local symbol to permit collecting statistics for many - separate object files. The table is word aligned, and begins with - a two-word header. The first word, initialized to 0, is used in - maintaining linked lists of branch tables. The second word is a - count of the number of entries in the table, which follow - immediately: each is a word, pointing to one of the labels - illustrated above. - - +------------+------------+------------+ ... +------------+ - | | | | | | - | *NEXT | COUNT: N | *BRLAB 1 | | *BRLAB N | - | | | | | | - +------------+------------+------------+ ... +------------+ - - __BRANCH_TABLE__ layout - - The first word of the header is used to locate multiple branch - tables, since each object file may contain one. Normally the links - are maintained with a call to an initialization routine, placed at - the beginning of each function in the file. The GNU C compiler - generates these calls automatically when you give it a `-b' option. - For further details, see the documentation of `gbr960'. - -`-no-relax' - Normally, Compare-and-Branch instructions with targets that require - displacements greater than 13 bits (or that have external targets) - are replaced with the corresponding compare (or `chkbit') and - branch instructions. You can use the `-no-relax' option to - specify that `as' should generate errors instead, if the target - displacement is larger than 13 bits. - - This option does not affect the Compare-and-Jump instructions; the - code emitted for them is _always_ adjusted when necessary - (depending on displacement size), regardless of whether you use - `-no-relax'. - - -File: as.info, Node: Floating Point-i960, Next: Directives-i960, Prev: Options-i960, Up: i960-Dependent - -9.17.2 Floating Point ---------------------- - -`as' generates IEEE floating-point numbers for the directives `.float', -`.double', `.extended', and `.single'. - - -File: as.info, Node: Directives-i960, Next: Opcodes for i960, Prev: Floating Point-i960, Up: i960-Dependent - -9.17.3 i960 Machine Directives ------------------------------- - -`.bss SYMBOL, LENGTH, ALIGN' - Reserve LENGTH bytes in the bss section for a local SYMBOL, - aligned to the power of two specified by ALIGN. LENGTH and ALIGN - must be positive absolute expressions. This directive differs - from `.lcomm' only in that it permits you to specify an alignment. - *Note `.lcomm': Lcomm. - -`.extended FLONUMS' - `.extended' expects zero or more flonums, separated by commas; for - each flonum, `.extended' emits an IEEE extended-format (80-bit) - floating-point number. - -`.leafproc CALL-LAB, BAL-LAB' - You can use the `.leafproc' directive in conjunction with the - optimized `callj' instruction to enable faster calls of leaf - procedures. If a procedure is known to call no other procedures, - you may define an entry point that skips procedure prolog code - (and that does not depend on system-supplied saved context), and - declare it as the BAL-LAB using `.leafproc'. If the procedure - also has an entry point that goes through the normal prolog, you - can specify that entry point as CALL-LAB. - - A `.leafproc' declaration is meant for use in conjunction with the - optimized call instruction `callj'; the directive records the data - needed later to choose between converting the `callj' into a `bal' - or a `call'. - - CALL-LAB is optional; if only one argument is present, or if the - two arguments are identical, the single argument is assumed to be - the `bal' entry point. - -`.sysproc NAME, INDEX' - The `.sysproc' directive defines a name for a system procedure. - After you define it using `.sysproc', you can use NAME to refer to - the system procedure identified by INDEX when calling procedures - with the optimized call instruction `callj'. - - Both arguments are required; INDEX must be between 0 and 31 - (inclusive). - - -File: as.info, Node: Opcodes for i960, Next: Syntax of i960, Prev: Directives-i960, Up: i960-Dependent - -9.17.4 i960 Opcodes -------------------- - -All Intel 960 machine instructions are supported; *note i960 -Command-line Options: Options-i960. for a discussion of selecting the -instruction subset for a particular 960 architecture. - - Some opcodes are processed beyond simply emitting a single -corresponding instruction: `callj', and Compare-and-Branch or -Compare-and-Jump instructions with target displacements larger than 13 -bits. - -* Menu: - -* callj-i960:: `callj' -* Compare-and-branch-i960:: Compare-and-Branch - - -File: as.info, Node: callj-i960, Next: Compare-and-branch-i960, Up: Opcodes for i960 - -9.17.4.1 `callj' -................ - -You can write `callj' to have the assembler or the linker determine the -most appropriate form of subroutine call: `call', `bal', or `calls'. -If the assembly source contains enough information--a `.leafproc' or -`.sysproc' directive defining the operand--then `as' translates the -`callj'; if not, it simply emits the `callj', leaving it for the linker -to resolve. - - -File: as.info, Node: Compare-and-branch-i960, Prev: callj-i960, Up: Opcodes for i960 - -9.17.4.2 Compare-and-Branch -........................... - -The 960 architectures provide combined Compare-and-Branch instructions -that permit you to store the branch target in the lower 13 bits of the -instruction word itself. However, if you specify a branch target far -enough away that its address won't fit in 13 bits, the assembler can -either issue an error, or convert your Compare-and-Branch instruction -into separate instructions to do the compare and the branch. - - Whether `as' gives an error or expands the instruction depends on -two choices you can make: whether you use the `-no-relax' option, and -whether you use a "Compare and Branch" instruction or a "Compare and -Jump" instruction. The "Jump" instructions are _always_ expanded if -necessary; the "Branch" instructions are expanded when necessary -_unless_ you specify `-no-relax'--in which case `as' gives an error -instead. - - These are the Compare-and-Branch instructions, their "Jump" variants, -and the instruction pairs they may expand into: - - Compare and - Branch Jump Expanded to - ------ ------ ------------ - bbc chkbit; bno - bbs chkbit; bo - cmpibe cmpije cmpi; be - cmpibg cmpijg cmpi; bg - cmpibge cmpijge cmpi; bge - cmpibl cmpijl cmpi; bl - cmpible cmpijle cmpi; ble - cmpibno cmpijno cmpi; bno - cmpibne cmpijne cmpi; bne - cmpibo cmpijo cmpi; bo - cmpobe cmpoje cmpo; be - cmpobg cmpojg cmpo; bg - cmpobge cmpojge cmpo; bge - cmpobl cmpojl cmpo; bl - cmpoble cmpojle cmpo; ble - cmpobne cmpojne cmpo; bne - - -File: as.info, Node: Syntax of i960, Prev: Opcodes for i960, Up: i960-Dependent - -9.17.5 Syntax for the i960 --------------------------- - -* Menu: - -* i960-Chars:: Special Characters - - -File: as.info, Node: i960-Chars, Up: Syntax of i960 - -9.17.5.1 Special Characters -........................... - -The presence of a `#' on a line indicates the start of a comment that -extends to the end of the current line. - - If a `#' appears as the first character of a line, the whole line is -treated as a comment, but in this case the line can also be a logical -line number directive (*note Comments::) or a preprocessor control -command (*note Preprocessing::). - - The `;' character can be used to separate statements on the same -line. - - -File: as.info, Node: IA-64-Dependent, Next: IP2K-Dependent, Prev: i960-Dependent, Up: Machine Dependencies - -9.18 IA-64 Dependent Features -============================= - -* Menu: - -* IA-64 Options:: Options -* IA-64 Syntax:: Syntax -* IA-64 Opcodes:: Opcodes - - -File: as.info, Node: IA-64 Options, Next: IA-64 Syntax, Up: IA-64-Dependent - -9.18.1 Options --------------- - -`-mconstant-gp' - This option instructs the assembler to mark the resulting object - file as using the "constant GP" model. With this model, it is - assumed that the entire program uses a single global pointer (GP) - value. Note that this option does not in any fashion affect the - machine code emitted by the assembler. All it does is turn on the - EF_IA_64_CONS_GP flag in the ELF file header. - -`-mauto-pic' - This option instructs the assembler to mark the resulting object - file as using the "constant GP without function descriptor" data - model. This model is like the "constant GP" model, except that it - additionally does away with function descriptors. What this means - is that the address of a function refers directly to the - function's code entry-point. Normally, such an address would - refer to a function descriptor, which contains both the code - entry-point and the GP-value needed by the function. Note that - this option does not in any fashion affect the machine code - emitted by the assembler. All it does is turn on the - EF_IA_64_NOFUNCDESC_CONS_GP flag in the ELF file header. - -`-milp32' -`-milp64' -`-mlp64' -`-mp64' - These options select the data model. The assembler defaults to - `-mlp64' (LP64 data model). - -`-mle' -`-mbe' - These options select the byte order. The `-mle' option selects - little-endian byte order (default) and `-mbe' selects big-endian - byte order. Note that IA-64 machine code always uses - little-endian byte order. - -`-mtune=itanium1' -`-mtune=itanium2' - Tune for a particular IA-64 CPU, ITANIUM1 or ITANIUM2. The default - is ITANIUM2. - -`-munwind-check=warning' -`-munwind-check=error' - These options control what the assembler will do when performing - consistency checks on unwind directives. `-munwind-check=warning' - will make the assembler issue a warning when an unwind directive - check fails. This is the default. `-munwind-check=error' will - make the assembler issue an error when an unwind directive check - fails. - -`-mhint.b=ok' -`-mhint.b=warning' -`-mhint.b=error' - These options control what the assembler will do when the `hint.b' - instruction is used. `-mhint.b=ok' will make the assembler accept - `hint.b'. `-mint.b=warning' will make the assembler issue a - warning when `hint.b' is used. `-mhint.b=error' will make the - assembler treat `hint.b' as an error, which is the default. - -`-x' -`-xexplicit' - These options turn on dependency violation checking. - -`-xauto' - This option instructs the assembler to automatically insert stop - bits where necessary to remove dependency violations. This is the - default mode. - -`-xnone' - This option turns off dependency violation checking. - -`-xdebug' - This turns on debug output intended to help tracking down bugs in - the dependency violation checker. - -`-xdebugn' - This is a shortcut for -xnone -xdebug. - -`-xdebugx' - This is a shortcut for -xexplicit -xdebug. - - - -File: as.info, Node: IA-64 Syntax, Next: IA-64 Opcodes, Prev: IA-64 Options, Up: IA-64-Dependent - -9.18.2 Syntax -------------- - -The assembler syntax closely follows the IA-64 Assembly Language -Reference Guide. - -* Menu: - -* IA-64-Chars:: Special Characters -* IA-64-Regs:: Register Names -* IA-64-Bits:: Bit Names -* IA-64-Relocs:: Relocations - - -File: as.info, Node: IA-64-Chars, Next: IA-64-Regs, Up: IA-64 Syntax - -9.18.2.1 Special Characters -........................... - -`//' is the line comment token. - - `;' can be used instead of a newline to separate statements. - - -File: as.info, Node: IA-64-Regs, Next: IA-64-Bits, Prev: IA-64-Chars, Up: IA-64 Syntax - -9.18.2.2 Register Names -....................... - -The 128 integer registers are referred to as `rN'. The 128 -floating-point registers are referred to as `fN'. The 128 application -registers are referred to as `arN'. The 128 control registers are -referred to as `crN'. The 64 one-bit predicate registers are referred -to as `pN'. The 8 branch registers are referred to as `bN'. In -addition, the assembler defines a number of aliases: `gp' (`r1'), `sp' -(`r12'), `rp' (`b0'), `ret0' (`r8'), `ret1' (`r9'), `ret2' (`r10'), -`ret3' (`r9'), `fargN' (`f8+N'), and `fretN' (`f8+N'). - - For convenience, the assembler also defines aliases for all named -application and control registers. For example, `ar.bsp' refers to the -register backing store pointer (`ar17'). Similarly, `cr.eoi' refers to -the end-of-interrupt register (`cr67'). - - -File: as.info, Node: IA-64-Bits, Next: IA-64-Relocs, Prev: IA-64-Regs, Up: IA-64 Syntax - -9.18.2.3 IA-64 Processor-Status-Register (PSR) Bit Names -........................................................ - -The assembler defines bit masks for each of the bits in the IA-64 -processor status register. For example, `psr.ic' corresponds to a -value of 0x2000. These masks are primarily intended for use with the -`ssm'/`sum' and `rsm'/`rum' instructions, but they can be used anywhere -else where an integer constant is expected. - - -File: as.info, Node: IA-64-Relocs, Prev: IA-64-Bits, Up: IA-64 Syntax - -9.18.2.4 Relocations -.................... - -In addition to the standard IA-64 relocations, the following -relocations are implemented by `as': - -`@slotcount(V)' - Convert the address offset V into a slot count. This pseudo - function is available only on VMS. The expression V must be known - at assembly time: it can't reference undefined symbols or symbols - in different sections. - - -File: as.info, Node: IA-64 Opcodes, Prev: IA-64 Syntax, Up: IA-64-Dependent - -9.18.3 Opcodes --------------- - -For detailed information on the IA-64 machine instruction set, see the -IA-64 Architecture Handbook -(http://developer.intel.com/design/itanium/arch_spec.htm). - - -File: as.info, Node: IP2K-Dependent, Next: LM32-Dependent, Prev: IA-64-Dependent, Up: Machine Dependencies - -9.19 IP2K Dependent Features -============================ - -* Menu: - -* IP2K-Opts:: IP2K Options -* IP2K-Syntax:: IP2K Syntax - - -File: as.info, Node: IP2K-Opts, Next: IP2K-Syntax, Up: IP2K-Dependent - -9.19.1 IP2K Options -------------------- - -The Ubicom IP2K version of `as' has a few machine dependent options: - -`-mip2022ext' - `as' can assemble the extended IP2022 instructions, but it will - only do so if this is specifically allowed via this command line - option. - -`-mip2022' - This option restores the assembler's default behaviour of not - permitting the extended IP2022 instructions to be assembled. - - - -File: as.info, Node: IP2K-Syntax, Prev: IP2K-Opts, Up: IP2K-Dependent - -9.19.2 IP2K Syntax ------------------- - -* Menu: - -* IP2K-Chars:: Special Characters - - -File: as.info, Node: IP2K-Chars, Up: IP2K-Syntax - -9.19.2.1 Special Characters -........................... - -The presence of a `;' on a line indicates the start of a comment that -extends to the end of the current line. - - If a `#' appears as the first character of a line, the whole line is -treated as a comment, but in this case the line can also be a logical -line number directive (*note Comments::) or a preprocessor control -command (*note Preprocessing::). - - The IP2K assembler does not currently support a line separator -character. - - -File: as.info, Node: LM32-Dependent, Next: M32C-Dependent, Prev: IP2K-Dependent, Up: Machine Dependencies - -9.20 LM32 Dependent Features -============================ - -* Menu: - -* LM32 Options:: Options -* LM32 Syntax:: Syntax -* LM32 Opcodes:: Opcodes - - -File: as.info, Node: LM32 Options, Next: LM32 Syntax, Up: LM32-Dependent - -9.20.1 Options --------------- - -`-mmultiply-enabled' - Enable multiply instructions. - -`-mdivide-enabled' - Enable divide instructions. - -`-mbarrel-shift-enabled' - Enable barrel-shift instructions. - -`-msign-extend-enabled' - Enable sign extend instructions. - -`-muser-enabled' - Enable user defined instructions. - -`-micache-enabled' - Enable instruction cache related CSRs. - -`-mdcache-enabled' - Enable data cache related CSRs. - -`-mbreak-enabled' - Enable break instructions. - -`-mall-enabled' - Enable all instructions and CSRs. - - - -File: as.info, Node: LM32 Syntax, Next: LM32 Opcodes, Prev: LM32 Options, Up: LM32-Dependent - -9.20.2 Syntax -------------- - -* Menu: - -* LM32-Regs:: Register Names -* LM32-Modifiers:: Relocatable Expression Modifiers -* LM32-Chars:: Special Characters - - -File: as.info, Node: LM32-Regs, Next: LM32-Modifiers, Up: LM32 Syntax - -9.20.2.1 Register Names -....................... - -LM32 has 32 x 32-bit general purpose registers `r0', `r1', ... `r31'. - - The following aliases are defined: `gp' - `r26', `fp' - `r27', `sp' -- `r28', `ra' - `r29', `ea' - `r30', `ba' - `r31'. - - LM32 has the following Control and Status Registers (CSRs). - -`IE' - Interrupt enable. - -`IM' - Interrupt mask. - -`IP' - Interrupt pending. - -`ICC' - Instruction cache control. - -`DCC' - Data cache control. - -`CC' - Cycle counter. - -`CFG' - Configuration. - -`EBA' - Exception base address. - -`DC' - Debug control. - -`DEBA' - Debug exception base address. - -`JTX' - JTAG transmit. - -`JRX' - JTAG receive. - -`BP0' - Breakpoint 0. - -`BP1' - Breakpoint 1. - -`BP2' - Breakpoint 2. - -`BP3' - Breakpoint 3. - -`WP0' - Watchpoint 0. - -`WP1' - Watchpoint 1. - -`WP2' - Watchpoint 2. - -`WP3' - Watchpoint 3. - - -File: as.info, Node: LM32-Modifiers, Next: LM32-Chars, Prev: LM32-Regs, Up: LM32 Syntax - -9.20.2.2 Relocatable Expression Modifiers -......................................... - -The assembler supports several modifiers when using relocatable -addresses in LM32 instruction operands. The general syntax is the -following: - - modifier(relocatable-expression) - -`lo' - This modifier allows you to use bits 0 through 15 of an address - expression as 16 bit relocatable expression. - -`hi' - This modifier allows you to use bits 16 through 23 of an address - expression as 16 bit relocatable expression. - - For example - - ori r4, r4, lo(sym+10) - orhi r4, r4, hi(sym+10) - -`gp' - This modified creates a 16-bit relocatable expression that is the - offset of the symbol from the global pointer. - - mva r4, gp(sym) - -`got' - This modifier places a symbol in the GOT and creates a 16-bit - relocatable expression that is the offset into the GOT of this - symbol. - - lw r4, (gp+got(sym)) - -`gotofflo16' - This modifier allows you to use the bits 0 through 15 of an - address which is an offset from the GOT. - -`gotoffhi16' - This modifier allows you to use the bits 16 through 31 of an - address which is an offset from the GOT. - - orhi r4, r4, gotoffhi16(lsym) - addi r4, r4, gotofflo16(lsym) - - - -File: as.info, Node: LM32-Chars, Prev: LM32-Modifiers, Up: LM32 Syntax - -9.20.2.3 Special Characters -........................... - -The presence of a `#' on a line indicates the start of a comment that -extends to the end of the current line. Note that if a line starts -with a `#' character then it can also be a logical line number -directive (*note Comments::) or a preprocessor control command (*note -Preprocessing::). - - A semicolon (`;') can be used to separate multiple statements on the -same line. - - -File: as.info, Node: LM32 Opcodes, Prev: LM32 Syntax, Up: LM32-Dependent - -9.20.3 Opcodes --------------- - -For detailed information on the LM32 machine instruction set, see -`http://www.latticesemi.com/products/intellectualproperty/ipcores/mico32/'. - - `as' implements all the standard LM32 opcodes. - - -File: as.info, Node: M32C-Dependent, Next: M32R-Dependent, Prev: LM32-Dependent, Up: Machine Dependencies - -9.21 M32C Dependent Features -============================ - - `as' can assemble code for several different members of the Renesas -M32C family. Normally the default is to assemble code for the M16C -microprocessor. The `-m32c' option may be used to change the default -to the M32C microprocessor. - -* Menu: - -* M32C-Opts:: M32C Options -* M32C-Syntax:: M32C Syntax - - -File: as.info, Node: M32C-Opts, Next: M32C-Syntax, Up: M32C-Dependent - -9.21.1 M32C Options -------------------- - -The Renesas M32C version of `as' has these machine-dependent options: - -`-m32c' - Assemble M32C instructions. - -`-m16c' - Assemble M16C instructions (default). - -`-relax' - Enable support for link-time relaxations. - -`-h-tick-hex' - Support H'00 style hex constants in addition to 0x00 style. - - - -File: as.info, Node: M32C-Syntax, Prev: M32C-Opts, Up: M32C-Dependent - -9.21.2 M32C Syntax ------------------- - -* Menu: - -* M32C-Modifiers:: Symbolic Operand Modifiers -* M32C-Chars:: Special Characters - - -File: as.info, Node: M32C-Modifiers, Next: M32C-Chars, Up: M32C-Syntax - -9.21.2.1 Symbolic Operand Modifiers -................................... - -The assembler supports several modifiers when using symbol addresses in -M32C instruction operands. The general syntax is the following: - - %modifier(symbol) - -`%dsp8' -`%dsp16' - These modifiers override the assembler's assumptions about how big - a symbol's address is. Normally, when it sees an operand like - `sym[a0]' it assumes `sym' may require the widest displacement - field (16 bits for `-m16c', 24 bits for `-m32c'). These modifiers - tell it to assume the address will fit in an 8 or 16 bit - (respectively) unsigned displacement. Note that, of course, if it - doesn't actually fit you will get linker errors. Example: - - mov.w %dsp8(sym)[a0],r1 - mov.b #0,%dsp8(sym)[a0] - -`%hi8' - This modifier allows you to load bits 16 through 23 of a 24 bit - address into an 8 bit register. This is useful with, for example, - the M16C `smovf' instruction, which expects a 20 bit address in - `r1h' and `a0'. Example: - - mov.b #%hi8(sym),r1h - mov.w #%lo16(sym),a0 - smovf.b - -`%lo16' - Likewise, this modifier allows you to load bits 0 through 15 of a - 24 bit address into a 16 bit register. - -`%hi16' - This modifier allows you to load bits 16 through 31 of a 32 bit - address into a 16 bit register. While the M32C family only has 24 - bits of address space, it does support addresses in pairs of 16 bit - registers (like `a1a0' for the `lde' instruction). This modifier - is for loading the upper half in such cases. Example: - - mov.w #%hi16(sym),a1 - mov.w #%lo16(sym),a0 - ... - lde.w [a1a0],r1 - - - -File: as.info, Node: M32C-Chars, Prev: M32C-Modifiers, Up: M32C-Syntax - -9.21.2.2 Special Characters -........................... - -The presence of a `;' character on a line indicates the start of a -comment that extends to the end of that line. - - If a `#' appears as the first character of a line, the whole line is -treated as a comment, but in this case the line can also be a logical -line number directive (*note Comments::) or a preprocessor control -command (*note Preprocessing::). - - The `|' character can be used to separate statements on the same -line. - - -File: as.info, Node: M32R-Dependent, Next: M68K-Dependent, Prev: M32C-Dependent, Up: Machine Dependencies - -9.22 M32R Dependent Features -============================ - -* Menu: - -* M32R-Opts:: M32R Options -* M32R-Directives:: M32R Directives -* M32R-Warnings:: M32R Warnings - - -File: as.info, Node: M32R-Opts, Next: M32R-Directives, Up: M32R-Dependent - -9.22.1 M32R Options -------------------- - -The Renease M32R version of `as' has a few machine dependent options: - -`-m32rx' - `as' can assemble code for several different members of the - Renesas M32R family. Normally the default is to assemble code for - the M32R microprocessor. This option may be used to change the - default to the M32RX microprocessor, which adds some more - instructions to the basic M32R instruction set, and some - additional parameters to some of the original instructions. - -`-m32r2' - This option changes the target processor to the M32R2 - microprocessor. - -`-m32r' - This option can be used to restore the assembler's default - behaviour of assembling for the M32R microprocessor. This can be - useful if the default has been changed by a previous command line - option. - -`-little' - This option tells the assembler to produce little-endian code and - data. The default is dependent upon how the toolchain was - configured. - -`-EL' - This is a synonym for _-little_. - -`-big' - This option tells the assembler to produce big-endian code and - data. - -`-EB' - This is a synonum for _-big_. - -`-KPIC' - This option specifies that the output of the assembler should be - marked as position-independent code (PIC). - -`-parallel' - This option tells the assembler to attempts to combine two - sequential instructions into a single, parallel instruction, where - it is legal to do so. - -`-no-parallel' - This option disables a previously enabled _-parallel_ option. - -`-no-bitinst' - This option disables the support for the extended bit-field - instructions provided by the M32R2. If this support needs to be - re-enabled the _-bitinst_ switch can be used to restore it. - -`-O' - This option tells the assembler to attempt to optimize the - instructions that it produces. This includes filling delay slots - and converting sequential instructions into parallel ones. This - option implies _-parallel_. - -`-warn-explicit-parallel-conflicts' - Instructs `as' to produce warning messages when questionable - parallel instructions are encountered. This option is enabled by - default, but `gcc' disables it when it invokes `as' directly. - Questionable instructions are those whose behaviour would be - different if they were executed sequentially. For example the - code fragment `mv r1, r2 || mv r3, r1' produces a different result - from `mv r1, r2 \n mv r3, r1' since the former moves r1 into r3 - and then r2 into r1, whereas the later moves r2 into r1 and r3. - -`-Wp' - This is a shorter synonym for the - _-warn-explicit-parallel-conflicts_ option. - -`-no-warn-explicit-parallel-conflicts' - Instructs `as' not to produce warning messages when questionable - parallel instructions are encountered. - -`-Wnp' - This is a shorter synonym for the - _-no-warn-explicit-parallel-conflicts_ option. - -`-ignore-parallel-conflicts' - This option tells the assembler's to stop checking parallel - instructions for constraint violations. This ability is provided - for hardware vendors testing chip designs and should not be used - under normal circumstances. - -`-no-ignore-parallel-conflicts' - This option restores the assembler's default behaviour of checking - parallel instructions to detect constraint violations. - -`-Ip' - This is a shorter synonym for the _-ignore-parallel-conflicts_ - option. - -`-nIp' - This is a shorter synonym for the _-no-ignore-parallel-conflicts_ - option. - -`-warn-unmatched-high' - This option tells the assembler to produce a warning message if a - `.high' pseudo op is encountered without a matching `.low' pseudo - op. The presence of such an unmatched pseudo op usually indicates - a programming error. - -`-no-warn-unmatched-high' - Disables a previously enabled _-warn-unmatched-high_ option. - -`-Wuh' - This is a shorter synonym for the _-warn-unmatched-high_ option. - -`-Wnuh' - This is a shorter synonym for the _-no-warn-unmatched-high_ option. - - - -File: as.info, Node: M32R-Directives, Next: M32R-Warnings, Prev: M32R-Opts, Up: M32R-Dependent - -9.22.2 M32R Directives ----------------------- - -The Renease M32R version of `as' has a few architecture specific -directives: - -`low EXPRESSION' - The `low' directive computes the value of its expression and - places the lower 16-bits of the result into the immediate-field of - the instruction. For example: - - or3 r0, r0, #low(0x12345678) ; compute r0 = r0 | 0x5678 - add3, r0, r0, #low(fred) ; compute r0 = r0 + low 16-bits of address of fred - -`high EXPRESSION' - The `high' directive computes the value of its expression and - places the upper 16-bits of the result into the immediate-field of - the instruction. For example: - - seth r0, #high(0x12345678) ; compute r0 = 0x12340000 - seth, r0, #high(fred) ; compute r0 = upper 16-bits of address of fred - -`shigh EXPRESSION' - The `shigh' directive is very similar to the `high' directive. It - also computes the value of its expression and places the upper - 16-bits of the result into the immediate-field of the instruction. - The difference is that `shigh' also checks to see if the lower - 16-bits could be interpreted as a signed number, and if so it - assumes that a borrow will occur from the upper-16 bits. To - compensate for this the `shigh' directive pre-biases the upper 16 - bit value by adding one to it. For example: - - For example: - - seth r0, #shigh(0x12345678) ; compute r0 = 0x12340000 - seth r0, #shigh(0x00008000) ; compute r0 = 0x00010000 - - In the second example the lower 16-bits are 0x8000. If these are - treated as a signed value and sign extended to 32-bits then the - value becomes 0xffff8000. If this value is then added to - 0x00010000 then the result is 0x00008000. - - This behaviour is to allow for the different semantics of the - `or3' and `add3' instructions. The `or3' instruction treats its - 16-bit immediate argument as unsigned whereas the `add3' treats - its 16-bit immediate as a signed value. So for example: - - seth r0, #shigh(0x00008000) - add3 r0, r0, #low(0x00008000) - - Produces the correct result in r0, whereas: - - seth r0, #shigh(0x00008000) - or3 r0, r0, #low(0x00008000) - - Stores 0xffff8000 into r0. - - Note - the `shigh' directive does not know where in the assembly - source code the lower 16-bits of the value are going set, so it - cannot check to make sure that an `or3' instruction is being used - rather than an `add3' instruction. It is up to the programmer to - make sure that correct directives are used. - -`.m32r' - The directive performs a similar thing as the _-m32r_ command line - option. It tells the assembler to only accept M32R instructions - from now on. An instructions from later M32R architectures are - refused. - -`.m32rx' - The directive performs a similar thing as the _-m32rx_ command - line option. It tells the assembler to start accepting the extra - instructions in the M32RX ISA as well as the ordinary M32R ISA. - -`.m32r2' - The directive performs a similar thing as the _-m32r2_ command - line option. It tells the assembler to start accepting the extra - instructions in the M32R2 ISA as well as the ordinary M32R ISA. - -`.little' - The directive performs a similar thing as the _-little_ command - line option. It tells the assembler to start producing - little-endian code and data. This option should be used with care - as producing mixed-endian binary files is fraught with danger. - -`.big' - The directive performs a similar thing as the _-big_ command line - option. It tells the assembler to start producing big-endian code - and data. This option should be used with care as producing - mixed-endian binary files is fraught with danger. - - - -File: as.info, Node: M32R-Warnings, Prev: M32R-Directives, Up: M32R-Dependent - -9.22.3 M32R Warnings --------------------- - -There are several warning and error messages that can be produced by -`as' which are specific to the M32R: - -`output of 1st instruction is the same as an input to 2nd instruction - is this intentional ?' - This message is only produced if warnings for explicit parallel - conflicts have been enabled. It indicates that the assembler has - encountered a parallel instruction in which the destination - register of the left hand instruction is used as an input register - in the right hand instruction. For example in this code fragment - `mv r1, r2 || neg r3, r1' register r1 is the destination of the - move instruction and the input to the neg instruction. - -`output of 2nd instruction is the same as an input to 1st instruction - is this intentional ?' - This message is only produced if warnings for explicit parallel - conflicts have been enabled. It indicates that the assembler has - encountered a parallel instruction in which the destination - register of the right hand instruction is used as an input - register in the left hand instruction. For example in this code - fragment `mv r1, r2 || neg r2, r3' register r2 is the destination - of the neg instruction and the input to the move instruction. - -`instruction `...' is for the M32RX only' - This message is produced when the assembler encounters an - instruction which is only supported by the M32Rx processor, and - the `-m32rx' command line flag has not been specified to allow - assembly of such instructions. - -`unknown instruction `...'' - This message is produced when the assembler encounters an - instruction which it does not recognize. - -`only the NOP instruction can be issued in parallel on the m32r' - This message is produced when the assembler encounters a parallel - instruction which does not involve a NOP instruction and the - `-m32rx' command line flag has not been specified. Only the M32Rx - processor is able to execute two instructions in parallel. - -`instruction `...' cannot be executed in parallel.' - This message is produced when the assembler encounters a parallel - instruction which is made up of one or two instructions which - cannot be executed in parallel. - -`Instructions share the same execution pipeline' - This message is produced when the assembler encounters a parallel - instruction whoes components both use the same execution pipeline. - -`Instructions write to the same destination register.' - This message is produced when the assembler encounters a parallel - instruction where both components attempt to modify the same - register. For example these code fragments will produce this - message: `mv r1, r2 || neg r1, r3' `jl r0 || mv r14, r1' `st r2, - @-r1 || mv r1, r3' `mv r1, r2 || ld r0, @r1+' `cmp r1, r2 || addx - r3, r4' (Both write to the condition bit) - - - -File: as.info, Node: M68K-Dependent, Next: M68HC11-Dependent, Prev: M32R-Dependent, Up: Machine Dependencies - -9.23 M680x0 Dependent Features -============================== - -* Menu: - -* M68K-Opts:: M680x0 Options -* M68K-Syntax:: Syntax -* M68K-Moto-Syntax:: Motorola Syntax -* M68K-Float:: Floating Point -* M68K-Directives:: 680x0 Machine Directives -* M68K-opcodes:: Opcodes - - -File: as.info, Node: M68K-Opts, Next: M68K-Syntax, Up: M68K-Dependent - -9.23.1 M680x0 Options ---------------------- - -The Motorola 680x0 version of `as' has a few machine dependent options: - -`-march=ARCHITECTURE' - This option specifies a target architecture. The following - architectures are recognized: `68000', `68010', `68020', `68030', - `68040', `68060', `cpu32', `isaa', `isaaplus', `isab', `isac' and - `cfv4e'. - -`-mcpu=CPU' - This option specifies a target cpu. When used in conjunction with - the `-march' option, the cpu must be within the specified - architecture. Also, the generic features of the architecture are - used for instruction generation, rather than those of the specific - chip. - -`-m[no-]68851' -`-m[no-]68881' -`-m[no-]div' -`-m[no-]usp' -`-m[no-]float' -`-m[no-]mac' -`-m[no-]emac' - Enable or disable various architecture specific features. If a - chip or architecture by default supports an option (for instance - `-march=isaaplus' includes the `-mdiv' option), explicitly - disabling the option will override the default. - -`-l' - You can use the `-l' option to shorten the size of references to - undefined symbols. If you do not use the `-l' option, references - to undefined symbols are wide enough for a full `long' (32 bits). - (Since `as' cannot know where these symbols end up, `as' can only - allocate space for the linker to fill in later. Since `as' does - not know how far away these symbols are, it allocates as much - space as it can.) If you use this option, the references are only - one word wide (16 bits). This may be useful if you want the - object file to be as small as possible, and you know that the - relevant symbols are always less than 17 bits away. - -`--register-prefix-optional' - For some configurations, especially those where the compiler - normally does not prepend an underscore to the names of user - variables, the assembler requires a `%' before any use of a - register name. This is intended to let the assembler distinguish - between C variables and functions named `a0' through `a7', and so - on. The `%' is always accepted, but is not required for certain - configurations, notably `sun3'. The `--register-prefix-optional' - option may be used to permit omitting the `%' even for - configurations for which it is normally required. If this is - done, it will generally be impossible to refer to C variables and - functions with the same names as register names. - -`--bitwise-or' - Normally the character `|' is treated as a comment character, which - means that it can not be used in expressions. The `--bitwise-or' - option turns `|' into a normal character. In this mode, you must - either use C style comments, or start comments with a `#' character - at the beginning of a line. - -`--base-size-default-16 --base-size-default-32' - If you use an addressing mode with a base register without - specifying the size, `as' will normally use the full 32 bit value. - For example, the addressing mode `%a0@(%d0)' is equivalent to - `%a0@(%d0:l)'. You may use the `--base-size-default-16' option to - tell `as' to default to using the 16 bit value. In this case, - `%a0@(%d0)' is equivalent to `%a0@(%d0:w)'. You may use the - `--base-size-default-32' option to restore the default behaviour. - -`--disp-size-default-16 --disp-size-default-32' - If you use an addressing mode with a displacement, and the value - of the displacement is not known, `as' will normally assume that - the value is 32 bits. For example, if the symbol `disp' has not - been defined, `as' will assemble the addressing mode - `%a0@(disp,%d0)' as though `disp' is a 32 bit value. You may use - the `--disp-size-default-16' option to tell `as' to instead assume - that the displacement is 16 bits. In this case, `as' will - assemble `%a0@(disp,%d0)' as though `disp' is a 16 bit value. You - may use the `--disp-size-default-32' option to restore the default - behaviour. - -`--pcrel' - Always keep branches PC-relative. In the M680x0 architecture all - branches are defined as PC-relative. However, on some processors - they are limited to word displacements maximum. When `as' needs a - long branch that is not available, it normally emits an absolute - jump instead. This option disables this substitution. When this - option is given and no long branches are available, only word - branches will be emitted. An error message will be generated if a - word branch cannot reach its target. This option has no effect on - 68020 and other processors that have long branches. *note Branch - Improvement: M68K-Branch. - -`-m68000' - `as' can assemble code for several different members of the - Motorola 680x0 family. The default depends upon how `as' was - configured when it was built; normally, the default is to assemble - code for the 68020 microprocessor. The following options may be - used to change the default. These options control which - instructions and addressing modes are permitted. The members of - the 680x0 family are very similar. For detailed information about - the differences, see the Motorola manuals. - - `-m68000' - `-m68ec000' - `-m68hc000' - `-m68hc001' - `-m68008' - `-m68302' - `-m68306' - `-m68307' - `-m68322' - `-m68356' - Assemble for the 68000. `-m68008', `-m68302', and so on are - synonyms for `-m68000', since the chips are the same from the - point of view of the assembler. - - `-m68010' - Assemble for the 68010. - - `-m68020' - `-m68ec020' - Assemble for the 68020. This is normally the default. - - `-m68030' - `-m68ec030' - Assemble for the 68030. - - `-m68040' - `-m68ec040' - Assemble for the 68040. - - `-m68060' - `-m68ec060' - Assemble for the 68060. - - `-mcpu32' - `-m68330' - `-m68331' - `-m68332' - `-m68333' - `-m68334' - `-m68336' - `-m68340' - `-m68341' - `-m68349' - `-m68360' - Assemble for the CPU32 family of chips. - - `-m5200' - `-m5202' - `-m5204' - `-m5206' - `-m5206e' - `-m521x' - `-m5249' - `-m528x' - `-m5307' - `-m5407' - `-m547x' - `-m548x' - `-mcfv4' - `-mcfv4e' - Assemble for the ColdFire family of chips. - - `-m68881' - `-m68882' - Assemble 68881 floating point instructions. This is the - default for the 68020, 68030, and the CPU32. The 68040 and - 68060 always support floating point instructions. - - `-mno-68881' - Do not assemble 68881 floating point instructions. This is - the default for 68000 and the 68010. The 68040 and 68060 - always support floating point instructions, even if this - option is used. - - `-m68851' - Assemble 68851 MMU instructions. This is the default for the - 68020, 68030, and 68060. The 68040 accepts a somewhat - different set of MMU instructions; `-m68851' and `-m68040' - should not be used together. - - `-mno-68851' - Do not assemble 68851 MMU instructions. This is the default - for the 68000, 68010, and the CPU32. The 68040 accepts a - somewhat different set of MMU instructions. - - -File: as.info, Node: M68K-Syntax, Next: M68K-Moto-Syntax, Prev: M68K-Opts, Up: M68K-Dependent - -9.23.2 Syntax -------------- - -This syntax for the Motorola 680x0 was developed at MIT. - - The 680x0 version of `as' uses instructions names and syntax -compatible with the Sun assembler. Intervening periods are ignored; -for example, `movl' is equivalent to `mov.l'. - - In the following table APC stands for any of the address registers -(`%a0' through `%a7'), the program counter (`%pc'), the zero-address -relative to the program counter (`%zpc'), a suppressed address register -(`%za0' through `%za7'), or it may be omitted entirely. The use of -SIZE means one of `w' or `l', and it may be omitted, along with the -leading colon, unless a scale is also specified. The use of SCALE -means one of `1', `2', `4', or `8', and it may always be omitted along -with the leading colon. - - The following addressing modes are understood: -"Immediate" - `#NUMBER' - -"Data Register" - `%d0' through `%d7' - -"Address Register" - `%a0' through `%a7' - `%a7' is also known as `%sp', i.e., the Stack Pointer. `%a6' is - also known as `%fp', the Frame Pointer. - -"Address Register Indirect" - `%a0@' through `%a7@' - -"Address Register Postincrement" - `%a0@+' through `%a7@+' - -"Address Register Predecrement" - `%a0@-' through `%a7@-' - -"Indirect Plus Offset" - `APC@(NUMBER)' - -"Index" - `APC@(NUMBER,REGISTER:SIZE:SCALE)' - - The NUMBER may be omitted. - -"Postindex" - `APC@(NUMBER)@(ONUMBER,REGISTER:SIZE:SCALE)' - - The ONUMBER or the REGISTER, but not both, may be omitted. - -"Preindex" - `APC@(NUMBER,REGISTER:SIZE:SCALE)@(ONUMBER)' - - The NUMBER may be omitted. Omitting the REGISTER produces the - Postindex addressing mode. - -"Absolute" - `SYMBOL', or `DIGITS', optionally followed by `:b', `:w', or `:l'. - - -File: as.info, Node: M68K-Moto-Syntax, Next: M68K-Float, Prev: M68K-Syntax, Up: M68K-Dependent - -9.23.3 Motorola Syntax ----------------------- - -The standard Motorola syntax for this chip differs from the syntax -already discussed (*note Syntax: M68K-Syntax.). `as' can accept -Motorola syntax for operands, even if MIT syntax is used for other -operands in the same instruction. The two kinds of syntax are fully -compatible. - - In the following table APC stands for any of the address registers -(`%a0' through `%a7'), the program counter (`%pc'), the zero-address -relative to the program counter (`%zpc'), or a suppressed address -register (`%za0' through `%za7'). The use of SIZE means one of `w' or -`l', and it may always be omitted along with the leading dot. The use -of SCALE means one of `1', `2', `4', or `8', and it may always be -omitted along with the leading asterisk. - - The following additional addressing modes are understood: - -"Address Register Indirect" - `(%a0)' through `(%a7)' - `%a7' is also known as `%sp', i.e., the Stack Pointer. `%a6' is - also known as `%fp', the Frame Pointer. - -"Address Register Postincrement" - `(%a0)+' through `(%a7)+' - -"Address Register Predecrement" - `-(%a0)' through `-(%a7)' - -"Indirect Plus Offset" - `NUMBER(%A0)' through `NUMBER(%A7)', or `NUMBER(%PC)'. - - The NUMBER may also appear within the parentheses, as in - `(NUMBER,%A0)'. When used with the PC, the NUMBER may be omitted - (with an address register, omitting the NUMBER produces Address - Register Indirect mode). - -"Index" - `NUMBER(APC,REGISTER.SIZE*SCALE)' - - The NUMBER may be omitted, or it may appear within the - parentheses. The APC may be omitted. The REGISTER and the APC - may appear in either order. If both APC and REGISTER are address - registers, and the SIZE and SCALE are omitted, then the first - register is taken as the base register, and the second as the - index register. - -"Postindex" - `([NUMBER,APC],REGISTER.SIZE*SCALE,ONUMBER)' - - The ONUMBER, or the REGISTER, or both, may be omitted. Either the - NUMBER or the APC may be omitted, but not both. - -"Preindex" - `([NUMBER,APC,REGISTER.SIZE*SCALE],ONUMBER)' - - The NUMBER, or the APC, or the REGISTER, or any two of them, may - be omitted. The ONUMBER may be omitted. The REGISTER and the APC - may appear in either order. If both APC and REGISTER are address - registers, and the SIZE and SCALE are omitted, then the first - register is taken as the base register, and the second as the - index register. - - -File: as.info, Node: M68K-Float, Next: M68K-Directives, Prev: M68K-Moto-Syntax, Up: M68K-Dependent - -9.23.4 Floating Point ---------------------- - -Packed decimal (P) format floating literals are not supported. Feel -free to add the code! - - The floating point formats generated by directives are these. - -`.float' - `Single' precision floating point constants. - -`.double' - `Double' precision floating point constants. - -`.extend' -`.ldouble' - `Extended' precision (`long double') floating point constants. - - -File: as.info, Node: M68K-Directives, Next: M68K-opcodes, Prev: M68K-Float, Up: M68K-Dependent - -9.23.5 680x0 Machine Directives -------------------------------- - -In order to be compatible with the Sun assembler the 680x0 assembler -understands the following directives. - -`.data1' - This directive is identical to a `.data 1' directive. - -`.data2' - This directive is identical to a `.data 2' directive. - -`.even' - This directive is a special case of the `.align' directive; it - aligns the output to an even byte boundary. - -`.skip' - This directive is identical to a `.space' directive. - -`.arch NAME' - Select the target architecture and extension features. Valid - values for NAME are the same as for the `-march' command line - option. This directive cannot be specified after any instructions - have been assembled. If it is given multiple times, or in - conjunction with the `-march' option, all uses must be for the - same architecture and extension set. - -`.cpu NAME' - Select the target cpu. Valid valuse for NAME are the same as for - the `-mcpu' command line option. This directive cannot be - specified after any instructions have been assembled. If it is - given multiple times, or in conjunction with the `-mopt' option, - all uses must be for the same cpu. - - - -File: as.info, Node: M68K-opcodes, Prev: M68K-Directives, Up: M68K-Dependent - -9.23.6 Opcodes --------------- - -* Menu: - -* M68K-Branch:: Branch Improvement -* M68K-Chars:: Special Characters - - -File: as.info, Node: M68K-Branch, Next: M68K-Chars, Up: M68K-opcodes - -9.23.6.1 Branch Improvement -........................... - -Certain pseudo opcodes are permitted for branch instructions. They -expand to the shortest branch instruction that reach the target. -Generally these mnemonics are made by substituting `j' for `b' at the -start of a Motorola mnemonic. - - The following table summarizes the pseudo-operations. A `*' flags -cases that are more fully described after the table: - - Displacement - +------------------------------------------------------------ - | 68020 68000/10, not PC-relative OK - Pseudo-Op |BYTE WORD LONG ABSOLUTE LONG JUMP ** - +------------------------------------------------------------ - jbsr |bsrs bsrw bsrl jsr - jra |bras braw bral jmp - * jXX |bXXs bXXw bXXl bNXs;jmp - * dbXX | N/A dbXXw dbXX;bras;bral dbXX;bras;jmp - fjXX | N/A fbXXw fbXXl N/A - - XX: condition - NX: negative of condition XX - `*'--see full description below - `**'--this expansion mode is disallowed by `--pcrel' - -`jbsr' -`jra' - These are the simplest jump pseudo-operations; they always map to - one particular machine instruction, depending on the displacement - to the branch target. This instruction will be a byte or word - branch is that is sufficient. Otherwise, a long branch will be - emitted if available. If no long branches are available and the - `--pcrel' option is not given, an absolute long jump will be - emitted instead. If no long branches are available, the `--pcrel' - option is given, and a word branch cannot reach the target, an - error message is generated. - - In addition to standard branch operands, `as' allows these - pseudo-operations to have all operands that are allowed for jsr - and jmp, substituting these instructions if the operand given is - not valid for a branch instruction. - -`jXX' - Here, `jXX' stands for an entire family of pseudo-operations, - where XX is a conditional branch or condition-code test. The full - list of pseudo-ops in this family is: - jhi jls jcc jcs jne jeq jvc - jvs jpl jmi jge jlt jgt jle - - Usually, each of these pseudo-operations expands to a single branch - instruction. However, if a word branch is not sufficient, no long - branches are available, and the `--pcrel' option is not given, `as' - issues a longer code fragment in terms of NX, the opposite - condition to XX. For example, under these conditions: - jXX foo - gives - bNXs oof - jmp foo - oof: - -`dbXX' - The full family of pseudo-operations covered here is - dbhi dbls dbcc dbcs dbne dbeq dbvc - dbvs dbpl dbmi dbge dblt dbgt dble - dbf dbra dbt - - Motorola `dbXX' instructions allow word displacements only. When - a word displacement is sufficient, each of these pseudo-operations - expands to the corresponding Motorola instruction. When a word - displacement is not sufficient and long branches are available, - when the source reads `dbXX foo', `as' emits - dbXX oo1 - bras oo2 - oo1:bral foo - oo2: - - If, however, long branches are not available and the `--pcrel' - option is not given, `as' emits - dbXX oo1 - bras oo2 - oo1:jmp foo - oo2: - -`fjXX' - This family includes - fjne fjeq fjge fjlt fjgt fjle fjf - fjt fjgl fjgle fjnge fjngl fjngle fjngt - fjnle fjnlt fjoge fjogl fjogt fjole fjolt - fjor fjseq fjsf fjsne fjst fjueq fjuge - fjugt fjule fjult fjun - - Each of these pseudo-operations always expands to a single Motorola - coprocessor branch instruction, word or long. All Motorola - coprocessor branch instructions allow both word and long - displacements. - - - -File: as.info, Node: M68K-Chars, Prev: M68K-Branch, Up: M68K-opcodes - -9.23.6.2 Special Characters -........................... - -Line comments are introduced by the `|' character appearing anywhere on -a line, unless the `--bitwise-or' command line option has been -specified. - - An asterisk (`*') as the first character on a line marks the start -of a line comment as well. - - A hash character (`#') as the first character on a line also marks -the start of a line comment, but in this case it could also be a -logical line number directive (*note Comments::) or a preprocessor -control command (*note Preprocessing::). If the hash character appears -elsewhere on a line it is used to introduce an immediate value. (This -is for compatibility with Sun's assembler). - - Multiple statements on the same line can appear if they are separated -by the `;' character. - - -File: as.info, Node: M68HC11-Dependent, Next: Meta-Dependent, Prev: M68K-Dependent, Up: Machine Dependencies - -9.24 M68HC11 and M68HC12 Dependent Features -=========================================== - -* Menu: - -* M68HC11-Opts:: M68HC11 and M68HC12 Options -* M68HC11-Syntax:: Syntax -* M68HC11-Modifiers:: Symbolic Operand Modifiers -* M68HC11-Directives:: Assembler Directives -* M68HC11-Float:: Floating Point -* M68HC11-opcodes:: Opcodes - - -File: as.info, Node: M68HC11-Opts, Next: M68HC11-Syntax, Up: M68HC11-Dependent - -9.24.1 M68HC11 and M68HC12 Options ----------------------------------- - -The Motorola 68HC11 and 68HC12 version of `as' have a few machine -dependent options. - -`-m68hc11' - This option switches the assembler into the M68HC11 mode. In this - mode, the assembler only accepts 68HC11 operands and mnemonics. It - produces code for the 68HC11. - -`-m68hc12' - This option switches the assembler into the M68HC12 mode. In this - mode, the assembler also accepts 68HC12 operands and mnemonics. It - produces code for the 68HC12. A few 68HC11 instructions are - replaced by some 68HC12 instructions as recommended by Motorola - specifications. - -`-m68hcs12' - This option switches the assembler into the M68HCS12 mode. This - mode is similar to `-m68hc12' but specifies to assemble for the - 68HCS12 series. The only difference is on the assembling of the - `movb' and `movw' instruction when a PC-relative operand is used. - -`-mm9s12x' - This option switches the assembler into the M9S12X mode. This - mode is similar to `-m68hc12' but specifies to assemble for the - S12X series which is a superset of the HCS12. - -`-mm9s12xg' - This option switches the assembler into the XGATE mode for the RISC - co-processor featured on some S12X-family chips. - -`--xgate-ramoffset' - This option instructs the linker to offset RAM addresses from S12X - address space into XGATE address space. - -`-mshort' - This option controls the ABI and indicates to use a 16-bit integer - ABI. It has no effect on the assembled instructions. This is the - default. - -`-mlong' - This option controls the ABI and indicates to use a 32-bit integer - ABI. - -`-mshort-double' - This option controls the ABI and indicates to use a 32-bit float - ABI. This is the default. - -`-mlong-double' - This option controls the ABI and indicates to use a 64-bit float - ABI. - -`--strict-direct-mode' - You can use the `--strict-direct-mode' option to disable the - automatic translation of direct page mode addressing into extended - mode when the instruction does not support direct mode. For - example, the `clr' instruction does not support direct page mode - addressing. When it is used with the direct page mode, `as' will - ignore it and generate an absolute addressing. This option - prevents `as' from doing this, and the wrong usage of the direct - page mode will raise an error. - -`--short-branches' - The `--short-branches' option turns off the translation of - relative branches into absolute branches when the branch offset is - out of range. By default `as' transforms the relative branch - (`bsr', `bgt', `bge', `beq', `bne', `ble', `blt', `bhi', `bcc', - `bls', `bcs', `bmi', `bvs', `bvs', `bra') into an absolute branch - when the offset is out of the -128 .. 127 range. In that case, - the `bsr' instruction is translated into a `jsr', the `bra' - instruction is translated into a `jmp' and the conditional - branches instructions are inverted and followed by a `jmp'. This - option disables these translations and `as' will generate an error - if a relative branch is out of range. This option does not affect - the optimization associated to the `jbra', `jbsr' and `jbXX' - pseudo opcodes. - -`--force-long-branches' - The `--force-long-branches' option forces the translation of - relative branches into absolute branches. This option does not - affect the optimization associated to the `jbra', `jbsr' and - `jbXX' pseudo opcodes. - -`--print-insn-syntax' - You can use the `--print-insn-syntax' option to obtain the syntax - description of the instruction when an error is detected. - -`--print-opcodes' - The `--print-opcodes' option prints the list of all the - instructions with their syntax. The first item of each line - represents the instruction name and the rest of the line indicates - the possible operands for that instruction. The list is printed in - alphabetical order. Once the list is printed `as' exits. - -`--generate-example' - The `--generate-example' option is similar to `--print-opcodes' - but it generates an example for each instruction instead. - - -File: as.info, Node: M68HC11-Syntax, Next: M68HC11-Modifiers, Prev: M68HC11-Opts, Up: M68HC11-Dependent - -9.24.2 Syntax -------------- - -In the M68HC11 syntax, the instruction name comes first and it may be -followed by one or several operands (up to three). Operands are -separated by comma (`,'). In the normal mode, `as' will complain if too -many operands are specified for a given instruction. In the MRI mode -(turned on with `-M' option), it will treat them as comments. Example: - - inx - lda #23 - bset 2,x #4 - brclr *bot #8 foo - - The presence of a `;' character or a `!' character anywhere on a -line indicates the start of a comment that extends to the end of that -line. - - A `*' or a `#' character at the start of a line also introduces a -line comment, but these characters do not work elsewhere on the line. -If the first character of the line is a `#' then as well as starting a -comment, the line could also be logical line number directive (*note -Comments::) or a preprocessor control command (*note Preprocessing::). - - The M68HC11 assembler does not currently support a line separator -character. - - The following addressing modes are understood for 68HC11 and 68HC12: -"Immediate" - `#NUMBER' - -"Address Register" - `NUMBER,X', `NUMBER,Y' - - The NUMBER may be omitted in which case 0 is assumed. - -"Direct Addressing mode" - `*SYMBOL', or `*DIGITS' - -"Absolute" - `SYMBOL', or `DIGITS' - - The M68HC12 has other more complex addressing modes. All of them are -supported and they are represented below: - -"Constant Offset Indexed Addressing Mode" - `NUMBER,REG' - - The NUMBER may be omitted in which case 0 is assumed. The - register can be either `X', `Y', `SP' or `PC'. The assembler will - use the smaller post-byte definition according to the constant - value (5-bit constant offset, 9-bit constant offset or 16-bit - constant offset). If the constant is not known by the assembler - it will use the 16-bit constant offset post-byte and the value - will be resolved at link time. - -"Offset Indexed Indirect" - `[NUMBER,REG]' - - The register can be either `X', `Y', `SP' or `PC'. - -"Auto Pre-Increment/Pre-Decrement/Post-Increment/Post-Decrement" - `NUMBER,-REG' `NUMBER,+REG' `NUMBER,REG-' `NUMBER,REG+' - - The number must be in the range `-8'..`+8' and must not be 0. The - register can be either `X', `Y', `SP' or `PC'. - -"Accumulator Offset" - `ACC,REG' - - The accumulator register can be either `A', `B' or `D'. The - register can be either `X', `Y', `SP' or `PC'. - -"Accumulator D offset indexed-indirect" - `[D,REG]' - - The register can be either `X', `Y', `SP' or `PC'. - - - For example: - - ldab 1024,sp - ldd [10,x] - orab 3,+x - stab -2,y- - ldx a,pc - sty [d,sp] - - -File: as.info, Node: M68HC11-Modifiers, Next: M68HC11-Directives, Prev: M68HC11-Syntax, Up: M68HC11-Dependent - -9.24.3 Symbolic Operand Modifiers ---------------------------------- - -The assembler supports several modifiers when using symbol addresses in -68HC11 and 68HC12 instruction operands. The general syntax is the -following: - - %modifier(symbol) - -`%addr' - This modifier indicates to the assembler and linker to use the - 16-bit physical address corresponding to the symbol. This is - intended to be used on memory window systems to map a symbol in - the memory bank window. If the symbol is in a memory expansion - part, the physical address corresponds to the symbol address - within the memory bank window. If the symbol is not in a memory - expansion part, this is the symbol address (using or not using the - %addr modifier has no effect in that case). - -`%page' - This modifier indicates to use the memory page number corresponding - to the symbol. If the symbol is in a memory expansion part, its - page number is computed by the linker as a number used to map the - page containing the symbol in the memory bank window. If the - symbol is not in a memory expansion part, the page number is 0. - -`%hi' - This modifier indicates to use the 8-bit high part of the physical - address of the symbol. - -`%lo' - This modifier indicates to use the 8-bit low part of the physical - address of the symbol. - - - For example a 68HC12 call to a function `foo_example' stored in -memory expansion part could be written as follows: - - call %addr(foo_example),%page(foo_example) - - and this is equivalent to - - call foo_example - - And for 68HC11 it could be written as follows: - - ldab #%page(foo_example) - stab _page_switch - jsr %addr(foo_example) - - -File: as.info, Node: M68HC11-Directives, Next: M68HC11-Float, Prev: M68HC11-Modifiers, Up: M68HC11-Dependent - -9.24.4 Assembler Directives ---------------------------- - -The 68HC11 and 68HC12 version of `as' have the following specific -assembler directives: - -`.relax' - The relax directive is used by the `GNU Compiler' to emit a - specific relocation to mark a group of instructions for linker - relaxation. The sequence of instructions within the group must be - known to the linker so that relaxation can be performed. - -`.mode [mshort|mlong|mshort-double|mlong-double]' - This directive specifies the ABI. It overrides the `-mshort', - `-mlong', `-mshort-double' and `-mlong-double' options. - -`.far SYMBOL' - This directive marks the symbol as a `far' symbol meaning that it - uses a `call/rtc' calling convention as opposed to `jsr/rts'. - During a final link, the linker will identify references to the - `far' symbol and will verify the proper calling convention. - -`.interrupt SYMBOL' - This directive marks the symbol as an interrupt entry point. This - information is then used by the debugger to correctly unwind the - frame across interrupts. - -`.xrefb SYMBOL' - This directive is defined for compatibility with the - `Specification for Motorola 8 and 16-Bit Assembly Language Input - Standard' and is ignored. - - - -File: as.info, Node: M68HC11-Float, Next: M68HC11-opcodes, Prev: M68HC11-Directives, Up: M68HC11-Dependent - -9.24.5 Floating Point ---------------------- - -Packed decimal (P) format floating literals are not supported. Feel -free to add the code! - - The floating point formats generated by directives are these. - -`.float' - `Single' precision floating point constants. - -`.double' - `Double' precision floating point constants. - -`.extend' -`.ldouble' - `Extended' precision (`long double') floating point constants. - - -File: as.info, Node: M68HC11-opcodes, Prev: M68HC11-Float, Up: M68HC11-Dependent - -9.24.6 Opcodes --------------- - -* Menu: - -* M68HC11-Branch:: Branch Improvement - - -File: as.info, Node: M68HC11-Branch, Up: M68HC11-opcodes - -9.24.6.1 Branch Improvement -........................... - -Certain pseudo opcodes are permitted for branch instructions. They -expand to the shortest branch instruction that reach the target. -Generally these mnemonics are made by prepending `j' to the start of -Motorola mnemonic. These pseudo opcodes are not affected by the -`--short-branches' or `--force-long-branches' options. - - The following table summarizes the pseudo-operations. - - Displacement Width - +-------------------------------------------------------------+ - | Options | - | --short-branches --force-long-branches | - +--------------------------+----------------------------------+ - Op |BYTE WORD | BYTE WORD | - +--------------------------+----------------------------------+ - bsr | bsr <pc-rel> <error> | jsr <abs> | - bra | bra <pc-rel> <error> | jmp <abs> | - jbsr | bsr <pc-rel> jsr <abs> | bsr <pc-rel> jsr <abs> | - jbra | bra <pc-rel> jmp <abs> | bra <pc-rel> jmp <abs> | - bXX | bXX <pc-rel> <error> | bNX +3; jmp <abs> | - jbXX | bXX <pc-rel> bNX +3; | bXX <pc-rel> bNX +3; jmp <abs> | - | jmp <abs> | | - +--------------------------+----------------------------------+ - XX: condition - NX: negative of condition XX - -`jbsr' -`jbra' - These are the simplest jump pseudo-operations; they always map to - one particular machine instruction, depending on the displacement - to the branch target. - -`jbXX' - Here, `jbXX' stands for an entire family of pseudo-operations, - where XX is a conditional branch or condition-code test. The full - list of pseudo-ops in this family is: - jbcc jbeq jbge jbgt jbhi jbvs jbpl jblo - jbcs jbne jblt jble jbls jbvc jbmi - - For the cases of non-PC relative displacements and long - displacements, `as' issues a longer code fragment in terms of NX, - the opposite condition to XX. For example, for the non-PC - relative case: - jbXX foo - gives - bNXs oof - jmp foo - oof: - - - -File: as.info, Node: Meta-Dependent, Next: MicroBlaze-Dependent, Prev: M68HC11-Dependent, Up: Machine Dependencies - -9.25 Meta Dependent Features -============================ - -* Menu: - -* Meta Options:: Options -* Meta Syntax:: Meta Assembler Syntax - - -File: as.info, Node: Meta Options, Next: Meta Syntax, Up: Meta-Dependent - -9.25.1 Options --------------- - -The Imagination Technologies Meta architecture is implemented in a -number of versions, with each new version adding new features such as -instructions and registers. For precise details of what instructions -each core supports, please see the chip's technical reference manual. - - The following table lists all available Meta options. - -`-mcpu=metac11' - Generate code for Meta 1.1. - -`-mcpu=metac12' - Generate code for Meta 1.2. - -`-mcpu=metac21' - Generate code for Meta 2.1. - -`-mfpu=metac21' - Allow code to use FPU hardware of Meta 2.1. - - - -File: as.info, Node: Meta Syntax, Prev: Meta Options, Up: Meta-Dependent - -9.25.2 Syntax -------------- - -* Menu: - -* Meta-Chars:: Special Characters -* Meta-Regs:: Register Names - - -File: as.info, Node: Meta-Chars, Next: Meta-Regs, Up: Meta Syntax - -9.25.2.1 Special Characters -........................... - -`!' is the line comment character. - - You can use `;' instead of a newline to separate statements. - - Since `$' has no special meaning, you may use it in symbol names. - - -File: as.info, Node: Meta-Regs, Prev: Meta-Chars, Up: Meta Syntax - -9.25.2.2 Register Names -....................... - -Registers can be specified either using their mnemonic names, such as -`D0Re0', or using the unit plus register number separated by a `.', -such as `D0.0'. - - -File: as.info, Node: MicroBlaze-Dependent, Next: MIPS-Dependent, Prev: Meta-Dependent, Up: Machine Dependencies - -9.26 MicroBlaze Dependent Features -================================== - - The Xilinx MicroBlaze processor family includes several variants, -all using the same core instruction set. This chapter covers features -of the GNU assembler that are specific to the MicroBlaze architecture. -For details about the MicroBlaze instruction set, please see the -`MicroBlaze Processor Reference Guide (UG081)' available at -www.xilinx.com. - -* Menu: - -* MicroBlaze Directives:: Directives for MicroBlaze Processors. -* MicroBlaze Syntax:: Syntax for the MicroBlaze - - -File: as.info, Node: MicroBlaze Directives, Next: MicroBlaze Syntax, Up: MicroBlaze-Dependent - -9.26.1 Directives ------------------ - -A number of assembler directives are available for MicroBlaze. - -`.data8 EXPRESSION,...' - This directive is an alias for `.byte'. Each expression is - assembled into an eight-bit value. - -`.data16 EXPRESSION,...' - This directive is an alias for `.hword'. Each expression is - assembled into an 16-bit value. - -`.data32 EXPRESSION,...' - This directive is an alias for `.word'. Each expression is - assembled into an 32-bit value. - -`.ent NAME[,LABEL]' - This directive is an alias for `.func' denoting the start of - function NAME at (optional) LABEL. - -`.end NAME[,LABEL]' - This directive is an alias for `.endfunc' denoting the end of - function NAME. - -`.gpword LABEL,...' - This directive is an alias for `.rva'. The resolved address of - LABEL is stored in the data section. - -`.weakext LABEL' - Declare that LABEL is a weak external symbol. - -`.rodata' - Switch to .rodata section. Equivalent to `.section .rodata' - -`.sdata2' - Switch to .sdata2 section. Equivalent to `.section .sdata2' - -`.sdata' - Switch to .sdata section. Equivalent to `.section .sdata' - -`.bss' - Switch to .bss section. Equivalent to `.section .bss' - -`.sbss' - Switch to .sbss section. Equivalent to `.section .sbss' - - -File: as.info, Node: MicroBlaze Syntax, Prev: MicroBlaze Directives, Up: MicroBlaze-Dependent - -9.26.2 Syntax for the MicroBlaze --------------------------------- - -* Menu: - -* MicroBlaze-Chars:: Special Characters - - -File: as.info, Node: MicroBlaze-Chars, Up: MicroBlaze Syntax - -9.26.2.1 Special Characters -........................... - -The presence of a `#' on a line indicates the start of a comment that -extends to the end of the current line. - - If a `#' appears as the first character of a line, the whole line is -treated as a comment, but in this case the line can also be a logical -line number directive (*note Comments::) or a preprocessor control -command (*note Preprocessing::). - - The `;' character can be used to separate statements on the same -line. - - -File: as.info, Node: MIPS-Dependent, Next: MMIX-Dependent, Prev: MicroBlaze-Dependent, Up: Machine Dependencies - -9.27 MIPS Dependent Features -============================ - - GNU `as' for MIPS architectures supports several different MIPS -processors, and MIPS ISA levels I through V, MIPS32, and MIPS64. For -information about the MIPS instruction set, see `MIPS RISC -Architecture', by Kane and Heindrich (Prentice-Hall). For an overview -of MIPS assembly conventions, see "Appendix D: Assembly Language -Programming" in the same work. - -* Menu: - -* MIPS Options:: Assembler options -* MIPS Macros:: High-level assembly macros -* MIPS Symbol Sizes:: Directives to override the size of symbols -* MIPS Small Data:: Controlling the use of small data accesses -* MIPS ISA:: Directives to override the ISA level -* MIPS assembly options:: Directives to control code generation -* MIPS autoextend:: Directives for extending MIPS 16 bit instructions -* MIPS insn:: Directive to mark data as an instruction -* MIPS NaN Encodings:: Directives to record which NaN encoding is being used -* MIPS Option Stack:: Directives to save and restore options -* MIPS ASE Instruction Generation Overrides:: Directives to control - generation of MIPS ASE instructions -* MIPS Floating-Point:: Directives to override floating-point options -* MIPS Syntax:: MIPS specific syntactical considerations - - -File: as.info, Node: MIPS Options, Next: MIPS Macros, Up: MIPS-Dependent - -9.27.1 Assembler options ------------------------- - -The MIPS configurations of GNU `as' support these special options: - -`-G NUM' - Set the "small data" limit to N bytes. The default limit is 8 - bytes. *Note Controlling the use of small data accesses: MIPS - Small Data. - -`-EB' -`-EL' - Any MIPS configuration of `as' can select big-endian or - little-endian output at run time (unlike the other GNU development - tools, which must be configured for one or the other). Use `-EB' - to select big-endian output, and `-EL' for little-endian. - -`-KPIC' - Generate SVR4-style PIC. This option tells the assembler to - generate SVR4-style position-independent macro expansions. It - also tells the assembler to mark the output file as PIC. - -`-mvxworks-pic' - Generate VxWorks PIC. This option tells the assembler to generate - VxWorks-style position-independent macro expansions. - -`-mips1' -`-mips2' -`-mips3' -`-mips4' -`-mips5' -`-mips32' -`-mips32r2' -`-mips64' -`-mips64r2' - Generate code for a particular MIPS Instruction Set Architecture - level. `-mips1' corresponds to the R2000 and R3000 processors, - `-mips2' to the R6000 processor, `-mips3' to the R4000 processor, - and `-mips4' to the R8000 and R10000 processors. `-mips5', - `-mips32', `-mips32r2', `-mips64', and `-mips64r2' correspond to - generic MIPS V, MIPS32, MIPS32 Release 2, MIPS64, and MIPS64 - Release 2 ISA processors, respectively. You can also switch - instruction sets during the assembly; see *Note Directives to - override the ISA level: MIPS ISA. - -`-mgp32' -`-mfp32' - Some macros have different expansions for 32-bit and 64-bit - registers. The register sizes are normally inferred from the ISA - and ABI, but these flags force a certain group of registers to be - treated as 32 bits wide at all times. `-mgp32' controls the size - of general-purpose registers and `-mfp32' controls the size of - floating-point registers. - - The `.set gp=32' and `.set fp=32' directives allow the size of - registers to be changed for parts of an object. The default value - is restored by `.set gp=default' and `.set fp=default'. - - On some MIPS variants there is a 32-bit mode flag; when this flag - is set, 64-bit instructions generate a trap. Also, some 32-bit - OSes only save the 32-bit registers on a context switch, so it is - essential never to use the 64-bit registers. - -`-mgp64' -`-mfp64' - Assume that 64-bit registers are available. This is provided in - the interests of symmetry with `-mgp32' and `-mfp32'. - - The `.set gp=64' and `.set fp=64' directives allow the size of - registers to be changed for parts of an object. The default value - is restored by `.set gp=default' and `.set fp=default'. - -`-mips16' -`-no-mips16' - Generate code for the MIPS 16 processor. This is equivalent to - putting `.set mips16' at the start of the assembly file. - `-no-mips16' turns off this option. - -`-mmicromips' -`-mno-micromips' - Generate code for the microMIPS processor. This is equivalent to - putting `.set micromips' at the start of the assembly file. - `-mno-micromips' turns off this option. This is equivalent to - putting `.set nomicromips' at the start of the assembly file. - -`-msmartmips' -`-mno-smartmips' - Enables the SmartMIPS extensions to the MIPS32 instruction set, - which provides a number of new instructions which target smartcard - and cryptographic applications. This is equivalent to putting - `.set smartmips' at the start of the assembly file. - `-mno-smartmips' turns off this option. - -`-mips3d' -`-no-mips3d' - Generate code for the MIPS-3D Application Specific Extension. - This tells the assembler to accept MIPS-3D instructions. - `-no-mips3d' turns off this option. - -`-mdmx' -`-no-mdmx' - Generate code for the MDMX Application Specific Extension. This - tells the assembler to accept MDMX instructions. `-no-mdmx' turns - off this option. - -`-mdsp' -`-mno-dsp' - Generate code for the DSP Release 1 Application Specific Extension. - This tells the assembler to accept DSP Release 1 instructions. - `-mno-dsp' turns off this option. - -`-mdspr2' -`-mno-dspr2' - Generate code for the DSP Release 2 Application Specific Extension. - This option implies -mdsp. This tells the assembler to accept DSP - Release 2 instructions. `-mno-dspr2' turns off this option. - -`-mmt' -`-mno-mt' - Generate code for the MT Application Specific Extension. This - tells the assembler to accept MT instructions. `-mno-mt' turns - off this option. - -`-mmcu' -`-mno-mcu' - Generate code for the MCU Application Specific Extension. This - tells the assembler to accept MCU instructions. `-mno-mcu' turns - off this option. - -`-mvirt' -`-mno-virt' - Generate code for the Virtualization Application Specific - Extension. This tells the assembler to accept Virtualization - instructions. `-mno-virt' turns off this option. - -`-minsn32' -`-mno-insn32' - Only use 32-bit instruction encodings when generating code for the - microMIPS processor. This option inhibits the use of any 16-bit - instructions. This is equivalent to putting `.set insn32' at the - start of the assembly file. `-mno-insn32' turns off this option. - This is equivalent to putting `.set noinsn32' at the start of the - assembly file. By default `-mno-insn32' is selected, allowing all - instructions to be used. - -`-mfix7000' -`-mno-fix7000' - Cause nops to be inserted if the read of the destination register - of an mfhi or mflo instruction occurs in the following two - instructions. - -`-mfix-loongson2f-jump' -`-mno-fix-loongson2f-jump' - Eliminate instruction fetch from outside 256M region to work - around the Loongson2F `jump' instructions. Without it, under - extreme cases, the kernel may crash. The issue has been solved in - latest processor batches, but this fix has no side effect to them. - -`-mfix-loongson2f-nop' -`-mno-fix-loongson2f-nop' - Replace nops by `or at,at,zero' to work around the Loongson2F - `nop' errata. Without it, under extreme cases, the CPU might - deadlock. The issue has been solved in later Loongson2F batches, - but this fix has no side effect to them. - -`-mfix-vr4120' -`-mno-fix-vr4120' - Insert nops to work around certain VR4120 errata. This option is - intended to be used on GCC-generated code: it is not designed to - catch all problems in hand-written assembler code. - -`-mfix-vr4130' -`-mno-fix-vr4130' - Insert nops to work around the VR4130 `mflo'/`mfhi' errata. - -`-mfix-24k' -`-mno-fix-24k' - Insert nops to work around the 24K `eret'/`deret' errata. - -`-mfix-cn63xxp1' -`-mno-fix-cn63xxp1' - Replace `pref' hints 0 - 4 and 6 - 24 with hint 28 to work around - certain CN63XXP1 errata. - -`-m4010' -`-no-m4010' - Generate code for the LSI R4010 chip. This tells the assembler to - accept the R4010-specific instructions (`addciu', `ffc', etc.), - and to not schedule `nop' instructions around accesses to the `HI' - and `LO' registers. `-no-m4010' turns off this option. - -`-m4650' -`-no-m4650' - Generate code for the MIPS R4650 chip. This tells the assembler - to accept the `mad' and `madu' instruction, and to not schedule - `nop' instructions around accesses to the `HI' and `LO' registers. - `-no-m4650' turns off this option. - -`-m3900' -`-no-m3900' -`-m4100' -`-no-m4100' - For each option `-mNNNN', generate code for the MIPS RNNNN chip. - This tells the assembler to accept instructions specific to that - chip, and to schedule for that chip's hazards. - -`-march=CPU' - Generate code for a particular MIPS CPU. It is exactly equivalent - to `-mCPU', except that there are more value of CPU understood. - Valid CPU value are: - - 2000, 3000, 3900, 4000, 4010, 4100, 4111, vr4120, vr4130, - vr4181, 4300, 4400, 4600, 4650, 5000, rm5200, rm5230, rm5231, - rm5261, rm5721, vr5400, vr5500, 6000, rm7000, 8000, rm9000, - 10000, 12000, 14000, 16000, 4kc, 4km, 4kp, 4ksc, 4kec, 4kem, - 4kep, 4ksd, m4k, m4kp, m14k, m14kc, m14ke, m14kec, 24kc, - 24kf2_1, 24kf, 24kf1_1, 24kec, 24kef2_1, 24kef, 24kef1_1, - 34kc, 34kf2_1, 34kf, 34kf1_1, 34kn, 74kc, 74kf2_1, 74kf, - 74kf1_1, 74kf3_2, 1004kc, 1004kf2_1, 1004kf, 1004kf1_1, 5kc, - 5kf, 20kc, 25kf, sb1, sb1a, loongson2e, loongson2f, - loongson3a, octeon, octeon+, octeon2, xlr, xlp - - For compatibility reasons, `Nx' and `Bfx' are accepted as synonyms - for `Nf1_1'. These values are deprecated. - -`-mtune=CPU' - Schedule and tune for a particular MIPS CPU. Valid CPU values are - identical to `-march=CPU'. - -`-mabi=ABI' - Record which ABI the source code uses. The recognized arguments - are: `32', `n32', `o64', `64' and `eabi'. - -`-msym32' -`-mno-sym32' - Equivalent to adding `.set sym32' or `.set nosym32' to the - beginning of the assembler input. *Note MIPS Symbol Sizes::. - -`-nocpp' - This option is ignored. It is accepted for command-line - compatibility with other assemblers, which use it to turn off C - style preprocessing. With GNU `as', there is no need for - `-nocpp', because the GNU assembler itself never runs the C - preprocessor. - -`-msoft-float' -`-mhard-float' - Disable or enable floating-point instructions. Note that by - default floating-point instructions are always allowed even with - CPU targets that don't have support for these instructions. - -`-msingle-float' -`-mdouble-float' - Disable or enable double-precision floating-point operations. Note - that by default double-precision floating-point operations are - always allowed even with CPU targets that don't have support for - these operations. - -`--construct-floats' -`--no-construct-floats' - The `--no-construct-floats' option disables the construction of - double width floating point constants by loading the two halves of - the value into the two single width floating point registers that - make up the double width register. This feature is useful if the - processor support the FR bit in its status register, and this bit - is known (by the programmer) to be set. This bit prevents the - aliasing of the double width register by the single width - registers. - - By default `--construct-floats' is selected, allowing construction - of these floating point constants. - -`--relax-branch' -`--no-relax-branch' - The `--relax-branch' option enables the relaxation of out-of-range - branches. Any branches whose target cannot be reached directly are - converted to a small instruction sequence including an - inverse-condition branch to the physically next instruction, and a - jump to the original target is inserted between the two - instructions. In PIC code the jump will involve further - instructions for address calculation. - - The `BC1ANY2F', `BC1ANY2T', `BC1ANY4F', `BC1ANY4T', `BPOSGE32' and - `BPOSGE64' instructions are excluded from relaxation, because they - have no complementing counterparts. They could be relaxed with - the use of a longer sequence involving another branch, however - this has not been implemented and if their target turns out of - reach, they produce an error even if branch relaxation is enabled. - - Also no MIPS16 branches are ever relaxed. - - By default `--no-relax-branch' is selected, causing any - out-of-range branches to produce an error. - -`-mnan=ENCODING' - This option indicates whether the source code uses the IEEE 2008 - NaN encoding (`-mnan=2008') or the original MIPS encoding - (`-mnan=legacy'). It is equivalent to adding a `.nan' directive - to the beginning of the source file. *Note MIPS NaN Encodings::. - - `-mnan=legacy' is the default if no `-mnan' option or `.nan' - directive is used. - -`--trap' -`--no-break' - `as' automatically macro expands certain division and - multiplication instructions to check for overflow and division by - zero. This option causes `as' to generate code to take a trap - exception rather than a break exception when an error is detected. - The trap instructions are only supported at Instruction Set - Architecture level 2 and higher. - -`--break' -`--no-trap' - Generate code to take a break exception rather than a trap - exception when an error is detected. This is the default. - -`-mpdr' -`-mno-pdr' - Control generation of `.pdr' sections. Off by default on IRIX, on - elsewhere. - -`-mshared' -`-mno-shared' - When generating code using the Unix calling conventions (selected - by `-KPIC' or `-mcall_shared'), gas will normally generate code - which can go into a shared library. The `-mno-shared' option - tells gas to generate code which uses the calling convention, but - can not go into a shared library. The resulting code is slightly - more efficient. This option only affects the handling of the - `.cpload' and `.cpsetup' pseudo-ops. - - -File: as.info, Node: MIPS Macros, Next: MIPS Symbol Sizes, Prev: MIPS Options, Up: MIPS-Dependent - -9.27.2 High-level assembly macros ---------------------------------- - -MIPS assemblers have traditionally provided a wider range of -instructions than the MIPS architecture itself. These extra -instructions are usually referred to as "macro" instructions (1). - - Some MIPS macro instructions extend an underlying architectural -instruction while others are entirely new. An example of the former -type is `and', which allows the third operand to be either a register -or an arbitrary immediate value. Examples of the latter type include -`bgt', which branches to the third operand when the first operand is -greater than the second operand, and `ulh', which implements an -unaligned 2-byte load. - - One of the most common extensions provided by macros is to expand -memory offsets to the full address range (32 or 64 bits) and to allow -symbolic offsets such as `my_data + 4' to be used in place of integer -constants. For example, the architectural instruction `lbu' allows -only a signed 16-bit offset, whereas the macro `lbu' allows code such -as `lbu $4,array+32769($5)'. The implementation of these symbolic -offsets depends on several factors, such as whether the assembler is -generating SVR4-style PIC (selected by `-KPIC', *note Assembler -options: MIPS Options.), the size of symbols (*note Directives to -override the size of symbols: MIPS Symbol Sizes.), and the small data -limit (*note Controlling the use of small data accesses: MIPS Small -Data.). - - Sometimes it is undesirable to have one assembly instruction expand -to several machine instructions. The directive `.set nomacro' tells -the assembler to warn when this happens. `.set macro' restores the -default behavior. - - Some macro instructions need a temporary register to store -intermediate results. This register is usually `$1', also known as -`$at', but it can be changed to any core register REG using `.set -at=REG'. Note that `$at' always refers to `$1' regardless of which -register is being used as the temporary register. - - Implicit uses of the temporary register in macros could interfere -with explicit uses in the assembly code. The assembler therefore warns -whenever it sees an explicit use of the temporary register. The -directive `.set noat' silences this warning while `.set at' restores -the default behavior. It is safe to use `.set noat' while `.set -nomacro' is in effect since single-instruction macros never need a -temporary register. - - Note that while the GNU assembler provides these macros for -compatibility, it does not make any attempt to optimize them with the -surrounding code. - - ---------- Footnotes ---------- - - (1) The term "macro" is somewhat overloaded here, since these macros -have no relation to those defined by `.macro', *note `.macro': Macro. - - -File: as.info, Node: MIPS Symbol Sizes, Next: MIPS Small Data, Prev: MIPS Macros, Up: MIPS-Dependent - -9.27.3 Directives to override the size of symbols -------------------------------------------------- - -The n64 ABI allows symbols to have any 64-bit value. Although this -provides a great deal of flexibility, it means that some macros have -much longer expansions than their 32-bit counterparts. For example, -the non-PIC expansion of `dla $4,sym' is usually: - - lui $4,%highest(sym) - lui $1,%hi(sym) - daddiu $4,$4,%higher(sym) - daddiu $1,$1,%lo(sym) - dsll32 $4,$4,0 - daddu $4,$4,$1 - - whereas the 32-bit expansion is simply: - - lui $4,%hi(sym) - daddiu $4,$4,%lo(sym) - - n64 code is sometimes constructed in such a way that all symbolic -constants are known to have 32-bit values, and in such cases, it's -preferable to use the 32-bit expansion instead of the 64-bit expansion. - - You can use the `.set sym32' directive to tell the assembler that, -from this point on, all expressions of the form `SYMBOL' or `SYMBOL + -OFFSET' have 32-bit values. For example: - - .set sym32 - dla $4,sym - lw $4,sym+16 - sw $4,sym+0x8000($4) - - will cause the assembler to treat `sym', `sym+16' and `sym+0x8000' -as 32-bit values. The handling of non-symbolic addresses is not -affected. - - The directive `.set nosym32' ends a `.set sym32' block and reverts -to the normal behavior. It is also possible to change the symbol size -using the command-line options `-msym32' and `-mno-sym32'. - - These options and directives are always accepted, but at present, -they have no effect for anything other than n64. - - -File: as.info, Node: MIPS Small Data, Next: MIPS ISA, Prev: MIPS Symbol Sizes, Up: MIPS-Dependent - -9.27.4 Controlling the use of small data accesses -------------------------------------------------- - -It often takes several instructions to load the address of a symbol. -For example, when `addr' is a 32-bit symbol, the non-PIC expansion of -`dla $4,addr' is usually: - - lui $4,%hi(addr) - daddiu $4,$4,%lo(addr) - - The sequence is much longer when `addr' is a 64-bit symbol. *Note -Directives to override the size of symbols: MIPS Symbol Sizes. - - In order to cut down on this overhead, most embedded MIPS systems -set aside a 64-kilobyte "small data" area and guarantee that all data -of size N and smaller will be placed in that area. The limit N is -passed to both the assembler and the linker using the command-line -option `-G N', *note Assembler options: MIPS Options. Note that the -same value of N must be used when linking and when assembling all input -files to the link; any inconsistency could cause a relocation overflow -error. - - The size of an object in the `.bss' section is set by the `.comm' or -`.lcomm' directive that defines it. The size of an external object may -be set with the `.extern' directive. For example, `.extern sym,4' -declares that the object at `sym' is 4 bytes in length, while leaving -`sym' otherwise undefined. - - When no `-G' option is given, the default limit is 8 bytes. The -option `-G 0' prevents any data from being automatically classified as -small. - - It is also possible to mark specific objects as small by putting them -in the special sections `.sdata' and `.sbss', which are "small" -counterparts of `.data' and `.bss' respectively. The toolchain will -treat such data as small regardless of the `-G' setting. - - On startup, systems that support a small data area are expected to -initialize register `$28', also known as `$gp', in such a way that -small data can be accessed using a 16-bit offset from that register. -For example, when `addr' is small data, the `dla $4,addr' instruction -above is equivalent to: - - daddiu $4,$28,%gp_rel(addr) - - Small data is not supported for SVR4-style PIC. - - -File: as.info, Node: MIPS ISA, Next: MIPS assembly options, Prev: MIPS Small Data, Up: MIPS-Dependent - -9.27.5 Directives to override the ISA level -------------------------------------------- - -GNU `as' supports an additional directive to change the MIPS -Instruction Set Architecture level on the fly: `.set mipsN'. N should -be a number from 0 to 5, or 32, 32r2, 64 or 64r2. The values other -than 0 make the assembler accept instructions for the corresponding ISA -level, from that point on in the assembly. `.set mipsN' affects not -only which instructions are permitted, but also how certain macros are -expanded. `.set mips0' restores the ISA level to its original level: -either the level you selected with command line options, or the default -for your configuration. You can use this feature to permit specific -MIPS III instructions while assembling in 32 bit mode. Use this -directive with care! - - The `.set arch=CPU' directive provides even finer control. It -changes the effective CPU target and allows the assembler to use -instructions specific to a particular CPU. All CPUs supported by the -`-march' command line option are also selectable by this directive. -The original value is restored by `.set arch=default'. - - The directive `.set mips16' puts the assembler into MIPS 16 mode, in -which it will assemble instructions for the MIPS 16 processor. Use -`.set nomips16' to return to normal 32 bit mode. - - Traditional MIPS assemblers do not support this directive. - - The directive `.set micromips' puts the assembler into microMIPS -mode, in which it will assemble instructions for the microMIPS -processor. Use `.set nomicromips' to return to normal 32 bit mode. - - Traditional MIPS assemblers do not support this directive. - - -File: as.info, Node: MIPS assembly options, Next: MIPS autoextend, Prev: MIPS ISA, Up: MIPS-Dependent - -9.27.6 Directives to control code generation --------------------------------------------- - -The directive `.set insn32' makes the assembler only use 32-bit -instruction encodings when generating code for the microMIPS processor. -This directive inhibits the use of any 16-bit instructions from that -point on in the assembly. The `.set noinsn32' directive allows 16-bit -instructions to be accepted. - - Traditional MIPS assemblers do not support this directive. - - -File: as.info, Node: MIPS autoextend, Next: MIPS insn, Prev: MIPS assembly options, Up: MIPS-Dependent - -9.27.7 Directives for extending MIPS 16 bit instructions --------------------------------------------------------- - -By default, MIPS 16 instructions are automatically extended to 32 bits -when necessary. The directive `.set noautoextend' will turn this off. -When `.set noautoextend' is in effect, any 32 bit instruction must be -explicitly extended with the `.e' modifier (e.g., `li.e $4,1000'). The -directive `.set autoextend' may be used to once again automatically -extend instructions when necessary. - - This directive is only meaningful when in MIPS 16 mode. Traditional -MIPS assemblers do not support this directive. - - -File: as.info, Node: MIPS insn, Next: MIPS NaN Encodings, Prev: MIPS autoextend, Up: MIPS-Dependent - -9.27.8 Directive to mark data as an instruction ------------------------------------------------ - -The `.insn' directive tells `as' that the following data is actually -instructions. This makes a difference in MIPS 16 and microMIPS modes: -when loading the address of a label which precedes instructions, `as' -automatically adds 1 to the value, so that jumping to the loaded -address will do the right thing. - - The `.global' and `.globl' directives supported by `as' will by -default mark the symbol as pointing to a region of data not code. This -means that, for example, any instructions following such a symbol will -not be disassembled by `objdump' as it will regard them as data. To -change this behaviour an optional section name can be placed after the -symbol name in the `.global' directive. If this section exists and is -known to be a code section, then the symbol will be marked as poiting at -code not data. Ie the syntax for the directive is: - - `.global SYMBOL[ SECTION][, SYMBOL[ SECTION]] ...', - - Here is a short example: - - .global foo .text, bar, baz .data - foo: - nop - bar: - .word 0x0 - baz: - .word 0x1 - - -File: as.info, Node: MIPS NaN Encodings, Next: MIPS Option Stack, Prev: MIPS insn, Up: MIPS-Dependent - -9.27.9 Directives to record which NaN encoding is being used ------------------------------------------------------------- - -The IEEE 754 floating-point standard defines two types of not-a-number -(NaN) data: "signalling" NaNs and "quiet" NaNs. The original version -of the standard did not specify how these two types should be -distinguished. Most implementations followed the i387 model, in which -the first bit of the significand is set for quiet NaNs and clear for -signalling NaNs. However, the original MIPS implementation assigned the -opposite meaning to the bit, so that it was set for signalling NaNs and -clear for quiet NaNs. - - The 2008 revision of the standard formally suggested the i387 choice -and as from Sep 2012 the current release of the MIPS architecture -therefore optionally supports that form. Code that uses one NaN -encoding would usually be incompatible with code that uses the other -NaN encoding, so MIPS ELF objects have a flag (`EF_MIPS_NAN2008') to -record which encoding is being used. - - Assembly files can use the `.nan' directive to select between the -two encodings. `.nan 2008' says that the assembly file uses the IEEE -754-2008 encoding while `.nan legacy' says that the file uses the -original MIPS encoding. If several `.nan' directives are given, the -final setting is the one that is used. - - The command-line options `-mnan=legacy' and `-mnan=2008' can be used -instead of `.nan legacy' and `.nan 2008' respectively. However, any -`.nan' directive overrides the command-line setting. - - `.nan legacy' is the default if no `.nan' directive or `-mnan' -option is given. - - Note that GNU `as' does not produce NaNs itself and therefore these -directives do not affect code generation. They simply control the -setting of the `EF_MIPS_NAN2008' flag. - - Traditional MIPS assemblers do not support these directives. - - -File: as.info, Node: MIPS Option Stack, Next: MIPS ASE Instruction Generation Overrides, Prev: MIPS NaN Encodings, Up: MIPS-Dependent - -9.27.10 Directives to save and restore options ----------------------------------------------- - -The directives `.set push' and `.set pop' may be used to save and -restore the current settings for all the options which are controlled -by `.set'. The `.set push' directive saves the current settings on a -stack. The `.set pop' directive pops the stack and restores the -settings. - - These directives can be useful inside an macro which must change an -option such as the ISA level or instruction reordering but does not want -to change the state of the code which invoked the macro. - - Traditional MIPS assemblers do not support these directives. - - -File: as.info, Node: MIPS ASE Instruction Generation Overrides, Next: MIPS Floating-Point, Prev: MIPS Option Stack, Up: MIPS-Dependent - -9.27.11 Directives to control generation of MIPS ASE instructions ------------------------------------------------------------------ - -The directive `.set mips3d' makes the assembler accept instructions -from the MIPS-3D Application Specific Extension from that point on in -the assembly. The `.set nomips3d' directive prevents MIPS-3D -instructions from being accepted. - - The directive `.set smartmips' makes the assembler accept -instructions from the SmartMIPS Application Specific Extension to the -MIPS32 ISA from that point on in the assembly. The `.set nosmartmips' -directive prevents SmartMIPS instructions from being accepted. - - The directive `.set mdmx' makes the assembler accept instructions -from the MDMX Application Specific Extension from that point on in the -assembly. The `.set nomdmx' directive prevents MDMX instructions from -being accepted. - - The directive `.set dsp' makes the assembler accept instructions -from the DSP Release 1 Application Specific Extension from that point -on in the assembly. The `.set nodsp' directive prevents DSP Release 1 -instructions from being accepted. - - The directive `.set dspr2' makes the assembler accept instructions -from the DSP Release 2 Application Specific Extension from that point -on in the assembly. This dirctive implies `.set dsp'. The `.set -nodspr2' directive prevents DSP Release 2 instructions from being -accepted. - - The directive `.set mt' makes the assembler accept instructions from -the MT Application Specific Extension from that point on in the -assembly. The `.set nomt' directive prevents MT instructions from -being accepted. - - The directive `.set mcu' makes the assembler accept instructions -from the MCU Application Specific Extension from that point on in the -assembly. The `.set nomcu' directive prevents MCU instructions from -being accepted. - - The directive `.set virt' makes the assembler accept instructions -from the Virtualization Application Specific Extension from that point -on in the assembly. The `.set novirt' directive prevents Virtualization -instructions from being accepted. - - Traditional MIPS assemblers do not support these directives. - - -File: as.info, Node: MIPS Floating-Point, Next: MIPS Syntax, Prev: MIPS ASE Instruction Generation Overrides, Up: MIPS-Dependent - -9.27.12 Directives to override floating-point options ------------------------------------------------------ - -The directives `.set softfloat' and `.set hardfloat' provide finer -control of disabling and enabling float-point instructions. These -directives always override the default (that hard-float instructions -are accepted) or the command-line options (`-msoft-float' and -`-mhard-float'). - - The directives `.set singlefloat' and `.set doublefloat' provide -finer control of disabling and enabling double-precision float-point -operations. These directives always override the default (that -double-precision operations are accepted) or the command-line options -(`-msingle-float' and `-mdouble-float'). - - Traditional MIPS assemblers do not support these directives. - - -File: as.info, Node: MIPS Syntax, Prev: MIPS Floating-Point, Up: MIPS-Dependent - -9.27.13 Syntactical considerations for the MIPS assembler ---------------------------------------------------------- - -* Menu: - -* MIPS-Chars:: Special Characters - - -File: as.info, Node: MIPS-Chars, Up: MIPS Syntax - -9.27.13.1 Special Characters -............................ - -The presence of a `#' on a line indicates the start of a comment that -extends to the end of the current line. - - If a `#' appears as the first character of a line, the whole line is -treated as a comment, but in this case the line can also be a logical -line number directive (*note Comments::) or a preprocessor control -command (*note Preprocessing::). - - The `;' character can be used to separate statements on the same -line. - - -File: as.info, Node: MMIX-Dependent, Next: MSP430-Dependent, Prev: MIPS-Dependent, Up: Machine Dependencies - -9.28 MMIX Dependent Features -============================ - -* Menu: - -* MMIX-Opts:: Command-line Options -* MMIX-Expand:: Instruction expansion -* MMIX-Syntax:: Syntax -* MMIX-mmixal:: Differences to `mmixal' syntax and semantics - - -File: as.info, Node: MMIX-Opts, Next: MMIX-Expand, Up: MMIX-Dependent - -9.28.1 Command-line Options ---------------------------- - -The MMIX version of `as' has some machine-dependent options. - - When `--fixed-special-register-names' is specified, only the register -names specified in *Note MMIX-Regs:: are recognized in the instructions -`PUT' and `GET'. - - You can use the `--globalize-symbols' to make all symbols global. -This option is useful when splitting up a `mmixal' program into several -files. - - The `--gnu-syntax' turns off most syntax compatibility with -`mmixal'. Its usability is currently doubtful. - - The `--relax' option is not fully supported, but will eventually make -the object file prepared for linker relaxation. - - If you want to avoid inadvertently calling a predefined symbol and -would rather get an error, for example when using `as' with a compiler -or other machine-generated code, specify `--no-predefined-syms'. This -turns off built-in predefined definitions of all such symbols, -including rounding-mode symbols, segment symbols, `BIT' symbols, and -`TRAP' symbols used in `mmix' "system calls". It also turns off -predefined special-register names, except when used in `PUT' and `GET' -instructions. - - By default, some instructions are expanded to fit the size of the -operand or an external symbol (*note MMIX-Expand::). By passing -`--no-expand', no such expansion will be done, instead causing errors -at link time if the operand does not fit. - - The `mmixal' documentation (*note mmixsite::) specifies that global -registers allocated with the `GREG' directive (*note MMIX-greg::) and -initialized to the same non-zero value, will refer to the same global -register. This isn't strictly enforceable in `as' since the final -addresses aren't known until link-time, but it will do an effort unless -the `--no-merge-gregs' option is specified. (Register merging isn't -yet implemented in `ld'.) - - `as' will warn every time it expands an instruction to fit an -operand unless the option `-x' is specified. It is believed that this -behaviour is more useful than just mimicking `mmixal''s behaviour, in -which instructions are only expanded if the `-x' option is specified, -and assembly fails otherwise, when an instruction needs to be expanded. -It needs to be kept in mind that `mmixal' is both an assembler and -linker, while `as' will expand instructions that at link stage can be -contracted. (Though linker relaxation isn't yet implemented in `ld'.) -The option `-x' also imples `--linker-allocated-gregs'. - - If instruction expansion is enabled, `as' can expand a `PUSHJ' -instruction into a series of instructions. The shortest expansion is -to not expand it, but just mark the call as redirectable to a stub, -which `ld' creates at link-time, but only if the original `PUSHJ' -instruction is found not to reach the target. The stub consists of the -necessary instructions to form a jump to the target. This happens if -`as' can assert that the `PUSHJ' instruction can reach such a stub. -The option `--no-pushj-stubs' disables this shorter expansion, and the -longer series of instructions is then created at assembly-time. The -option `--no-stubs' is a synonym, intended for compatibility with -future releases, where generation of stubs for other instructions may -be implemented. - - Usually a two-operand-expression (*note GREG-base::) without a -matching `GREG' directive is treated as an error by `as'. When the -option `--linker-allocated-gregs' is in effect, they are instead passed -through to the linker, which will allocate as many global registers as -is needed. - - -File: as.info, Node: MMIX-Expand, Next: MMIX-Syntax, Prev: MMIX-Opts, Up: MMIX-Dependent - -9.28.2 Instruction expansion ----------------------------- - -When `as' encounters an instruction with an operand that is either not -known or does not fit the operand size of the instruction, `as' (and -`ld') will expand the instruction into a sequence of instructions -semantically equivalent to the operand fitting the instruction. -Expansion will take place for the following instructions: - -`GETA' - Expands to a sequence of four instructions: `SETL', `INCML', - `INCMH' and `INCH'. The operand must be a multiple of four. - -Conditional branches - A branch instruction is turned into a branch with the complemented - condition and prediction bit over five instructions; four - instructions setting `$255' to the operand value, which like with - `GETA' must be a multiple of four, and a final `GO $255,$255,0'. - -`PUSHJ' - Similar to expansion for conditional branches; four instructions - set `$255' to the operand value, followed by a `PUSHGO - $255,$255,0'. - -`JMP' - Similar to conditional branches and `PUSHJ'. The final instruction - is `GO $255,$255,0'. - - The linker `ld' is expected to shrink these expansions for code -assembled with `--relax' (though not currently implemented). - - -File: as.info, Node: MMIX-Syntax, Next: MMIX-mmixal, Prev: MMIX-Expand, Up: MMIX-Dependent - -9.28.3 Syntax -------------- - -The assembly syntax is supposed to be upward compatible with that -described in Sections 1.3 and 1.4 of `The Art of Computer Programming, -Volume 1'. Draft versions of those chapters as well as other MMIX -information is located at -`http://www-cs-faculty.stanford.edu/~knuth/mmix-news.html'. Most code -examples from the mmixal package located there should work unmodified -when assembled and linked as single files, with a few noteworthy -exceptions (*note MMIX-mmixal::). - - Before an instruction is emitted, the current location is aligned to -the next four-byte boundary. If a label is defined at the beginning of -the line, its value will be the aligned value. - - In addition to the traditional hex-prefix `0x', a hexadecimal number -can also be specified by the prefix character `#'. - - After all operands to an MMIX instruction or directive have been -specified, the rest of the line is ignored, treated as a comment. - -* Menu: - -* MMIX-Chars:: Special Characters -* MMIX-Symbols:: Symbols -* MMIX-Regs:: Register Names -* MMIX-Pseudos:: Assembler Directives - - -File: as.info, Node: MMIX-Chars, Next: MMIX-Symbols, Up: MMIX-Syntax - -9.28.3.1 Special Characters -........................... - -The characters `*' and `#' are line comment characters; each start a -comment at the beginning of a line, but only at the beginning of a -line. A `#' prefixes a hexadecimal number if found elsewhere on a -line. If a `#' appears at the start of a line the whole line is -treated as a comment, but the line can also act as a logical line -number directive (*note Comments::) or a preprocessor control command -(*note Preprocessing::). - - Two other characters, `%' and `!', each start a comment anywhere on -the line. Thus you can't use the `modulus' and `not' operators in -expressions normally associated with these two characters. - - A `;' is a line separator, treated as a new-line, so separate -instructions can be specified on a single line. - - -File: as.info, Node: MMIX-Symbols, Next: MMIX-Regs, Prev: MMIX-Chars, Up: MMIX-Syntax - -9.28.3.2 Symbols -................ - -The character `:' is permitted in identifiers. There are two -exceptions to it being treated as any other symbol character: if a -symbol begins with `:', it means that the symbol is in the global -namespace and that the current prefix should not be prepended to that -symbol (*note MMIX-prefix::). The `:' is then not considered part of -the symbol. For a symbol in the label position (first on a line), a `:' -at the end of a symbol is silently stripped off. A label is permitted, -but not required, to be followed by a `:', as with many other assembly -formats. - - The character `@' in an expression, is a synonym for `.', the -current location. - - In addition to the common forward and backward local symbol formats -(*note Symbol Names::), they can be specified with upper-case `B' and -`F', as in `8B' and `9F'. A local label defined for the current -position is written with a `H' appended to the number: - 3H LDB $0,$1,2 - This and traditional local-label formats cannot be mixed: a label -must be defined and referred to using the same format. - - There's a minor caveat: just as for the ordinary local symbols, the -local symbols are translated into ordinary symbols using control -characters are to hide the ordinal number of the symbol. -Unfortunately, these symbols are not translated back in error messages. -Thus you may see confusing error messages when local symbols are used. -Control characters `\003' (control-C) and `\004' (control-D) are used -for the MMIX-specific local-symbol syntax. - - The symbol `Main' is handled specially; it is always global. - - By defining the symbols `__.MMIX.start..text' and -`__.MMIX.start..data', the address of respectively the `.text' and -`.data' segments of the final program can be defined, though when -linking more than one object file, the code or data in the object file -containing the symbol is not guaranteed to be start at that position; -just the final executable. *Note MMIX-loc::. - - -File: as.info, Node: MMIX-Regs, Next: MMIX-Pseudos, Prev: MMIX-Symbols, Up: MMIX-Syntax - -9.28.3.3 Register names -....................... - -Local and global registers are specified as `$0' to `$255'. The -recognized special register names are `rJ', `rA', `rB', `rC', `rD', -`rE', `rF', `rG', `rH', `rI', `rK', `rL', `rM', `rN', `rO', `rP', `rQ', -`rR', `rS', `rT', `rU', `rV', `rW', `rX', `rY', `rZ', `rBB', `rTT', -`rWW', `rXX', `rYY' and `rZZ'. A leading `:' is optional for special -register names. - - Local and global symbols can be equated to register names and used in -place of ordinary registers. - - Similarly for special registers, local and global symbols can be -used. Also, symbols equated from numbers and constant expressions are -allowed in place of a special register, except when either of the -options `--no-predefined-syms' and `--fixed-special-register-names' are -specified. Then only the special register names above are allowed for -the instructions having a special register operand; `GET' and `PUT'. - - -File: as.info, Node: MMIX-Pseudos, Prev: MMIX-Regs, Up: MMIX-Syntax - -9.28.3.4 Assembler Directives -............................. - -`LOC' - The `LOC' directive sets the current location to the value of the - operand field, which may include changing sections. If the - operand is a constant, the section is set to either `.data' if the - value is `0x2000000000000000' or larger, else it is set to `.text'. - Within a section, the current location may only be changed to - monotonically higher addresses. A LOC expression must be a - previously defined symbol or a "pure" constant. - - An example, which sets the label PREV to the current location, and - updates the current location to eight bytes forward: - prev LOC @+8 - - When a LOC has a constant as its operand, a symbol - `__.MMIX.start..text' or `__.MMIX.start..data' is defined - depending on the address as mentioned above. Each such symbol is - interpreted as special by the linker, locating the section at that - address. Note that if multiple files are linked, the first object - file with that section will be mapped to that address (not - necessarily the file with the LOC definition). - -`LOCAL' - Example: - LOCAL external_symbol - LOCAL 42 - .local asymbol - - This directive-operation generates a link-time assertion that the - operand does not correspond to a global register. The operand is - an expression that at link-time resolves to a register symbol or a - number. A number is treated as the register having that number. - There is one restriction on the use of this directive: the - pseudo-directive must be placed in a section with contents, code - or data. - -`IS' - The `IS' directive: - asymbol IS an_expression - sets the symbol `asymbol' to `an_expression'. A symbol may not be - set more than once using this directive. Local labels may be set - using this directive, for example: - 5H IS @+4 - -`GREG' - This directive reserves a global register, gives it an initial - value and optionally gives it a symbolic name. Some examples: - - areg GREG - breg GREG data_value - GREG data_buffer - .greg creg, another_data_value - - The symbolic register name can be used in place of a (non-special) - register. If a value isn't provided, it defaults to zero. Unless - the option `--no-merge-gregs' is specified, non-zero registers - allocated with this directive may be eliminated by `as'; another - register with the same value used in its place. Any of the - instructions `CSWAP', `GO', `LDA', `LDBU', `LDB', `LDHT', `LDOU', - `LDO', `LDSF', `LDTU', `LDT', `LDUNC', `LDVTS', `LDWU', `LDW', - `PREGO', `PRELD', `PREST', `PUSHGO', `STBU', `STB', `STCO', `STHT', - `STOU', `STSF', `STTU', `STT', `STUNC', `SYNCD', `SYNCID', can - have a value nearby an initial value in place of its second and - third operands. Here, "nearby" is defined as within the range - 0...255 from the initial value of such an allocated register. - - buffer1 BYTE 0,0,0,0,0 - buffer2 BYTE 0,0,0,0,0 - ... - GREG buffer1 - LDOU $42,buffer2 - In the example above, the `Y' field of the `LDOUI' instruction - (LDOU with a constant Z) will be replaced with the global register - allocated for `buffer1', and the `Z' field will have the value 5, - the offset from `buffer1' to `buffer2'. The result is equivalent - to this code: - buffer1 BYTE 0,0,0,0,0 - buffer2 BYTE 0,0,0,0,0 - ... - tmpreg GREG buffer1 - LDOU $42,tmpreg,(buffer2-buffer1) - - Global registers allocated with this directive are allocated in - order higher-to-lower within a file. Other than that, the exact - order of register allocation and elimination is undefined. For - example, the order is undefined when more than one file with such - directives are linked together. With the options `-x' and - `--linker-allocated-gregs', `GREG' directives for two-operand - cases like the one mentioned above can be omitted. Sufficient - global registers will then be allocated by the linker. - -`BYTE' - The `BYTE' directive takes a series of operands separated by a - comma. If an operand is a string (*note Strings::), each - character of that string is emitted as a byte. Other operands - must be constant expressions without forward references, in the - range 0...255. If you need operands having expressions with - forward references, use `.byte' (*note Byte::). An operand can be - omitted, defaulting to a zero value. - -`WYDE' -`TETRA' -`OCTA' - The directives `WYDE', `TETRA' and `OCTA' emit constants of two, - four and eight bytes size respectively. Before anything else - happens for the directive, the current location is aligned to the - respective constant-size boundary. If a label is defined at the - beginning of the line, its value will be that after the alignment. - A single operand can be omitted, defaulting to a zero value - emitted for the directive. Operands can be expressed as strings - (*note Strings::), in which case each character in the string is - emitted as a separate constant of the size indicated by the - directive. - -`PREFIX' - The `PREFIX' directive sets a symbol name prefix to be prepended to - all symbols (except local symbols, *note MMIX-Symbols::), that are - not prefixed with `:', until the next `PREFIX' directive. Such - prefixes accumulate. For example, - PREFIX a - PREFIX b - c IS 0 - defines a symbol `abc' with the value 0. - -`BSPEC' -`ESPEC' - A pair of `BSPEC' and `ESPEC' directives delimit a section of - special contents (without specified semantics). Example: - BSPEC 42 - TETRA 1,2,3 - ESPEC - The single operand to `BSPEC' must be number in the range 0...255. - The `BSPEC' number 80 is used by the GNU binutils implementation. - - -File: as.info, Node: MMIX-mmixal, Prev: MMIX-Syntax, Up: MMIX-Dependent - -9.28.4 Differences to `mmixal' ------------------------------- - -The binutils `as' and `ld' combination has a few differences in -function compared to `mmixal' (*note mmixsite::). - - The replacement of a symbol with a GREG-allocated register (*note -GREG-base::) is not handled the exactly same way in `as' as in -`mmixal'. This is apparent in the `mmixal' example file `inout.mms', -where different registers with different offsets, eventually yielding -the same address, are used in the first instruction. This type of -difference should however not affect the function of any program unless -it has specific assumptions about the allocated register number. - - Line numbers (in the `mmo' object format) are currently not -supported. - - Expression operator precedence is not that of mmixal: operator -precedence is that of the C programming language. It's recommended to -use parentheses to explicitly specify wanted operator precedence -whenever more than one type of operators are used. - - The serialize unary operator `&', the fractional division operator -`//', the logical not operator `!' and the modulus operator `%' are not -available. - - Symbols are not global by default, unless the option -`--globalize-symbols' is passed. Use the `.global' directive to -globalize symbols (*note Global::). - - Operand syntax is a bit stricter with `as' than `mmixal'. For -example, you can't say `addu 1,2,3', instead you must write `addu -$1,$2,3'. - - You can't LOC to a lower address than those already visited (i.e., -"backwards"). - - A LOC directive must come before any emitted code. - - Predefined symbols are visible as file-local symbols after use. (In -the ELF file, that is--the linked mmo file has no notion of a file-local -symbol.) - - Some mapping of constant expressions to sections in LOC expressions -is attempted, but that functionality is easily confused and should be -avoided unless compatibility with `mmixal' is required. A LOC -expression to `0x2000000000000000' or higher, maps to the `.data' -section and lower addresses map to the `.text' section (*note -MMIX-loc::). - - The code and data areas are each contiguous. Sparse programs with -far-away LOC directives will take up the same amount of space as a -contiguous program with zeros filled in the gaps between the LOC -directives. If you need sparse programs, you might try and get the -wanted effect with a linker script and splitting up the code parts into -sections (*note Section::). Assembly code for this, to be compatible -with `mmixal', would look something like: - .if 0 - LOC away_expression - .else - .section away,"ax" - .fi - `as' will not execute the LOC directive and `mmixal' ignores the -lines with `.'. This construct can be used generally to help -compatibility. - - Symbols can't be defined twice-not even to the same value. - - Instruction mnemonics are recognized case-insensitive, though the -`IS' and `GREG' pseudo-operations must be specified in upper-case -characters. - - There's no unicode support. - - The following is a list of programs in `mmix.tar.gz', available at -`http://www-cs-faculty.stanford.edu/~knuth/mmix-news.html', last -checked with the version dated 2001-08-25 (md5sum -c393470cfc86fac040487d22d2bf0172) that assemble with `mmixal' but do -not assemble with `as': - -`silly.mms' - LOC to a previous address. - -`sim.mms' - Redefines symbol `Done'. - -`test.mms' - Uses the serial operator `&'. - - -File: as.info, Node: MSP430-Dependent, Next: NiosII-Dependent, Prev: MMIX-Dependent, Up: Machine Dependencies - -9.29 MSP 430 Dependent Features -=============================== - -* Menu: - -* MSP430 Options:: Options -* MSP430 Syntax:: Syntax -* MSP430 Floating Point:: Floating Point -* MSP430 Directives:: MSP 430 Machine Directives -* MSP430 Opcodes:: Opcodes -* MSP430 Profiling Capability:: Profiling Capability - - -File: as.info, Node: MSP430 Options, Next: MSP430 Syntax, Up: MSP430-Dependent - -9.29.1 Options --------------- - -`-mmcu' - selects the mpu arch. If the architecture is 430Xv2 then this also - enables NOP generation unless the `-mN' is also specified. - -`-mcpu' - selects the cpu architecture. If the architecture is 430Xv2 then - this also enables NOP generation unless the `-mN' is also - specified. - -`-mP' - enables polymorph instructions handler. - -`-mQ' - enables relaxation at assembly time. DANGEROUS! - -`-ml' - indicates that the input uses the large code model. - -`-mN' - disables the generation of a NOP instruction following any - instruction that might change the interrupts enabled/disabled - state. For the 430Xv2 architecture the instructions: `EINT', - `DINT', `BIC #8, SR', `BIS #8, SR' and `MOV.W <>, SR' must be - followed by a NOP instruction in order to ensure the correct - processing of interrupts. By default generation of the NOP - instruction happens automatically, but this command line option - disables this behaviour. It is then up to the programmer to ensure - that interrupts are enabled and disabled correctly. - -`-md' - mark the object file as one that requires data to copied from ROM - to RAM at execution startup. Disabled by default. - - - -File: as.info, Node: MSP430 Syntax, Next: MSP430 Floating Point, Prev: MSP430 Options, Up: MSP430-Dependent - -9.29.2 Syntax -------------- - -* Menu: - -* MSP430-Macros:: Macros -* MSP430-Chars:: Special Characters -* MSP430-Regs:: Register Names -* MSP430-Ext:: Assembler Extensions - - -File: as.info, Node: MSP430-Macros, Next: MSP430-Chars, Up: MSP430 Syntax - -9.29.2.1 Macros -............... - -The macro syntax used on the MSP 430 is like that described in the MSP -430 Family Assembler Specification. Normal `as' macros should still -work. - - Additional built-in macros are: - -`llo(exp)' - Extracts least significant word from 32-bit expression 'exp'. - -`lhi(exp)' - Extracts most significant word from 32-bit expression 'exp'. - -`hlo(exp)' - Extracts 3rd word from 64-bit expression 'exp'. - -`hhi(exp)' - Extracts 4rd word from 64-bit expression 'exp'. - - - They normally being used as an immediate source operand. - mov #llo(1), r10 ; == mov #1, r10 - mov #lhi(1), r10 ; == mov #0, r10 - - -File: as.info, Node: MSP430-Chars, Next: MSP430-Regs, Prev: MSP430-Macros, Up: MSP430 Syntax - -9.29.2.2 Special Characters -........................... - -A semicolon (`;') appearing anywhere on a line starts a comment that -extends to the end of that line. - - If a `#' appears as the first character of a line then the whole -line is treated as a comment, but it can also be a logical line number -directive (*note Comments::) or a preprocessor control command (*note -Preprocessing::). - - Multiple statements can appear on the same line provided that they -are separated by the `{' character. - - The character `$' in jump instructions indicates current location and -implemented only for TI syntax compatibility. - - -File: as.info, Node: MSP430-Regs, Next: MSP430-Ext, Prev: MSP430-Chars, Up: MSP430 Syntax - -9.29.2.3 Register Names -....................... - -General-purpose registers are represented by predefined symbols of the -form `rN' (for global registers), where N represents a number between -`0' and `15'. The leading letters may be in either upper or lower -case; for example, `r13' and `R7' are both valid register names. - - Register names `PC', `SP' and `SR' cannot be used as register names -and will be treated as variables. Use `r0', `r1', and `r2' instead. - - -File: as.info, Node: MSP430-Ext, Prev: MSP430-Regs, Up: MSP430 Syntax - -9.29.2.4 Assembler Extensions -............................. - -`@rN' - As destination operand being treated as `0(rn)' - -`0(rN)' - As source operand being treated as `@rn' - -`jCOND +N' - Skips next N bytes followed by jump instruction and equivalent to - `jCOND $+N+2' - - - Also, there are some instructions, which cannot be found in other -assemblers. These are branch instructions, which has different opcodes -upon jump distance. They all got PC relative addressing mode. - -`beq label' - A polymorph instruction which is `jeq label' in case if jump - distance within allowed range for cpu's jump instruction. If not, - this unrolls into a sequence of - jne $+6 - br label - -`bne label' - A polymorph instruction which is `jne label' or `jeq +4; br label' - -`blt label' - A polymorph instruction which is `jl label' or `jge +4; br label' - -`bltn label' - A polymorph instruction which is `jn label' or `jn +2; jmp +4; br - label' - -`bltu label' - A polymorph instruction which is `jlo label' or `jhs +2; br label' - -`bge label' - A polymorph instruction which is `jge label' or `jl +4; br label' - -`bgeu label' - A polymorph instruction which is `jhs label' or `jlo +4; br label' - -`bgt label' - A polymorph instruction which is `jeq +2; jge label' or `jeq +6; - jl +4; br label' - -`bgtu label' - A polymorph instruction which is `jeq +2; jhs label' or `jeq +6; - jlo +4; br label' - -`bleu label' - A polymorph instruction which is `jeq label; jlo label' or `jeq - +2; jhs +4; br label' - -`ble label' - A polymorph instruction which is `jeq label; jl label' or `jeq - +2; jge +4; br label' - -`jump label' - A polymorph instruction which is `jmp label' or `br label' - - -File: as.info, Node: MSP430 Floating Point, Next: MSP430 Directives, Prev: MSP430 Syntax, Up: MSP430-Dependent - -9.29.3 Floating Point ---------------------- - -The MSP 430 family uses IEEE 32-bit floating-point numbers. - - -File: as.info, Node: MSP430 Directives, Next: MSP430 Opcodes, Prev: MSP430 Floating Point, Up: MSP430-Dependent - -9.29.4 MSP 430 Machine Directives ---------------------------------- - -`.file' - This directive is ignored; it is accepted for compatibility with - other MSP 430 assemblers. - - _Warning:_ in other versions of the GNU assembler, `.file' is - used for the directive called `.app-file' in the MSP 430 - support. - -`.line' - This directive is ignored; it is accepted for compatibility with - other MSP 430 assemblers. - -`.arch' - Sets the target microcontroller in the same way as the `-mmcu' - command line option. - -`.cpu' - Sets the target architecture in the same way as the `-mcpu' - command line option. - -`.profiler' - This directive instructs assembler to add new profile entry to the - object file. - - - -File: as.info, Node: MSP430 Opcodes, Next: MSP430 Profiling Capability, Prev: MSP430 Directives, Up: MSP430-Dependent - -9.29.5 Opcodes --------------- - -`as' implements all the standard MSP 430 opcodes. No additional -pseudo-instructions are needed on this family. - - For information on the 430 machine instruction set, see `MSP430 -User's Manual, document slau049d', Texas Instrument, Inc. - - -File: as.info, Node: MSP430 Profiling Capability, Prev: MSP430 Opcodes, Up: MSP430-Dependent - -9.29.6 Profiling Capability ---------------------------- - -It is a performance hit to use gcc's profiling approach for this tiny -target. Even more - jtag hardware facility does not perform any -profiling functions. However we've got gdb's built-in simulator where -we can do anything. - - We define new section `.profiler' which holds all profiling -information. We define new pseudo operation `.profiler' which will -instruct assembler to add new profile entry to the object file. Profile -should take place at the present address. - - Pseudo operation format: - - `.profiler flags,function_to_profile [, cycle_corrector, extra]' - - where: - - `flags' is a combination of the following characters: - - `s' - function entry - - `x' - function exit - - `i' - function is in init section - - `f' - function is in fini section - - `l' - library call - - `c' - libc standard call - - `d' - stack value demand - - `I' - interrupt service routine - - `P' - prologue start - - `p' - prologue end - - `E' - epilogue start - - `e' - epilogue end - - `j' - long jump / sjlj unwind - - `a' - an arbitrary code fragment - - `t' - extra parameter saved (a constant value like frame size) - -`function_to_profile' - a function address - -`cycle_corrector' - a value which should be added to the cycle counter, zero if - omitted. - -`extra' - any extra parameter, zero if omitted. - - - For example: - .global fxx - .type fxx,@function - fxx: - .LFrameOffset_fxx=0x08 - .profiler "scdP", fxx ; function entry. - ; we also demand stack value to be saved - push r11 - push r10 - push r9 - push r8 - .profiler "cdpt",fxx,0, .LFrameOffset_fxx ; check stack value at this point - ; (this is a prologue end) - ; note, that spare var filled with - ; the farme size - mov r15,r8 - ... - .profiler cdE,fxx ; check stack - pop r8 - pop r9 - pop r10 - pop r11 - .profiler xcde,fxx,3 ; exit adds 3 to the cycle counter - ret ; cause 'ret' insn takes 3 cycles - - -File: as.info, Node: NiosII-Dependent, Next: NS32K-Dependent, Prev: MSP430-Dependent, Up: Machine Dependencies - -9.30 Nios II Dependent Features -=============================== - -* Menu: - -* Nios II Options:: Options -* Nios II Syntax:: Syntax -* Nios II Relocations:: Relocations -* Nios II Directives:: Nios II Machine Directives -* Nios II Opcodes:: Opcodes - - -File: as.info, Node: Nios II Options, Next: Nios II Syntax, Up: NiosII-Dependent - -9.30.1 Options --------------- - -`-relax-section' - Replace identified out-of-range branches with PC-relative `jmp' - sequences when possible. The generated code sequences are suitable - for use in position-independent code, but there is a practical - limit on the extended branch range because of the length of the - sequences. This option is the default. - -`-relax-all' - Replace branch instructions not determinable to be in range and - all call instructions with `jmp' and `callr' sequences - (respectively). This option generates absolute relocations - against the target symbols and is not appropriate for - position-independent code. - -`-no-relax' - Do not replace any branches or calls. - -`-EB' - Generate big-endian output. - -`-EL' - Generate little-endian output. This is the default. - - - -File: as.info, Node: Nios II Syntax, Next: Nios II Relocations, Prev: Nios II Options, Up: NiosII-Dependent - -9.30.2 Syntax -------------- - -* Menu: - -* Nios II Chars:: Special Characters - - -File: as.info, Node: Nios II Chars, Up: Nios II Syntax - -9.30.2.1 Special Characters -........................... - -`#' is the line comment character. `;' is the line separator character. - - -File: as.info, Node: Nios II Relocations, Next: Nios II Directives, Prev: Nios II Syntax, Up: NiosII-Dependent - -9.30.3 Nios II Machine Relocations ----------------------------------- - -`%hiadj(EXPRESSION)' - Extract the upper 16 bits of EXPRESSION and add one if the 15th - bit is set. - - The value of `%hiadj(EXPRESSION)' is: - ((EXPRESSION >> 16) & 0xffff) + ((EXPRESSION >> 15) & 0x01) - - The `%hiadj' relocation is intended to be used with the `addi', - `ld' or `st' instructions along with a `%lo', in order to load a - 32-bit constant. - - movhi r2, %hiadj(symbol) - addi r2, r2, %lo(symbol) - -`%hi(EXPRESSION)' - Extract the upper 16 bits of EXPRESSION. - -`%lo(EXPRESSION)' - Extract the lower 16 bits of EXPRESSION. - -`%gprel(EXPRESSION)' - Subtract the value of the symbol `_gp' from EXPRESSION. - - The intention of the `%gprel' relocation is to have a fast small - area of memory which only takes a 16-bit immediate to access. - - .section .sdata - fastint: - .int 123 - .section .text - ldw r4, %gprel(fastint)(gp) - -`%call(EXPRESSION)' -`%got(EXPRESSION)' -`%gotoff(EXPRESSION)' -`%gotoff_lo(EXPRESSION)' -`%gotoff_hiadj(EXPRESSION)' -`%tls_gd(EXPRESSION)' -`%tls_ie(EXPRESSION)' -`%tls_le(EXPRESSION)' -`%tls_ldm(EXPRESSION)' -`%tls_ldo(EXPRESSION)' - These relocations support the ABI for Linux Systems documented in - the `Nios II Processor Reference Handbook'. - - -File: as.info, Node: Nios II Directives, Next: Nios II Opcodes, Prev: Nios II Relocations, Up: NiosII-Dependent - -9.30.4 Nios II Machine Directives ---------------------------------- - -`.align EXPRESSION [, EXPRESSION]' - This is the generic `.align' directive, however this aligns to a - power of two. - -`.half EXPRESSION' - Create an aligned constant 2 bytes in size. - -`.word EXPRESSION' - Create an aligned constant 4 bytes in size. - -`.dword EXPRESSION' - Create an aligned constant 8 bytes in size. - -`.2byte EXPRESSION' - Create an unaligned constant 2 bytes in size. - -`.4byte EXPRESSION' - Create an unaligned constant 4 bytes in size. - -`.8byte EXPRESSION' - Create an unaligned constant 8 bytes in size. - -`.16byte EXPRESSION' - Create an unaligned constant 16 bytes in size. - -`.set noat' - Allows assembly code to use `at' register without warning. Macro - or relaxation expansions generate warnings. - -`.set at' - Assembly code using `at' register generates warnings, and macro - expansion and relaxation are enabled. - -`.set nobreak' - Allows assembly code to use `ba' and `bt' registers without - warning. - -`.set break' - Turns warnings back on for using `ba' and `bt' registers. - -`.set norelax' - Do not replace any branches or calls. - -`.set relaxsection' - Replace identified out-of-range branches with `jmp' sequences - (default). - -`.set relaxsection' - Replace all branch and call instructions with `jmp' and `callr' - sequences. - -`.set ...' - All other `.set' are the normal use. - - - -File: as.info, Node: Nios II Opcodes, Prev: Nios II Directives, Up: NiosII-Dependent - -9.30.5 Opcodes --------------- - -`as' implements all the standard Nios II opcodes documented in the -`Nios II Processor Reference Handbook', including the assembler -pseudo-instructions. - - -File: as.info, Node: NS32K-Dependent, Next: SH-Dependent, Prev: NiosII-Dependent, Up: Machine Dependencies - -9.31 NS32K Dependent Features -============================= - -* Menu: - -* NS32K Syntax:: Syntax - - -File: as.info, Node: NS32K Syntax, Up: NS32K-Dependent - -9.31.1 Syntax -------------- - -* Menu: - -* NS32K-Chars:: Special Characters - - -File: as.info, Node: NS32K-Chars, Up: NS32K Syntax - -9.31.1.1 Special Characters -........................... - -The presence of a `#' appearing anywhere on a line indicates the start -of a comment that extends to the end of that line. - - If a `#' appears as the first character of a line then the whole -line is treated as a comment, but in this case the line can also be a -logical line number directive (*note Comments::) or a preprocessor -control command (*note Preprocessing::). - - If Sequent compatibility has been configured into the assembler then -the `|' character appearing as the first character on a line will also -indicate the start of a line comment. - - The `;' character can be used to separate statements on the same -line. - - -File: as.info, Node: PDP-11-Dependent, Next: PJ-Dependent, Prev: SH64-Dependent, Up: Machine Dependencies - -9.32 PDP-11 Dependent Features -============================== - -* Menu: - -* PDP-11-Options:: Options -* PDP-11-Pseudos:: Assembler Directives -* PDP-11-Syntax:: DEC Syntax versus BSD Syntax -* PDP-11-Mnemonics:: Instruction Naming -* PDP-11-Synthetic:: Synthetic Instructions - - -File: as.info, Node: PDP-11-Options, Next: PDP-11-Pseudos, Up: PDP-11-Dependent - -9.32.1 Options --------------- - -The PDP-11 version of `as' has a rich set of machine dependent options. - -9.32.1.1 Code Generation Options -................................ - -`-mpic | -mno-pic' - Generate position-independent (or position-dependent) code. - - The default is to generate position-independent code. - -9.32.1.2 Instruction Set Extension Options -.......................................... - -These options enables or disables the use of extensions over the base -line instruction set as introduced by the first PDP-11 CPU: the KA11. -Most options come in two variants: a `-m'EXTENSION that enables -EXTENSION, and a `-mno-'EXTENSION that disables EXTENSION. - - The default is to enable all extensions. - -`-mall | -mall-extensions' - Enable all instruction set extensions. - -`-mno-extensions' - Disable all instruction set extensions. - -`-mcis | -mno-cis' - Enable (or disable) the use of the commercial instruction set, - which consists of these instructions: `ADDNI', `ADDN', `ADDPI', - `ADDP', `ASHNI', `ASHN', `ASHPI', `ASHP', `CMPCI', `CMPC', - `CMPNI', `CMPN', `CMPPI', `CMPP', `CVTLNI', `CVTLN', `CVTLPI', - `CVTLP', `CVTNLI', `CVTNL', `CVTNPI', `CVTNP', `CVTPLI', `CVTPL', - `CVTPNI', `CVTPN', `DIVPI', `DIVP', `L2DR', `L3DR', `LOCCI', - `LOCC', `MATCI', `MATC', `MOVCI', `MOVC', `MOVRCI', `MOVRC', - `MOVTCI', `MOVTC', `MULPI', `MULP', `SCANCI', `SCANC', `SKPCI', - `SKPC', `SPANCI', `SPANC', `SUBNI', `SUBN', `SUBPI', and `SUBP'. - -`-mcsm | -mno-csm' - Enable (or disable) the use of the `CSM' instruction. - -`-meis | -mno-eis' - Enable (or disable) the use of the extended instruction set, which - consists of these instructions: `ASHC', `ASH', `DIV', `MARK', - `MUL', `RTT', `SOB' `SXT', and `XOR'. - -`-mfis | -mkev11' -`-mno-fis | -mno-kev11' - Enable (or disable) the use of the KEV11 floating-point - instructions: `FADD', `FDIV', `FMUL', and `FSUB'. - -`-mfpp | -mfpu | -mfp-11' -`-mno-fpp | -mno-fpu | -mno-fp-11' - Enable (or disable) the use of FP-11 floating-point instructions: - `ABSF', `ADDF', `CFCC', `CLRF', `CMPF', `DIVF', `LDCFF', `LDCIF', - `LDEXP', `LDF', `LDFPS', `MODF', `MULF', `NEGF', `SETD', `SETF', - `SETI', `SETL', `STCFF', `STCFI', `STEXP', `STF', `STFPS', `STST', - `SUBF', and `TSTF'. - -`-mlimited-eis | -mno-limited-eis' - Enable (or disable) the use of the limited extended instruction - set: `MARK', `RTT', `SOB', `SXT', and `XOR'. - - The -mno-limited-eis options also implies -mno-eis. - -`-mmfpt | -mno-mfpt' - Enable (or disable) the use of the `MFPT' instruction. - -`-mmultiproc | -mno-multiproc' - Enable (or disable) the use of multiprocessor instructions: - `TSTSET' and `WRTLCK'. - -`-mmxps | -mno-mxps' - Enable (or disable) the use of the `MFPS' and `MTPS' instructions. - -`-mspl | -mno-spl' - Enable (or disable) the use of the `SPL' instruction. - - Enable (or disable) the use of the microcode instructions: `LDUB', - `MED', and `XFC'. - -9.32.1.3 CPU Model Options -.......................... - -These options enable the instruction set extensions supported by a -particular CPU, and disables all other extensions. - -`-mka11' - KA11 CPU. Base line instruction set only. - -`-mkb11' - KB11 CPU. Enable extended instruction set and `SPL'. - -`-mkd11a' - KD11-A CPU. Enable limited extended instruction set. - -`-mkd11b' - KD11-B CPU. Base line instruction set only. - -`-mkd11d' - KD11-D CPU. Base line instruction set only. - -`-mkd11e' - KD11-E CPU. Enable extended instruction set, `MFPS', and `MTPS'. - -`-mkd11f | -mkd11h | -mkd11q' - KD11-F, KD11-H, or KD11-Q CPU. Enable limited extended - instruction set, `MFPS', and `MTPS'. - -`-mkd11k' - KD11-K CPU. Enable extended instruction set, `LDUB', `MED', - `MFPS', `MFPT', `MTPS', and `XFC'. - -`-mkd11z' - KD11-Z CPU. Enable extended instruction set, `CSM', `MFPS', - `MFPT', `MTPS', and `SPL'. - -`-mf11' - F11 CPU. Enable extended instruction set, `MFPS', `MFPT', and - `MTPS'. - -`-mj11' - J11 CPU. Enable extended instruction set, `CSM', `MFPS', `MFPT', - `MTPS', `SPL', `TSTSET', and `WRTLCK'. - -`-mt11' - T11 CPU. Enable limited extended instruction set, `MFPS', and - `MTPS'. - -9.32.1.4 Machine Model Options -.............................. - -These options enable the instruction set extensions supported by a -particular machine model, and disables all other extensions. - -`-m11/03' - Same as `-mkd11f'. - -`-m11/04' - Same as `-mkd11d'. - -`-m11/05 | -m11/10' - Same as `-mkd11b'. - -`-m11/15 | -m11/20' - Same as `-mka11'. - -`-m11/21' - Same as `-mt11'. - -`-m11/23 | -m11/24' - Same as `-mf11'. - -`-m11/34' - Same as `-mkd11e'. - -`-m11/34a' - Ame as `-mkd11e' `-mfpp'. - -`-m11/35 | -m11/40' - Same as `-mkd11a'. - -`-m11/44' - Same as `-mkd11z'. - -`-m11/45 | -m11/50 | -m11/55 | -m11/70' - Same as `-mkb11'. - -`-m11/53 | -m11/73 | -m11/83 | -m11/84 | -m11/93 | -m11/94' - Same as `-mj11'. - -`-m11/60' - Same as `-mkd11k'. - - -File: as.info, Node: PDP-11-Pseudos, Next: PDP-11-Syntax, Prev: PDP-11-Options, Up: PDP-11-Dependent - -9.32.2 Assembler Directives ---------------------------- - -The PDP-11 version of `as' has a few machine dependent assembler -directives. - -`.bss' - Switch to the `bss' section. - -`.even' - Align the location counter to an even number. - - -File: as.info, Node: PDP-11-Syntax, Next: PDP-11-Mnemonics, Prev: PDP-11-Pseudos, Up: PDP-11-Dependent - -9.32.3 PDP-11 Assembly Language Syntax --------------------------------------- - -`as' supports both DEC syntax and BSD syntax. The only difference is -that in DEC syntax, a `#' character is used to denote an immediate -constants, while in BSD syntax the character for this purpose is `$'. - - general-purpose registers are named `r0' through `r7'. Mnemonic -alternatives for `r6' and `r7' are `sp' and `pc', respectively. - - Floating-point registers are named `ac0' through `ac3', or -alternatively `fr0' through `fr3'. - - Comments are started with a `#' or a `/' character, and extend to -the end of the line. (FIXME: clash with immediates?) - - Multiple statements on the same line can be separated by the `;' -character. - - -File: as.info, Node: PDP-11-Mnemonics, Next: PDP-11-Synthetic, Prev: PDP-11-Syntax, Up: PDP-11-Dependent - -9.32.4 Instruction Naming -------------------------- - -Some instructions have alternative names. - -`BCC' - `BHIS' - -`BCS' - `BLO' - -`L2DR' - `L2D' - -`L3DR' - `L3D' - -`SYS' - `TRAP' - - -File: as.info, Node: PDP-11-Synthetic, Prev: PDP-11-Mnemonics, Up: PDP-11-Dependent - -9.32.5 Synthetic Instructions ------------------------------ - -The `JBR' and `J'CC synthetic instructions are not supported yet. - - -File: as.info, Node: PJ-Dependent, Next: PPC-Dependent, Prev: PDP-11-Dependent, Up: Machine Dependencies - -9.33 picoJava Dependent Features -================================ - -* Menu: - -* PJ Options:: Options -* PJ Syntax:: PJ Syntax - - -File: as.info, Node: PJ Options, Next: PJ Syntax, Up: PJ-Dependent - -9.33.1 Options --------------- - -`as' has two additional command-line options for the picoJava -architecture. -`-ml' - This option selects little endian data output. - -`-mb' - This option selects big endian data output. - - -File: as.info, Node: PJ Syntax, Prev: PJ Options, Up: PJ-Dependent - -9.33.2 PJ Syntax ----------------- - -* Menu: - -* PJ-Chars:: Special Characters - - -File: as.info, Node: PJ-Chars, Up: PJ Syntax - -9.33.2.1 Special Characters -........................... - -The presence of a `!' or `/' on a line indicates the start of a comment -that extends to the end of the current line. - - If a `#' appears as the first character of a line then the whole -line is treated as a comment, but in this case the line could also be a -logical line number directive (*note Comments::) or a preprocessor -control command (*note Preprocessing::). - - The `;' character can be used to separate statements on the same -line. - - -File: as.info, Node: PPC-Dependent, Next: RL78-Dependent, Prev: PJ-Dependent, Up: Machine Dependencies - -9.34 PowerPC Dependent Features -=============================== - -* Menu: - -* PowerPC-Opts:: Options -* PowerPC-Pseudo:: PowerPC Assembler Directives -* PowerPC-Syntax:: PowerPC Syntax - - -File: as.info, Node: PowerPC-Opts, Next: PowerPC-Pseudo, Up: PPC-Dependent - -9.34.1 Options --------------- - -The PowerPC chip family includes several successive levels, using the -same core instruction set, but including a few additional instructions -at each level. There are exceptions to this however. For details on -what instructions each variant supports, please see the chip's -architecture reference manual. - - The following table lists all available PowerPC options. - -`-a32' - Generate ELF32 or XCOFF32. - -`-a64' - Generate ELF64 or XCOFF64. - -`-K PIC' - Set EF_PPC_RELOCATABLE_LIB in ELF flags. - -`-mpwrx | -mpwr2' - Generate code for POWER/2 (RIOS2). - -`-mpwr' - Generate code for POWER (RIOS1) - -`-m601' - Generate code for PowerPC 601. - -`-mppc, -mppc32, -m603, -m604' - Generate code for PowerPC 603/604. - -`-m403, -m405' - Generate code for PowerPC 403/405. - -`-m440' - Generate code for PowerPC 440. BookE and some 405 instructions. - -`-m464' - Generate code for PowerPC 464. - -`-m476' - Generate code for PowerPC 476. - -`-m7400, -m7410, -m7450, -m7455' - Generate code for PowerPC 7400/7410/7450/7455. - -`-m750cl' - Generate code for PowerPC 750CL. - -`-mppc64, -m620' - Generate code for PowerPC 620/625/630. - -`-me500, -me500x2' - Generate code for Motorola e500 core complex. - -`-me500mc' - Generate code for Freescale e500mc core complex. - -`-me500mc64' - Generate code for Freescale e500mc64 core complex. - -`-me5500' - Generate code for Freescale e5500 core complex. - -`-me6500' - Generate code for Freescale e6500 core complex. - -`-mspe' - Generate code for Motorola SPE instructions. - -`-mtitan' - Generate code for AppliedMicro Titan core complex. - -`-mppc64bridge' - Generate code for PowerPC 64, including bridge insns. - -`-mbooke' - Generate code for 32-bit BookE. - -`-ma2' - Generate code for A2 architecture. - -`-me300' - Generate code for PowerPC e300 family. - -`-maltivec' - Generate code for processors with AltiVec instructions. - -`-mvle' - Generate code for Freescale PowerPC VLE instructions. - -`-mvsx' - Generate code for processors with Vector-Scalar (VSX) instructions. - -`-mhtm' - Generate code for processors with Hardware Transactional Memory - instructions. - -`-mpower4, -mpwr4' - Generate code for Power4 architecture. - -`-mpower5, -mpwr5, -mpwr5x' - Generate code for Power5 architecture. - -`-mpower6, -mpwr6' - Generate code for Power6 architecture. - -`-mpower7, -mpwr7' - Generate code for Power7 architecture. - -`-mpower8, -mpwr8' - Generate code for Power8 architecture. - -`-mcell' - -`-mcell' - Generate code for Cell Broadband Engine architecture. - -`-mcom' - Generate code Power/PowerPC common instructions. - -`-many' - Generate code for any architecture (PWR/PWRX/PPC). - -`-mregnames' - Allow symbolic names for registers. - -`-mno-regnames' - Do not allow symbolic names for registers. - -`-mrelocatable' - Support for GCC's -mrelocatable option. - -`-mrelocatable-lib' - Support for GCC's -mrelocatable-lib option. - -`-memb' - Set PPC_EMB bit in ELF flags. - -`-mlittle, -mlittle-endian, -le' - Generate code for a little endian machine. - -`-mbig, -mbig-endian, -be' - Generate code for a big endian machine. - -`-msolaris' - Generate code for Solaris. - -`-mno-solaris' - Do not generate code for Solaris. - -`-nops=COUNT' - If an alignment directive inserts more than COUNT nops, put a - branch at the beginning to skip execution of the nops. - - -File: as.info, Node: PowerPC-Pseudo, Next: PowerPC-Syntax, Prev: PowerPC-Opts, Up: PPC-Dependent - -9.34.2 PowerPC Assembler Directives ------------------------------------ - -A number of assembler directives are available for PowerPC. The -following table is far from complete. - -`.machine "string"' - This directive allows you to change the machine for which code is - generated. `"string"' may be any of the -m cpu selection options - (without the -m) enclosed in double quotes, `"push"', or `"pop"'. - `.machine "push"' saves the currently selected cpu, which may be - restored with `.machine "pop"'. - - -File: as.info, Node: PowerPC-Syntax, Prev: PowerPC-Pseudo, Up: PPC-Dependent - -9.34.3 PowerPC Syntax ---------------------- - -* Menu: - -* PowerPC-Chars:: Special Characters - - -File: as.info, Node: PowerPC-Chars, Up: PowerPC-Syntax - -9.34.3.1 Special Characters -........................... - -The presence of a `#' on a line indicates the start of a comment that -extends to the end of the current line. - - If a `#' appears as the first character of a line then the whole -line is treated as a comment, but in this case the line could also be a -logical line number directive (*note Comments::) or a preprocessor -control command (*note Preprocessing::). - - If the assembler has been configured for the ppc-*-solaris* target -then the `!' character also acts as a line comment character. This can -be disabled via the `-mno-solaris' command line option. - - The `;' character can be used to separate statements on the same -line. - - -File: as.info, Node: RL78-Dependent, Next: RX-Dependent, Prev: PPC-Dependent, Up: Machine Dependencies - -9.35 RL78 Dependent Features -============================ - -* Menu: - -* RL78-Opts:: RL78 Assembler Command Line Options -* RL78-Modifiers:: Symbolic Operand Modifiers -* RL78-Directives:: Assembler Directives -* RL78-Syntax:: Syntax - - -File: as.info, Node: RL78-Opts, Next: RL78-Modifiers, Up: RL78-Dependent - -9.35.1 RL78 Options -------------------- - -`relax' - Enable support for link-time relaxation. - -`mg10' - Mark the generated binary as targeting the G10 variant of the RL78 - architecture. - - - -File: as.info, Node: RL78-Modifiers, Next: RL78-Directives, Prev: RL78-Opts, Up: RL78-Dependent - -9.35.2 Symbolic Operand Modifiers ---------------------------------- - -The RL78 has three modifiers that adjust the relocations used by the -linker: - -`%lo16()' - When loading a 20-bit (or wider) address into registers, this - modifier selects the 16 least significant bits. - - movw ax,#%lo16(_sym) - -`%hi16()' - When loading a 20-bit (or wider) address into registers, this - modifier selects the 16 most significant bits. - - movw ax,#%hi16(_sym) - -`%hi8()' - When loading a 20-bit (or wider) address into registers, this - modifier selects the 8 bits that would go into CS or ES (i.e. bits - 23..16). - - mov es, #%hi8(_sym) - - - -File: as.info, Node: RL78-Directives, Next: RL78-Syntax, Prev: RL78-Modifiers, Up: RL78-Dependent - -9.35.3 Assembler Directives ---------------------------- - -In addition to the common directives, the RL78 adds these: - -`.double' - Output a constant in "double" format, which is a 32-bit floating - point value on RL78. - -`.bss' - Select the BSS section. - -`.3byte' - Output a constant value in a three byte format. - -`.int' -`.word' - Output a constant value in a four byte format. - - - -File: as.info, Node: RL78-Syntax, Prev: RL78-Directives, Up: RL78-Dependent - -9.35.4 Syntax for the RL78 --------------------------- - -* Menu: - -* RL78-Chars:: Special Characters - - -File: as.info, Node: RL78-Chars, Up: RL78-Syntax - -9.35.4.1 Special Characters -........................... - -The presence of a `;' appearing anywhere on a line indicates the start -of a comment that extends to the end of that line. - - If a `#' appears as the first character of a line then the whole -line is treated as a comment, but in this case the line can also be a -logical line number directive (*note Comments::) or a preprocessor -control command (*note Preprocessing::). - - The `|' character can be used to separate statements on the same -line. - - -File: as.info, Node: RX-Dependent, Next: S/390-Dependent, Prev: RL78-Dependent, Up: Machine Dependencies - -9.36 RX Dependent Features -========================== - -* Menu: - -* RX-Opts:: RX Assembler Command Line Options -* RX-Modifiers:: Symbolic Operand Modifiers -* RX-Directives:: Assembler Directives -* RX-Float:: Floating Point -* RX-Syntax:: Syntax - - -File: as.info, Node: RX-Opts, Next: RX-Modifiers, Up: RX-Dependent - -9.36.1 RX Options ------------------ - -The Renesas RX port of `as' has a few target specfic command line -options: - -`-m32bit-doubles' - This option controls the ABI and indicates to use a 32-bit float - ABI. It has no effect on the assembled instructions, but it does - influence the behaviour of the `.double' pseudo-op. This is the - default. - -`-m64bit-doubles' - This option controls the ABI and indicates to use a 64-bit float - ABI. It has no effect on the assembled instructions, but it does - influence the behaviour of the `.double' pseudo-op. - -`-mbig-endian' - This option controls the ABI and indicates to use a big-endian data - ABI. It has no effect on the assembled instructions, but it does - influence the behaviour of the `.short', `.hword', `.int', - `.word', `.long', `.quad' and `.octa' pseudo-ops. - -`-mlittle-endian' - This option controls the ABI and indicates to use a little-endian - data ABI. It has no effect on the assembled instructions, but it - does influence the behaviour of the `.short', `.hword', `.int', - `.word', `.long', `.quad' and `.octa' pseudo-ops. This is the - default. - -`-muse-conventional-section-names' - This option controls the default names given to the code (.text), - initialised data (.data) and uninitialised data sections (.bss). - -`-muse-renesas-section-names' - This option controls the default names given to the code (.P), - initialised data (.D_1) and uninitialised data sections (.B_1). - This is the default. - -`-msmall-data-limit' - This option tells the assembler that the small data limit feature - of the RX port of GCC is being used. This results in the assembler - generating an undefined reference to a symbol called `__gp' for - use by the relocations that are needed to support the small data - limit feature. This option is not enabled by default as it would - otherwise pollute the symbol table. - -`-mpid' - This option tells the assembler that the position independent data - of the RX port of GCC is being used. This results in the assembler - generating an undefined reference to a symbol called `__pid_base', - and also setting the RX_PID flag bit in the e_flags field of the - ELF header of the object file. - -`-mint-register=NUM' - This option tells the assembler how many registers have been - reserved for use by interrupt handlers. This is needed in order - to compute the correct values for the `%gpreg' and `%pidreg' meta - registers. - -`-mgcc-abi' - This option tells the assembler that the old GCC ABI is being used - by the assembled code. With this version of the ABI function - arguments that are passed on the stack are aligned to a 32-bit - boundary. - -`-mrx-abi' - This option tells the assembler that the official RX ABI is being - used by the assembled code. With this version of the ABI function - arguments that are passed on the stack are aligned to their natural - alignments. This option is the default. - -`-mcpu=NAME' - This option tells the assembler the target CPU type. Currently the - `rx200', `rx600' and `rx610' are recognised as valid cpu names. - Attempting to assemble an instruction not supported by the - indicated cpu type will result in an error message being generated. - - - -File: as.info, Node: RX-Modifiers, Next: RX-Directives, Prev: RX-Opts, Up: RX-Dependent - -9.36.2 Symbolic Operand Modifiers ---------------------------------- - -The assembler supports one modifier when using symbol addresses in RX -instruction operands. The general syntax is the following: - - %gp(symbol) - - The modifier returns the offset from the __GP symbol to the -specified symbol as a 16-bit value. The intent is that this offset -should be used in a register+offset move instruction when generating -references to small data. Ie, like this: - - mov.W %gp(_foo)[%gpreg], r1 - - The assembler also supports two meta register names which can be used -to refer to registers whose values may not be known to the programmer. -These meta register names are: - -`%gpreg' - The small data address register. - -`%pidreg' - The PID base address register. - - - Both registers normally have the value r13, but this can change if -some registers have been reserved for use by interrupt handlers or if -both the small data limit and position independent data features are -being used at the same time. - - -File: as.info, Node: RX-Directives, Next: RX-Float, Prev: RX-Modifiers, Up: RX-Dependent - -9.36.3 Assembler Directives ---------------------------- - -The RX version of `as' has the following specific assembler directives: - -`.3byte' - Inserts a 3-byte value into the output file at the current - location. - -`.fetchalign' - If the next opcode following this directive spans a fetch line - boundary (8 byte boundary), the opcode is aligned to that boundary. - If the next opcode does not span a fetch line, this directive has - no effect. Note that one or more labels may be between this - directive and the opcode; those labels are aligned as well. Any - inserted bytes due to alignment will form a NOP opcode. - - - -File: as.info, Node: RX-Float, Next: RX-Syntax, Prev: RX-Directives, Up: RX-Dependent - -9.36.4 Floating Point ---------------------- - -The floating point formats generated by directives are these. - -`.float' - `Single' precision (32-bit) floating point constants. - -`.double' - If the `-m64bit-doubles' command line option has been specified - then then `double' directive generates `double' precision (64-bit) - floating point constants, otherwise it generates `single' - precision (32-bit) floating point constants. To force the - generation of 64-bit floating point constants used the `dc.d' - directive instead. - - - -File: as.info, Node: RX-Syntax, Prev: RX-Float, Up: RX-Dependent - -9.36.5 Syntax for the RX ------------------------- - -* Menu: - -* RX-Chars:: Special Characters - - -File: as.info, Node: RX-Chars, Up: RX-Syntax - -9.36.5.1 Special Characters -........................... - -The presence of a `;' appearing anywhere on a line indicates the start -of a comment that extends to the end of that line. - - If a `#' appears as the first character of a line then the whole -line is treated as a comment, but in this case the line can also be a -logical line number directive (*note Comments::) or a preprocessor -control command (*note Preprocessing::). - - The `!' character can be used to separate statements on the same -line. - - -File: as.info, Node: S/390-Dependent, Next: SCORE-Dependent, Prev: RX-Dependent, Up: Machine Dependencies - -9.37 IBM S/390 Dependent Features -================================= - - The s390 version of `as' supports two architectures modes and seven -chip levels. The architecture modes are the Enterprise System -Architecture (ESA) and the newer z/Architecture mode. The chip levels -are g5, g6, z900, z990, z9-109, z9-ec, z10, z196, and zEC12. - -* Menu: - -* s390 Options:: Command-line Options. -* s390 Characters:: Special Characters. -* s390 Syntax:: Assembler Instruction syntax. -* s390 Directives:: Assembler Directives. -* s390 Floating Point:: Floating Point. - - -File: as.info, Node: s390 Options, Next: s390 Characters, Up: S/390-Dependent - -9.37.1 Options --------------- - -The following table lists all available s390 specific options: - -`-m31 | -m64' - Select 31- or 64-bit ABI implying a word size of 32- or 64-bit. - - These options are only available with the ELF object file format, - and require that the necessary BFD support has been included (on a - 31-bit platform you must add -enable-64-bit-bfd on the call to the - configure script to enable 64-bit usage and use s390x as target - platform). - -`-mesa | -mzarch' - Select the architecture mode, either the Enterprise System - Architecture (esa) mode or the z/Architecture mode (zarch). - - The 64-bit instructions are only available with the z/Architecture - mode. The combination of `-m64' and `-mesa' results in a warning - message. - -`-march=CPU' - This option specifies the target processor. The following - processor names are recognized: `g5', `g6', `z900', `z990', - `z9-109', `z9-ec', `z10' and `z196'. Assembling an instruction - that is not supported on the target processor results in an error - message. Do not specify `g5' or `g6' with `-mzarch'. - -`-mregnames' - Allow symbolic names for registers. - -`-mno-regnames' - Do not allow symbolic names for registers. - -`-mwarn-areg-zero' - Warn whenever the operand for a base or index register has been - specified but evaluates to zero. This can indicate the misuse of - general purpose register 0 as an address register. - - - -File: as.info, Node: s390 Characters, Next: s390 Syntax, Prev: s390 Options, Up: S/390-Dependent - -9.37.2 Special Characters -------------------------- - -`#' is the line comment character. - - If a `#' appears as the first character of a line then the whole -line is treated as a comment, but in this case the line could also be a -logical line number directive (*note Comments::) or a preprocessor -control command (*note Preprocessing::). - - The `;' character can be used instead of a newline to separate -statements. - - -File: as.info, Node: s390 Syntax, Next: s390 Directives, Prev: s390 Characters, Up: S/390-Dependent - -9.37.3 Instruction syntax -------------------------- - -The assembler syntax closely follows the syntax outlined in Enterprise -Systems Architecture/390 Principles of Operation (SA22-7201) and the -z/Architecture Principles of Operation (SA22-7832). - - Each instruction has two major parts, the instruction mnemonic and -the instruction operands. The instruction format varies. - -* Menu: - -* s390 Register:: Register Naming -* s390 Mnemonics:: Instruction Mnemonics -* s390 Operands:: Instruction Operands -* s390 Formats:: Instruction Formats -* s390 Aliases:: Instruction Aliases -* s390 Operand Modifier:: Instruction Operand Modifier -* s390 Instruction Marker:: Instruction Marker -* s390 Literal Pool Entries:: Literal Pool Entries - - -File: as.info, Node: s390 Register, Next: s390 Mnemonics, Up: s390 Syntax - -9.37.3.1 Register naming -........................ - -The `as' recognizes a number of predefined symbols for the various -processor registers. A register specification in one of the instruction -formats is an unsigned integer between 0 and 15. The specific -instruction and the position of the register in the instruction format -denotes the type of the register. The register symbols are prefixed with -`%': - - %rN the 16 general purpose registers, 0 <= N <= 15 - %fN the 16 floating point registers, 0 <= N <= 15 - %aN the 16 access registers, 0 <= N <= 15 - %cN the 16 control registers, 0 <= N <= 15 - %lit an alias for the general purpose register %r13 - %sp an alias for the general purpose register %r15 - - -File: as.info, Node: s390 Mnemonics, Next: s390 Operands, Prev: s390 Register, Up: s390 Syntax - -9.37.3.2 Instruction Mnemonics -.............................. - -All instructions documented in the Principles of Operation are supported -with the mnemonic and order of operands as described. The instruction -mnemonic identifies the instruction format (*Note s390 Formats::) and -the specific operation code for the instruction. For example, the `lr' -mnemonic denotes the instruction format `RR' with the operation code -`0x18'. - - The definition of the various mnemonics follows a scheme, where the -first character usually hint at the type of the instruction: - - a add instruction, for example `al' for add logical 32-bit - b branch instruction, for example `bc' for branch on condition - c compare or convert instruction, for example `cr' for compare - register 32-bit - d divide instruction, for example `dlr' devide logical register - 64-bit to 32-bit - i insert instruction, for example `ic' insert character - l load instruction, for example `ltr' load and test register - mv move instruction, for example `mvc' move character - m multiply instruction, for example `mh' multiply halfword - n and instruction, for example `ni' and immediate - o or instruction, for example `oc' or character - sla, sll shift left single instruction - sra, srl shift right single instruction - st store instruction, for example `stm' store multiple - s subtract instruction, for example `slr' subtract - logical 32-bit - t test or translate instruction, of example `tm' test under mask - x exclusive or instruction, for example `xc' exclusive or - character - - Certain characters at the end of the mnemonic may describe a property -of the instruction: - - c the instruction uses a 8-bit character operand - f the instruction extends a 32-bit operand to 64 bit - g the operands are treated as 64-bit values - h the operand uses a 16-bit halfword operand - i the instruction uses an immediate operand - l the instruction uses unsigned, logical operands - m the instruction uses a mask or operates on multiple values - r if r is the last character, the instruction operates on registers - y the instruction uses 20-bit displacements - - There are many exceptions to the scheme outlined in the above lists, -in particular for the priviledged instructions. For non-priviledged -instruction it works quite well, for example the instruction `clgfr' c: -compare instruction, l: unsigned operands, g: 64-bit operands, f: 32- -to 64-bit extension, r: register operands. The instruction compares an -64-bit value in a register with the zero extended 32-bit value from a -second register. For a complete list of all mnemonics see appendix B -in the Principles of Operation. - - -File: as.info, Node: s390 Operands, Next: s390 Formats, Prev: s390 Mnemonics, Up: s390 Syntax - -9.37.3.3 Instruction Operands -............................. - -Instruction operands can be grouped into three classes, operands located -in registers, immediate operands, and operands in storage. - - A register operand can be located in general, floating-point, access, -or control register. The register is identified by a four-bit field. -The field containing the register operand is called the R field. - - Immediate operands are contained within the instruction and can have -8, 16 or 32 bits. The field containing the immediate operand is called -the I field. Dependent on the instruction the I field is either signed -or unsigned. - - A storage operand consists of an address and a length. The address -of a storage operands can be specified in any of these ways: - - * The content of a single general R - - * The sum of the content of a general register called the base - register B plus the content of a displacement field D - - * The sum of the contents of two general registers called the index - register X and the base register B plus the content of a - displacement field - - * The sum of the current instruction address and a 32-bit signed - immediate field multiplied by two. - - The length of a storage operand can be: - - * Implied by the instruction - - * Specified by a bitmask - - * Specified by a four-bit or eight-bit length field L - - * Specified by the content of a general register - - The notation for storage operand addresses formed from multiple -fields is as follows: - -`Dn(Bn)' - the address for operand number n is formed from the content of - general register Bn called the base register and the displacement - field Dn. - -`Dn(Xn,Bn)' - the address for operand number n is formed from the content of - general register Xn called the index register, general register Bn - called the base register and the displacement field Dn. - -`Dn(Ln,Bn)' - the address for operand number n is formed from the content of - general regiser Bn called the base register and the displacement - field Dn. The length of the operand n is specified by the field - Ln. - - The base registers Bn and the index registers Xn of a storage -operand can be skipped. If Bn and Xn are skipped, a zero will be stored -to the operand field. The notation changes as follows: - - full notation short notation - ------------------------------------------ - Dn(0,Bn) Dn(Bn) - Dn(0,0) Dn - Dn(0) Dn - Dn(Ln,0) Dn(Ln) - - -File: as.info, Node: s390 Formats, Next: s390 Aliases, Prev: s390 Operands, Up: s390 Syntax - -9.37.3.4 Instruction Formats -............................ - -The Principles of Operation manuals lists 26 instruction formats where -some of the formats have multiple variants. For the `.insn' pseudo -directive the assembler recognizes some of the formats. Typically, the -most general variant of the instruction format is used by the `.insn' -directive. - - The following table lists the abbreviations used in the table of -instruction formats: - - OpCode / OpCd Part of the op code. - Bx Base register number for operand x. - Dx Displacement for operand x. - DLx Displacement lower 12 bits for operand x. - DHx Displacement higher 8-bits for operand x. - Rx Register number for operand x. - Xx Index register number for operand x. - Ix Signed immediate for operand x. - Ux Unsigned immediate for operand x. - - An instruction is two, four, or six bytes in length and must be -aligned on a 2 byte boundary. The first two bits of the instruction -specify the length of the instruction, 00 indicates a two byte -instruction, 01 and 10 indicates a four byte instruction, and 11 -indicates a six byte instruction. - - The following table lists the s390 instruction formats that are -available with the `.insn' pseudo directive: - -`E format' - - +-------------+ - | OpCode | - +-------------+ - 0 15 - -`RI format: <insn> R1,I2' - - +--------+----+----+------------------+ - | OpCode | R1 |OpCd| I2 | - +--------+----+----+------------------+ - 0 8 12 16 31 - -`RIE format: <insn> R1,R3,I2' - - +--------+----+----+------------------+--------+--------+ - | OpCode | R1 | R3 | I2 |////////| OpCode | - +--------+----+----+------------------+--------+--------+ - 0 8 12 16 32 40 47 - -`RIL format: <insn> R1,I2' - - +--------+----+----+------------------------------------+ - | OpCode | R1 |OpCd| I2 | - +--------+----+----+------------------------------------+ - 0 8 12 16 47 - -`RILU format: <insn> R1,U2' - - +--------+----+----+------------------------------------+ - | OpCode | R1 |OpCd| U2 | - +--------+----+----+------------------------------------+ - 0 8 12 16 47 - -`RIS format: <insn> R1,I2,M3,D4(B4)' - - +--------+----+----+----+-------------+--------+--------+ - | OpCode | R1 | M3 | B4 | D4 | I2 | Opcode | - +--------+----+----+----+-------------+--------+--------+ - 0 8 12 16 20 32 36 47 - -`RR format: <insn> R1,R2' - - +--------+----+----+ - | OpCode | R1 | R2 | - +--------+----+----+ - 0 8 12 15 - -`RRE format: <insn> R1,R2' - - +------------------+--------+----+----+ - | OpCode |////////| R1 | R2 | - +------------------+--------+----+----+ - 0 16 24 28 31 - -`RRF format: <insn> R1,R2,R3,M4' - - +------------------+----+----+----+----+ - | OpCode | R3 | M4 | R1 | R2 | - +------------------+----+----+----+----+ - 0 16 20 24 28 31 - -`RRS format: <insn> R1,R2,M3,D4(B4)' - - +--------+----+----+----+-------------+----+----+--------+ - | OpCode | R1 | R3 | B4 | D4 | M3 |////| OpCode | - +--------+----+----+----+-------------+----+----+--------+ - 0 8 12 16 20 32 36 40 47 - -`RS format: <insn> R1,R3,D2(B2)' - - +--------+----+----+----+-------------+ - | OpCode | R1 | R3 | B2 | D2 | - +--------+----+----+----+-------------+ - 0 8 12 16 20 31 - -`RSE format: <insn> R1,R3,D2(B2)' - - +--------+----+----+----+-------------+--------+--------+ - | OpCode | R1 | R3 | B2 | D2 |////////| OpCode | - +--------+----+----+----+-------------+--------+--------+ - 0 8 12 16 20 32 40 47 - -`RSI format: <insn> R1,R3,I2' - - +--------+----+----+------------------------------------+ - | OpCode | R1 | R3 | I2 | - +--------+----+----+------------------------------------+ - 0 8 12 16 47 - -`RSY format: <insn> R1,R3,D2(B2)' - - +--------+----+----+----+-------------+--------+--------+ - | OpCode | R1 | R3 | B2 | DL2 | DH2 | OpCode | - +--------+----+----+----+-------------+--------+--------+ - 0 8 12 16 20 32 40 47 - -`RX format: <insn> R1,D2(X2,B2)' - - +--------+----+----+----+-------------+ - | OpCode | R1 | X2 | B2 | D2 | - +--------+----+----+----+-------------+ - 0 8 12 16 20 31 - -`RXE format: <insn> R1,D2(X2,B2)' - - +--------+----+----+----+-------------+--------+--------+ - | OpCode | R1 | X2 | B2 | D2 |////////| OpCode | - +--------+----+----+----+-------------+--------+--------+ - 0 8 12 16 20 32 40 47 - -`RXF format: <insn> R1,R3,D2(X2,B2)' - - +--------+----+----+----+-------------+----+---+--------+ - | OpCode | R3 | X2 | B2 | D2 | R1 |///| OpCode | - +--------+----+----+----+-------------+----+---+--------+ - 0 8 12 16 20 32 36 40 47 - -`RXY format: <insn> R1,D2(X2,B2)' - - +--------+----+----+----+-------------+--------+--------+ - | OpCode | R1 | X2 | B2 | DL2 | DH2 | OpCode | - +--------+----+----+----+-------------+--------+--------+ - 0 8 12 16 20 32 36 40 47 - -`S format: <insn> D2(B2)' - - +------------------+----+-------------+ - | OpCode | B2 | D2 | - +------------------+----+-------------+ - 0 16 20 31 - -`SI format: <insn> D1(B1),I2' - - +--------+---------+----+-------------+ - | OpCode | I2 | B1 | D1 | - +--------+---------+----+-------------+ - 0 8 16 20 31 - -`SIY format: <insn> D1(B1),U2' - - +--------+---------+----+-------------+--------+--------+ - | OpCode | I2 | B1 | DL1 | DH1 | OpCode | - +--------+---------+----+-------------+--------+--------+ - 0 8 16 20 32 36 40 47 - -`SIL format: <insn> D1(B1),I2' - - +------------------+----+-------------+-----------------+ - | OpCode | B1 | D1 | I2 | - +------------------+----+-------------+-----------------+ - 0 16 20 32 47 - -`SS format: <insn> D1(R1,B1),D2(B3),R3' - - +--------+----+----+----+-------------+----+------------+ - | OpCode | R1 | R3 | B1 | D1 | B2 | D2 | - +--------+----+----+----+-------------+----+------------+ - 0 8 12 16 20 32 36 47 - -`SSE format: <insn> D1(B1),D2(B2)' - - +------------------+----+-------------+----+------------+ - | OpCode | B1 | D1 | B2 | D2 | - +------------------+----+-------------+----+------------+ - 0 8 12 16 20 32 36 47 - -`SSF format: <insn> D1(B1),D2(B2),R3' - - +--------+----+----+----+-------------+----+------------+ - | OpCode | R3 |OpCd| B1 | D1 | B2 | D2 | - +--------+----+----+----+-------------+----+------------+ - 0 8 12 16 20 32 36 47 - - - For the complete list of all instruction format variants see the -Principles of Operation manuals. - - -File: as.info, Node: s390 Aliases, Next: s390 Operand Modifier, Prev: s390 Formats, Up: s390 Syntax - -9.37.3.5 Instruction Aliases -............................ - -A specific bit pattern can have multiple mnemonics, for example the bit -pattern `0xa7000000' has the mnemonics `tmh' and `tmlh'. In addition, -there are a number of mnemonics recognized by `as' that are not present -in the Principles of Operation. These are the short forms of the -branch instructions, where the condition code mask operand is encoded -in the mnemonic. This is relevant for the branch instructions, the -compare and branch instructions, and the compare and trap instructions. - - For the branch instructions there are 20 condition code strings that -can be used as part of the mnemonic in place of a mask operand in the -instruction format: - - instruction short form - ------------------------------------------ - bcr M1,R2 b<m>r R2 - bc M1,D2(X2,B2) b<m> D2(X2,B2) - brc M1,I2 j<m> I2 - brcl M1,I2 jg<m> I2 - - In the mnemonic for a branch instruction the condition code string -<m> can be any of the following: - - o jump on overflow / if ones - h jump on A high - p jump on plus - nle jump on not low or equal - l jump on A low - m jump on minus - nhe jump on not high or equal - lh jump on low or high - ne jump on A not equal B - nz jump on not zero / if not zeros - e jump on A equal B - z jump on zero / if zeroes - nlh jump on not low or high - he jump on high or equal - nl jump on A not low - nm jump on not minus / if not mixed - le jump on low or equal - nh jump on A not high - np jump on not plus - no jump on not overflow / if not ones - - For the compare and branch, and compare and trap instructions there -are 12 condition code strings that can be used as part of the mnemonic -in place of a mask operand in the instruction format: - - instruction short form - -------------------------------------------------------- - crb R1,R2,M3,D4(B4) crb<m> R1,R2,D4(B4) - cgrb R1,R2,M3,D4(B4) cgrb<m> R1,R2,D4(B4) - crj R1,R2,M3,I4 crj<m> R1,R2,I4 - cgrj R1,R2,M3,I4 cgrj<m> R1,R2,I4 - cib R1,I2,M3,D4(B4) cib<m> R1,I2,D4(B4) - cgib R1,I2,M3,D4(B4) cgib<m> R1,I2,D4(B4) - cij R1,I2,M3,I4 cij<m> R1,I2,I4 - cgij R1,I2,M3,I4 cgij<m> R1,I2,I4 - crt R1,R2,M3 crt<m> R1,R2 - cgrt R1,R2,M3 cgrt<m> R1,R2 - cit R1,I2,M3 cit<m> R1,I2 - cgit R1,I2,M3 cgit<m> R1,I2 - clrb R1,R2,M3,D4(B4) clrb<m> R1,R2,D4(B4) - clgrb R1,R2,M3,D4(B4) clgrb<m> R1,R2,D4(B4) - clrj R1,R2,M3,I4 clrj<m> R1,R2,I4 - clgrj R1,R2,M3,I4 clgrj<m> R1,R2,I4 - clib R1,I2,M3,D4(B4) clib<m> R1,I2,D4(B4) - clgib R1,I2,M3,D4(B4) clgib<m> R1,I2,D4(B4) - clij R1,I2,M3,I4 clij<m> R1,I2,I4 - clgij R1,I2,M3,I4 clgij<m> R1,I2,I4 - clrt R1,R2,M3 clrt<m> R1,R2 - clgrt R1,R2,M3 clgrt<m> R1,R2 - clfit R1,I2,M3 clfit<m> R1,I2 - clgit R1,I2,M3 clgit<m> R1,I2 - - In the mnemonic for a compare and branch and compare and trap -instruction the condition code string <m> can be any of the following: - - h jump on A high - nle jump on not low or equal - l jump on A low - nhe jump on not high or equal - ne jump on A not equal B - lh jump on low or high - e jump on A equal B - nlh jump on not low or high - nl jump on A not low - he jump on high or equal - nh jump on A not high - le jump on low or equal - - -File: as.info, Node: s390 Operand Modifier, Next: s390 Instruction Marker, Prev: s390 Aliases, Up: s390 Syntax - -9.37.3.6 Instruction Operand Modifier -..................................... - -If a symbol modifier is attached to a symbol in an expression for an -instruction operand field, the symbol term is replaced with a reference -to an object in the global offset table (GOT) or the procedure linkage -table (PLT). The following expressions are allowed: `symbol@modifier + -constant', `symbol@modifier + label + constant', and `symbol@modifier - -label + constant'. The term `symbol' is the symbol that will be -entered into the GOT or PLT, `label' is a local label, and `constant' -is an arbitrary expression that the assembler can evaluate to a -constant value. - - The term `(symbol + constant1)@modifier +/- label + constant2' is -also accepted but a warning message is printed and the term is -converted to `symbol@modifier +/- label + constant1 + constant2'. - -`@got' -`@got12' - The @got modifier can be used for displacement fields, 16-bit - immediate fields and 32-bit pc-relative immediate fields. The - @got12 modifier is synonym to @got. The symbol is added to the - GOT. For displacement fields and 16-bit immediate fields the - symbol term is replaced with the offset from the start of the GOT - to the GOT slot for the symbol. For a 32-bit pc-relative field - the pc-relative offset to the GOT slot from the current - instruction address is used. - -`@gotent' - The @gotent modifier can be used for 32-bit pc-relative immediate - fields. The symbol is added to the GOT and the symbol term is - replaced with the pc-relative offset from the current instruction - to the GOT slot for the symbol. - -`@gotoff' - The @gotoff modifier can be used for 16-bit immediate fields. The - symbol term is replaced with the offset from the start of the GOT - to the address of the symbol. - -`@gotplt' - The @gotplt modifier can be used for displacement fields, 16-bit - immediate fields, and 32-bit pc-relative immediate fields. A - procedure linkage table entry is generated for the symbol and a - jump slot for the symbol is added to the GOT. For displacement - fields and 16-bit immediate fields the symbol term is replaced - with the offset from the start of the GOT to the jump slot for the - symbol. For a 32-bit pc-relative field the pc-relative offset to - the jump slot from the current instruction address is used. - -`@plt' - The @plt modifier can be used for 16-bit and 32-bit pc-relative - immediate fields. A procedure linkage table entry is generated for - the symbol. The symbol term is replaced with the relative offset - from the current instruction to the PLT entry for the symbol. - -`@pltoff' - The @pltoff modifier can be used for 16-bit immediate fields. The - symbol term is replaced with the offset from the start of the PLT - to the address of the symbol. - -`@gotntpoff' - The @gotntpoff modifier can be used for displacement fields. The - symbol is added to the static TLS block and the negated offset to - the symbol in the static TLS block is added to the GOT. The symbol - term is replaced with the offset to the GOT slot from the start of - the GOT. - -`@indntpoff' - The @indntpoff modifier can be used for 32-bit pc-relative - immediate fields. The symbol is added to the static TLS block and - the negated offset to the symbol in the static TLS block is added - to the GOT. The symbol term is replaced with the pc-relative - offset to the GOT slot from the current instruction address. - - For more information about the thread local storage modifiers -`gotntpoff' and `indntpoff' see the ELF extension documentation `ELF -Handling For Thread-Local Storage'. - - -File: as.info, Node: s390 Instruction Marker, Next: s390 Literal Pool Entries, Prev: s390 Operand Modifier, Up: s390 Syntax - -9.37.3.7 Instruction Marker -........................... - -The thread local storage instruction markers are used by the linker to -perform code optimization. - -`:tls_load' - The :tls_load marker is used to flag the load instruction in the - initial exec TLS model that retrieves the offset from the thread - pointer to a thread local storage variable from the GOT. - -`:tls_gdcall' - The :tls_gdcall marker is used to flag the branch-and-save - instruction to the __tls_get_offset function in the global dynamic - TLS model. - -`:tls_ldcall' - The :tls_ldcall marker is used to flag the branch-and-save - instruction to the __tls_get_offset function in the local dynamic - TLS model. - - For more information about the thread local storage instruction -marker and the linker optimizations see the ELF extension documentation -`ELF Handling For Thread-Local Storage'. - - -File: as.info, Node: s390 Literal Pool Entries, Prev: s390 Instruction Marker, Up: s390 Syntax - -9.37.3.8 Literal Pool Entries -............................. - -A literal pool is a collection of values. To access the values a pointer -to the literal pool is loaded to a register, the literal pool register. -Usually, register %r13 is used as the literal pool register (*Note s390 -Register::). Literal pool entries are created by adding the suffix -:lit1, :lit2, :lit4, or :lit8 to the end of an expression for an -instruction operand. The expression is added to the literal pool and the -operand is replaced with the offset to the literal in the literal pool. - -`:lit1' - The literal pool entry is created as an 8-bit value. An operand - modifier must not be used for the original expression. - -`:lit2' - The literal pool entry is created as a 16 bit value. The operand - modifier @got may be used in the original expression. The term - `x@got:lit2' will put the got offset for the global symbol x to - the literal pool as 16 bit value. - -`:lit4' - The literal pool entry is created as a 32-bit value. The operand - modifier @got and @plt may be used in the original expression. The - term `x@got:lit4' will put the got offset for the global symbol x - to the literal pool as a 32-bit value. The term `x@plt:lit4' will - put the plt offset for the global symbol x to the literal pool as - a 32-bit value. - -`:lit8' - The literal pool entry is created as a 64-bit value. The operand - modifier @got and @plt may be used in the original expression. The - term `x@got:lit8' will put the got offset for the global symbol x - to the literal pool as a 64-bit value. The term `x@plt:lit8' will - put the plt offset for the global symbol x to the literal pool as - a 64-bit value. - - The assembler directive `.ltorg' is used to emit all literal pool -entries to the current position. - - -File: as.info, Node: s390 Directives, Next: s390 Floating Point, Prev: s390 Syntax, Up: S/390-Dependent - -9.37.4 Assembler Directives ---------------------------- - -`as' for s390 supports all of the standard ELF assembler directives as -outlined in the main part of this document. Some directives have been -extended and there are some additional directives, which are only -available for the s390 `as'. - -`.insn' - This directive permits the numeric representation of an - instructions and makes the assembler insert the operands according - to one of the instructions formats for `.insn' (*Note s390 - Formats::). For example, the instruction `l %r1,24(%r15)' could - be written as `.insn rx,0x58000000,%r1,24(%r15)'. - -`.short' -`.long' -`.quad' - This directive places one or more 16-bit (.short), 32-bit (.long), - or 64-bit (.quad) values into the current section. If an ELF or - TLS modifier is used only the following expressions are allowed: - `symbol@modifier + constant', `symbol@modifier + label + - constant', and `symbol@modifier - label + constant'. The - following modifiers are available: - `@got' - `@got12' - The @got modifier can be used for .short, .long and .quad. - The @got12 modifier is synonym to @got. The symbol is added - to the GOT. The symbol term is replaced with offset from the - start of the GOT to the GOT slot for the symbol. - - `@gotoff' - The @gotoff modifier can be used for .short, .long and .quad. - The symbol term is replaced with the offset from the start of - the GOT to the address of the symbol. - - `@gotplt' - The @gotplt modifier can be used for .long and .quad. A - procedure linkage table entry is generated for the symbol and - a jump slot for the symbol is added to the GOT. The symbol - term is replaced with the offset from the start of the GOT to - the jump slot for the symbol. - - `@plt' - The @plt modifier can be used for .long and .quad. A - procedure linkage table entry us generated for the symbol. - The symbol term is replaced with the address of the PLT entry - for the symbol. - - `@pltoff' - The @pltoff modifier can be used for .short, .long and .quad. - The symbol term is replaced with the offset from the start of - the PLT to the address of the symbol. - - `@tlsgd' - `@tlsldm' - The @tlsgd and @tlsldm modifier can be used for .long and - .quad. A tls_index structure for the symbol is added to the - GOT. The symbol term is replaced with the offset from the - start of the GOT to the tls_index structure. - - `@gotntpoff' - `@indntpoff' - The @gotntpoff and @indntpoff modifier can be used for .long - and .quad. The symbol is added to the static TLS block and - the negated offset to the symbol in the static TLS block is - added to the GOT. For @gotntpoff the symbol term is replaced - with the offset from the start of the GOT to the GOT slot, - for @indntpoff the symbol term is replaced with the address - of the GOT slot. - - `@dtpoff' - The @dtpoff modifier can be used for .long and .quad. The - symbol term is replaced with the offset of the symbol - relative to the start of the TLS block it is contained in. - - `@ntpoff' - The @ntpoff modifier can be used for .long and .quad. The - symbol term is replaced with the offset of the symbol - relative to the TCB pointer. - - For more information about the thread local storage modifiers see - the ELF extension documentation `ELF Handling For Thread-Local - Storage'. - -`.ltorg' - This directive causes the current contents of the literal pool to - be dumped to the current location (*Note s390 Literal Pool - Entries::). - -`.machine string' - This directive allows you to change the machine for which code is - generated. `string' may be any of the `-march=' selection options - (without the -march=), `push', or `pop'. `.machine push' saves - the currently selected cpu, which may be restored with `.machine - pop'. Be aware that the cpu string has to be put into double - quotes in case it contains characters not appropriate for - identifiers. So you have to write `"z9-109"' instead of just - `z9-109'. - -`.machinemode string' - This directive allows to change the architecture mode for which - code is being generated. `string' may be `esa', `zarch', - `zarch_nohighgprs', `push', or `pop'. `.machinemode - zarch_nohighgprs' can be used to prevent the `highgprs' flag from - being set in the ELF header of the output file. This is useful in - situations where the code is gated with a runtime check which - makes sure that the code is only executed on kernels providing the - `highgprs' feature. `.machinemode push' saves the currently - selected mode, which may be restored with `.machinemode pop'. - - -File: as.info, Node: s390 Floating Point, Prev: s390 Directives, Up: S/390-Dependent - -9.37.5 Floating Point ---------------------- - -The assembler recognizes both the IEEE floating-point instruction and -the hexadecimal floating-point instructions. The floating-point -constructors `.float', `.single', and `.double' always emit the IEEE -format. To assemble hexadecimal floating-point constants the `.long' -and `.quad' directives must be used. - - -File: as.info, Node: SCORE-Dependent, Next: Sparc-Dependent, Prev: S/390-Dependent, Up: Machine Dependencies - -9.38 SCORE Dependent Features -============================= - -* Menu: - -* SCORE-Opts:: Assembler options -* SCORE-Pseudo:: SCORE Assembler Directives -* SCORE-Syntax:: Syntax - - -File: as.info, Node: SCORE-Opts, Next: SCORE-Pseudo, Up: SCORE-Dependent - -9.38.1 Options --------------- - -The following table lists all available SCORE options. - -`-G NUM' - This option sets the largest size of an object that can be - referenced implicitly with the `gp' register. The default value is - 8. - -`-EB' - Assemble code for a big-endian cpu - -`-EL' - Assemble code for a little-endian cpu - -`-FIXDD' - Assemble code for fix data dependency - -`-NWARN' - Assemble code for no warning message for fix data dependency - -`-SCORE5' - Assemble code for target is SCORE5 - -`-SCORE5U' - Assemble code for target is SCORE5U - -`-SCORE7' - Assemble code for target is SCORE7, this is default setting - -`-SCORE3' - Assemble code for target is SCORE3 - -`-march=score7' - Assemble code for target is SCORE7, this is default setting - -`-march=score3' - Assemble code for target is SCORE3 - -`-USE_R1' - Assemble code for no warning message when using temp register r1 - -`-KPIC' - Generate code for PIC. This option tells the assembler to generate - score position-independent macro expansions. It also tells the - assembler to mark the output file as PIC. - -`-O0' - Assembler will not perform any optimizations - -`-V' - Sunplus release version - - - -File: as.info, Node: SCORE-Pseudo, Next: SCORE-Syntax, Prev: SCORE-Opts, Up: SCORE-Dependent - -9.38.2 SCORE Assembler Directives ---------------------------------- - -A number of assembler directives are available for SCORE. The -following table is far from complete. - -`.set nwarn' - Let the assembler not to generate warnings if the source machine - language instructions happen data dependency. - -`.set fixdd' - Let the assembler to insert bubbles (32 bit nop instruction / 16 - bit nop! Instruction) if the source machine language instructions - happen data dependency. - -`.set nofixdd' - Let the assembler to generate warnings if the source machine - language instructions happen data dependency. (Default) - -`.set r1' - Let the assembler not to generate warnings if the source program - uses r1. allow user to use r1 - -`set nor1' - Let the assembler to generate warnings if the source program uses - r1. (Default) - -`.sdata' - Tell the assembler to add subsequent data into the sdata section - -`.rdata' - Tell the assembler to add subsequent data into the rdata section - -`.frame "frame-register", "offset", "return-pc-register"' - Describe a stack frame. "frame-register" is the frame register, - "offset" is the distance from the frame register to the virtual - frame pointer, "return-pc-register" is the return program register. - You must use ".ent" before ".frame" and only one ".frame" can be - used per ".ent". - -`.mask "bitmask", "frameoffset"' - Indicate which of the integer registers are saved in the current - function's stack frame, this is for the debugger to explain the - frame chain. - -`.ent "proc-name"' - Set the beginning of the procedure "proc_name". Use this directive - when you want to generate information for the debugger. - -`.end proc-name' - Set the end of a procedure. Use this directive to generate - information for the debugger. - -`.bss' - Switch the destination of following statements into the bss - section, which is used for data that is uninitialized anywhere. - - - -File: as.info, Node: SCORE-Syntax, Prev: SCORE-Pseudo, Up: SCORE-Dependent - -9.38.3 SCORE Syntax -------------------- - -* Menu: - -* SCORE-Chars:: Special Characters - - -File: as.info, Node: SCORE-Chars, Up: SCORE-Syntax - -9.38.3.1 Special Characters -........................... - -The presence of a `#' appearing anywhere on a line indicates the start -of a comment that extends to the end of that line. - - If a `#' appears as the first character of a line then the whole -line is treated as a comment, but in this case the line can also be a -logical line number directive (*note Comments::) or a preprocessor -control command (*note Preprocessing::). - - The `;' character can be used to separate statements on the same -line. - - -File: as.info, Node: SH-Dependent, Next: SH64-Dependent, Prev: NS32K-Dependent, Up: Machine Dependencies - -9.39 Renesas / SuperH SH Dependent Features -=========================================== - -* Menu: - -* SH Options:: Options -* SH Syntax:: Syntax -* SH Floating Point:: Floating Point -* SH Directives:: SH Machine Directives -* SH Opcodes:: Opcodes - - -File: as.info, Node: SH Options, Next: SH Syntax, Up: SH-Dependent - -9.39.1 Options --------------- - -`as' has following command-line options for the Renesas (formerly -Hitachi) / SuperH SH family. - -`--little' - Generate little endian code. - -`--big' - Generate big endian code. - -`--relax' - Alter jump instructions for long displacements. - -`--small' - Align sections to 4 byte boundaries, not 16. - -`--dsp' - Enable sh-dsp insns, and disable sh3e / sh4 insns. - -`--renesas' - Disable optimization with section symbol for compatibility with - Renesas assembler. - -`--allow-reg-prefix' - Allow '$' as a register name prefix. - -`--fdpic' - Generate an FDPIC object file. - -`--isa=sh4 | sh4a' - Specify the sh4 or sh4a instruction set. - -`--isa=dsp' - Enable sh-dsp insns, and disable sh3e / sh4 insns. - -`--isa=fp' - Enable sh2e, sh3e, sh4, and sh4a insn sets. - -`--isa=all' - Enable sh1, sh2, sh2e, sh3, sh3e, sh4, sh4a, and sh-dsp insn sets. - -`-h-tick-hex' - Support H'00 style hex constants in addition to 0x00 style. - - - -File: as.info, Node: SH Syntax, Next: SH Floating Point, Prev: SH Options, Up: SH-Dependent - -9.39.2 Syntax -------------- - -* Menu: - -* SH-Chars:: Special Characters -* SH-Regs:: Register Names -* SH-Addressing:: Addressing Modes - - -File: as.info, Node: SH-Chars, Next: SH-Regs, Up: SH Syntax - -9.39.2.1 Special Characters -........................... - -`!' is the line comment character. - - You can use `;' instead of a newline to separate statements. - - If a `#' appears as the first character of a line then the whole -line is treated as a comment, but in this case the line could also be a -logical line number directive (*note Comments::) or a preprocessor -control command (*note Preprocessing::). - - Since `$' has no special meaning, you may use it in symbol names. - - -File: as.info, Node: SH-Regs, Next: SH-Addressing, Prev: SH-Chars, Up: SH Syntax - -9.39.2.2 Register Names -....................... - -You can use the predefined symbols `r0', `r1', `r2', `r3', `r4', `r5', -`r6', `r7', `r8', `r9', `r10', `r11', `r12', `r13', `r14', and `r15' to -refer to the SH registers. - - The SH also has these control registers: - -`pr' - procedure register (holds return address) - -`pc' - program counter - -`mach' -`macl' - high and low multiply accumulator registers - -`sr' - status register - -`gbr' - global base register - -`vbr' - vector base register (for interrupt vectors) - - -File: as.info, Node: SH-Addressing, Prev: SH-Regs, Up: SH Syntax - -9.39.2.3 Addressing Modes -......................... - -`as' understands the following addressing modes for the SH. `RN' in -the following refers to any of the numbered registers, but _not_ the -control registers. - -`RN' - Register direct - -`@RN' - Register indirect - -`@-RN' - Register indirect with pre-decrement - -`@RN+' - Register indirect with post-increment - -`@(DISP, RN)' - Register indirect with displacement - -`@(R0, RN)' - Register indexed - -`@(DISP, GBR)' - `GBR' offset - -`@(R0, GBR)' - GBR indexed - -`ADDR' -`@(DISP, PC)' - PC relative address (for branch or for addressing memory). The - `as' implementation allows you to use the simpler form ADDR - anywhere a PC relative address is called for; the alternate form - is supported for compatibility with other assemblers. - -`#IMM' - Immediate data - - -File: as.info, Node: SH Floating Point, Next: SH Directives, Prev: SH Syntax, Up: SH-Dependent - -9.39.3 Floating Point ---------------------- - -SH2E, SH3E and SH4 groups have on-chip floating-point unit (FPU). Other -SH groups can use `.float' directive to generate IEEE floating-point -numbers. - - SH2E and SH3E support single-precision floating point calculations as -well as entirely PCAPI compatible emulation of double-precision -floating point calculations. SH2E and SH3E instructions are a subset of -the floating point calculations conforming to the IEEE754 standard. - - In addition to single-precision and double-precision floating-point -operation capability, the on-chip FPU of SH4 has a 128-bit graphic -engine that enables 32-bit floating-point data to be processed 128 bits -at a time. It also supports 4 * 4 array operations and inner product -operations. Also, a superscalar architecture is employed that enables -simultaneous execution of two instructions (including FPU -instructions), providing performance of up to twice that of -conventional architectures at the same frequency. - - -File: as.info, Node: SH Directives, Next: SH Opcodes, Prev: SH Floating Point, Up: SH-Dependent - -9.39.4 SH Machine Directives ----------------------------- - -`uaword' -`ualong' -`uaquad' - `as' will issue a warning when a misaligned `.word', `.long', or - `.quad' directive is used. You may use `.uaword', `.ualong', or - `.uaquad' to indicate that the value is intentionally misaligned. - - -File: as.info, Node: SH Opcodes, Prev: SH Directives, Up: SH-Dependent - -9.39.5 Opcodes --------------- - -For detailed information on the SH machine instruction set, see -`SH-Microcomputer User's Manual' (Renesas) or `SH-4 32-bit CPU Core -Architecture' (SuperH) and `SuperH (SH) 64-Bit RISC Series' (SuperH). - - `as' implements all the standard SH opcodes. No additional -pseudo-instructions are needed on this family. Note, however, that -because `as' supports a simpler form of PC-relative addressing, you may -simply write (for example) - - mov.l bar,r0 - -where other assemblers might require an explicit displacement to `bar' -from the program counter: - - mov.l @(DISP, PC) - - Here is a summary of SH opcodes: - - Legend: - Rn a numbered register - Rm another numbered register - #imm immediate data - disp displacement - disp8 8-bit displacement - disp12 12-bit displacement - - add #imm,Rn lds.l @Rn+,PR - add Rm,Rn mac.w @Rm+,@Rn+ - addc Rm,Rn mov #imm,Rn - addv Rm,Rn mov Rm,Rn - and #imm,R0 mov.b Rm,@(R0,Rn) - and Rm,Rn mov.b Rm,@-Rn - and.b #imm,@(R0,GBR) mov.b Rm,@Rn - bf disp8 mov.b @(disp,Rm),R0 - bra disp12 mov.b @(disp,GBR),R0 - bsr disp12 mov.b @(R0,Rm),Rn - bt disp8 mov.b @Rm+,Rn - clrmac mov.b @Rm,Rn - clrt mov.b R0,@(disp,Rm) - cmp/eq #imm,R0 mov.b R0,@(disp,GBR) - cmp/eq Rm,Rn mov.l Rm,@(disp,Rn) - cmp/ge Rm,Rn mov.l Rm,@(R0,Rn) - cmp/gt Rm,Rn mov.l Rm,@-Rn - cmp/hi Rm,Rn mov.l Rm,@Rn - cmp/hs Rm,Rn mov.l @(disp,Rn),Rm - cmp/pl Rn mov.l @(disp,GBR),R0 - cmp/pz Rn mov.l @(disp,PC),Rn - cmp/str Rm,Rn mov.l @(R0,Rm),Rn - div0s Rm,Rn mov.l @Rm+,Rn - div0u mov.l @Rm,Rn - div1 Rm,Rn mov.l R0,@(disp,GBR) - exts.b Rm,Rn mov.w Rm,@(R0,Rn) - exts.w Rm,Rn mov.w Rm,@-Rn - extu.b Rm,Rn mov.w Rm,@Rn - extu.w Rm,Rn mov.w @(disp,Rm),R0 - jmp @Rn mov.w @(disp,GBR),R0 - jsr @Rn mov.w @(disp,PC),Rn - ldc Rn,GBR mov.w @(R0,Rm),Rn - ldc Rn,SR mov.w @Rm+,Rn - ldc Rn,VBR mov.w @Rm,Rn - ldc.l @Rn+,GBR mov.w R0,@(disp,Rm) - ldc.l @Rn+,SR mov.w R0,@(disp,GBR) - ldc.l @Rn+,VBR mova @(disp,PC),R0 - lds Rn,MACH movt Rn - lds Rn,MACL muls Rm,Rn - lds Rn,PR mulu Rm,Rn - lds.l @Rn+,MACH neg Rm,Rn - lds.l @Rn+,MACL negc Rm,Rn - - nop stc VBR,Rn - not Rm,Rn stc.l GBR,@-Rn - or #imm,R0 stc.l SR,@-Rn - or Rm,Rn stc.l VBR,@-Rn - or.b #imm,@(R0,GBR) sts MACH,Rn - rotcl Rn sts MACL,Rn - rotcr Rn sts PR,Rn - rotl Rn sts.l MACH,@-Rn - rotr Rn sts.l MACL,@-Rn - rte sts.l PR,@-Rn - rts sub Rm,Rn - sett subc Rm,Rn - shal Rn subv Rm,Rn - shar Rn swap.b Rm,Rn - shll Rn swap.w Rm,Rn - shll16 Rn tas.b @Rn - shll2 Rn trapa #imm - shll8 Rn tst #imm,R0 - shlr Rn tst Rm,Rn - shlr16 Rn tst.b #imm,@(R0,GBR) - shlr2 Rn xor #imm,R0 - shlr8 Rn xor Rm,Rn - sleep xor.b #imm,@(R0,GBR) - stc GBR,Rn xtrct Rm,Rn - stc SR,Rn - - -File: as.info, Node: SH64-Dependent, Next: PDP-11-Dependent, Prev: SH-Dependent, Up: Machine Dependencies - -9.40 SuperH SH64 Dependent Features -=================================== - -* Menu: - -* SH64 Options:: Options -* SH64 Syntax:: Syntax -* SH64 Directives:: SH64 Machine Directives -* SH64 Opcodes:: Opcodes - - -File: as.info, Node: SH64 Options, Next: SH64 Syntax, Up: SH64-Dependent - -9.40.1 Options --------------- - -`-isa=sh4 | sh4a' - Specify the sh4 or sh4a instruction set. - -`-isa=dsp' - Enable sh-dsp insns, and disable sh3e / sh4 insns. - -`-isa=fp' - Enable sh2e, sh3e, sh4, and sh4a insn sets. - -`-isa=all' - Enable sh1, sh2, sh2e, sh3, sh3e, sh4, sh4a, and sh-dsp insn sets. - -`-isa=shmedia | -isa=shcompact' - Specify the default instruction set. `SHmedia' specifies the - 32-bit opcodes, and `SHcompact' specifies the 16-bit opcodes - compatible with previous SH families. The default depends on the - ABI selected; the default for the 64-bit ABI is SHmedia, and the - default for the 32-bit ABI is SHcompact. If neither the ABI nor - the ISA is specified, the default is 32-bit SHcompact. - - Note that the `.mode' pseudo-op is not permitted if the ISA is not - specified on the command line. - -`-abi=32 | -abi=64' - Specify the default ABI. If the ISA is specified and the ABI is - not, the default ABI depends on the ISA, with SHmedia defaulting - to 64-bit and SHcompact defaulting to 32-bit. - - Note that the `.abi' pseudo-op is not permitted if the ABI is not - specified on the command line. When the ABI is specified on the - command line, any `.abi' pseudo-ops in the source must match it. - -`-shcompact-const-crange' - Emit code-range descriptors for constants in SHcompact code - sections. - -`-no-mix' - Disallow SHmedia code in the same section as constants and - SHcompact code. - -`-no-expand' - Do not expand MOVI, PT, PTA or PTB instructions. - -`-expand-pt32' - With -abi=64, expand PT, PTA and PTB instructions to 32 bits only. - -`-h-tick-hex' - Support H'00 style hex constants in addition to 0x00 style. - - - -File: as.info, Node: SH64 Syntax, Next: SH64 Directives, Prev: SH64 Options, Up: SH64-Dependent - -9.40.2 Syntax -------------- - -* Menu: - -* SH64-Chars:: Special Characters -* SH64-Regs:: Register Names -* SH64-Addressing:: Addressing Modes - - -File: as.info, Node: SH64-Chars, Next: SH64-Regs, Up: SH64 Syntax - -9.40.2.1 Special Characters -........................... - -`!' is the line comment character. - - If a `#' appears as the first character of a line then the whole -line is treated as a comment, but in this case the line could also be a -logical line number directive (*note Comments::) or a preprocessor -control command (*note Preprocessing::). - - You can use `;' instead of a newline to separate statements. - - Since `$' has no special meaning, you may use it in symbol names. - - -File: as.info, Node: SH64-Regs, Next: SH64-Addressing, Prev: SH64-Chars, Up: SH64 Syntax - -9.40.2.2 Register Names -....................... - -You can use the predefined symbols `r0' through `r63' to refer to the -SH64 general registers, `cr0' through `cr63' for control registers, -`tr0' through `tr7' for target address registers, `fr0' through `fr63' -for single-precision floating point registers, `dr0' through `dr62' -(even numbered registers only) for double-precision floating point -registers, `fv0' through `fv60' (multiples of four only) for -single-precision floating point vectors, `fp0' through `fp62' (even -numbered registers only) for single-precision floating point pairs, -`mtrx0' through `mtrx48' (multiples of 16 only) for 4x4 matrices of -single-precision floating point registers, `pc' for the program -counter, and `fpscr' for the floating point status and control register. - - You can also refer to the control registers by the mnemonics `sr', -`ssr', `pssr', `intevt', `expevt', `pexpevt', `tra', `spc', `pspc', -`resvec', `vbr', `tea', `dcr', `kcr0', `kcr1', `ctc', and `usr'. - - -File: as.info, Node: SH64-Addressing, Prev: SH64-Regs, Up: SH64 Syntax - -9.40.2.3 Addressing Modes -......................... - -SH64 operands consist of either a register or immediate value. The -immediate value can be a constant or label reference (or portion of a -label reference), as in this example: - - movi 4,r2 - pt function, tr4 - movi (function >> 16) & 65535,r0 - shori function & 65535, r0 - ld.l r0,4,r0 - - Instruction label references can reference labels in either SHmedia -or SHcompact. To differentiate between the two, labels in SHmedia -sections will always have the least significant bit set (i.e. they will -be odd), which SHcompact labels will have the least significant bit -reset (i.e. they will be even). If you need to reference the actual -address of a label, you can use the `datalabel' modifier, as in this -example: - - .long function - .long datalabel function - - In that example, the first longword may or may not have the least -significant bit set depending on whether the label is an SHmedia label -or an SHcompact label. The second longword will be the actual address -of the label, regardless of what type of label it is. - - -File: as.info, Node: SH64 Directives, Next: SH64 Opcodes, Prev: SH64 Syntax, Up: SH64-Dependent - -9.40.3 SH64 Machine Directives ------------------------------- - -In addition to the SH directives, the SH64 provides the following -directives: - -`.mode [shmedia|shcompact]' -`.isa [shmedia|shcompact]' - Specify the ISA for the following instructions (the two directives - are equivalent). Note that programs such as `objdump' rely on - symbolic labels to determine when such mode switches occur (by - checking the least significant bit of the label's address), so - such mode/isa changes should always be followed by a label (in - practice, this is true anyway). Note that you cannot use these - directives if you didn't specify an ISA on the command line. - -`.abi [32|64]' - Specify the ABI for the following instructions. Note that you - cannot use this directive unless you specified an ABI on the - command line, and the ABIs specified must match. - - - -File: as.info, Node: SH64 Opcodes, Prev: SH64 Directives, Up: SH64-Dependent - -9.40.4 Opcodes --------------- - -For detailed information on the SH64 machine instruction set, see -`SuperH 64 bit RISC Series Architecture Manual' (SuperH, Inc.). - - `as' implements all the standard SH64 opcodes. In addition, the -following pseudo-opcodes may be expanded into one or more alternate -opcodes: - -`movi' - If the value doesn't fit into a standard `movi' opcode, `as' will - replace the `movi' with a sequence of `movi' and `shori' opcodes. - -`pt' - This expands to a sequence of `movi' and `shori' opcode, followed - by a `ptrel' opcode, or to a `pta' or `ptb' opcode, depending on - the label referenced. - - - -File: as.info, Node: Sparc-Dependent, Next: TIC54X-Dependent, Prev: SCORE-Dependent, Up: Machine Dependencies - -9.41 SPARC Dependent Features -============================= - -* Menu: - -* Sparc-Opts:: Options -* Sparc-Aligned-Data:: Option to enforce aligned data -* Sparc-Syntax:: Syntax -* Sparc-Float:: Floating Point -* Sparc-Directives:: Sparc Machine Directives - - -File: as.info, Node: Sparc-Opts, Next: Sparc-Aligned-Data, Up: Sparc-Dependent - -9.41.1 Options --------------- - -The SPARC chip family includes several successive versions, using the -same core instruction set, but including a few additional instructions -at each version. There are exceptions to this however. For details on -what instructions each variant supports, please see the chip's -architecture reference manual. - - By default, `as' assumes the core instruction set (SPARC v6), but -"bumps" the architecture level as needed: it switches to successively -higher architectures as it encounters instructions that only exist in -the higher levels. - - If not configured for SPARC v9 (`sparc64-*-*') GAS will not bump -past sparclite by default, an option must be passed to enable the v9 -instructions. - - GAS treats sparclite as being compatible with v8, unless an -architecture is explicitly requested. SPARC v9 is always incompatible -with sparclite. - -`-Av6 | -Av7 | -Av8 | -Aleon | -Asparclet | -Asparclite' -`-Av8plus | -Av8plusa | -Av8plusb | -Av8plusc | -Av8plusd | -Av8plusv' -`-Av9 | -Av9a | -Av9b | -Av9c | -Av9d | -Av9v' -`-Asparc | -Asparcvis | -Asparcvis2 | -Asparcfmaf | -Asparcima' -`-Asparcvis3 | -Asparcvis3r' - Use one of the `-A' options to select one of the SPARC - architectures explicitly. If you select an architecture - explicitly, `as' reports a fatal error if it encounters an - instruction or feature requiring an incompatible or higher level. - - `-Av8plus', `-Av8plusa', `-Av8plusb', `-Av8plusc', `-Av8plusd', - and `-Av8plusv' select a 32 bit environment. - - `-Av9', `-Av9a', `-Av9b', `-Av9c', `-Av9d', and `-Av9v' select a - 64 bit environment and are not available unless GAS is explicitly - configured with 64 bit environment support. - - `-Av8plusa' and `-Av9a' enable the SPARC V9 instruction set with - UltraSPARC VIS 1.0 extensions. - - `-Av8plusb' and `-Av9b' enable the UltraSPARC VIS 2.0 instructions, - as well as the instructions enabled by `-Av8plusa' and `-Av9a'. - - `-Av8plusc' and `-Av9c' enable the UltraSPARC Niagara instructions, - as well as the instructions enabled by `-Av8plusb' and `-Av9b'. - - `-Av8plusd' and `-Av9d' enable the floating point fused - multiply-add, VIS 3.0, and HPC extension instructions, as well as - the instructions enabled by `-Av8plusc' and `-Av9c'. - - `-Av8plusv' and `-Av9v' enable the 'random', transactional memory, - floating point unfused multiply-add, integer multiply-add, and - cache sparing store instructions, as well as the instructions - enabled by `-Av8plusd' and `-Av9d'. - - `-Asparc' specifies a v9 environment. It is equivalent to `-Av9' - if the word size is 64-bit, and `-Av8plus' otherwise. - - `-Asparcvis' specifies a v9a environment. It is equivalent to - `-Av9a' if the word size is 64-bit, and `-Av8plusa' otherwise. - - `-Asparcvis2' specifies a v9b environment. It is equivalent to - `-Av9b' if the word size is 64-bit, and `-Av8plusb' otherwise. - - `-Asparcfmaf' specifies a v9b environment with the floating point - fused multiply-add instructions enabled. - - `-Asparcima' specifies a v9b environment with the integer - multiply-add instructions enabled. - - `-Asparcvis3' specifies a v9b environment with the VIS 3.0, HPC , - and floating point fused multiply-add instructions enabled. - - `-Asparcvis3r' specifies a v9b environment with the VIS 3.0, HPC, - transactional memory, random, and floating point unfused - multiply-add instructions enabled. - -`-xarch=v8plus | -xarch=v8plusa | -xarch=v8plusb | -xarch=v8plusc' -`-xarch=v8plusd | -xarch=v8plusv | -xarch=v9 | -xarch=v9a' -`-xarch=v9b | -xarch=v9c | -xarch=v9d | -xarch=v9v' -`-xarch=sparc | -xarch=sparcvis | -xarch=sparcvis2' -`-xarch=sparcfmaf | -xarch=sparcima | -xarch=sparcvis3' -`-xarch=sparcvis3r' - For compatibility with the SunOS v9 assembler. These options are - equivalent to -Av8plus, -Av8plusa, -Av8plusb, -Av8plusc, -Av8plusd, - -Av8plusv, -Av9, -Av9a, -Av9b, -Av9c, -Av9d, -Av9v, -Asparc, - -Asparcvis, -Asparcvis2, -Asparcfmaf, -Asparcima, -Asparcvis3, and - -Asparcvis3r, respectively. - -`-bump' - Warn whenever it is necessary to switch to another level. If an - architecture level is explicitly requested, GAS will not issue - warnings until that level is reached, and will then bump the level - as required (except between incompatible levels). - -`-32 | -64' - Select the word size, either 32 bits or 64 bits. These options - are only available with the ELF object file format, and require - that the necessary BFD support has been included. - - -File: as.info, Node: Sparc-Aligned-Data, Next: Sparc-Syntax, Prev: Sparc-Opts, Up: Sparc-Dependent - -9.41.2 Enforcing aligned data ------------------------------ - -SPARC GAS normally permits data to be misaligned. For example, it -permits the `.long' pseudo-op to be used on a byte boundary. However, -the native SunOS assemblers issue an error when they see misaligned -data. - - You can use the `--enforce-aligned-data' option to make SPARC GAS -also issue an error about misaligned data, just as the SunOS assemblers -do. - - The `--enforce-aligned-data' option is not the default because gcc -issues misaligned data pseudo-ops when it initializes certain packed -data structures (structures defined using the `packed' attribute). You -may have to assemble with GAS in order to initialize packed data -structures in your own code. - - -File: as.info, Node: Sparc-Syntax, Next: Sparc-Float, Prev: Sparc-Aligned-Data, Up: Sparc-Dependent - -9.41.3 Sparc Syntax -------------------- - -The assembler syntax closely follows The Sparc Architecture Manual, -versions 8 and 9, as well as most extensions defined by Sun for their -UltraSPARC and Niagara line of processors. - -* Menu: - -* Sparc-Chars:: Special Characters -* Sparc-Regs:: Register Names -* Sparc-Constants:: Constant Names -* Sparc-Relocs:: Relocations -* Sparc-Size-Translations:: Size Translations - - -File: as.info, Node: Sparc-Chars, Next: Sparc-Regs, Up: Sparc-Syntax - -9.41.3.1 Special Characters -........................... - -A `!' character appearing anywhere on a line indicates the start of a -comment that extends to the end of that line. - - If a `#' appears as the first character of a line then the whole -line is treated as a comment, but in this case the line could also be a -logical line number directive (*note Comments::) or a preprocessor -control command (*note Preprocessing::). - - `;' can be used instead of a newline to separate statements. - - -File: as.info, Node: Sparc-Regs, Next: Sparc-Constants, Prev: Sparc-Chars, Up: Sparc-Syntax - -9.41.3.2 Register Names -....................... - -The Sparc integer register file is broken down into global, outgoing, -local, and incoming. - - * The 8 global registers are referred to as `%gN'. - - * The 8 outgoing registers are referred to as `%oN'. - - * The 8 local registers are referred to as `%lN'. - - * The 8 incoming registers are referred to as `%iN'. - - * The frame pointer register `%i6' can be referenced using the alias - `%fp'. - - * The stack pointer register `%o6' can be referenced using the alias - `%sp'. - - Floating point registers are simply referred to as `%fN'. When -assembling for pre-V9, only 32 floating point registers are available. -For V9 and later there are 64, but there are restrictions when -referencing the upper 32 registers. They can only be accessed as -double or quad, and thus only even or quad numbered accesses are -allowed. For example, `%f34' is a legal floating point register, but -`%f35' is not. - - Certain V9 instructions allow access to ancillary state registers. -Most simply they can be referred to as `%asrN' where N can be from 16 -to 31. However, there are some aliases defined to reference ASR -registers defined for various UltraSPARC processors: - - * The tick compare register is referred to as `%tick_cmpr'. - - * The system tick register is referred to as `%stick'. An alias, - `%sys_tick', exists but is deprecated and should not be used by - new software. - - * The system tick compare register is referred to as `%stick_cmpr'. - An alias, `%sys_tick_cmpr', exists but is deprecated and should - not be used by new software. - - * The software interrupt register is referred to as `%softint'. - - * The set software interrupt register is referred to as - `%set_softint'. The mnemonic `%softint_set' is provided as an - alias. - - * The clear software interrupt register is referred to as - `%clear_softint'. The mnemonic `%softint_clear' is provided as an - alias. - - * The performance instrumentation counters register is referred to as - `%pic'. - - * The performance control register is referred to as `%pcr'. - - * The graphics status register is referred to as `%gsr'. - - * The V9 dispatch control register is referred to as `%dcr'. - - Various V9 branch and conditional move instructions allow -specification of which set of integer condition codes to test. These -are referred to as `%xcc' and `%icc'. - - In V9, there are 4 sets of floating point condition codes which are -referred to as `%fccN'. - - Several special privileged and non-privileged registers exist: - - * The V9 address space identifier register is referred to as `%asi'. - - * The V9 restorable windows register is referred to as `%canrestore'. - - * The V9 savable windows register is referred to as `%cansave'. - - * The V9 clean windows register is referred to as `%cleanwin'. - - * The V9 current window pointer register is referred to as `%cwp'. - - * The floating-point queue register is referred to as `%fq'. - - * The V8 co-processor queue register is referred to as `%cq'. - - * The floating point status register is referred to as `%fsr'. - - * The other windows register is referred to as `%otherwin'. - - * The V9 program counter register is referred to as `%pc'. - - * The V9 next program counter register is referred to as `%npc'. - - * The V9 processor interrupt level register is referred to as `%pil'. - - * The V9 processor state register is referred to as `%pstate'. - - * The trap base address register is referred to as `%tba'. - - * The V9 tick register is referred to as `%tick'. - - * The V9 trap level is referred to as `%tl'. - - * The V9 trap program counter is referred to as `%tpc'. - - * The V9 trap next program counter is referred to as `%tnpc'. - - * The V9 trap state is referred to as `%tstate'. - - * The V9 trap type is referred to as `%tt'. - - * The V9 condition codes is referred to as `%ccr'. - - * The V9 floating-point registers state is referred to as `%fprs'. - - * The V9 version register is referred to as `%ver'. - - * The V9 window state register is referred to as `%wstate'. - - * The Y register is referred to as `%y'. - - * The V8 window invalid mask register is referred to as `%wim'. - - * The V8 processor state register is referred to as `%psr'. - - * The V9 global register level register is referred to as `%gl'. - - Several special register names exist for hypervisor mode code: - - * The hyperprivileged processor state register is referred to as - `%hpstate'. - - * The hyperprivileged trap state register is referred to as - `%htstate'. - - * The hyperprivileged interrupt pending register is referred to as - `%hintp'. - - * The hyperprivileged trap base address register is referred to as - `%htba'. - - * The hyperprivileged implementation version register is referred to - as `%hver'. - - * The hyperprivileged system tick compare register is referred to as - `%hstick_cmpr'. Note that there is no `%hstick' register, the - normal `%stick' is used. - - -File: as.info, Node: Sparc-Constants, Next: Sparc-Relocs, Prev: Sparc-Regs, Up: Sparc-Syntax - -9.41.3.3 Constants -.................. - -Several Sparc instructions take an immediate operand field for which -mnemonic names exist. Two such examples are `membar' and `prefetch'. -Another example are the set of V9 memory access instruction that allow -specification of an address space identifier. - - The `membar' instruction specifies a memory barrier that is the -defined by the operand which is a bitmask. The supported mask -mnemonics are: - - * `#Sync' requests that all operations (including nonmemory - reference operations) appearing prior to the `membar' must have - been performed and the effects of any exceptions become visible - before any instructions after the `membar' may be initiated. This - corresponds to `membar' cmask field bit 2. - - * `#MemIssue' requests that all memory reference operations - appearing prior to the `membar' must have been performed before - any memory operation after the `membar' may be initiated. This - corresponds to `membar' cmask field bit 1. - - * `#Lookaside' requests that a store appearing prior to the `membar' - must complete before any load following the `membar' referencing - the same address can be initiated. This corresponds to `membar' - cmask field bit 0. - - * `#StoreStore' defines that the effects of all stores appearing - prior to the `membar' instruction must be visible to all - processors before the effect of any stores following the `membar'. - Equivalent to the deprecated `stbar' instruction. This - corresponds to `membar' mmask field bit 3. - - * `#LoadStore' defines all loads appearing prior to the `membar' - instruction must have been performed before the effect of any - stores following the `membar' is visible to any other processor. - This corresponds to `membar' mmask field bit 2. - - * `#StoreLoad' defines that the effects of all stores appearing - prior to the `membar' instruction must be visible to all - processors before loads following the `membar' may be performed. - This corresponds to `membar' mmask field bit 1. - - * `#LoadLoad' defines that all loads appearing prior to the `membar' - instruction must have been performed before any loads following - the `membar' may be performed. This corresponds to `membar' mmask - field bit 0. - - - These values can be ored together, for example: - - membar #Sync - membar #StoreLoad | #LoadLoad - membar #StoreLoad | #StoreStore - - The `prefetch' and `prefetcha' instructions take a prefetch function -code. The following prefetch function code constant mnemonics are -available: - - * `#n_reads' requests a prefetch for several reads, and corresponds - to a prefetch function code of 0. - - `#one_read' requests a prefetch for one read, and corresponds to a - prefetch function code of 1. - - `#n_writes' requests a prefetch for several writes (and possibly - reads), and corresponds to a prefetch function code of 2. - - `#one_write' requests a prefetch for one write, and corresponds to - a prefetch function code of 3. - - `#page' requests a prefetch page, and corresponds to a prefetch - function code of 4. - - `#invalidate' requests a prefetch invalidate, and corresponds to a - prefetch function code of 16. - - `#unified' requests a prefetch to the nearest unified cache, and - corresponds to a prefetch function code of 17. - - `#n_reads_strong' requests a strong prefetch for several reads, - and corresponds to a prefetch function code of 20. - - `#one_read_strong' requests a strong prefetch for one read, and - corresponds to a prefetch function code of 21. - - `#n_writes_strong' requests a strong prefetch for several writes, - and corresponds to a prefetch function code of 22. - - `#one_write_strong' requests a strong prefetch for one write, and - corresponds to a prefetch function code of 23. - - Onle one prefetch code may be specified. Here are some examples: - - prefetch [%l0 + %l2], #one_read - prefetch [%g2 + 8], #n_writes - prefetcha [%g1] 0x8, #unified - prefetcha [%o0 + 0x10] %asi, #n_reads - - The actual behavior of a given prefetch function code is processor - specific. If a processor does not implement a given prefetch - function code, it will treat the prefetch instruction as a nop. - - For instructions that accept an immediate address space identifier, - `as' provides many mnemonics corresponding to V9 defined as well - as UltraSPARC and Niagara extended values. For example, `#ASI_P' - and `#ASI_BLK_INIT_QUAD_LDD_AIUS'. See the V9 and processor - specific manuals for details. - - - -File: as.info, Node: Sparc-Relocs, Next: Sparc-Size-Translations, Prev: Sparc-Constants, Up: Sparc-Syntax - -9.41.3.4 Relocations -.................... - -ELF relocations are available as defined in the 32-bit and 64-bit Sparc -ELF specifications. - - `R_SPARC_HI22' is obtained using `%hi' and `R_SPARC_LO10' is -obtained using `%lo'. Likewise `R_SPARC_HIX22' is obtained from `%hix' -and `R_SPARC_LOX10' is obtained using `%lox'. For example: - - sethi %hi(symbol), %g1 - or %g1, %lo(symbol), %g1 - - sethi %hix(symbol), %g1 - xor %g1, %lox(symbol), %g1 - - These "high" mnemonics extract bits 31:10 of their operand, and the -"low" mnemonics extract bits 9:0 of their operand. - - V9 code model relocations can be requested as follows: - - * `R_SPARC_HH22' is requested using `%hh'. It can also be generated - using `%uhi'. - - * `R_SPARC_HM10' is requested using `%hm'. It can also be generated - using `%ulo'. - - * `R_SPARC_LM22' is requested using `%lm'. - - * `R_SPARC_H44' is requested using `%h44'. - - * `R_SPARC_M44' is requested using `%m44'. - - * `R_SPARC_L44' is requested using `%l44' or `%l34'. - - * `R_SPARC_H34' is requested using `%h34'. - - The `%l34' generates a `R_SPARC_L44' relocation because it -calculates the necessary value, and therefore no explicit `R_SPARC_L34' -relocation needed to be created for this purpose. - - The `%h34' and `%l34' relocations are used for the abs34 code model. -Here is an example abs34 address generation sequence: - - sethi %h34(symbol), %g1 - sllx %g1, 2, %g1 - or %g1, %l34(symbol), %g1 - - The PC relative relocation `R_SPARC_PC22' can be obtained by -enclosing an operand inside of `%pc22'. Likewise, the `R_SPARC_PC10' -relocation can be obtained using `%pc10'. These are mostly used when -assembling PIC code. For example, the standard PIC sequence on Sparc -to get the base of the global offset table, PC relative, into a -register, can be performed as: - - sethi %pc22(_GLOBAL_OFFSET_TABLE_-4), %l7 - add %l7, %pc10(_GLOBAL_OFFSET_TABLE_+4), %l7 - - Several relocations exist to allow the link editor to potentially -optimize GOT data references. The `R_SPARC_GOTDATA_OP_HIX22' -relocation can obtained by enclosing an operand inside of -`%gdop_hix22'. The `R_SPARC_GOTDATA_OP_LOX10' relocation can obtained -by enclosing an operand inside of `%gdop_lox10'. Likewise, -`R_SPARC_GOTDATA_OP' can be obtained by enclosing an operand inside of -`%gdop'. For example, assuming the GOT base is in register `%l7': - - sethi %gdop_hix22(symbol), %l1 - xor %l1, %gdop_lox10(symbol), %l1 - ld [%l7 + %l1], %l2, %gdop(symbol) - - There are many relocations that can be requested for access to -thread local storage variables. All of the Sparc TLS mnemonics are -supported: - - * `R_SPARC_TLS_GD_HI22' is requested using `%tgd_hi22'. - - * `R_SPARC_TLS_GD_LO10' is requested using `%tgd_lo10'. - - * `R_SPARC_TLS_GD_ADD' is requested using `%tgd_add'. - - * `R_SPARC_TLS_GD_CALL' is requested using `%tgd_call'. - - * `R_SPARC_TLS_LDM_HI22' is requested using `%tldm_hi22'. - - * `R_SPARC_TLS_LDM_LO10' is requested using `%tldm_lo10'. - - * `R_SPARC_TLS_LDM_ADD' is requested using `%tldm_add'. - - * `R_SPARC_TLS_LDM_CALL' is requested using `%tldm_call'. - - * `R_SPARC_TLS_LDO_HIX22' is requested using `%tldo_hix22'. - - * `R_SPARC_TLS_LDO_LOX10' is requested using `%tldo_lox10'. - - * `R_SPARC_TLS_LDO_ADD' is requested using `%tldo_add'. - - * `R_SPARC_TLS_IE_HI22' is requested using `%tie_hi22'. - - * `R_SPARC_TLS_IE_LO10' is requested using `%tie_lo10'. - - * `R_SPARC_TLS_IE_LD' is requested using `%tie_ld'. - - * `R_SPARC_TLS_IE_LDX' is requested using `%tie_ldx'. - - * `R_SPARC_TLS_IE_ADD' is requested using `%tie_add'. - - * `R_SPARC_TLS_LE_HIX22' is requested using `%tle_hix22'. - - * `R_SPARC_TLS_LE_LOX10' is requested using `%tle_lox10'. - - Here are some example TLS model sequences. - - First, General Dynamic: - - sethi %tgd_hi22(symbol), %l1 - add %l1, %tgd_lo10(symbol), %l1 - add %l7, %l1, %o0, %tgd_add(symbol) - call __tls_get_addr, %tgd_call(symbol) - nop - - Local Dynamic: - - sethi %tldm_hi22(symbol), %l1 - add %l1, %tldm_lo10(symbol), %l1 - add %l7, %l1, %o0, %tldm_add(symbol) - call __tls_get_addr, %tldm_call(symbol) - nop - - sethi %tldo_hix22(symbol), %l1 - xor %l1, %tldo_lox10(symbol), %l1 - add %o0, %l1, %l1, %tldo_add(symbol) - - Initial Exec: - - sethi %tie_hi22(symbol), %l1 - add %l1, %tie_lo10(symbol), %l1 - ld [%l7 + %l1], %o0, %tie_ld(symbol) - add %g7, %o0, %o0, %tie_add(symbol) - - sethi %tie_hi22(symbol), %l1 - add %l1, %tie_lo10(symbol), %l1 - ldx [%l7 + %l1], %o0, %tie_ldx(symbol) - add %g7, %o0, %o0, %tie_add(symbol) - - And finally, Local Exec: - - sethi %tle_hix22(symbol), %l1 - add %l1, %tle_lox10(symbol), %l1 - add %g7, %l1, %l1 - - When assembling for 64-bit, and a secondary constant addend is -specified in an address expression that would normally generate an -`R_SPARC_LO10' relocation, the assembler will emit an `R_SPARC_OLO10' -instead. - - -File: as.info, Node: Sparc-Size-Translations, Prev: Sparc-Relocs, Up: Sparc-Syntax - -9.41.3.5 Size Translations -.......................... - -Often it is desirable to write code in an operand size agnostic manner. -`as' provides support for this via operand size opcode translations. -Translations are supported for loads, stores, shifts, compare-and-swap -atomics, and the `clr' synthetic instruction. - - If generating 32-bit code, `as' will generate the 32-bit opcode. -Whereas if 64-bit code is being generated, the 64-bit opcode will be -emitted. For example `ldn' will be transformed into `ld' for 32-bit -code and `ldx' for 64-bit code. - - Here is an example meant to demonstrate all the supported opcode -translations: - - ldn [%o0], %o1 - ldna [%o0] %asi, %o2 - stn %o1, [%o0] - stna %o2, [%o0] %asi - slln %o3, 3, %o3 - srln %o4, 8, %o4 - sran %o5, 12, %o5 - casn [%o0], %o1, %o2 - casna [%o0] %asi, %o1, %o2 - clrn %g1 - - In 32-bit mode `as' will emit: - - ld [%o0], %o1 - lda [%o0] %asi, %o2 - st %o1, [%o0] - sta %o2, [%o0] %asi - sll %o3, 3, %o3 - srl %o4, 8, %o4 - sra %o5, 12, %o5 - cas [%o0], %o1, %o2 - casa [%o0] %asi, %o1, %o2 - clr %g1 - - And in 64-bit mode `as' will emit: - - ldx [%o0], %o1 - ldxa [%o0] %asi, %o2 - stx %o1, [%o0] - stxa %o2, [%o0] %asi - sllx %o3, 3, %o3 - srlx %o4, 8, %o4 - srax %o5, 12, %o5 - casx [%o0], %o1, %o2 - casxa [%o0] %asi, %o1, %o2 - clrx %g1 - - Finally, the `.nword' translating directive is supported as well. -It is documented in the section on Sparc machine directives. - - -File: as.info, Node: Sparc-Float, Next: Sparc-Directives, Prev: Sparc-Syntax, Up: Sparc-Dependent - -9.41.4 Floating Point ---------------------- - -The Sparc uses IEEE floating-point numbers. - - -File: as.info, Node: Sparc-Directives, Prev: Sparc-Float, Up: Sparc-Dependent - -9.41.5 Sparc Machine Directives -------------------------------- - -The Sparc version of `as' supports the following additional machine -directives: - -`.align' - This must be followed by the desired alignment in bytes. - -`.common' - This must be followed by a symbol name, a positive number, and - `"bss"'. This behaves somewhat like `.comm', but the syntax is - different. - -`.half' - This is functionally identical to `.short'. - -`.nword' - On the Sparc, the `.nword' directive produces native word sized - value, ie. if assembling with -32 it is equivalent to `.word', if - assembling with -64 it is equivalent to `.xword'. - -`.proc' - This directive is ignored. Any text following it on the same line - is also ignored. - -`.register' - This directive declares use of a global application or system - register. It must be followed by a register name %g2, %g3, %g6 or - %g7, comma and the symbol name for that register. If symbol name - is `#scratch', it is a scratch register, if it is `#ignore', it - just suppresses any errors about using undeclared global register, - but does not emit any information about it into the object file. - This can be useful e.g. if you save the register before use and - restore it after. - -`.reserve' - This must be followed by a symbol name, a positive number, and - `"bss"'. This behaves somewhat like `.lcomm', but the syntax is - different. - -`.seg' - This must be followed by `"text"', `"data"', or `"data1"'. It - behaves like `.text', `.data', or `.data 1'. - -`.skip' - This is functionally identical to the `.space' directive. - -`.word' - On the Sparc, the `.word' directive produces 32 bit values, - instead of the 16 bit values it produces on many other machines. - -`.xword' - On the Sparc V9 processor, the `.xword' directive produces 64 bit - values. - - -File: as.info, Node: TIC54X-Dependent, Next: TIC6X-Dependent, Prev: Sparc-Dependent, Up: Machine Dependencies - -9.42 TIC54X Dependent Features -============================== - -* Menu: - -* TIC54X-Opts:: Command-line Options -* TIC54X-Block:: Blocking -* TIC54X-Env:: Environment Settings -* TIC54X-Constants:: Constants Syntax -* TIC54X-Subsyms:: String Substitution -* TIC54X-Locals:: Local Label Syntax -* TIC54X-Builtins:: Builtin Assembler Math Functions -* TIC54X-Ext:: Extended Addressing Support -* TIC54X-Directives:: Directives -* TIC54X-Macros:: Macro Features -* TIC54X-MMRegs:: Memory-mapped Registers -* TIC54X-Syntax:: Syntax - - -File: as.info, Node: TIC54X-Opts, Next: TIC54X-Block, Up: TIC54X-Dependent - -9.42.1 Options --------------- - -The TMS320C54X version of `as' has a few machine-dependent options. - - You can use the `-mfar-mode' option to enable extended addressing -mode. All addresses will be assumed to be > 16 bits, and the -appropriate relocation types will be used. This option is equivalent -to using the `.far_mode' directive in the assembly code. If you do not -use the `-mfar-mode' option, all references will be assumed to be 16 -bits. This option may be abbreviated to `-mf'. - - You can use the `-mcpu' option to specify a particular CPU. This -option is equivalent to using the `.version' directive in the assembly -code. For recognized CPU codes, see *Note `.version': -TIC54X-Directives. The default CPU version is `542'. - - You can use the `-merrors-to-file' option to redirect error output -to a file (this provided for those deficient environments which don't -provide adequate output redirection). This option may be abbreviated to -`-me'. - - -File: as.info, Node: TIC54X-Block, Next: TIC54X-Env, Prev: TIC54X-Opts, Up: TIC54X-Dependent - -9.42.2 Blocking ---------------- - -A blocked section or memory block is guaranteed not to cross the -blocking boundary (usually a page, or 128 words) if it is smaller than -the blocking size, or to start on a page boundary if it is larger than -the blocking size. - - -File: as.info, Node: TIC54X-Env, Next: TIC54X-Constants, Prev: TIC54X-Block, Up: TIC54X-Dependent - -9.42.3 Environment Settings ---------------------------- - -`C54XDSP_DIR' and `A_DIR' are semicolon-separated paths which are added -to the list of directories normally searched for source and include -files. `C54XDSP_DIR' will override `A_DIR'. - - -File: as.info, Node: TIC54X-Constants, Next: TIC54X-Subsyms, Prev: TIC54X-Env, Up: TIC54X-Dependent - -9.42.4 Constants Syntax ------------------------ - -The TIC54X version of `as' allows the following additional constant -formats, using a suffix to indicate the radix: - - Binary `000000B, 011000b' - Octal `10Q, 224q' - Hexadecimal `45h, 0FH' - - -File: as.info, Node: TIC54X-Subsyms, Next: TIC54X-Locals, Prev: TIC54X-Constants, Up: TIC54X-Dependent - -9.42.5 String Substitution --------------------------- - -A subset of allowable symbols (which we'll call subsyms) may be assigned -arbitrary string values. This is roughly equivalent to C preprocessor -#define macros. When `as' encounters one of these symbols, the symbol -is replaced in the input stream by its string value. Subsym names -*must* begin with a letter. - - Subsyms may be defined using the `.asg' and `.eval' directives -(*Note `.asg': TIC54X-Directives, *Note `.eval': TIC54X-Directives. - - Expansion is recursive until a previously encountered symbol is -seen, at which point substitution stops. - - In this example, x is replaced with SYM2; SYM2 is replaced with -SYM1, and SYM1 is replaced with x. At this point, x has already been -encountered and the substitution stops. - - .asg "x",SYM1 - .asg "SYM1",SYM2 - .asg "SYM2",x - add x,a ; final code assembled is "add x, a" - - Macro parameters are converted to subsyms; a side effect of this is -the normal `as' '\ARG' dereferencing syntax is unnecessary. Subsyms -defined within a macro will have global scope, unless the `.var' -directive is used to identify the subsym as a local macro variable -*note `.var': TIC54X-Directives. - - Substitution may be forced in situations where replacement might be -ambiguous by placing colons on either side of the subsym. The following -code: - - .eval "10",x - LAB:X: add #x, a - - When assembled becomes: - - LAB10 add #10, a - - Smaller parts of the string assigned to a subsym may be accessed with -the following syntax: - -``:SYMBOL(CHAR_INDEX):'' - Evaluates to a single-character string, the character at - CHAR_INDEX. - -``:SYMBOL(START,LENGTH):'' - Evaluates to a substring of SYMBOL beginning at START with length - LENGTH. - - -File: as.info, Node: TIC54X-Locals, Next: TIC54X-Builtins, Prev: TIC54X-Subsyms, Up: TIC54X-Dependent - -9.42.6 Local Labels -------------------- - -Local labels may be defined in two ways: - - * $N, where N is a decimal number between 0 and 9 - - * LABEL?, where LABEL is any legal symbol name. - - Local labels thus defined may be redefined or automatically -generated. The scope of a local label is based on when it may be -undefined or reset. This happens when one of the following situations -is encountered: - - * .newblock directive *note `.newblock': TIC54X-Directives. - - * The current section is changed (.sect, .text, or .data) - - * Entering or leaving an included file - - * The macro scope where the label was defined is exited - - -File: as.info, Node: TIC54X-Builtins, Next: TIC54X-Ext, Prev: TIC54X-Locals, Up: TIC54X-Dependent - -9.42.7 Math Builtins --------------------- - -The following built-in functions may be used to generate a -floating-point value. All return a floating-point value except `$cvi', -`$int', and `$sgn', which return an integer value. - -``$acos(EXPR)'' - Returns the floating point arccosine of EXPR. - -``$asin(EXPR)'' - Returns the floating point arcsine of EXPR. - -``$atan(EXPR)'' - Returns the floating point arctangent of EXPR. - -``$atan2(EXPR1,EXPR2)'' - Returns the floating point arctangent of EXPR1 / EXPR2. - -``$ceil(EXPR)'' - Returns the smallest integer not less than EXPR as floating point. - -``$cosh(EXPR)'' - Returns the floating point hyperbolic cosine of EXPR. - -``$cos(EXPR)'' - Returns the floating point cosine of EXPR. - -``$cvf(EXPR)'' - Returns the integer value EXPR converted to floating-point. - -``$cvi(EXPR)'' - Returns the floating point value EXPR converted to integer. - -``$exp(EXPR)'' - Returns the floating point value e ^ EXPR. - -``$fabs(EXPR)'' - Returns the floating point absolute value of EXPR. - -``$floor(EXPR)'' - Returns the largest integer that is not greater than EXPR as - floating point. - -``$fmod(EXPR1,EXPR2)'' - Returns the floating point remainder of EXPR1 / EXPR2. - -``$int(EXPR)'' - Returns 1 if EXPR evaluates to an integer, zero otherwise. - -``$ldexp(EXPR1,EXPR2)'' - Returns the floating point value EXPR1 * 2 ^ EXPR2. - -``$log10(EXPR)'' - Returns the base 10 logarithm of EXPR. - -``$log(EXPR)'' - Returns the natural logarithm of EXPR. - -``$max(EXPR1,EXPR2)'' - Returns the floating point maximum of EXPR1 and EXPR2. - -``$min(EXPR1,EXPR2)'' - Returns the floating point minimum of EXPR1 and EXPR2. - -``$pow(EXPR1,EXPR2)'' - Returns the floating point value EXPR1 ^ EXPR2. - -``$round(EXPR)'' - Returns the nearest integer to EXPR as a floating point number. - -``$sgn(EXPR)'' - Returns -1, 0, or 1 based on the sign of EXPR. - -``$sin(EXPR)'' - Returns the floating point sine of EXPR. - -``$sinh(EXPR)'' - Returns the floating point hyperbolic sine of EXPR. - -``$sqrt(EXPR)'' - Returns the floating point square root of EXPR. - -``$tan(EXPR)'' - Returns the floating point tangent of EXPR. - -``$tanh(EXPR)'' - Returns the floating point hyperbolic tangent of EXPR. - -``$trunc(EXPR)'' - Returns the integer value of EXPR truncated towards zero as - floating point. - - - -File: as.info, Node: TIC54X-Ext, Next: TIC54X-Directives, Prev: TIC54X-Builtins, Up: TIC54X-Dependent - -9.42.8 Extended Addressing --------------------------- - -The `LDX' pseudo-op is provided for loading the extended addressing bits -of a label or address. For example, if an address `_label' resides in -extended program memory, the value of `_label' may be loaded as follows: - ldx #_label,16,a ; loads extended bits of _label - or #_label,a ; loads lower 16 bits of _label - bacc a ; full address is in accumulator A - - -File: as.info, Node: TIC54X-Directives, Next: TIC54X-Macros, Prev: TIC54X-Ext, Up: TIC54X-Dependent - -9.42.9 Directives ------------------ - -`.align [SIZE]' -`.even' - Align the section program counter on the next boundary, based on - SIZE. SIZE may be any power of 2. `.even' is equivalent to - `.align' with a SIZE of 2. - `1' - Align SPC to word boundary - - `2' - Align SPC to longword boundary (same as .even) - - `128' - Align SPC to page boundary - -`.asg STRING, NAME' - Assign NAME the string STRING. String replacement is performed on - STRING before assignment. - -`.eval STRING, NAME' - Evaluate the contents of string STRING and assign the result as a - string to the subsym NAME. String replacement is performed on - STRING before assignment. - -`.bss SYMBOL, SIZE [, [BLOCKING_FLAG] [,ALIGNMENT_FLAG]]' - Reserve space for SYMBOL in the .bss section. SIZE is in words. - If present, BLOCKING_FLAG indicates the allocated space should be - aligned on a page boundary if it would otherwise cross a page - boundary. If present, ALIGNMENT_FLAG causes the assembler to - allocate SIZE on a long word boundary. - -`.byte VALUE [,...,VALUE_N]' -`.ubyte VALUE [,...,VALUE_N]' -`.char VALUE [,...,VALUE_N]' -`.uchar VALUE [,...,VALUE_N]' - Place one or more bytes into consecutive words of the current - section. The upper 8 bits of each word is zero-filled. If a - label is used, it points to the word allocated for the first byte - encountered. - -`.clink ["SECTION_NAME"]' - Set STYP_CLINK flag for this section, which indicates to the - linker that if no symbols from this section are referenced, the - section should not be included in the link. If SECTION_NAME is - omitted, the current section is used. - -`.c_mode' - TBD. - -`.copy "FILENAME" | FILENAME' -`.include "FILENAME" | FILENAME' - Read source statements from FILENAME. The normal include search - path is used. Normally .copy will cause statements from the - included file to be printed in the assembly listing and .include - will not, but this distinction is not currently implemented. - -`.data' - Begin assembling code into the .data section. - -`.double VALUE [,...,VALUE_N]' -`.ldouble VALUE [,...,VALUE_N]' -`.float VALUE [,...,VALUE_N]' -`.xfloat VALUE [,...,VALUE_N]' - Place an IEEE single-precision floating-point representation of - one or more floating-point values into the current section. All - but `.xfloat' align the result on a longword boundary. Values are - stored most-significant word first. - -`.drlist' -`.drnolist' - Control printing of directives to the listing file. Ignored. - -`.emsg STRING' -`.mmsg STRING' -`.wmsg STRING' - Emit a user-defined error, message, or warning, respectively. - -`.far_mode' - Use extended addressing when assembling statements. This should - appear only once per file, and is equivalent to the -mfar-mode - option *note `-mfar-mode': TIC54X-Opts. - -`.fclist' -`.fcnolist' - Control printing of false conditional blocks to the listing file. - -`.field VALUE [,SIZE]' - Initialize a bitfield of SIZE bits in the current section. If - VALUE is relocatable, then SIZE must be 16. SIZE defaults to 16 - bits. If VALUE does not fit into SIZE bits, the value will be - truncated. Successive `.field' directives will pack starting at - the current word, filling the most significant bits first, and - aligning to the start of the next word if the field size does not - fit into the space remaining in the current word. A `.align' - directive with an operand of 1 will force the next `.field' - directive to begin packing into a new word. If a label is used, it - points to the word that contains the specified field. - -`.global SYMBOL [,...,SYMBOL_N]' -`.def SYMBOL [,...,SYMBOL_N]' -`.ref SYMBOL [,...,SYMBOL_N]' - `.def' nominally identifies a symbol defined in the current file - and available to other files. `.ref' identifies a symbol used in - the current file but defined elsewhere. Both map to the standard - `.global' directive. - -`.half VALUE [,...,VALUE_N]' -`.uhalf VALUE [,...,VALUE_N]' -`.short VALUE [,...,VALUE_N]' -`.ushort VALUE [,...,VALUE_N]' -`.int VALUE [,...,VALUE_N]' -`.uint VALUE [,...,VALUE_N]' -`.word VALUE [,...,VALUE_N]' -`.uword VALUE [,...,VALUE_N]' - Place one or more values into consecutive words of the current - section. If a label is used, it points to the word allocated for - the first value encountered. - -`.label SYMBOL' - Define a special SYMBOL to refer to the load time address of the - current section program counter. - -`.length' -`.width' - Set the page length and width of the output listing file. Ignored. - -`.list' -`.nolist' - Control whether the source listing is printed. Ignored. - -`.long VALUE [,...,VALUE_N]' -`.ulong VALUE [,...,VALUE_N]' -`.xlong VALUE [,...,VALUE_N]' - Place one or more 32-bit values into consecutive words in the - current section. The most significant word is stored first. - `.long' and `.ulong' align the result on a longword boundary; - `xlong' does not. - -`.loop [COUNT]' -`.break [CONDITION]' -`.endloop' - Repeatedly assemble a block of code. `.loop' begins the block, and - `.endloop' marks its termination. COUNT defaults to 1024, and - indicates the number of times the block should be repeated. - `.break' terminates the loop so that assembly begins after the - `.endloop' directive. The optional CONDITION will cause the loop - to terminate only if it evaluates to zero. - -`MACRO_NAME .macro [PARAM1][,...PARAM_N]' -`[.mexit]' -`.endm' - See the section on macros for more explanation (*Note - TIC54X-Macros::. - -`.mlib "FILENAME" | FILENAME' - Load the macro library FILENAME. FILENAME must be an archived - library (BFD ar-compatible) of text files, expected to contain - only macro definitions. The standard include search path is used. - -`.mlist' -`.mnolist' - Control whether to include macro and loop block expansions in the - listing output. Ignored. - -`.mmregs' - Define global symbolic names for the 'c54x registers. Supposedly - equivalent to executing `.set' directives for each register with - its memory-mapped value, but in reality is provided only for - compatibility and does nothing. - -`.newblock' - This directive resets any TIC54X local labels currently defined. - Normal `as' local labels are unaffected. - -`.option OPTION_LIST' - Set listing options. Ignored. - -`.sblock "SECTION_NAME" | SECTION_NAME [,"NAME_N" | NAME_N]' - Designate SECTION_NAME for blocking. Blocking guarantees that a - section will start on a page boundary (128 words) if it would - otherwise cross a page boundary. Only initialized sections may be - designated with this directive. See also *Note TIC54X-Block::. - -`.sect "SECTION_NAME"' - Define a named initialized section and make it the current section. - -`SYMBOL .set "VALUE"' -`SYMBOL .equ "VALUE"' - Equate a constant VALUE to a SYMBOL, which is placed in the symbol - table. SYMBOL may not be previously defined. - -`.space SIZE_IN_BITS' -`.bes SIZE_IN_BITS' - Reserve the given number of bits in the current section and - zero-fill them. If a label is used with `.space', it points to the - *first* word reserved. With `.bes', the label points to the - *last* word reserved. - -`.sslist' -`.ssnolist' - Controls the inclusion of subsym replacement in the listing - output. Ignored. - -`.string "STRING" [,...,"STRING_N"]' -`.pstring "STRING" [,...,"STRING_N"]' - Place 8-bit characters from STRING into the current section. - `.string' zero-fills the upper 8 bits of each word, while - `.pstring' puts two characters into each word, filling the - most-significant bits first. Unused space is zero-filled. If a - label is used, it points to the first word initialized. - -`[STAG] .struct [OFFSET]' -`[NAME_1] element [COUNT_1]' -`[NAME_2] element [COUNT_2]' -`[TNAME] .tag STAGX [TCOUNT]' -`...' -`[NAME_N] element [COUNT_N]' -`[SSIZE] .endstruct' -`LABEL .tag [STAG]' - Assign symbolic offsets to the elements of a structure. STAG - defines a symbol to use to reference the structure. OFFSET - indicates a starting value to use for the first element - encountered; otherwise it defaults to zero. Each element can have - a named offset, NAME, which is a symbol assigned the value of the - element's offset into the structure. If STAG is missing, these - become global symbols. COUNT adjusts the offset that many times, - as if `element' were an array. `element' may be one of `.byte', - `.word', `.long', `.float', or any equivalent of those, and the - structure offset is adjusted accordingly. `.field' and `.string' - are also allowed; the size of `.field' is one bit, and `.string' - is considered to be one word in size. Only element descriptors, - structure/union tags, `.align' and conditional assembly directives - are allowed within `.struct'/`.endstruct'. `.align' aligns member - offsets to word boundaries only. SSIZE, if provided, will always - be assigned the size of the structure. - - The `.tag' directive, in addition to being used to define a - structure/union element within a structure, may be used to apply a - structure to a symbol. Once applied to LABEL, the individual - structure elements may be applied to LABEL to produce the desired - offsets using LABEL as the structure base. - -`.tab' - Set the tab size in the output listing. Ignored. - -`[UTAG] .union' -`[NAME_1] element [COUNT_1]' -`[NAME_2] element [COUNT_2]' -`[TNAME] .tag UTAGX[,TCOUNT]' -`...' -`[NAME_N] element [COUNT_N]' -`[USIZE] .endstruct' -`LABEL .tag [UTAG]' - Similar to `.struct', but the offset after each element is reset to - zero, and the USIZE is set to the maximum of all defined elements. - Starting offset for the union is always zero. - -`[SYMBOL] .usect "SECTION_NAME", SIZE, [,[BLOCKING_FLAG] [,ALIGNMENT_FLAG]]' - Reserve space for variables in a named, uninitialized section - (similar to .bss). `.usect' allows definitions sections - independent of .bss. SYMBOL points to the first location reserved - by this allocation. The symbol may be used as a variable name. - SIZE is the allocated size in words. BLOCKING_FLAG indicates - whether to block this section on a page boundary (128 words) - (*note TIC54X-Block::). ALIGNMENT FLAG indicates whether the - section should be longword-aligned. - -`.var SYM[,..., SYM_N]' - Define a subsym to be a local variable within a macro. See *Note - TIC54X-Macros::. - -`.version VERSION' - Set which processor to build instructions for. Though the - following values are accepted, the op is ignored. - `541' - `542' - `543' - `545' - `545LP' - `546LP' - `548' - `549' - - -File: as.info, Node: TIC54X-Macros, Next: TIC54X-MMRegs, Prev: TIC54X-Directives, Up: TIC54X-Dependent - -9.42.10 Macros --------------- - -Macros do not require explicit dereferencing of arguments (i.e., \ARG). - - During macro expansion, the macro parameters are converted to -subsyms. If the number of arguments passed the macro invocation -exceeds the number of parameters defined, the last parameter is -assigned the string equivalent of all remaining arguments. If fewer -arguments are given than parameters, the missing parameters are -assigned empty strings. To include a comma in an argument, you must -enclose the argument in quotes. - - The following built-in subsym functions allow examination of the -string value of subsyms (or ordinary strings). The arguments are -strings unless otherwise indicated (subsyms passed as args will be -replaced by the strings they represent). -``$symlen(STR)'' - Returns the length of STR. - -``$symcmp(STR1,STR2)'' - Returns 0 if STR1 == STR2, non-zero otherwise. - -``$firstch(STR,CH)'' - Returns index of the first occurrence of character constant CH in - STR. - -``$lastch(STR,CH)'' - Returns index of the last occurrence of character constant CH in - STR. - -``$isdefed(SYMBOL)'' - Returns zero if the symbol SYMBOL is not in the symbol table, - non-zero otherwise. - -``$ismember(SYMBOL,LIST)'' - Assign the first member of comma-separated string LIST to SYMBOL; - LIST is reassigned the remainder of the list. Returns zero if - LIST is a null string. Both arguments must be subsyms. - -``$iscons(EXPR)'' - Returns 1 if string EXPR is binary, 2 if octal, 3 if hexadecimal, - 4 if a character, 5 if decimal, and zero if not an integer. - -``$isname(NAME)'' - Returns 1 if NAME is a valid symbol name, zero otherwise. - -``$isreg(REG)'' - Returns 1 if REG is a valid predefined register name (AR0-AR7 - only). - -``$structsz(STAG)'' - Returns the size of the structure or union represented by STAG. - -``$structacc(STAG)'' - Returns the reference point of the structure or union represented - by STAG. Always returns zero. - - - -File: as.info, Node: TIC54X-MMRegs, Next: TIC54X-Syntax, Prev: TIC54X-Macros, Up: TIC54X-Dependent - -9.42.11 Memory-mapped Registers -------------------------------- - -The following symbols are recognized as memory-mapped registers: - - - -File: as.info, Node: TIC54X-Syntax, Prev: TIC54X-MMRegs, Up: TIC54X-Dependent - -9.42.12 TIC54X Syntax ---------------------- - -* Menu: - -* TIC54X-Chars:: Special Characters - - -File: as.info, Node: TIC54X-Chars, Up: TIC54X-Syntax - -9.42.12.1 Special Characters -............................ - -The presence of a `;' appearing anywhere on a line indicates the start -of a comment that extends to the end of that line. - - If a `#' appears as the first character of a line then the whole -line is treated as a comment, but in this case the line can also be a -logical line number directive (*note Comments::) or a preprocessor -control command (*note Preprocessing::). - - The presence of an asterisk (`*') at the start of a line also -indicates a comment that extends to the end of that line. - - The TIC54X assembler does not currently support a line separator -character. - - -File: as.info, Node: TIC6X-Dependent, Next: TILE-Gx-Dependent, Prev: TIC54X-Dependent, Up: Machine Dependencies - -9.43 TIC6X Dependent Features -============================= - -* Menu: - -* TIC6X Options:: Options -* TIC6X Syntax:: Syntax -* TIC6X Directives:: Directives - - -File: as.info, Node: TIC6X Options, Next: TIC6X Syntax, Up: TIC6X-Dependent - -9.43.1 TIC6X Options --------------------- - -`-march=ARCH' - Enable (only) instructions from architecture ARCH. By default, - all instructions are permitted. - - The following values of ARCH are accepted: `c62x', `c64x', - `c64x+', `c67x', `c67x+', `c674x'. - -`-mdsbt' -`-mno-dsbt' - The `-mdsbt' option causes the assembler to generate the - `Tag_ABI_DSBT' attribute with a value of 1, indicating that the - code is using DSBT addressing. The `-mno-dsbt' option, the - default, causes the tag to have a value of 0, indicating that the - code does not use DSBT addressing. The linker will emit a warning - if objects of different type (DSBT and non-DSBT) are linked - together. - -`-mpid=no' -`-mpid=near' -`-mpid=far' - The `-mpid=' option causes the assembler to generate the - `Tag_ABI_PID' attribute with a value indicating the form of data - addressing used by the code. `-mpid=no', the default, indicates - position-dependent data addressing, `-mpid=near' indicates - position-independent addressing with GOT accesses using near DP - addressing, and `-mpid=far' indicates position-independent - addressing with GOT accesses using far DP addressing. The linker - will emit a warning if objects built with different settings of - this option are linked together. - -`-mpic' -`-mno-pic' - The `-mpic' option causes the assembler to generate the - `Tag_ABI_PIC' attribute with a value of 1, indicating that the - code is using position-independent code addressing, The - `-mno-pic' option, the default, causes the tag to have a value of - 0, indicating position-dependent code addressing. The linker will - emit a warning if objects of different type (position-dependent and - position-independent) are linked together. - -`-mbig-endian' -`-mlittle-endian' - Generate code for the specified endianness. The default is - little-endian. - - - -File: as.info, Node: TIC6X Syntax, Next: TIC6X Directives, Prev: TIC6X Options, Up: TIC6X-Dependent - -9.43.2 TIC6X Syntax -------------------- - -The presence of a `;' on a line indicates the start of a comment that -extends to the end of the current line. If a `#' or `*' appears as the -first character of a line, the whole line is treated as a comment. -Note that if a line starts with a `#' character then it can also be a -logical line number directive (*note Comments::) or a preprocessor -control command (*note Preprocessing::). - - The `@' character can be used instead of a newline to separate -statements. - - Instruction, register and functional unit names are case-insensitive. -`as' requires fully-specified functional unit names, such as `.S1', -`.L1X' or `.D1T2', on all instructions using a functional unit. - - For some instructions, there may be syntactic ambiguity between -register or functional unit names and the names of labels or other -symbols. To avoid this, enclose the ambiguous symbol name in -parentheses; register and functional unit names may not be enclosed in -parentheses. - - -File: as.info, Node: TIC6X Directives, Prev: TIC6X Syntax, Up: TIC6X-Dependent - -9.43.3 TIC6X Directives ------------------------ - -Directives controlling the set of instructions accepted by the -assembler have effect for instructions between the directive and any -subsequent directive overriding it. - -`.arch ARCH' - This has the same effect as `-march=ARCH'. - -`.cantunwind' - Prevents unwinding through the current function. No personality - routine or exception table data is required or permitted. - - If this is not specified then frame unwinding information will be - constructed from CFI directives. *note CFI directives::. - -`.c6xabi_attribute TAG, VALUE' - Set the C6000 EABI build attribute TAG to VALUE. - - The TAG is either an attribute number or one of `Tag_ISA', - `Tag_ABI_wchar_t', `Tag_ABI_stack_align_needed', - `Tag_ABI_stack_align_preserved', `Tag_ABI_DSBT', `Tag_ABI_PID', - `Tag_ABI_PIC', `TAG_ABI_array_object_alignment', - `TAG_ABI_array_object_align_expected', `Tag_ABI_compatibility' and - `Tag_ABI_conformance'. The VALUE is either a `number', - `"string"', or `number, "string"' depending on the tag. - -`.ehtype SYMBOL' - Output an exception type table reference to SYMBOL. - -`.endp' - Marks the end of and exception table or function. If preceeded by - a `.handlerdata' directive then this also switched back to the - previous text section. - -`.handlerdata' - Marks the end of the current function, and the start of the - exception table entry for that function. Anything between this - directive and the `.endp' directive will be added to the exception - table entry. - - Must be preceded by a CFI block containing a `.cfi_lsda' directive. - -`.nocmp' - Disallow use of C64x+ compact instructions in the current text - section. - -`.personalityindex INDEX' - Sets the personality routine for the current function to the ABI - specified compact routine number INDEX - -`.personality NAME' - Sets the personality routine for the current function to NAME. - -`.scomm SYMBOL, SIZE, ALIGN' - Like `.comm', creating a common symbol SYMBOL with size SIZE and - alignment ALIGN, but unlike when using `.comm', this symbol will - be placed into the small BSS section by the linker. - - - -File: as.info, Node: TILE-Gx-Dependent, Next: TILEPro-Dependent, Prev: TIC6X-Dependent, Up: Machine Dependencies - -9.44 TILE-Gx Dependent Features -=============================== - -* Menu: - -* TILE-Gx Options:: TILE-Gx Options -* TILE-Gx Syntax:: TILE-Gx Syntax -* TILE-Gx Directives:: TILE-Gx Directives - - -File: as.info, Node: TILE-Gx Options, Next: TILE-Gx Syntax, Up: TILE-Gx-Dependent - -9.44.1 Options --------------- - -The following table lists all available TILE-Gx specific options: - -`-m32 | -m64' - Select the word size, either 32 bits or 64 bits. - -`-EB | -EL' - Select the endianness, either big-endian (-EB) or little-endian - (-EL). - - - -File: as.info, Node: TILE-Gx Syntax, Next: TILE-Gx Directives, Prev: TILE-Gx Options, Up: TILE-Gx-Dependent - -9.44.2 Syntax -------------- - -Block comments are delimited by `/*' and `*/'. End of line comments -may be introduced by `#'. - - Instructions consist of a leading opcode or macro name followed by -whitespace and an optional comma-separated list of operands: - - OPCODE [OPERAND, ...] - - Instructions must be separated by a newline or semicolon. - - There are two ways to write code: either write naked instructions, -which the assembler is free to combine into VLIW bundles, or specify -the VLIW bundles explicitly. - - Bundles are specified using curly braces: - - { ADD r3,r4,r5 ; ADD r7,r8,r9 ; LW r10,r11 } - - A bundle can span multiple lines. If you want to put multiple -instructions on a line, whether in a bundle or not, you need to -separate them with semicolons as in this example. - - A bundle may contain one or more instructions, up to the limit -specified by the ISA (currently three). If fewer instructions are -specified than the hardware supports in a bundle, the assembler inserts -`fnop' instructions automatically. - - The assembler will prefer to preserve the ordering of instructions -within the bundle, putting the first instruction in a lower-numbered -pipeline than the next one, etc. This fact, combined with the optional -use of explicit `fnop' or `nop' instructions, allows precise control -over which pipeline executes each instruction. - - If the instructions cannot be bundled in the listed order, the -assembler will automatically try to find a valid pipeline assignment. -If there is no way to bundle the instructions together, the assembler -reports an error. - - The assembler does not yet auto-bundle (automatically combine -multiple instructions into one bundle), but it reserves the right to do -so in the future. If you want to force an instruction to run by -itself, put it in a bundle explicitly with curly braces and use `nop' -instructions (not `fnop') to fill the remaining pipeline slots in that -bundle. - -* Menu: - -* TILE-Gx Opcodes:: Opcode Naming Conventions. -* TILE-Gx Registers:: Register Naming. -* TILE-Gx Modifiers:: Symbolic Operand Modifiers. - - -File: as.info, Node: TILE-Gx Opcodes, Next: TILE-Gx Registers, Up: TILE-Gx Syntax - -9.44.2.1 Opcode Names -..................... - -For a complete list of opcodes and descriptions of their semantics, see -`TILE-Gx Instruction Set Architecture', available upon request at -www.tilera.com. - - -File: as.info, Node: TILE-Gx Registers, Next: TILE-Gx Modifiers, Prev: TILE-Gx Opcodes, Up: TILE-Gx Syntax - -9.44.2.2 Register Names -....................... - -General-purpose registers are represented by predefined symbols of the -form `rN', where N represents a number between `0' and `63'. However, -the following registers have canonical names that must be used instead: - -`r54' - sp - -`r55' - lr - -`r56' - sn - -`r57' - idn0 - -`r58' - idn1 - -`r59' - udn0 - -`r60' - udn1 - -`r61' - udn2 - -`r62' - udn3 - -`r63' - zero - - - The assembler will emit a warning if a numeric name is used instead -of the non-numeric name. The `.no_require_canonical_reg_names' -assembler pseudo-op turns off this warning. -`.require_canonical_reg_names' turns it back on. - - -File: as.info, Node: TILE-Gx Modifiers, Prev: TILE-Gx Registers, Up: TILE-Gx Syntax - -9.44.2.3 Symbolic Operand Modifiers -................................... - -The assembler supports several modifiers when using symbol addresses in -TILE-Gx instruction operands. The general syntax is the following: - - modifier(symbol) - - The following modifiers are supported: - -`hw0' - This modifier is used to load bits 0-15 of the symbol's address. - -`hw1' - This modifier is used to load bits 16-31 of the symbol's address. - -`hw2' - This modifier is used to load bits 32-47 of the symbol's address. - -`hw3' - This modifier is used to load bits 48-63 of the symbol's address. - -`hw0_last' - This modifier yields the same value as `hw0', but it also checks - that the value does not overflow. - -`hw1_last' - This modifier yields the same value as `hw1', but it also checks - that the value does not overflow. - -`hw2_last' - This modifier yields the same value as `hw2', but it also checks - that the value does not overflow. - - A 48-bit symbolic value is constructed by using the following - idiom: - - moveli r0, hw2_last(sym) - shl16insli r0, r0, hw1(sym) - shl16insli r0, r0, hw0(sym) - -`hw0_got' - This modifier is used to load bits 0-15 of the symbol's offset in - the GOT entry corresponding to the symbol. - -`hw0_last_got' - This modifier yields the same value as `hw0_got', but it also - checks that the value does not overflow. - -`hw1_last_got' - This modifier is used to load bits 16-31 of the symbol's offset in - the GOT entry corresponding to the symbol, and it also checks that - the value does not overflow. - -`plt' - This modifier is used for function symbols. It causes a - _procedure linkage table_, an array of code stubs, to be created - at the time the shared object is created or linked against, - together with a global offset table entry. The value is a - pc-relative offset to the corresponding stub code in the procedure - linkage table. This arrangement causes the run-time symbol - resolver to be called to look up and set the value of the symbol - the first time the function is called (at latest; depending - environment variables). It is only safe to leave the symbol - unresolved this way if all references are function calls. - -`hw0_plt' - This modifier is used to load bits 0-15 of the pc-relative address - of a plt entry. - -`hw1_plt' - This modifier is used to load bits 16-31 of the pc-relative - address of a plt entry. - -`hw1_last_plt' - This modifier yields the same value as `hw1_plt', but it also - checks that the value does not overflow. - -`hw2_last_plt' - This modifier is used to load bits 32-47 of the pc-relative - address of a plt entry, and it also checks that the value does not - overflow. - -`hw0_tls_gd' - This modifier is used to load bits 0-15 of the offset of the GOT - entry of the symbol's TLS descriptor, to be used for - general-dynamic TLS accesses. - -`hw0_last_tls_gd' - This modifier yields the same value as `hw0_tls_gd', but it also - checks that the value does not overflow. - -`hw1_last_tls_gd' - This modifier is used to load bits 16-31 of the offset of the GOT - entry of the symbol's TLS descriptor, to be used for - general-dynamic TLS accesses. It also checks that the value does - not overflow. - -`hw0_tls_ie' - This modifier is used to load bits 0-15 of the offset of the GOT - entry containing the offset of the symbol's address from the TCB, - to be used for initial-exec TLS accesses. - -`hw0_last_tls_ie' - This modifier yields the same value as `hw0_tls_ie', but it also - checks that the value does not overflow. - -`hw1_last_tls_ie' - This modifier is used to load bits 16-31 of the offset of the GOT - entry containing the offset of the symbol's address from the TCB, - to be used for initial-exec TLS accesses. It also checks that the - value does not overflow. - -`hw0_tls_le' - This modifier is used to load bits 0-15 of the offset of the - symbol's address from the TCB, to be used for local-exec TLS - accesses. - -`hw0_last_tls_le' - This modifier yields the same value as `hw0_tls_le', but it also - checks that the value does not overflow. - -`hw1_last_tls_le' - This modifier is used to load bits 16-31 of the offset of the - symbol's address from the TCB, to be used for local-exec TLS - accesses. It also checks that the value does not overflow. - -`tls_gd_call' - This modifier is used to tag an instrution as the "call" part of a - calling sequence for a TLS GD reference of its operand. - -`tls_gd_add' - This modifier is used to tag an instruction as the "add" part of a - calling sequence for a TLS GD reference of its operand. - -`tls_ie_load' - This modifier is used to tag an instruction as the "load" part of a - calling sequence for a TLS IE reference of its operand. - - - -File: as.info, Node: TILE-Gx Directives, Prev: TILE-Gx Syntax, Up: TILE-Gx-Dependent - -9.44.3 TILE-Gx Directives -------------------------- - -`.align EXPRESSION [, EXPRESSION]' - This is the generic .ALIGN directive. The first argument is the - requested alignment in bytes. - -`.allow_suspicious_bundles' - Turns on error checking for combinations of instructions in a - bundle that probably indicate a programming error. This is on by - default. - -`.no_allow_suspicious_bundles' - Turns off error checking for combinations of instructions in a - bundle that probably indicate a programming error. - -`.require_canonical_reg_names' - Require that canonical register names be used, and emit a warning - if the numeric names are used. This is on by default. - -`.no_require_canonical_reg_names' - Permit the use of numeric names for registers that have canonical - names. - - - -File: as.info, Node: TILEPro-Dependent, Next: V850-Dependent, Prev: TILE-Gx-Dependent, Up: Machine Dependencies - -9.45 TILEPro Dependent Features -=============================== - -* Menu: - -* TILEPro Options:: TILEPro Options -* TILEPro Syntax:: TILEPro Syntax -* TILEPro Directives:: TILEPro Directives - - -File: as.info, Node: TILEPro Options, Next: TILEPro Syntax, Up: TILEPro-Dependent - -9.45.1 Options --------------- - -`as' has no machine-dependent command-line options for TILEPro. - - -File: as.info, Node: TILEPro Syntax, Next: TILEPro Directives, Prev: TILEPro Options, Up: TILEPro-Dependent - -9.45.2 Syntax -------------- - -Block comments are delimited by `/*' and `*/'. End of line comments -may be introduced by `#'. - - Instructions consist of a leading opcode or macro name followed by -whitespace and an optional comma-separated list of operands: - - OPCODE [OPERAND, ...] - - Instructions must be separated by a newline or semicolon. - - There are two ways to write code: either write naked instructions, -which the assembler is free to combine into VLIW bundles, or specify -the VLIW bundles explicitly. - - Bundles are specified using curly braces: - - { ADD r3,r4,r5 ; ADD r7,r8,r9 ; LW r10,r11 } - - A bundle can span multiple lines. If you want to put multiple -instructions on a line, whether in a bundle or not, you need to -separate them with semicolons as in this example. - - A bundle may contain one or more instructions, up to the limit -specified by the ISA (currently three). If fewer instructions are -specified than the hardware supports in a bundle, the assembler inserts -`fnop' instructions automatically. - - The assembler will prefer to preserve the ordering of instructions -within the bundle, putting the first instruction in a lower-numbered -pipeline than the next one, etc. This fact, combined with the optional -use of explicit `fnop' or `nop' instructions, allows precise control -over which pipeline executes each instruction. - - If the instructions cannot be bundled in the listed order, the -assembler will automatically try to find a valid pipeline assignment. -If there is no way to bundle the instructions together, the assembler -reports an error. - - The assembler does not yet auto-bundle (automatically combine -multiple instructions into one bundle), but it reserves the right to do -so in the future. If you want to force an instruction to run by -itself, put it in a bundle explicitly with curly braces and use `nop' -instructions (not `fnop') to fill the remaining pipeline slots in that -bundle. - -* Menu: - -* TILEPro Opcodes:: Opcode Naming Conventions. -* TILEPro Registers:: Register Naming. -* TILEPro Modifiers:: Symbolic Operand Modifiers. - - -File: as.info, Node: TILEPro Opcodes, Next: TILEPro Registers, Up: TILEPro Syntax - -9.45.2.1 Opcode Names -..................... - -For a complete list of opcodes and descriptions of their semantics, see -`TILE Processor User Architecture Manual', available upon request at -www.tilera.com. - - -File: as.info, Node: TILEPro Registers, Next: TILEPro Modifiers, Prev: TILEPro Opcodes, Up: TILEPro Syntax - -9.45.2.2 Register Names -....................... - -General-purpose registers are represented by predefined symbols of the -form `rN', where N represents a number between `0' and `63'. However, -the following registers have canonical names that must be used instead: - -`r54' - sp - -`r55' - lr - -`r56' - sn - -`r57' - idn0 - -`r58' - idn1 - -`r59' - udn0 - -`r60' - udn1 - -`r61' - udn2 - -`r62' - udn3 - -`r63' - zero - - - The assembler will emit a warning if a numeric name is used instead -of the canonical name. The `.no_require_canonical_reg_names' assembler -pseudo-op turns off this warning. `.require_canonical_reg_names' turns -it back on. - - -File: as.info, Node: TILEPro Modifiers, Prev: TILEPro Registers, Up: TILEPro Syntax - -9.45.2.3 Symbolic Operand Modifiers -................................... - -The assembler supports several modifiers when using symbol addresses in -TILEPro instruction operands. The general syntax is the following: - - modifier(symbol) - - The following modifiers are supported: - -`lo16' - This modifier is used to load the low 16 bits of the symbol's - address, sign-extended to a 32-bit value (sign-extension allows it - to be range-checked against signed 16 bit immediate operands - without complaint). - -`hi16' - This modifier is used to load the high 16 bits of the symbol's - address, also sign-extended to a 32-bit value. - -`ha16' - `ha16(N)' is identical to `hi16(N)', except if `lo16(N)' is - negative it adds one to the `hi16(N)' value. This way `lo16' and - `ha16' can be added to create any 32-bit value using `auli'. For - example, here is how you move an arbitrary 32-bit address into r3: - - moveli r3, lo16(sym) - auli r3, r3, ha16(sym) - -`got' - This modifier is used to load the offset of the GOT entry - corresponding to the symbol. - -`got_lo16' - This modifier is used to load the sign-extended low 16 bits of the - offset of the GOT entry corresponding to the symbol. - -`got_hi16' - This modifier is used to load the sign-extended high 16 bits of the - offset of the GOT entry corresponding to the symbol. - -`got_ha16' - This modifier is like `got_hi16', but it adds one if `got_lo16' of - the input value is negative. - -`plt' - This modifier is used for function symbols. It causes a - _procedure linkage table_, an array of code stubs, to be created - at the time the shared object is created or linked against, - together with a global offset table entry. The value is a - pc-relative offset to the corresponding stub code in the procedure - linkage table. This arrangement causes the run-time symbol - resolver to be called to look up and set the value of the symbol - the first time the function is called (at latest; depending - environment variables). It is only safe to leave the symbol - unresolved this way if all references are function calls. - -`tls_gd' - This modifier is used to load the offset of the GOT entry of the - symbol's TLS descriptor, to be used for general-dynamic TLS - accesses. - -`tls_gd_lo16' - This modifier is used to load the sign-extended low 16 bits of the - offset of the GOT entry of the symbol's TLS descriptor, to be used - for general dynamic TLS accesses. - -`tls_gd_hi16' - This modifier is used to load the sign-extended high 16 bits of the - offset of the GOT entry of the symbol's TLS descriptor, to be used - for general dynamic TLS accesses. - -`tls_gd_ha16' - This modifier is like `tls_gd_hi16', but it adds one to the value - if `tls_gd_lo16' of the input value is negative. - -`tls_ie' - This modifier is used to load the offset of the GOT entry - containing the offset of the symbol's address from the TCB, to be - used for initial-exec TLS accesses. - -`tls_ie_lo16' - This modifier is used to load the low 16 bits of the offset of the - GOT entry containing the offset of the symbol's address from the - TCB, to be used for initial-exec TLS accesses. - -`tls_ie_hi16' - This modifier is used to load the high 16 bits of the offset of the - GOT entry containing the offset of the symbol's address from the - TCB, to be used for initial-exec TLS accesses. - -`tls_ie_ha16' - This modifier is like `tls_ie_hi16', but it adds one to the value - if `tls_ie_lo16' of the input value is negative. - -`tls_le' - This modifier is used to load the offset of the symbol's address - from the TCB, to be used for local-exec TLS accesses. - -`tls_le_lo16' - This modifier is used to load the low 16 bits of the offset of the - symbol's address from the TCB, to be used for local-exec TLS - accesses. - -`tls_le_hi16' - This modifier is used to load the high 16 bits of the offset of the - symbol's address from the TCB, to be used for local-exec TLS - accesses. - -`tls_le_ha16' - This modifier is like `tls_le_hi16', but it adds one to the value - if `tls_le_lo16' of the input value is negative. - -`tls_gd_call' - This modifier is used to tag an instrution as the "call" part of a - calling sequence for a TLS GD reference of its operand. - -`tls_gd_add' - This modifier is used to tag an instruction as the "add" part of a - calling sequence for a TLS GD reference of its operand. - -`tls_ie_load' - This modifier is used to tag an instruction as the "load" part of a - calling sequence for a TLS IE reference of its operand. - - - -File: as.info, Node: TILEPro Directives, Prev: TILEPro Syntax, Up: TILEPro-Dependent - -9.45.3 TILEPro Directives -------------------------- - -`.align EXPRESSION [, EXPRESSION]' - This is the generic .ALIGN directive. The first argument is the - requested alignment in bytes. - -`.allow_suspicious_bundles' - Turns on error checking for combinations of instructions in a - bundle that probably indicate a programming error. This is on by - default. - -`.no_allow_suspicious_bundles' - Turns off error checking for combinations of instructions in a - bundle that probably indicate a programming error. - -`.require_canonical_reg_names' - Require that canonical register names be used, and emit a warning - if the numeric names are used. This is on by default. - -`.no_require_canonical_reg_names' - Permit the use of numeric names for registers that have canonical - names. - - - -File: as.info, Node: Z80-Dependent, Next: Z8000-Dependent, Prev: Xtensa-Dependent, Up: Machine Dependencies - -9.46 Z80 Dependent Features -=========================== - -* Menu: - -* Z80 Options:: Options -* Z80 Syntax:: Syntax -* Z80 Floating Point:: Floating Point -* Z80 Directives:: Z80 Machine Directives -* Z80 Opcodes:: Opcodes - - -File: as.info, Node: Z80 Options, Next: Z80 Syntax, Up: Z80-Dependent - -9.46.1 Options --------------- - -The Zilog Z80 and Ascii R800 version of `as' have a few machine -dependent options. -`-z80' - Produce code for the Z80 processor. There are additional options to - request warnings and error messages for undocumented instructions. - -`-ignore-undocumented-instructions' -`-Wnud' - Silently assemble undocumented Z80-instructions that have been - adopted as documented R800-instructions. - -`-ignore-unportable-instructions' -`-Wnup' - Silently assemble all undocumented Z80-instructions. - -`-warn-undocumented-instructions' -`-Wud' - Issue warnings for undocumented Z80-instructions that work on - R800, do not assemble other undocumented instructions without - warning. - -`-warn-unportable-instructions' -`-Wup' - Issue warnings for other undocumented Z80-instructions, do not - treat any undocumented instructions as errors. - -`-forbid-undocumented-instructions' -`-Fud' - Treat all undocumented z80-instructions as errors. - -`-forbid-unportable-instructions' -`-Fup' - Treat undocumented z80-instructions that do not work on R800 as - errors. - -`-r800' - Produce code for the R800 processor. The assembler does not support - undocumented instructions for the R800. In line with common - practice, `as' uses Z80 instruction names for the R800 processor, - as far as they exist. - - -File: as.info, Node: Z80 Syntax, Next: Z80 Floating Point, Prev: Z80 Options, Up: Z80-Dependent - -9.46.2 Syntax -------------- - -The assembler syntax closely follows the 'Z80 family CPU User Manual' by -Zilog. In expressions a single `=' may be used as "is equal to" -comparison operator. - - Suffices can be used to indicate the radix of integer constants; `H' -or `h' for hexadecimal, `D' or `d' for decimal, `Q', `O', `q' or `o' -for octal, and `B' for binary. - - The suffix `b' denotes a backreference to local label. - -* Menu: - -* Z80-Chars:: Special Characters -* Z80-Regs:: Register Names -* Z80-Case:: Case Sensitivity - - -File: as.info, Node: Z80-Chars, Next: Z80-Regs, Up: Z80 Syntax - -9.46.2.1 Special Characters -........................... - -The semicolon `;' is the line comment character; - - If a `#' appears as the first character of a line then the whole -line is treated as a comment, but in this case the line could also be a -logical line number directive (*note Comments::) or a preprocessor -control command (*note Preprocessing::). - - The Z80 assembler does not support a line separator character. - - The dollar sign `$' can be used as a prefix for hexadecimal numbers -and as a symbol denoting the current location counter. - - A backslash `\' is an ordinary character for the Z80 assembler. - - The single quote `'' must be followed by a closing quote. If there -is one character in between, it is a character constant, otherwise it is -a string constant. - - -File: as.info, Node: Z80-Regs, Next: Z80-Case, Prev: Z80-Chars, Up: Z80 Syntax - -9.46.2.2 Register Names -....................... - -The registers are referred to with the letters assigned to them by -Zilog. In addition `as' recognizes `ixl' and `ixh' as the least and -most significant octet in `ix', and similarly `iyl' and `iyh' as parts -of `iy'. - - -File: as.info, Node: Z80-Case, Prev: Z80-Regs, Up: Z80 Syntax - -9.46.2.3 Case Sensitivity -......................... - -Upper and lower case are equivalent in register names, opcodes, -condition codes and assembler directives. The case of letters is -significant in labels and symbol names. The case is also important to -distinguish the suffix `b' for a backward reference to a local label -from the suffix `B' for a number in binary notation. - - -File: as.info, Node: Z80 Floating Point, Next: Z80 Directives, Prev: Z80 Syntax, Up: Z80-Dependent - -9.46.3 Floating Point ---------------------- - -Floating-point numbers are not supported. - - -File: as.info, Node: Z80 Directives, Next: Z80 Opcodes, Prev: Z80 Floating Point, Up: Z80-Dependent - -9.46.4 Z80 Assembler Directives -------------------------------- - -`as' for the Z80 supports some additional directives for compatibility -with other assemblers. - - These are the additional directives in `as' for the Z80: - -`db EXPRESSION|STRING[,EXPRESSION|STRING...]' -`defb EXPRESSION|STRING[,EXPRESSION|STRING...]' - For each STRING the characters are copied to the object file, for - each other EXPRESSION the value is stored in one byte. A warning - is issued in case of an overflow. - -`dw EXPRESSION[,EXPRESSION...]' -`defw EXPRESSION[,EXPRESSION...]' - For each EXPRESSION the value is stored in two bytes, ignoring - overflow. - -`d24 EXPRESSION[,EXPRESSION...]' -`def24 EXPRESSION[,EXPRESSION...]' - For each EXPRESSION the value is stored in three bytes, ignoring - overflow. - -`d32 EXPRESSION[,EXPRESSION...]' -`def32 EXPRESSION[,EXPRESSION...]' - For each EXPRESSION the value is stored in four bytes, ignoring - overflow. - -`ds COUNT[, VALUE]' -`defs COUNT[, VALUE]' - Fill COUNT bytes in the object file with VALUE, if VALUE is - omitted it defaults to zero. - -`SYMBOL equ EXPRESSION' -`SYMBOL defl EXPRESSION' - These directives set the value of SYMBOL to EXPRESSION. If `equ' - is used, it is an error if SYMBOL is already defined. Symbols - defined with `equ' are not protected from redefinition. - -`set' - This is a normal instruction on Z80, and not an assembler - directive. - -`psect NAME' - A synonym for *Note Section::, no second argument should be given. - - - -File: as.info, Node: Z80 Opcodes, Prev: Z80 Directives, Up: Z80-Dependent - -9.46.5 Opcodes --------------- - -In line with common practice, Z80 mnemonics are used for both the Z80 -and the R800. - - In many instructions it is possible to use one of the half index -registers (`ixl',`ixh',`iyl',`iyh') in stead of an 8-bit general -purpose register. This yields instructions that are documented on the -R800 and undocumented on the Z80. Similarly `in f,(c)' is documented -on the R800 and undocumented on the Z80. - - The assembler also supports the following undocumented -Z80-instructions, that have not been adopted in the R800 instruction -set: -`out (c),0' - Sends zero to the port pointed to by register c. - -`sli M' - Equivalent to `M = (M<<1)+1', the operand M can be any operand - that is valid for `sla'. One can use `sll' as a synonym for `sli'. - -`OP (ix+D), R' - This is equivalent to - - ld R, (ix+D) - OPC R - ld (ix+D), R - - The operation `OPC' may be any of `res B,', `set B,', `rl', `rlc', - `rr', `rrc', `sla', `sli', `sra' and `srl', and the register `R' - may be any of `a', `b', `c', `d', `e', `h' and `l'. - -`OPC (iy+D), R' - As above, but with `iy' instead of `ix'. - - The web site at `http://www.z80.info' is a good starting place to -find more information on programming the Z80. - - -File: as.info, Node: Z8000-Dependent, Next: Vax-Dependent, Prev: Z80-Dependent, Up: Machine Dependencies - -9.47 Z8000 Dependent Features -============================= - - The Z8000 as supports both members of the Z8000 family: the -unsegmented Z8002, with 16 bit addresses, and the segmented Z8001 with -24 bit addresses. - - When the assembler is in unsegmented mode (specified with the -`unsegm' directive), an address takes up one word (16 bit) sized -register. When the assembler is in segmented mode (specified with the -`segm' directive), a 24-bit address takes up a long (32 bit) register. -*Note Assembler Directives for the Z8000: Z8000 Directives, for a list -of other Z8000 specific assembler directives. - -* Menu: - -* Z8000 Options:: Command-line options for the Z8000 -* Z8000 Syntax:: Assembler syntax for the Z8000 -* Z8000 Directives:: Special directives for the Z8000 -* Z8000 Opcodes:: Opcodes - - -File: as.info, Node: Z8000 Options, Next: Z8000 Syntax, Up: Z8000-Dependent - -9.47.1 Options --------------- - -`-z8001' - Generate segmented code by default. - -`-z8002' - Generate unsegmented code by default. - - -File: as.info, Node: Z8000 Syntax, Next: Z8000 Directives, Prev: Z8000 Options, Up: Z8000-Dependent - -9.47.2 Syntax -------------- - -* Menu: - -* Z8000-Chars:: Special Characters -* Z8000-Regs:: Register Names -* Z8000-Addressing:: Addressing Modes - - -File: as.info, Node: Z8000-Chars, Next: Z8000-Regs, Up: Z8000 Syntax - -9.47.2.1 Special Characters -........................... - -`!' is the line comment character. - - If a `#' appears as the first character of a line then the whole -line is treated as a comment, but in this case the line could also be a -logical line number directive (*note Comments::) or a preprocessor -control command (*note Preprocessing::). - - You can use `;' instead of a newline to separate statements. - - -File: as.info, Node: Z8000-Regs, Next: Z8000-Addressing, Prev: Z8000-Chars, Up: Z8000 Syntax - -9.47.2.2 Register Names -....................... - -The Z8000 has sixteen 16 bit registers, numbered 0 to 15. You can refer -to different sized groups of registers by register number, with the -prefix `r' for 16 bit registers, `rr' for 32 bit registers and `rq' for -64 bit registers. You can also refer to the contents of the first -eight (of the sixteen 16 bit registers) by bytes. They are named `rlN' -and `rhN'. - -_byte registers_ - rl0 rh0 rl1 rh1 rl2 rh2 rl3 rh3 - rl4 rh4 rl5 rh5 rl6 rh6 rl7 rh7 - -_word registers_ - r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 - -_long word registers_ - rr0 rr2 rr4 rr6 rr8 rr10 rr12 rr14 - -_quad word registers_ - rq0 rq4 rq8 rq12 - - -File: as.info, Node: Z8000-Addressing, Prev: Z8000-Regs, Up: Z8000 Syntax - -9.47.2.3 Addressing Modes -......................... - -as understands the following addressing modes for the Z8000: - -`rlN' -`rhN' -`rN' -`rrN' -`rqN' - Register direct: 8bit, 16bit, 32bit, and 64bit registers. - -`@rN' -`@rrN' - Indirect register: @rrN in segmented mode, @rN in unsegmented - mode. - -`ADDR' - Direct: the 16 bit or 24 bit address (depending on whether the - assembler is in segmented or unsegmented mode) of the operand is - in the instruction. - -`address(rN)' - Indexed: the 16 or 24 bit address is added to the 16 bit register - to produce the final address in memory of the operand. - -`rN(#IMM)' -`rrN(#IMM)' - Base Address: the 16 or 24 bit register is added to the 16 bit sign - extended immediate displacement to produce the final address in - memory of the operand. - -`rN(rM)' -`rrN(rM)' - Base Index: the 16 or 24 bit register rN or rrN is added to the - sign extended 16 bit index register rM to produce the final - address in memory of the operand. - -`#XX' - Immediate data XX. - - -File: as.info, Node: Z8000 Directives, Next: Z8000 Opcodes, Prev: Z8000 Syntax, Up: Z8000-Dependent - -9.47.3 Assembler Directives for the Z8000 ------------------------------------------ - -The Z8000 port of as includes additional assembler directives, for -compatibility with other Z8000 assemblers. These do not begin with `.' -(unlike the ordinary as directives). - -`segm' -`.z8001' - Generate code for the segmented Z8001. - -`unsegm' -`.z8002' - Generate code for the unsegmented Z8002. - -`name' - Synonym for `.file' - -`global' - Synonym for `.global' - -`wval' - Synonym for `.word' - -`lval' - Synonym for `.long' - -`bval' - Synonym for `.byte' - -`sval' - Assemble a string. `sval' expects one string literal, delimited by - single quotes. It assembles each byte of the string into - consecutive addresses. You can use the escape sequence `%XX' - (where XX represents a two-digit hexadecimal number) to represent - the character whose ASCII value is XX. Use this feature to - describe single quote and other characters that may not appear in - string literals as themselves. For example, the C statement - `char *a = "he said \"it's 50% off\"";' is represented in Z8000 - assembly language (shown with the assembler output in hex at the - left) as - - 68652073 sval 'he said %22it%27s 50%25 off%22%00' - 61696420 - 22697427 - 73203530 - 25206F66 - 662200 - -`rsect' - synonym for `.section' - -`block' - synonym for `.space' - -`even' - special case of `.align'; aligns output to even byte boundary. - - -File: as.info, Node: Z8000 Opcodes, Prev: Z8000 Directives, Up: Z8000-Dependent - -9.47.4 Opcodes --------------- - -For detailed information on the Z8000 machine instruction set, see -`Z8000 Technical Manual'. - - The following table summarizes the opcodes and their arguments: - - rs 16 bit source register - rd 16 bit destination register - rbs 8 bit source register - rbd 8 bit destination register - rrs 32 bit source register - rrd 32 bit destination register - rqs 64 bit source register - rqd 64 bit destination register - addr 16/24 bit address - imm immediate data - - adc rd,rs clrb addr cpsir @rd,@rs,rr,cc - adcb rbd,rbs clrb addr(rd) cpsirb @rd,@rs,rr,cc - add rd,@rs clrb rbd dab rbd - add rd,addr com @rd dbjnz rbd,disp7 - add rd,addr(rs) com addr dec @rd,imm4m1 - add rd,imm16 com addr(rd) dec addr(rd),imm4m1 - add rd,rs com rd dec addr,imm4m1 - addb rbd,@rs comb @rd dec rd,imm4m1 - addb rbd,addr comb addr decb @rd,imm4m1 - addb rbd,addr(rs) comb addr(rd) decb addr(rd),imm4m1 - addb rbd,imm8 comb rbd decb addr,imm4m1 - addb rbd,rbs comflg flags decb rbd,imm4m1 - addl rrd,@rs cp @rd,imm16 di i2 - addl rrd,addr cp addr(rd),imm16 div rrd,@rs - addl rrd,addr(rs) cp addr,imm16 div rrd,addr - addl rrd,imm32 cp rd,@rs div rrd,addr(rs) - addl rrd,rrs cp rd,addr div rrd,imm16 - and rd,@rs cp rd,addr(rs) div rrd,rs - and rd,addr cp rd,imm16 divl rqd,@rs - and rd,addr(rs) cp rd,rs divl rqd,addr - and rd,imm16 cpb @rd,imm8 divl rqd,addr(rs) - and rd,rs cpb addr(rd),imm8 divl rqd,imm32 - andb rbd,@rs cpb addr,imm8 divl rqd,rrs - andb rbd,addr cpb rbd,@rs djnz rd,disp7 - andb rbd,addr(rs) cpb rbd,addr ei i2 - andb rbd,imm8 cpb rbd,addr(rs) ex rd,@rs - andb rbd,rbs cpb rbd,imm8 ex rd,addr - bit @rd,imm4 cpb rbd,rbs ex rd,addr(rs) - bit addr(rd),imm4 cpd rd,@rs,rr,cc ex rd,rs - bit addr,imm4 cpdb rbd,@rs,rr,cc exb rbd,@rs - bit rd,imm4 cpdr rd,@rs,rr,cc exb rbd,addr - bit rd,rs cpdrb rbd,@rs,rr,cc exb rbd,addr(rs) - bitb @rd,imm4 cpi rd,@rs,rr,cc exb rbd,rbs - bitb addr(rd),imm4 cpib rbd,@rs,rr,cc ext0e imm8 - bitb addr,imm4 cpir rd,@rs,rr,cc ext0f imm8 - bitb rbd,imm4 cpirb rbd,@rs,rr,cc ext8e imm8 - bitb rbd,rs cpl rrd,@rs ext8f imm8 - bpt cpl rrd,addr exts rrd - call @rd cpl rrd,addr(rs) extsb rd - call addr cpl rrd,imm32 extsl rqd - call addr(rd) cpl rrd,rrs halt - calr disp12 cpsd @rd,@rs,rr,cc in rd,@rs - clr @rd cpsdb @rd,@rs,rr,cc in rd,imm16 - clr addr cpsdr @rd,@rs,rr,cc inb rbd,@rs - clr addr(rd) cpsdrb @rd,@rs,rr,cc inb rbd,imm16 - clr rd cpsi @rd,@rs,rr,cc inc @rd,imm4m1 - clrb @rd cpsib @rd,@rs,rr,cc inc addr(rd),imm4m1 - inc addr,imm4m1 ldb rbd,rs(rx) mult rrd,addr(rs) - inc rd,imm4m1 ldb rd(imm16),rbs mult rrd,imm16 - incb @rd,imm4m1 ldb rd(rx),rbs mult rrd,rs - incb addr(rd),imm4m1 ldctl ctrl,rs multl rqd,@rs - incb addr,imm4m1 ldctl rd,ctrl multl rqd,addr - incb rbd,imm4m1 ldd @rs,@rd,rr multl rqd,addr(rs) - ind @rd,@rs,ra lddb @rs,@rd,rr multl rqd,imm32 - indb @rd,@rs,rba lddr @rs,@rd,rr multl rqd,rrs - inib @rd,@rs,ra lddrb @rs,@rd,rr neg @rd - inibr @rd,@rs,ra ldi @rd,@rs,rr neg addr - iret ldib @rd,@rs,rr neg addr(rd) - jp cc,@rd ldir @rd,@rs,rr neg rd - jp cc,addr ldirb @rd,@rs,rr negb @rd - jp cc,addr(rd) ldk rd,imm4 negb addr - jr cc,disp8 ldl @rd,rrs negb addr(rd) - ld @rd,imm16 ldl addr(rd),rrs negb rbd - ld @rd,rs ldl addr,rrs nop - ld addr(rd),imm16 ldl rd(imm16),rrs or rd,@rs - ld addr(rd),rs ldl rd(rx),rrs or rd,addr - ld addr,imm16 ldl rrd,@rs or rd,addr(rs) - ld addr,rs ldl rrd,addr or rd,imm16 - ld rd(imm16),rs ldl rrd,addr(rs) or rd,rs - ld rd(rx),rs ldl rrd,imm32 orb rbd,@rs - ld rd,@rs ldl rrd,rrs orb rbd,addr - ld rd,addr ldl rrd,rs(imm16) orb rbd,addr(rs) - ld rd,addr(rs) ldl rrd,rs(rx) orb rbd,imm8 - ld rd,imm16 ldm @rd,rs,n orb rbd,rbs - ld rd,rs ldm addr(rd),rs,n out @rd,rs - ld rd,rs(imm16) ldm addr,rs,n out imm16,rs - ld rd,rs(rx) ldm rd,@rs,n outb @rd,rbs - lda rd,addr ldm rd,addr(rs),n outb imm16,rbs - lda rd,addr(rs) ldm rd,addr,n outd @rd,@rs,ra - lda rd,rs(imm16) ldps @rs outdb @rd,@rs,rba - lda rd,rs(rx) ldps addr outib @rd,@rs,ra - ldar rd,disp16 ldps addr(rs) outibr @rd,@rs,ra - ldb @rd,imm8 ldr disp16,rs pop @rd,@rs - ldb @rd,rbs ldr rd,disp16 pop addr(rd),@rs - ldb addr(rd),imm8 ldrb disp16,rbs pop addr,@rs - ldb addr(rd),rbs ldrb rbd,disp16 pop rd,@rs - ldb addr,imm8 ldrl disp16,rrs popl @rd,@rs - ldb addr,rbs ldrl rrd,disp16 popl addr(rd),@rs - ldb rbd,@rs mbit popl addr,@rs - ldb rbd,addr mreq rd popl rrd,@rs - ldb rbd,addr(rs) mres push @rd,@rs - ldb rbd,imm8 mset push @rd,addr - ldb rbd,rbs mult rrd,@rs push @rd,addr(rs) - ldb rbd,rs(imm16) mult rrd,addr push @rd,imm16 - push @rd,rs set addr,imm4 subl rrd,imm32 - pushl @rd,@rs set rd,imm4 subl rrd,rrs - pushl @rd,addr set rd,rs tcc cc,rd - pushl @rd,addr(rs) setb @rd,imm4 tccb cc,rbd - pushl @rd,rrs setb addr(rd),imm4 test @rd - res @rd,imm4 setb addr,imm4 test addr - res addr(rd),imm4 setb rbd,imm4 test addr(rd) - res addr,imm4 setb rbd,rs test rd - res rd,imm4 setflg imm4 testb @rd - res rd,rs sinb rbd,imm16 testb addr - resb @rd,imm4 sinb rd,imm16 testb addr(rd) - resb addr(rd),imm4 sind @rd,@rs,ra testb rbd - resb addr,imm4 sindb @rd,@rs,rba testl @rd - resb rbd,imm4 sinib @rd,@rs,ra testl addr - resb rbd,rs sinibr @rd,@rs,ra testl addr(rd) - resflg imm4 sla rd,imm8 testl rrd - ret cc slab rbd,imm8 trdb @rd,@rs,rba - rl rd,imm1or2 slal rrd,imm8 trdrb @rd,@rs,rba - rlb rbd,imm1or2 sll rd,imm8 trib @rd,@rs,rbr - rlc rd,imm1or2 sllb rbd,imm8 trirb @rd,@rs,rbr - rlcb rbd,imm1or2 slll rrd,imm8 trtdrb @ra,@rb,rbr - rldb rbb,rba sout imm16,rs trtib @ra,@rb,rr - rr rd,imm1or2 soutb imm16,rbs trtirb @ra,@rb,rbr - rrb rbd,imm1or2 soutd @rd,@rs,ra trtrb @ra,@rb,rbr - rrc rd,imm1or2 soutdb @rd,@rs,rba tset @rd - rrcb rbd,imm1or2 soutib @rd,@rs,ra tset addr - rrdb rbb,rba soutibr @rd,@rs,ra tset addr(rd) - rsvd36 sra rd,imm8 tset rd - rsvd38 srab rbd,imm8 tsetb @rd - rsvd78 sral rrd,imm8 tsetb addr - rsvd7e srl rd,imm8 tsetb addr(rd) - rsvd9d srlb rbd,imm8 tsetb rbd - rsvd9f srll rrd,imm8 xor rd,@rs - rsvdb9 sub rd,@rs xor rd,addr - rsvdbf sub rd,addr xor rd,addr(rs) - sbc rd,rs sub rd,addr(rs) xor rd,imm16 - sbcb rbd,rbs sub rd,imm16 xor rd,rs - sc imm8 sub rd,rs xorb rbd,@rs - sda rd,rs subb rbd,@rs xorb rbd,addr - sdab rbd,rs subb rbd,addr xorb rbd,addr(rs) - sdal rrd,rs subb rbd,addr(rs) xorb rbd,imm8 - sdl rd,rs subb rbd,imm8 xorb rbd,rbs - sdlb rbd,rs subb rbd,rbs xorb rbd,rbs - sdll rrd,rs subl rrd,@rs - set @rd,imm4 subl rrd,addr - set addr(rd),imm4 subl rrd,addr(rs) - - -File: as.info, Node: Vax-Dependent, Prev: Z8000-Dependent, Up: Machine Dependencies - -9.48 VAX Dependent Features -=========================== - -* Menu: - -* VAX-Opts:: VAX Command-Line Options -* VAX-float:: VAX Floating Point -* VAX-directives:: Vax Machine Directives -* VAX-opcodes:: VAX Opcodes -* VAX-branch:: VAX Branch Improvement -* VAX-operands:: VAX Operands -* VAX-no:: Not Supported on VAX -* VAX-Syntax:: VAX Syntax - - -File: as.info, Node: VAX-Opts, Next: VAX-float, Up: Vax-Dependent - -9.48.1 VAX Command-Line Options -------------------------------- - -The Vax version of `as' accepts any of the following options, gives a -warning message that the option was ignored and proceeds. These -options are for compatibility with scripts designed for other people's -assemblers. - -``-D' (Debug)' -``-S' (Symbol Table)' -``-T' (Token Trace)' - These are obsolete options used to debug old assemblers. - -``-d' (Displacement size for JUMPs)' - This option expects a number following the `-d'. Like options - that expect filenames, the number may immediately follow the `-d' - (old standard) or constitute the whole of the command line - argument that follows `-d' (GNU standard). - -``-V' (Virtualize Interpass Temporary File)' - Some other assemblers use a temporary file. This option commanded - them to keep the information in active memory rather than in a - disk file. `as' always does this, so this option is redundant. - -``-J' (JUMPify Longer Branches)' - Many 32-bit computers permit a variety of branch instructions to - do the same job. Some of these instructions are short (and fast) - but have a limited range; others are long (and slow) but can - branch anywhere in virtual memory. Often there are 3 flavors of - branch: short, medium and long. Some other assemblers would emit - short and medium branches, unless told by this option to emit - short and long branches. - -``-t' (Temporary File Directory)' - Some other assemblers may use a temporary file, and this option - takes a filename being the directory to site the temporary file. - Since `as' does not use a temporary disk file, this option makes - no difference. `-t' needs exactly one filename. - - The Vax version of the assembler accepts additional options when -compiled for VMS: - -`-h N' - External symbol or section (used for global variables) names are - not case sensitive on VAX/VMS and always mapped to upper case. - This is contrary to the C language definition which explicitly - distinguishes upper and lower case. To implement a standard - conforming C compiler, names must be changed (mapped) to preserve - the case information. The default mapping is to convert all lower - case characters to uppercase and adding an underscore followed by - a 6 digit hex value, representing a 24 digit binary value. The - one digits in the binary value represent which characters are - uppercase in the original symbol name. - - The `-h N' option determines how we map names. This takes several - values. No `-h' switch at all allows case hacking as described - above. A value of zero (`-h0') implies names should be upper - case, and inhibits the case hack. A value of 2 (`-h2') implies - names should be all lower case, with no case hack. A value of 3 - (`-h3') implies that case should be preserved. The value 1 is - unused. The `-H' option directs `as' to display every mapped - symbol during assembly. - - Symbols whose names include a dollar sign `$' are exceptions to the - general name mapping. These symbols are normally only used to - reference VMS library names. Such symbols are always mapped to - upper case. - -`-+' - The `-+' option causes `as' to truncate any symbol name larger - than 31 characters. The `-+' option also prevents some code - following the `_main' symbol normally added to make the object - file compatible with Vax-11 "C". - -`-1' - This option is ignored for backward compatibility with `as' - version 1.x. - -`-H' - The `-H' option causes `as' to print every symbol which was - changed by case mapping. - - -File: as.info, Node: VAX-float, Next: VAX-directives, Prev: VAX-Opts, Up: Vax-Dependent - -9.48.2 VAX Floating Point -------------------------- - -Conversion of flonums to floating point is correct, and compatible with -previous assemblers. Rounding is towards zero if the remainder is -exactly half the least significant bit. - - `D', `F', `G' and `H' floating point formats are understood. - - Immediate floating literals (_e.g._ `S`$6.9') are rendered -correctly. Again, rounding is towards zero in the boundary case. - - The `.float' directive produces `f' format numbers. The `.double' -directive produces `d' format numbers. - - -File: as.info, Node: VAX-directives, Next: VAX-opcodes, Prev: VAX-float, Up: Vax-Dependent - -9.48.3 Vax Machine Directives ------------------------------ - -The Vax version of the assembler supports four directives for -generating Vax floating point constants. They are described in the -table below. - -`.dfloat' - This expects zero or more flonums, separated by commas, and - assembles Vax `d' format 64-bit floating point constants. - -`.ffloat' - This expects zero or more flonums, separated by commas, and - assembles Vax `f' format 32-bit floating point constants. - -`.gfloat' - This expects zero or more flonums, separated by commas, and - assembles Vax `g' format 64-bit floating point constants. - -`.hfloat' - This expects zero or more flonums, separated by commas, and - assembles Vax `h' format 128-bit floating point constants. - - - -File: as.info, Node: VAX-opcodes, Next: VAX-branch, Prev: VAX-directives, Up: Vax-Dependent - -9.48.4 VAX Opcodes ------------------- - -All DEC mnemonics are supported. Beware that `case...' instructions -have exactly 3 operands. The dispatch table that follows the `case...' -instruction should be made with `.word' statements. This is compatible -with all unix assemblers we know of. - - -File: as.info, Node: VAX-branch, Next: VAX-operands, Prev: VAX-opcodes, Up: Vax-Dependent - -9.48.5 VAX Branch Improvement ------------------------------ - -Certain pseudo opcodes are permitted. They are for branch -instructions. They expand to the shortest branch instruction that -reaches the target. Generally these mnemonics are made by substituting -`j' for `b' at the start of a DEC mnemonic. This feature is included -both for compatibility and to help compilers. If you do not need this -feature, avoid these opcodes. Here are the mnemonics, and the code -they can expand into. - -`jbsb' - `Jsb' is already an instruction mnemonic, so we chose `jbsb'. - (byte displacement) - `bsbb ...' - - (word displacement) - `bsbw ...' - - (long displacement) - `jsb ...' - -`jbr' -`jr' - Unconditional branch. - (byte displacement) - `brb ...' - - (word displacement) - `brw ...' - - (long displacement) - `jmp ...' - -`jCOND' - COND may be any one of the conditional branches `neq', `nequ', - `eql', `eqlu', `gtr', `geq', `lss', `gtru', `lequ', `vc', `vs', - `gequ', `cc', `lssu', `cs'. COND may also be one of the bit tests - `bs', `bc', `bss', `bcs', `bsc', `bcc', `bssi', `bcci', `lbs', - `lbc'. NOTCOND is the opposite condition to COND. - (byte displacement) - `bCOND ...' - - (word displacement) - `bNOTCOND foo ; brw ... ; foo:' - - (long displacement) - `bNOTCOND foo ; jmp ... ; foo:' - -`jacbX' - X may be one of `b d f g h l w'. - (word displacement) - `OPCODE ...' - - (long displacement) - OPCODE ..., foo ; - brb bar ; - foo: jmp ... ; - bar: - -`jaobYYY' - YYY may be one of `lss leq'. - -`jsobZZZ' - ZZZ may be one of `geq gtr'. - (byte displacement) - `OPCODE ...' - - (word displacement) - OPCODE ..., foo ; - brb bar ; - foo: brw DESTINATION ; - bar: - - (long displacement) - OPCODE ..., foo ; - brb bar ; - foo: jmp DESTINATION ; - bar: - -`aobleq' -`aoblss' -`sobgeq' -`sobgtr' - - (byte displacement) - `OPCODE ...' - - (word displacement) - OPCODE ..., foo ; - brb bar ; - foo: brw DESTINATION ; - bar: - - (long displacement) - OPCODE ..., foo ; - brb bar ; - foo: jmp DESTINATION ; - bar: - - -File: as.info, Node: VAX-operands, Next: VAX-no, Prev: VAX-branch, Up: Vax-Dependent - -9.48.6 VAX Operands -------------------- - -The immediate character is `$' for Unix compatibility, not `#' as DEC -writes it. - - The indirect character is `*' for Unix compatibility, not `@' as DEC -writes it. - - The displacement sizing character is ``' (an accent grave) for Unix -compatibility, not `^' as DEC writes it. The letter preceding ``' may -have either case. `G' is not understood, but all other letters (`b i l -s w') are understood. - - Register names understood are `r0 r1 r2 ... r15 ap fp sp pc'. Upper -and lower case letters are equivalent. - - For instance - tstb *w`$4(r5) - - Any expression is permitted in an operand. Operands are comma -separated. - - -File: as.info, Node: VAX-no, Next: VAX-Syntax, Prev: VAX-operands, Up: Vax-Dependent - -9.48.7 Not Supported on VAX ---------------------------- - -Vax bit fields can not be assembled with `as'. Someone can add the -required code if they really need it. - - -File: as.info, Node: VAX-Syntax, Prev: VAX-no, Up: Vax-Dependent - -9.48.8 VAX Syntax ------------------ - -* Menu: - -* VAX-Chars:: Special Characters - - -File: as.info, Node: VAX-Chars, Up: VAX-Syntax - -9.48.8.1 Special Characters -........................... - -The presence of a `#' appearing anywhere on a line indicates the start -of a comment that extends to the end of that line. - - If a `#' appears as the first character of a line then the whole -line is treated as a comment, but in this case the line can also be a -logical line number directive (*note Comments::) or a preprocessor -control command (*note Preprocessing::). - - The `;' character can be used to separate statements on the same -line. - - -File: as.info, Node: V850-Dependent, Next: XGATE-Dependent, Prev: TILEPro-Dependent, Up: Machine Dependencies - -9.49 v850 Dependent Features -============================ - -* Menu: - -* V850 Options:: Options -* V850 Syntax:: Syntax -* V850 Floating Point:: Floating Point -* V850 Directives:: V850 Machine Directives -* V850 Opcodes:: Opcodes - - -File: as.info, Node: V850 Options, Next: V850 Syntax, Up: V850-Dependent - -9.49.1 Options --------------- - -`as' supports the following additional command-line options for the -V850 processor family: - -`-wsigned_overflow' - Causes warnings to be produced when signed immediate values - overflow the space available for then within their opcodes. By - default this option is disabled as it is possible to receive - spurious warnings due to using exact bit patterns as immediate - constants. - -`-wunsigned_overflow' - Causes warnings to be produced when unsigned immediate values - overflow the space available for then within their opcodes. By - default this option is disabled as it is possible to receive - spurious warnings due to using exact bit patterns as immediate - constants. - -`-mv850' - Specifies that the assembled code should be marked as being - targeted at the V850 processor. This allows the linker to detect - attempts to link such code with code assembled for other - processors. - -`-mv850e' - Specifies that the assembled code should be marked as being - targeted at the V850E processor. This allows the linker to detect - attempts to link such code with code assembled for other - processors. - -`-mv850e1' - Specifies that the assembled code should be marked as being - targeted at the V850E1 processor. This allows the linker to - detect attempts to link such code with code assembled for other - processors. - -`-mv850any' - Specifies that the assembled code should be marked as being - targeted at the V850 processor but support instructions that are - specific to the extended variants of the process. This allows the - production of binaries that contain target specific code, but - which are also intended to be used in a generic fashion. For - example libgcc.a contains generic routines used by the code - produced by GCC for all versions of the v850 architecture, - together with support routines only used by the V850E architecture. - -`-mv850e2' - Specifies that the assembled code should be marked as being - targeted at the V850E2 processor. This allows the linker to - detect attempts to link such code with code assembled for other - processors. - -`-mv850e2v3' - Specifies that the assembled code should be marked as being - targeted at the V850E2V3 processor. This allows the linker to - detect attempts to link such code with code assembled for other - processors. - -`-mv850e2v4' - This is an alias for `-mv850e3v5'. - -`-mv850e3v5' - Specifies that the assembled code should be marked as being - targeted at the V850E3V5 processor. This allows the linker to - detect attempts to link such code with code assembled for other - processors. - -`-mrelax' - Enables relaxation. This allows the .longcall and .longjump pseudo - ops to be used in the assembler source code. These ops label - sections of code which are either a long function call or a long - branch. The assembler will then flag these sections of code and - the linker will attempt to relax them. - -`-mgcc-abi' - Marks the generated objecy file as supporting the old GCC ABI. - -`-mrh850-abi' - Marks the generated objecy file as supporting the RH850 ABI. This - is the default. - -`-m8byte-align' - Marks the generated objecy file as supporting a maximum 64-bits of - alignment for variables defined in the source code. - -`-m4byte-align' - Marks the generated objecy file as supporting a maximum 32-bits of - alignment for variables defined in the source code. This is the - default. - - - -File: as.info, Node: V850 Syntax, Next: V850 Floating Point, Prev: V850 Options, Up: V850-Dependent - -9.49.2 Syntax -------------- - -* Menu: - -* V850-Chars:: Special Characters -* V850-Regs:: Register Names - - -File: as.info, Node: V850-Chars, Next: V850-Regs, Up: V850 Syntax - -9.49.2.1 Special Characters -........................... - -`#' is the line comment character. If a `#' appears as the first -character of a line, the whole line is treated as a comment, but in -this case the line can also be a logical line number directive (*note -Comments::) or a preprocessor control command (*note Preprocessing::). - - Two dashes (`--') can also be used to start a line comment. - - The `;' character can be used to separate statements on the same -line. - - -File: as.info, Node: V850-Regs, Prev: V850-Chars, Up: V850 Syntax - -9.49.2.2 Register Names -....................... - -`as' supports the following names for registers: -`general register 0' - r0, zero - -`general register 1' - r1 - -`general register 2' - r2, hp - -`general register 3' - r3, sp - -`general register 4' - r4, gp - -`general register 5' - r5, tp - -`general register 6' - r6 - -`general register 7' - r7 - -`general register 8' - r8 - -`general register 9' - r9 - -`general register 10' - r10 - -`general register 11' - r11 - -`general register 12' - r12 - -`general register 13' - r13 - -`general register 14' - r14 - -`general register 15' - r15 - -`general register 16' - r16 - -`general register 17' - r17 - -`general register 18' - r18 - -`general register 19' - r19 - -`general register 20' - r20 - -`general register 21' - r21 - -`general register 22' - r22 - -`general register 23' - r23 - -`general register 24' - r24 - -`general register 25' - r25 - -`general register 26' - r26 - -`general register 27' - r27 - -`general register 28' - r28 - -`general register 29' - r29 - -`general register 30' - r30, ep - -`general register 31' - r31, lp - -`system register 0' - eipc - -`system register 1' - eipsw - -`system register 2' - fepc - -`system register 3' - fepsw - -`system register 4' - ecr - -`system register 5' - psw - -`system register 16' - ctpc - -`system register 17' - ctpsw - -`system register 18' - dbpc - -`system register 19' - dbpsw - -`system register 20' - ctbp - - -File: as.info, Node: V850 Floating Point, Next: V850 Directives, Prev: V850 Syntax, Up: V850-Dependent - -9.49.3 Floating Point ---------------------- - -The V850 family uses IEEE floating-point numbers. - - -File: as.info, Node: V850 Directives, Next: V850 Opcodes, Prev: V850 Floating Point, Up: V850-Dependent - -9.49.4 V850 Machine Directives ------------------------------- - -`.offset <EXPRESSION>' - Moves the offset into the current section to the specified amount. - -`.section "name", <type>' - This is an extension to the standard .section directive. It sets - the current section to be <type> and creates an alias for this - section called "name". - -`.v850' - Specifies that the assembled code should be marked as being - targeted at the V850 processor. This allows the linker to detect - attempts to link such code with code assembled for other - processors. - -`.v850e' - Specifies that the assembled code should be marked as being - targeted at the V850E processor. This allows the linker to detect - attempts to link such code with code assembled for other - processors. - -`.v850e1' - Specifies that the assembled code should be marked as being - targeted at the V850E1 processor. This allows the linker to - detect attempts to link such code with code assembled for other - processors. - -`.v850e2' - Specifies that the assembled code should be marked as being - targeted at the V850E2 processor. This allows the linker to - detect attempts to link such code with code assembled for other - processors. - -`.v850e2v3' - Specifies that the assembled code should be marked as being - targeted at the V850E2V3 processor. This allows the linker to - detect attempts to link such code with code assembled for other - processors. - -`.v850e2v4' - Specifies that the assembled code should be marked as being - targeted at the V850E3V5 processor. This allows the linker to - detect attempts to link such code with code assembled for other - processors. - -`.v850e3v5' - Specifies that the assembled code should be marked as being - targeted at the V850E3V5 processor. This allows the linker to - detect attempts to link such code with code assembled for other - processors. - - - -File: as.info, Node: V850 Opcodes, Prev: V850 Directives, Up: V850-Dependent - -9.49.5 Opcodes --------------- - -`as' implements all the standard V850 opcodes. - - `as' also implements the following pseudo ops: - -`hi0()' - Computes the higher 16 bits of the given expression and stores it - into the immediate operand field of the given instruction. For - example: - - `mulhi hi0(here - there), r5, r6' - - computes the difference between the address of labels 'here' and - 'there', takes the upper 16 bits of this difference, shifts it - down 16 bits and then multiplies it by the lower 16 bits in - register 5, putting the result into register 6. - -`lo()' - Computes the lower 16 bits of the given expression and stores it - into the immediate operand field of the given instruction. For - example: - - `addi lo(here - there), r5, r6' - - computes the difference between the address of labels 'here' and - 'there', takes the lower 16 bits of this difference and adds it to - register 5, putting the result into register 6. - -`hi()' - Computes the higher 16 bits of the given expression and then adds - the value of the most significant bit of the lower 16 bits of the - expression and stores the result into the immediate operand field - of the given instruction. For example the following code can be - used to compute the address of the label 'here' and store it into - register 6: - - `movhi hi(here), r0, r6' `movea lo(here), r6, r6' - - The reason for this special behaviour is that movea performs a sign - extension on its immediate operand. So for example if the address - of 'here' was 0xFFFFFFFF then without the special behaviour of the - hi() pseudo-op the movhi instruction would put 0xFFFF0000 into r6, - then the movea instruction would takes its immediate operand, - 0xFFFF, sign extend it to 32 bits, 0xFFFFFFFF, and then add it - into r6 giving 0xFFFEFFFF which is wrong (the fifth nibble is E). - With the hi() pseudo op adding in the top bit of the lo() pseudo - op, the movhi instruction actually stores 0 into r6 (0xFFFF + 1 = - 0x0000), so that the movea instruction stores 0xFFFFFFFF into r6 - - the right value. - -`hilo()' - Computes the 32 bit value of the given expression and stores it - into the immediate operand field of the given instruction (which - must be a mov instruction). For example: - - `mov hilo(here), r6' - - computes the absolute address of label 'here' and puts the result - into register 6. - -`sdaoff()' - Computes the offset of the named variable from the start of the - Small Data Area (whoes address is held in register 4, the GP - register) and stores the result as a 16 bit signed value in the - immediate operand field of the given instruction. For example: - - `ld.w sdaoff(_a_variable)[gp],r6' - - loads the contents of the location pointed to by the label - '_a_variable' into register 6, provided that the label is located - somewhere within +/- 32K of the address held in the GP register. - [Note the linker assumes that the GP register contains a fixed - address set to the address of the label called '__gp'. This can - either be set up automatically by the linker, or specifically set - by using the `--defsym __gp=<value>' command line option]. - -`tdaoff()' - Computes the offset of the named variable from the start of the - Tiny Data Area (whoes address is held in register 30, the EP - register) and stores the result as a 4,5, 7 or 8 bit unsigned - value in the immediate operand field of the given instruction. - For example: - - `sld.w tdaoff(_a_variable)[ep],r6' - - loads the contents of the location pointed to by the label - '_a_variable' into register 6, provided that the label is located - somewhere within +256 bytes of the address held in the EP - register. [Note the linker assumes that the EP register contains - a fixed address set to the address of the label called '__ep'. - This can either be set up automatically by the linker, or - specifically set by using the `--defsym __ep=<value>' command line - option]. - -`zdaoff()' - Computes the offset of the named variable from address 0 and - stores the result as a 16 bit signed value in the immediate - operand field of the given instruction. For example: - - `movea zdaoff(_a_variable),zero,r6' - - puts the address of the label '_a_variable' into register 6, - assuming that the label is somewhere within the first 32K of - memory. (Strictly speaking it also possible to access the last - 32K of memory as well, as the offsets are signed). - -`ctoff()' - Computes the offset of the named variable from the start of the - Call Table Area (whoes address is helg in system register 20, the - CTBP register) and stores the result a 6 or 16 bit unsigned value - in the immediate field of then given instruction or piece of data. - For example: - - `callt ctoff(table_func1)' - - will put the call the function whoes address is held in the call - table at the location labeled 'table_func1'. - -`.longcall `name'' - Indicates that the following sequence of instructions is a long - call to function `name'. The linker will attempt to shorten this - call sequence if `name' is within a 22bit offset of the call. Only - valid if the `-mrelax' command line switch has been enabled. - -`.longjump `name'' - Indicates that the following sequence of instructions is a long - jump to label `name'. The linker will attempt to shorten this code - sequence if `name' is within a 22bit offset of the jump. Only - valid if the `-mrelax' command line switch has been enabled. - - - For information on the V850 instruction set, see `V850 Family -32-/16-Bit single-Chip Microcontroller Architecture Manual' from NEC. -Ltd. - - -File: as.info, Node: XGATE-Dependent, Next: XSTORMY16-Dependent, Prev: V850-Dependent, Up: Machine Dependencies - -9.50 XGATE Dependent Features -============================= - -* Menu: - -* XGATE-Opts:: XGATE Options -* XGATE-Syntax:: Syntax -* XGATE-Directives:: Assembler Directives -* XGATE-Float:: Floating Point -* XGATE-opcodes:: Opcodes - - -File: as.info, Node: XGATE-Opts, Next: XGATE-Syntax, Up: XGATE-Dependent - -9.50.1 XGATE Options --------------------- - -The Freescale XGATE version of `as' has a few machine dependent options. - -`-mshort' - This option controls the ABI and indicates to use a 16-bit integer - ABI. It has no effect on the assembled instructions. This is the - default. - -`-mlong' - This option controls the ABI and indicates to use a 32-bit integer - ABI. - -`-mshort-double' - This option controls the ABI and indicates to use a 32-bit float - ABI. This is the default. - -`-mlong-double' - This option controls the ABI and indicates to use a 64-bit float - ABI. - -`--print-insn-syntax' - You can use the `--print-insn-syntax' option to obtain the syntax - description of the instruction when an error is detected. - -`--print-opcodes' - The `--print-opcodes' option prints the list of all the - instructions with their syntax. Once the list is printed `as' - exits. - - - -File: as.info, Node: XGATE-Syntax, Next: XGATE-Directives, Prev: XGATE-Opts, Up: XGATE-Dependent - -9.50.2 Syntax -------------- - -In XGATE RISC syntax, the instruction name comes first and it may be -followed by up to three operands. Operands are separated by commas -(`,'). `as' will complain if too many operands are specified for a -given instruction. The same will happen if you specified too few -operands. - - nop - ldl #23 - CMP R1, R2 - - The presence of a `;' character or a `!' character anywhere on a -line indicates the start of a comment that extends to the end of that -line. - - A `*' or a `#' character at the start of a line also introduces a -line comment, but these characters do not work elsewhere on the line. -If the first character of the line is a `#' then as well as starting a -comment, the line could also be logical line number directive (*note -Comments::) or a preprocessor control command (*note Preprocessing::). - - The XGATE assembler does not currently support a line separator -character. - - The following addressing modes are understood for XGATE: -"Inherent" - `' - -"Immediate 3 Bit Wide" - `#NUMBER' - -"Immediate 4 Bit Wide" - `#NUMBER' - -"Immediate 8 Bit Wide" - `#NUMBER' - -"Monadic Addressing" - `REG' - -"Dyadic Addressing" - `REG, REG' - -"Triadic Addressing" - `REG, REG, REG' - -"Relative Addressing 9 Bit Wide" - `*SYMBOL' - -"Relative Addressing 10 Bit Wide" - `*SYMBOL' - -"Index Register plus Immediate Offset" - `REG, (REG, #NUMBER)' - -"Index Register plus Register Offset" - `REG, REG, REG' - -"Index Register plus Register Offset with Post-increment" - `REG, REG, REG+' - -"Index Register plus Register Offset with Pre-decrement" - `REG, REG, -REG' - - The register can be either `R0', `R1', `R2', `R3', `R4', `R5', - `R6' or `R7'. - - - Convience macro opcodes to deal with 16-bit values have been added. - -"Immediate 16 Bit Wide" - `#NUMBER', or `*SYMBOL' - - For example: - - ldw R1, #1024 - ldw R3, timer - ldw R1, (R1, #0) - COM R1 - stw R2, (R1, #0) - - -File: as.info, Node: XGATE-Directives, Next: XGATE-Float, Prev: XGATE-Syntax, Up: XGATE-Dependent - -9.50.3 Assembler Directives ---------------------------- - -The XGATE version of `as' have the following specific assembler -directives: - - -File: as.info, Node: XGATE-Float, Next: XGATE-opcodes, Prev: XGATE-Directives, Up: XGATE-Dependent - -9.50.4 Floating Point ---------------------- - -Packed decimal (P) format floating literals are not supported(yet). - - The floating point formats generated by directives are these. - -`.float' - `Single' precision floating point constants. - -`.double' - `Double' precision floating point constants. - -`.extend' -`.ldouble' - `Extended' precision (`long double') floating point constants. - - -File: as.info, Node: XGATE-opcodes, Prev: XGATE-Float, Up: XGATE-Dependent - -9.50.5 Opcodes --------------- - - -File: as.info, Node: XSTORMY16-Dependent, Next: Xtensa-Dependent, Prev: XGATE-Dependent, Up: Machine Dependencies - -9.51 XStormy16 Dependent Features -================================= - -* Menu: - -* XStormy16 Syntax:: Syntax -* XStormy16 Directives:: Machine Directives -* XStormy16 Opcodes:: Pseudo-Opcodes - - -File: as.info, Node: XStormy16 Syntax, Next: XStormy16 Directives, Up: XSTORMY16-Dependent - -9.51.1 Syntax -------------- - -* Menu: - -* XStormy16-Chars:: Special Characters - - -File: as.info, Node: XStormy16-Chars, Up: XStormy16 Syntax - -9.51.1.1 Special Characters -........................... - -`#' is the line comment character. If a `#' appears as the first -character of a line, the whole line is treated as a comment, but in -this case the line can also be a logical line number directive (*note -Comments::) or a preprocessor control command (*note Preprocessing::). - - A semicolon (`;') can be used to start a comment that extends from -wherever the character appears on the line up to the end of the line. - - The `|' character can be used to separate statements on the same -line. - - -File: as.info, Node: XStormy16 Directives, Next: XStormy16 Opcodes, Prev: XStormy16 Syntax, Up: XSTORMY16-Dependent - -9.51.2 XStormy16 Machine Directives ------------------------------------ - -`.16bit_pointers' - Like the `--16bit-pointers' command line option this directive - indicates that the assembly code makes use of 16-bit pointers. - -`.32bit_pointers' - Like the `--32bit-pointers' command line option this directive - indicates that the assembly code makes use of 32-bit pointers. - -`.no_pointers' - Like the `--no-pointers' command line option this directive - indicates that the assembly code does not makes use pointers. - - - -File: as.info, Node: XStormy16 Opcodes, Prev: XStormy16 Directives, Up: XSTORMY16-Dependent - -9.51.3 XStormy16 Pseudo-Opcodes -------------------------------- - -`as' implements all the standard XStormy16 opcodes. - - `as' also implements the following pseudo ops: - -`@lo()' - Computes the lower 16 bits of the given expression and stores it - into the immediate operand field of the given instruction. For - example: - - `add r6, @lo(here - there)' - - computes the difference between the address of labels 'here' and - 'there', takes the lower 16 bits of this difference and adds it to - register 6. - -`@hi()' - Computes the higher 16 bits of the given expression and stores it - into the immediate operand field of the given instruction. For - example: - - `addc r7, @hi(here - there)' - - computes the difference between the address of labels 'here' and - 'there', takes the upper 16 bits of this difference, shifts it - down 16 bits and then adds it, along with the carry bit, to the - value in register 7. - - - -File: as.info, Node: Xtensa-Dependent, Next: Z80-Dependent, Prev: XSTORMY16-Dependent, Up: Machine Dependencies - -9.52 Xtensa Dependent Features -============================== - - This chapter covers features of the GNU assembler that are specific -to the Xtensa architecture. For details about the Xtensa instruction -set, please consult the `Xtensa Instruction Set Architecture (ISA) -Reference Manual'. - -* Menu: - -* Xtensa Options:: Command-line Options. -* Xtensa Syntax:: Assembler Syntax for Xtensa Processors. -* Xtensa Optimizations:: Assembler Optimizations. -* Xtensa Relaxation:: Other Automatic Transformations. -* Xtensa Directives:: Directives for Xtensa Processors. - - -File: as.info, Node: Xtensa Options, Next: Xtensa Syntax, Up: Xtensa-Dependent - -9.52.1 Command Line Options ---------------------------- - -`--text-section-literals | --no-text-section-literals' - Control the treatment of literal pools. The default is - `--no-text-section-literals', which places literals in separate - sections in the output file. This allows the literal pool to be - placed in a data RAM/ROM. With `--text-section-literals', the - literals are interspersed in the text section in order to keep - them as close as possible to their references. This may be - necessary for large assembly files, where the literals would - otherwise be out of range of the `L32R' instructions in the text - section. These options only affect literals referenced via - PC-relative `L32R' instructions; literals for absolute mode `L32R' - instructions are handled separately. *Note literal: Literal - Directive. - -`--absolute-literals | --no-absolute-literals' - Indicate to the assembler whether `L32R' instructions use absolute - or PC-relative addressing. If the processor includes the absolute - addressing option, the default is to use absolute `L32R' - relocations. Otherwise, only the PC-relative `L32R' relocations - can be used. - -`--target-align | --no-target-align' - Enable or disable automatic alignment to reduce branch penalties - at some expense in code size. *Note Automatic Instruction - Alignment: Xtensa Automatic Alignment. This optimization is - enabled by default. Note that the assembler will always align - instructions like `LOOP' that have fixed alignment requirements. - -`--longcalls | --no-longcalls' - Enable or disable transformation of call instructions to allow - calls across a greater range of addresses. *Note Function Call - Relaxation: Xtensa Call Relaxation. This option should be used - when call targets can potentially be out of range. It may degrade - both code size and performance, but the linker can generally - optimize away the unnecessary overhead when a call ends up within - range. The default is `--no-longcalls'. - -`--transform | --no-transform' - Enable or disable all assembler transformations of Xtensa - instructions, including both relaxation and optimization. The - default is `--transform'; `--no-transform' should only be used in - the rare cases when the instructions must be exactly as specified - in the assembly source. Using `--no-transform' causes out of range - instruction operands to be errors. - -`--rename-section OLDNAME=NEWNAME' - Rename the OLDNAME section to NEWNAME. This option can be used - multiple times to rename multiple sections. - - -File: as.info, Node: Xtensa Syntax, Next: Xtensa Optimizations, Prev: Xtensa Options, Up: Xtensa-Dependent - -9.52.2 Assembler Syntax ------------------------ - -Block comments are delimited by `/*' and `*/'. End of line comments -may be introduced with either `#' or `//'. - - If a `#' appears as the first character of a line then the whole -line is treated as a comment, but in this case the line could also be a -logical line number directive (*note Comments::) or a preprocessor -control command (*note Preprocessing::). - - Instructions consist of a leading opcode or macro name followed by -whitespace and an optional comma-separated list of operands: - - OPCODE [OPERAND, ...] - - Instructions must be separated by a newline or semicolon (`;'). - - FLIX instructions, which bundle multiple opcodes together in a single -instruction, are specified by enclosing the bundled opcodes inside -braces: - - { - [FORMAT] - OPCODE0 [OPERANDS] - OPCODE1 [OPERANDS] - OPCODE2 [OPERANDS] - ... - } - - The opcodes in a FLIX instruction are listed in the same order as the -corresponding instruction slots in the TIE format declaration. -Directives and labels are not allowed inside the braces of a FLIX -instruction. A particular TIE format name can optionally be specified -immediately after the opening brace, but this is usually unnecessary. -The assembler will automatically search for a format that can encode the -specified opcodes, so the format name need only be specified in rare -cases where there is more than one applicable format and where it -matters which of those formats is used. A FLIX instruction can also be -specified on a single line by separating the opcodes with semicolons: - - { [FORMAT;] OPCODE0 [OPERANDS]; OPCODE1 [OPERANDS]; OPCODE2 [OPERANDS]; ... } - - If an opcode can only be encoded in a FLIX instruction but is not -specified as part of a FLIX bundle, the assembler will choose the -smallest format where the opcode can be encoded and will fill unused -instruction slots with no-ops. - -* Menu: - -* Xtensa Opcodes:: Opcode Naming Conventions. -* Xtensa Registers:: Register Naming. - - -File: as.info, Node: Xtensa Opcodes, Next: Xtensa Registers, Up: Xtensa Syntax - -9.52.2.1 Opcode Names -..................... - -See the `Xtensa Instruction Set Architecture (ISA) Reference Manual' -for a complete list of opcodes and descriptions of their semantics. - - If an opcode name is prefixed with an underscore character (`_'), -`as' will not transform that instruction in any way. The underscore -prefix disables both optimization (*note Xtensa Optimizations: Xtensa -Optimizations.) and relaxation (*note Xtensa Relaxation: Xtensa -Relaxation.) for that particular instruction. Only use the underscore -prefix when it is essential to select the exact opcode produced by the -assembler. Using this feature unnecessarily makes the code less -efficient by disabling assembler optimization and less flexible by -disabling relaxation. - - Note that this special handling of underscore prefixes only applies -to Xtensa opcodes, not to either built-in macros or user-defined macros. -When an underscore prefix is used with a macro (e.g., `_MOV'), it -refers to a different macro. The assembler generally provides built-in -macros both with and without the underscore prefix, where the underscore -versions behave as if the underscore carries through to the instructions -in the macros. For example, `_MOV' may expand to `_MOV.N'. - - The underscore prefix only applies to individual instructions, not to -series of instructions. For example, if a series of instructions have -underscore prefixes, the assembler will not transform the individual -instructions, but it may insert other instructions between them (e.g., -to align a `LOOP' instruction). To prevent the assembler from -modifying a series of instructions as a whole, use the `no-transform' -directive. *Note transform: Transform Directive. - - -File: as.info, Node: Xtensa Registers, Prev: Xtensa Opcodes, Up: Xtensa Syntax - -9.52.2.2 Register Names -....................... - -The assembly syntax for a register file entry is the "short" name for a -TIE register file followed by the index into that register file. For -example, the general-purpose `AR' register file has a short name of -`a', so these registers are named `a0'...`a15'. As a special feature, -`sp' is also supported as a synonym for `a1'. Additional registers may -be added by processor configuration options and by designer-defined TIE -extensions. An initial `$' character is optional in all register names. - - -File: as.info, Node: Xtensa Optimizations, Next: Xtensa Relaxation, Prev: Xtensa Syntax, Up: Xtensa-Dependent - -9.52.3 Xtensa Optimizations ---------------------------- - -The optimizations currently supported by `as' are generation of density -instructions where appropriate and automatic branch target alignment. - -* Menu: - -* Density Instructions:: Using Density Instructions. -* Xtensa Automatic Alignment:: Automatic Instruction Alignment. - - -File: as.info, Node: Density Instructions, Next: Xtensa Automatic Alignment, Up: Xtensa Optimizations - -9.52.3.1 Using Density Instructions -................................... - -The Xtensa instruction set has a code density option that provides -16-bit versions of some of the most commonly used opcodes. Use of these -opcodes can significantly reduce code size. When possible, the -assembler automatically translates instructions from the core Xtensa -instruction set into equivalent instructions from the Xtensa code -density option. This translation can be disabled by using underscore -prefixes (*note Opcode Names: Xtensa Opcodes.), by using the -`--no-transform' command-line option (*note Command Line Options: -Xtensa Options.), or by using the `no-transform' directive (*note -transform: Transform Directive.). - - It is a good idea _not_ to use the density instructions directly. -The assembler will automatically select dense instructions where -possible. If you later need to use an Xtensa processor without the code -density option, the same assembly code will then work without -modification. - - -File: as.info, Node: Xtensa Automatic Alignment, Prev: Density Instructions, Up: Xtensa Optimizations - -9.52.3.2 Automatic Instruction Alignment -........................................ - -The Xtensa assembler will automatically align certain instructions, both -to optimize performance and to satisfy architectural requirements. - - As an optimization to improve performance, the assembler attempts to -align branch targets so they do not cross instruction fetch boundaries. -(Xtensa processors can be configured with either 32-bit or 64-bit -instruction fetch widths.) An instruction immediately following a call -is treated as a branch target in this context, because it will be the -target of a return from the call. This alignment has the potential to -reduce branch penalties at some expense in code size. This -optimization is enabled by default. You can disable it with the -`--no-target-align' command-line option (*note Command Line Options: -Xtensa Options.). - - The target alignment optimization is done without adding instructions -that could increase the execution time of the program. If there are -density instructions in the code preceding a target, the assembler can -change the target alignment by widening some of those instructions to -the equivalent 24-bit instructions. Extra bytes of padding can be -inserted immediately following unconditional jump and return -instructions. This approach is usually successful in aligning many, -but not all, branch targets. - - The `LOOP' family of instructions must be aligned such that the -first instruction in the loop body does not cross an instruction fetch -boundary (e.g., with a 32-bit fetch width, a `LOOP' instruction must be -on either a 1 or 2 mod 4 byte boundary). The assembler knows about -this restriction and inserts the minimal number of 2 or 3 byte no-op -instructions to satisfy it. When no-op instructions are added, any -label immediately preceding the original loop will be moved in order to -refer to the loop instruction, not the newly generated no-op -instruction. To preserve binary compatibility across processors with -different fetch widths, the assembler conservatively assumes a 32-bit -fetch width when aligning `LOOP' instructions (except if the first -instruction in the loop is a 64-bit instruction). - - Previous versions of the assembler automatically aligned `ENTRY' -instructions to 4-byte boundaries, but that alignment is now the -programmer's responsibility. - - -File: as.info, Node: Xtensa Relaxation, Next: Xtensa Directives, Prev: Xtensa Optimizations, Up: Xtensa-Dependent - -9.52.4 Xtensa Relaxation ------------------------- - -When an instruction operand is outside the range allowed for that -particular instruction field, `as' can transform the code to use a -functionally-equivalent instruction or sequence of instructions. This -process is known as "relaxation". This is typically done for branch -instructions because the distance of the branch targets is not known -until assembly-time. The Xtensa assembler offers branch relaxation and -also extends this concept to function calls, `MOVI' instructions and -other instructions with immediate fields. - -* Menu: - -* Xtensa Branch Relaxation:: Relaxation of Branches. -* Xtensa Call Relaxation:: Relaxation of Function Calls. -* Xtensa Immediate Relaxation:: Relaxation of other Immediate Fields. - - -File: as.info, Node: Xtensa Branch Relaxation, Next: Xtensa Call Relaxation, Up: Xtensa Relaxation - -9.52.4.1 Conditional Branch Relaxation -...................................... - -When the target of a branch is too far away from the branch itself, -i.e., when the offset from the branch to the target is too large to fit -in the immediate field of the branch instruction, it may be necessary to -replace the branch with a branch around a jump. For example, - - beqz a2, L - - may result in: - - bnez.n a2, M - j L - M: - - (The `BNEZ.N' instruction would be used in this example only if the -density option is available. Otherwise, `BNEZ' would be used.) - - This relaxation works well because the unconditional jump instruction -has a much larger offset range than the various conditional branches. -However, an error will occur if a branch target is beyond the range of a -jump instruction. `as' cannot relax unconditional jumps. Similarly, -an error will occur if the original input contains an unconditional -jump to a target that is out of range. - - Branch relaxation is enabled by default. It can be disabled by using -underscore prefixes (*note Opcode Names: Xtensa Opcodes.), the -`--no-transform' command-line option (*note Command Line Options: -Xtensa Options.), or the `no-transform' directive (*note transform: -Transform Directive.). - - -File: as.info, Node: Xtensa Call Relaxation, Next: Xtensa Immediate Relaxation, Prev: Xtensa Branch Relaxation, Up: Xtensa Relaxation - -9.52.4.2 Function Call Relaxation -................................. - -Function calls may require relaxation because the Xtensa immediate call -instructions (`CALL0', `CALL4', `CALL8' and `CALL12') provide a -PC-relative offset of only 512 Kbytes in either direction. For larger -programs, it may be necessary to use indirect calls (`CALLX0', -`CALLX4', `CALLX8' and `CALLX12') where the target address is specified -in a register. The Xtensa assembler can automatically relax immediate -call instructions into indirect call instructions. This relaxation is -done by loading the address of the called function into the callee's -return address register and then using a `CALLX' instruction. So, for -example: - - call8 func - - might be relaxed to: - - .literal .L1, func - l32r a8, .L1 - callx8 a8 - - Because the addresses of targets of function calls are not generally -known until link-time, the assembler must assume the worst and relax all -the calls to functions in other source files, not just those that really -will be out of range. The linker can recognize calls that were -unnecessarily relaxed, and it will remove the overhead introduced by the -assembler for those cases where direct calls are sufficient. - - Call relaxation is disabled by default because it can have a negative -effect on both code size and performance, although the linker can -usually eliminate the unnecessary overhead. If a program is too large -and some of the calls are out of range, function call relaxation can be -enabled using the `--longcalls' command-line option or the `longcalls' -directive (*note longcalls: Longcalls Directive.). - - -File: as.info, Node: Xtensa Immediate Relaxation, Prev: Xtensa Call Relaxation, Up: Xtensa Relaxation - -9.52.4.3 Other Immediate Field Relaxation -......................................... - -The assembler normally performs the following other relaxations. They -can be disabled by using underscore prefixes (*note Opcode Names: -Xtensa Opcodes.), the `--no-transform' command-line option (*note -Command Line Options: Xtensa Options.), or the `no-transform' directive -(*note transform: Transform Directive.). - - The `MOVI' machine instruction can only materialize values in the -range from -2048 to 2047. Values outside this range are best -materialized with `L32R' instructions. Thus: - - movi a0, 100000 - - is assembled into the following machine code: - - .literal .L1, 100000 - l32r a0, .L1 - - The `L8UI' machine instruction can only be used with immediate -offsets in the range from 0 to 255. The `L16SI' and `L16UI' machine -instructions can only be used with offsets from 0 to 510. The `L32I' -machine instruction can only be used with offsets from 0 to 1020. A -load offset outside these ranges can be materialized with an `L32R' -instruction if the destination register of the load is different than -the source address register. For example: - - l32i a1, a0, 2040 - - is translated to: - - .literal .L1, 2040 - l32r a1, .L1 - add a1, a0, a1 - l32i a1, a1, 0 - -If the load destination and source address register are the same, an -out-of-range offset causes an error. - - The Xtensa `ADDI' instruction only allows immediate operands in the -range from -128 to 127. There are a number of alternate instruction -sequences for the `ADDI' operation. First, if the immediate is 0, the -`ADDI' will be turned into a `MOV.N' instruction (or the equivalent -`OR' instruction if the code density option is not available). If the -`ADDI' immediate is outside of the range -128 to 127, but inside the -range -32896 to 32639, an `ADDMI' instruction or `ADDMI'/`ADDI' -sequence will be used. Finally, if the immediate is outside of this -range and a free register is available, an `L32R'/`ADD' sequence will -be used with a literal allocated from the literal pool. - - For example: - - addi a5, a6, 0 - addi a5, a6, 512 - addi a5, a6, 513 - addi a5, a6, 50000 - - is assembled into the following: - - .literal .L1, 50000 - mov.n a5, a6 - addmi a5, a6, 0x200 - addmi a5, a6, 0x200 - addi a5, a5, 1 - l32r a5, .L1 - add a5, a6, a5 - - -File: as.info, Node: Xtensa Directives, Prev: Xtensa Relaxation, Up: Xtensa-Dependent - -9.52.5 Directives ------------------ - -The Xtensa assembler supports a region-based directive syntax: - - .begin DIRECTIVE [OPTIONS] - ... - .end DIRECTIVE - - All the Xtensa-specific directives that apply to a region of code use -this syntax. - - The directive applies to code between the `.begin' and the `.end'. -The state of the option after the `.end' reverts to what it was before -the `.begin'. A nested `.begin'/`.end' region can further change the -state of the directive without having to be aware of its outer state. -For example, consider: - - .begin no-transform - L: add a0, a1, a2 - .begin transform - M: add a0, a1, a2 - .end transform - N: add a0, a1, a2 - .end no-transform - - The `ADD' opcodes at `L' and `N' in the outer `no-transform' region -both result in `ADD' machine instructions, but the assembler selects an -`ADD.N' instruction for the `ADD' at `M' in the inner `transform' -region. - - The advantage of this style is that it works well inside macros -which can preserve the context of their callers. - - The following directives are available: - -* Menu: - -* Schedule Directive:: Enable instruction scheduling. -* Longcalls Directive:: Use Indirect Calls for Greater Range. -* Transform Directive:: Disable All Assembler Transformations. -* Literal Directive:: Intermix Literals with Instructions. -* Literal Position Directive:: Specify Inline Literal Pool Locations. -* Literal Prefix Directive:: Specify Literal Section Name Prefix. -* Absolute Literals Directive:: Control PC-Relative vs. Absolute Literals. - - -File: as.info, Node: Schedule Directive, Next: Longcalls Directive, Up: Xtensa Directives - -9.52.5.1 schedule -................. - -The `schedule' directive is recognized only for compatibility with -Tensilica's assembler. - - .begin [no-]schedule - .end [no-]schedule - - This directive is ignored and has no effect on `as'. - - -File: as.info, Node: Longcalls Directive, Next: Transform Directive, Prev: Schedule Directive, Up: Xtensa Directives - -9.52.5.2 longcalls -.................. - -The `longcalls' directive enables or disables function call relaxation. -*Note Function Call Relaxation: Xtensa Call Relaxation. - - .begin [no-]longcalls - .end [no-]longcalls - - Call relaxation is disabled by default unless the `--longcalls' -command-line option is specified. The `longcalls' directive overrides -the default determined by the command-line options. - - -File: as.info, Node: Transform Directive, Next: Literal Directive, Prev: Longcalls Directive, Up: Xtensa Directives - -9.52.5.3 transform -.................. - -This directive enables or disables all assembler transformation, -including relaxation (*note Xtensa Relaxation: Xtensa Relaxation.) and -optimization (*note Xtensa Optimizations: Xtensa Optimizations.). - - .begin [no-]transform - .end [no-]transform - - Transformations are enabled by default unless the `--no-transform' -option is used. The `transform' directive overrides the default -determined by the command-line options. An underscore opcode prefix, -disabling transformation of that opcode, always takes precedence over -both directives and command-line flags. - - -File: as.info, Node: Literal Directive, Next: Literal Position Directive, Prev: Transform Directive, Up: Xtensa Directives - -9.52.5.4 literal -................ - -The `.literal' directive is used to define literal pool data, i.e., -read-only 32-bit data accessed via `L32R' instructions. - - .literal LABEL, VALUE[, VALUE...] - - This directive is similar to the standard `.word' directive, except -that the actual location of the literal data is determined by the -assembler and linker, not by the position of the `.literal' directive. -Using this directive gives the assembler freedom to locate the literal -data in the most appropriate place and possibly to combine identical -literals. For example, the code: - - entry sp, 40 - .literal .L1, sym - l32r a4, .L1 - - can be used to load a pointer to the symbol `sym' into register -`a4'. The value of `sym' will not be placed between the `ENTRY' and -`L32R' instructions; instead, the assembler puts the data in a literal -pool. - - Literal pools are placed by default in separate literal sections; -however, when using the `--text-section-literals' option (*note Command -Line Options: Xtensa Options.), the literal pools for PC-relative mode -`L32R' instructions are placed in the current section.(1) These text -section literal pools are created automatically before `ENTRY' -instructions and manually after `.literal_position' directives (*note -literal_position: Literal Position Directive.). If there are no -preceding `ENTRY' instructions, explicit `.literal_position' directives -must be used to place the text section literal pools; otherwise, `as' -will report an error. - - When literals are placed in separate sections, the literal section -names are derived from the names of the sections where the literals are -defined. The base literal section names are `.literal' for PC-relative -mode `L32R' instructions and `.lit4' for absolute mode `L32R' -instructions (*note absolute-literals: Absolute Literals Directive.). -These base names are used for literals defined in the default `.text' -section. For literals defined in other sections or within the scope of -a `literal_prefix' directive (*note literal_prefix: Literal Prefix -Directive.), the following rules determine the literal section name: - - 1. If the current section is a member of a section group, the literal - section name includes the group name as a suffix to the base - `.literal' or `.lit4' name, with a period to separate the base - name and group name. The literal section is also made a member of - the group. - - 2. If the current section name (or `literal_prefix' value) begins with - "`.gnu.linkonce.KIND.'", the literal section name is formed by - replacing "`.KIND'" with the base `.literal' or `.lit4' name. For - example, for literals defined in a section named - `.gnu.linkonce.t.func', the literal section will be - `.gnu.linkonce.literal.func' or `.gnu.linkonce.lit4.func'. - - 3. If the current section name (or `literal_prefix' value) ends with - `.text', the literal section name is formed by replacing that - suffix with the base `.literal' or `.lit4' name. For example, for - literals defined in a section named `.iram0.text', the literal - section will be `.iram0.literal' or `.iram0.lit4'. - - 4. If none of the preceding conditions apply, the literal section - name is formed by adding the base `.literal' or `.lit4' name as a - suffix to the current section name (or `literal_prefix' value). - - ---------- Footnotes ---------- - - (1) Literals for the `.init' and `.fini' sections are always placed -in separate sections, even when `--text-section-literals' is enabled. - - -File: as.info, Node: Literal Position Directive, Next: Literal Prefix Directive, Prev: Literal Directive, Up: Xtensa Directives - -9.52.5.5 literal_position -......................... - -When using `--text-section-literals' to place literals inline in the -section being assembled, the `.literal_position' directive can be used -to mark a potential location for a literal pool. - - .literal_position - - The `.literal_position' directive is ignored when the -`--text-section-literals' option is not used or when `L32R' -instructions use the absolute addressing mode. - - The assembler will automatically place text section literal pools -before `ENTRY' instructions, so the `.literal_position' directive is -only needed to specify some other location for a literal pool. You may -need to add an explicit jump instruction to skip over an inline literal -pool. - - For example, an interrupt vector does not begin with an `ENTRY' -instruction so the assembler will be unable to automatically find a good -place to put a literal pool. Moreover, the code for the interrupt -vector must be at a specific starting address, so the literal pool -cannot come before the start of the code. The literal pool for the -vector must be explicitly positioned in the middle of the vector (before -any uses of the literals, due to the negative offsets used by -PC-relative `L32R' instructions). The `.literal_position' directive -can be used to do this. In the following code, the literal for `M' -will automatically be aligned correctly and is placed after the -unconditional jump. - - .global M - code_start: - j continue - .literal_position - .align 4 - continue: - movi a4, M - - -File: as.info, Node: Literal Prefix Directive, Next: Absolute Literals Directive, Prev: Literal Position Directive, Up: Xtensa Directives - -9.52.5.6 literal_prefix -....................... - -The `literal_prefix' directive allows you to override the default -literal section names, which are derived from the names of the sections -where the literals are defined. - - .begin literal_prefix [NAME] - .end literal_prefix - - For literals defined within the delimited region, the literal section -names are derived from the NAME argument instead of the name of the -current section. The rules used to derive the literal section names do -not change. *Note literal: Literal Directive. If the NAME argument is -omitted, the literal sections revert to the defaults. This directive -has no effect when using the `--text-section-literals' option (*note -Command Line Options: Xtensa Options.). - - -File: as.info, Node: Absolute Literals Directive, Prev: Literal Prefix Directive, Up: Xtensa Directives - -9.52.5.7 absolute-literals -.......................... - -The `absolute-literals' and `no-absolute-literals' directives control -the absolute vs. PC-relative mode for `L32R' instructions. These are -relevant only for Xtensa configurations that include the absolute -addressing option for `L32R' instructions. - - .begin [no-]absolute-literals - .end [no-]absolute-literals - - These directives do not change the `L32R' mode--they only cause the -assembler to emit the appropriate kind of relocation for `L32R' -instructions and to place the literal values in the appropriate section. -To change the `L32R' mode, the program must write the `LITBASE' special -register. It is the programmer's responsibility to keep track of the -mode and indicate to the assembler which mode is used in each region of -code. - - If the Xtensa configuration includes the absolute `L32R' addressing -option, the default is to assume absolute `L32R' addressing unless the -`--no-absolute-literals' command-line option is specified. Otherwise, -the default is to assume PC-relative `L32R' addressing. The -`absolute-literals' directive can then be used to override the default -determined by the command-line options. - - -File: as.info, Node: Reporting Bugs, Next: Acknowledgements, Prev: Machine Dependencies, Up: Top - -10 Reporting Bugs -***************** - -Your bug reports play an essential role in making `as' reliable. - - Reporting a bug may help you by bringing a solution to your problem, -or it may not. But in any case the principal function of a bug report -is to help the entire community by making the next version of `as' work -better. Bug reports are your contribution to the maintenance of `as'. - - In order for a bug report to serve its purpose, you must include the -information that enables us to fix the bug. - -* Menu: - -* Bug Criteria:: Have you found a bug? -* Bug Reporting:: How to report bugs - - -File: as.info, Node: Bug Criteria, Next: Bug Reporting, Up: Reporting Bugs - -10.1 Have You Found a Bug? -========================== - -If you are not sure whether you have found a bug, here are some -guidelines: - - * If the assembler gets a fatal signal, for any input whatever, that - is a `as' bug. Reliable assemblers never crash. - - * If `as' produces an error message for valid input, that is a bug. - - * If `as' does not produce an error message for invalid input, that - is a bug. However, you should note that your idea of "invalid - input" might be our idea of "an extension" or "support for - traditional practice". - - * If you are an experienced user of assemblers, your suggestions for - improvement of `as' are welcome in any case. - - -File: as.info, Node: Bug Reporting, Prev: Bug Criteria, Up: Reporting Bugs - -10.2 How to Report Bugs -======================= - -A number of companies and individuals offer support for GNU products. -If you obtained `as' from a support organization, we recommend you -contact that organization first. - - You can find contact information for many support companies and -individuals in the file `etc/SERVICE' in the GNU Emacs distribution. - - In any event, we also recommend that you send bug reports for `as' -to `http://www.sourceware.org/bugzilla/'. - - The fundamental principle of reporting bugs usefully is this: -*report all the facts*. If you are not sure whether to state a fact or -leave it out, state it! - - Often people omit facts because they think they know what causes the -problem and assume that some details do not matter. Thus, you might -assume that the name of a symbol you use in an example does not matter. -Well, probably it does not, but one cannot be sure. Perhaps the bug -is a stray memory reference which happens to fetch from the location -where that name is stored in memory; perhaps, if the name were -different, the contents of that location would fool the assembler into -doing the right thing despite the bug. Play it safe and give a -specific, complete example. That is the easiest thing for you to do, -and the most helpful. - - Keep in mind that the purpose of a bug report is to enable us to fix -the bug if it is new to us. Therefore, always write your bug reports -on the assumption that the bug has not been reported previously. - - Sometimes people give a few sketchy facts and ask, "Does this ring a -bell?" This cannot help us fix a bug, so it is basically useless. We -respond by asking for enough details to enable us to investigate. You -might as well expedite matters by sending them to begin with. - - To enable us to fix the bug, you should include all these things: - - * The version of `as'. `as' announces it if you start it with the - `--version' argument. - - Without this, we will not know whether there is any point in - looking for the bug in the current version of `as'. - - * Any patches you may have applied to the `as' source. - - * The type of machine you are using, and the operating system name - and version number. - - * What compiler (and its version) was used to compile `as'--e.g. - "`gcc-2.7'". - - * The command arguments you gave the assembler to assemble your - example and observe the bug. To guarantee you will not omit - something important, list them all. A copy of the Makefile (or - the output from make) is sufficient. - - If we were to try to guess the arguments, we would probably guess - wrong and then we might not encounter the bug. - - * A complete input file that will reproduce the bug. If the bug is - observed when the assembler is invoked via a compiler, send the - assembler source, not the high level language source. Most - compilers will produce the assembler source when run with the `-S' - option. If you are using `gcc', use the options `-v - --save-temps'; this will save the assembler source in a file with - an extension of `.s', and also show you exactly how `as' is being - run. - - * A description of what behavior you observe that you believe is - incorrect. For example, "It gets a fatal signal." - - Of course, if the bug is that `as' gets a fatal signal, then we - will certainly notice it. But if the bug is incorrect output, we - might not notice unless it is glaringly wrong. You might as well - not give us a chance to make a mistake. - - Even if the problem you experience is a fatal signal, you should - still say so explicitly. Suppose something strange is going on, - such as, your copy of `as' is out of sync, or you have encountered - a bug in the C library on your system. (This has happened!) Your - copy might crash and ours would not. If you told us to expect a - crash, then when ours fails to crash, we would know that the bug - was not happening for us. If you had not told us to expect a - crash, then we would not be able to draw any conclusion from our - observations. - - * If you wish to suggest changes to the `as' source, send us context - diffs, as generated by `diff' with the `-u', `-c', or `-p' option. - Always send diffs from the old file to the new file. If you even - discuss something in the `as' source, refer to it by context, not - by line number. - - The line numbers in our development sources will not match those - in your sources. Your line numbers would convey no useful - information to us. - - Here are some things that are not necessary: - - * A description of the envelope of the bug. - - Often people who encounter a bug spend a lot of time investigating - which changes to the input file will make the bug go away and which - changes will not affect it. - - This is often time consuming and not very useful, because the way - we will find the bug is by running a single example under the - debugger with breakpoints, not by pure deduction from a series of - examples. We recommend that you save your time for something else. - - Of course, if you can find a simpler example to report _instead_ - of the original one, that is a convenience for us. Errors in the - output will be easier to spot, running under the debugger will take - less time, and so on. - - However, simplification is not vital; if you do not want to do - this, report the bug anyway and send us the entire test case you - used. - - * A patch for the bug. - - A patch for the bug does help us if it is a good one. But do not - omit the necessary information, such as the test case, on the - assumption that a patch is all we need. We might see problems - with your patch and decide to fix the problem another way, or we - might not understand it at all. - - Sometimes with a program as complicated as `as' it is very hard to - construct an example that will make the program follow a certain - path through the code. If you do not send us the example, we will - not be able to construct one, so we will not be able to verify - that the bug is fixed. - - And if we cannot understand what bug you are trying to fix, or why - your patch should be an improvement, we will not install it. A - test case will help us to understand. - - * A guess about what the bug is or what it depends on. - - Such guesses are usually wrong. Even we cannot guess right about - such things without first using the debugger to find the facts. - - -File: as.info, Node: Acknowledgements, Next: GNU Free Documentation License, Prev: Reporting Bugs, Up: Top - -11 Acknowledgements -******************* - -If you have contributed to GAS and your name isn't listed here, it is -not meant as a slight. We just don't know about it. Send mail to the -maintainer, and we'll correct the situation. Currently the maintainer -is Nick Clifton (email address `nickc@redhat.com'). - - Dean Elsner wrote the original GNU assembler for the VAX.(1) - - Jay Fenlason maintained GAS for a while, adding support for -GDB-specific debug information and the 68k series machines, most of the -preprocessing pass, and extensive changes in `messages.c', -`input-file.c', `write.c'. - - K. Richard Pixley maintained GAS for a while, adding various -enhancements and many bug fixes, including merging support for several -processors, breaking GAS up to handle multiple object file format back -ends (including heavy rewrite, testing, an integration of the coff and -b.out back ends), adding configuration including heavy testing and -verification of cross assemblers and file splits and renaming, -converted GAS to strictly ANSI C including full prototypes, added -support for m680[34]0 and cpu32, did considerable work on i960 -including a COFF port (including considerable amounts of reverse -engineering), a SPARC opcode file rewrite, DECstation, rs6000, and -hp300hpux host ports, updated "know" assertions and made them work, -much other reorganization, cleanup, and lint. - - Ken Raeburn wrote the high-level BFD interface code to replace most -of the code in format-specific I/O modules. - - The original VMS support was contributed by David L. Kashtan. Eric -Youngdale has done much work with it since. - - The Intel 80386 machine description was written by Eliot Dresselhaus. - - Minh Tran-Le at IntelliCorp contributed some AIX 386 support. - - The Motorola 88k machine description was contributed by Devon Bowen -of Buffalo University and Torbjorn Granlund of the Swedish Institute of -Computer Science. - - Keith Knowles at the Open Software Foundation wrote the original -MIPS back end (`tc-mips.c', `tc-mips.h'), and contributed Rose format -support (which hasn't been merged in yet). Ralph Campbell worked with -the MIPS code to support a.out format. - - Support for the Zilog Z8k and Renesas H8/300 processors (tc-z8k, -tc-h8300), and IEEE 695 object file format (obj-ieee), was written by -Steve Chamberlain of Cygnus Support. Steve also modified the COFF back -end to use BFD for some low-level operations, for use with the H8/300 -and AMD 29k targets. - - John Gilmore built the AMD 29000 support, added `.include' support, -and simplified the configuration of which versions accept which -directives. He updated the 68k machine description so that Motorola's -opcodes always produced fixed-size instructions (e.g., `jsr'), while -synthetic instructions remained shrinkable (`jbsr'). John fixed many -bugs, including true tested cross-compilation support, and one bug in -relaxation that took a week and required the proverbial one-bit fix. - - Ian Lance Taylor of Cygnus Support merged the Motorola and MIT -syntax for the 68k, completed support for some COFF targets (68k, i386 -SVR3, and SCO Unix), added support for MIPS ECOFF and ELF targets, -wrote the initial RS/6000 and PowerPC assembler, and made a few other -minor patches. - - Steve Chamberlain made GAS able to generate listings. - - Hewlett-Packard contributed support for the HP9000/300. - - Jeff Law wrote GAS and BFD support for the native HPPA object format -(SOM) along with a fairly extensive HPPA testsuite (for both SOM and -ELF object formats). This work was supported by both the Center for -Software Science at the University of Utah and Cygnus Support. - - Support for ELF format files has been worked on by Mark Eichin of -Cygnus Support (original, incomplete implementation for SPARC), Pete -Hoogenboom and Jeff Law at the University of Utah (HPPA mainly), -Michael Meissner of the Open Software Foundation (i386 mainly), and Ken -Raeburn of Cygnus Support (sparc, and some initial 64-bit support). - - Linas Vepstas added GAS support for the ESA/390 "IBM 370" -architecture. - - Richard Henderson rewrote the Alpha assembler. Klaus Kaempf wrote -GAS and BFD support for openVMS/Alpha. - - Timothy Wall, Michael Hayes, and Greg Smart contributed to the -various tic* flavors. - - David Heine, Sterling Augustine, Bob Wilson and John Ruttenberg from -Tensilica, Inc. added support for Xtensa processors. - - Several engineers at Cygnus Support have also provided many small -bug fixes and configuration enhancements. - - Jon Beniston added support for the Lattice Mico32 architecture. - - Many others have contributed large or small bugfixes and -enhancements. If you have contributed significant work and are not -mentioned on this list, and want to be, let us know. Some of the -history has been lost; we are not intentionally leaving anyone out. - - ---------- Footnotes ---------- - - (1) Any more details? - - -File: as.info, Node: GNU Free Documentation License, Next: AS Index, Prev: Acknowledgements, Up: Top - -Appendix A GNU Free Documentation License -***************************************** - - Version 1.3, 3 November 2008 - - Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. - `http://fsf.org/' - - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - 0. PREAMBLE - - The purpose of this License is to make a manual, textbook, or other - functional and useful document "free" in the sense of freedom: to - assure everyone the effective freedom to copy and redistribute it, - with or without modifying it, either commercially or - noncommercially. Secondarily, this License preserves for the - author and publisher a way to get credit for their work, while not - being considered responsible for modifications made by others. - - This License is a kind of "copyleft", which means that derivative - works of the document must themselves be free in the same sense. - It complements the GNU General Public License, which is a copyleft - license designed for free software. - - We have designed this License in order to use it for manuals for - free software, because free software needs free documentation: a - free program should come with manuals providing the same freedoms - that the software does. But this License is not limited to - software manuals; it can be used for any textual work, regardless - of subject matter or whether it is published as a printed book. - We recommend this License principally for works whose purpose is - instruction or reference. - - 1. APPLICABILITY AND DEFINITIONS - - This License applies to any manual or other work, in any medium, - that contains a notice placed by the copyright holder saying it - can be distributed under the terms of this License. Such a notice - grants a world-wide, royalty-free license, unlimited in duration, - to use that work under the conditions stated herein. The - "Document", below, refers to any such manual or work. Any member - of the public is a licensee, and is addressed as "you". You - accept the license if you copy, modify or distribute the work in a - way requiring permission under copyright law. - - A "Modified Version" of the Document means any work containing the - Document or a portion of it, either copied verbatim, or with - modifications and/or translated into another language. - - A "Secondary Section" is a named appendix or a front-matter section - of the Document that deals exclusively with the relationship of the - publishers or authors of the Document to the Document's overall - subject (or to related matters) and contains nothing that could - fall directly within that overall subject. (Thus, if the Document - is in part a textbook of mathematics, a Secondary Section may not - explain any mathematics.) The relationship could be a matter of - historical connection with the subject or with related matters, or - of legal, commercial, philosophical, ethical or political position - regarding them. - - The "Invariant Sections" are certain Secondary Sections whose - titles are designated, as being those of Invariant Sections, in - the notice that says that the Document is released under this - License. If a section does not fit the above definition of - Secondary then it is not allowed to be designated as Invariant. - The Document may contain zero Invariant Sections. If the Document - does not identify any Invariant Sections then there are none. - - The "Cover Texts" are certain short passages of text that are - listed, as Front-Cover Texts or Back-Cover Texts, in the notice - that says that the Document is released under this License. A - Front-Cover Text may be at most 5 words, and a Back-Cover Text may - be at most 25 words. - - A "Transparent" copy of the Document means a machine-readable copy, - represented in a format whose specification is available to the - general public, that is suitable for revising the document - straightforwardly with generic text editors or (for images - composed of pixels) generic paint programs or (for drawings) some - widely available drawing editor, and that is suitable for input to - text formatters or for automatic translation to a variety of - formats suitable for input to text formatters. A copy made in an - otherwise Transparent file format whose markup, or absence of - markup, has been arranged to thwart or discourage subsequent - modification by readers is not Transparent. An image format is - not Transparent if used for any substantial amount of text. A - copy that is not "Transparent" is called "Opaque". - - Examples of suitable formats for Transparent copies include plain - ASCII without markup, Texinfo input format, LaTeX input format, - SGML or XML using a publicly available DTD, and - standard-conforming simple HTML, PostScript or PDF designed for - human modification. Examples of transparent image formats include - PNG, XCF and JPG. Opaque formats include proprietary formats that - can be read and edited only by proprietary word processors, SGML or - XML for which the DTD and/or processing tools are not generally - available, and the machine-generated HTML, PostScript or PDF - produced by some word processors for output purposes only. - - The "Title Page" means, for a printed book, the title page itself, - plus such following pages as are needed to hold, legibly, the - material this License requires to appear in the title page. For - works in formats which do not have any title page as such, "Title - Page" means the text near the most prominent appearance of the - work's title, preceding the beginning of the body of the text. - - The "publisher" means any person or entity that distributes copies - of the Document to the public. - - A section "Entitled XYZ" means a named subunit of the Document - whose title either is precisely XYZ or contains XYZ in parentheses - following text that translates XYZ in another language. (Here XYZ - stands for a specific section name mentioned below, such as - "Acknowledgements", "Dedications", "Endorsements", or "History".) - To "Preserve the Title" of such a section when you modify the - Document means that it remains a section "Entitled XYZ" according - to this definition. - - The Document may include Warranty Disclaimers next to the notice - which states that this License applies to the Document. These - Warranty Disclaimers are considered to be included by reference in - this License, but only as regards disclaiming warranties: any other - implication that these Warranty Disclaimers may have is void and - has no effect on the meaning of this License. - - 2. VERBATIM COPYING - - You may copy and distribute the Document in any medium, either - commercially or noncommercially, provided that this License, the - copyright notices, and the license notice saying this License - applies to the Document are reproduced in all copies, and that you - add no other conditions whatsoever to those of this License. You - may not use technical measures to obstruct or control the reading - or further copying of the copies you make or distribute. However, - you may accept compensation in exchange for copies. If you - distribute a large enough number of copies you must also follow - the conditions in section 3. - - You may also lend copies, under the same conditions stated above, - and you may publicly display copies. - - 3. COPYING IN QUANTITY - - If you publish printed copies (or copies in media that commonly - have printed covers) of the Document, numbering more than 100, and - the Document's license notice requires Cover Texts, you must - enclose the copies in covers that carry, clearly and legibly, all - these Cover Texts: Front-Cover Texts on the front cover, and - Back-Cover Texts on the back cover. Both covers must also clearly - and legibly identify you as the publisher of these copies. The - front cover must present the full title with all words of the - title equally prominent and visible. You may add other material - on the covers in addition. Copying with changes limited to the - covers, as long as they preserve the title of the Document and - satisfy these conditions, can be treated as verbatim copying in - other respects. - - If the required texts for either cover are too voluminous to fit - legibly, you should put the first ones listed (as many as fit - reasonably) on the actual cover, and continue the rest onto - adjacent pages. - - If you publish or distribute Opaque copies of the Document - numbering more than 100, you must either include a - machine-readable Transparent copy along with each Opaque copy, or - state in or with each Opaque copy a computer-network location from - which the general network-using public has access to download - using public-standard network protocols a complete Transparent - copy of the Document, free of added material. If you use the - latter option, you must take reasonably prudent steps, when you - begin distribution of Opaque copies in quantity, to ensure that - this Transparent copy will remain thus accessible at the stated - location until at least one year after the last time you - distribute an Opaque copy (directly or through your agents or - retailers) of that edition to the public. - - It is requested, but not required, that you contact the authors of - the Document well before redistributing any large number of - copies, to give them a chance to provide you with an updated - version of the Document. - - 4. MODIFICATIONS - - You may copy and distribute a Modified Version of the Document - under the conditions of sections 2 and 3 above, provided that you - release the Modified Version under precisely this License, with - the Modified Version filling the role of the Document, thus - licensing distribution and modification of the Modified Version to - whoever possesses a copy of it. In addition, you must do these - things in the Modified Version: - - A. Use in the Title Page (and on the covers, if any) a title - distinct from that of the Document, and from those of - previous versions (which should, if there were any, be listed - in the History section of the Document). You may use the - same title as a previous version if the original publisher of - that version gives permission. - - B. List on the Title Page, as authors, one or more persons or - entities responsible for authorship of the modifications in - the Modified Version, together with at least five of the - principal authors of the Document (all of its principal - authors, if it has fewer than five), unless they release you - from this requirement. - - C. State on the Title page the name of the publisher of the - Modified Version, as the publisher. - - D. Preserve all the copyright notices of the Document. - - E. Add an appropriate copyright notice for your modifications - adjacent to the other copyright notices. - - F. Include, immediately after the copyright notices, a license - notice giving the public permission to use the Modified - Version under the terms of this License, in the form shown in - the Addendum below. - - G. Preserve in that license notice the full lists of Invariant - Sections and required Cover Texts given in the Document's - license notice. - - H. Include an unaltered copy of this License. - - I. Preserve the section Entitled "History", Preserve its Title, - and add to it an item stating at least the title, year, new - authors, and publisher of the Modified Version as given on - the Title Page. If there is no section Entitled "History" in - the Document, create one stating the title, year, authors, - and publisher of the Document as given on its Title Page, - then add an item describing the Modified Version as stated in - the previous sentence. - - J. Preserve the network location, if any, given in the Document - for public access to a Transparent copy of the Document, and - likewise the network locations given in the Document for - previous versions it was based on. These may be placed in - the "History" section. You may omit a network location for a - work that was published at least four years before the - Document itself, or if the original publisher of the version - it refers to gives permission. - - K. For any section Entitled "Acknowledgements" or "Dedications", - Preserve the Title of the section, and preserve in the - section all the substance and tone of each of the contributor - acknowledgements and/or dedications given therein. - - L. Preserve all the Invariant Sections of the Document, - unaltered in their text and in their titles. Section numbers - or the equivalent are not considered part of the section - titles. - - M. Delete any section Entitled "Endorsements". Such a section - may not be included in the Modified Version. - - N. Do not retitle any existing section to be Entitled - "Endorsements" or to conflict in title with any Invariant - Section. - - O. Preserve any Warranty Disclaimers. - - If the Modified Version includes new front-matter sections or - appendices that qualify as Secondary Sections and contain no - material copied from the Document, you may at your option - designate some or all of these sections as invariant. To do this, - add their titles to the list of Invariant Sections in the Modified - Version's license notice. These titles must be distinct from any - other section titles. - - You may add a section Entitled "Endorsements", provided it contains - nothing but endorsements of your Modified Version by various - parties--for example, statements of peer review or that the text - has been approved by an organization as the authoritative - definition of a standard. - - You may add a passage of up to five words as a Front-Cover Text, - and a passage of up to 25 words as a Back-Cover Text, to the end - of the list of Cover Texts in the Modified Version. Only one - passage of Front-Cover Text and one of Back-Cover Text may be - added by (or through arrangements made by) any one entity. If the - Document already includes a cover text for the same cover, - previously added by you or by arrangement made by the same entity - you are acting on behalf of, you may not add another; but you may - replace the old one, on explicit permission from the previous - publisher that added the old one. - - The author(s) and publisher(s) of the Document do not by this - License give permission to use their names for publicity for or to - assert or imply endorsement of any Modified Version. - - 5. COMBINING DOCUMENTS - - You may combine the Document with other documents released under - this License, under the terms defined in section 4 above for - modified versions, provided that you include in the combination - all of the Invariant Sections of all of the original documents, - unmodified, and list them all as Invariant Sections of your - combined work in its license notice, and that you preserve all - their Warranty Disclaimers. - - The combined work need only contain one copy of this License, and - multiple identical Invariant Sections may be replaced with a single - copy. If there are multiple Invariant Sections with the same name - but different contents, make the title of each such section unique - by adding at the end of it, in parentheses, the name of the - original author or publisher of that section if known, or else a - unique number. Make the same adjustment to the section titles in - the list of Invariant Sections in the license notice of the - combined work. - - In the combination, you must combine any sections Entitled - "History" in the various original documents, forming one section - Entitled "History"; likewise combine any sections Entitled - "Acknowledgements", and any sections Entitled "Dedications". You - must delete all sections Entitled "Endorsements." - - 6. COLLECTIONS OF DOCUMENTS - - You may make a collection consisting of the Document and other - documents released under this License, and replace the individual - copies of this License in the various documents with a single copy - that is included in the collection, provided that you follow the - rules of this License for verbatim copying of each of the - documents in all other respects. - - You may extract a single document from such a collection, and - distribute it individually under this License, provided you insert - a copy of this License into the extracted document, and follow - this License in all other respects regarding verbatim copying of - that document. - - 7. AGGREGATION WITH INDEPENDENT WORKS - - A compilation of the Document or its derivatives with other - separate and independent documents or works, in or on a volume of - a storage or distribution medium, is called an "aggregate" if the - copyright resulting from the compilation is not used to limit the - legal rights of the compilation's users beyond what the individual - works permit. When the Document is included in an aggregate, this - License does not apply to the other works in the aggregate which - are not themselves derivative works of the Document. - - If the Cover Text requirement of section 3 is applicable to these - copies of the Document, then if the Document is less than one half - of the entire aggregate, the Document's Cover Texts may be placed - on covers that bracket the Document within the aggregate, or the - electronic equivalent of covers if the Document is in electronic - form. Otherwise they must appear on printed covers that bracket - the whole aggregate. - - 8. TRANSLATION - - Translation is considered a kind of modification, so you may - distribute translations of the Document under the terms of section - 4. Replacing Invariant Sections with translations requires special - permission from their copyright holders, but you may include - translations of some or all Invariant Sections in addition to the - original versions of these Invariant Sections. You may include a - translation of this License, and all the license notices in the - Document, and any Warranty Disclaimers, provided that you also - include the original English version of this License and the - original versions of those notices and disclaimers. In case of a - disagreement between the translation and the original version of - this License or a notice or disclaimer, the original version will - prevail. - - If a section in the Document is Entitled "Acknowledgements", - "Dedications", or "History", the requirement (section 4) to - Preserve its Title (section 1) will typically require changing the - actual title. - - 9. TERMINATION - - You may not copy, modify, sublicense, or distribute the Document - except as expressly provided under this License. Any attempt - otherwise to copy, modify, sublicense, or distribute it is void, - and will automatically terminate your rights under this License. - - However, if you cease all violation of this License, then your - license from a particular copyright holder is reinstated (a) - provisionally, unless and until the copyright holder explicitly - and finally terminates your license, and (b) permanently, if the - copyright holder fails to notify you of the violation by some - reasonable means prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is - reinstated permanently if the copyright holder notifies you of the - violation by some reasonable means, this is the first time you have - received notice of violation of this License (for any work) from - that copyright holder, and you cure the violation prior to 30 days - after your receipt of the notice. - - Termination of your rights under this section does not terminate - the licenses of parties who have received copies or rights from - you under this License. If your rights have been terminated and - not permanently reinstated, receipt of a copy of some or all of - the same material does not give you any rights to use it. - - 10. FUTURE REVISIONS OF THIS LICENSE - - The Free Software Foundation may publish new, revised versions of - the GNU Free Documentation License from time to time. Such new - versions will be similar in spirit to the present version, but may - differ in detail to address new problems or concerns. See - `http://www.gnu.org/copyleft/'. - - Each version of the License is given a distinguishing version - number. If the Document specifies that a particular numbered - version of this License "or any later version" applies to it, you - have the option of following the terms and conditions either of - that specified version or of any later version that has been - published (not as a draft) by the Free Software Foundation. If - the Document does not specify a version number of this License, - you may choose any version ever published (not as a draft) by the - Free Software Foundation. If the Document specifies that a proxy - can decide which future versions of this License can be used, that - proxy's public statement of acceptance of a version permanently - authorizes you to choose that version for the Document. - - 11. RELICENSING - - "Massive Multiauthor Collaboration Site" (or "MMC Site") means any - World Wide Web server that publishes copyrightable works and also - provides prominent facilities for anybody to edit those works. A - public wiki that anybody can edit is an example of such a server. - A "Massive Multiauthor Collaboration" (or "MMC") contained in the - site means any set of copyrightable works thus published on the MMC - site. - - "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 - license published by Creative Commons Corporation, a not-for-profit - corporation with a principal place of business in San Francisco, - California, as well as future copyleft versions of that license - published by that same organization. - - "Incorporate" means to publish or republish a Document, in whole or - in part, as part of another Document. - - An MMC is "eligible for relicensing" if it is licensed under this - License, and if all works that were first published under this - License somewhere other than this MMC, and subsequently - incorporated in whole or in part into the MMC, (1) had no cover - texts or invariant sections, and (2) were thus incorporated prior - to November 1, 2008. - - The operator of an MMC Site may republish an MMC contained in the - site under CC-BY-SA on the same site at any time before August 1, - 2009, provided the MMC is eligible for relicensing. - - -ADDENDUM: How to use this License for your documents -==================================================== - -To use this License in a document you have written, include a copy of -the License in the document and put the following copyright and license -notices just after the title page: - - Copyright (C) YEAR YOUR NAME. - Permission is granted to copy, distribute and/or modify this document - under the terms of the GNU Free Documentation License, Version 1.3 - or any later version published by the Free Software Foundation; - with no Invariant Sections, no Front-Cover Texts, and no Back-Cover - Texts. A copy of the license is included in the section entitled ``GNU - Free Documentation License''. - - If you have Invariant Sections, Front-Cover Texts and Back-Cover -Texts, replace the "with...Texts." line with this: - - with the Invariant Sections being LIST THEIR TITLES, with - the Front-Cover Texts being LIST, and with the Back-Cover Texts - being LIST. - - If you have Invariant Sections without Cover Texts, or some other -combination of the three, merge those two alternatives to suit the -situation. - - If your document contains nontrivial examples of program code, we -recommend releasing these examples in parallel under your choice of -free software license, such as the GNU General Public License, to -permit their use in free software. - - -File: as.info, Node: AS Index, Prev: GNU Free Documentation License, Up: Top - -AS Index -******** - - -* Menu: - -* #: Comments. (line 33) -* #APP: Preprocessing. (line 27) -* #NO_APP: Preprocessing. (line 27) -* $ in symbol names <1>: D30V-Chars. (line 70) -* $ in symbol names <2>: SH64-Chars. (line 15) -* $ in symbol names <3>: D10V-Chars. (line 53) -* $ in symbol names <4>: Meta-Chars. (line 10) -* $ in symbol names: SH-Chars. (line 15) -* $a: ARM Mapping Symbols. (line 9) -* $acos math builtin, TIC54X: TIC54X-Builtins. (line 10) -* $asin math builtin, TIC54X: TIC54X-Builtins. (line 13) -* $atan math builtin, TIC54X: TIC54X-Builtins. (line 16) -* $atan2 math builtin, TIC54X: TIC54X-Builtins. (line 19) -* $ceil math builtin, TIC54X: TIC54X-Builtins. (line 22) -* $cos math builtin, TIC54X: TIC54X-Builtins. (line 28) -* $cosh math builtin, TIC54X: TIC54X-Builtins. (line 25) -* $cvf math builtin, TIC54X: TIC54X-Builtins. (line 31) -* $cvi math builtin, TIC54X: TIC54X-Builtins. (line 34) -* $d <1>: AArch64 Mapping Symbols. - (line 12) -* $d: ARM Mapping Symbols. (line 15) -* $exp math builtin, TIC54X: TIC54X-Builtins. (line 37) -* $fabs math builtin, TIC54X: TIC54X-Builtins. (line 40) -* $firstch subsym builtin, TIC54X: TIC54X-Macros. (line 26) -* $floor math builtin, TIC54X: TIC54X-Builtins. (line 43) -* $fmod math builtin, TIC54X: TIC54X-Builtins. (line 47) -* $int math builtin, TIC54X: TIC54X-Builtins. (line 50) -* $iscons subsym builtin, TIC54X: TIC54X-Macros. (line 43) -* $isdefed subsym builtin, TIC54X: TIC54X-Macros. (line 34) -* $ismember subsym builtin, TIC54X: TIC54X-Macros. (line 38) -* $isname subsym builtin, TIC54X: TIC54X-Macros. (line 47) -* $isreg subsym builtin, TIC54X: TIC54X-Macros. (line 50) -* $lastch subsym builtin, TIC54X: TIC54X-Macros. (line 30) -* $ldexp math builtin, TIC54X: TIC54X-Builtins. (line 53) -* $log math builtin, TIC54X: TIC54X-Builtins. (line 59) -* $log10 math builtin, TIC54X: TIC54X-Builtins. (line 56) -* $max math builtin, TIC54X: TIC54X-Builtins. (line 62) -* $min math builtin, TIC54X: TIC54X-Builtins. (line 65) -* $pow math builtin, TIC54X: TIC54X-Builtins. (line 68) -* $round math builtin, TIC54X: TIC54X-Builtins. (line 71) -* $sgn math builtin, TIC54X: TIC54X-Builtins. (line 74) -* $sin math builtin, TIC54X: TIC54X-Builtins. (line 77) -* $sinh math builtin, TIC54X: TIC54X-Builtins. (line 80) -* $sqrt math builtin, TIC54X: TIC54X-Builtins. (line 83) -* $structacc subsym builtin, TIC54X: TIC54X-Macros. (line 57) -* $structsz subsym builtin, TIC54X: TIC54X-Macros. (line 54) -* $symcmp subsym builtin, TIC54X: TIC54X-Macros. (line 23) -* $symlen subsym builtin, TIC54X: TIC54X-Macros. (line 20) -* $t: ARM Mapping Symbols. (line 12) -* $tan math builtin, TIC54X: TIC54X-Builtins. (line 86) -* $tanh math builtin, TIC54X: TIC54X-Builtins. (line 89) -* $trunc math builtin, TIC54X: TIC54X-Builtins. (line 92) -* $x: AArch64 Mapping Symbols. - (line 9) -* %gp: RX-Modifiers. (line 6) -* %gpreg: RX-Modifiers. (line 22) -* %pidreg: RX-Modifiers. (line 25) -* -+ option, VAX/VMS: VAX-Opts. (line 71) -* --: Command Line. (line 10) -* --32 option, i386: i386-Options. (line 8) -* --32 option, x86-64: i386-Options. (line 8) -* --64 option, i386: i386-Options. (line 8) -* --64 option, x86-64: i386-Options. (line 8) -* --absolute-literals: Xtensa Options. (line 21) -* --allow-reg-prefix: SH Options. (line 9) -* --alternate: alternate. (line 6) -* --base-size-default-16: M68K-Opts. (line 65) -* --base-size-default-32: M68K-Opts. (line 65) -* --big: SH Options. (line 9) -* --bitwise-or option, M680x0: M68K-Opts. (line 58) -* --disp-size-default-16: M68K-Opts. (line 74) -* --disp-size-default-32: M68K-Opts. (line 74) -* --divide option, i386: i386-Options. (line 24) -* --dsp: SH Options. (line 9) -* --emulation=crisaout command line option, CRIS: CRIS-Opts. (line 9) -* --emulation=criself command line option, CRIS: CRIS-Opts. (line 9) -* --enforce-aligned-data: Sparc-Aligned-Data. (line 11) -* --fatal-warnings: W. (line 16) -* --fdpic: SH Options. (line 31) -* --fix-v4bx command line option, ARM: ARM Options. (line 173) -* --fixed-special-register-names command line option, MMIX: MMIX-Opts. - (line 8) -* --force-long-branches: M68HC11-Opts. (line 82) -* --generate-example: M68HC11-Opts. (line 99) -* --globalize-symbols command line option, MMIX: MMIX-Opts. (line 12) -* --gnu-syntax command line option, MMIX: MMIX-Opts. (line 16) -* --hash-size=NUMBER: Overview. (line 400) -* --linker-allocated-gregs command line option, MMIX: MMIX-Opts. - (line 67) -* --listing-cont-lines: listing. (line 34) -* --listing-lhs-width: listing. (line 16) -* --listing-lhs-width2: listing. (line 21) -* --listing-rhs-width: listing. (line 28) -* --little: SH Options. (line 9) -* --longcalls: Xtensa Options. (line 35) -* --march=ARCHITECTURE command line option, CRIS: CRIS-Opts. (line 34) -* --MD: MD. (line 6) -* --mul-bug-abort command line option, CRIS: CRIS-Opts. (line 62) -* --no-absolute-literals: Xtensa Options. (line 21) -* --no-expand command line option, MMIX: MMIX-Opts. (line 31) -* --no-longcalls: Xtensa Options. (line 35) -* --no-merge-gregs command line option, MMIX: MMIX-Opts. (line 36) -* --no-mul-bug-abort command line option, CRIS: CRIS-Opts. (line 62) -* --no-predefined-syms command line option, MMIX: MMIX-Opts. (line 22) -* --no-pushj-stubs command line option, MMIX: MMIX-Opts. (line 54) -* --no-stubs command line option, MMIX: MMIX-Opts. (line 54) -* --no-target-align: Xtensa Options. (line 28) -* --no-text-section-literals: Xtensa Options. (line 7) -* --no-transform: Xtensa Options. (line 44) -* --no-underscore command line option, CRIS: CRIS-Opts. (line 15) -* --no-warn: W. (line 11) -* --pcrel: M68K-Opts. (line 86) -* --pic command line option, CRIS: CRIS-Opts. (line 27) -* --print-insn-syntax <1>: XGATE-Opts. (line 25) -* --print-insn-syntax: M68HC11-Opts. (line 88) -* --print-opcodes <1>: XGATE-Opts. (line 29) -* --print-opcodes: M68HC11-Opts. (line 92) -* --register-prefix-optional option, M680x0: M68K-Opts. (line 45) -* --relax: SH Options. (line 9) -* --relax command line option, MMIX: MMIX-Opts. (line 19) -* --rename-section: Xtensa Options. (line 52) -* --renesas: SH Options. (line 9) -* --short-branches: M68HC11-Opts. (line 67) -* --small: SH Options. (line 9) -* --statistics: statistics. (line 6) -* --strict-direct-mode: M68HC11-Opts. (line 57) -* --target-align: Xtensa Options. (line 28) -* --text-section-literals: Xtensa Options. (line 7) -* --traditional-format: traditional-format. (line 6) -* --transform: Xtensa Options. (line 44) -* --underscore command line option, CRIS: CRIS-Opts. (line 15) -* --warn: W. (line 19) -* --x32 option, i386: i386-Options. (line 8) -* --x32 option, x86-64: i386-Options. (line 8) -* --xgate-ramoffset: M68HC11-Opts. (line 36) -* -1 option, VAX/VMS: VAX-Opts. (line 77) -* -32addr command line option, Alpha: Alpha Options. (line 57) -* -a: a. (line 6) -* -A options, i960: Options-i960. (line 6) -* -ac: a. (line 6) -* -ad: a. (line 6) -* -ag: a. (line 6) -* -ah: a. (line 6) -* -al: a. (line 6) -* -Aleon: Sparc-Opts. (line 25) -* -an: a. (line 6) -* -as: a. (line 6) -* -Asparc: Sparc-Opts. (line 25) -* -Asparcfmaf: Sparc-Opts. (line 25) -* -Asparcima: Sparc-Opts. (line 25) -* -Asparclet: Sparc-Opts. (line 25) -* -Asparclite: Sparc-Opts. (line 25) -* -Asparcvis: Sparc-Opts. (line 25) -* -Asparcvis2: Sparc-Opts. (line 25) -* -Asparcvis3: Sparc-Opts. (line 25) -* -Asparcvis3r: Sparc-Opts. (line 25) -* -Av6: Sparc-Opts. (line 25) -* -Av7: Sparc-Opts. (line 25) -* -Av8: Sparc-Opts. (line 25) -* -Av9: Sparc-Opts. (line 25) -* -Av9a: Sparc-Opts. (line 25) -* -Av9b: Sparc-Opts. (line 25) -* -Av9c: Sparc-Opts. (line 25) -* -Av9d: Sparc-Opts. (line 25) -* -Av9v: Sparc-Opts. (line 25) -* -b option, i960: Options-i960. (line 22) -* -big option, M32R: M32R-Opts. (line 35) -* -D: D. (line 6) -* -D, ignored on VAX: VAX-Opts. (line 11) -* -d, VAX option: VAX-Opts. (line 16) -* -eabi= command line option, ARM: ARM Options. (line 156) -* -EB command line option, AArch64: AArch64 Options. (line 6) -* -EB command line option, ARC: ARC Options. (line 31) -* -EB command line option, ARM: ARM Options. (line 161) -* -EB option (MIPS): MIPS Options. (line 13) -* -EB option, M32R: M32R-Opts. (line 39) -* -EB option, TILE-Gx: TILE-Gx Options. (line 11) -* -EL command line option, AArch64: AArch64 Options. (line 10) -* -EL command line option, ARC: ARC Options. (line 35) -* -EL command line option, ARM: ARM Options. (line 165) -* -EL option (MIPS): MIPS Options. (line 13) -* -EL option, M32R: M32R-Opts. (line 32) -* -EL option, TILE-Gx: TILE-Gx Options. (line 11) -* -f: f. (line 6) -* -F command line option, Alpha: Alpha Options. (line 57) -* -g command line option, Alpha: Alpha Options. (line 47) -* -G command line option, Alpha: Alpha Options. (line 53) -* -G option (MIPS): MIPS Options. (line 8) -* -h option, VAX/VMS: VAX-Opts. (line 45) -* -H option, VAX/VMS: VAX-Opts. (line 81) -* -I PATH: I. (line 6) -* -ignore-parallel-conflicts option, M32RX: M32R-Opts. (line 87) -* -Ip option, M32RX: M32R-Opts. (line 97) -* -J, ignored on VAX: VAX-Opts. (line 27) -* -K: K. (line 6) -* -k command line option, ARM: ARM Options. (line 169) -* -KPIC option, M32R: M32R-Opts. (line 42) -* -KPIC option, MIPS: MIPS Options. (line 21) -* -L: L. (line 6) -* -l option, M680x0: M68K-Opts. (line 33) -* -little option, M32R: M32R-Opts. (line 27) -* -M: M. (line 6) -* -m11/03: PDP-11-Options. (line 140) -* -m11/04: PDP-11-Options. (line 143) -* -m11/05: PDP-11-Options. (line 146) -* -m11/10: PDP-11-Options. (line 146) -* -m11/15: PDP-11-Options. (line 149) -* -m11/20: PDP-11-Options. (line 149) -* -m11/21: PDP-11-Options. (line 152) -* -m11/23: PDP-11-Options. (line 155) -* -m11/24: PDP-11-Options. (line 155) -* -m11/34: PDP-11-Options. (line 158) -* -m11/34a: PDP-11-Options. (line 161) -* -m11/35: PDP-11-Options. (line 164) -* -m11/40: PDP-11-Options. (line 164) -* -m11/44: PDP-11-Options. (line 167) -* -m11/45: PDP-11-Options. (line 170) -* -m11/50: PDP-11-Options. (line 170) -* -m11/53: PDP-11-Options. (line 173) -* -m11/55: PDP-11-Options. (line 170) -* -m11/60: PDP-11-Options. (line 176) -* -m11/70: PDP-11-Options. (line 170) -* -m11/73: PDP-11-Options. (line 173) -* -m11/83: PDP-11-Options. (line 173) -* -m11/84: PDP-11-Options. (line 173) -* -m11/93: PDP-11-Options. (line 173) -* -m11/94: PDP-11-Options. (line 173) -* -m16c option, M16C: M32C-Opts. (line 12) -* -m31 option, s390: s390 Options. (line 8) -* -m32 option, TILE-Gx: TILE-Gx Options. (line 8) -* -m32bit-doubles: RX-Opts. (line 9) -* -m32c option, M32C: M32C-Opts. (line 9) -* -m32r option, M32R: M32R-Opts. (line 21) -* -m32rx option, M32R2: M32R-Opts. (line 17) -* -m32rx option, M32RX: M32R-Opts. (line 9) -* -m4byte-align command line option, V850: V850 Options. (line 90) -* -m64 option, s390: s390 Options. (line 8) -* -m64 option, TILE-Gx: TILE-Gx Options. (line 8) -* -m64bit-doubles: RX-Opts. (line 15) -* -m68000 and related options: M68K-Opts. (line 98) -* -m68hc11: M68HC11-Opts. (line 9) -* -m68hc12: M68HC11-Opts. (line 14) -* -m68hcs12: M68HC11-Opts. (line 21) -* -m8byte-align command line option, V850: V850 Options. (line 86) -* -m[no-]68851 command line option, M680x0: M68K-Opts. (line 21) -* -m[no-]68881 command line option, M680x0: M68K-Opts. (line 21) -* -m[no-]div command line option, M680x0: M68K-Opts. (line 21) -* -m[no-]emac command line option, M680x0: M68K-Opts. (line 21) -* -m[no-]float command line option, M680x0: M68K-Opts. (line 21) -* -m[no-]mac command line option, M680x0: M68K-Opts. (line 21) -* -m[no-]usp command line option, M680x0: M68K-Opts. (line 21) -* -mabi= command line option, AArch64: AArch64 Options. (line 14) -* -madd-bnd-prefix option, i386: i386-Options. (line 124) -* -madd-bnd-prefix option, x86-64: i386-Options. (line 124) -* -mall: PDP-11-Options. (line 26) -* -mall-enabled command line option, LM32: LM32 Options. (line 30) -* -mall-extensions: PDP-11-Options. (line 26) -* -mall-opcodes command line option, AVR: AVR Options. (line 97) -* -mapcs-26 command line option, ARM: ARM Options. (line 128) -* -mapcs-32 command line option, ARM: ARM Options. (line 128) -* -mapcs-float command line option, ARM: ARM Options. (line 142) -* -mapcs-reentrant command line option, ARM: ARM Options. (line 147) -* -marc[5|6|7|8] command line option, ARC: ARC Options. (line 6) -* -march= command line option, ARM: ARM Options. (line 65) -* -march= command line option, M680x0: M68K-Opts. (line 8) -* -march= command line option, TIC6X: TIC6X Options. (line 6) -* -march= option, i386: i386-Options. (line 31) -* -march= option, s390: s390 Options. (line 25) -* -march= option, x86-64: i386-Options. (line 31) -* -matpcs command line option, ARM: ARM Options. (line 134) -* -mavxscalar= option, i386: i386-Options. (line 82) -* -mavxscalar= option, x86-64: i386-Options. (line 82) -* -mbarrel-shift-enabled command line option, LM32: LM32 Options. - (line 12) -* -mbig-endian: RX-Opts. (line 20) -* -mbreak-enabled command line option, LM32: LM32 Options. (line 27) -* -mcis: PDP-11-Options. (line 32) -* -mconstant-gp command line option, IA-64: IA-64 Options. (line 6) -* -mCPU command line option, Alpha: Alpha Options. (line 6) -* -mcpu option, cpu: TIC54X-Opts. (line 15) -* -mcpu=: RX-Opts. (line 75) -* -mcpu= command line option, ARM: ARM Options. (line 6) -* -mcpu= command line option, Blackfin: Blackfin Options. (line 6) -* -mcpu= command line option, M680x0: M68K-Opts. (line 14) -* -mcsm: PDP-11-Options. (line 43) -* -mdcache-enabled command line option, LM32: LM32 Options. (line 24) -* -mdebug command line option, Alpha: Alpha Options. (line 25) -* -mdivide-enabled command line option, LM32: LM32 Options. (line 9) -* -mdsbt command line option, TIC6X: TIC6X Options. (line 13) -* -me option, stderr redirect: TIC54X-Opts. (line 20) -* -meis: PDP-11-Options. (line 46) -* -mepiphany command line option, Epiphany: Epiphany Options. (line 9) -* -mepiphany16 command line option, Epiphany: Epiphany Options. - (line 13) -* -merrors-to-file option, stderr redirect: TIC54X-Opts. (line 20) -* -mesa option, s390: s390 Options. (line 17) -* -mevexlig= option, i386: i386-Options. (line 90) -* -mevexlig= option, x86-64: i386-Options. (line 90) -* -mevexwig= option, i386: i386-Options. (line 100) -* -mevexwig= option, x86-64: i386-Options. (line 100) -* -mf option, far-mode: TIC54X-Opts. (line 8) -* -mf11: PDP-11-Options. (line 122) -* -mfar-mode option, far-mode: TIC54X-Opts. (line 8) -* -mfdpic command line option, Blackfin: Blackfin Options. (line 19) -* -mfis: PDP-11-Options. (line 51) -* -mfloat-abi= command line option, ARM: ARM Options. (line 151) -* -mfp-11: PDP-11-Options. (line 56) -* -mfpp: PDP-11-Options. (line 56) -* -mfpu: PDP-11-Options. (line 56) -* -mfpu= command line option, ARM: ARM Options. (line 81) -* -mgcc-abi: RX-Opts. (line 63) -* -mgcc-abi command line option, V850: V850 Options. (line 79) -* -micache-enabled command line option, LM32: LM32 Options. (line 21) -* -mimplicit-it command line option, ARM: ARM Options. (line 112) -* -mint-register: RX-Opts. (line 57) -* -mip2022 option, IP2K: IP2K-Opts. (line 14) -* -mip2022ext option, IP2022: IP2K-Opts. (line 9) -* -mj11: PDP-11-Options. (line 126) -* -mka11: PDP-11-Options. (line 92) -* -mkb11: PDP-11-Options. (line 95) -* -mkd11a: PDP-11-Options. (line 98) -* -mkd11b: PDP-11-Options. (line 101) -* -mkd11d: PDP-11-Options. (line 104) -* -mkd11e: PDP-11-Options. (line 107) -* -mkd11f: PDP-11-Options. (line 110) -* -mkd11h: PDP-11-Options. (line 110) -* -mkd11k: PDP-11-Options. (line 114) -* -mkd11q: PDP-11-Options. (line 110) -* -mkd11z: PDP-11-Options. (line 118) -* -mkev11: PDP-11-Options. (line 51) -* -mlimited-eis: PDP-11-Options. (line 64) -* -mlittle-endian: RX-Opts. (line 26) -* -mlong <1>: M68HC11-Opts. (line 45) -* -mlong: XGATE-Opts. (line 13) -* -mlong-double <1>: XGATE-Opts. (line 21) -* -mlong-double: M68HC11-Opts. (line 53) -* -mm9s12x: M68HC11-Opts. (line 27) -* -mm9s12xg: M68HC11-Opts. (line 32) -* -mmcu= command line option, AVR: AVR Options. (line 6) -* -mmfpt: PDP-11-Options. (line 70) -* -mmicrocode: PDP-11-Options. (line 83) -* -mmnemonic= option, i386: i386-Options. (line 107) -* -mmnemonic= option, x86-64: i386-Options. (line 107) -* -mmultiply-enabled command line option, LM32: LM32 Options. (line 6) -* -mmutiproc: PDP-11-Options. (line 73) -* -mmxps: PDP-11-Options. (line 77) -* -mnaked-reg option, i386: i386-Options. (line 119) -* -mnaked-reg option, x86-64: i386-Options. (line 119) -* -mnan= command line option, MIPS: MIPS Options. (line 297) -* -mno-cis: PDP-11-Options. (line 32) -* -mno-csm: PDP-11-Options. (line 43) -* -mno-dsbt command line option, TIC6X: TIC6X Options. (line 13) -* -mno-eis: PDP-11-Options. (line 46) -* -mno-extensions: PDP-11-Options. (line 29) -* -mno-fdpic command line option, Blackfin: Blackfin Options. (line 22) -* -mno-fis: PDP-11-Options. (line 51) -* -mno-fp-11: PDP-11-Options. (line 56) -* -mno-fpp: PDP-11-Options. (line 56) -* -mno-fpu: PDP-11-Options. (line 56) -* -mno-kev11: PDP-11-Options. (line 51) -* -mno-limited-eis: PDP-11-Options. (line 64) -* -mno-mfpt: PDP-11-Options. (line 70) -* -mno-microcode: PDP-11-Options. (line 83) -* -mno-mutiproc: PDP-11-Options. (line 73) -* -mno-mxps: PDP-11-Options. (line 77) -* -mno-pic: PDP-11-Options. (line 11) -* -mno-pic command line option, TIC6X: TIC6X Options. (line 36) -* -mno-regnames option, s390: s390 Options. (line 35) -* -mno-skip-bug command line option, AVR: AVR Options. (line 100) -* -mno-spl: PDP-11-Options. (line 80) -* -mno-sym32: MIPS Options. (line 238) -* -mno-wrap command line option, AVR: AVR Options. (line 103) -* -mnopic command line option, Blackfin: Blackfin Options. (line 22) -* -mpic: PDP-11-Options. (line 11) -* -mpic command line option, TIC6X: TIC6X Options. (line 36) -* -mpid: RX-Opts. (line 50) -* -mpid= command line option, TIC6X: TIC6X Options. (line 23) -* -mregnames option, s390: s390 Options. (line 32) -* -mrelax command line option, V850: V850 Options. (line 72) -* -mrh850-abi command line option, V850: V850 Options. (line 82) -* -mrx-abi: RX-Opts. (line 69) -* -mshort <1>: M68HC11-Opts. (line 40) -* -mshort: XGATE-Opts. (line 8) -* -mshort-double <1>: XGATE-Opts. (line 17) -* -mshort-double: M68HC11-Opts. (line 49) -* -msign-extend-enabled command line option, LM32: LM32 Options. - (line 15) -* -msmall-data-limit: RX-Opts. (line 42) -* -mspl: PDP-11-Options. (line 80) -* -msse-check= option, i386: i386-Options. (line 72) -* -msse-check= option, x86-64: i386-Options. (line 72) -* -msse2avx option, i386: i386-Options. (line 68) -* -msse2avx option, x86-64: i386-Options. (line 68) -* -msym32: MIPS Options. (line 238) -* -msyntax= option, i386: i386-Options. (line 113) -* -msyntax= option, x86-64: i386-Options. (line 113) -* -mt11: PDP-11-Options. (line 130) -* -mthumb command line option, ARM: ARM Options. (line 103) -* -mthumb-interwork command line option, ARM: ARM Options. (line 108) -* -mtune= option, i386: i386-Options. (line 60) -* -mtune= option, x86-64: i386-Options. (line 60) -* -muse-conventional-section-names: RX-Opts. (line 33) -* -muse-renesas-section-names: RX-Opts. (line 37) -* -muser-enabled command line option, LM32: LM32 Options. (line 18) -* -mv850 command line option, V850: V850 Options. (line 23) -* -mv850any command line option, V850: V850 Options. (line 41) -* -mv850e command line option, V850: V850 Options. (line 29) -* -mv850e1 command line option, V850: V850 Options. (line 35) -* -mv850e2 command line option, V850: V850 Options. (line 51) -* -mv850e2v3 command line option, V850: V850 Options. (line 57) -* -mv850e2v4 command line option, V850: V850 Options. (line 63) -* -mv850e3v5 command line option, V850: V850 Options. (line 66) -* -mvxworks-pic option, MIPS: MIPS Options. (line 26) -* -mwarn-areg-zero option, s390: s390 Options. (line 38) -* -mwarn-deprecated command line option, ARM: ARM Options. (line 177) -* -mzarch option, s390: s390 Options. (line 17) -* -N command line option, CRIS: CRIS-Opts. (line 58) -* -nIp option, M32RX: M32R-Opts. (line 101) -* -no-bitinst, M32R2: M32R-Opts. (line 54) -* -no-ignore-parallel-conflicts option, M32RX: M32R-Opts. (line 93) -* -no-mdebug command line option, Alpha: Alpha Options. (line 25) -* -no-parallel option, M32RX: M32R-Opts. (line 51) -* -no-relax option, i960: Options-i960. (line 66) -* -no-warn-explicit-parallel-conflicts option, M32RX: M32R-Opts. - (line 79) -* -no-warn-unmatched-high option, M32R: M32R-Opts. (line 111) -* -nocpp ignored (MIPS): MIPS Options. (line 241) -* -noreplace command line option, Alpha: Alpha Options. (line 40) -* -o: o. (line 6) -* -O option, M32RX: M32R-Opts. (line 59) -* -parallel option, M32RX: M32R-Opts. (line 46) -* -R: R. (line 6) -* -r800 command line option, Z80: Z80 Options. (line 41) -* -relax command line option, Alpha: Alpha Options. (line 32) -* -replace command line option, Alpha: Alpha Options. (line 40) -* -S, ignored on VAX: VAX-Opts. (line 11) -* -t, ignored on VAX: VAX-Opts. (line 36) -* -T, ignored on VAX: VAX-Opts. (line 11) -* -v: v. (line 6) -* -V, redundant on VAX: VAX-Opts. (line 22) -* -version: v. (line 6) -* -W: W. (line 11) -* -warn-explicit-parallel-conflicts option, M32RX: M32R-Opts. (line 65) -* -warn-unmatched-high option, M32R: M32R-Opts. (line 105) -* -Wnp option, M32RX: M32R-Opts. (line 83) -* -Wnuh option, M32RX: M32R-Opts. (line 117) -* -Wp option, M32RX: M32R-Opts. (line 75) -* -wsigned_overflow command line option, V850: V850 Options. (line 9) -* -Wuh option, M32RX: M32R-Opts. (line 114) -* -wunsigned_overflow command line option, V850: V850 Options. - (line 16) -* -x command line option, MMIX: MMIX-Opts. (line 44) -* -z80 command line option, Z80: Z80 Options. (line 8) -* -z8001 command line option, Z8000: Z8000 Options. (line 6) -* -z8002 command line option, Z8000: Z8000 Options. (line 9) -* . (symbol): Dot. (line 6) -* .2byte directive, ARM: ARM Directives. (line 6) -* .4byte directive, ARM: ARM Directives. (line 6) -* .8byte directive, ARM: ARM Directives. (line 6) -* .align directive, ARM: ARM Directives. (line 11) -* .align directive, TILE-Gx: TILE-Gx Directives. (line 6) -* .align directive, TILEPro: TILEPro Directives. (line 6) -* .allow_suspicious_bundles directive, TILE-Gx: TILE-Gx Directives. - (line 10) -* .allow_suspicious_bundles directive, TILEPro: TILEPro Directives. - (line 10) -* .arch directive, ARM: ARM Directives. (line 18) -* .arch directive, TIC6X: TIC6X Directives. (line 10) -* .arch_extension directive, ARM: ARM Directives. (line 25) -* .arm directive, ARM: ARM Directives. (line 34) -* .big directive, M32RX: M32R-Directives. (line 88) -* .bss directive, AArch64: AArch64 Directives. (line 6) -* .bss directive, ARM: ARM Directives. (line 42) -* .c6xabi_attribute directive, TIC6X: TIC6X Directives. (line 20) -* .cantunwind directive, ARM: ARM Directives. (line 45) -* .cantunwind directive, TIC6X: TIC6X Directives. (line 13) -* .code directive, ARM: ARM Directives. (line 49) -* .cpu directive, ARM: ARM Directives. (line 53) -* .dn and .qn directives, ARM: ARM Directives. (line 60) -* .eabi_attribute directive, ARM: ARM Directives. (line 83) -* .ehtype directive, TIC6X: TIC6X Directives. (line 31) -* .endp directive, TIC6X: TIC6X Directives. (line 34) -* .even directive, ARM: ARM Directives. (line 111) -* .extend directive, ARM: ARM Directives. (line 114) -* .fnend directive, ARM: ARM Directives. (line 120) -* .fnstart directive, ARM: ARM Directives. (line 129) -* .force_thumb directive, ARM: ARM Directives. (line 132) -* .fpu directive, ARM: ARM Directives. (line 136) -* .global: MIPS insn. (line 12) -* .handlerdata directive, ARM: ARM Directives. (line 140) -* .handlerdata directive, TIC6X: TIC6X Directives. (line 39) -* .insn: MIPS insn. (line 6) -* .insn directive, s390: s390 Directives. (line 11) -* .inst directive, ARM: ARM Directives. (line 149) -* .ldouble directive, ARM: ARM Directives. (line 114) -* .little directive, M32RX: M32R-Directives. (line 82) -* .long directive, s390: s390 Directives. (line 16) -* .ltorg directive, AArch64: AArch64 Directives. (line 9) -* .ltorg directive, ARM: ARM Directives. (line 159) -* .ltorg directive, s390: s390 Directives. (line 88) -* .m32r directive, M32R: M32R-Directives. (line 66) -* .m32r2 directive, M32R2: M32R-Directives. (line 77) -* .m32rx directive, M32RX: M32R-Directives. (line 72) -* .machine directive, s390: s390 Directives. (line 93) -* .machinemode directive, s390: s390 Directives. (line 103) -* .movsp directive, ARM: ARM Directives. (line 173) -* .nan directive, MIPS: MIPS NaN Encodings. (line 6) -* .no_pointers directive, XStormy16: XStormy16 Directives. - (line 14) -* .nocmp directive, TIC6X: TIC6X Directives. (line 47) -* .o: Object. (line 6) -* .object_arch directive, ARM: ARM Directives. (line 178) -* .packed directive, ARM: ARM Directives. (line 184) -* .pad directive, ARM: ARM Directives. (line 37) -* .param on HPPA: HPPA Directives. (line 19) -* .personality directive, ARM: ARM Directives. (line 194) -* .personality directive, TIC6X: TIC6X Directives. (line 55) -* .personalityindex directive, ARM: ARM Directives. (line 197) -* .personalityindex directive, TIC6X: TIC6X Directives. (line 51) -* .pool directive, AArch64: AArch64 Directives. (line 23) -* .pool directive, ARM: ARM Directives. (line 201) -* .quad directive, s390: s390 Directives. (line 16) -* .req directive, AArch64: AArch64 Directives. (line 26) -* .req directive, ARM: ARM Directives. (line 204) -* .require_canonical_reg_names directive, TILE-Gx: TILE-Gx Directives. - (line 19) -* .require_canonical_reg_names directive, TILEPro: TILEPro Directives. - (line 19) -* .save directive, ARM: ARM Directives. (line 209) -* .scomm directive, TIC6X: TIC6X Directives. (line 58) -* .secrel32 directive, ARM: ARM Directives. (line 247) -* .set arch=CPU: MIPS ISA. (line 18) -* .set at: MIPS Macros. (line 42) -* .set at=REG: MIPS Macros. (line 36) -* .set autoextend: MIPS autoextend. (line 6) -* .set doublefloat: MIPS Floating-Point. (line 12) -* .set dsp: MIPS ASE Instruction Generation Overrides. - (line 21) -* .set dspr2: MIPS ASE Instruction Generation Overrides. - (line 26) -* .set hardfloat: MIPS Floating-Point. (line 6) -* .set insn32: MIPS assembly options. - (line 6) -* .set macro: MIPS Macros. (line 31) -* .set mcu: MIPS ASE Instruction Generation Overrides. - (line 37) -* .set mdmx: MIPS ASE Instruction Generation Overrides. - (line 16) -* .set mips3d: MIPS ASE Instruction Generation Overrides. - (line 6) -* .set mipsN: MIPS ISA. (line 6) -* .set mt: MIPS ASE Instruction Generation Overrides. - (line 32) -* .set noat: MIPS Macros. (line 42) -* .set noautoextend: MIPS autoextend. (line 6) -* .set nodsp: MIPS ASE Instruction Generation Overrides. - (line 21) -* .set nodspr2: MIPS ASE Instruction Generation Overrides. - (line 26) -* .set noinsn32: MIPS assembly options. - (line 6) -* .set nomacro: MIPS Macros. (line 31) -* .set nomcu: MIPS ASE Instruction Generation Overrides. - (line 37) -* .set nomdmx: MIPS ASE Instruction Generation Overrides. - (line 16) -* .set nomips3d: MIPS ASE Instruction Generation Overrides. - (line 6) -* .set nomt: MIPS ASE Instruction Generation Overrides. - (line 32) -* .set nosmartmips: MIPS ASE Instruction Generation Overrides. - (line 11) -* .set nosym32: MIPS Symbol Sizes. (line 6) -* .set novirt: MIPS ASE Instruction Generation Overrides. - (line 42) -* .set pop: MIPS Option Stack. (line 6) -* .set push: MIPS Option Stack. (line 6) -* .set singlefloat: MIPS Floating-Point. (line 12) -* .set smartmips: MIPS ASE Instruction Generation Overrides. - (line 11) -* .set softfloat: MIPS Floating-Point. (line 6) -* .set sym32: MIPS Symbol Sizes. (line 6) -* .set virt: MIPS ASE Instruction Generation Overrides. - (line 42) -* .setfp directive, ARM: ARM Directives. (line 233) -* .short directive, s390: s390 Directives. (line 16) -* .syntax directive, ARM: ARM Directives. (line 252) -* .thumb directive, ARM: ARM Directives. (line 256) -* .thumb_func directive, ARM: ARM Directives. (line 259) -* .thumb_set directive, ARM: ARM Directives. (line 270) -* .tlsdescseq directive, ARM: ARM Directives. (line 277) -* .unreq directive, AArch64: AArch64 Directives. (line 31) -* .unreq directive, ARM: ARM Directives. (line 282) -* .unwind_raw directive, ARM: ARM Directives. (line 293) -* .v850 directive, V850: V850 Directives. (line 14) -* .v850e directive, V850: V850 Directives. (line 20) -* .v850e1 directive, V850: V850 Directives. (line 26) -* .v850e2 directive, V850: V850 Directives. (line 32) -* .v850e2v3 directive, V850: V850 Directives. (line 38) -* .v850e2v4 directive, V850: V850 Directives. (line 44) -* .v850e3v5 directive, V850: V850 Directives. (line 50) -* .vsave directive, ARM: ARM Directives. (line 300) -* .z8001: Z8000 Directives. (line 11) -* .z8002: Z8000 Directives. (line 15) -* 16-bit code, i386: i386-16bit. (line 6) -* 16bit_pointers directive, XStormy16: XStormy16 Directives. - (line 6) -* 16byte directive, Nios II: Nios II Directives. (line 28) -* 2byte directive, ARC: ARC Directives. (line 9) -* 2byte directive, Nios II: Nios II Directives. (line 19) -* 32bit_pointers directive, XStormy16: XStormy16 Directives. - (line 10) -* 3byte directive, ARC: ARC Directives. (line 12) -* 3DNow!, i386: i386-SIMD. (line 6) -* 3DNow!, x86-64: i386-SIMD. (line 6) -* 430 support: MSP430-Dependent. (line 6) -* 4byte directive, ARC: ARC Directives. (line 15) -* 4byte directive, Nios II: Nios II Directives. (line 22) -* 8byte directive, Nios II: Nios II Directives. (line 25) -* : (label): Statements. (line 31) -* @hi pseudo-op, XStormy16: XStormy16 Opcodes. (line 21) -* @lo pseudo-op, XStormy16: XStormy16 Opcodes. (line 10) -* @word modifier, D10V: D10V-Word. (line 6) -* \" (doublequote character): Strings. (line 43) -* \\ (\ character): Strings. (line 40) -* \b (backspace character): Strings. (line 15) -* \DDD (octal character code): Strings. (line 30) -* \f (formfeed character): Strings. (line 18) -* \n (newline character): Strings. (line 21) -* \r (carriage return character): Strings. (line 24) -* \t (tab): Strings. (line 27) -* \XD... (hex character code): Strings. (line 36) -* _ opcode prefix: Xtensa Opcodes. (line 9) -* a.out: Object. (line 6) -* a.out symbol attributes: a.out Symbols. (line 6) -* A_DIR environment variable, TIC54X: TIC54X-Env. (line 6) -* AArch64 floating point (IEEE): AArch64 Floating Point. - (line 6) -* AArch64 immediate character: AArch64-Chars. (line 13) -* AArch64 line comment character: AArch64-Chars. (line 6) -* AArch64 line separator: AArch64-Chars. (line 10) -* AArch64 machine directives: AArch64 Directives. (line 6) -* AArch64 opcodes: AArch64 Opcodes. (line 6) -* AArch64 options (none): AArch64 Options. (line 6) -* AArch64 register names: AArch64-Regs. (line 6) -* AArch64 relocations: AArch64-Relocations. (line 6) -* AArch64 support: AArch64-Dependent. (line 6) -* ABI options, SH64: SH64 Options. (line 29) -* abort directive: Abort. (line 6) -* ABORT directive: ABORT (COFF). (line 6) -* absolute section: Ld Sections. (line 29) -* absolute-literals directive: Absolute Literals Directive. - (line 6) -* ADDI instructions, relaxation: Xtensa Immediate Relaxation. - (line 43) -* addition, permitted arguments: Infix Ops. (line 44) -* addresses: Expressions. (line 6) -* addresses, format of: Secs Background. (line 68) -* addressing modes, D10V: D10V-Addressing. (line 6) -* addressing modes, D30V: D30V-Addressing. (line 6) -* addressing modes, H8/300: H8/300-Addressing. (line 6) -* addressing modes, M680x0: M68K-Syntax. (line 21) -* addressing modes, M68HC11: M68HC11-Syntax. (line 30) -* addressing modes, SH: SH-Addressing. (line 6) -* addressing modes, SH64: SH64-Addressing. (line 6) -* addressing modes, XGATE: XGATE-Syntax. (line 29) -* addressing modes, Z8000: Z8000-Addressing. (line 6) -* ADR reg,<label> pseudo op, ARM: ARM Opcodes. (line 25) -* ADRL reg,<label> pseudo op, ARM: ARM Opcodes. (line 35) -* ADRP, ADD, LDR/STR group relocations, AArch64: AArch64-Relocations. - (line 14) -* advancing location counter: Org. (line 6) -* align directive: Align. (line 6) -* align directive, Nios II: Nios II Directives. (line 6) -* align directive, SPARC: Sparc-Directives. (line 9) -* align directive, TIC54X: TIC54X-Directives. (line 6) -* aligned instruction bundle: Bundle directives. (line 6) -* alignment for NEON instructions: ARM-Neon-Alignment. (line 6) -* alignment of branch targets: Xtensa Automatic Alignment. - (line 6) -* alignment of LOOP instructions: Xtensa Automatic Alignment. - (line 6) -* Alpha floating point (IEEE): Alpha Floating Point. - (line 6) -* Alpha line comment character: Alpha-Chars. (line 6) -* Alpha line separator: Alpha-Chars. (line 11) -* Alpha notes: Alpha Notes. (line 6) -* Alpha options: Alpha Options. (line 6) -* Alpha registers: Alpha-Regs. (line 6) -* Alpha relocations: Alpha-Relocs. (line 6) -* Alpha support: Alpha-Dependent. (line 6) -* Alpha Syntax: Alpha Options. (line 61) -* Alpha-only directives: Alpha Directives. (line 10) -* Altera Nios II support: NiosII-Dependent. (line 6) -* altered difference tables: Word. (line 12) -* alternate syntax for the 680x0: M68K-Moto-Syntax. (line 6) -* ARC floating point (IEEE): ARC Floating Point. (line 6) -* ARC line comment character: ARC-Chars. (line 6) -* ARC line separator: ARC-Chars. (line 12) -* ARC machine directives: ARC Directives. (line 6) -* ARC opcodes: ARC Opcodes. (line 6) -* ARC options (none): ARC Options. (line 6) -* ARC register names: ARC-Regs. (line 6) -* ARC support: ARC-Dependent. (line 6) -* arc5 arc5, ARC: ARC Options. (line 10) -* arc6 arc6, ARC: ARC Options. (line 13) -* arc7 arc7, ARC: ARC Options. (line 21) -* arc8 arc8, ARC: ARC Options. (line 24) -* arch directive, i386: i386-Arch. (line 6) -* arch directive, M680x0: M68K-Directives. (line 22) -* arch directive, MSP 430: MSP430 Directives. (line 18) -* arch directive, x86-64: i386-Arch. (line 6) -* architecture options, i960: Options-i960. (line 6) -* architecture options, IP2022: IP2K-Opts. (line 9) -* architecture options, IP2K: IP2K-Opts. (line 14) -* architecture options, M16C: M32C-Opts. (line 12) -* architecture options, M32C: M32C-Opts. (line 9) -* architecture options, M32R: M32R-Opts. (line 21) -* architecture options, M32R2: M32R-Opts. (line 17) -* architecture options, M32RX: M32R-Opts. (line 9) -* architecture options, M680x0: M68K-Opts. (line 98) -* Architecture variant option, CRIS: CRIS-Opts. (line 34) -* architectures, Meta: Meta Options. (line 6) -* architectures, PowerPC: PowerPC-Opts. (line 6) -* architectures, SCORE: SCORE-Opts. (line 6) -* architectures, SPARC: Sparc-Opts. (line 6) -* arguments for addition: Infix Ops. (line 44) -* arguments for subtraction: Infix Ops. (line 49) -* arguments in expressions: Arguments. (line 6) -* arithmetic functions: Operators. (line 6) -* arithmetic operands: Arguments. (line 6) -* ARM data relocations: ARM-Relocations. (line 6) -* ARM floating point (IEEE): ARM Floating Point. (line 6) -* ARM identifiers: ARM-Chars. (line 19) -* ARM immediate character: ARM-Chars. (line 17) -* ARM line comment character: ARM-Chars. (line 6) -* ARM line separator: ARM-Chars. (line 14) -* ARM machine directives: ARM Directives. (line 6) -* ARM opcodes: ARM Opcodes. (line 6) -* ARM options (none): ARM Options. (line 6) -* ARM register names: ARM-Regs. (line 6) -* ARM support: ARM-Dependent. (line 6) -* ascii directive: Ascii. (line 6) -* asciz directive: Asciz. (line 6) -* asg directive, TIC54X: TIC54X-Directives. (line 20) -* assembler bugs, reporting: Bug Reporting. (line 6) -* assembler crash: Bug Criteria. (line 9) -* assembler directive .3byte, RX: RX-Directives. (line 9) -* assembler directive .arch, CRIS: CRIS-Pseudos. (line 45) -* assembler directive .dword, CRIS: CRIS-Pseudos. (line 12) -* assembler directive .far, M68HC11: M68HC11-Directives. (line 20) -* assembler directive .fetchalign, RX: RX-Directives. (line 13) -* assembler directive .interrupt, M68HC11: M68HC11-Directives. - (line 26) -* assembler directive .mode, M68HC11: M68HC11-Directives. (line 16) -* assembler directive .relax, M68HC11: M68HC11-Directives. (line 10) -* assembler directive .syntax, CRIS: CRIS-Pseudos. (line 17) -* assembler directive .xrefb, M68HC11: M68HC11-Directives. (line 31) -* assembler directive BSPEC, MMIX: MMIX-Pseudos. (line 131) -* assembler directive BYTE, MMIX: MMIX-Pseudos. (line 97) -* assembler directive ESPEC, MMIX: MMIX-Pseudos. (line 131) -* assembler directive GREG, MMIX: MMIX-Pseudos. (line 50) -* assembler directive IS, MMIX: MMIX-Pseudos. (line 42) -* assembler directive LOC, MMIX: MMIX-Pseudos. (line 7) -* assembler directive LOCAL, MMIX: MMIX-Pseudos. (line 28) -* assembler directive OCTA, MMIX: MMIX-Pseudos. (line 108) -* assembler directive PREFIX, MMIX: MMIX-Pseudos. (line 120) -* assembler directive TETRA, MMIX: MMIX-Pseudos. (line 108) -* assembler directive WYDE, MMIX: MMIX-Pseudos. (line 108) -* assembler directives, CRIS: CRIS-Pseudos. (line 6) -* assembler directives, M68HC11: M68HC11-Directives. (line 6) -* assembler directives, M68HC12: M68HC11-Directives. (line 6) -* assembler directives, MMIX: MMIX-Pseudos. (line 6) -* assembler directives, RL78: RL78-Directives. (line 6) -* assembler directives, RX: RX-Directives. (line 6) -* assembler directives, XGATE: XGATE-Directives. (line 6) -* assembler internal logic error: As Sections. (line 13) -* assembler version: v. (line 6) -* assembler, and linker: Secs Background. (line 10) -* assembly listings, enabling: a. (line 6) -* assigning values to symbols <1>: Equ. (line 6) -* assigning values to symbols: Setting Symbols. (line 6) -* at register, MIPS: MIPS Macros. (line 36) -* atmp directive, i860: Directives-i860. (line 16) -* att_syntax pseudo op, i386: i386-Variations. (line 6) -* att_syntax pseudo op, x86-64: i386-Variations. (line 6) -* attributes, symbol: Symbol Attributes. (line 6) -* auxiliary attributes, COFF symbols: COFF Symbols. (line 19) -* auxiliary symbol information, COFF: Dim. (line 6) -* AVR line comment character: AVR-Chars. (line 6) -* AVR line separator: AVR-Chars. (line 14) -* AVR modifiers: AVR-Modifiers. (line 6) -* AVR opcode summary: AVR Opcodes. (line 6) -* AVR options (none): AVR Options. (line 6) -* AVR register names: AVR-Regs. (line 6) -* AVR support: AVR-Dependent. (line 6) -* backslash (\\): Strings. (line 40) -* backspace (\b): Strings. (line 15) -* balign directive: Balign. (line 6) -* balignl directive: Balign. (line 27) -* balignw directive: Balign. (line 27) -* bes directive, TIC54X: TIC54X-Directives. (line 196) -* big endian output, MIPS: Overview. (line 740) -* big endian output, PJ: Overview. (line 643) -* big-endian output, MIPS: MIPS Options. (line 13) -* big-endian output, TIC6X: TIC6X Options. (line 46) -* bignums: Bignums. (line 6) -* binary constants, TIC54X: TIC54X-Constants. (line 8) -* binary files, including: Incbin. (line 6) -* binary integers: Integers. (line 6) -* bit names, IA-64: IA-64-Bits. (line 6) -* bitfields, not supported on VAX: VAX-no. (line 6) -* Blackfin directives: Blackfin Directives. (line 6) -* Blackfin options (none): Blackfin Options. (line 6) -* Blackfin support: Blackfin-Dependent. (line 6) -* Blackfin syntax: Blackfin Syntax. (line 6) -* block: Z8000 Directives. (line 55) -* BMI, i386: i386-BMI. (line 6) -* BMI, x86-64: i386-BMI. (line 6) -* branch improvement, M680x0: M68K-Branch. (line 6) -* branch improvement, M68HC11: M68HC11-Branch. (line 6) -* branch improvement, VAX: VAX-branch. (line 6) -* branch instructions, relaxation: Xtensa Branch Relaxation. - (line 6) -* branch recording, i960: Options-i960. (line 22) -* branch statistics table, i960: Options-i960. (line 40) -* branch target alignment: Xtensa Automatic Alignment. - (line 6) -* break directive, TIC54X: TIC54X-Directives. (line 143) -* BSD syntax: PDP-11-Syntax. (line 6) -* bss directive, i960: Directives-i960. (line 6) -* bss directive, TIC54X: TIC54X-Directives. (line 29) -* bss section <1>: Ld Sections. (line 20) -* bss section: bss. (line 6) -* bug criteria: Bug Criteria. (line 6) -* bug reports: Bug Reporting. (line 6) -* bugs in assembler: Reporting Bugs. (line 6) -* Built-in symbols, CRIS: CRIS-Symbols. (line 6) -* builtin math functions, TIC54X: TIC54X-Builtins. (line 6) -* builtin subsym functions, TIC54X: TIC54X-Macros. (line 16) -* bundle: Bundle directives. (line 6) -* bundle-locked: Bundle directives. (line 35) -* bundle_align_mode directive: Bundle directives. (line 6) -* bundle_lock directive: Bundle directives. (line 28) -* bundle_unlock directive: Bundle directives. (line 28) -* bus lock prefixes, i386: i386-Prefixes. (line 36) -* bval: Z8000 Directives. (line 30) -* byte directive: Byte. (line 6) -* byte directive, TIC54X: TIC54X-Directives. (line 36) -* C54XDSP_DIR environment variable, TIC54X: TIC54X-Env. (line 6) -* c_mode directive, TIC54X: TIC54X-Directives. (line 51) -* call directive, Nios II: Nios II Relocations. (line 38) -* call instructions, i386: i386-Mnemonics. (line 56) -* call instructions, relaxation: Xtensa Call Relaxation. - (line 6) -* call instructions, x86-64: i386-Mnemonics. (line 56) -* callj, i960 pseudo-opcode: callj-i960. (line 6) -* carriage return (\r): Strings. (line 24) -* case sensitivity, Z80: Z80-Case. (line 6) -* cfi_endproc directive: CFI directives. (line 26) -* cfi_sections directive: CFI directives. (line 6) -* cfi_startproc directive: CFI directives. (line 16) -* char directive, TIC54X: TIC54X-Directives. (line 36) -* character constant, Z80: Z80-Chars. (line 20) -* character constants: Characters. (line 6) -* character escape codes: Strings. (line 15) -* character escapes, Z80: Z80-Chars. (line 18) -* character, single: Chars. (line 6) -* characters used in symbols: Symbol Intro. (line 6) -* clink directive, TIC54X: TIC54X-Directives. (line 45) -* code16 directive, i386: i386-16bit. (line 6) -* code16gcc directive, i386: i386-16bit. (line 6) -* code32 directive, i386: i386-16bit. (line 6) -* code64 directive, i386: i386-16bit. (line 6) -* code64 directive, x86-64: i386-16bit. (line 6) -* COFF auxiliary symbol information: Dim. (line 6) -* COFF structure debugging: Tag. (line 6) -* COFF symbol attributes: COFF Symbols. (line 6) -* COFF symbol descriptor: Desc. (line 6) -* COFF symbol storage class: Scl. (line 6) -* COFF symbol type: Type. (line 11) -* COFF symbols, debugging: Def. (line 6) -* COFF value attribute: Val. (line 6) -* COMDAT: Linkonce. (line 6) -* comm directive: Comm. (line 6) -* command line conventions: Command Line. (line 6) -* command line options, V850: V850 Options. (line 9) -* command-line options ignored, VAX: VAX-Opts. (line 6) -* comment character, XStormy16: XStormy16-Chars. (line 11) -* comments: Comments. (line 6) -* comments, M680x0: M68K-Chars. (line 6) -* comments, removed by preprocessor: Preprocessing. (line 11) -* common directive, SPARC: Sparc-Directives. (line 12) -* common sections: Linkonce. (line 6) -* common variable storage: bss. (line 6) -* compare and jump expansions, i960: Compare-and-branch-i960. - (line 13) -* compare/branch instructions, i960: Compare-and-branch-i960. - (line 6) -* comparison expressions: Infix Ops. (line 55) -* conditional assembly: If. (line 6) -* constant, single character: Chars. (line 6) -* constants: Constants. (line 6) -* constants, bignum: Bignums. (line 6) -* constants, character: Characters. (line 6) -* constants, converted by preprocessor: Preprocessing. (line 14) -* constants, floating point: Flonums. (line 6) -* constants, integer: Integers. (line 6) -* constants, number: Numbers. (line 6) -* constants, Sparc: Sparc-Constants. (line 6) -* constants, string: Strings. (line 6) -* constants, TIC54X: TIC54X-Constants. (line 6) -* conversion instructions, i386: i386-Mnemonics. (line 37) -* conversion instructions, x86-64: i386-Mnemonics. (line 37) -* coprocessor wait, i386: i386-Prefixes. (line 40) -* copy directive, TIC54X: TIC54X-Directives. (line 54) -* cpu directive, M680x0: M68K-Directives. (line 30) -* cpu directive, MSP 430: MSP430 Directives. (line 22) -* CR16 line comment character: CR16-Chars. (line 6) -* CR16 line separator: CR16-Chars. (line 13) -* CR16 Operand Qualifiers: CR16 Operand Qualifiers. - (line 6) -* CR16 support: CR16-Dependent. (line 6) -* crash of assembler: Bug Criteria. (line 9) -* CRIS --emulation=crisaout command line option: CRIS-Opts. (line 9) -* CRIS --emulation=criself command line option: CRIS-Opts. (line 9) -* CRIS --march=ARCHITECTURE command line option: CRIS-Opts. (line 34) -* CRIS --mul-bug-abort command line option: CRIS-Opts. (line 62) -* CRIS --no-mul-bug-abort command line option: CRIS-Opts. (line 62) -* CRIS --no-underscore command line option: CRIS-Opts. (line 15) -* CRIS --pic command line option: CRIS-Opts. (line 27) -* CRIS --underscore command line option: CRIS-Opts. (line 15) -* CRIS -N command line option: CRIS-Opts. (line 58) -* CRIS architecture variant option: CRIS-Opts. (line 34) -* CRIS assembler directive .arch: CRIS-Pseudos. (line 45) -* CRIS assembler directive .dword: CRIS-Pseudos. (line 12) -* CRIS assembler directive .syntax: CRIS-Pseudos. (line 17) -* CRIS assembler directives: CRIS-Pseudos. (line 6) -* CRIS built-in symbols: CRIS-Symbols. (line 6) -* CRIS instruction expansion: CRIS-Expand. (line 6) -* CRIS line comment characters: CRIS-Chars. (line 6) -* CRIS options: CRIS-Opts. (line 6) -* CRIS position-independent code: CRIS-Opts. (line 27) -* CRIS pseudo-op .arch: CRIS-Pseudos. (line 45) -* CRIS pseudo-op .dword: CRIS-Pseudos. (line 12) -* CRIS pseudo-op .syntax: CRIS-Pseudos. (line 17) -* CRIS pseudo-ops: CRIS-Pseudos. (line 6) -* CRIS register names: CRIS-Regs. (line 6) -* CRIS support: CRIS-Dependent. (line 6) -* CRIS symbols in position-independent code: CRIS-Pic. (line 6) -* ctbp register, V850: V850-Regs. (line 131) -* ctoff pseudo-op, V850: V850 Opcodes. (line 111) -* ctpc register, V850: V850-Regs. (line 119) -* ctpsw register, V850: V850-Regs. (line 122) -* current address: Dot. (line 6) -* current address, advancing: Org. (line 6) -* D10V @word modifier: D10V-Word. (line 6) -* D10V addressing modes: D10V-Addressing. (line 6) -* D10V floating point: D10V-Float. (line 6) -* D10V line comment character: D10V-Chars. (line 6) -* D10V opcode summary: D10V-Opcodes. (line 6) -* D10V optimization: Overview. (line 503) -* D10V options: D10V-Opts. (line 6) -* D10V registers: D10V-Regs. (line 6) -* D10V size modifiers: D10V-Size. (line 6) -* D10V sub-instruction ordering: D10V-Chars. (line 14) -* D10V sub-instructions: D10V-Subs. (line 6) -* D10V support: D10V-Dependent. (line 6) -* D10V syntax: D10V-Syntax. (line 6) -* D30V addressing modes: D30V-Addressing. (line 6) -* D30V floating point: D30V-Float. (line 6) -* D30V Guarded Execution: D30V-Guarded. (line 6) -* D30V line comment character: D30V-Chars. (line 6) -* D30V nops: Overview. (line 511) -* D30V nops after 32-bit multiply: Overview. (line 514) -* D30V opcode summary: D30V-Opcodes. (line 6) -* D30V optimization: Overview. (line 508) -* D30V options: D30V-Opts. (line 6) -* D30V registers: D30V-Regs. (line 6) -* D30V size modifiers: D30V-Size. (line 6) -* D30V sub-instruction ordering: D30V-Chars. (line 14) -* D30V sub-instructions: D30V-Subs. (line 6) -* D30V support: D30V-Dependent. (line 6) -* D30V syntax: D30V-Syntax. (line 6) -* data alignment on SPARC: Sparc-Aligned-Data. (line 6) -* data and text sections, joining: R. (line 6) -* data directive: Data. (line 6) -* data directive, TIC54X: TIC54X-Directives. (line 61) -* data relocations, ARM: ARM-Relocations. (line 6) -* data section: Ld Sections. (line 9) -* data1 directive, M680x0: M68K-Directives. (line 9) -* data2 directive, M680x0: M68K-Directives. (line 12) -* datalabel, SH64: SH64-Addressing. (line 16) -* dbpc register, V850: V850-Regs. (line 125) -* dbpsw register, V850: V850-Regs. (line 128) -* debuggers, and symbol order: Symbols. (line 10) -* debugging COFF symbols: Def. (line 6) -* DEC syntax: PDP-11-Syntax. (line 6) -* decimal integers: Integers. (line 12) -* def directive: Def. (line 6) -* def directive, TIC54X: TIC54X-Directives. (line 103) -* density instructions: Density Instructions. - (line 6) -* dependency tracking: MD. (line 6) -* deprecated directives: Deprecated. (line 6) -* desc directive: Desc. (line 6) -* descriptor, of a.out symbol: Symbol Desc. (line 6) -* dfloat directive, VAX: VAX-directives. (line 10) -* difference tables altered: Word. (line 12) -* difference tables, warning: K. (line 6) -* differences, mmixal: MMIX-mmixal. (line 6) -* dim directive: Dim. (line 6) -* directives and instructions: Statements. (line 20) -* directives for PowerPC: PowerPC-Pseudo. (line 6) -* directives for SCORE: SCORE-Pseudo. (line 6) -* directives, Blackfin: Blackfin Directives. (line 6) -* directives, M32R: M32R-Directives. (line 6) -* directives, M680x0: M68K-Directives. (line 6) -* directives, machine independent: Pseudo Ops. (line 6) -* directives, Xtensa: Xtensa Directives. (line 6) -* directives, Z8000: Z8000 Directives. (line 6) -* Disable floating-point instructions: MIPS Floating-Point. (line 6) -* Disable single-precision floating-point operations: MIPS Floating-Point. - (line 12) -* displacement sizing character, VAX: VAX-operands. (line 12) -* dollar local symbols: Symbol Names. (line 110) -* dot (symbol): Dot. (line 6) -* double directive: Double. (line 6) -* double directive, i386: i386-Float. (line 14) -* double directive, M680x0: M68K-Float. (line 14) -* double directive, M68HC11: M68HC11-Float. (line 14) -* double directive, RX: RX-Float. (line 11) -* double directive, TIC54X: TIC54X-Directives. (line 64) -* double directive, VAX: VAX-float. (line 15) -* double directive, x86-64: i386-Float. (line 14) -* double directive, XGATE: XGATE-Float. (line 13) -* doublequote (\"): Strings. (line 43) -* drlist directive, TIC54X: TIC54X-Directives. (line 73) -* drnolist directive, TIC54X: TIC54X-Directives. (line 73) -* dual directive, i860: Directives-i860. (line 6) -* dword directive, Nios II: Nios II Directives. (line 16) -* EB command line option, Nios II: Nios II Options. (line 23) -* ecr register, V850: V850-Regs. (line 113) -* eight-byte integer: Quad. (line 9) -* eipc register, V850: V850-Regs. (line 101) -* eipsw register, V850: V850-Regs. (line 104) -* eject directive: Eject. (line 6) -* EL command line option, Nios II: Nios II Options. (line 26) -* ELF symbol type: Type. (line 22) -* else directive: Else. (line 6) -* elseif directive: Elseif. (line 6) -* empty expressions: Empty Exprs. (line 6) -* emsg directive, TIC54X: TIC54X-Directives. (line 77) -* emulation: Overview. (line 876) -* encoding options, i386: i386-Mnemonics. (line 32) -* encoding options, x86-64: i386-Mnemonics. (line 32) -* end directive: End. (line 6) -* enddual directive, i860: Directives-i860. (line 11) -* endef directive: Endef. (line 6) -* endfunc directive: Endfunc. (line 6) -* endianness, MIPS: Overview. (line 740) -* endianness, PJ: Overview. (line 643) -* endif directive: Endif. (line 6) -* endloop directive, TIC54X: TIC54X-Directives. (line 143) -* endm directive: Macro. (line 138) -* endm directive, TIC54X: TIC54X-Directives. (line 153) -* endstruct directive, TIC54X: TIC54X-Directives. (line 216) -* endunion directive, TIC54X: TIC54X-Directives. (line 250) -* environment settings, TIC54X: TIC54X-Env. (line 6) -* EOF, newline must precede: Statements. (line 14) -* ep register, V850: V850-Regs. (line 95) -* Epiphany line comment character: Epiphany-Chars. (line 6) -* Epiphany line separator: Epiphany-Chars. (line 14) -* Epiphany options: Epiphany Options. (line 6) -* Epiphany support: Epiphany-Dependent. (line 6) -* equ directive: Equ. (line 6) -* equ directive, TIC54X: TIC54X-Directives. (line 191) -* equiv directive: Equiv. (line 6) -* eqv directive: Eqv. (line 6) -* err directive: Err. (line 6) -* error directive: Error. (line 6) -* error messages: Errors. (line 6) -* error on valid input: Bug Criteria. (line 12) -* errors, caused by warnings: W. (line 16) -* errors, continuing after: Z. (line 6) -* ESA/390 floating point (IEEE): ESA/390 Floating Point. - (line 6) -* ESA/390 support: ESA/390-Dependent. (line 6) -* ESA/390 Syntax: ESA/390 Options. (line 8) -* ESA/390-only directives: ESA/390 Directives. (line 12) -* escape codes, character: Strings. (line 15) -* eval directive, TIC54X: TIC54X-Directives. (line 24) -* even: Z8000 Directives. (line 58) -* even directive, M680x0: M68K-Directives. (line 15) -* even directive, TIC54X: TIC54X-Directives. (line 6) -* exitm directive: Macro. (line 141) -* expr (internal section): As Sections. (line 17) -* expression arguments: Arguments. (line 6) -* expressions: Expressions. (line 6) -* expressions, comparison: Infix Ops. (line 55) -* expressions, empty: Empty Exprs. (line 6) -* expressions, integer: Integer Exprs. (line 6) -* extAuxRegister directive, ARC: ARC Directives. (line 18) -* extCondCode directive, ARC: ARC Directives. (line 41) -* extCoreRegister directive, ARC: ARC Directives. (line 53) -* extend directive M680x0: M68K-Float. (line 17) -* extend directive M68HC11: M68HC11-Float. (line 17) -* extend directive XGATE: XGATE-Float. (line 16) -* extended directive, i960: Directives-i960. (line 13) -* extern directive: Extern. (line 6) -* extInstruction directive, ARC: ARC Directives. (line 78) -* fail directive: Fail. (line 6) -* far_mode directive, TIC54X: TIC54X-Directives. (line 82) -* faster processing (-f): f. (line 6) -* fatal signal: Bug Criteria. (line 9) -* fclist directive, TIC54X: TIC54X-Directives. (line 87) -* fcnolist directive, TIC54X: TIC54X-Directives. (line 87) -* fepc register, V850: V850-Regs. (line 107) -* fepsw register, V850: V850-Regs. (line 110) -* ffloat directive, VAX: VAX-directives. (line 14) -* field directive, TIC54X: TIC54X-Directives. (line 91) -* file directive: File. (line 6) -* file directive, MSP 430: MSP430 Directives. (line 6) -* file name, logical: File. (line 13) -* files, including: Include. (line 6) -* files, input: Input Files. (line 6) -* fill directive: Fill. (line 6) -* filling memory <1>: Skip. (line 6) -* filling memory: Space. (line 6) -* FLIX syntax: Xtensa Syntax. (line 6) -* float directive: Float. (line 6) -* float directive, i386: i386-Float. (line 14) -* float directive, M680x0: M68K-Float. (line 11) -* float directive, M68HC11: M68HC11-Float. (line 11) -* float directive, RX: RX-Float. (line 8) -* float directive, TIC54X: TIC54X-Directives. (line 64) -* float directive, VAX: VAX-float. (line 15) -* float directive, x86-64: i386-Float. (line 14) -* float directive, XGATE: XGATE-Float. (line 10) -* floating point numbers: Flonums. (line 6) -* floating point numbers (double): Double. (line 6) -* floating point numbers (single) <1>: Float. (line 6) -* floating point numbers (single): Single. (line 6) -* floating point, AArch64 (IEEE): AArch64 Floating Point. - (line 6) -* floating point, Alpha (IEEE): Alpha Floating Point. - (line 6) -* floating point, ARC (IEEE): ARC Floating Point. (line 6) -* floating point, ARM (IEEE): ARM Floating Point. (line 6) -* floating point, D10V: D10V-Float. (line 6) -* floating point, D30V: D30V-Float. (line 6) -* floating point, ESA/390 (IEEE): ESA/390 Floating Point. - (line 6) -* floating point, H8/300 (IEEE): H8/300 Floating Point. - (line 6) -* floating point, HPPA (IEEE): HPPA Floating Point. (line 6) -* floating point, i386: i386-Float. (line 6) -* floating point, i960 (IEEE): Floating Point-i960. (line 6) -* floating point, M680x0: M68K-Float. (line 6) -* floating point, M68HC11: M68HC11-Float. (line 6) -* floating point, MSP 430 (IEEE): MSP430 Floating Point. - (line 6) -* floating point, RX: RX-Float. (line 6) -* floating point, s390: s390 Floating Point. (line 6) -* floating point, SH (IEEE): SH Floating Point. (line 6) -* floating point, SPARC (IEEE): Sparc-Float. (line 6) -* floating point, V850 (IEEE): V850 Floating Point. (line 6) -* floating point, VAX: VAX-float. (line 6) -* floating point, x86-64: i386-Float. (line 6) -* floating point, XGATE: XGATE-Float. (line 6) -* floating point, Z80: Z80 Floating Point. (line 6) -* flonums: Flonums. (line 6) -* format of error messages: Errors. (line 24) -* format of warning messages: Errors. (line 12) -* formfeed (\f): Strings. (line 18) -* func directive: Func. (line 6) -* functions, in expressions: Operators. (line 6) -* gbr960, i960 postprocessor: Options-i960. (line 40) -* gfloat directive, VAX: VAX-directives. (line 18) -* global: Z8000 Directives. (line 21) -* global directive: Global. (line 6) -* global directive, TIC54X: TIC54X-Directives. (line 103) -* got directive, Nios II: Nios II Relocations. (line 38) -* gotoff directive, Nios II: Nios II Relocations. (line 38) -* gotoff_hiadj directive, Nios II: Nios II Relocations. (line 38) -* gotoff_lo directive, Nios II: Nios II Relocations. (line 38) -* gp register, MIPS: MIPS Small Data. (line 6) -* gp register, V850: V850-Regs. (line 17) -* gprel directive, Nios II: Nios II Relocations. (line 26) -* grouping data: Sub-Sections. (line 6) -* H8/300 addressing modes: H8/300-Addressing. (line 6) -* H8/300 floating point (IEEE): H8/300 Floating Point. - (line 6) -* H8/300 line comment character: H8/300-Chars. (line 6) -* H8/300 line separator: H8/300-Chars. (line 8) -* H8/300 machine directives (none): H8/300 Directives. (line 6) -* H8/300 opcode summary: H8/300 Opcodes. (line 6) -* H8/300 options: H8/300 Options. (line 6) -* H8/300 registers: H8/300-Regs. (line 6) -* H8/300 size suffixes: H8/300 Opcodes. (line 163) -* H8/300 support: H8/300-Dependent. (line 6) -* H8/300H, assembling for: H8/300 Directives. (line 8) -* half directive, ARC: ARC Directives. (line 153) -* half directive, Nios II: Nios II Directives. (line 10) -* half directive, SPARC: Sparc-Directives. (line 17) -* half directive, TIC54X: TIC54X-Directives. (line 111) -* hex character code (\XD...): Strings. (line 36) -* hexadecimal integers: Integers. (line 15) -* hexadecimal prefix, Z80: Z80-Chars. (line 15) -* hfloat directive, VAX: VAX-directives. (line 22) -* hi directive, Nios II: Nios II Relocations. (line 20) -* hi pseudo-op, V850: V850 Opcodes. (line 33) -* hi0 pseudo-op, V850: V850 Opcodes. (line 10) -* hiadj directive, Nios II: Nios II Relocations. (line 6) -* hidden directive: Hidden. (line 6) -* high directive, M32R: M32R-Directives. (line 18) -* hilo pseudo-op, V850: V850 Opcodes. (line 55) -* HPPA directives not supported: HPPA Directives. (line 11) -* HPPA floating point (IEEE): HPPA Floating Point. (line 6) -* HPPA Syntax: HPPA Options. (line 8) -* HPPA-only directives: HPPA Directives. (line 24) -* hword directive: hword. (line 6) -* i370 support: ESA/390-Dependent. (line 6) -* i386 16-bit code: i386-16bit. (line 6) -* i386 arch directive: i386-Arch. (line 6) -* i386 att_syntax pseudo op: i386-Variations. (line 6) -* i386 conversion instructions: i386-Mnemonics. (line 37) -* i386 floating point: i386-Float. (line 6) -* i386 immediate operands: i386-Variations. (line 15) -* i386 instruction naming: i386-Mnemonics. (line 6) -* i386 instruction prefixes: i386-Prefixes. (line 6) -* i386 intel_syntax pseudo op: i386-Variations. (line 6) -* i386 jump optimization: i386-Jumps. (line 6) -* i386 jump, call, return: i386-Variations. (line 41) -* i386 jump/call operands: i386-Variations. (line 15) -* i386 line comment character: i386-Chars. (line 6) -* i386 line separator: i386-Chars. (line 18) -* i386 memory references: i386-Memory. (line 6) -* i386 mnemonic compatibility: i386-Mnemonics. (line 62) -* i386 mul, imul instructions: i386-Notes. (line 6) -* i386 options: i386-Options. (line 6) -* i386 register operands: i386-Variations. (line 15) -* i386 registers: i386-Regs. (line 6) -* i386 sections: i386-Variations. (line 47) -* i386 size suffixes: i386-Variations. (line 29) -* i386 source, destination operands: i386-Variations. (line 22) -* i386 support: i386-Dependent. (line 6) -* i386 syntax compatibility: i386-Variations. (line 6) -* i80386 support: i386-Dependent. (line 6) -* i860 line comment character: i860-Chars. (line 6) -* i860 line separator: i860-Chars. (line 14) -* i860 machine directives: Directives-i860. (line 6) -* i860 opcodes: Opcodes for i860. (line 6) -* i860 support: i860-Dependent. (line 6) -* i960 architecture options: Options-i960. (line 6) -* i960 branch recording: Options-i960. (line 22) -* i960 callj pseudo-opcode: callj-i960. (line 6) -* i960 compare and jump expansions: Compare-and-branch-i960. - (line 13) -* i960 compare/branch instructions: Compare-and-branch-i960. - (line 6) -* i960 floating point (IEEE): Floating Point-i960. (line 6) -* i960 line comment character: i960-Chars. (line 6) -* i960 line separator: i960-Chars. (line 14) -* i960 machine directives: Directives-i960. (line 6) -* i960 opcodes: Opcodes for i960. (line 6) -* i960 options: Options-i960. (line 6) -* i960 support: i960-Dependent. (line 6) -* IA-64 line comment character: IA-64-Chars. (line 6) -* IA-64 line separator: IA-64-Chars. (line 8) -* IA-64 options: IA-64 Options. (line 6) -* IA-64 Processor-status-Register bit names: IA-64-Bits. (line 6) -* IA-64 registers: IA-64-Regs. (line 6) -* IA-64 relocations: IA-64-Relocs. (line 6) -* IA-64 support: IA-64-Dependent. (line 6) -* IA-64 Syntax: IA-64 Options. (line 87) -* ident directive: Ident. (line 6) -* identifiers, ARM: ARM-Chars. (line 19) -* identifiers, MSP 430: MSP430-Chars. (line 17) -* if directive: If. (line 6) -* ifb directive: If. (line 21) -* ifc directive: If. (line 25) -* ifdef directive: If. (line 16) -* ifeq directive: If. (line 33) -* ifeqs directive: If. (line 36) -* ifge directive: If. (line 40) -* ifgt directive: If. (line 44) -* ifle directive: If. (line 48) -* iflt directive: If. (line 52) -* ifnb directive: If. (line 56) -* ifnc directive: If. (line 61) -* ifndef directive: If. (line 65) -* ifne directive: If. (line 72) -* ifnes directive: If. (line 76) -* ifnotdef directive: If. (line 65) -* immediate character, AArch64: AArch64-Chars. (line 13) -* immediate character, ARM: ARM-Chars. (line 17) -* immediate character, M680x0: M68K-Chars. (line 13) -* immediate character, VAX: VAX-operands. (line 6) -* immediate fields, relaxation: Xtensa Immediate Relaxation. - (line 6) -* immediate operands, i386: i386-Variations. (line 15) -* immediate operands, x86-64: i386-Variations. (line 15) -* imul instruction, i386: i386-Notes. (line 6) -* imul instruction, x86-64: i386-Notes. (line 6) -* incbin directive: Incbin. (line 6) -* include directive: Include. (line 6) -* include directive search path: I. (line 6) -* indirect character, VAX: VAX-operands. (line 9) -* infix operators: Infix Ops. (line 6) -* inhibiting interrupts, i386: i386-Prefixes. (line 36) -* input: Input Files. (line 6) -* input file linenumbers: Input Files. (line 35) -* instruction aliases, s390: s390 Aliases. (line 6) -* instruction bundle: Bundle directives. (line 6) -* instruction expansion, CRIS: CRIS-Expand. (line 6) -* instruction expansion, MMIX: MMIX-Expand. (line 6) -* instruction formats, s390: s390 Formats. (line 6) -* instruction marker, s390: s390 Instruction Marker. - (line 6) -* instruction mnemonics, s390: s390 Mnemonics. (line 6) -* instruction naming, i386: i386-Mnemonics. (line 6) -* instruction naming, x86-64: i386-Mnemonics. (line 6) -* instruction operand modifier, s390: s390 Operand Modifier. - (line 6) -* instruction operands, s390: s390 Operands. (line 6) -* instruction prefixes, i386: i386-Prefixes. (line 6) -* instruction set, M680x0: M68K-opcodes. (line 6) -* instruction set, M68HC11: M68HC11-opcodes. (line 6) -* instruction set, XGATE: XGATE-opcodes. (line 6) -* instruction summary, AVR: AVR Opcodes. (line 6) -* instruction summary, D10V: D10V-Opcodes. (line 6) -* instruction summary, D30V: D30V-Opcodes. (line 6) -* instruction summary, H8/300: H8/300 Opcodes. (line 6) -* instruction summary, LM32: LM32 Opcodes. (line 6) -* instruction summary, SH: SH Opcodes. (line 6) -* instruction summary, SH64: SH64 Opcodes. (line 6) -* instruction summary, Z8000: Z8000 Opcodes. (line 6) -* instruction syntax, s390: s390 Syntax. (line 6) -* instructions and directives: Statements. (line 20) -* int directive: Int. (line 6) -* int directive, H8/300: H8/300 Directives. (line 6) -* int directive, i386: i386-Float. (line 21) -* int directive, TIC54X: TIC54X-Directives. (line 111) -* int directive, x86-64: i386-Float. (line 21) -* integer expressions: Integer Exprs. (line 6) -* integer, 16-byte: Octa. (line 6) -* integer, 8-byte: Quad. (line 9) -* integers: Integers. (line 6) -* integers, 16-bit: hword. (line 6) -* integers, 32-bit: Int. (line 6) -* integers, binary: Integers. (line 6) -* integers, decimal: Integers. (line 12) -* integers, hexadecimal: Integers. (line 15) -* integers, octal: Integers. (line 9) -* integers, one byte: Byte. (line 6) -* intel_syntax pseudo op, i386: i386-Variations. (line 6) -* intel_syntax pseudo op, x86-64: i386-Variations. (line 6) -* internal assembler sections: As Sections. (line 6) -* internal directive: Internal. (line 6) -* invalid input: Bug Criteria. (line 14) -* invocation summary: Overview. (line 6) -* IP2K architecture options: IP2K-Opts. (line 14) -* IP2K line comment character: IP2K-Chars. (line 6) -* IP2K line separator: IP2K-Chars. (line 14) -* IP2K options: IP2K-Opts. (line 6) -* IP2K support: IP2K-Dependent. (line 6) -* irp directive: Irp. (line 6) -* irpc directive: Irpc. (line 6) -* ISA options, SH64: SH64 Options. (line 6) -* joining text and data sections: R. (line 6) -* jump instructions, i386: i386-Mnemonics. (line 56) -* jump instructions, x86-64: i386-Mnemonics. (line 56) -* jump optimization, i386: i386-Jumps. (line 6) -* jump optimization, x86-64: i386-Jumps. (line 6) -* jump/call operands, i386: i386-Variations. (line 15) -* jump/call operands, x86-64: i386-Variations. (line 15) -* L16SI instructions, relaxation: Xtensa Immediate Relaxation. - (line 23) -* L16UI instructions, relaxation: Xtensa Immediate Relaxation. - (line 23) -* L32I instructions, relaxation: Xtensa Immediate Relaxation. - (line 23) -* L8UI instructions, relaxation: Xtensa Immediate Relaxation. - (line 23) -* label (:): Statements. (line 31) -* label directive, TIC54X: TIC54X-Directives. (line 123) -* labels: Labels. (line 6) -* lcomm directive: Lcomm. (line 6) -* lcomm directive, COFF: i386-Directives. (line 6) -* ld: Object. (line 15) -* ldouble directive M680x0: M68K-Float. (line 17) -* ldouble directive M68HC11: M68HC11-Float. (line 17) -* ldouble directive XGATE: XGATE-Float. (line 16) -* ldouble directive, TIC54X: TIC54X-Directives. (line 64) -* LDR reg,=<expr> pseudo op, AArch64: AArch64 Opcodes. (line 9) -* LDR reg,=<label> pseudo op, ARM: ARM Opcodes. (line 15) -* leafproc directive, i960: Directives-i960. (line 18) -* length directive, TIC54X: TIC54X-Directives. (line 127) -* length of symbols: Symbol Intro. (line 14) -* lflags directive (ignored): Lflags. (line 6) -* line comment character: Comments. (line 19) -* line comment character, AArch64: AArch64-Chars. (line 6) -* line comment character, Alpha: Alpha-Chars. (line 6) -* line comment character, ARC: ARC-Chars. (line 6) -* line comment character, ARM: ARM-Chars. (line 6) -* line comment character, AVR: AVR-Chars. (line 6) -* line comment character, CR16: CR16-Chars. (line 6) -* line comment character, D10V: D10V-Chars. (line 6) -* line comment character, D30V: D30V-Chars. (line 6) -* line comment character, Epiphany: Epiphany-Chars. (line 6) -* line comment character, H8/300: H8/300-Chars. (line 6) -* line comment character, i386: i386-Chars. (line 6) -* line comment character, i860: i860-Chars. (line 6) -* line comment character, i960: i960-Chars. (line 6) -* line comment character, IA-64: IA-64-Chars. (line 6) -* line comment character, IP2K: IP2K-Chars. (line 6) -* line comment character, LM32: LM32-Chars. (line 6) -* line comment character, M32C: M32C-Chars. (line 6) -* line comment character, M680x0: M68K-Chars. (line 6) -* line comment character, M68HC11: M68HC11-Syntax. (line 17) -* line comment character, Meta: Meta-Chars. (line 6) -* line comment character, MicroBlaze: MicroBlaze-Chars. (line 6) -* line comment character, MIPS: MIPS-Chars. (line 6) -* line comment character, MSP 430: MSP430-Chars. (line 6) -* line comment character, Nios II: Nios II Chars. (line 6) -* line comment character, NS32K: NS32K-Chars. (line 6) -* line comment character, PJ: PJ-Chars. (line 6) -* line comment character, PowerPC: PowerPC-Chars. (line 6) -* line comment character, RL78: RL78-Chars. (line 6) -* line comment character, RX: RX-Chars. (line 6) -* line comment character, s390: s390 Characters. (line 6) -* line comment character, SCORE: SCORE-Chars. (line 6) -* line comment character, SH: SH-Chars. (line 6) -* line comment character, SH64: SH64-Chars. (line 6) -* line comment character, Sparc: Sparc-Chars. (line 6) -* line comment character, TIC54X: TIC54X-Chars. (line 6) -* line comment character, TIC6X: TIC6X Syntax. (line 6) -* line comment character, V850: V850-Chars. (line 6) -* line comment character, VAX: VAX-Chars. (line 6) -* line comment character, XGATE: XGATE-Syntax. (line 16) -* line comment character, XStormy16: XStormy16-Chars. (line 6) -* line comment character, Z80: Z80-Chars. (line 6) -* line comment character, Z8000: Z8000-Chars. (line 6) -* line comment characters, CRIS: CRIS-Chars. (line 6) -* line comment characters, MMIX: MMIX-Chars. (line 6) -* line directive: Line. (line 6) -* line directive, MSP 430: MSP430 Directives. (line 14) -* line numbers, in input files: Input Files. (line 35) -* line numbers, in warnings/errors: Errors. (line 16) -* line separator character: Statements. (line 6) -* line separator character, Nios II: Nios II Chars. (line 6) -* line separator, AArch64: AArch64-Chars. (line 10) -* line separator, Alpha: Alpha-Chars. (line 11) -* line separator, ARC: ARC-Chars. (line 12) -* line separator, ARM: ARM-Chars. (line 14) -* line separator, AVR: AVR-Chars. (line 14) -* line separator, CR16: CR16-Chars. (line 13) -* line separator, Epiphany: Epiphany-Chars. (line 14) -* line separator, H8/300: H8/300-Chars. (line 8) -* line separator, i386: i386-Chars. (line 18) -* line separator, i860: i860-Chars. (line 14) -* line separator, i960: i960-Chars. (line 14) -* line separator, IA-64: IA-64-Chars. (line 8) -* line separator, IP2K: IP2K-Chars. (line 14) -* line separator, LM32: LM32-Chars. (line 12) -* line separator, M32C: M32C-Chars. (line 14) -* line separator, M680x0: M68K-Chars. (line 20) -* line separator, M68HC11: M68HC11-Syntax. (line 27) -* line separator, Meta: Meta-Chars. (line 8) -* line separator, MicroBlaze: MicroBlaze-Chars. (line 14) -* line separator, MIPS: MIPS-Chars. (line 14) -* line separator, MSP 430: MSP430-Chars. (line 14) -* line separator, NS32K: NS32K-Chars. (line 18) -* line separator, PJ: PJ-Chars. (line 14) -* line separator, PowerPC: PowerPC-Chars. (line 18) -* line separator, RL78: RL78-Chars. (line 14) -* line separator, RX: RX-Chars. (line 14) -* line separator, s390: s390 Characters. (line 13) -* line separator, SCORE: SCORE-Chars. (line 14) -* line separator, SH: SH-Chars. (line 8) -* line separator, SH64: SH64-Chars. (line 13) -* line separator, Sparc: Sparc-Chars. (line 14) -* line separator, TIC54X: TIC54X-Chars. (line 17) -* line separator, TIC6X: TIC6X Syntax. (line 13) -* line separator, V850: V850-Chars. (line 13) -* line separator, VAX: VAX-Chars. (line 14) -* line separator, XGATE: XGATE-Syntax. (line 26) -* line separator, XStormy16: XStormy16-Chars. (line 14) -* line separator, Z80: Z80-Chars. (line 13) -* line separator, Z8000: Z8000-Chars. (line 13) -* lines starting with #: Comments. (line 33) -* linker: Object. (line 15) -* linker, and assembler: Secs Background. (line 10) -* linkonce directive: Linkonce. (line 6) -* list directive: List. (line 6) -* list directive, TIC54X: TIC54X-Directives. (line 131) -* listing control, turning off: Nolist. (line 6) -* listing control, turning on: List. (line 6) -* listing control: new page: Eject. (line 6) -* listing control: paper size: Psize. (line 6) -* listing control: subtitle: Sbttl. (line 6) -* listing control: title line: Title. (line 6) -* listings, enabling: a. (line 6) -* literal directive: Literal Directive. (line 6) -* literal pool entries, s390: s390 Literal Pool Entries. - (line 6) -* literal_position directive: Literal Position Directive. - (line 6) -* literal_prefix directive: Literal Prefix Directive. - (line 6) -* little endian output, MIPS: Overview. (line 743) -* little endian output, PJ: Overview. (line 646) -* little-endian output, MIPS: MIPS Options. (line 13) -* little-endian output, TIC6X: TIC6X Options. (line 46) -* LM32 line comment character: LM32-Chars. (line 6) -* LM32 line separator: LM32-Chars. (line 12) -* LM32 modifiers: LM32-Modifiers. (line 6) -* LM32 opcode summary: LM32 Opcodes. (line 6) -* LM32 options (none): LM32 Options. (line 6) -* LM32 register names: LM32-Regs. (line 6) -* LM32 support: LM32-Dependent. (line 6) -* ln directive: Ln. (line 6) -* lo directive, Nios II: Nios II Relocations. (line 23) -* lo pseudo-op, V850: V850 Opcodes. (line 22) -* loc directive: Loc. (line 6) -* loc_mark_labels directive: Loc_mark_labels. (line 6) -* local common symbols: Lcomm. (line 6) -* local directive: Local. (line 6) -* local labels: Symbol Names. (line 40) -* local symbol names: Symbol Names. (line 27) -* local symbols, retaining in output: L. (line 6) -* location counter: Dot. (line 6) -* location counter, advancing: Org. (line 6) -* location counter, Z80: Z80-Chars. (line 15) -* logical file name: File. (line 13) -* logical line number: Line. (line 6) -* logical line numbers: Comments. (line 33) -* long directive: Long. (line 6) -* long directive, ARC: ARC Directives. (line 156) -* long directive, i386: i386-Float. (line 21) -* long directive, TIC54X: TIC54X-Directives. (line 135) -* long directive, x86-64: i386-Float. (line 21) -* longcall pseudo-op, V850: V850 Opcodes. (line 123) -* longcalls directive: Longcalls Directive. (line 6) -* longjump pseudo-op, V850: V850 Opcodes. (line 129) -* loop directive, TIC54X: TIC54X-Directives. (line 143) -* LOOP instructions, alignment: Xtensa Automatic Alignment. - (line 6) -* low directive, M32R: M32R-Directives. (line 9) -* lp register, V850: V850-Regs. (line 98) -* lval: Z8000 Directives. (line 27) -* LWP, i386: i386-LWP. (line 6) -* LWP, x86-64: i386-LWP. (line 6) -* M16C architecture option: M32C-Opts. (line 12) -* M32C architecture option: M32C-Opts. (line 9) -* M32C line comment character: M32C-Chars. (line 6) -* M32C line separator: M32C-Chars. (line 14) -* M32C modifiers: M32C-Modifiers. (line 6) -* M32C options: M32C-Opts. (line 6) -* M32C support: M32C-Dependent. (line 6) -* M32R architecture options: M32R-Opts. (line 17) -* M32R directives: M32R-Directives. (line 6) -* M32R options: M32R-Opts. (line 6) -* M32R support: M32R-Dependent. (line 6) -* M32R warnings: M32R-Warnings. (line 6) -* M680x0 addressing modes: M68K-Syntax. (line 21) -* M680x0 architecture options: M68K-Opts. (line 98) -* M680x0 branch improvement: M68K-Branch. (line 6) -* M680x0 directives: M68K-Directives. (line 6) -* M680x0 floating point: M68K-Float. (line 6) -* M680x0 immediate character: M68K-Chars. (line 13) -* M680x0 line comment character: M68K-Chars. (line 6) -* M680x0 line separator: M68K-Chars. (line 20) -* M680x0 opcodes: M68K-opcodes. (line 6) -* M680x0 options: M68K-Opts. (line 6) -* M680x0 pseudo-opcodes: M68K-Branch. (line 6) -* M680x0 size modifiers: M68K-Syntax. (line 8) -* M680x0 support: M68K-Dependent. (line 6) -* M680x0 syntax: M68K-Syntax. (line 8) -* M68HC11 addressing modes: M68HC11-Syntax. (line 30) -* M68HC11 and M68HC12 support: M68HC11-Dependent. (line 6) -* M68HC11 assembler directive .far: M68HC11-Directives. (line 20) -* M68HC11 assembler directive .interrupt: M68HC11-Directives. (line 26) -* M68HC11 assembler directive .mode: M68HC11-Directives. (line 16) -* M68HC11 assembler directive .relax: M68HC11-Directives. (line 10) -* M68HC11 assembler directive .xrefb: M68HC11-Directives. (line 31) -* M68HC11 assembler directives: M68HC11-Directives. (line 6) -* M68HC11 branch improvement: M68HC11-Branch. (line 6) -* M68HC11 floating point: M68HC11-Float. (line 6) -* M68HC11 line comment character: M68HC11-Syntax. (line 17) -* M68HC11 line separator: M68HC11-Syntax. (line 27) -* M68HC11 modifiers: M68HC11-Modifiers. (line 6) -* M68HC11 opcodes: M68HC11-opcodes. (line 6) -* M68HC11 options: M68HC11-Opts. (line 6) -* M68HC11 pseudo-opcodes: M68HC11-Branch. (line 6) -* M68HC11 syntax: M68HC11-Syntax. (line 6) -* M68HC12 assembler directives: M68HC11-Directives. (line 6) -* machine dependencies: Machine Dependencies. - (line 6) -* machine directives, AArch64: AArch64 Directives. (line 6) -* machine directives, ARC: ARC Directives. (line 6) -* machine directives, ARM: ARM Directives. (line 6) -* machine directives, H8/300 (none): H8/300 Directives. (line 6) -* machine directives, i860: Directives-i860. (line 6) -* machine directives, i960: Directives-i960. (line 6) -* machine directives, MSP 430: MSP430 Directives. (line 6) -* machine directives, Nios II: Nios II Directives. (line 6) -* machine directives, SH: SH Directives. (line 6) -* machine directives, SH64: SH64 Directives. (line 9) -* machine directives, SPARC: Sparc-Directives. (line 6) -* machine directives, TIC54X: TIC54X-Directives. (line 6) -* machine directives, TIC6X: TIC6X Directives. (line 6) -* machine directives, TILE-Gx: TILE-Gx Directives. (line 6) -* machine directives, TILEPro: TILEPro Directives. (line 6) -* machine directives, V850: V850 Directives. (line 6) -* machine directives, VAX: VAX-directives. (line 6) -* machine directives, x86: i386-Directives. (line 6) -* machine directives, XStormy16: XStormy16 Directives. - (line 6) -* machine independent directives: Pseudo Ops. (line 6) -* machine instructions (not covered): Manual. (line 14) -* machine relocations, Nios II: Nios II Relocations. (line 6) -* machine-independent syntax: Syntax. (line 6) -* macro directive: Macro. (line 28) -* macro directive, TIC54X: TIC54X-Directives. (line 153) -* macros: Macro. (line 6) -* macros, count executed: Macro. (line 143) -* Macros, MSP 430: MSP430-Macros. (line 6) -* macros, TIC54X: TIC54X-Macros. (line 6) -* make rules: MD. (line 6) -* manual, structure and purpose: Manual. (line 6) -* math builtins, TIC54X: TIC54X-Builtins. (line 6) -* Maximum number of continuation lines: listing. (line 34) -* memory references, i386: i386-Memory. (line 6) -* memory references, x86-64: i386-Memory. (line 6) -* memory-mapped registers, TIC54X: TIC54X-MMRegs. (line 6) -* merging text and data sections: R. (line 6) -* messages from assembler: Errors. (line 6) -* Meta architectures: Meta Options. (line 6) -* Meta line comment character: Meta-Chars. (line 6) -* Meta line separator: Meta-Chars. (line 8) -* Meta options: Meta Options. (line 6) -* Meta registers: Meta-Regs. (line 6) -* Meta support: Meta-Dependent. (line 6) -* MicroBlaze architectures: MicroBlaze-Dependent. - (line 6) -* MicroBlaze directives: MicroBlaze Directives. - (line 6) -* MicroBlaze line comment character: MicroBlaze-Chars. (line 6) -* MicroBlaze line separator: MicroBlaze-Chars. (line 14) -* MicroBlaze support: MicroBlaze-Dependent. - (line 13) -* minus, permitted arguments: Infix Ops. (line 49) -* MIPS 32-bit microMIPS instruction generation override: MIPS assembly options. - (line 6) -* MIPS architecture options: MIPS Options. (line 29) -* MIPS big-endian output: MIPS Options. (line 13) -* MIPS CPU override: MIPS ISA. (line 18) -* MIPS DSP Release 1 instruction generation override: MIPS ASE Instruction Generation Overrides. - (line 21) -* MIPS DSP Release 2 instruction generation override: MIPS ASE Instruction Generation Overrides. - (line 26) -* MIPS endianness: Overview. (line 740) -* MIPS IEEE 754 NaN data encoding selection: MIPS NaN Encodings. - (line 6) -* MIPS ISA: Overview. (line 746) -* MIPS ISA override: MIPS ISA. (line 6) -* MIPS line comment character: MIPS-Chars. (line 6) -* MIPS line separator: MIPS-Chars. (line 14) -* MIPS little-endian output: MIPS Options. (line 13) -* MIPS MCU instruction generation override: MIPS ASE Instruction Generation Overrides. - (line 37) -* MIPS MDMX instruction generation override: MIPS ASE Instruction Generation Overrides. - (line 16) -* MIPS MIPS-3D instruction generation override: MIPS ASE Instruction Generation Overrides. - (line 6) -* MIPS MT instruction generation override: MIPS ASE Instruction Generation Overrides. - (line 32) -* MIPS option stack: MIPS Option Stack. (line 6) -* MIPS processor: MIPS-Dependent. (line 6) -* MIT: M68K-Syntax. (line 6) -* mlib directive, TIC54X: TIC54X-Directives. (line 159) -* mlist directive, TIC54X: TIC54X-Directives. (line 164) -* MMIX assembler directive BSPEC: MMIX-Pseudos. (line 131) -* MMIX assembler directive BYTE: MMIX-Pseudos. (line 97) -* MMIX assembler directive ESPEC: MMIX-Pseudos. (line 131) -* MMIX assembler directive GREG: MMIX-Pseudos. (line 50) -* MMIX assembler directive IS: MMIX-Pseudos. (line 42) -* MMIX assembler directive LOC: MMIX-Pseudos. (line 7) -* MMIX assembler directive LOCAL: MMIX-Pseudos. (line 28) -* MMIX assembler directive OCTA: MMIX-Pseudos. (line 108) -* MMIX assembler directive PREFIX: MMIX-Pseudos. (line 120) -* MMIX assembler directive TETRA: MMIX-Pseudos. (line 108) -* MMIX assembler directive WYDE: MMIX-Pseudos. (line 108) -* MMIX assembler directives: MMIX-Pseudos. (line 6) -* MMIX line comment characters: MMIX-Chars. (line 6) -* MMIX options: MMIX-Opts. (line 6) -* MMIX pseudo-op BSPEC: MMIX-Pseudos. (line 131) -* MMIX pseudo-op BYTE: MMIX-Pseudos. (line 97) -* MMIX pseudo-op ESPEC: MMIX-Pseudos. (line 131) -* MMIX pseudo-op GREG: MMIX-Pseudos. (line 50) -* MMIX pseudo-op IS: MMIX-Pseudos. (line 42) -* MMIX pseudo-op LOC: MMIX-Pseudos. (line 7) -* MMIX pseudo-op LOCAL: MMIX-Pseudos. (line 28) -* MMIX pseudo-op OCTA: MMIX-Pseudos. (line 108) -* MMIX pseudo-op PREFIX: MMIX-Pseudos. (line 120) -* MMIX pseudo-op TETRA: MMIX-Pseudos. (line 108) -* MMIX pseudo-op WYDE: MMIX-Pseudos. (line 108) -* MMIX pseudo-ops: MMIX-Pseudos. (line 6) -* MMIX register names: MMIX-Regs. (line 6) -* MMIX support: MMIX-Dependent. (line 6) -* mmixal differences: MMIX-mmixal. (line 6) -* mmregs directive, TIC54X: TIC54X-Directives. (line 169) -* mmsg directive, TIC54X: TIC54X-Directives. (line 77) -* MMX, i386: i386-SIMD. (line 6) -* MMX, x86-64: i386-SIMD. (line 6) -* mnemonic compatibility, i386: i386-Mnemonics. (line 62) -* mnemonic suffixes, i386: i386-Variations. (line 29) -* mnemonic suffixes, x86-64: i386-Variations. (line 29) -* mnemonics for opcodes, VAX: VAX-opcodes. (line 6) -* mnemonics, AVR: AVR Opcodes. (line 6) -* mnemonics, D10V: D10V-Opcodes. (line 6) -* mnemonics, D30V: D30V-Opcodes. (line 6) -* mnemonics, H8/300: H8/300 Opcodes. (line 6) -* mnemonics, LM32: LM32 Opcodes. (line 6) -* mnemonics, SH: SH Opcodes. (line 6) -* mnemonics, SH64: SH64 Opcodes. (line 6) -* mnemonics, Z8000: Z8000 Opcodes. (line 6) -* mnolist directive, TIC54X: TIC54X-Directives. (line 164) -* modifiers, M32C: M32C-Modifiers. (line 6) -* Motorola syntax for the 680x0: M68K-Moto-Syntax. (line 6) -* MOVI instructions, relaxation: Xtensa Immediate Relaxation. - (line 12) -* MOVN, MOVZ and MOVK group relocations, AArch64: AArch64-Relocations. - (line 6) -* MOVW and MOVT relocations, ARM: ARM-Relocations. (line 21) -* MRI compatibility mode: M. (line 6) -* mri directive: MRI. (line 6) -* MRI mode, temporarily: MRI. (line 6) -* MSP 430 floating point (IEEE): MSP430 Floating Point. - (line 6) -* MSP 430 identifiers: MSP430-Chars. (line 17) -* MSP 430 line comment character: MSP430-Chars. (line 6) -* MSP 430 line separator: MSP430-Chars. (line 14) -* MSP 430 machine directives: MSP430 Directives. (line 6) -* MSP 430 macros: MSP430-Macros. (line 6) -* MSP 430 opcodes: MSP430 Opcodes. (line 6) -* MSP 430 options (none): MSP430 Options. (line 6) -* MSP 430 profiling capability: MSP430 Profiling Capability. - (line 6) -* MSP 430 register names: MSP430-Regs. (line 6) -* MSP 430 support: MSP430-Dependent. (line 6) -* MSP430 Assembler Extensions: MSP430-Ext. (line 6) -* mul instruction, i386: i386-Notes. (line 6) -* mul instruction, x86-64: i386-Notes. (line 6) -* N32K support: NS32K-Dependent. (line 6) -* name: Z8000 Directives. (line 18) -* named section: Section. (line 6) -* named sections: Ld Sections. (line 8) -* names, symbol: Symbol Names. (line 6) -* naming object file: o. (line 6) -* new page, in listings: Eject. (line 6) -* newblock directive, TIC54X: TIC54X-Directives. (line 175) -* newline (\n): Strings. (line 21) -* newline, required at file end: Statements. (line 14) -* Nios II line comment character: Nios II Chars. (line 6) -* Nios II line separator character: Nios II Chars. (line 6) -* Nios II machine directives: Nios II Directives. (line 6) -* Nios II machine relocations: Nios II Relocations. (line 6) -* Nios II opcodes: Nios II Opcodes. (line 6) -* Nios II options: Nios II Options. (line 6) -* Nios II support: NiosII-Dependent. (line 6) -* Nios support: NiosII-Dependent. (line 6) -* no-absolute-literals directive: Absolute Literals Directive. - (line 6) -* no-longcalls directive: Longcalls Directive. (line 6) -* no-relax command line option, Nios II: Nios II Options. (line 20) -* no-schedule directive: Schedule Directive. (line 6) -* no-transform directive: Transform Directive. (line 6) -* nolist directive: Nolist. (line 6) -* nolist directive, TIC54X: TIC54X-Directives. (line 131) -* NOP pseudo op, ARM: ARM Opcodes. (line 9) -* notes for Alpha: Alpha Notes. (line 6) -* NS32K line comment character: NS32K-Chars. (line 6) -* NS32K line separator: NS32K-Chars. (line 18) -* null-terminated strings: Asciz. (line 6) -* number constants: Numbers. (line 6) -* number of macros executed: Macro. (line 143) -* numbered subsections: Sub-Sections. (line 6) -* numbers, 16-bit: hword. (line 6) -* numeric values: Expressions. (line 6) -* nword directive, SPARC: Sparc-Directives. (line 20) -* object attributes: Object Attributes. (line 6) -* object file: Object. (line 6) -* object file format: Object Formats. (line 6) -* object file name: o. (line 6) -* object file, after errors: Z. (line 6) -* obsolescent directives: Deprecated. (line 6) -* octa directive: Octa. (line 6) -* octal character code (\DDD): Strings. (line 30) -* octal integers: Integers. (line 9) -* offset directive: Offset. (line 6) -* offset directive, V850: V850 Directives. (line 6) -* opcode mnemonics, VAX: VAX-opcodes. (line 6) -* opcode names, TILE-Gx: TILE-Gx Opcodes. (line 6) -* opcode names, TILEPro: TILEPro Opcodes. (line 6) -* opcode names, Xtensa: Xtensa Opcodes. (line 6) -* opcode summary, AVR: AVR Opcodes. (line 6) -* opcode summary, D10V: D10V-Opcodes. (line 6) -* opcode summary, D30V: D30V-Opcodes. (line 6) -* opcode summary, H8/300: H8/300 Opcodes. (line 6) -* opcode summary, LM32: LM32 Opcodes. (line 6) -* opcode summary, SH: SH Opcodes. (line 6) -* opcode summary, SH64: SH64 Opcodes. (line 6) -* opcode summary, Z8000: Z8000 Opcodes. (line 6) -* opcodes for AArch64: AArch64 Opcodes. (line 6) -* opcodes for ARC: ARC Opcodes. (line 6) -* opcodes for ARM: ARM Opcodes. (line 6) -* opcodes for MSP 430: MSP430 Opcodes. (line 6) -* opcodes for Nios II: Nios II Opcodes. (line 6) -* opcodes for V850: V850 Opcodes. (line 6) -* opcodes, i860: Opcodes for i860. (line 6) -* opcodes, i960: Opcodes for i960. (line 6) -* opcodes, M680x0: M68K-opcodes. (line 6) -* opcodes, M68HC11: M68HC11-opcodes. (line 6) -* operand delimiters, i386: i386-Variations. (line 15) -* operand delimiters, x86-64: i386-Variations. (line 15) -* operand notation, VAX: VAX-operands. (line 6) -* operands in expressions: Arguments. (line 6) -* operator precedence: Infix Ops. (line 11) -* operators, in expressions: Operators. (line 6) -* operators, permitted arguments: Infix Ops. (line 6) -* optimization, D10V: Overview. (line 503) -* optimization, D30V: Overview. (line 508) -* optimizations: Xtensa Optimizations. - (line 6) -* option directive, ARC: ARC Directives. (line 159) -* option directive, TIC54X: TIC54X-Directives. (line 179) -* option summary: Overview. (line 6) -* options for AArch64 (none): AArch64 Options. (line 6) -* options for Alpha: Alpha Options. (line 6) -* options for ARC (none): ARC Options. (line 6) -* options for ARM (none): ARM Options. (line 6) -* options for AVR (none): AVR Options. (line 6) -* options for Blackfin (none): Blackfin Options. (line 6) -* options for i386: i386-Options. (line 6) -* options for IA-64: IA-64 Options. (line 6) -* options for LM32 (none): LM32 Options. (line 6) -* options for Meta: Meta Options. (line 6) -* options for MSP430 (none): MSP430 Options. (line 6) -* options for Nios II: Nios II Options. (line 6) -* options for PDP-11: PDP-11-Options. (line 6) -* options for PowerPC: PowerPC-Opts. (line 6) -* options for s390: s390 Options. (line 6) -* options for SCORE: SCORE-Opts. (line 6) -* options for SPARC: Sparc-Opts. (line 6) -* options for TIC6X: TIC6X Options. (line 6) -* options for V850 (none): V850 Options. (line 6) -* options for VAX/VMS: VAX-Opts. (line 42) -* options for x86-64: i386-Options. (line 6) -* options for Z80: Z80 Options. (line 6) -* options, all versions of assembler: Invoking. (line 6) -* options, command line: Command Line. (line 13) -* options, CRIS: CRIS-Opts. (line 6) -* options, D10V: D10V-Opts. (line 6) -* options, D30V: D30V-Opts. (line 6) -* options, Epiphany: Epiphany Options. (line 6) -* options, H8/300: H8/300 Options. (line 6) -* options, i960: Options-i960. (line 6) -* options, IP2K: IP2K-Opts. (line 6) -* options, M32C: M32C-Opts. (line 6) -* options, M32R: M32R-Opts. (line 6) -* options, M680x0: M68K-Opts. (line 6) -* options, M68HC11: M68HC11-Opts. (line 6) -* options, MMIX: MMIX-Opts. (line 6) -* options, PJ: PJ Options. (line 6) -* options, RL78: RL78-Opts. (line 6) -* options, RX: RX-Opts. (line 6) -* options, SH: SH Options. (line 6) -* options, SH64: SH64 Options. (line 6) -* options, TIC54X: TIC54X-Opts. (line 6) -* options, XGATE: XGATE-Opts. (line 6) -* options, Z8000: Z8000 Options. (line 6) -* org directive: Org. (line 6) -* other attribute, of a.out symbol: Symbol Other. (line 6) -* output file: Object. (line 6) -* p2align directive: P2align. (line 6) -* p2alignl directive: P2align. (line 28) -* p2alignw directive: P2align. (line 28) -* padding the location counter: Align. (line 6) -* padding the location counter given a power of two: P2align. (line 6) -* padding the location counter given number of bytes: Balign. (line 6) -* page, in listings: Eject. (line 6) -* paper size, for listings: Psize. (line 6) -* paths for .include: I. (line 6) -* patterns, writing in memory: Fill. (line 6) -* PDP-11 comments: PDP-11-Syntax. (line 16) -* PDP-11 floating-point register syntax: PDP-11-Syntax. (line 13) -* PDP-11 general-purpose register syntax: PDP-11-Syntax. (line 10) -* PDP-11 instruction naming: PDP-11-Mnemonics. (line 6) -* PDP-11 line separator: PDP-11-Syntax. (line 19) -* PDP-11 support: PDP-11-Dependent. (line 6) -* PDP-11 syntax: PDP-11-Syntax. (line 6) -* PIC code generation for ARM: ARM Options. (line 169) -* PIC code generation for M32R: M32R-Opts. (line 42) -* PIC selection, MIPS: MIPS Options. (line 21) -* PJ endianness: Overview. (line 643) -* PJ line comment character: PJ-Chars. (line 6) -* PJ line separator: PJ-Chars. (line 14) -* PJ options: PJ Options. (line 6) -* PJ support: PJ-Dependent. (line 6) -* plus, permitted arguments: Infix Ops. (line 44) -* popsection directive: PopSection. (line 6) -* Position-independent code, CRIS: CRIS-Opts. (line 27) -* Position-independent code, symbols in, CRIS: CRIS-Pic. (line 6) -* PowerPC architectures: PowerPC-Opts. (line 6) -* PowerPC directives: PowerPC-Pseudo. (line 6) -* PowerPC line comment character: PowerPC-Chars. (line 6) -* PowerPC line separator: PowerPC-Chars. (line 18) -* PowerPC options: PowerPC-Opts. (line 6) -* PowerPC support: PPC-Dependent. (line 6) -* precedence of operators: Infix Ops. (line 11) -* precision, floating point: Flonums. (line 6) -* prefix operators: Prefix Ops. (line 6) -* prefixes, i386: i386-Prefixes. (line 6) -* preprocessing: Preprocessing. (line 6) -* preprocessing, turning on and off: Preprocessing. (line 27) -* previous directive: Previous. (line 6) -* primary attributes, COFF symbols: COFF Symbols. (line 13) -* print directive: Print. (line 6) -* proc directive, SPARC: Sparc-Directives. (line 25) -* profiler directive, MSP 430: MSP430 Directives. (line 26) -* profiling capability for MSP 430: MSP430 Profiling Capability. - (line 6) -* protected directive: Protected. (line 6) -* pseudo-op .arch, CRIS: CRIS-Pseudos. (line 45) -* pseudo-op .dword, CRIS: CRIS-Pseudos. (line 12) -* pseudo-op .syntax, CRIS: CRIS-Pseudos. (line 17) -* pseudo-op BSPEC, MMIX: MMIX-Pseudos. (line 131) -* pseudo-op BYTE, MMIX: MMIX-Pseudos. (line 97) -* pseudo-op ESPEC, MMIX: MMIX-Pseudos. (line 131) -* pseudo-op GREG, MMIX: MMIX-Pseudos. (line 50) -* pseudo-op IS, MMIX: MMIX-Pseudos. (line 42) -* pseudo-op LOC, MMIX: MMIX-Pseudos. (line 7) -* pseudo-op LOCAL, MMIX: MMIX-Pseudos. (line 28) -* pseudo-op OCTA, MMIX: MMIX-Pseudos. (line 108) -* pseudo-op PREFIX, MMIX: MMIX-Pseudos. (line 120) -* pseudo-op TETRA, MMIX: MMIX-Pseudos. (line 108) -* pseudo-op WYDE, MMIX: MMIX-Pseudos. (line 108) -* pseudo-opcodes for XStormy16: XStormy16 Opcodes. (line 6) -* pseudo-opcodes, M680x0: M68K-Branch. (line 6) -* pseudo-opcodes, M68HC11: M68HC11-Branch. (line 6) -* pseudo-ops for branch, VAX: VAX-branch. (line 6) -* pseudo-ops, CRIS: CRIS-Pseudos. (line 6) -* pseudo-ops, machine independent: Pseudo Ops. (line 6) -* pseudo-ops, MMIX: MMIX-Pseudos. (line 6) -* psize directive: Psize. (line 6) -* PSR bits: IA-64-Bits. (line 6) -* pstring directive, TIC54X: TIC54X-Directives. (line 208) -* psw register, V850: V850-Regs. (line 116) -* purgem directive: Purgem. (line 6) -* purpose of GNU assembler: GNU Assembler. (line 12) -* pushsection directive: PushSection. (line 6) -* quad directive: Quad. (line 6) -* quad directive, i386: i386-Float. (line 21) -* quad directive, x86-64: i386-Float. (line 21) -* real-mode code, i386: i386-16bit. (line 6) -* ref directive, TIC54X: TIC54X-Directives. (line 103) -* register directive, SPARC: Sparc-Directives. (line 29) -* register names, AArch64: AArch64-Regs. (line 6) -* register names, Alpha: Alpha-Regs. (line 6) -* register names, ARC: ARC-Regs. (line 6) -* register names, ARM: ARM-Regs. (line 6) -* register names, AVR: AVR-Regs. (line 6) -* register names, CRIS: CRIS-Regs. (line 6) -* register names, H8/300: H8/300-Regs. (line 6) -* register names, IA-64: IA-64-Regs. (line 6) -* register names, LM32: LM32-Regs. (line 6) -* register names, MMIX: MMIX-Regs. (line 6) -* register names, MSP 430: MSP430-Regs. (line 6) -* register names, Sparc: Sparc-Regs. (line 6) -* register names, TILE-Gx: TILE-Gx Registers. (line 6) -* register names, TILEPro: TILEPro Registers. (line 6) -* register names, V850: V850-Regs. (line 6) -* register names, VAX: VAX-operands. (line 17) -* register names, Xtensa: Xtensa Registers. (line 6) -* register names, Z80: Z80-Regs. (line 6) -* register naming, s390: s390 Register. (line 6) -* register operands, i386: i386-Variations. (line 15) -* register operands, x86-64: i386-Variations. (line 15) -* registers, D10V: D10V-Regs. (line 6) -* registers, D30V: D30V-Regs. (line 6) -* registers, i386: i386-Regs. (line 6) -* registers, Meta: Meta-Regs. (line 6) -* registers, SH: SH-Regs. (line 6) -* registers, SH64: SH64-Regs. (line 6) -* registers, TIC54X memory-mapped: TIC54X-MMRegs. (line 6) -* registers, x86-64: i386-Regs. (line 6) -* registers, Z8000: Z8000-Regs. (line 6) -* relax-all command line option, Nios II: Nios II Options. (line 13) -* relax-section command line option, Nios II: Nios II Options. - (line 6) -* relaxation: Xtensa Relaxation. (line 6) -* relaxation of ADDI instructions: Xtensa Immediate Relaxation. - (line 43) -* relaxation of branch instructions: Xtensa Branch Relaxation. - (line 6) -* relaxation of call instructions: Xtensa Call Relaxation. - (line 6) -* relaxation of immediate fields: Xtensa Immediate Relaxation. - (line 6) -* relaxation of L16SI instructions: Xtensa Immediate Relaxation. - (line 23) -* relaxation of L16UI instructions: Xtensa Immediate Relaxation. - (line 23) -* relaxation of L32I instructions: Xtensa Immediate Relaxation. - (line 23) -* relaxation of L8UI instructions: Xtensa Immediate Relaxation. - (line 23) -* relaxation of MOVI instructions: Xtensa Immediate Relaxation. - (line 12) -* reloc directive: Reloc. (line 6) -* relocation: Sections. (line 6) -* relocation example: Ld Sections. (line 40) -* relocations, AArch64: AArch64-Relocations. (line 6) -* relocations, Alpha: Alpha-Relocs. (line 6) -* relocations, Sparc: Sparc-Relocs. (line 6) -* repeat prefixes, i386: i386-Prefixes. (line 44) -* reporting bugs in assembler: Reporting Bugs. (line 6) -* rept directive: Rept. (line 6) -* reserve directive, SPARC: Sparc-Directives. (line 39) -* return instructions, i386: i386-Variations. (line 41) -* return instructions, x86-64: i386-Variations. (line 41) -* REX prefixes, i386: i386-Prefixes. (line 46) -* RL78 assembler directives: RL78-Directives. (line 6) -* RL78 line comment character: RL78-Chars. (line 6) -* RL78 line separator: RL78-Chars. (line 14) -* RL78 modifiers: RL78-Modifiers. (line 6) -* RL78 options: RL78-Opts. (line 6) -* RL78 support: RL78-Dependent. (line 6) -* rsect: Z8000 Directives. (line 52) -* RX assembler directive .3byte: RX-Directives. (line 9) -* RX assembler directive .fetchalign: RX-Directives. (line 13) -* RX assembler directives: RX-Directives. (line 6) -* RX floating point: RX-Float. (line 6) -* RX line comment character: RX-Chars. (line 6) -* RX line separator: RX-Chars. (line 14) -* RX modifiers: RX-Modifiers. (line 6) -* RX options: RX-Opts. (line 6) -* RX support: RX-Dependent. (line 6) -* s390 floating point: s390 Floating Point. (line 6) -* s390 instruction aliases: s390 Aliases. (line 6) -* s390 instruction formats: s390 Formats. (line 6) -* s390 instruction marker: s390 Instruction Marker. - (line 6) -* s390 instruction mnemonics: s390 Mnemonics. (line 6) -* s390 instruction operand modifier: s390 Operand Modifier. - (line 6) -* s390 instruction operands: s390 Operands. (line 6) -* s390 instruction syntax: s390 Syntax. (line 6) -* s390 line comment character: s390 Characters. (line 6) -* s390 line separator: s390 Characters. (line 13) -* s390 literal pool entries: s390 Literal Pool Entries. - (line 6) -* s390 options: s390 Options. (line 6) -* s390 register naming: s390 Register. (line 6) -* s390 support: S/390-Dependent. (line 6) -* sblock directive, TIC54X: TIC54X-Directives. (line 182) -* sbttl directive: Sbttl. (line 6) -* schedule directive: Schedule Directive. (line 6) -* scl directive: Scl. (line 6) -* SCORE architectures: SCORE-Opts. (line 6) -* SCORE directives: SCORE-Pseudo. (line 6) -* SCORE line comment character: SCORE-Chars. (line 6) -* SCORE line separator: SCORE-Chars. (line 14) -* SCORE options: SCORE-Opts. (line 6) -* SCORE processor: SCORE-Dependent. (line 6) -* sdaoff pseudo-op, V850: V850 Opcodes. (line 65) -* search path for .include: I. (line 6) -* sect directive, TIC54X: TIC54X-Directives. (line 188) -* section directive (COFF version): Section. (line 16) -* section directive (ELF version): Section. (line 76) -* section directive, V850: V850 Directives. (line 9) -* section override prefixes, i386: i386-Prefixes. (line 23) -* Section Stack <1>: PushSection. (line 6) -* Section Stack <2>: PopSection. (line 6) -* Section Stack <3>: Section. (line 71) -* Section Stack <4>: Previous. (line 6) -* Section Stack: SubSection. (line 6) -* section-relative addressing: Secs Background. (line 68) -* sections: Sections. (line 6) -* sections in messages, internal: As Sections. (line 6) -* sections, i386: i386-Variations. (line 47) -* sections, named: Ld Sections. (line 8) -* sections, x86-64: i386-Variations. (line 47) -* seg directive, SPARC: Sparc-Directives. (line 44) -* segm: Z8000 Directives. (line 10) -* set at directive, Nios II: Nios II Directives. (line 35) -* set break directive, Nios II: Nios II Directives. (line 43) -* set directive: Set. (line 6) -* set directive, Nios II: Nios II Directives. (line 57) -* set directive, TIC54X: TIC54X-Directives. (line 191) -* set noat directive, Nios II: Nios II Directives. (line 31) -* set nobreak directive, Nios II: Nios II Directives. (line 39) -* set norelax directive, Nios II: Nios II Directives. (line 46) -* set relaxall directive, Nios II: Nios II Directives. (line 53) -* set relaxsection directive, Nios II: Nios II Directives. (line 49) -* SH addressing modes: SH-Addressing. (line 6) -* SH floating point (IEEE): SH Floating Point. (line 6) -* SH line comment character: SH-Chars. (line 6) -* SH line separator: SH-Chars. (line 8) -* SH machine directives: SH Directives. (line 6) -* SH opcode summary: SH Opcodes. (line 6) -* SH options: SH Options. (line 6) -* SH registers: SH-Regs. (line 6) -* SH support: SH-Dependent. (line 6) -* SH64 ABI options: SH64 Options. (line 29) -* SH64 addressing modes: SH64-Addressing. (line 6) -* SH64 ISA options: SH64 Options. (line 6) -* SH64 line comment character: SH64-Chars. (line 6) -* SH64 line separator: SH64-Chars. (line 13) -* SH64 machine directives: SH64 Directives. (line 9) -* SH64 opcode summary: SH64 Opcodes. (line 6) -* SH64 options: SH64 Options. (line 6) -* SH64 registers: SH64-Regs. (line 6) -* SH64 support: SH64-Dependent. (line 6) -* shigh directive, M32R: M32R-Directives. (line 26) -* short directive: Short. (line 6) -* short directive, ARC: ARC Directives. (line 168) -* short directive, TIC54X: TIC54X-Directives. (line 111) -* SIMD, i386: i386-SIMD. (line 6) -* SIMD, x86-64: i386-SIMD. (line 6) -* single character constant: Chars. (line 6) -* single directive: Single. (line 6) -* single directive, i386: i386-Float. (line 14) -* single directive, x86-64: i386-Float. (line 14) -* single quote, Z80: Z80-Chars. (line 20) -* sixteen bit integers: hword. (line 6) -* sixteen byte integer: Octa. (line 6) -* size directive (COFF version): Size. (line 11) -* size directive (ELF version): Size. (line 19) -* size modifiers, D10V: D10V-Size. (line 6) -* size modifiers, D30V: D30V-Size. (line 6) -* size modifiers, M680x0: M68K-Syntax. (line 8) -* size prefixes, i386: i386-Prefixes. (line 27) -* size suffixes, H8/300: H8/300 Opcodes. (line 163) -* size, translations, Sparc: Sparc-Size-Translations. - (line 6) -* sizes operands, i386: i386-Variations. (line 29) -* sizes operands, x86-64: i386-Variations. (line 29) -* skip directive: Skip. (line 6) -* skip directive, M680x0: M68K-Directives. (line 19) -* skip directive, SPARC: Sparc-Directives. (line 48) -* sleb128 directive: Sleb128. (line 6) -* small data, MIPS: MIPS Small Data. (line 6) -* SmartMIPS instruction generation override: MIPS ASE Instruction Generation Overrides. - (line 11) -* SOM symbol attributes: SOM Symbols. (line 6) -* source program: Input Files. (line 6) -* source, destination operands; i386: i386-Variations. (line 22) -* source, destination operands; x86-64: i386-Variations. (line 22) -* sp register: Xtensa Registers. (line 6) -* sp register, V850: V850-Regs. (line 14) -* space directive: Space. (line 6) -* space directive, TIC54X: TIC54X-Directives. (line 196) -* space used, maximum for assembly: statistics. (line 6) -* SPARC architectures: Sparc-Opts. (line 6) -* Sparc constants: Sparc-Constants. (line 6) -* SPARC data alignment: Sparc-Aligned-Data. (line 6) -* SPARC floating point (IEEE): Sparc-Float. (line 6) -* Sparc line comment character: Sparc-Chars. (line 6) -* Sparc line separator: Sparc-Chars. (line 14) -* SPARC machine directives: Sparc-Directives. (line 6) -* SPARC options: Sparc-Opts. (line 6) -* Sparc registers: Sparc-Regs. (line 6) -* Sparc relocations: Sparc-Relocs. (line 6) -* Sparc size translations: Sparc-Size-Translations. - (line 6) -* SPARC support: Sparc-Dependent. (line 6) -* SPARC syntax: Sparc-Aligned-Data. (line 21) -* special characters, M680x0: M68K-Chars. (line 6) -* special purpose registers, MSP 430: MSP430-Regs. (line 11) -* sslist directive, TIC54X: TIC54X-Directives. (line 203) -* ssnolist directive, TIC54X: TIC54X-Directives. (line 203) -* stabd directive: Stab. (line 38) -* stabn directive: Stab. (line 48) -* stabs directive: Stab. (line 51) -* stabX directives: Stab. (line 6) -* standard assembler sections: Secs Background. (line 27) -* standard input, as input file: Command Line. (line 10) -* statement separator character: Statements. (line 6) -* statement separator, AArch64: AArch64-Chars. (line 10) -* statement separator, Alpha: Alpha-Chars. (line 11) -* statement separator, ARC: ARC-Chars. (line 12) -* statement separator, ARM: ARM-Chars. (line 14) -* statement separator, AVR: AVR-Chars. (line 14) -* statement separator, CR16: CR16-Chars. (line 13) -* statement separator, Epiphany: Epiphany-Chars. (line 14) -* statement separator, H8/300: H8/300-Chars. (line 8) -* statement separator, i386: i386-Chars. (line 18) -* statement separator, i860: i860-Chars. (line 14) -* statement separator, i960: i960-Chars. (line 14) -* statement separator, IA-64: IA-64-Chars. (line 8) -* statement separator, IP2K: IP2K-Chars. (line 14) -* statement separator, LM32: LM32-Chars. (line 12) -* statement separator, M32C: M32C-Chars. (line 14) -* statement separator, M68HC11: M68HC11-Syntax. (line 27) -* statement separator, Meta: Meta-Chars. (line 8) -* statement separator, MicroBlaze: MicroBlaze-Chars. (line 14) -* statement separator, MIPS: MIPS-Chars. (line 14) -* statement separator, MSP 430: MSP430-Chars. (line 14) -* statement separator, NS32K: NS32K-Chars. (line 18) -* statement separator, PJ: PJ-Chars. (line 14) -* statement separator, PowerPC: PowerPC-Chars. (line 18) -* statement separator, RL78: RL78-Chars. (line 14) -* statement separator, RX: RX-Chars. (line 14) -* statement separator, s390: s390 Characters. (line 13) -* statement separator, SCORE: SCORE-Chars. (line 14) -* statement separator, SH: SH-Chars. (line 8) -* statement separator, SH64: SH64-Chars. (line 13) -* statement separator, Sparc: Sparc-Chars. (line 14) -* statement separator, TIC54X: TIC54X-Chars. (line 17) -* statement separator, TIC6X: TIC6X Syntax. (line 13) -* statement separator, V850: V850-Chars. (line 13) -* statement separator, VAX: VAX-Chars. (line 14) -* statement separator, XGATE: XGATE-Syntax. (line 26) -* statement separator, XStormy16: XStormy16-Chars. (line 14) -* statement separator, Z80: Z80-Chars. (line 13) -* statement separator, Z8000: Z8000-Chars. (line 13) -* statements, structure of: Statements. (line 6) -* statistics, about assembly: statistics. (line 6) -* stopping the assembly: Abort. (line 6) -* string constants: Strings. (line 6) -* string directive: String. (line 8) -* string directive on HPPA: HPPA Directives. (line 137) -* string directive, TIC54X: TIC54X-Directives. (line 208) -* string literals: Ascii. (line 6) -* string, copying to object file: String. (line 8) -* string16 directive: String. (line 8) -* string16, copying to object file: String. (line 8) -* string32 directive: String. (line 8) -* string32, copying to object file: String. (line 8) -* string64 directive: String. (line 8) -* string64, copying to object file: String. (line 8) -* string8 directive: String. (line 8) -* string8, copying to object file: String. (line 8) -* struct directive: Struct. (line 6) -* struct directive, TIC54X: TIC54X-Directives. (line 216) -* structure debugging, COFF: Tag. (line 6) -* sub-instruction ordering, D10V: D10V-Chars. (line 14) -* sub-instruction ordering, D30V: D30V-Chars. (line 14) -* sub-instructions, D10V: D10V-Subs. (line 6) -* sub-instructions, D30V: D30V-Subs. (line 6) -* subexpressions: Arguments. (line 24) -* subsection directive: SubSection. (line 6) -* subsym builtins, TIC54X: TIC54X-Macros. (line 16) -* subtitles for listings: Sbttl. (line 6) -* subtraction, permitted arguments: Infix Ops. (line 49) -* summary of options: Overview. (line 6) -* support: HPPA-Dependent. (line 6) -* supporting files, including: Include. (line 6) -* suppressing warnings: W. (line 11) -* sval: Z8000 Directives. (line 33) -* symbol attributes: Symbol Attributes. (line 6) -* symbol attributes, a.out: a.out Symbols. (line 6) -* symbol attributes, COFF: COFF Symbols. (line 6) -* symbol attributes, SOM: SOM Symbols. (line 6) -* symbol descriptor, COFF: Desc. (line 6) -* symbol modifiers <1>: LM32-Modifiers. (line 12) -* symbol modifiers <2>: AVR-Modifiers. (line 12) -* symbol modifiers <3>: M68HC11-Modifiers. (line 12) -* symbol modifiers: M32C-Modifiers. (line 11) -* symbol modifiers, TILE-Gx: TILE-Gx Modifiers. (line 6) -* symbol modifiers, TILEPro: TILEPro Modifiers. (line 6) -* symbol names: Symbol Names. (line 6) -* symbol names, $ in <1>: D30V-Chars. (line 70) -* symbol names, $ in <2>: D10V-Chars. (line 53) -* symbol names, $ in <3>: SH64-Chars. (line 15) -* symbol names, $ in <4>: SH-Chars. (line 15) -* symbol names, $ in: Meta-Chars. (line 10) -* symbol names, local: Symbol Names. (line 27) -* symbol names, temporary: Symbol Names. (line 40) -* symbol storage class (COFF): Scl. (line 6) -* symbol type: Symbol Type. (line 6) -* symbol type, COFF: Type. (line 11) -* symbol type, ELF: Type. (line 22) -* symbol value: Symbol Value. (line 6) -* symbol value, setting: Set. (line 6) -* symbol values, assigning: Setting Symbols. (line 6) -* symbol versioning: Symver. (line 6) -* symbol, common: Comm. (line 6) -* symbol, making visible to linker: Global. (line 6) -* symbolic debuggers, information for: Stab. (line 6) -* symbols: Symbols. (line 6) -* Symbols in position-independent code, CRIS: CRIS-Pic. (line 6) -* symbols with uppercase, VAX/VMS: VAX-Opts. (line 42) -* symbols, assigning values to: Equ. (line 6) -* Symbols, built-in, CRIS: CRIS-Symbols. (line 6) -* Symbols, CRIS, built-in: CRIS-Symbols. (line 6) -* symbols, local common: Lcomm. (line 6) -* symver directive: Symver. (line 6) -* syntax compatibility, i386: i386-Variations. (line 6) -* syntax compatibility, x86-64: i386-Variations. (line 6) -* syntax, AVR: AVR-Modifiers. (line 6) -* syntax, Blackfin: Blackfin Syntax. (line 6) -* syntax, D10V: D10V-Syntax. (line 6) -* syntax, D30V: D30V-Syntax. (line 6) -* syntax, LM32: LM32-Modifiers. (line 6) -* syntax, M680x0: M68K-Syntax. (line 8) -* syntax, M68HC11 <1>: M68HC11-Modifiers. (line 6) -* syntax, M68HC11: M68HC11-Syntax. (line 6) -* syntax, machine-independent: Syntax. (line 6) -* syntax, RL78: RL78-Modifiers. (line 6) -* syntax, RX: RX-Modifiers. (line 6) -* syntax, SPARC: Sparc-Aligned-Data. (line 21) -* syntax, TILE-Gx: TILE-Gx Syntax. (line 6) -* syntax, TILEPro: TILEPro Syntax. (line 6) -* syntax, XGATE: XGATE-Syntax. (line 6) -* syntax, Xtensa assembler: Xtensa Syntax. (line 6) -* sysproc directive, i960: Directives-i960. (line 37) -* tab (\t): Strings. (line 27) -* tab directive, TIC54X: TIC54X-Directives. (line 247) -* tag directive: Tag. (line 6) -* tag directive, TIC54X: TIC54X-Directives. (line 250) -* TBM, i386: i386-TBM. (line 6) -* TBM, x86-64: i386-TBM. (line 6) -* tdaoff pseudo-op, V850: V850 Opcodes. (line 81) -* temporary symbol names: Symbol Names. (line 40) -* text and data sections, joining: R. (line 6) -* text directive: Text. (line 6) -* text section: Ld Sections. (line 9) -* tfloat directive, i386: i386-Float. (line 14) -* tfloat directive, x86-64: i386-Float. (line 14) -* Thumb support <1>: ARM-Dependent. (line 6) -* Thumb support: AArch64-Dependent. (line 6) -* TIC54X builtin math functions: TIC54X-Builtins. (line 6) -* TIC54X line comment character: TIC54X-Chars. (line 6) -* TIC54X line separator: TIC54X-Chars. (line 17) -* TIC54X machine directives: TIC54X-Directives. (line 6) -* TIC54X memory-mapped registers: TIC54X-MMRegs. (line 6) -* TIC54X options: TIC54X-Opts. (line 6) -* TIC54X subsym builtins: TIC54X-Macros. (line 16) -* TIC54X support: TIC54X-Dependent. (line 6) -* TIC54X-specific macros: TIC54X-Macros. (line 6) -* TIC6X big-endian output: TIC6X Options. (line 46) -* TIC6X line comment character: TIC6X Syntax. (line 6) -* TIC6X line separator: TIC6X Syntax. (line 13) -* TIC6X little-endian output: TIC6X Options. (line 46) -* TIC6X machine directives: TIC6X Directives. (line 6) -* TIC6X options: TIC6X Options. (line 6) -* TIC6X support: TIC6X-Dependent. (line 6) -* TILE-Gx machine directives: TILE-Gx Directives. (line 6) -* TILE-Gx modifiers: TILE-Gx Modifiers. (line 6) -* TILE-Gx opcode names: TILE-Gx Opcodes. (line 6) -* TILE-Gx register names: TILE-Gx Registers. (line 6) -* TILE-Gx support: TILE-Gx-Dependent. (line 6) -* TILE-Gx syntax: TILE-Gx Syntax. (line 6) -* TILEPro machine directives: TILEPro Directives. (line 6) -* TILEPro modifiers: TILEPro Modifiers. (line 6) -* TILEPro opcode names: TILEPro Opcodes. (line 6) -* TILEPro register names: TILEPro Registers. (line 6) -* TILEPro support: TILEPro-Dependent. (line 6) -* TILEPro syntax: TILEPro Syntax. (line 6) -* time, total for assembly: statistics. (line 6) -* title directive: Title. (line 6) -* tls_gd directive, Nios II: Nios II Relocations. (line 38) -* tls_ie directive, Nios II: Nios II Relocations. (line 38) -* tls_ldm directive, Nios II: Nios II Relocations. (line 38) -* tls_ldo directive, Nios II: Nios II Relocations. (line 38) -* tls_le directive, Nios II: Nios II Relocations. (line 38) -* TMS320C6X support: TIC6X-Dependent. (line 6) -* tp register, V850: V850-Regs. (line 20) -* transform directive: Transform Directive. (line 6) -* trusted compiler: f. (line 6) -* turning preprocessing on and off: Preprocessing. (line 27) -* type directive (COFF version): Type. (line 11) -* type directive (ELF version): Type. (line 22) -* type of a symbol: Symbol Type. (line 6) -* ualong directive, SH: SH Directives. (line 6) -* uaquad directive, SH: SH Directives. (line 6) -* uaword directive, SH: SH Directives. (line 6) -* ubyte directive, TIC54X: TIC54X-Directives. (line 36) -* uchar directive, TIC54X: TIC54X-Directives. (line 36) -* uhalf directive, TIC54X: TIC54X-Directives. (line 111) -* uint directive, TIC54X: TIC54X-Directives. (line 111) -* uleb128 directive: Uleb128. (line 6) -* ulong directive, TIC54X: TIC54X-Directives. (line 135) -* undefined section: Ld Sections. (line 36) -* union directive, TIC54X: TIC54X-Directives. (line 250) -* unsegm: Z8000 Directives. (line 14) -* usect directive, TIC54X: TIC54X-Directives. (line 262) -* ushort directive, TIC54X: TIC54X-Directives. (line 111) -* uword directive, TIC54X: TIC54X-Directives. (line 111) -* V850 command line options: V850 Options. (line 9) -* V850 floating point (IEEE): V850 Floating Point. (line 6) -* V850 line comment character: V850-Chars. (line 6) -* V850 line separator: V850-Chars. (line 13) -* V850 machine directives: V850 Directives. (line 6) -* V850 opcodes: V850 Opcodes. (line 6) -* V850 options (none): V850 Options. (line 6) -* V850 register names: V850-Regs. (line 6) -* V850 support: V850-Dependent. (line 6) -* val directive: Val. (line 6) -* value attribute, COFF: Val. (line 6) -* value of a symbol: Symbol Value. (line 6) -* var directive, TIC54X: TIC54X-Directives. (line 272) -* VAX bitfields not supported: VAX-no. (line 6) -* VAX branch improvement: VAX-branch. (line 6) -* VAX command-line options ignored: VAX-Opts. (line 6) -* VAX displacement sizing character: VAX-operands. (line 12) -* VAX floating point: VAX-float. (line 6) -* VAX immediate character: VAX-operands. (line 6) -* VAX indirect character: VAX-operands. (line 9) -* VAX line comment character: VAX-Chars. (line 6) -* VAX line separator: VAX-Chars. (line 14) -* VAX machine directives: VAX-directives. (line 6) -* VAX opcode mnemonics: VAX-opcodes. (line 6) -* VAX operand notation: VAX-operands. (line 6) -* VAX register names: VAX-operands. (line 17) -* VAX support: Vax-Dependent. (line 6) -* Vax-11 C compatibility: VAX-Opts. (line 42) -* VAX/VMS options: VAX-Opts. (line 42) -* version directive: Version. (line 6) -* version directive, TIC54X: TIC54X-Directives. (line 276) -* version of assembler: v. (line 6) -* versions of symbols: Symver. (line 6) -* Virtualization instruction generation override: MIPS ASE Instruction Generation Overrides. - (line 42) -* visibility <1>: Protected. (line 6) -* visibility <2>: Hidden. (line 6) -* visibility: Internal. (line 6) -* VMS (VAX) options: VAX-Opts. (line 42) -* vtable_entry directive: VTableEntry. (line 6) -* vtable_inherit directive: VTableInherit. (line 6) -* warning directive: Warning. (line 6) -* warning for altered difference tables: K. (line 6) -* warning messages: Errors. (line 6) -* warnings, causing error: W. (line 16) -* warnings, M32R: M32R-Warnings. (line 6) -* warnings, suppressing: W. (line 11) -* warnings, switching on: W. (line 19) -* weak directive: Weak. (line 6) -* weakref directive: Weakref. (line 6) -* whitespace: Whitespace. (line 6) -* whitespace, removed by preprocessor: Preprocessing. (line 7) -* wide floating point directives, VAX: VAX-directives. (line 10) -* width directive, TIC54X: TIC54X-Directives. (line 127) -* Width of continuation lines of disassembly output: listing. (line 21) -* Width of first line disassembly output: listing. (line 16) -* Width of source line output: listing. (line 28) -* wmsg directive, TIC54X: TIC54X-Directives. (line 77) -* word directive: Word. (line 6) -* word directive, ARC: ARC Directives. (line 171) -* word directive, H8/300: H8/300 Directives. (line 6) -* word directive, i386: i386-Float. (line 21) -* word directive, Nios II: Nios II Directives. (line 13) -* word directive, SPARC: Sparc-Directives. (line 51) -* word directive, TIC54X: TIC54X-Directives. (line 111) -* word directive, x86-64: i386-Float. (line 21) -* writing patterns in memory: Fill. (line 6) -* wval: Z8000 Directives. (line 24) -* x86 machine directives: i386-Directives. (line 6) -* x86-64 arch directive: i386-Arch. (line 6) -* x86-64 att_syntax pseudo op: i386-Variations. (line 6) -* x86-64 conversion instructions: i386-Mnemonics. (line 37) -* x86-64 floating point: i386-Float. (line 6) -* x86-64 immediate operands: i386-Variations. (line 15) -* x86-64 instruction naming: i386-Mnemonics. (line 6) -* x86-64 intel_syntax pseudo op: i386-Variations. (line 6) -* x86-64 jump optimization: i386-Jumps. (line 6) -* x86-64 jump, call, return: i386-Variations. (line 41) -* x86-64 jump/call operands: i386-Variations. (line 15) -* x86-64 memory references: i386-Memory. (line 6) -* x86-64 options: i386-Options. (line 6) -* x86-64 register operands: i386-Variations. (line 15) -* x86-64 registers: i386-Regs. (line 6) -* x86-64 sections: i386-Variations. (line 47) -* x86-64 size suffixes: i386-Variations. (line 29) -* x86-64 source, destination operands: i386-Variations. (line 22) -* x86-64 support: i386-Dependent. (line 6) -* x86-64 syntax compatibility: i386-Variations. (line 6) -* xfloat directive, TIC54X: TIC54X-Directives. (line 64) -* XGATE addressing modes: XGATE-Syntax. (line 29) -* XGATE assembler directives: XGATE-Directives. (line 6) -* XGATE floating point: XGATE-Float. (line 6) -* XGATE line comment character: XGATE-Syntax. (line 16) -* XGATE line separator: XGATE-Syntax. (line 26) -* XGATE opcodes: XGATE-opcodes. (line 6) -* XGATE options: XGATE-Opts. (line 6) -* XGATE support: XGATE-Dependent. (line 6) -* XGATE syntax: XGATE-Syntax. (line 6) -* xlong directive, TIC54X: TIC54X-Directives. (line 135) -* XStormy16 comment character: XStormy16-Chars. (line 11) -* XStormy16 line comment character: XStormy16-Chars. (line 6) -* XStormy16 line separator: XStormy16-Chars. (line 14) -* XStormy16 machine directives: XStormy16 Directives. - (line 6) -* XStormy16 pseudo-opcodes: XStormy16 Opcodes. (line 6) -* XStormy16 support: XSTORMY16-Dependent. (line 6) -* Xtensa architecture: Xtensa-Dependent. (line 6) -* Xtensa assembler syntax: Xtensa Syntax. (line 6) -* Xtensa directives: Xtensa Directives. (line 6) -* Xtensa opcode names: Xtensa Opcodes. (line 6) -* Xtensa register names: Xtensa Registers. (line 6) -* xword directive, SPARC: Sparc-Directives. (line 55) -* Z80 $: Z80-Chars. (line 15) -* Z80 ': Z80-Chars. (line 20) -* Z80 floating point: Z80 Floating Point. (line 6) -* Z80 line comment character: Z80-Chars. (line 6) -* Z80 line separator: Z80-Chars. (line 13) -* Z80 options: Z80 Options. (line 6) -* Z80 registers: Z80-Regs. (line 6) -* Z80 support: Z80-Dependent. (line 6) -* Z80 Syntax: Z80 Options. (line 47) -* Z80, \: Z80-Chars. (line 18) -* Z80, case sensitivity: Z80-Case. (line 6) -* Z80-only directives: Z80 Directives. (line 9) -* Z800 addressing modes: Z8000-Addressing. (line 6) -* Z8000 directives: Z8000 Directives. (line 6) -* Z8000 line comment character: Z8000-Chars. (line 6) -* Z8000 line separator: Z8000-Chars. (line 13) -* Z8000 opcode summary: Z8000 Opcodes. (line 6) -* Z8000 options: Z8000 Options. (line 6) -* Z8000 registers: Z8000-Regs. (line 6) -* Z8000 support: Z8000-Dependent. (line 6) -* zdaoff pseudo-op, V850: V850 Opcodes. (line 99) -* zero register, V850: V850-Regs. (line 7) -* zero-terminated strings: Asciz. (line 6) - - - -Tag Table: -Node: Top739 -Node: Overview1728 -Node: Manual33632 -Node: GNU Assembler34576 -Node: Object Formats35747 -Node: Command Line36199 -Node: Input Files37286 -Node: Object39267 -Node: Errors40163 -Node: Invoking41358 -Node: a43313 -Node: alternate45224 -Node: D45396 -Node: f45629 -Node: I46137 -Node: K46681 -Node: L46985 -Node: listing47724 -Node: M49383 -Node: MD53784 -Node: o54210 -Node: R54665 -Node: statistics55695 -Node: traditional-format56102 -Node: v56575 -Node: W56850 -Node: Z57757 -Node: Syntax58279 -Node: Preprocessing58871 -Node: Whitespace60434 -Node: Comments60830 -Node: Symbol Intro62841 -Node: Statements63568 -Node: Constants65557 -Node: Characters66188 -Node: Strings66690 -Node: Chars68856 -Node: Numbers69610 -Node: Integers70150 -Node: Bignums70806 -Node: Flonums71162 -Node: Sections72909 -Node: Secs Background73287 -Node: Ld Sections78326 -Node: As Sections80710 -Node: Sub-Sections81620 -Node: bss84765 -Node: Symbols85715 -Node: Labels86363 -Node: Setting Symbols87094 -Node: Symbol Names87648 -Node: Dot92939 -Node: Symbol Attributes93386 -Node: Symbol Value94123 -Node: Symbol Type95168 -Node: a.out Symbols95556 -Node: Symbol Desc95818 -Node: Symbol Other96113 -Node: COFF Symbols96282 -Node: SOM Symbols96955 -Node: Expressions97397 -Node: Empty Exprs98146 -Node: Integer Exprs98493 -Node: Arguments98888 -Node: Operators99994 -Node: Prefix Ops100329 -Node: Infix Ops100657 -Node: Pseudo Ops103047 -Node: Abort108671 -Node: ABORT (COFF)109083 -Node: Align109291 -Node: Altmacro111573 -Node: Ascii112902 -Node: Asciz113211 -Node: Balign113456 -Node: Bundle directives115332 -Node: Byte118261 -Node: CFI directives118522 -Node: Comm124151 -Ref: Comm-Footnote-1125752 -Node: Data126114 -Node: Def126431 -Node: Desc126663 -Node: Dim127163 -Node: Double127420 -Node: Eject127758 -Node: Else127933 -Node: Elseif128233 -Node: End128527 -Node: Endef128742 -Node: Endfunc128919 -Node: Endif129094 -Node: Equ129355 -Node: Equiv129869 -Node: Eqv130425 -Node: Err130789 -Node: Error131100 -Node: Exitm131545 -Node: Extern131714 -Node: Fail131975 -Node: File132420 -Node: Fill133749 -Node: Float134713 -Node: Func135055 -Node: Global135645 -Node: Gnu_attribute136402 -Node: Hidden136627 -Node: hword137213 -Node: Ident137541 -Node: If138115 -Node: Incbin141174 -Node: Include141869 -Node: Int142420 -Node: Internal142801 -Node: Irp143449 -Node: Irpc144328 -Node: Lcomm145245 -Node: Lflags145993 -Node: Line146187 -Node: Linkonce147100 -Node: List148329 -Node: Ln148937 -Node: Loc149087 -Node: Loc_mark_labels150473 -Node: Local150957 -Node: Long151569 -Node: Macro151747 -Node: MRI157669 -Node: Noaltmacro158007 -Node: Nolist158176 -Node: Octa158606 -Node: Offset158943 -Node: Org159270 -Node: P2align160555 -Node: PopSection162483 -Node: Previous162991 -Node: Print164404 -Node: Protected164633 -Node: Psize165280 -Node: Purgem165964 -Node: PushSection166185 -Node: Quad166928 -Node: Reloc167384 -Node: Rept168145 -Node: Sbttl168559 -Node: Scl168924 -Node: Section169265 -Node: Set175419 -Node: Short175992 -Node: Single176315 -Node: Size176662 -Node: Skip177336 -Node: Sleb128177660 -Node: Space177984 -Node: Stab178625 -Node: String180629 -Node: Struct181623 -Node: SubSection182348 -Node: Symver182911 -Node: Tag185304 -Node: Text185686 -Node: Title186007 -Node: Type186388 -Node: Uleb128188701 -Node: Val189025 -Node: Version189275 -Node: VTableEntry189550 -Node: VTableInherit189840 -Node: Warning190290 -Node: Weak190524 -Node: Weakref191193 -Node: Word192158 -Node: Deprecated194004 -Node: Object Attributes194239 -Node: GNU Object Attributes195959 -Node: Defining New Object Attributes198512 -Node: Machine Dependencies199309 -Node: AArch64-Dependent203138 -Node: AArch64 Options203584 -Node: AArch64 Syntax204216 -Node: AArch64-Chars204513 -Node: AArch64-Regs204999 -Node: AArch64-Relocations205293 -Node: AArch64 Floating Point206372 -Node: AArch64 Directives206597 -Node: AArch64 Opcodes208145 -Node: AArch64 Mapping Symbols208824 -Node: Alpha-Dependent209206 -Node: Alpha Notes209646 -Node: Alpha Options209927 -Node: Alpha Syntax212402 -Node: Alpha-Chars212871 -Node: Alpha-Regs213283 -Node: Alpha-Relocs213670 -Node: Alpha Floating Point219928 -Node: Alpha Directives220150 -Node: Alpha Opcodes225673 -Node: ARC-Dependent225968 -Node: ARC Options226351 -Node: ARC Syntax227420 -Node: ARC-Chars227652 -Node: ARC-Regs228133 -Node: ARC Floating Point228257 -Node: ARC Directives228568 -Node: ARC Opcodes234533 -Node: ARM-Dependent234759 -Node: ARM Options235224 -Node: ARM Syntax244069 -Node: ARM-Instruction-Set244437 -Node: ARM-Chars245657 -Node: ARM-Regs246368 -Node: ARM-Relocations246577 -Node: ARM-Neon-Alignment247711 -Node: ARM Floating Point248175 -Node: ARM Directives248374 -Ref: arm_pad249691 -Ref: arm_fnend253028 -Ref: arm_fnstart253352 -Ref: arm_save256362 -Ref: arm_setfp257063 -Node: ARM Opcodes260355 -Node: ARM Mapping Symbols262443 -Node: ARM Unwinding Tutorial263253 -Node: AVR-Dependent269455 -Node: AVR Options269745 -Node: AVR Syntax274633 -Node: AVR-Chars274920 -Node: AVR-Regs275479 -Node: AVR-Modifiers276058 -Node: AVR Opcodes278118 -Node: Blackfin-Dependent283364 -Node: Blackfin Options283676 -Node: Blackfin Syntax284650 -Node: Blackfin Directives290857 -Node: CR16-Dependent291603 -Node: CR16 Operand Qualifiers291903 -Node: CR16 Syntax294632 -Node: CR16-Chars294818 -Node: CRIS-Dependent295355 -Node: CRIS-Opts295701 -Ref: march-option297387 -Node: CRIS-Expand299204 -Node: CRIS-Symbols300387 -Node: CRIS-Syntax301556 -Node: CRIS-Chars301892 -Node: CRIS-Pic302443 -Ref: crispic302639 -Node: CRIS-Regs306179 -Node: CRIS-Pseudos306596 -Ref: crisnous307372 -Node: D10V-Dependent308654 -Node: D10V-Opts309005 -Node: D10V-Syntax309967 -Node: D10V-Size310496 -Node: D10V-Subs311469 -Node: D10V-Chars312504 -Node: D10V-Regs314416 -Node: D10V-Addressing315461 -Node: D10V-Word316147 -Node: D10V-Float316662 -Node: D10V-Opcodes316973 -Node: D30V-Dependent317366 -Node: D30V-Opts317723 -Node: D30V-Syntax318400 -Node: D30V-Size318934 -Node: D30V-Subs319907 -Node: D30V-Chars320944 -Node: D30V-Guarded323552 -Node: D30V-Regs324234 -Node: D30V-Addressing325375 -Node: D30V-Float326045 -Node: D30V-Opcodes326358 -Node: Epiphany-Dependent326753 -Node: Epiphany Options327041 -Node: Epiphany Syntax327440 -Node: Epiphany-Chars327641 -Node: H8/300-Dependent328195 -Node: H8/300 Options328611 -Node: H8/300 Syntax328878 -Node: H8/300-Chars329179 -Node: H8/300-Regs329478 -Node: H8/300-Addressing330397 -Node: H8/300 Floating Point331438 -Node: H8/300 Directives331765 -Node: H8/300 Opcodes332893 -Node: HPPA-Dependent341215 -Node: HPPA Notes341650 -Node: HPPA Options342408 -Node: HPPA Syntax342603 -Node: HPPA Floating Point343873 -Node: HPPA Directives344079 -Node: HPPA Opcodes352765 -Node: ESA/390-Dependent353024 -Node: ESA/390 Notes353484 -Node: ESA/390 Options354275 -Node: ESA/390 Syntax354485 -Node: ESA/390 Floating Point356658 -Node: ESA/390 Directives356937 -Node: ESA/390 Opcodes360226 -Node: i386-Dependent360488 -Node: i386-Options361818 -Node: i386-Directives367329 -Node: i386-Syntax368067 -Node: i386-Variations368372 -Node: i386-Chars370913 -Node: i386-Mnemonics371642 -Node: i386-Regs374953 -Node: i386-Prefixes376998 -Node: i386-Memory379758 -Node: i386-Jumps382695 -Node: i386-Float383816 -Node: i386-SIMD385647 -Node: i386-LWP386756 -Node: i386-BMI387590 -Node: i386-TBM387968 -Node: i386-16bit388498 -Node: i386-Bugs390569 -Node: i386-Arch391323 -Node: i386-Notes394513 -Node: i860-Dependent395371 -Node: Notes-i860395811 -Node: Options-i860396716 -Node: Directives-i860398079 -Node: Opcodes for i860399148 -Node: Syntax of i860401338 -Node: i860-Chars401522 -Node: i960-Dependent402081 -Node: Options-i960402528 -Node: Floating Point-i960406413 -Node: Directives-i960406681 -Node: Opcodes for i960408715 -Node: callj-i960409355 -Node: Compare-and-branch-i960409844 -Node: Syntax of i960411748 -Node: i960-Chars411948 -Node: IA-64-Dependent412491 -Node: IA-64 Options412792 -Node: IA-64 Syntax415943 -Node: IA-64-Chars416349 -Node: IA-64-Regs416579 -Node: IA-64-Bits417505 -Node: IA-64-Relocs418035 -Node: IA-64 Opcodes418507 -Node: IP2K-Dependent418779 -Node: IP2K-Opts419051 -Node: IP2K-Syntax419551 -Node: IP2K-Chars419725 -Node: LM32-Dependent420268 -Node: LM32 Options420563 -Node: LM32 Syntax421197 -Node: LM32-Regs421493 -Node: LM32-Modifiers422452 -Node: LM32-Chars423827 -Node: LM32 Opcodes424335 -Node: M32C-Dependent424639 -Node: M32C-Opts425148 -Node: M32C-Syntax425568 -Node: M32C-Modifiers425803 -Node: M32C-Chars427592 -Node: M32R-Dependent428158 -Node: M32R-Opts428479 -Node: M32R-Directives432642 -Node: M32R-Warnings436617 -Node: M68K-Dependent439623 -Node: M68K-Opts440090 -Node: M68K-Syntax447463 -Node: M68K-Moto-Syntax449303 -Node: M68K-Float451893 -Node: M68K-Directives452413 -Node: M68K-opcodes453741 -Node: M68K-Branch453967 -Node: M68K-Chars458165 -Node: M68HC11-Dependent459028 -Node: M68HC11-Opts459559 -Node: M68HC11-Syntax463864 -Node: M68HC11-Modifiers466655 -Node: M68HC11-Directives468483 -Node: M68HC11-Float469859 -Node: M68HC11-opcodes470387 -Node: M68HC11-Branch470569 -Node: Meta-Dependent473018 -Node: Meta Options473303 -Node: Meta Syntax473965 -Node: Meta-Chars474177 -Node: Meta-Regs474477 -Node: MicroBlaze-Dependent474753 -Node: MicroBlaze Directives475442 -Node: MicroBlaze Syntax476825 -Node: MicroBlaze-Chars477057 -Node: MIPS-Dependent477609 -Node: MIPS Options478998 -Node: MIPS Macros492164 -Ref: MIPS Macros-Footnote-1494878 -Node: MIPS Symbol Sizes495021 -Node: MIPS Small Data496693 -Node: MIPS ISA498856 -Node: MIPS assembly options500605 -Node: MIPS autoextend501174 -Node: MIPS insn501908 -Node: MIPS NaN Encodings503194 -Node: MIPS Option Stack505152 -Node: MIPS ASE Instruction Generation Overrides505937 -Node: MIPS Floating-Point508225 -Node: MIPS Syntax509131 -Node: MIPS-Chars509393 -Node: MMIX-Dependent509935 -Node: MMIX-Opts510315 -Node: MMIX-Expand513919 -Node: MMIX-Syntax515234 -Ref: mmixsite515591 -Node: MMIX-Chars516432 -Node: MMIX-Symbols517306 -Node: MMIX-Regs519374 -Node: MMIX-Pseudos520399 -Ref: MMIX-loc520540 -Ref: MMIX-local521620 -Ref: MMIX-is522152 -Ref: MMIX-greg522423 -Ref: GREG-base523342 -Ref: MMIX-byte524659 -Ref: MMIX-constants525130 -Ref: MMIX-prefix525776 -Ref: MMIX-spec526150 -Node: MMIX-mmixal526484 -Node: MSP430-Dependent529982 -Node: MSP430 Options530452 -Node: MSP430 Syntax531786 -Node: MSP430-Macros532102 -Node: MSP430-Chars532833 -Node: MSP430-Regs533548 -Node: MSP430-Ext534108 -Node: MSP430 Floating Point535929 -Node: MSP430 Directives536153 -Node: MSP430 Opcodes537026 -Node: MSP430 Profiling Capability537421 -Node: NiosII-Dependent539750 -Node: Nios II Options540170 -Node: Nios II Syntax541091 -Node: Nios II Chars541297 -Node: Nios II Relocations541488 -Node: Nios II Directives542962 -Node: Nios II Opcodes544525 -Node: NS32K-Dependent544800 -Node: NS32K Syntax545023 -Node: NS32K-Chars545172 -Node: PDP-11-Dependent545912 -Node: PDP-11-Options546301 -Node: PDP-11-Pseudos551372 -Node: PDP-11-Syntax551717 -Node: PDP-11-Mnemonics552549 -Node: PDP-11-Synthetic552851 -Node: PJ-Dependent553069 -Node: PJ Options553332 -Node: PJ Syntax553627 -Node: PJ-Chars553792 -Node: PPC-Dependent554341 -Node: PowerPC-Opts554674 -Node: PowerPC-Pseudo558170 -Node: PowerPC-Syntax558792 -Node: PowerPC-Chars558982 -Node: RL78-Dependent559733 -Node: RL78-Opts560131 -Node: RL78-Modifiers560406 -Node: RL78-Directives561182 -Node: RL78-Syntax561680 -Node: RL78-Chars561876 -Node: RX-Dependent562432 -Node: RX-Opts562863 -Node: RX-Modifiers566270 -Node: RX-Directives567374 -Node: RX-Float568114 -Node: RX-Syntax568755 -Node: RX-Chars568934 -Node: S/390-Dependent569486 -Node: s390 Options570202 -Node: s390 Characters571748 -Node: s390 Syntax572269 -Node: s390 Register573170 -Node: s390 Mnemonics573983 -Node: s390 Operands577003 -Node: s390 Formats579622 -Node: s390 Aliases587493 -Node: s390 Operand Modifier591390 -Node: s390 Instruction Marker595191 -Node: s390 Literal Pool Entries596207 -Node: s390 Directives598130 -Node: s390 Floating Point603186 -Node: SCORE-Dependent603632 -Node: SCORE-Opts603937 -Node: SCORE-Pseudo605225 -Node: SCORE-Syntax607302 -Node: SCORE-Chars607484 -Node: SH-Dependent608042 -Node: SH Options608453 -Node: SH Syntax609508 -Node: SH-Chars609781 -Node: SH-Regs610324 -Node: SH-Addressing610938 -Node: SH Floating Point611847 -Node: SH Directives612941 -Node: SH Opcodes613342 -Node: SH64-Dependent617664 -Node: SH64 Options618027 -Node: SH64 Syntax619824 -Node: SH64-Chars620107 -Node: SH64-Regs620656 -Node: SH64-Addressing621752 -Node: SH64 Directives622935 -Node: SH64 Opcodes623920 -Node: Sparc-Dependent624636 -Node: Sparc-Opts625048 -Node: Sparc-Aligned-Data629715 -Node: Sparc-Syntax630547 -Node: Sparc-Chars631121 -Node: Sparc-Regs631684 -Node: Sparc-Constants636795 -Node: Sparc-Relocs641555 -Node: Sparc-Size-Translations646691 -Node: Sparc-Float648340 -Node: Sparc-Directives648535 -Node: TIC54X-Dependent650495 -Node: TIC54X-Opts651258 -Node: TIC54X-Block652301 -Node: TIC54X-Env652661 -Node: TIC54X-Constants653009 -Node: TIC54X-Subsyms653411 -Node: TIC54X-Locals655320 -Node: TIC54X-Builtins656064 -Node: TIC54X-Ext658535 -Node: TIC54X-Directives659106 -Node: TIC54X-Macros670007 -Node: TIC54X-MMRegs672118 -Node: TIC54X-Syntax672356 -Node: TIC54X-Chars672546 -Node: TIC6X-Dependent673237 -Node: TIC6X Options673540 -Node: TIC6X Syntax675541 -Node: TIC6X Directives676643 -Node: TILE-Gx-Dependent678928 -Node: TILE-Gx Options679238 -Node: TILE-Gx Syntax679588 -Node: TILE-Gx Opcodes681822 -Node: TILE-Gx Registers682110 -Node: TILE-Gx Modifiers682882 -Node: TILE-Gx Directives687854 -Node: TILEPro-Dependent688758 -Node: TILEPro Options689067 -Node: TILEPro Syntax689251 -Node: TILEPro Opcodes691485 -Node: TILEPro Registers691776 -Node: TILEPro Modifiers692546 -Node: TILEPro Directives697311 -Node: Z80-Dependent698215 -Node: Z80 Options698603 -Node: Z80 Syntax700026 -Node: Z80-Chars700698 -Node: Z80-Regs701548 -Node: Z80-Case701900 -Node: Z80 Floating Point702345 -Node: Z80 Directives702539 -Node: Z80 Opcodes704164 -Node: Z8000-Dependent705508 -Node: Z8000 Options706469 -Node: Z8000 Syntax706686 -Node: Z8000-Chars706976 -Node: Z8000-Regs707458 -Node: Z8000-Addressing708248 -Node: Z8000 Directives709365 -Node: Z8000 Opcodes710974 -Node: Vax-Dependent720916 -Node: VAX-Opts721476 -Node: VAX-float725211 -Node: VAX-directives725843 -Node: VAX-opcodes726704 -Node: VAX-branch727093 -Node: VAX-operands729600 -Node: VAX-no730363 -Node: VAX-Syntax730619 -Node: VAX-Chars730785 -Node: V850-Dependent731339 -Node: V850 Options731737 -Node: V850 Syntax735383 -Node: V850-Chars735623 -Node: V850-Regs736167 -Node: V850 Floating Point737735 -Node: V850 Directives737941 -Node: V850 Opcodes740008 -Node: XGATE-Dependent745900 -Node: XGATE-Opts746320 -Node: XGATE-Syntax747311 -Node: XGATE-Directives749390 -Node: XGATE-Float749629 -Node: XGATE-opcodes750126 -Node: XSTORMY16-Dependent750238 -Node: XStormy16 Syntax750584 -Node: XStormy16-Chars750774 -Node: XStormy16 Directives751387 -Node: XStormy16 Opcodes752042 -Node: Xtensa-Dependent753098 -Node: Xtensa Options753832 -Node: Xtensa Syntax756569 -Node: Xtensa Opcodes758713 -Node: Xtensa Registers760507 -Node: Xtensa Optimizations761140 -Node: Density Instructions761592 -Node: Xtensa Automatic Alignment762694 -Node: Xtensa Relaxation765141 -Node: Xtensa Branch Relaxation766049 -Node: Xtensa Call Relaxation767421 -Node: Xtensa Immediate Relaxation769207 -Node: Xtensa Directives771781 -Node: Schedule Directive773490 -Node: Longcalls Directive773830 -Node: Transform Directive774374 -Node: Literal Directive775116 -Ref: Literal Directive-Footnote-1778655 -Node: Literal Position Directive778797 -Node: Literal Prefix Directive780496 -Node: Absolute Literals Directive781394 -Node: Reporting Bugs782701 -Node: Bug Criteria783427 -Node: Bug Reporting784194 -Node: Acknowledgements790843 -Ref: Acknowledgements-Footnote-1795808 -Node: GNU Free Documentation License795834 -Node: AS Index821003 - -End Tag Table |