diff options
Diffstat (limited to 'gas/doc')
-rw-r--r-- | gas/doc/Makefile.am | 50 | ||||
-rw-r--r-- | gas/doc/Makefile.in | 440 | ||||
-rw-r--r-- | gas/doc/all.texi | 73 | ||||
-rw-r--r-- | gas/doc/as.1 | 308 | ||||
-rw-r--r-- | gas/doc/as.texinfo | 5437 | ||||
-rw-r--r-- | gas/doc/c-a29k.texi | 182 | ||||
-rw-r--r-- | gas/doc/c-arm.texi | 267 | ||||
-rw-r--r-- | gas/doc/c-d10v.texi | 250 | ||||
-rw-r--r-- | gas/doc/c-d30v.texi | 292 | ||||
-rw-r--r-- | gas/doc/c-h8300.texi | 342 | ||||
-rw-r--r-- | gas/doc/c-h8500.texi | 272 | ||||
-rw-r--r-- | gas/doc/c-hppa.texi | 263 | ||||
-rw-r--r-- | gas/doc/c-i386.texi | 529 | ||||
-rw-r--r-- | gas/doc/c-i960.texi | 298 | ||||
-rw-r--r-- | gas/doc/c-m32r.texi | 134 | ||||
-rw-r--r-- | gas/doc/c-m68k.texi | 503 | ||||
-rw-r--r-- | gas/doc/c-mips.texi | 257 | ||||
-rw-r--r-- | gas/doc/c-ns32k.texi | 30 | ||||
-rw-r--r-- | gas/doc/c-pj.texi | 28 | ||||
-rw-r--r-- | gas/doc/c-sh.texi | 272 | ||||
-rw-r--r-- | gas/doc/c-sparc.texi | 194 | ||||
-rw-r--r-- | gas/doc/c-v850.texi | 363 | ||||
-rw-r--r-- | gas/doc/c-vax.texi | 357 | ||||
-rw-r--r-- | gas/doc/c-z8k.texi | 380 | ||||
-rw-r--r-- | gas/doc/gasp.texi | 1086 | ||||
-rw-r--r-- | gas/doc/h8.texi | 26 | ||||
-rw-r--r-- | gas/doc/internals.texi | 1694 |
27 files changed, 0 insertions, 14327 deletions
diff --git a/gas/doc/Makefile.am b/gas/doc/Makefile.am deleted file mode 100644 index 158ec134dc5..00000000000 --- a/gas/doc/Makefile.am +++ /dev/null @@ -1,50 +0,0 @@ -## Process this file with automake to generate Makefile.in - -AUTOMAKE_OPTIONS = cygnus - -# What version of the manual you want; "all" includes everything -CONFIG=all - -man_MANS = as.1 - -info_TEXINFOS = as.texinfo gasp.texi - -asconfig.texi: $(CONFIG).texi - rm -f asconfig.texi - ln -s $(srcdir)/$(CONFIG).texi ./asconfig.texi >/dev/null 2>&1 \ - || ln $(srcdir)/$(CONFIG).texi ./asconfig.texi >/dev/null 2>&1 \ - || cp $(srcdir)/$(CONFIG).texi ./asconfig.texi - -CPU_DOCS = \ - c-a29k.texi \ - c-arm.texi \ - c-d10v.texi \ - c-h8300.texi \ - c-h8500.texi \ - c-hppa.texi \ - c-i386.texi \ - c-i960.texi \ - c-m68k.texi \ - c-mips.texi \ - c-ns32k.texi \ - c-pj.texi \ - c-sh.texi \ - c-sparc.texi \ - c-vax.texi \ - c-v850.texi \ - c-z8k.texi - -gasver.texi: Makefile - rm -f $@ - echo '@set VERSION $(VERSION)' > $@ - -as.info: $(srcdir)/as.texinfo asconfig.texi gasver.texi $(CPU_DOCS) -as.dvi: $(srcdir)/as.texinfo asconfig.texi gasver.texi $(CPU_DOCS) - -# This one isn't ready for prime time yet. Not even a little bit. - -noinst_TEXINFOS = internals.texi - -DISTCLEANFILES = asconfig.texi - -MAINTAINERCLEANFILES = gasver.texi diff --git a/gas/doc/Makefile.in b/gas/doc/Makefile.in deleted file mode 100644 index 803c8203804..00000000000 --- a/gas/doc/Makefile.in +++ /dev/null @@ -1,440 +0,0 @@ -# Makefile.in generated automatically by automake 1.4 from Makefile.am - -# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - - -SHELL = @SHELL@ - -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ -VPATH = @srcdir@ -prefix = @prefix@ -exec_prefix = @exec_prefix@ - -bindir = @bindir@ -sbindir = @sbindir@ -libexecdir = @libexecdir@ -datadir = @datadir@ -sysconfdir = @sysconfdir@ -sharedstatedir = @sharedstatedir@ -localstatedir = @localstatedir@ -libdir = @libdir@ -infodir = @infodir@ -mandir = @mandir@ -includedir = @includedir@ -oldincludedir = /usr/include - -DESTDIR = - -pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ - -top_builddir = .. - -ACLOCAL = @ACLOCAL@ -AUTOCONF = @AUTOCONF@ -AUTOMAKE = @AUTOMAKE@ -AUTOHEADER = @AUTOHEADER@ - -INSTALL = @INSTALL@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -transform = @program_transform_name@ - -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_alias = @build_alias@ -build_triplet = @build@ -host_alias = @host_alias@ -host_triplet = @host@ -target_alias = @target_alias@ -target_triplet = @target@ -ALL_OBJ_DEPS = @ALL_OBJ_DEPS@ -AS = @AS@ -BFDLIB = @BFDLIB@ -CATALOGS = @CATALOGS@ -CATOBJEXT = @CATOBJEXT@ -CC = @CC@ -DATADIRNAME = @DATADIRNAME@ -DLLTOOL = @DLLTOOL@ -EXEEXT = @EXEEXT@ -GDBINIT = @GDBINIT@ -GMOFILES = @GMOFILES@ -GMSGFMT = @GMSGFMT@ -GT_NO = @GT_NO@ -GT_YES = @GT_YES@ -INCLUDE_LOCALE_H = @INCLUDE_LOCALE_H@ -INSTOBJEXT = @INSTOBJEXT@ -INTLDEPS = @INTLDEPS@ -INTLLIBS = @INTLLIBS@ -INTLOBJS = @INTLOBJS@ -LD = @LD@ -LEX = @LEX@ -LIBTOOL = @LIBTOOL@ -LN_S = @LN_S@ -MAINT = @MAINT@ -MAKEINFO = @MAKEINFO@ -MKINSTALLDIRS = @MKINSTALLDIRS@ -MSGFMT = @MSGFMT@ -NM = @NM@ -OPCODES_LIB = @OPCODES_LIB@ -PACKAGE = @PACKAGE@ -POFILES = @POFILES@ -POSUB = @POSUB@ -RANLIB = @RANLIB@ -USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ -USE_NLS = @USE_NLS@ -USE_SYMBOL_UNDERSCORE = @USE_SYMBOL_UNDERSCORE@ -VERSION = @VERSION@ -YACC = @YACC@ -atof = @atof@ -cgen_cpu_prefix = @cgen_cpu_prefix@ -extra_objects = @extra_objects@ -install_tooldir = @install_tooldir@ -l = @l@ -obj_format = @obj_format@ -target_cpu_type = @target_cpu_type@ -te_file = @te_file@ - -AUTOMAKE_OPTIONS = cygnus - -# What version of the manual you want; "all" includes everything -CONFIG = all - -man_MANS = as.1 - -info_TEXINFOS = as.texinfo gasp.texi - -CPU_DOCS = \ - c-a29k.texi \ - c-arm.texi \ - c-d10v.texi \ - c-h8300.texi \ - c-h8500.texi \ - c-hppa.texi \ - c-i386.texi \ - c-i960.texi \ - c-m68k.texi \ - c-mips.texi \ - c-ns32k.texi \ - c-pj.texi \ - c-sh.texi \ - c-sparc.texi \ - c-vax.texi \ - c-v850.texi \ - c-z8k.texi - - -# This one isn't ready for prime time yet. Not even a little bit. - -noinst_TEXINFOS = internals.texi - -DISTCLEANFILES = asconfig.texi - -MAINTAINERCLEANFILES = gasver.texi -mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs -CONFIG_HEADER = ../config.h -CONFIG_CLEAN_FILES = -TEXI2DVI = `if test -f $(top_srcdir)/../texinfo/util/texi2dvi; then echo $(top_srcdir)/../texinfo/util/texi2dvi; else echo texi2dvi; fi` -TEXINFO_TEX = $(top_srcdir)/../texinfo/texinfo.tex -INFO_DEPS = as.info gasp.info -DVIS = as.dvi gasp.dvi -TEXINFOS = as.texinfo gasp.texi -man1dir = $(mandir)/man1 -MANS = $(man_MANS) - -NROFF = nroff -DIST_COMMON = Makefile.am Makefile.in - - -DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) - -TAR = gtar -GZIP_ENV = --best -all: all-redirect -.SUFFIXES: -.SUFFIXES: .dvi .info .ps .texi .texinfo .txi -$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) - cd $(top_srcdir) && $(AUTOMAKE) --cygnus doc/Makefile - -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - cd $(top_builddir) \ - && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status - - -as.info: as.texinfo -as.dvi: as.texinfo - - -gasp.info: gasp.texi -gasp.dvi: gasp.texi - - -DVIPS = dvips - -.texi.info: - @rm -f $@ $@-[0-9] $@-[0-9][0-9] - $(MAKEINFO) -I $(srcdir) $< - -.texi.dvi: - TEXINPUTS=$(top_srcdir)/../texinfo/texinfo.tex:$$TEXINPUTS \ - MAKEINFO='$(MAKEINFO) -I $(srcdir)' $(TEXI2DVI) $< - -.texi: - @rm -f $@ $@-[0-9] $@-[0-9][0-9] - $(MAKEINFO) -I $(srcdir) $< - -.texinfo.info: - @rm -f $@ $@-[0-9] $@-[0-9][0-9] - $(MAKEINFO) -I $(srcdir) $< - -.texinfo: - @rm -f $@ $@-[0-9] $@-[0-9][0-9] - $(MAKEINFO) -I $(srcdir) $< - -.texinfo.dvi: - TEXINPUTS=$(top_srcdir)/../texinfo/texinfo.tex:$$TEXINPUTS \ - MAKEINFO='$(MAKEINFO) -I $(srcdir)' $(TEXI2DVI) $< - -.txi.info: - @rm -f $@ $@-[0-9] $@-[0-9][0-9] - $(MAKEINFO) -I $(srcdir) $< - -.txi.dvi: - TEXINPUTS=$(top_srcdir)/../texinfo/texinfo.tex:$$TEXINPUTS \ - MAKEINFO='$(MAKEINFO) -I $(srcdir)' $(TEXI2DVI) $< - -.txi: - @rm -f $@ $@-[0-9] $@-[0-9][0-9] - $(MAKEINFO) -I $(srcdir) $< -.dvi.ps: - $(DVIPS) $< -o $@ - -install-info-am: $(INFO_DEPS) - @$(NORMAL_INSTALL) - $(mkinstalldirs) $(DESTDIR)$(infodir) - @list='$(INFO_DEPS)'; \ - for file in $$list; do \ - if test -f $$file; then d=.; else d=$(srcdir); fi; \ - for ifile in `cd $$d && echo $$file $$file-[0-9] $$file-[0-9][0-9]`; do \ - if test -f $$d/$$ifile; then \ - echo " $(INSTALL_DATA) $$d/$$ifile $(DESTDIR)$(infodir)/$$ifile"; \ - $(INSTALL_DATA) $$d/$$ifile $(DESTDIR)$(infodir)/$$ifile; \ - else : ; fi; \ - done; \ - done - @$(POST_INSTALL) - @if $(SHELL) -c 'install-info --version | sed 1q | fgrep -s -v -i debian' >/dev/null 2>&1; then \ - list='$(INFO_DEPS)'; \ - for file in $$list; do \ - echo " install-info --info-dir=$(DESTDIR)$(infodir) $(DESTDIR)$(infodir)/$$file";\ - install-info --info-dir=$(DESTDIR)$(infodir) $(DESTDIR)$(infodir)/$$file || :;\ - done; \ - else : ; fi - -uninstall-info: - $(PRE_UNINSTALL) - @if $(SHELL) -c 'install-info --version | sed 1q | fgrep -s -v -i debian' >/dev/null 2>&1; then \ - ii=yes; \ - else ii=; fi; \ - list='$(INFO_DEPS)'; \ - for file in $$list; do \ - test -z "$ii" \ - || install-info --info-dir=$(DESTDIR)$(infodir) --remove $$file; \ - done - @$(NORMAL_UNINSTALL) - list='$(INFO_DEPS)'; \ - for file in $$list; do \ - (cd $(DESTDIR)$(infodir) && rm -f $$file $$file-[0-9] $$file-[0-9][0-9]); \ - done - -dist-info: $(INFO_DEPS) - list='$(INFO_DEPS)'; \ - for base in $$list; do \ - if test -f $$base; then d=.; else d=$(srcdir); fi; \ - for file in `cd $$d && eval echo $$base*`; do \ - test -f $(distdir)/$$file \ - || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ - || cp -p $$d/$$file $(distdir)/$$file; \ - done; \ - done - -mostlyclean-aminfo: - -rm -f as.aux as.cp as.cps as.dvi as.fn as.fns as.ky as.kys as.ps \ - as.log as.pg as.toc as.tp as.tps as.vr as.vrs as.op as.tr \ - as.cv as.cn gasp.aux gasp.cp gasp.cps gasp.dvi gasp.fn \ - gasp.fns gasp.ky gasp.kys gasp.ps gasp.log gasp.pg gasp.toc \ - gasp.tp gasp.tps gasp.vr gasp.vrs gasp.op gasp.tr gasp.cv \ - gasp.cn - -clean-aminfo: - -distclean-aminfo: - -maintainer-clean-aminfo: - for i in $(INFO_DEPS); do \ - rm -f $$i; \ - if test "`echo $$i-[0-9]*`" != "$$i-[0-9]*"; then \ - rm -f $$i-[0-9]*; \ - fi; \ - done -clean-info: mostlyclean-aminfo - -install-man1: - $(mkinstalldirs) $(DESTDIR)$(man1dir) - @list='$(man1_MANS)'; \ - l2='$(man_MANS)'; for i in $$l2; do \ - case "$$i" in \ - *.1*) list="$$list $$i" ;; \ - esac; \ - done; \ - for i in $$list; do \ - if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \ - else file=$$i; fi; \ - ext=`echo $$i | sed -e 's/^.*\\.//'`; \ - inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ - inst=`echo $$inst | sed '$(transform)'`.$$ext; \ - echo " $(INSTALL_DATA) $$file $(DESTDIR)$(man1dir)/$$inst"; \ - $(INSTALL_DATA) $$file $(DESTDIR)$(man1dir)/$$inst; \ - done - -uninstall-man1: - @list='$(man1_MANS)'; \ - l2='$(man_MANS)'; for i in $$l2; do \ - case "$$i" in \ - *.1*) list="$$list $$i" ;; \ - esac; \ - done; \ - for i in $$list; do \ - ext=`echo $$i | sed -e 's/^.*\\.//'`; \ - inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ - inst=`echo $$inst | sed '$(transform)'`.$$ext; \ - echo " rm -f $(DESTDIR)$(man1dir)/$$inst"; \ - rm -f $(DESTDIR)$(man1dir)/$$inst; \ - done -install-man: $(MANS) - @$(NORMAL_INSTALL) - $(MAKE) $(AM_MAKEFLAGS) install-man1 -uninstall-man: - @$(NORMAL_UNINSTALL) - $(MAKE) $(AM_MAKEFLAGS) uninstall-man1 -tags: TAGS -TAGS: - - -distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) - -subdir = doc - -distdir: $(DISTFILES) - @for file in $(DISTFILES); do \ - if test -f $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - cp -pr $$d/$$file $(distdir)/$$file; \ - else \ - test -f $(distdir)/$$file \ - || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ - || cp -p $$d/$$file $(distdir)/$$file || :; \ - fi; \ - done - $(MAKE) $(AM_MAKEFLAGS) top_distdir="$(top_distdir)" distdir="$(distdir)" dist-info -info-am: $(INFO_DEPS) -info: info-am -dvi-am: $(DVIS) -dvi: dvi-am -check-am: -check: check-am -installcheck-am: -installcheck: installcheck-am -install-info-am: -install-info: install-info-am -install-exec-am: -install-exec: install-exec-am - -install-data-am: install-man -install-data: install-data-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am -install: install-am -uninstall-am: uninstall-man -uninstall: uninstall-am -all-am: Makefile $(MANS) -all-redirect: all-am -install-strip: - $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install -installdirs: - $(mkinstalldirs) $(DESTDIR)$(mandir)/man1 - - -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -rm -f Makefile $(CONFIG_CLEAN_FILES) - -rm -f config.cache config.log stamp-h stamp-h[0-9]* - -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) - -maintainer-clean-generic: - -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) -mostlyclean-am: mostlyclean-aminfo mostlyclean-generic - -mostlyclean: mostlyclean-am - -clean-am: clean-aminfo clean-generic mostlyclean-am - -clean: clean-am - -distclean-am: distclean-aminfo distclean-generic clean-am - -rm -f libtool - -distclean: distclean-am - -maintainer-clean-am: maintainer-clean-aminfo maintainer-clean-generic \ - distclean-am - @echo "This command is intended for maintainers to use;" - @echo "it deletes files that may require special tools to rebuild." - -maintainer-clean: maintainer-clean-am - -.PHONY: install-info-am uninstall-info mostlyclean-aminfo \ -distclean-aminfo clean-aminfo maintainer-clean-aminfo install-man1 \ -uninstall-man1 install-man uninstall-man tags distdir info-am info \ -dvi-am dvi check check-am installcheck-am installcheck install-info-am \ -install-info install-exec-am install-exec install-data-am install-data \ -install-am install uninstall-am uninstall all-redirect all-am all \ -installdirs mostlyclean-generic distclean-generic clean-generic \ -maintainer-clean-generic clean mostlyclean distclean maintainer-clean - - -asconfig.texi: $(CONFIG).texi - rm -f asconfig.texi - ln -s $(srcdir)/$(CONFIG).texi ./asconfig.texi >/dev/null 2>&1 \ - || ln $(srcdir)/$(CONFIG).texi ./asconfig.texi >/dev/null 2>&1 \ - || cp $(srcdir)/$(CONFIG).texi ./asconfig.texi - -gasver.texi: Makefile - rm -f $@ - echo '@set VERSION $(VERSION)' > $@ - -as.info: $(srcdir)/as.texinfo asconfig.texi gasver.texi $(CPU_DOCS) -as.dvi: $(srcdir)/as.texinfo asconfig.texi gasver.texi $(CPU_DOCS) - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/gas/doc/all.texi b/gas/doc/all.texi deleted file mode 100644 index 416b2dc99c3..00000000000 --- a/gas/doc/all.texi +++ /dev/null @@ -1,73 +0,0 @@ -@c Copyright 1992, 1993 Free Software Foundation, Inc. -@c This file is part of the documentation for the GAS manual - -@c Configuration settings for all-inclusive version of manual - -@c switches:------------------------------------------------------------ -@c Properties of the manual -@c ======================== -@c Discuss all architectures? -@set ALL-ARCH -@c A generic form of manual (not tailored to specific target)? -@set GENERIC -@c Include text on assembler internals? -@clear INTERNALS -@c Many object formats supported in this config? -@set MULTI-OBJ - -@c Object formats of interest -@c ========================== -@set AOUT -@set BOUT -@set COFF -@set ELF -@set SOM - -@c CPUs of interest -@c ================ -@set A29K -@set ARC -@set ARM -@set D10V -@set D30V -@set H8/300 -@set H8/500 -@set HPPA -@set I80386 -@set I960 -@set M32R -@set M680X0 -@set MCORE -@set MIPS -@set PJ -@set SH -@set SPARC -@set V850 -@set VAX -@set VXWORKS -@set Z8000 - -@c Does this version of the assembler use the difference-table kluge? -@set DIFF-TBL-KLUGE - -@c Do all machines described use IEEE floating point? -@clear IEEEFLOAT - -@c Is a word 32 bits, or 16? -@clear W32 -@set W16 - -@c Do symbols have different characters than usual? -@clear SPECIAL-SYMS - -@c strings:------------------------------------------------------------ -@c Name of the assembler: -@set AS as -@c Name of C compiler: -@set GCC gcc -@c Name of linker: -@set LD ld -@c Text for target machine (best not used in generic case; but just in case...) -@set TARGET machine specific -@c Name of object format NOT SET in generic version -@clear OBJ-NAME diff --git a/gas/doc/as.1 b/gas/doc/as.1 deleted file mode 100644 index 08d5805f37c..00000000000 --- a/gas/doc/as.1 +++ /dev/null @@ -1,308 +0,0 @@ -.\" Copyright (c) 1991, 1992, 1996, 1997, 1998 Free Software Foundation -.\" See section COPYING for conditions for redistribution -.TH as 1 "29 March 1996" "cygnus support" "GNU Development Tools" - -.SH NAME -GNU as \- the portable GNU assembler. - -.SH SYNOPSIS -.na -.B as -.RB "[\|" \-a "[\|" dhlns "\|]" \c -\&\[\|\=\c -.I file\c -\&\|]\|] -.RB "[\|" \-D "\|]" -.RB "[\|" \-\-defsym\ SYM=VAL "\|]" -.RB "[\|" \-f "\|]" -.RB "[\|" \-\-gstabs "\|]" -.RB "[\|" \-I -.I path\c -\&\|] -.RB "[\|" \-K "\|]" -.RB "[\|" \-L "\|]" -.RB "[\|" \-M\ |\ \-\-mri "\|]" -.RB "[\|" \-o -.I objfile\c -\&\|] -.RB "[\|" \-R "\|]" -.RB "[\|" \-\-traditional\-format "\|]" -.RB "[\|" \-v "\|]" -.RB "[\|" \-w "\|]" -.RB "[\|" \-\^\- "\ |\ " \c -.I files\c -\&\|.\|.\|.\|] - -.I i960-only options: -.br -.RB "[\|" \-ACA "\||\|" \-ACA_A "\||\|" \-ACB\c -.RB "\||\|" \-ACC "\||\|" \-AKA "\||\|" \-AKB\c -.RB "\||\|" \-AKC "\||\|" \-AMC "\|]" -.RB "[\|" \-b "\|]" -.RB "[\|" \-no-relax "\|]" - -.I m680x0-only options: -.br -.RB "[\|" \-l "\|]" -.RB "[\|" \-mc68000 "\||\|" \-mc68010 "\||\|" \-mc68020 "\|]" -.ad b - -.SH DESCRIPTION -GNU \c -.B as\c -\& 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 -\c -.I pseudo-ops)\c -\& and assembler syntax. - -For information on the syntax and pseudo-ops used by GNU \c -.B as\c -\&, see `\|\c -.B as\c -\|' entry in \c -.B info \c -(or the manual \c -.I -.I -Using as: The GNU Assembler\c -\&). - -\c -.B as\c -\& is primarily intended to assemble the output of the GNU C -compiler \c -.B gcc\c -\& for use by the linker \c -.B ld\c -\&. Nevertheless, -we've tried to make \c -.B as\c -\& assemble correctly everything that the native -assembler would. -This doesn't mean \c -.B as\c -\& 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. - -Each time you run \c -.B as\c -\& it assembles exactly one source -program. The source program is made up of one or more files. -(The standard input is also a file.) - -If \c -.B as\c -\& is given no file names it attempts to read one input file -from the \c -.B as\c -\& standard input, which is normally your terminal. You -may have to type \c -.B ctl-D\c -\& to tell \c -.B as\c -\& there is no more program -to assemble. Use `\|\c -.B \-\^\-\c -\|' if you need to explicitly name the standard input file -in your command line. - -.B as\c -\& may write warnings and error messages to the standard error -file (usually your terminal). This should not happen when \c -.B as\c -\& is -run automatically by a compiler. Warnings report an assumption made so -that \c -.B as\c -\& could keep assembling a flawed program; errors report a -grave problem that stops the assembly. - -.SH OPTIONS -.TP -.BR \-a -Turn on assembly listings. There are various suboptions. -.B d -omits debugging directives. -.B h -includes the high level source code; this is only available if the -source file can be found, and the code was compiled with -.B \-g. -.B l -includes an assembly listing. -.B n -omits forms processing. -.B s -includes a symbol listing. -.B = -.I file -sets the listing file name; this must be the last suboption. -The default suboptions are -.B hls. -.TP -.B \-D -This option is accepted only for script compatibility with calls to -other assemblers; it has no effect on \c -.B as\c -\&. -.TP -.B \-\-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. -.TP -.B \-f -``fast''--skip preprocessing (assume source is compiler output). -.TP -.BI "\-I\ " path -Add -.I path -to the search list for -.B .include -directives. -.TP -.B \-\-gstabs -Generate stabs debugging information for each assembler line. This -may help debugging assembler code, if the debugger can handle it. -.TP -.B \-K -Issue warnings when difference tables altered for long displacements. -.TP -.B \-L -Keep (in symbol table) local symbols, starting with `\|\c -.B L\c -\|' -.TP -.B \-M, \-\-mri -Assemble in MRI compatibility mode. -.TP -.BI "\-o\ " objfile -Name the object-file output from \c -.B as -.TP -.B \-R -Fold data section into text section -.TP -.B \-\-traditional\-format -Use same format as native assembler, when possible. -.TP -.B \-v -Announce \c -.B as\c -\& version -.TP -.B \-W, \-\-no-warn -Suppress warning messages. -.TP -.B \-\-fatal\-warnings -Consider warnings to be fatal. -.TP -.B \-\-warn -Just warn on warnings. -.TP -.IR "\-\^\-" "\ |\ " "files\|.\|.\|." -Source files to assemble, or standard input (\c -.BR "\-\^\-" ")" -.TP -.BI \-A var -.I -(When configured for Intel 960.) -Specify which variant of the 960 architecture is the target. -.TP -.B \-b -.I -(When configured for Intel 960.) -Add code to collect statistics about branches taken. -.TP -.B \-no-relax -.I -(When configured for Intel 960.) -Do not alter compare-and-branch instructions for long displacements; -error if necessary. -.TP -.B \-l -.I -(When configured for Motorola 68000). -.br -Shorten references to undefined symbols, to one word instead of two. -.TP -.BR "\-mc68000" "\||\|" "\-mc68010" "\||\|" "\-mc68020" -.I -(When configured for Motorola 68000). -.br -Specify what processor in the 68000 family is the target (default 68020) - -.PP -Options may be in any order, and may be -before, after, or between file names. The order of file names is -significant. - -`\|\c -.B \-\^\-\c -\|' (two hyphens) by itself names the standard input file -explicitly, as one of the files for \c -.B as\c -\& to assemble. - -Except for `\|\c -.B \-\^\-\c -\|' any command line argument that begins with a -hyphen (`\|\c -.B \-\c -\|') is an option. Each option changes the behavior of -\c -.B as\c -\&. No option changes the way another option works. An -option is a `\|\c -.B \-\c -\|' followed by one or more letters; the case of -the letter is important. All options are optional. - -The `\|\c -.B \-o\c -\|' option expects exactly one file name to follow. 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: -.br -.B -as\ \ \-o\ \ my\-object\-file.o\ \ mumble.s -.br -.B -as\ \ \-omy\-object\-file.o\ \ mumble.s - -.SH "SEE ALSO" -.RB "`\|" as "\|'" -entry in -.B -info\c -\&; -.I -Using as: The GNU Assembler\c -\&; -.BR gcc "(" 1 ")," -.BR ld "(" 1 ")." - -.SH COPYING -Copyright (c) 1991, 1992 Free Software Foundation, Inc. -.PP -Permission is granted to make and distribute verbatim copies of -this manual provided the copyright notice and this permission notice -are preserved on all copies. -.PP -Permission is granted to copy and distribute modified versions of this -manual under the conditions for verbatim copying, provided that the -entire resulting derived work is distributed under the terms of a -permission notice identical to this one. -.PP -Permission is granted to copy and distribute translations of this -manual into another language, under the above conditions for modified -versions, except that this permission notice may be included in -translations approved by the Free Software Foundation instead of in -the original English. diff --git a/gas/doc/as.texinfo b/gas/doc/as.texinfo deleted file mode 100644 index 0f342fe7293..00000000000 --- a/gas/doc/as.texinfo +++ /dev/null @@ -1,5437 +0,0 @@ -\input texinfo @c -*-Texinfo-*- -@c Copyright (c) 1991, 92, 93, 94, 95, 96, 97, 1998 -@c Free Software Foundation, Inc. -@c UPDATE!! On future updates-- -@c (1) check for new machine-dep cmdline options in -@c md_parse_option definitions in config/tc-*.c -@c (2) for platform-specific directives, examine md_pseudo_op -@c in config/tc-*.c -@c (3) for object-format specific directives, examine obj_pseudo_op -@c in config/obj-*.c -@c (4) portable directives in potable[] in read.c -@c %**start of header -@setfilename as.info -@c ---config--- -@c defaults, config file may override: -@set have-stabs -@c --- -@include asconfig.texi -@include gasver.texi -@c --- -@c common OR combinations of conditions -@ifset AOUT -@set aout-bout -@end ifset -@ifset ARM/Thumb -@set ARM -@end ifset -@ifset BOUT -@set aout-bout -@end ifset -@ifset H8/300 -@set H8 -@end ifset -@ifset H8/500 -@set H8 -@end ifset -@ifset SH -@set H8 -@end ifset -@ifset HPPA -@set abnormal-separator -@end ifset -@c ------------ -@ifset GENERIC -@settitle Using @value{AS} -@end ifset -@ifclear GENERIC -@settitle Using @value{AS} (@value{TARGET}) -@end ifclear -@setchapternewpage odd -@c %**end of header - -@c @smallbook -@c @set SMALL -@c WARE! Some of the machine-dependent sections contain tables of machine -@c instructions. Except in multi-column format, these tables look silly. -@c Unfortunately, Texinfo doesn't have a general-purpose multi-col format, so -@c the multi-col format is faked within @example sections. -@c -@c Again unfortunately, the natural size that fits on a page, for these tables, -@c is different depending on whether or not smallbook is turned on. -@c This matters, because of order: text flow switches columns at each page -@c break. -@c -@c The format faked in this source works reasonably well for smallbook, -@c not well for the default large-page format. This manual expects that if you -@c turn on @smallbook, you will also uncomment the "@set SMALL" to enable the -@c tables in question. You can turn on one without the other at your -@c discretion, of course. -@ifinfo -@set SMALL -@c the insn tables look just as silly in info files regardless of smallbook, -@c might as well show 'em anyways. -@end ifinfo - -@ifinfo -@format -START-INFO-DIR-ENTRY -* As: (as). The GNU assembler. -END-INFO-DIR-ENTRY -@end format -@end ifinfo - -@finalout -@syncodeindex ky cp - -@ifinfo -This file documents the GNU Assembler "@value{AS}". - -Copyright (C) 1991, 92, 93, 94, 95, 96, 97, 1998 Free Software Foundation, Inc. - -Permission is granted to make and distribute verbatim copies of -this manual provided the copyright notice and this permission notice -are preserved on all copies. - -@ignore -Permission is granted to process this file through Tex and print the -results, provided the printed document carries copying permission -notice identical to this one except for the removal of this paragraph -(this paragraph not being relevant to the printed manual). - -@end ignore -Permission is granted to copy and distribute modified versions of this manual -under the conditions for verbatim copying, provided that the entire resulting -derived work is distributed under the terms of a permission notice identical to -this one. - -Permission is granted to copy and distribute translations of this manual -into another language, under the above conditions for modified versions. -@end ifinfo - -@titlepage -@title Using @value{AS} -@subtitle The @sc{gnu} Assembler -@ifclear GENERIC -@subtitle for the @value{TARGET} family -@end ifclear -@sp 1 -@subtitle Version @value{VERSION} -@sp 1 -@sp 13 -The Free Software Foundation Inc. thanks The Nice Computer -Company of Australia for loaning Dean Elsner to write the -first (Vax) version of @code{as} for Project @sc{gnu}. -The proprietors, management and staff of TNCCA thank FSF for -distracting the boss while they got some work -done. -@sp 3 -@author Dean Elsner, Jay Fenlason & friends -@page -@tex -{\parskip=0pt -\hfill {\it Using {\tt @value{AS}}}\par -\hfill Edited by Cygnus Support\par -} -%"boxit" macro for figures: -%Modified from Knuth's ``boxit'' macro from TeXbook (answer to exercise 21.3) -\gdef\boxit#1#2{\vbox{\hrule\hbox{\vrule\kern3pt - \vbox{\parindent=0pt\parskip=0pt\hsize=#1\kern3pt\strut\hfil -#2\hfil\strut\kern3pt}\kern3pt\vrule}\hrule}}%box with visible outline -\gdef\ibox#1#2{\hbox to #1{#2\hfil}\kern8pt}% invisible box -@end tex - -@vskip 0pt plus 1filll -Copyright @copyright{} 1991, 92, 93, 94, 95, 96, 97, 1998 Free Software Foundation, Inc. - -Permission is granted to make and distribute verbatim copies of -this manual provided the copyright notice and this permission notice -are preserved on all copies. - -Permission is granted to copy and distribute modified versions of this manual -under the conditions for verbatim copying, provided that the entire resulting -derived work is distributed under the terms of a permission notice identical to -this one. - -Permission is granted to copy and distribute translations of this manual -into another language, under the above conditions for modified versions. -@end titlepage - -@ifinfo -@node Top -@top Using @value{AS} - -This file is a user guide to the @sc{gnu} assembler @code{@value{AS}} version -@value{VERSION}. -@ifclear GENERIC -This version of the file describes @code{@value{AS}} configured to generate -code for @value{TARGET} architectures. -@end ifclear -@menu -* Overview:: Overview -* Invoking:: Command-Line Options -* Syntax:: Syntax -* Sections:: Sections and Relocation -* Symbols:: Symbols -* Expressions:: Expressions -* Pseudo Ops:: Assembler Directives -* Machine Dependencies:: Machine Dependent Features -* Reporting Bugs:: Reporting Bugs -* Acknowledgements:: Who Did What -* Index:: Index -@end menu -@end ifinfo - -@node Overview -@chapter Overview -@iftex -This manual is a user guide to the @sc{gnu} assembler @code{@value{AS}}. -@ifclear GENERIC -This version of the manual describes @code{@value{AS}} configured to generate -code for @value{TARGET} architectures. -@end ifclear -@end iftex - -@cindex invocation summary -@cindex option summary -@cindex summary of options -Here is a brief summary of how to invoke @code{@value{AS}}. For details, -@pxref{Invoking,,Comand-Line Options}. - -@c We don't use deffn and friends for the following because they seem -@c to be limited to one line for the header. -@smallexample -@value{AS} [ -a[cdhlns][=file] ] [ -D ] [ --defsym @var{sym}=@var{val} ] - [ -f ] [ --gstabs ] [ --gdwarf2 ] [ --help ] [ -I @var{dir} ] [ -J ] [ -K ] [ -L ] - [ --keep-locals ] [ -o @var{objfile} ] [ -R ] [ --statistics ] [ -v ] - [ -version ] [ --version ] [ -W ] [ --warn ] [ --fatal-warnings ] - [ -w ] [ -x ] [ -Z ] -@ifset A29K -@c am29k has no machine-dependent assembler options -@end ifset -@ifset ARC - [ -mbig-endian | -mlittle-endian ] -@end ifset -@ifset ARM - [ -m[arm]1 | -m[arm]2 | -m[arm]250 | -m[arm]3 | -m[arm]6 | -m[arm]60 | - -m[arm]600 | -m[arm]610 | -m[arm]620 | -m[arm]7[t][[d]m[i]][fe] | -m[arm]70 | - -m[arm]700 | -m[arm]710[c] | -m[arm]7100 | -m[arm]7500 | -m[arm]8 | - -m[arm]810 | -m[arm]9 | -m[arm]920 | -m[arm]920t | -m[arm]9tdmi | - -mstrongarm | -mstrongarm110 | -mstrongarm1100 ] - [ -m[arm]v2 | -m[arm]v2a | -m[arm]v3 | -m[arm]v3m | -m[arm]v4 | -m[arm]v4t | - -m[arm]v5 | -[arm]v5t ] - [ -mthumb | -mall ] - [ -mfpa10 | -mfpa11 | -mfpe-old | -mno-fpu ] - [ -EB | -EL ] - [ -mapcs-32 | -mapcs-26 | -mapcs-float | -mapcs-reentrant ] - [ -mthumb-interwork ] - [ -moabi ] - [ -k ] -@end ifset -@ifset D10V - [ -O ] -@end ifset -@ifset D30V - [ -O | -n | -N ] -@end ifset -@ifset H8 -@c Hitachi family chips have no machine-dependent assembler options -@end ifset -@ifset HPPA -@c HPPA has no machine-dependent assembler options (yet). -@end ifset -@ifset PJ - [ -mb | -me ] -@end ifset -@ifset SPARC -@c The order here is important. See c-sparc.texi. - [ -Av6 | -Av7 | -Av8 | -Asparclet | -Asparclite - -Av8plus | -Av8plusa | -Av9 | -Av9a ] - [ -xarch=v8plus | -xarch=v8plusa ] [ -bump ] [ -32 | -64 ] -@end ifset -@ifset Z8000 -@c Z8000 has no machine-dependent assembler options -@end ifset -@ifset I960 -@c see md_parse_option in tc-i960.c - [ -ACA | -ACA_A | -ACB | -ACC | -AKA | -AKB | -AKC | -AMC ] - [ -b ] [ -no-relax ] -@end ifset -@ifset M680X0 - [ -l ] [ -m68000 | -m68010 | -m68020 | ... ] -@end ifset -@ifset MCORE - [ -jsri2bsr ] [ -sifilter ] [ -relax ] -@end ifset -@ifset MIPS - [ -nocpp ] [ -EL ] [ -EB ] [ -G @var{num} ] [ -mcpu=@var{CPU} ] - [ -mips1 ] [ -mips2 ] [ -mips3 ] [ -m4650 ] [ -no-m4650 ] - [ --trap ] [ --break ] - [ --emulation=@var{name} ] -@end ifset - [ -- | @var{files} @dots{} ] -@end smallexample - -@table @code -@item -a[cdhlmns] -Turn on listings, in any of a variety of ways: - -@table @code -@item -ac -omit false conditionals - -@item -ad -omit debugging directives - -@item -ah -include high-level source - -@item -al -include assembly - -@item -am -include macro expansions - -@item -an -omit forms processing - -@item -as -include symbols - -@item =file -set the name of the listing file -@end table - -You may combine these options; for example, use @samp{-aln} for assembly -listing without forms processing. The @samp{=file} option, if used, must be -the last one. By itself, @samp{-a} defaults to @samp{-ahls}. - -@item -D -Ignored. This option is accepted for script compatibility with calls to -other assemblers. - -@item --defsym @var{sym}=@var{value} -Define the symbol @var{sym} to be @var{value} before assembling the input file. -@var{value} must be an integer constant. As in C, a leading @samp{0x} -indicates a hexadecimal value, and a leading @samp{0} indicates an octal value. - -@item -f -``fast''---skip whitespace and comment preprocessing (assume source is -compiler output). - -@item --gstabs -Generate stabs debugging information for each assembler line. This -may help debugging assembler code, if the debugger can handle it. - -@item --gdwarf2 -Generate DWARF2 debugging information for each assembler line. This -may help debugging assembler code, if the debugger can handle it. - -@item --help -Print a summary of the command line options and exit. - -@item -I @var{dir} -Add directory @var{dir} to the search list for @code{.include} directives. - -@item -J -Don't warn about signed overflow. - -@item -K -@ifclear DIFF-TBL-KLUGE -This option is accepted but has no effect on the @value{TARGET} family. -@end ifclear -@ifset DIFF-TBL-KLUGE -Issue warnings when difference tables altered for long displacements. -@end ifset - -@item -L -@itemx --keep-locals -Keep (in the symbol table) local symbols. On traditional a.out systems -these start with @samp{L}, but different systems have different local -label prefixes. - -@item -o @var{objfile} -Name the object-file output from @code{@value{AS}} @var{objfile}. - -@item -R -Fold the data section into the text section. - -@item --statistics -Print the maximum space (in bytes) and total time (in seconds) used by -assembly. - -@item --strip-local-absolute -Remove local absolute symbols from the outgoing symbol table. - -@item -v -@itemx -version -Print the @code{as} version. - -@item --version -Print the @code{as} version and exit. - -@item -W -@itemx --no-warn -Suppress warning messages. - -@item --fatal-warnings -Treat warnings as errors. - -@item --warn -Don't suppress warning messages or treat them as errors. - -@item -w -Ignored. - -@item -x -Ignored. - -@item -Z -Generate an object file even after errors. - -@item -- | @var{files} @dots{} -Standard input, or source files to assemble. - -@end table - -@ifset ARC -The following options are available when @value{AS} is configured for -an ARC processor. - -@table @code - -@cindex ARC endianness -@cindex endianness, ARC -@cindex big endian output, ARC -@item -mbig-endian -Generate ``big endian'' format output. - -@cindex little endian output, ARC -@item -mlittle-endian -Generate ``little endian'' format output. - -@end table -@end ifset - -@ifset ARM -The following options are available when @value{AS} is configured for the ARM -processor family. - -@table @code -@item -m[arm][1|2|3|6|7|8|9][...] -Specify which ARM processor variant is the target. -@item -m[arm]v[2|2a|3|3m|4|4t|5|5t] -Specify which ARM architecture variant is used by the target. -@item -mthumb | -mall -Enable or disable Thumb only instruction decoding. -@item -mfpa10 | -mfpa11 | -mfpe-old | -mno-fpu -Select which Floating Point architcture is the target. -@item -mapcs-32 | -mapcs-26 | -mapcs-float | -mapcs-reentrant | -moabi -Select which procedure calling convention is in use. -@item -EB | -EL -Select either big-endian (-EB) or little-endian (-EL) output. -@item -mthumb-interwork -Specify that the code has been generated with interworking between Thumb and -ARM code in mind. -@item -k -Specify that PIC code has been generated. -@end table -@end ifset - -@ifset D10V -The following options are available when @value{AS} is configured for -a D10V processor. -@table @code -@cindex D10V optimization -@cindex optimization, D10V -@item -O -Optimize output by parallelizing instructions. -@end table -@end ifset - -@ifset D30V -The following options are available when @value{AS} is configured for a D30V -processor. -@table @code -@cindex D30V optimization -@cindex optimization, D30V -@item -O -Optimize output by parallelizing instructions. - -@cindex D30V nops -@item -n -Warn when nops are generated. - -@cindex D30V nops after 32-bit multiply -@item -N -Warn when a nop after a 32-bit multiply instruction is generated. -@end table -@end ifset - -@ifset I960 -The following options are available when @value{AS} is configured for the -Intel 80960 processor. - -@table @code -@item -ACA | -ACA_A | -ACB | -ACC | -AKA | -AKB | -AKC | -AMC -Specify which variant of the 960 architecture is the target. - -@item -b -Add code to collect statistics about branches taken. - -@item -no-relax -Do not alter compare-and-branch instructions for long displacements; -error if necessary. - -@end table -@end ifset - - -@ifset M680X0 -The following options are available when @value{AS} is configured for the -Motorola 68000 series. - -@table @code - -@item -l -Shorten references to undefined symbols, to one word instead of two. - -@item -m68000 | -m68008 | -m68010 | -m68020 | -m68030 | -m68040 | -m68060 -@itemx | -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. - -@item -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. - -@item -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. - -@end table -@end ifset - -@ifset PJ -The following options are available when @value{AS} is configured for -a picoJava processor. - -@table @code - -@cindex PJ endianness -@cindex endianness, PJ -@cindex big endian output, PJ -@item -mb -Generate ``big endian'' format output. - -@cindex little endian output, PJ -@item -ml -Generate ``little endian'' format output. - -@end table -@end ifset - - -@ifset SPARC -The following options are available when @code{@value{AS}} is configured -for the SPARC architecture: - -@table @code -@item -Av6 | -Av7 | -Av8 | -Asparclet | -Asparclite -@itemx -Av8plus | -Av8plusa | -Av9 | -Av9a -Explicitly select a variant of the SPARC architecture. - -@samp{-Av8plus} and @samp{-Av8plusa} select a 32 bit environment. -@samp{-Av9} and @samp{-Av9a} select a 64 bit environment. - -@samp{-Av8plusa} and @samp{-Av9a} enable the SPARC V9 instruction set with -UltraSPARC extensions. - -@item -xarch=v8plus | -xarch=v8plusa -For compatibility with the Solaris v9 assembler. These options are -equivalent to -Av8plus and -Av8plusa, respectively. - -@item -bump -Warn when the assembler switches to another architecture. -@end table -@end ifset - -@ifset MIPS -The following options are available when @value{AS} is configured for -a MIPS processor. - -@table @code -@item -G @var{num} -This option sets the largest size of an object that can be referenced -implicitly with the @code{gp} register. It is only accepted for targets that -use ECOFF format, such as a DECstation running Ultrix. The default value is 8. - -@cindex MIPS endianness -@cindex endianness, MIPS -@cindex big endian output, MIPS -@item -EB -Generate ``big endian'' format output. - -@cindex little endian output, MIPS -@item -EL -Generate ``little endian'' format output. - -@cindex MIPS ISA -@item -mips1 -@itemx -mips2 -@itemx -mips3 -Generate code for a particular MIPS Instruction Set Architecture level. -@samp{-mips1} corresponds to the @sc{r2000} and @sc{r3000} processors, -@samp{-mips2} to the @sc{r6000} processor, and @samp{-mips3} to the @sc{r4000} -processor. - -@item -m4650 -@itemx -no-m4650 -Generate code for the MIPS @sc{r4650} chip. This tells the assembler to accept -the @samp{mad} and @samp{madu} instruction, and to not schedule @samp{nop} -instructions around accesses to the @samp{HI} and @samp{LO} registers. -@samp{-no-m4650} turns off this option. - -@item -mcpu=@var{CPU} -Generate code for a particular MIPS cpu. This has little effect on the -assembler, but it is passed by @code{@value{GCC}}. - -@cindex emulation -@item --emulation=@var{name} -This option causes @code{@value{AS}} to emulate @code{@value{AS}} configured -for some other target, in all respects, including output format (choosing -between ELF and ECOFF only), handling of pseudo-opcodes which may generate -debugging information or store symbol table information, and default -endianness. The available configuration names are: @samp{mipsecoff}, -@samp{mipself}, @samp{mipslecoff}, @samp{mipsbecoff}, @samp{mipslelf}, -@samp{mipsbelf}. The first two do not alter the default endianness from that -of the primary target for which the assembler was configured; the others change -the default to little- or big-endian as indicated by the @samp{b} or @samp{l} -in the name. Using @samp{-EB} or @samp{-EL} will override the endianness -selection in any case. - -This option is currently supported only when the primary target -@code{@value{AS}} is configured for is a MIPS ELF or ECOFF target. -Furthermore, the primary target or others specified with -@samp{--enable-targets=@dots{}} at configuration time must include support for -the other format, if both are to be available. For example, the Irix 5 -configuration includes support for both. - -Eventually, this option will support more configurations, with more -fine-grained control over the assembler's behavior, and will be supported for -more processors. - -@item -nocpp -@code{@value{AS}} ignores this option. It is accepted for compatibility with -the native tools. - -@need 900 -@item --trap -@itemx --no-trap -@itemx --break -@itemx --no-break -Control how to deal with multiplication overflow and division by zero. -@samp{--trap} or @samp{--no-break} (which are synonyms) take a trap exception -(and only work for Instruction Set Architecture level 2 and higher); -@samp{--break} or @samp{--no-trap} (also synonyms, and the default) take a -break exception. -@end table -@end ifset - -@ifset MCORE -The following options are available when @value{AS} is configured for -an MCore processor. - -@table @code -@item -jsri2bsr -@itemx -nojsri2bsr -Enable or disable the JSRI to BSR transformation. By default this is enabled. -The command line option @samp{-nojsri2bsr} can be used to disable it. - -@item -sifilter -@itemx -nosifilter -Enable or disable the silicon filter behaviour. By default this is disabled. -The default can be overidden by the @samp{-sifilter} command line option. - -@item -relax -Alter jump instructions for long displacements. - - -@end table -@end ifset - -@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 -@end menu - -@node Manual -@section Structure of this Manual - -@cindex manual, structure and purpose -This manual is intended to describe what you need to know to use -@sc{gnu} @code{@value{AS}}. We cover the syntax expected in source files, including -notation for symbols, constants, and expressions; the directives that -@code{@value{AS}} understands; and of course how to invoke @code{@value{AS}}. - -@ifclear GENERIC -We also cover special features in the @value{TARGET} -configuration of @code{@value{AS}}, including assembler directives. -@end ifclear -@ifset GENERIC -This manual also describes some of the machine-dependent features of -various flavors of the assembler. -@end ifset - -@cindex machine instructions (not covered) -On the other hand, this manual is @emph{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 @emph{not} describe the instruction set, standard -mnemonics, registers or addressing modes that are standard to a -particular architecture. -@ifset GENERIC -You may want to consult the manufacturer's -machine architecture manual for this information. -@end ifset -@ifclear GENERIC -@ifset H8/300 -For information on the H8/300 machine instruction set, see @cite{H8/300 -Series Programming Manual} (Hitachi ADE--602--025). For the H8/300H, -see @cite{H8/300H Series Programming Manual} (Hitachi). -@end ifset -@ifset H8/500 -For information on the H8/500 machine instruction set, see @cite{H8/500 -Series Programming Manual} (Hitachi M21T001). -@end ifset -@ifset SH -For information on the Hitachi SH machine instruction set, see -@cite{SH-Microcomputer User's Manual} (Hitachi Micro Systems, Inc.). -@end ifset -@ifset Z8000 -For information on the Z8000 machine instruction set, see @cite{Z8000 CPU Technical Manual} -@end ifset -@end ifclear - -@c I think this is premature---doc@cygnus.com, 17jan1991 -@ignore -Throughout this manual, we assume that you are running @dfn{GNU}, -the portable operating system from the @dfn{Free Software -Foundation, Inc.}. This restricts our attention to certain kinds of -computer (in particular, the kinds of computers that @sc{gnu} can run on); -once this assumption is granted examples and definitions need less -qualification. - -@code{@value{AS}} is part of a team of programs that turn a high-level -human-readable series of instructions into a low-level -computer-readable series of instructions. Different versions of -@code{@value{AS}} are used for different kinds of computer. -@end ignore - -@c There used to be a section "Terminology" here, which defined -@c "contents", "byte", "word", and "long". Defining "word" to any -@c particular size is confusing when the .word directive may generate 16 -@c bits on one machine and 32 bits on another; in general, for the user -@c version of this manual, none of these terms seem essential to define. -@c They were used very little even in the former draft of the manual; -@c this draft makes an effort to avoid them (except in names of -@c directives). - -@node GNU Assembler -@section The GNU Assembler - -@sc{gnu} @code{as} is really a family of assemblers. -@ifclear GENERIC -This manual describes @code{@value{AS}}, a member of that family which is -configured for the @value{TARGET} architectures. -@end ifclear -If you use (or have used) the @sc{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 -@dfn{pseudo-ops}) and assembler syntax.@refill - -@cindex purpose of @sc{gnu} assembler -@code{@value{AS}} is primarily intended to assemble the output of the -@sc{gnu} C compiler @code{@value{GCC}} for use by the linker -@code{@value{LD}}. Nevertheless, we've tried to make @code{@value{AS}} -assemble correctly everything that other assemblers for the same -machine would assemble. -@ifset VAX -Any exceptions are documented explicitly (@pxref{Machine Dependencies}). -@end ifset -@ifset M680X0 -@c This remark should appear in generic version of manual; assumption -@c here is that generic version sets M680x0. -This doesn't mean @code{@value{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. -@end ifset - -Unlike older assemblers, @code{@value{AS}} is designed to assemble a source -program in one pass of the source file. This has a subtle impact on the -@kbd{.org} directive (@pxref{Org,,@code{.org}}). - -@node Object Formats -@section Object File Formats - -@cindex object file format -The @sc{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. @xref{Symbol -Attributes,,Symbol Attributes}. -@ifclear GENERIC -@ifclear MULTI-OBJ -On the @value{TARGET}, @code{@value{AS}} is configured to produce -@value{OBJ-NAME} format object files. -@end ifclear -@c The following should exhaust all configs that set MULTI-OBJ, ideally -@ifset A29K -On the @value{TARGET}, @code{@value{AS}} can be configured to produce either -@code{a.out} or COFF format object files. -@end ifset -@ifset I960 -On the @value{TARGET}, @code{@value{AS}} can be configured to produce either -@code{b.out} or COFF format object files. -@end ifset -@ifset HPPA -On the @value{TARGET}, @code{@value{AS}} can be configured to produce either -SOM or ELF format object files. -@end ifset -@end ifclear - -@node Command Line -@section Command Line - -@cindex command line conventions -After the program name @code{@value{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. - -@cindex standard input, as input file -@kindex -- -@file{--} (two hyphens) by itself names the standard input file -explicitly, as one of the files for @code{@value{AS}} to assemble. - -@cindex options, command line -Except for @samp{--} any command line argument that begins with a -hyphen (@samp{-}) is an option. Each option changes the behavior of -@code{@value{AS}}. No option changes the way another option works. An -option is a @samp{-} 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 (@sc{gnu} -standard). These two command lines are equivalent: - -@smallexample -@value{AS} -o my-object-file.o mumble.s -@value{AS} -omy-object-file.o mumble.s -@end smallexample - -@node Input Files -@section Input Files - -@cindex input -@cindex source program -@cindex files, input -We use the phrase @dfn{source program}, abbreviated @dfn{source}, to -describe the program input to one run of @code{@value{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. - -@c I added "con" prefix to "catenation" just to prove I can overcome my -@c APL training... doc@cygnus.com -The source program is a concatenation of the text in all the files, in the -order specified. - -Each time you run @code{@value{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 @code{@value{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 @code{@value{AS}} no file names it attempts to read one input file -from the @code{@value{AS}} standard input, which is normally your terminal. You -may have to type @key{ctl-D} to tell @code{@value{AS}} there is no more program -to assemble. - -Use @samp{--} if you need to explicitly name the standard input file -in your command line. - -If the source is empty, @code{@value{AS}} produces a small, empty object -file. - -@subheading Filenames and Line-numbers - -@cindex input file linenumbers -@cindex line numbers, in input files -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. @xref{Errors, ,Error and Warning Messages}. - -@dfn{Physical files} are those files named in the command line given -to @code{@value{AS}}. - -@dfn{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 @code{@value{AS}} source -is itself synthesized from other files. @code{@value{AS}} understands the -@samp{#} directives emitted by the @code{@value{GCC}} preprocessor. See also -@ref{File,,@code{.file}}. - -@node Object -@section Output (Object) File - -@cindex object file -@cindex output file -@kindex a.out -@kindex .o -Every time you run @code{@value{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 -@ifclear BOUT -@code{a.out}. -@end ifclear -@ifset BOUT -@ifset GENERIC -@code{a.out}, or -@end ifset -@code{b.out} when @code{@value{AS}} is configured for the Intel 80960. -@end ifset -You can give it another name by using the @code{-o} option. Conventionally, -object file names end with @file{.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 @code{a.out} format.) - -@cindex linker -@kindex ld -The object file is meant for input to the linker @code{@value{LD}}. It contains -assembled program code, information to help @code{@value{LD}} integrate -the assembled program into a runnable file, and (optionally) symbolic -information for the debugger. - -@c link above to some info file(s) like the description of a.out. -@c don't forget to describe @sc{gnu} info as well as Unix lossage. - -@node Errors -@section Error and Warning Messages - -@cindex error messsages -@cindex warning messages -@cindex messages from assembler -@code{@value{AS}} may write warnings and error messages to the standard error -file (usually your terminal). This should not happen when a compiler -runs @code{@value{AS}} automatically. Warnings report an assumption made so -that @code{@value{AS}} could keep assembling a flawed program; errors report a -grave problem that stops the assembly. - -@cindex format of warning messages -Warning messages have the format - -@smallexample -file_name:@b{NNN}:Warning Message Text -@end smallexample - -@noindent -@cindex line numbers, in warnings/errors -(where @b{NNN} is a line number). If a logical file name has been given -(@pxref{File,,@code{.file}}) it is used for the filename, otherwise the name of -the current input file is used. If a logical line number was given -@ifset GENERIC -(@pxref{Line,,@code{.line}}) -@end ifset -@ifclear GENERIC -@ifclear A29K -(@pxref{Line,,@code{.line}}) -@end ifclear -@ifset A29K -(@pxref{Ln,,@code{.ln}}) -@end ifset -@end ifclear -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). - -@cindex format of error messages -Error messages have the format -@smallexample -file_name:@b{NNN}:FATAL:Error Message Text -@end smallexample -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. - -@node Invoking -@chapter Command-Line Options - -@cindex options, all versions of assembler -This chapter describes command-line options available in @emph{all} -versions of the @sc{gnu} assembler; @pxref{Machine Dependencies}, for options specific -@ifclear GENERIC -to the @value{TARGET}. -@end ifclear -@ifset GENERIC -to particular machine architectures. -@end ifset - -If you are invoking @code{@value{AS}} via the @sc{gnu} C compiler (version 2), -you can use the @samp{-Wa} option to pass arguments through to the assembler. -The assembler arguments must be separated from each other (and the @samp{-Wa}) -by commas. For example: - -@smallexample -gcc -c -g -O -Wa,-alh,-L file.c -@end smallexample - -@noindent -This passes two options to the assembler: @samp{-alh} (emit a listing to -standard output with with high-level and assembly source) and @samp{-L} (retain -local symbols in the symbol table). - -Usually you do not need to use this @samp{-Wa} mechanism, since many compiler -command-line options are automatically passed to the assembler by the compiler. -(You can call the @sc{gnu} compiler driver with the @samp{-v} option to see -precisely what options it passes to each compilation pass, including the -assembler.) - -@menu -* a:: -a[cdhlns] enable listings -* D:: -D for compatibility -* f:: -f to work faster -* I:: -I for .include search path -@ifclear DIFF-TBL-KLUGE -* K:: -K for compatibility -@end ifclear -@ifset DIFF-TBL-KLUGE -* K:: -K for difference tables -@end ifset - -* L:: -L to retain local labels -* 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 -@end menu - -@node a -@section Enable Listings: @code{-a[cdhlns]} - -@kindex -a -@kindex -ac -@kindex -ad -@kindex -ah -@kindex -al -@kindex -an -@kindex -as -@cindex listings, enabling -@cindex assembly listings, enabling - -These options enable listing output from the assembler. By itself, -@samp{-a} requests high-level, assembly, and symbols listing. -You can use other letters to select specific options for the list: -@samp{-ah} requests a high-level language listing, -@samp{-al} requests an output-program assembly listing, and -@samp{-as} requests a symbol table listing. -High-level listings require that a compiler debugging option like -@samp{-g} be used, and that assembly listings (@samp{-al}) be requested -also. - -Use the @samp{-ac} option to omit false conditionals from a listing. Any lines -which are not assembled because of a false @code{.if} (or @code{.ifdef}, or any -other conditional), or a true @code{.if} followed by an @code{.else}, will be -omitted from the listing. - -Use the @samp{-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 @code{.list}, -@code{.nolist}, @code{.psize}, @code{.eject}, @code{.title}, and -@code{.sbttl}. -The @samp{-an} option turns off all forms processing. -If you do not request listing output with one of the @samp{-a} options, the -listing-control directives have no effect. - -The letters after @samp{-a} may be combined into one option, -@emph{e.g.}, @samp{-aln}. - -@node D -@section @code{-D} - -@kindex -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 -@code{@value{AS}}. - -@node f -@section Work Faster: @code{-f} - -@kindex -f -@cindex trusted compiler -@cindex faster processing (@code{-f}) -@samp{-f} should only be used when assembling programs written by a -(trusted) compiler. @samp{-f} stops the assembler from doing whitespace -and comment preprocessing on -the input file(s) before assembling them. @xref{Preprocessing, -,Preprocessing}. - -@quotation -@emph{Warning:} if you use @samp{-f} when the files actually need to be -preprocessed (if they contain comments, for example), @code{@value{AS}} does -not work correctly. -@end quotation - -@node I -@section @code{.include} search path: @code{-I} @var{path} - -@kindex -I @var{path} -@cindex paths for @code{.include} -@cindex search path for @code{.include} -@cindex @code{include} directive search path -Use this option to add a @var{path} to the list of directories -@code{@value{AS}} searches for files specified in @code{.include} -directives (@pxref{Include,,@code{.include}}). You may use @code{-I} as -many times as necessary to include a variety of paths. The current -working directory is always searched first; after that, @code{@value{AS}} -searches any @samp{-I} directories in the same order as they were -specified (left to right) on the command line. - -@node K -@section Difference Tables: @code{-K} - -@kindex -K -@ifclear DIFF-TBL-KLUGE -On the @value{TARGET} family, this option is allowed, but has no effect. It is -permitted for compatibility with the @sc{gnu} assembler on other platforms, -where it can be used to warn when the assembler alters the machine code -generated for @samp{.word} directives in difference tables. The @value{TARGET} -family does not have the addressing limitations that sometimes lead to this -alteration on other platforms. -@end ifclear - -@ifset DIFF-TBL-KLUGE -@cindex difference tables, warning -@cindex warning for altered difference tables -@code{@value{AS}} sometimes alters the code emitted for directives of the form -@samp{.word @var{sym1}-@var{sym2}}; @pxref{Word,,@code{.word}}. -You can use the @samp{-K} option if you want a warning issued when this -is done. -@end ifset - -@node L -@section Include Local Labels: @code{-L} - -@kindex -L -@cindex local labels, retaining in output -Labels beginning with @samp{L} (upper case only) are called @dfn{local -labels}. @xref{Symbol Names}. Normally you do not see such labels when -debugging, because they are intended for the use of programs (like -compilers) that compose assembler programs, not for your notice. -Normally both @code{@value{AS}} and @code{@value{LD}} discard such labels, so you do not -normally debug with them. - -This option tells @code{@value{AS}} to retain those @samp{L@dots{}} symbols -in the object file. Usually if you do this you also tell the linker -@code{@value{LD}} to preserve symbols whose names begin with @samp{L}. - -By default, a local label is any label beginning with @samp{L}, but each -target is allowed to redefine the local label prefix. -@ifset HPPA -On the HPPA local labels begin with @samp{L$}. -@end ifset -@ifset ARM -@samp{;} for the ARM family; -@end ifset - -@node M -@section Assemble in MRI Compatibility Mode: @code{-M} - -@kindex -M -@cindex MRI compatibility mode -The @code{-M} or @code{--mri} option selects MRI compatibility mode. This -changes the syntax and pseudo-op handling of @code{@value{AS}} to make it -compatible with the @code{ASM68K} or the @code{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 @code{@value{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: - -@itemize @bullet -@item 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. @code{@value{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. - -@item 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. - -@item @code{END} pseudo-op specifying start address - -The MRI @code{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 @code{-e} option to the linker, or in a linker -script. - -@item @code{IDNT}, @code{.ident} and @code{NAME} pseudo-ops - -The MRI @code{IDNT}, @code{.ident} and @code{NAME} pseudo-ops assign a module -name to the output file. This is not supported by other object file formats. - -@item @code{ORG} pseudo-op - -The m68k MRI @code{ORG} pseudo-op begins an absolute section at a given -address. This differs from the usual @code{@value{AS}} @code{.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. -@end itemize - -There are some other features of the MRI assembler which are not supported by -@code{@value{AS}}, typically either because they are difficult or because they -seem of little consequence. Some of these may be supported in future releases. - -@itemize @bullet - -@item EBCDIC strings - -EBCDIC strings are not supported. - -@item packed binary coded decimal - -Packed binary coded decimal is not supported. This means that the @code{DC.P} -and @code{DCB.P} pseudo-ops are not supported. - -@item @code{FEQU} pseudo-op - -The m68k @code{FEQU} pseudo-op is not supported. - -@item @code{NOOBJ} pseudo-op - -The m68k @code{NOOBJ} pseudo-op is not supported. - -@item @code{OPT} branch control options - -The m68k @code{OPT} branch control options---@code{B}, @code{BRS}, @code{BRB}, -@code{BRL}, and @code{BRW}---are ignored. @code{@value{AS}} automatically -relaxes all branches, whether forward or backward, to an appropriate size, so -these options serve no purpose. - -@item @code{OPT} list control options - -The following m68k @code{OPT} list control options are ignored: @code{C}, -@code{CEX}, @code{CL}, @code{CRE}, @code{E}, @code{G}, @code{I}, @code{M}, -@code{MEX}, @code{MC}, @code{MD}, @code{X}. - -@item other @code{OPT} options - -The following m68k @code{OPT} options are ignored: @code{NEST}, @code{O}, -@code{OLD}, @code{OP}, @code{P}, @code{PCO}, @code{PCR}, @code{PCS}, @code{R}. - -@item @code{OPT} @code{D} option is default - -The m68k @code{OPT} @code{D} option is the default, unlike the MRI assembler. -@code{OPT NOD} may be used to turn it off. - -@item @code{XREF} pseudo-op. - -The m68k @code{XREF} pseudo-op is ignored. - -@item @code{.debug} pseudo-op - -The i960 @code{.debug} pseudo-op is not supported. - -@item @code{.extended} pseudo-op - -The i960 @code{.extended} pseudo-op is not supported. - -@item @code{.list} pseudo-op. - -The various options of the i960 @code{.list} pseudo-op are not supported. - -@item @code{.optimize} pseudo-op - -The i960 @code{.optimize} pseudo-op is not supported. - -@item @code{.output} pseudo-op - -The i960 @code{.output} pseudo-op is not supported. - -@item @code{.setreal} pseudo-op - -The i960 @code{.setreal} pseudo-op is not supported. - -@end itemize - -@node MD -@section Dependency tracking: @code{--MD} - -@kindex --MD -@cindex dependency tracking -@cindex make rules - -@code{@value{AS}} can generate a dependency file for the file it creates. This -file consists of a single rule suitable for @code{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. - -@node o -@section Name the Object File: @code{-o} - -@kindex -o -@cindex naming object file -@cindex object file name -There is always one object file output when you run @code{@value{AS}}. By -default it has the name -@ifset GENERIC -@ifset I960 -@file{a.out} (or @file{b.out}, for Intel 960 targets only). -@end ifset -@ifclear I960 -@file{a.out}. -@end ifclear -@end ifset -@ifclear GENERIC -@ifset I960 -@file{b.out}. -@end ifset -@ifclear I960 -@file{a.out}. -@end ifclear -@end ifclear -You use this option (which takes exactly one filename) to give the -object file a different name. - -Whatever the object file is called, @code{@value{AS}} overwrites any -existing file of the same name. - -@node R -@section Join Data and Text Sections: @code{-R} - -@kindex -R -@cindex data and text sections, joining -@cindex text and data sections, joining -@cindex joining text and data sections -@cindex merging text and data sections -@code{-R} tells @code{@value{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. (@xref{Sections,,Sections and Relocation}.) - -When you specify @code{-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 @code{@value{AS}}. In future, @code{-R} may work this way. - -@ifset COFF -When @code{@value{AS}} is configured for COFF output, -this option is only useful if you use sections named @samp{.text} and -@samp{.data}. -@end ifset - -@ifset HPPA -@code{-R} is not supported for any of the HPPA targets. Using -@code{-R} generates a warning from @code{@value{AS}}. -@end ifset - -@node statistics -@section Display Assembly Statistics: @code{--statistics} - -@kindex --statistics -@cindex statistics, about assembly -@cindex time, total for assembly -@cindex space used, maximum for assembly -Use @samp{--statistics} to display two statistics about the resources used by -@code{@value{AS}}: the maximum amount of space allocated during the assembly -(in bytes), and the total execution time taken for the assembly (in @sc{cpu} -seconds). - -@node traditional-format -@section Compatible output: @code{--traditional-format} - -@kindex --traditional-format -For some targets, the output of @code{@value{AS}} is different in some ways -from the output of some existing assembler. This switch requests -@code{@value{AS}} to use the traditional format instead. - -For example, it disables the exception frame optimizations which -@code{@value{AS}} normally does by default on @code{@value{GCC}} output. - -@node v -@section Announce Version: @code{-v} - -@kindex -v -@kindex -version -@cindex assembler version -@cindex version of assembler -You can find out what version of as is running by including the -option @samp{-v} (which you can also spell as @samp{-version}) on the -command line. - -@node W -@section Control Warnings: @code{-W}, @code{--warn}, @code{--no-warn}, @code{--fatal-warnings} - -@code{@value{AS}} should never give a warning or error message when -assembling compiler output. But programs written by people often -cause @code{@value{AS}} to give a warning that a particular assumption was -made. All such warnings are directed to the standard error file. - -@kindex @samp{-W} -@kindex @samp{--no-warn} -@cindex suppressing warnings -@cindex warnings, suppressing -If you use the @code{-W} and @code{--no-warn} options, no warnings are issued. -This only affects the warning messages: it does not change any particular of -how @code{@value{AS}} assembles your file. Errors, which stop the assembly, -are still reported. - -@kindex @samp{--fatal-warnings} -@cindex errors, caused by warnings -@cindex warnings, causing error -If you use the @code{--fatal-warnings} option, @code{@value{AS}} considers -files that generate warnings to be in error. - -@kindex @samp{--warn} -@cindex warnings, switching on -You can switch these options off again by specifying @code{--warn}, which -causes warnings to be output as usual. - -@node Z -@section Generate Object File in Spite of Errors: @code{-Z} -@cindex object file, after errors -@cindex errors, continuing after -After an error message, @code{@value{AS}} normally produces no output. If for -some reason you are interested in object file output even after -@code{@value{AS}} gives an error message on your program, use the @samp{-Z} -option. If there are any errors, @code{@value{AS}} continues anyways, and -writes an object file after a final warning message of the form @samp{@var{n} -errors, @var{m} warnings, generating bad object file.} - -@node Syntax -@chapter Syntax - -@cindex machine-independent syntax -@cindex syntax, machine-independent -This chapter describes the machine-independent syntax allowed in a -source file. @code{@value{AS}} syntax is similar to what many other -assemblers use; it is inspired by the BSD 4.2 -@ifclear VAX -assembler. -@end ifclear -@ifset VAX -assembler, except that @code{@value{AS}} does not assemble Vax bit-fields. -@end ifset - -@menu -* Preprocessing:: Preprocessing -* Whitespace:: Whitespace -* Comments:: Comments -* Symbol Intro:: Symbols -* Statements:: Statements -* Constants:: Constants -@end menu - -@node Preprocessing -@section Preprocessing - -@cindex preprocessing -The @code{@value{AS}} internal preprocessor: -@itemize @bullet -@cindex whitespace, removed by preprocessor -@item -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. - -@cindex comments, removed by preprocessor -@item -removes all comments, replacing them with a single space, or an -appropriate number of newlines. - -@cindex constants, converted by preprocessor -@item -converts character constants into the appropriate numeric values. -@end itemize - -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 @code{.include} directive -(@pxref{Include,,@code{.include}}). You can use the @sc{gnu} C compiler driver -to get other ``CPP'' style preprocessing, by giving the input file a -@samp{.S} suffix. @xref{Overall Options,, Options Controlling the Kind of -Output, gcc.info, Using GNU CC}. - -Excess whitespace, comments, and character constants -cannot be used in the portions of the input text that are not -preprocessed. - -@cindex turning preprocessing on and off -@cindex preprocessing, turning on and off -@kindex #NO_APP -@kindex #APP -If the first line of an input file is @code{#NO_APP} or if you use the -@samp{-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 @code{#APP} before the -text that may contain whitespace or comments, and putting a line that says -@code{#NO_APP} after this text. This feature is mainly intend to support -@code{asm} statements in compilers whose output is otherwise free of comments -and whitespace. - -@node Whitespace -@section Whitespace - -@cindex whitespace -@dfn{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 -(@pxref{Characters,,Character Constants}), any whitespace means the same -as exactly one space. - -@node Comments -@section Comments - -@cindex comments -There are two ways of rendering comments to @code{@value{AS}}. In both -cases the comment is equivalent to one space. - -Anything from @samp{/*} through the next @samp{*/} is a comment. -This means you may not nest these comments. - -@smallexample -/* - 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. */ -@end smallexample - -@cindex line comment character -Anything from the @dfn{line comment} character to the next newline -is considered a comment and is ignored. The line comment character is -@ifset A29K -@samp{;} for the AMD 29K family; -@end ifset -@ifset ARC -@samp{;} on the ARC; -@end ifset -@ifset ARM -@samp{@@} on the ARM; -@end ifset -@ifset H8/300 -@samp{;} for the H8/300 family; -@end ifset -@ifset H8/500 -@samp{!} for the H8/500 family; -@end ifset -@ifset HPPA -@samp{;} for the HPPA; -@end ifset -@ifset I960 -@samp{#} on the i960; -@end ifset -@ifset PJ -@samp{;} for picoJava; -@end ifset -@ifset SH -@samp{!} for the Hitachi SH; -@end ifset -@ifset SPARC -@samp{!} on the SPARC; -@end ifset -@ifset M32R -@samp{#} on the m32r; -@end ifset -@ifset M680X0 -@samp{|} on the 680x0; -@end ifset -@ifset VAX -@samp{#} on the Vax; -@end ifset -@ifset Z8000 -@samp{!} for the Z8000; -@end ifset -@ifset V850 -@samp{#} on the V850; -@end ifset -see @ref{Machine Dependencies}. @refill -@c FIXME What about i386, m88k, i860? - -@ifset GENERIC -On some machines there are two different line comment characters. One -character only begins a comment if it is the first non-whitespace character on -a line, while the other always begins a comment. -@end ifset - -@ifset V850 -The V850 assembler also supports a double dash as starting a comment that -extends to the end of the line. - -@samp{--}; -@end ifset - -@kindex # -@cindex lines starting with @code{#} -@cindex logical line numbers -To be compatible with past assemblers, lines that begin with @samp{#} have a -special interpretation. Following the @samp{#} should be an absolute -expression (@pxref{Expressions}): the logical line number of the @emph{next} -line. Then a string (@pxref{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.) - -@smallexample - # This is an ordinary comment. -# 42-6 "new_file_name" # New logical file name - # This is logical line # 36. -@end smallexample -This feature is deprecated, and may disappear from future versions -of @code{@value{AS}}. - -@node Symbol Intro -@section Symbols - -@cindex characters used in symbols -@ifclear SPECIAL-SYMS -A @dfn{symbol} is one or more characters chosen from the set of all -letters (both upper and lower case), digits and the three characters -@samp{_.$}. -@end ifclear -@ifset SPECIAL-SYMS -@ifclear GENERIC -@ifset H8 -A @dfn{symbol} is one or more characters chosen from the set of all -letters (both upper and lower case), digits and the three characters -@samp{._$}. (Save that, on the H8/300 only, you may not use @samp{$} in -symbol names.) -@end ifset -@end ifclear -@end ifset -@ifset GENERIC -On most machines, you can also use @code{$} in symbol names; exceptions -are noted in @ref{Machine Dependencies}. -@end ifset -No symbol may begin with a digit. Case is significant. -There is no length limit: all characters are significant. 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). @xref{Symbols}. -@cindex length of symbols - -@node Statements -@section Statements - -@cindex statements, structure of -@cindex line separator character -@cindex statement separator character -@ifclear GENERIC -@ifclear abnormal-separator -A @dfn{statement} ends at a newline character (@samp{\n}) or at a -semicolon (@samp{;}). The newline or semicolon is considered part of -the preceding statement. Newlines and semicolons within character -constants are an exception: they do not end statements. -@end ifclear -@ifset abnormal-separator -@ifset A29K -A @dfn{statement} ends at a newline character (@samp{\n}) or an ``at'' -sign (@samp{@@}). The newline or at sign is considered part of the -preceding statement. Newlines and at signs within character constants -are an exception: they do not end statements. -@end ifset -@ifset HPPA -A @dfn{statement} ends at a newline character (@samp{\n}) or an exclamation -point (@samp{!}). The newline or exclamation point is considered part of the -preceding statement. Newlines and exclamation points within character -constants are an exception: they do not end statements. -@end ifset -@ifset H8 -A @dfn{statement} ends at a newline character (@samp{\n}); or (for the -H8/300) a dollar sign (@samp{$}); or (for the -Hitachi-SH or the -H8/500) a semicolon -(@samp{;}). The newline or separator character is considered part of -the preceding statement. Newlines and separators within character -constants are an exception: they do not end statements. -@end ifset -@end ifset -@end ifclear -@ifset GENERIC -A @dfn{statement} ends at a newline character (@samp{\n}) or line -separator character. (The line separator is usually @samp{;}, unless -this conflicts with the comment character; @pxref{Machine Dependencies}.) The -newline or separator character is considered part of the preceding -statement. Newlines and separators within character constants are an -exception: they do not end statements. -@end ifset - -@cindex newline, required at file end -@cindex EOF, newline must precede -It is an error to end any statement with end-of-file: the last -character of any input file should be a newline.@refill - -An empty statement is allowed, and may include whitespace. It is ignored. - -@cindex instructions and directives -@cindex directives and instructions -@c "key symbol" is not used elsewhere in the document; seems pedantic to -@c @defn{} it in that case, as was done previously... doc@cygnus.com, -@c 13feb91. -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 @samp{.} 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 @dfn{instruction}: it -assembles into a machine language instruction. -@ifset GENERIC -Different versions of @code{@value{AS}} for different computers -recognize different instructions. In fact, the same symbol may -represent a different instruction in a different computer's assembly -language.@refill -@end ifset - -@cindex @code{:} (label) -@cindex label (@code{:}) -A label is a symbol immediately followed by a colon (@code{:}). -Whitespace before a label or after a colon is permitted, but you may not -have whitespace between a label's symbol and its colon. @xref{Labels}. - -@ifset HPPA -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. -@end ifset - -@smallexample -label: .directive followed by something -another_label: # This is an empty statement. - instruction operand_1, operand_2, @dots{} -@end smallexample - -@node Constants -@section Constants - -@cindex constants -A constant is a number, written so that its value is known by -inspection, without knowing any context. Like this: -@smallexample -@group -.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. -@end group -@end smallexample - -@menu -* Characters:: Character Constants -* Numbers:: Number Constants -@end menu - -@node Characters -@subsection Character Constants - -@cindex character constants -@cindex constants, character -There are two kinds of character constants. A @dfn{character} stands -for one character in one byte and its value may be used in -numeric expressions. String constants (properly called string -@emph{literals}) are potentially many bytes and their values may not be -used in arithmetic expressions. - -@menu -* Strings:: Strings -* Chars:: Characters -@end menu - -@node Strings -@subsubsection Strings - -@cindex string constants -@cindex constants, string -A @dfn{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 @dfn{escape} these characters: precede them with -a backslash @samp{\} character. For example @samp{\\} represents -one backslash: the first @code{\} is an escape which tells -@code{@value{AS}} to interpret the second character literally as a backslash -(which prevents @code{@value{AS}} from recognizing the second @code{\} as an -escape character). The complete list of escapes follows. - -@cindex escape codes, character -@cindex character escape codes -@table @kbd -@c @item \a -@c Mnemonic for ACKnowledge; for ASCII this is octal code 007. -@c -@cindex @code{\b} (backspace character) -@cindex backspace (@code{\b}) -@item \b -Mnemonic for backspace; for ASCII this is octal code 010. - -@c @item \e -@c Mnemonic for EOText; for ASCII this is octal code 004. -@c -@cindex @code{\f} (formfeed character) -@cindex formfeed (@code{\f}) -@item \f -Mnemonic for FormFeed; for ASCII this is octal code 014. - -@cindex @code{\n} (newline character) -@cindex newline (@code{\n}) -@item \n -Mnemonic for newline; for ASCII this is octal code 012. - -@c @item \p -@c Mnemonic for prefix; for ASCII this is octal code 033, usually known as @code{escape}. -@c -@cindex @code{\r} (carriage return character) -@cindex carriage return (@code{\r}) -@item \r -Mnemonic for carriage-Return; for ASCII this is octal code 015. - -@c @item \s -@c Mnemonic for space; for ASCII this is octal code 040. Included for compliance with -@c other assemblers. -@c -@cindex @code{\t} (tab) -@cindex tab (@code{\t}) -@item \t -Mnemonic for horizontal Tab; for ASCII this is octal code 011. - -@c @item \v -@c Mnemonic for Vertical tab; for ASCII this is octal code 013. -@c @item \x @var{digit} @var{digit} @var{digit} -@c A hexadecimal character code. The numeric code is 3 hexadecimal digits. -@c -@cindex @code{\@var{ddd}} (octal character code) -@cindex octal character code (@code{\@var{ddd}}) -@item \ @var{digit} @var{digit} @var{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, @code{\008} has the value 010, and @code{\009} the value 011. - -@cindex @code{\@var{xd...}} (hex character code) -@cindex hex character code (@code{\@var{xd...}}) -@item \@code{x} @var{hex-digits...} -A hex character code. All trailing hex digits are combined. Either upper or -lower case @code{x} works. - -@cindex @code{\\} (@samp{\} character) -@cindex backslash (@code{\\}) -@item \\ -Represents one @samp{\} character. - -@c @item \' -@c Represents one @samp{'} (accent acute) character. -@c This is needed in single character literals -@c (@xref{Characters,,Character Constants}.) to represent -@c a @samp{'}. -@c -@cindex @code{\"} (doublequote character) -@cindex doublequote (@code{\"}) -@item \" -Represents one @samp{"} character. Needed in strings to represent -this character, because an unescaped @samp{"} would end the string. - -@item \ @var{anything-else} -Any other character when escaped by @kbd{\} gives a warning, but -assembles as if the @samp{\} 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 @code{@value{AS}} has no -other interpretation, so @code{@value{AS}} knows it is giving you the wrong -code and warns you of the fact. -@end table - -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. - -@node Chars -@subsubsection Characters - -@cindex single character constant -@cindex character, single -@cindex constant, single character -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 @kbd{'\\} where the first @code{\} escapes the second -@code{\}. As you can see, the quote is an acute accent, not a -grave accent. A newline -@ifclear GENERIC -@ifclear abnormal-separator -(or semicolon @samp{;}) -@end ifclear -@ifset abnormal-separator -@ifset A29K -(or at sign @samp{@@}) -@end ifset -@ifset H8 -(or dollar sign @samp{$}, for the H8/300; or semicolon @samp{;} for the -Hitachi SH or -H8/500) -@end ifset -@end ifset -@end ifclear -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. @code{@value{AS}} assumes your character code is ASCII: -@kbd{'A} means 65, @kbd{'B} means 66, and so on. @refill - -@node Numbers -@subsection Number Constants - -@cindex constants, number -@cindex number constants -@code{@value{AS}} distinguishes three kinds of numbers according to how they -are stored in the target machine. @emph{Integers} are numbers that -would fit into an @code{int} in the C language. @emph{Bignums} are -integers, but they are stored in more than 32 bits. @emph{Flonums} -are floating point numbers, described below. - -@menu -* Integers:: Integers -* Bignums:: Bignums -* Flonums:: Flonums -@ifclear GENERIC -@ifset I960 -* Bit Fields:: Bit Fields -@end ifset -@end ifclear -@end menu - -@node Integers -@subsubsection Integers -@cindex integers -@cindex constants, integer - -@cindex binary integers -@cindex integers, binary -A binary integer is @samp{0b} or @samp{0B} followed by zero or more of -the binary digits @samp{01}. - -@cindex octal integers -@cindex integers, octal -An octal integer is @samp{0} followed by zero or more of the octal -digits (@samp{01234567}). - -@cindex decimal integers -@cindex integers, decimal -A decimal integer starts with a non-zero digit followed by zero or -more digits (@samp{0123456789}). - -@cindex hexadecimal integers -@cindex integers, hexadecimal -A hexadecimal integer is @samp{0x} or @samp{0X} followed by one or -more hexadecimal digits chosen from @samp{0123456789abcdefABCDEF}. - -Integers have the usual values. To denote a negative integer, use -the prefix operator @samp{-} discussed under expressions -(@pxref{Prefix Ops,,Prefix Operators}). - -@node Bignums -@subsubsection Bignums - -@cindex bignums -@cindex constants, bignum -A @dfn{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. - -@node Flonums -@subsubsection Flonums -@cindex flonums -@cindex floating point numbers -@cindex constants, floating point - -@cindex precision, floating point -A @dfn{flonum} represents a floating point number. The translation is -indirect: a decimal floating point number from the text is converted by -@code{@value{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 @code{@value{AS}} specialized to that computer. - -A flonum is written by writing (in order) -@itemize @bullet -@item -The digit @samp{0}. -@ifset HPPA -(@samp{0} is optional on the HPPA.) -@end ifset - -@item -A letter, to tell @code{@value{AS}} the rest of the number is a flonum. -@ifset GENERIC -@kbd{e} is recommended. Case is not important. -@ignore -@c FIXME: verify if flonum syntax really this vague for most cases -(Any otherwise illegal letter works here, but that might be changed. Vax BSD -4.2 assembler seems to allow any of @samp{defghDEFGH}.) -@end ignore - -On the H8/300, H8/500, -Hitachi SH, -and AMD 29K architectures, the letter must be -one of the letters @samp{DFPRSX} (in upper or lower case). - -On the ARC, the letter must be one of the letters @samp{DFRS} -(in upper or lower case). - -On the Intel 960 architecture, the letter must be -one of the letters @samp{DFT} (in upper or lower case). - -On the HPPA architecture, the letter must be @samp{E} (upper case only). -@end ifset -@ifclear GENERIC -@ifset A29K -One of the letters @samp{DFPRSX} (in upper or lower case). -@end ifset -@ifset ARC -One of the letters @samp{DFRS} (in upper or lower case). -@end ifset -@ifset H8 -One of the letters @samp{DFPRSX} (in upper or lower case). -@end ifset -@ifset HPPA -The letter @samp{E} (upper case only). -@end ifset -@ifset I960 -One of the letters @samp{DFT} (in upper or lower case). -@end ifset -@end ifclear - -@item -An optional sign: either @samp{+} or @samp{-}. - -@item -An optional @dfn{integer part}: zero or more decimal digits. - -@item -An optional @dfn{fractional part}: @samp{.} followed by zero -or more decimal digits. - -@item -An optional exponent, consisting of: - -@itemize @bullet -@item -An @samp{E} or @samp{e}. -@c I can't find a config where "EXP_CHARS" is other than 'eE', but in -@c principle this can perfectly well be different on different targets. -@item -Optional sign: either @samp{+} or @samp{-}. -@item -One or more decimal digits. -@end itemize - -@end itemize - -At least one of the integer part or the fractional part must be -present. The floating point number has the usual base-10 value. - -@code{@value{AS}} does all processing using integers. Flonums are computed -independently of any floating point hardware in the computer running -@code{@value{AS}}. - -@ifclear GENERIC -@ifset I960 -@c Bit fields are written as a general facility but are also controlled -@c by a conditional-compilation flag---which is as of now (21mar91) -@c turned on only by the i960 config of GAS. -@node Bit Fields -@subsubsection Bit Fields - -@cindex bit fields -@cindex constants, bit field -You can also define numeric constants as @dfn{bit fields}. -specify two numbers separated by a colon--- -@example -@var{mask}:@var{value} -@end example -@noindent -@code{@value{AS}} applies a bitwise @sc{and} between @var{mask} and -@var{value}. - -The resulting number is then packed -@ifset GENERIC -@c this conditional paren in case bit fields turned on elsewhere than 960 -(in host-dependent byte order) -@end ifset -into a field whose width depends on which assembler directive has the -bit-field as its argument. Overflow (a result from the bitwise and -requiring more binary digits to represent) is not an error; instead, -more constants are generated, of the specified width, beginning with the -least significant digits.@refill - -The directives @code{.byte}, @code{.hword}, @code{.int}, @code{.long}, -@code{.short}, and @code{.word} accept bit-field arguments. -@end ifset -@end ifclear - -@node Sections -@chapter Sections and Relocation -@cindex sections -@cindex relocation - -@menu -* Secs Background:: Background -* Ld Sections:: Linker Sections -* As Sections:: Assembler Internal Sections -* Sub-Sections:: Sub-Sections -* bss:: bss Section -@end menu - -@node Secs Background -@section 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. - -@cindex linker, and assembler -@cindex assembler, and linker -The linker @code{@value{LD}} reads many object files (partial programs) and -combines their contents to form a runnable program. When @code{@value{AS}} -emits an object file, the partial program is assumed to start at address 0. -@code{@value{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 @code{@value{AS}} uses -sections. - -@code{@value{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 @emph{section}. Assigning -run-time addresses to sections is called @dfn{relocation}. It includes -the task of adjusting mentions of object-file addresses so they refer to -the proper run-time addresses. -@ifset H8 -For the H8/300 and H8/500, -and for the Hitachi SH, -@code{@value{AS}} pads sections if needed to -ensure they end on a word (sixteen bit) boundary. -@end ifset - -@cindex standard assembler sections -An object file written by @code{@value{AS}} has at least three sections, any -of which may be empty. These are named @dfn{text}, @dfn{data} and -@dfn{bss} sections. - -@ifset COFF -@ifset GENERIC -When it generates COFF output, -@end ifset -@code{@value{AS}} can also generate whatever other named sections you specify -using the @samp{.section} directive (@pxref{Section,,@code{.section}}). -If you do not use any directives that place output in the @samp{.text} -or @samp{.data} sections, these sections still exist, but are empty. -@end ifset - -@ifset HPPA -@ifset GENERIC -When @code{@value{AS}} generates SOM or ELF output for the HPPA, -@end ifset -@code{@value{AS}} can also generate whatever other named sections you -specify using the @samp{.space} and @samp{.subspace} directives. See -@cite{HP9000 Series 800 Assembly Language Reference Manual} -(HP 92432-90001) for details on the @samp{.space} and @samp{.subspace} -assembler directives. - -@ifset SOM -Additionally, @code{@value{AS}} uses different names for the standard -text, data, and bss sections when generating SOM output. Program text -is placed into the @samp{$CODE$} section, data into @samp{$DATA$}, and -BSS into @samp{$BSS$}. -@end ifset -@end ifset - -Within the object file, the text section starts at address @code{0}, the -data section follows, and the bss section follows the data section. - -@ifset HPPA -When generating either SOM or ELF output files on the HPPA, the text -section starts at address @code{0}, the data section at address -@code{0x4000000}, and the bss section follows the data section. -@end ifset - -To let @code{@value{LD}} know which data changes when the sections are -relocated, and how to change that data, @code{@value{AS}} also writes to the -object file details of the relocation needed. To perform relocation -@code{@value{LD}} must know, each time an address in the object -file is mentioned: -@itemize @bullet -@item -Where in the object file is the beginning of this reference to -an address? -@item -How long (in bytes) is this reference? -@item -Which section does the address refer to? What is the numeric value of -@display -(@var{address}) @minus{} (@var{start-address of section})? -@end display -@item -Is the reference to an address ``Program-Counter relative''? -@end itemize - -@cindex addresses, format of -@cindex section-relative addressing -In fact, every address @code{@value{AS}} ever uses is expressed as -@display -(@var{section}) + (@var{offset into section}) -@end display -@noindent -Further, most expressions @code{@value{AS}} computes have this section-relative -nature. -@ifset SOM -(For some object formats, such as SOM for the HPPA, some expressions are -symbol-relative instead.) -@end ifset - -In this manual we use the notation @{@var{secname} @var{N}@} to mean ``offset -@var{N} into section @var{secname}.'' - -Apart from text, data and bss sections you need to know about the -@dfn{absolute} section. When @code{@value{LD}} mixes partial programs, -addresses in the absolute section remain unchanged. For example, address -@code{@{absolute 0@}} is ``relocated'' to run-time address 0 by -@code{@value{LD}}. Although the linker never arranges two partial programs' -data sections with overlapping addresses after linking, @emph{by definition} -their absolute sections must overlap. Address @code{@{absolute@ 239@}} in one -part of a program is always the same address when the program is running as -address @code{@{absolute@ 239@}} in any other part of the program. - -The idea of sections is extended to the @dfn{undefined} section. Any -address whose section is unknown at assembly time is by definition -rendered @{undefined @var{U}@}---where @var{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 @emph{undefined}. - -By analogy the word @emph{section} is used to describe groups of sections in -the linked program. @code{@value{LD}} puts all partial programs' text -sections in contiguous addresses in the linked program. It is -customary to refer to the @emph{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 @code{@value{LD}}; others are invented for -use of @code{@value{AS}} and have no meaning except during assembly. - -@node Ld Sections -@section Linker Sections -@code{@value{LD}} deals with just four kinds of sections, summarized below. - -@table @strong - -@ifset COFF -@cindex named sections -@cindex sections, named -@item named sections -@end ifset -@ifset aout-bout -@cindex text section -@cindex data section -@itemx text section -@itemx data section -@end ifset -These sections hold your program. @code{@value{AS}} and @code{@value{LD}} treat them as -separate but equal sections. Anything you can say of one section is -true another. -@ifset aout-bout -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. -@end ifset - -@cindex bss section -@item bss section -This section contains zeroed bytes when your program begins running. It -is used to hold unitialized 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. - -@cindex absolute section -@item 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 @code{@value{LD}} must -not change when relocating. In this sense we speak of absolute -addresses being ``unrelocatable'': they do not change during relocation. - -@cindex undefined section -@item undefined section -This ``section'' is a catch-all for address references to objects not in -the preceding sections. -@c FIXME: ref to some other doc on obj-file formats could go here. -@end table - -@cindex relocation example -An idealized example of three relocatable sections follows. -@ifset COFF -The example uses the traditional section names @samp{.text} and @samp{.data}. -@end ifset -Memory addresses are on the horizontal axis. - -@c TEXI2ROFF-KILL -@ifinfo -@c END TEXI2ROFF-KILL -@smallexample - +-----+----+--+ -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 @dots{} -@end smallexample -@c TEXI2ROFF-KILL -@end ifinfo -@need 5000 -@tex - -\line{\it Partial program \#1: \hfil} -\line{\ibox{2.5cm}{\tt text}\ibox{2cm}{\tt data}\ibox{1cm}{\tt bss}\hfil} -\line{\boxit{2.5cm}{\tt ttttt}\boxit{2cm}{\tt dddd}\boxit{1cm}{\tt 00}\hfil} - -\line{\it Partial program \#2: \hfil} -\line{\ibox{1cm}{\tt text}\ibox{1.5cm}{\tt data}\ibox{1cm}{\tt bss}\hfil} -\line{\boxit{1cm}{\tt TTT}\boxit{1.5cm}{\tt DDDD}\boxit{1cm}{\tt 000}\hfil} - -\line{\it linked program: \hfil} -\line{\ibox{.5cm}{}\ibox{1cm}{\tt text}\ibox{2.5cm}{}\ibox{.75cm}{}\ibox{2cm}{\tt data}\ibox{1.5cm}{}\ibox{2cm}{\tt bss}\hfil} -\line{\boxit{.5cm}{}\boxit{1cm}{\tt TTT}\boxit{2.5cm}{\tt -ttttt}\boxit{.75cm}{}\boxit{2cm}{\tt dddd}\boxit{1.5cm}{\tt -DDDD}\boxit{2cm}{\tt 00000}\ \dots\hfil} - -\line{\it addresses: \hfil} -\line{0\dots\hfil} - -@end tex -@c END TEXI2ROFF-KILL - -@node As Sections -@section Assembler Internal Sections - -@cindex internal assembler sections -@cindex sections in messages, internal -These sections are meant only for the internal use of @code{@value{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 @code{@value{AS}} -warning messages, so it might be helpful to have an idea of their -meanings to @code{@value{AS}}. These sections are used to permit the -value of every expression in your assembly language program to be a -section-relative address. - -@table @b -@cindex assembler internal logic error -@item ASSEMBLER-INTERNAL-LOGIC-ERROR! -An internal assembler logic error has been found. This means there is a -bug in the assembler. - -@cindex expr (internal section) -@item 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. -@c FIXME item debug -@c FIXME item transfer[t] vector preload -@c FIXME item transfer[t] vector postload -@c FIXME item register -@end table - -@node Sub-Sections -@section Sub-Sections - -@cindex numbered subsections -@cindex grouping data -@ifset aout-bout -Assembled bytes -@ifset COFF -conventionally -@end ifset -fall into two sections: text and data. -@end ifset -You may have separate groups of -@ifset GENERIC -data in named sections -@end ifset -@ifclear GENERIC -@ifclear aout-bout -data in named sections -@end ifclear -@ifset aout-bout -text or data -@end ifset -@end ifclear -that you want to end up near to each other in the object file, even though they -are not contiguous in the assembler source. @code{@value{AS}} allows you to -use @dfn{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 @samp{.text 0} before each -section of code being output, and a @samp{.text 1} before each group of -constants being output. - -Subsections are optional. If you do not use subsections, everything -goes in subsection number zero. - -@ifset GENERIC -Each subsection is zero-padded up to a multiple of four bytes. -(Subsections may be padded a different amount on different flavors -of @code{@value{AS}}.) -@end ifset -@ifclear GENERIC -@ifset H8 -On the H8/300 and H8/500 platforms, each subsection is zero-padded to a word -boundary (two bytes). -The same is true on the Hitachi SH. -@end ifset -@ifset I960 -@c FIXME section padding (alignment)? -@c Rich Pixley says padding here depends on target obj code format; that -@c doesn't seem particularly useful to say without further elaboration, -@c so for now I say nothing about it. If this is a generic BFD issue, -@c these paragraphs might need to vanish from this manual, and be -@c discussed in BFD chapter of binutils (or some such). -@end ifset -@ifset A29K -On the AMD 29K family, no particular padding is added to section or -subsection sizes; @value{AS} forces no alignment on this platform. -@end ifset -@end ifclear - -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; @code{@value{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 @samp{.text -@var{expression}} or a @samp{.data @var{expression}} statement. -@ifset COFF -@ifset GENERIC -When generating COFF output, you -@end ifset -@ifclear GENERIC -You -@end ifclear -can also use an extra subsection -argument with arbitrary named sections: @samp{.section @var{name}, -@var{expression}}. -@end ifset -@var{Expression} should be an absolute expression. -(@xref{Expressions}.) If you just say @samp{.text} then @samp{.text 0} -is assumed. Likewise @samp{.data} means @samp{.data 0}. Assembly -begins in @code{text 0}. For instance: -@smallexample -.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 (*)." -@end smallexample - -Each section has a @dfn{location counter} incremented by one for every byte -assembled into that section. Because subsections are merely a convenience -restricted to @code{@value{AS}} there is no concept of a subsection location -counter. There is no way to directly manipulate a location counter---but the -@code{.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 @dfn{active} location counter. - -@node bss -@section bss Section - -@cindex bss section -@cindex common variable storage -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 @code{.lcomm} pseudo-op defines a symbol in the bss section; see -@ref{Lcomm,,@code{.lcomm}}. - -The @code{.comm} pseudo-op may be used to declare a common symbol, which is -another form of uninitialized symbol; see @xref{Comm,,@code{.comm}}. - -@ifset GENERIC -When assembling for a target which supports multiple sections, such as ELF or -COFF, you may switch into the @code{.bss} section and define symbols as usual; -see @ref{Section,,@code{.section}}. You may only assemble zero values into the -section. Typically the section will only contain symbol definitions and -@code{.skip} directives (@pxref{Skip,,@code{.skip}}). -@end ifset - -@node Symbols -@chapter Symbols - -@cindex 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. - -@quotation -@cindex debuggers, and symbol order -@emph{Warning:} @code{@value{AS}} does not place symbols in the object file in -the same order they were declared. This may break some debuggers. -@end quotation - -@menu -* Labels:: Labels -* Setting Symbols:: Giving Symbols Other Values -* Symbol Names:: Symbol Names -* Dot:: The Special Dot Symbol -* Symbol Attributes:: Symbol Attributes -@end menu - -@node Labels -@section Labels - -@cindex labels -A @dfn{label} is written as a symbol immediately followed by a colon -@samp{:}. 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. - -@ifset HPPA -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 @code{@value{AS}} also -provides a special directive @code{.label} for defining labels more flexibly. -@end ifset - -@node Setting Symbols -@section Giving Symbols Other Values - -@cindex assigning values to symbols -@cindex symbol values, assigning -A symbol can be given an arbitrary value by writing a symbol, followed -by an equals sign @samp{=}, followed by an expression -(@pxref{Expressions}). This is equivalent to using the @code{.set} -directive. @xref{Set,,@code{.set}}. - -@node Symbol Names -@section Symbol Names - -@cindex symbol names -@cindex names, symbol -@ifclear SPECIAL-SYMS -Symbol names begin with a letter or with one of @samp{._}. On most -machines, you can also use @code{$} in symbol names; exceptions are -noted in @ref{Machine Dependencies}. That character may be followed by any -string of digits, letters, dollar signs (unless otherwise noted in -@ref{Machine Dependencies}), and underscores. -@end ifclear -@ifset A29K -For the AMD 29K family, @samp{?} is also allowed in the -body of a symbol name, though not at its beginning. -@end ifset - -@ifset SPECIAL-SYMS -@ifset H8 -Symbol names begin with a letter or with one of @samp{._}. On the -Hitachi SH or the -H8/500, you can also use @code{$} in symbol names. That character may -be followed by any string of digits, letters, dollar signs (save on the -H8/300), and underscores. -@end ifset -@end ifset - -Case of letters is significant: @code{foo} is a different symbol name -than @code{Foo}. - -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. - -@subheading Local Symbol Names - -@cindex local symbol names -@cindex symbol names, local -@cindex temporary symbol names -@cindex symbol names, temporary -Local symbols help compilers and programmers use names temporarily. -There are ten local symbol names, which are re-used throughout the -program. You may refer to them using the names @samp{0} @samp{1} -@dots{} @samp{9}. To define a local symbol, write a label of the form -@samp{@b{N}:} (where @b{N} represents any digit). To refer to the most -recent previous definition of that symbol write @samp{@b{N}b}, using the -same digit as when you defined the label. To refer to the next -definition of a local label, write @samp{@b{N}f}---where @b{N} gives you -a choice of 10 forward references. The @samp{b} stands for -``backwards'' and the @samp{f} stands for ``forwards''. - -Local symbols are not emitted by the current @sc{gnu} C compiler. - -There is no restriction on how you can use these labels, but -remember that at any point in the assembly you can refer to at most -10 prior local labels and to at most 10 forward local labels. - -Local symbol names are only a notation device. They are immediately -transformed into more conventional symbol names before the assembler -uses them. The symbol names stored in the symbol table, appearing in -error messages and optionally emitted to the object file have these -parts: - -@table @code -@item L -All local labels begin with @samp{L}. Normally both @code{@value{AS}} and -@code{@value{LD}} forget symbols that start with @samp{L}. These labels are -used for symbols you are never intended to see. If you use the -@samp{-L} option then @code{@value{AS}} retains these symbols in the -object file. If you also instruct @code{@value{LD}} to retain these symbols, -you may use them in debugging. - -@item @var{digit} -If the label is written @samp{0:} then the digit is @samp{0}. -If the label is written @samp{1:} then the digit is @samp{1}. -And so on up through @samp{9:}. - -@item @kbd{C-A} -This unusual character is included so you do not accidentally invent -a symbol of the same name. The character has ASCII value -@samp{\001}. - -@item @emph{ordinal number} -This is a serial number to keep the labels distinct. The first -@samp{0:} gets the number @samp{1}; The 15th @samp{0:} gets the -number @samp{15}; @emph{etc.}. Likewise for the other labels @samp{1:} -through @samp{9:}. -@end table - -For instance, the first @code{1:} is named @code{L1@kbd{C-A}1}, the 44th -@code{3:} is named @code{L3@kbd{C-A}44}. - -@node Dot -@section The Special Dot Symbol - -@cindex dot (symbol) -@cindex @code{.} (symbol) -@cindex current address -@cindex location counter -The special symbol @samp{.} refers to the current address that -@code{@value{AS}} is assembling into. Thus, the expression @samp{melvin: -.long .} defines @code{melvin} to contain its own address. -Assigning a value to @code{.} is treated the same as a @code{.org} -directive. Thus, the expression @samp{.=.+4} is the same as saying -@ifclear no-space-dir -@samp{.space 4}. -@end ifclear -@ifset no-space-dir -@ifset A29K -@samp{.block 4}. -@end ifset -@end ifset - -@node Symbol Attributes -@section Symbol Attributes - -@cindex symbol attributes -@cindex attributes, symbol -Every symbol has, as well as its name, the attributes ``Value'' and -``Type''. Depending on output format, symbols can also have auxiliary -attributes. -@ifset INTERNALS -The detailed definitions are in @file{a.out.h}. -@end ifset - -If you use a symbol without defining it, @code{@value{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 -@ifset aout-bout -@ifset GENERIC -* a.out Symbols:: Symbol Attributes: @code{a.out} -@end ifset -@ifclear GENERIC -@ifclear BOUT -* a.out Symbols:: Symbol Attributes: @code{a.out} -@end ifclear -@ifset BOUT -* a.out Symbols:: Symbol Attributes: @code{a.out}, @code{b.out} -@end ifset -@end ifclear -@end ifset -@ifset COFF -* COFF Symbols:: Symbol Attributes for COFF -@end ifset -@ifset SOM -* SOM Symbols:: Symbol Attributes for SOM -@end ifset -@end menu - -@node Symbol Value -@subsection Value - -@cindex value of a symbol -@cindex symbol 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 @code{@value{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 -@code{@value{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 @code{.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. - -@node Symbol Type -@subsection Type - -@cindex type of a symbol -@cindex symbol 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. - -@ifset aout-bout -@ifclear GENERIC -@ifset BOUT -@c The following avoids a "widow" subsection title. @group would be -@c better if it were available outside examples. -@need 1000 -@node a.out Symbols -@subsection Symbol Attributes: @code{a.out}, @code{b.out} - -@cindex @code{b.out} symbol attributes -@cindex symbol attributes, @code{b.out} -These symbol attributes appear only when @code{@value{AS}} is configured for -one of the Berkeley-descended object output formats---@code{a.out} or -@code{b.out}. - -@end ifset -@ifclear BOUT -@node a.out Symbols -@subsection Symbol Attributes: @code{a.out} - -@cindex @code{a.out} symbol attributes -@cindex symbol attributes, @code{a.out} - -@end ifclear -@end ifclear -@ifset GENERIC -@node a.out Symbols -@subsection Symbol Attributes: @code{a.out} - -@cindex @code{a.out} symbol attributes -@cindex symbol attributes, @code{a.out} - -@end ifset -@menu -* Symbol Desc:: Descriptor -* Symbol Other:: Other -@end menu - -@node Symbol Desc -@subsubsection Descriptor - -@cindex descriptor, of @code{a.out} symbol -This is an arbitrary 16-bit value. You may establish a symbol's -descriptor value by using a @code{.desc} statement -(@pxref{Desc,,@code{.desc}}). A descriptor value means nothing to -@code{@value{AS}}. - -@node Symbol Other -@subsubsection Other - -@cindex other attribute, of @code{a.out} symbol -This is an arbitrary 8-bit value. It means nothing to @code{@value{AS}}. -@end ifset - -@ifset COFF -@node COFF Symbols -@subsection Symbol Attributes for COFF - -@cindex COFF symbol attributes -@cindex symbol attributes, COFF - -The COFF format supports a multitude of auxiliary symbol attributes; -like the primary symbol attributes, they are set between @code{.def} and -@code{.endef} directives. - -@subsubsection Primary Attributes - -@cindex primary attributes, COFF symbols -The symbol name is set with @code{.def}; the value and type, -respectively, with @code{.val} and @code{.type}. - -@subsubsection Auxiliary Attributes - -@cindex auxiliary attributes, COFF symbols -The @code{@value{AS}} directives @code{.dim}, @code{.line}, @code{.scl}, -@code{.size}, and @code{.tag} can generate auxiliary symbol table -information for COFF. -@end ifset - -@ifset SOM -@node SOM Symbols -@subsection Symbol Attributes for SOM - -@cindex SOM symbol attributes -@cindex symbol attributes, SOM - -The SOM format for the HPPA supports a multitude of symbol attributes set with -the @code{.EXPORT} and @code{.IMPORT} directives. - -The attributes are described in @cite{HP9000 Series 800 Assembly -Language Reference Manual} (HP 92432-90001) under the @code{IMPORT} and -@code{EXPORT} assembler directive documentation. -@end ifset - -@node Expressions -@chapter Expressions - -@cindex expressions -@cindex addresses -@cindex numeric values -An @dfn{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 @code{@value{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. -@code{@value{AS}} aborts with an error message in this situation. - -@menu -* Empty Exprs:: Empty Expressions -* Integer Exprs:: Integer Expressions -@end menu - -@node Empty Exprs -@section Empty Expressions - -@cindex empty expressions -@cindex expressions, empty -An empty expression has no value: it is just whitespace or null. -Wherever an absolute expression is required, you may omit the -expression, and @code{@value{AS}} assumes a value of (absolute) 0. This -is compatible with other assemblers. - -@node Integer Exprs -@section Integer Expressions - -@cindex integer expressions -@cindex expressions, integer -An @dfn{integer expression} is one or more @emph{arguments} delimited -by @emph{operators}. - -@menu -* Arguments:: Arguments -* Operators:: Operators -* Prefix Ops:: Prefix Operators -* Infix Ops:: Infix Operators -@end menu - -@node Arguments -@subsection Arguments - -@cindex expression arguments -@cindex arguments in expressions -@cindex operands in expressions -@cindex arithmetic operands -@dfn{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 @{@var{section} @var{NNN}@} where -@var{section} is one of text, data, bss, absolute, -or undefined. @var{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 @code{@value{AS}} pretends -these 32 bits are an integer. You may write integer-manipulating -instructions that act on exotic constants, compatible with other -assemblers. - -@cindex subexpressions -Subexpressions are a left parenthesis @samp{(} followed by an integer -expression, followed by a right parenthesis @samp{)}; or a prefix -operator followed by an argument. - -@node Operators -@subsection Operators - -@cindex operators, in expressions -@cindex arithmetic functions -@cindex functions, in expressions -@dfn{Operators} are arithmetic functions, like @code{+} or @code{%}. Prefix -operators are followed by an argument. Infix operators appear -between their arguments. Operators may be preceded and/or followed by -whitespace. - -@node Prefix Ops -@subsection Prefix Operator - -@cindex prefix operators -@code{@value{AS}} has the following @dfn{prefix operators}. They each take -one argument, which must be absolute. - -@c the tex/end tex stuff surrounding this small table is meant to make -@c it align, on the printed page, with the similar table in the next -@c section (which is inside an enumerate). -@tex -\global\advance\leftskip by \itemindent -@end tex - -@table @code -@item - -@dfn{Negation}. Two's complement negation. -@item ~ -@dfn{Complementation}. Bitwise not. -@end table - -@tex -\global\advance\leftskip by -\itemindent -@end tex - -@node Infix Ops -@subsection Infix Operators - -@cindex infix operators -@cindex operators, permitted arguments -@dfn{Infix operators} take two arguments, one on either side. Operators -have precedence, but operations with equal precedence are performed left -to right. Apart from @code{+} or @code{-}, both arguments must be -absolute, and the result is absolute. - -@enumerate -@cindex operator precedence -@cindex precedence of operators - -@item -Highest Precedence - -@table @code -@item * -@dfn{Multiplication}. - -@item / -@dfn{Division}. Truncation is the same as the C operator @samp{/} - -@item % -@dfn{Remainder}. - -@item < -@itemx << -@dfn{Shift Left}. Same as the C operator @samp{<<}. - -@item > -@itemx >> -@dfn{Shift Right}. Same as the C operator @samp{>>}. -@end table - -@item -Intermediate precedence - -@table @code -@item | - -@dfn{Bitwise Inclusive Or}. - -@item & -@dfn{Bitwise And}. - -@item ^ -@dfn{Bitwise Exclusive Or}. - -@item ! -@dfn{Bitwise Or Not}. -@end table - -@item -Lowest Precedence - -@table @code -@cindex addition, permitted arguments -@cindex plus, permitted arguments -@cindex arguments for addition -@item + -@dfn{Addition}. If either argument is absolute, the result has the section of -the other argument. You may not add together arguments from different -sections. - -@cindex subtraction, permitted arguments -@cindex minus, permitted arguments -@cindex arguments for subtraction -@item - -@dfn{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. -@c FIXME is there still something useful to say about undefined - undefined ? -@end table -@end enumerate - -In short, it's only meaningful to add or subtract the @emph{offsets} in an -address; you can only have a defined section in one of the two arguments. - -@node Pseudo Ops -@chapter Assembler Directives - -@cindex directives, machine independent -@cindex pseudo-ops, machine independent -@cindex machine independent directives -All assembler directives have names that begin with a period (@samp{.}). -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 @sc{gnu} assembler. -@ifset GENERIC -Some machine configurations provide additional directives. -@xref{Machine Dependencies}. -@end ifset -@ifclear GENERIC -@ifset machine-directives -@xref{Machine Dependencies} for additional directives. -@end ifset -@end ifclear - -@menu -* Abort:: @code{.abort} -@ifset COFF -* ABORT:: @code{.ABORT} -@end ifset - -* Align:: @code{.align @var{abs-expr} , @var{abs-expr}} -* Ascii:: @code{.ascii "@var{string}"}@dots{} -* Asciz:: @code{.asciz "@var{string}"}@dots{} -* Balign:: @code{.balign @var{abs-expr} , @var{abs-expr}} -* Byte:: @code{.byte @var{expressions}} -* Comm:: @code{.comm @var{symbol} , @var{length} } -* Data:: @code{.data @var{subsection}} -@ifset COFF -* Def:: @code{.def @var{name}} -@end ifset -@ifset aout-bout -* Desc:: @code{.desc @var{symbol}, @var{abs-expression}} -@end ifset -@ifset COFF -* Dim:: @code{.dim} -@end ifset - -* Double:: @code{.double @var{flonums}} -* Eject:: @code{.eject} -* Else:: @code{.else} -* End:: @code{.end} -@ifset COFF -* Endef:: @code{.endef} -@end ifset - -* Endfunc:: @code{.endfunc} -* Endif:: @code{.endif} -* Equ:: @code{.equ @var{symbol}, @var{expression}} -* Equiv:: @code{.equiv @var{symbol}, @var{expression}} -* Err:: @code{.err} -* Exitm:: @code{.exitm} -* Extern:: @code{.extern} -* Fail:: @code{.fail} -@ifclear no-file-dir -* File:: @code{.file @var{string}} -@end ifclear - -* Fill:: @code{.fill @var{repeat} , @var{size} , @var{value}} -* Float:: @code{.float @var{flonums}} -* Func:: @code{.func} -* Global:: @code{.global @var{symbol}}, @code{.globl @var{symbol}} -* hword:: @code{.hword @var{expressions}} -* Ident:: @code{.ident} -* If:: @code{.if @var{absolute expression}} -* Include:: @code{.include "@var{file}"} -* Int:: @code{.int @var{expressions}} -* Irp:: @code{.irp @var{symbol},@var{values}}@dots{} -* Irpc:: @code{.irpc @var{symbol},@var{values}}@dots{} -* Lcomm:: @code{.lcomm @var{symbol} , @var{length}} -* Lflags:: @code{.lflags} -@ifclear no-line-dir -* Line:: @code{.line @var{line-number}} -@end ifclear - -* Ln:: @code{.ln @var{line-number}} -* Linkonce:: @code{.linkonce [@var{type}]} -* List:: @code{.list} -* Long:: @code{.long @var{expressions}} -@ignore -* Lsym:: @code{.lsym @var{symbol}, @var{expression}} -@end ignore - -* Macro:: @code{.macro @var{name} @var{args}}@dots{} -* MRI:: @code{.mri @var{val}} - -* Nolist:: @code{.nolist} -* Octa:: @code{.octa @var{bignums}} -* Org:: @code{.org @var{new-lc} , @var{fill}} -* P2align:: @code{.p2align @var{abs-expr} , @var{abs-expr}} -* Print:: @code{.print @var{string}} -* Psize:: @code{.psize @var{lines}, @var{columns}} -* Purgem:: @code{.purgem @var{name}} -* Quad:: @code{.quad @var{bignums}} -* Rept:: @code{.rept @var{count}} -* Sbttl:: @code{.sbttl "@var{subheading}"} -@ifset COFF -* Scl:: @code{.scl @var{class}} -* Section:: @code{.section @var{name}, @var{subsection}} -@end ifset - -* Set:: @code{.set @var{symbol}, @var{expression}} -* Short:: @code{.short @var{expressions}} -* Single:: @code{.single @var{flonums}} -@ifset COFF -* Size:: @code{.size} -@end ifset - -* Skip:: @code{.skip @var{size} , @var{fill}} -* Sleb128:: @code{.sleb128 @var{expressions}} -* Space:: @code{.space @var{size} , @var{fill}} -@ifset have-stabs -* Stab:: @code{.stabd, .stabn, .stabs} -@end ifset - -* String:: @code{.string "@var{str}"} -* Struct:: @code{.struct @var{expression}} -@ifset ELF -* Symver:: @code{.symver @var{name},@var{name2@@nodename}} -@end ifset -@ifset COFF -* Tag:: @code{.tag @var{structname}} -@end ifset - -* Text:: @code{.text @var{subsection}} -* Title:: @code{.title "@var{heading}"} -@ifset COFF -* Type:: @code{.type @var{int}} -* Val:: @code{.val @var{addr}} -@end ifset -@ifset ELF -* Visibility:: @code{.internal @var{name}, .hidden @var{name}, .protected @var{name}} -@end ifset - -* Uleb128:: @code{.uleb128 @var{expressions}} -* Word:: @code{.word @var{expressions}} -* Deprecated:: Deprecated Directives -@end menu - -@node Abort -@section @code{.abort} - -@cindex @code{abort} directive -@cindex stopping the assembly -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 @code{@value{AS}} to -quit also. One day @code{.abort} will not be supported. - -@ifset COFF -@node ABORT -@section @code{.ABORT} - -@cindex @code{ABORT} directive -When producing COFF output, @code{@value{AS}} accepts this directive as a -synonym for @samp{.abort}. - -@ifset BOUT -When producing @code{b.out} output, @code{@value{AS}} accepts this directive, -but ignores it. -@end ifset -@end ifset - -@node Align -@section @code{.align @var{abs-expr}, @var{abs-expr}, @var{abs-expr}} - -@cindex padding the location counter -@cindex @code{align} directive -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 a29k, hppa, m68k, m88k, w65, sparc, and Hitachi SH, and i386 using ELF -format, -the first expression is the -alignment request in bytes. For example @samp{.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 other systems, including the i386 using a.out format, it is the -number of low-order zero bits the location counter must have after -advancement. For example @samp{.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 @code{.balign} and @code{.p2align} directives, -described later, which have a consistent behavior across all -architectures (but are specific to GAS). - -@node Ascii -@section @code{.ascii "@var{string}"}@dots{} - -@cindex @code{ascii} directive -@cindex string literals -@code{.ascii} expects zero or more string literals (@pxref{Strings}) -separated by commas. It assembles each string (with no automatic -trailing zero byte) into consecutive addresses. - -@node Asciz -@section @code{.asciz "@var{string}"}@dots{} - -@cindex @code{asciz} directive -@cindex zero-terminated strings -@cindex null-terminated strings -@code{.asciz} is just like @code{.ascii}, but each string is followed by -a zero byte. The ``z'' in @samp{.asciz} stands for ``zero''. - -@node Balign -@section @code{.balign[wl] @var{abs-expr}, @var{abs-expr}, @var{abs-expr}} - -@cindex padding the location counter given number of bytes -@cindex @code{balign} directive -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 @samp{.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. - -@cindex @code{balignw} directive -@cindex @code{balignl} directive -The @code{.balignw} and @code{.balignl} directives are variants of the -@code{.balign} directive. The @code{.balignw} directive treats the fill -pattern as a two byte word value. The @code{.balignl} directives treats the -fill pattern as a four byte longword value. For example, @code{.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. - -@node Byte -@section @code{.byte @var{expressions}} - -@cindex @code{byte} directive -@cindex integers, one byte -@code{.byte} expects zero or more expressions, separated by commas. -Each expression is assembled into the next byte. - -@node Comm -@section @code{.comm @var{symbol} , @var{length} } - -@cindex @code{comm} directive -@cindex symbol, common -@code{.comm} declares a common symbol named @var{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 @code{@value{LD}} does not see a -definition for the symbol--just one or more common symbols--then it will -allocate @var{length} bytes of uninitialized memory. @var{length} must be an -absolute expression. If @code{@value{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. - -@ifset ELF -When using ELF, the @code{.comm} directive takes an optional third argument. -This is the desired alignment of the symbol, specified as a byte boundary (for -example, an alignment of 16 means that the least significant 4 bits of the -address should be zero). The alignment must be an absolute expression, and it -must be a power of two. If @code{@value{LD}} allocates uninitialized memory -for the common symbol, it will use the alignment when placing the symbol. If -no alignment is specified, @code{@value{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. -@end ifset - -@ifset HPPA -The syntax for @code{.comm} differs slightly on the HPPA. The syntax is -@samp{@var{symbol} .comm, @var{length}}; @var{symbol} is optional. -@end ifset - -@node Data -@section @code{.data @var{subsection}} - -@cindex @code{data} directive -@code{.data} tells @code{@value{AS}} to assemble the following statements onto the -end of the data subsection numbered @var{subsection} (which is an -absolute expression). If @var{subsection} is omitted, it defaults -to zero. - -@ifset COFF -@node Def -@section @code{.def @var{name}} - -@cindex @code{def} directive -@cindex COFF symbols, debugging -@cindex debugging COFF symbols -Begin defining debugging information for a symbol @var{name}; the -definition extends until the @code{.endef} directive is encountered. -@ifset BOUT - -This directive is only observed when @code{@value{AS}} is configured for COFF -format output; when producing @code{b.out}, @samp{.def} is recognized, -but ignored. -@end ifset -@end ifset - -@ifset aout-bout -@node Desc -@section @code{.desc @var{symbol}, @var{abs-expression}} - -@cindex @code{desc} directive -@cindex COFF symbol descriptor -@cindex symbol descriptor, COFF -This directive sets the descriptor of the symbol (@pxref{Symbol Attributes}) -to the low 16 bits of an absolute expression. - -@ifset COFF -The @samp{.desc} directive is not available when @code{@value{AS}} is -configured for COFF output; it is only for @code{a.out} or @code{b.out} -object format. For the sake of compatibility, @code{@value{AS}} accepts -it, but produces no output, when configured for COFF. -@end ifset -@end ifset - -@ifset COFF -@node Dim -@section @code{.dim} - -@cindex @code{dim} directive -@cindex COFF auxiliary symbol information -@cindex auxiliary symbol information, COFF -This directive is generated by compilers to include auxiliary debugging -information in the symbol table. It is only permitted inside -@code{.def}/@code{.endef} pairs. -@ifset BOUT - -@samp{.dim} is only meaningful when generating COFF format output; when -@code{@value{AS}} is generating @code{b.out}, it accepts this directive but -ignores it. -@end ifset -@end ifset - -@node Double -@section @code{.double @var{flonums}} - -@cindex @code{double} directive -@cindex floating point numbers (double) -@code{.double} expects zero or more flonums, separated by commas. It -assembles floating point numbers. -@ifset GENERIC -The exact kind of floating point numbers emitted depends on how -@code{@value{AS}} is configured. @xref{Machine Dependencies}. -@end ifset -@ifclear GENERIC -@ifset IEEEFLOAT -On the @value{TARGET} family @samp{.double} emits 64-bit floating-point numbers -in @sc{ieee} format. -@end ifset -@end ifclear - -@node Eject -@section @code{.eject} - -@cindex @code{eject} directive -@cindex new page, in listings -@cindex page, in listings -@cindex listing control: new page -Force a page break at this point, when generating assembly listings. - -@node Else -@section @code{.else} - -@cindex @code{else} directive -@code{.else} is part of the @code{@value{AS}} support for conditional -assembly; @pxref{If,,@code{.if}}. It marks the beginning of a section -of code to be assembled if the condition for the preceding @code{.if} -was false. - -@node End -@section @code{.end} - -@cindex @code{end} directive -@code{.end} marks the end of the assembly file. @code{@value{AS}} does not -process anything in the file past the @code{.end} directive. - -@ifset COFF -@node Endef -@section @code{.endef} - -@cindex @code{endef} directive -This directive flags the end of a symbol definition begun with -@code{.def}. -@ifset BOUT - -@samp{.endef} is only meaningful when generating COFF format output; if -@code{@value{AS}} is configured to generate @code{b.out}, it accepts this -directive but ignores it. -@end ifset -@end ifset - -@node Endfunc -@section @code{.endfunc} -@cindex @code{endfunc} directive -@code{.endfunc} marks the end of a function specified with @code{.func}. - -@node Endif -@section @code{.endif} - -@cindex @code{endif} directive -@code{.endif} is part of the @code{@value{AS}} support for conditional assembly; -it marks the end of a block of code that is only assembled -conditionally. @xref{If,,@code{.if}}. - -@node Equ -@section @code{.equ @var{symbol}, @var{expression}} - -@cindex @code{equ} directive -@cindex assigning values to symbols -@cindex symbols, assigning values to -This directive sets the value of @var{symbol} to @var{expression}. -It is synonymous with @samp{.set}; @pxref{Set,,@code{.set}}. - -@ifset HPPA -The syntax for @code{equ} on the HPPA is -@samp{@var{symbol} .equ @var{expression}}. -@end ifset - -@node Equiv -@section @code{.equiv @var{symbol}, @var{expression}} -@cindex @code{equiv} directive -The @code{.equiv} directive is like @code{.equ} and @code{.set}, except that -the assembler will signal an error if @var{symbol} is already defined. - -Except for the contents of the error message, this is roughly equivalent to -@smallexample -.ifdef SYM -.err -.endif -.equ SYM,VAL -@end smallexample - -@node Err -@section @code{.err} -@cindex @code{err} directive -If @code{@value{AS}} assembles a @code{.err} directive, it will print an error -message and, unless the @code{-Z} option was used, it will not generate an -object file. This can be used to signal error an conditionally compiled code. - -@node Exitm -@section @code{.exitm} -Exit early from the current macro definition. @xref{Macro}. - -@node Extern -@section @code{.extern} - -@cindex @code{extern} directive -@code{.extern} is accepted in the source program---for compatibility -with other assemblers---but it is ignored. @code{@value{AS}} treats -all undefined symbols as external. - -@node Fail -@section @code{.fail @var{expression}} - -@cindex @code{fail} directive -Generates an error or a warning. If the value of the @var{expression} is 500 -or more, @code{@value{AS}} will print a warning message. If the value is less -than 500, @code{@value{AS}} will print an error message. The message will -include the value of @var{expression}. This can occasionally be useful inside -complex nested macros or conditional assembly. - -@ifclear no-file-dir -@node File -@section @code{.file @var{string}} - -@cindex @code{file} directive -@cindex logical file name -@cindex file name, logical -@code{.file} tells @code{@value{AS}} that we are about to start a new logical -file. @var{string} is the new file name. In general, the filename is -recognized whether or not it is surrounded by quotes @samp{"}; but if you wish -to specify an empty file name, you must give the quotes--@code{""}. This -statement may go away in future: it is only recognized to be compatible with -old @code{@value{AS}} programs. -@ifset A29K -In some configurations of @code{@value{AS}}, @code{.file} has already been -removed to avoid conflicts with other assemblers. @xref{Machine Dependencies}. -@end ifset -@end ifclear - -@node Fill -@section @code{.fill @var{repeat} , @var{size} , @var{value}} - -@cindex @code{fill} directive -@cindex writing patterns in memory -@cindex patterns, writing in memory -@var{result}, @var{size} and @var{value} are absolute expressions. -This emits @var{repeat} copies of @var{size} bytes. @var{Repeat} -may be zero or more. @var{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 @var{repeat} bytes -is taken from an 8-byte number. The highest order 4 bytes are -zero. The lowest order 4 bytes are @var{value} rendered in the -byte-order of an integer on the computer @code{@value{AS}} is assembling for. -Each @var{size} bytes in a repetition is taken from the lowest order -@var{size} bytes of this number. Again, this bizarre behavior is -compatible with other people's assemblers. - -@var{size} and @var{value} are optional. -If the second comma and @var{value} are absent, @var{value} is -assumed zero. If the first comma and following tokens are absent, -@var{size} is assumed to be 1. - -@node Float -@section @code{.float @var{flonums}} - -@cindex floating point numbers (single) -@cindex @code{float} directive -This directive assembles zero or more flonums, separated by commas. It -has the same effect as @code{.single}. -@ifset GENERIC -The exact kind of floating point numbers emitted depends on how -@code{@value{AS}} is configured. -@xref{Machine Dependencies}. -@end ifset -@ifclear GENERIC -@ifset IEEEFLOAT -On the @value{TARGET} family, @code{.float} emits 32-bit floating point numbers -in @sc{ieee} format. -@end ifset -@end ifclear - -@node Func -@section @code{.func @var{name}[,@var{label}]} -@cindex @code{func} directive -@code{.func} emits debugging information to denote function @var{name}, and -is ignored unless the file is assembled with debugging enabled. -Only @samp{--gstabs} is currently supported. -@var{label} is the entry point of the function and if omitted @var{name} -prepended with the @samp{leading char} is used. -@samp{leading char} is usually @code{_} or nothing, depending on the target. -All functions are currently defined to have @code{void} return type. -The function must be terminated with @code{.endfunc}. - -@node Global -@section @code{.global @var{symbol}}, @code{.globl @var{symbol}} - -@cindex @code{global} directive -@cindex symbol, making visible to linker -@code{.global} makes the symbol visible to @code{@value{LD}}. If you define -@var{symbol} in your partial program, its value is made available to -other partial programs that are linked with it. Otherwise, -@var{symbol} takes its attributes from a symbol of the same name -from another file linked into the same program. - -Both spellings (@samp{.globl} and @samp{.global}) are accepted, for -compatibility with other assemblers. - -@ifset HPPA -On the HPPA, @code{.global} is not always enough to make it accessible to other -partial programs. You may need the HPPA-only @code{.EXPORT} directive as well. -@xref{HPPA Directives,, HPPA Assembler Directives}. -@end ifset - -@node hword -@section @code{.hword @var{expressions}} - -@cindex @code{hword} directive -@cindex integers, 16-bit -@cindex numbers, 16-bit -@cindex sixteen bit integers -This expects zero or more @var{expressions}, and emits -a 16 bit number for each. - -@ifset GENERIC -This directive is a synonym for @samp{.short}; depending on the target -architecture, it may also be a synonym for @samp{.word}. -@end ifset -@ifclear GENERIC -@ifset W32 -This directive is a synonym for @samp{.short}. -@end ifset -@ifset W16 -This directive is a synonym for both @samp{.short} and @samp{.word}. -@end ifset -@end ifclear - -@node Ident -@section @code{.ident} - -@cindex @code{ident} directive -This directive is used by some assemblers to place tags in object files. -@code{@value{AS}} simply accepts the directive for source-file -compatibility with such assemblers, but does not actually emit anything -for it. - -@node If -@section @code{.if @var{absolute expression}} - -@cindex conditional assembly -@cindex @code{if} directive -@code{.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 @var{absolute expression}) is non-zero. The end of -the conditional section of code must be marked by @code{.endif} -(@pxref{Endif,,@code{.endif}}); optionally, you may include code for the -alternative condition, flagged by @code{.else} (@pxref{Else,,@code{.else}}). - -The following variants of @code{.if} are also supported: -@table @code -@cindex @code{ifdef} directive -@item .ifdef @var{symbol} -Assembles the following section of code if the specified @var{symbol} -has been defined. - -@cindex @code{ifc} directive -@item .ifc @var{string1},@var{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. - -@cindex @code{ifeq} directive -@item .ifeq @var{absolute expression} -Assembles the following section of code if the argument is zero. - -@cindex @code{ifeqs} directive -@item .ifeqs @var{string1},@var{string2} -Another form of @code{.ifc}. The strings must be quoted using double quotes. - -@cindex @code{ifge} directive -@item .ifge @var{absolute expression} -Assembles the following section of code if the argument is greater than or -equal to zero. - -@cindex @code{ifgt} directive -@item .ifgt @var{absolute expression} -Assembles the following section of code if the argument is greater than zero. - -@cindex @code{ifle} directive -@item .ifle @var{absolute expression} -Assembles the following section of code if the argument is less than or equal -to zero. - -@cindex @code{iflt} directive -@item .iflt @var{absolute expression} -Assembles the following section of code if the argument is less than zero. - -@cindex @code{ifnc} directive -@item .ifnc @var{string1},@var{string2}. -Like @code{.ifc}, but the sense of the test is reversed: this assembles the -following section of code if the two strings are not the same. - -@cindex @code{ifndef} directive -@cindex @code{ifnotdef} directive -@item .ifndef @var{symbol} -@itemx .ifnotdef @var{symbol} -Assembles the following section of code if the specified @var{symbol} -has not been defined. Both spelling variants are equivalent. - -@cindex @code{ifne} directive -@item .ifne @var{absolute expression} -Assembles the following section of code if the argument is not equal to zero -(in other words, this is equivalent to @code{.if}). - -@cindex @code{ifnes} directive -@item .ifnes @var{string1},@var{string2} -Like @code{.ifeqs}, but the sense of the test is reversed: this assembles the -following section of code if the two strings are not the same. -@end table - -@node Include -@section @code{.include "@var{file}"} - -@cindex @code{include} directive -@cindex supporting files, including -@cindex files, including -This directive provides a way to include supporting files at specified -points in your source program. The code from @var{file} is assembled as -if it followed the point of the @code{.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 @samp{-I} command-line option -(@pxref{Invoking,,Command-Line Options}). Quotation marks are required -around @var{file}. - -@node Int -@section @code{.int @var{expressions}} - -@cindex @code{int} directive -@cindex integers, 32-bit -Expect zero or more @var{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. - -@ifclear GENERIC -@ifset H8 -On the H8/500 and most forms of the H8/300, @code{.int} emits 16-bit -integers. On the H8/300H and the Hitachi SH, however, @code{.int} emits -32-bit integers. -@end ifset -@end ifclear - -@node Irp -@section @code{.irp @var{symbol},@var{values}}@dots{} - -@cindex @code{irp} directive -Evaluate a sequence of statements assigning different values to @var{symbol}. -The sequence of statements starts at the @code{.irp} directive, and is -terminated by an @code{.endr} directive. For each @var{value}, @var{symbol} is -set to @var{value}, and the sequence of statements is assembled. If no -@var{value} is listed, the sequence of statements is assembled once, with -@var{symbol} set to the null string. To refer to @var{symbol} within the -sequence of statements, use @var{\symbol}. - -For example, assembling - -@example - .irp param,1,2,3 - move d\param,sp@@- - .endr -@end example - -is equivalent to assembling - -@example - move d1,sp@@- - move d2,sp@@- - move d3,sp@@- -@end example - -@node Irpc -@section @code{.irpc @var{symbol},@var{values}}@dots{} - -@cindex @code{irpc} directive -Evaluate a sequence of statements assigning different values to @var{symbol}. -The sequence of statements starts at the @code{.irpc} directive, and is -terminated by an @code{.endr} directive. For each character in @var{value}, -@var{symbol} is set to the character, and the sequence of statements is -assembled. If no @var{value} is listed, the sequence of statements is -assembled once, with @var{symbol} set to the null string. To refer to -@var{symbol} within the sequence of statements, use @var{\symbol}. - -For example, assembling - -@example - .irpc param,123 - move d\param,sp@@- - .endr -@end example - -is equivalent to assembling - -@example - move d1,sp@@- - move d2,sp@@- - move d3,sp@@- -@end example - -@node Lcomm -@section @code{.lcomm @var{symbol} , @var{length}} - -@cindex @code{lcomm} directive -@cindex local common symbols -@cindex symbols, local common -Reserve @var{length} (an absolute expression) bytes for a local common -denoted by @var{symbol}. The section and value of @var{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. @var{Symbol} -is not declared global (@pxref{Global,,@code{.global}}), so is normally -not visible to @code{@value{LD}}. - -@ifset GENERIC -Some targets permit a third argument to be used with @code{.lcomm}. This -argument specifies the desired alignment of the symbol in the bss section. -@end ifset - -@ifset HPPA -The syntax for @code{.lcomm} differs slightly on the HPPA. The syntax is -@samp{@var{symbol} .lcomm, @var{length}}; @var{symbol} is optional. -@end ifset - -@node Lflags -@section @code{.lflags} - -@cindex @code{lflags} directive (ignored) -@code{@value{AS}} accepts this directive, for compatibility with other -assemblers, but ignores it. - -@ifclear no-line-dir -@node Line -@section @code{.line @var{line-number}} - -@cindex @code{line} directive -@end ifclear -@ifset no-line-dir -@node Ln -@section @code{.ln @var{line-number}} - -@cindex @code{ln} directive -@end ifset -@cindex logical line number -@ifset aout-bout -Change the logical line number. @var{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 @var{line-number} @minus{} 1. One day -@code{@value{AS}} will no longer support this directive: it is recognized only -for compatibility with existing assembler programs. - -@ifset GENERIC -@ifset A29K -@emph{Warning:} In the AMD29K configuration of @value{AS}, this command is -not available; use the synonym @code{.ln} in that context. -@end ifset -@end ifset -@end ifset - -@ifclear no-line-dir -Even though this is a directive associated with the @code{a.out} or -@code{b.out} object-code formats, @code{@value{AS}} still recognizes it -when producing COFF output, and treats @samp{.line} as though it -were the COFF @samp{.ln} @emph{if} it is found outside a -@code{.def}/@code{.endef} pair. - -Inside a @code{.def}, @samp{.line} is, instead, one of the directives -used by compilers to generate auxiliary symbol information for -debugging. -@end ifclear - -@node Linkonce -@section @code{.linkonce [@var{type}]} -@cindex COMDAT -@cindex @code{linkonce} directive -@cindex common sections -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 @code{.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 @var{type} argument is optional. If specified, it must be one of the -following strings. For example: -@smallexample -.linkonce same_size -@end smallexample -Not all types may be supported on all object file formats. - -@table @code -@item discard -Silently discard duplicate sections. This is the default. - -@item one_only -Warn if there are duplicate sections, but still keep only one copy. - -@item same_size -Warn if any of the duplicates have different sizes. - -@item same_contents -Warn if any of the duplicates do not have exactly the same contents. -@end table - -@node Ln -@section @code{.ln @var{line-number}} - -@cindex @code{ln} directive -@ifclear no-line-dir -@samp{.ln} is a synonym for @samp{.line}. -@end ifclear -@ifset no-line-dir -Tell @code{@value{AS}} to change the logical line number. @var{line-number} -must be an absolute expression. The next line has that logical -line number, so any other statements on the current line (after a -statement separator character @code{;}) are reported as on logical -line number @var{line-number} @minus{} 1. -@ifset BOUT - -This directive is accepted, but ignored, when @code{@value{AS}} is -configured for @code{b.out}; its effect is only associated with COFF -output format. -@end ifset -@end ifset - -@node MRI -@section @code{.mri @var{val}} - -@cindex @code{mri} directive -@cindex MRI mode, temporarily -If @var{val} is non-zero, this tells @code{@value{AS}} to enter MRI mode. If -@var{val} is zero, this tells @code{@value{AS}} to exit MRI mode. This change -affects code assembled until the next @code{.mri} directive, or until the end -of the file. @xref{M, MRI mode, MRI mode}. - -@node List -@section @code{.list} - -@cindex @code{list} directive -@cindex listing control, turning on -Control (in conjunction with the @code{.nolist} directive) whether or -not assembly listings are generated. These two directives maintain an -internal counter (which is zero initially). @code{.list} increments the -counter, and @code{.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 -@samp{-a} command line option; @pxref{Invoking,,Command-Line Options}), -the initial value of the listing counter is one. - -@node Long -@section @code{.long @var{expressions}} - -@cindex @code{long} directive -@code{.long} is the same as @samp{.int}, @pxref{Int,,@code{.int}}. - -@ignore -@c no one seems to know what this is for or whether this description is -@c what it really ought to do -@node Lsym -@section @code{.lsym @var{symbol}, @var{expression}} - -@cindex @code{lsym} directive -@cindex symbol, not referenced in assembly -@code{.lsym} creates a new symbol named @var{symbol}, but does not put it in -the hash table, ensuring it cannot be referenced by name during the -rest of the assembly. This sets the attributes of the symbol to be -the same as the expression value: -@smallexample -@var{other} = @var{descriptor} = 0 -@var{type} = @r{(section of @var{expression})} -@var{value} = @var{expression} -@end smallexample -@noindent -The new symbol is not flagged as external. -@end ignore - -@node Macro -@section @code{.macro} - -@cindex macros -The commands @code{.macro} and @code{.endm} allow you to define macros that -generate assembly output. For example, this definition specifies a macro -@code{sum} that puts a sequence of numbers into memory: - -@example - .macro sum from=0, to=5 - .long \from - .if \to-\from - sum "(\from+1)",\to - .endif - .endm -@end example - -@noindent -With that definition, @samp{SUM 0,5} is equivalent to this assembly input: - -@example - .long 0 - .long 1 - .long 2 - .long 3 - .long 4 - .long 5 -@end example - -@ftable @code -@item .macro @var{macname} -@itemx .macro @var{macname} @var{macargs} @dots{} -@cindex @code{macro} directive -Begin the definition of a macro called @var{macname}. If your macro -definition requires arguments, specify their names after the macro name, -separated by commas or spaces. You can supply a default value for any -macro argument by following the name with @samp{=@var{deflt}}. For -example, these are all valid @code{.macro} statements: - -@table @code -@item .macro comm -Begin the definition of a macro called @code{comm}, which takes no -arguments. - -@item .macro plus1 p, p1 -@itemx .macro plus1 p p1 -Either statement begins the definition of a macro called @code{plus1}, -which takes two arguments; within the macro definition, write -@samp{\p} or @samp{\p1} to evaluate the arguments. - -@item .macro reserve_str p1=0 p2 -Begin the definition of a macro called @code{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 -@samp{reserve_str @var{a},@var{b}} (with @samp{\p1} evaluating to -@var{a} and @samp{\p2} evaluating to @var{b}), or as @samp{reserve_str -,@var{b}} (with @samp{\p1} evaluating as the default, in this case -@samp{0}, and @samp{\p2} evaluating to @var{b}). -@end table - -When you call a macro, you can specify the argument values either by -position, or by keyword. For example, @samp{sum 9,17} is equivalent to -@samp{sum to=17, from=9}. - -@item .endm -@cindex @code{endm} directive -Mark the end of a macro definition. - -@item .exitm -@cindex @code{exitm} directive -Exit early from the current macro definition. - -@cindex number of macros executed -@cindex macros, count executed -@item \@@ -@code{@value{AS}} maintains a counter of how many macros it has -executed in this pseudo-variable; you can copy that number to your -output with @samp{\@@}, but @emph{only within a macro definition}. - -@ignore -@item LOCAL @var{name} [ , @dots{} ] -@emph{Warning: @code{LOCAL} is only available if you select ``alternate -macro syntax'' with @samp{-a} or @samp{--alternate}.} @xref{Alternate,, -Alternate macro syntax}. - -Generate a string replacement for each of the @var{name} arguments, and -replace any instances of @var{name} in each macro expansion. The -replacement string is unique in the assembly, and different for each -separate macro expansion. @code{LOCAL} allows you to write macros that -define symbols, without fear of conflict between separate macro expansions. -@end ignore -@end ftable - -@node Nolist -@section @code{.nolist} - -@cindex @code{nolist} directive -@cindex listing control, turning off -Control (in conjunction with the @code{.list} directive) whether or -not assembly listings are generated. These two directives maintain an -internal counter (which is zero initially). @code{.list} increments the -counter, and @code{.nolist} decrements it. Assembly listings are -generated whenever the counter is greater than zero. - -@node Octa -@section @code{.octa @var{bignums}} - -@c FIXME: double size emitted for "octa" on i960, others? Or warn? -@cindex @code{octa} directive -@cindex integer, 16-byte -@cindex sixteen byte integer -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 @emph{octa}-word for 16 bytes. - -@node Org -@section @code{.org @var{new-lc} , @var{fill}} - -@cindex @code{org} directive -@cindex location counter, advancing -@cindex advancing location counter -@cindex current address, advancing -Advance the location counter of the current section to -@var{new-lc}. @var{new-lc} is either an absolute expression or an -expression with the same section as the current subsection. That is, -you can't use @code{.org} to cross sections: if @var{new-lc} has the -wrong section, the @code{.org} directive is ignored. To be compatible -with former assemblers, if the section of @var{new-lc} is absolute, -@code{@value{AS}} issues a warning, then pretends the section of @var{new-lc} -is the same as the current subsection. - -@code{.org} may only increase the location counter, or leave it -unchanged; you cannot use @code{.org} to move the location counter -backwards. - -@c double negative used below "not undefined" because this is a specific -@c reference to "undefined" (as SEG_UNKNOWN is called in this manual) -@c section. doc@cygnus.com 18feb91 -Because @code{@value{AS}} tries to assemble programs in one pass, @var{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 @var{fill} which should be an -absolute expression. If the comma and @var{fill} are omitted, -@var{fill} defaults to zero. - -@node P2align -@section @code{.p2align[wl] @var{abs-expr}, @var{abs-expr}, @var{abs-expr}} - -@cindex padding the location counter given a power of two -@cindex @code{p2align} directive -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 @samp{.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. - -@cindex @code{p2alignw} directive -@cindex @code{p2alignl} directive -The @code{.p2alignw} and @code{.p2alignl} directives are variants of the -@code{.p2align} directive. The @code{.p2alignw} directive treats the fill -pattern as a two byte word value. The @code{.p2alignl} directives treats the -fill pattern as a four byte longword value. For example, @code{.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. - -@node Print -@section @code{.print @var{string}} - -@cindex @code{print} directive -@code{@value{AS}} will print @var{string} on the standard output during -assembly. You must put @var{string} in double quotes. - -@node Psize -@section @code{.psize @var{lines} , @var{columns}} - -@cindex @code{psize} directive -@cindex listing control: paper size -@cindex paper size, for listings -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 @code{.psize}, listings use a default line-count -of 60. You may omit the comma and @var{columns} specification; the -default width is 200 columns. - -@code{@value{AS}} generates formfeeds whenever the specified number of -lines is exceeded (or whenever you explicitly request one, using -@code{.eject}). - -If you specify @var{lines} as @code{0}, no formfeeds are generated save -those explicitly specified with @code{.eject}. - -@node Purgem -@section @code{.purgem @var{name}} - -@cindex @code{purgem} directive -Undefine the macro @var{name}, so that later uses of the string will not be -expanded. @xref{Macro}. - -@node Quad -@section @code{.quad @var{bignums}} - -@cindex @code{quad} directive -@code{.quad} expects zero or more bignums, separated by commas. For -each bignum, it emits -@ifclear bignum-16 -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. -@cindex eight-byte integer -@cindex integer, 8-byte - -The term ``quad'' comes from contexts in which a ``word'' is two bytes; -hence @emph{quad}-word for 8 bytes. -@end ifclear -@ifset bignum-16 -a 16-byte integer. If the bignum won't fit in 16 bytes, it prints a -warning message; and just takes the lowest order 16 bytes of the bignum. -@cindex sixteen-byte integer -@cindex integer, 16-byte -@end ifset - -@node Rept -@section @code{.rept @var{count}} - -@cindex @code{rept} directive -Repeat the sequence of lines between the @code{.rept} directive and the next -@code{.endr} directive @var{count} times. - -For example, assembling - -@example - .rept 3 - .long 0 - .endr -@end example - -is equivalent to assembling - -@example - .long 0 - .long 0 - .long 0 -@end example - -@node Sbttl -@section @code{.sbttl "@var{subheading}"} - -@cindex @code{sbttl} directive -@cindex subtitles for listings -@cindex listing control: subtitle -Use @var{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. - -@ifset COFF -@node Scl -@section @code{.scl @var{class}} - -@cindex @code{scl} directive -@cindex symbol storage class (COFF) -@cindex COFF symbol storage class -Set the storage-class value for a symbol. This directive may only be -used inside a @code{.def}/@code{.endef} pair. Storage class may flag -whether a symbol is static or external, or it may record further -symbolic debugging information. -@ifset BOUT - -The @samp{.scl} directive is primarily associated with COFF output; when -configured to generate @code{b.out} output format, @code{@value{AS}} -accepts this directive but ignores it. -@end ifset -@end ifset - -@node Section -@section @code{.section @var{name}} - -@cindex @code{section} directive -@cindex named section -Use the @code{.section} directive to assemble the following code into a section -named @var{name}. - -This directive is only supported for targets that actually support arbitrarily -named sections; on @code{a.out} targets, for example, it is not accepted, even -with a standard @code{a.out} section name. - -@ifset COFF -For COFF targets, the @code{.section} directive is used in one of the following -ways: -@smallexample -.section @var{name}[, "@var{flags}"] -.section @var{name}[, @var{subsegment}] -@end smallexample - -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: -@table @code -@item b -bss section (uninitialized data) -@item n -section is not loaded -@item w -writable section -@item d -data section -@item r -read-only section -@item x -executable section -@item s -shared section (meaningful for PE targets) -@end table - -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. - -If the optional argument to the @code{.section} directive is not quoted, it is -taken as a subsegment number (@pxref{Sub-Sections}). -@end ifset - -@ifset ELF -For ELF targets, the @code{.section} directive is used like this: -@smallexample -.section @var{name}[, "@var{flags}"[, @@@var{type}]] -@end smallexample -The optional @var{flags} argument is a quoted string which may contain any -combintion of the following characters: -@table @code -@item a -section is allocatable -@item w -section is writable -@item x -section is executable -@end table - -The optional @var{type} argument may contain one of the following constants: -@table @code -@item @@progbits -section contains data -@item @@nobits -section does not contain data (i.e., section only occupies space) -@end table - -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 @code{.section} -directive for compatibility with the Solaris assembler: -@smallexample -.section "@var{name}"[, @var{flags}...] -@end smallexample -Note that the section name is quoted. There may be a sequence of comma -separated flags: -@table @code -@item #alloc -section is allocatable -@item #write -section is writable -@item #execinstr -section is executable -@end table -@end ifset - -@node Set -@section @code{.set @var{symbol}, @var{expression}} - -@cindex @code{set} directive -@cindex symbol value, setting -Set the value of @var{symbol} to @var{expression}. This -changes @var{symbol}'s value and type to conform to -@var{expression}. If @var{symbol} was flagged as external, it remains -flagged (@pxref{Symbol Attributes}). - -You may @code{.set} a symbol many times in the same assembly. - -If you @code{.set} a global symbol, the value stored in the object -file is the last value stored into it. - -@ifset HPPA -The syntax for @code{set} on the HPPA is -@samp{@var{symbol} .set @var{expression}}. -@end ifset - -@node Short -@section @code{.short @var{expressions}} - -@cindex @code{short} directive -@ifset GENERIC -@code{.short} is normally the same as @samp{.word}. -@xref{Word,,@code{.word}}. - -In some configurations, however, @code{.short} and @code{.word} generate -numbers of different lengths; @pxref{Machine Dependencies}. -@end ifset -@ifclear GENERIC -@ifset W16 -@code{.short} is the same as @samp{.word}. @xref{Word,,@code{.word}}. -@end ifset -@ifset W32 -This expects zero or more @var{expressions}, and emits -a 16 bit number for each. -@end ifset -@end ifclear - -@node Single -@section @code{.single @var{flonums}} - -@cindex @code{single} directive -@cindex floating point numbers (single) -This directive assembles zero or more flonums, separated by commas. It -has the same effect as @code{.float}. -@ifset GENERIC -The exact kind of floating point numbers emitted depends on how -@code{@value{AS}} is configured. @xref{Machine Dependencies}. -@end ifset -@ifclear GENERIC -@ifset IEEEFLOAT -On the @value{TARGET} family, @code{.single} emits 32-bit floating point -numbers in @sc{ieee} format. -@end ifset -@end ifclear - -@ifset COFF -@node Size -@section @code{.size} - -@cindex @code{size} directive -This directive is generated by compilers to include auxiliary debugging -information in the symbol table. It is only permitted inside -@code{.def}/@code{.endef} pairs. -@ifset BOUT - -@samp{.size} is only meaningful when generating COFF format output; when -@code{@value{AS}} is generating @code{b.out}, it accepts this directive but -ignores it. -@end ifset -@end ifset - -@node Sleb128 -@section @code{.sleb128 @var{expressions}} - -@cindex @code{sleb128} directive -@var{sleb128} stands for ``signed little endian base 128.'' This is a -compact, variable length representation of numbers used by the DWARF -symbolic debugging format. @xref{Uleb128,@code{.uleb128}}. - -@ifclear no-space-dir -@node Skip -@section @code{.skip @var{size} , @var{fill}} - -@cindex @code{skip} directive -@cindex filling memory -This directive emits @var{size} bytes, each of value @var{fill}. Both -@var{size} and @var{fill} are absolute expressions. If the comma and -@var{fill} are omitted, @var{fill} is assumed to be zero. This is the same as -@samp{.space}. - -@node Space -@section @code{.space @var{size} , @var{fill}} - -@cindex @code{space} directive -@cindex filling memory -This directive emits @var{size} bytes, each of value @var{fill}. Both -@var{size} and @var{fill} are absolute expressions. If the comma -and @var{fill} are omitted, @var{fill} is assumed to be zero. This is the same -as @samp{.skip}. - -@ifset HPPA -@quotation -@emph{Warning:} @code{.space} has a completely different meaning for HPPA -targets; use @code{.block} as a substitute. See @cite{HP9000 Series 800 -Assembly Language Reference Manual} (HP 92432-90001) for the meaning of the -@code{.space} directive. @xref{HPPA Directives,,HPPA Assembler Directives}, -for a summary. -@end quotation -@end ifset -@end ifclear - -@ifset A29K -@ifclear GENERIC -@node Space -@section @code{.space} -@cindex @code{space} directive -@end ifclear -On the AMD 29K, this directive is ignored; it is accepted for -compatibility with other AMD 29K assemblers. - -@quotation -@emph{Warning:} In most versions of the @sc{gnu} assembler, the directive -@code{.space} has the effect of @code{.block} @xref{Machine Dependencies}. -@end quotation -@end ifset - -@ifset have-stabs -@node Stab -@section @code{.stabd, .stabn, .stabs} - -@cindex symbolic debuggers, information for -@cindex @code{stab@var{x}} directives -There are three directives that begin @samp{.stab}. -All emit symbols (@pxref{Symbols}), for use by symbolic debuggers. -The symbols are not entered in the @code{@value{AS}} hash table: they -cannot be referenced elsewhere in the source file. -Up to five fields are required: - -@table @var -@item string -This is the symbol's name. It may contain any character except -@samp{\000}, so is more general than ordinary symbol names. Some -debuggers used to code arbitrarily complex structures into symbol names -using this field. - -@item type -An absolute expression. The symbol's type is set to the low 8 bits of -this expression. Any bit pattern is permitted, but @code{@value{LD}} -and debuggers choke on silly bit patterns. - -@item other -An absolute expression. The symbol's ``other'' attribute is set to the -low 8 bits of this expression. - -@item desc -An absolute expression. The symbol's descriptor is set to the low 16 -bits of this expression. - -@item value -An absolute expression which becomes the symbol's value. -@end table - -If a warning is detected while reading a @code{.stabd}, @code{.stabn}, -or @code{.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! - -@table @code -@cindex @code{stabd} directive -@item .stabd @var{type} , @var{other} , @var{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 @code{.stabd} was -assembled. - -@cindex @code{stabn} directive -@item .stabn @var{type} , @var{other} , @var{desc} , @var{value} -The name of the symbol is set to the empty string @code{""}. - -@cindex @code{stabs} directive -@item .stabs @var{string} , @var{type} , @var{other} , @var{desc} , @var{value} -All five fields are specified. -@end table -@end ifset -@c end have-stabs - -@node String -@section @code{.string} "@var{str}" - -@cindex string, copying to object file -@cindex @code{string} directive - -Copy the characters in @var{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 @ref{Strings,,Strings}. - -@node Struct -@section @code{.struct @var{expression}} - -@cindex @code{struct} directive -Switch to the absolute section, and set the section offset to @var{expression}, -which must be an absolute expression. You might use this as follows: -@smallexample - .struct 0 -field1: - .struct field1 + 4 -field2: - .struct field2 + 4 -field3: -@end smallexample -This would define the symbol @code{field1} to have the value 0, the symbol -@code{field2} to have the value 4, and the symbol @code{field3} to have the -value 8. Assembly would be left in the absolute section, and you would need to -use a @code{.section} directive of some sort to change to some other section -before further assembly. - -@ifset ELF -@node Symver -@section @code{.symver} -@cindex @code{symver} directive -@cindex symbol versioning -@cindex versions of symbols -Use the @code{.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 @code{.symver} directive is used like this: -@smallexample -.symver @var{name}, @var{name2@@nodename} -@end smallexample -In this case, the symbol @var{name} must exist and be defined within the file -being assembled. The @code{.versym} directive effectively creates a symbol -alias with the name @var{name2@@nodename}, and in fact the main reason that we -just don't try and create a regular alias is that the @var{@@} character isn't -permitted in symbol names. The @var{name2} part of the name is the actual name -of the symbol by which it will be externally referenced. The name @var{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 @var{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 @var{nodename} should correspond to the -nodename of the symbol you are trying to override. -@end ifset - -@ifset COFF -@node Tag -@section @code{.tag @var{structname}} - -@cindex COFF structure debugging -@cindex structure debugging, COFF -@cindex @code{tag} directive -This directive is generated by compilers to include auxiliary debugging -information in the symbol table. It is only permitted inside -@code{.def}/@code{.endef} pairs. Tags are used to link structure -definitions in the symbol table with instances of those structures. -@ifset BOUT - -@samp{.tag} is only used when generating COFF format output; when -@code{@value{AS}} is generating @code{b.out}, it accepts this directive but -ignores it. -@end ifset -@end ifset - -@node Text -@section @code{.text @var{subsection}} - -@cindex @code{text} directive -Tells @code{@value{AS}} to assemble the following statements onto the end of -the text subsection numbered @var{subsection}, which is an absolute -expression. If @var{subsection} is omitted, subsection number zero -is used. - -@node Title -@section @code{.title "@var{heading}"} - -@cindex @code{title} directive -@cindex listing control: title line -Use @var{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. - -@ifset COFF -@node Type -@section @code{.type @var{int}} - -@cindex COFF symbol type -@cindex symbol type, COFF -@cindex @code{type} directive -This directive, permitted only within @code{.def}/@code{.endef} pairs, -records the integer @var{int} as the type attribute of a symbol table entry. -@ifset BOUT - -@samp{.type} is associated only with COFF format output; when -@code{@value{AS}} is configured for @code{b.out} output, it accepts this -directive but ignores it. -@end ifset -@end ifset - -@ifset COFF -@node Val -@section @code{.val @var{addr}} - -@cindex @code{val} directive -@cindex COFF value attribute -@cindex value attribute, COFF -This directive, permitted only within @code{.def}/@code{.endef} pairs, -records the address @var{addr} as the value attribute of a symbol table -entry. -@ifset BOUT - -@samp{.val} is used only for COFF output; when @code{@value{AS}} is -configured for @code{b.out}, it accepts this directive but ignores it. -@end ifset -@end ifset - -@node Uleb128 -@section @code{.uleb128 @var{expressions}} - -@cindex @code{uleb128} directive -@var{uleb128} stands for ``unsigned little endian base 128.'' This is a -compact, variable length representation of numbers used by the DWARF -symbolic debugging format. @xref{Sleb128,@code{.sleb128}}. - -@ifset ELF -@node Visibility -@section @code{.internal}, @code{.hidden}, @code{.protected} -@cindex @code{internal} directive -@cindex @code{hidden} directive -@cindex @code{protected} directive -@cindex symbol visibility - -These directives can be used to set the visibility of a specified symbol. By -default a symbol's visibility is set by its binding (local, global or weak), -but these directives can be used to override that. - -A visibility of @code{protected} means that any references to the symbol from -within the component that defines the symbol must be resolved to the definition -in that component, even if a definition in another component would normally -preempt this. - -A visibility of @code{hidden} means that the symbol is not visible to other -components. Such a symbol is always considered to be protected as well. - -A visibility of @code{internal} is the same as a visibility of @code{hidden}, -except that some extra, processor specific processing must also be performed -upon the symbol. - -For ELF targets, the directives are used like this: - -@smallexample -.internal @var{name} -.hidden @var{name} -.protected @var{name} -@end smallexample - -@end ifset - -@node Word -@section @code{.word @var{expressions}} - -@cindex @code{word} directive -This directive expects zero or more @var{expressions}, of any section, -separated by commas. -@ifclear GENERIC -@ifset W32 -For each expression, @code{@value{AS}} emits a 32-bit number. -@end ifset -@ifset W16 -For each expression, @code{@value{AS}} emits a 16-bit number. -@end ifset -@end ifclear -@ifset GENERIC - -The size of the number emitted, and its byte order, -depend on what target computer the assembly is for. -@end ifset - -@c on amd29k, i960, sparc the "special treatment to support compilers" doesn't -@c happen---32-bit addressability, period; no long/short jumps. -@ifset DIFF-TBL-KLUGE -@cindex difference tables altered -@cindex altered difference tables -@quotation -@emph{Warning: Special Treatment to support Compilers} -@end quotation - -@ifset GENERIC -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; -@pxref{Machine Dependencies}), you can ignore this issue. - -@end ifset -In order to assemble compiler output into something that works, -@code{@value{AS}} occasionlly does strange things to @samp{.word} directives. -Directives of the form @samp{.word sym1-sym2} are often emitted by -compilers as part of jump tables. Therefore, when @code{@value{AS}} assembles a -directive of the form @samp{.word sym1-sym2}, and the difference between -@code{sym1} and @code{sym2} does not fit in 16 bits, @code{@value{AS}} -creates a @dfn{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 @code{sym2}. The original @samp{.word} -contains @code{sym1} minus the address of the long-jump to -@code{sym2}. - -If there were several occurrences of @samp{.word sym1-sym2} before the -secondary jump table, all of them are adjusted. If there was a -@samp{.word sym3-sym4}, that also did not fit in sixteen bits, a -long-jump to @code{sym4} is included in the secondary jump table, -and the @code{.word} directives are adjusted to contain @code{sym3} -minus the address of the long-jump to @code{sym4}; and so on, for as many -entries in the original jump table as necessary. - -@ifset INTERNALS -@emph{This feature may be disabled by compiling @code{@value{AS}} with the -@samp{-DWORKING_DOT_WORD} option.} This feature is likely to confuse -assembly language programmers. -@end ifset -@end ifset -@c end DIFF-TBL-KLUGE - -@node Deprecated -@section Deprecated Directives - -@cindex deprecated directives -@cindex obsolescent directives -One day these directives won't work. -They are included for compatibility with older assemblers. -@table @t -@item .abort -@item .line -@end table - -@ifset GENERIC -@node Machine Dependencies -@chapter Machine Dependent Features - -@cindex machine dependencies -The machine instruction sets are (almost by definition) different on -each machine where @code{@value{AS}} runs. Floating point representations -vary as well, and @code{@value{AS}} often supports a few additional -directives or command-line options for compatibility with other -assemblers on a particular platform. Finally, some versions of -@code{@value{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 -@ifset A29K -* AMD29K-Dependent:: AMD 29K Dependent Features -@end ifset -@ifset ARC -* ARC-Dependent:: ARC Dependent Features -@end ifset -@ifset ARM -* ARM-Dependent:: ARM Dependent Features -@end ifset -@ifset D10V -* D10V-Dependent:: D10V Dependent Features -@end ifset -@ifset D30V -* D30V-Dependent:: D30V Dependent Features -@end ifset -@ifset H8/300 -* H8/300-Dependent:: Hitachi H8/300 Dependent Features -@end ifset -@ifset H8/500 -* H8/500-Dependent:: Hitachi H8/500 Dependent Features -@end ifset -@ifset HPPA -* HPPA-Dependent:: HPPA Dependent Features -@end ifset -@ifset I80386 -* i386-Dependent:: Intel 80386 Dependent Features -@end ifset -@ifset I960 -* i960-Dependent:: Intel 80960 Dependent Features -@end ifset -@ifset M680X0 -* M68K-Dependent:: M680x0 Dependent Features -@end ifset -@ifset MIPS -* MIPS-Dependent:: MIPS Dependent Features -@end ifset -@ifset SH -* SH-Dependent:: Hitachi SH Dependent Features -@end ifset -@ifset PJ -* PJ-Dependent:: picoJava Dependent Features -@end ifset -@ifset SPARC -* Sparc-Dependent:: SPARC Dependent Features -@end ifset -@ifset V850 -* V850-Dependent:: V850 Dependent Features -@end ifset -@ifset Z8000 -* Z8000-Dependent:: Z8000 Dependent Features -@end ifset -@ifset VAX -* Vax-Dependent:: VAX Dependent Features -@end ifset -@end menu - -@lowersections -@end ifset - -@c The following major nodes are *sections* in the GENERIC version, *chapters* -@c in single-cpu versions. This is mainly achieved by @lowersections. There is a -@c peculiarity: to preserve cross-references, there must be a node called -@c "Machine Dependencies". Hence the conditional nodenames in each -@c major node below. Node defaulting in makeinfo requires adjacency of -@c node and sectioning commands; hence the repetition of @chapter BLAH -@c in both conditional blocks. - -@ifset ARC -@ifset GENERIC -@page -@node ARC-Dependent -@chapter ARC Dependent Features -@end ifset -@ifclear GENERIC -@node Machine Dependencies -@chapter ARC Dependent Features -@end ifclear - -@cindex ARC support -@menu -* ARC-Opts:: Options -* ARC-Float:: Floating Point -* ARC-Directives:: Sparc Machine Directives -@end menu - -@node ARC-Opts -@section Options - -@cindex options for ARC -@cindex ARC options -@cindex architectures, ARC -@cindex ARC architectures -The ARC chip family includes several successive levels (or other -variants) of chip, using the same core instruction set, but including -a few additional instructions at each level. - -By default, @code{@value{AS}} assumes the core instruction set (ARC -base). The @code{.cpu} pseudo-op is intended to be used to select -the variant. - -@table @code -@cindex @code{-mbig-endian} option (ARC) -@cindex @code{-mlittle-endian} option (ARC) -@cindex ARC big-endian output -@cindex ARC little-endian output -@cindex big-endian output, ARC -@cindex little-endian output, ARC -@item -mbig-endian -@itemx -mlittle-endian -Any @sc{arc} configuration of @code{@value{AS}} can select big-endian or -little-endian output at run time (unlike most other @sc{gnu} development -tools, which must be configured for one or the other). Use -@samp{-mbig-endian} to select big-endian output, and @samp{-mlittle-endian} -for little-endian. -@end table - -@node ARC-Float -@section Floating Point - -@cindex floating point, ARC (@sc{ieee}) -@cindex ARC floating point (@sc{ieee}) -The ARC cpu family currently does not have hardware floating point -support. Software floating point support is provided by @code{GCC} -and uses @sc{ieee} floating-point numbers. - -@node ARC-Directives -@section ARC Machine Directives - -@cindex ARC machine directives -@cindex machine directives, ARC -The ARC version of @code{@value{AS}} supports the following additional -machine directives: - -@table @code -@item .cpu -@cindex @code{cpu} directive, SPARC -This must be followed by the desired cpu. -The ARC is intended to be customizable, @code{.cpu} is used to -select the desired variant [though currently there are none]. - -@end table - -@end ifset - -@ifset A29K -@include c-a29k.texi -@end ifset - -@ifset ARM -@include c-arm.texi -@end ifset - -@ifset Hitachi-all -@ifclear GENERIC -@node Machine Dependencies -@chapter Machine Dependent Features - -The machine instruction sets are different on each Hitachi chip family, -and there are also some syntax differences among the families. This -chapter describes the specific @code{@value{AS}} features for each -family. - -@menu -* H8/300-Dependent:: Hitachi H8/300 Dependent Features -* H8/500-Dependent:: Hitachi H8/500 Dependent Features -* SH-Dependent:: Hitachi SH Dependent Features -@end menu -@lowersections -@end ifclear -@end ifset - -@ifset D10V -@include c-d10v.texi -@end ifset - -@ifset D30V -@include c-d30v.texi -@end ifset - -@ifset H8/300 -@include c-h8300.texi -@end ifset - -@ifset H8/500 -@include c-h8500.texi -@end ifset - -@ifset HPPA -@include c-hppa.texi -@end ifset - -@ifset I80386 -@include c-i386.texi -@end ifset - -@ifset I960 -@include c-i960.texi -@end ifset - - -@ifset M680X0 -@include c-m68k.texi -@end ifset - -@ifset MIPS -@include c-mips.texi -@end ifset - -@ifset NS32K -@include c-ns32k.texi -@end ifset - -@ifset PJ -@include c-pj.texi -@end ifset - -@ifset SH -@include c-sh.texi -@end ifset - -@ifset SPARC -@include c-sparc.texi -@end ifset - -@ifset Z8000 -@include c-z8k.texi -@end ifset - -@ifset VAX -@include c-vax.texi -@end ifset - -@ifset V850 -@include c-v850.texi -@end ifset - -@ifset GENERIC -@c reverse effect of @down at top of generic Machine-Dep chapter -@raisesections -@end ifset - -@node Reporting Bugs -@chapter Reporting Bugs -@cindex bugs in assembler -@cindex reporting bugs in assembler - -Your bug reports play an essential role in making @code{@value{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 @code{@value{AS}} work better. -Bug reports are your contribution to the maintenance of @code{@value{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 -@end menu - -@node Bug Criteria -@section Have you found a bug? -@cindex bug criteria - -If you are not sure whether you have found a bug, here are some guidelines: - -@itemize @bullet -@cindex fatal signal -@cindex assembler crash -@cindex crash of assembler -@item -If the assembler gets a fatal signal, for any input whatever, that is a -@code{@value{AS}} bug. Reliable assemblers never crash. - -@cindex error on valid input -@item -If @code{@value{AS}} produces an error message for valid input, that is a bug. - -@cindex invalid input -@item -If @code{@value{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''. - -@item -If you are an experienced user of assemblers, your suggestions for improvement -of @code{@value{AS}} are welcome in any case. -@end itemize - -@node Bug Reporting -@section How to report bugs -@cindex bug reports -@cindex assembler bugs, reporting - -A number of companies and individuals offer support for @sc{gnu} products. If -you obtained @code{@value{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 @file{etc/SERVICE} in the @sc{gnu} Emacs -distribution. - -In any event, we also recommend that you send bug reports for @code{@value{AS}} -to @samp{bug-gnu-utils@@gnu.org}. - -The fundamental principle of reporting bugs usefully is this: -@strong{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?'' Those bug reports are useless, and we urge everyone to -@emph{refuse to respond to them} except to chide the sender to report -bugs properly. - -To enable us to fix the bug, you should include all these things: - -@itemize @bullet -@item -The version of @code{@value{AS}}. @code{@value{AS}} announces it if you start -it with the @samp{--version} argument. - -Without this, we will not know whether there is any point in looking for -the bug in the current version of @code{@value{AS}}. - -@item -Any patches you may have applied to the @code{@value{AS}} source. - -@item -The type of machine you are using, and the operating system name and -version number. - -@item -What compiler (and its version) was used to compile @code{@value{AS}}---e.g. -``@code{gcc-2.7}''. - -@item -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. - -@item -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 @samp{-S} option. If you are using @code{@value{GCC}}, use -the options @samp{-v --save-temps}; this will save the assembler source in a -file with an extension of @file{.s}, and also show you exactly how -@code{@value{AS}} is being run. - -@item -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 @code{@value{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 -@code{@value{AS}} is out of synch, 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. - -@item -If you wish to suggest changes to the @code{@value{AS}} source, send us context -diffs, as generated by @code{diff} with the @samp{-u}, @samp{-c}, or @samp{-p} -option. Always send diffs from the old file to the new file. If you even -discuss something in the @code{@value{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. -@end itemize - -Here are some things that are not necessary: - -@itemize @bullet -@item -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 @emph{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. - -@item -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 @code{@value{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. - -@item -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. -@end itemize - -@node Acknowledgements -@chapter Acknowledgements - -If you have contributed to @code{@value{AS}} 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 -@c (January 1994), -the maintainer is Ken Raeburn (email address @code{raeburn@@cygnus.com}). - -Dean Elsner wrote the original @sc{gnu} assembler for the VAX.@footnote{Any -more details?} - -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 @file{messages.c}, @file{input-file.c}, @file{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 -(@file{tc-mips.c}, @file{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 Hitachi H8/300 and H8/500 processors (tc-z8k, -tc-h8300, tc-h8500), 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 @code{.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. @code{jsr}), while synthetic instructions -remained shrinkable (@code{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 @code{@value{AS}} 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). - -Richard Henderson rewrote the Alpha assembler. Klaus Kaempf wrote GAS and BFD -support for openVMS/Alpha. - -Several engineers at Cygnus Support have also provided many small bug fixes and -configuration enhancements. - -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. - -@node Index -@unnumbered Index - -@printindex cp - -@contents -@bye -@c Local Variables: -@c fill-column: 79 -@c End: diff --git a/gas/doc/c-a29k.texi b/gas/doc/c-a29k.texi deleted file mode 100644 index 4d115d807f6..00000000000 --- a/gas/doc/c-a29k.texi +++ /dev/null @@ -1,182 +0,0 @@ -@c Copyright (C) 1991, 1992, 1993, 1994, 1995 Free Software Foundation, Inc. -@c This is part of the GAS manual. -@c For copying conditions, see the file as.texinfo. -@ifset GENERIC -@page -@node AMD29K-Dependent -@chapter AMD 29K Dependent Features -@end ifset -@ifclear GENERIC -@node Machine Dependencies -@chapter AMD 29K Dependent Features -@end ifclear - -@cindex AMD 29K support -@cindex 29K support -@menu -* AMD29K Options:: Options -* AMD29K Syntax:: Syntax -* AMD29K Floating Point:: Floating Point -* AMD29K Directives:: AMD 29K Machine Directives -* AMD29K Opcodes:: Opcodes -@end menu - -@node AMD29K Options -@section Options -@cindex AMD 29K options (none) -@cindex options for AMD29K (none) -@code{@value{AS}} has no additional command-line options for the AMD -29K family. - -@node AMD29K Syntax -@section Syntax -@menu -* AMD29K-Macros:: Macros -* AMD29K-Chars:: Special Characters -* AMD29K-Regs:: Register Names -@end menu - -@node AMD29K-Macros -@subsection Macros - -@cindex Macros, AMD 29K -@cindex AMD 29K macros -The macro syntax used on the AMD 29K is like that described in the AMD -29K Family Macro Assembler Specification. Normal @code{@value{AS}} -macros should still work. - -@node AMD29K-Chars -@subsection Special Characters - -@cindex line comment character, AMD 29K -@cindex AMD 29K line comment character -@samp{;} is the line comment character. - -@cindex identifiers, AMD 29K -@cindex AMD 29K identifiers -The character @samp{?} is permitted in identifiers (but may not begin -an identifier). - -@node AMD29K-Regs -@subsection Register Names - -@cindex AMD 29K register names -@cindex register names, AMD 29K -General-purpose registers are represented by predefined symbols of the -form @samp{GR@var{nnn}} (for global registers) or @samp{LR@var{nnn}} -(for local registers), where @var{nnn} represents a number between -@code{0} and @code{127}, written with no leading zeros. The leading -letters may be in either upper or lower case; for example, @samp{gr13} -and @samp{LR7} are both valid register names. - -You may also refer to general-purpose registers by specifying the -register number as the result of an expression (prefixed with @samp{%%} -to flag the expression as a register number): -@smallexample -%%@var{expression} -@end smallexample -@noindent ----where @var{expression} must be an absolute expression evaluating to a -number between @code{0} and @code{255}. The range [0, 127] refers to -global registers, and the range [128, 255] to local registers. - -@cindex special purpose registers, AMD 29K -@cindex AMD 29K special purpose registers -@cindex protected registers, AMD 29K -@cindex AMD 29K protected registers -In addition, @code{@value{AS}} understands the following protected -special-purpose register names for the AMD 29K family: - -@smallexample - vab chd pc0 - ops chc pc1 - cps rbp pc2 - cfg tmc mmu - cha tmr lru -@end smallexample - -These unprotected special-purpose register names are also recognized: -@smallexample - ipc alu fpe - ipa bp inte - ipb fc fps - q cr exop -@end smallexample - -@node AMD29K Floating Point -@section Floating Point - -@cindex floating point, AMD 29K (@sc{ieee}) -@cindex AMD 29K floating point (@sc{ieee}) -The AMD 29K family uses @sc{ieee} floating-point numbers. - -@node AMD29K Directives -@section AMD 29K Machine Directives - -@cindex machine directives, AMD 29K -@cindex AMD 29K machine directives -@table @code -@cindex @code{block} directive, AMD 29K -@item .block @var{size} , @var{fill} -This directive emits @var{size} bytes, each of value @var{fill}. Both -@var{size} and @var{fill} are absolute expressions. If the comma -and @var{fill} are omitted, @var{fill} is assumed to be zero. - -In other versions of the @sc{gnu} assembler, this directive is called -@samp{.space}. -@end table - -@table @code -@cindex @code{cputype} directive, AMD 29K -@item .cputype -This directive is ignored; it is accepted for compatibility with other -AMD 29K assemblers. - -@cindex @code{file} directive, AMD 29K -@item .file -This directive is ignored; it is accepted for compatibility with other -AMD 29K assemblers. - -@quotation -@emph{Warning:} in other versions of the @sc{gnu} assembler, @code{.file} is -used for the directive called @code{.app-file} in the AMD 29K support. -@end quotation - -@cindex @code{line} directive, AMD 29K -@item .line -This directive is ignored; it is accepted for compatibility with other -AMD 29K assemblers. - -@ignore -@c since we're ignoring .lsym... -@cindex @code{reg} directive, AMD 29K -@item .reg @var{symbol}, @var{expression} -@code{.reg} has the same effect as @code{.lsym}; @pxref{Lsym,,@code{.lsym}}. -@end ignore - -@cindex @code{sect} directive, AMD 29K -@item .sect -This directive is ignored; it is accepted for compatibility with other -AMD 29K assemblers. - -@cindex @code{use} directive, AMD 29K -@item .use @var{section name} -Establishes the section and subsection for the following code; -@var{section name} may be one of @code{.text}, @code{.data}, -@code{.data1}, or @code{.lit}. With one of the first three @var{section -name} options, @samp{.use} is equivalent to the machine directive -@var{section name}; the remaining case, @samp{.use .lit}, is the same as -@samp{.data 200}. -@end table - -@node AMD29K Opcodes -@section Opcodes - -@cindex AMD 29K opcodes -@cindex opcodes for AMD 29K -@code{@value{AS}} implements all the standard AMD 29K opcodes. No -additional pseudo-instructions are needed on this family. - -For information on the 29K machine instruction set, see @cite{Am29000 -User's Manual}, Advanced Micro Devices, Inc. - diff --git a/gas/doc/c-arm.texi b/gas/doc/c-arm.texi deleted file mode 100644 index ff98d7f572c..00000000000 --- a/gas/doc/c-arm.texi +++ /dev/null @@ -1,267 +0,0 @@ -@c Copyright (C) 1996, 1998, 1999 Free Software Foundation, Inc. -@c This is part of the GAS manual. -@c For copying conditions, see the file as.texinfo. - -@ifset GENERIC -@page -@node ARM-Dependent -@chapter ARM Dependent Features -@end ifset - -@ifclear GENERIC -@node Machine Dependencies -@chapter ARM Dependent Features -@end ifclear - -@cindex ARM support -@cindex Thumb support -@menu -* ARM Options:: Options -* ARM Syntax:: Syntax -* ARM Floating Point:: Floating Point -* ARM Directives:: ARM Machine Directives -* ARM Opcodes:: Opcodes -@end menu - -@node ARM Options -@section Options -@cindex ARM options (none) -@cindex options for ARM (none) -@table @code -@cindex @code{-marm} command line option, ARM -@item -marm [@var{2}|@var{250}|@var{3}|@var{6}|@var{60}|@var{600}|@var{610}|@var{620}|@var{7}|@var{7m}|@var{7d}|@var{7dm}|@var{7di}|@var{7dmi}|@var{70}|@var{700}|@var{700i}|@var{710}|@var{710c}|@var{7100}|@var{7500}|@var{7500fe}|@var{7tdmi}|@var{8}|@var{810}|@var{9}|@var{9tdmi}|@var{920}|@var{strongarm}|@var{strongarm110}|@var{strongarm1100}] -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. -@cindex @code{-marmv} command line option, ARM -@item -marmv [@var{2}|@var{2a}|@var{3}|@var{3m}|@var{4}|@var{4t}|@var{5}|@var{5t}] -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. -@cindex @code{-mthumb} command line option, ARM -@item -mthumb -This option specifies that only Thumb instructions should be assembled. -@cindex @code{-mall} command line option, ARM -@item -mall -This option specifies that any Arm or Thumb instruction should be assembled. -@cindex @code{-mfpa} command line option, ARM -@item -mfpa [@var{10}|@var{11}] -This option specifies the floating point architecture in use on the -target processor. -@cindex @code{-mfpe-old} command line option, ARM -@item -mfpe-old -Do not allow the assemble of floating point multiple instructions. -@cindex @code{-mno-fpu} command line option, ARM -@item -mno-fpu -Do not allow the assembly of any floating point instructions. -@cindex @code{-mthumb-interwork} command line option, ARM -@item -mthumb-interwork -This option specifies that the output generated by the assembler should -be marked as supporting interworking. -@cindex @code{-mapcs} command line option, ARM -@item -mapcs [@var{26}|@var{32}] -This option specifies that the output generated by the assembler should -be marked as supporting the indicated version of the Arm Procedure. -Calling Standard. -@item -mapcs-float -This indicates the 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. -@item -mapcs-reentrant -This indicates that the reentrant variant of the APCS should be used. -This variant supports position independent code. -@cindex @code{-EB} command line option, ARM -@item -EB -This option specifies that the output generated by the assembler should -be marked as being encoded for a big-endian processor. -@cindex @code{-EL} command line option, ARM -@item -EL -This option specifies that the output generated by the assembler should -be marked as being encoded for a little-endian processor. -@cindex @code{-k} command line option, ARM -@cindex PIC code generation for ARM -@item -k -This option enables the generation of PIC (position independent code). -@item -moabi -This indicates that the code should be assembled using the old ARM ELF -conventions, based on a beta release release of the ARM-ELF -specifications, rather than the default conventions which are based on -the final release of the ARM-ELF specifications. -@end table - - -@node ARM Syntax -@section Syntax -@menu -* ARM-Chars:: Special Characters -* ARM-Regs:: Register Names -@end menu - -@node ARM-Chars -@subsection Special Characters - -@cindex line comment character, ARM -@cindex ARM line comment character -The presence of a @samp{@@} on a line indicates the start of a comment -that extends to the end of the current line. If a @samp{#} appears as -the first character of a line, the whole line is treated as a comment. - -@cindex line separator, ARM -@cindex statement separator, ARM -@cindex ARM line separator -On ARM systems running the GNU/Linux operating system, @samp{;} can be -used instead of a newline to separate statements. - -@cindex immediate character, ARM -@cindex ARM immediate character -Either @samp{#} or @samp{$} can be used to indicate immediate operands. - -@cindex identifiers, ARM -@cindex ARM identifiers -*TODO* Explain about /data modifier on symbols. - -@node ARM-Regs -@subsection Register Names - -@cindex ARM register names -@cindex register names, ARM -*TODO* Explain about ARM register naming, and the predefined names. - -@node ARM Floating Point -@section Floating Point - -@cindex floating point, ARM (@sc{ieee}) -@cindex ARM floating point (@sc{ieee}) -The ARM family uses @sc{ieee} floating-point numbers. - - - -@node ARM Directives -@section ARM Machine Directives - -@cindex machine directives, ARM -@cindex ARM machine directives -@table @code - -@cindex @code{req} directive, ARM -@item @var{name} .req @var{register name} -This creates an alias for @var{register name} called @var{name}. For -example: - -@smallexample - foo .req r0 -@end smallexample - -@cindex @code{code} directive, ARM -@item .code [@var{16}|@var{32}] -This directive selects the instruction set being generated. The value 16 -selects Thumb, with the value 32 selecting ARM. - -@cindex @code{thumb} directive, ARM -@item .thumb -This performs the same action as @var{.code 16}. - -@cindex @code{arm} directive, ARM -@item .arm -This performs the same action as @var{.code 32}. - -@cindex @code{force_thumb} directive, ARM -@item .force_thumb -This directive forces the selection of Thumb instructions, even if the -target processor does not support those instructions - -@cindex @code{thumb_func} directive, ARM -@item .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. - -@cindex @code{thumb_set} directive, ARM -@item .thumb_set -This performs the equivalent of a @code{.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 @code{.thumb_func} directive does. - -@cindex @code{.ltorg} directive, ARM -@item .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). - -@cindex @code{.pool} directive, ARM -@item .pool -This is a synonym for .ltorg. - -@end table - -@node ARM Opcodes -@section Opcodes - -@cindex ARM opcodes -@cindex opcodes for ARM -@code{@value{AS}} implements all the standard ARM opcodes. It also -implements several pseudo opcodes, including several synthetic load -instructions. - -@table @code - -@cindex @code{NOP} pseudo op, ARM -@item NOP -@smallexample - nop -@end smallexample - -This pseudo op will always evaluate to a legal ARM instruction that does -nothing. Currently it will evaluate to MOV r0, r0. - -@cindex @code{LDR reg,=<label>} pseudo op, ARM -@item LDR -@smallexample - ldr <register> , = <expression> -@end smallexample - -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. - -@cindex @code{ADR reg,<label>} pseudo op, ARM -@item ADR -@smallexample - adr <register> <label> -@end smallexample - -This instruction will load the address of @var{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. - -@cindex @code{ADRL reg,<label>} pseudo op, ARM -@item ADRL -@smallexample - adrl <register> <label> -@end smallexample - -This instruction will load the address of @var{label} into the indicated -register. The instruction will evaluate to one or two a 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. - -@end table - -For information on the ARM or Thumb instruction sets, see @cite{ARM -Software Development Toolkit Reference Manual}, Advanced RISC Machines -Ltd. - diff --git a/gas/doc/c-d10v.texi b/gas/doc/c-d10v.texi deleted file mode 100644 index 8d7bf88c99d..00000000000 --- a/gas/doc/c-d10v.texi +++ /dev/null @@ -1,250 +0,0 @@ -@c Copyright (C) 1996 Free Software Foundation, Inc. -@c This is part of the GAS manual. -@c For copying conditions, see the file as.texinfo. -@ifset GENERIC -@page -@node D10V-Dependent -@chapter D10V Dependent Features -@end ifset -@ifclear GENERIC -@node Machine Dependencies -@chapter D10V Dependent Features -@end ifclear - -@cindex D10V support -@menu -* D10V-Opts:: D10V Options -* D10V-Syntax:: Syntax -* D10V-Float:: Floating Point -* D10V-Opcodes:: Opcodes -@end menu - -@node D10V-Opts -@section D10V Options -@cindex options, D10V -@cindex D10V options -The Mitsubishi D10V version of @code{@value{AS}} has a few machine -dependent options. - -@table @samp -@item -O -The D10V can often execute two sub-instructions in parallel. When this option -is used, @code{@value{AS}} will attempt to optimize its output by detecting when -instructions can be executed in parallel. -@item --nowarnswap -To optimize execution performance, @code{@value{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. -@end table - -@node D10V-Syntax -@section Syntax -@cindex D10V syntax -@cindex syntax, D10V - -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 -@end menu - - -@node D10V-Size -@subsection Size Modifiers -@cindex D10V size modifiers -@cindex size modifiers, D10V -The D10V version of @code{@value{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? @code{@value{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 @samp{.s} (short) or @samp{.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 @samp{bra.s foo}. -Objdump and GDB will always append @samp{.s} or @samp{.l} to instructions which -have both short and long forms. - -@node D10V-Subs -@subsection Sub-Instructions -@cindex D10V sub-instructions -@cindex sub-instructions, D10V -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. - -@node D10V-Chars -@subsection Special Characters -@cindex line comment character, D10V -@cindex D10V line comment character -@samp{;} and @samp{#} are the line comment characters. -@cindex sub-instruction ordering, D10V -@cindex D10V sub-instruction ordering -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: -@table @samp -@item -> -Sequential with instruction on the left first. -@item <- -Sequential with instruction on the right first. -@item || -Parallel -@end table -The D10V syntax allows either one instruction per line, one instruction per line with -the execution symbol, or two instructions per line. For example -@table @code -@item abs a1 -> abs r0 -Execute these sequentially. The instruction on the right is in the right -container and is executed second. -@item abs r0 <- abs a1 -Execute these reverse-sequentially. The instruction on the right is in the right -container, and is executed first. -@item ld2w r2,@@r8+ || mac a0,r0,r7 -Execute these in parallel. -@item ld2w r2,@@r8+ || -@itemx mac a0,r0,r7 -Two-line format. Execute these in parallel. -@item ld2w r2,@@r8+ -@itemx mac a0,r0,r7 -Two-line format. Execute these sequentially. Assembler will -put them in the proper containers. -@item ld2w r2,@@r8+ -> -@itemx mac a0,r0,r7 -Two-line format. Execute these sequentially. Same as above but -second instruction will always go into right container. -@end table -@cindex symbol names, @samp{$} in -@cindex @code{$} in symbol names -Since @samp{$} has no special meaning, you may use it in symbol names. - -@node D10V-Regs -@subsection Register Names -@cindex D10V registers -@cindex registers, D10V -You can use the predefined symbols @samp{r0} through @samp{r15} to refer to the D10V -registers. You can also use @samp{sp} as an alias for @samp{r15}. The accumulators -are @samp{a0} and @samp{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 -@table @code -@item r0-r1 -@item r2-r3 -@item r4-r5 -@item r6-r7 -@item r8-r9 -@item r10-r11 -@item r12-r13 -@item r14-r15 -@end table - -The D10V also has predefined symbols for these control registers and status bits: -@table @code -@item psw -Processor Status Word -@item bpsw -Backup Processor Status Word -@item pc -Program Counter -@item bpc -Backup Program Counter -@item rpt_c -Repeat Count -@item rpt_s -Repeat Start address -@item rpt_e -Repeat End address -@item mod_s -Modulo Start address -@item mod_e -Modulo End address -@item iba -Instruction Break Address -@item f0 -Flag 0 -@item f1 -Flag 1 -@item c -Carry flag -@end table - -@node D10V-Addressing -@subsection Addressing Modes -@cindex addressing modes, D10V -@cindex D10V addressing modes -@code{@value{AS}} understands the following addressing modes for the D10V. -@code{R@var{n}} in the following refers to any of the numbered -registers, but @emph{not} the control registers. -@table @code -@item R@var{n} -Register direct -@item @@R@var{n} -Register indirect -@item @@R@var{n}+ -Register indirect with post-increment -@item @@R@var{n}- -Register indirect with post-decrement -@item @@-SP -Register indirect with pre-decrement -@item @@(@var{disp}, R@var{n}) -Register indirect with displacement -@item @var{addr} -PC relative address (for branch or rep). -@item #@var{imm} -Immediate data (the @samp{#} is optional and ignored) -@end table - -@node D10V-Word -@subsection @@WORD Modifier -@cindex D10V @@word modifier -@cindex @@word modifier, D10V -Any symbol followed by @code{@@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 @code{main} then -jump to that function, you could do it as follws: -@smallexample -@group -ldi r2, main@@word -jmp r2 -@end group -@end smallexample - -@node D10V-Float -@section Floating Point -@cindex floating point, D10V -@cindex D10V floating point -The D10V has no hardware floating point, but the @code{.float} and @code{.double} -directives generates @sc{ieee} floating-point numbers for compatibility -with other development tools. - -@node D10V-Opcodes -@section Opcodes -@cindex D10V opcode summary -@cindex opcode summary, D10V -@cindex mnemonics, D10V -@cindex instruction summary, D10V -For detailed information on the D10V machine instruction set, see -@cite{D10V Architecture: A VLIW Microprocessor for Multimedia Applications} -(Mitsubishi Electric Corp.). -@code{@value{AS}} implements all the standard D10V opcodes. The only changes are those -described in the section on size modifiers - diff --git a/gas/doc/c-d30v.texi b/gas/doc/c-d30v.texi deleted file mode 100644 index 731b3441e0f..00000000000 --- a/gas/doc/c-d30v.texi +++ /dev/null @@ -1,292 +0,0 @@ -@c Copyright (C) 1997 Free Software Foundation, Inc. -@c This is part of the GAS manual. -@c For copying conditions, see the file as.texinfo. -@ifset GENERIC -@page -@node D30V-Dependent -@chapter D30V Dependent Features -@end ifset -@ifclear GENERIC -@node Machine Dependencies -@chapter D30V Dependent Features -@end ifclear - -@cindex D30V support -@menu -* D30V-Opts:: D30V Options -* D30V-Syntax:: Syntax -* D30V-Float:: Floating Point -* D30V-Opcodes:: Opcodes -@end menu - -@node D30V-Opts -@section D30V Options -@cindex options, D30V -@cindex D30V options -The Mitsubishi D30V version of @code{@value{AS}} has a few machine -dependent options. - -@table @samp -@item -O -The D30V can often execute two sub-instructions in parallel. When this option -is used, @code{@value{AS}} will attempt to optimize its output by detecting when -instructions can be executed in parallel. - -@item -n -When this option is used, @code{@value{AS}} will issue a warning every -time it adds a nop instruction. - -@item -N -When this option is used, @code{@value{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. -@end table - -@node D30V-Syntax -@section Syntax -@cindex D30V syntax -@cindex syntax, D30V - -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 -@end menu - - -@node D30V-Size -@subsection Size Modifiers -@cindex D30V size modifiers -@cindex size modifiers, D30V -The D30V version of @code{@value{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? @code{@value{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 @samp{.s} (short) or @samp{.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 @samp{bra.s foo}. -Objdump and GDB will always append @samp{.s} or @samp{.l} to instructions which -have both short and long forms. - -@node D30V-Subs -@subsection Sub-Instructions -@cindex D30V sub-instructions -@cindex sub-instructions, D30V -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. - -@node D30V-Chars -@subsection Special Characters -@cindex line comment character, D30V -@cindex D30V line comment character -@samp{;} and @samp{#} are the line comment characters. -@cindex sub-instruction ordering, D30V -@cindex D30V sub-instruction ordering -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 @samp{-O} option. - -To specify the executing order, use the following symbols: -@table @samp -@item -> -Sequential with instruction on the left first. - -@item <- -Sequential with instruction on the right first. - -@item || -Parallel -@end table - -The D30V syntax allows either one instruction per line, one instruction per line with -the execution symbol, or two instructions per line. For example -@table @code -@item abs r2,r3 -> abs r4,r5 -Execute these sequentially. The instruction on the right is in the right -container and is executed second. - -@item abs r2,r3 <- abs r4,r5 -Execute these reverse-sequentially. The instruction on the right is in the right -container, and is executed first. - -@item abs r2,r3 || abs r4,r5 -Execute these in parallel. - -@item ldw r2,@@(r3,r4) || -@itemx mulx r6,r8,r9 -Two-line format. Execute these in parallel. - -@item mulx a0,r8,r9 -@itemx stw r2,@@(r3,r4) -Two-line format. Execute these sequentially unless @samp{-O} option is -used. If the @samp{-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 @samp{stw} instruction in left -container and the @samp{mulx} instruction in the right container. - -@item stw r2,@@(r3,r4) -> -@itemx mulx a0,r8,r9 -Two-line format. Execute the @samp{stw} instruction followed by the -@samp{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. - -@item stw r2,@@(r3,r4) <- -@itemx mulx a0,r8,r9 -Same as previous example, except that the @samp{mulx} instruction is -executed before the @samp{stw} instruction. -@end table - -@cindex symbol names, @samp{$} in -@cindex @code{$} in symbol names -Since @samp{$} has no special meaning, you may use it in symbol names. - -@node D30V-Guarded -@subsection Guarded Execution -@cindex D30V Guarded Execution -@code{@value{AS}} supports the full range of guarded execution -directives for each instruction. Just append the directive after the -instruction proper. The directives are: - -@table @samp -@item /tx -Execute the instruction if flag f0 is true. -@item /fx -Execute the instruction if flag f0 is false. -@item /xt -Execute the instruction if flag f1 is true. -@item /xf -Execute the instruction if flag f1 is false. -@item /tt -Execute the instruction if both flags f0 and f1 are true. -@item /tf -Execute the instruction if flag f0 is true and flag f1 is false. -@end table - -@node D30V-Regs -@subsection Register Names -@cindex D30V registers -@cindex registers, D30V -You can use the predefined symbols @samp{r0} through @samp{r63} to refer -to the D30V registers. You can also use @samp{sp} as an alias for -@samp{r63} and @samp{link} as an alias for @samp{r62}. The accumulators -are @samp{a0} and @samp{a1}. - -The D30V also has predefined symbols for these control registers and status bits: -@table @code -@item psw -Processor Status Word -@item bpsw -Backup Processor Status Word -@item pc -Program Counter -@item bpc -Backup Program Counter -@item rpt_c -Repeat Count -@item rpt_s -Repeat Start address -@item rpt_e -Repeat End address -@item mod_s -Modulo Start address -@item mod_e -Modulo End address -@item iba -Instruction Break Address -@item f0 -Flag 0 -@item f1 -Flag 1 -@item f2 -Flag 2 -@item f3 -Flag 3 -@item f4 -Flag 4 -@item f5 -Flag 5 -@item f6 -Flag 6 -@item f7 -Flag 7 -@item s -Same as flag 4 (saturation flag) -@item v -Same as flag 5 (overflow flag) -@item va -Same as flag 6 (sticky overflow flag) -@item c -Same as flag 7 (carry/borrow flag) -@item b -Same as flag 7 (carry/borrow flag) -@end table - -@node D30V-Addressing -@subsection Addressing Modes -@cindex addressing modes, D30V -@cindex D30V addressing modes -@code{@value{AS}} understands the following addressing modes for the D30V. -@code{R@var{n}} in the following refers to any of the numbered -registers, but @emph{not} the control registers. -@table @code -@item R@var{n} -Register direct -@item @@R@var{n} -Register indirect -@item @@R@var{n}+ -Register indirect with post-increment -@item @@R@var{n}- -Register indirect with post-decrement -@item @@-SP -Register indirect with pre-decrement -@item @@(@var{disp}, R@var{n}) -Register indirect with displacement -@item @var{addr} -PC relative address (for branch or rep). -@item #@var{imm} -Immediate data (the @samp{#} is optional and ignored) -@end table - -@node D30V-Float -@section Floating Point -@cindex floating point, D30V -@cindex D30V floating point -The D30V has no hardware floating point, but the @code{.float} and @code{.double} -directives generates @sc{ieee} floating-point numbers for compatibility -with other development tools. - -@node D30V-Opcodes -@section Opcodes -@cindex D30V opcode summary -@cindex opcode summary, D30V -@cindex mnemonics, D30V -@cindex instruction summary, D30V -For detailed information on the D30V machine instruction set, see -@cite{D30V Architecture: A VLIW Microprocessor for Multimedia Applications} -(Mitsubishi Electric Corp.). -@code{@value{AS}} implements all the standard D30V opcodes. The only changes are those -described in the section on size modifiers - diff --git a/gas/doc/c-h8300.texi b/gas/doc/c-h8300.texi deleted file mode 100644 index a270918f92a..00000000000 --- a/gas/doc/c-h8300.texi +++ /dev/null @@ -1,342 +0,0 @@ -@c Copyright (C) 1991, 1992, 1993, 1994, 1995 Free Software Foundation, Inc. -@c This is part of the GAS manual. -@c For copying conditions, see the file as.texinfo. -@ifset GENERIC -@page -@end ifset -@node H8/300-Dependent -@chapter H8/300 Dependent Features - -@cindex H8/300 support -@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 -@end menu - -@node H8/300 Options -@section Options - -@cindex H8/300 options (none) -@cindex options, H8/300 (none) -@code{@value{AS}} has no additional command-line options for the Hitachi -H8/300 family. - -@node H8/300 Syntax -@section Syntax -@menu -* H8/300-Chars:: Special Characters -* H8/300-Regs:: Register Names -* H8/300-Addressing:: Addressing Modes -@end menu - -@node H8/300-Chars -@subsection Special Characters - -@cindex line comment character, H8/300 -@cindex H8/300 line comment character -@samp{;} is the line comment character. - -@cindex line separator, H8/300 -@cindex statement separator, H8/300 -@cindex H8/300 line separator -@samp{$} can be used instead of a newline to separate statements. -Therefore @emph{you may not use @samp{$} in symbol names} on the H8/300. - -@node H8/300-Regs -@subsection Register Names - -@cindex H8/300 registers -@cindex register names, H8/300 -You can use predefined symbols of the form @samp{r@var{n}h} and -@samp{r@var{n}l} to refer to the H8/300 registers as sixteen 8-bit -general-purpose registers. @var{n} is a digit from @samp{0} to -@samp{7}); for instance, both @samp{r0h} and @samp{r7l} are valid -register names. - -You can also use the eight predefined symbols @samp{r@var{n}} 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 -@samp{er@var{n}} (@samp{er0} @dots{} @samp{er7}) to refer to the 32-bit -general purpose registers. - -The two control registers are called @code{pc} (program counter; a -16-bit register, except on the H8/300H where it is 24 bits) and -@code{ccr} (condition code register; an 8-bit register). @code{r7} is -used as the stack pointer, and can also be called @code{sp}. - -@node H8/300-Addressing -@subsection Addressing Modes - -@cindex addressing modes, H8/300 -@cindex H8/300 addressing modes -@value{AS} understands the following addressing modes for the H8/300: -@table @code -@item r@var{n} -Register direct - -@item @@r@var{n} -Register indirect - -@need 1200 -@item @@(@var{d}, r@var{n}) -@itemx @@(@var{d}:16, r@var{n}) -@itemx @@(@var{d}:24, r@var{n}) -Register indirect: 16-bit or 24-bit displacement @var{d} from register -@var{n}. (24-bit displacements are only meaningful on the H8/300H.) - -@item @@r@var{n}+ -Register indirect with post-increment - -@item @@-r@var{n} -Register indirect with pre-decrement - -@item @code{@@}@var{aa} -@itemx @code{@@}@var{aa}:8 -@itemx @code{@@}@var{aa}:16 -@itemx @code{@@}@var{aa}:24 -Absolute address @code{aa}. (The address size @samp{:24} only makes -sense on the H8/300H.) - -@item #@var{xx} -@itemx #@var{xx}:8 -@itemx #@var{xx}:16 -@itemx #@var{xx}:32 -Immediate data @var{xx}. You may specify the @samp{:8}, @samp{:16}, or -@samp{:32} for clarity, if you wish; but @code{@value{AS}} neither -requires this nor uses it---the data size required is taken from -context. - -@item @code{@@}@code{@@}@var{aa} -@itemx @code{@@}@code{@@}@var{aa}:8 -Memory indirect. You may specify the @samp{:8} for clarity, if you -wish; but @code{@value{AS}} neither requires this nor uses it. -@end table - -@node H8/300 Floating Point -@section Floating Point - -@cindex floating point, H8/300 (@sc{ieee}) -@cindex H8/300 floating point (@sc{ieee}) -The H8/300 family has no hardware floating point, but the @code{.float} -directive generates @sc{ieee} floating-point numbers for compatibility -with other development tools. - -@page -@node H8/300 Directives -@section H8/300 Machine Directives - -@cindex H8/300 machine directives (none) -@cindex machine directives, H8/300 (none) -@cindex @code{word} directive, H8/300 -@cindex @code{int} directive, H8/300 -@code{@value{AS}} has only one machine-dependent directive for the -H8/300: - -@table @code -@cindex H8/300H, assembling for -@item .h8300h -Recognize and emit additional instructions for the H8/300H variant, and -also make @code{.int} emit 32-bit numbers rather than the usual (16-bit) -for the H8/300 family. -@end table - -On the H8/300 family (including the H8/300H) @samp{.word} directives -generate 16-bit numbers. - -@node H8/300 Opcodes -@section Opcodes - -@cindex H8/300 opcode summary -@cindex opcode summary, H8/300 -@cindex mnemonics, H8/300 -@cindex instruction summary, H8/300 -For detailed information on the H8/300 machine instruction set, see -@cite{H8/300 Series Programming Manual} (Hitachi ADE--602--025). For -information specific to the H8/300H, see @cite{H8/300H Series -Programming Manual} (Hitachi). - -@code{@value{AS}} implements all the standard H8/300 opcodes. No additional -pseudo-instructions are needed on this family. - -@ifset SMALL -@c this table, due to the multi-col faking and hardcoded order, looks silly -@c except in smallbook. See comments below "@set SMALL" near top of this file. - -The following table summarizes the H8/300 opcodes, and their arguments. -Entries marked @samp{*} are opcodes used only on the H8/300H. - -@smallexample -@c Using @group seems to use the normal baselineskip, not the smallexample -@c baselineskip; looks approx doublespaced. - @i{Legend:} - Rs @r{source register} - Rd @r{destination register} - abs @r{absolute address} - imm @r{immediate data} - disp:N @r{N-bit displacement from a register} - pcrel:N @r{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 -@page -* 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 -@page -* 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 -@page -* 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 -@end smallexample -@end ifset - -@cindex size suffixes, H8/300 -@cindex H8/300 size suffixes -Four H8/300 instructions (@code{add}, @code{cmp}, @code{mov}, -@code{sub}) are defined with variants using the suffixes @samp{.b}, -@samp{.w}, and @samp{.l} to specify the size of a memory operand. -@code{@value{AS}} supports these suffixes, but does not require them; -since one of the operands is always a register, @code{@value{AS}} can -deduce the correct size. - -For example, since @code{r0} refers to a 16-bit register, -@example -mov r0,@@foo -@exdent is equivalent to -mov.w r0,@@foo -@end example - -If you use the size suffixes, @code{@value{AS}} issues a warning when -the suffix and the register size do not match. diff --git a/gas/doc/c-h8500.texi b/gas/doc/c-h8500.texi deleted file mode 100644 index 10f0e641538..00000000000 --- a/gas/doc/c-h8500.texi +++ /dev/null @@ -1,272 +0,0 @@ -@c Copyright (C) 1991, 1992, 1993, 1994, 1995 Free Software Foundation, Inc. -@c This is part of the GAS manual. -@c For copying conditions, see the file as.texinfo. -@page -@node H8/500-Dependent -@chapter H8/500 Dependent Features - -@cindex H8/500 support -@menu -* H8/500 Options:: Options -* H8/500 Syntax:: Syntax -* H8/500 Floating Point:: Floating Point -* H8/500 Directives:: H8/500 Machine Directives -* H8/500 Opcodes:: Opcodes -@end menu - -@node H8/500 Options -@section Options - -@cindex H8/500 options (none) -@cindex options, H8/500 (none) -@code{@value{AS}} has no additional command-line options for the Hitachi -H8/500 family. - -@node H8/500 Syntax -@section Syntax - -@menu -* H8/500-Chars:: Special Characters -* H8/500-Regs:: Register Names -* H8/500-Addressing:: Addressing Modes -@end menu - -@node H8/500-Chars -@subsection Special Characters - -@cindex line comment character, H8/500 -@cindex H8/500 line comment character -@samp{!} is the line comment character. - -@cindex line separator, H8/500 -@cindex statement separator, H8/500 -@cindex H8/500 line separator -@samp{;} can be used instead of a newline to separate statements. - -@cindex symbol names, @samp{$} in -@cindex @code{$} in symbol names -Since @samp{$} has no special meaning, you may use it in symbol names. - -@node H8/500-Regs -@subsection Register Names - -@cindex H8/500 registers -@cindex registers, H8/500 -You can use the predefined symbols @samp{r0}, @samp{r1}, @samp{r2}, -@samp{r3}, @samp{r4}, @samp{r5}, @samp{r6}, and @samp{r7} to refer to -the H8/500 registers. - -The H8/500 also has these control registers: - -@table @code -@item cp -code pointer - -@item dp -data pointer - -@item bp -base pointer - -@item tp -stack top pointer - -@item ep -extra pointer - -@item sr -status register - -@item ccr -condition code register -@end table - -All registers are 16 bits long. To represent 32 bit numbers, use two -adjacent registers; for distant memory addresses, use one of the segment -pointers (@code{cp} for the program counter; @code{dp} for -@code{r0}--@code{r3}; @code{ep} for @code{r4} and @code{r5}; and -@code{tp} for @code{r6} and @code{r7}. - -@node H8/500-Addressing -@subsection Addressing Modes - -@cindex addressing modes, H8/500 -@cindex H8/500 addressing modes -@value{AS} understands the following addressing modes for the H8/500: -@table @code -@item R@var{n} -Register direct - -@item @@R@var{n} -Register indirect - -@item @@(d:8, R@var{n}) -Register indirect with 8 bit signed displacement - -@item @@(d:16, R@var{n}) -Register indirect with 16 bit signed displacement - -@item @@-R@var{n} -Register indirect with pre-decrement - -@item @@R@var{n}+ -Register indirect with post-increment - -@item @@@var{aa}:8 -8 bit absolute address - -@item @@@var{aa}:16 -16 bit absolute address - -@item #@var{xx}:8 -8 bit immediate - -@item #@var{xx}:16 -16 bit immediate -@end table - -@node H8/500 Floating Point -@section Floating Point - -@cindex floating point, H8/500 (@sc{ieee}) -@cindex H8/500 floating point (@sc{ieee}) -The H8/500 family has no hardware floating point, but the @code{.float} -directive generates @sc{ieee} floating-point numbers for compatibility -with other development tools. - -@node H8/500 Directives -@section H8/500 Machine Directives - -@cindex H8/500 machine directives (none) -@cindex machine directives, H8/500 (none) -@cindex @code{word} directive, H8/500 -@cindex @code{int} directive, H8/500 -@code{@value{AS}} has no machine-dependent directives for the H8/500. -However, on this platform the @samp{.int} and @samp{.word} directives -generate 16-bit numbers. - -@node H8/500 Opcodes -@section Opcodes - -@cindex H8/500 opcode summary -@cindex opcode summary, H8/500 -@cindex mnemonics, H8/500 -@cindex instruction summary, H8/500 -For detailed information on the H8/500 machine instruction set, see -@cite{H8/500 Series Programming Manual} (Hitachi M21T001). - -@code{@value{AS}} implements all the standard H8/500 opcodes. No additional -pseudo-instructions are needed on this family. - -@ifset SMALL -@c this table, due to the multi-col faking and hardcoded order, looks silly -@c except in smallbook. See comments below "@set SMALL" near top of this file. - -The following table summarizes H8/500 opcodes and their operands: - -@c Use @group if it ever works, instead of @page -@page -@smallexample -@i{Legend:} -abs8 @r{8-bit absolute address} -abs16 @r{16-bit absolute address} -abs24 @r{24-bit absolute address} -crb @r{@code{ccr}, @code{br}, @code{ep}, @code{dp}, @code{tp}, @code{dp}} -disp8 @r{8-bit displacement} -ea @r{@code{rn}, @code{@@rn}, @code{@@(d:8, rn)}, @code{@@(d:16, rn)},} - @r{@code{@@-rn}, @code{@@rn+}, @code{@@aa:8}, @code{@@aa:16},} - @r{@code{#xx:8}, @code{#xx:16}} -ea_mem @r{@code{@@rn}, @code{@@(d:8, rn)}, @code{@@(d:16, rn)},} - @r{@code{@@-rn}, @code{@@rn+}, @code{@@aa:8}, @code{@@aa:16}} -ea_noimm @r{@code{rn}, @code{@@rn}, @code{@@(d:8, rn)}, @code{@@(d:16, rn)},} - @r{@code{@@-rn}, @code{@@rn+}, @code{@@aa:8}, @code{@@aa:16}} -fp r6 -imm4 @r{4-bit immediate data} -imm8 @r{8-bit immediate data} -imm16 @r{16-bit immediate data} -pcrel8 @r{8-bit offset from program counter} -pcrel16 @r{16-bit offset from program counter} -qim @r{@code{-2}, @code{-1}, @code{1}, @code{2}} -rd @r{any register} -rs @r{a register distinct from rd} -rlist @r{comma-separated list of registers in parentheses;} - @r{register ranges @code{rd-rs} are allowed} -sp @r{stack pointer (@code{r7})} -sr @r{status register} -sz @r{size; @samp{.b} or @samp{.w}. If omitted, default @samp{.w}} - -ldc[.b] ea,crb bcc[.w] pcrel16 -ldc[.w] ea,sr bcc[.b] pcrel8 -add[:q] sz qim,ea_noimm bhs[.w] pcrel16 -add[:g] sz ea,rd bhs[.b] pcrel8 -adds sz ea,rd bcs[.w] pcrel16 -addx sz ea,rd bcs[.b] pcrel8 -and sz ea,rd blo[.w] pcrel16 -andc[.b] imm8,crb blo[.b] pcrel8 -andc[.w] imm16,sr bne[.w] pcrel16 -bpt bne[.b] pcrel8 -bra[.w] pcrel16 beq[.w] pcrel16 -bra[.b] pcrel8 beq[.b] pcrel8 -bt[.w] pcrel16 bvc[.w] pcrel16 -bt[.b] pcrel8 bvc[.b] pcrel8 -brn[.w] pcrel16 bvs[.w] pcrel16 -brn[.b] pcrel8 bvs[.b] pcrel8 -bf[.w] pcrel16 bpl[.w] pcrel16 -bf[.b] pcrel8 bpl[.b] pcrel8 -bhi[.w] pcrel16 bmi[.w] pcrel16 -bhi[.b] pcrel8 bmi[.b] pcrel8 -bls[.w] pcrel16 bge[.w] pcrel16 -bls[.b] pcrel8 bge[.b] pcrel8 -@page -blt[.w] pcrel16 mov[:g][.b] imm8,ea_mem -blt[.b] pcrel8 mov[:g][.w] imm16,ea_mem -bgt[.w] pcrel16 movfpe[.b] ea,rd -bgt[.b] pcrel8 movtpe[.b] rs,ea_noimm -ble[.w] pcrel16 mulxu sz ea,rd -ble[.b] pcrel8 neg sz ea -bclr sz imm4,ea_noimm nop -bclr sz rs,ea_noimm not sz ea -bnot sz imm4,ea_noimm or sz ea,rd -bnot sz rs,ea_noimm orc[.b] imm8,crb -bset sz imm4,ea_noimm orc[.w] imm16,sr -bset sz rs,ea_noimm pjmp abs24 -bsr[.b] pcrel8 pjmp @@rd -bsr[.w] pcrel16 pjsr abs24 -btst sz imm4,ea_noimm pjsr @@rd -btst sz rs,ea_noimm prtd imm8 -clr sz ea prtd imm16 -cmp[:e][.b] imm8,rd prts -cmp[:i][.w] imm16,rd rotl sz ea -cmp[:g].b imm8,ea_noimm rotr sz ea -cmp[:g][.w] imm16,ea_noimm rotxl sz ea -Cmp[:g] sz ea,rd rotxr sz ea -dadd rs,rd rtd imm8 -divxu sz ea,rd rtd imm16 -dsub rs,rd rts -exts[.b] rd scb/f rs,pcrel8 -extu[.b] rd scb/ne rs,pcrel8 -jmp @@rd scb/eq rs,pcrel8 -jmp @@(imm8,rd) shal sz ea -jmp @@(imm16,rd) shar sz ea -jmp abs16 shll sz ea -jsr @@rd shlr sz ea -jsr @@(imm8,rd) sleep -jsr @@(imm16,rd) stc[.b] crb,ea_noimm -jsr abs16 stc[.w] sr,ea_noimm -ldm @@sp+,(rlist) stm (rlist),@@-sp -link fp,imm8 sub sz ea,rd -link fp,imm16 subs sz ea,rd -mov[:e][.b] imm8,rd subx sz ea,rd -mov[:i][.w] imm16,rd swap[.b] rd -mov[:l][.w] abs8,rd tas[.b] ea -mov[:l].b abs8,rd trapa imm4 -mov[:s][.w] rs,abs8 trap/vs -mov[:s].b rs,abs8 tst sz ea -mov[:f][.w] @@(disp8,fp),rd unlk fp -mov[:f][.w] rs,@@(disp8,fp) xch[.w] rs,rd -mov[:f].b @@(disp8,fp),rd xor sz ea,rd -mov[:f].b rs,@@(disp8,fp) xorc.b imm8,crb -mov[:g] sz rs,ea_mem xorc.w imm16,sr -mov[:g] sz ea,rd -@end smallexample -@end ifset diff --git a/gas/doc/c-hppa.texi b/gas/doc/c-hppa.texi deleted file mode 100644 index 5fa535fd783..00000000000 --- a/gas/doc/c-hppa.texi +++ /dev/null @@ -1,263 +0,0 @@ -@c Copyright (C) 1991, 1992, 1993, 1994, 1995 Free Software Foundation, Inc. -@c This is part of the GAS manual. -@c For copying conditions, see the file as.texinfo. -@page -@node HPPA-Dependent -@chapter HPPA Dependent Features - -@cindex support -@menu -* HPPA Notes:: Notes -* HPPA Options:: Options -* HPPA Syntax:: Syntax -* HPPA Floating Point:: Floating Point -* HPPA Directives:: HPPA Machine Directives -* HPPA Opcodes:: Opcodes -@end menu - -@node HPPA Notes -@section Notes -As a back end for @sc{gnu} @sc{cc} @code{@value{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 -@code{@value{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 @code{@value{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. - -@node HPPA Options -@section Options -@code{@value{AS}} has no machine-dependent command-line options for the HPPA. - -@cindex HPPA Syntax -@node HPPA Syntax -@section 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 @code{spop} instructions, or code which makes significant -use of the @code{!} line separator. - -@code{@value{AS}} is much less forgiving about missing arguments and other -similar oversights than the HP assembler. @code{@value{AS}} notifies you -of missing arguments as syntax errors; this is regarded as a feature, not a -bug. - -Finally, @code{@value{AS}} allows you to use an external symbol without -explicitly importing the symbol. @emph{Warning:} in the future this will be -an error for HPPA targets. - -Special characters for HPPA targets include: - -@samp{;} is the line comment character. - -@samp{!} can be used instead of a newline to separate statements. - -Since @samp{$} has no special meaning, you may use it in symbol names. - -@node HPPA Floating Point -@section Floating Point -@cindex floating point, HPPA (@sc{ieee}) -@cindex HPPA floating point (@sc{ieee}) -The HPPA family uses @sc{ieee} floating-point numbers. - -@node HPPA Directives -@section HPPA Assembler Directives - -@code{@value{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 -@cite{HP9000 Series 800 Assembly Language Reference Manual} (HP 92432-90001). - -@cindex HPPA directives not supported -@code{@value{AS}} does @emph{not} support the following assembler directives -described in the HP manual: - -@example -.endm .liston -.enter .locct -.leave .macro -.listoff -@end example - -@cindex @code{.param} on HPPA -Beyond those implemented for compatibility, @code{@value{AS}} supports one -additional assembler directive for the HPPA: @code{.param}. It conveys -register argument locations for static functions. Its syntax closely follows -the @code{.export} directive. - -@cindex HPPA-only directives -These are the additional directives in @code{@value{AS}} for the HPPA: - -@table @code -@item .block @var{n} -@itemx .blockz @var{n} -Reserve @var{n} bytes of storage, and initialize them to zero. - -@item .call -Mark the beginning of a procedure call. Only the special case with @emph{no -arguments} is allowed. - -@item .callinfo [ @var{param}=@var{value}, @dots{} ] [ @var{flag}, @dots{} ] -Specify a number of parameters and flags that define the environment for a -procedure. - -@var{param} may be any of @samp{frame} (frame size), @samp{entry_gr} (end of -general register range), @samp{entry_fr} (end of float register range), -@samp{entry_sr} (end of space register range). - -The values for @var{flag} are @samp{calls} or @samp{caller} (proc has -subroutines), @samp{no_calls} (proc does not call subroutines), @samp{save_rp} -(preserve return pointer), @samp{save_sp} (proc preserves stack pointer), -@samp{no_unwind} (do not unwind this proc), @samp{hpux_int} (proc is interrupt -routine). - -@item .code -Assemble into the standard section called @samp{$TEXT$}, subsection -@samp{$CODE$}. - -@ifset SOM -@item .copyright "@var{string}" -In the SOM object format, insert @var{string} into the object code, marked as a -copyright string. -@end ifset - -@ifset ELF -@item .copyright "@var{string}" -In the ELF object format, insert @var{string} into the object code, marked as a -version string. -@end ifset - -@item .enter -Not yet supported; the assembler rejects programs containing this directive. - -@item .entry -Mark the beginning of a procedure. - -@item .exit -Mark the end of a procedure. - -@item .export @var{name} [ ,@var{typ} ] [ ,@var{param}=@var{r} ] -Make a procedure @var{name} available to callers. @var{typ}, if present, must -be one of @samp{absolute}, @samp{code} (ELF only, not SOM), @samp{data}, -@samp{entry}, @samp{data}, @samp{entry}, @samp{millicode}, @samp{plabel}, -@samp{pri_prog}, or @samp{sec_prog}. - -@var{param}, if present, provides either relocation information for the -procedure arguments and result, or a privilege level. @var{param} may be -@samp{argw@var{n}} (where @var{n} ranges from @code{0} to @code{3}, and -indicates one of four one-word arguments); @samp{rtnval} (the procedure's -result); or @samp{priv_lev} (privilege level). For arguments or the result, -@var{r} specifies how to relocate, and must be one of @samp{no} (not -relocatable), @samp{gr} (argument is in general register), @samp{fr} (in -floating point register), or @samp{fu} (upper half of float register). -For @samp{priv_lev}, @var{r} is an integer. - -@item .half @var{n} -Define a two-byte integer constant @var{n}; synonym for the portable -@code{@value{AS}} directive @code{.short}. - -@item .import @var{name} [ ,@var{typ} ] -Converse of @code{.export}; make a procedure available to call. The arguments -use the same conventions as the first two arguments for @code{.export}. - -@item .label @var{name} -Define @var{name} as a label for the current assembly location. - -@item .leave -Not yet supported; the assembler rejects programs containing this directive. - -@item .origin @var{lc} -Advance location counter to @var{lc}. Synonym for the @code{@value{as}} -portable directive @code{.org}. - -@item .param @var{name} [ ,@var{typ} ] [ ,@var{param}=@var{r} ] -@c Not in HP manual; @sc{gnu} HPPA extension -Similar to @code{.export}, but used for static procedures. - -@item .proc -Use preceding the first statement of a procedure. - -@item .procend -Use following the last statement of a procedure. - -@item @var{label} .reg @var{expr} -@c ?? Not in HP manual (Jan 1988 vn) -Synonym for @code{.equ}; define @var{label} with the absolute expression -@var{expr} as its value. - -@item .space @var{secname} [ ,@var{params} ] -Switch to section @var{secname}, creating a new section by that name if -necessary. You may only use @var{params} when creating a new section, not -when switching to an existing one. @var{secname} may identify a section by -number rather than by name. - -If specified, the list @var{params} declares attributes of the section, -identified by keywords. The keywords recognized are @samp{spnum=@var{exp}} -(identify this section by the number @var{exp}, an absolute expression), -@samp{sort=@var{exp}} (order sections according to this sort key when linking; -@var{exp} is an absolute expression), @samp{unloadable} (section contains no -loadable data), @samp{notdefined} (this section defined elsewhere), and -@samp{private} (data in this section not available to other programs). - -@item .spnum @var{secnam} -@c ?? Not in HP manual (Jan 1988) -Allocate four bytes of storage, and initialize them with the section number of -the section named @var{secnam}. (You can define the section number with the -HPPA @code{.space} directive.) - -@cindex @code{string} directive on HPPA -@item .string "@var{str}" -Copy the characters in the string @var{str} to the object file. -@xref{Strings,,Strings}, for information on escape sequences you can use in -@code{@value{AS}} strings. - -@emph{Warning!} The HPPA version of @code{.string} differs from the -usual @code{@value{AS}} definition: it does @emph{not} write a zero byte -after copying @var{str}. - -@item .stringz "@var{str}" -Like @code{.string}, but appends a zero byte after copying @var{str} to object -file. - -@item .subspa @var{name} [ ,@var{params} ] -@itemx .nsubspa @var{name} [ ,@var{params} ] -Similar to @code{.space}, but selects a subsection @var{name} within the -current section. You may only specify @var{params} when you create a -subsection (in the first instance of @code{.subspa} for this @var{name}). - -If specified, the list @var{params} declares attributes of the subsection, -identified by keywords. The keywords recognized are @samp{quad=@var{expr}} -(``quadrant'' for this subsection), @samp{align=@var{expr}} (alignment for -beginning of this subsection; a power of two), @samp{access=@var{expr}} (value -for ``access rights'' field), @samp{sort=@var{expr}} (sorting order for this -subspace in link), @samp{code_only} (subsection contains only code), -@samp{unloadable} (subsection cannot be loaded into memory), @samp{common} -(subsection is common block), @samp{dup_comm} (initialized data may have -duplicate names), or @samp{zero} (subsection is all zeros, do not write in -object file). - -@code{.nsubspa} always creates a new subspace with the given name, even -if one with the same name already exists. - -@item .version "@var{str}" -Write @var{str} as version identifier in object code. -@end table - -@node HPPA Opcodes -@section Opcodes -For detailed information on the HPPA machine instruction set, see -@cite{PA-RISC Architecture and Instruction Set Reference Manual} -(HP 09740-90039). diff --git a/gas/doc/c-i386.texi b/gas/doc/c-i386.texi deleted file mode 100644 index 8a9c85a678e..00000000000 --- a/gas/doc/c-i386.texi +++ /dev/null @@ -1,529 +0,0 @@ -@c Copyright (C) 1991, 92, 93, 94, 95, 97, 1998 Free Software Foundation, Inc. -@c This is part of the GAS manual. -@c For copying conditions, see the file as.texinfo. -@ifset GENERIC -@page -@node i386-Dependent -@chapter 80386 Dependent Features -@end ifset -@ifclear GENERIC -@node Machine Dependencies -@chapter 80386 Dependent Features -@end ifclear - -@cindex i386 support -@cindex i80306 support -@menu -* i386-Options:: Options -* i386-Syntax:: AT&T Syntax versus Intel Syntax -* 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-16bit:: Writing 16-bit Code -* i386-Bugs:: AT&T Syntax bugs -* i386-Notes:: Notes -@end menu - -@node i386-Options -@section Options - -@cindex options for i386 (none) -@cindex i386 options (none) -The 80386 has no machine dependent options. - -@node i386-Syntax -@section AT&T Syntax versus Intel Syntax - -@cindex i386 syntax compatibility -@cindex syntax compatibility, i386 -In order to maintain compatibility with the output of @code{@value{GCC}}, -@code{@value{AS}} supports AT&T System V/386 assembler syntax. This 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: - -@cindex immediate operands, i386 -@cindex i386 immediate operands -@cindex register operands, i386 -@cindex i386 register operands -@cindex jump/call operands, i386 -@cindex i386 jump/call operands -@cindex operand delimiters, i386 -@itemize @bullet -@item -AT&T immediate operands are preceded by @samp{$}; Intel immediate -operands are undelimited (Intel @samp{push 4} is AT&T @samp{pushl $4}). -AT&T register operands are preceded by @samp{%}; Intel register operands -are undelimited. AT&T absolute (as opposed to PC relative) jump/call -operands are prefixed by @samp{*}; they are undelimited in Intel syntax. - -@cindex i386 source, destination operands -@cindex source, destination operands; i386 -@item -AT&T and Intel syntax use the opposite order for source and destination -operands. Intel @samp{add eax, 4} is @samp{addl $4, %eax}. The -@samp{source, dest} convention is maintained for compatibility with -previous Unix assemblers. Note that instructions with more than one -source operand, such as the @samp{enter} instruction, do @emph{not} have -reversed order. @ref{i386-Bugs}. - -@cindex mnemonic suffixes, i386 -@cindex sizes operands, i386 -@cindex i386 size suffixes -@item -In AT&T syntax the size of memory operands is determined from the last -character of the instruction mnemonic. Mnemonic suffixes of @samp{b}, -@samp{w}, and @samp{l} specify byte (8-bit), word (16-bit), and long -(32-bit) memory references. Intel syntax accomplishes this by prefixing -memory operands (@emph{not} the instruction mnemonics) with @samp{byte -ptr}, @samp{word ptr}, and @samp{dword ptr}. Thus, Intel @samp{mov al, -byte ptr @var{foo}} is @samp{movb @var{foo}, %al} in AT&T syntax. - -@cindex return instructions, i386 -@cindex i386 jump, call, return -@item -Immediate form long jumps and calls are -@samp{lcall/ljmp $@var{section}, $@var{offset}} in AT&T syntax; the -Intel syntax is -@samp{call/jmp far @var{section}:@var{offset}}. Also, the far return -instruction -is @samp{lret $@var{stack-adjust}} in AT&T syntax; Intel syntax is -@samp{ret far @var{stack-adjust}}. - -@cindex sections, i386 -@cindex i386 sections -@item -The AT&T assembler does not provide support for multiple section -programs. Unix style systems expect all programs to be single sections. -@end itemize - -@node i386-Mnemonics -@section Instruction Naming - -@cindex i386 instruction naming -@cindex instruction naming, i386 -Instruction mnemonics are suffixed with one character modifiers which -specify the size of operands. The letters @samp{b}, @samp{w}, and -@samp{l} specify byte, word, and long operands. If no suffix is -specified by an instruction then @code{@value{AS}} tries to fill in the -missing suffix based on the destination register operand (the last one -by convention). Thus, @samp{mov %ax, %bx} is equivalent to @samp{movw -%ax, %bx}; also, @samp{mov $1, %bx} is equivalent to @samp{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 @emph{from} and a size to zero extend @emph{to}. This -is accomplished by using two instruction mnemonic suffixes in AT&T -syntax. Base names for sign extend and zero extend are -@samp{movs@dots{}} and @samp{movz@dots{}} in AT&T syntax (@samp{movsx} -and @samp{movzx} in Intel syntax). The instruction mnemonic suffixes -are tacked on to this base name, the @emph{from} suffix before the -@emph{to} suffix. Thus, @samp{movsbl %al, %edx} is AT&T syntax for -``move sign extend @emph{from} %al @emph{to} %edx.'' Possible suffixes, -thus, are @samp{bl} (from byte to long), @samp{bw} (from byte to word), -and @samp{wl} (from word to long). - -@cindex conversion instructions, i386 -@cindex i386 conversion instructions -The Intel-syntax conversion instructions - -@itemize @bullet -@item -@samp{cbw} --- sign-extend byte in @samp{%al} to word in @samp{%ax}, - -@item -@samp{cwde} --- sign-extend word in @samp{%ax} to long in @samp{%eax}, - -@item -@samp{cwd} --- sign-extend word in @samp{%ax} to long in @samp{%dx:%ax}, - -@item -@samp{cdq} --- sign-extend dword in @samp{%eax} to quad in @samp{%edx:%eax}, -@end itemize - -@noindent -are called @samp{cbtw}, @samp{cwtl}, @samp{cwtd}, and @samp{cltd} in -AT&T naming. @code{@value{AS}} accepts either naming for these instructions. - -@cindex jump instructions, i386 -@cindex call instructions, i386 -Far call/jump instructions are @samp{lcall} and @samp{ljmp} in -AT&T syntax, but are @samp{call far} and @samp{jump far} in Intel -convention. - -@node i386-Regs -@section Register Naming - -@cindex i386 registers -@cindex registers, i386 -Register operands are always prefixed with @samp{%}. The 80386 registers -consist of - -@itemize @bullet -@item -the 8 32-bit registers @samp{%eax} (the accumulator), @samp{%ebx}, -@samp{%ecx}, @samp{%edx}, @samp{%edi}, @samp{%esi}, @samp{%ebp} (the -frame pointer), and @samp{%esp} (the stack pointer). - -@item -the 8 16-bit low-ends of these: @samp{%ax}, @samp{%bx}, @samp{%cx}, -@samp{%dx}, @samp{%di}, @samp{%si}, @samp{%bp}, and @samp{%sp}. - -@item -the 8 8-bit registers: @samp{%ah}, @samp{%al}, @samp{%bh}, -@samp{%bl}, @samp{%ch}, @samp{%cl}, @samp{%dh}, and @samp{%dl} (These -are the high-bytes and low-bytes of @samp{%ax}, @samp{%bx}, -@samp{%cx}, and @samp{%dx}) - -@item -the 6 section registers @samp{%cs} (code section), @samp{%ds} -(data section), @samp{%ss} (stack section), @samp{%es}, @samp{%fs}, -and @samp{%gs}. - -@item -the 3 processor control registers @samp{%cr0}, @samp{%cr2}, and -@samp{%cr3}. - -@item -the 6 debug registers @samp{%db0}, @samp{%db1}, @samp{%db2}, -@samp{%db3}, @samp{%db6}, and @samp{%db7}. - -@item -the 2 test registers @samp{%tr6} and @samp{%tr7}. - -@item -the 8 floating point register stack @samp{%st} or equivalently -@samp{%st(0)}, @samp{%st(1)}, @samp{%st(2)}, @samp{%st(3)}, -@samp{%st(4)}, @samp{%st(5)}, @samp{%st(6)}, and @samp{%st(7)}. -@end itemize - -@node i386-Prefixes -@section Instruction Prefixes - -@cindex i386 instruction prefixes -@cindex instruction prefixes, i386 -@cindex prefixes, i386 -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 @samp{scas} (scan string) instruction is -repeated with: - -@smallexample - repne scas %es:(%edi),%al -@end smallexample - -You may also place prefixes on the lines immediately preceding the -instruction, but this circumvents checks that @code{@value{AS}} does -with prefixes, and will not work with all prefixes. - -Here is a list of instruction prefixes: - -@cindex section override prefixes, i386 -@itemize @bullet -@item -Section override prefixes @samp{cs}, @samp{ds}, @samp{ss}, @samp{es}, -@samp{fs}, @samp{gs}. These are automatically added by specifying -using the @var{section}:@var{memory-operand} form for memory references. - -@cindex size prefixes, i386 -@item -Operand/Address size prefixes @samp{data16} and @samp{addr16} -change 32-bit operands/addresses into 16-bit operands/addresses, -while @samp{data32} and @samp{addr32} change 16-bit ones (in a -@code{.code16} section) into 32-bit operands/addresses. These prefixes -@emph{must} appear on the same line of code as the instruction they -modify. For example, in a 16-bit @code{.code16} section, you might -write: - -@smallexample - addr32 jmpl *(%ebx) -@end smallexample - -@cindex bus lock prefixes, i386 -@cindex inhibiting interrupts, i386 -@item -The bus lock prefix @samp{lock} inhibits interrupts during execution of -the instruction it precedes. (This is only valid with certain -instructions; see a 80386 manual for details). - -@cindex coprocessor wait, i386 -@item -The wait for coprocessor prefix @samp{wait} waits for the coprocessor to -complete the current instruction. This should never be needed for the -80386/80387 combination. - -@cindex repeat prefixes, i386 -@item -The @samp{rep}, @samp{repe}, and @samp{repne} prefixes are added -to string instructions to make them repeat @samp{%ecx} times (@samp{%cx} -times if the current address size is 16-bits). -@end itemize - -@node i386-Memory -@section Memory References - -@cindex i386 memory references -@cindex memory references, i386 -An Intel syntax indirect memory reference of the form - -@smallexample -@var{section}:[@var{base} + @var{index}*@var{scale} + @var{disp}] -@end smallexample - -@noindent -is translated into the AT&T syntax - -@smallexample -@var{section}:@var{disp}(@var{base}, @var{index}, @var{scale}) -@end smallexample - -@noindent -where @var{base} and @var{index} are the optional 32-bit base and -index registers, @var{disp} is the optional displacement, and -@var{scale}, taking the values 1, 2, 4, and 8, multiplies @var{index} -to calculate the address of the operand. If no @var{scale} is -specified, @var{scale} is taken to be 1. @var{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 @emph{must} -be preceded by a @samp{%}. If you specify a section override which -coincides with the default section register, @code{@value{AS}} does @emph{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: - -@table @asis -@item AT&T: @samp{-4(%ebp)}, Intel: @samp{[ebp - 4]} -@var{base} is @samp{%ebp}; @var{disp} is @samp{-4}. @var{section} is -missing, and the default section is used (@samp{%ss} for addressing with -@samp{%ebp} as the base register). @var{index}, @var{scale} are both missing. - -@item AT&T: @samp{foo(,%eax,4)}, Intel: @samp{[foo + eax*4]} -@var{index} is @samp{%eax} (scaled by a @var{scale} 4); @var{disp} is -@samp{foo}. All other fields are missing. The section register here -defaults to @samp{%ds}. - -@item AT&T: @samp{foo(,1)}; Intel @samp{[foo]} -This uses the value pointed to by @samp{foo} as a memory operand. -Note that @var{base} and @var{index} are both missing, but there is only -@emph{one} @samp{,}. This is a syntactic exception. - -@item AT&T: @samp{%gs:foo}; Intel @samp{gs:foo} -This selects the contents of the variable @samp{foo} with section -register @var{section} being @samp{%gs}. -@end table - -Absolute (as opposed to PC relative) call and jump operands must be -prefixed with @samp{*}. If no @samp{*} is specified, @code{@value{AS}} -always chooses PC relative addressing for jump/call labels. - -Any instruction that has a memory operand, but no register operand, -@emph{must} specify its size (byte, word, or long) with an instruction -mnemonic suffix (@samp{b}, @samp{w}, or @samp{l}, respectively). - -@node i386-jumps -@section Handling of Jump Instructions - -@cindex jump optimization, i386 -@cindex i386 jump optimization -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 (32-bit) displacement is used. We do not support -word (16-bit) displacement jumps in 32-bit mode (i.e. prefixing the jump -instruction with the @samp{data16} instruction prefix), since the 80386 -insists upon masking @samp{%eip} to 16 bits after the word displacement -is added. - -Note that the @samp{jcxz}, @samp{jecxz}, @samp{loop}, @samp{loopz}, -@samp{loope}, @samp{loopnz} and @samp{loopne} instructions only come in byte -displacements, so that if you use these instructions (@code{@value{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 @samp{jcxz foo} -to - -@smallexample - jcxz cx_zero - jmp cx_nonzero -cx_zero: jmp foo -cx_nonzero: -@end smallexample - -@node i386-Float -@section Floating Point - -@cindex i386 floating point -@cindex floating point, i386 -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. - -@cindex @code{float} directive, i386 -@cindex @code{single} directive, i386 -@cindex @code{double} directive, i386 -@cindex @code{tfloat} directive, i386 -@itemize @bullet -@item -Floating point constructors are @samp{.float} or @samp{.single}, -@samp{.double}, and @samp{.tfloat} for 32-, 64-, and 80-bit formats. -These correspond to instruction mnemonic suffixes @samp{s}, @samp{l}, -and @samp{t}. @samp{t} stands for 80-bit (ten byte) real. The 80387 -only supports this format via the @samp{fldt} (load 80-bit real to stack -top) and @samp{fstpt} (store 80-bit real and pop stack) instructions. - -@cindex @code{word} directive, i386 -@cindex @code{long} directive, i386 -@cindex @code{int} directive, i386 -@cindex @code{quad} directive, i386 -@item -Integer constructors are @samp{.word}, @samp{.long} or @samp{.int}, and -@samp{.quad} for the 16-, 32-, and 64-bit integer formats. The -corresponding instruction mnemonic suffixes are @samp{s} (single), -@samp{l} (long), and @samp{q} (quad). As with the 80-bit real format, -the 64-bit @samp{q} format is only present in the @samp{fildq} (load -quad integer to stack top) and @samp{fistpq} (store quad integer and pop -stack) instructions. -@end itemize - -Register to register operations should not use instruction mnemonic suffixes. -@samp{fstl %st, %st(1)} will give a warning, and be assembled as if you -wrote @samp{fst %st, %st(1)}, since all register to register operations -use 80-bit floating point operands. (Contrast this with @samp{fstl %st, mem}, -which converts @samp{%st} from 80-bit to 64-bit floating point format, -then stores the result in the 4 byte location @samp{mem}) - -@node i386-SIMD -@section Intel's MMX and AMD's 3DNow! SIMD Operations - -@cindex MMX, i386 -@cindex 3DNow!, i386 -@cindex SIMD, i386 - -@code{@value{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, @code{@value{AS}} does not support Intel's floating point -SIMD, Katmai (KNI). - -The eight 64-bit MMX operands, also used by 3DNow!, are called @samp{%mm0}, -@samp{%mm1}, ... @samp{%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. - -@node i386-16bit -@section Writing 16-bit Code - -@cindex i386 16-bit code -@cindex 16-bit code, i386 -@cindex real-mode code, i386 -@cindex @code{code16gcc} directive, i386 -@cindex @code{code16} directive, i386 -@cindex @code{code32} directive, i386 -While @code{@value{AS}} normally writes only ``pure'' 32-bit i386 code, -it also supports writing code to run in real mode or in 16-bit protected -mode code segments. To do this, put a @samp{.code16} or -@samp{.code16gcc} directive before the assembly language instructions to -be run in 16-bit mode. You can switch @code{@value{AS}} back to writing -normal 32-bit code with the @samp{.code32} directive. - -@samp{.code16gcc} provides experimental support for generating 16-bit -code from gcc, and differs from @samp{.code16} in that @samp{call}, -@samp{ret}, @samp{enter}, @samp{leave}, @samp{push}, @samp{pop}, -@samp{pusha}, @samp{popa}, @samp{pushf}, and @samp{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. -@samp{.code16gcc} also automatically adds address size prefixes where -necessary to use the 32-bit addressing modes that gcc generates. - -The code which @code{@value{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 @emph{any} 32-bit -constructs which require @code{@value{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 @samp{66 6a 04}, which pushes the -value @samp{4} onto the stack, decrementing @samp{%esp} by 2. - -@smallexample - pushw $4 -@end smallexample - -The same code in a 16-bit code section would generate the machine -opcode bytes @samp{6a 04} (ie. 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. - -@node i386-Bugs -@section 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 - -@smallexample - fsub %st,%st(3) -@end smallexample -@noindent -results in @samp{%st(3)} being updated to @samp{%st - %st(3)} rather -than the expected @samp{%st(3) - %st}. This happens with all the -non-commutative arithmetic floating point operations with two register -operands where the source register is @samp{%st} and the destination -register is @samp{%st(i)}. - -@node i386-Notes -@section Notes - -@cindex i386 @code{mul}, @code{imul} instructions -@cindex @code{mul} instruction, i386 -@cindex @code{imul} instruction, i386 -There is some trickery concerning the @samp{mul} and @samp{imul} -instructions that deserves mention. The 16-, 32-, and 64-bit expanding -multiplies (base opcode @samp{0xf6}; extension 4 for @samp{mul} and 5 -for @samp{imul}) can be output only in the one operand form. Thus, -@samp{imul %ebx, %eax} does @emph{not} select the expanding multiply; -the expanding multiply would clobber the @samp{%edx} register, and this -would confuse @code{@value{GCC}} output. Use @samp{imul %ebx} to get the -64-bit product in @samp{%edx:%eax}. - -We have added a two operand form of @samp{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 @samp{%eax} by 69, for -example, can be done with @samp{imul $69, %eax} rather than @samp{imul -$69, %eax, %eax}. - diff --git a/gas/doc/c-i960.texi b/gas/doc/c-i960.texi deleted file mode 100644 index 177030ab0be..00000000000 --- a/gas/doc/c-i960.texi +++ /dev/null @@ -1,298 +0,0 @@ -@c Copyright (C) 1991, 1992, 1993, 1994, 1995 Free Software Foundation, Inc. -@c This is part of the GAS manual. -@c For copying conditions, see the file as.texinfo. -@ifset GENERIC -@page -@node i960-Dependent -@chapter Intel 80960 Dependent Features -@end ifset -@ifclear GENERIC -@node Machine Dependencies -@chapter Intel 80960 Dependent Features -@end ifclear - -@cindex i960 support -@menu -* Options-i960:: i960 Command-line Options -* Floating Point-i960:: Floating Point -* Directives-i960:: i960 Machine Directives -* Opcodes for i960:: i960 Opcodes -@end menu - -@c FIXME! Add Syntax sec with discussion of bitfields here, at least so -@c long as they're not turned on for other machines than 960. - -@node Options-i960 - -@section i960 Command-line Options - -@cindex i960 options -@cindex options, i960 -@table @code - -@cindex i960 architecture options -@cindex architecture options, i960 -@cindex @code{-A} options, i960 -@item -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. - -@samp{-ACA} is equivalent to @samp{-ACA_A}; @samp{-AKC} is equivalent to -@samp{-AMC}. Synonyms are provided for compatibility with other tools. - -If you do not specify any of these options, @code{@value{AS}} generates code -for any instruction or feature that is supported by @emph{some} version of the -960 (even if this means mixing architectures!). In principle, -@code{@value{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 @code{@value{AS}} -output match a specific architecture, specify that architecture explicitly. - -@cindex @code{-b} option, i960 -@cindex branch recording, i960 -@cindex i960 branch recording -@item -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 @var{BR} represents a conditional branch instruction, -the following represents the code generated by the assembler when -@samp{-b} is specified: - -@smallexample - call @var{increment routine} - .word 0 # pre-counter -Label: @var{BR} - call @var{increment routine} - .word 0 # post-counter -@end smallexample - -The counter following a branch records the number of times that branch -was @emph{not} taken; the differenc between the two counters is the -number of times the branch @emph{was} taken. - -@cindex @code{gbr960}, i960 postprocessor -@cindex branch statistics table, i960 -A table of every such @code{Label} is also generated, so that the -external postprocessor @code{gbr960} (supplied by Intel) can locate all -the counters. This table is always labelled @samp{__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. - -@c TEXI2ROFF-KILL -@ifinfo -@c END TEXI2ROFF-KILL -@example - +------------+------------+------------+ ... +------------+ - | | | | | | - | *NEXT | COUNT: N | *BRLAB 1 | | *BRLAB N | - | | | | | | - +------------+------------+------------+ ... +------------+ - - __BRANCH_TABLE__ layout -@end example -@c TEXI2ROFF-KILL -@end ifinfo -@need 2000 -@tex -\vskip 1pc -\line{\leftskip=0pt\hskip\tableindent -\boxit{2cm}{\tt *NEXT}\boxit{2cm}{\tt COUNT: \it N}\boxit{2cm}{\tt -*BRLAB 1}\ibox{1cm}{\quad\dots}\boxit{2cm}{\tt *BRLAB \it N}\hfil} -\centerline{\it {\tt \_\_BRANCH\_TABLE\_\_} layout} -@end tex -@c END TEXI2ROFF-KILL - -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 @sc{gnu} C compiler -generates these calls automatically when you give it a @samp{-b} option. -For further details, see the documentation of @samp{gbr960}. - -@cindex @code{-no-relax} option, i960 -@item -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 @samp{chkbit}) and branch -instructions. You can use the @samp{-no-relax} option to specify that -@code{@value{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 @emph{always} adjusted when necessary (depending on -displacement size), regardless of whether you use @samp{-no-relax}. -@end table - -@node Floating Point-i960 -@section Floating Point - -@cindex floating point, i960 (@sc{ieee}) -@cindex i960 floating point (@sc{ieee}) -@code{@value{AS}} generates @sc{ieee} floating-point numbers for the directives -@samp{.float}, @samp{.double}, @samp{.extended}, and @samp{.single}. - -@node Directives-i960 -@section i960 Machine Directives - -@cindex machine directives, i960 -@cindex i960 machine directives - -@table @code -@cindex @code{bss} directive, i960 -@item .bss @var{symbol}, @var{length}, @var{align} -Reserve @var{length} bytes in the bss section for a local @var{symbol}, -aligned to the power of two specified by @var{align}. @var{length} and -@var{align} must be positive absolute expressions. This directive -differs from @samp{.lcomm} only in that it permits you to specify -an alignment. @xref{Lcomm,,@code{.lcomm}}. -@end table - -@table @code -@cindex @code{extended} directive, i960 -@item .extended @var{flonums} -@code{.extended} expects zero or more flonums, separated by commas; for -each flonum, @samp{.extended} emits an @sc{ieee} extended-format (80-bit) -floating-point number. - -@cindex @code{leafproc} directive, i960 -@item .leafproc @var{call-lab}, @var{bal-lab} -You can use the @samp{.leafproc} directive in conjunction with the -optimized @code{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 -@var{bal-lab} using @samp{.leafproc}. If the procedure also has an -entry point that goes through the normal prolog, you can specify that -entry point as @var{call-lab}. - -A @samp{.leafproc} declaration is meant for use in conjunction with the -optimized call instruction @samp{callj}; the directive records the data -needed later to choose between converting the @samp{callj} into a -@code{bal} or a @code{call}. - -@var{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 -@code{bal} entry point. - -@cindex @code{sysproc} directive, i960 -@item .sysproc @var{name}, @var{index} -The @samp{.sysproc} directive defines a name for a system procedure. -After you define it using @samp{.sysproc}, you can use @var{name} to -refer to the system procedure identified by @var{index} when calling -procedures with the optimized call instruction @samp{callj}. - -Both arguments are required; @var{index} must be between 0 and 31 -(inclusive). -@end table - -@node Opcodes for i960 -@section i960 Opcodes - -@cindex opcodes, i960 -@cindex i960 opcodes -All Intel 960 machine instructions are supported; -@pxref{Options-i960,,i960 Command-line Options} for a discussion of -selecting the instruction subset for a particular 960 -architecture.@refill - -Some opcodes are processed beyond simply emitting a single corresponding -instruction: @samp{callj}, and Compare-and-Branch or Compare-and-Jump -instructions with target displacements larger than 13 bits. - -@menu -* callj-i960:: @code{callj} -* Compare-and-branch-i960:: Compare-and-Branch -@end menu - -@node callj-i960 -@subsection @code{callj} - -@cindex @code{callj}, i960 pseudo-opcode -@cindex i960 @code{callj} pseudo-opcode -You can write @code{callj} to have the assembler or the linker determine -the most appropriate form of subroutine call: @samp{call}, -@samp{bal}, or @samp{calls}. If the assembly source contains -enough information---a @samp{.leafproc} or @samp{.sysproc} directive -defining the operand---then @code{@value{AS}} translates the -@code{callj}; if not, it simply emits the @code{callj}, leaving it -for the linker to resolve. - -@node Compare-and-branch-i960 -@subsection Compare-and-Branch - -@cindex i960 compare/branch instructions -@cindex compare/branch instructions, i960 -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. - -@cindex compare and jump expansions, i960 -@cindex i960 compare and jump expansions -Whether @code{@value{AS}} gives an error or expands the instruction depends -on two choices you can make: whether you use the @samp{-no-relax} option, -and whether you use a ``Compare and Branch'' instruction or a ``Compare -and Jump'' instruction. The ``Jump'' instructions are @emph{always} -expanded if necessary; the ``Branch'' instructions are expanded when -necessary @emph{unless} you specify @code{-no-relax}---in which case -@code{@value{AS}} gives an error instead. - -These are the Compare-and-Branch instructions, their ``Jump'' variants, -and the instruction pairs they may expand into: - -@c TEXI2ROFF-KILL -@ifinfo -@c END TEXI2ROFF-KILL -@example - 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 -@end example -@c TEXI2ROFF-KILL -@end ifinfo -@tex -\hskip\tableindent -\halign{\hfil {\tt #}\quad&\hfil {\tt #}\qquad&{\tt #}\hfil\cr -\omit{\hfil\it Compare and\hfil}\span\omit&\cr -{\it Branch}&{\it Jump}&{\it Expanded to}\cr - bbc& & chkbit; bno\cr - bbs& & chkbit; bo\cr - cmpibe& cmpije& cmpi; be\cr - cmpibg& cmpijg& cmpi; bg\cr - cmpibge& cmpijge& cmpi; bge\cr - cmpibl& cmpijl& cmpi; bl\cr - cmpible& cmpijle& cmpi; ble\cr - cmpibno& cmpijno& cmpi; bno\cr - cmpibne& cmpijne& cmpi; bne\cr - cmpibo& cmpijo& cmpi; bo\cr - cmpobe& cmpoje& cmpo; be\cr - cmpobg& cmpojg& cmpo; bg\cr - cmpobge& cmpojge& cmpo; bge\cr - cmpobl& cmpojl& cmpo; bl\cr - cmpoble& cmpojle& cmpo; ble\cr - cmpobne& cmpojne& cmpo; bne\cr} -@end tex -@c END TEXI2ROFF-KILL diff --git a/gas/doc/c-m32r.texi b/gas/doc/c-m32r.texi deleted file mode 100644 index 82b5456d126..00000000000 --- a/gas/doc/c-m32r.texi +++ /dev/null @@ -1,134 +0,0 @@ -@c Copyright (C) 1991, 92-98, 1999 Free Software Foundation, Inc. -@c This is part of the GAS manual. -@c For copying conditions, see the file as.texinfo. -@ifset GENERIC -@page -@node M32R-Dependent -@chapter M32R Dependent Features -@end ifset -@ifclear GENERIC -@node Machine Dependencies -@chapter M32R Dependent Features -@end ifclear - -@cindex M32R support -@menu -* M32R-Opts:: M32R Options -* M32R-Warnings:: M32R Warnings -@end menu - -@node M32R-Opts -@section M32R Options - -@cindex options, M32R -@cindex M32R options - -The Mitsubishi M32R version of @code{@value{AS}} has a few machine -dependent options: - -@table @code -@item -m32rx -@cindex @samp{-m32rx} option, M32RX -@cindex architecture options, M32RX -@cindex M32R architecture options -@code{@value{AS}} can assemble code for several different members of the -Mitsubishi 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. - -@item -warn-explicit-parallel-conflicts -@cindex @samp{-warn-explicit-parallel-conflicts} option, M32RX -Instructs @code{@value{AS}} to produce warning messages when -questionable parallel instructions are encountered. This option is -enabled by default, but @code{@value{GCC}} disables it when it invokes -@code{@value{AS}} directly. Questionable instructions are those whoes -behaviour would be different if they were executed sequentially. For -example the code fragment @samp{mv r1, r2 || mv r3, r1} produces a -different result from @samp{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. - -@item -Wp -@cindex @samp{-Wp} option, M32RX -This is a shorter synonym for the @emph{-warn-explicit-parallel-conflicts} -option. - -@item -no-warn-explicit-parallel-conflicts -@cindex @samp{-no-warn-explicit-parallel-conflicts} option, M32RX -Instructs @code{@value{AS}} not to produce warning messages when -questionable parallel instructions are encountered. - -@item -Wnp -@cindex @samp{-Wnp} option, M32RX -This is a shorter synonym for the @emph{-no-warn-explicit-parallel-conflicts} -option. - -@end table - -@node M32R-Warnings -@section M32R Warnings - -@cindex warnings, M32R -@cindex M32R warnings - -There are several warning and error messages that can be produced by -@code{@value{AS}} which are specific to the M32R: - -@table @code - -@item 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 -@samp{mv r1, r2 || neg r3, r1} register r1 is the destination of the -move instruction and the input to the neg instruction. - -@item 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 -@samp{mv r1, r2 || neg r2, r3} register r2 is the destination of the -neg instruction and the input to the move instruction. - -@item instruction @samp{...} 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 @samp{-m32rx} -command line flag has not been specified to allow assembly of such -instructions. - -@item unknown instruction @samp{...} -This message is produced when the assembler encounters an instruction -which it doe snot recognise. - -@item 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 -@samp{-m32rx} command line flag has not been specified. Only the M32Rx -processor is able to execute two instructions in parallel. - -@item instruction @samp{...} 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. - -@item 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. - -@item 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: -@samp{mv r1, r2 || neg r1, r3} -@samp{jl r0 || mv r14, r1} -@samp{st r2, @@-r1 || mv r1, r3} -@samp{mv r1, r2 || ld r0, @@r1+} -@samp{cmp r1, r2 || addx r3, r4} (Both write to the condition bit) - -@end table diff --git a/gas/doc/c-m68k.texi b/gas/doc/c-m68k.texi deleted file mode 100644 index 16f857f3a7c..00000000000 --- a/gas/doc/c-m68k.texi +++ /dev/null @@ -1,503 +0,0 @@ -@c Copyright (C) 1991, 92, 93, 94, 95, 96, 1997 Free Software Foundation, Inc. -@c This is part of the GAS manual. -@c For copying conditions, see the file as.texinfo. -@ifset GENERIC -@page -@node M68K-Dependent -@chapter M680x0 Dependent Features -@end ifset -@ifclear GENERIC -@node Machine Dependencies -@chapter M680x0 Dependent Features -@end ifclear - -@cindex M680x0 support -@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 -@end menu - -@node M68K-Opts -@section M680x0 Options - -@cindex options, M680x0 -@cindex M680x0 options -The Motorola 680x0 version of @code{@value{AS}} has a few machine -dependent options. - -@cindex @samp{-l} option, M680x0 -You can use the @samp{-l} option to shorten the size of references to undefined -symbols. If you do not use the @samp{-l} option, references to undefined -symbols are wide enough for a full @code{long} (32 bits). (Since -@code{@value{AS}} cannot know where these symbols end up, @code{@value{AS}} can -only allocate space for the linker to fill in later. Since @code{@value{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. - -@cindex @samp{--register-prefix-optional} option, M680x0 -For some configurations, especially those where the compiler normally -does not prepend an underscore to the names of user variables, the -assembler requires a @samp{%} before any use of a register name. This -is intended to let the assembler distinguish between C variables and -functions named @samp{a0} through @samp{a7}, and so on. The @samp{%} is -always accepted, but is not required for certain configurations, notably -@samp{sun3}. The @samp{--register-prefix-optional} option may be used -to permit omitting the @samp{%} 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. - -@cindex @samp{--bitwise-or} option, M680x0 -Normally the character @samp{|} is treated as a comment character, which -means that it can not be used in expressions. The @samp{--bitwise-or} -option turns @samp{|} into a normal character. In this mode, you must -either use C style comments, or start comments with a @samp{#} character -at the beginning of a line. - -@cindex @samp{--base-size-default-16} -@cindex @samp{--base-size-default-32} -If you use an addressing mode with a base register without specifying -the size, @code{@value{AS}} will normally use the full 32 bit value. -For example, the addressing mode @samp{%a0@@(%d0)} is equivalent to -@samp{%a0@@(%d0:l)}. You may use the @samp{--base-size-default-16} -option to tell @code{@value{AS}} to default to using the 16 bit value. -In this case, @samp{%a0@@(%d0)} is equivalent to @samp{%a0@@(%d0:w)}. -You may use the @samp{--base-size-default-32} option to restore the -default behaviour. - -@cindex @samp{--disp-size-default-16} -@cindex @samp{--disp-size-default-32} -If you use an addressing mode with a displacement, and the value of the -displacement is not known, @code{@value{AS}} will normally assume that -the value is 32 bits. For example, if the symbol @samp{disp} has not -been defined, @code{@value{AS}} will assemble the addressing mode -@samp{%a0@@(disp,%d0)} as though @samp{disp} is a 32 bit value. You may -use the @samp{--disp-size-default-16} option to tell @code{@value{AS}} -to instead assume that the displacement is 16 bits. In this case, -@code{@value{AS}} will assemble @samp{%a0@@(disp,%d0)} as though -@samp{disp} is a 16 bit value. You may use the -@samp{--disp-size-default-32} option to restore the default behaviour. - -@cindex @samp{-m68000} and related options -@cindex architecture options, M680x0 -@cindex M680x0 architecture options -@code{@value{AS}} can assemble code for several different members of the -Motorola 680x0 family. The default depends upon how @code{@value{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. - -@table @samp -@item -m68000 -@itemx -m68ec000 -@itemx -m68hc000 -@itemx -m68hc001 -@itemx -m68008 -@itemx -m68302 -@itemx -m68306 -@itemx -m68307 -@itemx -m68322 -@itemx -m68356 -Assemble for the 68000. @samp{-m68008}, @samp{-m68302}, and so on are synonyms -for @samp{-m68000}, since the chips are the same from the point of view -of the assembler. - -@item -m68010 -Assemble for the 68010. - -@item -m68020 -@itemx -m68ec020 -Assemble for the 68020. This is normally the default. - -@item -m68030 -@itemx -m68ec030 -Assemble for the 68030. - -@item -m68040 -@itemx -m68ec040 -Assemble for the 68040. - -@item -m68060 -@itemx -m68ec060 -Assemble for the 68060. - -@item -mcpu32 -@itemx -m68330 -@itemx -m68331 -@itemx -m68332 -@itemx -m68333 -@itemx -m68334 -@itemx -m68336 -@itemx -m68340 -@itemx -m68341 -@itemx -m68349 -@itemx -m68360 -Assemble for the CPU32 family of chips. - -@item -m5200 -Assemble for the ColdFire family of chips. - -@item -m68881 -@itemx -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. - -@item -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. - -@item -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; @samp{-m68851} and @samp{-m68040} should not be used -together. - -@item -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. -@end table - -@node M68K-Syntax -@section Syntax - -@cindex @sc{mit} -This syntax for the Motorola 680x0 was developed at @sc{mit}. - -@cindex M680x0 syntax -@cindex syntax, M680x0 -@cindex M680x0 size modifiers -@cindex size modifiers, M680x0 -The 680x0 version of @code{@value{AS}} uses instructions names and -syntax compatible with the Sun assembler. Intervening periods are -ignored; for example, @samp{movl} is equivalent to @samp{mov.l}. - -In the following table @var{apc} stands for any of the address registers -(@samp{%a0} through @samp{%a7}), the program counter (@samp{%pc}), the -zero-address relative to the program counter (@samp{%zpc}), a suppressed -address register (@samp{%za0} through @samp{%za7}), or it may be omitted -entirely. The use of @var{size} means one of @samp{w} or @samp{l}, and -it may be omitted, along with the leading colon, unless a scale is also -specified. The use of @var{scale} means one of @samp{1}, @samp{2}, -@samp{4}, or @samp{8}, and it may always be omitted along with the -leading colon. - -@cindex M680x0 addressing modes -@cindex addressing modes, M680x0 -The following addressing modes are understood: -@table @dfn -@item Immediate -@samp{#@var{number}} - -@item Data Register -@samp{%d0} through @samp{%d7} - -@item Address Register -@samp{%a0} through @samp{%a7}@* -@samp{%a7} is also known as @samp{%sp}, i.e. the Stack Pointer. @code{%a6} -is also known as @samp{%fp}, the Frame Pointer. - -@item Address Register Indirect -@samp{%a0@@} through @samp{%a7@@} - -@item Address Register Postincrement -@samp{%a0@@+} through @samp{%a7@@+} - -@item Address Register Predecrement -@samp{%a0@@-} through @samp{%a7@@-} - -@item Indirect Plus Offset -@samp{@var{apc}@@(@var{number})} - -@item Index -@samp{@var{apc}@@(@var{number},@var{register}:@var{size}:@var{scale})} - -The @var{number} may be omitted. - -@item Postindex -@samp{@var{apc}@@(@var{number})@@(@var{onumber},@var{register}:@var{size}:@var{scale})} - -The @var{onumber} or the @var{register}, but not both, may be omitted. - -@item Preindex -@samp{@var{apc}@@(@var{number},@var{register}:@var{size}:@var{scale})@@(@var{onumber})} - -The @var{number} may be omitted. Omitting the @var{register} produces -the Postindex addressing mode. - -@item Absolute -@samp{@var{symbol}}, or @samp{@var{digits}}, optionally followed by -@samp{:b}, @samp{:w}, or @samp{:l}. -@end table - -@node M68K-Moto-Syntax -@section Motorola Syntax - -@cindex Motorola syntax for the 680x0 -@cindex alternate syntax for the 680x0 - -The standard Motorola syntax for this chip differs from the syntax -already discussed (@pxref{M68K-Syntax,,Syntax}). @code{@value{AS}} can -accept Motorola syntax for operands, even if @sc{mit} syntax is used for -other operands in the same instruction. The two kinds of syntax are -fully compatible. - -In the following table @var{apc} stands for any of the address registers -(@samp{%a0} through @samp{%a7}), the program counter (@samp{%pc}), the -zero-address relative to the program counter (@samp{%zpc}), or a -suppressed address register (@samp{%za0} through @samp{%za7}). The use -of @var{size} means one of @samp{w} or @samp{l}, and it may always be -omitted along with the leading dot. The use of @var{scale} means one of -@samp{1}, @samp{2}, @samp{4}, or @samp{8}, and it may always be omitted -along with the leading asterisk. - -The following additional addressing modes are understood: - -@table @dfn -@item Address Register Indirect -@samp{(%a0)} through @samp{(%a7)}@* -@samp{%a7} is also known as @samp{%sp}, i.e. the Stack Pointer. @code{%a6} -is also known as @samp{%fp}, the Frame Pointer. - -@item Address Register Postincrement -@samp{(%a0)+} through @samp{(%a7)+} - -@item Address Register Predecrement -@samp{-(%a0)} through @samp{-(%a7)} - -@item Indirect Plus Offset -@samp{@var{number}(@var{%a0})} through @samp{@var{number}(@var{%a7})}, -or @samp{@var{number}(@var{%pc})}. - -The @var{number} may also appear within the parentheses, as in -@samp{(@var{number},@var{%a0})}. When used with the @var{pc}, the -@var{number} may be omitted (with an address register, omitting the -@var{number} produces Address Register Indirect mode). - -@item Index -@samp{@var{number}(@var{apc},@var{register}.@var{size}*@var{scale})} - -The @var{number} may be omitted, or it may appear within the -parentheses. The @var{apc} may be omitted. The @var{register} and the -@var{apc} may appear in either order. If both @var{apc} and -@var{register} are address registers, and the @var{size} and @var{scale} -are omitted, then the first register is taken as the base register, and -the second as the index register. - -@item Postindex -@samp{([@var{number},@var{apc}],@var{register}.@var{size}*@var{scale},@var{onumber})} - -The @var{onumber}, or the @var{register}, or both, may be omitted. -Either the @var{number} or the @var{apc} may be omitted, but not both. - -@item Preindex -@samp{([@var{number},@var{apc},@var{register}.@var{size}*@var{scale}],@var{onumber})} - -The @var{number}, or the @var{apc}, or the @var{register}, or any two of -them, may be omitted. The @var{onumber} may be omitted. The -@var{register} and the @var{apc} may appear in either order. If both -@var{apc} and @var{register} are address registers, and the @var{size} -and @var{scale} are omitted, then the first register is taken as the -base register, and the second as the index register. -@end table - -@node M68K-Float -@section Floating Point - -@cindex floating point, M680x0 -@cindex M680x0 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. - -@table @code -@cindex @code{float} directive, M680x0 -@item .float -@code{Single} precision floating point constants. - -@cindex @code{double} directive, M680x0 -@item .double -@code{Double} precision floating point constants. - -@cindex @code{extend} directive M680x0 -@cindex @code{ldouble} directive M680x0 -@item .extend -@itemx .ldouble -@code{Extended} precision (@code{long double}) floating point constants. -@end table - -@node M68K-Directives -@section 680x0 Machine Directives - -@cindex M680x0 directives -@cindex directives, M680x0 -In order to be compatible with the Sun assembler the 680x0 assembler -understands the following directives. - -@table @code -@cindex @code{data1} directive, M680x0 -@item .data1 -This directive is identical to a @code{.data 1} directive. - -@cindex @code{data2} directive, M680x0 -@item .data2 -This directive is identical to a @code{.data 2} directive. - -@cindex @code{even} directive, M680x0 -@item .even -This directive is a special case of the @code{.align} directive; it -aligns the output to an even byte boundary. - -@cindex @code{skip} directive, M680x0 -@item .skip -This directive is identical to a @code{.space} directive. -@end table - -@need 2000 -@node M68K-opcodes -@section Opcodes - -@cindex M680x0 opcodes -@cindex opcodes, M680x0 -@cindex instruction set, M680x0 -@c doc@cygnus.com: I don't see any point in the following -@c paragraph. Bugs are bugs; how does saying this -@c help anyone? -@ignore -Danger: Several bugs have been found in the opcode table (and -fixed). More bugs may exist. Be careful when using obscure -instructions. -@end ignore - -@menu -* M68K-Branch:: Branch Improvement -* M68K-Chars:: Special Characters -@end menu - -@node M68K-Branch -@subsection Branch Improvement - -@cindex pseudo-opcodes, M680x0 -@cindex M680x0 pseudo-opcodes -@cindex branch improvement, M680x0 -@cindex M680x0 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 @samp{j} for -@samp{b} at the start of a Motorola mnemonic. - -The following table summarizes the pseudo-operations. A @code{*} flags -cases that are more fully described after the table: - -@smallexample - Displacement - +------------------------------------------------- - | 68020 68000/10 -Pseudo-Op |BYTE WORD LONG LONG non-PC relative - +------------------------------------------------- - jbsr |bsrs bsr bsrl jsr jsr - jra |bras bra bral jmp jmp -* jXX |bXXs bXX bXXl bNXs;jmpl bNXs;jmp -* dbXX |dbXX dbXX dbXX; bra; jmpl -* fjXX |fbXXw fbXXw fbXXl fbNXw;jmp - -XX: condition -NX: negative of condition XX - -@end smallexample -@center @code{*}---see full description below - -@table @code -@item jbsr -@itemx jra -These are the simplest jump pseudo-operations; they always map to one -particular machine instruction, depending on the displacement to the -branch target. - -@item j@var{XX} -Here, @samp{j@var{XX}} stands for an entire family of pseudo-operations, -where @var{XX} is a conditional branch or condition-code test. The full -list of pseudo-ops in this family is: -@smallexample - jhi jls jcc jcs jne jeq jvc - jvs jpl jmi jge jlt jgt jle -@end smallexample - -For the cases of non-PC relative displacements and long displacements on -the 68000 or 68010, @code{@value{AS}} issues a longer code fragment in terms of -@var{NX}, the opposite condition to @var{XX}. For example, for the -non-PC relative case: -@smallexample - j@var{XX} foo -@end smallexample -gives -@smallexample - b@var{NX}s oof - jmp foo - oof: -@end smallexample - -@item db@var{XX} -The full family of pseudo-operations covered here is -@smallexample - dbhi dbls dbcc dbcs dbne dbeq dbvc - dbvs dbpl dbmi dbge dblt dbgt dble - dbf dbra dbt -@end smallexample - -Other than for word and byte displacements, when the source reads -@samp{db@var{XX} foo}, @code{@value{AS}} emits -@smallexample - db@var{XX} oo1 - bra oo2 - oo1:jmpl foo - oo2: -@end smallexample - -@item fj@var{XX} -This family includes -@smallexample - 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 -@end smallexample - -For branch targets that are not PC relative, @code{@value{AS}} emits -@smallexample - fb@var{NX} oof - jmp foo - oof: -@end smallexample -when it encounters @samp{fj@var{XX} foo}. - -@end table - -@node M68K-Chars -@subsection Special Characters - -@cindex special characters, M680x0 -@cindex M680x0 immediate character -@cindex immediate character, M680x0 -@cindex M680x0 line comment character -@cindex line comment character, M680x0 -@cindex comments, M680x0 -The immediate character is @samp{#} for Sun compatibility. The -line-comment character is @samp{|} (unless the @samp{--bitwise-or} -option is used). If a @samp{#} appears at the beginning of a line, it -is treated as a comment unless it looks like @samp{# line file}, in -which case it is treated normally. - diff --git a/gas/doc/c-mips.texi b/gas/doc/c-mips.texi deleted file mode 100644 index 523dda3799f..00000000000 --- a/gas/doc/c-mips.texi +++ /dev/null @@ -1,257 +0,0 @@ -@c Copyright (C) 1991, 92, 93, 94, 95, 1997 Free Software Foundation, Inc. -@c This is part of the GAS manual. -@c For copying conditions, see the file as.texinfo. -@ifset GENERIC -@page -@node MIPS-Dependent -@chapter MIPS Dependent Features -@end ifset -@ifclear GENERIC -@node Machine Dependencies -@chapter MIPS Dependent Features -@end ifclear - -@cindex MIPS processor -@sc{gnu} @code{@value{AS}} for @sc{mips} architectures supports several -different @sc{mips} processors, and MIPS ISA levels I through IV. For -information about the @sc{mips} instruction set, see @cite{MIPS RISC -Architecture}, by Kane and Heindrich (Prentice-Hall). For an overview -of @sc{mips} assembly conventions, see ``Appendix D: Assembly Language -Programming'' in the same work. - -@menu -* MIPS Opts:: Assembler options -* MIPS Object:: ECOFF object code -* MIPS Stabs:: Directives for debugging information -* MIPS ISA:: Directives to override the ISA level -* MIPS autoextend:: Directives for extending MIPS 16 bit instructions -* MIPS insn:: Directive to mark data as an instruction -* MIPS option stack:: Directives to save and restore options -@end menu - -@node MIPS Opts -@section Assembler options - -The @sc{mips} configurations of @sc{gnu} @code{@value{AS}} support these -special options: - -@table @code -@cindex @code{-G} option (MIPS) -@item -G @var{num} -This option sets the largest size of an object that can be referenced -implicitly with the @code{gp} register. It is only accepted for targets -that use @sc{ecoff} format. The default value is 8. - -@cindex @code{-EB} option (MIPS) -@cindex @code{-EL} option (MIPS) -@cindex MIPS big-endian output -@cindex MIPS little-endian output -@cindex big-endian output, MIPS -@cindex little-endian output, MIPS -@item -EB -@itemx -EL -Any @sc{mips} configuration of @code{@value{AS}} can select big-endian or -little-endian output at run time (unlike the other @sc{gnu} development -tools, which must be configured for one or the other). Use @samp{-EB} -to select big-endian output, and @samp{-EL} for little-endian. - -@cindex MIPS architecture options -@item -mips1 -@itemx -mips2 -@itemx -mips3 -@itemx -mips4 -Generate code for a particular MIPS Instruction Set Architecture level. -@samp{-mips1} corresponds to the @sc{r2000} and @sc{r3000} processors, -@samp{-mips2} to the @sc{r6000} processor, @samp{-mips3} to the -@sc{r4000} processor, and @samp{-mips4} to the @sc{r8000} and -@sc{r10000} processors. You can also switch instruction sets during the -assembly; see @ref{MIPS ISA,, Directives to override the ISA level}. - -@item -mips16 -@itemx -no-mips16 -Generate code for the MIPS 16 processor. This is equivalent to putting -@samp{.set mips16} at the start of the assembly file. @samp{-no-mips16} -turns off this option. - -@item -m4010 -@itemx -no-m4010 -Generate code for the LSI @sc{r4010} chip. This tells the assembler to -accept the @sc{r4010} specific instructions (@samp{addciu}, @samp{ffc}, -etc.), and to not schedule @samp{nop} instructions around accesses to -the @samp{HI} and @samp{LO} registers. @samp{-no-m4010} turns off this -option. - -@item -m4650 -@itemx -no-m4650 -Generate code for the MIPS @sc{r4650} chip. This tells the assembler to accept -the @samp{mad} and @samp{madu} instruction, and to not schedule @samp{nop} -instructions around accesses to the @samp{HI} and @samp{LO} registers. -@samp{-no-m4650} turns off this option. - -@itemx -m3900 -@itemx -no-m3900 -@itemx -m4100 -@itemx -no-m4100 -For each option @samp{-m@var{nnnn}}, generate code for the MIPS -@sc{r@var{nnnn}} chip. This tells the assembler to accept instructions -specific to that chip, and to schedule for that chip's hazards. - -@item -mcpu=@var{cpu} -Generate code for a particular MIPS cpu. It is exactly equivalent to -@samp{-m@var{cpu}}, except that there are more value of @var{cpu} -understood. Valid @var{cpu} value are: - -@quotation -2000, -3000, -3900, -4000, -4010, -4100, -4111, -4300, -4400, -4600, -4650, -5000, -6000, -8000, -10000 -@end quotation - - -@cindex @code{-nocpp} ignored (MIPS) -@item -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 -@sc{gnu} @code{@value{AS}}, there is no need for @samp{-nocpp}, because the -@sc{gnu} assembler itself never runs the C preprocessor. - -@item --trap -@itemx --no-break -@c FIXME! (1) reflect these options (next item too) in option summaries; -@c (2) stop teasing, say _which_ instructions expanded _how_. -@code{@value{AS}} automatically macro expands certain division and -multiplication instructions to check for overflow and division by zero. This -option causes @code{@value{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. - -@item --break -@itemx --no-trap -Generate code to take a break exception rather than a trap exception when an -error is detected. This is the default. -@end table - -@node MIPS Object -@section MIPS ECOFF object code - -@cindex ECOFF sections -@cindex MIPS ECOFF sections -Assembling for a @sc{mips} @sc{ecoff} target supports some additional sections -besides the usual @code{.text}, @code{.data} and @code{.bss}. The -additional sections are @code{.rdata}, used for read-only data, -@code{.sdata}, used for small data, and @code{.sbss}, used for small -common objects. - -@cindex small objects, MIPS ECOFF -@cindex @code{gp} register, MIPS -When assembling for @sc{ecoff}, the assembler uses the @code{$gp} (@code{$28}) -register to form the address of a ``small object''. Any object in the -@code{.sdata} or @code{.sbss} sections is considered ``small'' in this sense. -For external objects, or for objects in the @code{.bss} section, you can use -the @code{@value{GCC}} @samp{-G} option to control the size of objects addressed via -@code{$gp}; the default value is 8, meaning that a reference to any object -eight bytes or smaller uses @code{$gp}. Passing @samp{-G 0} to -@code{@value{AS}} prevents it from using the @code{$gp} register on the basis -of object size (but the assembler uses @code{$gp} for objects in @code{.sdata} -or @code{sbss} in any case). The size of an object in the @code{.bss} section -is set by the @code{.comm} or @code{.lcomm} directive that defines it. The -size of an external object may be set with the @code{.extern} directive. For -example, @samp{.extern sym,4} declares that the object at @code{sym} is 4 bytes -in length, whie leaving @code{sym} otherwise undefined. - -Using small @sc{ecoff} objects requires linker support, and assumes that the -@code{$gp} register is correctly initialized (normally done automatically by -the startup code). @sc{mips} @sc{ecoff} assembly code must not modify the -@code{$gp} register. - -@node MIPS Stabs -@section Directives for debugging information - -@cindex MIPS debugging directives -@sc{mips} @sc{ecoff} @code{@value{AS}} supports several directives used for -generating debugging information which are not support by traditional @sc{mips} -assemblers. These are @code{.def}, @code{.endef}, @code{.dim}, @code{.file}, -@code{.scl}, @code{.size}, @code{.tag}, @code{.type}, @code{.val}, -@code{.stabd}, @code{.stabn}, and @code{.stabs}. The debugging information -generated by the three @code{.stab} directives can only be read by @sc{gdb}, -not by traditional @sc{mips} debuggers (this enhancement is required to fully -support C++ debugging). These directives are primarily used by compilers, not -assembly language programmers! - -@node MIPS ISA -@section Directives to override the ISA level - -@cindex MIPS ISA override -@kindex @code{.set mips@var{n}} -@sc{gnu} @code{@value{AS}} supports an additional directive to change -the @sc{mips} Instruction Set Architecture level on the fly: @code{.set -mips@var{n}}. @var{n} should be a number from 0 to 4. A value from 1 -to 4 makes the assembler accept instructions for the corresponding -@sc{isa} level, from that point on in the assembly. @code{.set -mips@var{n}} affects not only which instructions are permitted, but also -how certain macros are expanded. @code{.set mips0} restores the -@sc{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 @sc{r4000} instructions while -assembling in 32 bit mode. Use this directive with care! - -The directive @samp{.set mips16} puts the assembler into MIPS 16 mode, -in which it will assemble instructions for the MIPS 16 processor. Use -@samp{.set nomips16} to return to normal 32 bit mode. - -Traditional @sc{mips} assemblers do not support this directive. - -@node MIPS autoextend -@section Directives for extending MIPS 16 bit instructions - -@kindex @code{.set autoextend} -@kindex @code{.set noautoextend} -By default, MIPS 16 instructions are automatically extended to 32 bits -when necessary. The directive @samp{.set noautoextend} will turn this -off. When @samp{.set noautoextend} is in effect, any 32 bit instruction -must be explicitly extended with the @samp{.e} modifier (e.g., -@samp{li.e $4,1000}). The directive @samp{.set autoextend} may be used -to once again automatically extend instructions when necessary. - -This directive is only meaningful when in MIPS 16 mode. Traditional -@sc{mips} assemblers do not support this directive. - -@node MIPS insn -@section Directive to mark data as an instruction - -@kindex @code{.insn} -The @code{.insn} directive tells @code{@value{AS}} that the following -data is actually instructions. This makes a difference in MIPS 16 mode: -when loading the address of a label which precedes instructions, -@code{@value{AS}} automatically adds 1 to the value, so that jumping to -the loaded address will do the right thing. - -@node MIPS option stack -@section Directives to save and restore options - -@cindex MIPS option stack -@kindex @code{.set push} -@kindex @code{.set pop} -The directives @code{.set push} and @code{.set pop} may be used to save -and restore the current settings for all the options which are -controlled by @code{.set}. The @code{.set push} directive saves the -current settings on a stack. The @code{.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 @sc{mips} assemblers do not support these directives. diff --git a/gas/doc/c-ns32k.texi b/gas/doc/c-ns32k.texi deleted file mode 100644 index 29c61d94785..00000000000 --- a/gas/doc/c-ns32k.texi +++ /dev/null @@ -1,30 +0,0 @@ -@c Copyright (c) 1991, 1992, 1993, 1994, 1995 Free Software Foundation, Inc. -@c This is part of the GAS manual. -@c For copying conditions, see the file as.texinfo. - -@ignore -@c FIXME! Stop ignoring when filled in. -@node 32x32 -@chapter 32x32 - -@section Options -The 32x32 version of @code{@value{AS}} accepts a @samp{-m32032} option to -specify thiat it is compiling for a 32032 processor, or a -@samp{-m32532} to specify that it is compiling for a 32532 option. -The default (if neither is specified) is chosen when the assembler -is compiled. - -@section Syntax -I don't know anything about the 32x32 syntax assembled by -@code{@value{AS}}. Someone who undersands the processor (I've never seen -one) and the possible syntaxes should write this section. - -@section Floating Point -The 32x32 uses @sc{ieee} floating point numbers, but @code{@value{AS}} -only creates single or double precision values. I don't know if the -32x32 understands extended precision numbers. - -@section 32x32 Machine Directives -The 32x32 has no machine dependent directives. - -@end ignore diff --git a/gas/doc/c-pj.texi b/gas/doc/c-pj.texi deleted file mode 100644 index 70600157bb4..00000000000 --- a/gas/doc/c-pj.texi +++ /dev/null @@ -1,28 +0,0 @@ -@c Copyright (C) 1999 Free Software Foundation, Inc. -@c This is part of the GAS manual. -@c For copying conditions, see the file as.texinfo. -@page -@node PJ-Dependent -@chapter picoJava Dependent Features - -@cindex PJ support -@menu -* PJ Options:: Options -@end menu - -@node PJ Options -@section Options - -@cindex PJ options -@cindex options, PJ -@code{@value{AS}} has two addiitional command-line options for the picoJava -architecture. -@table @code -@item -ml -This option selects little endian data output. - -@item -mb -This option selects big endian data output. -@end table - - diff --git a/gas/doc/c-sh.texi b/gas/doc/c-sh.texi deleted file mode 100644 index e20f5543788..00000000000 --- a/gas/doc/c-sh.texi +++ /dev/null @@ -1,272 +0,0 @@ -@c Copyright (C) 1991, 92, 93, 94, 95, 1997 Free Software Foundation, Inc. -@c This is part of the GAS manual. -@c For copying conditions, see the file as.texinfo. -@page -@node SH-Dependent -@chapter Hitachi SH Dependent Features - -@cindex SH support -@menu -* SH Options:: Options -* SH Syntax:: Syntax -* SH Floating Point:: Floating Point -* SH Directives:: SH Machine Directives -* SH Opcodes:: Opcodes -@end menu - -@node SH Options -@section Options - -@cindex SH options (none) -@cindex options, SH (none) -@code{@value{AS}} has no additional command-line options for the Hitachi -SH family. - -@node SH Syntax -@section Syntax - -@menu -* SH-Chars:: Special Characters -* SH-Regs:: Register Names -* SH-Addressing:: Addressing Modes -@end menu - -@node SH-Chars -@subsection Special Characters - -@cindex line comment character, SH -@cindex SH line comment character -@samp{!} is the line comment character. - -@cindex line separator, SH -@cindex statement separator, SH -@cindex SH line separator -You can use @samp{;} instead of a newline to separate statements. - -@cindex symbol names, @samp{$} in -@cindex @code{$} in symbol names -Since @samp{$} has no special meaning, you may use it in symbol names. - -@node SH-Regs -@subsection Register Names - -@cindex SH registers -@cindex registers, SH -You can use the predefined symbols @samp{r0}, @samp{r1}, @samp{r2}, -@samp{r3}, @samp{r4}, @samp{r5}, @samp{r6}, @samp{r7}, @samp{r8}, -@samp{r9}, @samp{r10}, @samp{r11}, @samp{r12}, @samp{r13}, @samp{r14}, -and @samp{r15} to refer to the SH registers. - -The SH also has these control registers: - -@table @code -@item pr -procedure register (holds return address) - -@item pc -program counter - -@item mach -@itemx macl -high and low multiply accumulator registers - -@item sr -status register - -@item gbr -global base register - -@item vbr -vector base register (for interrupt vectors) -@end table - -@node SH-Addressing -@subsection Addressing Modes - -@cindex addressing modes, SH -@cindex SH addressing modes -@code{@value{AS}} understands the following addressing modes for the SH. -@code{R@var{n}} in the following refers to any of the numbered -registers, but @emph{not} the control registers. - -@table @code -@item R@var{n} -Register direct - -@item @@R@var{n} -Register indirect - -@item @@-R@var{n} -Register indirect with pre-decrement - -@item @@R@var{n}+ -Register indirect with post-increment - -@item @@(@var{disp}, R@var{n}) -Register indirect with displacement - -@item @@(R0, R@var{n}) -Register indexed - -@item @@(@var{disp}, GBR) -@code{GBR} offset - -@item @@(R0, GBR) -GBR indexed - -@item @var{addr} -@itemx @@(@var{disp}, PC) -PC relative address (for branch or for addressing memory). The -@code{@value{AS}} implementation allows you to use the simpler form -@var{addr} anywhere a PC relative address is called for; the alternate -form is supported for compatibility with other assemblers. - -@item #@var{imm} -Immediate data -@end table - -@node SH Floating Point -@section Floating Point - -@cindex floating point, SH (@sc{ieee}) -@cindex SH floating point (@sc{ieee}) -The SH family has no hardware floating point, but the @code{.float} -directive generates @sc{ieee} floating-point numbers for compatibility -with other development tools. - -@node SH Directives -@section SH Machine Directives - -@cindex SH machine directives -@cindex machine directives, SH -@cindex @code{uaword} directive, SH -@cindex @code{ualong} directive, SH - -@table @code -@item uaword -@itemx ualong -@code{@value{AS}} will issue a warning when a misaligned @code{.word} or -@code{.long} directive is used. You may use @code{.uaword} or -@code{.ualong} to indicate that the value is intentionally misaligned. -@end table - -@node SH Opcodes -@section Opcodes - -@cindex SH opcode summary -@cindex opcode summary, SH -@cindex mnemonics, SH -@cindex instruction summary, SH -For detailed information on the SH machine instruction set, see -@cite{SH-Microcomputer User's Manual} (Hitachi Micro Systems, Inc.). - -@code{@value{AS}} implements all the standard SH opcodes. No additional -pseudo-instructions are needed on this family. Note, however, that -because @code{@value{AS}} supports a simpler form of PC-relative -addressing, you may simply write (for example) - -@example -mov.l bar,r0 -@end example - -@noindent -where other assemblers might require an explicit displacement to -@code{bar} from the program counter: - -@example -mov.l @@(@var{disp}, PC) -@end example - -@ifset SMALL -@c this table, due to the multi-col faking and hardcoded order, looks silly -@c except in smallbook. See comments below "@set SMALL" near top of this file. - -Here is a summary of SH opcodes: - -@page -@smallexample -@i{Legend:} -Rn @r{a numbered register} -Rm @r{another numbered register} -#imm @r{immediate data} -disp @r{displacement} -disp8 @r{8-bit displacement} -disp12 @r{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 -@page -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 -@end smallexample -@end ifset - -@ifset Hitachi-all -@ifclear GENERIC -@raisesections -@end ifclear -@end ifset - diff --git a/gas/doc/c-sparc.texi b/gas/doc/c-sparc.texi deleted file mode 100644 index ab54eb2d889..00000000000 --- a/gas/doc/c-sparc.texi +++ /dev/null @@ -1,194 +0,0 @@ -@c Copyright (C) 1991, 1992, 1993, 1994, 1995 Free Software Foundation, Inc. -@c This is part of the GAS manual. -@c For copying conditions, see the file as.texinfo. -@ifset GENERIC -@page -@node Sparc-Dependent -@chapter SPARC Dependent Features -@end ifset -@ifclear GENERIC -@node Machine Dependencies -@chapter SPARC Dependent Features -@end ifclear - -@cindex SPARC support -@menu -* Sparc-Opts:: Options -* Sparc-Aligned-Data:: Option to enforce aligned data -* Sparc-Float:: Floating Point -* Sparc-Directives:: Sparc Machine Directives -@end menu - -@node Sparc-Opts -@section Options - -@cindex options for SPARC -@cindex SPARC options -@cindex architectures, SPARC -@cindex SPARC architectures -The SPARC 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. - -By default, @code{@value{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 (@code{sparc64-*-*}) GAS will not bump -passed 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. - -@c The order here is the same as the order of enum sparc_opcode_arch_val -@c to give the user a sense of the order of the "bumping". - -@table @code -@kindex -Av6 -@kindex Av7 -@kindex -Av8 -@kindex -Asparclet -@kindex -Asparclite -@kindex -Av9 -@kindex -Av9a -@item -Av6 | -Av7 | -Av8 | -Asparclet | -Asparclite -@itemx -Av8plus | -Av8plusa | -Av9 | -Av9a -Use one of the @samp{-A} options to select one of the SPARC -architectures explicitly. If you select an architecture explicitly, -@code{@value{AS}} reports a fatal error if it encounters an instruction -or feature requiring an incompatible or higher level. - -@samp{-Av8plus} and @samp{-Av8plusa} select a 32 bit environment. - -@samp{-Av9} and @samp{-Av9a} select a 64 bit environment and are not -available unless GAS is explicitly configured with 64 bit environment -support. - -@samp{-Av8plusa} and @samp{-Av9a} enable the SPARC V9 instruction set with -UltraSPARC extensions. - -@item -xarch=v8plus | -xarch=v8plusa -For compatibility with the Solaris v9 assembler. These options are -equivalent to -Av8plus and -Av8plusa, respectively. - -@item -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). - -@item -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. -@end table - -@node Sparc-Aligned-Data -@section Enforcing aligned data - -@cindex data alignment on SPARC -@cindex SPARC data alignment -SPARC GAS normally permits data to be misaligned. For example, it -permits the @code{.long} pseudo-op to be used on a byte boundary. -However, the native SunOS and Solaris assemblers issue an error when -they see misaligned data. - -@kindex --enforce-aligned-data -You can use the @code{--enforce-aligned-data} option to make SPARC GAS -also issue an error about misaligned data, just as the SunOS and Solaris -assemblers do. - -The @code{--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 @code{packed} attribute). -You may have to assemble with GAS in order to initialize packed data -structures in your own code. - -@ignore -@c FIXME: (sparc) Fill in "syntax" section! -@c subsection syntax -I don't know anything about Sparc syntax. Someone who does -will have to write this section. -@end ignore - -@node Sparc-Float -@section Floating Point - -@cindex floating point, SPARC (@sc{ieee}) -@cindex SPARC floating point (@sc{ieee}) -The Sparc uses @sc{ieee} floating-point numbers. - -@node Sparc-Directives -@section Sparc Machine Directives - -@cindex SPARC machine directives -@cindex machine directives, SPARC -The Sparc version of @code{@value{AS}} supports the following additional -machine directives: - -@table @code -@cindex @code{align} directive, SPARC -@item .align -This must be followed by the desired alignment in bytes. - -@cindex @code{common} directive, SPARC -@item .common -This must be followed by a symbol name, a positive number, and -@code{"bss"}. This behaves somewhat like @code{.comm}, but the -syntax is different. - -@cindex @code{half} directive, SPARC -@item .half -This is functionally identical to @code{.short}. - -@cindex @code{nword} directive, SPARC -@item .nword -On the Sparc, the @code{.nword} directive produces native word sized value, -ie. if assembling with -32 it is equivalent to @code{.word}, if assembling -with -64 it is equivalent to @code{.xword}. - -@cindex @code{proc} directive, SPARC -@item .proc -This directive is ignored. Any text following it on the same -line is also ignored. - -@cindex @code{register} directive, SPARC -@item .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 @code{#scratch}, -it is a scratch register, if it is @code{#ignore}, it just surpresses 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. - -@cindex @code{reserve} directive, SPARC -@item .reserve -This must be followed by a symbol name, a positive number, and -@code{"bss"}. This behaves somewhat like @code{.lcomm}, but the -syntax is different. - -@cindex @code{seg} directive, SPARC -@item .seg -This must be followed by @code{"text"}, @code{"data"}, or -@code{"data1"}. It behaves like @code{.text}, @code{.data}, or -@code{.data 1}. - -@cindex @code{skip} directive, SPARC -@item .skip -This is functionally identical to the @code{.space} directive. - -@cindex @code{word} directive, SPARC -@item .word -On the Sparc, the @code{.word} directive produces 32 bit values, -instead of the 16 bit values it produces on many other machines. - -@cindex @code{xword} directive, SPARC -@item .xword -On the Sparc V9 processor, the @code{.xword} directive produces -64 bit values. -@end table diff --git a/gas/doc/c-v850.texi b/gas/doc/c-v850.texi deleted file mode 100644 index 5416e0f1b8f..00000000000 --- a/gas/doc/c-v850.texi +++ /dev/null @@ -1,363 +0,0 @@ -@c Copyright (C) 1997, 1998 Free Software Foundation, Inc. -@c This is part of the GAS manual. -@c For copying conditions, see the file as.texinfo. - -@node V850-Dependent -@chapter v850 Dependent Features - -@cindex V850 support -@menu -* V850 Options:: Options -* V850 Syntax:: Syntax -* V850 Floating Point:: Floating Point -* V850 Directives:: V850 Machine Directives -* V850 Opcodes:: Opcodes -@end menu - -@node V850 Options -@section Options -@cindex V850 options (none) -@cindex options for V850 (none) -@code{@value{AS}} supports the following additional command-line options -for the V850 processor family: - -@cindex command line options, V850 -@cindex V850 command line options -@table @code - -@cindex @code{-wsigned_overflow} command line option, V850 -@item -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. - -@cindex @code{-wunsigned_overflow} command line option, V850 -@item -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. - -@cindex @code{-mv850} command line option, V850 -@item -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. - -@cindex @code{-mv850e} command line option, V850 -@item -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. - -@cindex @code{-mv850any} command line option, V850 -@item -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. - -@end table - - -@node V850 Syntax -@section Syntax -@menu -* V850-Chars:: Special Characters -* V850-Regs:: Register Names -@end menu - -@node V850-Chars -@subsection Special Characters - -@cindex line comment character, V850 -@cindex V850 line comment character -@samp{#} is the line comment character. -@node V850-Regs -@subsection Register Names - -@cindex V850 register names -@cindex register names, V850 -@code{@value{AS}} supports the following names for registers: -@table @code -@cindex @code{zero} register, V850 -@item general register 0 -r0, zero -@item general register 1 -r1 -@item general register 2 -r2, hp -@cindex @code{sp} register, V850 -@item general register 3 -r3, sp -@cindex @code{gp} register, V850 -@item general register 4 -r4, gp -@cindex @code{tp} register, V850 -@item general register 5 -r5, tp -@item general register 6 -r6 -@item general register 7 -r7 -@item general register 8 -r8 -@item general register 9 -r9 -@item general register 10 -r10 -@item general register 11 -r11 -@item general register 12 -r12 -@item general register 13 -r13 -@item general register 14 -r14 -@item general register 15 -r15 -@item general register 16 -r16 -@item general register 17 -r17 -@item general register 18 -r18 -@item general register 19 -r19 -@item general register 20 -r20 -@item general register 21 -r21 -@item general register 22 -r22 -@item general register 23 -r23 -@item general register 24 -r24 -@item general register 25 -r25 -@item general register 26 -r26 -@item general register 27 -r27 -@item general register 28 -r28 -@item general register 29 -r29 -@cindex @code{ep} register, V850 -@item general register 30 -r30, ep -@cindex @code{lp} register, V850 -@item general register 31 -r31, lp -@cindex @code{eipc} register, V850 -@item system register 0 -eipc -@cindex @code{eipsw} register, V850 -@item system register 1 -eipsw -@cindex @code{fepc} register, V850 -@item system register 2 -fepc -@cindex @code{fepsw} register, V850 -@item system register 3 -fepsw -@cindex @code{ecr} register, V850 -@item system register 4 -ecr -@cindex @code{psw} register, V850 -@item system register 5 -psw -@cindex @code{ctpc} register, V850 -@item system register 16 -ctpc -@cindex @code{ctpsw} register, V850 -@item system register 17 -ctpsw -@cindex @code{dbpc} register, V850 -@item system register 18 -dbpc -@cindex @code{dbpsw} register, V850 -@item system register 19 -dbpsw -@cindex @code{ctbp} register, V850 -@item system register 20 -ctbp -@end table - -@node V850 Floating Point -@section Floating Point - -@cindex floating point, V850 (@sc{ieee}) -@cindex V850 floating point (@sc{ieee}) -The V850 family uses @sc{ieee} floating-point numbers. - -@node V850 Directives -@section V850 Machine Directives - -@cindex machine directives, V850 -@cindex V850 machine directives -@table @code -@cindex @code{offset} directive, V850 -@item .offset @var{<expression>} -Moves the offset into the current section to the specified amount. - -@cindex @code{section} directive, V850 -@item .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". - -@cindex @code{.v850} directive, V850 -@item .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. - -@cindex @code{.v850e} directive, V850 -@item .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. - -@end table - -@node V850 Opcodes -@section Opcodes - -@cindex V850 opcodes -@cindex opcodes for V850 -@code{@value{AS}} implements all the standard V850 opcodes. - -@code{@value{AS}} also implements the following pseudo ops: - -@table @code - -@cindex @code{hi0} pseudo-op, V850 -@item hi0() -Computes the higher 16 bits of the given expression and stores it into -the immediate operand field of the given instruction. For example: - - @samp{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 mutliplies it by the lower 16 bits in register 5, putting -the result into register 6. - -@cindex @code{lo} pseudo-op, V850 -@item lo() -Computes the lower 16 bits of the given expression and stores it into -the immediate operand field of the given instruction. For example: - - @samp{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. - -@cindex @code{hi} pseudo-op, V850 -@item 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: - - @samp{movhi hi(here), r0, r6} - @samp{movea lo(here), r6, r6} - -The reason for this special behaviour is that movea performs a sign -extention 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. - -@cindex @code{hilo} pseudo-op, V850 -@item 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: - - @samp{mov hilo(here), r6} - -computes the absolute address of label 'here' and puts the result into -register 6. - -@cindex @code{sdaoff} pseudo-op, V850 -@item 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: - - @samp{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 @samp{--defsym __gp=<value>} -command line option]. - -@cindex @code{tdaoff} pseudo-op, V850 -@item 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: - - @samp{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 @samp{--defsym __ep=<value>} -command line option]. - -@cindex @code{zdaoff} pseudo-op, V850 -@item 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: - - @samp{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). - -@cindex @code{ctoff} pseudo-op, V850 -@item 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: - - @samp{callt ctoff(table_func1)} - -will put the call the function whoes address is held in the call table -at the location labeled 'table_func1'. - -@end table - - -For information on the V850 instruction set, see @cite{V850 -Family 32-/16-Bit single-Chip Microcontroller Architecture Manual} from NEC. -Ltd. - diff --git a/gas/doc/c-vax.texi b/gas/doc/c-vax.texi deleted file mode 100644 index b13d7e5a493..00000000000 --- a/gas/doc/c-vax.texi +++ /dev/null @@ -1,357 +0,0 @@ -@c Copyright (C) 1991, 92, 93, 94, 95, 96, 1998 Free Software Foundation, Inc. -@c This is part of the GAS manual. -@c For copying conditions, see the file as.texinfo. -@c VAX/VMS description exhanced and corrected by Klaus K"aempf, kkaempf@progis.de -@ifset GENERIC -@node Vax-Dependent -@chapter VAX Dependent Features -@cindex VAX support - -@end ifset -@ifclear GENERIC -@node Machine Dependencies -@chapter VAX Dependent Features -@cindex VAX support - -@end ifclear - -@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 -@end menu - - -@node VAX-Opts -@section VAX Command-Line Options - -@cindex command-line options ignored, VAX -@cindex VAX command-line options ignored -The Vax version of @code{@value{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. - -@table @code -@cindex @code{-D}, ignored on VAX -@cindex @code{-S}, ignored on VAX -@cindex @code{-T}, ignored on VAX -@item @code{-D} (Debug) -@itemx @code{-S} (Symbol Table) -@itemx @code{-T} (Token Trace) -These are obsolete options used to debug old assemblers. - -@cindex @code{-d}, VAX option -@item @code{-d} (Displacement size for JUMPs) -This option expects a number following the @samp{-d}. Like options -that expect filenames, the number may immediately follow the -@samp{-d} (old standard) or constitute the whole of the command line -argument that follows @samp{-d} (@sc{gnu} standard). - -@cindex @code{-V}, redundant on VAX -@item @code{-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. @code{@value{AS}} always does this, so this -option is redundant. - -@cindex @code{-J}, ignored on VAX -@item @code{-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. - -@cindex @code{-t}, ignored on VAX -@item @code{-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 @code{@value{AS}} does not use a temporary disk file, this -option makes no difference. @samp{-t} needs exactly one -filename. -@end table - -@cindex VMS (VAX) options -@cindex options for VAX/VMS -@cindex VAX/VMS options -@cindex Vax-11 C compatibility -@cindex symbols with uppercase, VAX/VMS -The Vax version of the assembler accepts additional options when -compiled for VMS: - -@table @samp -@cindex @samp{-h} option, VAX/VMS -@item -h @var{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 @samp{-h @var{n}} option determines how we map names. This takes -several values. No @samp{-h} switch at all allows case hacking as -described above. A value of zero (@samp{-h0}) implies names should be -upper case, and inhibits the case hack. A value of 2 (@samp{-h2}) -implies names should be all lower case, with no case hack. A value of 3 -(@samp{-h3}) implies that case should be preserved. The value 1 is -unused. The @code{-H} option directs @code{@value{AS}} to display -every mapped symbol during assembly. - -Symbols whose names include a dollar sign @samp{$} 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. - -@cindex @samp{-+} option, VAX/VMS -@item -+ -The @samp{-+} option causes @code{@value{AS}} to truncate any symbol -name larger than 31 characters. The @samp{-+} option also prevents some -code following the @samp{_main} symbol normally added to make the object -file compatible with Vax-11 "C". - -@cindex @samp{-1} option, VAX/VMS -@item -1 -This option is ignored for backward compatibility with @code{@value{AS}} -version 1.x. - -@cindex @samp{-H} option, VAX/VMS -@item -H -The @samp{-H} option causes @code{@value{AS}} to print every symbol -which was changed by case mapping. -@end table - -@node VAX-float -@section VAX Floating Point - -@cindex VAX floating point -@cindex floating point, VAX -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. - -@code{D}, @code{F}, @code{G} and @code{H} floating point formats -are understood. - -Immediate floating literals (@emph{e.g.} @samp{S`$6.9}) -are rendered correctly. Again, rounding is towards zero in the -boundary case. - -@cindex @code{float} directive, VAX -@cindex @code{double} directive, VAX -The @code{.float} directive produces @code{f} format numbers. -The @code{.double} directive produces @code{d} format numbers. - -@node VAX-directives -@section Vax Machine Directives - -@cindex machine directives, VAX -@cindex 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. - -@cindex wide floating point directives, VAX -@table @code -@cindex @code{dfloat} directive, VAX -@item .dfloat -This expects zero or more flonums, separated by commas, and -assembles Vax @code{d} format 64-bit floating point constants. - -@cindex @code{ffloat} directive, VAX -@item .ffloat -This expects zero or more flonums, separated by commas, and -assembles Vax @code{f} format 32-bit floating point constants. - -@cindex @code{gfloat} directive, VAX -@item .gfloat -This expects zero or more flonums, separated by commas, and -assembles Vax @code{g} format 64-bit floating point constants. - -@cindex @code{hfloat} directive, VAX -@item .hfloat -This expects zero or more flonums, separated by commas, and -assembles Vax @code{h} format 128-bit floating point constants. - -@end table - -@node VAX-opcodes -@section VAX Opcodes - -@cindex VAX opcode mnemonics -@cindex opcode mnemonics, VAX -@cindex mnemonics for opcodes, VAX -All DEC mnemonics are supported. Beware that @code{case@dots{}} -instructions have exactly 3 operands. The dispatch table that -follows the @code{case@dots{}} instruction should be made with -@code{.word} statements. This is compatible with all unix -assemblers we know of. - -@node VAX-branch -@section VAX Branch Improvement - -@cindex VAX branch improvement -@cindex branch improvement, VAX -@cindex pseudo-ops for branch, VAX -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 @samp{j} for @samp{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. - -@table @code -@item jbsb -@samp{Jsb} is already an instruction mnemonic, so we chose @samp{jbsb}. -@table @asis -@item (byte displacement) -@kbd{bsbb @dots{}} -@item (word displacement) -@kbd{bsbw @dots{}} -@item (long displacement) -@kbd{jsb @dots{}} -@end table -@item jbr -@itemx jr -Unconditional branch. -@table @asis -@item (byte displacement) -@kbd{brb @dots{}} -@item (word displacement) -@kbd{brw @dots{}} -@item (long displacement) -@kbd{jmp @dots{}} -@end table -@item j@var{COND} -@var{COND} may be any one of the conditional branches -@code{neq}, @code{nequ}, @code{eql}, @code{eqlu}, @code{gtr}, -@code{geq}, @code{lss}, @code{gtru}, @code{lequ}, @code{vc}, @code{vs}, -@code{gequ}, @code{cc}, @code{lssu}, @code{cs}. -@var{COND} may also be one of the bit tests -@code{bs}, @code{bc}, @code{bss}, @code{bcs}, @code{bsc}, @code{bcc}, -@code{bssi}, @code{bcci}, @code{lbs}, @code{lbc}. -@var{NOTCOND} is the opposite condition to @var{COND}. -@table @asis -@item (byte displacement) -@kbd{b@var{COND} @dots{}} -@item (word displacement) -@kbd{b@var{NOTCOND} foo ; brw @dots{} ; foo:} -@item (long displacement) -@kbd{b@var{NOTCOND} foo ; jmp @dots{} ; foo:} -@end table -@item jacb@var{X} -@var{X} may be one of @code{b d f g h l w}. -@table @asis -@item (word displacement) -@kbd{@var{OPCODE} @dots{}} -@item (long displacement) -@example -@var{OPCODE} @dots{}, foo ; -brb bar ; -foo: jmp @dots{} ; -bar: -@end example -@end table -@item jaob@var{YYY} -@var{YYY} may be one of @code{lss leq}. -@item jsob@var{ZZZ} -@var{ZZZ} may be one of @code{geq gtr}. -@table @asis -@item (byte displacement) -@kbd{@var{OPCODE} @dots{}} -@item (word displacement) -@example -@var{OPCODE} @dots{}, foo ; -brb bar ; -foo: brw @var{destination} ; -bar: -@end example -@item (long displacement) -@example -@var{OPCODE} @dots{}, foo ; -brb bar ; -foo: jmp @var{destination} ; -bar: -@end example -@end table -@item aobleq -@itemx aoblss -@itemx sobgeq -@itemx sobgtr -@table @asis -@item (byte displacement) -@kbd{@var{OPCODE} @dots{}} -@item (word displacement) -@example -@var{OPCODE} @dots{}, foo ; -brb bar ; -foo: brw @var{destination} ; -bar: -@end example -@item (long displacement) -@example -@var{OPCODE} @dots{}, foo ; -brb bar ; -foo: jmp @var{destination} ; -bar: -@end example -@end table -@end table - -@node VAX-operands -@section VAX Operands - -@cindex VAX operand notation -@cindex operand notation, VAX -@cindex immediate character, VAX -@cindex VAX immediate character -The immediate character is @samp{$} for Unix compatibility, not -@samp{#} as DEC writes it. - -@cindex indirect character, VAX -@cindex VAX indirect character -The indirect character is @samp{*} for Unix compatibility, not -@samp{@@} as DEC writes it. - -@cindex displacement sizing character, VAX -@cindex VAX displacement sizing character -The displacement sizing character is @samp{`} (an accent grave) for -Unix compatibility, not @samp{^} as DEC writes it. The letter -preceding @samp{`} may have either case. @samp{G} is not -understood, but all other letters (@code{b i l s w}) are understood. - -@cindex register names, VAX -@cindex VAX register names -Register names understood are @code{r0 r1 r2 @dots{} r15 ap fp sp -pc}. Upper and lower case letters are equivalent. - -For instance -@smallexample -tstb *w`$4(r5) -@end smallexample - -Any expression is permitted in an operand. Operands are comma -separated. - -@c There is some bug to do with recognizing expressions -@c in operands, but I forget what it is. It is -@c a syntax clash because () is used as an address mode -@c and to encapsulate sub-expressions. - -@node VAX-no -@section Not Supported on VAX - -@cindex VAX bitfields not supported -@cindex bitfields, not supported on VAX -Vax bit fields can not be assembled with @code{@value{AS}}. Someone -can add the required code if they really need it. diff --git a/gas/doc/c-z8k.texi b/gas/doc/c-z8k.texi deleted file mode 100644 index 1fb10e3b2ca..00000000000 --- a/gas/doc/c-z8k.texi +++ /dev/null @@ -1,380 +0,0 @@ -@c Copyright (C) 1991, 1992, 1993, 1994, 1995 Free Software Foundation, Inc. -@c This is part of the GAS manual. -@c For copying conditions, see the file as.texinfo. -@ifset GENERIC -@page -@node Z8000-Dependent -@chapter Z8000 Dependent Features -@end ifset -@ifclear GENERIC -@node Machine Dependencies -@chapter Z8000 Dependent Features -@end ifclear - -@cindex Z8000 support -The Z8000 @value{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 -@code{unsegm} directive), an address takes up one word (16 bit) -sized register. When the assembler is in segmented mode (specified with -the @code{segm} directive), a 24-bit address takes up a long (32 bit) -register. @xref{Z8000 Directives,,Assembler Directives for the Z8000}, -for a list of other Z8000 specific assembler directives. - -@menu -* Z8000 Options:: No special command-line options for Z8000 -* Z8000 Syntax:: Assembler syntax for the Z8000 -* Z8000 Directives:: Special directives for the Z8000 -* Z8000 Opcodes:: Opcodes -@end menu - -@node Z8000 Options -@section Options - -@cindex Z8000 options -@cindex options, Z8000 -@code{@value{AS}} has no additional command-line options for the Zilog -Z8000 family. - -@node Z8000 Syntax -@section Syntax -@menu -* Z8000-Chars:: Special Characters -* Z8000-Regs:: Register Names -* Z8000-Addressing:: Addressing Modes -@end menu - -@node Z8000-Chars -@subsection Special Characters - -@cindex line comment character, Z8000 -@cindex Z8000 line comment character -@samp{!} is the line comment character. - -@cindex line separator, Z8000 -@cindex statement separator, Z8000 -@cindex Z8000 line separator -You can use @samp{;} instead of a newline to separate statements. - -@node Z8000-Regs -@subsection Register Names - -@cindex Z8000 registers -@cindex registers, Z8000 -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 @samp{r} for 16 bit registers, @samp{rr} for 32 bit registers and -@samp{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 @samp{r@var{n}h} and @samp{r@var{n}l}. - -@smallexample -@exdent @emph{byte registers} -r0l r0h r1h r1l r2h r2l r3h r3l -r4h r4l r5h r5l r6h r6l r7h r7l - -@exdent @emph{word registers} -r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 - -@exdent @emph{long word registers} -rr0 rr2 rr4 rr6 rr8 rr10 rr12 rr14 - -@exdent @emph{quad word registers} -rq0 rq4 rq8 rq12 -@end smallexample - -@node Z8000-Addressing -@subsection Addressing Modes - -@cindex addressing modes, Z8000 -@cindex Z800 addressing modes -@value{AS} understands the following addressing modes for the Z8000: - -@table @code -@item r@var{n} -Register direct - -@item @@r@var{n} -Indirect register - -@item @var{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. - -@item address(r@var{n}) -Indexed: the 16 or 24 bit address is added to the 16 bit register to produce -the final address in memory of the operand. - -@item r@var{n}(#@var{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. - -@item r@var{n}(r@var{m}) -Base Index: the 16 or 24 bit register r@var{n} is added to the sign -extended 16 bit index register r@var{m} to produce the final address in -memory of the operand. - -@item #@var{xx} -Immediate data @var{xx}. -@end table - -@node Z8000 Directives -@section Assembler Directives for the Z8000 - -@cindex Z8000 directives -@cindex directives, Z8000 -The Z8000 port of @value{AS} includes these additional assembler directives, -for compatibility with other Z8000 assemblers. As shown, these do not -begin with @samp{.} (unlike the ordinary @value{AS} directives). - -@table @code -@kindex segm -@item segm -Generates code for the segmented Z8001. - -@kindex unsegm -@item unsegm -Generates code for the unsegmented Z8002. - -@kindex name -@item name -Synonym for @code{.file} - -@kindex global -@item global -Synonym for @code{.global} - -@kindex wval -@item wval -Synonym for @code{.word} - -@kindex lval -@item lval -Synonym for @code{.long} - -@kindex bval -@item bval -Synonym for @code{.byte} - -@kindex sval -@item sval -Assemble a string. @code{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 @samp{%@var{xx}} (where -@var{xx} represents a two-digit hexadecimal number) to represent the -character whose @sc{ascii} value is @var{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 @w{@samp{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 - -@iftex -@begingroup -@let@nonarrowing=@comment -@end iftex -@smallexample -68652073 sval 'he said %22it%27s 50%25 off%22%00' -61696420 -22697427 -73203530 -25206F66 -662200 -@end smallexample -@iftex -@endgroup -@end iftex - -@kindex rsect -@item rsect -synonym for @code{.section} - -@kindex block -@item block -synonym for @code{.space} - -@kindex even -@item even -special case of @code{.align}; aligns output to even byte boundary. -@end table - -@node Z8000 Opcodes -@section Opcodes - -@cindex Z8000 opcode summary -@cindex opcode summary, Z8000 -@cindex mnemonics, Z8000 -@cindex instruction summary, Z8000 -For detailed information on the Z8000 machine instruction set, see -@cite{Z8000 Technical Manual}. - -@ifset SMALL -@c this table, due to the multi-col faking and hardcoded order, looks silly -@c except in smallbook. See comments below "@set SMALL" near top of this file. - -The following table summarizes the opcodes and their arguments: -@iftex -@begingroup -@let@nonarrowing=@comment -@end iftex -@smallexample - - rs @r{16 bit source register} - rd @r{16 bit destination register} - rbs @r{8 bit source register} - rbd @r{8 bit destination register} - rrs @r{32 bit source register} - rrd @r{32 bit destination register} - rqs @r{64 bit source register} - rqd @r{64 bit destination register} - addr @r{16/24 bit address} - imm @r{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) -@end smallexample -@iftex -@endgroup -@end iftex -@end ifset - diff --git a/gas/doc/gasp.texi b/gas/doc/gasp.texi deleted file mode 100644 index 64cd6f44b17..00000000000 --- a/gas/doc/gasp.texi +++ /dev/null @@ -1,1086 +0,0 @@ -\input texinfo @c -*- Texinfo -*- -@setfilename gasp.info -@c -@c This file documents the assembly preprocessor "GASP" -@c -@c Copyright (c) 1994 Free Software Foundation, Inc. -@c -@c This text may be freely distributed under the terms of the GNU -@c General Public License. - -@ifinfo -@format -START-INFO-DIR-ENTRY -* gasp: (gasp). The GNU Assembler Preprocessor -END-INFO-DIR-ENTRY -@end format -@end ifinfo - -@syncodeindex ky cp -@syncodeindex fn cp - -@finalout -@setchapternewpage odd -@settitle GASP -@titlepage -@c FIXME boring title -@title GASP, an assembly preprocessor -@subtitle for GASP version 1 -@sp 1 -@subtitle March 1994 -@author Roland Pesch -@page - -@tex -{\parskip=0pt \hfill Cygnus Support\par -} -@end tex - -@vskip 0pt plus 1filll -Copyright @copyright{} 1994, 1995 Free Software Foundation, Inc. - -Permission is granted to make and distribute verbatim copies of -this manual provided the copyright notice and this permission notice -are preserved on all copies. - -Permission is granted to copy and distribute modified versions of this -manual under the conditions for verbatim copying, provided also that -the entire resulting derived work is distributed under the terms of a -permission notice identical to this one. - -Permission is granted to copy and distribute translations of this manual -into another language, under the above conditions for modified versions. -@end titlepage - -@ifinfo -Copyright @copyright{} 1994, 1995 Free Software Foundation, Inc. - -Permission is granted to make and distribute verbatim copies of -this manual provided the copyright notice and this permission notice -are preserved on all copies. - -@ignore -Permission is granted to process this file through TeX and print the -results, provided the printed document carries a copying permission -notice identical to this one except for the removal of this paragraph -(this paragraph not being relevant to the printed manual). -@end ignore - -Permission is granted to copy and distribute modified versions of this -manual under the conditions for verbatim copying, provided also that -the entire resulting derived work is distributed under the terms of a -permission notice identical to this one. - -Permission is granted to copy and distribute translations of this manual -into another language, under the above conditions for modified versions. - -@node Top -@top GASP - -GASP is a preprocessor for assembly programs. - -This file describes version 1 of GASP. - -Steve Chamberlain wrote GASP; Roland Pesch wrote this manual. - -@menu -* Overview:: What is GASP? -* Invoking GASP:: Command line options. -* Commands:: Preprocessor commands. -* Index:: Index. -@end menu -@end ifinfo - -@node Overview -@chapter What is GASP? - -The primary purpose of the @sc{gnu} assembler is to assemble the output of -other programs---notably compilers. When you have to hand-code -specialized routines in assembly, that means the @sc{gnu} assembler is -an unfriendly processor: it has no directives for macros, conditionals, -or many other conveniences that you might expect. - -In some cases you can simply use the C preprocessor, or a generalized -preprocessor like @sc{m4}; but this can be awkward, since none of these -things are designed with assembly in mind. - -@sc{gasp} fills this need. It is expressly designed to provide the -facilities you need with hand-coded assembly code. Implementing it as a -preprocessor, rather than part of the assembler, allows the maximum -flexibility: you can use it with hand-coded assembly, without paying a -penalty of added complexity in the assembler you use for compiler -output. - -Here is a small example to give the flavor of @sc{gasp}. This input to -@sc{gasp} - -@cartouche -@example - .MACRO saveregs from=8 to=14 -count .ASSIGNA \from - ! save r\from..r\to - .AWHILE \&count LE \to - mov r\&count,@@-sp -count .ASSIGNA \&count + 1 - .AENDW - .ENDM - - saveregs from=12 - -bar: mov #H'dead+10,r0 -foo .SDATAC "hello"<10> - .END -@end example -@end cartouche - -@noindent -generates this assembly program: - -@cartouche -@example - ! save r12..r14 - mov r12,@@-sp - mov r13,@@-sp - mov r14,@@-sp - -bar: mov #57005+10,r0 -foo: .byte 6,104,101,108,108,111,10 -@end example -@end cartouche - -@node Invoking GASP -@chapter Command Line Options - -@c FIXME! Or is there a simpler way, calling from GAS option? -The simplest way to use @sc{gasp} is to run it as a filter and assemble -its output. In Unix and its ilk, you can do this, for example: - -@c FIXME! GASP filename suffix convention? -@example -$ gasp prog.asm | as -o prog.o -@end example - -Naturally, there are also a few command-line options to allow you to -request variations on this basic theme. Here is the full set of -possibilities for the @sc{gasp} command line. - -@example -gasp [ -a | --alternate ] - [ -c @var{char} | --commentchar @var{char} ] - [ -d | --debug ] [ -h | --help ] [ -M | --mri ] - [ -o @var{outfile} | --output @var{outfile} ] - [ -p | --print ] [ -s | --copysource ] - [ -u | --unreasonable ] [ -v | --version ] - @var{infile} @dots{} -@end example - -@ftable @code -@item @var{infile} @dots{} -@c FIXME! Why not stdin as default infile? -The input file names. You must specify at least one input file; if you -specify more, @sc{gasp} preprocesses them all, concatenating the output -in the order you list the @var{infile} arguments. - -Mark the end of each input file with the preprocessor command -@code{.END}. @xref{Other Commands,, Miscellaneous commands}. - -@item -a -@itemx --alternate -Use alternative macro syntax. @xref{Alternate,, Alternate macro -syntax}, for a discussion of how this syntax differs from the default -@sc{gasp} syntax. - -@cindex comment character, changing -@cindex semicolon, as comment -@cindex exclamation mark, as comment -@cindex shriek, as comment -@cindex bang, as comment -@cindex @code{!} default comment char -@cindex @code{;} as comment char -@item -c '@var{char}' -@itemx --commentchar '@var{char}' -Use @var{char} as the comment character. The default comment character -is @samp{!}. For example, to use a semicolon as the comment character, -specify @w{@samp{-c ';'}} on the @sc{gasp} command line. Since -assembler command characters often have special significance to command -shells, it is a good idea to quote or escape @var{char} when you specify -a comment character. - -For the sake of simplicity, all examples in this manual use the default -comment character @samp{!}. - -@item -d -@itemx --debug -Show debugging statistics. In this version of @sc{gasp}, this option -produces statistics about the string buffers that @sc{gasp} allocates -internally. For each defined buffersize @var{s}, @sc{gasp} shows the -number of strings @var{n} that it allocated, with a line like this: - -@example -strings size @var{s} : @var{n} -@end example - -@noindent -@sc{gasp} displays these statistics on the standard error stream, when -done preprocessing. - -@item -h -@itemx --help -Display a summary of the @sc{gasp} command line options. - -@item -M -@itemx --mri -Use MRI compatibility mode. Using this option causes @sc{gasp} to -accept the syntax and pseudo-ops used by the Microtec Research -@code{ASM68K} assembler. - -@item -o @var{outfile} -@itemx --output @var{outfile} -Write the output in a file called @var{outfile}. If you do not use the -@samp{-o} option, @sc{gasp} writes its output on the standard output -stream. - -@item -p -@itemx --print -Print line numbers. @sc{gasp} obeys this option @emph{only} if you also -specify @samp{-s} to copy source lines to its output. With @samp{-s --p}, @sc{gasp} displays the line number of each source line copied -(immediately after the comment character at the beginning of the line). - -@item -s -@itemx --copysource -Copy the source lines to the output file. Use this option -to see the effect of each preprocessor line on the @sc{gasp} output. -@sc{gasp} places a comment character (@samp{!} by default) at -the beginning of each source line it copies, so that you can use this -option and still assemble the result. - -@item -u -@itemx --unreasonable -Bypass ``unreasonable expansion'' limit. Since you can define @sc{gasp} -macros inside other macro definitions, the preprocessor normally -includes a sanity check. If your program requires more than 1,000 -nested expansions, @sc{gasp} normally exits with an error message. Use -this option to turn off this check, allowing unlimited nested -expansions. - -@item -v -@itemx --version -Display the @sc{gasp} version number. -@end ftable - -@node Commands -@chapter Preprocessor Commands - -@sc{gasp} commands have a straightforward syntax that fits in well with -assembly conventions. In general, a command extends for a line, and may -have up to three fields: an optional label, the command itself, and -optional arguments to the command. You can write commands in upper or -lower case, though this manual shows them in upper case. @xref{Syntax -Details,, Details of the GASP syntax}, for more information. - -@menu -* Conditionals:: -* Loops:: -* Variables:: -* Macros:: -* Data:: -* Listings:: -* Other Commands:: -* Syntax Details:: -* Alternate:: -@end menu - -@node Conditionals -@section Conditional assembly - -The conditional-assembly directives allow you to include or exclude -portions of an assembly depending on how a pair of expressions, or a -pair of strings, compare. - -The overall structure of conditionals is familiar from many other -contexts. @code{.AIF} marks the start of a conditional, and precedes -assembly for the case when the condition is true. An optional -@code{.AELSE} precedes assembly for the converse case, and an -@code{.AENDI} marks the end of the condition. - -@c FIXME! Why doesn't -u turn off this check? -You may nest conditionals up to a depth of 100; @sc{gasp} rejects -nesting beyond that, because it may indicate a bug in your macro -structure. - -@c FIXME! Why isn't there something like cpp's -D option? Conditionals -@c would be much more useful if there were. -Conditionals are primarily useful inside macro definitions, where you -often need different effects depending on argument values. -@xref{Macros,, Defining your own directives}, for details about defining -macros. - -@ftable @code -@item .AIF @var{expra} @var{cmp} @var{exprb} -@itemx .AIF "@var{stra}" @var{cmp} "@var{strb}" - -The governing condition goes on the same line as the @code{.AIF} -preprocessor command. You may compare either two strings, or two -expressions. - -When you compare strings, only two conditional @var{cmp} comparison -operators are available: @samp{EQ} (true if @var{stra} and @var{strb} -are identical), and @samp{NE} (the opposite). - -When you compare two expressions, @emph{both expressions must be -absolute} (@pxref{Expressions,, Arithmetic expressions in GASP}). You -can use these @var{cmp} comparison operators with expressions: - -@ftable @code -@item EQ -Are @var{expra} and @var{exprb} equal? (For strings, are @var{stra} and -@var{strb} identical?) - -@item NE -Are @var{expra} and @var{exprb} different? (For strings, are @var{stra} -and @var{strb} different? - -@item LT -Is @var{expra} less than @var{exprb}? (Not allowed for strings.) - -@item LE -Is @var{expra} less than or equal to @var{exprb}? (Not allowed for strings.) - -@item GT -Is @var{expra} greater than @var{exprb}? (Not allowed for strings.) - -@item GE -Is @var{expra} greater than or equal to @var{exprb}? (Not allowed for -strings.) -@end ftable - -@item .AELSE -Marks the start of assembly code to be included if the condition fails. -Optional, and only allowed within a conditional (between @code{.AIF} and -@code{.AENDI}). - -@item .AENDI -Marks the end of a conditional assembly. -@end ftable - -@node Loops -@section Repetitive sections of assembly - -Two preprocessor directives allow you to repeatedly issue copies of the -same block of assembly code. - -@ftable @code -@item .AREPEAT @var{aexp} -@itemx .AENDR -If you simply need to repeat the same block of assembly over and over a -fixed number of times, sandwich one instance of the repeated block -between @code{.AREPEAT} and @code{.AENDR}. Specify the number of -copies as @var{aexp} (which must be an absolute expression). For -example, this repeats two assembly statements three times in succession: - -@cartouche -@example - .AREPEAT 3 - rotcl r2 - div1 r0,r1 - .AENDR -@end example -@end cartouche - -@item .AWHILE @var{expra} @var{cmp} @var{exprb} -@itemx .AENDW -@itemx .AWHILE @var{stra} @var{cmp} @var{strb} -@itemx .AENDW -To repeat a block of assembly depending on a conditional test, rather -than repeating it for a specific number of times, use @code{.AWHILE}. -@code{.AENDW} marks the end of the repeated block. The conditional -comparison works exactly the same way as for @code{.AIF}, with the same -comparison operators (@pxref{Conditionals,, Conditional assembly}). - -Since the terms of the comparison must be absolute expression, -@code{.AWHILE} is primarily useful within macros. @xref{Macros,, -Defining your own directives}. -@end ftable - -@cindex loops, breaking out of -@cindex breaking out of loops -You can use the @code{.EXITM} preprocessor directive to break out of -loops early (as well as to break out of macros). @xref{Macros,, -Defining your own directives}. - -@node Variables -@section Preprocessor variables - -You can use variables in @sc{gasp} to represent strings, registers, or -the results of expressions. - -You must distinguish two kinds of variables: -@enumerate -@item -Variables defined with @code{.EQU} or @code{.ASSIGN}. To evaluate this -kind of variable in your assembly output, simply mention its name. For -example, these two lines define and use a variable @samp{eg}: - -@cartouche -@example -eg .EQU FLIP-64 - @dots{} - mov.l eg,r0 -@end example -@end cartouche - -@emph{Do not use} this kind of variable in conditional expressions or -while loops; @sc{gasp} only evaluates these variables when writing -assembly output. - -@item -Variables for use during preprocessing. You can define these -with @code{.ASSIGNC} or @code{.ASSIGNA}. To evaluate this -kind of variable, write @samp{\&} before the variable name; for example, - -@cartouche -@example -opcit .ASSIGNA 47 - @dots{} - .AWHILE \&opcit GT 0 - @dots{} - .AENDW -@end example -@end cartouche - -@sc{gasp} treats macro arguments almost the same way, but to evaluate -them you use the prefix @samp{\} rather than @samp{\&}. -@xref{Macros,, Defining your own directives}. -@end enumerate - -@ftable @code -@item @var{pvar} .EQU @var{expr} -@c FIXME! Anything to beware of re GAS directive of same name? -Assign preprocessor variable @var{pvar} the value of the expression -@var{expr}. There are no restrictions on redefinition; use @samp{.EQU} -with the same @var{pvar} as often as you find it convenient. - -@item @var{pvar} .ASSIGN @var{expr} -Almost the same as @code{.EQU}, save that you may not redefine -@var{pvar} using @code{.ASSIGN} once it has a value. -@c FIXME!! Supposed to work this way, apparently, but on 9feb94 works -@c just like .EQU - -@item @var{pvar} .ASSIGNA @var{aexpr} -Define a variable with a numeric value, for use during preprocessing. -@var{aexpr} must be an absolute expression. You can redefine variables -with @code{.ASSIGNA} at any time. - -@item @var{pvar} .ASSIGNC "@var{str}" -Define a variable with a string value, for use during preprocessing. -You can redefine variables with @code{.ASSIGNC} at any time. - -@item @var{pvar} .REG (@var{register}) -Use @code{.REG} to define a variable that represents a register. In -particular, @var{register} is @emph{not evaluated} as an expression. -You may use @code{.REG} at will to redefine register variables. -@end ftable - -All these directives accept the variable name in the ``label'' position, -that is at the left margin. You may specify a colon after the variable -name if you wish; the first example above could have started @samp{eg:} -with the same effect. - -@c pagebreak makes for better aesthetics---ensures macro and expansion together -@page -@node Macros -@section Defining your own directives - -The commands @code{.MACRO} and @code{.ENDM} allow you to define macros -that generate assembly output. You can use these macros with a syntax -similar to built-in @sc{gasp} or assembler directives. For example, -this definition specifies a macro @code{SUM} that adds together a range of -consecutive registers: - -@cartouche -@example - .MACRO SUM FROM=0, TO=9 - ! \FROM \TO - mov r\FROM,r10 -COUNT .ASSIGNA \FROM+1 - .AWHILE \&COUNT LE \TO - add r\&COUNT,r10 -COUNT .ASSIGNA \&COUNT+1 - .AENDW - .ENDM -@end example -@end cartouche - -@noindent -With that definition, @samp{SUM 0,5} generates this assembly output: - -@cartouche -@example - ! 0 5 - mov r0,r10 - add r1,r10 - add r2,r10 - add r3,r10 - add r4,r10 - add r5,r10 -@end example -@end cartouche - -@ftable @code -@item .MACRO @var{macname} -@itemx .MACRO @var{macname} @var{macargs} @dots{} -Begin the definition of a macro called @var{macname}. If your macro -definition requires arguments, specify their names after the macro name, -separated by commas or spaces. You can supply a default value for any -macro argument by following the name with @samp{=@var{deflt}}. For -example, these are all valid @code{.MACRO} statements: - -@table @code -@item .MACRO COMM -Begin the definition of a macro called @code{COMM}, which takes no -arguments. - -@item .MACRO PLUS1 P, P1 -@itemx .MACRO PLUS1 P P1 -Either statement begins the definition of a macro called @code{PLUS1}, -which takes two arguments; within the macro definition, write -@samp{\P} or @samp{\P1} to evaluate the arguments. - -@item .MACRO RESERVE_STR P1=0 P2 -Begin the definition of a macro called @code{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 -@samp{RESERVE_STR @var{a},@var{b}} (with @samp{\P1} evaluating to -@var{a} and @samp{\P2} evaluating to @var{b}), or as @samp{RESERVE_STR -,@var{b}} (with @samp{\P1} evaluating as the default, in this case -@samp{0}, and @samp{\P2} evaluating to @var{b}). -@end table - -When you call a macro, you can specify the argument values either by -position, or by keyword. For example, @samp{SUM 9,17} is equivalent to -@samp{SUM TO=17, FROM=9}. Macro arguments are preprocessor variables -similar to the variables you define with @samp{.ASSIGNA} or -@samp{.ASSIGNC}; in particular, you can use them in conditionals or for -loop control. (The only difference is the prefix you write to evaluate -the variable: for a macro argument, write @samp{\@var{argname}}, but for -a preprocessor variable, write @samp{\&@var{varname}}.) - -@item @var{name} .MACRO -@itemx @var{name} .MACRO ( @var{macargs} @dots{} ) -@c FIXME check: I think no error _and_ no args recognized if I use form -@c NAME .MACRO ARG ARG -An alternative form of introducing a macro definition: specify the macro -name in the label position, and the arguments (if any) between -parentheses after the name. Defaulting rules and usage work the same -way as for the other macro definition syntax. - -@item .ENDM -Mark the end of a macro definition. - -@item .EXITM -Exit early from the current macro definition, @code{.AREPEAT} loop, or -@code{.AWHILE} loop. - -@cindex number of macros executed -@cindex macros, count executed -@item \@@ -@sc{gasp} maintains a counter of how many macros it has -executed in this pseudo-variable; you can copy that number to your -output with @samp{\@@}, but @emph{only within a macro definition}. - -@item LOCAL @var{name} [ , @dots{} ] -@emph{Warning: @code{LOCAL} is only available if you select ``alternate -macro syntax'' with @samp{-a} or @samp{--alternate}.} @xref{Alternate,, -Alternate macro syntax}. - -Generate a string replacement for each of the @var{name} arguments, and -replace any instances of @var{name} in each macro expansion. The -replacement string is unique in the assembly, and different for each -separate macro expansion. @code{LOCAL} allows you to write macros that -define symbols, without fear of conflict between separate macro expansions. -@end ftable - -@node Data -@section Data output - -In assembly code, you often need to specify working areas of memory; -depending on the application, you may want to initialize such memory or -not. @sc{gasp} provides preprocessor directives to help you avoid -repetitive coding for both purposes. - -You can use labels as usual to mark the data areas. - -@menu -* Initialized:: -* Uninitialized:: -@end menu - -@node Initialized -@subsection Initialized data - -These are the @sc{gasp} directives for initialized data, and the standard -@sc{gnu} assembler directives they expand to: - -@ftable @code -@item .DATA @var{expr}, @var{expr}, @dots{} -@itemx .DATA.B @var{expr}, @var{expr}, @dots{} -@itemx .DATA.W @var{expr}, @var{expr}, @dots{} -@itemx .DATA.L @var{expr}, @var{expr}, @dots{} -Evaluate arithmetic expressions @var{expr}, and emit the corresponding -@code{as} directive (labelled with @var{lab}). The unqualified -@code{.DATA} emits @samp{.long}; @code{.DATA.B} emits @samp{.byte}; -@code{.DATA.W} emits @samp{.short}; and @code{.DATA.L} emits -@samp{.long}. - -For example, @samp{foo .DATA 1,2,3} emits @samp{foo: .long 1,2,3}. - -@item .DATAB @var{repeat}, @var{expr} -@itemx .DATAB.B @var{repeat}, @var{expr} -@itemx .DATAB.W @var{repeat}, @var{expr} -@itemx .DATAB.L @var{repeat}, @var{expr} -@c FIXME! Looks like gasp accepts and ignores args after 2nd. -Make @code{as} emit @var{repeat} copies of the value of the expression -@var{expr} (using the @code{as} directive @code{.fill}). -@samp{.DATAB.B} repeats one-byte values; @samp{.DATAB.W} repeats -two-byte values; and @samp{.DATAB.L} repeats four-byte values. -@samp{.DATAB} without a suffix repeats four-byte values, just like -@samp{.DATAB.L}. - -@c FIXME! Allowing zero might be useful for edge conditions in macros. -@var{repeat} must be an absolute expression with a positive value. - -@item .SDATA "@var{str}" @dots{} -String data. Emits a concatenation of bytes, precisely as you specify -them (in particular, @emph{nothing is added to mark the end} of the -string). @xref{Constants,, String and numeric constants}, for details -about how to write strings. @code{.SDATA} concatenates multiple -arguments, making it easy to switch between string representations. You -can use commas to separate the individual arguments for clarity, if you -choose. - -@item .SDATAB @var{repeat}, "@var{str}" @dots{} -Repeated string data. The first argument specifies how many copies of -the string to emit; the remaining arguments specify the string, in the -same way as the arguments to @code{.SDATA}. - -@item .SDATAZ "@var{str}" @dots{} -Zero-terminated string data. Just like @code{.SDATA}, except that -@code{.SDATAZ} writes a zero byte at the end of the string. - -@item .SDATAC "@var{str}" @dots{} -Count-prefixed string data. Just like @code{.SDATA}, except that -@sc{gasp} precedes the string with a leading one-byte count. For -example, @samp{.SDATAC "HI"} generates @samp{.byte 2,72,73}. Since the -count field is only one byte, you can only use @code{.SDATAC} for -strings less than 256 bytes in length. -@end ftable - -@node Uninitialized -@subsection Uninitialized data - -@c FIXME! .space different on some platforms, notably HPPA. Config? -Use the @code{.RES}, @code{.SRES}, @code{.SRESC}, and @code{.SRESZ} -directives to reserve memory and leave it uninitialized. @sc{gasp} -resolves these directives to appropriate calls of the @sc{gnu} -@code{as} @code{.space} directive. - -@ftable @code -@item .RES @var{count} -@itemx .RES.B @var{count} -@itemx .RES.W @var{count} -@itemx .RES.L @var{count} -Reserve room for @var{count} uninitialized elements of data. The -suffix specifies the size of each element: @code{.RES.B} reserves -@var{count} bytes, @code{.RES.W} reserves @var{count} pairs of bytes, -and @code{.RES.L} reserves @var{count} quartets. @code{.RES} without a -suffix is equivalent to @code{.RES.L}. - -@item .SRES @var{count} -@itemx .SRES.B @var{count} -@itemx .SRES.W @var{count} -@itemx .SRES.L @var{count} -@c FIXME! This is boring. Shouldn't it at least have a different -@c default size? (e.g. the "S" suggests "string", for which .B -@c would be more appropriate) -@code{.SRES} is a synonym for @samp{.RES}. - -@item .SRESC @var{count} -@itemx .SRESC.B @var{count} -@itemx .SRESC.W @var{count} -@itemx .SRESC.L @var{count} -Like @code{.SRES}, but reserves space for @code{@var{count}+1} elements. - -@item .SRESZ @var{count} -@itemx .SRESZ.B @var{count} -@itemx .SRESZ.W @var{count} -@itemx .SRESZ.L @var{count} -Like @code{.SRES}, but reserves space for @code{@var{count}+1} elements. -@end ftable - -@node Listings -@section Assembly listing control - -The @sc{gasp} listing-control directives correspond to -related @sc{gnu} @code{as} directives. - -@ftable @code -@item .PRINT LIST -@itemx .PRINT NOLIST -Print control. This directive emits the @sc{gnu} @code{as} directive -@code{.list} or @code{.nolist}, according to its argument. @xref{List,, -@code{.list}, as.info, Using as}, for details on how these directives -interact. - -@item .FORM LIN=@var{ln} -@itemx .FORM COL=@var{cols} -@itemx .FORM LIN=@var{ln} COL=@var{cols} -Specify the page size for assembly listings: @var{ln} represents the -number of lines, and @var{cols} the number of columns. You may specify -either page dimension independently, or both together. If you do not -specify the number of lines, @sc{gasp} assumes 60 lines; if you do not -specify the number of columns, @sc{gasp} assumes 132 columns. -(Any values you may have specified in previous instances of @code{.FORM} -do @emph{not} carry over as defaults.) Emits the @code{.psize} -assembler directive. - -@item .HEADING @var{string} -Specify @var{string} as the title of your assembly listings. Emits -@samp{.title "@var{string}"}. - -@item .PAGE -Force a new page in assembly listings. Emits @samp{.eject}. -@end ftable - -@node Other Commands -@section Miscellaneous commands - -@ftable @code -@item .ALTERNATE -Use the alternate macro syntax henceforth in the assembly. -@xref{Alternate,, Alternate macro syntax}. - -@item .ORG -@c FIXME! This is very strange, since _GAS_ understands .org -This command is recognized, but not yet implemented. @sc{gasp} -generates an error message for programs that use @code{.ORG}. - -@item .RADIX @var{s} -@c FIXME no test cases in testsuite/gasp -@sc{gasp} understands numbers in any of base two, eight, ten, or -sixteen. You can encode the base explicitly in any numeric constant -(@pxref{Constants,, String and numeric constants}). If you write -numbers without an explicit indication of the base, the most recent -@samp{.RADIX @var{s}} command determines how they are interpreted. -@var{s} is a single letter, one of the following: - -@table @code -@item .RADIX B -Base 2. - -@item .RADIX Q -Base 8. - -@item .RADIX D -Base 10. This is the original default radix. - -@item .RADIX H -Base 16. -@end table - -You may specify the argument @var{s} in lower case (any of @samp{bqdh}) -with the same effects. - -@item .EXPORT @var{name} -@itemx .GLOBAL @var{name} -@c FIXME! No test cases in testsuite/gasp -Declare @var{name} global (emits @samp{.global @var{name}}). The two -directives are synonymous. - -@item .PROGRAM -No effect: @sc{gasp} accepts this directive, and silently ignores it. - -@item .END -Mark end of each preprocessor file. @sc{gasp} issues a warning if it -reaches end of file without seeing this command. - -@item .INCLUDE "@var{str}" -Preprocess the file named by @var{str}, as if its contents appeared -where the @code{.INCLUDE} directive does. @sc{gasp} imposes a maximum -limit of 30 stacked include files, as a sanity check. -@c FIXME! Why is include depth not affected by -u? - -@item .ALIGN @var{size} -@c FIXME! Why is this not utterly pointless? -Evaluate the absolute expression @var{size}, and emit the assembly -instruction @samp{.align @var{size}} using the result. -@end ftable - -@node Syntax Details -@section Details of the GASP syntax - -Since @sc{gasp} is meant to work with assembly code, its statement -syntax has no surprises for the assembly programmer. - -@cindex whitespace -@emph{Whitespace} (blanks or tabs; @emph{not} newline) is partially -significant, in that it delimits up to three fields in a line. The -amount of whitespace does not matter; you may line up fields in separate -lines if you wish, but @sc{gasp} does not require that. - -@cindex fields of @sc{gasp} source line -@cindex label field -The @emph{first field}, an optional @dfn{label}, must be flush left in a -line (with no leading whitespace) if it appears at all. You may use a -colon after the label if you wish; @sc{gasp} neither requires the colon -nor objects to it (but will not include it as part of the label name). - -@cindex directive field -The @emph{second field}, which must appear after some whitespace, -contains a @sc{gasp} or assembly @dfn{directive}. - -@cindex argument fields -Any @emph{further fields} on a line are @dfn{arguments} to the -directive; you can separate them from one another using either commas or -whitespace. - -@menu -* Markers:: -* Constants:: -* Symbols:: -* Expressions:: -* String Builtins:: -@end menu - -@node Markers -@subsection Special syntactic markers - -@sc{gasp} recognizes a few special markers: to delimit comments, to -continue a statement on the next line, to separate symbols from other -characters, and to copy text to the output literally. (One other -special marker, @samp{\@@}, works only within macro definitions; -@pxref{Macros,, Defining your own directives}.) - -@cindex comments -The trailing part of any @sc{gasp} source line may be a @dfn{comment}. -A comment begins with the first unquoted comment character (@samp{!} by -default), or an escaped or doubled comment character (@samp{\!} or -@samp{!!} by default), and extends to the end of a line. You can -specify what comment character to use with the @samp{-c} option -(@pxref{Invoking GASP,, Command Line Options}). The two kinds of -comment markers lead to slightly different treatment: - -@table @code -@item ! -A single, un-escaped comment character generates an assembly comment in -the @sc{gasp} output. @sc{gasp} evaluates any preprocessor variables -(macro arguments, or variables defined with @code{.ASSIGNA} or -@code{.ASSIGNC}) present. For example, a macro that begins like this - -@example - .MACRO SUM FROM=0, TO=9 - ! \FROM \TO -@end example - -@noindent -issues as the first line of output a comment that records the -values you used to call the macro. - -@c comments, preprocessor-only -@c preprocessor-only comments -@c GASP-only comments -@item \! -@itemx !! -Either an escaped comment character, or a double comment character, -marks a @sc{gasp} source comment. @sc{gasp} does not copy such comments -to the assembly output. -@end table - -@cindex continuation character -@kindex + -To @emph{continue a statement} on the next line of the file, begin the -second line with the character @samp{+}. - -@cindex literal copy to output -@cindex copying literally to output -@cindex preprocessing, avoiding -@cindex avoiding preprocessing -Occasionally you may want to prevent @sc{gasp} from preprocessing some -particular bit of text. To @emph{copy literally} from the @sc{gasp} -source to its output, place @samp{\(} before the string to copy, and -@samp{)} at the end. For example, write @samp{\(\!)} if you need the -characters @samp{\!} in your assembly output. - -@cindex symbol separator -@cindex text, separating from symbols -@cindex symbols, separating from text -To @emph{separate a preprocessor variable} from text to appear -immediately after its value, write a single quote (@code{'}). For -example, @samp{.SDATA "\P'1"} writes a string built by concatenating the -value of @code{P} and the digit @samp{1}. (You cannot achieve this by -writing just @samp{\P1}, since @samp{P1} is itself a valid name for a -preprocessor variable.) - -@node Constants -@subsection String and numeric constants - -There are two ways of writing @dfn{string constants} in @sc{gasp}: as -literal text, and by numeric byte value. Specify a string literal -between double quotes (@code{"@var{str}"}). Specify an individual -numeric byte value as an absolute expression between angle brackets -(@code{<@var{expr}>}. Directives that output strings allow you to -specify any number of either kind of value, in whatever order is -convenient, and concatenate the result. (Alternate syntax mode -introduces a number of alternative string notations; @pxref{Alternate,, -Alternate macro syntax}.) - -@c Details of numeric notation, e.g. base prefixes -You can write @dfn{numeric constants} either in a specific base, or in -whatever base is currently selected (either 10, or selected by the most -recent @code{.RADIX}). - -To write a number in a @emph{specific base}, use the pattern -@code{@var{s}'@var{ddd}}: a base specifier character @var{s}, followed -by a single quote followed by digits @var{ddd}. The base specifier -character matches those you can specify with @code{.RADIX}: @samp{B} for -base 2, @samp{Q} for base 8, @samp{D} for base 10, and @samp{H} for base -16. (You can write this character in lower case if you prefer.) - -@c FIXME! What are rules for recognizing number in deflt base? Whatever -@c is left over after parsing other things?? - -@node Symbols -@subsection Symbols - -@sc{gasp} recognizes symbol names that start with any alphabetic character, -@samp{_}, or @samp{$}, and continue with any of the same characters or -with digits. Label names follow the same rules. - -@node Expressions -@subsection Arithmetic expressions in GASP - -@cindex absolute expressions -@cindex relocatable expressions -There are two kinds of expressions, depending on their result: -@dfn{absolute} expressions, which resolve to a constant (that is, they -do not involve any values unknown to @sc{gasp}), and @dfn{relocatable} -expressions, which must reduce to the form - -@example -@var{addsym}+@var{const}-@var{subsym} -@end example - -@noindent -where @var{addsym} and @var{subsym} are assembly symbols of unknown -value, and @var{const} is a constant. - -Arithmetic for @sc{gasp} expressions follows very similar rules to C. -You can use parentheses to change precedence; otherwise, arithmetic -primitives have decreasing precedence in the order of the following -list. - -@enumerate -@item -Single-argument @code{+} (identity), @code{-} (arithmetic opposite), or -@code{~} (bitwise negation). @emph{The argument must be an absolute -expression.} - -@item -@code{*} (multiplication) and @code{/} (division). @emph{Both arguments -must be absolute expressions.} - -@item -@code{+} (addition) and @code{-} (subtraction). @emph{At least one argument -must be absolute.} -@c FIXME! Actually, subtraction doesn't check for this. - -@item -@code{&} (bitwise and). @emph{Both arguments must be absolute.} - -@item -@c FIXME! I agree ~ is a better notation than ^ for xor, but is the -@c improvement worth differing from C? -@code{|} (bitwise or) and @code{~} (bitwise exclusive or; @code{^} in -C). @emph{Both arguments must be absolute.} -@end enumerate - -@node String Builtins -@subsection String primitives - -You can use these primitives to manipulate strings (in the argument -field of @sc{gasp} statements): - -@ftable @code -@item .LEN("@var{str}") -Calculate the length of string @code{"@var{str}"}, as an absolute -expression. For example, @samp{.RES.B .LEN("sample")} reserves six -bytes of memory. - -@item .INSTR("@var{string}", "@var{seg}", @var{ix}) -Search for the first occurrence of @var{seg} after position @var{ix} of -@var{string}. For example, @samp{.INSTR("ABCDEFG", "CDE", 0)} evaluates -to the absolute result @code{2}. - -The result is @code{-1} if @var{seg} does not occur in @var{string} -after position @var{ix}. - -@item .SUBSTR("@var{string}",@var{start},@var{len}) -The substring of @var{string} beginning at byte number @var{start} and -extending for @var{len} bytes. -@end ftable - -@node Alternate -@section Alternate macro syntax - -If you specify @samp{-a} or @samp{--alternate} on the @sc{gasp} command -line, the preprocessor uses somewhat different syntax. This syntax is -reminiscent of the syntax of Phar Lap macro assembler, but it -is @emph{not} meant to be a full emulation of Phar Lap or similar -assemblers. In particular, @sc{gasp} does not support directives such -as @code{DB} and @code{IRP}, even in alternate syntax mode. - -In particular, @samp{-a} (or @samp{--alternate}) elicits these -differences: - -@table @emph -@item Preprocessor directives -You can use @sc{gasp} preprocessor directives without a leading @samp{.} -dot. For example, you can write @samp{SDATA} with the same effect as -@samp{.SDATA}. - -@item LOCAL -One additional directive, @code{LOCAL}, is available. @xref{Macros,, -Defining your own directives}, for an explanation of how to use -@code{LOCAL}. - -@need 2000 -@item String delimiters -You can write strings delimited in these other ways besides -@code{"@var{string}"}: - -@table @code -@item '@var{string}' -You can delimit strings with single-quote charaters. - -@item <@var{string}> -You can delimit strings with matching angle brackets. -@end table - -@item 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 @samp{!} (an exclamation mark). For example, you can -write @samp{<4.3 !> 5.4!!>} to get the literal text @samp{4.3 > 5.4!}. - -@item Expression results as strings -You can write @samp{%@var{expr}} to evaluate the expression @var{expr} -and use the result as a string. -@end table - -@node Index -@unnumbered Index - -@printindex cp - -@contents -@bye diff --git a/gas/doc/h8.texi b/gas/doc/h8.texi deleted file mode 100644 index 0df17144bfc..00000000000 --- a/gas/doc/h8.texi +++ /dev/null @@ -1,26 +0,0 @@ -@clear ALL-ARCH -@clear GENERIC -@clear INTERNALS -@clear MULTI-OBJ -@clear AOUT -@clear BOUT -@set COFF -@clear ELF -@set Hitachi-all -@set H8/300 -@set H8/500 -@set SH -@clear DIFF-TBL-KLUGE -@set IEEEFLOAT -@clear W32 -@set W16 -@set SPECIAL-SYMS -@set AS as -@set GCC gcc -@set LD ld -@set TARGET H8/300 and H8/500 -@set TARGET H8/300, H8/500, and Hitachi SH -@set OBJ-NAME COFF -@c -@clear have-stabs -@set abnormal-separator diff --git a/gas/doc/internals.texi b/gas/doc/internals.texi deleted file mode 100644 index 6dc9ac7c658..00000000000 --- a/gas/doc/internals.texi +++ /dev/null @@ -1,1694 +0,0 @@ -\input texinfo -@setfilename internals.info -@node Top -@top Assembler Internals -@raisesections -@cindex internals - -This chapter describes the internals of the assembler. It is incomplete, but -it may help a bit. - -This chapter was last modified on $Date$. It is not updated regularly, and it -may be out of date. - -@menu -* GAS versions:: GAS versions -* Data types:: Data types -* GAS processing:: What GAS does when it runs -* Porting GAS:: Porting GAS -* Relaxation:: Relaxation -* Broken words:: Broken words -* Internal functions:: Internal functions -* Test suite:: Test suite -@end menu - -@node GAS versions -@section GAS versions - -GAS has acquired layers of code over time. The original GAS only supported the -a.out object file format, with three sections. Support for multiple sections -has been added in two different ways. - -The preferred approach is to use the version of GAS created when the symbol -@code{BFD_ASSEMBLER} is defined. The other versions of GAS are documented for -historical purposes, and to help anybody who has to debug code written for -them. - -The type @code{segT} is used to represent a section in code which must work -with all versions of GAS. - -@menu -* Original GAS:: Original GAS version -* MANY_SEGMENTS:: MANY_SEGMENTS gas version -* BFD_ASSEMBLER:: BFD_ASSEMBLER gas version -@end menu - -@node Original GAS -@subsection Original GAS - -The original GAS only supported the a.out object file format with three -sections: @samp{.text}, @samp{.data}, and @samp{.bss}. This is the version of -GAS that is compiled if neither @code{BFD_ASSEMBLER} nor @code{MANY_SEGMENTS} -is defined. This version of GAS is still used for the m68k-aout target, and -perhaps others. - -This version of GAS should not be used for any new development. - -There is still code that is specific to this version of GAS, notably in -@file{write.c}. There is no way for this code to loop through all the -sections; it simply looks at global variables like @code{text_frag_root} and -@code{data_frag_root}. - -The type @code{segT} is an enum. - -@node MANY_SEGMENTS -@subsection MANY_SEGMENTS gas version -@cindex MANY_SEGMENTS - -The @code{MANY_SEGMENTS} version of gas is only used for COFF. It uses the BFD -library, but it writes out all the data itself using @code{bfd_write}. This -version of gas supports up to 40 normal sections. The section names are stored -in the @code{seg_name} array. Other information is stored in the -@code{segment_info} array. - -The type @code{segT} is an enum. Code that wants to examine all the sections -can use a @code{segT} variable as loop index from @code{SEG_E0} up to but not -including @code{SEG_UNKNOWN}. - -Most of the code specific to this version of GAS is in the file -@file{config/obj-coff.c}, in the portion of that file that is compiled when -@code{BFD_ASSEMBLER} is not defined. - -This version of GAS is still used for several COFF targets. - -@node BFD_ASSEMBLER -@subsection BFD_ASSEMBLER gas version -@cindex BFD_ASSEMBLER - -The preferred version of GAS is the @code{BFD_ASSEMBLER} version. In this -version of GAS, the output file is a normal BFD, and the BFD routines are used -to generate the output. - -@code{BFD_ASSEMBLER} will automatically be used for certain targets, including -those that use the ELF, ECOFF, and SOM object file formats, and also all Alpha, -MIPS, PowerPC, and SPARC targets. You can force the use of -@code{BFD_ASSEMBLER} for other targets with the configure option -@samp{--enable-bfd-assembler}; however, it has not been tested for many -targets, and can not be assumed to work. - -@node Data types -@section Data types -@cindex internals, data types - -This section describes some fundamental GAS data types. - -@menu -* Symbols:: The symbolS structure -* Expressions:: The expressionS structure -* Fixups:: The fixS structure -* Frags:: The fragS structure -@end menu - -@node Symbols -@subsection Symbols -@cindex internals, symbols -@cindex symbols, internal -@cindex symbolS structure - -The definition for the symbol structure, @code{symbolS}, is located in -@file{struc-symbol.h}. - -In general, the fields of this structure may not be referred to directly. -Instead, you must use one of the accessor functions defined in @file{symbol.h}. -These accessor functions should work for any GAS version. - -Symbol structures contain the following fields: - -@table @code -@item sy_value -This is an @code{expressionS} that describes the value of the symbol. It might -refer to one or more other symbols; if so, its true value may not be known -until @code{resolve_symbol_value} is called in @code{write_object_file}. - -The expression is often simply a constant. Before @code{resolve_symbol_value} -is called, the value is the offset from the frag (@pxref{Frags}). Afterward, -the frag address has been added in. - -@item sy_resolved -This field is non-zero if the symbol's value has been completely resolved. It -is used during the final pass over the symbol table. - -@item sy_resolving -This field is used to detect loops while resolving the symbol's value. - -@item sy_used_in_reloc -This field is non-zero if the symbol is used by a relocation entry. If a local -symbol is used in a relocation entry, it must be possible to redirect those -relocations to other symbols, or this symbol cannot be removed from the final -symbol list. - -@item sy_next -@itemx sy_previous -These pointers to other @code{symbolS} structures describe a singly or doubly -linked list. (If @code{SYMBOLS_NEED_BACKPOINTERS} is not defined, the -@code{sy_previous} field will be omitted; @code{SYMBOLS_NEED_BACKPOINTERS} is -always defined if @code{BFD_ASSEMBLER}.) These fields should be accessed with -the @code{symbol_next} and @code{symbol_previous} macros. - -@item sy_frag -This points to the frag (@pxref{Frags}) that this symbol is attached to. - -@item sy_used -Whether the symbol is used as an operand or in an expression. Note: Not all of -the backends keep this information accurate; backends which use this bit are -responsible for setting it when a symbol is used in backend routines. - -@item sy_mri_common -Whether the symbol is an MRI common symbol created by the @code{COMMON} -pseudo-op when assembling in MRI mode. - -@item bsym -If @code{BFD_ASSEMBLER} is defined, this points to the BFD @code{asymbol} that -will be used in writing the object file. - -@item sy_name_offset -(Only used if @code{BFD_ASSEMBLER} is not defined.) This is the position of -the symbol's name in the string table of the object file. On some formats, -this will start at position 4, with position 0 reserved for unnamed symbols. -This field is not used until @code{write_object_file} is called. - -@item sy_symbol -(Only used if @code{BFD_ASSEMBLER} is not defined.) This is the -format-specific symbol structure, as it would be written into the object file. - -@item sy_number -(Only used if @code{BFD_ASSEMBLER} is not defined.) This is a 24-bit symbol -number, for use in constructing relocation table entries. - -@item sy_obj -This format-specific data is of type @code{OBJ_SYMFIELD_TYPE}. If no macro by -that name is defined in @file{obj-format.h}, this field is not defined. - -@item sy_tc -This processor-specific data is of type @code{TC_SYMFIELD_TYPE}. If no macro -by that name is defined in @file{targ-cpu.h}, this field is not defined. - -@end table - -Here is a description of the accessor functions. These should be used rather -than referring to the fields of @code{symbolS} directly. - -@table @code -@item S_SET_VALUE -@cindex S_SET_VALUE -Set the symbol's value. - -@item S_GET_VALUE -@cindex S_GET_VALUE -Get the symbol's value. This will cause @code{resolve_symbol_value} to be -called if necessary, so @code{S_GET_VALUE} should only be called when it is -safe to resolve symbols (i.e., after the entire input file has been read and -all symbols have been defined). - -@item S_SET_SEGMENT -@cindex S_SET_SEGMENT -Set the section of the symbol. - -@item S_GET_SEGMENT -@cindex S_GET_SEGMENT -Get the symbol's section. - -@item S_GET_NAME -@cindex S_GET_NAME -Get the name of the symbol. - -@item S_SET_NAME -@cindex S_SET_NAME -Set the name of the symbol. - -@item S_IS_EXTERNAL -@cindex S_IS_EXTERNAL -Return non-zero if the symbol is externally visible. - -@item S_IS_EXTERN -@cindex S_IS_EXTERN -A synonym for @code{S_IS_EXTERNAL}. Don't use it. - -@item S_IS_WEAK -@cindex S_IS_WEAK -Return non-zero if the symbol is weak. - -@item S_IS_COMMON -@cindex S_IS_COMMON -Return non-zero if this is a common symbol. Common symbols are sometimes -represented as undefined symbols with a value, in which case this function will -not be reliable. - -@item S_IS_DEFINED -@cindex S_IS_DEFINED -Return non-zero if this symbol is defined. This function is not reliable when -called on a common symbol. - -@item S_IS_DEBUG -@cindex S_IS_DEBUG -Return non-zero if this is a debugging symbol. - -@item S_IS_LOCAL -@cindex S_IS_LOCAL -Return non-zero if this is a local assembler symbol which should not be -included in the final symbol table. Note that this is not the opposite of -@code{S_IS_EXTERNAL}. The @samp{-L} assembler option affects the return value -of this function. - -@item S_SET_EXTERNAL -@cindex S_SET_EXTERNAL -Mark the symbol as externally visible. - -@item S_CLEAR_EXTERNAL -@cindex S_CLEAR_EXTERNAL -Mark the symbol as not externally visible. - -@item S_SET_WEAK -@cindex S_SET_WEAK -Mark the symbol as weak. - -@item S_GET_TYPE -@item S_GET_DESC -@item S_GET_OTHER -@cindex S_GET_TYPE -@cindex S_GET_DESC -@cindex S_GET_OTHER -Get the @code{type}, @code{desc}, and @code{other} fields of the symbol. These -are only defined for object file formats for which they make sense (primarily -a.out). - -@item S_SET_TYPE -@item S_SET_DESC -@item S_SET_OTHER -@cindex S_SET_TYPE -@cindex S_SET_DESC -@cindex S_SET_OTHER -Set the @code{type}, @code{desc}, and @code{other} fields of the symbol. These -are only defined for object file formats for which they make sense (primarily -a.out). - -@item S_GET_SIZE -@cindex S_GET_SIZE -Get the size of a symbol. This is only defined for object file formats for -which it makes sense (primarily ELF). - -@item S_SET_SIZE -@cindex S_SET_SIZE -Set the size of a symbol. This is only defined for object file formats for -which it makes sense (primarily ELF). - -@item symbol_get_value_expression -@cindex symbol_get_value_expression -Get a pointer to an @code{expressionS} structure which represents the value of -the symbol as an expression. - -@item symbol_set_value_expression -@cindex symbol_set_value_expression -Set the value of a symbol to an expression. - -@item symbol_set_frag -@cindex symbol_set_frag -Set the frag where a symbol is defined. - -@item symbol_get_frag -@cindex symbol_get_frag -Get the frag where a symbol is defined. - -@item symbol_mark_used -@cindex symbol_mark_used -Mark a symbol as having been used in an expression. - -@item symbol_clear_used -@cindex symbol_clear_used -Clear the mark indicating that a symbol was used in an expression. - -@item symbol_used_p -@cindex symbol_used_p -Return whether a symbol was used in an expression. - -@item symbol_mark_used_in_reloc -@cindex symbol_mark_used_in_reloc -Mark a symbol as having been used by a relocation. - -@item symbol_clear_used_in_reloc -@cindex symbol_clear_used_in_reloc -Clear the mark indicating that a symbol was used in a relocation. - -@item symbol_used_in_reloc_p -@cindex symbol_used_in_reloc_p -Return whether a symbol was used in a relocation. - -@item symbol_mark_mri_common -@cindex symbol_mark_mri_common -Mark a symbol as an MRI common symbol. - -@item symbol_clear_mri_common -@cindex symbol_clear_mri_common -Clear the mark indicating that a symbol is an MRI common symbol. - -@item symbol_mri_common_p -@cindex symbol_mri_common_p -Return whether a symbol is an MRI common symbol. - -@item symbol_mark_written -@cindex symbol_mark_written -Mark a symbol as having been written. - -@item symbol_clear_written -@cindex symbol_clear_written -Clear the mark indicating that a symbol was written. - -@item symbol_written_p -@cindex symbol_written_p -Return whether a symbol was written. - -@item symbol_mark_resolved -@cindex symbol_mark_resolved -Mark a symbol as having been resolved. - -@item symbol_resolved_p -@cindex symbol_resolved_p -Return whether a symbol has been resolved. - -@item symbol_section_p -@cindex symbol_section_p -Return whether a symbol is a section symbol. - -@item symbol_equated_p -@cindex symbol_equated_p -Return whether a symbol is equated to another symbol. - -@item symbol_constant_p -@cindex symbol_constant_p -Return whether a symbol has a constant value, including being an offset within -some frag. - -@item symbol_get_bfdsym -@cindex symbol_get_bfdsym -Return the BFD symbol associated with a symbol. - -@item symbol_set_bfdsym -@cindex symbol_set_bfdsym -Set the BFD symbol associated with a symbol. - -@item symbol_get_obj -@cindex symbol_get_obj -Return a pointer to the @code{OBJ_SYMFIELD_TYPE} field of a symbol. - -@item symbol_set_obj -@cindex symbol_set_obj -Set the @code{OBJ_SYMFIELD_TYPE} field of a symbol. - -@item symbol_get_tc -@cindex symbol_get_tc -Return a pointer to the @code{TC_SYMFIELD_TYPE} field of a symbol. - -@item symbol_set_tc -@cindex symbol_set_tc -Set the @code{TC_SYMFIELD_TYPE} field of a symbol. - -@end table - -When @code{BFD_ASSEMBLER} is defined, GAS attempts to store local -symbols--symbols which will not be written to the output file--using a -different structure, @code{struct local_symbol}. This structure can only -represent symbols whose value is an offset within a frag. - -Code outside of the symbol handler will always deal with @code{symbolS} -structures and use the accessor functions. The accessor functions correctly -deal with local symbols. @code{struct local_symbol} is much smaller than -@code{symbolS} (which also automatically creates a bfd @code{asymbol} -structure), so this saves space when assembling large files. - -The first field of @code{symbolS} is @code{bsym}, the pointer to the BFD -symbol. The first field of @code{struct local_symbol} is a pointer which is -always set to NULL. This is how the symbol accessor functions can distinguish -local symbols from ordinary symbols. The symbol accessor functions -automatically convert a local symbol into an ordinary symbol when necessary. - -@node Expressions -@subsection Expressions -@cindex internals, expressions -@cindex expressions, internal -@cindex expressionS structure - -Expressions are stored in an @code{expressionS} structure. The structure is -defined in @file{expr.h}. - -@cindex expression -The macro @code{expression} will create an @code{expressionS} structure based -on the text found at the global variable @code{input_line_pointer}. - -@cindex make_expr_symbol -@cindex expr_symbol_where -A single @code{expressionS} structure can represent a single operation. -Complex expressions are formed by creating @dfn{expression symbols} and -combining them in @code{expressionS} structures. An expression symbol is -created by calling @code{make_expr_symbol}. An expression symbol should -naturally never appear in a symbol table, and the implementation of -@code{S_IS_LOCAL} (@pxref{Symbols}) reflects that. The function -@code{expr_symbol_where} returns non-zero if a symbol is an expression symbol, -and also returns the file and line for the expression which caused it to be -created. - -The @code{expressionS} structure has two symbol fields, a number field, an -operator field, and a field indicating whether the number is unsigned. - -The operator field is of type @code{operatorT}, and describes how to interpret -the other fields; see the definition in @file{expr.h} for the possibilities. - -An @code{operatorT} value of @code{O_big} indicates either a floating point -number, stored in the global variable @code{generic_floating_point_number}, or -an integer to large to store in an @code{offsetT} type, stored in the global -array @code{generic_bignum}. This rather inflexible approach makes it -impossible to use floating point numbers or large expressions in complex -expressions. - -@node Fixups -@subsection Fixups -@cindex internals, fixups -@cindex fixups -@cindex fixS structure - -A @dfn{fixup} is basically anything which can not be resolved in the first -pass. Sometimes a fixup can be resolved by the end of the assembly; if not, -the fixup becomes a relocation entry in the object file. - -@cindex fix_new -@cindex fix_new_exp -A fixup is created by a call to @code{fix_new} or @code{fix_new_exp}. Both -take a frag (@pxref{Frags}), a position within the frag, a size, an indication -of whether the fixup is PC relative, and a type. In a @code{BFD_ASSEMBLER} -GAS, the type is nominally a @code{bfd_reloc_code_real_type}, but several -targets use other type codes to represent fixups that can not be described as -relocations. - -The @code{fixS} structure has a number of fields, several of which are obsolete -or are only used by a particular target. The important fields are: - -@table @code -@item fx_frag -The frag (@pxref{Frags}) this fixup is in. - -@item fx_where -The location within the frag where the fixup occurs. - -@item fx_addsy -The symbol this fixup is against. Typically, the value of this symbol is added -into the object contents. This may be NULL. - -@item fx_subsy -The value of this symbol is subtracted from the object contents. This is -normally NULL. - -@item fx_offset -A number which is added into the fixup. - -@item fx_addnumber -Some CPU backends use this field to convey information between -@code{md_apply_fix} and @code{tc_gen_reloc}. The machine independent code does -not use it. - -@item fx_next -The next fixup in the section. - -@item fx_r_type -The type of the fixup. This field is only defined if @code{BFD_ASSEMBLER}, or -if the target defines @code{NEED_FX_R_TYPE}. - -@item fx_size -The size of the fixup. This is mostly used for error checking. - -@item fx_pcrel -Whether the fixup is PC relative. - -@item fx_done -Non-zero if the fixup has been applied, and no relocation entry needs to be -generated. - -@item fx_file -@itemx fx_line -The file and line where the fixup was created. - -@item tc_fix_data -This has the type @code{TC_FIX_TYPE}, and is only defined if the target defines -that macro. -@end table - -@node Frags -@subsection Frags -@cindex internals, frags -@cindex frags -@cindex fragS structure. - -The @code{fragS} structure is defined in @file{as.h}. Each frag represents a -portion of the final object file. As GAS reads the source file, it creates -frags to hold the data that it reads. At the end of the assembly the frags and -fixups are processed to produce the final contents. - -@table @code -@item fr_address -The address of the frag. This is not set until the assembler rescans the list -of all frags after the entire input file is parsed. The function -@code{relax_segment} fills in this field. - -@item fr_next -Pointer to the next frag in this (sub)section. - -@item fr_fix -Fixed number of characters we know we're going to emit to the output file. May -be zero. - -@item fr_var -Variable number of characters we may output, after the initial @code{fr_fix} -characters. May be zero. - -@item fr_offset -The interpretation of this field is controlled by @code{fr_type}. Generally, -if @code{fr_var} is non-zero, this is a repeat count: the @code{fr_var} -characters are output @code{fr_offset} times. - -@item line -Holds line number info when an assembler listing was requested. - -@item fr_type -Relaxation state. This field indicates the interpretation of @code{fr_offset}, -@code{fr_symbol} and the variable-length tail of the frag, as well as the -treatment it gets in various phases of processing. It does not affect the -initial @code{fr_fix} characters; they are always supposed to be output -verbatim (fixups aside). See below for specific values this field can have. - -@item fr_subtype -Relaxation substate. If the macro @code{md_relax_frag} isn't defined, this is -assumed to be an index into @code{TC_GENERIC_RELAX_TABLE} for the generic -relaxation code to process (@pxref{Relaxation}). If @code{md_relax_frag} is -defined, this field is available for any use by the CPU-specific code. - -@item fr_symbol -This normally indicates the symbol to use when relaxing the frag according to -@code{fr_type}. - -@item fr_opcode -Points to the lowest-addressed byte of the opcode, for use in relaxation. - -@item tc_frag_data -Target specific fragment data of type TC_FRAG_TYPE. -Only present if @code{TC_FRAG_TYPE} is defined. - -@item fr_file -@itemx fr_line -The file and line where this frag was last modified. - -@item fr_literal -Declared as a one-character array, this last field grows arbitrarily large to -hold the actual contents of the frag. -@end table - -These are the possible relaxation states, provided in the enumeration type -@code{relax_stateT}, and the interpretations they represent for the other -fields: - -@table @code -@item rs_align -@itemx rs_align_code -The start of the following frag should be aligned on some boundary. In this -frag, @code{fr_offset} is the logarithm (base 2) of the alignment in bytes. -(For example, if alignment on an 8-byte boundary were desired, @code{fr_offset} -would have a value of 3.) The variable characters indicate the fill pattern to -be used. The @code{fr_subtype} field holds the maximum number of bytes to skip -when doing this alignment. If more bytes are needed, the alignment is not -done. An @code{fr_subtype} value of 0 means no maximum, which is the normal -case. Target backends can use @code{rs_align_code} to handle certain types of -alignment differently. - -@item rs_broken_word -This indicates that ``broken word'' processing should be done (@pxref{Broken -words}). If broken word processing is not necessary on the target machine, -this enumerator value will not be defined. - -@item rs_cfa -This state is used to implement exception frame optimizations. The -@code{fr_symbol} is an expression symbol for the subtraction which may be -relaxed. The @code{fr_opcode} field holds the frag for the preceding command -byte. The @code{fr_offset} field holds the offset within that frag. The -@code{fr_subtype} field is used during relaxation to hold the current size of -the frag. - -@item rs_fill -The variable characters are to be repeated @code{fr_offset} times. If -@code{fr_offset} is 0, this frag has a length of @code{fr_fix}. Most frags -have this type. - -@item rs_leb128 -This state is used to implement the DWARF ``little endian base 128'' -variable length number format. The @code{fr_symbol} is always an expression -symbol, as constant expressions are emitted directly. The @code{fr_offset} -field is used during relaxation to hold the previous size of the number so -that we can determine if the fragment changed size. - -@item rs_machine_dependent -Displacement relaxation is to be done on this frag. The target is indicated by -@code{fr_symbol} and @code{fr_offset}, and @code{fr_subtype} indicates the -particular machine-specific addressing mode desired. @xref{Relaxation}. - -@item rs_org -The start of the following frag should be pushed back to some specific offset -within the section. (Some assemblers use the value as an absolute address; GAS -does not handle final absolute addresses, but rather requires that the linker -set them.) The offset is given by @code{fr_symbol} and @code{fr_offset}; one -character from the variable-length tail is used as the fill character. -@end table - -@cindex frchainS structure -A chain of frags is built up for each subsection. The data structure -describing a chain is called a @code{frchainS}, and contains the following -fields: - -@table @code -@item frch_root -Points to the first frag in the chain. May be NULL if there are no frags in -this chain. -@item frch_last -Points to the last frag in the chain, or NULL if there are none. -@item frch_next -Next in the list of @code{frchainS} structures. -@item frch_seg -Indicates the section this frag chain belongs to. -@item frch_subseg -Subsection (subsegment) number of this frag chain. -@item fix_root, fix_tail -(Defined only if @code{BFD_ASSEMBLER} is defined). Point to first and last -@code{fixS} structures associated with this subsection. -@item frch_obstack -Not currently used. Intended to be used for frag allocation for this -subsection. This should reduce frag generation caused by switching sections. -@item frch_frag_now -The current frag for this subsegment. -@end table - -A @code{frchainS} corresponds to a subsection; each section has a list of -@code{frchainS} records associated with it. In most cases, only one subsection -of each section is used, so the list will only be one element long, but any -processing of frag chains should be prepared to deal with multiple chains per -section. - -After the input files have been completely processed, and no more frags are to -be generated, the frag chains are joined into one per section for further -processing. After this point, it is safe to operate on one chain per section. - -The assembler always has a current frag, named @code{frag_now}. More space is -allocated for the current frag using the @code{frag_more} function; this -returns a pointer to the amount of requested space. Relaxing is done using -variant frags allocated by @code{frag_var} or @code{frag_variant} -(@pxref{Relaxation}). - -@node GAS processing -@section What GAS does when it runs -@cindex internals, overview - -This is a quick look at what an assembler run looks like. - -@itemize @bullet -@item -The assembler initializes itself by calling various init routines. - -@item -For each source file, the @code{read_a_source_file} function reads in the file -and parses it. The global variable @code{input_line_pointer} points to the -current text; it is guaranteed to be correct up to the end of the line, but not -farther. - -@item -For each line, the assembler passes labels to the @code{colon} function, and -isolates the first word. If it looks like a pseudo-op, the word is looked up -in the pseudo-op hash table @code{po_hash} and dispatched to a pseudo-op -routine. Otherwise, the target dependent @code{md_assemble} routine is called -to parse the instruction. - -@item -When pseudo-ops or instructions output data, they add it to a frag, calling -@code{frag_more} to get space to store it in. - -@item -Pseudo-ops and instructions can also output fixups created by @code{fix_new} or -@code{fix_new_exp}. - -@item -For certain targets, instructions can create variant frags which are used to -store relaxation information (@pxref{Relaxation}). - -@item -When the input file is finished, the @code{write_object_file} routine is -called. It assigns addresses to all the frags (@code{relax_segment}), resolves -all the fixups (@code{fixup_segment}), resolves all the symbol values (using -@code{resolve_symbol_value}), and finally writes out the file (in the -@code{BFD_ASSEMBLER} case, this is done by simply calling @code{bfd_close}). -@end itemize - -@node Porting GAS -@section Porting GAS -@cindex porting - -Each GAS target specifies two main things: the CPU file and the object format -file. Two main switches in the @file{configure.in} file handle this. The -first switches on CPU type to set the shell variable @code{cpu_type}. The -second switches on the entire target to set the shell variable @code{fmt}. - -The configure script uses the value of @code{cpu_type} to select two files in -the @file{config} directory: @file{tc-@var{CPU}.c} and @file{tc-@var{CPU}.h}. -The configuration process will create a file named @file{targ-cpu.h} in the -build directory which includes @file{tc-@var{CPU}.h}. - -The configure script also uses the value of @code{fmt} to select two files: -@file{obj-@var{fmt}.c} and @file{obj-@var{fmt}.h}. The configuration process -will create a file named @file{obj-format.h} in the build directory which -includes @file{obj-@var{fmt}.h}. - -You can also set the emulation in the configure script by setting the @code{em} -variable. Normally the default value of @samp{generic} is fine. The -configuration process will create a file named @file{targ-env.h} in the build -directory which includes @file{te-@var{em}.h}. - -Porting GAS to a new CPU requires writing the @file{tc-@var{CPU}} files. -Porting GAS to a new object file format requires writing the -@file{obj-@var{fmt}} files. There is sometimes some interaction between these -two files, but it is normally minimal. - -The best approach is, of course, to copy existing files. The documentation -below assumes that you are looking at existing files to see usage details. - -These interfaces have grown over time, and have never been carefully thought -out or designed. Nothing about the interfaces described here is cast in stone. -It is possible that they will change from one version of the assembler to the -next. Also, new macros are added all the time as they are needed. - -@menu -* CPU backend:: Writing a CPU backend -* Object format backend:: Writing an object format backend -* Emulations:: Writing emulation files -@end menu - -@node CPU backend -@subsection Writing a CPU backend -@cindex CPU backend -@cindex @file{tc-@var{CPU}} - -The CPU backend files are the heart of the assembler. They are the only parts -of the assembler which actually know anything about the instruction set of the -processor. - -You must define a reasonably small list of macros and functions in the CPU -backend files. You may define a large number of additional macros in the CPU -backend files, not all of which are documented here. You must, of course, -define macros in the @file{.h} file, which is included by every assembler -source file. You may define the functions as macros in the @file{.h} file, or -as functions in the @file{.c} file. - -@table @code -@item TC_@var{CPU} -@cindex TC_@var{CPU} -By convention, you should define this macro in the @file{.h} file. For -example, @file{tc-m68k.h} defines @code{TC_M68K}. You might have to use this -if it is necessary to add CPU specific code to the object format file. - -@item TARGET_FORMAT -This macro is the BFD target name to use when creating the output file. This -will normally depend upon the @code{OBJ_@var{FMT}} macro. - -@item TARGET_ARCH -This macro is the BFD architecture to pass to @code{bfd_set_arch_mach}. - -@item TARGET_MACH -This macro is the BFD machine number to pass to @code{bfd_set_arch_mach}. If -it is not defined, GAS will use 0. - -@item TARGET_BYTES_BIG_ENDIAN -You should define this macro to be non-zero if the target is big endian, and -zero if the target is little endian. - -@item md_shortopts -@itemx md_longopts -@itemx md_longopts_size -@itemx md_parse_option -@itemx md_show_usage -@cindex md_shortopts -@cindex md_longopts -@cindex md_longopts_size -@cindex md_parse_option -@cindex md_show_usage -GAS uses these variables and functions during option processing. -@code{md_shortopts} is a @code{const char *} which GAS adds to the machine -independent string passed to @code{getopt}. @code{md_longopts} is a -@code{struct option []} which GAS adds to the machine independent long options -passed to @code{getopt}; you may use @code{OPTION_MD_BASE}, defined in -@file{as.h}, as the start of a set of long option indices, if necessary. -@code{md_longopts_size} is a @code{size_t} holding the size @code{md_longopts}. -GAS will call @code{md_parse_option} whenever @code{getopt} returns an -unrecognized code, presumably indicating a special code value which appears in -@code{md_longopts}. GAS will call @code{md_show_usage} when a usage message is -printed; it should print a description of the machine specific options. - -@item md_begin -@cindex md_begin -GAS will call this function at the start of the assembly, after the command -line arguments have been parsed and all the machine independent initializations -have been completed. - -@item md_cleanup -@cindex md_cleanup -If you define this macro, GAS will call it at the end of each input file. - -@item md_assemble -@cindex md_assemble -GAS will call this function for each input line which does not contain a -pseudo-op. The argument is a null terminated string. The function should -assemble the string as an instruction with operands. Normally -@code{md_assemble} will do this by calling @code{frag_more} and writing out -some bytes (@pxref{Frags}). @code{md_assemble} will call @code{fix_new} to -create fixups as needed (@pxref{Fixups}). Targets which need to do special -purpose relaxation will call @code{frag_var}. - -@item md_pseudo_table -@cindex md_pseudo_table -This is a const array of type @code{pseudo_typeS}. It is a mapping from -pseudo-op names to functions. You should use this table to implement -pseudo-ops which are specific to the CPU. - -@item tc_conditional_pseudoop -@cindex tc_conditional_pseudoop -If this macro is defined, GAS will call it with a @code{pseudo_typeS} argument. -It should return non-zero if the pseudo-op is a conditional which controls -whether code is assembled, such as @samp{.if}. GAS knows about the normal -conditional pseudo-ops,and you should normally not have to define this macro. - -@item comment_chars -@cindex comment_chars -This is a null terminated @code{const char} array of characters which start a -comment. - -@item tc_comment_chars -@cindex tc_comment_chars -If this macro is defined, GAS will use it instead of @code{comment_chars}. - -@item tc_symbol_chars -@cindex tc_symbol_chars -If this macro is defined, it is a pointer to a null terminated list of -characters which may appear in an operand. GAS already assumes that all -alphanumberic characters, and @samp{$}, @samp{.}, and @samp{_} may appear in an -operand (see @samp{symbol_chars} in @file{app.c}). This macro may be defined -to treat additional characters as appearing in an operand. This affects the -way in which GAS removes whitespace before passing the string to -@samp{md_assemble}. - -@item line_comment_chars -@cindex line_comment_chars -This is a null terminated @code{const char} array of characters which start a -comment when they appear at the start of a line. - -@item line_separator_chars -@cindex line_separator_chars -This is a null terminated @code{const char} array of characters which separate -lines (semicolon and newline are such characters by default, and need not be -listed in this array). - -@item EXP_CHARS -@cindex EXP_CHARS -This is a null terminated @code{const char} array of characters which may be -used as the exponent character in a floating point number. This is normally -@code{"eE"}. - -@item FLT_CHARS -@cindex FLT_CHARS -This is a null terminated @code{const char} array of characters which may be -used to indicate a floating point constant. A zero followed by one of these -characters is assumed to be followed by a floating point number; thus they -operate the way that @code{0x} is used to indicate a hexadecimal constant. -Usually this includes @samp{r} and @samp{f}. - -@item LEX_AT -@cindex LEX_AT -You may define this macro to the lexical type of the @kbd{@}} character. The -default is zero. - -Lexical types are a combination of @code{LEX_NAME} and @code{LEX_BEGIN_NAME}, -both defined in @file{read.h}. @code{LEX_NAME} indicates that the character -may appear in a name. @code{LEX_BEGIN_NAME} indicates that the character may -appear at the beginning of a nem. - -@item LEX_BR -@cindex LEX_BR -You may define this macro to the lexical type of the brace characters @kbd{@{}, -@kbd{@}}, @kbd{[}, and @kbd{]}. The default value is zero. - -@item LEX_PCT -@cindex LEX_PCT -You may define this macro to the lexical type of the @kbd{%} character. The -default value is zero. - -@item LEX_QM -@cindex LEX_QM -You may define this macro to the lexical type of the @kbd{?} character. The -default value it zero. - -@item LEX_DOLLAR -@cindex LEX_DOLLAR -You may define this macro to the lexical type of the @kbd{$} character. The -default value is @code{LEX_NAME | LEX_BEGIN_NAME}. - -@item SINGLE_QUOTE_STRINGS -@cindex SINGLE_QUOTE_STRINGS -If you define this macro, GAS will treat single quotes as string delimiters. -Normally only double quotes are accepted as string delimiters. - -@item NO_STRING_ESCAPES -@cindex NO_STRING_ESCAPES -If you define this macro, GAS will not permit escape sequences in a string. - -@item ONLY_STANDARD_ESCAPES -@cindex ONLY_STANDARD_ESCAPES -If you define this macro, GAS will warn about the use of nonstandard escape -sequences in a string. - -@item md_start_line_hook -@cindex md_start_line_hook -If you define this macro, GAS will call it at the start of each line. - -@item LABELS_WITHOUT_COLONS -@cindex LABELS_WITHOUT_COLONS -If you define this macro, GAS will assume that any text at the start of a line -is a label, even if it does not have a colon. - -@item TC_START_LABEL -@cindex TC_START_LABEL -You may define this macro to control what GAS considers to be a label. The -default definition is to accept any name followed by a colon character. - -@item NO_PSEUDO_DOT -@cindex NO_PSEUDO_DOT -If you define this macro, GAS will not require pseudo-ops to start with a -@kbd{.} character. - -@item TC_EQUAL_IN_INSN -@cindex TC_EQUAL_IN_INSN -If you define this macro, it should return nonzero if the instruction is -permitted to contain an @kbd{=} character. GAS will use this to decide if a -@kbd{=} is an assignment or an instruction. - -@item TC_EOL_IN_INSN -@cindex TC_EOL_IN_INSN -If you define this macro, it should return nonzero if the current input line -pointer should be treated as the end of a line. - -@item md_parse_name -@cindex md_parse_name -If this macro is defined, GAS will call it for any symbol found in an -expression. You can define this to handle special symbols in a special way. -If a symbol always has a certain value, you should normally enter it in the -symbol table, perhaps using @code{reg_section}. - -@item md_undefined_symbol -@cindex md_undefined_symbol -GAS will call this function when a symbol table lookup fails, before it -creates a new symbol. Typically this would be used to supply symbols whose -name or value changes dynamically, possibly in a context sensitive way. -Predefined symbols with fixed values, such as register names or condition -codes, are typically entered directly into the symbol table when @code{md_begin} -is called. - -@item md_operand -@cindex md_operand -GAS will call this function for any expression that can not be recognized. -When the function is called, @code{input_line_pointer} will point to the start -of the expression. - -@item tc_unrecognized_line -@cindex tc_unrecognized_line -If you define this macro, GAS will call it when it finds a line that it can not -parse. - -@item md_do_align -@cindex md_do_align -You may define this macro to handle an alignment directive. GAS will call it -when the directive is seen in the input file. For example, the i386 backend -uses this to generate efficient nop instructions of varying lengths, depending -upon the number of bytes that the alignment will skip. - -@item HANDLE_ALIGN -@cindex HANDLE_ALIGN -You may define this macro to do special handling for an alignment directive. -GAS will call it at the end of the assembly. - -@item md_flush_pending_output -@cindex md_flush_pending_output -If you define this macro, GAS will call it each time it skips any space because of a -space filling or alignment or data allocation pseudo-op. - -@item TC_PARSE_CONS_EXPRESSION -@cindex TC_PARSE_CONS_EXPRESSION -You may define this macro to parse an expression used in a data allocation -pseudo-op such as @code{.word}. You can use this to recognize relocation -directives that may appear in such directives. - -@item BITFIELD_CONS_EXPRESSION -@cindex BITFIELD_CONS_EXPRESSION -If you define this macro, GAS will recognize bitfield instructions in data -allocation pseudo-ops, as used on the i960. - -@item REPEAT_CONS_EXPRESSION -@cindex REPEAT_CONS_EXPRESSION -If you define this macro, GAS will recognize repeat counts in data allocation -pseudo-ops, as used on the MIPS. - -@item md_cons_align -@cindex md_cons_align -You may define this macro to do any special alignment before a data allocation -pseudo-op. - -@item TC_CONS_FIX_NEW -@cindex TC_CONS_FIX_NEW -You may define this macro to generate a fixup for a data allocation pseudo-op. - -@item TC_INIT_FIX_DATA (@var{fixp}) -@cindex TC_INIT_FIX_DATA -A C statement to initialize the target specific fields of fixup @var{fixp}. -These fields are defined with the @code{TC_FIX_TYPE} macro. - -@item TC_FIX_DATA_PRINT (@var{stream}, @var{fixp}) -@cindex TC_FIX_DATA_PRINT -A C statement to output target specific debugging information for -fixup @var{fixp} to @var{stream}. This macro is called by @code{print_fixup}. - -@item TC_FRAG_INIT (@var{fragp}) -@cindex TC_FRAG_INIT -A C statement to initialize the target specific fields of frag @var{fragp}. -These fields are defined with the @code{TC_FRAG_TYPE} macro. - -@item md_number_to_chars -@cindex md_number_to_chars -This should just call either @code{number_to_chars_bigendian} or -@code{number_to_chars_littleendian}, whichever is appropriate. On targets like -the MIPS which support options to change the endianness, which function to call -is a runtime decision. On other targets, @code{md_number_to_chars} can be a -simple macro. - -@item md_reloc_size -@cindex md_reloc_size -This variable is only used in the original version of gas (not -@code{BFD_ASSEMBLER} and not @code{MANY_SEGMENTS}). It holds the size of a -relocation entry. - -@item WORKING_DOT_WORD -@itemx md_short_jump_size -@itemx md_long_jump_size -@itemx md_create_short_jump -@itemx md_create_long_jump -@cindex WORKING_DOT_WORD -@cindex md_short_jump_size -@cindex md_long_jump_size -@cindex md_create_short_jump -@cindex md_create_long_jump -If @code{WORKING_DOT_WORD} is defined, GAS will not do broken word processing -(@pxref{Broken words}). Otherwise, you should set @code{md_short_jump_size} to -the size of a short jump (a jump that is just long enough to jump around a long -jmp) and @code{md_long_jump_size} to the size of a long jump (a jump that can -go anywhere in the function), You should define @code{md_create_short_jump} to -create a short jump around a long jump, and define @code{md_create_long_jump} -to create a long jump. - -@item md_estimate_size_before_relax -@cindex md_estimate_size_before_relax -This function returns an estimate of the size of a @code{rs_machine_dependent} -frag before any relaxing is done. It may also create any necessary -relocations. - -@item md_relax_frag -@cindex md_relax_frag -This macro may be defined to relax a frag. GAS will call this with the frag -and the change in size of all previous frags; @code{md_relax_frag} should -return the change in size of the frag. @xref{Relaxation}. - -@item TC_GENERIC_RELAX_TABLE -@cindex TC_GENERIC_RELAX_TABLE -If you do not define @code{md_relax_frag}, you may define -@code{TC_GENERIC_RELAX_TABLE} as a table of @code{relax_typeS} structures. The -machine independent code knows how to use such a table to relax PC relative -references. See @file{tc-m68k.c} for an example. @xref{Relaxation}. - -@item md_prepare_relax_scan -@cindex md_prepare_relax_scan -If defined, it is a C statement that is invoked prior to scanning -the relax table. - -@item LINKER_RELAXING_SHRINKS_ONLY -@cindex LINKER_RELAXING_SHRINKS_ONLY -If you define this macro, and the global variable @samp{linkrelax} is set -(because of a command line option, or unconditionally in @code{md_begin}), a -@samp{.align} directive will cause extra space to be allocated. The linker can -then discard this space when relaxing the section. - -@item md_convert_frag -@cindex md_convert_frag -GAS will call this for each rs_machine_dependent fragment. -The instruction is completed using the data from the relaxation pass. -It may also create any necessary relocations. -@xref{Relaxation}. - -@item md_apply_fix -@cindex md_apply_fix -GAS will call this for each fixup. It should store the correct value in the -object file. @code{fixup_segment} performs a generic overflow check on the -@code{valueT *val} argument after @code{md_apply_fix} returns. If the overflow -check is relevant for the target machine, then @code{md_apply_fix} should -modify @code{valueT *val}, typically to the value stored in the object file. - -@item TC_HANDLES_FX_DONE -@cindex TC_HANDLES_FX_DONE -If this macro is defined, it means that @code{md_apply_fix} correctly sets the -@code{fx_done} field in the fixup. - -@item tc_gen_reloc -@cindex tc_gen_reloc -A @code{BFD_ASSEMBLER} GAS will call this to generate a reloc. GAS will pass -the resulting reloc to @code{bfd_install_relocation}. This currently works -poorly, as @code{bfd_install_relocation} often does the wrong thing, and -instances of @code{tc_gen_reloc} have been written to work around the problems, -which in turns makes it difficult to fix @code{bfd_install_relocation}. - -@item RELOC_EXPANSION_POSSIBLE -@cindex RELOC_EXPANSION_POSSIBLE -If you define this macro, it means that @code{tc_gen_reloc} may return multiple -relocation entries for a single fixup. In this case, the return value of -@code{tc_gen_reloc} is a pointer to a null terminated array. - -@item MAX_RELOC_EXPANSION -@cindex MAX_RELOC_EXPANSION -You must define this if @code{RELOC_EXPANSION_POSSIBLE} is defined; it -indicates the largest number of relocs which @code{tc_gen_reloc} may return for -a single fixup. - -@item tc_fix_adjustable -@cindex tc_fix_adjustable -You may define this macro to indicate whether a fixup against a locally defined -symbol should be adjusted to be against the section symbol. It should return a -non-zero value if the adjustment is acceptable. - -@item MD_PCREL_FROM_SECTION -@cindex MD_PCREL_FROM_SECTION -If you define this macro, it should return the offset between the address of a -PC relative fixup and the position from which the PC relative adjustment should -be made. On many processors, the base of a PC relative instruction is the next -instruction, so this macro would return the length of an instruction. - -@item md_pcrel_from -@cindex md_pcrel_from -This is the default value of @code{MD_PCREL_FROM_SECTION}. The difference is -that @code{md_pcrel_from} does not take a section argument. - -@item tc_frob_label -@cindex tc_frob_label -If you define this macro, GAS will call it each time a label is defined. - -@item md_section_align -@cindex md_section_align -GAS will call this function for each section at the end of the assembly, to -permit the CPU backend to adjust the alignment of a section. - -@item tc_frob_section -@cindex tc_frob_section -If you define this macro, a @code{BFD_ASSEMBLER} GAS will call it for each -section at the end of the assembly. - -@item tc_frob_file_before_adjust -@cindex tc_frob_file_before_adjust -If you define this macro, GAS will call it after the symbol values are -resolved, but before the fixups have been changed from local symbols to section -symbols. - -@item tc_frob_symbol -@cindex tc_frob_symbol -If you define this macro, GAS will call it for each symbol. You can indicate -that the symbol should not be included in the object file by definining this -macro to set its second argument to a non-zero value. - -@item tc_frob_file -@cindex tc_frob_file -If you define this macro, GAS will call it after the symbol table has been -completed, but before the relocations have been generated. - -@item tc_frob_file_after_relocs -If you define this macro, GAS will call it after the relocs have been -generated. - -@item LISTING_HEADER -A string to use on the header line of a listing. The default value is simply -@code{"GAS LISTING"}. - -@item LISTING_WORD_SIZE -The number of bytes to put into a word in a listing. This affects the way the -bytes are clumped together in the listing. For example, a value of 2 might -print @samp{1234 5678} where a value of 1 would print @samp{12 34 56 78}. The -default value is 4. - -@item LISTING_LHS_WIDTH -The number of words of data to print on the first line of a listing for a -particular source line, where each word is @code{LISTING_WORD_SIZE} bytes. The -default value is 1. - -@item LISTING_LHS_WIDTH_SECOND -Like @code{LISTING_LHS_WIDTH}, but applying to the second and subsequent line -of the data printed for a particular source line. The default value is 1. - -@item LISTING_LHS_CONT_LINES -The maximum number of continuation lines to print in a listing for a particular -source line. The default value is 4. - -@item LISTING_RHS_WIDTH -The maximum number of characters to print from one line of the input file. The -default value is 100. -@end table - -@node Object format backend -@subsection Writing an object format backend -@cindex object format backend -@cindex @file{obj-@var{fmt}} - -As with the CPU backend, the object format backend must define a few things, -and may define some other things. The interface to the object format backend -is generally simpler; most of the support for an object file format consists of -defining a number of pseudo-ops. - -The object format @file{.h} file must include @file{targ-cpu.h}. - -This section will only define the @code{BFD_ASSEMBLER} version of GAS. It is -impossible to support a new object file format using any other version anyhow, -as the original GAS version only supports a.out, and the @code{MANY_SEGMENTS} -GAS version only supports COFF. - -@table @code -@item OBJ_@var{format} -@cindex OBJ_@var{format} -By convention, you should define this macro in the @file{.h} file. For -example, @file{obj-elf.h} defines @code{OBJ_ELF}. You might have to use this -if it is necessary to add object file format specific code to the CPU file. - -@item obj_begin -If you define this macro, GAS will call it at the start of the assembly, after -the command line arguments have been parsed and all the machine independent -initializations have been completed. - -@item obj_app_file -@cindex obj_app_file -If you define this macro, GAS will invoke it when it sees a @code{.file} -pseudo-op or a @samp{#} line as used by the C preprocessor. - -@item OBJ_COPY_SYMBOL_ATTRIBUTES -@cindex OBJ_COPY_SYMBOL_ATTRIBUTES -You should define this macro to copy object format specific information from -one symbol to another. GAS will call it when one symbol is equated to -another. - -@item obj_fix_adjustable -@cindex obj_fix_adjustable -You may define this macro to indicate whether a fixup against a locally defined -symbol should be adjusted to be against the section symbol. It should return a -non-zero value if the adjustment is acceptable. - -@item obj_sec_sym_ok_for_reloc -@cindex obj_sec_sym_ok_for_reloc -You may define this macro to indicate that it is OK to use a section symbol in -a relocateion entry. If it is not, GAS will define a new symbol at the start -of a section. - -@item EMIT_SECTION_SYMBOLS -@cindex EMIT_SECTION_SYMBOLS -You should define this macro with a zero value if you do not want to include -section symbols in the output symbol table. The default value for this macro -is one. - -@item obj_adjust_symtab -@cindex obj_adjust_symtab -If you define this macro, GAS will invoke it just before setting the symbol -table of the output BFD. For example, the COFF support uses this macro to -generate a @code{.file} symbol if none was generated previously. - -@item SEPARATE_STAB_SECTIONS -@cindex SEPARATE_STAB_SECTIONS -You may define this macro to indicate that stabs should be placed in separate -sections, as in ELF. - -@item INIT_STAB_SECTION -@cindex INIT_STAB_SECTION -You may define this macro to initialize the stabs section in the output file. - -@item OBJ_PROCESS_STAB -@cindex OBJ_PROCESS_STAB -You may define this macro to do specific processing on a stabs entry. - -@item obj_frob_section -@cindex obj_frob_section -If you define this macro, GAS will call it for each section at the end of the -assembly. - -@item obj_frob_file_before_adjust -@cindex obj_frob_file_before_adjust -If you define this macro, GAS will call it after the symbol values are -resolved, but before the fixups have been changed from local symbols to section -symbols. - -@item obj_frob_symbol -@cindex obj_frob_symbol -If you define this macro, GAS will call it for each symbol. You can indicate -that the symbol should not be included in the object file by definining this -macro to set its second argument to a non-zero value. - -@item obj_frob_file -@cindex obj_frob_file -If you define this macro, GAS will call it after the symbol table has been -completed, but before the relocations have been generated. - -@item obj_frob_file_after_relocs -If you define this macro, GAS will call it after the relocs have been -generated. - -@item SET_SECTION_RELOCS (@var{sec}, @var{relocs}, @var{n}) -@cindex SET_SECTION_RELOCS -If you define this, it will be called after the relocations have been set for -the section @var{sec}. The list of relocations is in @var{relocs}, and the -number of relocations is in @var{n}. This is only used with -@code{BFD_ASSEMBLER}. -@end table - -@node Emulations -@subsection Writing emulation files - -Normally you do not have to write an emulation file. You can just use -@file{te-generic.h}. - -If you do write your own emulation file, it must include @file{obj-format.h}. - -An emulation file will often define @code{TE_@var{EM}}; this may then be used -in other files to change the output. - -@node Relaxation -@section Relaxation -@cindex relaxation - -@dfn{Relaxation} is a generic term used when the size of some instruction or -data depends upon the value of some symbol or other data. - -GAS knows to relax a particular type of PC relative relocation using a table. -You can also define arbitrarily complex forms of relaxation yourself. - -@menu -* Relaxing with a table:: Relaxing with a table -* General relaxing:: General relaxing -@end menu - -@node Relaxing with a table -@subsection Relaxing with a table - -If you do not define @code{md_relax_frag}, and you do define -@code{TC_GENERIC_RELAX_TABLE}, GAS will relax @code{rs_machine_dependent} frags -based on the frag subtype and the displacement to some specified target -address. The basic idea is that several machines have different addressing -modes for instructions that can specify different ranges of values, with -successive modes able to access wider ranges, including the entirety of the -previous range. Smaller ranges are assumed to be more desirable (perhaps the -instruction requires one word instead of two or three); if this is not the -case, don't describe the smaller-range, inferior mode. - -The @code{fr_subtype} field of a frag is an index into a CPU-specific -relaxation table. That table entry indicates the range of values that can be -stored, the number of bytes that will have to be added to the frag to -accomodate the addressing mode, and the index of the next entry to examine if -the value to be stored is outside the range accessible by the current -addressing mode. The @code{fr_symbol} field of the frag indicates what symbol -is to be accessed; the @code{fr_offset} field is added in. - -If the @code{TC_PCREL_ADJUST} macro is defined, which currently should only happen -for the NS32k family, the @code{TC_PCREL_ADJUST} macro is called on the frag to -compute an adjustment to be made to the displacement. - -The value fitted by the relaxation code is always assumed to be a displacement -from the current frag. (More specifically, from @code{fr_fix} bytes into the -frag.) -@ignore -This seems kinda silly. What about fitting small absolute values? I suppose -@code{md_assemble} is supposed to take care of that, but if the operand is a -difference between symbols, it might not be able to, if the difference was not -computable yet. -@end ignore - -The end of the relaxation sequence is indicated by a ``next'' value of 0. This -means that the first entry in the table can't be used. - -For some configurations, the linker can do relaxing within a section of an -object file. If call instructions of various sizes exist, the linker can -determine which should be used in each instance, when a symbol's value is -resolved. In order for the linker to avoid wasting space and having to insert -no-op instructions, it must be able to expand or shrink the section contents -while still preserving intra-section references and meeting alignment -requirements. - -For the i960 using b.out format, no expansion is done; instead, each -@samp{.align} directive causes extra space to be allocated, enough that when -the linker is relaxing a section and removing unneeded space, it can discard -some or all of this extra padding and cause the following data to be correctly -aligned. - -For the H8/300, I think the linker expands calls that can't reach, and doesn't -worry about alignment issues; the cpu probably never needs any significant -alignment beyond the instruction size. - -The relaxation table type contains these fields: - -@table @code -@item long rlx_forward -Forward reach, must be non-negative. -@item long rlx_backward -Backward reach, must be zero or negative. -@item rlx_length -Length in bytes of this addressing mode. -@item rlx_more -Index of the next-longer relax state, or zero if there is no next relax state. -@end table - -The relaxation is done in @code{relax_segment} in @file{write.c}. The -difference in the length fields between the original mode and the one finally -chosen by the relaxing code is taken as the size by which the current frag will -be increased in size. For example, if the initial relaxing mode has a length -of 2 bytes, and because of the size of the displacement, it gets upgraded to a -mode with a size of 6 bytes, it is assumed that the frag will grow by 4 bytes. -(The initial two bytes should have been part of the fixed portion of the frag, -since it is already known that they will be output.) This growth must be -effected by @code{md_convert_frag}; it should increase the @code{fr_fix} field -by the appropriate size, and fill in the appropriate bytes of the frag. -(Enough space for the maximum growth should have been allocated in the call to -frag_var as the second argument.) - -If relocation records are needed, they should be emitted by -@code{md_estimate_size_before_relax}. This function should examine the target -symbol of the supplied frag and correct the @code{fr_subtype} of the frag if -needed. When this function is called, if the symbol has not yet been defined, -it will not become defined later; however, its value may still change if the -section it is in gets relaxed. - -Usually, if the symbol is in the same section as the frag (given by the -@var{sec} argument), the narrowest likely relaxation mode is stored in -@code{fr_subtype}, and that's that. - -If the symbol is undefined, or in a different section (and therefore moveable -to an arbitrarily large distance), the largest available relaxation mode is -specified, @code{fix_new} is called to produce the relocation record, -@code{fr_fix} is increased to include the relocated field (remember, this -storage was allocated when @code{frag_var} was called), and @code{frag_wane} is -called to convert the frag to an @code{rs_fill} frag with no variant part. -Sometimes changing addressing modes may also require rewriting the instruction. -It can be accessed via @code{fr_opcode} or @code{fr_fix}. - -Sometimes @code{fr_var} is increased instead, and @code{frag_wane} is not -called. I'm not sure, but I think this is to keep @code{fr_fix} referring to -an earlier byte, and @code{fr_subtype} set to @code{rs_machine_dependent} so -that @code{md_convert_frag} will get called. - -@node General relaxing -@subsection General relaxing - -If using a simple table is not suitable, you may implement arbitrarily complex -relaxation semantics yourself. For example, the MIPS backend uses this to emit -different instruction sequences depending upon the size of the symbol being -accessed. - -When you assemble an instruction that may need relaxation, you should allocate -a frag using @code{frag_var} or @code{frag_variant} with a type of -@code{rs_machine_dependent}. You should store some sort of information in the -@code{fr_subtype} field so that you can figure out what to do with the frag -later. - -When GAS reaches the end of the input file, it will look through the frags and -work out their final sizes. - -GAS will first call @code{md_estimate_size_before_relax} on each -@code{rs_machine_dependent} frag. This function must return an estimated size -for the frag. - -GAS will then loop over the frags, calling @code{md_relax_frag} on each -@code{rs_machine_dependent} frag. This function should return the change in -size of the frag. GAS will keep looping over the frags until none of the frags -changes size. - -@node Broken words -@section Broken words -@cindex internals, broken words -@cindex broken words - -Some compilers, including GCC, will sometimes emit switch tables specifying -16-bit @code{.word} displacements to branch targets, and branch instructions -that load entries from that table to compute the target address. If this is -done on a 32-bit machine, there is a chance (at least with really large -functions) that the displacement will not fit in 16 bits. The assembler -handles this using a concept called @dfn{broken words}. This idea is well -named, since there is an implied promise that the 16-bit field will in fact -hold the specified displacement. - -If broken word processing is enabled, and a situation like this is encountered, -the assembler will insert a jump instruction into the instruction stream, close -enough to be reached with the 16-bit displacement. This jump instruction will -transfer to the real desired target address. Thus, as long as the @code{.word} -value really is used as a displacement to compute an address to jump to, the -net effect will be correct (minus a very small efficiency cost). If -@code{.word} directives with label differences for values are used for other -purposes, however, things may not work properly. For targets which use broken -words, the @samp{-K} option will warn when a broken word is discovered. - -The broken word code is turned off by the @code{WORKING_DOT_WORD} macro. It -isn't needed if @code{.word} emits a value large enough to contain an address -(or, more correctly, any possible difference between two addresses). - -@node Internal functions -@section Internal functions - -This section describes basic internal functions used by GAS. - -@menu -* Warning and error messages:: Warning and error messages -* Hash tables:: Hash tables -@end menu - -@node Warning and error messages -@subsection Warning and error messages - -@deftypefun @{@} int had_warnings (void) -@deftypefunx @{@} int had_errors (void) -Returns non-zero if any warnings or errors, respectively, have been printed -during this invocation. -@end deftypefun - -@deftypefun @{@} void as_perror (const char *@var{gripe}, const char *@var{filename}) -Displays a BFD or system error, then clears the error status. -@end deftypefun - -@deftypefun @{@} void as_tsktsk (const char *@var{format}, ...) -@deftypefunx @{@} void as_warn (const char *@var{format}, ...) -@deftypefunx @{@} void as_bad (const char *@var{format}, ...) -@deftypefunx @{@} void as_fatal (const char *@var{format}, ...) -These functions display messages about something amiss with the input file, or -internal problems in the assembler itself. The current file name and line -number are printed, followed by the supplied message, formatted using -@code{vfprintf}, and a final newline. - -An error indicated by @code{as_bad} will result in a non-zero exit status when -the assembler has finished. Calling @code{as_fatal} will result in immediate -termination of the assembler process. -@end deftypefun - -@deftypefun @{@} void as_warn_where (char *@var{file}, unsigned int @var{line}, const char *@var{format}, ...) -@deftypefunx @{@} void as_bad_where (char *@var{file}, unsigned int @var{line}, const char *@var{format}, ...) -These variants permit specification of the file name and line number, and are -used when problems are detected when reprocessing information saved away when -processing some earlier part of the file. For example, fixups are processed -after all input has been read, but messages about fixups should refer to the -original filename and line number that they are applicable to. -@end deftypefun - -@deftypefun @{@} void fprint_value (FILE *@var{file}, valueT @var{val}) -@deftypefunx @{@} void sprint_value (char *@var{buf}, valueT @var{val}) -These functions are helpful for converting a @code{valueT} value into printable -format, in case it's wider than modes that @code{*printf} can handle. If the -type is narrow enough, a decimal number will be produced; otherwise, it will be -in hexadecimal. The value itself is not examined to make this determination. -@end deftypefun - -@node Hash tables -@subsection Hash tables -@cindex hash tables - -@deftypefun @{@} @{struct hash_control *@} hash_new (void) -Creates the hash table control structure. -@end deftypefun - -@deftypefun @{@} void hash_die (struct hash_control *) -Destroy a hash table. -@end deftypefun - -@deftypefun @{@} PTR hash_delete (struct hash_control *, const char *) -Deletes entry from the hash table, returns the value it had. -@end deftypefun - -@deftypefun @{@} PTR hash_replace (struct hash_control *, const char *, PTR) -Updates the value for an entry already in the table, returning the old value. -If no entry was found, just returns NULL. -@end deftypefun - -@deftypefun @{@} @{const char *@} hash_insert (struct hash_control *, const char *, PTR) -Inserting a value already in the table is an error. -Returns an error message or NULL. -@end deftypefun - -@deftypefun @{@} @{const char *@} hash_jam (struct hash_control *, const char *, PTR) -Inserts if the value isn't already present, updates it if it is. -@end deftypefun - -@node Test suite -@section Test suite -@cindex test suite - -The test suite is kind of lame for most processors. Often it only checks to -see if a couple of files can be assembled without the assembler reporting any -errors. For more complete testing, write a test which either examines the -assembler listing, or runs @code{objdump} and examines its output. For the -latter, the TCL procedure @code{run_dump_test} may come in handy. It takes the -base name of a file, and looks for @file{@var{file}.d}. This file should -contain as its initial lines a set of variable settings in @samp{#} comments, -in the form: - -@example - #@var{varname}: @var{value} -@end example - -The @var{varname} may be @code{objdump}, @code{nm}, or @code{as}, in which case -it specifies the options to be passed to the specified programs. Exactly one -of @code{objdump} or @code{nm} must be specified, as that also specifies which -program to run after the assembler has finished. If @var{varname} is -@code{source}, it specifies the name of the source file; otherwise, -@file{@var{file}.s} is used. If @var{varname} is @code{name}, it specifies the -name of the test to be used in the @code{pass} or @code{fail} messages. - -The non-commented parts of the file are interpreted as regular expressions, one -per line. Blank lines in the @code{objdump} or @code{nm} output are skipped, -as are blank lines in the @code{.d} file; the other lines are tested to see if -the regular expression matches the program output. If it does not, the test -fails. - -Note that this means the tests must be modified if the @code{objdump} output -style is changed. - -@bye -@c Local Variables: -@c fill-column: 79 -@c End: |